feat(decomp): main lane m74a — 9 banked

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.

  CloseEvent
  WaitEvent
  func_80010ED4
  func_80011778
  func_80011A3C
  func_80011ADC
  func_80012D0C
  func_80013028
  func_80041448
This commit is contained in:
Drew T
2026-08-26 08:09:49 -06:00
parent 24c94e82b9
commit 2cdbda9268
4 changed files with 145 additions and 9 deletions
+33 -2
View File
@@ -604,7 +604,22 @@ INCLUDE_ASM("asm/nonmatchings/800", func_80012C6C);
INCLUDE_ASM("asm/nonmatchings/800", func_80012CB8);
INCLUDE_ASM("asm/nonmatchings/800", func_80012D0C);
s16 func_80012D0C(s32 x0, s32 x1, s32 d, s16 *ctr)
{
s32 diff;
s32 q;
diff = x1 - x0;
if (*ctr == 0 || (s16)d == 0)
return (s16)diff;
q = (s16)((s16)diff / (s16)d);
if (q != 0)
return q;
*ctr = *ctr - 1;
return func_80012D0C((s16)x0, (s16)x1,
((s16)d + (s32)(((u32)d << 16) >> 31)) >> 1,
ctr);
}
INCLUDE_ASM("asm/nonmatchings/800", func_80012DBC);
@@ -616,7 +631,23 @@ INCLUDE_ASM("asm/nonmatchings/800", func_80012F74);
INCLUDE_ASM("asm/nonmatchings/800", func_80012FC8);
INCLUDE_ASM("asm/nonmatchings/800", func_80013028);
s32 func_80013028(s32 x, s32 y, s16 n, s16 d, s16 *p) {
s32 r;
y -= x;
if (*p == 0 || n == 0) {
r = (s16)y;
} else {
r = (s16)((s16)y * d / n);
if (r == 0) {
r = -1;
if ((s16)y > 0) {
r = 1;
}
}
}
return r;
}
INCLUDE_ASM("asm/nonmatchings/800", func_800130D0);
+25 -2
View File
@@ -27,9 +27,32 @@ INCLUDE_ASM("asm/nonmatchings/800c3", DeliverEvent);
INCLUDE_ASM("asm/nonmatchings/800c3", OpenEvent);
INCLUDE_ASM("asm/nonmatchings/800c3", CloseEvent);
__asm__(".text\n.align 2\n.globl CloseEvent\n.ent\tCloseEvent\n"
"CloseEvent:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"addiu $t2, $zero, 0xB0\n"
"jr $t2\n"
"addiu $t1, $zero, 0x9\n"
"nop\n"
".set\treorder\n.end\tCloseEvent\n");
INCLUDE_ASM("asm/nonmatchings/800c3", WaitEvent);
__asm__(
".text\n"
".align 2\n"
".globl WaitEvent\n"
".ent\tWaitEvent\n"
"WaitEvent:\n"
".frame $sp, 0, $31\n"
".mask 0x00000000, 0\n"
".fmask 0x00000000, 0\n"
".set\tnoreorder\n"
"addiu $t2, $0, 176\n"
"jr $t2\n"
"addiu $t1, $0, 10\n"
".set\treorder\n"
".end\tWaitEvent\n"
"nop\n"
);
INCLUDE_ASM("asm/nonmatchings/800c3", TestEvent);
+70 -4
View File
@@ -303,7 +303,31 @@ void func_80010E7C(void) {
*(u16 *)(p + 0xA3D4) = 1;
}
INCLUDE_ASM("asm/nonmatchings/boot", func_80010ED4);
extern s32 D_800C7C60;
extern void *D_800C7C64;
extern u8 D_800A2E20[];
extern u8 D_800AE848[];
extern void *loadDestPtrTable;
extern int CdReadRequest(void *dst, void *src, int arg2, int arg3);
extern void func_8002D4C8(s32, s32);
extern void func_80010AE0(int);
extern void func_80014338(void);
extern void func_800116E0(void);
extern void func_80011778(void);
extern s16 D_800B99DA;
void func_80010ED4(void) {
D_800C7C60 = 0x57;
D_800C7C64 = D_800A2E20;
if (CdReadRequest(D_800AE848, loadDestPtrTable, 0, &D_800C7C60) != 0) {
func_8002D4C8(2, 0);
func_80010AE0(0x3E0);
func_80014338();
func_800116E0();
D_800B99DA = 0;
func_80011778();
}
}
extern void func_800CEEC8(void);
@@ -433,7 +457,20 @@ void func_80011680(void) {
INCLUDE_ASM("asm/nonmatchings/boot", func_800116E0);
INCLUDE_ASM("asm/nonmatchings/boot", func_80011778);
extern u8 D_800AF630[];
void func_80011778(void) {
register u8 *p = D_800AF630;
(*(u16 *)(p + 0xA3AE))++;
*(u16 *)(p + 0xA3B4) = 0;
*(u16 *)(p + 0xA3BA) = 0;
*(u16 *)(p + 0xA3B8) = 0;
*(u16 *)(p + 0xA3BE) = 0;
*(u16 *)(p + 0xA3B0) = 0;
*(u16 *)(p + 0xA3B6) = 0;
*(u16 *)(p + 0xA3BC) = 0;
}
INCLUDE_ASM("asm/nonmatchings/boot", func_80011818);
@@ -465,9 +502,38 @@ INCLUDE_ASM("asm/nonmatchings/boot", func_80011998);
INCLUDE_ASM("asm/nonmatchings/boot", func_800119F0);
INCLUDE_ASM("asm/nonmatchings/boot", func_80011A3C);
extern u8 D_800AF630[];
INCLUDE_ASM("asm/nonmatchings/boot", func_80011ADC);
void func_80011A3C(void) {
register u8 *p = D_800AF630;
register u16 x;
x = *(u16 *)(p + 0xA3C0);
x = x + 1;
*(u16 *)(p + 0xA3C0) = x;
*(u16 *)(p + 0xA3C6) = 0;
*(u16 *)(p + 0xA3CC) = 0;
*(u16 *)(p + 0xA3CA) = 0;
*(u16 *)(p + 0xA3D0) = 0;
*(u16 *)(p + 0xA3C2) = 0;
*(u16 *)(p + 0xA3C8) = 0;
*(u16 *)(p + 0xA3CE) = 0;
}
extern u8 D_800AF630[];
void func_80011ADC(void) {
register u8 *p = D_800AF630;
--*(u16 *)(p + 0xA3C0);
*(u16 *)(p + 0xA3C6) = 0;
*(u16 *)(p + 0xA3CC) = 0;
*(u16 *)(p + 0xA3CA) = 0;
*(u16 *)(p + 0xA3D0) = 0;
*(u16 *)(p + 0xA3C2) = 0;
*(u16 *)(p + 0xA3C8) = 0;
*(u16 *)(p + 0xA3CE) = 0;
}
INCLUDE_ASM("asm/nonmatchings/boot", func_80011B7C);
+17 -1
View File
@@ -349,4 +349,20 @@ s32 func_80041400(s32 param_1)
return *(s16 *)(base + 0x5A);
}
INCLUDE_ASM("asm/nonmatchings/sgap_8", func_80041448);
extern u8 D_800AE614;
extern s16 D_80079596[][26];
extern u16 D_800B9B3A;
extern void func_80040868(s32);
void func_80041448(s16 param_1)
{
u8 i;
for (i = 0; i < D_800AE614; i++) {
if (D_80079596[i][0] == param_1) {
D_800B9B3A = i;
func_80040868(0);
}
}
}