Skip to content

GBA BIOS SWI Map (from binary)

  • Target BIOS: SHA1 300c20df6731a33952ded8c436f7f186d25d3492 (16384 bytes)
  • Ghidra load: ARM:LE:32:v4t, base 0x00000000
  • Dispatcher: 0x140, jump table base: 0x1c8
  • Low bit of address set (odd) = THUMB entry, clear (even) = ARM entry.

Exception vectors (0x00)

Addr Vector Branch
0x00 Reset b 0x68
0x04 Undefined b 0x1c
0x08 SWI b 0x140
0x0C Prefetch Abort b 0x1c
0x10 Data Abort b 0x1c
0x14 (reserved) b 0x1c
0x18 IRQ b 0x128
0x1C FIQ b 0x1c

SWI jump table (0x1c8)

SWI Entry Mode Name
0x00 0x000000B4 ARM SoftReset
0x01 0x000009C3 THUMB RegisterRamReset
0x02 0x000001A0 ARM Halt
0x03 0x000001A8 ARM Stop/Sleep
0x04 0x00000330 ARM IntrWait
0x05 0x00000328 ARM VBlankIntrWait
0x06 0x000003B4 ARM Div
0x07 0x000003A8 ARM DivArm
0x08 0x00000404 ARM Sqrt
0x09 0x00000474 ARM ArcTan
0x0A 0x000004FD THUMB ArcTan2
0x0B 0x00000B4D THUMB CpuSet
0x0C 0x00000BC4 ARM CpuFastSet
0x0D 0x00000378 ARM GetBiosChecksum
0x0E 0x00000C2C ARM BgAffineSet
0x0F 0x00000CE0 ARM ObjAffineSet
0x10 0x00000F60 ARM BitUnPack
0x11 0x000010FC ARM LZ77UnCompWram
0x12 0x00001194 ARM LZ77UnCompVram
0x13 0x00001014 ARM HuffUnComp
0x14 0x00001279 THUMB RLUnCompWram
0x15 0x000012C1 THUMB RLUnCompVram
0x16 0x00001333 THUMB Diff8bitUnFilterWram
0x17 0x0000135D THUMB Diff8bitUnFilterVram
0x18 0x00001399 THUMB Diff16bitUnFilter
0x19 0x00000801 THUMB SoundBias
0x1A 0x00001665 THUMB SoundDriverInit
0x1B 0x0000179D THUMB SoundDriverMode
0x1C 0x00001DC5 THUMB SoundDriverMain
0x1D 0x0000210D THUMB SoundDriverVSync
0x1E 0x00001825 THUMB SoundChannelClear
0x1F 0x000018D9 THUMB MidiKey2Freq
0x20 0x000013C5 THUMB SoundWhatever0 (MidiKey2Freq helper)
0x21 0x00001435 THUMB SoundWhatever1
0x22 0x000014C1 THUMB SoundWhatever2
0x23 0x000014FD THUMB SoundWhatever3
0x24 0x00001515 THUMB SoundWhatever4
0x25 0x000028CF THUMB MultiBoot
0x26 0x0000008C ARM HardReset
0x27 0x000001AC ARM CustomHalt
0x28 0x00001879 THUMB SoundDriverVSyncOff
0x29 0x000018C9 THUMB SoundDriverVSyncOn
0x2A 0x00002693 THUMB SoundGetJumpList

SWI 0x2B+ : out of table range (no valid SWI).