[sdiy] Sid Modular

Rainer Buchty buchty at cs.tum.edu
Sun Oct 19 19:47:24 CEST 2003


> 6) Because cloning it would be much more work (there were a *lot* of
> compromises that went into its design, and to recreate the flaws in a
> musically useful way would be a major PITA without direct help from its
> maker)

The maker already gave that help in form of an interview. The resid people
figured out the missing parts.

The waves are created using a 24-bit phase accumulator with 16-bit
frequency control. For sawtooth, the upper 12 bits (23-12) are directly
sent to the DAC. For triangle only bits 22-12 are sent to the DAC, bit 23
controls polarity (XORing bits 22-12 with 0x7ff). For pulse, the upper 12
bits are sent to a comparator which compares the current phase with a
12-bit reference (pulse width) value and outputs either a 1 or a 0 which
is sent to all 12 bits of the DAC.

Noise wave generation is well described in the resid-sources; it's a
23-bit pseudo-random sequence generator clocked by one of the intermediate
bits of the accumulator The upper 12 bits of the shift register are fed
into the DAC.

Hard-sync was done by clearing the accumulator of an oscillator based on
the accumulator MSB of the previous oscillator (thus, the hierarchy 1
syncs 2, 2 syncs 3 and 3 syncs 1). Ring modulation was done by sustituting
the accumulator MASB of an oscillator in the XOR function of the triangle
waveform generator with the accumulator MSB of the previous oscillator
(which is, why ringmod works only with the triangle waveform switched on).

Waveform mixing was done with transistors -- one per bit and waveform.

The envelope generator is a 8-bit up/down counter and switchable clock
rates, e.g. when triggered by the gate bit it counts from 0-255 using the
attack rate, then from 255 to sustain-level at decay rate. Once the
gate bit is cleared, the counter counts down to 0 at release rate. The
trick here was, that to get somewhat exponential behavior, the clock rate
is divided by two at distinct points to create "a pice-wise linear
approximation of an exponential" for decay and release rate. Attack rate
was linear. This model also explains, why you can always count down the
sustain level but never up while a note is played.

8-bit output of the envelope generator is fed in to a DAC; that DAC's
reference voltage is determined by the output of the waveform DAC.

The filter is a state-variable design built with FETs used as
voltage-controlled resistors for frequency control, a 4-bit weighted
resistor ladder for Q control. As far as I understand the interview,
NMOS buffers were used as operational amplifiers.

Here's what filter.h of the resid-package shows as the filter model:

     -----------------------------------------------
    |                                               |
    |            ---Rq--                            |
    |           |       |                           |
    |  ------------<A]-----R1---------              |
    | |                               |             |
    | |                        ---C---|      ---C---|
    | |                       |       |     |       |
    |  --R1--    ---R1--      |---Rs--|     |---Rs--|
    |        |  |       |     |       |     |       |
     ----R1--|-----[A>--|--R-----[A>--|--R-----[A>--|
             |          |             |             |
 vi -----R1--           |             |             |
                       vhp           vbp           vlp

 vi  - input voltage
 vhp - highpass output
 vbp - bandpass output
 vlp - lowpass output
 [A> - op-amp
 R1  - summer resistor
 Rq  - resistor array controlling resonance (4 resistors)
 R   - NMOS FET voltage controlled resistor controlling cutoff frequency
 Rs  - shunt resitor
 C   - capacitor

 SID integrator
 --------------

                                   V+
                                   |
                                   |
                              -----|
                             |     |
                             | ||--
                              -||
                   ---C---     ||->
                  |       |        |
                  |---Rs-----------|---- vo
                  |                |
                  |            ||--
 vi ----     -----|------------||
        |   ^     |            ||->
        |___|     |                |
        -----     |                |
          |       |                |
          |---R2--                 |
          |                        V-
          R1
          |
          |
          Vw

That model comes pretty close to the original SID sound, however, the
current "fights" on the emulation front is about the differences between
the various 6581 revisions and the 8580 (which seems to deliver a more
constant sound over the revisions) to be able to reproduce the truly
original sound of certain tunes. For a home-brew synth-based SID, that's a
minor concern I think.

Rainer



More information about the Synth-diy mailing list