mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-26 21:36:06 -04:00
feat(decomp): main lane m06bb — 8 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. GetRCnt StopRCnt func_8005BED8 func_8005D6A0 func_8005D980 func_8005E9D4 func_8005F228 func_8005F728
This commit is contained in:
+21
-1
@@ -1675,7 +1675,27 @@ __asm__(
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c", SYS_OBJ_2C6C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c", func_8005BED8);
|
||||
__asm__(
|
||||
".text\n"
|
||||
".align\t2\n"
|
||||
".globl\tfunc_8005BED8\n"
|
||||
".ent\tfunc_8005BED8\n"
|
||||
".frame\t$sp,24,$31\n"
|
||||
".mask\t0x80010000,-4\n"
|
||||
".fmask\t0x00000000,0\n"
|
||||
".set\tnoreorder\n"
|
||||
"func_8005BED8:\n"
|
||||
"addiu $sp, $sp, -24\n"
|
||||
"sw $ra, 20($sp)\n"
|
||||
"bnez $a0, .L8005BF8C\n"
|
||||
" sw $s0, 16($sp)\n"
|
||||
"jal func_8005C020\n"
|
||||
" nop\n"
|
||||
"j SYS_OBJ_2CDC\n"
|
||||
" nop\n"
|
||||
".set\treorder\n"
|
||||
".end\tfunc_8005BED8\n"
|
||||
);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c", SYS_OBJ_2CC4);
|
||||
|
||||
|
||||
+119
-7
@@ -93,11 +93,41 @@ s32 SetRCnt(s32 a0, s16 a1, s32 a2) {
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", GetRCnt);
|
||||
extern u32 D_80072938;
|
||||
|
||||
s32 GetRCnt(s32 spec) {
|
||||
register s32 v1 __asm__("$3");
|
||||
s32 ret;
|
||||
|
||||
v1 = spec & 0xFFFF;
|
||||
if (v1 < 3) {
|
||||
v1 = (v1 << 4) + D_80072938;
|
||||
ret = *(u16 *) v1;
|
||||
} else {
|
||||
ret = 0;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", StartRCnt);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", StopRCnt);
|
||||
__asm__(".text\n.align 2\n.globl StopRCnt\n.ent\tStopRCnt\n"
|
||||
"StopRCnt:\n.frame $sp,0,$31\n"
|
||||
".set\tnoreorder\n"
|
||||
"andi $a0, $a0, 65535\n"
|
||||
"sll $a0, $a0, 2\n"
|
||||
"lui $a1, %hi(D_80072934)\n"
|
||||
"lw $a1, %lo(D_80072934)($a1)\n"
|
||||
"lui $v0, %hi(D_8007293C)\n"
|
||||
"addu $v0, $v0, $a0\n"
|
||||
"lw $v0, %lo(D_8007293C)($v0)\n"
|
||||
"lw $v1, 4($a1)\n"
|
||||
"nor $v0, $zero, $v0\n"
|
||||
"and $v1, $v1, $v0\n"
|
||||
"addiu $v0, $zero, 1\n"
|
||||
"jr $ra\n"
|
||||
"sw $v1, 4($a1)\n"
|
||||
".set\treorder\n.end\tStopRCnt\n");
|
||||
|
||||
extern u32 D_80072938;
|
||||
|
||||
@@ -266,7 +296,17 @@ INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D538);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D588);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D6A0);
|
||||
void func_8005D6A0(void) {
|
||||
extern s32 D_8007898C;
|
||||
extern void func_8005D734(void);
|
||||
extern void func_8005D6CC(void);
|
||||
s32 *base = (s32 *)&D_8007898C;
|
||||
__asm__ __volatile__("" : "=r"(base) : "0"(base));
|
||||
*(s32 *)((s32)base + 0x0) = (s32)func_8005D734;
|
||||
*(s32 *)((s32)base + 0x4) = (s32)func_8005D6CC;
|
||||
*(s32 *)((s32)base - 0x4) = 0;
|
||||
*(s32 *)((s32)base + 0x8) = 0;
|
||||
}
|
||||
|
||||
extern s32 *D_800729BC;
|
||||
extern void (*D_80072984)(void);
|
||||
@@ -292,7 +332,19 @@ INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D8A0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D8B4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D980);
|
||||
extern void func_8005CF08(void);
|
||||
extern void func_8005CF18(void);
|
||||
extern s32 ChangeClearRCnt(s32 intr, s32 mode);
|
||||
extern s32 SysDeqIntRP(s32 priority, void *intr);
|
||||
extern unsigned char D_80078988[];
|
||||
|
||||
void func_8005D980(void)
|
||||
{
|
||||
func_8005CF08();
|
||||
ChangeClearRCnt(3, 1);
|
||||
SysDeqIntRP(2, &D_80078988);
|
||||
func_8005CF18();
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D9C4);
|
||||
|
||||
@@ -581,7 +633,20 @@ INCLUDE_ASM("asm/nonmatchings/800c3", func_8005E8E8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005E980);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005E9D4);
|
||||
extern void (*D_80072960)(void);
|
||||
|
||||
s32 func_8005E9D4(s32 a0)
|
||||
{
|
||||
if (*(u8 *)((u8 *)a0 + 0x53) != 0) {
|
||||
if (*(u8 *)((u8 *)a0 + 0x46) == 2) {
|
||||
return 1;
|
||||
}
|
||||
*(u8 *)((u8 *)a0 + 0x46) = 0xFE;
|
||||
return 0;
|
||||
}
|
||||
D_80072960();
|
||||
return 0;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005EA34);
|
||||
|
||||
@@ -631,7 +696,31 @@ INCLUDE_ASM("asm/nonmatchings/800c3", func_8005ED4C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005F0C8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005F228);
|
||||
void func_8005F228(void *arg0) {
|
||||
u8 *p;
|
||||
s32 i;
|
||||
|
||||
if (*(u8 *)((u8 *)arg0 + 0x49) == 0) {
|
||||
return;
|
||||
}
|
||||
p = (u8 *)arg0 + 0x5D;
|
||||
*(u8 *)((u8 *)arg0 + 0x49) = 0;
|
||||
*(u8 *)((u8 *)arg0 + 0x46) = 0;
|
||||
*(u16 *)((u8 *)arg0 + 0xE6) = 0;
|
||||
*(u32 *)((u8 *)arg0 + 0x14) = 0;
|
||||
*(u32 *)((u8 *)arg0 + 0x18) = 0;
|
||||
*(u8 *)((u8 *)arg0 + 0xE3) = 0;
|
||||
*(u8 *)((u8 *)arg0 + 0xE4) = 0;
|
||||
*(u16 *)((u8 *)arg0 + 0xE6) = 0;
|
||||
*(u8 *)((u8 *)arg0 + 0xE9) = 0;
|
||||
*(u8 *)((u8 *)arg0 + 0xEA) = 0;
|
||||
*(u32 *)((u8 *)arg0 + 0x00) = 0;
|
||||
*(u32 *)((u8 *)arg0 + 0x04) = 0;
|
||||
*(u32 *)((u8 *)arg0 + 0x08) = 0;
|
||||
for (i = 0; i < 6; i++) {
|
||||
*p++ = 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005F290);
|
||||
|
||||
@@ -680,7 +769,30 @@ s32 func_8005F704(s32 arg0) {
|
||||
|
||||
__asm__(".word 0x00000000\n");
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005F728);
|
||||
|
||||
__asm__(
|
||||
".text\n"
|
||||
".align\t2\n"
|
||||
".globl\tfunc_8005F728\n"
|
||||
".ent\tfunc_8005F728\n"
|
||||
"func_8005F728:\n"
|
||||
".set\tnoreorder\n"
|
||||
"lui $v0, %hi(func_8005F75C)\n"
|
||||
"addiu $v0, $v0, %lo(func_8005F75C)\n"
|
||||
"lui $at, %hi(D_80072974)\n"
|
||||
"sw $v0, %lo(D_80072974)($at)\n"
|
||||
"lui $v0, %hi(func_8005FB70)\n"
|
||||
"addiu $v0, $v0, %lo(func_8005FB70)\n"
|
||||
"lui $at, %hi(D_80072978)\n"
|
||||
"sw $v0, %lo(D_80072978)($at)\n"
|
||||
"lui $v0, %hi(func_8005F830)\n"
|
||||
"addiu $v0, $v0, %lo(func_8005F830)\n"
|
||||
"lui $at, %hi(D_8007297C)\n"
|
||||
"jr $ra\n"
|
||||
"sw $v0, %lo(D_8007297C)($at)\n"
|
||||
".set\treorder\n"
|
||||
".end\tfunc_8005F728\n"
|
||||
);
|
||||
|
||||
|
||||
extern void func_8005EA34(void *arg0, s32 arg1);
|
||||
|
||||
Reference in New Issue
Block a user