KZ80マイコン 偽MSX1へ〜PSG音源&ジョイスティック(1)

KZ80-PSG

MSXといえば音楽付きのゲームを思い出します。そしてゲームといえば、ジョイスティック(ジョイパッド??)ですよね。

PSG音源チップをもらう

VDPボードが稼働したあたりで、知り合いに「画面がMSXと同じチップでPSGで音も出たら本当にMSXっぽいですよね」などと話したら、「PSGありますよ」ってことで頂いちゃいました。YAMAHAのYM2149。MSX1に載っていたAY-3-8910の互換チップであります。ちょっと改良版。

接続方法の検討

ネットを探すとPSGチップのデータシートなどが見つかります。以前 同じYAMAHAのFM音源の基板を作ったこともあったので、アドレスバス、データバスと、読み書き信号、アドレスデコード回路辺りでいけるのでは?とちょっと舐めてたんですが….

データシートを読むと、普通のチップセレクト端子とか、読み書き信号端子とかはない模様です。主な端子は以下のような感じ。(“#”つきは負論理です)

  • DA0〜DA7はデータバス
  • IOAxとIOBxは2ch分の入出力。MSXではジョイスティックの接続などに使います。
  • BDIR、BC1、BC2あたりが読み書き用の信号線
  • #RESETは負論理のリセット信号
  • #SELは内蔵分周器を動かすどうか
  • ANALOG A〜Cは3チャンネル分の音源出力

RD/WR信号の生成

データRead/Writeに関しては以下の信号線の操作が必要なようです。他のチップのように単純に#IORD(I/O読み出し)/#IOWR(I/O書き込み信号)を直結できなさそう。

BDIRBC2BC1モード
010Inactive
011Read
110Write
111Address

BC2はプルアップしてBDIRとBC1でモードをコントロールする模様。ちなみにMSXのI/Oマップを見てみると以下のようになっています。

I/Oアドレス説明
A0hレジスターポート
A1h書き込みポート
A2h読み出しポート

以下はPSGで音楽演奏するVGMプレーヤのZ80 ASMコードの一部です。以下のようにA0hポートにアドレスを出力→A1hポートにデータを出力…を繰り返します。

OPM_ADDR	EQU	0A0H
OPM_DATA	EQU	0A1H
;
             :
             :
;
OUT_DEV:
	LD      A,D
	OUT     (OPM_ADDR),A
	LD      A,(IX+0)        ;DUMMY
; DATA OUT
	LD      A,E
	OUT     (OPM_DATA),A
	RET

よって、YM2149の信号線コントロールは以下のようになります。また、PSGチップのアドレスデコード信号とも合わせる必要がありますので、それぞれNOR回路(74HC02)を通して供給が良さげ。

BDIR#IOWR(I/O書き込み)の反転(NOT)
BC1アドレスバスA0 信号の反転(NOT)

よって回路図は以下のようになります。

ちなみに、他のLSIにあるチップセレクトみたいな信号線が無いので、苦肉の策としてアドレスデコードしている74HC138に#IOWRと#IORDどちらかがLのときに動作するようにしています。

音声出力のミキシング

音声出力は3声ありまして、疑似ステレオチックに抵抗器でミキシングしてステレオジャックに出力するようにしました。(音が1声づつ右、真ん中、左に分かれるだけですが…)

ステレオジャックの先にはラジカセ等のアンプつき機器を接続するつもりで、基板上にはアンプを装備していません。

次回は、上記の回路図にもちょっとだけ見えてますが、MSX用ジョイスティックポートの検討をしたいと思います。つづきます。

コメント