chore(phase-33.5): task 8 — tracked .run/ pruned to flip-ready: 218 paths untracked (172 tracked-but-ignored inertia files, 39 uncited t3s3 session logs + 5 duplicate close logs, the two fable_cd4 disassembly listings) — all still on disk; .gitignore re-includes narrowed under dated comments; tools/public_rewrite/untracked_after_rewrite.txt (audit-only sibling of the purge set, which stays byte-unchanged so gate_scan stays PASS); audit_public check 4 CONTENT (longest contiguous run of disassembly-shaped lines, cap 64; controls: 398/179 fail, the 40-line fixtures pass; 0 offenders among 6,443 paths after); runbook §11 residue paragraph; four tool comments annotated; SETUP row; log + checkpoint; P6 rules check

This commit is contained in:
Drew T
2026-09-07 18:04:15 -06:00
parent 21c98ed5a5
commit ae71efe56f
228 changed files with 185 additions and 38561 deletions
+16 -1
View File
@@ -73,6 +73,9 @@
!/.run/giants/fable_cd4/*.sh
!/.run/giants/fable_cd4/*.gdb
!/.run/giants/fable_cd4/*.txt
# P33.5 task 8: the two full disassembly listings of func_80133CD4 are ROM-derived (class 3 of the firewall) and were
# untracked; they stay in the published history by owner decision (tools/public_rewrite/untracked_after_rewrite.txt).
/.run/giants/fable_cd4/*_full.txt
# Phase-26 gdb-on-cc1 oracle harness + proof + draft ladder for func_80178004 (the
# distilled output of a 477k-token Fable5 pass; the method §52 lever 6 depends on).
@@ -269,7 +272,11 @@ unsloth_compiled_cache/
/.run/P32/t3s3/*
!/.run/P32/t3s3/*.sh
!/.run/P32/t3s3/*.py
!/.run/P32/t3s3/*.log
# P33.5 task 8: of the session's 41 root logs only the three the PhaseEnd cites stay tracked (the R22 runs); the
# bank_*/report/tools-health logs of a finished session are regenerable evidence and were untracked (still on disk)
!/.run/P32/t3s3/r22_check.log
!/.run/P32/t3s3/r22_full.log
!/.run/P32/t3s3/r22b_full.log
!/.run/P32/t3s3/*.txt
!/.run/P32/t3s3/prompts/
!/.run/P32/t3s3/gate/
@@ -294,6 +301,9 @@ unsloth_compiled_cache/
!/.run/P32/t4b/func_*/*.md
!/.run/P32/t4b/func_*/*.c
!/.run/P32/t4b/*.log
# P33.5 task 8: the uncited duplicate close-report logs of this step were untracked (the cited copies live under t4d/t4e)
/.run/P32/t4b/report_close.log
/.run/P32/t4b/report_main_close.log
!/.run/P32/t5x/
/.run/P32/t5x/*
!/.run/P32/t5x/BRIEF.md
@@ -324,6 +334,9 @@ unsloth_compiled_cache/
!/.run/P32/t4d/*.c
!/.run/P32/t4d/*.md
!/.run/P32/t4d/*.log
# P33.5 task 8: uncited duplicates untracked (report_close.log and tools_health.log here ARE cited and stay)
/.run/P32/t4d/audit_disc.log
/.run/P32/t4d/report_main_close.log
!/.run/P32/t4d/bank/
/.run/P32/t4d/bank/*
!/.run/P32/t4d/bank/*.c
@@ -348,6 +361,8 @@ unsloth_compiled_cache/
!/.run/P32/t4e/*.c
!/.run/P32/t4e/*.md
!/.run/P32/t4e/*.log
# P33.5 task 8: the uncited duplicate untracked (r22_*.log, report_close.log and tools_health.log here are cited and stay)
/.run/P32/t4e/report_main_close.log
!/.run/P32/t4e/*.json
!/.run/P32/t4e/*.sh
!/.run/P32/t4e/*.py
@@ -1,8 +0,0 @@
CC build/src/md_MAIN_003/md_MAIN_003.o
src/md_MAIN_003/md_MAIN_003.c: In function `func_800CFC1C':
src/md_MAIN_003/md_MAIN_003.c:582: warning: return makes integer from pointer without a cast
src/md_MAIN_003/md_MAIN_003.c:666: warning: return makes integer from pointer without a cast
LD build/md_MAIN_003/md_MAIN_003.elf
OBJCOPY build/md_MAIN_003/md_MAIN_003
[ OK ] build/md_MAIN_003/md_MAIN_003
sha1 dd1b32ecf1103c6f7cf1943d25546a3046e17b14 == config/check.md_MAIN_003.sha (BYTE-IDENTICAL)
@@ -1,5 +0,0 @@
CC build/src/md_MAIN_007/md_MAIN_007.o
LD build/md_MAIN_007/md_MAIN_007.elf
OBJCOPY build/md_MAIN_007/md_MAIN_007
[ OK ] build/md_MAIN_007/md_MAIN_007
sha1 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c == config/check.md_MAIN_007.sha (BYTE-IDENTICAL)
@@ -1,5 +0,0 @@
CC build/src/md_MAIN_007/md_MAIN_007.o
LD build/md_MAIN_007/md_MAIN_007.elf
OBJCOPY build/md_MAIN_007/md_MAIN_007
[ OK ] build/md_MAIN_007/md_MAIN_007
sha1 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c == config/check.md_MAIN_007.sha (BYTE-IDENTICAL)
@@ -1,5 +0,0 @@
CC build/src/md_MAIN_007/md_MAIN_007.o
LD build/md_MAIN_007/md_MAIN_007.elf
OBJCOPY build/md_MAIN_007/md_MAIN_007
[ OK ] build/md_MAIN_007/md_MAIN_007
sha1 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c == config/check.md_MAIN_007.sha (BYTE-IDENTICAL)
@@ -1,5 +0,0 @@
CC build/src/md_MAIN_009/md_MAIN_009.o
LD build/md_MAIN_009/md_MAIN_009.elf
OBJCOPY build/md_MAIN_009/md_MAIN_009
[ OK ] build/md_MAIN_009/md_MAIN_009
sha1 d270f695b793b5c03db159b7aabcc066daa87eda == config/check.md_MAIN_009.sha (BYTE-IDENTICAL)
@@ -1,5 +0,0 @@
CC build/src/md_MAIN_009/md_MAIN_009.o
LD build/md_MAIN_009/md_MAIN_009.elf
OBJCOPY build/md_MAIN_009/md_MAIN_009
[ OK ] build/md_MAIN_009/md_MAIN_009
sha1 d270f695b793b5c03db159b7aabcc066daa87eda == config/check.md_MAIN_009.sha (BYTE-IDENTICAL)
@@ -1,2 +0,0 @@
[ OK ] build/md_MAIN_009/md_MAIN_009
sha1 d270f695b793b5c03db159b7aabcc066daa87eda == config/check.md_MAIN_009.sha (BYTE-IDENTICAL)
@@ -1,5 +0,0 @@
CC build/src/md_MAIN_009/md_MAIN_009.o
LD build/md_MAIN_009/md_MAIN_009.elf
OBJCOPY build/md_MAIN_009/md_MAIN_009
[ OK ] build/md_MAIN_009/md_MAIN_009
sha1 d270f695b793b5c03db159b7aabcc066daa87eda == config/check.md_MAIN_009.sha (BYTE-IDENTICAL)
@@ -1,5 +0,0 @@
CC build/src/md_MAIN_009/md_MAIN_009.o
LD build/md_MAIN_009/md_MAIN_009.elf
OBJCOPY build/md_MAIN_009/md_MAIN_009
[ OK ] build/md_MAIN_009/md_MAIN_009
sha1 d270f695b793b5c03db159b7aabcc066daa87eda == config/check.md_MAIN_009.sha (BYTE-IDENTICAL)
@@ -1,6 +0,0 @@
CC build/src/md_SC03_054/md_SC03_054.o
jtbl_rodata_pads --derive md_SC03_054: 0,0t1,0t1,0t1,0t1,0t1,0
LD build/md_SC03_054/md_SC03_054.elf
OBJCOPY build/md_SC03_054/md_SC03_054
[ OK ] build/md_SC03_054/md_SC03_054
sha1 06bd73dfbdb10748adcbac7093ead5d76131206a == config/check.md_SC03_054.sha (BYTE-IDENTICAL)
@@ -1,9 +0,0 @@
CC build/src/md_SC03_056/md_SC03_056.o
src/md_SC03_056/md_SC03_056.c: In function `func_801CBBDC':
src/md_SC03_056/md_SC03_056.c:39: warning: passing arg 2 of `func_80178CBC' makes integer from pointer without a cast
src/md_SC03_056/md_SC03_056.c: In function `func_801CBC08':
src/md_SC03_056/md_SC03_056.c:48: warning: passing arg 1 of `func_80178970' from incompatible pointer type
LD build/md_SC03_056/md_SC03_056.elf
OBJCOPY build/md_SC03_056/md_SC03_056
[ OK ] build/md_SC03_056/md_SC03_056
sha1 bc768a6b7baa911e0a0cb9175b33550851d6c1eb == config/check.md_SC03_056.sha (BYTE-IDENTICAL)
-49
View File
@@ -1,49 +0,0 @@
CC build/src/ov_SC03_105/ov_SC03_105_jr_80181C84.o
In file included from src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:2:
src/ov_SC03_105/../shared/engine_core.h:161199: warning: "DEFINE_func_8013FFD8" redefined
161199 | #define DEFINE_func_8013FFD8() \
|
src/ov_SC03_105/../shared/engine_core.h:32633: note: this is the location of the previous definition
32633 | #define DEFINE_func_8013FFD8() \
|
src/ov_SC03_105/../shared/engine_core.h:169456: warning: "DEFINE_func_8013F350" redefined
169456 | #define DEFINE_func_8013F350() \
|
src/ov_SC03_105/../shared/engine_core.h:40890: note: this is the location of the previous definition
40890 | #define DEFINE_func_8013F350() \
|
src/ov_SC03_105/../shared/engine_core.h:185848: warning: "DEFINE_func_80181538" redefined
185848 | #define DEFINE_func_80181538() \
|
src/ov_SC03_105/../shared/engine_core.h:57282: note: this is the location of the previous definition
57282 | #define DEFINE_func_80181538() \
|
src/ov_SC03_105/../shared/engine_core.h:190943: warning: "DEFINE_func_801808C4" redefined
190943 | #define DEFINE_func_801808C4() \
|
src/ov_SC03_105/../shared/engine_core.h:62377: note: this is the location of the previous definition
62377 | #define DEFINE_func_801808C4() \
|
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:1558: warning: conflicting types for built-in function `memcpy'
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3827: warning: type mismatch with previous external decl
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3804: warning: previous external decl of `func_8018383C'
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3827: warning: type mismatch with previous implicit declaration
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3820: warning: previous implicit declaration of `func_8018383C'
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3827: warning: `func_8018383C' was previously implicitly declared to return `int'
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c: In function `func_8018388C':
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3871: warning: passing arg 3 of `func_8013361C' from incompatible pointer type
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3871: warning: passing arg 4 of `func_8013361C' from incompatible pointer type
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3878: warning: passing arg 5 of `func_8012F568' makes integer from pointer without a cast
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3878: warning: passing arg 6 of `func_8012F568' makes integer from pointer without a cast
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c: In function `func_80184500':
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:4472: warning: passing arg 1 of `func_800599B8' from incompatible pointer type
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c: At top level:
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:4607: warning: type mismatch with previous external decl
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3339: warning: previous external decl of `D_801BA5A8'
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c: In function `func_80185480':
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:5196: warning: passing arg 2 makes pointer from integer without a cast
LD build/ov_SC03_105/ov_SC03_105.elf
OBJCOPY build/ov_SC03_105/ov_SC03_105
TRIM build/ov_SC03_105/ov_SC03_105 (-1 B linker end-align pad)
[ OK ] build/ov_SC03_105/ov_SC03_105
sha1 d305ff6da199b52d0d44023766643a8b661ed524 == config/check.ov_SC03_105.sha (BYTE-IDENTICAL)
-49
View File
@@ -1,49 +0,0 @@
CC build/src/ov_SC03_105/ov_SC03_105_jr_80181C84.o
In file included from src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:2:
src/ov_SC03_105/../shared/engine_core.h:161199: warning: "DEFINE_func_8013FFD8" redefined
161199 | #define DEFINE_func_8013FFD8() \
|
src/ov_SC03_105/../shared/engine_core.h:32633: note: this is the location of the previous definition
32633 | #define DEFINE_func_8013FFD8() \
|
src/ov_SC03_105/../shared/engine_core.h:169456: warning: "DEFINE_func_8013F350" redefined
169456 | #define DEFINE_func_8013F350() \
|
src/ov_SC03_105/../shared/engine_core.h:40890: note: this is the location of the previous definition
40890 | #define DEFINE_func_8013F350() \
|
src/ov_SC03_105/../shared/engine_core.h:185848: warning: "DEFINE_func_80181538" redefined
185848 | #define DEFINE_func_80181538() \
|
src/ov_SC03_105/../shared/engine_core.h:57282: note: this is the location of the previous definition
57282 | #define DEFINE_func_80181538() \
|
src/ov_SC03_105/../shared/engine_core.h:190943: warning: "DEFINE_func_801808C4" redefined
190943 | #define DEFINE_func_801808C4() \
|
src/ov_SC03_105/../shared/engine_core.h:62377: note: this is the location of the previous definition
62377 | #define DEFINE_func_801808C4() \
|
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:1558: warning: conflicting types for built-in function `memcpy'
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3827: warning: type mismatch with previous external decl
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3804: warning: previous external decl of `func_8018383C'
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3827: warning: type mismatch with previous implicit declaration
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3820: warning: previous implicit declaration of `func_8018383C'
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3827: warning: `func_8018383C' was previously implicitly declared to return `int'
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c: In function `func_8018388C':
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3871: warning: passing arg 3 of `func_8013361C' from incompatible pointer type
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3871: warning: passing arg 4 of `func_8013361C' from incompatible pointer type
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3878: warning: passing arg 5 of `func_8012F568' makes integer from pointer without a cast
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3878: warning: passing arg 6 of `func_8012F568' makes integer from pointer without a cast
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c: In function `func_80184500':
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:4472: warning: passing arg 1 of `func_800599B8' from incompatible pointer type
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c: At top level:
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:4607: warning: type mismatch with previous external decl
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:3339: warning: previous external decl of `D_801BA5A8'
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c: In function `func_80185480':
src/ov_SC03_105/ov_SC03_105_jr_80181C84.c:5196: warning: passing arg 2 makes pointer from integer without a cast
LD build/ov_SC03_105/ov_SC03_105.elf
OBJCOPY build/ov_SC03_105/ov_SC03_105
TRIM build/ov_SC03_105/ov_SC03_105 (-1 B linker end-align pad)
[ OK ] build/ov_SC03_105/ov_SC03_105
sha1 d305ff6da199b52d0d44023766643a8b661ed524 == config/check.ov_SC03_105.sha (BYTE-IDENTICAL)
-97
View File
@@ -1,97 +0,0 @@
CC build/src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.o
In file included from src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:2:
src/ov_SC06_022/../shared/engine_core.h:161199: warning: "DEFINE_func_8013FFD8" redefined
161199 | #define DEFINE_func_8013FFD8() \
|
src/ov_SC06_022/../shared/engine_core.h:32633: note: this is the location of the previous definition
32633 | #define DEFINE_func_8013FFD8() \
|
src/ov_SC06_022/../shared/engine_core.h:169456: warning: "DEFINE_func_8013F350" redefined
169456 | #define DEFINE_func_8013F350() \
|
src/ov_SC06_022/../shared/engine_core.h:40890: note: this is the location of the previous definition
40890 | #define DEFINE_func_8013F350() \
|
src/ov_SC06_022/../shared/engine_core.h:185848: warning: "DEFINE_func_80181538" redefined
185848 | #define DEFINE_func_80181538() \
|
src/ov_SC06_022/../shared/engine_core.h:57282: note: this is the location of the previous definition
57282 | #define DEFINE_func_80181538() \
|
src/ov_SC06_022/../shared/engine_core.h:190943: warning: "DEFINE_func_801808C4" redefined
190943 | #define DEFINE_func_801808C4() \
|
src/ov_SC06_022/../shared/engine_core.h:62377: note: this is the location of the previous definition
62377 | #define DEFINE_func_801808C4() \
|
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:1525: warning: conflicting types for built-in function `memcpy'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:4131:61: warning: "/*" within comment [-Wcomment]
4131 | * family, all identical wherever declared — src/ov_SC06_022/*.c and the
|
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c: In function `func_8017D454':
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3489: warning: passing arg 1 of `func_8012A018' makes integer from pointer without a cast
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c: In function `func_8017D518':
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3526: warning: passing arg 1 of `func_8012A018' makes integer from pointer without a cast
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c: In function `func_8017D5D8':
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3545: warning: type mismatch with previous external decl
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3437: warning: previous external decl of `D_80126940'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c: In function `func_8017D6E0':
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3590: warning: type mismatch with previous external decl
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3437: warning: previous external decl of `D_80126940'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c: In function `func_8017D7CC':
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3631: warning: type mismatch with previous external decl
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3437: warning: previous external decl of `D_80126940'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c: In function `func_8017D8D4':
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3674: warning: type mismatch with previous external decl
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3437: warning: previous external decl of `D_80126940'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c: At top level:
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3722: warning: type mismatch with previous external decl
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3578: warning: previous external decl of `func_8017D9C0'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3722: warning: type mismatch with previous implicit declaration
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3704: warning: previous implicit declaration of `func_8017D9C0'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3722: warning: `func_8017D9C0' was previously implicitly declared to return `int'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3755: warning: type mismatch with previous external decl
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3579: warning: previous external decl of `func_8017DB58'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3755: warning: type mismatch with previous implicit declaration
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3665: warning: previous implicit declaration of `func_8017DB58'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3755: warning: `func_8017DB58' was previously implicitly declared to return `int'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c: In function `func_8017DB58':
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3760: warning: assignment from incompatible pointer type
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c: In function `func_8017DC0C':
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3803: warning: passing arg 3 of `func_80128D60' from incompatible pointer type
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c: At top level:
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:4038: warning: type mismatch with previous external decl
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3985: warning: previous external decl of `func_8017E2B0'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:4038: warning: type mismatch with previous implicit declaration
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:4015: warning: previous implicit declaration of `func_8017E2B0'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:4038: warning: `func_8017E2B0' was previously implicitly declared to return `int'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:4142: warning: type mismatch with previous external decl
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3844: warning: previous external decl of `func_8012B0B4'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:4142: warning: type mismatch with previous implicit declaration
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3855: warning: previous implicit declaration of `func_8012B0B4'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:4142: warning: `func_8012B0B4' was previously implicitly declared to return `int'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c: In function `func_8017EA6C':
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:4353: warning: type mismatch with previous external decl
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3818: warning: previous external decl of `func_8017EFE0'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:4353: warning: type mismatch with previous implicit declaration
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3818: warning: previous implicit declaration of `func_8017EFE0'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:4355: warning: type mismatch with previous external decl
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3823: warning: previous external decl of `func_8012E9C0'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:4355: warning: type mismatch with previous implicit declaration
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3823: warning: previous implicit declaration of `func_8012E9C0'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c: At top level:
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:4546: warning: type mismatch with previous external decl
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3818: warning: previous external decl of `func_8017EFE0'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:4546: warning: type mismatch with previous implicit declaration
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:3818: warning: previous implicit declaration of `func_8017EFE0'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:4546: warning: `func_8017EFE0' was previously implicitly declared to return `int'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:5483: warning: type mismatch with previous external decl
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:5466: warning: previous external decl of `func_80180700'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:5483: warning: type mismatch with previous implicit declaration
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:5466: warning: previous implicit declaration of `func_80180700'
src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c:5483: warning: `func_80180700' was previously implicitly declared to return `int'
LD build/ov_SC06_022/ov_SC06_022.elf
OBJCOPY build/ov_SC06_022/ov_SC06_022
TRIM build/ov_SC06_022/ov_SC06_022 (-1 B linker end-align pad)
[ OK ] build/ov_SC06_022/ov_SC06_022
sha1 2a7d7d4e2fe2f87a83a065686731c7942b3c70ef == config/check.ov_SC06_022.sha (BYTE-IDENTICAL)
-113
View File
@@ -1,113 +0,0 @@
CC build/src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.o
In file included from src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:2:
src/ov_SC07_002/../shared/engine_core.h:161199: warning: "DEFINE_func_8013FFD8" redefined
161199 | #define DEFINE_func_8013FFD8() \
|
src/ov_SC07_002/../shared/engine_core.h:32633: note: this is the location of the previous definition
32633 | #define DEFINE_func_8013FFD8() \
|
src/ov_SC07_002/../shared/engine_core.h:169456: warning: "DEFINE_func_8013F350" redefined
169456 | #define DEFINE_func_8013F350() \
|
src/ov_SC07_002/../shared/engine_core.h:40890: note: this is the location of the previous definition
40890 | #define DEFINE_func_8013F350() \
|
src/ov_SC07_002/../shared/engine_core.h:185848: warning: "DEFINE_func_80181538" redefined
185848 | #define DEFINE_func_80181538() \
|
src/ov_SC07_002/../shared/engine_core.h:57282: note: this is the location of the previous definition
57282 | #define DEFINE_func_80181538() \
|
src/ov_SC07_002/../shared/engine_core.h:190943: warning: "DEFINE_func_801808C4" redefined
190943 | #define DEFINE_func_801808C4() \
|
src/ov_SC07_002/../shared/engine_core.h:62377: note: this is the location of the previous definition
62377 | #define DEFINE_func_801808C4() \
|
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:1531: warning: conflicting types for built-in function `memcpy'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_8017DC80':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:3518: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:2823: warning: previous external decl of `func_80052E38'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_8017FA94':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:4552: warning: passing arg 2 of `func_8014C59C' makes pointer from integer without a cast
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_8017FEC4':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:4683: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:4591: warning: previous external decl of `D_80126940'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_8017FF84':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:4706: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:4591: warning: previous external decl of `D_80126940'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_80180090':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:4745: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:4591: warning: previous external decl of `D_80126940'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_80180248':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:4786: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:4591: warning: previous external decl of `D_80126940'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_8018094C':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:5003: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:4591: warning: previous external decl of `D_80126940'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_80180A2C':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:5032: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:4591: warning: previous external decl of `D_80126940'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:5036: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:4595: warning: previous external decl of `func_80181394'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_80180B0C':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:5061: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:4591: warning: previous external decl of `D_80126940'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_80180BEC':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:5114: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:4591: warning: previous external decl of `D_80126940'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_80180CCC':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:5147: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:4591: warning: previous external decl of `D_80126940'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: At top level:
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:5176: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:4591: warning: previous external decl of `D_80126940'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:5536: warning: parameter names (without types) in function declaration
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:5931: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:5846: warning: previous external decl of `func_8018247C'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:5931: warning: type mismatch with previous implicit declaration
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:5846: warning: previous implicit declaration of `func_8018247C'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:5931: warning: `func_8018247C' was previously implicitly declared to return `int'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_80182C68':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:6298: warning: passing arg 1 makes pointer from integer without a cast
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:6307: warning: passing arg 1 of `func_80182264' makes pointer from integer without a cast
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:6319: warning: passing arg 1 of `func_8012AD50' makes pointer from integer without a cast
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_80182D50':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:6341: warning: passing arg 1 of `func_80182538' makes integer from pointer without a cast
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_80182E48':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:6379: warning: passing arg 2 of `func_8001C214' makes integer from pointer without a cast
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:6387: warning: passing arg 1 of `func_8012AD50' makes pointer from integer without a cast
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_80184410':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:7234: warning: passing arg 1 of `func_8012C218' makes pointer from integer without a cast
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_801849AC':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:7691: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:2824: warning: previous external decl of `D_800A5E60'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_8018503C':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:8058: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:7970: warning: previous external decl of `D_8019FD76'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_80185150':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:8152: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:7690: warning: previous external decl of `D_800AE620'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:8154: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:7692: warning: previous external decl of `D_800A651C'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: At top level:
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:8599: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:8451: warning: previous external decl of `func_80185A2C'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:8599: warning: type mismatch with previous implicit declaration
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:8546: warning: previous implicit declaration of `func_80185A2C'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:8599: warning: `func_80185A2C' was previously implicitly declared to return `int'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_80185E90':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:8808: warning: passing arg 1 makes pointer from integer without a cast
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: At top level:
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:9015: warning: type mismatch with previous external decl
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:8911: warning: previous external decl of `func_801863B0'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:9015: warning: type mismatch with previous implicit declaration
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:8911: warning: previous implicit declaration of `func_801863B0'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:9015: warning: `func_801863B0' was previously implicitly declared to return `int'
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: In function `func_8018672C':
src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c:9163: warning: passing arg 3 makes integer from pointer without a cast
LD build/ov_SC07_002/ov_SC07_002.elf
OBJCOPY build/ov_SC07_002/ov_SC07_002
TRIM build/ov_SC07_002/ov_SC07_002 (-1 B linker end-align pad)
[ OK ] build/ov_SC07_002/ov_SC07_002
sha1 fad71342019704d1dd6ec25f2f3934c97e322624 == config/check.ov_SC07_002.sha (BYTE-IDENTICAL)
@@ -1,5 +0,0 @@
CC build/src/md_MAIN_007/md_MAIN_007.o
LD build/md_MAIN_007/md_MAIN_007.elf
OBJCOPY build/md_MAIN_007/md_MAIN_007
[ OK ] build/md_MAIN_007/md_MAIN_007
sha1 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c == config/check.md_MAIN_007.sha (BYTE-IDENTICAL)
@@ -1,6 +0,0 @@
CC build/src/md_MAIN_007/md_MAIN_007.o
src/md_MAIN_007/md_MAIN_007.c: In function `func_800CEF94':
src/md_MAIN_007/md_MAIN_007.c:76: conflicting types for `D_800B99E8'
src/md_MAIN_007/md_MAIN_007.c:45: previous declaration of `D_800B99E8'
make: *** [Makefile:791: build/src/md_MAIN_007/md_MAIN_007.o] Error 33
make: *** Deleting file 'build/src/md_MAIN_007/md_MAIN_007.o'
@@ -1,6 +0,0 @@
CC build/src/md_MAIN_007/md_MAIN_007.o
LD build/md_MAIN_007/md_MAIN_007.elf
mipsel-linux-gnu-ld: build/src/md_MAIN_007/md_MAIN_007.o: in function `func_800CF068':
src/md_MAIN_007/md_MAIN_007.c:(.text+0x240): undefined reference to `D_800CEDFC'
mipsel-linux-gnu-ld: src/md_MAIN_007/md_MAIN_007.c:(.text+0x244): undefined reference to `D_800CEDFC'
make: *** [Makefile:852: build/md_MAIN_007/md_MAIN_007] Error 1
@@ -1,5 +0,0 @@
CC build/src/md_MAIN_007/md_MAIN_007.o
LD build/md_MAIN_007/md_MAIN_007.elf
OBJCOPY build/md_MAIN_007/md_MAIN_007
[ OK ] build/md_MAIN_007/md_MAIN_007
sha1 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c == config/check.md_MAIN_007.sha (BYTE-IDENTICAL)
@@ -1,5 +0,0 @@
CC build/src/md_MAIN_007/md_MAIN_007.o
LD build/md_MAIN_007/md_MAIN_007.elf
OBJCOPY build/md_MAIN_007/md_MAIN_007
[ OK ] build/md_MAIN_007/md_MAIN_007
sha1 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c == config/check.md_MAIN_007.sha (BYTE-IDENTICAL)
-6
View File
@@ -1,6 +0,0 @@
CC build/src/md_SC03_054/md_SC03_054.o
jtbl_rodata_pads --derive md_SC03_054: 0,0t1,0t1,0t1,0t1,0t1,0
LD build/md_SC03_054/md_SC03_054.elf
OBJCOPY build/md_SC03_054/md_SC03_054
[ OK ] build/md_SC03_054/md_SC03_054
sha1 06bd73dfbdb10748adcbac7093ead5d76131206a == config/check.md_SC03_054.sha (BYTE-IDENTICAL)
-1
View File
@@ -1 +0,0 @@
cookbook index -> docs/cookbook-index.md (1168 sections, 14 symptom buckets)
-11
View File
@@ -1,11 +0,0 @@
ILS func_8001BC6C: 8 cycles x 150s @ -j3, klass=REGALLOC
cycle 1: no waypoint (no improvement over base yet)
cycle 2: no waypoint (no improvement over base yet)
cycle 3: no waypoint (no improvement over base yet)
cycle 4: no waypoint (no improvement over base yet)
cycle 5: no waypoint (no improvement over base yet)
cycle 6: best score = 6 [output-6-1]
cycle 7: best score = 5 [output-5-1]
cycle 8: best score = 1 [output-1-1]
ILS done: best=1 (no score-0; seed for Fable5 or a longer run)
EXIT=0
-11
View File
@@ -1,11 +0,0 @@
ILS func_800CD674: 8 cycles x 150s @ -j3, klass=REGALLOC
cycle 1: no waypoint (no improvement over base yet)
cycle 2: no waypoint (no improvement over base yet)
cycle 3: no waypoint (no improvement over base yet)
cycle 4: best score = 2 [output-2-1]
cycle 5: best score = 2 (unchanged) [output-2-1]
cycle 6: best score = 2 (unchanged) [output-2-1]
cycle 7: best score = 2 (unchanged) [output-2-1]
cycle 8: best score = 2 (unchanged) [output-2-1]
ILS done: best=2 (no score-0; seed for Fable5 or a longer run)
EXIT=0
-219
View File
@@ -1,219 +0,0 @@
[ OK ] resident
[ OK ] ov_SC05_000
[ OK ] ov_SC01_000
[ OK ] ov_SC03_006
[ OK ] ov_SC06_000
[ OK ] ov_SC04_000
[ OK ] ov_SC01_001
[ OK ] ov_SC01_006
[ OK ] ov_SC01_005
[ OK ] ov_SC03_002
[ OK ] ov_SC01_077
[ OK ] ov_SC04_019
[ OK ] ov_SC04_018
[ OK ] ov_SC02_003
[ OK ] ov_SC03_001
[ OK ] ov_SC02_000
[ OK ] main
[ OK ] ov_SC01_074
[ OK ] ov_SC02_004
[ OK ] ov_SC01_080
[ OK ] ov_SC07_000
[ OK ] ov_SC01_008
[ OK ] ov_SC01_004
[ OK ] ov_SC01_009
[ OK ] ov_SC01_084
[ OK ] ov_SC02_015
[ OK ] ov_SC02_005
[ OK ] ov_SC02_021
[ OK ] ov_SC02_016
[ OK ] ov_SC02_011
[ OK ] ov_SC02_017
[ OK ] ov_SC02_026
[ OK ] ov_SC02_027
[ OK ] ov_SC02_031
[ OK ] ov_SC03_003
[ OK ] ov_SC02_041
[ OK ] ov_SC02_035
[ OK ] ov_SC02_039
[ OK ] ov_SC02_028
[ OK ] ov_SC03_010
[ OK ] ov_SC03_007
[ OK ] ov_SC03_011
[ OK ] ov_SC03_012
[ OK ] ov_SC03_023
[ OK ] ov_SC03_013
[ OK ] ov_SC03_014
[ OK ] ov_SC03_024
[ OK ] ov_SC03_015
[ OK ] ov_SC03_028
[ OK ] ov_SC03_030
[ OK ] ov_SC03_029
[ OK ] ov_SC03_031
[ OK ] ov_SC03_089
[ OK ] ov_SC03_090
[ OK ] ov_SC03_092
[ OK ] ov_SC03_093
[ OK ] ov_SC03_091
[ OK ] ov_SC03_094
[ OK ] ov_SC03_095
[ OK ] ov_SC03_096
[ OK ] ov_SC03_097
[ OK ] ov_SC03_098
[ OK ] ov_SC03_099
[ OK ] ov_SC03_100
[ OK ] ov_SC03_101
[ OK ] ov_SC03_102
[ OK ] ov_SC03_103
[ OK ] ov_SC03_109
[ OK ] ov_SC03_104
[ OK ] ov_SC03_108
[ OK ] ov_SC03_110
[ OK ] ov_SC03_113
[ OK ] ov_SC03_111
[ OK ] ov_SC03_114
[ OK ] ov_SC03_105
[ OK ] ov_SC03_112
[ OK ] ov_SC03_115
[ OK ] ov_SC03_116
[ OK ] ov_SC03_117
[ OK ] ov_SC03_118
[ OK ] ov_SC03_119
[ OK ] ov_SC03_126
[ OK ] ov_SC03_121
[ OK ] ov_SC03_125
[ OK ] ov_SC04_002
[ OK ] ov_SC04_003
[ OK ] ov_SC03_124
[ OK ] ov_SC04_004
[ OK ] ov_SC04_005
[ OK ] ov_SC04_008
[ OK ] ov_SC04_006
[ OK ] ov_SC04_007
[ OK ] ov_SC04_009
[ OK ] ov_SC04_010
[ OK ] ov_SC04_012
[ OK ] ov_SC04_011
[ OK ] ov_SC04_015
[ OK ] ov_SC04_016
[ OK ] ov_SC04_020
[ OK ] ov_SC04_021
[ OK ] ov_SC05_002
[ OK ] ov_SC05_001
[ OK ] ov_SC05_003
[ OK ] ov_SC05_004
[ OK ] ov_SC05_005
[ OK ] ov_SC05_006
[ OK ] ov_SC05_008
[ OK ] ov_SC05_007
[ OK ] ov_SC05_009
[ OK ] ov_SC05_010
[ OK ] ov_SC05_011
[ OK ] ov_SC05_017
[ OK ] ov_SC05_018
[ OK ] ov_SC05_019
[ OK ] ov_SC06_010
[ OK ] ov_SC06_008
[ OK ] ov_SC06_006
[ OK ] ov_SC06_011
[ OK ] ov_SC06_013
[ OK ] ov_SC06_014
[ OK ] ov_SC06_015
[ OK ] ov_SC06_016
[ OK ] ov_SC06_020
[ OK ] ov_SC06_018
[ OK ] ov_SC06_022
[ OK ] ov_SC06_025
[ OK ] ov_SC06_024
[ OK ] ov_SC06_027
[ OK ] md_MAIN_013
[ OK ] md_MAIN_014
[ OK ] md_MAIN_015
[ OK ] md_MAIN_016
[ OK ] md_MAIN_017
[ OK ] md_MAIN_018
[ OK ] md_MAIN_019
[ OK ] md_MAIN_020
[ OK ] md_MAIN_021
[ OK ] md_MAIN_022
[ OK ] md_MAIN_023
[ OK ] md_MAIN_024
[ OK ] md_MAIN_025
[ OK ] md_MAIN_026
[ OK ] ov_SC06_029
[ OK ] md_MAIN_027
[ OK ] md_MAIN_028
[ OK ] md_MAIN_029
[ OK ] md_MAIN_030
[ OK ] md_MAIN_031
[ OK ] md_MAIN_033
[ OK ] md_MAIN_034
[ OK ] md_MAIN_032
[ OK ] ov_SC06_030
[ OK ] md_MAIN_035
[ OK ] md_MAIN_036
[ OK ] md_MAIN_037
[ OK ] md_MAIN_038
[ OK ] md_MAIN_039
[ OK ] md_MAIN_040
[ OK ] md_MAIN_042
[ OK ] ov_SC07_001
[ OK ] md_MAIN_043
[ OK ] md_MAIN_044
[ OK ] md_MAIN_045
[ OK ] md_MAIN_046
[ OK ] md_MAIN_041
[ OK ] md_MAIN_047
[ OK ] md_MAIN_001
[ OK ] md_MAIN_008
[ OK ] md_MAIN_011
[ OK ] ov_SC07_009
[ OK ] ov_SC07_002
[ OK ] md_SC07_003
[ OK ] md_MAIN_003
[ OK ] ov_SC07_008
[ OK ] md_SC03_076
[ OK ] md_SC07_004
[ OK ] md_SC03_073
[ OK ] md_SC03_074
[ OK ] md_SC03_075
[ OK ] md_SC03_077
[ OK ] md_SC03_079
[ OK ] md_SC03_132
[ OK ] md_SC03_136
[ OK ] md_SC03_135
[ OK ] md_SC03_078
[ OK ] ov_SC07_006
[ OK ] md_SC04_024
[ OK ] md_SC03_133
[ OK ] md_SC04_025
[ OK ] md_SC03_134
[ OK ] md_SC04_026
[ OK ] md_SC03_137
[ OK ] md_SC03_138
[ OK ] md_SC04_029
[ OK ] md_SC04_030
[ OK ] md_SC05_023
[ OK ] md_SC04_027
[ OK ] md_SC05_024
[ OK ] md_SC04_028
[ OK ] md_SC05_025
[ OK ] md_SC05_028
[ OK ] md_SC05_029
[ OK ] md_SC02_009
[ OK ] md_MAIN_009
[ OK ] md_MAIN_007
[ OK ] md_SC05_027
[ OK ] ov_SC07_007
[ OK ] md_SC05_026
[ OK ] md_SC03_053
[ OK ] ov_SC06_032
[ OK ] md_SC03_054
[ OK ] md_SC03_056
[ OK ] ov_SC07_010
[ OK ] ov_SC06_033
[ OK ] ov_MAIN_012
[ OK ] ov_SC02_037
[ OK ] ov_SC07_011
[ OK ] ov_SC03_107
check-all: 218 passed, 0 failed of 218
-1
View File
@@ -1 +0,0 @@
clean: removed build/, expected/, and the regenerated splat tree (asm/, assets/, include macros, undefined_*_auto.txt).
-253
View File
@@ -1,253 +0,0 @@
splat 0.41.0 (powered by spimdisasm 1.41.0)
0%| | 0/1096 [00:00<?, ?it/s] Loading symbols (symbols.us): 0%| | 0/1096 [00:00<?, ?it/s] Loading symbols (symbols.us): 100%|██████████| 1096/1096 [00:00<00:00, 101635.14it/s]
0%| | 0/47 [00:00<?, ?it/s] Loading symbols (symbols.us.ram): 0%| | 0/47 [00:00<?, ?it/s] Loading symbols (symbols.us.ram): 100%|██████████| 47/47 [00:00<00:00, 473875.69it/s]
0%| | 0/2 [00:00<?, ?it/s] Scanning header: 0%| | 0/2 [00:00<?, ?it/s] Scanning main: 0%| | 0/2 [00:00<?, ?it/s]
Rodata segment '800' may belong to the text segment '800'
Based on the usage from the function LzssDecodeSector to the symbol jtbl_80072A38
The rodata segment '800' has jumptables that are not aligned properly file-wise, indicating one or more likely file split.
File split suggestions for this segment will follow in config yaml format:
- [0x6324C, .rodata]
- [0x63388, .rodata]
- [0x633FC, .rodata]
Rodata segment '800_b' may belong to the text segment '800_b'
Based on the usage from the function func_8002B0B4 to the symbol jtbl_80072E44
Rodata segment '800_b_2' may belong to the text segment '800_b_2'
Based on the usage from the function func_8002DC68 to the symbol jtbl_80072F3C
The rodata segment '800_b_2' has jumptables that are not aligned properly file-wise, indicating one or more likely file split.
File split suggestions for this segment will follow in config yaml format:
- [0x63920, .rodata]
Rodata segment '800_c' may belong to the text segment '800_c'
Based on the usage from the function func_80035270 to the symbol jtbl_800732A0
Scanning main: 100%|██████████| 2/2 [00:01<00:00, 1.14it/s] Scanning main: 100%|██████████| 2/2 [00:01<00:00, 1.14it/s]
0%| | 0/2 [00:00<?, ?it/s] Splitting header: 0%| | 0/2 [00:00<?, ?it/s] Splitting main: 0%| | 0/2 [00:00<?, ?it/s] Splitting main: 100%|██████████| 2/2 [00:01<00:00, 1.53it/s] Splitting main: 100%|██████████| 2/2 [00:01<00:00, 1.53it/s]
0%| | 0/2 [00:00<?, ?it/s] Linker script header: 0%| | 0/2 [00:00<?, ?it/s] Linker script main: 0%| | 0/2 [00:00<?, ?it/s] Linker script main: 100%|██████████| 2/2 [00:00<00:00, 72.82it/s]
Split 340 KB (82.28%) in defined segments
header: 2 KB (0.50%) 1 split, 0 cached
c: 338 KB (81.78%) 85 split, 0 cached
unknown: 0 B (0.00%) from unknown bin files
ld_interleave --order: .main island = 8 pieces [53198.data.o, 800.o, 63470.data.o, 800_b.o, 800_b_2.o, 63940.data.o, 800_c.o, 63C4C.data.o]; pre=0 text=85 empties=166 bss=85
[ OK ] resident
[ OK ] ov_SC05_000
[ OK ] ov_SC01_000
[ OK ] ov_SC06_000
[ OK ] ov_SC04_000
[ OK ] ov_SC03_002
[ OK ] ov_SC01_005
[ OK ] ov_SC01_006
[ OK ] ov_SC01_077
[ OK ] ov_SC02_003
[ OK ] ov_SC02_000
[ OK ] ov_SC04_018
[ OK ] ov_SC04_019
[ OK ] ov_SC03_001
[ OK ] ov_SC03_006
[ OK ] ov_SC01_001
[ OK ] ov_SC01_004
[ OK ] ov_SC01_008
[ OK ] ov_SC01_074
[ OK ] ov_SC07_000
[ OK ] ov_SC02_004
[ OK ] ov_SC02_015
[ OK ] ov_SC02_021
[ OK ] ov_SC01_080
[ OK ] ov_SC01_084
[ OK ] ov_SC01_009
[ OK ] ov_SC02_016
[ OK ] ov_SC02_026
[ OK ] ov_SC02_027
[ OK ] ov_SC02_005
[ OK ] ov_SC02_039
[ OK ] ov_SC02_011
[ OK ] ov_SC02_028
[ OK ] ov_SC02_031
[ OK ] ov_SC02_017
[ OK ] ov_SC03_003
[ OK ] ov_SC02_035
[ OK ] ov_SC02_041
[ OK ] ov_SC03_010
[ OK ] ov_SC03_012
[ OK ] ov_SC03_011
[ OK ] ov_SC03_013
[ OK ] ov_SC03_023
[ OK ] ov_SC03_007
[ OK ] ov_SC03_024
[ OK ] ov_SC03_089
[ OK ] ov_SC03_031
[ OK ] ov_SC03_090
[ OK ] ov_SC03_014
[ OK ] ov_SC03_029
[ OK ] ov_SC03_015
[ OK ] ov_SC03_030
[ OK ] ov_SC03_092
[ OK ] ov_SC03_095
[ OK ] ov_SC03_091
[ OK ] ov_SC03_028
[ OK ] ov_SC03_093
[ OK ] ov_SC03_096
[ OK ] ov_SC03_094
[ OK ] ov_SC03_097
[ OK ] ov_SC03_101
[ OK ] ov_SC03_098
[ OK ] ov_SC03_109
[ OK ] ov_SC03_108
[ OK ] ov_SC03_099
[ OK ] ov_SC03_110
[ OK ] ov_SC03_102
[ OK ] ov_SC03_100
[ OK ] ov_SC03_103
[ OK ] ov_SC03_104
[ OK ] ov_SC03_112
[ OK ] ov_SC03_111
[ OK ] ov_SC03_115
[ OK ] ov_SC03_105
[ OK ] ov_SC03_113
[ OK ] ov_SC03_114
[ OK ] ov_SC03_116
[ OK ] ov_SC03_126
[ OK ] ov_SC03_121
[ OK ] ov_SC04_003
[ OK ] ov_SC04_008
[ OK ] ov_SC03_117
[ OK ] ov_SC04_006
[ OK ] ov_SC04_009
[ OK ] ov_SC04_004
[ OK ] ov_SC03_118
[ OK ] ov_SC04_002
[ OK ] ov_SC03_125
[ OK ] ov_SC03_119
[ OK ] ov_SC04_007
[ OK ] ov_SC04_005
[ OK ] ov_SC04_010
[ OK ] ov_SC03_124
[ OK ] ov_SC04_012
[ OK ] ov_SC04_021
[ OK ] ov_SC04_016
[ OK ] ov_SC05_006
[ OK ] ov_SC05_002
[ OK ] ov_SC05_001
[ OK ] ov_SC05_004
[ OK ] ov_SC05_007
[ OK ] ov_SC04_020
[ OK ] ov_SC05_009
[ OK ] ov_SC05_003
[ OK ] ov_SC04_015
[ OK ] ov_SC05_008
[ OK ] ov_SC05_005
[ OK ] ov_SC04_011
[ OK ] ov_SC05_010
[ OK ] ov_SC05_011
[ OK ] ov_SC05_019
[ OK ] ov_SC06_015
[ OK ] ov_SC06_013
[ OK ] ov_SC06_008
[ OK ] ov_SC06_014
[ OK ] ov_SC06_016
[ OK ] ov_SC06_010
[ OK ] ov_SC06_011
[ OK ] ov_SC05_017
[ OK ] ov_SC06_020
[ OK ] ov_SC05_018
[ OK ] ov_SC06_018
[ OK ] ov_SC06_025
[ OK ] ov_SC06_027
[ OK ] ov_SC06_006
[ OK ] ov_SC06_022
[ OK ] ov_SC06_024
[ OK ] md_MAIN_013
[ OK ] md_MAIN_014
[ OK ] ov_SC07_008
[ OK ] ov_SC07_002
[ OK ] md_MAIN_015
[ OK ] ov_SC07_001
[ OK ] md_MAIN_016
[ OK ] md_MAIN_018
[ OK ] md_MAIN_017
[ OK ] ov_SC06_030
[ OK ] md_MAIN_019
[ OK ] ov_SC07_009
[ OK ] md_MAIN_020
[ OK ] md_MAIN_022
[ OK ] md_MAIN_021
[ OK ] md_MAIN_023
[ OK ] md_MAIN_024
[ OK ] md_MAIN_025
[ OK ] md_MAIN_026
[ OK ] md_MAIN_027
[ OK ] md_MAIN_028
[ OK ] ov_SC06_032
[ OK ] md_MAIN_029
[ OK ] md_MAIN_030
[ OK ] md_MAIN_031
[ OK ] ov_SC06_033
[ OK ] md_MAIN_033
[ OK ] md_MAIN_032
[ OK ] ov_SC06_029
[ OK ] md_MAIN_035
[ OK ] ov_MAIN_012
[ OK ] md_MAIN_034
[ OK ] md_MAIN_036
[ OK ] md_MAIN_037
[ OK ] md_MAIN_038
[ OK ] ov_SC07_011
[ OK ] md_MAIN_039
[ OK ] md_MAIN_040
[ OK ] md_MAIN_042
[ OK ] md_MAIN_041
[ OK ] md_MAIN_043
[ OK ] md_MAIN_045
[ OK ] md_MAIN_044
[ OK ] md_MAIN_046
[ OK ] ov_SC07_010
[ OK ] md_MAIN_047
[ OK ] md_MAIN_008
[ OK ] md_MAIN_001
[ OK ] md_MAIN_011
[ OK ] md_SC03_073
[ OK ] md_SC03_074
[ OK ] md_SC03_078
[ OK ] ov_SC03_107
[ OK ] md_SC03_075
[ OK ] md_SC03_077
[ OK ] md_SC03_076
[ OK ] md_SC03_079
[ OK ] md_SC03_133
[ OK ] md_SC03_132
[ OK ] ov_SC07_007
[ OK ] md_SC03_137
[ OK ] md_SC03_134
[ OK ] md_SC03_136
[ OK ] md_SC03_135
[ OK ] md_SC03_138
[ OK ] md_SC04_024
[ OK ] md_SC04_025
[ OK ] md_MAIN_003
[ OK ] md_SC04_029
[ OK ] md_SC04_026
[ OK ] md_SC04_028
[ OK ] md_SC04_027
[ OK ] md_SC05_023
[ OK ] md_SC05_024
[ OK ] md_SC04_030
[ OK ] md_SC05_025
[ OK ] md_SC05_028
[ OK ] md_MAIN_007
[ OK ] md_SC05_027
[ OK ] md_MAIN_009
[ OK ] ov_SC02_037
[ OK ] md_SC05_026
[ OK ] md_SC05_029
[ OK ] md_SC03_053
[ OK ] ov_SC07_006
[ OK ] md_SC03_056
[ OK ] md_SC03_054
[ OK ] md_SC02_009
[ OK ] md_SC07_004
[ OK ] md_SC07_003
extract-all: 217 extracted, 0 failed of 217 (+ main, serial)
-219
View File
@@ -1,219 +0,0 @@
[ OK ] resident
[ OK ] ov_SC01_000
[ OK ] ov_SC05_000
[ OK ] ov_SC03_006
[ OK ] ov_SC06_000
[ OK ] ov_SC04_000
[ OK ] ov_SC01_001
[ OK ] ov_SC01_006
[ OK ] ov_SC01_005
[ OK ] ov_SC03_002
[ OK ] ov_SC04_019
[ OK ] ov_SC01_077
[ OK ] ov_SC04_018
[ OK ] ov_SC02_003
[ OK ] ov_SC03_001
[ OK ] ov_SC02_000
[ OK ] main
[ OK ] ov_SC01_080
[ OK ] ov_SC02_004
[ OK ] ov_SC01_074
[ OK ] ov_SC01_004
[ OK ] ov_SC07_000
[ OK ] ov_SC01_008
[ OK ] ov_SC01_009
[ OK ] ov_SC01_084
[ OK ] ov_SC02_015
[ OK ] ov_SC02_005
[ OK ] ov_SC02_021
[ OK ] ov_SC02_016
[ OK ] ov_SC02_011
[ OK ] ov_SC02_017
[ OK ] ov_SC02_026
[ OK ] ov_SC02_027
[ OK ] ov_SC02_031
[ OK ] ov_SC03_003
[ OK ] ov_SC02_041
[ OK ] ov_SC02_039
[ OK ] ov_SC02_035
[ OK ] ov_SC02_028
[ OK ] ov_SC03_010
[ OK ] ov_SC03_007
[ OK ] ov_SC03_011
[ OK ] ov_SC03_012
[ OK ] ov_SC03_023
[ OK ] ov_SC03_013
[ OK ] ov_SC03_014
[ OK ] ov_SC03_024
[ OK ] ov_SC03_015
[ OK ] ov_SC03_028
[ OK ] ov_SC03_030
[ OK ] ov_SC03_031
[ OK ] ov_SC03_029
[ OK ] ov_SC03_089
[ OK ] ov_SC03_090
[ OK ] ov_SC03_092
[ OK ] ov_SC03_093
[ OK ] ov_SC03_094
[ OK ] ov_SC03_091
[ OK ] ov_SC03_095
[ OK ] ov_SC03_096
[ OK ] ov_SC03_097
[ OK ] ov_SC03_098
[ OK ] ov_SC03_099
[ OK ] ov_SC03_100
[ OK ] ov_SC03_101
[ OK ] ov_SC03_102
[ OK ] ov_SC03_103
[ OK ] ov_SC03_104
[ OK ] ov_SC03_109
[ OK ] ov_SC03_108
[ OK ] ov_SC03_110
[ OK ] ov_SC03_111
[ OK ] ov_SC03_113
[ OK ] ov_SC03_114
[ OK ] ov_SC03_112
[ OK ] ov_SC03_105
[ OK ] ov_SC03_115
[ OK ] ov_SC03_116
[ OK ] ov_SC03_117
[ OK ] ov_SC03_118
[ OK ] ov_SC03_119
[ OK ] ov_SC03_121
[ OK ] ov_SC03_126
[ OK ] ov_SC03_125
[ OK ] ov_SC04_002
[ OK ] ov_SC03_124
[ OK ] ov_SC04_004
[ OK ] ov_SC04_003
[ OK ] ov_SC04_005
[ OK ] ov_SC04_008
[ OK ] ov_SC04_006
[ OK ] ov_SC04_007
[ OK ] ov_SC04_009
[ OK ] ov_SC04_010
[ OK ] ov_SC04_011
[ OK ] ov_SC04_012
[ OK ] ov_SC04_015
[ OK ] ov_SC04_016
[ OK ] ov_SC04_021
[ OK ] ov_SC04_020
[ OK ] ov_SC05_002
[ OK ] ov_SC05_001
[ OK ] ov_SC05_004
[ OK ] ov_SC05_003
[ OK ] ov_SC05_005
[ OK ] ov_SC05_006
[ OK ] ov_SC05_007
[ OK ] ov_SC05_008
[ OK ] ov_SC05_009
[ OK ] ov_SC05_010
[ OK ] ov_SC05_011
[ OK ] ov_SC05_018
[ OK ] ov_SC05_017
[ OK ] ov_SC05_019
[ OK ] ov_SC06_010
[ OK ] ov_SC06_008
[ OK ] ov_SC06_006
[ OK ] ov_SC06_011
[ OK ] ov_SC06_013
[ OK ] ov_SC06_014
[ OK ] ov_SC06_015
[ OK ] ov_SC06_016
[ OK ] ov_SC06_020
[ OK ] ov_SC06_018
[ OK ] ov_SC06_022
[ OK ] ov_SC06_025
[ OK ] ov_SC06_024
[ OK ] ov_SC06_027
[ OK ] md_MAIN_013
[ OK ] md_MAIN_014
[ OK ] md_MAIN_015
[ OK ] md_MAIN_016
[ OK ] md_MAIN_017
[ OK ] md_MAIN_018
[ OK ] md_MAIN_019
[ OK ] md_MAIN_020
[ OK ] md_MAIN_021
[ OK ] md_MAIN_022
[ OK ] md_MAIN_023
[ OK ] md_MAIN_024
[ OK ] md_MAIN_025
[ OK ] ov_SC06_029
[ OK ] md_MAIN_026
[ OK ] md_MAIN_027
[ OK ] md_MAIN_028
[ OK ] md_MAIN_029
[ OK ] md_MAIN_030
[ OK ] md_MAIN_031
[ OK ] md_MAIN_033
[ OK ] md_MAIN_034
[ OK ] md_MAIN_032
[ OK ] md_MAIN_035
[ OK ] ov_SC06_030
[ OK ] md_MAIN_037
[ OK ] md_MAIN_036
[ OK ] md_MAIN_040
[ OK ] md_MAIN_039
[ OK ] md_MAIN_038
[ OK ] md_MAIN_042
[ OK ] md_MAIN_043
[ OK ] ov_SC07_001
[ OK ] md_MAIN_045
[ OK ] md_MAIN_044
[ OK ] md_MAIN_047
[ OK ] md_MAIN_001
[ OK ] md_MAIN_046
[ OK ] md_MAIN_041
[ OK ] md_MAIN_008
[ OK ] md_MAIN_011
[ OK ] ov_SC07_002
[ OK ] ov_SC07_008
[ OK ] md_SC07_003
[ OK ] ov_SC07_009
[ OK ] md_MAIN_003
[ OK ] md_SC07_004
[ OK ] md_SC03_076
[ OK ] md_SC03_077
[ OK ] md_SC03_073
[ OK ] md_SC03_079
[ OK ] md_SC03_132
[ OK ] md_SC03_074
[ OK ] md_SC03_075
[ OK ] md_SC03_135
[ OK ] md_SC03_136
[ OK ] md_SC03_078
[ OK ] md_SC03_133
[ OK ] md_SC04_024
[ OK ] md_SC04_025
[ OK ] md_SC03_134
[ OK ] md_SC04_026
[ OK ] md_SC03_137
[ OK ] md_SC04_029
[ OK ] md_SC03_138
[ OK ] ov_SC07_006
[ OK ] md_SC04_030
[ OK ] md_SC05_023
[ OK ] md_SC04_027
[ OK ] md_SC04_028
[ OK ] md_SC05_024
[ OK ] md_SC05_025
[ OK ] md_SC05_028
[ OK ] md_MAIN_007
[ OK ] md_SC05_029
[ OK ] md_SC02_009
[ OK ] md_SC05_027
[ OK ] md_MAIN_009
[ OK ] md_SC05_026
[ OK ] md_SC03_053
[ OK ] md_SC03_054
[ OK ] md_SC03_056
[ OK ] ov_SC07_007
[ OK ] ov_SC06_032
[ OK ] ov_SC07_010
[ OK ] ov_MAIN_012
[ OK ] ov_SC06_033
[ OK ] ov_SC02_037
[ OK ] ov_SC07_011
[ OK ] ov_SC03_107
check-all: 218 passed, 0 failed of 218
-1
View File
@@ -1 +0,0 @@
clean: removed build/, expected/, and the regenerated splat tree (asm/, assets/, include macros, undefined_*_auto.txt).
-253
View File
@@ -1,253 +0,0 @@
splat 0.41.0 (powered by spimdisasm 1.41.0)
0%| | 0/1096 [00:00<?, ?it/s] Loading symbols (symbols.us): 0%| | 0/1096 [00:00<?, ?it/s] Loading symbols (symbols.us): 100%|██████████| 1096/1096 [00:00<00:00, 130033.86it/s]
0%| | 0/47 [00:00<?, ?it/s] Loading symbols (symbols.us.ram): 0%| | 0/47 [00:00<?, ?it/s] Loading symbols (symbols.us.ram): 100%|██████████| 47/47 [00:00<00:00, 426693.26it/s]
0%| | 0/2 [00:00<?, ?it/s] Scanning header: 0%| | 0/2 [00:00<?, ?it/s] Scanning main: 0%| | 0/2 [00:00<?, ?it/s]
Rodata segment '800' may belong to the text segment '800'
Based on the usage from the function LzssDecodeSector to the symbol jtbl_80072A38
The rodata segment '800' has jumptables that are not aligned properly file-wise, indicating one or more likely file split.
File split suggestions for this segment will follow in config yaml format:
- [0x6324C, .rodata]
- [0x63388, .rodata]
- [0x633FC, .rodata]
Rodata segment '800_b' may belong to the text segment '800_b'
Based on the usage from the function func_8002B0B4 to the symbol jtbl_80072E44
Rodata segment '800_b_2' may belong to the text segment '800_b_2'
Based on the usage from the function func_8002DC68 to the symbol jtbl_80072F3C
The rodata segment '800_b_2' has jumptables that are not aligned properly file-wise, indicating one or more likely file split.
File split suggestions for this segment will follow in config yaml format:
- [0x63920, .rodata]
Rodata segment '800_c' may belong to the text segment '800_c'
Based on the usage from the function func_80035270 to the symbol jtbl_800732A0
Scanning main: 100%|██████████| 2/2 [00:01<00:00, 1.01it/s] Scanning main: 100%|██████████| 2/2 [00:01<00:00, 1.01it/s]
0%| | 0/2 [00:00<?, ?it/s] Splitting header: 0%| | 0/2 [00:00<?, ?it/s] Splitting main: 0%| | 0/2 [00:00<?, ?it/s] Splitting main: 100%|██████████| 2/2 [00:01<00:00, 1.71it/s] Splitting main: 100%|██████████| 2/2 [00:01<00:00, 1.71it/s]
0%| | 0/2 [00:00<?, ?it/s] Linker script header: 0%| | 0/2 [00:00<?, ?it/s] Linker script main: 0%| | 0/2 [00:00<?, ?it/s] Linker script main: 100%|██████████| 2/2 [00:00<00:00, 57.94it/s]
Split 340 KB (82.28%) in defined segments
header: 2 KB (0.50%) 1 split, 0 cached
c: 338 KB (81.78%) 85 split, 0 cached
unknown: 0 B (0.00%) from unknown bin files
ld_interleave --order: .main island = 8 pieces [53198.data.o, 800.o, 63470.data.o, 800_b.o, 800_b_2.o, 63940.data.o, 800_c.o, 63C4C.data.o]; pre=0 text=85 empties=166 bss=85
[ OK ] resident
[ OK ] ov_SC05_000
[ OK ] ov_SC01_000
[ OK ] ov_SC04_000
[ OK ] ov_SC06_000
[ OK ] ov_SC03_002
[ OK ] ov_SC01_005
[ OK ] ov_SC01_006
[ OK ] ov_SC01_077
[ OK ] ov_SC02_003
[ OK ] ov_SC02_000
[ OK ] ov_SC04_018
[ OK ] ov_SC04_019
[ OK ] ov_SC03_006
[ OK ] ov_SC03_001
[ OK ] ov_SC01_001
[ OK ] ov_SC01_004
[ OK ] ov_SC01_008
[ OK ] ov_SC01_074
[ OK ] ov_SC07_000
[ OK ] ov_SC02_004
[ OK ] ov_SC02_015
[ OK ] ov_SC02_021
[ OK ] ov_SC01_080
[ OK ] ov_SC01_084
[ OK ] ov_SC01_009
[ OK ] ov_SC02_016
[ OK ] ov_SC02_005
[ OK ] ov_SC02_026
[ OK ] ov_SC02_039
[ OK ] ov_SC02_027
[ OK ] ov_SC02_011
[ OK ] ov_SC02_031
[ OK ] ov_SC02_028
[ OK ] ov_SC02_017
[ OK ] ov_SC03_003
[ OK ] ov_SC02_035
[ OK ] ov_SC02_041
[ OK ] ov_SC03_012
[ OK ] ov_SC03_010
[ OK ] ov_SC03_011
[ OK ] ov_SC03_013
[ OK ] ov_SC03_023
[ OK ] ov_SC03_007
[ OK ] ov_SC03_024
[ OK ] ov_SC03_014
[ OK ] ov_SC03_015
[ OK ] ov_SC03_031
[ OK ] ov_SC03_029
[ OK ] ov_SC03_089
[ OK ] ov_SC03_092
[ OK ] ov_SC03_090
[ OK ] ov_SC03_030
[ OK ] ov_SC03_091
[ OK ] ov_SC03_095
[ OK ] ov_SC03_028
[ OK ] ov_SC03_096
[ OK ] ov_SC03_093
[ OK ] ov_SC03_094
[ OK ] ov_SC03_097
[ OK ] ov_SC03_101
[ OK ] ov_SC03_098
[ OK ] ov_SC03_109
[ OK ] ov_SC03_108
[ OK ] ov_SC03_099
[ OK ] ov_SC03_110
[ OK ] ov_SC03_102
[ OK ] ov_SC03_100
[ OK ] ov_SC03_104
[ OK ] ov_SC03_112
[ OK ] ov_SC03_105
[ OK ] ov_SC03_103
[ OK ] ov_SC03_111
[ OK ] ov_SC03_113
[ OK ] ov_SC03_115
[ OK ] ov_SC03_114
[ OK ] ov_SC03_116
[ OK ] ov_SC03_126
[ OK ] ov_SC04_003
[ OK ] ov_SC03_121
[ OK ] ov_SC04_008
[ OK ] ov_SC03_117
[ OK ] ov_SC04_009
[ OK ] ov_SC04_006
[ OK ] ov_SC03_118
[ OK ] ov_SC04_004
[ OK ] ov_SC03_119
[ OK ] ov_SC03_125
[ OK ] ov_SC04_002
[ OK ] ov_SC04_007
[ OK ] ov_SC04_005
[ OK ] ov_SC03_124
[ OK ] ov_SC04_010
[ OK ] ov_SC04_012
[ OK ] ov_SC04_021
[ OK ] ov_SC04_016
[ OK ] ov_SC05_006
[ OK ] ov_SC05_002
[ OK ] ov_SC05_004
[ OK ] ov_SC04_015
[ OK ] ov_SC05_007
[ OK ] ov_SC04_020
[ OK ] ov_SC05_003
[ OK ] ov_SC05_001
[ OK ] ov_SC05_009
[ OK ] ov_SC05_005
[ OK ] ov_SC05_008
[ OK ] ov_SC04_011
[ OK ] ov_SC05_011
[ OK ] ov_SC05_010
[ OK ] ov_SC05_019
[ OK ] ov_SC06_015
[ OK ] ov_SC06_013
[ OK ] ov_SC06_008
[ OK ] ov_SC06_014
[ OK ] ov_SC06_011
[ OK ] ov_SC06_016
[ OK ] ov_SC06_010
[ OK ] ov_SC05_017
[ OK ] ov_SC06_020
[ OK ] ov_SC05_018
[ OK ] ov_SC06_018
[ OK ] ov_SC06_006
[ OK ] ov_SC06_027
[ OK ] ov_SC06_025
[ OK ] ov_SC06_022
[ OK ] ov_SC06_024
[ OK ] ov_SC07_008
[ OK ] md_MAIN_013
[ OK ] md_MAIN_014
[ OK ] ov_SC07_002
[ OK ] md_MAIN_015
[ OK ] ov_SC07_001
[ OK ] md_MAIN_016
[ OK ] md_MAIN_017
[ OK ] ov_SC06_030
[ OK ] md_MAIN_018
[ OK ] md_MAIN_019
[ OK ] md_MAIN_020
[ OK ] md_MAIN_021
[ OK ] md_MAIN_023
[ OK ] md_MAIN_022
[ OK ] ov_SC07_009
[ OK ] md_MAIN_024
[ OK ] md_MAIN_026
[ OK ] md_MAIN_025
[ OK ] md_MAIN_027
[ OK ] ov_SC06_032
[ OK ] md_MAIN_028
[ OK ] md_MAIN_030
[ OK ] md_MAIN_029
[ OK ] md_MAIN_031
[ OK ] md_MAIN_032
[ OK ] ov_SC06_033
[ OK ] md_MAIN_035
[ OK ] md_MAIN_034
[ OK ] md_MAIN_033
[ OK ] ov_MAIN_012
[ OK ] md_MAIN_036
[ OK ] md_MAIN_037
[ OK ] ov_SC06_029
[ OK ] ov_SC07_011
[ OK ] md_MAIN_039
[ OK ] md_MAIN_040
[ OK ] md_MAIN_038
[ OK ] md_MAIN_042
[ OK ] md_MAIN_041
[ OK ] md_MAIN_043
[ OK ] ov_SC07_010
[ OK ] md_MAIN_044
[ OK ] md_MAIN_045
[ OK ] md_MAIN_046
[ OK ] md_MAIN_047
[ OK ] md_MAIN_008
[ OK ] md_MAIN_001
[ OK ] md_MAIN_011
[ OK ] md_SC03_073
[ OK ] md_SC03_078
[ OK ] md_SC03_074
[ OK ] md_SC03_075
[ OK ] md_SC03_077
[ OK ] ov_SC07_007
[ OK ] md_SC03_076
[ OK ] md_SC03_079
[ OK ] md_SC03_132
[ OK ] md_SC03_133
[ OK ] md_SC03_137
[ OK ] ov_SC03_107
[ OK ] md_SC03_134
[ OK ] md_SC03_135
[ OK ] md_SC03_136
[ OK ] md_MAIN_003
[ OK ] md_SC04_024
[ OK ] md_SC03_138
[ OK ] md_SC04_025
[ OK ] md_SC04_026
[ OK ] md_SC04_028
[ OK ] md_SC04_029
[ OK ] md_SC04_027
[ OK ] md_SC05_023
[ OK ] md_SC05_024
[ OK ] md_SC04_030
[ OK ] md_SC05_025
[ OK ] md_SC05_028
[ OK ] md_MAIN_007
[ OK ] md_MAIN_009
[ OK ] md_SC05_027
[ OK ] md_SC03_053
[ OK ] md_SC05_029
[ OK ] md_SC05_026
[ OK ] md_SC03_054
[ OK ] md_SC03_056
[ OK ] ov_SC02_037
[ OK ] md_SC02_009
[ OK ] ov_SC07_006
[ OK ] md_SC07_004
[ OK ] md_SC07_003
extract-all: 217 extracted, 0 failed of 217 (+ main, serial)
-219
View File
@@ -1,219 +0,0 @@
[ OK ] resident
[ OK ] ov_SC03_006
[ OK ] ov_SC01_000
[ OK ] ov_SC05_000
[ OK ] ov_SC06_000
[ OK ] ov_SC04_000
[ OK ] ov_SC01_001
[ OK ] ov_SC01_006
[ OK ] ov_SC01_005
[ OK ] ov_SC03_002
[ OK ] ov_SC04_019
[ OK ] ov_SC01_077
[ OK ] ov_SC04_018
[ OK ] ov_SC02_003
[ OK ] ov_SC03_001
[ OK ] ov_SC02_000
[ OK ] main
[ OK ] ov_SC02_004
[ OK ] ov_SC01_074
[ OK ] ov_SC01_080
[ OK ] ov_SC01_004
[ OK ] ov_SC07_000
[ OK ] ov_SC01_008
[ OK ] ov_SC01_009
[ OK ] ov_SC01_084
[ OK ] ov_SC02_015
[ OK ] ov_SC02_005
[ OK ] ov_SC02_011
[ OK ] ov_SC02_021
[ OK ] ov_SC02_016
[ OK ] ov_SC02_017
[ OK ] ov_SC02_026
[ OK ] ov_SC02_027
[ OK ] ov_SC02_031
[ OK ] ov_SC02_041
[ OK ] ov_SC03_003
[ OK ] ov_SC02_035
[ OK ] ov_SC02_039
[ OK ] ov_SC02_028
[ OK ] ov_SC03_010
[ OK ] ov_SC03_007
[ OK ] ov_SC03_011
[ OK ] ov_SC03_012
[ OK ] ov_SC03_023
[ OK ] ov_SC03_013
[ OK ] ov_SC03_014
[ OK ] ov_SC03_024
[ OK ] ov_SC03_015
[ OK ] ov_SC03_028
[ OK ] ov_SC03_030
[ OK ] ov_SC03_031
[ OK ] ov_SC03_029
[ OK ] ov_SC03_089
[ OK ] ov_SC03_090
[ OK ] ov_SC03_092
[ OK ] ov_SC03_093
[ OK ] ov_SC03_094
[ OK ] ov_SC03_091
[ OK ] ov_SC03_095
[ OK ] ov_SC03_096
[ OK ] ov_SC03_097
[ OK ] ov_SC03_098
[ OK ] ov_SC03_099
[ OK ] ov_SC03_100
[ OK ] ov_SC03_101
[ OK ] ov_SC03_102
[ OK ] ov_SC03_103
[ OK ] ov_SC03_104
[ OK ] ov_SC03_108
[ OK ] ov_SC03_109
[ OK ] ov_SC03_111
[ OK ] ov_SC03_110
[ OK ] ov_SC03_113
[ OK ] ov_SC03_114
[ OK ] ov_SC03_105
[ OK ] ov_SC03_112
[ OK ] ov_SC03_115
[ OK ] ov_SC03_116
[ OK ] ov_SC03_117
[ OK ] ov_SC03_118
[ OK ] ov_SC03_119
[ OK ] ov_SC03_121
[ OK ] ov_SC03_126
[ OK ] ov_SC03_125
[ OK ] ov_SC04_002
[ OK ] ov_SC04_004
[ OK ] ov_SC03_124
[ OK ] ov_SC04_003
[ OK ] ov_SC04_005
[ OK ] ov_SC04_006
[ OK ] ov_SC04_008
[ OK ] ov_SC04_007
[ OK ] ov_SC04_009
[ OK ] ov_SC04_010
[ OK ] ov_SC04_012
[ OK ] ov_SC04_011
[ OK ] ov_SC04_015
[ OK ] ov_SC04_016
[ OK ] ov_SC04_020
[ OK ] ov_SC04_021
[ OK ] ov_SC05_002
[ OK ] ov_SC05_001
[ OK ] ov_SC05_004
[ OK ] ov_SC05_003
[ OK ] ov_SC05_005
[ OK ] ov_SC05_006
[ OK ] ov_SC05_007
[ OK ] ov_SC05_008
[ OK ] ov_SC05_009
[ OK ] ov_SC05_010
[ OK ] ov_SC05_011
[ OK ] ov_SC05_018
[ OK ] ov_SC05_017
[ OK ] ov_SC05_019
[ OK ] ov_SC06_010
[ OK ] ov_SC06_008
[ OK ] ov_SC06_006
[ OK ] ov_SC06_011
[ OK ] ov_SC06_013
[ OK ] ov_SC06_014
[ OK ] ov_SC06_015
[ OK ] ov_SC06_016
[ OK ] ov_SC06_020
[ OK ] ov_SC06_018
[ OK ] ov_SC06_022
[ OK ] ov_SC06_025
[ OK ] ov_SC06_024
[ OK ] ov_SC06_027
[ OK ] md_MAIN_013
[ OK ] md_MAIN_014
[ OK ] md_MAIN_015
[ OK ] md_MAIN_016
[ OK ] md_MAIN_017
[ OK ] md_MAIN_018
[ OK ] md_MAIN_019
[ OK ] md_MAIN_020
[ OK ] md_MAIN_021
[ OK ] md_MAIN_022
[ OK ] ov_SC06_029
[ OK ] md_MAIN_023
[ OK ] md_MAIN_024
[ OK ] md_MAIN_025
[ OK ] md_MAIN_026
[ OK ] md_MAIN_027
[ OK ] md_MAIN_028
[ OK ] md_MAIN_029
[ OK ] md_MAIN_030
[ OK ] md_MAIN_031
[ OK ] md_MAIN_033
[ OK ] md_MAIN_034
[ OK ] md_MAIN_032
[ OK ] md_MAIN_035
[ OK ] md_MAIN_036
[ OK ] md_MAIN_037
[ OK ] ov_SC06_030
[ OK ] md_MAIN_038
[ OK ] md_MAIN_040
[ OK ] md_MAIN_039
[ OK ] md_MAIN_042
[ OK ] md_MAIN_043
[ OK ] md_MAIN_044
[ OK ] md_MAIN_045
[ OK ] md_MAIN_046
[ OK ] md_MAIN_047
[ OK ] md_MAIN_041
[ OK ] ov_SC07_009
[ OK ] md_MAIN_001
[ OK ] md_MAIN_008
[ OK ] ov_SC07_001
[ OK ] md_MAIN_011
[ OK ] ov_SC07_008
[ OK ] md_SC07_003
[ OK ] ov_SC07_002
[ OK ] md_MAIN_003
[ OK ] md_SC03_073
[ OK ] md_SC07_004
[ OK ] md_SC03_074
[ OK ] md_SC03_076
[ OK ] md_SC03_077
[ OK ] md_SC03_075
[ OK ] md_SC03_132
[ OK ] md_SC03_079
[ OK ] md_SC03_135
[ OK ] md_SC03_136
[ OK ] md_SC03_078
[ OK ] md_SC04_024
[ OK ] md_SC03_133
[ OK ] md_SC03_134
[ OK ] md_SC04_025
[ OK ] md_SC04_026
[ OK ] md_SC03_137
[ OK ] md_SC04_030
[ OK ] md_SC03_138
[ OK ] md_SC04_029
[ OK ] md_SC04_027
[ OK ] md_SC05_023
[ OK ] md_SC04_028
[ OK ] md_SC05_024
[ OK ] md_SC05_025
[ OK ] md_SC05_028
[ OK ] md_SC05_029
[ OK ] md_SC05_027
[ OK ] md_SC02_009
[ OK ] md_SC05_026
[ OK ] md_MAIN_007
[ OK ] md_MAIN_009
[ OK ] ov_SC07_006
[ OK ] md_SC03_053
[ OK ] md_SC03_054
[ OK ] md_SC03_056
[ OK ] ov_SC07_007
[ OK ] ov_SC06_032
[ OK ] ov_SC07_010
[ OK ] ov_SC06_033
[ OK ] ov_MAIN_012
[ OK ] ov_SC02_037
[ OK ] ov_SC07_011
[ OK ] ov_SC03_107
check-all: 218 passed, 0 failed of 218
-1
View File
@@ -1 +0,0 @@
clean: removed build/, expected/, and the regenerated splat tree (asm/, assets/, include macros, undefined_*_auto.txt).
-253
View File
@@ -1,253 +0,0 @@
splat 0.41.0 (powered by spimdisasm 1.41.0)
0%| | 0/1096 [00:00<?, ?it/s] Loading symbols (symbols.us): 0%| | 0/1096 [00:00<?, ?it/s] Loading symbols (symbols.us): 100%|██████████| 1096/1096 [00:00<00:00, 61133.00it/s]
0%| | 0/47 [00:00<?, ?it/s] Loading symbols (symbols.us.ram): 0%| | 0/47 [00:00<?, ?it/s] Loading symbols (symbols.us.ram): 100%|██████████| 47/47 [00:00<00:00, 478476.43it/s]
0%| | 0/2 [00:00<?, ?it/s] Scanning header: 0%| | 0/2 [00:00<?, ?it/s] Scanning main: 0%| | 0/2 [00:00<?, ?it/s]
Rodata segment '800' may belong to the text segment '800'
Based on the usage from the function LzssDecodeSector to the symbol jtbl_80072A38
The rodata segment '800' has jumptables that are not aligned properly file-wise, indicating one or more likely file split.
File split suggestions for this segment will follow in config yaml format:
- [0x6324C, .rodata]
- [0x63388, .rodata]
- [0x633FC, .rodata]
Rodata segment '800_b' may belong to the text segment '800_b'
Based on the usage from the function func_8002B0B4 to the symbol jtbl_80072E44
Rodata segment '800_b_2' may belong to the text segment '800_b_2'
Based on the usage from the function func_8002DC68 to the symbol jtbl_80072F3C
The rodata segment '800_b_2' has jumptables that are not aligned properly file-wise, indicating one or more likely file split.
File split suggestions for this segment will follow in config yaml format:
- [0x63920, .rodata]
Rodata segment '800_c' may belong to the text segment '800_c'
Based on the usage from the function func_80035270 to the symbol jtbl_800732A0
Scanning main: 100%|██████████| 2/2 [00:03<00:00, 1.57s/it] Scanning main: 100%|██████████| 2/2 [00:03<00:00, 1.57s/it]
0%| | 0/2 [00:00<?, ?it/s] Splitting header: 0%| | 0/2 [00:00<?, ?it/s] Splitting main: 0%| | 0/2 [00:00<?, ?it/s] Splitting main: 100%|██████████| 2/2 [00:01<00:00, 1.58it/s] Splitting main: 100%|██████████| 2/2 [00:01<00:00, 1.58it/s]
0%| | 0/2 [00:00<?, ?it/s] Linker script header: 0%| | 0/2 [00:00<?, ?it/s] Linker script main: 0%| | 0/2 [00:00<?, ?it/s] Linker script main: 100%|██████████| 2/2 [00:00<00:00, 66.29it/s]
Split 340 KB (82.28%) in defined segments
header: 2 KB (0.50%) 1 split, 0 cached
c: 338 KB (81.78%) 85 split, 0 cached
unknown: 0 B (0.00%) from unknown bin files
ld_interleave --order: .main island = 8 pieces [53198.data.o, 800.o, 63470.data.o, 800_b.o, 800_b_2.o, 63940.data.o, 800_c.o, 63C4C.data.o]; pre=0 text=85 empties=166 bss=85
[ OK ] resident
[ OK ] ov_SC05_000
[ OK ] ov_SC01_000
[ OK ] ov_SC04_000
[ OK ] ov_SC06_000
[ OK ] ov_SC01_005
[ OK ] ov_SC03_002
[ OK ] ov_SC01_006
[ OK ] ov_SC02_000
[ OK ] ov_SC01_077
[ OK ] ov_SC04_019
[ OK ] ov_SC02_003
[ OK ] ov_SC04_018
[ OK ] ov_SC03_001
[ OK ] ov_SC03_006
[ OK ] ov_SC01_001
[ OK ] ov_SC01_004
[ OK ] ov_SC01_008
[ OK ] ov_SC01_074
[ OK ] ov_SC07_000
[ OK ] ov_SC02_004
[ OK ] ov_SC02_015
[ OK ] ov_SC02_021
[ OK ] ov_SC01_080
[ OK ] ov_SC01_009
[ OK ] ov_SC01_084
[ OK ] ov_SC02_016
[ OK ] ov_SC02_005
[ OK ] ov_SC02_026
[ OK ] ov_SC02_039
[ OK ] ov_SC02_028
[ OK ] ov_SC02_027
[ OK ] ov_SC02_031
[ OK ] ov_SC02_011
[ OK ] ov_SC02_017
[ OK ] ov_SC02_035
[ OK ] ov_SC03_003
[ OK ] ov_SC02_041
[ OK ] ov_SC03_012
[ OK ] ov_SC03_011
[ OK ] ov_SC03_010
[ OK ] ov_SC03_013
[ OK ] ov_SC03_023
[ OK ] ov_SC03_007
[ OK ] ov_SC03_024
[ OK ] ov_SC03_031
[ OK ] ov_SC03_089
[ OK ] ov_SC03_014
[ OK ] ov_SC03_090
[ OK ] ov_SC03_015
[ OK ] ov_SC03_029
[ OK ] ov_SC03_030
[ OK ] ov_SC03_092
[ OK ] ov_SC03_028
[ OK ] ov_SC03_095
[ OK ] ov_SC03_096
[ OK ] ov_SC03_091
[ OK ] ov_SC03_093
[ OK ] ov_SC03_094
[ OK ] ov_SC03_097
[ OK ] ov_SC03_101
[ OK ] ov_SC03_098
[ OK ] ov_SC03_102
[ OK ] ov_SC03_109
[ OK ] ov_SC03_099
[ OK ] ov_SC03_108
[ OK ] ov_SC03_103
[ OK ] ov_SC03_100
[ OK ] ov_SC03_110
[ OK ] ov_SC03_104
[ OK ] ov_SC03_105
[ OK ] ov_SC03_113
[ OK ] ov_SC03_112
[ OK ] ov_SC03_111
[ OK ] ov_SC03_114
[ OK ] ov_SC03_115
[ OK ] ov_SC03_116
[ OK ] ov_SC03_126
[ OK ] ov_SC03_117
[ OK ] ov_SC03_121
[ OK ] ov_SC04_008
[ OK ] ov_SC04_003
[ OK ] ov_SC04_006
[ OK ] ov_SC04_009
[ OK ] ov_SC03_118
[ OK ] ov_SC04_004
[ OK ] ov_SC03_125
[ OK ] ov_SC03_119
[ OK ] ov_SC04_002
[ OK ] ov_SC04_005
[ OK ] ov_SC04_007
[ OK ] ov_SC04_010
[ OK ] ov_SC03_124
[ OK ] ov_SC04_012
[ OK ] ov_SC04_021
[ OK ] ov_SC05_006
[ OK ] ov_SC04_016
[ OK ] ov_SC05_002
[ OK ] ov_SC05_004
[ OK ] ov_SC04_020
[ OK ] ov_SC05_007
[ OK ] ov_SC05_009
[ OK ] ov_SC05_003
[ OK ] ov_SC04_015
[ OK ] ov_SC05_008
[ OK ] ov_SC05_001
[ OK ] ov_SC05_005
[ OK ] ov_SC04_011
[ OK ] ov_SC05_011
[ OK ] ov_SC05_010
[ OK ] ov_SC05_019
[ OK ] ov_SC06_013
[ OK ] ov_SC06_015
[ OK ] ov_SC06_008
[ OK ] ov_SC06_014
[ OK ] ov_SC06_011
[ OK ] ov_SC06_016
[ OK ] ov_SC06_010
[ OK ] ov_SC06_020
[ OK ] ov_SC05_018
[ OK ] ov_SC05_017
[ OK ] ov_SC06_018
[ OK ] ov_SC06_006
[ OK ] ov_SC06_025
[ OK ] ov_SC06_022
[ OK ] ov_SC06_027
[ OK ] ov_SC06_024
[ OK ] md_MAIN_013
[ OK ] md_MAIN_014
[ OK ] ov_SC07_008
[ OK ] ov_SC07_002
[ OK ] md_MAIN_015
[ OK ] ov_SC07_001
[ OK ] md_MAIN_016
[ OK ] md_MAIN_017
[ OK ] ov_SC06_030
[ OK ] md_MAIN_018
[ OK ] md_MAIN_019
[ OK ] md_MAIN_020
[ OK ] md_MAIN_021
[ OK ] md_MAIN_023
[ OK ] md_MAIN_022
[ OK ] md_MAIN_024
[ OK ] md_MAIN_025
[ OK ] ov_SC07_009
[ OK ] md_MAIN_027
[ OK ] ov_SC06_029
[ OK ] md_MAIN_028
[ OK ] md_MAIN_026
[ OK ] md_MAIN_029
[ OK ] ov_SC06_032
[ OK ] ov_SC07_011
[ OK ] md_MAIN_030
[ OK ] md_MAIN_031
[ OK ] ov_SC06_033
[ OK ] md_MAIN_033
[ OK ] md_MAIN_032
[ OK ] md_MAIN_035
[ OK ] md_MAIN_034
[ OK ] md_MAIN_036
[ OK ] md_MAIN_037
[ OK ] md_MAIN_038
[ OK ] md_MAIN_040
[ OK ] md_MAIN_039
[ OK ] md_MAIN_041
[ OK ] md_MAIN_042
[ OK ] md_MAIN_043
[ OK ] md_MAIN_044
[ OK ] md_MAIN_045
[ OK ] ov_MAIN_012
[ OK ] md_MAIN_047
[ OK ] md_MAIN_046
[ OK ] ov_SC07_010
[ OK ] md_MAIN_008
[ OK ] md_MAIN_001
[ OK ] md_MAIN_011
[ OK ] md_SC03_073
[ OK ] md_SC03_074
[ OK ] md_SC03_078
[ OK ] md_SC03_075
[ OK ] md_SC03_077
[ OK ] md_SC03_076
[ OK ] md_SC03_132
[ OK ] md_SC03_079
[ OK ] ov_SC03_107
[ OK ] md_SC03_133
[ OK ] ov_SC07_007
[ OK ] md_SC03_137
[ OK ] md_SC03_134
[ OK ] md_SC03_135
[ OK ] md_SC03_136
[ OK ] md_MAIN_003
[ OK ] md_SC04_025
[ OK ] md_SC04_024
[ OK ] md_SC04_029
[ OK ] md_SC03_138
[ OK ] md_SC04_026
[ OK ] md_SC04_028
[ OK ] md_SC04_027
[ OK ] md_SC05_023
[ OK ] md_SC04_030
[ OK ] md_SC05_024
[ OK ] md_SC05_028
[ OK ] md_SC05_025
[ OK ] md_MAIN_007
[ OK ] md_MAIN_009
[ OK ] md_SC05_027
[ OK ] md_SC05_026
[ OK ] md_SC05_029
[ OK ] md_SC03_053
[ OK ] md_SC03_056
[ OK ] md_SC03_054
[ OK ] ov_SC07_006
[ OK ] md_SC02_009
[ OK ] ov_SC02_037
[ OK ] md_SC07_004
[ OK ] md_SC07_003
extract-all: 217 extracted, 0 failed of 217 (+ main, serial)
-7
View File
@@ -1,7 +0,0 @@
START 2026-09-05T11:55:05-06:00
CLEAN_EXIT=0
EXTRACT_EXIT=0
extract-all: 217 extracted, 0 failed of 217 (+ main, serial)
CHECK_EXIT=0
check-all: 218 passed, 0 failed of 218
END 2026-09-05T12:00:09-06:00
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-4
View File
@@ -1,4 +0,0 @@
[twin_rescan] 33 open stub(s) scanned; 5 have a banked twin at d<=5
[twin_rescan] NEWLY FREE since the last snapshot: 0
(nothing new — the last bank did not unlock a sibling)
[twin_rescan] snapshot written to .run/twin_rescan.snapshot.json
-4
View File
@@ -1,4 +0,0 @@
[twin_rescan] 16 open stub(s) scanned; 0 have a banked twin at d<=5
[twin_rescan] NEWLY FREE since the last snapshot: 0
(nothing new — the last bank did not unlock a sibling)
[twin_rescan] snapshot written to .run/twin_rescan.snapshot.json
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-25
View File
@@ -1,25 +0,0 @@
.venv/bin/python tools/disc_audit.py
disc: 416,021,760 bytes across 4 tracks; onboarded payload hashes: 213
ISO root files: 27
! LIST.CD: TOC walk failed (sub-file 0 [2048:24576] out of bounds (.CD is 4096 bytes)) — whole file booked as data
onboarded-code 50,878,697
unclaimed-code 0
classified-data 134,017,708
audio-video 184,338,000
filesystem-metadata 46,787,355
TOTAL 416,021,760 disc 416,021,760 residue 0
L2 disagreements (review queue): 80
SC06.CD/6 entry=0 type=4 854,543 B L1=data L2=code fns=3 0.87/0.0118
SC03.CD/6 entry=0 type=4 849,759 B L1=data L2=code fns=3 0.87/0.0130
SC07.CD/6 entry=1 type=4 844,311 B L1=data L2=code fns=3 0.84/0.0116
SC01.CD/9 entry=0 type=4 832,263 B L1=data L2=code fns=3 0.85/0.0121
SC01.CD/1 entry=0 type=4 831,599 B L1=data L2=code fns=3 0.74/0.0119
SC04.CD/11 entry=0 type=4 824,663 B L1=data L2=code fns=3 0.79/0.0136
SC02.CD/17 entry=0 type=4 818,143 B L1=data L2=code fns=3 0.89/0.0134
SC03.CD/28 entry=0 type=4 804,015 B L1=data L2=code fns=3 0.88/0.0133
SC02.CD/11 entry=0 type=4 801,063 B L1=data L2=code fns=3 0.89/0.0145
SC03.CD/7 entry=0 type=4 799,087 B L1=data L2=code fns=3 0.88/0.0131
SC03.CD/14 entry=0 type=4 798,439 B L1=data L2=code fns=3 0.87/0.0135
SC03.CD/15 entry=0 type=4 798,439 B L1=data L2=code fns=3 0.87/0.0135
UNCLAIMED code payloads: 0
ledger -> docs/disc-ledger.md
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-57
View File
@@ -1,57 +0,0 @@
#!/usr/bin/env python3
"""Rewrite staged member drafts to the §37/§124 DEFINITION-SIDE ASM-LABEL ALIAS form.
WHY (byte-diagnosed, P30 S38 — the dominant sweep residue, 208 of ~398 conflicts):
A remapped member's definition can carry a signature that NO C declaration can reconcile with the
fleet's. Measured on family 0x80146ab4 (18 ins, ×138):
draft def : void func_80146A6C(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6)
TU decl : extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
The narrow params are the wall: C's DEFAULT ARGUMENT PROMOTION means `s16`/`u16` cannot agree with
an `s32` prototype, and the `()` no-prototype escape is ILLEGAL precisely when a param promotes. So
neither side can move — `cast_call_sites` is the wrong axis (it fixes CALLEE decls, not the
definition's own signature) and `--fix-def-sig` cannot help either (measured: 0/138, error
unchanged).
THE ESCAPE (S33-proven on func_80147364: definition `(u16,u16)` vs 4,046 fleet decls, banked ×137
first try; 1,725 in-tree precedents): give the DEFINITION a private C identifier and bind the
emitted SYMBOL with a GNU asm label. The TU's declaration then simply never meets the definition,
so its type is irrelevant — ZERO blast radius on every caller.
void aF80146A6C(<the byte-true params>) __asm__("func_80146A6C");
void aF80146A6C(<the byte-true params>) { ... }
Byte-neutral by construction: the emitted symbol and the body are unchanged; only the C spelling of
the definition differs. The whole-binary byte-gate remains the sole arbiter (G3/P9).
Usage: alias_defs.py <staged_dir> <out_dir>
"""
import sys, os, re, glob, shutil
SRC, OUT = sys.argv[1], sys.argv[2]
shutil.rmtree(OUT, ignore_errors=True)
# `<type> func_<ADDR>(<params>)` at column 0, followed by the body brace — the definition head.
DEF = re.compile(r'^([A-Za-z_][\w \*]*?)\b(func_([0-9A-Fa-f]{8}))\s*\(([^;{]*)\)\s*\{', re.M)
n_in = n_out = 0
for p in sorted(glob.glob(os.path.join(SRC, '*', 'func_*.c'))):
n_in += 1
ov = os.path.basename(os.path.dirname(p))
txt = open(p).read()
m = DEF.search(txt)
if not m:
continue
ret, sym, addr, params = m.group(1).strip(), m.group(2), m.group(3), m.group(4)
alias = 'aF' + addr.upper()
if alias in txt: # already aliased
continue
head = f'{ret} {alias}({params})'
new = txt[:m.start()] + f'{head} __asm__("{sym}");\n{head}\n{{' + txt[m.end():]
d = os.path.join(OUT, ov)
os.makedirs(d, exist_ok=True)
open(os.path.join(d, os.path.basename(p)), 'w').write(new)
n_out += 1
print(f"alias_defs: {n_out} of {n_in} draft(s) rewritten to the def-side alias -> {OUT}")
-17
View File
@@ -1,17 +0,0 @@
{"t": 1786154750.2, "lba": 227, "gi": null, "name": null, "dest": "0x80180000", "state": 6}
{"t": 1786154750.6, "lba": 241, "gi": 1, "name": "MAIN/1", "dest": "0x800CEDF8", "state": 6}
{"t": 1786154756.3, "lba": 293, "gi": 2, "name": "MAIN/2", "dest": "0x00000000", "state": 3}
{"t": 1786154759.6, "lba": 328, "gi": 3, "name": "MAIN/3", "dest": "0x800CEDF8", "state": 3}
{"t": 1786154777.0, "lba": 1617, "gi": 10, "name": "MAIN/10", "dest": "0x800CEDF8", "state": 2}
{"t": 1786154779.2, "lba": 2920, "gi": 42, "name": "MAIN/42", "dest": "0x800CCB1C", "state": 4}
{"t": 1786154780.0, "lba": 40754, "gi": 166, "name": "SC02/31", "dest": "0x80128158", "state": 4}
{"t": 1786154783.9, "lba": 41282, "gi": 169, "name": "SC02/34", "dest": "0x80128158", "state": 0}
{"t": 1786154827.9, "lba": 754890, "gi": null, "name": null, "dest": "0x80128158", "state": 2}
{"t": 1786154849.4, "lba": 41404, "gi": 170, "name": "SC02/35", "dest": "0x80128158", "state": 2}
{"t": 1786154853.1, "lba": 41860, "gi": 171, "name": "SC02/36", "dest": "0x80128158", "state": 0}
{"t": 1786154918.3, "lba": 42000, "gi": 172, "name": "SC02/37", "dest": "0x80128158", "state": 4}
{"t": 1786154923.5, "lba": 42696, "gi": 173, "name": "SC02/38", "dest": "0x80128158", "state": 0}
{"t": 1786154988.8, "lba": 42841, "gi": 174, "name": "SC02/39", "dest": "0x80128158", "state": 2}
{"t": 1786154992.5, "lba": 43313, "gi": 175, "name": "SC02/40", "dest": "0x80128158", "state": 0}
{"t": 1786155050.1, "lba": 43460, "gi": 176, "name": "SC02/41", "dest": "0x80128158", "state": 4}
{"t": 1786155054.0, "lba": 43984, "gi": 177, "name": "SC02/42", "dest": "0x80128158", "state": 0}
-13
View File
@@ -1,13 +0,0 @@
{
"_comment": "A1 finding: 4 fns matched ONLY in ov_SC01_077, still INCLUDE_ASM in 133 overlays.",
"_why_never_propagated": "3 of 4 are defined in src/ov_SC01_077/ov_SC01_077_jr_8012ACE0.c, a _jr_* split file. dedup_propagate.overlay_files allowlists only ('_a','_o0','_o0b','_after') -- so the propagator could not SEE the definitions. The dedup group was registered anyway, and dedup_integrate's missing bank-check printed [ OK ] on the lie. Two silent-skip bugs compounding: one created the hole, the other hid it.",
"_harvest_in": "A5 (dedup_propagate overlay_files glob fix)",
"targets": [
{"addr": "0x80128ED8", "nins": 53, "def": "src/ov_SC01_077/ov_SC01_077_a.c:451", "siblings": 133, "hidden_ins": 7049},
{"addr": "0x8012C098", "nins": 21, "def": "src/ov_SC01_077/ov_SC01_077_jr_8012ACE0.c:449", "siblings": 133, "hidden_ins": 2793},
{"addr": "0x8012C0EC", "nins": 42, "def": "src/ov_SC01_077/ov_SC01_077_jr_8012ACE0.c:470", "siblings": 133, "hidden_ins": 5586},
{"addr": "0x8012C750", "nins": 52, "def": "src/ov_SC01_077/ov_SC01_077_jr_8012ACE0.c:594", "siblings": 133, "hidden_ins": 6916}
],
"total_hidden_instructions": 22344,
"total_member_instances": 532
}
-51
View File
@@ -1,51 +0,0 @@
disc code sweep — 1189 payloads under extracted/retail, window=4096w, valid>=0.9, jr_ra>=0.01
type payloads code onboarded HIDDEN
0 301 0 0 0
1 166 40 1 39
2 201 0 0 0
3 201 0 0 0
4 138 138 138 0
6 29 0 0 0
7 139 0 0 0
8 14 0 0 0
HIDDEN code-bearing payloads (valid>=0.9 AND jr_ra>=0.01, NOT onboarded): 39
type 1 valid 96.4% jr_ra 7.23% (83w, raw) extracted/retail/MAIN.CD.dir/FILE_024.dir/0.1
type 1 valid 96.9% jr_ra 6.19% (97w, raw) extracted/retail/MAIN.CD.dir/FILE_023.dir/0.1
type 1 valid 98.4% jr_ra 5.13% (312w, raw) extracted/retail/MAIN.CD.dir/FILE_035.dir/1.1
type 1 valid 100.0% jr_ra 3.39% (4096w, raw) extracted/retail/MAIN.CD.dir/FILE_012.dir/1.1
type 1 valid 100.0% jr_ra 3.39% (4096w, raw) extracted/retail/SC02.CD.dir/FILE_037.dir/0.1
type 1 valid 100.0% jr_ra 3.39% (4096w, raw) extracted/retail/SC03.CD.dir/FILE_107.dir/0.1
type 1 valid 99.4% jr_ra 3.24% (1018w, raw) extracted/retail/MAIN.CD.dir/FILE_022.dir/1.1
type 1 valid 100.0% jr_ra 2.86% (210w, raw) extracted/retail/MAIN.CD.dir/FILE_008.dir/1.1
type 1 valid 98.8% jr_ra 2.70% (482w, raw) extracted/retail/MAIN.CD.dir/FILE_016.dir/1.1
type 1 valid 96.0% jr_ra 2.68% (373w, raw) extracted/retail/MAIN.CD.dir/FILE_017.dir/1.1
type 1 valid 99.2% jr_ra 2.67% (900w, raw) extracted/retail/MAIN.CD.dir/FILE_026.dir/1.1
type 1 valid 100.0% jr_ra 2.52% (159w, raw) extracted/retail/MAIN.CD.dir/FILE_042.dir/0.1
type 1 valid 99.0% jr_ra 2.49% (522w, raw) extracted/retail/MAIN.CD.dir/FILE_014.dir/1.1
type 1 valid 100.0% jr_ra 2.35% (978w, raw) extracted/retail/MAIN.CD.dir/FILE_043.dir/0.1
type 1 valid 93.4% jr_ra 2.34% (726w, raw) extracted/retail/MAIN.CD.dir/FILE_037.dir/1.1
type 1 valid 98.8% jr_ra 2.33% (816w, raw) extracted/retail/MAIN.CD.dir/FILE_033.dir/1.1
type 1 valid 98.4% jr_ra 2.28% (1229w, raw) extracted/retail/MAIN.CD.dir/FILE_036.dir/1.1
type 1 valid 99.2% jr_ra 2.27% (484w, raw) extracted/retail/MAIN.CD.dir/FILE_021.dir/1.1
type 1 valid 96.4% jr_ra 2.22% (496w, raw) extracted/retail/MAIN.CD.dir/FILE_029.dir/1.1
type 1 valid 98.6% jr_ra 2.20% (1318w, raw) extracted/retail/MAIN.CD.dir/FILE_027.dir/1.1
type 1 valid 97.4% jr_ra 2.13% (469w, raw) extracted/retail/MAIN.CD.dir/FILE_030.dir/1.1
type 1 valid 99.2% jr_ra 1.97% (1115w, raw) extracted/retail/MAIN.CD.dir/FILE_028.dir/1.1
type 1 valid 93.9% jr_ra 1.97% (2230w, raw) extracted/retail/MAIN.CD.dir/FILE_044.dir/0.1
type 1 valid 98.9% jr_ra 1.89% (636w, raw) extracted/retail/MAIN.CD.dir/FILE_009.dir/0.1
type 1 valid 92.4% jr_ra 1.82% (1425w, raw) extracted/retail/MAIN.CD.dir/FILE_039.dir/1.1
type 1 valid 94.8% jr_ra 1.62% (678w, raw) extracted/retail/MAIN.CD.dir/FILE_018.dir/1.1
type 1 valid 90.1% jr_ra 1.61% (4096w, raw) extracted/retail/SC03.CD.dir/FILE_076.dir/2.1
type 1 valid 90.1% jr_ra 1.61% (4096w, raw) extracted/retail/SC03.CD.dir/FILE_135.dir/2.1
type 1 valid 90.2% jr_ra 1.61% (4096w, raw) extracted/retail/SC04.CD.dir/FILE_027.dir/2.1
type 1 valid 90.4% jr_ra 1.61% (4096w, raw) extracted/retail/SC05.CD.dir/FILE_026.dir/2.1
type 1 valid 99.5% jr_ra 1.50% (1861w, raw) extracted/retail/MAIN.CD.dir/FILE_034.dir/1.1
type 1 valid 99.9% jr_ra 1.47% (818w, raw) extracted/retail/MAIN.CD.dir/FILE_047.dir/0.1
type 1 valid 99.9% jr_ra 1.46% (4096w, raw) extracted/retail/SC07.CD.dir/FILE_004.dir/1.1
type 1 valid 90.5% jr_ra 1.46% (1025w, raw) extracted/retail/MAIN.CD.dir/FILE_041.dir/1.1
type 1 valid 97.3% jr_ra 1.43% (1261w, raw) extracted/retail/MAIN.CD.dir/FILE_031.dir/1.1
type 1 valid 100.0% jr_ra 1.37% (4096w, raw) extracted/retail/SC07.CD.dir/FILE_003.dir/1.1
type 1 valid 93.0% jr_ra 1.30% (1690w, raw) extracted/retail/MAIN.CD.dir/FILE_019.dir/1.1
type 1 valid 99.5% jr_ra 1.25% (4096w, raw) extracted/retail/MAIN.CD.dir/FILE_003.dir/1.1
type 1 valid 99.5% jr_ra 1.25% (4096w, raw) extracted/retail/MAIN.CD.dir/FILE_004.dir/0.1
-54
View File
@@ -1,54 +0,0 @@
# Fable 5 — frontier attack analysis (P30 SESSION-38, 2026-08-04)
> **Provenance:** produced by a read-only Fable-5 agent commissioned during S38 with the explicit
> brief *"this project has repeatedly declared 'no more families' and been wrong — treat my
> conclusion as a hypothesis to attack."* The agent's harness blocked it from writing to disk, so
> this file is its **verbatim returned report**, transcribed by the orchestrator so it survives the
> session. Its computed scratch data — the h_exact / h_norm pools — **is** on disk at
> `.run/fable_frontier/pool_ovres.json` (136 KB) and is the reusable artifact.
>
> **Status of its claims:** the two headline refutations were independently re-verified against the
> repo before this was acted on (23,211 `.run/hseq_failed.*.classified.txt` files exist; the
> `0x801833f0` family went 0/6 → 6/6 after the type lift, R22 140/140). The pool numbers in §"Top 3
> findings" item 3 are the agent's own computation and are **not** independently re-verified —
> verify before scaling a wave onto them (R14).
---
## Top 3 findings
**1. Both session-38 zeros were PLUMBING, and their diagnoses were already on disk, written by the sweep itself at probe time — unread.**
- `0x801833f0` (0/6) → `.run/hseq_failed.ov_SC03_097.0.classified.txt`: `func_801813B4 PLUMBING: src/ov_SC03_097/ov_SC03_097_jr_8017D898.c:4162: parse error before 'vtx'`. All 11 instances of this family (5 matched + 6 open) have **identical h_norm** — the code is byte-proven identical modulo relocation; 0/6 was a compile-error certainty. Cause: the staged draft (`.run/sweep/ov_SC03_097/func_801813B4.c`) references the exemplar's TU-local types `Ft4_801833F0`/`Drm_801833F0`/`PTag_801833F0` whose **typedefs were never gathered** into the member TU (gcc-2.7.2 parses the unknown-type declarator as an expression → decl-after-statement error at `vtx`). `gather_externs` copies extern lines, not local typedef/macro definitions.
- `0x80128c98` (0/138) → `.run/hseq_failed.ov_SC03_097.52.classified.txt`: `PLUMBING: conflicting types for 'cdFileLocTable'` — the §103/§20 extern-conflict class. Neither probe ever reached codegen. The S38 claim "family_sweep reports banked/failed without the per-member build error" is itself false — the `.classified.txt` payloads exist per member, per run.
**2. "The ×138 era is over / 4 families collide by chance" is another false wall — the map's own classifier refutes it.** `classify_member` (family_remap.py:213) is a per-word diff with reloc tracking; PURE means every differing word sits at a reloc position — the opposite of chance collision. All four "chance" families classify PURE or IMM ×138 (`0x80128c98` PURE×138, `0x80146ab4` PURE×138, `0x80161418` PURE×138 with **552 already-matched siblings** — this family has swept successfully before — `0x80146c3c` IMM×138). The two "ledgered not-templatable" families are also contradicted: `0x80175820` is IMM×137 (the T2a immediate engine's exact domain, 7,535 ins), `0x80132018` is PURE×132 (6,072 ins). Zero STRUCT members in any of them. Only the 2 GIANT walls survive scrutiny — and those are *exemplar* walls (close=91/110 regalloc) whose 138 members each classify PURE: 50,094 ins ride on 2 cracks. Historical blocker mix across ALL sweep runs' classified files: **~24k PLUMBING vs 4,917 DIFF (5:1)** — sweep failure has always been mostly plumbing.
**3. Half the open overlay code sits in h_norm-identical structure nobody is targeting.** Computed fresh from sig+corpus (overlays+resident, 12,094 open fns / 702,647 ins):
- **h_exact pool**: 250 open fns / 12,981 ins are byte-identical (including reloc payloads) to an already-matched function — including **the whale `0x80144b9c` (770 ins), matched in 134/138 overlays, open only in SC07_006/007/010/011** — 3,080 ins of literally identical bytes blocked solely by the SC07 carve defect.
- **h_norm pool**: 860 fns / 35,438 ins normalization-identical to matched code (859 of them inside the 148 matched-exemplar families — half the "free sweep lane" is h_norm-proven, not h_seq-inferred).
- **Open-only h_norm clusters** (≥2, no matched sibling): **1,689 clusters / 5,956 fns / 326,261 ins = 46% of all open overlay instructions**. Exemplar ins 88,649, propagated ins 237,612 — a free 2.7× multiplier on every crack aimed here. Includes an unflagged alive ×138 h_norm-identical cluster (`0x80162ccc`, 3,174 ins) and 947-ins functions with identical siblings (`0x8017c6f4` ×3, `0x8017d538` ×2).
- **Main is structurally barren** (zero h_exact overlap with anything, 5k ins of internal h_seq dups in 49,673 open ins) — genuine agent tail, different compiler era; its Ghidra sig is 7 weeks stale and missing 757 of 2,002 stubs. **Resident**: 2 of its 14 stubs (`func_800CFE60`, `func_800D0214`) already have match_one-MATCH drafts recorded in backlog.jsonl as "gate rejected (declaration/TU plumbing)" — same defect class.
## Ranked attack plan (tokens/instruction; baseline wave = 490)
| # | Strategy | Reachable ins | tok/ins | Pre-work | Validate/kill experiment |
|---|---|---|---|---|---|
| S1 | **Fix 2 plumbing classes (typedef/macro gather + extern-conflict reconcile), re-sweep the 148 matched-exemplar families** (1,585 members / 75,383 ins gross, 71,178 PURE+IMM) | 35–60k | **~10–25** (tool work ~0.5–1M, ~0 agent) | edit family_remap gather + wire reconcile into --hseq | `family_sweep.py --hseq --only 0x801833f0` after the typedef fix — 6 h_norm-identical members; less than ~6/6 means the fix is wrong, not the family. Then `--only 0x80128c98` after the extern fix |
| S2 | jr matched-exemplar fams via `jtbl_family_bank` (§53's own lesson): 11 fams / 52 members | 10–18k | ~0 | none | ×1 member of the largest jr family |
| S3 | SC07 carve/pin fix (T2 Arm-A +0x20): whale ×4 (3,080 h_exact-identical ins) + 61 SC07 o0 members | 5–15k | ~0 | already scoped in CURRENT_PHASE T2 | ov_SC07_007 symbol-inventory diff → pin → re-extract |
| S4 | Draft-recovery on 39 draft-exemplar fams (382 members / 77,380 ins incl. walls) + the 2 resident TU-plumbing MATCHes | 10–25k | ~10–50 | T1a driver exists | `w6_diag.py`-shape run on one stored draft per family, read the error |
| S5 | **Re-aim waves at open-only h_norm cluster exemplars, sweep after every bank**: 1,689 clusters / 326k ins | up to 326k | **~130–150 blended** (2.7× multiplier) | S1 must land first or propagation never realizes; regen map per crack | one 8-target wave from the ×16/×7/×6 clusters; measure realized propagation |
| S6 | The two GIANT exemplar walls (50,094 ins / 2 cracks) | 50k | ~50–200, high variance | §17 pins, §52; prior close=91/110 | time-boxed siege, hard budget stop |
| S7 | Singleton tail (232k) + main (~50k; regenerate sig + DefineFunctions first, then a 5-fn PsyQ-4.0 calibration probe to price it) | remainder | ~490+ | main sig regen | 5-fn main probe wave |
S1–S4 ≈ **80–115k instructions moved from the 490-t/ins column to ~0** (11–15% of everything left), and S1 restores the propagation multiplier that makes every later wave ~3× cheaper.
## Verification of the S38 numbers
Distribution survives (I measure 5,793 fams / 709,920 ins at HEAD vs claimed 5,792/701,508 — snapshot drift; the 100+ band is 74,741 ins exactly). The 147-family pool is real (148 / 1,585 / 75,383 at HEAD). Fleet 96.29/94.2/88.9 confirmed. What does NOT survive: "chance collision" (all four refuted), "ledgered not-templatable" (both contradicted), "free-sweep 0/0 undiagnosed" (both diagnosed, on disk, PLUMBING), and "the ×138 era is over."
## False-wall watch list
1. CURRENT_PHASE.md:228's ×138-era paragraph (S38) — rests entirely on the two undiagnosed zeros; should be rewritten against the classified files. *(DONE — struck in commit `d053d71a2`.)*
2. The `0x80175820`/`0x80132018` "not-templatable" ledger entries — provenance predates or ignores the current classifier.
3. Any post-S1 sweep still returning 0% on an h_norm-identical family is a NEW undiagnosed zero — the one-line h_norm check against the sig files should become a standard pre-probe step (it would have predicted both of today's zeros as compile-error certainties before spending the probe).
Key files: `.run/hseq_failed.ov_SC03_097.0.classified.txt` and `.52.classified.txt` (the smoking guns), `.run/sweep/ov_SC03_097/func_801813B4.c` (the typedef-less draft), `tools/family_remap.py:213` (classify_member), `tools/sig_image.py:134` (norm_stream's conservative-miss guarantee), `.run/fable_frontier/pool_ovres.json` (computed h_exact/h_norm pools).
File diff suppressed because one or more lines are too long
-398
View File
@@ -1,398 +0,0 @@
0: 27bdffc0 addiu sp,sp,-64
1: afb70034 sw s7,52(sp)
2: 0080b821 move s7,a0
3: afb40028 sw s4,40(sp)
4: 00a0a021 move s4,a1
5: afb5002c sw s5,44(sp)
6: 00c0a821 move s5,a2
7: afb20020 sw s2,32(sp)
8: 00e09021 move s2,a3
9: afbe0038 sw s8,56(sp)
10: 02e0f021 move s8,s7
11: afbf003c sw ra,60(sp)
12: afb60030 sw s6,48(sp)
13: afb30024 sw s3,36(sp)
14: afb1001c sw s1,28(sp)
15: afb00018 sw s0,24(sp)
16: 86830002 lh v1,2(s4)
17: 3c050000 lui a1,0x0
18: 8ca50000 lw a1,0(a1)
19: 86820004 lh v0,4(s4)
20: 000318c0 sll v1,v1,0x3
21: 02a39821 addu s3,s5,v1
22: 00021080 sll v0,v0,0x2
23: 00521021 addu v0,v0,s2
24: 8c560000 lw s6,0(v0)
25: 02602021 move a0,s3
26: 0c000000 jal 0 <func_80133CD4>
27: 02c03021 move a2,s6
28: 04410164 bgez v0,604 <func_80133CD4+0x604>
29: 00001021 move v0,zero
30: 02602021 move a0,s3
31: 3c050000 lui a1,0x0
32: 8ca50000 lw a1,0(a1)
33: 0c000000 jal 0 <func_80133CD4>
34: 02c03021 move a2,s6
35: 00408821 move s1,v0
36: 0620008e bltz s1,2cc <func_80133CD4+0x2cc>
37: 02602021 move a0,s3
38: 3c050000 lui a1,0x0
39: 8ca50000 lw a1,0(a1)
40: 0c000000 jal 0 <func_80133CD4>
41: 00003021 move a2,zero
42: 3c070000 lui a3,0x0
43: 8ce70000 lw a3,0(a3)
44: 00000000 nop
45: 84e30000 lh v1,0(a3)
46: 00113023 negu a2,s1
47: 00c30018 mult a2,v1
48: 00001812 mflo v1
49: 00408021 move s0,v0
50: 00000000 nop
51: 0070001a div zero,v1,s0
52: 16000002 bnez s0,dc <func_80133CD4+0xdc>
53: 00000000 nop
54: 0007000d break 0x7
55: 2401ffff li at,-1
56: 16010004 bne s0,at,f4 <func_80133CD4+0xf4>
57: 3c018000 lui at,0x8000
58: 14610002 bne v1,at,f4 <func_80133CD4+0xf4>
59: 00000000 nop
60: 0006000d break 0x6
61: 00001812 mflo v1
62: 3c040000 lui a0,0x0
63: 8c840000 lw a0,0(a0)
64: 00000000 nop
65: 94820000 lhu v0,0(a0)
66: 3c050000 lui a1,0x0
67: 8ca50000 lw a1,0(a1)
68: 00431021 addu v0,v0,v1
69: a4a20000 sh v0,0(a1)
70: 84e20002 lh v0,2(a3)
71: 00000000 nop
72: 00c20018 mult a2,v0
73: 00001012 mflo v0
74: 00000000 nop
75: 00000000 nop
76: 0050001a div zero,v0,s0
77: 16000002 bnez s0,140 <func_80133CD4+0x140>
78: 00000000 nop
79: 0007000d break 0x7
80: 2401ffff li at,-1
81: 16010004 bne s0,at,158 <func_80133CD4+0x158>
82: 3c018000 lui at,0x8000
83: 14410002 bne v0,at,158 <func_80133CD4+0x158>
84: 00000000 nop
85: 0006000d break 0x6
86: 00001812 mflo v1
87: 94820002 lhu v0,2(a0)
88: 00000000 nop
89: 00431021 addu v0,v0,v1
90: a4a20002 sh v0,2(a1)
91: 84e20004 lh v0,4(a3)
92: 00000000 nop
93: 00c20018 mult a2,v0
94: 00001012 mflo v0
95: 00000000 nop
96: 00000000 nop
97: 0050001a div zero,v0,s0
98: 16000002 bnez s0,194 <func_80133CD4+0x194>
99: 00000000 nop
100: 0007000d break 0x7
101: 2401ffff li at,-1
102: 16010004 bne s0,at,1ac <func_80133CD4+0x1ac>
103: 3c018000 lui at,0x8000
104: 14410002 bne v0,at,1ac <func_80133CD4+0x1ac>
105: 00000000 nop
106: 0006000d break 0x6
107: 00001812 mflo v1
108: 94820004 lhu v0,4(a0)
109: 02603821 move a3,s3
110: 00431021 addu v0,v0,v1
111: a4a20004 sh v0,4(a1)
112: 86820008 lh v0,8(s4)
113: 86840006 lh a0,6(s4)
114: 00021080 sll v0,v0,0x2
115: 00521021 addu v0,v0,s2
116: 000420c0 sll a0,a0,0x3
117: 8c460000 lw a2,0(v0)
118: 0c000000 jal 0 <func_80133CD4>
119: 02a42021 addu a0,s5,a0
120: 14400108 bnez v0,604 <func_80133CD4+0x604>
121: 00001021 move v0,zero
122: 02603821 move a3,s3
123: 8682000c lh v0,12(s4)
124: 3c050000 lui a1,0x0
125: 8ca50000 lw a1,0(a1)
126: 8684000a lh a0,10(s4)
127: 00021080 sll v0,v0,0x2
128: 00521021 addu v0,v0,s2
129: 000420c0 sll a0,a0,0x3
130: 8c460000 lw a2,0(v0)
131: 0c000000 jal 0 <func_80133CD4>
132: 02a42021 addu a0,s5,a0
133: 144000fb bnez v0,604 <func_80133CD4+0x604>
134: 00001021 move v0,zero
135: 02603821 move a3,s3
136: 86820010 lh v0,16(s4)
137: 3c050000 lui a1,0x0
138: 8ca50000 lw a1,0(a1)
139: 8684000e lh a0,14(s4)
140: 00021080 sll v0,v0,0x2
141: 00521021 addu v0,v0,s2
142: 000420c0 sll a0,a0,0x3
143: 8c460000 lw a2,0(v0)
144: 0c000000 jal 0 <func_80133CD4>
145: 02a42021 addu a0,s5,a0
146: 144000ee bnez v0,604 <func_80133CD4+0x604>
147: 00001021 move v0,zero
148: 00171400 sll v0,s7,0x10
149: 0441000f bgez v0,294 <func_80133CD4+0x294>
150: 33c20010 andi v0,s8,0x10
151: 02603821 move a3,s3
152: 86820014 lh v0,20(s4)
153: 3c050000 lui a1,0x0
154: 8ca50000 lw a1,0(a1)
155: 86840012 lh a0,18(s4)
156: 00021080 sll v0,v0,0x2
157: 00521021 addu v0,v0,s2
158: 000420c0 sll a0,a0,0x3
159: 8c460000 lw a2,0(v0)
160: 0c000000 jal 0 <func_80133CD4>
161: 02a42021 addu a0,s5,a0
162: 144000de bnez v0,604 <func_80133CD4+0x604>
163: 00001021 move v0,zero
164: 33c20010 andi v0,s8,0x10
165: 10400006 beqz v0,2b0 <func_80133CD4+0x2b0>
166: 00000000 nop
167: 96820000 lhu v0,0(s4)
168: 00000000 nop
169: 30420100 andi v0,v0,0x100
170: 144000d6 bnez v0,604 <func_80133CD4+0x604>
171: 00001021 move v0,zero
172: 96830000 lhu v1,0(s4)
173: 00000000 nop
174: 30620200 andi v0,v1,0x200
175: 10400005 beqz v0,2d4 <func_80133CD4+0x2d4>
176: 02602021 move a0,s3
177: 3c010000 lui at,0x0
178: a4230000 sh v1,0(at)
179: 08000181 j 604 <func_80133CD4+0x604>
180: 00001021 move v0,zero
181: 3c050000 lui a1,0x0
182: 8ca50000 lw a1,0(a1)
183: 0c000000 jal 0 <func_80133CD4>
184: 02c03021 move a2,s6
185: 3c040000 lui a0,0x0
186: 8c840000 lw a0,0(a0)
187: 86630000 lh v1,0(s3)
188: 00000000 nop
189: ac830000 sw v1,0(a0)
190: 86630002 lh v1,2(s3)
191: 3c080000 lui t0,0x0
192: 8d080000 lw t0,0(t0)
193: ac830004 sw v1,4(a0)
194: 86630004 lh v1,4(s3)
195: 00028823 negu s1,v0
196: ac830008 sw v1,8(a0)
197: c9090000 lwc2 $9,0(t0)
198: c90a0004 lwc2 $10,4(t0)
199: c90b0008 lwc2 $11,8(t0)
200: 00000000 nop
201: 00000000 nop
202: 4aa00428 c2 0xa00428
203: 3c020000 lui v0,0x0
204: 8c420000 lw v0,0(v0)
205: 00000000 nop
206: e8590000 swc2 $25,0(v0)
207: e85a0004 swc2 $26,4(v0)
208: e85b0008 swc2 $27,8(v0)
209: 3c060000 lui a2,0x0
210: 8cc60000 lw a2,0(a2)
211: 00000000 nop
212: 8cc20000 lw v0,0(a2)
213: 00000000 nop
214: 02220018 mult s1,v0
215: 3c020000 lui v0,0x0
216: 8c420000 lw v0,0(v0)
217: 00000000 nop
218: 8c430000 lw v1,0(v0)
219: 8c440004 lw a0,4(v0)
220: 8c420008 lw v0,8(v0)
221: 00002812 mflo a1
222: 00641821 addu v1,v1,a0
223: 00628021 addu s0,v1,v0
224: 00b0001a div zero,a1,s0
225: 16000002 bnez s0,390 <func_80133CD4+0x390>
226: 00000000 nop
227: 0007000d break 0x7
228: 2401ffff li at,-1
229: 16010004 bne s0,at,3a8 <func_80133CD4+0x3a8>
230: 3c018000 lui at,0x8000
231: 14a10002 bne a1,at,3a8 <func_80133CD4+0x3a8>
232: 00000000 nop
233: 0006000d break 0x6
234: 00002012 mflo a0
235: 3c030000 lui v1,0x0
236: 8c630000 lw v1,0(v1)
237: 00000000 nop
238: 94620000 lhu v0,0(v1)
239: 00000000 nop
240: 00441021 addu v0,v0,a0
241: a4620000 sh v0,0(v1)
242: 8cc20004 lw v0,4(a2)
243: 00000000 nop
244: 02220018 mult s1,v0
245: 00001012 mflo v0
246: 00000000 nop
247: 00000000 nop
248: 0050001a div zero,v0,s0
249: 16000002 bnez s0,3f0 <func_80133CD4+0x3f0>
250: 00000000 nop
251: 0007000d break 0x7
252: 2401ffff li at,-1
253: 16010004 bne s0,at,408 <func_80133CD4+0x408>
254: 3c018000 lui at,0x8000
255: 14410002 bne v0,at,408 <func_80133CD4+0x408>
256: 00000000 nop
257: 0006000d break 0x6
258: 00002012 mflo a0
259: 94620002 lhu v0,2(v1)
260: 00000000 nop
261: 00441021 addu v0,v0,a0
262: a4620002 sh v0,2(v1)
263: 8cc20008 lw v0,8(a2)
264: 00000000 nop
265: 02220018 mult s1,v0
266: 00001012 mflo v0
267: 00000000 nop
268: 00000000 nop
269: 0050001a div zero,v0,s0
270: 16000002 bnez s0,444 <func_80133CD4+0x444>
271: 00000000 nop
272: 0007000d break 0x7
273: 2401ffff li at,-1
274: 16010004 bne s0,at,45c <func_80133CD4+0x45c>
275: 3c018000 lui at,0x8000
276: 14410002 bne v0,at,45c <func_80133CD4+0x45c>
277: 00000000 nop
278: 0006000d break 0x6
279: 00002812 mflo a1
280: 84620000 lh v0,0(v1)
281: 84640002 lh a0,2(v1)
282: 00028c00 sll s1,v0,0x10
283: 94620004 lhu v0,4(v1)
284: 00048400 sll s0,a0,0x10
285: 00451021 addu v0,v0,a1
286: a4620004 sh v0,4(v1)
287: 8cc30000 lw v1,0(a2)
288: 00029400 sll s2,v0,0x10
289: 00031100 sll v0,v1,0x4
290: 04410002 bgez v0,494 <func_80133CD4+0x494>
291: acc20000 sw v0,0(a2)
292: 3631ffff ori s1,s1,0xffff
293: 8cc20004 lw v0,4(a2)
294: 00000000 nop
295: 00021100 sll v0,v0,0x4
296: 04410002 bgez v0,4ac <func_80133CD4+0x4ac>
297: acc20004 sw v0,4(a2)
298: 3610ffff ori s0,s0,0xffff
299: 8cc30008 lw v1,8(a2)
300: 00000000 nop
301: 00031100 sll v0,v1,0x4
302: 04410002 bgez v0,4c4 <func_80133CD4+0x4c4>
303: acc20008 sw v0,8(a2)
304: 3652ffff ori s2,s2,0xffff
305: 00031140 sll v0,v1,0x5
306: 02429021 addu s2,s2,v0
307: 8cc30000 lw v1,0(a2)
308: 8cc20004 lw v0,4(a2)
309: 00031840 sll v1,v1,0x1
310: 02238821 addu s1,s1,v1
311: 00021040 sll v0,v0,0x1
312: 02028021 addu s0,s0,v0
313: 02602021 move a0,s3
314: 3c020000 lui v0,0x0
315: 8c420000 lw v0,0(v0)
316: 02c03021 move a2,s6
317: 8c430000 lw v1,0(v0)
318: 3c050000 lui a1,0x0
319: 8ca50000 lw a1,0(a1)
320: 02238821 addu s1,s1,v1
321: 8c430004 lw v1,4(v0)
322: 8c420008 lw v0,8(v0)
323: 02038021 addu s0,s0,v1
324: 02429021 addu s2,s2,v0
325: 00111403 sra v0,s1,0x10
326: a4a20000 sh v0,0(a1)
327: 00101403 sra v0,s0,0x10
328: a4a20002 sh v0,2(a1)
329: 00121403 sra v0,s2,0x10
330: 0c000000 jal 0 <func_80133CD4>
331: a4a20004 sh v0,4(a1)
332: 86630002 lh v1,2(s3)
333: 00000000 nop
334: 2863f200 slti v1,v1,-3584
335: 10600003 beqz v1,54c <func_80133CD4+0x54c>
336: 00000000 nop
337: 08000154 j 550 <func_80133CD4+0x550>
338: 28421800 slti v0,v0,6144
339: 28422f00 slti v0,v0,12032
340: 1440ffe5 bnez v0,4e8 <func_80133CD4+0x4e8>
341: 02602021 move a0,s3
342: 86620002 lh v0,2(s3)
343: 00000000 nop
344: 00401821 move v1,v0
345: 2842f435 slti v0,v0,-3019
346: 10400013 beqz v0,5b8 <func_80133CD4+0x5b8>
347: 00000000 nop
348: 3c030000 lui v1,0x0
349: 8c630000 lw v1,0(v1)
350: 96620002 lhu v0,2(s3)
351: 96660000 lhu a2,0(s3)
352: a4620006 sh v0,6(v1)
353: 96630002 lhu v1,2(s3)
354: 96640004 lhu a0,4(s3)
355: 96650006 lhu a1,6(s3)
356: 3c010000 lui at,0x0
357: a4260000 sh a2,0(at)
358: 3c010000 lui at,0x0
359: a4230000 sh v1,0(at)
360: 3c010000 lui at,0x0
361: a4240000 sh a0,0(at)
362: 3c010000 lui at,0x0
363: a4250000 sh a1,0(at)
364: 08000181 j 604 <func_80133CD4+0x604>
365: 24020001 li v0,1
366: 3c020000 lui v0,0x0
367: 8c420000 lw v0,0(v0)
368: 00000000 nop
369: a4430006 sh v1,6(v0)
370: 3c050000 lui a1,0x0
371: 24a50000 addiu a1,a1,0
372: 8a620003 lwl v0,3(s3)
373: 9a620000 lwr v0,0(s3)
374: 8a630007 lwl v1,7(s3)
375: 9a630004 lwr v1,4(s3)
376: a8a20003 swl v0,3(a1)
377: b8a20000 swr v0,0(a1)
378: a8a30007 swl v1,7(a1)
379: b8a30004 swr v1,4(a1)
380: 92830000 lbu v1,0(s4)
381: 00000000 nop
382: 14600002 bnez v1,604 <func_80133CD4+0x604>
383: 24020001 li v0,1
384: 2402ffff li v0,-1
385: 8fbf003c lw ra,60(sp)
386: 8fbe0038 lw s8,56(sp)
387: 8fb70034 lw s7,52(sp)
388: 8fb60030 lw s6,48(sp)
389: 8fb5002c lw s5,44(sp)
390: 8fb40028 lw s4,40(sp)
391: 8fb30024 lw s3,36(sp)
392: 8fb20020 lw s2,32(sp)
393: 8fb1001c lw s1,28(sp)
394: 8fb00018 lw s0,24(sp)
395: 27bd0040 addiu sp,sp,64
396: 03e00008 jr ra
397: 00000000 nop
-399
View File
@@ -1,399 +0,0 @@
0: addiu $sp, $sp, -0x40
1: sw $s7, 0x34($sp)
2: addu $s7, $a0, $zero
3: sw $s4, 0x28($sp)
4: addu $s4, $a1, $zero
5: sw $s5, 0x2C($sp)
6: addu $s5, $a2, $zero
7: sw $s2, 0x20($sp)
8: addu $s2, $a3, $zero
9: sw $fp, 0x38($sp)
10: addu $fp, $s7, $zero
11: sw $ra, 0x3C($sp)
12: sw $s6, 0x30($sp)
13: sw $s3, 0x24($sp)
14: sw $s1, 0x1C($sp)
15: sw $s0, 0x18($sp)
16: lh $v1, 0x2($s4)
17: lui $a1, %hi(D_801870B0)
18: lw $a1, %lo(D_801870B0)($a1)
19: lh $v0, 0x4($s4)
20: sll $v1, $v1, 3
21: addu $s3, $s5, $v1
22: sll $v0, $v0, 2
23: addu $v0, $v0, $s2
24: lw $s6, 0x0($v0)
25: addu $a0, $s3, $zero
26: jal func_80134310
27: addu $a2, $s6, $zero
28: bgez $v0, .L801342DC
29: addu $v0, $zero, $zero
30: addu $a0, $s3, $zero
31: lui $a1, %hi(D_801870AC)
32: lw $a1, %lo(D_801870AC)($a1)
33: jal func_80134310
34: addu $a2, $s6, $zero
35: addu $s1, $v0, $zero
36: bltz $s1, .L80133FA0
37: addu $a0, $s3, $zero
38: lui $a1, %hi(D_801870B8)
39: lw $a1, %lo(D_801870B8)($a1)
40: jal func_80134310
41: addu $a2, $zero, $zero
42: lui $a3, %hi(D_801870B8)
43: lw $a3, %lo(D_801870B8)($a3)
44: nop
45: lh $v1, 0x0($a3)
46: negu $a2, $s1
47: mult $a2, $v1
48: mflo $v1
49: addu $s0, $v0, $zero
50: nop
51: div $zero, $v1, $s0
52: bnez $s0, .L80133DB0
53: nop
54: break 7
55: addiu $at, $zero, -0x1
56: bne $s0, $at, .L80133DC8
57: lui $at, (0x80000000 >> 16)
58: bne $v1, $at, .L80133DC8
59: nop
60: break 6
61: mflo $v1
62: lui $a0, %hi(D_801870AC)
63: lw $a0, %lo(D_801870AC)($a0)
64: nop
65: lhu $v0, 0x0($a0)
66: lui $a1, %hi(D_801870B4)
67: lw $a1, %lo(D_801870B4)($a1)
68: addu $v0, $v0, $v1
69: sh $v0, 0x0($a1)
70: lh $v0, 0x2($a3)
71: nop
72: mult $a2, $v0
73: mflo $v0
74: nop
75: nop
76: div $zero, $v0, $s0
77: bnez $s0, .L80133E14
78: nop
79: break 7
80: addiu $at, $zero, -0x1
81: bne $s0, $at, .L80133E2C
82: lui $at, (0x80000000 >> 16)
83: bne $v0, $at, .L80133E2C
84: nop
85: break 6
86: mflo $v1
87: lhu $v0, 0x2($a0)
88: nop
89: addu $v0, $v0, $v1
90: sh $v0, 0x2($a1)
91: lh $v0, 0x4($a3)
92: nop
93: mult $a2, $v0
94: mflo $v0
95: nop
96: nop
97: div $zero, $v0, $s0
98: bnez $s0, .L80133E68
99: nop
100: break 7
101: addiu $at, $zero, -0x1
102: bne $s0, $at, .L80133E80
103: lui $at, (0x80000000 >> 16)
104: bne $v0, $at, .L80133E80
105: nop
106: break 6
107: mflo $v1
108: lhu $v0, 0x4($a0)
109: addu $a3, $s3, $zero
110: addu $v0, $v0, $v1
111: sh $v0, 0x4($a1)
112: lh $v0, 0x8($s4)
113: lh $a0, 0x6($s4)
114: sll $v0, $v0, 2
115: addu $v0, $v0, $s2
116: sll $a0, $a0, 3
117: lw $a2, 0x0($v0)
118: jal func_8013435C
119: addu $a0, $s5, $a0
120: bnez $v0, .L801342DC
121: addu $v0, $zero, $zero
122: addu $a3, $s3, $zero
123: lh $v0, 0xC($s4)
124: lui $a1, %hi(D_801870B4)
125: lw $a1, %lo(D_801870B4)($a1)
126: lh $a0, 0xA($s4)
127: sll $v0, $v0, 2
128: addu $v0, $v0, $s2
129: sll $a0, $a0, 3
130: lw $a2, 0x0($v0)
131: jal func_8013435C
132: addu $a0, $s5, $a0
133: bnez $v0, .L801342DC
134: addu $v0, $zero, $zero
135: addu $a3, $s3, $zero
136: lh $v0, 0x10($s4)
137: lui $a1, %hi(D_801870B4)
138: lw $a1, %lo(D_801870B4)($a1)
139: lh $a0, 0xE($s4)
140: sll $v0, $v0, 2
141: addu $v0, $v0, $s2
142: sll $a0, $a0, 3
143: lw $a2, 0x0($v0)
144: jal func_8013435C
145: addu $a0, $s5, $a0
146: bnez $v0, .L801342DC
147: addu $v0, $zero, $zero
148: sll $v0, $s7, 16
149: bgez $v0, .L80133F68
150: andi $v0, $fp, 0x10
151: addu $a3, $s3, $zero
152: lh $v0, 0x14($s4)
153: lui $a1, %hi(D_801870B4)
154: lw $a1, %lo(D_801870B4)($a1)
155: lh $a0, 0x12($s4)
156: sll $v0, $v0, 2
157: addu $v0, $v0, $s2
158: sll $a0, $a0, 3
159: lw $a2, 0x0($v0)
160: jal func_8013435C
161: addu $a0, $s5, $a0
162: bnez $v0, .L801342DC
163: addu $v0, $zero, $zero
164: andi $v0, $fp, 0x10
165: beqz $v0, .L80133F84
166: nop
167: lhu $v0, 0x0($s4)
168: nop
169: andi $v0, $v0, 0x100
170: bnez $v0, .L801342DC
171: addu $v0, $zero, $zero
172: lhu $v1, 0x0($s4)
173: nop
174: andi $v0, $v1, 0x200
175: beqz $v0, .L80133FA8
176: addu $a0, $s3, $zero
177: lui $at, %hi(D_801D9500)
178: sh $v1, %lo(D_801D9500)($at)
179: j .L801342DC
180: addu $v0, $zero, $zero
181: lui $a1, %hi(D_801870B0)
182: lw $a1, %lo(D_801870B0)($a1)
183: jal func_80134310
184: addu $a2, $s6, $zero
185: lui $a0, %hi(D_801870C0)
186: lw $a0, %lo(D_801870C0)($a0)
187: lh $v1, 0x0($s3)
188: lui $t0, %hi(D_801870C0)
189: lw $t0, %lo(D_801870C0)($t0)
190: sw $v1, 0x0($a0)
191: lh $v1, 0x2($s3)
192: nop
193: sw $v1, 0x4($a0)
194: lh $v1, 0x4($s3)
195: negu $s1, $v0
196: sw $v1, 0x8($a0)
197: lwc2 $9, 0x0($t0)
198: lwc2 $10, 0x4($t0)
199: lwc2 $11, 0x8($t0)
200: nop
201: nop
202: sqr 0
203: lui $t0, %hi(D_801870C4)
204: lw $t0, %lo(D_801870C4)($t0)
205: nop
206: swc2 $25, 0x0($t0)
207: swc2 $26, 0x4($t0) /* handwritten instruction */
208: swc2 $27, 0x8($t0) /* handwritten instruction */
209: lui $a2, %hi(D_801870C0)
210: lw $a2, %lo(D_801870C0)($a2)
211: nop
212: lw $v0, 0x0($a2)
213: nop
214: mult $s1, $v0
215: lui $v0, %hi(D_801870C4)
216: lw $v0, %lo(D_801870C4)($v0)
217: nop
218: lw $v1, 0x0($v0)
219: lw $a0, 0x4($v0)
220: lw $v0, 0x8($v0)
221: mflo $a1
222: addu $v1, $v1, $a0
223: addu $s0, $v1, $v0
224: div $zero, $a1, $s0
225: bnez $s0, .L80134064
226: nop
227: break 7
228: addiu $at, $zero, -0x1
229: bne $s0, $at, .L8013407C
230: lui $at, (0x80000000 >> 16)
231: bne $a1, $at, .L8013407C
232: nop
233: break 6
234: mflo $v1
235: lui $a0, %hi(D_801870B0)
236: lw $a0, %lo(D_801870B0)($a0)
237: nop
238: lhu $v0, 0x0($a0)
239: nop
240: addu $v0, $v0, $v1
241: sh $v0, 0x0($a0)
242: lw $v0, 0x4($a2)
243: nop
244: mult $s1, $v0
245: mflo $v0
246: nop
247: nop
248: div $zero, $v0, $s0
249: bnez $s0, .L801340C4
250: nop
251: break 7
252: addiu $at, $zero, -0x1
253: bne $s0, $at, .L801340DC
254: lui $at, (0x80000000 >> 16)
255: bne $v0, $at, .L801340DC
256: nop
257: break 6
258: mflo $v1
259: lhu $v0, 0x2($a0)
260: nop
261: addu $v0, $v0, $v1
262: sh $v0, 0x2($a0)
263: lw $v0, 0x8($a2)
264: nop
265: mult $s1, $v0
266: mflo $v0
267: nop
268: nop
269: div $zero, $v0, $s0
270: bnez $s0, .L80134118
271: nop
272: break 7
273: addiu $at, $zero, -0x1
274: bne $s0, $at, .L80134130
275: lui $at, (0x80000000 >> 16)
276: bne $v0, $at, .L80134130
277: nop
278: break 6
279: mflo $a1
280: lh $v0, 0x0($a0)
281: nop
282: sll $s1, $v0, 16
283: lh $v0, 0x2($a0)
284: lhu $v1, 0x4($a0)
285: sll $s0, $v0, 16
286: addu $v1, $v1, $a1
287: sh $v1, 0x4($a0)
288: lw $v0, 0x0($a2)
289: sll $s2, $v1, 16
290: sll $v0, $v0, 4
291: bgez $v0, .L8013416C
292: sw $v0, 0x0($a2)
293: ori $s1, $s1, 0xFFFF
294: lw $v0, 0x4($a2)
295: nop
296: sll $v0, $v0, 4
297: bgez $v0, .L80134184
298: sw $v0, 0x4($a2)
299: ori $s0, $s0, 0xFFFF
300: lw $v1, 0x8($a2)
301: nop
302: sll $v0, $v1, 4
303: bgez $v0, .L8013419C
304: sw $v0, 0x8($a2)
305: ori $s2, $s2, 0xFFFF
306: sll $v0, $v1, 5
307: addu $s2, $s2, $v0
308: lw $v1, 0x0($a2)
309: lw $v0, 0x4($a2)
310: sll $v1, $v1, 1
311: addu $s1, $s1, $v1
312: sll $v0, $v0, 1
313: addu $s0, $s0, $v0
314: addu $a0, $s3, $zero
315: lui $v0, %hi(D_801870C0)
316: lw $v0, %lo(D_801870C0)($v0)
317: addu $a2, $s6, $zero
318: lw $v1, 0x0($v0)
319: lui $a1, %hi(D_801870B0)
320: lw $a1, %lo(D_801870B0)($a1)
321: addu $s1, $s1, $v1
322: lw $v1, 0x4($v0)
323: lw $v0, 0x8($v0)
324: addu $s0, $s0, $v1
325: addu $s2, $s2, $v0
326: sra $v0, $s1, 16
327: sh $v0, 0x0($a1)
328: sra $v0, $s0, 16
329: sh $v0, 0x2($a1)
330: sra $v0, $s2, 16
331: jal func_80134310
332: sh $v0, 0x4($a1)
333: lh $v1, 0x2($s3)
334: nop
335: slti $v1, $v1, -0xE00
336: beqz $v1, .L80134224
337: nop
338: j .L80134228
339: slti $v0, $v0, 0x1800
340: slti $v0, $v0, 0x2F00
341: bnez $v0, .L801341C0
342: addu $a0, $s3, $zero
343: lh $v0, 0x2($s3)
344: nop
345: addu $v1, $v0, $zero
346: slti $v0, $v0, -0xBCB
347: bnez $v0, .L80134298
348: nop
349: lui $v0, %hi(D_801870AC)
350: lw $v0, %lo(D_801870AC)($v0)
351: nop
352: sh $v1, 0x6($v0)
353: lui $a1, %hi(D_801152B0)
354: addiu $a1, $a1, %lo(D_801152B0)
355: lwl $v0, 0x3($s3)
356: lwr $v0, 0x0($s3)
357: lwl $v1, 0x7($s3)
358: lwr $v1, 0x4($s3)
359: swl $v0, 0x3($a1)
360: swr $v0, 0x0($a1)
361: swl $v1, 0x7($a1)
362: swr $v1, 0x4($a1)
363: lbu $v0, 0x0($s4)
364: nop
365: bnez $v0, .L801342DC
366: addiu $v0, $zero, 0x1
367: j .L801342DC
368: addiu $v0, $zero, -0x1
369: lhu $v0, 0x0($s3)
370: lui $v1, %hi(D_801870B0)
371: lw $v1, %lo(D_801870B0)($v1)
372: lui $at, %hi(D_801152A8)
373: sh $v0, %lo(D_801152A8)($at)
374: lhu $v0, 0x2($s3)
375: nop
376: sh $v0, 0x6($v1)
377: lui $at, %hi(D_801152AA)
378: sh $v0, %lo(D_801152AA)($at)
379: lhu $v0, 0x4($s3)
380: lui $at, %hi(D_801152AC)
381: sh $v0, %lo(D_801152AC)($at)
382: lhu $v0, 0x6($s3)
383: lui $at, %hi(D_801152AE)
384: sh $v0, %lo(D_801152AE)($at)
385: addiu $v0, $zero, 0x1
386: lw $ra, 0x3C($sp)
387: lw $fp, 0x38($sp)
388: lw $s7, 0x34($sp)
389: lw $s6, 0x30($sp)
390: lw $s5, 0x2C($sp)
391: lw $s4, 0x28($sp)
392: lw $s3, 0x24($sp)
393: lw $s2, 0x20($sp)
394: lw $s1, 0x1C($sp)
395: lw $s0, 0x18($sp)
396: addiu $sp, $sp, 0x40
397: jr $ra
398: nop
-103
View File
@@ -1,103 +0,0 @@
#!/usr/bin/env python3
"""S2 — sweep the has_mid_jr MATCHED-EXEMPLAR families via the carve path (jtbl_family_bank).
WHY THIS EXISTS SEPARATELY FROM family_sweep --hseq:
`family_sweep --hseq` REFUSES has_mid_jr families by design (§53 interlock). That refusal is
correct — their exemplars only banked because a jump-table carve preceded the splice, and a 0% from
the carve-less path is a TOOL ARTIFACT, which is exactly what manufactured the Phase-26 "structural
families ~0%" doctrine and steered two phases of strategy. So the families the interlock skips are
not dead; they are simply addressed to a different tool. This driver is that tool's front end.
DERIVED, NOT TRANSCRIBED (§138 rule 4 + R33):
- the family set = every manifest family with has_mid_jr AND a matched exemplar;
- the members = those still in corpus.stubs (the map's `members` list is unmatched-only, but a
member can be banked between a map regen and this run, so re-check);
- NB a JUST-BANKED head leaves `members` and becomes `exemplar.kind='matched'` — that is why the
family is looked up by its EXEMPLAR, not by scanning member lists.
--raw is passed because these exemplars banked through harvest_verify's post-carve reconcile, i.e.
at the `reconciled` stage, and a reconciled body is TU-specific (§41c: uniquified type names,
TU-targeted casts). extract_unit would hand the sweep a polluted template and every sibling would
gate-fail. jtbl_family_bank's own docstring records this (func_80178D40: 0/4 until --raw).
COMMITS PER FAMILY because jtbl_family_bank REFUSES a dirty tree — correctly: its per-sibling revert
restores from HEAD, so an uncommitted prior family would be destroyed by the next family's first
failure. R22 runs once over the whole batch afterwards.
Usage: jr_family_sweep.py [--dry] [--limit N] [--raw-dir DIR]
"""
import sys, os, json, glob, subprocess
sys.path.insert(0, 'tools')
import corpus
DRY = '--dry' in sys.argv
LIMIT = int(sys.argv[sys.argv.index('--limit') + 1]) if '--limit' in sys.argv else None
RAWD = sys.argv[sys.argv.index('--raw-dir') + 1] if '--raw-dir' in sys.argv else '.run/w6'
WALLS = {0x801412a8, 0x80178004, 0x80144b9c}
LEDGERED = {0x8017c294, 0x8017f7b4, 0x801898e4, 0x80186e24, 0x801758fc, 0x80132018, 0x8018a808}
fam = json.load(open('.run/family_hseq.json'))['families']
_sc = {}
def stubs(ov):
if ov not in _sc:
try: _sc[ov] = corpus.stubs(ov)
except Exception: _sc[ov] = {}
return _sc[ov]
targets = []
for f in fam:
if not f.get('has_mid_jr') or f['exemplar'].get('kind') not in ('matched', 'matched-ov077'):
continue
ex_ov, ex_addr = f['exemplar']['ov'], int(f['exemplar']['addr'], 16)
if ex_addr in WALLS | LEDGERED:
continue
members = [[ov, hex(int(a, 16))] for ov, a in f['members']
if int(a, 16) in stubs(ov) and (ov, int(a, 16)) != (ex_ov, ex_addr)]
if not members:
continue
targets.append((f['nins'] * len(members), f, ex_ov, ex_addr, members))
targets.sort(key=lambda t: -t[0])
if LIMIT:
targets = targets[:LIMIT]
print(f"{'exemplar':>12} {'overlay':<14} {'nins':>5} {'open':>5} {'templ ins':>10} raw-seed")
tot = 0
for ti, f, ex_ov, ex_addr, members in targets:
raw = os.path.join(RAWD, ex_ov, f'func_{ex_addr:08X}.c')
print(f" 0x{ex_addr:08x} {ex_ov:<14} {f['nins']:>5} {len(members):>5} {ti:>10,} "
f"{'yes' if os.path.exists(raw) else 'NO (uses banked unit)'}")
tot += ti
print(f"\nTOTAL: {len(targets)} jr matched-exemplar families / {tot:,} open templatable ins")
if DRY:
sys.exit(0)
os.makedirs('.run/jrprop', exist_ok=True)
for ti, f, ex_ov, ex_addr, members in targets:
fn = f'func_{ex_addr:08X}'
mf = f'.run/jrprop/{fn}_members.json'
json.dump(members, open(mf, 'w'))
cmd = ['.venv/bin/python', 'tools/jtbl_family_bank.py', fn, ex_ov, hex(ex_addr), mf]
raw = os.path.join(RAWD, ex_ov, f'{fn}.c')
if os.path.exists(raw):
cmd += ['--raw', raw]
print(f"\n== {fn} ({f['nins']} ins x {len(members)} open) ==", flush=True)
r = subprocess.run(cmd, capture_output=True, text=True)
out = (r.stdout or '') + (r.stderr or '')
open(f'.run/jrprop/{fn}.log', 'w').write(out)
for l in [x for x in out.strip().splitlines() if x.strip()][-3:]:
print(' ', l[:170])
dirty = subprocess.run(['git', 'status', '--porcelain', '--', 'src', 'config'],
capture_output=True, text=True).stdout.strip()
if dirty:
subprocess.run(['git', 'add', '-A', 'src', 'config'], check=True)
subprocess.run(['git', 'commit', '-q', '-F', '-'], text=True, check=True, input=(
f"feat(phase-30 S38/S2): jr-family sweep — {fn} x{len(members)} sibling slots\n\n"
f"jtbl_family_bank (the §53 carve path; family_sweep --hseq refuses has_mid_jr families\n"
f"BY DESIGN — a 0% from the carve-less tool is an artifact, not a wall). Each sibling\n"
f"individually byte-gated: carve -> extract -> remap -> whole-binary build, kept iff\n"
f"byte-identical else reverted. Committed per family because jtbl_family_bank requires a\n"
f"clean tree between families. R22 clean-fleet runs once over the batch.\n"))
print(f" committed ({len(dirty.splitlines())} paths)")
print("\nDONE — now run R22: make clean && make extract-all && make check-all")
-221
View File
@@ -1,221 +0,0 @@
#!/usr/bin/env bash
# TWO PATHS, ONE SCRIPT: this file is tracked at BOTH .run/maintenance.sh and
# tools/lanes/maintenance.sh, and `bash .run/maintenance.sh` is what actually runs. They diverged
# once (P31 S59->S60): tools/lanes/ held a pre-S59 copy, an edit landed there, and copying it over
# .run/ silently reverted the R47 shape filter, the R48 (binary,fn) keying, reloc --fix,
# rtu_second_chance and fix_tu_ret_decls. EDIT ONE, COPY TO THE OTHER, DIFF BOTH BEFORE COMMITTING.
# The FREE lane on a loop: re-run the A-prop sibling remap whenever the gater is idle.
#
# It compounds — every exemplar the waves bank creates new PURE seeds — and costs zero model
# tokens. Measured: 390 banked on the first pass, 338 NEW members appeared on the second after a
# day of banking. Only runs when .run/ready/ is empty, so it never competes with a wave's gate.
set -u
cd /home/musashi/bfm-decomp
say(){ echo "[$(date +%H:%M:%S)] [maint] $*"; }
while [ ! -e .run/ox_campaign.stop ]; do
# A pre-CHECK is not a lock. This one raced: it saw an empty ready queue during a gater bounce,
# started, and then a wave was queued — so two sweeps ran at once (measured P31 S58). Per-binary
# flocks keep each BUILD safe, but both lanes commit, so a stale staged body from one lane can
# revert the other lane's bank. Hold the same draw lock the gater takes, so gates never overlap.
if [ -n "$(ls .run/ready/ 2>/dev/null)" ] || pgrep -f 'tools/sweep_parallel' >/dev/null; then
sleep 300; continue
fi
# EXEMPLAR-COUNT TRIGGER, not a timer. The A-prop pool only refills when waves bank NEW
# exemplars that create fresh PURE seeds; on a 45-minute timer it re-swept an unchanged
# population and banked 390 -> 7 -> 0 -> 0 (P31 S58), holding a sweep slot and the draw lock for
# ~25 minutes each pass to do nothing. Wait for real new banks before spending the machine.
# Count BANKED FUNCTIONS, not commits. The gater makes ONE commit per wave, so wave `av`'s 428
# banked functions registered as 4 revisions — a 12-commit threshold meant ~12 WAVES (hours),
# not "enough new exemplars to refill the pool". The pool refills per EXEMPLAR, so that is the
# unit to threshold on. (Miscalibration caught P31 S58, ~2h after the trigger was introduced.)
NOW=$(git rev-list --count HEAD)
LAST=$(cat .run/maint_last_rev 2>/dev/null || echo 0)
NEWFN=$(git log -$(( NOW - LAST > 0 ? NOW - LAST : 1 )) --format=%s 2>/dev/null \
| grep -oP '— \K[0-9]+(?= banked)' | paste -sd+ | bc 2>/dev/null || echo 0)
NEWFN=${NEWFN:-0}
# THRESHOLD 150 -> 50 (Drew, P31 S59): the A-prop pipeline was rebuilt to consume every
# verdict layer and the lane now also carries the free reject-recovery and the periodic
# fleet R22, so a pass is worth running on a smaller refill than when it only re-swept an
# unchanged sibling pool. 150 was tuned for the old dead lane.
if [ "$NEWFN" -lt 50 ]; then
say "only $NEWFN functions banked since the last pass (need 50) — skipping"
sleep 1800; continue
fi
echo "$NOW" > .run/maint_last_rev
say "gater idle and $NEWFN new functions banked — running the free A-prop sibling lane"
.venv/bin/python tools/family_cousins.py --aprop-cards 2>&1 | tail -1
.venv/bin/python tools/aprop_autodraft.py --outdir .run/aprop_maint --slate .run/aprop_maint_slate.json 2>&1 | tail -1
.venv/bin/python - <<'PY'
import json
s=json.load(open('.run/aprop_maint_slate.json'))
json.dump([{'fn':r['fn'],'binary':r['binary'],'draft':r['draft']} for r in s],
open('.run/reloc_maint.json','w'), indent=1)
print('drafts:',len(s))
PY
.venv/bin/python tools/reloc_identity.py --batch .run/reloc_maint.json -j 12 --out .run/reloc_maint.out.json 2>&1 | tail -1
# MECHANICAL SYMBOL REPAIR (S59): an unambiguous reloc MISMATCH is a RENAME, not a reject —
# --fix rewrites the draft in place (it refuses ambiguity, R39) and the re-check below refreshes
# the verdicts so a repaired draft stages on this same pass. Measured: 4 of 4 MISMATCHes of the
# first fixed batch repaired to AGREE/MATCH this way.
.venv/bin/python - <<'PY'
import json, subprocess
res = json.load(open('.run/reloc_maint.out.json'))
mm = [r for r in res if r.get('status') == 'MISMATCH']
if mm:
rows = {(r['binary'], r['fn']) for r in mm}
batch = [r for r in json.load(open('.run/reloc_maint.json')) if (r['binary'], r['fn']) in rows]
json.dump(batch, open('.run/reloc_maint_mm.json', 'w'), indent=1)
subprocess.run(['.venv/bin/python', 'tools/reloc_identity.py', '--batch',
'.run/reloc_maint_mm.json', '-j', '4', '--fix'], capture_output=True)
p = subprocess.run(['.venv/bin/python', 'tools/reloc_identity.py', '--batch',
'.run/reloc_maint_mm.json', '-j', '4', '--out',
'.run/reloc_maint_mm.out.json'], capture_output=True)
fixed = {(r['binary'], r['fn']): r for r in json.load(open('.run/reloc_maint_mm.out.json'))}
res = [fixed.get((r.get('binary'), r['fn']), r) for r in res]
json.dump(res, open('.run/reloc_maint.out.json', 'w'), indent=1)
n = sum(1 for r in fixed.values() if r['status'] == 'AGREE')
print(f'reloc --fix: {n}/{len(mm)} MISMATCH draft(s) repaired to AGREE')
PY
.venv/bin/python - <<'PY'
import json,os,shutil,collections
res=json.load(open('.run/reloc_maint.out.json'))
# STAGE ONLY WHAT CAN BANK (S59, measured). status==AGREE alone let 82 shape-DIFF drafts through
# — reloc AGREE says the SYMBOLS agree, shape==MATCH says the INSTRUCTIONS do; a shape-DIFF draft
# cannot be byte-identical, so each one staged is a whole-binary build spent to learn what
# match_one already printed. Three consecutive 0-bank passes gated 82 of these every 45 minutes.
# Key by (binary, fn): overlays share function NAMES across binaries (func_80162CCC exists in
# main AND ov_MAIN_012), and an fn-keyed set stages every same-named draft when ONE agrees.
ok={(r.get('binary'), r['fn']) for r in res
if r.get('status') in ('AGREE','UNRESOLVED') and r.get('shape')=='MATCH'}
sla=json.load(open('.run/aprop_maint_slate.json'))
sel=[r for r in sla if (r['binary'], r['fn']) in ok]
dropped=collections.Counter()
for r in res:
if (r.get('binary'), r['fn']) not in ok:
dropped[f"{r.get('status')}/{r.get('shape') or '-'}"] += 1
shutil.rmtree('.run/sweep_maint', ignore_errors=True)
for r in sel:
d=f".run/sweep_maint/{r['binary']}"; os.makedirs(d, exist_ok=True)
shutil.copy(r['draft'], f"{d}/{r['fn']}.c")
print('staged', len(sel), 'of', len(sla), '; dropped by class:', dict(dropped))
PY
# SECOND CHANCE FOR STANDALONE COMPILE-FAILS (P31 S59). reloc_identity compiles each draft
# STANDALONE, but the draft is written to land in a TU that provides typedefs/decls the
# standalone compile lacks — the wrong oracle for the question (R33). Re-judge those against the
# REAL TU via rtu_match (no build tree, no locks) and stage the byte-MATCHes: measured 7 of 27
# such drafts were TU-byte-identical the day this landed, all previously dropped unjudged.
.venv/bin/python tools/rtu_second_chance.py --reloc .run/reloc_maint.out.json \
--slate .run/aprop_maint_slate.json --stage .run/sweep_maint -j 8 2>&1 | tail -2
# FREE RECOVERY OF PRE-GATE REJECTS (P31 S59). 45% of drafts never reach the gate — the reloc
# pre-filter drops them — and 13% of those have a body that ALREADY MATCHES with only the symbol
# names wrong (§171). Rebasing is deterministic and costs no model tokens, so it belongs in this
# lane beside the A-prop sweep. It only STAGES; the gate below is what decides.
.venv/bin/python tools/recover_rejects.py --limit 60 2>&1 | tail -3
if [ -n "$(ls .run/sweep_maint 2>/dev/null)" ]; then
flock .run/auto/draw.lock .venv/bin/python tools/sweep_parallel.py --drafts .run/sweep_maint -j 10 2>&1 | tail -2
# THE RETURN-TYPE HALF OF THE STALE-DECL WALL (S59, byte-proven 14/30 on its first run): a
# draft the gate rejects at closeness 0 has a byte-correct body; the dominant residual is the
# TU's own 'extern void f(void);' against a value-returning definition — the arity pre-pass
# relaxes the parens, not the return. fix_tu_ret_decls retypes the TU's decls to the
# definition's return (byte-neutral: declared-void callers ignore $v0), gates, and restores
# every edit the gate does not pay for. Zero tokens; the whole-binary SHA stays sole arbiter.
.venv/bin/python - <<'PY'
import json, glob, os, datetime
cut = (datetime.datetime.now() - datetime.timedelta(hours=1)).strftime('%Y-%m-%d %H:%M')
pairs = []
for d in glob.glob('.run/sweep_maint/*/'):
b = os.path.basename(d.rstrip('/'))
p = f'.run/auto/bulk/{b}.backlog.jsonl'
if not os.path.exists(f'config/splat.{b}.yaml') or not os.path.exists(p):
continue
fns = {os.path.basename(c)[:-2] for c in glob.glob(d + '*.c')}
last = {}
for line in open(p, errors='replace'):
try: r = json.loads(line)
except Exception: continue
if r.get('name') in fns and r.get('ts', '') >= cut:
last[r['name']] = r
pairs += [[b, fn] for fn, r in last.items()
if r.get('status') == 'near' and r.get('closeness') == 0]
json.dump(pairs, open('.run/ret_pairs_maint.json', 'w'))
print('fix_tu_ret candidates:', len(pairs))
PY
if [ -s .run/ret_pairs_maint.json ] && [ "$(cat .run/ret_pairs_maint.json)" != "[]" ]; then
.venv/bin/python tools/fix_tu_ret_decls.py --pairs-file .run/ret_pairs_maint.json \
--drafts .run/sweep_maint -j 6 2>&1 | tail -2
fi
if [ -n "$(git status --porcelain -- src/ config/)" ]; then
git add -A src/ config/
# NEVER stage main's TUs (top-level src/*.c) from this lane (S59): sweep_parallel refuses
# main, so any dirt there is another lane's in-flight gate_main work — unverified by
# construction. One writer (gate_main), one committer (main_lane); adopting a mid-flight
# substitution is how 24bd25993 turned main's baseline RED for 3h46m.
git reset -q -- src/*.c 2>/dev/null || true
if git diff --cached --quiet; then
say "only main-TU dirt found — leaving it to gate_main/main_lane; nothing to commit"
else
git commit -q -m "feat(decomp): free A-prop sibling lane (maintenance pass) — zero model tokens"
say "committed $(git rev-parse --short HEAD)"
fi
else
say "nothing banked this pass"
fi
fi
# PERIODIC FLEET CHECK (P31 S59, cadence tightened S60). Two binaries sat RED for hours — every
# lane only ever checks the binary it is currently touching, and a byte gate is a correctness
# oracle with a null coverage model: it is silent about everything it did not build. So sweep the
# whole fleet and report REDs loudly.
#
# EVERY PASS, not every 4th (S60). Detection latency is the real cost of a RED: the binary fails
# at BUILD, so every draft gated against it is rejected regardless of quality, and the wave reads
# as a drafting failure. Five REDs in one day, each burning drafts until the ~3 h sweep noticed.
# Gates now finish in ~35 min instead of 60, so the check is affordable at every pass.
# LOCK-AWARE WINDOW (S61). The pgrep guard above this line's history ("skip while any gate is in
# flight") meant the sweep NEVER ran — the gater gates back-to-back, so one was always in flight
# (last real sweep 12:54 on 08-25, S60 open thread #4). The wave gater, the maintenance sweep and
# the resolver all hold .run/auto/draw.lock for exactly their gate window, so taking that lock IS
# the "no overlay gate in flight" condition, and blocking on it gives the sweep a turn instead of
# a skip. gate_main holds its own lock and is short (~1 min per batch): skip and retry next pass.
if pgrep -f 'tools/gate_main' >/dev/null; then
say "fleet R22 sweep skipped this pass: gate_main in flight (retry next pass)"
else
say "fleet R22 sweep — taking .run/auto/draw.lock (waits for the current gate), then checks every binary"
flock .run/auto/draw.lock make check-all JOBS=12 >.run/fleet_check.log 2>&1 || true
grep -E "^\[FAIL\]" .run/check-all.txt 2>/dev/null | awk '{print $2}' > .run/fleet_red.txt || true
NRED=$(grep -c . .run/fleet_red.txt 2>/dev/null || echo 0)
if [ "$NRED" -gt 0 ]; then
say "*** $NRED BINARY/BINARIES ARE RED — see .run/fleet_red.txt ***"
head -8 .run/fleet_red.txt | sed 's/^/ RED: /'
# THE ONE AUTO-REPAIR, AND ONLY BECAUSE IT PROVES ITSELF (S60). Everything else here still
# fixes NOTHING by design — a guessed pad spec or config edit is how a silent byte shift gets
# committed. jtbl_pads_fix is different in kind: it does not derive or guess, it ENUMERATES
# the 2^(N-1) candidate specs and accepts one only if it is the UNIQUE spec that rebuilds the
# binary byte-identical to config/check.<bin>.sha, restoring the original otherwise. Three of
# the five REDs on 08-25 were this one class: JTBL_PADS stores a DERIVED property (how many
# jump tables an object emits) that every bank carrying a `switch` can change under it.
while read -r RB; do
[ -n "$RB" ] || continue
.venv/bin/python tools/jtbl_pads_fix.py "$RB" --apply 2>&1 | sed 's/^/ /'
done < .run/fleet_red.txt
if [ -n "$(git status --porcelain -- config/overlays.mk)" ]; then
make check-all JOBS=12 >.run/fleet_check.log 2>&1 || true
grep -E "^\[FAIL\]" .run/check-all.txt 2>/dev/null | awk '{print $2}' > .run/fleet_red2.txt || true
N2=$(grep -c . .run/fleet_red2.txt 2>/dev/null || echo 0)
if [ "$N2" -lt "$NRED" ]; then
git add config/overlays.mk
git commit -q -m "fix(jtbl): byte-proven pad-spec repair ($((NRED-N2)) binary/binaries) — maintenance lane"
say "pad-spec repair: $NRED RED -> $N2 RED, committed $(git rev-parse --short HEAD)"
else
say "pad-spec repair changed nothing measurable — left for a human"
fi
fi
else
say "fleet R22: all binaries byte-identical ($(grep -c '^\[ OK \]' .run/check-all.txt 2>/dev/null || echo 0) checked)"
fi
fi
say "pass complete; sleeping 45m"
sleep 2700
done
-146
View File
@@ -1,146 +0,0 @@
[
{
"addr": "0x800CEFD0",
"name": "func_800CEFD0",
"status": "MATCH",
"klass": "",
"mismatches": 0,
"nins": 77,
"note": "goto-loop (label:/goto, not while(1)) suppresses loop.c invariant motion -> D_800D3488/D_800A651C stay inline GAS macros while the explicit `u8 *base = &(*(u8*)&D_800AF630)` local still lands in $s0; matched on 2nd iteration."
},
{
"addr": "0x800D1984",
"name": "func_800D1984",
"status": "MATCH",
"klass": "",
"mismatches": 0,
"nins": 22,
"note": "if/else merged-return layout closed 12->1; RC-12 $0-add opaque copy (register int zr __asm__(\"$0\"); p = arg0 + zr) closed the last one \u2014 store base $a0 needs a 2nd pseudo cse's canon_reg can't fold back onto $s0. Notable: RC-12 firing on a 22-ins stub, not a giant."
},
{
"addr": "0x800D2D10",
"name": "func_800D2D10",
"status": "MATCH",
"klass": "",
"mismatches": 0,
"nins": 39,
"note": "\u00a743 K&R s16 params (n, flag) got 38/39; the last delta was gcc CSE-merging `d = val>>28` into `idx` \u2014 \u00a717 pin `register unsigned int d __asm__(\"$8\")` kept the copy alive ($t0 + addu $v1,$t0,$zero) and shifted i/n-1/&table onto $t1-$t3 \u2192 MATCH."
},
{
"addr": "0x800D1B80",
"name": "func_800D1B80",
"status": "MATCH",
"klass": "",
"mismatches": 0,
"nins": 22,
"note": "Two levers: (1) `if (x!=0){body;return DsMix(p);} return 0;` NOT early-exit `if(x==0)return 0;` \u2014 fixes block layout/branch polarity (12->1 mismatch); (2) RC-12 $0-add opaque copy `p = arg0 + zr` (zr pinned $0) gives the sb its $a0 base \u2014 4 plain `u8 *p=arg0;` spellings all lost to cse2 canon copy-prop. Bonus integration fix: DsMix declared K&R-unprototyped on purpose \u2014 asm proves the $a0 arg, but resident.c already defines `s32 DsMix(void)`, so an `(u8*)` prototype would be a conflicting-types error on splice (verified compatible in one TU vs real cc1, exit 0)."
},
{
"addr": "0x800D1E28",
"name": "func_800D1E28",
"status": "MATCH",
"nins": 37,
"mismatches": 0,
"klass": "",
"note": "Placing `result = 2` BETWEEN the call and its test (r = call(); result = 2; if (r != 0) goto test;) fixed both residuals at once: fills term2's delay slot from BEFORE the branch (killing dbr's steal+retarget L80->L84, restoring term3's nop) AND conflicts result with live $v0 -> $v1 falls out naturally, no register pin. Range test needed cookbook line-1867's per-bound `if (...) goto` split (bltz+slti signed order; switch/&& both canonicalize wrong) -- that idiom was flagged CANDIDATE/unverified and is now byte-confirmed. Note: D_80078E50 typed u16 here (lhu) vs u8 in existing overlay TUs -- loose-typing risk at splice."
},
{
"addr": "0x800D24A0",
"name": "func_800D24A0",
"status": "MATCH",
"klass": "",
"mismatches": 0,
"nins": 87,
"note": "Prior-art func_8013EE10 shape (u16* v=&D_80115112, base q=(char*)v-2, E4 struct-fold on D_80115168) gave 87/87 with a pure $a1/$a2 swap; RTL dump showed a REAL ~9x allocno-priority gap (counter 7refs/36 vs base 3refs/68), not a \u00a747 plateau -> closed with a register pin q=$5 on the base PLUS an explicit `j=0;` hoisted before `q=` (for(;j<8;j++)) to fix emission order. Both levers load-bearing; pinning the counter instead kills the target's un-coalesced rotate copy."
},
{
"addr": "0x800D1FC8",
"name": "func_800D1FC8",
"status": "MATCH",
"klass": "",
"mismatches": 0,
"nins": 62,
"note": "S13 mid-body param copy (sh=arg1 after the deltas) denied $a1 to the global ptr -> $a2/$a3, pin-free; then qty_compare density: hoist pair-2/3 global loads into t1/t2 (lw span 2 > lhu span 1) while pair-1 stays un-hoisted (its lw merges with block-local dx). 0 mismatches, reproduced."
},
{
"addr": "0x800D1658",
"name": "func_800D1658",
"status": "MATCH",
"nins": 47,
"mismatches": 0,
"klass": "",
"note": "\u00a752a non-coalescing delay-slot copy wall CRACKED via hard->hard pin pair (v=$2 + ret=$16, both required \u2014 either alone lets cse/global-alloc kill the addu $s0,$v0,$zero copy \u2192 44 ins) + single-return convergence (goto out) to keep the sll/sra tail from const-propagating + a $3-pinned `t = ret & 0xFFFF` temp that both saves ret from the andi dest and displaces id onto $a0; pins \u21d2 \u00d71-only, not sweep-safe."
},
{
"addr": "0x800D0D7C",
"name": "func_800D0D7C",
"status": "MATCH",
"mismatches": 0,
"nins": 45,
"klass": "",
"note": "Three stacked levers: `>=` condition polarity (fixed block order/branch sense), RC-12 $0-add opaque copies (`r=now+zr`,`h=arg0+zr` -> the $a2=$a3 and $t0=$a0 moves + the unfoldable `andi $a2,0xFF`), and an unused 8-byte local to restore the phantom `vars=8` frame -- the pin and the frame fight each other (zr removes the temp reservation plain C creates), so both routes plateaued at 43 ins until the dead local decoupled them; the frame also gates the dbr delay-slot steal of `subu $v0,$t0,$v1` and the epilogue sra placement."
},
{
"addr": "0x800D0214",
"name": "func_800D0214",
"status": "NEAR",
"mismatches": 5,
"nins": 43,
"klass": "sched",
"note": "43/43 ins, ins 2-15 byte-exact; stuck on S2 birthing boost \u2014 the single-set `lh` chunk temp sinks to its consumer (target keeps it at source position => original had reg_n_sets(chunk)>=2, unreachable in C since chunk dies at `*p=chunk`); that sink sets Lv 8-vs-5, losing the local-alloc density race (mask 2*4/3=26666 > idx 2*7/8=17500), which a `register mask __asm__(\"$3\")` pin buys back (15->5, and the schedule followed the regs per \u00a7H) leaving only Qlh<->QD_800A2E20 swapped via RC-11's <=3-qty sort bug; the S2 asm re-tie that would kill the boost always costs +1 ins because #APP blocks the maspsx delay-slot hop (RC-11 caveat) \u2014 route to decomp-permuter."
},
{
"addr": "0x800CFAD0",
"name": "func_800CFAD0",
"status": "NEAR",
"mismatches": 5,
"nins": 59,
"klass": "sched",
"note": "52->35->5 via separate-globals (dodges cse use_related_value sym+3 rebasing) + chained r0=g0=b0=0x80 + \u00a737 /s dep lattice (fixed all regs); stuck on S5: sched1 `blocking insn 114 for 1 cycles` \u2014 0xE1000085 is a 2-insn unboosted const so no ALU filler wedges between two stores, tag lw loses the mem-unit hazard and lands idx 6 not 9; 100 stmt-orders + 7 levers all hold at 5 \u2192 permuter next."
},
{
"addr": "0x800D0E30",
"name": "func_800D0E30",
"status": "NEAR",
"nins": 37,
"mismatches": 12,
"klass": "regalloc-order",
"note": "37/37 ins, idx0-12 exact (u8 dummy[16] -> RTL prologue schedules addiu $sp into the delay slot; u32 hi/lo block `shorten` fixing the ior order; u16 a promoted-subreg gives the addu $a1,$a0,$zero copy). Stuck on ONE fact: allocno_order is b(pri 16000)->m(7500)->a(3750) so b takes $v1; target needs a->m->b (b last => LL>64, unreachable). Interlock: u16 pins are silently ignored by gcc-2.7.2 so `a` is unpinnable, pinning b cascades (RC-5 ch3/4), and the \u00a747 dead-read slider materializes `a` as HImode killing the copy (38 ins)."
},
{
"addr": "0x800CFE60",
"name": "func_800CFE60",
"status": "MATCH",
"mismatches": 0,
"nins": 161,
"klass": "",
"note": "MATCH 161 ins (verified 2x, isolated work dirs). Six levers: split the 2 call results (else a 7th $s reg); (u32) casts for srl not sra; RC-3 pins base=$s4/mode=$s3 (densities .162 vs .122 differ -> decl swap is a no-op, range-shaping unreachable); read the high half via its own symbol D_800D34AE[i*2] (&arr[i] costs an 8-byte expand temp); NEW+GENERAL -> the 2nd D_800D34AC read as pointer arith, because two array-index reads of the SAME symbol let CSE unify the symbol pseudo, combine deletes the folded address pseudo but its stale refcount becomes a phantom ST_REGS allocno that reload spills to an 8-rounded slot nothing accesses (vars=8 -> every prologue/epilogue offset off by 8); zero-byte asm(\"\" : \"=r\"(q) : \"0\"(q)) blocks combine folding q=sym;p=q so the target's addu $a3,$v0,$zero survives. Two cookbook-worthy idioms (phantom ST_REGS slot + &arr[i] frame cost). WARNING: match_one's default --work .run/match collides across parallel agents (found another agent's func_800D2650 in my t.c); pass --work per agent."
},
{
"addr": "0x800D29F8",
"name": "func_800D29F8",
"status": "MATCH",
"mismatches": 0,
"nins": 172,
"klass": "",
"note": "Closed by volatile D_800B9A02 read as *(volatile u16*)&sym (kills CSE -> 6 reloads; INDIRECT_REF path force_regs the const addr -> la+lhu+preheader copy) + the real libgpu bitfield addPrim (store_bit_field masks value 0xFFFFFF before dest 0xFF000000 -> fixes const order/LUID tie-break + or operand order) + ot-as-macro + an int alias for the u16 ofs param (defeats combine's promoted-SUBREG commutative swap). NOTE for the cookbook: \u00a730's \"deny /s\" bare-store lever does NOT substitute for volatile once the load addr is a reg with a known-constant quantity \u2014 cse_rtx_varies_p then calls it NOT varying, so a /s store leaves it cached (that lever alone stalled at 37/172)."
},
{
"addr": "0x800D2650",
"name": "func_800D2650",
"status": "NEAR",
"klass": "regalloc-order",
"mismatches": 4,
"nins": 99,
"note": "\u00a737 /s-dep lever (MEM_IN_STRUCT_P on the D_800B9A02 load) closed 79->4 by restoring the CSE-killing store<->load dep (cascaded: reload + &D_800B9A02 hoist to $t4 + const-8 un-hoist); stuck at \u00a747's allocation-vs-emission coupling on the two hoisted stack params \u2014 .lreg proves cy(78)=2refs/12len(equiv-doubled)=pri1666 loses $v1 to col(79)=2refs/8len=pri2500; \u00a747's slider provably cannot reach it (len_cy=len_col+4 structurally, so 2/(x+4)<2/x always \u2014 not a truncation tie), and per vendored gcc the only dials left are reg_n_sets!=1 (local-alloc.c:1021) or did_conversion (function.c:3803, forces lhu and contradicts the target's lw). Real source likely sets cy twice; no zero-byte C form found (dead-output asm deleted by flow, volatile won't hoist, S2-kill re-tie adds a use too and over-boosts to 59). u16 cy probe reaches 2 but its residual IS the load width = dead end."
},
{
"addr": "0x800D27DC",
"name": "func_800D27DC",
"status": "NEAR",
"mismatches": 48,
"nins": 135,
"klass": "regalloc-order",
"note": "POLY_FT4+addPrim builder: structure byte-exact (135/135, prologue/preheader/cross-jump/delay slots all match) via macro-OT (not a named `e` local: addPrim double-evaluates ot -> two temps -> evicts `out` from $a1, 131->74), `s16 i` + `for(i=0;i<count;i++)` on the param directly (mints the single blez + two-pseudo counter + loop.c's `addu $s2,$v0,$zero` + frame 0x18), f2 hoisted from in-loop, getaddr-into-temp for the preheader constant order, and narrow `u16 sv/s16 w` (NEW IDIOM: combine puts a u16 stack param's zero_extend first in a commutative plus, silently losing source order). Stuck on pure register identity: i<->0xFFFFFF ($t7/$t8) and u<->v ($a0/$a1); `i`/`out` are unpinnable (a hard reg is not a basic_induction_var -> the `addiu $t0,$out,0x1D` giv anchor vanishes, 135->132), u/v pins are inert -> \u00a752a priority-first-fit GAP not a tie -> permuter seed. Pin-free structural-exact variant = 74 (header documents how to restore it)."
}
]
-145
View File
File diff suppressed because one or more lines are too long
-1
View File
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
0x8018797c,0x80181688,0x8018a21c,0x8017d38c,0x8017f40c,0x801858bc,0x80187674,0x8017e3ac,0x801880ec,0x80188428,0x8018a2e0,0x80189000,0x8018d870
-33
View File
@@ -1,33 +0,0 @@
#!/usr/bin/env python3
"""Capture the whole-binary blocker for a gate-refused draft: splice -> build -> read the
compiler's OWN error -> revert. Agents cannot run the gate, so a TU-level declaration conflict is
invisible to them (§136a: classify on the build's OUTPUT, never its exit status)."""
import sys, os, re, subprocess, shutil
sys.path.insert(0, 'tools'); import corpus
for spec in sys.argv[1:]:
ov, fn = spec.split(':')
addr = int(fn.split('_')[1], 16)
st = corpus.stubs(ov); rec = st.get(addr)
if not rec:
print(f"== {ov} {fn}: NOT A LIVE STUB (already banked?)"); continue
tu = rec.path
draft = f".run/s34/{ov}/{fn}.c"
stub = f'INCLUDE_ASM("{rec.asm_dir}", {fn});'
t = open(tu).read()
if t.count(stub) != 1:
print(f"== {ov} {fn}: stub line not found verbatim in {tu}"); continue
bak = t
open(tu, 'w').write(t.replace(stub, open(draft).read()))
r = subprocess.run(['make', 'build', f'BINARY={ov}'], capture_output=True, text=True)
open(tu, 'w').write(bak) # revert ALWAYS
out = r.stdout + r.stderr
# §136a, applied to MYSELF: a narrow keyword filter is exactly how a real error goes unseen.
# Keep every cc1/ld diagnostic line that names a source position, minus the known SHB noise.
errs = [l for l in out.splitlines()
if re.search(r'\.[ch]:\d+|undefined reference|\bError \d+', l)
and 'built-in function' not in l and 'Makefile:' not in l]
print(f"== {ov} {fn} (build rc={r.returncode})")
if errs:
for l in errs[:6]: print(" ", l.strip())
else:
print(" NO COMPILE ERROR -> the draft builds clean; the miss is a byte DIFF at whole-binary")
-37
View File
@@ -1,37 +0,0 @@
#!/usr/bin/env python3
"""Capture the whole-binary blocker for a gate-refused draft: splice -> build -> read the
compiler's OWN error -> revert. Agents cannot run the gate, so a TU-level declaration conflict is
invisible to them (§136a: classify on the build's OUTPUT, never its exit status)."""
import sys, os, re, subprocess, shutil
sys.path.insert(0, 'tools'); import corpus
for spec in sys.argv[1:]:
ov, fn = spec.split(':')
addr = int(fn.split('_')[1], 16)
st = corpus.stubs(ov); rec = st.get(addr)
if not rec:
print(f"== {ov} {fn}: NOT A LIVE STUB (already banked?)"); continue
tu = rec.path
draft = f".run/s35/{ov}/{fn}.c"
stub = f'INCLUDE_ASM("{rec.asm_dir}", {fn});'
t = open(tu).read()
if t.count(stub) != 1:
print(f"== {ov} {fn}: stub line not found verbatim in {tu}"); continue
bak = t
open(tu, 'w').write(t.replace(stub, open(draft).read()))
r = subprocess.run(['make', 'build', f'BINARY={ov}'], capture_output=True, text=True)
open(tu, 'w').write(bak) # revert ALWAYS
out = r.stdout + r.stderr
# §136a, applied to MYSELF: a narrow keyword filter is exactly how a real error goes unseen.
# Keep every cc1/ld diagnostic line that names a source position, minus the known SHB noise.
HARD = re.compile(r'undeclared|redefinition|conflicting types|parse error|undefined reference'
r'|syntax error|too (many|few) arguments|invalid|incompatible')
lines_ = [l for l in out.splitlines()
if re.search(r'\.[ch]:\d+|undefined reference', l)
and 'built-in function' not in l and 'Makefile:' not in l]
hard = [l for l in lines_ if HARD.search(l) and 'warning' not in l.lower()]
errs = hard or [l for l in lines_ if 'warning' not in l.lower()] or lines_
print(f"== {ov} {fn} (build rc={r.returncode})")
if errs:
for l in errs[:6]: print(" ", l.strip())
else:
print(" NO COMPILE ERROR -> the draft builds clean; the miss is a byte DIFF at whole-binary")
-37
View File
@@ -1,37 +0,0 @@
#!/usr/bin/env python3
"""Capture the whole-binary blocker for a gate-refused draft: splice -> build -> read the
compiler's OWN error -> revert. Agents cannot run the gate, so a TU-level declaration conflict is
invisible to them (§136a: classify on the build's OUTPUT, never its exit status)."""
import sys, os, re, subprocess, shutil
sys.path.insert(0, 'tools'); import corpus
for spec in sys.argv[1:]:
ov, fn = spec.split(':')
addr = int(fn.split('_')[1], 16)
st = corpus.stubs(ov); rec = st.get(addr)
if not rec:
print(f"== {ov} {fn}: NOT A LIVE STUB (already banked?)"); continue
tu = rec.path
draft = f".run/s36/{ov}/{fn}.c"
stub = f'INCLUDE_ASM("{rec.asm_dir}", {fn});'
t = open(tu).read()
if t.count(stub) != 1:
print(f"== {ov} {fn}: stub line not found verbatim in {tu}"); continue
bak = t
open(tu, 'w').write(t.replace(stub, open(draft).read()))
r = subprocess.run(['make', 'build', f'BINARY={ov}'], capture_output=True, text=True)
open(tu, 'w').write(bak) # revert ALWAYS
out = r.stdout + r.stderr
# §136a, applied to MYSELF: a narrow keyword filter is exactly how a real error goes unseen.
# Keep every cc1/ld diagnostic line that names a source position, minus the known SHB noise.
HARD = re.compile(r'undeclared|redefinition|conflicting types|parse error|undefined reference'
r'|syntax error|too (many|few) arguments|invalid|incompatible')
lines_ = [l for l in out.splitlines()
if re.search(r'\.[ch]:\d+|undefined reference', l)
and 'built-in function' not in l and 'Makefile:' not in l]
hard = [l for l in lines_ if HARD.search(l) and 'warning' not in l.lower()]
errs = hard or [l for l in lines_ if 'warning' not in l.lower()] or lines_
print(f"== {ov} {fn} (build rc={r.returncode})")
if errs:
for l in errs[:6]: print(" ", l.strip())
else:
print(" NO COMPILE ERROR -> the draft builds clean; the miss is a byte DIFF at whole-binary")
-37
View File
@@ -1,37 +0,0 @@
#!/usr/bin/env python3
"""Capture the whole-binary blocker for a gate-refused draft: splice -> build -> read the
compiler's OWN error -> revert. Agents cannot run the gate, so a TU-level declaration conflict is
invisible to them (§136a: classify on the build's OUTPUT, never its exit status)."""
import sys, os, re, subprocess, shutil
sys.path.insert(0, 'tools'); import corpus
for spec in sys.argv[1:]:
ov, fn = spec.split(':')
addr = int(fn.split('_')[1], 16)
st = corpus.stubs(ov); rec = st.get(addr)
if not rec:
print(f"== {ov} {fn}: NOT A LIVE STUB (already banked?)"); continue
tu = rec.path
draft = f".run/s36/{ov}/{fn}.c"
stub = f'INCLUDE_ASM("{rec.asm_dir}", {fn});'
t = open(tu).read()
if t.count(stub) != 1:
print(f"== {ov} {fn}: stub line not found verbatim in {tu}"); continue
bak = t
open(tu, 'w').write(t.replace(stub, open(draft).read()))
r = subprocess.run(['make', 'build', f'BINARY={ov}'], capture_output=True, text=True)
open(tu, 'w').write(bak) # revert ALWAYS
out = r.stdout + r.stderr
# §136a, applied to MYSELF: a narrow keyword filter is exactly how a real error goes unseen.
# Keep every cc1/ld diagnostic line that names a source position, minus the known SHB noise.
HARD = re.compile(r'undeclared|redefinition|conflicting types|parse error|undefined reference'
r'|syntax error|too (many|few) arguments|invalid|incompatible')
lines_ = [l for l in out.splitlines()
if re.search(r'\.[ch]:\d+|undefined reference', l)
and 'built-in function' not in l and 'Makefile:' not in l]
hard = [l for l in lines_ if HARD.search(l) and 'warning' not in l.lower()]
errs = hard or [l for l in lines_ if 'warning' not in l.lower()] or lines_
print(f"== {ov} {fn} (build rc={r.returncode})")
if errs:
for l in errs[:6]: print(" ", l.strip())
else:
print(" NO COMPILE ERROR -> the draft builds clean; the miss is a byte DIFF at whole-binary")
-156
View File
@@ -1,156 +0,0 @@
[
{
"fn": "func_8018BED0",
"ov": "ov_SC03_091",
"sub": "asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80182268",
"tu": "src/ov_SC03_091/ov_SC03_091_jr_80182268.c",
"n": 328,
"m": 8,
"ti": 2624,
"model": "sonnet",
"seed": 0
},
{
"fn": "func_8018BAB4",
"ov": "ov_SC03_091",
"sub": "asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80182268",
"tu": "src/ov_SC03_091/ov_SC03_091_jr_80182268.c",
"n": 263,
"m": 8,
"ti": 2104,
"model": "sonnet",
"seed": 0
},
{
"fn": "func_8018A808",
"ov": "ov_SC02_027",
"sub": "asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8017D898",
"tu": "src/ov_SC02_027/ov_SC02_027_jr_8017D898.c",
"n": 44,
"m": 41,
"ti": 1804,
"model": "sonnet",
"seed": 0
},
{
"fn": "func_80181D38",
"ov": "ov_SC03_006",
"sub": "asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8017AE2C",
"tu": "src/ov_SC03_006/ov_SC03_006_jr_8017AE2C.c",
"n": 143,
"m": 9,
"ti": 1287,
"model": "sonnet",
"seed": 1
},
{
"fn": "func_8017ED54",
"ov": "ov_SC06_014",
"sub": "asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8017BEBC",
"tu": "src/ov_SC06_014/ov_SC06_014_jr_8017BEBC.c",
"n": 265,
"m": 4,
"ti": 1060,
"model": "sonnet",
"seed": 0
},
{
"fn": "func_8017C290",
"ov": "ov_SC03_024",
"sub": "asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8017AE2C",
"tu": "src/ov_SC03_024/ov_SC03_024_jr_8017AE2C.c",
"n": 229,
"m": 4,
"ti": 916,
"model": "sonnet",
"seed": 0
},
{
"fn": "func_80182A78",
"ov": "ov_SC03_002",
"sub": "asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8017D604",
"tu": "src/ov_SC03_002/ov_SC03_002_jr_8017D604.c",
"n": 180,
"m": 5,
"ti": 900,
"model": "sonnet",
"seed": 1
},
{
"fn": "func_801803E0",
"ov": "ov_SC03_108",
"sub": "asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8017BEBC",
"tu": "src/ov_SC03_108/ov_SC03_108_jr_8017BEBC.c",
"n": 225,
"m": 4,
"ti": 900,
"model": "sonnet",
"seed": 1
},
{
"fn": "func_8018829C",
"ov": "ov_SC06_018",
"sub": "asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8017C24C",
"tu": "src/ov_SC06_018/ov_SC06_018_jr_8017C24C.c",
"n": 150,
"m": 6,
"ti": 900,
"model": "sonnet",
"seed": 1
},
{
"fn": "func_8018B29C",
"ov": "ov_SC02_028",
"sub": "asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8017D898",
"tu": "src/ov_SC02_028/ov_SC02_028_jr_8017D898.c",
"n": 44,
"m": 20,
"ti": 880,
"model": "sonnet",
"seed": 0
},
{
"fn": "func_8017DF18",
"ov": "ov_SC01_004",
"sub": "asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8017BE9C",
"tu": "src/ov_SC01_004/ov_SC01_004_jr_8017BE9C.c",
"n": 175,
"m": 5,
"ti": 875,
"model": "sonnet",
"seed": 1
},
{
"fn": "func_80181CF0",
"ov": "ov_SC06_008",
"sub": "asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8017C294",
"tu": "src/ov_SC06_008/ov_SC06_008_jr_8017C294.c",
"n": 124,
"m": 7,
"ti": 868,
"model": "sonnet",
"seed": 1
},
{
"fn": "func_8017D4A4",
"ov": "ov_SC01_004",
"sub": "asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8017BE9C",
"tu": "src/ov_SC01_004/ov_SC01_004_jr_8017BE9C.c",
"n": 173,
"m": 5,
"ti": 865,
"model": "sonnet",
"seed": 1
},
{
"fn": "func_8018A970",
"ov": "ov_SC02_027",
"sub": "asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8017D898",
"tu": "src/ov_SC02_027/ov_SC02_027_jr_8017D898.c",
"n": 41,
"m": 21,
"ti": 861,
"model": "sonnet",
"seed": 0
}
]
-153
View File
File diff suppressed because one or more lines are too long
-76
View File
@@ -1,76 +0,0 @@
extern u8 *func_801290DC(s32 a0, u8 *a1);
extern void func_80049CAC(s32 a0, s32 a1);
extern void func_800484EC(s32 a0, s32 a1, s32 a2);
extern s32 rand(void);
extern u16 D_801AC2F0[][4];
extern s32 D_801AC2E4[];
s32 func_801825A4(void *a0, s32 a1, s32 a2, s32 a3) {
u8 *obj;
s32 sub;
s32 rvA;
s16 rvB;
s32 p1;
p1 = a1;
obj = func_801290DC(0x41, (u8 *)a0);
if (obj == 0) {
return 0;
}
{
s32 idx;
rvA = rand();
rvB = rvA;
sub = *(s32 *)(obj + 0x20);
*(s32 *)(sub + 0x20) = (s32) D_801AC2E4;
idx = a3 & 0xF;
{
u16 *tbl = D_801AC2F0[idx];
*(u8 *)(sub + 0x27) = (u8) tbl[2];
*(u16 *)(sub + 0x28) = tbl[0];
*(u16 *)(sub + 0x2A) = tbl[1];
}
if ((a3 & 0x8000) != 0) {
s16 spd = (rvA * 0x10000 >> 0x10) % 0x200 + 0x400;
*(u16 *)(sub + 0x1A) = spd;
*(u16 *)(sub + 0x18) = spd;
*(s32 *)(obj + 0x34) = spd;
} else {
s16 spd = (rvA * 0x10000 >> 0x10) % 0xC00 + 0x400;
*(u16 *)(sub + 0x1A) = spd;
*(u16 *)(sub + 0x18) = spd;
*(s32 *)(obj + 0x34) = spd;
}
{
s32 sign;
s32 h;
s32 mod128;
s16 srcvec[4];
s32 buf[8];
s32 trailing[4];
sign = -1;
if ((rvB & 1) != 0) {
sign = 1;
}
h = rvB;
mod128 = h % 128;
srcvec[2] = 0;
trailing[1] = 0;
trailing[0] = 0;
trailing[2] = a2;
srcvec[0] = (s16) (sign * mod128 - 0x300);
srcvec[1] = (s16) (p1 + sign * (h % 0x300));
func_80049CAC((s32) srcvec, (s32) buf);
func_800484EC((s32) buf, (s32) trailing, (s32) (obj + 0x10));
*(s32 *)(obj + 0x1C) = 0x2D;
}
}
return (s32) obj;
}
-16
View File
@@ -1,16 +0,0 @@
typedef struct { s32 w[4]; } Blk16_8018B13C;
extern s32 func_8004787C(s32 a0);
extern void func_80028620(s32, void *);
extern Blk16_8018B13C D_800A5EA8;
extern Blk16_8018B13C D_801D0320;
extern s32 D_800A5EB0;
void func_8018B13C(s32 a0) {
Blk16_8018B13C *s1 = &D_800A5EA8;
*s1 = D_801D0320;
D_800A5EB0 = func_8004787C(*(s16 *)(a0 + 0xFE)) * 10 / 4096 - 5;
*(s16 *)(a0 + 0xFE) = (*(u16 *)(a0 + 0xFE) + 0x71) & 0xFFF;
func_80028620(2, s1);
}
-16
View File
@@ -1,16 +0,0 @@
typedef struct { s32 w[4]; } Blk16_8018B29C;
extern s32 func_8004787C(s32 a0);
extern void func_80028620(s32, void *);
extern Blk16_8018B29C D_800A5E88;
extern Blk16_8018B29C D_801D03A8;
extern s32 D_800A5E90;
void func_8018B354(s32 a0) {
Blk16_8018B29C *s1 = &D_800A5E88;
*s1 = D_801D03A8;
D_800A5E90 = func_8004787C(*(s16 *)(a0 + 0xFE)) / 512 + 8;
*(s16 *)(a0 + 0xFE) = (*(u16 *)(a0 + 0xFE) + 0x71) & 0xFFF;
func_80028620(0, s1);
}
-16
View File
@@ -1,16 +0,0 @@
typedef struct { s32 w[4]; } Blk16_80184328;
extern s32 func_8004787C(s32 a0);
extern void func_80028620(s32, void *);
extern s32 D_800A5E90;
extern Blk16_80184328 D_800A5E88;
extern Blk16_80184328 D_801BBE34;
void func_80184328(s32 a0) {
Blk16_80184328 *s1 = &D_800A5E88;
*s1 = D_801BBE34;
D_800A5E90 = func_8004787C(*(s16 *)(a0 + 0xFE)) * 20 / 4096 - 10;
*(s16 *)(a0 + 0xFE) = (*(u16 *)(a0 + 0xFE) + 0x71) & 0xFFF;
func_80028620(0, s1);
}
-37
View File
@@ -1,37 +0,0 @@
extern s32 func_8017DBD0(u32 a0v);
extern s16 func_8017DB14(u32 a0);
void func_8017D930(void *a0, void *a1) {
u16 *r = (u16 *)a0;
s16 *m = (s16 *)a1;
s16 cx;
s16 sx;
s16 cy;
s16 sy;
s16 cz;
s16 sz;
s32 sxsy;
s32 cxcz;
s32 cxsz;
cx = func_8017DBD0(r[0] & 0xFFF);
sx = func_8017DB14(r[0] & 0xFFF);
cy = func_8017DBD0(r[1] & 0xFFF);
sy = func_8017DB14(r[1] & 0xFFF);
cz = func_8017DBD0(r[2] & 0xFFF);
sz = func_8017DB14(r[2] & 0xFFF);
cxsz = (cx * sz) >> 15;
cxcz = (cx * cz) >> 15;
sxsy = (sx * sy) >> 15;
m[0] = (cz * cy) >> 15;
m[1] = ((sxsy * cz) >> 15) - cxsz;
m[2] = ((cxcz * sy) >> 15) + ((sx * sz) >> 15);
m[3] = (sz * cy) >> 15;
m[4] = ((sxsy * sz) >> 15) + cxcz;
m[5] = ((cxsz * sy) >> 15) - ((sx * cz) >> 15);
m[6] = -sy;
m[7] = (cy * sx) >> 15;
m[8] = (cy * cx) >> 15;
}
-231
View File
@@ -1,231 +0,0 @@
/* func_801837B0 — ov_SC02_041, TU ov_SC02_041_jr_8017BEBC.c.
*
* Family of 4 (824 templatable ins): func_801837B0 / func_80186DD4 (ov_SC04_002) /
* func_801861A4 (ov_SC04_005) / func_80182810 (ov_SC04_007).
*
* Draws the two triangles of an entity's ground marker: builds a 4-vertex gouraud packet on
* the stack (verts 0x10, colours 0x30, code 0x40), whose colour ramp is derived from the s32
* at a0+0x1C (*15, then >>1 for the second component, then -0x10 clamped-at-0 for the far
* pair). Bit 0 of the u16 at a0+0x70 picks which channel carries the bright value. Then the
* camera matrix cached at D_800AF630+0x18 is loaded and two rtpt+rtps+avsz4 groups run over a
* sliding window of the SVECTORs at a0+0xDC..0x104 (stride 8), queueing the packet through
* func_80017714 whenever the GTE flag masked with ~0x1000 is clear.
*
* DECLARATION SURFACE (whole-TU one-pass grep, D2):
* * D_800AF630 — TU line 53 `extern u8 D_800AF630[];` (identical extern repeated, legal)
* * func_80017714— TU line 4324 `extern void func_80017714(void *);` (identical extern repeated)
* * func_801837B0— TU line 5235 `extern void func_801837B0(s32 a0);` — the definition below
* uses that exact prototype, so no SELF-axis rename is needed.
* * every type tag and every gte_ macro carries the _801837B0 suffix: this TU already defines
* gte_ldv0 twice (lines 2687 and 4332, different bodies) and gte_SetRotMatrix at 5033, all
* ABOVE the splice point at 5246, so unsuffixed names would collide/redefine.
*
* CODEGEN NOTES (what the .s pins):
* * ONE aggregate `pkt` holds verts + colours + code. The code word MUST live inside the
* object handed to func_80017714 or gcc dead-stores it (a separate `s32 tag` local is
* eliminated and the frame comes out 8 short: 0x80 instead of 0x88).
* * `c` is s16 but `d` is s32 — that asymmetry IS in the target: after the -0x10 the `c < 0`
* test needs `sll $v1,$v1,16; bgez` (HImode) while the `d < 0` test is a bare `bgez $a3`
* (an `sra` by 17 already leaves 18 sign bits, so no re-extension is emitted).
* * `p`/`q` are a SECOND pair of s16 locals holding the value actually stored. They produce
* the `addu $a1,$v1,$zero` / `addu $a2,$a3,$zero` copies in the head and after each -0x10,
* and they occupy $a1/$a2 — which is what pushes the D_800AF630 base out to $t0 and the
* reload register out to $t1, exactly as the target has them. `q` must be s16, not s32: an
* s32 `q` is copy-propagated into `d` and the three `addu $a2,...` copies vanish.
* * The colour writes are CHAINED assignments; gcc expands `A = B = C = D = q` innermost-first,
* so the store order is D,C,B,A and exactly one QImode conversion temp is materialised per
* chain ($a0 for the first, $v0 reused for the rest).
* * The -0x10 on the second channel goes through a BLOCK-SCOPED `s32 e`, not `d -= 0x10`.
* Two separate effects, both required:
* - splitting `d` into `d` + `e` cuts REG_N_REFS(d) from 10 to 4, which drops d below p
* and q in global.c's allocno priority. With `d -= 0x10` the ranking is d,c,p,q and the
* three registers come out permuted ($a1/$a2/$a3 = d/p/q instead of p/q/d) — §137.
* - scoping `e` INSIDE each arm (one pseudo per arm instead of one shared) is what fixes
* the last residual: a function-scope `e` leaves `addiu $a3,$a3,-0x10` scheduled one slot
* too early, ahead of the `addu $v0,$a2,$zero` chain temp. That reorder was INVARIANT
* under every legal statement permutation (8 tried), i.e. it was never a source-order
* problem — it is the allocno/live-range split.
*/
extern u8 D_800AF630[];
extern void func_80017714(void *);
typedef struct { s16 vx, vy, vz, pad; } SV_801837B0; /* 8 bytes */
typedef struct { u8 r, g, b, cd; } CV_801837B0; /* 4 bytes */
typedef struct {
SV_801837B0 v[4]; /* +0x00 : sxy0..3 (v[0].vz doubles as the otz slot) */
CV_801837B0 rgb[4]; /* +0x20 */
u32 code; /* +0x30 */
u32 pad; /* +0x34 */
} PKT_801837B0; /* 0x38 */
#define gte_ldv0_801837B0(r0) __asm__ volatile ( \
"lwc2 $0, 0( %0 );" \
"lwc2 $1, 4( %0 )" \
: \
: "r"( r0 ) )
#define gte_ldv3_801837B0(r0, r1, r2) __asm__ volatile ( \
"lwc2 $0, 0( %0 );" \
"lwc2 $1, 4( %0 );" \
"lwc2 $2, 0( %1 );" \
"lwc2 $3, 4( %1 );" \
"lwc2 $4, 0( %2 );" \
"lwc2 $5, 4( %2 )" \
: \
: "r"( r0 ), "r"( r1 ), "r"( r2 ) )
#define gte_rtps_801837B0() __asm__ volatile ("nop;nop;rtps")
#define gte_rtpt_801837B0() __asm__ volatile ("nop;nop;rtpt")
#define gte_avsz4_801837B0() __asm__ volatile ("nop;nop;avsz4")
#define gte_stsxy_801837B0(r0) __asm__ volatile ( \
"swc2 $14, 0( %0 )" \
: \
: "r"( r0 ) \
: "memory" )
#define gte_stsxy3_801837B0(r0, r1, r2) __asm__ volatile ( \
"swc2 $12, 0( %0 );" \
"swc2 $13, 0( %1 );" \
"swc2 $14, 0( %2 )" \
: \
: "r"( r0 ), "r"( r1 ), "r"( r2 ) \
: "memory" )
#define gte_stotz_801837B0(r0) __asm__ volatile ( \
"swc2 $7, 0( %0 )" \
: \
: "r"( r0 ) \
: "memory" )
#define gte_stflg_801837B0(r0) __asm__ volatile ( \
"cfc2 $12, $31;" \
"nop;" \
"sw $12, 0( %0 )" \
: \
: "r"( r0 ) \
: "$12", "memory" )
#define gte_SetRotMatrix_801837B0(r0) __asm__ volatile ( \
"lw $12, 0( %0 );" \
"lw $13, 4( %0 );" \
"ctc2 $12, $0;" \
"ctc2 $13, $1;" \
"lw $12, 8( %0 );" \
"lw $13, 12( %0 );" \
"lw $14, 16( %0 );" \
"ctc2 $12, $2;" \
"ctc2 $13, $3;" \
"ctc2 $14, $4" \
: \
: "r"( r0 ) \
: "$12", "$13", "$14" )
#define gte_SetTransMatrix_801837B0(r0) __asm__ volatile ( \
"lw $12, 20( %0 );" \
"lw $13, 24( %0 );" \
"ctc2 $12, $5;" \
"lw $14, 28( %0 );" \
"ctc2 $13, $6;" \
"ctc2 $14, $7" \
: \
: "r"( r0 ) \
: "$12", "$13", "$14" )
void func_801837B0(s32 a0)
{
PKT_801837B0 pkt; /* 0x10 */
s32 flag1; /* 0x48 */
s32 flag2; /* 0x4C */
s32 otz; /* 0x50 */
u8 *base;
s32 *m;
s16 c, p, q;
s32 d;
c = *(s32 *)(a0 + 0x1C) * 15;
base = D_800AF630;
p = c;
d = c >> 1;
q = d;
if ((*(u16 *)(a0 + 0x70) & 1) == 0) {
pkt.rgb[0].b = pkt.rgb[1].b = p;
pkt.rgb[0].r = pkt.rgb[1].r = pkt.rgb[0].g = pkt.rgb[1].g = q;
c -= 0x10;
p = c;
{
s32 e; /* block-scoped: one pseudo per arm (§136/L1) */
e = d - 0x10;
q = e;
if (c < 0) {
p = 0;
}
if (e < 0) {
q = 0;
}
}
pkt.rgb[2].b = pkt.rgb[3].b = p;
pkt.rgb[2].r = pkt.rgb[3].r = pkt.rgb[2].g = pkt.rgb[3].g = q;
} else {
pkt.rgb[0].r = pkt.rgb[1].r = p;
pkt.rgb[0].g = pkt.rgb[1].g = pkt.rgb[0].b = pkt.rgb[1].b = q;
c -= 0x10;
p = c;
{
s32 e; /* block-scoped: one pseudo per arm (§136/L1) */
e = d - 0x10;
q = e;
if (c < 0) {
p = 0;
}
if (e < 0) {
q = 0;
}
}
pkt.rgb[2].r = pkt.rgb[3].r = p;
pkt.rgb[2].g = pkt.rgb[3].g = pkt.rgb[2].b = pkt.rgb[3].b = q;
}
pkt.code = 0x50000000;
m = (s32 *)(base + 0x18);
gte_SetRotMatrix_801837B0(m);
gte_SetTransMatrix_801837B0(m);
gte_ldv3_801837B0((SV_801837B0 *)(a0 + 0xFC), (SV_801837B0 *)(a0 + 0x104),
(SV_801837B0 *)(a0 + 0xEC));
gte_rtpt_801837B0();
gte_stflg_801837B0(&flag1);
gte_stsxy3_801837B0(&pkt.v[0], &pkt.v[1], &pkt.v[2]);
gte_ldv0_801837B0((SV_801837B0 *)(a0 + 0xF4));
gte_rtps_801837B0();
gte_stflg_801837B0(&flag2);
flag1 = flag1 | flag2;
gte_stsxy_801837B0(&pkt.v[3]);
gte_avsz4_801837B0();
gte_stotz_801837B0(&otz);
if ((flag1 & 0xFFFFEFFF) == 0) {
pkt.v[0].vz = (s16)otz;
func_80017714(&pkt.v[0]);
}
gte_ldv3_801837B0((SV_801837B0 *)(a0 + 0xEC), (SV_801837B0 *)(a0 + 0xF4),
(SV_801837B0 *)(a0 + 0xDC));
gte_rtpt_801837B0();
gte_stflg_801837B0(&flag1);
gte_stsxy3_801837B0(&pkt.v[0], &pkt.v[1], &pkt.v[2]);
gte_ldv0_801837B0((SV_801837B0 *)(a0 + 0xE4));
gte_rtps_801837B0();
gte_stflg_801837B0(&flag2);
flag1 = flag1 | flag2;
gte_stsxy_801837B0(&pkt.v[3]);
gte_avsz4_801837B0();
gte_stotz_801837B0(&otz);
if ((flag1 & 0xFFFFEFFF) == 0) {
pkt.v[0].vz = (s16)otz;
func_80017714(&pkt.v[0]);
}
}
-107
View File
@@ -1,107 +0,0 @@
/* func_80181914 — byte-verified twin of func_8017D77C (src/ov_SC04_018/ov_SC04_018_jr_8017AE2C.c:4271),
* found via §136e/S34 magic-word grep on the `AAA32294` instruction bytes (the
* D_800AF630+0xA3AA far-offset lhu). func_8017D77C is the banked member of this
* family; this body was derived by remapping its symbols:
* func_8017D77C -> func_80181914 D_801E6F58 -> D_801C12C0
* func_8017D9B8 -> func_80181B50 func_8017DAC4 -> func_80181C5C
* Ent_8017D6EC -> Ent_80181914 (own function-suffixed typedef -- same 0x24-stride
* shape as this TU's own Ent_8017D6EC_80181884 at TU:4633-4639,
* given a fresh name/no shared tag so splicing this in below that
* file-scope typedef can't hit the C89 duplicate-typedef error, S33).
* func_80181C5C is already banked in THIS TU (defined further down as
* `void func_80181C5C(void *arg0)`), matching the direct call below with no cast
* needed. func_80181B50 has no declaration anywhere in this TU but its own
* INCLUDE_ASM stub, so it is declared directly as `void (void *)` (no idiom-9 cast
* needed, unlike the twin's func_8017D9B8 which was `void (void)`).
*/
extern u8 D_80078EB1;
extern u8 D_80078E78[];
extern u8 D_800AF630[];
extern s32 func_8004787C(s32 a0);
extern void func_8012AD44(s32 *a0, s16 a1);
extern void func_80181B50(void *arg0);
extern void func_80181C5C(void *arg0);
typedef struct {
u8 unk00[0x16];
s16 unk16;
u8 unk18[4];
s32 unk1C;
u8 unk20[4];
} Ent_80181914;
extern Ent_80181914 D_801C12C0[];
void func_80181914(s32 *arg0)
{
u8 *m = D_800AF630;
u8 *q = D_80078E78;
Ent_80181914 *p;
Ent_80181914 *r;
s32 i;
s32 j;
s32 n;
s32 h;
s32 c;
s32 e;
if (D_80078EB1 >= 9) {
n = 0;
for (j = 0; j < 4; j++) {
r = &D_801C12C0[j];
if (r->unk1C == 0) {
n++;
}
}
if (n == 0) {
func_8012AD44(arg0, 0);
return;
}
}
i = 0;
do {
p = (Ent_80181914 *)((s32)D_801C12C0 + i * 0x24);
if (p->unk1C == 0) {
if (*(s16 *)((s32)p + 0xC) > 0x400) {
if (*(s32 *)((s32)p + 0x18) != 0) {
*(s32 *)((s32)p + 0x18) = *(s32 *)((s32)p + 0x18) - 1;
} else {
*(s16 *)((s32)p + 0xC) = *(s16 *)((s32)p + 0xC) + 11;
}
} else {
*(s16 *)((s32)p + 0xC) = *(s16 *)((s32)p + 0xC) + 11;
}
if (*(s16 *)((s32)p + 0xC) > 0x800) {
*(s16 *)((s32)p + 0xC) = 0;
}
c = (func_8004787C(*(s16 *)((s32)p + 0xC)) / 64) & 0xFF;
c = c | ((c << 16) | (c << 8));
*(s32 *)((s32)p + 0x4) = c;
c = (func_8004787C(*(s16 *)((s32)p + 0xC)) / 256) & 0xFF;
c = c | ((c << 16) | (c << 8));
*(s32 *)((s32)p + 0x8) = c;
if ((*(u16 *)(m + 0xA3AA) & 1) == 0) {
e = *(u16 *)((s32)p + 0xE) + 1;
*(u16 *)((s32)p + 0xE) = e;
if ((s16)e >= 0x40) {
*(s16 *)((s32)p + 0xE) = 0;
}
}
h = *(s16 *)((s32)p + 0xC);
if (h == 0) {
p->unk1C = 1;
} else if (h > 0x555) {
if (*(s32 *)((s32)p + 0x20) == 0) {
*(s32 *)((s32)p + 0x20) = 1;
if (q[0x39] < 9) {
func_80181B50(p);
}
}
}
func_80181C5C(p);
}
i++;
} while (i < 4);
}
-189
View File
@@ -1,189 +0,0 @@
/* func_80184370 — ov_SC03_092 (263 ins, jr-function).
* Family twin of the BANKED exemplar func_80182FD4 (ov_SC02_028,
* src/ov_SC02_028/ov_SC02_028_jr_8017D898.c:4184) — same h_seq template
* (family_hseq.json, diff_class PURE, 7 addr instances), body reused verbatim
* with only the tail-call target (func_8018478C here vs func_801833F0 there,
* the per-overlay sibling in the same wave) and local type-tag suffixes
* renamed. See docs/matching-cookbook.md S34/S35/S36 (magic-grep / sibling
* reuse) — this is the STEP 0 win: the whole body is a byte-proven template.
*
* 12-point (6-segment) ribbon/trail projector.
* a0 = entity, a1 = ctx. Projects the entity origin (RTPS) into buf[0], then
* the 12 offset points at (*(a0+0x20))->pt[0..11] into buf[1..12].
*
* Gate 1: RTPS flag & ~0x1000 must be clear.
* Gate 2: z = otz + 1, biased by the 12-bit field of the u16 @0x2C according
* to its top two bits (0xC000 = subtract & clamp at 0, else add), and
* the whole draw is dropped unless z < 0x1000.
* Bit 0x8000 of the s16 @0x1E picks the "per-segment OT" variant: the six EVEN
* points go through RTPT three-at-a-time (screen xy only) and the six ODD ones
* go through RTPS one at a time, each also depositing its own otz+1 into
* buf[13..18]; func_8018478C then gets the OT *base*. Otherwise all 12 points
* go through RTPT three-at-a-time and func_8018478C gets the single slot &ot[z].
*
* buf is ONE flat 19-word packet (76 bytes; gcc rounds the BLKmode stack slot
* up to 80) — the OT indices are written as buf[13 + (i >> 1)].
*/
#define gte_ldv0(r0) __asm__ volatile ( \
"lwc2 $0, 0( %0 );" \
"lwc2 $1, 4( %0 )" \
: \
: "r"( r0 ) )
#define gte_ldv3(r0, r1, r2) __asm__ volatile ( \
"lwc2 $0, 0( %0 );" \
"lwc2 $1, 4( %0 );" \
"lwc2 $2, 0( %1 );" \
"lwc2 $3, 4( %1 );" \
"lwc2 $4, 0( %2 );" \
"lwc2 $5, 4( %2 )" \
: \
: "r"( r0 ), "r"( r1 ), "r"( r2 ) )
#define gte_rtps() __asm__ volatile ("nop;nop;rtps")
#define gte_rtpt() __asm__ volatile ("nop;nop;rtpt")
#define gte_stsxy(r0) __asm__ volatile ( \
"swc2 $14, 0( %0 )" \
: \
: "r"( r0 ) \
: "memory" )
#define gte_stsxy3(r0, r1, r2) __asm__ volatile ( \
"swc2 $12, 0( %0 );" \
"swc2 $13, 0( %1 );" \
"swc2 $14, 0( %2 )" \
: \
: "r"( r0 ), "r"( r1 ), "r"( r2 ) \
: "memory" )
#define gte_stszotz(r0) __asm__ volatile ( \
"mfc2 $12, $19;" \
"nop;" \
"sra $12, $12, 2;" \
"sw $12, 0( %0 )" \
: \
: "r"( r0 ) \
: "$12", "memory" )
#define gte_stflg(r0) __asm__ volatile ( \
"cfc2 $12, $31;" \
"nop;" \
"sw $12, 0( %0 )" \
: \
: "r"( r0 ) \
: "$12", "memory" )
void func_80184370(void *a0, void *a1)
{
typedef struct { u16 vx, vy; } Pt2_80184370;
typedef struct { u8 pad[0x10]; Pt2_80184370 pt[12]; } Src_80184370;
typedef struct { u16 vx, vy, vz, pad; } Vec8_80184370;
extern void func_8001E094(void);
extern void func_8001E378(void *a0);
extern void func_8018478C(void *a0, void *a1, u32 *a2, u32 *a3);
extern u8 D_800A6610[];
extern short D_800B9A02;
Vec8_80184370 base;
Vec8_80184370 v[3];
u32 buf[19];
long flag;
long otz;
long flag2;
Src_80184370 *s;
u32 *ot;
s32 z;
s32 i;
u16 w;
ot = (u32 *)&D_800A6610[(*(u16 *)&D_800B9A02) << 14];
s = *(Src_80184370 **)((s32)a0 + 0x20);
if (s == 0) {
return;
}
if (*(s32 *)((s32)a0 + 0x34) != 0) {
func_8001E094();
} else {
func_8001E378(a0);
}
base.vx = *(u16 *)((s32)a0 + 0x2E);
base.vy = *(u16 *)((s32)a0 + 0x30);
base.vz = *(u16 *)((s32)a0 + 0x32);
gte_ldv0(&base);
gte_rtps();
gte_stsxy(&buf[0]);
gte_stflg(&flag);
gte_stszotz(&otz);
if (flag & ~0x1000) {
return;
}
w = *(u16 *)((s32)a0 + 0x2C);
z = otz + 1;
if ((w & 0xC000) != 0) {
if ((w & 0xC000) == 0xC000) {
z -= (w & 0xFFF);
if (z < 0) {
z = 0;
}
} else {
z += (w & 0xFFF);
}
}
if (z >= 0x1000) {
return;
}
if (*(s16 *)((s32)a0 + 0x1E) & 0x8000) {
for (i = 0; i < 12; i += 6) {
v[0].vx = base.vx + s->pt[i].vx;
v[0].vy = base.vy + s->pt[i].vy;
v[0].vz = base.vz;
v[1].vx = base.vx + s->pt[i + 2].vx;
v[1].vy = base.vy + s->pt[i + 2].vy;
v[1].vz = base.vz;
v[2].vx = base.vx + s->pt[i + 4].vx;
v[2].vy = base.vy + s->pt[i + 4].vy;
v[2].vz = base.vz;
gte_ldv3(&v[0], &v[1], &v[2]);
gte_rtpt();
gte_stsxy3(&buf[i + 1], &buf[i + 3], &buf[i + 5]);
}
for (i = 1; i < 12; i += 2) {
v[0].vx = base.vx + s->pt[i].vx;
v[0].vy = base.vy + s->pt[i].vy;
v[0].vz = base.vz;
gte_ldv0(&v[0]);
gte_rtps();
gte_stsxy(&buf[i + 1]);
gte_stflg(&flag2);
gte_stszotz(&otz);
buf[13 + (i >> 1)] = otz + 1;
}
func_8018478C(a0, a1, &buf[0], ot);
} else {
for (i = 0; i < 12; i += 3) {
v[0].vx = base.vx + s->pt[i].vx;
v[0].vy = base.vy + s->pt[i].vy;
v[0].vz = base.vz;
v[1].vx = base.vx + s->pt[i + 1].vx;
v[1].vy = base.vy + s->pt[i + 1].vy;
v[1].vz = base.vz;
v[2].vx = base.vx + s->pt[i + 2].vx;
v[2].vy = base.vy + s->pt[i + 2].vy;
v[2].vz = base.vz;
gte_ldv3(&v[0], &v[1], &v[2]);
gte_rtpt();
gte_stsxy3(&buf[i + 1], &buf[i + 2], &buf[i + 3]);
}
func_8018478C(a0, a1, &buf[0], ot + z);
}
}
-164
View File
@@ -1,164 +0,0 @@
#include "common.h"
typedef struct {
u32 addr : 24;
u32 len : 8;
} PTag_8018478C;
typedef struct {
PTag_8018478C tag;
u8 r0, g0, b0, code;
u16 x0, y0;
u8 u0, v0;
u16 clut;
u16 x1, y1;
u8 u1, v1;
u16 tpage;
u16 x2, y2;
u8 u2, v2;
u16 pad2;
u16 x3, y3;
u8 u3, v3;
u16 pad3;
} Ft4_8018478C;
typedef struct {
PTag_8018478C tag;
u32 code0;
} Drm_8018478C;
#define ADDPRIM_8018478C(o, p) \
(((PTag_8018478C *)(p))->addr = ((PTag_8018478C *)(o))->addr, \
((PTag_8018478C *)(o))->addr = (u32)(p))
/* lhu / sll 16 / sra 19 : signed 13-bit field held at bit 3 of a u16 */
#define SR3_8018478C(a) (((s32)(*(u16 *)(a) << 16)) >> 19)
void func_8018478C(void *ent, void *spr, u32 *q, u32 *ot)
{
extern u8 *D_800A5E60;
register s32 zr __asm__("$0");
Ft4_8018478C *poly;
Drm_8018478C *dm;
s32 vtx;
u32 flags;
s32 tp, abr, code, shift;
u16 x;
u32 y;
s32 tpage, clut, cy;
s32 su, sv, uu, vv;
u16 fl;
s32 i, m;
u32 b;
poly = (Ft4_8018478C *)D_800A5E60;
fl = *(u16 *)((s32)ent + 0x1E) & 0x8000;
flags = *(u32 *)((s32)ent + 4);
tp = (flags >> 24) & 3;
shift = 2 - tp;
x = *(u16 *)((s32)ent + 0x28) + (*(s16 *)((s32)spr + 4) >> shift);
y = *(u16 *)((s32)ent + 0x2A) + *(u16 *)((s32)spr + 6);
vtx = *(s32 *)((s32)ent + 0x20);
D_800A5E60 += 0xF0;
if (flags & 0x40000000) {
code = 0x2E;
abr = (flags >> 28) & 3;
} else {
code = 0x2C;
abr = 1;
}
tpage = (tp << 7) | (abr << 5) | ((y & 0x100) >> 4) | ((x & 0x3C0) >> 6) |
((y & 0x200) << 2);
b = *(u8 *)((s32)ent + 0x27);
cy = (b + 0x100) << 6;
if (b < 0xE0) {
clut = cy | 0x16;
} else {
clut = cy | 0x10;
}
{
s32 t = ((x - ((tpage & 0xF) << 6)) << shift) +
(*(u16 *)((s32)spr + 4) & ((1 << shift) - 1));
su = t + zr;
__asm__ __volatile__("" ::"r"(t + *(u8 *)((s32)spr + 2) - 1));
__asm__ __volatile__("" ::"r"(t));
}
y = y & 0xFFFF;
if (tpage & 0x10) {
sv = y - 0x100;
} else {
sv = y + zr;
}
__asm__ __volatile__("" ::"r"(sv + *(u8 *)((s32)spr + 3) - 1));
i = 1;
uu = su;
vv = sv;
for (; i < 13; i += 2, poly++) {
s32 k = (i - 1) * 4;
__asm__ __volatile__("" ::"r"(i));
poly->tag.len = 9;
poly->code = code;
poly->tpage = tpage;
poly->u2 = su;
poly->v2 = sv;
poly->u0 = SR3_8018478C(vtx + k + 0x10) + uu;
poly->v0 = SR3_8018478C(vtx + k + 0x12) + vv;
poly->u1 = SR3_8018478C(vtx + i * 4 + 0x10) + uu;
poly->v1 = SR3_8018478C(vtx + i * 4 + 0x12) + vv;
/* k2 is recorded as a giv HERE, AFTER the u1/v1 mem giv. */
{
s32 k2 = (i + 1) * 4;
poly->u3 = SR3_8018478C(vtx + k2 + 0x10) + uu;
poly->v3 = SR3_8018478C(vtx + k2 + 0x12) + vv;
}
poly->clut = clut;
__asm__ __volatile__("" ::"r"(i), "r"(i));
poly->r0 = *(u8 *)((s32)ent + 0x24);
poly->g0 = *(u8 *)((s32)ent + 0x25);
poly->b0 = *(u8 *)((s32)ent + 0x26);
poly->x0 = ((u16 *)q)[i * 2];
poly->y0 = ((u16 *)q)[i * 2 + 1];
poly->x1 = ((u16 *)q)[i * 2 + 2];
poly->y1 = ((u16 *)q)[i * 2 + 3];
poly->x2 = ((u16 *)q)[0];
poly->y2 = ((u16 *)q)[1];
poly->x3 = ((u16 *)q)[i * 2 + 4];
poly->y3 = ((u16 *)q)[i * 2 + 5];
if (fl != 0) {
ADDPRIM_8018478C(&ot[*(s32 *)((s32)q + 0x34 + (i >> 1) * 4)], poly);
} else {
ADDPRIM_8018478C(ot, poly);
}
}
poly[-1].x3 = ((u16 *)q)[2];
poly[-1].y3 = ((u16 *)q)[3];
poly[-1].u3 = su + SR3_8018478C(vtx + 0x10);
poly[-1].v3 = sv + SR3_8018478C(vtx + 0x12);
if (flags & 0x40000000) {
dm = (Drm_8018478C *)poly;
if (fl != 0) {
m = 0;
D_800A5E60 += 0x30;
do {
m++;
dm->tag.len = 1;
dm->code0 = (abr << 5) | 0xE100000A;
ADDPRIM_8018478C(&ot[*(volatile s32 *)((s32)q + 0x34)], dm);
q = (u32 *)((s32)q + 4);
dm++;
} while (m < 6);
} else {
dm->code0 = (abr << 5) | 0xE100000A;
D_800A5E60 += 8;
dm->tag.len = 1;
ADDPRIM_8018478C(ot, dm);
/* Zero-byte live-range stretch: puts vtx's allocno priority
* inside the only admissible window. Placement is
* load-bearing; do not move this statement. */
__asm__ __volatile__("" ::"r"(vtx));
}
}
}
-171
View File
@@ -1,171 +0,0 @@
void func_8017F2E8(s32 param_1)
{
extern void func_801808B4(void *a0);
extern void func_8012B178(s32 a0, s32 a1);
extern s32 func_8012CBA4(s32 a0);
extern s32 func_8012B608(s32 a0, s32 a1, s32 a2);
extern s32 func_8012BEE8(s32 a0);
extern void func_8012ADE4(u8 *a0);
extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2);
extern void func_8012B23C(s32 a0);
extern s32 func_80143B6C(s32 a0, s32 a1);
extern void func_80131E00(s32 a0, s32 a1);
s32 sVar1;
s32 iVar1;
u16 state;
s32 uVar2;
s32 pad[4];
if (*(s16 *)(param_1 + 0xa) >= 0x10) {
func_801808B4((void *)param_1);
return;
}
sVar1 = func_8004787C((*(s32 *)(param_1 + 0xe4) << 6) & 0x7c0);
*(s16 *)(*(s32 *)(param_1 + 0x20) + 0x1a) = (sVar1 >> 1) + 0x800;
state = *(u16 *)(param_1 + 0x34);
switch (state) {
case 0: {
s32 iVar3 = 0x1000 - sVar1;
s32 a1;
if (iVar3 >= 0) {
a1 = -0x8000 - (iVar3 << 4);
} else {
a1 = -0x8000 - ((sVar1 - 0x1000) << 4);
}
func_8012B178(param_1, a1);
iVar1 = func_8012CBA4(param_1);
if ((iVar1 & 0xff) == 0x1a) {
goto EXIT_808B4;
}
if ((iVar1 & 0x6000) == 0) {
goto MERGE_4C0;
}
if (--*(s32 *)(param_1 + 0xe8) != 0) {
goto TAIL_5D8;
}
{
s32 iVar2;
s32 nVar;
s32 sVar2;
*(u16 *)(param_1 + 0x34) = 1;
*(s32 *)(param_1 + 0x1c) = 0x20;
iVar2 = rand();
nVar = iVar2 % 1024;
sVar2 = *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x12);
if (rand() & 1) {
uVar2 = sVar2 + nVar;
} else {
uVar2 = sVar2 - nVar;
}
}
goto MERGE_4E0;
}
case 1: {
s32 ptr0 = *(s32 *)(param_1 + 0x20);
s32 arg0 = *(s16 *)(ptr0 + 0x12);
s32 ret = func_8012B608(arg0, *(s32 *)(param_1 + 0xe0), 0x14);
s32 ptr1 = *(s32 *)(param_1 + 0x20);
s32 sum;
sum = *(u16 *)(ptr1 + 0x12) + ret;
__asm__ __volatile__("" : "=r"(sum) : "0"(sum));
ret = 0x1000 - sVar1;
*(s16 *)(ptr1 + 0x12) = sum;
if (ret < 0) {
ret = sVar1 - 0x1000;
}
ret = ret << 4;
ret = -ret;
{
s32 arg1 = ret - 0x4000;
__asm__ __volatile__("" : "=r"(arg1) : "0"(arg1));
func_8012B178(param_1, arg1);
}
iVar1 = func_8012CBA4(param_1);
if ((iVar1 & 0xff) == 0x1a) {
goto EXIT_808B4;
}
if ((iVar1 & 0x6000) != 0) {
goto MERGE_4E8;
}
}
MERGE_4C0:
func_8012ADE4((u8 *)param_1);
{
/* §17 pin: the merge-block pointer must land in $v1 so reload's
* scratch for the constant store takes $v0 (see .L8017F4C0). */
register s32 ptr2 __asm__("$3");
ptr2 = *(s32 *)(param_1 + 0x20);
*(u16 *)(param_1 + 0x34) = 2;
uVar2 = *(s16 *)(ptr2 + 0x12) + 0x800;
}
MERGE_4E0:
*(s32 *)(param_1 + 0xe0) = uVar2;
goto TAIL_5D8;
MERGE_4E8:
if (func_8012BEE8(param_1) != 0) {
*(u16 *)(param_1 + 0x34) = 0;
*(s32 *)(param_1 + 0xe8) = 0x40;
}
goto TAIL_5D8;
case 2: {
s32 ptrA = *(s32 *)(param_1 + 0x20);
s32 arg1 = *(s32 *)(param_1 + 0xe0);
s32 arg0 = *(s16 *)(ptrA + 0x12);
s32 ret = func_8012B608(arg0, arg1, 0xa);
if (ret == 0) {
*(u16 *)(param_1 + 0x34) = 0;
}
{
s32 ptrB = *(s32 *)(param_1 + 0x20);
*(s16 *)(ptrB + 0x12) = *(u16 *)(ptrB + 0x12) + ret;
}
goto TAIL_5D8;
}
case 3:
iVar1 = func_8012CBA4(param_1);
if ((iVar1 & 0xff) != 0x1a) {
goto NOT_1A;
}
EXIT_808B4:
func_801808B4((void *)param_1);
return;
NOT_1A:
if ((iVar1 & 0x2000) == 0) {
goto L8017F598;
}
func_8012B23C(param_1);
func_8012B178(param_1, 0xFFFD8000);
*(u16 *)(param_1 + 0x34) = 0;
goto TAIL_5D8;
L8017F598:
if ((*(s32 *)(param_1 + 0x1c) & 3) != 0) {
goto L8017F5B4;
}
func_80143B6C(param_1, 1);
L8017F5B4:
*(s32 *)(param_1 + 0x1c) += 1;
if (*(s32 *)(param_1 + 0x1c) < 0x3c) {
goto TAIL_5DC;
}
func_80131E00(param_1, 0xd);
}
TAIL_5D8:
TAIL_5DC:
if (func_8012BD3C(param_1, 0x400, 0x24000) == 1) {
*(s16 *)(param_1 + 2) = 3;
}
if (0x100000 < *(s32 *)(param_1 + 0x14)) {
*(s32 *)(param_1 + 0x14) = 0x100000;
}
*(s32 *)(param_1 + 0xe4) += 1;
}
-149
View File
@@ -1,149 +0,0 @@
/* func_8018893C — twin of the byte-matched func_8018BCD4 in ov_SC03_001/ov_SC03_001_jr_8017AE2C.c
* (family of 4: this fn + ov_SC04_018/func_80189214 + ov_SC04_019/func_80189214 +
* ov_SC05_017/func_80188F14; all normalize byte-identical to this shape). Only the two
* overlay-local data symbols differ (D_801BC522/D_801BC536 here vs D_801C11BA/D_801C11CE
* there). Caller in this TU (func_801880E0) already declares the matching prototype:
* extern s32 *func_8018893C(s32 *, void *, s32, void *, s32);
*/
extern s32 *func_8018893C(s32 *, void *, s32, void *, s32);
s32 *func_8018893C(out, src, idx, w, col)
s32 *out;
void *src;
s16 idx;
void *w;
s32 col;
{
extern short D_800B9A02; /* TU-visible spelling (file scope) */
extern s16 func_8014168C(s16 a0);
extern u16 D_8011511A;
extern u16 D_80115116;
extern u8 D_80115138[];
extern u8 D_80115140[];
extern u8 D_80115148[];
extern u8 D_80115158[];
extern u16 D_801BC522;
extern u16 D_801BC536;
typedef struct {
u32 *ot; /* 0x00 */
u32 pad[4]; /* 0x04..0x13 -> 0x14 stride */
} Env_8018893C;
extern Env_8018893C D_800AE7BC[];
typedef struct { u32 addr : 24; u32 len : 8; } PTag_8018893C;
/* §37 /s-DEP LATTICE: this store MUST be MEM_IN_STRUCT_P. `out[0] = k` folds `out + 0`
* away and expands as a NON-/s mem, which keeps the true_dependence edge to the incoming
* 5th-arg slot and pins `lw $v1,0x38($sp)` after it. The target has the arg load AFTER
* the out[0] store, i.e. the edge must be DROPPED — sched.c's drop clause needs the store
* /s + varying and the load non-/s + fixed-address. A COMPONENT_REF at offset 0 supplies
* the /s. */
typedef struct { u32 w; } W_8018893C;
s32 c;
s16 t;
u16 *q;
s32 m;
volatile u16 *pbh;
c = D_80115138[idx];
((W_8018893C *)out)->w = 0x04000000;
*((u8 *)out + 0xC) = 0x30;
*((u8 *)out + 0xD) = 0x48;
*(s16 *)((u8 *)out + 0xE) = 0x4056;
out[1] = col | 0x64000000;
if (c < 10) {
/* §135 idiom 9/T3: the fleet decl returns s16; cast at the CALL so the return feeds
* `sll $v0,$v0,1` with no `andi`/re-extend. */
t = ((s32 (*)(s16)) func_8014168C)(idx) * 2;
} else {
t = (D_80115148[idx * 2] - D_80115140[idx]) * 2;
}
q = (u16 *)(t * 2 + (s32)src);
pbh = (volatile u16 *)&D_800B9A02;
*(s16 *)((u8 *)out + 0x8) = q[0] - 8;
*(s16 *)((u8 *)out + 0xA) = q[1];
*(s16 *)((u8 *)out + 0x12) = 8;
*(s16 *)((u8 *)out + 0x10) = 8;
/* §36 BITFIELD STORE = THE MASK-ORDER DECOUPLER. The head materializes 0x00FFFFFF
* (lui+ori) BEFORE 0xFF000000 (lui) while the body ANDs the dest first. `volatile` on the
* index read is what keeps the SECOND *pbh load alive (a plain read cse-folds and the
* fn loses 5 ins). */
((PTag_8018893C *)out)->addr =
((PTag_8018893C *)(D_800AE7BC[*pbh].ot + 2))->addr;
((PTag_8018893C *)(D_800AE7BC[*pbh].ot + 2))->addr = (u32)out;
out += 5;
if (c < 10) {
return out;
}
m = D_8011511A;
if (m == idx) {
if ((D_80115116 & 8) != 0) {
s16 j;
s32 k;
s16 y;
s16 eight;
u16 *pb;
/* §137/§36: m24 is a 2-insn constant, but the natural allocno order puts j/k ahead
* of it and rotates $a2/$a3/$t0. Pinning m24 alone restores the whole rotation. */
register u32 m24 __asm__("$6");
u32 mhi;
s32 vsum;
j = 0;
k = m;
eight = 8;
pb = (u16 *)&D_800B9A02;
m24 = 0xFFFFFF;
mhi = 0xFF000000;
/* NOTE: the loop deliberately has NO source pointer of its own. gcc's combine_givs
* folds every `out + K` reference into ONE address giv based at out+0x12; adding a
* `u8 *p = (u8*)out + 0x12` biv makes `*(s16*)p` use the biv directly, which
* survives as a SECOND register (the +1-instruction LENGTH-DRIFT). The giv's base
* is the LAST such reference in source order — hence the +8 (`vsum`) store sits
* before the 0x10/0x12 stores here even though the scheduler sinks it back. */
for (; j < 2; j++) {
if (j == 0) {
if (D_80115140[k] == 0) {
continue;
}
*((u8 *)out + 0xD) = 0x30;
y = D_801BC522 - 2;
} else {
s32 k2 = k * 2;
if ((((s8 *)D_80115158)[k2] - ((s8 *)D_80115140)[k]) < 7) {
continue;
}
*((u8 *)out + 0xD) = 0x38;
y = D_801BC536 + 1;
}
*(s16 *)((u8 *)out + 0xA) = y;
__asm__("" ::: "memory"); /* keeps the y store ahead of the 0x64808080 pair */
*(u32 *)out = 0x04000000;
*((u8 *)out + 0xC) = 0x78;
*(u32 *)((u8 *)out + 0x4) = 0x64808080;
*(s16 *)((u8 *)out + 0xE) = 0x4056;
vsum = *(s32 *)((u8 *)w + 8) + *(s32 *)((u8 *)w + 0xC) - 0xC;
*(s16 *)((u8 *)out + 0x8) = vsum;
*(s16 *)((u8 *)out + 0x10) = eight;
*(s16 *)((u8 *)out + 0x12) = eight;
*(u32 *)out = ((*(u32 *)out) & mhi) | (D_800AE7BC[*pb].ot[2] & m24);
{
register u32 *op __asm__("$4");
op = D_800AE7BC[*pb].ot;
op[2] = (op[2] & mhi) | (((u32)out) & m24);
}
out += 5;
}
}
}
return out;
}
-54
View File
@@ -1,54 +0,0 @@
#include "common.h"
/* TU declares func_8017ED80 as void(void) (S35 self-axis) but the asm takes
* $a0 as a pointer parameter — bind through a private C name. */
extern void aF8017ED80(void *param_1) __asm__("func_8017ED80");
void aF8017ED80(void *param_1) {
u8 *a0 = (u8 *)param_1;
s32 pad_[4];
s32 iVar2;
u32 uVar1;
if (*(u16 *)(a0 + 0x0) != 0) {
iVar2 = *(s32 *)(a0 + 0xCC);
*(u16 *)(iVar2 + 0x8) = *(u16 *)(a0 + 0x6);
*(u16 *)(iVar2 + 0xA) = *(u16 *)(a0 + 0xA);
*(u16 *)(iVar2 + 0xC) = *(u16 *)(a0 + 0xE);
*(u16 *)(iVar2 + 0x10) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x10);
*(u16 *)(iVar2 + 0x12) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + *(u16 *)(a0 + 0xFC);
*(u16 *)(iVar2 + 0x14) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x14);
*(u16 *)(iVar2 + 0x18) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x18);
*(u16 *)(iVar2 + 0x1A) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x1A);
*(u16 *)(iVar2 + 0x1C) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x1C);
if (*(s32 *)(*(s32 *)(a0 + 0x20) + 0x4) < 0) {
register u32 val __asm__("$2");
val = *(u32 *)(iVar2 + 0x4);
uVar1 = val | 0x80000000;
} else {
__asm__ __volatile__("");
uVar1 = *(u32 *)(iVar2 + 0x4) & 0x7FFFFFFF;
}
*(u32 *)(iVar2 + 0x4) = uVar1;
iVar2 = *(s32 *)(a0 + 0xD0);
*(u16 *)(iVar2 + 0x8) = *(u16 *)(a0 + 0x6);
*(u16 *)(iVar2 + 0xA) = *(u16 *)(a0 + 0xA);
*(u16 *)(iVar2 + 0xC) = *(u16 *)(a0 + 0xE);
*(u16 *)(iVar2 + 0x10) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x10);
*(u16 *)(iVar2 + 0x12) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + *(u16 *)(a0 + 0xFE);
*(u16 *)(iVar2 + 0x14) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x14);
*(u16 *)(iVar2 + 0x18) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x18);
*(u16 *)(iVar2 + 0x1A) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x1A);
*(u16 *)(iVar2 + 0x1C) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x1C);
if (*(s32 *)(*(s32 *)(a0 + 0x20) + 0x4) < 0) {
register u32 val __asm__("$2");
val = *(u32 *)(iVar2 + 0x4);
uVar1 = val | 0x80000000;
} else {
__asm__ __volatile__("");
uVar1 = *(u32 *)(iVar2 + 0x4) & 0x7FFFFFFF;
}
*(u32 *)(iVar2 + 0x4) = uVar1;
}
}
-60
View File
@@ -1,60 +0,0 @@
#include "common.h"
extern s32 D_801151D4;
extern s32 rand(void);
extern s32 VectorNormalSS(void *a0, void *a1);
extern s32 func_8012C588(s32 a0, s32 a1);
extern u8 *func_8012913C();
extern void func_8017ED80(void);
void func_8017F100(s32 a0)
{
u16 nv[4];
s32 g;
s32 s0;
s32 idx;
g = D_801151D4;
if (*(u16 *)a0 != 0) {
idx = *(s32 *)(a0 + 0x1C) & 3;
switch (idx) {
case 0:
s0 = func_8012C588(0x281, a0);
if (s0 != 0) {
*(s32 *)(s0 + 0x1C) = 2;
*(s16 *)(s0 + 0x12) = (rand() & 0x1F) - 0x10;
*(s16 *)(s0 + 0x16) = -((rand() & 0xF) + 0x10);
*(s16 *)(s0 + 0x1A) = (rand() & 0x1F) - 0x10;
}
break;
case 1:
break;
case 2:
case 3:
s0 = (s32)func_8012913C(0x23);
if (s0 != 0) {
*(s16 *)(s0 + 0x6) = *(u16 *)(a0 + 0x6) + (rand() & 0x3F) - 0x20;
*(s16 *)(s0 + 0xA) = *(u16 *)(a0 + 0xA) + (rand() & 0x3F) - 0x30;
{
s32 r = rand();
s32 t = *(u16 *)(a0 + 0xE);
*(s32 *)(s0 + 0x18) = 0;
*(s32 *)(s0 + 0x14) = 0;
*(s32 *)(s0 + 0x10) = 0;
*(s16 *)(s0 + 0xE) = t + (r & 0x3F) - 0x20;
}
*(s16 *)(s0 + 0x34) = (rand() & 0x17FF) + 0x800;
nv[0] = *(s32 *)(g + 0x5C) - *(u16 *)(s0 + 0x6);
nv[1] = *(s32 *)(g + 0x60) - *(u16 *)(s0 + 0xA);
nv[2] = *(s32 *)(g + 0x64) - *(u16 *)(s0 + 0xE);
VectorNormalSS(nv, nv);
*(s16 *)(s0 + 0x6) = *(u16 *)(s0 + 0x6) + ((s16)nv[0] >> 6);
*(s16 *)(s0 + 0xA) = *(u16 *)(s0 + 0xA) + ((s16)nv[1] >> 6);
*(s16 *)(s0 + 0xE) = *(u16 *)(s0 + 0xE) + ((s16)nv[2] >> 6);
}
break;
}
((void (*)(s32))func_8017ED80)(a0);
}
}
-69
View File
@@ -1,69 +0,0 @@
#include "common.h"
extern void func_8012B370(int a0);
extern void func_8004914C(void *a0);
extern void func_800491AC(void *a0);
extern void func_8002D4C8(s32 a0, s32 a1);
extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3);
extern u8 D_800AF648;
void func_80181B20(s32 a0) {
struct {
s16 v[3]; /* sp+0x10 */
s16 pad1; /* sp+0x16 */
u16 sxy[2]; /* sp+0x18 */
s32 z; /* sp+0x1C */
s32 flag; /* sp+0x20 */
} L;
s16 hp;
s32 p;
hp = *(s16 *)(*(s32 *)(a0 + 0x20) + 0x14);
if (hp < 0x301) {
s32 count;
s32 total;
count = *(u16 *)(a0 + 0xFC);
total = *(u16 *)(a0 + 0xFE);
count = count + 1;
total = total + count;
*(u16 *)(a0 + 0xFC) = count;
*(u16 *)(a0 + 0xFE) = total;
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x14) =
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x14) + total;
} else {
p = *(s32 *)(a0 + 0xD0);
*(s16 *)(a0 + 2) = 3;
*(s32 *)(a0 + 0x1C) = 0x1E;
*(s16 *)(a0 + 0x98) = 0;
*(s16 *)(p + 2) = 3;
*(s32 *)(p + 0x1C) = 0x1E;
*(s16 *)(p + 0x98) = 0;
L.v[0] = *(s32 *)(*(s32 *)(a0 + 0x20) + 0x48);
L.v[1] = *(s32 *)(*(s32 *)(a0 + 0x20) + 0x4C);
L.v[2] = *(s32 *)(*(s32 *)(a0 + 0x20) + 0x50);
{ register void *r4 __asm__("$4"); r4 = &D_800AF648; func_8004914C(r4); }
{ register void *r4 __asm__("$4"); r4 = &D_800AF648; func_800491AC(r4); }
RotTransPers((s32)L.v, (s32)L.sxy, &L.z, &L.flag);
if (L.flag >= 0 && (u32)((L.sxy[0] + 0xEF) & 0xFFFF) < 0x1DF
&& (u32)((L.sxy[1] + 0xB3) & 0xFFFF) < 0x167) {
s32 x = (s16)L.sxy[0];
s32 ax;
ax = x;
if (x < 0) {
ax = -x;
}
ax = ((0xF0 - ax) * 0x7F) / 0xF0;
x = (x + 0xF0) / 0x1E;
if (x == 0x10) {
x = 0xF;
}
x = x << 8;
func_8002D4C8(0x961, (ax | (0x3000 | x)) & 0xFFFF);
}
}
func_8012B370(a0);
}
-222
View File
@@ -1,222 +0,0 @@
/* func_8017D8AC -- ov_SC06_015 (family of 5: also func_8017ED54/ov_SC06_014,
* func_8017D9F0/ov_SC06_013, func_801830B4/ov_SC06_016, func_80181164/ov_SC06_030 -- all
* byte-identical modulo per-overlay local static data addresses).
*
* Builds a 5-pointed symmetric star/cross set of screen coordinates around the projected
* position of the object, then emits 4 Gouraud-shaded quads (POLY_G4, len=8, code=0x3A) whose
* per-vertex colour/x/y are selected from that coordinate set via small per-overlay index
* tables, and finally adds the sprite-header primitive itself to the OT.
*/
extern s32 D_80126950;
extern s16 D_800B9A02;
extern s32 D_800A651C;
extern void RotTransSV(void *a0, void *a1, void *a2);
extern void func_8004914C(void *a0);
extern void func_800491AC(void *a0);
extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3);
extern void *func_80010A08(s32 a0);
extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3);
extern s32 func_8005A600(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4);
extern s32 AddPrim(s32 a0, void *a1);
extern u8 D_800AF648;
extern s32 D_8018F81C;
extern s32 D_8018F824[];
extern u8 D_8018F830[];
extern u8 D_8018F831[];
extern u8 D_8018F832[];
extern u8 D_8018F833[];
extern u8 D_8018F840[];
extern u8 D_8018F841[];
extern u8 D_8018F842[];
extern u8 D_8018F843[];
extern u8 D_8018F850[];
extern u8 D_8018F851[];
extern u8 D_8018F852[];
extern u8 D_8018F853[];
/* §37/§124 SELF-axis: the TU declares `extern void func_8017D8AC(void);` (called with zero
args at func_8017E51C) while the byte-true definition takes an s32. Define under a private
C name bound to the real symbol. */
extern void aF8017D8AC(s32 param_1) __asm__("func_8017D8AC");
void aF8017D8AC(s32 param_1) {
/* single raw local block; sp+0x18 .. sp+0x5B (verified via the outgoing-arg-area rounded
* to 8 for func_8005A600's 5th argument, matching the sibling family's identical frame). */
u8 buf[0x44];
/* Loop-carried locals pinned to the exact callee-saved registers the target uses --
* each is reused for TWO logical roles (early-phase / loop-phase), matching the target's
* own register reuse across the two roles (§ "don't conclude unsteerable, try register
* pins" -- these are loop/local values, never the incoming parameter, so S3 is respected). */
register s32 vVec __asm__("$17"); /* s1: RotTransSV/Pers vector ptr, then loop counter i */
register s32 vFlag __asm__("$18"); /* s2: RotTransSV/Pers flag ptr, then grid anchor */
register u8 *p0 __asm__("$16"); /* s0: D_800AF648 ptr, then prim-write pointer */
register u8 *cur __asm__("$19"); /* s3: walking AddPrim arg (s4object+0xC, +=0x24) */
register void *s4o __asm__("$20"); /* s4: func_80010A08(0x9C) result */
register s32 *ctab __asm__("$21"); /* s5: &D_8018F824 colour table */
register s32 s6 __asm__("$22"); /* s6: OT-base + zcount, the AddPrim OT arg */
s32 zcount;
s32 radius, inner;
u16 cx, cy;
s32 tpage;
{
register s32 *p __asm__("$2") =
(s32 *)(*(s32 *)(param_1 + 0x20) + 0x34);
__asm__ __volatile__(
"lw $12, 0(%0)\n"
"lw $13, 4(%0)\n"
"ctc2 $12, $0\n"
"ctc2 $13, $1\n"
"lw $12, 8(%0)\n"
"lw $13, 12(%0)\n"
"lw $14, 16(%0)\n"
"ctc2 $12, $2\n"
"ctc2 $13, $3\n"
"ctc2 $14, $4\n"
"lw $12, 20(%0)\n"
"lw $13, 24(%0)\n"
"ctc2 $12, $5\n"
"lw $14, 28(%0)\n"
"ctc2 $13, $6\n"
"ctc2 $14, $7\n"
: : "r"(p) : "$12", "$13", "$14", "memory");
}
{
/* §gcc-2.7.2-map/sched.md rule 7: a single-SET pseudo gets a "birthing boost" that
* sinks it to just before its first consumer, regardless of source order. A 2nd SET
* that survives CSE (a zero-byte re-tie) disables the boost so it schedules at its
* natural (early) priority instead. */
void *vecAddr = &D_8018F81C;
void *arg1;
__asm__ __volatile__("" : "=r"(vecAddr) : "0"(vecAddr));
vVec = (s32)(buf + 0x10);
arg1 = (void *)vVec;
__asm__ __volatile__("" : "=r"(arg1) : "0"(arg1));
vFlag = (s32)(buf + 0x38);
RotTransSV(vecAddr, arg1, (void *)vFlag);
}
p0 = &D_800AF648;
func_8004914C(p0);
func_800491AC(p0);
zcount = RotTransPers(vVec, (s32)(buf + 0x3C), (s32 *)(buf + 0x40), (s32 *)vFlag);
if (zcount <= 0) {
return;
}
if (*(s32 *)vFlag < 0) {
return;
}
zcount = zcount << 2;
radius = ((D_80126950 + 0x1F4) * 48) / zcount;
cx = *(u16 *)(buf + 0x3C);
cy = *(u16 *)(buf + 0x3E);
{
register s32 t1 __asm__("$9") =
*(s32 *)((s8 *)&D_800A651C + (u16)D_800B9A02 * 0x14);
s6 = t1 + zcount;
}
*(u16 *)(buf + 0x1C) = cx;
*(u16 *)(buf + 0x2C) = cy;
*(u16 *)(buf + 0x18) = cx - radius;
inner = (radius * 179) >> 8;
*(u16 *)(buf + 0x1A) = cx - inner;
*(u16 *)(buf + 0x1E) = cx + inner;
*(u16 *)(buf + 0x20) = cx + radius;
*(u16 *)(buf + 0x28) = cy - radius;
*(u16 *)(buf + 0x2A) = cy - inner;
*(u16 *)(buf + 0x2E) = cy + inner;
*(u16 *)(buf + 0x30) = cy + radius;
s4o = func_80010A08(0x9C);
if (s4o == 0) {
return;
}
tpage = GetTPage(0, 1, 0, 0);
func_8005A600((s32)s4o, 0, 0, (u16)tpage, 0);
{
register s32 t __asm__("$2") = (s32)((u8 *)s4o + 0xC);
cur = (u8 *)t;
ctab = D_8018F824;
vFlag = (s32)buf;
p0 = (u8 *)s4o + 0x2E;
vVec = 0;
*(s32 *)(buf + 0x04) = (s32)((u8 *)s4o + 0x30);
*(s32 *)(buf + 0x08) = (s32)((u8 *)s4o + 0x54);
*(s32 *)(buf + 0x00) = t;
*(s32 *)(buf + 0x0C) = (s32)((u8 *)s4o + 0x78);
}
for (; vVec < 0x10;) {
s32 color0, color1, color2, color3;
u16 x0, x1, x2, x3;
u16 y0, y1, y2, y3;
color0 = ctab[D_8018F850[vVec]];
*(s32 *)(p0 - 0x1E) = color0;
color1 = ctab[D_8018F851[vVec]];
*(s32 *)(p0 - 0x16) = color1;
color2 = ctab[D_8018F852[vVec]];
*(s32 *)(p0 - 0xE) = color2;
color3 = ctab[D_8018F853[vVec]];
*(u8 *)(p0 - 0x1F) = 8;
*(u8 *)(p0 - 0x1B) = 0x3A;
*(s32 *)(p0 - 0x6) = color3;
x0 = *(u16 *)(vFlag + D_8018F830[vVec] * 2 + 0x18);
*(u16 *)(p0 - 0x1A) = x0;
x1 = *(u16 *)(vFlag + D_8018F831[vVec] * 2 + 0x18);
*(u16 *)(p0 - 0x12) = x1;
x2 = *(u16 *)(vFlag + D_8018F832[vVec] * 2 + 0x18);
*(u16 *)(p0 - 0xA) = x2;
x3 = *(u16 *)(vFlag + D_8018F833[vVec] * 2 + 0x18);
*(u16 *)(p0 - 0x2) = x3;
y0 = *(u16 *)(vFlag + D_8018F840[vVec] * 2 + 0x28);
*(u16 *)(p0 - 0x18) = y0;
y1 = *(u16 *)(vFlag + D_8018F841[vVec] * 2 + 0x28);
*(u16 *)(p0 - 0x10) = y1;
{
s32 argA0;
u8 *argA1;
y2 = *(u16 *)(vFlag + D_8018F842[vVec] * 2 + 0x28);
argA0 = s6;
__asm__ __volatile__("" : "=r"(argA0) : "0"(argA0));
*(u16 *)(p0 - 0x8) = y2;
argA1 = cur;
__asm__ __volatile__("" : "=r"(argA1) : "0"(argA1));
{
u8 idx3 = D_8018F843[vVec];
cur += 0x24;
y3 = *(u16 *)(vFlag + idx3 * 2 + 0x28);
vVec += 4;
}
*(u16 *)(p0) = y3;
AddPrim(argA0, argA1);
}
p0 += 0x24;
}
AddPrim(s6, s4o);
}
-141
View File
@@ -1,141 +0,0 @@
// func_8018EDB0 — ov_SC06_032 / ov_SC06_032_jr_8017C24C
// Sibling of func_8018F060 (ov_SC06_018 / ov_SC06_018_jr_8017C24C, banked MATCH, same jr group
// "jr_8017C24C"). The .s is byte-identical in structure to the banked sibling: same prologue
// (func_8004914C/func_800491AC on ((s32*)param_1)[8]+0x34), same two 3-iteration RotTransSV loops
// (src[i].vx/vy from a per-overlay SVEC array selected by (param_2&1)*3, vz = -param_3[0] then
// -param_3[1]), same B4 spill-copy of param_4 into pkt[8] + pkt[9]=0x50000000, same DRAW() GTE
// macro (gte_ldv3/rtpt/stflg/stsxy3/ldv0/rtps/stflg/or-flags/stsxy/avsz4/stotz + OT-range guarded
// func_80017254 insert) repeated 3x with the shared D_800AF630+0x18 draw-mode calls. Only the
// per-overlay source-vector symbol differs (D_801CC7FC here vs D_801D1228 there); all other data
// symbols (D_800AF630, D_800B9A02, D_800A651C, D_800AE610) and callees are declared identically to
// the banked sibling, verbatim (S34/S36: reuse the byte-proven declaration + expression forms).
//
// DECLARATION SURFACE (whole-TU one-pass grep, D2):
// * func_8004914C(void *a0) / func_800491AC(void *a0) / RotTransSV(void*,void*,void*) are ALL
// already `extern` at this TU's file scope (lines 2637-2639) — do NOT redeclare here.
// * D_800B9A02 is `extern short D_800B9A02;` at file scope (line 2451/2453) — do NOT redeclare;
// unsigned access is forced at the USE with `*(u16 *)&D_800B9A02` (TU's own canonical spelling,
// already used at TU lines 2842/6033).
// * D_800AF630, D_800A651C, D_800AE610, func_80017254, D_801CC7FC appear nowhere else in this TU
// — declare fresh, matching the banked sibling's exact canonical shapes.
// * func_8018EDB0 has no caller anywhere in src/ (INCLUDE_ASM stub only) — signature unconstrained.
typedef struct { u16 vx, vy, vz, pad; } SVEC_8018EDB0; /* u16 source vec -> lhu */
typedef struct { s16 vx, vy, vz, pad; } SVECTOR_8018EDB0; /* 8 bytes, align 2 */
typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_8018EDB0;
typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_8018EDB0;
extern void func_80017254(void *a0);
extern SVEC_8018EDB0 D_801CC7FC[];
extern short D_800B9A02;
extern u8 D_800A651C[];
extern u8 D_800AE610[];
extern u8 D_800AF630[];
#define gte_ldv0(r0) __asm__ volatile ( \
"lwc2 $0, 0( %0 );" "lwc2 $1, 4( %0 )" : : "r"( r0 ) )
#define gte_ldv3(r0, r1, r2) __asm__ volatile ( \
"lwc2 $0, 0( %0 );" "lwc2 $1, 4( %0 );" "lwc2 $2, 0( %1 );" \
"lwc2 $3, 4( %1 );" "lwc2 $4, 0( %2 );" "lwc2 $5, 4( %2 )" \
: : "r"( r0 ), "r"( r1 ), "r"( r2 ) )
#define gte_rtps() __asm__ volatile ("nop;nop;rtps")
#define gte_rtpt() __asm__ volatile ("nop;nop;rtpt")
#define gte_stsxy(r0) __asm__ volatile ( \
"swc2 $14, 0( %0 )" : : "r"( r0 ) : "memory" )
#define gte_stsxy3(r0, r1, r2) __asm__ volatile ( \
"swc2 $12, 0( %0 );" "swc2 $13, 0( %1 );" "swc2 $14, 0( %2 )" \
: : "r"( r0 ), "r"( r1 ), "r"( r2 ) : "memory" )
#define gte_avsz4() __asm__ volatile ("nop;nop;avsz4")
#define gte_stotz(r0) __asm__ volatile ( \
"swc2 $7, 0( %0 )" : : "r"( r0 ) : "memory" )
#define gte_stflg(r0) __asm__ volatile ( \
"cfc2 $12, $31;" "nop;" "sw $12, 0( %0 )" : : "r"( r0 ) : "$12", "memory" )
#define DRAW() \
mb = (u8 *)&D_800AF630; \
__asm__("" : "=r"(mb) : "0"(mb)); \
func_8004914C(mb + 0x18); \
__asm__("" : "=r"(mb) : "0"(mb)); \
func_800491AC(mb + 0x18); \
pc = (long *)&pkt[0]; \
p1 = (long *)&pkt[2]; \
p2 = (long *)&pkt[4]; \
p3 = (long *)&pkt[6]; \
pfl = &flag1; \
p0 = pc; \
gte_ldv3(p0, p1, p2); \
gte_rtpt(); \
gte_stflg(pfl); \
__asm__ __volatile__("" :: "r"(pfl)); \
gte_stsxy3(p0, p1, p2); \
gte_ldv0(p3); \
gte_rtps(); \
gte_stflg(&flag2); \
flag1 |= flag2; \
gte_stsxy(p3); \
gte_avsz4(); \
gte_stotz(&otz); \
oz = otz; \
*(s16 *)((u8 *)pkt + 4) = (s16)oz; \
if (oz > 0 && flag1 >= 0 && \
!((u32)&D_800AE610 < (u32)(*(s32 *)((u8 *)&D_800A651C \
+ (*(u16 *)&D_800B9A02) * 0x14) + oz * 4))) { \
func_80017254(pc); \
}
void func_8018EDB0(s32 param_1, u32 param_2, u16 *param_3, u32 param_4) {
u8 dead[0x20]; /* 0x10 : reserved, never referenced (holds the frame at 0xC8) */
SVECTOR_8018EDB0 scratch; /* 0x30 */
B8_8018EDB0 out[6]; /* 0x38 */
u32 pkt[10]; /* 0x68 : v0..v3 + color(0x88) + code(0x8C) */
SVECTOR_8018EDB0 rtflag; /* 0x90 (8 bytes -> 0x94 gap) */
s32 flag1; /* 0x98 */
s32 flag2; /* 0x9C */
s32 otz; /* 0xA0 */
SVEC_8018EDB0 *src;
s32 i, oz;
long *p0, *p1, *p2, *p3, *pfl;
u8 *mb;
register long *pc __asm__("$16");
func_8004914C((void *)(((s32 *)param_1)[8] + 0x34));
func_800491AC((void *)(((s32 *)param_1)[8] + 0x34));
src = &D_801CC7FC[(param_2 & 1) * 3];
for (i = 0; i < 3; i++) {
scratch.vx = src[i].vx;
scratch.vy = src[i].vy;
scratch.vz = -param_3[0];
RotTransSV(&scratch, &out[i], &rtflag);
}
for (i = 0; i < 3; i++) {
scratch.vx = src[i].vx;
scratch.vy = src[i].vy;
scratch.vz = -param_3[1];
RotTransSV(&scratch, &out[3 + i], &rtflag);
}
*(B4_8018EDB0 *)&pkt[8] = *(B4_8018EDB0 *)&param_4;
pkt[9] = 0x50000000;
/* face 0: verts 0,1,3,4 */
*(B8_8018EDB0 *)&pkt[0] = out[0];
*(B8_8018EDB0 *)&pkt[2] = out[1];
*(B8_8018EDB0 *)&pkt[4] = out[3];
*(B8_8018EDB0 *)&pkt[6] = out[4];
DRAW();
/* face 1: verts 1,2,4,5 */
*(B8_8018EDB0 *)&pkt[0] = out[1];
*(B8_8018EDB0 *)&pkt[2] = out[2];
*(B8_8018EDB0 *)&pkt[4] = out[4];
*(B8_8018EDB0 *)&pkt[6] = out[5];
DRAW();
/* face 2: verts 2,0,5,3 */
*(B8_8018EDB0 *)&pkt[0] = out[2];
*(B8_8018EDB0 *)&pkt[2] = out[0];
*(B8_8018EDB0 *)&pkt[4] = out[5];
*(B8_8018EDB0 *)&pkt[6] = out[3];
DRAW();
}
-178
View File
@@ -1,178 +0,0 @@
[
{
"fn": "func_8018478C",
"ov": "ov_SC03_092",
"sub": "asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8017AE2C",
"tu": "src/ov_SC03_092/ov_SC03_092_jr_8017AE2C.c",
"n": 328,
"m": 7,
"ti": 2296,
"model": "sonnet",
"seed": 0
},
{
"fn": "func_80184370",
"ov": "ov_SC03_092",
"sub": "asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8017AE2C",
"tu": "src/ov_SC03_092/ov_SC03_092_jr_8017AE2C.c",
"n": 263,
"m": 7,
"ti": 1841,
"model": "sonnet",
"seed": 1
},
{
"fn": "func_8018B13C",
"ov": "ov_SC02_028",
"sub": "asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8017D898",
"tu": "src/ov_SC02_028/ov_SC02_028_jr_8017D898.c",
"n": 44,
"m": 40,
"ti": 1760,
"model": "sonnet",
"seed": 0
},
{
"fn": "func_80181914",
"ov": "ov_SC03_024",
"sub": "asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8017DF84",
"tu": "src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c",
"n": 143,
"m": 8,
"ti": 1144,
"model": "sonnet",
"seed": 0
},
{
"fn": "func_8017F2E8",
"ov": "ov_SC03_108",
"sub": "asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8017BEBC",
"tu": "src/ov_SC03_108/ov_SC03_108_jr_8017BEBC.c",
"n": 214,
"m": 4,
"ti": 856,
"model": "sonnet",
"seed": 1
},
{
"fn": "func_8017F100",
"ov": "ov_SC06_008",
"sub": "asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8017C294",
"tu": "src/ov_SC06_008/ov_SC06_008_jr_8017C294.c",
"n": 122,
"m": 7,
"ti": 854,
"model": "sonnet",
"seed": 1
},
{
"fn": "func_8017D930",
"ov": "ov_SC02_039",
"sub": "asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8017BEBC",
"tu": "src/ov_SC02_039/ov_SC02_039_jr_8017BEBC.c",
"n": 121,
"m": 7,
"ti": 847,
"model": "sonnet",
"seed": 1
},
{
"fn": "func_80184328",
"ov": "ov_SC02_035",
"sub": "asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8017BEBC",
"tu": "src/ov_SC02_035/ov_SC02_035_jr_8017BEBC.c",
"n": 44,
"m": 19,
"ti": 836,
"model": "sonnet",
"seed": 0
},
{
"fn": "func_801837B0",
"ov": "ov_SC02_041",
"sub": "asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8017BEBC",
"tu": "src/ov_SC02_041/ov_SC02_041_jr_8017BEBC.c",
"n": 206,
"m": 4,
"ti": 824,
"model": "sonnet",
"seed": 1
},
{
"fn": "func_8018B354",
"ov": "ov_SC02_028",
"sub": "asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8017D898",
"tu": "src/ov_SC02_028/ov_SC02_028_jr_8017D898.c",
"n": 41,
"m": 20,
"ti": 820,
"model": "sonnet",
"seed": 0
},
{
"fn": "func_8017ED80",
"ov": "ov_SC06_008",
"sub": "asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8017C294",
"tu": "src/ov_SC06_008/ov_SC06_008_jr_8017C294.c",
"n": 117,
"m": 7,
"ti": 819,
"model": "sonnet",
"seed": 1
},
{
"fn": "func_8018893C",
"ov": "ov_SC03_124",
"sub": "asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8017AE2C",
"tu": "src/ov_SC03_124/ov_SC03_124_jr_8017AE2C.c",
"n": 203,
"m": 4,
"ti": 812,
"model": "sonnet",
"seed": 0
},
{
"fn": "func_80181B20",
"ov": "ov_SC06_008",
"sub": "asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8017C294",
"tu": "src/ov_SC06_008/ov_SC06_008_jr_8017C294.c",
"n": 116,
"m": 7,
"ti": 812,
"model": "sonnet",
"seed": 1
},
{
"fn": "func_8017D8AC",
"ov": "ov_SC06_015",
"sub": "asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8017BEBC",
"tu": "src/ov_SC06_015/ov_SC06_015_jr_8017BEBC.c",
"n": 265,
"m": 3,
"ti": 795,
"model": "sonnet",
"seed": 0
},
{
"fn": "func_8018EDB0",
"ov": "ov_SC06_032",
"sub": "asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8017C24C",
"tu": "src/ov_SC06_032/ov_SC06_032_jr_8017C24C.c",
"n": 397,
"m": 2,
"ti": 794,
"model": "sonnet",
"seed": 0
},
{
"fn": "func_801825A4",
"ov": "ov_SC02_026",
"sub": "asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180",
"tu": "src/ov_SC02_026/ov_SC02_026_jr_8017C180.c",
"n": 129,
"m": 6,
"ti": 774,
"model": "sonnet",
"seed": 1
}
]
-152
View File
File diff suppressed because one or more lines are too long
-140
View File
@@ -1,140 +0,0 @@
#!/usr/bin/env python3
"""S3 — unblock the whale (func_80144B9C) in the 4 SC07 overlays.
The whale is matched in 134/138 overlays via the §38 shared-header route: a per-overlay `-O0` split
file (`<ov>_o0b.c`) whose entire content is `#include "../shared/func_80144B9C.h"`. gcc-2.7.2 has no
per-function optimize pragma, so the opt level is per FILE (§116) — the whale MUST live in its own
`-O0` object or it recompiles at -O2 and stops matching.
The 4 SC07 overlays never got that region: they have `_o0c` but no `_o0b`, and the whale sits in
`<ov>_jr_80140608.c` (an -O2 jr split). So this is not a codegen problem at all — it is 3,080
instructions of code that is BYTE-IDENTICAL to what is already banked elsewhere (h_exact, relocation
payloads included), blocked purely by a missing file boundary.
Per overlay: carve the range into its own -O0 region (o0_subsplit, which reuses jr_isolate_all's
proven plan/config/validation path), re-extract, prove the split alone is BYTE-NEUTRAL, then swap
the whale's INCLUDE_ASM for the shared header and prove it BANKS. Revert that overlay on any failure.
The whole-binary byte-gate is the sole arbiter (G3/P9); a full R22 follows because config changed.
Usage: s3_sc07_whale.py [--dry]
"""
import sys, os, re, subprocess, json
LO, HI = 0x80144B9C, 0x801457A4
OVS = ['ov_SC07_006', 'ov_SC07_007', 'ov_SC07_010', 'ov_SC07_011']
PY = '.venv/bin/python'
DRY = '--dry' in sys.argv
sys.path.insert(0, 'tools')
def sh(*cmd):
return subprocess.run(list(cmd), capture_output=True, text=True)
def good_sha(ov):
return open(f'config/check.{ov}.sha').read().split()[0]
def build_ok(ov):
r = sh('make', '--no-print-directory', 'build', f'BINARY={ov}')
return r.returncode == 0 and '[ OK ]' in (r.stdout or ''), (r.stdout or '') + (r.stderr or '')
def revert(ov):
sh('git', 'checkout', '--', f'src/{ov}', 'config')
sh('git', 'clean', '-fdq', f'src/{ov}')
sh('make', '--no-print-directory', 'extract', f'BINARY={ov}')
results = {}
for ov in OVS:
print(f"\n===== {ov} =====", flush=True)
import importlib, corpus
for f in (corpus.stubs, corpus.sig, corpus.symbols, corpus.src_files):
if hasattr(f, 'cache_clear'):
f.cache_clear()
if LO not in corpus.stubs(ov):
print(" whale is not a live stub here — skipping"); results[ov] = 'not-stub'; continue
r = sh(PY, 'tools/o0_subsplit.py', ov, '--lo', hex(LO), '--hi', hex(HI),
*(['--dry-run'] if DRY else []))
out = (r.stdout or '') + (r.stderr or '')
print(' [subsplit]', out.strip().splitlines()[-1][:150] if out.strip() else f'rc={r.returncode}')
if r.returncode:
results[ov] = 'subsplit-fail'; continue
if DRY:
results[ov] = 'dry'; continue
if sh('make', '--no-print-directory', 'extract', f'BINARY={ov}').returncode:
print(" extract FAILED"); revert(ov); results[ov] = 'extract-fail'; continue
# The split alone must be BYTE-NEUTRAL — it only moves code between objects.
ok, log = build_ok(ov)
if not ok:
hard = [l for l in log.splitlines() if 'undefined reference' in l or 'error' in l.lower()][:2]
print(" split is NOT byte-neutral — reverting:", *hard)
revert(ov); results[ov] = 'split-not-neutral'; continue
print(" split byte-neutral ✓")
# Find the new -O0 region file holding the whale and swap the stub for the shared header.
for f in (corpus.stubs, corpus.sig, corpus.symbols, corpus.src_files):
if hasattr(f, 'cache_clear'):
f.cache_clear()
rec = corpus.stubs(ov).get(LO)
if rec is None:
print(" whale vanished from the corpus after the split"); revert(ov); results[ov] = 'lost'; continue
tu = rec.path
txt = open(tu).read()
stub = f'INCLUDE_ASM("{rec.asm_dir}", {rec.symbol});'
if stub not in txt:
print(f" stub line not found verbatim in {tu}"); revert(ov); results[ov] = 'no-stub-line'; continue
print(f" whale now in {os.path.basename(tu)} — swapping in the shared header")
new_txt = txt.replace(stub, '#include "../shared/func_80144B9C.h"', 1)
# DROP THE AMBIENT DECLS THE HEADER ALSO DECLARES (§8b/§8d).
# In the 134 working overlays the whale sits in a CLEAN -O0 file (`common.h` + the header only),
# so the TU's own decls of D_80126B58 / D_801274CC / D_801274D0 live in OTHER TUs and never meet
# the header's. Here the region was carved out of a jr file, and jr_isolate_all hoists the
# parent's file-scope decls into every new region as its `ambient` set — so the same TU now
# declares those symbols twice, with the loose-typed spellings the fleet uses
# (`extern void *D_801274CC` vs the header's `extern s32 D_801274CC`). The header is byte-proven
# across 134 overlays, so the AMBIENT copy is the one to drop, and only in this file.
# BOTH axes: the header declares DATA (D_*) and FUNCTION (func_*) symbols, and the ambient set
# carried in by the carve can collide on either. The first pass only dropped D_*, and the three
# remaining overlays then failed on func_801336E8 / func_8005C324 (the memcpy alias) instead.
hdr_syms = set(re.findall(r'\b(?:D_|func_)[0-9A-Fa-f]{8}\b',
open('src/shared/func_80144B9C.h').read()))
kept, dropped = [], 0
for line in new_txt.split('\n'):
st = line.strip()
# STRIP A TRAILING COMMENT BEFORE THE `;` TEST. The last holdout was
# extern void func_8005C324(int,int,int) __asm__("memcpy"); /* Phase-24: ... */
# which ends with `*/`, so an endswith(';') test skipped it — the §134 shape yet again.
# Safe to drop HERE specifically: after the carve this file holds only the whale, so its
# call now emits `func_8005C324` exactly as it does in the 134 overlays where the whale
# sits in a clean -O0 file with no alias decl in scope. The parent jr file keeps its alias.
st = re.sub(r'/\*.*?\*/\s*$', '', st).strip()
st = re.sub(r'//.*$', '', st).strip()
if st.startswith('extern ') and st.endswith(';') and '{' not in st:
named = set(re.findall(r'\b(?:D_|func_)[0-9A-Fa-f]{8}\b', st))
if named and named <= hdr_syms: # every symbol on this line is header-declared
dropped += 1
continue
kept.append(line)
if dropped:
print(f" dropped {dropped} ambient extern line(s) the shared header already declares")
open(tu, 'w').write('\n'.join(kept))
ok, log = build_ok(ov)
if ok:
print(f" ✅ BANKED — {ov} byte-identical with the whale from source")
results[ov] = 'BANKED'
else:
hard = [l for l in log.splitlines()
if 'undefined reference' in l or 'conflicting' in l or 'error' in l.lower()][:2]
print(" gate refused:", *[h.strip()[:150] for h in hard])
revert(ov); results[ov] = 'gate-fail'
print("\n=== S3 SUMMARY ===")
for ov, v in results.items():
print(f" {ov:<14} {v}")
print("\nNEXT: R22 (config changed => full blast radius): make clean && make extract-all && make check-all")
@@ -1,9 +0,0 @@
extern void func_8017CFCC(void);
extern void func_800167B8(s32 a0);
s32 func_8017CDD8(s32 a0) {
func_8017CFCC();
func_800167B8(0);
*(u8 *)(a0 + 0x15) += 1;
return 0;
}
@@ -1,8 +0,0 @@
extern void func_8017CF98(void);
s32 func_8017CE7C(s32 a0) {
func_8017CF98();
*(s32 *)(a0 + 0x28) = 10;
*(u8 *)(a0 + 0x15) += 1;
return 0;
}
-26
View File
@@ -1,26 +0,0 @@
extern s32 D_80126954;
extern s32 D_8012695C;
extern s16 D_80126968;
extern s16 D_8012696A;
extern s16 D_8012696C;
extern s16 D_80126976;
extern s16 D_80126978;
extern s16 D_8012697A;
extern u8 D_80126948[];
extern void func_8012A018(s32 a0, s32 a1);
extern void func_8012A094(s32 a0);
extern void func_8017D500(void *a0);
void func_8017D468(void) {
D_80126954 = 0x12C;
D_8012695C = 0x384;
D_80126968 = 0x155;
D_8012696A = 0x800;
D_8012696C = 0;
D_80126976 = 0;
D_80126978 = 0;
D_8012697A = 0;
func_8012A018((s32)func_8017D500, 0);
func_8012A094((s32)D_80126948);
func_8017D500(D_80126948);
}
-28
View File
@@ -1,28 +0,0 @@
extern s32 func_8012C354(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, s32 a1);
extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2);
extern u8 D_80186448[];
extern s32 D_801A9DC0[];
extern s32 D_801A9DA0[];
void func_80180A4C(s32 a0) {
s32 t;
if (func_8012C354(a0, (s32)D_801A9DC0) != 0) {
*(u8 *)(a0 + 0xC0) = 1;
t = *(s32 *)(a0 + 0xC4);
*(s32 *)(a0 + 0xBC) = (s32)D_801A9DA0;
*(s32 *)(a0 + 0xC4) = t | 0x2;
func_8012A828(a0, (s32)D_80186448);
*(s16 *)(a0 + 0x2) = 1;
*(u8 *)(a0 + 0x75) = 0;
*(s16 *)(a0 + 0xFE) = 1;
func_8012C658(0x164, 0x555, a0);
func_8012C658(0x164, 0xAAA, a0);
func_8012C658(0x164, 0x1000, a0);
}
}
-22
View File
@@ -1,22 +0,0 @@
extern s32 func_8012C354(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, s32 a1);
extern u8 D_80186448[];
extern u8 D_801A9E84[];
extern u8 D_801A9DA0[];
void func_80180B0C(void *a0) {
if (func_8012C354((s32)a0, (s32)D_801A9E84) != 0) {
void *a2 = *(void **)((char *)a0 + 0x20);
*(s32 *)((char *)a2 + 0x4) |= 0x80000000;
*(u8 *)((char *)a0 + 0xC0) = 1;
*(s32 *)((char *)a0 + 0xBC) = (s32)D_801A9DA0;
*(s32 *)((char *)a0 + 0xC4) |= 0x2;
func_8012A828((s32)a0, (s32)D_80186448);
*(u16 *)((char *)a0 + 0x2) = 1;
*(u8 *)((char *)a0 + 0x75) = 0;
}
}
-17
View File
@@ -1,17 +0,0 @@
extern void func_8012CBCC(s32 a0);
extern void func_8012E688(void*, s32, s32);
void func_80180BFC(s32 a0) {
if (((s32 (*)(s32))func_8012CBCC)(a0) & 0x2000) {
s16 v = *(s16 *)(a0 + 0x70);
if (v != 0) {
*(s16 *)(a0 + 0x2) = 2;
((void (*)(void*, s32, s32))func_8012E688)((void *)a0, 0xBA2, 0);
} else {
void *p = *(void **)(a0 + 0x20);
*(s16 *)(a0 + 0x2) = 3;
*(s32 *)(p + 0x4) |= 0x80000000;
*(s32 *)(a0 + 0x1C) = 0x1E;
}
}
}
-15
View File
@@ -1,15 +0,0 @@
extern s32 func_8012BD14(s32 a0);
extern void func_80143970(void *a0);
extern void func_8012E688(void *a0, s32 a1, s32 a2);
void func_80180E24(s32 a0) {
s32 ret = func_8012BD14(a0);
if (ret <= 0x64000) {
typedef struct { s32 f0; s32 f1; } Struct;
Struct *ptr = *(Struct **)(a0 + 0x20);
*(s16 *)(a0 + 0x2) = 1;
ptr->f1 = ptr->f1 & 0x7FFFFFFF;
func_80143970((void *)a0);
func_8012E688((void *)a0, 0xBA2, 0);
}
}
-19
View File
@@ -1,19 +0,0 @@
extern s16 D_801AA252[];
extern void func_8012DFD4(u8 *a0);
void func_80181148(s32 a0) {
s32 a1 = a0;
s32 t = *(s32 *)(a1 + 0x1C) - 1;
*(s32 *)(a1 + 0x1C) = t;
if (t == 0) {
s16 idx = *(s16 *)(a1 + 0xFC);
s32 val = D_801AA252[idx * 4];
*(s16 *)(a1 + 0x12) = -*(u16 *)(a1 + 0x12);
*(s16 *)(a1 + 0x16) = -*(u16 *)(a1 + 0x16);
*(s16 *)(a1 + 0x1A) = -*(u16 *)(a1 + 0x1A);
*(s16 *)(a1 + 0x2) = 1;
*(s32 *)(a1 + 0x1C) = val;
}
func_8012DFD4((u8 *)a0);
}
-18
View File
@@ -1,18 +0,0 @@
struct B16_8018584C { s32 w[4]; };
extern struct B16_8018584C D_800A5E88;
extern struct B16_8018584C D_801CCC80;
extern s32 D_800A5E90;
extern s32 func_8004787C(s32 a0);
extern void func_80028620(s32 a0, void *a1);
void func_8018584C(void *a0) {
s32 t;
D_800A5E88 = D_801CCC80;
t = func_8004787C(*(s16 *)((s32)a0 + 0xFE));
if (t < 0) t += 0x1FF;
D_800A5E90 = (t >> 9) + 8;
*(u16 *)((s32)a0 + 0xFE) = (*(u16 *)((s32)a0 + 0xFE) + 0x71) & 0xFFF;
func_80028620(0, &D_800A5E88);
}
-22
View File
@@ -1,22 +0,0 @@
extern s16 func_80128CFC(u16 a0);
void func_8017CA34(void *a0) {
void *v1 = *(void **)(a0 + 0xDC);
s16 v0;
if (*(u8 *)(v1 + 1) == 0) {
v0 = 1;
} else {
v0 = *(s16 *)(a0 + 0x108);
if (v0 == 0) {
u16 arg = *(u16 *)(v1 + 2);
v0 = func_80128CFC(arg);
*(s16 *)(a0 + 0x108) = v0;
}
v0 = *(s16 *)(a0 + 0x108);
}
if (v0 != 0) {
*(u16 *)(a0 + 0x2) += 1;
}
}
-34
View File
@@ -1,34 +0,0 @@
extern void func_8012C1B8(void);
extern void func_8001C214(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, void *a1);
extern void func_800D20C0(void *a0, void *a1, s32 a2);
extern void func_800D23D0(void *a0);
void func_8017CAB4(s32 a0) {
s32 v0;
s32 *s0_ptr;
u16 sp[8];
s0_ptr = *(s32 **)(a0 + 0xDC);
v0 = ((s32 (*)(void))func_8012C1B8)();
*(s32 *)(a0 + 0x20) = v0;
if (v0 == 0) {
return;
}
func_8001C214(v0, s0_ptr[1]);
func_8012A828(a0, (void *)s0_ptr[2]);
*(s16 *)(a0 + 0x5C) = 0;
*(s32 *)(a0 + 0x58) = 0;
sp[0] = *(u16 *)(a0 + 0x6);
sp[1] = *(u16 *)(a0 + 0xA);
sp[2] = *(u16 *)(a0 + 0xE);
func_800D20C0(&sp[0], &sp[4], 0);
func_800D23D0(&sp[4]);
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = sp[5] + 0x800;
*(u16 *)(a0 + 0x2) += 1;
}
-16
View File
@@ -1,16 +0,0 @@
extern s32 func_80178B18(s32 param_1, s32 param_2);
void func_8017CB68(s32 a0) {
s32 ptr1 = *(s32 *)(a0 + 0xD0);
s32 ptr2 = *(s32 *)(a0 + 0xDC);
s16 val = *(u16 *)(ptr1 + 0x1A) - 0xC0;
*(s16 *)(ptr1 + 0x1A) = val;
*(s16 *)(ptr1 + 0x18) = val;
if (val < 0) {
*(s16 *)(ptr1 + 0x0) = 0;
func_80178B18(a0, *(s32 *)(ptr2 + 0xC));
*(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x2) + 1;
}
}
-20
View File
@@ -1,20 +0,0 @@
extern void func_800291A0(s32, s32);
extern int func_80178970(void);
extern void func_80178D18(void);
void func_8017CBD4(s32 a0) {
extern void func_8002955C(void);
extern s32 func_8002953C(void);
extern void func_8002AC00(s32 arg0);
u8 *p = *(u8 **)(a0 + 0xDC);
if (func_80178970() != 0) {
((void (*)(s32))func_80178D18)(a0);
func_800291A0(*p + 0x3A, 1);
func_8002955C();
if ((u32)func_8002953C() >= 0x23U) {
func_8002AC00(0x25);
}
*(u16 *)(a0 + 2) += 1;
}
}
-9
View File
@@ -1,9 +0,0 @@
void func_8017CC80(s32 a0) {
s32 rand_val = rand();
func_8017BEBC(a0, rand_val & 0xF);
if (func_80178970(a0) == 0) {
return;
}
func_80178D18(a0);
*(s16 *)(a0 + 0x2) = 1;
}
-9
View File
@@ -1,9 +0,0 @@
extern int func_80178970(void);
extern void func_80178D18(void);
void func_8017D5C4(s32 a0) {
if (func_80178970() != 0) {
((void (*)(s32))func_80178D18)(a0);
*(s16 *)(a0 + 2) = 7;
}
}
-14
View File
@@ -1,14 +0,0 @@
extern s32 func_8012BD14(s32 a0);
extern s32 func_80178BF8(); /* TU-canonical (ov_SC03_014_jr_801848E4.c L2534) */
extern void func_80172710(void);
s32 func_801859B0(void *a0)
{
if (func_8012BD14(*(s32 *)((s32)a0 + 0x64)) > 0x4000) {
return 0;
}
*(s16 *)(*(s32 *)((s32)a0 + 0x64) + 0x2) = 2;
func_80178BF8();
return (s32)func_80172710;
}

Some files were not shown because too many files have changed in this diff Show More