ov046 β€” overlay detail

DS game only γ¨γ‚“γŒγ‚Šγƒœγ‚¦γ‚·γ¨γŠγ—γ‚ƒγ‚Œγͺまほう぀かい The field guide documents the DS game's internals.

containers: 2d/expect.ofs, 2d/selmaterial.lzs, expect (+6 more)

ov046 magic_ui

containers: 2d/expect.ofs, 2d/selmaterial.lzs, expect (+6 more)

Header

Numeric metadata for this overlay as read from the overlay table at ROM offset 0x8DE00 (per-entry stride 32 bytes). Function counts, data-item counts, and the call-graph fan-out are from a Ghidra 11.3.1 headless auto-analysis pass.

Overlay ID 46
File ID 46
RAM load address 0x02155a00
RAM size 15,776 bytes (0x3da0)
BSS size 0 bytes
On-disk compressed size 13,292 bytes
Compression flag 0x1 (BLZ-compressed)
Functions 62
External calls 85
Jump tables 6
Data items 331
Code coverage 78% (12,346 of 15,776 bytes)

Reading the binary

The overlay ships on the cart at file ID 46 under the BLZ code-LZ compression wrapper (the same backward-LZ scheme Nintendo uses for executable ARM9 code). At load time the engine reads the overlay table entry at ROM offset 0x8DE00 + 46 * 0x20, allocates the destination RAM region at 0x02155a00, decompresses the body in-place (if compressed), and resolves any external relocations.

To inspect this overlay outside the running game, decompress overlay/overlay_046.bin with ndspy.codeCompression.decompress() (Python ndspy library) and load the resulting plaintext into Ghidra or IDA at base address 0x02155a00. The raw Ghidra auto-analysis dump used to populate this page lives at notes/overlay_knowledgebase/raw/ov046.json; the per-overlay descriptive markdown is at notes/overlay_knowledgebase/ov046.md.

Embedded strings

1 UTF-16 LE string live inside this overlay's compiled binary. These addresses are absolute (inside the overlay's RAM image after load). The text is stored as little-endian UTF-16 code units, NUL-terminated.

0x0215646f `揢蓼怠ぃ`

Container references

Distinct container basenames referenced by this overlay. Each is loaded via the content cache by passing the basename string to a lookup that resolves it to a file ID in the ROM's FAT. The path column shows the file's location in the clean extract, where resolved.

Unresolved

These container basenames appeared in the overlay's string table but no file of that name was found in the clean extract. Most are false-positive ASCII matches (function names, register maps, fragments of other strings); a few may be containers that the overlay names but never actually opens. Listed for completeness.

Function list

Functions Ghidra auto-identified inside this overlay's RAM range. Names prefixed FUN_ are auto-generated from the function's entry address; size is in bytes; the "calls" column counts both intra-overlay branches and external ARM9 call targets. The "strings" column counts how many UTF-16 LE strings each function references.

Show all 62 functions
# Address Size Calls Strings Role hint
1 0x02155a00 86 2 0 code
2 0x02155fd8 16 0 0 trampoline / small helper
3 0x02155fe8 1,134 49 0 high-fan-out (likely dispatcher / setup)
4 0x02156494 276 16 4 refs: selmaterial.lzs \| selmaterial.lzs \| selmaterial.lzs \| selmaterial.lzs
5 0x021565c4 46 3 0 code
6 0x021565f8 288 15 3 refs: selmaterial.lzs \| selmaterial.lzs \| selmaterial.lzs
7 0x02156730 64 5 0 code
8 0x02156774 134 0 0 code
9 0x021567fc 112 9 0 code
10 0x02156878 56 4 0 code
11 0x021568b0 504 20 0 code
12 0x02156aac 104 5 1 refs: mgcinfo.lzs
13 0x02156b20 62 3 0 code
14 0x02156b60 64 1 0 code
15 0x02156ba0 450 19 0 code
16 0x02156d7c 16 0 0 trampoline / small helper
17 0x02156d90 12 1 0 trampoline / small helper
18 0x02156da0 12 0 0 trampoline / small helper
19 0x02156db0 12 1 0 trampoline / small helper
20 0x02156dc0 230 10 0 code
21 0x02156eb4 356 14 0 code
22 0x02157030 106 4 0 code
23 0x021570ac 818 21 0 high-fan-out (likely dispatcher / setup)
24 0x02157400 64 0 0 code
25 0x02157444 772 34 0 high-fan-out (likely dispatcher / setup)
26 0x02157770 76 5 0 code
27 0x021577bc 24 2 0 trampoline / small helper
28 0x021577d8 90 1 0 code
29 0x02157834 230 15 0 code
30 0x0215792c 200 14 0 code
31 0x02157a04 412 15 0 code
32 0x02157bc4 154 5 0 code
33 0x02157c70 58 0 0 code
34 0x02157cac 8 0 0 trampoline / small helper
35 0x02157cb4 166 7 0 code
36 0x02157d64 46 2 0 code
37 0x02157d98 82 3 0 code
38 0x02157df4 34 0 0 trampoline / small helper
39 0x02157e1c 28 0 0 trampoline / small helper
40 0x02157e3c 44 4 0 code
41 0x02157e6c 100 3 0 code
42 0x02157edc 138 3 0 code
43 0x02157f78 312 1 0 code
44 0x021580bc 86 0 0 code
45 0x02158120 58 3 0 code
46 0x02158164 40 1 0 code
47 0x02158194 48 0 0 code
48 0x021581cc 310 10 1 refs: recipepos
49 0x02158320 176 8 0 code
50 0x021583e0 886 39 12 refs: selmaterial.lzs \| 2d/expect.ofs \| 2d/expect.ofs \| 2d/expect.ofs \| 2d/expect.ofs \| expect.ofs
51 0x021587bc 148 5 0 code
52 0x02158858 82 2 0 code
53 0x021588ac 76 2 0 code
54 0x021588f8 498 10 0 code
55 0x02158b24 92 2 0 code
56 0x02158b84 480 5 0 code
57 0x02158da4 360 4 0 code
58 0x02158f14 588 8 1 refs: selmaterial.lzs
59 0x021591a8 68 1 0 code
60 0x021591f0 110 7 0 code
61 0x02159268 232 11 0 code
62 0x02159368 12 1 0 trampoline / small helper

Open questions & conflicts

Open questions / unknowns

Conflicts with the prior shallow pass

Source