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

This commit is contained in:
Drew T
2026-08-11 15:48:09 -06:00
parent bda1adcd6e
commit b80ccb2012
7 changed files with 252 additions and 6 deletions
+3
View File
@@ -4916,6 +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,ov_MAIN_012_jr_80131340.o,tail3.data.o,ov_MAIN_012_jr_80135A4C.o,tail4.data.o,ov_MAIN_012_jr_80135EB0.o,tail5.data.o,ov_MAIN_012_jr_801380E0.o,tail6.data.o,ov_MAIN_012_jr_8013F350.o,tail7.data.o,ov_MAIN_012_jr_801555F4.o,tail8.data.o,ov_MAIN_012_jr_80159C84.o,tail9.data.o,ov_MAIN_012_jr_8015A3C8.o,tail10.data.o,ov_MAIN_012_jr_801789AC.o,tail11.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_MAIN_012/ov_MAIN_012.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_MAIN_012/ov_MAIN_012_jr_80131340.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_MAIN_012/ov_MAIN_012_jr_8013F350.o: JTBL_PADS := 0,0,4,0,4,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38,+0x58,+0x70,+0x90
build/src/ov_MAIN_012/ov_MAIN_012_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
@@ -4942,6 +4943,7 @@ ov_SC02_037_MAPFILE := $(ov_SC02_037_OUT).map
ov_SC02_037_LD_SCRIPT := $(ov_SC02_037_OUT).ld
ov_SC02_037_SPLAT_YAML := config/splat.ov_SC02_037.yaml
ov_SC02_037_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_037.o,tail2.data.o,ov_SC02_037_jr_80131340.o,tail3.data.o,ov_SC02_037_jr_80135A4C.o,tail4.data.o,ov_SC02_037_jr_80135EB0.o,tail5.data.o,ov_SC02_037_jr_801380E0.o,tail6.data.o,ov_SC02_037_jr_8013F350.o,tail7.data.o,ov_SC02_037_jr_801555F4.o,tail8.data.o,ov_SC02_037_jr_80159C84.o,tail9.data.o,ov_SC02_037_jr_8015A3C8.o,tail10.data.o,ov_SC02_037_jr_801789AC.o,tail11.data.o,ov_SC02_037_jr_8017AE2C.o,tail12.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_SC02_037/ov_SC02_037.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC02_037/ov_SC02_037_jr_80131340.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC02_037/ov_SC02_037_jr_8013F350.o: JTBL_PADS := 0,0,4,0,4,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38,+0x58,+0x70,+0x90
build/src/ov_SC02_037/ov_SC02_037_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
@@ -4969,6 +4971,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,ov_SC03_107_jr_80131340.o,tail3.data.o,ov_SC03_107_jr_80135A4C.o,tail4.data.o,ov_SC03_107_jr_80135EB0.o,tail5.data.o,ov_SC03_107_jr_801380E0.o,tail6.data.o,ov_SC03_107_jr_8013F350.o,tail7.data.o,ov_SC03_107_jr_801555F4.o,tail8.data.o,ov_SC03_107_jr_80159C84.o,tail9.data.o,ov_SC03_107_jr_8015A3C8.o,tail10.data.o,ov_SC03_107_jr_801789AC.o,tail11.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_SC03_107/ov_SC03_107.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC03_107/ov_SC03_107_jr_80131340.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC03_107/ov_SC03_107_jr_8013F350.o: JTBL_PADS := 0,0,4,0,4,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38,+0x58,+0x70,+0x90
build/src/ov_SC03_107/ov_SC03_107_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
+1 -1
View File
@@ -105,7 +105,7 @@ segments:
- [0x50854, c, ov_MAIN_012_jr_801789AC]
- [0x561e0, data, tail]
- [0x5abd0, .rodata, ov_MAIN_012] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x5abe4, data, tail2]
- [0x5acac, data, tail2]
- [0x5ad78, .rodata, ov_MAIN_012_jr_80131340] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x5ada0, data, tail3]
- [0x5adbc, .rodata, ov_MAIN_012_jr_80135A4C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
+1 -1
View File
@@ -106,7 +106,7 @@ segments:
- [0x52cd4, c, ov_SC02_037_jr_8017AE2C]
- [0x5ba68, data, tail]
- [0x9f0b4, .rodata, ov_SC02_037] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x9f0c8, data, tail2]
- [0x9f190, data, tail2]
- [0x9f25c, .rodata, ov_SC02_037_jr_80131340] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x9f284, data, tail3]
- [0x9f2a0, .rodata, ov_SC02_037_jr_80135A4C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
+1 -1
View File
@@ -105,7 +105,7 @@ segments:
- [0x50854, c, ov_SC03_107_jr_801789AC]
- [0x5a304, data, tail]
- [0x713e8, .rodata, ov_SC03_107] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x713fc, data, tail2]
- [0x714c4, data, tail2]
- [0x71590, .rodata, ov_SC03_107_jr_80131340] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x715b8, data, tail3]
- [0x715d4, .rodata, ov_SC03_107_jr_80135A4C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
+82 -1
View File
@@ -911,7 +911,88 @@ DEFINE_func_8012A908() /* dedup: shared engine-core @0x8012a908 (src/shared) */
DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012a988 (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012", func_8012AAAC);
extern void func_8012AAAC(void *arg0);
void func_8012AAAC(void *arg0) {
void *ptr;
s32 link;
s32 next;
s32 saved;
s32 cnt;
s32 back;
s32 head;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xBFFF);
ptr = (void *) (M2C_FIELD(arg0, s32 *, 0x90) + (M2C_FIELD(arg0, s32 *, 0x94) * 8));
if (M2C_FIELD(ptr, s16 *, 4) < 0) {
switch (M2C_FIELD(ptr, s16 *, 4)) {
case -2:
link = M2C_FIELD(arg0, s32 *, 0x9C);
if (link == 0) {
M2C_FIELD(arg0, s16 *, 0x98) = 0;
break;
}
goto pop;
case -1:
link = M2C_FIELD(arg0, s32 *, 0x9C);
if (link != 0) {
pop:
back = M2C_FIELD(arg0, s16 *, 0x9A);
M2C_FIELD(arg0, s32 *, 0x90) = link;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x94) = back;
func_8012AAAC(arg0);
break;
}
M2C_FIELD(arg0, s32 *, 0x94) = 0;
func_8012AAAC(arg0);
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x4000);
break;
case -4:
head = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s32 *, 0x94) = 0;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x90) = head;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
func_8012AAAC(arg0);
break;
case -3:
cnt = M2C_FIELD(arg0, s32 *, 0x94) + 1;
M2C_FIELD(arg0, s32 *, 0x94) = cnt;
if (M2C_FIELD(arg0, s32 *, 0x9C) != 0) {
func_8012AAAC(arg0);
break;
}
saved = M2C_FIELD(arg0, s32 *, 0x90);
next = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s32 *, 0x94) = 0;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x90) = next;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
func_8012AAAC(arg0);
M2C_FIELD(arg0, s32 *, 0x9C) = saved;
M2C_FIELD(arg0, s16 *, 0x9A) = (s16) cnt;
break;
case -50:
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) + 1;
func_8012AAAC(arg0);
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x2000);
break;
case -5:
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x400);
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) - 1;
func_8012AAAC(arg0);
break;
}
} else {
M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s32 *, 0x20) = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s16 *, 0x98) = M2C_FIELD(ptr, s16 *, 4);
}
}
+82 -1
View File
@@ -894,7 +894,88 @@ DEFINE_func_8012A908() /* dedup: shared engine-core @0x8012a908 (src/shared) */
DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012a988 (src/shared) */
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037", func_8012AAAC);
extern void func_8012AAAC(void *arg0);
void func_8012AAAC(void *arg0) {
void *ptr;
s32 link;
s32 next;
s32 saved;
s32 cnt;
s32 back;
s32 head;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xBFFF);
ptr = (void *) (M2C_FIELD(arg0, s32 *, 0x90) + (M2C_FIELD(arg0, s32 *, 0x94) * 8));
if (M2C_FIELD(ptr, s16 *, 4) < 0) {
switch (M2C_FIELD(ptr, s16 *, 4)) {
case -2:
link = M2C_FIELD(arg0, s32 *, 0x9C);
if (link == 0) {
M2C_FIELD(arg0, s16 *, 0x98) = 0;
break;
}
goto pop;
case -1:
link = M2C_FIELD(arg0, s32 *, 0x9C);
if (link != 0) {
pop:
back = M2C_FIELD(arg0, s16 *, 0x9A);
M2C_FIELD(arg0, s32 *, 0x90) = link;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x94) = back;
func_8012AAAC(arg0);
break;
}
M2C_FIELD(arg0, s32 *, 0x94) = 0;
func_8012AAAC(arg0);
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x4000);
break;
case -4:
head = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s32 *, 0x94) = 0;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x90) = head;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
func_8012AAAC(arg0);
break;
case -3:
cnt = M2C_FIELD(arg0, s32 *, 0x94) + 1;
M2C_FIELD(arg0, s32 *, 0x94) = cnt;
if (M2C_FIELD(arg0, s32 *, 0x9C) != 0) {
func_8012AAAC(arg0);
break;
}
saved = M2C_FIELD(arg0, s32 *, 0x90);
next = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s32 *, 0x94) = 0;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x90) = next;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
func_8012AAAC(arg0);
M2C_FIELD(arg0, s32 *, 0x9C) = saved;
M2C_FIELD(arg0, s16 *, 0x9A) = (s16) cnt;
break;
case -50:
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) + 1;
func_8012AAAC(arg0);
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x2000);
break;
case -5:
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x400);
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) - 1;
func_8012AAAC(arg0);
break;
}
} else {
M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s32 *, 0x20) = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s16 *, 0x98) = M2C_FIELD(ptr, s16 *, 4);
}
}
+82 -1
View File
@@ -911,7 +911,88 @@ DEFINE_func_8012A908() /* dedup: shared engine-core @0x8012a908 (src/shared) */
DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012a988 (src/shared) */
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107", func_8012AAAC);
extern void func_8012AAAC(void *arg0);
void func_8012AAAC(void *arg0) {
void *ptr;
s32 link;
s32 next;
s32 saved;
s32 cnt;
s32 back;
s32 head;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xBFFF);
ptr = (void *) (M2C_FIELD(arg0, s32 *, 0x90) + (M2C_FIELD(arg0, s32 *, 0x94) * 8));
if (M2C_FIELD(ptr, s16 *, 4) < 0) {
switch (M2C_FIELD(ptr, s16 *, 4)) {
case -2:
link = M2C_FIELD(arg0, s32 *, 0x9C);
if (link == 0) {
M2C_FIELD(arg0, s16 *, 0x98) = 0;
break;
}
goto pop;
case -1:
link = M2C_FIELD(arg0, s32 *, 0x9C);
if (link != 0) {
pop:
back = M2C_FIELD(arg0, s16 *, 0x9A);
M2C_FIELD(arg0, s32 *, 0x90) = link;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x94) = back;
func_8012AAAC(arg0);
break;
}
M2C_FIELD(arg0, s32 *, 0x94) = 0;
func_8012AAAC(arg0);
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x4000);
break;
case -4:
head = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s32 *, 0x94) = 0;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x90) = head;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
func_8012AAAC(arg0);
break;
case -3:
cnt = M2C_FIELD(arg0, s32 *, 0x94) + 1;
M2C_FIELD(arg0, s32 *, 0x94) = cnt;
if (M2C_FIELD(arg0, s32 *, 0x9C) != 0) {
func_8012AAAC(arg0);
break;
}
saved = M2C_FIELD(arg0, s32 *, 0x90);
next = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s32 *, 0x94) = 0;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x90) = next;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
func_8012AAAC(arg0);
M2C_FIELD(arg0, s32 *, 0x9C) = saved;
M2C_FIELD(arg0, s16 *, 0x9A) = (s16) cnt;
break;
case -50:
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) + 1;
func_8012AAAC(arg0);
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x2000);
break;
case -5:
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x400);
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) - 1;
func_8012AAAC(arg0);
break;
}
} else {
M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s32 *, 0x20) = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s16 *, 0x98) = M2C_FIELD(ptr, s16 *, 4);
}
}