YM2151 FM音源LSIをZ80で動かす

知り合いの方からYM2151 FM音源チップと専用DAC YM3012をいただきました。
いつもLEDチカチカだけでは つまらないのでマイコンで音楽を奏でてみたい!

まずはArduino+ブレッドボードで…

チップをゆずってくれた方のArduinoスケッチで、まずはYM2151 FM音源チップ+DAC YM3012が鳴るか試してみたいと思いました。
いつもどおり、ブレッドボードで仮組みしてみます。アンプは4回路入っているものだったら1つで済みます。たぶん音にこだわらなければ 何でも良いです。私はLMC660AINを使いました。250円ぐらいだったかな…

h1romas4/arduino-vgmplayer
https://github.com/h1romas4/arduino-vgmplayer

回路図はこちらとほぼ同じです。

無事チップは稼働しました!! なんか音色が懐かしいです。
出力はLINE出力なのでCDラジカセのLINE入力へ。LINE入力装備の機器も手持ちが少なくなって厳しくなってきました….

Arduinoのスケッチを読むとわかりますが、データバス(D0〜D7)とRD/WRIC(リセット)とA0(アドレスバス)を、ホストとなるマイコンになったつもりでHレベルにしたりLレベルにしたりという操作をソフトウェアで頑張っています。

Arduino用 YM2151シールドの作成

ブレッドボードで試作した回路といっしょのものをYM2151シールドとして、秋月電子で購入した Arduino用ユニバーサル基板に作成してみます。
この基板、安いですがわりと大きめでちょっと余裕をもった部品配置にできそうです。
DACとアンプICの間は太い線で…と思ったらちょっと太すぎました。あとDACのあたりに大きめのコンデンサをつけるのを忘れて、裏面に10μFの表面実装部品を急遽はんだ付けしました。手持ちが合って良かった….

こちらも はんだ付けの不良2箇所があったのですが修正して無事音楽を奏でることが出来ました。
※配線作業は8時間ぐらい…

Z80自作マイコンでFM音源を鳴らしたい!!

FM音源といえば8ビットマイコン時代から装備した機器があったので、先日自作したZ80マイコンに装備したみたい!!という野望が当初からありました。

拡張端子が無い問題

先日自作したZ80マイコンにはSBC6303のような拡張バスを接続する端子は装備していませんでした。(CPUとROM/RAM/ACIAで基板がギリギリ…)

そこで、地元の部品店でも売っていた 40PラッピングICソケットで嵩上げしてみたいと思います。
ちなみに、まだ作成途中ですが 40PラッピングICソケットで嵩上げして8255A基板を作ろうとしている写真がこちら。

Z80自作マイコン用 Arduinoシールドアダプタ

名前が長いですけど、Arduinoで動かしたYM2151基板をそのままZ80マイコンにつなげてしまうアダプタを作成しました。

  • 40Pラッピング用ICソケットでZ80 CPUを嵩上げ。(外部I/O端子の代わりです)
  • 電源(5V/GND)とデータバス(D0〜D7)をYM2151シールド向け端子へ接続。
  • Z80のRD(READ)とWR(WRITE)をIOREQと合わせてIORDIOWRを作ります。外部デバイスとのI/O命令が出たという信号です。
  • I/Oアドレスのデコードに74HC138を使用してアドレスバス (A7、A6、A5)をデコードします。(IOREQは)RDWR側で入れたのでちょっと手抜き..
    • YM2151 FM音源チップのCE(チップイネーブル)はArduinoで動かすときはGNDへ常時落としていましたが、Z80につなぐにあたって真面目にI/Oアドレスをデコードすることにしたので、YM2151シールド上のジャンパでGNDか別ピンにまわすか選べるようにしました。(YM2151シールドの黄色いジャンパです)

Z80自作マイコン用 Arduinoシールドアダプタの回路図はこんな感じです。
左側はZ80 CPUの信号線です。

Z80マイコンへシールドアダプタとシールドを装備

Z80マイコンへシールドアダプタとシールドを装備すると3階建てになっちゃいました。
2Fと3Fの基板はちょっと小さめなので支えるものが少なくて不安定ですが….

BASICで音楽演奏!!

さて、そもそもZ80からコントロールして音が出るか?というところが不安です。ArduinoではC言語ですが、同じようなロジックでBASICを組んでみました。音楽データを読み込みつつ、OUT命令を出しまくるやつです。音楽になるかどうかは分かりませんが、音は鳴るはず…
※実はユニバーサル基板で作成する前に、ブレッドボードで試作してみましたがまったく音が出ずちょっと凹んでいたのは内緒です。

参考にさせていただいたこちらのサイトC言語ヘッダファイルに音楽データのバイナリデータが定義されています。これをBASICのDATA文で定義して I/Oアドレス 20h/21hへ送れば音が出るはず。

BASICのソースはgistに上げました。リンクはこちらです。(DATA文が長いので、リンク先を見てください。)

こちらの動画のように無事(?)音が出ました。

BASICのDATA文の制約で16進数が直接記述できないとか、DATA文の長さ??制約で途中で演奏が止まっちゃったりしてますけど、自作Z80マイコンで無事 FM音源から音が出て感動です!!

音源装備という点だけは、かつてメインマイコンだったPC-8001を超えた?!かな!?(w

コメント

  1. […] 前回作成したZ80マイコン用 YM2151音源のプレーヤをZ80アセンブラで作成してみました。 […]

  2. […] 以前も紹介したとおり、ラッピング用ICソケット作戦での2階建てはZ80マイコン用PPI(8255A)ボードの着手が先でした。 […]

  3. […] 以前ユニバーサル基板で作成したYM2151チップを使ったArduionoシールドとほぼ同じ回路をプリント基板で作ってみました。 […]