その場しのぎの修正方法は判明したが、根本的な修正が難しいので保留とする.
1) PCE 側の program の問題
デモ画面終了直前に ADPCM を再生するが、これの終了処理をせずに READ(6) を発行する.
2) UperGrafx 側の controller のバグ
ADPCM の length register == 0 のときに再生を停めていなかったので、停めるように修正. 通常は ADPCM 側から割り込みをかけて PCE がそのレジスタの終了処理をするのでこれ以外はなくても問題がなかった.
3) UperGrafx 側の仮想 CD drive の問題
READ(6) の発行は下記.
08> 0012F0 20-> 6280
08> 0012CC 20-> ADPCM RAM 02
08> 001310 04-> 6280
本物の CD drive であれば 1 度目の READ(6) の処理の途中で終了処理をしていない ADPCM の再生は停まる. こちらの実装では読み込みが明らかに早いので 2 度目の READ(6) を追記してしまい、再生されてしまうのが原因.
その場しのぎの回避方法として READ(6) に待ち時間(1sectorごとに3ms程度)をいれることにより回避はできる.
mednafen pce_fast module でも再現.
CD読み込み時間を等速か高速に選べる設定を追加.
初期設定値は等速となり、その場合は改善した.