Files
Going-Commando/crates
ReaperOfVeriod 39462d2cf9 Correct: overlay.bin is the seven-section program, not the .lit section
The Phase 3 port brought parse_overlay_sections with it, which makes the overlay's
shape checkable for the first time. It corrects a claim I committed when
vendoring the decomp.

What I wrote then: overlay.bin +0x00 is 0x1A7C80, that is the .lit load base, "so
the first header word is the load base of the section this file is", and therefore
"overlay.bin IS the level's .lit section".

It is not. overlay.bin is the whole seven-section program. .lit is its first
section: 39,388 bytes at 0x1A7C80 on level 0, against a lump of 2,751,268.

    section 0  .lit   0x1A7C80 on all 27 levels
    section 1  .bss   kind 8 (NOBITS) on all 27, zero non-zero bytes
    sections 2-6  .data, lvl.vtbl, lvl.camvtbl, lvl.sndvtbl, .text

    kind sequence [1, 8, 1, 1, 1, 1, 1]   identical on 27/27
    section sizes fall 112 bytes short of the lump on 27/27
        (each section's size counts its own 16-byte header)

The error was reasoning from a constant to a statement about the file's nature. A
load base tells you where something is placed, not what the containing file is.
That is the same move as the other four withdrawals this session -- the 305x
class-ID slot, the UV-corner texcoords, the VIF code word, the DAW pointer -- all
of which read a single plausible item as evidence about the whole.

Worth noting what survives. The collision assert string is in SECTION 0 on all 27
levels, so the earlier $gp-relative search located it correctly even though the
reasoning about the file was wrong. The string being in .lit and the file being
.lit are different statements and only the first is true. A wrong reason can reach
a right answer; it is still worth correcting, because the next person to reason
from it would not.

Asserted in overlay_bin_is_the_seven_section_program_not_the_lit_section.

259 tests.
2026-10-14 03:10:24 +02:00
..