mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-04 08:21:50 -04:00
docs(phase-13): T6 docs — cookbook §13 overlay runbook + SETUP/gen2-roadmap + digests
- cookbook §13: the canonical add-an-overlay runbook (new_overlay.sh, the flat-blob config, the non-4-aligned bin-carve/asset/trim gotcha, A->B->C workflow, dedup-credit two shapes, build-all/check-all) — the Phase-15 fleet recipe - SETUP tooling inventory: tools/new_overlay.sh (R21) - gen2-roadmap Phase-13 milestone: ACHIEVED amendment (6 binaries byte-identical, 704 harvested, dup-pair collapse, T7 effort finding) - regenerated per-overlay progress/difficulty/duplicates digests + cross report
This commit is contained in:
@@ -635,6 +635,7 @@ Every script under `tools/` (plus the two report make-targets), grouped by purpo
|
||||
| | `tools/match_protos.py` | Match prototype-EXE functions against retail. |
|
||||
| | `tools/permuter/` | decomp-permuter harness (PERM_ recipes/weights) for stubborn near-misses. |
|
||||
| | `diff_settings.py` *(repo root)* | asm-differ config (arch `mipsel`, object mode vs `expected/`). |
|
||||
| | `tools/new_overlay.sh` | One-command location-overlay onboarding: instantiate `config/splat.<ov>.yaml` from the template (+ non-4-aligned `bin` carve), register the binary in `config/overlays.mk` + the 4 report/diff dicts, `make extract && build` byte-check. Idempotent (Phase 13, cookbook §13). |
|
||||
| **PsyQ library linking** (cookbook §8/§9) | `tools/psyq_lib_split.py` | Split a PsyQ `.LIB` into per-object members. |
|
||||
| | `tools/psyq_build_libs.sh` | Build the PsyQ libs from split members. |
|
||||
| | `tools/psyq_identify.py` | Identify which SDK objects a region's functions belong to. |
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
# Unmatched difficulty inventory (generated by tools/difficulty.py — harvest queue)
|
||||
|
||||
unmatched functions : 2419
|
||||
trivial (<=5 ins) : 175
|
||||
non-jtbl leaves : 674 (best harvest targets)
|
||||
jump-table funcs : 43 (deferred — need the rodata-island workflow, Task 2')
|
||||
|
||||
## Easiest 120 unmatched (score asc) — the work queue
|
||||
| score | name | nins | br | calls | jtbl | leaf |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 2 | func_80146C98 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80146E90 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8014704C | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80147084 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80147098 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_801470AC | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148C18 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148C7C | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148CE4 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148CEC | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148D3C | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148F60 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148F98 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148FD0 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148FD8 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80149004 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_801490E0 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_801490E8 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_801490F0 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8014B5B0 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8014B5D0 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8015115C | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80156A14 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_801585A4 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80159874 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80171A80 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80171B44 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80172588 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8017D5CC | 2 | 0 | 0 | - | Y |
|
||||
| 3 | func_8012AD44 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8013A8B0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80142DB8 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80147054 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80147060 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014706C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80147078 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014708C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801470A0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801470B4 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801487F4 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148800 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014880C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148818 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148F68 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148F74 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148F80 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148F8C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FA0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FAC | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FB8 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FC4 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FE0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FEC | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FF8 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80149204 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80149284 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014A674 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014A69C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014B154 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014B5B8 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014B5C4 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80162AC0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80171A04 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80171A10 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172304 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172658 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172664 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172670 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8017267C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172688 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172694 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801726A0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801726AC | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801726B8 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801726C4 | 3 | 0 | 0 | - | Y |
|
||||
| 4 | func_80128218 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801285D4 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80129248 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8012943C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8012A100 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8012A2F4 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8012DFBC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801379EC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80139A34 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8013E054 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80146D80 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80146DE8 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801472F0 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801473DC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014B4C4 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014C6C0 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014C6D0 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014C968 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014C98C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CAFC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CB0C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CB1C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CB58 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CB7C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CB8C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CBD8 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CBE8 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80153C8C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80153CBC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801632E0 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801658DC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80165900 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80165978 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801659A8 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801659CC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8016F388 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8017196C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80171A34 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80174674 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80174754 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80174764 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80174774 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8017DA9C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801807D8 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80180B04 | 4 | 0 | 0 | - | Y |
|
||||
@@ -0,0 +1,130 @@
|
||||
# Unmatched difficulty inventory (generated by tools/difficulty.py — harvest queue)
|
||||
|
||||
unmatched functions : 2419
|
||||
trivial (<=5 ins) : 175
|
||||
non-jtbl leaves : 674 (best harvest targets)
|
||||
jump-table funcs : 43 (deferred — need the rodata-island workflow, Task 2')
|
||||
|
||||
## Easiest 120 unmatched (score asc) — the work queue
|
||||
| score | name | nins | br | calls | jtbl | leaf |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 2 | func_80146C98 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80146E90 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8014704C | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80147084 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80147098 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_801470AC | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148C18 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148C7C | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148CE4 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148CEC | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148D3C | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148F60 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148F98 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148FD0 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148FD8 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80149004 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_801490E0 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_801490E8 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_801490F0 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8014B5B0 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8014B5D0 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8015115C | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80156A14 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_801585A4 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80159874 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80171A80 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80171B44 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80172588 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8017D5CC | 2 | 0 | 0 | - | Y |
|
||||
| 3 | func_8012AD44 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8013A8B0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80142DB8 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80147054 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80147060 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014706C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80147078 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014708C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801470A0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801470B4 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801487F4 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148800 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014880C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148818 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148F68 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148F74 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148F80 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148F8C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FA0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FAC | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FB8 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FC4 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FE0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FEC | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FF8 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80149204 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80149284 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014A674 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014A69C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014B154 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014B5B8 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014B5C4 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80162AC0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80171A04 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80171A10 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172304 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172658 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172664 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172670 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8017267C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172688 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172694 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801726A0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801726AC | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801726B8 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801726C4 | 3 | 0 | 0 | - | Y |
|
||||
| 4 | func_80128218 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801285D4 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80129248 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8012943C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8012A100 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8012A2F4 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8012DFBC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801379EC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80139A34 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8013E054 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80146D80 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80146DE8 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801472F0 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801473DC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014B4C4 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014C6C0 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014C6D0 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014C968 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014C98C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CAFC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CB0C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CB1C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CB58 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CB7C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CB8C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CBD8 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CBE8 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80153C8C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80153CBC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801632E0 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801658DC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80165900 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80165978 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801659A8 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801659CC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8016F388 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8017196C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80171A34 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80174674 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80174754 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80174764 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80174774 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8017DA9C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801807D8 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80180B04 | 4 | 0 | 0 | - | Y |
|
||||
@@ -0,0 +1,130 @@
|
||||
# Unmatched difficulty inventory (generated by tools/difficulty.py — harvest queue)
|
||||
|
||||
unmatched functions : 1801
|
||||
trivial (<=5 ins) : 14
|
||||
non-jtbl leaves : 236 (best harvest targets)
|
||||
jump-table funcs : 58 (deferred — need the rodata-island workflow, Task 2')
|
||||
|
||||
## Easiest 120 unmatched (score asc) — the work queue
|
||||
| score | name | nins | br | calls | jtbl | leaf |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 3 | func_80147054 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80147060 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014706C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014708C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801470A0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801470B4 | 3 | 0 | 0 | - | Y |
|
||||
| 4 | func_8012DFBC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80165900 | 4 | 0 | 0 | - | Y |
|
||||
| 5 | func_80129428 | 5 | 0 | 0 | - | Y |
|
||||
| 5 | func_8012AD50 | 5 | 0 | 0 | - | Y |
|
||||
| 5 | func_8012AD6C | 5 | 0 | 0 | - | Y |
|
||||
| 5 | func_8012BF54 | 5 | 0 | 0 | - | Y |
|
||||
| 5 | func_801472DC | 5 | 0 | 0 | - | Y |
|
||||
| 5 | func_801658EC | 5 | 0 | 0 | - | Y |
|
||||
| 6 | func_80148D24 | 6 | 0 | 0 | - | Y |
|
||||
| 8 | func_80174684 | 8 | 0 | 0 | - | Y |
|
||||
| 9 | func_8012A304 | 9 | 0 | 0 | - | Y |
|
||||
| 9 | func_80151184 | 9 | 0 | 0 | - | Y |
|
||||
| 9 | func_80174650 | 9 | 0 | 0 | - | Y |
|
||||
| 10 | func_8012A0E0 | 8 | 0 | 1 | - | - |
|
||||
| 10 | func_8013C964 | 10 | 0 | 0 | - | Y |
|
||||
| 10 | func_8014C8C8 | 10 | 0 | 0 | - | Y |
|
||||
| 10 | func_80150E84 | 8 | 0 | 1 | - | - |
|
||||
| 10 | func_80150EA4 | 8 | 0 | 1 | - | - |
|
||||
| 10 | func_80165A50 | 10 | 0 | 0 | - | Y |
|
||||
| 11 | func_8012CC64 | 9 | 0 | 1 | - | - |
|
||||
| 11 | func_8013C938 | 11 | 0 | 0 | - | Y |
|
||||
| 11 | func_80143C74 | 9 | 0 | 1 | - | - |
|
||||
| 11 | func_80147264 | 11 | 0 | 0 | - | Y |
|
||||
| 11 | func_8014C860 | 11 | 0 | 0 | - | Y |
|
||||
| 11 | func_80150BA4 | 9 | 0 | 1 | - | - |
|
||||
| 11 | func_8017AE08 | 9 | 0 | 1 | - | - |
|
||||
| 12 | func_8012CBA4 | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_8012CBCC | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_8012CBF4 | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_8013B568 | 12 | 0 | 0 | - | Y |
|
||||
| 12 | func_80144A68 | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_80146D90 | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_8014B12C | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_8014B2A8 | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_8014B2D0 | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_80156648 | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_80172560 | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_80172738 | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_80173174 | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_8017427C | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_8017435C | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_80174784 | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_80174824 | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_8017A220 | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_8017A248 | 10 | 0 | 1 | - | - |
|
||||
| 12 | func_8017A270 | 10 | 0 | 1 | - | - |
|
||||
| 13 | func_8014AD7C | 11 | 0 | 1 | - | - |
|
||||
| 13 | func_80165910 | 10 | 1 | 0 | - | Y |
|
||||
| 13 | func_80179E48 | 11 | 0 | 1 | - | - |
|
||||
| 13 | func_80179E74 | 11 | 0 | 1 | - | - |
|
||||
| 14 | func_80129220 | 10 | 0 | 2 | - | - |
|
||||
| 14 | func_8012A018 | 12 | 0 | 1 | - | - |
|
||||
| 14 | func_80130AC4 | 11 | 1 | 0 | - | Y |
|
||||
| 14 | func_80131C78 | 12 | 0 | 1 | - | - |
|
||||
| 14 | func_8013A9F8 | 11 | 1 | 0 | - | Y |
|
||||
| 14 | func_80146DB8 | 12 | 0 | 1 | - | - |
|
||||
| 14 | func_8014BCC0 | 11 | 1 | 0 | - | Y |
|
||||
| 14 | func_80153C44 | 12 | 0 | 1 | - | - |
|
||||
| 14 | func_80155F80 | 12 | 0 | 1 | - | - |
|
||||
| 14 | func_80172B14 | 12 | 0 | 1 | - | - |
|
||||
| 14 | func_801737B8 | 12 | 0 | 1 | - | - |
|
||||
| 14 | func_801738DC | 12 | 0 | 1 | - | - |
|
||||
| 14 | func_80174C80 | 12 | 0 | 1 | - | - |
|
||||
| 14 | func_80179F14 | 12 | 0 | 1 | - | - |
|
||||
| 14 | func_8017A094 | 12 | 0 | 1 | - | - |
|
||||
| 14 | func_8017A0C4 | 12 | 0 | 1 | - | - |
|
||||
| 15 | func_8012E4C8 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_80131FA0 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_80131FDC | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_801425CC | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_80146994 | 13 | 0 | 1 | - | - |
|
||||
| 15 | func_8014C568 | 13 | 0 | 1 | - | - |
|
||||
| 15 | func_80151944 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_8015CC74 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_8015CFC0 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_8015D4E8 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_8015DAF8 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_8015DE58 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_8015E1B8 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_8015E8E8 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_8015EE08 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_8015F00C | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_8015F324 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_8015F7D4 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_8015FAAC | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_80160138 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_8016039C | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_8016084C | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_80160B34 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_80160EA4 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_80161A00 | 12 | 1 | 0 | - | Y |
|
||||
| 15 | func_80161A30 | 12 | 1 | 0 | - | Y |
|
||||
| 15 | func_80161A60 | 12 | 1 | 0 | - | Y |
|
||||
| 15 | func_80165624 | 13 | 0 | 1 | - | - |
|
||||
| 15 | func_8016CB84 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_8016FFA8 | 13 | 0 | 1 | - | - |
|
||||
| 15 | func_801735B8 | 13 | 0 | 1 | - | - |
|
||||
| 15 | func_801855A0 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_801855DC | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_80185870 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_80185970 | 15 | 0 | 0 | - | Y |
|
||||
| 15 | func_801867E0 | 15 | 0 | 0 | - | Y |
|
||||
| 16 | func_8012A828 | 14 | 0 | 1 | - | - |
|
||||
| 16 | func_8012A8B0 | 14 | 0 | 1 | - | - |
|
||||
| 16 | func_8012BEE8 | 10 | 2 | 0 | - | Y |
|
||||
| 16 | func_80144988 | 16 | 0 | 0 | - | Y |
|
||||
| 16 | func_80146360 | 16 | 0 | 0 | - | Y |
|
||||
| 16 | func_80146E98 | 10 | 2 | 0 | - | Y |
|
||||
| 16 | func_8014B160 | 12 | 0 | 2 | - | - |
|
||||
| 16 | func_8014C278 | 14 | 0 | 1 | - | - |
|
||||
| 16 | func_801542A4 | 14 | 0 | 1 | - | - |
|
||||
| 16 | func_80158AB4 | 12 | 0 | 2 | - | - |
|
||||
| 16 | func_8015BE94 | 12 | 0 | 2 | - | - |
|
||||
| 16 | func_8016197C | 10 | 2 | 0 | - | Y |
|
||||
@@ -0,0 +1,130 @@
|
||||
# Unmatched difficulty inventory (generated by tools/difficulty.py — harvest queue)
|
||||
|
||||
unmatched functions : 2777
|
||||
trivial (<=5 ins) : 186
|
||||
non-jtbl leaves : 731 (best harvest targets)
|
||||
jump-table funcs : 54 (deferred — need the rodata-island workflow, Task 2')
|
||||
|
||||
## Easiest 120 unmatched (score asc) — the work queue
|
||||
| score | name | nins | br | calls | jtbl | leaf |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 2 | func_8012AD64 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8012BF4C | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8012E27C | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80146C98 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80146E90 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8014704C | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80147084 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80147098 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_801470AC | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148C18 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148C7C | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148CE4 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148CEC | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148D3C | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148F60 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148F98 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148FD0 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80148FD8 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80149004 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_801490E0 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_801490E8 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_801490F0 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8014B5B0 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8014B5D0 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8015115C | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80156A14 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_801585A4 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80159874 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80171A80 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80171B44 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80172588 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_8017EA50 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80180070 | 2 | 0 | 0 | - | Y |
|
||||
| 2 | func_80187770 | 2 | 0 | 0 | - | Y |
|
||||
| 3 | func_8012AD44 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8013A8B0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80142DB8 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80147054 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80147060 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014706C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80147078 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014708C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801470A0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801470B4 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801487F4 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148800 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014880C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148818 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148F68 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148F74 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148F80 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148F8C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FA0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FAC | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FB8 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FC4 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FE0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FEC | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80148FF8 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80149204 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80149284 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014A674 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014A69C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014B154 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014B5B8 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8014B5C4 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80162AC0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80171A04 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80171A10 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172304 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172658 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172664 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172670 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_8017267C | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172688 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80172694 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801726A0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801726AC | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801726B8 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801726C4 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801805EC | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_80180770 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801808F0 | 3 | 0 | 0 | - | Y |
|
||||
| 3 | func_801810EC | 3 | 0 | 0 | - | Y |
|
||||
| 4 | func_80128218 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801285D4 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80129248 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8012943C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8012A100 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8012A2F4 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8012DFBC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801379EC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80139A34 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8013E054 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80146D80 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80146DE8 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801472F0 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801473DC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014B4C4 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014C6C0 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014C6D0 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014C968 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014C98C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CAFC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CB0C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CB1C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CB58 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CB7C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CB8C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CBD8 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8014CBE8 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80153C8C | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80153CBC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801632E0 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801658DC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80165900 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_80165978 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801659A8 | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_801659CC | 4 | 0 | 0 | - | Y |
|
||||
| 4 | func_8016F388 | 4 | 0 | 0 | - | Y |
|
||||
+808
-773
File diff suppressed because it is too large
Load Diff
@@ -139,6 +139,7 @@ Almost all of BFM's game code lives **outside** the 404 KiB EXE — in a residen
|
||||
3. Add a confirmed duplicate pair (`SC01/005 ≡ 006` or `SC02/000 ≡ 003`) to prove cross-overlay collapse; add a large free-roam overlay (e.g. `SC03/001`) to prove the recipe scales.
|
||||
4. Produce `tools/new_overlay.sh` (instantiate yaml, register binary, snapshot check.sha, auto-run dedup-credit) + `make build-all`/`check-all` (whole-fleet single PASS/FAIL); document the canonical "add an overlay" runbook (cookbook).
|
||||
- **Milestone:** For each overlay in the set, `make build BINARY=<ovNN> && make check` → SHA1 == the extracted `0.4.dec` payload (at least at 100% INCLUDE_ASM, with harvested score-0 matches linked). The duplicate pair shares a matched body across both members (both green from one source). `make build-all`/`check-all` green; `tools/new_overlay.sh` onboards a fresh overlay to a byte-identical all-asm build + dedup credit in one command.
|
||||
- **⟶ ACHIEVED at Phase-13 close (2026-06-16):** **6 binaries build byte-identical from a clean tree** (`make check-all` → 6/6, R22 clean fleet proof). The milestone overlay **`SC01/077` is `d19c9580…` + 704 functions harvested** (Ultracode §12, 5 passes); the duplicate pair **`SC01/005 ≡ 006`** is collapsed to **one shared source** (`src/shared/ov_setters.h` + `dedup.us.yaml` D1/D2/D3, both `56760dbe…`, dedup_integrate-validated); the large free-roam **`SC03/001` is `f8fd92f5…`**; **`tools/new_overlay.sh`** (one-command, idempotent) + **`make build-all`/`check-all`** are in. The runbook is cookbook §13. The ~134-overlay long-tail is the open-ended **Phase 15** (not a gate). Bonus: a controlled **Max-vs-Ultracode harvest-yield experiment** (T7) found the yields equal (13 vs 14 on 80 fixed fns = noise) → prefer Ultracode for breadth harvests (`docs/effort-map.md`).
|
||||
- **Dependencies:** Phases 9, 11, 12. Phase 3 overlay map + RAM dumps (done).
|
||||
- **Primary risk + mitigation:** An overlay isn't as cleanly position-locked as the sample (internal relocation / a loader-patched pointer like `SC01/077`'s `+0x5F118` field). → Verify at the decompressed layer against the on-disk `0.4.dec` (the pre-load payload, before runtime patches); the proven model is that divergences are runtime data init, not relocation. Pick the set to span the distinct shapes so any anomaly surfaces here (3–5 overlays), not in the long-tail; an anomalous overlay becomes a documented special case.
|
||||
- **Effort tier:** **Tier-1 (Max)** for the overlay template + first overlay (the pattern inherited by ~134 overlays); **Tier-2 (xHigh)** for subsequent ones; **breadth (Workflow)** for per-overlay harvest.
|
||||
|
||||
@@ -699,3 +699,73 @@ block-reorder / regalloc that no C-source shape steers (the agents document each
|
||||
- Callee **return type forces the cast at the call site**: `jal f; andi v0,0xffff` means `f` is declared returning
|
||||
a type WIDER than u16 (so the `(u16)` cast emits the `andi`); declaring `f` as `u16` lets gcc trust it and drop
|
||||
the andi.
|
||||
|
||||
## §13 Add a location overlay — the canonical runbook (Phase 13; the Phase-15 fleet recipe)
|
||||
|
||||
All ~134 location overlays are flat LZSS-decompressed `0.4.dec` payloads that stream into the SAME slot
|
||||
**vram `0x80128158`** (position-locked, Phase 3) and chain into the resident engine. Each is its own build
|
||||
binary `ov_<SCxx>_<nnn>`. The whole pipeline is one command + the §12 harvest; this is the reusable recipe.
|
||||
|
||||
### One-command onboarding — `tools/new_overlay.sh <SCxx> <FILE_nnn>`
|
||||
Computes sha1 / size / `code_end` (from `sig_image.py --bootstrap`, the last function's end), instantiates
|
||||
`config/splat.<ov>.yaml` from `config/splat.us.overlay.template.yaml`, writes `config/check.<ov>.sha` + an empty
|
||||
`config/symbols.<ov>.txt`, appends the `<ov>_*` block to the **generated** `config/overlays.mk` (the Makefile
|
||||
`-include`s it, so the hand-maintained Makefile body is NEVER edited) + the alias to `OVERLAY_BINARIES`,
|
||||
sentinel-inserts the entry into the 4 report/diff dicts (`diff_settings.py`, `tools/{progress,difficulty,
|
||||
dup_report}.py` — grep-guarded + `ast.parse` syntax-checked), then `make extract && make build` to byte-verify
|
||||
at 100% INCLUDE_ASM. Idempotent (re-run = clean no-op). Proven on SC01/005, /006, SC03/001.
|
||||
|
||||
### The flat-blob overlay config (what the template encodes)
|
||||
- No header, no `gp_value` (-G0), single `code` segment @ `vram 0x80128158`; `build_path: build`; per-binary
|
||||
nested `asm/<ov>` + `src/<ov>` + `build/<ov>`; `asset_path: assets/<ov>`; stacked symbols
|
||||
`[symbols.us.txt, symbols.resident.txt, symbols.<ov>.txt]` (overlays call the resident engine).
|
||||
- **Overlays open with code at file 0x0** (a prologue), UNLIKE the resident's leading data word — first subseg
|
||||
`[0x0, c, <ov>]`, no leading-rodata trick. Subsegs: `[0x0, c]` + `[<code_end>, data, tail]`; `code_end` = the
|
||||
last sig_image function's end (file offset). Byte-match is robust to the exact split (splat round-trips bytes).
|
||||
|
||||
### THE NON-4-ALIGNED-OVERLAY GOTCHA (≈75% of the fleet; fixed in the template + Makefile, automatic)
|
||||
A `0.4.dec` whose size isn't a multiple of 4 (SC01/077 = 0xB29D7, mod 4 = 3) loses its final 1–3 bytes three ways:
|
||||
1. **spimdisasm drops the trailing partial word** (won't emit < 4 leftover bytes; a `data` carve of those emits
|
||||
*nothing*). → Carve them as a **`bin`** subseg `[<word_floor>, bin, trailing]` (raw `.incbin`). `new_overlay.sh`
|
||||
injects this when `size % 4 != 0`.
|
||||
2. **splat's `bin` asset needs a build rule** — `.ld` references `build/assets/<ov>/trailing.o`. The Makefile
|
||||
`build/assets/%.o: assets/%.bin` rule assembles a one-line `.incbin` stub **+ `objcopy --set-section-alignment
|
||||
.data=1`** (else `as` defaults `.data` to 16-align → ld pads the image, adds a stray byte).
|
||||
3. **splat's `.ld` does `. = ALIGN(., 4)` at the segment end** → up to 3 zero pad bytes. The Makefile objcopy
|
||||
step **TRIMs** it: shrink-only, capped at 3 bytes, gated on `size(build) > size($(EXE)) && delta ≤ 3` — can
|
||||
never hide a shortfall or touch the 4-aligned EXE/resident (which never hit any of this).
|
||||
|
||||
### The A→B→C per-overlay workflow
|
||||
- **A. Onboard + all-asm byte-match** (`new_overlay.sh`) → `make check BINARY=<ov>` byte-identical. *The milestone
|
||||
bar* (splat round-trips bytes regardless of carve quality).
|
||||
- **B. Seed boundaries + Ghidra import** (to draft harder fns): splat carves ~all functions itself (SC01/077:
|
||||
2504 cleanly), so seeding `symbols.<ov>.txt` only fixes conservative carves (§8/§11) + attaches names — the
|
||||
byte-match doesn't depend on it. Ghidra: `ghidra_import_raw.sh <0.4.dec> 0x80128158 <ov>` (MCP stopped, R23) +
|
||||
`DefineFunctions.java` over splat's func list (auto-analysis finds only the `jal`-reachable subset — overlays
|
||||
dispatch via fn-pointer tables; SC01/077: 1237 → 2661). The overlay Ghidra DB is **script-reproducible** →
|
||||
DB-commit optional (skip to avoid ~14 MB bloat unless doing manual RE). Restarting MCP to serve `<ov>` drops
|
||||
the client SSE → pause + ask Drew to run `/mcp` (memory `mcp-reconnect-after-restart`).
|
||||
- **C. Dedup-credit FIRST, then the §12 harvest.** Credit the high-leverage shared engine functions (top
|
||||
`docs/duplicates.cross.md` groups — byte-identical at fixed vrams in all 134 overlays) so they leave the
|
||||
queue; then `difficulty.py --binary <ov>` ranks the unique remainder for the §12 parallel-draft + byte-gate.
|
||||
**Use Ultracode** (T7 evidence: xHigh agents = Max-agent yield on blind drafting — no reason to spend Max
|
||||
depth; see `docs/effort-map.md`). SC01/077: 704 matched (yield 92%→79%→54% as difficulty rose; the hard tail
|
||||
→ permuter/§3a or honest stubs).
|
||||
|
||||
### Dedup-credit (§11) for overlays — two shapes
|
||||
- **Per-function share (general/fleet shape):** a matched body lives once as a macro in `src/shared/<h>.h`,
|
||||
instantiated **in place** (preserve address order — overlays link functions in source order!) at each member
|
||||
site, registered in `config/dedup.us.yaml` (members in >1 binary), byte-gated by `dedup_integrate --check` (the
|
||||
recorded `h_exact` must equal each member's `sig_image` hash, keyed by addr-int — sig_image names lowercase,
|
||||
splat uppercase, validator case-moot). The nested overlay `.c` resolves quoted includes relative to ITS dir →
|
||||
use `#include "../shared/<h>.h"`. Proven: SC01/005 ≡ 006 share 3 accessors from `src/shared/ov_setters.h`
|
||||
(`SETTER`/`RETCONST`), both byte-identical from one source. `progress.py` credits shared members as REAL.
|
||||
- **Whole-overlay collapse (special case for byte-identical pairs):** for two overlays with the SAME `0.4.dec`
|
||||
sha1, `src/ov_B/ov_B.c` can `#include "../ov_A/ov_A.c"` — B inherits ALL of A's matches from one source.
|
||||
Maximal but doesn't generalize to partial sharing, so the per-function share is the fleet default.
|
||||
|
||||
### Fleet build — `make build-all` / `make check-all`
|
||||
Recursive `$(MAKE) BINARY=<b>` over `$(BINARIES)` (NOT `foreach` — the OBJS glob is parse-time per `$(BINARY)`),
|
||||
one PASS/FAIL + per-binary `.run/check.<b>.log`. Serial across binaries (shared `build/asm|src/**` outputs make
|
||||
binary-level `-j` racy). Day-to-day incremental; milestone fleet proof = a CLEAN run (R22): `make clean && for b
|
||||
in $(BINARIES); do make extract BINARY=$$b; done && make check-all`.
|
||||
|
||||
@@ -17,5 +17,3 @@ REAL matches: CdQueueBusy CdReadRequest DebugMenuHandler GameModeDispatch Loader
|
||||
NON_MATCHING: CdReadSectorReadyCB CdReadStateMachine LoaderInitFileTable ResourceLoadStateMachine StreamLoadStateMachine func_80015A74 func_80016714
|
||||
|
||||
build SHA1: 143dbb89f34491258bbc27810d0a12ec8b43a8dd (byte-identical)
|
||||
|
||||
empties audit: 42/42 genuine jr;nop (all clean)
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# BFM matching progress (generated by tools/progress.py — authoritative)
|
||||
|
||||
REAL substantive matches : 3 <- the Gen1-exit >=25 bar counts THIS
|
||||
(of which dedup-shared : 3 one body -> N sites, config/dedup.us.yaml)
|
||||
LINKED real PsyQ objects : 0 <- byte-identical via linked SDK objects
|
||||
NON_MATCHING (near-miss) : 0
|
||||
splat-auto empty no-ops : 82
|
||||
INCLUDE_ASM stubs : 2419
|
||||
data blobs (excluded) : 0
|
||||
----------------------------------------
|
||||
matchable functions : 2504
|
||||
REAL / matchable : 3 / 2504 = 0.12%
|
||||
byte-identical/ matchable: 85 / 2504 = 3.39% (REAL+LINKED+empties)
|
||||
|
||||
LINKED subsegs: (0 fns)
|
||||
REAL matches: func_8012AD64 func_8012BF4C func_8012E27C
|
||||
NON_MATCHING:
|
||||
|
||||
build SHA1: 56760dbec7757f12d18d7e40242a0b05280ff444 (byte-identical)
|
||||
@@ -0,0 +1,19 @@
|
||||
# BFM matching progress (generated by tools/progress.py — authoritative)
|
||||
|
||||
REAL substantive matches : 3 <- the Gen1-exit >=25 bar counts THIS
|
||||
(of which dedup-shared : 3 one body -> N sites, config/dedup.us.yaml)
|
||||
LINKED real PsyQ objects : 0 <- byte-identical via linked SDK objects
|
||||
NON_MATCHING (near-miss) : 0
|
||||
splat-auto empty no-ops : 82
|
||||
INCLUDE_ASM stubs : 2419
|
||||
data blobs (excluded) : 0
|
||||
----------------------------------------
|
||||
matchable functions : 2504
|
||||
REAL / matchable : 3 / 2504 = 0.12%
|
||||
byte-identical/ matchable: 85 / 2504 = 3.39% (REAL+LINKED+empties)
|
||||
|
||||
LINKED subsegs: (0 fns)
|
||||
REAL matches: func_8012AD64 func_8012BF4C func_8012E27C
|
||||
NON_MATCHING:
|
||||
|
||||
build SHA1: 56760dbec7757f12d18d7e40242a0b05280ff444 (byte-identical)
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,18 @@
|
||||
# BFM matching progress (generated by tools/progress.py — authoritative)
|
||||
|
||||
REAL substantive matches : 0 <- the Gen1-exit >=25 bar counts THIS
|
||||
LINKED real PsyQ objects : 0 <- byte-identical via linked SDK objects
|
||||
NON_MATCHING (near-miss) : 0
|
||||
splat-auto empty no-ops : 93
|
||||
INCLUDE_ASM stubs : 2777
|
||||
data blobs (excluded) : 0
|
||||
----------------------------------------
|
||||
matchable functions : 2870
|
||||
REAL / matchable : 0 / 2870 = 0.00%
|
||||
byte-identical/ matchable: 93 / 2870 = 3.24% (REAL+LINKED+empties)
|
||||
|
||||
LINKED subsegs: (0 fns)
|
||||
REAL matches:
|
||||
NON_MATCHING:
|
||||
|
||||
build SHA1: f8fd92f59c6871577c61cb626cb9ddb0db5ba884 (byte-identical)
|
||||
@@ -16,5 +16,3 @@ REAL matches: DsMix func_800CEDFC func_800CEE40 func_800CEE84 func_800CEF04 func
|
||||
NON_MATCHING:
|
||||
|
||||
build SHA1: 8e17e02ff8954d07c979449198f7e1645046b353 (byte-identical)
|
||||
|
||||
empties audit: 2/2 genuine jr;nop (all clean)
|
||||
|
||||
Reference in New Issue
Block a user