SDスナッチャー解析 1. 2. 3.
SDスナッチャ−1バイトの謎
パッチ版SDスナッチャーはMSX実機でもエミュレータでも動作しますが、
エミュレータではなぜかステータスが異常な値になります。
これはエミュレータのバグなのでしょうか。
というわけで、ステータス異常の原因を探ってみました。
私はゲームの作り方とか画面表示関係は全くわからないので、すべて自己流
解釈です。なので本気にしないでね。
------------
レベルからLIFEやSTR等の値を求めるには、ステータス表みたいなものを使
うのですね。計算するのかと思った。
エミュではメモリ上のステータス表の一部が壊れます。これがステータス異
常の原因。
では、なぜエミュだけステータス表が壊れる?
ステータス表はゲーム起動後まもなくVRAMのEA00h〜EBFFhに置かれます。
VRAMにはプログラムの一部が転送されていたり、サウンドカートリッジのRAM
を使ってもまだ足りなかったのね。プログラマさんの苦労の跡が・・・
VRAMのEA00h〜がいつ壊れるのか、SDスナのあちこちにトラップを仕掛けて
VRAMをディスクに落として調べました。そしてやっと怪しいルーチンを突き
止めましたが、なんか変です。
エミュレータはSDスナのプログラム通りに動いているとしか思えないのです。
プログラム通りに動作すると、VRAMのEA00h〜EA7Fhを破壊してしまうのですが、
実機ではVRAM破壊は起こらない。
VDPコマンドに詳しい方なら簡単に原因が分かると思いますが。
SDスナのDISK 1、487セクタを0E00h〜に読み込んで、0E2Dhから見て下さい。
VDPコマンドで横線を引くルーチンです。
下記のようにレジスタ等を設定してこのルーチンをコールすると、VRAMのEA00h
〜EA7Fhが壊れます。画面一番下の横線です。実機ではVRAMのE980h〜E9FFhに
カラーコードが書き込まれますが、エミュレータではE980h〜EA7Fhに書かれます。
HL=00D3h BC=0003h (C02Bh)=01h (0007h)=ポート#0 write
---------
0E4Fhの 「INC A」はバグなのではと思いますが、みなさんの考えは?
「INC A」がなくてもというか、なければエミュでも正常、もちろん実機での
動作は変わりません。
自分で答えが出せないので、SDスナのプログラマさんに聞いてみたいです。
SDスナ解析のつづき
トップページに戻る