Match sub_0801E64C

This commit is contained in:
Tal Hayon 2022-08-22 18:51:46 +03:00
parent 953a5d35cc
commit e10d7b3eca
2 changed files with 37 additions and 73 deletions

View File

@ -1,72 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
adds r5, r0, #0
adds r4, r1, #0
adds r6, r3, #0
ldr r7, _0801E6C4 @ =gUnk_02018EE0
cmp r4, #0
bge _0801E65E
cmp r6, #0
blt _0801E6C2
_0801E65E:
cmp r4, #0x9f
ble _0801E666
cmp r6, #0x9f
bgt _0801E6C2
_0801E666:
cmp r4, r6
ble _0801E676
adds r1, r4, #0
adds r4, r6, #0
adds r6, r1, #0
adds r1, r5, #0
adds r5, r2, #0
adds r2, r1, #0
_0801E676:
cmp r4, r6
beq _0801E6C2
subs r0, r2, r5
lsls r0, r0, #0x10
subs r1, r6, r4
bl Div
adds r3, r0, #0
cmp r4, #0
bge _0801E694
rsbs r0, r4, #0
muls r0, r3, r0
asrs r0, r0, #0x10
adds r5, r5, r0
movs r4, #0
_0801E694:
cmp r6, #0x9f
ble _0801E69A
movs r6, #0x9f
_0801E69A:
lsls r2, r5, #0x10
lsls r0, r4, #1
adds r0, r0, r4
ldr r1, [sp, #0x14]
adds r0, r0, r1
lsls r0, r0, #2
adds r7, r0, r7
_0801E6A8:
cmp r5, #0
bge _0801E6AE
movs r5, #0
_0801E6AE:
cmp r5, #0xf0
ble _0801E6B4
movs r5, #0xf0
_0801E6B4:
str r5, [r7]
adds r2, r2, r3
asrs r5, r2, #0x10
adds r4, #1
adds r7, #0xc
cmp r4, r6
ble _0801E6A8
_0801E6C2:
pop {r4, r5, r6, r7, pc}
.align 2, 0
_0801E6C4: .4byte gUnk_02018EE0
.syntax divided

View File

@ -701,7 +701,43 @@ ASM_FUNC("asm/non_matching/common/sub_0801E31C.inc", void sub_0801E31C(u32 a1, u
ASM_FUNC("asm/non_matching/common/sub_0801E49C.inc", void sub_0801E49C(u32 a1, u32 a2, u32 a3, u32 a4));
ASM_FUNC("asm/non_matching/common/sub_0801E64C.inc", void sub_0801E64C(u32 a1, u32 a2, u32 a3, u32 a4, u32 a5));
void sub_0801E64C(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5) {
s32 sVar1;
s32* ptr = (s32*)gUnk_02018EE0;
register s32 tmp asm("r1");
if ((0 <= param_2 || 0 <= param_4) && (param_2 < 0xa0 || (param_4 < 0xa0))) {
if (param_2 > param_4) {
SWAP(param_2, param_4, tmp);
SWAP(param_1, param_3, tmp);
}
if (param_2 != param_4) {
sVar1 = Div((param_3 - param_1) * 0x10000, param_4 - param_2);
if (param_2 < 0) {
param_1 += (sVar1 * -param_2) >> 0x10;
param_2 = 0;
}
if (0x9f < param_4) {
param_4 = 0x9f;
}
param_3 = param_1 << 0x10;
ptr += param_2 * 3 + param_5;
do {
if (param_1 < 0) {
param_1 = 0;
}
if (0xf0 < param_1) {
param_1 = 0xf0;
}
*ptr = param_1;
param_3 += sVar1;
param_1 = param_3 >> 0x10;
param_2++;
ptr += 3;
} while (param_2 <= param_4);
}
}
}
void sub_0801E6C8(u32 param_1) {
u32 tmp;