Tea Room

2026-07-07 · 8 min read

emuGBDS and the GBA slot question

A study on why Nintendo DS emulation can acknowledge GBA hardware but still not fully treat GBA games as a first-class execution target, and how emuGBDS is progressing around that question.

emuGBDS is interesting to me because it sits in a strange but meaningful area between the Game Boy Advance and the Nintendo DS. There is already an understanding that melonDS has a form of GBA functionality, especially because the Nintendo DS itself has a Slot-2 area and a historical relationship with GBA cartridges. However, that does not automatically mean that GBA games become a complete first-class gameplay target inside the emulator.

The distinction matters. A system can recognize that GBA hardware exists, expose the slot, or support certain transitions, but still remain architecturally focused on the DS. This is where I would see the limitation: melonDS is primarily a DS emulator, so the center of gravity is still ARM9, ARM7 in DS mode, DS memory mapping, DS video, DS sound, firmware, and gamecard behavior. GBA functionality exists around that world, but it is not necessarily the main world being simulated.

The DS is not simply a faster GBA

The Nintendo DS has a dual-processor architecture. In DS mode, the ARM9 becomes the main processor for most game code, while the ARM7 is still present for sound, input, firmware-side work, and compatibility-related responsibilities. GBATEK describes this separation clearly by distinguishing NDS9 as the ARM9 processor and its memory and I/O ports, NDS7 as the ARM7 processor in DS mode, and GBA as the ARM7 processor operating in GBA mode.

ds-processor-view.txt
NDS mode:
  ARM9  -> main game code, video engines, DS memory control
  ARM7  -> sound, firmware-side work, input, IPC support

GBA mode:
  ARM7  -> behaves as the GBA execution CPU
  ARM9  -> not the center of execution

This is why the DS should not be interpreted as only a stronger GBA. It carries GBA compatibility, but its native mode is a different architecture with a different division of responsibility. There is balance throughout the system: one side is the DS as its own machine, while the other side is the inherited GBA behavior that must still be respected if compatibility is the goal.

The GBA side has its own memory identity

GBATEK documents the GBA Game Pak ROM region around 08000000h and the SRAM region around 0E000000h on the original GBA memory map. On the DS memory map, the GBA Slot appears again, but it appears inside a DS system that can decide which processor has access and how the slot is treated. This creates the architectural problem: the GBA cartridge is not just a file to open, but a memory and timing environment.

gba-and-ds-slot-map.txt
GBA memory view:
  08000000h-09FFFFFFh  Game Pak ROM / Flash ROM
  0A000000h-0BFFFFFFh  Game Pak ROM mirror / wait state area
  0C000000h-0DFFFFFFh  Game Pak ROM mirror / wait state area
  0E000000h-0E00FFFFh  Game Pak SRAM

DS memory view:
  08000000h  GBA Slot ROM
  0A000000h  GBA Slot RAM

This may look simple when written as addresses, but it is not simple when implemented. A GBA game expects its own CPU behavior, BIOS behavior, memory access timing, interrupt behavior, DMA behavior, timers, video registers, audio timing, and save memory behavior. If an emulator only sees the cartridge as an accessory to the DS side, it can miss the deeper requirement: GBA software expects the machine around it to become the GBA.

Why melonDS having GBA functionality is not the same as GBA game focus

This is where I would compare the situation lightly. melonDS is very strong because its purpose is centered on the Nintendo DS. It makes sense that the emulator gives attention to DS correctness first: ARM9 and ARM7 interaction, DS gamecards, firmware, 2D and 3D engines, audio, input, and timing. If GBA functionality exists there, it is usually attached to the DS use case, such as Slot-2 behavior, rather than a complete philosophical shift toward GBA gameplay as the main target.

I would not see this as a weakness in melonDS, but more as a boundary of purpose. A tool that is made for the DS will naturally explain the GBA through the DS. The issue is that GBA games need to be explained through the GBA itself. It is similar to interpreting an artwork only through the background color; the color is there, but there is more to uncover underneath it.

How emuGBDS approaches the problem

emuGBDS is progressing by separating the concern instead of hiding it. The repository already describes an in-house GBA core scaffold, an in-house DS core scaffold, optional melonDS adapter support, and a Slot-2 transition path. This matters because it means GBA support is not treated only as a side attachment. It can become its own internal target while still being studied beside the DS.

emugbds-runtime-shape.txt
emuGBDS direction:
  ingba -> in-house GBA core
  inds  -> in-house DS core
  slot2 -> DS firmware transition into GBA-side behavior
  adapter -> optional external melonDS integration

The current progress is still scaffolded and incremental, but that is also why the architecture is worth discussing. The roadmap focuses first on stabilizing the in-house GBA core: CPU state, ARM banked registers, mode switching, interrupts, BIOS and SWI behavior, timers, DMA timing, and rendering paths. These are not decorative tasks. They are the foundation of making GBA execution meaningful.

gba-core-progress.txt
GBA core progress targets:
  CPU state model
  ARM mode switching
  exception entry and return
  IRQ trigger and acknowledge timing
  BIOS / SWI behavior
  timer and DMA coupling
  video paths beyond simple smoke tests

This is also why emuGBDS feels different from simply asking a DS emulator to run a GBA game. The project can treat the GBA game as a system that deserves its own correctness. The DS side still matters, especially for Slot-2 transition and architecture study, but the GBA side is not just a historical note.

The architectural challenge

The main challenge is that DS and GBA compatibility is not only a question of loading a ROM. It is a question of switching the meaning of the machine. In DS mode, the system is divided between ARM9 and ARM7, with memory regions and access rights arranged around DS execution. In GBA mode, the expectation changes. The ARM7 becomes the center, and the hardware behavior must follow the older GBA identity.

slot2-handoff-model.txt
DS firmware path:
  boot DS firmware
  detect Slot-2 cartridge
  prepare transition state
  hand control toward GBA execution
  map GBA ROM and RAM expectations
  run through GBA core behavior

There is a certain philosophy in this. The DS contains the memory of the GBA, but it does not always express it directly. The emulator must decide whether the GBA is only a slot, or whether it is a full system that deserves to be represented. emuGBDS chooses the second direction by making the GBA core explicit and by using the DS transition path as an integration target.

Why this matters

For me, this makes emuGBDS useful as a study of boundaries. It studies where the DS ends, where the GBA begins, and how a cartridge slot can represent more than just an address range. The progress may still be early, but the direction is clear: make the GBA side understandable, testable, and eventually playable enough instead of leaving it as an accessory to DS emulation.

Thus, the project becomes more than an emulator experiment. It becomes an architectural question about compatibility. melonDS can remain excellent at DS emulation while emuGBDS explores the deeper GBA game functionality that lives behind the Slot-2 idea. Both can exist with different focuses, but emuGBDS gives me a clearer place to study the GBA behavior itself.

Return to Tea Room

© 2026 Shroomy/Lucete. All rights reserved. • v2.0