SDスナッチャー解析 1. 2. 3.
またSDスナッチャー解析です。RuMSXで正常に動作しません。
敵を倒してもゴールドが0だったり、敵の攻撃がなかったり、どうなっているの
でしょう。SDスナッチャーも奥が深いです。
敵を倒したときに加算されるステータスは、ワークエリアにこのように入ります。
CEF0-1h GOLD
CEF2-3h RANK
CEF4-5h STR
CEF6-7h DEF
CEF8-9h SPD
プレイヤーのステータスはどこに入っているか、知ってますよね。
CE80h レベル
CE81h LIFE
CE82-3h LIFE(EXP)
CE84h STR
CE85-6h STR(EXP)
CE87h DEF
CE88-9h DEF(EXP)
CE8Ah SPD
CE8B-Ch SPD(EXP)
CE8D-Eh GOLD
ゴールドが増えない原因は、CEF0-1hに00,00が入るためです。
そこまでは簡単にわかりますが、これからが大変。CEF0-9hの値はどこから得る?
RANKはC2BD-Ehの値から求めています。SPDはC2BF-C0h、DEFはC2C1-2h、
STRはC2C3-4h、GOLDはC2CD-Ehです。RuMSXはC2BDh〜の値が異常なのです。
更にこの値はどこから得る?
ディスク1、67セクター +1E9(87E9h)のルーチンを実行すると、C2BFh〜に数値
がセットされます。87E9hルーチンは難しくて解析できません。
ここでストップしてます。
敵のステータス表?があって、そこから転送するのかなとか、いろいろ想像して
いますがゲームプログラムは難しい。ディスクゲームは大きいし、DOS解析の方が
楽かも知れません。
戦闘シーンのメモリマップです。
0200-3FFFh 481-511セクター
4000-7FFFh 32-63セクター
8000-ADFFh 64-86セクター
87E9hルーチン実行後にC2BFh〜をRuMSXの時と同じ値に書き替えると、実機でも
ゴールド0になります。このルーチンを解析するしかないですね。
(つづく)
SDスナッチャー解析の続きです。
87E9hルーチンを更に解析、89D2h〜のルーチンで敵のダメージを求めていることが
わかりました。
89D2hルーチンの途中にRAM,VRAMセーバーを挟んで、RuMSXとfMSXFANでの動作の違
いを調べていますが、原始的な方法のため作業がはかどりません。
fMSXFANでは正常に動作します。
それにしても異常動作の原因がさっぱりわかりません。
エミュレータなのでVRAM絡みかなと思いますが、敵ダメージ計算ではVRAMから
データ転送しているところが見つかりません。ダメージ計算のプログラム自身が
VRAMから転送された物なのですが、どう見ても正常です。
でもセーブしたRAMを見ると、RuとFANでは違うところが多いし。
謎ですね。森博司のミステリーより深い謎。
(つづく)
スナッチャー解析
トップページに戻る