※ ※ このページは書きかけです。以下の可能性があります。 ※ ・誤字、脱字等のチェックをおこなっていません。 ※ ・テキスト、表などフォーマットがされていない。 ※ ・画像が抜けている。 ※
MSX-MIDIは、内蔵と外付けによって、ハードウェア構成やアクセス方法が異なります。以下では、MSX-MIDIのハードウェア構成について説明します。
なお、タイマー用ICとして8253または8254を使用しますが、以下では「8253」と表記します。
2.1 ブロック図
MSX-MIDIのハードウェアは以下のような構成になっています。
2.2 内蔵MIDIインターフェース
本体に内蔵されたMSX-MIDIインターフェイスのI/Oポートは、次のように割り当てられています。
・8251インターフェイス 0E8H、0E9H番地
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | ||
OE8H | (Read) | RXD7 | RXD6 | RXD5 | RXD4 | RXD3 | RXD2 | RXD1 | RXD0 |
(Write) | TXD7 | TXD6 | TXD5 | TXD4 | TXD3 | TXD2 | TXD1 | TXD0 |
RXD7〜RXDO 8251 | 受信データ |
TXD7〜TXDO 8251 | 送信データ |
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | ||
OE9H | (Read) | DSR | BRK | FE | OE | PE | EMPT | RRDY | TRDY |
DSR | 8253 | タイマー割り込みフラグ | (1=割り込み発生) |
BRK | 8251 | ブレークコード検出 | (1=検出) |
FE | 8251 | フレームエラーフラグ | (1=エラー発生) |
OE | 8251 | オーバーランエラーフラグ | (1=エラー発生) |
PE | 8251 | パリティエラーフラグ | (1=パリティエラー発生) |
EMPT | 8251 | 送信バッファステータス | (1=送信バッファ空) |
RRDY | 8251 | 受信バッファステータス | (1=データ有り) |
TRDY | 8251 | 送信ステータス | (1=送信可能) |
0E9H | (Write) | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
モード | S2 | S1 | EP | PEN | L2 | L1 | B2 | B2 | |
コマンド | EH | IR | RIE | ER | SBRK | RE | 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=禁止) |
8251のコマンド・モードレジスタの書き込み回復時間は、最大16クロック(3.579545MHz)必要です。8251の初期化など、連続してコマンド・モードレジスタに書き込みをする際は、ウエイトを入れて下さい。
8251はI/Oポートの0E9Hに00H、00H、00H、40Hを書き込むと、リセットされます。モードに誤った値を設定すると、MIDIとして機能しなくなるので、リセット後は必ず特定の値を設定します。詳細は、添付のサンプルプログラム(「THRU.MAC」)を参照して下さい。
・8253 OUT2端子の信号のラッチ(0EAH、0EBH番地)
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | ||
0EAH | (Write) | - | - | - | - | - | - | - | - |
0EAH番地のデータリードは無効 0EBH番地は0EAH番地のイメージ
8253のカウンタ#2からの割り込みは、0EAH番地への任意のデータ書き込みによって解除されます。
・8253インターフェイス(0ECH〜0EFH番地)
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | ||
0ECH | (R/W) | CT07 | CT06 | CT05 | CT04 | CT03 | CT02 | CT01 | CT00 |
0EDH | (R/W) | CT17 | CT16 | CT15 | CT14 | CT13 | CT12 | CT11 | CT10 |
0EEH | (R/W) | CT27 | CT26 | CT25 | CT24 | CT23 | CT22 | CT21 | CT20 |
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番地)
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | ||
0E2H | (Write) | EN | - | - | - | - | - | - | E8 |
EN | MIDIインターフェイスの使用許可、禁止 | (0=許可、1=禁止) |
初期値は1。 | ||
E8 | 8251アドレス設定 | (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) | RXD7 | RXD6 | RXD5 | RXD4 | RXD3 | RXD2 | RXD1 | RXD0 | |
(Write) | TXD7 | TXD6 | TXD5 | TXD4 | TXD3 | TXD2 | TXD1 | TXD0 |
RXD7〜RXD0 | 8251 | 受信データ |
TXD7〜TXD0 | 8251 | 受信データ |
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | ||
0E1H | (Read) | DSR | BRK | FE | OE | PE | EMPT | RRDY | TRDY |
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | ||
0E0H | (Read) | RXD7 | RXD6 | RXD5 | RXD4 | RXD3 | RXD2 | RXD1 | RXD0 |
(Write) | TXD7 | TXD6 | TXD5 | TXD4 | TXD3 | TXD2 | TXD1 | TXD0 |
DSR | 8253 | タイマー割り込みフラグ | (1=割り込み発生) |
BRK | 8251 | ブレークコード検出 | (1=検出) |
FE | 8251 | フレームエラーフラグ | (1=エラー発生) |
OE | 8251 | オーバーランエラーフラグ | (1=エラー発生) |
PE | 8251 | パリティエラーフラグ | (1=パリティエラー発生) |
EMPT | 8251 | 送信バッファステータス | (1=送信バッファ空) |
RRDY | 8251 | 受信バッファステータス | (1=データ有り) |
TRDY | 8251 | 送信ステータス | (1=送信可能) |
0E1H | (Write) | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
モード | S2 | S1 | EP | PEN | L2 | L1 | B2 | B1 | |
コマンド | EH | IR | RIE | ER | SBRK | RE | 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インターフェイスは使用できません。