PlayLoud!! 別館

■元記事
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   $a9
6809の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

冗談のような回避策ですが、これでゲームも正常に動作しつつ、コンティニューの制限もなくなります。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

管理人/副管理人のみ編集できます