内蔵
| I/Oアドレス | Read/Write | OPLLレジスタ名 |
|---|---|---|
| 7CH | W | アドレスレジスタ |
| 7DH | W | データレジスタ |
外付け(FMPAC)
| I/Oアドレス | メモリアドレス | Read/Write | OPLLレジスタ名 |
|---|---|---|---|
| 7CH | 7FF4H | W | アドレスレジスタ |
| 7DH | 7FF5H | W | データレジスタ |
外付けFMPACをI/Oポートに接続にする場合、07FF6Hの値を読みだしてbit0を1にして書き戻す。
401CHに"OPLL" (4バイト)があったらFM-BIOS ROM。
4018Hに"PAC2OPLL" → FMPAC
4018Hに"APRLOPLL" → 内蔵MSX-MUSIC
| エントリ | WRTOPL (4110H) |
|---|---|
| 機能 | OPLLレジスタへデータを書き込みます。 |
| 入力 | A=OPLLのレジスタ番号 |
| E=書き込むデータ | |
| 出力 | なし |
| レジスタ | なし |
| 解説 | Aレジスタで指定した番号のOPLLレジスタに、Eレジスタの内容を書き込みます。 |
| このエントリルーチン内では、割り込み禁止・解除をしていないので、必要に応じてDI、EIを行う必要があります。 |
| エントリ | INIOPL (4113H) |
|---|---|
| 機能 | FM BIOSの環境を整えます。 |
| 入力 | HL=ワークエリアの先頭アドレス(偶数) |
| 出力 | なし |
| レジスタ | すべて |
| 解説 | HLレジスタで指定されたアドレス(偶数)に、FM BIOSで使用するワークエリアを設定し、全てのFM BIOS用のワークエリアおよびOPLLレジスタを初期化します。 |
| ワークエリアの先頭アドレス(偶数)は、【SLTWRK(0FD09H~)】に格納されます。 | |
| 指定されたアドレスがRAMでない場合は動作保証しません。 | |
| FM BIOSをコールするときは、最初にINIOPLを呼び出さなくてはなりません。 | |
| このルーチンを1度も呼び出さずに、他のエントリルーチンを呼び出したときは、正常には動作しません。 | |
| EI状態で戻ります。 | |
| 注意事項 | INIOPLはENASLTを使用してページ1を他のスロットに切り替え、複数のFM-BIOSが存在するかどうか調べます。 |
| そのため、拡張スロットの状態が呼び出し前と異なる状態で帰って来ることがあります。 | |
| I/Oポート(A8H)のページ1の基本スロットと、そのスロットの拡張スロットレジスタ(FFFFh)のうち、最低限、拡張スロット選択レジスタを元に戻す必要があります。 | |
| 例)スロット0-0にBASIC、スロット1~3にFM BIOSがある場合などはUSR関数からINIOPLを呼び出すとBASICに戻れずに暴走します。 |
| エントリ | MSTART (4116H) |
|---|---|
| 機能 | 演奏開始 |
| 入力 | HL=ミュージックデータの先頭アドレス |
| A=演奏回数 | |
| 0 = 無限 | |
| 1~254=くり返し回数の指定 | |
| 255=動作保証無し | |
| 出力 | なし |
| レジスタ | すべて |
| 解説 | HLレジスタで指定されたアドレスにあるミュージックデータを演奏開始します。 |
| (OPLDRVを割り込みから呼ぶ様にしておかなければ演奏されません。) | |
| EI状態で戻ります。 |
| エントリ | MSTOP (4119H) |
|---|---|
| 機能 | 演奏停止 |
| 入力 | なし |
| 出力 | なし |
| レジスタ | すべて |
| 解説 | EI状態で戻ります。 |
| エントリ | RDDATA (411CH) |
|---|---|
| 機能 | ROM上の音色データを得る |
| 入力 | HL=データを格納するアドレス |
| A=音色番号(0~63) | |
| 出力 | なし |
| レジスタ | F |
| 解説 | HLレジスタで指定したアドレスから8バイトの空きエリアが必要です。 |
| HLレジスタで指定したアドレスからOPLLレジスタの0~7の形で値が順に格納されます。 |
| エントリ | OPLDRV (411FH) |
|---|---|
| 機能 | OPLLドライバーエントリー |
| 入力 | なし |
| 出力 | なし |
| レジスタ | なし |
| 解説 | INIOPLコール後 H.TIMIフックから呼び出します。 |
| INIOPLコール前の動作は保証できません。 |
| エントリ | TSTBGM (4122H) |
|---|---|
| 機能 | 演奏状態を得る |
| 入力 | なし |
| 出力 | A=0:演奏終了 |
| 0以外:演奏中 | |
| レジスタ | AF |
| adr. | value | size | desc. |
|---|---|---|---|
| +00H | rhythm オフセット | 2バイト | 000EH |
| +02H | CH1 オフセット | 2バイト | |
| +04H | CH2 オフセット | 2バイト | |
| +06H | CH3 オフセット | 2バイト | |
| +08H | CH4 オフセット | 2バイト | |
| +0AH | CH5 オフセット | 2バイト | |
| +0CH | CH6 オフセット | 2バイト | |
| +0EH | データ本体 |
| adr. | value | size | desc. |
|---|---|---|---|
| +00H | CH1 オフセット | 2バイト | 0012H |
| +02H | CH2 オフセット | 2バイト | |
| +04H | CH3 オフセット | 2バイト | |
| +06H | CH4 オフセット | 2バイト | |
| +08H | CH5 オフセット | 2バイト | |
| +0AH | CH6 オフセット | 2バイト | |
| +0CH | CH7 オフセット | 2バイト | |
| +0EH | CH8 オフセット | 2バイト | |
| +10H | CH1 オフセット | 2バイト | |
| +14H | データ本体 |
| value | 意味 | 補足 |
|---|---|---|
| 00H | 休符 | 続く1バイトが音長。 |
| 音長が0FFHのときはさらに続く1バイトも音長に加算。 | ||
| (0FFH以外の値が来るまで繰り返し) | ||
| 01H~ 5FH | 音程 | 続く1バイトが音長。 |
| 音長が0FFHのときはさらに続く1バイトも音長に加算。 | ||
| (0FFH以外の値が来るまで繰り返し) | ||
| 60H~ 6FH | 音量 | この値から60Hを引いた値が、音量として使用される。 |
| 70H~ 7FH | 音色 | この値から70Hを引いた値が、音色番号として使用される。 |
| 80H, 81H | サスティン | 80HでサスティンOFF。81HでサスティンON。 |
| 82H | 拡張音色 | 続く1バイトの値(0~63)がROMの拡張音色番号。 |
| (MSX-MUSIC拡張音色データは4C00H) | ||
| 83H | ユーザー音色 | 続く2バイトの値が音色データ先頭アドレス。 |
| (指定は絶対アドレスなので非リロケータブル) | ||
| 84H | レガートオフ | 音を音符毎に切る。 |
| 85H | レガートオン | 音を切らずにつなぐ。 |
| 86H | Q指定 | 続く1バイト(1~8)で指定。 |
| (レガートオン時は、Q指定を無視) | ||
| 87H~0FEH | 未使用 | |
| 0FFH | 終了 | チャンネル毎のデータの終了コード。 |
00H~5FHが音程コマンドだが、00HHは休符となる為、
使用できる音程はo1cから08a#まで。
o8bは使用できない。
| C | C# | D | D# | E | F | F# | G | G# | A | A# | B | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 01H | 02H | 03H | 04H | 05H | 06H | 07H | 08H | 09H | 0AH | 0BH | 0CH |
| 2 | 0DH | 0EH | 0FH | 10H | 11H | 12H | 13H | 14H | 15H | 16H | 17H | 18H |
| 3 | 19H | 0AH | 1BH | 1CH | 1DH | 1EH | 1FH | 20H | 21H | 22H | 23H | 24H |
| 4 | 25H | 26H | 27H | 28H | 29H | 2AH | 2BH | 2CH | 2DH | 2EH | 2FH | 30H |
| 5 | 31H | 32H | 33H | 34H | 35H | 36H | 37H | 38H | 39H | 3AH | 3BH | 3CH |
| 6 | 3DH | 3EH | 3FH | 40H | 41H | 42H | 43H | 44H | 45H | 46H | 47H | 48H |
| 7 | 49H | 4AH | 4BH | 4CH | 4DH | 4EH | 4FH | 50H | 51H | 52H | 53H | 54H |
| 8 | 55H | 56H | 57H | 58H | 59H | 5AH | 5BH | 5CH | 5DH | 5EH | 5FH | --- |
| ビット | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| 意味 | V | 0 | 1 | B | S | T | C | H |
| ビット | 意味 |
|---|---|
| B | 1 = バスドラムを指定。 |
| S | 1 = スネアドラムを指定。 |
| T | 1 = タムタムを指定。 |
| C | 1 = シンバルを指定。 |
| H | 1 = ハイハットを指定。 |
| V | 0 = リズム発声。続くデータが音長データ。 (読み出し方はメロディ部の音長の場合と同じ) |
| 1 = 音量を指定します。続く1バイトが音量データ(0~15)。 | |
| 0FFH | リズム部のデータの最終コード。 |
| ofs. | C/M | bit7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|
| +0 | (M) | AM | VIB | EG | KSR | MULtiple | |||
| +1 | (C) | AM | VIB | EG | KSR | MULtiple | |||
| +2 | (M) | KSL | Total Level | ||||||
| +3 | (C) | KSL | 0 | DC | DM | FeedBack(M) | |||
| +4 | (M) | Attack Rate | Decay Rate | ||||||
| +5 | (C) | Attack Rate | Decay Rate | ||||||
| +6 | (M) | Sustain Level | Release Rate | ||||||
| +7 | (C) | Sustain Level | Release Rate | ||||||
(M): Modulator
(C): Carrier
Multiple値と周波数倍率の関係について、
特殊なものは、0(半分)、10と11(10倍)、12と13(12倍)、14と15(15倍)。
それ以外は指定値通りの倍率。
| ofs | size | bit | name | long name | 補足 |
|---|---|---|---|---|---|
| +0 | 1 | 7 | AM (M) | Amplitude Modulation | (M) 音量ビブラート |
| 1 | 6 | VB (M) | Vibrato | (M) 音程ビブラート | |
| 1 | 5 | EG (M) | EG Type | (M) 1なら減衰音 | |
| 1 | 4 | KSR(M) | Key Scale Rate | (M) 音程が高いほど変化が速い | |
| 4 | 3-0 | MUL(M) | Multiple | (M) 周波数倍率 | |
| +1 | 1 | 7 | AM (C) | Amplitude Modulation | (C) 音量ビブラート |
| 1 | 6 | VB (C) | Vibrato | (C) 音程ビブラート | |
| 1 | 5 | EG (C) | EG Type | (C) 1なら減衰音 | |
| 1 | 4 | KSR(C) | Key Scale Rate | (C) 音程が高いほど変化が速い | |
| 3 | 3-0 | MUL(C) | Multiple | (C) 周波数倍率 | |
| +2 | 2 | 7-6 | KSL(M) | Key Scale Level | (M) 音程が高いほど出力が減衰 |
| 6 | 5-0 | TL (M) | Total Level | (M) 出力を減衰 | |
| +3 | 2 | 7-6 | KSL(C) | Key Scale Level | (C) 音程が高いほど出力が減衰 |
| 1 | 5 | 0 | --- | (-) 常に0 | |
| 1 | 4 | DC (C) | Distortion (C) | (C) 半波整流 | |
| 1 | 3 | DM (M) | Distortion (M) | (M) 半波整流 | |
| 3 | 2-0 | FB (M) | FeedBack | (M) フィードバック | |
| +4 | 4 | 7-4 | AR (M) | Attack Rate | (M) アタックレート |
| 4 | 3-0 | DR (M) | Decay Rate | (M) ディケィレート | |
| +5 | 4 | 7-4 | AR (C) | Attack Rate | (C) アタックレート |
| 4 | 3-0 | DR (C) | Decay Rate | (C) ディケィレート | |
| +6 | 4 | 7-4 | SL (M) | Sustain Level | (M) サスティンレベル |
| 4 | 3-0 | RR (M) | Release Rate | (M) リリースレート | |
| +7 | 4 | 7-4 | SL (C) | Sustain Leve | (C) サスティンレベル |
| 4 | 3-0 | RR (C) | Release Rate | (C) リリースレート |