feat(decomp): main lane m74 — 3 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.

  DisableEvent
  func_80011EB4
  func_8002F80C
This commit is contained in:
Drew T
2026-08-26 08:22:33 -06:00
parent e256a8daf0
commit b82a070c49
3 changed files with 158 additions and 3 deletions
+109 -1
View File
@@ -16258,7 +16258,115 @@ void func_8002F714(s32 a0, s32 a1) {
}
}
INCLUDE_ASM("asm/nonmatchings/800", func_8002F80C);
extern u8 D_8006A96E;
extern s16 D_8006A96C;
extern u8 D_800760D0;
extern u8 D_800760D4;
extern u8 D_800760D8;
extern u8 D_800760DC;
extern s8 D_800A4F17;
extern u8 D_800A4F18;
extern s16 D_800A4EFC;
extern void (*D_800A4F24)(void);
extern void func_8002DC68(s32 a0, s32 a1);
extern void func_8002E138(s32 a0, s32 a1, s32 a2);
extern void func_80030F80(void);
extern void func_8002D320(void);
extern void func_80031BE0(void);
void func_8002F80C(void) {
u8 flag;
s16 max;
u8 a0;
u8 v0;
flag = 0;
max = 0;
if ((D_8006A96E & 1) != 0) {
flag = 1;
max = D_800760D0;
}
if ((D_8006A96E & 2) != 0) {
flag = 1;
if (max < D_800760D4) {
max = D_800760D4;
}
}
if ((D_8006A96E & 4) != 0) {
flag = 1;
if (max < D_800760D8) {
max = D_800760D8;
}
}
if ((D_8006A96E & 8) != 0) {
flag = 1;
if (max < D_800760DC) {
max = D_800760DC;
}
}
a0 = D_8006A96E;
D_8006A96E = a0 & 0xF0;
if (flag != 0) {
D_8006A96C = 0x10;
if (max != 0) {
func_8002DC68(0xBEB, max | 0x1000);
D_8006A96E |= 0x10;
return;
}
if ((a0 & 0x10) == 0) {
return;
}
D_800A4F17 = 1;
func_8002E138(4, 0xBEB, 0);
v0 = D_800A4F18;
D_800A4F17 = v0;
if (v0 != 0) {
s16 c = D_800A4EFC;
if (c != 0) {
D_800A4EFC = c - 1;
}
func_80030F80();
func_8002D320();
func_80031BE0();
D_800A4F18 = 0;
D_800A4F17 = 0;
}
} else {
s16 t = D_8006A96C;
if (t == 0) {
return;
}
t = t - 1;
D_8006A96C = t;
if (t != 0) {
return;
}
if ((a0 & 0x10) == 0) {
return;
}
D_800A4F17 = 1;
func_8002E138(4, 0xBEB, 0);
v0 = D_800A4F18;
D_800A4F17 = v0;
if (v0 != 0) {
s16 c = D_800A4EFC;
if (c != 0) {
D_800A4EFC = c - 1;
}
func_80030F80();
func_8002D320();
func_80031BE0();
D_800A4F18 = 0;
D_800A4F17 = 0;
}
}
D_800A4F24 = 0;
D_8006A96E = D_8006A96E & 0xEF;
}
INCLUDE_ASM("asm/nonmatchings/800", func_8002FA3C);
+15 -1
View File
@@ -72,7 +72,21 @@ __asm__(".text\n.align 2\n.globl EnableEvent\n.ent\tEnableEvent\n"
"nop\n"
".set\treorder\n.end\tEnableEvent\n");
INCLUDE_ASM("asm/nonmatchings/800c3", DisableEvent);
__asm__(
".text\n"
".align 2\n"
".globl DisableEvent\n"
".ent\tDisableEvent\n"
"DisableEvent:\n"
".frame $sp,0,$31\n"
".set\tnoreorder\n"
"addiu $10, $0, 176\n"
"jr $10\n"
"addiu $9, $0, 13\n"
"nop\n"
".set\treorder\n"
".end\tDisableEvent\n"
);
INCLUDE_ASM("asm/nonmatchings/800c3", ReturnFromException);
+34 -1
View File
@@ -589,7 +589,40 @@ void func_80011E84(s32 a0) {
D_80074790 = a0;
}
INCLUDE_ASM("asm/nonmatchings/boot", func_80011EB4);
void func_80011EB4(void) {
extern s32 D_800629D0;
extern s32 D_80074788;
extern s32 D_80074790;
extern u16 D_80074794;
extern u16 D_80074798;
extern s32 func_80014B10(s32 a0);
extern s32 func_800149E0(s32 a0);
u16 local;
switch (D_800629D0) {
case 0:
local = func_80014B10(0);
*(u16 *)(0x80700000 + D_80074788 * 2) = local;
D_80074788++;
local = func_800149E0(0);
*(u16 *)(0x80700000 + D_80074788 * 2) = local;
D_80074788++;
break;
case 1:
if (D_80074790 != 0) {
D_80074794 = *(u16 *)(D_80074790 + D_80074788++ * 2);
D_80074798 = *(u16 *)(D_80074790 + D_80074788++ * 2);
} else {
D_80074794 = 0;
D_80074798 = 0;
}
break;
case 2:
D_80074794 = *(u16 *)(0x80700000 + D_80074788++ * 2);
D_80074798 = *(u16 *)(0x80700000 + D_80074788++ * 2);
break;
}
}
INCLUDE_ASM("asm/nonmatchings/boot", func_800120DC);