GameCube Hardware Registers
Based on Titanik’s Information
Last Updated: September 24, 2003
Compiled by: Azimer
Note: If you have any new information or bugfixes, PLEASE contact me on IRC.
Note 2: This document may be difficult to read and inconsistently formatted, please bare with me. Information is the top priority and format
is the second. These problems will be resolved as information is more concrete. I do plan on adding detailed documents later for each register set.
CP (Command Processor) :
Location R/W Size Description
CC000000
PE (Pixel Engine) :
Location R/W Size Description
CC001000
VI (Video Interface) : (Information analyzed on a NTSC console)
Location R/W Size Description 0123 4567 89AB CDEF 0123 4567 89AB CDEF
CC002000 R/W 16 bit Vertical Timing Register *Untested*
00AA AAAA AAAA EEEE
A = Active Video (In HalfLines)
E = Equalization pulse in half lines
CC002002 R/W 16 bit Display Configuration Register
0000 00PP LLTT DIRE
PP = Current Video Format
0 - NTSC 1 - PAL 2 - MPAL 3 - Debug
LL = Enables Display Latch 0 *In Progress*
0 - Off 1 - On for 1 field
2 - On for 2 fields 3 - Always On
TT = Enables Display Latch 1 *In Progress*
0 - Off 1 - On for 1 field
2 - On for 2 fields 3 - Always On
D = Selects 3D Display Mode
I = Interlace Selector *In Progress*
0 = Interlaced, 1 = Non-Interlaced
R = Reset - Clears all data requests
and puts VI into its idle state.
E = Enable - Enables video timing
generation and data request.
CC002004 R/W 32 bit Horizontal Timing 0 Register
0SSS SSSS 0EEE EEEE 0000 000W WWWW WWWW
S = Horizontal Sync Start to Color Burst End
E = Horizontal Sync Start to Color Burst Start
W = Halfline Width (W*16 = Width (720))
CC002008 R/W 32 bit Horizontal Timing 1 Register
0000 0SSS SSSS SSSE EEEE EEEE EWWW WWWW
S = Half line to horizontal blanking end
E = Horizontal Sync Start to horizontal blank end
W = Horizontal Sync Width
Setting bit 0 seems to blackout the screen.
Similar to ViBlack??
CC00200C R/W 32 bit Odd Field Vertical Timing Register *Untested*
CC002010 R/W 32 bit Even Field Vertical Timing Register *Untested*
CC002014 R/W 32 bit Odd Field Burst Blanking Interval Register *Untested*
CC002018 R/W 32 bit Even Field Burst Blanking Intverval Register *Untested*
CC00201C R/W 32 bit Top Field Base Register (L)
000? XXXX FFFF FFFF FFFF FFF0 0000
X = Horizontal Offset of the left-most pixel
within the first word of the fetched
picture.
F = External Memory Address of frame buffer
CC002020 R/W 32 bit Top Field Base Register (R) (Only valid in 3D Mode)
0000 0000 FFFF FFFF FFFF FFF0 0000
F = External Memory Address of frame buffer
CC002024 R/W 32 bit Bottom Field Base Register (L)
0000 0000 FFFF FFFF FFFF FFF0 0000
F = External Memory Address of frame buffer
CC002028 R/W 32 bit Bottom Field Base Register (R) (Only valid in 3D Mode)
0000 0000 FFFF FFFF FFFF FFF0 0000
F = External Memory Address of frame buffer
CC00202C R 32 bit Display Position Register
0000 00VV VVVV VVVV 0000 00HH HHHH HHHH
CC002030 R/W 32 bit Display Interrupt 0
I00E 00VV VVVV VVVV 0000 00HH HHHH HHHH
I = Interrupt Status (1=Active) (Write to clear)
E = Interrupt Enable Bit
V = Vertical Position
H = Horizontal Position
CC002034 R/W 32 bit Display Interrupt 1
Refer to Display Interrupt 0
CC002038 R/W 32 bit Display Interrupt 2
Refer to Display Interrupt 0
CC00203C R/W 32 bit Display Interrupt 3
Refer to Display Interrupt 0
CC002040 W 16 bit? Unknown
CC002042 W 16 bit? Unknown
CC002044 W 16 bit? Unknown
CC002046 W 16 bit? Unknown
CC002048 R/W 32 bit Scaling Register
WWWW WWWW ???? ???? 000E 000V VVVV VVVV
W = Frame Buffer Width (divided by 16)
E = Enable Horizontal Scaling
V = U1.8 Scaler Value (0x160 Works for 320)
CC00204C thru CC002067 Skipped for now (AA stuff)
CC00206C R/W 16 bit VI Clock Select Register
0000 0000 0000 000S
S = 0 - 27 Mhz video clk
1 - 54 Mhz video clk (Progressive Mode)
CC002070 R/W 16 bit Holds 0x280, but has no effect on change (Possibly for Progressive)
I can not test this theory without a TV that supports Progressive
PI (Processor Interface) : *This is my current work in progress… most information is misleading*
Location R/W Size Description 0123 4567 89AB CDEF 0123 4567 89AB CDEF
CC003000 R 32 bit Cause Register
xxxx xxxx xxxx xxxx xxHG CPTV MDAE SKWR
R = Error
W = Reset Switch Interrupt
K = DI Interrupt
S = SI Interrupt
E = EXI Interrupt
A = AI Interrupt
D = DSP Interrupt
M = MI Interrupt
V = VI Interrupt
T = Pixel Engine Token
P = Pixel Engine Finish
C = CP Interrupt
G = Debug Interrupt
H = HSP ??
CC003004 R/W 32 bit Interrupt Mask (See CC003000 for bits)
CC003010 ?/? 32 bit FIFO End??
CC003014 ?/? 32 bit FIFO Write Pointer??
CC00301C ?/?
CC003024 R/W 32 bit? Reset? – Writing anything here seems to cause a complete reset.
MI (Memory Interface) :
Location R/W Size Description
CC004010 ?/? 16 bit ??? (just set it to 0xFF)
CC00401C ?/? 16 bit MI Mask Register??
CC00401E ?/? 16 bit MI Cause Register??
CC004020 ?/? 16 bit ??? (just set it to zero)
CC004022 ?/? 16 bit ???
CC004024 ?/? 16 bit ???
CC004028 ?/? 16 bit ??? – 2 after init if RAM is 24MB
AI (Audio Interface) :
Location R/W Size Description 0123 4567 89AB CDEF
CC005000 ?/? 16 bit? DSP Status
CC005002 ?/? 16 bit? DSP (2) \
CC005004 ?/? 16 bit? DSP (3) -- Communication with DSP?
CC005006 ?/? 16 bit? DSP (4) /
CC00500A ?/W 16 bit AI Control Register |???? ???D DRRA A??S|
High D = DSP Int Mask, Low D = DSP Int Bit
High R = ARAM Int Mask, Low R = DSP Int Bit
High A = AI Int Mask, Low A = AI Int Bit
S = RESET Bit (Resets DSP?)
CC005030 ?/W 16 bit DMA Start address (High)
CC005032 ?/W 16 bit DMA Start address (Low)
CC005036 ?/W 16 bit DMA Control & DMA length |SLLLL LLLL LLLL LLLL| S = Status D = Length
Write (Length/4)&0x7FFF for Length. Set S to Play, Clear S to Stop
CC00503A R/? 16 bit DMA Bytes left
DI (DVD Interface) :
Location R/W Size Description
CC006000
SI (Serial Interface) :
Location R/W Size Description
CC006400
EXI (Expansion Interface) :
Location R/W Size Description
CC006800 ?/? 32 bit? EXI Channel 0 Status
0x1000 – Something is inserted into Device 1
0x2000 – Something is inserted into Device 2
0x0800 – EXT Interrupt Occurred (Will trigger when device removed)
0x0400 – EXT Interrupt Mask
0x0380 – Device Select (0, 1, 2, 4, 5 seem valid)
0x0070 - Frequency
0x0008 – TC Interrupt Occurred
0x0004 – TC Interrupt Mask
0x0002 – EXI Interrupt Occurred
0x0001 – EXI Interrupt Mask (1-Enabled)
CC006804 ?/? 32 bit? EXI Channel 0 DMA Start Address – Must be 32 byte aligned
CC006808 ?/? 32 bit? EXI Channel 0 DMA Transfer Length
CC00680C ?/? 32 bit? EXI Channel 0 Control Register
0x0030 – EXI Data Size for Immediate (0 = Byte, 2 = Half-Word, 3 = Word)
0x000C – EXI Transfer Type (0 = Read, 1 = Write, 2..3???)
0x0002 – EXI Transfer Mode (0 = Immediate, 1 = DMA)
0x0001 – EXI Enable (Begins a Transfer)
CC006810 ?/? 32 bit? EXI Channel 0 Immediate Data
CC006814 ?/? 32 bit? EXI Channel 1 Status (Bits same as Channel 0)
CC006818 ?/? 32 bit? EXI Channel 1 DMA Start Address
CC00681C ?/? 32 bit? EXI Channel 1 DMA Transfer Length
CC006820 ?/? 32 bit? EXI Channel 1 Control Register (Bits same as Channel 0)
CC006824 ?/? 32 bit? EXI Channel 1 Immediate Data
CC006828 ?/? 32 bit? EXI Channel 2 Status (Bits same as Channel 0)
CC00682C ?/? 32 bit? EXI Channel 2 DMA Start Address
CC006830 ?/? 32 bit? EXI Channel 2 DMA Transfer Length
CC006834 ?/? 32 bit? EXI Channel 2 Control Register (Bits same as Channel 0)
CC006838 ?/? 32 bit? EXI Channel 2 Immediate Data
Streaming Interface (Audio) :
Location R/W Size Description
CC006C00 ?/? 16 bit? Audio Stream Status
Or with 0x40 for 32KHz and Clear 0x40 for 48Khz (Unconfirmed)
GX (Graphics Display Processor) :
Location R/W Size Description
CC008000 ?/W 32 bit GX FIFO (Graphics Display Lists)
More to come…
Sources:
- Titanik’s Crazy Nation Gamecube Source Pak #1; May 30, 2003, “gcninfos1.txt”
- Audio demo by CrowTRobo; July 12, 2003, “ctr-snd.txt”
- Various documents provided by org, author of Dolwin.
- Costis of www.gcdev.com
- F|RES of TR64 fame.
- Various public documents
- All other information obtained by Azimer through probing GC and emulating disc images on the PC.
*Sorry for not including your email addresses. It prevents people from mass emailing all of you.*