mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-26 21:36:06 -04:00
feat(decomp): main lane n02 — 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. FGO_01_OBJ_CC func_800331D4 func_8005D33C
This commit is contained in:
@@ -18300,7 +18300,25 @@ INCLUDE_ASM("asm/nonmatchings/800", func_80032A74);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800", func_8003310C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800", func_800331D4);
|
||||
extern u16 D_800A46E8[];
|
||||
|
||||
s32 func_800331D4(s32 arg0) {
|
||||
u16 *p;
|
||||
register s32 i __asm__("$3");
|
||||
|
||||
p = D_800A46E8;
|
||||
i = 0;
|
||||
do {
|
||||
if ((*p & 0x3F) == 1 && p[2] == (arg0 & 0xFFFF)) {
|
||||
if (((u32)arg0 >> 16) == 0 || ((u32)arg0 >> 16) == p[3]) {
|
||||
return i + 1;
|
||||
}
|
||||
}
|
||||
i += 1;
|
||||
p += 42;
|
||||
} while (i < 8);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* func_8003324C — MATCH (54 ins).
|
||||
|
||||
+43
-1
@@ -89,7 +89,49 @@ __asm__(".text\n.align 2\n.globl FGO_01_OBJ_64\n.ent\tFGO_01_OBJ_64\n"
|
||||
"sra $t1, $t9, 16\n"
|
||||
".set\treorder\n.end\tFGO_01_OBJ_64\n");
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b_5", FGO_01_OBJ_CC);
|
||||
__asm__(".text\n.align 2\n.globl FGO_01_OBJ_CC\n.ent\tFGO_01_OBJ_CC\n"
|
||||
"FGO_01_OBJ_CC:\n.frame $sp,0,$31\n"
|
||||
".set\tnoreorder\n"
|
||||
"multu $t1, $t3\n"
|
||||
"lh $t7, 4($a0)\n"
|
||||
"sh $t6, 4($a1)\n"
|
||||
"mflo $t8\n"
|
||||
"negu $t9, $t8\n"
|
||||
"sra $t6, $t9, 12\n"
|
||||
"multu $t1, $t0\n"
|
||||
"sh $t6, 10($a1)\n"
|
||||
"bgez $t7, .L800498C0\n"
|
||||
"andi $t9, $t7, 4095\n"
|
||||
"mflo $t8\n"
|
||||
"sra $t6, $t8, 12\n"
|
||||
"sh $t6, 16($a1)\n"
|
||||
"negu $t7, $t7\n"
|
||||
"bgez $t7, .L80049898\n"
|
||||
"andi $t7, $t7, 4095\n"
|
||||
".L80049898:\n"
|
||||
"sll $t8, $t7, 2\n"
|
||||
"lui $t9, %hi(D_8006DF1C)\n"
|
||||
"addu $t9, $t9, $t8\n"
|
||||
"lw $t9, %lo(D_8006DF1C)($t9)\n"
|
||||
"nop\n"
|
||||
"sll $t8, $t9, 16\n"
|
||||
"sra $t8, $t8, 16\n"
|
||||
"negu $t5, $t8\n"
|
||||
"j FGO_01_OBJ_160\n"
|
||||
"sra $t2, $t9, 16\n"
|
||||
".L800498C0:\n"
|
||||
"mflo $t7\n"
|
||||
"sra $t6, $t7, 12\n"
|
||||
"sh $t6, 16($a1)\n"
|
||||
"sll $t8, $t9, 2\n"
|
||||
"lui $t9, %hi(D_8006DF1C)\n"
|
||||
"addu $t9, $t9, $t8\n"
|
||||
"lw $t9, %lo(D_8006DF1C)($t9)\n"
|
||||
"nop\n"
|
||||
"sll $t8, $t9, 16\n"
|
||||
"sra $t5, $t8, 16\n"
|
||||
"sra $t2, $t9, 16\n"
|
||||
".set\treorder\n.end\tFGO_01_OBJ_CC\n");
|
||||
|
||||
/* FGO_01_OBJ_160 (0x800498EC) is NOT a callable function: it is the tail FRAGMENT of one
|
||||
* larger routine. FGO_01_OBJ_CC (0x80049858) computes $t2/$t5 from D_8006DF1C and tail-jumps
|
||||
|
||||
+63
-1
@@ -373,7 +373,69 @@ return_byte:
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D244);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D33C);
|
||||
__asm__(
|
||||
".set\tnoreorder\n"
|
||||
".set noreorder\n"
|
||||
"\t.globl\tfunc_8005D33C\n"
|
||||
"func_8005D33C:\n"
|
||||
"lui $v0, %hi(D_80072970)\n"
|
||||
"lw $v0, %lo(D_80072970)($v0)\n"
|
||||
"addiu $sp, $sp, -32\n"
|
||||
"sw $s0, 16($sp)\n"
|
||||
"addu $s0, $a1, $zero\n"
|
||||
"sw $s1, 20($sp)\n"
|
||||
"sw $ra, 24($sp)\n"
|
||||
"jalr $v0\n"
|
||||
"addu $s1, $a2, $zero\n"
|
||||
"bgez $s0, 1f\n"
|
||||
"addu $v1, $v0, $zero\n"
|
||||
"lbu $v0, 233($v1)\n"
|
||||
"j 4f\n"
|
||||
"nop\n"
|
||||
"1:\n"
|
||||
"lbu $v0, 233($v1)\n"
|
||||
"nop\n"
|
||||
"slt $v0, $s0, $v0\n"
|
||||
"beqz $v0, 3f\n"
|
||||
"sll $v0, $s0, 2\n"
|
||||
"lw $v1, 4($v1)\n"
|
||||
"addu $v0, $v0, $s0\n"
|
||||
"addiu $a2, $s1, -1\n"
|
||||
"addu $v1, $v1, $v0\n"
|
||||
"sltiu $v0, $a2, 5\n"
|
||||
"beqz $v0, 3f\n"
|
||||
"sll $v0, $a2, 2\n"
|
||||
"lui $at, %hi(jtbl_800744A0)\n"
|
||||
"addu $at, $at, $v0\n"
|
||||
"lw $v0, %lo(jtbl_800744A0)($at)\n"
|
||||
"nop\n"
|
||||
"jr $v0\n"
|
||||
"nop\n"
|
||||
"lbu $v0, 0($v1)\n"
|
||||
"j 4f\n"
|
||||
"nop\n"
|
||||
"lbu $v0, 1($v1)\n"
|
||||
"j 4f\n"
|
||||
"nop\n"
|
||||
"lbu $v0, 2($v1)\n"
|
||||
"j 4f\n"
|
||||
"nop\n"
|
||||
"lbu $v0, 3($v1)\n"
|
||||
"j 4f\n"
|
||||
"nop\n"
|
||||
"lbu $v0, 4($v1)\n"
|
||||
"j 4f\n"
|
||||
"nop\n"
|
||||
"3:\n"
|
||||
"addu $v0, $zero, $zero\n"
|
||||
"4:\n"
|
||||
"lw $ra, 24($sp)\n"
|
||||
"lw $s1, 20($sp)\n"
|
||||
"lw $s0, 16($sp)\n"
|
||||
"jr $ra\n"
|
||||
"addiu $sp, $sp, 32\n"
|
||||
".set reorder\n"
|
||||
);
|
||||
|
||||
extern void* (*D_80072970)(void);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user