The GBA's memory controller can be configured using WAITCNT
, an MMIO port at 0x04000204, to use slow or fast timing when accessing the Game Pak slot. The BIOS boots up in slow mode, in case Nintendo would release games on slow ROM. But Nintendo ended up releasing all games on fast ROM, and when a game starts, it writes a value to WAITCNT
to enable fast access.
The SuperCard is made to be cheap, not fast. When you start a game, the firmware copies it from the SD card to 32 MiB of DRAM that can't keep up with fast access. If you start a game, it will crash soon after the WAITCNT
write because the memory can't get the data lines to settle by the time the GBA's memory controller in fast ROM mode expects them to have settled. So the patch removes the write to WAITCNT
, keeping the system in slow mode and thus within the RAM's spec. It's not necessary for homebrew games that do not write to WAITCNT
or for "multiboot" game demos smaller than 256 KiB that load entirely into the GBA's RAM.
A patch can do other things.
- Changing the save method: GBA games can save to an 8-bit SRAM, a serial EEPROM, or a parallel flash. SuperCard hardware supports only SRAM. A patch changes the game to use SRAM.
- Save to SD card: The SuperCard's SRAM is volatile memory and will lose data if the system is powered off longer than the capacitor can continue to supply current. Normally, after saving the game, the user needs to quickly power cycle the GBA and restart the menu to copy the SRAM back to the SD card. The patch does the copying within the game under certain conditions.
- Patching DS games: When used in SLOT-2 of a suitably modded Nintendo DS, SuperCard can play DS games. But if they're bigger than a couple MB, they will need to load data from the Game Card in SLOT-1 during play. (The N64 and DS cartridge interfaces behave more like a CF or SD card than like traditional ROM.) Patching redirects these accesses to SLOT-2.