Changes
* [[SP0256 Pin-Outs]]
== Voice Generator==
The voice generator relies on the Amplitude, Pitch, F0..F5, and B0..B5 registers, which are processed like so:
Another important register is the Repeat counter, which indicates when the next opcode shall be executed (and which may then load new values into the above registers).
== Sample Rate and Repeat Timings==
The SP0256 is (usually) driven by a 3.12MHz oscillator, and it uses 7bit PWM output. So the sample rate should be 3.12MHz/128, probably further divided by two:
That (guessed/undocumented) samplerate does more or less match the specifications that say that (unwanted PWM-) noise is above 10kHz, and that wanted pitch can be up to 5kHz. And the repeat timings do more or less match the timings shown in the allophone list.
== Amplitude/Pitch/Repeat==
The 8bit amplitude register defines the volume in floating point form,
Note that (aside from noise) the AL2 ROM uses only one pitch value: 5Bh aka 91 decimal (meaning that all vowels are using the same base frequency, and they differ only by using different filter settings).
== Amplitude/Noise/Repeat==
Noise is activated when setting pitch=0. The timings are then same as when pitch=64, but instead of outputting HIGH and NULL levels, the hardware does now randomly output HIGH or LOW levels, for example, pitch=0 and repeat=5:
The exact random algorithm is unknown (probably some shift/xor stuff?), the random levels seem to be output on each sample (not only on the first sample of a repeat). Like normal pitch, the noise is passed to the 6 filters.
== Pause/Repeat==
The pause command sets amplitude=0. The timings are then same as when pitch=64, but the output is always NULL, for example, pause and repeat=5:
Pause does reset the filters to 0, so the silence is not affected by filters.
== Digital Filters==
As shown above, the amplitude/pitch/noise output is passed through six digital filter stages (using the F0..F5 and B0..B5 registers), each stage looks like so: