SSブログ

孤独へ向って突っ走れ(21) [  PC-98x1(補完計画)]

逆アセンブル結果の解析は、ようやくコピーディスク判別ルーチンに到達した。昔そういう本を読んだことのある人ならピクピクッと反応するINT 1Bなるものが出てきた。DOSのファイル名によらない、BIOSによる低レベルのディスクアクセスだ。このアクセスに成功してしまうと、それはコピーディスクということになる。

このプログラムではアクセスに成功するとキャリーフラグを立てる。BIOSの仕様では処理に失敗するとキャリーフラグが立つのだが、それをわざわざ反転して使っているのは、ひょっとすると「ディスクアクセス成功こそが失敗」という意味なのかもしれない。これをサブルーチンの呼び出し元で調べて条件分岐する。そして最後はデッド・エンド(行きどまり)となる。せっかくだからデッド・エンドの所を出しておこう。ここに到達して嬉しいのはコードの解析をする人だけだな。普通ユーザーは途方に暮れる。



MOV AX,0005
CALL 98D0
98D0Hへ行ってこい
(サブルーチン98D0Hは、AXの値を元にデータセグメントから文字列を取得し、グラフィックVRAMに書き込む。今回の文字列は" 本ディスクはコピーディスクの可能性があります。")

0174: ;JMP Shortのラベルはここ
NOP
JMP Short 0174
無限ループ突入



さて、これはまだ私の最終目的地ではない。私の目的は2つある。まず、私は大昔、若いころにコピーガード外しの本を読んであまりに難しく、自分にはできないと負けを認めた。それが今まで、趣味プログラマーとしての私の限界だった。今回その自分の限界を超えることが1つめの目的だ。それは今日、超えた。プロテクト外し自体はしていないが、その場所と条件分岐を理解できればプロテクト外しをしたも同然だから。2つめの目的は、普通のゲームプレイヤーならば何十回とゲームをプレイすることで達成する全シーンの制覇を、まったく別の方法で達成することだ。具体的には、コードをたどってゆき、ディスクからビットマップデータ(Windows Bitmapという意味ではない)とパレットデータをどのように読み込むかを解析し、その方法に従ってディスク内の画像をすべてGIFまたはPNGファイルにする。この2つめの目的は、達成可能かどうかがまだ不明だ。なぜなら当時の画像はビットマップデータとパレットデータが別々に存在し、たとえビットマップデータのフォーマットが解析できてもそれに正しいパレットを適用できなければとんでもなくサイケな色合いになってしまったり、真っ黒になってしまったり(フェードインを目的として初期パレットが設定されている場合)する。果たして、ビットマップデータ読み込み時にパレットがいつも同じ手順で読み込まれているだろうか。もしそうならばプログラムを組んでEXEファイル内を検索し、自動的にパレット付きで画像を読むことができそうだが。もしも画像ごとに異なるタイミングでパレットを実現していたら、パレット実現は難しくなる。まさかプログラムを全部最後まで追いかけて行きビットマップごとの正しいパレットデータをメモするなんていう酔狂な真似はできない。そういうわけでこの解析はまだ始まったばかりという所だ。先に成功があるか失敗があるかはまったく不明だが、今はとにかく一歩を踏み出すしかない。

コメント(0) 

コメント 0

コメントの受付は締め切りました