From 4db2ab96aec85719362de451c72fa751978646a8 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 2 May 2022 18:15:51 -0500 Subject: [PATCH] document (NON-WORKING) extended op param effects --- papers/doc/7-systems/opl.md | 34 +++++++++++ papers/doc/7-systems/opll.md | 24 ++++++++ papers/doc/7-systems/opz.md | 100 ++++++++++++++++++++++++++++++++ papers/doc/7-systems/ym2151.md | 38 ++++++++++++ papers/doc/7-systems/ym2610.md | 40 +++++++++++++ papers/doc/7-systems/ym2610b.md | 40 +++++++++++++ papers/doc/7-systems/ym2612.md | 40 +++++++++++++ 7 files changed, 316 insertions(+) create mode 100644 papers/doc/7-systems/opz.md diff --git a/papers/doc/7-systems/opl.md b/papers/doc/7-systems/opl.md index b019e3f98..056591a6d 100644 --- a/papers/doc/7-systems/opl.md +++ b/papers/doc/7-systems/opl.md @@ -44,3 +44,37 @@ afterwards everyone moved to Windows and software mixed PCM streaming... - only in 4-op mode (OPL3). - `1Dxx`: set attack of operator 4. - only in 4-op mode (OPL3). +- `2Axy`: set waveform of operator. + - `x` is the operator (1-4; last 2 operators only in 4-op mode). a value of 0 means "all operators". + - `y` is the value. + - only in OPL2 or higher. +- `30xx`: enable envelope hard reset. + - this works by inserting a quick release and tiny delay before a new note. +- `50xy`: set AM of operator. + - `x` is the operator (1-4; last 2 operators only in 4-op mode). a value of 0 means "all operators". + - `y` determines whether AM is on. +- `51xy` set SL of operator. + - `x` is the operator (1-4; last 2 operators only in 4-op mode). a value of 0 means "all operators". + - `y` is the value. +- `52xy` set RR of operator. + - `x` is the operator (1-4; last 2 operators only in 4-op mode). a value of 0 means "all operators". + - `y` is the value. +- `53xy`: set VIB of operator. + - `x` is the operator (1-4; last 2 operators only in 4-op mode). a value of 0 means "all operators". + - `y` determines whether VIB is on. +- `54xy` set KSL of operator. + - `x` is the operator (1-4; last 2 operators only in 4-op mode). a value of 0 means "all operators". + - `y` is the value. +- `55xy` set SUS of operator. + - `x` is the operator (1-4; last 2 operators only in 4-op mode). a value of 0 means "all operators". + - `y` determines whether SUS is on. +- `56xx`: set DR of all operators. +- `57xx`: set DR of operator 1. +- `58xx`: set DR of operator 2. +- `58xx`: set DR of operator 3. + - only in 4-op mode (OPL3). +- `58xx`: set DR of operator 4. + - only in 4-op mode (OPL3). +- `5Bxy`: set KSR of operator. + - `x` is the operator (1-4; last 2 operators only in 4-op mode). a value of 0 means "all operators". + - `y` determines whether KSR is on. \ No newline at end of file diff --git a/papers/doc/7-systems/opll.md b/papers/doc/7-systems/opll.md index 2e92171ba..4e91c137d 100644 --- a/papers/doc/7-systems/opll.md +++ b/papers/doc/7-systems/opll.md @@ -37,3 +37,27 @@ the YM2413 is equipped with the following features: - `19xx`: set attack of all operators. - `1Axx`: set attack of operator 1. - `1Bxx`: set attack of operator 2. +- `50xy`: set AM of operator. + - `x` is the operator (1-2). a value of 0 means "all operators". + - `y` determines whether AM is on. +- `51xy` set SL of operator. + - `x` is the operator (1-2). a value of 0 means "all operators". + - `y` is the value. +- `52xy` set RR of operator. + - `x` is the operator (1-2). a value of 0 means "all operators". + - `y` is the value. +- `53xy`: set VIB of operator. + - `x` is the operator (1-2). a value of 0 means "all operators". + - `y` determines whether VIB is on. +- `54xy` set KSL of operator. + - `x` is the operator (1-2). a value of 0 means "all operators". + - `y` is the value. +- `55xy` set EGT of operator. + - `x` is the operator (1-2). a value of 0 means "all operators". + - `y` determines whether EGT is on. +- `56xx`: set DR of all operators. +- `57xx`: set DR of operator 1. +- `58xx`: set DR of operator 2. +- `5Bxy`: set KSR of operator. + - `x` is the operator (1-2). a value of 0 means "all operators". + - `y` determines whether KSR is on. \ No newline at end of file diff --git a/papers/doc/7-systems/opz.md b/papers/doc/7-systems/opz.md new file mode 100644 index 000000000..dd69c85c8 --- /dev/null +++ b/papers/doc/7-systems/opz.md @@ -0,0 +1,100 @@ +# Yamaha OPZ (YM2414) + +this is the YM2151's little-known successor, used in the Yamaha TX81Z and a few other Yamaha synthesizers. oh, and the Korg Z3 too. + +it adds these features on top of the YM2151: +- 8 waveforms (but they're different from the OPL ones) +- per-channel (possibly) linear volume control separate from TL +- increased multiplier precision (in 1/16ths) +- 4-step envelope generator shift (minimum TL) +- another LFO +- no per-operator key on/off +- fixed frequency mode per operator (kind of like OPN family's extended channel mode but with a bit less precision and for all 8 channels) +- "reverb" effect (actually extends release) + +unlike the YM2151, this chip is officially undocumented. very few efforts have been made to study the chip and document it... +therefore emulation of this chip in Furnace is incomplete and uncertain. + +no plans have been made for TX81Z MIDI passthrough, because: +- Furnace works with register writes rather than MIDI commands +- the MIDI protocol is slow (would not be enough). +- the TX81Z is very slow to process a note on/off or parameter change event. +- the TL range has been reduced to 0-99, but the chip goes from 0-127. + +# effects + +- `10xx`: set noise frequency of channel 8 operator 4. 00 disables noise while 01 to 20 enables it. +- `11xx`: set feedback of channel. +- `12xx`: set operator 1 level. +- `13xx`: set operator 2 level. +- `14xx`: set operator 3 level. +- `15xx`: set operator 4 level. +- `16xy`: set multiplier of operator. + - `x` is the operator (1-4). + - `y` is the mutliplier. +- `17xx`: set LFO speed. +- `18xx`: set LFO waveform. `xx` may be one of the following: + - `00`: saw + - `01`: square + - `02`: triangle + - `03`: noise +- `19xx`: set attack of all operators. +- `1Axx`: set attack of operator 1. +- `1Bxx`: set attack of operator 2. +- `1Cxx`: set attack of operator 3. +- `1Dxx`: set attack of operator 4. +- `28xy`: set reverb of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `29xy`: set EG shift of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `2Axy`: set waveform of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `2Fxx`: enable envelope hard reset. + - this works by inserting a quick release and tiny delay before a new note. +- `3xyy`: set fixed frequency of operator 1/2. + - `x` is the block (0-7 for operator 1; 8-F for operator 2). + - `y` is the frequency. fixed frequency mode will be disabled if this is less than 8. + - the actual frequency is: `y*(2^x)`. +- `4xyy`: set fixed frequency of operator 3/4. + - `x` is the block (0-7 for operator 3; 8-F for operator 4). + - `y` is the frequency. fixed frequency mode will be disabled if this is less than 8. + - the actual frequency is: `y*(2^x)`. +- `50xy`: set AM of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` determines whether AM is on. +- `51xy` set SL of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `52xy` set RR of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `53xy` set DT of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value: + - 0: +0 + - 1: +1 + - 2: +2 + - 3: +3 + - 4: -0 + - 5: -3 + - 6: -2 + - 7: -1 +- `54xy` set RS of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `55xy` set DT2 of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `56xx`: set DR of all operators. +- `57xx`: set DR of operator 1. +- `58xx`: set DR of operator 2. +- `59xx`: set DR of operator 3. +- `5Axx`: set DR of operator 4. +- `5Bxx`: set D2R/SR of all operators. +- `5Cxx`: set D2R/SR of operator 1. +- `5Dxx`: set D2R/SR of operator 2. +- `5Exx`: set D2R/SR of operator 3. +- `5Fxx`: set D2R/SR of operator 4. \ No newline at end of file diff --git a/papers/doc/7-systems/ym2151.md b/papers/doc/7-systems/ym2151.md index 69eba0fb3..2291088e1 100644 --- a/papers/doc/7-systems/ym2151.md +++ b/papers/doc/7-systems/ym2151.md @@ -26,3 +26,41 @@ it also was present on several pinball machines and synthesizers of the era, and - `1Bxx`: set attack of operator 2. - `1Cxx`: set attack of operator 3. - `1Dxx`: set attack of operator 4. +- `30xx`: enable envelope hard reset. + - this works by inserting a quick release and tiny delay before a new note. +- `50xy`: set AM of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` determines whether AM is on. +- `51xy` set SL of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `52xy` set RR of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `53xy` set DT of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value: + - 0: +0 + - 1: +1 + - 2: +2 + - 3: +3 + - 4: -0 + - 5: -3 + - 6: -2 + - 7: -1 +- `54xy` set RS of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `55xy` set DT2 of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `56xx`: set DR of all operators. +- `57xx`: set DR of operator 1. +- `58xx`: set DR of operator 2. +- `59xx`: set DR of operator 3. +- `5Axx`: set DR of operator 4. +- `5Bxx`: set D2R/SR of all operators. +- `5Cxx`: set D2R/SR of operator 1. +- `5Dxx`: set D2R/SR of operator 2. +- `5Exx`: set D2R/SR of operator 3. +- `5Fxx`: set D2R/SR of operator 4. \ No newline at end of file diff --git a/papers/doc/7-systems/ym2610.md b/papers/doc/7-systems/ym2610.md index 4515fde23..ec405efef 100644 --- a/papers/doc/7-systems/ym2610.md +++ b/papers/doc/7-systems/ym2610.md @@ -57,3 +57,43 @@ its soundchip is a 4-in-1: 4ch 4-op FM, YM2149 (AY-3-8910 clone) and 2 different - `x` is the numerator. - `y` is the denominator. - if `x` or `y` are 0 this will disable auto-envelope mode. +- `30xx`: enable envelope hard reset. + - this works by inserting a quick release and tiny delay before a new note. +- `50xy`: set AM of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` determines whether AM is on. +- `51xy` set SL of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `52xy` set RR of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `53xy` set DT of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value: + - 0: +0 + - 1: +1 + - 2: +2 + - 3: +3 + - 4: -0 + - 5: -3 + - 6: -2 + - 7: -1 +- `54xy` set RS of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `55xy` set SSG-EG of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value (0-8). + - values between 0 and 7 set SSG-EG. + - value 8 disables it. +- `56xx`: set DR of all operators. +- `57xx`: set DR of operator 1. +- `58xx`: set DR of operator 2. +- `59xx`: set DR of operator 3. +- `5Axx`: set DR of operator 4. +- `5Bxx`: set D2R/SR of all operators. +- `5Cxx`: set D2R/SR of operator 1. +- `5Dxx`: set D2R/SR of operator 2. +- `5Exx`: set D2R/SR of operator 3. +- `5Fxx`: set D2R/SR of operator 4. \ No newline at end of file diff --git a/papers/doc/7-systems/ym2610b.md b/papers/doc/7-systems/ym2610b.md index e251122cd..17f274559 100644 --- a/papers/doc/7-systems/ym2610b.md +++ b/papers/doc/7-systems/ym2610b.md @@ -56,3 +56,43 @@ it is backward compatible with the original chip. - `x` is the numerator. - `y` is the denominator. - if `x` or `y` are 0 this will disable auto-envelope mode. +- `30xx`: enable envelope hard reset. + - this works by inserting a quick release and tiny delay before a new note. +- `50xy`: set AM of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` determines whether AM is on. +- `51xy` set SL of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `52xy` set RR of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `53xy` set DT of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value: + - 0: +0 + - 1: +1 + - 2: +2 + - 3: +3 + - 4: -0 + - 5: -3 + - 6: -2 + - 7: -1 +- `54xy` set RS of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `55xy` set SSG-EG of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value (0-8). + - values between 0 and 7 set SSG-EG. + - value 8 disables it. +- `56xx`: set DR of all operators. +- `57xx`: set DR of operator 1. +- `58xx`: set DR of operator 2. +- `59xx`: set DR of operator 3. +- `5Axx`: set DR of operator 4. +- `5Bxx`: set D2R/SR of all operators. +- `5Cxx`: set D2R/SR of operator 1. +- `5Dxx`: set D2R/SR of operator 2. +- `5Exx`: set D2R/SR of operator 3. +- `5Fxx`: set D2R/SR of operator 4. \ No newline at end of file diff --git a/papers/doc/7-systems/ym2612.md b/papers/doc/7-systems/ym2612.md index b7dd8a16e..c32521f2c 100644 --- a/papers/doc/7-systems/ym2612.md +++ b/papers/doc/7-systems/ym2612.md @@ -25,3 +25,43 @@ one of two chips that powered the Sega Genesis. It is a six-channel, four-operat - `1Bxx`: set attack of operator 2. - `1Cxx`: set attack of operator 3. - `1Dxx`: set attack of operator 4. +- `30xx`: enable envelope hard reset. + - this works by inserting a quick release and tiny delay before a new note. +- `50xy`: set AM of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` determines whether AM is on. +- `51xy` set SL of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `52xy` set RR of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `53xy` set DT of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value: + - 0: +0 + - 1: +1 + - 2: +2 + - 3: +3 + - 4: -0 + - 5: -3 + - 6: -2 + - 7: -1 +- `54xy` set RS of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value. +- `55xy` set SSG-EG of operator. + - `x` is the operator (1-4). a value of 0 means "all operators". + - `y` is the value (0-8). + - values between 0 and 7 set SSG-EG. + - value 8 disables it. +- `56xx`: set DR of all operators. +- `57xx`: set DR of operator 1. +- `58xx`: set DR of operator 2. +- `59xx`: set DR of operator 3. +- `5Axx`: set DR of operator 4. +- `5Bxx`: set D2R/SR of all operators. +- `5Cxx`: set D2R/SR of operator 1. +- `5Dxx`: set D2R/SR of operator 2. +- `5Exx`: set D2R/SR of operator 3. +- `5Fxx`: set D2R/SR of operator 4. \ No newline at end of file