From d42cb9448462847ea8eda6e63d2fa08c58f8a0af Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Wed, 26 Aug 2026 08:29:10 -0600 Subject: [PATCH] =?UTF-8?q?feat(decomp):=20main=20lane=20m74ab=20=E2=80=94?= =?UTF-8?q?=208=20banked?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit One clean whole-EXE rebuild verified the batch (gate_main), and main re-checked BYTE-IDENTICAL against config/check.us.sha before anything was credited. func_800112C8 func_80011998 func_80011CFC func_800120DC func_80012A60 func_80012F74 func_8001534C func_8005E188 --- src/800.c | 28 +++++++++++++++++++++++++--- src/800c3.c | 5 ++++- src/boot.c | 36 ++++++++++++++++++++++++++++++++---- 3 files changed, 61 insertions(+), 8 deletions(-) diff --git a/src/800.c b/src/800.c index 8f6e69f74..5fa850cf8 100644 --- a/src/800.c +++ b/src/800.c @@ -588,7 +588,15 @@ void func_800129CC(s16 *s0, s16 *s1) } } -INCLUDE_ASM("asm/nonmatchings/800", func_80012A60); +extern s32 func_80012AB0(s32 a0, s32 a1); + +s32 func_80012A60(s16 a0, s16 a1) { + s32 w = func_80012AB0(a0, a1); + if ((s16)w > 0x7FF) { + w = 0xFFF - w; + } + return (s16)w; +} s32 func_80012AB0(s32 arg0, s32 arg1) { return (arg0 - arg1) & 0xFFF; @@ -639,7 +647,12 @@ INCLUDE_ASM("asm/nonmatchings/800", func_80012E0C); INCLUDE_ASM("asm/nonmatchings/800", func_80012E6C); -INCLUDE_ASM("asm/nonmatchings/800", func_80012F74); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); + +s32 func_80012F74(s32 x, s32 y, s32 z, s32 w) +{ + return (s16)(x + func_80012FC8((s16)x, (s16)y, (s16)z, (s16)w)); +} INCLUDE_ASM("asm/nonmatchings/800", func_80012FC8); @@ -1900,7 +1913,16 @@ void func_80015310(void) { } } -INCLUDE_ASM("asm/nonmatchings/800", func_8001534C); +extern u8 D_800AF630[]; + +void func_8001534C(s32 idx, s32 a1, s16 x, s16 y, u8 arg4, u8 arg5) { + u8 *p; + s32 off; + + p = D_800AF630; + off = (s16)idx * 16 + 0x9DA8; + func_800153A4(p + off, a1, x, y, arg4, arg5); +} void func_800153A4(void *a0, s32 a1, s16 a2, s16 a3, u8 arg4, u8 arg5) { diff --git a/src/800c3.c b/src/800c3.c index 4807f204e..fb78a6e1a 100644 --- a/src/800c3.c +++ b/src/800c3.c @@ -723,7 +723,10 @@ INCLUDE_ASM("asm/nonmatchings/800c3", SysEnqIntRP); INCLUDE_ASM("asm/nonmatchings/800c3", SysDeqIntRP); -INCLUDE_ASM("asm/nonmatchings/800c3", func_8005E188); +void func_8005E188(s32 arg0, s32 arg1, s8 arg2) { + *(s32*)(arg0 + 0x28) = arg1; + *(u8*)(arg0 + 0x34) = arg2; +} void func_8005E194(void *arg0, u8 arg1, u32 arg2, u8 arg3) { *(u8 *)((u8 *)arg0 + 0x36) = arg1; diff --git a/src/boot.c b/src/boot.c index a4bf98a3d..f700f1c4a 100644 --- a/src/boot.c +++ b/src/boot.c @@ -471,7 +471,16 @@ void func_8001125C(void) { void func_800112A8(void) { } -INCLUDE_ASM("asm/nonmatchings/boot", func_800112C8); +extern int CdReadRequest(void *dst, void *src, int arg2, int arg3); +extern void func_80011778(void); +extern u8 D_800AE870; +extern void *loadDestPtrTable; + +void func_800112C8(void) { + if (CdReadRequest(&D_800AE870, loadDestPtrTable, 0, 0) != 0) { + func_80011778(); + } +} extern u8 D_800AF630[]; extern void func_800CEDFC(void); @@ -543,7 +552,13 @@ void func_80011928(u16 arg0) { *(u16 *)(p + 0xA3BC) = 0; } -INCLUDE_ASM("asm/nonmatchings/boot", func_80011998); +extern u8 D_800AF630[]; + +void func_80011998(void) { + register u8 *p = D_800AF630; + (*(u16 *)(p + 0xA3BA))++; + *(u16 *)(p + 0xA3BC) = 0; +} extern u8 D_800AF630[]; @@ -615,7 +630,14 @@ void func_80011C8C(u16 arg0) { *(u16 *)(p + 0xA3CE) = 0; } -INCLUDE_ASM("asm/nonmatchings/boot", func_80011CFC); +extern u8 D_800AF630[]; + +void func_80011CFC(void) { + register u8 *p = D_800AF630; + + (*(u16 *)(p + 0xA3CC))++; + *(u16 *)(p + 0xA3CE) = 0; +} extern u8 D_800AF630[]; @@ -686,6 +708,12 @@ void func_80011EB4(void) { } } -INCLUDE_ASM("asm/nonmatchings/boot", func_800120DC); +extern u16 D_80074794; +extern u16 D_80074798; + +void func_800120DC(u16 *arg0, u16 *arg1) { + *arg0 = D_80074794; + *arg1 = D_80074798; +} INCLUDE_ASM("asm/nonmatchings/boot", func_8001212C);