CMU-800 の仕様

CMU-800 は 1982 年 AMDEK (アムデック株式会社) という会社から発売されました。AMDEK は 1983 年に
RolandDG (ローランド ディー.ジー.株式会社) に社名を変更しました。今ではプロッタープリンタや大型インクジェットプリンタなどを販売しています。



仕様
・6 ボイス (メロディ 1 音、ベース 1 音、コード 4 音 ) の内蔵音源。 (DCO 音源)
・7 音色のリズム
・8 台分のアナログシンセ用 CV/GATE 出力

CMU-800 には 8253 という IC が 2 つ、8255 という IC が 1 つ使用されています。8253 は、内蔵音源の音階の高さを設定できます。ひとつの 8253 が内蔵音源 3 ボイス分、それが 2 つで 6 ボイス分設定できます。8255 は、リズムや設定した音階の発音などを制御します。

それぞれの IC の I/O アドレスは以下のように定義されています。
以下は MZ-2200 での調査結果ですが、MZ-80K、MZ-700、PC-8001でも同じになっているようです。
IC 8253 (1)
90h 出力 チャンネル 1、メロディの音階設定
91h 出力 チャンネル 2、ベースの音階設定
92h 出力 チャンネル 3、コード 1 の音階設定
93h 出力 IC 8253 (1) の設定
IC 8253 (2)
94h 出力 チャンネル 4、コード 2 の音階設定
95h 出力 チャンネル 5、コード 3 の音階設定
96h 出力 チャンネル 6、コード 4 の音階設定
97h 出力 IC 8253 (2) の設定
IC 8255
98h 出力 CV-OUT、TUNE-GATE、KEY ON/OFF の設定
99h 出力 内蔵リズムの設定
9Ah 出力 チャンネルセレクト、設定完了の設定 (下位 4 ビット)
9Ah 入力 タイミング (上位 4 ビット)
9Bh 出力 IC 8255 の設定
※ CMU-800 のシーケンサーソフトでは、チャンネル 7,8 の設定時に音階を 9Ch に書き込みます。しかし、実際は何も起きません。この I/O ポートには、なにも接続されていないようです。

