feat(phase-30 S48-0b): jtbl family func_8017A4AC — 2/3 blocked-binary siblings banked

This commit is contained in:
Drew T
2026-08-11 15:34:14 -06:00
parent f6c9867fbc
commit 374791d4be
5 changed files with 356 additions and 6 deletions
+2 -2
View File
@@ -4916,7 +4916,7 @@ ov_MAIN_012_MAPFILE := $(ov_MAIN_012_OUT).map
ov_MAIN_012_LD_SCRIPT := $(ov_MAIN_012_OUT).ld
ov_MAIN_012_SPLAT_YAML := config/splat.ov_MAIN_012.yaml
ov_MAIN_012_JTBL_INTERLEAVE := --order tail.data.o,ov_MAIN_012.o,tail2.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_MAIN_012/ov_MAIN_012.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x190
build/src/ov_MAIN_012/ov_MAIN_012.o: JTBL_PADS := 0,0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x190,+0x220
ov_MAIN_012_CHECK_SHA := config/check.ov_MAIN_012.sha
ov_MAIN_012_SYMBOLS := config/symbols.ov_MAIN_012.txt
ov_MAIN_012_SIG := .run/sig.ov_MAIN_012.jsonl
@@ -4962,7 +4962,7 @@ ov_SC03_107_MAPFILE := $(ov_SC03_107_OUT).map
ov_SC03_107_LD_SCRIPT := $(ov_SC03_107_OUT).ld
ov_SC03_107_SPLAT_YAML := config/splat.ov_SC03_107.yaml
ov_SC03_107_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_107.o,tail2.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_SC03_107/ov_SC03_107.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x190
build/src/ov_SC03_107/ov_SC03_107.o: JTBL_PADS := 0,0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x190,+0x220
ov_SC03_107_CHECK_SHA := config/check.ov_SC03_107.sha
ov_SC03_107_SYMBOLS := config/symbols.ov_SC03_107.txt
ov_SC03_107_SIG := .run/sig.ov_SC03_107.jsonl
+1 -1
View File
@@ -96,7 +96,7 @@ segments:
- [0x0, c, ov_MAIN_012] # code: starts at file 0x0 (overlays open with a prologue)
- [0x561e0, data, tail]
- [0x5ba40, .rodata, ov_MAIN_012] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x5bc5c, data, tail2]
- [0x5bcec, data, tail2]
- [0x5DB24, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0x5DB27] # EOF marker = the 0.4.dec byte length
# @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes
+1 -1
View File
@@ -96,7 +96,7 @@ segments:
- [0x0, c, ov_SC03_107] # code: starts at file 0x0 (overlays open with a prologue)
- [0x5a304, data, tail]
- [0x72258, .rodata, ov_SC03_107] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x72474, data, tail2]
- [0x72504, data, tail2]
- [0x73BE4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0x73BE7] # EOF marker = the 0.4.dec byte length
# @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes
+176 -1
View File
@@ -24847,7 +24847,182 @@ int func_8017A3D8(void)
}
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012", func_8017A4AC);
// func_8017A4AC (ov_SC01_077) — 536-ins command/bytecode interpreter, 35-case jtbl switch.
extern s16 D_80185340;
extern s32 D_80185388;
extern void func_80172310(u8*);
extern void func_80172738(void);
extern void func_80172780(void*);
extern void func_80172894(void*);
extern void func_801729B0(s32);
extern void func_80172B14(s16);
extern void func_80172C50(void*);
extern void func_80172D68(s32);
extern void func_80172E94(void);
extern void func_80172ED4(void);
extern void func_80172EFC(void);
extern void func_80172F24(void);
extern void func_80172F4C(void);
extern void func_80172F9C(void);
extern void func_80172FEC(void);
extern void func_80173174(void);
extern void func_8017329C(void);
extern void func_8017334C(void);
extern void func_801733A4(void);
extern void func_801733FC(s32, s32);
extern void func_80173460(s32, s32);
extern void func_801734BC(s32, s32);
extern void func_801736B0(s32, s32);
extern void func_801737B8(s16);
extern void func_801738DC(s16);
extern void func_80173A28(s32, s32, s32, s32, s32, s32);
extern void func_8017427C(void);
extern void func_80174438(s32);
extern void func_8017452C(void);
extern void func_80174584(void);
extern void func_801745DC(void);
extern s32 func_80174754(void);
void func_8017A4AC(void) {
extern s32 D_80126B58;
extern s16 D_80185348;
extern s32 D_80185364;
extern s32 D_8018538C;
u16 sp18[4];
u16 sp20[4];
u16 sp28[4];
u16 sp30[4];
struct S126B58 *w = &(*(struct S126B58 *)&D_80126B58);
s16 cmd;
if (D_80185340 == D_80185344) {
if (func_80174754() != 0) {
D_80185348 = 0;
} else {
D_80185348 = 1;
}
return;
}
D_80185348 = 1;
if (func_80174754() == 0) {
return;
}
cmd = D_80184F40[D_80185340];
D_80185340 = (D_80185340 + 1) & 0x1FF;
switch (cmd) {
case 0:
func_80172738();
return;
case 1:
sp18[0] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
sp18[1] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
sp18[2] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
((void (*)(u16 *))func_80172780)(sp18);
return;
case 28:
sp18[0] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
sp18[1] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
sp18[2] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
sp18[3] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
((void (*)(u16 *))func_80172894)(sp18);
return;
case 2:
{ s16 arg = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
((void (*)(s16))func_801729B0)(arg);
return; }
case 3:
{ s16 arg = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
func_80172B14(arg);
return; }
case 4:
{ s16 arg = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
{ s32 t = w->unk20->unk12 + arg;
func_80172B14(t & 0xFFF); }
return; }
case 5:
sp18[0] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
sp18[1] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
sp18[2] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
((void (*)(u16 *))func_80172C50)(sp18);
return;
case 6:
{ s16 arg = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
((void (*)(s16))func_80172D68)(arg);
return; }
case 7: func_80172E94(); return;
case 8: func_80172ED4(); return;
case 27: ((void (*)())D_8018538C)(); return;
case 9: func_80172EFC(); return;
case 10: func_80172F24(); return;
case 11: func_80173174(); return;
case 12: func_80172F4C(); return;
case 33: func_80172F9C(); return;
case 34: func_80172FEC(); return;
case 13: func_801745DC(); return;
case 14:
case 15: func_8017329C(); return;
case 16: func_8017334C(); return;
case 17: func_801733A4(); return;
case 18:
{ s16 arg = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
func_801738DC(arg);
return; }
case 19: {
s16 a, b;
s32 ea, eb;
a = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF; ea = a;
b = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF; eb = b;
func_801736B0(ea, eb);
return;
}
case 20:
{ s16 arg = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
((void (*)(s16))func_801734BC)(arg);
return; }
case 23:
sp20[0] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
sp20[1] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
sp20[2] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
{ s16 arg = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
((void (*)(s16, u16 *))func_80173460)(arg, sp20);
return; }
case 29:
sp28[0] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
sp28[1] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
sp28[2] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
{ s16 arg = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
((void (*)(s16, u16 *))func_801733FC)(arg, sp28);
return; }
case 32:
sp30[0] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
sp30[1] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
sp30[2] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
sp30[3] = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
((void (*)(u16 *))func_80172310)(sp30);
return;
case 25: func_8017452C(); return;
case 30: func_80174584(); return;
case 26: func_8017427C(); return;
case 24: func_80174438(D_80185388); return;
case 21:
((void (*)(s32, s32, s32, s32, void *, s32))func_80173A28)((*(struct S734 * *)&D_80185364)->unk0, (*(struct S734 * *)&D_80185364)->unk4, (*(struct S734 * *)&D_80185364)->unk8,
(*(struct S734 * *)&D_80185364)->unkC, (*(struct S734 * *)&D_80185364)->unk10, (*(struct S734 * *)&D_80185364)->unk18);
return;
case 22:
(*(struct S734 * *)&D_80185364)->unk1C((*(struct S734 * *)&D_80185364)->unk4, (*(struct S734 * *)&D_80185364)->unk10, (*(struct S734 * *)&D_80185364)->unk18);
return;
case 31:
{ s16 arg = D_80184F40[D_80185340]; D_80185340 = (D_80185340 + 1) & 0x1FF;
func_801737B8(arg);
return; }
}
}
DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017ad0c (src/shared) */
+176 -1
View File
@@ -24862,7 +24862,182 @@ int func_8017A3D8(void)
}
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107", func_8017A4AC);
// func_8017A4AC (ov_SC01_077) — 536-ins command/bytecode interpreter, 35-case jtbl switch.
extern s16 D_8019B998;
extern s32 D_8019B9E0;
extern void func_80172310(u8*);
extern void func_80172738(void);
extern void func_80172780(void*);
extern void func_80172894(void*);
extern void func_801729B0(s32);
extern void func_80172B14(s16);
extern void func_80172C50(void*);
extern void func_80172D68(s32);
extern void func_80172E94(void);
extern void func_80172ED4(void);
extern void func_80172EFC(void);
extern void func_80172F24(void);
extern void func_80172F4C(void);
extern void func_80172F9C(void);
extern void func_80172FEC(void);
extern void func_80173174(void);
extern void func_8017329C(void);
extern void func_8017334C(void);
extern void func_801733A4(void);
extern void func_801733FC(s32, s32);
extern void func_80173460(s32, s32);
extern void func_801734BC(s32, s32);
extern void func_801736B0(s32, s32);
extern void func_801737B8(s16);
extern void func_801738DC(s16);
extern void func_80173A28(s32, s32, s32, s32, s32, s32);
extern void func_8017427C(void);
extern void func_80174438(s32);
extern void func_8017452C(void);
extern void func_80174584(void);
extern void func_801745DC(void);
extern s32 func_80174754(void);
void func_8017A4AC(void) {
extern s32 D_80126B58;
extern s16 D_8019B9A0;
extern s32 D_8019B9BC;
extern s32 D_8019B9E4;
u16 sp18[4];
u16 sp20[4];
u16 sp28[4];
u16 sp30[4];
struct S126B58 *w = &(*(struct S126B58 *)&D_80126B58);
s16 cmd;
if (D_8019B998 == D_8019B99C) {
if (func_80174754() != 0) {
D_8019B9A0 = 0;
} else {
D_8019B9A0 = 1;
}
return;
}
D_8019B9A0 = 1;
if (func_80174754() == 0) {
return;
}
cmd = D_8019B598[D_8019B998];
D_8019B998 = (D_8019B998 + 1) & 0x1FF;
switch (cmd) {
case 0:
func_80172738();
return;
case 1:
sp18[0] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
sp18[1] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
sp18[2] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
((void (*)(u16 *))func_80172780)(sp18);
return;
case 28:
sp18[0] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
sp18[1] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
sp18[2] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
sp18[3] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
((void (*)(u16 *))func_80172894)(sp18);
return;
case 2:
{ s16 arg = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
((void (*)(s16))func_801729B0)(arg);
return; }
case 3:
{ s16 arg = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
func_80172B14(arg);
return; }
case 4:
{ s16 arg = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
{ s32 t = w->unk20->unk12 + arg;
func_80172B14(t & 0xFFF); }
return; }
case 5:
sp18[0] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
sp18[1] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
sp18[2] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
((void (*)(u16 *))func_80172C50)(sp18);
return;
case 6:
{ s16 arg = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
((void (*)(s16))func_80172D68)(arg);
return; }
case 7: func_80172E94(); return;
case 8: func_80172ED4(); return;
case 27: ((void (*)())D_8019B9E4)(); return;
case 9: func_80172EFC(); return;
case 10: func_80172F24(); return;
case 11: func_80173174(); return;
case 12: func_80172F4C(); return;
case 33: func_80172F9C(); return;
case 34: func_80172FEC(); return;
case 13: func_801745DC(); return;
case 14:
case 15: func_8017329C(); return;
case 16: func_8017334C(); return;
case 17: func_801733A4(); return;
case 18:
{ s16 arg = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
func_801738DC(arg);
return; }
case 19: {
s16 a, b;
s32 ea, eb;
a = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF; ea = a;
b = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF; eb = b;
func_801736B0(ea, eb);
return;
}
case 20:
{ s16 arg = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
((void (*)(s16))func_801734BC)(arg);
return; }
case 23:
sp20[0] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
sp20[1] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
sp20[2] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
{ s16 arg = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
((void (*)(s16, u16 *))func_80173460)(arg, sp20);
return; }
case 29:
sp28[0] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
sp28[1] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
sp28[2] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
{ s16 arg = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
((void (*)(s16, u16 *))func_801733FC)(arg, sp28);
return; }
case 32:
sp30[0] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
sp30[1] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
sp30[2] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
sp30[3] = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
((void (*)(u16 *))func_80172310)(sp30);
return;
case 25: func_8017452C(); return;
case 30: func_80174584(); return;
case 26: func_8017427C(); return;
case 24: func_80174438(D_8019B9E0); return;
case 21:
((void (*)(s32, s32, s32, s32, void *, s32))func_80173A28)((*(struct S734 * *)&D_8019B9BC)->unk0, (*(struct S734 * *)&D_8019B9BC)->unk4, (*(struct S734 * *)&D_8019B9BC)->unk8,
(*(struct S734 * *)&D_8019B9BC)->unkC, (*(struct S734 * *)&D_8019B9BC)->unk10, (*(struct S734 * *)&D_8019B9BC)->unk18);
return;
case 22:
(*(struct S734 * *)&D_8019B9BC)->unk1C((*(struct S734 * *)&D_8019B9BC)->unk4, (*(struct S734 * *)&D_8019B9BC)->unk10, (*(struct S734 * *)&D_8019B9BC)->unk18);
return;
case 31:
{ s16 arg = D_8019B598[D_8019B998]; D_8019B998 = (D_8019B998 + 1) & 0x1FF;
func_801737B8(arg);
return; }
}
}
DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017ad0c (src/shared) */