Sound Blaster Pro II など に搭載されているFM音源ICです。
たぶん互換性があるであろう Sound Blaster 16 やそのエミュレータなどでも使用できる可能性があります。
残念ながらqemuでは4オペレータや18チャネルステレオ対応の音源としては使えないようです。
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チャネル(ステレオだが左右独立で左9チャネル+右9チャネル)のみ利用可能と思われます。
| I/Oポート番号 | アクセス | ポートの意味 |
| ベース+0 | R | ステータスレジスタ |
| W | プライマリ インデックスレジスタ | |
| ベース+1 | W | プライマリ データレジスタ |
| ベース+2 | W | セカンダリ インデックスレジスタ |
| ベース+3 | W | セカンダリ データレジスタ |
※Sound Blaster では ベース+8~+9(228h~229hなど) でプライマリのレジスタがアクセスできるが、ベース+10~+11(22Ah~22Bh)からセカンダリのレジスタにはアクセスできない(らしい)。
その場合、ベース+8〜+9がモノラル出力用、ベース+0〜+1が左音声用、ベース+2〜+3が右音声用となるようです(なんでこんな仕様になっているんだろう)。
| 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,10 | A0 B0 C0 | 1,19 | 20 40 60 80 E0 |
| 4,22 | 23 43 63 83 E3 | ||
| 2,11 | A1 B1 C1 | 2,20 | 21 41 61 81 E1 |
| 5,23 | 24 44 64 84 E4 | ||
| 3,12 | A2 B2 C2 | 3,21 | 22 42 62 82 E2 |
| 6,24 | 25 45 65 85 E5 | ||
| 4,13 | A3 B3 C3 | 7,25 | 28 48 68 88 E8 |
| 10,28 | 2B 4B 6B 8B EB | ||
| 5,14 | A4 B4 C4 | 8,26 | 29 49 69 89 E9 |
| 11,29 | 2C 4C 6C 8C EC | ||
| 6,15 | A5 B5 C5 | 9,27 | 2A 4A 6A 8A EA |
| 12,30 | 2D 4D 6D 8D ED | ||
| 7,16 | A6 B6 C6 | 13,31 | 30 50 70 90 F0 |
| 16,34 | 33 53 73 93 F3 | ||
| 8,17 | A7 B7 C7 | 14,32 | 31 51 71 91 F1 |
| 17,35 | 34 54 74 94 F4 | ||
| 9,18 | A8 B8 C8 | 15,33 | 32 52 72 92 F2 |
| 18,36 | 35 55 75 95 F5 |
| チャネル | コントロールポート | スロット | スロットポート |
| 1,10 | A0 B0 C0 C3 | 1,19 | 20 40 60 80 E0 |
| 4,22 | 23 43 63 83 E3 | ||
| 7,25 | 28 48 68 88 E8 | ||
| 10,28 | 2B 4B 6B 8B EB | ||
| 2,11 | A1 B1 C1 C4 | 2,20 | 21 41 61 81 E1 |
| 5,23 | 24 44 64 84 E4 | ||
| 8,26 | 29 49 69 89 E9 | ||
| 11,29 | 2C 4C 6C 8C EC | ||
| 3,12 | A2 B2 C2 C5 | 3,21 | 22 42 62 82 E2 |
| 6,24 | 25 45 65 85 E5 | ||
| 9,27 | 2A 4A 6A 8A EA | ||
| 12,30 | 2D 4D 6D 8D ED |
| チャネル | スロット | 楽器 |
| 7 | 13 | バスドラム |
| 16 | ||
| 8 | 14 | ハイハット |
| 17 | スネアドラム | |
| 9 | 15 | タムタム |
| 18 | シンバル |
| ビット | 仮名称 | 仮名称 | 意味 |
| b7 | IRQ | 割り込み要因フラグ | 割り込み要因が発生しているとフラグが立つ レジスタ4に80hを書き込むとこのフラグがリセットされる (PCの場合、割り込み要因が発生することがあっても実際の割り込みが発生することはない) |
| 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 | チャネル12を4オペレータモードにする | ||
| b4 | チャネル11を4オペレータモードにする | |||
| b3 | チャネル10を4オペレータモードにする | |||
| b2 | チャネル3を4オペレータモードにする | |||
| b1 | チャネル2を4オペレータモードにする | |||
| b0 | チャネル1を4オペレータモードにする | |||
| 05 | OPL3モードフラグ(セカンダリ) | |||
| b0 | OPL3 | OPL3 | フラグを立てると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 | FM | Op.1 → Op.2 → | |
| 1 | AM | Op.1 → Op.2 → |
| CNT | モード | アルゴリズム (→出力) | 図 | |
| +0 | +3 | |||
| 0 | 0 | FM-FM | Op.1 → Op.2 → Op.3 → Op.4 → | |
| 1 | 0 | AM-FM | Op.1 → Op.2 → Op.3 → Op.4 → | |
| 0 | 1 | FM-AM | Op.1 → Op.2 → Op.3 → Op.4 → | |
| 1 | 1 | AM-AM | 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 | |