There are four independently controllable "channels", or voices (there is actually 
only one physical audio output channel). They can be thought of as oscillators that are 
always on, and who's frequency and amplitude are controlled by specific memory 
registers. For example, each of the four channels has a frequency register, and those 
registers are often referred to as AUDF1-4 (read "any of the audio frequency registers, 1 
through 4"). Their addresses are $D200 (53760), $D202 (53762), $D204 (53764), and 
$D206 (53766). 
	Being an 8-bit machine, each register can hold a number between $00 and $FF 
($ signifies hexadecimal notation), or 0 and 255 decimal. This number is then divided 
into whichever clock is clocking that particular channel (a "divide-by-N" circuit), and that 
gives you the frequency of that channel (it's not a straight division, but I haven't figured 
out exactly what happens yet). So, if you put a 2 in there, the frequency will be higher 
than if you put a 100 in there because clock/2 is going to be a bigger number than 
clock/100. Also, there are much more noticeable jumps in "pitch" if you make small 
changes in frequency with small numbers (say from changing 3 to 4) than with larger 
numbers (say from changing 234 to 233). And the 8-bit pitch resolution in general only 
gives you a few octaves to reasonably work with.
	Along with the AUDF1-4 registers, there is also a group of registers that are 
referred to as AUDC1-4 (read "any of the audio control registers, 1 through 4"). These 
audio control registers are quite special because they control things like amplitude and 
"distortion". Their addresses are $D201 (53761), $D203 (53763), $D205 (53765), and 
$D207 (53767). Here is a bit diagram for an AUDC1-4:

bit number  7  6  5               4           	3  2  1  0
           distortion	       vol only	          volume

	The volume control for each channel is pretty straightforward. The lower 4 bits of 
the audio control register contain a 4-bit number ("nybble") that specifies the volume of 
the sound. A zero in these bits means zero volume, and a 15 means as loud as 
possible. I have found that the sum of the volumes of the four channels should not be 
higher than 32 or else you will get a buzzy sound and actually lose volume.
	The upper three bits control the "distortion" amount. It's not really distortion in the 
standard sense, it actually means something closer to "noise". The Atari uses 
"polynomial counters" which are essentially shift registers with a NAND gate thrown in 
there that feeds back into the input of the register. For example, with a 5-bit poly-
counter, bit 5 is sent as the output but it is also compared with bit 3 by a NAND gate. 
The output of the NAND gate is the next input at bit 1 as everything gets shifted.
	The poly-counters are aren't truly random because they will repeat their 
sequences after a certain amount of time, and this time depends on the number of bits 
employed in the poly-counter. But compared to the pure tone of the channels, they 
sound very noisy. The poly-counter's random pulses are compared with the pulses 
coming from the frequency register, and those that match up get through and nothing 
else does. This is how the noise is introduced into the tone of the channels. The 
following are the various settings for the top three bits of AUDC1-4 to determine the 
distortion amount after the frequency registers (x means it doesn't matter if this bit is set 
or not):
0 0 0  - select using 5 bit poly then 17 bit poly, div by 2
0 x 1 - select using 5-bit poly, then div by 2
0 1 0 - select using 5-bit then 4-bit polys, div by 2
1 0 0 - select uding 17-bit poly, div by 2
1 x 1 - div by 2 (no poly coutners i.e. pure tone)
1 1 0 select using 4 bit poly, div by 2

	Bit four of the AUDC1-4 is also very special because it is the "volume only bit". 
This means that when this bit is set, the volume value in AUDC1-4 bits 0-3 is sent 
directly to the television speaker and is not modulated with the frequency specified in 
the AUDF1-4 registers. For example, say I set AUDF1 to 10000000 (128) and I set 
AUDC1 to 00000000 (0). You would hear nothing. Then by setting the bottom four bits in 
AUDC1 (setting AUDC1 to 00001111), you will hear a relatively loud tone at a frequency 
of clock-speed/AUDF1(128). Then if I set the volume only bit in AUDC1 (set AUDC1 to 
00011111), you will again here nothing. This is because the value of the lower four bits 
(the volume bits) in AUDC1 is bring sent straight to the tv speaker. If I reset these bits 
(set AUDC1 to 00010000), you will hear a single "pop" as the tv speaker cone moves 
back into a resting position.
	This "volume only" mode is very important for two reasons. Because you have 
direct control over the position of the speaker cone (thought only to a 4-bit resolution), 
with assembly language you can move it back and forth quickly enough to create 
different waves than just the pulse (1's and 0's) waves that the AUDF1-4's generate. 
Simple waves such as sine waves and sawtooth waves can be convincingly replicated. 
Secondly, you can also use it to play back stored data (i.e. samples), but once again 
only at a 4-bit resolution.
	There are other registers and tricks of importance, such as inserting high-pass 
filters, joining two channels together for 16-bit pitch resolution, or clocking the channels 
with different clocks to get different pitch ranges. There are also hardware hacks such as 
getting three independent sound outputs. As you can see, the Atari 800xl is just a friggin 
powerhouse of electronic sound and music potential, and I think represents the future of 
audio generation technology.


by,
Brentt Dundass