diff options
Diffstat (limited to 'arm9/modules/05/asm/mod05_021E7504.s')
-rw-r--r-- | arm9/modules/05/asm/mod05_021E7504.s | 316 |
1 files changed, 316 insertions, 0 deletions
diff --git a/arm9/modules/05/asm/mod05_021E7504.s b/arm9/modules/05/asm/mod05_021E7504.s new file mode 100644 index 00000000..d7f960b2 --- /dev/null +++ b/arm9/modules/05/asm/mod05_021E7504.s @@ -0,0 +1,316 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD05_021E7504 +MOD05_021E7504: ; 0x021E7504 + add r1, r0, #0 + ldr r0, [r1, #0x10] + cmp r0, #3 + bhi _021E7536 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_021E7518: ; jump table + .short _021E7520 - _021E7518 - 2 ; case 0 + .short _021E752C - _021E7518 - 2 ; case 1 + .short _021E7526 - _021E7518 - 2 ; case 2 + .short _021E7532 - _021E7518 - 2 ; case 3 +_021E7520: + mov r0, #2 + str r0, [r1, #0x10] + b _021E7536 +_021E7526: + mov r0, #1 + str r0, [r1, #0x10] + b _021E7536 +_021E752C: + mov r0, #3 + str r0, [r1, #0x10] + b _021E7536 +_021E7532: + mov r0, #0 + str r0, [r1, #0x10] +_021E7536: + ldr r0, [r1] + ldr r3, _021E7540 ; =FUN_02055304 + ldr r0, [r0, #0x38] + ldr r1, [r1, #0x10] + bx r3 + .balign 4, 0 +_021E7540: .word FUN_02055304 + + thumb_func_start MOD05_021E7544 +MOD05_021E7544: ; 0x021E7544 + push {r4, r5, r6, r7, lr} + sub sp, #0x24 + add r5, r1, #0 + add r7, r0, #0 + ldr r0, [r5] + ldr r0, [r0, #0x38] + bl FUN_020553A0 + add r6, r0, #0 + ldr r0, [r5, #8] + cmp r0, #0 + beq _021E7564 + cmp r0, #1 + beq _021E756E + add sp, #0x24 + pop {r4, r5, r6, r7, pc} +_021E7564: + mov r0, #1 + str r0, [r5, #8] + ldr r0, _021E760C ; =0x0000064F + bl FUN_020054C8 +_021E756E: + ldr r0, [r5, #0xc] + lsr r2, r0, #0x1f + lsl r1, r0, #0x1f + sub r1, r1, r2 + mov r0, #0x1f + ror r1, r0 + add r0, r2, r1 + beq _021E7584 + add r0, r5, #0 + bl MOD05_021E7504 +_021E7584: + add r0, r6, #0 + add r1, sp, #0x18 + bl FUN_02058BA4 + ldr r4, [r5, #0xc] + add r0, r4, #0 + bl _dflt + str r0, [sp, #0x14] + lsl r0, r4, #0xb + str r1, [sp, #0x10] + bl _dflt + add r2, r0, #0 + add r3, r1, #0 + ldr r0, _021E7610 ; =0x9999999A + ldr r1, _021E7614 ; =0x40C19999 + bl _dadd + add r2, r0, #0 + add r3, r1, #0 + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x10] + bl _dmul + bl _dfix + str r0, [sp, #0x1c] + add r0, r6, #0 + add r1, sp, #0x18 + bl FUN_02058BB4 + ldr r0, [r5, #0xc] + add r0, r0, #1 + str r0, [r5, #0xc] + cmp r0, #0x14 + bne _021E75EA + mov r0, #6 + str r0, [sp] + mov r1, #0 + mov r0, #1 + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r0, #2 + add r2, r1, #0 + add r3, r1, #0 + bl FUN_0200E1D0 + add sp, #0x24 + pop {r4, r5, r6, r7, pc} +_021E75EA: + ble _021E7606 + bl FUN_0200E308 + cmp r0, #0 + beq _021E7606 + ldr r0, [r5, #4] + mov r1, #1 + str r1, [r0] + add r0, r5, #0 + bl FreeToHeap + add r0, r7, #0 + bl FUN_0200CAB4 +_021E7606: + add sp, #0x24 + pop {r4, r5, r6, r7, pc} + nop +_021E760C: .word 0x0000064F +_021E7610: .word 0x9999999A +_021E7614: .word 0x40C19999 + + thumb_func_start MOD05_021E7618 +MOD05_021E7618: ; 0x021E7618 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x20 + add r5, r1, #0 + add r6, r0, #0 + ldr r0, [r5] + ldr r0, [r0, #0x38] + bl FUN_020553A0 + ldr r1, [r5, #8] + add r4, r0, #0 + cmp r1, #0 + beq _021E763C + cmp r1, #1 + beq _021E7694 + cmp r1, #2 + beq _021E771C + add sp, #0x20 + pop {r3, r4, r5, r6, r7, pc} +_021E763C: + bl FUN_02058914 + add r0, r4, #0 + add r1, sp, #0x14 + bl FUN_02058BA4 + ldr r1, [r5, #0xc] + mov r0, #0x14 + sub r6, r0, r1 + add r0, r6, #0 + bl _dflt + str r0, [sp, #0xc] + lsl r0, r6, #0xb + add r7, r1, #0 + bl _dflt + add r2, r0, #0 + add r3, r1, #0 + ldr r0, _021E7744 ; =0x9999999A + ldr r1, _021E7748 ; =0x40C19999 + bl _dadd + add r2, r0, #0 + add r3, r1, #0 + ldr r0, [sp, #0xc] + add r1, r7, #0 + bl _dmul + bl _dfix + str r0, [sp, #0x18] + add r0, r4, #0 + add r1, sp, #0x14 + bl FUN_02058BB4 + add r0, r4, #0 + bl MOD05_021F1D8C + ldr r0, _021E774C ; =0x0000064F + bl FUN_020054C8 + mov r0, #1 + str r0, [r5, #8] +_021E7694: + ldr r0, [r5, #0xc] + lsr r2, r0, #0x1f + lsl r1, r0, #0x1f + sub r1, r1, r2 + mov r0, #0x1f + ror r1, r0 + add r0, r2, r1 + beq _021E76AA + add r0, r5, #0 + bl MOD05_021E7504 +_021E76AA: + add r0, r4, #0 + add r1, sp, #0x14 + bl FUN_02058BA4 + ldr r1, [r5, #0xc] + mov r0, #0x14 + sub r6, r0, r1 + add r0, r6, #0 + bl _dflt + str r0, [sp, #0x10] + lsl r0, r6, #0xb + add r7, r1, #0 + bl _dflt + add r2, r0, #0 + add r3, r1, #0 + ldr r0, _021E7744 ; =0x9999999A + ldr r1, _021E7748 ; =0x40C19999 + bl _dadd + add r2, r0, #0 + add r3, r1, #0 + ldr r0, [sp, #0x10] + add r1, r7, #0 + bl _dmul + bl _dfix + str r0, [sp, #0x18] + add r0, r4, #0 + add r1, sp, #0x14 + bl FUN_02058BB4 + ldr r0, [r5, #0xc] + add r0, r0, #1 + str r0, [r5, #0xc] + cmp r0, #2 + bne _021E770E + mov r0, #6 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r1, #4 + str r1, [sp, #8] + add r1, r0, #0 + add r2, r0, #0 + mov r3, #0 + bl FUN_0200E1D0 +_021E770E: + ldr r0, [r5, #0xc] + cmp r0, #0x14 + ble _021E7740 + mov r0, #2 + add sp, #0x20 + str r0, [r5, #8] + pop {r3, r4, r5, r6, r7, pc} +_021E771C: + bl FUN_0200E308 + cmp r0, #0 + beq _021E7740 + ldr r0, [r5] + mov r1, #1 + ldr r0, [r0, #0x38] + bl FUN_02055304 + ldr r0, [r5, #4] + mov r1, #1 + str r1, [r0] + add r0, r5, #0 + bl FreeToHeap + add r0, r6, #0 + bl FUN_0200CAB4 +_021E7740: + add sp, #0x20 + pop {r3, r4, r5, r6, r7, pc} + .balign 4, 0 +_021E7744: .word 0x9999999A +_021E7748: .word 0x40C19999 +_021E774C: .word 0x0000064F + + thumb_func_start MOD05_021E7750 +MOD05_021E7750: ; 0x021E7750 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #4 + mov r1, #0x14 + add r7, r2, #0 + bl AllocFromHeapAtEnd + add r4, r0, #0 + mov r1, #0 + mov r2, #0x14 + bl MI_CpuFill8 + str r5, [r4] + str r7, [r4, #4] + ldr r0, [r5, #0x38] + bl FUN_020552F8 + str r0, [r4, #0x10] + cmp r6, #0 + beq _021E7786 + ldr r0, _021E7794 ; =MOD05_021E7544 + add r1, r4, #0 + mov r2, #0x64 + bl FUN_0200CA44 + pop {r3, r4, r5, r6, r7, pc} +_021E7786: + ldr r0, _021E7798 ; =MOD05_021E7618 + add r1, r4, #0 + mov r2, #0x64 + bl FUN_0200CA44 + pop {r3, r4, r5, r6, r7, pc} + nop +_021E7794: .word MOD05_021E7544 +_021E7798: .word MOD05_021E7618 |