FF2 の解析をあきらめた

ldy abs,x と ldx abs,y が存在するのを知らなかったのは前回書いたが、それと対になるであろう sty abs,x と sty abs,x は存在してないから気づかなかった(言い訳)。後継の互換CPUはあるかもね。

魔法の本を装備して攻撃するやつで、フリーズをするやつをみたところブリンクのほんが jmp $b6b3, それ以外は jmp $00a2 となる。 $b6b3 は ROM なんで放置して、 $00a2 のほうは xx yy zz とならんでいて xx が 0x7e (プレイヤー側)か 0x7f(敵側), zzyy は攻撃するキャラクタのポインタらしいから $6100 とか $6140 が入る。xx が jmp とか jsr になれば名前欄にいとも簡単に飛ばせるのに、志半ばで諦めた。

45階層バグというやつもみたら、本当に CPU スタックが延びていて笑える。スタックというデータ概念を持つデータ領域じゃなくて、CPU が push, pull, jsr, rts に使うスタックじゃん。それが延びる建物でデジョンは使えないから、戦闘を起こしてスタックをあふれさせるのが唯一の望みかなぁ。

スタックの先頭に NMI のベクタがあるのでそこに任意の命令を書ければ望みは9割方広がる。ただし、スタックをあふれさせるのは相当なリスキーで、通常の処理に戻るように修正するのは名前欄のデータ量では書けないと思う。これが移動シーケンスならともかく戦闘シーケンスを終了させるとなるとまた難しい。
あとスタックに書かれるデータでは push は 8bit 単位のデータだろうし、 jsr では普通の命令のアドレスなので、都合良く名前欄とかアイテム欄に飛ばせるかは望みがかなり薄い。

というわけで別の切り口のバグでも見つけないと一気にエンディングに飛ぶことは難しいと判断して FF2 はあきらめた。