Z-80マシンをお持ちの方へ

YAMAHA製MSX用
サウンドシンセサイザーユニット

SFG-01(05)の接続 [前編]
杉之原名人

   YM2151(OPM)

 YM2151は、ヤマハのオリジナルLSIである。4オペレータ8和音のFM音源機能を有する。最近では、X1のFM音源ユニットやX68Kに使用されている。古くは、ヤマハやビクターのMSX,MSX2にスロットインして使用する「FMサウンドシンセサイザーユニット」に使用されており、これがそもそもの起源である。

 

   サウンドシンセサイザーユニット

 「FMサウンドシンセサイザーユニット SFG-01」は、19,800円(新バージョンであるSFG-05は29,800円)という低価格にもかかわらず、音質,機能ともかなりのレベルの性能を持っている。さらには、MIDIインタフェース(IN,OUT)、キーボードインタフェース(専用キーボード)、外部オーディオステレオ出力(R,L)、音声合成機能までも内蔵している。これを考えると定価19,800円は高コストパフォーマンスであると断言できる。(3年も前の製品だし………)

 先にも述べたように、これはMSX用の音源ユニットであるから、Z-80CPUと非常に相性がよい。というか、CPUがZ-80でないと機能がフルに生かせない。そのわけは追々説明していくが、ここではZ-80のモード2割り込みをサポートしているとだけ言っておく。

 

   SFG-01(05)の接続

  【図.1】に示したのがSFG-01(05)のスロットインコネクタのピン配置である。さすがMSX(2)専用だけあって、MSX独特の信号線を持っている。

 それでは、やや特殊と思われるピンについて少し解説を加えておくことにする。

SL3______負論理入力(I))。MSXのスロット3選択信号。MSXは64KBのメモリスロット(バンク)を16本持てる設計になっているが、その中のスロット(バンク)番号3が選択されたときに“L”になる。
 
BUSDIR______負論理出力(O)。割り込みベクタフェッチサイクル応答信号。Z-80モード2割り込みの、割り込みベクタフェッチサイクル時に“L”になる。(詳しくはZ-80のモード2割り込みのタイミングチャートを調べればわかっていただけると思う。スペシャルM1サイクル)内部では単にM1信号(負論理)とIOREQ信号(負論理)のORをとってこの信号を作って出力している。
 この信号はMSXに向けて出力されているが、MSX側はあっさりこれを無視している。つまり、MSXのサイドスロットの20番ピンはN.C.(No Connection = 無接続)となっているのである。これを見るとMSX「専用」ではないような気もする。ヤマハさんの好意として受け取っておこう。
 
SOUND IN______アナログ出力。L,Rが合成された総合出力。アンプを通してスピーカーをつなぐとFM音源が楽しめることになる。制御側のコンピュータにスピーカーが内蔵されている場合などに使用するとよいだろう。
 
φ______入力(I)。CPUからのクロック。ここではMSX用であるから、周波数は3.58MHzがベストであるが、4MHzでもまず大丈夫である。クロックが4MHzを越えるコンピュータに接続する場合は、適当にクロックを分周して4MHz以下にしてから加える必要がある。
 
SW1,2______無視するように。MSX特有のカートリッジ信号。MSXに接続する場合はSW1とSW2をショートしておく。
 

【図.1】
 接続しようとするコンピュータが、クロック周波数4MHzのZ-80マシンの場合(X1/X1turbo,PC-8801/mk2/SR/FR/MR,MZ-2200,セガmk2/3,etc.)は、いとも簡単に接続できる。ユニットにはアドレスラインが14本出ているが、これは内蔵されているROMアクセスのためであり、ROMを使用しない場合はA0-A2のみでも制御可能である。ユニット内のROM(16KB)の内容は、MSX用の演奏アプリケーションプログラムと音色データ48音分である。内蔵音色データをどうしてでもアクセスしたい場合は、14本のアドレスラインをCPUのアドレスラインに接続する。チップセレクトはSL3信号を使用する。
 ROMのオフセットアドレスは0000H-3EFFH。(ROM内容の詳細については不明。なにせROMが基板に直付けという掟破り………)3F00H-3F07HはメモリマップトI/Oになっており、OPM,SIO(MIDI),PIOの制御ポートとなっている。(3F08H-3FFFHまではこれのイメージ。)
 ユニット内部のレジスタをアクセスする際には、無条件に1ウエイト挿入される。クロック計算が必要とされる場合などは要注意である。
 UART(MIDI)のクロックを使用せずに4MHzの内部水晶振動子を使用しているので、システムクロックは3.58MHzである必要はない。(つまりMSX以外の機種でも接続可。)
 

   使用ICと回路

 使用されている石はヤマハのカスタムチップが多い。OPMをはじめ、DAC、MKS、マスクROMなどである。SFG-01の全回路図を掲載するとともに、これらのカスタムチップの解説を行なっておこう。閉じ込みの回路図をまず眺めてもらいたい。

 

OPM_____YM2151。先にも述べた通り、4オペレータ8重和音のFM音源LSI。特有のピンについて以下に解説する。
 
IRQ‥‥‥内部タイマー割り込みの出力。
 
IC‥‥‥‥リセット入力。
 
CT1,2‥‥‥音声合成用フィルター特性切り替え信号に使用されている。この回路ではCT1のみしか使用されていないが、実際にはCT2(8番ピン)端子もある。これらは汎用の2ビット出力ポートである。
 
SH1,2‥‥‥L+R分離用信号出力。S0から出力される総合音源データを左右に振り分けるための信号。
 
