MSX Datapack wiki化計画

2章 ハードウェア

※
※ このページは書きかけです。以下の可能性があります。
※ ・誤字、脱字等のチェックをおこなっていません。
※ ・テキスト、表などフォーマットがされていない。
※ ・画像が抜けている。
※

 MSX-MIDIは、内蔵と外付けによって、ハードウェア構成やアクセス方法が異なります。以下では、MSX-MIDIのハードウェア構成について説明します。
 なお、タイマー用ICとして8253または8254を使用しますが、以下では「8253」と表記します。

 2.1 ブロック図

 MSX-MIDIのハードウェアは以下のような構成になっています。

図4.1 MSX-MIDIのブロック図

 2.2 内蔵MIDIインターフェース

 本体に内蔵されたMSX-MIDIインターフェイスのI/Oポートは、次のように割り当てられています。

・8251インターフェイス 0E8H、0E9H番地

b7 b6 b5 b4 b3 b2 b1 b0
OE8H(Read) RXD7RXD6RXD5RXD4RXD3RXD2RXD1RXD0
(Write)TXD7TXD6TXD5TXD4TXD3TXD2TXD1TXD0
 
RXD7〜RXDO 8251受信データ
TXD7〜TXDO 8251送信データ
 
b7 b6 b5 b4 b3 b2 b1 b0
OE9H(Read)DSR BRK FE OE PE EMPTRRDYTRDY
 
DSR 8253タイマー割り込みフラグ (1=割り込み発生)
BRK 8251ブレークコード検出 (1=検出)
FE 8251フレームエラーフラグ (1=エラー発生)
OE 8251オーバーランエラーフラグ(1=エラー発生)
PE 8251パリティエラーフラグ (1=パリティエラー発生)
EMPT8251送信バッファステータス (1=送信バッファ空)
RRDY8251受信バッファステータス (1=データ有り)
TRDY8251送信ステータス (1=送信可能)
 
0E9H(Write) b7 b6 b5 b4 b3 b2 b1 b0
モード S2 S1 EP PEN L2 L1 B2 B2
コマンドEH IR RIE ER SBRKRE TIE TEN
 
