AY-3-8910 のデータシートは、いろいろ探すとありますが、細かい情報がここにありました。
http://d4.princess.ne.jp/msx/psg/
YM2149 の情報ですが、基本的にコンパチのPSG です(MSX で使われていたようです)。
音声のデジタルデータまでは作れますが、ここからスピーカーを鳴らすのは D/A 変換が必要になります。
Xilinx の評価ボードで、オーディオ出力をしているものがありましたので、それを参考にしました。
D/A は、デルタシグマD/A を使います(Xilinx の xapp154.pdf を参照)。また、外部にローパスフィルタを接続しました。
xapp154.pdf には、違う値が書いているんですが、手持ちの部品がなかったため、適当に変えてしまいました(^^;
一応、値の選定として、フィルタの計算は、以下のHPを使いました。
http://sim.okawa-denshi.jp/Fkeisan.htm
カットオフ周波数は 7KHz ほどなので、このくらいでいいかと。
また、直列の抵抗値は、ベタHになった時にも問題がないかなー、ということで。
実際に作った回路です。
DE0 のボードの上に乗っている小さな基板がそれです(奥の赤いのが、PC-6601SR本体です)。
外付け回路が出来たので、後はAY-3-8910 を実装するだけです。
AY-3-8910 のデータシートにかなり詳しく動作が書かれているので、その通りに実装するだけで、あっけなく音声が出力されました。
データシートに書かれていない内容(実際に出力する電圧だとか、ノイズの生成多項式など)に関しては、上のHP を参考にしました。
それぞれ個々の音声に関しては実装が簡単に出来るのですが、それを同時に出力する時の事がよく分からなかったので、実機を参考にしました。
実機を参考にした結果、分かったのは次の通りです。
・1チャネルで、音声とノイズを両方発生させると、個々の音量が減る。
例えば、SOUND 0,0:SOUND 1,0:SOUND 6,0 としておいて、TONE-A を発生、ノイズを最高周波数(殆ど聞こえない)としておく。
それからSOUND 7,&HFE とすると、TONE-A だけが鳴るが、その後にSOUND 7,&HF6 とすると、TONE-A の音量が小さくなる。
→ 多分、TONE とノイズの合計値が、最大値になっているようだ。
・1チャネルを鳴らした時と、3チャネルを同時に鳴らした時の、それぞれのチャネルの音量は変わらない。
→ これは、AY-3-8910 で出力信号を直結していることからも、この結果は正しそうである。
実際の音声はここには載せませんが、動かしたソフトは実機と同じような音が鳴っています(ちょっとびっくりです)。
いろいろと試しましたが、今の所、問題があるのはポリス&ギャングだけです。
ポリス&ギャングは、主メロディーと効果音のバランスが、実機とかなり違います。何となく原因に心当たりはありますが。

