Drew T
c4a627b22b
feat(phase-8): link libgte byte-identical (T11, value-first) — 53/58 objs / +120 fns
...
- NEW tools/gen_lib_subsegs.py: generate splat subseg lines + integrate stub list for a
multi-block library (section-size-correct block ends — bakes in the libc2/T6 boundary
gotcha so it can't recur). Reused for libspu/libsnd next.
- libgte = GTE math, 53 objects in 22 blocks across the old 800b region (game code
interleaved as 800b/800b_2..800b_7). Resegmented from the generator; integrate window
0x4787C..0x51804 so it sees exactly the 22 in-region blocks
- 5 libgs-gap libgte objects (MTX_05/07/11/REG03/REG11) DEFERRED — gsgap1/2/4/5 stay
stubs (gsgap2 != MTX_07 exactly, needs a sub-split); documented in worklist
- progress.py linked_subsegs() now resolves `$(VAR)` stub lists (LIBGTE_STUBS) — the long
multi-block lists are passed via a make var
- region byte-verified 58/58 (clean, no scattered .bss); rm'd src/800b.c (region starts
with a lib block) so splat regenerates the fragments; 22 src/libgteN.c + 6 game frags
- dual byte-gate PASS: 143dbb89 with and without the libgte objects
- LINKED 590 -> 710 (+120); REAL still 43; byte-identical 37.93%
- reordered remaining libs value-first (libspu/libsnd next; dense libcard/libapi last)
2026-06-15 18:43:27 -06:00
Drew T
c27a4432eb
feat(phase-8): library survey + progress.py LINKED category (T1-T2)
...
- T1: docs/psyq-worklist.md — byte-confirmed PsyQ footprint map (psyq_identify
over the original EXE): 9 footprint libs (199 placements) ranked ascending
difficulty; 3 skip (libmath/libc/libsn = 0 footprint). Findings: the libgs
"gaps" are libgte objects; heavy game/library interleaving (800=game+libspu+
libsnd+libetc, 800b~libgte, 800b2=game+libgpu/libc2/libapi/libmcrd/libcard);
cross-library aliases (C112, UT_RON/S_IH, S_R/S_W)
- T2: tools/progress.py LINKED category — INCLUDE_ASM stubs in integrated library
subsegs counted as a distinct byte-identical bucket; linked-subseg set sourced
from the Makefile's psyq_integrate calls (single source of truth -> auto-updates
per integration, no manifest drift). libcd+libgs: 340 stubs -> LINKED;
byte-identical/matchable now 425/2093 = 20.31%. Build unchanged (143dbb89)
- phase-ends/CURRENT_PHASE.md: Phase 8 plan + per-task log
2026-06-15 18:00:56 -06:00
Drew T
8ffb7f0607
feat(phase-7): -O0 split + 4 matches (42 real) + libcd.h — session B checkpoint
...
- per-file -O0 mechanism: split text c-subseg into boot@-O0 (src/boot.c) + 800@-O2
via splat resegmentation + Makefile target-specific CC1FLAGS; the boot/main/
game-mode-dispatch module (0x80010000-0x800123F0) is -O0, not the pinned -O2
(per-module compiler mixing, SETUP §5.5). Regression-gated byte-identical.
- 4 byte-matches (38->42 real, make check BYTE-IDENTICAL throughout): GameModeDispatch
(-O0 register-ptr far member), DebugMenuHandler (-O0 reserved-slot local), CdQueueBusy
(-O2 if/else order + branch polarity), CdReadRequest (-O2 early-return fall-through)
- PsyQ infra: include/psyq/libcd.h (CdlLOC/CdlFILE from the .gdt) + 4 named symbols
(CdSearchFile/CdPosToInt/CdIntToPos/VSync) in symbols.us.txt; func_* stubs renamed
- loader cluster non-jtbl COMPLETE (6 matched + 2 drafted): NON_MATCHING drafts of
LoaderInitFileTable + ResourceLoadStateMachine (logically faithful, residuals in-source)
- tooling: progress.py/difficulty.py fixed for the multi-file split (glob src/*.c, all
asm dirs, skip forward-decls); deterministic; 42 real / 4 NM
- flywheel: matching-cookbook §6 (-O0 detection + idioms), §7 (PsyQ types/symbols), T4
- build byte-identical 143dbb89f34491258bbc27810d0a12ec8b43a8dd from a full clean cycle
2026-06-14 19:37:05 -06:00
Drew T
379185a799
feat(phase-7): matching reports + 24 matches (38 real) — session A checkpoint
...
Mid-phase checkpoint (Drew-directed; phase NOT closed — R8 exception).
- reports (Task 3): tools/{progress,difficulty,dup_report}.py + `make report`
(deterministic) + `make sig-refresh`; authoritative baseline 38 real / 2050
matchable; empties audit 42/42 genuine jr;nop; docs/{progress,difficulty,
duplicates}.md digests
- matches (Tasks 4-5): +24 byte-identical (22 accessor leaves via the harvest
pattern + ResourceGetCdLoc + LoaderResetReadState); make check BYTE-IDENTICAL
throughout (143dbb89...)
- config/symbols.us.txt: declare func_80047CAC (R15) — fixes a latent
non-reproducibility (spimdisasm 1.41.0 auto-detect of an 8B inter-fn blob was
unstable across clean extracts; the committed Phase-6 baseline did not
deterministically rebuild)
- Task 1 rodata-island foundation: investigated (migration co-locates jump
tables + resolves refs, but byte-identity blocked by splat global-migration +
contiguous linker placement vs BFM's monolithic segment) -> DEFERRED to Task 2'
with a candidate fix; full findings in phase-ends/CURRENT_PHASE.md
- phase-ends/CURRENT_PHASE.md: reordered plan, loader-cluster triage, per-session
green-check log (1 of >=3 needed for the Gen1-exit milestone)
2026-06-14 17:36:12 -06:00