3.1 ハードウェア
3.1.1 メモリの構成
3.1.2 I/Oの構成
1.本体内蔵の場合
表7.19 MSX-MUSIC I/O構成(本体内蔵)
I/Oアドレス | Read/Write | OPLLレジスタ名 |
7CH | W | アドレスレジスタ |
7DH | W | データレジスタ |
2.外付けの場合
パナアミューズメントカートリッジ2準拠
表7.20 MSX-MUSIC I/O構成(外付け)
I/Oアドレス | メモリアドレス | Read/Write | OPLLレジスタ名 |
7CH | 7FF4H | W | アドレスレジスタ |
7DH | 7FF5H | W | データレジスタ |
3.1.3 内蔵・外付け判別データ
表7.21 内蔵・外付け判別データ
アドレス | データ(内蔵) | データ(外付け) | |
4018H | 41H'A' | 50H'P' | 「PAC2」の文字列は、「パナアミューズメントカートリッジ2」の場合。 この4バイトの文字列は、メーカーごとに異なる任意の文字列でかまわない。 |
4019H | 50H'P' | 41H'A' | |
401AH | 52H'R' | 43H'C' | |
401BH | 4CH'L' | 32H'2' | |
401CH | 4FH'O' | 4FH'O' | |
401DH | 50H'P' | 50H'P' | |
401EH | 4CH'L' | 4CH'L' | |
401FH | 4CH'L' | 4CH'L' |
MSX-MUSICはオプション機能ですから、カートリッジを外付けすることにより、後からFM音源を追加することができます。しかし、MSX-MUSICを内蔵したシステムにFM音源カートリッジを外付けすると、ひとつのシステムに同一アドレスのFM音源LSIが2つ存在することになり、音量が通常の2倍の大きさになってしまいます。
これを避けるために、外付けのカートリッジに内蔵されるソフトウェアは、そのカートリッジ内の音源LSIの動作を許可するかどうかを4018Hからの「APRLOPLL」文字列の存在の有無を調べ、文字列がなければカートリッジのFM音源をI/Oポートに接続します。
3.1.4 OPLLを直接アクセスする場合の注意
この章で公開された内容を利用すれば、I/OポートからOPLLを直接アクセスして音を鳴らすことができます。しかし、OPLLのレジスタへデータを書き込む場合、タイミングによっては、正常に動作しなくなる可能性があります。したがって、商用のアプリケーションソフトウェアは直接OPLLをアクセスしてはいけません。OPLLにアクセスする場合は、必ず、FM BIOSを使用するようにして下さい。
1.ウエイト
OPLLでは、内部レジスタにアドレスやデータを書き込むと、次の動作に移るまでにはウエイト時間が必要です。このウエイト時間は、レジスタのアドレスの指定とデータの書き込みで異なります。表7.22で指定された時間だけ、CPUはOPLLに対して、次の動作を待たなければなりません。
このウエイト時間を無視した場合は、そのときに設定したデータは保証されません。
表7.22 OPLLのウエイト時間
モード | ウエイト時間 |
アドレス指定 | 3.36μsec |
データ書き込み | 23.52μsec |
2.内蔵と外付けの両方の音源に対応する方法
現在、市販されている外付けのMSX-MUSICカートリッジとしては、「パナアミューズメントカートリッジ2(以下、FM-PAC)」があります。FM-PACには、MSX-MUSIC内蔵マシンに装着されたときのことを考慮して、FM-PAC内の音源ICをON、OFFできるようになっています(「3.1.3 内蔵・外付け判別データ」参照)。
MSXに電源が入ったときは、FM-PAC内蔵音源ICはOFFになっていて、BASICでCALL MUSIC命令が実行されたり、FM-BIOSの初期化ルーチンが呼ばれたりしたときに、もしMSX本体に音源ICが内蔵されていなければONされます。
したがって、MSX-MUSICが内蔵されていない機種では、ユーザープログラムが直接OPLLをアクセスする場合、以下の方法でFM-PAC内蔵の音源ICをONしなければなりません。
1. 04018H番地から0401FH番地に次の内容を持っているスロットを探します。
DB "APRLOPLL"
2. もしあれば、MSX本体に音源ICが内蔵されているので、そのままで音源ICは操作できます。
3. ない場合には、0401CH番地から0401FH番地に次の内容を持っているスロットを探します。
DB "OPLL"
4. もしなければFM音源IC自体が装着されていませんので、使用出来ません。
5. もしあればそのスロットの07FF6H番地のビット0を「1」にすることにより、FM音源ICをONにできます。このときには、07FF6H番地の内容を一度読み出して、ビット0のみ「1」にして書き込まなければならないことに注意して下さい。