vendor:yamaha:opl2
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
vendor:yamaha:opl2 [2019/03/19 02:17] – [YM2413/VRC7] cr1901 | vendor:yamaha:opl2 [2019/12/30 18:27] (current) – clarify notes about ym2413 instrument rom source lord_nightmare | ||
---|---|---|---|
Line 3: | Line 3: | ||
======= Official Documentation: | ======= Official Documentation: | ||
- | ===== Datasheets ==== | + | ===== Datasheets |
* The YM3812/OPL2 datasheet can be found [[http:// | * The YM3812/OPL2 datasheet can be found [[http:// | ||
* The YM3526/OPL datasheet can be found [[http:// | * The YM3526/OPL datasheet can be found [[http:// | ||
Line 20: | Line 20: | ||
* Errata: Bit D5(0x20) 'OPL2 MODE' of the test register(0x01) in the YM3812/OPL2 datasheet is improperly explained on both the datasheet and in the application manual. When bit D5 (0x20) is CLEAR, writes to registers 0xE0-0xF5 are suppressed, but the operation of said registers continues with whatever value was last written to them. This means if you set TEST(0x01) bit D5, write non-zero values to registers 0xE0-0xF5, then clear TEST(0x01) bit D5, the wave generators will continue to use the values previously written to 0xE0-0xF5 even though the chip is technically in 'non OPL2' mode. To work around this, before switching the chip to 'non OPL2' mode, ensure the chip is in ' | * Errata: Bit D5(0x20) 'OPL2 MODE' of the test register(0x01) in the YM3812/OPL2 datasheet is improperly explained on both the datasheet and in the application manual. When bit D5 (0x20) is CLEAR, writes to registers 0xE0-0xF5 are suppressed, but the operation of said registers continues with whatever value was last written to them. This means if you set TEST(0x01) bit D5, write non-zero values to registers 0xE0-0xF5, then clear TEST(0x01) bit D5, the wave generators will continue to use the values previously written to 0xE0-0xF5 even though the chip is technically in 'non OPL2' mode. To work around this, before switching the chip to 'non OPL2' mode, ensure the chip is in ' | ||
- | ====== YM2413/ | + | ======= Chip-specific Notes ======= |
- | OPL Light/ | + | ===== YM2413/VRC7 ======= |
- | ==== YM2413 | + | OPL Light/ |
- | There is at present no die image of YM2413. In the near future, [[https://whitequark.org|whitequark]] will provide a die image suitable for RE. It is anticipated that the instruments ROM will be an implant ROM. This implies a delayering or staining to read out its contents. | + | === YM2413 |
+ | from Nuke.YKT' | ||
+ | < | ||
+ | YM2413 test data output format(!!not verified on hardware!!). | ||
+ | /CS = 0 | ||
+ | /WE = 1 | ||
+ | A0 = 0 | ||
+ | D0 and D1 serially output test data with internal clock rate | ||
+ | Internal clock rate is MCLK/4 | ||
+ | Clock 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ||
+ | D0: P8 P7 P6 P5 P4 P3 P2 P1 P0 E6 E5 E4 E2 E1 E0 0 0 0 | ||
+ | D1: C8 C7 C6 C5 C4 C3 C2 C1 C0 0 0 0 0 0 0 0 0 0 | ||
+ | |||
+ | Px - Operator 0 phase generator output LSB bits | ||
+ | Ex - Operator 17 envelope generator output | ||
+ | Cx - Channel 6(?) output | ||
+ | </ | ||
- | ==== VRC7 Debug Mode ==== | + | |
- | TODO | + | === YM2413 and VRC7 TEST register (0x0F) === |
+ | < | ||
+ | TEST (0x0F) | ||
+ | 76543210 | ||
+ | |||||||\- if 1, Disables Car/Mod EG units, EG output is forced to 0 (max volume). This can be used as a crude DAC test, see below. | ||
+ | ||||||\-- if 1, resets (and holds, while active) the Trem and Vib LFO counts to 0, and resets the rhythm LFSR to all 1s. | ||
+ | |||||\--- if 1, resets (and holds, while active) the PG count for Car/Mod at 0 (this effectively silences the chip) | ||
+ | ||||\---- if 1, the EG unit clock comes from VRC7 ' | ||
+ | |||\----- Does nothing? | ||
+ | ||\------ Does nothing? | ||
+ | |\------- Does nothing? | ||
+ | \-------- Does nothing? | ||
+ | </ | ||
+ | |||
+ | If bit 0 is set, this can be combined with setting bit 2, and writing the ' | ||
+ | |||
+ | === VRC7 Debug Mode === | ||
+ | TODO (see https:// | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== YM2413 Instrument ROM ==== | ||
+ | These values were initially created using hardware tests by nukeykt, but later were corrected by crosschecking data with the visible bits on the fhb013 (presumably ym2413b) die shot, located at [[https:// | ||
+ | < | ||
+ | /* Order of array = { modulator, carrier } */ | ||
+ | typedef struct { | ||
+ | Bit8u tl; | ||
+ | Bit8u dc; | ||
+ | Bit8u dm; | ||
+ | Bit8u fb; | ||
+ | Bit8u am[2]; | ||
+ | Bit8u vib[2]; | ||
+ | Bit8u et[2]; | ||
+ | Bit8u ksr[2]; | ||
+ | Bit8u multi[2]; | ||
+ | Bit8u ksl[2]; | ||
+ | Bit8u ar[2]; | ||
+ | Bit8u dr[2]; | ||
+ | Bit8u sl[2]; | ||
+ | Bit8u rr[2]; | ||
+ | } opll_patch_t; | ||
+ | |||
+ | static const opll_patch_t patch_ym2413[opll_patch_max] = { | ||
+ | { 0x1e, 0x01, 0x00, 0x07,{ 0x00, 0x00 },{ 0x01, 0x01 },{ 0x01, 0x01 },{ 0x01, 0x00 },{ 0x01, 0x01 },{ 0x00, 0x00 },{ 0x0d, 0x07 },{ 0x00, 0x08 },{ 0x00, 0x01 },{ 0x00, 0x07 } }, | ||
+ | { 0x1a, 0x00, 0x01, 0x05,{ 0x00, 0x00 },{ 0x00, 0x01 },{ 0x00, 0x00 },{ 0x01, 0x00 },{ 0x03, 0x01 },{ 0x00, 0x00 },{ 0x0d, 0x0f },{ 0x08, 0x07 },{ 0x02, 0x01 },{ 0x03, 0x03 } }, | ||
+ | { 0x19, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x01, 0x00 },{ 0x03, 0x01 },{ 0x02, 0x00 },{ 0x0f, 0x0c },{ 0x02, 0x04 },{ 0x01, 0x02 },{ 0x01, 0x03 } }, | ||
+ | { 0x0e, 0x00, 0x00, 0x07,{ 0x00, 0x00 },{ 0x00, 0x01 },{ 0x01, 0x01 },{ 0x01, 0x00 },{ 0x01, 0x01 },{ 0x00, 0x00 },{ 0x0a, 0x06 },{ 0x08, 0x04 },{ 0x07, 0x02 },{ 0x00, 0x07 } }, | ||
+ | { 0x1e, 0x00, 0x00, 0x06,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x01, 0x01 },{ 0x01, 0x00 },{ 0x02, 0x01 },{ 0x00, 0x00 },{ 0x0e, 0x07 },{ 0x00, 0x06 },{ 0x00, 0x02 },{ 0x00, 0x08 } }, | ||
+ | { 0x16, 0x00, 0x00, 0x05,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x01, 0x01 },{ 0x01, 0x00 },{ 0x01, 0x02 },{ 0x00, 0x00 },{ 0x0e, 0x07 },{ 0x00, 0x01 },{ 0x00, 0x01 },{ 0x00, 0x08 } }, | ||
+ | { 0x1d, 0x00, 0x00, 0x07,{ 0x00, 0x00 },{ 0x00, 0x01 },{ 0x01, 0x01 },{ 0x00, 0x00 },{ 0x01, 0x01 },{ 0x00, 0x00 },{ 0x08, 0x08 },{ 0x02, 0x01 },{ 0x01, 0x00 },{ 0x00, 0x07 } }, | ||
+ | { 0x2d, 0x01, 0x00, 0x04,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x01, 0x01 },{ 0x00, 0x00 },{ 0x03, 0x01 },{ 0x00, 0x00 },{ 0x0a, 0x07 },{ 0x02, 0x02 },{ 0x00, 0x00 },{ 0x00, 0x07 } }, | ||
+ | { 0x1b, 0x00, 0x00, 0x06,{ 0x00, 0x00 },{ 0x01, 0x01 },{ 0x01, 0x01 },{ 0x00, 0x00 },{ 0x01, 0x01 },{ 0x00, 0x00 },{ 0x06, 0x06 },{ 0x04, 0x05 },{ 0x01, 0x01 },{ 0x00, 0x07 } }, | ||
+ | { 0x0b, 0x01, 0x01, 0x00,{ 0x00, 0x00 },{ 0x01, 0x01 },{ 0x00, 0x01 },{ 0x00, 0x00 },{ 0x01, 0x01 },{ 0x00, 0x00 },{ 0x08, 0x0f },{ 0x05, 0x07 },{ 0x07, 0x00 },{ 0x01, 0x07 } }, | ||
+ | { 0x03, 0x01, 0x00, 0x01,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x01, 0x00 },{ 0x03, 0x01 },{ 0x02, 0x00 },{ 0x0f, 0x0e },{ 0x0a, 0x04 },{ 0x01, 0x00 },{ 0x00, 0x04 } }, | ||
+ | { 0x24, 0x00, 0x00, 0x07,{ 0x00, 0x01 },{ 0x00, 0x01 },{ 0x00, 0x00 },{ 0x01, 0x00 },{ 0x07, 0x01 },{ 0x00, 0x00 },{ 0x0f, 0x0f },{ 0x08, 0x08 },{ 0x02, 0x01 },{ 0x02, 0x02 } }, | ||
+ | { 0x0c, 0x00, 0x00, 0x05,{ 0x00, 0x00 },{ 0x01, 0x01 },{ 0x01, 0x00 },{ 0x00, 0x01 },{ 0x01, 0x00 },{ 0x00, 0x00 },{ 0x0c, 0x0f },{ 0x02, 0x05 },{ 0x02, 0x04 },{ 0x00, 0x02 } }, | ||
+ | { 0x15, 0x00, 0x00, 0x03,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x01, 0x01 },{ 0x01, 0x00 },{ 0x0c, 0x09 },{ 0x09, 0x05 },{ 0x00, 0x00 },{ 0x03, 0x02 } }, | ||
+ | { 0x09, 0x00, 0x00, 0x03,{ 0x00, 0x00 },{ 0x01, 0x01 },{ 0x01, 0x00 },{ 0x00, 0x00 },{ 0x01, 0x01 },{ 0x02, 0x00 },{ 0x0f, 0x0e },{ 0x01, 0x04 },{ 0x04, 0x01 },{ 0x00, 0x03 } }, | ||
+ | |||
+ | { 0x18, 0x00, 0x01, 0x07,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x01, 0x00 },{ 0x00, 0x00 },{ 0x0d, 0x00 },{ 0x0f, 0x00 },{ 0x06, 0x00 },{ 0x0a, 0x00 } }, | ||
+ | { 0x00, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x01, 0x00 },{ 0x00, 0x00 },{ 0x0c, 0x00 },{ 0x08, 0x00 },{ 0x0a, 0x00 },{ 0x07, 0x00 } }, | ||
+ | { 0x00, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x05, 0x00 },{ 0x00, 0x00 },{ 0x0f, 0x00 },{ 0x08, 0x00 },{ 0x05, 0x00 },{ 0x09, 0x00 } }, | ||
+ | { 0x00, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x01 },{ 0x00, 0x00 },{ 0x00, 0x0f },{ 0x00, 0x08 },{ 0x00, 0x06 },{ 0x00, 0x0d } }, | ||
+ | { 0x00, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x01 },{ 0x00, 0x00 },{ 0x00, 0x0d },{ 0x00, 0x08 },{ 0x00, 0x04 },{ 0x00, 0x08 } }, | ||
+ | { 0x00, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x01 },{ 0x00, 0x00 },{ 0x00, 0x0a },{ 0x00, 0x0a },{ 0x00, 0x05 },{ 0x00, 0x05 } } | ||
+ | }; | ||
+ | </ | ||
+ | |||
+ | This translates into a patchset of: | ||
+ | < | ||
+ | 0: user patch (irrelevant) | ||
+ | 1: $71 $61 $1E $17 $D0 $78 $00 $17 | ||
+ | 2: $13 $41 $1A $0D $D8 $F7 $23 $13 | ||
+ | 3: $13 $01 $99 $00 $F2 $C4 $11 $23 | ||
+ | 4: $31 $61 $0E $07 $A8 $64 $70 $27 | ||
+ | 5: $32 $21 $1E $06 $E0 $76 $00 $28 | ||
+ | 6: $31 $22 $16 $05 $E0 $71 $00 $18 | ||
+ | 7: $21 $61 $1D $07 $82 $81 $10 $07 | ||
+ | 8: $23 $21 $2D $14 $A2 $72 $00 $07 | ||
+ | 9: $61 $61 $1B $06 $64 $65 $10 $17 | ||
+ | A: $41 $61 $0B $18 $85 $F7 $71 $07 | ||
+ | B: $13 $01 $83 $11 $FA $E4 $10 $04 | ||
+ | C: $17 $C1 $24 $07 $F8 $F8 $22 $12 | ||
+ | D: $61 $50 $0C $05 $C2 $F5 $20 $42 | ||
+ | E: $01 $01 $55 $03 $C9 $95 $03 $02 | ||
+ | F: $61 $41 $89 $03 $F1 $E4 $40 $13 | ||
+ | |||
+ | Drums | ||
+ | BD : $01 $01 $18 $0F $DF $F8 $6A $6D | ||
+ | SD/HH: $01 $01 $00 $00 $C8 $D8 $A7 $48 | ||
+ | TM/TC: $05 $01 $00 $00 $F8 $AA $59 $55 | ||
+ | </ | ||
==== VRC7 Instrument ROM Dump ==== | ==== VRC7 Instrument ROM Dump ==== | ||
- | Fellow Yamaha enthusiast [[https:// | + | Fellow Yamaha enthusiast [[https:// |
< | < | ||
/* Order of array = { modulator, carrier } */ | /* Order of array = { modulator, carrier } */ | ||
Line 65: | Line 174: | ||
{ 0x0c, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x01, 0x01 },{ 0x01, 0x01 },{ 0x00, 0x00 },{ 0x01, 0x03 },{ 0x00, 0x00 },{ 0x09, 0x0c },{ 0x04, 0x00 },{ 0x03, 0x0f },{ 0x03, 0x06 } }, | { 0x0c, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x01, 0x01 },{ 0x01, 0x01 },{ 0x00, 0x00 },{ 0x01, 0x03 },{ 0x00, 0x00 },{ 0x09, 0x0c },{ 0x04, 0x00 },{ 0x03, 0x0f },{ 0x03, 0x06 } }, | ||
{ 0x0d, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x01 },{ 0x01, 0x01 },{ 0x00, 0x01 },{ 0x01, 0x02 },{ 0x00, 0x00 },{ 0x0c, 0x0d },{ 0x01, 0x05 },{ 0x05, 0x00 },{ 0x06, 0x06 } }, | { 0x0d, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x01 },{ 0x01, 0x01 },{ 0x00, 0x01 },{ 0x01, 0x02 },{ 0x00, 0x00 },{ 0x0c, 0x0d },{ 0x01, 0x05 },{ 0x05, 0x00 },{ 0x06, 0x06 } }, | ||
- | /* TODO */ | + | /* Rhythm Patches: rows 1 and 4 are bass drum, 2 and 5 are Snare Drum & Hi-Hat, 3 and 6 are Tom and Top Cymbal |
- | { 0x00, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 } }, | + | { 0x18, 0x00, 0x01, 0x07,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x01, 0x00 },{ 0x00, 0x00 },{ 0x0d, 0x00 },{ 0x0f, 0x00 },{ 0x06, 0x00 },{ 0x0a, 0x00 } }, |
- | { 0x00, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 } }, | + | { 0x00, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x01, 0x00 },{ 0x00, 0x00 },{ 0x0c, 0x00 },{ 0x08, 0x00 },{ 0x0a, 0x00 },{ 0x07, 0x00 } }, |
- | { 0x00, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 } }, | + | { 0x00, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x05, 0x00 },{ 0x00, 0x00 },{ 0x0f, 0x00 },{ 0x08, 0x00 },{ 0x05, 0x00 },{ 0x09, 0x00 } }, |
- | { 0x00, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 } }, | + | { 0x00, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x01 },{ 0x00, 0x00 },{ 0x00, 0x0f },{ 0x00, 0x08 },{ 0x00, 0x06 },{ 0x00, 0x0d } }, |
- | { 0x00, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 } }, | + | { 0x00, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x01 },{ 0x00, 0x00 },{ 0x00, 0x0d },{ 0x00, 0x08 },{ 0x00, 0x06 },{ 0x00, 0x08 } }, |
- | { 0x00, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 } } | + | { 0x00, 0x00, 0x00, 0x00,{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x00 },{ 0x00, 0x01 },{ 0x00, 0x00 },{ 0x00, 0x0a },{ 0x00, 0x0a },{ 0x00, 0x05 },{ 0x00, 0x05 } } |
}; | }; | ||
</ | </ | ||
+ | This translates into a patchset of: | ||
+ | < | ||
+ | 0: user patch (irrelevant) | ||
+ | 1: $03 $21 $05 $06 $E8 $81 $42 $27 | ||
+ | 2: $13 $41 $14 $0D $D8 $F6 $23 $12 | ||
+ | 3: $11 $11 $08 $08 $FA $B2 $20 $12 | ||
+ | 4: $31 $61 $0C $07 $A8 $64 $61 $27 | ||
+ | 5: $32 $21 $1E $06 $E1 $76 $01 $28 | ||
+ | 6: $02 $01 $06 $00 $A3 $E2 $F4 $F4 | ||
+ | 7: $21 $61 $1D $07 $82 $81 $11 $07 | ||
+ | 8: $23 $21 $22 $17 $A2 $72 $01 $17 | ||
+ | 9: $35 $11 $25 $00 $40 $73 $72 $01 | ||
+ | A: $B5 $01 $0F $0F $A8 $A5 $51 $02 | ||
+ | B: $17 $C1 $24 $07 $F8 $F8 $22 $12 | ||
+ | C: $71 $23 $11 $06 $65 $74 $18 $16 | ||
+ | D: $01 $02 $D3 $05 $C9 $95 $03 $02 | ||
+ | E: $61 $63 $0C $00 $94 $C0 $33 $F6 | ||
+ | F: $21 $72 $0D $00 $C1 $D5 $56 $06 | ||
+ | |||
+ | Drums (silent due to no RO output pin(?) on VRC7, but present internally; these are likely shared with YM2413) | ||
+ | BD : $01 $01 $18 $0F $DF $F8 $6A $6D | ||
+ | SD/HH: $01 $01 $00 $00 $C8 $D8 $A7 $68 | ||
+ | TM/TC: $05 $01 $00 $00 $F8 $AA $59 $55 | ||
+ | </ | ||
+ | |||
+ | ==== OPLL/VRC7 Patch Format ==== | ||
+ | < | ||
+ | byte 0: | ||
+ | 76543210 | ||
+ | ||||\\\\- MULT (Mod) | ||
+ | |||\----- Key Scale Rate enable (Mod) | ||
+ | ||\------ Env Gen Type (0 = percussion/ | ||
+ | |\------- Vibrato enable (Mod) | ||
+ | \-------- Tremolo enable (Mod) | ||
+ | |||
+ | byte 1: | ||
+ | 76543210 | ||
+ | ||||\\\\- MULT (Car) | ||
+ | |||\----- Key Scale Rate enable (Car) | ||
+ | ||\------ Env Gen Type (0 = percussion/ | ||
+ | |\------- Vibrato enable (Car) | ||
+ | \-------- Tremolo enable (Car) | ||
+ | |||
+ | byte 2: | ||
+ | 76543210 | ||
+ | ||\\\\\\- Total Level, inverted (Mod) | ||
+ | \\------- Key Scale Level (Mod) | ||
+ | |||
+ | byte 3: | ||
+ | 76543210 | ||
+ | |||||\\\- Feedback level (Mod) | ||
+ | ||||\---- WF select (sine vs halfsine, Mod) | ||
+ | |||\----- WF select (sine vs halfsine, Car) | ||
+ | ||\------ Unused | ||
+ | \\------- Key Scale Level (Car) | ||
+ | |||
+ | byte 4: | ||
+ | 76543210 | ||
+ | ||||\\\\- Decay Rate, inverted (Mod) | ||
+ | \\\\----- Attack Rate, inverted (Mod) | ||
+ | |||
+ | byte 5: | ||
+ | 76543210 | ||
+ | ||||\\\\- Decay Rate, inverted (Car) | ||
+ | \\\\----- Attack Rate, inverted (Car) | ||
+ | |||
+ | byte 6: | ||
+ | 76543210 | ||
+ | ||||\\\\- Release Rate, inverted (Mod) | ||
+ | \\\\----- Sustain Level, inverted (Mod) | ||
+ | |||
+ | byte 7: | ||
+ | 76543210 | ||
+ | ||||\\\\- Release Rate, inverted (Car) | ||
+ | \\\\----- Sustain Level, inverted (Car) | ||
+ | </ |
vendor/yamaha/opl2.1552961835.txt.gz · Last modified: 2019/03/19 02:17 by cr1901