
| 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 の設定 |
| 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 | 出力 |
|
||
| 99h | 出力 |
bit7 BD (バスドラム) bit6 SD (スネアドラム) bit5 LT (ロータム) bit4 HT (ハイタム) bit3 CY (シンバル) bit2 OH (オープンハイハット) bit1 CH (クローズハイハット) bit0 未使用 1 → 0 になった時に発音する。発音後は 1 に戻さないといけない。 |
||
| 9Ah | 出力 |
|
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:入力 |
| オクターブ | 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 |
; CMU-800初期化 ; 破壊: A, C, HL INIT_CMU800 PROC LD HL, IOTBL INIT_CMU800_LOOP: LD A, (HL) INC HL LD C, (HL) INC HL OUT (C), A INC A INC A JR NZ, INIT_CMU800_LOOP DEC A LD (BGM_PLAYER_DELTA_COUNT), A ; A=255 RET IOTBL: ; CMU-800 ; 8255初期化 DW 09B88h ; 8255初期化 (PortABC下位=出力, PortC上位入力) ; リズム初期化 DW 099FFh ; リズム初期化 ; 8253初期化 DW 09330h ; 8253(1) CH1 モード設定 バイナリ, カウンタモード0, 下位,上位の順に読み書き DW 09370h ; 8253(1) CH2 モード設定 バイナリ, カウンタモード0, 下位,上位の順に読み書き DW 093B0h ; 8253(1) CH3 モード設定 バイナリ, カウンタモード0, 下位,上位の順に読み書き DW 09730h ; 8253(2) CH4 モード設定 バイナリ, カウンタモード0, 下位,上位の順に読み書き DW 09770h ; 8253(2) CH5 モード設定 バイナリ, カウンタモード0, 下位,上位の順に読み書き DW 097B0h ; 8253(2) CH6 モード設定 バイナリ, カウンタモード0, 下位,上位の順に読み書き ; CH1消音 DW 09880h ; CV=0, 消音 DW 09A01h ; CH1選択してbit0を1にする DW 09A00h ; CH1選択してbit0を0にする DW 09001h ; 8253 CH1 発音周波数下位8ビット DW 09000h ; 8253 CH1 発音周波数上位8ビット DW 09A01h ; CH1選択してbit0を1にする ; CH2消音 DW 09880h ; CV=0, 消音 DW 09A03h ; CH2選択してbit0を1にする DW 09A02h ; CH2選択してbit0を1にする DW 09101h ; 8253 CH2 発音周波数下位8ビット DW 09100h ; 8253 CH2 発音周波数上位8ビット DW 09A03h ; CH2選択してbit0を1にする ; CH3消音 DW 09880h ; CV=0, 消音 DW 09A05h ; CH3選択してbit0を1にする DW 09A04h ; CH3選択してbit0を0にする DW 09201h ; 8253 CH3 発音周波数下位8ビット DW 09200h ; 8253 CH3 発音周波数上位8ビット DW 09A05h ; CH3選択してbit0を1にする ; CH4消音 DW 09880h ; CV=0, 消音 DW 09A07h ; CH4選択してbit0を1にする DW 09A06h ; CH4選択してbit0を0にする DW 09401h ; 8253 CH4 発音周波数下位8ビット DW 09400h ; 8253 CH4 発音周波数上位8ビット DW 09A07h ; CH4選択してbit0を1にする ; CH5消音 DW 09880h ; CV=0, 消音 DW 09A09h ; CH5選択してbit0を1にする DW 09A08h ; CH5選択してbit0を0にする DW 09501h ; 8253 CH5 発音周波数下位8ビット DW 09500h ; 8253 CH5 発音周波数上位8ビット DW 09A09h ; CH5選択してbit0を1にする ; CH6消音 DW 09880h ; CV=0, 消音 DW 09A0Bh ; CH6選択してbit0を1にする DW 09A0Ah ; CH6選択してbit0を0にする DW 09601h ; 8253 CH6 発音周波数下位8ビット DW 09600h ; 8253 CH7 発音周波数上位8ビット DW 09A0Bh ; CH6選択してbit0を1にする ; CH7消音 DW 09880h ; CV=0, 消音 DW 09A0Dh ; CH7選択してbit0を1にする DW 09A0Ch ; CH7選択してbit0を0にする DW 09C01h ; 未使用 (ダミーポートへ出力) DW 09C00h ; 未使用 (ダミーポートへ出力) DW 09A0Dh ; CH7選択してbit0を1にする ; CH8消音 DW 09880h ; CV=0, 消音 DW 09A0Fh ; CH8選択してbit0を1にする DW 09A0Eh ; CH8選択してbit0を0にする DW 09C01h ; 未使用 (ダミーポートへ出力) DW 09C00h ; 未使用 (ダミーポートへ出力) DW 09A0Fh ; CH8選択してbit0を1にする ; リズム初期化 DW 099FEh ; リズム消音 (bit0は未使用) ENDP
; 演奏前に1度設定する ; SC1 SC0 = 00 → CH0(8253(1) の CH1) ; RL1 RL0 = 11 → LSB → MSB の順で書く ; MODE = 011 → Mode 3(矩形波) ; BCD = 0 → バイナリ ; すべてのチャンネルをMode3の矩形波に設定してLSB→MSBの16bit書き込みに設定する ; 破壊: A SETUP_CMU800_8253 PROC LD A, 036h OUT (93h), A LD A, 076h OUT (93h), A LD A, 0B6h OUT (93h), A LD A, 036h OUT (97h), A LD A, 076h OUT (97h), A LD A, 0B6h OUT (97h), A RET ENDP ; 発音 ; A: 音階, E: チャンネル (0~5) ; 破壊: BC NOTE_ON_CMU800 PROC PUSH AF PUSH DE PUSH HL LD L, A LD H, 0 ADD HL, HL LD BC, NOTE_TABLE ADD HL, BC LD C, (HL) INC HL LD B, (HL) ; 64未満になるまで12を引く @@: CP 64 JR C, @f SUB 12 JR @b @@: OUT (098h), A LD A, E SLA A OR 1 OUT (09Ah), A ; 001h + E(ch) * 2 DEC A OUT (09Ah), A ; 000h + E(ch) * 2 LD A, C ; CH毎の周波数設定 LD D, 0 EX DE, HL LD DE, CMU_800_IO_TABLE ADD HL, DE LD C, (HL) OUT (C), A LD A, B OUT (C), A LD A, 001h OUT (09Ah), A POP HL POP DE POP AF RET ENDP ; 消音 ; E: チャンネル (0~5) ; 破壊: なし NOTE_OFF_CMU800 PROC PUSH AF PUSH DE PUSH HL LD A, 080h OUT (098h), A LD A, E SLA A OR 1 OUT (09Ah), A ; 001h + E(ch) * 2 DEC A OUT (09Ah), A ; 000h + E(ch) * 2 INC A ; CH毎の周波数(消音なので最低値)設定 LD D, 0 EX DE, HL LD DE, CMU_800_IO_TABLE ADD HL, DE LD C, (HL) LD A, 1 OUT (C), A ; 001h DEC A OUT (C), A ; 000h INC A OUT (09Ah), A ; 001h POP HL POP DE POP AF RET ENDP CMU_800_IO_TABLE: DB 90h, 91h, 92h, 94h, 95h, 96h, 9Ch, 9Ch NOTE_TABLE: ; C C+ D D+ E F F+ G G+ A A+ B DW 9741h, 8EBEh, 86BBh, 7F2Eh, 780Bh, 714Eh, 6AEDh, 64ECh, 5F41h, 59E8h, 54D9h, 5015h ; O0 DW 4B95h, 4754h, 4353h, 3F8Dh, 3BFCh, 389Eh, 356Eh, 326Eh, 2F99h, 2CEDh, 2A66h, 2805h ; O1 DW 25C5h, 23A5h, 21A5h, 1FC3h, 1DFBh, 1C4Ch, 1AB4h, 1934h, 17CAh, 1674h, 1531h, 1401h ; O2 DW 12E1h, 11D1h, 10D1h, 0FE1h, 0EFDh, 0E26h, 0D59h, 0C99h, 0BE4h, 0B39h, 0A98h, 0A00h ; O3 DW 0970h, 08E8h, 0868h, 07F0h, 077Eh, 0712h, 06ACh, 064Ch, 05F2h, 059Ch, 054Ch, 0500h ; O4 DW 04B8h, 0474h, 0434h, 03F8h, 03BFh, 0389h, 0356h, 0326h, 02F9h, 02CEh, 02A6h, 0280h ; O5 DW 025Ch, 023Ah, 021Ah, 01FCh, 01DFh, 01C4h, 01ABh, 0193h, 017Ch, 0167h, 0153h, 0140h ; O6 DW 012Eh, 011Dh, 010Dh, 00FEh, 00F0h, 00E2h, 00D5h, 00C9h, 00BEh, 00B3h, 00A9h, 00A0h ; O7 DW 0097h, 008Eh, 0086h, 007Fh, 0078h, 0071h, 006Ah, 0064h, 005Fh, 0059h, 0054h, 0050h ; O8 DW 004Bh, 0047h, 0043h, 003Fh, 003Ch ; O9