1 Introductional Rant
1.1 Things that are in this document
1.2 Things that are not in this document
1.3 Conventions
1.4 legal Babble
2 Gamecube Hardware Introduction
2.1 enhanced PowerPC 750 Specification
2.2 Consumer Units
2.2.1 Nintendo
2.2.2 Panasonic Q
2.3 Development Units
2.4 Hardware Parts List
2.4.1 Connectors
2.4.2 Semi-Conductors
2.5 Details on the motherboard buses
2.6 Details on the Macronix (MX) Chips
2.7 DVD Protection
2.7.1 Filesystem
2.7.2 Barcode
2.7.3 Encryption
2.8 IPL/BIOS Encryption
2.8.1 Flipper decryption logic bug
2.8.2 Cyphertext algorithm
2.8.3 replacing the IPL
3 Gekko CPU Overview
3.1 Registers
3.2 Calling conventions
3.3 PPC Instructions
3.3.1 Integer Instructions
3.3.2 Floating-Point Instructions
3.3.3 Integer Load and Store Instructions
3.3.4 Floating-Point Load and Store Instructions
3.3.5 Branch Instructions
3.3.6 Condition Register Logical Instructions
3.3.7 Misc Instructions
3.4 additional Gekko Instructions
3.4.1 FPR format in paired-single mode
3.4.2 Arithmetic Instructions
3.4.3 Load and Store Instructions
3.4.4 modified floating point instructions
3.5 Programming Tips and additional information
3.5.1 Machine State Register
3.5.2 Caches
3.5.3 branch unit
4 Memory Map
4.1 Overview
4.2 RAM usage
4.2.1 Dolphin-OS globals
4.2.2 Exception Handlers
4.2.3 Dolphin-OS globals
4.2.4 User Memory
5 Hardware Registers
5.1 CP - Command Processor
5.1.1 Token register
5.2 PE - Pixel Engine
5.3 VI - Video Interface
5.3.1 Video Modes
5.4 PI - Processor Interface
5.4.1 Operation
5.5 MI - Memory Interface
5.6 DSP - Digital Signal Processor Interface
5.6.1 internal DSP Registers
5.6.2 Operation
5.7 DI - DVD Interface
5.7.1 Drive Commands
5.7.2 Drive Debug Commands
5.7.3 Operation
5.7.4 DVD-ROM Subsystem
5.8 SI - Serial Interface
5.8.1 Operation
5.9 EXI - External Interface
5.9.1 Operation
5.10 AI - Audio Streaming Interface
5.11 GX FIFO (Graphic display lists)
5.11.1 internal BP registers
5.11.2 internal CP Registers
5.11.3 internal XF Memory
5.11.4 internal XF Registers
5.11.5 GP packet description
6 Exception and Interrupt Processing
6.1 Hardware Exception Sources
6.1.1 System Reset Interrupt
6.1.2 Machine Check Interrupt
6.1.3 DSI Interrupt
6.1.4 ISI Interrupt
6.1.5 External Interrupt
6.1.6 Alignment Interrupt
6.1.7 Program Interrupt
6.1.8 FP unavailable Interrupt
6.1.9 Decrementer Interrupt
6.1.10 System Call Interrupt
6.1.11 Trace Interrupt
6.1.12 Performance Monitor Interrupt
6.1.13 IABR Interrupt
6.1.14 Thermal Interrupt
6.2 External Interrupt Sources
6.2.1 HSP - High Speed Port
6.2.2 Debug
6.2.3 CP - Command Processor
6.2.4 PE - Pixel Engine Finished
6.2.5 PE - Pixel Engine Token
6.2.6 VI - Video Interface
6.2.7 Memory Interface
6.2.8 DSP Interface
6.2.9 Audio Streaming Interface
6.2.10 EXI
6.2.11 Serial Interface
6.2.12 DVD Interface
6.2.13 Reset Button
6.2.14 Error
7 Video Processing
7.1 Used VI terms
7.2 init VI
7.2.1 Videomodes
7.3 render to XFB
7.4 vertical retrace
7.5 set XFB Address
8 3D Graphics Processing
8.1 basic operations
8.1.1 load BP Register
8.1.2 load CP Register
8.1.3 load XF Register
8.1.4 load XF Register Indexed
8.2 example processing loop
8.2.1 init GX
8.2.2 begin frame
8.2.3 draw frame
8.2.4 end frame
8.2.5 close GX
9 Joy-Bus Devices
9.1 ID and Device List
9.2 standard Controller
9.2.1 Init
9.2.2 Read Controller Status
9.2.3 rumble Motor On
9.2.4 rumble Motor Off
9.3 Keyboard
9.3.1 Types
9.3.2 Scancodes
9.3.3 Init
9.3.4 Read Keyboard
9.4 GBA
9.5 Wavebird
9.6 steering wheel
9.7 DKongas
9.7.1 Read Controller Status
9.8 Resident Evil4 Chainsaw
10 EXI Devices
10.1 EXI Channel and Device List
10.2 Retrieving the ID of an EXI Device
10.3 Mask ROM
10.3.1 Memory Map (Europe/PAL)
10.3.2 Memory Map (USA/NTSC)
10.3.3 Memory Map (Japenese/NTSC)
10.3.4 Memory Map (Japenese/NTSC - Panasonic Q)
10.3.5 Font Encoding
10.3.6 Font Layout
10.3.7 Operation
10.4 RTC (Real-Time Clock)
10.4.1 Operation
10.5 SRAM
10.5.1 Memory Map
10.5.2 Operation
10.5.3 Checksums
10.6 AD16
10.6.1 Operation
10.6.2 Trace-Step Values
10.7 Memory Cards
10.7.1 Commands
10.7.2 Operation
10.8 Ethernet Adapter
10.8.1 registers
10.8.2 command-registers
10.8.3 Operation
10.9 UART
10.10 SD Cards
10.11 Viper 'Modchip'
10.12 Ripper III GC 'Modchip'
10.13 Qoob 'Modchip'
10.14 NinjaMOD 'Modchip'
10.15 Mario Party Microphone
11 HSP Devices
11.1 GB Player
12 Memory Card Structure
12.1 Overview
12.2 Header
12.3 Directory
12.3.1 Directory Entries
12.4 Block Allocation Map
12.5 Checksums
13 DVD Structure
13.1 Disk header
13.2 Disk header Information
13.3 Apploader
13.4 Format of the FST
13.4.1 Format of a File Entry
14 general File Formats
14.1 BNR (Banner file format)
14.2 DOL (Gamecube Executable)
14.3 ELF (Executable and linkable Format)
14.4 GCB (QOOB Flash Files)
14.5 GCM (Gamecube Disc Image)
14.6 GCI (Gamecube Game Save)
14.7 GCP (Gamecube Memorycard Image)
14.8 TGC
14.8.1 Header
14.8.2 embedded GCM
14.9 VGC (Viper Flash Files)
15 Game File Formats
15.1 AFC (audio stream)
15.2 AST (audio stream)
15.3 ARC (RARC Archive)
15.3.1 Header
15.3.2 Nodes
15.3.3 File Entries
15.4 ARC (audio stuff)
15.5 ASN
15.6 AW ("audio wave"?)
15.7 BAS ("audio script" ?)
15.8 BCA
15.9 BCK (animation of a .bmd skeleton)
15.10 BDL
15.11 BFN (font)
15.12 BIN (binary file)
15.13 BLO (screen layout for dialog screens)
15.14 BMD (3d model with texture and skeleton)
15.15 BMG
15.16 BMP (window bitmap (!))
15.17 BMT
15.18 BCK ("Pack" file)
15.19 BRK
15.20 BTI
15.20.1 Texture Header
15.21 BTP
15.22 BTK
15.23 COL (collision triangles)
15.24 DZB
15.25 H4M
15.26 JPA (particle data)
15.27 JPC
15.28 MTH ('Mute thp?')
15.29 PAD
15.30 PRM ('Parameters?')
15.31 REL (relocatable module)
15.32 SB
15.33 SZS (packed RARC Archive)
15.34 THP (video format)
15.34.1 Header data
15.34.2 Components structure
15.34.3 VideoInfo Structure
15.34.4 AudioInfo Structure
15.34.5 Frame data
15.34.6 Video Frames
15.34.7 Audio Frames
15.35 TPL (Texture Palette)
15.36 YMP (height map)
16 Compression Formats
16.1 Yay0
16.1.1 compression
16.1.2 de-compression Code
16.1.3 Font Data
16.2 Yaz0
16.2.1 de-compression Code
17 Graphic Formats
17.1 YCbYCr
17.2 I4 (4bit indexed)
17.3 IA4 (4bit indexed with alpha)
17.4 I8 (8bit indexed)
17.5 IA8 (8bit indexed with alpha)
17.6 CI4 (compressed 4bit indexed)
17.7 CIA4 (compressed 4bit indexed with alpha)
17.8 CI8 (compressed 8bit indexed)
17.9 CIA8 (compressed 8bit indexed with alpha)
17.10 RGB4A3
17.10.1 RGB4A3 Pixel Format
17.11 RGB5A1
17.11.1 RGB5A1 Pixel Format
17.12 RGB565
17.12.1 RGB565 Pixel Format
17.13 RGBA8
17.13.1 RGBA8 Pixel Format
17.14 S3TC
17.14.1 CMPR
18 Appendix
18.1 GCC Quick How To
18.1.1 compile ASM to object:
18.1.2 compile C to object:
18.1.3 compile C++ to object:
18.1.4 link objects
18.1.5 remove unneeded sections (debug info etc) from object
18.1.6 convert object to plain binary
18.1.7 convert absolute address into filename/line number/function
18.1.8 Building a Crosscompiler
18.1.9 Linker Script
18.1.10 Startup Code
18.2 Boot Process Details
18.2.1 BS - Bootstrap 1
18.2.2 BS2 - Bootstrap 2
18.2.3 Apploader
18.2.4 Main DOL executable
18.3 Game and Maker Codes
18.3.1 Gamecodes
18.3.2 Game Serial ID
18.3.3 Makercodes
18.4 Macronix Chip IDs
18.5 chip simelarities
18.6 Easter Eggs
18.7 Terms and Acronyms
19 References
19.1 Sources
20 Credits