* YMF-262 [#top]
Sound Blaster Pro II 以降に搭載されているFM音源チップです。~
DOSや自作系OS用のアプリを作成するための資料として整理中(自分用)。~
* YMF262 [#top]
Sound Blaster Pro II (と互換品?)に搭載されている汎用ICです。~
DOSや自作系OS用のアプリを作成するための資料として自分用に整理中。~
~
''(以下書きかけです。間違っていたり誤記がある可能性があります)''
** 内部レジスタマップ [#registermap]
|アドレス&br;(hex)|>|>|>|>|>|>|>|1つ目||>|>|>|>|>|>|>|2つ目|
** スペック [#spec]
-同時発音数の例
--''2オペレータ18チャネル''&br;すべて2オペレータで使用する場合。
--''2オペレータ15チャネル+リズム5チャネル''&br;7~9チャネルをリズムで使用。
--''4オペレータ6チャネル+2オペレータ6チャネル''&br;7~9チャネルと16~18チャネルは4オペレータにできない。
--''4オペレータ6チャネル+2オペレータ3チャネル+リズム5チャネル''&br;7~9チャネルをリズムで利用。&br;16~18チャネルは4オペレータにできない。
--''4オペレータ2チャネル+2オペレータ14チャネル''&br;仕様を見る限りこういう利用も可能のようだ。しかし、対応したライブラリが無いとチャネルの管理が大変そう。
~
** I/Oアドレスマップ [#ioadddressmap]
|サウンドカード|ベースポート|
|LEFT:Sound Blaster Pro II   |LEFT:220h または 240h など(選択可)|
|LEFT:AdLib Gold             |LEFT:388h|
~
|I/Oポート番号|アクセス|ポートの意味|
|ベース+0|R|LEFT:ステータスレジスタ|
|~|W|LEFT:プライマリ インデックスレジスタ|
|ベース+1|W|LEFT:プライマリ データレジスタ|
|ベース+2|W|LEFT:セカンダリ インデックスレジスタ|
|ベース+3|W|LEFT:セカンダリ データレジスタ|
~
** レジスタマップ [#registermap]
-ステータスレジスタ (ベース+0)
|b7|b6|b5|b4|b3|b2|b1|b0|
|IRQ|TF1|TF2|>|-|>|0|-|
~
-データレジスタ (プライマリはベース+1,セカンダリはベース+3)
|アドレス&br;(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|>|>|>|>|>|>|>|-||>|>|>|>|>|>|-|NEW|
|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|DAM|DVB|RYT|BD|SD|TOM|TC|HH||>|>|>|>|>|>|>|-|
|C0-C8|>|>|>|CH|>|>|FB|CNT||>|>|>|CH|>|>|FB|CNT|
|~|D|C|B|A|~|~|~|~||D|C|B|A|~|~|~|~|
|E0-F5|>|>|>|>|-|>|>|WS||>|>|>|>|-|>|>|WS|
|~|b7|b6|b5|b4|b3|b2|b1|b0||b7|b6|b5|b4|b3|b2|b1|b0|
~
** スロットの配置 [#signalmap]
-2オペレータモード
|チャネル|コントロールポート|スロット|スロットポート|
|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|
~
-4オペレータモード
|チャネル|コントロールポート|スロット|スロットポート|
|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|
~
-パーカッションモード~
プライマリデータレジスタBDhのビット5を立てると7~9チャネル(13~18スロット)をパーカッションモードとして使用する。~
パーカッションの発音はBDhを使用し、チャネル7~9は常にオフにしておく。~
|チャネル|スロット|楽器|
|7|13|LEFT:スネアドラム|
|~|16|~|
|8|14|LEFT:ハイハット|
|~|17|LEFT:スネアドラム|
|9|15|LEFT:タムタム|
|~|18|LEFT:シンバル|
~
※4オペレータモードと2オペレータモードとパーカッションモードは混在可~
~
** アルゴリズムの種類 [#connectmode]
-2オペレータモード
|CNT|アルゴリズム|図|
|CNT|アルゴリズム (→出力)|図|
|0|RIGHT:Op.1 → Op.2 →||
|1|RIGHT:Op.1 →&br;Op.2 →||
~
-4オペレータモード
|>|CNT|アルゴリズム|図|
|>|CNT|アルゴリズム (→出力)|図|
|+0|+3|~|~|
|0|0|RIGHT:Op.1 → Op.2 → Op.3 → Op.4 →||
|0|1|RIGHT:Op.1 → Op.2 →&br;Op.3 → Op.4 →||
|1|0|RIGHT:Op.1 →&br;Op.2 → Op.3 → Op.4 →||
|1|1|RIGHT:Op.1 →&br;Op.2 → Op.3 →&br;Op.4 →||
~
※両モードともOp.1のみセルフフィードバック可~
~
** テストモードと波形 [#waveselect]
-2オペレータモード
|WS|波形|WS|波形|
|0|#ref(w0.png)|2|#ref(w2.png)|
|1|#ref(w1.png)|3|#ref(w3.png)|
WMに1を書き込むと使用可。

//|WS|波形|WS|波形|
//|0|#ref(w0.png)|4|#ref(w4.png)|
//|1|#ref(w1.png)|5|#ref(w5.png)|
//|2|#ref(w2.png)|6|#ref(w6.png)|
//|3|#ref(w3.png)|7|#ref(w7.png)|
|波&br;形|#ref(w0.png)|#ref(w1.png)|#ref(w2.png)|#ref(w3.png)|
|WS|0|1|2|3|
|波&br;形|#ref(w4.png)|#ref(w5.png)|#ref(w6.png)|#ref(w7.png)|
|WS|4|5|6|7|

~
-4オペレータモード
|WS|波形|WS|波形|
|0|#ref(w0.png)|4|#ref(w4.png)|
|1|#ref(w1.png)|5|#ref(w5.png)|
|2|#ref(w2.png)|6|#ref(w6.png)|
|3|#ref(w3.png)|7|#ref(w7.png)|
** FM1812の存在チェック方法
AdLib公式のOPL2存在チェック方法:
+''タイマ1とタイマ2をリセット''&br; レジスタ4に60hを書き込む
+''IRQをリセット''&br; レジスタ4に80hを書き込む&br; 注: IRQとタイマを同時にリセットすることは出来ない
+''ステータスレジスタを読む''&br; ベース+0のポートを読み込んでその値を取っておく
+''タイマ1をFFhにセット''&br; レジスタ2にFFhを書き込む
+''マスクを解除してタイマのカウントをスタート''&br; レジスタ4に21hを書き込む
+''ウェイト''&br; デュレイルーチンなどで最低でも80μ秒の間待機
+''ステータスレジスタを再度読む''&br; ベース+0のポートを読み込み、その値を取っておく
+''タイマ1とタイマ2、そしてIRQを1.や2.と同じようにリセット''
+''読み込んだ2つのステータスレジスタの値のテスト''&br; 1つ目の値は「0」で2つ目の値は「C0h」で無ければ、OPL2は存在しません。

※1: ステータスレジスタの値をE0hでANDして未使用のビットをマスクした方が良いかも知れません。~
※2: いくつかのSound Blaster互換のカードでは動作しないかも知れません。~
~
※WMに1を書き込んだ時のみ有効~
~
** FM1812の存在チェック方法
** YMF-262の存在チェック方法
+''OPL2が存在することを確認''
+''ステータスレジスタを読む''&br; ベース+0のポートを読み込む。
+''その値を06hでマスク(AND)する''
+''マスクした値が「0」ならばOPL3、そうでなければOPL2です。''

** 4オペレータモードへの切り替え方法
NEWに1を書き込み4 OPERATER MODEに対応するチャネルのビットを立てて書き込みます。~
チャネル1~3,10~12を4オペレータモードにするとチャネル4~6,13~15がチャネル1~3,10~12のオペレータの一部になり、チャネル4~6,13~15は使用できなくなります。~


~

** コメント欄 [#commentarea]
ご意見やご批判などお待ちしております。~
また、スパムなどは無条件で対処させていただきます。
----
#comment


[リロード]   [トップ] [一覧] [単語検索] [最終更新]   [最終更新のRSS]