diff options
author | Rémi Calixte <remicalixte.rmc@gmail.com> | 2021-05-15 10:41:32 +0200 |
---|---|---|
committer | Rémi Calixte <remicalixte.rmc@gmail.com> | 2021-05-15 10:41:32 +0200 |
commit | 5cc0de5c3101cf0dc5bcac9956dd7b5773c087f2 (patch) | |
tree | 54f14c0dd1f1a0174a4fd5235817ef4d26c7924f | |
parent | 5200f263fc773b5bfb246af68619d96822a321b4 (diff) |
huge loops
-rw-r--r-- | arm9/asm/unk_02016B94.s | 383 | ||||
-rw-r--r-- | arm9/src/unk_02016B94_c.c | 325 |
2 files changed, 303 insertions, 405 deletions
diff --git a/arm9/asm/unk_02016B94.s b/arm9/asm/unk_02016B94.s index 43f2a258..5a654a24 100644 --- a/arm9/asm/unk_02016B94.s +++ b/arm9/asm/unk_02016B94.s @@ -61,388 +61,9 @@ - thumb_func_start FUN_02018268 -FUN_02018268: ; 0x02018268 - push {r4-r7, lr} - sub sp, #0x44 - str r1, [sp, #0x0] - str r2, [sp, #0x4] - add r7, r0, #0x0 - ldr r0, [sp, #0x58] - add r6, r3, #0x0 - str r0, [sp, #0x58] - ldr r0, [sp, #0x5c] - ldr r4, [sp, #0x68] - str r0, [sp, #0x5c] - ldr r0, [sp, #0x6c] - str r0, [sp, #0x6c] - ldr r0, [r7, #0x0] - str r0, [sp, #0x2c] - cmp r0, #0x0 - bne _0201828C - b _020183D6 -_0201828C: - ldrb r0, [r7, #0x15] - add r1, sp, #0x40 - add r1, #0x1 - add r2, sp, #0x40 - bl FUN_02017850 - add r0, sp, #0x70 - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _0201833A - mov r0, #0x0 - str r0, [sp, #0x28] - ldr r0, [sp, #0x58] - cmp r0, #0x0 - bls _020182CA - add r1, sp, #0x48 - ldrb r0, [r1, #0x1c] - str r0, [sp, #0x1c] - ldrb r0, [r1, #0x18] - str r0, [sp, #0x18] - lsl r1, r0, #0x1 - ldr r0, [sp, #0x5c] - add r0, r0, r1 - str r0, [sp, #0x14] -_020182BC: - ldr r1, [sp, #0x4] - ldr r0, [sp, #0x28] - add r0, r1, r0 - add r1, sp, #0x40 - ldrb r1, [r1, #0x0] - cmp r0, r1 - blt _020182CC -_020182CA: - b _020183D6 -_020182CC: - ldr r2, [sp, #0x1c] - ldr r1, [sp, #0x28] - add r2, r2, r1 - ldr r1, [sp, #0x6c] - cmp r2, r1 - bge _020183D6 - mov r5, #0x0 - cmp r6, #0x0 - bls _02018326 - add r1, r4, #0x0 - mul r1, r2 - lsl r2, r1, #0x1 - ldr r1, [sp, #0x14] - lsl r0, r0, #0x18 - add r1, r1, r2 - lsr r0, r0, #0x18 - str r1, [sp, #0x10] - str r0, [sp, #0x30] -_020182F0: - add r1, sp, #0x40 - ldr r0, [sp, #0x0] - ldrb r1, [r1, #0x1] - add r0, r0, r5 - cmp r0, r1 - bge _02018326 - ldr r1, [sp, #0x18] - add r1, r1, r5 - cmp r1, r4 - bge _02018326 - ldrb r2, [r7, #0x15] - lsl r0, r0, #0x18 - ldr r1, [sp, #0x30] - lsr r0, r0, #0x18 - bl FUN_02017FFC - ldr r1, [sp, #0x10] - lsl r2, r5, #0x1 - ldrh r1, [r1, r2] - lsl r2, r0, #0x1 - ldr r0, [sp, #0x2c] - strh r1, [r0, r2] - add r0, r5, #0x1 - lsl r0, r0, #0x18 - lsr r5, r0, #0x18 - cmp r5, r6 - blo _020182F0 -_02018326: - ldr r0, [sp, #0x28] - add r0, r0, #0x1 - lsl r0, r0, #0x18 - lsr r1, r0, #0x18 - str r1, [sp, #0x28] - ldr r0, [sp, #0x58] - cmp r1, r0 - blo _020182BC - add sp, #0x44 - pop {r4-r7, pc} -_0201833A: - mov r0, #0x0 - str r0, [sp, #0x8] - ldr r0, [sp, #0x58] - cmp r0, #0x0 - bls _020183D6 - add r1, sp, #0x48 - ldrb r0, [r1, #0x1c] - str r0, [sp, #0x24] - ldrb r0, [r1, #0x18] - str r0, [sp, #0x20] -_0201834E: - ldr r1, [sp, #0x4] - ldr r0, [sp, #0x8] - add r1, r1, r0 - add r0, sp, #0x40 - ldrb r0, [r0, #0x0] - cmp r1, r0 - bge _020183D6 - ldr r2, [sp, #0x24] - ldr r0, [sp, #0x8] - add r0, r2, r0 - ldr r2, [sp, #0x6c] - cmp r0, r2 - bge _020183D6 - mov r5, #0x0 - cmp r6, #0x0 - bls _020183C6 - lsl r1, r1, #0x18 - lsl r0, r0, #0x18 - lsr r1, r1, #0x18 - lsr r0, r0, #0x18 - str r1, [sp, #0x34] - str r0, [sp, #0x3c] -_0201837A: - add r1, sp, #0x40 - ldr r0, [sp, #0x0] - ldrb r1, [r1, #0x1] - add r0, r0, r5 - cmp r0, r1 - bge _020183C6 - ldr r1, [sp, #0x20] - add r1, r1, r5 - str r1, [sp, #0xc] - cmp r1, r4 - bge _020183C6 - ldrb r2, [r7, #0x15] - lsl r0, r0, #0x18 - ldr r1, [sp, #0x34] - lsr r0, r0, #0x18 - bl FUN_02017FFC - str r0, [sp, #0x38] - ldr r0, [sp, #0xc] - ldr r1, [sp, #0x3c] - lsl r0, r0, #0x18 - ldr r3, [sp, #0x6c] - lsr r0, r0, #0x18 - add r2, r4, #0x0 - bl FUN_02018068 - lsl r1, r0, #0x1 - ldr r0, [sp, #0x5c] - ldrh r0, [r0, r1] - ldr r1, [sp, #0x38] - lsl r2, r1, #0x1 - ldr r1, [sp, #0x2c] - strh r0, [r1, r2] - add r0, r5, #0x1 - lsl r0, r0, #0x18 - lsr r5, r0, #0x18 - cmp r5, r6 - blo _0201837A -_020183C6: - ldr r0, [sp, #0x8] - add r0, r0, #0x1 - lsl r0, r0, #0x18 - lsr r1, r0, #0x18 - str r1, [sp, #0x8] - ldr r0, [sp, #0x58] - cmp r1, r0 - blo _0201834E -_020183D6: - add sp, #0x44 - pop {r4-r7, pc} - .balign 4 - thumb_func_start FUN_020183DC -FUN_020183DC: ; 0x020183DC - push {r4-r7, lr} - sub sp, #0x44 - str r1, [sp, #0x0] - str r2, [sp, #0x4] - add r7, r0, #0x0 - ldr r0, [sp, #0x58] - add r6, r3, #0x0 - str r0, [sp, #0x58] - ldr r0, [sp, #0x5c] - ldr r4, [sp, #0x68] - str r0, [sp, #0x5c] - ldr r0, [sp, #0x6c] - str r0, [sp, #0x6c] - ldr r0, [r7, #0x0] - str r0, [sp, #0x2c] - cmp r0, #0x0 - bne _02018400 - b _0201853C -_02018400: - ldrb r0, [r7, #0x15] - add r1, sp, #0x40 - add r1, #0x1 - add r2, sp, #0x40 - bl FUN_02017850 - add r0, sp, #0x70 - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _020184A4 - mov r0, #0x0 - str r0, [sp, #0x28] - ldr r0, [sp, #0x58] - cmp r0, #0x0 - bhi _02018420 - b _0201853C -_02018420: - add r1, sp, #0x48 - ldrb r0, [r1, #0x1c] - str r0, [sp, #0x1c] - ldrb r0, [r1, #0x18] - ldr r1, [sp, #0x5c] - str r0, [sp, #0x18] - add r0, r1, r0 - str r0, [sp, #0x14] -_02018430: - ldr r1, [sp, #0x4] - ldr r0, [sp, #0x28] - add r0, r1, r0 - add r1, sp, #0x40 - ldrb r1, [r1, #0x0] - cmp r0, r1 - bge _0201853C - ldr r2, [sp, #0x1c] - ldr r1, [sp, #0x28] - add r2, r2, r1 - ldr r1, [sp, #0x6c] - cmp r2, r1 - bge _0201853C - mov r5, #0x0 - cmp r6, #0x0 - bls _02018490 - ldr r1, [sp, #0x14] - mul r2, r4 - lsl r0, r0, #0x18 - add r1, r1, r2 - lsr r0, r0, #0x18 - str r1, [sp, #0x10] - str r0, [sp, #0x30] -_0201845E: - add r1, sp, #0x40 - ldr r0, [sp, #0x0] - ldrb r1, [r1, #0x1] - add r0, r0, r5 - cmp r0, r1 - bge _02018490 - ldr r1, [sp, #0x18] - add r1, r1, r5 - cmp r1, r4 - bge _02018490 - ldrb r2, [r7, #0x15] - lsl r0, r0, #0x18 - ldr r1, [sp, #0x30] - lsr r0, r0, #0x18 - bl FUN_02017FFC - ldr r1, [sp, #0x10] - ldrb r2, [r1, r5] - ldr r1, [sp, #0x2c] - strb r2, [r1, r0] - add r0, r5, #0x1 - lsl r0, r0, #0x18 - lsr r5, r0, #0x18 - cmp r5, r6 - blo _0201845E -_02018490: - ldr r0, [sp, #0x28] - add r0, r0, #0x1 - lsl r0, r0, #0x18 - lsr r1, r0, #0x18 - str r1, [sp, #0x28] - ldr r0, [sp, #0x58] - cmp r1, r0 - blo _02018430 - add sp, #0x44 - pop {r4-r7, pc} -_020184A4: - mov r0, #0x0 - str r0, [sp, #0x8] - ldr r0, [sp, #0x58] - cmp r0, #0x0 - bls _0201853C - add r1, sp, #0x48 - ldrb r0, [r1, #0x1c] - str r0, [sp, #0x24] - ldrb r0, [r1, #0x18] - str r0, [sp, #0x20] -_020184B8: - ldr r1, [sp, #0x4] - ldr r0, [sp, #0x8] - add r1, r1, r0 - add r0, sp, #0x40 - ldrb r0, [r0, #0x0] - cmp r1, r0 - bge _0201853C - ldr r2, [sp, #0x24] - ldr r0, [sp, #0x8] - add r0, r2, r0 - ldr r2, [sp, #0x6c] - cmp r0, r2 - bge _0201853C - mov r5, #0x0 - cmp r6, #0x0 - bls _0201852C - lsl r1, r1, #0x18 - lsl r0, r0, #0x18 - lsr r1, r1, #0x18 - lsr r0, r0, #0x18 - str r1, [sp, #0x34] - str r0, [sp, #0x3c] -_020184E4: - add r1, sp, #0x40 - ldr r0, [sp, #0x0] - ldrb r1, [r1, #0x1] - add r0, r0, r5 - cmp r0, r1 - bge _0201852C - ldr r1, [sp, #0x20] - add r1, r1, r5 - str r1, [sp, #0xc] - cmp r1, r4 - bge _0201852C - ldrb r2, [r7, #0x15] - lsl r0, r0, #0x18 - ldr r1, [sp, #0x34] - lsr r0, r0, #0x18 - bl FUN_02017FFC - str r0, [sp, #0x38] - ldr r0, [sp, #0xc] - ldr r1, [sp, #0x3c] - lsl r0, r0, #0x18 - ldr r3, [sp, #0x6c] - lsr r0, r0, #0x18 - add r2, r4, #0x0 - bl FUN_02018068 - ldr r1, [sp, #0x5c] - ldrb r2, [r1, r0] - ldr r1, [sp, #0x2c] - ldr r0, [sp, #0x38] - strb r2, [r1, r0] - add r0, r5, #0x1 - lsl r0, r0, #0x18 - lsr r5, r0, #0x18 - cmp r5, r6 - blo _020184E4 -_0201852C: - ldr r0, [sp, #0x8] - add r0, r0, #0x1 - lsl r0, r0, #0x18 - lsr r1, r0, #0x18 - str r1, [sp, #0x8] - ldr r0, [sp, #0x58] - cmp r1, r0 - blo _020184B8 -_0201853C: - add sp, #0x44 - pop {r4-r7, pc} + + thumb_func_start FUN_02018540 FUN_02018540: ; 0x02018540 diff --git a/arm9/src/unk_02016B94_c.c b/arm9/src/unk_02016B94_c.c index c1aca977..67de1987 100644 --- a/arm9/src/unk_02016B94_c.c +++ b/arm9/src/unk_02016B94_c.c @@ -1,8 +1,8 @@ -#include "unk_02016B94.h" #include "global.h" #include "GX_layers.h" #include "gx.h" #include "heap.h" +#include "unk_02016B94.h" extern void FUN_020192D4(); extern void FUN_02019358(); @@ -72,7 +72,6 @@ void (*const UNK_020EDB74[])() = { FUN_020193B4, }; - THUMB_FUNC void *FUN_02016B94(u32 heap_id) { void *ptr = AllocFromHeap(heap_id, 0x5a << 2); @@ -362,8 +361,6 @@ THUMB_FUNC void FUN_02016C18( GLOBAL_ASM("asm/nonmatchings/FUN_02016C18.s") #endif - - #ifdef NONMATCHING THUMB_FUNC void FUN_020170F4(struct UnkStruct2 *param0, u8 param1, u32 param2, u8 param3) { @@ -2161,7 +2158,7 @@ THUMB_FUNC void FUN_02017FE4(u32 param0, u32 param1) FUN_02017FB4(param0, ¶m1, 2, 0); } -THUMB_FUNC u16 FUN_02017FFC(s32 param0, s32 param1, u32 param2) +THUMB_FUNC u16 FUN_02017FFC(u8 param0, u8 param1, u8 param2) { switch (param2) { @@ -2181,19 +2178,19 @@ THUMB_FUNC u16 FUN_02017FFC(s32 param0, s32 param1, u32 param2) } } -THUMB_FUNC u16 FUN_02018068(u32 param0, u32 param1, u32 param2, u32 param3) +THUMB_FUNC u16 FUN_02018068(u8 param0, u8 param1, u8 param2, u8 param3) { u8 r2 = 0; u16 r3 = 0; s16 r4 = param2 - 32; s16 r5 = param3 - 32; - if ((param0 >> 5) != 0) + if (((u32)param0 >> 5) != 0) { r2++; } - if ((param1 >> 5) != 0) + if (((u32)param1 >> 5) != 0) { r2 += 2; } @@ -2242,33 +2239,313 @@ THUMB_FUNC u16 FUN_02018068(u32 param0, u32 param1, u32 param2, u32 param3) return r3; } +extern void FUN_02018170(struct UnkStruct2 *param0, + u32 param1, + u8 param2, + u8 param3, + u8 param4, + u8 param5, + u32 *param6, + u8 param7, + u8 param8, + u8 param9, + u8 param10); + +THUMB_FUNC void FUN_02018148( + struct UnkStruct2 *param0, u32 param1, u32 *param2, u8 param3, u8 param4, u8 param5, u8 param6) +{ + FUN_02018170(param0, param1, param3, param4, param5, param6, param2, 0, 0, param5, param6); +} -extern void FUN_02018170(struct UnkStruct2 *param0, u32 param1, u8 param2, u8 param3, u8 param4, u8 param5, u32 *param6, u8 param7, u8 param8, u8 param9, u8 param10); - +extern void FUN_02018268(struct InnerStruct *param0, + u8 param1, + u8 param2, + u8 param3, + u8 param4, + u16 *param5, + u8 param6, + u8 param7, + u8 param8, + u8 param9, + u8 param10); +extern void FUN_020183DC(struct InnerStruct *param0, + u8 param1, + u8 param2, + u8 param3, + u8 param4, + u8 *param5, + u8 param6, + u8 param7, + u8 param8, + u8 param9, + u8 param10); + +THUMB_FUNC void FUN_02018170(struct UnkStruct2 *param0, + u32 param1, + u8 param2, + u8 param3, + u8 param4, + u8 param5, + u32 *param6, + u8 param7, + u8 param8, + u8 param9, + u8 param10) +{ + if (param0->unk08[param1].unk1c != 1) + { + FUN_02018268(¶m0->unk08[param1], + param2, + param3, + param4, + param5, + param6, + param7, + param8, + param9, + param10, + 0); + } + else + { + FUN_020183DC(¶m0->unk08[param1], + param2, + param3, + param4, + param5, + param6, + param7, + param8, + param9, + param10, + 0); + } +} -THUMB_FUNC void FUN_02018148(struct UnkStruct2 *param0, u32 param1, u32 *param2, u8 param3, u8 param4, u8 param5, u8 param6) { - FUN_02018170(param0, param1, param3, param4, param5, param6, param2, 0, 0, param5, param6); +THUMB_FUNC void FUN_020181EC(struct UnkStruct2 *param0, + u32 param1, + u8 param2, + u8 param3, + u8 param4, + u8 param5, + u32 *param6, + u8 param7, + u8 param8, + u8 param9, + u8 param10) +{ + if (param0->unk08[param1].unk1c != 1) + { + FUN_02018268(¶m0->unk08[param1], + param2, + param3, + param4, + param5, + param6, + param7, + param8, + param9, + param10, + 1); + } + else + { + FUN_020183DC(¶m0->unk08[param1], + param2, + param3, + param4, + param5, + param6, + param7, + param8, + param9, + param10, + 1); + } } +THUMB_FUNC void FUN_02018268(struct InnerStruct *param0, + u8 param1, + u8 param2, + u8 param3, + u8 param4, + u16 *param5, + u8 param6, + u8 param7, + u8 param8, + u8 param9, + u8 param10) +{ + void *st2c = param0->unk08; + + if (st2c == 0) + { + return; + } + + u8 st41; + u8 st40; + FUN_02017850(param0->unk1d, &st41, &st40); + + u8 i; + u8 j; + if (param10 == 0) + { + for (i = 0; i < param4; i++) + { + + if (param2 + i >= st40) + { + break; + } + + if (param7 + i >= param9) + { + break; + } + for (j = 0; j < param3; j++) + { + + if (param1 + j >= st41) + { + break; + } -extern void FUN_02018268(struct InnerStruct *param0, u8 param1, u8 param2, u8 param3, u8 param4, u32 *param5, u8 param6, u8 param7, u8 param8, u8 param9, u8 param10); -extern void FUN_020183DC(struct InnerStruct *param0, u8 param1, u8 param2, u8 param3, u8 param4, u32 *param5, u8 param6, u8 param7, u8 param8, u8 param9, u8 param10); + if (param6 + j >= param8) + { + break; + } -THUMB_FUNC void FUN_02018170(struct UnkStruct2 *param0, u32 param1, u8 param2, u8 param3, u8 param4, u8 param5, u32 *param6, u8 param7, u8 param8, u8 param9, u8 param10) { - if (param0->unk08[param1].unk1c != 1) { - FUN_02018268(¶m0->unk08[param1], param2, param3, param4, param5, param6, param7, param8, param9, param10, 0); - } else { - FUN_020183DC(¶m0->unk08[param1], param2, param3, param4, param5, param6, param7, param8, param9, param10, 0); + ((u16 *)st2c)[FUN_02017FFC(param1 + j, param2 + i, param0->unk1d)] = + param5[param6 + param8 * (param7 + i) + j]; + } + } + } + else + { + for (i = 0; i < param4; i++) + { + + if (param2 + i >= st40) + { + break; + } + + if (param7 + i >= param9) + { + break; + } + + for (j = 0; j < param3; j++) + { + + if (param1 + j >= st41) + { + break; + } + + if (param6 + j >= param8) + { + break; + } + + ((u16 *)st2c)[FUN_02017FFC(param1 + j, param2 + i, param0->unk1d)] = + param5[FUN_02018068(param6 + j, param7 + i, param8, param9)]; + } + } } } +THUMB_FUNC void FUN_020183DC(struct InnerStruct *param0, + u8 param1, + u8 param2, + u8 param3, + u8 param4, + u8 *param5, + u8 param6, + u8 param7, + u8 param8, + u8 param9, + u8 param10) +{ + void *st2c = param0->unk08; + + if (st2c == 0) + { + return; + } + + u8 st41; + u8 st40; + FUN_02017850(param0->unk1d, &st41, &st40); + u8 i; + u8 j; + if (param10 == 0) + { + for (i = 0; i < param4; i++) + { -THUMB_FUNC void FUN_020181EC(struct UnkStruct2 *param0, u32 param1, u8 param2, u8 param3, u8 param4, u8 param5, u32 *param6, u8 param7, u8 param8, u8 param9, u8 param10) { - if (param0->unk08[param1].unk1c != 1) { - FUN_02018268(¶m0->unk08[param1], param2, param3, param4, param5, param6, param7, param8, param9, param10, 1); - } else { - FUN_020183DC(¶m0->unk08[param1], param2, param3, param4, param5, param6, param7, param8, param9, param10, 1); + if (param2 + i >= st40) + { + break; + } + + if (param7 + i >= param9) + { + break; + } + + for (j = 0; j < param3; j++) + { + + if (param1 + j >= st41) + { + break; + } + + if (param6 + j >= param8) + { + break; + } + + ((u8 *)st2c)[FUN_02017FFC(param1 + j, param2 + i, param0->unk1d)] = + param5[param6 + param8 * (param7 + i) + j]; + } + } + } + else + { + for (i = 0; i < param4; i++) + { + + if (param2 + i >= st40) + { + break; + } + + if (param7 + i >= param9) + { + break; + } + + for (j = 0; j < param3; j++) + { + + if (param1 + j >= st41) + { + break; + } + + if (param6 + j >= param8) + { + break; + } + + ((u8 *)st2c)[FUN_02017FFC(param1 + j, param2 + i, param0->unk1d)] = + param5[FUN_02018068(param6 + j, param7 + i, param8, param9)]; + } + } } } |