From 5a3f6900bd817ef377982367f2cd6ae07ebb16a7 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Mon, 20 Jul 2026 09:37:42 -0600 Subject: [PATCH] =?UTF-8?q?feat(phase-29=20crack-wave3):=20func=5F8014032C?= =?UTF-8?q?=20jtbl=20exemplar=20banked=20=C3=971=20(=C2=A759(3)=20two-tabl?= =?UTF-8?q?e=20merged-span=20wall=20blocks=20member=20propagation)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/overlays.mk | 2 +- config/splat.ov_SC01_077.yaml | 2 +- src/ov_SC01_077/ov_SC01_077.c | 105 +++++++++++++++++++++++++++++++++- 3 files changed, 106 insertions(+), 3 deletions(-) diff --git a/config/overlays.mk b/config/overlays.mk index 18471d647..28c9e500a 100644 --- a/config/overlays.mk +++ b/config/overlays.mk @@ -22,7 +22,7 @@ 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_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_8015C32C.o,tail10.data.o,ov_SC01_077_jr_8016AB6C.o,tail11.data.o,ov_SC01_077_jr_801734BC.o,tail12.data.o,ov_SC01_077_jr_80178D40.o,tail13.data.o,ov_SC01_077_jr_8017A4AC.o,tail14.data.o,ov_SC01_077_jr_80182268.o,tail15.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.o: JTBL_PADS := 0,0,4,0,4,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38,+0x58,+0x70,+0x90 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 ov_SC01_077_CHECK_SHA := config/check.ov_SC01_077.sha diff --git a/config/splat.ov_SC01_077.yaml b/config/splat.ov_SC01_077.yaml index 74896e483..cfdc74572 100644 --- a/config/splat.ov_SC01_077.yaml +++ b/config/splat.ov_SC01_077.yaml @@ -96,7 +96,7 @@ segments: - [0xb01a4, .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, tail5] + - [0xb07ac, data, tail5] - [0xb07dc, .rodata, ov_SC01_077_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb0848, data, tail6] - [0xb09a4, .rodata, ov_SC01_077_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) diff --git a/src/ov_SC01_077/ov_SC01_077.c b/src/ov_SC01_077/ov_SC01_077.c index 5392ec514..f3ba7005b 100644 --- a/src/ov_SC01_077/ov_SC01_077.c +++ b/src/ov_SC01_077/ov_SC01_077.c @@ -2054,7 +2054,110 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { } -INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_8014032C); + + +/* indexed data arrays (overlay) */ + + +/* address-return symbols (main RAM) */ + +s32 func_8014032C(s32 param_1, s32 param_2) { + extern int (*D_80187F00[])(void); + extern int (*D_80187EF0[])(void); + extern void * D_80187C0C[]; + extern void * D_80187C3C[]; + extern void * D_80187C4C[]; + extern void * D_80187C24[]; + extern u8 D_80187BDC[]; + extern void * D_80187C64[]; + extern void * D_80187C7C[]; + extern void * D_80187C90[]; + extern u8 D_80187BE3[]; + extern u8 * D_801D95CC; + extern u8 D_801117EC[]; + extern u8 D_801117B4[]; + extern u8 D_80112BC8[]; + extern u8 D_80112B58[]; + extern u8 D_80112BA8[]; + extern u8 D_80112B90[]; + + + int cVar1; + unsigned int uVar3; + void *result; + + result = D_801117EC; + switch (((short)param_1)) { + case 0: + if (((s32(*)(s32))func_80029178)(D_80187BB8[((short)param_2)]) & 0xFF) { + result = D_80187C0C[((short)param_2)]; + } + break; + case 1: + result = D_80187C3C[((short)param_2)]; + break; + case 2: + switch ((*(s16*)&D_80115128)) { + case 0: + if (D_80187F00[((short)param_2)]() == 0) { + ((short)param_2) = 5; + } else if (D_80187EF0[((short)param_2)]() != 0) { + ((short)param_2) = 4; + } + result = D_80187C4C[((short)param_2)]; + break; + case 1: + goto case5; + case 2: + if (((s32(*)(s32))func_80029178)(D_801D95CC[((short)param_2)]) & 0xFF) { + if (((short)param_2) == 5 && (((s32(*)(s32))func_80029178)(0x1C) & 0xFF)) { + result = D_801117B4; + } else { + result = D_80187C24[((short)param_2)]; + } + } + break; + case 3: + if (((s32(*)(s32))func_80029178)(D_80187BDC[((short)param_2)]) & 0xFF) { + result = D_80187C64[((short)param_2)]; + } + break; + case 4: + result = D_80187C7C[((short)param_2)]; + break; + } + break; + case 5: + case5: + uVar3 = ((s32(*)(s32))func_800291B4)(D_80187BD0[((short)param_2)]) & 0xFF; + if (uVar3 != 0) { + result = D_80187C90[uVar3]; + } + break; + case 3: + if (((short)param_2) != 0) { + cVar1 = ((s32(*)(s32))func_800291B4)(D_80187BE3[((short)param_2)]) & 0xFF; + if (cVar1 == 0) { + result = D_80112B58; + } else { + result = D_80112BA8; + if (cVar1 == 1) { + result = D_80112B90; + } + } + } else { + result = D_80112BC8; + } + break; + case 6: + case 7: + default: + result = 0; + break; + } + return result; +} + INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80140608);