インチキコード作成

というわけで、昨日に引き続きぁゃιぃコード作成。
今日のはオーダーされてるタイトルではないんですが、個人的に思い入れのあるやつで、是非入れて欲しいなー、というわけで調べてみた。 ついでに、このゲームは終盤が難しくて挫折した人が多いそうなので、本編とは関係なくゲームが有利になるコードを作ってみたりとか。
以下、ちょっと専門的な話です。 6502アセンブラがわかんないと意味わからないかも。
実は、プロアクションロッキーというのはコード数に制限があって、なんと一度にたった3バイトしかパッチを当てることができないのです。(T_T)→すんません。 今調べたら、同時に当てれるパッチは4バイトまででした。 例えば、「○○減らない」というコードを作ろうと思った場合に、「dec $xx」みたいな命令がソレだとすれば、「nop」で消してしまえば良いわけですが、そうすると2バイト書き換える必要があるわけです。 んで、例えばこれ以外にもう1つ「××減らない」というコードを併用しようと思っても、同時に3バイトしか書き換え不可なので、これらは同時に使えない! さて、どうするか…というわけで、これらのコードを何とか1バイトで作る方法は無いかな、と。→nopで消しても大丈夫だったみたい。(^^;)
色々考えた挙句、命令を「無効にする」のではなく、「無害にする」ようにすれば良いのではないか、と。 んで考えたのが、「dec $xx」という命令を「cmp $xx」に変えてしまう方法。 「dec」だと A レジスタの値が変わってしまいますが、「cmp」だとフラグ値を変えるだけで A レジスタの値は変えないわけです! というわけで、今回作ったコードはコレを使うことによって1バイトのパッチで済ませることに成功したわけです。 ただ、「cmp」の場合、フラグレジスタが変わってしまうので、当然その直後に条件分岐命令なんかある場合は誤動作する可能性が高いです。 パッチ当てる際には注意しましょう。
そんなわけで、コードの動作確認も兼ねて、久々にこのゲームをプレイ。 グラフィックなどの表現は今のゲーム機には到底及ばないものの、あの衝撃のエンディングは、十数年経っても色褪せません。 コレは、途中で挫折した人も是非観て欲しいです。