APU
The NES APU is the audio processing unit in the NES console which generates sound for games. It is implemented in the RP2A03 (NTSC) and RP2A07 (PAL) chips. Its registers are mapped in the range $4000-$4013, $4015 and $4017.
Overview
The APU has five channels: two pulse wave generators, a triangle wave, noise, and a delta modulation channel for playing DPCM samples.
Each channel has a variable-rate timer clocking a waveform generator, and various modulators driven by low-frequency clocks from the Frame Counter/Sequencer. The DMC plays samples while the other channels play waveforms. Each sub-unit of a channel generally runs independently and in parallel to other units, and modification of a channel's parameter usually affects only one sub-unit and doesn't take effect until that unit's next internal cycle begins.
The read/write status register allows channels to be enabled and disabled, and their current length counter status to be queried.
The outputs from all the channels are combined using a non-linear mixing scheme.
Notes
- This reference describes the abstract operation of the APU. The exact hardware implementation is not necessarily relevant to an emulator, but the Visual 2A03 project can be used to determine detailed information about the hardware implementation.
- The Famicom had an audio return loop on its catridge connector allowing extra audio from individual cartridges. See for details on the audio produced by various mappers.
- For a basic usage guide to the APU, see APU basics, or Nerdy Nights: APU overview.
Specification
Registers
Registers | Channel | Units |
---|---|---|
$4000-$4003 | Pulse 1 | Timer, Length Counter, Envelope, Sweep |
$4004-$4007 | Pulse 2 | Timer, Length Counter, Envelope, Sweep |
$4008-$400B | Triangle | Timer, Length Counter, linear counter |
$400C-$400F | Noise | Timer, Length Counter, Envelope, shift register w/ feedback |
$4010-$4013 | DMC | Timer, memory reader, sample buffer, output unit |
$4015 | All | Length Counter enable and status |
$4017 | All | Frame Counter/Sequencer |
Pulse ($4000-4007)
- See APU Pulse
Triangle ($4008-400B)
- See APU Triangle
Noise ($400C-400F)
- See APU Noise
DMC ($4010-4013)
- See APU DMC
Status ($4015)
- See APU Status
Frame Sequencer ($4017)
- See APU Pulse
Miscellaneous
- See APU Misc