まず、DCSG再生用のデータ作成。
Pasopia7で読み込むデータファイルは、8bit 256階調のデータを順番に並べているだけです。
11025Hz(約0.09ms間隔)で再生するので1バイト=0.09msになり、64KBでは約6秒の再生時間になります
11025Hz/16bit/1channelのWaveファイルを用意します。
以下コマンドを実行すると、64KBに分割されたDCSGデータファイルが作成されるので、SDカードに保存します。
WavToDCSG.exe Waveファイル名
次にPasopia7の再生ロジックですが、タイマー割り込みを使わずにクロックで時間調整しています。(割り込みだと11025Hzは厳しそう)
DCSGデータ1バイトをXPAC2から読み込み、3和音のトーンテーブルから波形データに変換してSN76489にセットします。これを0.09ms間隔で行います
Lレジスタに読み込むデータは、64KBの前半・後半で読み込み方法が異なります
;初期設定: SN76489の周波数を1に設定 ; SG_PORT EQU 3Bh ;SN76489 Access Port(3Ah/3Bh) XOR A LD C, SG_PORT LD B, 081h ;Tone0 Frequency OUT (C), B OUT (C), A LD B, 0A1h ;Tone1 Frequency OUT (C), B OUT (C), A LD B, 0C1h ;Tone2 Frequency OUT (C), B OUT (C), A LOOP: ; ここでLレジスタにDCSGデータロード ; * TONE_0テーブルの先頭は、Lowアドレスが00hになるように調整 ; * テーブルデータの上位4bitは、TONE_0:Dxh, TONE_1:Bxh, TONE_2:9xhにセット LD H, TONE_0テーブルのHighアドレス LD A, (HL) ;Tone0波形データ読み込み INC H LD B, (HL) ;Tone1波形データ読み込み INC H LD H, (HL) ;Tone2波形データ読み込み ; SN76489ポートの設定 OUT (C), H OUT (C), B OUT (SG_PORT), A
・前半32KB: XPAC2のMRAMから読み込んだデータをLレジスタに保存。同時に後半3秒のデータをPasopia7のRAMに保存
・後半32KB: RAMに保存されたデータをLレジスタに保存。同時にXPAC2のSDカードからMRAMにデータコピー
Pasopia7の再生プログラムはここからダウンロードできます。
RUNするとDSCGデータを読込むMRAMスロットが聞かれるので、「3」か「4」で指定します。
[3] 64KB MRAM (DEVICE 6)
[4] 64KB MRAM (DEVICE 5)
※指定したMRAMスロットのデータは消えるので注意してください。
SDカードに保存したDCSGデータが保存されているフォルダ名を指定します。
以前紹介したvramイメージをrgbというファイル名で同じフォルダに保存しておくと、その画像を表示した後にDCSG再生が始まります。
実機での演奏をどうぞ
実機で試せる方はぜひ
PASOPIA7のボイスユニット持ってました。
返信削除本体だけでこんな事が可能なんですね。
ボイスユニットいいですね!
削除