ディグダグです。 まずはブートケーブルでROMイメージを読み出して、 VBAに放り込むと… カートリッジエラー でんげんをきってください ま、予想はしてたけどさ。 0x02000000から0x20000バイトを切り出してNESヘッダを追加。 virtuaNESで…動いた! ラッキー、FC版持ってないからこれで動かなかったらお手上げだった。 それではGNESを起動しまして、 まずはキャラクタステータスの見極め。 メモリエディタでゼロページをぼーっと眺めてみると、どうやらB0番地がそうらしい。 手動で数値を0x0Cに書き換えると…死亡。間違いない。 よってここにそのまま"on write"でブレイクポイントを仕掛けて敵に体当たり。…ヒット。 E453 lda #$0C E455 sta $B0 はい大当たり。"lda #$0C"を"lda #$00"に書き換えて終了…あれ? 敵にあたると、死んだときの音が鳴って暴走してる… こりゃ分岐つぶさなきゃダメだということで、プログラムをさかのぼる。 E403 cmp #$09 E405 bcc $E444 E407 jmp $D793 …ここね。分岐すると死亡確定というわけで、 "bcc $E444"(90 3D)を"bcc $E407"(90 00)に書き換えて分岐をつぶす。 …オッケー、当たらない。 と、思ったらファイガーの炎が直撃。別ルーチンかよ… 気を取り直して再度サーチ。 …ヒット個所は前回と同じ。ということでまたプログラムをさかのぼる。 E43E lda $E0 E440 cmp $E2 E442 bcs $E407 どうもここだな。今度は分岐しないと死亡確定なので、 "cmp $E2"(C5 E2)を"cmp $E0"(C5 E0)にして、直後のbcsを無条件分岐化。 …オッケー、死んでない。 どうせ岩も別判定なんだろ…はいヒット。 E094 lda #$06 E096 sta $00B0,y あれ、さっきと命令が違う… さかのぼっても分岐が見つからないし、ダメ元で"lda #$06"(A9 06)を"lda #$00"(A9 00)に書き換えてみる。 …やっぱり死ぬよねぇ…あれ、死んでない。ラッキー。 と思ったら敵もつぶせないでやんの。インデックス書き込みを使っている理由はそれか。 さて困った。 キャラクタIDをyレジスタに読み込んで、でもってID=0が自機なわけで… 要するにあれだろ、yレジスタが0にならなきゃいいわけだろ。ということでプログラムをさかのぼる。 E051 ldx #$00 ここかな? "ldy #$00"(A0 00)を"ldy #$01"(A0 01)にして、と。 見事岩が自機をすり抜けて敵だけにヒット。 これでやっと無敵完成~。 ROMイメージでのアドレスはExxx=2xxxになっているので、X-TAコードは 320024060000 3200244100E0 320020520001 になる。 マスターコードを探しにかかろう。 ADVTermの候補は100015DCだが、例によって止まる止まる。 何とか見つけたのが 100015E80007 0000CC6C000A 40面まで止まらなかったから、多分大丈夫だろう。 次はGBA-PAR用に変換 マスターコード 386588D5 2413E5D6 155A7064 70D9A400 無敵 0A0E54D0 50D5C1A5 367BDCEE 8CC787A1 A291A00D 850FD18E ロッキー用コードは…FC版持ってないから確認しようがないけど一応 体当たり無敵 FC4D498E 炎無敵 D103D5F8 岩つぶされない F97CEECA これにて終了。 …自殺コマンドも作っといたほうがよかったかな?ま、いっか。