CD-ROM の 1 sector のロード時間を規格通り 1/75 秒に設定したところ、ロード時間が早いために問題になっていたソフトが結構直りました. 一方直らなかったソフトの傾向を見ると下記のようでした.
ロード時間の前後の処理時間を要求するもの
1 sector のロード時間を設定しても、その前後の準備時間や後処理の時間はわからないままです. 準備時間はシーク時間で別に書くとして、後処理のレジスタの変化の微妙なタイミング要求するソフトまでありました.
このような高い精度を要求するソフトは...正直に申しまして...プログラムが汚く読めたものではありません. 初期化やタイミング同期を省略しているので本物のハードのタイミングでのみ奇跡的に動いているものが多いです. これはプレイヤーが遊んで名作かというのは関係なくプログラマの性格やそのソースコードを使い回す職場が原因で困りものです.
シーク時間の再現を要求するもの
CDDA の音ズレの原因がロードではなくシークの時間の再現がいるようです. シーク時間は CD のレンズが物理的に動く時間で実機からの計測がいります. これもシークしてから再生すればいいだけなんですがとってないみたいです.
当ユニットのユーザーさんの間では人気のスーパーダライアスでは最初のクレジット音とゲームの開始も同期を取らずにシーク時間決め打ちで動いているようです. mednafen でもシーク時間を再現してないみたいで、ゲームを遊ぶ側にとってはダメな演出になっています.
ADPCM 用 RAM のメモリアクセス待ちの再現を要求するもの
風の伝説ザナドゥで港のシーンにいく前に CDDA 再生したまま, ADPCM 用の RAM (本物は DRAM) から VRAM に転送しているようでして. メモリアクセス待ちを設定しないのかずれてしまいます.
これは実機からの計測で待ち時間の法則性を得て再現性をあげる必要があります. 元のプログラムで CDDA を PAUSE するか時刻指定で再生し直すだけで同期はとれたと思うのですが...
実機計測かパッチか
(次回に続く)