Sound Blaster Pro II など に搭載されているFM音源ICです。
たぶん互換性があるであろう Sound Blaster 16 やそのエミュレータなどでも使用できる可能性があります。
DOSや自作系OS用のアプリを作成するための資料として自分用に整理中。
(以下書きかけです。間違っていたり誤記がある可能性があります)
サウンドカード | ベースポート |
Sound Blaster Pro II | 220h または 240h など(選択可) |
AdLib Gold | 388h |
※Sound Blaster Pro I など は YMF262では無く FM1812 が2つ使用されているそうです。
その場合、ベース+0~+1とベース+2~+3は両方ともFM1812のレジスタマップとなり2オペレータ18チャネルのみ利用可能と思われます。
I/Oポート番号 | アクセス | ポートの意味 |
ベース+0 | R | ステータスレジスタ |
W | プライマリ インデックスレジスタ | |
ベース+1 | W | プライマリ データレジスタ |
ベース+2 | W | セカンダリ インデックスレジスタ |
ベース+3 | W | セカンダリ データレジスタ |
※Sound Blaster では ベース+8~+9(228h~229hなど) でプライマリのレジスタがアクセスできるが、ベース+10~+11(22Ah~22Bh)からセカンダリのレジスタにはアクセスできない(らしい)。
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
IRQ | TF1 | TF2 | - | 0 | - |
アドレス (hex) | プライマリ | セカンダリ | |||||||||||||||
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | ||
01h | LSI TEST | - | LSI TEST | ||||||||||||||
- | WM | - | |||||||||||||||
02h | TIMER 1 | - | |||||||||||||||
03h | TIMER 2 | - | |||||||||||||||
04h | RST | MT1 | MT2 | - | ST2 | ST1 | - | 4 OPERATOR MODE | |||||||||
12 | 11 | 10 | 3 | 2 | 1 | ||||||||||||
05h | - | - | OPL3 | ||||||||||||||
08h | - | NTS | - | - | |||||||||||||
20-35 | AM | VB | EGT | KSR | MULTI | AM | VB | EGT | KSR | MULTI | |||||||
40-55 | KSL | TL | KSL | TL | |||||||||||||
60-75 | AR | DR | AR | DR | |||||||||||||
80-95 | SL | RR | SL | RR | |||||||||||||
A0-A8 | Freq Number(L) | Freq Number(L) | |||||||||||||||
B0-B8 | - | KON | BLOCK | FNum(H) | - | KON | BLOCK | FNum(H) | |||||||||
BD | TD | VD | PM | BD | SD | TOM | TC | HH | - | ||||||||
C0-C8 | CH OUT | FeedBack | CNT | CH OUT | FeedBack | CNT | |||||||||||
- | - | R | L | - | - | R | L | ||||||||||
E0-F5 | - | WS | - | WS | |||||||||||||
アドレス (hex) | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | |
プライマリ | セカンダリ |
チャネル | コントロールポート | スロット | スロットポート |
1 | A0 B0 C0 | 1 | 20 40 60 80 E0 |
4 | 23 43 63 83 E3 | ||
2 | A1 B1 C1 | 2 | 21 41 61 81 E1 |
5 | 24 44 64 84 E4 | ||
3 | A2 B2 C2 | 3 | 22 42 62 82 E2 |
6 | 25 45 65 85 E5 | ||
4 | A3 B3 C3 | 7 | 28 48 68 88 E8 |
10 | 2B 4B 6B 8B EB | ||
5 | A4 B4 C4 | 8 | 29 49 69 89 E9 |
11 | 2C 4C 6C 8C EC | ||
6 | A5 B5 C5 | 9 | 2A 4A 6A 8A EA |
12 | 2D 4D 6D 8D ED | ||
7 | A6 B6 C6 | 13 | 30 50 70 90 F0 |
16 | 33 53 73 93 F3 | ||
8 | A7 B7 C7 | 14 | 31 51 71 91 F1 |
17 | 34 54 74 94 F4 | ||
9 | A8 B8 C8 | 15 | 32 52 72 92 F2 |
18 | 35 55 75 95 F5 |
チャネル | コントロールポート | スロット | スロットポート |
1 | A0 B0 C0 C3 | 1 | 20 40 60 80 E0 |
4 | 23 43 63 83 E3 | ||
7 | 28 48 68 88 E8 | ||
10 | 2B 4B 6B 8B EB | ||
2 | A1 B1 C1 C4 | 2 | 21 41 61 81 E1 |
5 | 24 44 64 84 E4 | ||
8 | 29 49 69 89 E9 | ||
11 | 2C 4C 6C 8C EC | ||
3 | A2 B2 C2 C5 | 3 | 22 42 62 82 E2 |
6 | 25 45 65 85 E5 | ||
9 | 2A 4A 6A 8A EA | ||
12 | 2D 4D 6D 8D ED |
チャネル | スロット | 楽器 |
7 | 13 | バスドラム |
16 | ||
8 | 14 | ハイハット |
17 | スネアドラム | |
9 | 15 | タムタム |
18 | シンバル |
ビット | 仮名称 | 仮名称 | 意味 |
b7 | IRQ | 割り込み要因フラグ | 割り込み要因が発生しているとフラグが立つ レジスタ4に80hを書き込むとこのフラグがリセットされる |
b6 | TF1 | タイマー1フラグ | タイマーカウンタに書き込んだ時間が経つとこのフラグが毎回立つ レジスタ4に0x40や0x20を書き込むとマスク(リセット?)できる |
b5 | TF2 | タイマー2フラグ |
アドレス (hex) | レジスタ名 | |||
ビット | 仮名称 | 仮名称 | 意味 | |
01 | テストレジスタ/波形選択モード | |||
b5 | WM | 波形選択モード | フラグを立てるとスロット毎に波形を変更できる | |
02 | タイマー1カウントレジスタ | |||
b7-0 | TIMER1 | タイマー1カウント | 80μ秒単位のカウント値 | |
03 | タイマー2カウントレジスタ | |||
b7-0 | TIMER2 | タイマー2カウント | 320μ秒単位のカウント値 | |
04 | 割り込み/タイマーマスクレジスタ(プライマリ) | |||
b7 | RST | IRQリセット | フラグを立てて書き込むと割り込み要因をクリアする ※このフラグを立てると他のフラグは無効となる | |
b6 | MT1 | タイマー1マスク | フラグを立てるとタイマー1をマスクする | |
b5 | MT2 | タイマー2マスク | フラグを立てるとタイマー2をマスクする | |
b1 | ST2 | タイマー2スタート | フラグを立てるとタイマー2がカウントする | |
b0 | ST1 | タイマー1スタート | フラグを立てるとタイマー1がカウントする | |
04 | 4オペレータモードチャネル設定(セカンダリ) | |||
b5 | 4 OPERATOR MODE | チャネル21を4オペレータモードにする | ||
b4 | チャネル20を4オペレータモードにする | |||
b3 | チャネル19を4オペレータモードにする | |||
b2 | チャネル3を4オペレータモードにする | |||
b1 | チャネル2を4オペレータモードにする | |||
b0 | チャネル1を4オペレータモードにする | |||
05 | OPL3モードフラグ(セカンダリ) | |||
b0 | OPM | OPM | フラグを立てるとOPL3モードになり以下が有効になる ・10~18チャネル ・4オペレータモード ・波形選択モード4~7 ・ステレオ出力 | |
08 | 音声合成モード/キーボードスプリットレジスタ | |||
b7 | CSW | - | フラグを立てるとサイン波合成モードになる(詳細不明) | |
b6 | NTS | セレクト | キーボードスプリット選択ビットの設定 =0:Freq Number の ビット8 =1:Freq Number の ビット9(MSB) | |
20~35 | スロットレジスタ1 | |||
b7 | AM | トレモロのOn/Off | ||
b6 | VB | ビブラートのOn/Off | ||
b5 | EGT | 発音モード =0: 減退音 =1: 持続音 | ||
b4 | KSR | キースケールレート | ||
b3-b0 | MULTI | マルチプル | ||
40~55 | スロットレジスタ2 | |||
b7-b6 | KSL | キースケールレベル | ||
b5-b0 | TL | トータルレベル(減衰量) | ||
60~75 | スロットレジスタ3 | |||
b7-b4 | AR | アタックレート | ||
b3-b0 | DR | デュケイレート | ||
80~95 | スロットレジスタ4 | |||
b7-b4 | SL | サスティンレベル | ||
b3-b0 | RR | リリースレート | ||
A0-A8 | チャネルレジスタ1 | |||
b7-b0 | F-Num | Freq Numberの下位8ビット | ||
B0-B8 | チャネルレジスタ2 | |||
b5 | KON | 発音のOn/Off | ||
b4-b2 | BLOCK | BLOCK(オクターブ指定) | ||
b1-b0 | F-Num | Freq Numberの上位2ビット | ||
BD | 変調度とパーカッション(プライマリ) | |||
b7 | TD | トレモロの深さ =0:1dB =1:4.8dB | ||
b6 | VD | ビブラートの深さ =0:7セント =1:14セント | ||
b5 | PM | パーカッションモード | ||
b4 | BD | バスドラム | ||
b3 | SD | スネアドラム | ||
b2 | TOM | タムタム | ||
b1 | TC | トップシンバル | ||
b0 | HH | ハイハット | ||
C0-C8 | チャネルレジスタ3 | |||
b7-b4 | CH OUT | チャネル出力先の設定 b4=1:左音声に出力 b5=1:右音声に出力 | ||
b3-b1 | FeedBack | フィードバックの設定 | ||
b0 | CNT | コネクション(アルゴリズム)の設定 | ||
E0-F5 | スロットレジスタ5 | |||
b2-b0 | WS | 波形番号 |
MULTI | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
実際の値 | 1/2 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 10 | 12 | 12 | 15 | 15 |
KSR | キースケール番号 | |||||||||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
0 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 |
FeedBack | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
実際の値 | 0 | 1/16π | 1/8π | 1/4π | 1/2π | π | 2π | 4π |
音程 | C# | D | D# | E | F | F# | G | G# | A | A# | B | C |
周波数(Hz) | 277.2 | 293.7 | 311.1 | 329.6 | 349.2 | 370.0 | 392.0 | 415.3 | 440.0 | 466.2 | 493.9 | 523.4 |
F-Num | 363 | 385 | 408 | 432 | 458 | 485 | 514 | 544 | 577 | 611 | 647 | 686 |
チャネル | オペレータ | 音色名 | 方式 | 設定値 | |||||||||||||
AM | VB | EGT | KSR | MULTI | KSL | TL | AR | DR | SL | RR | WS | BLOCK | F-Num | ||||
7 | 1 | バスドラム | FM | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 13 | 5 | 6 | 9 | 0 | 2 | 577 |
2 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 15 | 8 | 6 | 2 | 0 | |||||
8 | 1 | ハイハット | ノイズ | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 12 | 8 | 0 | 8 | 0 | 2 | 672 |
2 | スネアドラム | ノイズ | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 13 | 8 | 4 | 8 | 0 | |||
9 | 1 | タムタム | サイン波 | 0 | 0 | 0 | 0 | 5 | 0 | 0 | 15 | 8 | 5 | 7 | 0 | 0 | 896 |
2 | トップシンバル | ノイズ | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 10 | 0 | 5 | 4 | 0 |
CNT | アルゴリズム (→出力) | 図 |
0 | Op.1 → Op.2 → | |
1 | Op.1 → Op.2 → |
CNT | アルゴリズム (→出力) | 図 | |
+0 | +3 | ||
0 | 0 | Op.1 → Op.2 → Op.3 → Op.4 → | |
0 | 1 | Op.1 → Op.2 → Op.3 → Op.4 → | |
1 | 0 | Op.1 → Op.2 → Op.3 → Op.4 → | |
1 | 1 | Op.1 → Op.2 → Op.3 → Op.4 → |
WMに1を書き込むと使用可。
AdLib公式のOPL2存在チェック方法:
※1: ステータスレジスタの値をE0hでANDして未使用のビットをマスクした方が良いかも知れません。
※2: いくつかのSound Blaster互換のカードでは動作しないかも知れません。
※Sound Blaster互換のカードでは動作しないかも知れません。
OPL3に1を書き込み4 OPERATER MODEに対応するチャネルのビットを立てて書き込みます。
チャネル1~3,10~12を4オペレータモードにするとチャネル4~6,13~15がチャネル1~3,10~12のオペレータの一部になり、チャネル4~6,13~15は使用できなくなります。
ご意見やご批判などお待ちしております。
また、スパムなどは無条件で対処させていただきます。
コメント | お名前 | NameLink | |