Overlay table
- Table at ROM offset
0x8DE00, size0x1680. - 180 entries Γ 32 bytes per entry.
- Per entry:
ram_addr,ram_size,bss_size,file_id,flags,compressed_size,is_compressed. - Total decompressed overlay code: 1,927,488 bytes.
- Extracted via
ndspy.rom.NintendoDSRom.fromFile().loadArm9Overlays().
Shared RAM slots
Many overlays map to the same RAM address β only one is resident at a time. The slot is selected by the game mode dispatcher in arm9.
| RAM address | Overlays sharing | Role |
|---|---|---|
0x02155A00 | 66 | Game-mode body / controller overlays |
0x021597A0 | 25 | Body / renderer slot 1 |
0x0215C540 | 20 | Body / renderer slot 2 |
0x021FB3C0 | 18 | Body / renderer slot 3 |
0x021B6080 | (ov156/157) | Body / renderer slot 4 |
0x021C3420 | (ov158/159) | Body / renderer slot 5 |
Persistent engines
| Overlay | RAM | Size | BSS | Role |
|---|---|---|---|---|
ov137 | 0x0216DA40 | 0x20860 | 0x27E0 | 2D rendering engine (sprite API, OAM transfer, VBlank handler). Loaded persistently across most game modes. |
ov138 | 0x0216DA40 (shares slot) | varies | β | Tongari 3D map engine. Alternates with ov137 depending on game mode. |
The VBlank handler at 0x02185BF8 in ov137 transfers shadow
OAM to 0x07000000/0x07000400. The ARM9 VBlank
handler at 0x0207001C handles the wider system (DMA timing,
audio buffer, etc.).
Controller / body pattern
UI screens use a two-overlay pattern: a controller
(state machine + asset loading) plus a body (per-screen
sprite placement + interaction logic). The controller calls into the
body at FUN_xxxxxxxx entry points; the body reads its
sprite-placement table from .rodata.
Known controller β body mappings
| Container | Controller | Body | Body init function |
|---|---|---|---|
2d/buyitem.lzs | ov003 | ov070 | FUN_02159828 @ 0x02159828 |
2d/itemorderwnd.lzs | ov003 (shared) | ov070 | same |
2d/chest.lzs | ov013 | TBD | β |
2d/dustbox.lzs | ov013 | TBD | β |
Per-overlay roles (excerpt)
Full table in notes/phaseA_ghidra/overlay_role_final.json. Highlights:
| Overlay | RAM | Role |
|---|---|---|
ov003 | 0x02155A00 | Buyitem controller (shop state machine) |
ov010, ov041, ... | 0x02155A00 | Game-mode controllers (66 share this slot) |
ov070 | 0x021597A0 | Buyitem body (renderer) |
ov137 | 0x0216DA40 | 2D rendering engine (persistent) |
ov138 | 0x0216DA40 | 3D map engine |
ov156/157 | 0x021B6080 | Slot 4 bodies |
ov158/159 | 0x021C3420 | Slot 5 bodies |
Nintendo DWC (wireless)
The VBlank handler in ov137 is the game engine. The other
VBlank handler that appears in some Konami DS builds is Nintendo DWC
(wireless library) β not present here.
Source
notes/phaseA_ghidra/DISCOVERIES.mdβ overlay table + per-RAM-slot membershipnotes/phaseA_ghidra/overlay_role_final.jsonβ per-overlay role classificationnotes/phaseA_ghidra/BUYITEM_RECIPE_CRACKED.mdβ controller/body pattern worked example