DPCM / PCM decoder
decoder と書いたが言葉の意味が正しいか分からぬ。
パンクショット基板を FPGA 評価ボードにつめこむやつは、今年1月に作ったまま開発が停止していたのだが、個人的事情が改善しつつあるので再開。やはりこれぐらいの気温でないとやる気がしない。
- 初日はなにをやっていたか思い出して ROM データを flash memory に書き込んだり、 Z80 をいれこんだモジュールをトップモジュールに作成。
- 2日目は実機で Z80 から 053260 へ write してそこから音を出るのを確認。(プチノイズ混入)
- 3日目は 053260 と Z80 がアクセスする ROM は本来は別だけど、1つの ROM にまとめるために共有 ROM ゲートを生成。
053260 はシミュレートではきれいな音がでるものの、実機で動かすとプチプチいう。原因はよくわからないが、 DPCM の差分演算時のオーバーフロー処理を対策したが改善せず。ただし、符号付演算や小さいバグをいくらか直せた。オーバーフローに関してはシミュレートや簡易ソフトデコーダでは対処しなくても問題なかったからよくわからん(MAME は対処している)。
jikki.wav / sim.wav / softdecode.wav
共有 ROM に関してはいろいろ問題があってやる気をなくしていたんだが、1つずつ進めて解決していく気になったのでやることにした。これも実機で動かすといいんだけど、テストプログラムを flash memory に書き込むのが面倒なのでやらない。
今後の方針は、INT 端子の調査と実装とか FM 音源コアをつないで、パンクショットのサウンドプログラムを実機で動かす予定。1発で動くと楽だけど、そんなにうまくいかないだろう。でもやらないとね。
テストプログラム
ループ機能はあるのだが、 PCM 再生と Z80 プログラムでの ROM 切り替えの確認のためにわざわざソフトで監視しているのでお間違えなく。
org 00000h di im 1 ld hl,0fc28h ld (hl),000h ld l,02fh ld (hl),10b ld hl,ch1 ld de,0fc08h ld bc,8*4 ldir ld hl,0fc2ah ld (hl),030h ;7:4 pcm/dpcm 3:0 loop ld l,02ch ld (hl),(4<<3)|4 ld l,02dh ld (hl),(4<<3)|4 ld l,028h ld (hl),001h ;03: play 2ch ; halt readbusy: ld a,(0fc29h) cp 0 jr nz,readbusy ld hl,ch1 ld de,0fc08h ld bc,8 ldir ld hl,0fc28h ld (hl),0 ;ここは 0->1 にしないと今の設計では鳴らないが、 ld (hl),1 ;本物はどうなのか知らない jr readbusy ch1: db 000h,00fh,007h,018h,02fh,027h,002h,07fh ch2: db 000h,00fh,005h,033h,031h,03fh,002h,05fh db 000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h ch_end
各レジスタを初期化 -> 1ch 再生 -> 再生終了かソフトで監視 -> 再度再生
Z80 の命令はあまりしらないのでいつも適当。