Z80 マイコンシステムを作ろう(その6)
前回は,大容量(?)メモリボードを作り,16KB のページ単位にメモリセグメントを割り当てられるようにしました。いわゆるメモリマッパーです。
MSX の BIOS および BASIC が動くようになりましたので,今回は,足りなかったサウンド機能を実装したいと思います。これで,より MSX っぽくなると思います(笑)。
PSG(プログラマブル・サウンド・ジェネレータ)
このサイトをご覧になっている方なら,もう説明する必要もないかもしれません。
有名な音源チップですよね。例によって ウィキペディア に詳しい説明があります。
昔のアーケードゲームや,レトロ PC などに採用されていました。この PSG,いろいろと派生型があるのですが,オリジナルは確かゼネラルインスツルメンツの AY-3-8910 だと思います。
矩形波 3 音とノイズ 1 音を発生することができます。
聞いた感じはピコピコ音といった感じでしょうか。音源の他に 2 つの汎用入出力ポートを持っていて,MSX では,これをジョイスティックポートに利用しています。
以前,Mr.DO! の基板を作った時は,テキサスインスツルメンツの SN76489 を使いましたが,これも入力クロックを分周した矩形波とノイズを発生させることができ,原理的にとても似ています。(内部構造やアクセス方法は違います)
今回,この PSG を使って音源ボードを作るのですが,AY-3-8910 ではなく,その互換チップ(?)である,ヤマハの YM2149 を使ってみます。
AY-3-8910 と内部的に微妙に違う部分もあるのですが,ピン配置も同じですし,普通にPSG として使う分には特に問題ないと思います。
OPM と呼ばれる FM 音源,YM2151 と番号が 2 つ違いですが,機能は大きく違います(笑)。
左が AY-3-8910 互換品(多分 CMOS),右が YM2149 です。
各音源のミキシング
今回作るボードから,外部に音声を出力します。
MSX には,カートリッジスロットがありますが,音源をカートリッジとして増設することができます。
FM 音源の FM-PAC とか,あと SCC 音源とかもありますよね。
この「肝八」(KimoHachi)も,PSG の音に加えて他のスロットに接続された音源の音をミックスして出力できるようにします。
FM 音源や SCC 音源は,これからの実装になるのですが,実は,今まで作ったボードの中に音源(?)が既にあるんです。
以前作った PPI ボードに 8255 が載っていますよね。
この出力ポートのうち,1bit を音声出力にしているんですね。
MSX では,1bit サウンドポートとか呼ばれたりしますが,キーボードのクリック音(キーを押すとポチポチなるあの音)に使っています。
1bit なのですが,使い方によっては PCM のように音声を出力することもできたりします。
私は使ったことはないのですが,実際にこの 1bit サウンドポートを使って,声を出力されている方もいらっしゃいます。凄いですよね!
PSG ボード
部品を実装したボードがこちらです。実は,いつものように配線にミスがあって,裏に追加の IC や,ジャンパ線で修正した跡があったりします。
ユニバーサル基板だと修正が比較的楽なのですが,プリント基板は,すでに配線がパターンになっているので修正が結構大変です。
DSUB のコネクタがついていますが,MSX で言うところの汎用入出力ポート(ジョイスティックポート)です。
スペースの都合から 1 つだけ付けました。
動作確認
また 1 枚増えて 6 階建てです。
動作確認ですが,MSX の BASIC が動作するようになったので,簡単に PSG 再生できます。
今までは,アセンブラでハードウェアアクセスするプログラムを作らなくてはいけなかったのですが,ホント楽で BASIC って便利です。
(mpeg4 1000kbps 1.5MB)
問題なく PSG が動作しているようです。
せっかくなので,なにか音楽を鳴らしてみましょう。スロット 3 のページ 1 と 2 が ROM 領域になっているので,ここに ROM イメージを転送してみます。
(mpeg4 750kbps 9.2MB)
お馴染みの「魔城伝説」です。名作ですね。このオープニング音楽と 1 面の BGM がカッコよくて大好きなんです。
さて,これで,記録媒体への読み書きとカートリッジスロットを除いて,初代 MSX とよく似た(笑)機能を実装することができました。
実は,MSX 実機の BIOS がなくても,互換 BIOS として配布されている「C-BIOS」でも動かすことができます。
今回はここまでです。
記録媒体への読み書きができないと不便なような気もしますが,カートリッジスロットを付ければ,MSX 用のものがそのまま使えなくもない…かな。これは後々の課題としておきたいと思います。
現状,ロムカートリッジのソフトは,32KB までのものしか動作できないので,次回は,メガロムソフトが動作できるボードを作りたいと思います。
“Z80 マイコンシステムを作ろう(その6)” に対して1件のコメントがあります。