FM音源 EGM/OPS2のレジスタ解析

はじめに

シンセサイザーDX7IID、TX802のシステムROMを解析して、YM2604(OPS2)およびYM3609(EGM)のレジスタの調査を行った。 (2016.2.16)

概略

第二世代の6オペレータFMチップは複数のパートで異なる音色設定が可能である。 LFOはPM,AMともにチャンネルごとに設定可能に変わった。

EGMはEGSからレジスタ数が減った代わりに、チャンネルやオペレータを指定するレジスタが新設されている。

パート設定

下記のとおり、1パート/2パート/8パートのモードが存在し、各モードに特化して16ch/8ch/2chに一度に書き込む仕組みとなっている。16chそれぞれに独立した音色設定ができるのではないようだ。

ボイスモードパート数音色設定
シングルボイス1第1〜16チャンネルが共通の音色設定
デュアルボイス
スプリットボイス
2第1〜8、第9〜16チャンネルがそれぞれ共通の音色設定
TX802 8パート82チャンネルずつ共通の音色設定

EGM,OPS2のレジスタマップ

EGM

Rbitcontent
00xxRR_RRRREG R1
01xxRR_RRRREG R2
02xxRR_RRRREG R3
03xxRR_RRRREG R4
04xxLL_LLLLEG L1
05xxLL_LLLLEG L2
06xxLL_LLLLEG L3
07xxLL_LLLLEG L4
08FFFF_FFFFFreq H
09FFFF_FFFMFreq L | Freq Mode
0Axxxx_DDDDDetune
0BxCAA_AKKKCarrier | AMS | KRS
0Cnot used
0Dnot used
0Exxxx_xOOOOp Selector
0FSSCC_CCCCOSC SYNC | Ch Group Selector
10LLLL_LLLLOp6 OL
11LLLL_LLLLOp5 OL
12LLLL_LLLLOp4 OL
13LLLL_LLLLOp3 OL
14LLLL_LLLLOp2 OL
15LLLL_LLLLOp1 OL
16x1CC_CCSSKey On/Off (Channel | State)
17xxxx_CCCCCh Selector
18PPPP_PPPPPitch H
19PPPP_PPxxPitch L
1APPPP_PPPPLFO PM H
1BPPPP_PPPPLFO PM L
1CAAAA_AAAALFO AM H
1DAAAA_AAAALFO AM L
1Enot used
1Fnot used

OPS2

Rbitcontent
00xxCC_CCCCCh Group Selector
01AAAA_AFFFAlgorithm | Feedback Level

EGMのレジスタ

EGSと異なるレジスタのみ説明する。

R00〜R0Fは音色設定が共通のパートで設定が共有されるレジスタである。 R10〜R1Fは16チャンネルそれぞれに異なる設定が可能なレジスタである。

R00〜R0Dのレジスタにより設定するパラメータについては、R0F、R0Eで設定したチャンネル、オペレータが対象となる。
R10-R15、R18-R1Fのレジスタにより設定するパラメータについては、R17で設定したチャンネルが対象となる。

R0E: Operator Selector

Bit Format : xxxx_xOOO

bit2〜bit0により、R00〜R0Dの設定対象オペレータを指定する。
値は0〜5。0はOp6を示す。

R0F: Oscillator Key Sync / Channel Group Selector

Bit Format : SSCC_CCCC

bit7,6により、キーオン時に各オシレータの位相をリセットするか否かを指定する。
bit7,6の値が0,1では同期(リセットする)となり、値1,0では非同期(リセットしない)となる。旧チップではOPS側にあったレジスタだが、EGM側に移動している。

bit5〜bit0により、R00〜R0Dの設定対象チャンネルグループを指定する。
全チャンネルで音色設定を共通とするシングルボイスでは$30を与えていた。第1〜8ch、第9〜16chを異なる音色設定にするデュアルボイス、スプリットボイスではボイスAには$20、ボイスBには$28を与えていた。
また、8パート別々の音色設定を行うTX802では$00+c(c:0〜7)を与えていた。

R0B: Carrier / AMS / KRS

Bit Format : xCAA_AKKK

AMSが2bitから3bitへ拡張されている。

キャリアのオペレータではbit6に1をセットしていた。EGM内部でキャリアとモジュレータとで何らかの違う処理を行う必要があったが、EGM側ではどのアルゴリズムが設定されているかわからないために、このビットが新設されたと推測する。

R17: Channel Selector

Bit Format : xxxx_CCCC

bit3〜bit0により、R10〜R15、R18〜R1F(アプトプットレベル、キーコード、LFO)の設定対象チャンネルを指定する。値は$0〜$f。

R16: keyon

Bit Format : x1CC_CCSS

チャンネルのキーオン/キーオフを行う。 bit6は1がセットされる。 bit5〜bit2によりチャンネル番号を指定し、bit1,0でキーの状態を指定する。

キーの状態の値は次のとおり。EGMではエンベロープの位相をリセットする機能が追加されている。 3: key on   2: key off   1: EGのリセット

EG forced damping onの場合には、key onの書き込みの後でさらにEGのリセットが行われていた。

R1C-R1D: LFO AM

8bitから16bitに拡張されている。

OPS2のレジスタ

OPSとはR00の機能が異なる。音色設定が全チャンネル共通ではなくなったため、R01の設定対象を指定するためのレジスタ(R00)が必要となっている。

R00: Ch Group Selector

レジスタR01(アルゴリズム、フィードバック)の設定対象を指定する。R00とR01に1回だけ書き込みを行えば、音色が共通のチャンネルに反映される。

全チャンネルを同じ音色設定にするシングルボイスでは$30が書き込まれていた。第1〜8ch、第9〜16chを異なる音色設定にするデュアルボイス、スプリットボイスではボイスAには$37、ボイスBには$3fが書き込まれていた。
8パート別々の音色設定を行うTX802では$20+c(c:0〜7)が書き込まれていた。

ステレオ出力

OPS2にはSH0、SH1の出力ピンがあり、16チャンネル×AB2出力分のデジタル信号が時分割で出力される模様。旧チップにもSH0、SH1があり、ステレオ出力に対応していたと考えられる。

DX7IIでは、OPS2の後段の回路によりA/Bの出力がミキシングされる。 また、A/BそれぞれにVCA回路が接続され、各出力レベルを制御することにより、多段階のパンが実現されている。

TX802では、OPS2のCS1、CS2、CS3の出力ピンの信号が後段の回路に接続されている(DX7IIではこれらは非接続)。この信号に同期することにより、8パートの出力信号を個別に取り出している。さらに各パートをI、IIの2出力の片方または両方にミキシングしている。

その他

EGS/OPSでも同様であるが、4-Op系のチップとは異なり、レジスタ書き込みのビジーチェックは必要ないらしい。ステータスを見ずに連続して書き込みが行われていた。

また、EGMではアドレスピンがA0〜A4とレジスタの個数分出ているため、CPUから1バイトのライトで1レジスタの書き込みが完了する。Store Dのような16bitのメモリアクセス命令1個で、隣接する2レジスタの書き込みも行われていた。EGSも同様である。
これに対し4-Op系のチップでは、(1)ビジーチェック(2)レジスタ番号の書き込み(3)データの書き込み、というステップが1レジスタの書き込みに必要である。