ARM7's reset vector points to memory address 0x00000000, where a 16 KB ROM happens to reside. This means that, upon powering on, the Game Boy Advance first boots from that ROM. The program that it runs makes the console show the iconic splash screen and then decide whether to load the cartridge game.

Splash animation halfway through.
Similar to the previous generation, the bootloader takes care of hardware initialisation and copy-protection. However, 16 KB gives the ROM plenty of space to also provide software routines, which games may call to simplify certain operations and reduce cartridge size . This is why the GBA's ROM is commonly referred to as a 'Basic Input/Output System' or BIOS.
Among the available routines, we can find:
- Arithmetic functions: Subprograms to carry out division, square root and arc tangent.
- Affine matrix calculation: Given a 'zoom' value and angle, it calculates the affine matrix to be supplied to the PPU in order to scale or rotate a background or sprite.
- There are two functions, one for sprites and another for backgrounds. Their parameters differ slightly but the principle is the same.
- Decompression functions: Implements decompression algorithms including Run-Length, LZ77 and Huffman. They also offer bit unpacking and sequential difference.
- Memory copy: Two functions that move memory around. The first copies 32-byte blocks using specialised opcodes once (
LDMIAto load andSTMIAto store). The second copies 2-byte or 4-byte blocks using repeatedLDRH/STRHorLDMIA/STMIAopcodes, respectively. Thus, the second function is more flexible but not as fast. - Sound: Implements the aforementioned MIDI sequencer! It includes many functions to control it.
- Power interface: Provides shortcuts for resetting, clearing most of the RAM, halting the CPU until a specific event occurs (i.e. V-blank or a custom one), and switching to 'low-power mode' (it just pauses the audio and PPU).
- Multiboot: Uploads a program to another GBA through the 'EXT' port (the Link/serial interface) and kickstarts it. The protocol is proprietary and the uploaded program is stored in the other console's EWRAM.
- Activate Game Boy Color mode: This is undocumented and only called during the boot process. It essentially sets up the PPU and VRAM for the Game Boy Color game, disables the ARM CPU, places the SM83 in control, and finally boots the Game Boy Color ROM.
The BIOS ROM is connected via a 32-bit bus and it is implemented using a combination of ARM and Thumb instructions, though the latter is more prevalent.
Finally, remember that all of these routines run only on the ARM7. In other words, there isn't any hardware acceleration available to speed up these operations. Hence, Nintendo provided all of this functionality in software.
Secondary boot
In the absence of a valid cartridge, the bootloader waits indefinitely for an external device to send a Multiboot program through the 'EXT' port. This is how the Multiboot 'uploader' is able to transfer its program in the first place.
Games often referred to this functionality as Single-Pak Link, because it allowed multiple connected consoles to play a multi-player game using only one cartridge. Behind the scenes, the console with the cartridge sent a small copy of its game to connected consoles via Multiboot.
