DQ3 登録中にスタートボタンを押すとプリセットの名前を自動入力する2

今回から実装に移ります。影響範囲を局所的にするために、多少邪道な方法を取ります。方針として以下の方針で作業します。

  1. 登録所メインSR: $03DAEBに入った直後でテンポラリのフラグを立て、終了直前でフラグをクリアする
  2. スタートボタンの入力に反応するのは1のフラグが立っている間+現在のウィンドウIDが#$3A(名前入力用ウィンドウ)の場合のみ
  3. 1,2の条件に該当した場合のみスタートボタンを押した時の専用処理SRを動作させる。$0332A0で$7E2A98のオフセットではなく、プリセット名前入力のSRへのオフセットに差し替える

実際のプリセットの名前をセットする処理は次回に回すことにして、とりあえず今回は枠を作ることにします。

  • SR: $03DAEB 登録所メイン
03DAEB PHP Push P Flag
03DAEC REP #$30 m=off(A/M:16b) x=off(X/Y:16b)
03DAEE PHA Push A
03DAEF PHX Push X
03DAF0 PHY Push Y
03DAF1 PHB Push DB
03DAF2 PEA #$7E7E Push #$7E7E
03DAF5 PLB Pull DB
03DAF6 PLB Pull DB
03DAF7 JSL $CF5000 SR: $0F5000 登録中フラグON
03DD07 JSL $CF500B SR: $0F500B 登録中フラグOFF
03DD0B PLB Pull DB
03DD0C REP #$30 m=off(A/M:16b) x=off(X/Y:16b)
03DD0E PLY Pull Y
03DD0F PLX Pull X
03DD10 PLA Pull A
03DD11 PLP Pull P Flag
03DD12 RTL return
  • SR: $0F5000 登録所フラグON(新SR)
0F5000 JSL $C90789 SR: $090789 引数:1#$35B9 引数:2#$7E 引数:3#$80 引数:4#$00 引数:5#$00 RAM上情報変更(ON)
0F500A RTL return
  • SR: $0F5000 登録所フラグOFF(新SR)
0F500B JSL $C907CC SR: $0907CC 引数:1#$35B9 引数:2#$7E 引数:3#$80 引数:4#$00 引数:5#$00 RAM上情報変更(OFF)
0F5015 RTL return
  • SR: $033253 ウィンドウ上入力処理
033253 LDA #$F090 A=#$F090 スタートボタンの入力も処理する
033289 JSL $CF502A SR: $0F502A
03328D BCC #$E6 if(c==off) goto $033275
03328F LDA #$F090 A=#$F090 スタートボタンの入力も処理する
033292 STA $2A6A $2A6A=A
033295 JSR $3246 SR: $033246
033298 BNE #$06 if(z==off) goto $0332A0
03329A JSL $C1E32E SR: $01E32E 引数:1#$003D 再生BGM設定
0332A0 JSR $FE19 SR: $03FE19
0332A3 JMP $FE29 ($03FE29) goto $($03FE29+X)
  • SR: $0F502A ?(新SR)
0F502A LDA #$0010 A=#$0010 スタートボタンの入力の場合
0F502D AND $2A68 A&=$2A68
0F5030 BEQ #$06 if(z==on) goto $0F5038
0F5032 JSL $CF5016 SR: $0F5016 登録処理中で名前入力中か(該当c=on)
0F5036 BCC #$05 if(c==off) goto $0F503D
0F5038 JSL $C331A3 SR: $0331A3
0F503C RTL return
0F503D STZ $2AA6 $2AA6=#$00 該当条件以外はスタートボタンの入力は通常通り
0F5040 STZ $2A6A $2A6A=#$00
0F5043 JSL $C331B9 SR: $0331B9
0F5047 CLC c=off
0F5048 RTL return
  • SR: $03FE19 スタートボタン入力の場合にSRオフセットを差し替え(新SR)
03FE19 LDA #$0010 A=#$0010
03FE1C AND $2A68 A&=$2A68
03FE1F BNE #$04 if(z==off) goto $03FE25
03FE21 LDX $2A98 X=$2A98
03FE24 RTS return
03FE25 LDX #$0012 X=#$0012
03FE28 RTS return
  • SR: $0F5016 登録処理中で名前入力中か(該当c=on)(新SR)(省略)