PAGETweetマーク5用の6声PSGを作るレベル3シリーズにはPSGが搭載されていませんが、オプションで拡張PSGカードが販売されていました。一部のゲームではこのPSGカードでBGMを奏でていました。今回は、FPGAにPSG相当の音声発生機能と、拡張PSGカードと互換性のある機能を実装し、マーク5からFPGAを制御して音を鳴らしてみます。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に実装する機能を決めていきます。その結果、実装するのは、サウンド機能(PSG部分)この部分は、OpenCores(http://opencores.org/)で公開されているsqmusicに多少修正を加えたものを使用します。FPGAにはアナログ出力ポートがないのでPWMで音量を調整してデジタル出力します。パラレルI/O(PIA部分)この部分は、データをラッチする機能だけを実装します。マーク5側からI/Oポートにアクセスした時のセレクト信号は、電圧レベルの違いもあるので汎用ロジックIC(74LCX138)で生成してこれをFPGA内部に取り込むことにします。回路図(クリックで拡大)一通り実装したら、さっそくマーク5に接続、といきたいところですが、まず本当に音がなるのかを検証するためAVRマイコンを使ってテスト回路を組んでみることにしました。テスト回路テスト回路の回路図(クリックで拡大)さて結果は...無事、音がなりました。なんかうれしいので、某コンビニに入るときに聞こえるメロディチャイムを作ってしまいました。【動画】FPGAでメロディチャイム(YouTube)テストで音がなったので、次はマーク5に接続するための回路を製作していきます。完成したらエッジコネクタにピンヘッダをつけたものをマーク5の拡張端子に差し込み準備完了。ブレッドボード上に配線マーク5の拡張端子に接続した様子FPGA側はUSBから給電するのでこれをPCと接続し、いよいよマーク5の電源を入れます。......あれ、BASICが起動しない...まずい、即座に電源を落として配線を確認。配線していない部分&配線位置ズレがありました。これらを直し、再度電源ON。今度は起動しましたので、PSGに対応したゲーム「デストロイ・エイリアン」をLOAD&RUN。...うむむ、音が全くならず...。Analyzerで信号を解析しながらデバッグします。ゲームを起動してデバッグ結果、PIAの実装がデータシートと異なっていたり、データをラッチするタイミング、PSG部分のエンベロープを反映するタイミングにズレがあることなどいろいろと不具合が見つかりました。これらを直して再度起動。おお、BGMがなりました。音がなるとゲームの臨場感も変わってきますねぇ。プレイ中に暴走することもなかったのでI/Oポートへのアクセスも問題なさそうです。結果は動画で用意しましたので興味あるかたはどうぞ。動作検証(YouTube)まとめ最初に実機で動かしたときにまともに動かない状況は相変わらずですが、HDLの書き方は前回よりはコツをつかめてきたように感じます。PSG内部の音量バランスがオリジナルとは異なるので聞こえ方も微妙に違うようですがこの辺りは今後の課題にします。(72KB)[MD5:80d6d2b02303456b4e368e86c391d788]※試される方は自己責任でお願いします。2016-05-27。