feat(phase-29 §8e): bank giant func_8013C414 (329, -O0) x1 — all 4 jtbl giants banked x1

Single-table carve jtbl_801D836C (27e, 4-mod-8 first-table = placement-only) into the _o0
subseg; draft spliced clean, no reconciles needed (its only blocker was the missing carve).
Whole-binary gate [ OK ] sha1 d19c9580 == check.
This commit is contained in:
Drew T
2026-07-18 02:56:25 -06:00
parent 1cb018bc00
commit c3afadc878
3 changed files with 100 additions and 12 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ ov_SC01_077_ELF := $(ov_SC01_077_OUT).elf
ov_SC01_077_MAPFILE := $(ov_SC01_077_OUT).map
ov_SC01_077_LD_SCRIPT := $(ov_SC01_077_OUT).ld
ov_SC01_077_SPLAT_YAML := config/splat.ov_SC01_077.yaml
ov_SC01_077_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_077_jr_8012ACE0.o,tail2.data.o,ov_SC01_077_jr_801380E0.o,tail3.data.o,ov_SC01_077.o,tail4.data.o,ov_SC01_077_jr_8015444C.o,tail5.data.o,ov_SC01_077_jr_80159C84.o,tail6.data.o,ov_SC01_077_jr_8015A3C8.o,tail7.data.o,ov_SC01_077_jr_8015AE2C.o,tail8.data.o,ov_SC01_077_jr_8016AB6C.o,tail9.data.o,ov_SC01_077_jr_801734BC.o,tail10.data.o,ov_SC01_077_jr_80178D40.o,tail11.data.o,ov_SC01_077_jr_8017A4AC.o,tail12.data.o,ov_SC01_077_jr_80182268.o,tail13.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
ov_SC01_077_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_077_jr_8012ACE0.o,tail2.data.o,ov_SC01_077_jr_801380E0.o,tail3.data.o,ov_SC01_077_o0.o,tail4.data.o,ov_SC01_077.o,tail5.data.o,ov_SC01_077_jr_8015444C.o,tail6.data.o,ov_SC01_077_jr_80159C84.o,tail7.data.o,ov_SC01_077_jr_8015A3C8.o,tail8.data.o,ov_SC01_077_jr_8015AE2C.o,tail9.data.o,ov_SC01_077_jr_8016AB6C.o,tail10.data.o,ov_SC01_077_jr_801734BC.o,tail11.data.o,ov_SC01_077_jr_80178D40.o,tail12.data.o,ov_SC01_077_jr_8017A4AC.o,tail13.data.o,ov_SC01_077_jr_80182268.o,tail14.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_SC01_077/ov_SC01_077.o: JTBL_PADS := 0,0,4,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38,+0x58
build/src/ov_SC01_077/ov_SC01_077_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc
build/src/ov_SC01_077/ov_SC01_077_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
+12 -10
View File
@@ -92,26 +92,28 @@ segments:
- [0xb0000, data, tail2]
- [0xb0098, .rodata, ov_SC01_077_jr_801380E0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb00fc, data, tail3]
- [0xb0214, .rodata, ov_SC01_077_o0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb0280, data, tail4]
- [0xb0708, .rodata, ov_SC01_077] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb0774, data, tail4]
- [0xb0774, data, tail5]
- [0xb07dc, .rodata, ov_SC01_077_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb0848, data, tail5]
- [0xb0848, data, tail6]
- [0xb09a4, .rodata, ov_SC01_077_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb09d8, data, tail6]
- [0xb09d8, data, tail7]
- [0xb09dc, .rodata, ov_SC01_077_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb09f8, data, tail7]
- [0xb09f8, data, tail8]
- [0xb09fc, .rodata, ov_SC01_077_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb0a18, data, tail8]
- [0xb0a18, data, tail9]
- [0xb0a70, .rodata, ov_SC01_077_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb0a90, data, tail9]
- [0xb0a90, data, tail10]
- [0xb0b10, .rodata, ov_SC01_077_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb0b24, data, tail10]
- [0xb0b24, data, tail11]
- [0xb0ccc, .rodata, ov_SC01_077_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb0e44, data, tail11]
- [0xb0e44, data, tail12]
- [0xb0ed4, .rodata, ov_SC01_077_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb0f60, data, tail12]
- [0xb0f60, data, tail13]
- [0xb1148, .rodata, ov_SC01_077_jr_80182268] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb1168, data, tail13]
- [0xb1168, data, tail14]
- [0xB29D4, bin, trailing] # final 3 bytes (EOF 0xB29D7 not word-aligned; spimdisasm drops
# a trailing partial word and a <4-byte `data` carve emits nothing,
# so use `bin` = raw .incbin, byte-exact). Word-aligned overlays omit this.
+87 -1
View File
@@ -84,7 +84,93 @@ void func_8013C360(s32 a0) {
}
}
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077_o0", func_8013C414);
// @class: struct
// @stuck: none — MATCH
#include "common.h"
typedef struct {
u8 b0;
u8 b1;
u8 b2;
u8 type;
u32 w1;
u32 w2;
} T3Reloc; /* 0xC */
void func_8013C414(s32 param_1, s32 param_2)
{
s32 base10; /* 0x00 */
s32 p; /* 0x04 */
s32 q; /* 0x08 */
s32 base4008; /* 0x0C */
s32 lo; /* 0x10 */
u32 i; /* 0x14 */
s32 unused; /* 0x18 */
s32 base8; /* 0x1C */
T3Reloc *r; /* 0x20 */
T3Reloc *s; /* 0x24 */
if (*(s32 *)(param_2 + 4) == 0) {
base10 = param_2 + 0x10;
base4008 = param_1 + 0x4008;
lo = *(s32 *)(param_2 + 0xC) + base10;
base8 = param_1 + 8;
p = base10;
for (i = 0; i < *(u32 *)(param_2 + 8); i++) {
*(s32 *)p = *(s32 *)p + base8;
if (*(s32 *)(p + 4) != 0) {
*(s32 *)(p + 4) = *(s32 *)(p + 4) + base10;
q = *(s32 *)(p + 4);
*(s32 *)q = *(s32 *)q + q;
*(s32 *)(q + 0x14) = *(s32 *)(q + 0x14) + q;
r = (T3Reloc *)*(s32 *)(q + 0x14);
*(s32 *)(q + 0x18) = *(s32 *)(q + 0x18) * 0xC + *(s32 *)(q + 0x14);
s = (T3Reloc *)*(s32 *)(q + 0x18);
while (r < s) {
switch (r->type) {
case 0x24:
case 0x2C:
case 0x34:
case 0x3C:
if ((*(u32 *)r) & 0x800000) {
(*(u32 *)r) = ((*(u32 *)r) & 0x7FFFFF) + lo;
} else {
(*(u32 *)r) = ((*(u32 *)r) & 0xFFFFFF) + base4008;
}
break;
case 0x26:
case 0x2E:
case 0x36:
case 0x3E:
if ((*(u32 *)r) & 0x800000) {
(*(u32 *)r) = ((*(u32 *)r) & 0x7FFFFF) + lo;
} else {
(*(u32 *)r) = ((*(u32 *)r) & 0xFFFFFF) + base4008;
}
break;
}
r++;
}
}
p = p + 0xC;
}
*(s32 *)(param_2 + 4) = 1;
p = param_2 + 0x10;
for (i = 0; i < *(u32 *)(param_2 + 8); i++) {
if (*(s32 *)(p + 8) == 0) {
*(s32 *)(p + 8) = *(s32 *)(*(s32 *)p);
}
p = p + 0xC;
}
} else {
p = param_2 + 0x10;
for (i = 0; i < *(u32 *)(param_2 + 8); i++) {
*(s32 *)(*(s32 *)p) = *(s32 *)(p + 8);
p = p + 0xC;
}
}
}
void func_8013C938(void) {
D_801DAAC0 = 1;