El vector de reinicio del ARM7 apunta a la dirección de memoria 0x00000000, donde reside una ROM de 16 KB. Esto significa que, al encenderse, la Game Boy Advance arranca primero desde esa ROM, cuyo programa muestra la icónica pantalla de inicio y luego decide si cargar el juego del cartucho.
Al igual que en la generación anterior, el gestor de arranque se encarga de la inicialización del hardware y la protección contra copia. Sin embargo, los 16 KB le dan espacio más que suficiente para incluir también rutinas de software que los juegos pueden invocar para simplificar ciertas operaciones y reducir el tamaño del cartucho . Por eso, la ROM de la GBA se conoce comúnmente como 'Basic Input/Output System' o BIOS.
Entre las rutinas disponibles encontramos:
- Funciones aritméticas: rutinas para realizar divisiones, raíces cuadradas y tangentes de arcos.
- Cálculo de la matriz afín: Dado un valor de "zoom" y un ángulo, calcula la matriz afín que se suministrará a la PPU para escalar o rotar un fondo o sprite.
- Hay dos funciones, una para los sprites y otra para los fondos. Sus parámetros son ligeramente diferentes, pero el principio es el mismo.
- Funciones de descompresión: implementan algoritmos de descompresión que incluyen Run-Length, LZ77 y Huffman. También ofrecen desempaquetado de bits y diferencia secuencial.
- Copia de memoria: dos funciones que mueven la memoria de un lado a otro. La primera copia bloques de 32 bytes usando un código de operación especializado para este tipo de transferencia (
LDMIApara cargar ySTMIApara almacenar) solo una vez. La segunda copia bloques de 2 o 4 bytes usando códigos de operaciónLDRH/STRHoLDMIA/STMIA, respectivamente. Por lo tanto, la segunda función es más flexible pero no tan rápida. - Sonido: ¡implementa el secuenciador MIDI mencionado anteriormente! Incluye muchas funciones para controlarlo.
- Interfaz de energía: accesos directos para reiniciar, borrar la mayor parte de la RAM, detener la CPU hasta que se produzca un determinado evento (V-blank o uno personalizado) o cambiar a "modo de bajo consumo" (que simplemente pausa el audio y la PPU).
- Multi-boot: carga un programa en otra GBA a través del puerto 'EXT' (la interfaz Link/serie) y lo pone en marcha. El protocolo es propietario y el programa cargado se almacena en la EWRAM del receptor.
- Activar el modo Game Boy Color: no está documentado y solo se invoca durante el arranque. Básicamente, configura la PPU y la VRAM para el juego de Game Boy Color, desactiva la CPU ARM, pone el SM83 al mando y, por último, arranca la ROM de Game Boy Color.
La BIOS está conectada a través de un bus de 32 bits y está implementada con una combinación de instrucciones ARM y Thumb, siendo la Thumb la más utilizada.
Por último, recuerda que todo esto solo funcionará en el ARM7. En otras palabras, no hay ninguna aceleración de hardware disponible para estas operaciones. De ahí que Nintendo proporcionara toda esta funcionalidad a través de software.
Arranque secundario
Si no hay ningún cartucho válido, el gestor de arranque espera indefinidamente a que un dispositivo externo envíe un programa Multi-boot a través del puerto 'EXT'. Así es como el 'cargador' Multi-boot puede transferir su programa en primer lugar.
Los juegos solían referirse a esta función como Single-Pak Link, ya que permitía que varias consolas conectadas entre sí jugaran en multijugador usando un único cartucho. Entre bastidores, la consola con el cartucho enviaba una pequeña copia de su juego a las demás consolas mediante Multi-boot.