EH 通常0に設定します
IR 通常0に設定します
RIE MIDI IN割り込み許可 (1=許可、0=禁止)
ER エラーリセット (1=エラーフラッグのリセット)
(0=ノー・オペレーション)
SBRK通常0に設定します
REMIDI IN受信イネーブル (1=許可、0=禁止)
TIE 8253タイマー(カウンタ#2)(1=許可、0=禁止)
割り込み許可
TEN MIDI OUT送信イネーブル (1=許可、0=禁止)

8251のコマンド・モードレジスタの書き込み回復時間は、最大16クロック(3.579545MHz)必要です。8251の初期化など、連続してコマンド・モードレジスタに書き込みをする際は、ウエイトを入れて下さい。
8251はI/Oポートの0E9Hに00H、00H、00H、40Hを書き込むと、リセットされます。モードに誤った値を設定すると、MIDIとして機能しなくなるので、リセット後は必ず特定の値を設定します。詳細は、添付のサンプルプログラム(「THRU.MAC」)を参照して下さい。

・8253 OUT2端子の信号のラッチ(0EAH、0EBH番地)

b7b6b5b4b3b2b1b0
0EAH(Write)- - - - - - - -

0EAH番地のデータリードは無効
0EBH番地は0EAH番地のイメージ

8253のカウンタ#2からの割り込みは、0EAH番地への任意のデータ書き込みによって解除されます。

・8253インターフェイス(0ECH〜0EFH番地)

b7 b6 b5 b4 b3 b2 b1 b0
0ECH(R/W) CT07CT06CT05CT04CT03CT02CT01CT00
0EDH(R/W) CT17CT16CT15CT14CT13CT12CT11CT10
0EEH(R/W) CT27CT26CT25CT24CT23CT22CT21CT20
0EFH(Read) - - - - - - - -
(Write)SC1 SC0 RW1 RW0 M2 M1 M0 BCD

CT07〜CT00カウンタ#0
CT17〜CT10カウンタ#1
CT27〜CT20 カウンタ#2
SC1、SC0 カウンタ選択、コマンド選択
RW1、RW0 カウンタリードライトモード
M2、M1、M0カウンタモード
BCD バイナリ、BCDカウント選択

各カウンタの機能は次のようになっています。

─ カウンタ#0
8251のボーレートジェネレータとして使われます。CLK端子には4MHzのクロック信号が入力されています。8251に対しては、ボーレートクロックとして500KHzを送信する(8分周する)ように設定しなければなりません。モードは3(方形波N分周モード)で使用します。
─ カウンタ#1
汎用のカウンタとして使うことができます。CLK端子にはカウンタ#2の出力が入力されています。
─ カウンタ#2
CPUへの周期的な割り込みに使用されます(BASICでは5ミリ秒間隔の割り込みとして使用される)。通常、モード2(N分周モード)で使用します。OUT2端子がLOWになると、ラッチ回路を通してCPUに割り込みを発生します。CLK端子には4MHzのクロックが入力されます。

 2.3 外付けMIDIインターフェイス

 外付けのMSX-MIDIインターフェイスは、110ポートの0E2Hに値を設定することによって、I/Oポートのアドレスが変わります。

・MIDIインターフェイスの設定(0E2H、0EAH番地)

b7b6b5b4b3b2b1b0
0E2H(Write)EN- - - - - - E8
ENMIDIインターフェイスの使用許可、禁止(0=許可、1=禁止)
初期値は1。
E88251アドレス設定 (1=0E0H、0E1H番地)
初期値は1。 (0=0E8H、0E9H番地)

E8ビットを0に設定すると、外付けカートリッジのMIDIインターフェイスのI/Oポートは、0E2Hから0EAHに変わり、内蔵MIDIインターフェイスとコンパチブルになります。また、8251のI/Oアドレスは、0E8Hと0E9Hになります。

E8ビットを1に設定すると、8251インターフェイスは0E0H、0E1H番地になり、カートリッジのI/Oの0ECH〜0EFHへのアクセスは禁止されます。また、8253のタイマー割り込みも禁止されます。

・8251インターフェイス(0E0H、0E1H番地)
 (E8ビットが1の場合)

b7 b6 b5 b4 b3 b2 b1 b0
0E0H(Read) RXD7RXD6RXD5RXD4RXD3RXD2RXD1RXD0
(Write)TXD7TXD6TXD5TXD4TXD3TXD2TXD1TXD0
RXD7〜RXD08251受信データ
TXD7〜TXD08251受信データ
b7 b6 b5 b4 b3 b2 b1 b0
0E1H(Read) DSR BRK FE OE PE EMPTRRDYTRDY
b7 b6 b5 b4 b3 b2 b1 b0
0E0H(Read) RXD7RXD6RXD5RXD4RXD3RXD2RXD1RXD0
(Write)TXD7TXD6TXD5TXD4TXD3TXD2TXD1TXD0
DSR 8253タイマー割り込みフラグ (1=割り込み発生)
BRK 8251ブレークコード検出 (1=検出)
FE 8251フレームエラーフラグ (1=エラー発生)
OE 8251オーバーランエラーフラグ(1=エラー発生)
PE 8251パリティエラーフラグ (1=パリティエラー発生)
EMPT8251送信バッファステータス (1=送信バッファ空)
RRDY8251受信バッファステータス (1=データ有り)
TRDY8251送信ステータス (1=送信可能)
0E1H(Write) b7 b6 b5 b4 b3 b2 b1 b0
モード S2 S1 EP PEN L2 L1 B2 B1
コマンドEH IR RIE ER SBRKRE TIE TEN
EH 通常0に設定します
IR 通常0に設定します
RIE MIDI IN割り込み許可 (1=許可、0=禁止)
ER エラーリセット (1=エラーフラグのリセット)
(0=ノー・オペレーション)
SBRK通常0に設定します
RE MIDI IN受信イネーブル   (1=許可、0=禁止)
TIE 8253タイマー(カウンタ#2)(1=許可、0=禁止)
割り込み許可
TEN MIDI OUT送信イネーブル (1=許可、0=禁止)

 2.4 内蔵タイプと外付けタイプとの見分け方

 MAIN ROMの002EH番地のビット0が1の場合は、MSX-MIDIは内蔵されています。
 MAIN ROMのバージョン番号(【002DH】)が03H以上の機種では、外付けカートリッジでMSX-MIDIの機能を使うことができます。
 内蔵タイプと外付けタイプとでは、フックが異なっています。この違いはアプリケーションを作成する上で重要です。フックについては、3.2「フック」と4章「アプリケーション開発の注意」を参照して下さい。
 内蔵タイプと外付けタイプとを判別するにはMSX-MIDIのROMの4018H番地からの文字列を調べます。

表4.1 MSX-MIDIの判別用文字列

アドレス内蔵 外付け
4018H 41H(A)??H(?)
4019H 50H(P)??H(?)
401AH 52H(R)??H(?)
401BH 4CH(L)??H(?)
401CH 4FH(O)4DH(M)
401DH 50H(P)49H(I)
401EH 4CH(L)44H(D)
401FH 4CH(L)49H(I)

 外付けカートリッジでは、4018Hからの4バイトはメーカーごとに異なる任意のデータになります。401CHからのデータは「MIDI」となっています。

 2.5 MIDIインターフェイスの有無の判別方法

 MIDIインターフェイスの有無は、次のように判別します。

1. MAIN ROMの002EH番地のビット0が1の場合、MIDIインターフェイスは内蔵されています。
2. MAIN ROMのバージョン番号(002DH)が03H以上の場合、401CH〜401FHに次の内容を持つスロットを探します。

DB "MIDI"

 もしあれば、外付けカートリッジが実装されています。

3. 以上のことにあてはまらない場合、MIDIインターフェイスは存在しないので、MIDI機能は使用できません。
4. ROMのバージョン番号(002DH)が02H以下の場合、MIDIインターフェイスは使用できません。