• 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