一部の PCM の再生がおかしくなる件

なんとなく、特定の PCM 音だけ(下記)変ということに気づいた。というわけでその音をシミュレータにかけてみる。

K053260: Start = 06fdeb, End = 070aac, rate = 0f40, PPCM = yes

ROM のポインタがなぜか減っている(060200)ので変わり目を見ると 0x6ffff の次が 0x60000 になっていた。ソースを見るとこうなってた。

data_remain <= data_remain - 16'd1;
rom_a[15:0] <= rom_a[15:0] + 16'd1; ← これが変

というわけで16bitスライスしてインクリメントしとった。なんでこんなことをしたかというのは下記の容疑。

  • データカウンタが 16bit なのでそのまま勢いでやってしまった。
  • キャラクタROMが 16bit インクリメントして、上位ビットがバンクなので桁上がりが入らないような形を想定した。(実際にビデオ回路でそうしている部分はあるが、ここにはバンクアドレスはない)

都合良く最初になって頻度が高い音がでてきたのですぐ見つかってよかった。ともかくこれが解決したので音は完璧になった!似たハード構成の曲も流すことが出来た!! あとはビデオ回路と合成すれば完成だ!

... といいたいところだが、メモリの容量や帯域が不足気味なので切り換えに四苦八苦する予定。今月中に動画で公開できるといいな。