最終更新: keigox68000 2015年02月04日(水) 11:23:14履歴
■元記事
2011-02-22
コナミのA-JAXは、難易度が高い上にコンティニューが最高でも5回という厳しい仕様です。
この制限を取っ払って、気持よく最終面を目指しましょう。
A-JAXのメインCPUはKONAMIカスタム(?)らしき6809互換ニーモニックのCPUです。
コンティニュー回数は20A9Hに格納されていて、書き込みルーチンは以下のとおりです。
これでコンティニュー回数はカウントされなくなりますが、この後以下の点で苦労しました。
チェックルーチンは以下の計算でROM全体のチェックサムを求めています。
詳細な範囲はわかりませんが、メモリ内を絨毯爆撃で読み出してbレジスタに加算しています。(yはインデックスレジスタ。)
さらに念入りに繰り上がりをaレジスタに加算しています。
ROMの書き換えによって生じたチェックサムの差分を求めてみます。
ワークエリアがFFHでフィルされているので、ここを1バイトだけ、12H減らしたEDHに書き換えてみます。
冗談のような回避策ですが、これでゲームも正常に動作しつつ、コンティニューの制限もなくなります。
2011-02-22
コナミのA-JAXは、難易度が高い上にコンティニューが最高でも5回という厳しい仕様です。
この制限を取っ払って、気持よく最終面を目指しましょう。
■改造ポイント 770_l01.n11 コンティニュー回数増加を無くす 8CFBH 8B C4 A9 → AE AE AE ワークエリアチェックサム調整 FFD0H FF → ED
A-JAXのメインCPUはKONAMIカスタム(?)らしき6809互換ニーモニックのCPUです。
コンティニュー回数は20A9Hに格納されていて、書き込みルーチンは以下のとおりです。
8CFB: 8B C4 A9 inc $a96809のNOPで潰しますが、ニーモニックは同じもののオペコードは6809の12Hと違い、AEHとなります。
8CFB: AE NOP 8CFC: AE NOP 8CFD: AE NOP
これでコンティニュー回数はカウントされなくなりますが、この後以下の点で苦労しました。
- バトランティスの改造のようにROMチェックルーチンを潰すと、初期設定処理も潰してしまい、ゲームが正常に進行しなくなる。
- ROMチェックを通過した後にどこかからに勝手ルーチンを置いてプログラムの自己書き換えを試みても、ROM全体をチェクしているので引っかかる。
- プログラムに直接手が入れられないので、メモリの最上位にある割り込みベクタを書き換え、勝手ルーチンへ飛ばす試みも同様に引っかかる。
チェックルーチンは以下の計算でROM全体のチェックサムを求めています。
詳細な範囲はわかりませんが、メモリ内を絨毯爆撃で読み出してbレジスタに加算しています。(yはインデックスレジスタ。)
さらに念入りに繰り上がりをaレジスタに加算しています。
815E: 17 32 addb ,-y 8160: 18 00 adca #$00 8162: 08 24 FF leax #$-01,x 8165: 63 F3 bne $815a (-13)
ROMの書き換えによって生じたチェックサムの差分を求めてみます。
書き換え前 8BH + C4H + A9H 合計 1F8H ↓ 書き換え後 AEH + AEH + AEH 合計 20AH差分は、20AH - 1F8H = 12H となります。
ワークエリアがFFHでフィルされているので、ここを1バイトだけ、12H減らしたEDHに書き換えてみます。
FFD0H FF → ED
冗談のような回避策ですが、これでゲームも正常に動作しつつ、コンティニューの制限もなくなります。
コメントをかく