コードはどこだ?データはどこだ? 視覚的にコード/データを区別する
さて、とりあえずソースコードは手に入りましたが、一から読むのは素人にはちょっと厳しいですね。
プログラムではない無駄な部分も混ざっているらしいし・・・

というわけで、なんとかズルをできないかと考えてみました。
例えば、グラフィックデータの部分なら、何らかの方法でコード部と区別できないだろうか?

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解析のトップへ戻る

トップへ戻る