I/O ポート詳細
90h 出力 チャンネル 1 の発音周波数を下位、上位の順番で 16bit 分書き込みます。
内蔵音源にのみ影響し外部機器には影響しません。
91h 出力 チャンネル 2 同上
92h 出力 チャンネル 3 同上
93h 出力 8253 (1) モードコントロール
カウンタモードは演奏中にモード3、停止中にモード0が設定されます。
bit7 SC1 カウンタ選択、コマンド選択 (00:チャンネル1, 01:チャンネル2, 10:チャンネル3
bit6 SC0 ↑
bit5 RW1 カウンタリードライトモード (11:下位,上位の順に読み書き, 00:カウンタラッチ)
bit4 RW0 ↑
bit3 M2 カウンタモード (000:モード0, 010:モード2, 011:モード3)
bit2 M1 ↑
bit1 M0 ↑
bit0 BCD (0:バイナリ, 1:BCDカウント選択)
94h 出力 チャンネル 4 の発音周波数を下位、上位の順番で 16bit 分書き込みます。
内蔵音源にのみ影響し外部機器には影響しません。
95h 出力 チャンネル 5 同上
96h 出力 チャンネル 6 同上
97h 出力 8253 (2) モードコントロール
カウンタモードは演奏中にモード3、停止中にモード0が設定されます。
bit7 SC1 カウンタ選択、コマンド選択 (00:チャンネル4, 01:チャンネル5, 10:チャンネル6
bit6 SC0 ↑
bit5 RW1 カウンタリードライトモード (11:下位,上位の順に読み書き, 00:カウンタラッチ)
bit4 RW0 ↑
bit3 M2 カウンタモード (000:モード0, 010:モード2, 011:モード3)
bit2 M1 ↑
bit1 M0 ↑
bit0 BCD (0:バイナリ, 1:BCDカウント選択)
98h 出力
bit0-5
bit6

bit7
CV-OUT データ (外部端子に出力される、内蔵音源に影響しない)
TUNE-GATE (1 だと CHORD の音が出なくなるのかもしれない・・未確認
1にして消音しておいてCHORDを全チャンネル設定して0にすると同時発音できるとか??)
GATE-DATA (0 で発音、1 で消音)
99h 出力 bit0 未使用
bit1 CH (クローズハイハット)
bit2 OH (オープンハイハット)
bit3 CY (シンバル)
bit4 HT (ハイタム)
bit5 LT (ロータム)
bit6 SD (スネアドラム)
bit7 BD (バスドラム)
1 → 0 になった時に発音する。発音後は 1 に戻さないといけない。
9Ah 出力
bit0
bit1-3
1 → 0 になった時に bit1-3 のチャンネルの設定を反映。反映後は 1 に戻さないといけない
設定するチャンネル (0 ~ 7)
9Ah 入力 bit4-7 CMU-800 のテンポに合わせて 0000b か 1111b に変化する。
9Bh 出力 8255 モードコントロール
通常88h(10001000b)が設定される。
b7 0:ビット単位の書き込み, 1:設定
b6 Reserved (通常0)
b5 Reserved (通常0)
b4 Aポート(98h) 0:出力, 1:入力
b3 Cポート(9Ah)上位4ビット 0:出力, 1:入力
b2 Reserved (通常0)
b1 Bポート(99h) 0:出力, 1:入力
b0 Cポート(9Ah)下位4ビット 0:出力, 1:入力
※ 8253 モードコントロール、8255 モードコントロールについての詳しい仕様はそれぞれの IC の仕様を参照してください。8253 や 8255 はコントロールワードによりいろいろな設定をすることができますが、CMU-800 では固定機能しか使っていません。

8253 に設定する内蔵音源の音階データ表
オクターブ C C+ D D+ E F F+ G G+ A A+ B
0 9741h 8EBEh 86BBh 7F2Eh 780Bh 714Eh 6AEDh 64ECh 5F41h 59E8h 54D9h 5015h
1 4B95h 4754h 4353h 3F8Dh 3BFCh 389Eh 356Eh 326Eh 2F99h 2CEDh 2A66h 2805h
2 25C5h 23A5h 21A5h 1FC3h 1DFBh 1C4Ch 1AB4h 1934h 17CAh 1674h 1531h 1401h
3 12E1h 11D1h 10D1h 0FE1h 0EFDh 0E26h 0D59h 0C99h 0BE4h 0B39h 0A98h 0A00h
4 0970h 08E8h 0868h 07F0h 077Eh 0712h 06ACh 064Ch 05F2h 059Ch 054Ch 0500h
5 04B8h 0474h 0434h 03F8h 03BFh 0389h 0356h 0326h 02F9h 02CEh 02A6h 0280h
6 025Ch 023Ah 021Ah 01FCh 01DFh 01C4h 01ABh 0193h 017Ch 0167h 0153h 0140h
7 012Eh 011Dh 010Dh 00FEh 00F0h 00E2h 00D5h 00C9h 00BEh 00B3h 00A9h 00A0h
8 0097h 008Eh 0086h 007Fh 0078h 0071h 006Ah 0064h 005Fh 0059h 0054h 0050h
9 004Bh 0047h 0043h 003Fh 003Ch

MZ-2000版シーケンサーから送られてくる初期化ポート一覧
Port: 9B, Data: 88   ; 8255設定(PortA/B/C下位=出力、PortC上位=入力)
Port: 99, Data: FF   ; リズム消音(PortB 全ビット1)

; --- 8253(1) CH1〜CH3 モード設定(MODE0, LSB→MSB) ---
Port: 93, Data: 30   ; 8253(1) CH1 モード設定 CH1~6のモードは演奏時にちゃんとしたデータをセットする
Port: 93, Data: 70   ; 8253(1) CH2 モード設定
Port: 93, Data: B0   ; 8253(1) CH3 モード設定

; --- 8253(2) CH4〜CH6 モード設定(MODE0, LSB→MSB) ---
Port: 97, Data: 30   ; 8253(2) CH4 モード設定
Port: 97, Data: 70   ; 8253(2) CH5 モード設定
Port: 97, Data: B0   ; 8253(2) CH6 モード設定

; ===== CH1 =====
Port: 98, Data: 80   ; CV/GATE(Gate=1=OFF, CV=0)
Port: 9A, Data: 01   ; CH1選択(ストローブ=1)
Port: 9A, Data: 00   ; ストローブ 1→0(CH0ラッチ)
Port: 90, Data: 01   ; 8253 CH1 LSB
Port: 90, Data: 00   ; 8253 CH1 MSB(カウンタ=0001h)
Port: 9A, Data: 01   ; CH1再選択

; ===== CH2 =====
Port: 98, Data: 80   ; Gate OFF
Port: 9A, Data: 03   ; CH2選択
Port: 9A, Data: 02   ; ストローブ 1→0
Port: 91, Data: 01   ; 8253 CH2 LSB
Port: 91, Data: 00   ; 8253 CH2 MSB
Port: 9A, Data: 03   ; CH2再選択

; ===== CH3 =====
Port: 98, Data: 80   ; Gate OFF
Port: 9A, Data: 05   ; CH3選択
Port: 9A, Data: 04   ; ストローブ
Port: 92, Data: 01   ; 8253 CH3 LSB
Port: 92, Data: 00   ; 8253 CH3 MSB
Port: 9A, Data: 05   ; CH3再選択

; ===== CH4 =====
Port: 98, Data: 80   ; Gate OFF
Port: 9A, Data: 07   ; CH4選択
Port: 9A, Data: 06   ; ストローブ
Port: 94, Data: 01   ; 8253(2) CH4 LSB
Port: 94, Data: 00   ; 8253(2) CH4 MSB
Port: 9A, Data: 07   ; CH4再選択

; ===== CH5 =====
Port: 98, Data: 80   ; Gate OFF
Port: 9A, Data: 09   ; CH5選択
Port: 9A, Data: 08   ; ストローブ
Port: 95, Data: 01   ; 8253(2) CH5 LSB
Port: 95, Data: 00   ; 8253(2) CH5 MSB
Port: 9A, Data: 09   ; CH5再選択

; ===== CH6 =====
Port: 98, Data: 80   ; Gate OFF
Port: 9A, Data: 0B   ; CH6選択
Port: 9A, Data: 0A   ; ストローブ
Port: 96, Data: 01   ; 8253(2) CH6 LSB
Port: 96, Data: 00   ; 8253(2) CH6 MSB
Port: 9A, Data: 0B   ; CH6再選択

; ===== CH7 =====
Port: 98, Data: 80   ; Gate OFF
Port: 9A, Data: 0D   ; CH7選択
Port: 9A, Data: 0C   ; ストローブ
Port: 9C, Data: 01   ; 未使用??
Port: 9C, Data: 00   ; 未使用??
Port: 9A, Data: 0D   ; CH7再選択

; ===== CH8 =====
Port: 98, Data: 80   ; Gate OFF
Port: 9A, Data: 0F   ; CH8選択
Port: 9A, Data: 0E   ; ストローブ
Port: 9C, Data: 01   ; 未使用??
Port: 9C, Data: 00   ; 未使用??
Port: 9A, Data: 0F   ; CH8再選択

Port: 99, Data: FE   ; リズムPortB bit0のみ 1→0

MZ-2000版シーケンサーから送られてくる演奏時のポート例
Port: 93, Data: 36   ; 8253(1) CH1 Melody: Control Word (Mode3, LSB/MSB)
Port: 93, Data: 76   ; 8253(1) CH2 Bass: Control Word
Port: 93, Data: B6   ; 8253(1) CH3 Chord1: Control Word
Port: 97, Data: 36   ; 8253(2) CH4 Chord2: Control Word
Port: 97, Data: 76   ; 8253(2) CH5 Chord3: Control Word
Port: 97, Data: B6   ; 8253(2) CH6 Chord4: Control Word

Port: 98, Data: 80   ; PA7=1 → GATE=OFF(全CH消音状態)
Port: 9A, Data: 01   ; CH1 select (PC3-1=000, PC0=1)
Port: 9A, Data: 00   ; Strobe=0 → CH1 に GATE を書き込む

Port: 90, Data: 41   ; Melody CH1: LSB 周波数
Port: 90, Data: 97   ; Melody CH1: MSB 周波数
Port: 9A, Data: 01   ; CH1 select

Port: 98, Data: 80   ; GATE=OFF
Port: 9A, Data: 03   ; CH2 select
Port: 9A, Data: 02   ; Strobe
Port: 91, Data: 41   ; Bass CH2: LSB
Port: 91, Data: 97   ; Bass CH2: MSB
Port: 9A, Data: 03   ; CH2 select

Port: 98, Data: 2E   ; CV値(外部CV用、内蔵音源には無関係)
Port: 9A, Data: 05   ; CH3 select
Port: 9A, Data: 04   ; Strobe
Port: 92, Data: 98   ; Chord1 CH3: LSB
Port: 92, Data: 0A   ; Chord1 CH3: MSB
Port: 9A, Data: 05   ; CH3 select

Port: 98, Data: 25   ; CV
Port: 9A, Data: 07   ; CH4 select
Port: 9A, Data: 06   ; Strobe
Port: 94, Data: D1   ; Chord2 CH4: LSB
Port: 94, Data: 11   ; Chord2 CH4: MSB
Port: 9A, Data: 07   ; CH4 select

Port: 98, Data: A9   ; CV
Port: 9A, Data: 09   ; CH5 select
Port: 9A, Data: 08   ; Strobe
Port: 95, Data: 25   ; Chord3 CH5: LSB
Port: 95, Data: 0E   ; Chord3 CH5: MSB
Port: 9A, Data: 09   ; CH5 select

Port: 98, Data: 0A   ; CV
Port: 9A, Data: 0B   ; CH6 select
Port: 9A, Data: 0A   ; Strobe
Port: 96, Data: D9   ; Chord4 CH6: LSB
Port: 96, Data: 54   ; Chord4 CH6: MSB
Port: 9A, Data: 0B   ; CH6 select

Port: 98, Data: 80   ; GATE=OFF
Port: 9A, Data: 0D   ; CH7?(存在しないが、内部的には無視される)
Port: 9A, Data: 0C   ; Strobe
Port: 9C, Data: 01   ; 8255 Command(モード設定)
Port: 9C, Data: 00   ; 8255 Command
Port: 9A, Data: 0D   ; CH7 select

Port: 98, Data: 80   ; GATE=OFF
Port: 9A, Data: 0F   ; CH8?(存在しない)
Port: 9A, Data: 0E   ; Strobe
Port: 9C, Data: 01   ; 8255 Command
Port: 9C, Data: 00   ; 8255 Command
Port: 9A, Data: 0F   ; CH8 select

Port: 99, Data: FC   ; Rhythm trigger(BD/SD/OH/CH などの立下りトリガ)

; 以下、同じパターンで Melody→Bass→Chord1→Chord2→Chord3→Chord4→Rhythm triggerを順に設定

感謝
CMU-800 の仕様を作成する際にたくさんの方に協力していただきました。
私が CMU-800 に興味を持つきっかけを与えてくれたM▲M●さん
MZ-2500 に CMU-800 を接続するためのインターフェースボードを作成してくださった Suga さん
使用されている IC、I/O ポートアドレスを教えてくださった、たかさん
CMU-800 の仕様を解明していただいた MZ-ML の皆さん。
EmuZ-2000 用の CMU-800 プラグインを作成するチャンスを下さった EmuZ-2000 さん
EmuZ-2200 CMU-800 MIDI 対応版を作成するきっかけを作って下さった ぽっぽ/目玉P さん
どうもありがとう。

戻る