APU: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
m (APU category)
(restructring this page with a form that can include a more comprehensive overview of the APU)
Line 1: Line 1:
[[Category:APU]]
[[Category: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 [[APU registers|registers]] are mapped in the range $4000-$4017.
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 [[APU registers|registers]] are mapped in the range $4000-$4013, $4015 and $4017.


For clarity, this reference describes the ''abstract'' operation of the APU, ''not the exact hardware implementation''. As long as the behavior is documented, the exact kind of counter or shift register used to implement a particular behavior is essentially irrelevant; the exact hardware implementation can be determined by examining close-up images of the die itself (as was done with the [http://www.qmtpro.com/~nes/chipimages/visual2a03/ Visual 2A03] project).
== 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 [[APU Misc|timer]] clocking a waveform generator, and various modulators driven by low-frequency clocks from the [[APU Frame Counter|Frame Counter/Sequencer]]. The [[APU DMC|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 [[APU Status|status register]] allows channels to be enabled and disabled, and their current [[APU Length Counter|length counter status]] to be queried.
 
The outputs from all the channels are combined using a [[APU Mixer|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 [http://www.qmtpro.com/~nes/chipimages/visual2a03/ 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 [[Category:Expansion audio|Expansion audio]] for details on the audio produced by various [[Mapper|mappers]].
 
* For a basic usage guide to the APU, see [[APU basics]], or [[Nerdy Nights: APU overview]].
 
== Specification ==
 
=== Registers ===


{| class="tabular"
{| class="tabular"
Line 29: Line 49:
|}
|}


Each channel has a variable-rate [[APU Misc|timer]] clocking a waveform generator, and various modulators driven by low-frequency clocks from the [[APU Frame Counter|Frame Counter/Sequencer]]. The [[APU DMC|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.
=== 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]]


The read/write [[APU Status|status register]] allows channels to be enabled and disabled, and their current [[APU Length Counter|length counter status]] to be queried.
=== Frame Sequencer ($4017) ===
* See [[APU Pulse]]


The outputs from all the channels are combined using a [[APU Mixer|non-linear mixing]] scheme.
=== Miscellaneous  ===
* See [[APU Misc]]


=== On board extra audio register reference ===
== References ==
* [[FDS_audio|FDS]]
* [[MMC5_audio|MMC5]]
* [[Namco_106_audio|Namco 106]]
* [[VRC6_audio|VRC6]], [[VRC7_audio|VRC7]]


=== Note ===
* [http://nesdev.parodius.com/apu_ref.txt Blargg's NES APU Reference].
* The NES APU is also documented in [http://nesdev.parodius.com/2A03%20technical%20reference.txt Brad Taylor's 2A03 Technical Reference].
* [http://nesdev.parodius.com/2A03%20technical%20reference.txt Brad Taylor's 2A03 Technical Reference].
* These web pages are based on [http://nesdev.parodius.com/apu_ref.txt Blargg's NES APU Reference].
* Basic usage of the APU (excluding the DMC) can be found [[APU basics|here]].

Revision as of 20:59, 26 May 2012

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.

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)

Triangle ($4008-400B)

Noise ($400C-400F)

DMC ($4010-4013)

Status ($4015)

Frame Sequencer ($4017)

Miscellaneous

References