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.
Overview
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 0+3 left, 1+2 right).
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:
Sample rate = Clock / (Period × 2)
PAL clock: 3,546,895 Hz
NTSC clock: 3,579,545 Hz
| Period | PAL rate | Note equivalent |
|---|---|---|
| 124 | 14,306 Hz | — |
| 214 | 8,287 Hz | — |
| 428 | 4,143 Hz | C-2 base |
| 856 | 2,072 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 channel pairs:
| Mode | Effect |
|---|---|
| AM | Channel N modulates volume of N+1 |
| FM | Channel N modulates period of N+1 |
Rarely used in games but powerful for synthesis.
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