mednafen debugger
PC $5FD6 の自前レジスタソースが原因.どの対処が適切か調査する.
自前コードによる address 0x1ff80b の制御は影響が大きい可能性大.
08> 0042DE 01-> 6280
08> 0042DF 2F (ここで進行が止まる)
問題の原因は進行が止まる命令発行から CD-ROM fifo 読み取り処理が変.
mednafen のデバッガでは問題を細かく終えなかったので簡単な手順を記載する.
1) 上記のコマンドを発行
2) 自前のレジスタ制御で 6280 が fifo からデータ数(具体的な数は不明)を読む
3) (予想)自前コードで必要な数のセクタを読んだら、別のルーチンに行く
4) ADPCM レジスタを制御してから、 ADPCM contoller が fifo からデータを読む
3) が問題で1つのコマンドに対し転送先を2つに分離している.
4)に入る条件がおそらくセクタのデータ単位(0x800 byte)で SCSI status (address 0x1ff800 read) が data-in ready になるまで時間がかかることを利用していると思われる.
試しに data-in ready になる時間を遅くしてみたところ正常に動作している.
止まる原因は 2) で 6280 が 0x2f sectors すべてを読み込んでしまい、その後に 4) に入り、 0x1ff80b.w = 2 になったところで動作が矛盾して停止する.
再度調査したところ HDL 側のバグがみつかり修正し、正常動作を確認した.
前回の雑な調査へのコメント.
> 6280 が 0x2f sectors すべてを読み込んでしまい、
0x2d sectors を読み込んで、残り 2 sectors のところで
> 0x1ff80b.w = 2 になったところで動作が矛盾して停止する.
ADPCM RAM への書き込み開始条件は細かいのだが、この値 & fifo 同期フラグとなっている. この fifo 同期フラグは 1 コマンド 1 転送先の場合は問題ないが、1 コマンド 2 転送先で途中で切り替える場合に更新条件が間違っていたことが原因.