diff options
-rw-r--r-- | arm9/arm9.lcf | 4 | ||||
-rw-r--r-- | arm9/asm/unk_020010A8.s (renamed from arm9/asm/unk_02000E0C.s) | 917 | ||||
-rw-r--r-- | arm9/asm/unk_02001B80.s | 919 | ||||
-rw-r--r-- | arm9/lib/include/OS_system.h | 1 | ||||
-rw-r--r-- | arm9/lib/include/syscall.h | 6 | ||||
-rw-r--r-- | arm9/lib/src/OS_system.c | 1 | ||||
-rw-r--r-- | arm9/src/FUN_02000DE4.c | 220 | ||||
-rw-r--r-- | arm9/src/main.c | 214 | ||||
-rw-r--r-- | include/main.h | 11 |
9 files changed, 1163 insertions, 1130 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 9ae0d28a..c2d8dd2d 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -122,7 +122,9 @@ SECTIONS { crt0.o (.rodata) * (.version) main.o (.text) - unk_02000E0C.o (.text) + FUN_02000DE4.o (.text) + unk_020010A8.o (.text) + unk_02001B80.o (.text) string_util.o (.text) unk_020023C0.o (.text) poke_overlay.o (.text) diff --git a/arm9/asm/unk_02000E0C.s b/arm9/asm/unk_020010A8.s index 15275ac8..56145306 100644 --- a/arm9/asm/unk_02000E0C.s +++ b/arm9/asm/unk_020010A8.s @@ -2,8 +2,6 @@ .include "global.inc" .text - .extern FUN_02000E9C - .extern FUN_02000EC8 thumb_func_start FUN_020010A8 FUN_020010A8: ; 0x020010A8 @@ -1512,918 +1510,3 @@ FUN_02001B64: ; 0x02001B64 blx r3 _02001B7E: pop {r3-r5, pc} - - thumb_func_start FUN_02001B80 -FUN_02001B80: ; 0x02001B80 - ldr r3, _02001B88 ; =FUN_020191D0 - ldr r0, [r0, #0xc] - bx r3 - nop -_02001B88: .word FUN_020191D0 - - thumb_func_start FUN_02001B8C -FUN_02001B8C: ; 0x02001B8C - push {r3-r7, lr} - sub sp, #0x8 - add r5, r0, #0x0 - str r3, [sp, #0x0] - add r0, sp, #0x10 - ldrb r0, [r0, #0x10] - add r6, r1, #0x0 - mov r1, #0x20 - add r7, r2, #0x0 - str r0, [sp, #0x4] - bl FUN_02016998 - add r4, r0, #0x0 - add r3, r5, #0x0 - ldmia r3!, {r0-r1} - add r2, r4, #0x0 - stmia r2!, {r0-r1} - ldr r0, [r3, #0x0] - str r0, [r2, #0x0] - ldr r0, [sp, #0x4] - bl FUN_02013690 - str r0, [r4, #0xc] - ldr r0, [sp, #0x24] - str r0, [r4, #0x10] - ldr r0, [sp, #0x0] - strb r0, [r4, #0x15] - add r0, r4, #0x0 - bl FUN_02001FB4 - strb r0, [r4, #0x16] - add r0, sp, #0x10 - ldrb r0, [r0, #0x10] - mov r1, #0x0 - strb r0, [r4, #0x1c] - strb r6, [r4, #0x17] - strb r7, [r4, #0x18] - ldrb r0, [r5, #0x8] - bl FUN_02002E4C - add r6, r0, #0x0 - ldrb r0, [r5, #0x8] - mov r1, #0x2 - bl FUN_02002E4C - add r0, r6, r0 - strb r0, [r4, #0x19] - ldrb r0, [r5, #0x8] - mov r1, #0x1 - bl FUN_02002E4C - add r6, r0, #0x0 - ldrb r0, [r5, #0x8] - mov r1, #0x3 - bl FUN_02002E4C - add r0, r6, r0 - strb r0, [r4, #0x1a] - add r0, r4, #0x0 - bl FUN_02001FF4 - add r0, r4, #0x0 - bl FUN_02002080 - add r0, r4, #0x0 - add sp, #0x8 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02001C14 -FUN_02001C14: ; 0x02001C14 - push {r4, lr} - sub sp, #0x8 - add r4, sp, #0x0 - ldrb r4, [r4, #0x10] - str r4, [sp, #0x0] - ldr r4, [sp, #0x14] - str r4, [sp, #0x4] - bl FUN_02001B8C - add r4, r0, #0x0 - ldr r0, [r4, #0x4] - bl FUN_020191D0 - add r0, r4, #0x0 - add sp, #0x8 - pop {r4, pc} - - thumb_func_start FUN_02001C34 -FUN_02001C34: ; 0x02001C34 - push {r4-r6, lr} - sub sp, #0x8 - add r5, r0, #0x0 - ldrb r0, [r5, #0x8] - add r6, r1, #0x0 - add r4, r2, #0x0 - mov r1, #0x0 - bl FUN_02002E4C - add r1, r0, #0x0 - str r4, [sp, #0x0] - mov r0, #0x2 - str r0, [sp, #0x4] - add r0, r5, #0x0 - mov r2, #0x0 - add r3, r6, #0x0 - bl FUN_02001C14 - add sp, #0x8 - pop {r4-r6, pc} - - thumb_func_start FUN_02001C5C -FUN_02001C5C: ; 0x02001C5C - push {r4, lr} - add r4, r0, #0x0 - cmp r1, #0x0 - beq _02001C68 - ldrb r0, [r4, #0x15] - strb r0, [r1, #0x0] -_02001C68: - ldr r0, [r4, #0xc] - bl FUN_020136C0 - ldrb r0, [r4, #0x1c] - add r1, r4, #0x0 - bl FUN_02016A8C - pop {r4, pc} - - thumb_func_start FUN_02001C78 -FUN_02001C78: ; 0x02001C78 - push {r3-r5, lr} - add r4, r0, #0x0 - mov r1, #0x0 - ldr r2, _02001D24 ; =0x021C48B8 - strb r1, [r4, #0x1b] - ldr r2, [r2, #0x48] - mov r5, #0x1 - add r3, r2, #0x0 - tst r3, r5 - beq _02001C9E - ldr r0, _02001D28 ; =0x000005DC - bl FUN_020054C8 - ldrb r0, [r4, #0x15] - ldr r1, [r4, #0x0] - lsl r0, r0, #0x3 - add r0, r1, r0 - ldr r0, [r0, #0x4] - pop {r3-r5, pc} -_02001C9E: - ldr r3, [r4, #0x10] - tst r3, r2 - beq _02001CAE - ldr r0, _02001D28 ; =0x000005DC - bl FUN_020054C8 - sub r0, r5, #0x3 - pop {r3-r5, pc} -_02001CAE: - mov r3, #0x40 - tst r3, r2 - beq _02001CC8 - ldr r2, _02001D28 ; =0x000005DC - bl FUN_02001E64 - cmp r0, #0x1 - bne _02001CC2 - add r0, r5, #0x0 - strb r0, [r4, #0x1b] -_02001CC2: - mov r0, #0x0 - mvn r0, r0 - pop {r3-r5, pc} -_02001CC8: - mov r1, #0x80 - tst r1, r2 - beq _02001CE4 - ldr r2, _02001D28 ; =0x000005DC - add r1, r5, #0x0 - bl FUN_02001E64 - cmp r0, #0x1 - bne _02001CDE - mov r0, #0x2 - strb r0, [r4, #0x1b] -_02001CDE: - mov r0, #0x0 - mvn r0, r0 - pop {r3-r5, pc} -_02001CE4: - mov r1, #0x20 - tst r1, r2 - beq _02001D00 - ldr r2, _02001D28 ; =0x000005DC - mov r1, #0x2 - bl FUN_02001E64 - cmp r0, #0x1 - bne _02001CFA - mov r0, #0x3 - strb r0, [r4, #0x1b] -_02001CFA: - mov r0, #0x0 - mvn r0, r0 - pop {r3-r5, pc} -_02001D00: - mov r1, #0x10 - tst r2, r1 - beq _02001D1C - ldr r2, _02001D28 ; =0x000005DC - mov r1, #0x3 - bl FUN_02001E64 - cmp r0, #0x1 - bne _02001D16 - mov r0, #0x4 - strb r0, [r4, #0x1b] -_02001D16: - mov r0, #0x0 - mvn r0, r0 - pop {r3-r5, pc} -_02001D1C: - sub r1, #0x11 - add r0, r1, #0x0 - pop {r3-r5, pc} - nop -_02001D24: .word 0x021C48B8 -_02001D28: .word 0x000005DC - - thumb_func_start FUN_02001D2C -FUN_02001D2C: ; 0x02001D2C - push {r4-r6, lr} - add r2, r1, #0x0 - add r4, r0, #0x0 - mov r1, #0x0 - ldr r3, _02001DD4 ; =0x021C48B8 - strb r1, [r4, #0x1b] - ldr r5, [r3, #0x48] - mov r3, #0x1 - add r6, r5, #0x0 - tst r6, r3 - beq _02001D54 - ldr r0, _02001DD8 ; =0x000005DC - bl FUN_020054C8 - ldrb r0, [r4, #0x15] - ldr r1, [r4, #0x0] - lsl r0, r0, #0x3 - add r0, r1, r0 - ldr r0, [r0, #0x4] - pop {r4-r6, pc} -_02001D54: - ldr r6, [r4, #0x10] - tst r6, r5 - beq _02001D66 - ldr r0, _02001DD8 ; =0x000005DC - bl FUN_020054C8 - mov r0, #0x1 - mvn r0, r0 - pop {r4-r6, pc} -_02001D66: - mov r6, #0x40 - tst r6, r5 - beq _02001D7E - bl FUN_02001E64 - cmp r0, #0x1 - bne _02001D78 - mov r0, #0x1 - strb r0, [r4, #0x1b] -_02001D78: - mov r0, #0x0 - mvn r0, r0 - pop {r4-r6, pc} -_02001D7E: - mov r1, #0x80 - tst r1, r5 - beq _02001D98 - add r1, r3, #0x0 - bl FUN_02001E64 - cmp r0, #0x1 - bne _02001D92 - mov r0, #0x2 - strb r0, [r4, #0x1b] -_02001D92: - mov r0, #0x0 - mvn r0, r0 - pop {r4-r6, pc} -_02001D98: - mov r1, #0x20 - tst r1, r5 - beq _02001DB2 - mov r1, #0x2 - bl FUN_02001E64 - cmp r0, #0x1 - bne _02001DAC - mov r0, #0x3 - strb r0, [r4, #0x1b] -_02001DAC: - mov r0, #0x0 - mvn r0, r0 - pop {r4-r6, pc} -_02001DB2: - mov r1, #0x10 - add r3, r5, #0x0 - tst r3, r1 - beq _02001DCE - mov r1, #0x3 - bl FUN_02001E64 - cmp r0, #0x1 - bne _02001DC8 - mov r0, #0x4 - strb r0, [r4, #0x1b] -_02001DC8: - mov r0, #0x0 - mvn r0, r0 - pop {r4-r6, pc} -_02001DCE: - sub r1, #0x11 - add r0, r1, #0x0 - pop {r4-r6, pc} - .balign 4 -_02001DD4: .word 0x021C48B8 -_02001DD8: .word 0x000005DC - - thumb_func_start FUN_02001DDC -FUN_02001DDC: ; 0x02001DDC - push {r4, lr} - add r4, r0, #0x0 - cmp r1, #0x5 - bhi _02001E52 - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #0x6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_02001DF0: ; jump table (using 16-bit offset) - .short _02001DFC - _02001DF0 - 2; case 0 - .short _02001E0E - _02001DF0 - 2; case 1 - .short _02001E1A - _02001DF0 - 2; case 2 - .short _02001E28 - _02001DF0 - 2; case 3 - .short _02001E36 - _02001DF0 - 2; case 4 - .short _02001E44 - _02001DF0 - 2; case 5 -_02001DFC: - ldr r0, _02001E58 ; =0x000005DC - bl FUN_020054C8 - ldrb r0, [r4, #0x15] - ldr r1, [r4, #0x0] - lsl r0, r0, #0x3 - add r0, r1, r0 - ldr r0, [r0, #0x4] - pop {r4, pc} -_02001E0E: - ldr r0, _02001E58 ; =0x000005DC - bl FUN_020054C8 - mov r0, #0x1 - mvn r0, r0 - pop {r4, pc} -_02001E1A: - ldr r2, _02001E58 ; =0x000005DC - mov r1, #0x0 - bl FUN_02001E64 - mov r0, #0x0 - mvn r0, r0 - pop {r4, pc} -_02001E28: - ldr r2, _02001E58 ; =0x000005DC - mov r1, #0x1 - bl FUN_02001E64 - mov r0, #0x0 - mvn r0, r0 - pop {r4, pc} -_02001E36: - ldr r2, _02001E58 ; =0x000005DC - mov r1, #0x2 - bl FUN_02001E64 - mov r0, #0x0 - mvn r0, r0 - pop {r4, pc} -_02001E44: - ldr r2, _02001E58 ; =0x000005DC - mov r1, #0x3 - bl FUN_02001E64 - mov r0, #0x0 - mvn r0, r0 - pop {r4, pc} -_02001E52: - mov r0, #0x0 - mvn r0, r0 - pop {r4, pc} - .balign 4 -_02001E58: .word 0x000005DC - - thumb_func_start FUN_02001E5C -FUN_02001E5C: ; 0x02001E5C - ldrb r0, [r0, #0x15] - bx lr - - thumb_func_start FUN_02001E60 -FUN_02001E60: ; 0x02001E60 - ldrb r0, [r0, #0x1b] - bx lr - - thumb_func_start FUN_02001E64 -FUN_02001E64: ; 0x02001E64 - push {r4-r7, lr} - sub sp, #0xc - add r5, r0, #0x0 - add r6, r2, #0x0 - ldrb r4, [r5, #0x15] - bl FUN_02001EBC - cmp r0, #0x0 - bne _02001E7C - add sp, #0xc - mov r0, #0x0 - pop {r4-r7, pc} -_02001E7C: - ldrb r0, [r5, #0x8] - mov r1, #0x6 - bl FUN_02002E4C - add r1, sp, #0x8 - add r7, r0, #0x0 - add r0, r5, #0x0 - add r1, #0x1 - add r2, sp, #0x8 - add r3, r4, #0x0 - bl FUN_020020B0 - mov r0, #0x8 - str r0, [sp, #0x0] - ldrb r0, [r5, #0x1a] - add r3, sp, #0x8 - add r1, r7, #0x0 - str r0, [sp, #0x4] - ldrb r2, [r3, #0x1] - ldrb r3, [r3, #0x0] - ldr r0, [r5, #0x4] - bl FUN_020196F4 - add r0, r5, #0x0 - bl FUN_02002080 - add r0, r6, #0x0 - bl FUN_020054C8 - mov r0, #0x1 - add sp, #0xc - pop {r4-r7, pc} - - thumb_func_start FUN_02001EBC -FUN_02001EBC: ; 0x02001EBC - push {r4-r6, lr} - add r5, r0, #0x0 - cmp r1, #0x0 - bne _02001EFA - ldrb r6, [r5, #0xa] - cmp r6, #0x1 - bhi _02001ECE - mov r0, #0x0 - pop {r4-r6, pc} -_02001ECE: - ldrb r4, [r5, #0x15] - add r1, r6, #0x0 - add r0, r4, #0x0 - bl _s32_div_f - cmp r1, #0x0 - bne _02001EF2 - ldrb r0, [r5, #0xb] - lsl r0, r0, #0x18 - lsr r0, r0, #0x1e - bne _02001EE8 - mov r0, #0x0 - pop {r4-r6, pc} -_02001EE8: - sub r0, r6, #0x1 - add r0, r4, r0 - lsl r0, r0, #0x18 - asr r2, r0, #0x18 - b _02001F9A -_02001EF2: - sub r0, r4, #0x1 - lsl r0, r0, #0x18 - asr r2, r0, #0x18 - b _02001F9A -_02001EFA: - cmp r1, #0x1 - bne _02001F32 - ldrb r1, [r5, #0xa] - cmp r1, #0x1 - bhi _02001F08 - mov r0, #0x0 - pop {r4-r6, pc} -_02001F08: - ldrb r6, [r5, #0x15] - sub r4, r1, #0x1 - add r0, r6, #0x0 - bl _s32_div_f - cmp r4, r1 - bne _02001F2A - ldrb r0, [r5, #0xb] - lsl r0, r0, #0x18 - lsr r0, r0, #0x1e - bne _02001F22 - mov r0, #0x0 - pop {r4-r6, pc} -_02001F22: - sub r0, r6, r4 - lsl r0, r0, #0x18 - asr r2, r0, #0x18 - b _02001F9A -_02001F2A: - add r0, r6, #0x1 - lsl r0, r0, #0x18 - asr r2, r0, #0x18 - b _02001F9A -_02001F32: - cmp r1, #0x2 - bne _02001F68 - ldrb r3, [r5, #0x9] - cmp r3, #0x1 - bhi _02001F40 - mov r0, #0x0 - pop {r4-r6, pc} -_02001F40: - ldrb r2, [r5, #0xa] - ldrb r1, [r5, #0x15] - cmp r1, r2 - bhs _02001F60 - ldrb r0, [r5, #0xb] - lsl r0, r0, #0x18 - lsr r0, r0, #0x1e - bne _02001F54 - mov r0, #0x0 - pop {r4-r6, pc} -_02001F54: - sub r0, r3, #0x1 - mul r0, r2 - add r0, r1, r0 - lsl r0, r0, #0x18 - asr r2, r0, #0x18 - b _02001F9A -_02001F60: - sub r0, r1, r2 - lsl r0, r0, #0x18 - asr r2, r0, #0x18 - b _02001F9A -_02001F68: - ldrb r2, [r5, #0x9] - cmp r2, #0x1 - bhi _02001F72 - mov r0, #0x0 - pop {r4-r6, pc} -_02001F72: - ldrb r1, [r5, #0xa] - ldrb r0, [r5, #0x15] - sub r2, r2, #0x1 - mul r2, r1 - cmp r0, r2 - blt _02001F94 - ldrb r2, [r5, #0xb] - lsl r2, r2, #0x18 - lsr r2, r2, #0x1e - bne _02001F8A - mov r0, #0x0 - pop {r4-r6, pc} -_02001F8A: - bl _s32_div_f - lsl r0, r1, #0x18 - asr r2, r0, #0x18 - b _02001F9A -_02001F94: - add r0, r0, r1 - lsl r0, r0, #0x18 - asr r2, r0, #0x18 -_02001F9A: - ldr r1, [r5, #0x0] - lsl r0, r2, #0x3 - add r0, r1, r0 - ldr r1, [r0, #0x4] - mov r0, #0x2 - mvn r0, r0 - cmp r1, r0 - bne _02001FAE - mov r0, #0x0 - pop {r4-r6, pc} -_02001FAE: - strb r2, [r5, #0x15] - mov r0, #0x1 - pop {r4-r6, pc} - - thumb_func_start FUN_02001FB4 -FUN_02001FB4: ; 0x02001FB4 - push {r3-r7, lr} - add r5, r0, #0x0 - ldrb r1, [r5, #0x9] - ldrb r0, [r5, #0xa] - mov r6, #0x0 - add r4, r6, #0x0 - mul r0, r1 - cmp r0, #0x0 - ble _02001FF0 - add r7, r6, #0x0 -_02001FC8: - ldr r2, [r5, #0x0] - lsl r1, r4, #0x3 - ldr r1, [r2, r1] - ldrb r0, [r5, #0x8] - add r2, r7, #0x0 - bl FUN_02002E14 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - cmp r6, r0 - bhs _02001FE0 - add r6, r0, #0x0 -_02001FE0: - add r0, r4, #0x1 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - ldrb r1, [r5, #0x9] - ldrb r0, [r5, #0xa] - mul r0, r1 - cmp r4, r0 - blt _02001FC8 -_02001FF0: - add r0, r6, #0x0 - pop {r3-r7, pc} - - thumb_func_start FUN_02001FF4 -FUN_02001FF4: ; 0x02001FF4 - push {r3-r7, lr} - sub sp, #0x10 - add r5, r0, #0x0 - ldrb r0, [r5, #0x8] - mov r1, #0x6 - bl FUN_02002E4C - add r1, r0, #0x0 - ldr r0, [r5, #0x4] - bl FUN_02019620 - ldrb r0, [r5, #0x19] - ldrb r1, [r5, #0x16] - ldrb r7, [r5, #0x17] - lsl r0, r0, #0x1 - add r0, r1, r0 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #0xc] - ldrb r0, [r5, #0x9] - mov r6, #0x0 - cmp r0, #0x0 - bls _0200207C -_02002022: - ldrb r2, [r5, #0xa] - mov r4, #0x0 - cmp r2, #0x0 - bls _02002068 -_0200202A: - ldrb r3, [r5, #0xb] - mul r2, r6 - ldrb r0, [r5, #0x1a] - lsl r3, r3, #0x1c - lsr r3, r3, #0x1c - add r0, r0, r3 - ldrb r1, [r5, #0x18] - mul r0, r4 - add r2, r4, r2 - add r0, r1, r0 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #0x0] - mov r0, #0xff - str r0, [sp, #0x4] - mov r0, #0x0 - str r0, [sp, #0x8] - ldr r3, [r5, #0x0] - lsl r2, r2, #0x3 - ldr r2, [r3, r2] - ldrb r1, [r5, #0x8] - ldr r0, [r5, #0x4] - add r3, r7, #0x0 - bl FUN_0201BD84 - add r0, r4, #0x1 - lsl r0, r0, #0x18 - ldrb r2, [r5, #0xa] - lsr r4, r0, #0x18 - cmp r4, r2 - blo _0200202A -_02002068: - ldr r0, [sp, #0xc] - add r0, r7, r0 - lsl r0, r0, #0x18 - lsr r7, r0, #0x18 - add r0, r6, #0x1 - lsl r0, r0, #0x18 - lsr r6, r0, #0x18 - ldrb r0, [r5, #0x9] - cmp r6, r0 - blo _02002022 -_0200207C: - add sp, #0x10 - pop {r3-r7, pc} - - thumb_func_start FUN_02002080 -FUN_02002080: ; 0x02002080 - push {r3-r4, lr} - sub sp, #0x4 - add r4, r0, #0x0 - ldrb r1, [r4, #0xb] - lsl r1, r1, #0x1a - lsr r1, r1, #0x1e - cmp r1, #0x1 - beq _020020AA - ldrb r3, [r4, #0x15] - add r1, sp, #0x0 - add r1, #0x1 - add r2, sp, #0x0 - bl FUN_020020B0 - add r3, sp, #0x0 - ldrb r2, [r3, #0x1] - ldrb r3, [r3, #0x0] - ldr r0, [r4, #0xc] - ldr r1, [r4, #0x4] - bl FUN_020136F8 -_020020AA: - add sp, #0x4 - pop {r3-r4, pc} - .balign 4 - - thumb_func_start FUN_020020B0 -FUN_020020B0: ; 0x020020B0 - push {r3-r7, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - add r7, r3, #0x0 - ldrb r1, [r5, #0xa] - add r0, r7, #0x0 - add r6, r2, #0x0 - bl _s32_div_f - ldrb r2, [r5, #0x19] - ldrb r1, [r5, #0x16] - lsl r2, r2, #0x1 - add r1, r1, r2 - mul r1, r0 - strb r1, [r4, #0x0] - ldrb r1, [r5, #0xa] - add r0, r7, #0x0 - bl _s32_div_f - ldrb r2, [r5, #0xb] - ldrb r3, [r5, #0x1a] - ldrb r0, [r5, #0x18] - lsl r2, r2, #0x1c - lsr r2, r2, #0x1c - add r2, r3, r2 - mul r2, r1 - add r0, r0, r2 - strb r0, [r6, #0x0] - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_020020EC -FUN_020020EC: ; 0x020020EC - push {r3-r7, lr} - sub sp, #0x20 - ldr r5, [sp, #0x3c] - str r2, [sp, #0xc] - add r7, r0, #0x0 - str r1, [sp, #0x8] - str r3, [sp, #0x10] - ldr r2, _02002194 ; =0x00000141 - mov r0, #0x1 - mov r1, #0x1a - add r3, r5, #0x0 - bl FUN_0200A86C - add r4, r0, #0x0 - mov r0, #0x2 - add r1, r5, #0x0 - bl FUN_02012838 - add r1, r4, #0x0 - mov r2, #0x29 - mov r3, #0x0 - add r6, r0, #0x0 - bl FUN_02012880 - mov r3, #0x2a - add r2, r3, #0x0 - add r0, r6, #0x0 - add r1, r4, #0x0 - sub r3, #0x2c - bl FUN_02012880 - add r0, r4, #0x0 - bl FUN_0200A8B8 - add r0, r5, #0x0 - mov r1, #0x1 - str r6, [sp, #0x14] - bl FUN_02018FF4 - add r1, r0, #0x0 - str r1, [sp, #0x18] - mov r0, #0x0 - add r3, sp, #0x14 - strb r0, [r3, #0x8] - mov r0, #0x1 - strb r0, [r3, #0x9] - mov r0, #0x2 - strb r0, [r3, #0xa] - ldrb r0, [r3, #0xb] - mov r2, #0xf - bic r0, r2 - strb r0, [r3, #0xb] - ldrb r4, [r3, #0xb] - mov r0, #0x30 - bic r4, r0 - strb r4, [r3, #0xb] - ldrb r0, [r3, #0xb] - bic r0, r2 - strb r0, [r3, #0xb] - ldr r2, [sp, #0x8] - add r0, r7, #0x0 - bl FUN_02019150 - ldr r0, [sp, #0x18] - ldr r2, [sp, #0xc] - ldr r3, [sp, #0x10] - mov r1, #0x1 - bl FUN_0200CCA4 - lsl r0, r5, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #0x0] - mov r0, #0x2 - str r0, [sp, #0x4] - add r3, sp, #0x28 - ldrb r3, [r3, #0x10] - add r0, sp, #0x14 - mov r1, #0x8 - mov r2, #0x0 - bl FUN_02001C14 - add sp, #0x20 - pop {r3-r7, pc} - nop -_02002194: .word 0x00000141 - - thumb_func_start FUN_02002198 -FUN_02002198: ; 0x02002198 - push {r4, lr} - sub sp, #0x8 - mov r4, #0x0 - str r4, [sp, #0x0] - ldr r4, [sp, #0x10] - str r4, [sp, #0x4] - bl FUN_020020EC - add sp, #0x8 - pop {r4, pc} - - thumb_func_start FUN_020021AC -FUN_020021AC: ; 0x020021AC - push {r4-r6, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - bl FUN_02001C78 - add r6, r0, #0x0 - mov r0, #0x0 - mvn r0, r0 - cmp r6, r0 - beq _020021C8 - add r0, r5, #0x0 - add r1, r4, #0x0 - bl FUN_020021EC -_020021C8: - add r0, r6, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_020021CC -FUN_020021CC: ; 0x020021CC - push {r4-r6, lr} - add r5, r0, #0x0 - add r4, r2, #0x0 - bl FUN_02001DDC - add r6, r0, #0x0 - mov r0, #0x0 - mvn r0, r0 - cmp r6, r0 - beq _020021E8 - add r0, r5, #0x0 - add r1, r4, #0x0 - bl FUN_020021EC -_020021E8: - add r0, r6, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_020021EC -FUN_020021EC: ; 0x020021EC - push {r3-r5, lr} - add r5, r0, #0x0 - ldr r0, [r5, #0x4] - add r4, r1, #0x0 - mov r1, #0x0 - bl FUN_0200CCF8 - ldr r0, [r5, #0x4] - bl FUN_02019178 - ldr r1, [r5, #0x4] - add r0, r4, #0x0 - bl FUN_02016A8C - ldr r0, [r5, #0x0] - bl FUN_02012870 - add r0, r5, #0x0 - mov r1, #0x0 - bl FUN_02001C5C - pop {r3-r5, pc} - - thumb_func_start FUN_02002218 -FUN_02002218: ; 0x02002218 - push {r4, lr} - sub sp, #0x18 - mov r4, #0x8 - lsl r1, r1, #0x10 - str r4, [sp, #0x0] - mov r3, #0x10 - str r3, [sp, #0x4] - lsr r1, r1, #0x10 - str r1, [sp, #0x8] - lsl r1, r2, #0x10 - lsr r1, r1, #0x10 - str r1, [sp, #0xc] - str r4, [sp, #0x10] - ldr r1, _02002244 ; =0x020ECAC8 - mov r2, #0x0 - str r3, [sp, #0x14] - add r3, r2, #0x0 - bl FUN_02019658 - add sp, #0x18 - pop {r4, pc} - nop -_02002244: .word 0x020ECAC8 diff --git a/arm9/asm/unk_02001B80.s b/arm9/asm/unk_02001B80.s new file mode 100644 index 00000000..0402fb69 --- /dev/null +++ b/arm9/asm/unk_02001B80.s @@ -0,0 +1,919 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + thumb_func_start FUN_02001B80 +FUN_02001B80: ; 0x02001B80 + ldr r3, _02001B88 ; =FUN_020191D0 + ldr r0, [r0, #0xc] + bx r3 + nop +_02001B88: .word FUN_020191D0 + + thumb_func_start FUN_02001B8C +FUN_02001B8C: ; 0x02001B8C + push {r3-r7, lr} + sub sp, #0x8 + add r5, r0, #0x0 + str r3, [sp, #0x0] + add r0, sp, #0x10 + ldrb r0, [r0, #0x10] + add r6, r1, #0x0 + mov r1, #0x20 + add r7, r2, #0x0 + str r0, [sp, #0x4] + bl FUN_02016998 + add r4, r0, #0x0 + add r3, r5, #0x0 + ldmia r3!, {r0-r1} + add r2, r4, #0x0 + stmia r2!, {r0-r1} + ldr r0, [r3, #0x0] + str r0, [r2, #0x0] + ldr r0, [sp, #0x4] + bl FUN_02013690 + str r0, [r4, #0xc] + ldr r0, [sp, #0x24] + str r0, [r4, #0x10] + ldr r0, [sp, #0x0] + strb r0, [r4, #0x15] + add r0, r4, #0x0 + bl FUN_02001FB4 + strb r0, [r4, #0x16] + add r0, sp, #0x10 + ldrb r0, [r0, #0x10] + mov r1, #0x0 + strb r0, [r4, #0x1c] + strb r6, [r4, #0x17] + strb r7, [r4, #0x18] + ldrb r0, [r5, #0x8] + bl FUN_02002E4C + add r6, r0, #0x0 + ldrb r0, [r5, #0x8] + mov r1, #0x2 + bl FUN_02002E4C + add r0, r6, r0 + strb r0, [r4, #0x19] + ldrb r0, [r5, #0x8] + mov r1, #0x1 + bl FUN_02002E4C + add r6, r0, #0x0 + ldrb r0, [r5, #0x8] + mov r1, #0x3 + bl FUN_02002E4C + add r0, r6, r0 + strb r0, [r4, #0x1a] + add r0, r4, #0x0 + bl FUN_02001FF4 + add r0, r4, #0x0 + bl FUN_02002080 + add r0, r4, #0x0 + add sp, #0x8 + pop {r3-r7, pc} + .balign 4 + + thumb_func_start FUN_02001C14 +FUN_02001C14: ; 0x02001C14 + push {r4, lr} + sub sp, #0x8 + add r4, sp, #0x0 + ldrb r4, [r4, #0x10] + str r4, [sp, #0x0] + ldr r4, [sp, #0x14] + str r4, [sp, #0x4] + bl FUN_02001B8C + add r4, r0, #0x0 + ldr r0, [r4, #0x4] + bl FUN_020191D0 + add r0, r4, #0x0 + add sp, #0x8 + pop {r4, pc} + + thumb_func_start FUN_02001C34 +FUN_02001C34: ; 0x02001C34 + push {r4-r6, lr} + sub sp, #0x8 + add r5, r0, #0x0 + ldrb r0, [r5, #0x8] + add r6, r1, #0x0 + add r4, r2, #0x0 + mov r1, #0x0 + bl FUN_02002E4C + add r1, r0, #0x0 + str r4, [sp, #0x0] + mov r0, #0x2 + str r0, [sp, #0x4] + add r0, r5, #0x0 + mov r2, #0x0 + add r3, r6, #0x0 + bl FUN_02001C14 + add sp, #0x8 + pop {r4-r6, pc} + + thumb_func_start FUN_02001C5C +FUN_02001C5C: ; 0x02001C5C + push {r4, lr} + add r4, r0, #0x0 + cmp r1, #0x0 + beq _02001C68 + ldrb r0, [r4, #0x15] + strb r0, [r1, #0x0] +_02001C68: + ldr r0, [r4, #0xc] + bl FUN_020136C0 + ldrb r0, [r4, #0x1c] + add r1, r4, #0x0 + bl FUN_02016A8C + pop {r4, pc} + + thumb_func_start FUN_02001C78 +FUN_02001C78: ; 0x02001C78 + push {r3-r5, lr} + add r4, r0, #0x0 + mov r1, #0x0 + ldr r2, _02001D24 ; =0x021C48B8 + strb r1, [r4, #0x1b] + ldr r2, [r2, #0x48] + mov r5, #0x1 + add r3, r2, #0x0 + tst r3, r5 + beq _02001C9E + ldr r0, _02001D28 ; =0x000005DC + bl FUN_020054C8 + ldrb r0, [r4, #0x15] + ldr r1, [r4, #0x0] + lsl r0, r0, #0x3 + add r0, r1, r0 + ldr r0, [r0, #0x4] + pop {r3-r5, pc} +_02001C9E: + ldr r3, [r4, #0x10] + tst r3, r2 + beq _02001CAE + ldr r0, _02001D28 ; =0x000005DC + bl FUN_020054C8 + sub r0, r5, #0x3 + pop {r3-r5, pc} +_02001CAE: + mov r3, #0x40 + tst r3, r2 + beq _02001CC8 + ldr r2, _02001D28 ; =0x000005DC + bl FUN_02001E64 + cmp r0, #0x1 + bne _02001CC2 + add r0, r5, #0x0 + strb r0, [r4, #0x1b] +_02001CC2: + mov r0, #0x0 + mvn r0, r0 + pop {r3-r5, pc} +_02001CC8: + mov r1, #0x80 + tst r1, r2 + beq _02001CE4 + ldr r2, _02001D28 ; =0x000005DC + add r1, r5, #0x0 + bl FUN_02001E64 + cmp r0, #0x1 + bne _02001CDE + mov r0, #0x2 + strb r0, [r4, #0x1b] +_02001CDE: + mov r0, #0x0 + mvn r0, r0 + pop {r3-r5, pc} +_02001CE4: + mov r1, #0x20 + tst r1, r2 + beq _02001D00 + ldr r2, _02001D28 ; =0x000005DC + mov r1, #0x2 + bl FUN_02001E64 + cmp r0, #0x1 + bne _02001CFA + mov r0, #0x3 + strb r0, [r4, #0x1b] +_02001CFA: + mov r0, #0x0 + mvn r0, r0 + pop {r3-r5, pc} +_02001D00: + mov r1, #0x10 + tst r2, r1 + beq _02001D1C + ldr r2, _02001D28 ; =0x000005DC + mov r1, #0x3 + bl FUN_02001E64 + cmp r0, #0x1 + bne _02001D16 + mov r0, #0x4 + strb r0, [r4, #0x1b] +_02001D16: + mov r0, #0x0 + mvn r0, r0 + pop {r3-r5, pc} +_02001D1C: + sub r1, #0x11 + add r0, r1, #0x0 + pop {r3-r5, pc} + nop +_02001D24: .word 0x021C48B8 +_02001D28: .word 0x000005DC + + thumb_func_start FUN_02001D2C +FUN_02001D2C: ; 0x02001D2C + push {r4-r6, lr} + add r2, r1, #0x0 + add r4, r0, #0x0 + mov r1, #0x0 + ldr r3, _02001DD4 ; =0x021C48B8 + strb r1, [r4, #0x1b] + ldr r5, [r3, #0x48] + mov r3, #0x1 + add r6, r5, #0x0 + tst r6, r3 + beq _02001D54 + ldr r0, _02001DD8 ; =0x000005DC + bl FUN_020054C8 + ldrb r0, [r4, #0x15] + ldr r1, [r4, #0x0] + lsl r0, r0, #0x3 + add r0, r1, r0 + ldr r0, [r0, #0x4] + pop {r4-r6, pc} +_02001D54: + ldr r6, [r4, #0x10] + tst r6, r5 + beq _02001D66 + ldr r0, _02001DD8 ; =0x000005DC + bl FUN_020054C8 + mov r0, #0x1 + mvn r0, r0 + pop {r4-r6, pc} +_02001D66: + mov r6, #0x40 + tst r6, r5 + beq _02001D7E + bl FUN_02001E64 + cmp r0, #0x1 + bne _02001D78 + mov r0, #0x1 + strb r0, [r4, #0x1b] +_02001D78: + mov r0, #0x0 + mvn r0, r0 + pop {r4-r6, pc} +_02001D7E: + mov r1, #0x80 + tst r1, r5 + beq _02001D98 + add r1, r3, #0x0 + bl FUN_02001E64 + cmp r0, #0x1 + bne _02001D92 + mov r0, #0x2 + strb r0, [r4, #0x1b] +_02001D92: + mov r0, #0x0 + mvn r0, r0 + pop {r4-r6, pc} +_02001D98: + mov r1, #0x20 + tst r1, r5 + beq _02001DB2 + mov r1, #0x2 + bl FUN_02001E64 + cmp r0, #0x1 + bne _02001DAC + mov r0, #0x3 + strb r0, [r4, #0x1b] +_02001DAC: + mov r0, #0x0 + mvn r0, r0 + pop {r4-r6, pc} +_02001DB2: + mov r1, #0x10 + add r3, r5, #0x0 + tst r3, r1 + beq _02001DCE + mov r1, #0x3 + bl FUN_02001E64 + cmp r0, #0x1 + bne _02001DC8 + mov r0, #0x4 + strb r0, [r4, #0x1b] +_02001DC8: + mov r0, #0x0 + mvn r0, r0 + pop {r4-r6, pc} +_02001DCE: + sub r1, #0x11 + add r0, r1, #0x0 + pop {r4-r6, pc} + .balign 4 +_02001DD4: .word 0x021C48B8 +_02001DD8: .word 0x000005DC + + thumb_func_start FUN_02001DDC +FUN_02001DDC: ; 0x02001DDC + push {r4, lr} + add r4, r0, #0x0 + cmp r1, #0x5 + bhi _02001E52 + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #0x6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 +_02001DF0: ; jump table (using 16-bit offset) + .short _02001DFC - _02001DF0 - 2; case 0 + .short _02001E0E - _02001DF0 - 2; case 1 + .short _02001E1A - _02001DF0 - 2; case 2 + .short _02001E28 - _02001DF0 - 2; case 3 + .short _02001E36 - _02001DF0 - 2; case 4 + .short _02001E44 - _02001DF0 - 2; case 5 +_02001DFC: + ldr r0, _02001E58 ; =0x000005DC + bl FUN_020054C8 + ldrb r0, [r4, #0x15] + ldr r1, [r4, #0x0] + lsl r0, r0, #0x3 + add r0, r1, r0 + ldr r0, [r0, #0x4] + pop {r4, pc} +_02001E0E: + ldr r0, _02001E58 ; =0x000005DC + bl FUN_020054C8 + mov r0, #0x1 + mvn r0, r0 + pop {r4, pc} +_02001E1A: + ldr r2, _02001E58 ; =0x000005DC + mov r1, #0x0 + bl FUN_02001E64 + mov r0, #0x0 + mvn r0, r0 + pop {r4, pc} +_02001E28: + ldr r2, _02001E58 ; =0x000005DC + mov r1, #0x1 + bl FUN_02001E64 + mov r0, #0x0 + mvn r0, r0 + pop {r4, pc} +_02001E36: + ldr r2, _02001E58 ; =0x000005DC + mov r1, #0x2 + bl FUN_02001E64 + mov r0, #0x0 + mvn r0, r0 + pop {r4, pc} +_02001E44: + ldr r2, _02001E58 ; =0x000005DC + mov r1, #0x3 + bl FUN_02001E64 + mov r0, #0x0 + mvn r0, r0 + pop {r4, pc} +_02001E52: + mov r0, #0x0 + mvn r0, r0 + pop {r4, pc} + .balign 4 +_02001E58: .word 0x000005DC + + thumb_func_start FUN_02001E5C +FUN_02001E5C: ; 0x02001E5C + ldrb r0, [r0, #0x15] + bx lr + + thumb_func_start FUN_02001E60 +FUN_02001E60: ; 0x02001E60 + ldrb r0, [r0, #0x1b] + bx lr + + thumb_func_start FUN_02001E64 +FUN_02001E64: ; 0x02001E64 + push {r4-r7, lr} + sub sp, #0xc + add r5, r0, #0x0 + add r6, r2, #0x0 + ldrb r4, [r5, #0x15] + bl FUN_02001EBC + cmp r0, #0x0 + bne _02001E7C + add sp, #0xc + mov r0, #0x0 + pop {r4-r7, pc} +_02001E7C: + ldrb r0, [r5, #0x8] + mov r1, #0x6 + bl FUN_02002E4C + add r1, sp, #0x8 + add r7, r0, #0x0 + add r0, r5, #0x0 + add r1, #0x1 + add r2, sp, #0x8 + add r3, r4, #0x0 + bl FUN_020020B0 + mov r0, #0x8 + str r0, [sp, #0x0] + ldrb r0, [r5, #0x1a] + add r3, sp, #0x8 + add r1, r7, #0x0 + str r0, [sp, #0x4] + ldrb r2, [r3, #0x1] + ldrb r3, [r3, #0x0] + ldr r0, [r5, #0x4] + bl FUN_020196F4 + add r0, r5, #0x0 + bl FUN_02002080 + add r0, r6, #0x0 + bl FUN_020054C8 + mov r0, #0x1 + add sp, #0xc + pop {r4-r7, pc} + + thumb_func_start FUN_02001EBC +FUN_02001EBC: ; 0x02001EBC + push {r4-r6, lr} + add r5, r0, #0x0 + cmp r1, #0x0 + bne _02001EFA + ldrb r6, [r5, #0xa] + cmp r6, #0x1 + bhi _02001ECE + mov r0, #0x0 + pop {r4-r6, pc} +_02001ECE: + ldrb r4, [r5, #0x15] + add r1, r6, #0x0 + add r0, r4, #0x0 + bl _s32_div_f + cmp r1, #0x0 + bne _02001EF2 + ldrb r0, [r5, #0xb] + lsl r0, r0, #0x18 + lsr r0, r0, #0x1e + bne _02001EE8 + mov r0, #0x0 + pop {r4-r6, pc} +_02001EE8: + sub r0, r6, #0x1 + add r0, r4, r0 + lsl r0, r0, #0x18 + asr r2, r0, #0x18 + b _02001F9A +_02001EF2: + sub r0, r4, #0x1 + lsl r0, r0, #0x18 + asr r2, r0, #0x18 + b _02001F9A +_02001EFA: + cmp r1, #0x1 + bne _02001F32 + ldrb r1, [r5, #0xa] + cmp r1, #0x1 + bhi _02001F08 + mov r0, #0x0 + pop {r4-r6, pc} +_02001F08: + ldrb r6, [r5, #0x15] + sub r4, r1, #0x1 + add r0, r6, #0x0 + bl _s32_div_f + cmp r4, r1 + bne _02001F2A + ldrb r0, [r5, #0xb] + lsl r0, r0, #0x18 + lsr r0, r0, #0x1e + bne _02001F22 + mov r0, #0x0 + pop {r4-r6, pc} +_02001F22: + sub r0, r6, r4 + lsl r0, r0, #0x18 + asr r2, r0, #0x18 + b _02001F9A +_02001F2A: + add r0, r6, #0x1 + lsl r0, r0, #0x18 + asr r2, r0, #0x18 + b _02001F9A +_02001F32: + cmp r1, #0x2 + bne _02001F68 + ldrb r3, [r5, #0x9] + cmp r3, #0x1 + bhi _02001F40 + mov r0, #0x0 + pop {r4-r6, pc} +_02001F40: + ldrb r2, [r5, #0xa] + ldrb r1, [r5, #0x15] + cmp r1, r2 + bhs _02001F60 + ldrb r0, [r5, #0xb] + lsl r0, r0, #0x18 + lsr r0, r0, #0x1e + bne _02001F54 + mov r0, #0x0 + pop {r4-r6, pc} +_02001F54: + sub r0, r3, #0x1 + mul r0, r2 + add r0, r1, r0 + lsl r0, r0, #0x18 + asr r2, r0, #0x18 + b _02001F9A +_02001F60: + sub r0, r1, r2 + lsl r0, r0, #0x18 + asr r2, r0, #0x18 + b _02001F9A +_02001F68: + ldrb r2, [r5, #0x9] + cmp r2, #0x1 + bhi _02001F72 + mov r0, #0x0 + pop {r4-r6, pc} +_02001F72: + ldrb r1, [r5, #0xa] + ldrb r0, [r5, #0x15] + sub r2, r2, #0x1 + mul r2, r1 + cmp r0, r2 + blt _02001F94 + ldrb r2, [r5, #0xb] + lsl r2, r2, #0x18 + lsr r2, r2, #0x1e + bne _02001F8A + mov r0, #0x0 + pop {r4-r6, pc} +_02001F8A: + bl _s32_div_f + lsl r0, r1, #0x18 + asr r2, r0, #0x18 + b _02001F9A +_02001F94: + add r0, r0, r1 + lsl r0, r0, #0x18 + asr r2, r0, #0x18 +_02001F9A: + ldr r1, [r5, #0x0] + lsl r0, r2, #0x3 + add r0, r1, r0 + ldr r1, [r0, #0x4] + mov r0, #0x2 + mvn r0, r0 + cmp r1, r0 + bne _02001FAE + mov r0, #0x0 + pop {r4-r6, pc} +_02001FAE: + strb r2, [r5, #0x15] + mov r0, #0x1 + pop {r4-r6, pc} + + thumb_func_start FUN_02001FB4 +FUN_02001FB4: ; 0x02001FB4 + push {r3-r7, lr} + add r5, r0, #0x0 + ldrb r1, [r5, #0x9] + ldrb r0, [r5, #0xa] + mov r6, #0x0 + add r4, r6, #0x0 + mul r0, r1 + cmp r0, #0x0 + ble _02001FF0 + add r7, r6, #0x0 +_02001FC8: + ldr r2, [r5, #0x0] + lsl r1, r4, #0x3 + ldr r1, [r2, r1] + ldrb r0, [r5, #0x8] + add r2, r7, #0x0 + bl FUN_02002E14 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + cmp r6, r0 + bhs _02001FE0 + add r6, r0, #0x0 +_02001FE0: + add r0, r4, #0x1 + lsl r0, r0, #0x18 + lsr r4, r0, #0x18 + ldrb r1, [r5, #0x9] + ldrb r0, [r5, #0xa] + mul r0, r1 + cmp r4, r0 + blt _02001FC8 +_02001FF0: + add r0, r6, #0x0 + pop {r3-r7, pc} + + thumb_func_start FUN_02001FF4 +FUN_02001FF4: ; 0x02001FF4 + push {r3-r7, lr} + sub sp, #0x10 + add r5, r0, #0x0 + ldrb r0, [r5, #0x8] + mov r1, #0x6 + bl FUN_02002E4C + add r1, r0, #0x0 + ldr r0, [r5, #0x4] + bl FUN_02019620 + ldrb r0, [r5, #0x19] + ldrb r1, [r5, #0x16] + ldrb r7, [r5, #0x17] + lsl r0, r0, #0x1 + add r0, r1, r0 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #0xc] + ldrb r0, [r5, #0x9] + mov r6, #0x0 + cmp r0, #0x0 + bls _0200207C +_02002022: + ldrb r2, [r5, #0xa] + mov r4, #0x0 + cmp r2, #0x0 + bls _02002068 +_0200202A: + ldrb r3, [r5, #0xb] + mul r2, r6 + ldrb r0, [r5, #0x1a] + lsl r3, r3, #0x1c + lsr r3, r3, #0x1c + add r0, r0, r3 + ldrb r1, [r5, #0x18] + mul r0, r4 + add r2, r4, r2 + add r0, r1, r0 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #0x0] + mov r0, #0xff + str r0, [sp, #0x4] + mov r0, #0x0 + str r0, [sp, #0x8] + ldr r3, [r5, #0x0] + lsl r2, r2, #0x3 + ldr r2, [r3, r2] + ldrb r1, [r5, #0x8] + ldr r0, [r5, #0x4] + add r3, r7, #0x0 + bl FUN_0201BD84 + add r0, r4, #0x1 + lsl r0, r0, #0x18 + ldrb r2, [r5, #0xa] + lsr r4, r0, #0x18 + cmp r4, r2 + blo _0200202A +_02002068: + ldr r0, [sp, #0xc] + add r0, r7, r0 + lsl r0, r0, #0x18 + lsr r7, r0, #0x18 + add r0, r6, #0x1 + lsl r0, r0, #0x18 + lsr r6, r0, #0x18 + ldrb r0, [r5, #0x9] + cmp r6, r0 + blo _02002022 +_0200207C: + add sp, #0x10 + pop {r3-r7, pc} + + thumb_func_start FUN_02002080 +FUN_02002080: ; 0x02002080 + push {r3-r4, lr} + sub sp, #0x4 + add r4, r0, #0x0 + ldrb r1, [r4, #0xb] + lsl r1, r1, #0x1a + lsr r1, r1, #0x1e + cmp r1, #0x1 + beq _020020AA + ldrb r3, [r4, #0x15] + add r1, sp, #0x0 + add r1, #0x1 + add r2, sp, #0x0 + bl FUN_020020B0 + add r3, sp, #0x0 + ldrb r2, [r3, #0x1] + ldrb r3, [r3, #0x0] + ldr r0, [r4, #0xc] + ldr r1, [r4, #0x4] + bl FUN_020136F8 +_020020AA: + add sp, #0x4 + pop {r3-r4, pc} + .balign 4 + + thumb_func_start FUN_020020B0 +FUN_020020B0: ; 0x020020B0 + push {r3-r7, lr} + add r5, r0, #0x0 + add r4, r1, #0x0 + add r7, r3, #0x0 + ldrb r1, [r5, #0xa] + add r0, r7, #0x0 + add r6, r2, #0x0 + bl _s32_div_f + ldrb r2, [r5, #0x19] + ldrb r1, [r5, #0x16] + lsl r2, r2, #0x1 + add r1, r1, r2 + mul r1, r0 + strb r1, [r4, #0x0] + ldrb r1, [r5, #0xa] + add r0, r7, #0x0 + bl _s32_div_f + ldrb r2, [r5, #0xb] + ldrb r3, [r5, #0x1a] + ldrb r0, [r5, #0x18] + lsl r2, r2, #0x1c + lsr r2, r2, #0x1c + add r2, r3, r2 + mul r2, r1 + add r0, r0, r2 + strb r0, [r6, #0x0] + pop {r3-r7, pc} + .balign 4 + + thumb_func_start FUN_020020EC +FUN_020020EC: ; 0x020020EC + push {r3-r7, lr} + sub sp, #0x20 + ldr r5, [sp, #0x3c] + str r2, [sp, #0xc] + add r7, r0, #0x0 + str r1, [sp, #0x8] + str r3, [sp, #0x10] + ldr r2, _02002194 ; =0x00000141 + mov r0, #0x1 + mov r1, #0x1a + add r3, r5, #0x0 + bl FUN_0200A86C + add r4, r0, #0x0 + mov r0, #0x2 + add r1, r5, #0x0 + bl FUN_02012838 + add r1, r4, #0x0 + mov r2, #0x29 + mov r3, #0x0 + add r6, r0, #0x0 + bl FUN_02012880 + mov r3, #0x2a + add r2, r3, #0x0 + add r0, r6, #0x0 + add r1, r4, #0x0 + sub r3, #0x2c + bl FUN_02012880 + add r0, r4, #0x0 + bl FUN_0200A8B8 + add r0, r5, #0x0 + mov r1, #0x1 + str r6, [sp, #0x14] + bl FUN_02018FF4 + add r1, r0, #0x0 + str r1, [sp, #0x18] + mov r0, #0x0 + add r3, sp, #0x14 + strb r0, [r3, #0x8] + mov r0, #0x1 + strb r0, [r3, #0x9] + mov r0, #0x2 + strb r0, [r3, #0xa] + ldrb r0, [r3, #0xb] + mov r2, #0xf + bic r0, r2 + strb r0, [r3, #0xb] + ldrb r4, [r3, #0xb] + mov r0, #0x30 + bic r4, r0 + strb r4, [r3, #0xb] + ldrb r0, [r3, #0xb] + bic r0, r2 + strb r0, [r3, #0xb] + ldr r2, [sp, #0x8] + add r0, r7, #0x0 + bl FUN_02019150 + ldr r0, [sp, #0x18] + ldr r2, [sp, #0xc] + ldr r3, [sp, #0x10] + mov r1, #0x1 + bl FUN_0200CCA4 + lsl r0, r5, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #0x0] + mov r0, #0x2 + str r0, [sp, #0x4] + add r3, sp, #0x28 + ldrb r3, [r3, #0x10] + add r0, sp, #0x14 + mov r1, #0x8 + mov r2, #0x0 + bl FUN_02001C14 + add sp, #0x20 + pop {r3-r7, pc} + nop +_02002194: .word 0x00000141 + + thumb_func_start FUN_02002198 +FUN_02002198: ; 0x02002198 + push {r4, lr} + sub sp, #0x8 + mov r4, #0x0 + str r4, [sp, #0x0] + ldr r4, [sp, #0x10] + str r4, [sp, #0x4] + bl FUN_020020EC + add sp, #0x8 + pop {r4, pc} + + thumb_func_start FUN_020021AC +FUN_020021AC: ; 0x020021AC + push {r4-r6, lr} + add r5, r0, #0x0 + add r4, r1, #0x0 + bl FUN_02001C78 + add r6, r0, #0x0 + mov r0, #0x0 + mvn r0, r0 + cmp r6, r0 + beq _020021C8 + add r0, r5, #0x0 + add r1, r4, #0x0 + bl FUN_020021EC +_020021C8: + add r0, r6, #0x0 + pop {r4-r6, pc} + + thumb_func_start FUN_020021CC +FUN_020021CC: ; 0x020021CC + push {r4-r6, lr} + add r5, r0, #0x0 + add r4, r2, #0x0 + bl FUN_02001DDC + add r6, r0, #0x0 + mov r0, #0x0 + mvn r0, r0 + cmp r6, r0 + beq _020021E8 + add r0, r5, #0x0 + add r1, r4, #0x0 + bl FUN_020021EC +_020021E8: + add r0, r6, #0x0 + pop {r4-r6, pc} + + thumb_func_start FUN_020021EC +FUN_020021EC: ; 0x020021EC + push {r3-r5, lr} + add r5, r0, #0x0 + ldr r0, [r5, #0x4] + add r4, r1, #0x0 + mov r1, #0x0 + bl FUN_0200CCF8 + ldr r0, [r5, #0x4] + bl FUN_02019178 + ldr r1, [r5, #0x4] + add r0, r4, #0x0 + bl FUN_02016A8C + ldr r0, [r5, #0x0] + bl FUN_02012870 + add r0, r5, #0x0 + mov r1, #0x0 + bl FUN_02001C5C + pop {r3-r5, pc} + + thumb_func_start FUN_02002218 +FUN_02002218: ; 0x02002218 + push {r4, lr} + sub sp, #0x18 + mov r4, #0x8 + lsl r1, r1, #0x10 + str r4, [sp, #0x0] + mov r3, #0x10 + str r3, [sp, #0x4] + lsr r1, r1, #0x10 + str r1, [sp, #0x8] + lsl r1, r2, #0x10 + lsr r1, r1, #0x10 + str r1, [sp, #0xc] + str r4, [sp, #0x10] + ldr r1, _02002244 ; =0x020ECAC8 + mov r2, #0x0 + str r3, [sp, #0x14] + add r3, r2, #0x0 + bl FUN_02019658 + add sp, #0x18 + pop {r4, pc} + nop +_02002244: .word 0x020ECAC8 diff --git a/arm9/lib/include/OS_system.h b/arm9/lib/include/OS_system.h index 794e16d2..6ce585dc 100644 --- a/arm9/lib/include/OS_system.h +++ b/arm9/lib/include/OS_system.h @@ -35,5 +35,6 @@ OSIntrMode OS_GetCpsrIrq(); OSProcMode OS_GetProcMode(); void OS_SpinWait(); void OS_WaitVBlankIntr(); +void OS_WaitIrq(BOOL, u32); #endif //POKEDIAMOND_OS_SYSTEM_H diff --git a/arm9/lib/include/syscall.h b/arm9/lib/include/syscall.h new file mode 100644 index 00000000..8561cabe --- /dev/null +++ b/arm9/lib/include/syscall.h @@ -0,0 +1,6 @@ +#ifndef NITRO_SYSCALL_H_ +#define NITRO_SYSCALL_H_ + +void SVC_WaitByLoop(u32 ct); + +#endif //NITRO_SYSCALL_H_ diff --git a/arm9/lib/src/OS_system.c b/arm9/lib/src/OS_system.c index e5dfcb47..5379433b 100644 --- a/arm9/lib/src/OS_system.c +++ b/arm9/lib/src/OS_system.c @@ -3,6 +3,7 @@ // #include "OS_system.h" +#include "syscall.h" ARM_FUNC asm OSIntrMode OS_EnableInterrupts() { mrs r0, cpsr diff --git a/arm9/src/FUN_02000DE4.c b/arm9/src/FUN_02000DE4.c new file mode 100644 index 00000000..033ef4ce --- /dev/null +++ b/arm9/src/FUN_02000DE4.c @@ -0,0 +1,220 @@ +#include "global.h" +#include "SPI_pm.h" +#include "OS_interrupt.h" +#include "OS_system.h" +#include "CARD_backup.h" +#include "CARD_pullOut.h" +#include "CTRDG_common.h" +#include "PAD_pad.h" +#include "main.h" +#include "poke_overlay.h" + +extern struct Unk21C48B8 gUnknown21C48B8; + +extern BOOL FUN_02006234(struct Unk21DBE18 *, s32 *, int); +extern BOOL FUN_02006290(int); +extern void FUN_02006260(int); +extern BOOL FUN_02033678(void); +extern int FUN_020335B8(void); +extern BOOL FUN_0202FB80(void); +extern void ErrorHandling(void); +extern void FUN_02000FE8(void); +extern void FUN_02016464(void); + +void FUN_02000F4C(int arg0, int arg1); +void FUN_02000FE8(void); + +THUMB_FUNC void FUN_02000DF4(void) +{ + gBacklightTop.unk8 = -1; + gBacklightTop.unkC = 0; + gBacklightTop.unk10 = -1; // overlay invalid + gBacklightTop.unk14 = NULL; +} + +THUMB_FUNC void FUN_02000E0C(void) +{ + if (!gBacklightTop.unkC) + { + if (gBacklightTop.unk14 == NULL) + return; + if (gBacklightTop.unk10 != -1u) + HandleLoadOverlay(gBacklightTop.unk10, 0); + gBacklightTop.unk8 = gBacklightTop.unk10; + gBacklightTop.unkC = FUN_02006234(gBacklightTop.unk14, &gBacklightTop.unk18, 0); + gBacklightTop.unk10 = -1u; + gBacklightTop.unk14 = NULL; + } + if (FUN_02006290(gBacklightTop.unkC)) + { + FUN_02006260(gBacklightTop.unkC); + gBacklightTop.unkC = 0; + if (gBacklightTop.unk8 != -1u) + UnloadOverlayByID(gBacklightTop.unk8); + } +} + +THUMB_FUNC void FUN_02000E7C(FSOverlayID id, struct Unk21DBE18 * arg1) +{ + if (gBacklightTop.unk14 != NULL) + ErrorHandling(); + gBacklightTop.unk10 = id; + gBacklightTop.unk14 = arg1; +} + +THUMB_FUNC void FUN_02000E9C(void) +{ + FUN_0202FB80(); + OS_WaitIrq(TRUE, OS_IE_V_BLANK); + gUnknown21C48B8.unk2C++; + gUnknown21C48B8.unk30 = 0; + if (gUnknown21C48B8.unk0 != NULL) + gUnknown21C48B8.unk0(gUnknown21C48B8.unk4); +} + +THUMB_FUNC void FUN_02000EC8(u32 parameter) +{ + if (FUN_02033678() && CARD_TryWaitBackupAsync() == TRUE) + { + OS_ResetSystem(parameter); + } + FUN_02000E9C(); +} + +THUMB_FUNC void FUN_02000EE8(void) +{ + int r1 = FUN_020335B8(); + switch (r1) + { + case 1: + FUN_02000F4C(1, r1); + break; + case 2: + FUN_02000F4C(0, r1); + break; + case 3: + FUN_02000F4C(1, r1); + break; + } +} + +extern void FUN_0200E3A0(int, int); +extern BOOL FUN_02032DAC(void); +extern void FUN_020225F8(void); +extern void FUN_0202287C(void); + +// No Return +THUMB_FUNC void DoSoftReset(u32 parameter) +{ + FUN_0200E3A0(0, 0x7FFF); + FUN_0200E3A0(1, 0x7FFF); + if (FUN_02032DAC()) + { + FUN_020225F8(); + FUN_0202287C(); + } + do + { + FUN_02000FE8(); + FUN_02000EC8(parameter); + } while (1); +} + +extern void FUN_02033F70(int, int, int); + +THUMB_FUNC void FUN_02000F4C(int arg0, int arg1) +{ + if (arg1 == 3) + { + FUN_02033F70(0, 3, 0); + } + else if (arg0 == 0) + { + FUN_02033F70(0, 2, 0); + } + else + { + FUN_02033F70(0, 0, 0); + } + FUN_02032DAC(); + while (1) + { + FUN_02000FE8(); + FUN_02016464(); + if (gUnknown21C48B8.unk48 & 1) + break; + FUN_02000E9C(); + } + DoSoftReset(arg0); +} + +extern void FUN_0201265C(struct Unk21C4818 *, struct Unk21C4828 *); +extern void FUN_0201BA1C(int); +extern void FUN_0201B9E0(int); + +void FUN_02000FA4(void) +{ + struct Unk21C4818 spC; + struct Unk21C4828 sp0; + FUN_0201265C(&spC, &sp0); + { + int r4 = gUnknown21C48B8.unk2C; + int r5 = ((sp0.unk4 + sp0.unk8) << 24) + (spC.unk0 + ((256 * spC.unk4 * spC.unk8) << 16) + (sp0.unk0 << 16)); + FUN_0201BA1C(r4 + r5); + FUN_0201B9E0(r4 + r5); + } +} + +extern void FUN_0201CE04(void); +extern void FUN_0201CDD0(void); + +void FUN_02000FE8(void) +{ + PMBackLightSwitch top, bottom; + if (PAD_DetectFold()) + { + if (!gUnk021C4918.unk7) + { + FUN_0201CE04(); + if (CTRDG_IsPulledOut() == TRUE) + { + gBacklightTop.unk4 = 1; + } + { + int r1 = gBacklightTop.unk4; + while (1) + { + PMWakeUpTrigger trigger = PM_TRIGGER_COVER_OPEN | PM_TRIGGER_CARD; + if (gUnk021C4918.unk6 && !r1) + trigger |= PM_TRIGGER_CARTRIDGE; + PM_GoSleepMode(trigger, PM_PAD_LOGIC_OR, 0); + if (CARD_IsPulledOut()) + { + PM_ForceToPowerOff(); + break; + } + else if (PAD_DetectFold()) + { + r1 = gBacklightTop.unk4 = 1; + } + else + break; + } + FUN_0201CDD0(); + return; + } + } + else + { + PM_GetBackLight(&top, &bottom); + if (top == PM_BACKLIGHT_ON) + PM_SetBackLight(PM_LCD_ALL, PM_BACKLIGHT_OFF); + } + } + else + { + PM_GetBackLight(&top, &bottom); + if (top == PM_BACKLIGHT_OFF) + PM_SetBackLight(PM_LCD_ALL, gBacklightTop.unk0); + } +} diff --git a/arm9/src/main.c b/arm9/src/main.c index 8c80d686..f6c09fa1 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -13,15 +13,6 @@ FS_EXTERN_OVERLAY(MODULE_63); extern struct Unk21C48B8 gUnknown21C48B8; -extern struct { - s32 unk0; - u8 unk4; - u8 unk5; - u8 unk6; - u8 unk7; - u8 unk8; -} gUnk021C4918; - extern void OS_WaitIrq(); extern void FUN_02016438(s32); extern void InitSystemForTheGame(void); @@ -47,8 +38,6 @@ extern void FUN_02000FA4(void); extern void FUN_0200A2AC(void); extern void FUN_02015E30(void); extern void FUN_02000EE8(void); -extern void FUN_02000FE8(void); -extern void FUN_02016464(void); void DoSoftReset(u32 parameter); extern BOOL FUN_0202FB80(void); extern void FUN_02000E0C(void); @@ -59,12 +48,8 @@ extern void FUN_020222C4(void); extern void FUN_0200A318(void); extern void FUN_0200E2D8(void); extern void FUN_02003C10(void); -void FUN_02000F4C(int arg0, int arg1); -extern BOOL FUN_02006234(struct Unk21DBE18 *, s32 *, int); -extern BOOL FUN_02006290(int); -extern void FUN_02006260(int); -extern BOOL FUN_02033678(void); -extern int FUN_020335B8(void); +extern void FUN_02000FE8(void); +extern void FUN_02016464(void); extern struct Unk21DBE18 MOD63_UNK_021DBE18; extern struct Unk21DBE18 MOD52_UNK_021D76C8; @@ -154,198 +139,3 @@ THUMB_FUNC void NitroMain(void) FUN_0201B5CC(gUnknown21C48B8.unk20); } } - -THUMB_FUNC void FUN_02000DF4(void) -{ - gBacklightTop.unk8 = -1; - gBacklightTop.unkC = 0; - gBacklightTop.unk10 = -1; // overlay invalid - gBacklightTop.unk14 = NULL; -} - -THUMB_FUNC void FUN_02000E0C(void) -{ - if (!gBacklightTop.unkC) - { - if (gBacklightTop.unk14 == NULL) - return; - if (gBacklightTop.unk10 != -1u) - HandleLoadOverlay(gBacklightTop.unk10, 0); - gBacklightTop.unk8 = gBacklightTop.unk10; - gBacklightTop.unkC = FUN_02006234(gBacklightTop.unk14, &gBacklightTop.unk18, 0); - gBacklightTop.unk10 = -1u; - gBacklightTop.unk14 = NULL; - } - if (FUN_02006290(gBacklightTop.unkC)) - { - FUN_02006260(gBacklightTop.unkC); - gBacklightTop.unkC = 0; - if (gBacklightTop.unk8 != -1u) - UnloadOverlayByID(gBacklightTop.unk8); - } -} - -THUMB_FUNC void FUN_02000E7C(FSOverlayID id, struct Unk21DBE18 * arg1) -{ - if (gBacklightTop.unk14 != NULL) - ErrorHandling(); - gBacklightTop.unk10 = id; - gBacklightTop.unk14 = arg1; -} - -THUMB_FUNC void FUN_02000E9C(void) -{ - FUN_0202FB80(); - OS_WaitIrq(1, 1); - gUnknown21C48B8.unk2C++; - gUnknown21C48B8.unk30 = 0; - if (gUnknown21C48B8.unk0 != NULL) - gUnknown21C48B8.unk0(gUnknown21C48B8.unk4); -} - -THUMB_FUNC void FUN_02000EC8(u32 parameter) -{ - if (FUN_02033678() && CARD_TryWaitBackupAsync() == TRUE) - { - OS_ResetSystem(parameter); - } - FUN_02000E9C(); -} - -THUMB_FUNC void FUN_02000EE8(void) -{ - int r1 = FUN_020335B8(); - switch (r1) - { - case 1: - FUN_02000F4C(1, r1); - break; - case 2: - FUN_02000F4C(0, r1); - break; - case 3: - FUN_02000F4C(1, r1); - break; - } -} - -extern void FUN_0200E3A0(int, int); -extern BOOL FUN_02032DAC(void); -extern void FUN_020225F8(void); -extern void FUN_0202287C(void); - -// No Return -THUMB_FUNC void DoSoftReset(u32 parameter) -{ - FUN_0200E3A0(0, 0x7FFF); - FUN_0200E3A0(1, 0x7FFF); - if (FUN_02032DAC()) - { - FUN_020225F8(); - FUN_0202287C(); - } - do - { - FUN_02000FE8(); - FUN_02000EC8(parameter); - } while (1); -} - -extern void FUN_02033F70(int, int, int); - -THUMB_FUNC void FUN_02000F4C(int arg0, int arg1) -{ - if (arg1 == 3) - { - FUN_02033F70(0, 3, 0); - } - else if (arg0 == 0) - { - FUN_02033F70(0, 2, 0); - } - else - { - FUN_02033F70(0, 0, 0); - } - FUN_02032DAC(); - while (1) - { - FUN_02000FE8(); - FUN_02016464(); - if (gUnknown21C48B8.unk48 & 1) - break; - FUN_02000E9C(); - } - DoSoftReset(arg0); -} - -extern void FUN_0201265C(struct Unk21C4818 *, struct Unk21C4828 *); -extern void FUN_0201BA1C(int); -extern void FUN_0201B9E0(int); - -void FUN_02000FA4(void) -{ - struct Unk21C4818 spC; - struct Unk21C4828 sp0; - FUN_0201265C(&spC, &sp0); - { - int r4 = gUnknown21C48B8.unk2C; - int r5 = ((sp0.unk4 + sp0.unk8) << 24) + (spC.unk0 + ((256 * spC.unk4 * spC.unk8) << 16) + (sp0.unk0 << 16)); - FUN_0201BA1C(r4 + r5); - FUN_0201B9E0(r4 + r5); - } -} - -extern void FUN_0201CE04(void); -extern void FUN_0201CDD0(void); - -void FUN_02000FE8(void) -{ - PMBackLightSwitch top, bottom; - if (PAD_DetectFold()) - { - if (!gUnk021C4918.unk7) - { - FUN_0201CE04(); - if (CTRDG_IsPulledOut() == TRUE) - { - gBacklightTop.unk4 = 1; - } - { - int r1 = gBacklightTop.unk4; - while (1) - { - PMWakeUpTrigger trigger = PM_TRIGGER_COVER_OPEN | PM_TRIGGER_CARD; - if (gUnk021C4918.unk6 && !r1) - trigger |= PM_TRIGGER_CARTRIDGE; - PM_GoSleepMode(trigger, PM_PAD_LOGIC_OR, 0); - if (CARD_IsPulledOut()) - { - PM_ForceToPowerOff(); - break; - } - else if (PAD_DetectFold()) - { - r1 = gBacklightTop.unk4 = 1; - } - else - break; - } - FUN_0201CDD0(); - return; - } - } - else - { - PM_GetBackLight(&top, &bottom); - if (top == PM_BACKLIGHT_ON) - PM_SetBackLight(PM_LCD_ALL, PM_BACKLIGHT_OFF); - } - } - else - { - PM_GetBackLight(&top, &bottom); - if (top == PM_BACKLIGHT_OFF) - PM_SetBackLight(PM_LCD_ALL, gBacklightTop.unk0); - } -} diff --git a/include/main.h b/include/main.h index 23059702..93f0fc2a 100644 --- a/include/main.h +++ b/include/main.h @@ -60,6 +60,17 @@ struct Unk21C48B8 s32 unk6C; }; +struct UnkStruct_021C4918 { + s32 unk0; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; + u8 unk8; +}; + +extern struct UnkStruct_021C4918 gUnk021C4918; + extern struct Unk2106FA0 gBacklightTop; extern struct Unk2106FA0 gBacklightTop_2; // same as the first one, it's referenced twice in the constant pool... |