解析を始める
解析にあたり、次のものを用意する必要があります。
ROMファイル
ROMカセットの内容をファイル化したもの。ZANACの場合、32キロバイト(=32768バイト)のファイルになります。
※注意
「ROMファイル」は、必ず
「自分が所持しているゲームカセットの内容を、PC等で 読み出せるようなデータファイルにしたもの」
を使用してください。 自分が所持していないゲームカセットのROMファイルを入手するのは、違法ですのでやめてください。
ROMファイルは"zanac.rom"というファイル名で保存します。
MSX、Z80に関する知識
もちろん、解析対象についての知識が多ければ多いほど良いでしょう。
ただし、昨今ではインターネットを通じて居ながらにして様々な情報を集めることができるため、この点はカバーできると考えています。
何より、目の前に最高の先生(ゲームのアセンブリソース)があります。まあ、何とかなるでしょう。
MSXパソコンとZ80に関するあらゆる資料
手に入る限りのあらゆる技術資料を集めます。
MSXゲームの解析の場合、Z80の命令セット表以外にも、MSXハードウェア、BIOSの資料も集めます。
インターネットで、英文の「MSX2 TECHNICAL HANDBOOK」なるものを発見しました。オフィシャルなものなのだろうか・・・?
逆アセンブラ(ディスアセンブラ)
Z80 CPU用の逆アセンブラを用意します。
ROMファイルを逆アセンブルすることにより、Z80アセンブリ言語で書かれたソースファイルが得られます。
MSXエミュレータ
トレース機能があると役に立ちます。
バイナリエディタ
ROMファイルのデータを直に参照する場合に使用します。
検索機能が付いているものを選びます。
ゲーム中に使われている文字列("ROUND"、"ZANAC")を検索してみましょう。
逆アセンブル
必要なソフトウェア・資料を集めたら、さっそく解析を開始します。
まずはROMファイルの逆アセンブルを行うのですが、ここで、最初の壁にぶつかります。
「MSXのROMカセットは、MSX自身からはどこのアドレスに見えるのか?」という問題です。
一般に、MSXにROMカセットを挿して起動した場合、ROMカセットの先頭部分は+4000Hから見えるらしいです。
そのため、逆アセンブルの際、「ROMファイルの先頭のアドレスは+4000H」と逆アセンブラに教えてやる必要があります。
また出力形式は、できればニーモニックとダンプ表示とを一緒に出力してください。
こんな形式です。
BIT 5,A ;5963 CB 6F
JP NZ,01986H ;5965 C2 86 19
(セミコロン";"までがニーモニック、その次がアドレス、後ろがダンプ表示)
逆アセンブルの結果、4000H〜BFFFHまでのアセンブリソースが出力されました。
2万行以上あります。早速、挫折しそうになりますが・・・
いよいよ、ソースの解読にかかります。
なお、MSXでは、ROMカセットの先頭16バイトはヘッダ情報で、プログラムには関係ないようです。
4010Hの行から追っていきます。
ところで、逆アセンブラで出力されたソースには、実際にはZ80に実行されない(できない)行も含まれています。
これらは、グラフィックデータやサウンドデータ等の部分を、逆アセンブラが強引にソースに解釈した結果、出力されています。
Z80の命令の部分・・・コード部 Z80の命令でない部分・・・データ部
データ部は、Z80の命令ではないので、逆アセンブルを行っても、その部分は無意味なソースが書いてあることになります。 しかし、普通の逆アセンブラは、コード部とデータ部を識別することはできない為、全てをコードとして扱い、律儀に逆アセンブルしてくれます。 Z80のプロになると、一見して判断できるようなのですが、私のような初心者にはとても・・・
プログラムを初めから最後まで全て追って行かないでも、初めから読まなくて良い部分はわからないのでしょうか?
2万行のリストに圧倒されつつ、ZANAC解析のトップへ戻る
トップへ戻る