MB-S1

S1でFM音源を鳴らす

 FM音源と言えばヤマハが開発、販売していた音源チップです。1980年代前半にシンセサイザDX7に採用されて世界の音楽シーンを席巻しましたし、1980年代の中盤以降は8ビットパソコン、アーケードゲームや家庭用ゲーム機に採用されてゲーム音楽の幅を大きく拡げました。

 FM音源にもいろいろ種類がありますが、8ビットパソコンで多く採用されていたのが下の写真にあるYM2203です。これは従来の音源チップであるPSG(AY-3-8910)と互換性を持たせてあり、PSGを操作するソフトウェアは変更なしで使えるといった利点もありました。ちなみにYM2203はOPNとも呼ばれています。


YM2203と専用DAC YM3014

 写真右側にあるのは専用DACであるYM3014です。YM2203のFM音源部はデジタルで出力されるのでこれをアナログ音声にするためDACを介する必要があります。音源チップを入手する際はこの点にご留意を。

 さて、S1用のFM音源カードと言えば、月刊I/O 1986年5月号に上記チップを使用した製作記事が掲載されています。一方、オフィシャルで拡張カードが販売されていたかはわかりません。今回は、月刊I/Oの記事を参考にして進めていきたいと思います。

回路を考える

 月刊I/O 1986年5月号に掲載された回路図を示しました。


FM音源カード回路図(月刊I/Oから抜粋)

 上の回路図から、横着できそうなところと変更するところを考えていきます。

 上記から変更した回路図を以下に示しました。


FM音源カード回路図

 回路の変更点を補足すると…

テスト回路で確認

 それでは早速実装、とその前にこのFM音源が壊れていないか、この回路で動作するかを確認するためテスト回路を組むことにしました。マーク5用の6声PSGを作るで作成したテスト用回路図を参考に組んだのが以下の回路になります。


FM音源テスト用回路図

 制御にはAVRマイコンを使用します。これに16MHzのセラロックを接続し8分周して2MHzのクロックで動作させます。このクロック信号はそのまま外部に出力してFM音源のクロックとしても使用します。


FM音源テスト回路

 AVRマイコンに演奏プログラムを書き込んだら電源ON。お、音が鳴りましたが想定より1オクターブ高い音です。リセットスイッチを押すと想定の音程になるので、どうやらパワーオンリセットが速すぎるのかもしれません。リセット信号線に100uFの電解コンデンサをつけたところ、うまく演奏されるようになりました。

実機で動かす

 それでは実機で動かしていきます。ブレッドボードを配線したらショートしていないかをテスターで確認します。さらに信号観測用にロジックアナライザを接続して、エッジ端子をS1本体に接続します。これでハードウェア側の準備は完了。


ブレッドボード上に配線

 一方、ソフトウェアですがS1用ソフト&ツールにある演奏プログラムを変更して使用します。クロックは3.58MHzから2MHzに、またプレスケーラ(分周比)をFM部 1/3、SSG部 1/2になるように変更します。これらプログラムをディスクイメージにして仮想FDDに転送したら、いよいよ電源ON。


演奏プログラムを実行したところ

 仮想FDDから演奏プログラムをロードし実行します。おお、音が鳴りました…が鳴っているのはSSG部分だけでFM部分が聞こえない。音量を調整すべく可変抵抗を回すも変化なし。何回かプログラムを繰り返し実行しているとFM部から雑音が聞こえるようになりました。SSG部からは正常に音が出ているし、ロジアナで波形を確認してもデータ書き込みに問題はなさそう。なので何が原因かよくわかりません。

 半日悩んでわからないのでググってみたところ、FM音源に書き込んだ後、次に書き込みするまでにウェイトを入れる必要があることが分かりました。なるほどソフトウェア側に問題があったわけですね。演奏プログラムを修正して再度実行したところ、おおっ、無事演奏されました! 動作検証の動画を用意しましたので興味のある方はどうぞ。

 この回路用に使用した演奏プログラムについてはページ下のリンクからダウンロードできます。

 参考までに、ロジアナで観測した各信号のタイミングチャートを示しました。


1マシンサイクルでのタイミングチャート

書き込みウェイト時間は約10usにした

拡張PSGとして使えるか

 次は拡張PSGとして使えるかを検証します。拡張PSGのI/Oポートは$FFE6がデータ、$FFE7がアドレスとなります。S1用の拡張PSGを作るの記事を参考に回路を変更しました。


FM音源カード 拡張PSG代替 回路図

 アドレスデコード用に74HC133を、ROMKIL信号用に74LS06を追加しますが、スペースがないため新たにブレッドボードを用意しました。


ICが増えたのでブレッドボードを追加

 それでは動かしてみます。S1 BASICが起動したらPLAY文で検証します。おっ、きちんと演奏されますね。ただ、標準搭載PSGと比べると音量が少し小さいようです。そこで、SSG側から出力される部分の抵抗値を低くしました。470Ωにしたところいい感じになりました。


メロディチャイムを演奏させてみた

 以下の動画はメロディチャイムを演奏させてみた検証動画です。

 先ほどの演奏プログラムのアドレスを変更して検証したところ、こちらも問題なく演奏されました。なお、この演奏プログラムを実行した後、PLAY文で演奏すると音程が1オクターブ上がります。

 最後は、ロジアナで観測した各信号のタイミングチャートです。


タイミングチャート

メモリウェイトありの場合

まとめ

 ウェイト処理が必要であるという部分で悩みましたが、無事、FM音源を動作させることができました。前半の回路はS1のBモードやレベル3でも使えるのではないかと思います。IRQ信号を割り込み信号としてS1に接続すればタイマ機能も使えますし、汎用I/Oはジョイスティック端子として使えますね。S1専用のユニバーサルカードがあればそれに回路を実装したところですが今じゃ入手は困難ですね。うーん、PCBを設計するしかないのかなぁ

ダウンロード

演奏プログラム - opntest_022.zip (32KB)
 [MD5:e7c98e51c66cac7c409e8d94d9a2c8a6]

追記(2020-01-18)

 ユニバーサル基板に実装しました。実装するにあたってI/Oポートアドレスを切り替えられるようにしたのとFM音源からのINT割り込み信号を本体のIRQまたはFIRQ信号に接続できるようにしました。


FM音源カード(ユニバーサル基板用)回路図

ユニバーサル基板に実装

MB-S1に接続したところ

追記

 プリント基板を作成しました。詳細はこちらのページ


S1用拡張RAM&FM音源カード

◆関連ページ◆

S1用の拡張PSGを作る

S1用拡張RAM&FM音源カードを作りました

 

レベル3&S1実機を拡張する

 

TOP PAGE