<BTS:3> と <BTS:58> の問題として CD sector 読み込み単位を1にする方針で進めていたが、このソフトでキャラ化けが頻発する.
CD sector 読み込み単位を替えてデータ転送が悪くなったわけではないらしい.
キャラの化け方は安定しないが発生確率は高い.
具体的な調査はできていないが、CD 読み込み時間がかわったことにより VRAM へ転送する期間がかわったのか、CPU から VRAM への転送が途中で1バイトずれているような印象をうける.
CD sector 読み込み単位を1固定にできなくなってしまって対応をどうするか判断に困っている.
VRAM への転送タイミングはエミュレータでは構造上たぶん再現しないので詳細に追う場合は実機での計測が必要. 計測は現段階では課題が多く現実的ではない.
CD-ROM sector 読み込み単位を1に固定する方針を廃止.
CD-ROM sector の fifo は従来は全てのデータを一度に fifo を詰め込んでいたが、下記の方針に変更.
- 1 sector ごとに fifo が空になるまで待つ. DATA IN, REQ = 0 でしばらく待つ.
- fifo が 空になったら満杯になるまで再度 data を fifo へいれる.
- fifo が 満杯になったら DATA IN, REQ=1 として 6280, ADPCM controller から読めるようにする.
すべてハードで処理することによって empty->full の待ち時間のみ発生するのでこのソフトでキャラ化けの影響はない.
ADPCM RAM への転送も問題なかったので修正済みにする.
この件の修正は件名のソフト名ではなく、龍虎の拳(自前コード??)と鏡の国のレジェンド(自前コード)と Games Express に共通する READ(6) の SCSI status の遷移の問題である.
これらのソフトでは 1 sector を読んだ後, SCSI status が一定期間 DATA IN + REQ にならないことを期待して何かしらの処理をするようにしている.
当初この問題は 1 sector ずつ読んで MCU で再度 memory card の seek などを得て上記の一定期間を得た. これにより1sectorごとに読み込みに結構長い時間がかかるようになった. 件名のソフトではなぜかそれでキャラ化けするようになった.
このため一定期間の取得方法を fifo empty -> full までになるまで待つ変更した.
CD読み込み時間を等速相当に設定ではキャラ化が起きないことを確認したので終了.