今回から実装に移ります。影響範囲を局所的にするために、多少邪道な方法を取ります。方針として以下の方針で作業します。
- 登録所メインSR: $03DAEBに入った直後でテンポラリのフラグを立て、終了直前でフラグをクリアする
- スタートボタンの入力に反応するのは1のフラグが立っている間+現在のウィンドウIDが#$3A(名前入力用ウィンドウ)の場合のみ
- 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)(省略)


コメント