FPGAでMSX-MUSICもどきを作る
1988年、ホビー向けパソコンにはFM音源を標準で搭載する機種が多く販売されていました。 ただMSXはMSX2規格になりグラフィックが強化されたもののサウンドは従来のPSGのみでした。
MSXでFM音源を使えるようにする規格としてはMSX-AUDIOなるものもありましたが高価なこともあり普及していませんでした。 MSXユーザとしてはもっと安価でFM音源が使いたいという要望が高まっていたと思います。そんななかで登場したのがパナソニックのFM PAC。 FM音源搭載+ゲームデータのセーブができるFM PACはゲームカートリッジとだいたい同じ価格帯だったこともありかなり普及しました。 結局、これのFM音源部がMSX-MUSICとして規格化され、その後MSX2+規格のパソコンにはMSX-MUSICがほぼ標準で搭載されるようになりました。
今回は、このMSX-MUSICの機能をFPGAに実装して、MSX実機から演奏できるようにしていきたいと思います。
MSX-MUSICの構成を調べる
ネットの情報によれば、FM音源チップはヤマハのYM2413(OPLL)、また拡張BASICを含むFM BIOSを16KBのROMに入れて、と構成は単純のようです。
使用しているアドレスは、YM2413がI/Oポート7Ch,7Dh、ROMはアドレス4000h-7FEFh、MSX-MUSICを有効にするレジスタがアドレス7FF6h、となっているようです。
と、一通り分かったところでFPGAの内部構成を設計していきましょう。
設計
とりあえずブロック図にしてみました。FPGA内部のクロックは仮想FDDのときと同じPLLで逓倍して64MHzで動かします。
図にある各モジュールについていくつか説明していきたいと思います。
実装
VM2413はModelSim上でコンパイルエラーが出ました。どうやら配列の型宣言で制限があるようです。これらを修正したところコンパイルできました。ロジック自体は変更していないので動作自体に影響は出ないでしょう。そのほかのモジュールはほぼ過去に作成したものの使いまわしです。
周辺回路も実装します。まずは回路図。基本は仮想FDDのものと同じですが、LCD部分ははずして、新たにアンプ部分を追加しています。
今回は、今後の実験でも使いまわせるようにMSXとMAX10-FBをつなぐ部分をユニバーサル基板で実装しました。アンプ部分は別途ブレッドボードに実装しました。
これをMSXに接続します。あとFDDユニットも接続して準備完了。
実機でテスト
それでは電源ON。毎度のことながらすぐには動かないのでロジックアナライザを組み込んでデバッグします。いくつかバグがあったので修正したところ、無事MSX BASICが起動するようになりました。
ここで、FM音源用の拡張BASICを有効にします。CALL MUSICと打ち込むとOkとプロンプトが返ってきましたので拡張BASICが有効になった模様。PLAY #2を実行するとPSGとは異なる音色が出てきました。FM音源部も無事に動作したようです。
音声ですが、少しノイズがのっているようです、が私的には気にならないレベルでした。ノイズはPWMなどデジタル部分ではなく、アナログ回路が起因しているようです。
最後は、ディスクステーションを起動してオープニング曲を演奏させてみました。
上記の様子を動画にしましたので興味のある方はどうぞ。
【動画】MSX-MUSICもどきを作る 動作検証 (YouTube)
まとめ
VM2413はシミュレーション時に少しつまづいたものの、全体としてはおおむね順調にできました。アンプ部分のアナログ回路は、デジタル回路から離す、配線は短くするなどしてもう少しノイズを減らすように調整したほうがよさそうです。
前回の仮想FDDと合わせたいところですがFPGAの容量(LE数)が足りないので、MAX10-FBでは一体型のカートリッジとするのは難しそうです。別途LE数の多いFPGAを探さねばなりませんね。
おまけ
前回、故障していたFDDユニット(HBD-F1)ですが、調査したところ、基板のスルーホールのハンダクラックが原因で断線していたことが分かりました。改めてハンダを入れなおしたところ無事動作するようになりました。FDDやICが壊れてなくてよかった。(おわり)
参考文献
- MSX2テクニカルハンドブック - アスキー出版局
- MSX Datapack wiki化計画 (http://ngs.no.coocan.jp/doc/wiki.cgi/datapack?page=FrontPage)
- FMPAC SW-M004 回路図 - 電子機器 Junker (https://green.ap.teacup.com/junker/160.html)
◆関連ページ◆