From 89d177aa3727c05fa051d6872d4a10ff7eca5d28 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Sat, 5 Sep 2026 00:10:33 -0600 Subject: [PATCH] =?UTF-8?q?feat(phase-32):=20T2c=20(2)=20=E2=80=94=208=20f?= =?UTF-8?q?ree=20banks=20in=20the=20five=20new=20modules=20(twin=20remaps,?= =?UTF-8?q?=200=20drafting=20tokens),=20every=20module=20byte-identical?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - d=0 hash twins via family_remap: md_MAIN_007 func_800CEF60 (13, <- md_MAIN_008:0x800cee8c) · md_SC03_053 func_801EF5E4 (16, <- ov_SC01_077:0x801743f0) · md_SC03_056 func_801CBB54 (11, <- ov_SC03_001:0x80184278) + func_801CBC08 (16, <- ov_SC01_077:0x801743f0) · md_SC03_054 func_801F0134 (5, <- resident:0x800cf82c) - RELOC-ONLY twins: md_MAIN_007 func_800CF02C (15, <- resident:0x800cf4d4) · md_MAIN_009 func_800CD384 (13, <- md_MAIN_003:0x800ceed0) - d=1 cousin: md_SC03_053 func_801EF560 (3, <- ov_SC03_001:0x801805ec; one constant 0x2 -> 0x10 named by the real-TU diff) - each rtu_match MATCH in its real TU, spliced in-tree, make build -j8 rc 0: md_MAIN_007 2ff702b6 · md_MAIN_009 d270f695 · md_SC03_053 c0848f30 · md_SC03_054 06bd73df · md_SC03_056 bc768a6b (R53). Oracles: twin_rescan (now covers md_*) + seed_ref --all --near (74 open: 7 d=0, 3 RELOC-ONLY, 16 NEAR-COUSIN, 48 none) --- src/md_MAIN_007/md_MAIN_007.c | 21 +++++++++++++++++++-- src/md_MAIN_009/md_MAIN_009.c | 10 +++++++++- src/md_SC03_053/md_SC03_053.c | 19 +++++++++++++++++-- src/md_SC03_054/md_SC03_054.c | 7 ++++++- src/md_SC03_056/md_SC03_056.c | 23 +++++++++++++++++++++-- 5 files changed, 72 insertions(+), 8 deletions(-) diff --git a/src/md_MAIN_007/md_MAIN_007.c b/src/md_MAIN_007/md_MAIN_007.c index 03b7fc573f..0e3eb60aa4 100644 --- a/src/md_MAIN_007/md_MAIN_007.c +++ b/src/md_MAIN_007/md_MAIN_007.c @@ -4,13 +4,30 @@ INCLUDE_ASM("asm/md_MAIN_007/nonmatchings/md_MAIN_007", func_800CEE2C); INCLUDE_ASM("asm/md_MAIN_007/nonmatchings/md_MAIN_007", func_800CEEFC); -INCLUDE_ASM("asm/md_MAIN_007/nonmatchings/md_MAIN_007", func_800CEF60); + + +void func_800CEF60(void) { + extern s32 func_800167F0(s32 a0); + extern void func_800118AC(void); + + if (func_800167F0(0) & 0xFFFF) { + func_800118AC(); + } +} + INCLUDE_ASM("asm/md_MAIN_007/nonmatchings/md_MAIN_007", func_800CEF94); INCLUDE_ASM("asm/md_MAIN_007/nonmatchings/md_MAIN_007", func_800CEFF8); -INCLUDE_ASM("asm/md_MAIN_007/nonmatchings/md_MAIN_007", func_800CF02C); + +extern u16 D_800B99E4; +extern void (*D_800D133C[])(void); + +void func_800CF02C(void) { + D_800D133C[D_800B99E4](); +} + INCLUDE_RODATA("asm/md_MAIN_007/nonmatchings/md_MAIN_007", D_800CEDF8); diff --git a/src/md_MAIN_009/md_MAIN_009.c b/src/md_MAIN_009/md_MAIN_009.c index f0e4e1a6d2..8d831f22cd 100644 --- a/src/md_MAIN_009/md_MAIN_009.c +++ b/src/md_MAIN_009/md_MAIN_009.c @@ -1,6 +1,14 @@ #include "common.h" -INCLUDE_ASM("asm/md_MAIN_009/nonmatchings/md_MAIN_009", func_800CD384); + +extern void (*D_800CDD08[])(void); + +void func_800CD384(void) { + register s32 idx __asm__("$2"); + __asm__ __volatile__("" : : "r"(idx)); + D_800CDD08[idx](); +} + INCLUDE_RODATA("asm/md_MAIN_009/nonmatchings/md_MAIN_009", D_800CD348); diff --git a/src/md_SC03_053/md_SC03_053.c b/src/md_SC03_053/md_SC03_053.c index 3e63e8697b..4f6e2e5141 100644 --- a/src/md_SC03_053/md_SC03_053.c +++ b/src/md_SC03_053/md_SC03_053.c @@ -4,13 +4,28 @@ INCLUDE_ASM("asm/md_SC03_053/nonmatchings/md_SC03_053", func_801EF46C); INCLUDE_ASM("asm/md_SC03_053/nonmatchings/md_SC03_053", func_801EF49C); -INCLUDE_ASM("asm/md_SC03_053/nonmatchings/md_SC03_053", func_801EF560); + + +void func_801EF560(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x10; /* NEAR-COUSIN constant from the real-TU diff (li v0,0x10) */ + } + INCLUDE_ASM("asm/md_SC03_053/nonmatchings/md_SC03_053", func_801EF56C); INCLUDE_ASM("asm/md_SC03_053/nonmatchings/md_SC03_053", func_801EF58C); -INCLUDE_ASM("asm/md_SC03_053/nonmatchings/md_SC03_053", func_801EF5E4); +extern s32 func_80178970(s32 *a0); +extern void func_80178D18(u8 *a0); +extern s32 func_801858CC(s32); +void func_801EF5E4(u8 * a0) +{ + if (func_80178970(a0)) { + func_80178D18((u8 *)a0); + func_801858CC((s32)a0); + } +} + INCLUDE_ASM("asm/md_SC03_053/nonmatchings/md_SC03_053", func_801EF624); diff --git a/src/md_SC03_054/md_SC03_054.c b/src/md_SC03_054/md_SC03_054.c index 907b27d7fd..dbc40cbfc4 100644 --- a/src/md_SC03_054/md_SC03_054.c +++ b/src/md_SC03_054/md_SC03_054.c @@ -14,4 +14,9 @@ INCLUDE_ASM("asm/md_SC03_054/nonmatchings/md_SC03_054", func_801F00C8); INCLUDE_ASM("asm/md_SC03_054/nonmatchings/md_SC03_054", func_801F0104); -INCLUDE_ASM("asm/md_SC03_054/nonmatchings/md_SC03_054", func_801F0134); + +extern s16 D_801F1480; +void func_801F0134(void) { + D_801F1480 = 1; +} + diff --git a/src/md_SC03_056/md_SC03_056.c b/src/md_SC03_056/md_SC03_056.c index c442166cca..4502e7451b 100644 --- a/src/md_SC03_056/md_SC03_056.c +++ b/src/md_SC03_056/md_SC03_056.c @@ -1,11 +1,30 @@ #include "common.h" -INCLUDE_ASM("asm/md_SC03_056/nonmatchings/md_SC03_056", func_801CBB54); + + + +extern void func_80178CBC(s32*, s32); + extern short D_801CC890; + void func_801CBB54(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 10; + ((void (*)(s32, s32))func_80178CBC)((int)arg0, (int)&D_801CC890); + } + INCLUDE_ASM("asm/md_SC03_056/nonmatchings/md_SC03_056", func_801CBB80); INCLUDE_ASM("asm/md_SC03_056/nonmatchings/md_SC03_056", func_801CBBDC); -INCLUDE_ASM("asm/md_SC03_056/nonmatchings/md_SC03_056", func_801CBC08); +extern s32 func_80178970(s32 *a0); +extern void func_80178D18(u8 *a0); +extern s32 func_8018151C(s32); +void func_801CBC08(u8 * a0) +{ + if (func_80178970(a0)) { + func_80178D18((u8 *)a0); + func_8018151C((s32)a0); + } +} + INCLUDE_RODATA("asm/md_SC03_056/nonmatchings/md_SC03_056", D_801CBB50);