前回 KZ80マイコンへYM2203ボード(といっても子基板ですが)を接続してVGM音楽データを鳴らすことができました。こんどはDACをYM3014Bを使って正しく(?)演奏してみるのと、大学時代から憧れていた PC-8001への接続を実施します。
DAC(DA変換) YM3014Bの搭載
YM2203 FM音源ICのDAC(DA変換) ICといえば YM3014Bです。8ピンDIPサイズのパッケージで、YM2151ボードのときに使ったYM3012と同じで外付けとしてオペアンプが必要です。
YM3014Bのデータシートにはオペアンプとの接続例が出てます。今回はこの接続例と同じ構成でつなぎます。
RB(バイアス)端子からは2.5V(1/2 Vdd)の電圧が出ててオペアンプのボルテージフォロワ回路でつなぎます。ToBuffからはアナログ音声が出てます。ちなみに出力波形は0V~Vdd(+5V)で振れているみたいなんで単電源OPアンプでOKらしいです。
YM3014B データシートより
今回、秋月電子で以下のNJM5532DDというオペアンプを調達しました。オペアンプのデータシートを見ると100kHzあたりまでちゃんと動くもののようです。他のオペアンプが20円などというものもありますが、こちらは1個100円というちょっとお高い石です。
DACとオペアンプの接続、および SSG音源部分のミキシングする回路ですが、前回も掲載しましたが、こんな感じでつなぎます。(オペアンプの部品名が違ってますが、そこは大目に見ていただいて….)
前回の子基板ではSSG音源のANALOG-A〜Cを抵抗ミキシングしている部分あたりの配線は実施済みでしたので、DAC YM3014Bとオペアンプからアナログ音声信号を引き出して3.5mmイヤホンジャックのあたりで接続してみました。
SSG音源とFM音源のミキシング回路
実は、最初に配線したときに SSG音源のANALOG-A〜Cを3.5mmイヤホンジャックに配線し忘れましてFM音源部分だけの演奏となってしまったのです。イカンイカンってことで、SSG音源のANALOG-A〜Cを接続してみると、どうも音が超小さくなってしまいました。先達の皆様の作例では、直流成分を除去するコンデンサの先に1kΩぐらいの抵抗器をつけてらっしゃるのであります。上記の図だと赤丸の部分です。
よって、以下のように回路を改良いたまして、無事 音量もいい感じになりました。いっそプリント基板作っちゃおうか?とも思っていたのですが、ユニバーサル基板でDACから先の回路も作ってみてよかったです。いきなるプリント基板化したらハマるところでした。
前回つくったYM2203 FM音源ICを搭載したユニバーサル基板(子基板)に上記 DACとオペアンプの回路を組みました。余白多めの子基板にして正解でした。(秋月電子通販で売ってるBタイプ基板です。)
YM2203 FM音源を PC-8001へ接続
KZ80マイコンでYM2203 FM音源+DAC YM3014Bで音楽が鳴ることが確認できましたので、この子基板を生かしてPC-8001へも接続してみたいと思います。PC-8001への接続は大学時代からの憧れです。
まずは、子基板、親基板を考えずにPC-8001の拡張CPUバスへ接続するとしたらどんな回路になるかを検討してみました。KiCADで回路図を書きましてgithubで公開しています。
回路はこんな感じです。
- 3.579545MHzのクロックは、秋月電子通販で売ってる三端子のモジュレーターを使います。トランジスタサイズで省スペースです。
- PC-8001の拡張CPUバスから、#IORQ、#RD、#WR(#は負論理)の信号線を74LS32を使って#IORD/#IOWRというI/Oリクエスト時にだけREAD/WRITE信号が出るi8080システムっぽい信号を生成します。
- #CS(チップセレクト)信号線をコントロールするため、74LS138へA7~A4のアドレスバスを接続します。PC-8001ではI/Oアドレス80hや0A0hあたりがユーザーに開放されてます。今回は80hと81hを使います。切り替えができるようにいつものジャンパを接続できるようします。
PC-8001用ベース基板を作成
PC-8001の回路図を見ていただくとわかりますが、YM2203 FM音源以降の回路は、KZ80マイコンへ接続した基板といっしょです。つまり、PC-8001の拡張CPUバス~YM2203へのインターフェース部分のベース基板を作成すると、今回作ったYM2203子基板が流用できます。
アドレスデコーダーと制御信号線(#IORD/#IOWR・・・読み書き)を作ってあげる部分の2つのロジックIC、3端子型のクロックオシレーターがあればOK。YM2203との接続はKZ80マイコンのときと同じで24ピン600mil幅のICソケットで接続します。
ベース基板の左半分はスペースが空いてしまっていますが、そのうちYM2203 FM音源ICの割込み発生信号をうまいことPC-8001のモード2割込みに載せてあげる回路などの装備のために使ってみたいと思って空けてあります。
PC-8001へVGMプレーヤーソフトの移植ポイント
KZ80もPC-8001もCPUはZ80ですので、マシン語で作った演奏ソフトはアドレスを調整してあげればそのまま稼働します。ソース類などは以下のgithubにUPしてあります。
移植にあたっての考慮点は以下の通りです。
- PC-8001のRAMメモリーは08000h番地から32kバイト実装されています。(標準では16kバイトですが増設していない人はいないでしょう。)
- VGMプログラムは08100h番地をスタート番地とするようにorgを指定しなおします。また、ロードする際にN-BASICのワーク域とぶつかにないように “CLEAR 0,&h80FF” を実行する必要があります。
- またデータは08200h番地から0E9FF番地に収める必要があります。
実行ファイルの作成方法
PC-8001で実行するためのVGMプレーヤーは、いつもつかっているZ80クロスアセンブラ(The Macroassembler AS)を使いました。アセンブラソースをアセンブリして、いつもどおりIntelHexファイルを作成します。以下のような : レングス+アドレス+実データ+チェックサムがずらーと並んだテキストです。
IntelHexファイルができたら、雑誌からのダンプリスト入力でもお世話になっている DumpListEditorでIntelHexファイルから、PC-8001エミュレーターや、実機でわたしが愛用している ちくらっぺさんのSD-DOSで扱えるCMT形式へ変換します。
わたしのPC-8001は以前の記事でも書きましたが、空きROM領域(06000h番地~07FFF番地)にSRAMを装備してSD-DOSを搭載しMicroSDカードで実機へプログラムを持ち込めるようにしています。
DumpListEditorのマシン語入力ウィンドウへ、IntelHex形式のアセンブリ結果を添付したのち、[ファイル] > [cmt形式ファイル書き出し]でCMT形式のファイルを出力することができます。
PC-8001でも演奏成功!
CMTファイルを実機へ持ち込んで、無事 YM2203 FM音源で演奏することができました。CLEAR文の実行アドレスが間違ってる気がしますが、ご愛敬ということで。
大学時代 友人がPC-8001へYM2203 FM音源を搭載して美しい音楽を奏でていたのを指をくわえてみていたのですが、数十年の時を経て自分のPC-8001にもFM音源が装備できました。
感無量であります。
コメント