Add nonmatching sub_0802EB08

This commit is contained in:
Tal Hayon 2022-07-26 17:12:53 +03:00
parent 90536b5321
commit 66e1362dc6
3 changed files with 128 additions and 85 deletions

View File

@ -7,90 +7,6 @@
.text
thumb_func_start sub_0802EB08
sub_0802EB08: @ 0x0802EB08
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r5, r0, #0
adds r6, r1, #0
adds r7, r2, #0
movs r0, #0
mov r8, r0
movs r3, #0
_0802EB1A:
lsls r0, r3, #2
adds r4, r5, r0
adds r2, r3, #1
lsls r0, r2, #2
adds r1, r5, r0
ldrb r0, [r4, #0x19]
ldrb r3, [r1, #0x19]
cmp r0, r3
beq _0802EB4E
movs r0, #1
mov r8, r0
ldrb r0, [r1, #0x19]
ldrb r1, [r4, #0x19]
subs r0, r0, r1
movs r1, #0x1f
ands r0, r1
movs r3, #2
cmp r0, #0x10
ble _0802EB42
movs r3, #3
_0802EB42:
adds r0, r5, #0
adds r1, r2, #0
adds r2, r6, #0
bl sub_0802EA68
b _0802EB54
_0802EB4E:
adds r3, r2, #0
cmp r3, #4
bls _0802EB1A
_0802EB54:
movs r3, #0
movs r4, #0x1f
rsbs r6, r7, #0
ands r6, r4
_0802EB5C:
adds r2, r3, #1
lsls r0, r2, #2
adds r0, r5, r0
ldrb r1, [r0, #0x19]
lsls r0, r3, #2
adds r0, r5, r0
ldrb r0, [r0, #0x19]
subs r0, r1, r0
ands r0, r4
adds r3, r1, #0
adds r1, r2, #0
cmp r0, #0x10
ble _0802EB7E
cmp r6, r0
ble _0802EB86
adds r3, #1
b _0802EB84
_0802EB7E:
cmp r7, r0
bge _0802EB86
subs r3, #1
_0802EB84:
ands r3, r4
_0802EB86:
lsls r0, r1, #2
adds r0, r5, r0
strb r3, [r0, #0x19]
adds r3, r1, #0
cmp r3, #4
bls _0802EB5C
mov r0, r8
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
thumb_func_start sub_0802EB9C
sub_0802EB9C: @ 0x0802EB9C
push {r4, lr}

View File

@ -0,0 +1,85 @@
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r5, r0, #0
adds r6, r1, #0
adds r7, r2, #0
movs r0, #0
mov r8, r0
movs r3, #0
_0802EB1A:
lsls r0, r3, #2
adds r4, r5, r0
adds r2, r3, #1
lsls r0, r2, #2
adds r1, r5, r0
ldrb r0, [r4, #0x19]
ldrb r3, [r1, #0x19]
cmp r0, r3
beq _0802EB4E
movs r0, #1
mov r8, r0
ldrb r0, [r1, #0x19]
ldrb r1, [r4, #0x19]
subs r0, r0, r1
movs r1, #0x1f
ands r0, r1
movs r3, #2
cmp r0, #0x10
ble _0802EB42
movs r3, #3
_0802EB42:
adds r0, r5, #0
adds r1, r2, #0
adds r2, r6, #0
bl sub_0802EA68
b _0802EB54
_0802EB4E:
adds r3, r2, #0
cmp r3, #4
bls _0802EB1A
_0802EB54:
movs r3, #0
movs r4, #0x1f
rsbs r6, r7, #0
ands r6, r4
_0802EB5C:
adds r2, r3, #1
lsls r0, r2, #2
adds r0, r5, r0
ldrb r1, [r0, #0x19]
lsls r0, r3, #2
adds r0, r5, r0
ldrb r0, [r0, #0x19]
subs r0, r1, r0
ands r0, r4
adds r3, r1, #0
adds r1, r2, #0
cmp r0, #0x10
ble _0802EB7E
cmp r6, r0
ble _0802EB86
adds r3, #1
b _0802EB84
_0802EB7E:
cmp r7, r0
bge _0802EB86
subs r3, #1
_0802EB84:
ands r3, r4
_0802EB86:
lsls r0, r1, #2
adds r0, r5, r0
strb r3, [r0, #0x19]
adds r3, r1, #0
cmp r3, #4
bls _0802EB5C
mov r0, r8
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided

View File

@ -69,7 +69,7 @@ extern void sub_0802E430(GleerokEntity* this);
extern void sub_0802EBC4(GleerokEntity* this);
extern void sub_0802E9B0(GleerokEntity* this);
extern bool32 sub_0802EB08(Gleerok_HeapStruct* param_1, u32 param_2, u32 param_3);
extern bool32 sub_0802EB08(Gleerok_HeapStruct* param_1, u32 param_2, s32 param_3);
extern bool32 sub_0802EA18(u32 param_1, u32 param_2, u32 param_3);
extern void sub_0802EA48(Gleerok_HeapStruct* param_1, u32 param_2, u32 param_3, u32 param_4);
extern void sub_0802EA68(Gleerok_HeapStruct* param_1, u32 param_2, u32 param_3, u32 param_4);
@ -1446,3 +1446,45 @@ NONMATCH("asm/non_matching/gleerok/sub_0802EA88.inc", bool32 sub_0802EA88(Gleero
return uVar6;
}
END_NONMATCH
NONMATCH("asm/non_matching/gleerok/sub_0802EB08.inc",
bool32 sub_0802EB08(Gleerok_HeapStruct* param_1, u32 param_2, s32 param_3)) {
s32 uVar2;
u32 bVar4;
u32 uVar5;
u32 uVar6;
u32 uVar7;
uVar7 = FALSE;
for (uVar6 = 0; uVar6 < 5; uVar6++) {
if (param_1->filler2[uVar6].unk0.HALF.HI != param_1->filler2[uVar6 + 1].unk0.HALF.HI) {
uVar7 = TRUE;
if (0x10 <
(s32)((param_1->filler2[uVar6 + 1].unk0.HALF.HI - param_1->filler2[uVar6].unk0.HALF.HI) & 0x1fU)) {
uVar5 = 3;
} else {
uVar5 = 2;
}
sub_0802EA68(param_1, uVar6 + 1, param_2, uVar5);
break;
}
}
for (uVar6 = 0; uVar6 <= 4; uVar6++) {
bVar4 = param_1->filler2[uVar6 + 1].unk0.HALF.HI;
uVar2 = (bVar4 - param_1->filler2[uVar6].unk0.HALF.HI) & 0x1f;
if (uVar2 >= 0x11) {
if ((-param_3 & 0x1f) > uVar2) {
bVar4 = (bVar4 + 1) & 0x1f;
}
} else {
if (param_3 < (int)uVar2) {
bVar4 = (bVar4 - 1) & 0x1f;
}
}
param_1->filler2[uVar6 + 1].unk0.HALF.HI = bVar4;
}
return uVar7;
}
END_NONMATCH