MB-6892

マーク5用の6声PSGを作る

 レベル3シリーズにはPSGが搭載されていませんが、オプションで拡張PSGカードが販売されていました。一部のゲームではこのPSGカードでBGMを奏でていました。今回は、FPGAにPSG相当の音声発生機能と、拡張PSGカードと互換性のある機能を実装し、マーク5からFPGAを制御して音を鳴らしてみます。

 PSG(Programmable Sound Generator)はこのころの8ビットパソコンに多く搭載されていました。特にGI社のAY-3-8910がよく使われていました。拡張PSGカードにもこのICが使われていましたのでこれと互換性のあるものを実装していきます。下の写真はS1に搭載されてるAY-3-8913でAY-3-8910から汎用ポートを省略した廉価版。


S1に搭載されてるAY-3-8913

 まずは、PSGカードがどのような回路になっていたかですが、正規の回路図は持ち合わせていないので当時の写真などから推定しました。レベル3とPSGの間にはパラレルI/OであるPIAを介して接続しています。PIAはラッチとして使われてるようです。なお、PSGカードにはジョイスティックを接続する汎用ポートがついているものがありますが今回は省略しています。


6声PSG回路図(推定)(クリックで拡大)

上記の回路から、FPGAに実装する機能を決めていきます。その結果、実装するのは、

マーク5側からI/Oポートにアクセスした時のセレクト信号は、電圧レベルの違いもあるので汎用ロジックIC(74LCX138)で生成してこれをFPGA内部に取り込むことにします。また音声出力部分からRC回路(ローパスフィルタ)でアナログ信号にしてマーク5のSOUND INに送ります。


回路図(クリックで拡大)

 一通り実装したら、さっそくマーク5に接続、といきたいところですが、まず本当に音がなるのかを検証するためAVRマイコンを使ってテスト回路を組んでみることにしました。


テスト回路

テスト回路の回路図(クリックで拡大)

 さて結果は…無事、音がなりました。なんかうれしいので、某コンビニに入るときに聞こえるメロディチャイムを作ってしまいました。

【動画】FPGAでメロディチャイム(YouTube)

 テストで音がなったので、次はマーク5に接続するための回路を製作していきます。完成したらエッジコネクタにピンヘッダをつけたものをマーク5の拡張端子に差し込み準備完了。


ブレッドボード上に配線

マーク5の拡張端子に接続した様子

 FPGA側はUSBから給電するのでこれをPCと接続し、いよいよマーク5の電源を入れます。……あれ、BASICが起動しない…まずい、即座に電源を落として配線を確認。案の定、配線していない部分&配線位置ズレがありました。これらを直し、再度電源ON。今度は起動しましたので、PSGに対応したゲーム「デストロイ・エイリアン」をLOAD&RUN。…うむむ、音が全くならず…。ここからは、ロジアナとSignal Tap II Logic Analyzerで信号を解析しながらデバッグします。


ゲームを起動してデバッグ

 結果、PIAの実装がデータシートと異なっていたり、データをラッチするタイミング、PSG部分のエンベロープを反映するタイミングにズレがあることなどいろいろと不具合が見つかりました。これらを直して再度起動。おお、BGMがなりました。音がなるとゲームの臨場感も変わってきますねぇ。プレイ中に暴走することもなかったのでI/Oポートへのアクセスも問題なさそうです。結果は動画で用意しましたので興味あるかたはどうぞ。

まとめ

 最初に実機で動かしたときにまともに動かない状況は相変わらずですが、HDLの書き方は前回よりはコツをつかめてきたように感じます。PSG内部の音量バランスがオリジナルとは異なるので聞こえ方も微妙に違うようですがこの辺りは今後の課題にします。(おわり)

ソースコード・ダウンロード

l3psg6_010_source.zip (72KB)
 [MD5:80d6d2b02303456b4e368e86c391d788]

※試される方は自己責任でお願いします。

参考文献

  1. FPGAマガジン Vol.9, CQ出版社
  2. FPGAマガジン Vol.13, CQ出版社

◆関連ページ◆

マーク5用の9声PSGを作る

S1用の拡張PSGを作る

 

FPGAで8ビットパソコンを拡張する

 

TOP PAGE