CDDA の再生が音割れする. ゲームとしてこの曲をかけると発生するが、 Audio CD player で同じ曲をかけると音割れは発生しない.
ゲームとして問題の曲を再生しているときに ADPCM 音源の入力値が最低値で固定されていることを確認. NEC ロゴでの ADPCM でのボイスの後の音が残っている可能性がある.
<BTS:65> の対処後、 ADPCM 音源再生後の制御を若干替えたために発生したと思われる.
ADPCM 再生完了後に PCE から ADPCM 制御レジスタを更新するのが普通だが、
しない場合は MSM5205 の decode が続いていたことが原因.
<BTS:65> にて「書込み条件から削除した理由」の過程でこの問題が発生.
ただし元のコードは不必要に複雑に書いていたこと、削除しきっていなかった関連コードも同様の状態であった. ADPCM 用 RAM から MSM5205 へ渡す FIFO に関連する初期化条件のコードを簡潔に作り直した.
本件はてすとの項目を出して、カーソルを動かすと本来 ADPCM がなる部分で、
ならないことから解析ができた.
<BTS:67> の通り、 ADPCM 再生完了後に ADPCM 制御レジスタを更新していない.
具体的には最初のえぬーいーしーの発音以降 address 0x1ff80d は data bit6 = 1 のままである.
その後 ADPCM を再度再生する場合, 同 address を trb, tsb 命令で操作する.
この際, data bit6 はえぬーいーしーの再生が終わっているので、data bit6 は 0 をプログラム側が期待している.
現状の実装ではこのレジスタは 6280 から書いた値をそのまま返す実装になっているので data bit6 は1を返している.
よって最初のえぬーいーしー以降は全てのADPCM再生は正常にできないらしい.
本件では件名のCDDAの音割れの対応のみ修正の報告とする.
<BTS:12> のゲームが進行しない問題は別件でそれは修正が困難なため保留にしている.
<BTS:39> #8 の ADPCM 再生条件 bit を 6 から 5 に変更したため、このソフトで問題となる bit6 = 1 のまま放置の状態は再生状態放置ではなく停止状態なので問題がなくなった.