Games are distributed in a new proprietary cartridge format; it's still called Game Pak but features a smaller design.

The new Game Pak design for GBA games .
Programming for the GBA shares some philosophies with the Super Nintendo but also inherits the advancements of the early 2000s, such as standardised high-level languages, reliable compilers, debuggable RISC CPUs, non-proprietary workstations for development, comparatively better documentation and... access to the World Wide Web!
That said, GBA programs are mostly written in C, with performance-critical sections in assembly (ARM and Thumb) to save cycles. The official Software Development Kit (SDK) that Nintendo supplied to authorised game studios contained libraries and compilers.
Accessing cartridge data
While the ARM7 has a 32-bit address bus, there are only 24 address lines connected to the cartridge.
This means that, in theory, up to 16 MB can be accessed on the cartridge without needing a mapper. However, if we take a look at the memory map, it shows that 32 MB of cartridge ROM are accessible . So, what's happening here? The truth is, the Game Pak employs 25-bit addresses (which explains that 32 MB block), but its least significant bit is fixed at zero. Thus, only the remaining 24 bits are set. That's how Game Pak addressing works.

Representation of the Game Pak addressing model. Notice how the last bit of the 25-bit address (named 'A0') is always zero. I must also point out that, in reality, the address and data pins are also shared/multiplexed.
Now, does this mean that data located at odd addresses (with the least significant bit at 1) is inaccessible? No, because the data bus is 16-bit: For each transfer, the CPU or DMA fetches the addressed byte plus the next, enabling to read both even and odd addresses. As you can see, this is just another work of engineering that makes full use of hardware capabilities while reducing costs.
Curiously enough, earlier 26-bit ARM CPUs also resorted to the same technique. These housed a 24-bit Program Counter, as the bits had to be multiples of eight (a.k.a. word aligned), meaning the last two bits of the 26-bit address were always zero. However, since these CPUs fetch 32 bits (the addressed byte plus the next three), the entire 26-bit address space can still be accessed.
Cartridge RAM space
To hold saves, Game Paks could either include :
- Static RAM (SRAM): This is volatile storage, so it needs a battery to retain its content. The console's wiring makes SRAM accessible through the CPU's memory map, where it can size up to 64 KB (although commercial games did not exceed 32 KB).
- Flash ROM: Similar to SRAM but without the need for a battery. However, it has a limited number of write cycles.
- Electrically Erasable Programmable ROM (EEPROM): These require a serial interface and can theoretically scale to any size (often found up to 8 KB).
Accessories
Throughout its lifespan, the GBA enjoyed an interesting range of accessories that reimagined how this console could be used. Many of the peripherals devised took advantage of Multiboot, the versatility of the EXT port, and the flexibility of the Game Pak slot.
The new EXT slot
Speaking of which, the earlier Game Boy Link connection (also called 'EXT' or serial interface) got an update again. The same 6 pins that brought multiplayer capabilities and accessories persisted, but the electronics behind each pin evolved significantly.
First things first, the new Link cable that was designed for the GBA exhibits a few new traits:
- Distinct colouring and sizing: One end is purple, while the other is grey and larger. Behind the scenes lies a hardwired hierarchy: the purple end designates the connected console as the master, and the gray end designates the slave.
- An extra socket in the middle of the cable: This enables daisy-chaining another GBA Link cable using the purple/master plug.
The new design makes it incompatible with the previous consoles (and games). However, it can now easily chain up to four GBAs, thereby standardising larger multiplayer arenas.
Additionally, Nintendo also shipped a variant of the GBA Link cable called the 'GameCube-Game Boy Advance Link cable', which is specifically wired to connect a GBA to a GameCube, I explain more later.
Internal changes
From the console side, the original serial connection was expanded with extra modes of operation, selected with the use of two registers.
These modes are grouped into two categories:
- Synchronous modes, based on the Serial Peripheral Interface (SPI) protocol. This protocol reserves one pin to drive the clock, which the master (denoted by the purple plug) uses to set the pace.
- This is how the Link connection of the Game Boy and Game Boy Color always operate.
- Asynchronous modes, based on the Universal Asynchronous Receiver-Transmitter (UART) interface. There's no clock directing the signal; the only arrangement is a common baud rate (number of bits per second) defined by the game. The master console simply signals the start and end of each transfer.
- Removing the need for a clock frees lines that are used instead to coordinate the transfer between each console.
GBA games can choose between synchronous and asynchronous modes, while Game Boy titles running on the GBA are restricted to their legacy SPI modes. 'Officially', the latter only support the original Link cable, but here's the interesting part: GB games also work with two GBA Link cables daisy-chained and connected to the consoles through the gray endpoints (making the two consoles slaves). This is because that arrangement cross-wires the data lines between the two consoles, replicating the setup of the original Link cable.
Exchange modes
The EXT connector provides four programmable pins, which the console manages through these modes of operation :
- Normal Mode, using the SPI protocol. It's primarily designed to exchange data between a GBA and an accessory. The interface can send and receive packets of 8 or 32 bits, and operates at either 256 KHz or 2 MHz, achieving transfers of 32 KB/s or 250 KB/s, respectively. This is quite fast, however, due to reliability issues, the faster speed is only intended for accessories directly connected to the socket (without a cable).
- Even though the speed is high, it's up to the ARM CPU (running at 16.78 MHz) to digest the transferred data in time, which may be a challenge given that it's busy with many other tasks.
- Multi-player Mode, using UART. In exchange for speed, it enables to communicate with up to four daisy-chained GBAs. Essentially, the four GBAs take turns broadcasting a 16-bit packet over the same data line. To make this work, each GBA signals the next one to transfer its packet, which is possible thanks to the wiring of the new Link cable. At the end of the transfer, all GBAs contain the packets each has sent, stored in four different 16-bit registers.
That said, remember Multiboot? This function is compatible with both Normal and Multiplayer modes. It's up to the master to choose which. The choice depends on the number of peripherals and speed needed.
Even more modes

The GameCube-Game Boy Advance link cable , specifically crafted to connect to the GameCube's controller port (handled by the Serial interface).
For very particular accessories, there are additional communication modes available:
- UART Mode. It behaves like an RS-232 interface. Specifically, a 5-wire null modem with RTS/CTS flow control. Apart from that, it sends and receives data in 8-bit packets; and uses a FIFO buffer to queue up to four packets while they are being sent or received.
- JOY BUS Mode. This is a proprietary protocol in which the GBA becomes a peripheral for the GameCube. The GBA can only receive packets, process the contents, and reply.
- This is exclusively used with the 'GameCube-Game Boy Advance Link cable', which assigns the GBA as a slave.
- General-purpose Mode. As the name indicates, all four pins become controllable by the program, enabling to implement a custom protocol.