Paula: The Amiga's Voice
Four channels of sample-based audio
Paula delivered four independent 8-bit audio channels with DMA playback—giving the Amiga the most capable sound system of its generation.
Paula was years ahead of its time. While other computers synthesised sound, the Amiga played back digital samples directly from memory. Four independent channels, stereo output, and variable sample rates enabled music and sound effects that rivalled dedicated audio hardware.
Fast facts
- Chip: 8364 (unchanged across OCS/ECS/AGA).
- Channels: 4 independent voices.
- Sample depth: 8-bit signed.
- Sample rate: variable, up to ~28 kHz per channel.
- Output: stereo — channels 1 and 2 left, 0 and 3 right.
Not only a sound chip
Paula is filed under audio, and the Hardware Reference Manual introduces the custom chips as providing “superior color graphics, digital audio, and high-performance interrupt and I/O handling”. The last of those is Paula’s too. The same chip carries the floppy disk controller, the serial port, and the interrupt hardware.
The disk controller is the part worth reading in full, because it explains something about the Amiga that the audio does not:
It can DMA an entire track of raw MFM data into memory in a single disk revolution. Special registers allow the CPU to synchronize with specific data, or read input a byte at a time.
Raw MFM, a whole track at a time. The controller is not reading files, or even sectors — it is capturing the flux transitions off the surface and leaving the software to make sense of them. Commodore lists the consequence:
The controller can read and write virtually any double-density MFM encoded disk, including the Amiga V1.0 format, IBM PC (MS-DOS) 5.25“, IBM PC (MS-DOS) 3.5“ and most CP/M formatted disks. The controller has provisions for reading and writing most disk using the Group Coded Recording (GCR) method, including Apple II disks. With motor speed tricks, the controller can read and write Commodore 1541/1571 format diskettes.
That last sentence is a small marvel. The 1541 writes at four different bit rates depending on which zone of the disk it is on, because its motor runs at a constant 300 rpm. The Amiga’s remedy, per Commodore’s own phrase, is to move the other variable: change the motor speed and let the surface pass the head at whatever rate makes a foreign disk’s bits arrive evenly. The manual states the capability and the trick; the reading of why the trick is necessary is this Vault’s.
It is reasonable to connect this to the depth of Amiga copy protection, though
the manual does not: when the hardware hands software a whole raw track,
protection can live in the shape of the data rather than its content — sync marks
in unexpected places, tracks of non-standard length, deliberate weak bits. What
the manual does supply is the baseline such schemes depart from, naming $4489
as “the magic MFM sync mark value”.
One channel modulating another
The four channels are not only four voices. Two can be attached, so that one supplies modulation data for the other:
You can modulate a channel’s frequency or amplitude, or do both types of modulation on a channel at the same time. Amplitude modulation affects the volume of the waveform. It is often used to produce vibrato or tremolo effects. Frequency modulation affects the period of the waveform.
The ADKCON attach bits name the pairings explicitly — “use audio channel 0 to
modulate period of channel 1”, “use audio channel 2 to modulate volume” of
channel 3. A tracker that spends all four channels on notes is using the chip at
its simplest; spending two to shape the other two is what the hardware was built
for.
Audio architecture
| Channel | Stereo | Typical use |
|---|---|---|
| 0 | Left | Melody/effects |
| 1 | Right | Melody/effects |
| 2 | Right | Bass/drums |
| 3 | Left | Bass/drums |
DMA playback
Paula plays samples without CPU intervention:
- Set sample start address and length.
- Set period (sample rate).
- Set volume.
- Enable DMA—Paula handles the rest.
Sample rate calculation
The period register determines playback rate. Each Paula timer tick advances one sample:
Sample rate = Clock / Period
PAL clock: 3,546,895 Hz
NTSC clock: 3,579,545 Hz
| Period | PAL rate | Note equivalent |
|---|---|---|
| 124 | 28,604 Hz | maximum DMA-driven rate |
| 214 | 16,575 Hz | — |
| 428 | 8,287 Hz | C-2 base (ProTracker MOD reference) |
| 856 | 4,143 Hz | C-1 |
Channel registers
Each channel has dedicated registers:
| Register | Offset | Purpose |
|---|---|---|
| AUDxLCH | +$00 | Sample address high |
| AUDxLCL | +$02 | Sample address low |
| AUDxLEN | +$04 | Sample length (words) |
| AUDxPER | +$06 | Period (sample rate) |
| AUDxVOL | +$08 | Volume (0-64) |
| AUDxDAT | +$0A | Sample data (direct write) |
Base addresses: $DFF0A0 (ch0), $DFF0B0 (ch1), $DFF0C0 (ch2), $DFF0D0 (ch3).
Volume control
| Value | Level |
|---|---|
| 0 | Silent |
| 64 | Maximum |
| >64 | Wraps (avoid) |
Audio modulation
Paula supports hardware modulation between adjacent channel pairs (channel 0 modulates channel 1, channel 2 modulates channel 3). Mode is selected via ADKCON bits — set USE0V1/USE2V3 for amplitude modulation, USE0P1/USE2P3 for period modulation.
| Mode | ADKCON bit | Effect |
|---|---|---|
| AM | USE0V1 / USE2V3 | Channel N’s output value drives channel N+1’s volume in real time |
| FM | USE0P1 / USE2P3 | Channel N’s output value drives channel N+1’s period in real time |
Setting both bits for a pair routes the modulation source through both: the modulating channel does not output audio while it’s acting as a modulator. Rarely used in games but powerful for synthesis — particularly useful for vibrato (FM) and tremolo (AM) without CPU intervention.
Interrupt generation
Paula generates interrupts when:
- A sample finishes playing.
- A new sample buffer is needed.
This enables double-buffering for seamless playback.
MOD format connection
The ProTracker MOD format maps directly to Paula:
- 4 channels match Paula’s hardware.
- Period values in MOD = Paula period registers.
- Volume 0-64 matches Paula’s range.
- Sample data plays without conversion.
Additional functions
Paula also handles:
| Function | Purpose |
|---|---|
| Disk I/O | Floppy drive data transfer |
| Serial | RS-232 communication |
| Interrupts | CIA and internal interrupt routing |
Programming example
; Play a sample on channel 0
lea $dff0a0,a0 ; Channel 0 base
move.l #sample,AUD0LCH(a0) ; Sample address
move.w #length/2,AUD0LEN(a0) ; Length in words
move.w #428,AUD0PER(a0) ; Period (C-2)
move.w #64,AUD0VOL(a0) ; Full volume
move.w #$8201,$dff096 ; Enable DMA