トップ改造コードメモ > スティック情報


マイナス形式のパッドアドレスの場合、その後の4バイトにスティックの情報が入るようです。
※複数のゲームで確認しましたが、全てscePadPortOpenを使った方法
  (「自然」のパッドアドレス特定法C)で見つけたアドレスです。
  他の方法で見つけた場合は後ろにスティック情報が無い可能性もあります。

パッドアドレスを基準とすると、
+2 右スティック左右
+3    〃   上下
+4 左スティック左右
+5    〃   上下
の情報が1バイトずつ入り、
左右の場合、(左)$00〜$ff(右)
上下の場合、(上)$00〜$ff(下)が入ります。

グラディウスVを持っている人は次のコードを試してみてください。
スコア表示を「0x[8ケタの16進数]」にする
9CBDAB8C 2059E762
9CBDABAC 38B9FDFD
スコア部分にスティックの状態を表示
9CBDABA0 2054E774
9CBDABA4 90984661
グラディウスVの1Pのパッドアドレスは00576142なので、そこから+2した00576144から4バイトを
スコア部分に表示させています。
複数バイトを数字で表す場合、値は位の低い右側から1バイトずつ格納されていくので、一番右側が
右スティック左右の情報、一番左側が左スティック上下の情報になります。

なお、スティックから指を離した時は必ずしも中央の$7f($80)になるわけではなく、多少前後した
値で止まります。上のコードを使った場合、指を離しても
   1P 0x707f8274
などと表示されると思います。
「値が$00/$ffのときのみ動作」「xx以下/yy以上のときのみ動作」といったコードを作る場合には
特に気にする必要はありませんが、例えば「(スティックの状態−$7f)の値を加え続ける」という
コードを作る場合、「特定のボタンが押されているときのみ有効」「一定範囲内(中心から±$20位?)
なら動作しない」などとしておかないと、スティックに触れていない場合でも値が変わり続けてしまう
ので注意してください。

ちなみに、PAR2の条件比較コード(Dコード/Eコード)は2バイト単位で判定するので、スティック情報を使う場合は
5コード(バイトコピー)を使って空きメモリに1バイトコピーしてから比較する必要があります。
(斜め入力を判断する場合は2バイトのままでもいいですが)
PAR3形式のコードにはバイト単位での比較があるのでこの手順は必要ありません。
例:上のグラディウスVで、右スティック上下の値を条件比較に使いたい場合(復号化状態のコード)
50576145 00000001 :00576145から空きメモリへ1バイトコピー(この場合は000fff00へコピー)
000fff00 00000000
D00fff00 000000xx :コピーした値を条件比較に使う
…


戻る