Skip to content

SWI 0x26 — HardReset

  • Entry: 0x0000008C (ARM)
  • Status: verified (hardware-checked 2026-07-08: fixture-driven runs on real GBA via the worker's no-blacklist opcode; see Hardware verification section)

Summary

Performs a full BIOS restart: it re-enters the cold-boot code path, so the GBA behaves as if the console had just been powered on / reset — the BIOS intro ("boot animation") plays and the cartridge is (re)launched. Shares its code with the reset boot sequence at 0x0000008C. Never returns.

Parameters

None used from registers.

Returns

Does not return. Ends in a jump to the BIOS post-boot routine at 0x00001929.

Clobbered registers

Entire CPU state is reset (all registers, all mode stacks, CPSR).

Algorithm

  1. Switch CPSR to System mode with IRQ+FIQ disabled (mode value 0xDF).
  2. Write 0 to REG_IME (0x04000208) to mask interrupts.
  3. Re-initialize the mode stacks via 0x000000E0: SVC SP = 0x03007FE0, IRQ SP = 0x03007FA0, SYS/USR SP = 0x03007F00.
  4. Install the default IRQ handler pointer at 0x03007FFC (a BIOS ROM address is stored there so early interrupts have a valid vector).
  5. Jump to the BIOS boot/post-boot routine at 0x00001929, which runs the startup logic and hands control to the cartridge.

Real constants observed: REG_IME = 0x04000208; handler-pointer slot 0x03007FFC; boot routine 0x00001929.

Edge cases & known bugs

  • Because this restarts the whole BIOS sequence (including the intro logo), it is heavier than SoftReset (SWI 00h), which jumps straight to a chosen entry point without replaying boot.

Hardware verification (2026-07-08)

Fixture-driven runs via the worker's no-blacklist opcode (swf), with wake sources / handlers installed through CpuSet pokes. Raw data: results/blacklist_fixtures1.csv.

swf 0x26 rebooted the GBA through the full BIOS boot sequence (intro, then multiboot-wait). A fresh multiboot upload succeeded ~6 s later without any power cycle — HardReset genuinely returns the console to the cold-boot BIOS path, including the multiboot listener.

Cycle count

Not measurable (the CPU context does not survive).

Open questions (need hardware verification)

  • Confirm behavior of the intro/boot routine at 0x00001929 under HardReset vs. genuine power-on (e.g. whether logo verification is repeated).

GBATEK cross-reference

GBATEK lists SWI 26h as an undocumented "HardReset" that restarts the BIOS boot process; consistent with the observed jump back into the cold-boot code.