Initial Program Load

The Initial Program Load (commonly called IPL, or the boot sequence) is a set of instructions that the console performs every time it starts. There are multiple stages to this process, referred to as: IPL1, IPL2 and IPL3. When a 64DD is in use, there is also an IPL4 stage. Upon boot, the program counter is set by hardware to, which is the beginning of the PIF ROM address space. This ROM is baked into the PIF-NUS chip.

''When reading disassemblies, always remember that branch instructions have delay slots (which some branches may discard under certain circumstances). The operations performed in those delay slots, may not be related to the branch itself.''

Each line is formatted like so:. The index number is just to show relative position of each instruction, and doesn't represent real addresses.

= IPL1 = This stage spans only the first  bytes  as executing instructions directly out of the PIF is relatively slow. Only what is absolutely necessary, is executed here. IPL1 resets the console to a consistent reset state, and moves the remaining bytes of the PIF ROM, into the RSP's IMEM.

= IPL2 = After IPL1 finishes moving the instructions of this stage to RSP IMEM, it jumps to  to start this second stage. Commentated disassembly to be added here...

= IPL3 = This stage is executed out of RSP DMEM, which was loaded with the first  bytes of the game cartridge (or alternatively, whatever may be inserted in the cartridge or expansion slot on the bottom of the console). IPL2 will jump to  (  bytes after the start of DMEM, to account for the ROM header).

There are six known variants of the IPL3 stage. However, a seventh variant can be seen when analyzing the dumps of the GameBooster 64, Action Replay Pro 64, and GameShark Pro (v3.3): where the  bytes after the header, are all zeros, and are dynamically loaded by the cartridge.

For each of the six variants, there is a matching CIC chip found in each cartridge. There are 10 official CIC chips: Each of these NTSC/PAL pairs share an IPL3 variant, except 6101 and 7102.

CIC 6102 / 7101 = Commentated disassembly to be added here... CIC 6103 / 7103 = Commentated disassembly to be added here... CIC 6105 / 7105 = Commentated disassembly to be added here... CIC 6106 / 7106 = Commentated disassembly to be added here... CIC 6101 = Commentated disassembly to be added here... CIC 6102 = Commentated disassembly to be added here...

= IPL4 = TODO