If you don't know what programming a machine down to the metal is
all about, go away! no really, this document is not for you! if you
are seeking for advice on using existing solutions, such as SDKs or
libraries, you will find little to none information that is of any
use for you and you might only become frustrated by figuring out how
little you know. If you however aren't afraid of numbers and want
to dare jumping into the snake-pit of semi-accurate information based
on guesswork done by a bunch of freaks - feel invited. this was made
to give you what you need in the most compressed and visually pleasing
form possible. Stuff that matters.
just about everything explicitly and specifically related to the gamecube
hard- and software internals and its programming. everything inside
the box is subject to be documented, may it be relevant for actual
programming or not. its meant as a reference for everyone who wants
to know in all possible detail what makes this thing tick.
one more thing: please notice that this is a technical documentation
which is presented for pure educational purposes and higher learning,
and not a moral lesson. i have decided against leaving out any information
since i believe that information by itself should not be crippled
in any way. if you choose to abuse this information for any kind of
illegal activities (PLEASE DON'T!) so be it, but don't bother
me with it.
several things were decided to not being put into this document because
they didn't fit into the 'technical documentation' type of concept.
They may be documented separatly some time but not now and not here.
These things are:
Tips on Emulating the Gamecube on another Host system (this kind of
information is only useful for a very limited number of people, and
additionally might be highly confusing and/or misleading for those
who are writing actual gamecube programs)
Explanation of the PSO (Phantasy Star Online) Exploit that lets you
run code on the Gamecube
Explanation of the Codes used with Datels Action Replay
Instructions on using any tools that let you upload and execute code
on the Gamecube, or any other development related tools except
anything related to setting up and using gcc as a cross-compiler targeted
to the gamecube.
anything related to gaming, cheat-codes and the like. (this is a tech-doc
not a gaming FAQ!)
information on using the datel action replay to patch itself in order
to execute code.
detailed and/or complete sourcecode, except when a formal explanation
would just over-complicate things. (this is a documentation, not a
code library)
building and/or using a custom interface to connect a gamecube memory
card to another host and read/write data
anything related to playing/booting/copying pirated games (as you
may have noticed, we do not support piracy!)
some of these may be arguable, so if you think they should be here
- probably along the lines of the appendix - don't hesitate to write
the chapter in question and send it to me. i might include it if you
write it, but other than that i won't care (there is still enough
other stuff to complete).
we count bits starting from 0, the most significant bit of a byte
is bit 7. when visualising a byte the most significant bit comes first
(left), and the least significant bit comes last (right).
when dealing with 16- or 32 byte values all figures are in big endian
byte order. this means that the most significant byte comes first
(left), and the least significant byte comes last (right).
Please notice that the above is different to what IBM is using in
their PPC documents. They have the (to many people strange and wrong)
idea of applying 'big endian' to the order of bits and showing them
the other way around as we do in this document.
if known (from patents or other freely available sources) we use the
same terminology as Nintendo (or Macronix respectively) does, in particular
we try to use the same names and abbreviations for hardware registers,
signals and the like as a weak attempt of providing consistency with
other existing documentation.
absolute memory addresses are shown as if the gamecube had been initialized
by the original IPL and address translation had not been changed.
For this matter we dont use physical adresses to avoid confusion for
the majority of our readers.
code snippets are in either real or pseudo C language. any logical
or arithmetic expressions outside code snippets are loosely similar
to C notation according to the following table:
Description
Symbol
logical or bitwise AND
&
logical or bitwise OR
|
logical or bitwise exclusive OR
^
logical or bitwise NOT (inverse)
!
equality or assignment
=
addition
+
substraction
-
multiplication
*
division
/
please notice that -outside code- we do not make a difference between
logical and bitwise operations. if in doubt the operation is bitwise,
it should however be clearly visible from the context.
Everything in this Document has been reverse-engineered from legally
aquired software (Games), publicly available Patents and Documentation
for the sole purpose of writing interoperable Software. This is explicitly
allowed (almost encouraged :)) by Sect. 1201 (f), Reverse Engineering
exception of the DMCA.