押された:1
押されてない:0
で下位から
A
B
Select
Start
Right
Left
Up
Down
R
L
X
Y
を1bitずつ入れた奴 XOR 0x2C00 XOR 0x3FF
で多分合ってる、はず。
何も押してない時はどっかに書いてある通り0x2FFF。
押されてない:0
で下位から
A
B
Select
Start
Right
Left
Up
Down
R
L
X
Y
を1bitずつ入れた奴 XOR 0x2C00 XOR 0x3FF
で多分合ってる、はず。
何も押してない時はどっかに書いてある通り0x2FFF。
smogonに載ってたメッセージビルドのうち mes(12)の部分が
0208812C E1D220B0 ldrh r2,[r2] ; r2 = *0x04000130 (*KEYINPUT) & 0x0000ffff
02088130 E1D110B0 ldrh r1,[r1] ; r1 = *0x2FFFFA8 & 0x0000ffff
02088134 E1D039B8 ldrh r3,[r0,#0x98] ; r3 = *0x2ffff98 & 0x0000ffff
02088138 E1820001 orr r0,r2,r1 ; r0 = (*0x2FFFFA8 & 0x0000ffff) | *KEYINPUT
0208813C E1800803 orr r0,r0,r3,lsl #0x10 ; r0 = ((*0x2ffff98 & 0x0000ffff) << 16) | ((*0x2FFFFA8 & 0x0000ffff) | *KEYINPUT)
02088140 E585001C str r0,[r5,#0x1C] ; mes[0xC] = ((*0x2ffff98 & 0x0000ffff) << 16) | ((*0x2FFFFA8 & 0x0000ffff) | *KEYINPUT)
Tec系のサイトによれば
このうち *0x04000130 (*KEYINPUT) は A から L までのキー情報を含み
XとYは、ヒンジ開閉、ペンタッチと同じ *0x04000136 に含まれる
Ktxad氏のブログ 2011/2/27 に これと関連した記述がある
メッセージ24バイト目には何かのタイマーっぽいものの値が入るけど起動直後はタイマーが動いてないからいつも0になってたのかも?
でもソフトリセットから処理に入ると一度0になってからカウンタが1進んだ後に参照されるので1になる?
場合によっては2や3になることもあるのかもしれない。
(何のタイマーかよく分からないけどタッチスクリーンを押していない状態だと値が増えていく。押すと一時停止する)
両者を合わせると
*0x2ffff98 が 拡張キー に関連したものだろうとの推定はできる
ただ、*KEYINPUT が 直接に *0x04000130 とレジスターから読み取られているのと同様に拡張キーについても *0x04000136 から読んでいそうなもの
なんらかの事情で いったん 0x02ffff98 にストアしてるということなのかもしれない
XキーまたはYキーのみを入れた状態で初期SEEDがどうなるかを試せばわかりそうなきはするけれど
BWの検証モチが0状態につき未検証