現在執筆中です。内容がちょくちょく変更されますので、ご注意ください。
OPS(YM21280) / EGS(YM21290) のレジスタのメモ
注意:このサイトの内容を鵜呑みにし、事故や損失を招いた場合でも当方は一切の責任は負いかねます。自己責任でお願いします。
自分用のメモです。
たまたま目に入りましたが、
YAMAHA公式のドキュメント"Yamaha DX7 Technical Analysis"によると、
OPSは"the Operator for the Synthesizer."、
EGSは"the Envelope Generator for the Synthesizer."の略称だそうです。
・YM21280 (OPS)のレジスタ(書き込み専用)
YM21280 (OPS)は1ビットアドレス空間中に2バイト分のレジスタを持っています。
「・"レジスタ名"」で記述している箇所は"Yamaha DX7 Technical Analysis"に記述されているレジスタ名です。
次の表の「レジスタ名」の列のレジスタ名はこちらが勝手につけた名称です。
| アドレス |
レジスタ名 | 機能 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| $0 | MODE | ・MODE OPS動作モード設定レジスタです。 "Yamaha DX7 Technical Analysis"には設定値についての記述がありません。 テストレジスタビットもここにあると予想されます。 FM音源 EGS/OPSのレジスタ解析 http://sr4.sakura.ne.jp/fmsound/egsops.html によると、bit5はキーオン時にオペレータの位相をリセットするかどうか設定するビットのようです。 [YM21280 OPS] |
||||||||||||||||
| $1 | ALG_FL | ・ALGORITHM NO ・FEEDBACK LEVEL アルゴリズム選択、フィードバックレベル設定レジスタです。
ALG: アルゴリズムの選択を設定するビットです。 16ch共通です。 ALG = 0~31 (0x00~0x1F) アルゴリズム FL: フィードバック量を設定するビットです。 16ch共通です。 FL = 0~7 (0x0~0x7) フィードバック量 [YM21280 OPS] |
・YM21290 (EGS)のレジスタ(書き込み専用)
YM21290 (EGS)は8ビットアドレス空間中に256バイト分のレジスタを持っています。
「・"レジスタ名"」で記述している箇所は"Yamaha DX7 Technical Analysis"に記述されているレジスタ名です。
次の表の「レジスタ名」の列のレジスタ名はこちらが勝手につけた名称です。
| アドレス |
レジスタ名 | 機能 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| $00,$01 ~ $1E,$1F | LOG_F | ・LOG_F Key Code log F 音程設定レジスタです。 発音する周波数を設定します。 $00,$01 ~ $1E,$1Fにch1 ~ ch16が割り当てられています。(12バイト分のアドレス) 1chにつき連続した2バイト分をセットにして使います。 偶数アドレスはLOG_Fレジスタ14bit中上位8bit、奇数アドレスはLOG_Fレジスタ14bit中下位6bitをセットします。 偶数アドレス
奇数アドレス
LF: 音程設定レジスタです。 LF = 1~16383 (0x0000~0x3FFF) 音程 音程設定レジスタLFから音程(セント)TONE_P を求める式 TONE_P = LF * 75/64 TONE_P : 音程(セント) LFビットNo.と音程の関係
100セント=1/12オクターブ=1半音です。 偶数アドレス分のレジスタ(LF14~LF7)だけでは、100セントずつ値をセットすることができません。 表を見てもらえばわかりますが、LF=100または200という値を作るには奇数アドレス分のレジスタ(LF6~LF1)で約25または約50を作る必要があります。 LF6~LF1 = 0x15 =24.6 LF6~LF1 = 0x2A =49.2 [YM21290 EGS] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $20,$21~ $2A,$2B |
LOG_RF | ・LOG_RF Ratio of Frequency オペレータ周波数の(倍率または周波数)設定レジスタです。(12バイト分のアドレス) $20,$21~$2A,$2BにOP6~OP1が割り当てられています。1つのOPにつき連続した2バイト分をセットにして使います。 16チャンネル分共通です。 偶数アドレスはLOG_RFレジスタ14bit中上位8bit、奇数アドレスはLOG_RFレジスタ14bit中下位6bitをセットします。 奇数アドレスの最下位ビットFIXEDによって各オペレータのモードが決まります。 偶数アドレス
奇数アドレス
FIXED=0のとき RF: オペレータ倍率モードです。 RF14~RF1にセットした値によってオペレータの発振周波数の倍率が決まります。 オペレータ発振周波数はLOG_Fとこのレジスタの値に影響されます。 RF = 1~16383 (0x0000~0x3FFF) 倍率レジスタ 倍率設定レジスタRFからオペレータ倍率N[倍] を求める式(予測、未検証) N = 2^(RF / 1024) * φM / (3*5*11*(2^17)) φM : 入力クロック周波数[Hz] FIXED=1のとき RF: オペレータ固定周波数モードです。 RF14~RF1にセットした値によってオペレータの発振周波数が決まります。 オペレータ発振周波数はLOG_Fレジスタの値に影響されません。 調査中です。 [YM21290 EGS] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $30~$35 | DETUNE | ・DETUNE Detune オペレータ周波数の微調整設定レジスタです。 $30~$35にOP6~OP1が割り当てられています。(6バイト分のアドレス) 16チャンネル分共通です。
FD: オペレータ周波数微調整レジスタです。 FD = 0~15 (0x0~0xF)オペレータ周波数微調整レジスタ [YM21290 EGS] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $40,$41,$42,$43 ~ $54,$55,$56,$57 |
R | ・R Rate オペレータのエンベロープ・レート設定レジスタです。 $40,$41,$42,$43 ~ $54,$55,$56,$57に OP6_R1,OP6_R2,OP6_R3,OP6_R4 ~ OP1_R1,OP1_R2,OP1_R3,OP1_R4 が割り当てられています。(24バイト分のアドレス) 16チャンネル分共通です。
R: エンベロープジェネレータ・エンベロープレート設定レジスタです。 このレジスタの値が大きいほど、エンベロープ変化率が激しいです。 R = 0~63 (0x00~0x3F) エンベロープレート設定レジスタ [YM21290 EGS] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $60,$61,$62,$63 ~ $74,$75,$76,$77 |
L | ・L Level オペレータのエンベロープ・レベル設定レジスタです。 $60,$61,$62,$63 ~ $74,$75,$76,$77に OP6_L1,OP6_L2,OP6_L3,OP6_L4 ~ OP1_L1,OP1_L2,OP1_L3,OP1_L4 が割り当てられています。(24バイト分のアドレス) 16チャンネル分共通です。
L: エンベロープジェネレータ・エンベロープレベル設定レジスタです。 このレジスタの値が小さいほど、エンベロープレベルが高くなります。 L = 0~63 (0x00~0x3F) エンベロープレベル設定レジスタ [YM21290 EGS] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ($80~$8F) ~ ($D0~$DF) |
TL | ・TL Total Level 指定chのオペレータのトータルレベル設定レジスタです。 アドレス下位4bitでチャンネルを指定します。$X0~$XFにch1~ch16が割り当てられています。 アドレス上位3bitでオペレータを指定します。$8X~$DXにOP6~OP1が割り当てられています。 ($80~$8F) に(TL_OP6_CH1 ~TL_OP6_CH16) ~ ($D0~$DF)に(TL_OP1_CH1 ~TL_OP1_CH16)
TL: オペレータ・トータルレベル設定レジスタです。 このレジスタの値が小さいほど、エンベロープレベルが高くなります。 TL = 0~255 (0x00~0xFF) トータルレベル設定レジスタ トータルレベル設定レジスタTLから内部トータルレベル値TL_INTを求める式(予測、未検証) TL_INT = TL * 3 / 8 [YM21290 EGS] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $E0~$E5 | MS_RS | ・RS, MS Rate Scaling Mod. Sensitivity オペレータ・キーレートスケーリング感度、オペレータLFO振幅変調感度設定レジスタです。 $E0~$E5にOP6~OP1が割り当てられています。(6バイト分のアドレス) 16チャンネル分共通です。
MS: オペレータLFO振幅変調感度設定レジスタビットです。 MS = 0~3 (0x0~0x3) 振幅変調感度設定レジスタビット RS: オペレータ・キーレートスケーリング感度設定レジスタビットです。 RS = 0~3 (0x0~0x7) キーレートスケーリング感度設定レジスタビット [YM21290 EGS] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $F0 | AMOD | ・AMOD mplitude Mod. LFO振幅変調用音量設定レジスタです。 16チャンネル,6オペレータ分共通です。
EM: LFO振幅変調用音量設定レジスタです。 ソフトウェアで振幅変調する際に使います。 すべてのチャンネル・オペレータに適用されます。 $E0~$E5のMSレジスタビットが0のとき、そのオペレータには変調がかからないはずです。(未検証) EM = 0~255 (0x00~0xFF) LFO振幅変調用音量設定レジスタ MS=3のとき、出力値TL_OUT[dB]は次式の通りになります。 TL_OUT = EM * 3 / 16 [YM21290 EGS] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $F1 | KOF | ・KOF Key On, Off キーオン・キーオフ操作レジスタです。 キーオン時
キーオフ時
CH: キーオン・キーオフ対象ch指定レジスタビットです。 bit1=1,bit0=0のときキーオン、 bit1=0,bit0=1のときキーオフします。 EM = 0~15 (0x0~0xF) キーオン・キーオフ対象ch指定レジスタビット 操作対象チャンネルK_CH (1~16)は次式で求まります。 K_CH = EM + 1; [YM21290 EGS] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $F2,$F3 | PMOD | ・PMOD Pitch Mod. LFO位相変調用周波数設定レジスタです。 $F2にはFMレジスタ12bit中上位8bit、$F3はFMレジスタ12bit中下位4bitをセットします。(注意:ここでのFMはレジスタ名です。) 16チャンネル,6オペレータ分共通です。
FM: LFO位相変調用周波数設定レジスタです。 ソフトウェアで位相変調する際に使います。 すべてのチャンネル・オペレータに適用されます。 最上位ビットFM_12は符号ビットです。 FM = -128 ~ 127 (0x80~0x7F) LFO位相変調用周波数設定レジスタ 位相変化度P_MOD_F [セント]は次式により求まります。 P_MOD_F = FM * 75/64 [YM21290 EGS] |
参考文献
FM音源 EGS/OPSのレジスタ解析
http://sr4.sakura.ne.jp/fmsound/egsops.html
"Yamaha DX 7 Technical Analysis"
Anthony ~ajxs
0 件のコメント:
コメントを投稿