libsidplayfp
1.8.3
|
Functions | |
void | kinkedDac (double *dac, int dacLength, double _2R_div_R, bool term) |
Estimate DAC nonlinearity. The SID DACs are built up as R-2R ladder as follows:
n n-1 2 1 0 VGND | | | | | | Termination 2R 2R 2R 2R 2R 2R only for | | | | | | MOS 8580 Vo --R---R--...--R---R-- ---
All MOS 6581 DACs are missing a termination resistor at bit 0. This causes pronounced errors for the lower 4 - 5 bits (e.g. the output for bit 0 is actually equal to the output for bit 1), resulting in DAC discontinuities for the lower bits. In addition to this, the 6581 DACs exhibit further severe discontinuities for higher bits, which may be explained by a less than perfect match between the R and 2R resistors, or by output impedance in the NMOS transistors providing the bit voltages. A good approximation of the actual DAC output is achieved for 2R/R ~ 2.20.
The MOS 8580 DACs, on the other hand, do not exhibit any discontinuities. These DACs include the correct termination resistor, and also seem to have very accurately matched R and 2R resistors (2R/R = 2.00).
void reSIDfp::Dac::kinkedDac | ( | double * | dac, |
int | dacLength, | ||
double | _2R_div_R, | ||
bool | term | ||
) |
dac | an array to be filled with the resulting analog values |
dacLength | the dac array length |
_2R_div_R | nonlinearity parameter, 1.0 for perfect linearity. |
term | is the dac terminated by a 2R resistor? (6581 DACs are not) |