I was delighted to learn there is an integrated toolchain for Rust development that supports the Nintendo 64. According to the documentation:

For copyright purposes, the IPL3 binary is not included in this package. Collecting a working IPL3 binary is left as an exercise for the reader.

My question is about IPL3 (aka Initial Program Loader 3). It sounds like something you'd find in a Nintendo SDK to me.

  • Where is IPL3 documented?
  • What is the copyright issue surrounding the documentation or a sample binary?
  • How did a developer go about creating or obtaining an IPL3 for their game?

Either the historical information about how developers did this in the late 1990s, or some modern explanation from the N64 Homebrew community, should be useful.


The IPL binary they're referring to is what's more commonly called the ROM "boot code", and it exists in every Nintendo 64 cartridge. Despite containing ordinary mask ROMs, in practice N64 cartridges work more like disk drives. The CPU doesn't execute code in the cartridge ROMs directly, instead the N64 firmware loads the first 4096 bytes of the ROM into memory and executes it. This is similar to how PC have traditionally booted off disks, by reading the first 512 bytes of the disk into memory and executing it.

The boot code's job is to initialize various chips and then load and execute the actual game code. Nintendo was the author of the boot code and provided it, or at least a version it of suitable for testing, to developers. Since the particular version of boot code used needs to be matched with the lock out (CIC) chip installed in the cartridge, it's possible that the actual boot code was only added to ROM images by Nintendo late in the manufacturing process.

Since apparently there's no version of the boot code other than Nintendo's, the author of the cargo-n64 tool you linked isn't able to provide it because Nintendo holds the copyright on the code. A working ROM image needs to include the boot code, so if you want to use this tool you'll need to find a copy of it, or somehow write your own.

You can find out what exactly the boot code does in this analysis of the most commonly used bootcode in N64 catridges.

  • Does that mean that only "official games" could include the boot code because it was provided indirectly by Nintendo when they manufactured the cartridge? That's much different than handing it out to every developer on an SDK disk...
    – Brian H
    Mar 21 '20 at 16:22
  • 3
    @BrianH There was a development version of the boot code that was used in the development systems. I don't know if the actual boot code used in the production cartridges was ever provided to developers, as there doesn't appear to be any reason for Nintendo to have done so. On the other hand, it wasn't a big secret or anything. The actual boot code is relatively easy to obtain by dumping the cartridge and can be found at the start of any Nintendo 64 ROM image you would use with an emulator.
    – user722
    Mar 21 '20 at 16:34
  • 1
    fun fact: many emulators don't emulate the boot code, they just checksum it, assume what it is based on the checksum, and then set the register values according to that boot code. I don't know why this is easier than emulating the boot code.
    – user253751
    Jul 6 '20 at 13:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.