diff options
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/unk_0202F150.c | 597 |
1 files changed, 326 insertions, 271 deletions
diff --git a/arm9/src/unk_0202F150.c b/arm9/src/unk_0202F150.c index 15a67f8d..7973702c 100644 --- a/arm9/src/unk_0202F150.c +++ b/arm9/src/unk_0202F150.c @@ -763,86 +763,98 @@ THUMB_FUNC u32 FUN_0202FE2C(int param0) #else THUMB_FUNC asm u32 FUN_0202FE2C(int param0) { - push{ r3 - r7, lr } sub sp, #0x10 str r0, [ sp, #0x0 ] mov r0, #0x0 str r0, - [ sp, #0x4 ] bl FUN_02033534 lsl r0, r0, #0x10 lsr r0, r0, #0x10 bl FUN_02031228 str r0, - [ sp, #0xc ] bl FUN_02033534 lsl r0, r0, #0x10 lsr r0, r0, #0x10 bl FUN_0202D858 add r0, r0, - #0x1 mov r7, #0x0 str r0, [ sp, #0x8 ] cmp r0, #0x0 ble _0202FED0 ldr r0, - [ sp, #0x0 ] mov r1, #0xc0 add r6, r0, #0x0 add r4, r7, #0x0 add r5, r7, #0x0 mul r6, - r1 _0202FE66 : ldr r0, - = UNK_021C59F4 ldr r1, - [ r0, #0x4 ] ldr r0, - = 0x0000047C add r0, - r1, - r0 add r0, - r0, - r4 bl FUN_0202D4BC lsl r0, - r7, - #0x10 lsr r0, - r0, - #0x10 bl FUN_02030E7C cmp r0, - #0x0 beq _0202FE90 ldr r0, - = UNK_021C59F4 mov r1, - #0xe ldr r0, - [ r0, #0x4 ] add r0, - r6, - r0 add r2, - r5, - r0 mov r0, - #0x55 lsl r0, - r0, - #0x2 strb r1, - [ r2, r0 ] _0202FE90 : ldr r0, - = UNK_021C59F4 mov r2, - #0x55 ldr r1, - [ r0, #0x4 ] ldr r0, - = 0x0000047C lsl r2, - r2, - #0x2 add r0, - r1, - r0 add r1, - r1, - r2 add r1, - r1, - r6 ldr r2, - [ sp, #0xc ] add r0, - r0, - r4 add r1, - r1, - r5 bl FUN_0202D400 ldr r0, - = UNK_021C59F4 ldr r0, - [ r0, #0x4 ] add r0, - r6, - r0 add r1, - r5, - r0 mov r0, - #0x55 lsl r0, - r0, - #0x2 ldrb r0, - [ r1, r0 ] cmp r0, - #0xe bne _0202FEC2 ldr r0, - [ sp, #0x4 ] add r0, - r0, - #0x1 str r0, - [ sp, #0x4 ] _0202FEC2 : ldr r0, - [ sp, #0xc ] add r7, - r7, - #0x1 add r5, - r5, - r0 ldr r0, - [ sp, #0x8 ] add r4, - #0xc cmp r7, - r0 blt _0202FE66 _0202FED0 - : ldr r1, - [ sp, #0x4 ] ldr r0, - [ sp, #0x8 ] cmp r1, - r0 bne _0202FEDE add sp, - #0x10 mov r0, - #0x0 pop{ r3 - r7, pc } _0202FEDE : mov r0, - #0x1 add sp, - #0x10 pop - { - r3 - r7, pc - } + // clang-format off + push {r3-r7, lr} + sub sp, #0x10 + str r0, [sp, #0x0] + mov r0, #0x0 + str r0, [sp, #0x4] + bl FUN_02033534 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl FUN_02031228 + str r0, [sp, #0xc] + bl FUN_02033534 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl FUN_0202D858 + add r0, r0, #0x1 + mov r7, #0x0 + str r0, [sp, #0x8] + cmp r0, #0x0 + ble _0202FED0 + ldr r0, [sp, #0x0] + mov r1, #0xc0 + add r6, r0, #0x0 + add r4, r7, #0x0 + add r5, r7, #0x0 + mul r6, r1 +_0202FE66: + ldr r0, =UNK_021C59F4 + ldr r1, [r0, #0x4] + ldr r0, =0x0000047C + add r0, r1, r0 + add r0, r0, r4 + bl FUN_0202D4BC + lsl r0, r7, #0x10 + lsr r0, r0, #0x10 + bl FUN_02030E7C + cmp r0, #0x0 + beq _0202FE90 + ldr r0, =UNK_021C59F4 + mov r1, #0xe + ldr r0, [r0, #0x4] + add r0, r6, r0 + add r2, r5, r0 + mov r0, #0x55 + lsl r0, r0, #0x2 + strb r1, [r2, r0] +_0202FE90: + ldr r0, =UNK_021C59F4 + mov r2, #0x55 + ldr r1, [r0, #0x4] + ldr r0, =0x0000047C + lsl r2, r2, #0x2 + add r0, r1, r0 + add r1, r1, r2 + add r1, r1, r6 + ldr r2, [sp, #0xc] + add r0, r0, r4 + add r1, r1, r5 + bl FUN_0202D400 + ldr r0, =UNK_021C59F4 + ldr r0, [r0, #0x4] + add r0, r6, r0 + add r1, r5, r0 + mov r0, #0x55 + lsl r0, r0, #0x2 + ldrb r0, [r1, r0] + cmp r0, #0xe + bne _0202FEC2 + ldr r0, [sp, #0x4] + add r0, r0, #0x1 + str r0, [sp, #0x4] +_0202FEC2: + ldr r0, [sp, #0xc] + add r7, r7, #0x1 + add r5, r5, r0 + ldr r0, [sp, #0x8] + add r4, #0xc + cmp r7, r0 + blt _0202FE66 +_0202FED0: + ldr r1, [sp, #0x4] + ldr r0, [sp, #0x8] + cmp r1, r0 + bne _0202FEDE + add sp, #0x10 + mov r0, #0x0 + pop {r3-r7, pc} +_0202FEDE: + mov r0, #0x1 + add sp, #0x10 + pop {r3-r7, pc} + // clang-format on } #endif @@ -1125,7 +1137,6 @@ THUMB_FUNC void FUN_0203026C(u32 param0, u8 *param1, u32 param2) FUN_0202D3A4(&UNK_021C59F4.unk04->unk470, param1 + 4, param1[3], 0x5FF); } - THUMB_FUNC void FUN_020303BC(u32 param0, u32 param1, u16 param2) { if (UNK_021C59F4.unk04->unk66F[param0] != 0) @@ -1348,173 +1359,173 @@ THUMB_FUNC void FUN_02030674() #else THUMB_FUNC asm void FUN_02030674() { - push{ r3 - r7, lr } ldr r7, = UNK_021C59F4 mov r6, #0x0 ldr r5, [ r7, #0x4 ] ldr r2, - = 0x0000062C add r4, r6, #0x0 ldrb r0, [ r5, r2 ] cmp r0, - #0x0 beq _02030690 sub r1, r2, #0x4 ldrh r1, [ r5, r1 ] mov r3, - #0xf0 tst r3, - r1 bne _02030692 _02030690 : b _02030794 _02030692 : cmp r0, - #0x2 bne _020306D0 mov r0, - #0x20 tst r0, - r1 beq _020306A4 mov r0, - #0x10 orr r0, - r6 lsl r0, - r0, - #0x10 lsr r4, - r0, - #0x10 _020306A4 : mov r0, - #0x10 tst r0, - r1 beq _020306B2 mov r0, - #0x20 orr r0, - r4 lsl r0, - r0, - #0x10 lsr r4, - r0, - #0x10 _020306B2 : mov r0, - #0x40 tst r0, - r1 beq _020306C0 mov r0, - #0x80 orr r0, - r4 lsl r0, - r0, - #0x10 lsr r4, - r0, - #0x10 _020306C0 : mov r0, - #0x80 tst r0, - r1 beq _0203077E mov r0, - #0x40 orr r0, - r4 lsl r0, - r0, - #0x10 lsr r4, - r0, - #0x10 b _0203077E _020306D0 : add r0, - r2, - #0x2 ldrh r0, - [ r5, r0 ] cmp r0, - #0x0 beq _020306F2 add r4, - r0, - #0x0 add r0, - r2, - #0x1 ldrsb r0, - [ r5, r0 ] sub r1, - r0, - #0x1 add r0, - r2, - #0x1 strb r1, - [ r5, r0 ] ldr r1, - [ r7, #0x4 ] ldrsb r0, - [ r1, r0 ] cmp r0, - #0x0 bge _0203077E add r0, - r2, - #0x2 strh r6, - [ r1, r0 ] b _0203077E _020306F2 : add r0, - r2, - #0x0 sub r0, - #0x34 add r6, - r5, - r0 sub r2, - #0x34 ldr r0, - [ r6, #0x8 ] ldr r1, - [ r6, #0xc ] ldr r2, - [ r5, r2 ] ldr r3, - [ r6, #0x4 ] bl _ll_mul add r3, - r0, - #0x0 add r2, - r1, - #0x0 ldr r0, - [ r6, #0x10 ] ldr r1, - [ r6, #0x14 ] add r0, - r0, - r3 adc r1, - r2 ldr r2, - = 0x000005F8 str r0, - [ r5, r2 ] mov r2, - #0x0 str r1, - [ r6, #0x4 ] lsr r0, - r1, - #0x1e lsl r1, - r2, - #0x2 orr r1, - r0 cmp r1, - #0x3 bhi _02030746 add r0, - r1, - r1 add r0, - pc ldrh r0, - [ r0, #0x6 ] lsl r0, - r0, - #0x10 asr r0, - r0, - #0x10 add pc, - r0 _02030730 - : // jump table (using 16-bit offset) - // huge hack to get the correct jump offset. Is there a way to write constants? - lsl r6, - r0, - #0x0 // case 0 - lsl r2, - r1, - #0x0 // case 1 - lsl r6, - r1, - #0x0 // case 2 - lsl r2, - r2, - #0x0 // case 3 - - // intended jump offset - // .short _02030738 - _02030730 - 2; case 0 - // .short _0203073C - _02030730 - 2; case 1 - // .short _02030740 - _02030730 - 2; case 2 - // .short _02030744 - _02030730 - 2; case 3 - _02030738 : mov r4, - #0x20 b _02030746 _0203073C : mov r4, - #0x10 b _02030746 _02030740 : mov r4, - #0x40 b _02030746 _02030744 : mov r4, - #0x80 _02030746 : ldr r0, - = UNK_021C59F4 ldr r5, - [ r0, #0x4 ] ldr r0, - = 0x000005F8 add r6, - r5, - r0 ldr r0, - [ r6, #0x8 ] ldr r1, - [ r6, #0xc ] ldr r2, - [ r6, #0x0 ] ldr r3, - [ r6, #0x4 ] bl _ll_mul ldr r3, - [ r6, #0x10 ] ldr r2, - [ r6, #0x14 ] add r0, - r3, - r0 adc r2, - r1 ldr r1, - = 0x000005F8 mov r3, - #0x0 str r0, - [ r5, r1 ] str r2, - [ r6, #0x4 ] lsr r0, - r2, - #0x1c lsl r2, - r3, - #0x4 orr r2, - r0 add r0, - r1, - #0x0 add r0, - #0x35 strb r2, - [ r5, r0 ] ldr r0, - = UNK_021C59F4 add r1, - #0x36 ldr r0, - [ r0, #0x4 ] strh r4, - [ r0, r1 ] _0203077E : ldr r2, - = UNK_021C59F4 ldr r1, - = 0x00000628 ldr r5, - [ r2, #0x4 ] mov r0, - #0xf0 ldrh r3, - [ r5, r1 ] bic r3, - r0 strh r3, - [ r5, r1 ] ldr r2, - [ r2, #0x4 ] ldrh r0, - [ r2, r1 ] add r0, - r0, - r4 strh r0, - [ r2, r1 ] _02030794 : pop - { - r3 - r7, pc - } + // clang-format off + push {r3-r7, lr} + ldr r7, =UNK_021C59F4 + mov r6, #0x0 + ldr r5, [r7, #0x4] + ldr r2, =0x0000062C + add r4, r6, #0x0 + ldrb r0, [r5, r2] + cmp r0, #0x0 + beq _02030690 + sub r1, r2, #0x4 + ldrh r1, [r5, r1] + mov r3, #0xf0 + tst r3, r1 + bne _02030692 +_02030690: + b _02030794 +_02030692: + cmp r0, #0x2 + bne _020306D0 + mov r0, #0x20 + tst r0, r1 + beq _020306A4 + mov r0, #0x10 + orr r0, r6 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 +_020306A4: + mov r0, #0x10 + tst r0, r1 + beq _020306B2 + mov r0, #0x20 + orr r0, r4 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 +_020306B2: + mov r0, #0x40 + tst r0, r1 + beq _020306C0 + mov r0, #0x80 + orr r0, r4 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 +_020306C0: + mov r0, #0x80 + tst r0, r1 + beq _0203077E + mov r0, #0x40 + orr r0, r4 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 + b _0203077E +_020306D0: + add r0, r2, #0x2 + ldrh r0, [r5, r0] + cmp r0, #0x0 + beq _020306F2 + add r4, r0, #0x0 + add r0, r2, #0x1 + ldrsb r0, [r5, r0] + sub r1, r0, #0x1 + add r0, r2, #0x1 + strb r1, [r5, r0] + ldr r1, [r7, #0x4] + ldrsb r0, [r1, r0] + cmp r0, #0x0 + bge _0203077E + add r0, r2, #0x2 + strh r6, [r1, r0] + b _0203077E +_020306F2: + add r0, r2, #0x0 + sub r0, #0x34 + add r6, r5, r0 + sub r2, #0x34 + ldr r0, [r6, #0x8] + ldr r1, [r6, #0xc] + ldr r2, [r5, r2] + ldr r3, [r6, #0x4] + bl _ll_mul + add r3, r0, #0x0 + add r2, r1, #0x0 + ldr r0, [r6, #0x10] + ldr r1, [r6, #0x14] + add r0, r0, r3 + adc r1, r2 + ldr r2, =0x000005F8 + str r0, [r5, r2] + mov r2, #0x0 + str r1, [r6, #0x4] + lsr r0, r1, #0x1e + lsl r1, r2, #0x2 + orr r1, r0 + cmp r1, #0x3 + bhi _02030746 + add r0, r1, r1 + add r0, pc + ldrh r0, [r0, #0x6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_02030730: // jump table (using 16-bit offset) + // huge hack to get the correct jump offset. Is there a way to write constants? + lsl r6, r0, #0x0 // case 0 + lsl r2, r1, #0x0 // case 1 + lsl r6, r1, #0x0 // case 2 + lsl r2, r2, #0x0 // case 3 + + // intended jump offset + // .short _02030738 - _02030730 - 2; case 0 + // .short _0203073C - _02030730 - 2; case 1 + // .short _02030740 - _02030730 - 2; case 2 + // .short _02030744 - _02030730 - 2; case 3 +_02030738: + mov r4, #0x20 + b _02030746 +_0203073C: + mov r4, #0x10 + b _02030746 +_02030740: + mov r4, #0x40 + b _02030746 +_02030744: + mov r4, #0x80 +_02030746: + ldr r0, =UNK_021C59F4 + ldr r5, [r0, #0x4] + ldr r0, =0x000005F8 + add r6, r5, r0 + ldr r0, [r6, #0x8] + ldr r1, [r6, #0xc] + ldr r2, [r6, #0x0] + ldr r3, [r6, #0x4] + bl _ll_mul + ldr r3, [r6, #0x10] + ldr r2, [r6, #0x14] + add r0, r3, r0 + adc r2, r1 + ldr r1, =0x000005F8 + mov r3, #0x0 + str r0, [r5, r1] + str r2, [r6, #0x4] + lsr r0, r2, #0x1c + lsl r2, r3, #0x4 + orr r2, r0 + add r0, r1, #0x0 + add r0, #0x35 + strb r2, [r5, r0] + ldr r0, =UNK_021C59F4 + add r1, #0x36 + ldr r0, [r0, #0x4] + strh r4, [r0, r1] +_0203077E: + ldr r2, =UNK_021C59F4 + ldr r1, =0x00000628 + ldr r5, [r2, #0x4] + mov r0, #0xf0 + ldrh r3, [r5, r1] + bic r3, r0 + strh r3, [r5, r1] + ldr r2, [r2, #0x4] + ldrh r0, [r2, r1] + add r0, r0, r4 + strh r0, [r2, r1] +_02030794: + pop {r3-r7, pc} + // clang-format on } #endif @@ -1569,7 +1580,6 @@ THUMB_FUNC void FUN_0203086C() { } - THUMB_FUNC u32 FUN_02030870(u8 *param0) { if (UNK_021C59F4.unk04->unk62A != 0) @@ -1830,8 +1840,6 @@ extern s16 FUN_0202D9A0(u32 param0); extern u32 FUN_0202DA04(u32 param0); extern u32 FUN_0202DA40(u32 param0, u32 param1, u16 param2); - - THUMB_FUNC void FUN_02030C8C( s16 *param0, u32 param1, u32 param2, u32 param3, struct UnkStruct2 *param4) { @@ -2113,7 +2121,6 @@ THUMB_FUNC void FUN_0203105C(u32 param0, u32 param1, u32 param2) FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 0, 0); } - THUMB_FUNC void FUN_02031088() { if (UNK_021C59F4.unk04 != NULL) @@ -2324,25 +2331,73 @@ THUMB_FUNC void FUN_020312BC(u32 param0) #else THUMB_FUNC asm void FUN_020312BC(u32 param0) { - push{ r3 - r7, lr } sub sp, #0x20 add r4, r0, #0x0 add r0, sp, #0x10 add r1, sp, - #0x4 bl GF_RTC_CopyDateTime ldr r0, - = gMain ldr r6, [ sp, #0x10 ] mov r5, #0x0 lsr r7, r6, #0x1c lsl r5, r5, #0x4 ldr r1, - [ sp, #0xc ] ldr r0, [ r0, #0x2c ] lsl r6, r6, #0x4 add r3, r1, r0 ldr r0, - [ sp, #0x18 ] orr r5, r7 str r0, [ sp, #0x0 ] ldr r0, [ sp, #0x14 ] ldr r1, - [ sp, #0x4 ] add r6, r0, - r6 ldr r0, = 0x00000000 ldr r2, [ sp, #0x8 ] adc r0, r5 lsr r5, r6, #0x1b lsl r0, r0, - #0x5 orr r0, r5 ldr r5, [ sp, #0x0 ] lsl r6, r6, #0x5 add r6, r5, r6 ldr r5, - = 0x00000000 adc r5, r0 lsr r0, r6, #0x1b lsl r5, r5, #0x5 orr r5, r0 lsl r0, r6, - #0x5 add r6, r1, r0 ldr r1, = 0x00000000 adc r1, r5 lsr r0, r6, #0x1a lsl r1, r1, - #0x6 orr r1, r0 lsl r0, r6, #0x6 add r5, r2, r0 ldr r2, = 0x00000000 adc r2, - r1 lsr r0, r5, #0x1a lsl r1, r2, #0x6 orr r1, r0 lsl r0, r5, #0x6 add r2, r3, - r0 ldr r0, = 0x00000000 str r2, [ r4, #0x0 ] adc r0, r1 str r0, [ r4, #0x4 ] ldr r1, - = 0x6C078965 ldr r0, = 0x5D588B65 str r1, [ r4, #0x8 ] str r0, [ r4, #0xc ] ldr r0, - = 0x00269EC3 str r0, [ r4, #0x10 ] mov r0, #0x0 str r0, [ r4, #0x14 ] add sp, - #0x20 pop - { - r3 - r7, pc - } + // clang-format off + push {r3-r7, lr} + sub sp, #0x20 + add r4, r0, #0x0 + add r0, sp, #0x10 + add r1, sp, #0x4 + bl GF_RTC_CopyDateTime + ldr r0, =gMain + ldr r6, [sp, #0x10] + mov r5, #0x0 + lsr r7, r6, #0x1c + lsl r5, r5, #0x4 + ldr r1, [sp, #0xc] + ldr r0, [r0, #0x2c] + lsl r6, r6, #0x4 + add r3, r1, r0 + ldr r0, [sp, #0x18] + orr r5, r7 + str r0, [sp, #0x0] + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x4] + add r6, r0, r6 + ldr r0, =0x00000000 + ldr r2, [sp, #0x8] + adc r0, r5 + lsr r5, r6, #0x1b + lsl r0, r0, #0x5 + orr r0, r5 + ldr r5, [sp, #0x0] + lsl r6, r6, #0x5 + add r6, r5, r6 + ldr r5, =0x00000000 + adc r5, r0 + lsr r0, r6, #0x1b + lsl r5, r5, #0x5 + orr r5, r0 + lsl r0, r6, #0x5 + add r6, r1, r0 + ldr r1, =0x00000000 + adc r1, r5 + lsr r0, r6, #0x1a + lsl r1, r1, #0x6 + orr r1, r0 + lsl r0, r6, #0x6 + add r5, r2, r0 + ldr r2, =0x00000000 + adc r2, r1 + lsr r0, r5, #0x1a + lsl r1, r2, #0x6 + orr r1, r0 + lsl r0, r5, #0x6 + add r2, r3, r0 + ldr r0, =0x00000000 + str r2, [r4, #0x0] + adc r0, r1 + str r0, [r4, #0x4] + ldr r1, =0x6C078965 + ldr r0, =0x5D588B65 + str r1, [r4, #0x8] + str r0, [r4, #0xc] + ldr r0, =0x00269EC3 + str r0, [r4, #0x10] + mov r0, #0x0 + str r0, [r4, #0x14] + add sp, #0x20 + pop {r3-r7, pc} + // clang-format on } #endif |