libsidplayfp
1.0.3
|
#include <WaveformGenerator.h>
Public Member Functions | |
void | setWaveformModels (array< short > *models) |
void | setChipModel (ChipModel chipModel) |
void | clock () |
void | synchronize (WaveformGenerator *syncDest, const WaveformGenerator *syncSource) const |
WaveformGenerator () | |
void | writeFREQ_LO (unsigned char freq_lo) |
void | writeFREQ_HI (unsigned char freq_hi) |
void | writePW_LO (unsigned char pw_lo) |
void | writePW_HI (unsigned char pw_hi) |
void | writeCONTROL_REG (unsigned char control) |
void | reset () |
short | output (const WaveformGenerator *ringModulator) |
unsigned char | readOSC () const |
int | readAccumulator () const |
int | readFreq () const |
bool | readTest () const |
bool | readSync () const |
A 24 bit accumulator is the basis for waveform generation. FREQ is added to the lower 16 bits of the accumulator each cycle. The accumulator is set to zero when TEST is set, and starts counting when TEST is cleared. The noise waveform is taken from intermediate bits of a 23 bit shift register. This register is clocked by bit 19 of the accumulator.
Java port of the reSID 1.0 waveformgenerator by Dag Lem.
|
inline |
Constructor.
RESID_INLINE void reSIDfp::WaveformGenerator::clock | ( | ) |
SID clocking - 1 cycle.
RESID_INLINE short reSIDfp::WaveformGenerator::output | ( | const WaveformGenerator * | ringModulator | ) |
12-bit waveform output.
ringModulator | The oscillator ring-modulating me. |
|
inline |
Read accumulator value.
|
inline |
Read freq value.
|
inline |
Read OSC3 value (6581, not latched/delayed version)
|
inline |
Read sync value.
|
inline |
Read test value.
void reSIDfp::WaveformGenerator::reset | ( | ) |
SID reset.
void reSIDfp::WaveformGenerator::setChipModel | ( | ChipModel | chipModel | ) |
Set the chip model. This determines the type of the analog DAC emulation: 8580 is perfectly linear while 6581 is nonlinear.
chipModel |
void reSIDfp::WaveformGenerator::synchronize | ( | WaveformGenerator * | syncDest, |
const WaveformGenerator * | syncSource | ||
) | const |
Synchronize oscillators. This must be done after all the oscillators have been clock()'ed, so that they are in the same state.
syncDest | The oscillator I am syncing |
syncSource | The oscillator syncing me. |
void reSIDfp::WaveformGenerator::writeCONTROL_REG | ( | unsigned char | control | ) |
Register functions.
control | control register value |
|
inline |
Register functions.
freq_hi | high 8 bits of frequency |
|
inline |
Register functions.
freq_lo | low 8 bits of frequency |
|
inline |
Register functions.
pw_hi | high 8 bits of pulse width |
|
inline |
Register functions.
The original form was (acc >> 12) >= pw, where truth value is not affected by the contents of the low 12 bits. Therefore the lowest bits must be zero in the new formulation acc >= (pw << 12).
pw_lo | low 8 bits of pulse width |