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 sets slow timing at startup, in case Nintendo would release games on slow ROM. 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 a 32K×8-bit battery-backed SRAM, a serial EEPROM, or a parallel flash memory. SuperCard hardware supports only SRAM. A patch changes the game to use SRAM backed by a capacitor.
- 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. (This is called "QPC" in the scene.) 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. Licensed games are bigger than the DS's 4 MiB RAM and 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.