feat(decomp): parallel gate — 3 fns across 3 binaries (8 workers)

md_MAIN_025    func_800CB300
  ov_SC03_028    func_80181EBC
  ov_SC07_010    func_80180138
This commit is contained in:
Drew T
2026-09-01 16:47:10 -06:00
parent 52208ae6dd
commit 45cc5cbdf8
5 changed files with 325 additions and 5 deletions
+1 -1
View File
@@ -4950,7 +4950,7 @@ build/src/ov_SC07_010/ov_SC07_010_jr_8015A3C8.o: JTBL_PADS := 0,4 # §8e pads (
build/src/ov_SC07_010/ov_SC07_010_jr_80171B4C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC07_010/ov_SC07_010_jr_801789AC.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
build/src/ov_SC07_010/ov_SC07_010_jr_80179B74.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x90
build/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x34
build/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.o: JTBL_PADS := 0,0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x34,+0x4c
build/src/ov_SC07_010/ov_SC07_010_o0.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
ov_SC07_010_CHECK_SHA := config/check.ov_SC07_010.sha
ov_SC07_010_SYMBOLS := config/symbols.ov_SC07_010.txt
+1 -1
View File
@@ -158,7 +158,7 @@ segments:
- [0x7e6dc, .rodata, ov_SC07_010_jr_80179B74] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x7e7f8, data, tail16]
- [0x7e7fc, .rodata, ov_SC07_010_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x7e844, data, tail17]
- [0x7e85c, data, tail17]
- [0x813EC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0x813EF] # EOF marker = the 0.4.dec byte length
# @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes
+133 -1
View File
@@ -206,7 +206,139 @@ void func_800CB23C(void *a0) {
}
INCLUDE_ASM("asm/md_MAIN_025/nonmatchings/md_MAIN_025", func_800CB300);
void func_800CB300(s32 arg0) {
typedef struct { u8 b[8]; } W8;
typedef struct { s32 w[4]; } M16;
extern u8 D_800CAE0C[];
extern s16 D_800CBEA0;
extern u16 D_800B99DA;
extern s16 D_800CBEA2;
extern u8 D_800CBEB0[];
extern u8 D_80114EB0[];
extern s16 D_80126B18;
extern s16 D_80126B1A;
extern s16 D_80126B1C;
extern u8 D_80114EC8[];
extern s32 D_801151D8;
extern s32 func_80146E98(s32 a0);
extern void func_80013F3C(void *a0);
extern void func_800126C4(s32 a0, s32 a1);
extern void func_800123F0(s32 a0, s32 a1);
extern void func_80012558(s32 a0, s32 a1);
extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4);
extern void func_80162FC0(s32 *a0);
extern s32 func_80163950(s32 a0);
extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4);
extern void func_80163328(s32 a0);
extern u32 func_801633A8(s32 a0);
extern void func_80019064(void *a0);
extern void func_80013E94(void *a0, void *a1);
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern s32 func_801632E0(s32 a0);
extern s32 func_800CB7B0(s32 a0);
extern void func_800CB760(void *a0, s16 a1);
extern s32 func_8016380C(s32 a0, s32 a1);
extern void func_80146E90(s32 *a0, s16 a1);
extern void func_80147364(u16 a0, s32 a1);
extern void func_80147324(s32 arg0);
extern void func_80146CA0(void *a0);
s32 mat[8];
W8 work[3];
s32 s1;
s32 s2;
s32 s0;
s32 hv;
s32 bit;
s32 flags;
s32 st;
s1 = arg0;
s0 = *(s32 *)(s1 + 0x20);
work[0] = *(W8 *)D_800CAE0C;
s2 = (s32)&work;
if (func_80146E98(s1) != 0) {
goto L6A8;
}
func_80013F3C(&mat);
func_800126C4((s32)&mat, *(s16 *)(s0 + 0x10));
func_800123F0((s32)&mat, *(s16 *)(s0 + 0x14));
func_80012558((s32)&mat, *(s16 *)(s0 + 0x12));
*(M16 *)(s0 + 0x34) = *(M16 *)&mat[0];
*(M16 *)(s0 + 0x44) = *(M16 *)&mat[4];
*(u16 *)(s0 + 0x2C) = *(u16 *)(s0 + 0x2C) | 1;
func_80163194(s1, -(((*(s32 *)(s1 + 0x50) - 0x28) << 14) / 40), 0, 0, (s32)&mat);
func_80162FC0((s32 *)s1);
func_80163950(s1);
hv = *(u16 *)(s0 + 0x1A) + 0x200;
*(u16 *)(s0 + 0x18) = *(u16 *)(s0 + 0x1A) = hv;
if ((s16)hv > 0x2000) {
*(u16 *)(s0 + 0x1A) = 0x2000;
*(u16 *)(s0 + 0x18) = 0x2000;
}
bit = D_800B99DA & 1;
D_800CBEA0 = bit - 0x10;
D_800CBEA2 = -0x20 - bit;
func_8016345C(s1, 0x26, 0, 0x8000, s2);
func_80163328(s1);
switch (func_801633A8(s1)) {
case 1:
func_80019064(D_800CBEB0);
func_80013E94(D_80114EB0, &work[2]);
*(s32 *)&work[2] |= 0x80000000;
func_80146A6C(0x1F, (void *)s1, D_80126B18, D_80126B1A, D_80126B1C,
*(s32 *)&work[2], 0);
s0 = func_801632E0(s1);
if (s0 != 0) {
if (func_800CB7B0(s1) == 0) {
if (*(u16 *)s0 == 0x151) {
func_800CB760((void *)s1, 0x7B3);
} else {
func_800CB760((void *)s1, 0x648);
}
}
}
break;
case 4:
func_80013E94(D_80114EC8, &work[2]);
*(s32 *)&work[2] |= 0x80000000;
func_80146A6C(7, (void *)s1, D_80126B18, D_80126B1A, D_80126B1C,
*(s32 *)&work[2], 0);
goto L6A8;
case 2:
break;
}
flags = func_8016380C(s1, (s32)&work[1]);
if (flags & 0x8000) {
goto L6A8;
}
if (!(flags & 0x2000)) {
return;
}
st = work[1].b[6];
if (st == 0x19) {
if (D_801151D8 != 0) {
if (func_800CB7B0(s1) == 0) {
func_800CB760((void *)s1, 0x6DE);
}
}
goto L6A8;
}
if (st != 2) {
return;
}
func_80146A6C(0x10, (void *)s1, *(s16 *)(s1 + 6), *(s16 *)(s1 + 0xA),
*(s16 *)(s1 + 0xE), 0, 0);
func_80146E90((s32 *)s1, 0x1E);
func_80147364(4, 0x649);
func_80147324(0x441);
func_80146CA0((void *)s1);
L6A8:
func_80146CA0((void *)s1);
}
extern void func_8016634C(void *a0);
extern void func_80147364(u16 a0, s32 a1);
+141 -1
View File
@@ -4792,7 +4792,147 @@ void func_80181D4C(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80181EBC);
#include "common.h"
extern s32 func_8012DE2C(s32 a0);
extern s32 func_8012DDA4(void);
extern void func_8004914C(void *a0);
extern void func_800491AC(void *a0);
extern void RotTransSV(void *a0, void *a1, void *a2);
extern s32 func_800133E4(s16 *a0, s16 *a1);
extern u8 D_8018F9A0[];
extern u8 D_800AF648;
#define gte_SetRotMatrix(r0) __asm__ volatile ( \
"lw $12, 0( %0 );" \
"lw $13, 4( %0 );" \
"ctc2 $12, $0;" \
"ctc2 $13, $1;" \
"lw $12, 8( %0 );" \
"lw $13, 12( %0 );" \
"lw $14, 16( %0 );" \
"ctc2 $12, $2;" \
"ctc2 $13, $3;" \
"ctc2 $14, $4" \
: \
: "r"( r0 ) \
: "$12", "$13", "$14" )
#define gte_SetTransMatrix(r0) __asm__ volatile ( \
"lw $12, 20( %0 );" \
"lw $13, 24( %0 );" \
"ctc2 $12, $5;" \
"lw $14, 28( %0 );" \
"ctc2 $13, $6;" \
"ctc2 $14, $7" \
: \
: "r"( r0 ) \
: "$12", "$13", "$14" )
extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2);
extern u8 D_8018F990[];
extern u8 D_8018F998[];
extern void (*D_8018F9CC)(void *);
extern u8 D_801AE824[];
extern s32 D_801AE99C[];
extern u8 D_80126B5C;
extern s32 D_80126B64;
extern u8 D_8018F8E4[];
extern void func_8012A828(s32 a0, void *a1);
extern void func_8012B2CC(s32 a0);
extern void func_8012B1B4(s32 a0, s32 a1);
extern void func_8012B23C(s32 a0);
extern s32 func_8014CB2C(void);
extern s32 ratan2(s32 dx, s32 dy);
void func_80181EBC(s32 a0)
{
s16 sv[4];
s32 flag;
s32 type;
s32 ang;
s32 e;
register s32 pv __asm__("$3");
register s32 id __asm__("$18");
s32 r;
if (*(s32 *)(a0 + 0x94) == 4) {
func_8012DEB8(a0, (s32)D_8018F990, (s32)D_8018F998);
type = 0xA;
ang = *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) + 0x800;
e = func_8012DE2C(a0);
id = 0x1D;
if (e != 0) {
gte_SetRotMatrix(*(s32 *)(a0 + 0x20) + 0x34);
gte_SetTransMatrix(*(s32 *)(a0 + 0x20) + 0x34);
RotTransSV(D_8018F9A0, sv, &flag);
{
u8 *q = &D_800AF648;
func_8004914C(q);
__asm__ __volatile__("" : "=r"(q));
}
func_800491AC(&D_800AF648);
do {
if ((*(u16 *)(e + 0x5C) & 0x8000) && *(u16 *)(e + 0x5E) != id) {
if (func_800133E4(sv, (s16 *)(e + 4)) < 0x1E40) {
*(u16 *)(e + 0x60) = type;
*(u16 *)(e + 0x62) = ang;
*(u16 *)(e + 0x5E) = id;
*(u16 *)(e + 0x5C) |= 1;
}
}
e = func_8012DDA4();
} while (e != 0);
}
}
if (*(s16 *)(a0 + 0x98) == 0) {
volatile s32 z1;
if (*(s16 *)(a0 + 0xFE) == 0) {
register s32 w __asm__("$16");
*(s16 *)(a0 + 0xFE) += 1;
pv = *(s32 *)(a0 + 0x20);
w = *(u16 *)(pv + 0x12);
r = w & 0xFFF;
__asm__("addu %0, %1, $zero" : "=r"(w) : "r"(r));
if (r >= 0x801) {
r = ratan2(*(s16 *)(a0 + 0xE) - 0x3F0, -0x178 - *(s16 *)(a0 + 6));
} else {
r = ratan2(*(s16 *)(a0 + 0xE) - 0x390, 0x178 - *(s16 *)(a0 + 6));
}
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = (r - 0x400) & 0xFFF;
__asm__ __volatile__("");
func_8012B2CC(a0);
func_8012B1B4(a0, (s32)&D_8018F9CC);
*(s16 *)(a0 + 0x16) = -0x10;
*(u16 *)(a0 + 0xFC) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12);
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = w;
func_8012B2CC(a0);
*(s16 *)(a0 + 2) = 0x14;
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x1C) = 0x1000;
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) |= 0x10;
*(s32 *)(a0 + 0x1C) = 0x1000;
} else {
*(s16 *)(a0 + 2) = 0x16;
func_8012A828(a0, D_801AE824);
func_8012B23C(a0);
*(s16 *)(a0 + 0x16) = -0x10;
*(s32 *)(a0 + 0x10) = (*(s32 *)&D_80126B5C - *(s32 *)(a0 + 4)) >> 5;
*(s32 *)(a0 + 0x18) = (D_80126B64 - *(s32 *)(a0 + 0xC)) >> 5;
*(s32 *)(a0 + 0x58) = (s32)D_8018F8E4 | 0x40000000 | 0x20000000;
}
}
if ((func_8014CB2C() & 0x7FFFFFFF) == 2) {
func_8012A828(a0, D_801AE99C);
*(s16 *)(a0 + 2) = 0x1B;
*(s32 *)(a0 + 0x1C) = 0;
*(s16 *)(a0 + 0x12) = -*(s16 *)(a0 + 6) >> 6;
*(s16 *)(a0 + 0x16) = -0x10;
*(s16 *)(a0 + 0x1A) = (0x3C0 - *(s16 *)(a0 + 0xE)) >> 6;
*(s16 *)(a0 + 0xFC) = (-*(s16 *)(a0 + 0xA) - 0x40) / 5;
}
}
#include "common.h"
+49 -1
View File
@@ -5858,7 +5858,55 @@ void func_8017FFB4(void *a0, void *a1, SVECTOR_80182800 *a2, s32 *a3, SVECTOR_80
}
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_80180138);
extern s32 func_80029178(s32 a0);
extern s32 func_8002AE60(void);
extern s32 func_80014C54(s32 a0, s32 a1, s32 a2);
extern s32 func_800CF8B4();
extern void func_800D1724(s32 a0);
extern void func_8012B2CC(s32 a0);
void func_80180138(short *a0) {
extern void (*D_801859D0)(void *);
extern void (*D_80185ED8[])(void *);
extern void (*D_80185EFC[])(void *);
extern void (*D_80185F10[])(void *);
extern void (*D_80185F28[])(void *);
extern void (*D_80185F34[])(void *);
switch (*(s16 *)(a0 + 0x38)) {
case 0:
D_80185ED8[*(u16 *)(a0 + 1)](a0);
break;
case 1:
D_80185EFC[*(u16 *)(a0 + 1)](a0);
break;
case 2:
if (func_80029178(0x123) & 0xFF) {
if (((short (*)(void))func_8002AE60)() << 16 == 0) {
if ((func_80014C54(0, 0, 0x800) << 16 != 0) ||
(func_80014C54(0, 0, 0x40) << 16 != 0)) {
if (func_800CF8B4() != 0) {
func_800D1724((s32)&D_801859D0);
}
}
}
}
D_80185F10[*(u16 *)(a0 + 1)](a0);
break;
case 3:
D_80185F28[*(u16 *)(a0 + 1)](a0);
break;
case 4:
D_80185F34[*(u16 *)(a0 + 1)](a0);
break;
}
if ((*(u16 *)a0 != 0) && (*(s32 *)(a0 + 0x10) != 0)) {
func_8012B2CC((s32)a0);
}
}
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);