Introduction

The Gameboy Advance (GBA) sound system may seem to many as black magic because of the availability of information on this specific part of the machine is near inexistent. Moreover, finding relevant or accurate specs for the older Gameboy was and is still problematic. The result is that many will take little or no advantages of sound in their projects. This site will attempt to fill this gap, by providing an Unofficial, comprehensive and (well, as much as possible in the circumstances) accurate specification of the GBA sound system (GBAS). It is assumed that the reader will have some knowledge of the other basic functionalities of the GBA and knows how to program in C.

The GBAS is a big step forward its older brothers because it now includes two Pulse Width Modulators (PWM) that act as digital-to-analog converters. This adds to the 4 sound channels present on the previous Gameboys. One important improvement to the sound system is that channel 3 's wave ram is now banked, allowing for distortion-free dynamic wave ram reloading.

The GBA BIOS also contains many sound-related functions, for converting MIDI notes and playing music. BIOS may be covered in the future.

The Registers

Sound registers, as for all other registers in the GBA, are memory mapped and they span from 0x04000060 to 0x040000A6.

AdressNameFunction
0x04000060REG_SOUND1CNT_LSound 1 Sweep control
0x04000062REG_SOUND1CNT_HSound 1 Length, wave duty and envelope control
0x04000064REG_SOUND1CNT_XSound 1 Frequency, reset and loop control
0x04000068REG_SOUND2CNT_LSound 2 Lenght, wave duty and envelope control
0x0400006CREG_SOUND2CNT_HSound 2 Frequency, reset and loop control
0x04000070REG_SOUND3CNT_LSound 3 Enable and wave ram bank control
0x04000072REG_SOUND3CNT_HSound 3 Sound lenght and output level control
0x04000074REG_SOUND3CNT_XSound 3 Frequency, reset and loop control
0x04000078REG_SOUND4CNT_LSound 4 Length, output level and envelope control
0x0400007CREG_SOUND4CNT_HSound 4 Noise parameters, reset and loop control
0x04000080REG_SOUNDCNT_LSound 1-4 Output level and Stereo control
0x04000082REG_SOUNDCNT_HDirect Sound control and Sound 1-4 output ratio
0x04000084REG_SOUNDCNT_XMaster sound enable and Sound 1-4 play status
0x04000088REG_SOUNDBIASSound bias and Amplitude resolution control
0x04000090REG_WAVE_RAM0_LSound 3 samples 0-3
0x04000092REG_WAVE_RAM0_HSound 3 samples 4-7
0x04000094REG_WAVE_RAM1_LSound 3 samples 8-11
0x04000096REG_WAVE_RAM1_HSound 3 samples 12-15
0x04000098REG_WAVE_RAM2_LSound 3 samples 16-19
0x0400009AREG_WAVE_RAM2_HSound 3 samples 20-23
0x0400009CREG_WAVE_RAM3_LSound 3 samples 23-27
0x0400009EREG_WAVE_RAM3_HSound 3 samples 28-31
0x040000A0REG_FIFO_A_LDirect Sound channel A samples 0-1
0x040000A2REG_FIFO_A_HDirect Sound channel A samples 2-3
0x040000A4REG_FIFO_B_LDirect Sound channel B samples 0-1
0x040000A6REG_FIFO_B_HDirect Sound channel B samples 2-3