System BIOS
Mapped by the hardware, not the cart. Contains the boot animation, SWI handlers,
and interrupt vector. Our code never lives here; we only call into it
(SWI 0x05 VBlankIntrWait, 0x0B CpuFastSet).
External Work RAM · EWRAM
The big pool. Slower than IWRAM but eight times larger. In this build the linker
reports .ewram at 0 bytes — every runtime buffer fits in IWRAM, and
EWRAM is reserved as scratch for future dialogue / scene buffers.
Internal Work RAM · IWRAM
At boot the runtime copies .data (6,452 B of initialised globals)
from ROM to 0x0300163C, and zero-fills .bss (5,692 B) at
0x03000000. The rest is stack + free heap for actor state, dialogue
working set, and save I/O buffers.
I/O registers
Not really "memory" — the PPU, DMA, sound, timer, and input registers all sit in this window. Every frame the engine writes DISPCNT, BGxCNT, palette-bank IO, and the DMA channels here.
Palette RAM
Split in two 512-byte halves: BG palette at 0x05000000, OBJ palette
at 0x05000200. Each half holds 16 banks × 16 colours. Ludexel uses
bank 0 for the shared UI palette; text-bar slots 4–10 hold the HP/XP blue, track,
green, yellow, red, and platform shadow. Slot 5 and slots 11–15 are free — the
reserved room for the pending MP palette entry.
Video RAM · VRAM
The busiest region at boot. Overworld map tiles fill charblock 0. Text and UI
share charblock 2 as FONT_CHARBLOCK — 512 tiles, and every slot is
taken (font glyphs, box corners, platform tiles, HP/XP/track/yellow/red bar tiles).
This is the structural blocker preventing a distinct MP bar tile without a
screenblock relocation.
Object Attribute Memory · OAM
Each visible sprite (hero, NPCs, portal arrow, battle animations, notification icons) occupies one 8-byte OAM slot. The engine reserves fixed IDs for the HUD and fills the rest per-scene.
Cartridge ROM · Wait State 0
Where every byte of ludexel.gba lives. Code (.text) is
executed in place from ROM. Read-only data (.rodata — tilesets, maps,
audio, dialogue, portraits) is huge compared to code: assets outweigh code
4:1. The .data initialiser image sits at the tail; the BIOS copies it
into IWRAM before main() runs.
Cartridge SRAM · save memory
Only the first 32 KiB is wired. Three save slots × 8 KiB (0x0000,
0x2000, 0x4000), then the debug-warp block at
0x7000. Each slot holds a SaveData struct — 4,200 B today
— leaving generous headroom per slot for roster growth.