The Yamaha YM3812 also known as the OPL2 (OPL is an acronym for FM Operator Type-L) is a sound chip (i.e. integrated circuit) created by Yamaha Corporation and famous for its wide use in IBM PC-based sound cards such as the AdLib and Sound Blaster.
It is backwards compatible with the OPL aka YM3526, to which it is very similar - in fact, it only adds 3 new waveforms. An upgraded version of the OPL2, the OPL3 aka YMF262, was also popular in later sound cards such as the Soundblaster 16. Another related chip is the YM2413 (OPLL), which is a cut down version.
The circuit has 244 different write-only registers. It can produce 9 channels of sound, each made of two oscillators. Each oscillator can produce sine waves which may also be modified into 3 other waveforms - the negative part of the sine can be muted or inverted, and pseudo sawtooth waves (1/4 sine waves upward only with silent sections in between) can also be produced. This odd way of producing waveforms give the YM3812 a characteristic sound. Each wave generator has its own ADSR envelope generator. Its main method of synthesis is Frequency modulation synthesis, done by phase modulation of the phase of one of the channel's oscillators by the output of the other.
Overview of a channel's registers:
For the whole channel:
- Main frequency (10 bits)
- Octave (3 bits)
- Note on/off
- Synthesis mode (FM or just additive)
- Feedback (0-7, the modulator modulating itself)
For each one of the 2 oscillators:
- Frequency multiply (can be set to 1/2, 1 to 10, 12 or 15)
- Waveform (Sine, half-sine, absolute-sine, quarter-sine)
- Volume (0-63, logarithmic)
- Attack, Decay, Sustain, Release (4 bits each, logarithmic)
- Tremolo (On or off)
- Vibrato (On or off)
- Sustain (On or off)
- Envelope scaling per key (On or off)
- Volume scaling per key (0-3)
There are also a few parameters that can be set for the whole chip:
- Vibrato depth
- Tremolo depth
- Percussion mode (uses 3 channels to provide 5 percussion sounds)
- Composite sine mode (very rarely used; doesn't work on the OPL3)
The internal operation of the chip is completely digital. The sound is generated using a form of direct digital synthesis and is sent to an external digital-to-analog converter (DAC), YM3014B, as a stream of floating point numbers at a sampling frequency of approximately 49720 Hz. Scaling the output of an oscillator to a wanted volume would normally be done by multiplication, but the YM3812 avoids multiplications by operating on log-transformed signals, which reduces multiplications into computationally cheaper additions. A quarter of the log-transformed sine waveform is stored as a sampled approximation in a 256-word read-only memory (ROM) table. The rest of the waveform can be constructed by employing the symmetry properties of the sine. An exponential function stored in another 256-word ROM is used to convert the logarithmic scale signal to linear scale when needed, for example in preparation to summation of the channels for output.