えーとまずはさっさとブートケーブルでROMイメージを読み出して、 VBAに放り込むと… カートリッジエラー でんげんをきってください マジですか。 まあいいや。 とっとと0x02000000から0x20000バイトを切り出してNESヘッダを追加。 virtuaNESで…動かない。 じゃあパソファミで…これも動かない。 GNES…もだめ。 NNNesterJ…撃沈。 famtasia……もういい。分かった。 仕方がないのでFCのROMを使ってサーチ開始。 が…GNESのデバッガ起動するとエラーで落ちるんですけど…(on win98SE) しょうがないのでwin2000に切り替え。 まずは最初にステージセレクトのコマンドを入力。 00A7番地が0x0Fに変化したので、ここにon readでブレイクポイントを仕掛ける。 何度か引っかかったが、D048番地の"lda $A7"がヒット。 すぐ下のD04F番地の"bne $D0C1"(D0 70)を"bne $D051"(D0 00)に書き換えることで、 コマンド入力が不要に。 ROMイメージ中の実アドレスは1D050番地になるため、X-TA用コードは 3201D0500000 になる。 次は周回数。これも近くにあり、00AA番地が該当。 おそらくクリアごとにインクリメントされていると思われるので、 今度はon writeでブレイクポイントを仕掛けて、7面をクリアする。 するとD459番地で予想どおりヒット。しかもご丁寧に続けてlda命令とcmp命令がある。これは間違いない。 試しにD45D番地"cmp #$02"(C9 02)を"cmp #$01"(C9 01)に書き換えると、1周クリアでエンディングになった。 よって、これまたROMイメージのアドレスに変換して、X-TA用に直す。 3201D45E00xx (xx=クリアに必要な周回数) さて今度は無敵を探そうと思うが、ややこしい。 まず、無敵時間のカウンタがあると考えサーチ。 どうやら0647番地がそうらしいが、固定してダメージを食らうと無敵にはなるものの、 アイテムも取れなくなる。 が、とりあえずここにブレイクポイントをon writeで仕掛けてみる。 2個所ほど引っかかったが、インクリメント命令はあるが根本的解決になっていない。 そこで、両方のヒット個所の近傍でアクセスしている04F0番地に注目。 ここがどうもステータスアドレスらしい。なので追い込みをかける。 しかし…どうやら敵のステータスまで一部同じアドレスで管理しているらしく解析は難航。 ダメージを食らった瞬間"ora 01"されていると思われるのだが、プログラムがとんでもなく複雑。 それでも、ステート単位でブレークポイントへのアクセスを監視したところ、どうにか気合で F5ED lda $04F0 F5F0 ora #$01 F5F2 sta $04F0 という個所を発見。即"ora #$01"(09 01)を"ora #$00"(09 00)に書き換えて無敵化完了。 3201F5F10000 そろそろマスターコードを探しにかかる。 ADVTermの候補は10001554だが、試行錯誤の末 100015640007 0000378E000A に決定。 しかし通しプレイをしていたら、ドラゴンが倒せない!! 無敵コードのせいか?と一瞬嫌な事が頭をよぎったが、単に武器が不味かっただけだった。 GBA-PAR用とアクションロッキー用コードに変換して、 一旦解析打ち切り。 GBA-PAR用コード マスターコード 897EB362 6E0DA7FF 5AFE13C6 6A7B0ED9 無敵 AB79799D F52EC4E2 ステージセレクトコマンド入力不要 A908A621 D2C3F42D 1周エンド 3F5FCFC8 451233C6 255周エンド 1A09860A 894334D8 プロアクションロッキー用コード 無敵 FCE14DCC ステージセレクトコマンド入力不要 FCA30D58 1周エンド設定 F952C586 255周エンド設定 FC93413E