2022-03-22 05:58:07 +00:00
# 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.
2023-06-14 09:17:42 +00:00
however, it also had a [drums mode ](opll.md ), and later chips in the series added more waveforms (than just the typical sine) and even a 4-operator mode.
2022-03-22 05:58:07 +00:00
2022-03-26 18:55:20 +00:00
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.
2022-03-22 05:58:07 +00:00
2022-03-26 18:55:20 +00:00
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.
2022-03-22 05:58:07 +00:00
later Creative would borrow the chip to make the Sound Blaster, and totally destroyed AdLib's dominance.
2022-03-26 18:55:20 +00:00
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.
2022-03-22 05:58:07 +00:00
2022-03-26 18:55:20 +00:00
afterwards everyone moved to Windows and software mixed PCM streaming...
2022-03-22 05:58:07 +00:00
# effects
2023-06-25 07:05:30 +00:00
- `10xx` : **set AM depth.** the following values are accepted:
- `0` : 1dB (shallow)
- `1` : 4.8dB (deep)
2022-03-22 05:58:07 +00:00
- this effect applies to all channels.
2023-06-25 07:05:30 +00:00
- `11xx` : **set feedback of channel.**
- `12xx` : **set operator 1 level.**
- `13xx` : **set operator 2 level.**
- `14xx` : **set operator 3 level.**
2022-03-22 05:58:07 +00:00
- only in 4-op mode (OPL3).
2023-06-25 07:05:30 +00:00
- `15xx` : **set operator 4 level.**
2022-03-22 05:58:07 +00:00
- only in 4-op mode (OPL3).
2023-06-25 07:05:30 +00:00
- `16xy` : **sSet multiplier of operator.**
2022-03-22 05:58:07 +00:00
- `x` is the operator (1-4; last 2 operators only in 4-op mode).
2023-05-20 22:21:51 +00:00
- `y` is the multiplier.
2023-06-25 07:05:30 +00:00
- `17xx` : **set vibrato depth.**
- `0` : normal
- `1` : double
2022-03-22 05:58:07 +00:00
- this effect applies to all channels.
2023-06-25 07:05:30 +00:00
- `18xx` : **toggle drums mode.**
- `0` disables it and `1` enables it.
2022-10-16 05:53:05 +00:00
- only in drums chip.
2023-06-25 07:05:30 +00:00
- `19xx` : **set attack of all operators.**
- `1Axx` : **set attack of operator 1.**
- `1Bxx` : **set attack of operator 2.**
- `1Cxx` : **set attack of operator 3.**
2022-03-22 05:58:07 +00:00
- only in 4-op mode (OPL3).
2023-06-25 07:05:30 +00:00
- `1Dxx` : **set attack of operator 4.**
2022-03-22 05:58:07 +00:00
- only in 4-op mode (OPL3).
2023-06-25 07:05:30 +00:00
- `2Axy` : **set waveform of operator.**
- `x` is the operator from 1 to 4; the last 2 operators only work in 4-op mode. a value of `0` means "all operators".
2022-05-02 23:15:51 +00:00
- `y` is the value.
- only in OPL2 or higher.
2023-06-25 07:05:30 +00:00
- `30xx` : **enable envelope hard reset.**
2022-05-02 23:15:51 +00:00
- this works by inserting a quick release and tiny delay before a new note.
2023-06-25 07:05:30 +00:00
- `50xy` : **set AM of operator.**
- `x` is the operator from 1 to 4; the last 2 operators only work in 4-op mode. a value of `0` means "all operators".
2022-05-02 23:15:51 +00:00
- `y` determines whether AM is on.
2023-06-25 07:05:30 +00:00
- `51xy` : **set SL of operator.**
- `x` is the operator from 1 to 4; the last 2 operators only work in 4-op mode. a value of `0` means "all operators".
2022-05-02 23:15:51 +00:00
- `y` is the value.
2023-06-25 07:05:30 +00:00
- `52xy` : **set RR of operator.**
- `x` is the operator from 1 to 4; the last 2 operators only work in 4-op mode. a value of `0` means "all operators".
2022-05-02 23:15:51 +00:00
- `y` is the value.
2023-06-25 07:05:30 +00:00
- `53xy` : **set VIB of operator.**
- `x` is the operator from 1 to 4; the last 2 operators only work in 4-op mode. a value of `0` means "all operators".
2022-05-02 23:15:51 +00:00
- `y` determines whether VIB is on.
2023-06-25 07:05:30 +00:00
- `54xy` : **set KSL of operator.**
- `x` is the operator from 1 to 4; the last 2 operators only work in 4-op mode. a value of `0` means "all operators".
2022-05-02 23:15:51 +00:00
- `y` is the value.
2023-06-25 07:05:30 +00:00
- `55xy` : **set SUS of operator.**
- `x` is the operator from 1 to 4; the last 2 operators only work in 4-op mode. a value of `0` means "all operators".
2022-05-02 23:15:51 +00:00
- `y` determines whether SUS is on.
2023-06-25 07:05:30 +00:00
- `56xx` : **set DR of all operators.**
- `57xx` : **set DR of operator 1.**
- `58xx` : **set DR of operator 2.**
- `59xx` : **set DR of operator 3.**
2022-05-02 23:15:51 +00:00
- only in 4-op mode (OPL3).
2023-06-25 07:05:30 +00:00
- `5Axx` : **set DR of operator 4.**
2022-05-02 23:15:51 +00:00
- only in 4-op mode (OPL3).
2023-06-25 07:05:30 +00:00
- `5Bxy` : **set KSR of operator.**
- `x` is the operator from 1 to 4; the last 2 operators only work in 4-op mode. a value of `0` means "all operators".
2023-06-14 09:17:42 +00:00
- `y` determines whether KSR is on.