The first 192 bytes (0x00–0xBF) of the ROM. The console’s BIOS reads them when it starts a game. The
fields and the checksum formula are from GBATEK (“GBA Cartridge Header”);
the logo bytes are from the source of the gbafix tool.
Fields
| Offset | Size | Field | What it holds |
|---|---|---|---|
0x00 | 4 | Entry point | One ARM instruction, a branch to the start of the program. A branch (B) is cond 101 L offset: the offset is a signed 24-bit number of words counted from the instruction two words ahead, so EA00002E goes to 0x08000000 + 8 + 0x2E × 4 = 0x080000C0. The BIOS jumps here after its checks. |
0x04 | 156 | Nintendo logo | A compressed bitmap of the logo the console shows at start-up, identical in every licensed game. The BIOS compares it with its own copy and stops the game if they differ. See below. |
0xA0 | 12 | Game title | Upper-case ASCII, padded with 0x00. |
0xAC | 4 | Game code | Four ASCII characters naming the game: a unique letter, two characters of the short title and a character for the destination or language. |
0xB0 | 2 | Maker code | Two ASCII characters naming the publisher, for example 01 for Nintendo. The viewer shows the characters and does not name the publisher: no list was available to check against. |
0xB2 | 1 | Fixed value | Always 0x96. The BIOS checks it. |
0xB3 | 1 | Main unit code | 0x00 for the Game Boy Advance. |
0xB4 | 1 | Device type | Usually 0x00; bit 7 relates to debugging hardware. |
0xB5 | 7 | Reserved | Zero. |
0xBC | 1 | Software version | Usually 0x00. |
0xBD | 1 | Complement check | A checksum of 0xA0–0xBC, below. The BIOS checks it. |
0xBE | 2 | Reserved | Zero. |
The complement check
GBATEK gives the formula as chk = 0; for i = 0xA0 to 0xBC: chk = chk − byte[i]; chk = (chk − 0x19) and 0xFF. In words: take
zero, subtract every byte from 0xA0 to 0xBC, subtract 0x19, keep the low byte. The result is
stored at 0xBD. The viewer computes it again and shows the field as correct or as wrong with the value it should have.
The Nintendo logo
The 156 bytes at 0x04 are the same in every licensed game. The viewer compares them with this table (from the source of
gbafix, the tool that writes them into homebrew) and says how many bytes differ. A real console stops at the logo screen
if they differ; most emulators do not check.
24 FF AE 51 69 9A A2 21 3D 84 82 0A 84 E4 09 AD 11 24 8B 98 C0 81 7F 21
A3 52 BE 19 93 09 CE 20 10 46 4A 4A F8 27 31 EC 58 C7 E8 33 82 E3 CE BF
85 F4 DF 94 CE 4B 09 C1 94 56 8A C0 13 72 A7 FC 9F 84 4D 73 A3 CA 9A 61
58 97 A3 27 FC 03 98 76 23 1D C7 61 03 04 AE 56 BF 38 84 00 40 A7 0E FD
FF 52 FE 03 6F 95 30 F1 97 FB C0 85 60 D6 80 25 A9 63 BE 03 01 4E 38 E2
F9 A2 34 FF BB 3E 03 44 78 00 90 CB 88 11 3A 94 65 C0 7C 63 87 F0 3C AF
D6 25 E4 8B 38 0A AC 72 21 D4 F8 07
Multiboot fields
A program can also be sent to the console over the link cable (multiboot). The 192-byte header is then loaded to
0x02000000 and four more fields follow it. In a cartridge ROM these bytes are ordinary program bytes, so
the viewer shows them as a separate table and does not mark them in the tree.
| Offset | Size | Field | What it holds |
|---|---|---|---|
0xC0 | 4 | RAM entry point | Where the image starts running. |
0xC4 | 1 | Boot mode | Written by the BIOS. |
0xC5 | 1 | Slave ID | Written by the BIOS in the normal and multi-player modes. |
0xC6 | 26 | Not used | |
0xE0 | 4 | Joy bus entry point | Used instead of the RAM entry point when the image arrives over the Joy bus. |
Backup media strings
The header does not say whether the cartridge has save memory or of what kind. Games made with the Nintendo save library contain a text string, word-aligned somewhere in the ROM, that names it (GBATEK, “GBA Cart Backup IDs”). The three digits are the version of the library. The viewer lists the strings it finds, as facts: it does not decide anything from them.
| String | Medium |
|---|---|
EEPROM_Vnnn | EEPROM, 512 bytes or 8 KiB |
SRAM_Vnnn | SRAM, 32 KiB |
FLASH_Vnnn | Flash, 64 KiB (older libraries) |
FLASH512_Vnnn | Flash, 64 KiB (newer libraries) |
FLASH1M_Vnnn | Flash, 128 KiB |