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スナ解析のつづき トップページに戻る