mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-27 23:13:01 +00:00
80 lines
No EOL
3.7 KiB
Markdown
80 lines
No EOL
3.7 KiB
Markdown
# Yamaha OPL
|
|
|
|
a series of FM sound chips which were very popular in DOS land. it was so popular that even Yamaha made a logo for it!
|
|
|
|
essentially a downgraded version of Yamaha's other FM chips, with only 2 operators per channel.
|
|
however, it also had a drums mode, and later chips in the series added more waveforms (than just the typical sine) and even a 4-operator mode.
|
|
|
|
the original OPL (Yamaha YM3526) was present as an expansion for the Commodore 64 and MSX computers (erm, a variant of it). it only had 9 two-operator channels and drums mode.
|
|
|
|
its successor, the OPL2 (Yamaha YM3812), added 3 more waveforms and was one of the more popular chips because it was present on the AdLib card for PC.
|
|
later Creative would borrow the chip to make the Sound Blaster, and totally destroyed AdLib's dominance.
|
|
|
|
the OPL3 (Yamaha YMF262) added 9 more channels, 4 more waveforms, rudimentary 4-operator mode (pairing up to 12 channels to make up to six 4-operator channels), quadraphonic output (sadly Furnace only supports stereo) and some other things.
|
|
|
|
afterwards everyone moved to Windows and software mixed PCM streaming...
|
|
|
|
# effects
|
|
|
|
- 10xx: set AM depth. the following values are accepted:
|
|
- 0: 1dB (shallow)
|
|
- 1: 4.8dB (deep)
|
|
- this effect applies to all channels.
|
|
- `11xx`: set feedback of channel.
|
|
- `12xx`: set operator 1 level.
|
|
- `13xx`: set operator 2 level.
|
|
- `14xx`: set operator 3 level.
|
|
- only in 4-op mode (OPL3).
|
|
- `15xx`: set operator 4 level.
|
|
- only in 4-op mode (OPL3).
|
|
- `16xy`: set multiplier of operator.
|
|
- `x` is the operator (1-4; last 2 operators only in 4-op mode).
|
|
- `y` is the mutliplier.
|
|
- 17xx: set vibrato depth. the following values are accepted:
|
|
- 0: normal
|
|
- 1: double
|
|
- this effect applies to all channels.
|
|
- `18xx`: toggle drums mode.
|
|
- 0 disables it and 1 enables it.
|
|
- only in drums system.
|
|
- `19xx`: set attack of all operators.
|
|
- `1Axx`: set attack of operator 1.
|
|
- `1Bxx`: set attack of operator 2.
|
|
- `1Cxx`: set attack of operator 3.
|
|
- 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.
|
|
- `59xx`: set DR of operator 3.
|
|
- only in 4-op mode (OPL3).
|
|
- `5Axx`: 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. |