Overview
The AY-3-8910 Programmable Sound Generator (PSG) was ubiquitous in 1980s computing. Its three square wave channels, noise generator, and hardware envelopes provided a consistent sound across platforms. While not as characterful as the SID, its widespread adoption made it the common tongue of chiptune.
Fast facts
- Manufacturer: General Instrument (later Microchip).
- Channels: 3 tone generators + 1 noise generator.
- Output: mono (some systems mixed to stereo).
- Variants: AY-3-8912 (fewer I/O pins), AY-3-8913 (no I/O), YM2149 (Yamaha clone).
Architecture
| Feature |
Specification |
| Tone channels |
3 × 12-bit period divider; f_tone = clock / (16 × period); period 0 treated as period 1 |
| Noise |
5-bit period; 17-bit LFSR (XOR feedback bits 0 and 3, shared across all three channels) |
| Mixer |
per-channel tone/noise enable (active-low) |
| Envelopes |
1 shared envelope generator, 16-bit period |
| Volume |
4-bit per channel (16 levels), approximately logarithmic — ~3 dB per step |
Register map
| Register |
Purpose |
| R0-R1 |
Channel A frequency (12-bit) |
| R2-R3 |
Channel B frequency (12-bit) |
| R4-R5 |
Channel C frequency (12-bit) |
| R6 |
Noise frequency (5-bit) |
| R7 |
Mixer control |
| R8-R10 |
Channel volumes (4-bit each) |
| R11-R12 |
Envelope period (16-bit) |
| R13 |
Envelope shape |
| R14-R15 |
I/O ports (if present) |
Mixer register (R7)
All enable bits are active-low — set to 0 to enable, 1 to disable.
| Bit |
Function |
| 0 |
Channel A tone enable |
| 1 |
Channel B tone enable |
| 2 |
Channel C tone enable |
| 3 |
Channel A noise enable |
| 4 |
Channel B noise enable |
| 5 |
Channel C noise enable |
| 6 |
Port A direction (0 = output, 1 = input) |
| 7 |
Port B direction (0 = output, 1 = input) |
Envelope shapes (R13)
| Value |
Shape |
Description |
| $00-$03 |
\__ |
Decay then hold low |
| $04-$07 |
/ |
__ |
| $08 |
\\ |
Repeating decay |
| $09 |
\__ |
Single decay |
| $0A |
\/\/ |
Decay-attack cycle |
| $0B |
\‾‾ |
Decay then hold high |
| $0C |
//// |
Repeating attack |
| $0D |
/‾‾ |
Single attack, hold high |
| $0E |
/\/\ |
Attack-decay cycle |
| $0F |
/ |
__ |
ZX Spectrum 128K
- Access: port $FFFD (register select), port $BFFD (data write).
- Clock: 1.7734 MHz (PAL).
- Stereo: ABC arrangement via Melodik interface or software mixing.
Amstrad CPC
- Access: via PPI (8255), more complex addressing.
- Clock: 1 MHz.
- Stereo: hardware stereo (A left, B centre, C right).
MSX
- Access: ports $A0-$A2.
- Clock: varies by region.
Atari ST
- Chip: YM2149F (Yamaha clone — software-compatible with the AY but with a 5-bit / 32-step envelope DAC and a selectable
/8 divider).
- Access: memory-mapped at $FF8800-$FF8802.
- Output: mono. The STe and later models add external stereo via the LMC1992 chip on the microwire bus — not part of the YM itself.
Programming techniques
- Arpeggios: rapid note changes simulate chords.
- Software envelopes: bypass limited hardware envelope for flexibility.
- Noise drums: mix noise with short tone bursts for percussion.
- Digidrum: fast volume register updates for sample playback.
- Buzzer bass: envelope-driven bass using the single envelope generator.
AY-3-8910 vs AY-3-8912
| Feature |
8910 |
8912 |
| I/O ports |
2 |
1 |
| Pin count |
40 |
28 |
| Sound |
Identical |
Identical |
See also