MSX Datapack wiki化計画

3.1 MSX-MUSIC ハードウェアの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{include unfinished_page}}

,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[2章 MSX MODEM]]                                                                  ,{BSIZE:0|RIGHT} [[3.2 拡張BASIC|3.2 MSX-MUSIC 拡張BASIC]]                                       →

!!3.1 ハードウェア

!3.1.1 メモリの構成
{{div_begin style='padding-left:3em;'}}
{{svg 図7.18.svg,,size:220x150}}
'''図7.18 MSX-MUSICのメモリ構成'''
{{div_end}}
!3.1.2 I/Oの構成

'''1.本体内蔵の場合'''

'''表7.19 MSX-MUSIC I/O構成(本体内蔵)'''
,{t},{BSIZE:2 0}
,{c},{BSIZE:1 0|SIZE:100},{BSIZE:1 0|SIZE:100},{BSIZE:1 0|SIZE:600}
,I/Oアドレス,Read/Write,OPLLレジスタ名
,{c},{BSIZE:0},{BSIZE:0},{BSIZE:0}
,7CH,W,アドレスレジスタ
,7DH,W,データレジスタ

'''2.外付けの場合'''
 パナアミューズメントカートリッジ2準拠

'''表7.20 MSX-MUSIC I/O構成(外付け)'''
,{t},{BSIZE:2 0}
,{c},{BSIZE:1 0|SIZE:100},{BSIZE:1 0|SIZE:120},{BSIZE:1 0|SIZE:100},{BSIZE:1 0|SIZE:480}
,I/Oアドレス,メモリアドレス,Read/Write,OPLLレジスタ名
,{c},{BSIZE:0},{BSIZE:0},{BSIZE:0},{BSIZE:0}
,7CH,7FF4H,W,アドレスレジスタ
,7DH,7FF5H,W,データレジスタ

!3.1.3 内蔵・外付け判別データ
 

'''表7.21 内蔵・外付け判別データ'''
,{t},{BSIZE:2 0}
,{c},{BSIZE:1 0|SIZE:100},{BSIZE:1 0|SIZE:120},{BSIZE:1 0|SIZE:100},{BSIZE:1 0|SIZE:380}
,アドレス,データ(内蔵),{COLS:2}データ(外付け),
,{c},{BSIZE:0},{BSIZE:0},{BSIZE:0},{BSIZE:0}
,{SIZE:100}4018H,{SIZE:100}41H'A',{SIZE:100}50H'P',{ROWS:8|TOP}「PAC2」の文字列は、「パナアミューズメントカートリッジ2」の場合。{{br}}この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のウエイト時間'''
,{t},{BSIZE:2 0}
,{c},{BSIZE:1 0|SIZE:150},{BSIZE:1 0|SIZE:580}
,モード,ウエイト時間
,{c},{BSIZE:0},{BSIZE:0},{BSIZE:0}
,アドレス指定,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」にして書き込まなければならないことに注意して下さい。 

,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[2章 MSX MODEM]]                                                                  ,{BSIZE:0|RIGHT} [[3.2 拡張BASIC|3.2 MSX-MUSIC 拡張BASIC]]                                       →