動画再生の続き。
PCM音声出力について、とりあえず1回の出力を短くする努力をしてみました。
1回のPCM音声出力は、AY-3-8910 のチャネルA/B/Cの音量設定する事で実現しています。
具体的には、以下のようなプログラムになります。
LD A,08H :7
OUT (0A0H),A :11+1 ←AY-3-8910 に設定するポートをR8に設定する
LD A,XX :7
OUT (0A1H),A :11+1 ←AY-3-8910 のR8にチャネルAの音量を設定する
LD A,09H :7
OUT (0A0H),A :11+1 ←AY-3-8910 に設定するポートをR9に設定する
LD A,XX :7
OUT (0A1H),A :11+1 ←AY-3-8910 のR9にチャネルBの音量を設定する
LD A,0AH :7
OUT (0A0H),A :11+1 ←AY-3-8910 に設定するポートをR10に設定する
LD A,XX :7
OUT (0A1H),A :11+1 ←AY-3-8910 のR10にチャネルCの音量を設定する
合計:114クロック
これを1秒間に11025回する事になります(11025Hzの場合)。
本来は、さらに全部の命令に 1WAIT 掛かりますが、これは縮める事が出来るとしています。ポート0xA0/A1に対する 1WAIT は減らす事ができません。
いろいろと考えて、今の所最短なのは、以下の通り。
LD C,0A0H
LD B,08H
LD D,09H
LD E,0AH
OUT (C),B
↑あらかじめ設定しておく。
LD A,XX :7
OUT (0A1H),A :11+1 ←AY-3-8910 のR8にチャネルAの音量を設定する
OUT (C),D :12+1 ←AY-3-8910 に設定するポートをR9に設定する
LD A,XX :7
OUT (0A1H),A :11+1 ←AY-3-8910 のR9にチャネルBの音量を設定する
OUT (C),E :12+1 ←AY-3-8910 に設定するポートをR10に設定する
LD A,XX :7
OUT (0A1H),A :11+1 ←AY-3-8910 のR10にチャネルCの音量を設定する
:
LD A,XX :7
OUT (0A1H),A :11+1 ←AY-3-8910 のR10にチャネルCの音量を設定する
OUT (C),D :12+1 ←AY-3-8910 に設定するポートをR9に設定する
LD A,XX :7
OUT (0A1H),A :11+1 ←AY-3-8910 のR9にチャネルBの音量を設定する
OUT (C),B :12+1 ←AY-3-8910 に設定するポートをR8に設定する
LD A,XX :7
OUT (0A1H),A :11+1 ←AY-3-8910 のR8にチャネルAの音量を設定する
合計:83クロック
最初は、チャネルA、B、Cの順で設定し、次はチャネルC、B、Cの順で設定する。
というのを交互に行うと、どのレジスタを変更するかを設定するのを1回分浮かせる事ができます。
もう少し速くしたいのですが、これが限界っぽいです。
後は、
設定チャネルをAとBの2つにする → PCMのサンプリングレートが落ちる事に相当
サンプリングレートを落とす
ぐらいしかなく、両方とも音質に関わるので、悩ましい所です。
2013年04月01日
この記事へのコメント
コメントを書く

