diff options
author | Rémi Calixte <remicalixte.rmc@gmail.com> | 2021-09-11 09:29:21 +0200 |
---|---|---|
committer | Rémi Calixte <remicalixte.rmc@gmail.com> | 2021-09-11 09:29:21 +0200 |
commit | 070f4b63d2c14d76316f181cde1dabfa7f63c0b8 (patch) | |
tree | 62c1513b4cefa177bb11969b162e67de187b16ba | |
parent | bf18d30b4e21da4ac6c06d8b506c20cff9fce586 (diff) |
fix remaining nonmatchings
-rw-r--r-- | arm9/src/unk_02006D98.c | 322 | ||||
-rw-r--r-- | include/unk_02006D98.h | 15 |
2 files changed, 58 insertions, 279 deletions
diff --git a/arm9/src/unk_02006D98.c b/arm9/src/unk_02006D98.c index f829154a..8bb47c4a 100644 --- a/arm9/src/unk_02006D98.c +++ b/arm9/src/unk_02006D98.c @@ -1185,325 +1185,93 @@ THUMB_FUNC void FUN_02007F34(struct UnkStruct_02006D98_2 *param0, s32 param1) param0->unk2E = (s16)((40 - param1) - (((40 - param1) * param0->unk36) >> 8)); } -#ifdef NONMATCHING -THUMB_FUNC void FUN_02007F48(struct UnkStruct_02006D98_2 *param0) +static inline inlineLoop(u8 *unk58, + u8 *unk59, + u8 *unk5A, + u8 *unk5B, + u8 *unk5C, + const struct UnkStruct_02006D98_sub *unk84) { - u8 *r6 = ¶m0->unk59; - if (param0->unk58 == 0) + if (*unk58 == 0) { return; } - if (param0->unk5A == 0) + if (*unk5A == 0) { - (*r6)++; + (*unk59)++; - while (param0->unk84[*r6].unk0 < -1) + while (unk84[*unk59].unk0 < -1) { - param0->unk5C[*r6]++; + unk5C[*unk59]++; - if (param0->unk84[*r6].unk1 == param0->unk5C[*r6] || param0->unk84[*r6].unk1 == 0) + if (unk84[*unk59].unk1 == unk5C[*unk59] || unk84[*unk59].unk1 == 0) { - param0->unk5C[*r6] = 0; - r6++; + unk5C[*unk59] = 0; + unk59++; } else { - *r6 = -2 - param0->unk84[*r6].unk0; + *unk59 = -2 - unk84[*unk59].unk0; } } - if (param0->unk84[*r6].unk0 == -1 || *r6 >= 10) + if (unk84[*unk59].unk0 == -1 || *unk59 >= 10) { - param0->unk5B = 0; - param0->unk58 = 0; + *unk5B = 0; + *unk58 = 0; return; } - param0->unk5B = param0->unk84[*r6].unk0; - param0->unk5A = param0->unk84[*r6].unk1; + *unk5B = unk84[*unk59].unk0; + *unk5A = unk84[*unk59].unk1; } else { - param0->unk5A--; + (*unk5A)--; } } -#else -asm void FUN_02007F48(struct UnkStruct_02006D98_2 *param0) + +THUMB_FUNC void FUN_02007F48(struct UnkStruct_02006D98_2 *param0) { - // clang-format off - push {r4-r7} - add r1, r0, #0x0 - add r1, #0x58 - ldrb r1, [r1, #0x0] - add r6, r0, #0x0 - add r6, #0x59 - cmp r1, #0x0 - beq _0200800A - add r1, r0, #0x0 - add r1, #0x5a - ldrb r1, [r1, #0x0] - cmp r1, #0x0 - bne _02007FFE - ldrb r1, [r6, #0x0] - add r1, r1, #0x1 - strb r1, [r6, #0x0] - ldrb r3, [r6, #0x0] - mov r1, #0x84 - lsl r4, r3, #0x1 - add r2, r0, r4 - ldrsb r2, [r2, r1] - sub r1, #0x85 - cmp r2, r1 - bge _02007FC6 - mov r2, #0x0 - sub r1, r2, #0x2 -_02007F7C: - add r4, r0, r3 - add r4, #0x5c - ldrb r4, [r4, #0x0] - add r3, r0, r3 - add r3, #0x5c - add r4, r4, #0x1 - strb r4, [r3, #0x0] - ldrb r5, [r6, #0x0] - lsl r3, r5, #0x1 - add r4, r0, r3 - add r3, r4, #0x0 - add r7, r0, r5 - add r3, #0x85 - add r7, #0x5c - ldrb r3, [r3, #0x0] - ldrb r7, [r7, #0x0] - cmp r3, r7 - beq _02007FA4 - cmp r3, #0x0 - bne _02007FAE -_02007FA4: - add r3, r0, r5 - add r3, #0x5c - strb r2, [r3, #0x0] - add r6, r6, #0x1 - b _02007FB6 -_02007FAE: - mov r3, #0x84 - ldrsb r3, [r4, r3] - sub r3, r1, r3 - strb r3, [r6, #0x0] -_02007FB6: - ldrb r3, [r6, #0x0] - mov r5, #0x84 - lsl r4, r3, #0x1 - add r7, r0, r4 - ldrsb r7, [r7, r5] - sub r5, #0x85 - cmp r7, r5 - blt _02007F7C -_02007FC6: - add r2, r0, r4 - mov r1, #0x84 - ldrsb r2, [r2, r1] - sub r1, #0x85 - cmp r2, r1 - beq _02007FD6 - cmp r3, #0xa - blo _02007FE6 -_02007FD6: - add r1, r0, #0x0 - mov r2, #0x0 - add r1, #0x5b - strb r2, [r1, #0x0] - add r0, #0x58 - strb r2, [r0, #0x0] - pop {r4-r7} - bx lr -_02007FE6: - add r1, r0, #0x0 - add r1, #0x5b - strb r2, [r1, #0x0] - ldrb r1, [r6, #0x0] - lsl r1, r1, #0x1 - add r1, r0, r1 - add r1, #0x85 - ldrb r1, [r1, #0x0] - add r0, #0x5a - strb r1, [r0, #0x0] - pop {r4-r7} - bx lr -_02007FFE: - add r1, r0, #0x0 - add r1, #0x5a - ldrb r1, [r1, #0x0] - add r0, #0x5a - sub r1, r1, #0x1 - strb r1, [r0, #0x0] -_0200800A: - pop {r4-r7} - bx lr - // clang-format on + inlineLoop(¶m0->unk58, + ¶m0->unk59, + ¶m0->unk5A, + ¶m0->unk5B, + param0->unk5C, + param0->unk84); } -#endif -THUMB_FUNC void FUN_02008010(u8 *param0, struct UnkStruct_02006D98_sub *param1) +THUMB_FUNC void FUN_02008010(struct UnkStruct_02006D98_5 *param0, struct UnkStruct_02006D98_sub *param1) { - param0[0] = 1; - param0[2] = 0; - param0[1] = (u8)param1->unk0; - param0[3] = param1->unk1; - ((struct UnkStruct_02006D98_sub **)param0)[4] = param1; + param0->unk00 = 1; + param0->unk02 = 0; + param0->unk01 = (u8)param1->unk0; + param0->unk03 = param1->unk1; + param0->unk10 = param1; for (s32 i = 0; i < 10; i++) { - param0[i + 4] = 0; + param0->unk04[i] = 0; } } -#ifdef NONMATCHING -THUMB_FUNC s32 FUN_02008030(u8 *param0) +THUMB_FUNC s32 FUN_02008030(struct UnkStruct_02006D98_5 *param0) { - if (*param0 != 0) + if (param0->unk00 != 0) { - u8 *r3 = param0 + 2; - struct UnkStruct_02006D98_sub *r4 = ((struct UnkStruct_02006D98_sub **)param0)[4]; - if (*param0 != 0) - { - if (param0[3] == 0) - { - (*r3)++; - - while (r4[*r3].unk0 < -1) - { - param0[*r3 + 4]++; - if (r4[*r3].unk1 == param0[*r3 + 4] || r4[*r3].unk1 == 0) - { - param0[*r3 + 4] = 0; - r3++; - } - else - { - *r3 = -2 - r4[*r3].unk0; - } - } - - if (r4[*r3].unk0 == -1 || *r3 >= 10) - { - param0[0] = 0; - param0[1] = 0; - } - else - { - param0[1] = r4[*r3].unk0; - param0[3] = r4[*r3].unk1; - } - } - else - { - param0[3]--; - } - } - - return param0[1]; + inlineLoop(¶m0->unk00, + ¶m0->unk02, + ¶m0->unk03, + ¶m0->unk01, + param0->unk04, + param0->unk10); + return param0->unk01; } return -1; } -#else -asm s32 FUN_02008030(u8 *param0) -{ - // clang-format off - push {r4-r7} - ldrb r1, [r0, #0x0] - cmp r1, #0x0 - beq _020080C6 - add r3, r0, #0x2 - ldr r4, [r0, #0x10] - cmp r1, #0x0 - beq _020080C0 - ldrb r1, [r0, #0x3] - cmp r1, #0x0 - bne _020080BC - ldrb r1, [r3, #0x0] - add r1, r1, #0x1 - strb r1, [r3, #0x0] - ldrb r2, [r3, #0x0] - mov r1, #0x0 - mvn r1, r1 - lsl r5, r2, #0x1 - ldrsb r6, [r4, r5] - cmp r6, r1 - bge _02008098 - mov r1, #0x0 -_0200805C: - add r5, r0, r2 - ldrb r2, [r5, #0x4] - add r2, r2, #0x1 - strb r2, [r5, #0x4] - ldrb r2, [r3, #0x0] - add r5, r0, r2 - lsl r2, r2, #0x1 - add r2, r4, r2 - ldrb r7, [r2, #0x1] - ldrb r6, [r5, #0x4] - cmp r7, r6 - beq _02008078 - cmp r7, #0x0 - bne _0200807E -_02008078: - strb r1, [r5, #0x4] - add r3, r3, #0x1 - b _0200808A -_0200807E: - mov r5, #0x0 - ldrsb r5, [r2, r5] - mov r2, #0x1 - mvn r2, r2 - sub r2, r2, r5 - strb r2, [r3, #0x0] -_0200808A: - ldrb r2, [r3, #0x0] - mov r6, #0x0 - mvn r6, r6 - lsl r5, r2, #0x1 - ldrsb r7, [r4, r5] - cmp r7, r6 - blt _0200805C -_02008098: - ldrsb r5, [r4, r5] - mov r1, #0x0 - mvn r1, r1 - cmp r5, r1 - beq _020080A6 - cmp r2, #0xa - blo _020080AE -_020080A6: - mov r1, #0x0 - strb r1, [r0, #0x1] - strb r1, [r0, #0x0] - b _020080C0 -_020080AE: - strb r5, [r0, #0x1] - ldrb r1, [r3, #0x0] - lsl r1, r1, #0x1 - add r1, r4, r1 - ldrb r1, [r1, #0x1] - strb r1, [r0, #0x3] - b _020080C0 -_020080BC: - sub r1, r1, #0x1 - strb r1, [r0, #0x3] -_020080C0: - ldrb r0, [r0, #0x1] - pop {r4-r7} - bx lr -_020080C6: - mov r0, #0x0 - mvn r0, r0 - pop {r4-r7} - bx lr - // clang-format on -} -#endif THUMB_FUNC void FUN_020080D0(struct UnkStruct_02006D98_2 *param0) { diff --git a/include/unk_02006D98.h b/include/unk_02006D98.h index c20bcea1..42ed8217 100644 --- a/include/unk_02006D98.h +++ b/include/unk_02006D98.h @@ -119,6 +119,17 @@ struct UnkStruct_02006D98_3 u8 unk1; }; + +struct UnkStruct_02006D98_5 +{ + u8 unk00; + u8 unk01; + u8 unk02; + u8 unk03; + u8 unk04[10]; + struct UnkStruct_02006D98_sub *unk10; +}; + struct UnkStruct_02006D98 *FUN_02006D98(u32 heap_id); void FUN_02006ED4(struct UnkStruct_02006D98 *param0); void FUN_020072E8(struct UnkStruct_02006D98 *param0); @@ -157,8 +168,8 @@ void FUN_02007EEC(struct UnkStruct_02006D98_2 *param0); BOOL FUN_02007F20(struct UnkStruct_02006D98_2 *param0); void FUN_02007F34(struct UnkStruct_02006D98_2 *param0, s32 param1); void FUN_02007F48(struct UnkStruct_02006D98_2 *param0); -void FUN_02008010(u8 *param0, struct UnkStruct_02006D98_sub *param1); -s32 FUN_02008030(u8 *param0); +void FUN_02008010(struct UnkStruct_02006D98_5 *param0, struct UnkStruct_02006D98_sub *param1); +s32 FUN_02008030(struct UnkStruct_02006D98_5 *param0); void FUN_020080D0(struct UnkStruct_02006D98_2 *param0); void FUN_020080E0(struct UnkStruct_02006D98_2 *param0); void FUN_0200813C(struct UnkStruct_02006D98_2 *param0); |