From 8fa12bc2269bed83a156e010d9496f2985028a87 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Sun, 6 Sep 2026 12:06:00 -0600 Subject: [PATCH] =?UTF-8?q?feat(phase-32):=20T4b=20hand=20pass=20=E2=80=94?= =?UTF-8?q?=20md=5FMAIN=5F007:func=5F800CF408=20(178=20ins)=20BANKED=20byt?= =?UTF-8?q?e-identical:=20the=20banked=20sibling=20func=5F800CD92C's=20spe?= =?UTF-8?q?lling=20ported=20(libgpu=20P=5FTAG=20shape,=20u32=20array=20vie?= =?UTF-8?q?w=20of=20the=20OT=20symbol=20via=20the=20fleet's=20asm-label=20?= =?UTF-8?q?alias);=20zero=20pins,=20zero=20asm=20bodies=20(S84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - func_800CF408: draft .run/P32/t4c/bank/func_800CF408.c (hand agent, agent MATCH re-verified by coordinator rtu_match in the real TU) - one build for the same-TU batch: make build BINARY=md_MAIN_007 -j8 rc 0; sha1 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c == config/check.md_MAIN_007.sha (BYTE-IDENTICAL) - src/md_MAIN_007/md_MAIN_007.c: 0 INCLUDE_ASM left --- src/md_MAIN_007/md_MAIN_007.c | 113 +++++++++++++++++++++++++++++++++- 1 file changed, 112 insertions(+), 1 deletion(-) diff --git a/src/md_MAIN_007/md_MAIN_007.c b/src/md_MAIN_007/md_MAIN_007.c index c0efd96da..5303a27c1 100644 --- a/src/md_MAIN_007/md_MAIN_007.c +++ b/src/md_MAIN_007/md_MAIN_007.c @@ -272,7 +272,118 @@ s32 func_800CF3B0(void *a0, void *a1, void *a2) { } -INCLUDE_ASM("asm/md_MAIN_007/nonmatchings/md_MAIN_007", func_800CF408); +extern u8 *D_800A5E60; +extern u32 wD_800AA60C[] __asm__("D_800AA60C"); +extern s16 D_800B9A02; + +void func_800CF408(s32 x, s32 y) { + u8 *p; + u32 m24; + + p = D_800A5E60; + x -= 0xA0; + y -= 0x78; + + *(u8 *)(p + 0x3) = 5; + *(u32 *)(p + 0x4) = 0xE1000086; + *(u8 *)(p + 0xB) = 0x64; + *(u16 *)(p + 0x12) = 0x7980; + *(u8 *)(p + 0x8) = *(u8 *)(p + 0x9) = *(u8 *)(p + 0xA) = 0x80; + *(s16 *)(p + 0xC) = x; + *(s16 *)(p + 0xE) = y; + *(u8 *)(p + 0x10) = 0x20; + *(u8 *)(p + 0x11) = 0; + *(s16 *)(p + 0x14) = 0xA0; + *(s16 *)(p + 0x16) = 0x100; + m24 = 0x00FFFFFF; + { + u32 v = (wD_800AA60C[(u16)D_800B9A02 * 0x1000] & m24) & m24; + u32 t = *(u32 *)p; + t &= 0xFF000000; + t |= v; + *(u32 *)p = t; + } + { + s32 oi = (u16)D_800B9A02 * 0x1000; + wD_800AA60C[oi] = (wD_800AA60C[oi] & 0xFF000000) | ((u32)p & m24); + } + p += 0x18; + + *(u8 *)(p + 0x3) = 5; + *(u32 *)(p + 0x4) = 0xE1000087; + *(u8 *)(p + 0xB) = 0x64; + *(u16 *)(p + 0x12) = 0x7980; + *(u8 *)(p + 0x8) = *(u8 *)(p + 0x9) = *(u8 *)(p + 0xA) = 0x80; + *(s16 *)(p + 0xC) = x + 0xA0; + *(s16 *)(p + 0xE) = y; + *(u8 *)(p + 0x10) = 0x40; + *(u8 *)(p + 0x11) = 0; + *(s16 *)(p + 0x14) = 0xA0; + *(s16 *)(p + 0x16) = 0x100; + { + u32 v = (wD_800AA60C[(u16)D_800B9A02 * 0x1000] & m24) & m24; + u32 t = *(u32 *)p; + t &= 0xFF000000; + t |= v; + *(u32 *)p = t; + } + { + s32 oi = (u16)D_800B9A02 * 0x1000; + wD_800AA60C[oi] = (wD_800AA60C[oi] & 0xFF000000) | ((u32)p & m24); + } + p += 0x18; + + *(u8 *)(p + 0x3) = 5; + *(u32 *)(p + 0x4) = 0xE1000096; + *(u8 *)(p + 0xB) = 0x64; + *(u16 *)(p + 0x12) = 0x7980; + *(u8 *)(p + 0x8) = *(u8 *)(p + 0x9) = *(u8 *)(p + 0xA) = 0x80; + *(s16 *)(p + 0xC) = x; + *(s16 *)(p + 0xE) = y + 0x100; + *(u8 *)(p + 0x10) = 0x20; + *(u8 *)(p + 0x11) = 0; + *(s16 *)(p + 0x14) = 0xA0; + *(s16 *)(p + 0x16) = 0x100; + { + u32 v = (wD_800AA60C[(u16)D_800B9A02 * 0x1000] & m24) & m24; + u32 t = *(u32 *)p; + t &= 0xFF000000; + t |= v; + *(u32 *)p = t; + } + { + s32 oi = (u16)D_800B9A02 * 0x1000; + wD_800AA60C[oi] = (wD_800AA60C[oi] & 0xFF000000) | ((u32)p & m24); + } + p += 0x18; + + *(u8 *)(p + 0x3) = 5; + *(u32 *)(p + 0x4) = 0xE1000097; + *(u8 *)(p + 0xB) = 0x64; + *(u16 *)(p + 0x12) = 0x7980; + *(u8 *)(p + 0x8) = *(u8 *)(p + 0x9) = *(u8 *)(p + 0xA) = 0x80; + *(s16 *)(p + 0xC) = x + 0xA0; + *(s16 *)(p + 0xE) = y + 0x100; + *(u8 *)(p + 0x10) = 0x40; + *(u8 *)(p + 0x11) = 0; + *(s16 *)(p + 0x14) = 0xA0; + *(s16 *)(p + 0x16) = 0x100; + { + u32 v = (wD_800AA60C[(u16)D_800B9A02 * 0x1000] & m24) & m24; + u32 t = *(u32 *)p; + t &= 0xFF000000; + t |= v; + *(u32 *)p = t; + } + { + s32 oi = (u16)D_800B9A02 * 0x1000; + wD_800AA60C[oi] = (wD_800AA60C[oi] & 0xFF000000) | ((u32)p & m24); + } + p += 0x18; + + D_800A5E60 = p; +} + /* func_800CF6D0 — md_MAIN_007 (-O2). Builds six 0x18-byte "SPRT with its own tpage" primitives * (tag / 0xE10000xx draw-mode word / rgb+code 0x64 / xy / uv+clut / wh) at the D_800A5E60 prim