reSIDfp::WaveformCalculator Class Reference

`#include <WaveformCalculator.h>`

## Public Member Functions

matrix_t * | buildTable (ChipModel model)

## Static Public Member Functions

static WaveformCalculator * | getInstance ()

## Detailed Description

Combined waveform calculator for WaveformGenerator. By combining waveforms, the bits of each waveform are effectively short circuited. A zero bit in one waveform will result in a zero output bit (thus the infamous claim that the waveforms are AND'ed). However, a zero bit in one waveform may also affect the neighboring bits in the output.

Example:

                1 1
    Bit #       1 0 9 8 7 6 5 4 3 2 1 0
                -----------------------
    Sawtooth    0 0 0 1 1 1 1 1 1 0 0 0

    Triangle    0 0 1 1 1 1 1 1 0 0 0 0

    AND         0 0 0 1 1 1 1 1 0 0 0 0

    Output      0 0 0 0 1 1 1 0 0 0 0 0

Re-vectorized die photographs reveal the mechanism behind this behavior. Each waveform selector bit acts as a switch, which directly connects internal outputs into the waveform DAC inputs as follows:

- Noise outputs the shift register bits to DAC inputs as described above. Each output is also used as input to the next bit when the shift register is shifted.
- Pulse connects a single line to all DAC inputs. The line is connected to either 5V (pulse on) or 0V (pulse off) at bit 11, and ends at bit 0.
- Triangle connects the upper 11 bits of the (MSB EOR'ed) accumulator to the DAC inputs, so that DAC bit 0 = 0, DAC bit n = accumulator bit n - 1.
- Sawtooth connects the upper 12 bits of the accumulator to the DAC inputs, so that DAC bit n = accumulator bit n. Sawtooth blocks out the MSB from the EOR used to generate the triangle waveform.

We can thus draw the following conclusions:

- The shift register may be written to by combined waveforms.
- The pulse waveform interconnects all bits in combined waveforms via the pulse line.
- The combination of triangle and sawtooth interconnects neighboring bits of the sawtooth waveform.

## Member Function Documentation

matrix_t * reSIDfp::WaveformCalculator::buildTable | ( | ChipModel | model | ) |

Build waveform tables for use by WaveformGenerator.

Parameters

  model | Chip model to use

Returns
  Waveform table

WaveformCalculator * reSIDfp::WaveformCalculator::getInstance | ( |  | ) |

static

Get the singleton instance.

The documentation for this class was generated from the following files:

- WaveformCalculator.h
- WaveformCalculator.cpp