From b3000825f2a473b02f79b6cb0b598b186bcf22fc Mon Sep 17 00:00:00 2001 From: James Dansereau <106631954+jkdansereau@users.noreply.github.com> Date: Fri, 21 Aug 2026 20:30:50 -0400 Subject: [PATCH] =?UTF-8?q?PC=20port:=20phase=201.5=20=E2=80=94=20handoff?= =?UTF-8?q?=20notes=20updated=20for=20D33=20implementation=20session?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Record ROM-dump verification (No-Intro [!] byte-identical, CRCs re-checked) in AGENTS.md phase status, PCPortResearch §H state, and HANDOFF current state, so the next session starts from a verified foundation. --- AGENTS.md | 2 +- docs/HANDOFF.md | 4 ++++ docs/PCPortResearch.md | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/AGENTS.md b/AGENTS.md index f5fd70b1..a0a8e65e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -47,7 +47,7 @@ Run `/linkcheck` for this sweep. Record new findings in `docs/PCPortResearch.md` - **Phase 0 (scaffolding):** done, committed. - **Compile+link milestone:** all ~235 TUs compile and `ge007.x86_64.exe` links clean (`ninja ge007 -k 0`, 236/236). Findings D7–D17 in `docs/PCPortResearch.md` §11; asset stubs in `port/src/assetstubs.c`, fast3d no-ops in `port/src/gfxstub.c` (delete when real fast3d lands). - **Phase 1 (boot to window):** done — ROM loads/validates/maps at cart base 0x10000000 (`romdata.c`), SDL2 window + GL clear loop (`video.c`), absolute asset symbols from `scripts/gen_romassets.py` → `port/src/romassets_.s` (findings D18–D23). -- **Phase 1.5 (boot to first frame):** IN PROGRESS — mainThread runs through `bossInitMainthreadData()`; D31 (langInit file-load SIGSEGV) fixed via real-zlib decompression (`port/src/rzdecomp.c`, replaces the excluded `src/game/decompress.c`+`zlib.c`). Current blocker is **D32** (ROM-struct pointer-width): Part A (u32 layout in `ModelAnimation`) done; Part B **root-caused (D33)** — the ROM stores structured fields big-endian (per-field load-time fixup needed) + an x86-64 loop-stride bug in `expand_ani_table_entries`; fix designed, implementation next. Recurring sub-task: ABI/layout fixes per the D32 procedure (§H) as more asset loading is reached. +- **Phase 1.5 (boot to first frame):** IN PROGRESS — mainThread runs through `bossInitMainthreadData()`; D31 (langInit file-load SIGSEGV) fixed via real-zlib decompression (`port/src/rzdecomp.c`, replaces the excluded `src/game/decompress.c`+`zlib.c`). Current blocker is **D32** (ROM-struct pointer-width): Part A (u32 layout in `ModelAnimation`) done; Part B **root-caused (D33)** — the ROM stores structured fields big-endian (per-field load-time fixup needed) + an x86-64 loop-stride bug in `expand_ani_table_entries`; fix designed, implementation next. ROM dump verified against the No-Intro good dump (byte-identical, header CRCs re-checked — `tools_pc/romverify.c`). Recurring sub-task: ABI/layout fixes per the D32 procedure (§H) as more asset loading is reached. - **Phase 2 (rendering):** bring in PD fast3d (replaces `port/src/gfxstub.c`), verify custom CC/RM modes against `gmain.s`, port the scheduler; replace asset stubs with ROM-backed data (D16). Assumes ABI-clean data loading from Phase 1.5. - **Phase 3 (audio + input):** libaudio → SDL; decide the ASP strategy (C2: `aspMain*` dummies in `ucode.c`). - **Phase 4 (saves + polish):** file-backed EEPROM; PFS/motor already no-op stubs. diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index 8898037d..e8c35dba 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -24,6 +24,10 @@ when the user is back: a booting game. - Region macros in `CMakeLists.txt` must mirror the N64 Makefile exactly. ## Current state (verified this session) +- **ROM dump verified:** the No-Intro good dump `GoldenEye 007 (U) [!].z64` is + byte-identical to both dev ROM copies and its header CRCs re-compute clean + (`tools_pc/romverify.c`). Fingerprint + provenance in Environment below — + trust it, don't re-verify. - **D31 FIXED:** langInit file-load crash gone (real-zlib `decompressdata` in `port/src/rzdecomp.c`). mainThread boots into `bossInitMainthreadData()`. - **D32 Part A DONE:** `ModelAnimation` pointer fields → `u32` (N64 layout, sizeof 64). diff --git a/docs/PCPortResearch.md b/docs/PCPortResearch.md index 0ae2698a..e0c4e04a 100644 --- a/docs/PCPortResearch.md +++ b/docs/PCPortResearch.md @@ -1106,6 +1106,11 @@ big-endian byte order — a per-field endianness fixup is required at load time; 8 bytes/iter, rebasing only even-indexed entries). The fix design is complete and validated against all 173 ROM entries; **implementation is the immediate task** (three small edits — see D33 "Fix design"). No frames rendered yet. +**ROM provenance locked:** the working ROM is byte-identical to the No-Intro +good dump `GoldenEye 007 (U) [!].z64` (MD5 `70c525880240c1e838b8b1be35666c3b`, +0xC00000 bytes, country 'E'); embedded header CRCs DCBC50D1/09FD1AA3 +re-computed and matched via `tools/n64cksum.c`'s CIC-6102 routine — see +`tools_pc/romverify.c` (one-shot re-check) and docs/HANDOFF.md Environment. **D32 repeatable fix procedure** (apply to any ROM-serialized struct that faults on a pointer-field read):