Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Memory Map

The GameCube’s physical memory map is as follows:

Address RangeSizeRegion
0x0000_0000..0x0180_000024 MiBRAM
0x0C00_0000..0x0C00_10004 KiBCP Registers
0x0C00_1000..0x0C00_20004 KiBPE Registers
0x0C00_2000..0x0C00_30004 KiBVI Registers
0x0C00_3000..0x0C00_40004 KiBPI Registers
0x0C00_4000..0x0C00_50004 KiBMI Registers
0x0C00_5000..0x0C00_60004 KiBDSPI Registers
0x0C00_6000..0x0C00_64001 KiBDI Registers
0x0C00_6400..0x0C00_68001 KiBSI Registers
0x0C00_6800..0x0C00_6C001 KiBEXI Registers
0x0C00_6C00..0x0C00_6C1032 BAI Registers
0x0C00_6C00..0x0C00_800032 BGX FIFO
0xE000_0000..0xE000_400016 KiBScratchpad
0xFFF0_0000..1 MiBIPL (First MiB)

Real addressing mode is, however, very uncommon. Most games use memory address translation in order to map a logical address to a physical one.

Reserved RAM regions

In the PowerPC architecture, some predefined regions of RAM are reserved for specific usages:

Address RangeSizePurpose
0x0000_0000..0x0000_0100256 BReserved for the OS
0x0000_0100..0x0000_10003.75 KiBException Vectors
0x0000_1000..0x0000_30008 KiBImplementation Specific

Dolphin OS uses the implementation specific region as an extension to the exception vectors region.

Middle Endian

Some memory mapped registers are middle endian. Yep, you read that right. They are 4 byte long, but divided into two 2 byte consecutive parts low and high (in that order), and these parts themselves are big endian.

In practice, this means the byte significance order is [1, 0, 3, 2] instead of the expected big endian [3, 2, 1, 0].