S0‥‥‥‥音声シリアルデータ出力。この信号はまだ音のアナログ信号ではない。
 
1‥‥‥‥DAC同期用のクロック出力。
 
DAC______YM3012。OPM用のDAコンバータ。ヤマハのFM音源LSIのための専用IC。
 
CLOCK‥‥OPMとの同期用タイミングクロック。
 
DATA‥‥音声データシリアル入力。OPMからの音声データを受ける端子。
 
SAM1,2‥‥L,R振り分け用データ入力。
 
ICL‥‥‥イニシャルクリア入力。
 
CH1,2‥‥アナログ音声出力。
 
COM,BIAS,etc.‥‥オフセットコントロール用端子。
 
MKS_____YM2148。Z-80PIO,1/2DART相当のASICと考えてよい。1バイトの汎用出力ポートと同じく1バイトの汎用入力ポート、それにMIDI用の1系統の非同期シリアルポートを有する。おまけとして、OPMのアドレスセレクト回路を内蔵している。シリアルポートにはZ-80モード2割り込み用のベクタレジスタがある。
 
OPM‥‥‥OPMへのアドレスデコード出力。
 
IC‥‥‥‥リセット入力。
 
VR‥‥‥‥ベクタアドレス要求入力。この端子を‘L’レベルにすると、割り込みベクタをD0-D7に出力する。
 
ST0-ST7‥‥‥汎用8ビット出力。ユニットでは鍵盤のストローブ出力として使用されている。
 
SD0-SD7‥‥‥汎用8ビット入力。ユニットでは鍵盤のカラム入力として使用されている。
 
A‥‥‥‥MIDI規格ボーレート発生用クロック。4MHzが供給されている。
 
RXD‥‥‥MIDI規格シリアルデータ入力。
 
TXD‥‥‥MIDI規格シリアルデータ出力。
 

   インタフェース回路

 ホストコンピュータをZ-80マシンに限った場合のインタフェース回路例を掲載しておく(注:紛失中:編)。部品はゲートIC2個と至って簡単である。この回路ではSFGの内部レジスタがI/Oマップトになるように組んであるので、PCやMZ,Xシリーズにそのまま接続できると思う。また、MZ-2500やPC-8801mk2FH/MH/FA/MAのような、クロックが4MHzを越えるマシン(6/8MHz)でも、I/Oをアクセスする際には自動的にウエイトがかかるように設計されているので、おそらくはこのまま使用できると考えられる。

 この回路では、ディップスイッチによってアドレスのデコードを16バイト単位で設定できるようになっている。つまり、I/O空間の×0H番地から×7H番地に内部レジスタが割り当てられるわけである(×は0-F)。ディップスイッチの変更によって、各種のZ-80マシンに容易に接続できる。そのかわり内部ROMは使用できないので容赦のほどを。

   内部レジスタ

 ユニットの制御レジスタは、基本的にメモリマップトでアクセスされる設計になっている(が、外付け回路で簡単にI/Oマップトに変更できる)。【図.2】の回路例では、ディップスイッチがすべてOFFになっているので、ホストコンピュータ側から見たレジスタのアドレスは、I/OアドレスのF0H-F7Hになる。このうちF7Hは実際にはレジスタが割り当てられておらず、ダミーのレジスタとなっている。

 それでは各レジスタの解説に入ろう。F0H-F7Hというアドレスは、今、仮に設定したものであるため、ここでは相対アドレス0-7番地として記することにする。 

相対0番地

Read―――OPM(YM2151)のステータスレジスタ。データ書き込みの可否や、内蔵タイマ割り込みの割り込み元(AorB)の情報が得られる。

Write―――OPMのアドレスレジスタ。OPM内部のレジスタアドレス(0-FFH)を指定する。

 
相対1番地

Read/Write―――OPMのデータレジスタ。

 
相対2番地

Read―――出力ポート(ST0-ST7)にラッチするデータレジスタ。

Write―――入力ポート(SD0-SD7)からのデータバッファレジスタ。

 
相対3番地

Write―――UART(MIDI回線)の割り込みベクタレジスタ。Z-80モード2割り込み用のベクタアドレスを設定する。

 
相対4番地

Write―――拡張割り込みベクタレジスタ。Z-80モード2対応のベクタレジスタには違いないと考えられるが、筆者が入手した資料からは詳細は不明。誰か試行錯誤でもやって解明していただきたい。

 
相対5番地

Read―――MIDI規格UARTのリードデータバッファレジスタ。

Write―――MIDI規格UARTのライトデータバッファレジスタ。

 
相対6番地

Read―――MIDI規格UARTステータスレジスタ。詳細不明。

Write―――MIDI規格UARTコマンドレジスタ。詳細不明。

 
 このように制御レジスタの中には詳細が不明のものがいくつかある。したがって、ユニットのMIDI回線に関する機能は現段階では使用することができない。
 
(P.S. このLSIはどう考えてもASICである。よって、機能も現存するCPU周辺LSIの一部と同等である確率が高い。適当にあたりをつけて解析するのが順当手段であろう。)
 

   ハードウェア編はここまで

 SFG-01接続に関するハードウェア的な話はこれまでとする。ソフトウェア、つまりOPMの制御については、OPM内部のレジスタについての詳しい知識が必要になる。もちろんユニット内部のROMを解析しても結構だが、OPMはX68Kなどにも登載されているので、そちらのマニュアルを参照されるのがよいだろう(たとえば「X68000テクニカクデータブック(ASCII出版)」などがおすすめ)。

【参考文献】
1.SFG-01サービスマニュアル
2.CX-5F(MSX)システム解説