mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-26 13:33:34 -04:00
757bd82a0f
The §9.1 "scattered .bss commons" exclusion class (Phase 8 → P31) is closed 3/3. New tools/psyq_bss_split.py (own ELF32 REL reader/writer) cuts an object's packed .bss into per-base NOBITS pieces: bases derived from the game bytes per HI16/LO16 pair, references walked in offset order into single-base runs, cuts snapped to symbol starts (the linker scattered SYMBOLS), symbols moved, a LOCAL section symbol per piece inserted, relocs retargeted with the addend rewritten in the immediates, self-diffed. It runs inside the one prepare step shared by psyq_link.link_object / psyq_link_region.build_region / psyq_integrate.integrate (prepare_object before classify), re-derived every build. GS_001.o was certified "5 interleaved bases, NOT splittable" by the S77 probe, which grouped by BASE; by RUN it is six symbol-aligned pieces. All seven cuts across the three objects are confirmed by the other objects' by-name recoveries (_que 0x800C5510, _svm_sreg_buf 0x800B9B58, PSDBASEX/CLIP2/PSDBASEY/POSITION/GsDRAWENV). R39 negative control: 235 placed objects across 9 curated dirs, 0 refusals, exactly 3 splits (a libcd .bss+size end pointer refused the first build → reference problems are fatal only when a split is needed). Wiring: yaml 800c→libgpu2, sgap_6→sgap_6+snd12, gsgap3→libgs8 (comments rewritten); LIBGPU_ELF := .run/obj40/libgpu (curated libgpu_used retired); libgs 34 objs/8 blocks (make_libgs.sh +GS_001); snd 63/12 (make_snd_used.py exclusions 4→3). src/800c.c and src/gsgap3.c removed (Sony code hand-matched as REAL/verbatim), sgap_6.c keeps only func_8003FA54; splat-emitted libgpu2.c/libgs8.c/snd12.c stubs for the no-SDK fallback. Verified: main 143dbb89f34491258bbc27810d0a12ec8b43a8dd WITH the SDK objects and WITHOUT them from a fresh extract; make tools-health OK; R22 fleet clean extract-all 212/212 + check-all 213/213. Metrics: main REAL 886→839, LINKED 1,040→1,150, VERBATIM 85→29, stubs 29 (unchanged); game-code weighted 91.1% (40,895/44,870) — both terms lost the 3,667 SDK ins; the remainder is still exactly the 3,975-ins open-stub sum. Verbatim manifest --update 200→33 rows (subtractive). Docs: cookbook §489 (+index), psyq-worklist rows + "S78 task #4", SETUP S79 R21 table, decision-log S79 addendum, accelerators S79, CURRENT_PHASE S79 FINAL 🛑.
5.3 KiB
5.3 KiB
Unmatched difficulty inventory (generated by tools/difficulty.py — harvest queue)
unmatched functions : 1179 trivial (<=5 ins) : 238 non-jtbl leaves : 797 (best harvest targets) jump-table funcs : 36 (deferred — need the rodata-island workflow, Task 2')
Easiest 120 unmatched (score asc) — the work queue
| score | name | nins | br | calls | jtbl | leaf |
|---|---|---|---|---|---|---|
| 1 | COR_05_OBJ_130 | 1 | 0 | 0 | - | Y |
| 1 | EXT_OBJ_A8 | 1 | 0 | 0 | - | Y |
| 1 | GS_137_OBJ_488 | 1 | 0 | 0 | - | Y |
| 1 | LIBMCRD_OBJ_1118 | 1 | 0 | 0 | - | Y |
| 1 | LIBMCRD_OBJ_330 | 1 | 0 | 0 | - | Y |
| 1 | LIBMCRD_OBJ_5BC | 1 | 0 | 0 | - | Y |
| 1 | LIBMCRD_OBJ_990 | 1 | 0 | 0 | - | Y |
| 1 | LIBMCRD_OBJ_BA0 | 1 | 0 | 0 | - | Y |
| 1 | LIBMCRD_OBJ_E5C | 1 | 0 | 0 | - | Y |
| 1 | MIDIREAD_OBJ_6BC | 1 | 0 | 0 | - | Y |
| 1 | MIDIREAD_OBJ_E4 | 1 | 0 | 0 | - | Y |
| 1 | OBJT2_OBJ_614 | 1 | 0 | 0 | - | Y |
| 1 | OBJT2_OBJ_838 | 1 | 0 | 0 | - | Y |
| 1 | PRESET2_OBJ_116C | 1 | 0 | 0 | - | Y |
| 1 | PRESET2_OBJ_4D8 | 1 | 0 | 0 | - | Y |
| 1 | PRESET2_OBJ_6C4 | 1 | 0 | 0 | - | Y |
| 1 | PRESET2_OBJ_C20 | 1 | 0 | 0 | - | Y |
| 1 | PRESET_OBJ_744 | 1 | 0 | 0 | - | Y |
| 1 | PRNT_OBJ_21C | 1 | 0 | 0 | - | Y |
| 1 | PRNT_OBJ_2A0 | 1 | 0 | 0 | - | Y |
| 1 | PRNT_OBJ_348 | 1 | 0 | 0 | - | Y |
| 1 | PRNT_OBJ_3D0 | 1 | 0 | 0 | - | Y |
| 1 | SYS_OBJ_1C28 | 1 | 0 | 0 | - | Y |
| 1 | S_SR_OBJ_B0 | 1 | 0 | 0 | - | Y |
| 2 | INTR_DMA_OBJ_274 | 2 | 0 | 0 | - | Y |
| 2 | LIBMCRD_OBJ_1A60 | 2 | 0 | 0 | - | Y |
| 2 | LIBMCRD_OBJ_308 | 2 | 0 | 0 | - | Y |
| 2 | PRESET2_OBJ_FD8 | 2 | 0 | 0 | - | Y |
| 2 | PRIM_OBJ_200 | 2 | 0 | 0 | - | Y |
| 2 | PRIM_OBJ_228 | 2 | 0 | 0 | - | Y |
| 2 | SR_SV_OBJ_224 | 2 | 0 | 0 | - | Y |
| 2 | SR_SV_OBJ_2F4 | 2 | 0 | 0 | - | Y |
| 2 | SYS_OBJ_191C | 2 | 0 | 0 | - | Y |
| 2 | S_ITC_OBJ_88 | 2 | 0 | 0 | - | Y |
| 2 | S_SCA_OBJ_15C | 2 | 0 | 0 | - | Y |
| 2 | S_SCA_OBJ_94 | 2 | 0 | 0 | - | Y |
| 2 | S_SK_OBJ_1EC | 2 | 0 | 0 | - | Y |
| 2 | VM_N2P_OBJ_1B8 | 2 | 0 | 0 | - | Y |
| 2 | VM_N2P_OBJ_BC | 2 | 0 | 0 | - | Y |
| 3 | C_007_OBJ_AC | 3 | 0 | 0 | - | Y |
| 3 | MIDIREAD_OBJ_6C0 | 3 | 0 | 0 | - | Y |
| 3 | PRESET2_OBJ_A88 | 3 | 0 | 0 | - | Y |
| 3 | PRNT_OBJ_380 | 3 | 0 | 0 | - | Y |
| 3 | SYS_OBJ_1B78 | 3 | 0 | 0 | - | Y |
| 3 | SetDQA | 3 | 0 | 0 | - | Y |
| 3 | SetDQB | 3 | 0 | 0 | - | Y |
| 3 | SetData32 | 3 | 0 | 0 | - | Y |
| 3 | SetIR0 | 3 | 0 | 0 | - | Y |
| 3 | UT_KEYV_OBJ_174 | 3 | 0 | 0 | - | Y |
| 4 | CD_set_test_parmnum | 4 | 0 | 0 | - | Y |
| 4 | C_011_OBJ_960 | 4 | 0 | 0 | - | Y |
| 4 | CdLastCom | 4 | 0 | 0 | - | Y |
| 4 | GEO_00_OBJ_2C | 4 | 0 | 0 | - | Y |
| 4 | GS_108_OBJ_7C | 4 | 0 | 0 | - | Y |
| 4 | GetGraphDebug | 4 | 0 | 0 | - | Y |
| 4 | GetGraphType | 4 | 0 | 0 | - | Y |
| 4 | GsGetActiveBuff | 4 | 0 | 0 | - | Y |
| 4 | LIBMCRD_OBJ_15C | 4 | 0 | 0 | - | Y |
| 4 | LIBMCRD_OBJ_1944 | 4 | 0 | 0 | - | Y |
| 4 | LIBMCRD_OBJ_3B8 | 4 | 0 | 0 | - | Y |
| 4 | LIBMCRD_OBJ_84C | 4 | 0 | 0 | - | Y |
| 4 | LIBMCRD_OBJ_A5C | 4 | 0 | 0 | - | Y |
| 4 | MIDIREAD_OBJ_6AC | 4 | 0 | 0 | - | Y |
| 4 | SPU_OBJ_510 | 4 | 0 | 0 | - | Y |
| 4 | SPU_OBJ_AC4 | 4 | 0 | 0 | - | Y |
| 4 | SSSTART_OBJ_240 | 2 | 0 | 1 | - | - |
| 4 | SSSTART_OBJ_248 | 2 | 0 | 1 | - | - |
| 4 | SSSTART_OBJ_328 | 4 | 0 | 0 | - | Y |
| 4 | SYS_OBJ_1AF0 | 4 | 0 | 0 | - | Y |
| 4 | SYS_OBJ_2F7C | 4 | 0 | 0 | - | Y |
| 4 | S_RRWA_OBJ_40 | 4 | 0 | 0 | - | Y |
| 4 | S_SAV_OBJ_1E8 | 4 | 0 | 0 | - | Y |
| 4 | S_SAV_OBJ_1F8 | 4 | 0 | 0 | - | Y |
| 4 | S_SCA_OBJ_384 | 4 | 0 | 0 | - | Y |
| 4 | S_SRMP_OBJ_170 | 4 | 0 | 0 | - | Y |
| 4 | S_STSA_OBJ_48 | 4 | 0 | 0 | - | Y |
| 4 | SetVertex0 | 4 | 0 | 0 | - | Y |
| 4 | SetVertex1 | 4 | 0 | 0 | - | Y |
| 4 | SetVertex2 | 4 | 0 | 0 | - | Y |
| 4 | USERFUNC_OBJ_84 | 4 | 0 | 0 | - | Y |
| 4 | UT_KEYV_OBJ_350 | 4 | 0 | 0 | - | Y |
| 4 | UT_KEYV_OBJ_3FC | 4 | 0 | 0 | - | Y |
| 4 | VSYNC_OBJ_1D4 | 4 | 0 | 0 | - | Y |
| 4 | VS_VH_OBJ_180 | 4 | 0 | 0 | - | Y |
| 4 | func_800426D4 | 4 | 0 | 0 | - | Y |
| 4 | func_80043078 | 4 | 0 | 0 | - | Y |
| 4 | func_80043410 | 4 | 0 | 0 | - | Y |
| 4 | func_80043420 | 4 | 0 | 0 | - | Y |
| 4 | func_80043440 | 4 | 0 | 0 | - | Y |
| 4 | func_800491EC | 4 | 0 | 0 | - | Y |
| 4 | func_8004923C | 4 | 0 | 0 | - | Y |
| 4 | func_8005C4CC | 4 | 0 | 0 | - | Y |
| 4 | func_80062988 | 4 | 0 | 0 | - | Y |
| 4 | gfx2D_COM0_OBJ_30 | 4 | 0 | 0 | - | Y |
| 5 | C_004_OBJ_DC | 5 | 0 | 0 | - | Y |
| 5 | EVENT_OBJ_84 | 5 | 0 | 0 | - | Y |
| 5 | GS_123_OBJ_A8 | 5 | 0 | 0 | - | Y |
| 5 | INTR_OBJ_6D0 | 5 | 0 | 0 | - | Y |
| 5 | ISO9660_OBJ_29C | 3 | 0 | 1 | - | - |
| 5 | LIBMCRD_OBJ_5C0 | 5 | 0 | 0 | - | Y |
| 5 | LIBMCRD_OBJ_840 | 3 | 0 | 1 | - | - |
| 5 | LIBMCRD_OBJ_A50 | 3 | 0 | 1 | - | - |
| 5 | LIBMCRD_OBJ_C90 | 3 | 0 | 1 | - | - |
| 5 | LIBMCRD_OBJ_F4C | 3 | 0 | 1 | - | - |
| 5 | OBJT_OBJ_108 | 2 | 1 | 0 | - | Y |
| 5 | OBJT_OBJ_110 | 2 | 1 | 0 | - | Y |
| 5 | OBJT_OBJ_124 | 2 | 1 | 0 | - | Y |
| 5 | OBJT_OBJ_D0 | 2 | 1 | 0 | - | Y |
| 5 | OBJT_OBJ_E4 | 2 | 1 | 0 | - | Y |
| 5 | PRNT_OBJ_188 | 2 | 1 | 0 | - | Y |
| 5 | PRNT_OBJ_1E8 | 2 | 1 | 0 | - | Y |
| 5 | PRNT_OBJ_1F0 | 2 | 1 | 0 | - | Y |
| 5 | PRNT_OBJ_1F8 | 2 | 1 | 0 | - | Y |
| 5 | PRNT_OBJ_340 | 2 | 1 | 0 | - | Y |
| 5 | PRNT_OBJ_64C | 2 | 1 | 0 | - | Y |
| 5 | PRNT_OBJ_C8 | 2 | 1 | 0 | - | Y |
| 5 | PRNT_OBJ_EC | 2 | 1 | 0 | - | Y |
| 5 | PRNT_OBJ_F4 | 2 | 1 | 0 | - | Y |
| 5 | RATAN_OBJ_148 | 5 | 0 | 0 | - | Y |
| 5 | SPU_OBJ_848 | 5 | 0 | 0 | - | Y |