コードはどこだ?データはどこだ? 視覚的にコード/データを区別する
さて、とりあえずソースコードは手に入りましたが、一から読むのは素人にはちょっと厳しいですね。
プログラムではない無駄な部分も混ざっているらしいし・・・
というわけで、なんとかズルをできないかと考えてみました。
例えば、グラフィックデータの部分なら、何らかの方法でコード部と区別できないだろうか?
MSXのグラフィックデータについて調べてみると、
「横8ドット(ピクセル)の点の有無を1バイトで表現する」
という方式だということがわかりました。
(例えば、横8ドットのうち、一つも点が描かれなければ16進数で"00h"、全ての点が描かれれば"FFh"、一つおきに点が描かれれば"AAh"となる)
ROMデータをこの方式で覗けば、グラフィックデータの位置がなんとなくわかりそうです。
というわけで、それを確かめるプログラムを作成しました。
patview.exe(patview.lzh : ファイルサイズ 65,389バイト)
LZH形式で圧縮された、Windowsの実行ファイルです。プログラムはhspで作成しました。
展開後、生成されたpatview.exeをzanac.romと同一のフォルダに移動し、実行してください。
プログラムを実行すると、かなり大きい(1024×1024ぐらい?)ウィンドウに、グラフィックデータが表示されます。
(ちなみに、プログラムを終了するとき、このウィンドウに「×」ボタンが無いので驚かれるかもしれません。
もう一つ、カップ型アイコンのウィンドウもひっそりと開いています。こちらの「×」ボタンを押すとプログラムは終了します。)
さて、表示されたグラフィックの中に、なんとなくゲームのグラフィックデータのようなものが見えないでしょうか?
このページをWindowsでご覧になっておらず、プログラムを実行できない方に解説しますと、
(1)なんとなく文字・数字っぽいもの、またはゲーム中のキャラクタのようなものがある、ような気がするが、崩れている
(2)また、グラフィックとして見られるデータはあまり多くはない・・・ほとんどグラフィック以外のデータか、コード部分である
という結果となりました。
グラフィックデータっぽい部分に注目してみると、本来、画面に表示されているデータそのままの部分と、微妙に異なる部分があるようです。
どうやら、グラフィックデータはROM内では圧縮され、ゲーム実行時に展開されて、MSXの中のキャラクタパターンを保持・表示する機能(キャラクタジェネレータ)に
登録される模様です。
解析の第一段階として、まずはグラフィックデータ圧縮/展開から調べていくことにしました。
ウィルスかと思ったよ!気持ち悪いプログラムだなあ!と気分を害しつつZANAC解析のトップへ戻る
トップへ戻る