このページのURL
https://oykenkyu.blogspot.com/2026/07/ymf288reg.html
現在執筆中です。内容がちょくちょく変更されますので、ご注意ください。
YMF288(OPN3-L)のレジスタの解説
注意:このサイトの内容を鵜呑みにし、事故や損失を招いた場合でも当方は一切の責任は負いかねます。自己責任でお願いします。
YMF288は9ビットアドレス空間中(8ビットアドレス x 2バンク)にレジスタを持っています。
YM3438 (OPN2)で新たに追加されたFM音源のレジスタ領域であるch4~ch6の音色レジスタへの書き込みは、A1端子を操作する必要があります。
A1端子は実質的にバンクセレクト端子ともいえるでしょう。
A0端子はLでアドレスの書き込み、Hでデータの書き込みなので、A0端子とA1端子は全くの別物と考えるべきです。A1端子ですと分かりにくいので勝手にBANK_SEL端子とも呼ぶとします。
A1端子はこちらが勝手にバンクセレクトとして扱います。
下記のアドレス表記では、A1端子をアドレスバスA8相当($1XX)として表記します。A1端子がLのときアドレスは$0XXとなり、A1端子がHのときアドレスは$1XXとします。また、A1端子がLのときはアドレス$0XX表記を省略してアドレス$XXとします。
レジスタ名の"[ ]"の中身は対象となる音源の種類(SSG, FM, ADPCMリズム)を表しています。
| アドレス |
レジスタ名 (独自に勝手に命名) |
機能 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| $00 | Channel A Tone Period [SSG] |
SSGチャンネルAの音程設定レジスタです。 $01とセットで使用します。
TP: TONE PERIOD 音程設定ビットです。 $01にあるTP_A_11~TP_A_8とセットで使用します。 TP = 1 ~ 4095 (0x001 ~ 0xFFF) : 音程設定ビット この値が大きいほど、低い音程の音が出力されます。 ただし、YMF288ではSSGとは少しだけ違う部分があります。 TPが8未満の場合、出力される音程は高音とならずに直流成分が出力されます。 レジスタ設定値と出力周波数foutは以下の関係があります。 TP = fsc / (16 * fout) 【8≦TPの時】0 = fout 【TP<8の時】 レジスタ設定値から出力周波数を求めたい場合は以下のとおりです。 fout = fsc / (16 * TP) [Hz] 【8≦TPの時】 fout = 0 (直流重複) 【TP<8の時】 TP : 音程設定ビット(12bit) fsc : システムクロック周波数[Hz] ただし、システムクロック周波数fscは次のようになっています。 fsc = ΦM / 4 [YMF288] ΦM : 入力クロック周波数[Hz] --MIDIノートナンバーからレジスタ値を求める場合--【8≦TPの時】 TP = fsc / (16 * (440 / 2^(69/12)) * 2^(note_n/12)) = fsc / (16 * 8.1758 * 2^(note_n/12)) = fsc / (130.81 * 2^(note_n/12)) note_n : MIDIノートナンバ(0~127、note_n=69のときfout=440) [システムクロックfsc = 2MHzの場合] TP = fsc / (130.81 * 2^(note_n/12)) = 2M / (130.81 * 2^(note_n/12)) = 15289 / 2^(note_n/12) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $01 | Channel A Tone Period [SSG] |
SSGチャンネルAの音程設定レジスタです。 $00とセットで使用します。
$00に説明があるので、そちらを参照してください。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $02 | Channel B Tone Period [SSG] |
SSGチャンネルBの音程設定レジスタです。 $03とセットで使用します。
音程の指定方法は$00の「Channel A Tone Period」と同様なので、そちらを参照してください。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $03 | Channel B Tone Period [SSG] |
SSGチャンネルBの音程設定レジスタです。 $02とセットで使用します。
音程の指定方法は$00の「Channel A Tone Period」と同様なので、そちらを参照してください。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $04 | Channel C Tone Period | SSGチャンネルCの音程設定レジスタです。 $03とセットで使用します。
音程の指定方法は$00の「Channel A Tone Period」と同様なので、そちらを参照してください。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $05 | Channel C Tone Period [SSG] |
SSGチャンネルCの音程設定レジスタです。 $02とセットで使用します。 oykenkyu.blogspot.com
音程の指定方法は$00の「Channel A Tone Period」と同様なので、そちらを参照してください。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $06 | Noise Period [SSG] |
SSGノイズ音程設定レジスタです。
NP: NOISE PERIOD ノイズ周波数設定ビットです。 NP = 0 ~ 31 (0x00 ~ 0x1F) : ノイズ周波数設定ビット この値が大きいほど、低いノイズ周波数の音が出力されます。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $07 | ~Enable [SSG] |
SSGミキサ設定 / I/O方向設定レジスタです。
IO_B(bit7): 仮想汎用ポートBの方向設定ビットです。 YMF288では汎用ポートが廃止されたので、このレジスタビットはSSGとの互換性を保つために残されています。 このビットに値を書き込むと保持されます。このビットを読んで分岐するようなプログラムのために残された機能です。 IO_B = H : 仮想ポートBを出力に設定します。 IO_B = L : 仮想ポートBを入力に設定します。 IO_A(bit6): 仮想汎用ポートAの方向設定ビットです。 YMF288では汎用ポートが廃止されたので、このレジスタビットはSSGとの互換性を保つために残されています。 このビットに値を書き込むと保持されます。このビットを読んで分岐するようなプログラムのために残された機能です。 IO_A = H : 仮想ポートAを出力に設定します。 IO_A = L : 仮想ポートAを入力に設定します。 NE_C(bit5)、NE_B(bit4)、NE_A(bit3): チャンネルごとのノイズ出力設定ビットです。 NE_C = H : ノイズ出力先としてチャンネルCを設定しません。 NE_C = L : ノイズ出力先としてチャンネルCを設定します。 NE_B = H : ノイズ出力先としてチャンネルBを設定しません。 NE_B = L : ノイズ出力先としてチャンネルBを設定します。 NE_A = H : ノイズ出力先としてチャンネルAを設定しません。 NE_A = L : ノイズ出力先としてチャンネルAを設定します。 TE_C(bit2)、TE_B(bit1)、TE_A(bit0): トーンの出力設定ビットです。 TE_C = H : チャンネルCのトーン出力を無効に設定します。 TE_C = L : チャンネルCのトーン出力を有効に設定します。 TE_B = H : チャンネルBのトーン出力を無効に設定します。 TE_B = L : チャンネルBのトーン出力を有効に設定します。 TE_A = H : チャンネルAのトーン出力を無効に設定します。 TE_A = L : チャンネルAのトーン出力を有効に設定します。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $08 | Channel A Amplitude [SSG] |
SSGチャンネルAの音量設定レジスタです。
M_A(bit4): チャンネルA音量モード選択ビットです。 固定音量かエンベロープジェネレータによる音量制御をするかを選べます。 固定に設定した場合、音量は$08「Channel A Amplitude」のbit3~0のL_Aの値により決まります。 エンベロープジェネレータに設定した場合、レジスタ値による音量制御はできないので注意してください。 M_A = L : $08「Channel A Amplitude」のbit3~0のL_Aの値により、チャンネルAの音量が決まります。 M_A = H : エンベロープジェネレータにより、チャンネルAの音量が決まります。 L_A(bit3 ~ bit0): チャンネルA音量設定ビットです。 上記$08「Channel A Amplitude」のbit4のM_AがLのとき、このレジスタの値がチャンネルAの出力音量となります。 この値が大きいほど、音量が大きくなります。 音量に対するレジスタ値は直線対数の関係となります。 L_A = 0 ~ 15 (0x0 ~ 0xF) : チャンネルA音量設定ビット レジスタ値L_Aに対する音量比Lvは、 Lv = 2 ^ ((L_A - 15) / 2) (L_A ≠ 0) Lv = 0 (L_A = 0) となります。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $09 | Channel B Amplitude [SSG] |
SSGチャンネルBの音量設定レジスタです。
M_B(bit4): チャンネルB音量モード選択ビットです。 固定音量かエンベロープジェネレータによる音量制御をするかを選べます。 固定に設定した場合、音量は$09「Channel B Amplitude」のbit3~0のL_Bの値により決まります。 エンベロープジェネレータに設定した場合、レジスタ値による音量制御はできないので注意してください。 M_B = L : $09「Channel B Amplitude」のbit3~0のL_Bの値により、チャンネルBの音量が決まります。 M_B = H : エンベロープジェネレータにより、チャンネルBの音量が決まります。 L_B(bit3 ~ bit0): チャンネルB音量設定ビットです。 上記$09「Channel B Amplitude」のbit4のM_BがLのとき、このレジスタの値がチャンネルBの出力音量となります。 この値が大きいほど、音量が大きくなります。 音量に対するレジスタ値は直線対数の関係となります。 L_B = 0 ~ 15 (0x0 ~ 0xF) : チャンネルB音量設定ビット レジスタ値L_Bに対する音量比Lvは、 Lv = 2 ^ ((L_B - 15) / 2) (L_B ≠ 0) Lv = 0 (L_B = 0) となります。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $0A | Channel C Amplitude [SSG] |
SSGチャンネルCの音量設定レジスタです。
M_C(bit4): チャンネルC音量モード選択ビットです。 固定音量かエンベロープジェネレータによる音量制御をするかを選べます。 固定に設定した場合、音量は$0A「Channel C Amplitude」のbit3~0のL_Cの値により決まります。 エンベロープジェネレータに設定した場合、レジスタ値による音量制御はできないので注意してください。 M_C = L : $0A「Channel C Amplitude」のbit3~0のL_Cの値により、チャンネルCの音量が決まります。 M_C = H : エンベロープジェネレータにより、チャンネルCの音量が決まります。 L_C(bit3 ~ bit0): チャンネルC音量設定ビットです。 上記$0A「Channel C Amplitude」のbit4のM_CがLのとき、このレジスタの値がチャンネルCの出力音量となります。 この値が大きいほど、音量が大きくなります。 音量に対するレジスタ値は直線対数の関係となります。 L_C = 0 ~ 15 (0x0 ~ 0xF) : チャンネルC音量設定ビット レジスタ値L_Cに対する音量比Lvは、 Lv = 2 ^ ((L_C - 15) / 2) (L_C ≠ 0) Lv = 0 (L_C = 0) となります。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $0B | Envelope Period [SSG] |
SSGエンベロープ周波数設定レジスタです。 $0Cとセットで使用します。
EP: ENVELOPE PERIOD エンベロープ周波数設定ビットです。 $0CにあるEP_15~EP_8とセットで使用します。 EP = 1 ~ 65535 (0x0001 ~ 0xFFFF) : エンベロープ周波数設定ビット この値が大きいほど、長い周期のエンベロープ波形となります。 レジスタ設定値とエンベロープ周波数f_evは以下の関係があります。 EP = fsc / (256 * f_ev) レジスタ設定値からエンベロープ周波数を求めたい場合は以下のとおりです。 f_ev = fsc / (256 * TP) [Hz] fsc : システムクロック [Hz] システムクロックfscについては$00の「Channel A Tone Period」で説明しているので、そちらを参照してください。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $0C | Envelope Period | SSGエンベロープ周波数設定レジスタです。 $0Bとセットで使用します。
$0Bに説明があるので、そちらを参照してください。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $0D | Envelope Shape Cycle [SSG] |
SSGエンベロープ波形コントロール設定レジスタです。
以下のレジスタビット説明は挙動に基づく説明であり、実際の内部回路とは異なります。 CONT(bit3): ・COUT=Lのとき エンベロープ周期の最後に到達すると、エンベロープカウンタが停止して出力音量が0になります。 ・COUT=Hのとき エンベロープ周期の最後に到達してもエンベロープカウンタは停止しません。 ATT(bit2): ・ATT=Lのとき エンベロープ周期の先頭でエンベロープカウンタを最大値に初期化します。 エンベロープカウンタはデクリメント設定となります。 ・ATT=Hのとき エンベロープ周期の先頭でエンベロープカウンタを0に初期化します。 エンベロープカウンタはインクリメント設定となります。 ALT(bit1): ・ALT=Lのとき エンベロープカウンタの値がそのまま音量となります。 ・ALT=Hのとき エンベロープ周期の最後に到達するごとに、エンベロープカウンタの最大値と最小値の関係を逆転させたものを音量とします。(エンベロープカウンタそのものの値が逆転するわけではありません。) HOLD(bit0): ・HOLD=Lのとき エンベロープ周期の最後に到達した時、エンベロープカウンタをATTで指定した初期値で初期化します。 ・HOLD=Hのとき エンベロープ周期の最後に到達した時、エンベロープカウンタが停止します。
上記4つの設定をまとめると、エンベロープ形状は以下のようになります。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $0E | Deprecated I/O Port A Data Store [SSG] |
廃止された汎用ポートAレジスタです。
IOA: SSGでは汎用ポートAレジスタでしたが、YMF288では汎用IOポートが廃止されたため、このレジスタは無意味となりました。 ただし、このレジスタアドレスからのデータ読み出しの際、YMF288のデータバスは常にハイインピーダンスとなります。 これは外付けIOポート回路を追加できるようにするための配慮でしょう。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $0F | Deprecated I/O Port B Data Store [SSG] |
廃止された汎用ポートBレジスタです。
IOB: SSGでは汎用ポートBレジスタでしたが、YMF288では汎用IOポートが廃止されたため、このレジスタは無意味となりました。 ただし、このレジスタアドレスからのデータ読み出しの際、YMF288のデータバスは常にハイインピーダンスとなります。 これは外付けIOポート回路を追加できるようにするための配慮でしょう。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $10 | DM_RKON [ADPCMリズム] |
DM_RKON ADPCM内蔵リズム音キーオン・ダンプレジスタです。
DM: Dump キーオン・ダンプ(即時消音キーオフ)指定ビットです。 $10(DM_RKON)のbit5~bit6のRKONレジスタビットとセットで使います。 このDMビットがLのとき、RKONがHのリズム音をキーオンします。 また、DMビットがHのとき、RKONがHのリズム音をダンプします。 DM = L : RKONがHとなっているビットのリズム音をキーオンする DM = H : RKONがHとなっているビットのリズム音を即時消音キーオフする RKON: Rhythm Key On キーオン・ダンプ操作対象マスクビットです。 $10(DM_RKON)のbit7のDMレジスタビットとセットで使います。 RIM, TOM, HH, TOP, SD, BDの6種類のリズム音が内蔵ROMに記録されています。 RKON_RIM, RKON_TOM, RKON_HH, RKON_TOP, RKON_SD, RKON_BD、それぞれのビットがHのとき、キーオン・ダンプ操作対象となります。 それぞれのビットがLのとき、無視されます。 RKON_RIM : リムショット RKON_TOM : タムタム RKON_HH : ハイハットo y k en k yu.b log s pot. c om RKON_TOP : トップシンバル RKON_SD : スネアドラム RKON_BD : バスドラム RKON_xx = L : 操作対象外 RKON_xx = H : このリズム音に対してDMビットで指定した操作を行う |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $11 | RTL [ADPCMリズム] |
RTL リズムADPCM全体トータルボリュームレジスタです。 個別音量は$18~$1DのILレジスタビットで設定します。
RTL: Rhythm Total Level リズムADPCM全体トータルボリュームレジスタです。 RTL = 0で最大信号レベル、63で最小信号レベルとなります。 rtl = -0.75 * TL [dB] RTL = 0~63 (0x00 ~ 0x3F) : 出力レベルレジスタにセットできる値 rtl : リズム音源全体の出力レベル |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $12 | R_TEST | TEST テスト用のレジスタです。 仕様は公開されていません。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $18 ~ $1D | LR_IL_xx [ADPCMリズム] |
LR_IL パンポット出力先選択、リズム音楽器ごとの出力レベル設定レジスタです。 $18~$1Dにリズム音BD~RIMが割り当てられています。
RL_xx , RR_xx: (本来の名称はL , R、FM音源部との名称被りのため、勝手に改名) LEFT CHANNEL ENABLE / RIGHT CHANNEL ENABLELまたはRチャンネルの出力を決定します。 RL_xx = H : Lチャンネルの出力を有効にします。 RL_xx = L : Lチャンネルの出力を無効にします。 RR_xx = H : Rチャンネルの出力を有効にします。 RR_xx = L : Rチャンネルの出力を無効にします。 ※"xx"の部分にはBD, SD, TOP, HH, TOM, RIMが入ります。 IL_xx: Instrument Level リズム音楽器ごとの出力レベル設定レジスタです。 各リズム音ごとに出力レベルを設定します。 IL_xx = 0で最大信号レベル、31で最小信号レベルとなります。 il_xx = -0.75 * IL_xx [dB] RTL = 0~31 (0x00 ~ 0x1F) : 各リズム音の出力レベルレジスタにセットできる値 il_xx : 各リズム音の出力レベル ※"xx"の部分にはBD, SD, TOP, HH, TOM, RIMが入ります。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $1E, $1F | - | 未使用 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $20 | NEW_STBY | NEW / STBY YMF288 / YM2608B互換モード切替、スタンバイモード設定レジスタです。 YMF288で新たに追加されたレジスタで、YM2608では未割り当てとされています。
NEW: YMF288 / YM2608B互換モード切替レジスタビットです。 /COM端子(YMF288-Mの16番ピン、YMF288-Sの26番ピン)がLかつ、このレジスタビットがHのとき、YMF288モードとなります。それ以外はYM2608B互換モードとなります。 YMF288モードでは、SSG部とFM部のレジスタの読み出しが可能となります。 YM2608B互換モードでは、SSG部分のみのレジスタ呼び出しが可能です。 NEW = H かつ /COM端子=L : YMF288モード NEW = L かつ /COM端子=X : YM2608B互換モード YMF288モード際、以下のレジスタビットは読み出しても常に0となります。 $10 bit7:DM,bit6~bit0:RKON_xx 6種 $27 bit5:RESET_B,bit4:RESET_A $28 bit7~bit4:SLOT,bit2~bit0:CH $110 bit7:IRQRST STBY: Standby Mode スタンバイモード動作指定レジスタビットです。 スタンバイモードは、レジスタの内容を保持した状態でYMF288の機能を停止させ、消費電力を抑えられる機能です。 スタンバイ時には消費電流が1/10となります。 このレジスタビットにHをセットすると、スタンバイモードへ移行します。 Lにセットすると、復帰します。 STBY = H : スタンバイモードへ移行(YMF288モードが有効の時のみ) STBY = L : 通常モードへ移行 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $21 | TEST [FM] |
TEST テスト用のレジスタです。 仕様は公開されていません。 FM音源の全チャンネルに関するテストレジスタだそうです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $22 | LFO [FM] |
LFO LOW FREQUENCY LFOオンオフ、LFO周波数設定レジスタです。
LFO_ON: LFO On Off LFOオンオフ設定レジスタビットです。 このレジスタがHのとき、FM音源全チャンネル(ch1~ch6)のLFOが有効になります。 LFO_ON = H : 全チャンネルでLFOを有効にする LFO_ON = L : 全チャンネルでLFOを無効にする FREQ_CONT: LFO発振スピード設定レジスタです。 このレジスタの値を大きくすると、LFO周波数が高くなります。 FREQ_CONT = 0~7 (0x0 ~ 0x7) : FREQ_CONTレジスタにセットできる値 LFO周波数f_lfoは次式により求めます。 f_lfo = (ΦM / (6 * 3 * 2^10)) / LFO_N = ΦM / (18432 * LFO_N) M : 入力クロック周波数[Hz] LFO_N : FREQ_CONTから求めた8種類の値 FREQ_CONT=0~7のとき、 LFO_N = 109, 2*3*13, 2^3*3^2, 2^2*17, 3^2*17, 3^2*5, 3^2, 3*2 = 109, 78, 72, 68, 63, 45 9, 6 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $23 | - | 未使用 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $24 | TIMER_A_H [FM] |
TIMER_A_H 内部タイマーAのカウンタ設定値10bit中の上位8bitです。 TIMER_A_L($25)に下位2bitをセットします。
NA: タイマーAの設定値です。 TIMER_A_L($25)とセットで使用します。 Ta = 72 * (1024 - NA) / ΦM [s] Ta : タイマーAオーバーフロー周期[s] NA = 0~1023(0x000~0x3FF) :タイマー周波数決定ビット ΦM : 入力クロック周波数[Hz] |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $25 | TIMER_A_L [FM] |
TIMER_A_L 内部タイマーAのカウンタ設定値10bit中の下位2bitです。 TIMER_A_H($24)に上位8bitをセットします。
詳細はTIMER_A_H($24)を参照してください。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $26 | TIMER_B [FM] |
TIMER_B 内部タイマーBのカウンタ設定値8bitです。
NB: タイマーBの設定値です。 Tb = 1152 * (256 - NA) / ΦM [s] Tb : タイマーBオーバーフロー周期[s] NB = 0~255(0x00~0xFF) :タイマー周波数決定ビット ΦM : 入力クロック周波数[Hz] |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $27 | MODE_TIM_CONF [FM] |
MODE_TIM_CONF CH3 Mode / Timer Config CH3のモード設定、タイマー動作設定レジスタです。
MODE: FM音源部のCH3の動作モード選択ビットです。 OPN系列のFM音源には、通常モードと効果音モード、CSMモードというのがあります。通常モードはオペレータ倍率を0.5倍や整数倍にセットできるごくありふれたモードです。効果音モードの場合、DX7でおなじみのOPSのようにオペレータ倍率を任意の周波数にセットすることができます。(CH3のみ) CSMモードは効果音モードに加え、タイマーAのオーバーフロー時にCH3をキーオンするモードです。 このモード選択レジスタは通常、2bit分割り当てられています。 OPNのレジスタの詳細な説明は一般向けに公開されておらず、YM2608(OPNA)アプリケーションマニュアル(YM2608 A.M.)を参考しなければいけません。 ここで注意が必要なのが、YM2608 A.M.のD7とD6の記述はミスの可能性があることです。 YM2608 A.M.では$27のD7,D6が、0,0のとき通常モード、0,1のときCSMモード、1,0のとき効果音モードとの記述がありますが、どうやら間違いの可能性が高いです。 実際には0,1のとき効果音モード、1,0のときCSMモードとなるらしいです。 効果音モードまたはCSMモードの時、CH3_F_NUM1($A8, $A9, $AA)およびCH3_BLOCK_F_NUM2($AC, $AD, $AE)を使って各オペレータ周波数を直接指定します。 ・YM2203(OPN)の場合 上記の説明の通りです。 ・YM2608(OPNA)やYM2612(OPN2)の場合 CH4~6が追加されました。CH6が効果音モードやCSMモードに対応してるかは謎です。 ・YMF288(OPN3)の場合 データシート上にはYM2608からCSMモードが削除されたとの記述があります。 先の説明の通り、YM2608 A.M.内の記述と矛盾があります。bit6が効果音モードの有効無効設定ビットということでしょう。 MODE_0 = L :CH3を通常モードとして使用 MODE_0 = H : CH3を効果音モードとして使用 MODE_1 = X : YMF288では未使用 RESET: タイマーのオーバーフロービットフラグのクリアビットです。 このビットにHを書き込むと、タイマーのオーバーフロービットをクリアします。 Lを書き込んだ場合、変化しません。 RESET_A <- H : タイマーAのオーバーフロービットをクリア RESET_B <- H : タイマーBのオーバーフロービットをクリア EN: タイマーのオーバーフローフラグ許可設定ビットです。 このビットをHにすると、タイマーがオーバーフローした時に、内部のオーバーフローフラグがセットされます。 このビットをHにしただけではIRQ出力はされません。割り込み要求出力を行うには必ず$29のSCH_IRQ_ENレジスタのbit1,bit0のIRQ_EN_TxをHにしてください。 EN_A = H : タイマーAによるオーバーフローフラグのセットを許可する N_B = H : タイマーBによるオーバーフローフラグのセットを許可する LOAD: タイマースタート・ストップ設定ビットです。 このビットをHにすると、タイマーが動作します。Lにすると、停止します。 LOAD_A = H : タイマーAを動作 LOAD_A = L : タイマーAを停止 LOAD_B = H : タイマーBを動作 LOAD_B = L : タイマーBを停止 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $28 | KON_KOFF [FM] |
KON_KOFF Key on/off キーオン・キーオフレジスタです。 CH4~CH6は拡張チャンネルのため、素の状態ではこのレジスタをいじっても発音しません。CH4~CH6を利用するには、$29のSCH_IRQ_ENレジスタのbit7のSCHビットをHにしてください。
SLOT4 ~ SLOT1: キーオン・キーオフ指定スロット番号です。 このレジスタのCHビットとセットで使用します。 この$28レジスタに対しての書き込みがあった時点でキーオン・キーオフが起こります。 操作対象のスロット(オペレータ)のオンオフを指定します。 SLOTn = H : キーオン SLOTn = L : キーオフ SLOT1 : S1 (M1, OP1) SLOT2 : S2 (C1, OP2) SLOT3 : S3 (M2, OP3) SLOT4 : S4 (C2, OP4) 括弧内はOPMやOPL等で呼ばれている名称です。 CH: キーオン・キーオフを行うチャンネル番号を指定します。 このレジスタのSLOTnビットとセットで使用します。 この$28レジスタに対しての書き込みがあった時点でキーオン・キーオフが起こります。 CH = 0~7(0x0~0x5) : キーオン・キーオフしたいチャンネル CH1~CH5 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $29 | SCH_IRQ_EN [FM] |
SCH_IRQ_EN Special CH / IRQ Enable 拡張チャンネル設定/タイマーの割り込み許可設定レジスタです。
SCH: Special CH 拡張チャンネル設定ビットです。 このビットをHにすると、CH4~CH6の発音が可能になります。 初期値はLなのでCH4~CH6を使いたい場合は最初にHをセットする必要があります。 これはYM2203との互換性のために用意された設定ビットです。 SCH = L : 拡張チャンネルCH4~CH6を無効(初期値) SCH = H : 拡張チャンネルCH4~CH6を有効 EN_ZERO(廃止) : EN_BRDY(廃止) : EN_EOS(廃止) : YM2608のADPCM用の割り込み許可設定レジスタです。 YMF288では外部データのADPCM再生機能は廃止されたので、このビットは未使用となります。 IRQ_EN: タイマーの割り込み許可設定ビットです。 このビットをHにすると、$27のMODE_TIM_CONFレジスタのEN_xビットがHかつ、タイマーがオーバーフローした時に、割り込み要求出力をします。 使用時には$27のMODE_TIM_CONFレジスタのEN_xビットをHにする必要があります。 IRQ_EN_TA = H : タイマーAによる割り込み要求出力を有効 IRQ_EN_TA = L : タイマーAによる割り込み要求出力を無効 IRQ_EN_TB = H : タイマーBによる割り込み要求出力を有効 IRQ_EN_TB = L : タイマーBによる割り込み要求出力を無効 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $2A ~ $2C | TEST oykenkyu.blogspot.com |
TEST テスト用のレジスタです。 仕様は公開されていません。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $2D | PRS_6_4 (廃止) |
PRS_6_4 Prescaler set FM1/6, SSG1/4 廃止された内部クロックプリスケーラ設定レジスタアドレスです。 YMF288のクロックプリスケーラは、FM部で1/6, SSG部で1/4, リズムADPCM部で1/12となります。 YMF288のテスト機能としてプリスケーラ機能が残されている可能性はありますが、通常は分周比を変更できません。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $2E | PRS_3_2 (廃止) |
PRS_3_2 Prescaler set FM1/3, SSG1/2 廃止された内部クロックプリスケーラ設定レジスタアドレスです。 詳細は$2DのPRS_6_4(廃止)を参照してください。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $2F | PRS_2_1 (廃止) |
PRS_2_1 Prescaler set FM1/2, SSG1/1 廃止された内部クロックプリスケーラ設定レジスタアドレスです。 詳細は$2DのPRS_6_4(廃止)を参照してください。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $30 ~ $3F ($33,$37,$3B,$3Fは未使用レジスタ) |
DT_MUL [FM] |
DT_MULTI Detune / Multiple FM音源部のスロットデチューン、スロット倍率設定レジスタです。 BASE_ADR + ($00~$0F)に CH1:SLOT1,CH2:SLOT1,CH3:SLOT1, 空, CH1:SLOT2,CH2:SLOT2,CH3:SLOT2, 空, CH1:SLOT3,CH2:SLOT3,CH3:SLOT3, 空, CH1:SLOT4,CH2:SLOT4,CH3:SLOT4, 空 が割り当てられています。 BASE_ADR : 操作項目基礎アドレス(例えば今回の場合DT_MULなのでBASE_ADR = $30) チャンネル番号CH_NUM(1~3)、スロット番号S_NUM(1~4)とした時、対象対象となるアドレスW_ADRは次式となります。 W_ADR = (CH_NUM - 1) + 4*(S_NUM - 1) + BASE_ADR
DT: スロット周波数の倍率微調整ビットです。 数セント程度のデチューンができます。 DT = 0~7 (0x0 ~ 0x7) : デチューンのセット MUL: スロット周波数の倍率設定ビットです。 MUL = 0~15 (0x0 ~ 0xF) :スロット倍率のセット Ns = MUL (MUL ≠ 0) Ns = 1/2 (MUL = 0) Ns : F_NUM、BLOCKレジスタ値で決まる基本周波数からの倍率[倍] |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $40 ~ $4F ($43,$47,$4B,$4Fは未使用レジスタ) |
TL [FM] |
TOTAL LEVEL FM音源部のスロット出力レベル設定レジスタです。 チャンネルとスロットの割り当ては$30 ~ $3FのDT_MULに説明があるのでそちらを参照してください。
TL: スロット出力レベル設定レジスタです。 TL = 0で最大信号レベル、127で最小信号レベルとなります。 TL = 0~127 (0x00 ~ 0x7F) : スロット出力レベルのセット 減衰量Atlは、 Atl = 0.75 * TL [dB] となります。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $50 ~ $5F ($53,$57,$5B,$5Fは未使用レジスタ) |
KS_AR [FM] |
KEY SCALING / ATTACK RATE FM音源部のスロットピッチによるエンベロープ補正、スロットエンベロープアタックレート設定レジスタです。 チャンネルとスロットの割り当ては$30 ~ $3FのDT_MULに説明があるのでそちらを参照してください。
KS: キースケール設定レジスタビットです。 ピッチによるエンベロープ時間を補正できます。 実際の楽器の場合、ピッチが高くなるにつれ、エンベロープ時間が短くなります。 このビットは、この特性を再現するためのビットです。 KS = 1~3 (0x1 ~ 0x3) : ピッチによるエンベロープ時間補正のセット(値が大きいほどエンベロープ時間を短くします。) KS = 0 : キースケールを無効 AR: アタックレート設定レジスタビットです。 出力レベルのエンベロープ制御する際のアタック時間を設定するビットです。 この値が小さいほどアタック時間が増加します。 AR = 0~31 (0x0 ~ 0x1F) : アタック時間のセット |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $60 ~ $6F ($63,$67,$6B,$6Fは未使用レジスタ) |
AM_DR (OPN表記) AM_D1R (OPM表記) [FM] |
AM ON / DECAY RATE (OPN表記) AM ON / FIRST DECAY RATE(OPM表記) FM音源部のスロットLFO振幅変調、スロットエンベロープファーストディケイレート設定レジスタです。 ※OPN系はAR,DR,SL,SR,RR表記ですが、OPM系はAR,D1R,D1L,D2R,RRとなっています。エンベロープレジスタのビット幅はOPNとOPMで同様なので、両方の表記を記載せます。【】内をOPM表記とします。 チャンネルとスロットの割り当ては$30 ~ $3FのDT_MULに説明があるのでそちらを参照してください。
AM: LFOによるAM変調の有効無効を設定するレジスタビットです。 AM = L : このスロットのLFOによるAM変調を無効にする AM = H : このスロットのLFOによるAM変調を有効にする DR , D1R: 出力レベルのエンベロープ制御する際のファーストディケイ時間(ディケイレベルまで移行する時間)を設定するレジスタです。 この値が小さいほどファーストディケイ時間が増加します。 SR【D1R】 = 0~31 (0x00 ~ 0x1F) :ファーストディケイ時間のセット |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $70 ~ $7F ($73,$77,$B,$7Fは未使用レジスタ) |
SR (OPN表記) D2R (OPM表記) [FM] |
AMPLITUDE MODULATION SENSITIVITY / SUSTAIN RATE (OPN表記) AMPLITUDE MODULATION SENSITIVITY / SECOND DECAY RATE(OPM表記) FM音源部のスロットエンベロープサスティン(セカンドディケイ)レート設定レジスタです。 チャンネルとスロットの割り当ては$30 ~ $3FのDT_MULに説明があるのでそちらを参照してください。
SR, D2R: 出力レベルのエンベロープ制御する際のサスティン(セカンドトディケイ)時間(0レベルまで移行する時間)を設定するビットです。 この値が小さいほどサスティン(セカンドトディケイ)時間が増加します。 SR【D2R】= 0~31 (0x00 ~ 0x1F) : サスティン(セカンドトディケイ)時間のセット |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $80 ~ $8F ($83,$87,$8B,$8Fは未使用レジスタ) |
SL_RR (OPN表記) D1L_RR (OPM表記) [FM] |
SUSTAIN LEVEL / RELEASE RATE (OPN表記) FIRST DECAY LEVEL / RELEASE RATE (OPM表記) FM音源部のスロットエンベロープサスティン(ファーストディケイ)レベル、スロットエンベロープセカンドディケイレート設定レジスタです。 チャンネルとスロットの割り当ては$30 ~ $3FのDT_MULに説明があるのでそちらを参照してください。
SL, D1L: 出力レベルのエンベロープ制御する際のサスティン(ファーストディケイ)レベル)を設定するビットです。 この値が小さいほどサスティン(ファーストディケイ)レベルが大きくなります。 SL【D1L】 = 0~15 (0x0 ~ 0xF) : サスティン(ファーストディケイ)レベルのセット サスティン(ファーストディケイ)レベルfsl[dB]は、 fsl = -3 * SL【D1L】 [dB] : ※SL【D1L】≠ 0xF fsl = -3 * SL【D1L】 -48 [dB] : ※SL【D1L】 = 0xF となります。 RR: 出力レベルのエンベロープ制御する際のリリース時間(キーオフ後に出力レベルが0移行するまでのに時間)を設定するビットです。 この値が小さいほどリリース時間が増加します。 RR = 0~15 (0x0 ~ 0xF) : リリース時間のセット |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $90 ~ $9F ($93,$97,$9B,$9Fは未使用レジスタ) |
SSG_EG [FM] |
SSG-EG SSG TYPE ENVELOPE CONTROL FM音源部のスロットエンベロープジェネレータタイプの選択、SSGタイプEG設定レジスタです。 チャンネルとスロットの割り当ては$30 ~ $3FのDT_MULに説明があるのでそちらを参照してください。
FM_EG_SEL: FM音源部エンベロープジェネレータタイプ(EG)の選択レジスタビットです。 OPN系のFM音源特有の機能です。 OPN系のFM音源ではEG動作をSSGのようにすることができます。 厳密には、AR,DR,SL,SR (AR,D1R,D1L,D2R)で決まるADR(ADSRからRを除いたもの)をSSG風EGで繰り返すというものです。 SSG風EGを有効にするにはFM_EG_SELをHにします。 基本的にSSG風EGが有効の時にはARレジスタに0x1Fをセットします。また、RRはSSG風EGの有効無効に限らず常にRRレジスタに影響されます。 o y k e n k y u . b l o g s p o t . c o m FM_EG_SEL = L : EG制御はAR,DR,SL,SR (AR,D1R,D1L,D2R)レジスタで行う FM_EG_SEL = H : EG制御はAR,DR,SL,SR (AR,D1R,D1L,D2R)をSSGのEG制御風に繰り返すよう設定 FM_SEG_ATT: FM_SEG_ALT: FM_SEG_HOLD: SSG風エンベロープ形状選択レジスタビットです。 基本的にSSG部の$0D(Envelope Shape Cycle)レジスタのEG設定値と同様です。 ただし、bit3がSSG風EGの有効無効選択ビットFM_EG_SELとなっています。 SSG風EG有効無効選択ビットFM_EG_SELがHのとき、このレジスタビットの設定が実際のEGに反映されます。 SSG風EGとは言うものの、実際にはAR,DR,SL,SR (AR,D1R,D1L,D2R)で設定したADSの繰り返しとなります。 エンベロープ形状は以下の表のようになります。 下り坂がADS順列、上り坂がADS逆順です。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $A0 ~ $A3 ($A3は未使用レジスタ) |
F_NUM1 [FM] |
F_NUM1 F-NUMBER L FM音源部のチャンネル音程設定レジスタ下位8ビットです。 BASE_ADR + ($00 ~ $02)にCH1, CH2, CH3が割り当てられています。 BASE_ADR : 操作項目基礎アドレス(例えば今回の場合F_NUM1なのでBASE_ADR = $A0) チャンネル番号CH_NUM(1~3)とした時、対象対象となるアドレスW_ADRは次式となります。 W_ADR = (CH_NUM - 1) + BASE_ADR このレジスタは$A4 ~ $A6のBLOCK、F_NUM2レジスタとセットで使います。
F_NUM1, F_NUM2: チャンネル音程設定レジスタです。 このレジスタは$A4 ~ $A6の$A0 ~ $A2のBLOCK、F_NUM2レジスタとセットで使います。 CH1,CH2,CH4,CH5はこのレジスタ値によってチャンネル音程が決まります。 CH3では通常モードの時にこのレジスタ値によってチャンネル音程が決まります。CH3が効果音モードの時の$A2はCH3:SLOT4の周波数決定レジスタとなります。CH6は不明です。oykenkyu.blogspot.com 以降の説明では音程設定レジスタ群F_NUM = F_NUM2<<8 | F_NUM1として扱います。 F_NUM = 0~2047(0x000~0x7FF) : 音程設定レジスタ群F_NUM設定値 F_NUMレジスタ設定値と出力周波数foutは以下の関係があります。 F_NUM = (3^2) * fout *(2^24) / (ΦM * 2^(BLOCK-1) ) = fout * 301989888 / (ΦM * 2^BLOCK) レジスタ設定値から出力周波数を求めたい場合は以下のとおりです。 fout = F_NUM * (ΦM * 2^BLOCK) / 301989888 ΦM : 入力クロック周波数[Hz] BLOCK : $A4 ~ $A6のBLOCK レジスタビットの値 --MIDIノートナンバーからレジスタ値F_NUMを求める場合-- F_NUM = (440 / (2 ^ (69/12)))* (2 ^ (note_n/12)) * 301989888 / (ΦM * 2^BLOCK) = 8.175799 * (2 ^ (note_n/12)) * 301989888 / (ΦM * 2^BLOCK) = (2 ^ (note_n/12)) * 2469008624 / (ΦM * 2^BLOCK) note_n : MIDIノートナンバ(0~127、note_n=69のときfout=440) ΦM : 入力クロック周波数[Hz] [入力クロックΦM = 7.9872MHzの場合] F_NUM = (2 ^ (note_n/12)) * 2469008624 / (7987200 * 2^BLOCK) = (2 ^ (note_n/12)) * 309.121 / (2^BLOCK) [入力クロックΦM = 8.0000MHzの場合] F_NUM = (2 ^ (note_n/12)) * 2469008624 / (8000000 * 2^BLOCK) = (2 ^ (note_n/12)) * 308.626 / (2^BLOCK) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $A4 ~ $A7 ($A7は未使用レジスタ) |
BLOCK_F_NUM2 [FM] |
BLOCK_F_NUM2 BLOCK, F-NUMBER H FM音源部のチャンネル音程オクターブ設定レジスタ、チャンネル音程設定レジスタ上位3ビットです。 BASE_ADR + ($00 ~ $02)にCH1, CH2, CH3が割り当てられています。 BASE_ADR : 操作項目基礎アドレス(例えば今回の場合BLOCK_F_NUM2なのでBASE_ADR = $A4) チャンネル番号CH_NUM(1~3)とした時、対象対象となるアドレスW_ADRは次式となります。 W_ADR = (CH_NUM - 1) + BASE_ADR このレジスタは$A0 ~ $A2のF_NUM1レジスタとセットで使います。
BLOCK: FM音源部のチャンネル音程オクターブ設定レジスタです。 このレジスタは$A0 ~ $A2のF_NUM1レジスタとセットで使います。 詳細は$A0 ~ $A2のF_NUM1を参照してください。 F_NUM2: FM音源部のチャンネル音程設定レジスタです。 このレジスタは$A0 ~ $A2のF_NUM1レジスタとセットで使います。 詳細は$A0 ~ $A2のF_NUM1を参照してください。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $A8 ~ $AB ($ABは未使用レジスタ) |
CH3_F_NUM1 [FM] |
CH3_F_NUM1 3CH * F-NUMBER L FM音源部のCH3スロット音程設定レジスタ下位8ビットです。 $27のMODE_TIM_CONFレジスタのMODE_0 ビットをHにしてCH3を効果音モードとした場合、このCH3_F_NUM1レジスタが有効になります。 効果音モードでは、CH3限定でスロットごとに音程を決められます。 BASE_ADR + ($00 ~ $02)にCH3:SLOT2、CH3:SLOT1、CH3:SLOT3、が割り当てられています。 BASE_ADR : 操作項目基礎アドレス(例えば今回の場合CH3_F_NUM1なのでBASE_ADR = $A8) CH3:SLOT4はF_NUM1の$A2となります。 このレジスタは$A2のF_NUM1レジスタ、$A6のBLOCK,F_NUM2レジスタおよび、$AC ~ $AEのCH3_BLOCK、CH3_F_NUM2レジスタとセットで使います。
CH3_F_NUM1: FM音源部のチャンネル音程設定レジスタです。 このレジスタは$A2のF_NUM1レジスタ、$A6のBLOCK,F_NUM2レジスタおよび、$AC ~ $AEのCH3_BLOCK、CH3_F_NUM2レジスタとセットで使います。 詳細は$A0 ~ $A2のF_NUM1を参照してください。 BASE_ADR + ($00 ~ $02)にCH3:SLOT2、CH3:SLOT1、CH3:SLOT3、が割り当てられています。 BASE_ADR : 操作項目基礎アドレス(例えば今回の場合CH3_F_NUM1なのでBASE_ADR = $A8) CH3:SLOT4のF_NUM1は$A2となります。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $AC ~ $AE ($ABは未使用レジスタ) |
CH3_BLOCK_F_NUM2 [FM] |
CH3_BLOCK_F_NUM2 3CH * BLOCK, 3CH * F-NUMBER H FM音源部のCH3スロット音程オクターブ設定レジスタ、CH3スロット音程設定レジスタ上位3ビットです。 BASE_ADR + ($00 ~ $02)にCH3:SLOT2、CH3:SLOT1、CH3:SLOT3、が割り当てられています。 BASE_ADR : 操作項目基礎アドレス(例えば今回の場合CH3_F_NUM1なのでBASE_ADR = $AC) CH3:SLOT4はBLOCK_F_NUM2の$A6となります。 このレジスタは$A2のF_NUM1レジスタ、$A6のBLOCK,F_NUM2レジスタおよび、$A8 ~ $A6のCH3_F_NUM1レジスタとセットで使います。
CH3_BLOCK: FM音源部のCH3スロット音程オクターブ設定レジスタです。 このレジスタは$A2のF_NUM1レジスタ、$A6のBLOCK,F_NUM2レジスタおよび、$AC ~ $AEのCH3_BLOCK、CH3_F_NUM2レジスタとセットで使います。 詳細は$A0 ~ $A2のF_NUM1を参照してください。 CH3:SLOT4のBLOCKは$A6となります。 CH3_F_NUM2: FM音源部のチャンネル音程設定レジスタです。 このレジスタは$A2のF_NUM1レジスタ、$A6のBLOCK,F_NUM2レジスタおよび、$AC ~ $AEのCH3_BLOCK、CH3_F_NUM2レジスタとセットで使います。 詳細は$A0 ~ $A2のF_NUM1を参照してください。 CH3:SLOT4のF_NUM2は$A6となります。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $B0 ~ $B2 ($B3は未使用レジスタ) |
FB_CON [FM] |
FB_CON FEEDBACK / CONNECTION (Algorithm) FM音源部のフィードバック設定レジスタ、チャンネルアルゴリズム設定レジスタです。 BASE_ADR + ($00 ~ $02)にCH1, CH2, CH3が割り当てられています。 BASE_ADR : 操作項目基礎アドレス(例えば今回の場合BLOCK_F_NUM2なのでBASE_ADR = $B0) チャンネル番号CH_NUM(1~3)とした時、対象対象となるアドレスW_ADRは次式となります。 W_ADR = (CH_NUM - 1) + BASE_ADR
FB: SELF FEEDBACK LEVEL FM音源部のスロット1自己フィードバック量設定レジスタです。 S1(M1, OP1)のフィードバックレベルを指定します。 このレジスタの値が大きいほどSLOT1の自己フィードバック量が多くなります。 FB = 0~7 (0x0 ~ 0x7) : フィードバックレベルのセット FB_leve = π * (2 ^ (-5 + FL)) ※FL ≠ 0 FB_leve : フィードバックレベル FB = 0~7 (0x0 ~ 0x7) : フィードバックレベル設定ビット(FB = 0のときのみ FB_level = 0) CONNECT: CONNECTION アルゴリズム(コネクション)を設定します。 SLOT1 : S1 (M1, OP1) SLOT2 : S2 (C1, OP2) SLOT3 : S3 (M2, OP3) SLOT4 : S4 (C2, OP4) 括弧内はOPMやOPL等で呼ばれている名称です。 OPN系とOPM系で名称が異なりますが、アルゴリズムの接続パターンは同じです。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $B4 ~ $B7 ($B7は未使用レジスタ) |
LR_PMS_AMS [FM] |
LR_PMS_AMS PHASE MODULATION SENSITIVITY / AMPLITUDE MODULATION SENSITIVITY FM音源部のチャンネル出力先選択、チャンネルLFO位相変調、チャンネル振幅変調感度設定レジスタです。 BASE_ADR + ($00 ~ $02)にCH1, CH2, CH3が割り当てられています。 BASE_ADR : 操作項目基礎アドレス(例えば今回の場合BLOCK_F_NUM2なのでBASE_ADR = $B4) チャンネル番号CH_NUM(1~3)とした時、対象対象となるアドレスW_ADRは次式となります。 W_ADR = (CH_NUM - 1) + BASE_ADR
RL: LEFT CHANNEL ENABLE / RIGHT CHANNEL ENABLE チャンネル出力先選択レジスタビットです。 LまたはRチャンネルの出力を決定します。 RL_R = H : Rチャンネルの出力を有効にします。 RL_L = H : Lチャンネルの出力を有効にします。 AMS: LFO振幅変調感度設定ビットです。 $60 ~ $6Fのbit7のAMビットがHのとき、対象のスロットにLFOによる振幅変調がかかります。 AMS= 0~3 (0x0 ~ 0x3) : LFO振幅変調感度をセット 最大振幅変調度 AMS = 0 : 0dB AMS = 1 : 1.4dB AMS = 2 : 5.9dB AMS = 3 : 11.8dB PMS: LFO位相変調感度設定ビットです。 PMS = 0~7 (0x0 ~ 0x7) : PMS感度をセット
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $B8 ~ $FE | 未使用 | 未使用レジスタです。oykenkyu.blogspot.com |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $FF | ID_NO (読み取り専用) | ID NO. デバイス識別コードレジスタです。 常に読み取り専用となります。 このレジスタの読み取り時には、A0端子をHにする必要があります。
ID: FM音源LSIのタイプの固有番号を格納しています。 YMF288の動作モードによってこのレジスタの値が変化します。 動作モードについては、$20 NEW_STBYレジスタのbit7 NEWビットに説明があるので、そちらを参照してください。 ID = 1 (0x01) : YM2608B (OPNA) および、その互換モード ID = 2 (0x02) : YMF288(OPN3) モード |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $100 | ADPCM_CONTROL1 [ADPCM] (廃止) |
ADPCM_CONTROL1 YMF288で廃止されたADPCMコントロールレジスタアドレスです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $101 | ADPCM_CONTROL2 [ADPCM] (廃止) |
ADPCM_CONTROL2 YMF288で廃止されたADPCMコントロールレジスタアドレスです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $102 | ADPCM_START_ADR_L [ADPCM] (廃止) |
ADPCM_START_ADR_L YMF288で廃止されたADPCMスタートアドレス下位設定アドレスです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $103 | ADPCM_START_ADR_H [ADPCM] (廃止) |
ADPCM_START_ADR_H YMF288で廃止されたADPCMスタートアドレス上位設定アドレスです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $104 | ADPCM_STOP_ADR_L [ADPCM] (廃止) |
ADPCM_STOP_ADR_L YMF288で廃止されたADPCM終点アドレス下位設定アドレスです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $105 | ADPCM_STOP_ADR_H [ADPCM] (廃止) |
ADPCM_STOP_ADR_H YMF288で廃止されたADPCM終点アドレス上位設定アドレスです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $106 | ADPCM_PRESCAL_L [ADPCM] (廃止) |
ADPCM_PRESCAL_L YMF288で廃止されたADPCMサンプリングレート下位設定アドレスです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $107 | ADPCM_PRESCAL_H [ADPCM] (廃止) |
ADPCM_PRESCAL_H YMF288で廃止されたADPCMサンプリングレート上位設定アドレスです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $108 | ADPCM_DATA [ADPCM] (廃止) |
ADPCM_DATA YMF288で廃止されたADPCMメモリアクセス用アドレスです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $109 | ADPCM_DELTA_N_L [ADPCM] (廃止) |
ADPCM_DELTA_N_L YMF288で廃止されたADPCM音声合成サンプリングレート下位設定アドレスです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $10A | ADPCM_DELTA_N_H [ADPCM] (廃止) |
ADPCM_DELTA_N_H YMF288で廃止されたADPCM音声合成サンプリングレート上位設定アドレスです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $10B | ADPCM_EG_CTRL [ADPCM] (廃止) |
ADPCM_EG_CTRL YMF288で廃止されたADPCM音声合成出力レベル設定アドレスです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $10C | ADPCM_LIMIT_ADR_L [ADPCM] (廃止) |
ADPCM_LIMIT_ADR_L YMF288で廃止されたADPCMメモリ範囲指定レジスタ下位設定アドレスです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $10D | ADPCM_LIMIT_ADR_H [ADPCM] (廃止) |
ADPCM_LIMIT_ADR_H YMF288で廃止されたADPCMメモリ範囲指定レジスタ上位設定アドレスです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $10E | ADPCM_DAC_DATA [ADPCM] (廃止) |
ADPCM_DAC_DATA YMF288で廃止されたADPCMのDA出力レジスタアドレスです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $10F | ADPCM_PCM_DATA (読み取り専用) [ADPCM] (廃止) |
ADPCM_PCM_DATA YMF288で廃止されたADPCMの入力PCM格納レジスタアドレスです。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $110 | FLAG_CONTROL (A1端子 = H) |
FLAG_CONTROL ステータスフラグ制御用レジスタです。
IRQ_RESET: 全フラグ初期化ビットです。 このビットにHを書き込むと、このレジスタのbit4~bit0に相当するフラグが初期化(0)となります。 MASK_ZERO: MASK_BRDY: MASK_EOS: YMF288で廃止されたADPCM関連のフラグマスクビットです。 MASK_TIMER_B: MASK_TIMER_A: タイマーA、タイマーBのフラグマスクビットです。 このビットをHにすると、該当するタイマーのフラグが立たなくなります。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $130 ~ $1B7 | FM音源部 CH4~CH6 レジスタ (A1端子 = H) |
拡張FM音源部であるCH4~CH6が割り当てられています。 使用方法は$30 ~ $B6と同一なのでそちらを参照してください。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $1B8 ~ $1FF | 未使用 | 未使用レジスタです。 読み出しでアクセスした場合、バスがハイインピーダンスとなります。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - | - | - |
・ステータスレジスタ
ステータスレジスタには3種類あります。その1つは上記表にあるデバイスIDレジスタID_NOです。ID_NOの読み出しにはA0端子をH(バスのデータ読み書き指定)にする必要があります。
このステータスレジスタについてはアドレス$FFのID_NOレジスタの説明を参照してください。
残り2つがステータス0、ステータス1レジスタでYMF288の場合、機能はほぼ同一です。
このステータスレジスタ0とステータスレジスタ1の読み出しにはA0端子をL(バスのアドレス書き込み指定)にする必要があります。
ステータスレジスタ0とステータスレジスタ1の読み出し時にはアドレスの指定は不要です。
・ステータス0 (A1端子=L、 アドレス$0xx相当)
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
|---|---|---|---|---|---|---|---|
| BUSY | * | * | * | * | * | FLAG_B | FLAG_A |
・ステータス1 (A1端子=H、 アドレス$1xx相当)
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
|---|---|---|---|---|---|---|---|
| BUSY | * | PCM_BUSY (廃止) (常に0) | ZERO (廃止) (常に0) | BRDY (廃止) (常に0) | EOS (廃止) (常に0) | FLAG_B | FLAG_A |
ステータス0レジスタとステータス1レジスタの中のbit7 BUSY、bit1 FLAG_B、bit0 FLAG_Aビットは同一です。
ステータス1レジスタのbit5 ~ bit2はADPCM関連機能のステータスビットのため、ADPCM関連機能が廃止されたYMF288では常に0が得られます。
BUSY:
ビジーフラグです。
このフラグビットがLのとき、データを書き込みできます。
FLAG_B:
FLAG_A:
タイマーオーバーフローフラグです。
該当のタイマーがオーバーフローした時、Hとなります。
/*検索エンジン用単語リスト*/
YMF 288
YMF-288-M
YMF 288 M
YMF288M
YMF-288-SYMF 288 S
YMF288S
OPN-3
OPN3
yamaha
fm
FM Sound Source Registers
FM synthesizer Registers
FM Sound Generator Registers
List of Registers
Explanation of Registers
Register
reg