From 4462b430834cb9fc64eb118e79766e2129be7d65 Mon Sep 17 00:00:00 2001 From: Demki Date: Tue, 21 Apr 2020 18:11:57 +0300 Subject: initial disassembly of rom2.s --- asm/FUN_020C9C0C.s | 13766 --------------------------------- asm/entry.s | 4 +- asm/rom2.s | 130 +- asm/secure.s | 10 +- asm/unk_020C9C0C.s | 13766 +++++++++++++++++++++++++++++++++ asm/unk_020D5150.s | 21374 +++++++++++++++++++++++++++++++++++++++++++++++++++ global.inc | 44 +- pokediamond.lcf | 5 +- undefined_syms.txt | 1 + 9 files changed, 35201 insertions(+), 13899 deletions(-) delete mode 100644 asm/FUN_020C9C0C.s create mode 100644 asm/unk_020C9C0C.s create mode 100644 asm/unk_020D5150.s diff --git a/asm/FUN_020C9C0C.s b/asm/FUN_020C9C0C.s deleted file mode 100644 index b103a702..00000000 --- a/asm/FUN_020C9C0C.s +++ /dev/null @@ -1,13766 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - - - arm_func_start OS_WaitIrq -OS_WaitIrq: - stmdb sp!, {r4-r6,lr} - mov r5, r0 - mov r4, r1 - bl OS_DisableInterrupts - cmp r5, #0x0 - beq _020C9C3C - ldr r1, _020C9C80 ; =0x027E0000 - mvn r2, r4 - add r1, r1, #0x3000 - ldr r3, [r1, #0xff8] - and r2, r3, r2 - str r2, [r1, #0xff8] -_020C9C3C: - bl OS_RestoreInterrupts - ldr r1, _020C9C80 ; =0x027E0000 - add r0, r1, #0x3000 - ldr r0, [r0, #0xff8] - ands r0, r4, r0 - ldmneia sp!, {r4-r6,lr} - bxne lr - ldr r0, _020C9C84 ; =0x00003FF8 - add r6, r1, r0 - ldr r5, _020C9C88 ; =0x027E0060 -_020C9C64: - mov r0, r5 - bl OS_SleepThread - ldr r0, [r6, #0x0] - ands r0, r4, r0 - beq _020C9C64 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9C80: .word 0x027E0000 -_020C9C84: .word 0x00003FF8 -_020C9C88: .word 0x027E0060 - - arm_func_start OSi_IrqTimer3 -OSi_IrqTimer3: ; 0x020C9C8C - ldr ip, _020C9C98 ; =OSi_IrqCallback - mov r0, #0x7 - bx r12 - .balign 4 -_020C9C98: .word OSi_IrqCallback - - arm_func_start OSi_IrqTimer2 -OSi_IrqTimer2: ; 0x020C9C9C - ldr ip, _020C9CA8 ; =OSi_IrqCallback - mov r0, #0x6 - bx r12 - .balign 4 -_020C9CA8: .word OSi_IrqCallback - - arm_func_start OSi_IrqTimer1 -OSi_IrqTimer1: ; 0x020C9CAC - ldr ip, _020C9CB8 ; =OSi_IrqCallback - mov r0, #0x5 - bx r12 - .balign 4 -_020C9CB8: .word OSi_IrqCallback - - arm_func_start OSi_IrqTimer0 -OSi_IrqTimer0: ; 0x020C9CBC - ldr ip, _020C9CC8 ; =OSi_IrqCallback - mov r0, #0x4 - bx r12 - .balign 4 -_020C9CC8: .word OSi_IrqCallback - - arm_func_start OSi_IrqDma3 -OSi_IrqDma3: ; 0x020C9CCC - ldr ip, _020C9CD8 ; =OSi_IrqCallback - mov r0, #0x3 - bx r12 - .balign 4 -_020C9CD8: .word OSi_IrqCallback - - arm_func_start OSi_IrqDma2 -OSi_IrqDma2: ; 0x020C9CDC - ldr ip, _020C9CE8 ; =OSi_IrqCallback - mov r0, #0x2 - bx r12 - .balign 4 -_020C9CE8: .word OSi_IrqCallback - - arm_func_start OSi_IrqDma1 -OSi_IrqDma1: ; 0x020C9CEC - ldr ip, _020C9CF8 ; =OSi_IrqCallback - mov r0, #0x1 - bx r12 - .balign 4 -_020C9CF8: .word OSi_IrqCallback - - arm_func_start OSi_IrqDma0 -OSi_IrqDma0: ; 0x020C9CFC - ldr ip, _020C9D08 ; =OSi_IrqCallback - mov r0, #0x0 - bx r12 - .balign 4 -_020C9D08: .word OSi_IrqCallback - - arm_func_start OSi_IrqCallback -OSi_IrqCallback: ; 0x020C9D0C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r1, #0xc - mul r4, r0, r1 - ldr r2, _020C9D94 ; =0x021D341C - ldr r3, _020C9D98 ; =0x02106818 - mov r0, r0, lsl #0x1 - ldr r1, [r2, r4] - ldrh r3, [r3, r0] - mov r5, #0x1 - mov r0, #0x0 - str r0, [r2, r4] - cmp r1, #0x0 - mov r5, r5, lsl r3 - beq _020C9D54 - ldr r0, _020C9D9C ; =0x021D3424 - ldr r0, [r0, r4] - blx r1 -_020C9D54: - ldr r0, _020C9DA0 ; =0x027E0000 - ldr r1, _020C9DA4 ; =0x021D3420 - add r0, r0, #0x3000 - ldr r2, [r0, #0xff8] - orr r2, r2, r5 - str r2, [r0, #0xff8] - ldr r0, [r1, r4] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - mov r0, r5 - bl OS_DisableIrqMask - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C9D94: .word 0x021D341C -_020C9D98: .word 0x02106818 -_020C9D9C: .word 0x021D3424 -_020C9DA0: .word 0x027E0000 -_020C9DA4: .word 0x021D3420 - - arm_func_start OS_IrqDummy -OS_IrqDummy: ; 0x020C9DA8 - bx lr - - arm_func_start OS_SetIrqStackChecker -OS_SetIrqStackChecker: ; 0x020C9DAC - ldr ip, _020C9DD0 ; =0x027E0000 - ldr r3, _020C9DD4 ; =0xFDDB597D - add r0, r12, #0x3000 - ldr r2, _020C9DD8 ; =0x7BF9DD5B - ldr r1, _020C9DDC ; =0x00000400 - str r3, [r0, #0xf7c] - add r0, r12, #0x3f80 - str r2, [r0, -r1] - bx lr - .balign 4 -_020C9DD0: .word 0x027E0000 -_020C9DD4: .word 0xFDDB597D -_020C9DD8: .word 0x7BF9DD5B -_020C9DDC: .word 0x00000400 - - arm_func_start OS_ResetRequestIrqMask -OS_ResetRequestIrqMask: ; 0x020C9DE0 - ldr ip, _020C9E0C ; =0x04000208 - mov r1, #0x0 - ldrh r3, [r12, #0x0] - ldr r2, _020C9E10 ; =0x04000214 - strh r1, [r12, #0x0] - ldr r1, [r2, #0x0] - str r0, [r2, #0x0] - ldrh r0, [r12, #0x0] - mov r0, r1 - strh r3, [r12, #0x0] - bx lr - .balign 4 -_020C9E0C: .word 0x04000208 -_020C9E10: .word 0x04000214 - - arm_func_start OS_DisableIrqMask -OS_DisableIrqMask: ; 0x020C9E14 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr lr, _020C9E54 ; =0x04000208 - mov r3, #0x0 - ldrh r12, [lr, #0x0] - ldr r2, _020C9E58 ; =0x04000210 - mvn r1, r0 - strh r3, [lr, #0x0] - ldr r0, [r2, #0x0] - and r1, r0, r1 - str r1, [r2, #0x0] - ldrh r1, [lr, #0x0] - strh r12, [lr, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C9E54: .word 0x04000208 -_020C9E58: .word 0x04000210 - - arm_func_start OS_EnableIrqMask -OS_EnableIrqMask: ; 0x020C9E5C - ldr ip, _020C9E8C ; =0x04000208 - mov r1, #0x0 - ldrh r3, [r12, #0x0] - ldr r2, _020C9E90 ; =0x04000210 - strh r1, [r12, #0x0] - ldr r1, [r2, #0x0] - orr r0, r1, r0 - str r0, [r2, #0x0] - ldrh r0, [r12, #0x0] - mov r0, r1 - strh r3, [r12, #0x0] - bx lr - .balign 4 -_020C9E8C: .word 0x04000208 -_020C9E90: .word 0x04000210 - - arm_func_start OS_SetIrqMask -OS_SetIrqMask: ; 0x020C9E94 - ldr ip, _020C9EC0 ; =0x04000208 - mov r1, #0x0 - ldrh r3, [r12, #0x0] - ldr r2, _020C9EC4 ; =0x04000210 - strh r1, [r12, #0x0] - ldr r1, [r2, #0x0] - str r0, [r2, #0x0] - ldrh r0, [r12, #0x0] - mov r0, r1 - strh r3, [r12, #0x0] - bx lr - .balign 4 -_020C9EC0: .word 0x04000208 -_020C9EC4: .word 0x04000210 - - arm_func_start OSi_EnterTimerCallback -OSi_EnterTimerCallback: ; 0x020C9EC8 - stmdb sp!, {r4,lr} - mov r3, #0xc - mul r4, r0, r3 - ldr ip, _020C9F08 ; =0x021D344C - add r0, r0, #0x3 - mov r3, #0x1 - mov r0, r3, lsl r0 - ldr r3, _020C9F0C ; =0x021D3454 - str r1, [r12, r4] - str r2, [r3, r4] - bl OS_EnableIrqMask - ldr r0, _020C9F10 ; =0x021D3450 - mov r1, #0x1 - str r1, [r0, r4] - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C9F08: .word 0x021D344C -_020C9F0C: .word 0x021D3454 -_020C9F10: .word 0x021D3450 - - arm_func_start OSi_EnterDmaCallback -OSi_EnterDmaCallback: ; 0x020C9F14 - stmdb sp!, {r4-r6,lr} - mov r3, #0xc - mul r6, r0, r3 - ldr ip, _020C9F54 ; =0x021D341C - add r4, r0, #0x8 - mov r5, #0x1 - mov r0, r5, lsl r4 - ldr r3, _020C9F58 ; =0x021D3424 - str r1, [r12, r6] - str r2, [r3, r6] - bl OS_EnableIrqMask - and r1, r0, r5, lsl r4 - ldr r0, _020C9F5C ; =0x021D3420 - str r1, [r0, r6] - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9F54: .word 0x021D341C -_020C9F58: .word 0x021D3424 -_020C9F5C: .word 0x021D3420 - - arm_func_start OS_GetIrqFunction -OS_GetIrqFunction: ; 0x020C9F60 - ldr r2, _020C9FE4 ; =0x027E0000 - mov r3, #0x0 -_020C9F68: - ands r1, r0, #0x1 - beq _020C9FC8 - cmp r3, #0x8 - blt _020C9F98 - cmp r3, #0xb - bgt _020C9F98 - sub r1, r3, #0x8 - mov r0, #0xc - mul r2, r1, r0 - ldr r0, _020C9FE8 ; =0x021D341C - ldr r0, [r0, r2] - bx lr -_020C9F98: - cmp r3, #0x3 - blt _020C9FC0 - cmp r3, #0x6 - bgt _020C9FC0 - add r1, r3, #0x1 - mov r0, #0xc - mul r2, r1, r0 - ldr r0, _020C9FE8 ; =0x021D341C - ldr r0, [r0, r2] - bx lr -_020C9FC0: - ldr r0, [r2, #0x0] - bx lr -_020C9FC8: - add r3, r3, #0x1 - cmp r3, #0x16 - mov r0, r0, lsr #0x1 - add r2, r2, #0x4 - blt _020C9F68 - mov r0, #0x0 - bx lr - .balign 4 -_020C9FE4: .word 0x027E0000 -_020C9FE8: .word 0x021D341C - - arm_func_start OS_SetIrqFunction -OS_SetIrqFunction: ; 0x020C9FEC - stmdb sp!, {r4-r8,lr} - mov r8, #0x0 - ldr lr, _020CA074 ; =0x027E0000 - ldr r5, _020CA078 ; =0x021D341C - mov r6, r8 - mov r12, r8 - mov r3, #0x1 - mov r2, #0xc -_020CA00C: - ands r4, r0, #0x1 - beq _020CA05C - mov r7, r6 - cmp r8, #0x8 - blt _020CA030 - cmp r8, #0xb - suble r4, r8, #0x8 - mlale r7, r4, r2, r5 - ble _020CA04C -_020CA030: - cmp r8, #0x3 - blt _020CA048 - cmp r8, #0x6 - addle r4, r8, #0x1 - mlale r7, r4, r2, r5 - ble _020CA04C -_020CA048: - str r1, [lr, r8, lsl #0x2] -_020CA04C: - cmp r7, #0x0 - strne r1, [r7, #0x0] - strne r12, [r7, #0x8] - strne r3, [r7, #0x4] -_020CA05C: - add r8, r8, #0x1 - cmp r8, #0x16 - mov r0, r0, lsr #0x1 - blt _020CA00C - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020CA074: .word 0x027E0000 -_020CA078: .word 0x021D341C - - arm_func_start OS_InitIrqTable -OS_InitIrqTable: ; 0x020CA07C - ldr r0, _020CA090 ; =0x027E0060 - mov r1, #0x0 - str r1, [r0, #0x4] - str r1, [r0, #0x0] - bx lr - .balign 4 -_020CA090: .word 0x027E0060 - - arm_func_start OS_UnlockCartridge -OS_UnlockCartridge: ; 0x020CA094 - ldr r1, _020CA09C ; =OS_UnlockCartridge2 - bx r1 - .balign 4 -_020CA09C: .word OS_UnlockCartridge2 - - arm_func_start OS_GetLockID -OS_GetLockID: ; 0x020CA0A0 - ldr r3, _020CA0F0 ; =0x027FFFB0 - ldr r1, [r3, #0x0] - clz r2, r1 - cmp r2, #0x20 - movne r0, #0x40 - bne _020CA0D4 - add r3, r3, #0x4 - ldr r1, [r3, #0x0] - clz r2, r1 - cmp r2, #0x20 - ldr r0, _020CA0F4 ; =0xFFFFFFFD - bxeq lr - mov r0, #0x60 -_020CA0D4: - add r0, r0, r2 - mov r1, #0x80000000 - mov r1, r1, lsr r2 - ldr r2, [r3, #0x0] - bic r2, r2, r1 - str r2, [r3, #0x0] - bx lr - .balign 4 -_020CA0F0: .word 0x027FFFB0 -_020CA0F4: .word 0xFFFFFFFD - - arm_func_start OS_ReleaseLockID -OS_ReleaseLockID: ; 0x020CA0F8 - ldr r3, _020CA124 ; =0x027FFFB0 - cmp r0, #0x60 - addpl r3, r3, #0x4 - subpl r0, r0, #0x60 - submi r0, r0, #0x40 - mov r1, #0x80000000 - mov r1, r1, lsr r0 - ldr r2, [r3, #0x0] - orr r2, r2, r1 - str r2, [r3, #0x0] - bx lr - .balign 4 -_020CA124: .word 0x027FFFB0 - - arm_func_start OS_ReadOwnerOfLockWord -OS_ReadOwnerOfLockWord: ; 0x020CA128 - ldrh r0, [r0, #0x4] - bx lr - - arm_func_start OSi_FreeCardBus -OSi_FreeCardBus: ; 0x020CA130 - ldr r1, _020CA144 ; =0x04000204 - ldrh r0, [r1, #0x0] - orr r0, r0, #0x800 - strh r0, [r1, #0x0] - bx lr - .balign 4 -_020CA144: .word 0x04000204 - - arm_func_start OSi_AllocateCardBus -OSi_AllocateCardBus: ; 0x020CA148 - ldr r1, _020CA15C ; =0x04000204 - ldrh r0, [r1, #0x0] - bic r0, r0, #0x800 - strh r0, [r1, #0x0] - bx lr - .balign 4 -_020CA15C: .word 0x04000204 - - arm_func_start OS_UnlockCard -OS_UnlockCard: ; 0x020CA160 - ldr ip, _020CA170 ; =OS_UnlockByWord - ldr r1, _020CA174 ; =0x027FFFE0 - ldr r2, _020CA178 ; =OSi_FreeCardBus - bx r12 - .balign 4 -_020CA170: .word OS_UnlockByWord -_020CA174: .word 0x027FFFE0 -_020CA178: .word OSi_FreeCardBus - - arm_func_start OS_TryLockCard -OS_TryLockCard: ; 0x020CA17C - ldr ip, _020CA18C ; =OS_TryLockByWord - ldr r1, _020CA190 ; =0x027FFFE0 - ldr r2, _020CA194 ; =OSi_AllocateCardBus - bx r12 - .balign 4 -_020CA18C: .word OS_TryLockByWord -_020CA190: .word 0x027FFFE0 -_020CA194: .word OSi_AllocateCardBus - - arm_func_start OSi_FreeCartridgeBus -OSi_FreeCartridgeBus: ; 0x020CA198 - ldr r1, _020CA1AC ; =0x04000204 - ldrh r0, [r1, #0x0] - orr r0, r0, #0x80 - strh r0, [r1, #0x0] - bx lr - .balign 4 -_020CA1AC: .word 0x04000204 - - arm_func_start OSi_AllocateCartridgeBus -OSi_AllocateCartridgeBus: ; 0x020CA1B0 - ldr r1, _020CA1C4 ; =0x04000204 - ldrh r0, [r1, #0x0] - bic r0, r0, #0x80 - strh r0, [r1, #0x0] - bx lr - .balign 4 -_020CA1C4: .word 0x04000204 - - arm_func_start OS_TryLockCartridge -OS_TryLockCartridge: ; 0x020CA1C8 - ldr ip, _020CA1DC ; =OSi_DoTryLockByWord - ldr r1, _020CA1E0 ; =0x027FFFE8 - ldr r2, _020CA1E4 ; =OSi_AllocateCartridgeBus - mov r3, #0x1 - bx r12 - .balign 4 -_020CA1DC: .word OSi_DoTryLockByWord -_020CA1E0: .word 0x027FFFE8 -_020CA1E4: .word OSi_AllocateCartridgeBus - - arm_func_start OS_UnlockCartridge2 -OS_UnlockCartridge2: ; 0x020CA1E8 - ldr ip, _020CA1FC ; =FUN_020CA2B8 - ldr r1, _020CA200 ; =0x027FFFE8 - ldr r2, _020CA204 ; =OSi_FreeCartridgeBus - mov r3, #0x1 - bx r12 - .balign 4 -_020CA1FC: .word FUN_020CA2B8 -_020CA200: .word 0x027FFFE8 -_020CA204: .word OSi_FreeCartridgeBus - - arm_func_start OS_LockCartridge -OS_LockCartridge: ; 0x020CA208 - ldr ip, _020CA21C ; =FUN_020CA358 - ldr r1, _020CA220 ; =0x027FFFE8 - ldr r2, _020CA224 ; =OSi_AllocateCartridgeBus - mov r3, #0x1 - bx r12 - .balign 4 -_020CA21C: .word FUN_020CA358 -_020CA220: .word 0x027FFFE8 -_020CA224: .word OSi_AllocateCartridgeBus - - arm_func_start OSi_DoTryLockByWord -OSi_DoTryLockByWord: - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - movs r6, r3 - mov r9, r0 - mov r8, r1 - mov r7, r2 - beq _020CA250 - bl OS_DisableInterrupts_IrqAndFiq - mov r5, r0 - b _020CA258 -_020CA250: - bl OS_DisableInterrupts - mov r5, r0 -_020CA258: - mov r0, r9 - mov r1, r8 - bl MI_SwapWord - movs r4, r0 - bne _020CA27C - cmp r7, #0x0 - beq _020CA278 - blx r7 -_020CA278: - strh r9, [r8, #0x4] -_020CA27C: - cmp r6, #0x0 - beq _020CA290 - mov r0, r5 - bl OS_RestoreInterrupts_IrqAndFiq - b _020CA298 -_020CA290: - mov r0, r5 - bl OS_RestoreInterrupts -_020CA298: - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r9,lr} - bx lr - - arm_func_start OS_UnlockByWord -OS_UnlockByWord: ; 0x020CA2A8 - ldr ip, _020CA2B4 ; =FUN_020CA2B8 - mov r3, #0x0 - bx r12 - .balign 4 -_020CA2B4: .word FUN_020CA2B8 - - arm_func_start FUN_020CA2B8 -FUN_020CA2B8: ; 0x020CA2B8 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r1 - ldrh r1, [r7, #0x4] - mov r6, r2 - mov r5, r3 - cmp r0, r1 - addne sp, sp, #0x4 - mvnne r0, #0x1 - ldmneia sp!, {r4-r7,lr} - bxne lr - cmp r5, #0x0 - beq _020CA2F8 - bl OS_DisableInterrupts_IrqAndFiq - mov r4, r0 - b _020CA300 -_020CA2F8: - bl OS_DisableInterrupts - mov r4, r0 -_020CA300: - mov r0, #0x0 - strh r0, [r7, #0x4] - cmp r6, #0x0 - beq _020CA314 - blx r6 -_020CA314: - mov r0, #0x0 - str r0, [r7, #0x0] - cmp r5, #0x0 - beq _020CA330 - mov r0, r4 - bl OS_RestoreInterrupts_IrqAndFiq - b _020CA338 -_020CA330: - mov r0, r4 - bl OS_RestoreInterrupts -_020CA338: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start OS_TryLockByWord -OS_TryLockByWord: ; 0x020CA348 - ldr ip, _020CA354 ; =FUN_020CA358 - mov r3, #0x0 - bx r12 - .balign 4 -_020CA354: .word FUN_020CA358 - - arm_func_start FUN_020CA358 -FUN_020CA358: ; 0x020CA358 - stmdb sp!, {r4-r8,lr} - mov r8, r0 - mov r7, r1 - mov r6, r2 - mov r5, r3 - bl OSi_DoTryLockByWord - cmp r0, #0x0 - ldmleia sp!, {r4-r8,lr} - bxle lr - mov r4, #0x400 -_020CA380: - mov r0, r4 - blx FUN_020005F2 - mov r0, r8 - mov r1, r7 - mov r2, r6 - mov r3, r5 - bl OSi_DoTryLockByWord - cmp r0, #0x0 - bgt _020CA380 - ldmia sp!, {r4-r8,lr} - bx lr - - arm_func_start OS_InitLock -OS_InitLock: ; 0x020CA3AC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020CA484 ; =0x021D347C - ldr r1, [r0, #0x0] - cmp r1, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - mov r2, #0x1 - ldr r1, _020CA488 ; =0x027FFFF0 - str r2, [r0, #0x0] - mov r2, #0x0 - mov r0, #0x7e - str r2, [r1, #0x0] - bl OS_TryLockByWord - ldr r5, _020CA488 ; =0x027FFFF0 - ldrh r0, [r5, #0x6] - cmp r0, #0x0 - beq _020CA410 - mov r4, #0x400 -_020CA3FC: - mov r0, r4 - blx FUN_020005F2 - ldrh r0, [r5, #0x6] - cmp r0, #0x0 - bne _020CA3FC -_020CA410: - ldr r2, _020CA48C ; =0x027FFFB0 - mvn r12, #0x0 - mov r0, #0x10000 - ldr r3, _020CA490 ; =0x027FFFB4 - ldr r1, _020CA494 ; =0x027FFFC0 - str r12, [r2, #0x0] - rsb r12, r0, #0x0 - mov r0, #0x0 - mov r2, #0x28 - str r12, [r3, #0x0] - bl MIi_CpuClear32 - ldr ip, _020CA498 ; =0x04000204 - ldr r1, _020CA488 ; =0x027FFFF0 - ldrh r3, [r12, #0x0] - mov r0, #0x7e - mov r2, #0x0 - orr r3, r3, #0x800 - strh r3, [r12, #0x0] - ldrh r3, [r12, #0x0] - orr r3, r3, #0x80 - strh r3, [r12, #0x0] - bl OS_UnlockByWord - ldr r1, _020CA488 ; =0x027FFFF0 - mov r0, #0x7f - mov r2, #0x0 - bl OS_TryLockByWord - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020CA484: .word 0x021D347C -_020CA488: .word 0x027FFFF0 -_020CA48C: .word 0x027FFFB0 -_020CA490: .word 0x027FFFB4 -_020CA494: .word 0x027FFFC0 -_020CA498: .word 0x04000204 - - arm_func_start OS_VSNPrintf -OS_VSNPrintf: ; 0x020CA49C - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x64 - mov r9, r2 - str r1, [sp, #0x54] - str r0, [sp, #0x5c] - str r0, [sp, #0x58] - ldrsb r0, [r9, #0x0] - str r1, [sp, #0x0] - mov r11, r3 - cmp r0, #0x0 - beq _020CAD18 - mov r0, #0xa - str r0, [sp, #0xc] - mov r0, #0x0 - str r0, [sp, #0x4] - mov r0, #0x20 - str r0, [sp, #0x1c] - mov r0, #0x30 - str r0, [sp, #0x20] - mvn r0, #0x0 - str r0, [sp, #0x8] - mov r0, #0x57 - str r0, [sp, #0x10] - mov r0, #0x8 - str r0, [sp, #0x14] - mov r0, #0x37 - str r0, [sp, #0x18] - mov r0, #0x10 - str r0, [sp, #0x24] - mov r0, #0x1 - str r0, [sp, #0x28] - mov r0, #0x2b - str r0, [sp, #0x34] - mov r0, #0x2d - str r0, [sp, #0x30] - mov r0, #0x2 - str r0, [sp, #0x2c] -_020CA530: - ldrsb r1, [r9, #0x0] - and r0, r1, #0xff - eor r0, r0, #0x20 - sub r0, r0, #0xa1 - cmp r0, #0x3c - bhs _020CA56C - add r0, sp, #0x54 - bl string_put_char - ldrsb r1, [r9, #0x1]! - cmp r1, #0x0 - beq _020CAD0C - add r0, sp, #0x54 - add r9, r9, #0x1 - bl string_put_char - b _020CAD0C -_020CA56C: - cmp r1, #0x25 - beq _020CA584 - add r0, sp, #0x54 - add r9, r9, #0x1 - bl string_put_char - b _020CAD0C -_020CA584: - ldr r6, [sp, #0x4] - ldr r5, [sp, #0x8] - ldr r2, [sp, #0xc] - ldr r0, [sp, #0x10] - mov r10, r6 - mov r3, r9 -_020CA59C: - ldrsb r4, [r9, #0x1]! - cmp r4, #0x20 - bgt _020CA5B4 - cmp r4, #0x20 - beq _020CA5F4 - b _020CA60C -_020CA5B4: - cmp r4, #0x30 - bgt _020CA60C - cmp r4, #0x2b - blt _020CA60C - cmp r4, #0x2b - beq _020CA5E0 - cmp r4, #0x2d - beq _020CA5FC - cmp r4, #0x30 - beq _020CA604 - b _020CA60C -_020CA5E0: - ldrsb r1, [r9, #-0x1] - cmp r1, #0x20 - bne _020CA60C - orr r6, r6, #0x2 - b _020CA59C -_020CA5F4: - orr r6, r6, #0x1 - b _020CA59C -_020CA5FC: - orr r6, r6, #0x8 - b _020CA59C -_020CA604: - orr r6, r6, #0x10 - b _020CA59C -_020CA60C: - cmp r4, #0x2a - bne _020CA640 - add r11, r11, #0x4 - ldr r10, [r11, #-0x4] - add r9, r9, #0x1 - cmp r10, #0x0 - rsblt r10, r10, #0x0 - orrlt r6, r6, #0x8 - b _020CA654 -_020CA630: - ldrsb r4, [r9], #0x1 - mov r1, #0xa - mla r1, r10, r1, r4 - sub r10, r1, #0x30 -_020CA640: - ldrsb r1, [r9, #0x0] - cmp r1, #0x30 - blt _020CA654 - cmp r1, #0x39 - ble _020CA630 -_020CA654: - ldrsb r1, [r9, #0x0] - cmp r1, #0x2e - bne _020CA6AC - ldrsb r1, [r9, #0x1]! - ldr r5, [sp, #0x4] - cmp r1, #0x2a - bne _020CA698 - add r11, r11, #0x4 - ldr r5, [r11, #-0x4] - add r9, r9, #0x1 - cmp r5, #0x0 - ldrlt r5, [sp, #0x8] - b _020CA6AC -_020CA688: - ldrsb r4, [r9], #0x1 - mov r1, #0xa - mla r1, r5, r1, r4 - sub r5, r1, #0x30 -_020CA698: - ldrsb r1, [r9, #0x0] - cmp r1, #0x30 - blt _020CA6AC - cmp r1, #0x39 - ble _020CA688 -_020CA6AC: - ldrsb r1, [r9, #0x0] - cmp r1, #0x68 - beq _020CA6C4 - cmp r1, #0x6c - beq _020CA6DC - b _020CA6F0 -_020CA6C4: - ldrsb r1, [r9, #0x1]! - cmp r1, #0x68 - orrne r6, r6, #0x40 - addeq r9, r9, #0x1 - orreq r6, r6, #0x100 - b _020CA6F0 -_020CA6DC: - ldrsb r1, [r9, #0x1]! - cmp r1, #0x6c - orrne r6, r6, #0x20 - addeq r9, r9, #0x1 - orreq r6, r6, #0x80 -_020CA6F0: - ldrsb r1, [r9, #0x0] - cmp r1, #0x69 - bgt _020CA740 - cmp r1, #0x63 - blt _020CA720 - cmp r1, #0x63 - beq _020CA7B4 - cmp r1, #0x64 - beq _020CA96C - cmp r1, #0x69 - beq _020CA96C - b _020CA950 -_020CA720: - cmp r1, #0x25 - bgt _020CA734 - cmp r1, #0x25 - beq _020CA934 - b _020CA950 -_020CA734: - cmp r1, #0x58 - beq _020CA7A0 - b _020CA950 -_020CA740: - cmp r1, #0x6e - bgt _020CA754 - cmp r1, #0x6e - beq _020CA8DC - b _020CA950 -_020CA754: - sub r1, r1, #0x6f - cmp r1, #0x9 - addls pc, pc, r1, lsl #0x2 - b _020CA950 -_020CA764: - b _020CA78C - b _020CA7A8 - b _020CA950 - b _020CA950 - b _020CA828 - b _020CA950 - b _020CA798 - b _020CA950 - b _020CA950 - b _020CA964 -_020CA78C: - ldr r2, [sp, #0x14] - orr r6, r6, #0x1000 - b _020CA96C -_020CA798: - orr r6, r6, #0x1000 - b _020CA96C -_020CA7A0: - ldr r0, [sp, #0x18] - b _020CA964 -_020CA7A8: - orr r6, r6, #0x4 - ldr r5, [sp, #0x14] - b _020CA964 -_020CA7B4: - cmp r5, #0x0 - bge _020CA950 - ands r0, r6, #0x8 - add r11, r11, #0x4 - ldr r4, [r11, #-0x4] - beq _020CA7F0 - mov r0, r4, lsl #0x18 - mov r1, r0, asr #0x18 - add r0, sp, #0x54 - bl string_put_char - ldr r1, [sp, #0x1c] - sub r2, r10, #0x1 - add r0, sp, #0x54 - bl string_fill_char - b _020CA820 -_020CA7F0: - ands r0, r6, #0x10 - ldrne r0, [sp, #0x20] - sub r2, r10, #0x1 - ldreq r0, [sp, #0x1c] - mov r0, r0, lsl #0x18 - mov r1, r0, asr #0x18 - add r0, sp, #0x54 - bl string_fill_char - mov r0, r4, lsl #0x18 - mov r1, r0, asr #0x18 - add r0, sp, #0x54 - bl string_put_char -_020CA820: - add r9, r9, #0x1 - b _020CAD0C -_020CA828: - add fp, fp, #0x4 - cmp r5, #0x0 - ldr r7, [sp, #0x4] - ldr r4, [fp, #-0x4] - bge _020CA860 - ldrsb r0, [r4] - cmp r0, #0x0 - beq _020CA874 -_020CA848: - add r7, r7, #0x1 - ldrsb r0, [r4, r7] - cmp r0, #0x0 - bne _020CA848 - b _020CA874 -_020CA85C: - add r7, r7, #0x1 -_020CA860: - cmp r7, r5 - bge _020CA874 - ldrsb r0, [r4, r7] - cmp r0, #0x0 - bne _020CA85C -_020CA874: - ands r0, r6, #0x8 - sub sl, sl, r7 - beq _020CA8A4 - mov r1, r4 - mov r2, r7 - add r0, sp, #0x54 - bl string_put_string - ldr r1, [sp, #0x1C] - mov r2, sl - add r0, sp, #0x54 - bl string_fill_char - b _020CA8D4 -_020CA8A4: - ands r0, r6, #0x10 - ldrne r0, [sp, #0x20] - mov r2, sl - ldreq r0, [sp, #0x1C] - mov r0, r0, lsl #0x18 - mov r1, r0, asr #0x18 - add r0, sp, #0x54 - bl string_fill_char - mov r1, r4 - mov r2, r7 - add r0, sp, #0x54 - bl string_put_string -_020CA8D4: - add r9, r9, #0x1 - b _020CAD0C -_020CA8DC: - ands r0, r6, #0x100 - ldr r1, [sp, #0x58] - ldr r0, [sp, #0x5c] - sub r2, r1, r0 - bne _020CA92C - ands r0, r6, #0x40 - addne r11, r11, #0x4 - ldrne r0, [r11, #-0x4] - strneh r2, [r0, #0x0] - bne _020CA92C - ands r0, r6, #0x80 - addeq r11, r11, #0x4 - ldreq r0, [r11, #-0x4] - streq r2, [r0, #0x0] - beq _020CA92C - add r11, r11, #0x4 - ldr r0, [r11, #-0x4] - mov r1, r2, asr #0x1f - str r2, [r0, #0x0] - str r1, [r0, #0x4] -_020CA92C: - add r9, r9, #0x1 - b _020CAD0C -_020CA934: - add r0, r3, #0x1 - cmp r0, r9 - bne _020CA950 - add r0, sp, #0x54 - add r9, r9, #0x1 - bl string_put_char - b _020CAD0C -_020CA950: - add r0, sp, #0x54 - mov r1, r3 - sub r2, r9, r3 - bl string_put_string - b _020CAD0C -_020CA964: - ldr r2, [sp, #0x24] - orr r6, r6, #0x1000 -_020CA96C: - ands r1, r6, #0x8 - bicne r6, r6, #0x10 - cmp r5, #0x0 - bicge r6, r6, #0x10 - ldrlt r5, [sp, #0x28] - ldr r7, [sp, #0x4] - ands r1, r6, #0x1000 - beq _020CAA20 - ands r1, r6, #0x100 - addne r11, r11, #0x4 - ldrneb r4, [r11, #-0x4] - movne r1, #0x0 - bne _020CA9D0 - ands r1, r6, #0x40 - addne r11, r11, #0x4 - ldrneh r4, [r11, #-0x4] - movne r1, #0x0 - bne _020CA9D0 - ands r1, r6, #0x80 - addne r11, r11, #0x8 - ldrne r1, [r11, #-0x4] - ldrne r4, [r11, #-0x8] - addeq r11, r11, #0x4 - ldreq r4, [r11, #-0x4] - moveq r1, #0x0 -_020CA9D0: - bic r6, r6, #0x3 - ands r3, r6, #0x4 - beq _020CAAD8 - cmp r2, #0x10 - bne _020CAA0C - mov r3, #0x0 - cmp r1, r3 - cmpeq r4, r3 - beq _020CAAD8 - ldr r3, [sp, #0x20] - ldr r7, [sp, #0x2c] - strb r3, [sp, #0x39] - add r3, r0, #0x21 - strb r3, [sp, #0x38] - b _020CAAD8 -_020CAA0C: - cmp r2, #0x8 - ldreq r3, [sp, #0x20] - ldreq r7, [sp, #0x28] - streqb r3, [sp, #0x38] - b _020CAAD8 -_020CAA20: - ands r1, r6, #0x100 - addne r11, r11, #0x4 - ldrnesb r4, [r11, #-0x4] - movne r1, r4, asr #0x1f - bne _020CAA64 - ands r1, r6, #0x40 - addne r11, r11, #0x4 - ldrnesh r4, [r11, #-0x4] - movne r1, r4, asr #0x1f - bne _020CAA64 - ands r1, r6, #0x80 - addne r11, r11, #0x8 - ldrne r4, [r11, #-0x8] - ldrne r1, [r11, #-0x4] - addeq r11, r11, #0x4 - ldreq r4, [r11, #-0x4] - moveq r1, r4, asr #0x1f -_020CAA64: - mov r3, #0x0 - and r8, r3, #0x0 - cmp r8, r3 - and r8, r1, #0x80000000 - cmpeq r8, r3 - beq _020CAAA0 - ldr r7, [sp, #0x30] - mvn r4, r4 - strb r7, [sp, #0x38] - mvn r7, r1 - mov r1, #0x1 - adds r4, r4, r1 - adc r1, r7, r3 - ldr r7, [sp, #0x28] - b _020CAAD8 -_020CAAA0: - cmp r1, r3 - cmpeq r4, r3 - bne _020CAAB4 - cmp r5, #0x0 - beq _020CAAD8 -_020CAAB4: - ands r3, r6, #0x2 - ldrne r3, [sp, #0x34] - ldrne r7, [sp, #0x28] - strneb r3, [sp, #0x38] - bne _020CAAD8 - ands r3, r6, #0x1 - ldrne r3, [sp, #0x1c] - ldrne r7, [sp, #0x28] - strneb r3, [sp, #0x38] -_020CAAD8: - cmp r2, #0x8 - ldr r8, [sp, #0x4] - beq _020CAAF8 - cmp r2, #0xa - beq _020CAB40 - cmp r2, #0x10 - beq _020CABDC - b _020CAC28 -_020CAAF8: - mov r0, #0x0 - cmp r1, r0 - cmpeq r4, r0 - beq _020CAC28 -_020CAB08: - and r0, r4, #0x7 - add r3, r0, #0x30 - add r0, sp, #0x3a - strb r3, [r0, r8] - mov r4, r4, lsr #0x3 - mov r2, #0x0 - mov r0, r1, lsr #0x3 - orr r4, r4, r1, lsl #0x1d - cmp r0, r2 - cmpeq r4, r2 - mov r1, r0 - add r8, r8, #0x1 - bne _020CAB08 - b _020CAC28 -_020CAB40: - mov r0, #0x0 - cmp r0, r0 - cmpeq r1, r0 - bne _020CAB8C - cmp r4, #0x0 - beq _020CAC28 -_020CAB58: - ldr r0, _020CAD60 ; =0xCCCCCCCD - umull r1, r0, r4, r0 - movs r0, r0, lsr #0x3 - mov r1, #0xa - mul r1, r0, r1 - sub r1, r4, r1 - mov r4, r0 - add r1, r1, #0x30 - add r0, sp, #0x3a - strb r1, [r0, r8] - add r8, r8, #0x1 - bne _020CAB58 - b _020CAC28 -_020CAB8C: - cmp r1, r0 - cmpeq r4, r0 - beq _020CAC28 -_020CAB98: - ldr r2, [sp, #0xc] - ldr r3, [sp, #0x4] - mov r0, r4 - bl _ll_udiv - mov r3, #0xa - umull r3, r12, r0, r3 - subs r3, r4, r3 - mov r2, #0x0 - add r4, r3, #0x30 - add r3, sp, #0x3a - strb r4, [r3, r8] - cmp r1, r2 - cmpeq r0, r2 - mov r4, r0 - add r8, r8, #0x1 - bne _020CAB98 - b _020CAC28 -_020CABDC: - mov r2, #0x0 - cmp r1, r2 - cmpeq r4, r2 - beq _020CAC28 -_020CABEC: - and r3, r4, #0xf - cmp r3, #0xa - mov r4, r4, lsr #0x4 - addlt r3, r3, #0x30 - mov r2, r1, lsr #0x4 - orr r4, r4, r1, lsl #0x1c - mov r1, r2 - addge r3, r3, r0 - add r2, sp, #0x3a - strb r3, [r2, r8] - mov r2, #0x0 - cmp r1, r2 - add r8, r8, #0x1 - cmpeq r4, r2 - bne _020CABEC -_020CAC28: - cmp r7, #0x0 - ble _020CAC4C - ldrsb r0, [sp, #0x38] - cmp r0, #0x30 - ldreq r1, [sp, #0x20] - addeq r0, sp, #0x3a - streqb r1, [r0, r8] - ldreq r7, [sp, #0x4] - addeq r8, r8, #0x1 -_020CAC4C: - sub r5, r5, r8 - ands r0, r6, #0x10 - beq _020CAC68 - sub r0, r10, r8 - sub r0, r0, r7 - cmp r5, r0 - movlt r5, r0 -_020CAC68: - cmp r5, #0x0 - subgt r10, r10, r5 - add r0, r7, r8 - ands r6, r6, #0x8 - sub r10, r10, r0 - bne _020CAC90 - ldr r1, [sp, #0x1c] - add r0, sp, #0x54 - mov r2, r10 - bl string_fill_char -_020CAC90: - cmp r7, #0x0 - ble _020CACB8 - add r0, sp, #0x38 - add r4, r0, r7 -_020CACA0: - ldrsb r1, [r4, #-0x1]! - sub r7, r7, #0x1 - add r0, sp, #0x54 - bl string_put_char -_020CACB0: - cmp r7, #0x0 - bgt _020CACA0 -_020CACB8: - ldr r1, [sp, #0x20] - mov r2, r5 - add r0, sp, #0x54 - bl string_fill_char -_020CACC8: - cmp r8, #0x0 - ble _020CACF0 - add r0, sp, #0x3A - add r4, r0, r8 -_020CACD8: - ldrsb r1, [r4, #-0x1]! - sub r8, r8, #0x1 - add r0, sp, #0x54 - bl string_put_char - cmp r8, #0x0 - bgt _020CACD8 -_020CACF0: - cmp r6, #0x0 - beq _020CAD08 - ldr r1, [sp, #0x1C] - mov r2, sl - add r0, sp, #0x54 - bl string_fill_char -_020CAD08: - add r9, r9, #0x1 -_020CAD0C: - ldrsb r0, [r9, #0x0] - cmp r0, #0x0 - bne _020CA530 -_020CAD18: - ldr r0, [sp, #0x54] - cmp r0, #0x0 - ldrne r0, [sp, #0x58] - movne r1, #0x0 - strneb r1, [r0, #0x0] - bne _020CAD48 - ldr r0, [sp, #0x0] - cmp r0, #0x0 - ldrne r1, [sp, #0x5c] - movne r2, #0x0 - addne r0, r1, r0 - strneb r2, [r0, #-0x1] -_020CAD48: - ldr r1, [sp, #0x58] - ldr r0, [sp, #0x5c] - sub r0, r1, r0 - add sp, sp, #0x64 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020CAD60: .word 0xCCCCCCCD - - arm_func_start OS_SNPrintf -OS_SNPrintf: ; 0x020CAD64 - stmdb sp!, {r0-r3} - stmdb sp!, {lr} - sub sp, sp, #0x4 - add r3, sp, #0x10 - bic r3, r3, #0x3 - ldr r2, [sp, #0x10] - add r3, r3, #0x4 - bl OS_VSNPrintf - add sp, sp, #0x4 - ldmia sp!, {lr} - add sp, sp, #0x10 - bx lr - - arm_func_start OS_VSPrintf -OS_VSPrintf: ; 0x020CAD94 - ldr ip, _020CADA8 ; =OS_VSNPrintf - mov r3, r2 - mov r2, r1 - mvn r1, #0x80000000 - bx r12 - .balign 4 -_020CADA8: .word OS_VSNPrintf - - arm_func_start OS_SPrintf -OS_SPrintf: ; 0x020CADAC - stmdb sp!, {r0-r3} - stmdb sp!, {lr} - sub sp, sp, #0x4 - add r2, sp, #0xc - bic r2, r2, #0x3 - ldr r1, [sp, #0xc] - add r2, r2, #0x4 - bl OS_VSPrintf - add sp, sp, #0x4 - ldmia sp!, {lr} - add sp, sp, #0x10 - bx lr - - arm_func_start string_put_string -string_put_string: ; 0x020CADDC - stmdb sp!, {r4,lr} - cmp r2, #0x0 - ldmleia sp!, {r4,lr} - bxle lr - ldr lr, [r0, #0x0] - mov r4, #0x0 - cmp lr, r2 - movhi lr, r2 - cmp lr, #0x0 - bls _020CAE1C -_020CAE04: - ldrsb r12, [r1, r4] - ldr r3, [r0, #0x4] - strb r12, [r3, r4] - add r4, r4, #0x1 - cmp r4, lr - blo _020CAE04 -_020CAE1C: - ldr r1, [r0, #0x0] - sub r1, r1, lr - str r1, [r0, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, r2 - str r1, [r0, #0x4] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start string_fill_char -string_fill_char: - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r2, #0x0 - addle sp, sp, #0x4 - ldmleia sp!, {lr} - bxle lr - ldr r12, [r0, #0x0] - mov lr, #0x0 - cmp r12, r2 - movhi r12, r2 - cmp r12, #0x0 - bls _020CAE80 -_020CAE6C: - ldr r3, [r0, #0x4] - strb r1, [r3, lr] - add lr, lr, #0x1 - cmp lr, r12 - blo _020CAE6C -_020CAE80: - ldr r1, [r0, #0x0] - sub r1, r1, r12 - str r1, [r0, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, r2 - str r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start string_put_char -string_put_char: - ldr r2, [r0, #0x0] - cmp r2, #0x0 - ldrne r2, [r0, #0x4] - strneb r1, [r2, #0x0] - ldrne r1, [r0, #0x0] - subne r1, r1, #0x1 - strne r1, [r0, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x1 - str r1, [r0, #0x4] - bx lr - - arm_func_start FUN_020CAED0 -FUN_020CAED0: ; 0x020CAED0 - ldr r0, _020CAEDC ; =0x021D3494 - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020CAEDC: .word 0x021D3494 - - arm_func_start OS_SetThreadDestructor -OS_SetThreadDestructor: - str r1, [r0, #0xb4] - bx lr - - arm_func_start OS_EnableScheduler -OS_EnableScheduler: ; 0x020CAEE8 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020CAF1C ; =0x021D3484 - mov r4, #0x0 - ldr r3, [r1, #0x0] - cmp r3, #0x0 - subne r2, r3, #0x1 - movne r4, r3 - strne r2, [r1, #0x0] - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CAF1C: .word 0x021D3484 - - arm_func_start OS_DisableScheduler -OS_DisableScheduler: ; 0x020CAF20 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r2, _020CAF54 ; =0x021D3484 - mvn r1, #0x0 - ldr r3, [r2, #0x0] - cmp r3, r1 - addcc r1, r3, #0x1 - movcc r4, r3 - strcc r1, [r2, #0x0] - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CAF54: .word 0x021D3484 - - arm_func_start OSi_IdleThreadProc -OSi_IdleThreadProc: ; 0x020CAF58 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl OS_EnableInterrupts -_020CAF64: - bl OS_Halt - b _020CAF64 - - arm_func_start OS_SetSwitchThreadCallback -OS_SetSwitchThreadCallback: ; 0x020CAF6C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, _020CAF9C ; =0x021D3498 - ldr r4, [r1, #0xc] - str r5, [r1, #0xc] - bl OS_RestoreInterrupts - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020CAF9C: .word 0x021D3498 - - arm_func_start OSi_SleepAlarmCallback -OSi_SleepAlarmCallback: ; 0x020CAFA0 - ldr r2, [r0, #0x0] - mov r1, #0x0 - str r1, [r0, #0x0] - ldr ip, _020CAFBC ; =OS_WakeupThreadDirect - mov r0, r2 - str r1, [r2, #0xb0] - bx r12 - .balign 4 -_020CAFBC: .word OS_WakeupThreadDirect - - arm_func_start OS_Sleep -OS_Sleep: ; 0x020CAFC0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x34 - mov r4, r0 - add r0, sp, #0x8 - bl OS_CreateAlarm - ldr r0, _020CB060 ; =0x021D3490 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x0] - str r0, [sp, #0x4] - bl OS_DisableInterrupts - ldr r1, _020CB064 ; =0x000082EA - mov r2, #0x0 - umull r5, r3, r4, r1 - mla r3, r4, r2, r3 - mla r3, r2, r1, r3 - mov r1, r5, lsr #0x6 - mov r4, r0 - ldr r5, [sp, #0x4] - add r0, sp, #0x8 - add r2, sp, #0x4 - str r0, [r5, #0xb0] - str r2, [sp, #0x0] - mov r2, r3, lsr #0x6 - orr r1, r1, r3, lsl #0x1a - ldr r3, _020CB068 ; =OSi_SleepAlarmCallback - bl OS_SetAlarm - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _020CB04C - mov r5, #0x0 -_020CB038: - mov r0, r5 - bl OS_SleepThread - ldr r0, [sp, #0x4] - cmp r0, #0x0 - bne _020CB038 -_020CB04C: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x34 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020CB060: .word 0x021D3490 -_020CB064: .word 0x000082EA -_020CB068: .word OSi_SleepAlarmCallback - - arm_func_start OS_GetThreadPriority -OS_GetThreadPriority: ; 0x020CB06C - ldr r0, [r0, #0x70] - bx lr - - arm_func_start OS_SetThreadPriority -OS_SetThreadPriority: ; 0x020CB074 - stmdb sp!, {r4-r8,lr} - ldr r2, _020CB120 ; =0x021D3498 - mov r6, r0 - mov r5, r1 - ldr r8, [r2, #0x8] - mov r7, #0x0 - bl OS_DisableInterrupts - mov r4, r0 - b _020CB0A0 -_020CB098: - mov r7, r8 - ldr r8, [r8, #0x68] -_020CB0A0: - cmp r8, #0x0 - beq _020CB0B0 - cmp r8, r6 - bne _020CB098 -_020CB0B0: - cmp r8, #0x0 - beq _020CB0C4 - ldr r0, _020CB124 ; =0x021D34A8 - cmp r8, r0 - bne _020CB0D8 -_020CB0C4: - mov r0, r4 - bl OS_RestoreInterrupts -_020CB0CC: - mov r0, #0x0 - ldmia sp!, {r4-r8,lr} - bx lr -_020CB0D8: - ldr r0, [r8, #0x70] - cmp r0, r5 - beq _020CB10C - cmp r7, #0x0 - ldreq r1, [r6, #0x68] - ldreq r0, _020CB120 ; =0x021D3498 - streq r1, [r0, #0x8] - ldrne r0, [r6, #0x68] - strne r0, [r7, #0x68] - mov r0, r6 - str r5, [r6, #0x70] - bl OSi_InsertThreadToList - bl OSi_RescheduleThread -_020CB10C: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020CB120: .word 0x021D3498 -_020CB124: .word 0x021D34A8 - - arm_func_start OS_YieldThread -OS_YieldThread: ; 0x020CB128 - stmdb sp!, {r4-r8,lr} - ldr r0, _020CB1E0 ; =0x021D3498 - mov r7, #0x0 - mov r6, r7 - mov r5, r7 - ldr r8, [r0, #0x4] - bl OS_DisableInterrupts - ldr r1, _020CB1E0 ; =0x021D3498 - mov r4, r0 - ldr r2, [r1, #0x8] - mov r0, r7 - cmp r2, #0x0 - beq _020CB188 - ldr r1, [r8, #0x70] -_020CB160: - cmp r2, r8 - moveq r7, r0 - ldr r0, [r2, #0x70] - cmp r1, r0 - moveq r6, r2 - mov r0, r2 - ldr r2, [r2, #0x68] - addeq r5, r5, #0x1 - cmp r2, #0x0 - bne _020CB160 -_020CB188: - cmp r5, #0x1 - ble _020CB198 - cmp r6, r8 - bne _020CB1A8 -_020CB198: - mov r0, r4 - bl OS_RestoreInterrupts - ldmia sp!, {r4-r8,lr} - bx lr -_020CB1A8: - cmp r7, #0x0 - ldreq r1, [r8, #0x68] - ldreq r0, _020CB1E0 ; =0x021D3498 - streq r1, [r0, #0x8] - ldrne r0, [r8, #0x68] - strne r0, [r7, #0x68] - ldr r0, [r6, #0x68] - str r0, [r8, #0x68] - str r8, [r6, #0x68] - bl OSi_RescheduleThread - mov r0, r4 - bl OS_RestoreInterrupts - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020CB1E0: .word 0x021D3498 - - arm_func_start OS_RescheduleThread -OS_RescheduleThread: ; 0x020CB1E4 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - mov r4, r0 - bl OSi_RescheduleThread - mov r0, r4 - bl OS_RestoreInterrupts - ldmia sp!, {r4,lr} - bx lr - - arm_func_start OS_SelectThread -OS_SelectThread: ; 0x020CB204 - ldr r0, _020CB22C ; =0x021D3498 - ldr r0, [r0, #0x8] - b _020CB214 -_020CB210: - ldr r0, [r0, #0x68] -_020CB214: - cmp r0, #0x0 - bxeq lr - ldr r1, [r0, #0x64] - cmp r1, #0x1 - bne _020CB210 - bx lr - .balign 4 -_020CB22C: .word 0x021D3498 - - arm_func_start OS_WakeupThreadDirect -OS_WakeupThreadDirect: ; 0x020CB230 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - mov r1, #0x1 - mov r4, r0 - str r1, [r5, #0x64] - bl OSi_RescheduleThread - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start OS_WakeupThread -OS_WakeupThread: ; 0x020CB264 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, [r5, #0x0] - mov r4, r0 - cmp r1, #0x0 - beq _020CB2D0 - cmp r1, #0x0 - beq _020CB2BC - mov r7, #0x1 - mov r6, #0x0 -_020CB294: - mov r0, r5 - bl OSi_RemoveLinkFromQueue - str r7, [r0, #0x64] - str r6, [r0, #0x78] - str r6, [r0, #0x80] - ldr r1, [r0, #0x80] - str r1, [r0, #0x7c] - ldr r0, [r5, #0x0] - cmp r0, #0x0 - bne _020CB294 -_020CB2BC: - mov r0, #0x0 - str r0, [r5, #0x4] - ldr r0, [r5, #0x4] - str r0, [r5, #0x0] - bl OSi_RescheduleThread -_020CB2D0: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start OS_SleepThread -OS_SleepThread: - stmdb sp!, {r4-r6,lr} - mov r6, r0 - bl OS_DisableInterrupts - ldr r1, _020CB334 ; =0x021D3490 - mov r5, r0 - ldr r0, [r1, #0x0] - cmp r6, #0x0 - ldr r4, [r0, #0x0] - beq _020CB318 - mov r0, r6 - mov r1, r4 - str r6, [r4, #0x78] - bl OSi_InsertLinkToQueue -_020CB318: - mov r0, #0x0 - str r0, [r4, #0x64] - bl OSi_RescheduleThread - mov r0, r5 - bl OS_RestoreInterrupts - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020CB334: .word 0x021D3490 - - arm_func_start OS_IsThreadTerminated -OS_IsThreadTerminated: ; 0x020CB338 - ldr r0, [r0, #0x64] - cmp r0, #0x2 - moveq r0, #0x1 - movne r0, #0x0 - bx lr - - arm_func_start OS_JoinThread -OS_JoinThread: ; 0x020CB34C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, [r5, #0x64] - mov r4, r0 - cmp r1, #0x2 - beq _020CB374 - add r0, r5, #0x9c - bl OS_SleepThread -_020CB374: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start OSi_CancelThreadAlarmForSleep -OSi_CancelThreadAlarmForSleep: ; 0x020CB388 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, [r0, #0xb0] - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - bl OS_CancelAlarm - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start OS_DestroyThread -OS_DestroyThread: ; 0x020CB3B4 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, _020CB438 ; =0x021D3498 - mov r4, r0 - ldr r0, [r1, #0x4] - cmp r0, r5 - bne _020CB3DC - bl OSi_ExitThread_Destroy -_020CB3DC: - bl OS_DisableScheduler - mov r0, r5 - bl OSi_UnlockAllMutex - mov r0, r5 - bl OSi_CancelThreadAlarmForSleep - ldr r0, [r5, #0x78] - cmp r0, #0x0 - beq _020CB404 - mov r1, r5 - bl OSi_RemoveSpecifiedLinkFromQueue -_020CB404: - mov r0, r5 - bl OSi_RemoveThreadFromList - mov r1, #0x2 - add r0, r5, #0x9c - str r1, [r5, #0x64] - bl OS_WakeupThread - bl OS_EnableScheduler - mov r0, r4 - bl OS_RestoreInterrupts - bl OS_RescheduleThread - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020CB438: .word 0x021D3498 - - arm_func_start OSi_ExitThread_Destroy -OSi_ExitThread_Destroy: ; 0x020CB43C - stmdb sp!, {r4,lr} - ldr r0, _020CB498 ; =0x021D3490 - ldr r0, [r0, #0x0] - ldr r4, [r0, #0x0] - bl OS_DisableScheduler - mov r0, r4 - bl OSi_UnlockAllMutex - ldr r0, [r4, #0x78] - cmp r0, #0x0 - beq _020CB46C - mov r1, r4 - bl OSi_RemoveSpecifiedLinkFromQueue -_020CB46C: - mov r0, r4 - bl OSi_RemoveThreadFromList - mov r1, #0x2 - add r0, r4, #0x9c - str r1, [r4, #0x64] - bl OS_WakeupThread - bl OS_EnableScheduler - bl OS_RescheduleThread - bl OS_Terminate - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CB498: .word 0x021D3490 - - arm_func_start OSi_ExitThread_Destroy2 -OSi_ExitThread_Destroy2: ; 0x020CB49C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020CB4DC ; =0x021D3490 - ldr r1, [r1, #0x0] - ldr r3, [r1, #0x0] - ldr r2, [r3, #0xb4] - cmp r2, #0x0 - beq _020CB4CC - mov r1, #0x0 - str r1, [r3, #0xb4] - blx r2 - bl OS_DisableInterrupts -_020CB4CC: - bl OSi_ExitThread_Destroy - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CB4DC: .word 0x021D3490 - - arm_func_start OSi_ExitThread_ArgSpecified -OSi_ExitThread_ArgSpecified: ; 0x020CB4E0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r2, _020CB548 ; =0x021D3480 - mov r5, r0 - ldr r2, [r2, #0x0] - mov r4, r1 - cmp r2, #0x0 - beq _020CB534 - ldr r1, _020CB54C ; =OSi_ExitThread_Destroy2 - bl OS_InitContext - str r4, [r5, #0x4] - ldr r1, [r5, #0x0] - mov r0, r5 - orr r1, r1, #0x80 - str r1, [r5, #0x0] - mov r1, #0x1 - str r1, [r5, #0x64] - bl OS_LoadContext - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr -_020CB534: - mov r0, r4 - bl OSi_ExitThread_Destroy2 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020CB548: .word 0x021D3480 -_020CB54C: .word OSi_ExitThread_Destroy2 - - arm_func_start OS_ExitThread -OS_ExitThread: ; 0x020CB550 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - ldr r0, _020CB578 ; =0x021D3498 - mov r1, #0x0 - ldr r0, [r0, #0x4] - bl OSi_ExitThread_ArgSpecified - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CB578: .word 0x021D3498 - - arm_func_start OS_CreateThread -OS_CreateThread: ; 0x020CB57C - stmdb sp!, {r4-r8,lr} - mov r8, r0 - mov r5, r1 - mov r7, r2 - mov r6, r3 - bl OS_DisableInterrupts - mov r4, r0 - bl OSi_GetUnusedThreadId - ldr r2, [sp, #0x1c] - mov r1, #0x0 - str r2, [r8, #0x70] - str r0, [r8, #0x6c] - str r1, [r8, #0x64] - str r1, [r8, #0x74] - mov r0, r8 - bl OSi_InsertThreadToList - mov r1, r5 - str r6, [r8, #0x94] - ldr r0, [sp, #0x18] - mov r12, #0x0 - sub r5, r6, r0 - sub r2, r6, #0x4 - str r5, [r8, #0x90] - str r12, [r8, #0x98] - ldr r3, _020CB678 ; =0xFDDB597D - ldr r0, [r8, #0x94] - ldr r6, _020CB67C ; =0x7BF9DD5B - str r3, [r0, #-0x4] - ldr r3, [r8, #0x90] - mov r0, r8 - str r6, [r3, #0x0] - str r12, [r8, #0xa0] - ldr r3, [r8, #0xa0] - str r3, [r8, #0x9c] - bl OS_InitContext - str r7, [r8, #0x4] - add r1, r5, #0x4 - ldr r2, _020CB680 ; =OS_ExitThread - mov r0, #0x0 - str r2, [r8, #0x3c] - ldr r2, [sp, #0x18] - sub r2, r2, #0x8 - bl MIi_CpuClear32 - mov r1, #0x0 - str r1, [r8, #0x84] - str r1, [r8, #0x88] - str r1, [r8, #0x8c] - mov r0, r8 - bl OS_SetThreadDestructor -_020CB640: - mov r0, #0x0 - str r0, [r8, #0x78] - str r0, [r8, #0x80] - ldr r2, [r8, #0x80] - add r1, r8, #0xA4 - str r2, [r8, #0x7C] - mov r2, #0xC - bl MIi_CpuClear32 - mov r0, r4 - mov r1, #0x0 - str r1, [r8, #0xB0] - bl OS_RestoreInterrupts - ldmia sp!, {r4-r8, lr} - bx lr -_020CB678: .word 0xFDDB597D -_020CB67C: .word 0x7BF9DD5B -_020CB680: .word OS_ExitThread - - arm_func_start OS_InitThread -OS_InitThread: ; 0x020CB684 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x8 - ldr r3, _020CB7A4 ; =0x021D3494 - ldr r0, [r3, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x8 - ldmneia sp!, {r4-r6,lr} - bxne lr - ldr ip, _020CB7A8 ; =0x00000000 - ldr r1, _020CB7AC ; =0x021D3568 - mov lr, #0x0 - ldr r0, _020CB7B0 ; =0x021D3498 - mov r6, #0x1 - mov r4, #0x10 - str r1, [r0, #0x8] - str r1, [r0, #0x4] - cmp r12, #0x0 - ldrle r0, _020CB7B4 ; =0x027E0080 - str r4, [r1, #0x70] - suble r4, r0, r12 - str lr, [r1, #0x6c] - str r6, [r1, #0x64] - str lr, [r1, #0x68] - str lr, [r1, #0x74] - ldrgt r1, _020CB7B8 ; =0x027E0000 - ldrgt r0, _020CB7BC ; =0x00000400 - addgt r1, r1, #0x3f80 - subgt r0, r1, r0 - subgt r4, r0, r12 - ldr r1, _020CB7B8 ; =0x027E0000 - ldr r5, _020CB7C0 ; =0x021D349C - ldr r2, _020CB7C4 ; =0x021D3490 - ldr r0, _020CB7BC ; =0x00000400 - str r5, [r2, #0x0] - ldr r2, _020CB7AC ; =0x021D3568 - add r1, r1, #0x3f80 - str r6, [r3, #0x0] - sub r3, r1, r0 - mov r0, #0x0 - ldr r1, _020CB7C8 ; =0xFDDB597D - str r3, [r2, #0x94] - str r4, [r2, #0x90] - str r0, [r2, #0x98] - str r1, [r3, #-0x4] - ldr r3, [r2, #0x90] - ldr ip, _020CB7CC ; =0x7BF9DD5B - ldr r1, _020CB7B0 ; =0x021D3498 - str r12, [r3, #0x0] - ldr r3, _020CB7D0 ; =0x027FFFA0 - str r0, [r2, #0xa0] - str r0, [r2, #0x9c] - strh r0, [r1, #0x0] - strh r0, [r1, #0x2] - str r1, [r3, #0x0] - bl OS_SetSwitchThreadCallback - mov r2, #0xc8 - str r2, [sp, #0x0] - mov r12, #0x1f - ldr r0, _020CB7D4 ; =0x021D34A8 - ldr r1, _020CB7D8 ; =OSi_IdleThreadProc - ldr r3, _020CB7DC ; =0x021D36F0 - mov r2, #0x0 - str r12, [sp, #0x4] - bl OS_CreateThread - ldr r0, _020CB7D4 ; =0x021D34A8 - mov r2, #0x20 - mov r1, #0x1 - str r2, [r0, #0x70] - str r1, [r0, #0x64] - add sp, sp, #0x8 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020CB7A4: .word 0x021D3494 -_020CB7A8: .word 0x00000000 -_020CB7AC: .word 0x021D3568 -_020CB7B0: .word 0x021D3498 -_020CB7B4: .word 0x027E0080 -_020CB7B8: .word 0x027E0000 -_020CB7BC: .word 0x00000400 -_020CB7C0: .word 0x021D349C -_020CB7C4: .word 0x021D3490 -_020CB7C8: .word 0xFDDB597D -_020CB7CC: .word 0x7BF9DD5B -_020CB7D0: .word 0x027FFFA0 -_020CB7D4: .word 0x021D34A8 -_020CB7D8: .word OSi_IdleThreadProc -_020CB7DC: .word 0x021D36F0 - - arm_func_start OSi_RescheduleThread -OSi_RescheduleThread: ; 0x020CB7E0 - stmdb sp!, {r4-r6,lr} - ldr r0, _020CB8BC ; =0x021D3484 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - ldmneia sp!, {r4-r6,lr} - bxne lr - ldr r4, _020CB8C0 ; =0x021D3498 - ldrh r0, [r4, #0x2] - cmp r0, #0x0 - bne _020CB814 - bl OS_GetProcMode - cmp r0, #0x12 - bne _020CB824 -_020CB814: - mov r0, #0x1 - strh r0, [r4, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr -_020CB824: - ldr r0, _020CB8C4 ; =0x021D3490 - ldr r0, [r0, #0x0] - ldr r6, [r0, #0x0] - bl OS_SelectThread - mov r5, r0 - cmp r6, r5 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - cmp r5, #0x0 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - ldr r0, [r6, #0x64] - cmp r0, #0x2 - beq _020CB870 - mov r0, r6 - bl OS_SaveContext -_020CB864: - cmp r0, #0x0 - ldmneia sp!, {r4-r6,lr} - bxne lr -_020CB870: - ldr r0, _020CB8C8 ; =0x021D348C - ldr r2, [r0, #0x0] - cmp r2, #0x0 - beq _020CB88C - mov r0, r6 - mov r1, r5 - blx r2 -_020CB88C: - ldr r2, [r4, #0xc] - cmp r2, #0x0 - beq _020CB8A4 - mov r0, r6 - mov r1, r5 - blx r2 -_020CB8A4: - ldr r1, _020CB8C0 ; =0x021D3498 - mov r0, r5 - str r5, [r1, #0x4] - bl OS_LoadContext - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020CB8BC: .word 0x021D3484 -_020CB8C0: .word 0x021D3498 -_020CB8C4: .word 0x021D3490 -_020CB8C8: .word 0x021D348C - - arm_func_start OSi_RemoveThreadFromList -OSi_RemoveThreadFromList: ; 0x020CB8CC - ldr r1, _020CB910 ; =0x021D3498 - mov r2, #0x0 - ldr r1, [r1, #0x8] - b _020CB8E4 -_020CB8DC: - mov r2, r1 - ldr r1, [r1, #0x68] -_020CB8E4: - cmp r1, #0x0 - beq _020CB8F4 - cmp r1, r0 - bne _020CB8DC -_020CB8F4: - cmp r2, #0x0 - ldreq r1, [r0, #0x68] - ldreq r0, _020CB910 ; =0x021D3498 - streq r1, [r0, #0x8] - ldrne r0, [r0, #0x68] - strne r0, [r2, #0x68] - bx lr - .balign 4 -_020CB910: .word 0x021D3498 - - arm_func_start OSi_InsertThreadToList -OSi_InsertThreadToList: ; 0x020CB914 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020CB978 ; =0x021D3498 - mov r12, #0x0 - ldr r3, [r1, #0x8] - mov lr, r3 - b _020CB938 -_020CB930: - mov r12, lr - ldr lr, [lr, #0x68] -_020CB938: - cmp lr, #0x0 - beq _020CB950 - ldr r2, [lr, #0x70] - ldr r1, [r0, #0x70] - cmp r2, r1 - blo _020CB930 -_020CB950: - cmp r12, #0x0 - ldreq r1, _020CB978 ; =0x021D3498 - streq r3, [r0, #0x68] - streq r0, [r1, #0x8] - ldrne r1, [r12, #0x68] - strne r1, [r0, #0x68] - strne r0, [r12, #0x68] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CB978: .word 0x021D3498 - - arm_func_start OSi_RemoveMutexLinkFromQueue -OSi_RemoveMutexLinkFromQueue: ; 0x020CB97C - ldr r2, [r0, #0x0] - cmp r2, #0x0 - beq _020CB9A4 - ldr r1, [r2, #0x10] - str r1, [r0, #0x0] - cmp r1, #0x0 - movne r0, #0x0 - strne r0, [r1, #0x14] - moveq r1, #0x0 - streq r1, [r0, #0x4] -_020CB9A4: - mov r0, r2 - bx lr - - arm_func_start OSi_RemoveSpecifiedLinkFromQueue -OSi_RemoveSpecifiedLinkFromQueue: ; 0x020CB9AC - ldr r2, [r0, #0x0] - mov r12, r2 - cmp r2, #0x0 - beq _020CB9F8 -_020CB9BC: - cmp r12, r1 - ldr r3, [r12, #0x80] - bne _020CB9EC - cmp r2, r12 - ldr r2, [r12, #0x7c] - streq r3, [r0, #0x0] - strne r3, [r2, #0x80] - ldr r1, [r0, #0x4] - cmp r1, r12 - streq r2, [r0, #0x4] - strne r2, [r3, #0x7c] - b _020CB9F8 -_020CB9EC: - mov r12, r3 - cmp r3, #0x0 - bne _020CB9BC -_020CB9F8: - mov r0, r12 - bx lr - - arm_func_start OSi_RemoveLinkFromQueue -OSi_RemoveLinkFromQueue: ; 0x020CBA00 - ldr r2, [r0, #0x0] - cmp r2, #0x0 - beq _020CBA2C - ldr r1, [r2, #0x80] - str r1, [r0, #0x0] - cmp r1, #0x0 - movne r0, #0x0 - strne r0, [r1, #0x7c] - moveq r1, #0x0 - streq r1, [r0, #0x4] - streq r1, [r2, #0x78] -_020CBA2C: - mov r0, r2 - bx lr - - arm_func_start OSi_InsertLinkToQueue -OSi_InsertLinkToQueue: - ldr r12, [r0, #0x0] - b _020CBA48 -_020CBA3C: - cmp r12, r1 - bxeq lr - ldr r12, [r12, #0x80] -_020CBA48: - cmp r12, #0x0 - beq _020CBA60 - ldr r3, [r12, #0x70] - ldr r2, [r1, #0x70] - cmp r3, r2 - bls _020CBA3C -_020CBA60: - cmp r12, #0x0 - bne _020CBA8C - ldr r2, [r0, #0x4] - cmp r2, #0x0 - streq r1, [r0, #0x0] - strne r1, [r2, #0x80] - str r2, [r1, #0x7c] - mov r2, #0x0 - str r2, [r1, #0x80] - str r1, [r0, #0x4] - bx lr -_020CBA8C: - ldr r2, [r12, #0x7c] - cmp r2, #0x0 - streq r1, [r0, #0x0] - strne r1, [r2, #0x80] - str r2, [r1, #0x7c] - str r12, [r1, #0x80] - str r1, [r12, #0x7c] - bx lr - - arm_func_start OSi_GetUnusedThreadId -OSi_GetUnusedThreadId: ; 0x020CBAAC - ldr r1, _020CBAC0 ; =0x021D3488 - ldr r0, [r1, #0x0] - add r0, r0, #0x1 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020CBAC0: .word 0x021D3488 - - arm_func_start OS_InitContext -OS_InitContext: ; 0x020CBAC4 - add r1, r1, #0x4 - str r1, [r0, #0x40] - str r2, [r0, #0x44] - sub r2, r2, #0x40 - tst r2, #0x4 - subne r2, r2, #0x4 - str r2, [r0, #0x38] - ands r1, r1, #0x1 - movne r1, #0x3f - moveq r1, #0x1f - str r1, [r0, #0x0] - mov r1, #0x0 - str r1, [r0, #0x4] - str r1, [r0, #0x8] - str r1, [r0, #0xc] - str r1, [r0, #0x10] - str r1, [r0, #0x14] - str r1, [r0, #0x18] - str r1, [r0, #0x1c] - str r1, [r0, #0x20] - str r1, [r0, #0x24] - str r1, [r0, #0x28] - str r1, [r0, #0x2c] - str r1, [r0, #0x30] - str r1, [r0, #0x34] - str r1, [r0, #0x3c] - bx lr - - arm_func_start OS_SaveContext -OS_SaveContext: - stmdb sp!, {r0,lr} - add r0, r0, #0x48 - ldr r1, _020CBB78 ; =CP_SaveContext - blx r1 - ldmia sp!, {r0,lr} - add r1, r0, #0x0 - mrs r2, cpsr - str r2, [r1], #0x4 - mov r0, #0xd3 - msr cpsr_c, r0 - str sp, [r1, #0x40] - msr cpsr_c, r2 - mov r0, #0x1 - stmia r1, {r0-lr} - add r0, pc, #0x8 ; =_020CBB78 - str r0, [r1, #0x3c] - mov r0, #0x0 - bx lr - .balign 4 -_020CBB78: .word CP_SaveContext - - arm_func_start OS_LoadContext -OS_LoadContext: ; 0x020CBB7C - stmdb sp!, {r0,lr} - add r0, r0, #0x48 - ldr r1, _020CBBBC ; =CP_RestoreContext - blx r1 - ldmia sp!, {r0,lr} - mrs r1, cpsr - bic r1, r1, #0x1f - orr r1, r1, #0xd3 - msr cpsr_c, r1 - ldr r1, [r0], #0x4 - msr spsr_fsxc, r1 - ldr sp, [r0, #0x40] - ldr lr, [r0, #0x3c] - ldmia r0, {r0-lr}^ - mov r0, r0 - subs pc, lr, #0x4 - .balign 4 -_020CBBBC: .word CP_RestoreContext - - arm_func_start OS_GetConsoleType -OS_GetConsoleType: ; 0x020CBBC0 - ldr r0, _020CBBD0 ; =0x82000001 - ldr r1, _020CBBD4 ; =0x02106828 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020CBBD0: .word 0x82000001 -_020CBBD4: .word 0x02106828 - - arm_func_start OS_IsRunOnEmulator -OS_IsRunOnEmulator: - mov r0, #0x0 - bx lr - - arm_func_start OS_ReadMessage -OS_ReadMessage: ; 0x020CBBE0 - stmdb sp!, {r4-r8,lr} - mov r6, r0 - mov r5, r1 - mov r7, r2 - bl OS_DisableInterrupts - ldr r1, [r6, #0x1c] - mov r4, r0 - cmp r1, #0x0 - bne _020CBC3C - and r8, r7, #0x1 - add r7, r6, #0x8 -_020CBC0C: - cmp r8, #0x0 - bne _020CBC28 - mov r0, r4 - bl OS_RestoreInterrupts -_020CBC1C: - mov r0, #0x0 - ldmia sp!, {r4-r8,lr} - bx lr -_020CBC28: - mov r0, r7 - bl OS_SleepThread - ldr r0, [r6, #0x1c] - cmp r0, #0x0 - beq _020CBC0C -_020CBC3C: - cmp r5, #0x0 - ldrne r1, [r6, #0x10] - ldrne r0, [r6, #0x18] - ldrne r0, [r1, r0, lsl #0x2] - strne r0, [r5, #0x0] - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4-r8,lr} - bx lr - - arm_func_start OS_JamMessage -OS_JamMessage: ; 0x020CBC64 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r6, r0 - mov r5, r1 - mov r7, r2 - bl OS_DisableInterrupts - ldr r1, [r6, #0x14] - ldr r2, [r6, #0x1c] - mov r4, r0 - cmp r1, r2 - bgt _020CBCCC - and r7, r7, #0x1 -_020CBC94: - cmp r7, #0x0 - bne _020CBCB4 - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020CBCB4: - mov r0, r6 - bl OS_SleepThread - ldr r1, [r6, #0x14] - ldr r0, [r6, #0x1c] - cmp r1, r0 - ble _020CBC94 -_020CBCCC: - ldr r0, [r6, #0x18] - add r0, r0, r1 - sub r0, r0, #0x1 - bl _s32_div_f - str r1, [r6, #0x18] - ldr r2, [r6, #0x10] - ldr r1, [r6, #0x18] - add r0, r6, #0x8 - str r5, [r2, r1, lsl #0x2] - ldr r1, [r6, #0x1c] - add r1, r1, #0x1 - str r1, [r6, #0x1c] - bl OS_WakeupThread - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start OS_ReceiveMessage -OS_ReceiveMessage: ; 0x020CBD18 - stmdb sp!, {r4-r8,lr} - mov r6, r0 - mov r5, r1 - mov r7, r2 - bl OS_DisableInterrupts - ldr r1, [r6, #0x1c] - mov r4, r0 - cmp r1, #0x0 - bne _020CBD74 - and r8, r7, #0x1 - add r7, r6, #0x8 -_020CBD44: - cmp r8, #0x0 - bne _020CBD60 - mov r0, r4 - bl OS_RestoreInterrupts -_020CBD54: - mov r0, #0x0 - ldmia sp!, {r4-r8,lr} - bx lr -_020CBD60: - mov r0, r7 - bl OS_SleepThread - ldr r0, [r6, #0x1c] - cmp r0, #0x0 - beq _020CBD44 -_020CBD74: - cmp r5, #0x0 - ldrne r1, [r6, #0x10] - ldrne r0, [r6, #0x18] - ldrne r0, [r1, r0, lsl #0x2] - strne r0, [r5, #0x0] - ldr r0, [r6, #0x18] - ldr r1, [r6, #0x14] - add r0, r0, #0x1 - bl _s32_div_f - str r1, [r6, #0x18] - ldr r1, [r6, #0x1c] - mov r0, r6 - sub r1, r1, #0x1 - str r1, [r6, #0x1c] - bl OS_WakeupThread - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4-r8,lr} - bx lr - - arm_func_start OS_SendMessage -OS_SendMessage: ; 0x020CBDC4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r6, r0 - mov r5, r1 - mov r7, r2 - bl OS_DisableInterrupts - ldr r2, [r6, #0x1c] - ldr r1, [r6, #0x14] - mov r4, r0 - cmp r1, r2 - bgt _020CBE2C - and r7, r7, #0x1 -_020CBDF4: - cmp r7, #0x0 - bne _020CBE14 - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020CBE14: - mov r0, r6 - bl OS_SleepThread - ldr r2, [r6, #0x1c] - ldr r1, [r6, #0x14] - cmp r1, r2 - ble _020CBDF4 -_020CBE2C: - ldr r0, [r6, #0x18] - add r0, r0, r2 - bl _s32_div_f - ldr r2, [r6, #0x10] - add r0, r6, #0x8 - str r5, [r2, r1, lsl #0x2] - ldr r1, [r6, #0x1c] - add r1, r1, #0x1 - str r1, [r6, #0x1c] - bl OS_WakeupThread - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start OS_InitMessageQueue -OS_InitMessageQueue: ; 0x020CBE6C - mov r12, #0x0 - str r12, [r0, #0x4] - ldr r3, [r0, #0x4] - str r3, [r0, #0x0] - str r12, [r0, #0xc] - ldr r3, [r0, #0xc] - str r3, [r0, #0x8] - str r1, [r0, #0x10] - str r2, [r0, #0x14] - str r12, [r0, #0x18] - str r12, [r0, #0x1c] - bx lr - - arm_func_start OSi_DequeueItem -OSi_DequeueItem: ; 0x020CBE9C - ldr r2, [r1, #0x10] - ldr r1, [r1, #0x14] - cmp r2, #0x0 - streq r1, [r0, #0x8c] - strne r1, [r2, #0x14] - cmp r1, #0x0 - streq r2, [r0, #0x88] - strne r2, [r1, #0x10] - bx lr - - arm_func_start OSi_EnqueueTail -OSi_EnqueueTail: ; 0x020CBEC0 - ldr r2, [r0, #0x8c] - cmp r2, #0x0 - streq r1, [r0, #0x88] - strne r1, [r2, #0x10] - str r2, [r1, #0x14] - mov r2, #0x0 - str r2, [r1, #0x10] - str r1, [r0, #0x8c] - bx lr - - arm_func_start OS_TryLockMutex -OS_TryLockMutex: ; 0x020CBEE4 - stmdb sp!, {r4-r6,lr} - mov r5, r0 - bl OS_DisableInterrupts - ldr r2, [r5, #0x8] - ldr r1, _020CBF54 ; =0x021D3498 - mov r4, r0 - cmp r2, #0x0 - ldr r0, [r1, #0x4] - bne _020CBF28 - str r0, [r5, #0x8] - ldr r2, [r5, #0xc] - mov r1, r5 - add r2, r2, #0x1 - str r2, [r5, #0xc] - bl OSi_EnqueueTail - mov r6, #0x1 - b _020CBF40 -_020CBF28: - cmp r2, r0 - ldreq r0, [r5, #0xc] - moveq r6, #0x1 - addeq r0, r0, #0x1 - streq r0, [r5, #0xc] - movne r6, #0x0 -_020CBF40: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, r6 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020CBF54: .word 0x021D3498 - - arm_func_start OSi_UnlockAllMutex -OSi_UnlockAllMutex: ; 0x020CBF58 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldr r0, [r6, #0x88] - cmp r0, #0x0 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - add r5, r6, #0x88 - mov r4, #0x0 -_020CBF78: - mov r0, r5 - bl OSi_RemoveMutexLinkFromQueue - str r4, [r0, #0xc] - str r4, [r0, #0x8] - bl OS_WakeupThread - ldr r0, [r6, #0x88] - cmp r0, #0x0 - bne _020CBF78 - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start OS_UnlockMutex -OS_UnlockMutex: ; 0x020CBFA0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, _020CC00C ; =0x021D3498 - mov r4, r0 - ldr r0, [r1, #0x4] - ldr r1, [r5, #0x8] - cmp r1, r0 - bne _020CBFF8 - ldr r1, [r5, #0xc] - sub r1, r1, #0x1 - str r1, [r5, #0xc] - ldr r1, [r5, #0xc] - cmp r1, #0x0 - bne _020CBFF8 - mov r1, r5 - bl OSi_DequeueItem - mov r1, #0x0 - mov r0, r5 - str r1, [r5, #0x8] - bl OS_WakeupThread -_020CBFF8: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020CC00C: .word 0x021D3498 - - arm_func_start OS_LockMutex -OS_LockMutex: ; 0x020CC010 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, _020CC098 ; =0x021D3498 - mov r4, r0 - ldr r7, [r1, #0x4] - mov r6, #0x0 -_020CC030: - ldr r0, [r5, #0x8] - cmp r0, #0x0 - bne _020CC05C - str r7, [r5, #0x8] - ldr r1, [r5, #0xc] - mov r0, r7 - add r2, r1, #0x1 - mov r1, r5 - str r2, [r5, #0xc] - bl OSi_EnqueueTail - b _020CC084 -_020CC05C: - cmp r0, r7 - ldreq r0, [r5, #0xc] - addeq r0, r0, #0x1 - streq r0, [r5, #0xc] - beq _020CC084 - mov r0, r5 - str r5, [r7, #0x84] - bl OS_SleepThread - str r6, [r7, #0x84] - b _020CC030 -_020CC084: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020CC098: .word 0x021D3498 - - arm_func_start OS_InitMutex -OS_InitMutex: ; 0x020CC09C - mov r2, #0x0 - str r2, [r0, #0x4] - ldr r1, [r0, #0x4] - str r1, [r0, #0x0] - str r2, [r0, #0x8] - str r2, [r0, #0xc] - bx lr - - arm_func_start DC_InvalidateAll -DC_InvalidateAll: ; 0x020CC0B8 - mov r0, #0x0 - mcr p15, 0x0, r0, c7, c6, 0x0 - bx lr - - arm_func_start DC_StoreAll -DC_StoreAll: ; 0x020CC0C4 - mov r1, #0x0 -_020CC0C8: - mov r0, #0x0 -_020CC0CC: - orr r2, r1, r0 - mcr p15, 0x0, r2, c7, c10, 0x2 - add r0, r0, #0x20 - cmp r0, #0x400 - blt _020CC0CC - add r1, r1, #0x40000000 - cmp r1, #0x0 - bne _020CC0C8 - bx lr - - arm_func_start DC_FlushAll -DC_FlushAll: ; 0x020CC0F0 - mov r12, #0x0 - mov r1, #0x0 -_020CC0F8: - mov r0, #0x0 -_020CC0FC: - orr r2, r1, r0 - mcr p15, 0x0, r12, c7, c10, 0x4 - mcr p15, 0x0, r2, c7, c14, 0x2 - add r0, r0, #0x20 - cmp r0, #0x400 - blt _020CC0FC - add r1, r1, #0x40000000 - cmp r1, #0x0 - bne _020CC0F8 - bx lr - - arm_func_start DC_InvalidateRange -DC_InvalidateRange: ; 0x020CC124 - add r1, r1, r0 - bic r0, r0, #0x1f -_020CC12C: - mcr p15, 0x0, r0, c7, c6, 0x1 - add r0, r0, #0x20 - cmp r0, r1 - blt _020CC12C - bx lr - - arm_func_start DC_StoreRange -DC_StoreRange: ; 0x020CC140 - add r1, r1, r0 - bic r0, r0, #0x1f -_020CC148: - mcr p15, 0x0, r0, c7, c10, 0x1 - add r0, r0, #0x20 - cmp r0, r1 - blt _020CC148 - bx lr - - arm_func_start DC_FlushRange -DC_FlushRange: ; 0x020CC15C - mov r12, #0x0 - add r1, r1, r0 - bic r0, r0, #0x1f -_020CC168: - mcr p15, 0x0, r12, c7, c10, 0x4 - mcr p15, 0x0, r0, c7, c14, 0x1 - add r0, r0, #0x20 - cmp r0, r1 - blt _020CC168 - bx lr - - arm_func_start DC_WaitWriteBufferEmpty -DC_WaitWriteBufferEmpty: ; 0x020CC180 - mov r0, #0x0 - mcr p15, 0x0, r0, c7, c10, 0x4 - bx lr - - arm_func_start IC_InvalidateAll -IC_InvalidateAll: ; 0x020CC18C - mov r0, #0x0 - mcr p15, 0x0, r0, c7, c5, 0x0 - bx lr - - arm_func_start IC_InvalidateRange -IC_InvalidateRange: - add r1, r1, r0 - bic r0, r0, #0x1f -_020CC1A0: - mcr p15, 0x0, r0, c7, c5, 0x1 - add r0, r0, #0x20 - cmp r0, r1 - blt _020CC1A0 - bx lr - - arm_func_start OS_Init -OS_Init: ; 0x020CC1B4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl OS_InitArena - bl PXI_Init - bl OS_InitLock - bl OS_InitArenaEx - bl OS_InitIrqTable - bl OS_SetIrqStackChecker - bl OS_InitException - bl MI_Init - bl OS_InitVAlarm - bl OSi_InitVramExclusive - bl OS_InitThread - bl OS_InitReset - bl CTRDG_Init - bl CARD_Init - bl PM_Init - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start OS_AllocFromArenaHi -OS_AllocFromArenaHi: ; 0x020CC204 - stmdb sp!, {r4-r6,lr} - mov r4, r0 - mov r6, r1 - mov r5, r2 - bl OS_GetArenaHi -_020CC218: - cmp r0, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - sub r1, r5, #0x1 - mvn r2, r1 - and r0, r0, r2 - sub r1, r0, r6 - mov r0, r4 - and r5, r1, r2 - bl OS_GetArenaLo - cmp r5, r0 - movcc r0, #0x0 - ldmccia sp!, {r4-r6, lr} - bxcc lr - mov r0, r4 - mov r1, r5 - bl OS_SetArenaHi - mov r0, r5 - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start OS_AllocFromArenaLo -OS_AllocFromArenaLo: ; 0x020CC26C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - bl OS_GetArenaLo -_020CC284: - cmp r0, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r7, lr} - bxeq lr - add r0, r0, r5 - sub r1, r5, #0x1 - mvn r2, r1 - sub r0, r0, #0x1 - and r4, r2, r0 - add r0, r4, r6 - add r0, r0, r5 - sub r1, r0, #0x1 - mov r0, r7 - and r5, r2, r1 - bl OS_GetArenaHi - cmp r5, r0 - addhi sp, sp, #0x4 - movhi r0, #0x0 - ldmhiia sp!, {r4-r7, lr} - bxhi lr - mov r0, r7 - mov r1, r5 - bl OS_SetArenaLo - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r7, lr} - bx lr - - arm_func_start OS_SetArenaLo -OS_SetArenaLo: ; 0x020CC2F4 - mov r0, r0, lsl #0x2 - add r0, r0, #0x2700000 - add r0, r0, #0xff000 - str r1, [r0, #0xda0] - bx lr - - arm_func_start OS_SetArenaHi -OS_SetArenaHi: - mov r0, r0, lsl #0x2 - add r0, r0, #0x2700000 - add r0, r0, #0xff000 - str r1, [r0, #0xdc4] - bx lr - - arm_func_start OS_GetInitArenaLo -OS_GetInitArenaLo: ; 0x020CC31C - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0x6 - addls pc, pc, r0, lsl #0x2 - b _020CC3DC -_020CC330: - b _020CC34C - b _020CC3DC - b _020CC35C - b _020CC39C - b _020CC3AC - b _020CC3BC - b _020CC3CC -_020CC34C: - add sp, sp, #0x4 - ldr r0, _020CC3EC ; =0x0225FFA0 - ldmfd sp!, {lr} - bx lr -_020CC35C: - ldr r0, _020CC3F0 ; =0x021D36F4 - ldr r0, [r0] - cmp r0, #0x0 - beq _020CC37C - bl OS_GetConsoleType - and r0, r0, #0x3 - cmp r0, #0x1 - bne _020CC38C -_020CC37C: - add sp, sp, #0x4 - mov r0, #0x0 - ldmfd sp!, {lr} - bx lr -_020CC38C: - add sp, sp, #0x4 - ldr r0, _020CC3F4 ; =0x023E0000 - ldmfd sp!, {lr} - bx lr -_020CC39C: - add sp, sp, #0x4 - ldr r0, _020CC3F8 ; =0x01FF8720 - ldmfd sp!, {lr} - bx lr -_020CC3AC: - add sp, sp, #0x4 - ldr r0, _020CC3FC ; =0x027E0080 - ldmfd sp!, {lr} - bx lr -_020CC3BC: - add sp, sp, #0x4 - ldr r0, _020CC400 ; =0x027FF000 - ldmfd sp!, {lr} - bx lr -_020CC3CC: - add sp, sp, #0x4 - ldr r0, _020CC404 ; =0x037F8000 - ldmfd sp!, {lr} - bx lr -_020CC3DC: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020CC3EC: .word 0x0225FFA0 -_020CC3F0: .word 0x021D36F4 -_020CC3F4: .word 0x023E0000 -_020CC3F8: .word 0x01FF8720 -_020CC3FC: .word 0x027E0080 -_020CC400: .word 0x027FF000 -_020CC404: .word 0x037F8000 - - arm_func_start OS_GetInitArenaHi -OS_GetInitArenaHi: ; 0x020CC408 - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0x6 - addls pc, pc, r0, lsl #0x2 - b _020CC508 -_020CC41C: - b _020CC438 - b _020CC508 - b _020CC448 - b _020CC488 - b _020CC498 - b _020CC4E8 - b _020CC4F8 -_020CC438: - add sp, sp, #0x4 - ldr r0, _020CC518 ; =0x023E0000 - ldmfd sp!, {lr} - bx lr -_020CC448: - ldr r0, _020CC51C ; =0x021D36F4 - ldr r0, [r0] - cmp r0, #0x0 - beq _020CC468 - bl OS_GetConsoleType - and r0, r0, #0x3 - cmp r0, #0x1 - bne _020CC478 -_020CC468: - add sp, sp, #0x4 - mov r0, #0x0 - ldmfd sp!, {lr} - bx lr -_020CC478: - add sp, sp, #0x4 - mov r0, #0x2700000 - ldmfd sp!, {lr} - bx lr -_020CC488: - add sp, sp, #0x4 - mov r0, #0x2000000 - ldmfd sp!, {lr} - bx lr -_020CC498: - ldr r0, _020CC520 ; =0x027E0000 - ldr r1, _020CC524 ; =0x00000000 - ldr r2, _020CC528 ; =0x00000400 - add r3, r0, #0x3f80 - cmp r1, #0x0 - sub r2, r3, r2 - bne _020CC4CC - ldr r1, _020CC52C ; =0x027E0080 - add sp, sp, #0x4 - cmp r0, r1 - movcc r0, r1 - ldmfd sp!, {lr} - bx lr -_020CC4CC: - cmp r1, #0x0 - ldrlt r0, _020CC52C ; =0x027E0080 - add sp, sp, #0x4 - sublt r0, r0, r1 - subge r0, r2, r1 - ldmfd sp!, {lr} - bx lr -_020CC4E8: - add sp, sp, #0x4 - ldr r0, _020CC530 ; =0x027FF680 - ldmfd sp!, {lr} - bx lr -_020CC4F8: - add sp, sp, #0x4 - ldr r0, _020CC534 ; =0x037F8000 - ldmfd sp!, {lr} - bx lr -_020CC508: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020CC518: .word 0x023E0000 -_020CC51C: .word 0x021D36F4 -_020CC520: .word 0x027E0000 -_020CC524: .word 0x00000000 -_020CC528: .word 0x00000400 -_020CC52C: .word 0x027E0080 -_020CC530: .word 0x027FF680 -_020CC534: .word 0x037F8000 - - arm_func_start OS_GetArenaLo -OS_GetArenaLo: - mov r0, r0, lsl #0x2 - add r0, r0, #0x2700000 - add r0, r0, #0xff000 - ldr r0, [r0, #0xda0] - bx lr - - arm_func_start OS_GetArenaHi -OS_GetArenaHi: - mov r0, r0, lsl #0x2 - add r0, r0, #0x2700000 - add r0, r0, #0xff000 - ldr r0, [r0, #0xdc4] - bx lr - - arm_func_start OS_InitArenaEx -OS_InitArenaEx: ; 0x020CC560 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r0, #0x2 - bl OS_GetInitArenaHi - mov r1, r0 - mov r0, #0x2 - bl OS_SetArenaHi - mov r0, #0x2 - bl OS_GetInitArenaLo - mov r1, r0 - mov r0, #0x2 - bl OS_SetArenaLo - ldr r0, _020CC5D4 ; =0x021D36F4 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _020CC5B8 - bl OS_GetConsoleType - and r0, r0, #0x3 - cmp r0, #0x1 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr -_020CC5B8: - ldr r0, _020CC5D8 ; =0x0200002B - bl OS_SetProtectionRegion1 - ldr r0, _020CC5DC ; =0x023E0021 - bl OS_SetProtectionRegion2 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CC5D4: .word 0x021D36F4 -_020CC5D8: .word 0x0200002B -_020CC5DC: .word 0x023E0021 - - arm_func_start OS_InitArena -OS_InitArena: ; 0x020CC5E0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020CC6F4 ; =0x021D36F0 - ldr r0, [r1, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - mov r2, #0x1 - mov r0, #0x0 - str r2, [r1, #0x0] - bl OS_GetInitArenaHi - mov r1, r0 - mov r0, #0x0 - bl OS_SetArenaHi -_020CC61C: - mov r0, #0x0 - bl OS_GetInitArenaLo - mov r1, r0 - mov r0, #0x0 - bl OS_SetArenaLo - mov r0, #0x2 - mov r1, #0x0 - bl OS_SetArenaLo - mov r0, #0x2 - mov r1, #0x0 - bl OS_SetArenaHi - mov r0, #0x3 - bl OS_GetInitArenaHi - mov r1, r0 - mov r0, #0x3 - bl OS_SetArenaHi - mov r0, #0x3 - bl OS_GetInitArenaLo - mov r1, r0 - mov r0, #0x3 - bl OS_SetArenaLo - mov r0, #0x4 - bl OS_GetInitArenaHi - mov r1, r0 - mov r0, #0x4 - bl OS_SetArenaHi - mov r0, #0x4 - bl OS_GetInitArenaLo - mov r1, r0 - mov r0, #0x4 - bl OS_SetArenaLo - mov r0, #0x5 - bl OS_GetInitArenaHi - mov r1, r0 - mov r0, #0x5 - bl OS_SetArenaHi - mov r0, #0x5 - bl OS_GetInitArenaLo - mov r1, r0 - mov r0, #0x5 - bl OS_SetArenaLo - mov r0, #0x6 - bl OS_GetInitArenaHi - mov r1, r0 - mov r0, #0x6 - bl OS_SetArenaHi - mov r0, #0x6 - bl OS_GetInitArenaLo - mov r1, r0 - mov r0, #0x6 - bl OS_SetArenaLo - add sp, sp, #0x4 - ldmfd sp!, {lr} - bx lr -_020CC6F4: .word 0x021D36F0 - - arm_func_start OS_FreeToHeap -OS_FreeToHeap: ; 0x020CC6F8 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r5, r1 - mov r4, r2 - bl OS_DisableInterrupts - ldr r1, _020CC768 ; =0x021D36F8 - mov r6, r0 - ldr r0, [r1, r7, lsl #0x2] - cmp r5, #0x0 - ldrlt r5, [r0, #0x0] - ldr r1, [r0, #0x10] - mov r0, #0xc - mla r7, r5, r0, r1 - sub r4, r4, #0x20 - ldr r0, [r7, #0x8] - mov r1, r4 - bl DLExtract - str r0, [r7, #0x8] - ldr r0, [r7, #0x4] - mov r1, r4 - bl DLInsert - str r0, [r7, #0x4] - mov r0, r6 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020CC768: .word 0x021D36F8 - - arm_func_start OS_AllocFromHeap -OS_AllocFromHeap: ; 0x020CC76C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r6, r0 - mov r5, r1 - mov r7, r2 - bl OS_DisableInterrupts - ldr r1, _020CC894 ; =0x021D36F8 - mov r4, r0 - ldr r1, [r1, r6, lsl #0x2] - cmp r1, #0x0 - bne _020CC7AC - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020CC7AC: - cmp r5, #0x0 - ldrlt r5, [r1, #0x0] - ldr r1, [r1, #0x10] - mov r0, #0xc - mla r6, r5, r0, r1 - ldr r0, [r6, #0x4] - add r1, r7, #0x20 - add r1, r1, #0x1f - mov r5, r0 - cmp r0, #0x0 - bic r7, r1, #0x1f - beq _020CC7F4 -_020CC7DC: - ldr r1, [r5, #0x8] - cmp r7, r1 - ble _020CC7F4 - ldr r5, [r5, #0x4] - cmp r5, #0x0 - bne _020CC7DC -_020CC7F4: - cmp r5, #0x0 - bne _020CC814 - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020CC814: - ldr r1, [r5, #0x8] - sub r1, r1, r7 - cmp r1, #0x40 - bhs _020CC834 - mov r1, r5 - bl DLExtract - str r0, [r6, #0x4] - b _020CC86C -_020CC834: - str r7, [r5, #0x8] - add r2, r5, r7 - str r1, [r2, #0x8] - ldr r0, [r5, #0x0] - str r0, [r5, r7] - ldr r0, [r5, #0x4] - str r0, [r2, #0x4] - ldr r0, [r2, #0x4] - cmp r0, #0x0 - strne r2, [r0, #0x0] - ldr r0, [r2, #0x0] - cmp r0, #0x0 - strne r2, [r0, #0x4] - streq r2, [r6, #0x4] -_020CC86C: - ldr r0, [r6, #0x8] - mov r1, r5 - bl DLAddFront - str r0, [r6, #0x8] - mov r0, r4 - bl OS_RestoreInterrupts - add r0, r5, #0x20 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020CC894: .word 0x021D36F8 - - arm_func_start DLInsert -DLInsert: ; 0x020CC898 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r12, r0 - cmp r0, #0x0 - mov lr, #0x0 - beq _020CC8C8 -_020CC8B0: - cmp r1, r12 - bls _020CC8C8 - mov lr, r12 - ldr r12, [r12, #0x4] - cmp r12, #0x0 - bne _020CC8B0 -_020CC8C8: - str r12, [r1, #0x4] - str lr, [r1, #0x0] - cmp r12, #0x0 - beq _020CC908 - str r1, [r12, #0x0] - ldr r3, [r1, #0x8] - add r2, r1, r3 - cmp r2, r12 - bne _020CC908 - ldr r2, [r12, #0x8] - add r2, r3, r2 - str r2, [r1, #0x8] - ldr r12, [r12, #0x4] - str r12, [r1, #0x4] - cmp r12, #0x0 - strne r1, [r12, #0x0] -_020CC908: - cmp lr, #0x0 - beq _020CC950 - str r1, [lr, #0x4] - ldr r2, [lr, #0x8] - add r3, lr, r2 - cmp r3, r1 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r1, [r1, #0x8] - add sp, sp, #0x4 - add r1, r2, r1 - str r1, [lr, #0x8] - str r12, [lr, #0x4] - cmp r12, #0x0 - strne lr, [r12, #0x0] - ldmia sp!, {lr} - bx lr -_020CC950: - mov r0, r1 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start DLExtract -DLExtract: ; 0x020CC960 - ldr r3, [r1, #0x4] - cmp r3, #0x0 - ldrne r2, [r1, #0x0] - strne r2, [r3, #0x0] - ldr r2, [r1, #0x0] - cmp r2, #0x0 - ldreq r0, [r1, #0x4] - ldrne r1, [r1, #0x4] - strne r1, [r2, #0x4] - bx lr - - arm_func_start DLAddFront -DLAddFront: ; 0x020CC988 - str r0, [r1, #0x4] - mov r2, #0x0 - str r2, [r1, #0x0] - cmp r0, #0x0 - strne r1, [r0, #0x0] - mov r0, r1 - bx lr - - arm_func_start OS_GetDTCMAddress -OS_GetDTCMAddress: ; 0x020CC9A4 - mrc p15, 0x0, r0, c9, c1, 0x0 - ldr r1, _020CC9B4 ; =0xFFFFF000 - and r0, r0, r1 - bx lr - .balign 4 -_020CC9B4: .word 0xFFFFF000 - - arm_func_start OS_EnableProtectionUnit -OS_EnableProtectionUnit: ; 0x020CC9B8 - mrc p15, 0x0, r0, c1, c0, 0x0 - orr r0, r0, #0x1 - mcr p15, 0x0, r0, c1, c0, 0x0 - bx lr - - arm_func_start OS_DisableProtectionUnit -OS_DisableProtectionUnit: ; 0x020CC9C8 - mrc p15, 0x0, r0, c1, c0, 0x0 - bic r0, r0, #0x1 - mcr p15, 0x0, r0, c1, c0, 0x0 - bx lr - - arm_func_start OS_SetDPermissionsForProtectionRegion -OS_SetDPermissionsForProtectionRegion: ; 0x020CC9D8 - mrc p15, 0x0, r2, c5, c0, 0x2 - bic r2, r2, r0 - orr r2, r2, r1 - mcr p15, 0x0, r2, c5, c0, 0x2 - bx lr - - arm_func_start OS_SetProtectionRegion1 -OS_SetProtectionRegion1: ; 0x020CC9EC - mcr p15, 0x0, r0, c6, c1, 0x0 - bx lr - - arm_func_start OS_SetProtectionRegion2 -OS_SetProtectionRegion2: ; 0x020CC9F4 - mcr p15, 0x0, r0, c6, c2, 0x0 - bx lr - - arm_func_start OSi_ExceptionHandler -OSi_ExceptionHandler: ; 0x020CC9FC - ldr ip, _020CCA68 ; =0x021D3724 - ldr r12, [r12, #0x0] - cmp r12, #0x0 - movne lr, pc - bxne r12 - ldr ip, _020CCA6C ; =0x02000000 - stmdb r12!, {r0-r3,sp-lr} - and r0, sp, #0x1 - mov sp, r12 - mrs r1, cpsr - and r1, r1, #0x1f - teq r1, #0x17 - bne _020CCA38 - bl OSi_GetAndDisplayContext - b _020CCA44 -_020CCA38: - teq r1, #0x1b - bne _020CCA44 - bl OSi_GetAndDisplayContext -_020CCA44: - ldr ip, _020CCA68 ; =0x021D3724 - ldr r12, [r12, #0x0] - cmp r12, #0x0 -_020CCA50: - beq _020CCA50 -_020CCA54: - mov r0, r0 - b _020CCA54 -_020CCA5C: - ldmia sp!, {r0-r3,ip,lr} - mov sp, ip - bx lr -_020CCA68: .word 0x021D3724 -_020CCA6C: .word 0x02000000 - - arm_func_start OSi_GetAndDisplayContext -OSi_GetAndDisplayContext: ; 0x020CCA70 - stmdb sp!, {r0,lr} - bl OSi_SetExContext - bl OSi_DisplayExContext - ldmia sp!, {r0,lr} - bx lr - - arm_func_start OSi_SetExContext -OSi_SetExContext: ; 0x020CCA84 - ldr r1, _020CCB10 ; =0x021D3728 - mrs r2, cpsr - str r2, [r1, #0x74] - str r0, [r1, #0x6c] - ldr r0, [r12, #0x0] - str r0, [r1, #0x4] - ldr r0, [r12, #0x4] - str r0, [r1, #0x8] - ldr r0, [r12, #0x8] - str r0, [r1, #0xc] - ldr r0, [r12, #0xc] - str r0, [r1, #0x10] - ldr r2, [r12, #0x10] - bic r2, r2, #0x1 - add r0, r1, #0x14 - stmia r0, {r4-r11} - str r12, [r1, #0x70] - ldr r0, [r2, #0x0] - str r0, [r1, #0x64] - ldr r3, [r2, #0x4] - str r3, [r1, #0x0] - ldr r0, [r2, #0x8] - str r0, [r1, #0x34] - ldr r0, [r2, #0xc] - str r0, [r1, #0x40] - mrs r0, cpsr - orr r3, r3, #0x80 - bic r3, r3, #0x20 - msr cpsr_fsxc, r3 - str sp, [r1, #0x38] - str lr, [r1, #0x3c] - mrs r2, spsr - str r2, [r1, #0x7c] - msr cpsr_fsxc, r0 - bx lr - .balign 4 -_020CCB10: .word 0x021D3728 - - arm_func_start OSi_DisplayExContext -OSi_DisplayExContext: ; 0x020CCB14 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020CCB70 ; =0x021D371C - ldr r0, [r0, #0x0] - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - mov r0, sp - ldr r1, _020CCB74 ; =0x0000009F - msr cpsr_fsxc, r1 - mov sp, r0 - bl OS_EnableProtectionUnit - ldr r1, _020CCB78 ; =0x021D3720 - ldr r0, _020CCB70 ; =0x021D371C - ldr r1, [r1, #0x0] - ldr r2, [r0, #0x0] - ldr r0, _020CCB7C ; =0x021D3728 - blx r2 - bl OS_DisableProtectionUnit - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CCB70: .word 0x021D371C -_020CCB74: .word 0x0000009F -_020CCB78: .word 0x021D3720 -_020CCB7C: .word 0x021D3728 - - arm_func_start OS_InitException -OS_InitException: ; 0x020CCB80 - ldr r0, _020CCBDC ; =0x027FFD9C - ldr r1, [r0, #0x0] - cmp r1, #0x2600000 - blo _020CCBA0 - cmp r1, #0x2800000 - ldrlo r0, _020CCBE0 ; =0x021D3724 - strcc r1, [r0, #0x0] - blo _020CCBAC -_020CCBA0: - ldr r0, _020CCBE0 ; =0x021D3724 - mov r1, #0x0 - str r1, [r0, #0x0] -_020CCBAC: - ldr r0, _020CCBE0 ; =0x021D3724 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - ldreq r2, _020CCBE4 ; =OSi_ExceptionHandler - ldreq r1, _020CCBDC ; =0x027FFD9C - ldreq r0, _020CCBE8 ; =0x027E3000 - streq r2, [r1, #0x0] - streq r2, [r0, #0xfdc] - ldr r0, _020CCBEC ; =0x021D371C - mov r1, #0x0 - str r1, [r0, #0x0] - bx lr - .balign 4 -_020CCBDC: .word 0x027FFD9C -_020CCBE0: .word 0x021D3724 -_020CCBE4: .word OSi_ExceptionHandler -_020CCBE8: .word 0x027E3000 -_020CCBEC: .word 0x021D371C - - arm_func_start OSi_SetTimerReserved -OSi_SetTimerReserved: ; 0x020CCBF0 - ldr r1, _020CCC08 ; =0x021D37A8 - mov r2, #0x1 - ldrh r3, [r1, #0x0] - orr r0, r3, r2, lsl r0 - strh r0, [r1, #0x0] - bx lr - .balign 4 -_020CCC08: .word 0x021D37A8 - - arm_func_start OS_GetTickLo -OS_GetTickLo: ; 0x020CCC0C - ldr r0, _020CCC18 ; =0x04000100 - ldrh r0, [r0, #0x0] - bx lr - .balign 4 -_020CCC18: .word 0x04000100 - - arm_func_start OS_GetTick -OS_GetTick: ; 0x020CCC1C - stmdb sp!, {lr} - sub sp, sp, #0xc - bl OS_DisableInterrupts - ldr r1, _020CCCBC ; =0x04000100 - ldr r3, _020CCCC0 ; =0x021D37B4 - ldrh r12, [r1, #0x0] - ldr r2, _020CCCC4 ; =0x0000FFFF - mvn r1, #0x0 - strh r12, [sp, #0x0] - ldr r12, [r3, #0x0] - ldr r3, [r3, #0x4] - and r1, r12, r1 - and r2, r3, r2 - str r1, [sp, #0x4] - ldr r1, _020CCCC8 ; =0x04000214 - str r2, [sp, #0x8] - ldr r1, [r1, #0x0] - ands r1, r1, #0x8 - beq _020CCC90 - ldrh r1, [sp, #0x0] - ands r1, r1, #0x8000 - bne _020CCC90 - ldr r3, [sp, #0x4] - mov r1, #0x1 - ldr r2, [sp, #0x8] - adds r3, r3, r1 - adc r1, r2, #0x0 - str r3, [sp, #0x4] - str r1, [sp, #0x8] -_020CCC90: - bl OS_RestoreInterrupts - ldr r2, [sp, #0x4] - ldr r1, [sp, #0x8] - ldrh r0, [sp, #0x0] - mov r1, r1, lsl #0x10 - orr r1, r1, r2, lsr #0x10 - orr r1, r1, r0, asr #0x1f - orr r0, r0, r2, lsl #0x10 - add sp, sp, #0xc - ldmia sp!, {lr} - bx lr - .balign 4 -_020CCCBC: .word 0x04000100 -_020CCCC0: .word 0x021D37B4 -_020CCCC4: .word 0x0000FFFF -_020CCCC8: .word 0x04000214 - - arm_func_start OSi_CountUpTick -OSi_CountUpTick: ; 0x020CCCCC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020CCD40 ; =0x021D37B4 - ldr r1, _020CCD44 ; =0x021D37B0 - ldr r12, [r2, #0x0] - mov r0, #0x1 - ldr r3, [r2, #0x4] - adds r12, r12, r0 - ldr r0, [r1, #0x0] - adc r3, r3, #0x0 - str r12, [r2, #0x0] - str r3, [r2, #0x4] - cmp r0, #0x0 - mov r3, #0x0 - beq _020CCD24 - ldr r2, _020CCD48 ; =0x04000102 - ldr r0, _020CCD4C ; =0x04000100 - strh r3, [r2, #0x0] - strh r3, [r0, #0x0] - mov r0, #0xc1 - strh r0, [r2, #0x0] - str r3, [r1, #0x0] -_020CCD24: - mov r0, #0x0 - ldr r1, _020CCD50 ; =OSi_CountUpTick - mov r2, r0 - bl OSi_EnterTimerCallback - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CCD40: .word 0x021D37B4 -_020CCD44: .word 0x021D37B0 -_020CCD48: .word 0x04000102 -_020CCD4C: .word 0x04000100 -_020CCD50: .word OSi_CountUpTick - - arm_func_start OS_IsTickAvailable -OS_IsTickAvailable: ; 0x020CCD54 - ldr r0, _020CCD60 ; =0x021D37AC - ldrh r0, [r0, #0x0] - bx lr - .balign 4 -_020CCD60: .word 0x021D37AC - - arm_func_start OS_InitTick -OS_InitTick: ; 0x020CCD64 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020CCDE8 ; =0x021D37AC - ldrh r0, [r1, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - mov r2, #0x1 - mov r0, #0x0 - strh r2, [r1, #0x0] - bl OSi_SetTimerReserved - ldr r0, _020CCDEC ; =0x021D37B4 - mov r2, #0x0 - str r2, [r0, #0x0] - ldr r3, _020CCDF0 ; =0x04000102 - str r2, [r0, #0x4] - ldr r0, _020CCDF4 ; =0x04000100 - strh r2, [r3, #0x0] - ldr r1, _020CCDF8 ; =OSi_CountUpTick - strh r2, [r0, #0x0] - mov r2, #0xc1 - mov r0, #0x8 - strh r2, [r3, #0x0] - bl OS_SetIrqFunction - mov r0, #0x8 - bl OS_EnableIrqMask - ldr r0, _020CCDFC ; =0x021D37B0 - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CCDE8: .word 0x021D37AC -_020CCDEC: .word 0x021D37B4 -_020CCDF0: .word 0x04000102 -_020CCDF4: .word 0x04000100 -_020CCDF8: .word OSi_CountUpTick -_020CCDFC: .word 0x021D37B0 - - arm_func_start OSi_AlarmHandler -OSi_AlarmHandler: ; 0x020CCE00 - stmdb sp!, {r0,lr} - bl OSi_ArrangeTimer - ldmia sp!, {r0,lr} - bx lr - - arm_func_start OSi_ArrangeTimer -OSi_ArrangeTimer: ; 0x020CCE10 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r1, _020CCF1C ; =0x04000106 - mov r2, #0x0 - mov r0, #0x10 - strh r2, [r1, #0x0] - bl OS_DisableIrqMask - ldr r0, _020CCF20 ; =0x027E0000 - add r0, r0, #0x3000 - ldr r1, [r0, #0xff8] - orr r1, r1, #0x10 - str r1, [r0, #0xff8] - bl OS_GetTick - ldr r2, _020CCF24 ; =0x021D37C0 - ldr r4, [r2, #0x0] - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r3, [r4, #0x10] - ldr r12, [r4, #0xc] - cmp r1, r3 - cmpeq r0, r12 - bhs _020CCE84 - mov r0, r4 - bl OSi_SetTimer - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr -_020CCE84: - ldr r1, [r4, #0x18] - cmp r1, #0x0 - moveq r0, #0x0 - streq r0, [r2, #0x4] - str r1, [r2, #0x0] - movne r0, #0x0 - strne r0, [r1, #0x14] - ldr r2, [r4, #0x1c] - ldr r1, [r4, #0x20] - mov r0, #0x0 - cmp r1, r0 - ldr r5, [r4, #0x0] - cmpeq r2, r0 - streq r0, [r4, #0x0] - cmp r5, #0x0 - beq _020CCECC - ldr r0, [r4, #0x4] - blx r5 -_020CCECC: - ldr r2, [r4, #0x1c] - ldr r0, [r4, #0x20] - mov r1, #0x0 - cmp r0, r1 - cmpeq r2, r1 - beq _020CCEF4 - mov r0, r4 - mov r2, r1 - str r5, [r4, #0x0] - bl OSi_InsertAlarm -_020CCEF4: - ldr r0, _020CCF24 ; =0x021D37C0 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - bl OSi_SetTimer - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020CCF1C: .word 0x04000106 -_020CCF20: .word 0x027E0000 -_020CCF24: .word 0x021D37C0 - - arm_func_start OS_CancelAlarm -OS_CancelAlarm: ; 0x020CCF28 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, [r5, #0x0] - mov r4, r0 - cmp r1, #0x0 - bne _020CCF58 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr -_020CCF58: - ldr r0, [r5, #0x18] - cmp r0, #0x0 - ldreq r2, [r5, #0x14] - ldreq r1, _020CCFBC ; =0x021D37C0 - streq r2, [r1, #0x4] - ldrne r1, [r5, #0x14] - strne r1, [r0, #0x14] - ldr r1, [r5, #0x14] - cmp r1, #0x0 - strne r0, [r1, #0x18] - bne _020CCF98 - ldr r1, _020CCFBC ; =0x021D37C0 - cmp r0, #0x0 - str r0, [r1, #0x0] - beq _020CCF98 - bl OSi_SetTimer -_020CCF98: - mov r1, #0x0 - str r1, [r5, #0x0] - str r1, [r5, #0x1c] - mov r0, r4 - str r1, [r5, #0x20] - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020CCFBC: .word 0x021D37C0 - - arm_func_start OS_SetAlarm -OS_SetAlarm: ; 0x020CCFC0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - movs r6, r0 - mov r5, r1 - mov r4, r2 - mov r7, r3 - beq _020CCFE8 - ldr r0, [r6, #0x0] - cmp r0, #0x0 - beq _020CCFEC -_020CCFE8: - bl OS_Terminate -_020CCFEC: - bl OS_DisableInterrupts - mov r1, #0x0 - str r1, [r6, #0x1c] - str r1, [r6, #0x20] - str r7, [r6, #0x0] - ldr r1, [sp, #0x18] - mov r7, r0 - str r1, [r6, #0x4] - bl OS_GetTick - adds r3, r5, r0 - adc r2, r4, r1 - mov r0, r6 - mov r1, r3 - bl OSi_InsertAlarm - mov r0, r7 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start OSi_InsertAlarm -OSi_InsertAlarm: ; 0x020CD038 - stmdb sp!, {r4-r8,lr} - mov r8, r0 - ldr r4, [r8, #0x1c] - ldr r3, [r8, #0x20] - mov r0, #0x0 - cmp r3, r0 - mov r7, r1 - mov r6, r2 - cmpeq r4, r0 - beq _020CD0B4 - bl OS_GetTick - ldr r6, [r8, #0x28] - ldr r7, [r8, #0x24] - cmp r6, r1 - cmpeq r7, r0 - bhs _020CD0B4 - ldr r5, [r8, #0x1c] - ldr r4, [r8, #0x20] - subs r0, r0, r7 - mov r2, r5 - mov r3, r4 - sbc r1, r1, r6 - bl _ll_udiv - mov r2, #0x1 - adds r2, r0, r2 - adc r0, r1, #0x0 - umull r3, r1, r5, r2 - mla r1, r5, r0, r1 - mla r1, r4, r2, r1 - adds r7, r7, r3 - adc r6, r6, r1 -_020CD0B4: - str r7, [r8, #0xc] - ldr r0, _020CD174 ; =0x021D37C0 - str r6, [r8, #0x10] - ldr r4, [r0, #0x0] - cmp r4, #0x0 - beq _020CD134 - mov r1, #0x0 -_020CD0D0: - ldr r2, [r4, #0xc] - ldr r0, [r4, #0x10] - subs r3, r7, r2 - sbc r2, r6, r0 - subs r0, r3, r1 - sbcs r0, r2, r1 - bge _020CD128 - ldr r0, [r4, #0x14] - str r0, [r8, #0x14] - str r8, [r4, #0x14] - str r4, [r8, #0x18] - ldr r0, [r8, #0x14] - cmp r0, #0x0 - strne r8, [r0, #0x18] - ldmneia sp!, {r4-r8,lr} - bxne lr - ldr r1, _020CD174 ; =0x021D37C0 - mov r0, r8 - str r8, [r1, #0x0] - bl OSi_SetTimer - ldmia sp!, {r4-r8,lr} - bx lr -_020CD128: - ldr r4, [r4, #0x18] - cmp r4, #0x0 - bne _020CD0D0 -_020CD134: - ldr r1, _020CD174 ; =0x021D37C0 - mov r0, #0x0 - str r0, [r8, #0x18] - ldr r0, [r1, #0x4] - str r8, [r1, #0x4] - str r0, [r8, #0x14] - cmp r0, #0x0 - strne r8, [r0, #0x18] - ldmneia sp!, {r4-r8,lr} - bxne lr - mov r0, r8 - str r8, [r1, #0x4] - str r8, [r1, #0x0] - bl OSi_SetTimer - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020CD174: .word 0x021D37C0 - - arm_func_start OS_CreateAlarm -OS_CreateAlarm: ; 0x020CD178 - mov r1, #0x0 - str r1, [r0, #0x0] - str r1, [r0, #0x8] - bx lr - - arm_func_start OS_IsAlarmAvailable -OS_IsAlarmAvailable: ; 0x020CD188 - ldr r0, _020CD194 ; =0x021D37BC - ldrh r0, [r0, #0x0] - bx lr - .balign 4 -_020CD194: .word 0x021D37BC - - arm_func_start OS_InitAlarm -OS_InitAlarm: ; 0x020CD198 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020CD1E8 ; =0x021D37BC - ldrh r0, [r1, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - mov r0, #0x1 - strh r0, [r1, #0x0] - bl OSi_SetTimerReserved - ldr r1, _020CD1EC ; =0x021D37C0 - mov r2, #0x0 - mov r0, #0x10 - str r2, [r1, #0x0] - str r2, [r1, #0x4] - bl OS_DisableIrqMask - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CD1E8: .word 0x021D37BC -_020CD1EC: .word 0x021D37C0 - - arm_func_start OSi_SetTimer -OSi_SetTimer: ; 0x020CD1F0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r0 - bl OS_GetTick - ldr r3, _020CD27C ; =0x04000106 - mov r2, #0x0 - strh r2, [r3, #0x0] - ldr r12, [r4, #0xc] - ldr r3, [r4, #0x10] - subs r5, r12, r0 - sbc r4, r3, r1 - ldr r1, _020CD280 ; =OSi_AlarmHandler - mov r0, #0x1 - bl OSi_EnterTimerCallback - mov r2, #0x0 - subs r0, r5, r2 - sbcs r0, r4, r2 - ldrlt r2, _020CD284 ; =0x0000FFFE - blt _020CD254 - mov r0, #0x10000 - subs r0, r5, r0 - sbcs r0, r4, r2 - mvnlt r0, r5 - movlt r0, r0, lsl #0x10 - movlt r2, r0, lsr #0x10 -_020CD254: - ldr r0, _020CD288 ; =0x04000104 - ldr r1, _020CD27C ; =0x04000106 - strh r2, [r0, #0x0] - mov r2, #0xc1 - mov r0, #0x10 - strh r2, [r1, #0x0] - bl OS_EnableIrqMask - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020CD27C: .word 0x04000106 -_020CD280: .word OSi_AlarmHandler -_020CD284: .word 0x0000FFFE -_020CD288: .word 0x04000104 - - arm_func_start OS_InitVAlarm -OS_InitVAlarm: ; 0x020CD28C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020CD2EC ; =0x021D37C8 - ldrh r0, [r2, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r1, _020CD2F0 ; =0x021D37D4 - mov r3, #0x0 - mov r12, #0x1 - mov r0, #0x4 - strh r12, [r2, #0x0] - str r3, [r1, #0x0] - str r3, [r1, #0x4] - bl OS_DisableIrqMask - ldr r1, _020CD2F4 ; =0x021D37D0 - mov r2, #0x0 - ldr r0, _020CD2F8 ; =0x021D37CC - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CD2EC: .word 0x021D37C8 -_020CD2F0: .word 0x021D37D4 -_020CD2F4: .word 0x021D37D0 -_020CD2F8: .word 0x021D37CC - - arm_func_start OS_EnableInterrupts -OS_EnableInterrupts: ; 0x020CD2FC - mrs r0, cpsr - bic r1, r0, #0x80 - msr cpsr_c, r1 - and r0, r0, #0x80 - bx lr - - arm_func_start OS_DisableInterrupts -OS_DisableInterrupts: - mrs r0, cpsr - orr r1, r0, #0x80 - msr cpsr_c, r1 - and r0, r0, #0x80 - bx lr - - arm_func_start OS_RestoreInterrupts -OS_RestoreInterrupts: - mrs r1, cpsr - bic r2, r1, #0x80 - orr r2, r2, r0 - msr cpsr_c, r2 - and r0, r1, #0x80 - bx lr - - arm_func_start OS_DisableInterrupts_IrqAndFiq -OS_DisableInterrupts_IrqAndFiq: ; 0x020CD33C - mrs r0, cpsr - orr r1, r0, #0xc0 - msr cpsr_c, r1 - and r0, r0, #0xc0 - bx lr - - arm_func_start OS_RestoreInterrupts_IrqAndFiq -OS_RestoreInterrupts_IrqAndFiq: ; 0x020CD350 - mrs r1, cpsr - bic r2, r1, #0xc0 - orr r2, r2, r0 - msr cpsr_c, r2 - and r0, r1, #0xc0 - bx lr - - arm_func_start OS_GetCpsrIrq -OS_GetCpsrIrq: ; 0x020CD368 - mrs r0, cpsr - and r0, r0, #0x80 - bx lr - - arm_func_start OS_GetProcMode -OS_GetProcMode: ; 0x020CD374 - mrs r0, cpsr - and r0, r0, #0x1f - bx lr -_020CD380: - subs r0, r0, #0x4 - bhs _020CD380 - bx lr - - arm_func_start OS_WaitVBlankIntr -OS_WaitVBlankIntr: ; 0x020CD38C - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r0, #0x1 - blx FUN_020005F2 - mov r0, #0x1 - mov r1, r0 - bl OS_WaitIrq - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start OS_ResetSystem -OS_ResetSystem: ; 0x020CD3B4 - stmdb sp!, {r4,lr} - ldr r1, _020CD42C ; =0x027FFC40 - mov r4, r0 - ldrh r0, [r1, #0x0] - cmp r0, #0x2 - bne _020CD3D0 - bl OS_Terminate -_020CD3D0: - bl OS_GetLockID - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl CARD_LockRom -_020CD3E0: - mov r0, #0x0 - bl MI_StopDma - mov r0, #0x1 - bl MI_StopDma - mov r0, #0x2 - bl MI_StopDma - mov r0, #0x3 - bl MI_StopDma - mov r0, #0x40000 - bl OS_SetIrqMask - mvn r0, #0x0 - bl OS_ResetRequestIrqMask - ldr r1, _020CD430 - mov r0, #0x10 - str r4, [r1] - bl OSi_SendToPxi - bl FUN_01FF84A4 - ldmia sp!, {r4, lr} - bx lr -_020CD42C: .word 0x027FFC40 -_020CD430: .word 0x027FFC20 - - arm_func_start OSi_SendToPxi -OSi_SendToPxi: ; 0x020CD434 - stmdb sp!, {r4-r6,lr} - mov r6, r0, lsl #0x8 - mov r5, #0xc - mov r4, #0x0 -_020CD444: - mov r0, r5 - mov r1, r6 - mov r2, r4 - bl PXI_SendWordByFifo -_020CD454: - cmp r0, #0x0 - bne _020CD444 - ldmia sp!, {r4-r6, lr} - bx lr - - arm_func_start OSi_CommonCallback -OSi_CommonCallback: ; 0x020CD464 - stmdb sp!, {lr} - sub sp, sp, #0x4 - and r0, r1, #0x7f00 - mov r0, r0, lsl #0x8 - mov r0, r0, lsr #0x10 - cmp r0, #0x10 - ldreq r0, _020CD4A4 ; =0x021D37E0 - moveq r1, #0x1 - streqh r1, [r0, #0x0] - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CD4A4: .word 0x021D37E0 - - arm_func_start OS_InitReset -OS_InitReset: ; 0x020CD4A8 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020CD508 ; =0x021D37DC - ldrh r1, [r0, #0x0] - cmp r1, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - mov r1, #0x1 - strh r1, [r0, #0x0] - bl PXI_Init - mov r5, #0xc - mov r4, #0x1 -_020CD4DC: - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady -_020CD4E8: - cmp r0, #0x0 - beq _020CD4DC - ldr r1, _020CD50C - mov r0, #0xC - bl PXI_SetFifoRecvCallback - add sp, sp, #0x4 - ldmia sp!, {r4-r5, lr} - bx lr -_020CD508: .word 0x021D37DC -_020CD50C: .word 0x020CD464 - - arm_func_start OS_GetOwnerRtcOffset -OS_GetOwnerRtcOffset: ; 0x020CD510 - ldr r1, _020CD520 ; =0x027FFC80 - ldr r0, [r1, #0x68] - ldr r1, [r1, #0x6c] - bx lr - .balign 4 -_020CD520: .word 0x027FFC80 - - arm_func_start OS_GetOwnerInfo -OS_GetOwnerInfo: ; 0x020CD524 - stmdb sp!, {r4,lr} - ldr ip, _020CD59C ; =0x027FFC80 - mov r4, r0 - ldrh r2, [r12, #0x64] - add r0, r12, #0x6 - add r1, r4, #0x4 - mov r2, r2, lsl #0x1d - mov r2, r2, lsr #0x1d - strb r2, [r4, #0x0] - ldrb r3, [r12, #0x2] - mov r2, #0x14 - mov r3, r3, lsl #0x1c - mov r3, r3, lsr #0x1c - strb r3, [r4, #0x1] - ldrb r3, [r12, #0x3] - strb r3, [r4, #0x2] - ldrb r3, [r12, #0x4] - strb r3, [r4, #0x3] - ldrb r3, [r12, #0x1a] - strh r3, [r4, #0x18] - ldrb r3, [r12, #0x50] - strh r3, [r4, #0x4e] - bl MIi_CpuCopy16 - ldr r0, _020CD59C ; =0x027FFC80 - add r1, r4, #0x1a - add r0, r0, #0x1c - mov r2, #0x34 - bl MIi_CpuCopy16 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CD59C: .word 0x027FFC80 - - arm_func_start OS_GetMacAddress -OS_GetMacAddress: ; 0x020CD5A0 - ldr ip, _020CD5B4 ; =MI_CpuCopy8 - mov r1, r0 - ldr r0, _020CD5B8 ; =0x027FFCF4 - mov r2, #0x6 - bx r12 - .balign 4 -_020CD5B4: .word MI_CpuCopy8 -_020CD5B8: .word 0x027FFCF4 - - arm_func_start OsCountZeroBits -OsCountZeroBits: ; 0x020CD5BC - clz r0, r0 - bx lr - - arm_func_start OSi_UnlockVram -OSi_UnlockVram: ; 0x020CD5C4 - stmdb sp!, {r4-r10,lr} - mov r5, r0 - mov r10, r1 - bl OS_DisableInterrupts - ldr r4, _020CD640 ; =0x021D37E4 - ldr r1, _020CD644 ; =0x000001FF - ldr r2, [r4, #0x0] - mov r8, r0 - and r0, r5, r2 - and r9, r0, r1 - ldr r6, _020CD648 ; =0x021D37E8 - mov r7, #0x1 - mov r5, #0x0 -_020CD5F8: - mov r0, r9 - bl OsCountZeroBits - rsbs r2, r0, #0x1f - bmi _020CD630 - mov r1, r2, lsl #0x1 - ldrh r0, [r6, r1] - mvn r2, r7, lsl r2 - cmp r10, r0 - ldreq r0, [r4, #0x0] - and r9, r9, r2 - andeq r0, r0, r2 - streqh r5, [r6, r1] - streq r0, [r4, #0x0] - b _020CD5F8 -_020CD630: - mov r0, r8 - bl OS_RestoreInterrupts - ldmia sp!, {r4-r10,lr} - bx lr - .balign 4 -_020CD640: .word 0x021D37E4 -_020CD644: .word 0x000001FF -_020CD648: .word 0x021D37E8 - - arm_func_start OSi_TryLockVram -OSi_TryLockVram: ; 0x020CD64C - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - mov r6, r0 - mov r8, r1 - bl OS_DisableInterrupts - ldr r1, _020CD714 ; =0x021D37E4 - mov r7, r0 - ldr r0, [r1, #0x0] - and r5, r6, r0 - ldr sb, _020CD718 ; =0x021D37E8 - mov r4, #0x1 -_020CD678: - mov r0, r5 - bl OsCountZeroBits - rsbs r1, r0, #0x1f - bmi _020CD6B8 - mov r0, r1, lsl #0x1 - ldrh r0, [r9, r0] - mvn r1, r4, lsl r1 - cmp r8, r0 - and r5, r5, r1 - beq _020CD678 - mov r0, r7 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r9,lr} - bx lr -_020CD6B8: - ldr r0, _020CD71C ; =0x000001FF - and r6, r6, r0 - ldr r4, _020CD718 ; =0x021D37E8 - ldr sb, _020CD714 ; =0x021D37E4 - mov r5, #0x1 -_020CD6CC: - mov r0, r6 - bl OsCountZeroBits - rsbs r1, r0, #0x1f - bmi _020CD6FC - ldr r0, [r9, #0x0] - mvn r2, r5, lsl r1 - orr r0, r0, r5, lsl r1 - mov r1, r1, lsl #0x1 - strh r8, [r4, r1] - str r0, [r9, #0x0] - and r6, r6, r2 - b _020CD6CC -_020CD6FC: - mov r0, r7 - bl OS_RestoreInterrupts - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {r4-r9,lr} - bx lr - .balign 4 -_020CD714: .word 0x021D37E4 -_020CD718: .word 0x021D37E8 -_020CD71C: .word 0x000001FF - - arm_func_start OSi_InitVramExclusive -OSi_InitVramExclusive: ; 0x020CD720 - ldr r0, _020CD74C ; =0x021D37E4 - mov r3, #0x0 - str r3, [r0, #0x0] - ldr r0, _020CD750 ; =0x021D37E8 - mov r2, r3 -_020CD734: - mov r1, r3, lsl #0x1 - add r3, r3, #0x1 - strh r2, [r0, r1] - cmp r3, #0x9 - blt _020CD734 - bx lr - .balign 4 -_020CD74C: .word 0x021D37E4 -_020CD750: .word 0x021D37E8 - - arm_func_start OS_GetLowEntropyData -OS_GetLowEntropyData: ; 0x020CD754 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r1, _020CD82C ; =0x04000006 - ldr r2, _020CD830 ; =0x027FFC00 - ldrh r7, [r1, #0x0] - add r4, r2, #0x80 - mov r6, r0 - add r5, r4, #0x74 - bl OS_GetTickLo - orr r0, r0, r7, lsl #0x10 - str r0, [r6, #0x0] - ldr r1, _020CD834 ; =0x021D37B4 - ldr r0, _020CD830 ; =0x027FFC00 - ldr r3, [r1, #0x0] - ldrh r5, [r5, #0x4] - ldr r2, [r1, #0x4] - ldr r2, _020CD838 ; =0x04000600 - eor r3, r3, r5, lsl #0x10 - str r3, [r6, #0x4] - ldr r3, [r1, #0x0] - ldr r3, [r1, #0x4] - ldr r1, [r4, #0x74] - ldr r4, [r0, #0x3c] - eor r1, r3, r1 - eor r1, r4, r1 - str r1, [r6, #0x8] - ldr r3, [r6, #0x8] - ldr r2, [r2, #0x0] - add r1, r0, #0x300 - eor r2, r3, r2 - str r2, [r6, #0x8] - ldr r2, [r0, #0x1e8] - ldr r3, _020CD83C ; =0x04000130 - str r2, [r6, #0xc] - ldr r4, [r0, #0x1ec] - ldr r2, _020CD840 ; =0x027FFFA8 - str r4, [r6, #0x10] - ldrh r4, [r1, #0x94] - ldr r0, [r0, #0x390] - eor r0, r0, r4, lsl #0x10 - str r0, [r6, #0x14] - ldrh r4, [r1, #0xaa] - ldrh r0, [r1, #0xac] - orr r0, r0, r4, lsl #0x10 - str r0, [r6, #0x18] - ldrh r3, [r3, #0x0] - ldrh r0, [r2, #0x0] - ldrh r1, [r1, #0x98] - orr r0, r3, r0 - orr r0, r0, r1, lsl #0x10 - str r0, [r6, #0x1c] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020CD82C: .word 0x04000006 -_020CD830: .word 0x027FFC00 -_020CD834: .word 0x021D37B4 -_020CD838: .word 0x04000600 -_020CD83C: .word 0x04000130 -_020CD840: .word 0x027FFFA8 - - arm_func_start OS_Halt -OS_Halt: ; 0x020CD844 - mov r0, #0x0 - mcr p15, 0x0, r0, c7, c0, 0x4 - bx lr - - arm_func_start OS_Terminate -OS_Terminate: ; 0x020CD850 - stmdb sp!, {lr} - sub sp, sp, #0x4 -_020CD858: - bl OS_DisableInterrupts - bl OS_Halt - b _020CD858 - - arm_func_start MI_SetWramBank -MI_SetWramBank: - ldr r1, _020CD870 ; =0x04000247 - strb r0, [r1, #0x0] - bx lr - .balign 4 -_020CD870: .word 0x04000247 - - arm_func_start MIi_CheckDma0SourceAddress -MIi_CheckDma0SourceAddress: - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - cmp r3, #0x0 - and r0, r1, #0xff000000 - beq _020CD8A4 - cmp r3, #0x800000 - subeq r1, r1, r2 - b _020CD8A8 -_020CD8A4: - add r1, r1, r2 -_020CD8A8: - cmp r0, #0x4000000 - beq _020CD8D4 - cmp r0, #0x8000000 - bhs _020CD8D4 - and r0, r1, #0xff000000 - cmp r0, #0x4000000 - beq _020CD8D4 - cmp r0, #0x8000000 - addcc sp, sp, #0x4 - ldmccia sp!, {lr} - bxcc lr -_020CD8D4: - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start MIi_CheckAnotherAutoDMA -MIi_CheckAnotherAutoDMA: ; 0x020CD8E4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r4, _020CD994 ; =0x040000B8 - mov r7, r0 - mov r6, r1 - mov r5, #0x0 -_020CD8FC: - cmp r5, r7 - beq _020CD978 - ldr r1, [r4, #0x0] - ands r0, r1, #0x80000000 - beq _020CD978 - and r0, r1, #0x38000000 - cmp r0, r6 - beq _020CD978 - cmp r0, #0x8000000 - bne _020CD92C - cmp r6, #0x10000000 - beq _020CD978 -_020CD92C: - cmp r0, #0x10000000 - bne _020CD93C - cmp r6, #0x8000000 - beq _020CD978 -_020CD93C: - cmp r0, #0x18000000 - beq _020CD974 - cmp r0, #0x20000000 - beq _020CD974 - cmp r0, #0x28000000 - beq _020CD974 - cmp r0, #0x30000000 - beq _020CD974 - cmp r0, #0x38000000 - beq _020CD974 - cmp r0, #0x8000000 - beq _020CD974 - cmp r0, #0x10000000 - bne _020CD978 -_020CD974: - bl OS_Terminate -_020CD978: - add r5, r5, #0x1 - cmp r5, #0x3 - add r4, r4, #0xc - blt _020CD8FC - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020CD994: .word 0x040000B8 - - arm_func_start MI_StopDma -MI_StopDma: ; 0x020CD998 - stmdb sp!, {r4,lr} - mov r4, r0 - bl OS_DisableInterrupts - mov r1, #0x6 - mul r1, r4, r1 - add r1, r1, #0x5 - mov r1, r1, lsl #0x1 - add r1, r1, #0x4000000 - ldrh r2, [r1, #0xb0] - cmp r4, #0x0 - bic r2, r2, #0x3a00 - strh r2, [r1, #0xb0] - ldrh r2, [r1, #0xb0] - bic r2, r2, #0x8000 - strh r2, [r1, #0xb0] - ldrh r2, [r1, #0xb0] - ldrh r1, [r1, #0xb0] - bne _020CDA08 - mov r1, #0xc - mul r12, r4, r1 - ldr r1, _020CDA14 ; =0x040000B0 - add r2, r12, #0x4000000 - mov r3, #0x0 - str r3, [r2, #0xb0] - add r2, r12, r1 - ldr r1, _020CDA18 ; =0x81400001 - str r3, [r2, #0x4] - str r1, [r2, #0x8] -_020CDA08: - bl OS_RestoreInterrupts - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CDA14: .word 0x040000B0 -_020CDA18: .word 0x81400001 - - arm_func_start MI_WaitDma -MI_WaitDma: - stmdb sp!, {r4,lr} - mov r4, r0 - bl OS_DisableInterrupts - mov r1, #0x3 - mul r2, r4, r1 - ldr r1, _020CDA84 ; =0x040000B0 - add r2, r2, #0x2 - add r2, r1, r2, lsl #0x2 -_020CDA3C: - ldr r1, [r2, #0x0] - ands r1, r1, #0x80000000 - bne _020CDA3C - cmp r4, #0x0 - bne _020CDA78 - mov r1, #0xc - mul r12, r4, r1 - ldr r1, _020CDA84 ; =0x040000B0 - add r2, r12, #0x4000000 - mov r3, #0x0 - str r3, [r2, #0xb0] - add r2, r12, r1 - ldr r1, _020CDA88 ; =0x81400001 - str r3, [r2, #0x4] - str r1, [r2, #0x8] -_020CDA78: - bl OS_RestoreInterrupts - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CDA84: .word 0x040000B0 -_020CDA88: .word 0x81400001 - - arm_func_start MI_DmaCopy32Async -MI_DmaCopy32Async: ; 0x020CDA8C - stmdb sp!, {r4-r8,lr} - mov r5, r3 - mov r6, r2 - mov r2, r5 - mov r3, #0x0 - mov r8, r0 - mov r7, r1 - ldr r4, [sp, #0x18] - bl MIi_CheckDma0SourceAddress -_020CDAB0: - cmp r5, #0x0 - bne _020CDAD4 - cmp r4, #0x0 - ldmeqia sp!, {r4-r8, lr} - bxeq lr - ldr r0, [sp, #0x1C] - blx r4 - ldmia sp!, {r4-r8, lr} - bx lr -_020CDAD4: - mov r0, r8 - bl MI_WaitDma - cmp r4, #0x0 - beq _020CDB14 - ldr r2, [sp, #0x1C] - mov r0, r8 - mov r1, r4 - bl OSi_EnterDmaCallback - mov r3, r5, lsr #0x2 - mov r0, r8 - mov r1, r7 - mov r2, r6 - orr r3, r3, #0xc4000000 - bl FUN_01FF85F0 - ldmia sp!, {r4-r8, lr} - bx lr -_020CDB14: - mov r3, r5, lsr #0x2 - mov r0, r8 - mov r1, r7 - mov r2, r6 - orr r3, r3, #0x84000000 - bl FUN_01FF85F0 - ldmia sp!, {r4-r8, lr} - bx lr - - arm_func_start MI_DmaFill32Async -MI_DmaFill32Async: ; 0x020CDB34 - stmdb sp!, {r4-r8,lr} - movs r4, r3 - mov r7, r0 - mov r6, r1 - mov r5, r2 - ldr r8, [sp, #0x18] - bne _020CDB6C - cmp r8, #0x0 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - ldr r0, [sp, #0x1c] - blx r8 - ldmia sp!, {r4-r8,lr} - bx lr -_020CDB6C: - bl MI_WaitDma -_020CDB70: - cmp r8, #0x0 - beq _020CDBC8 - ldr r2, [sp, #0x1C] - mov r0, r7 - mov r1, r8 - bl OSi_EnterDmaCallback - bl OS_DisableInterrupts - mov r3, r4, lsr #2 - ldr r1, _20CDC08 - mov r2, r7, lsl #2 - add r2, r2, #0x4000000 - str r5, [r2, #0xE0] - mov r4, r0 - add r1, r1, r7, lsl #0x2 - mov r0, r7 - mov r2, r6 - orr r3, r3, #0xc5000000 - bl FUN_01FF8544 - mov r0, r4 - bl OS_RestoreInterrupts - ldmia sp!, {r4-r8,lr} - bx lr -_020CDBC8: - bl OS_DisableInterrupts - ldr r1, _20CDC08 - mov r2, r7, lsl #0x2 - mov r3, r4, lsr #0x2 - mov r4, r0 - add ip, r2, #0x4000000 - mov r0, r7 - mov r2, r6 - add r1, r1, r7, lsl #0x2 - orr r3, r3, #0x85000000 - str r5, [ip, #0xE0] - bl FUN_01FF8544 - mov r0, r4 - bl OS_RestoreInterrupts - ldmia sp!, {r4-r8,lr} - bx lr -_20CDC08: .word 0x040000E0 - - arm_func_start MI_DmaCopy16 -MI_DmaCopy16: ; 0x020CDC0C - stmdb sp!, {r4-r8,lr} - movs r5, r3 - mov r8, r0 - mov r7, r1 - mov r6, r2 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - mov r2, r5 - mov r3, #0x0 - bl MIi_CheckDma0SourceAddress - mov r0, #0x3 - mul r1, r8, r0 - ldr r0, _020CDC80 ; =0x040000B0 - add r1, r1, #0x2 - add r4, r0, r1, lsl #0x2 -_020CDC48: - ldr r0, [r4, #0x0] - ands r0, r0, #0x80000000 - bne _020CDC48 - mov r3, r5, lsr #0x1 - mov r0, r8 - mov r1, r7 - mov r2, r6 - orr r3, r3, #0x80000000 - bl FUN_01FF857C -_020CDC6C: - ldr r0, [r4] - ands r0, r0, #0x80000000 - bne _020CDC6C - ldmia sp!, {r4-r8,lr} - bx lr -_020CDC80: .word 0x040000B0 - - arm_func_start MI_DmaCopy32 -MI_DmaCopy32: ; 0x020CDC84 - stmdb sp!, {r4-r8,lr} - mov r5, r3 - mov r6, r2 - mov r2, r5 - mov r3, #0x0 - mov r8, r0 - mov r7, r1 - bl MIi_CheckDma0SourceAddress -_020CDCA4: - cmp r5, #0x0 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - mov r0, #0x3 - mul r1, r8, r0 - ldr r0, _020CDCFC - add r1, r1, #0x2 - add r4, r0, r1, lsl #0x2 -_020CDCC4: - ldr r0, [r4] - ands r0, r0, #0x80000000 - bne _020CDCC4 - mov r3, r5, lsr #0x2 - mov r0, r8 - mov r1, r7 - mov r2, r6 - orr r3, r3, #0x84000000 - bl FUN_01FF857C -_020CDCE8: - ldr r0, [r4] - ands r0, r0, #0x80000000 - bne _020CDCE8 - ldmia sp!, {r4-r8,lr} - bx lr -_020CDCFC: .word 0x040000B0 - - arm_func_start MI_DmaFill32 -MI_DmaFill32: ; 0x020CDD00 - stmdb sp!, {r4-r8,lr} - movs r4, r3 - mov r8, r0 - mov r7, r1 - mov r6, r2 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - mov r0, #0x3 - mul r1, r8, r0 - ldr r0, _020CDD88 ; =0x040000B0 - add r1, r1, #0x2 - add r5, r0, r1, lsl #0x2 -_020CDD30: - ldr r0, [r5, #0x0] - ands r0, r0, #0x80000000 - bne _020CDD30 - bl OS_DisableInterrupts - ldr r1, _020CDD8C ; =0x040000E0 - mov r2, r8, lsl #0x2 - mov r3, r4, lsr #0x2 - mov r4, r0 - add r12, r2, #0x4000000 - mov r0, r8 - mov r2, r7 - add r1, r1, r8, lsl #0x2 - orr r3, r3, #0x85000000 - str r6, [r12, #0xe0] - bl FUN_01FF84E4 - mov r0, r4 - bl OS_RestoreInterrupts -_020CDD74: - ldr r0, [r5] - ands r0, r0, #0x80000000 - bne _020CDD74 - ldmia sp!, {r4-r8,lr} - bx lr -_020CDD88: .word 0x040000B0 -_020CDD8C: .word 0x040000E0 - - arm_func_start MI_HBlankDmaCopy16 -MI_HBlankDmaCopy16: ; 0x020CDD90 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r6, r1 - mov r7, r0 - mov r4, r3 - mov r1, #0x10000000 - mov r5, r2 - bl MIi_CheckAnotherAutoDMA - mov r0, r7 - mov r1, r6 - mov r2, r4 - mov r3, #0x0 - bl MIi_CheckDma0SourceAddress -_020CDDC4: - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7, lr} - bxeq lr - mov r0, r7 - bl MI_WaitDma - ldr r3, _020CDE00 - mov r0, r7 - mov r1, r6 - mov r2, r5 - orr r3, r3, r4, lsr #0x1 - bl FUN_01FF85F0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr -_020CDE00: .word 0x92600000 - - arm_func_start MI_HBlankDmaCopy32 -MI_HBlankDmaCopy32: ; 0x020CDE04 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r6, r1 - mov r7, r0 - mov r4, r3 - mov r1, #0x10000000 - mov r5, r2 - bl MIi_CheckAnotherAutoDMA - mov r0, r7 - mov r1, r6 - mov r2, r4 - mov r3, #0x0 - bl MIi_CheckDma0SourceAddress -_020CDE38: - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - mov r0, r7 - bl MI_WaitDma - ldr r3, _020CDE74 - mov r0, r7 - mov r1, r6 - mov r2, r5 - orr r3, r3, r4, lsr #0x2 - bl FUN_01FF85F0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr -_020CDE74: .word 0x96600000 - - arm_func_start MIi_DMAFastCallback -MIi_DMAFastCallback: ; 0x020CDE78 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020CDEB4 ; =0x021D37FC - mov r2, #0x0 - ldr r1, [r0, #0x10] - str r2, [r0, #0x0] - cmp r1, #0x0 - addeq sp, sp, #0x4 - ldr r0, [r0, #0x14] - ldmeqia sp!, {lr} - bxeq lr - blx r1 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CDEB4: .word 0x021D37FC - - arm_func_start MI_SendGXCommandAsyncFast -MI_SendGXCommandAsyncFast: ; 0x020CDEB8 - stmdb sp!, {r4-r6,lr} - movs r4, r2 - mov r6, r0 - mov r5, r1 - bne _020CDEE8 - cmp r3, #0x0 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - ldr r0, [sp, #0x10] - blx r3 - ldmia sp!, {r4-r6,lr} - bx lr -_020CDEE8: - ldr r2, _020CDF6C ; =0x021D37FC - ldr r0, [r2, #0x0] - cmp r0, #0x0 - bne _020CDEE8 - ldr r12, [sp, #0x10] - mov lr, #0x1 - mov r0, r6 - mov r1, #0x38000000 - str lr, [r2, #0x0] - str r6, [r2, #0x4] - str r3, [r2, #0x10] - str r12, [r2, #0x14] - bl MIi_CheckAnotherAutoDMA - mov r0, r6 - mov r1, r5 - mov r2, r4 - mov r3, #0x0 - bl MIi_CheckDma0SourceAddress - mov r0, r6 - bl MI_WaitDma - mov r0, r6 - ldr r1, _020CDF70 ; =MIi_DMAFastCallback - mov r2, #0x0 - bl OSi_EnterDmaCallback - mov r0, r6 - mov r1, r5 - ldr r2, _020CDF74 ; =0x04000400 - mov r3, #0x3c00000 - rsb r3, r3, #0x0 - orr r3, r3, r4, lsr #0x2 - bl FUN_01FF85F0 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020CDF6C: .word 0x021D37FC -_020CDF70: .word MIi_DMAFastCallback -_020CDF74: .word 0x04000400 - - arm_func_start MIi_DMACallback -MIi_DMACallback: ; 0x020CDF78 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r0, #0x200000 - bl OS_DisableIrqMask - ldr r2, _020CDFE4 ; =0x04000600 - ldr r0, _020CDFE8 ; =0x021D37FC - ldr r1, [r2, #0x0] - ldr r3, [r0, #0x18] - bic r1, r1, #0xc0000000 - orr r1, r1, r3, lsl #0x1e - str r1, [r2, #0x0] - ldr r1, [r0, #0x1c] - mov r0, #0x200000 - bl OS_SetIrqFunction - ldr r0, _020CDFE8 ; =0x021D37FC - mov r2, #0x0 - ldr r1, [r0, #0x10] - str r2, [r0, #0x0] - cmp r1, #0x0 - addeq sp, sp, #0x4 - ldr r0, [r0, #0x14] - ldmeqia sp!, {lr} - bxeq lr - blx r1 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CDFE4: .word 0x04000600 -_020CDFE8: .word 0x021D37FC - - arm_func_start MIi_FIFOCallback -MIi_FIFOCallback: ; 0x020CDFEC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020CE0A4 ; =0x021D37FC - ldr r4, [r0, #0xc] - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r0, _020CE0A4 ; =0x021D37FC - cmp r4, #0x1d8 - ldr r5, [r0, #0x8] - movcs r4, #0x1d8 - ldr r2, [r0, #0xc] - add r1, r5, r4 - subs r2, r2, r4 - str r2, [r0, #0xc] - str r1, [r0, #0x8] - bne _020CE078 - ldr r0, [r0, #0x4] - ldr r1, _020CE0A8 ; =MIi_DMACallback - mov r2, #0x0 - bl OSi_EnterDmaCallback - mov r0, #0x3bc00000 - rsb r3, r0, #0x0 - ldr r1, _020CE0A4 ; =0x021D37FC - ldr r2, _020CE0AC ; =0x04000400 - ldr r0, [r1, #0x4] - mov r1, r5 - orr r3, r3, r4, lsr #0x2 - bl FUN_01FF85F0 - mov r0, #0x200000 - bl OS_ResetRequestIrqMask - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr -_020CE078: - ldr r3, _020CE0B0 ; =0x84400000 - ldr r0, [r0, #0x4] - ldr r2, _020CE0AC ; =0x04000400 - mov r1, r5 - orr r3, r3, r4, lsr #0x2 - bl FUN_01FF85F0 - mov r0, #0x200000 - bl OS_ResetRequestIrqMask - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020CE0A4: .word 0x021D37FC -_020CE0A8: .word MIi_DMACallback -_020CE0AC: .word 0x04000400 -_020CE0B0: .word 0x84400000 - - arm_func_start MI_SendGXCommandAsync -MI_SendGXCommandAsync: ; 0x020CE0B4 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r0 - cmp r2, #0x0 - bne _020CE0EC - cmp r3, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r0, [sp, #0x10] - blx r3 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr -_020CE0EC: - ldr r0, _020CE1BC ; =0x021D37FC - ldr r0, [r0, #0x0] - cmp r0, #0x0 - bne _020CE0EC - ldr r5, _020CE1C0 ; =0x04000600 -_020CE100: - ldr r0, [r5, #0x0] - and r0, r0, #0x7000000 - mov r0, r0, lsr #0x18 - ands r0, r0, #0x2 - beq _020CE100 - ldr ip, _020CE1BC ; =0x021D37FC - ldr lr, [sp, #0x10] - str r3, [r12, #0x10] - mov r5, #0x1 - mov r0, r4 - mov r3, #0x0 - str r5, [r12, #0x0] - str r4, [r12, #0x4] - str r1, [r12, #0x8] - str r2, [r12, #0xc] - str lr, [r12, #0x14] - bl MIi_CheckDma0SourceAddress - mov r0, r4 - bl MI_WaitDma - bl OS_DisableInterrupts - ldr r1, _020CE1C0 ; =0x04000600 - mov r4, r0 - ldr r0, [r1, #0x0] - ldr r1, _020CE1BC ; =0x021D37FC - and r0, r0, #0xc0000000 - mov r2, r0, lsr #0x1e - mov r0, #0x200000 - str r2, [r1, #0x18] - bl OS_GetIrqFunction - ldr r1, _020CE1BC ; =0x021D37FC - ldr r2, _020CE1C0 ; =0x04000600 - str r0, [r1, #0x1c] - ldr r0, [r2, #0x0] - ldr r1, _020CE1C4 ; =MIi_FIFOCallback - bic r0, r0, #0xc0000000 - orr r3, r0, #0x40000000 - mov r0, #0x200000 - str r3, [r2, #0x0] - bl OS_SetIrqFunction - mov r0, #0x200000 - bl OS_EnableIrqMask - bl MIi_FIFOCallback - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020CE1BC: .word 0x021D37FC -_020CE1C0: .word 0x04000600 -_020CE1C4: .word MIi_FIFOCallback - - arm_func_start MIi_CpuClear16 -MIi_CpuClear16: ; 0x020CE1C8 - mov r3, #0x0 -_020CE1CC: - cmp r3, r2 - strlth r0, [r1, r3] - addlt r3, r3, #0x2 - blt _020CE1CC - bx lr - - arm_func_start MIi_CpuCopy16 -MIi_CpuCopy16: ; 0x020CE1E0 - mov r12, #0x0 -_020CE1E4: - cmp r12, r2 - ldrlth r3, [r0, r12] - strlth r3, [r1, r12] - addlt r12, r12, #0x2 - blt _020CE1E4 - bx lr - - arm_func_start MIi_CpuClear32 -MIi_CpuClear32: ; 0x020CE1FC - add r12, r1, r2 -_020CE200: - cmp r1, r12 - stmltia r1!, {r0} - blt _020CE200 - bx lr - - arm_func_start MIi_CpuCopy32 -MIi_CpuCopy32: ; 0x020CE210 - add r12, r1, r2 -_020CE214: - cmp r1, r12 - ldmltia r0!, {r2} - stmltia r1!, {r2} - blt _020CE214 - bx lr - - arm_func_start MIi_CpuSend32 -MIi_CpuSend32: ; 0x020CE228 - add r12, r0, r2 -_020CE22C: - cmp r0, r12 - ldmltia r0!, {r2} - strlt r2, [r1, #0x0] - blt _020CE22C - bx lr - - arm_func_start MIi_CpuClearFast -MIi_CpuClearFast: ; 0x020CE240 - stmdb sp!, {r4-r9} - add r9, r1, r2 - mov r12, r2, lsr #0x5 - add r12, r1, r12, lsl #0x5 - mov r2, r0 - mov r3, r2 - mov r4, r2 - mov r5, r2 - mov r6, r2 - mov r7, r2 - mov r8, r2 -_020CE26C: - cmp r1, r12 - stmltia r1!, {r0,r2-r8} - blt _020CE26C -_020CE278: - cmp r1, r9 - stmltia r1!, {r0} - blt _020CE278 - ldmia sp!, {r4-r9} - bx lr - - arm_func_start MIi_CpuCopyFast -MIi_CpuCopyFast: ; 0x020CE28C - stmdb sp!, {r4-r10} - add r10, r1, r2 - mov r12, r2, lsr #0x5 - add r12, r1, r12, lsl #0x5 -_020CE29C: - cmp r1, r12 - ldmltia r0!, {r2-r9} - stmltia r1!, {r2-r9} - blt _020CE29C -_020CE2AC: - cmp r1, r10 - ldmltia r0!, {r2} - stmltia r1!, {r2} - blt _020CE2AC - ldmia sp!, {r4-r10} - bx lr - - arm_func_start FUN_020CE2C4 -FUN_020CE2C4: - ldmia r0!, {r2, r3, ip} - stmia r1!, {r2, r3, ip} - ldmia r0!, {r2, r3, ip} - stmia r1!, {r2, r3, ip} - ldmia r0!, {r2, r3} - stmia r1!, {r2, r3} - bx lr - - arm_func_start MI_Copy36B -MI_Copy36B: ; 0x020CE2E0 - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - bx lr - - arm_func_start MI_Copy48B -MI_Copy48B: ; 0x020CE2FC - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - bx lr - - arm_func_start MI_Copy64B -MI_Copy64B: ; 0x020CE320 - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0, {r0,r2-r3,r12} - stmia r1!, {r0,r2-r3,r12} - bx lr - - arm_func_start MI_CpuFill8 -MI_CpuFill8: ; 0x020CE34C - cmp r2, #0x0 - bxeq lr - tst r0, #0x1 - beq _020CE378 - ldrh r12, [r0, #-0x1] - and r12, r12, #0xff - orr r3, r12, r1, lsl #0x8 - strh r3, [r0, #-0x1] - add r0, r0, #0x1 - subs r2, r2, #0x1 - bxeq lr -_020CE378: - cmp r2, #0x2 - blo _020CE3C0 - orr r1, r1, r1, lsl #0x8 - tst r0, #0x2 - beq _020CE398 - strh r1, [r0], #0x2 - subs r2, r2, #0x2 - bxeq lr -_020CE398: - orr r1, r1, r1, lsl #0x10 - bics r3, r2, #0x3 - beq _020CE3B8 - sub r2, r2, r3 - add r12, r3, r0 -_020CE3AC: - str r1, [r0], #0x4 - cmp r0, r12 - blo _020CE3AC -_020CE3B8: - tst r2, #0x2 - strneh r1, [r0], #0x2 -_020CE3C0: - tst r2, #0x1 - bxeq lr - ldrh r3, [r0, #0x0] - and r3, r3, #0xff00 - and r1, r1, #0xff - orr r1, r1, r3 - strh r1, [r0, #0x0] - bx lr - - arm_func_start MI_CpuCopy8 -MI_CpuCopy8: - cmp r2, #0x0 - bxeq lr - tst r1, #0x1 - beq _020CE420 - ldrh r12, [r1, #-0x1] - and r12, r12, #0xff - tst r0, #0x1 - ldrneh r3, [r0, #-0x1] - movne r3, r3, lsr #0x8 - ldreqh r3, [r0, #0x0] - orr r3, r12, r3, lsl #0x8 - strh r3, [r1, #-0x1] - add r0, r0, #0x1 - add r1, r1, #0x1 - subs r2, r2, #0x1 - bxeq lr -_020CE420: - eor r12, r1, r0 - tst r12, #0x1 - beq _020CE474 - bic r0, r0, #0x1 - ldrh r12, [r0], #0x2 - mov r3, r12, lsr #0x8 - subs r2, r2, #0x2 - blo _020CE458 -_020CE440: - ldrh r12, [r0], #0x2 - orr r12, r3, r12, lsl #0x8 - strh r12, [r1], #0x2 - mov r3, r12, lsr #0x10 - subs r2, r2, #0x2 - bhs _020CE440 -_020CE458: - tst r2, #0x1 - bxeq lr - ldrh r12, [r1, #0x0] - and r12, r12, #0xff00 - orr r12, r12, r3 - strh r12, [r1, #0x0] - bx lr -_020CE474: - tst r12, #0x2 - beq _020CE4A0 - bics r3, r2, #0x1 - beq _020CE4EC - sub r2, r2, r3 - add r12, r3, r1 -_020CE48C: - ldrh r3, [r0], #0x2 - strh r3, [r1], #0x2 - cmp r1, r12 - blo _020CE48C - b _020CE4EC -_020CE4A0: - cmp r2, #0x2 - blo _020CE4EC - tst r1, #0x2 - beq _020CE4C0 - ldrh r3, [r0], #0x2 - strh r3, [r1], #0x2 - subs r2, r2, #0x2 - bxeq lr -_020CE4C0: - bics r3, r2, #0x3 - beq _020CE4E0 - sub r2, r2, r3 - add r12, r3, r1 -_020CE4D0: - ldr r3, [r0], #0x4 - str r3, [r1], #0x4 - cmp r1, r12 - blo _020CE4D0 -_020CE4E0: - tst r2, #0x2 - ldrneh r3, [r0], #0x2 - strneh r3, [r1], #0x2 -_020CE4EC: - tst r2, #0x1 - bxeq lr - ldrh r2, [r1, #0x0] - ldrh r0, [r0, #0x0] - and r2, r2, #0xff00 - and r0, r0, #0xff - orr r0, r2, r0 - strh r0, [r1, #0x0] - bx lr - - thumb_func_start MI_Zero36B -MI_Zero36B: ; 0x020CE510 - mov r1, #0x0 - mov r2, #0x0 - mov r3, #0x0 - stmia r0!, {r1-r3} - stmia r0!, {r1-r3} - stmia r0!, {r1-r3} - bx lr - - arm_func_start MI_SwapWord -MI_SwapWord: ; 0x020CE520 - swp r0, r0, [r1] - bx lr - - arm_func_start MI_UncompressLZ8 -MI_UncompressLZ8: ; 0x020CE528 - stmdb sp!, {r4-r6,lr} - ldr r5, [r0], #0x4 - mov r2, r5, lsr #0x8 -_020CE534: - cmp r2, #0x0 - ble _020CE5B4 - ldrb lr, [r0], #0x1 - mov r4, #0x8 -_020CE544: - subs r4, r4, #0x1 - blt _020CE534 - tst lr, #0x80 - bne _020CE568 - ldrb r6, [r0], #0x1 - .word 0xE1416096 - add r1, r1, #0x1 - sub r2, r2, #0x1 - b _020CE5A4 -_020CE568: - ldrb r5, [r0, #0x0] - mov r6, #0x3 - add r3, r6, r5, asr #0x4 - ldrb r6, [r0], #0x1 - and r5, r6, #0xf - mov r12, r5, lsl #0x8 - ldrb r6, [r0], #0x1 - orr r5, r6, r12 - add r12, r5, #0x1 - sub r2, r2, r3 -_020CE590: - ldrb r5, [r1, -r12] - .word 0xE1415095 - add r1, r1, #0x1 - subs r3, r3, #0x1 - bgt _020CE590 -_020CE5A4: - cmp r2, #0x0 - movgt lr, lr, lsl #0x1 - bgt _020CE544 - b _020CE534 -_020CE5B4: - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start MIi_CardDmaCopy32 -MIi_CardDmaCopy32: ; 0x020CE5BC - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r1 - mov r6, r0 - mov r7, r3 - mvn r1, #0x0 - mov r4, r2 - bl MIi_CheckAnotherAutoDMA - mov r0, r6 - mov r1, r5 - mov r2, r7 - mov r3, #0x1000000 - bl MIi_CheckDma0SourceAddress -_020CE5F0: - cmp r7, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7, lr} - bxeq lr - mov r0, #0x3 - mul r1, r6, r0 - ldr r0, _020CE640 - add r1, r1, #0x2 - add r1, r0, r1, lsl #0x2 -_020CE614: - ldr r0, [r1] - ands r0, r0, #0x80000000 - bne _020CE614 - ldr r3, _020CE644 - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl FUN_01FF85F0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7, lr} - bx lr -_020CE640: .word 0x040000B0 -_020CE644: .word 0xAf000001 - - arm_func_start MI_Init -MI_Init: ; 0x020CE648 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r0, #0x3 - bl MI_SetWramBank - mov r0, #0x0 - bl MI_StopDma - add sp, sp, #0x4 - ldmfd sp!, {lr} - bx lr - - arm_func_start PushCommand_impl -PushCommand_impl: ; 0x020CE66C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r0, #0x1 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl SND_AllocCommand -_020CE68C: - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7, lr} - bxeq lr - str r7, [r0, #0x4] - str r6, [r0, #0x8] - str r5, [r0, #0xc] - ldr r1, [sp, #0x18] - str r4, [r0, #0x10] - str r1, [r0, #0x14] - bl SND_PushCommand - add sp, sp, #0x4 - ldmia sp!, {r4-r7, lr} - bx lr - - arm_func_start SNDi_SetTrackParam -SNDi_SetTrackParam: ; 0x020CE6C4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r12, [sp, #0x8] - mov lr, r2 - str r3, [sp, #0x0] - mov r2, r1 - orr r1, r0, r12, lsl #0x18 - mov r3, lr - mov r0, #0x7 - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start FUN_020CE6F8 -FUN_020CE6F8: ; 0x020CE6F8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r12, r2 - str r3, [sp, #0x0] - mov r1, r0 - mov r2, lr - mov r3, r12 - mov r0, #0x6 - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_ResetMasterPan -SND_ResetMasterPan: ; 0x020CE72C - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, #0x0 - mov r3, r2 - mov r0, #0x18 - mvn r1, #0x0 - str r2, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetMasterPan -SND_SetMasterPan: ; 0x020CE758 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, #0x0 - mov r1, r0 - mov r3, r2 - mov r0, #0x18 - str r2, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetOutputSelector -SND_SetOutputSelector: ; 0x020CE784 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r12, r2 - str r3, [sp, #0x0] - mov r1, r0 - mov r2, lr - mov r3, r12 - mov r0, #0x19 - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_InvalidateWaveData -SND_InvalidateWaveData: ; 0x020CE7B8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r3, #0x0 - mov r1, r0 - mov r0, #0x20 - str r3, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_InvalidateBankData -SND_InvalidateBankData: ; 0x020CE7E4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r3, #0x0 - mov r1, r0 - mov r0, #0x1f - str r3, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_InvalidateSeqData -SND_InvalidateSeqData: ; 0x020CE810 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r3, #0x0 - mov r1, r0 - mov r0, #0x1e - str r3, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetupChannelPcm -SND_SetupChannelPcm: ; 0x020CE83C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r12, [sp, #0x18] - mov r3, r3, lsl #0x1a - orr r4, r3, r1, lsl #0x18 - ldr r5, [sp, #0x24] - mov r3, r12, lsl #0x18 - ldr r1, [sp, #0x1c] - ldr r12, [sp, #0x10] - orr r4, r4, r5, lsl #0x10 - orr r4, r12, r4 - ldr lr, [sp, #0x20] - orr r3, r3, r1, lsl #0x16 - ldr r12, [sp, #0x14] - orr r1, r0, lr, lsl #0x10 - orr r3, r12, r3 - mov r0, #0xe - str r4, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start SND_SetChannelPan -SND_SetChannelPan: ; 0x020CE894 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r3, #0x0 - mov r1, r0 - mov r0, #0x15 - str r3, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetChannelVolume -SND_SetChannelVolume: ; 0x020CE8C0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r3, r2 - mov r12, #0x0 - mov r1, r0 - mov r2, lr - mov r0, #0x14 - str r12, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetChannelTimer -SND_SetChannelTimer: ; 0x020CE8F4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r3, #0x0 - mov r1, r0 - mov r0, #0x13 - str r3, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_UnlockChannel -SND_UnlockChannel: ; 0x020CE920 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r3, #0x0 - mov r1, r0 - mov r0, #0x1b - str r3, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_LockChannel -SND_LockChannel: ; 0x020CE94C - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r3, #0x0 - mov r1, r0 - mov r0, #0x1a - str r3, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetupAlarm -SND_SetupAlarm: ; 0x020CE978 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x8 - mov r4, r2 - mov r5, r1 - ldr r2, [sp, #0x18] - mov r6, r0 - mov r1, r3 - bl SNDi_SetAlarmHandler -_020CE998: - str r0, [sp] - mov r1, r6 - mov r2, r5 - mov r3, r4 - mov r0, #0x12 - bl PushCommand_impl - add sp, sp, #0x8 - ldmia sp!, {r4-r6, lr} - bx lr - - arm_func_start SND_SetupCapture -SND_SetupCapture: ; 0x020CE9BC - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r0, r0, lsl #0x1f - orr r0, r0, r1, lsl #0x1e - ldr r12, [sp, #0x8] - mov r1, r2 - orr r0, r0, r12, lsl #0x1d - ldr r2, [sp, #0xc] - mov lr, #0x0 - orr r0, r0, r2, lsl #0x1c - ldr r12, [sp, #0x10] - mov r2, r3 - orr r3, r0, r12, lsl #0x1b - mov r0, #0x11 - str lr, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_StopTimer -SND_StopTimer: ; 0x020CEA08 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - mov r7, r2 - mov r9, r0 - mov r8, r1 - mov r6, r3 - mov r4, r7 - mov r5, #0x0 - b _020CEA44 -_020CEA2C: - ands r0, r4, #0x1 - beq _020CEA3C - mov r0, r5 - bl SNDi_IncAlarmId -_020CEA3C: - add r5, r5, #0x1 - mov r4, r4, lsr #0x1 -_020CEA44: - cmp r5, #0x8 - bge _020CEA54 - cmp r4, #0x0 - bne _020CEA2C -_020CEA54: - mov r1, r9 - mov r2, r8 - mov r3, r7 - mov r0, #0xd - str r6, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {r4-r9,lr} - bx lr - - arm_func_start SND_StartTimer -SND_StartTimer: ; 0x020CEA78 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r12, r2 - str r3, [sp, #0x0] - mov r1, r0 - mov r2, lr - mov r3, r12 - mov r0, #0xc - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetTrackAllocatableChannel -SND_SetTrackAllocatableChannel: ; 0x020CEAAC - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r3, r2 - mov r12, #0x0 - mov r1, r0 - mov r2, lr - mov r0, #0x9 - str r12, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetTrackPan -SND_SetTrackPan: ; 0x020CEAE0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r3, r2 - mov r12, #0x1 - mov r2, #0x9 - str r12, [sp, #0x0] - bl SNDi_SetTrackParam - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetTrackPitch -SND_SetTrackPitch: ; 0x020CEB08 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r3, r2 - mov r12, #0x2 - mov r2, #0xc - str r12, [sp, #0x0] - bl SNDi_SetTrackParam - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetPlayerChannelPriority -SND_SetPlayerChannelPriority: ; 0x020CEB30 - ldr ip, _020CEB44 ; =FUN_020CE6F8 - mov r2, r1 - mov r1, #0x4 - mov r3, #0x1 - bx r12 - .balign 4 -_020CEB44: .word FUN_020CE6F8 - - arm_func_start SND_SetPlayerVolume -SND_SetPlayerVolume: ; 0x020CEB48 - ldr ip, _020CEB5C ; =FUN_020CE6F8 - mov r2, r1 - mov r1, #0x6 - mov r3, #0x2 - bx r12 - .balign 4 -_020CEB5C: .word FUN_020CE6F8 - - arm_func_start SND_PauseSeq -SND_PauseSeq: ; 0x020CEB60 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r3, #0x0 - mov r1, r0 - mov r0, #0x4 - str r3, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_StartPreparedSeq -SND_StartPreparedSeq: ; 0x020CEB8C - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, #0x0 - mov r1, r0 - mov r3, r2 - mov r0, #0x3 - str r2, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_PrepareSeq -SND_PrepareSeq: ; 0x020CEBB8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r12, r2 - str r3, [sp, #0x0] - mov r1, r0 - mov r2, lr - mov r3, r12 - mov r0, #0x2 - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_StopSeq -SND_StopSeq: ; 0x020CEBEC - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, #0x0 - mov r1, r0 - mov r3, r2 - mov r0, #0x1 - str r2, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SNDi_UnlockMutex -SNDi_UnlockMutex: ; 0x020CEC18 - ldr ip, _020CEC24 ; =OS_UnlockMutex - ldr r0, _020CEC28 ; =0x021D3820 - bx r12 - .balign 4 -_020CEC24: .word OS_UnlockMutex -_020CEC28: .word 0x021D3820 - - arm_func_start SNDi_LockMutex -SNDi_LockMutex: ; 0x020CEC2C - ldr ip, _020CEC38 ; =OS_LockMutex - ldr r0, _020CEC3C ; =0x021D3820 - bx r12 - .balign 4 -_020CEC38: .word OS_LockMutex -_020CEC3C: .word 0x021D3820 - - arm_func_start SND_Init -SND_Init: ; 0x020CEC40 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020CEC84 ; =0x021D381C - ldr r0, [r1, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r0, _020CEC88 ; =0x021D3820 - mov r2, #0x1 - str r2, [r1, #0x0] - bl OS_InitMutex - bl SND_CommandInit - bl SND_AlarmInit - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CEC84: .word 0x021D381C -_020CEC88: .word 0x021D3820 - - arm_func_start IsCommandAvailable -IsCommandAvailable: - stmdb sp!, {r4,lr} - bl OS_IsRunOnEmulator -_020CEC94: - cmp r0, #0x0 - moveq r0, #0x1 - ldmeqia sp!, {r4, lr} - bxeq lr - bl OS_DisableInterrupts - ldr r1, _020CECD0 - mov r2, #0x10 - str r2, [r1] - ldr r4, [r1] - bl OS_RestoreInterrupts - cmp r4, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - ldmia sp!, {r4, lr} - bx lr -_020CECD0: .word 0x04FFF200 - - arm_func_start AllocCommand -AllocCommand: ; 0x020CECD4 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020CED24 ; =0x021D3838 - ldr r4, [r1, #0x0] - cmp r4, #0x0 - bne _020CECFC - bl OS_RestoreInterrupts -_020CECF0: - mov r0, #0x0 - ldmia sp!, {r4, lr} - bx lr -_020CECFC: - ldr r2, [r4, #0x0] - str r2, [r1, #0x0] - cmp r2, #0x0 - ldreq r1, _020CED28 ; =0x021D3848 - moveq r2, #0x0 - streq r2, [r1, #0x0] - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CED24: .word 0x021D3838 -_020CED28: .word 0x021D3848 - - arm_func_start RequestCommandProc -RequestCommandProc: ; 0x020CED2C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, #0x7 - mov r4, #0x0 -_020CED3C: - mov r0, r5 - mov r1, r4 - mov r2, r4 - bl PXI_SendWordByFifo -_020CED4C: - cmp r0, #0 - blt _020CED3C - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start InitPXI -InitPXI: ; 0x020CED60 - stmdb sp!, {r4-r6,lr} - ldr r1, _020CEDC8 ; =PxiFifoCallback - mov r0, #0x7 - bl PXI_SetFifoRecvCallback - bl IsCommandAvailable -_020CED74: - cmp r0, #0x0 - ldmeqia sp!, {r4-r6, lr} - bxeq lr - mov r0, #0x7 - mov r1, #0x1 - bl PXI_IsCallbackReady - cmp r0, #0x0 - ldmneia sp!, {r4-r6, lr} - bxne lr - mov r6, #0x64 - mov r5, #0x7 - mov r4, #0x1 -_020CEDA4: - mov r0, r6 - bl OS_SpinWait - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady - cmp r0, #0x0 - beq _020CEDA4 - ldmia sp!, {r4-r6, lr} - bx lr -_020CEDC8: .word PxiFifoCallback - - arm_func_start PxiFifoCallback -PxiFifoCallback: ; 0x020CEDCC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r1 - bl OS_DisableInterrupts - mov r4, r0 - mov r0, r5 - bl SNDi_CallAlarmHandler - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start SND_CountWaitingCommand -SND_CountWaitingCommand: ; 0x020CEDFC - stmdb sp!, {r4,lr} - bl SND_CountFreeCommand - mov r4, r0 - bl SND_CountReservedCommand - rsb r1, r4, #0x100 - sub r0, r1, r0 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start SND_CountReservedCommand -SND_CountReservedCommand: ; 0x020CEE1C - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020CEE58 ; =0x021D3840 - mov r4, #0x0 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - beq _020CEE48 -_020CEE38: - ldr r1, [r1, #0x0] - add r4, r4, #0x1 - cmp r1, #0x0 - bne _020CEE38 -_020CEE48: - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CEE58: .word 0x021D3840 - - arm_func_start SND_CountFreeCommand -SND_CountFreeCommand: ; 0x020CEE5C - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020CEE98 ; =0x021D3838 - mov r4, #0x0 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - beq _020CEE88 -_020CEE78: - ldr r1, [r1, #0x0] - add r4, r4, #0x1 - cmp r1, #0x0 - bne _020CEE78 -_020CEE88: - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CEE98: .word 0x021D3838 - - arm_func_start SND_IsFinishedCommandTag -SND_IsFinishedCommandTag: - stmdb sp!, {r4,lr} - mov r4, r0 - bl OS_DisableInterrupts - ldr r1, _020CEEEC ; =0x021D383C - ldr r1, [r1, #0x0] - cmp r4, r1 - bls _020CEECC - sub r1, r4, r1 - cmp r1, #0x80000000 - movcc r4, #0x0 - movcs r4, #0x1 - b _020CEEDC -_020CEECC: - sub r1, r1, r4 - cmp r1, #0x80000000 - movcc r4, #0x1 - movcs r4, #0x0 -_020CEEDC: - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CEEEC: .word 0x021D383C - - arm_func_start SND_GetCurrentCommandTag -SND_GetCurrentCommandTag: ; 0x020CEEF0 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020CEF24 ; =0x021D3840 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - ldreq r1, _020CEF28 ; =0x021D383C - ldreq r4, [r1, #0x0] - ldrne r1, _020CEF2C ; =0x021D3858 - ldrne r4, [r1, #0x0] - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CEF24: .word 0x021D3840 -_020CEF28: .word 0x021D383C -_020CEF2C: .word 0x021D3858 - - arm_func_start SND_WaitForCommandProc -SND_WaitForCommandProc: ; 0x020CEF30 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl SND_IsFinishedCommandTag -_020CEF40: - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5, lr} - bxne lr - mov r4, #0x0 -_020CEF54: - mov r0, r4 - bl SND_RecvCommandReply - cmp r0, #0x0 - bne _020CEF54 - mov r0, r5 - bl SND_IsFinishedCommandTag - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5, lr} - bxne lr - bl RequestCommandProc - mov r0, r5 - bl SND_IsFinishedCommandTag - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5, lr} - bxne lr - mov r4, #0x1 -_020CEF9C: - mov r0, r4 - bl SND_RecvCommandReply - mov r0, r5 - bl SND_IsFinishedCommandTag - cmp r0, #0x0 - beq _020CEF9C - add sp, sp, #0x4 - ldmia sp!, {r4-r5, lr} - bx lr - - arm_func_start SND_FlushCommand -SND_FlushCommand: ; 0x020CEFC0 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, _020CF164 ; =0x021D3840 - mov r4, r0 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - bne _020CEFF8 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r9,lr} - bx lr -_020CEFF8: - ldr r1, _020CF168 ; =0x021D3854 - ldr r1, [r1, #0x0] - cmp r1, #0x8 - blt _020CF03C - ands r1, r5, #0x1 - bne _020CF024 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r9,lr} - bx lr -_020CF024: - mov r0, #0x1 - bl SND_RecvCommandReply - ldr r0, _020CF168 ; =0x021D3854 - ldr r0, [r0, #0x0] - cmp r0, #0x8 - bge _020CF024 -_020CF03C: - ldr r0, _020CF16C ; =0x021D3B00 - mov r1, #0x1800 - bl DC_FlushRange - ldr r1, _020CF164 ; =0x021D3840 - mov r0, #0x7 - ldr r1, [r1, #0x0] - mov r2, #0x0 - bl PXI_SendWordByFifo -_020CF05C: - cmp r0, #0x0 - bge _020CF0E0 - ands r0, r5, #0x1 - bne _020CF084 - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r9, lr} - bx lr -_020CF084: - ldr r1, _020CF164 - mov r0, #0x7 - ldr r1, [r1] - mov r2, #0x0 - bl PXI_SendWordByFifo - cmp r0, #0x0 - bge _020CF0E0 - ldr r6, _020CF164 - mov r9, #0x64 - mov r8, #0x7 - mov r7, #0x0 -_020CF0B0: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, r9 - bl OS_SpinWait - bl OS_DisableInterrupts - mov r4, r0 - mov r0, r8 - ldr r1, [r6] - mov r2, r7 - bl PXI_SendWordByFifo - cmp r0, #0x0 - blt _020CF0B0 -_020CF0E0: - ands r0, r5, #0x2 - beq _020CF0EC - bl RequestCommandProc -_020CF0EC: - ldr r0, _020CF170 - ldr r1, _020CF164 - ldr r3, [r0] - ldr r5, [r1] - add r1, r3, #0x1 - ldr r2, _020CF174 - str r1, [r0] - str r5, [r2, r3, lsl #2] - cmp r1, #0x8 - movgt r1, #0x0 - ldr r2, _020CF168 - strgt r1, [r0] - ldr r1, _020CF178 - ldr r3, [r2] - ldr r0, [r1] - add ip, r3, #0x1 - add r6, r0, #0x1 - ldr r5, _020CF164 - mov lr, #0x0 - ldr r3, _020CF17C - mov r0, r4 - str lr, [r5] - str lr, [r3] - str ip, [r2] - str r6, [r1] - bl OS_RestoreInterrupts - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {r4-r9, lr} - bx lr -_020CF164: .word 0x021D3840 -_020CF168: .word 0x021D3854 -_020CF16C: .word 0x021D3B00 -_020CF170: .word 0x021D3850 -_020CF174: .word 0x021D385C -_020CF178: .word 0x021D3858 -_020CF17C: .word 0x021D3844 - - arm_func_start SND_PushCommand -SND_PushCommand: ; 0x020CF180 - stmdb sp!, {r4,lr} - mov r4, r0 - bl OS_DisableInterrupts - ldr r2, _020CF1C0 ; =0x021D3844 - ldr r1, [r2, #0x0] - cmp r1, #0x0 - ldreq r1, _020CF1C4 ; =0x021D3840 - streq r4, [r2, #0x0] - streq r4, [r1, #0x0] - strne r4, [r1, #0x0] - strne r4, [r2, #0x0] - mov r1, #0x0 - str r1, [r4, #0x0] - bl OS_RestoreInterrupts - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CF1C0: .word 0x021D3844 -_020CF1C4: .word 0x021D3840 - - arm_func_start SND_AllocCommand -SND_AllocCommand: - stmdb sp!, {r4,lr} - mov r4, r0 - bl IsCommandAvailable -_020CF1D4: - cmp r0, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - bl AllocCommand - cmp r0, #0x0 - ldmneia sp!, {r4,lr} - bxne lr - ands r0, r4, #0x1 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - bl SND_CountWaitingCommand - cmp r0, #0x0 - ble _020CF238 - mov r4, #0x0 -_020CF214: - mov r0, r4 - bl SND_RecvCommandReply - cmp r0, #0x0 - bne _020CF214 - bl AllocCommand - cmp r0, #0x0 - beq _020CF240 - ldmia sp!, {r4,lr} - bx lr -_020CF238: - mov r0, #0x1 - bl SND_FlushCommand -_020CF240: - bl RequestCommandProc - mov r4, #0x1 -_020CF248: - mov r0, r4 - bl SND_RecvCommandReply - bl AllocCommand - cmp r0, #0x0 - beq _020CF248 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start SND_RecvCommandReply -SND_RecvCommandReply: ; 0x020CF264 - stmdb sp!, {r4-r6,lr} - mov r4, r0 - bl OS_DisableInterrupts - mov r5, r0 - ands r0, r4, #0x1 - beq _020CF2C0 - bl SNDi_GetFinishedCommandTag - ldr r4, _020CF380 ; =0x021D383C - ldr r1, [r4, #0x0] - cmp r1, r0 - bne _020CF2E8 - mov r6, #0x64 -_020CF294: - mov r0, r5 - bl OS_RestoreInterrupts - mov r0, r6 - bl OS_SpinWait - bl OS_DisableInterrupts - mov r5, r0 - bl SNDi_GetFinishedCommandTag - ldr r1, [r4, #0x0] - cmp r1, r0 - beq _020CF294 - b _020CF2E8 -_020CF2C0: - bl SNDi_GetFinishedCommandTag - ldr r1, _020CF380 ; =0x021D383C - ldr r1, [r1, #0x0] - cmp r1, r0 - bne _020CF2E8 - mov r0, r5 - bl OS_RestoreInterrupts -_020CF2DC: - mov r0, #0x0 - ldmia sp!, {r4-r6, lr} - bx lr -_020CF2E8: - ldr r0, _020CF384 ; =0x021D384C - ldr r2, _020CF388 ; =0x021D385C - ldr r3, [r0, #0x0] - add r1, r3, #0x1 - ldr r4, [r2, r3, lsl #0x2] - str r1, [r0, #0x0] - cmp r1, #0x8 - movgt r1, #0x0 - strgt r1, [r0, #0x0] - ldr r0, [r4, #0x0] - mov r1, r4 - cmp r0, #0x0 - beq _020CF32C -_020CF31C: - ldr r1, [r1, #0x0] - ldr r0, [r1, #0x0] - cmp r0, #0x0 - bne _020CF31C -_020CF32C: - ldr r0, _020CF38C ; =0x021D3848 - ldr r3, _020CF390 ; =0x021D3854 - ldr r0, [r0, #0x0] - ldr r2, _020CF380 ; =0x021D383C - cmp r0, #0x0 - strne r4, [r0, #0x0] - ldreq r0, _020CF394 ; =0x021D3838 - ldr lr, [r3, #0x0] - streq r4, [r0, #0x0] - ldr ip, _020CF38C ; =0x021D3848 - sub r6, lr, #0x1 - ldr r0, [r2, #0x0] - str r1, [r12, #0x0] - add lr, r0, #0x1 - mov r0, r5 - str r6, [r3, #0x0] - str lr, [r2, #0x0] - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020CF380: .word 0x021D383C -_020CF384: .word 0x021D384C -_020CF388: .word 0x021D385C -_020CF38C: .word 0x021D3848 -_020CF390: .word 0x021D3854 -_020CF394: .word 0x021D3838 - - arm_func_start SND_CommandInit -SND_CommandInit: ; 0x020CF398 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - bl InitPXI - ldr r3, _020CF478 ; =0x021D3B00 - ldr r0, _020CF47C ; =0x021D3838 - mov r4, #0x0 - str r3, [r0, #0x0] - mov r1, r3 - mov r0, #0x18 -_020CF3BC: - add r4, r4, #0x1 - mla r2, r4, r0, r1 - cmp r4, #0xff - str r2, [r3], #0x18 - blt _020CF3BC - ldr r7, _020CF480 ; =0x021D4B00 - mov r10, #0x0 - ldr r5, _020CF484 ; =0x021D3840 - ldr r4, _020CF488 ; =0x021D3844 - ldr lr, _020CF48C ; =0x021D3854 - ldr ip, _020CF490 ; =0x021D384C - ldr r3, _020CF494 ; =0x021D3850 - ldr r1, _020CF498 ; =0x021D383C - ldr sb, _020CF49C ; =0x021D52E8 - ldr r6, _020CF4A0 ; =0x021D3848 - ldr r2, _020CF4A4 ; =0x021D3858 - mov r8, #0x1 - ldr r0, _020CF4A8 ; =0x021D3880 - ldr fp, _020CF4AC ; =0x021D5360 - str r9, [r6, #0x0] - str r10, [r7, #0x7e8] - str r10, [r5, #0x0] - str r10, [r4, #0x0] - str r10, [lr, #0x0] - str r10, [r12, #0x0] - str r10, [r3, #0x0] - str r8, [r2, #0x0] - str r10, [r1, #0x0] - str r0, [r11, #0x0] - bl SNDi_InitSharedWork - mov r0, r8 - bl SND_AllocCommand -_020CF43C: - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r11, lr} - bxeq lr - mov r2, #0x1D - mov r1, fp - str r2, [r0, #0x4] - ldr r1, [r1] - str r1, [r0, #0x8] - bl SND_PushCommand - mov r0, r8 - bl SND_FlushCommand - add sp, sp, #0x4 - ldmia sp!, {r4-r11, lr} - bx lr -_020CF478: .word 0x021D3B00 -_020CF47C: .word 0x021D3838 -_020CF480: .word 0x021D4B00 -_020CF484: .word 0x021D3840 -_020CF488: .word 0x021D3844 -_020CF48C: .word 0x021D3854 -_020CF490: .word 0x021D384C -_020CF494: .word 0x021D3850 -_020CF498: .word 0x021D383C -_020CF49C: .word 0x021D52E8 -_020CF4A0: .word 0x021D3848 -_020CF4A4: .word 0x021D3858 -_020CF4A8: .word 0x021D3880 -_020CF4AC: .word 0x021D5360 - - arm_func_start SNDi_CallAlarmHandler -SNDi_CallAlarmHandler: ; 0x020CF4B0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r3, _020CF50C ; =0x021D5300 - and r2, r0, #0xff - mov r1, #0xc - mla r3, r2, r1, r3 - mov r1, r0, asr #0x8 - ldrb r0, [r3, #0x8] - and r1, r1, #0xff - cmp r1, r0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r1, [r3, #0x0] - cmp r1, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - ldr r0, [r3, #0x4] - blx r1 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CF50C: .word 0x021D5300 - - arm_func_start SNDi_SetAlarmHandler -SNDi_SetAlarmHandler: - mov r3, #0xc - mul r3, r0, r3 - ldr r0, _020CF53C ; =0x021D5300 - str r1, [r0, r3] - add r1, r0, r3 - str r2, [r1, #0x4] - ldrb r0, [r1, #0x8] - add r0, r0, #0x1 - strb r0, [r1, #0x8] - ldrb r0, [r1, #0x8] - bx lr - .balign 4 -_020CF53C: .word 0x021D5300 - - arm_func_start SNDi_IncAlarmId -SNDi_IncAlarmId: ; 0x020CF540 - ldr r2, _020CF55C ; =0x021D5300 - mov r1, #0xc - mla r1, r0, r1, r2 - ldrb r0, [r1, #0x8] - add r0, r0, #0x1 - strb r0, [r1, #0x8] - bx lr - .balign 4 -_020CF55C: .word 0x021D5300 - - arm_func_start SND_AlarmInit -SND_AlarmInit: ; 0x020CF560 - ldr r1, _020CF58C ; =0x021D5300 - mov r2, #0x0 - mov r0, r2 -_020CF56C: - str r0, [r1, #0x0] - str r0, [r1, #0x4] - add r2, r2, #0x1 - strb r0, [r1, #0x8] - cmp r2, #0x8 - add r1, r1, #0xc - blt _020CF56C - bx lr - .balign 4 -_020CF58C: .word 0x021D5300 - - arm_func_start SNDi_InitSharedWork -SNDi_InitSharedWork: ; 0x020CF590 - stmdb sp!, {r4,lr} - mov r4, #0x0 - str r4, [r0, #0x4] - strh r4, [r0, #0x8] - strh r4, [r0, #0xa] - mov r12, r0 - str r4, [r0, #0x0] - mov r3, r4 - mvn r2, #0x0 -_020CF5B4: - mov lr, r3 - str r3, [r12, #0x40] -_020CF5BC: - add r1, r12, lr, lsl #0x1 - add lr, lr, #0x1 - strh r2, [r1, #0x20] - cmp lr, #0x10 - blt _020CF5BC - add r4, r4, #0x1 - cmp r4, #0x10 - add r12, r12, #0x24 - blt _020CF5B4 - mov r3, #0x0 - mvn r2, #0x0 -_020CF5E8: - add r1, r0, r3, lsl #0x1 - add r1, r1, #0x200 - add r3, r3, #0x1 - strh r2, [r1, #0x60] - cmp r3, #0x10 - blt _020CF5E8 - mov r1, #0x280 - bl DC_FlushRange - ldmia sp!, {r4,lr} - bx lr - - arm_func_start SNDi_GetFinishedCommandTag -SNDi_GetFinishedCommandTag: ; 0x020CF610 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020CF640 ; =0x021D5360 - mov r1, #0x4 - ldr r0, [r0, #0x0] - bl DC_InvalidateRange - ldr r0, _020CF640 ; =0x021D5360 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CF640: .word 0x021D5360 - - arm_func_start SND_GetPlayerTickCounter -SND_GetPlayerTickCounter: ; 0x020CF644 - stmdb sp!, {r4,lr} - mov r1, #0x24 - mul r4, r0, r1 - ldr r0, _020CF680 ; =0x021D5360 - mov r1, #0x4 - ldr r0, [r0, #0x0] - add r0, r0, #0x40 - add r0, r0, r4 - bl DC_InvalidateRange - ldr r0, _020CF680 ; =0x021D5360 - ldr r0, [r0, #0x0] - add r0, r0, r4 - ldr r0, [r0, #0x40] - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CF680: .word 0x021D5360 - - arm_func_start SND_GetChannelStatus -SND_GetChannelStatus: ; 0x020CF684 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020CF6B8 ; =0x021D5360 - mov r1, #0x2 - ldr r0, [r0, #0x0] - add r0, r0, #0x8 - bl DC_InvalidateRange - ldr r0, _020CF6B8 ; =0x021D5360 - ldr r0, [r0, #0x0] - ldrh r0, [r0, #0x8] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CF6B8: .word 0x021D5360 - - arm_func_start SND_GetPlayerStatus -SND_GetPlayerStatus: ; 0x020CF6BC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020CF6F0 ; =0x021D5360 - mov r1, #0x4 - ldr r0, [r0, #0x0] - add r0, r0, #0x4 - bl DC_InvalidateRange - ldr r0, _020CF6F0 ; =0x021D5360 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CF6F0: .word 0x021D5360 - - arm_func_start SND_CalcChannelVolume -SND_CalcChannelVolume: ; 0x020CF6F4 - ldr r1, _020CF75C ; =0xFFFFFD2D - cmp r0, r1 - movlt r0, r1 - blt _020CF70C - cmp r0, #0x0 - movgt r0, #0x0 -_020CF70C: - ldr r1, _020CF760 ; =0x000002D3 - ldr r2, _020CF764 ; =0x02103CAC - add r3, r0, r1 - mvn r1, #0xef - cmp r0, r1 - ldrb r2, [r2, r3] - movlt r0, #0x3 - blt _020CF74C - mvn r1, #0x77 - cmp r0, r1 - movlt r0, #0x2 - blt _020CF74C - mvn r1, #0x3b - cmp r0, r1 - movlt r0, #0x1 - movge r0, #0x0 -_020CF74C: - orr r0, r2, r0, lsl #0x8 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bx lr - .balign 4 -_020CF75C: .word 0xFFFFFD2D -_020CF760: .word 0x000002D3 -_020CF764: .word 0x02103CAC - - arm_func_start SND_GetWaveDataAddress -SND_GetWaveDataAddress: ; 0x020CF768 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - bl SNDi_LockMutex - add r0, r5, r4, lsl #0x2 - ldr r4, [r0, #0x3c] - cmp r4, #0x0 - beq _020CF798 - cmp r4, #0x2000000 - addcc r4, r5, r4 - b _020CF79C -_020CF798: - mov r4, #0x0 -_020CF79C: - bl SNDi_UnlockMutex - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start SND_SetWaveDataAddress -SND_SetWaveDataAddress: ; 0x020CF7B0 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl SNDi_LockMutex - add r0, r6, #0x3c - add r2, r6, r5, lsl #0x2 - add r0, r0, r5, lsl #0x2 - mov r1, #0x4 - str r4, [r2, #0x3c] - bl DC_StoreRange - bl SNDi_UnlockMutex - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start SND_GetWaveDataCount -SND_GetWaveDataCount: ; 0x020CF7E8 - ldr r0, [r0, #0x38] - bx lr - - arm_func_start SND_GetNextInstData -SND_GetNextInstData: ; 0x020CF7F0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r4, [r2, #0x0] - ldr r3, [r0, #0x38] - cmp r4, r3 - bhs _020CF9B8 - mov r12, #0x0 -_020CF80C: - add r3, r0, r4, lsl #0x2 - ldr r4, [r3, #0x3c] - strb r4, [r1, #0x0] - ldrb r3, [r1, #0x0] - cmp r3, #0x10 - bgt _020CF850 - cmp r3, #0x10 - bge _020CF8A8 - cmp r3, #0x5 - addls pc, pc, r3, lsl #0x2 - b _020CF998 -_020CF838: - b _020CF998 - b _020CF85C - b _020CF85C - b _020CF85C - b _020CF85C - b _020CF85C -_020CF850: - cmp r3, #0x11 - beq _020CF924 - b _020CF998 -_020CF85C: - mov r3, r4, lsr #0x8 - add r5, r0, r4, lsr #0x8 - ldrh r4, [r0, r3] - ldrh r3, [r5, #0x2] - add sp, sp, #0x4 - mov r0, #0x1 - strh r4, [r1, #0x2] - strh r3, [r1, #0x4] - ldrh r4, [r5, #0x4] - ldrh r3, [r5, #0x6] - strh r4, [r1, #0x6] - strh r3, [r1, #0x8] - ldrh r3, [r5, #0x8] - strh r3, [r1, #0xA] - ldr r1, [r2] - add r1, r1, #0x1 - str r1, [r2] - ldmia sp!, {r4-r5,lr} - bx lr -_020CF8A8: - add r5, r0, r4, lsr #0x8 - b _020CF904 -_020CF8B0: - mov r0, #0xc - mla r12, lr, r0, r5 - ldrh r4, [r12, #0x2] - ldrh r3, [r12, #0x4] - add sp, sp, #0x4 - mov r0, #0x1 - strh r4, [r1, #0x0] - strh r3, [r1, #0x2] - ldrh r4, [r12, #0x6] - ldrh r3, [r12, #0x8] - strh r4, [r1, #0x4] - strh r3, [r1, #0x6] - ldrh r4, [r12, #0xa] - ldrh r3, [r12, #0xc] - strh r4, [r1, #0x8] - strh r3, [r1, #0xa] - ldr r1, [r2, #0x4] - add r1, r1, #0x1 - str r1, [r2, #0x4] - ldmia sp!, {r4-r5,lr} - bx lr -_020CF904: - ldrb r4, [r5, #0x1] - ldrb r3, [r5, #0x0] - ldr lr, [r2, #0x4] - sub r3, r4, r3 - add r3, r3, #0x1 - cmp lr, r3 - blo _020CF8B0 - b _020CF998 -_020CF924: - add r4, r0, r4, lsr #0x8 - b _020CF98C -_020CF92C: - ldrb lr, [r4, r3] - cmp lr, #0x0 - beq _020CF998 - mov r0, #0xc - mla lr, r3, r0, r4 - ldrh r12, [lr, #0x8] - ldrh r3, [lr, #0xa] - add sp, sp, #0x4 - mov r0, #0x1 - strh r12, [r1, #0x0] - strh r3, [r1, #0x2] - ldrh r12, [lr, #0xc] - ldrh r3, [lr, #0xe] - strh r12, [r1, #0x4] - strh r3, [r1, #0x6] - ldrh r12, [lr, #0x10] - ldrh r3, [lr, #0x12] - strh r12, [r1, #0x8] - strh r3, [r1, #0xa] - ldr r1, [r2, #0x4] - add r1, r1, #0x1 - str r1, [r2, #0x4] - ldmia sp!, {r4-r5,lr} - bx lr -_020CF98C: - ldr r3, [r2, #0x4] - cmp r3, #0x8 - blo _020CF92C -_020CF998: - ldr r3, [r2, #0x0] - add r3, r3, #0x1 - str r3, [r2, #0x0] - str r12, [r2, #0x4] - ldr r4, [r2, #0x0] - ldr r3, [r0, #0x38] - cmp r4, r3 - blo _020CF80C -_020CF9B8: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start SND_GetFirstInstDataPos -SND_GetFirstInstDataPos: ; 0x020CF9C8 - sub sp, sp, #0x8 - mov r1, #0x0 - str r1, [sp, #0x0] - str r1, [sp, #0x4] - str r1, [r0, #0x0] - str r1, [r0, #0x4] - add sp, sp, #0x8 - bx lr - - arm_func_start SND_DestroyWaveArc -SND_DestroyWaveArc: ; 0x020CF9E8 - stmdb sp!, {r4-r6,lr} - mov r4, r0 - bl SNDi_LockMutex - ldr r0, [r4, #0x18] - cmp r0, #0x0 - beq _020CFA28 - mov r5, #0x0 - mov r4, #0x8 -_020CFA08: - ldr r6, [r0, #0x4] - mov r1, r4 - str r5, [r0, #0x0] - str r5, [r0, #0x4] - bl DC_StoreRange - mov r0, r6 - cmp r6, #0x0 - bne _020CFA08 -_020CFA28: - bl SNDi_UnlockMutex - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start SND_DestroyBank -SND_DestroyBank: ; 0x020CFA34 - stmdb sp!, {r4-r8,lr} - mov r7, r0 - bl SNDi_LockMutex - add r5, r7, #0x18 - mov r6, #0x0 - mov r8, #0x8 - mov r4, #0x3c -_020CFA50: - add r1, r7, r6, lsl #0x3 - ldr r0, [r1, #0x18] - cmp r0, #0x0 - beq _020CFAB8 - ldr r3, [r0, #0x18] - cmp r5, r3 - bne _020CFA80 - ldr r2, [r1, #0x1c] - mov r1, r4 - str r2, [r0, #0x18] - bl DC_StoreRange - b _020CFAB8 -_020CFA80: - cmp r3, #0x0 - beq _020CFAA0 -_020CFA88: - ldr r0, [r3, #0x4] - cmp r5, r0 - beq _020CFAA0 - mov r3, r0 - cmp r0, #0x0 - bne _020CFA88 -_020CFAA0: - add r0, r7, r6, lsl #0x3 - ldr r2, [r0, #0x1c] - mov r0, r3 - mov r1, r8 - str r2, [r3, #0x4] - bl DC_StoreRange -_020CFAB8: - add r6, r6, #0x1 - cmp r6, #0x4 - add r5, r5, #0x8 - blt _020CFA50 - bl SNDi_UnlockMutex - ldmia sp!, {r4-r8,lr} - bx lr - - arm_func_start SND_AssignWaveArc -SND_AssignWaveArc: ; 0x020CFAD4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl SNDi_LockMutex - add r3, r6, r5, lsl #0x3 - ldr r2, [r3, #0x18] - mov r12, r5, lsl #0x3 - cmp r2, #0x0 - beq _020CFB70 - cmp r4, r2 - bne _020CFB10 - bl SNDi_UnlockMutex - ldmia sp!, {r4-r6,lr} - bx lr -_020CFB10: - add r1, r6, #0x18 - ldr r0, [r2, #0x18] - add r12, r1, r12 - cmp r12, r0 - bne _020CFB3C - ldr r0, [r3, #0x1c] - mov r1, #0x3c - str r0, [r2, #0x18] - ldr r0, [r3, #0x18] - bl DC_StoreRange - b _020CFB70 -_020CFB3C: - cmp r0, #0x0 - beq _020CFB5C -_020CFB44: - ldr r1, [r0, #0x4] - cmp r12, r1 - beq _020CFB5C - mov r0, r1 - cmp r1, #0x0 - bne _020CFB44 -_020CFB5C: - add r1, r6, r5, lsl #0x3 - ldr r2, [r1, #0x1c] - mov r1, #0x8 - str r2, [r0, #0x4] - bl DC_StoreRange -_020CFB70: - add r0, r6, #0x18 - ldr r1, [r4, #0x18] - add r0, r0, r5, lsl #0x3 - str r0, [r4, #0x18] - add r0, r6, r5, lsl #0x3 - str r1, [r0, #0x1c] - str r4, [r0, #0x18] - bl SNDi_UnlockMutex - mov r0, r6 - mov r1, #0x3c - bl DC_StoreRange - mov r0, r4 - mov r1, #0x3c - bl DC_StoreRange - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start PXI_Init -PXI_Init: ; 0x020CFBB0 - ldr ip, _020CFBB8 ; =PXI_InitFifo - bx r12 - .balign 4 -_020CFBB8: .word PXI_InitFifo - - arm_func_start PXIi_HandlerRecvFifoNotEmpty -PXIi_HandlerRecvFifoNotEmpty: ; 0x020CFBBC - stmdb sp!, {r4-r10,lr} - sub sp, sp, #0x8 - ldr sl, _020CFCD4 ; =0x04000184 - ldr r5, _020CFCD8 ; =0x021D5368 - ldr r4, _020CFCDC ; =0x04000188 - mov r7, #0x4100000 - mov r6, #0x0 - mvn r8, #0x3 - mvn r9, #0x2 -_020CFBE0: - ldrh r0, [r10, #0x0] - ands r0, r0, #0x4000 - ldrneh r0, [r10, #0x0] - movne r1, r9 - orrne r0, r0, #0xc000 - strneh r0, [r10, #0x0] - bne _020CFC28 - bl OS_DisableInterrupts - ldrh r1, [r10, #0x0] - ands r1, r1, #0x100 - beq _020CFC18 - bl OS_RestoreInterrupts - mov r1, r8 - b _020CFC28 -_020CFC18: - ldr r1, [r7, #0x0] - str r1, [sp, #0x0] - bl OS_RestoreInterrupts - mov r1, r6 -_020CFC28: - cmp r1, r8 - addeq sp, sp, #0x8 - ldmeqia sp!, {r4-r10,lr} - bxeq lr - mvn r0, #0x2 - cmp r1, r0 - beq _020CFBE0 - ldr r1, [sp, #0x0] - mov r0, r1, lsl #0x1b - movs r0, r0, lsr #0x1b - beq _020CFBE0 - ldr r3, [r5, r0, lsl #0x2] - cmp r3, #0x0 - beq _020CFC74 - mov r2, r1, lsl #0x1a - mov r1, r1, lsr #0x6 - mov r2, r2, lsr #0x1f - blx r3 - b _020CFBE0 -_020CFC74: - mov r0, r1, lsl #0x1a - movs r0, r0, lsr #0x1f - bne _020CFBE0 - orr r0, r1, #0x20 - str r0, [sp, #0x0] - ldrh r0, [r10, #0x0] - ands r0, r0, #0x4000 - ldrneh r0, [r10, #0x0] - orrne r0, r0, #0xc000 - strneh r0, [r10, #0x0] - bne _020CFBE0 - bl OS_DisableInterrupts - ldrh r1, [r10, #0x0] - ands r1, r1, #0x2 - beq _020CFCB8 - bl OS_RestoreInterrupts - b _020CFBE0 -_020CFCB8: - ldr r1, [sp, #0x0] - str r1, [r4, #0x0] - bl OS_RestoreInterrupts - b _020CFBE0 -_020CFCC8: - add sp, sp, #0x8 - ldmia sp!, {r4-r10, lr} - bx lr -_020CFCD4: .word 0x04000184 -_020CFCD8: .word 0x021D5368 -_020CFCDC: .word 0x04000188 - - arm_func_start PXI_SendWordByFifo -PXI_SendWordByFifo: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r3, [sp, #0x0] - and r0, r0, #0x1f - bic r3, r3, #0x1f - orr r12, r3, r0 - bic r3, r12, #0x20 - and r0, r2, #0x1 - orr r3, r3, r0, lsl #0x5 - str r12, [sp, #0x0] - and r2, r3, #0x3f - bic r0, r1, #0xfc000000 - orr r0, r2, r0, lsl #0x6 - str r3, [sp, #0x0] - ldr r2, _020CFD8C ; =0x04000184 - str r0, [sp, #0x0] - ldrh r0, [r2, #0x0] - ands r0, r0, #0x4000 - ldrneh r1, [r2, #0x0] - addne sp, sp, #0x4 - mvnne r0, #0x0 - orrne r1, r1, #0xc000 - strneh r1, [r2, #0x0] - ldmneia sp!, {lr} - bxne lr - bl OS_DisableInterrupts - ldr r1, _020CFD8C ; =0x04000184 - ldrh r1, [r1, #0x0] - ands r1, r1, #0x2 - beq _020CFD6C - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mvn r0, #0x1 - ldmia sp!, {lr} - bx lr -_020CFD6C: - ldr r2, [sp, #0x0] - ldr r1, _020CFD90 ; =0x04000188 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts -_020CFD7C: - mov r0, #0x0 - add sp, sp, #0x4 - ldmfd sp!, {lr} - bx lr -_020CFD8C: .word 0x04000184 -_020CFD90: .word 0x04000188 - - arm_func_start PXI_IsCallbackReady -PXI_IsCallbackReady: - ldr r2, _020CFDB8 ; =0x027FFC00 - mov r3, #0x1 - add r1, r2, r1, lsl #0x2 - mov r2, r3, lsl r0 - ldr r0, [r1, #0x388] - ands r0, r2, r0 - moveq r3, #0x0 - mov r0, r3 - bx lr - .balign 4 -_020CFDB8: .word 0x027FFC00 - - arm_func_start PXI_SetFifoRecvCallback -PXI_SetFifoRecvCallback: ; 0x020CFDBC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r0 - mov r5, r1 - bl OS_DisableInterrupts - ldr r1, _020CFE20 ; =0x021D5368 - cmp r5, #0x0 - str r5, [r1, r4, lsl #0x2] - beq _020CFDF8 - ldr r3, _020CFE24 ; =0x027FFC00 - mov r1, #0x1 - ldr r2, [r3, #0x388] - orr r1, r2, r1, lsl r4 - str r1, [r3, #0x388] - b _020CFE10 -_020CFDF8: - ldr r3, _020CFE24 ; =0x027FFC00 - mov r1, #0x1 - mvn r1, r1, lsl r4 - ldr r2, [r3, #0x388] - and r1, r2, r1 - str r1, [r3, #0x388] -_020CFE10: - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020CFE20: .word 0x021D5368 -_020CFE24: .word 0x027FFC00 - - arm_func_start PXI_InitFifo -PXI_InitFifo: ; 0x020CFE28 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - ldr r1, _020CFF18 ; =0x021D5364 - mov r4, r0 - ldrh r0, [r1, #0x0] - cmp r0, #0x0 - bne _020CFF04 - mov r2, #0x1 - ldr r0, _020CFF1C ; =0x027FFC00 - strh r2, [r1, #0x0] - mov r2, #0x0 - str r2, [r0, #0x388] - ldr r0, _020CFF20 ; =0x021D5368 - mov r1, r2 -_020CFE64: - str r1, [r0, r2, lsl #0x2] - add r2, r2, #0x1 - cmp r2, #0x20 - blt _020CFE64 - ldr r2, _020CFF24 ; =0x0000C408 - ldr r1, _020CFF28 ; =0x04000184 - mov r0, #0x40000 - strh r2, [r1, #0x0] - bl OS_ResetRequestIrqMask - ldr r1, _020CFF2C ; =PXIi_HandlerRecvFifoNotEmpty - mov r0, #0x40000 - bl OS_SetIrqFunction - mov r0, #0x40000 - bl OS_EnableIrqMask - mov r12, #0x0 - ldr r3, _020CFF30 ; =0x04000180 - mov r1, r12 - mov r2, #0x3e8 -_020CFEAC: - ldrh r0, [r3, #0x0] - ands lr, r0, #0xf - mov r0, lr, lsl #0x8 - strh r0, [r3, #0x0] - bne _020CFEC8 - cmp r12, #0x4 - bgt _020CFF04 -_020CFEC8: - ldrh r0, [r3, #0x0] - mov r5, r2 - and r0, r0, #0xf - cmp r0, lr - bne _020CFEFC -_020CFEDC: - cmp r5, #0x0 - movle r12, r1 - ble _020CFEFC - ldrh r0, [r3, #0x0] - sub r5, r5, #0x1 - and r0, r0, #0xf - cmp r0, lr - beq _020CFEDC -_020CFEFC: - add r12, r12, #0x1 - b _020CFEAC -_020CFF04: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020CFF18: .word 0x021D5364 -_020CFF1C: .word 0x027FFC00 -_020CFF20: .word 0x021D5368 -_020CFF24: .word 0x0000C408 -_020CFF28: .word 0x04000184 -_020CFF2C: .word PXIi_HandlerRecvFifoNotEmpty -_020CFF30: .word 0x04000180 - - arm_func_start FSi_TranslateCommand -FSi_TranslateCommand: - stmdb sp!, {r4-r8,lr} - mov r8, r0 - ldr r0, [r8, #0xc] - mov r7, r1 - mov r1, #0x1 - ldr r5, [r8, #0x8] - mov r4, r1, lsl r7 - ands r0, r0, #0x4 - moveq r1, #0x0 - cmp r1, #0x0 - ldrne r0, [r5, #0x1c] - orrne r0, r0, #0x200 - strne r0, [r5, #0x1c] - ldreq r0, [r5, #0x1c] - orreq r0, r0, #0x100 - streq r0, [r5, #0x1c] - ldr r0, [r5, #0x58] - ands r0, r0, r4 - beq _020CFFE4 - ldr r2, [r5, #0x54] - mov r0, r8 - mov r1, r7 - blx r2 - mov r6, r0 - cmp r6, #0x8 - addls pc, pc, r6, lsl #0x2 - b _020CFFE8 -_020CFFA0: - b _020CFFC4 - b _020CFFC4 - b _020CFFE8 - b _020CFFE8 - b _020CFFC4 - b _020CFFE8 - b _020CFFE8 - b _020CFFE8 - b _020CFFCC -_020CFFC4: - str r6, [r8, #0x14] - b _020CFFE8 -_020CFFCC: - ldr r1, [r5, #0x58] - mvn r0, r4 - and r0, r1, r0 - str r0, [r5, #0x58] - mov r6, #0x7 - b _020CFFE8 -_020CFFE4: - mov r6, #0x7 -_020CFFE8: - cmp r6, #0x7 - bne _020D0004 - ldr r1, _020D00AC ; =0x02103F80 - mov r0, r8 - ldr r1, [r1, r7, lsl #0x2] - blx r1 - mov r6, r0 -_020D0004: - cmp r6, #0x6 - bne _020D0060 - ldr r0, [r8, #0xc] - ands r0, r0, #0x4 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - beq _020D00A0 - bl OS_DisableInterrupts - ldr r1, [r5, #0x1c] - mov r4, r0 - ands r0, r1, #0x200 - beq _020D0050 - add r6, r5, #0xc -_020D003C: - mov r0, r6 - bl OS_SleepThread - ldr r0, [r5, #0x1c] - ands r0, r0, #0x200 - bne _020D003C -_020D0050: - mov r0, r4 - ldr r6, [r8, #0x14] - bl OS_RestoreInterrupts - b _020D00A0 -_020D0060: - ldr r0, [r8, #0xc] - ands r0, r0, #0x4 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - ldrne r0, [r5, #0x1c] - bicne r0, r0, #0x200 - strne r0, [r5, #0x1c] - strne r6, [r8, #0x14] - bne _020D00A0 - ldr r1, [r5, #0x1c] - mov r0, r8 - bic r2, r1, #0x100 - mov r1, r6 - str r2, [r5, #0x1c] - bl FSi_ReleaseCommand -_020D00A0: - mov r0, r6 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020D00AC: .word 0x02103F80 - - arm_func_start FSi_ReleaseCommand -FSi_ReleaseCommand: - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - bl OS_DisableInterrupts - ldr r1, [r6, #0x0] - mov r4, r0 - ldr r0, [r6, #0x4] - cmp r1, #0x0 - strne r0, [r1, #0x4] - cmp r0, #0x0 - strne r1, [r0, #0x0] - mov r0, #0x0 - str r0, [r6, #0x0] - ldr r1, [r6, #0x0] - add r0, r6, #0x18 - str r1, [r6, #0x4] - ldr r1, [r6, #0xc] - bic r1, r1, #0x4f - str r1, [r6, #0xc] - str r5, [r6, #0x14] - bl OS_WakeupThread - mov r0, r4 - bl OS_RestoreInterrupts - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start FSi_CloseFileCommand -FSi_CloseFileCommand: ; 0x020D0114 - mov r0, #0x0 - bx lr - - arm_func_start FSi_OpenFileDirectCommand -FSi_OpenFileDirectCommand: ; 0x020D011C - ldr r1, [r0, #0x30] - str r1, [r0, #0x24] - ldr r1, [r0, #0x30] - str r1, [r0, #0x2c] - ldr r1, [r0, #0x34] - str r1, [r0, #0x28] - ldr r1, [r0, #0x38] - str r1, [r0, #0x20] - mov r0, #0x0 - bx lr - - arm_func_start FSi_OpenFileFastCommand -FSi_OpenFileFastCommand: ; 0x020D0144 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x14 - mov r5, r0 - ldr r1, [r5, #0x8] - ldr r4, [r5, #0x34] - ldr r0, [r1, #0x30] - mov r2, r4, lsl #0x3 - cmp r2, r0 - addcs sp, sp, #0x14 - movcs r0, #0x1 - ldmcsia sp!, {r4-r5,lr} - bxcs lr - str r1, [sp, #0x8] - ldr r1, [r1, #0x2c] - add r0, sp, #0x8 - add r3, r1, r2 - add r1, sp, #0x0 - mov r2, #0x8 - str r3, [sp, #0xc] - bl FSi_ReadTable -_020D0194: - cmp r0, #0 - addne sp, sp, #0x14 - ldmneia sp!, {r4-r5,lr} - bxne lr - ldr r1, [sp] - mov r0, r5 - str r1, [r5, #0x30] - ldr r2, [sp, #0x4] - mov r1, #7 - str r2, [r5, #0x34] - str r4, [r5, #0x38] - bl FSi_TranslateCommand - add sp, sp, #0x14 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start FSi_GetPathCommand -FSi_GetPathCommand: ; 0x020D01D0 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xe4 - mov r4, r0 - ldr r1, [r4, #0x8] - add r0, sp, #0x98 - add r11, r4, #0x30 - str r1, [sp, #0x0] - bl FS_InitFile - ldr r0, [r4, #0x8] - str r0, [sp, #0xa0] - ldr r0, [r4, #0xc] - ands r0, r0, #0x20 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - ldrneh r5, [r4, #0x24] - movne r4, #0x10000 - bne _020D02BC - ldrh r0, [r11, #0x8] - ldr r4, [r4, #0x20] - cmp r0, #0x0 - ldrneh r5, [r11, #0xa] - bne _020D02BC - mov r10, #0x0 - mov r9, r10 - mov r5, #0x10000 - add r8, sp, #0x98 - mov r6, #0x3 - mov r7, #0x1 -_020D0244: - mov r0, r8 - mov r1, r10 - bl FSi_SeekDirDirect - add r2, sp, #0x4 - cmp r10, #0x0 - mov r0, r8 - mov r1, r6 - ldreq r9, [sp, #0xc4] - str r2, [sp, #0xc8] - str r7, [sp, #0xcc] - bl FSi_TranslateCommand -_020D0270: - cmp r0, #0x0 - bne _020D02A8 -_020D0278: - ldr r0, [sp, #0x10] - cmp r0, #0x0 - bne _020D0294 - ldr r0, [sp, #0x8] - cmp r0, r4 - ldreqh r5, [sp, #0xbc] - beq _020D02A8 -_020D0294: - mov r0, r8 - mov r1, r6 - bl FSi_TranslateCommand - cmp r0, #0x0 - beq _020D0278 -_020D02A8: - cmp r5, #0x10000 - bne _020D02BC - add sl, sl, #0x1 - cmp sl, r9 - bcc _020D0244 -_020D02BC: - cmp r5, #0x10000 - moveq r0, #0x0 - streqh r0, [r11, #0x8] - addeq sp, sp, #0xe4 - moveq r0, #0x1 - ldmeqia sp!, {r4-r11,lr} - bxeq lr - ldrh r0, [r11, #0x8] - cmp r0, #0x0 - bne _020D03B8 - ldr r0, [sp, #0x0] - mov r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, #0xff - addls r9, r1, #0x1 - bls _020D0308 - cmp r0, #0xff00 - addls r9, r1, #0x2 - addhi r9, r1, #0x3 -_020D0308: - cmp r4, #0x10000 - ldrne r0, [sp, #0x14] - add r9, r9, #0x2 - addne r9, r9, r0 - mov r10, r5 - cmp r5, #0x0 - beq _020D03AC - add r0, sp, #0x98 - mov r1, r5 - bl FSi_SeekDirDirect - add r8, sp, #0x98 - mov r6, #0x3 - mov r7, #0x1 -_020D033C: - ldr r1, [sp, #0xc4] - mov r0, r8 - bl FSi_SeekDirDirect - add r2, sp, #0x4 - mov r0, r8 - mov r1, r6 - str r2, [sp, #0xc8] - str r7, [sp, #0xcc] - bl FSi_TranslateCommand -_020D0360: - cmp r0, #0x0 - bne _020D03A0 -_020D0368: - ldr r0, [sp, #0x10] - cmp r0, #0x0 - beq _020D038C - ldrh r0, [sp, #0x8] - cmp r0, sl - ldreq r0, [sp, #0x14] - addeq r0, r0, #0x1 - addeq r9, r9, r0 - beq _020D03A0 -_020D038C: - mov r0, r8 - mov r1, r6 - bl FSi_TranslateCommand - cmp r0, #0x0 - beq _020D0368 -_020D03A0: - ldrh sl, [sp, #0xbc] - cmp sl, #0x0 - bne _020D033C -_020D03AC: - add r0, r9, #0x1 - strh r0, [r11, #0x8] - strh r5, [r11, #0xa] -_020D03B8: - ldr r7, [r11, #0x0] - cmp r7, #0x0 - addeq sp, sp, #0xe4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - bxeq lr - ldrh r6, [r11, #0x8] - ldr r0, [r11, #0x4] - cmp r0, r6 - addcc sp, sp, #0xe4 - movcc r0, #0x1 - ldmccia sp!, {r4-r11,lr} - bxcc lr - ldr r0, [sp, #0x0] - mov r9, #0x0 - ldr r0, [r0, #0x0] - cmp r0, #0xff - movls r8, #0x1 - bls _020D0410 - cmp r0, #0xff00 - movls r8, #0x2 - movhi r8, #0x3 -_020D0410: - ldr r0, [sp, #0x0] - mov r1, r7 - mov r2, r8 - bl MI_CpuCopy8 - add r1, r9, r8 - ldr r0, _020D058C ; =0x0210682C - add r1, r7, r1 - mov r2, #0x2 - bl MI_CpuCopy8 - add r0, sp, #0x98 - mov r1, r5 - bl FSi_SeekDirDirect - cmp r4, #0x10000 - beq _020D04C4 - add r3, sp, #0x4 - mov r2, #0x0 - add r0, sp, #0x98 - mov r1, #0x3 - str r3, [sp, #0xc8] - str r2, [sp, #0xcc] - bl FSi_TranslateCommand -_020D0464: - cmp r0, #0x0 - bne _020D04A0 - add r9, sp, #0x98 - mov r8, #0x3 -_020D0474: - ldr r0, [sp, #0x10] - cmp r0, #0x0 - bne _020D048C - ldr r0, [sp, #0x8] - cmp r0, r4 - beq _020D04A0 -_020D048C: - mov r0, r9 - mov r1, r8 - bl FSi_TranslateCommand - cmp r0, #0x0 - beq _020D0474 -_020D04A0: - ldr r0, [sp, #0x14] - add r1, r7, r6 - add r4, r0, #0x1 - add r0, sp, #0x18 - mov r2, r4 - sub r1, r1, r4 - bl MI_CpuCopy8 - sub r6, r6, r4 - b _020D04D4 -_020D04C4: - add r0, r7, r6 - mov r1, #0x0 - strb r1, [r0, #-0x1] - sub r6, r6, #0x1 -_020D04D4: - cmp r5, #0x0 - beq _020D057C - add r10, sp, #0x98 - add r11, sp, #0x4 - mov r4, #0x3 - mov r9, #0x0 - mov r8, #0x2f -_020D04F0: - ldr r1, [sp, #0xc4] - mov r0, r10 - bl FSi_SeekDirDirect - add r2, r7, r6 - mov r0, r10 - mov r1, r4 - str r11, [sp, #0xc8] - str r9, [sp, #0xcc] - strb r8, [r2, #-0x1] - sub r6, r6, #0x1 - bl FSi_TranslateCommand -_020D051C: - cmp r0, #0x0 - bne _020D0570 -_020D0524: - ldr r0, [sp, #0x10] - cmp r0, #0x0 - beq _020D055C - ldrh r0, [sp, #0x8] - cmp r0, r5 - bne _020D055C - ldr r5, [sp, #0x14] - add r1, r7, r6 - add r0, sp, #0x18 - mov r2, r5 - sub r1, r1, r5 - bl MI_CpuCopy8 - sub r6, r6, r5 - b _020D0570 -_020D055C: - mov r0, sl - mov r1, r4 - bl FSi_TranslateCommand - cmp r0, #0x0 - beq _020D0524 -_020D0570: - ldrh r5, [sp, #0xbc] - cmp r5, #0x0 - bne _020D04F0 -_020D057C: - mov r0, #0x0 - add sp, sp, #0xe4 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020D058C: .word 0x0210682C - - arm_func_start FSi_FindPathCommand -FSi_FindPathCommand: ; 0x020D0590 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x9c - mov r10, r0 - ldr r2, [r10, #0x40] - ldr r9, [r10, #0x3c] - mov r1, #0x2 - str r2, [sp, #0x0] - bl FSi_TranslateCommand - ldrb r1, [r9, #0x0] - cmp r1, #0x0 - beq _020D0780 - mov r0, #0x2 - add r11, sp, #0x1c - mov r4, #0x3 - mov r5, #0x1 - mov r6, #0x0 - str r0, [sp, #0x4] -_020D05D4: - mov r7, r6 - b _020D05E0 -_020D05DC: - add r7, r7, #0x1 -_020D05E0: - ldrb r8, [r9, r7] - mov r0, r6 - cmp r8, #0x0 - beq _020D0600 - cmp r8, #0x2f - beq _020D0600 - cmp r8, #0x5c - movne r0, r5 -_020D0600: - cmp r0, #0x0 - bne _020D05DC - cmp r8, #0x0 - bne _020D061C - ldr r0, [sp, #0x0] - cmp r0, #0x0 - beq _020D0620 -_020D061C: - mov r8, r5 -_020D0620: - cmp r7, #0x0 - addeq sp, sp, #0x9c - moveq r0, #0x1 - ldmeqia sp!, {r4-r11,lr} - bxeq lr - cmp r1, #0x2e - bne _020D068C - cmp r7, #0x1 - addeq r9, r9, #0x1 - beq _020D0764 - ldrb r0, [r9, #0x1] - cmp r7, #0x2 - moveq r1, r5 - movne r1, r6 - cmp r0, #0x2e - moveq r0, r5 - movne r0, r6 - ands r0, r1, r0 - beq _020D068C - ldrh r0, [r10, #0x24] - cmp r0, #0x0 - beq _020D0684 - ldr r1, [r10, #0x2c] - mov r0, r10 - bl FSi_SeekDirDirect -_020D0684: - add r9, r9, #0x2 - b _020D0764 -_020D068C: - cmp r7, #0x7f - addgt sp, sp, #0x9c - movgt r0, #0x1 - ldmgtia sp!, {r4-r11,lr} - bxgt lr - add r0, sp, #0x8 - str r0, [r10, #0x30] - str r6, [r10, #0x34] -_020D06AC: - mov r0, r10 - mov r1, r4 - bl FSi_TranslateCommand -_020D06B8: - cmp r0, #0x0 - addne sp, sp, #0x9c - movne r0, #0x1 - ldmneia sp!, {r4-r11,lr} - bxne lr - ldr r0, [sp, #0x14] - cmp r8, r0 - bne _020D06AC - ldr r0, [sp, #0x18] - cmp r7, r0 - bne _020D06AC - mov r0, r9 - mov r1, fp - mov r2, r7 - bl FSi_StrNICmp - cmp r0, #0x0 - bne _020D06AC - cmp r8, #0x0 - beq _020D0728 - add r0, sp, #0x8 - add r3, sl, #0x30 - ldmia r0, {r0, r1, r2} - stmia r3, {r0, r1, r2} - ldr r1, [sp, #0x4] - mov r0, sl - add r9, r9, r7 - bl FSi_TranslateCommand - b _020D0764 -_020D0728: - ldr r0, [sp] - cmp r0, #0x0 - addne sp, sp, #0x9c - movne r0, #0x1 - ldmneia sp!, {r4-r11,lr} - bxne lr - ldr r3, [sl, #0x44] - ldr r2, [sp, #0x8] - ldr r1, [sp, #0xC] - add sp, sp, #0x9c - str r2, [r3] - str r1, [r3, #0x4] - mov r0, #0x0 - ldmia sp!, {r4-r11,lr} - bx lr -_020D0764: - ldrb r0, [r9, #0x0] - cmp r0, #0x0 - movne r0, r5 - moveq r0, r6 - ldrb r1, [r9, r0]! - cmp r1, #0x0 - bne _020D05D4 -_020D0780: - ldr r0, [sp, #0x0] - cmp r0, #0x0 - moveq r0, #0x1 - addne r0, r10, #0x20 - ldrne r3, [r10, #0x44] - ldmneia r0, {r0-r2} - stmneia r3, {r0-r2} - movne r0, #0x0 - add sp, sp, #0x9c - ldmia sp!, {r4-r11,lr} - bx lr - - arm_func_start FSi_ReadDirCommand -FSi_ReadDirCommand: ; 0x020D07AC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - mov r5, r0 - ldr r4, [r5, #0x30] - ldr r1, [r5, #0x8] - add r0, sp, #0x4 - str r1, [sp, #0x4] - ldr r3, [r5, #0x28] - add r1, sp, #0x0 - mov r2, #0x1 - str r3, [sp, #0x8] - bl FSi_ReadTable -_020D07DC: - cmp r0, #0x0 - addne sp, sp, #0xC - ldmneia sp!, {r4-r5,lr} - bxne lr - ldrb r1, [sp] - and r2, r1, #0x7F - mov r1, r1, asr #0x7 - str r2, [r4, #0x10] - and r1, r1, #0x1 - str r1, [r4, #0xC] - ldr r2, [r4, #0x10] - cmp r2, #0x0 - addeq sp, sp, #0xC - moveq r0, #0x1 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r1, [r5, #0x34] - cmp r1, #0x0 - bne _020D0858 - add r0, sp, #0x4 - add r1, r4, #0x14 - bl FSi_ReadTable - cmp r0, #0x0 - addne sp, sp, #0xC - ldmneia sp!, {r4-r5,lr} - bxne lr - ldr r1, [r4, #0x10] - mov r2, #0x0 - add r1, r4, r1 - strb r2, [r1, #0x14] - b _020D0864 -_020D0858: - ldr r1, [sp, #0x8] - add r1, r1, r2 - str r1, [sp, #0x8] -_020D0864: - ldr r1, [r4, #0xC] - cmp r1, #0x0 - beq _020D08B8 - add r0, sp, #0x4 - add r1, sp, #0x2 - mov r2, #0x2 - bl FSi_ReadTable - cmp r0, #0x0 - addne sp, sp, #0xC - ldmneia sp!, {r4-r5,lr} - bxne lr - ldr r2, [r5, #0x8] - ldr r1, _020D08E8 - str r2, [r4] - ldrh r3, [sp, #0x2] - mov r2, #0x0 - and r1, r3, r1 - strh r1, [r4, #0x4] - strh r2, [r4, #0x6] - str r2, [r4, #0x8] - b _020D08D4 -_020D08B8: - ldr r1, [r5, #0x8] - str r1, [r4] - ldrh r1, [r5, #0x26] - str r1, [r4, #0x4] - ldrh r1, [r5, #0x26] - add r1, r1, #0x1 - strh r1, [r5, #0x26] -_020D08D4: - ldr r1, [sp, #0x8] - str r1, [r5, #0x28] - add sp, sp, #0xC - ldmia sp!, {r4-r5,lr} - bx lr -_020D08E8: .word 0x00000FFF - - arm_func_start FSi_SeekDirCommand -FSi_SeekDirCommand: ; 0x020D08EC - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x10 - mov r6, r0 - ldr r5, [r6, #0x8] - add r4, r6, #0x30 - str r5, [sp, #0x8] - ldrh r1, [r4, #0x4] - ldr r2, [r5, #0x34] - add r0, sp, #0x8 - add r3, r2, r1, lsl #0x3 - add r1, sp, #0x0 - mov r2, #0x8 - str r3, [sp, #0xc] - bl FSi_ReadTable - movs r3, r0 - bne _020D0978 - add r12, r6, #0x20 - ldmia r4, {r0-r2} - stmia r12, {r0-r2} - ldrh r0, [r4, #0x6] - cmp r0, #0x0 - bne _020D0968 - ldr r0, [r4, #0x8] - cmp r0, #0x0 - bne _020D0968 - ldrh r0, [sp, #0x4] - strh r0, [r6, #0x26] - ldr r1, [r5, #0x34] - ldr r0, [sp, #0x0] - add r0, r1, r0 - str r0, [r6, #0x28] -_020D0968: - ldrh r1, [sp, #0x6] - ldr r0, _020D0988 ; =0x00000FFF - and r0, r1, r0 - str r0, [r6, #0x2c] -_020D0978: - mov r0, r3 - add sp, sp, #0x10 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D0988: .word 0x00000FFF - - arm_func_start FSi_WriteFileCommand -FSi_WriteFileCommand: ; 0x020D098C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, [r0, #0x2c] - ldr r3, [r0, #0x38] - ldr lr, [r0, #0x8] - ldr r1, [r0, #0x30] - add r12, r2, r3 - str r12, [r0, #0x2c] - ldr r12, [lr, #0x4c] - mov r0, lr - blx r12 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start FSi_ReadFileCommand -FSi_ReadFileCommand: ; 0x020D09C4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, [r0, #0x2c] - ldr r3, [r0, #0x38] - ldr lr, [r0, #0x8] - ldr r1, [r0, #0x30] - add r12, r2, r3 - str r12, [r0, #0x2c] - ldr r12, [lr, #0x48] - mov r0, lr - blx r12 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start FSi_SeekDirDirect -FSi_SeekDirDirect: ; 0x020D09FC - ldr r3, [r0, #0xc] - mov r2, #0x0 - orr r3, r3, #0x4 - str r3, [r0, #0xc] - ldr r3, [r0, #0x8] - ldr ip, _020D0A2C ; =FSi_TranslateCommand - str r3, [r0, #0x30] - str r2, [r0, #0x38] - strh r2, [r0, #0x36] - strh r1, [r0, #0x34] - mov r1, #0x2 - bx r12 - .balign 4 -_020D0A2C: .word FSi_TranslateCommand - - arm_func_start FSi_ReadTable -FSi_ReadTable: - stmdb sp!, {r4-r8,lr} - mov r7, r0 - ldr r5, [r7, #0x0] - mov r6, r2 - ldr r2, [r5, #0x1c] - mov r0, r5 - orr r2, r2, #0x200 - str r2, [r5, #0x1c] - ldr r2, [r7, #0x4] - ldr r4, [r5, #0x50] - mov r3, r6 - blx r4 - cmp r0, #0x0 - beq _020D0A7C - cmp r0, #0x1 - beq _020D0A7C - cmp r0, #0x6 - beq _020D0A8C - b _020D0AC8 -_020D0A7C: - ldr r1, [r5, #0x1c] - bic r1, r1, #0x200 - str r1, [r5, #0x1c] - b _020D0AC8 -_020D0A8C: - bl OS_DisableInterrupts - ldr r1, [r5, #0x1c] - mov r4, r0 - ands r0, r1, #0x200 - beq _020D0AB8 - add r8, r5, #0xc -_020D0AA4: - mov r0, r8 - bl OS_SleepThread - ldr r0, [r5, #0x1c] - ands r0, r0, #0x200 - bne _020D0AA4 -_020D0AB8: - mov r0, r4 - bl OS_RestoreInterrupts - ldr r0, [r5, #0x24] - ldr r0, [r0, #0x14] -_020D0AC8: - ldr r1, [r7, #0x4] - add r1, r1, r6 - str r1, [r7, #0x4] - ldmia sp!, {r4-r8,lr} - bx lr - - arm_func_start FSi_StrNICmp -FSi_StrNICmp: ; 0x020D0ADC - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r2, #0x0 - mov lr, #0x0 - bls _020D0B30 -_020D0AF0: - ldrb r12, [r0, lr] - ldrb r3, [r1, lr] - sub r12, r12, #0x41 - cmp r12, #0x19 - sub r3, r3, #0x41 - addls r12, r12, #0x20 - cmp r3, #0x19 - addls r3, r3, #0x20 - cmp r12, r3 - addne sp, sp, #0x4 - subne r0, r12, r3 - ldmneia sp!, {lr} - bxne lr - add lr, lr, #0x1 - cmp lr, r2 - blo _020D0AF0 -_020D0B30: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start FS_NotifyArchiveAsyncEnd -FS_NotifyArchiveAsyncEnd: ; 0x020D0B40 - stmdb sp!, {r4-r6,lr} - mov r4, r0 - ldr r0, [r4, #0x1c] - mov r6, r1 - ands r0, r0, #0x100 - beq _020D0B8C - ldr r2, [r4, #0x1c] - ldr r0, [r4, #0x24] - bic r2, r2, #0x100 - str r2, [r4, #0x1c] - bl FSi_ReleaseCommand - mov r0, r4 - bl FSi_NextCommand -_020D0B74: - cmp r0, #0x0 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - bl FSi_ExecuteAsyncCommand - ldmia sp!, {r4-r6,lr} - bx lr -_020D0B8C: - ldr r5, [r4, #0x24] - bl OS_DisableInterrupts - str r6, [r5, #0x14] - ldr r1, [r4, #0x1c] - mov r5, r0 - bic r1, r1, #0x200 - add r0, r4, #0xc - str r1, [r4, #0x1c] - bl OS_WakeupThread - mov r0, r5 - bl OS_RestoreInterrupts - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start FS_SetArchiveProc -FS_SetArchiveProc: ; 0x020D0BC0 - cmp r2, #0x0 - moveq r1, #0x0 - beq _020D0BD4 - cmp r1, #0x0 - moveq r2, #0x0 -_020D0BD4: - str r1, [r0, #0x54] - str r2, [r0, #0x58] - bx lr - - arm_func_start FS_ResumeArchive -FS_ResumeArchive: - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r4, r0 - mov r6, #0x0 - bl OS_DisableInterrupts - ldr r1, [r4, #0x1c] - mov r5, r0 - ands r0, r1, #0x8 - movne r0, #0x1 - moveq r0, r6 - cmp r0, #0x0 - moveq r7, #0x1 - movne r7, #0x0 - cmp r7, #0x0 - bne _020D0C34 - ldr r1, [r4, #0x1c] - mov r0, r4 - bic r1, r1, #0x8 - str r1, [r4, #0x1c] - bl FSi_NextCommand - mov r6, r0 -_020D0C34: - mov r0, r5 - bl OS_RestoreInterrupts -_020D0C3C: - cmp r6, #0x0 - beq _020D0C4C - mov r0, r6 - bl FSi_ExecuteAsyncCommand -_020D0C4C: - mov r0, r7 - add sp, sp, #0x4 - ldmia sp!, {r4-r7, lr} - bx lr - - arm_func_start FS_SuspendArchive -FS_SuspendArchive: ; 0x020D0C5C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r6, r0 - bl OS_DisableInterrupts - ldr r1, [r6, #0x1c] - mov r4, r0 - ands r0, r1, #0x8 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - moveq r5, #0x1 - movne r5, #0x0 - cmp r5, #0x0 - beq _020D0CD4 - ldr r0, [r6, #0x1c] - ands r0, r0, #0x10 - beq _020D0CC8 - ldr r0, [r6, #0x1c] - orr r0, r0, #0x40 - str r0, [r6, #0x1c] - add r7, r6, #0x14 -_020D0CB0: - mov r0, r7 - bl OS_SleepThread - ldr r0, [r6, #0x1c] - ands r0, r0, #0x40 - bne _020D0CB0 - b _020D0CD4 -_020D0CC8: - ldr r0, [r6, #0x1c] - orr r0, r0, #0x8 - str r0, [r6, #0x1c] -_020D0CD4: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, r5 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start FS_UnloadArchiveTables -FS_UnloadArchiveTables: ; 0x020D0CEC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldr r0, [r5, #0x1c] - mov r4, #0x0 - ands r0, r0, #0x2 - movne r0, #0x1 - moveq r0, r4 - cmp r0, #0x0 - beq _020D0D74 - mov r0, r5 - bl FS_SuspendArchive - ldr r1, [r5, #0x1c] - ands r1, r1, #0x4 - movne r1, #0x1 - moveq r1, #0x0 - cmp r1, #0x0 - beq _020D0D64 - ldr r2, [r5, #0x1c] - mov r1, #0x0 - bic r2, r2, #0x4 - str r2, [r5, #0x1c] - ldr r4, [r5, #0x44] - str r1, [r5, #0x44] - ldr r1, [r5, #0x3c] - str r1, [r5, #0x2c] - ldr r1, [r5, #0x40] - str r1, [r5, #0x34] - ldr r1, [r5, #0x48] - str r1, [r5, #0x50] -_020D0D64: - cmp r0, #0x0 - beq _020D0D74 - mov r0, r5 - bl FS_ResumeArchive -_020D0D74: - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start FUN_020D0D84 -FUN_020D0D84: ; 0x020D0D84 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4c - mov r7, r0 - ldr r3, [r7, #0x30] - ldr r0, [r7, #0x38] - mov r6, r1 - add r0, r3, r0 - add r0, r0, #0x20 - add r0, r0, #0x1f - bic r5, r0, #0x1f - cmp r5, r2 - bhi _020D0E9C - add r1, r6, #0x1f - add r0, sp, #0x4 - bic r4, r1, #0x1f - bl FS_InitFile - ldr r2, [r7, #0x2c] - mvn r0, #0x0 - str r0, [sp, #0x0] - ldr r3, [r7, #0x30] - add r0, sp, #0x4 - mov r1, r7 - add r3, r2, r3 - bl FS_OpenFileDirect -_020D0DE4: - cmp r0, #0x0 - beq _020D0E1C - ldr r2, [r7, #0x30] - add r0, sp, #0x4 - mov r1, r4 - bl FS_ReadFile - cmp r0, #0x0 - bge _020D0E14 - ldr r2, [r7, #0x30] - mov r0, r4 - mov r1, #0x0 - bl MI_CpuFill8 -_020D0E14: - add r0, sp, #0x4 - bl FS_CloseFile -_020D0E1C: - str r4, [r7, #0x2C] - ldr ip, [r7, #0x30] - ldr r2, [r7, #0x34] - mvn r0, #0x0 - str r0, [sp] - ldr r3, [r7, #0x38] - add r0, sp, #0x4 - mov r1, r7 - add r3, r2, r3 - add r4, r4, ip - bl FS_OpenFileDirect - cmp r0, #0x0 - beq _020D0E80 - ldr r2, [r7, #0x38] - add r0, sp, #0x4 - mov r1, r4 - bl FS_ReadFile - cmp r0, #0x0 - bge _020D0E78 - ldr r2, [r7, #0x38] - mov r0, r4 - mov r1, #0x0 - bl MI_CpuFill8 -_020D0E78: - add r0, sp, #0x4 - bl FS_CloseFile -_020D0E80: - str r4, [r7, #0x34] - ldr r0, _020D0EAC - str r6, [r7, #0x44] - str r0, [r7, #0x50] - ldr r0, [r7, #0x1C] - orr r0, r0, #0x4 - str r0, [r7, #0x1C] -_020D0E9C: - mov r0, r5 - add sp, sp, #0x4C - ldmia sp!, {r4-r7,lr} - bx lr -_020D0EAC: - .word FSi_ReadMemoryCore - - arm_func_start FUN_020D0EB0 -FUN_020D0EB0: ; 0x020D0EB0 - stmdb sp!, {r4-r8,lr} - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, [r5, #0x1c] - mov r4, r0 - ands r0, r1, #0x2 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - beq _020D0F64 - mov r0, r5 - ldr r1, [r5, #0x1c] - bl FS_SuspendArchive - ldr r1, [r5, #0x1c] - mov r7, r0 - orr r0, r1, #0x80 - str r0, [r5, #0x1c] - ldr r0, [r5, #0x24] - cmp r0, #0x0 - beq _020D0F1C - mov r6, #0x3 -_020D0F04: - ldr r8, [r0, #0x4] - mov r1, r6 - bl FSi_ReleaseCommand - mov r0, r8 - cmp r8, #0x0 - bne _020D0F04 -_020D0F1C: - mov r0, #0x0 - str r0, [r5, #0x24] - cmp r7, #0x0 - beq _020D0F34 - mov r0, r5 - bl FS_ResumeArchive -_020D0F34: - mov r0, #0x0 - str r0, [r5, #0x28] - str r0, [r5, #0x2c] - str r0, [r5, #0x30] - str r0, [r5, #0x34] - str r0, [r5, #0x38] - str r0, [r5, #0x40] - ldr r0, [r5, #0x40] - str r0, [r5, #0x3c] - ldr r0, [r5, #0x1c] - bic r0, r0, #0xa2 - str r0, [r5, #0x1c] -_020D0F64: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4-r8,lr} - bx lr - - arm_func_start FS_LoadArchive -FS_LoadArchive: ; 0x020D0F78 - str r1, [r0, #0x28] - str r3, [r0, #0x30] - str r2, [r0, #0x3c] - ldr r1, [r0, #0x3c] - ldr r2, [sp, #0x4] - str r1, [r0, #0x2c] - str r2, [r0, #0x38] - ldr r1, [sp, #0x0] - ldr r2, [sp, #0x8] - str r1, [r0, #0x40] - ldr r1, [r0, #0x40] - cmp r2, #0x0 - str r1, [r0, #0x34] - ldreq r2, _020D0FE8 ; =FSi_ReadMemCallback - ldr r1, [sp, #0xc] - str r2, [r0, #0x48] - cmp r1, #0x0 - ldreq r1, _020D0FEC ; =FSi_WriteMemCallback - str r1, [r0, #0x4c] - ldr r2, [r0, #0x48] - mov r1, #0x0 - str r2, [r0, #0x50] - str r1, [r0, #0x44] - ldr r1, [r0, #0x1c] - orr r1, r1, #0x2 - str r1, [r0, #0x1c] - mov r0, #0x1 - bx lr - .balign 4 -_020D0FE8: .word FSi_ReadMemCallback -_020D0FEC: .word FSi_WriteMemCallback - - arm_func_start FUN_020D0FF0 -FUN_020D0FF0: ; 0x020D0FF0 - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r0, [r4, #0x0] - cmp r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - bl OS_DisableInterrupts - ldr r2, [r4, #0x4] - mov r3, #0x0 - cmp r2, #0x0 - ldrne r1, [r4, #0x8] - strne r1, [r2, #0x8] - ldr r2, [r4, #0x8] - cmp r2, #0x0 - ldrne r1, [r4, #0x4] - strne r1, [r2, #0x4] - str r3, [r4, #0x0] - str r3, [r4, #0x8] - ldr r1, [r4, #0x8] - ldr r2, _020D1080 ; =0x021D53EC - str r1, [r4, #0x4] - ldr r1, [r4, #0x1c] - bic r1, r1, #0x1 - str r1, [r4, #0x1c] - ldr r1, [r2, #0x0] - cmp r1, r4 - bne _020D1074 - ldr r1, _020D1084 ; =0x021D53E8 - str r3, [r2, #0x8] - ldr r1, [r1, #0x0] - strh r3, [r2, #0x6] - str r1, [r2, #0x0] - strh r3, [r2, #0x4] -_020D1074: - bl OS_RestoreInterrupts - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D1080: .word 0x021D53EC -_020D1084: .word 0x021D53E8 - - arm_func_start FS_RegisterArchiveName -FS_RegisterArchiveName: ; 0x020D1088 - stmdb sp!, {r4-r8,lr} - mov r6, r1 - mov r5, r2 - mov r7, r0 - mov r8, #0x0 - bl OS_DisableInterrupts - mov r4, r0 - mov r0, r6 - mov r1, r5 - bl FS_FindArchive -_020D10B0: - cmp r0, #0x0 - bne _020D112C - ldr r1, _020D1140 - ldr r2, [r1] - cmp r2, #0x0 - bne _020D10E8 - ldr r0, _020D1144 - mov r2, r8 - str r7, [r1] - str r7, [r0] - str r2, [r0, #0x8] - strh r2, [r0, #0x6] - strh r2, [r0, #0x4] - b _020D110C -_020D10E8: - ldr r0, [r2, #0x4] - cmp r0, #0x0 - beq _020D1104 -_020D10F4: - mov r2, r0 - ldr r0, [r0, #0x4] - cmp r0, #0x0 - bne _020D10F4 -_020D1104: - str r7, [r2, #0x4] - str r2, [r7, #0x8] -_020D110C: - mov r0, r6 - mov r1, r5 - bl FSi_GetPackedName - str r0, [r7] - ldr r0, [r7, #0x1C] - mov r8, #0x1 - orr r0, r0, #0x1 - str r0, [r7, #0x1C] -_020D112C: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, r8 - ldmia sp!, {r4-r8,lr} - bx lr -_020D1140: .word 0x021D53E8 -_020D1144: .word 0x021D53EC - - arm_func_start FS_FindArchive -FS_FindArchive: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl FSi_GetPackedName - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, _020D1194 ; =0x021D53E8 - ldr r4, [r1, #0x0] - b _020D116C -_020D1168: - ldr r4, [r4, #0x4] -_020D116C: - cmp r4, #0x0 - beq _020D1180 - ldr r1, [r4, #0x0] - cmp r1, r5 - bne _020D1168 -_020D1180: - bl OS_RestoreInterrupts - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D1194: .word 0x021D53E8 - - arm_func_start FS_InitArchive -FS_InitArchive: ; 0x020D1198 - stmdb sp!, {r4,lr} - mov r1, #0x0 - mov r2, #0x5c - mov r4, r0 - bl MI_CpuFill8 - mov r1, #0x0 - str r1, [r4, #0x10] - ldr r0, [r4, #0x10] - str r0, [r4, #0xc] - str r1, [r4, #0x18] - ldr r0, [r4, #0x18] - str r0, [r4, #0x14] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start FSi_SendCommand -FSi_SendCommand: - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - ldr r6, [r7, #0x8] - mov r2, #0x1 - str r1, [r7, #0x10] - mov r0, #0x2 - str r0, [r7, #0x14] - ldr r0, [r7, #0xc] - mov r5, r2, lsl r1 - orr r0, r0, #0x1 - str r0, [r7, #0xc] - bl OS_DisableInterrupts - ldr r1, [r6, #0x1c] - mov r4, r0 - ands r0, r1, #0x80 - beq _020D1238 - mov r0, r7 - mov r1, #0x3 - bl FSi_ReleaseCommand - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020D1238: - ands r0, r5, #0x1fc - ldrne r0, [r7, #0xc] - add r2, r6, #0x20 - orrne r0, r0, #0x4 - strne r0, [r7, #0xc] - ldr r1, [r7, #0x0] - ldr r0, [r7, #0x4] - cmp r1, #0x0 - strne r0, [r1, #0x4] - cmp r0, #0x0 - strne r1, [r0, #0x0] - ldr r0, [r2, #0x4] - cmp r0, #0x0 - beq _020D1280 -_020D1270: - mov r2, r0 - ldr r0, [r0, #0x4] - cmp r0, #0x0 - bne _020D1270 -_020D1280: - str r7, [r2, #0x4] - str r2, [r7, #0x0] - mov r1, #0x0 - str r1, [r7, #0x4] - ldr r0, [r6, #0x1c] - ands r0, r0, #0x8 - movne r1, #0x1 - cmp r1, #0x0 - bne _020D132C - ldr r0, [r6, #0x1c] - ands r0, r0, #0x10 - bne _020D132C - ldr r1, [r6, #0x1c] - mov r0, r4 - orr r1, r1, #0x10 - str r1, [r6, #0x1c] - bl OS_RestoreInterrupts - ldr r0, [r6, #0x58] - ands r0, r0, #0x200 - beq _020D12E0 - ldr r2, [r6, #0x54] - mov r0, r7 - mov r1, #0x9 - blx r2 -_020D12E0: - bl OS_DisableInterrupts - ldr r1, [r7, #0xc] - orr r1, r1, #0x40 - str r1, [r7, #0xc] - ldr r1, [r7, #0xc] - ands r1, r1, #0x4 - movne r1, #0x1 - moveq r1, #0x0 - cmp r1, #0x0 - bne _020D1324 - bl OS_RestoreInterrupts - mov r0, r7 - bl FSi_ExecuteAsyncCommand - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020D1324: - bl OS_RestoreInterrupts - b _020D1378 -_020D132C: - ldr r0, [r7, #0xc] - ands r0, r0, #0x4 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - bne _020D135C - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020D135C: - add r0, r7, #0x18 - bl OS_SleepThread - ldr r0, [r7, #0xc] - ands r0, r0, #0x40 - beq _020D135C - mov r0, r4 - bl OS_RestoreInterrupts -_020D1378: - mov r0, r7 - bl FSi_ExecuteSyncCommand - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start FSi_ExecuteSyncCommand -FSi_ExecuteSyncCommand: ; 0x020D138C - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r1, [r4, #0x10] - bl FSi_TranslateCommand - mov r1, r0 - mov r0, r4 - bl FSi_ReleaseCommand - ldr r0, [r4, #0x8] - bl FSi_NextCommand -_020D13B0: - cmp r0, #0x0 - beq _020D13BC - bl FSi_ExecuteAsyncCommand -_020D13BC: - ldr r0, [r4, #0x14] - cmp r0, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start FSi_ExecuteAsyncCommand -FSi_ExecuteAsyncCommand: ; 0x020D13D4 - stmdb sp!, {r4-r8,lr} - movs r6, r0 - ldr r5, [r6, #0x8] - ldmeqia sp!, {r4-r8,lr} - bxeq lr - mov r7, #0x0 - mov r8, #0x1 -_020D13F0: - bl OS_DisableInterrupts - ldr r1, [r6, #0xc] - mov r4, r0 - orr r0, r1, #0x40 - str r0, [r6, #0xc] - ldr r0, [r6, #0xc] - ands r0, r0, #0x4 - movne r0, r8 - moveq r0, r7 - cmp r0, #0x0 - beq _020D1434 - add r0, r6, #0x18 - bl OS_WakeupThread - mov r0, r4 - bl OS_RestoreInterrupts - ldmia sp!, {r4-r8,lr} - bx lr -_020D1434: - ldr r1, [r6, #0xc] - mov r0, r4 - orr r1, r1, #0x8 - str r1, [r6, #0xc] - bl OS_RestoreInterrupts - ldr r1, [r6, #0x10] - mov r0, r6 - bl FSi_TranslateCommand - cmp r0, #0x6 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - mov r0, r5 - bl FSi_NextCommand - movs r6, r0 - bne _020D13F0 - ldmia sp!, {r4-r8,lr} - bx lr - - arm_func_start FSi_NextCommand -FSi_NextCommand: - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4c - mov r6, r0 - bl OS_DisableInterrupts - ldr r1, [r6, #0x1c] - mov r5, r0 - ands r0, r1, #0x20 - beq _020D1500 - ldr r0, [r6, #0x1c] - bic r0, r0, #0x20 - str r0, [r6, #0x1c] - ldr r0, [r6, #0x24] - cmp r0, #0x0 - beq _020D1500 - mov r8, #0x0 - mov r9, #0x1 - mov r7, #0x3 -_020D14BC: - ldr r1, [r0, #0xc] - ldr r4, [r0, #0x4] - ands r1, r1, #0x2 - movne r1, r9 - moveq r1, r8 - cmp r1, #0x0 - beq _020D14F4 - ldr r1, [r6, #0x24] - cmp r1, r0 - mov r1, r7 - streq r4, [r6, #0x24] - bl FSi_ReleaseCommand -_020D14EC: - cmp r4, #0x0 - ldreq r4, [r6, #0x24] -_020D14F4: - mov r0, r4 - cmp r4, #0x0 - bne _020D14BC -_020D1500: - ldr r0, [r6, #0x1c] - ands r0, r0, #0x40 - bne _020D15EC - ldr r0, [r6, #0x1c] - ands r0, r0, #0x8 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - bne _020D15EC - ldr r4, [r6, #0x24] - cmp r4, #0x0 - beq _020D15EC - ldr r0, [r6, #0x1c] - ands r0, r0, #0x10 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - moveq r7, #0x1 - movne r7, #0x0 - cmp r7, #0x0 - ldrne r0, [r6, #0x1c] - orrne r0, r0, #0x10 - strne r0, [r6, #0x1c] - mov r0, r5 - bl OS_RestoreInterrupts -_020D1564: - cmp r7, #0x0 - beq _020D1588 - ldr r0, [r6, #0x58] - ands r0, r0, #0x200 - beq _020D1588 - ldr r2, [r6, #0x54] - mov r0, r4 - mov r1, #0x9 - blx r2 -_020D1588: - bl OS_DisableInterrupts - ldr r1, [r4, #0xC] - mov r5, r0 - orr r0, r1, #0x40 - str r0, [r4, #0xC] - ldr r0, [r4, #0xC] - ands r0, r0, #0x4 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - beq _020D15D4 - add r0, r4, #0x18 - bl OS_WakeupThread - mov r0, r5 - bl OS_RestoreInterrupts - add sp, sp, #0x4c - mov r0, #0x0 - ldmia sp!, {r4-r9, lr} - bx lr -_020D15D4: - mov r0, r5 - bl OS_RestoreInterrupts - add sp, sp, #0x4c - mov r0, r4 - ldmia sp!, {r4-r9, lr} - bx lr -_020D15EC: - ldr r0, [r6, #0x1c] - ands r0, r0, #0x10 - beq _020D162C - ldr r0, [r6, #0x1c] - bic r0, r0, #0x10 - str r0, [r6, #0x1c] - ldr r0, [r6, #0x58] - ands r0, r0, #0x400 - beq _020D162C - add r0, sp, #0x0 - bl FS_InitFile - str r6, [sp, #0x8] - ldr r2, [r6, #0x54] - add r0, sp, #0x0 - mov r1, #0xa - blx r2 -_020D162C: - ldr r0, [r6, #0x1c] - ands r0, r0, #0x40 - beq _020D1658 - ldr r1, [r6, #0x1c] - add r0, r6, #0x14 - bic r1, r1, #0x40 - str r1, [r6, #0x1c] - ldr r1, [r6, #0x1c] - orr r1, r1, #0x8 - str r1, [r6, #0x1c] - bl OS_WakeupThread -_020D1658: - mov r0, r5 - bl OS_RestoreInterrupts -_020D1660: - mov r0, #0x0 - add sp, sp, #0x4c - ldmia sp!, {r4-r9, lr} - bx lr - - arm_func_start FSi_ReadMemoryCore -FSi_ReadMemoryCore: ; 0x020D1670 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r0, r2 - mov r2, r3 - bl MI_CpuCopy8 -_020D1684: - mov r0, #0x0 - add sp, sp, #0x4 - ldmfd sp!, {lr} - bx lr - - arm_func_start FSi_WriteMemCallback -FSi_WriteMemCallback: ; 0x020D1694 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r12, [r0, #0x28] - mov r0, r1 - add r1, r12, r2 - mov r2, r3 - bl MI_CpuCopy8 -_020D16B0: - mov r0, #0x0 - add sp, sp, #0x4 - ldmfd sp!, {lr} - bx lr - - arm_func_start FSi_ReadMemCallback -FSi_ReadMemCallback: ; 0x020D16C0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, [r0, #0x28] - add r0, r0, r2 - mov r2, r3 - bl MI_CpuCopy8 -_020D16D8: - mov r0, #0x0 - add sp, sp, #0x4 - ldmfd sp!, {lr} - bx lr - - arm_func_start FSi_GetPackedName -FSi_GetPackedName: ; 0x020D16E8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r1, #0x3 - mov lr, #0x0 - bgt _020D173C - mov r12, lr - cmp r1, #0x0 - ble _020D173C - mov r3, lr -_020D170C: - ldrb r2, [r0, r12] - cmp r2, #0x0 - beq _020D173C - sub r2, r2, #0x41 - cmp r2, #0x19 - addls r2, r2, #0x61 - addhi r2, r2, #0x41 - add r12, r12, #0x1 - orr lr, lr, r2, lsl r3 - cmp r12, r1 - add r3, r3, #0x8 - blt _020D170C -_020D173C: - mov r0, lr - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start FS_ChangeDir -FS_ChangeDir: ; 0x020D174C - stmdb sp!, {r4,lr} - sub sp, sp, #0x58 - mov r4, r0 - add r0, sp, #0xc - bl FS_InitFile - add r0, sp, #0xc - add r3, sp, #0x0 - mov r1, r4 - mov r2, #0x0 - bl FSi_FindPath -_020D1774: - cmp r0, #0x0 - moveq r0, #0x0 - addne r0, sp, #0x0 - ldrne r3, _020D179C - ldmneia r0, {r0, r1, r2} - stmneia r3, {r0, r1, r2} - movne r0, #0x1 - add sp, sp, #0x58 - ldmia sp!, {r4, lr} - bx lr -_020D179C: .word 0x021D53EC - - arm_func_start FS_SeekFile -FS_SeekFile: ; 0x020D17A0 - cmp r2, #0x0 - beq _020D17BC - cmp r2, #0x1 - beq _020D17C8 - cmp r2, #0x2 - beq _020D17D4 - b _020D17E0 -_020D17BC: - ldr r2, [r0, #0x24] - add r1, r1, r2 - b _020D17E8 -_020D17C8: - ldr r2, [r0, #0x2c] - add r1, r1, r2 - b _020D17E8 -_020D17D4: - ldr r2, [r0, #0x28] - add r1, r1, r2 - b _020D17E8 -_020D17E0: - mov r0, #0x0 - bx lr -_020D17E8: - ldr r2, [r0, #0x24] - cmp r1, r2 - movlt r1, r2 - ldr r2, [r0, #0x28] - cmp r1, r2 - movgt r1, r2 - str r1, [r0, #0x2c] - mov r0, #0x1 - bx lr - - arm_func_start FS_ReadFile -FS_ReadFile: ; 0x020D180C - ldr ip, _020D1818 ; =FUN_020D1AAC - mov r3, #0x0 - bx r12 - .balign 4 -_020D1818: .word FUN_020D1AAC - - arm_func_start FS_ReadFileAsync -FS_ReadFileAsync: ; 0x020D181C - ldr ip, _020D1828 ; =FUN_020D1AAC - mov r3, #0x1 - bx r12 - .balign 4 -_020D1828: .word FUN_020D1AAC - - arm_func_start FS_WaitAsync -FS_WaitAsync: ; 0x020D182C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r6, r0 - mov r5, #0x0 - bl OS_DisableInterrupts - ldr r1, [r6, #0xc] - mov r4, r0 - ands r0, r1, #0x1 - movne r0, #0x1 - moveq r0, r5 - cmp r0, #0x0 - beq _020D18BC - ldr r0, [r6, #0xc] - ands r0, r0, #0x44 - moveq r5, #0x1 - movne r5, #0x0 - cmp r5, #0x0 - beq _020D189C - ldr r0, [r6, #0xc] - orr r0, r0, #0x4 - str r0, [r6, #0xc] - add r7, r6, #0x18 -_020D1884: - mov r0, r7 - bl OS_SleepThread - ldr r0, [r6, #0xc] - ands r0, r0, #0x40 - beq _020D1884 - b _020D18BC -_020D189C: - add r0, r6, #0x18 - bl OS_SleepThread - ldr r0, [r6, #0xc] - ands r0, r0, #0x1 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - bne _020D189C -_020D18BC: - mov r0, r4 - bl OS_RestoreInterrupts -_020D18C4: - cmp r5, #0x0 - beq _020D18E0 - mov r0, r6 - bl FSi_ExecuteSyncCommand - add sp, sp, #4 - ldmia sp!, {r4-r7,lr} - bx lr -_020D18E0: - ldr r0, [r6, #0x14] - cmp r0, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start FS_CloseFile -FS_CloseFile: ; 0x020D18FC - stmdb sp!, {r4,lr} - mov r1, #0x8 - mov r4, r0 - bl FSi_SendCommand -_020D190C: - cmp r0, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - mov r0, #0x0 - str r0, [r4, #0x8] - mov r0, #0xE - str r0, [r4, #0x10] - ldr r1, [r4, #0xC] - mov r0, #0x1 - bic r1, r1, #0x30 - str r1, [r4, #0xC] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start FS_OpenFile -FS_OpenFile: ; 0x020D1944 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - mov r4, r0 - add r0, sp, #0x0 - bl FS_ConvertPathToFileID -_020D1958: - cmp r0, #0x0 - beq _020D1984 - add r1, sp, #0x0 - mov r0, r4 - ldmia r1, {r1, r2} - bl FS_OpenFileFast - cmp r0, #0x0 - addne sp, sp, #0x8 - movne r0, #0x1 - ldmneia sp!, {r4, lr} - bxne lr -_020D1984: - mov r0, #0x0 - add sp, sp, #0x8 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start FS_OpenFileFast -FS_OpenFileFast: - stmdb sp!, {r0-r3} - stmdb sp!, {r4,lr} - ldr r1, [sp, #0xc] - mov r4, r0 - cmp r1, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - addeq sp, sp, #0x10 - bxeq lr - str r1, [r4, #0x8] - ldr r3, [sp, #0xc] - ldr r2, [sp, #0x10] - mov r1, #0x6 - str r3, [r4, #0x30] - str r2, [r4, #0x34] - bl FSi_SendCommand -_020D19D4: - cmp r0, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4, lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r1, [r4, #0xC] - mov r0, #0x1 - orr r1, r1, #0x10 - str r1, [r4, #0xC] - ldr r1, [r4, #0xC] - bic r1, r1, #0x20 - str r1, [r4, #0xC] - ldmia sp!, {r4, lr} - add sp, sp, #0x10 - bx lr - - arm_func_start FS_OpenFileDirect -FS_OpenFileDirect: - stmdb sp!, {r4,lr} - mov r4, r0 - str r1, [r4, #0x8] - ldr r12, [sp, #0x8] - mov r1, #0x7 - str r12, [r4, #0x38] - str r2, [r4, #0x30] - str r3, [r4, #0x34] - bl FSi_SendCommand -_020D1A34: - cmp r0, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4, lr} - bxeq lr - ldr r1, [r4, #0xC] - mov r0, #0x1 - orr r1, r1, #0x10 - str r1, [r4, #0xC] - ldr r1, [r4, #0xC] - bic r1, r1, #0x20 - str r1, [r4, #0xC] - ldmia sp!, {r4, lr} - bx lr - - arm_func_start FS_ConvertPathToFileID -FS_ConvertPathToFileID: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4c - mov r5, r0 - add r0, sp, #0x0 - mov r4, r1 - bl FS_InitFile -_020D1A80: - add r0, sp, #0x0 - mov r1, r4 - mov r2, r5 - mov r3, #0x0 - bl FSi_FindPath - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - add sp, sp, #0x4C - ldmia sp!, {r4-r5, lr} - bx lr - - arm_func_start FUN_020D1AAC -FUN_020D1AAC: ; 0x020D1AAC - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - ldr r4, [r7, #0x2c] - ldr r0, [r7, #0x28] - mov r6, r2 - str r1, [r7, #0x30] - sub r0, r0, r4 - cmp r6, r0 - movgt r6, r0 - cmp r6, #0x0 - movlt r6, #0x0 - str r2, [r7, #0x34] - mov r5, r3 - str r6, [r7, #0x38] - cmp r5, #0x0 - ldreq r0, [r7, #0xc] - mov r1, #0x0 - orreq r0, r0, #0x4 - streq r0, [r7, #0xc] - mov r0, r7 - bl FSi_SendCommand -_020D1B04: - cmp r5, #0x0 - bne _020D1B24 - mov r0, r7 - bl FS_WaitAsync - cmp r0, #0x0 - ldrne r0, [r7, #0x2C] - subne r6, r0, r4 - mvneq r6, #0x0 -_020D1B24: - mov r0, r6 - add sp, sp, #0x4 - ldmia sp!, {r4-r7, lr} - bx lr - - arm_func_start FSi_FindPath -FSi_FindPath: - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x10 - mov r7, r1 - ldrb r1, [r7, #0x0] - mov r8, r0 - mov r6, r2 - mov r5, r3 - cmp r1, #0x2f - beq _020D1B60 - cmp r1, #0x5c - bne _020D1B84 -_020D1B60: - ldr r0, _020D1C90 ; =0x021D53EC - mov r1, #0x0 - ldr r0, [r0, #0x0] - strh r1, [sp, #0x4] - str r0, [sp, #0x0] - str r1, [sp, #0x8] - strh r1, [sp, #0x6] - add r7, r7, #0x1 - b _020D1C40 -_020D1B84: - ldr r0, _020D1C90 ; =0x021D53EC - add r3, sp, #0x0 - ldmia r0, {r0-r2} - stmia r3, {r0-r2} - mov r4, #0x0 -_020D1B98: - ldrb r0, [r7, r4] - cmp r0, #0x0 - beq _020D1C40 - cmp r0, #0x2f - beq _020D1C40 - cmp r0, #0x5c - beq _020D1C40 - cmp r0, #0x3a - bne _020D1C34 - mov r0, r7 - mov r1, r4 - bl FS_FindArchive -_020D1BC8: - cmp r0, #0x0 - addeq sp, sp, #0x10 - moveq r0, #0x0 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - ldr r1, [r0, #0x1C] - ands r1, r1, #0x2 - movne r1, #0x1 - moveq r1, #0x0 - cmp r1, #0x0 - addeq sp, sp, #0x10 - moveq r0, #0x0 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - mov r1, #0x0 - str r0, [sp] - str r1, [sp, #0x8] - strh r1, [sp, #0x6] - strh r1, [sp, #0x4] - add r0, r4, #0x1 - ldrb r0, [r7, r0]! - cmp r0, #0x2f - beq _020D1C2C - cmp r0, #0x5c - bne _020D1C40 -_020D1C2C: - add r7, r7, #0x1 - b _020D1C40 -_020D1C34: - add r4, r4, #0x1 - cmp r4, #0x3 - ble _020D1B98 -_020D1C40: - ldr r1, [sp, #0x0] - add r0, sp, #0x0 - str r1, [r8, #0x8] - str r7, [r8, #0x3c] - add r3, r8, #0x30 - ldmia r0, {r0-r2} - stmia r3, {r0-r2} - cmp r5, #0x0 - movne r0, #0x1 - strne r0, [r8, #0x40] - strne r5, [r8, #0x44] - moveq r0, #0x0 - streq r0, [r8, #0x40] - mov r0, r8 - mov r1, #0x4 - streq r6, [r8, #0x44] - bl FSi_SendCommand - add sp, sp, #0x10 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020D1C90: .word 0x021D53EC - - arm_func_start FS_InitFile -FS_InitFile: - mov r3, #0x0 - str r3, [r0, #0x0] - ldr r2, [r0, #0x0] - mov r1, #0xe - str r2, [r0, #0x4] - str r3, [r0, #0x1c] - ldr r2, [r0, #0x1c] - str r2, [r0, #0x18] - str r3, [r0, #0x8] - str r1, [r0, #0x10] - str r3, [r0, #0xc] - bx lr - - arm_func_start FS_IsAvailable -FS_IsAvailable: ; 0x020D1CC4 - ldr r0, _020D1CD0 ; =0x021D53F8 - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020D1CD0: .word 0x021D53F8 - - arm_func_start FS_Init -FS_Init: ; 0x020D1CD4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D1D0C ; =0x021D53F8 - ldr r2, [r1, #0x0] - cmp r2, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - mov r2, #0x1 - str r2, [r1, #0x0] - bl FSi_InitRom - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D1D0C: .word 0x021D53F8 - - arm_func_start FS_TryLoadTable -FS_TryLoadTable: ; 0x020D1D10 - ldr ip, _020D1D28 ; =FUN_020D0D84 - mov r3, r0 - mov r2, r1 - ldr r0, _020D1D2C ; =0x021D5414 - mov r1, r3 - bx r12 - .balign 4 -_020D1D28: .word FUN_020D0D84 -_020D1D2C: .word 0x021D5414 - - arm_func_start FS_SetDefaultDMA -FS_SetDefaultDMA: ; 0x020D1D30 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - bl OS_DisableInterrupts - mov r5, r0 - ldr r1, _020D1D7C ; =0x021D5400 - ldr r0, _020D1D80 ; =0x021D5414 - ldr r4, [r1, #0x0] - bl FS_SuspendArchive - ldr r1, _020D1D7C ; =0x021D5400 - cmp r0, #0x0 - str r6, [r1, #0x0] - beq _020D1D68 - ldr r0, _020D1D80 ; =0x021D5414 - bl FS_ResumeArchive -_020D1D68: - mov r0, r5 - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D1D7C: .word 0x021D5400 -_020D1D80: .word 0x021D5414 - - arm_func_start FSi_InitRom -FSi_InitRom: ; 0x020D1D84 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x14 - ldr r1, _020D1EE8 ; =0x021D5400 - str r0, [r1, #0x0] - bl OS_GetLockID - ldr r3, _020D1EEC ; =0x021D53FC - ldr r2, _020D1EF0 ; =0x021D5404 - mov r12, #0x0 - ldr r1, _020D1EF4 ; =0x021D540C - str r0, [r3, #0x0] - str r12, [r2, #0x0] - str r12, [r2, #0x4] - str r12, [r1, #0x0] - str r12, [r1, #0x4] - bl CARD_Init - ldr r0, _020D1EF8 ; =0x021D5414 - bl FS_InitArchive - ldr r0, _020D1EF8 ; =0x021D5414 - ldr r1, _020D1EFC ; =0x02106830 - mov r2, #0x3 - bl FS_RegisterArchiveName - ldr r0, _020D1F00 ; =0x027FFC40 - ldrh r0, [r0, #0x0] - cmp r0, #0x2 - bne _020D1E4C - ldr ip, _020D1EF0 ; =0x021D5404 - mvn r2, #0x0 - ldr r3, _020D1EF4 ; =0x021D540C - mov lr, #0x0 - ldr r0, _020D1EF8 ; =0x021D5414 - ldr r1, _020D1F04 ; =FSi_EmptyArchiveProc - str r2, [r12, #0x0] - str lr, [r12, #0x4] - str r2, [r3, #0x0] - str lr, [r3, #0x4] - bl FS_SetArchiveProc - mov r1, #0x0 - str r1, [sp, #0x0] - ldr r0, _020D1F08 ; =FSi_ReadDummyCallback - str r1, [sp, #0x4] - str r0, [sp, #0x8] - ldr ip, _020D1F0C ; =FSi_WriteDummyCallback - ldr r0, _020D1EF8 ; =0x021D5414 - mov r2, r1 - mov r3, r1 - str r12, [sp, #0xc] - bl FS_LoadArchive - add sp, sp, #0x14 - ldmia sp!, {r4-r5,lr} - bx lr -_020D1E4C: - ldr r5, _020D1F10 ; =0x027FFE40 - ldr r0, _020D1EF8 ; =0x021D5414 - ldr r1, _020D1F14 ; =FSi_RomArchiveProc - ldr r2, _020D1F18 ; =0x00000602 - ldr r4, _020D1F1C ; =0x027FFE48 - bl FS_SetArchiveProc - ldr r1, [r5, #0x0] - mvn r0, #0x0 - cmp r1, r0 - addeq sp, sp, #0x14 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - cmp r1, #0x0 - addeq sp, sp, #0x14 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r2, [r4, #0x0] - cmp r2, r0 - addeq sp, sp, #0x14 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - cmp r2, #0x0 - addeq sp, sp, #0x14 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - str r1, [sp, #0x0] - ldr r0, [r5, #0x4] - ldr r1, _020D1F20 ; =FSi_ReadRomCallback - str r0, [sp, #0x4] - ldr r0, _020D1F0C ; =FSi_WriteDummyCallback - str r1, [sp, #0x8] - str r0, [sp, #0xc] - ldr r3, [r4, #0x4] - ldr r0, _020D1EF8 ; =0x021D5414 - mov r1, #0x0 - bl FS_LoadArchive - add sp, sp, #0x14 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D1EE8: .word 0x021D5400 -_020D1EEC: .word 0x021D53FC -_020D1EF0: .word 0x021D5404 -_020D1EF4: .word 0x021D540C -_020D1EF8: .word 0x021D5414 -_020D1EFC: .word 0x02106830 -_020D1F00: .word 0x027FFC40 -_020D1F04: .word FSi_EmptyArchiveProc -_020D1F08: .word FSi_ReadDummyCallback -_020D1F0C: .word FSi_WriteDummyCallback -_020D1F10: .word 0x027FFE40 -_020D1F14: .word FSi_RomArchiveProc -_020D1F18: .word 0x00000602 -_020D1F1C: .word 0x027FFE48 -_020D1F20: .word FSi_ReadRomCallback - - arm_func_start FSi_EmptyArchiveProc -FSi_EmptyArchiveProc: ; 0x020D1F24 - mov r0, #0x4 - bx lr - - arm_func_start FSi_ReadDummyCallback -FSi_ReadDummyCallback: ; 0x020D1F2C - mov r0, #0x1 - bx lr - - arm_func_start FSi_RomArchiveProc -FSi_RomArchiveProc: ; 0x020D1F34 - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r1, #0x1 - beq _020D1FA0 - cmp r1, #0x9 - beq _020D1F58 - cmp r1, #0xa - beq _020D1F7C - b _020D1FB0 -_020D1F58: - ldr r0, _020D1FC0 ; =0x021D53FC - ldr r0, [r0, #0x0] - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl CARD_LockRom - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {lr} - bx lr -_020D1F7C: - ldr r0, _020D1FC0 ; =0x021D53FC - ldr r0, [r0, #0x0] - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl CARD_UnlockRom - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {lr} - bx lr -_020D1FA0: - add sp, sp, #0x4 - mov r0, #0x4 - ldmia sp!, {lr} - bx lr -_020D1FB0: - mov r0, #0x8 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D1FC0: .word 0x021D53FC - - arm_func_start FSi_WriteDummyCallback -FSi_WriteDummyCallback: ; 0x020D1FC4 - mov r0, #0x1 - bx lr - - arm_func_start FSi_ReadRomCallback -FSi_ReadRomCallback: ; 0x020D1FCC - stmdb sp!, {lr} - sub sp, sp, #0xc - ldr ip, _020D2010 ; =FSi_OnRomReadDone - mov lr, r1 - str r12, [sp, #0x0] - str r0, [sp, #0x4] - mov r1, #0x1 - ldr r0, _020D2014 ; =0x021D5400 - str r1, [sp, #0x8] - mov r1, r2 - ldr r0, [r0, #0x0] - mov r2, lr - bl CARDi_ReadRom - mov r0, #0x6 - add sp, sp, #0xc - ldmia sp!, {lr} - bx lr - .balign 4 -_020D2010: .word FSi_OnRomReadDone -_020D2014: .word 0x021D5400 - - arm_func_start FSi_OnRomReadDone -FSi_OnRomReadDone: ; 0x020D2018 - stmdb sp!, {r4,lr} - mov r4, r0 - bl CARD_IsPulledOut -_020D2024: - cmp r0, #0x0 - movne r1, #0x5 - moveq r1, #0x0 - mov r0, r4 - bl FS_NotifyArchiveAsyncEnd - ldmia sp!, {r4,lr} - bx lr - - - arm_func_start FS_UnloadOverlay -FS_UnloadOverlay: ; 0x020D2040 - stmdb sp!, {lr} - sub sp, sp, #0x2c - mov r3, r0 - mov r2, r1 - add r0, sp, #0x0 - mov r1, r3 - bl FS_LoadOverlayInfo -_020D205C: - cmp r0, #0x0 - beq _020D2074 - add r0, sp, #0x0 - bl FS_UnloadOverlayImage - cmp r0, #0x0 - bne _020D2084 -_020D2074: - add sp, sp, #0x2c - mov r0, #0x0 - ldmfd sp!, {lr} - bx lr -_020D2084: - mov r0, #0x1 - add sp, sp, #0x2c - ldmfd sp!, {lr} - bx lr - - arm_func_start FS_LoadOverlay -FS_LoadOverlay: ; 0x020D2094 - stmdb sp!, {lr} - sub sp, sp, #0x2c - mov r3, r0 - mov r2, r1 - add r0, sp, #0x0 - mov r1, r3 - bl FS_LoadOverlayInfo -_020D20B0: - cmp r0, #0x0 - beq _020D20C8 - add r0, sp, #0x0 - bl FS_LoadOverlayImage - cmp r0, #0x0 - bne _020D20D8 -_020D20C8: - add sp, sp, #0x2c - mov r0, #0x0 - ldmfd sp!, {lr} - bx lr -_020D20D8: - add r0, sp, #0x0 - bl FS_StartOverlay - mov r0, #0x1 - add sp, sp, #0x2c - ldmfd sp!, {lr} - bx lr - - arm_func_start FS_UnloadOverlayImage -FS_UnloadOverlayImage: ; 0x020D20F0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl FS_EndOverlay - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start FS_EndOverlay -FS_EndOverlay: ; 0x020D210C - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - ldr r8, _020D220C ; =0x021D74C8 - mov r11, r0 - mov r9, #0x0 -_020D2120: - ldr r1, [r11, #0x8] - ldr r0, [r11, #0xc] - ldr r5, [r11, #0x4] - add r0, r1, r0 - mov r7, r9 - mov r6, r9 - add r4, r5, r0 - bl OS_DisableInterrupts - ldr lr, [r8, #0x0] - mov r10, r9 - mov r12, lr - cmp lr, #0x0 - beq _020D21C4 -_020D2154: - ldr r2, [r12, #0x8] - ldr r3, [r12, #0x0] - cmp r2, #0x0 - ldr r1, [r12, #0x4] - bne _020D2178 - cmp r1, r5 - blo _020D2178 - cmp r1, r4 - blo _020D2188 -_020D2178: - cmp r2, r5 - blo _020D21B4 - cmp r2, r4 - bhs _020D21B4 -_020D2188: - cmp r6, #0x0 - strne r12, [r6, #0x0] - moveq r7, r12 - cmp lr, r12 - streq r3, [r8, #0x0] - moveq lr, r3 - str r9, [r12, #0x0] - cmp r10, #0x0 - mov r6, r12 - strne r3, [r10, #0x0] - b _020D21B8 -_020D21B4: - mov r10, r12 -_020D21B8: - mov r12, r3 - cmp r3, #0x0 - bne _020D2154 -_020D21C4: - bl OS_RestoreInterrupts -_020D21C8: - cmp r7, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r11, lr} - bxeq lr -_020D21D8: - ldr r1, [r7, #0x4] - ldr r4, [r7] - cmp r1, #0x0 - beq _020D21F0 - ldr r0, [r7, #0x8] - blx r1 -_020D21F0: - mov r7, r4 - cmp r4, #0x0 - bne _020D21D8 - b _020D2120 - add sp, sp, #0x4 - ldmia sp!, {r4-r11, lr} - bx lr -_020D220C: .word 0x021D74C8 - - arm_func_start FS_StartOverlay -FS_StartOverlay: ; 0x020D2210 - stmdb sp!, {r4-r6,lr} - mov r5, r0 - bl FSi_GetOverlayBinarySize - ldr r1, _020D2300 ; =0x027FFC40 - mov r4, r0 - ldrh r0, [r1, #0x0] - cmp r0, #0x2 - bne _020D22A4 - ldrb r1, [r5, #0x1f] - mov r0, #0x0 - ands r1, r1, #0x2 - beq _020D2280 - ldr r1, _020D2304 ; =0x02106F84 - ldr r3, _020D2308 ; =0x02106F84 - ldr r2, _020D230C ; =0x66666667 - sub r12, r1, r3 - smull r1, lr, r2, r12 - mov lr, lr, asr #0x3 - mov r1, r12, lsr #0x1f - ldr r2, [r5, #0x0] - add lr, r1, lr - cmp r2, lr - bhs _020D2280 - mov r0, #0x14 - mla r0, r2, r0, r3 - ldr r1, [r5, #0x4] - mov r2, r4 - bl FSi_CompareDigest -_020D2280: - cmp r0, #0x0 - bne _020D22A4 - ldr r0, [r5, #0x4] - mov r2, r4 - mov r1, #0x0 - bl MI_CpuFill8 - bl OS_Terminate - ldmia sp!, {r4-r6,lr} - bx lr -_020D22A4: - ldrb r0, [r5, #0x1f] - ands r0, r0, #0x1 - beq _020D22BC - ldr r0, [r5, #0x4] - add r0, r0, r4 - bl MIi_UncompressBackward -_020D22BC: - ldr r0, [r5, #0x4] - ldr r1, [r5, #0x8] - bl DC_FlushRange - ldr r6, [r5, #0x10] - ldr r4, [r5, #0x14] - cmp r6, r4 - ldmcsia sp!, {r4-r6,lr} - bxcs lr -_020D22DC: - ldr r0, [r6, #0x0] - cmp r0, #0x0 - beq _020D22EC - blx r0 -_020D22EC: - add r6, r6, #0x4 - cmp r6, r4 - blo _020D22DC - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D2300: .word 0x027FFC40 -_020D2304: .word 0x02106F84 -_020D2308: .word 0x02106F84 -_020D230C: .word 0x66666667 - - arm_func_start FSi_CompareDigest -FSi_CompareDigest: - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x58 - mov r4, r0 - mov r6, r1 - mov r5, r2 - add r0, sp, #0x4 - mov r1, #0x0 - mov r2, #0x14 - bl MI_CpuFill8 - ldr r0, _020D23AC ; =0x02106834 - ldr r1, _020D23B0 ; =0x02106838 - ldr r0, [r0, #0x0] - ldr r2, [r1, #0x0] - add r1, sp, #0x18 - bl MI_CpuCopy8 - ldr r3, _020D23B0 ; =0x02106838 - mov r1, r6 - ldr r12, [r3, #0x0] - mov r2, r5 - add r0, sp, #0x4 - add r3, sp, #0x18 - str r12, [sp, #0x0] - bl MATH_CalcHMACSHA1 - add r2, sp, #0x4 - mov r3, #0x0 -_020D2374: - ldr r1, [r2, #0x0] - ldr r0, [r4, r3] - cmp r1, r0 - bne _020D2394 - add r3, r3, #0x4 - cmp r3, #0x14 - add r2, r2, #0x4 - blo _020D2374 -_020D2394: - cmp r3, #0x14 - moveq r0, #0x1 - movne r0, #0x0 - add sp, sp, #0x58 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D23AC: .word 0x02106834 -_020D23B0: .word 0x02106838 - - arm_func_start FS_LoadOverlayImage -FS_LoadOverlayImage: ; 0x020D23B4 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x54 - mov r5, r0 - add r0, sp, #0x8 - bl FS_InitFile -_020D23C8: - add r0, sp, #0x0 - mov r1, r5 - bl FS_GetOverlayFileID - add r1, sp, #0x0 - add r0, sp, #0x8 - ldmia r1, {r1, r2} - bl FS_OpenFileFast - cmp r0, #0x0 - addeq sp, sp, #0x54 - moveq r0, #0x0 - ldmeqia sp!, {r4-r5, lr} - bxeq lr - mov r0, r5 - bl FSi_GetOverlayBinarySize - mov r4, r0 - mov r0, r5 - bl FS_ClearOverlayImage - ldr r1, [r5, #0x4] - add r0, sp, #0x8 - mov r2, r4 - bl FS_ReadFile - cmp r4, r0 - beq _020D243C - add r0, sp, #0x8 - bl FS_CloseFile - add sp, sp, #0x54 - mov r0, #0x0 - ldmia sp!, {r4-r5, lr} - bx lr -_020D243C: - add r0, sp, #0x8 - bl FS_CloseFile - mov r0, #0x1 - add sp, sp, #0x54 - ldmia sp!, {r4-r5, lr} - bx lr - - arm_func_start FS_LoadOverlayImageAsync -FS_LoadOverlayImageAsync: ; 0x020D2454 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x8 - mov r5, r1 - mov r6, r0 - mov r0, r5 - bl FS_InitFile -_020D246C: - add r0, sp, #0x0 - mov r1, r6 - bl FS_GetOverlayFileID - add r1, sp, #0x0 - mov r0, r5 - ldmia r1, {r1, r2} - bl FS_OpenFileFast - cmp r0, #0x0 - addeq sp, sp, #0x8 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6, lr} - bxeq lr - mov r0, r6 - bl FSi_GetOverlayBinarySize - mov r4, r0 - mov r0, r6 - bl FS_ClearOverlayImage - ldr r1, [r6, #0x4] - mov r0, r5 - mov r2, r4 - bl FS_ReadFileAsync - cmp r4, r0 - addeq sp, sp, #0x8 - moveq r0, #0x1 - ldmeqia sp!, {r4-r6, lr} - bxeq lr - mov r0, r5 - bl FS_CloseFile - mov r0, #0x0 - add sp, sp, #0x8 - ldmia sp!, {r4-r6, lr} - bx lr - - arm_func_start FS_LoadOverlayInfo -FS_LoadOverlayInfo: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x64 - movs r4, r1 - mov r5, r0 - ldreq r0, _020D25EC ; =0x021D5404 - ldrne r0, _020D25F0 ; =0x021D540C - ldr r3, [r0, #0x0] - cmp r3, #0x0 - beq _020D25A8 - ldr r0, [r0, #0x4] - mov r2, r2, lsl #0x5 - cmp r2, r0 - addcs sp, sp, #0x64 - movcs r0, #0x0 - ldmcsia sp!, {r4-r5,lr} - bxcs lr - add r0, r3, r2 - mov r1, r5 - mov r2, #0x20 - bl MI_CpuCopy8 - add r0, sp, #0x18 - str r4, [r5, #0x20] - bl FS_InitFile - add r0, sp, #0x10 - mov r1, r5 - bl FS_GetOverlayFileID - add r1, sp, #0x10 - add r0, sp, #0x18 - ldmia r1, {r1-r2} - bl FS_OpenFileFast -_020D2564: - cmp r0, #0x0 - addeq sp, sp, #0x64 - moveq r0, #0x0 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r1, [sp, #0x3c] - add r0, sp, #0x18 - str r1, [r5, #0x24] - ldr r2, [sp, #0x40] - ldr r1, [sp, #0x3c] - sub r1, r2, r1 - str r1, [r5, #0x28] - bl FS_CloseFile - add sp, sp, #0x64 - mov r0, #0x1 - ldmia sp!, {r4-r5,lr} - bx lr -_020D25A8: - ldr r1, _020D25F4 ; =0x027FFE50 - ldr ip, _020D25F8 ; =0x027FFE58 - ldr r0, [r1, #0x0] - ldr r3, _020D25FC ; =0x021D5414 - str r0, [sp, #0x0] - ldr r1, [r1, #0x4] - mov r0, r5 - str r1, [sp, #0x4] - ldr r5, [r12, #0x0] - mov r1, r4 - str r5, [sp, #0x8] - ldr r4, [r12, #0x4] - str r4, [sp, #0xc] - bl FSi_LoadOverlayInfoCore - add sp, sp, #0x64 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D25EC: .word 0x021D5404 -_020D25F0: .word 0x021D540C -_020D25F4: .word 0x027FFE50 -_020D25F8: .word 0x027FFE58 -_020D25FC: .word 0x021D5414 - - arm_func_start FSi_LoadOverlayInfoCore -FSi_LoadOverlayInfoCore: ; 0x020D2600 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x54 - movs r9, r1 - ldreq r5, [sp, #0x74] - ldreq r6, [sp, #0x70] - ldrne r5, [sp, #0x7c] - ldrne r6, [sp, #0x78] - mov r7, r2, lsl #0x5 - cmp r7, r5 - mov r4, r0 - mov r8, r3 - addcs sp, sp, #0x54 - movcs r0, #0x0 - ldmcsia sp!, {r4-r9,lr} - bxcs lr - add r0, sp, #0xc - bl FS_InitFile - mvn r12, #0x0 - add r0, sp, #0xc - mov r1, r8 - add r2, r6, r7 - add r3, r6, r5 - str r12, [sp, #0x0] - bl FS_OpenFileDirect -_020D2660: - cmp r0, #0 - addeq sp, sp, #0x54 - moveq r0, #0 - ldmeqia sp!, {r4-r9, lr} - bxeq lr - add r0, sp, #12 - mov r1, r4 - mov r2, #32 - bl FS_ReadFile - cmp r0, #32 - beq _020D26A4 - add r0, sp, #12 - bl FS_CloseFile - add sp, sp, #0x54 - mov r0, #0x0 - ldmia sp!, {r4-r9, lr} - bx lr -_020D26A4: - add r0, sp, #0xC - bl FS_CloseFile - add r0, sp, #0x4 - mov r1, r4 - str r9, [r4, #0x20] - bl FS_GetOverlayFileID - add r1, sp, #0x4 - add r0, sp, #0xC - ldmia r1, {r1, r2} - bl FS_OpenFileFast - cmp r0, #0x0 - addeq sp, sp, #0x54 - moveq r0, #0x0 - ldmeqia sp!, {r4-r9, lr} - bxeq lr - ldr r1, [sp, #0x30] - add r0, sp, #0xC - str r1, [r4, #0x24] - ldr r2, [sp, #0x34] - ldr r1, [sp, #0x30] - sub r1, r2, r1 - str r1, [r4, #0x28] - bl FS_CloseFile - mov r0, #0x1 - add sp, sp, #0x54 - ldmia sp!, {r4-r9, lr} - bx lr - - arm_func_start FS_GetOverlayFileID -FS_GetOverlayFileID: ; 0x020D2710 - sub sp, sp, #0x8 - ldr r2, _020D2734 ; =0x021D5414 - str r2, [sp, #0x0] - ldr r1, [r1, #0x18] - str r1, [sp, #0x4] - str r2, [r0, #0x0] - str r1, [r0, #0x4] - add sp, sp, #0x8 - bx lr - .balign 4 -_020D2734: .word 0x021D5414 - - arm_func_start FS_ClearOverlayImage -FS_ClearOverlayImage: ; 0x020D2738 - stmdb sp!, {r4-r6,lr} - ldr r5, [r0, #0x8] - ldr r1, [r0, #0xc] - ldr r6, [r0, #0x4] - add r4, r5, r1 - mov r0, r6 - mov r1, r4 - bl IC_InvalidateRange - mov r0, r6 - mov r1, r4 - bl DC_InvalidateRange - add r0, r6, r5 - sub r2, r4, r5 - mov r1, #0x0 - bl MI_CpuFill8 - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start FSi_GetOverlayBinarySize -FSi_GetOverlayBinarySize: ; 0x020D277C - ldrb r1, [r0, #0x1f] - ands r1, r1, #0x1 - ldrne r0, [r0, #0x1c] - movne r0, r0, lsl #0x8 - movne r0, r0, lsr #0x8 - ldreq r0, [r0, #0x8] - bx lr - - arm_func_start ProcessBlock -ProcessBlock: ; 0x020D2798 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - add r3, r0, #0x18 - ldr r5, [r0, #0x0] - ldr r4, [r0, #0x4] - ldr lr, [r0, #0x8] - ldr r12, [r0, #0xc] - ldr r2, _020D2B78 ; =0x02106900 - mov r8, r3 - mov r7, #0x0 -_020D27C0: - mvn r1, r4 - and r6, r4, lr - and r1, r1, r12 - orr r1, r6, r1 - ldr r6, [r8, #0x0] - add r1, r5, r1 - ldr r5, [r2, #0x0] - add r1, r6, r1 - add r5, r5, r1 - mov r1, r5, lsl #0x7 - orr r1, r1, r5, lsr #0x19 - add r5, r4, r1 - mvn r1, r5 - and r6, r5, r4 - and r1, r1, lr - orr r1, r6, r1 - ldr r6, [r8, #0x4] - add r1, r12, r1 - ldr r9, [r2, #0x4] - add r1, r6, r1 - add r6, r9, r1 - mov r1, r6, lsl #0xc - orr r1, r1, r6, lsr #0x14 - add r12, r5, r1 - mvn r1, r12 - and r6, r12, r5 - and r1, r1, r4 - orr r6, r6, r1 - add r1, r8, #0xc - ldr r9, [r8, #0x8] - add r6, lr, r6 - add r6, r9, r6 - ldr r9, [r2, #0x8] - ldr r1, [r1, #0x0] - add r10, r9, r6 - add r6, r2, #0xc - ldr r6, [r6, #0x0] - mov r9, r10, lsl #0x11 - orr r9, r9, r10, lsr #0xf - add lr, r12, r9 - add r2, r2, #0x10 - add r8, r8, #0x10 - and r10, lr, r12 - mvn r9, lr - and r9, r9, r5 - orr r9, r10, r9 - add r4, r4, r9 - add r1, r1, r4 - add r4, r6, r1 - mov r1, r4, lsl #0x16 - orr r1, r1, r4, lsr #0xa - add r4, lr, r1 - add r7, r7, #0x1 - cmp r7, #0x4 - blt _020D27C0 - ldr r6, _020D2B7C ; =0x02106840 - mov r1, #0x0 -_020D28A4: - mvn r7, r12 - ldr r9, [r6, #0x0] - and r8, r4, r12 - and r7, lr, r7 - orr r7, r8, r7 - ldr r8, [r3, r9, lsl #0x2] - add r5, r5, r7 - ldr r7, [r2, #0x0] - add r5, r8, r5 - add r7, r7, r5 - mov r5, r7, lsl #0x5 - orr r5, r5, r7, lsr #0x1b - add r5, r4, r5 - mvn r8, lr - ldr r7, [r6, #0x4] - and r9, r5, lr - and r8, r4, r8 - orr r10, r9, r8 - mvn r8, r4 - ldr r9, [r6, #0x8] - ldr r11, [r3, r7, lsl #0x2] - add r7, r12, r10 - add r10, r11, r7 - add r7, r6, #0xc - ldr r9, [r3, r9, lsl #0x2] - and r8, r5, r8 - ldr r7, [r7, #0x0] - ldr r11, [r2, #0x4] - ldr r7, [r3, r7, lsl #0x2] - add r11, r11, r10 - mov r10, r11, lsl #0x9 - orr r10, r10, r11, lsr #0x17 - add r12, r5, r10 - ldr r10, [r2, #0x8] - and r11, r12, r4 - orr r8, r11, r8 - add r8, lr, r8 - add r8, r9, r8 - add r10, r10, r8 - add r8, r2, #0xc - ldr r8, [r8, #0x0] - mov r9, r10, lsl #0xe - orr r9, r9, r10, lsr #0x12 - add lr, r12, r9 - add r2, r2, #0x10 - add r6, r6, #0x10 - and r10, lr, r5 - mvn r9, r5 - and r9, r12, r9 - orr r9, r10, r9 - add r4, r4, r9 - add r4, r7, r4 - add r7, r8, r4 - mov r4, r7, lsl #0x14 - orr r4, r4, r7, lsr #0xc - add r4, lr, r4 - add r1, r1, #0x1 - cmp r1, #0x4 - blt _020D28A4 - mov r7, #0x0 -_020D2994: - ldr r8, [r6, #0x0] - eor r1, r4, lr - eor r1, r12, r1 - add r1, r5, r1 - ldr r8, [r3, r8, lsl #0x2] - ldr r5, [r2, #0x0] - add r1, r8, r1 - add r5, r5, r1 - mov r1, r5, lsl #0x4 - orr r1, r1, r5, lsr #0x1c - add r5, r4, r1 - ldr r8, [r6, #0x4] - eor r1, r5, r4 - eor r1, lr, r1 - ldr r8, [r3, r8, lsl #0x2] - add r1, r12, r1 - ldr r9, [r6, #0x8] - ldr r10, [r2, #0x4] - add r1, r8, r1 - add r8, r10, r1 - mov r1, r8, lsl #0xb - orr r1, r1, r8, lsr #0x15 - add r12, r5, r1 - eor r8, r12, r5 - eor r8, r4, r8 - ldr r9, [r3, r9, lsl #0x2] - add r8, lr, r8 - add r9, r9, r8 - ldr r10, [r2, #0x8] - add r1, r2, #0xc - ldr r8, [r6, #0xc] - add r10, r10, r9 - ldr r9, [r3, r8, lsl #0x2] - mov r8, r10, lsl #0x10 - orr r8, r8, r10, lsr #0x10 - add lr, r12, r8 - eor r8, lr, r12 - eor r8, r5, r8 - add r4, r4, r8 - add r7, r7, #0x1 - ldr r1, [r1, #0x0] - add r4, r9, r4 - add r4, r1, r4 - mov r1, r4, lsl #0x17 - orr r1, r1, r4, lsr #0x9 - add r2, r2, #0x10 - add r6, r6, #0x10 - add r4, lr, r1 - cmp r7, #0x4 - blt _020D2994 - mov r10, #0x0 -_020D2A60: - mvn r1, r12 - ldr r7, [r6, #0x0] - orr r1, r4, r1 - eor r1, lr, r1 - ldr r7, [r3, r7, lsl #0x2] - add r1, r5, r1 - ldr r5, [r2, #0x0] - add r1, r7, r1 - add r5, r5, r1 - mov r1, r5, lsl #0x6 - orr r1, r1, r5, lsr #0x1a - add r5, r4, r1 - mvn r1, lr - ldr r7, [r6, #0x4] - orr r1, r5, r1 - eor r1, r4, r1 - ldr r8, [r6, #0x8] - ldr r7, [r3, r7, lsl #0x2] - add r1, r12, r1 - ldr r9, [r2, #0x4] - add r1, r7, r1 - add r9, r9, r1 - mov r7, r9, lsl #0xa - add r1, r6, #0xc - orr r9, r7, r9, lsr #0x16 - ldr r1, [r1, #0x0] - add r7, r2, #0xc - add r12, r5, r9 - ldr r8, [r3, r8, lsl #0x2] - ldr r7, [r7, #0x0] - ldr r1, [r3, r1, lsl #0x2] - ldr r9, [r2, #0x8] - mvn r11, r4 - orr r11, r12, r11 - eor r11, r5, r11 - add r11, lr, r11 - add r8, r8, r11 - add r9, r9, r8 - mov r8, r9, lsl #0xf - orr r8, r8, r9, lsr #0x11 - add lr, r12, r8 - add r2, r2, #0x10 - add r6, r6, #0x10 - mvn r8, r5 - orr r8, lr, r8 - eor r8, r12, r8 - add r4, r4, r8 - add r1, r1, r4 - add r4, r7, r1 - mov r1, r4, lsl #0x15 - orr r1, r1, r4, lsr #0xb - add r4, lr, r1 - add r10, r10, #0x1 - cmp r10, #0x4 - blt _020D2A60 - ldr r1, [r0, #0x0] - add r1, r1, r5 - str r1, [r0, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, r4 - str r1, [r0, #0x4] - ldr r1, [r0, #0x8] - add r1, r1, lr - str r1, [r0, #0x8] - ldr r1, [r0, #0xc] - add r1, r1, r12 - str r1, [r0, #0xc] - add sp, sp, #0x4 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020D2B78: .word 0x02106900 -_020D2B7C: .word 0x02106840 - - arm_func_start MATH_MD5GetHash -MATH_MD5GetHash: ; 0x020D2B80 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r6, r1 - ldr r1, [r6, #0x14] - ldr r3, [r6, #0x10] - mov r7, r0 - mov r4, r1, lsl #0x3 - ldr r1, _020D2C40 ; =0x0210683C - mov r0, r6 - mov r2, #0x1 - orr r4, r4, r3, lsr #0x1d - mov r5, r3, lsl #0x3 - bl MATH_MD5Update - ldr r0, [r6, #0x10] - mov r1, #0x0 - and r3, r0, #0x3f - rsb r2, r3, #0x40 - cmp r2, #0x8 - bhs _020D2BE8 - add r0, r6, #0x18 - add r0, r0, r3 - bl MI_CpuFill8 - mov r0, r6 - bl ProcessBlock - mov r3, #0x0 - mov r2, #0x40 -_020D2BE8: - cmp r2, #0x8 - bls _020D2C04 - add r0, r6, #0x18 - add r0, r0, r3 - sub r2, r2, #0x8 - mov r1, #0x0 - bl MI_CpuFill8 -_020D2C04: - str r5, [r6, #0x50] - mov r0, r6 - str r4, [r6, #0x54] - bl ProcessBlock - mov r0, r6 - mov r1, r7 - mov r2, #0x10 - bl MI_CpuCopy8 - mov r0, r6 - mov r1, #0x0 - mov r2, #0x58 - bl MI_CpuFill8 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020D2C40: .word 0x0210683C - - arm_func_start MATH_MD5Update -MATH_MD5Update: ; 0x020D2C44 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - mov r8, r0 - add r12, r8, #0x10 - ldr r4, [r8, #0x10] - mov r6, r2 - and r3, r4, #0x3f - ldr r0, [r12, #0x4] - adds r4, r4, r6 - str r4, [r8, #0x10] - adc r0, r0, #0x0 - rsb r5, r3, #0x40 - mov r7, r1 - str r0, [r12, #0x4] - cmp r5, r6 - bls _020D2CB0 - cmp r6, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - add r1, r8, #0x18 - mov r0, r7 - add r1, r1, r3 - bl MI_CpuCopy8 - add sp, sp, #0x4 - ldmia sp!, {r4-r9,lr} - bx lr -_020D2CB0: - add r1, r8, #0x18 - mov r0, r7 - mov r2, r5 - add r1, r1, r3 - bl MI_CpuCopy8 - mov r0, r8 - bl ProcessBlock - sub r6, r6, r5 - mov r4, r6, lsr #0x6 - cmp r4, #0x0 - add r9, r7, r5 - ble _020D2D10 - add r7, r8, #0x18 - mov r5, #0x40 -_020D2CE8: - mov r0, r9 - mov r1, r7 - mov r2, r5 - bl MI_CpuCopy8 - mov r0, r8 - add r9, r9, #0x40 - bl ProcessBlock - sub r4, r4, #0x1 - cmp r4, #0x0 - bgt _020D2CE8 -_020D2D10: - ands r2, r6, #0x3f - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - mov r0, r9 - add r1, r8, #0x18 - bl MI_CpuCopy8 - add sp, sp, #0x4 - ldmia sp!, {r4-r9,lr} - bx lr - - arm_func_start MATH_MD5Init -MATH_MD5Init: ; 0x020D2D38 - ldr r2, _020D2D68 ; =0x67452301 - ldr r1, _020D2D6C ; =0xEFCDAB89 - str r2, [r0, #0x0] - ldr r2, _020D2D70 ; =0x98BADCFE - str r1, [r0, #0x4] - ldr r1, _020D2D74 ; =0x10325476 - str r2, [r0, #0x8] - str r1, [r0, #0xc] - mov r1, #0x0 - str r1, [r0, #0x10] - str r1, [r0, #0x14] - bx lr - .balign 4 -_020D2D68: .word 0x67452301 -_020D2D6C: .word 0xEFCDAB89 -_020D2D70: .word 0x98BADCFE -_020D2D74: .word 0x10325476 - - arm_func_start MATH_CalcHMACSHA1 -MATH_CalcHMACSHA1: ; 0x020D2D78 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0xa0 - ldr lr, _020D2E00 ; =0x02106A04 - add r12, sp, #0x1c - mov r8, r0 - mov r7, r1 - mov r6, r2 - mov r5, r3 - mov r4, r12 - ldmia lr!, {r0-r3} - stmia r12!, {r0-r3} - ldmia lr, {r0-r2} - stmia r12, {r0-r2} - add lr, sp, #0x38 - add r12, sp, #0x8 - str lr, [sp, #0x24] - ldr lr, _020D2E04 ; =MATH_SHA1Init - str r12, [sp, #0x28] - ldr ip, _020D2E08 ; =MATH_SHA1Update - str lr, [sp, #0x2c] - ldr lr, _020D2E0C ; =MATH_SHA1GetHash - str r12, [sp, #0x30] - ldr r12, [sp, #0xb8] - str lr, [sp, #0x34] - str r12, [sp, #0x0] - mov r3, r5 - mov r0, r8 - mov r1, r7 - mov r2, r6 - str r4, [sp, #0x4] - bl MATHi_CalcHMAC - add sp, sp, #0xa0 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020D2E00: .word 0x02106A04 -_020D2E04: .word MATH_SHA1Init -_020D2E08: .word MATH_SHA1Update -_020D2E0C: .word MATH_SHA1GetHash - - arm_func_start MATH_SHA1GetHash -MATH_SHA1GetHash: ; 0x020D2E10 - stmdb sp!, {r0-r3} - stmdb sp!, {r4-r6,lr} - ldr r0, [sp, #0x10] - mov r6, r1 - ldr r3, [r0, #0x1c] - add r5, r0, #0x20 - ands r1, r3, #0x3 - mov r0, r3, asr #0x2 - moveq r1, #0x0 - streq r1, [r5, r0, lsl #0x2] - ldr r2, [sp, #0x10] - mov r1, #0x80 - add r4, r2, #0x20 - strb r1, [r4, r3] - add r3, r3, #0x1 - ands r1, r3, #0x3 - beq _020D2E68 - mov r2, #0x0 -_020D2E58: - strb r2, [r4, r3] - add r3, r3, #0x1 - ands r1, r3, #0x3 - bne _020D2E58 -_020D2E68: - ldr r1, [sp, #0x10] - add r0, r0, #0x1 - ldr r1, [r1, #0x1c] - cmp r1, #0x38 - blt _020D2EB4 - cmp r0, #0x10 - bge _020D2E98 - mov r1, #0x0 -_020D2E88: - str r1, [r5, r0, lsl #0x2] - add r0, r0, #0x1 - cmp r0, #0x10 - blt _020D2E88 -_020D2E98: - ldr r1, _020D3008 ; =0x02106A00 - ldr r0, [sp, #0x10] - ldr r3, [r1, #0x0] - mov r1, r5 - mov r2, #0x40 - blx r3 - mov r0, #0x0 -_020D2EB4: - cmp r0, #0xe - bge _020D2ED0 - mov r1, #0x0 -_020D2EC0: - str r1, [r5, r0, lsl #0x2] - add r0, r0, #0x1 - cmp r0, #0xe - blt _020D2EC0 -_020D2ED0: - ldr r0, [sp, #0x10] - mov r1, r5 - ldr r2, [r0, #0x14] - ldr r3, _020D3008 ; =0x02106A00 - strb r2, [r4, #0x3f] - mov r0, r2, lsr #0x8 - strb r0, [r4, #0x3e] - mov r0, r2, lsr #0x10 - strb r0, [r4, #0x3d] - mov r0, r2, lsr #0x18 - strb r0, [r4, #0x3c] - ldr r0, [sp, #0x10] - mov r2, #0x40 - ldr r5, [r0, #0x18] - strb r5, [r4, #0x3b] - mov r0, r5, lsr #0x8 - strb r0, [r4, #0x3a] - mov r0, r5, lsr #0x10 - strb r0, [r4, #0x39] - mov r0, r5, lsr #0x18 - strb r0, [r4, #0x38] - ldr r0, [sp, #0x10] - ldr r3, [r3, #0x0] - blx r3 - ldr r0, [sp, #0x10] - add r1, sp, #0x10 - ldr r3, [r0, #0x0] - mov r0, #0x0 - mov r2, r3, lsr #0x18 - strb r2, [r6, #0x0] - mov r2, r3, lsr #0x10 - strb r2, [r6, #0x1] - mov r2, r3, lsr #0x8 - strb r2, [r6, #0x2] - strb r3, [r6, #0x3] - ldr r3, [sp, #0x10] - mov r2, #0x4 - ldr r4, [r3, #0x4] - mov r3, r4, lsr #0x18 - strb r3, [r6, #0x4] - mov r3, r4, lsr #0x10 - strb r3, [r6, #0x5] - mov r3, r4, lsr #0x8 - strb r3, [r6, #0x6] - strb r4, [r6, #0x7] - ldr r3, [sp, #0x10] - ldr r4, [r3, #0x8] - mov r3, r4, lsr #0x18 - strb r3, [r6, #0x8] - mov r3, r4, lsr #0x10 - strb r3, [r6, #0x9] - mov r3, r4, lsr #0x8 - strb r3, [r6, #0xa] - strb r4, [r6, #0xb] - ldr r3, [sp, #0x10] - ldr r4, [r3, #0xc] - mov r3, r4, lsr #0x18 - strb r3, [r6, #0xc] - mov r3, r4, lsr #0x10 - strb r3, [r6, #0xd] - mov r3, r4, lsr #0x8 - strb r3, [r6, #0xe] - strb r4, [r6, #0xf] - ldr r3, [sp, #0x10] - ldr r4, [r3, #0x10] - mov r3, r4, lsr #0x18 - strb r3, [r6, #0x10] - mov r3, r4, lsr #0x10 - strb r3, [r6, #0x11] - mov r3, r4, lsr #0x8 - strb r3, [r6, #0x12] - strb r4, [r6, #0x13] - ldr r3, [sp, #0x10] - str r0, [r3, #0x1c] - bl MIi_CpuClear32 - ldmia sp!, {r4-r6,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020D3008: .word 0x02106A00 - - arm_func_start MATH_SHA1Update -MATH_SHA1Update: ; 0x020D300C - stmdb sp!, {r4-r8,lr} - mov r8, r0 - movs r6, r2 - mov r7, r1 - add r5, r8, #0x20 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - ldr r0, [r8, #0x14] - add r1, r0, r6, lsl #0x3 - cmp r1, r0 - ldrcc r0, [r8, #0x18] - addcc r0, r0, #0x1 - strcc r0, [r8, #0x18] - ldr r0, [r8, #0x18] - add r0, r0, r6, lsr #0x1d - str r0, [r8, #0x18] - str r1, [r8, #0x14] - ldr r1, [r8, #0x1c] - cmp r1, #0x0 - beq _020D30CC - add r0, r1, r6 - cmp r0, #0x40 - blo _020D30A8 - rsb r4, r1, #0x40 - mov r0, r7 - mov r2, r4 - add r1, r5, r1 - bl MI_CpuCopy8 - ldr r1, _020D3164 ; =0x02106A00 - mov r0, r8 - ldr r3, [r1, #0x0] - mov r1, r5 - mov r2, #0x40 - sub r6, r6, r4 - add r7, r7, r4 - blx r3 - mov r0, #0x0 - str r0, [r8, #0x1c] - b _020D30CC -_020D30A8: - mov r0, r7 - mov r2, r6 - add r1, r5, r1 - bl MI_CpuCopy8 - ldr r0, [r8, #0x1c] - add r0, r0, r6 - str r0, [r8, #0x1c] - ldmia sp!, {r4-r8,lr} - bx lr -_020D30CC: - cmp r6, #0x40 - blo _020D313C - bic r4, r6, #0x3f - sub r6, r6, r4 - ands r0, r7, #0x3 - bne _020D3104 - ldr r1, _020D3164 ; =0x02106A00 - mov r0, r8 - ldr r3, [r1, #0x0] - mov r1, r7 - mov r2, r4 - blx r3 - add r7, r7, r4 - b _020D313C -_020D3104: - mov r0, r7 - mov r1, r5 - mov r2, #0x40 - bl MI_CpuCopy8 - ldr r1, _020D3164 ; =0x02106A00 - mov r0, r8 - ldr r3, [r1, #0x0] - mov r1, r5 - mov r2, #0x40 - add r7, r7, #0x40 - blx r3 - sub r4, r4, #0x40 - cmp r4, #0x0 - bgt _020D3104 -_020D313C: - str r6, [r8, #0x1c] - cmp r6, #0x0 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - mov r0, r7 - mov r1, r5 - mov r2, r6 - bl MI_CpuCopy8 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020D3164: .word 0x02106A00 - - arm_func_start MATH_SHA1Init -MATH_SHA1Init: ; 0x020D3168 - ldr r1, _020D31A4 ; =0x67452301 - ldr r2, _020D31A8 ; =0xEFCDAB89 - str r1, [r0, #0x0] - ldr r1, _020D31AC ; =0x98BADCFE - str r2, [r0, #0x4] - ldr r2, _020D31B0 ; =0x10325476 - str r1, [r0, #0x8] - ldr r1, _020D31B4 ; =0xC3D2E1F0 - str r2, [r0, #0xc] - str r1, [r0, #0x10] - mov r1, #0x0 - str r1, [r0, #0x14] - str r1, [r0, #0x18] - str r1, [r0, #0x1c] - bx lr - .balign 4 -_020D31A4: .word 0x67452301 -_020D31A8: .word 0xEFCDAB89 -_020D31AC: .word 0x98BADCFE -_020D31B0: .word 0x10325476 -_020D31B4: .word 0xC3D2E1F0 - - arm_func_start MATHi_CalcHMAC -MATHi_CalcHMAC: ; 0x020D31B8 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0xc4 - ldr r5, [sp, #0xe0] - ldr r4, [sp, #0xe4] - movs r9, r0 - mov r8, r1 - mov r7, r2 - mov r6, r3 - addeq sp, sp, #0xc4 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - cmp r8, #0x0 - addeq sp, sp, #0xc4 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - cmp r7, #0x0 - addeq sp, sp, #0xc4 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - cmp r6, #0x0 - addeq sp, sp, #0xc4 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - cmp r5, #0x0 - addeq sp, sp, #0xc4 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - cmp r4, #0x0 - addeq sp, sp, #0xc4 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - ldr r0, [r4, #0x4] - cmp r5, r0 - ble _020D3278 - ldr r0, [r4, #0x8] - ldr r1, [r4, #0x10] - blx r1 - ldr r0, [r4, #0x8] - ldr r3, [r4, #0x14] - mov r1, r6 - mov r2, r5 - blx r3 - ldr r0, [r4, #0x8] - ldr r2, [r4, #0x18] - add r1, sp, #0x0 - blx r2 - ldr r5, [r4, #0x0] - add r6, sp, #0x0 -_020D3278: - cmp r5, #0x0 - mov r0, #0x0 - ble _020D32A0 - add r2, sp, #0x40 -_020D3288: - ldrb r1, [r6, r0] - add r0, r0, #0x1 - cmp r0, r5 - eor r1, r1, #0x36 - strb r1, [r2], #0x1 - blt _020D3288 -_020D32A0: - ldr r1, [r4, #0x4] - cmp r0, r1 - bge _020D32CC - add r1, sp, #0x40 - add r3, r1, r0 - mov r2, #0x36 -_020D32B8: - strb r2, [r3], #0x1 - ldr r1, [r4, #0x4] - add r0, r0, #0x1 - cmp r0, r1 - blt _020D32B8 -_020D32CC: - ldr r0, [r4, #0x8] - ldr r1, [r4, #0x10] - blx r1 - ldr r0, [r4, #0x8] - ldr r2, [r4, #0x4] - ldr r3, [r4, #0x14] - add r1, sp, #0x40 - blx r3 - ldr r0, [r4, #0x8] - ldr r3, [r4, #0x14] - mov r1, r8 - mov r2, r7 - blx r3 - ldr r0, [r4, #0x8] - ldr r1, [r4, #0xc] - ldr r2, [r4, #0x18] - blx r2 - cmp r5, #0x0 - mov r2, #0x0 - ble _020D3338 - add r1, sp, #0x80 -_020D3320: - ldrb r0, [r6, r2] - add r2, r2, #0x1 - cmp r2, r5 - eor r0, r0, #0x5c - strb r0, [r1], #0x1 - blt _020D3320 -_020D3338: - ldr r0, [r4, #0x4] - cmp r2, r0 - bge _020D3364 - add r0, sp, #0x80 - add r3, r0, r2 - mov r1, #0x5c -_020D3350: - strb r1, [r3], #0x1 - ldr r0, [r4, #0x4] - add r2, r2, #0x1 - cmp r2, r0 - blt _020D3350 -_020D3364: - ldr r0, [r4, #0x8] - ldr r1, [r4, #0x10] - blx r1 - ldr r0, [r4, #0x8] - ldr r2, [r4, #0x4] - ldr r3, [r4, #0x14] - add r1, sp, #0x80 - blx r3 - ldr r0, [r4, #0x8] - ldr r1, [r4, #0xc] - ldr r2, [r4, #0x0] - ldr r3, [r4, #0x14] - blx r3 - ldr r0, [r4, #0x8] - ldr r2, [r4, #0x18] - mov r1, r9 - blx r2 - add sp, sp, #0xc4 - ldmia sp!, {r4-r9,lr} - bx lr - .balign 4 -_020D33B4: .word 0x00FF00FF -_020D33B8: .word 0x5A827999 -_020D33BC: .word 0x6ED9EBA1 -_020D33C0: .word 0x8F1BBCDC -_020D33C4: .word 0xCA62C1D6 - - arm_func_start MATHi_SHA1ProcessBlock -MATHi_SHA1ProcessBlock: ; 0x020D33C8 - stmdb sp!, {r4-r12,lr} - ldmia r0, {r3,r9-r12} - sub sp, sp, #0x84 - str r2, [sp, #0x80] -_020D33D8: - ldr r8, _020D33B8 ; =0x5A827999 - ldr r7, _020D33B4 ; =0x00FF00FF - mov r6, sp - mov r5, #0x0 -_020D33E8: - ldr r4, [r1], #0x4 - add r2, r8, r12 - add r2, r2, r3, ror #0x1B - and lr, r4, r7 - and r4, r7, r4, ror #0x18 - orr r4, r4, lr, ror #0x8 - str r4, [r6, #0x40] - str r4, [r6], #0x4 - add r2, r2, r4 - eor r4, r10, r11 - and r4, r4, r9 - eor r4, r4, r11 - add r2, r2, r4 - mov r9, r9, ror #0x2 - mov r12, r11 - mov r11, r10 - mov r10, r9 - mov r9, r3 - mov r3, r2 - add r5, r5, #0x4 - cmp r5, #0x40 - blt _020D33E8 - mov r7, #0x0 - mov r6, sp -_020D3448: - ldr r2, [r6, #0x0] - ldr r5, [r6, #0x8] - ldr r4, [r6, #0x20] - ldr lr, [r6, #0x34] - eor r2, r2, r5 - eor r4, r4, lr - eor r2, r2, r4 - mov r2, r2, ror #0x1F - str r2, [r6, #0x40] - str r2, [r6], #0x4 - add r2, r2, r12 - add r2, r2, r8 - add r2, r2, r3, ror #0x1B - eor r4, r10, r11 - and r4, r4, r9 - eor r4, r4, r11 - add r2, r2, r4 - mov r9, r9, ror #0x2 - mov r12, r11 - mov r11, r10 - mov r10, r9 - mov r9, r3 - mov r3, r2 - add r7, r7, #0x4 - cmp r7, #0x10 - blt _020D3448 - ldr r8, _020D33BC ; =0x6ED9EBA1 - mov r7, #0x0 -_020D34B8: - ldr r2, [r6, #0x0] - ldr r4, [r6, #0x8] - ldr lr, [r6, #0x20] - ldr r5, [r6, #0x34] - eor r2, r2, r4 - eor lr, lr, r5 - eor r2, r2, lr - mov r2, r2, ror #0x1F - str r2, [r6, #0x40] - str r2, [r6], #0x4 - add r2, r2, r12 - add r2, r2, r8 - add r2, r2, r3, ror #0x1B - eor lr, r9, r10 - eor lr, lr, r11 - add r2, r2, lr - mov r9, r9, ror #0x2 - mov r12, r11 - mov r11, r10 - mov r10, r9 - mov r9, r3 - mov r3, r2 - add r7, r7, #0x1 - cmp r7, #0xc - moveq r6, sp - cmp r7, #0x14 - blt _020D34B8 - ldr r8, _020D33C0 ; =0x8F1BBCDC - mov r7, #0x0 -_020D352C: - ldr r2, [r6, #0x0] - ldr lr, [r6, #0x8] - ldr r5, [r6, #0x20] - ldr r4, [r6, #0x34] - eor r2, r2, lr - eor r5, r5, r4 - eor r2, r2, r5 - mov r2, r2, ror #0x1F - str r2, [r6, #0x40] - str r2, [r6], #0x4 - add r2, r2, r12 - add r2, r2, r8 - add r2, r2, r3, ror #0x1B - orr r5, r9, r10 - and r5, r5, r11 - and r4, r9, r10 - orr r5, r5, r4 - add r2, r2, r5 - mov r9, r9, ror #0x2 - mov r12, r11 - mov r11, r10 - mov r10, r9 - mov r9, r3 - mov r3, r2 - add r7, r7, #0x1 - cmp r7, #0x8 - moveq r6, sp - cmp r7, #0x14 - blt _020D352C - ldr r8, _020D33C4 ; =0xCA62C1D6 - mov r7, #0x0 -_020D35A8: - ldr r2, [r6, #0x0] - ldr r5, [r6, #0x8] - ldr r4, [r6, #0x20] - ldr lr, [r6, #0x34] - eor r2, r2, r5 - eor r4, r4, lr - eor r2, r2, r4 - mov r2, r2, ror #0x1F - str r2, [r6, #0x40] - str r2, [r6], #0x4 - add r2, r2, r12 - add r2, r2, r8 - add r2, r2, r3, ror #0x1B - eor r4, r9, r10 - eor r4, r4, r11 - add r2, r2, r4 - mov r9, r9, ror #0x2 - mov r12, r11 - mov r11, r10 - mov r10, r9 - mov r9, r3 - mov r3, r2 - add r7, r7, #0x1 - cmp r7, #0x4 - moveq r6, sp - cmp r7, #0x14 - blt _020D35A8 - ldmia r0, {r2,r4,r6-r7,lr} - add r3, r3, r2 - add r9, r9, r4 - add r10, r10, r6 - add r11, r11, r7 - add r12, r12, lr - stmia r0, {r3,r9-r12} - ldr lr, [sp, #0x80] - subs lr, lr, #0x40 - str lr, [sp, #0x80] - bgt _020D33D8 - add sp, sp, #0x84 - ldmia sp!, {r4-r12,pc} - - arm_func_start CP_SaveContext -CP_SaveContext: ; 0x020D3648 - ldr r1, _020D3684 ; =0x04000290 - stmdb sp!, {r4} - ldmia r1, {r2-r4,r12} - stmia r0!, {r2-r4,r12} - ldrh r12, [r1, #-0x10] - add r1, r1, #0x28 - ldmia r1, {r2-r3} - stmia r0!, {r2-r3} - and r12, r12, #0x3 - ldrh r2, [r1, #-0x8] - strh r12, [r0, #0x0] - and r2, r2, #0x1 - strh r2, [r0, #0x2] - ldmia sp!, {r4} - bx lr - .balign 4 -_020D3684: .word 0x04000290 - - arm_func_start CP_RestoreContext -CP_RestoreContext: ; 0x020D3688 - stmdb sp!, {r4} - ldr r1, _020D36C0 ; =0x04000290 - ldmia r0, {r2-r4,r12} - stmia r1, {r2-r4,r12} - ldrh r2, [r0, #0x18] - ldrh r3, [r0, #0x1a] - strh r2, [r1, #-0x10] - strh r3, [r1, #0x20] - add r0, r0, #0x10 - add r1, r1, #0x28 - ldmia r0, {r2-r3} - stmia r1, {r2-r3} - ldmia sp!, {r4} - bx lr - .balign 4 -_020D36C0: .word 0x04000290 - - arm_func_start TP_CheckError -TP_CheckError: ; 0x020D36C4 - ldr r1, _020D36D4 ; =0x021D5474 - ldrh r1, [r1, #0x34] - and r0, r1, r0 - bx lr - .balign 4 -_020D36D4: .word 0x021D5474 - - arm_func_start TP_WaitBusy -TP_WaitBusy: ; 0x020D36D8 - ldr r1, _020D36EC ; =0x021D5474 -_020D36DC: - ldrh r2, [r1, #0x36] - ands r2, r2, r0 - bne _020D36DC - bx lr - .balign 4 -_020D36EC: .word 0x021D5474 - - arm_func_start TP_GetCalibratedPoint -TP_GetCalibratedPoint: ; 0x020D36F0 - stmdb sp!, {r4-r6,lr} - ldr r2, _020D3818 ; =0x021D5474 - ldrh r2, [r2, #0x30] - cmp r2, #0x0 - bne _020D372C - ldrh r3, [r1, #0x0] - ldrh r2, [r1, #0x2] - strh r3, [r0, #0x0] - strh r2, [r0, #0x2] - ldrh r2, [r1, #0x4] - ldrh r1, [r1, #0x6] - strh r2, [r0, #0x4] - strh r1, [r0, #0x6] - ldmia sp!, {r4-r6,lr} - bx lr -_020D372C: - ldrh r3, [r1, #0x4] - ldr r2, _020D381C ; =0x021D548C - strh r3, [r0, #0x4] - ldrh r3, [r1, #0x6] - strh r3, [r0, #0x6] - ldrh r3, [r1, #0x4] - cmp r3, #0x0 - moveq r1, #0x0 - streqh r1, [r0, #0x0] - streqh r1, [r0, #0x2] - ldmeqia sp!, {r4-r6,lr} - bxeq lr - ldrh r4, [r1, #0x0] - ldr r3, [r2, #0x0] - ldr lr, [r2, #0x8] - mov r12, r4, lsl #0x2 - mov r4, r12, asr #0x1f - subs r12, r12, r3 - sbc r3, r4, r3, asr #0x1f - umull r6, r5, lr, r12 - mla r5, lr, r3, r5 - mov r3, lr, asr #0x1f - mla r5, r3, r12, r5 - mov r3, r6, lsr #0x16 - orr r3, r3, r5, lsl #0xa - strh r3, [r0, #0x0] - ldrsh r3, [r0, #0x0] - cmp r3, #0x0 - movlt r3, #0x0 - strlth r3, [r0, #0x0] - blt _020D37B4 - cmp r3, #0xff - movgt r3, #0xff - strgth r3, [r0, #0x0] -_020D37B4: - ldrh r3, [r1, #0x2] - ldr r1, [r2, #0xc] - ldr r12, [r2, #0x14] - mov r3, r3, lsl #0x2 - mov r2, r3, asr #0x1f - subs r3, r3, r1 - sbc r1, r2, r1, asr #0x1f - umull r4, lr, r12, r3 - mla lr, r12, r1, lr - mov r1, r12, asr #0x1f - mla lr, r1, r3, lr - mov r1, r4, lsr #0x16 - orr r1, r1, lr, lsl #0xa - strh r1, [r0, #0x2] - ldrsh r1, [r0, #0x2] - cmp r1, #0x0 - movlt r1, #0x0 - strlth r1, [r0, #0x2] - ldmltia sp!, {r4-r6,lr} - bxlt lr - cmp r1, #0xbf - movgt r1, #0xbf - strgth r1, [r0, #0x2] - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D3818: .word 0x021D5474 -_020D381C: .word 0x021D548C - - arm_func_start TP_CalcCalibrateParam -TP_CalcCalibrateParam: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r6, r1 - mov r7, r0 - mov r5, r2 - mov r4, r3 - cmp r6, #0x1000 - bhs _020D3860 - cmp r5, #0x1000 - bhs _020D3860 - ldrh r8, [sp, #0x2c] - cmp r8, #0x1000 - bhs _020D3860 - ldrh r3, [sp, #0x30] - cmp r3, #0x1000 - blo _020D3870 -_020D3860: - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r11,lr} - bx lr -_020D3870: - cmp r4, #0x100 - bhs _020D389C - ldrh r2, [sp, #0x34] - cmp r2, #0x100 - bhs _020D389C - ldrh r1, [sp, #0x28] - cmp r1, #0xc0 - bhs _020D389C - ldrh r0, [sp, #0x38] - cmp r0, #0xc0 - blo _020D38AC -_020D389C: - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r11,lr} - bx lr -_020D38AC: - cmp r4, r2 - beq _020D38CC - cmp r1, r0 - beq _020D38CC - cmp r6, r8 - beq _020D38CC - cmp r5, r3 - bne _020D38DC -_020D38CC: - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r11,lr} - bx lr -_020D38DC: - bl OS_DisableInterrupts - ldrh r1, [sp, #0x2c] - ldr r3, _020D3A80 ; =0x04000280 - ldr fp, _020D3A84 ; =0x04000290 - str r1, [sp, #0x0] - ldr r2, [sp, #0x0] - ldrh r1, [sp, #0x34] - sub r9, r6, r2 - mov r2, #0x0 - mov r12, r9, lsl #0x8 - strh r2, [r3, #0x0] - str r12, [r11, #0x0] - ldrh r8, [sp, #0x30] - ldrh r10, [sp, #0x38] - ldrh r9, [sp, #0x28] - ldr fp, _020D3A88 ; =0x04000298 - sub r12, r4, r1 - str r12, [r11, #0x0] - str r2, [r11, #0x4] - sub r11, r5, r8 - sub r2, r9, r10 -_020D3930: - ldrh r12, [r3, #0x0] - ands r12, r12, #0x8000 - bne _020D3930 - ldr ip, _020D3A8C ; =0x040002A0 - mov r11, r11, lsl #0x8 - ldr lr, [r12, #0x0] - mov r12, #0x0 - strh r12, [r3, #0x0] - ldr r3, _020D3A84 ; =0x04000290 - cmp lr, #0x8000 - str r11, [r3, #0x0] - ldr r3, _020D3A88 ; =0x04000298 - str r2, [r3, #0x0] - mov r2, r3 - str r12, [r2, #0x4] - bge _020D3980 - mov r2, #0x8000 - rsb r2, r2, #0x0 - cmp lr, r2 - bge _020D3994 -_020D3980: - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r11,lr} - bx lr -_020D3994: - strh lr, [r7, #0x4] - ldrsh r11, [r7, #0x4] - add r3, r4, r1 - ldr r1, [sp, #0x0] - add r4, r6, r1 - mul r1, r11, r3 - mov r3, r4, lsl #0x8 - sub r1, r3, r1 - mov r1, r1, lsl #0x9 - mov r1, r1, asr #0x10 - cmp r1, #0x8000 - bge _020D39CC - cmp r1, r2 - bge _020D39E0 -_020D39CC: - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r11,lr} - bx lr -_020D39E0: - ldr r2, _020D3A80 ; =0x04000280 - strh r1, [r7, #0x0] -_020D39E8: - ldrh r1, [r2, #0x0] - ands r1, r1, #0x8000 - bne _020D39E8 - ldr r1, _020D3A8C ; =0x040002A0 - ldr r4, [r1, #0x0] - bl OS_RestoreInterrupts - cmp r4, #0x8000 - bge _020D3A18 - mov r0, #0x8000 - rsb r1, r0, #0x0 - cmp r4, r1 - bge _020D3A28 -_020D3A18: - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r11,lr} - bx lr -_020D3A28: - strh r4, [r7, #0x6] - ldrsh r2, [r7, #0x6] - add r0, r9, r10 - add r3, r5, r8 - mul r0, r2, r0 - mov r2, r3, lsl #0x8 - sub r0, r2, r0 - mov r0, r0, lsl #0x9 - mov r0, r0, asr #0x10 - cmp r0, #0x8000 - bge _020D3A5C - cmp r0, r1 - bge _020D3A6C -_020D3A5C: - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r11,lr} - bx lr -_020D3A6C: - strh r0, [r7, #0x2] - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020D3A80: .word 0x04000280 -_020D3A84: .word 0x04000290 -_020D3A88: .word 0x04000298 -_020D3A8C: .word 0x040002A0 - - arm_func_start TP_GetLatestIndexInAuto -TP_GetLatestIndexInAuto: ; 0x020D3A90 - ldr r0, _020D3A9C ; =0x021D5474 - ldrh r0, [r0, #0xc] - bx lr - .balign 4 -_020D3A9C: .word 0x021D5474 - - arm_func_start TP_GetLatestRawPointInAuto -TP_GetLatestRawPointInAuto: ; 0x020D3AA0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r1, #0x3 - ldr lr, _020D3C10 ; =0x021D5474 - strh r1, [r0, #0x6] - ldrh r1, [lr, #0xe] - ldrh r3, [lr, #0xc] - cmp r1, #0x1 - beq _020D3AD0 - ldrh r1, [lr, #0x14] - cmp r1, #0x1 - bne _020D3B0C -_020D3AD0: - ldr r1, _020D3C10 ; =0x021D5474 - mov r2, r3, lsl #0x3 - ldr r1, [r1, #0x10] - add sp, sp, #0x4 - add r3, r1, r3, lsl #0x3 - ldrh r2, [r1, r2] - ldrh r1, [r3, #0x2] - strh r2, [r0, #0x0] - strh r1, [r0, #0x2] - ldrh r2, [r3, #0x4] - ldrh r1, [r3, #0x6] - strh r2, [r0, #0x4] - strh r1, [r0, #0x6] - ldmia sp!, {r4-r5,lr} - bx lr -_020D3B0C: - add r1, r0, #0x6 - mov r12, #0x0 - b _020D3BE0 -_020D3B18: - subs r5, r3, r12 - ldr r2, [lr, #0x10] - addmi r5, r5, r4 - add r2, r2, r5, lsl #0x3 - ldrh r4, [r2, #0x4] - cmp r4, #0x0 - bne _020D3B60 - ldrh r3, [r2, #0x0] - ldrh r1, [r2, #0x2] - add sp, sp, #0x4 - strh r3, [r0, #0x0] - strh r1, [r0, #0x2] - ldrh r3, [r2, #0x4] - ldrh r1, [r2, #0x6] - strh r3, [r0, #0x4] - strh r1, [r0, #0x6] - ldmia sp!, {r4-r5,lr} - bx lr -_020D3B60: - ldrh r4, [r0, #0x6] - ands r4, r4, #0x1 - beq _020D3B90 - ldrh r4, [r2, #0x6] - ands r4, r4, #0x1 - bne _020D3B90 - ldrh r4, [r2, #0x0] - cmp r12, #0x0 - strh r4, [r0, #0x0] - ldrneh r4, [r1, #0x0] - bicne r4, r4, #0x1 - strneh r4, [r1, #0x0] -_020D3B90: - ldrh r4, [r0, #0x6] - ands r4, r4, #0x2 - beq _020D3BC0 - ldrh r4, [r2, #0x6] - ands r4, r4, #0x2 - bne _020D3BC0 - ldrh r2, [r2, #0x2] - cmp r12, #0x0 - strh r2, [r0, #0x2] - ldrneh r2, [r1, #0x0] - bicne r2, r2, #0x2 - strneh r2, [r1, #0x0] -_020D3BC0: - ldrh r2, [r0, #0x6] - cmp r2, #0x0 - moveq r1, #0x1 - streqh r1, [r0, #0x4] - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - add r12, r12, #0x1 -_020D3BE0: - ldrh r2, [lr, #0xe] - cmp r12, r2 - bge _020D3BFC - ldrh r4, [lr, #0x14] - sub r2, r4, #0x1 - cmp r12, r2 - blt _020D3B18 -_020D3BFC: - mov r1, #0x1 - strh r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D3C10: .word 0x021D5474 - - arm_func_start TP_RequestAutoSamplingStopAsync -TP_RequestAutoSamplingStopAsync: ; 0x020D3C14 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - mov r4, r0 - ldr r1, _020D3CB0 ; =0x03000200 - mov r0, #0x6 - mov r2, #0x0 - bl PXI_SendWordByFifo -_020D3C30: - cmp r0, #0x0 - movge r0, #0x1 - movlt r0, #0x0 - cmp r0, #0x0 - bne _020D3C84 - mov r0, r4 - bl OS_RestoreInterrupts - ldr r0, _020D3CB4 - ldrh r1, [r0, #0x34] - ldr r3, [r0] - orr r1, r1, #0x4 - strh r1, [r0, #0x34] - cmp r3, #0x0 - ldmeqia sp!, {r4, lr} - bxeq lr - mov r0, #0x2 - mov r1, #0x4 - mov r2, #0x0 - blx r3 - ldmia sp!, {r4, lr} - bx lr -_020D3C84: - ldr r1, _020D3CB4 - mov r0, r4 - ldrh r2, [r1, #0x36] - orr r2, r2, #0x4 - strh r2, [r1, #0x36] - ldrh r2, [r1, #0x34] - bic r2, r2, #0x4 - strh r2, [r1, #0x34] - bl OS_RestoreInterrupts - ldmia sp!, {r4, lr} - bx lr -_020D3CB0: .word 0x03000200 -_020D3CB4: .word 0x021D5474 - - arm_func_start TP_RequestAutoSamplingStartAsync -TP_RequestAutoSamplingStartAsync: ; 0x020D3CB8 - stmdb sp!, {r4-r6,lr} - ldr r4, _020D3DC0 ; =0x021D5474 - mov r5, r1 - mov r12, #0x0 - mov r6, r0 - str r2, [r4, #0x10] - strh r12, [r4, #0xc] - strh r5, [r4, #0xe] - strh r3, [r4, #0x14] - cmp r3, #0x0 - bls _020D3D00 - mov r1, r12 -_020D3CE8: - ldr r0, [r4, #0x10] - add r0, r0, r12, lsl #0x3 - add r12, r12, #0x1 - strh r1, [r0, #0x4] - cmp r12, r3 - blo _020D3CE8 -_020D3D00: - bl OS_DisableInterrupts - mov r4, r0 - ldr r0, _020D3DC4 ; =0x02000100 - and r1, r5, #0xff - orr r1, r1, r0 - mov r0, #0x6 - mov r2, #0x0 - bl PXI_SendWordByFifo -_020D3D20: - cmp r0, #0x0 - movlt r0, #0x0 - blt _020D3D4C - ldr r1, _020D3DC8 - mov r0, #0x6 - orr r1, r6, r1 - mov r2, #0x0 - bl PXI_SendWordByFifo - cmp r0, #0x0 - movlt r0, #0x0 - movge r0, #0x1 -_020D3D4C: - ands r0, r0, #0xFF - bne _020D3D94 - mov r0, r4 - bl OS_RestoreInterrupts - ldr r0, _020D3DC0 - ldrh r1, [r0, #0x34] - ldr r3, [r0] - orr r1, r1, #0x2 - strh r1, [r0, #0x34] - cmp r3, #0x0 - ldmeqia sp!, {r4-r6, lr} - bxeq lr - mov r0, #0x1 - mov r1, #0x4 - mov r2, #0x0 - blx r3 - ldmia sp!, {r4-r6, lr} - bx lr -_020D3D94: - ldr r1, _020D3DC0 - mov r0, r4 - ldrh r2, [r1, #0x36] - orr r2, r2, #0x2 - strh r2, [r1, #0x36] - ldrh r2, [r1, #0x34] - bic r2, r2, #0x2 - strh r2, [r1, #0x34] - bl OS_RestoreInterrupts - ldmia sp!, {r4-r6, lr} - bx lr -_020D3DC0: .word 0x021D5474 -_020D3DC4: .word 0x02000100 -_020D3DC8: .word 0x01010000 - - arm_func_start TP_WaitRawResult -TP_WaitRawResult: ; 0x020D3DCC - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - bl TP_WaitBusy - ldr r1, _020D3E20 ; =0x021D5474 - ldrh r0, [r1, #0x34] - ands r0, r0, #0x1 - movne r0, #0x1 - ldmneia sp!, {r4,lr} - bxne lr - ldrh r3, [r1, #0x4] - ldrh r2, [r1, #0x6] - mov r0, #0x0 - strh r3, [r4, #0x0] - strh r2, [r4, #0x2] - ldrh r2, [r1, #0x8] - ldrh r1, [r1, #0xa] - strh r2, [r4, #0x4] - strh r1, [r4, #0x6] - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D3E20: .word 0x021D5474 - - arm_func_start TP_RequestSamplingAsync -TP_RequestSamplingAsync: ; 0x020D3E24 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - mov r4, r0 - mov r0, #0x6 - mov r1, #0x3000000 - mov r2, #0x0 - bl PXI_SendWordByFifo -_020D3E40: - cmp r0, #0x0 - movge r0, #0x1 - movlt r0, #0x0 - cmp r0, #0x0 - bne _020D3E94 - mov r0, r4 - bl OS_RestoreInterrupts - ldr r0, _20D3EC0 - ldrh r1, [r0, #0x34] - ldr r3, [r0] - orr r1, r1, #0x1 - strh r1, [r0, #0x34] - cmp r3, #0x0 - ldmeqia sp!, {r4, lr} - bxeq lr - mov r0, #0x0 - mov r2, r0 - mov r1, #0x4 - blx r3 - ldmia sp!, {r4, lr} - bx lr -_020D3E94: - ldr r1, _20D3EC0 - mov r0, r4 - ldrh r2, [r1, #0x36] - orr r2, r2, #0x1 - strh r2, [r1, #0x36] - ldrh r2, [r1, #0x34] - bic r2, r2, #0x1 - strh r2, [r1, #0x34] - bl OS_RestoreInterrupts - ldmia sp!, {r4, lr} - bx lr -_20D3EC0: .word 0x021D5474 - - arm_func_start TP_SetCalibrateParam -TP_SetCalibrateParam: ; 0x020D3EC4 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - movs r4, r0 - ldreq r0, _020D3FF8 ; =0x021D5474 - moveq r1, #0x0 - streqh r1, [r0, #0x30] - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - bl OS_DisableInterrupts - ldrsh lr, [r4, #0x4] - cmp lr, #0x0 - beq _020D3F50 - ldr r5, _020D3FFC ; =0x04000280 - mov r12, #0x0 - ldr r2, _020D4000 ; =0x04000290 - strh r12, [r5, #0x0] - mov r3, #0x10000000 - ldr r1, _020D4004 ; =0x04000298 - str r3, [r2, #0x0] - str lr, [r1, #0x0] - str r12, [r1, #0x4] - ldrsh r2, [r4, #0x0] - ldr r1, _020D3FF8 ; =0x021D5474 - str r2, [r1, #0x18] - ldrsh r2, [r4, #0x4] - str r2, [r1, #0x1c] -_020D3F30: - ldrh r1, [r5, #0x0] - ands r1, r1, #0x8000 - bne _020D3F30 - ldr r2, _020D4008 ; =0x040002A0 - ldr r1, _020D3FF8 ; =0x021D5474 - ldr r2, [r2, #0x0] - str r2, [r1, #0x20] - b _020D3F64 -_020D3F50: - ldr r1, _020D3FF8 ; =0x021D5474 - mov r2, #0x0 - str r2, [r1, #0x18] - str r2, [r1, #0x1c] - str r2, [r1, #0x20] -_020D3F64: - ldrsh r5, [r4, #0x6] - cmp r5, #0x0 - beq _020D3FC8 - ldr ip, _020D3FFC ; =0x04000280 - mov lr, #0x0 - ldr r2, _020D4000 ; =0x04000290 - strh lr, [r12, #0x0] - mov r3, #0x10000000 - ldr r1, _020D4004 ; =0x04000298 - str r3, [r2, #0x0] - str r5, [r1, #0x0] - str lr, [r1, #0x4] - ldrsh r2, [r4, #0x2] - ldr r1, _020D3FF8 ; =0x021D5474 - str r2, [r1, #0x24] - ldrsh r2, [r4, #0x6] - str r2, [r1, #0x28] -_020D3FA8: - ldrh r1, [r12, #0x0] - ands r1, r1, #0x8000 - bne _020D3FA8 - ldr r2, _020D4008 ; =0x040002A0 - ldr r1, _020D3FF8 ; =0x021D5474 - ldr r2, [r2, #0x0] - str r2, [r1, #0x2c] - b _020D3FDC -_020D3FC8: - ldr r1, _020D3FF8 ; =0x021D5474 - mov r2, #0x0 - str r2, [r1, #0x24] - str r2, [r1, #0x28] - str r2, [r1, #0x2c] -_020D3FDC: - bl OS_RestoreInterrupts - ldr r0, _020D3FF8 ; =0x021D5474 - mov r1, #0x1 - strh r1, [r0, #0x30] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D3FF8: .word 0x021D5474 -_020D3FFC: .word 0x04000280 -_020D4000: .word 0x04000290 -_020D4004: .word 0x04000298 -_020D4008: .word 0x040002A0 - - arm_func_start TP_GetUserInfo -TP_GetUserInfo: ; 0x020D400C - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x18 - ldr ip, _020D40B4 ; =0x027FFC80 - mov r4, r0 - ldrh r1, [r12, #0x58] - ldrh r2, [r12, #0x5a] - ldrb r3, [r12, #0x5c] - cmp r1, #0x0 - ldrb lr, [r12, #0x5d] - ldrh r6, [r12, #0x5e] - ldrh r5, [r12, #0x60] - ldrb r0, [r12, #0x62] - ldrb r12, [r12, #0x63] - bne _020D405C - cmp r6, #0x0 - bne _020D405C - cmp r2, #0x0 - bne _020D405C - cmp r5, #0x0 - beq _020D4080 -_020D405C: - str lr, [sp, #0x0] - str r6, [sp, #0x4] - str r5, [sp, #0x8] - str r0, [sp, #0xc] - mov r0, r4 - str r12, [sp, #0x10] - bl TP_CalcCalibrateParam -_020D4078: - cmp r0, #0 - beq _020D40A4 -_020D4080: - mov r0, #0x0 - strh r0, [r4, #0x0] - strh r0, [r4, #0x2] - strh r0, [r4, #0x4] - strh r0, [r4, #0x6] - add sp, sp, #0x18 - mov r0, #0x1 - ldmia sp!, {r4-r6,lr} - bx lr -_020D40A4: - mov r0, #0x1 - add sp, sp, #0x18 - ldmia sp!, {r4-r6,lr} - bx lr -_020D40B4: .word 0x027FFC80 - - arm_func_start TP_Init -TP_Init: ; 0x020D40B8 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020D413C ; =0x021D5470 - ldrh r1, [r0, #0x0] - cmp r1, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - mov r1, #0x1 - strh r1, [r0, #0x0] - bl PXI_Init - ldr r0, _020D4140 ; =0x021D5474 - mov r1, #0x0 - strh r1, [r0, #0x32] - strh r1, [r0, #0x36] - strh r1, [r0, #0xc] - str r1, [r0, #0x0] - str r1, [r0, #0x10] - strh r1, [r0, #0x30] - strh r1, [r0, #0x34] - mov r5, #0x6 - mov r4, #0x1 -_020D4110: - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady -_020D411C: - cmp r0, #0x0 - beq _020D4110 - ldr r1, _020D4144 - mov r0, #0x6 - bl PXI_SetFifoRecvCallback - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr -_020D413C: .word 0x021D5470 -_020D4140: .word 0x021D5474 -_020D4144: .word FUN_020D4148 - - arm_func_start FUN_020D4148 -FUN_020D4148: ; 0x020D4148 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - mov r0, r1, lsl #0x10 - mov r3, r0, lsr #0x10 - and r0, r3, #0x7f00 - mov r0, r0, lsl #0x8 - cmp r2, #0x0 - mov r0, r0, lsr #0x10 - beq _020D41AC - ldr r1, _020D43FC ; =0x021D5474 - mov r2, #0x1 - ldrh r4, [r1, #0x34] - ldr r3, [r1, #0x0] - orr r2, r4, r2, lsl r0 - cmp r3, #0x0 - strh r2, [r1, #0x34] - addeq sp, sp, #0x8 - ldmeqia sp!, {r4,lr} - bxeq lr - mov r1, #0x4 - mov r2, #0x0 - blx r3 - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020D41AC: - cmp r0, #0x10 - bne _020D427C - ldr r1, _020D43FC ; =0x021D5474 - ldrh r3, [r1, #0xc] - ldrh r2, [r1, #0x14] - add r3, r3, #0x1 - strh r3, [r1, #0xc] - ldrh r3, [r1, #0xc] - cmp r3, r2 - movcs r2, #0x0 - strcsh r2, [r1, #0xc] - ldr r1, _020D4400 ; =0x027FFFAA - ldr r2, _020D43FC ; =0x021D5474 - ldrh r3, [r1, #0x0] - ldr r1, _020D4404 ; =0x027FFFAC - ldrh r12, [r2, #0xc] - strh r3, [sp, #0x0] - ldrh r1, [r1, #0x0] - ldr r4, [r2, #0x10] - mov lr, r12, lsl #0x3 - strh r1, [sp, #0x2] - ldr r3, [sp, #0x0] - add r1, r4, r12, lsl #0x3 - mov r3, r3, lsl #0x14 - mov r3, r3, lsr #0x14 - strh r3, [r4, lr] - ldr r3, [sp, #0x0] - mov r3, r3, lsl #0x8 - mov r3, r3, lsr #0x14 - strh r3, [r1, #0x2] - ldr r3, [sp, #0x0] - mov r3, r3, lsl #0x7 - mov r3, r3, lsr #0x1f - and r3, r3, #0xff - strh r3, [r1, #0x4] - ldr r3, [sp, #0x0] - mov r3, r3, lsl #0x5 - mov r3, r3, lsr #0x1e - and r3, r3, #0xff - strh r3, [r1, #0x6] - ldr r3, [r2, #0x0] - cmp r3, #0x0 - addeq sp, sp, #0x8 - ldmeqia sp!, {r4,lr} - bxeq lr - ldrh r2, [r2, #0xc] - mov r1, #0x0 - and r2, r2, #0xff - blx r3 - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020D427C: - ands r1, r1, #0x1000000 - addeq sp, sp, #0x8 - ldmeqia sp!, {r4,lr} - bxeq lr - and r1, r3, #0xff - cmp r1, #0x4 - addls pc, pc, r1, lsl #0x2 - b _020D43EC -_020D429C: - b _020D42B0 - b _020D43EC - b _020D4390 - b _020D4398 - b _020D4388 -_020D42B0: - cmp r0, #0x0 - beq _020D42D4 - cmp r0, #0x1 - beq _020D4338 - cmp r0, #0x2 - ldreq r1, _020D43FC - moveq r2, #0x0 - streqh r2, [r1, #0x32] - b _020D4344 -_020D42D4: - ldr r1, _020D4400 - ldr r3, _020D4404 - ldrh ip, [r1] - ldr r1, _020D43FC - mov r2, #0x0 - strh ip, [sp, #0x4] - ldrh r3, [r3] - strh r3, [sp, #0x6] - ldr ip, [sp, #0x4] - strh r2, [r1, #0x32] - mov r3, ip, lsl #0x7 - mov r2, ip, lsl #0x5 - mov lr, ip, lsl #0x14 - mov ip, ip, lsl #0x8 - mov r3, r3, lsr #0x1F - mov r2, r2, lsr #0x1E - mov lr, lr, lsr #0x14 - mov ip, ip, lsr #0x14 - and r3, r3, #0xFF - and r2, r2, #0xFF - strh lr, [r1, #0x4] - strh ip, [r1, #0x6] - strh r3, [r1, #0x8] - strh r2, [r1, #0xA] - b _020D4344 -_020D4338: - ldr r1, _020D43FC - mov r2, #0x2 - strh r2, [r1, #0x32] -_020D4344: - ldr r1, _020D43FC - mov r2, #0x1 - ldrh ip, [r1, #0x36] - mvn r2, r2, lsl r0 - ldr r3, [r1] - and r2, ip, r2 - cmp r3, #0x0 - strh r2, [r1, #0x36] - addeq sp, sp, #0x8 - ldmeqia sp!, {r4, lr} - bxeq lr - mov r1, #0x0 - mov r2, r1 - blx r3 - add sp, sp, #0x8 - ldmia sp!, {r4, lr} - bx lr -_020D4388: - mov r4, #0x3 - b _020D439C -_020D4390: - mov r4, #0x1 - b _020D439C -_020D4398: - mov r4, #0x2 -_020D439C: - ldr r1, _020D43FC - mov lr, #0x1 - ldrh ip, [r1, #0x34] - ldr r3, [r1] - mvn r2, lr, lsl r0 - orr ip, ip, lr, lsl r0 - strh ip, [r1, #0x34] - ldrh ip, [r1, #0x36] - cmp r3, #0x0 - addeq sp, sp, #0x8 - and r2, ip, r2 - strh r2, [r1, #0x36] - ldmeqia sp!, {r4, lr} - bxeq lr - and r1, r4, #0xff - mov r2, #0x0 - blx r3 - add sp, sp, #0x8 - ldmia sp!, {r4, lr} - bx lr -_020D43EC: - bl OS_Terminate - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D43FC: .word 0x021D5474 -_020D4400: .word 0x027FFFAA -_020D4404: .word 0x027FFFAC - - arm_func_start MicWaitBusy -MicWaitBusy: ; 0x020D4408 - ldr ip, _020D441C ; =0x021D54B0 -_020D440C: - ldr r0, [r12, #0x0] - cmp r0, #0x1 - beq _020D440C - bx lr - .balign 4 -_020D441C: .word 0x021D54B0 - - arm_func_start MicGetResultCallback -MicGetResultCallback: ; 0x020D4420 - ldr r1, _020D442C ; =0x021D54B0 - str r0, [r1, #0xc] - bx lr - .balign 4 -_020D442C: .word 0x021D54B0 - - arm_func_start MicStopAutoSampling -MicStopAutoSampling: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D4460 ; =0x03004200 - mov r0, #0x9 - mov r2, #0x0 - bl PXI_SendWordByFifo -_020D4448: - cmp r0, #0x0 - movge r0, #0x1 - movlt r0, #0x0 - add sp, sp, #4 - ldmfd sp!, {lr} - bx lr -_020D4460: .word 0x03004200 - - arm_func_start MicStartAutoSampling -MicStartAutoSampling: ; 0x020D4464 - stmdb sp!, {r4-r6,lr} - ldr ip, _020D4584 ; =0x02004100 - mov r6, r0 - mov r5, r1 - mov r4, r2 - orr r1, r3, r12 - mov r0, #0x9 - mov r2, #0x0 - bl PXI_SendWordByFifo -_020D4488: - cmp r0, #0x0 - movlt r0, #0x0 - ldmltia sp!, {r4-r6, lr} - bxlt lr - mov r0, r6, lsr #0x10 - orr r1, r0, #0x10000 - mov r0, #0x9 - mov r2, #0x0 - bl PXI_SendWordByFifo - cmp r0, #0x0 - movlt r0, #0x0 - ldmltia sp!, {r4-r6, lr} - bxlt lr - ldr r1, _020D4588 - mov r0, #0x9 - and r1, r6, r1 - orr r1, r1, #0x20000 - mov r2, #0x0 - bl PXI_SendWordByFifo - cmp r0, #0x0 - movlt r0, #0x0 - ldmltia sp!, {r4-r6, lr} - bxlt lr - mov r0, r5, lsr #0x10 - orr r1, r0, #0x30000 - mov r0, #0x9 - mov r2, #0x0 - bl PXI_SendWordByFifo - cmp r0, #0x0 - movlt r0, #0x0 - ldmltia sp!, {r4-r6, lr} - bxlt lr - ldr r1, _020D4588 - mov r0, #0x9 - and r1, r5, r1 - orr r1, r1, #0x40000 - mov r2, #0x0 - bl PXI_SendWordByFifo - cmp r0, #0x0 - movlt r0, #0x0 - ldmltia sp!, {r4-r6, lr} - bxlt lr - mov r0, r4, lsr #0x10 - orr r1, r0, #0x50000 - mov r0, #0x9 - mov r2, #0x0 - bl PXI_SendWordByFifo - cmp r0, #0x0 - movlt r0, #0x0 - ldmltia sp!, {r4-r6, lr} - bxlt lr - ldr r0, _020D4588 - ldr r1, _020D458C - and r0, r4, r0 - orr r1, r0, r1 - mov r0, #0x9 - mov r2, #0x0 - bl PXI_SendWordByFifo - cmp r0, #0x0 - movge r0, #0x1 - movlt r0, #0x0 - ldmia sp!, {r4-r6, lr} - bx lr -_020D4584: .word 0x02004100 -_020D4588: .word 0x0000FFFF -_020D458C: .word 0x01060000 - - arm_func_start MicDoSampling -MicDoSampling: ; 0x020D4590 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D45C4 ; =0x03004000 - mov r2, #0x0 - orr r1, r0, r1 - mov r0, #0x9 - bl PXI_SendWordByFifo -_020D45AC: - cmp r0, #0x0 - movge r0, #0x1 - movlt r0, #0x0 - add sp, sp, #0x4 - ldmfd sp!, {lr} - bx lr -_020D45C4: .word 0x03004000 - - arm_func_start MicCommonCallback -MicCommonCallback: ; 0x020D45C8 - stmdb sp!, {r4,lr} - mov r4, r1 - cmp r2, #0x0 - beq _020D4610 - ldr r0, _020D4700 ; =0x021D54B0 - ldr r2, _020D4700 ; =0x021D54B0 - ldr r1, [r0, #0x0] - ldr r12, [r2, #0x4] - cmp r1, #0x0 - movne r1, #0x0 - strne r1, [r0, #0x0] - cmp r12, #0x0 - beq _020D4610 - ldr r1, [r2, #0x8] - mov r3, #0x0 - mov r0, #0x6 - str r3, [r2, #0x4] - blx r12 -_020D4610: - and r0, r4, #0xff - mov r1, r0, lsl #0x10 - and r2, r4, #0x7f00 - mov r0, r2, lsl #0x8 - mov r1, r1, lsr #0x10 - cmp r1, #0x4 - mov r2, r0, lsr #0x10 - addls pc, pc, r1, lsl #0x2 - b _020D4670 -_020D4634: - b _020D4648 - b _020D4650 - b _020D4658 - b _020D4660 - b _020D4668 -_020D4648: - mov r0, #0x0 - b _020D4674 -_020D4650: - mov r0, #0x4 - b _020D4674 -_020D4658: - mov r0, #0x2 - b _020D4674 -_020D4660: - mov r0, #0x5 - b _020D4674 -_020D4668: - mov r0, #0x1 - b _020D4674 -_020D4670: - mov r0, #0x6 -_020D4674: - cmp r2, #0x51 - bne _020D46A0 - ldr r1, _020D4700 ; =0x021D54B0 - ldr r2, [r1, #0x10] - cmp r2, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ldr r1, [r1, #0x14] - blx r2 - ldmia sp!, {r4,lr} - bx lr -_020D46A0: - cmp r2, #0x40 - bne _020D46C0 - ldr r1, _020D4700 ; =0x021D54B0 - ldr r2, [r1, #0x18] - cmp r2, #0x0 - ldrne r1, _020D4704 ; =0x027FFF94 - ldrneh r1, [r1, #0x0] - strneh r1, [r2, #0x0] -_020D46C0: - ldr r1, _020D4700 ; =0x021D54B0 - ldr r2, [r1, #0x0] - cmp r2, #0x0 - movne r2, #0x0 - strne r2, [r1, #0x0] - ldr r2, _020D4700 ; =0x021D54B0 - ldr r4, [r2, #0x4] - cmp r4, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ldr r1, [r2, #0x8] - mov r3, #0x0 - str r3, [r2, #0x4] - blx r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D4700: .word 0x021D54B0 -_020D4704: .word 0x027FFF94 - - arm_func_start MIC_GetLastSamplingAddress -MIC_GetLastSamplingAddress: ; 0x020D4708 - ldr r0, _020D4714 ; =0x027FFF90 - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020D4714: .word 0x027FFF90 - - arm_func_start MIC_StopAutoSampling -MIC_StopAutoSampling: ; 0x020D4718 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020D4754 ; =MicGetResultCallback - mov r1, #0x0 - bl MIC_StopAutoSamplingAsync - ldr r1, _020D4758 ; =0x021D54B0 - cmp r0, #0x0 - str r0, [r1, #0xc] - bne _020D4740 - bl MicWaitBusy -_020D4740: - ldr r0, _020D4758 ; =0x021D54B0 - ldr r0, [r0, #0xc] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D4754: .word MicGetResultCallback -_020D4758: .word 0x021D54B0 - - arm_func_start MIC_StopAutoSamplingAsync -MIC_StopAutoSamplingAsync: ; 0x020D475C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - bl OS_DisableInterrupts - ldr r1, _020D47C8 ; =0x021D54B0 - ldr r2, [r1, #0x0] - cmp r2, #0x0 - beq _020D4794 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r5,lr} - bx lr -_020D4794: - mov r2, #0x1 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - ldr r0, _020D47C8 ; =0x021D54B0 - str r5, [r0, #0x4] - str r4, [r0, #0x8] - bl MicStopAutoSampling -_020D47B0: - cmp r0, #0x0 - movne r0, #0x0 - moveq r0, #0x3 - add sp, sp, #0x4 - ldmia sp!, {r4-r5, lr} - bx lr -_020D47C8: .word 0x021D54B0 - - arm_func_start MIC_StartAutoSampling -MIC_StartAutoSampling: ; 0x020D47CC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D4808 ; =MicGetResultCallback - mov r2, #0x0 - bl MIC_StartAutoSamplingAsync - ldr r1, _020D480C ; =0x021D54B0 - cmp r0, #0x0 - str r0, [r1, #0xc] - bne _020D47F4 - bl MicWaitBusy -_020D47F4: - ldr r0, _020D480C ; =0x021D54B0 - ldr r0, [r0, #0xc] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D4808: .word MicGetResultCallback -_020D480C: .word 0x021D54B0 - - arm_func_start MIC_StartAutoSamplingAsync -MIC_StartAutoSamplingAsync: ; 0x020D4810 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - ldr r0, [r7, #0x4] - mov r6, r1 - ands r0, r0, #0x1f - mov r5, r2 - addne sp, sp, #0x4 - movne r0, #0x2 - ldmneia sp!, {r4-r7,lr} - bxne lr - ldr r1, [r7, #0x8] - ands r0, r1, #0x1f - addne sp, sp, #0x4 - movne r0, #0x2 - ldmneia sp!, {r4-r7,lr} - bxne lr - cmp r1, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x2 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - ldr r0, [r7, #0xc] - cmp r0, #0x400 - addcc sp, sp, #0x4 - movcc r0, #0x2 - ldmccia sp!, {r4-r7,lr} - bxcc lr - ldr r0, [r7, #0x0] - cmp r0, #0x5 - addls pc, pc, r0, lsl #0x2 - b _020D48D8 -_020D4890: - b _020D48A8 - b _020D48B0 - b _020D48B8 - b _020D48C0 - b _020D48C8 - b _020D48D0 -_020D48A8: - mov r1, #0x0 - b _020D48E8 -_020D48B0: - mov r1, #0x1 - b _020D48E8 -_020D48B8: - mov r1, #0x2 - b _020D48E8 -_020D48C0: - mov r1, #0x3 - b _020D48E8 -_020D48C8: - mov r1, #0x5 - b _020D48E8 -_020D48D0: - mov r1, #0x7 - b _020D48E8 -_020D48D8: - add sp, sp, #0x4 - mov r0, #0x2 - ldmia sp!, {r4-r7,lr} - bx lr -_020D48E8: - ldr r0, [r7, #0x10] - cmp r0, #0x0 - orrne r0, r1, #0x10 - andne r0, r0, #0xff - andeq r0, r1, #0xff - and r4, r0, #0xff - bl OS_DisableInterrupts - ldr r1, _020D497C - ldr r2, [r1] - cmp r2, #0x0 - beq _020D4928 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020D4928: - mov r2, #0x1 - str r2, [r1] - bl OS_RestoreInterrupts - ldr r0, _020D497C - mov r3, r4 - str r6, [r0, #0x4] - str r5, [r0, #0x8] - ldr r1, [r7, #0x14] - str r1, [r0, #0x10] - ldr r1, [r7, #0x18] - str r1, [r0, #0x14] - ldr r0, [r7, #0x4] - ldr r1, [r7, #0x8] - ldr r2, [r7, #0xC] - bl MicStartAutoSampling - cmp r0, #0x0 - movne r0, #0x0 - moveq r0, #0x3 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr -_020D497C: .word 0x021D54B0 - - arm_func_start MIC_DoSamplingAsync -MIC_DoSamplingAsync: ; 0x020D4980 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - cmp r0, #0x6 - mov r7, r1 - mov r6, r2 - mov r5, r3 - addge sp, sp, #0x4 - movge r0, #0x2 - ldmgeia sp!, {r4-r7,lr} - bxge lr - cmp r0, #0x3 - addls pc, pc, r0, lsl #0x2 - b _020D49E4 -_020D49B4: - b _020D49C4 - b _020D49CC - b _020D49D4 - b _020D49DC -_020D49C4: - mov r4, #0x0 - b _020D49F4 -_020D49CC: - mov r4, #0x1 - b _020D49F4 -_020D49D4: - mov r4, #0x2 - b _020D49F4 -_020D49DC: - mov r4, #0x3 - b _020D49F4 -_020D49E4: - add sp, sp, #0x4 - mov r0, #0x2 - ldmia sp!, {r4-r7,lr} - bx lr -_020D49F4: - bl OS_DisableInterrupts - ldr r1, _020D4A58 - ldr r2, [r1] - cmp r2, #0x0 - beq _020D4A1C - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020D4A1C: - mov r2, #0x1 - str r2, [r1] - bl OS_RestoreInterrupts - ldr r1, _020D4A58 - mov r0, r4 - str r6, [r1, #0x4] - str r5, [r1, #0x8] - str r7, [r1, #0x18] - bl MicDoSampling - cmp r0, #0x0 - movne r0, #0x0 - moveq r0, #0x3 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr -_020D4A58: .word 0x021D54B0 - - arm_func_start MIC_Init -MIC_Init: ; 0x020D4A5C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r1, _020D4AD8 ; =0x021D54AC - ldrh r0, [r1, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - ldr r0, _020D4ADC ; =0x021D54B0 - mov r2, #0x0 - mov r3, #0x1 - strh r3, [r1, #0x0] - str r2, [r0, #0x0] - str r2, [r0, #0x4] - bl PXI_Init - mov r5, #0x9 - mov r4, #0x1 -_020D4AA0: - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady -_020D4AAC: - cmp r0, #0x0 - beq _020D4AA0 - ldr r2, _020D4AE0 - mov r3, #0x0 - ldr r1, _020D4AE4 - mov r0, #0x9 - str r3, [r2] - bl PXI_SetFifoRecvCallback - add sp, sp, #0x4 - ldmia sp!, {r4-r5, lr} - bx lr -_020D4AD8: .word 0x021D54AC -_020D4ADC: .word 0x021D54B0 -_020D4AE0: .word 0x027FFF90 -_020D4AE4: .word MicCommonCallback - - arm_func_start PM_DeletePostSleepCallback -PM_DeletePostSleepCallback: ; 0x020D4AE8 - ldr ip, _020D4AF8 ; =0x020D4B78 - mov r1, r0 - ldr r0, _020D4AFC ; =0x021D54E0 - bx r12 - .balign 4 -_020D4AF8: .word 0x020D4B78 -_020D4AFC: .word 0x021D54E0 - - arm_func_start PM_DeletePreSleepCallback -PM_DeletePreSleepCallback: ; 0x020D4B00 - ldr ip, _020D4B10 ; =0x020D4B78 - mov r1, r0 - ldr r0, _020D4B14 ; =0x021D54D8 - bx r12 - .balign 4 -_020D4B10: .word 0x020D4B78 -_020D4B14: .word 0x021D54D8 - - arm_func_start PM_AppendPostSleepCallback -PM_AppendPostSleepCallback: ; 0x020D4B18 - ldr ip, _020D4B28 ; =FUN_020D4BC4 - mov r1, r0 - ldr r0, _020D4B2C ; =0x021D54E0 - bx r12 - .balign 4 -_020D4B28: .word FUN_020D4BC4 -_020D4B2C: .word 0x021D54E0 - - arm_func_start PM_PrependPreSleepCallback -PM_PrependPreSleepCallback: ; 0x020D4B30 - ldr ip, _020D4B40 ; =FUN_020D4C0C - mov r1, r0 - ldr r0, _020D4B44 ; =0x021D54D8 - bx r12 - .balign 4 -_020D4B40: .word FUN_020D4C0C -_020D4B44: .word 0x021D54D8 - - arm_func_start PMi_ExecuteList -PMi_ExecuteList: ; 0x020D4B48 - stmdb sp!, {r4,lr} - movs r4, r0 - ldmeqia sp!, {r4,lr} - bxeq lr -_020D4B58: - ldr r0, [r4, #0x4] - ldr r1, [r4, #0x0] - blx r1 - ldr r4, [r4, #0x8] - cmp r4, #0x0 - bne _020D4B58 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start FUN_020D4B78 -FUN_020D4B78: - cmp r0, #0x0 - bxeq lr - ldr r3, [r0] - mov r2, r3 - cmp r3, #0x0 - bxeq lr -_020D4B90: - cmp r3, r1 - bne _020D4BB0 - cmp r3, r2 - ldreq r1, [r3, #0x8] - streq r1, [r0] - ldrne r0, [r3, #0x8] - strne r0, [r2, #0x8] - bx lr -_020D4BB0: - mov r2, r3 - ldr r3, [r3, #0x8] - cmp r3, #0x0 - bne _020D4B90 - bx lr - - arm_func_start FUN_020D4BC4 -FUN_020D4BC4: ; 0x020D4BC4 - cmp r0, #0x0 - bxeq lr - ldr r2, [r0, #0x0] - cmp r2, #0x0 - moveq r2, #0x0 - streq r2, [r1, #0x8] - streq r1, [r0, #0x0] - bxeq lr - ldr r0, [r2, #0x8] - cmp r0, #0x0 - beq _020D4C00 -_020D4BF0: - mov r2, r0 - ldr r0, [r0, #0x8] - cmp r0, #0x0 - bne _020D4BF0 -_020D4C00: - str r0, [r1, #0x8] - str r1, [r2, #0x8] - bx lr - - arm_func_start FUN_020D4C0C -FUN_020D4C0C: ; 0x020D4C0C - cmp r0, #0x0 - ldrne r2, [r0, #0x0] - strne r2, [r1, #0x8] - strne r1, [r0, #0x0] - bx lr - - arm_func_start PM_GetLEDPattern -PM_GetLEDPattern: ; 0x020D4C20 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D4C58 ; =0x020D587C - add r2, sp, #0x0 - bl PM_GetLEDPatternAsync -_020D4C34: - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmnefd sp!, {lr} - bxne lr - bl PMi_WaitBusy - ldr r0, [sp] - add sp, sp, #0x4 - ldmfd sp!, {lr} - bx lr -_020D4C58: .word 0x020D587C - - arm_func_start PM_GetLEDPatternAsync -PM_GetLEDPatternAsync: - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl PMi_Lock -_020D4C70: - cmp r0, #0x0 - moveq r0, #0x1 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - ldr r1, _020D4CA4 - ldr r0, _020D4CA8 - str r5, [r1, #0x4] - str r4, [r1, #0x8] - str r6, [r1, #0xC] - bl PMi_SendPxiData - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020D4CA4: .word 0x021D54E4 -_020D4CA8: .word 0x03006700 - - arm_func_start PMi_SendLEDPatternCommand -PMi_SendLEDPatternCommand: ; 0x020D4CAC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D4CE4 ; =0x020D587C - add r2, sp, #0x0 - bl PMi_SendLEDPatternCommandAsync -_020D4CC0: - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmnefd sp!, {lr} - bxne lr - bl PMi_WaitBusy - ldr r0, [sp] - add sp, sp, #0x4 - ldmfd sp!, {lr} - bx lr -_020D4CE4: .word 0x020D587C - - arm_func_start PMi_SendLEDPatternCommandAsync -PMi_SendLEDPatternCommandAsync: - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl PMi_Lock -_020D4CFC: - cmp r0, #0x0 - moveq r0, #0x1 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - ldr r0, _020D4D34 - ldr r1, _020D4D38 - and r2, r6, #0xff - orr r0, r2, r0 - str r5, [r1, #0x4] - str r4, [r1, #0x8] - bl PMi_SendPxiData - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020D4D34: .word 0x03006600 -_020D4D38: .word 0x021D54E4 - - arm_func_start PM_GetLCDPower -PM_GetLCDPower: ; 0x020D4D3C - ldr r0, _020D4D54 ; =0x04000304 - ldrh r0, [r0, #0x0] - ands r0, r0, #0x1 - movne r0, #0x1 - moveq r0, #0x0 - bx lr - .balign 4 -_020D4D54: .word 0x04000304 - - arm_func_start PM_SetLCDPower -PM_SetLCDPower: ; 0x020D4D58 - ldr ip, _020D4D74 ; =PMi_SetLCDPower - mov r1, #0x0 - cmp r0, #0x1 - movne r0, #0x0 - mov r2, r1 - mov r3, #0x1 - bx r12 - .balign 4 -_020D4D74: .word PMi_SetLCDPower - - arm_func_start PMi_SetLCDPower -PMi_SetLCDPower: ; 0x020D4D78 - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0x0 - beq _020D4E00 - cmp r0, #0x1 - bne _020D4E4C - cmp r2, #0x0 - bne _020D4DC0 - ldr r2, _020D4E5C ; =0x027FFC3C - ldr r0, _020D4E60 ; =0x021D54DC - ldr r2, [r2, #0x0] - ldr r0, [r0, #0x0] - sub r0, r2, r0 - cmp r0, #0x7 - addls sp, sp, #0x4 - movls r0, #0x0 - ldmlsia sp!, {lr} - bxls lr -_020D4DC0: - cmp r1, #0x0 - beq _020D4DEC - cmp r3, #0x0 - beq _020D4DDC - mov r0, r1 - bl PMi_SetLED - b _020D4DEC -_020D4DDC: - mov r0, r1 - mov r1, #0x0 - mov r2, r1 - bl PMi_SetLEDAsync -_020D4DEC: - ldr r1, _020D4E64 ; =0x04000304 - ldrh r0, [r1, #0x0] - orr r0, r0, #0x1 - strh r0, [r1, #0x0] - b _020D4E4C -_020D4E00: - ldr lr, _020D4E64 ; =0x04000304 - ldr r2, _020D4E5C ; =0x027FFC3C - ldrh r12, [lr, #0x0] - ldr r0, _020D4E60 ; =0x021D54DC - cmp r1, #0x0 - bic r12, r12, #0x1 - strh r12, [lr, #0x0] - ldr r2, [r2, #0x0] - str r2, [r0, #0x0] - beq _020D4E4C - cmp r3, #0x0 - beq _020D4E3C - mov r0, r1 - bl PMi_SetLED - b _020D4E4C -_020D4E3C: - mov r0, r1 - mov r1, #0x0 - mov r2, r1 - bl PMi_SetLEDAsync -_020D4E4C: - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D4E5C: .word 0x027FFC3C -_020D4E60: .word 0x021D54DC -_020D4E64: .word 0x04000304 - - arm_func_start PM_GoSleepMode -PM_GoSleepMode: ; 0x020D4E68 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x1c - ldr r3, _020D5084 ; =0x021D54D8 - mov r10, r0 - ldr r0, [r3, #0x0] - mov r9, r1 - mov r11, r2 - mov r8, #0x0 - bl PMi_ExecuteList - ldr r1, _020D5088 ; =0x04000208 - mov r0, r8 - ldrh r4, [r1, #0x0] - strh r0, [r1, #0x0] - bl OS_DisableInterrupts -_020D4EA0: - str r0, [sp] - ldr r0, _020D508C - bl OS_DisableIrqMask - str r0, [sp, #0x4] - mov r0, #0x40000 - bl OS_SetIrqMask - ldr r0, [sp] - bl OS_RestoreInterrupts - ldr r2, _020D5088 - mov r1, #0x1 - ldrh r0, [r2] - ands r0, sl, #0x8 - strh r1, [r2] - beq _020D4EE8 - ldr r0, _020D5090 - ldrh r0, [r0] - cmp r0, #0x2 - biceq sl, sl, #0x8 -_020D4EE8: - ands r0, sl, #0x10 - beq _020D4EFC - bl CTRDG_IsExisting - cmp r0, #0x0 - biceq sl, sl, #0x10 -_020D4EFC: - ldr r0, _020D5094 - mov r1, #0x4000000 - ldr r7, [r1] - ldr r6, [r0] - bl PM_GetLCDPower - str r0, [sp, #0x8] - add r0, sp, #0xC - add r1, sp, #0x10 - bl PM_GetBackLight - mov r0, #0x2 - mov r1, #0x0 - bl FUN_020D526C - ldr r2, _020D5098 - ldr r0, [r2] - str r0, [sp, #0x14] -_020D4F38: - ldr r1, [r2] - ldr r0, [sp, #0x14] - cmp r0, r1 - beq _020D4F38 - ldr r0, [r2] - mov r2, #0x4000000 - str r0, [sp, #0x14] - ldr r0, [r2] - ldr r1, _020D5094 - bic r0, r0, #0x30000 - str r0, [r2] - ldr r0, [r1] - bic r0, r0, #0x10000 - str r0, [r1] - ldr r2, _020D5098 -_020D4F74: - ldr r1, [r2] - ldr r0, [sp, #0x14] - cmp r0, r1 - beq _020D4F74 - ldr r0, [r2] - str r0, [sp, #0x14] - ldr r2, _020D5098 -_020D4F90: - ldr r1, [r2] - ldr r0, [sp, #0x14] - cmp r0, r1 - beq _020D4F90 - ldr r0, [sp, #0xC] - ldr r1, [sp, #0x10] - orr r0, sl, r0, lsl #0x5 - orr r0, r0, r1, lsl #0x6 - mov r0, r0, lsl #0x10 - mov r5, r0, lsr #0x10 - orr r0, r9, fp - mov r0, r0, lsl #0x10 - mov r9, r0, lsr #0x10 -_020D4FC4: - mov r0, r5 - mov r1, r9 - bl PMi_SendSleepStart - cmp r0, #0x0 - bne _020D4FC4 - bl OS_Halt - ldr r0, _020D509C - bl OS_SpinWait - ands r0, sl, #0x8 - beq _020D4FFC - ldr r0, _020D50A0 - ldr r0, [r0] - ands r0, r0, #0x100000 - movne r8, #0x1 -_020D4FFC: - cmp r8, #0x0 - bne _020D5040 - ldr r0, [sp, #0x8] - cmp r0, #0x1 - bne _020D5028 - mov r0, #0x1 - mov r1, r0 - mov r2, r0 - mov r3, #0x0 - bl PMi_SetLCDPower - b _020D5030 -_020D5028: - mov r0, #0x1 - bl PMi_SetLED -_020D5030: - mov r1, #0x4000000 - ldr r0, _020D5094 - str r7, [r1] - str r6, [r0] -_020D5040: - bl OS_DisableInterrupts - ldr r0, [sp, #0x4] - bl OS_SetIrqMask - ldr r0, [sp] - bl OS_RestoreInterrupts - ldr r1, _020D5088 - cmp r8, #0x0 - ldrh r0, [r1] - strh r4, [r1] - beq _020D506C - bl FUN_020D5180 -_020D506C: - ldr r0, _020D50A4 - ldr r0, [r0] - bl PMi_ExecuteList - add sp, sp, #0x1C - ldmia sp!, {r4-r11, lr} - bx lr -_020D5084: .word 0x021D54D8 -_020D5088: .word 0x04000208 -_020D508C: .word 0x003FFFFF -_020D5090: .word 0x027FFC40 -_020D5094: .word 0x04001000 -_020D5098: .word 0x027FFC3C -_020D509C: .word 0x00996A00 -_020D50A0: .word 0x04000214 -_020D50A4: .word 0x021D54E0 - - - arm_func_start PMi_SendPxiData -PMi_SendPxiData: ; 0x020D50A8 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, #0x8 - mov r4, #0x0 -_020D50B8: - mov r0, r5 - mov r1, r6 - mov r2, r4 - bl PXI_SendWordByFifo -_020D50C8: - cmp r0, #0 - bne _020D50B8 - ldmia sp!, {r4-r6, lr} - bx lr - - arm_func_start PM_GetBackLight -PM_GetBackLight: ; 0x020D50D8 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r1 - mov r5, r0 - add r1, sp, #0x0 - mov r0, #0x0 - bl PMi_ReadRegister -_020D50F4: - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - cmp r5, #0x0 - beq _020D5120 - ldrh r1, [sp] - ands r1, r1, #0x8 - movne r1, #0x1 - moveq r1, #0x0 - str r1, [r5] -_020D5120: - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldrh r1, [sp] - ands r1, r1, #0x4 - movne r1, #0x1 - moveq r1, #0x0 - str r1, [r4] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr diff --git a/asm/entry.s b/asm/entry.s index b0f1c340..6d7e0c17 100644 --- a/asm/entry.s +++ b/asm/entry.s @@ -70,9 +70,9 @@ _020008C4: add r1, r1, #60 ldr r0, _02000930 ; =0x01FF8000 str r0, [r1] - bl FUN_020EC5CC + bl _fp_init bl FUN_02000B64_dummy - bl FUN_020EC694 + bl __call_static_initializers ldr r1, _02000934 ; =0x02000C55 ldr lr, _02000938 ; =0xFFFF0000 tst sp, #4 diff --git a/asm/rom2.s b/asm/rom2.s index 46e54560..d21fb89d 100644 --- a/asm/rom2.s +++ b/asm/rom2.s @@ -1,129 +1,7 @@ -/* rom2.s TODO: Disassemble */ - .include "asm/macros.inc" - .section .text + .include "asm/macros.inc" + .include "global.inc" - .incbin "baserom.nds", 0xD9150, 0x16AE0 + .data - arm_func_start _ll_mul -_ll_mul: ; 0x020EBC30 - stmdb sp!, {r4, r5, lr} - umull r5, r4, r0, r2 - mla r4, r0, r3, r4 - mla r4, r2, r1, r4 - mov r1, r4 - mov r0, r5 - ldmia sp!, {r4, r5, lr} - bx lr - - arm_func_start _ll_shl -_ll_shl: ; 0x020EBC50 - ands r2, r2, #0x3F - bxeq lr - subs r3, r2, #0x20 - bge _020EBC74 - rsb r3, r2, #0x20 - mov r1, r1, lsl r2 - orr r1, r1, r0, lsr r3 - mov r0, r0, lsl r2 - bx lr -_020EBC74: - mov r1, r0, lsl r3 - mov r0, #0x0 - bx lr - - arm_func_start _s32_div_f -_s32_div_f: ; 0x20EBC80 - ; Test whether the args have different signs - eor ip, r0, r1 - and ip, ip, #0x80000000 - ; Test the sign of the numerator, and make it positive - cmp r0, #0x0 - rsblt r0, r0, #0x0 - addlt ip, ip, #1 - ; Make the denominator positive, also test for div0 - cmp r1, #0x0 - rsblt r1, r1, #0x0 - beq _020EBE78 - ; If the numerator is less than the denominator, return (0, numerator) - cmp r0, r1 - movcc r1, r0 - movcc r0, #0x0 - bcc _020EBE78 - ; Do the actual division - mov r2, #0x1c - mov r3, r0, lsr #0x4 - cmp r1, r3, lsr #0xc - suble r2, r2, #0x10 - movle r3, r3, lsr #0x10 - cmp r1, r3, lsr #0x4 - suble r2, r2, #0x8 - movle r3, r3, lsr #0x8 - cmp r1, r3 - suble r2, r2, #0x4 - movle r3, r3, lsr #0x4 - mov r0, r0, lsl r2 - rsb r1, r1, #0x0 - adds r0, r0, r0 - add r2, r2, r2, lsl #0x1 - add pc, pc, r2, lsl #0x2 - nop - .rept 32 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - .endr - mov r1, r3 -_020EBE78: - ; If the signs differed originally, negate quotient - ands r3, ip, #0x80000000 - rsbne r0, r0, #0x0 - ; If the numerator was negative, negate remainder - ands r3, ip, #0x1 - rsbne r1, r1, #0x0 - bx lr - -; required to make the linker happy : - - arm_func_start _u32_div_f -_u32_div_f: ; 0x020EBE8C - cmp r1, #0x0 - bxeq lr ; About as wrong as we can be - cmp r0, r1 - movcc r1, r0 - movcc r0, #0x0 - bxcc lr - mov r2, #0x1c - mov r3, r0, lsr #0x4 - cmp r1, r3, lsr #0xc - suble r2, r2, #0x10 - movle r3, r3, lsr #0x10 - cmp r1, r3, lsr #0x4 - suble r2, r2, #0x8 - movle r3, r3, lsr #0x8 - cmp r1, r3 - suble r2, r2, #0x4 - movle r3, r3, lsr #0x4 - mov r0, r0, lsl r2 - rsb r1, r1, #0x0 - adds r0, r0, r0 - add r2, r2, r2, lsl #0x1 - add pc, pc, r2, lsl #0x2 - nop - .rept 32 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - .endr - mov r1, r3 - bx lr - - .incbin "baserom.nds", 0xF0070, 0x55C - - .global FUN_020EC5CC -FUN_020EC5CC: - .incbin "baserom.nds", 0xF05CC, 0xC8 - - .global FUN_020EC694 -FUN_020EC694: -.incbin "baserom.nds", 0xF0694, 0x474 +.incbin "baserom.nds", 0xF0710, 0x3F8 ; this does not seem to be code \ No newline at end of file diff --git a/asm/secure.s b/asm/secure.s index 18313c93..8bfb7ede 100644 --- a/asm/secure.s +++ b/asm/secure.s @@ -11,7 +11,15 @@ FUN_0200019E: ; 0x0200019E bx lr thumb_func_end FUN_0200019E -.incbin "baserom.nds", 0x41A2, 0x450 +.incbin "baserom.nds", 0x41A2, 0x15C + + non_word_aligned_thumb_func_start FUN_020002FE +FUN_020002FE: ; 0x020002FE + swi 11 + bx lr + +.incbin "baserom.nds", 0x4302, 0x2F0 + non_word_aligned_thumb_func_start FUN_020005F2 FUN_020005F2: diff --git a/asm/unk_020C9C0C.s b/asm/unk_020C9C0C.s new file mode 100644 index 00000000..b5fab565 --- /dev/null +++ b/asm/unk_020C9C0C.s @@ -0,0 +1,13766 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start OS_WaitIrq +OS_WaitIrq: + stmdb sp!, {r4-r6,lr} + mov r5, r0 + mov r4, r1 + bl OS_DisableInterrupts + cmp r5, #0x0 + beq _020C9C3C + ldr r1, _020C9C80 ; =0x027E0000 + mvn r2, r4 + add r1, r1, #0x3000 + ldr r3, [r1, #0xff8] + and r2, r3, r2 + str r2, [r1, #0xff8] +_020C9C3C: + bl OS_RestoreInterrupts + ldr r1, _020C9C80 ; =0x027E0000 + add r0, r1, #0x3000 + ldr r0, [r0, #0xff8] + ands r0, r4, r0 + ldmneia sp!, {r4-r6,lr} + bxne lr + ldr r0, _020C9C84 ; =0x00003FF8 + add r6, r1, r0 + ldr r5, _020C9C88 ; =0x027E0060 +_020C9C64: + mov r0, r5 + bl OS_SleepThread + ldr r0, [r6, #0x0] + ands r0, r4, r0 + beq _020C9C64 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C9C80: .word 0x027E0000 +_020C9C84: .word 0x00003FF8 +_020C9C88: .word 0x027E0060 + + arm_func_start OSi_IrqTimer3 +OSi_IrqTimer3: ; 0x020C9C8C + ldr ip, _020C9C98 ; =OSi_IrqCallback + mov r0, #0x7 + bx r12 + .balign 4 +_020C9C98: .word OSi_IrqCallback + + arm_func_start OSi_IrqTimer2 +OSi_IrqTimer2: ; 0x020C9C9C + ldr ip, _020C9CA8 ; =OSi_IrqCallback + mov r0, #0x6 + bx r12 + .balign 4 +_020C9CA8: .word OSi_IrqCallback + + arm_func_start OSi_IrqTimer1 +OSi_IrqTimer1: ; 0x020C9CAC + ldr ip, _020C9CB8 ; =OSi_IrqCallback + mov r0, #0x5 + bx r12 + .balign 4 +_020C9CB8: .word OSi_IrqCallback + + arm_func_start OSi_IrqTimer0 +OSi_IrqTimer0: ; 0x020C9CBC + ldr ip, _020C9CC8 ; =OSi_IrqCallback + mov r0, #0x4 + bx r12 + .balign 4 +_020C9CC8: .word OSi_IrqCallback + + arm_func_start OSi_IrqDma3 +OSi_IrqDma3: ; 0x020C9CCC + ldr ip, _020C9CD8 ; =OSi_IrqCallback + mov r0, #0x3 + bx r12 + .balign 4 +_020C9CD8: .word OSi_IrqCallback + + arm_func_start OSi_IrqDma2 +OSi_IrqDma2: ; 0x020C9CDC + ldr ip, _020C9CE8 ; =OSi_IrqCallback + mov r0, #0x2 + bx r12 + .balign 4 +_020C9CE8: .word OSi_IrqCallback + + arm_func_start OSi_IrqDma1 +OSi_IrqDma1: ; 0x020C9CEC + ldr ip, _020C9CF8 ; =OSi_IrqCallback + mov r0, #0x1 + bx r12 + .balign 4 +_020C9CF8: .word OSi_IrqCallback + + arm_func_start OSi_IrqDma0 +OSi_IrqDma0: ; 0x020C9CFC + ldr ip, _020C9D08 ; =OSi_IrqCallback + mov r0, #0x0 + bx r12 + .balign 4 +_020C9D08: .word OSi_IrqCallback + + arm_func_start OSi_IrqCallback +OSi_IrqCallback: ; 0x020C9D0C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r1, #0xc + mul r4, r0, r1 + ldr r2, _020C9D94 ; =0x021D341C + ldr r3, _020C9D98 ; =0x02106818 + mov r0, r0, lsl #0x1 + ldr r1, [r2, r4] + ldrh r3, [r3, r0] + mov r5, #0x1 + mov r0, #0x0 + str r0, [r2, r4] + cmp r1, #0x0 + mov r5, r5, lsl r3 + beq _020C9D54 + ldr r0, _020C9D9C ; =0x021D3424 + ldr r0, [r0, r4] + blx r1 +_020C9D54: + ldr r0, _020C9DA0 ; =0x027E0000 + ldr r1, _020C9DA4 ; =0x021D3420 + add r0, r0, #0x3000 + ldr r2, [r0, #0xff8] + orr r2, r2, r5 + str r2, [r0, #0xff8] + ldr r0, [r1, r4] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + mov r0, r5 + bl OS_DisableIrqMask + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020C9D94: .word 0x021D341C +_020C9D98: .word 0x02106818 +_020C9D9C: .word 0x021D3424 +_020C9DA0: .word 0x027E0000 +_020C9DA4: .word 0x021D3420 + + arm_func_start OS_IrqDummy +OS_IrqDummy: ; 0x020C9DA8 + bx lr + + arm_func_start OS_SetIrqStackChecker +OS_SetIrqStackChecker: ; 0x020C9DAC + ldr ip, _020C9DD0 ; =0x027E0000 + ldr r3, _020C9DD4 ; =0xFDDB597D + add r0, r12, #0x3000 + ldr r2, _020C9DD8 ; =0x7BF9DD5B + ldr r1, _020C9DDC ; =0x00000400 + str r3, [r0, #0xf7c] + add r0, r12, #0x3f80 + str r2, [r0, -r1] + bx lr + .balign 4 +_020C9DD0: .word 0x027E0000 +_020C9DD4: .word 0xFDDB597D +_020C9DD8: .word 0x7BF9DD5B +_020C9DDC: .word 0x00000400 + + arm_func_start OS_ResetRequestIrqMask +OS_ResetRequestIrqMask: ; 0x020C9DE0 + ldr ip, _020C9E0C ; =0x04000208 + mov r1, #0x0 + ldrh r3, [r12, #0x0] + ldr r2, _020C9E10 ; =0x04000214 + strh r1, [r12, #0x0] + ldr r1, [r2, #0x0] + str r0, [r2, #0x0] + ldrh r0, [r12, #0x0] + mov r0, r1 + strh r3, [r12, #0x0] + bx lr + .balign 4 +_020C9E0C: .word 0x04000208 +_020C9E10: .word 0x04000214 + + arm_func_start OS_DisableIrqMask +OS_DisableIrqMask: ; 0x020C9E14 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr lr, _020C9E54 ; =0x04000208 + mov r3, #0x0 + ldrh r12, [lr, #0x0] + ldr r2, _020C9E58 ; =0x04000210 + mvn r1, r0 + strh r3, [lr, #0x0] + ldr r0, [r2, #0x0] + and r1, r0, r1 + str r1, [r2, #0x0] + ldrh r1, [lr, #0x0] + strh r12, [lr, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C9E54: .word 0x04000208 +_020C9E58: .word 0x04000210 + + arm_func_start OS_EnableIrqMask +OS_EnableIrqMask: ; 0x020C9E5C + ldr ip, _020C9E8C ; =0x04000208 + mov r1, #0x0 + ldrh r3, [r12, #0x0] + ldr r2, _020C9E90 ; =0x04000210 + strh r1, [r12, #0x0] + ldr r1, [r2, #0x0] + orr r0, r1, r0 + str r0, [r2, #0x0] + ldrh r0, [r12, #0x0] + mov r0, r1 + strh r3, [r12, #0x0] + bx lr + .balign 4 +_020C9E8C: .word 0x04000208 +_020C9E90: .word 0x04000210 + + arm_func_start OS_SetIrqMask +OS_SetIrqMask: ; 0x020C9E94 + ldr ip, _020C9EC0 ; =0x04000208 + mov r1, #0x0 + ldrh r3, [r12, #0x0] + ldr r2, _020C9EC4 ; =0x04000210 + strh r1, [r12, #0x0] + ldr r1, [r2, #0x0] + str r0, [r2, #0x0] + ldrh r0, [r12, #0x0] + mov r0, r1 + strh r3, [r12, #0x0] + bx lr + .balign 4 +_020C9EC0: .word 0x04000208 +_020C9EC4: .word 0x04000210 + + arm_func_start OSi_EnterTimerCallback +OSi_EnterTimerCallback: ; 0x020C9EC8 + stmdb sp!, {r4,lr} + mov r3, #0xc + mul r4, r0, r3 + ldr ip, _020C9F08 ; =0x021D344C + add r0, r0, #0x3 + mov r3, #0x1 + mov r0, r3, lsl r0 + ldr r3, _020C9F0C ; =0x021D3454 + str r1, [r12, r4] + str r2, [r3, r4] + bl OS_EnableIrqMask + ldr r0, _020C9F10 ; =0x021D3450 + mov r1, #0x1 + str r1, [r0, r4] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C9F08: .word 0x021D344C +_020C9F0C: .word 0x021D3454 +_020C9F10: .word 0x021D3450 + + arm_func_start OSi_EnterDmaCallback +OSi_EnterDmaCallback: ; 0x020C9F14 + stmdb sp!, {r4-r6,lr} + mov r3, #0xc + mul r6, r0, r3 + ldr ip, _020C9F54 ; =0x021D341C + add r4, r0, #0x8 + mov r5, #0x1 + mov r0, r5, lsl r4 + ldr r3, _020C9F58 ; =0x021D3424 + str r1, [r12, r6] + str r2, [r3, r6] + bl OS_EnableIrqMask + and r1, r0, r5, lsl r4 + ldr r0, _020C9F5C ; =0x021D3420 + str r1, [r0, r6] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C9F54: .word 0x021D341C +_020C9F58: .word 0x021D3424 +_020C9F5C: .word 0x021D3420 + + arm_func_start OS_GetIrqFunction +OS_GetIrqFunction: ; 0x020C9F60 + ldr r2, _020C9FE4 ; =0x027E0000 + mov r3, #0x0 +_020C9F68: + ands r1, r0, #0x1 + beq _020C9FC8 + cmp r3, #0x8 + blt _020C9F98 + cmp r3, #0xb + bgt _020C9F98 + sub r1, r3, #0x8 + mov r0, #0xc + mul r2, r1, r0 + ldr r0, _020C9FE8 ; =0x021D341C + ldr r0, [r0, r2] + bx lr +_020C9F98: + cmp r3, #0x3 + blt _020C9FC0 + cmp r3, #0x6 + bgt _020C9FC0 + add r1, r3, #0x1 + mov r0, #0xc + mul r2, r1, r0 + ldr r0, _020C9FE8 ; =0x021D341C + ldr r0, [r0, r2] + bx lr +_020C9FC0: + ldr r0, [r2, #0x0] + bx lr +_020C9FC8: + add r3, r3, #0x1 + cmp r3, #0x16 + mov r0, r0, lsr #0x1 + add r2, r2, #0x4 + blt _020C9F68 + mov r0, #0x0 + bx lr + .balign 4 +_020C9FE4: .word 0x027E0000 +_020C9FE8: .word 0x021D341C + + arm_func_start OS_SetIrqFunction +OS_SetIrqFunction: ; 0x020C9FEC + stmdb sp!, {r4-r8,lr} + mov r8, #0x0 + ldr lr, _020CA074 ; =0x027E0000 + ldr r5, _020CA078 ; =0x021D341C + mov r6, r8 + mov r12, r8 + mov r3, #0x1 + mov r2, #0xc +_020CA00C: + ands r4, r0, #0x1 + beq _020CA05C + mov r7, r6 + cmp r8, #0x8 + blt _020CA030 + cmp r8, #0xb + suble r4, r8, #0x8 + mlale r7, r4, r2, r5 + ble _020CA04C +_020CA030: + cmp r8, #0x3 + blt _020CA048 + cmp r8, #0x6 + addle r4, r8, #0x1 + mlale r7, r4, r2, r5 + ble _020CA04C +_020CA048: + str r1, [lr, r8, lsl #0x2] +_020CA04C: + cmp r7, #0x0 + strne r1, [r7, #0x0] + strne r12, [r7, #0x8] + strne r3, [r7, #0x4] +_020CA05C: + add r8, r8, #0x1 + cmp r8, #0x16 + mov r0, r0, lsr #0x1 + blt _020CA00C + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020CA074: .word 0x027E0000 +_020CA078: .word 0x021D341C + + arm_func_start OS_InitIrqTable +OS_InitIrqTable: ; 0x020CA07C + ldr r0, _020CA090 ; =0x027E0060 + mov r1, #0x0 + str r1, [r0, #0x4] + str r1, [r0, #0x0] + bx lr + .balign 4 +_020CA090: .word 0x027E0060 + + arm_func_start OS_UnlockCartridge +OS_UnlockCartridge: ; 0x020CA094 + ldr r1, _020CA09C ; =OS_UnlockCartridge2 + bx r1 + .balign 4 +_020CA09C: .word OS_UnlockCartridge2 + + arm_func_start OS_GetLockID +OS_GetLockID: ; 0x020CA0A0 + ldr r3, _020CA0F0 ; =0x027FFFB0 + ldr r1, [r3, #0x0] + clz r2, r1 + cmp r2, #0x20 + movne r0, #0x40 + bne _020CA0D4 + add r3, r3, #0x4 + ldr r1, [r3, #0x0] + clz r2, r1 + cmp r2, #0x20 + ldr r0, _020CA0F4 ; =0xFFFFFFFD + bxeq lr + mov r0, #0x60 +_020CA0D4: + add r0, r0, r2 + mov r1, #0x80000000 + mov r1, r1, lsr r2 + ldr r2, [r3, #0x0] + bic r2, r2, r1 + str r2, [r3, #0x0] + bx lr + .balign 4 +_020CA0F0: .word 0x027FFFB0 +_020CA0F4: .word 0xFFFFFFFD + + arm_func_start OS_ReleaseLockID +OS_ReleaseLockID: ; 0x020CA0F8 + ldr r3, _020CA124 ; =0x027FFFB0 + cmp r0, #0x60 + addpl r3, r3, #0x4 + subpl r0, r0, #0x60 + submi r0, r0, #0x40 + mov r1, #0x80000000 + mov r1, r1, lsr r0 + ldr r2, [r3, #0x0] + orr r2, r2, r1 + str r2, [r3, #0x0] + bx lr + .balign 4 +_020CA124: .word 0x027FFFB0 + + arm_func_start OS_ReadOwnerOfLockWord +OS_ReadOwnerOfLockWord: ; 0x020CA128 + ldrh r0, [r0, #0x4] + bx lr + + arm_func_start OSi_FreeCardBus +OSi_FreeCardBus: ; 0x020CA130 + ldr r1, _020CA144 ; =0x04000204 + ldrh r0, [r1, #0x0] + orr r0, r0, #0x800 + strh r0, [r1, #0x0] + bx lr + .balign 4 +_020CA144: .word 0x04000204 + + arm_func_start OSi_AllocateCardBus +OSi_AllocateCardBus: ; 0x020CA148 + ldr r1, _020CA15C ; =0x04000204 + ldrh r0, [r1, #0x0] + bic r0, r0, #0x800 + strh r0, [r1, #0x0] + bx lr + .balign 4 +_020CA15C: .word 0x04000204 + + arm_func_start OS_UnlockCard +OS_UnlockCard: ; 0x020CA160 + ldr ip, _020CA170 ; =OS_UnlockByWord + ldr r1, _020CA174 ; =0x027FFFE0 + ldr r2, _020CA178 ; =OSi_FreeCardBus + bx r12 + .balign 4 +_020CA170: .word OS_UnlockByWord +_020CA174: .word 0x027FFFE0 +_020CA178: .word OSi_FreeCardBus + + arm_func_start OS_TryLockCard +OS_TryLockCard: ; 0x020CA17C + ldr ip, _020CA18C ; =OS_TryLockByWord + ldr r1, _020CA190 ; =0x027FFFE0 + ldr r2, _020CA194 ; =OSi_AllocateCardBus + bx r12 + .balign 4 +_020CA18C: .word OS_TryLockByWord +_020CA190: .word 0x027FFFE0 +_020CA194: .word OSi_AllocateCardBus + + arm_func_start OSi_FreeCartridgeBus +OSi_FreeCartridgeBus: ; 0x020CA198 + ldr r1, _020CA1AC ; =0x04000204 + ldrh r0, [r1, #0x0] + orr r0, r0, #0x80 + strh r0, [r1, #0x0] + bx lr + .balign 4 +_020CA1AC: .word 0x04000204 + + arm_func_start OSi_AllocateCartridgeBus +OSi_AllocateCartridgeBus: ; 0x020CA1B0 + ldr r1, _020CA1C4 ; =0x04000204 + ldrh r0, [r1, #0x0] + bic r0, r0, #0x80 + strh r0, [r1, #0x0] + bx lr + .balign 4 +_020CA1C4: .word 0x04000204 + + arm_func_start OS_TryLockCartridge +OS_TryLockCartridge: ; 0x020CA1C8 + ldr ip, _020CA1DC ; =OSi_DoTryLockByWord + ldr r1, _020CA1E0 ; =0x027FFFE8 + ldr r2, _020CA1E4 ; =OSi_AllocateCartridgeBus + mov r3, #0x1 + bx r12 + .balign 4 +_020CA1DC: .word OSi_DoTryLockByWord +_020CA1E0: .word 0x027FFFE8 +_020CA1E4: .word OSi_AllocateCartridgeBus + + arm_func_start OS_UnlockCartridge2 +OS_UnlockCartridge2: ; 0x020CA1E8 + ldr ip, _020CA1FC ; =FUN_020CA2B8 + ldr r1, _020CA200 ; =0x027FFFE8 + ldr r2, _020CA204 ; =OSi_FreeCartridgeBus + mov r3, #0x1 + bx r12 + .balign 4 +_020CA1FC: .word FUN_020CA2B8 +_020CA200: .word 0x027FFFE8 +_020CA204: .word OSi_FreeCartridgeBus + + arm_func_start OS_LockCartridge +OS_LockCartridge: ; 0x020CA208 + ldr ip, _020CA21C ; =FUN_020CA358 + ldr r1, _020CA220 ; =0x027FFFE8 + ldr r2, _020CA224 ; =OSi_AllocateCartridgeBus + mov r3, #0x1 + bx r12 + .balign 4 +_020CA21C: .word FUN_020CA358 +_020CA220: .word 0x027FFFE8 +_020CA224: .word OSi_AllocateCartridgeBus + + arm_func_start OSi_DoTryLockByWord +OSi_DoTryLockByWord: + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + movs r6, r3 + mov r9, r0 + mov r8, r1 + mov r7, r2 + beq _020CA250 + bl OS_DisableInterrupts_IrqAndFiq + mov r5, r0 + b _020CA258 +_020CA250: + bl OS_DisableInterrupts + mov r5, r0 +_020CA258: + mov r0, r9 + mov r1, r8 + bl MI_SwapWord + movs r4, r0 + bne _020CA27C + cmp r7, #0x0 + beq _020CA278 + blx r7 +_020CA278: + strh r9, [r8, #0x4] +_020CA27C: + cmp r6, #0x0 + beq _020CA290 + mov r0, r5 + bl OS_RestoreInterrupts_IrqAndFiq + b _020CA298 +_020CA290: + mov r0, r5 + bl OS_RestoreInterrupts +_020CA298: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start OS_UnlockByWord +OS_UnlockByWord: ; 0x020CA2A8 + ldr ip, _020CA2B4 ; =FUN_020CA2B8 + mov r3, #0x0 + bx r12 + .balign 4 +_020CA2B4: .word FUN_020CA2B8 + + arm_func_start FUN_020CA2B8 +FUN_020CA2B8: ; 0x020CA2B8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r1 + ldrh r1, [r7, #0x4] + mov r6, r2 + mov r5, r3 + cmp r0, r1 + addne sp, sp, #0x4 + mvnne r0, #0x1 + ldmneia sp!, {r4-r7,lr} + bxne lr + cmp r5, #0x0 + beq _020CA2F8 + bl OS_DisableInterrupts_IrqAndFiq + mov r4, r0 + b _020CA300 +_020CA2F8: + bl OS_DisableInterrupts + mov r4, r0 +_020CA300: + mov r0, #0x0 + strh r0, [r7, #0x4] + cmp r6, #0x0 + beq _020CA314 + blx r6 +_020CA314: + mov r0, #0x0 + str r0, [r7, #0x0] + cmp r5, #0x0 + beq _020CA330 + mov r0, r4 + bl OS_RestoreInterrupts_IrqAndFiq + b _020CA338 +_020CA330: + mov r0, r4 + bl OS_RestoreInterrupts +_020CA338: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start OS_TryLockByWord +OS_TryLockByWord: ; 0x020CA348 + ldr ip, _020CA354 ; =FUN_020CA358 + mov r3, #0x0 + bx r12 + .balign 4 +_020CA354: .word FUN_020CA358 + + arm_func_start FUN_020CA358 +FUN_020CA358: ; 0x020CA358 + stmdb sp!, {r4-r8,lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, r3 + bl OSi_DoTryLockByWord + cmp r0, #0x0 + ldmleia sp!, {r4-r8,lr} + bxle lr + mov r4, #0x400 +_020CA380: + mov r0, r4 + blx FUN_020005F2 + mov r0, r8 + mov r1, r7 + mov r2, r6 + mov r3, r5 + bl OSi_DoTryLockByWord + cmp r0, #0x0 + bgt _020CA380 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start OS_InitLock +OS_InitLock: ; 0x020CA3AC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020CA484 ; =0x021D347C + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + mov r2, #0x1 + ldr r1, _020CA488 ; =0x027FFFF0 + str r2, [r0, #0x0] + mov r2, #0x0 + mov r0, #0x7e + str r2, [r1, #0x0] + bl OS_TryLockByWord + ldr r5, _020CA488 ; =0x027FFFF0 + ldrh r0, [r5, #0x6] + cmp r0, #0x0 + beq _020CA410 + mov r4, #0x400 +_020CA3FC: + mov r0, r4 + blx FUN_020005F2 + ldrh r0, [r5, #0x6] + cmp r0, #0x0 + bne _020CA3FC +_020CA410: + ldr r2, _020CA48C ; =0x027FFFB0 + mvn r12, #0x0 + mov r0, #0x10000 + ldr r3, _020CA490 ; =0x027FFFB4 + ldr r1, _020CA494 ; =0x027FFFC0 + str r12, [r2, #0x0] + rsb r12, r0, #0x0 + mov r0, #0x0 + mov r2, #0x28 + str r12, [r3, #0x0] + bl MIi_CpuClear32 + ldr ip, _020CA498 ; =0x04000204 + ldr r1, _020CA488 ; =0x027FFFF0 + ldrh r3, [r12, #0x0] + mov r0, #0x7e + mov r2, #0x0 + orr r3, r3, #0x800 + strh r3, [r12, #0x0] + ldrh r3, [r12, #0x0] + orr r3, r3, #0x80 + strh r3, [r12, #0x0] + bl OS_UnlockByWord + ldr r1, _020CA488 ; =0x027FFFF0 + mov r0, #0x7f + mov r2, #0x0 + bl OS_TryLockByWord + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020CA484: .word 0x021D347C +_020CA488: .word 0x027FFFF0 +_020CA48C: .word 0x027FFFB0 +_020CA490: .word 0x027FFFB4 +_020CA494: .word 0x027FFFC0 +_020CA498: .word 0x04000204 + + arm_func_start OS_VSNPrintf +OS_VSNPrintf: ; 0x020CA49C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x64 + mov r9, r2 + str r1, [sp, #0x54] + str r0, [sp, #0x5c] + str r0, [sp, #0x58] + ldrsb r0, [r9, #0x0] + str r1, [sp, #0x0] + mov r11, r3 + cmp r0, #0x0 + beq _020CAD18 + mov r0, #0xa + str r0, [sp, #0xc] + mov r0, #0x0 + str r0, [sp, #0x4] + mov r0, #0x20 + str r0, [sp, #0x1c] + mov r0, #0x30 + str r0, [sp, #0x20] + mvn r0, #0x0 + str r0, [sp, #0x8] + mov r0, #0x57 + str r0, [sp, #0x10] + mov r0, #0x8 + str r0, [sp, #0x14] + mov r0, #0x37 + str r0, [sp, #0x18] + mov r0, #0x10 + str r0, [sp, #0x24] + mov r0, #0x1 + str r0, [sp, #0x28] + mov r0, #0x2b + str r0, [sp, #0x34] + mov r0, #0x2d + str r0, [sp, #0x30] + mov r0, #0x2 + str r0, [sp, #0x2c] +_020CA530: + ldrsb r1, [r9, #0x0] + and r0, r1, #0xff + eor r0, r0, #0x20 + sub r0, r0, #0xa1 + cmp r0, #0x3c + bhs _020CA56C + add r0, sp, #0x54 + bl string_put_char + ldrsb r1, [r9, #0x1]! + cmp r1, #0x0 + beq _020CAD0C + add r0, sp, #0x54 + add r9, r9, #0x1 + bl string_put_char + b _020CAD0C +_020CA56C: + cmp r1, #0x25 + beq _020CA584 + add r0, sp, #0x54 + add r9, r9, #0x1 + bl string_put_char + b _020CAD0C +_020CA584: + ldr r6, [sp, #0x4] + ldr r5, [sp, #0x8] + ldr r2, [sp, #0xc] + ldr r0, [sp, #0x10] + mov r10, r6 + mov r3, r9 +_020CA59C: + ldrsb r4, [r9, #0x1]! + cmp r4, #0x20 + bgt _020CA5B4 + cmp r4, #0x20 + beq _020CA5F4 + b _020CA60C +_020CA5B4: + cmp r4, #0x30 + bgt _020CA60C + cmp r4, #0x2b + blt _020CA60C + cmp r4, #0x2b + beq _020CA5E0 + cmp r4, #0x2d + beq _020CA5FC + cmp r4, #0x30 + beq _020CA604 + b _020CA60C +_020CA5E0: + ldrsb r1, [r9, #-0x1] + cmp r1, #0x20 + bne _020CA60C + orr r6, r6, #0x2 + b _020CA59C +_020CA5F4: + orr r6, r6, #0x1 + b _020CA59C +_020CA5FC: + orr r6, r6, #0x8 + b _020CA59C +_020CA604: + orr r6, r6, #0x10 + b _020CA59C +_020CA60C: + cmp r4, #0x2a + bne _020CA640 + add r11, r11, #0x4 + ldr r10, [r11, #-0x4] + add r9, r9, #0x1 + cmp r10, #0x0 + rsblt r10, r10, #0x0 + orrlt r6, r6, #0x8 + b _020CA654 +_020CA630: + ldrsb r4, [r9], #0x1 + mov r1, #0xa + mla r1, r10, r1, r4 + sub r10, r1, #0x30 +_020CA640: + ldrsb r1, [r9, #0x0] + cmp r1, #0x30 + blt _020CA654 + cmp r1, #0x39 + ble _020CA630 +_020CA654: + ldrsb r1, [r9, #0x0] + cmp r1, #0x2e + bne _020CA6AC + ldrsb r1, [r9, #0x1]! + ldr r5, [sp, #0x4] + cmp r1, #0x2a + bne _020CA698 + add r11, r11, #0x4 + ldr r5, [r11, #-0x4] + add r9, r9, #0x1 + cmp r5, #0x0 + ldrlt r5, [sp, #0x8] + b _020CA6AC +_020CA688: + ldrsb r4, [r9], #0x1 + mov r1, #0xa + mla r1, r5, r1, r4 + sub r5, r1, #0x30 +_020CA698: + ldrsb r1, [r9, #0x0] + cmp r1, #0x30 + blt _020CA6AC + cmp r1, #0x39 + ble _020CA688 +_020CA6AC: + ldrsb r1, [r9, #0x0] + cmp r1, #0x68 + beq _020CA6C4 + cmp r1, #0x6c + beq _020CA6DC + b _020CA6F0 +_020CA6C4: + ldrsb r1, [r9, #0x1]! + cmp r1, #0x68 + orrne r6, r6, #0x40 + addeq r9, r9, #0x1 + orreq r6, r6, #0x100 + b _020CA6F0 +_020CA6DC: + ldrsb r1, [r9, #0x1]! + cmp r1, #0x6c + orrne r6, r6, #0x20 + addeq r9, r9, #0x1 + orreq r6, r6, #0x80 +_020CA6F0: + ldrsb r1, [r9, #0x0] + cmp r1, #0x69 + bgt _020CA740 + cmp r1, #0x63 + blt _020CA720 + cmp r1, #0x63 + beq _020CA7B4 + cmp r1, #0x64 + beq _020CA96C + cmp r1, #0x69 + beq _020CA96C + b _020CA950 +_020CA720: + cmp r1, #0x25 + bgt _020CA734 + cmp r1, #0x25 + beq _020CA934 + b _020CA950 +_020CA734: + cmp r1, #0x58 + beq _020CA7A0 + b _020CA950 +_020CA740: + cmp r1, #0x6e + bgt _020CA754 + cmp r1, #0x6e + beq _020CA8DC + b _020CA950 +_020CA754: + sub r1, r1, #0x6f + cmp r1, #0x9 + addls pc, pc, r1, lsl #0x2 + b _020CA950 +_020CA764: + b _020CA78C + b _020CA7A8 + b _020CA950 + b _020CA950 + b _020CA828 + b _020CA950 + b _020CA798 + b _020CA950 + b _020CA950 + b _020CA964 +_020CA78C: + ldr r2, [sp, #0x14] + orr r6, r6, #0x1000 + b _020CA96C +_020CA798: + orr r6, r6, #0x1000 + b _020CA96C +_020CA7A0: + ldr r0, [sp, #0x18] + b _020CA964 +_020CA7A8: + orr r6, r6, #0x4 + ldr r5, [sp, #0x14] + b _020CA964 +_020CA7B4: + cmp r5, #0x0 + bge _020CA950 + ands r0, r6, #0x8 + add r11, r11, #0x4 + ldr r4, [r11, #-0x4] + beq _020CA7F0 + mov r0, r4, lsl #0x18 + mov r1, r0, asr #0x18 + add r0, sp, #0x54 + bl string_put_char + ldr r1, [sp, #0x1c] + sub r2, r10, #0x1 + add r0, sp, #0x54 + bl string_fill_char + b _020CA820 +_020CA7F0: + ands r0, r6, #0x10 + ldrne r0, [sp, #0x20] + sub r2, r10, #0x1 + ldreq r0, [sp, #0x1c] + mov r0, r0, lsl #0x18 + mov r1, r0, asr #0x18 + add r0, sp, #0x54 + bl string_fill_char + mov r0, r4, lsl #0x18 + mov r1, r0, asr #0x18 + add r0, sp, #0x54 + bl string_put_char +_020CA820: + add r9, r9, #0x1 + b _020CAD0C +_020CA828: + add fp, fp, #0x4 + cmp r5, #0x0 + ldr r7, [sp, #0x4] + ldr r4, [fp, #-0x4] + bge _020CA860 + ldrsb r0, [r4] + cmp r0, #0x0 + beq _020CA874 +_020CA848: + add r7, r7, #0x1 + ldrsb r0, [r4, r7] + cmp r0, #0x0 + bne _020CA848 + b _020CA874 +_020CA85C: + add r7, r7, #0x1 +_020CA860: + cmp r7, r5 + bge _020CA874 + ldrsb r0, [r4, r7] + cmp r0, #0x0 + bne _020CA85C +_020CA874: + ands r0, r6, #0x8 + sub sl, sl, r7 + beq _020CA8A4 + mov r1, r4 + mov r2, r7 + add r0, sp, #0x54 + bl string_put_string + ldr r1, [sp, #0x1C] + mov r2, sl + add r0, sp, #0x54 + bl string_fill_char + b _020CA8D4 +_020CA8A4: + ands r0, r6, #0x10 + ldrne r0, [sp, #0x20] + mov r2, sl + ldreq r0, [sp, #0x1C] + mov r0, r0, lsl #0x18 + mov r1, r0, asr #0x18 + add r0, sp, #0x54 + bl string_fill_char + mov r1, r4 + mov r2, r7 + add r0, sp, #0x54 + bl string_put_string +_020CA8D4: + add r9, r9, #0x1 + b _020CAD0C +_020CA8DC: + ands r0, r6, #0x100 + ldr r1, [sp, #0x58] + ldr r0, [sp, #0x5c] + sub r2, r1, r0 + bne _020CA92C + ands r0, r6, #0x40 + addne r11, r11, #0x4 + ldrne r0, [r11, #-0x4] + strneh r2, [r0, #0x0] + bne _020CA92C + ands r0, r6, #0x80 + addeq r11, r11, #0x4 + ldreq r0, [r11, #-0x4] + streq r2, [r0, #0x0] + beq _020CA92C + add r11, r11, #0x4 + ldr r0, [r11, #-0x4] + mov r1, r2, asr #0x1f + str r2, [r0, #0x0] + str r1, [r0, #0x4] +_020CA92C: + add r9, r9, #0x1 + b _020CAD0C +_020CA934: + add r0, r3, #0x1 + cmp r0, r9 + bne _020CA950 + add r0, sp, #0x54 + add r9, r9, #0x1 + bl string_put_char + b _020CAD0C +_020CA950: + add r0, sp, #0x54 + mov r1, r3 + sub r2, r9, r3 + bl string_put_string + b _020CAD0C +_020CA964: + ldr r2, [sp, #0x24] + orr r6, r6, #0x1000 +_020CA96C: + ands r1, r6, #0x8 + bicne r6, r6, #0x10 + cmp r5, #0x0 + bicge r6, r6, #0x10 + ldrlt r5, [sp, #0x28] + ldr r7, [sp, #0x4] + ands r1, r6, #0x1000 + beq _020CAA20 + ands r1, r6, #0x100 + addne r11, r11, #0x4 + ldrneb r4, [r11, #-0x4] + movne r1, #0x0 + bne _020CA9D0 + ands r1, r6, #0x40 + addne r11, r11, #0x4 + ldrneh r4, [r11, #-0x4] + movne r1, #0x0 + bne _020CA9D0 + ands r1, r6, #0x80 + addne r11, r11, #0x8 + ldrne r1, [r11, #-0x4] + ldrne r4, [r11, #-0x8] + addeq r11, r11, #0x4 + ldreq r4, [r11, #-0x4] + moveq r1, #0x0 +_020CA9D0: + bic r6, r6, #0x3 + ands r3, r6, #0x4 + beq _020CAAD8 + cmp r2, #0x10 + bne _020CAA0C + mov r3, #0x0 + cmp r1, r3 + cmpeq r4, r3 + beq _020CAAD8 + ldr r3, [sp, #0x20] + ldr r7, [sp, #0x2c] + strb r3, [sp, #0x39] + add r3, r0, #0x21 + strb r3, [sp, #0x38] + b _020CAAD8 +_020CAA0C: + cmp r2, #0x8 + ldreq r3, [sp, #0x20] + ldreq r7, [sp, #0x28] + streqb r3, [sp, #0x38] + b _020CAAD8 +_020CAA20: + ands r1, r6, #0x100 + addne r11, r11, #0x4 + ldrnesb r4, [r11, #-0x4] + movne r1, r4, asr #0x1f + bne _020CAA64 + ands r1, r6, #0x40 + addne r11, r11, #0x4 + ldrnesh r4, [r11, #-0x4] + movne r1, r4, asr #0x1f + bne _020CAA64 + ands r1, r6, #0x80 + addne r11, r11, #0x8 + ldrne r4, [r11, #-0x8] + ldrne r1, [r11, #-0x4] + addeq r11, r11, #0x4 + ldreq r4, [r11, #-0x4] + moveq r1, r4, asr #0x1f +_020CAA64: + mov r3, #0x0 + and r8, r3, #0x0 + cmp r8, r3 + and r8, r1, #0x80000000 + cmpeq r8, r3 + beq _020CAAA0 + ldr r7, [sp, #0x30] + mvn r4, r4 + strb r7, [sp, #0x38] + mvn r7, r1 + mov r1, #0x1 + adds r4, r4, r1 + adc r1, r7, r3 + ldr r7, [sp, #0x28] + b _020CAAD8 +_020CAAA0: + cmp r1, r3 + cmpeq r4, r3 + bne _020CAAB4 + cmp r5, #0x0 + beq _020CAAD8 +_020CAAB4: + ands r3, r6, #0x2 + ldrne r3, [sp, #0x34] + ldrne r7, [sp, #0x28] + strneb r3, [sp, #0x38] + bne _020CAAD8 + ands r3, r6, #0x1 + ldrne r3, [sp, #0x1c] + ldrne r7, [sp, #0x28] + strneb r3, [sp, #0x38] +_020CAAD8: + cmp r2, #0x8 + ldr r8, [sp, #0x4] + beq _020CAAF8 + cmp r2, #0xa + beq _020CAB40 + cmp r2, #0x10 + beq _020CABDC + b _020CAC28 +_020CAAF8: + mov r0, #0x0 + cmp r1, r0 + cmpeq r4, r0 + beq _020CAC28 +_020CAB08: + and r0, r4, #0x7 + add r3, r0, #0x30 + add r0, sp, #0x3a + strb r3, [r0, r8] + mov r4, r4, lsr #0x3 + mov r2, #0x0 + mov r0, r1, lsr #0x3 + orr r4, r4, r1, lsl #0x1d + cmp r0, r2 + cmpeq r4, r2 + mov r1, r0 + add r8, r8, #0x1 + bne _020CAB08 + b _020CAC28 +_020CAB40: + mov r0, #0x0 + cmp r0, r0 + cmpeq r1, r0 + bne _020CAB8C + cmp r4, #0x0 + beq _020CAC28 +_020CAB58: + ldr r0, _020CAD60 ; =0xCCCCCCCD + umull r1, r0, r4, r0 + movs r0, r0, lsr #0x3 + mov r1, #0xa + mul r1, r0, r1 + sub r1, r4, r1 + mov r4, r0 + add r1, r1, #0x30 + add r0, sp, #0x3a + strb r1, [r0, r8] + add r8, r8, #0x1 + bne _020CAB58 + b _020CAC28 +_020CAB8C: + cmp r1, r0 + cmpeq r4, r0 + beq _020CAC28 +_020CAB98: + ldr r2, [sp, #0xc] + ldr r3, [sp, #0x4] + mov r0, r4 + bl _ll_udiv + mov r3, #0xa + umull r3, r12, r0, r3 + subs r3, r4, r3 + mov r2, #0x0 + add r4, r3, #0x30 + add r3, sp, #0x3a + strb r4, [r3, r8] + cmp r1, r2 + cmpeq r0, r2 + mov r4, r0 + add r8, r8, #0x1 + bne _020CAB98 + b _020CAC28 +_020CABDC: + mov r2, #0x0 + cmp r1, r2 + cmpeq r4, r2 + beq _020CAC28 +_020CABEC: + and r3, r4, #0xf + cmp r3, #0xa + mov r4, r4, lsr #0x4 + addlt r3, r3, #0x30 + mov r2, r1, lsr #0x4 + orr r4, r4, r1, lsl #0x1c + mov r1, r2 + addge r3, r3, r0 + add r2, sp, #0x3a + strb r3, [r2, r8] + mov r2, #0x0 + cmp r1, r2 + add r8, r8, #0x1 + cmpeq r4, r2 + bne _020CABEC +_020CAC28: + cmp r7, #0x0 + ble _020CAC4C + ldrsb r0, [sp, #0x38] + cmp r0, #0x30 + ldreq r1, [sp, #0x20] + addeq r0, sp, #0x3a + streqb r1, [r0, r8] + ldreq r7, [sp, #0x4] + addeq r8, r8, #0x1 +_020CAC4C: + sub r5, r5, r8 + ands r0, r6, #0x10 + beq _020CAC68 + sub r0, r10, r8 + sub r0, r0, r7 + cmp r5, r0 + movlt r5, r0 +_020CAC68: + cmp r5, #0x0 + subgt r10, r10, r5 + add r0, r7, r8 + ands r6, r6, #0x8 + sub r10, r10, r0 + bne _020CAC90 + ldr r1, [sp, #0x1c] + add r0, sp, #0x54 + mov r2, r10 + bl string_fill_char +_020CAC90: + cmp r7, #0x0 + ble _020CACB8 + add r0, sp, #0x38 + add r4, r0, r7 +_020CACA0: + ldrsb r1, [r4, #-0x1]! + sub r7, r7, #0x1 + add r0, sp, #0x54 + bl string_put_char +_020CACB0: + cmp r7, #0x0 + bgt _020CACA0 +_020CACB8: + ldr r1, [sp, #0x20] + mov r2, r5 + add r0, sp, #0x54 + bl string_fill_char +_020CACC8: + cmp r8, #0x0 + ble _020CACF0 + add r0, sp, #0x3A + add r4, r0, r8 +_020CACD8: + ldrsb r1, [r4, #-0x1]! + sub r8, r8, #0x1 + add r0, sp, #0x54 + bl string_put_char + cmp r8, #0x0 + bgt _020CACD8 +_020CACF0: + cmp r6, #0x0 + beq _020CAD08 + ldr r1, [sp, #0x1C] + mov r2, sl + add r0, sp, #0x54 + bl string_fill_char +_020CAD08: + add r9, r9, #0x1 +_020CAD0C: + ldrsb r0, [r9, #0x0] + cmp r0, #0x0 + bne _020CA530 +_020CAD18: + ldr r0, [sp, #0x54] + cmp r0, #0x0 + ldrne r0, [sp, #0x58] + movne r1, #0x0 + strneb r1, [r0, #0x0] + bne _020CAD48 + ldr r0, [sp, #0x0] + cmp r0, #0x0 + ldrne r1, [sp, #0x5c] + movne r2, #0x0 + addne r0, r1, r0 + strneb r2, [r0, #-0x1] +_020CAD48: + ldr r1, [sp, #0x58] + ldr r0, [sp, #0x5c] + sub r0, r1, r0 + add sp, sp, #0x64 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020CAD60: .word 0xCCCCCCCD + + arm_func_start OS_SNPrintf +OS_SNPrintf: ; 0x020CAD64 + stmdb sp!, {r0-r3} + stmdb sp!, {lr} + sub sp, sp, #0x4 + add r3, sp, #0x10 + bic r3, r3, #0x3 + ldr r2, [sp, #0x10] + add r3, r3, #0x4 + bl OS_VSNPrintf + add sp, sp, #0x4 + ldmia sp!, {lr} + add sp, sp, #0x10 + bx lr + + arm_func_start OS_VSPrintf +OS_VSPrintf: ; 0x020CAD94 + ldr ip, _020CADA8 ; =OS_VSNPrintf + mov r3, r2 + mov r2, r1 + mvn r1, #0x80000000 + bx r12 + .balign 4 +_020CADA8: .word OS_VSNPrintf + + arm_func_start OS_SPrintf +OS_SPrintf: ; 0x020CADAC + stmdb sp!, {r0-r3} + stmdb sp!, {lr} + sub sp, sp, #0x4 + add r2, sp, #0xc + bic r2, r2, #0x3 + ldr r1, [sp, #0xc] + add r2, r2, #0x4 + bl OS_VSPrintf + add sp, sp, #0x4 + ldmia sp!, {lr} + add sp, sp, #0x10 + bx lr + + arm_func_start string_put_string +string_put_string: ; 0x020CADDC + stmdb sp!, {r4,lr} + cmp r2, #0x0 + ldmleia sp!, {r4,lr} + bxle lr + ldr lr, [r0, #0x0] + mov r4, #0x0 + cmp lr, r2 + movhi lr, r2 + cmp lr, #0x0 + bls _020CAE1C +_020CAE04: + ldrsb r12, [r1, r4] + ldr r3, [r0, #0x4] + strb r12, [r3, r4] + add r4, r4, #0x1 + cmp r4, lr + blo _020CAE04 +_020CAE1C: + ldr r1, [r0, #0x0] + sub r1, r1, lr + str r1, [r0, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, r2 + str r1, [r0, #0x4] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start string_fill_char +string_fill_char: + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + addle sp, sp, #0x4 + ldmleia sp!, {lr} + bxle lr + ldr r12, [r0, #0x0] + mov lr, #0x0 + cmp r12, r2 + movhi r12, r2 + cmp r12, #0x0 + bls _020CAE80 +_020CAE6C: + ldr r3, [r0, #0x4] + strb r1, [r3, lr] + add lr, lr, #0x1 + cmp lr, r12 + blo _020CAE6C +_020CAE80: + ldr r1, [r0, #0x0] + sub r1, r1, r12 + str r1, [r0, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, r2 + str r1, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start string_put_char +string_put_char: + ldr r2, [r0, #0x0] + cmp r2, #0x0 + ldrne r2, [r0, #0x4] + strneb r1, [r2, #0x0] + ldrne r1, [r0, #0x0] + subne r1, r1, #0x1 + strne r1, [r0, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x1 + str r1, [r0, #0x4] + bx lr + + arm_func_start FUN_020CAED0 +FUN_020CAED0: ; 0x020CAED0 + ldr r0, _020CAEDC ; =0x021D3494 + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020CAEDC: .word 0x021D3494 + + arm_func_start OS_SetThreadDestructor +OS_SetThreadDestructor: + str r1, [r0, #0xb4] + bx lr + + arm_func_start OS_EnableScheduler +OS_EnableScheduler: ; 0x020CAEE8 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020CAF1C ; =0x021D3484 + mov r4, #0x0 + ldr r3, [r1, #0x0] + cmp r3, #0x0 + subne r2, r3, #0x1 + movne r4, r3 + strne r2, [r1, #0x0] + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CAF1C: .word 0x021D3484 + + arm_func_start OS_DisableScheduler +OS_DisableScheduler: ; 0x020CAF20 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r2, _020CAF54 ; =0x021D3484 + mvn r1, #0x0 + ldr r3, [r2, #0x0] + cmp r3, r1 + addcc r1, r3, #0x1 + movcc r4, r3 + strcc r1, [r2, #0x0] + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CAF54: .word 0x021D3484 + + arm_func_start OSi_IdleThreadProc +OSi_IdleThreadProc: ; 0x020CAF58 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_EnableInterrupts +_020CAF64: + bl OS_Halt + b _020CAF64 + + arm_func_start OS_SetSwitchThreadCallback +OS_SetSwitchThreadCallback: ; 0x020CAF6C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020CAF9C ; =0x021D3498 + ldr r4, [r1, #0xc] + str r5, [r1, #0xc] + bl OS_RestoreInterrupts + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020CAF9C: .word 0x021D3498 + + arm_func_start OSi_SleepAlarmCallback +OSi_SleepAlarmCallback: ; 0x020CAFA0 + ldr r2, [r0, #0x0] + mov r1, #0x0 + str r1, [r0, #0x0] + ldr ip, _020CAFBC ; =OS_WakeupThreadDirect + mov r0, r2 + str r1, [r2, #0xb0] + bx r12 + .balign 4 +_020CAFBC: .word OS_WakeupThreadDirect + + arm_func_start OS_Sleep +OS_Sleep: ; 0x020CAFC0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x34 + mov r4, r0 + add r0, sp, #0x8 + bl OS_CreateAlarm + ldr r0, _020CB060 ; =0x021D3490 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + str r0, [sp, #0x4] + bl OS_DisableInterrupts + ldr r1, _020CB064 ; =0x000082EA + mov r2, #0x0 + umull r5, r3, r4, r1 + mla r3, r4, r2, r3 + mla r3, r2, r1, r3 + mov r1, r5, lsr #0x6 + mov r4, r0 + ldr r5, [sp, #0x4] + add r0, sp, #0x8 + add r2, sp, #0x4 + str r0, [r5, #0xb0] + str r2, [sp, #0x0] + mov r2, r3, lsr #0x6 + orr r1, r1, r3, lsl #0x1a + ldr r3, _020CB068 ; =OSi_SleepAlarmCallback + bl OS_SetAlarm + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020CB04C + mov r5, #0x0 +_020CB038: + mov r0, r5 + bl OS_SleepThread + ldr r0, [sp, #0x4] + cmp r0, #0x0 + bne _020CB038 +_020CB04C: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x34 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020CB060: .word 0x021D3490 +_020CB064: .word 0x000082EA +_020CB068: .word OSi_SleepAlarmCallback + + arm_func_start OS_GetThreadPriority +OS_GetThreadPriority: ; 0x020CB06C + ldr r0, [r0, #0x70] + bx lr + + arm_func_start OS_SetThreadPriority +OS_SetThreadPriority: ; 0x020CB074 + stmdb sp!, {r4-r8,lr} + ldr r2, _020CB120 ; =0x021D3498 + mov r6, r0 + mov r5, r1 + ldr r8, [r2, #0x8] + mov r7, #0x0 + bl OS_DisableInterrupts + mov r4, r0 + b _020CB0A0 +_020CB098: + mov r7, r8 + ldr r8, [r8, #0x68] +_020CB0A0: + cmp r8, #0x0 + beq _020CB0B0 + cmp r8, r6 + bne _020CB098 +_020CB0B0: + cmp r8, #0x0 + beq _020CB0C4 + ldr r0, _020CB124 ; =0x021D34A8 + cmp r8, r0 + bne _020CB0D8 +_020CB0C4: + mov r0, r4 + bl OS_RestoreInterrupts +_020CB0CC: + mov r0, #0x0 + ldmia sp!, {r4-r8,lr} + bx lr +_020CB0D8: + ldr r0, [r8, #0x70] + cmp r0, r5 + beq _020CB10C + cmp r7, #0x0 + ldreq r1, [r6, #0x68] + ldreq r0, _020CB120 ; =0x021D3498 + streq r1, [r0, #0x8] + ldrne r0, [r6, #0x68] + strne r0, [r7, #0x68] + mov r0, r6 + str r5, [r6, #0x70] + bl OSi_InsertThreadToList + bl OSi_RescheduleThread +_020CB10C: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020CB120: .word 0x021D3498 +_020CB124: .word 0x021D34A8 + + arm_func_start OS_YieldThread +OS_YieldThread: ; 0x020CB128 + stmdb sp!, {r4-r8,lr} + ldr r0, _020CB1E0 ; =0x021D3498 + mov r7, #0x0 + mov r6, r7 + mov r5, r7 + ldr r8, [r0, #0x4] + bl OS_DisableInterrupts + ldr r1, _020CB1E0 ; =0x021D3498 + mov r4, r0 + ldr r2, [r1, #0x8] + mov r0, r7 + cmp r2, #0x0 + beq _020CB188 + ldr r1, [r8, #0x70] +_020CB160: + cmp r2, r8 + moveq r7, r0 + ldr r0, [r2, #0x70] + cmp r1, r0 + moveq r6, r2 + mov r0, r2 + ldr r2, [r2, #0x68] + addeq r5, r5, #0x1 + cmp r2, #0x0 + bne _020CB160 +_020CB188: + cmp r5, #0x1 + ble _020CB198 + cmp r6, r8 + bne _020CB1A8 +_020CB198: + mov r0, r4 + bl OS_RestoreInterrupts + ldmia sp!, {r4-r8,lr} + bx lr +_020CB1A8: + cmp r7, #0x0 + ldreq r1, [r8, #0x68] + ldreq r0, _020CB1E0 ; =0x021D3498 + streq r1, [r0, #0x8] + ldrne r0, [r8, #0x68] + strne r0, [r7, #0x68] + ldr r0, [r6, #0x68] + str r0, [r8, #0x68] + str r8, [r6, #0x68] + bl OSi_RescheduleThread + mov r0, r4 + bl OS_RestoreInterrupts + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020CB1E0: .word 0x021D3498 + + arm_func_start OS_RescheduleThread +OS_RescheduleThread: ; 0x020CB1E4 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + mov r4, r0 + bl OSi_RescheduleThread + mov r0, r4 + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr + + arm_func_start OS_SelectThread +OS_SelectThread: ; 0x020CB204 + ldr r0, _020CB22C ; =0x021D3498 + ldr r0, [r0, #0x8] + b _020CB214 +_020CB210: + ldr r0, [r0, #0x68] +_020CB214: + cmp r0, #0x0 + bxeq lr + ldr r1, [r0, #0x64] + cmp r1, #0x1 + bne _020CB210 + bx lr + .balign 4 +_020CB22C: .word 0x021D3498 + + arm_func_start OS_WakeupThreadDirect +OS_WakeupThreadDirect: ; 0x020CB230 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + mov r1, #0x1 + mov r4, r0 + str r1, [r5, #0x64] + bl OSi_RescheduleThread + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start OS_WakeupThread +OS_WakeupThread: ; 0x020CB264 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, [r5, #0x0] + mov r4, r0 + cmp r1, #0x0 + beq _020CB2D0 + cmp r1, #0x0 + beq _020CB2BC + mov r7, #0x1 + mov r6, #0x0 +_020CB294: + mov r0, r5 + bl OSi_RemoveLinkFromQueue + str r7, [r0, #0x64] + str r6, [r0, #0x78] + str r6, [r0, #0x80] + ldr r1, [r0, #0x80] + str r1, [r0, #0x7c] + ldr r0, [r5, #0x0] + cmp r0, #0x0 + bne _020CB294 +_020CB2BC: + mov r0, #0x0 + str r0, [r5, #0x4] + ldr r0, [r5, #0x4] + str r0, [r5, #0x0] + bl OSi_RescheduleThread +_020CB2D0: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start OS_SleepThread +OS_SleepThread: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + bl OS_DisableInterrupts + ldr r1, _020CB334 ; =0x021D3490 + mov r5, r0 + ldr r0, [r1, #0x0] + cmp r6, #0x0 + ldr r4, [r0, #0x0] + beq _020CB318 + mov r0, r6 + mov r1, r4 + str r6, [r4, #0x78] + bl OSi_InsertLinkToQueue +_020CB318: + mov r0, #0x0 + str r0, [r4, #0x64] + bl OSi_RescheduleThread + mov r0, r5 + bl OS_RestoreInterrupts + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020CB334: .word 0x021D3490 + + arm_func_start OS_IsThreadTerminated +OS_IsThreadTerminated: ; 0x020CB338 + ldr r0, [r0, #0x64] + cmp r0, #0x2 + moveq r0, #0x1 + movne r0, #0x0 + bx lr + + arm_func_start OS_JoinThread +OS_JoinThread: ; 0x020CB34C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, [r5, #0x64] + mov r4, r0 + cmp r1, #0x2 + beq _020CB374 + add r0, r5, #0x9c + bl OS_SleepThread +_020CB374: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start OSi_CancelThreadAlarmForSleep +OSi_CancelThreadAlarmForSleep: ; 0x020CB388 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, [r0, #0xb0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + bl OS_CancelAlarm + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start OS_DestroyThread +OS_DestroyThread: ; 0x020CB3B4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020CB438 ; =0x021D3498 + mov r4, r0 + ldr r0, [r1, #0x4] + cmp r0, r5 + bne _020CB3DC + bl OSi_ExitThread_Destroy +_020CB3DC: + bl OS_DisableScheduler + mov r0, r5 + bl OSi_UnlockAllMutex + mov r0, r5 + bl OSi_CancelThreadAlarmForSleep + ldr r0, [r5, #0x78] + cmp r0, #0x0 + beq _020CB404 + mov r1, r5 + bl OSi_RemoveSpecifiedLinkFromQueue +_020CB404: + mov r0, r5 + bl OSi_RemoveThreadFromList + mov r1, #0x2 + add r0, r5, #0x9c + str r1, [r5, #0x64] + bl OS_WakeupThread + bl OS_EnableScheduler + mov r0, r4 + bl OS_RestoreInterrupts + bl OS_RescheduleThread + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020CB438: .word 0x021D3498 + + arm_func_start OSi_ExitThread_Destroy +OSi_ExitThread_Destroy: ; 0x020CB43C + stmdb sp!, {r4,lr} + ldr r0, _020CB498 ; =0x021D3490 + ldr r0, [r0, #0x0] + ldr r4, [r0, #0x0] + bl OS_DisableScheduler + mov r0, r4 + bl OSi_UnlockAllMutex + ldr r0, [r4, #0x78] + cmp r0, #0x0 + beq _020CB46C + mov r1, r4 + bl OSi_RemoveSpecifiedLinkFromQueue +_020CB46C: + mov r0, r4 + bl OSi_RemoveThreadFromList + mov r1, #0x2 + add r0, r4, #0x9c + str r1, [r4, #0x64] + bl OS_WakeupThread + bl OS_EnableScheduler + bl OS_RescheduleThread + bl OS_Terminate + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CB498: .word 0x021D3490 + + arm_func_start OSi_ExitThread_Destroy2 +OSi_ExitThread_Destroy2: ; 0x020CB49C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020CB4DC ; =0x021D3490 + ldr r1, [r1, #0x0] + ldr r3, [r1, #0x0] + ldr r2, [r3, #0xb4] + cmp r2, #0x0 + beq _020CB4CC + mov r1, #0x0 + str r1, [r3, #0xb4] + blx r2 + bl OS_DisableInterrupts +_020CB4CC: + bl OSi_ExitThread_Destroy + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CB4DC: .word 0x021D3490 + + arm_func_start OSi_ExitThread_ArgSpecified +OSi_ExitThread_ArgSpecified: ; 0x020CB4E0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r2, _020CB548 ; =0x021D3480 + mov r5, r0 + ldr r2, [r2, #0x0] + mov r4, r1 + cmp r2, #0x0 + beq _020CB534 + ldr r1, _020CB54C ; =OSi_ExitThread_Destroy2 + bl OS_InitContext + str r4, [r5, #0x4] + ldr r1, [r5, #0x0] + mov r0, r5 + orr r1, r1, #0x80 + str r1, [r5, #0x0] + mov r1, #0x1 + str r1, [r5, #0x64] + bl OS_LoadContext + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020CB534: + mov r0, r4 + bl OSi_ExitThread_Destroy2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020CB548: .word 0x021D3480 +_020CB54C: .word OSi_ExitThread_Destroy2 + + arm_func_start OS_ExitThread +OS_ExitThread: ; 0x020CB550 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r0, _020CB578 ; =0x021D3498 + mov r1, #0x0 + ldr r0, [r0, #0x4] + bl OSi_ExitThread_ArgSpecified + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CB578: .word 0x021D3498 + + arm_func_start OS_CreateThread +OS_CreateThread: ; 0x020CB57C + stmdb sp!, {r4-r8,lr} + mov r8, r0 + mov r5, r1 + mov r7, r2 + mov r6, r3 + bl OS_DisableInterrupts + mov r4, r0 + bl OSi_GetUnusedThreadId + ldr r2, [sp, #0x1c] + mov r1, #0x0 + str r2, [r8, #0x70] + str r0, [r8, #0x6c] + str r1, [r8, #0x64] + str r1, [r8, #0x74] + mov r0, r8 + bl OSi_InsertThreadToList + mov r1, r5 + str r6, [r8, #0x94] + ldr r0, [sp, #0x18] + mov r12, #0x0 + sub r5, r6, r0 + sub r2, r6, #0x4 + str r5, [r8, #0x90] + str r12, [r8, #0x98] + ldr r3, _020CB678 ; =0xFDDB597D + ldr r0, [r8, #0x94] + ldr r6, _020CB67C ; =0x7BF9DD5B + str r3, [r0, #-0x4] + ldr r3, [r8, #0x90] + mov r0, r8 + str r6, [r3, #0x0] + str r12, [r8, #0xa0] + ldr r3, [r8, #0xa0] + str r3, [r8, #0x9c] + bl OS_InitContext + str r7, [r8, #0x4] + add r1, r5, #0x4 + ldr r2, _020CB680 ; =OS_ExitThread + mov r0, #0x0 + str r2, [r8, #0x3c] + ldr r2, [sp, #0x18] + sub r2, r2, #0x8 + bl MIi_CpuClear32 + mov r1, #0x0 + str r1, [r8, #0x84] + str r1, [r8, #0x88] + str r1, [r8, #0x8c] + mov r0, r8 + bl OS_SetThreadDestructor +_020CB640: + mov r0, #0x0 + str r0, [r8, #0x78] + str r0, [r8, #0x80] + ldr r2, [r8, #0x80] + add r1, r8, #0xA4 + str r2, [r8, #0x7C] + mov r2, #0xC + bl MIi_CpuClear32 + mov r0, r4 + mov r1, #0x0 + str r1, [r8, #0xB0] + bl OS_RestoreInterrupts + ldmia sp!, {r4-r8, lr} + bx lr +_020CB678: .word 0xFDDB597D +_020CB67C: .word 0x7BF9DD5B +_020CB680: .word OS_ExitThread + + arm_func_start OS_InitThread +OS_InitThread: ; 0x020CB684 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + ldr r3, _020CB7A4 ; =0x021D3494 + ldr r0, [r3, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x8 + ldmneia sp!, {r4-r6,lr} + bxne lr + ldr ip, _020CB7A8 ; =0x00000000 + ldr r1, _020CB7AC ; =0x021D3568 + mov lr, #0x0 + ldr r0, _020CB7B0 ; =0x021D3498 + mov r6, #0x1 + mov r4, #0x10 + str r1, [r0, #0x8] + str r1, [r0, #0x4] + cmp r12, #0x0 + ldrle r0, _020CB7B4 ; =0x027E0080 + str r4, [r1, #0x70] + suble r4, r0, r12 + str lr, [r1, #0x6c] + str r6, [r1, #0x64] + str lr, [r1, #0x68] + str lr, [r1, #0x74] + ldrgt r1, _020CB7B8 ; =0x027E0000 + ldrgt r0, _020CB7BC ; =0x00000400 + addgt r1, r1, #0x3f80 + subgt r0, r1, r0 + subgt r4, r0, r12 + ldr r1, _020CB7B8 ; =0x027E0000 + ldr r5, _020CB7C0 ; =0x021D349C + ldr r2, _020CB7C4 ; =0x021D3490 + ldr r0, _020CB7BC ; =0x00000400 + str r5, [r2, #0x0] + ldr r2, _020CB7AC ; =0x021D3568 + add r1, r1, #0x3f80 + str r6, [r3, #0x0] + sub r3, r1, r0 + mov r0, #0x0 + ldr r1, _020CB7C8 ; =0xFDDB597D + str r3, [r2, #0x94] + str r4, [r2, #0x90] + str r0, [r2, #0x98] + str r1, [r3, #-0x4] + ldr r3, [r2, #0x90] + ldr ip, _020CB7CC ; =0x7BF9DD5B + ldr r1, _020CB7B0 ; =0x021D3498 + str r12, [r3, #0x0] + ldr r3, _020CB7D0 ; =0x027FFFA0 + str r0, [r2, #0xa0] + str r0, [r2, #0x9c] + strh r0, [r1, #0x0] + strh r0, [r1, #0x2] + str r1, [r3, #0x0] + bl OS_SetSwitchThreadCallback + mov r2, #0xc8 + str r2, [sp, #0x0] + mov r12, #0x1f + ldr r0, _020CB7D4 ; =0x021D34A8 + ldr r1, _020CB7D8 ; =OSi_IdleThreadProc + ldr r3, _020CB7DC ; =0x021D36F0 + mov r2, #0x0 + str r12, [sp, #0x4] + bl OS_CreateThread + ldr r0, _020CB7D4 ; =0x021D34A8 + mov r2, #0x20 + mov r1, #0x1 + str r2, [r0, #0x70] + str r1, [r0, #0x64] + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020CB7A4: .word 0x021D3494 +_020CB7A8: .word 0x00000000 +_020CB7AC: .word 0x021D3568 +_020CB7B0: .word 0x021D3498 +_020CB7B4: .word 0x027E0080 +_020CB7B8: .word 0x027E0000 +_020CB7BC: .word 0x00000400 +_020CB7C0: .word 0x021D349C +_020CB7C4: .word 0x021D3490 +_020CB7C8: .word 0xFDDB597D +_020CB7CC: .word 0x7BF9DD5B +_020CB7D0: .word 0x027FFFA0 +_020CB7D4: .word 0x021D34A8 +_020CB7D8: .word OSi_IdleThreadProc +_020CB7DC: .word 0x021D36F0 + + arm_func_start OSi_RescheduleThread +OSi_RescheduleThread: ; 0x020CB7E0 + stmdb sp!, {r4-r6,lr} + ldr r0, _020CB8BC ; =0x021D3484 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldmneia sp!, {r4-r6,lr} + bxne lr + ldr r4, _020CB8C0 ; =0x021D3498 + ldrh r0, [r4, #0x2] + cmp r0, #0x0 + bne _020CB814 + bl OS_GetProcMode + cmp r0, #0x12 + bne _020CB824 +_020CB814: + mov r0, #0x1 + strh r0, [r4, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr +_020CB824: + ldr r0, _020CB8C4 ; =0x021D3490 + ldr r0, [r0, #0x0] + ldr r6, [r0, #0x0] + bl OS_SelectThread + mov r5, r0 + cmp r6, r5 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + cmp r5, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r0, [r6, #0x64] + cmp r0, #0x2 + beq _020CB870 + mov r0, r6 + bl OS_SaveContext +_020CB864: + cmp r0, #0x0 + ldmneia sp!, {r4-r6,lr} + bxne lr +_020CB870: + ldr r0, _020CB8C8 ; =0x021D348C + ldr r2, [r0, #0x0] + cmp r2, #0x0 + beq _020CB88C + mov r0, r6 + mov r1, r5 + blx r2 +_020CB88C: + ldr r2, [r4, #0xc] + cmp r2, #0x0 + beq _020CB8A4 + mov r0, r6 + mov r1, r5 + blx r2 +_020CB8A4: + ldr r1, _020CB8C0 ; =0x021D3498 + mov r0, r5 + str r5, [r1, #0x4] + bl OS_LoadContext + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020CB8BC: .word 0x021D3484 +_020CB8C0: .word 0x021D3498 +_020CB8C4: .word 0x021D3490 +_020CB8C8: .word 0x021D348C + + arm_func_start OSi_RemoveThreadFromList +OSi_RemoveThreadFromList: ; 0x020CB8CC + ldr r1, _020CB910 ; =0x021D3498 + mov r2, #0x0 + ldr r1, [r1, #0x8] + b _020CB8E4 +_020CB8DC: + mov r2, r1 + ldr r1, [r1, #0x68] +_020CB8E4: + cmp r1, #0x0 + beq _020CB8F4 + cmp r1, r0 + bne _020CB8DC +_020CB8F4: + cmp r2, #0x0 + ldreq r1, [r0, #0x68] + ldreq r0, _020CB910 ; =0x021D3498 + streq r1, [r0, #0x8] + ldrne r0, [r0, #0x68] + strne r0, [r2, #0x68] + bx lr + .balign 4 +_020CB910: .word 0x021D3498 + + arm_func_start OSi_InsertThreadToList +OSi_InsertThreadToList: ; 0x020CB914 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020CB978 ; =0x021D3498 + mov r12, #0x0 + ldr r3, [r1, #0x8] + mov lr, r3 + b _020CB938 +_020CB930: + mov r12, lr + ldr lr, [lr, #0x68] +_020CB938: + cmp lr, #0x0 + beq _020CB950 + ldr r2, [lr, #0x70] + ldr r1, [r0, #0x70] + cmp r2, r1 + blo _020CB930 +_020CB950: + cmp r12, #0x0 + ldreq r1, _020CB978 ; =0x021D3498 + streq r3, [r0, #0x68] + streq r0, [r1, #0x8] + ldrne r1, [r12, #0x68] + strne r1, [r0, #0x68] + strne r0, [r12, #0x68] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CB978: .word 0x021D3498 + + arm_func_start OSi_RemoveMutexLinkFromQueue +OSi_RemoveMutexLinkFromQueue: ; 0x020CB97C + ldr r2, [r0, #0x0] + cmp r2, #0x0 + beq _020CB9A4 + ldr r1, [r2, #0x10] + str r1, [r0, #0x0] + cmp r1, #0x0 + movne r0, #0x0 + strne r0, [r1, #0x14] + moveq r1, #0x0 + streq r1, [r0, #0x4] +_020CB9A4: + mov r0, r2 + bx lr + + arm_func_start OSi_RemoveSpecifiedLinkFromQueue +OSi_RemoveSpecifiedLinkFromQueue: ; 0x020CB9AC + ldr r2, [r0, #0x0] + mov r12, r2 + cmp r2, #0x0 + beq _020CB9F8 +_020CB9BC: + cmp r12, r1 + ldr r3, [r12, #0x80] + bne _020CB9EC + cmp r2, r12 + ldr r2, [r12, #0x7c] + streq r3, [r0, #0x0] + strne r3, [r2, #0x80] + ldr r1, [r0, #0x4] + cmp r1, r12 + streq r2, [r0, #0x4] + strne r2, [r3, #0x7c] + b _020CB9F8 +_020CB9EC: + mov r12, r3 + cmp r3, #0x0 + bne _020CB9BC +_020CB9F8: + mov r0, r12 + bx lr + + arm_func_start OSi_RemoveLinkFromQueue +OSi_RemoveLinkFromQueue: ; 0x020CBA00 + ldr r2, [r0, #0x0] + cmp r2, #0x0 + beq _020CBA2C + ldr r1, [r2, #0x80] + str r1, [r0, #0x0] + cmp r1, #0x0 + movne r0, #0x0 + strne r0, [r1, #0x7c] + moveq r1, #0x0 + streq r1, [r0, #0x4] + streq r1, [r2, #0x78] +_020CBA2C: + mov r0, r2 + bx lr + + arm_func_start OSi_InsertLinkToQueue +OSi_InsertLinkToQueue: + ldr r12, [r0, #0x0] + b _020CBA48 +_020CBA3C: + cmp r12, r1 + bxeq lr + ldr r12, [r12, #0x80] +_020CBA48: + cmp r12, #0x0 + beq _020CBA60 + ldr r3, [r12, #0x70] + ldr r2, [r1, #0x70] + cmp r3, r2 + bls _020CBA3C +_020CBA60: + cmp r12, #0x0 + bne _020CBA8C + ldr r2, [r0, #0x4] + cmp r2, #0x0 + streq r1, [r0, #0x0] + strne r1, [r2, #0x80] + str r2, [r1, #0x7c] + mov r2, #0x0 + str r2, [r1, #0x80] + str r1, [r0, #0x4] + bx lr +_020CBA8C: + ldr r2, [r12, #0x7c] + cmp r2, #0x0 + streq r1, [r0, #0x0] + strne r1, [r2, #0x80] + str r2, [r1, #0x7c] + str r12, [r1, #0x80] + str r1, [r12, #0x7c] + bx lr + + arm_func_start OSi_GetUnusedThreadId +OSi_GetUnusedThreadId: ; 0x020CBAAC + ldr r1, _020CBAC0 ; =0x021D3488 + ldr r0, [r1, #0x0] + add r0, r0, #0x1 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020CBAC0: .word 0x021D3488 + + arm_func_start OS_InitContext +OS_InitContext: ; 0x020CBAC4 + add r1, r1, #0x4 + str r1, [r0, #0x40] + str r2, [r0, #0x44] + sub r2, r2, #0x40 + tst r2, #0x4 + subne r2, r2, #0x4 + str r2, [r0, #0x38] + ands r1, r1, #0x1 + movne r1, #0x3f + moveq r1, #0x1f + str r1, [r0, #0x0] + mov r1, #0x0 + str r1, [r0, #0x4] + str r1, [r0, #0x8] + str r1, [r0, #0xc] + str r1, [r0, #0x10] + str r1, [r0, #0x14] + str r1, [r0, #0x18] + str r1, [r0, #0x1c] + str r1, [r0, #0x20] + str r1, [r0, #0x24] + str r1, [r0, #0x28] + str r1, [r0, #0x2c] + str r1, [r0, #0x30] + str r1, [r0, #0x34] + str r1, [r0, #0x3c] + bx lr + + arm_func_start OS_SaveContext +OS_SaveContext: + stmdb sp!, {r0,lr} + add r0, r0, #0x48 + ldr r1, _020CBB78 ; =CP_SaveContext + blx r1 + ldmia sp!, {r0,lr} + add r1, r0, #0x0 + mrs r2, cpsr + str r2, [r1], #0x4 + mov r0, #0xd3 + msr cpsr_c, r0 + str sp, [r1, #0x40] + msr cpsr_c, r2 + mov r0, #0x1 + stmia r1, {r0-lr} + add r0, pc, #0x8 ; =_020CBB78 + str r0, [r1, #0x3c] + mov r0, #0x0 + bx lr + .balign 4 +_020CBB78: .word CP_SaveContext + + arm_func_start OS_LoadContext +OS_LoadContext: ; 0x020CBB7C + stmdb sp!, {r0,lr} + add r0, r0, #0x48 + ldr r1, _020CBBBC ; =CP_RestoreContext + blx r1 + ldmia sp!, {r0,lr} + mrs r1, cpsr + bic r1, r1, #0x1f + orr r1, r1, #0xd3 + msr cpsr_c, r1 + ldr r1, [r0], #0x4 + msr spsr_fsxc, r1 + ldr sp, [r0, #0x40] + ldr lr, [r0, #0x3c] + ldmia r0, {r0-lr}^ + mov r0, r0 + subs pc, lr, #0x4 + .balign 4 +_020CBBBC: .word CP_RestoreContext + + arm_func_start OS_GetConsoleType +OS_GetConsoleType: ; 0x020CBBC0 + ldr r0, _020CBBD0 ; =0x82000001 + ldr r1, _020CBBD4 ; =0x02106828 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020CBBD0: .word 0x82000001 +_020CBBD4: .word 0x02106828 + + arm_func_start OS_IsRunOnEmulator +OS_IsRunOnEmulator: + mov r0, #0x0 + bx lr + + arm_func_start OS_ReadMessage +OS_ReadMessage: ; 0x020CBBE0 + stmdb sp!, {r4-r8,lr} + mov r6, r0 + mov r5, r1 + mov r7, r2 + bl OS_DisableInterrupts + ldr r1, [r6, #0x1c] + mov r4, r0 + cmp r1, #0x0 + bne _020CBC3C + and r8, r7, #0x1 + add r7, r6, #0x8 +_020CBC0C: + cmp r8, #0x0 + bne _020CBC28 + mov r0, r4 + bl OS_RestoreInterrupts +_020CBC1C: + mov r0, #0x0 + ldmia sp!, {r4-r8,lr} + bx lr +_020CBC28: + mov r0, r7 + bl OS_SleepThread + ldr r0, [r6, #0x1c] + cmp r0, #0x0 + beq _020CBC0C +_020CBC3C: + cmp r5, #0x0 + ldrne r1, [r6, #0x10] + ldrne r0, [r6, #0x18] + ldrne r0, [r1, r0, lsl #0x2] + strne r0, [r5, #0x0] + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start OS_JamMessage +OS_JamMessage: ; 0x020CBC64 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r0 + mov r5, r1 + mov r7, r2 + bl OS_DisableInterrupts + ldr r1, [r6, #0x14] + ldr r2, [r6, #0x1c] + mov r4, r0 + cmp r1, r2 + bgt _020CBCCC + and r7, r7, #0x1 +_020CBC94: + cmp r7, #0x0 + bne _020CBCB4 + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020CBCB4: + mov r0, r6 + bl OS_SleepThread + ldr r1, [r6, #0x14] + ldr r0, [r6, #0x1c] + cmp r1, r0 + ble _020CBC94 +_020CBCCC: + ldr r0, [r6, #0x18] + add r0, r0, r1 + sub r0, r0, #0x1 + bl _s32_div_f + str r1, [r6, #0x18] + ldr r2, [r6, #0x10] + ldr r1, [r6, #0x18] + add r0, r6, #0x8 + str r5, [r2, r1, lsl #0x2] + ldr r1, [r6, #0x1c] + add r1, r1, #0x1 + str r1, [r6, #0x1c] + bl OS_WakeupThread + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start OS_ReceiveMessage +OS_ReceiveMessage: ; 0x020CBD18 + stmdb sp!, {r4-r8,lr} + mov r6, r0 + mov r5, r1 + mov r7, r2 + bl OS_DisableInterrupts + ldr r1, [r6, #0x1c] + mov r4, r0 + cmp r1, #0x0 + bne _020CBD74 + and r8, r7, #0x1 + add r7, r6, #0x8 +_020CBD44: + cmp r8, #0x0 + bne _020CBD60 + mov r0, r4 + bl OS_RestoreInterrupts +_020CBD54: + mov r0, #0x0 + ldmia sp!, {r4-r8,lr} + bx lr +_020CBD60: + mov r0, r7 + bl OS_SleepThread + ldr r0, [r6, #0x1c] + cmp r0, #0x0 + beq _020CBD44 +_020CBD74: + cmp r5, #0x0 + ldrne r1, [r6, #0x10] + ldrne r0, [r6, #0x18] + ldrne r0, [r1, r0, lsl #0x2] + strne r0, [r5, #0x0] + ldr r0, [r6, #0x18] + ldr r1, [r6, #0x14] + add r0, r0, #0x1 + bl _s32_div_f + str r1, [r6, #0x18] + ldr r1, [r6, #0x1c] + mov r0, r6 + sub r1, r1, #0x1 + str r1, [r6, #0x1c] + bl OS_WakeupThread + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start OS_SendMessage +OS_SendMessage: ; 0x020CBDC4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r0 + mov r5, r1 + mov r7, r2 + bl OS_DisableInterrupts + ldr r2, [r6, #0x1c] + ldr r1, [r6, #0x14] + mov r4, r0 + cmp r1, r2 + bgt _020CBE2C + and r7, r7, #0x1 +_020CBDF4: + cmp r7, #0x0 + bne _020CBE14 + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020CBE14: + mov r0, r6 + bl OS_SleepThread + ldr r2, [r6, #0x1c] + ldr r1, [r6, #0x14] + cmp r1, r2 + ble _020CBDF4 +_020CBE2C: + ldr r0, [r6, #0x18] + add r0, r0, r2 + bl _s32_div_f + ldr r2, [r6, #0x10] + add r0, r6, #0x8 + str r5, [r2, r1, lsl #0x2] + ldr r1, [r6, #0x1c] + add r1, r1, #0x1 + str r1, [r6, #0x1c] + bl OS_WakeupThread + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start OS_InitMessageQueue +OS_InitMessageQueue: ; 0x020CBE6C + mov r12, #0x0 + str r12, [r0, #0x4] + ldr r3, [r0, #0x4] + str r3, [r0, #0x0] + str r12, [r0, #0xc] + ldr r3, [r0, #0xc] + str r3, [r0, #0x8] + str r1, [r0, #0x10] + str r2, [r0, #0x14] + str r12, [r0, #0x18] + str r12, [r0, #0x1c] + bx lr + + arm_func_start OSi_DequeueItem +OSi_DequeueItem: ; 0x020CBE9C + ldr r2, [r1, #0x10] + ldr r1, [r1, #0x14] + cmp r2, #0x0 + streq r1, [r0, #0x8c] + strne r1, [r2, #0x14] + cmp r1, #0x0 + streq r2, [r0, #0x88] + strne r2, [r1, #0x10] + bx lr + + arm_func_start OSi_EnqueueTail +OSi_EnqueueTail: ; 0x020CBEC0 + ldr r2, [r0, #0x8c] + cmp r2, #0x0 + streq r1, [r0, #0x88] + strne r1, [r2, #0x10] + str r2, [r1, #0x14] + mov r2, #0x0 + str r2, [r1, #0x10] + str r1, [r0, #0x8c] + bx lr + + arm_func_start OS_TryLockMutex +OS_TryLockMutex: ; 0x020CBEE4 + stmdb sp!, {r4-r6,lr} + mov r5, r0 + bl OS_DisableInterrupts + ldr r2, [r5, #0x8] + ldr r1, _020CBF54 ; =0x021D3498 + mov r4, r0 + cmp r2, #0x0 + ldr r0, [r1, #0x4] + bne _020CBF28 + str r0, [r5, #0x8] + ldr r2, [r5, #0xc] + mov r1, r5 + add r2, r2, #0x1 + str r2, [r5, #0xc] + bl OSi_EnqueueTail + mov r6, #0x1 + b _020CBF40 +_020CBF28: + cmp r2, r0 + ldreq r0, [r5, #0xc] + moveq r6, #0x1 + addeq r0, r0, #0x1 + streq r0, [r5, #0xc] + movne r6, #0x0 +_020CBF40: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, r6 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020CBF54: .word 0x021D3498 + + arm_func_start OSi_UnlockAllMutex +OSi_UnlockAllMutex: ; 0x020CBF58 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldr r0, [r6, #0x88] + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + add r5, r6, #0x88 + mov r4, #0x0 +_020CBF78: + mov r0, r5 + bl OSi_RemoveMutexLinkFromQueue + str r4, [r0, #0xc] + str r4, [r0, #0x8] + bl OS_WakeupThread + ldr r0, [r6, #0x88] + cmp r0, #0x0 + bne _020CBF78 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start OS_UnlockMutex +OS_UnlockMutex: ; 0x020CBFA0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020CC00C ; =0x021D3498 + mov r4, r0 + ldr r0, [r1, #0x4] + ldr r1, [r5, #0x8] + cmp r1, r0 + bne _020CBFF8 + ldr r1, [r5, #0xc] + sub r1, r1, #0x1 + str r1, [r5, #0xc] + ldr r1, [r5, #0xc] + cmp r1, #0x0 + bne _020CBFF8 + mov r1, r5 + bl OSi_DequeueItem + mov r1, #0x0 + mov r0, r5 + str r1, [r5, #0x8] + bl OS_WakeupThread +_020CBFF8: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020CC00C: .word 0x021D3498 + + arm_func_start OS_LockMutex +OS_LockMutex: ; 0x020CC010 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020CC098 ; =0x021D3498 + mov r4, r0 + ldr r7, [r1, #0x4] + mov r6, #0x0 +_020CC030: + ldr r0, [r5, #0x8] + cmp r0, #0x0 + bne _020CC05C + str r7, [r5, #0x8] + ldr r1, [r5, #0xc] + mov r0, r7 + add r2, r1, #0x1 + mov r1, r5 + str r2, [r5, #0xc] + bl OSi_EnqueueTail + b _020CC084 +_020CC05C: + cmp r0, r7 + ldreq r0, [r5, #0xc] + addeq r0, r0, #0x1 + streq r0, [r5, #0xc] + beq _020CC084 + mov r0, r5 + str r5, [r7, #0x84] + bl OS_SleepThread + str r6, [r7, #0x84] + b _020CC030 +_020CC084: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020CC098: .word 0x021D3498 + + arm_func_start OS_InitMutex +OS_InitMutex: ; 0x020CC09C + mov r2, #0x0 + str r2, [r0, #0x4] + ldr r1, [r0, #0x4] + str r1, [r0, #0x0] + str r2, [r0, #0x8] + str r2, [r0, #0xc] + bx lr + + arm_func_start DC_InvalidateAll +DC_InvalidateAll: ; 0x020CC0B8 + mov r0, #0x0 + mcr p15, 0x0, r0, c7, c6, 0x0 + bx lr + + arm_func_start DC_StoreAll +DC_StoreAll: ; 0x020CC0C4 + mov r1, #0x0 +_020CC0C8: + mov r0, #0x0 +_020CC0CC: + orr r2, r1, r0 + mcr p15, 0x0, r2, c7, c10, 0x2 + add r0, r0, #0x20 + cmp r0, #0x400 + blt _020CC0CC + add r1, r1, #0x40000000 + cmp r1, #0x0 + bne _020CC0C8 + bx lr + + arm_func_start DC_FlushAll +DC_FlushAll: ; 0x020CC0F0 + mov r12, #0x0 + mov r1, #0x0 +_020CC0F8: + mov r0, #0x0 +_020CC0FC: + orr r2, r1, r0 + mcr p15, 0x0, r12, c7, c10, 0x4 + mcr p15, 0x0, r2, c7, c14, 0x2 + add r0, r0, #0x20 + cmp r0, #0x400 + blt _020CC0FC + add r1, r1, #0x40000000 + cmp r1, #0x0 + bne _020CC0F8 + bx lr + + arm_func_start DC_InvalidateRange +DC_InvalidateRange: ; 0x020CC124 + add r1, r1, r0 + bic r0, r0, #0x1f +_020CC12C: + mcr p15, 0x0, r0, c7, c6, 0x1 + add r0, r0, #0x20 + cmp r0, r1 + blt _020CC12C + bx lr + + arm_func_start DC_StoreRange +DC_StoreRange: ; 0x020CC140 + add r1, r1, r0 + bic r0, r0, #0x1f +_020CC148: + mcr p15, 0x0, r0, c7, c10, 0x1 + add r0, r0, #0x20 + cmp r0, r1 + blt _020CC148 + bx lr + + arm_func_start DC_FlushRange +DC_FlushRange: ; 0x020CC15C + mov r12, #0x0 + add r1, r1, r0 + bic r0, r0, #0x1f +_020CC168: + mcr p15, 0x0, r12, c7, c10, 0x4 + mcr p15, 0x0, r0, c7, c14, 0x1 + add r0, r0, #0x20 + cmp r0, r1 + blt _020CC168 + bx lr + + arm_func_start DC_WaitWriteBufferEmpty +DC_WaitWriteBufferEmpty: ; 0x020CC180 + mov r0, #0x0 + mcr p15, 0x0, r0, c7, c10, 0x4 + bx lr + + arm_func_start IC_InvalidateAll +IC_InvalidateAll: ; 0x020CC18C + mov r0, #0x0 + mcr p15, 0x0, r0, c7, c5, 0x0 + bx lr + + arm_func_start IC_InvalidateRange +IC_InvalidateRange: + add r1, r1, r0 + bic r0, r0, #0x1f +_020CC1A0: + mcr p15, 0x0, r0, c7, c5, 0x1 + add r0, r0, #0x20 + cmp r0, r1 + blt _020CC1A0 + bx lr + + arm_func_start OS_Init +OS_Init: ; 0x020CC1B4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_InitArena + bl PXI_Init + bl OS_InitLock + bl OS_InitArenaEx + bl OS_InitIrqTable + bl OS_SetIrqStackChecker + bl OS_InitException + bl MI_Init + bl OS_InitVAlarm + bl OSi_InitVramExclusive + bl OS_InitThread + bl OS_InitReset + bl CTRDG_Init + bl CARD_Init + bl PM_Init + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start OS_AllocFromArenaHi +OS_AllocFromArenaHi: ; 0x020CC204 + stmdb sp!, {r4-r6,lr} + mov r4, r0 + mov r6, r1 + mov r5, r2 + bl OS_GetArenaHi +_020CC218: + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + sub r1, r5, #0x1 + mvn r2, r1 + and r0, r0, r2 + sub r1, r0, r6 + mov r0, r4 + and r5, r1, r2 + bl OS_GetArenaLo + cmp r5, r0 + movcc r0, #0x0 + ldmccia sp!, {r4-r6, lr} + bxcc lr + mov r0, r4 + mov r1, r5 + bl OS_SetArenaHi + mov r0, r5 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start OS_AllocFromArenaLo +OS_AllocFromArenaLo: ; 0x020CC26C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl OS_GetArenaLo +_020CC284: + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7, lr} + bxeq lr + add r0, r0, r5 + sub r1, r5, #0x1 + mvn r2, r1 + sub r0, r0, #0x1 + and r4, r2, r0 + add r0, r4, r6 + add r0, r0, r5 + sub r1, r0, #0x1 + mov r0, r7 + and r5, r2, r1 + bl OS_GetArenaHi + cmp r5, r0 + addhi sp, sp, #0x4 + movhi r0, #0x0 + ldmhiia sp!, {r4-r7, lr} + bxhi lr + mov r0, r7 + mov r1, r5 + bl OS_SetArenaLo + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r7, lr} + bx lr + + arm_func_start OS_SetArenaLo +OS_SetArenaLo: ; 0x020CC2F4 + mov r0, r0, lsl #0x2 + add r0, r0, #0x2700000 + add r0, r0, #0xff000 + str r1, [r0, #0xda0] + bx lr + + arm_func_start OS_SetArenaHi +OS_SetArenaHi: + mov r0, r0, lsl #0x2 + add r0, r0, #0x2700000 + add r0, r0, #0xff000 + str r1, [r0, #0xdc4] + bx lr + + arm_func_start OS_GetInitArenaLo +OS_GetInitArenaLo: ; 0x020CC31C + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x6 + addls pc, pc, r0, lsl #0x2 + b _020CC3DC +_020CC330: + b _020CC34C + b _020CC3DC + b _020CC35C + b _020CC39C + b _020CC3AC + b _020CC3BC + b _020CC3CC +_020CC34C: + add sp, sp, #0x4 + ldr r0, _020CC3EC ; =0x0225FFA0 + ldmfd sp!, {lr} + bx lr +_020CC35C: + ldr r0, _020CC3F0 ; =0x021D36F4 + ldr r0, [r0] + cmp r0, #0x0 + beq _020CC37C + bl OS_GetConsoleType + and r0, r0, #0x3 + cmp r0, #0x1 + bne _020CC38C +_020CC37C: + add sp, sp, #0x4 + mov r0, #0x0 + ldmfd sp!, {lr} + bx lr +_020CC38C: + add sp, sp, #0x4 + ldr r0, _020CC3F4 ; =0x023E0000 + ldmfd sp!, {lr} + bx lr +_020CC39C: + add sp, sp, #0x4 + ldr r0, _020CC3F8 ; =0x01FF8720 + ldmfd sp!, {lr} + bx lr +_020CC3AC: + add sp, sp, #0x4 + ldr r0, _020CC3FC ; =0x027E0080 + ldmfd sp!, {lr} + bx lr +_020CC3BC: + add sp, sp, #0x4 + ldr r0, _020CC400 ; =0x027FF000 + ldmfd sp!, {lr} + bx lr +_020CC3CC: + add sp, sp, #0x4 + ldr r0, _020CC404 ; =0x037F8000 + ldmfd sp!, {lr} + bx lr +_020CC3DC: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020CC3EC: .word 0x0225FFA0 +_020CC3F0: .word 0x021D36F4 +_020CC3F4: .word 0x023E0000 +_020CC3F8: .word 0x01FF8720 +_020CC3FC: .word 0x027E0080 +_020CC400: .word 0x027FF000 +_020CC404: .word 0x037F8000 + + arm_func_start OS_GetInitArenaHi +OS_GetInitArenaHi: ; 0x020CC408 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x6 + addls pc, pc, r0, lsl #0x2 + b _020CC508 +_020CC41C: + b _020CC438 + b _020CC508 + b _020CC448 + b _020CC488 + b _020CC498 + b _020CC4E8 + b _020CC4F8 +_020CC438: + add sp, sp, #0x4 + ldr r0, _020CC518 ; =0x023E0000 + ldmfd sp!, {lr} + bx lr +_020CC448: + ldr r0, _020CC51C ; =0x021D36F4 + ldr r0, [r0] + cmp r0, #0x0 + beq _020CC468 + bl OS_GetConsoleType + and r0, r0, #0x3 + cmp r0, #0x1 + bne _020CC478 +_020CC468: + add sp, sp, #0x4 + mov r0, #0x0 + ldmfd sp!, {lr} + bx lr +_020CC478: + add sp, sp, #0x4 + mov r0, #0x2700000 + ldmfd sp!, {lr} + bx lr +_020CC488: + add sp, sp, #0x4 + mov r0, #0x2000000 + ldmfd sp!, {lr} + bx lr +_020CC498: + ldr r0, _020CC520 ; =0x027E0000 + ldr r1, _020CC524 ; =0x00000000 + ldr r2, _020CC528 ; =0x00000400 + add r3, r0, #0x3f80 + cmp r1, #0x0 + sub r2, r3, r2 + bne _020CC4CC + ldr r1, _020CC52C ; =0x027E0080 + add sp, sp, #0x4 + cmp r0, r1 + movcc r0, r1 + ldmfd sp!, {lr} + bx lr +_020CC4CC: + cmp r1, #0x0 + ldrlt r0, _020CC52C ; =0x027E0080 + add sp, sp, #0x4 + sublt r0, r0, r1 + subge r0, r2, r1 + ldmfd sp!, {lr} + bx lr +_020CC4E8: + add sp, sp, #0x4 + ldr r0, _020CC530 ; =0x027FF680 + ldmfd sp!, {lr} + bx lr +_020CC4F8: + add sp, sp, #0x4 + ldr r0, _020CC534 ; =0x037F8000 + ldmfd sp!, {lr} + bx lr +_020CC508: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020CC518: .word 0x023E0000 +_020CC51C: .word 0x021D36F4 +_020CC520: .word 0x027E0000 +_020CC524: .word 0x00000000 +_020CC528: .word 0x00000400 +_020CC52C: .word 0x027E0080 +_020CC530: .word 0x027FF680 +_020CC534: .word 0x037F8000 + + arm_func_start OS_GetArenaLo +OS_GetArenaLo: + mov r0, r0, lsl #0x2 + add r0, r0, #0x2700000 + add r0, r0, #0xff000 + ldr r0, [r0, #0xda0] + bx lr + + arm_func_start OS_GetArenaHi +OS_GetArenaHi: + mov r0, r0, lsl #0x2 + add r0, r0, #0x2700000 + add r0, r0, #0xff000 + ldr r0, [r0, #0xdc4] + bx lr + + arm_func_start OS_InitArenaEx +OS_InitArenaEx: ; 0x020CC560 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, #0x2 + bl OS_GetInitArenaHi + mov r1, r0 + mov r0, #0x2 + bl OS_SetArenaHi + mov r0, #0x2 + bl OS_GetInitArenaLo + mov r1, r0 + mov r0, #0x2 + bl OS_SetArenaLo + ldr r0, _020CC5D4 ; =0x021D36F4 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020CC5B8 + bl OS_GetConsoleType + and r0, r0, #0x3 + cmp r0, #0x1 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr +_020CC5B8: + ldr r0, _020CC5D8 ; =0x0200002B + bl OS_SetProtectionRegion1 + ldr r0, _020CC5DC ; =0x023E0021 + bl OS_SetProtectionRegion2 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CC5D4: .word 0x021D36F4 +_020CC5D8: .word 0x0200002B +_020CC5DC: .word 0x023E0021 + + arm_func_start OS_InitArena +OS_InitArena: ; 0x020CC5E0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020CC6F4 ; =0x021D36F0 + ldr r0, [r1, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + mov r2, #0x1 + mov r0, #0x0 + str r2, [r1, #0x0] + bl OS_GetInitArenaHi + mov r1, r0 + mov r0, #0x0 + bl OS_SetArenaHi +_020CC61C: + mov r0, #0x0 + bl OS_GetInitArenaLo + mov r1, r0 + mov r0, #0x0 + bl OS_SetArenaLo + mov r0, #0x2 + mov r1, #0x0 + bl OS_SetArenaLo + mov r0, #0x2 + mov r1, #0x0 + bl OS_SetArenaHi + mov r0, #0x3 + bl OS_GetInitArenaHi + mov r1, r0 + mov r0, #0x3 + bl OS_SetArenaHi + mov r0, #0x3 + bl OS_GetInitArenaLo + mov r1, r0 + mov r0, #0x3 + bl OS_SetArenaLo + mov r0, #0x4 + bl OS_GetInitArenaHi + mov r1, r0 + mov r0, #0x4 + bl OS_SetArenaHi + mov r0, #0x4 + bl OS_GetInitArenaLo + mov r1, r0 + mov r0, #0x4 + bl OS_SetArenaLo + mov r0, #0x5 + bl OS_GetInitArenaHi + mov r1, r0 + mov r0, #0x5 + bl OS_SetArenaHi + mov r0, #0x5 + bl OS_GetInitArenaLo + mov r1, r0 + mov r0, #0x5 + bl OS_SetArenaLo + mov r0, #0x6 + bl OS_GetInitArenaHi + mov r1, r0 + mov r0, #0x6 + bl OS_SetArenaHi + mov r0, #0x6 + bl OS_GetInitArenaLo + mov r1, r0 + mov r0, #0x6 + bl OS_SetArenaLo + add sp, sp, #0x4 + ldmfd sp!, {lr} + bx lr +_020CC6F4: .word 0x021D36F0 + + arm_func_start OS_FreeToHeap +OS_FreeToHeap: ; 0x020CC6F8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r5, r1 + mov r4, r2 + bl OS_DisableInterrupts + ldr r1, _020CC768 ; =0x021D36F8 + mov r6, r0 + ldr r0, [r1, r7, lsl #0x2] + cmp r5, #0x0 + ldrlt r5, [r0, #0x0] + ldr r1, [r0, #0x10] + mov r0, #0xc + mla r7, r5, r0, r1 + sub r4, r4, #0x20 + ldr r0, [r7, #0x8] + mov r1, r4 + bl DLExtract + str r0, [r7, #0x8] + ldr r0, [r7, #0x4] + mov r1, r4 + bl DLInsert + str r0, [r7, #0x4] + mov r0, r6 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020CC768: .word 0x021D36F8 + + arm_func_start OS_AllocFromHeap +OS_AllocFromHeap: ; 0x020CC76C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r0 + mov r5, r1 + mov r7, r2 + bl OS_DisableInterrupts + ldr r1, _020CC894 ; =0x021D36F8 + mov r4, r0 + ldr r1, [r1, r6, lsl #0x2] + cmp r1, #0x0 + bne _020CC7AC + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020CC7AC: + cmp r5, #0x0 + ldrlt r5, [r1, #0x0] + ldr r1, [r1, #0x10] + mov r0, #0xc + mla r6, r5, r0, r1 + ldr r0, [r6, #0x4] + add r1, r7, #0x20 + add r1, r1, #0x1f + mov r5, r0 + cmp r0, #0x0 + bic r7, r1, #0x1f + beq _020CC7F4 +_020CC7DC: + ldr r1, [r5, #0x8] + cmp r7, r1 + ble _020CC7F4 + ldr r5, [r5, #0x4] + cmp r5, #0x0 + bne _020CC7DC +_020CC7F4: + cmp r5, #0x0 + bne _020CC814 + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020CC814: + ldr r1, [r5, #0x8] + sub r1, r1, r7 + cmp r1, #0x40 + bhs _020CC834 + mov r1, r5 + bl DLExtract + str r0, [r6, #0x4] + b _020CC86C +_020CC834: + str r7, [r5, #0x8] + add r2, r5, r7 + str r1, [r2, #0x8] + ldr r0, [r5, #0x0] + str r0, [r5, r7] + ldr r0, [r5, #0x4] + str r0, [r2, #0x4] + ldr r0, [r2, #0x4] + cmp r0, #0x0 + strne r2, [r0, #0x0] + ldr r0, [r2, #0x0] + cmp r0, #0x0 + strne r2, [r0, #0x4] + streq r2, [r6, #0x4] +_020CC86C: + ldr r0, [r6, #0x8] + mov r1, r5 + bl DLAddFront + str r0, [r6, #0x8] + mov r0, r4 + bl OS_RestoreInterrupts + add r0, r5, #0x20 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020CC894: .word 0x021D36F8 + + arm_func_start DLInsert +DLInsert: ; 0x020CC898 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r12, r0 + cmp r0, #0x0 + mov lr, #0x0 + beq _020CC8C8 +_020CC8B0: + cmp r1, r12 + bls _020CC8C8 + mov lr, r12 + ldr r12, [r12, #0x4] + cmp r12, #0x0 + bne _020CC8B0 +_020CC8C8: + str r12, [r1, #0x4] + str lr, [r1, #0x0] + cmp r12, #0x0 + beq _020CC908 + str r1, [r12, #0x0] + ldr r3, [r1, #0x8] + add r2, r1, r3 + cmp r2, r12 + bne _020CC908 + ldr r2, [r12, #0x8] + add r2, r3, r2 + str r2, [r1, #0x8] + ldr r12, [r12, #0x4] + str r12, [r1, #0x4] + cmp r12, #0x0 + strne r1, [r12, #0x0] +_020CC908: + cmp lr, #0x0 + beq _020CC950 + str r1, [lr, #0x4] + ldr r2, [lr, #0x8] + add r3, lr, r2 + cmp r3, r1 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r1, [r1, #0x8] + add sp, sp, #0x4 + add r1, r2, r1 + str r1, [lr, #0x8] + str r12, [lr, #0x4] + cmp r12, #0x0 + strne lr, [r12, #0x0] + ldmia sp!, {lr} + bx lr +_020CC950: + mov r0, r1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start DLExtract +DLExtract: ; 0x020CC960 + ldr r3, [r1, #0x4] + cmp r3, #0x0 + ldrne r2, [r1, #0x0] + strne r2, [r3, #0x0] + ldr r2, [r1, #0x0] + cmp r2, #0x0 + ldreq r0, [r1, #0x4] + ldrne r1, [r1, #0x4] + strne r1, [r2, #0x4] + bx lr + + arm_func_start DLAddFront +DLAddFront: ; 0x020CC988 + str r0, [r1, #0x4] + mov r2, #0x0 + str r2, [r1, #0x0] + cmp r0, #0x0 + strne r1, [r0, #0x0] + mov r0, r1 + bx lr + + arm_func_start OS_GetDTCMAddress +OS_GetDTCMAddress: ; 0x020CC9A4 + mrc p15, 0x0, r0, c9, c1, 0x0 + ldr r1, _020CC9B4 ; =0xFFFFF000 + and r0, r0, r1 + bx lr + .balign 4 +_020CC9B4: .word 0xFFFFF000 + + arm_func_start OS_EnableProtectionUnit +OS_EnableProtectionUnit: ; 0x020CC9B8 + mrc p15, 0x0, r0, c1, c0, 0x0 + orr r0, r0, #0x1 + mcr p15, 0x0, r0, c1, c0, 0x0 + bx lr + + arm_func_start OS_DisableProtectionUnit +OS_DisableProtectionUnit: ; 0x020CC9C8 + mrc p15, 0x0, r0, c1, c0, 0x0 + bic r0, r0, #0x1 + mcr p15, 0x0, r0, c1, c0, 0x0 + bx lr + + arm_func_start OS_SetDPermissionsForProtectionRegion +OS_SetDPermissionsForProtectionRegion: ; 0x020CC9D8 + mrc p15, 0x0, r2, c5, c0, 0x2 + bic r2, r2, r0 + orr r2, r2, r1 + mcr p15, 0x0, r2, c5, c0, 0x2 + bx lr + + arm_func_start OS_SetProtectionRegion1 +OS_SetProtectionRegion1: ; 0x020CC9EC + mcr p15, 0x0, r0, c6, c1, 0x0 + bx lr + + arm_func_start OS_SetProtectionRegion2 +OS_SetProtectionRegion2: ; 0x020CC9F4 + mcr p15, 0x0, r0, c6, c2, 0x0 + bx lr + + arm_func_start OSi_ExceptionHandler +OSi_ExceptionHandler: ; 0x020CC9FC + ldr ip, _020CCA68 ; =0x021D3724 + ldr r12, [r12, #0x0] + cmp r12, #0x0 + movne lr, pc + bxne r12 + ldr ip, _020CCA6C ; =0x02000000 + stmdb r12!, {r0-r3,sp-lr} + and r0, sp, #0x1 + mov sp, r12 + mrs r1, cpsr + and r1, r1, #0x1f + teq r1, #0x17 + bne _020CCA38 + bl OSi_GetAndDisplayContext + b _020CCA44 +_020CCA38: + teq r1, #0x1b + bne _020CCA44 + bl OSi_GetAndDisplayContext +_020CCA44: + ldr ip, _020CCA68 ; =0x021D3724 + ldr r12, [r12, #0x0] + cmp r12, #0x0 +_020CCA50: + beq _020CCA50 +_020CCA54: + mov r0, r0 + b _020CCA54 +_020CCA5C: + ldmia sp!, {r0-r3,ip,lr} + mov sp, ip + bx lr +_020CCA68: .word 0x021D3724 +_020CCA6C: .word 0x02000000 + + arm_func_start OSi_GetAndDisplayContext +OSi_GetAndDisplayContext: ; 0x020CCA70 + stmdb sp!, {r0,lr} + bl OSi_SetExContext + bl OSi_DisplayExContext + ldmia sp!, {r0,lr} + bx lr + + arm_func_start OSi_SetExContext +OSi_SetExContext: ; 0x020CCA84 + ldr r1, _020CCB10 ; =0x021D3728 + mrs r2, cpsr + str r2, [r1, #0x74] + str r0, [r1, #0x6c] + ldr r0, [r12, #0x0] + str r0, [r1, #0x4] + ldr r0, [r12, #0x4] + str r0, [r1, #0x8] + ldr r0, [r12, #0x8] + str r0, [r1, #0xc] + ldr r0, [r12, #0xc] + str r0, [r1, #0x10] + ldr r2, [r12, #0x10] + bic r2, r2, #0x1 + add r0, r1, #0x14 + stmia r0, {r4-r11} + str r12, [r1, #0x70] + ldr r0, [r2, #0x0] + str r0, [r1, #0x64] + ldr r3, [r2, #0x4] + str r3, [r1, #0x0] + ldr r0, [r2, #0x8] + str r0, [r1, #0x34] + ldr r0, [r2, #0xc] + str r0, [r1, #0x40] + mrs r0, cpsr + orr r3, r3, #0x80 + bic r3, r3, #0x20 + msr cpsr_fsxc, r3 + str sp, [r1, #0x38] + str lr, [r1, #0x3c] + mrs r2, spsr + str r2, [r1, #0x7c] + msr cpsr_fsxc, r0 + bx lr + .balign 4 +_020CCB10: .word 0x021D3728 + + arm_func_start OSi_DisplayExContext +OSi_DisplayExContext: ; 0x020CCB14 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020CCB70 ; =0x021D371C + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + mov r0, sp + ldr r1, _020CCB74 ; =0x0000009F + msr cpsr_fsxc, r1 + mov sp, r0 + bl OS_EnableProtectionUnit + ldr r1, _020CCB78 ; =0x021D3720 + ldr r0, _020CCB70 ; =0x021D371C + ldr r1, [r1, #0x0] + ldr r2, [r0, #0x0] + ldr r0, _020CCB7C ; =0x021D3728 + blx r2 + bl OS_DisableProtectionUnit + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CCB70: .word 0x021D371C +_020CCB74: .word 0x0000009F +_020CCB78: .word 0x021D3720 +_020CCB7C: .word 0x021D3728 + + arm_func_start OS_InitException +OS_InitException: ; 0x020CCB80 + ldr r0, _020CCBDC ; =0x027FFD9C + ldr r1, [r0, #0x0] + cmp r1, #0x2600000 + blo _020CCBA0 + cmp r1, #0x2800000 + ldrlo r0, _020CCBE0 ; =0x021D3724 + strcc r1, [r0, #0x0] + blo _020CCBAC +_020CCBA0: + ldr r0, _020CCBE0 ; =0x021D3724 + mov r1, #0x0 + str r1, [r0, #0x0] +_020CCBAC: + ldr r0, _020CCBE0 ; =0x021D3724 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldreq r2, _020CCBE4 ; =OSi_ExceptionHandler + ldreq r1, _020CCBDC ; =0x027FFD9C + ldreq r0, _020CCBE8 ; =0x027E3000 + streq r2, [r1, #0x0] + streq r2, [r0, #0xfdc] + ldr r0, _020CCBEC ; =0x021D371C + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + .balign 4 +_020CCBDC: .word 0x027FFD9C +_020CCBE0: .word 0x021D3724 +_020CCBE4: .word OSi_ExceptionHandler +_020CCBE8: .word 0x027E3000 +_020CCBEC: .word 0x021D371C + + arm_func_start OSi_SetTimerReserved +OSi_SetTimerReserved: ; 0x020CCBF0 + ldr r1, _020CCC08 ; =0x021D37A8 + mov r2, #0x1 + ldrh r3, [r1, #0x0] + orr r0, r3, r2, lsl r0 + strh r0, [r1, #0x0] + bx lr + .balign 4 +_020CCC08: .word 0x021D37A8 + + arm_func_start OS_GetTickLo +OS_GetTickLo: ; 0x020CCC0C + ldr r0, _020CCC18 ; =0x04000100 + ldrh r0, [r0, #0x0] + bx lr + .balign 4 +_020CCC18: .word 0x04000100 + + arm_func_start OS_GetTick +OS_GetTick: ; 0x020CCC1C + stmdb sp!, {lr} + sub sp, sp, #0xc + bl OS_DisableInterrupts + ldr r1, _020CCCBC ; =0x04000100 + ldr r3, _020CCCC0 ; =0x021D37B4 + ldrh r12, [r1, #0x0] + ldr r2, _020CCCC4 ; =0x0000FFFF + mvn r1, #0x0 + strh r12, [sp, #0x0] + ldr r12, [r3, #0x0] + ldr r3, [r3, #0x4] + and r1, r12, r1 + and r2, r3, r2 + str r1, [sp, #0x4] + ldr r1, _020CCCC8 ; =0x04000214 + str r2, [sp, #0x8] + ldr r1, [r1, #0x0] + ands r1, r1, #0x8 + beq _020CCC90 + ldrh r1, [sp, #0x0] + ands r1, r1, #0x8000 + bne _020CCC90 + ldr r3, [sp, #0x4] + mov r1, #0x1 + ldr r2, [sp, #0x8] + adds r3, r3, r1 + adc r1, r2, #0x0 + str r3, [sp, #0x4] + str r1, [sp, #0x8] +_020CCC90: + bl OS_RestoreInterrupts + ldr r2, [sp, #0x4] + ldr r1, [sp, #0x8] + ldrh r0, [sp, #0x0] + mov r1, r1, lsl #0x10 + orr r1, r1, r2, lsr #0x10 + orr r1, r1, r0, asr #0x1f + orr r0, r0, r2, lsl #0x10 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_020CCCBC: .word 0x04000100 +_020CCCC0: .word 0x021D37B4 +_020CCCC4: .word 0x0000FFFF +_020CCCC8: .word 0x04000214 + + arm_func_start OSi_CountUpTick +OSi_CountUpTick: ; 0x020CCCCC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020CCD40 ; =0x021D37B4 + ldr r1, _020CCD44 ; =0x021D37B0 + ldr r12, [r2, #0x0] + mov r0, #0x1 + ldr r3, [r2, #0x4] + adds r12, r12, r0 + ldr r0, [r1, #0x0] + adc r3, r3, #0x0 + str r12, [r2, #0x0] + str r3, [r2, #0x4] + cmp r0, #0x0 + mov r3, #0x0 + beq _020CCD24 + ldr r2, _020CCD48 ; =0x04000102 + ldr r0, _020CCD4C ; =0x04000100 + strh r3, [r2, #0x0] + strh r3, [r0, #0x0] + mov r0, #0xc1 + strh r0, [r2, #0x0] + str r3, [r1, #0x0] +_020CCD24: + mov r0, #0x0 + ldr r1, _020CCD50 ; =OSi_CountUpTick + mov r2, r0 + bl OSi_EnterTimerCallback + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CCD40: .word 0x021D37B4 +_020CCD44: .word 0x021D37B0 +_020CCD48: .word 0x04000102 +_020CCD4C: .word 0x04000100 +_020CCD50: .word OSi_CountUpTick + + arm_func_start OS_IsTickAvailable +OS_IsTickAvailable: ; 0x020CCD54 + ldr r0, _020CCD60 ; =0x021D37AC + ldrh r0, [r0, #0x0] + bx lr + .balign 4 +_020CCD60: .word 0x021D37AC + + arm_func_start OS_InitTick +OS_InitTick: ; 0x020CCD64 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020CCDE8 ; =0x021D37AC + ldrh r0, [r1, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + mov r2, #0x1 + mov r0, #0x0 + strh r2, [r1, #0x0] + bl OSi_SetTimerReserved + ldr r0, _020CCDEC ; =0x021D37B4 + mov r2, #0x0 + str r2, [r0, #0x0] + ldr r3, _020CCDF0 ; =0x04000102 + str r2, [r0, #0x4] + ldr r0, _020CCDF4 ; =0x04000100 + strh r2, [r3, #0x0] + ldr r1, _020CCDF8 ; =OSi_CountUpTick + strh r2, [r0, #0x0] + mov r2, #0xc1 + mov r0, #0x8 + strh r2, [r3, #0x0] + bl OS_SetIrqFunction + mov r0, #0x8 + bl OS_EnableIrqMask + ldr r0, _020CCDFC ; =0x021D37B0 + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CCDE8: .word 0x021D37AC +_020CCDEC: .word 0x021D37B4 +_020CCDF0: .word 0x04000102 +_020CCDF4: .word 0x04000100 +_020CCDF8: .word OSi_CountUpTick +_020CCDFC: .word 0x021D37B0 + + arm_func_start OSi_AlarmHandler +OSi_AlarmHandler: ; 0x020CCE00 + stmdb sp!, {r0,lr} + bl OSi_ArrangeTimer + ldmia sp!, {r0,lr} + bx lr + + arm_func_start OSi_ArrangeTimer +OSi_ArrangeTimer: ; 0x020CCE10 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020CCF1C ; =0x04000106 + mov r2, #0x0 + mov r0, #0x10 + strh r2, [r1, #0x0] + bl OS_DisableIrqMask + ldr r0, _020CCF20 ; =0x027E0000 + add r0, r0, #0x3000 + ldr r1, [r0, #0xff8] + orr r1, r1, #0x10 + str r1, [r0, #0xff8] + bl OS_GetTick + ldr r2, _020CCF24 ; =0x021D37C0 + ldr r4, [r2, #0x0] + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r3, [r4, #0x10] + ldr r12, [r4, #0xc] + cmp r1, r3 + cmpeq r0, r12 + bhs _020CCE84 + mov r0, r4 + bl OSi_SetTimer + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020CCE84: + ldr r1, [r4, #0x18] + cmp r1, #0x0 + moveq r0, #0x0 + streq r0, [r2, #0x4] + str r1, [r2, #0x0] + movne r0, #0x0 + strne r0, [r1, #0x14] + ldr r2, [r4, #0x1c] + ldr r1, [r4, #0x20] + mov r0, #0x0 + cmp r1, r0 + ldr r5, [r4, #0x0] + cmpeq r2, r0 + streq r0, [r4, #0x0] + cmp r5, #0x0 + beq _020CCECC + ldr r0, [r4, #0x4] + blx r5 +_020CCECC: + ldr r2, [r4, #0x1c] + ldr r0, [r4, #0x20] + mov r1, #0x0 + cmp r0, r1 + cmpeq r2, r1 + beq _020CCEF4 + mov r0, r4 + mov r2, r1 + str r5, [r4, #0x0] + bl OSi_InsertAlarm +_020CCEF4: + ldr r0, _020CCF24 ; =0x021D37C0 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + bl OSi_SetTimer + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020CCF1C: .word 0x04000106 +_020CCF20: .word 0x027E0000 +_020CCF24: .word 0x021D37C0 + + arm_func_start OS_CancelAlarm +OS_CancelAlarm: ; 0x020CCF28 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, [r5, #0x0] + mov r4, r0 + cmp r1, #0x0 + bne _020CCF58 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020CCF58: + ldr r0, [r5, #0x18] + cmp r0, #0x0 + ldreq r2, [r5, #0x14] + ldreq r1, _020CCFBC ; =0x021D37C0 + streq r2, [r1, #0x4] + ldrne r1, [r5, #0x14] + strne r1, [r0, #0x14] + ldr r1, [r5, #0x14] + cmp r1, #0x0 + strne r0, [r1, #0x18] + bne _020CCF98 + ldr r1, _020CCFBC ; =0x021D37C0 + cmp r0, #0x0 + str r0, [r1, #0x0] + beq _020CCF98 + bl OSi_SetTimer +_020CCF98: + mov r1, #0x0 + str r1, [r5, #0x0] + str r1, [r5, #0x1c] + mov r0, r4 + str r1, [r5, #0x20] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020CCFBC: .word 0x021D37C0 + + arm_func_start OS_SetAlarm +OS_SetAlarm: ; 0x020CCFC0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + movs r6, r0 + mov r5, r1 + mov r4, r2 + mov r7, r3 + beq _020CCFE8 + ldr r0, [r6, #0x0] + cmp r0, #0x0 + beq _020CCFEC +_020CCFE8: + bl OS_Terminate +_020CCFEC: + bl OS_DisableInterrupts + mov r1, #0x0 + str r1, [r6, #0x1c] + str r1, [r6, #0x20] + str r7, [r6, #0x0] + ldr r1, [sp, #0x18] + mov r7, r0 + str r1, [r6, #0x4] + bl OS_GetTick + adds r3, r5, r0 + adc r2, r4, r1 + mov r0, r6 + mov r1, r3 + bl OSi_InsertAlarm + mov r0, r7 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start OSi_InsertAlarm +OSi_InsertAlarm: ; 0x020CD038 + stmdb sp!, {r4-r8,lr} + mov r8, r0 + ldr r4, [r8, #0x1c] + ldr r3, [r8, #0x20] + mov r0, #0x0 + cmp r3, r0 + mov r7, r1 + mov r6, r2 + cmpeq r4, r0 + beq _020CD0B4 + bl OS_GetTick + ldr r6, [r8, #0x28] + ldr r7, [r8, #0x24] + cmp r6, r1 + cmpeq r7, r0 + bhs _020CD0B4 + ldr r5, [r8, #0x1c] + ldr r4, [r8, #0x20] + subs r0, r0, r7 + mov r2, r5 + mov r3, r4 + sbc r1, r1, r6 + bl _ll_udiv + mov r2, #0x1 + adds r2, r0, r2 + adc r0, r1, #0x0 + umull r3, r1, r5, r2 + mla r1, r5, r0, r1 + mla r1, r4, r2, r1 + adds r7, r7, r3 + adc r6, r6, r1 +_020CD0B4: + str r7, [r8, #0xc] + ldr r0, _020CD174 ; =0x021D37C0 + str r6, [r8, #0x10] + ldr r4, [r0, #0x0] + cmp r4, #0x0 + beq _020CD134 + mov r1, #0x0 +_020CD0D0: + ldr r2, [r4, #0xc] + ldr r0, [r4, #0x10] + subs r3, r7, r2 + sbc r2, r6, r0 + subs r0, r3, r1 + sbcs r0, r2, r1 + bge _020CD128 + ldr r0, [r4, #0x14] + str r0, [r8, #0x14] + str r8, [r4, #0x14] + str r4, [r8, #0x18] + ldr r0, [r8, #0x14] + cmp r0, #0x0 + strne r8, [r0, #0x18] + ldmneia sp!, {r4-r8,lr} + bxne lr + ldr r1, _020CD174 ; =0x021D37C0 + mov r0, r8 + str r8, [r1, #0x0] + bl OSi_SetTimer + ldmia sp!, {r4-r8,lr} + bx lr +_020CD128: + ldr r4, [r4, #0x18] + cmp r4, #0x0 + bne _020CD0D0 +_020CD134: + ldr r1, _020CD174 ; =0x021D37C0 + mov r0, #0x0 + str r0, [r8, #0x18] + ldr r0, [r1, #0x4] + str r8, [r1, #0x4] + str r0, [r8, #0x14] + cmp r0, #0x0 + strne r8, [r0, #0x18] + ldmneia sp!, {r4-r8,lr} + bxne lr + mov r0, r8 + str r8, [r1, #0x4] + str r8, [r1, #0x0] + bl OSi_SetTimer + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020CD174: .word 0x021D37C0 + + arm_func_start OS_CreateAlarm +OS_CreateAlarm: ; 0x020CD178 + mov r1, #0x0 + str r1, [r0, #0x0] + str r1, [r0, #0x8] + bx lr + + arm_func_start OS_IsAlarmAvailable +OS_IsAlarmAvailable: ; 0x020CD188 + ldr r0, _020CD194 ; =0x021D37BC + ldrh r0, [r0, #0x0] + bx lr + .balign 4 +_020CD194: .word 0x021D37BC + + arm_func_start OS_InitAlarm +OS_InitAlarm: ; 0x020CD198 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020CD1E8 ; =0x021D37BC + ldrh r0, [r1, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + mov r0, #0x1 + strh r0, [r1, #0x0] + bl OSi_SetTimerReserved + ldr r1, _020CD1EC ; =0x021D37C0 + mov r2, #0x0 + mov r0, #0x10 + str r2, [r1, #0x0] + str r2, [r1, #0x4] + bl OS_DisableIrqMask + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CD1E8: .word 0x021D37BC +_020CD1EC: .word 0x021D37C0 + + arm_func_start OSi_SetTimer +OSi_SetTimer: ; 0x020CD1F0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + bl OS_GetTick + ldr r3, _020CD27C ; =0x04000106 + mov r2, #0x0 + strh r2, [r3, #0x0] + ldr r12, [r4, #0xc] + ldr r3, [r4, #0x10] + subs r5, r12, r0 + sbc r4, r3, r1 + ldr r1, _020CD280 ; =OSi_AlarmHandler + mov r0, #0x1 + bl OSi_EnterTimerCallback + mov r2, #0x0 + subs r0, r5, r2 + sbcs r0, r4, r2 + ldrlt r2, _020CD284 ; =0x0000FFFE + blt _020CD254 + mov r0, #0x10000 + subs r0, r5, r0 + sbcs r0, r4, r2 + mvnlt r0, r5 + movlt r0, r0, lsl #0x10 + movlt r2, r0, lsr #0x10 +_020CD254: + ldr r0, _020CD288 ; =0x04000104 + ldr r1, _020CD27C ; =0x04000106 + strh r2, [r0, #0x0] + mov r2, #0xc1 + mov r0, #0x10 + strh r2, [r1, #0x0] + bl OS_EnableIrqMask + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020CD27C: .word 0x04000106 +_020CD280: .word OSi_AlarmHandler +_020CD284: .word 0x0000FFFE +_020CD288: .word 0x04000104 + + arm_func_start OS_InitVAlarm +OS_InitVAlarm: ; 0x020CD28C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020CD2EC ; =0x021D37C8 + ldrh r0, [r2, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r1, _020CD2F0 ; =0x021D37D4 + mov r3, #0x0 + mov r12, #0x1 + mov r0, #0x4 + strh r12, [r2, #0x0] + str r3, [r1, #0x0] + str r3, [r1, #0x4] + bl OS_DisableIrqMask + ldr r1, _020CD2F4 ; =0x021D37D0 + mov r2, #0x0 + ldr r0, _020CD2F8 ; =0x021D37CC + str r2, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CD2EC: .word 0x021D37C8 +_020CD2F0: .word 0x021D37D4 +_020CD2F4: .word 0x021D37D0 +_020CD2F8: .word 0x021D37CC + + arm_func_start OS_EnableInterrupts +OS_EnableInterrupts: ; 0x020CD2FC + mrs r0, cpsr + bic r1, r0, #0x80 + msr cpsr_c, r1 + and r0, r0, #0x80 + bx lr + + arm_func_start OS_DisableInterrupts +OS_DisableInterrupts: + mrs r0, cpsr + orr r1, r0, #0x80 + msr cpsr_c, r1 + and r0, r0, #0x80 + bx lr + + arm_func_start OS_RestoreInterrupts +OS_RestoreInterrupts: + mrs r1, cpsr + bic r2, r1, #0x80 + orr r2, r2, r0 + msr cpsr_c, r2 + and r0, r1, #0x80 + bx lr + + arm_func_start OS_DisableInterrupts_IrqAndFiq +OS_DisableInterrupts_IrqAndFiq: ; 0x020CD33C + mrs r0, cpsr + orr r1, r0, #0xc0 + msr cpsr_c, r1 + and r0, r0, #0xc0 + bx lr + + arm_func_start OS_RestoreInterrupts_IrqAndFiq +OS_RestoreInterrupts_IrqAndFiq: ; 0x020CD350 + mrs r1, cpsr + bic r2, r1, #0xc0 + orr r2, r2, r0 + msr cpsr_c, r2 + and r0, r1, #0xc0 + bx lr + + arm_func_start OS_GetCpsrIrq +OS_GetCpsrIrq: ; 0x020CD368 + mrs r0, cpsr + and r0, r0, #0x80 + bx lr + + arm_func_start OS_GetProcMode +OS_GetProcMode: ; 0x020CD374 + mrs r0, cpsr + and r0, r0, #0x1f + bx lr + + arm_func_start OS_SpinWait +OS_SpinWait: + subs r0, r0, #0x4 + bhs OS_SpinWait + bx lr + + arm_func_start OS_WaitVBlankIntr +OS_WaitVBlankIntr: ; 0x020CD38C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, #0x1 + blx FUN_020005F2 + mov r0, #0x1 + mov r1, r0 + bl OS_WaitIrq + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start OS_ResetSystem +OS_ResetSystem: ; 0x020CD3B4 + stmdb sp!, {r4,lr} + ldr r1, _020CD42C ; =0x027FFC40 + mov r4, r0 + ldrh r0, [r1, #0x0] + cmp r0, #0x2 + bne _020CD3D0 + bl OS_Terminate +_020CD3D0: + bl OS_GetLockID + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl CARD_LockRom +_020CD3E0: + mov r0, #0x0 + bl MI_StopDma + mov r0, #0x1 + bl MI_StopDma + mov r0, #0x2 + bl MI_StopDma + mov r0, #0x3 + bl MI_StopDma + mov r0, #0x40000 + bl OS_SetIrqMask + mvn r0, #0x0 + bl OS_ResetRequestIrqMask + ldr r1, _020CD430 + mov r0, #0x10 + str r4, [r1] + bl OSi_SendToPxi + bl FUN_01FF84A4 + ldmia sp!, {r4, lr} + bx lr +_020CD42C: .word 0x027FFC40 +_020CD430: .word 0x027FFC20 + + arm_func_start OSi_SendToPxi +OSi_SendToPxi: ; 0x020CD434 + stmdb sp!, {r4-r6,lr} + mov r6, r0, lsl #0x8 + mov r5, #0xc + mov r4, #0x0 +_020CD444: + mov r0, r5 + mov r1, r6 + mov r2, r4 + bl PXI_SendWordByFifo +_020CD454: + cmp r0, #0x0 + bne _020CD444 + ldmia sp!, {r4-r6, lr} + bx lr + + arm_func_start OSi_CommonCallback +OSi_CommonCallback: ; 0x020CD464 + stmdb sp!, {lr} + sub sp, sp, #0x4 + and r0, r1, #0x7f00 + mov r0, r0, lsl #0x8 + mov r0, r0, lsr #0x10 + cmp r0, #0x10 + ldreq r0, _020CD4A4 ; =0x021D37E0 + moveq r1, #0x1 + streqh r1, [r0, #0x0] + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CD4A4: .word 0x021D37E0 + + arm_func_start OS_InitReset +OS_InitReset: ; 0x020CD4A8 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020CD508 ; =0x021D37DC + ldrh r1, [r0, #0x0] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + mov r1, #0x1 + strh r1, [r0, #0x0] + bl PXI_Init + mov r5, #0xc + mov r4, #0x1 +_020CD4DC: + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady +_020CD4E8: + cmp r0, #0x0 + beq _020CD4DC + ldr r1, _020CD50C + mov r0, #0xC + bl PXI_SetFifoRecvCallback + add sp, sp, #0x4 + ldmia sp!, {r4-r5, lr} + bx lr +_020CD508: .word 0x021D37DC +_020CD50C: .word 0x020CD464 + + arm_func_start OS_GetOwnerRtcOffset +OS_GetOwnerRtcOffset: ; 0x020CD510 + ldr r1, _020CD520 ; =0x027FFC80 + ldr r0, [r1, #0x68] + ldr r1, [r1, #0x6c] + bx lr + .balign 4 +_020CD520: .word 0x027FFC80 + + arm_func_start OS_GetOwnerInfo +OS_GetOwnerInfo: ; 0x020CD524 + stmdb sp!, {r4,lr} + ldr ip, _020CD59C ; =0x027FFC80 + mov r4, r0 + ldrh r2, [r12, #0x64] + add r0, r12, #0x6 + add r1, r4, #0x4 + mov r2, r2, lsl #0x1d + mov r2, r2, lsr #0x1d + strb r2, [r4, #0x0] + ldrb r3, [r12, #0x2] + mov r2, #0x14 + mov r3, r3, lsl #0x1c + mov r3, r3, lsr #0x1c + strb r3, [r4, #0x1] + ldrb r3, [r12, #0x3] + strb r3, [r4, #0x2] + ldrb r3, [r12, #0x4] + strb r3, [r4, #0x3] + ldrb r3, [r12, #0x1a] + strh r3, [r4, #0x18] + ldrb r3, [r12, #0x50] + strh r3, [r4, #0x4e] + bl MIi_CpuCopy16 + ldr r0, _020CD59C ; =0x027FFC80 + add r1, r4, #0x1a + add r0, r0, #0x1c + mov r2, #0x34 + bl MIi_CpuCopy16 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CD59C: .word 0x027FFC80 + + arm_func_start OS_GetMacAddress +OS_GetMacAddress: ; 0x020CD5A0 + ldr ip, _020CD5B4 ; =MI_CpuCopy8 + mov r1, r0 + ldr r0, _020CD5B8 ; =0x027FFCF4 + mov r2, #0x6 + bx r12 + .balign 4 +_020CD5B4: .word MI_CpuCopy8 +_020CD5B8: .word 0x027FFCF4 + + arm_func_start OsCountZeroBits +OsCountZeroBits: ; 0x020CD5BC + clz r0, r0 + bx lr + + arm_func_start OSi_UnlockVram +OSi_UnlockVram: ; 0x020CD5C4 + stmdb sp!, {r4-r10,lr} + mov r5, r0 + mov r10, r1 + bl OS_DisableInterrupts + ldr r4, _020CD640 ; =0x021D37E4 + ldr r1, _020CD644 ; =0x000001FF + ldr r2, [r4, #0x0] + mov r8, r0 + and r0, r5, r2 + and r9, r0, r1 + ldr r6, _020CD648 ; =0x021D37E8 + mov r7, #0x1 + mov r5, #0x0 +_020CD5F8: + mov r0, r9 + bl OsCountZeroBits + rsbs r2, r0, #0x1f + bmi _020CD630 + mov r1, r2, lsl #0x1 + ldrh r0, [r6, r1] + mvn r2, r7, lsl r2 + cmp r10, r0 + ldreq r0, [r4, #0x0] + and r9, r9, r2 + andeq r0, r0, r2 + streqh r5, [r6, r1] + streq r0, [r4, #0x0] + b _020CD5F8 +_020CD630: + mov r0, r8 + bl OS_RestoreInterrupts + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020CD640: .word 0x021D37E4 +_020CD644: .word 0x000001FF +_020CD648: .word 0x021D37E8 + + arm_func_start OSi_TryLockVram +OSi_TryLockVram: ; 0x020CD64C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r6, r0 + mov r8, r1 + bl OS_DisableInterrupts + ldr r1, _020CD714 ; =0x021D37E4 + mov r7, r0 + ldr r0, [r1, #0x0] + and r5, r6, r0 + ldr sb, _020CD718 ; =0x021D37E8 + mov r4, #0x1 +_020CD678: + mov r0, r5 + bl OsCountZeroBits + rsbs r1, r0, #0x1f + bmi _020CD6B8 + mov r0, r1, lsl #0x1 + ldrh r0, [r9, r0] + mvn r1, r4, lsl r1 + cmp r8, r0 + and r5, r5, r1 + beq _020CD678 + mov r0, r7 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r9,lr} + bx lr +_020CD6B8: + ldr r0, _020CD71C ; =0x000001FF + and r6, r6, r0 + ldr r4, _020CD718 ; =0x021D37E8 + ldr sb, _020CD714 ; =0x021D37E4 + mov r5, #0x1 +_020CD6CC: + mov r0, r6 + bl OsCountZeroBits + rsbs r1, r0, #0x1f + bmi _020CD6FC + ldr r0, [r9, #0x0] + mvn r2, r5, lsl r1 + orr r0, r0, r5, lsl r1 + mov r1, r1, lsl #0x1 + strh r8, [r4, r1] + str r0, [r9, #0x0] + and r6, r6, r2 + b _020CD6CC +_020CD6FC: + mov r0, r7 + bl OS_RestoreInterrupts + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020CD714: .word 0x021D37E4 +_020CD718: .word 0x021D37E8 +_020CD71C: .word 0x000001FF + + arm_func_start OSi_InitVramExclusive +OSi_InitVramExclusive: ; 0x020CD720 + ldr r0, _020CD74C ; =0x021D37E4 + mov r3, #0x0 + str r3, [r0, #0x0] + ldr r0, _020CD750 ; =0x021D37E8 + mov r2, r3 +_020CD734: + mov r1, r3, lsl #0x1 + add r3, r3, #0x1 + strh r2, [r0, r1] + cmp r3, #0x9 + blt _020CD734 + bx lr + .balign 4 +_020CD74C: .word 0x021D37E4 +_020CD750: .word 0x021D37E8 + + arm_func_start OS_GetLowEntropyData +OS_GetLowEntropyData: ; 0x020CD754 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r1, _020CD82C ; =0x04000006 + ldr r2, _020CD830 ; =0x027FFC00 + ldrh r7, [r1, #0x0] + add r4, r2, #0x80 + mov r6, r0 + add r5, r4, #0x74 + bl OS_GetTickLo + orr r0, r0, r7, lsl #0x10 + str r0, [r6, #0x0] + ldr r1, _020CD834 ; =0x021D37B4 + ldr r0, _020CD830 ; =0x027FFC00 + ldr r3, [r1, #0x0] + ldrh r5, [r5, #0x4] + ldr r2, [r1, #0x4] + ldr r2, _020CD838 ; =0x04000600 + eor r3, r3, r5, lsl #0x10 + str r3, [r6, #0x4] + ldr r3, [r1, #0x0] + ldr r3, [r1, #0x4] + ldr r1, [r4, #0x74] + ldr r4, [r0, #0x3c] + eor r1, r3, r1 + eor r1, r4, r1 + str r1, [r6, #0x8] + ldr r3, [r6, #0x8] + ldr r2, [r2, #0x0] + add r1, r0, #0x300 + eor r2, r3, r2 + str r2, [r6, #0x8] + ldr r2, [r0, #0x1e8] + ldr r3, _020CD83C ; =0x04000130 + str r2, [r6, #0xc] + ldr r4, [r0, #0x1ec] + ldr r2, _020CD840 ; =0x027FFFA8 + str r4, [r6, #0x10] + ldrh r4, [r1, #0x94] + ldr r0, [r0, #0x390] + eor r0, r0, r4, lsl #0x10 + str r0, [r6, #0x14] + ldrh r4, [r1, #0xaa] + ldrh r0, [r1, #0xac] + orr r0, r0, r4, lsl #0x10 + str r0, [r6, #0x18] + ldrh r3, [r3, #0x0] + ldrh r0, [r2, #0x0] + ldrh r1, [r1, #0x98] + orr r0, r3, r0 + orr r0, r0, r1, lsl #0x10 + str r0, [r6, #0x1c] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020CD82C: .word 0x04000006 +_020CD830: .word 0x027FFC00 +_020CD834: .word 0x021D37B4 +_020CD838: .word 0x04000600 +_020CD83C: .word 0x04000130 +_020CD840: .word 0x027FFFA8 + + arm_func_start OS_Halt +OS_Halt: ; 0x020CD844 + mov r0, #0x0 + mcr p15, 0x0, r0, c7, c0, 0x4 + bx lr + + arm_func_start OS_Terminate +OS_Terminate: ; 0x020CD850 + stmdb sp!, {lr} + sub sp, sp, #0x4 +_020CD858: + bl OS_DisableInterrupts + bl OS_Halt + b _020CD858 + + arm_func_start MI_SetWramBank +MI_SetWramBank: + ldr r1, _020CD870 ; =0x04000247 + strb r0, [r1, #0x0] + bx lr + .balign 4 +_020CD870: .word 0x04000247 + + arm_func_start MIi_CheckDma0SourceAddress +MIi_CheckDma0SourceAddress: + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + cmp r3, #0x0 + and r0, r1, #0xff000000 + beq _020CD8A4 + cmp r3, #0x800000 + subeq r1, r1, r2 + b _020CD8A8 +_020CD8A4: + add r1, r1, r2 +_020CD8A8: + cmp r0, #0x4000000 + beq _020CD8D4 + cmp r0, #0x8000000 + bhs _020CD8D4 + and r0, r1, #0xff000000 + cmp r0, #0x4000000 + beq _020CD8D4 + cmp r0, #0x8000000 + addcc sp, sp, #0x4 + ldmccia sp!, {lr} + bxcc lr +_020CD8D4: + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start MIi_CheckAnotherAutoDMA +MIi_CheckAnotherAutoDMA: ; 0x020CD8E4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r4, _020CD994 ; =0x040000B8 + mov r7, r0 + mov r6, r1 + mov r5, #0x0 +_020CD8FC: + cmp r5, r7 + beq _020CD978 + ldr r1, [r4, #0x0] + ands r0, r1, #0x80000000 + beq _020CD978 + and r0, r1, #0x38000000 + cmp r0, r6 + beq _020CD978 + cmp r0, #0x8000000 + bne _020CD92C + cmp r6, #0x10000000 + beq _020CD978 +_020CD92C: + cmp r0, #0x10000000 + bne _020CD93C + cmp r6, #0x8000000 + beq _020CD978 +_020CD93C: + cmp r0, #0x18000000 + beq _020CD974 + cmp r0, #0x20000000 + beq _020CD974 + cmp r0, #0x28000000 + beq _020CD974 + cmp r0, #0x30000000 + beq _020CD974 + cmp r0, #0x38000000 + beq _020CD974 + cmp r0, #0x8000000 + beq _020CD974 + cmp r0, #0x10000000 + bne _020CD978 +_020CD974: + bl OS_Terminate +_020CD978: + add r5, r5, #0x1 + cmp r5, #0x3 + add r4, r4, #0xc + blt _020CD8FC + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020CD994: .word 0x040000B8 + + arm_func_start MI_StopDma +MI_StopDma: ; 0x020CD998 + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + mov r1, #0x6 + mul r1, r4, r1 + add r1, r1, #0x5 + mov r1, r1, lsl #0x1 + add r1, r1, #0x4000000 + ldrh r2, [r1, #0xb0] + cmp r4, #0x0 + bic r2, r2, #0x3a00 + strh r2, [r1, #0xb0] + ldrh r2, [r1, #0xb0] + bic r2, r2, #0x8000 + strh r2, [r1, #0xb0] + ldrh r2, [r1, #0xb0] + ldrh r1, [r1, #0xb0] + bne _020CDA08 + mov r1, #0xc + mul r12, r4, r1 + ldr r1, _020CDA14 ; =0x040000B0 + add r2, r12, #0x4000000 + mov r3, #0x0 + str r3, [r2, #0xb0] + add r2, r12, r1 + ldr r1, _020CDA18 ; =0x81400001 + str r3, [r2, #0x4] + str r1, [r2, #0x8] +_020CDA08: + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CDA14: .word 0x040000B0 +_020CDA18: .word 0x81400001 + + arm_func_start MI_WaitDma +MI_WaitDma: + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + mov r1, #0x3 + mul r2, r4, r1 + ldr r1, _020CDA84 ; =0x040000B0 + add r2, r2, #0x2 + add r2, r1, r2, lsl #0x2 +_020CDA3C: + ldr r1, [r2, #0x0] + ands r1, r1, #0x80000000 + bne _020CDA3C + cmp r4, #0x0 + bne _020CDA78 + mov r1, #0xc + mul r12, r4, r1 + ldr r1, _020CDA84 ; =0x040000B0 + add r2, r12, #0x4000000 + mov r3, #0x0 + str r3, [r2, #0xb0] + add r2, r12, r1 + ldr r1, _020CDA88 ; =0x81400001 + str r3, [r2, #0x4] + str r1, [r2, #0x8] +_020CDA78: + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CDA84: .word 0x040000B0 +_020CDA88: .word 0x81400001 + + arm_func_start MI_DmaCopy32Async +MI_DmaCopy32Async: ; 0x020CDA8C + stmdb sp!, {r4-r8,lr} + mov r5, r3 + mov r6, r2 + mov r2, r5 + mov r3, #0x0 + mov r8, r0 + mov r7, r1 + ldr r4, [sp, #0x18] + bl MIi_CheckDma0SourceAddress +_020CDAB0: + cmp r5, #0x0 + bne _020CDAD4 + cmp r4, #0x0 + ldmeqia sp!, {r4-r8, lr} + bxeq lr + ldr r0, [sp, #0x1C] + blx r4 + ldmia sp!, {r4-r8, lr} + bx lr +_020CDAD4: + mov r0, r8 + bl MI_WaitDma + cmp r4, #0x0 + beq _020CDB14 + ldr r2, [sp, #0x1C] + mov r0, r8 + mov r1, r4 + bl OSi_EnterDmaCallback + mov r3, r5, lsr #0x2 + mov r0, r8 + mov r1, r7 + mov r2, r6 + orr r3, r3, #0xc4000000 + bl FUN_01FF85F0 + ldmia sp!, {r4-r8, lr} + bx lr +_020CDB14: + mov r3, r5, lsr #0x2 + mov r0, r8 + mov r1, r7 + mov r2, r6 + orr r3, r3, #0x84000000 + bl FUN_01FF85F0 + ldmia sp!, {r4-r8, lr} + bx lr + + arm_func_start MI_DmaFill32Async +MI_DmaFill32Async: ; 0x020CDB34 + stmdb sp!, {r4-r8,lr} + movs r4, r3 + mov r7, r0 + mov r6, r1 + mov r5, r2 + ldr r8, [sp, #0x18] + bne _020CDB6C + cmp r8, #0x0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r0, [sp, #0x1c] + blx r8 + ldmia sp!, {r4-r8,lr} + bx lr +_020CDB6C: + bl MI_WaitDma +_020CDB70: + cmp r8, #0x0 + beq _020CDBC8 + ldr r2, [sp, #0x1C] + mov r0, r7 + mov r1, r8 + bl OSi_EnterDmaCallback + bl OS_DisableInterrupts + mov r3, r4, lsr #2 + ldr r1, _20CDC08 + mov r2, r7, lsl #2 + add r2, r2, #0x4000000 + str r5, [r2, #0xE0] + mov r4, r0 + add r1, r1, r7, lsl #0x2 + mov r0, r7 + mov r2, r6 + orr r3, r3, #0xc5000000 + bl FUN_01FF8544 + mov r0, r4 + bl OS_RestoreInterrupts + ldmia sp!, {r4-r8,lr} + bx lr +_020CDBC8: + bl OS_DisableInterrupts + ldr r1, _20CDC08 + mov r2, r7, lsl #0x2 + mov r3, r4, lsr #0x2 + mov r4, r0 + add ip, r2, #0x4000000 + mov r0, r7 + mov r2, r6 + add r1, r1, r7, lsl #0x2 + orr r3, r3, #0x85000000 + str r5, [ip, #0xE0] + bl FUN_01FF8544 + mov r0, r4 + bl OS_RestoreInterrupts + ldmia sp!, {r4-r8,lr} + bx lr +_20CDC08: .word 0x040000E0 + + arm_func_start MI_DmaCopy16 +MI_DmaCopy16: ; 0x020CDC0C + stmdb sp!, {r4-r8,lr} + movs r5, r3 + mov r8, r0 + mov r7, r1 + mov r6, r2 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + mov r2, r5 + mov r3, #0x0 + bl MIi_CheckDma0SourceAddress + mov r0, #0x3 + mul r1, r8, r0 + ldr r0, _020CDC80 ; =0x040000B0 + add r1, r1, #0x2 + add r4, r0, r1, lsl #0x2 +_020CDC48: + ldr r0, [r4, #0x0] + ands r0, r0, #0x80000000 + bne _020CDC48 + mov r3, r5, lsr #0x1 + mov r0, r8 + mov r1, r7 + mov r2, r6 + orr r3, r3, #0x80000000 + bl FUN_01FF857C +_020CDC6C: + ldr r0, [r4] + ands r0, r0, #0x80000000 + bne _020CDC6C + ldmia sp!, {r4-r8,lr} + bx lr +_020CDC80: .word 0x040000B0 + + arm_func_start MI_DmaCopy32 +MI_DmaCopy32: ; 0x020CDC84 + stmdb sp!, {r4-r8,lr} + mov r5, r3 + mov r6, r2 + mov r2, r5 + mov r3, #0x0 + mov r8, r0 + mov r7, r1 + bl MIi_CheckDma0SourceAddress +_020CDCA4: + cmp r5, #0x0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + mov r0, #0x3 + mul r1, r8, r0 + ldr r0, _020CDCFC + add r1, r1, #0x2 + add r4, r0, r1, lsl #0x2 +_020CDCC4: + ldr r0, [r4] + ands r0, r0, #0x80000000 + bne _020CDCC4 + mov r3, r5, lsr #0x2 + mov r0, r8 + mov r1, r7 + mov r2, r6 + orr r3, r3, #0x84000000 + bl FUN_01FF857C +_020CDCE8: + ldr r0, [r4] + ands r0, r0, #0x80000000 + bne _020CDCE8 + ldmia sp!, {r4-r8,lr} + bx lr +_020CDCFC: .word 0x040000B0 + + arm_func_start MI_DmaFill32 +MI_DmaFill32: ; 0x020CDD00 + stmdb sp!, {r4-r8,lr} + movs r4, r3 + mov r8, r0 + mov r7, r1 + mov r6, r2 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + mov r0, #0x3 + mul r1, r8, r0 + ldr r0, _020CDD88 ; =0x040000B0 + add r1, r1, #0x2 + add r5, r0, r1, lsl #0x2 +_020CDD30: + ldr r0, [r5, #0x0] + ands r0, r0, #0x80000000 + bne _020CDD30 + bl OS_DisableInterrupts + ldr r1, _020CDD8C ; =0x040000E0 + mov r2, r8, lsl #0x2 + mov r3, r4, lsr #0x2 + mov r4, r0 + add r12, r2, #0x4000000 + mov r0, r8 + mov r2, r7 + add r1, r1, r8, lsl #0x2 + orr r3, r3, #0x85000000 + str r6, [r12, #0xe0] + bl FUN_01FF84E4 + mov r0, r4 + bl OS_RestoreInterrupts +_020CDD74: + ldr r0, [r5] + ands r0, r0, #0x80000000 + bne _020CDD74 + ldmia sp!, {r4-r8,lr} + bx lr +_020CDD88: .word 0x040000B0 +_020CDD8C: .word 0x040000E0 + + arm_func_start MI_HBlankDmaCopy16 +MI_HBlankDmaCopy16: ; 0x020CDD90 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r1 + mov r7, r0 + mov r4, r3 + mov r1, #0x10000000 + mov r5, r2 + bl MIi_CheckAnotherAutoDMA + mov r0, r7 + mov r1, r6 + mov r2, r4 + mov r3, #0x0 + bl MIi_CheckDma0SourceAddress +_020CDDC4: + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7, lr} + bxeq lr + mov r0, r7 + bl MI_WaitDma + ldr r3, _020CDE00 + mov r0, r7 + mov r1, r6 + mov r2, r5 + orr r3, r3, r4, lsr #0x1 + bl FUN_01FF85F0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_020CDE00: .word 0x92600000 + + arm_func_start MI_HBlankDmaCopy32 +MI_HBlankDmaCopy32: ; 0x020CDE04 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r1 + mov r7, r0 + mov r4, r3 + mov r1, #0x10000000 + mov r5, r2 + bl MIi_CheckAnotherAutoDMA + mov r0, r7 + mov r1, r6 + mov r2, r4 + mov r3, #0x0 + bl MIi_CheckDma0SourceAddress +_020CDE38: + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r7 + bl MI_WaitDma + ldr r3, _020CDE74 + mov r0, r7 + mov r1, r6 + mov r2, r5 + orr r3, r3, r4, lsr #0x2 + bl FUN_01FF85F0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_020CDE74: .word 0x96600000 + + arm_func_start MIi_DMAFastCallback +MIi_DMAFastCallback: ; 0x020CDE78 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020CDEB4 ; =0x021D37FC + mov r2, #0x0 + ldr r1, [r0, #0x10] + str r2, [r0, #0x0] + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldr r0, [r0, #0x14] + ldmeqia sp!, {lr} + bxeq lr + blx r1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CDEB4: .word 0x021D37FC + + arm_func_start MI_SendGXCommandAsyncFast +MI_SendGXCommandAsyncFast: ; 0x020CDEB8 + stmdb sp!, {r4-r6,lr} + movs r4, r2 + mov r6, r0 + mov r5, r1 + bne _020CDEE8 + cmp r3, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r0, [sp, #0x10] + blx r3 + ldmia sp!, {r4-r6,lr} + bx lr +_020CDEE8: + ldr r2, _020CDF6C ; =0x021D37FC + ldr r0, [r2, #0x0] + cmp r0, #0x0 + bne _020CDEE8 + ldr r12, [sp, #0x10] + mov lr, #0x1 + mov r0, r6 + mov r1, #0x38000000 + str lr, [r2, #0x0] + str r6, [r2, #0x4] + str r3, [r2, #0x10] + str r12, [r2, #0x14] + bl MIi_CheckAnotherAutoDMA + mov r0, r6 + mov r1, r5 + mov r2, r4 + mov r3, #0x0 + bl MIi_CheckDma0SourceAddress + mov r0, r6 + bl MI_WaitDma + mov r0, r6 + ldr r1, _020CDF70 ; =MIi_DMAFastCallback + mov r2, #0x0 + bl OSi_EnterDmaCallback + mov r0, r6 + mov r1, r5 + ldr r2, _020CDF74 ; =0x04000400 + mov r3, #0x3c00000 + rsb r3, r3, #0x0 + orr r3, r3, r4, lsr #0x2 + bl FUN_01FF85F0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020CDF6C: .word 0x021D37FC +_020CDF70: .word MIi_DMAFastCallback +_020CDF74: .word 0x04000400 + + arm_func_start MIi_DMACallback +MIi_DMACallback: ; 0x020CDF78 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, #0x200000 + bl OS_DisableIrqMask + ldr r2, _020CDFE4 ; =0x04000600 + ldr r0, _020CDFE8 ; =0x021D37FC + ldr r1, [r2, #0x0] + ldr r3, [r0, #0x18] + bic r1, r1, #0xc0000000 + orr r1, r1, r3, lsl #0x1e + str r1, [r2, #0x0] + ldr r1, [r0, #0x1c] + mov r0, #0x200000 + bl OS_SetIrqFunction + ldr r0, _020CDFE8 ; =0x021D37FC + mov r2, #0x0 + ldr r1, [r0, #0x10] + str r2, [r0, #0x0] + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldr r0, [r0, #0x14] + ldmeqia sp!, {lr} + bxeq lr + blx r1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CDFE4: .word 0x04000600 +_020CDFE8: .word 0x021D37FC + + arm_func_start MIi_FIFOCallback +MIi_FIFOCallback: ; 0x020CDFEC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020CE0A4 ; =0x021D37FC + ldr r4, [r0, #0xc] + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, _020CE0A4 ; =0x021D37FC + cmp r4, #0x1d8 + ldr r5, [r0, #0x8] + movcs r4, #0x1d8 + ldr r2, [r0, #0xc] + add r1, r5, r4 + subs r2, r2, r4 + str r2, [r0, #0xc] + str r1, [r0, #0x8] + bne _020CE078 + ldr r0, [r0, #0x4] + ldr r1, _020CE0A8 ; =MIi_DMACallback + mov r2, #0x0 + bl OSi_EnterDmaCallback + mov r0, #0x3bc00000 + rsb r3, r0, #0x0 + ldr r1, _020CE0A4 ; =0x021D37FC + ldr r2, _020CE0AC ; =0x04000400 + ldr r0, [r1, #0x4] + mov r1, r5 + orr r3, r3, r4, lsr #0x2 + bl FUN_01FF85F0 + mov r0, #0x200000 + bl OS_ResetRequestIrqMask + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020CE078: + ldr r3, _020CE0B0 ; =0x84400000 + ldr r0, [r0, #0x4] + ldr r2, _020CE0AC ; =0x04000400 + mov r1, r5 + orr r3, r3, r4, lsr #0x2 + bl FUN_01FF85F0 + mov r0, #0x200000 + bl OS_ResetRequestIrqMask + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020CE0A4: .word 0x021D37FC +_020CE0A8: .word MIi_DMACallback +_020CE0AC: .word 0x04000400 +_020CE0B0: .word 0x84400000 + + arm_func_start MI_SendGXCommandAsync +MI_SendGXCommandAsync: ; 0x020CE0B4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + cmp r2, #0x0 + bne _020CE0EC + cmp r3, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, [sp, #0x10] + blx r3 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020CE0EC: + ldr r0, _020CE1BC ; =0x021D37FC + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020CE0EC + ldr r5, _020CE1C0 ; =0x04000600 +_020CE100: + ldr r0, [r5, #0x0] + and r0, r0, #0x7000000 + mov r0, r0, lsr #0x18 + ands r0, r0, #0x2 + beq _020CE100 + ldr ip, _020CE1BC ; =0x021D37FC + ldr lr, [sp, #0x10] + str r3, [r12, #0x10] + mov r5, #0x1 + mov r0, r4 + mov r3, #0x0 + str r5, [r12, #0x0] + str r4, [r12, #0x4] + str r1, [r12, #0x8] + str r2, [r12, #0xc] + str lr, [r12, #0x14] + bl MIi_CheckDma0SourceAddress + mov r0, r4 + bl MI_WaitDma + bl OS_DisableInterrupts + ldr r1, _020CE1C0 ; =0x04000600 + mov r4, r0 + ldr r0, [r1, #0x0] + ldr r1, _020CE1BC ; =0x021D37FC + and r0, r0, #0xc0000000 + mov r2, r0, lsr #0x1e + mov r0, #0x200000 + str r2, [r1, #0x18] + bl OS_GetIrqFunction + ldr r1, _020CE1BC ; =0x021D37FC + ldr r2, _020CE1C0 ; =0x04000600 + str r0, [r1, #0x1c] + ldr r0, [r2, #0x0] + ldr r1, _020CE1C4 ; =MIi_FIFOCallback + bic r0, r0, #0xc0000000 + orr r3, r0, #0x40000000 + mov r0, #0x200000 + str r3, [r2, #0x0] + bl OS_SetIrqFunction + mov r0, #0x200000 + bl OS_EnableIrqMask + bl MIi_FIFOCallback + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020CE1BC: .word 0x021D37FC +_020CE1C0: .word 0x04000600 +_020CE1C4: .word MIi_FIFOCallback + + arm_func_start MIi_CpuClear16 +MIi_CpuClear16: ; 0x020CE1C8 + mov r3, #0x0 +_020CE1CC: + cmp r3, r2 + strlth r0, [r1, r3] + addlt r3, r3, #0x2 + blt _020CE1CC + bx lr + + arm_func_start MIi_CpuCopy16 +MIi_CpuCopy16: ; 0x020CE1E0 + mov r12, #0x0 +_020CE1E4: + cmp r12, r2 + ldrlth r3, [r0, r12] + strlth r3, [r1, r12] + addlt r12, r12, #0x2 + blt _020CE1E4 + bx lr + + arm_func_start MIi_CpuClear32 +MIi_CpuClear32: ; 0x020CE1FC + add r12, r1, r2 +_020CE200: + cmp r1, r12 + stmltia r1!, {r0} + blt _020CE200 + bx lr + + arm_func_start MIi_CpuCopy32 +MIi_CpuCopy32: ; 0x020CE210 + add r12, r1, r2 +_020CE214: + cmp r1, r12 + ldmltia r0!, {r2} + stmltia r1!, {r2} + blt _020CE214 + bx lr + + arm_func_start MIi_CpuSend32 +MIi_CpuSend32: ; 0x020CE228 + add r12, r0, r2 +_020CE22C: + cmp r0, r12 + ldmltia r0!, {r2} + strlt r2, [r1, #0x0] + blt _020CE22C + bx lr + + arm_func_start MIi_CpuClearFast +MIi_CpuClearFast: ; 0x020CE240 + stmdb sp!, {r4-r9} + add r9, r1, r2 + mov r12, r2, lsr #0x5 + add r12, r1, r12, lsl #0x5 + mov r2, r0 + mov r3, r2 + mov r4, r2 + mov r5, r2 + mov r6, r2 + mov r7, r2 + mov r8, r2 +_020CE26C: + cmp r1, r12 + stmltia r1!, {r0,r2-r8} + blt _020CE26C +_020CE278: + cmp r1, r9 + stmltia r1!, {r0} + blt _020CE278 + ldmia sp!, {r4-r9} + bx lr + + arm_func_start MIi_CpuCopyFast +MIi_CpuCopyFast: ; 0x020CE28C + stmdb sp!, {r4-r10} + add r10, r1, r2 + mov r12, r2, lsr #0x5 + add r12, r1, r12, lsl #0x5 +_020CE29C: + cmp r1, r12 + ldmltia r0!, {r2-r9} + stmltia r1!, {r2-r9} + blt _020CE29C +_020CE2AC: + cmp r1, r10 + ldmltia r0!, {r2} + stmltia r1!, {r2} + blt _020CE2AC + ldmia sp!, {r4-r10} + bx lr + + arm_func_start FUN_020CE2C4 +FUN_020CE2C4: + ldmia r0!, {r2, r3, ip} + stmia r1!, {r2, r3, ip} + ldmia r0!, {r2, r3, ip} + stmia r1!, {r2, r3, ip} + ldmia r0!, {r2, r3} + stmia r1!, {r2, r3} + bx lr + + arm_func_start MI_Copy36B +MI_Copy36B: ; 0x020CE2E0 + ldmia r0!, {r2-r3,r12} + stmia r1!, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1!, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1!, {r2-r3,r12} + bx lr + + arm_func_start MI_Copy48B +MI_Copy48B: ; 0x020CE2FC + ldmia r0!, {r2-r3,r12} + stmia r1!, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1!, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1!, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1!, {r2-r3,r12} + bx lr + + arm_func_start MI_Copy64B +MI_Copy64B: ; 0x020CE320 + ldmia r0!, {r2-r3,r12} + stmia r1!, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1!, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1!, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1!, {r2-r3,r12} + ldmia r0, {r0,r2-r3,r12} + stmia r1!, {r0,r2-r3,r12} + bx lr + + arm_func_start MI_CpuFill8 +MI_CpuFill8: ; 0x020CE34C + cmp r2, #0x0 + bxeq lr + tst r0, #0x1 + beq _020CE378 + ldrh r12, [r0, #-0x1] + and r12, r12, #0xff + orr r3, r12, r1, lsl #0x8 + strh r3, [r0, #-0x1] + add r0, r0, #0x1 + subs r2, r2, #0x1 + bxeq lr +_020CE378: + cmp r2, #0x2 + blo _020CE3C0 + orr r1, r1, r1, lsl #0x8 + tst r0, #0x2 + beq _020CE398 + strh r1, [r0], #0x2 + subs r2, r2, #0x2 + bxeq lr +_020CE398: + orr r1, r1, r1, lsl #0x10 + bics r3, r2, #0x3 + beq _020CE3B8 + sub r2, r2, r3 + add r12, r3, r0 +_020CE3AC: + str r1, [r0], #0x4 + cmp r0, r12 + blo _020CE3AC +_020CE3B8: + tst r2, #0x2 + strneh r1, [r0], #0x2 +_020CE3C0: + tst r2, #0x1 + bxeq lr + ldrh r3, [r0, #0x0] + and r3, r3, #0xff00 + and r1, r1, #0xff + orr r1, r1, r3 + strh r1, [r0, #0x0] + bx lr + + arm_func_start MI_CpuCopy8 +MI_CpuCopy8: + cmp r2, #0x0 + bxeq lr + tst r1, #0x1 + beq _020CE420 + ldrh r12, [r1, #-0x1] + and r12, r12, #0xff + tst r0, #0x1 + ldrneh r3, [r0, #-0x1] + movne r3, r3, lsr #0x8 + ldreqh r3, [r0, #0x0] + orr r3, r12, r3, lsl #0x8 + strh r3, [r1, #-0x1] + add r0, r0, #0x1 + add r1, r1, #0x1 + subs r2, r2, #0x1 + bxeq lr +_020CE420: + eor r12, r1, r0 + tst r12, #0x1 + beq _020CE474 + bic r0, r0, #0x1 + ldrh r12, [r0], #0x2 + mov r3, r12, lsr #0x8 + subs r2, r2, #0x2 + blo _020CE458 +_020CE440: + ldrh r12, [r0], #0x2 + orr r12, r3, r12, lsl #0x8 + strh r12, [r1], #0x2 + mov r3, r12, lsr #0x10 + subs r2, r2, #0x2 + bhs _020CE440 +_020CE458: + tst r2, #0x1 + bxeq lr + ldrh r12, [r1, #0x0] + and r12, r12, #0xff00 + orr r12, r12, r3 + strh r12, [r1, #0x0] + bx lr +_020CE474: + tst r12, #0x2 + beq _020CE4A0 + bics r3, r2, #0x1 + beq _020CE4EC + sub r2, r2, r3 + add r12, r3, r1 +_020CE48C: + ldrh r3, [r0], #0x2 + strh r3, [r1], #0x2 + cmp r1, r12 + blo _020CE48C + b _020CE4EC +_020CE4A0: + cmp r2, #0x2 + blo _020CE4EC + tst r1, #0x2 + beq _020CE4C0 + ldrh r3, [r0], #0x2 + strh r3, [r1], #0x2 + subs r2, r2, #0x2 + bxeq lr +_020CE4C0: + bics r3, r2, #0x3 + beq _020CE4E0 + sub r2, r2, r3 + add r12, r3, r1 +_020CE4D0: + ldr r3, [r0], #0x4 + str r3, [r1], #0x4 + cmp r1, r12 + blo _020CE4D0 +_020CE4E0: + tst r2, #0x2 + ldrneh r3, [r0], #0x2 + strneh r3, [r1], #0x2 +_020CE4EC: + tst r2, #0x1 + bxeq lr + ldrh r2, [r1, #0x0] + ldrh r0, [r0, #0x0] + and r2, r2, #0xff00 + and r0, r0, #0xff + orr r0, r2, r0 + strh r0, [r1, #0x0] + bx lr + + thumb_func_start MI_Zero36B +MI_Zero36B: ; 0x020CE510 + mov r1, #0x0 + mov r2, #0x0 + mov r3, #0x0 + stmia r0!, {r1-r3} + stmia r0!, {r1-r3} + stmia r0!, {r1-r3} + bx lr + + arm_func_start MI_SwapWord +MI_SwapWord: ; 0x020CE520 + swp r0, r0, [r1] + bx lr + + arm_func_start MI_UncompressLZ8 +MI_UncompressLZ8: ; 0x020CE528 + stmdb sp!, {r4-r6,lr} + ldr r5, [r0], #0x4 + mov r2, r5, lsr #0x8 +_020CE534: + cmp r2, #0x0 + ble _020CE5B4 + ldrb lr, [r0], #0x1 + mov r4, #0x8 +_020CE544: + subs r4, r4, #0x1 + blt _020CE534 + tst lr, #0x80 + bne _020CE568 + ldrb r6, [r0], #0x1 + .word 0xE1416096 + add r1, r1, #0x1 + sub r2, r2, #0x1 + b _020CE5A4 +_020CE568: + ldrb r5, [r0, #0x0] + mov r6, #0x3 + add r3, r6, r5, asr #0x4 + ldrb r6, [r0], #0x1 + and r5, r6, #0xf + mov r12, r5, lsl #0x8 + ldrb r6, [r0], #0x1 + orr r5, r6, r12 + add r12, r5, #0x1 + sub r2, r2, r3 +_020CE590: + ldrb r5, [r1, -r12] + .word 0xE1415095 + add r1, r1, #0x1 + subs r3, r3, #0x1 + bgt _020CE590 +_020CE5A4: + cmp r2, #0x0 + movgt lr, lr, lsl #0x1 + bgt _020CE544 + b _020CE534 +_020CE5B4: + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start MIi_CardDmaCopy32 +MIi_CardDmaCopy32: ; 0x020CE5BC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r1 + mov r6, r0 + mov r7, r3 + mvn r1, #0x0 + mov r4, r2 + bl MIi_CheckAnotherAutoDMA + mov r0, r6 + mov r1, r5 + mov r2, r7 + mov r3, #0x1000000 + bl MIi_CheckDma0SourceAddress +_020CE5F0: + cmp r7, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7, lr} + bxeq lr + mov r0, #0x3 + mul r1, r6, r0 + ldr r0, _020CE640 + add r1, r1, #0x2 + add r1, r0, r1, lsl #0x2 +_020CE614: + ldr r0, [r1] + ands r0, r0, #0x80000000 + bne _020CE614 + ldr r3, _020CE644 + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_01FF85F0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7, lr} + bx lr +_020CE640: .word 0x040000B0 +_020CE644: .word 0xAf000001 + + arm_func_start MI_Init +MI_Init: ; 0x020CE648 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, #0x3 + bl MI_SetWramBank + mov r0, #0x0 + bl MI_StopDma + add sp, sp, #0x4 + ldmfd sp!, {lr} + bx lr + + arm_func_start PushCommand_impl +PushCommand_impl: ; 0x020CE66C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r0, #0x1 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl SND_AllocCommand +_020CE68C: + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7, lr} + bxeq lr + str r7, [r0, #0x4] + str r6, [r0, #0x8] + str r5, [r0, #0xc] + ldr r1, [sp, #0x18] + str r4, [r0, #0x10] + str r1, [r0, #0x14] + bl SND_PushCommand + add sp, sp, #0x4 + ldmia sp!, {r4-r7, lr} + bx lr + + arm_func_start SNDi_SetTrackParam +SNDi_SetTrackParam: ; 0x020CE6C4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r12, [sp, #0x8] + mov lr, r2 + str r3, [sp, #0x0] + mov r2, r1 + orr r1, r0, r12, lsl #0x18 + mov r3, lr + mov r0, #0x7 + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_020CE6F8 +FUN_020CE6F8: ; 0x020CE6F8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r12, r2 + str r3, [sp, #0x0] + mov r1, r0 + mov r2, lr + mov r3, r12 + mov r0, #0x6 + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_ResetMasterPan +SND_ResetMasterPan: ; 0x020CE72C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, #0x0 + mov r3, r2 + mov r0, #0x18 + mvn r1, #0x0 + str r2, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetMasterPan +SND_SetMasterPan: ; 0x020CE758 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, #0x0 + mov r1, r0 + mov r3, r2 + mov r0, #0x18 + str r2, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetOutputSelector +SND_SetOutputSelector: ; 0x020CE784 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r12, r2 + str r3, [sp, #0x0] + mov r1, r0 + mov r2, lr + mov r3, r12 + mov r0, #0x19 + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_InvalidateWaveData +SND_InvalidateWaveData: ; 0x020CE7B8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r3, #0x0 + mov r1, r0 + mov r0, #0x20 + str r3, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_InvalidateBankData +SND_InvalidateBankData: ; 0x020CE7E4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r3, #0x0 + mov r1, r0 + mov r0, #0x1f + str r3, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_InvalidateSeqData +SND_InvalidateSeqData: ; 0x020CE810 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r3, #0x0 + mov r1, r0 + mov r0, #0x1e + str r3, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetupChannelPcm +SND_SetupChannelPcm: ; 0x020CE83C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r12, [sp, #0x18] + mov r3, r3, lsl #0x1a + orr r4, r3, r1, lsl #0x18 + ldr r5, [sp, #0x24] + mov r3, r12, lsl #0x18 + ldr r1, [sp, #0x1c] + ldr r12, [sp, #0x10] + orr r4, r4, r5, lsl #0x10 + orr r4, r12, r4 + ldr lr, [sp, #0x20] + orr r3, r3, r1, lsl #0x16 + ldr r12, [sp, #0x14] + orr r1, r0, lr, lsl #0x10 + orr r3, r12, r3 + mov r0, #0xe + str r4, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start SND_SetChannelPan +SND_SetChannelPan: ; 0x020CE894 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r3, #0x0 + mov r1, r0 + mov r0, #0x15 + str r3, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetChannelVolume +SND_SetChannelVolume: ; 0x020CE8C0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r3, r2 + mov r12, #0x0 + mov r1, r0 + mov r2, lr + mov r0, #0x14 + str r12, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetChannelTimer +SND_SetChannelTimer: ; 0x020CE8F4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r3, #0x0 + mov r1, r0 + mov r0, #0x13 + str r3, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_UnlockChannel +SND_UnlockChannel: ; 0x020CE920 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r3, #0x0 + mov r1, r0 + mov r0, #0x1b + str r3, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_LockChannel +SND_LockChannel: ; 0x020CE94C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r3, #0x0 + mov r1, r0 + mov r0, #0x1a + str r3, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetupAlarm +SND_SetupAlarm: ; 0x020CE978 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r4, r2 + mov r5, r1 + ldr r2, [sp, #0x18] + mov r6, r0 + mov r1, r3 + bl SNDi_SetAlarmHandler +_020CE998: + str r0, [sp] + mov r1, r6 + mov r2, r5 + mov r3, r4 + mov r0, #0x12 + bl PushCommand_impl + add sp, sp, #0x8 + ldmia sp!, {r4-r6, lr} + bx lr + + arm_func_start SND_SetupCapture +SND_SetupCapture: ; 0x020CE9BC + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, r0, lsl #0x1f + orr r0, r0, r1, lsl #0x1e + ldr r12, [sp, #0x8] + mov r1, r2 + orr r0, r0, r12, lsl #0x1d + ldr r2, [sp, #0xc] + mov lr, #0x0 + orr r0, r0, r2, lsl #0x1c + ldr r12, [sp, #0x10] + mov r2, r3 + orr r3, r0, r12, lsl #0x1b + mov r0, #0x11 + str lr, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_StopTimer +SND_StopTimer: ; 0x020CEA08 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r7, r2 + mov r9, r0 + mov r8, r1 + mov r6, r3 + mov r4, r7 + mov r5, #0x0 + b _020CEA44 +_020CEA2C: + ands r0, r4, #0x1 + beq _020CEA3C + mov r0, r5 + bl SNDi_IncAlarmId +_020CEA3C: + add r5, r5, #0x1 + mov r4, r4, lsr #0x1 +_020CEA44: + cmp r5, #0x8 + bge _020CEA54 + cmp r4, #0x0 + bne _020CEA2C +_020CEA54: + mov r1, r9 + mov r2, r8 + mov r3, r7 + mov r0, #0xd + str r6, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start SND_StartTimer +SND_StartTimer: ; 0x020CEA78 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r12, r2 + str r3, [sp, #0x0] + mov r1, r0 + mov r2, lr + mov r3, r12 + mov r0, #0xc + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetTrackAllocatableChannel +SND_SetTrackAllocatableChannel: ; 0x020CEAAC + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r3, r2 + mov r12, #0x0 + mov r1, r0 + mov r2, lr + mov r0, #0x9 + str r12, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetTrackPan +SND_SetTrackPan: ; 0x020CEAE0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r3, r2 + mov r12, #0x1 + mov r2, #0x9 + str r12, [sp, #0x0] + bl SNDi_SetTrackParam + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetTrackPitch +SND_SetTrackPitch: ; 0x020CEB08 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r3, r2 + mov r12, #0x2 + mov r2, #0xc + str r12, [sp, #0x0] + bl SNDi_SetTrackParam + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetPlayerChannelPriority +SND_SetPlayerChannelPriority: ; 0x020CEB30 + ldr ip, _020CEB44 ; =FUN_020CE6F8 + mov r2, r1 + mov r1, #0x4 + mov r3, #0x1 + bx r12 + .balign 4 +_020CEB44: .word FUN_020CE6F8 + + arm_func_start SND_SetPlayerVolume +SND_SetPlayerVolume: ; 0x020CEB48 + ldr ip, _020CEB5C ; =FUN_020CE6F8 + mov r2, r1 + mov r1, #0x6 + mov r3, #0x2 + bx r12 + .balign 4 +_020CEB5C: .word FUN_020CE6F8 + + arm_func_start SND_PauseSeq +SND_PauseSeq: ; 0x020CEB60 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r3, #0x0 + mov r1, r0 + mov r0, #0x4 + str r3, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_StartPreparedSeq +SND_StartPreparedSeq: ; 0x020CEB8C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, #0x0 + mov r1, r0 + mov r3, r2 + mov r0, #0x3 + str r2, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_PrepareSeq +SND_PrepareSeq: ; 0x020CEBB8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r12, r2 + str r3, [sp, #0x0] + mov r1, r0 + mov r2, lr + mov r3, r12 + mov r0, #0x2 + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_StopSeq +SND_StopSeq: ; 0x020CEBEC + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, #0x0 + mov r1, r0 + mov r3, r2 + mov r0, #0x1 + str r2, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SNDi_UnlockMutex +SNDi_UnlockMutex: ; 0x020CEC18 + ldr ip, _020CEC24 ; =OS_UnlockMutex + ldr r0, _020CEC28 ; =0x021D3820 + bx r12 + .balign 4 +_020CEC24: .word OS_UnlockMutex +_020CEC28: .word 0x021D3820 + + arm_func_start SNDi_LockMutex +SNDi_LockMutex: ; 0x020CEC2C + ldr ip, _020CEC38 ; =OS_LockMutex + ldr r0, _020CEC3C ; =0x021D3820 + bx r12 + .balign 4 +_020CEC38: .word OS_LockMutex +_020CEC3C: .word 0x021D3820 + + arm_func_start SND_Init +SND_Init: ; 0x020CEC40 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020CEC84 ; =0x021D381C + ldr r0, [r1, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020CEC88 ; =0x021D3820 + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_InitMutex + bl SND_CommandInit + bl SND_AlarmInit + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CEC84: .word 0x021D381C +_020CEC88: .word 0x021D3820 + + arm_func_start IsCommandAvailable +IsCommandAvailable: + stmdb sp!, {r4,lr} + bl OS_IsRunOnEmulator +_020CEC94: + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4, lr} + bxeq lr + bl OS_DisableInterrupts + ldr r1, _020CECD0 + mov r2, #0x10 + str r2, [r1] + ldr r4, [r1] + bl OS_RestoreInterrupts + cmp r4, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + ldmia sp!, {r4, lr} + bx lr +_020CECD0: .word 0x04FFF200 + + arm_func_start AllocCommand +AllocCommand: ; 0x020CECD4 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020CED24 ; =0x021D3838 + ldr r4, [r1, #0x0] + cmp r4, #0x0 + bne _020CECFC + bl OS_RestoreInterrupts +_020CECF0: + mov r0, #0x0 + ldmia sp!, {r4, lr} + bx lr +_020CECFC: + ldr r2, [r4, #0x0] + str r2, [r1, #0x0] + cmp r2, #0x0 + ldreq r1, _020CED28 ; =0x021D3848 + moveq r2, #0x0 + streq r2, [r1, #0x0] + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CED24: .word 0x021D3838 +_020CED28: .word 0x021D3848 + + arm_func_start RequestCommandProc +RequestCommandProc: ; 0x020CED2C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, #0x7 + mov r4, #0x0 +_020CED3C: + mov r0, r5 + mov r1, r4 + mov r2, r4 + bl PXI_SendWordByFifo +_020CED4C: + cmp r0, #0 + blt _020CED3C + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start InitPXI +InitPXI: ; 0x020CED60 + stmdb sp!, {r4-r6,lr} + ldr r1, _020CEDC8 ; =PxiFifoCallback + mov r0, #0x7 + bl PXI_SetFifoRecvCallback + bl IsCommandAvailable +_020CED74: + cmp r0, #0x0 + ldmeqia sp!, {r4-r6, lr} + bxeq lr + mov r0, #0x7 + mov r1, #0x1 + bl PXI_IsCallbackReady + cmp r0, #0x0 + ldmneia sp!, {r4-r6, lr} + bxne lr + mov r6, #0x64 + mov r5, #0x7 + mov r4, #0x1 +_020CEDA4: + mov r0, r6 + bl OS_SpinWait + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady + cmp r0, #0x0 + beq _020CEDA4 + ldmia sp!, {r4-r6, lr} + bx lr +_020CEDC8: .word PxiFifoCallback + + arm_func_start PxiFifoCallback +PxiFifoCallback: ; 0x020CEDCC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + bl OS_DisableInterrupts + mov r4, r0 + mov r0, r5 + bl SNDi_CallAlarmHandler + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start SND_CountWaitingCommand +SND_CountWaitingCommand: ; 0x020CEDFC + stmdb sp!, {r4,lr} + bl SND_CountFreeCommand + mov r4, r0 + bl SND_CountReservedCommand + rsb r1, r4, #0x100 + sub r0, r1, r0 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start SND_CountReservedCommand +SND_CountReservedCommand: ; 0x020CEE1C + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020CEE58 ; =0x021D3840 + mov r4, #0x0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + beq _020CEE48 +_020CEE38: + ldr r1, [r1, #0x0] + add r4, r4, #0x1 + cmp r1, #0x0 + bne _020CEE38 +_020CEE48: + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CEE58: .word 0x021D3840 + + arm_func_start SND_CountFreeCommand +SND_CountFreeCommand: ; 0x020CEE5C + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020CEE98 ; =0x021D3838 + mov r4, #0x0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + beq _020CEE88 +_020CEE78: + ldr r1, [r1, #0x0] + add r4, r4, #0x1 + cmp r1, #0x0 + bne _020CEE78 +_020CEE88: + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CEE98: .word 0x021D3838 + + arm_func_start SND_IsFinishedCommandTag +SND_IsFinishedCommandTag: + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r1, _020CEEEC ; =0x021D383C + ldr r1, [r1, #0x0] + cmp r4, r1 + bls _020CEECC + sub r1, r4, r1 + cmp r1, #0x80000000 + movcc r4, #0x0 + movcs r4, #0x1 + b _020CEEDC +_020CEECC: + sub r1, r1, r4 + cmp r1, #0x80000000 + movcc r4, #0x1 + movcs r4, #0x0 +_020CEEDC: + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CEEEC: .word 0x021D383C + + arm_func_start SND_GetCurrentCommandTag +SND_GetCurrentCommandTag: ; 0x020CEEF0 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020CEF24 ; =0x021D3840 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + ldreq r1, _020CEF28 ; =0x021D383C + ldreq r4, [r1, #0x0] + ldrne r1, _020CEF2C ; =0x021D3858 + ldrne r4, [r1, #0x0] + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CEF24: .word 0x021D3840 +_020CEF28: .word 0x021D383C +_020CEF2C: .word 0x021D3858 + + arm_func_start SND_WaitForCommandProc +SND_WaitForCommandProc: ; 0x020CEF30 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl SND_IsFinishedCommandTag +_020CEF40: + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5, lr} + bxne lr + mov r4, #0x0 +_020CEF54: + mov r0, r4 + bl SND_RecvCommandReply + cmp r0, #0x0 + bne _020CEF54 + mov r0, r5 + bl SND_IsFinishedCommandTag + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5, lr} + bxne lr + bl RequestCommandProc + mov r0, r5 + bl SND_IsFinishedCommandTag + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5, lr} + bxne lr + mov r4, #0x1 +_020CEF9C: + mov r0, r4 + bl SND_RecvCommandReply + mov r0, r5 + bl SND_IsFinishedCommandTag + cmp r0, #0x0 + beq _020CEF9C + add sp, sp, #0x4 + ldmia sp!, {r4-r5, lr} + bx lr + + arm_func_start SND_FlushCommand +SND_FlushCommand: ; 0x020CEFC0 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020CF164 ; =0x021D3840 + mov r4, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + bne _020CEFF8 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r9,lr} + bx lr +_020CEFF8: + ldr r1, _020CF168 ; =0x021D3854 + ldr r1, [r1, #0x0] + cmp r1, #0x8 + blt _020CF03C + ands r1, r5, #0x1 + bne _020CF024 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r9,lr} + bx lr +_020CF024: + mov r0, #0x1 + bl SND_RecvCommandReply + ldr r0, _020CF168 ; =0x021D3854 + ldr r0, [r0, #0x0] + cmp r0, #0x8 + bge _020CF024 +_020CF03C: + ldr r0, _020CF16C ; =0x021D3B00 + mov r1, #0x1800 + bl DC_FlushRange + ldr r1, _020CF164 ; =0x021D3840 + mov r0, #0x7 + ldr r1, [r1, #0x0] + mov r2, #0x0 + bl PXI_SendWordByFifo +_020CF05C: + cmp r0, #0x0 + bge _020CF0E0 + ands r0, r5, #0x1 + bne _020CF084 + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r9, lr} + bx lr +_020CF084: + ldr r1, _020CF164 + mov r0, #0x7 + ldr r1, [r1] + mov r2, #0x0 + bl PXI_SendWordByFifo + cmp r0, #0x0 + bge _020CF0E0 + ldr r6, _020CF164 + mov r9, #0x64 + mov r8, #0x7 + mov r7, #0x0 +_020CF0B0: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, r9 + bl OS_SpinWait + bl OS_DisableInterrupts + mov r4, r0 + mov r0, r8 + ldr r1, [r6] + mov r2, r7 + bl PXI_SendWordByFifo + cmp r0, #0x0 + blt _020CF0B0 +_020CF0E0: + ands r0, r5, #0x2 + beq _020CF0EC + bl RequestCommandProc +_020CF0EC: + ldr r0, _020CF170 + ldr r1, _020CF164 + ldr r3, [r0] + ldr r5, [r1] + add r1, r3, #0x1 + ldr r2, _020CF174 + str r1, [r0] + str r5, [r2, r3, lsl #2] + cmp r1, #0x8 + movgt r1, #0x0 + ldr r2, _020CF168 + strgt r1, [r0] + ldr r1, _020CF178 + ldr r3, [r2] + ldr r0, [r1] + add ip, r3, #0x1 + add r6, r0, #0x1 + ldr r5, _020CF164 + mov lr, #0x0 + ldr r3, _020CF17C + mov r0, r4 + str lr, [r5] + str lr, [r3] + str ip, [r2] + str r6, [r1] + bl OS_RestoreInterrupts + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r9, lr} + bx lr +_020CF164: .word 0x021D3840 +_020CF168: .word 0x021D3854 +_020CF16C: .word 0x021D3B00 +_020CF170: .word 0x021D3850 +_020CF174: .word 0x021D385C +_020CF178: .word 0x021D3858 +_020CF17C: .word 0x021D3844 + + arm_func_start SND_PushCommand +SND_PushCommand: ; 0x020CF180 + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r2, _020CF1C0 ; =0x021D3844 + ldr r1, [r2, #0x0] + cmp r1, #0x0 + ldreq r1, _020CF1C4 ; =0x021D3840 + streq r4, [r2, #0x0] + streq r4, [r1, #0x0] + strne r4, [r1, #0x0] + strne r4, [r2, #0x0] + mov r1, #0x0 + str r1, [r4, #0x0] + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CF1C0: .word 0x021D3844 +_020CF1C4: .word 0x021D3840 + + arm_func_start SND_AllocCommand +SND_AllocCommand: + stmdb sp!, {r4,lr} + mov r4, r0 + bl IsCommandAvailable +_020CF1D4: + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + bl AllocCommand + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + ands r0, r4, #0x1 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + bl SND_CountWaitingCommand + cmp r0, #0x0 + ble _020CF238 + mov r4, #0x0 +_020CF214: + mov r0, r4 + bl SND_RecvCommandReply + cmp r0, #0x0 + bne _020CF214 + bl AllocCommand + cmp r0, #0x0 + beq _020CF240 + ldmia sp!, {r4,lr} + bx lr +_020CF238: + mov r0, #0x1 + bl SND_FlushCommand +_020CF240: + bl RequestCommandProc + mov r4, #0x1 +_020CF248: + mov r0, r4 + bl SND_RecvCommandReply + bl AllocCommand + cmp r0, #0x0 + beq _020CF248 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start SND_RecvCommandReply +SND_RecvCommandReply: ; 0x020CF264 + stmdb sp!, {r4-r6,lr} + mov r4, r0 + bl OS_DisableInterrupts + mov r5, r0 + ands r0, r4, #0x1 + beq _020CF2C0 + bl SNDi_GetFinishedCommandTag + ldr r4, _020CF380 ; =0x021D383C + ldr r1, [r4, #0x0] + cmp r1, r0 + bne _020CF2E8 + mov r6, #0x64 +_020CF294: + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r6 + bl OS_SpinWait + bl OS_DisableInterrupts + mov r5, r0 + bl SNDi_GetFinishedCommandTag + ldr r1, [r4, #0x0] + cmp r1, r0 + beq _020CF294 + b _020CF2E8 +_020CF2C0: + bl SNDi_GetFinishedCommandTag + ldr r1, _020CF380 ; =0x021D383C + ldr r1, [r1, #0x0] + cmp r1, r0 + bne _020CF2E8 + mov r0, r5 + bl OS_RestoreInterrupts +_020CF2DC: + mov r0, #0x0 + ldmia sp!, {r4-r6, lr} + bx lr +_020CF2E8: + ldr r0, _020CF384 ; =0x021D384C + ldr r2, _020CF388 ; =0x021D385C + ldr r3, [r0, #0x0] + add r1, r3, #0x1 + ldr r4, [r2, r3, lsl #0x2] + str r1, [r0, #0x0] + cmp r1, #0x8 + movgt r1, #0x0 + strgt r1, [r0, #0x0] + ldr r0, [r4, #0x0] + mov r1, r4 + cmp r0, #0x0 + beq _020CF32C +_020CF31C: + ldr r1, [r1, #0x0] + ldr r0, [r1, #0x0] + cmp r0, #0x0 + bne _020CF31C +_020CF32C: + ldr r0, _020CF38C ; =0x021D3848 + ldr r3, _020CF390 ; =0x021D3854 + ldr r0, [r0, #0x0] + ldr r2, _020CF380 ; =0x021D383C + cmp r0, #0x0 + strne r4, [r0, #0x0] + ldreq r0, _020CF394 ; =0x021D3838 + ldr lr, [r3, #0x0] + streq r4, [r0, #0x0] + ldr ip, _020CF38C ; =0x021D3848 + sub r6, lr, #0x1 + ldr r0, [r2, #0x0] + str r1, [r12, #0x0] + add lr, r0, #0x1 + mov r0, r5 + str r6, [r3, #0x0] + str lr, [r2, #0x0] + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020CF380: .word 0x021D383C +_020CF384: .word 0x021D384C +_020CF388: .word 0x021D385C +_020CF38C: .word 0x021D3848 +_020CF390: .word 0x021D3854 +_020CF394: .word 0x021D3838 + + arm_func_start SND_CommandInit +SND_CommandInit: ; 0x020CF398 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + bl InitPXI + ldr r3, _020CF478 ; =0x021D3B00 + ldr r0, _020CF47C ; =0x021D3838 + mov r4, #0x0 + str r3, [r0, #0x0] + mov r1, r3 + mov r0, #0x18 +_020CF3BC: + add r4, r4, #0x1 + mla r2, r4, r0, r1 + cmp r4, #0xff + str r2, [r3], #0x18 + blt _020CF3BC + ldr r7, _020CF480 ; =0x021D4B00 + mov r10, #0x0 + ldr r5, _020CF484 ; =0x021D3840 + ldr r4, _020CF488 ; =0x021D3844 + ldr lr, _020CF48C ; =0x021D3854 + ldr ip, _020CF490 ; =0x021D384C + ldr r3, _020CF494 ; =0x021D3850 + ldr r1, _020CF498 ; =0x021D383C + ldr sb, _020CF49C ; =0x021D52E8 + ldr r6, _020CF4A0 ; =0x021D3848 + ldr r2, _020CF4A4 ; =0x021D3858 + mov r8, #0x1 + ldr r0, _020CF4A8 ; =0x021D3880 + ldr fp, _020CF4AC ; =0x021D5360 + str r9, [r6, #0x0] + str r10, [r7, #0x7e8] + str r10, [r5, #0x0] + str r10, [r4, #0x0] + str r10, [lr, #0x0] + str r10, [r12, #0x0] + str r10, [r3, #0x0] + str r8, [r2, #0x0] + str r10, [r1, #0x0] + str r0, [r11, #0x0] + bl SNDi_InitSharedWork + mov r0, r8 + bl SND_AllocCommand +_020CF43C: + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r11, lr} + bxeq lr + mov r2, #0x1D + mov r1, fp + str r2, [r0, #0x4] + ldr r1, [r1] + str r1, [r0, #0x8] + bl SND_PushCommand + mov r0, r8 + bl SND_FlushCommand + add sp, sp, #0x4 + ldmia sp!, {r4-r11, lr} + bx lr +_020CF478: .word 0x021D3B00 +_020CF47C: .word 0x021D3838 +_020CF480: .word 0x021D4B00 +_020CF484: .word 0x021D3840 +_020CF488: .word 0x021D3844 +_020CF48C: .word 0x021D3854 +_020CF490: .word 0x021D384C +_020CF494: .word 0x021D3850 +_020CF498: .word 0x021D383C +_020CF49C: .word 0x021D52E8 +_020CF4A0: .word 0x021D3848 +_020CF4A4: .word 0x021D3858 +_020CF4A8: .word 0x021D3880 +_020CF4AC: .word 0x021D5360 + + arm_func_start SNDi_CallAlarmHandler +SNDi_CallAlarmHandler: ; 0x020CF4B0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, _020CF50C ; =0x021D5300 + and r2, r0, #0xff + mov r1, #0xc + mla r3, r2, r1, r3 + mov r1, r0, asr #0x8 + ldrb r0, [r3, #0x8] + and r1, r1, #0xff + cmp r1, r0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r1, [r3, #0x0] + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + ldr r0, [r3, #0x4] + blx r1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CF50C: .word 0x021D5300 + + arm_func_start SNDi_SetAlarmHandler +SNDi_SetAlarmHandler: + mov r3, #0xc + mul r3, r0, r3 + ldr r0, _020CF53C ; =0x021D5300 + str r1, [r0, r3] + add r1, r0, r3 + str r2, [r1, #0x4] + ldrb r0, [r1, #0x8] + add r0, r0, #0x1 + strb r0, [r1, #0x8] + ldrb r0, [r1, #0x8] + bx lr + .balign 4 +_020CF53C: .word 0x021D5300 + + arm_func_start SNDi_IncAlarmId +SNDi_IncAlarmId: ; 0x020CF540 + ldr r2, _020CF55C ; =0x021D5300 + mov r1, #0xc + mla r1, r0, r1, r2 + ldrb r0, [r1, #0x8] + add r0, r0, #0x1 + strb r0, [r1, #0x8] + bx lr + .balign 4 +_020CF55C: .word 0x021D5300 + + arm_func_start SND_AlarmInit +SND_AlarmInit: ; 0x020CF560 + ldr r1, _020CF58C ; =0x021D5300 + mov r2, #0x0 + mov r0, r2 +_020CF56C: + str r0, [r1, #0x0] + str r0, [r1, #0x4] + add r2, r2, #0x1 + strb r0, [r1, #0x8] + cmp r2, #0x8 + add r1, r1, #0xc + blt _020CF56C + bx lr + .balign 4 +_020CF58C: .word 0x021D5300 + + arm_func_start SNDi_InitSharedWork +SNDi_InitSharedWork: ; 0x020CF590 + stmdb sp!, {r4,lr} + mov r4, #0x0 + str r4, [r0, #0x4] + strh r4, [r0, #0x8] + strh r4, [r0, #0xa] + mov r12, r0 + str r4, [r0, #0x0] + mov r3, r4 + mvn r2, #0x0 +_020CF5B4: + mov lr, r3 + str r3, [r12, #0x40] +_020CF5BC: + add r1, r12, lr, lsl #0x1 + add lr, lr, #0x1 + strh r2, [r1, #0x20] + cmp lr, #0x10 + blt _020CF5BC + add r4, r4, #0x1 + cmp r4, #0x10 + add r12, r12, #0x24 + blt _020CF5B4 + mov r3, #0x0 + mvn r2, #0x0 +_020CF5E8: + add r1, r0, r3, lsl #0x1 + add r1, r1, #0x200 + add r3, r3, #0x1 + strh r2, [r1, #0x60] + cmp r3, #0x10 + blt _020CF5E8 + mov r1, #0x280 + bl DC_FlushRange + ldmia sp!, {r4,lr} + bx lr + + arm_func_start SNDi_GetFinishedCommandTag +SNDi_GetFinishedCommandTag: ; 0x020CF610 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020CF640 ; =0x021D5360 + mov r1, #0x4 + ldr r0, [r0, #0x0] + bl DC_InvalidateRange + ldr r0, _020CF640 ; =0x021D5360 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CF640: .word 0x021D5360 + + arm_func_start SND_GetPlayerTickCounter +SND_GetPlayerTickCounter: ; 0x020CF644 + stmdb sp!, {r4,lr} + mov r1, #0x24 + mul r4, r0, r1 + ldr r0, _020CF680 ; =0x021D5360 + mov r1, #0x4 + ldr r0, [r0, #0x0] + add r0, r0, #0x40 + add r0, r0, r4 + bl DC_InvalidateRange + ldr r0, _020CF680 ; =0x021D5360 + ldr r0, [r0, #0x0] + add r0, r0, r4 + ldr r0, [r0, #0x40] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CF680: .word 0x021D5360 + + arm_func_start SND_GetChannelStatus +SND_GetChannelStatus: ; 0x020CF684 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020CF6B8 ; =0x021D5360 + mov r1, #0x2 + ldr r0, [r0, #0x0] + add r0, r0, #0x8 + bl DC_InvalidateRange + ldr r0, _020CF6B8 ; =0x021D5360 + ldr r0, [r0, #0x0] + ldrh r0, [r0, #0x8] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CF6B8: .word 0x021D5360 + + arm_func_start SND_GetPlayerStatus +SND_GetPlayerStatus: ; 0x020CF6BC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020CF6F0 ; =0x021D5360 + mov r1, #0x4 + ldr r0, [r0, #0x0] + add r0, r0, #0x4 + bl DC_InvalidateRange + ldr r0, _020CF6F0 ; =0x021D5360 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CF6F0: .word 0x021D5360 + + arm_func_start SND_CalcChannelVolume +SND_CalcChannelVolume: ; 0x020CF6F4 + ldr r1, _020CF75C ; =0xFFFFFD2D + cmp r0, r1 + movlt r0, r1 + blt _020CF70C + cmp r0, #0x0 + movgt r0, #0x0 +_020CF70C: + ldr r1, _020CF760 ; =0x000002D3 + ldr r2, _020CF764 ; =0x02103CAC + add r3, r0, r1 + mvn r1, #0xef + cmp r0, r1 + ldrb r2, [r2, r3] + movlt r0, #0x3 + blt _020CF74C + mvn r1, #0x77 + cmp r0, r1 + movlt r0, #0x2 + blt _020CF74C + mvn r1, #0x3b + cmp r0, r1 + movlt r0, #0x1 + movge r0, #0x0 +_020CF74C: + orr r0, r2, r0, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bx lr + .balign 4 +_020CF75C: .word 0xFFFFFD2D +_020CF760: .word 0x000002D3 +_020CF764: .word 0x02103CAC + + arm_func_start SND_GetWaveDataAddress +SND_GetWaveDataAddress: ; 0x020CF768 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl SNDi_LockMutex + add r0, r5, r4, lsl #0x2 + ldr r4, [r0, #0x3c] + cmp r4, #0x0 + beq _020CF798 + cmp r4, #0x2000000 + addcc r4, r5, r4 + b _020CF79C +_020CF798: + mov r4, #0x0 +_020CF79C: + bl SNDi_UnlockMutex + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start SND_SetWaveDataAddress +SND_SetWaveDataAddress: ; 0x020CF7B0 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl SNDi_LockMutex + add r0, r6, #0x3c + add r2, r6, r5, lsl #0x2 + add r0, r0, r5, lsl #0x2 + mov r1, #0x4 + str r4, [r2, #0x3c] + bl DC_StoreRange + bl SNDi_UnlockMutex + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start SND_GetWaveDataCount +SND_GetWaveDataCount: ; 0x020CF7E8 + ldr r0, [r0, #0x38] + bx lr + + arm_func_start SND_GetNextInstData +SND_GetNextInstData: ; 0x020CF7F0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r4, [r2, #0x0] + ldr r3, [r0, #0x38] + cmp r4, r3 + bhs _020CF9B8 + mov r12, #0x0 +_020CF80C: + add r3, r0, r4, lsl #0x2 + ldr r4, [r3, #0x3c] + strb r4, [r1, #0x0] + ldrb r3, [r1, #0x0] + cmp r3, #0x10 + bgt _020CF850 + cmp r3, #0x10 + bge _020CF8A8 + cmp r3, #0x5 + addls pc, pc, r3, lsl #0x2 + b _020CF998 +_020CF838: + b _020CF998 + b _020CF85C + b _020CF85C + b _020CF85C + b _020CF85C + b _020CF85C +_020CF850: + cmp r3, #0x11 + beq _020CF924 + b _020CF998 +_020CF85C: + mov r3, r4, lsr #0x8 + add r5, r0, r4, lsr #0x8 + ldrh r4, [r0, r3] + ldrh r3, [r5, #0x2] + add sp, sp, #0x4 + mov r0, #0x1 + strh r4, [r1, #0x2] + strh r3, [r1, #0x4] + ldrh r4, [r5, #0x4] + ldrh r3, [r5, #0x6] + strh r4, [r1, #0x6] + strh r3, [r1, #0x8] + ldrh r3, [r5, #0x8] + strh r3, [r1, #0xA] + ldr r1, [r2] + add r1, r1, #0x1 + str r1, [r2] + ldmia sp!, {r4-r5,lr} + bx lr +_020CF8A8: + add r5, r0, r4, lsr #0x8 + b _020CF904 +_020CF8B0: + mov r0, #0xc + mla r12, lr, r0, r5 + ldrh r4, [r12, #0x2] + ldrh r3, [r12, #0x4] + add sp, sp, #0x4 + mov r0, #0x1 + strh r4, [r1, #0x0] + strh r3, [r1, #0x2] + ldrh r4, [r12, #0x6] + ldrh r3, [r12, #0x8] + strh r4, [r1, #0x4] + strh r3, [r1, #0x6] + ldrh r4, [r12, #0xa] + ldrh r3, [r12, #0xc] + strh r4, [r1, #0x8] + strh r3, [r1, #0xa] + ldr r1, [r2, #0x4] + add r1, r1, #0x1 + str r1, [r2, #0x4] + ldmia sp!, {r4-r5,lr} + bx lr +_020CF904: + ldrb r4, [r5, #0x1] + ldrb r3, [r5, #0x0] + ldr lr, [r2, #0x4] + sub r3, r4, r3 + add r3, r3, #0x1 + cmp lr, r3 + blo _020CF8B0 + b _020CF998 +_020CF924: + add r4, r0, r4, lsr #0x8 + b _020CF98C +_020CF92C: + ldrb lr, [r4, r3] + cmp lr, #0x0 + beq _020CF998 + mov r0, #0xc + mla lr, r3, r0, r4 + ldrh r12, [lr, #0x8] + ldrh r3, [lr, #0xa] + add sp, sp, #0x4 + mov r0, #0x1 + strh r12, [r1, #0x0] + strh r3, [r1, #0x2] + ldrh r12, [lr, #0xc] + ldrh r3, [lr, #0xe] + strh r12, [r1, #0x4] + strh r3, [r1, #0x6] + ldrh r12, [lr, #0x10] + ldrh r3, [lr, #0x12] + strh r12, [r1, #0x8] + strh r3, [r1, #0xa] + ldr r1, [r2, #0x4] + add r1, r1, #0x1 + str r1, [r2, #0x4] + ldmia sp!, {r4-r5,lr} + bx lr +_020CF98C: + ldr r3, [r2, #0x4] + cmp r3, #0x8 + blo _020CF92C +_020CF998: + ldr r3, [r2, #0x0] + add r3, r3, #0x1 + str r3, [r2, #0x0] + str r12, [r2, #0x4] + ldr r4, [r2, #0x0] + ldr r3, [r0, #0x38] + cmp r4, r3 + blo _020CF80C +_020CF9B8: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start SND_GetFirstInstDataPos +SND_GetFirstInstDataPos: ; 0x020CF9C8 + sub sp, sp, #0x8 + mov r1, #0x0 + str r1, [sp, #0x0] + str r1, [sp, #0x4] + str r1, [r0, #0x0] + str r1, [r0, #0x4] + add sp, sp, #0x8 + bx lr + + arm_func_start SND_DestroyWaveArc +SND_DestroyWaveArc: ; 0x020CF9E8 + stmdb sp!, {r4-r6,lr} + mov r4, r0 + bl SNDi_LockMutex + ldr r0, [r4, #0x18] + cmp r0, #0x0 + beq _020CFA28 + mov r5, #0x0 + mov r4, #0x8 +_020CFA08: + ldr r6, [r0, #0x4] + mov r1, r4 + str r5, [r0, #0x0] + str r5, [r0, #0x4] + bl DC_StoreRange + mov r0, r6 + cmp r6, #0x0 + bne _020CFA08 +_020CFA28: + bl SNDi_UnlockMutex + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start SND_DestroyBank +SND_DestroyBank: ; 0x020CFA34 + stmdb sp!, {r4-r8,lr} + mov r7, r0 + bl SNDi_LockMutex + add r5, r7, #0x18 + mov r6, #0x0 + mov r8, #0x8 + mov r4, #0x3c +_020CFA50: + add r1, r7, r6, lsl #0x3 + ldr r0, [r1, #0x18] + cmp r0, #0x0 + beq _020CFAB8 + ldr r3, [r0, #0x18] + cmp r5, r3 + bne _020CFA80 + ldr r2, [r1, #0x1c] + mov r1, r4 + str r2, [r0, #0x18] + bl DC_StoreRange + b _020CFAB8 +_020CFA80: + cmp r3, #0x0 + beq _020CFAA0 +_020CFA88: + ldr r0, [r3, #0x4] + cmp r5, r0 + beq _020CFAA0 + mov r3, r0 + cmp r0, #0x0 + bne _020CFA88 +_020CFAA0: + add r0, r7, r6, lsl #0x3 + ldr r2, [r0, #0x1c] + mov r0, r3 + mov r1, r8 + str r2, [r3, #0x4] + bl DC_StoreRange +_020CFAB8: + add r6, r6, #0x1 + cmp r6, #0x4 + add r5, r5, #0x8 + blt _020CFA50 + bl SNDi_UnlockMutex + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start SND_AssignWaveArc +SND_AssignWaveArc: ; 0x020CFAD4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl SNDi_LockMutex + add r3, r6, r5, lsl #0x3 + ldr r2, [r3, #0x18] + mov r12, r5, lsl #0x3 + cmp r2, #0x0 + beq _020CFB70 + cmp r4, r2 + bne _020CFB10 + bl SNDi_UnlockMutex + ldmia sp!, {r4-r6,lr} + bx lr +_020CFB10: + add r1, r6, #0x18 + ldr r0, [r2, #0x18] + add r12, r1, r12 + cmp r12, r0 + bne _020CFB3C + ldr r0, [r3, #0x1c] + mov r1, #0x3c + str r0, [r2, #0x18] + ldr r0, [r3, #0x18] + bl DC_StoreRange + b _020CFB70 +_020CFB3C: + cmp r0, #0x0 + beq _020CFB5C +_020CFB44: + ldr r1, [r0, #0x4] + cmp r12, r1 + beq _020CFB5C + mov r0, r1 + cmp r1, #0x0 + bne _020CFB44 +_020CFB5C: + add r1, r6, r5, lsl #0x3 + ldr r2, [r1, #0x1c] + mov r1, #0x8 + str r2, [r0, #0x4] + bl DC_StoreRange +_020CFB70: + add r0, r6, #0x18 + ldr r1, [r4, #0x18] + add r0, r0, r5, lsl #0x3 + str r0, [r4, #0x18] + add r0, r6, r5, lsl #0x3 + str r1, [r0, #0x1c] + str r4, [r0, #0x18] + bl SNDi_UnlockMutex + mov r0, r6 + mov r1, #0x3c + bl DC_StoreRange + mov r0, r4 + mov r1, #0x3c + bl DC_StoreRange + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start PXI_Init +PXI_Init: ; 0x020CFBB0 + ldr ip, _020CFBB8 ; =PXI_InitFifo + bx r12 + .balign 4 +_020CFBB8: .word PXI_InitFifo + + arm_func_start PXIi_HandlerRecvFifoNotEmpty +PXIi_HandlerRecvFifoNotEmpty: ; 0x020CFBBC + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x8 + ldr sl, _020CFCD4 ; =0x04000184 + ldr r5, _020CFCD8 ; =0x021D5368 + ldr r4, _020CFCDC ; =0x04000188 + mov r7, #0x4100000 + mov r6, #0x0 + mvn r8, #0x3 + mvn r9, #0x2 +_020CFBE0: + ldrh r0, [r10, #0x0] + ands r0, r0, #0x4000 + ldrneh r0, [r10, #0x0] + movne r1, r9 + orrne r0, r0, #0xc000 + strneh r0, [r10, #0x0] + bne _020CFC28 + bl OS_DisableInterrupts + ldrh r1, [r10, #0x0] + ands r1, r1, #0x100 + beq _020CFC18 + bl OS_RestoreInterrupts + mov r1, r8 + b _020CFC28 +_020CFC18: + ldr r1, [r7, #0x0] + str r1, [sp, #0x0] + bl OS_RestoreInterrupts + mov r1, r6 +_020CFC28: + cmp r1, r8 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4-r10,lr} + bxeq lr + mvn r0, #0x2 + cmp r1, r0 + beq _020CFBE0 + ldr r1, [sp, #0x0] + mov r0, r1, lsl #0x1b + movs r0, r0, lsr #0x1b + beq _020CFBE0 + ldr r3, [r5, r0, lsl #0x2] + cmp r3, #0x0 + beq _020CFC74 + mov r2, r1, lsl #0x1a + mov r1, r1, lsr #0x6 + mov r2, r2, lsr #0x1f + blx r3 + b _020CFBE0 +_020CFC74: + mov r0, r1, lsl #0x1a + movs r0, r0, lsr #0x1f + bne _020CFBE0 + orr r0, r1, #0x20 + str r0, [sp, #0x0] + ldrh r0, [r10, #0x0] + ands r0, r0, #0x4000 + ldrneh r0, [r10, #0x0] + orrne r0, r0, #0xc000 + strneh r0, [r10, #0x0] + bne _020CFBE0 + bl OS_DisableInterrupts + ldrh r1, [r10, #0x0] + ands r1, r1, #0x2 + beq _020CFCB8 + bl OS_RestoreInterrupts + b _020CFBE0 +_020CFCB8: + ldr r1, [sp, #0x0] + str r1, [r4, #0x0] + bl OS_RestoreInterrupts + b _020CFBE0 +_020CFCC8: + add sp, sp, #0x8 + ldmia sp!, {r4-r10, lr} + bx lr +_020CFCD4: .word 0x04000184 +_020CFCD8: .word 0x021D5368 +_020CFCDC: .word 0x04000188 + + arm_func_start PXI_SendWordByFifo +PXI_SendWordByFifo: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, [sp, #0x0] + and r0, r0, #0x1f + bic r3, r3, #0x1f + orr r12, r3, r0 + bic r3, r12, #0x20 + and r0, r2, #0x1 + orr r3, r3, r0, lsl #0x5 + str r12, [sp, #0x0] + and r2, r3, #0x3f + bic r0, r1, #0xfc000000 + orr r0, r2, r0, lsl #0x6 + str r3, [sp, #0x0] + ldr r2, _020CFD8C ; =0x04000184 + str r0, [sp, #0x0] + ldrh r0, [r2, #0x0] + ands r0, r0, #0x4000 + ldrneh r1, [r2, #0x0] + addne sp, sp, #0x4 + mvnne r0, #0x0 + orrne r1, r1, #0xc000 + strneh r1, [r2, #0x0] + ldmneia sp!, {lr} + bxne lr + bl OS_DisableInterrupts + ldr r1, _020CFD8C ; =0x04000184 + ldrh r1, [r1, #0x0] + ands r1, r1, #0x2 + beq _020CFD6C + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mvn r0, #0x1 + ldmia sp!, {lr} + bx lr +_020CFD6C: + ldr r2, [sp, #0x0] + ldr r1, _020CFD90 ; =0x04000188 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts +_020CFD7C: + mov r0, #0x0 + add sp, sp, #0x4 + ldmfd sp!, {lr} + bx lr +_020CFD8C: .word 0x04000184 +_020CFD90: .word 0x04000188 + + arm_func_start PXI_IsCallbackReady +PXI_IsCallbackReady: + ldr r2, _020CFDB8 ; =0x027FFC00 + mov r3, #0x1 + add r1, r2, r1, lsl #0x2 + mov r2, r3, lsl r0 + ldr r0, [r1, #0x388] + ands r0, r2, r0 + moveq r3, #0x0 + mov r0, r3 + bx lr + .balign 4 +_020CFDB8: .word 0x027FFC00 + + arm_func_start PXI_SetFifoRecvCallback +PXI_SetFifoRecvCallback: ; 0x020CFDBC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + mov r5, r1 + bl OS_DisableInterrupts + ldr r1, _020CFE20 ; =0x021D5368 + cmp r5, #0x0 + str r5, [r1, r4, lsl #0x2] + beq _020CFDF8 + ldr r3, _020CFE24 ; =0x027FFC00 + mov r1, #0x1 + ldr r2, [r3, #0x388] + orr r1, r2, r1, lsl r4 + str r1, [r3, #0x388] + b _020CFE10 +_020CFDF8: + ldr r3, _020CFE24 ; =0x027FFC00 + mov r1, #0x1 + mvn r1, r1, lsl r4 + ldr r2, [r3, #0x388] + and r1, r2, r1 + str r1, [r3, #0x388] +_020CFE10: + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020CFE20: .word 0x021D5368 +_020CFE24: .word 0x027FFC00 + + arm_func_start PXI_InitFifo +PXI_InitFifo: ; 0x020CFE28 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r1, _020CFF18 ; =0x021D5364 + mov r4, r0 + ldrh r0, [r1, #0x0] + cmp r0, #0x0 + bne _020CFF04 + mov r2, #0x1 + ldr r0, _020CFF1C ; =0x027FFC00 + strh r2, [r1, #0x0] + mov r2, #0x0 + str r2, [r0, #0x388] + ldr r0, _020CFF20 ; =0x021D5368 + mov r1, r2 +_020CFE64: + str r1, [r0, r2, lsl #0x2] + add r2, r2, #0x1 + cmp r2, #0x20 + blt _020CFE64 + ldr r2, _020CFF24 ; =0x0000C408 + ldr r1, _020CFF28 ; =0x04000184 + mov r0, #0x40000 + strh r2, [r1, #0x0] + bl OS_ResetRequestIrqMask + ldr r1, _020CFF2C ; =PXIi_HandlerRecvFifoNotEmpty + mov r0, #0x40000 + bl OS_SetIrqFunction + mov r0, #0x40000 + bl OS_EnableIrqMask + mov r12, #0x0 + ldr r3, _020CFF30 ; =0x04000180 + mov r1, r12 + mov r2, #0x3e8 +_020CFEAC: + ldrh r0, [r3, #0x0] + ands lr, r0, #0xf + mov r0, lr, lsl #0x8 + strh r0, [r3, #0x0] + bne _020CFEC8 + cmp r12, #0x4 + bgt _020CFF04 +_020CFEC8: + ldrh r0, [r3, #0x0] + mov r5, r2 + and r0, r0, #0xf + cmp r0, lr + bne _020CFEFC +_020CFEDC: + cmp r5, #0x0 + movle r12, r1 + ble _020CFEFC + ldrh r0, [r3, #0x0] + sub r5, r5, #0x1 + and r0, r0, #0xf + cmp r0, lr + beq _020CFEDC +_020CFEFC: + add r12, r12, #0x1 + b _020CFEAC +_020CFF04: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020CFF18: .word 0x021D5364 +_020CFF1C: .word 0x027FFC00 +_020CFF20: .word 0x021D5368 +_020CFF24: .word 0x0000C408 +_020CFF28: .word 0x04000184 +_020CFF2C: .word PXIi_HandlerRecvFifoNotEmpty +_020CFF30: .word 0x04000180 + + arm_func_start FSi_TranslateCommand +FSi_TranslateCommand: + stmdb sp!, {r4-r8,lr} + mov r8, r0 + ldr r0, [r8, #0xc] + mov r7, r1 + mov r1, #0x1 + ldr r5, [r8, #0x8] + mov r4, r1, lsl r7 + ands r0, r0, #0x4 + moveq r1, #0x0 + cmp r1, #0x0 + ldrne r0, [r5, #0x1c] + orrne r0, r0, #0x200 + strne r0, [r5, #0x1c] + ldreq r0, [r5, #0x1c] + orreq r0, r0, #0x100 + streq r0, [r5, #0x1c] + ldr r0, [r5, #0x58] + ands r0, r0, r4 + beq _020CFFE4 + ldr r2, [r5, #0x54] + mov r0, r8 + mov r1, r7 + blx r2 + mov r6, r0 + cmp r6, #0x8 + addls pc, pc, r6, lsl #0x2 + b _020CFFE8 +_020CFFA0: + b _020CFFC4 + b _020CFFC4 + b _020CFFE8 + b _020CFFE8 + b _020CFFC4 + b _020CFFE8 + b _020CFFE8 + b _020CFFE8 + b _020CFFCC +_020CFFC4: + str r6, [r8, #0x14] + b _020CFFE8 +_020CFFCC: + ldr r1, [r5, #0x58] + mvn r0, r4 + and r0, r1, r0 + str r0, [r5, #0x58] + mov r6, #0x7 + b _020CFFE8 +_020CFFE4: + mov r6, #0x7 +_020CFFE8: + cmp r6, #0x7 + bne _020D0004 + ldr r1, _020D00AC ; =0x02103F80 + mov r0, r8 + ldr r1, [r1, r7, lsl #0x2] + blx r1 + mov r6, r0 +_020D0004: + cmp r6, #0x6 + bne _020D0060 + ldr r0, [r8, #0xc] + ands r0, r0, #0x4 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + beq _020D00A0 + bl OS_DisableInterrupts + ldr r1, [r5, #0x1c] + mov r4, r0 + ands r0, r1, #0x200 + beq _020D0050 + add r6, r5, #0xc +_020D003C: + mov r0, r6 + bl OS_SleepThread + ldr r0, [r5, #0x1c] + ands r0, r0, #0x200 + bne _020D003C +_020D0050: + mov r0, r4 + ldr r6, [r8, #0x14] + bl OS_RestoreInterrupts + b _020D00A0 +_020D0060: + ldr r0, [r8, #0xc] + ands r0, r0, #0x4 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + ldrne r0, [r5, #0x1c] + bicne r0, r0, #0x200 + strne r0, [r5, #0x1c] + strne r6, [r8, #0x14] + bne _020D00A0 + ldr r1, [r5, #0x1c] + mov r0, r8 + bic r2, r1, #0x100 + mov r1, r6 + str r2, [r5, #0x1c] + bl FSi_ReleaseCommand +_020D00A0: + mov r0, r6 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D00AC: .word 0x02103F80 + + arm_func_start FSi_ReleaseCommand +FSi_ReleaseCommand: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + bl OS_DisableInterrupts + ldr r1, [r6, #0x0] + mov r4, r0 + ldr r0, [r6, #0x4] + cmp r1, #0x0 + strne r0, [r1, #0x4] + cmp r0, #0x0 + strne r1, [r0, #0x0] + mov r0, #0x0 + str r0, [r6, #0x0] + ldr r1, [r6, #0x0] + add r0, r6, #0x18 + str r1, [r6, #0x4] + ldr r1, [r6, #0xc] + bic r1, r1, #0x4f + str r1, [r6, #0xc] + str r5, [r6, #0x14] + bl OS_WakeupThread + mov r0, r4 + bl OS_RestoreInterrupts + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FSi_CloseFileCommand +FSi_CloseFileCommand: ; 0x020D0114 + mov r0, #0x0 + bx lr + + arm_func_start FSi_OpenFileDirectCommand +FSi_OpenFileDirectCommand: ; 0x020D011C + ldr r1, [r0, #0x30] + str r1, [r0, #0x24] + ldr r1, [r0, #0x30] + str r1, [r0, #0x2c] + ldr r1, [r0, #0x34] + str r1, [r0, #0x28] + ldr r1, [r0, #0x38] + str r1, [r0, #0x20] + mov r0, #0x0 + bx lr + + arm_func_start FSi_OpenFileFastCommand +FSi_OpenFileFastCommand: ; 0x020D0144 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x14 + mov r5, r0 + ldr r1, [r5, #0x8] + ldr r4, [r5, #0x34] + ldr r0, [r1, #0x30] + mov r2, r4, lsl #0x3 + cmp r2, r0 + addcs sp, sp, #0x14 + movcs r0, #0x1 + ldmcsia sp!, {r4-r5,lr} + bxcs lr + str r1, [sp, #0x8] + ldr r1, [r1, #0x2c] + add r0, sp, #0x8 + add r3, r1, r2 + add r1, sp, #0x0 + mov r2, #0x8 + str r3, [sp, #0xc] + bl FSi_ReadTable +_020D0194: + cmp r0, #0 + addne sp, sp, #0x14 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r1, [sp] + mov r0, r5 + str r1, [r5, #0x30] + ldr r2, [sp, #0x4] + mov r1, #7 + str r2, [r5, #0x34] + str r4, [r5, #0x38] + bl FSi_TranslateCommand + add sp, sp, #0x14 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FSi_GetPathCommand +FSi_GetPathCommand: ; 0x020D01D0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xe4 + mov r4, r0 + ldr r1, [r4, #0x8] + add r0, sp, #0x98 + add r11, r4, #0x30 + str r1, [sp, #0x0] + bl FS_InitFile + ldr r0, [r4, #0x8] + str r0, [sp, #0xa0] + ldr r0, [r4, #0xc] + ands r0, r0, #0x20 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + ldrneh r5, [r4, #0x24] + movne r4, #0x10000 + bne _020D02BC + ldrh r0, [r11, #0x8] + ldr r4, [r4, #0x20] + cmp r0, #0x0 + ldrneh r5, [r11, #0xa] + bne _020D02BC + mov r10, #0x0 + mov r9, r10 + mov r5, #0x10000 + add r8, sp, #0x98 + mov r6, #0x3 + mov r7, #0x1 +_020D0244: + mov r0, r8 + mov r1, r10 + bl FSi_SeekDirDirect + add r2, sp, #0x4 + cmp r10, #0x0 + mov r0, r8 + mov r1, r6 + ldreq r9, [sp, #0xc4] + str r2, [sp, #0xc8] + str r7, [sp, #0xcc] + bl FSi_TranslateCommand +_020D0270: + cmp r0, #0x0 + bne _020D02A8 +_020D0278: + ldr r0, [sp, #0x10] + cmp r0, #0x0 + bne _020D0294 + ldr r0, [sp, #0x8] + cmp r0, r4 + ldreqh r5, [sp, #0xbc] + beq _020D02A8 +_020D0294: + mov r0, r8 + mov r1, r6 + bl FSi_TranslateCommand + cmp r0, #0x0 + beq _020D0278 +_020D02A8: + cmp r5, #0x10000 + bne _020D02BC + add sl, sl, #0x1 + cmp sl, r9 + bcc _020D0244 +_020D02BC: + cmp r5, #0x10000 + moveq r0, #0x0 + streqh r0, [r11, #0x8] + addeq sp, sp, #0xe4 + moveq r0, #0x1 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldrh r0, [r11, #0x8] + cmp r0, #0x0 + bne _020D03B8 + ldr r0, [sp, #0x0] + mov r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, #0xff + addls r9, r1, #0x1 + bls _020D0308 + cmp r0, #0xff00 + addls r9, r1, #0x2 + addhi r9, r1, #0x3 +_020D0308: + cmp r4, #0x10000 + ldrne r0, [sp, #0x14] + add r9, r9, #0x2 + addne r9, r9, r0 + mov r10, r5 + cmp r5, #0x0 + beq _020D03AC + add r0, sp, #0x98 + mov r1, r5 + bl FSi_SeekDirDirect + add r8, sp, #0x98 + mov r6, #0x3 + mov r7, #0x1 +_020D033C: + ldr r1, [sp, #0xc4] + mov r0, r8 + bl FSi_SeekDirDirect + add r2, sp, #0x4 + mov r0, r8 + mov r1, r6 + str r2, [sp, #0xc8] + str r7, [sp, #0xcc] + bl FSi_TranslateCommand +_020D0360: + cmp r0, #0x0 + bne _020D03A0 +_020D0368: + ldr r0, [sp, #0x10] + cmp r0, #0x0 + beq _020D038C + ldrh r0, [sp, #0x8] + cmp r0, sl + ldreq r0, [sp, #0x14] + addeq r0, r0, #0x1 + addeq r9, r9, r0 + beq _020D03A0 +_020D038C: + mov r0, r8 + mov r1, r6 + bl FSi_TranslateCommand + cmp r0, #0x0 + beq _020D0368 +_020D03A0: + ldrh sl, [sp, #0xbc] + cmp sl, #0x0 + bne _020D033C +_020D03AC: + add r0, r9, #0x1 + strh r0, [r11, #0x8] + strh r5, [r11, #0xa] +_020D03B8: + ldr r7, [r11, #0x0] + cmp r7, #0x0 + addeq sp, sp, #0xe4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldrh r6, [r11, #0x8] + ldr r0, [r11, #0x4] + cmp r0, r6 + addcc sp, sp, #0xe4 + movcc r0, #0x1 + ldmccia sp!, {r4-r11,lr} + bxcc lr + ldr r0, [sp, #0x0] + mov r9, #0x0 + ldr r0, [r0, #0x0] + cmp r0, #0xff + movls r8, #0x1 + bls _020D0410 + cmp r0, #0xff00 + movls r8, #0x2 + movhi r8, #0x3 +_020D0410: + ldr r0, [sp, #0x0] + mov r1, r7 + mov r2, r8 + bl MI_CpuCopy8 + add r1, r9, r8 + ldr r0, _020D058C ; =0x0210682C + add r1, r7, r1 + mov r2, #0x2 + bl MI_CpuCopy8 + add r0, sp, #0x98 + mov r1, r5 + bl FSi_SeekDirDirect + cmp r4, #0x10000 + beq _020D04C4 + add r3, sp, #0x4 + mov r2, #0x0 + add r0, sp, #0x98 + mov r1, #0x3 + str r3, [sp, #0xc8] + str r2, [sp, #0xcc] + bl FSi_TranslateCommand +_020D0464: + cmp r0, #0x0 + bne _020D04A0 + add r9, sp, #0x98 + mov r8, #0x3 +_020D0474: + ldr r0, [sp, #0x10] + cmp r0, #0x0 + bne _020D048C + ldr r0, [sp, #0x8] + cmp r0, r4 + beq _020D04A0 +_020D048C: + mov r0, r9 + mov r1, r8 + bl FSi_TranslateCommand + cmp r0, #0x0 + beq _020D0474 +_020D04A0: + ldr r0, [sp, #0x14] + add r1, r7, r6 + add r4, r0, #0x1 + add r0, sp, #0x18 + mov r2, r4 + sub r1, r1, r4 + bl MI_CpuCopy8 + sub r6, r6, r4 + b _020D04D4 +_020D04C4: + add r0, r7, r6 + mov r1, #0x0 + strb r1, [r0, #-0x1] + sub r6, r6, #0x1 +_020D04D4: + cmp r5, #0x0 + beq _020D057C + add r10, sp, #0x98 + add r11, sp, #0x4 + mov r4, #0x3 + mov r9, #0x0 + mov r8, #0x2f +_020D04F0: + ldr r1, [sp, #0xc4] + mov r0, r10 + bl FSi_SeekDirDirect + add r2, r7, r6 + mov r0, r10 + mov r1, r4 + str r11, [sp, #0xc8] + str r9, [sp, #0xcc] + strb r8, [r2, #-0x1] + sub r6, r6, #0x1 + bl FSi_TranslateCommand +_020D051C: + cmp r0, #0x0 + bne _020D0570 +_020D0524: + ldr r0, [sp, #0x10] + cmp r0, #0x0 + beq _020D055C + ldrh r0, [sp, #0x8] + cmp r0, r5 + bne _020D055C + ldr r5, [sp, #0x14] + add r1, r7, r6 + add r0, sp, #0x18 + mov r2, r5 + sub r1, r1, r5 + bl MI_CpuCopy8 + sub r6, r6, r5 + b _020D0570 +_020D055C: + mov r0, sl + mov r1, r4 + bl FSi_TranslateCommand + cmp r0, #0x0 + beq _020D0524 +_020D0570: + ldrh r5, [sp, #0xbc] + cmp r5, #0x0 + bne _020D04F0 +_020D057C: + mov r0, #0x0 + add sp, sp, #0xe4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D058C: .word 0x0210682C + + arm_func_start FSi_FindPathCommand +FSi_FindPathCommand: ; 0x020D0590 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x9c + mov r10, r0 + ldr r2, [r10, #0x40] + ldr r9, [r10, #0x3c] + mov r1, #0x2 + str r2, [sp, #0x0] + bl FSi_TranslateCommand + ldrb r1, [r9, #0x0] + cmp r1, #0x0 + beq _020D0780 + mov r0, #0x2 + add r11, sp, #0x1c + mov r4, #0x3 + mov r5, #0x1 + mov r6, #0x0 + str r0, [sp, #0x4] +_020D05D4: + mov r7, r6 + b _020D05E0 +_020D05DC: + add r7, r7, #0x1 +_020D05E0: + ldrb r8, [r9, r7] + mov r0, r6 + cmp r8, #0x0 + beq _020D0600 + cmp r8, #0x2f + beq _020D0600 + cmp r8, #0x5c + movne r0, r5 +_020D0600: + cmp r0, #0x0 + bne _020D05DC + cmp r8, #0x0 + bne _020D061C + ldr r0, [sp, #0x0] + cmp r0, #0x0 + beq _020D0620 +_020D061C: + mov r8, r5 +_020D0620: + cmp r7, #0x0 + addeq sp, sp, #0x9c + moveq r0, #0x1 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + cmp r1, #0x2e + bne _020D068C + cmp r7, #0x1 + addeq r9, r9, #0x1 + beq _020D0764 + ldrb r0, [r9, #0x1] + cmp r7, #0x2 + moveq r1, r5 + movne r1, r6 + cmp r0, #0x2e + moveq r0, r5 + movne r0, r6 + ands r0, r1, r0 + beq _020D068C + ldrh r0, [r10, #0x24] + cmp r0, #0x0 + beq _020D0684 + ldr r1, [r10, #0x2c] + mov r0, r10 + bl FSi_SeekDirDirect +_020D0684: + add r9, r9, #0x2 + b _020D0764 +_020D068C: + cmp r7, #0x7f + addgt sp, sp, #0x9c + movgt r0, #0x1 + ldmgtia sp!, {r4-r11,lr} + bxgt lr + add r0, sp, #0x8 + str r0, [r10, #0x30] + str r6, [r10, #0x34] +_020D06AC: + mov r0, r10 + mov r1, r4 + bl FSi_TranslateCommand +_020D06B8: + cmp r0, #0x0 + addne sp, sp, #0x9c + movne r0, #0x1 + ldmneia sp!, {r4-r11,lr} + bxne lr + ldr r0, [sp, #0x14] + cmp r8, r0 + bne _020D06AC + ldr r0, [sp, #0x18] + cmp r7, r0 + bne _020D06AC + mov r0, r9 + mov r1, fp + mov r2, r7 + bl FSi_StrNICmp + cmp r0, #0x0 + bne _020D06AC + cmp r8, #0x0 + beq _020D0728 + add r0, sp, #0x8 + add r3, sl, #0x30 + ldmia r0, {r0, r1, r2} + stmia r3, {r0, r1, r2} + ldr r1, [sp, #0x4] + mov r0, sl + add r9, r9, r7 + bl FSi_TranslateCommand + b _020D0764 +_020D0728: + ldr r0, [sp] + cmp r0, #0x0 + addne sp, sp, #0x9c + movne r0, #0x1 + ldmneia sp!, {r4-r11,lr} + bxne lr + ldr r3, [sl, #0x44] + ldr r2, [sp, #0x8] + ldr r1, [sp, #0xC] + add sp, sp, #0x9c + str r2, [r3] + str r1, [r3, #0x4] + mov r0, #0x0 + ldmia sp!, {r4-r11,lr} + bx lr +_020D0764: + ldrb r0, [r9, #0x0] + cmp r0, #0x0 + movne r0, r5 + moveq r0, r6 + ldrb r1, [r9, r0]! + cmp r1, #0x0 + bne _020D05D4 +_020D0780: + ldr r0, [sp, #0x0] + cmp r0, #0x0 + moveq r0, #0x1 + addne r0, r10, #0x20 + ldrne r3, [r10, #0x44] + ldmneia r0, {r0-r2} + stmneia r3, {r0-r2} + movne r0, #0x0 + add sp, sp, #0x9c + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FSi_ReadDirCommand +FSi_ReadDirCommand: ; 0x020D07AC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + ldr r4, [r5, #0x30] + ldr r1, [r5, #0x8] + add r0, sp, #0x4 + str r1, [sp, #0x4] + ldr r3, [r5, #0x28] + add r1, sp, #0x0 + mov r2, #0x1 + str r3, [sp, #0x8] + bl FSi_ReadTable +_020D07DC: + cmp r0, #0x0 + addne sp, sp, #0xC + ldmneia sp!, {r4-r5,lr} + bxne lr + ldrb r1, [sp] + and r2, r1, #0x7F + mov r1, r1, asr #0x7 + str r2, [r4, #0x10] + and r1, r1, #0x1 + str r1, [r4, #0xC] + ldr r2, [r4, #0x10] + cmp r2, #0x0 + addeq sp, sp, #0xC + moveq r0, #0x1 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r1, [r5, #0x34] + cmp r1, #0x0 + bne _020D0858 + add r0, sp, #0x4 + add r1, r4, #0x14 + bl FSi_ReadTable + cmp r0, #0x0 + addne sp, sp, #0xC + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r1, [r4, #0x10] + mov r2, #0x0 + add r1, r4, r1 + strb r2, [r1, #0x14] + b _020D0864 +_020D0858: + ldr r1, [sp, #0x8] + add r1, r1, r2 + str r1, [sp, #0x8] +_020D0864: + ldr r1, [r4, #0xC] + cmp r1, #0x0 + beq _020D08B8 + add r0, sp, #0x4 + add r1, sp, #0x2 + mov r2, #0x2 + bl FSi_ReadTable + cmp r0, #0x0 + addne sp, sp, #0xC + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r2, [r5, #0x8] + ldr r1, _020D08E8 + str r2, [r4] + ldrh r3, [sp, #0x2] + mov r2, #0x0 + and r1, r3, r1 + strh r1, [r4, #0x4] + strh r2, [r4, #0x6] + str r2, [r4, #0x8] + b _020D08D4 +_020D08B8: + ldr r1, [r5, #0x8] + str r1, [r4] + ldrh r1, [r5, #0x26] + str r1, [r4, #0x4] + ldrh r1, [r5, #0x26] + add r1, r1, #0x1 + strh r1, [r5, #0x26] +_020D08D4: + ldr r1, [sp, #0x8] + str r1, [r5, #0x28] + add sp, sp, #0xC + ldmia sp!, {r4-r5,lr} + bx lr +_020D08E8: .word 0x00000FFF + + arm_func_start FSi_SeekDirCommand +FSi_SeekDirCommand: ; 0x020D08EC + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x10 + mov r6, r0 + ldr r5, [r6, #0x8] + add r4, r6, #0x30 + str r5, [sp, #0x8] + ldrh r1, [r4, #0x4] + ldr r2, [r5, #0x34] + add r0, sp, #0x8 + add r3, r2, r1, lsl #0x3 + add r1, sp, #0x0 + mov r2, #0x8 + str r3, [sp, #0xc] + bl FSi_ReadTable + movs r3, r0 + bne _020D0978 + add r12, r6, #0x20 + ldmia r4, {r0-r2} + stmia r12, {r0-r2} + ldrh r0, [r4, #0x6] + cmp r0, #0x0 + bne _020D0968 + ldr r0, [r4, #0x8] + cmp r0, #0x0 + bne _020D0968 + ldrh r0, [sp, #0x4] + strh r0, [r6, #0x26] + ldr r1, [r5, #0x34] + ldr r0, [sp, #0x0] + add r0, r1, r0 + str r0, [r6, #0x28] +_020D0968: + ldrh r1, [sp, #0x6] + ldr r0, _020D0988 ; =0x00000FFF + and r0, r1, r0 + str r0, [r6, #0x2c] +_020D0978: + mov r0, r3 + add sp, sp, #0x10 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D0988: .word 0x00000FFF + + arm_func_start FSi_WriteFileCommand +FSi_WriteFileCommand: ; 0x020D098C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x2c] + ldr r3, [r0, #0x38] + ldr lr, [r0, #0x8] + ldr r1, [r0, #0x30] + add r12, r2, r3 + str r12, [r0, #0x2c] + ldr r12, [lr, #0x4c] + mov r0, lr + blx r12 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FSi_ReadFileCommand +FSi_ReadFileCommand: ; 0x020D09C4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x2c] + ldr r3, [r0, #0x38] + ldr lr, [r0, #0x8] + ldr r1, [r0, #0x30] + add r12, r2, r3 + str r12, [r0, #0x2c] + ldr r12, [lr, #0x48] + mov r0, lr + blx r12 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FSi_SeekDirDirect +FSi_SeekDirDirect: ; 0x020D09FC + ldr r3, [r0, #0xc] + mov r2, #0x0 + orr r3, r3, #0x4 + str r3, [r0, #0xc] + ldr r3, [r0, #0x8] + ldr ip, _020D0A2C ; =FSi_TranslateCommand + str r3, [r0, #0x30] + str r2, [r0, #0x38] + strh r2, [r0, #0x36] + strh r1, [r0, #0x34] + mov r1, #0x2 + bx r12 + .balign 4 +_020D0A2C: .word FSi_TranslateCommand + + arm_func_start FSi_ReadTable +FSi_ReadTable: + stmdb sp!, {r4-r8,lr} + mov r7, r0 + ldr r5, [r7, #0x0] + mov r6, r2 + ldr r2, [r5, #0x1c] + mov r0, r5 + orr r2, r2, #0x200 + str r2, [r5, #0x1c] + ldr r2, [r7, #0x4] + ldr r4, [r5, #0x50] + mov r3, r6 + blx r4 + cmp r0, #0x0 + beq _020D0A7C + cmp r0, #0x1 + beq _020D0A7C + cmp r0, #0x6 + beq _020D0A8C + b _020D0AC8 +_020D0A7C: + ldr r1, [r5, #0x1c] + bic r1, r1, #0x200 + str r1, [r5, #0x1c] + b _020D0AC8 +_020D0A8C: + bl OS_DisableInterrupts + ldr r1, [r5, #0x1c] + mov r4, r0 + ands r0, r1, #0x200 + beq _020D0AB8 + add r8, r5, #0xc +_020D0AA4: + mov r0, r8 + bl OS_SleepThread + ldr r0, [r5, #0x1c] + ands r0, r0, #0x200 + bne _020D0AA4 +_020D0AB8: + mov r0, r4 + bl OS_RestoreInterrupts + ldr r0, [r5, #0x24] + ldr r0, [r0, #0x14] +_020D0AC8: + ldr r1, [r7, #0x4] + add r1, r1, r6 + str r1, [r7, #0x4] + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FSi_StrNICmp +FSi_StrNICmp: ; 0x020D0ADC + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + mov lr, #0x0 + bls _020D0B30 +_020D0AF0: + ldrb r12, [r0, lr] + ldrb r3, [r1, lr] + sub r12, r12, #0x41 + cmp r12, #0x19 + sub r3, r3, #0x41 + addls r12, r12, #0x20 + cmp r3, #0x19 + addls r3, r3, #0x20 + cmp r12, r3 + addne sp, sp, #0x4 + subne r0, r12, r3 + ldmneia sp!, {lr} + bxne lr + add lr, lr, #0x1 + cmp lr, r2 + blo _020D0AF0 +_020D0B30: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FS_NotifyArchiveAsyncEnd +FS_NotifyArchiveAsyncEnd: ; 0x020D0B40 + stmdb sp!, {r4-r6,lr} + mov r4, r0 + ldr r0, [r4, #0x1c] + mov r6, r1 + ands r0, r0, #0x100 + beq _020D0B8C + ldr r2, [r4, #0x1c] + ldr r0, [r4, #0x24] + bic r2, r2, #0x100 + str r2, [r4, #0x1c] + bl FSi_ReleaseCommand + mov r0, r4 + bl FSi_NextCommand +_020D0B74: + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + bl FSi_ExecuteAsyncCommand + ldmia sp!, {r4-r6,lr} + bx lr +_020D0B8C: + ldr r5, [r4, #0x24] + bl OS_DisableInterrupts + str r6, [r5, #0x14] + ldr r1, [r4, #0x1c] + mov r5, r0 + bic r1, r1, #0x200 + add r0, r4, #0xc + str r1, [r4, #0x1c] + bl OS_WakeupThread + mov r0, r5 + bl OS_RestoreInterrupts + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FS_SetArchiveProc +FS_SetArchiveProc: ; 0x020D0BC0 + cmp r2, #0x0 + moveq r1, #0x0 + beq _020D0BD4 + cmp r1, #0x0 + moveq r2, #0x0 +_020D0BD4: + str r1, [r0, #0x54] + str r2, [r0, #0x58] + bx lr + + arm_func_start FS_ResumeArchive +FS_ResumeArchive: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r4, r0 + mov r6, #0x0 + bl OS_DisableInterrupts + ldr r1, [r4, #0x1c] + mov r5, r0 + ands r0, r1, #0x8 + movne r0, #0x1 + moveq r0, r6 + cmp r0, #0x0 + moveq r7, #0x1 + movne r7, #0x0 + cmp r7, #0x0 + bne _020D0C34 + ldr r1, [r4, #0x1c] + mov r0, r4 + bic r1, r1, #0x8 + str r1, [r4, #0x1c] + bl FSi_NextCommand + mov r6, r0 +_020D0C34: + mov r0, r5 + bl OS_RestoreInterrupts +_020D0C3C: + cmp r6, #0x0 + beq _020D0C4C + mov r0, r6 + bl FSi_ExecuteAsyncCommand +_020D0C4C: + mov r0, r7 + add sp, sp, #0x4 + ldmia sp!, {r4-r7, lr} + bx lr + + arm_func_start FS_SuspendArchive +FS_SuspendArchive: ; 0x020D0C5C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r0 + bl OS_DisableInterrupts + ldr r1, [r6, #0x1c] + mov r4, r0 + ands r0, r1, #0x8 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + moveq r5, #0x1 + movne r5, #0x0 + cmp r5, #0x0 + beq _020D0CD4 + ldr r0, [r6, #0x1c] + ands r0, r0, #0x10 + beq _020D0CC8 + ldr r0, [r6, #0x1c] + orr r0, r0, #0x40 + str r0, [r6, #0x1c] + add r7, r6, #0x14 +_020D0CB0: + mov r0, r7 + bl OS_SleepThread + ldr r0, [r6, #0x1c] + ands r0, r0, #0x40 + bne _020D0CB0 + b _020D0CD4 +_020D0CC8: + ldr r0, [r6, #0x1c] + orr r0, r0, #0x8 + str r0, [r6, #0x1c] +_020D0CD4: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FS_UnloadArchiveTables +FS_UnloadArchiveTables: ; 0x020D0CEC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r0, [r5, #0x1c] + mov r4, #0x0 + ands r0, r0, #0x2 + movne r0, #0x1 + moveq r0, r4 + cmp r0, #0x0 + beq _020D0D74 + mov r0, r5 + bl FS_SuspendArchive + ldr r1, [r5, #0x1c] + ands r1, r1, #0x4 + movne r1, #0x1 + moveq r1, #0x0 + cmp r1, #0x0 + beq _020D0D64 + ldr r2, [r5, #0x1c] + mov r1, #0x0 + bic r2, r2, #0x4 + str r2, [r5, #0x1c] + ldr r4, [r5, #0x44] + str r1, [r5, #0x44] + ldr r1, [r5, #0x3c] + str r1, [r5, #0x2c] + ldr r1, [r5, #0x40] + str r1, [r5, #0x34] + ldr r1, [r5, #0x48] + str r1, [r5, #0x50] +_020D0D64: + cmp r0, #0x0 + beq _020D0D74 + mov r0, r5 + bl FS_ResumeArchive +_020D0D74: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_020D0D84 +FUN_020D0D84: ; 0x020D0D84 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4c + mov r7, r0 + ldr r3, [r7, #0x30] + ldr r0, [r7, #0x38] + mov r6, r1 + add r0, r3, r0 + add r0, r0, #0x20 + add r0, r0, #0x1f + bic r5, r0, #0x1f + cmp r5, r2 + bhi _020D0E9C + add r1, r6, #0x1f + add r0, sp, #0x4 + bic r4, r1, #0x1f + bl FS_InitFile + ldr r2, [r7, #0x2c] + mvn r0, #0x0 + str r0, [sp, #0x0] + ldr r3, [r7, #0x30] + add r0, sp, #0x4 + mov r1, r7 + add r3, r2, r3 + bl FS_OpenFileDirect +_020D0DE4: + cmp r0, #0x0 + beq _020D0E1C + ldr r2, [r7, #0x30] + add r0, sp, #0x4 + mov r1, r4 + bl FS_ReadFile + cmp r0, #0x0 + bge _020D0E14 + ldr r2, [r7, #0x30] + mov r0, r4 + mov r1, #0x0 + bl MI_CpuFill8 +_020D0E14: + add r0, sp, #0x4 + bl FS_CloseFile +_020D0E1C: + str r4, [r7, #0x2C] + ldr ip, [r7, #0x30] + ldr r2, [r7, #0x34] + mvn r0, #0x0 + str r0, [sp] + ldr r3, [r7, #0x38] + add r0, sp, #0x4 + mov r1, r7 + add r3, r2, r3 + add r4, r4, ip + bl FS_OpenFileDirect + cmp r0, #0x0 + beq _020D0E80 + ldr r2, [r7, #0x38] + add r0, sp, #0x4 + mov r1, r4 + bl FS_ReadFile + cmp r0, #0x0 + bge _020D0E78 + ldr r2, [r7, #0x38] + mov r0, r4 + mov r1, #0x0 + bl MI_CpuFill8 +_020D0E78: + add r0, sp, #0x4 + bl FS_CloseFile +_020D0E80: + str r4, [r7, #0x34] + ldr r0, _020D0EAC + str r6, [r7, #0x44] + str r0, [r7, #0x50] + ldr r0, [r7, #0x1C] + orr r0, r0, #0x4 + str r0, [r7, #0x1C] +_020D0E9C: + mov r0, r5 + add sp, sp, #0x4C + ldmia sp!, {r4-r7,lr} + bx lr +_020D0EAC: + .word FSi_ReadMemoryCore + + arm_func_start FUN_020D0EB0 +FUN_020D0EB0: ; 0x020D0EB0 + stmdb sp!, {r4-r8,lr} + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, [r5, #0x1c] + mov r4, r0 + ands r0, r1, #0x2 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + beq _020D0F64 + mov r0, r5 + ldr r1, [r5, #0x1c] + bl FS_SuspendArchive + ldr r1, [r5, #0x1c] + mov r7, r0 + orr r0, r1, #0x80 + str r0, [r5, #0x1c] + ldr r0, [r5, #0x24] + cmp r0, #0x0 + beq _020D0F1C + mov r6, #0x3 +_020D0F04: + ldr r8, [r0, #0x4] + mov r1, r6 + bl FSi_ReleaseCommand + mov r0, r8 + cmp r8, #0x0 + bne _020D0F04 +_020D0F1C: + mov r0, #0x0 + str r0, [r5, #0x24] + cmp r7, #0x0 + beq _020D0F34 + mov r0, r5 + bl FS_ResumeArchive +_020D0F34: + mov r0, #0x0 + str r0, [r5, #0x28] + str r0, [r5, #0x2c] + str r0, [r5, #0x30] + str r0, [r5, #0x34] + str r0, [r5, #0x38] + str r0, [r5, #0x40] + ldr r0, [r5, #0x40] + str r0, [r5, #0x3c] + ldr r0, [r5, #0x1c] + bic r0, r0, #0xa2 + str r0, [r5, #0x1c] +_020D0F64: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FS_LoadArchive +FS_LoadArchive: ; 0x020D0F78 + str r1, [r0, #0x28] + str r3, [r0, #0x30] + str r2, [r0, #0x3c] + ldr r1, [r0, #0x3c] + ldr r2, [sp, #0x4] + str r1, [r0, #0x2c] + str r2, [r0, #0x38] + ldr r1, [sp, #0x0] + ldr r2, [sp, #0x8] + str r1, [r0, #0x40] + ldr r1, [r0, #0x40] + cmp r2, #0x0 + str r1, [r0, #0x34] + ldreq r2, _020D0FE8 ; =FSi_ReadMemCallback + ldr r1, [sp, #0xc] + str r2, [r0, #0x48] + cmp r1, #0x0 + ldreq r1, _020D0FEC ; =FSi_WriteMemCallback + str r1, [r0, #0x4c] + ldr r2, [r0, #0x48] + mov r1, #0x0 + str r2, [r0, #0x50] + str r1, [r0, #0x44] + ldr r1, [r0, #0x1c] + orr r1, r1, #0x2 + str r1, [r0, #0x1c] + mov r0, #0x1 + bx lr + .balign 4 +_020D0FE8: .word FSi_ReadMemCallback +_020D0FEC: .word FSi_WriteMemCallback + + arm_func_start FUN_020D0FF0 +FUN_020D0FF0: ; 0x020D0FF0 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x0] + cmp r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + bl OS_DisableInterrupts + ldr r2, [r4, #0x4] + mov r3, #0x0 + cmp r2, #0x0 + ldrne r1, [r4, #0x8] + strne r1, [r2, #0x8] + ldr r2, [r4, #0x8] + cmp r2, #0x0 + ldrne r1, [r4, #0x4] + strne r1, [r2, #0x4] + str r3, [r4, #0x0] + str r3, [r4, #0x8] + ldr r1, [r4, #0x8] + ldr r2, _020D1080 ; =0x021D53EC + str r1, [r4, #0x4] + ldr r1, [r4, #0x1c] + bic r1, r1, #0x1 + str r1, [r4, #0x1c] + ldr r1, [r2, #0x0] + cmp r1, r4 + bne _020D1074 + ldr r1, _020D1084 ; =0x021D53E8 + str r3, [r2, #0x8] + ldr r1, [r1, #0x0] + strh r3, [r2, #0x6] + str r1, [r2, #0x0] + strh r3, [r2, #0x4] +_020D1074: + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D1080: .word 0x021D53EC +_020D1084: .word 0x021D53E8 + + arm_func_start FS_RegisterArchiveName +FS_RegisterArchiveName: ; 0x020D1088 + stmdb sp!, {r4-r8,lr} + mov r6, r1 + mov r5, r2 + mov r7, r0 + mov r8, #0x0 + bl OS_DisableInterrupts + mov r4, r0 + mov r0, r6 + mov r1, r5 + bl FS_FindArchive +_020D10B0: + cmp r0, #0x0 + bne _020D112C + ldr r1, _020D1140 + ldr r2, [r1] + cmp r2, #0x0 + bne _020D10E8 + ldr r0, _020D1144 + mov r2, r8 + str r7, [r1] + str r7, [r0] + str r2, [r0, #0x8] + strh r2, [r0, #0x6] + strh r2, [r0, #0x4] + b _020D110C +_020D10E8: + ldr r0, [r2, #0x4] + cmp r0, #0x0 + beq _020D1104 +_020D10F4: + mov r2, r0 + ldr r0, [r0, #0x4] + cmp r0, #0x0 + bne _020D10F4 +_020D1104: + str r7, [r2, #0x4] + str r2, [r7, #0x8] +_020D110C: + mov r0, r6 + mov r1, r5 + bl FSi_GetPackedName + str r0, [r7] + ldr r0, [r7, #0x1C] + mov r8, #0x1 + orr r0, r0, #0x1 + str r0, [r7, #0x1C] +_020D112C: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, r8 + ldmia sp!, {r4-r8,lr} + bx lr +_020D1140: .word 0x021D53E8 +_020D1144: .word 0x021D53EC + + arm_func_start FS_FindArchive +FS_FindArchive: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl FSi_GetPackedName + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020D1194 ; =0x021D53E8 + ldr r4, [r1, #0x0] + b _020D116C +_020D1168: + ldr r4, [r4, #0x4] +_020D116C: + cmp r4, #0x0 + beq _020D1180 + ldr r1, [r4, #0x0] + cmp r1, r5 + bne _020D1168 +_020D1180: + bl OS_RestoreInterrupts + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D1194: .word 0x021D53E8 + + arm_func_start FS_InitArchive +FS_InitArchive: ; 0x020D1198 + stmdb sp!, {r4,lr} + mov r1, #0x0 + mov r2, #0x5c + mov r4, r0 + bl MI_CpuFill8 + mov r1, #0x0 + str r1, [r4, #0x10] + ldr r0, [r4, #0x10] + str r0, [r4, #0xc] + str r1, [r4, #0x18] + ldr r0, [r4, #0x18] + str r0, [r4, #0x14] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FSi_SendCommand +FSi_SendCommand: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + ldr r6, [r7, #0x8] + mov r2, #0x1 + str r1, [r7, #0x10] + mov r0, #0x2 + str r0, [r7, #0x14] + ldr r0, [r7, #0xc] + mov r5, r2, lsl r1 + orr r0, r0, #0x1 + str r0, [r7, #0xc] + bl OS_DisableInterrupts + ldr r1, [r6, #0x1c] + mov r4, r0 + ands r0, r1, #0x80 + beq _020D1238 + mov r0, r7 + mov r1, #0x3 + bl FSi_ReleaseCommand + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020D1238: + ands r0, r5, #0x1fc + ldrne r0, [r7, #0xc] + add r2, r6, #0x20 + orrne r0, r0, #0x4 + strne r0, [r7, #0xc] + ldr r1, [r7, #0x0] + ldr r0, [r7, #0x4] + cmp r1, #0x0 + strne r0, [r1, #0x4] + cmp r0, #0x0 + strne r1, [r0, #0x0] + ldr r0, [r2, #0x4] + cmp r0, #0x0 + beq _020D1280 +_020D1270: + mov r2, r0 + ldr r0, [r0, #0x4] + cmp r0, #0x0 + bne _020D1270 +_020D1280: + str r7, [r2, #0x4] + str r2, [r7, #0x0] + mov r1, #0x0 + str r1, [r7, #0x4] + ldr r0, [r6, #0x1c] + ands r0, r0, #0x8 + movne r1, #0x1 + cmp r1, #0x0 + bne _020D132C + ldr r0, [r6, #0x1c] + ands r0, r0, #0x10 + bne _020D132C + ldr r1, [r6, #0x1c] + mov r0, r4 + orr r1, r1, #0x10 + str r1, [r6, #0x1c] + bl OS_RestoreInterrupts + ldr r0, [r6, #0x58] + ands r0, r0, #0x200 + beq _020D12E0 + ldr r2, [r6, #0x54] + mov r0, r7 + mov r1, #0x9 + blx r2 +_020D12E0: + bl OS_DisableInterrupts + ldr r1, [r7, #0xc] + orr r1, r1, #0x40 + str r1, [r7, #0xc] + ldr r1, [r7, #0xc] + ands r1, r1, #0x4 + movne r1, #0x1 + moveq r1, #0x0 + cmp r1, #0x0 + bne _020D1324 + bl OS_RestoreInterrupts + mov r0, r7 + bl FSi_ExecuteAsyncCommand + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020D1324: + bl OS_RestoreInterrupts + b _020D1378 +_020D132C: + ldr r0, [r7, #0xc] + ands r0, r0, #0x4 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + bne _020D135C + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020D135C: + add r0, r7, #0x18 + bl OS_SleepThread + ldr r0, [r7, #0xc] + ands r0, r0, #0x40 + beq _020D135C + mov r0, r4 + bl OS_RestoreInterrupts +_020D1378: + mov r0, r7 + bl FSi_ExecuteSyncCommand + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FSi_ExecuteSyncCommand +FSi_ExecuteSyncCommand: ; 0x020D138C + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r1, [r4, #0x10] + bl FSi_TranslateCommand + mov r1, r0 + mov r0, r4 + bl FSi_ReleaseCommand + ldr r0, [r4, #0x8] + bl FSi_NextCommand +_020D13B0: + cmp r0, #0x0 + beq _020D13BC + bl FSi_ExecuteAsyncCommand +_020D13BC: + ldr r0, [r4, #0x14] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FSi_ExecuteAsyncCommand +FSi_ExecuteAsyncCommand: ; 0x020D13D4 + stmdb sp!, {r4-r8,lr} + movs r6, r0 + ldr r5, [r6, #0x8] + ldmeqia sp!, {r4-r8,lr} + bxeq lr + mov r7, #0x0 + mov r8, #0x1 +_020D13F0: + bl OS_DisableInterrupts + ldr r1, [r6, #0xc] + mov r4, r0 + orr r0, r1, #0x40 + str r0, [r6, #0xc] + ldr r0, [r6, #0xc] + ands r0, r0, #0x4 + movne r0, r8 + moveq r0, r7 + cmp r0, #0x0 + beq _020D1434 + add r0, r6, #0x18 + bl OS_WakeupThread + mov r0, r4 + bl OS_RestoreInterrupts + ldmia sp!, {r4-r8,lr} + bx lr +_020D1434: + ldr r1, [r6, #0xc] + mov r0, r4 + orr r1, r1, #0x8 + str r1, [r6, #0xc] + bl OS_RestoreInterrupts + ldr r1, [r6, #0x10] + mov r0, r6 + bl FSi_TranslateCommand + cmp r0, #0x6 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + mov r0, r5 + bl FSi_NextCommand + movs r6, r0 + bne _020D13F0 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FSi_NextCommand +FSi_NextCommand: + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4c + mov r6, r0 + bl OS_DisableInterrupts + ldr r1, [r6, #0x1c] + mov r5, r0 + ands r0, r1, #0x20 + beq _020D1500 + ldr r0, [r6, #0x1c] + bic r0, r0, #0x20 + str r0, [r6, #0x1c] + ldr r0, [r6, #0x24] + cmp r0, #0x0 + beq _020D1500 + mov r8, #0x0 + mov r9, #0x1 + mov r7, #0x3 +_020D14BC: + ldr r1, [r0, #0xc] + ldr r4, [r0, #0x4] + ands r1, r1, #0x2 + movne r1, r9 + moveq r1, r8 + cmp r1, #0x0 + beq _020D14F4 + ldr r1, [r6, #0x24] + cmp r1, r0 + mov r1, r7 + streq r4, [r6, #0x24] + bl FSi_ReleaseCommand +_020D14EC: + cmp r4, #0x0 + ldreq r4, [r6, #0x24] +_020D14F4: + mov r0, r4 + cmp r4, #0x0 + bne _020D14BC +_020D1500: + ldr r0, [r6, #0x1c] + ands r0, r0, #0x40 + bne _020D15EC + ldr r0, [r6, #0x1c] + ands r0, r0, #0x8 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + bne _020D15EC + ldr r4, [r6, #0x24] + cmp r4, #0x0 + beq _020D15EC + ldr r0, [r6, #0x1c] + ands r0, r0, #0x10 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + moveq r7, #0x1 + movne r7, #0x0 + cmp r7, #0x0 + ldrne r0, [r6, #0x1c] + orrne r0, r0, #0x10 + strne r0, [r6, #0x1c] + mov r0, r5 + bl OS_RestoreInterrupts +_020D1564: + cmp r7, #0x0 + beq _020D1588 + ldr r0, [r6, #0x58] + ands r0, r0, #0x200 + beq _020D1588 + ldr r2, [r6, #0x54] + mov r0, r4 + mov r1, #0x9 + blx r2 +_020D1588: + bl OS_DisableInterrupts + ldr r1, [r4, #0xC] + mov r5, r0 + orr r0, r1, #0x40 + str r0, [r4, #0xC] + ldr r0, [r4, #0xC] + ands r0, r0, #0x4 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + beq _020D15D4 + add r0, r4, #0x18 + bl OS_WakeupThread + mov r0, r5 + bl OS_RestoreInterrupts + add sp, sp, #0x4c + mov r0, #0x0 + ldmia sp!, {r4-r9, lr} + bx lr +_020D15D4: + mov r0, r5 + bl OS_RestoreInterrupts + add sp, sp, #0x4c + mov r0, r4 + ldmia sp!, {r4-r9, lr} + bx lr +_020D15EC: + ldr r0, [r6, #0x1c] + ands r0, r0, #0x10 + beq _020D162C + ldr r0, [r6, #0x1c] + bic r0, r0, #0x10 + str r0, [r6, #0x1c] + ldr r0, [r6, #0x58] + ands r0, r0, #0x400 + beq _020D162C + add r0, sp, #0x0 + bl FS_InitFile + str r6, [sp, #0x8] + ldr r2, [r6, #0x54] + add r0, sp, #0x0 + mov r1, #0xa + blx r2 +_020D162C: + ldr r0, [r6, #0x1c] + ands r0, r0, #0x40 + beq _020D1658 + ldr r1, [r6, #0x1c] + add r0, r6, #0x14 + bic r1, r1, #0x40 + str r1, [r6, #0x1c] + ldr r1, [r6, #0x1c] + orr r1, r1, #0x8 + str r1, [r6, #0x1c] + bl OS_WakeupThread +_020D1658: + mov r0, r5 + bl OS_RestoreInterrupts +_020D1660: + mov r0, #0x0 + add sp, sp, #0x4c + ldmia sp!, {r4-r9, lr} + bx lr + + arm_func_start FSi_ReadMemoryCore +FSi_ReadMemoryCore: ; 0x020D1670 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, r2 + mov r2, r3 + bl MI_CpuCopy8 +_020D1684: + mov r0, #0x0 + add sp, sp, #0x4 + ldmfd sp!, {lr} + bx lr + + arm_func_start FSi_WriteMemCallback +FSi_WriteMemCallback: ; 0x020D1694 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r12, [r0, #0x28] + mov r0, r1 + add r1, r12, r2 + mov r2, r3 + bl MI_CpuCopy8 +_020D16B0: + mov r0, #0x0 + add sp, sp, #0x4 + ldmfd sp!, {lr} + bx lr + + arm_func_start FSi_ReadMemCallback +FSi_ReadMemCallback: ; 0x020D16C0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, [r0, #0x28] + add r0, r0, r2 + mov r2, r3 + bl MI_CpuCopy8 +_020D16D8: + mov r0, #0x0 + add sp, sp, #0x4 + ldmfd sp!, {lr} + bx lr + + arm_func_start FSi_GetPackedName +FSi_GetPackedName: ; 0x020D16E8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r1, #0x3 + mov lr, #0x0 + bgt _020D173C + mov r12, lr + cmp r1, #0x0 + ble _020D173C + mov r3, lr +_020D170C: + ldrb r2, [r0, r12] + cmp r2, #0x0 + beq _020D173C + sub r2, r2, #0x41 + cmp r2, #0x19 + addls r2, r2, #0x61 + addhi r2, r2, #0x41 + add r12, r12, #0x1 + orr lr, lr, r2, lsl r3 + cmp r12, r1 + add r3, r3, #0x8 + blt _020D170C +_020D173C: + mov r0, lr + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FS_ChangeDir +FS_ChangeDir: ; 0x020D174C + stmdb sp!, {r4,lr} + sub sp, sp, #0x58 + mov r4, r0 + add r0, sp, #0xc + bl FS_InitFile + add r0, sp, #0xc + add r3, sp, #0x0 + mov r1, r4 + mov r2, #0x0 + bl FSi_FindPath +_020D1774: + cmp r0, #0x0 + moveq r0, #0x0 + addne r0, sp, #0x0 + ldrne r3, _020D179C + ldmneia r0, {r0, r1, r2} + stmneia r3, {r0, r1, r2} + movne r0, #0x1 + add sp, sp, #0x58 + ldmia sp!, {r4, lr} + bx lr +_020D179C: .word 0x021D53EC + + arm_func_start FS_SeekFile +FS_SeekFile: ; 0x020D17A0 + cmp r2, #0x0 + beq _020D17BC + cmp r2, #0x1 + beq _020D17C8 + cmp r2, #0x2 + beq _020D17D4 + b _020D17E0 +_020D17BC: + ldr r2, [r0, #0x24] + add r1, r1, r2 + b _020D17E8 +_020D17C8: + ldr r2, [r0, #0x2c] + add r1, r1, r2 + b _020D17E8 +_020D17D4: + ldr r2, [r0, #0x28] + add r1, r1, r2 + b _020D17E8 +_020D17E0: + mov r0, #0x0 + bx lr +_020D17E8: + ldr r2, [r0, #0x24] + cmp r1, r2 + movlt r1, r2 + ldr r2, [r0, #0x28] + cmp r1, r2 + movgt r1, r2 + str r1, [r0, #0x2c] + mov r0, #0x1 + bx lr + + arm_func_start FS_ReadFile +FS_ReadFile: ; 0x020D180C + ldr ip, _020D1818 ; =FUN_020D1AAC + mov r3, #0x0 + bx r12 + .balign 4 +_020D1818: .word FUN_020D1AAC + + arm_func_start FS_ReadFileAsync +FS_ReadFileAsync: ; 0x020D181C + ldr ip, _020D1828 ; =FUN_020D1AAC + mov r3, #0x1 + bx r12 + .balign 4 +_020D1828: .word FUN_020D1AAC + + arm_func_start FS_WaitAsync +FS_WaitAsync: ; 0x020D182C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r0 + mov r5, #0x0 + bl OS_DisableInterrupts + ldr r1, [r6, #0xc] + mov r4, r0 + ands r0, r1, #0x1 + movne r0, #0x1 + moveq r0, r5 + cmp r0, #0x0 + beq _020D18BC + ldr r0, [r6, #0xc] + ands r0, r0, #0x44 + moveq r5, #0x1 + movne r5, #0x0 + cmp r5, #0x0 + beq _020D189C + ldr r0, [r6, #0xc] + orr r0, r0, #0x4 + str r0, [r6, #0xc] + add r7, r6, #0x18 +_020D1884: + mov r0, r7 + bl OS_SleepThread + ldr r0, [r6, #0xc] + ands r0, r0, #0x40 + beq _020D1884 + b _020D18BC +_020D189C: + add r0, r6, #0x18 + bl OS_SleepThread + ldr r0, [r6, #0xc] + ands r0, r0, #0x1 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + bne _020D189C +_020D18BC: + mov r0, r4 + bl OS_RestoreInterrupts +_020D18C4: + cmp r5, #0x0 + beq _020D18E0 + mov r0, r6 + bl FSi_ExecuteSyncCommand + add sp, sp, #4 + ldmia sp!, {r4-r7,lr} + bx lr +_020D18E0: + ldr r0, [r6, #0x14] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FS_CloseFile +FS_CloseFile: ; 0x020D18FC + stmdb sp!, {r4,lr} + mov r1, #0x8 + mov r4, r0 + bl FSi_SendCommand +_020D190C: + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + mov r0, #0x0 + str r0, [r4, #0x8] + mov r0, #0xE + str r0, [r4, #0x10] + ldr r1, [r4, #0xC] + mov r0, #0x1 + bic r1, r1, #0x30 + str r1, [r4, #0xC] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FS_OpenFile +FS_OpenFile: ; 0x020D1944 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + mov r4, r0 + add r0, sp, #0x0 + bl FS_ConvertPathToFileID +_020D1958: + cmp r0, #0x0 + beq _020D1984 + add r1, sp, #0x0 + mov r0, r4 + ldmia r1, {r1, r2} + bl FS_OpenFileFast + cmp r0, #0x0 + addne sp, sp, #0x8 + movne r0, #0x1 + ldmneia sp!, {r4, lr} + bxne lr +_020D1984: + mov r0, #0x0 + add sp, sp, #0x8 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start FS_OpenFileFast +FS_OpenFileFast: + stmdb sp!, {r0-r3} + stmdb sp!, {r4,lr} + ldr r1, [sp, #0xc] + mov r4, r0 + cmp r1, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + addeq sp, sp, #0x10 + bxeq lr + str r1, [r4, #0x8] + ldr r3, [sp, #0xc] + ldr r2, [sp, #0x10] + mov r1, #0x6 + str r3, [r4, #0x30] + str r2, [r4, #0x34] + bl FSi_SendCommand +_020D19D4: + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4, lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r1, [r4, #0xC] + mov r0, #0x1 + orr r1, r1, #0x10 + str r1, [r4, #0xC] + ldr r1, [r4, #0xC] + bic r1, r1, #0x20 + str r1, [r4, #0xC] + ldmia sp!, {r4, lr} + add sp, sp, #0x10 + bx lr + + arm_func_start FS_OpenFileDirect +FS_OpenFileDirect: + stmdb sp!, {r4,lr} + mov r4, r0 + str r1, [r4, #0x8] + ldr r12, [sp, #0x8] + mov r1, #0x7 + str r12, [r4, #0x38] + str r2, [r4, #0x30] + str r3, [r4, #0x34] + bl FSi_SendCommand +_020D1A34: + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4, lr} + bxeq lr + ldr r1, [r4, #0xC] + mov r0, #0x1 + orr r1, r1, #0x10 + str r1, [r4, #0xC] + ldr r1, [r4, #0xC] + bic r1, r1, #0x20 + str r1, [r4, #0xC] + ldmia sp!, {r4, lr} + bx lr + + arm_func_start FS_ConvertPathToFileID +FS_ConvertPathToFileID: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4c + mov r5, r0 + add r0, sp, #0x0 + mov r4, r1 + bl FS_InitFile +_020D1A80: + add r0, sp, #0x0 + mov r1, r4 + mov r2, r5 + mov r3, #0x0 + bl FSi_FindPath + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4C + ldmia sp!, {r4-r5, lr} + bx lr + + arm_func_start FUN_020D1AAC +FUN_020D1AAC: ; 0x020D1AAC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + ldr r4, [r7, #0x2c] + ldr r0, [r7, #0x28] + mov r6, r2 + str r1, [r7, #0x30] + sub r0, r0, r4 + cmp r6, r0 + movgt r6, r0 + cmp r6, #0x0 + movlt r6, #0x0 + str r2, [r7, #0x34] + mov r5, r3 + str r6, [r7, #0x38] + cmp r5, #0x0 + ldreq r0, [r7, #0xc] + mov r1, #0x0 + orreq r0, r0, #0x4 + streq r0, [r7, #0xc] + mov r0, r7 + bl FSi_SendCommand +_020D1B04: + cmp r5, #0x0 + bne _020D1B24 + mov r0, r7 + bl FS_WaitAsync + cmp r0, #0x0 + ldrne r0, [r7, #0x2C] + subne r6, r0, r4 + mvneq r6, #0x0 +_020D1B24: + mov r0, r6 + add sp, sp, #0x4 + ldmia sp!, {r4-r7, lr} + bx lr + + arm_func_start FSi_FindPath +FSi_FindPath: + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + mov r7, r1 + ldrb r1, [r7, #0x0] + mov r8, r0 + mov r6, r2 + mov r5, r3 + cmp r1, #0x2f + beq _020D1B60 + cmp r1, #0x5c + bne _020D1B84 +_020D1B60: + ldr r0, _020D1C90 ; =0x021D53EC + mov r1, #0x0 + ldr r0, [r0, #0x0] + strh r1, [sp, #0x4] + str r0, [sp, #0x0] + str r1, [sp, #0x8] + strh r1, [sp, #0x6] + add r7, r7, #0x1 + b _020D1C40 +_020D1B84: + ldr r0, _020D1C90 ; =0x021D53EC + add r3, sp, #0x0 + ldmia r0, {r0-r2} + stmia r3, {r0-r2} + mov r4, #0x0 +_020D1B98: + ldrb r0, [r7, r4] + cmp r0, #0x0 + beq _020D1C40 + cmp r0, #0x2f + beq _020D1C40 + cmp r0, #0x5c + beq _020D1C40 + cmp r0, #0x3a + bne _020D1C34 + mov r0, r7 + mov r1, r4 + bl FS_FindArchive +_020D1BC8: + cmp r0, #0x0 + addeq sp, sp, #0x10 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r1, [r0, #0x1C] + ands r1, r1, #0x2 + movne r1, #0x1 + moveq r1, #0x0 + cmp r1, #0x0 + addeq sp, sp, #0x10 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + mov r1, #0x0 + str r0, [sp] + str r1, [sp, #0x8] + strh r1, [sp, #0x6] + strh r1, [sp, #0x4] + add r0, r4, #0x1 + ldrb r0, [r7, r0]! + cmp r0, #0x2f + beq _020D1C2C + cmp r0, #0x5c + bne _020D1C40 +_020D1C2C: + add r7, r7, #0x1 + b _020D1C40 +_020D1C34: + add r4, r4, #0x1 + cmp r4, #0x3 + ble _020D1B98 +_020D1C40: + ldr r1, [sp, #0x0] + add r0, sp, #0x0 + str r1, [r8, #0x8] + str r7, [r8, #0x3c] + add r3, r8, #0x30 + ldmia r0, {r0-r2} + stmia r3, {r0-r2} + cmp r5, #0x0 + movne r0, #0x1 + strne r0, [r8, #0x40] + strne r5, [r8, #0x44] + moveq r0, #0x0 + streq r0, [r8, #0x40] + mov r0, r8 + mov r1, #0x4 + streq r6, [r8, #0x44] + bl FSi_SendCommand + add sp, sp, #0x10 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D1C90: .word 0x021D53EC + + arm_func_start FS_InitFile +FS_InitFile: + mov r3, #0x0 + str r3, [r0, #0x0] + ldr r2, [r0, #0x0] + mov r1, #0xe + str r2, [r0, #0x4] + str r3, [r0, #0x1c] + ldr r2, [r0, #0x1c] + str r2, [r0, #0x18] + str r3, [r0, #0x8] + str r1, [r0, #0x10] + str r3, [r0, #0xc] + bx lr + + arm_func_start FS_IsAvailable +FS_IsAvailable: ; 0x020D1CC4 + ldr r0, _020D1CD0 ; =0x021D53F8 + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D1CD0: .word 0x021D53F8 + + arm_func_start FS_Init +FS_Init: ; 0x020D1CD4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D1D0C ; =0x021D53F8 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + mov r2, #0x1 + str r2, [r1, #0x0] + bl FSi_InitRom + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D1D0C: .word 0x021D53F8 + + arm_func_start FS_TryLoadTable +FS_TryLoadTable: ; 0x020D1D10 + ldr ip, _020D1D28 ; =FUN_020D0D84 + mov r3, r0 + mov r2, r1 + ldr r0, _020D1D2C ; =0x021D5414 + mov r1, r3 + bx r12 + .balign 4 +_020D1D28: .word FUN_020D0D84 +_020D1D2C: .word 0x021D5414 + + arm_func_start FS_SetDefaultDMA +FS_SetDefaultDMA: ; 0x020D1D30 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + bl OS_DisableInterrupts + mov r5, r0 + ldr r1, _020D1D7C ; =0x021D5400 + ldr r0, _020D1D80 ; =0x021D5414 + ldr r4, [r1, #0x0] + bl FS_SuspendArchive + ldr r1, _020D1D7C ; =0x021D5400 + cmp r0, #0x0 + str r6, [r1, #0x0] + beq _020D1D68 + ldr r0, _020D1D80 ; =0x021D5414 + bl FS_ResumeArchive +_020D1D68: + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D1D7C: .word 0x021D5400 +_020D1D80: .word 0x021D5414 + + arm_func_start FSi_InitRom +FSi_InitRom: ; 0x020D1D84 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x14 + ldr r1, _020D1EE8 ; =0x021D5400 + str r0, [r1, #0x0] + bl OS_GetLockID + ldr r3, _020D1EEC ; =0x021D53FC + ldr r2, _020D1EF0 ; =0x021D5404 + mov r12, #0x0 + ldr r1, _020D1EF4 ; =0x021D540C + str r0, [r3, #0x0] + str r12, [r2, #0x0] + str r12, [r2, #0x4] + str r12, [r1, #0x0] + str r12, [r1, #0x4] + bl CARD_Init + ldr r0, _020D1EF8 ; =0x021D5414 + bl FS_InitArchive + ldr r0, _020D1EF8 ; =0x021D5414 + ldr r1, _020D1EFC ; =0x02106830 + mov r2, #0x3 + bl FS_RegisterArchiveName + ldr r0, _020D1F00 ; =0x027FFC40 + ldrh r0, [r0, #0x0] + cmp r0, #0x2 + bne _020D1E4C + ldr ip, _020D1EF0 ; =0x021D5404 + mvn r2, #0x0 + ldr r3, _020D1EF4 ; =0x021D540C + mov lr, #0x0 + ldr r0, _020D1EF8 ; =0x021D5414 + ldr r1, _020D1F04 ; =FSi_EmptyArchiveProc + str r2, [r12, #0x0] + str lr, [r12, #0x4] + str r2, [r3, #0x0] + str lr, [r3, #0x4] + bl FS_SetArchiveProc + mov r1, #0x0 + str r1, [sp, #0x0] + ldr r0, _020D1F08 ; =FSi_ReadDummyCallback + str r1, [sp, #0x4] + str r0, [sp, #0x8] + ldr ip, _020D1F0C ; =FSi_WriteDummyCallback + ldr r0, _020D1EF8 ; =0x021D5414 + mov r2, r1 + mov r3, r1 + str r12, [sp, #0xc] + bl FS_LoadArchive + add sp, sp, #0x14 + ldmia sp!, {r4-r5,lr} + bx lr +_020D1E4C: + ldr r5, _020D1F10 ; =0x027FFE40 + ldr r0, _020D1EF8 ; =0x021D5414 + ldr r1, _020D1F14 ; =FSi_RomArchiveProc + ldr r2, _020D1F18 ; =0x00000602 + ldr r4, _020D1F1C ; =0x027FFE48 + bl FS_SetArchiveProc + ldr r1, [r5, #0x0] + mvn r0, #0x0 + cmp r1, r0 + addeq sp, sp, #0x14 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + cmp r1, #0x0 + addeq sp, sp, #0x14 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r2, [r4, #0x0] + cmp r2, r0 + addeq sp, sp, #0x14 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + cmp r2, #0x0 + addeq sp, sp, #0x14 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + str r1, [sp, #0x0] + ldr r0, [r5, #0x4] + ldr r1, _020D1F20 ; =FSi_ReadRomCallback + str r0, [sp, #0x4] + ldr r0, _020D1F0C ; =FSi_WriteDummyCallback + str r1, [sp, #0x8] + str r0, [sp, #0xc] + ldr r3, [r4, #0x4] + ldr r0, _020D1EF8 ; =0x021D5414 + mov r1, #0x0 + bl FS_LoadArchive + add sp, sp, #0x14 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D1EE8: .word 0x021D5400 +_020D1EEC: .word 0x021D53FC +_020D1EF0: .word 0x021D5404 +_020D1EF4: .word 0x021D540C +_020D1EF8: .word 0x021D5414 +_020D1EFC: .word 0x02106830 +_020D1F00: .word 0x027FFC40 +_020D1F04: .word FSi_EmptyArchiveProc +_020D1F08: .word FSi_ReadDummyCallback +_020D1F0C: .word FSi_WriteDummyCallback +_020D1F10: .word 0x027FFE40 +_020D1F14: .word FSi_RomArchiveProc +_020D1F18: .word 0x00000602 +_020D1F1C: .word 0x027FFE48 +_020D1F20: .word FSi_ReadRomCallback + + arm_func_start FSi_EmptyArchiveProc +FSi_EmptyArchiveProc: ; 0x020D1F24 + mov r0, #0x4 + bx lr + + arm_func_start FSi_ReadDummyCallback +FSi_ReadDummyCallback: ; 0x020D1F2C + mov r0, #0x1 + bx lr + + arm_func_start FSi_RomArchiveProc +FSi_RomArchiveProc: ; 0x020D1F34 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r1, #0x1 + beq _020D1FA0 + cmp r1, #0x9 + beq _020D1F58 + cmp r1, #0xa + beq _020D1F7C + b _020D1FB0 +_020D1F58: + ldr r0, _020D1FC0 ; =0x021D53FC + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl CARD_LockRom + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {lr} + bx lr +_020D1F7C: + ldr r0, _020D1FC0 ; =0x021D53FC + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl CARD_UnlockRom + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {lr} + bx lr +_020D1FA0: + add sp, sp, #0x4 + mov r0, #0x4 + ldmia sp!, {lr} + bx lr +_020D1FB0: + mov r0, #0x8 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D1FC0: .word 0x021D53FC + + arm_func_start FSi_WriteDummyCallback +FSi_WriteDummyCallback: ; 0x020D1FC4 + mov r0, #0x1 + bx lr + + arm_func_start FSi_ReadRomCallback +FSi_ReadRomCallback: ; 0x020D1FCC + stmdb sp!, {lr} + sub sp, sp, #0xc + ldr ip, _020D2010 ; =FSi_OnRomReadDone + mov lr, r1 + str r12, [sp, #0x0] + str r0, [sp, #0x4] + mov r1, #0x1 + ldr r0, _020D2014 ; =0x021D5400 + str r1, [sp, #0x8] + mov r1, r2 + ldr r0, [r0, #0x0] + mov r2, lr + bl CARDi_ReadRom + mov r0, #0x6 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_020D2010: .word FSi_OnRomReadDone +_020D2014: .word 0x021D5400 + + arm_func_start FSi_OnRomReadDone +FSi_OnRomReadDone: ; 0x020D2018 + stmdb sp!, {r4,lr} + mov r4, r0 + bl CARD_IsPulledOut +_020D2024: + cmp r0, #0x0 + movne r1, #0x5 + moveq r1, #0x0 + mov r0, r4 + bl FS_NotifyArchiveAsyncEnd + ldmia sp!, {r4,lr} + bx lr + + + arm_func_start FS_UnloadOverlay +FS_UnloadOverlay: ; 0x020D2040 + stmdb sp!, {lr} + sub sp, sp, #0x2c + mov r3, r0 + mov r2, r1 + add r0, sp, #0x0 + mov r1, r3 + bl FS_LoadOverlayInfo +_020D205C: + cmp r0, #0x0 + beq _020D2074 + add r0, sp, #0x0 + bl FS_UnloadOverlayImage + cmp r0, #0x0 + bne _020D2084 +_020D2074: + add sp, sp, #0x2c + mov r0, #0x0 + ldmfd sp!, {lr} + bx lr +_020D2084: + mov r0, #0x1 + add sp, sp, #0x2c + ldmfd sp!, {lr} + bx lr + + arm_func_start FS_LoadOverlay +FS_LoadOverlay: ; 0x020D2094 + stmdb sp!, {lr} + sub sp, sp, #0x2c + mov r3, r0 + mov r2, r1 + add r0, sp, #0x0 + mov r1, r3 + bl FS_LoadOverlayInfo +_020D20B0: + cmp r0, #0x0 + beq _020D20C8 + add r0, sp, #0x0 + bl FS_LoadOverlayImage + cmp r0, #0x0 + bne _020D20D8 +_020D20C8: + add sp, sp, #0x2c + mov r0, #0x0 + ldmfd sp!, {lr} + bx lr +_020D20D8: + add r0, sp, #0x0 + bl FS_StartOverlay + mov r0, #0x1 + add sp, sp, #0x2c + ldmfd sp!, {lr} + bx lr + + arm_func_start FS_UnloadOverlayImage +FS_UnloadOverlayImage: ; 0x020D20F0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FS_EndOverlay + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FS_EndOverlay +FS_EndOverlay: ; 0x020D210C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr r8, _020D220C ; =0x021D74C8 + mov r11, r0 + mov r9, #0x0 +_020D2120: + ldr r1, [r11, #0x8] + ldr r0, [r11, #0xc] + ldr r5, [r11, #0x4] + add r0, r1, r0 + mov r7, r9 + mov r6, r9 + add r4, r5, r0 + bl OS_DisableInterrupts + ldr lr, [r8, #0x0] + mov r10, r9 + mov r12, lr + cmp lr, #0x0 + beq _020D21C4 +_020D2154: + ldr r2, [r12, #0x8] + ldr r3, [r12, #0x0] + cmp r2, #0x0 + ldr r1, [r12, #0x4] + bne _020D2178 + cmp r1, r5 + blo _020D2178 + cmp r1, r4 + blo _020D2188 +_020D2178: + cmp r2, r5 + blo _020D21B4 + cmp r2, r4 + bhs _020D21B4 +_020D2188: + cmp r6, #0x0 + strne r12, [r6, #0x0] + moveq r7, r12 + cmp lr, r12 + streq r3, [r8, #0x0] + moveq lr, r3 + str r9, [r12, #0x0] + cmp r10, #0x0 + mov r6, r12 + strne r3, [r10, #0x0] + b _020D21B8 +_020D21B4: + mov r10, r12 +_020D21B8: + mov r12, r3 + cmp r3, #0x0 + bne _020D2154 +_020D21C4: + bl OS_RestoreInterrupts +_020D21C8: + cmp r7, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r11, lr} + bxeq lr +_020D21D8: + ldr r1, [r7, #0x4] + ldr r4, [r7] + cmp r1, #0x0 + beq _020D21F0 + ldr r0, [r7, #0x8] + blx r1 +_020D21F0: + mov r7, r4 + cmp r4, #0x0 + bne _020D21D8 + b _020D2120 + add sp, sp, #0x4 + ldmia sp!, {r4-r11, lr} + bx lr +_020D220C: .word 0x021D74C8 + + arm_func_start FS_StartOverlay +FS_StartOverlay: ; 0x020D2210 + stmdb sp!, {r4-r6,lr} + mov r5, r0 + bl FSi_GetOverlayBinarySize + ldr r1, _020D2300 ; =0x027FFC40 + mov r4, r0 + ldrh r0, [r1, #0x0] + cmp r0, #0x2 + bne _020D22A4 + ldrb r1, [r5, #0x1f] + mov r0, #0x0 + ands r1, r1, #0x2 + beq _020D2280 + ldr r1, _020D2304 ; =0x02106F84 + ldr r3, _020D2308 ; =0x02106F84 + ldr r2, _020D230C ; =0x66666667 + sub r12, r1, r3 + smull r1, lr, r2, r12 + mov lr, lr, asr #0x3 + mov r1, r12, lsr #0x1f + ldr r2, [r5, #0x0] + add lr, r1, lr + cmp r2, lr + bhs _020D2280 + mov r0, #0x14 + mla r0, r2, r0, r3 + ldr r1, [r5, #0x4] + mov r2, r4 + bl FSi_CompareDigest +_020D2280: + cmp r0, #0x0 + bne _020D22A4 + ldr r0, [r5, #0x4] + mov r2, r4 + mov r1, #0x0 + bl MI_CpuFill8 + bl OS_Terminate + ldmia sp!, {r4-r6,lr} + bx lr +_020D22A4: + ldrb r0, [r5, #0x1f] + ands r0, r0, #0x1 + beq _020D22BC + ldr r0, [r5, #0x4] + add r0, r0, r4 + bl MIi_UncompressBackward +_020D22BC: + ldr r0, [r5, #0x4] + ldr r1, [r5, #0x8] + bl DC_FlushRange + ldr r6, [r5, #0x10] + ldr r4, [r5, #0x14] + cmp r6, r4 + ldmcsia sp!, {r4-r6,lr} + bxcs lr +_020D22DC: + ldr r0, [r6, #0x0] + cmp r0, #0x0 + beq _020D22EC + blx r0 +_020D22EC: + add r6, r6, #0x4 + cmp r6, r4 + blo _020D22DC + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D2300: .word 0x027FFC40 +_020D2304: .word 0x02106F84 +_020D2308: .word 0x02106F84 +_020D230C: .word 0x66666667 + + arm_func_start FSi_CompareDigest +FSi_CompareDigest: + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x58 + mov r4, r0 + mov r6, r1 + mov r5, r2 + add r0, sp, #0x4 + mov r1, #0x0 + mov r2, #0x14 + bl MI_CpuFill8 + ldr r0, _020D23AC ; =0x02106834 + ldr r1, _020D23B0 ; =0x02106838 + ldr r0, [r0, #0x0] + ldr r2, [r1, #0x0] + add r1, sp, #0x18 + bl MI_CpuCopy8 + ldr r3, _020D23B0 ; =0x02106838 + mov r1, r6 + ldr r12, [r3, #0x0] + mov r2, r5 + add r0, sp, #0x4 + add r3, sp, #0x18 + str r12, [sp, #0x0] + bl MATH_CalcHMACSHA1 + add r2, sp, #0x4 + mov r3, #0x0 +_020D2374: + ldr r1, [r2, #0x0] + ldr r0, [r4, r3] + cmp r1, r0 + bne _020D2394 + add r3, r3, #0x4 + cmp r3, #0x14 + add r2, r2, #0x4 + blo _020D2374 +_020D2394: + cmp r3, #0x14 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x58 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D23AC: .word 0x02106834 +_020D23B0: .word 0x02106838 + + arm_func_start FS_LoadOverlayImage +FS_LoadOverlayImage: ; 0x020D23B4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x54 + mov r5, r0 + add r0, sp, #0x8 + bl FS_InitFile +_020D23C8: + add r0, sp, #0x0 + mov r1, r5 + bl FS_GetOverlayFileID + add r1, sp, #0x0 + add r0, sp, #0x8 + ldmia r1, {r1, r2} + bl FS_OpenFileFast + cmp r0, #0x0 + addeq sp, sp, #0x54 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5, lr} + bxeq lr + mov r0, r5 + bl FSi_GetOverlayBinarySize + mov r4, r0 + mov r0, r5 + bl FS_ClearOverlayImage + ldr r1, [r5, #0x4] + add r0, sp, #0x8 + mov r2, r4 + bl FS_ReadFile + cmp r4, r0 + beq _020D243C + add r0, sp, #0x8 + bl FS_CloseFile + add sp, sp, #0x54 + mov r0, #0x0 + ldmia sp!, {r4-r5, lr} + bx lr +_020D243C: + add r0, sp, #0x8 + bl FS_CloseFile + mov r0, #0x1 + add sp, sp, #0x54 + ldmia sp!, {r4-r5, lr} + bx lr + + arm_func_start FS_LoadOverlayImageAsync +FS_LoadOverlayImageAsync: ; 0x020D2454 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r5, r1 + mov r6, r0 + mov r0, r5 + bl FS_InitFile +_020D246C: + add r0, sp, #0x0 + mov r1, r6 + bl FS_GetOverlayFileID + add r1, sp, #0x0 + mov r0, r5 + ldmia r1, {r1, r2} + bl FS_OpenFileFast + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6, lr} + bxeq lr + mov r0, r6 + bl FSi_GetOverlayBinarySize + mov r4, r0 + mov r0, r6 + bl FS_ClearOverlayImage + ldr r1, [r6, #0x4] + mov r0, r5 + mov r2, r4 + bl FS_ReadFileAsync + cmp r4, r0 + addeq sp, sp, #0x8 + moveq r0, #0x1 + ldmeqia sp!, {r4-r6, lr} + bxeq lr + mov r0, r5 + bl FS_CloseFile + mov r0, #0x0 + add sp, sp, #0x8 + ldmia sp!, {r4-r6, lr} + bx lr + + arm_func_start FS_LoadOverlayInfo +FS_LoadOverlayInfo: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x64 + movs r4, r1 + mov r5, r0 + ldreq r0, _020D25EC ; =0x021D5404 + ldrne r0, _020D25F0 ; =0x021D540C + ldr r3, [r0, #0x0] + cmp r3, #0x0 + beq _020D25A8 + ldr r0, [r0, #0x4] + mov r2, r2, lsl #0x5 + cmp r2, r0 + addcs sp, sp, #0x64 + movcs r0, #0x0 + ldmcsia sp!, {r4-r5,lr} + bxcs lr + add r0, r3, r2 + mov r1, r5 + mov r2, #0x20 + bl MI_CpuCopy8 + add r0, sp, #0x18 + str r4, [r5, #0x20] + bl FS_InitFile + add r0, sp, #0x10 + mov r1, r5 + bl FS_GetOverlayFileID + add r1, sp, #0x10 + add r0, sp, #0x18 + ldmia r1, {r1-r2} + bl FS_OpenFileFast +_020D2564: + cmp r0, #0x0 + addeq sp, sp, #0x64 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r1, [sp, #0x3c] + add r0, sp, #0x18 + str r1, [r5, #0x24] + ldr r2, [sp, #0x40] + ldr r1, [sp, #0x3c] + sub r1, r2, r1 + str r1, [r5, #0x28] + bl FS_CloseFile + add sp, sp, #0x64 + mov r0, #0x1 + ldmia sp!, {r4-r5,lr} + bx lr +_020D25A8: + ldr r1, _020D25F4 ; =0x027FFE50 + ldr ip, _020D25F8 ; =0x027FFE58 + ldr r0, [r1, #0x0] + ldr r3, _020D25FC ; =0x021D5414 + str r0, [sp, #0x0] + ldr r1, [r1, #0x4] + mov r0, r5 + str r1, [sp, #0x4] + ldr r5, [r12, #0x0] + mov r1, r4 + str r5, [sp, #0x8] + ldr r4, [r12, #0x4] + str r4, [sp, #0xc] + bl FSi_LoadOverlayInfoCore + add sp, sp, #0x64 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D25EC: .word 0x021D5404 +_020D25F0: .word 0x021D540C +_020D25F4: .word 0x027FFE50 +_020D25F8: .word 0x027FFE58 +_020D25FC: .word 0x021D5414 + + arm_func_start FSi_LoadOverlayInfoCore +FSi_LoadOverlayInfoCore: ; 0x020D2600 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x54 + movs r9, r1 + ldreq r5, [sp, #0x74] + ldreq r6, [sp, #0x70] + ldrne r5, [sp, #0x7c] + ldrne r6, [sp, #0x78] + mov r7, r2, lsl #0x5 + cmp r7, r5 + mov r4, r0 + mov r8, r3 + addcs sp, sp, #0x54 + movcs r0, #0x0 + ldmcsia sp!, {r4-r9,lr} + bxcs lr + add r0, sp, #0xc + bl FS_InitFile + mvn r12, #0x0 + add r0, sp, #0xc + mov r1, r8 + add r2, r6, r7 + add r3, r6, r5 + str r12, [sp, #0x0] + bl FS_OpenFileDirect +_020D2660: + cmp r0, #0 + addeq sp, sp, #0x54 + moveq r0, #0 + ldmeqia sp!, {r4-r9, lr} + bxeq lr + add r0, sp, #12 + mov r1, r4 + mov r2, #32 + bl FS_ReadFile + cmp r0, #32 + beq _020D26A4 + add r0, sp, #12 + bl FS_CloseFile + add sp, sp, #0x54 + mov r0, #0x0 + ldmia sp!, {r4-r9, lr} + bx lr +_020D26A4: + add r0, sp, #0xC + bl FS_CloseFile + add r0, sp, #0x4 + mov r1, r4 + str r9, [r4, #0x20] + bl FS_GetOverlayFileID + add r1, sp, #0x4 + add r0, sp, #0xC + ldmia r1, {r1, r2} + bl FS_OpenFileFast + cmp r0, #0x0 + addeq sp, sp, #0x54 + moveq r0, #0x0 + ldmeqia sp!, {r4-r9, lr} + bxeq lr + ldr r1, [sp, #0x30] + add r0, sp, #0xC + str r1, [r4, #0x24] + ldr r2, [sp, #0x34] + ldr r1, [sp, #0x30] + sub r1, r2, r1 + str r1, [r4, #0x28] + bl FS_CloseFile + mov r0, #0x1 + add sp, sp, #0x54 + ldmia sp!, {r4-r9, lr} + bx lr + + arm_func_start FS_GetOverlayFileID +FS_GetOverlayFileID: ; 0x020D2710 + sub sp, sp, #0x8 + ldr r2, _020D2734 ; =0x021D5414 + str r2, [sp, #0x0] + ldr r1, [r1, #0x18] + str r1, [sp, #0x4] + str r2, [r0, #0x0] + str r1, [r0, #0x4] + add sp, sp, #0x8 + bx lr + .balign 4 +_020D2734: .word 0x021D5414 + + arm_func_start FS_ClearOverlayImage +FS_ClearOverlayImage: ; 0x020D2738 + stmdb sp!, {r4-r6,lr} + ldr r5, [r0, #0x8] + ldr r1, [r0, #0xc] + ldr r6, [r0, #0x4] + add r4, r5, r1 + mov r0, r6 + mov r1, r4 + bl IC_InvalidateRange + mov r0, r6 + mov r1, r4 + bl DC_InvalidateRange + add r0, r6, r5 + sub r2, r4, r5 + mov r1, #0x0 + bl MI_CpuFill8 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FSi_GetOverlayBinarySize +FSi_GetOverlayBinarySize: ; 0x020D277C + ldrb r1, [r0, #0x1f] + ands r1, r1, #0x1 + ldrne r0, [r0, #0x1c] + movne r0, r0, lsl #0x8 + movne r0, r0, lsr #0x8 + ldreq r0, [r0, #0x8] + bx lr + + arm_func_start ProcessBlock +ProcessBlock: ; 0x020D2798 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + add r3, r0, #0x18 + ldr r5, [r0, #0x0] + ldr r4, [r0, #0x4] + ldr lr, [r0, #0x8] + ldr r12, [r0, #0xc] + ldr r2, _020D2B78 ; =0x02106900 + mov r8, r3 + mov r7, #0x0 +_020D27C0: + mvn r1, r4 + and r6, r4, lr + and r1, r1, r12 + orr r1, r6, r1 + ldr r6, [r8, #0x0] + add r1, r5, r1 + ldr r5, [r2, #0x0] + add r1, r6, r1 + add r5, r5, r1 + mov r1, r5, lsl #0x7 + orr r1, r1, r5, lsr #0x19 + add r5, r4, r1 + mvn r1, r5 + and r6, r5, r4 + and r1, r1, lr + orr r1, r6, r1 + ldr r6, [r8, #0x4] + add r1, r12, r1 + ldr r9, [r2, #0x4] + add r1, r6, r1 + add r6, r9, r1 + mov r1, r6, lsl #0xc + orr r1, r1, r6, lsr #0x14 + add r12, r5, r1 + mvn r1, r12 + and r6, r12, r5 + and r1, r1, r4 + orr r6, r6, r1 + add r1, r8, #0xc + ldr r9, [r8, #0x8] + add r6, lr, r6 + add r6, r9, r6 + ldr r9, [r2, #0x8] + ldr r1, [r1, #0x0] + add r10, r9, r6 + add r6, r2, #0xc + ldr r6, [r6, #0x0] + mov r9, r10, lsl #0x11 + orr r9, r9, r10, lsr #0xf + add lr, r12, r9 + add r2, r2, #0x10 + add r8, r8, #0x10 + and r10, lr, r12 + mvn r9, lr + and r9, r9, r5 + orr r9, r10, r9 + add r4, r4, r9 + add r1, r1, r4 + add r4, r6, r1 + mov r1, r4, lsl #0x16 + orr r1, r1, r4, lsr #0xa + add r4, lr, r1 + add r7, r7, #0x1 + cmp r7, #0x4 + blt _020D27C0 + ldr r6, _020D2B7C ; =0x02106840 + mov r1, #0x0 +_020D28A4: + mvn r7, r12 + ldr r9, [r6, #0x0] + and r8, r4, r12 + and r7, lr, r7 + orr r7, r8, r7 + ldr r8, [r3, r9, lsl #0x2] + add r5, r5, r7 + ldr r7, [r2, #0x0] + add r5, r8, r5 + add r7, r7, r5 + mov r5, r7, lsl #0x5 + orr r5, r5, r7, lsr #0x1b + add r5, r4, r5 + mvn r8, lr + ldr r7, [r6, #0x4] + and r9, r5, lr + and r8, r4, r8 + orr r10, r9, r8 + mvn r8, r4 + ldr r9, [r6, #0x8] + ldr r11, [r3, r7, lsl #0x2] + add r7, r12, r10 + add r10, r11, r7 + add r7, r6, #0xc + ldr r9, [r3, r9, lsl #0x2] + and r8, r5, r8 + ldr r7, [r7, #0x0] + ldr r11, [r2, #0x4] + ldr r7, [r3, r7, lsl #0x2] + add r11, r11, r10 + mov r10, r11, lsl #0x9 + orr r10, r10, r11, lsr #0x17 + add r12, r5, r10 + ldr r10, [r2, #0x8] + and r11, r12, r4 + orr r8, r11, r8 + add r8, lr, r8 + add r8, r9, r8 + add r10, r10, r8 + add r8, r2, #0xc + ldr r8, [r8, #0x0] + mov r9, r10, lsl #0xe + orr r9, r9, r10, lsr #0x12 + add lr, r12, r9 + add r2, r2, #0x10 + add r6, r6, #0x10 + and r10, lr, r5 + mvn r9, r5 + and r9, r12, r9 + orr r9, r10, r9 + add r4, r4, r9 + add r4, r7, r4 + add r7, r8, r4 + mov r4, r7, lsl #0x14 + orr r4, r4, r7, lsr #0xc + add r4, lr, r4 + add r1, r1, #0x1 + cmp r1, #0x4 + blt _020D28A4 + mov r7, #0x0 +_020D2994: + ldr r8, [r6, #0x0] + eor r1, r4, lr + eor r1, r12, r1 + add r1, r5, r1 + ldr r8, [r3, r8, lsl #0x2] + ldr r5, [r2, #0x0] + add r1, r8, r1 + add r5, r5, r1 + mov r1, r5, lsl #0x4 + orr r1, r1, r5, lsr #0x1c + add r5, r4, r1 + ldr r8, [r6, #0x4] + eor r1, r5, r4 + eor r1, lr, r1 + ldr r8, [r3, r8, lsl #0x2] + add r1, r12, r1 + ldr r9, [r6, #0x8] + ldr r10, [r2, #0x4] + add r1, r8, r1 + add r8, r10, r1 + mov r1, r8, lsl #0xb + orr r1, r1, r8, lsr #0x15 + add r12, r5, r1 + eor r8, r12, r5 + eor r8, r4, r8 + ldr r9, [r3, r9, lsl #0x2] + add r8, lr, r8 + add r9, r9, r8 + ldr r10, [r2, #0x8] + add r1, r2, #0xc + ldr r8, [r6, #0xc] + add r10, r10, r9 + ldr r9, [r3, r8, lsl #0x2] + mov r8, r10, lsl #0x10 + orr r8, r8, r10, lsr #0x10 + add lr, r12, r8 + eor r8, lr, r12 + eor r8, r5, r8 + add r4, r4, r8 + add r7, r7, #0x1 + ldr r1, [r1, #0x0] + add r4, r9, r4 + add r4, r1, r4 + mov r1, r4, lsl #0x17 + orr r1, r1, r4, lsr #0x9 + add r2, r2, #0x10 + add r6, r6, #0x10 + add r4, lr, r1 + cmp r7, #0x4 + blt _020D2994 + mov r10, #0x0 +_020D2A60: + mvn r1, r12 + ldr r7, [r6, #0x0] + orr r1, r4, r1 + eor r1, lr, r1 + ldr r7, [r3, r7, lsl #0x2] + add r1, r5, r1 + ldr r5, [r2, #0x0] + add r1, r7, r1 + add r5, r5, r1 + mov r1, r5, lsl #0x6 + orr r1, r1, r5, lsr #0x1a + add r5, r4, r1 + mvn r1, lr + ldr r7, [r6, #0x4] + orr r1, r5, r1 + eor r1, r4, r1 + ldr r8, [r6, #0x8] + ldr r7, [r3, r7, lsl #0x2] + add r1, r12, r1 + ldr r9, [r2, #0x4] + add r1, r7, r1 + add r9, r9, r1 + mov r7, r9, lsl #0xa + add r1, r6, #0xc + orr r9, r7, r9, lsr #0x16 + ldr r1, [r1, #0x0] + add r7, r2, #0xc + add r12, r5, r9 + ldr r8, [r3, r8, lsl #0x2] + ldr r7, [r7, #0x0] + ldr r1, [r3, r1, lsl #0x2] + ldr r9, [r2, #0x8] + mvn r11, r4 + orr r11, r12, r11 + eor r11, r5, r11 + add r11, lr, r11 + add r8, r8, r11 + add r9, r9, r8 + mov r8, r9, lsl #0xf + orr r8, r8, r9, lsr #0x11 + add lr, r12, r8 + add r2, r2, #0x10 + add r6, r6, #0x10 + mvn r8, r5 + orr r8, lr, r8 + eor r8, r12, r8 + add r4, r4, r8 + add r1, r1, r4 + add r4, r7, r1 + mov r1, r4, lsl #0x15 + orr r1, r1, r4, lsr #0xb + add r4, lr, r1 + add r10, r10, #0x1 + cmp r10, #0x4 + blt _020D2A60 + ldr r1, [r0, #0x0] + add r1, r1, r5 + str r1, [r0, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, r4 + str r1, [r0, #0x4] + ldr r1, [r0, #0x8] + add r1, r1, lr + str r1, [r0, #0x8] + ldr r1, [r0, #0xc] + add r1, r1, r12 + str r1, [r0, #0xc] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D2B78: .word 0x02106900 +_020D2B7C: .word 0x02106840 + + arm_func_start MATH_MD5GetHash +MATH_MD5GetHash: ; 0x020D2B80 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r1 + ldr r1, [r6, #0x14] + ldr r3, [r6, #0x10] + mov r7, r0 + mov r4, r1, lsl #0x3 + ldr r1, _020D2C40 ; =0x0210683C + mov r0, r6 + mov r2, #0x1 + orr r4, r4, r3, lsr #0x1d + mov r5, r3, lsl #0x3 + bl MATH_MD5Update + ldr r0, [r6, #0x10] + mov r1, #0x0 + and r3, r0, #0x3f + rsb r2, r3, #0x40 + cmp r2, #0x8 + bhs _020D2BE8 + add r0, r6, #0x18 + add r0, r0, r3 + bl MI_CpuFill8 + mov r0, r6 + bl ProcessBlock + mov r3, #0x0 + mov r2, #0x40 +_020D2BE8: + cmp r2, #0x8 + bls _020D2C04 + add r0, r6, #0x18 + add r0, r0, r3 + sub r2, r2, #0x8 + mov r1, #0x0 + bl MI_CpuFill8 +_020D2C04: + str r5, [r6, #0x50] + mov r0, r6 + str r4, [r6, #0x54] + bl ProcessBlock + mov r0, r6 + mov r1, r7 + mov r2, #0x10 + bl MI_CpuCopy8 + mov r0, r6 + mov r1, #0x0 + mov r2, #0x58 + bl MI_CpuFill8 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D2C40: .word 0x0210683C + + arm_func_start MATH_MD5Update +MATH_MD5Update: ; 0x020D2C44 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r8, r0 + add r12, r8, #0x10 + ldr r4, [r8, #0x10] + mov r6, r2 + and r3, r4, #0x3f + ldr r0, [r12, #0x4] + adds r4, r4, r6 + str r4, [r8, #0x10] + adc r0, r0, #0x0 + rsb r5, r3, #0x40 + mov r7, r1 + str r0, [r12, #0x4] + cmp r5, r6 + bls _020D2CB0 + cmp r6, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + add r1, r8, #0x18 + mov r0, r7 + add r1, r1, r3 + bl MI_CpuCopy8 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr +_020D2CB0: + add r1, r8, #0x18 + mov r0, r7 + mov r2, r5 + add r1, r1, r3 + bl MI_CpuCopy8 + mov r0, r8 + bl ProcessBlock + sub r6, r6, r5 + mov r4, r6, lsr #0x6 + cmp r4, #0x0 + add r9, r7, r5 + ble _020D2D10 + add r7, r8, #0x18 + mov r5, #0x40 +_020D2CE8: + mov r0, r9 + mov r1, r7 + mov r2, r5 + bl MI_CpuCopy8 + mov r0, r8 + add r9, r9, #0x40 + bl ProcessBlock + sub r4, r4, #0x1 + cmp r4, #0x0 + bgt _020D2CE8 +_020D2D10: + ands r2, r6, #0x3f + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + mov r0, r9 + add r1, r8, #0x18 + bl MI_CpuCopy8 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start MATH_MD5Init +MATH_MD5Init: ; 0x020D2D38 + ldr r2, _020D2D68 ; =0x67452301 + ldr r1, _020D2D6C ; =0xEFCDAB89 + str r2, [r0, #0x0] + ldr r2, _020D2D70 ; =0x98BADCFE + str r1, [r0, #0x4] + ldr r1, _020D2D74 ; =0x10325476 + str r2, [r0, #0x8] + str r1, [r0, #0xc] + mov r1, #0x0 + str r1, [r0, #0x10] + str r1, [r0, #0x14] + bx lr + .balign 4 +_020D2D68: .word 0x67452301 +_020D2D6C: .word 0xEFCDAB89 +_020D2D70: .word 0x98BADCFE +_020D2D74: .word 0x10325476 + + arm_func_start MATH_CalcHMACSHA1 +MATH_CalcHMACSHA1: ; 0x020D2D78 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0xa0 + ldr lr, _020D2E00 ; =0x02106A04 + add r12, sp, #0x1c + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, r3 + mov r4, r12 + ldmia lr!, {r0-r3} + stmia r12!, {r0-r3} + ldmia lr, {r0-r2} + stmia r12, {r0-r2} + add lr, sp, #0x38 + add r12, sp, #0x8 + str lr, [sp, #0x24] + ldr lr, _020D2E04 ; =MATH_SHA1Init + str r12, [sp, #0x28] + ldr ip, _020D2E08 ; =MATH_SHA1Update + str lr, [sp, #0x2c] + ldr lr, _020D2E0C ; =MATH_SHA1GetHash + str r12, [sp, #0x30] + ldr r12, [sp, #0xb8] + str lr, [sp, #0x34] + str r12, [sp, #0x0] + mov r3, r5 + mov r0, r8 + mov r1, r7 + mov r2, r6 + str r4, [sp, #0x4] + bl MATHi_CalcHMAC + add sp, sp, #0xa0 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D2E00: .word 0x02106A04 +_020D2E04: .word MATH_SHA1Init +_020D2E08: .word MATH_SHA1Update +_020D2E0C: .word MATH_SHA1GetHash + + arm_func_start MATH_SHA1GetHash +MATH_SHA1GetHash: ; 0x020D2E10 + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r6,lr} + ldr r0, [sp, #0x10] + mov r6, r1 + ldr r3, [r0, #0x1c] + add r5, r0, #0x20 + ands r1, r3, #0x3 + mov r0, r3, asr #0x2 + moveq r1, #0x0 + streq r1, [r5, r0, lsl #0x2] + ldr r2, [sp, #0x10] + mov r1, #0x80 + add r4, r2, #0x20 + strb r1, [r4, r3] + add r3, r3, #0x1 + ands r1, r3, #0x3 + beq _020D2E68 + mov r2, #0x0 +_020D2E58: + strb r2, [r4, r3] + add r3, r3, #0x1 + ands r1, r3, #0x3 + bne _020D2E58 +_020D2E68: + ldr r1, [sp, #0x10] + add r0, r0, #0x1 + ldr r1, [r1, #0x1c] + cmp r1, #0x38 + blt _020D2EB4 + cmp r0, #0x10 + bge _020D2E98 + mov r1, #0x0 +_020D2E88: + str r1, [r5, r0, lsl #0x2] + add r0, r0, #0x1 + cmp r0, #0x10 + blt _020D2E88 +_020D2E98: + ldr r1, _020D3008 ; =0x02106A00 + ldr r0, [sp, #0x10] + ldr r3, [r1, #0x0] + mov r1, r5 + mov r2, #0x40 + blx r3 + mov r0, #0x0 +_020D2EB4: + cmp r0, #0xe + bge _020D2ED0 + mov r1, #0x0 +_020D2EC0: + str r1, [r5, r0, lsl #0x2] + add r0, r0, #0x1 + cmp r0, #0xe + blt _020D2EC0 +_020D2ED0: + ldr r0, [sp, #0x10] + mov r1, r5 + ldr r2, [r0, #0x14] + ldr r3, _020D3008 ; =0x02106A00 + strb r2, [r4, #0x3f] + mov r0, r2, lsr #0x8 + strb r0, [r4, #0x3e] + mov r0, r2, lsr #0x10 + strb r0, [r4, #0x3d] + mov r0, r2, lsr #0x18 + strb r0, [r4, #0x3c] + ldr r0, [sp, #0x10] + mov r2, #0x40 + ldr r5, [r0, #0x18] + strb r5, [r4, #0x3b] + mov r0, r5, lsr #0x8 + strb r0, [r4, #0x3a] + mov r0, r5, lsr #0x10 + strb r0, [r4, #0x39] + mov r0, r5, lsr #0x18 + strb r0, [r4, #0x38] + ldr r0, [sp, #0x10] + ldr r3, [r3, #0x0] + blx r3 + ldr r0, [sp, #0x10] + add r1, sp, #0x10 + ldr r3, [r0, #0x0] + mov r0, #0x0 + mov r2, r3, lsr #0x18 + strb r2, [r6, #0x0] + mov r2, r3, lsr #0x10 + strb r2, [r6, #0x1] + mov r2, r3, lsr #0x8 + strb r2, [r6, #0x2] + strb r3, [r6, #0x3] + ldr r3, [sp, #0x10] + mov r2, #0x4 + ldr r4, [r3, #0x4] + mov r3, r4, lsr #0x18 + strb r3, [r6, #0x4] + mov r3, r4, lsr #0x10 + strb r3, [r6, #0x5] + mov r3, r4, lsr #0x8 + strb r3, [r6, #0x6] + strb r4, [r6, #0x7] + ldr r3, [sp, #0x10] + ldr r4, [r3, #0x8] + mov r3, r4, lsr #0x18 + strb r3, [r6, #0x8] + mov r3, r4, lsr #0x10 + strb r3, [r6, #0x9] + mov r3, r4, lsr #0x8 + strb r3, [r6, #0xa] + strb r4, [r6, #0xb] + ldr r3, [sp, #0x10] + ldr r4, [r3, #0xc] + mov r3, r4, lsr #0x18 + strb r3, [r6, #0xc] + mov r3, r4, lsr #0x10 + strb r3, [r6, #0xd] + mov r3, r4, lsr #0x8 + strb r3, [r6, #0xe] + strb r4, [r6, #0xf] + ldr r3, [sp, #0x10] + ldr r4, [r3, #0x10] + mov r3, r4, lsr #0x18 + strb r3, [r6, #0x10] + mov r3, r4, lsr #0x10 + strb r3, [r6, #0x11] + mov r3, r4, lsr #0x8 + strb r3, [r6, #0x12] + strb r4, [r6, #0x13] + ldr r3, [sp, #0x10] + str r0, [r3, #0x1c] + bl MIi_CpuClear32 + ldmia sp!, {r4-r6,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020D3008: .word 0x02106A00 + + arm_func_start MATH_SHA1Update +MATH_SHA1Update: ; 0x020D300C + stmdb sp!, {r4-r8,lr} + mov r8, r0 + movs r6, r2 + mov r7, r1 + add r5, r8, #0x20 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r0, [r8, #0x14] + add r1, r0, r6, lsl #0x3 + cmp r1, r0 + ldrcc r0, [r8, #0x18] + addcc r0, r0, #0x1 + strcc r0, [r8, #0x18] + ldr r0, [r8, #0x18] + add r0, r0, r6, lsr #0x1d + str r0, [r8, #0x18] + str r1, [r8, #0x14] + ldr r1, [r8, #0x1c] + cmp r1, #0x0 + beq _020D30CC + add r0, r1, r6 + cmp r0, #0x40 + blo _020D30A8 + rsb r4, r1, #0x40 + mov r0, r7 + mov r2, r4 + add r1, r5, r1 + bl MI_CpuCopy8 + ldr r1, _020D3164 ; =0x02106A00 + mov r0, r8 + ldr r3, [r1, #0x0] + mov r1, r5 + mov r2, #0x40 + sub r6, r6, r4 + add r7, r7, r4 + blx r3 + mov r0, #0x0 + str r0, [r8, #0x1c] + b _020D30CC +_020D30A8: + mov r0, r7 + mov r2, r6 + add r1, r5, r1 + bl MI_CpuCopy8 + ldr r0, [r8, #0x1c] + add r0, r0, r6 + str r0, [r8, #0x1c] + ldmia sp!, {r4-r8,lr} + bx lr +_020D30CC: + cmp r6, #0x40 + blo _020D313C + bic r4, r6, #0x3f + sub r6, r6, r4 + ands r0, r7, #0x3 + bne _020D3104 + ldr r1, _020D3164 ; =0x02106A00 + mov r0, r8 + ldr r3, [r1, #0x0] + mov r1, r7 + mov r2, r4 + blx r3 + add r7, r7, r4 + b _020D313C +_020D3104: + mov r0, r7 + mov r1, r5 + mov r2, #0x40 + bl MI_CpuCopy8 + ldr r1, _020D3164 ; =0x02106A00 + mov r0, r8 + ldr r3, [r1, #0x0] + mov r1, r5 + mov r2, #0x40 + add r7, r7, #0x40 + blx r3 + sub r4, r4, #0x40 + cmp r4, #0x0 + bgt _020D3104 +_020D313C: + str r6, [r8, #0x1c] + cmp r6, #0x0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + mov r0, r7 + mov r1, r5 + mov r2, r6 + bl MI_CpuCopy8 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D3164: .word 0x02106A00 + + arm_func_start MATH_SHA1Init +MATH_SHA1Init: ; 0x020D3168 + ldr r1, _020D31A4 ; =0x67452301 + ldr r2, _020D31A8 ; =0xEFCDAB89 + str r1, [r0, #0x0] + ldr r1, _020D31AC ; =0x98BADCFE + str r2, [r0, #0x4] + ldr r2, _020D31B0 ; =0x10325476 + str r1, [r0, #0x8] + ldr r1, _020D31B4 ; =0xC3D2E1F0 + str r2, [r0, #0xc] + str r1, [r0, #0x10] + mov r1, #0x0 + str r1, [r0, #0x14] + str r1, [r0, #0x18] + str r1, [r0, #0x1c] + bx lr + .balign 4 +_020D31A4: .word 0x67452301 +_020D31A8: .word 0xEFCDAB89 +_020D31AC: .word 0x98BADCFE +_020D31B0: .word 0x10325476 +_020D31B4: .word 0xC3D2E1F0 + + arm_func_start MATHi_CalcHMAC +MATHi_CalcHMAC: ; 0x020D31B8 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0xc4 + ldr r5, [sp, #0xe0] + ldr r4, [sp, #0xe4] + movs r9, r0 + mov r8, r1 + mov r7, r2 + mov r6, r3 + addeq sp, sp, #0xc4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r8, #0x0 + addeq sp, sp, #0xc4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r7, #0x0 + addeq sp, sp, #0xc4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r6, #0x0 + addeq sp, sp, #0xc4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r5, #0x0 + addeq sp, sp, #0xc4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r4, #0x0 + addeq sp, sp, #0xc4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + ldr r0, [r4, #0x4] + cmp r5, r0 + ble _020D3278 + ldr r0, [r4, #0x8] + ldr r1, [r4, #0x10] + blx r1 + ldr r0, [r4, #0x8] + ldr r3, [r4, #0x14] + mov r1, r6 + mov r2, r5 + blx r3 + ldr r0, [r4, #0x8] + ldr r2, [r4, #0x18] + add r1, sp, #0x0 + blx r2 + ldr r5, [r4, #0x0] + add r6, sp, #0x0 +_020D3278: + cmp r5, #0x0 + mov r0, #0x0 + ble _020D32A0 + add r2, sp, #0x40 +_020D3288: + ldrb r1, [r6, r0] + add r0, r0, #0x1 + cmp r0, r5 + eor r1, r1, #0x36 + strb r1, [r2], #0x1 + blt _020D3288 +_020D32A0: + ldr r1, [r4, #0x4] + cmp r0, r1 + bge _020D32CC + add r1, sp, #0x40 + add r3, r1, r0 + mov r2, #0x36 +_020D32B8: + strb r2, [r3], #0x1 + ldr r1, [r4, #0x4] + add r0, r0, #0x1 + cmp r0, r1 + blt _020D32B8 +_020D32CC: + ldr r0, [r4, #0x8] + ldr r1, [r4, #0x10] + blx r1 + ldr r0, [r4, #0x8] + ldr r2, [r4, #0x4] + ldr r3, [r4, #0x14] + add r1, sp, #0x40 + blx r3 + ldr r0, [r4, #0x8] + ldr r3, [r4, #0x14] + mov r1, r8 + mov r2, r7 + blx r3 + ldr r0, [r4, #0x8] + ldr r1, [r4, #0xc] + ldr r2, [r4, #0x18] + blx r2 + cmp r5, #0x0 + mov r2, #0x0 + ble _020D3338 + add r1, sp, #0x80 +_020D3320: + ldrb r0, [r6, r2] + add r2, r2, #0x1 + cmp r2, r5 + eor r0, r0, #0x5c + strb r0, [r1], #0x1 + blt _020D3320 +_020D3338: + ldr r0, [r4, #0x4] + cmp r2, r0 + bge _020D3364 + add r0, sp, #0x80 + add r3, r0, r2 + mov r1, #0x5c +_020D3350: + strb r1, [r3], #0x1 + ldr r0, [r4, #0x4] + add r2, r2, #0x1 + cmp r2, r0 + blt _020D3350 +_020D3364: + ldr r0, [r4, #0x8] + ldr r1, [r4, #0x10] + blx r1 + ldr r0, [r4, #0x8] + ldr r2, [r4, #0x4] + ldr r3, [r4, #0x14] + add r1, sp, #0x80 + blx r3 + ldr r0, [r4, #0x8] + ldr r1, [r4, #0xc] + ldr r2, [r4, #0x0] + ldr r3, [r4, #0x14] + blx r3 + ldr r0, [r4, #0x8] + ldr r2, [r4, #0x18] + mov r1, r9 + blx r2 + add sp, sp, #0xc4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020D33B4: .word 0x00FF00FF +_020D33B8: .word 0x5A827999 +_020D33BC: .word 0x6ED9EBA1 +_020D33C0: .word 0x8F1BBCDC +_020D33C4: .word 0xCA62C1D6 + + arm_func_start MATHi_SHA1ProcessBlock +MATHi_SHA1ProcessBlock: ; 0x020D33C8 + stmdb sp!, {r4-r12,lr} + ldmia r0, {r3,r9-r12} + sub sp, sp, #0x84 + str r2, [sp, #0x80] +_020D33D8: + ldr r8, _020D33B8 ; =0x5A827999 + ldr r7, _020D33B4 ; =0x00FF00FF + mov r6, sp + mov r5, #0x0 +_020D33E8: + ldr r4, [r1], #0x4 + add r2, r8, r12 + add r2, r2, r3, ror #0x1B + and lr, r4, r7 + and r4, r7, r4, ror #0x18 + orr r4, r4, lr, ror #0x8 + str r4, [r6, #0x40] + str r4, [r6], #0x4 + add r2, r2, r4 + eor r4, r10, r11 + and r4, r4, r9 + eor r4, r4, r11 + add r2, r2, r4 + mov r9, r9, ror #0x2 + mov r12, r11 + mov r11, r10 + mov r10, r9 + mov r9, r3 + mov r3, r2 + add r5, r5, #0x4 + cmp r5, #0x40 + blt _020D33E8 + mov r7, #0x0 + mov r6, sp +_020D3448: + ldr r2, [r6, #0x0] + ldr r5, [r6, #0x8] + ldr r4, [r6, #0x20] + ldr lr, [r6, #0x34] + eor r2, r2, r5 + eor r4, r4, lr + eor r2, r2, r4 + mov r2, r2, ror #0x1F + str r2, [r6, #0x40] + str r2, [r6], #0x4 + add r2, r2, r12 + add r2, r2, r8 + add r2, r2, r3, ror #0x1B + eor r4, r10, r11 + and r4, r4, r9 + eor r4, r4, r11 + add r2, r2, r4 + mov r9, r9, ror #0x2 + mov r12, r11 + mov r11, r10 + mov r10, r9 + mov r9, r3 + mov r3, r2 + add r7, r7, #0x4 + cmp r7, #0x10 + blt _020D3448 + ldr r8, _020D33BC ; =0x6ED9EBA1 + mov r7, #0x0 +_020D34B8: + ldr r2, [r6, #0x0] + ldr r4, [r6, #0x8] + ldr lr, [r6, #0x20] + ldr r5, [r6, #0x34] + eor r2, r2, r4 + eor lr, lr, r5 + eor r2, r2, lr + mov r2, r2, ror #0x1F + str r2, [r6, #0x40] + str r2, [r6], #0x4 + add r2, r2, r12 + add r2, r2, r8 + add r2, r2, r3, ror #0x1B + eor lr, r9, r10 + eor lr, lr, r11 + add r2, r2, lr + mov r9, r9, ror #0x2 + mov r12, r11 + mov r11, r10 + mov r10, r9 + mov r9, r3 + mov r3, r2 + add r7, r7, #0x1 + cmp r7, #0xc + moveq r6, sp + cmp r7, #0x14 + blt _020D34B8 + ldr r8, _020D33C0 ; =0x8F1BBCDC + mov r7, #0x0 +_020D352C: + ldr r2, [r6, #0x0] + ldr lr, [r6, #0x8] + ldr r5, [r6, #0x20] + ldr r4, [r6, #0x34] + eor r2, r2, lr + eor r5, r5, r4 + eor r2, r2, r5 + mov r2, r2, ror #0x1F + str r2, [r6, #0x40] + str r2, [r6], #0x4 + add r2, r2, r12 + add r2, r2, r8 + add r2, r2, r3, ror #0x1B + orr r5, r9, r10 + and r5, r5, r11 + and r4, r9, r10 + orr r5, r5, r4 + add r2, r2, r5 + mov r9, r9, ror #0x2 + mov r12, r11 + mov r11, r10 + mov r10, r9 + mov r9, r3 + mov r3, r2 + add r7, r7, #0x1 + cmp r7, #0x8 + moveq r6, sp + cmp r7, #0x14 + blt _020D352C + ldr r8, _020D33C4 ; =0xCA62C1D6 + mov r7, #0x0 +_020D35A8: + ldr r2, [r6, #0x0] + ldr r5, [r6, #0x8] + ldr r4, [r6, #0x20] + ldr lr, [r6, #0x34] + eor r2, r2, r5 + eor r4, r4, lr + eor r2, r2, r4 + mov r2, r2, ror #0x1F + str r2, [r6, #0x40] + str r2, [r6], #0x4 + add r2, r2, r12 + add r2, r2, r8 + add r2, r2, r3, ror #0x1B + eor r4, r9, r10 + eor r4, r4, r11 + add r2, r2, r4 + mov r9, r9, ror #0x2 + mov r12, r11 + mov r11, r10 + mov r10, r9 + mov r9, r3 + mov r3, r2 + add r7, r7, #0x1 + cmp r7, #0x4 + moveq r6, sp + cmp r7, #0x14 + blt _020D35A8 + ldmia r0, {r2,r4,r6-r7,lr} + add r3, r3, r2 + add r9, r9, r4 + add r10, r10, r6 + add r11, r11, r7 + add r12, r12, lr + stmia r0, {r3,r9-r12} + ldr lr, [sp, #0x80] + subs lr, lr, #0x40 + str lr, [sp, #0x80] + bgt _020D33D8 + add sp, sp, #0x84 + ldmia sp!, {r4-r12,pc} + + arm_func_start CP_SaveContext +CP_SaveContext: ; 0x020D3648 + ldr r1, _020D3684 ; =0x04000290 + stmdb sp!, {r4} + ldmia r1, {r2-r4,r12} + stmia r0!, {r2-r4,r12} + ldrh r12, [r1, #-0x10] + add r1, r1, #0x28 + ldmia r1, {r2-r3} + stmia r0!, {r2-r3} + and r12, r12, #0x3 + ldrh r2, [r1, #-0x8] + strh r12, [r0, #0x0] + and r2, r2, #0x1 + strh r2, [r0, #0x2] + ldmia sp!, {r4} + bx lr + .balign 4 +_020D3684: .word 0x04000290 + + arm_func_start CP_RestoreContext +CP_RestoreContext: ; 0x020D3688 + stmdb sp!, {r4} + ldr r1, _020D36C0 ; =0x04000290 + ldmia r0, {r2-r4,r12} + stmia r1, {r2-r4,r12} + ldrh r2, [r0, #0x18] + ldrh r3, [r0, #0x1a] + strh r2, [r1, #-0x10] + strh r3, [r1, #0x20] + add r0, r0, #0x10 + add r1, r1, #0x28 + ldmia r0, {r2-r3} + stmia r1, {r2-r3} + ldmia sp!, {r4} + bx lr + .balign 4 +_020D36C0: .word 0x04000290 + + arm_func_start TP_CheckError +TP_CheckError: ; 0x020D36C4 + ldr r1, _020D36D4 ; =0x021D5474 + ldrh r1, [r1, #0x34] + and r0, r1, r0 + bx lr + .balign 4 +_020D36D4: .word 0x021D5474 + + arm_func_start TP_WaitBusy +TP_WaitBusy: ; 0x020D36D8 + ldr r1, _020D36EC ; =0x021D5474 +_020D36DC: + ldrh r2, [r1, #0x36] + ands r2, r2, r0 + bne _020D36DC + bx lr + .balign 4 +_020D36EC: .word 0x021D5474 + + arm_func_start TP_GetCalibratedPoint +TP_GetCalibratedPoint: ; 0x020D36F0 + stmdb sp!, {r4-r6,lr} + ldr r2, _020D3818 ; =0x021D5474 + ldrh r2, [r2, #0x30] + cmp r2, #0x0 + bne _020D372C + ldrh r3, [r1, #0x0] + ldrh r2, [r1, #0x2] + strh r3, [r0, #0x0] + strh r2, [r0, #0x2] + ldrh r2, [r1, #0x4] + ldrh r1, [r1, #0x6] + strh r2, [r0, #0x4] + strh r1, [r0, #0x6] + ldmia sp!, {r4-r6,lr} + bx lr +_020D372C: + ldrh r3, [r1, #0x4] + ldr r2, _020D381C ; =0x021D548C + strh r3, [r0, #0x4] + ldrh r3, [r1, #0x6] + strh r3, [r0, #0x6] + ldrh r3, [r1, #0x4] + cmp r3, #0x0 + moveq r1, #0x0 + streqh r1, [r0, #0x0] + streqh r1, [r0, #0x2] + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldrh r4, [r1, #0x0] + ldr r3, [r2, #0x0] + ldr lr, [r2, #0x8] + mov r12, r4, lsl #0x2 + mov r4, r12, asr #0x1f + subs r12, r12, r3 + sbc r3, r4, r3, asr #0x1f + umull r6, r5, lr, r12 + mla r5, lr, r3, r5 + mov r3, lr, asr #0x1f + mla r5, r3, r12, r5 + mov r3, r6, lsr #0x16 + orr r3, r3, r5, lsl #0xa + strh r3, [r0, #0x0] + ldrsh r3, [r0, #0x0] + cmp r3, #0x0 + movlt r3, #0x0 + strlth r3, [r0, #0x0] + blt _020D37B4 + cmp r3, #0xff + movgt r3, #0xff + strgth r3, [r0, #0x0] +_020D37B4: + ldrh r3, [r1, #0x2] + ldr r1, [r2, #0xc] + ldr r12, [r2, #0x14] + mov r3, r3, lsl #0x2 + mov r2, r3, asr #0x1f + subs r3, r3, r1 + sbc r1, r2, r1, asr #0x1f + umull r4, lr, r12, r3 + mla lr, r12, r1, lr + mov r1, r12, asr #0x1f + mla lr, r1, r3, lr + mov r1, r4, lsr #0x16 + orr r1, r1, lr, lsl #0xa + strh r1, [r0, #0x2] + ldrsh r1, [r0, #0x2] + cmp r1, #0x0 + movlt r1, #0x0 + strlth r1, [r0, #0x2] + ldmltia sp!, {r4-r6,lr} + bxlt lr + cmp r1, #0xbf + movgt r1, #0xbf + strgth r1, [r0, #0x2] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D3818: .word 0x021D5474 +_020D381C: .word 0x021D548C + + arm_func_start TP_CalcCalibrateParam +TP_CalcCalibrateParam: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r6, r1 + mov r7, r0 + mov r5, r2 + mov r4, r3 + cmp r6, #0x1000 + bhs _020D3860 + cmp r5, #0x1000 + bhs _020D3860 + ldrh r8, [sp, #0x2c] + cmp r8, #0x1000 + bhs _020D3860 + ldrh r3, [sp, #0x30] + cmp r3, #0x1000 + blo _020D3870 +_020D3860: + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_020D3870: + cmp r4, #0x100 + bhs _020D389C + ldrh r2, [sp, #0x34] + cmp r2, #0x100 + bhs _020D389C + ldrh r1, [sp, #0x28] + cmp r1, #0xc0 + bhs _020D389C + ldrh r0, [sp, #0x38] + cmp r0, #0xc0 + blo _020D38AC +_020D389C: + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_020D38AC: + cmp r4, r2 + beq _020D38CC + cmp r1, r0 + beq _020D38CC + cmp r6, r8 + beq _020D38CC + cmp r5, r3 + bne _020D38DC +_020D38CC: + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_020D38DC: + bl OS_DisableInterrupts + ldrh r1, [sp, #0x2c] + ldr r3, _020D3A80 ; =0x04000280 + ldr fp, _020D3A84 ; =0x04000290 + str r1, [sp, #0x0] + ldr r2, [sp, #0x0] + ldrh r1, [sp, #0x34] + sub r9, r6, r2 + mov r2, #0x0 + mov r12, r9, lsl #0x8 + strh r2, [r3, #0x0] + str r12, [r11, #0x0] + ldrh r8, [sp, #0x30] + ldrh r10, [sp, #0x38] + ldrh r9, [sp, #0x28] + ldr fp, _020D3A88 ; =0x04000298 + sub r12, r4, r1 + str r12, [r11, #0x0] + str r2, [r11, #0x4] + sub r11, r5, r8 + sub r2, r9, r10 +_020D3930: + ldrh r12, [r3, #0x0] + ands r12, r12, #0x8000 + bne _020D3930 + ldr ip, _020D3A8C ; =0x040002A0 + mov r11, r11, lsl #0x8 + ldr lr, [r12, #0x0] + mov r12, #0x0 + strh r12, [r3, #0x0] + ldr r3, _020D3A84 ; =0x04000290 + cmp lr, #0x8000 + str r11, [r3, #0x0] + ldr r3, _020D3A88 ; =0x04000298 + str r2, [r3, #0x0] + mov r2, r3 + str r12, [r2, #0x4] + bge _020D3980 + mov r2, #0x8000 + rsb r2, r2, #0x0 + cmp lr, r2 + bge _020D3994 +_020D3980: + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_020D3994: + strh lr, [r7, #0x4] + ldrsh r11, [r7, #0x4] + add r3, r4, r1 + ldr r1, [sp, #0x0] + add r4, r6, r1 + mul r1, r11, r3 + mov r3, r4, lsl #0x8 + sub r1, r3, r1 + mov r1, r1, lsl #0x9 + mov r1, r1, asr #0x10 + cmp r1, #0x8000 + bge _020D39CC + cmp r1, r2 + bge _020D39E0 +_020D39CC: + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_020D39E0: + ldr r2, _020D3A80 ; =0x04000280 + strh r1, [r7, #0x0] +_020D39E8: + ldrh r1, [r2, #0x0] + ands r1, r1, #0x8000 + bne _020D39E8 + ldr r1, _020D3A8C ; =0x040002A0 + ldr r4, [r1, #0x0] + bl OS_RestoreInterrupts + cmp r4, #0x8000 + bge _020D3A18 + mov r0, #0x8000 + rsb r1, r0, #0x0 + cmp r4, r1 + bge _020D3A28 +_020D3A18: + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_020D3A28: + strh r4, [r7, #0x6] + ldrsh r2, [r7, #0x6] + add r0, r9, r10 + add r3, r5, r8 + mul r0, r2, r0 + mov r2, r3, lsl #0x8 + sub r0, r2, r0 + mov r0, r0, lsl #0x9 + mov r0, r0, asr #0x10 + cmp r0, #0x8000 + bge _020D3A5C + cmp r0, r1 + bge _020D3A6C +_020D3A5C: + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_020D3A6C: + strh r0, [r7, #0x2] + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D3A80: .word 0x04000280 +_020D3A84: .word 0x04000290 +_020D3A88: .word 0x04000298 +_020D3A8C: .word 0x040002A0 + + arm_func_start TP_GetLatestIndexInAuto +TP_GetLatestIndexInAuto: ; 0x020D3A90 + ldr r0, _020D3A9C ; =0x021D5474 + ldrh r0, [r0, #0xc] + bx lr + .balign 4 +_020D3A9C: .word 0x021D5474 + + arm_func_start TP_GetLatestRawPointInAuto +TP_GetLatestRawPointInAuto: ; 0x020D3AA0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r1, #0x3 + ldr lr, _020D3C10 ; =0x021D5474 + strh r1, [r0, #0x6] + ldrh r1, [lr, #0xe] + ldrh r3, [lr, #0xc] + cmp r1, #0x1 + beq _020D3AD0 + ldrh r1, [lr, #0x14] + cmp r1, #0x1 + bne _020D3B0C +_020D3AD0: + ldr r1, _020D3C10 ; =0x021D5474 + mov r2, r3, lsl #0x3 + ldr r1, [r1, #0x10] + add sp, sp, #0x4 + add r3, r1, r3, lsl #0x3 + ldrh r2, [r1, r2] + ldrh r1, [r3, #0x2] + strh r2, [r0, #0x0] + strh r1, [r0, #0x2] + ldrh r2, [r3, #0x4] + ldrh r1, [r3, #0x6] + strh r2, [r0, #0x4] + strh r1, [r0, #0x6] + ldmia sp!, {r4-r5,lr} + bx lr +_020D3B0C: + add r1, r0, #0x6 + mov r12, #0x0 + b _020D3BE0 +_020D3B18: + subs r5, r3, r12 + ldr r2, [lr, #0x10] + addmi r5, r5, r4 + add r2, r2, r5, lsl #0x3 + ldrh r4, [r2, #0x4] + cmp r4, #0x0 + bne _020D3B60 + ldrh r3, [r2, #0x0] + ldrh r1, [r2, #0x2] + add sp, sp, #0x4 + strh r3, [r0, #0x0] + strh r1, [r0, #0x2] + ldrh r3, [r2, #0x4] + ldrh r1, [r2, #0x6] + strh r3, [r0, #0x4] + strh r1, [r0, #0x6] + ldmia sp!, {r4-r5,lr} + bx lr +_020D3B60: + ldrh r4, [r0, #0x6] + ands r4, r4, #0x1 + beq _020D3B90 + ldrh r4, [r2, #0x6] + ands r4, r4, #0x1 + bne _020D3B90 + ldrh r4, [r2, #0x0] + cmp r12, #0x0 + strh r4, [r0, #0x0] + ldrneh r4, [r1, #0x0] + bicne r4, r4, #0x1 + strneh r4, [r1, #0x0] +_020D3B90: + ldrh r4, [r0, #0x6] + ands r4, r4, #0x2 + beq _020D3BC0 + ldrh r4, [r2, #0x6] + ands r4, r4, #0x2 + bne _020D3BC0 + ldrh r2, [r2, #0x2] + cmp r12, #0x0 + strh r2, [r0, #0x2] + ldrneh r2, [r1, #0x0] + bicne r2, r2, #0x2 + strneh r2, [r1, #0x0] +_020D3BC0: + ldrh r2, [r0, #0x6] + cmp r2, #0x0 + moveq r1, #0x1 + streqh r1, [r0, #0x4] + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + add r12, r12, #0x1 +_020D3BE0: + ldrh r2, [lr, #0xe] + cmp r12, r2 + bge _020D3BFC + ldrh r4, [lr, #0x14] + sub r2, r4, #0x1 + cmp r12, r2 + blt _020D3B18 +_020D3BFC: + mov r1, #0x1 + strh r1, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D3C10: .word 0x021D5474 + + arm_func_start TP_RequestAutoSamplingStopAsync +TP_RequestAutoSamplingStopAsync: ; 0x020D3C14 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + mov r4, r0 + ldr r1, _020D3CB0 ; =0x03000200 + mov r0, #0x6 + mov r2, #0x0 + bl PXI_SendWordByFifo +_020D3C30: + cmp r0, #0x0 + movge r0, #0x1 + movlt r0, #0x0 + cmp r0, #0x0 + bne _020D3C84 + mov r0, r4 + bl OS_RestoreInterrupts + ldr r0, _020D3CB4 + ldrh r1, [r0, #0x34] + ldr r3, [r0] + orr r1, r1, #0x4 + strh r1, [r0, #0x34] + cmp r3, #0x0 + ldmeqia sp!, {r4, lr} + bxeq lr + mov r0, #0x2 + mov r1, #0x4 + mov r2, #0x0 + blx r3 + ldmia sp!, {r4, lr} + bx lr +_020D3C84: + ldr r1, _020D3CB4 + mov r0, r4 + ldrh r2, [r1, #0x36] + orr r2, r2, #0x4 + strh r2, [r1, #0x36] + ldrh r2, [r1, #0x34] + bic r2, r2, #0x4 + strh r2, [r1, #0x34] + bl OS_RestoreInterrupts + ldmia sp!, {r4, lr} + bx lr +_020D3CB0: .word 0x03000200 +_020D3CB4: .word 0x021D5474 + + arm_func_start TP_RequestAutoSamplingStartAsync +TP_RequestAutoSamplingStartAsync: ; 0x020D3CB8 + stmdb sp!, {r4-r6,lr} + ldr r4, _020D3DC0 ; =0x021D5474 + mov r5, r1 + mov r12, #0x0 + mov r6, r0 + str r2, [r4, #0x10] + strh r12, [r4, #0xc] + strh r5, [r4, #0xe] + strh r3, [r4, #0x14] + cmp r3, #0x0 + bls _020D3D00 + mov r1, r12 +_020D3CE8: + ldr r0, [r4, #0x10] + add r0, r0, r12, lsl #0x3 + add r12, r12, #0x1 + strh r1, [r0, #0x4] + cmp r12, r3 + blo _020D3CE8 +_020D3D00: + bl OS_DisableInterrupts + mov r4, r0 + ldr r0, _020D3DC4 ; =0x02000100 + and r1, r5, #0xff + orr r1, r1, r0 + mov r0, #0x6 + mov r2, #0x0 + bl PXI_SendWordByFifo +_020D3D20: + cmp r0, #0x0 + movlt r0, #0x0 + blt _020D3D4C + ldr r1, _020D3DC8 + mov r0, #0x6 + orr r1, r6, r1 + mov r2, #0x0 + bl PXI_SendWordByFifo + cmp r0, #0x0 + movlt r0, #0x0 + movge r0, #0x1 +_020D3D4C: + ands r0, r0, #0xFF + bne _020D3D94 + mov r0, r4 + bl OS_RestoreInterrupts + ldr r0, _020D3DC0 + ldrh r1, [r0, #0x34] + ldr r3, [r0] + orr r1, r1, #0x2 + strh r1, [r0, #0x34] + cmp r3, #0x0 + ldmeqia sp!, {r4-r6, lr} + bxeq lr + mov r0, #0x1 + mov r1, #0x4 + mov r2, #0x0 + blx r3 + ldmia sp!, {r4-r6, lr} + bx lr +_020D3D94: + ldr r1, _020D3DC0 + mov r0, r4 + ldrh r2, [r1, #0x36] + orr r2, r2, #0x2 + strh r2, [r1, #0x36] + ldrh r2, [r1, #0x34] + bic r2, r2, #0x2 + strh r2, [r1, #0x34] + bl OS_RestoreInterrupts + ldmia sp!, {r4-r6, lr} + bx lr +_020D3DC0: .word 0x021D5474 +_020D3DC4: .word 0x02000100 +_020D3DC8: .word 0x01010000 + + arm_func_start TP_WaitRawResult +TP_WaitRawResult: ; 0x020D3DCC + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + bl TP_WaitBusy + ldr r1, _020D3E20 ; =0x021D5474 + ldrh r0, [r1, #0x34] + ands r0, r0, #0x1 + movne r0, #0x1 + ldmneia sp!, {r4,lr} + bxne lr + ldrh r3, [r1, #0x4] + ldrh r2, [r1, #0x6] + mov r0, #0x0 + strh r3, [r4, #0x0] + strh r2, [r4, #0x2] + ldrh r2, [r1, #0x8] + ldrh r1, [r1, #0xa] + strh r2, [r4, #0x4] + strh r1, [r4, #0x6] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D3E20: .word 0x021D5474 + + arm_func_start TP_RequestSamplingAsync +TP_RequestSamplingAsync: ; 0x020D3E24 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + mov r4, r0 + mov r0, #0x6 + mov r1, #0x3000000 + mov r2, #0x0 + bl PXI_SendWordByFifo +_020D3E40: + cmp r0, #0x0 + movge r0, #0x1 + movlt r0, #0x0 + cmp r0, #0x0 + bne _020D3E94 + mov r0, r4 + bl OS_RestoreInterrupts + ldr r0, _20D3EC0 + ldrh r1, [r0, #0x34] + ldr r3, [r0] + orr r1, r1, #0x1 + strh r1, [r0, #0x34] + cmp r3, #0x0 + ldmeqia sp!, {r4, lr} + bxeq lr + mov r0, #0x0 + mov r2, r0 + mov r1, #0x4 + blx r3 + ldmia sp!, {r4, lr} + bx lr +_020D3E94: + ldr r1, _20D3EC0 + mov r0, r4 + ldrh r2, [r1, #0x36] + orr r2, r2, #0x1 + strh r2, [r1, #0x36] + ldrh r2, [r1, #0x34] + bic r2, r2, #0x1 + strh r2, [r1, #0x34] + bl OS_RestoreInterrupts + ldmia sp!, {r4, lr} + bx lr +_20D3EC0: .word 0x021D5474 + + arm_func_start TP_SetCalibrateParam +TP_SetCalibrateParam: ; 0x020D3EC4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + movs r4, r0 + ldreq r0, _020D3FF8 ; =0x021D5474 + moveq r1, #0x0 + streqh r1, [r0, #0x30] + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + bl OS_DisableInterrupts + ldrsh lr, [r4, #0x4] + cmp lr, #0x0 + beq _020D3F50 + ldr r5, _020D3FFC ; =0x04000280 + mov r12, #0x0 + ldr r2, _020D4000 ; =0x04000290 + strh r12, [r5, #0x0] + mov r3, #0x10000000 + ldr r1, _020D4004 ; =0x04000298 + str r3, [r2, #0x0] + str lr, [r1, #0x0] + str r12, [r1, #0x4] + ldrsh r2, [r4, #0x0] + ldr r1, _020D3FF8 ; =0x021D5474 + str r2, [r1, #0x18] + ldrsh r2, [r4, #0x4] + str r2, [r1, #0x1c] +_020D3F30: + ldrh r1, [r5, #0x0] + ands r1, r1, #0x8000 + bne _020D3F30 + ldr r2, _020D4008 ; =0x040002A0 + ldr r1, _020D3FF8 ; =0x021D5474 + ldr r2, [r2, #0x0] + str r2, [r1, #0x20] + b _020D3F64 +_020D3F50: + ldr r1, _020D3FF8 ; =0x021D5474 + mov r2, #0x0 + str r2, [r1, #0x18] + str r2, [r1, #0x1c] + str r2, [r1, #0x20] +_020D3F64: + ldrsh r5, [r4, #0x6] + cmp r5, #0x0 + beq _020D3FC8 + ldr ip, _020D3FFC ; =0x04000280 + mov lr, #0x0 + ldr r2, _020D4000 ; =0x04000290 + strh lr, [r12, #0x0] + mov r3, #0x10000000 + ldr r1, _020D4004 ; =0x04000298 + str r3, [r2, #0x0] + str r5, [r1, #0x0] + str lr, [r1, #0x4] + ldrsh r2, [r4, #0x2] + ldr r1, _020D3FF8 ; =0x021D5474 + str r2, [r1, #0x24] + ldrsh r2, [r4, #0x6] + str r2, [r1, #0x28] +_020D3FA8: + ldrh r1, [r12, #0x0] + ands r1, r1, #0x8000 + bne _020D3FA8 + ldr r2, _020D4008 ; =0x040002A0 + ldr r1, _020D3FF8 ; =0x021D5474 + ldr r2, [r2, #0x0] + str r2, [r1, #0x2c] + b _020D3FDC +_020D3FC8: + ldr r1, _020D3FF8 ; =0x021D5474 + mov r2, #0x0 + str r2, [r1, #0x24] + str r2, [r1, #0x28] + str r2, [r1, #0x2c] +_020D3FDC: + bl OS_RestoreInterrupts + ldr r0, _020D3FF8 ; =0x021D5474 + mov r1, #0x1 + strh r1, [r0, #0x30] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D3FF8: .word 0x021D5474 +_020D3FFC: .word 0x04000280 +_020D4000: .word 0x04000290 +_020D4004: .word 0x04000298 +_020D4008: .word 0x040002A0 + + arm_func_start TP_GetUserInfo +TP_GetUserInfo: ; 0x020D400C + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x18 + ldr ip, _020D40B4 ; =0x027FFC80 + mov r4, r0 + ldrh r1, [r12, #0x58] + ldrh r2, [r12, #0x5a] + ldrb r3, [r12, #0x5c] + cmp r1, #0x0 + ldrb lr, [r12, #0x5d] + ldrh r6, [r12, #0x5e] + ldrh r5, [r12, #0x60] + ldrb r0, [r12, #0x62] + ldrb r12, [r12, #0x63] + bne _020D405C + cmp r6, #0x0 + bne _020D405C + cmp r2, #0x0 + bne _020D405C + cmp r5, #0x0 + beq _020D4080 +_020D405C: + str lr, [sp, #0x0] + str r6, [sp, #0x4] + str r5, [sp, #0x8] + str r0, [sp, #0xc] + mov r0, r4 + str r12, [sp, #0x10] + bl TP_CalcCalibrateParam +_020D4078: + cmp r0, #0 + beq _020D40A4 +_020D4080: + mov r0, #0x0 + strh r0, [r4, #0x0] + strh r0, [r4, #0x2] + strh r0, [r4, #0x4] + strh r0, [r4, #0x6] + add sp, sp, #0x18 + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020D40A4: + mov r0, #0x1 + add sp, sp, #0x18 + ldmia sp!, {r4-r6,lr} + bx lr +_020D40B4: .word 0x027FFC80 + + arm_func_start TP_Init +TP_Init: ; 0x020D40B8 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020D413C ; =0x021D5470 + ldrh r1, [r0, #0x0] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + mov r1, #0x1 + strh r1, [r0, #0x0] + bl PXI_Init + ldr r0, _020D4140 ; =0x021D5474 + mov r1, #0x0 + strh r1, [r0, #0x32] + strh r1, [r0, #0x36] + strh r1, [r0, #0xc] + str r1, [r0, #0x0] + str r1, [r0, #0x10] + strh r1, [r0, #0x30] + strh r1, [r0, #0x34] + mov r5, #0x6 + mov r4, #0x1 +_020D4110: + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady +_020D411C: + cmp r0, #0x0 + beq _020D4110 + ldr r1, _020D4144 + mov r0, #0x6 + bl PXI_SetFifoRecvCallback + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020D413C: .word 0x021D5470 +_020D4140: .word 0x021D5474 +_020D4144: .word FUN_020D4148 + + arm_func_start FUN_020D4148 +FUN_020D4148: ; 0x020D4148 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + mov r0, r1, lsl #0x10 + mov r3, r0, lsr #0x10 + and r0, r3, #0x7f00 + mov r0, r0, lsl #0x8 + cmp r2, #0x0 + mov r0, r0, lsr #0x10 + beq _020D41AC + ldr r1, _020D43FC ; =0x021D5474 + mov r2, #0x1 + ldrh r4, [r1, #0x34] + ldr r3, [r1, #0x0] + orr r2, r4, r2, lsl r0 + cmp r3, #0x0 + strh r2, [r1, #0x34] + addeq sp, sp, #0x8 + ldmeqia sp!, {r4,lr} + bxeq lr + mov r1, #0x4 + mov r2, #0x0 + blx r3 + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020D41AC: + cmp r0, #0x10 + bne _020D427C + ldr r1, _020D43FC ; =0x021D5474 + ldrh r3, [r1, #0xc] + ldrh r2, [r1, #0x14] + add r3, r3, #0x1 + strh r3, [r1, #0xc] + ldrh r3, [r1, #0xc] + cmp r3, r2 + movcs r2, #0x0 + strcsh r2, [r1, #0xc] + ldr r1, _020D4400 ; =0x027FFFAA + ldr r2, _020D43FC ; =0x021D5474 + ldrh r3, [r1, #0x0] + ldr r1, _020D4404 ; =0x027FFFAC + ldrh r12, [r2, #0xc] + strh r3, [sp, #0x0] + ldrh r1, [r1, #0x0] + ldr r4, [r2, #0x10] + mov lr, r12, lsl #0x3 + strh r1, [sp, #0x2] + ldr r3, [sp, #0x0] + add r1, r4, r12, lsl #0x3 + mov r3, r3, lsl #0x14 + mov r3, r3, lsr #0x14 + strh r3, [r4, lr] + ldr r3, [sp, #0x0] + mov r3, r3, lsl #0x8 + mov r3, r3, lsr #0x14 + strh r3, [r1, #0x2] + ldr r3, [sp, #0x0] + mov r3, r3, lsl #0x7 + mov r3, r3, lsr #0x1f + and r3, r3, #0xff + strh r3, [r1, #0x4] + ldr r3, [sp, #0x0] + mov r3, r3, lsl #0x5 + mov r3, r3, lsr #0x1e + and r3, r3, #0xff + strh r3, [r1, #0x6] + ldr r3, [r2, #0x0] + cmp r3, #0x0 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4,lr} + bxeq lr + ldrh r2, [r2, #0xc] + mov r1, #0x0 + and r2, r2, #0xff + blx r3 + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020D427C: + ands r1, r1, #0x1000000 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4,lr} + bxeq lr + and r1, r3, #0xff + cmp r1, #0x4 + addls pc, pc, r1, lsl #0x2 + b _020D43EC +_020D429C: + b _020D42B0 + b _020D43EC + b _020D4390 + b _020D4398 + b _020D4388 +_020D42B0: + cmp r0, #0x0 + beq _020D42D4 + cmp r0, #0x1 + beq _020D4338 + cmp r0, #0x2 + ldreq r1, _020D43FC + moveq r2, #0x0 + streqh r2, [r1, #0x32] + b _020D4344 +_020D42D4: + ldr r1, _020D4400 + ldr r3, _020D4404 + ldrh ip, [r1] + ldr r1, _020D43FC + mov r2, #0x0 + strh ip, [sp, #0x4] + ldrh r3, [r3] + strh r3, [sp, #0x6] + ldr ip, [sp, #0x4] + strh r2, [r1, #0x32] + mov r3, ip, lsl #0x7 + mov r2, ip, lsl #0x5 + mov lr, ip, lsl #0x14 + mov ip, ip, lsl #0x8 + mov r3, r3, lsr #0x1F + mov r2, r2, lsr #0x1E + mov lr, lr, lsr #0x14 + mov ip, ip, lsr #0x14 + and r3, r3, #0xFF + and r2, r2, #0xFF + strh lr, [r1, #0x4] + strh ip, [r1, #0x6] + strh r3, [r1, #0x8] + strh r2, [r1, #0xA] + b _020D4344 +_020D4338: + ldr r1, _020D43FC + mov r2, #0x2 + strh r2, [r1, #0x32] +_020D4344: + ldr r1, _020D43FC + mov r2, #0x1 + ldrh ip, [r1, #0x36] + mvn r2, r2, lsl r0 + ldr r3, [r1] + and r2, ip, r2 + cmp r3, #0x0 + strh r2, [r1, #0x36] + addeq sp, sp, #0x8 + ldmeqia sp!, {r4, lr} + bxeq lr + mov r1, #0x0 + mov r2, r1 + blx r3 + add sp, sp, #0x8 + ldmia sp!, {r4, lr} + bx lr +_020D4388: + mov r4, #0x3 + b _020D439C +_020D4390: + mov r4, #0x1 + b _020D439C +_020D4398: + mov r4, #0x2 +_020D439C: + ldr r1, _020D43FC + mov lr, #0x1 + ldrh ip, [r1, #0x34] + ldr r3, [r1] + mvn r2, lr, lsl r0 + orr ip, ip, lr, lsl r0 + strh ip, [r1, #0x34] + ldrh ip, [r1, #0x36] + cmp r3, #0x0 + addeq sp, sp, #0x8 + and r2, ip, r2 + strh r2, [r1, #0x36] + ldmeqia sp!, {r4, lr} + bxeq lr + and r1, r4, #0xff + mov r2, #0x0 + blx r3 + add sp, sp, #0x8 + ldmia sp!, {r4, lr} + bx lr +_020D43EC: + bl OS_Terminate + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D43FC: .word 0x021D5474 +_020D4400: .word 0x027FFFAA +_020D4404: .word 0x027FFFAC + + arm_func_start MicWaitBusy +MicWaitBusy: ; 0x020D4408 + ldr ip, _020D441C ; =0x021D54B0 +_020D440C: + ldr r0, [r12, #0x0] + cmp r0, #0x1 + beq _020D440C + bx lr + .balign 4 +_020D441C: .word 0x021D54B0 + + arm_func_start MicGetResultCallback +MicGetResultCallback: ; 0x020D4420 + ldr r1, _020D442C ; =0x021D54B0 + str r0, [r1, #0xc] + bx lr + .balign 4 +_020D442C: .word 0x021D54B0 + + arm_func_start MicStopAutoSampling +MicStopAutoSampling: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D4460 ; =0x03004200 + mov r0, #0x9 + mov r2, #0x0 + bl PXI_SendWordByFifo +_020D4448: + cmp r0, #0x0 + movge r0, #0x1 + movlt r0, #0x0 + add sp, sp, #4 + ldmfd sp!, {lr} + bx lr +_020D4460: .word 0x03004200 + + arm_func_start MicStartAutoSampling +MicStartAutoSampling: ; 0x020D4464 + stmdb sp!, {r4-r6,lr} + ldr ip, _020D4584 ; =0x02004100 + mov r6, r0 + mov r5, r1 + mov r4, r2 + orr r1, r3, r12 + mov r0, #0x9 + mov r2, #0x0 + bl PXI_SendWordByFifo +_020D4488: + cmp r0, #0x0 + movlt r0, #0x0 + ldmltia sp!, {r4-r6, lr} + bxlt lr + mov r0, r6, lsr #0x10 + orr r1, r0, #0x10000 + mov r0, #0x9 + mov r2, #0x0 + bl PXI_SendWordByFifo + cmp r0, #0x0 + movlt r0, #0x0 + ldmltia sp!, {r4-r6, lr} + bxlt lr + ldr r1, _020D4588 + mov r0, #0x9 + and r1, r6, r1 + orr r1, r1, #0x20000 + mov r2, #0x0 + bl PXI_SendWordByFifo + cmp r0, #0x0 + movlt r0, #0x0 + ldmltia sp!, {r4-r6, lr} + bxlt lr + mov r0, r5, lsr #0x10 + orr r1, r0, #0x30000 + mov r0, #0x9 + mov r2, #0x0 + bl PXI_SendWordByFifo + cmp r0, #0x0 + movlt r0, #0x0 + ldmltia sp!, {r4-r6, lr} + bxlt lr + ldr r1, _020D4588 + mov r0, #0x9 + and r1, r5, r1 + orr r1, r1, #0x40000 + mov r2, #0x0 + bl PXI_SendWordByFifo + cmp r0, #0x0 + movlt r0, #0x0 + ldmltia sp!, {r4-r6, lr} + bxlt lr + mov r0, r4, lsr #0x10 + orr r1, r0, #0x50000 + mov r0, #0x9 + mov r2, #0x0 + bl PXI_SendWordByFifo + cmp r0, #0x0 + movlt r0, #0x0 + ldmltia sp!, {r4-r6, lr} + bxlt lr + ldr r0, _020D4588 + ldr r1, _020D458C + and r0, r4, r0 + orr r1, r0, r1 + mov r0, #0x9 + mov r2, #0x0 + bl PXI_SendWordByFifo + cmp r0, #0x0 + movge r0, #0x1 + movlt r0, #0x0 + ldmia sp!, {r4-r6, lr} + bx lr +_020D4584: .word 0x02004100 +_020D4588: .word 0x0000FFFF +_020D458C: .word 0x01060000 + + arm_func_start MicDoSampling +MicDoSampling: ; 0x020D4590 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D45C4 ; =0x03004000 + mov r2, #0x0 + orr r1, r0, r1 + mov r0, #0x9 + bl PXI_SendWordByFifo +_020D45AC: + cmp r0, #0x0 + movge r0, #0x1 + movlt r0, #0x0 + add sp, sp, #0x4 + ldmfd sp!, {lr} + bx lr +_020D45C4: .word 0x03004000 + + arm_func_start MicCommonCallback +MicCommonCallback: ; 0x020D45C8 + stmdb sp!, {r4,lr} + mov r4, r1 + cmp r2, #0x0 + beq _020D4610 + ldr r0, _020D4700 ; =0x021D54B0 + ldr r2, _020D4700 ; =0x021D54B0 + ldr r1, [r0, #0x0] + ldr r12, [r2, #0x4] + cmp r1, #0x0 + movne r1, #0x0 + strne r1, [r0, #0x0] + cmp r12, #0x0 + beq _020D4610 + ldr r1, [r2, #0x8] + mov r3, #0x0 + mov r0, #0x6 + str r3, [r2, #0x4] + blx r12 +_020D4610: + and r0, r4, #0xff + mov r1, r0, lsl #0x10 + and r2, r4, #0x7f00 + mov r0, r2, lsl #0x8 + mov r1, r1, lsr #0x10 + cmp r1, #0x4 + mov r2, r0, lsr #0x10 + addls pc, pc, r1, lsl #0x2 + b _020D4670 +_020D4634: + b _020D4648 + b _020D4650 + b _020D4658 + b _020D4660 + b _020D4668 +_020D4648: + mov r0, #0x0 + b _020D4674 +_020D4650: + mov r0, #0x4 + b _020D4674 +_020D4658: + mov r0, #0x2 + b _020D4674 +_020D4660: + mov r0, #0x5 + b _020D4674 +_020D4668: + mov r0, #0x1 + b _020D4674 +_020D4670: + mov r0, #0x6 +_020D4674: + cmp r2, #0x51 + bne _020D46A0 + ldr r1, _020D4700 ; =0x021D54B0 + ldr r2, [r1, #0x10] + cmp r2, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r1, [r1, #0x14] + blx r2 + ldmia sp!, {r4,lr} + bx lr +_020D46A0: + cmp r2, #0x40 + bne _020D46C0 + ldr r1, _020D4700 ; =0x021D54B0 + ldr r2, [r1, #0x18] + cmp r2, #0x0 + ldrne r1, _020D4704 ; =0x027FFF94 + ldrneh r1, [r1, #0x0] + strneh r1, [r2, #0x0] +_020D46C0: + ldr r1, _020D4700 ; =0x021D54B0 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + movne r2, #0x0 + strne r2, [r1, #0x0] + ldr r2, _020D4700 ; =0x021D54B0 + ldr r4, [r2, #0x4] + cmp r4, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r1, [r2, #0x8] + mov r3, #0x0 + str r3, [r2, #0x4] + blx r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D4700: .word 0x021D54B0 +_020D4704: .word 0x027FFF94 + + arm_func_start MIC_GetLastSamplingAddress +MIC_GetLastSamplingAddress: ; 0x020D4708 + ldr r0, _020D4714 ; =0x027FFF90 + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D4714: .word 0x027FFF90 + + arm_func_start MIC_StopAutoSampling +MIC_StopAutoSampling: ; 0x020D4718 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020D4754 ; =MicGetResultCallback + mov r1, #0x0 + bl MIC_StopAutoSamplingAsync + ldr r1, _020D4758 ; =0x021D54B0 + cmp r0, #0x0 + str r0, [r1, #0xc] + bne _020D4740 + bl MicWaitBusy +_020D4740: + ldr r0, _020D4758 ; =0x021D54B0 + ldr r0, [r0, #0xc] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D4754: .word MicGetResultCallback +_020D4758: .word 0x021D54B0 + + arm_func_start MIC_StopAutoSamplingAsync +MIC_StopAutoSamplingAsync: ; 0x020D475C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl OS_DisableInterrupts + ldr r1, _020D47C8 ; =0x021D54B0 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020D4794 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r5,lr} + bx lr +_020D4794: + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + ldr r0, _020D47C8 ; =0x021D54B0 + str r5, [r0, #0x4] + str r4, [r0, #0x8] + bl MicStopAutoSampling +_020D47B0: + cmp r0, #0x0 + movne r0, #0x0 + moveq r0, #0x3 + add sp, sp, #0x4 + ldmia sp!, {r4-r5, lr} + bx lr +_020D47C8: .word 0x021D54B0 + + arm_func_start MIC_StartAutoSampling +MIC_StartAutoSampling: ; 0x020D47CC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D4808 ; =MicGetResultCallback + mov r2, #0x0 + bl MIC_StartAutoSamplingAsync + ldr r1, _020D480C ; =0x021D54B0 + cmp r0, #0x0 + str r0, [r1, #0xc] + bne _020D47F4 + bl MicWaitBusy +_020D47F4: + ldr r0, _020D480C ; =0x021D54B0 + ldr r0, [r0, #0xc] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D4808: .word MicGetResultCallback +_020D480C: .word 0x021D54B0 + + arm_func_start MIC_StartAutoSamplingAsync +MIC_StartAutoSamplingAsync: ; 0x020D4810 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + ldr r0, [r7, #0x4] + mov r6, r1 + ands r0, r0, #0x1f + mov r5, r2 + addne sp, sp, #0x4 + movne r0, #0x2 + ldmneia sp!, {r4-r7,lr} + bxne lr + ldr r1, [r7, #0x8] + ands r0, r1, #0x1f + addne sp, sp, #0x4 + movne r0, #0x2 + ldmneia sp!, {r4-r7,lr} + bxne lr + cmp r1, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x2 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldr r0, [r7, #0xc] + cmp r0, #0x400 + addcc sp, sp, #0x4 + movcc r0, #0x2 + ldmccia sp!, {r4-r7,lr} + bxcc lr + ldr r0, [r7, #0x0] + cmp r0, #0x5 + addls pc, pc, r0, lsl #0x2 + b _020D48D8 +_020D4890: + b _020D48A8 + b _020D48B0 + b _020D48B8 + b _020D48C0 + b _020D48C8 + b _020D48D0 +_020D48A8: + mov r1, #0x0 + b _020D48E8 +_020D48B0: + mov r1, #0x1 + b _020D48E8 +_020D48B8: + mov r1, #0x2 + b _020D48E8 +_020D48C0: + mov r1, #0x3 + b _020D48E8 +_020D48C8: + mov r1, #0x5 + b _020D48E8 +_020D48D0: + mov r1, #0x7 + b _020D48E8 +_020D48D8: + add sp, sp, #0x4 + mov r0, #0x2 + ldmia sp!, {r4-r7,lr} + bx lr +_020D48E8: + ldr r0, [r7, #0x10] + cmp r0, #0x0 + orrne r0, r1, #0x10 + andne r0, r0, #0xff + andeq r0, r1, #0xff + and r4, r0, #0xff + bl OS_DisableInterrupts + ldr r1, _020D497C + ldr r2, [r1] + cmp r2, #0x0 + beq _020D4928 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020D4928: + mov r2, #0x1 + str r2, [r1] + bl OS_RestoreInterrupts + ldr r0, _020D497C + mov r3, r4 + str r6, [r0, #0x4] + str r5, [r0, #0x8] + ldr r1, [r7, #0x14] + str r1, [r0, #0x10] + ldr r1, [r7, #0x18] + str r1, [r0, #0x14] + ldr r0, [r7, #0x4] + ldr r1, [r7, #0x8] + ldr r2, [r7, #0xC] + bl MicStartAutoSampling + cmp r0, #0x0 + movne r0, #0x0 + moveq r0, #0x3 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_020D497C: .word 0x021D54B0 + + arm_func_start MIC_DoSamplingAsync +MIC_DoSamplingAsync: ; 0x020D4980 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + cmp r0, #0x6 + mov r7, r1 + mov r6, r2 + mov r5, r3 + addge sp, sp, #0x4 + movge r0, #0x2 + ldmgeia sp!, {r4-r7,lr} + bxge lr + cmp r0, #0x3 + addls pc, pc, r0, lsl #0x2 + b _020D49E4 +_020D49B4: + b _020D49C4 + b _020D49CC + b _020D49D4 + b _020D49DC +_020D49C4: + mov r4, #0x0 + b _020D49F4 +_020D49CC: + mov r4, #0x1 + b _020D49F4 +_020D49D4: + mov r4, #0x2 + b _020D49F4 +_020D49DC: + mov r4, #0x3 + b _020D49F4 +_020D49E4: + add sp, sp, #0x4 + mov r0, #0x2 + ldmia sp!, {r4-r7,lr} + bx lr +_020D49F4: + bl OS_DisableInterrupts + ldr r1, _020D4A58 + ldr r2, [r1] + cmp r2, #0x0 + beq _020D4A1C + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020D4A1C: + mov r2, #0x1 + str r2, [r1] + bl OS_RestoreInterrupts + ldr r1, _020D4A58 + mov r0, r4 + str r6, [r1, #0x4] + str r5, [r1, #0x8] + str r7, [r1, #0x18] + bl MicDoSampling + cmp r0, #0x0 + movne r0, #0x0 + moveq r0, #0x3 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_020D4A58: .word 0x021D54B0 + + arm_func_start MIC_Init +MIC_Init: ; 0x020D4A5C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020D4AD8 ; =0x021D54AC + ldrh r0, [r1, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, _020D4ADC ; =0x021D54B0 + mov r2, #0x0 + mov r3, #0x1 + strh r3, [r1, #0x0] + str r2, [r0, #0x0] + str r2, [r0, #0x4] + bl PXI_Init + mov r5, #0x9 + mov r4, #0x1 +_020D4AA0: + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady +_020D4AAC: + cmp r0, #0x0 + beq _020D4AA0 + ldr r2, _020D4AE0 + mov r3, #0x0 + ldr r1, _020D4AE4 + mov r0, #0x9 + str r3, [r2] + bl PXI_SetFifoRecvCallback + add sp, sp, #0x4 + ldmia sp!, {r4-r5, lr} + bx lr +_020D4AD8: .word 0x021D54AC +_020D4ADC: .word 0x021D54B0 +_020D4AE0: .word 0x027FFF90 +_020D4AE4: .word MicCommonCallback + + arm_func_start PM_DeletePostSleepCallback +PM_DeletePostSleepCallback: ; 0x020D4AE8 + ldr ip, _020D4AF8 ; =0x020D4B78 + mov r1, r0 + ldr r0, _020D4AFC ; =0x021D54E0 + bx r12 + .balign 4 +_020D4AF8: .word 0x020D4B78 +_020D4AFC: .word 0x021D54E0 + + arm_func_start PM_DeletePreSleepCallback +PM_DeletePreSleepCallback: ; 0x020D4B00 + ldr ip, _020D4B10 ; =0x020D4B78 + mov r1, r0 + ldr r0, _020D4B14 ; =0x021D54D8 + bx r12 + .balign 4 +_020D4B10: .word 0x020D4B78 +_020D4B14: .word 0x021D54D8 + + arm_func_start PM_AppendPostSleepCallback +PM_AppendPostSleepCallback: ; 0x020D4B18 + ldr ip, _020D4B28 ; =FUN_020D4BC4 + mov r1, r0 + ldr r0, _020D4B2C ; =0x021D54E0 + bx r12 + .balign 4 +_020D4B28: .word FUN_020D4BC4 +_020D4B2C: .word 0x021D54E0 + + arm_func_start PM_PrependPreSleepCallback +PM_PrependPreSleepCallback: ; 0x020D4B30 + ldr ip, _020D4B40 ; =FUN_020D4C0C + mov r1, r0 + ldr r0, _020D4B44 ; =0x021D54D8 + bx r12 + .balign 4 +_020D4B40: .word FUN_020D4C0C +_020D4B44: .word 0x021D54D8 + + arm_func_start PMi_ExecuteList +PMi_ExecuteList: ; 0x020D4B48 + stmdb sp!, {r4,lr} + movs r4, r0 + ldmeqia sp!, {r4,lr} + bxeq lr +_020D4B58: + ldr r0, [r4, #0x4] + ldr r1, [r4, #0x0] + blx r1 + ldr r4, [r4, #0x8] + cmp r4, #0x0 + bne _020D4B58 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020D4B78 +FUN_020D4B78: + cmp r0, #0x0 + bxeq lr + ldr r3, [r0] + mov r2, r3 + cmp r3, #0x0 + bxeq lr +_020D4B90: + cmp r3, r1 + bne _020D4BB0 + cmp r3, r2 + ldreq r1, [r3, #0x8] + streq r1, [r0] + ldrne r0, [r3, #0x8] + strne r0, [r2, #0x8] + bx lr +_020D4BB0: + mov r2, r3 + ldr r3, [r3, #0x8] + cmp r3, #0x0 + bne _020D4B90 + bx lr + + arm_func_start FUN_020D4BC4 +FUN_020D4BC4: ; 0x020D4BC4 + cmp r0, #0x0 + bxeq lr + ldr r2, [r0, #0x0] + cmp r2, #0x0 + moveq r2, #0x0 + streq r2, [r1, #0x8] + streq r1, [r0, #0x0] + bxeq lr + ldr r0, [r2, #0x8] + cmp r0, #0x0 + beq _020D4C00 +_020D4BF0: + mov r2, r0 + ldr r0, [r0, #0x8] + cmp r0, #0x0 + bne _020D4BF0 +_020D4C00: + str r0, [r1, #0x8] + str r1, [r2, #0x8] + bx lr + + arm_func_start FUN_020D4C0C +FUN_020D4C0C: ; 0x020D4C0C + cmp r0, #0x0 + ldrne r2, [r0, #0x0] + strne r2, [r1, #0x8] + strne r1, [r0, #0x0] + bx lr + + arm_func_start PM_GetLEDPattern +PM_GetLEDPattern: ; 0x020D4C20 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D4C58 ; =0x020D587C + add r2, sp, #0x0 + bl PM_GetLEDPatternAsync +_020D4C34: + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmnefd sp!, {lr} + bxne lr + bl PMi_WaitBusy + ldr r0, [sp] + add sp, sp, #0x4 + ldmfd sp!, {lr} + bx lr +_020D4C58: .word 0x020D587C + + arm_func_start PM_GetLEDPatternAsync +PM_GetLEDPatternAsync: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl PMi_Lock +_020D4C70: + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r1, _020D4CA4 + ldr r0, _020D4CA8 + str r5, [r1, #0x4] + str r4, [r1, #0x8] + str r6, [r1, #0xC] + bl PMi_SendPxiData + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020D4CA4: .word 0x021D54E4 +_020D4CA8: .word 0x03006700 + + arm_func_start PMi_SendLEDPatternCommand +PMi_SendLEDPatternCommand: ; 0x020D4CAC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D4CE4 ; =0x020D587C + add r2, sp, #0x0 + bl PMi_SendLEDPatternCommandAsync +_020D4CC0: + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmnefd sp!, {lr} + bxne lr + bl PMi_WaitBusy + ldr r0, [sp] + add sp, sp, #0x4 + ldmfd sp!, {lr} + bx lr +_020D4CE4: .word 0x020D587C + + arm_func_start PMi_SendLEDPatternCommandAsync +PMi_SendLEDPatternCommandAsync: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl PMi_Lock +_020D4CFC: + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r0, _020D4D34 + ldr r1, _020D4D38 + and r2, r6, #0xff + orr r0, r2, r0 + str r5, [r1, #0x4] + str r4, [r1, #0x8] + bl PMi_SendPxiData + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020D4D34: .word 0x03006600 +_020D4D38: .word 0x021D54E4 + + arm_func_start PM_GetLCDPower +PM_GetLCDPower: ; 0x020D4D3C + ldr r0, _020D4D54 ; =0x04000304 + ldrh r0, [r0, #0x0] + ands r0, r0, #0x1 + movne r0, #0x1 + moveq r0, #0x0 + bx lr + .balign 4 +_020D4D54: .word 0x04000304 + + arm_func_start PM_SetLCDPower +PM_SetLCDPower: ; 0x020D4D58 + ldr ip, _020D4D74 ; =PMi_SetLCDPower + mov r1, #0x0 + cmp r0, #0x1 + movne r0, #0x0 + mov r2, r1 + mov r3, #0x1 + bx r12 + .balign 4 +_020D4D74: .word PMi_SetLCDPower + + arm_func_start PMi_SetLCDPower +PMi_SetLCDPower: ; 0x020D4D78 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + beq _020D4E00 + cmp r0, #0x1 + bne _020D4E4C + cmp r2, #0x0 + bne _020D4DC0 + ldr r2, _020D4E5C ; =0x027FFC3C + ldr r0, _020D4E60 ; =0x021D54DC + ldr r2, [r2, #0x0] + ldr r0, [r0, #0x0] + sub r0, r2, r0 + cmp r0, #0x7 + addls sp, sp, #0x4 + movls r0, #0x0 + ldmlsia sp!, {lr} + bxls lr +_020D4DC0: + cmp r1, #0x0 + beq _020D4DEC + cmp r3, #0x0 + beq _020D4DDC + mov r0, r1 + bl PMi_SetLED + b _020D4DEC +_020D4DDC: + mov r0, r1 + mov r1, #0x0 + mov r2, r1 + bl PMi_SetLEDAsync +_020D4DEC: + ldr r1, _020D4E64 ; =0x04000304 + ldrh r0, [r1, #0x0] + orr r0, r0, #0x1 + strh r0, [r1, #0x0] + b _020D4E4C +_020D4E00: + ldr lr, _020D4E64 ; =0x04000304 + ldr r2, _020D4E5C ; =0x027FFC3C + ldrh r12, [lr, #0x0] + ldr r0, _020D4E60 ; =0x021D54DC + cmp r1, #0x0 + bic r12, r12, #0x1 + strh r12, [lr, #0x0] + ldr r2, [r2, #0x0] + str r2, [r0, #0x0] + beq _020D4E4C + cmp r3, #0x0 + beq _020D4E3C + mov r0, r1 + bl PMi_SetLED + b _020D4E4C +_020D4E3C: + mov r0, r1 + mov r1, #0x0 + mov r2, r1 + bl PMi_SetLEDAsync +_020D4E4C: + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D4E5C: .word 0x027FFC3C +_020D4E60: .word 0x021D54DC +_020D4E64: .word 0x04000304 + + arm_func_start PM_GoSleepMode +PM_GoSleepMode: ; 0x020D4E68 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x1c + ldr r3, _020D5084 ; =0x021D54D8 + mov r10, r0 + ldr r0, [r3, #0x0] + mov r9, r1 + mov r11, r2 + mov r8, #0x0 + bl PMi_ExecuteList + ldr r1, _020D5088 ; =0x04000208 + mov r0, r8 + ldrh r4, [r1, #0x0] + strh r0, [r1, #0x0] + bl OS_DisableInterrupts +_020D4EA0: + str r0, [sp] + ldr r0, _020D508C + bl OS_DisableIrqMask + str r0, [sp, #0x4] + mov r0, #0x40000 + bl OS_SetIrqMask + ldr r0, [sp] + bl OS_RestoreInterrupts + ldr r2, _020D5088 + mov r1, #0x1 + ldrh r0, [r2] + ands r0, sl, #0x8 + strh r1, [r2] + beq _020D4EE8 + ldr r0, _020D5090 + ldrh r0, [r0] + cmp r0, #0x2 + biceq sl, sl, #0x8 +_020D4EE8: + ands r0, sl, #0x10 + beq _020D4EFC + bl CTRDG_IsExisting + cmp r0, #0x0 + biceq sl, sl, #0x10 +_020D4EFC: + ldr r0, _020D5094 + mov r1, #0x4000000 + ldr r7, [r1] + ldr r6, [r0] + bl PM_GetLCDPower + str r0, [sp, #0x8] + add r0, sp, #0xC + add r1, sp, #0x10 + bl PM_GetBackLight + mov r0, #0x2 + mov r1, #0x0 + bl FUN_020D526C + ldr r2, _020D5098 + ldr r0, [r2] + str r0, [sp, #0x14] +_020D4F38: + ldr r1, [r2] + ldr r0, [sp, #0x14] + cmp r0, r1 + beq _020D4F38 + ldr r0, [r2] + mov r2, #0x4000000 + str r0, [sp, #0x14] + ldr r0, [r2] + ldr r1, _020D5094 + bic r0, r0, #0x30000 + str r0, [r2] + ldr r0, [r1] + bic r0, r0, #0x10000 + str r0, [r1] + ldr r2, _020D5098 +_020D4F74: + ldr r1, [r2] + ldr r0, [sp, #0x14] + cmp r0, r1 + beq _020D4F74 + ldr r0, [r2] + str r0, [sp, #0x14] + ldr r2, _020D5098 +_020D4F90: + ldr r1, [r2] + ldr r0, [sp, #0x14] + cmp r0, r1 + beq _020D4F90 + ldr r0, [sp, #0xC] + ldr r1, [sp, #0x10] + orr r0, sl, r0, lsl #0x5 + orr r0, r0, r1, lsl #0x6 + mov r0, r0, lsl #0x10 + mov r5, r0, lsr #0x10 + orr r0, r9, fp + mov r0, r0, lsl #0x10 + mov r9, r0, lsr #0x10 +_020D4FC4: + mov r0, r5 + mov r1, r9 + bl PMi_SendSleepStart + cmp r0, #0x0 + bne _020D4FC4 + bl OS_Halt + ldr r0, _020D509C + bl OS_SpinWait + ands r0, sl, #0x8 + beq _020D4FFC + ldr r0, _020D50A0 + ldr r0, [r0] + ands r0, r0, #0x100000 + movne r8, #0x1 +_020D4FFC: + cmp r8, #0x0 + bne _020D5040 + ldr r0, [sp, #0x8] + cmp r0, #0x1 + bne _020D5028 + mov r0, #0x1 + mov r1, r0 + mov r2, r0 + mov r3, #0x0 + bl PMi_SetLCDPower + b _020D5030 +_020D5028: + mov r0, #0x1 + bl PMi_SetLED +_020D5030: + mov r1, #0x4000000 + ldr r0, _020D5094 + str r7, [r1] + str r6, [r0] +_020D5040: + bl OS_DisableInterrupts + ldr r0, [sp, #0x4] + bl OS_SetIrqMask + ldr r0, [sp] + bl OS_RestoreInterrupts + ldr r1, _020D5088 + cmp r8, #0x0 + ldrh r0, [r1] + strh r4, [r1] + beq _020D506C + bl FUN_020D5180 +_020D506C: + ldr r0, _020D50A4 + ldr r0, [r0] + bl PMi_ExecuteList + add sp, sp, #0x1C + ldmia sp!, {r4-r11, lr} + bx lr +_020D5084: .word 0x021D54D8 +_020D5088: .word 0x04000208 +_020D508C: .word 0x003FFFFF +_020D5090: .word 0x027FFC40 +_020D5094: .word 0x04001000 +_020D5098: .word 0x027FFC3C +_020D509C: .word 0x00996A00 +_020D50A0: .word 0x04000214 +_020D50A4: .word 0x021D54E0 + + + arm_func_start PMi_SendPxiData +PMi_SendPxiData: ; 0x020D50A8 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, #0x8 + mov r4, #0x0 +_020D50B8: + mov r0, r5 + mov r1, r6 + mov r2, r4 + bl PXI_SendWordByFifo +_020D50C8: + cmp r0, #0 + bne _020D50B8 + ldmia sp!, {r4-r6, lr} + bx lr + + arm_func_start PM_GetBackLight +PM_GetBackLight: ; 0x020D50D8 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r5, r0 + add r1, sp, #0x0 + mov r0, #0x0 + bl PMi_ReadRegister +_020D50F4: + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r5, #0x0 + beq _020D5120 + ldrh r1, [sp] + ands r1, r1, #0x8 + movne r1, #0x1 + moveq r1, #0x0 + str r1, [r5] +_020D5120: + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldrh r1, [sp] + ands r1, r1, #0x4 + movne r1, #0x1 + moveq r1, #0x0 + str r1, [r4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr diff --git a/asm/unk_020D5150.s b/asm/unk_020D5150.s new file mode 100644 index 00000000..ed1fb8b6 --- /dev/null +++ b/asm/unk_020D5150.s @@ -0,0 +1,21374 @@ + .include "asm/macros.inc" + .include "global.inc" + + ; TODO: disassemble the rest of the .byte s + + .text + + arm_func_start PM_SetAmpGain +PM_SetAmpGain: + ldr ip, _020D5164 ; =0x020D53DC + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0x10 + mov r0, #0x3 + bx r12 + .balign 4 +_020D5164: .word 0x020D53DC + + arm_func_start PM_SetAmp +PM_SetAmp: ; 0x020D5168 + ldr ip, _020D517C ; =0x020D53DC + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0x10 + mov r0, #0x2 + bx r12 + .balign 4 +_020D517C: .word 0x020D53DC + + arm_func_start PM_ForceToPowerOff +PM_ForceToPowerOff: ; 0x020D5180 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020D51B8 ; =PMi_DummyCallback + add r1, sp, #0x0 + bl PM_ForceToPowerOffAsync +_020D5194: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18 + .byte 0x1E, 0xFF, 0x2F, 0x11, 0xB6, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x9D, 0xE5, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D51B8: .word PMi_DummyCallback + + arm_func_start PM_ForceToPowerOffAsync +PM_ForceToPowerOffAsync: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + ldr r0, _020D5268 ; =0x00996A00 + mov r6, r1 + bl OS_SpinWait + bl PM_GetLCDPower + cmp r0, #0x1 + beq _020D524C + add r0, sp, #0x0 + add r1, sp, #0x4 + bl PM_GetBackLight +_020D51EC: + .byte 0x00, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE1 + .byte 0x19, 0x00, 0x00, 0xEB, 0x04, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x0A + .byte 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x13, 0x00, 0x00, 0xEB, 0x01, 0x00, 0xA0, 0xE3 + .byte 0xCC, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x34, 0x50, 0x9F, 0xE5 + .byte 0x01, 0x40, 0xA0, 0xE3, 0x05, 0x00, 0xA0, 0xE1, 0x50, 0xE0, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1 + .byte 0xC4, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0xF9, 0xFF, 0xFF, 0x0A +_020D524C: + mov r1, r7 + mov r2, r6 + mov r0, #0xe + bl PM_SendUtilityCommandAsync + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D5268: .word 0x00996A00 + + arm_func_start PM_SetBackLight +PM_SetBackLight: ; 0x020D526C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020D52A4 ; =PMi_DummyCallback + add r3, sp, #0x0 + bl PM_SetBackLightAsync +_020D5280: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x7B, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x9D, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 +_020D52A4: .word PMi_DummyCallback + + arm_func_start PM_SetBackLightAsync +PM_SetBackLightAsync: + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + mov r12, #0x0 + bne _020D52D0 + cmp r1, #0x1 + moveq r12, #0x6 + cmp r1, #0x0 + moveq r12, #0x7 + b _020D5304 +_020D52D0: + cmp r0, #0x1 + bne _020D52EC + cmp r1, #0x1 + moveq r12, #0x4 + cmp r1, #0x0 + moveq r12, #0x5 + b _020D5304 +_020D52EC: + cmp r0, #0x2 + bne _020D5304 + cmp r1, #0x1 + moveq r12, #0x8 + cmp r1, #0x0 + moveq r12, #0x9 +_020D5304: + cmp r12, #0x0 + addeq sp, sp, #0x4 + ldreq r0, _020D5334 ; =0x0000FFFF + ldmeqia sp!, {lr} + bxeq lr + mov r1, r2 + mov r0, r12 + mov r2, r3 + bl PM_SendUtilityCommandAsync + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D5334: .word 0x0000FFFF + + arm_func_start PMi_SetLED +PMi_SetLED: ; 0x020D5338 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D5370 ; =PMi_DummyCallback + add r2, sp, #0x0 + bl PMi_SetLEDAsync +_020D534C: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x48, 0x01, 0x00, 0xEB + .byte 0x00, 0x00, 0x9D, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D5370: .word PMi_DummyCallback + + arm_func_start PMi_SetLEDAsync +PMi_SetLEDAsync: + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x1 + beq _020D5398 + cmp r0, #0x2 + beq _020D53A8 + cmp r0, #0x3 + beq _020D53A0 + b _020D53B0 +_020D5398: + mov r0, #0x1 + b _020D53B4 +_020D53A0: + mov r0, #0x2 + b _020D53B4 +_020D53A8: + mov r0, #0x3 + b _020D53B4 +_020D53B0: + mov r0, #0x0 +_020D53B4: + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldreq r0, _020D53D8 ; =0x0000FFFF + ldmeqia sp!, {lr} + bxeq lr + bl PM_SendUtilityCommandAsync + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D53D8: .word 0x0000FFFF +_020D53DC: + .byte 0x00, 0x40, 0x2D, 0xE9 + .byte 0x04, 0xD0, 0x4D, 0xE2, 0x28, 0x20, 0x9F, 0xE5, 0x00, 0x30, 0x8D, 0xE2, 0x09, 0x00, 0x00, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x1F, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x9D, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x7C, 0x58, 0x0D, 0x02 + + arm_func_start PMi_WriteRegisterAsync +PMi_WriteRegisterAsync: ; 0x020D5418 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r4, r1 + mov r6, r2 + mov r5, r3 + bl PMi_Lock +_020D5434: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x01, 0x00, 0xA0, 0x03 + .byte 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x38, 0x00, 0x9F, 0xE5, 0x38, 0x10, 0x9F, 0xE5 + .byte 0xFF, 0x20, 0x07, 0xE2, 0x00, 0x00, 0x82, 0xE1, 0x04, 0x60, 0x81, 0xE5, 0x08, 0x50, 0x81, 0xE5 + .byte 0x10, 0xFF, 0xFF, 0xEB, 0x24, 0x00, 0x9F, 0xE5, 0x24, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0x04, 0xE0 + .byte 0x01, 0x00, 0x80, 0xE1, 0x0B, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x64, 0x00, 0x02, 0xE4, 0x54, 0x1D, 0x02 + .byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01 + + arm_func_start PMi_ReadRegister +PMi_ReadRegister: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020D54D0 ; =PMi_DummyCallback + add r3, sp, #0x0 + bl PMi_ReadRegisterAsync +_020D54AC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0xF0, 0x00, 0x00, 0xEB + .byte 0x00, 0x00, 0x9D, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D54D0: .word PMi_DummyCallback + + arm_func_start PMi_ReadRegisterAsync +PMi_ReadRegisterAsync: + stmdb sp!, {r4-r8,lr} + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl PMi_Lock +_020D54EC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x01, 0x00, 0xA0, 0x03, 0xF0, 0x41, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x38, 0xC0, 0x9F, 0xE5 + .byte 0x38, 0x10, 0x9F, 0xE5, 0x38, 0x00, 0x9F, 0xE5, 0xFF, 0x20, 0x07, 0xE2, 0x87, 0xE1, 0xA0, 0xE1 + .byte 0x00, 0x80, 0xA0, 0xE3, 0x2C, 0x30, 0x9F, 0xE5, 0xBE, 0x80, 0x8C, 0xE1, 0x00, 0x00, 0x82, 0xE1 + .byte 0x04, 0x50, 0x81, 0xE5, 0x08, 0x40, 0x81, 0xE5, 0x87, 0x61, 0x83, 0xE7, 0xDD, 0xFE, 0xFF, 0xEB + .byte 0x08, 0x00, 0xA0, 0xE1, 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x0C, 0x55, 0x1D, 0x02 + .byte 0xE4, 0x54, 0x1D, 0x02, 0x00, 0x65, 0x00, 0x03, 0x10, 0x55, 0x1D, 0x02 + + arm_func_start PM_SendUtilityCommandAsync +PM_SendUtilityCommandAsync: ; 0x020D554C + stmdb sp!, {r4-r6,lr} + mov r4, r0 + mov r6, r1 + mov r5, r2 + bl PMi_Lock +_020D5560: + .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 + .byte 0x24, 0x28, 0xA0, 0xE1, 0x34, 0x10, 0x9F, 0xE5, 0x34, 0x00, 0x9F, 0xE5, 0xFF, 0x20, 0x02, 0xE2 + .byte 0x00, 0x00, 0x82, 0xE1, 0x04, 0x60, 0x81, 0xE5, 0x08, 0x50, 0x81, 0xE5, 0xC5, 0xFE, 0xFF, 0xEB + .byte 0x20, 0x00, 0x9F, 0xE5, 0x20, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0x04, 0xE0, 0x01, 0x00, 0x80, 0xE1 + .byte 0xC0, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + .byte 0xE4, 0x54, 0x1D, 0x02, 0x00, 0x63, 0x00, 0x02, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01 + + arm_func_start PMi_SendSleepStart +PMi_SendSleepStart: ; 0x020D55C0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl PMi_Lock +_020D55D4: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x01, 0x00, 0xA0, 0x03 + .byte 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x70, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3 + .byte 0x6C, 0x00, 0x9F, 0xE5, 0x00, 0x20, 0x81, 0xE5, 0xAA, 0xFE, 0xFF, 0xEB, 0x5C, 0x10, 0x9F, 0xE5 + .byte 0x00, 0x00, 0x91, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x50, 0xC0, 0x9F, 0xE5, 0x00, 0x00, 0x81, 0xE5, 0x00, 0x20, 0xA0, 0xE1, 0x00, 0x30, 0xA0, 0xE1 + .byte 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x8C, 0xE5, 0xD2, 0xFD, 0xFF, 0xEB, 0x38, 0x00, 0x9F, 0xE5 + .byte 0xFF, 0x10, 0x05, 0xE2, 0x00, 0x00, 0x81, 0xE1, 0x9A, 0xFE, 0xFF, 0xEB, 0x2C, 0x00, 0x9F, 0xE5 + .byte 0x2C, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0x04, 0xE0, 0x01, 0x00, 0x80, 0xE1, 0x95, 0xFE, 0xFF, 0xEB + .byte 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + .byte 0xD0, 0x54, 0x1D, 0x02, 0x00, 0x60, 0x00, 0x03, 0xD4, 0x54, 0x1D, 0x02, 0x00, 0x61, 0x00, 0x02 + .byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01 + + arm_func_start PMi_CommonCallback +PMi_CommonCallback: ; 0x020D5678 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + beq _020D569C + mov r0, #0x2 + bl PMi_CallCallbackAndUnlock + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020D569C: + and r0, r1, #0x7f00 + mov r0, r0, lsl #0x8 + and r1, r1, #0xff + mov r2, r0, lsr #0x10 + mov r0, r1, lsl #0x10 + cmp r2, #0x70 + mov r0, r0, lsr #0x10 + blo _020D56FC + cmp r2, #0x74 + bhi _020D56FC + ldr r1, _020D5750 ; =0x021D5510 + sub r2, r2, #0x70 + and r0, r0, #0xff + ldr r1, [r1, r2, lsl #0x3] + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r1, #0x0 + strneh r0, [r1, #0x0] + mov r1, r2, lsl #0x3 + ldr r0, _020D5754 ; =0x021D550C + mov r2, #0x1 + strh r2, [r0, r1] + mov r0, #0x0 + b _020D5740 +_020D56FC: + cmp r2, #0x60 + ldreq r1, _020D5758 ; =0x021D54D0 + moveq r2, #0x1 + streq r2, [r1, #0x0] + beq _020D5740 + cmp r2, #0x62 + ldreq r1, _020D575C ; =0x021D54D4 + moveq r2, #0x1 + streq r2, [r1, #0x0] + beq _020D5740 + cmp r2, #0x67 + bne _020D5740 + ldr r1, _020D5760 ; =0x021D54E4 + ldr r1, [r1, #0xc] + cmp r1, #0x0 + strne r0, [r1, #0x0] + mov r0, #0x0 +_020D5740: + bl PMi_CallCallbackAndUnlock + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D5750: .word 0x021D5510 +_020D5754: .word 0x021D550C +_020D5758: .word 0x021D54D0 +_020D575C: .word 0x021D54D4 +_020D5760: .word 0x021D54E4 + + arm_func_start PM_Init +PM_Init: ; 0x020D5764 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020D580C ; =0x021D54CC + ldrh r0, [r1, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, _020D5810 ; =0x021D54E4 + mov r2, #0x0 + mov r3, #0x1 + strh r3, [r1, #0x0] + str r2, [r0, #0x0] + str r2, [r0, #0x4] + bl PXI_Init + mov r5, #0x8 + mov r4, #0x1 + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady +_020D57B4: + .byte 0x00, 0x00, 0x50, 0xE3, 0xFA, 0xFF, 0xFF, 0x0A, 0x50, 0x10, 0x9F, 0xE5 + .byte 0x08, 0x00, 0xA0, 0xE3, 0x7C, 0xE9, 0xFF, 0xEB, 0x00, 0x30, 0xA0, 0xE3, 0x44, 0x00, 0x9F, 0xE5 + .byte 0x03, 0x20, 0xA0, 0xE1, 0x83, 0x11, 0xA0, 0xE1, 0x01, 0x30, 0x83, 0xE2, 0xB1, 0x20, 0x80, 0xE1 + .byte 0x05, 0x00, 0x53, 0xE3, 0xFA, 0xFF, 0xFF, 0xBA, 0x2C, 0x00, 0x9F, 0xE5, 0x2A, 0xDA, 0xFF, 0xEB + .byte 0x28, 0x10, 0x9F, 0xE5, 0x28, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x91, 0xE5, 0x00, 0x10, 0x80, 0xE5 + .byte 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D580C: .word 0x021D54CC +_020D5810: .word 0x021D54E4 +_020D5814: + .byte 0x78, 0x56, 0x0D, 0x02, 0x0C, 0x55, 0x1D, 0x02, 0xF4, 0x54, 0x1D, 0x02 + .byte 0x3C, 0xFC, 0x7F, 0x02, 0xDC, 0x54, 0x1D, 0x02 + + arm_func_start PMi_CallCallbackAndUnlock +PMi_CallCallbackAndUnlock: ; 0x020D5828 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020D5878 ; =0x021D54E4 + ldr r1, [r2, #0x0] + ldr r12, [r2, #0x4] + cmp r1, #0x0 + movne r3, #0x0 + strne r3, [r2, #0x0] + cmp r12, #0x0 + addeq sp, sp, #0x4 + ldr r1, [r2, #0x8] + ldmeqia sp!, {lr} + bxeq lr + ldr r2, _020D5878 ; =0x021D54E4 + mov r3, #0x0 + str r3, [r2, #0x4] + blx r12 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D5878: .word 0x021D54E4 + + arm_func_start PMi_DummyCallback +PMi_DummyCallback: ; 0x020D587C + str r0, [r1, #0x0] + bx lr + + arm_func_start PMi_WaitBusy +PMi_WaitBusy: ; 0x020D5884 + stmdb sp!, {r4,lr} + ldr r4, _020D58C0 ; =0x021D54E4 + ldr r0, [r4, #0x0] + cmp r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr +_020D589C: + bl OS_GetCpsrIrq + cmp r0, #0x80 + bne _020D58AC + bl PXIi_HandlerRecvFifoNotEmpty +_020D58AC: + ldr r0, [r4, #0x0] + cmp r0, #0x0 + bne _020D589C + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D58C0: .word 0x021D54E4 + + arm_func_start PMi_Lock +PMi_Lock: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r1, _020D5910 ; =0x021D54E4 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020D58F4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {lr} + bx lr +_020D58F4: + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D5910: .word 0x021D54E4 + + arm_func_start RtcWaitBusy +RtcWaitBusy: ; 0x020D5914 + ldr ip, _020D5928 ; =0x021D5538 +_020D5918: + ldr r0, [r12, #0x0] + cmp r0, #0x1 + beq _020D5918 + bx lr + .balign 4 +_020D5928: .word 0x021D5538 + + arm_func_start RtcGetResultCallback +RtcGetResultCallback: ; 0x020D592C + ldr r1, _020D5938 ; =0x021D5538 + str r0, [r1, #0x20] + bx lr + .balign 4 +_020D5938: .word 0x021D5538 + + arm_func_start RtcBCD2HEX +RtcBCD2HEX: ; 0x020D593C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, #0x0 + mov r3, r5 + mov r2, r5 +_020D5950: + mov r1, r0, lsr r2 + and r1, r1, #0xf + cmp r1, #0xa + addcs sp, sp, #0x4 + movcs r0, #0x0 + ldmcsia sp!, {r4-r5,lr} + bxcs lr + add r3, r3, #0x1 + cmp r3, #0x8 + add r2, r2, #0x4 + blt _020D5950 + mov r12, #0x0 + mov lr, r12 + mov r4, #0x1 + mov r2, #0xa +_020D598C: + mov r1, r0, lsr lr + and r3, r1, #0xf + mul r1, r4, r2 + mla r5, r4, r3, r5 + add r12, r12, #0x1 + mov r4, r1 + cmp r12, #0x8 + add lr, lr, #0x4 + blt _020D598C + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start RtcCommonCallback +RtcCommonCallback: ; 0x020D59C0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + beq _020D5A30 + ldr r0, _020D5F30 ; =0x021D5538 + ldr r2, _020D5F30 ; =0x021D5538 + ldr r1, [r0, #0x18] + ldr r4, [r2, #0x4] + cmp r1, #0x0 + movne r1, #0x0 + strne r1, [r0, #0x18] + ldr r0, _020D5F30 ; =0x021D5538 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + movne r1, #0x0 + strne r1, [r0, #0x0] + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r1, [r2, #0x10] + mov r3, #0x0 + mov r0, #0x6 + str r3, [r2, #0x4] + blx r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020D5A30: + and r0, r1, #0x7f00 + mov r0, r0, lsr #0x8 + and r0, r0, #0xff + cmp r0, #0x30 + and r2, r1, #0xff + bne _020D5A70 + ldr r0, _020D5F30 ; =0x021D5538 + ldr r0, [r0, #0x1c] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + blx r0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020D5A70: + cmp r2, #0x0 + bne _020D5E88 + ldr r0, _020D5F30 ; =0x021D5538 + mov r5, #0x0 + ldr r1, [r0, #0x14] + cmp r1, #0xf + addls pc, pc, r1, lsl #0x2 + b _020D5E74 +_020D5A90: + .byte 0x0E, 0x00, 0x00, 0xEA, 0x22, 0x00, 0x00, 0xEA, 0x35, 0x00, 0x00, 0xEA, 0x0B, 0x01, 0x00, 0xEA + .byte 0x0A, 0x01, 0x00, 0xEA, 0x09, 0x01, 0x00, 0xEA, 0x5B, 0x00, 0x00, 0xEA, 0x66, 0x00, 0x00, 0xEA + .byte 0x6E, 0x00, 0x00, 0xEA, 0x96, 0x00, 0x00, 0xEA, 0xC2, 0x00, 0x00, 0xEA, 0x03, 0x01, 0x00, 0xEA + .byte 0x02, 0x01, 0x00, 0xEA, 0x01, 0x01, 0x00, 0xEA, 0x00, 0x01, 0x00, 0xEA, 0xFF, 0x00, 0x00, 0xEA + .byte 0x5C, 0x14, 0x9F, 0xE5, 0x08, 0x40, 0x90, 0xE5, 0x00, 0x00, 0xD1, 0xE5, 0x96, 0xFF, 0xFF, 0xEB + .byte 0x4C, 0x14, 0x9F, 0xE5, 0x00, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x80, 0x09, 0xA0, 0xE1 + .byte 0xA0, 0x0D, 0xA0, 0xE1, 0x90, 0xFF, 0xFF, 0xEB, 0x34, 0x14, 0x9F, 0xE5, 0x04, 0x00, 0x84, 0xE5 + .byte 0x00, 0x00, 0x91, 0xE5, 0x00, 0x05, 0xA0, 0xE1, 0x20, 0x0D, 0xA0, 0xE1, 0x8A, 0xFF, 0xFF, 0xEB + .byte 0x08, 0x00, 0x84, 0xE5, 0x04, 0x00, 0xA0, 0xE1, 0xCA, 0x01, 0x00, 0xEB, 0x0C, 0x00, 0x84, 0xE5 + .byte 0xEA, 0x00, 0x00, 0xEA, 0x0C, 0x14, 0x9F, 0xE5, 0x08, 0x40, 0x90, 0xE5, 0x00, 0x00, 0x91, 0xE5 + .byte 0x00, 0x0D, 0xA0, 0xE1, 0x20, 0x0D, 0xA0, 0xE1, 0x7F, 0xFF, 0xFF, 0xEB, 0xF4, 0x13, 0x9F, 0xE5 + .byte 0x00, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x80, 0x08, 0xA0, 0xE1, 0xA0, 0x0C, 0xA0, 0xE1 + .byte 0x79, 0xFF, 0xFF, 0xEB, 0xDC, 0x13, 0x9F, 0xE5, 0x04, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5 + .byte 0x80, 0x04, 0xA0, 0xE1, 0xA0, 0x0C, 0xA0, 0xE1, 0x73, 0xFF, 0xFF, 0xEB, 0x08, 0x00, 0x84, 0xE5 + .byte 0xD6, 0x00, 0x00, 0xEA, 0xB8, 0x13, 0x9F, 0xE5, 0x08, 0x40, 0x90, 0xE5, 0x00, 0x00, 0x91, 0xE5 + .byte 0xFF, 0x00, 0x00, 0xE2, 0x6C, 0xFF, 0xFF, 0xEB, 0xA4, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0x84, 0xE5 + .byte 0x00, 0x00, 0x91, 0xE5, 0x80, 0x09, 0xA0, 0xE1, 0xA0, 0x0D, 0xA0, 0xE1, 0x66, 0xFF, 0xFF, 0xEB + .byte 0x8C, 0x13, 0x9F, 0xE5, 0x04, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x00, 0x05, 0xA0, 0xE1 + .byte 0x20, 0x0D, 0xA0, 0xE1, 0x60, 0xFF, 0xFF, 0xEB, 0x08, 0x00, 0x84, 0xE5, 0x04, 0x00, 0xA0, 0xE1 + .byte 0xA0, 0x01, 0x00, 0xEB, 0x6C, 0x13, 0x9F, 0xE5, 0x0C, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5 + .byte 0x58, 0x13, 0x9F, 0xE5, 0x00, 0x0D, 0xA0, 0xE1, 0x20, 0x0D, 0xA0, 0xE1, 0x0C, 0x40, 0x91, 0xE5 + .byte 0x55, 0xFF, 0xFF, 0xEB, 0x4C, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5 + .byte 0x80, 0x08, 0xA0, 0xE1, 0xA0, 0x0C, 0xA0, 0xE1, 0x4F, 0xFF, 0xFF, 0xEB, 0x34, 0x13, 0x9F, 0xE5 + .byte 0x04, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x80, 0x04, 0xA0, 0xE1, 0xA0, 0x0C, 0xA0, 0xE1 + .byte 0x49, 0xFF, 0xFF, 0xEB, 0x08, 0x00, 0x84, 0xE5, 0xAC, 0x00, 0x00, 0xEA, 0x18, 0x13, 0x9F, 0xE5 + .byte 0x08, 0x20, 0x90, 0xE5, 0xB0, 0x00, 0xD1, 0xE1, 0x00, 0x0E, 0xA0, 0xE1, 0x20, 0x0E, 0xA0, 0xE1 + .byte 0x04, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x82, 0xE5 + .byte 0xA2, 0x00, 0x00, 0xEA, 0x00, 0x50, 0x82, 0xE5, 0xA0, 0x00, 0x00, 0xEA, 0xE8, 0x12, 0x9F, 0xE5 + .byte 0x08, 0x20, 0x90, 0xE5, 0xB0, 0x00, 0xD1, 0xE1, 0x80, 0x0C, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1 + .byte 0x01, 0x00, 0xA0, 0x13, 0x00, 0x00, 0x82, 0x15, 0x00, 0x50, 0x82, 0x05, 0x97, 0x00, 0x00, 0xEA + .byte 0xC0, 0x12, 0x9F, 0xE5, 0x08, 0x40, 0x90, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x80, 0x0E, 0xA0, 0xE1 + .byte 0xA0, 0x0E, 0xA0, 0xE1, 0x00, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x00, 0x09, 0xA0, 0xE1 + .byte 0x20, 0x0D, 0xA0, 0xE1, 0x28, 0xFF, 0xFF, 0xEB, 0x98, 0x12, 0x9F, 0xE5, 0x04, 0x00, 0x84, 0xE5 + .byte 0x00, 0x00, 0x91, 0xE5, 0x80, 0x04, 0xA0, 0xE1, 0xA0, 0x0C, 0xA0, 0xE1, 0x22, 0xFF, 0xFF, 0xEB + .byte 0x08, 0x00, 0x84, 0xE5, 0x05, 0x10, 0xA0, 0xE1, 0x78, 0x02, 0x9F, 0xE5, 0x0C, 0x10, 0x84, 0xE5 + .byte 0x00, 0x00, 0x90, 0xE5, 0x00, 0x0C, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1, 0x0C, 0x00, 0x94, 0x15 + .byte 0x01, 0x00, 0x80, 0x12, 0x0C, 0x00, 0x84, 0x15, 0x58, 0x02, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5 + .byte 0x00, 0x08, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1, 0x0C, 0x00, 0x94, 0x15, 0x02, 0x00, 0x80, 0x12 + .byte 0x0C, 0x00, 0x84, 0x15, 0x3C, 0x02, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x00, 0x04, 0xA0, 0xE1 + .byte 0xA0, 0x0F, 0xB0, 0xE1, 0x0C, 0x00, 0x94, 0x15, 0x04, 0x00, 0x80, 0x12, 0x0C, 0x00, 0x84, 0x15 + .byte 0x6E, 0x00, 0x00, 0xEA, 0x18, 0x30, 0x90, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x27, 0x00, 0x00, 0x1A + .byte 0x08, 0x10, 0x90, 0xE5, 0x00, 0x10, 0x91, 0xE5, 0x01, 0x00, 0x51, 0xE3, 0x12, 0x00, 0x00, 0x1A + .byte 0x04, 0x22, 0x9F, 0xE5, 0xB0, 0x10, 0xD2, 0xE1, 0x01, 0x1E, 0xA0, 0xE1, 0x21, 0x1E, 0xA0, 0xE1 + .byte 0x04, 0x00, 0x51, 0xE3, 0x61, 0x00, 0x00, 0x0A, 0x01, 0x10, 0x83, 0xE2, 0x18, 0x10, 0x80, 0xE5 + .byte 0xB0, 0x00, 0xD2, 0xE1, 0x0F, 0x00, 0xC0, 0xE3, 0x04, 0x00, 0x80, 0xE3, 0xB0, 0x00, 0xC2, 0xE1 + .byte 0x28, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x10, 0xA0, 0x01, 0xBC, 0x01, 0x9F, 0x05 + .byte 0x03, 0x50, 0xA0, 0x03, 0x18, 0x10, 0x80, 0x05, 0x54, 0x00, 0x00, 0xEA, 0xB8, 0x21, 0x9F, 0xE5 + .byte 0xB0, 0x10, 0xD2, 0xE1, 0x01, 0x1E, 0xA0, 0xE1, 0x21, 0x1E, 0xB0, 0xE1, 0x4F, 0x00, 0x00, 0x0A + .byte 0x01, 0x10, 0x83, 0xE2, 0x18, 0x10, 0x80, 0xE5, 0xB0, 0x00, 0xD2, 0xE1, 0x0F, 0x00, 0xC0, 0xE3 + .byte 0xB0, 0x00, 0xC2, 0xE1, 0x17, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x10, 0xA0, 0x01 + .byte 0x78, 0x01, 0x9F, 0x05, 0x03, 0x50, 0xA0, 0x03, 0x18, 0x10, 0x80, 0x05, 0x43, 0x00, 0x00, 0xEA + .byte 0x18, 0x50, 0x80, 0xE5, 0x41, 0x00, 0x00, 0xEA, 0x18, 0x30, 0x90, 0xE5, 0x00, 0x00, 0x53, 0xE3 + .byte 0x25, 0x00, 0x00, 0x1A, 0x08, 0x10, 0x90, 0xE5, 0x00, 0x10, 0x91, 0xE5, 0x01, 0x00, 0x51, 0xE3 + .byte 0x10, 0x00, 0x00, 0x1A, 0x50, 0x21, 0x9F, 0xE5, 0xB0, 0x10, 0xD2, 0xE1, 0x81, 0x1C, 0xA0, 0xE1 + .byte 0xA1, 0x1F, 0xB0, 0xE1, 0x35, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x83, 0xE2, 0x18, 0x10, 0x80, 0xE5 + .byte 0xB0, 0x00, 0xD2, 0xE1, 0x40, 0x00, 0x80, 0xE3, 0xB0, 0x00, 0xC2, 0xE1, 0xFD, 0x00, 0x00, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x10, 0xA0, 0x01, 0x10, 0x01, 0x9F, 0x05, 0x03, 0x50, 0xA0, 0x03 + .byte 0x18, 0x10, 0x80, 0x05, 0x29, 0x00, 0x00, 0xEA, 0x0C, 0x21, 0x9F, 0xE5, 0xB0, 0x10, 0xD2, 0xE1 + .byte 0x81, 0x1C, 0xA0, 0xE1, 0xA1, 0x1F, 0xB0, 0xE1, 0x24, 0x00, 0x00, 0x0A, 0x01, 0x10, 0x83, 0xE2 + .byte 0x18, 0x10, 0x80, 0xE5, 0xB0, 0x00, 0xD2, 0xE1, 0x40, 0x00, 0xC0, 0xE3, 0xB0, 0x00, 0xC2, 0xE1 + .byte 0xEC, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x10, 0xA0, 0x01, 0xCC, 0x00, 0x9F, 0x05 + .byte 0x03, 0x50, 0xA0, 0x03, 0x18, 0x10, 0x80, 0x05, 0x18, 0x00, 0x00, 0xEA, 0x18, 0x50, 0x80, 0xE5 + .byte 0x16, 0x00, 0x00, 0xEA +_020D5E74: + ldr r0, _020D5F30 ; =0x021D5538 + mov r1, #0x0 + str r1, [r0, #0x18] + mov r5, #0x4 + b _020D5ED0 +_020D5E88: + ldr r0, _020D5F30 ; =0x021D5538 + mov r1, #0x0 + str r1, [r0, #0x18] + cmp r2, #0x4 + addls pc, pc, r2, lsl #0x2 + b _020D5ECC +_020D5EA0: + .byte 0x09, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA, 0x03, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x00, 0xEA + .byte 0x05, 0x00, 0x00, 0xEA, 0x04, 0x50, 0xA0, 0xE3, 0x04, 0x00, 0x00, 0xEA, 0x05, 0x50, 0xA0, 0xE3 + .byte 0x02, 0x00, 0x00, 0xEA, 0x01, 0x50, 0xA0, 0xE3, 0x00, 0x00, 0x00, 0xEA +_020D5ECC: + mov r5, #0x6 +_020D5ED0: + ldr r0, _020D5F30 ; =0x021D5538 + ldr r1, [r0, #0x18] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r2, _020D5F30 ; =0x021D5538 + ldr r1, [r0, #0x0] + ldr r4, [r2, #0x4] + cmp r1, #0x0 + movne r1, #0x0 + strne r1, [r0, #0x0] + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r1, [r2, #0x10] + mov r3, #0x0 + mov r0, r5 + str r3, [r2, #0x4] + blx r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D5F30: .word 0x021D5538 +_020D5F34: + .byte 0xE8, 0xFD, 0x7F, 0x02, 0xEC, 0xFD, 0x7F, 0x02, 0xEA, 0xFD, 0x7F, 0x02 + + arm_func_start RTC_GetDateTimeAsync +RTC_GetDateTimeAsync: ; 0x020D5F40 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl OS_DisableInterrupts + ldr r1, _020D5FCC ; =0x021D5538 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020D5F80 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020D5F80: + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + ldr r0, _020D5FCC ; =0x021D5538 + mov r2, #0x2 + mov r1, #0x0 + str r2, [r0, #0x14] + str r1, [r0, #0x18] + str r7, [r0, #0x8] + str r6, [r0, #0xc] + str r5, [r0, #0x4] + str r4, [r0, #0x10] + bl RTCi_ReadRawDateTimeAsync +_020D5FB4: + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x03, 0x00, 0xA0, 0x03 + .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D5FCC: .word 0x021D5538 + + arm_func_start RTC_GetTime +RTC_GetTime: ; 0x020D5FD0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D600C ; =RtcGetResultCallback + mov r2, #0x0 + bl RTC_GetTimeAsync + ldr r1, _020D6010 ; =0x021D5538 + cmp r0, #0x0 + str r0, [r1, #0x20] + bne _020D5FF8 + bl RtcWaitBusy +_020D5FF8: + ldr r0, _020D6010 ; =0x021D5538 + ldr r0, [r0, #0x20] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D600C: .word RtcGetResultCallback +_020D6010: .word 0x021D5538 + + arm_func_start RTC_GetTimeAsync +RTC_GetTimeAsync: ; 0x020D6014 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl OS_DisableInterrupts + ldr r1, _020D608C ; =0x021D5538 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020D6048 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020D6048: + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + ldr r0, _020D608C ; =0x021D5538 + mov r2, #0x1 + mov r1, #0x0 + str r2, [r0, #0x14] + str r1, [r0, #0x18] + str r6, [r0, #0x8] + str r5, [r0, #0x4] + str r4, [r0, #0x10] + bl RTCi_ReadRawTimeAsync +_020D6078: + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13 + .byte 0x03, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D608C: .word 0x021D5538 + + arm_func_start RTC_GetDate +RTC_GetDate: ; 0x020D6090 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D60CC ; =RtcGetResultCallback + mov r2, #0x0 + bl RTC_GetDateAsync + ldr r1, _020D60D0 ; =0x021D5538 + cmp r0, #0x0 + str r0, [r1, #0x20] + bne _020D60B8 + bl RtcWaitBusy +_020D60B8: + ldr r0, _020D60D0 ; =0x021D5538 + ldr r0, [r0, #0x20] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D60CC: .word RtcGetResultCallback +_020D60D0: .word 0x021D5538 + + arm_func_start RTC_GetDateAsync +RTC_GetDateAsync: ; 0x020D60D4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl OS_DisableInterrupts + ldr r1, _020D6148 ; =0x021D5538 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020D6108 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020D6108: + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + ldr r0, _020D6148 ; =0x021D5538 + mov r1, #0x0 + str r1, [r0, #0x14] + str r1, [r0, #0x18] + str r6, [r0, #0x8] + str r5, [r0, #0x4] + str r4, [r0, #0x10] + bl RTCi_ReadRawDateAsync +_020D6134: + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x03, 0x00, 0xA0, 0x03 + .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D6148: .word 0x021D5538 + + arm_func_start RTC_Init +RTC_Init: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020D61C8 ; =0x021D5534 + ldrh r0, [r1, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, _020D61CC ; =0x021D5538 + mov r2, #0x0 + mov r3, #0x1 + strh r3, [r1, #0x0] + str r2, [r0, #0x0] + str r2, [r0, #0x4] + str r2, [r0, #0x1c] + str r2, [r0, #0x8] + str r2, [r0, #0xc] + bl PXI_Init + mov r5, #0x5 + mov r4, #0x1 + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady +_020D61A8: + .byte 0x00, 0x00, 0x50, 0xE3, 0xFA, 0xFF, 0xFF, 0x0A + .byte 0x18, 0x10, 0x9F, 0xE5, 0x05, 0x00, 0xA0, 0xE3, 0xFF, 0xE6, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D61C8: .word 0x021D5534 +_020D61CC: .word 0x021D5538 +_020D61D0: + .byte 0xC0, 0x59, 0x0D, 0x02, 0x00, 0x40, 0x2D, 0xE9, 0x04, 0xD0, 0x4D, 0xE2, 0x00, 0x04, 0xA0, 0xE1 + .byte 0x7F, 0x1C, 0x00, 0xE2, 0x05, 0x00, 0xA0, 0xE3, 0x00, 0x20, 0xA0, 0xE3, 0xBB, 0xE6, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0xA3, 0x00, 0x00, 0xA0, 0xB3, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start RTCi_WriteRawStatus2Async +RTCi_WriteRawStatus2Async: ; 0x020D6208 + ldr ip, _020D6214 ; =0x020D61D4 + mov r0, #0x27 + bx r12 + .balign 4 +_020D6214: .word 0x020D61D4 + + arm_func_start RTCi_ReadRawTimeAsync +RTCi_ReadRawTimeAsync: + ldr ip, _020D6224 ; =0x020D61D4 + mov r0, #0x12 + bx r12 + .balign 4 +_020D6224: .word 0x020D61D4 + + arm_func_start RTCi_ReadRawDateAsync +RTCi_ReadRawDateAsync: + ldr ip, _020D6234 ; =0x020D61D4 + mov r0, #0x11 + bx r12 + .balign 4 +_020D6234: .word 0x020D61D4 + + arm_func_start RTCi_ReadRawDateTimeAsync +RTCi_ReadRawDateTimeAsync: + ldr ip, _020D6244 ; =0x020D61D4 + mov r0, #0x10 + bx r12 + .balign 4 +_020D6244: .word 0x020D61D4 + + arm_func_start RTC_GetDayOfWeek +RTC_GetDayOfWeek: ; 0x020D6248 + stmdb sp!, {r4-r6,lr} + ldr r1, [r0, #0x4] + ldr r2, [r0, #0x0] + sub r3, r1, #0x2 + cmp r3, #0x1 + add lr, r2, #0x7d0 + ldr r4, _020D630C ; =0x51EB851F + sublt lr, lr, #0x1 + ldr r12, [r0, #0x8] + smull r0, r2, r4, lr + addlt r3, r3, #0xc + mov r1, #0x1a + mul r0, r3, r1 + smull r1, r3, r4, lr + ldr r5, _020D6310 ; =0x66666667 + sub r0, r0, #0x2 + smull r4, r1, r5, r0 + mov r4, lr, lsr #0x1f + mov r2, r2, asr #0x5 + mov r3, r3, asr #0x5 + add r3, r4, r3 + ldr r5, _020D6314 ; =0x00000064 + add r2, r4, r2 + smull r2, r4, r5, r2 + sub r2, lr, r2 + mov r1, r1, asr #0x2 + mov r0, r0, lsr #0x1f + add r1, r0, r1 + mov r4, r2, asr #0x1 + add r0, r12, r1 + add r1, r2, r4, lsr #0x1e + add r2, r2, r0 + mov r6, r3, asr #0x1 + add r0, r3, r6, lsr #0x1e + add r1, r2, r1, asr #0x2 + add r1, r1, r0, asr #0x2 + mov r0, #0x5 + mla r4, r3, r0, r1 + ldr r3, _020D6318 ; =0x92492493 + mov r1, r4, lsr #0x1f + smull r2, r0, r3, r4 + add r0, r4, r0 + mov r0, r0, asr #0x2 + ldr r2, _020D631C ; =0x00000007 + add r0, r1, r0 + smull r0, r1, r2, r0 + sub r0, r4, r0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D630C: .word 0x51EB851F +_020D6310: .word 0x66666667 +_020D6314: .word 0x00000064 +_020D6318: .word 0x92492493 +_020D631C: .word 0x00000007 + + arm_func_start RTC_ConvertSecondToDateTime +RTC_ConvertSecondToDateTime: ; 0x020D6320 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r2 + mov r12, #0x0 + mov r4, r3 + subs r2, r5, r12 + sbcs r2, r4, r12 + mov r7, r0 + mov r6, r1 + movlt r5, r12 + movlt r4, r12 + blt _020D6364 + ldr r1, _020D63B0 ; =0xBC19137F + subs r0, r1, r5 + sbcs r0, r12, r4 + movlt r5, r1 + movlt r4, r12 +_020D6364: + ldr r2, _020D63B4 ; =0x00015180 + mov r0, r5 + mov r1, r4 + mov r3, #0x0 + bl _ll_mod + mov r1, r0 + mov r0, r6 + bl RTCi_ConvertSecondToTime + ldr r2, _020D63B4 ; =0x00015180 + mov r0, r5 + mov r1, r4 + mov r3, #0x0 + bl _ll_sdiv + mov r1, r0 + mov r0, r7 + bl RTC_ConvertDayToDate + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D63B0: .word 0xBC19137F +_020D63B4: .word 0x00015180 + + arm_func_start RTCi_ConvertSecondToTime +RTCi_ConvertSecondToTime: ; 0x020D63B8 + stmdb sp!, {r4-r6,lr} + ldr r2, _020D6448 ; =0x0001517F + cmp r1, #0x0 + movlt r1, #0x0 + cmp r1, r2 + ldr ip, _020D644C ; =0x88888889 + movgt r1, r2 + smull r2, r3, r12, r1 + smull r2, lr, r12, r1 + ldr r5, _020D6450 ; =0x91A2B3C5 + add r3, r1, r3 + smull r4, r2, r5, r1 + mov r5, r1, lsr #0x1f + mov r3, r3, asr #0x5 + add r3, r5, r3 + smull r4, r6, r12, r3 + add lr, r1, lr + mov lr, lr, asr #0x5 + add r6, r3, r6 + add r2, r1, r2 + ldr r4, _020D6454 ; =0x0000003C + add lr, r5, lr + smull r12, lr, r4, lr + sub lr, r1, r12 + mov r2, r2, asr #0xb + mov r6, r6, asr #0x5 + mov r1, r3, lsr #0x1f + add r6, r1, r6 + smull r1, r12, r4, r6 + str lr, [r0, #0x8] + sub r6, r3, r1 + str r6, [r0, #0x4] + add r2, r5, r2 + str r2, [r0, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D6448: .word 0x0001517F +_020D644C: .word 0x88888889 +_020D6450: .word 0x91A2B3C5 +_020D6454: .word 0x0000003C + + arm_func_start RTC_ConvertDayToDate +RTC_ConvertDayToDate: ; 0x020D6458 + stmdb sp!, {r4,lr} + ldr r2, _020D6560 ; =0x00008EAC + cmp r1, #0x0 + movlt r1, #0x0 + cmp r1, r2 + movgt r1, r2 + ldr r3, _020D6564 ; =0x92492493 + add lr, r1, #0x6 + smull r2, r4, r3, lr + add r4, lr, r4 + mov r4, r4, asr #0x2 + mov r2, lr, lsr #0x1f + ldr ip, _020D6568 ; =0x00000007 + add r4, r2, r4 + smull r2, r3, r12, r4 + sub r4, lr, r2 + ldr r2, _020D656C ; =0x0000016D + ldr r3, _020D6570 ; =0x0000016E + str r4, [r0, #0xc] + mov lr, #0x0 +_020D64A8: + ands r12, lr, #0x3 + moveq r12, r3 + movne r12, r2 + mov r4, r1 + subs r1, r1, r12 + movmi r1, r4 + bmi _020D64D0 + add lr, lr, #0x1 + cmp lr, #0x63 + blo _020D64A8 +_020D64D0: + ldr r2, _020D656C ; =0x0000016D + str lr, [r0, #0x0] + cmp r1, r2 + movgt r1, r2 + ands r2, lr, #0x3 + bne _020D6518 + cmp r1, #0x3c + bge _020D6514 + cmp r1, #0x1f + movlt r2, #0x1 + subge r1, r1, #0x1f + movge r2, #0x2 + str r2, [r0, #0x4] + add r1, r1, #0x1 + str r1, [r0, #0x8] + ldmia sp!, {r4,lr} + bx lr +_020D6514: + sub r1, r1, #0x1 +_020D6518: + ldr r3, _020D6574 ; =0x02106A20 + mov r4, #0xb +_020D6520: + ldr r2, [r3, r4, lsl #0x2] + mov r12, r4, lsl #0x2 + cmp r1, r2 + blt _020D6550 + add r2, r4, #0x1 + str r2, [r0, #0x4] + ldr r2, [r3, r12] + sub r1, r1, r2 + add r1, r1, #0x1 + str r1, [r0, #0x8] + ldmia sp!, {r4,lr} + bx lr +_020D6550: + subs r4, r4, #0x1 + bpl _020D6520 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D6560: .word 0x00008EAC +_020D6564: .word 0x92492493 +_020D6568: .word 0x00000007 +_020D656C: .word 0x0000016D +_020D6570: .word 0x0000016E +_020D6574: .word 0x02106A20 + + arm_func_start RTC_ConvertDateTimeToSecond +RTC_ConvertDateTimeToSecond: ; 0x020D6578 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + bl RTC_ConvertDateToDay + mov r4, r0 + mvn r0, #0x0 + cmp r4, r0 + addeq sp, sp, #0x4 + moveq r1, r0 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + mov r0, r5 + bl RTCi_ConvertTimeToSecond + mvn r2, #0x0 + cmp r0, r2 + moveq r1, r2 + beq _020D65DC + ldr r1, _020D65EC ; =0x00015180 + mov r2, #0x0 + umull r12, r3, r4, r1 + mla r3, r4, r2, r3 + mov r2, r4, asr #0x1f + mla r3, r2, r1, r3 + adds r2, r0, r12 + adc r1, r3, r0, asr #0x1f +_020D65DC: + mov r0, r2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D65EC: .word 0x00015180 + + arm_func_start RTCi_ConvertTimeToSecond +RTCi_ConvertTimeToSecond: ; 0x020D65F0 + ldr r3, [r0, #0x4] + ldr r2, [r0, #0x0] + mov r1, #0x3c + mla r3, r2, r1, r3 + ldr r0, [r0, #0x8] + mla r0, r3, r1, r0 + bx lr + + arm_func_start RTC_ConvertDateToDay +RTC_ConvertDateToDay: ; 0x020D660C + ldr r3, [r0, #0x0] + cmp r3, #0x64 + bhs _020D665C + ldr r2, [r0, #0x4] + cmp r2, #0x1 + blo _020D665C + cmp r2, #0xc + bhi _020D665C + ldr r1, [r0, #0x8] + cmp r1, #0x1 + blo _020D665C + cmp r1, #0x1f + bhi _020D665C + ldr r0, [r0, #0xc] + cmp r0, #0x7 + bge _020D665C + cmp r2, #0x1 + blo _020D665C + cmp r2, #0xc + bls _020D6664 +_020D665C: + mvn r0, #0x0 + bx lr +_020D6664: + ldr r0, _020D6698 ; =0x02106A1C + sub r1, r1, #0x1 + ldr r0, [r0, r2, lsl #0x2] + cmp r2, #0x3 + add r2, r1, r0 + blo _020D6684 + ands r0, r3, #0x3 + addeq r2, r2, #0x1 +_020D6684: + ldr r0, _020D669C ; =0x0000016D + add r1, r3, #0x3 + mla r0, r3, r0, r2 + add r0, r0, r1, lsr #0x2 + bx lr + .balign 4 +_020D6698: .word 0x02106A1C +_020D669C: .word 0x0000016D + + arm_func_start CARD_UnlockBackup +CARD_UnlockBackup: ; 0x020D66A0 + ldr ip, _020D66AC ; =CARDi_UnlockResource + mov r1, #0x2 + bx r12 + .balign 4 +_020D66AC: .word CARDi_UnlockResource + + arm_func_start CARD_LockBackup +CARD_LockBackup: ; 0x020D66B0 + ldr ip, _020D66BC ; =CARDi_LockResource + mov r1, #0x2 + bx r12 + .balign 4 +_020D66BC: .word CARDi_LockResource + + arm_func_start CARD_UnlockRom +CARD_UnlockRom: ; 0x020D66C0 + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_UnlockCard + mov r0, r4 + mov r1, #0x1 + bl CARDi_UnlockResource + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CARD_LockRom +CARD_LockRom: ; 0x020D66E0 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r1, #0x1 + bl CARDi_LockResource + mov r0, r4 + bl OS_TryLockCard + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CARD_GetResultCode +CARD_GetResultCode: ; 0x020D6700 + ldr r0, _020D6710 ; =0x021D55C0 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D6710: .word 0x021D55C0 + + arm_func_start FUN_020d6714 +FUN_020d6714: ; 0x020D6714 + ldr r0, _020D672C ; =0x021D55C0 + ldr r0, [r0, #0x114] + ands r0, r0, #0x4 + moveq r0, #0x1 + movne r0, #0x0 + bx lr + .balign 4 +_020D672C: .word 0x021D55C0 + + arm_func_start CARDi_WaitAsync +CARDi_WaitAsync: ; 0x020D6730 + stmdb sp!, {r4-r6,lr} + ldr r6, _020D6788 ; =0x021D55C0 + bl OS_DisableInterrupts + ldr r1, [r6, #0x114] + mov r5, r0 + ands r0, r1, #0x4 + beq _020D6764 + add r4, r6, #0x10c +_020D6750: + mov r0, r4 + bl OS_SleepThread + ldr r0, [r6, #0x114] + ands r0, r0, #0x4 + bne _020D6750 +_020D6764: + mov r0, r5 + bl OS_RestoreInterrupts +_020D676C: + .byte 0x00, 0x00, 0x96, 0xE5 + .byte 0x00, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03, 0x00, 0x00, 0xA0, 0x13 + .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D6788: .word 0x021D55C0 + + arm_func_start CARD_Enable +CARD_Enable: ; 0x020D678C + ldr r1, _020D6798 ; =0x021D555C + str r0, [r1, #0x0] + bx lr + .balign 4 +_020D6798: .word 0x021D555C + + arm_func_start CARD_CheckEnabled +CARD_CheckEnabled: ; 0x020D679C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CARD_IsEnabled +_020D67A8: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12 + .byte 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x24, 0xDC, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CARD_IsEnabled +CARD_IsEnabled: + ldr r0, _020D67D4 ; =0x021D555C + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D67D4: .word 0x021D555C + + arm_func_start CARDi_InitCommon +CARDi_InitCommon: ; 0x020D67D8 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r4, _020D68B8 ; =0x021D55C0 + ldr r1, _020D68BC ; =0x021D5560 + mvn r2, #0x2 + mov r0, #0x0 + str r2, [r4, #0x8] + mov r2, #0x60 + str r0, [r4, #0xc] + str r0, [r4, #0x18] + str r1, [r4, #0x0] + bl MIi_CpuClearFast + ldr r0, _020D68BC ; =0x021D5560 + mov r1, #0x60 + bl DC_FlushRange + ldr r0, _020D68C0 ; =0x027FFC40 + ldrh r0, [r0, #0x0] + cmp r0, #0x2 + beq _020D6834 + ldr r0, _020D68C4 ; =0x027FFE00 + ldr r1, _020D68C8 ; =0x027FFA80 + mov r2, #0x160 + bl MI_CpuCopy8 +_020D6834: + mov r2, #0x0 + str r2, [r4, #0x14] + ldr r0, [r4, #0x14] + mov r1, #0x4 + str r0, [r4, #0x10] + str r2, [r4, #0x110] + ldr r3, [r4, #0x110] + mov r0, #0x400 + str r3, [r4, #0x10c] + str r1, [r4, #0x108] + str r0, [sp, #0x0] + ldr r12, [r4, #0x108] + ldr r1, _020D68CC ; =CARDi_TaskThread + ldr r3, _020D68D0 ; =0x021D5BE0 + add r0, r4, #0x44 + str r12, [sp, #0x4] + bl OS_CreateThread + add r0, r4, #0x44 + bl OS_WakeupThreadDirect + ldr r1, _020D68D4 ; =CARDi_OnFifoRecv + mov r0, #0xb + bl PXI_SetFifoRecvCallback + ldr r0, _020D68C0 ; =0x027FFC40 + ldrh r0, [r0, #0x0] + cmp r0, #0x2 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4,lr} + bxeq lr + mov r0, #0x1 + bl CARD_Enable + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D68B8: .word 0x021D55C0 +_020D68BC: .word 0x021D5560 +_020D68C0: .word 0x027FFC40 +_020D68C4: .word 0x027FFE00 +_020D68C8: .word 0x027FFA80 +_020D68CC: .word CARDi_TaskThread +_020D68D0: .word 0x021D5BE0 +_020D68D4: .word CARDi_OnFifoRecv + + arm_func_start CARDi_UnlockResource +CARDi_UnlockResource: ; 0x020D68D8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r5, _020D6978 ; =0x021D55C0 + mov r7, r0 + mov r6, r1 + bl OS_DisableInterrupts + mov r1, r5 + mov r4, r0 + ldr r0, [r1, #0x8] + cmp r0, r7 + bne _020D6910 + ldr r0, [r5, #0xc] + cmp r0, #0x0 + bne _020D6918 +_020D6910: + bl OS_Terminate + b _020D6958 +_020D6918: + ldr r0, [r5, #0x18] + cmp r0, r6 + beq _020D6928 + bl OS_Terminate +_020D6928: + ldr r0, [r5, #0xc] + sub r0, r0, #0x1 + str r0, [r5, #0xc] + ldr r0, [r5, #0xc] + cmp r0, #0x0 + bne _020D6958 + mvn r0, #0x2 + str r0, [r5, #0x8] + mov r1, #0x0 + add r0, r5, #0x10 + str r1, [r5, #0x18] + bl OS_WakeupThread +_020D6958: + ldr r1, [r5, #0x0] + mov r2, #0x0 + mov r0, r4 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D6978: .word 0x021D55C0 + + arm_func_start CARDi_LockResource +CARDi_LockResource: ; 0x020D697C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r5, _020D6A14 ; =0x021D55C0 + mov r7, r0 + mov r6, r1 + bl OS_DisableInterrupts + ldr r1, [r5, #0x8] + mov r4, r0 + cmp r1, r7 + bne _020D69B8 + ldr r0, [r5, #0x18] + cmp r0, r6 + beq _020D69E8 + bl OS_Terminate + b _020D69E8 +_020D69B8: + ldr r0, [r5, #0x8] + mvn r8, #0x2 + cmp r0, r8 + beq _020D69E0 + add r9, r5, #0x10 +_020D69CC: + mov r0, r9 + bl OS_SleepThread + ldr r0, [r5, #0x8] + cmp r0, r8 + bne _020D69CC +_020D69E0: + str r7, [r5, #0x8] + str r6, [r5, #0x18] +_020D69E8: + ldr r1, [r5, #0xc] + mov r0, r4 + add r1, r1, #0x1 + str r1, [r5, #0xc] + ldr r1, [r5, #0x0] + mov r2, #0x0 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020D6A14: .word 0x021D55C0 + + arm_func_start CARDi_SetTask +CARDi_SetTask: ; 0x020D6A18 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r4, _020D6A5C ; =0x021D55C0 + mov r5, r0 + ldr r1, [r4, #0x108] + add r0, r4, #0x44 + bl OS_SetThreadPriority + add r0, r4, #0x44 + str r0, [r4, #0x104] + str r5, [r4, #0x40] + ldr r1, [r4, #0x114] + orr r1, r1, #0x8 + str r1, [r4, #0x114] + bl OS_WakeupThreadDirect + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D6A5C: .word 0x021D55C0 + + arm_func_start FUN_020d6a60 +FUN_020d6a60: ; 0x020D6A60 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020D6D60 ; =0x021D55C0 + mov r5, r0 + ldr r4, [r1, #0x0] + mov r1, #0x0 + add r0, r4, #0x18 + mov r2, #0x48 + bl MI_CpuFill8 +_020D6A84: + .byte 0x00, 0x00, 0x55, 0xE3, 0x04, 0x50, 0x84, 0xE5, 0x3F, 0x00, 0xA0, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0x02, 0x4C, 0x00, 0x84, 0xE5, 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 + .byte 0x45, 0x04, 0xA0, 0xE1, 0xFF, 0x00, 0x00, 0xE2, 0x01, 0x20, 0xA0, 0xE3, 0x12, 0x30, 0xA0, 0xE1 + .byte 0xFF, 0x10, 0x05, 0xE2, 0x18, 0x30, 0x84, 0xE5, 0xFF, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5 + .byte 0x01, 0x00, 0x51, 0xE3, 0x2D, 0x00, 0x00, 0x1A, 0x02, 0x0C, 0x53, 0xE3, 0x04, 0x00, 0x00, 0x0A + .byte 0x02, 0x0A, 0x53, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x01, 0x08, 0x53, 0xE3, 0x11, 0x00, 0x00, 0x0A + .byte 0x94, 0x00, 0x00, 0xEA, 0x10, 0x00, 0xA0, 0xE3, 0x20, 0x00, 0x84, 0xE5, 0x24, 0x20, 0x84, 0xE5 + .byte 0x05, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x84, 0xE5, 0xF0, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5 + .byte 0x10, 0x00, 0x00, 0xEA, 0x20, 0x00, 0xA0, 0xE3, 0x20, 0x00, 0x84, 0xE5, 0x02, 0x00, 0xA0, 0xE3 + .byte 0x24, 0x00, 0x84, 0xE5, 0x05, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x84, 0xE5, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x48, 0x00, 0xC4, 0xE5, 0x07, 0x00, 0x00, 0xEA, 0x80, 0x00, 0xA0, 0xE3, 0x20, 0x00, 0x84, 0xE5 + .byte 0x02, 0x00, 0xA0, 0xE3, 0x24, 0x00, 0x84, 0xE5, 0x0A, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x84, 0xE5 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5, 0x20, 0x00, 0x94, 0xE5, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0x1C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x40, 0x00, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5 + .byte 0x4C, 0x00, 0x94, 0xE5, 0x01, 0x0C, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5 + .byte 0x02, 0x0C, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + .byte 0x02, 0x00, 0x51, 0xE3, 0x53, 0x00, 0x00, 0x1A, 0x01, 0x06, 0x53, 0xE3, 0x09, 0x00, 0x00, 0x8A + .byte 0x01, 0x06, 0x53, 0xE3, 0x0F, 0x00, 0x00, 0x2A, 0x01, 0x07, 0x53, 0xE3, 0x02, 0x00, 0x00, 0x8A + .byte 0x01, 0x07, 0x53, 0xE3, 0x0B, 0x00, 0x00, 0x0A, 0x62, 0x00, 0x00, 0xEA, 0x02, 0x07, 0x53, 0xE3 + .byte 0x08, 0x00, 0x00, 0x0A, 0x5F, 0x00, 0x00, 0xEA, 0x02, 0x06, 0x53, 0xE3, 0x02, 0x00, 0x00, 0x8A + .byte 0x02, 0x06, 0x53, 0xE3, 0x11, 0x00, 0x00, 0x0A, 0x5A, 0x00, 0x00, 0xEA, 0x02, 0x05, 0x53, 0xE3 + .byte 0x1C, 0x00, 0x00, 0x0A, 0x57, 0x00, 0x00, 0xEA, 0x19, 0x00, 0xA0, 0xE3, 0x2C, 0x00, 0x84, 0xE5 + .byte 0x4B, 0x1F, 0xA0, 0xE3, 0x30, 0x10, 0x84, 0xE5, 0x74, 0x01, 0x9F, 0xE5, 0x44, 0x10, 0x84, 0xE5 + .byte 0x3C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x80, 0x00, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5 + .byte 0x4C, 0x00, 0x94, 0xE5, 0x01, 0x0B, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x1A, 0x00, 0x00, 0xEA + .byte 0xFA, 0x1F, 0xA0, 0xE3, 0x4C, 0x01, 0x9F, 0xE5, 0x3C, 0x10, 0x84, 0xE5, 0x48, 0x11, 0x9F, 0xE5 + .byte 0x40, 0x00, 0x84, 0xE5, 0x44, 0x01, 0x9F, 0xE5, 0x34, 0x10, 0x84, 0xE5, 0x38, 0x00, 0x84, 0xE5 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x01, 0x0A, 0x80, 0xE3 + .byte 0x4C, 0x00, 0x84, 0xE5, 0x0C, 0x00, 0x00, 0xEA, 0xFA, 0x1F, 0xA0, 0xE3, 0x14, 0x01, 0x9F, 0xE5 + .byte 0x3C, 0x10, 0x84, 0xE5, 0x18, 0x11, 0x9F, 0xE5, 0x40, 0x00, 0x84, 0xE5, 0x14, 0x01, 0x9F, 0xE5 + .byte 0x34, 0x10, 0x84, 0xE5, 0x38, 0x00, 0x84, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5 + .byte 0x4C, 0x00, 0x94, 0xE5, 0x01, 0x0A, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x01, 0x08, 0xA0, 0xE3 + .byte 0x1C, 0x00, 0x84, 0xE5, 0x01, 0x0C, 0xA0, 0xE3, 0x20, 0x00, 0x84, 0xE5, 0x03, 0x00, 0xA0, 0xE3 + .byte 0x24, 0x00, 0x84, 0xE5, 0x05, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5 + .byte 0x04, 0xD0, 0x8D, 0xE2, 0x40, 0x00, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5 + .byte 0x01, 0x0C, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x02, 0x0C, 0x80, 0xE3 + .byte 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x02, 0x0B, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5 + .byte 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x03, 0x00, 0x51, 0xE3, 0x15, 0x00, 0x00, 0x1A + .byte 0x02, 0x0A, 0x53, 0xE3, 0x01, 0x00, 0x00, 0x0A, 0x02, 0x09, 0x53, 0xE3, 0x11, 0x00, 0x00, 0x1A + .byte 0x20, 0x30, 0x84, 0xE5, 0x1C, 0x30, 0x84, 0xE5, 0x02, 0x00, 0xA0, 0xE3, 0x24, 0x00, 0x84, 0xE5 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0x40, 0x00, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x01, 0x0C, 0x80, 0xE3 + .byte 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x02, 0x0C, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5 + .byte 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x04, 0x10, 0x84, 0xE5 + .byte 0x18, 0x10, 0x84, 0xE5, 0x14, 0x00, 0x9F, 0xE5, 0x03, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x90, 0xE5 + .byte 0x00, 0x10, 0x80, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D6D60: .word 0x021D55C0 +_020D6D64: + .byte 0x88, 0x13, 0x00, 0x00, 0xB8, 0x0B, 0x00, 0x00, 0x68, 0x42, 0x00, 0x00 + .byte 0x40, 0x9C, 0x00, 0x00, 0xA0, 0x09, 0x01, 0x00, 0x00, 0x71, 0x02, 0x00 + + arm_func_start CARD_CancelBackupAsync +CARD_CancelBackupAsync: ; 0x020D6D7C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r1, _020D6DA8 ; =0x021D55C0 + ldr r2, [r1, #0x114] + orr r2, r2, #0x40 + str r2, [r1, #0x114] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D6DA8: .word 0x021D55C0 + + arm_func_start CARD_TryWaitBackupAsync +CARD_TryWaitBackupAsync: ; 0x020D6DAC + ldr ip, _020D6DB4 ; =FUN_020d6714 + bx r12 + .balign 4 +_020D6DB4: .word FUN_020d6714 + + arm_func_start CARD_WaitBackupAsync +CARD_WaitBackupAsync: ; 0x020D6DB8 + ldr ip, _020D6DC0 ; =CARDi_WaitAsync + bx r12 + .balign 4 +_020D6DC0: .word CARDi_WaitAsync + + arm_func_start CARD_IdentifyBackup +CARD_IdentifyBackup: ; 0x020D6DC4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r0, _020D6F00 ; =0x02000C3C + ldr r7, _020D6F04 ; =0x021D55C0 + bl FUN_02000B60 +_020D6DDC: + .byte 0x00, 0x00, 0x55, 0xE3 + .byte 0x00, 0x00, 0x00, 0x1A, 0x99, 0xDA, 0xFF, 0xEB, 0x6B, 0xFE, 0xFF, 0xEB, 0x47, 0xD9, 0xFF, 0xEB + .byte 0x14, 0x11, 0x97, 0xE5, 0x00, 0x40, 0xA0, 0xE1, 0x04, 0x00, 0x11, 0xE2, 0x05, 0x00, 0x00, 0x0A + .byte 0x43, 0x6F, 0x87, 0xE2, 0x06, 0x00, 0xA0, 0xE1, 0x35, 0xD1, 0xFF, 0xEB, 0x14, 0x01, 0x97, 0xE5 + .byte 0x04, 0x00, 0x10, 0xE2, 0xFA, 0xFF, 0xFF, 0x1A, 0x14, 0x01, 0x97, 0xE5, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x04, 0x00, 0x80, 0xE3, 0x14, 0x01, 0x87, 0xE5, 0x38, 0x10, 0x87, 0xE5, 0x04, 0x00, 0xA0, 0xE1 + .byte 0x3C, 0x10, 0x87, 0xE5, 0x3A, 0xD9, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1, 0x07, 0xFF, 0xFF, 0xEB + .byte 0xC0, 0x00, 0x9F, 0xE5, 0xB8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0x07, 0x00, 0xA0, 0xE1 + .byte 0x04, 0x21, 0x81, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3, 0xDA, 0x02, 0x00, 0xEB + .byte 0x00, 0x00, 0x97, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x0C, 0x10, 0x80, 0xE5, 0x00, 0x00, 0x97, 0xE5 + .byte 0x12, 0x1E, 0x87, 0xE2, 0x10, 0x10, 0x80, 0xE5, 0x00, 0x10, 0x97, 0xE5, 0x01, 0x20, 0xA0, 0xE3 + .byte 0x07, 0x00, 0xA0, 0xE1, 0x14, 0x20, 0x81, 0xE5, 0x06, 0x10, 0xA0, 0xE3, 0xCE, 0x02, 0x00, 0xEB + .byte 0x38, 0x60, 0x97, 0xE5, 0x3C, 0x50, 0x97, 0xE5, 0x1C, 0xD9, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1 + .byte 0x14, 0x11, 0x97, 0xE5, 0x43, 0x0F, 0x87, 0xE2, 0x4C, 0x10, 0xC1, 0xE3, 0x14, 0x11, 0x87, 0xE5 + .byte 0xEB, 0xD0, 0xFF, 0xEB, 0x14, 0x01, 0x97, 0xE5, 0x10, 0x00, 0x10, 0xE2, 0x01, 0x00, 0x00, 0x0A + .byte 0x44, 0x00, 0x87, 0xE2, 0xD9, 0xD0, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x14, 0xD9, 0xFF, 0xEB + .byte 0x00, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0x0A, 0x05, 0x00, 0xA0, 0xE1, 0x36, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x00, 0x97, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 + .byte 0x00, 0x00, 0xA0, 0x13, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D6F00: .word 0x02000C3C +_020D6F04: .word 0x021D55C0 +_020D6F08: + .byte 0x98, 0x34, 0x1D, 0x02 + + arm_func_start CARD_GetBackupSectorSize +CARD_GetBackupSectorSize: ; 0x020D6F0C + ldr r0, _020D6F1C ; =0x021D55C0 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x1c] + bx lr + .balign 4 +_020D6F1C: .word 0x021D55C0 + + arm_func_start CARDi_RequestStreamCommand +CARDi_RequestStreamCommand: ; 0x020D6F20 + stmdb sp!, {r4-r10,lr} + mov r10, r0 + ldr r6, _020D7004 ; =0x021D55C0 + ldr r0, _020D7008 ; =0x02000C3C + mov r9, r1 + mov r8, r2 + mov r7, r3 + bl FUN_02000B60 + bl OS_DisableInterrupts + ldr r1, [r6, #0x114] + mov r5, r0 + ands r0, r1, #0x4 + beq _020D6F6C + add r4, r6, #0x10c +_020D6F58: + mov r0, r4 + bl OS_SleepThread + ldr r0, [r6, #0x114] + ands r0, r0, #0x4 + bne _020D6F58 +_020D6F6C: + ldr r0, [r6, #0x114] + ldr r1, [sp, #0x20] + orr r0, r0, #0x4 + str r0, [r6, #0x114] + str r7, [r6, #0x38] + mov r0, r5 + str r1, [r6, #0x3c] + bl OS_RestoreInterrupts + str r10, [r6, #0x1c] + str r9, [r6, #0x20] + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + str r8, [r6, #0x24] + ldr r2, [sp, #0x2c] + str r1, [r6, #0x2c] + ldr r1, [sp, #0x30] + str r2, [r6, #0x30] + str r1, [r6, #0x34] + cmp r0, #0x0 + beq _020D6FD0 + ldr r0, _020D700C ; =CARDi_RequestStreamCommandCore + bl CARDi_SetTask + mov r0, #0x1 + ldmia sp!, {r4-r10,lr} + bx lr +_020D6FD0: + ldr r0, _020D7010 ; =0x021D3498 + ldr r1, _020D7004 ; =0x021D55C0 + ldr r2, [r0, #0x4] + mov r0, r6 + str r2, [r1, #0x104] + bl CARDi_RequestStreamCommandCore +_020D6FE8: + .byte 0x00, 0x00, 0x96, 0xE5, 0x00, 0x00, 0x90, 0xE5 + .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03, 0x00, 0x00, 0xA0, 0x13, 0xF0, 0x47, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 +_020D7004: .word 0x021D55C0 +_020D7008: .word 0x02000C3C +_020D700C: .word CARDi_RequestStreamCommandCore +_020D7010: .word 0x021D3498 + + arm_func_start CARDi_RequestStreamCommandCore +CARDi_RequestStreamCommandCore: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r9, r0 + ldr r8, [r9, #0x2c] + ldr r0, _020D720C ; =0x02000C3C + ldr r7, [r9, #0x34] + ldr r10, [r9, #0x30] + mov r6, #0x100 + bl FUN_02000B60 + cmp r8, #0xb + bne _020D7048 + bl CARD_GetBackupSectorSize + mov r6, r0 +_020D7048: + mov r0, #0x1 + add r4, r9, #0x120 + mov r11, #0x9 + str r0, [sp, #0x0] + ldr r5, [r9, #0x24] + ldr r0, [r9, #0x0] + cmp r6, r5 + movcc r5, r6 + str r5, [r0, #0x14] + ldr r0, [r9, #0x114] + ands r0, r0, #0x40 + beq _020D7094 + ldr r0, [r9, #0x114] + mov r1, #0x7 + bic r0, r0, #0x40 + str r0, [r9, #0x114] + ldr r0, [r9, #0x0] + str r1, [r0, #0x0] + b _020D71A8 +_020D7094: + cmp r7, #0x3 + addls pc, pc, r7, lsl #0x2 + b _020D7124 +_020D70A0: + .byte 0x02, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x09, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA + .byte 0x05, 0x10, 0xA0, 0xE1, 0x12, 0x0E, 0x89, 0xE2, 0x19, 0xD4, 0xFF, 0xEB, 0x1C, 0x10, 0x99, 0xE5 + .byte 0x00, 0x00, 0x99, 0xE5, 0x0C, 0x10, 0x80, 0xE5, 0x00, 0x00, 0x99, 0xE5, 0x10, 0x40, 0x80, 0xE5 + .byte 0x13, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x99, 0xE5, 0x04, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1 + .byte 0xBE, 0xDC, 0xFF, 0xEB, 0x05, 0x10, 0xA0, 0xE1, 0x12, 0x0E, 0x89, 0xE2, 0x1A, 0xD4, 0xFF, 0xEB + .byte 0x22, 0xD4, 0xFF, 0xEB, 0x00, 0x00, 0x99, 0xE5, 0x0C, 0x40, 0x80, 0xE5, 0x20, 0x10, 0x99, 0xE5 + .byte 0x00, 0x00, 0x99, 0xE5, 0x10, 0x10, 0x80, 0xE5, 0x05, 0x00, 0x00, 0xEA, 0x1C, 0x10, 0x99, 0xE5 + .byte 0x00, 0x00, 0x99, 0xE5, 0x0C, 0x10, 0x80, 0xE5, 0x20, 0x10, 0x99, 0xE5, 0x00, 0x00, 0x99, 0xE5 + .byte 0x10, 0x10, 0x80, 0xE5 +_020D7124: + mov r0, r9 + mov r1, r8 + mov r2, r10 + bl CARDi_Request +_020D7134: + .byte 0x00, 0x00, 0x50, 0xE3, 0x1A, 0x00, 0x00, 0x0A, 0x02, 0x00, 0x57, 0xE3 + .byte 0x06, 0x00, 0x00, 0x1A, 0x00, 0x20, 0x9D, 0xE5, 0x09, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1 + .byte 0x1D, 0x02, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x11, 0x00, 0x00, 0xEA + .byte 0x00, 0x00, 0x57, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x20, 0x10, 0x99, 0xE5, 0x05, 0x20, 0xA0, 0xE1 + .byte 0x12, 0x0E, 0x89, 0xE2, 0x99, 0xDC, 0xFF, 0xEB, 0x1C, 0x00, 0x99, 0xE5, 0x05, 0x00, 0x80, 0xE0 + .byte 0x1C, 0x00, 0x89, 0xE5, 0x20, 0x00, 0x99, 0xE5, 0x05, 0x00, 0x80, 0xE0, 0x20, 0x00, 0x89, 0xE5 + .byte 0x24, 0x00, 0x99, 0xE5, 0x05, 0x00, 0x40, 0xE0, 0x24, 0x00, 0x89, 0xE5, 0x24, 0x00, 0x99, 0xE5 + .byte 0x00, 0x00, 0x50, 0xE3, 0xAB, 0xFF, 0xFF, 0x1A +_020D71A8: + ldr r6, [r9, #0x38] + ldr r5, [r9, #0x3c] + bl OS_DisableInterrupts + ldr r1, [r9, #0x114] + mov r4, r0 + bic r0, r1, #0x4c + str r0, [r9, #0x114] + add r0, r9, #0x10c + bl OS_WakeupThread + ldr r0, [r9, #0x114] + ands r0, r0, #0x10 + beq _020D71E0 + add r0, r9, #0x44 + bl OS_WakeupThreadDirect +_020D71E0: + mov r0, r4 + bl OS_RestoreInterrupts +_020D71E8: + .byte 0x00, 0x00, 0x56, 0xE3, 0x04, 0xD0, 0x8D, 0x02 + .byte 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x05, 0x00, 0xA0, 0xE1, 0x36, 0xFF, 0x2F, 0xE1 + .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D720C: .word 0x02000C3C + + arm_func_start CARDi_GetRomAccessor +CARDi_GetRomAccessor: ; 0x020D7210 + ldr r0, _020D7218 ; =CARDi_ReadCard + bx lr + .balign 4 +_020D7218: .word CARDi_ReadCard + + arm_func_start CARD_WaitRomAsync +CARD_WaitRomAsync: ; 0x020D721C + ldr ip, _020D7224 ; =CARDi_WaitAsync + bx r12 + .balign 4 +_020D7224: .word CARDi_WaitAsync + + arm_func_start CARD_Init +CARD_Init: ; 0x020D7228 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020D72A0 ; =0x021D55C0 + ldr r0, [r12, #0x114] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + mov r0, #0x1 + str r0, [r12, #0x114] + mov r3, #0x0 + str r3, [r12, #0x24] + ldr r0, [r12, #0x24] + mvn r1, #0x0 + str r0, [r12, #0x20] + ldr r2, [r12, #0x20] + ldr r0, _020D72A4 ; =0x021D5BE0 + str r2, [r12, #0x1c] + str r1, [r12, #0x28] + str r3, [r12, #0x38] + str r3, [r12, #0x3c] + str r3, [r0, #0x0] + bl CARDi_InitCommon + bl CARDi_GetRomAccessor + ldr r1, _020D72A8 ; =0x021D5C00 + str r0, [r1, #0x0] + bl CARD_InitPulledOutCallback + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D72A0: .word 0x021D55C0 +_020D72A4: .word 0x021D5BE0 +_020D72A8: .word 0x021D5C00 + + arm_func_start CARDi_ReadRom +CARDi_ReadRom: ; 0x020D72AC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr r6, _020D73C0 ; =0x021D55C0 + mov r10, r0 + mov r9, r1 + mov r8, r2 + mov r7, r3 + ldr fp, _020D73C4 ; =0x021D5C00 + bl CARD_CheckEnabled + bl OS_DisableInterrupts + ldr r1, [r6, #0x114] + mov r5, r0 + ands r0, r1, #0x4 + beq _020D72FC + add r4, r6, #0x10c +_020D72E8: + mov r0, r4 + bl OS_SleepThread + ldr r0, [r6, #0x114] + ands r0, r0, #0x4 + bne _020D72E8 +_020D72FC: + ldr r1, [r6, #0x114] + ldr r0, [sp, #0x28] + orr r1, r1, #0x4 + str r1, [r6, #0x114] + ldr r1, [sp, #0x2c] + str r0, [r6, #0x38] + mov r0, r5 + str r1, [r6, #0x3c] + bl OS_RestoreInterrupts + ldr r0, _020D73C8 ; =0x021D5BE0 + str r10, [r6, #0x28] + ldr r0, [r0, #0x0] + cmp r10, #0x3 + add r0, r9, r0 + str r0, [r6, #0x1c] + str r8, [r6, #0x20] + str r7, [r6, #0x24] + bhi _020D734C + mov r0, r10 + bl MI_StopDma +_020D734C: + mov r0, r11 + bl CARDi_TryReadCardDma +_020D7354: + .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0x30, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0xA9, 0xFF, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + .byte 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x38, 0x00, 0x9F, 0xE5 + .byte 0xA0, 0xFD, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + .byte 0x28, 0x10, 0x9F, 0xE5, 0x06, 0x00, 0xA0, 0xE1, 0x04, 0x10, 0x91, 0xE5, 0x04, 0x11, 0x86, 0xE5 + .byte 0x07, 0x00, 0x00, 0xEB, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D73C0: .word 0x021D55C0 +_020D73C4: .word 0x021D5C00 +_020D73C8: .word 0x021D5BE0 +_020D73CC: + .byte 0xD4, 0x73, 0x0D, 0x02 + .byte 0x98, 0x34, 0x1D, 0x02 + + arm_func_start CARDi_ReadRomSyncCore +CARDi_ReadRomSyncCore: ; 0x020D73D4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r4, _020D7478 ; =0x021D5C00 + mov r0, r4 + bl CARDi_ReadFromCache +_020D73E8: + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x0A + .byte 0x00, 0x10, 0x94, 0xE5, 0x04, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x78, 0x70, 0x9F, 0xE5 + .byte 0x1E, 0x00, 0x00, 0xEB, 0x09, 0x02, 0x00, 0xEB, 0x00, 0x00, 0x97, 0xE5, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x00, 0x10, 0x80, 0xE5, 0x38, 0x60, 0x97, 0xE5, 0x3C, 0x50, 0x97, 0xE5, 0xBB, 0xD7, 0xFF, 0xEB + .byte 0x14, 0x11, 0x97, 0xE5, 0x00, 0x40, 0xA0, 0xE1, 0x4C, 0x00, 0xC1, 0xE3, 0x14, 0x01, 0x87, 0xE5 + .byte 0x43, 0x0F, 0x87, 0xE2, 0x8A, 0xCF, 0xFF, 0xEB, 0x14, 0x01, 0x97, 0xE5, 0x10, 0x00, 0x10, 0xE2 + .byte 0x01, 0x00, 0x00, 0x0A, 0x44, 0x00, 0x87, 0xE2, 0x78, 0xCF, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1 + .byte 0xB3, 0xD7, 0xFF, 0xEB, 0x00, 0x00, 0x56, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08 + .byte 0x1E, 0xFF, 0x2F, 0x01, 0x05, 0x00, 0xA0, 0xE1, 0x36, 0xFF, 0x2F, 0xE1, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D7478: .word 0x021D5C00 +_020D747C: + .byte 0xC0, 0x55, 0x1D, 0x02 + + arm_func_start CARDi_ReadRomIDCore +CARDi_ReadRomIDCore: ; 0x020D7480 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, #0xb8000000 + mov r1, #0x0 + bl CARDi_SetRomOp + ldr r1, _020D74DC ; =0x02106A50 + mov r0, #0x2000 + ldr r1, [r1, #0x0] + rsb r0, r0, #0x0 + ldr r2, [r1, #0x60] + ldr r1, _020D74E0 ; =0x040001A4 + bic r2, r2, #0x7000000 + orr r2, r2, #0xa7000000 + and r0, r2, r0 + str r0, [r1, #0x0] +_020D74BC: + ldr r0, [r1, #0x0] + ands r0, r0, #0x800000 + beq _020D74BC + ldr r0, _020D74E4 ; =0x04100010 + ldr r0, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D74DC: .word 0x02106A50 +_020D74E0: .word 0x040001A4 +_020D74E4: .word 0x04100010 + + arm_func_start CARDi_ReadCard +CARDi_ReadCard: ; 0x020D74E8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r10, r0 + ldr sb, _020D75DC ; =0x021D55C0 + add r7, r10, #0x20 + ldr r5, _020D75E0 ; =0x04100010 + ldr r6, _020D75E4 ; =0x040001A4 + mov r11, #0x0 + mov r0, #0x200 + rsb r4, r0, #0x0 +_020D7510: + ldr r0, [r9, #0x1c] + and r1, r0, r4 + cmp r1, r0 + bne _020D7538 + ldr r8, [r9, #0x20] + ands r0, r8, #0x3 + bne _020D7538 + ldr r0, [r9, #0x24] + cmp r0, #0x200 + bhs _020D7540 +_020D7538: + mov r8, r7 + str r1, [r10, #0x8] +_020D7540: + mov r0, r1, lsr #0x8 + orr r0, r0, #0xb7000000 + mov r1, r1, lsl #0x18 + bl CARDi_SetRomOp + ldr r1, [r10, #0x4] + mov r0, r11 + str r1, [r6, #0x0] +_020D755C: + ldr r2, [r6, #0x0] + ands r1, r2, #0x800000 + beq _020D7578 + ldr r1, [r5, #0x0] + cmp r0, #0x200 + strcc r1, [r8, r0, lsl #0x2] + addcc r0, r0, #0x1 +_020D7578: + ands r1, r2, #0x80000000 + bne _020D755C + ldr r0, [r9, #0x20] + cmp r8, r0 + bne _020D75C0 + ldr r2, [r9, #0x1c] + ldr r1, [r9, #0x20] + ldr r0, [r9, #0x24] + add r2, r2, #0x200 + add r1, r1, #0x200 + subs r0, r0, #0x200 + str r2, [r9, #0x1c] + str r1, [r9, #0x20] + str r0, [r9, #0x24] + bne _020D7510 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr +_020D75C0: + mov r0, r10 + bl CARDi_ReadFromCache +_020D75C8: + .byte 0x00, 0x00, 0x50, 0xE3, 0xCF, 0xFF, 0xFF, 0x1A + .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D75DC: .word 0x021D55C0 +_020D75E0: .word 0x04100010 +_020D75E4: .word 0x040001A4 + + arm_func_start CARDi_TryReadCardDma +CARDi_TryReadCardDma: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr fp, _020D7748 ; =0x021D55C0 + mov r7, #0x0 + ldr r9, [r11, #0x20] + mov r10, r0 + mov r6, r7 + mov r5, r7 + mov r1, r7 + ands r4, r9, #0x1f + ldr r8, [r11, #0x24] + bne _020D7624 + ldr r0, [r11, #0x28] + cmp r0, #0x3 + movls r1, #0x1 +_020D7624: + cmp r1, #0x0 + beq _020D7678 + bl OS_GetDTCMAddress + ldr r1, _020D774C ; =0x01FF8000 + add r2, r9, r8 + cmp r2, r1 + mov r3, #0x1 + mov r1, #0x0 + bls _020D7650 + cmp r9, #0x2000000 + movcc r1, r3 +_020D7650: + cmp r1, #0x0 + bne _020D7670 + cmp r0, r2 + bhs _020D766C + add r0, r0, #0x4000 + cmp r0, r9 + bhi _020D7670 +_020D766C: + mov r3, #0x0 +_020D7670: + cmp r3, #0x0 + moveq r5, #0x1 +_020D7678: + cmp r5, #0x0 + beq _020D7694 + ldr r1, [r11, #0x1c] + ldr r0, _020D7750 ; =0x000001FF + orr r1, r1, r8 + ands r0, r1, r0 + moveq r6, #0x1 +_020D7694: + cmp r6, #0x0 + beq _020D76A4 + cmp r8, #0x0 + movne r7, #0x1 +_020D76A4: + ldr r0, _020D7754 ; =0x02106A50 + cmp r7, #0x0 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x60] + bic r0, r0, #0x7000000 + orr r0, r0, #0xa1000000 + str r0, [r10, #0x4] + beq _020D7738 + bl OS_DisableInterrupts + mov r5, r0 + mov r0, r9 + mov r1, r8 + bl IC_InvalidateRange +_020D76D8: + .byte 0x00, 0x00, 0x54, 0xE3, 0x07, 0x00, 0x00, 0x0A + .byte 0x04, 0x90, 0x49, 0xE0, 0x09, 0x00, 0xA0, 0xE1, 0x20, 0x10, 0xA0, 0xE3, 0x93, 0xD2, 0xFF, 0xEB + .byte 0x08, 0x00, 0x89, 0xE0, 0x20, 0x10, 0xA0, 0xE3, 0x90, 0xD2, 0xFF, 0xEB, 0x20, 0x80, 0x88, 0xE2 + .byte 0x09, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0xA0, 0xE1, 0x85, 0xD2, 0xFF, 0xEB, 0x9B, 0xD2, 0xFF, 0xEB + .byte 0x40, 0x10, 0x9F, 0xE5, 0x02, 0x07, 0xA0, 0xE3, 0x33, 0xCA, 0xFF, 0xEB, 0x02, 0x07, 0xA0, 0xE3 + .byte 0xAE, 0xC9, 0xFF, 0xEB, 0x02, 0x07, 0xA0, 0xE3, 0xCB, 0xC9, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1 + .byte 0xFB, 0xD6, 0xFF, 0xEB, 0x40, 0x00, 0x00, 0xEB +_020D7738: + mov r0, r7 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D7748: .word 0x021D55C0 +_020D774C: .word 0x01FF8000 +_020D7750: .word 0x000001FF +_020D7754: .word 0x02106A50 +_020D7758: + .byte 0x5C, 0x77, 0x0D, 0x02 + + arm_func_start CARDi_OnReadCard +CARDi_OnReadCard: ; 0x020D775C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r0, _020D7838 ; =0x021D55C0 + ldr r0, [r0, #0x28] + bl MI_StopDma + ldr r0, _020D7838 ; =0x021D55C0 + ldr r3, [r0, #0x1c] + ldr r2, [r0, #0x20] + ldr r1, [r0, #0x24] + add r3, r3, #0x200 + add r2, r2, #0x200 + subs r1, r1, #0x200 + str r3, [r0, #0x1c] + str r2, [r0, #0x20] + str r1, [r0, #0x24] + bne _020D7828 + mov r0, #0x80000 + bl OS_DisableIrqMask + mov r0, #0x80000 + bl OS_ResetRequestIrqMask + ldr r7, _020D7838 ; =0x021D55C0 + bl CARDi_ReadRomIDCore + bl CARDi_CheckPulledOutCore +_020D77B8: + .byte 0x00, 0x00, 0x97, 0xE5, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x00, 0x10, 0x80, 0xE5, 0x38, 0x60, 0x97, 0xE5, 0x3C, 0x50, 0x97, 0xE5, 0xCF, 0xD6, 0xFF, 0xEB + .byte 0x14, 0x11, 0x97, 0xE5, 0x00, 0x40, 0xA0, 0xE1, 0x4C, 0x00, 0xC1, 0xE3, 0x14, 0x01, 0x87, 0xE5 + .byte 0x43, 0x0F, 0x87, 0xE2, 0x9E, 0xCE, 0xFF, 0xEB, 0x14, 0x01, 0x97, 0xE5, 0x10, 0x00, 0x10, 0xE2 + .byte 0x01, 0x00, 0x00, 0x0A, 0x44, 0x00, 0x87, 0xE2, 0x8C, 0xCE, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1 + .byte 0xC7, 0xD6, 0xFF, 0xEB, 0x00, 0x00, 0x56, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08 + .byte 0x1E, 0xFF, 0x2F, 0x01, 0x05, 0x00, 0xA0, 0xE1, 0x36, 0xFF, 0x2F, 0xE1, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D7828: + bl CARDi_SetCardDma + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D7838: .word 0x021D55C0 + + arm_func_start CARDi_SetCardDma +CARDi_SetCardDma: ; 0x020D783C + stmdb sp!, {r4,lr} + ldr r4, _020D7884 ; =0x021D55C0 + ldr r1, _020D7888 ; =0x04100010 + ldr r0, [r4, #0x28] + ldr r2, [r4, #0x20] + mov r3, #0x200 + bl MIi_CardDmaCopy32 + ldr r1, [r4, #0x1c] + mov r0, r1, lsr #0x8 + orr r0, r0, #0xb7000000 + mov r1, r1, lsl #0x18 + bl CARDi_SetRomOp + ldr r0, _020D788C ; =0x021D5C00 + ldr r1, _020D7890 ; =0x040001A4 + ldr r0, [r0, #0x4] + str r0, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D7884: .word 0x021D55C0 +_020D7888: .word 0x04100010 +_020D788C: .word 0x021D5C00 +_020D7890: .word 0x040001A4 + + arm_func_start CARDi_SetRomOp +CARDi_SetRomOp: ; 0x020D7894 + ldr r3, _020D790C ; =0x040001A4 +_020D7898: + ldr r2, [r3, #0x0] + ands r2, r2, #0x80000000 + bne _020D7898 + ldr r3, _020D7910 ; =0x040001A1 + mov r12, #0xc0 + ldr r2, _020D7914 ; =0x040001A8 + strb r12, [r3, #0x0] + mov r12, r0, lsr #0x18 + ldr r3, _020D7918 ; =0x040001A9 + strb r12, [r2, #0x0] + mov r12, r0, lsr #0x10 + ldr r2, _020D791C ; =0x040001AA + strb r12, [r3, #0x0] + mov r12, r0, lsr #0x8 + ldr r3, _020D7920 ; =0x040001AB + strb r12, [r2, #0x0] + ldr r2, _020D7924 ; =0x040001AC + strb r0, [r3, #0x0] + mov r3, r1, lsr #0x18 + ldr r0, _020D7928 ; =0x040001AD + strb r3, [r2, #0x0] + mov r3, r1, lsr #0x10 + ldr r2, _020D792C ; =0x040001AE + strb r3, [r0, #0x0] + mov r3, r1, lsr #0x8 + ldr r0, _020D7930 ; =0x040001AF + strb r3, [r2, #0x0] + strb r1, [r0, #0x0] + bx lr + .balign 4 +_020D790C: .word 0x040001A4 +_020D7910: .word 0x040001A1 +_020D7914: .word 0x040001A8 +_020D7918: .word 0x040001A9 +_020D791C: .word 0x040001AA +_020D7920: .word 0x040001AB +_020D7924: .word 0x040001AC +_020D7928: .word 0x040001AD +_020D792C: .word 0x040001AE +_020D7930: .word 0x040001AF + + arm_func_start CARDi_ReadFromCache +CARDi_ReadFromCache: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r5, _020D79C8 ; =0x021D55C0 + mov r1, #0x200 + ldr r3, [r5, #0x1c] + rsb r1, r1, #0x0 + ldr r2, [r0, #0x8] + and r3, r3, r1 + cmp r3, r2 + bne _020D79AC + ldr r2, [r5, #0x1c] + ldr r1, [r5, #0x24] + sub r3, r2, r3 + rsb r4, r3, #0x200 + cmp r4, r1 + movhi r4, r1 + add r0, r0, #0x20 + ldr r1, [r5, #0x20] + mov r2, r4 + add r0, r0, r3 + bl MI_CpuCopy8 + ldr r0, [r5, #0x1c] + add r0, r0, r4 + str r0, [r5, #0x1c] + ldr r0, [r5, #0x20] + add r0, r0, r4 + str r0, [r5, #0x20] + ldr r0, [r5, #0x24] + sub r0, r0, r4 + str r0, [r5, #0x24] +_020D79AC: + ldr r0, [r5, #0x24] + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D79C8: .word 0x021D55C0 + + arm_func_start CARDi_Request +CARDi_Request: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r6, r0 + ldr r0, [r6, #0x114] + mov r5, r1 + mov r4, r2 + ands r0, r0, #0x2 + bne _020D7A44 + ldr r1, [r6, #0x114] + mov r0, #0xb + orr r2, r1, #0x2 + mov r1, #0x1 + str r2, [r6, #0x114] + bl PXI_IsCallbackReady +_020D7A04: + .byte 0x00, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x1A, 0x64, 0x90, 0xA0, 0xE3 + .byte 0x0B, 0x80, 0xA0, 0xE3, 0x01, 0x70, 0xA0, 0xE3, 0x09, 0x00, 0xA0, 0xE1, 0x57, 0xD6, 0xFF, 0xEB + .byte 0x08, 0x00, 0xA0, 0xE1, 0x07, 0x10, 0xA0, 0xE1, 0xD9, 0xE0, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0xF8, 0xFF, 0xFF, 0x0A, 0x06, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3 + .byte 0xE1, 0xFF, 0xFF, 0xEB +_020D7A44: + ldr r0, [r6, #0x0] + mov r1, #0x60 + bl DC_FlushRange + bl DC_WaitWriteBufferEmpty + mov r9, #0xb + mov r8, #0x1 + mov r7, #0x0 + mov r11, #0x60 + str r5, [r6, #0x4] + ldr r0, [r6, #0x114] + orr r0, r0, #0x20 + str r0, [r6, #0x114] + mov r0, r9 + mov r1, r5 + mov r2, r8 + bl PXI_SendWordByFifo +_020D7A84: + .byte 0x00, 0x00, 0x50, 0xE3, 0xF9, 0xFF, 0xFF, 0xBA, 0x00, 0x00, 0x55, 0xE3 + .byte 0x06, 0x00, 0x00, 0x1A, 0x00, 0xA0, 0x96, 0xE5, 0x09, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 + .byte 0x08, 0x20, 0xA0, 0xE1, 0x8D, 0xE0, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0xF9, 0xFF, 0xFF, 0xBA + .byte 0x16, 0xD6, 0xFF, 0xEB, 0x14, 0x11, 0x96, 0xE5, 0x00, 0xA0, 0xA0, 0xE1, 0x20, 0x00, 0x11, 0xE2 + .byte 0x04, 0x00, 0x00, 0x0A, 0x07, 0x00, 0xA0, 0xE1, 0x05, 0xCE, 0xFF, 0xEB, 0x14, 0x01, 0x96, 0xE5 + .byte 0x20, 0x00, 0x10, 0xE2, 0xFA, 0xFF, 0xFF, 0x1A, 0x0A, 0x00, 0xA0, 0xE1, 0x10, 0xD6, 0xFF, 0xEB + .byte 0x00, 0x00, 0x96, 0xE5, 0x0B, 0x10, 0xA0, 0xE1, 0x8D, 0xD1, 0xFF, 0xEB, 0x00, 0x00, 0x96, 0xE5 + .byte 0x00, 0x00, 0x90, 0xE5, 0x04, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x01, 0x40, 0x44, 0xE2 + .byte 0x00, 0x00, 0x54, 0xE3, 0xD6, 0xFF, 0xFF, 0xCA, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 + .byte 0x00, 0x00, 0xA0, 0x13, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CARDi_TaskThread +CARDi_TaskThread: ; 0x020D7B20 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r5, _020D7B78 ; =0x021D55C0 + mov r6, #0x0 + add r7, r5, #0x44 +_020D7B34: + bl OS_DisableInterrupts + ldr r1, [r5, #0x114] + mov r4, r0 + ands r0, r1, #0x8 + bne _020D7B60 +_020D7B48: + mov r0, r6 + str r7, [r5, #0x104] + bl OS_SleepThread + ldr r0, [r5, #0x114] + ands r0, r0, #0x8 + beq _020D7B48 +_020D7B60: + mov r0, r4 + bl OS_RestoreInterrupts + ldr r1, [r5, #0x40] + mov r0, r5 + blx r1 + b _020D7B34 + .balign 4 +_020D7B78: .word 0x021D55C0 + + arm_func_start CARDi_OnFifoRecv +CARDi_OnFifoRecv: ; 0x020D7B7C + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0xb + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + ldr r1, _020D7BC8 ; =0x021D55C0 + ldr r0, [r1, #0x114] + bic r0, r0, #0x20 + str r0, [r1, #0x114] + ldr r0, [r1, #0x104] + bl OS_WakeupThreadDirect + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D7BC8: .word 0x021D55C0 + + arm_func_start CARDi_SendtoPxi +CARDi_SendtoPxi: ; 0x020D7BCC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r1, r7 + mov r0, #0xe + mov r2, #0x0 + bl PXI_SendWordByFifo +_020D7BEC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x0E, 0x50, 0xA0, 0xE3 + .byte 0x00, 0x40, 0xA0, 0xE3, 0x06, 0x00, 0xA0, 0xE1, 0x78, 0xA2, 0xFC, 0xFB, 0x05, 0x00, 0xA0, 0xE1 + .byte 0x07, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x30, 0xE0, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0xF7, 0xFF, 0xFF, 0x1A, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CARDi_CheckPulledOutCore +CARDi_CheckPulledOutCore: + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r1, _020D7C94 ; =0x027FFC10 + ldrh r1, [r1, #0x0] + cmp r1, #0x0 + ldreq r1, _020D7C98 ; =0x027FF800 + ldrne r1, _020D7C9C ; =0x027FFC00 + ldr r1, [r1, #0x0] + str r1, [sp, #0x0] + ldr r1, [sp, #0x0] + cmp r0, r1 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4,lr} + bxeq lr + bl OS_DisableInterrupts + mov r4, r0 + mov r0, #0xe + mov r1, #0x11 + mov r2, #0x0 + bl CARDi_PulledOutCallback + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D7C94: .word 0x027FFC10 +_020D7C98: .word 0x027FF800 +_020D7C9C: .word 0x027FFC00 + + arm_func_start CARD_TerminateForPulledOut +CARD_TerminateForPulledOut: ; 0x020D7CA0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020D7D10 ; =0x027FFFA8 + mov r5, #0x1 + ldrh r0, [r0, #0x0] + and r0, r0, #0x8000 + movs r0, r0, asr #0xf + beq _020D7CEC + bl PM_ForceToPowerOff + cmp r0, #0x4 + bne _020D7CE4 + ldr r4, _020D7D14 ; =0x000A3A47 +_020D7CD0: + mov r0, r4 + bl OS_SpinWait + bl PM_ForceToPowerOff + cmp r0, #0x4 + beq _020D7CD0 +_020D7CE4: + cmp r0, #0x0 + moveq r5, #0x0 +_020D7CEC: + cmp r5, #0x0 + beq _020D7D00 + mov r0, #0x1 + mov r1, r0 + bl CARDi_SendtoPxi +_020D7D00: + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D7D10: .word 0x027FFFA8 +_020D7D14: .word 0x000A3A47 + + arm_func_start CARD_IsPulledOut +CARD_IsPulledOut: ; 0x020D7D18 + ldr r0, _020D7D24 ; =0x021D5E20 + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D7D24: .word 0x021D5E20 + + arm_func_start CARDi_PulledOutCallback +CARDi_PulledOutCallback: ; 0x020D7D28 + stmdb sp!, {lr} + sub sp, sp, #0x4 + and r0, r1, #0x3f + cmp r0, #0x11 + bne _020D7D90 + ldr r2, _020D7DA0 ; =0x021D5E20 + ldr r0, [r2, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r1, _020D7DA4 ; =0x021D5E24 + mov r0, #0x1 + ldr r1, [r1, #0x0] + str r0, [r2, #0x0] + cmp r1, #0x0 + beq _020D7D70 + blx r1 +_020D7D70: + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + bl CARD_TerminateForPulledOut + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020D7D90: + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D7DA0: .word 0x021D5E20 +_020D7DA4: .word 0x021D5E24 + + arm_func_start CARD_InitPulledOutCallback +CARD_InitPulledOutCallback: ; 0x020D7DA8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl PXI_Init + ldr r1, _020D7DD8 ; =CARDi_PulledOutCallback + mov r0, #0xe + bl PXI_SetFifoRecvCallback + ldr r0, _020D7DDC ; =0x021D5E24 + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D7DD8: .word CARDi_PulledOutCallback +_020D7DDC: .word 0x021D5E24 + + arm_func_start WMi_GetMPReadyAIDs +WMi_GetMPReadyAIDs: ; 0x020D7DE0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r1, _020D7E30 ; =0x021D5E2C + mov r4, r0 + ldr r0, [r1, #0x0] + cmp r0, #0x0 + moveq r5, #0x0 + beq _020D7E18 + ldr r5, [r0, #0x4] + mov r1, #0x2 + add r0, r5, #0x86 + bl DC_InvalidateRange + ldrh r5, [r5, #0x86] +_020D7E18: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D7E30: .word 0x021D5E2C + + arm_func_start WM_GetConnectedAIDs +WM_GetConnectedAIDs: ; 0x020D7E34 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020D7E64 ; =0x021D5E2C + ldr r1, [r1, #0x0] + cmp r1, #0x0 + ldrne r4, [r1, #0x14c] + moveq r4, #0x0 + bl OS_RestoreInterrupts + mov r0, r4, lsl #0x10 + mov r0, r0, lsr #0x10 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D7E64: .word 0x021D5E2C + + arm_func_start WM_GetAID +WM_GetAID: ; 0x020D7E68 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020D7E98 ; =0x021D5E2C + ldr r1, [r1, #0x0] + cmp r1, #0x0 + addne r1, r1, #0x100 + ldrneh r4, [r1, #0x50] + moveq r4, #0x0 + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D7E98: .word 0x021D5E2C + + arm_func_start WMi_GetStatusAddress +WMi_GetStatusAddress: ; 0x020D7E9C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WMi_CheckInitialized +_020D7EA8: + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13 + .byte 0x10, 0x00, 0x9F, 0x05, 0x00, 0x00, 0x90, 0x05, 0x04, 0x00, 0x90, 0x05, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x2C, 0x5E, 0x1D, 0x02 + + arm_func_start WmClearFifoRecvFlag +WmClearFifoRecvFlag: ; 0x020D7ECC + ldr r1, _020D7EE4 ; =0x027FFF96 + ldrh r0, [r1, #0x0] + ands r2, r0, #0x1 + bicne r0, r0, #0x1 + strneh r0, [r1, #0x0] + bx lr + .balign 4 +_020D7EE4: .word 0x027FFF96 + + arm_func_start WmReceiveFifo +WmReceiveFifo: ; 0x020D7EE8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + ldr r0, _020D82B0 ; =0x021D5E2C + cmp r2, #0x0 + ldr r8, [r0, #0x0] + mov r10, r1 + addne sp, sp, #0xc + ldmneia sp!, {r4-r11,lr} + bxne lr + ldr r0, [r8, #0x10] + mov r1, #0x100 + bl DC_InvalidateRange + ldrh r0, [r8, #0x16] + cmp r0, #0x0 + bne _020D7F30 + ldr r0, [r8, #0x4] + mov r1, #0x800 + bl DC_InvalidateRange +_020D7F30: + ldr r0, [r8, #0x10] + cmp r10, r0 + beq _020D7F48 + mov r0, r10 + mov r1, #0x100 + bl DC_InvalidateRange +_020D7F48: + ldrh r0, [r10, #0x0] + cmp r0, #0x2c + blo _020D8000 + cmp r0, #0x80 + bne _020D7F84 + ldrh r0, [r10, #0x2] + cmp r0, #0x13 + bne _020D7F6C + bl OS_Terminate +_020D7F6C: + ldr r1, [r8, #0xc8] + cmp r1, #0x0 + beq _020D8268 + mov r0, r10 + blx r1 + b _020D8268 +_020D7F84: + cmp r0, #0x82 + bne _020D7FD8 + ldrh r0, [r10, #0x6] + add r1, r8, r0, lsl #0x2 + ldr r0, [r1, #0xcc] + cmp r0, #0x0 + beq _020D8268 + ldr r0, [r1, #0x10c] + str r0, [r10, #0x1c] + ldr r0, [r8, #0x14c] + strh r0, [r10, #0x22] + ldr r1, [r8, #0x4] + ldr r0, [r10, #0x8] + ldrh r1, [r1, #0x72] + bl DC_InvalidateRange + ldrh r1, [r10, #0x6] + mov r0, r10 + add r1, r8, r1, lsl #0x2 + ldr r1, [r1, #0xcc] + blx r1 + b _020D8268 +_020D7FD8: + cmp r0, #0x81 + bne _020D8268 + mov r0, #0xf + strh r0, [r10, #0x0] + ldr r1, [r10, #0x1c] + cmp r1, #0x0 + beq _020D8268 + mov r0, r10 + blx r1 + b _020D8268 +_020D8000: + cmp r0, #0xe + bne _020D8040 + ldrh r1, [r10, #0x4] + ldr r0, _020D82B4 ; =0x0000FFF5 + add r0, r1, r0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #0x1 + bhi _020D8040 + ldrh r0, [r10, #0x2] + cmp r0, #0x0 + bne _020D8040 + ldr r1, [r8, #0x4] + ldr r0, [r10, #0x8] + ldrh r1, [r1, #0x72] + bl DC_InvalidateRange +_020D8040: + ldrh r1, [r10, #0x0] + cmp r1, #0x2 + bne _020D8088 + ldrh r0, [r10, #0x2] + cmp r0, #0x0 + bne _020D8088 + add r0, r8, r1, lsl #0x2 + ldr r4, [r0, #0x18] + bl WM_Finish +_020D8064: + .byte 0x00, 0x00, 0x54, 0xE3, 0x0C, 0xD0, 0x8D, 0x02, 0xF0, 0x4F, 0xBD, 0x08 + .byte 0x1E, 0xFF, 0x2F, 0x01, 0x0A, 0x00, 0xA0, 0xE1, 0x34, 0xFF, 0x2F, 0xE1, 0x0C, 0xD0, 0x8D, 0xE2 + .byte 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D8088: + add r0, r8, r1, lsl #0x2 + ldr r1, [r0, #0x18] + cmp r1, #0x0 + beq _020D80B8 + mov r0, r10 + blx r1 + ldr r0, _020D82B8 ; =0x021D5E28 + ldrh r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r11,lr} + bxeq lr +_020D80B8: + ldrh r0, [r10, #0x0] + cmp r0, #0x8 + beq _020D80CC + cmp r0, #0xc + bne _020D8268 +_020D80CC: + cmp r0, #0x8 + bne _020D8100 + add r0, r10, #0xa + str r0, [sp, #0x0] + ldrh r0, [r10, #0x2c] + add r11, r10, #0x14 + ldrh r7, [r10, #0x8] + ldrh r6, [r10, #0x10] + ldrh r4, [r10, #0x12] + str r0, [sp, #0x4] + ldrh r9, [r10, #0x2e] + mov r5, #0x0 + b _020D8130 +_020D8100: + cmp r0, #0xc + bne _020D8130 + ldrh r0, [r10, #0x16] + mov r6, #0x0 + ldrh r7, [r10, #0x8] + str r0, [sp, #0x4] + add r0, r10, #0x10 + ldrh r5, [r10, #0xa] + ldrh r4, [r10, #0xc] + ldrh r9, [r10, #0x18] + mov r11, r6 + str r0, [sp, #0x0] +_020D8130: + cmp r7, #0x7 + beq _020D8148 + cmp r7, #0x9 + beq _020D8148 + cmp r7, #0x1a + bne _020D8268 +_020D8148: + cmp r7, #0x7 + ldreq r1, [r8, #0x14c] + moveq r0, #0x1 + orreq r0, r1, r0, lsl r6 + streq r0, [r8, #0x14c] + movne r0, #0x1 + mvnne r0, r0, lsl r6 + ldrne r1, [r8, #0x14c] + add r3, r8, #0x100 + andne r0, r1, r0 + strne r0, [r8, #0x14c] + ldr r0, _020D82BC ; =0x021D5E78 + mov r1, #0x0 + mov r2, #0x44 + strh r5, [r3, #0x50] + bl MI_CpuFill8 + ldr r3, _020D82BC ; =0x021D5E78 + mov r1, #0x0 + mov r2, #0x82 + strh r2, [r3, #0x0] + strh r7, [r3, #0x4] + strh r6, [r3, #0x12] + strh r5, [r3, #0x20] + strh r1, [r3, #0x2] + str r1, [r3, #0x8] + str r1, [r3, #0xc] + strh r1, [r3, #0x10] + ldr r1, [r8, #0x14c] + ldr r2, _020D82C0 ; =0x0000FFFF + strh r1, [r3, #0x22] + strh r2, [r3, #0x1a] + ldr r0, [sp, #0x0] + ldr r1, _020D82C4 ; =0x021D5E8C + mov r2, #0x6 + strh r4, [r3, #0x3c] + bl MI_CpuCopy8 +_020D81D8: + .byte 0x00, 0x00, 0x5B, 0xE3, 0x04, 0x00, 0x00, 0x0A + .byte 0xE0, 0x10, 0x9F, 0xE5, 0x0B, 0x00, 0xA0, 0xE1, 0x18, 0x20, 0xA0, 0xE3, 0xFB, 0xD7, 0xFF, 0xEB + .byte 0x03, 0x00, 0x00, 0xEA, 0xCC, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x18, 0x20, 0xA0, 0xE3 + .byte 0xF0, 0xD7, 0xFF, 0xEB, 0x00, 0x00, 0x55, 0xE3, 0x04, 0x10, 0x9D, 0x05, 0xA8, 0x00, 0x9F, 0xE5 + .byte 0x09, 0x10, 0xA0, 0x11, 0x00, 0x00, 0x55, 0xE3, 0x04, 0x90, 0x9D, 0x15, 0x98, 0x50, 0x9F, 0xE5 + .byte 0xB0, 0x14, 0xC0, 0xE1, 0x00, 0x40, 0xA0, 0xE3, 0xB2, 0x94, 0xC5, 0xE1, 0xB6, 0x40, 0xC5, 0xE1 + .byte 0x04, 0x21, 0x88, 0xE0, 0xCC, 0x00, 0x92, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A + .byte 0x0C, 0x11, 0x92, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x1C, 0x10, 0x85, 0xE5, 0xCC, 0x10, 0x92, 0xE5 + .byte 0x31, 0xFF, 0x2F, 0xE1, 0x01, 0x00, 0x84, 0xE2, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x48, 0xA0, 0xE1 + .byte 0x10, 0x00, 0x54, 0xE3, 0xF0, 0xFF, 0xFF, 0x3A +_020D8268: + ldr r0, [r8, #0x10] + mov r1, #0x100 + bl DC_InvalidateRange + bl WmClearFifoRecvFlag + ldr r0, [r8, #0x10] + cmp r10, r0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldrh r2, [r10, #0x0] + mov r0, r10 + mov r1, #0x100 + orr r2, r2, #0x8000 + strh r2, [r10, #0x0] + bl DC_StoreRange + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D82B0: .word 0x021D5E2C +_020D82B4: .word 0x0000FFF5 +_020D82B8: .word 0x021D5E28 +_020D82BC: .word 0x021D5E78 +_020D82C0: .word 0x0000FFFF +_020D82C4: .word 0x021D5E8C +_020D82C8: + .byte 0x9C, 0x5E, 0x1D, 0x02 + + arm_func_start WMi_CheckStateEx +WMi_CheckStateEx: + stmdb sp!, {r0-r3} + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WMi_CheckInitialized +_020D82DC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x10, 0xD0, 0x8D, 0x12, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x78, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x90, 0xE5, 0x04, 0x00, 0x90, 0xE5 + .byte 0x87, 0xCF, 0xFF, 0xEB, 0x64, 0x00, 0x9F, 0xE5, 0x08, 0x10, 0x8D, 0xE2, 0x00, 0x20, 0x90, 0xE5 + .byte 0x08, 0x00, 0x9D, 0xE5, 0x04, 0x20, 0x92, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x10, 0xC1, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0x02, 0x04, 0xC0, 0x81, 0xE2, 0xB0, 0x30, 0xD2, 0xE1, 0x03, 0x00, 0xA0, 0xE3 + .byte 0x00, 0x40, 0xBD, 0x08, 0x10, 0xD0, 0x8D, 0x02, 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x20, 0xA0, 0xE3 + .byte 0x04, 0xC0, 0x8C, 0xE2, 0x04, 0x10, 0x1C, 0xE5, 0x03, 0x00, 0x51, 0xE1, 0x08, 0x10, 0x9D, 0xE5 + .byte 0x02, 0x00, 0xA0, 0x01, 0x01, 0x10, 0x51, 0xE2, 0x08, 0x10, 0x8D, 0xE5, 0xF7, 0xFF, 0xFF, 0x1A + .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x10, 0xD0, 0x8D, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1 + .byte 0x2C, 0x5E, 0x1D, 0x02 + + arm_func_start WMi_CheckIdle +WMi_CheckIdle: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WMi_CheckInitialized +_020D8380: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x34, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x90, 0xE5, 0x04, 0x00, 0x90, 0xE5 + .byte 0x5F, 0xCF, 0xFF, 0xEB, 0x20, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x04, 0x00, 0x90, 0xE5 + .byte 0xB0, 0x00, 0xD0, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x03, 0x00, 0xA0, 0x93, 0x00, 0x00, 0xA0, 0x83 + .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x2C, 0x5E, 0x1D, 0x02 + + arm_func_start WMi_CheckInitialized +WMi_CheckInitialized: + ldr r0, _020D83E8 ; =0x021D5E28 + ldrh r0, [r0, #0x0] + cmp r0, #0x0 + movne r0, #0x0 + moveq r0, #0x3 + bx lr + .balign 4 +_020D83E8: .word 0x021D5E28 + + arm_func_start WMi_GetSystemWork +WMi_GetSystemWork: ; 0x020D83EC + ldr r0, _020D83F8 ; =0x021D5E2C + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D83F8: .word 0x021D5E2C + + arm_func_start WMi_SendCommandDirect +WMi_SendCommandDirect: ; 0x020D83FC + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r4, r1 + bl WmGetCommandBuffer4Arm7 + movs r5, r0 + moveq r0, #0x8 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl MI_CpuCopy8 + mov r0, r5 + mov r1, r4 + bl DC_StoreRange + mov r1, r5 + mov r0, #0xa + mov r2, #0x0 + bl PXI_SendWordByFifo + mov r4, r0 + ldr r0, _020D8470 ; =0x021D5E30 + mov r1, r5 + mov r2, #0x1 + bl OS_SendMessage +_020D845C: + .byte 0x00, 0x00, 0x54, 0xE3 + .byte 0x08, 0x00, 0xA0, 0xB3, 0x02, 0x00, 0xA0, 0xA3, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D8470: .word 0x021D5E30 + + arm_func_start WMi_SendCommand +WMi_SendCommand: ; 0x020D8474 + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + bl WmGetCommandBuffer4Arm7 + movs r5, r0 + addeq sp, sp, #0x4 + moveq r0, #0x8 + ldmeqia sp!, {r4-r5,lr} + addeq sp, sp, #0x10 + bxeq lr + strh r4, [r5, #0x0] + ldrh r2, [sp, #0x14] + add r0, sp, #0x14 + bic r0, r0, #0x3 + mov r3, #0x0 + cmp r2, #0x0 + add r4, r0, #0x4 + ble _020D84DC +_020D84C0: + add r4, r4, #0x4 + ldr r1, [r4, #-0x4] + add r0, r5, r3, lsl #0x2 + add r3, r3, #0x1 + str r1, [r0, #0x4] + cmp r3, r2 + blt _020D84C0 +_020D84DC: + mov r0, r5 + mov r1, #0x100 + bl DC_StoreRange + mov r1, r5 + mov r0, #0xa + mov r2, #0x0 + bl PXI_SendWordByFifo + mov r4, r0 + ldr r0, _020D8528 ; =0x021D5E30 + mov r1, r5 + mov r2, #0x1 + bl OS_SendMessage +_020D850C: + .byte 0x00, 0x00, 0x54, 0xE3 + .byte 0x08, 0x00, 0xA0, 0xB3, 0x02, 0x00, 0xA0, 0xA3, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 + .byte 0x10, 0xD0, 0x8D, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1 +_020D8528: .word 0x021D5E30 + + arm_func_start WmGetCommandBuffer4Arm7 +WmGetCommandBuffer4Arm7: ; 0x020D852C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020D859C ; =0x021D5E30 + add r1, sp, #0x0 + mov r2, #0x0 + bl OS_ReceiveMessage +_020D8544: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x00, 0x00, 0xA0, 0x03 + .byte 0x00, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0x9D, 0xE5, 0x02, 0x10, 0xA0, 0xE3 + .byte 0xEF, 0xCE, 0xFF, 0xEB, 0x00, 0x10, 0x9D, 0xE5, 0xB0, 0x00, 0xD1, 0xE1, 0x02, 0x09, 0x10, 0xE2 + .byte 0x04, 0xD0, 0x8D, 0x12, 0x01, 0x00, 0xA0, 0x11, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x14, 0x00, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0xB5, 0xCD, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D859C: .word 0x021D5E30 + + arm_func_start WMi_SetCallbackTable +WMi_SetCallbackTable: ; 0x020D85A0 + ldr r2, _020D85B4 ; =0x021D5E2C + ldr r2, [r2, #0x0] + add r0, r2, r0, lsl #0x2 + str r1, [r0, #0x18] + bx lr + .balign 4 +_020D85B4: .word 0x021D5E2C + + arm_func_start WM_Finish +WM_Finish: + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + mov r4, r0 + bl WMi_CheckInitialized +_020D85C8: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A + .byte 0x04, 0x00, 0xA0, 0xE1, 0x52, 0xD3, 0xFF, 0xEB, 0x03, 0x00, 0xA0, 0xE3, 0x10, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x36, 0xFF, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x32, 0xFE, 0xFF, 0xEB + .byte 0x0A, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0xEB, 0xDD, 0xFF, 0xEB, 0x20, 0x20, 0x9F, 0xE5 + .byte 0x00, 0x30, 0xA0, 0xE3, 0x1C, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0xA0, 0xE1, 0x00, 0x30, 0x82, 0xE5 + .byte 0xB0, 0x30, 0xC1, 0xE1, 0x3E, 0xD3, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x2C, 0x5E, 0x1D, 0x02, 0x28, 0x5E, 0x1D, 0x02 + + arm_func_start WmInitCore +WmInitCore: + stmdb sp!, {r4-r10,lr} + mov r6, r0 + mov r5, r1 + mov r7, r2 + bl OS_DisableInterrupts + ldr r1, _020D881C ; =0x021D5E28 + mov r4, r0 + ldrh r1, [r1, #0x0] + cmp r1, #0x0 + beq _020D8674 + bl OS_RestoreInterrupts + mov r0, #0x3 + ldmia sp!, {r4-r10,lr} + bx lr +_020D8674: + cmp r6, #0x0 + bne _020D868C + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r10,lr} + bx lr +_020D868C: + cmp r5, #0x3 + bls _020D86A4 + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r10,lr} + bx lr +_020D86A4: + ands r1, r6, #0x1f + beq _020D86BC + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r10,lr} + bx lr +_020D86BC: + bl PXI_Init + mov r0, #0xa + mov r1, #0x1 + bl PXI_IsCallbackReady +_020D86CC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x04, 0x00, 0x00, 0x1A, 0x04, 0x00, 0xA0, 0xE1, 0x11, 0xD3, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE3 + .byte 0xF0, 0x47, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x06, 0x00, 0xA0, 0xE1, 0x07, 0x10, 0xA0, 0xE1 + .byte 0x8B, 0xCE, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x07, 0x30, 0xA0, 0xE1 + .byte 0x00, 0x20, 0xA0, 0xE3, 0x7D, 0xD5, 0xFF, 0xEB, 0x10, 0x01, 0x9F, 0xE5, 0x02, 0x1C, 0x86, 0xE2 + .byte 0x00, 0x60, 0x80, 0xE5, 0x00, 0x10, 0x86, 0xE5, 0x00, 0x20, 0x90, 0xE5, 0x00, 0x10, 0x92, 0xE5 + .byte 0x03, 0x1C, 0x81, 0xE2, 0x04, 0x10, 0x82, 0xE5, 0x00, 0x20, 0x90, 0xE5, 0x04, 0x10, 0x92, 0xE5 + .byte 0x02, 0x1B, 0x81, 0xE2, 0x0C, 0x10, 0x82, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x0C, 0x00, 0x91, 0xE5 + .byte 0x01, 0x0C, 0x80, 0xE2, 0x10, 0x00, 0x81, 0xE5, 0xDF, 0xFD, 0xFF, 0xEB, 0xCC, 0x10, 0x9F, 0xE5 + .byte 0x00, 0x30, 0xA0, 0xE3, 0x00, 0x00, 0x91, 0xE5, 0xB4, 0x51, 0xC0, 0xE1, 0x00, 0x00, 0x91, 0xE5 + .byte 0x4C, 0x31, 0x80, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x01, 0x0C, 0x80, 0xE2, 0xB0, 0x35, 0xC0, 0xE1 + .byte 0x03, 0x20, 0xA0, 0xE1, 0x00, 0x00, 0x91, 0xE5, 0x03, 0x01, 0x80, 0xE0, 0xCC, 0x20, 0x80, 0xE5 + .byte 0x00, 0x00, 0x91, 0xE5, 0x03, 0x01, 0x80, 0xE0, 0x01, 0x30, 0x83, 0xE2, 0x0C, 0x21, 0x80, 0xE5 + .byte 0x10, 0x00, 0x53, 0xE3, 0xF6, 0xFF, 0xFF, 0xBA, 0x84, 0x00, 0x9F, 0xE5, 0x84, 0x10, 0x9F, 0xE5 + .byte 0x0A, 0x20, 0xA0, 0xE3, 0xB0, 0xCD, 0xFF, 0xEB, 0x7C, 0x90, 0x9F, 0xE5, 0x00, 0xA0, 0xA0, 0xE3 + .byte 0x6C, 0x60, 0x9F, 0xE5, 0x02, 0x89, 0xA0, 0xE3, 0x02, 0x70, 0xA0, 0xE3, 0x01, 0x50, 0xA0, 0xE3 + .byte 0x09, 0x00, 0xA0, 0xE1, 0x07, 0x10, 0xA0, 0xE1, 0xB0, 0x80, 0xC9, 0xE1, 0x5B, 0xCE, 0xFF, 0xEB + .byte 0x06, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x78, 0xCD, 0xFF, 0xEB + .byte 0x01, 0xA0, 0x8A, 0xE2, 0x0A, 0x00, 0x5A, 0xE3, 0x01, 0x9C, 0x89, 0xE2, 0xF3, 0xFF, 0xFF, 0xBA + .byte 0x38, 0x10, 0x9F, 0xE5, 0x0A, 0x00, 0xA0, 0xE3, 0x6F, 0xDD, 0xFF, 0xEB, 0x18, 0x10, 0x9F, 0xE5 + .byte 0x01, 0x20, 0xA0, 0xE3, 0x04, 0x00, 0xA0, 0xE1, 0xB0, 0x20, 0xC1, 0xE1, 0xC4, 0xD2, 0xFF, 0xEB + .byte 0x00, 0x00, 0xA0, 0xE3, 0xF0, 0x47, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D881C: .word 0x021D5E28 +_020D8820: + .byte 0x2C, 0x5E, 0x1D, 0x02, 0x30, 0x5E, 0x1D, 0x02, 0x50, 0x5E, 0x1D, 0x02, 0xC0, 0x5E, 0x1D, 0x02 + .byte 0xE8, 0x7E, 0x0D, 0x02 + + arm_func_start WM_Init +WM_Init: + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, #0xf00 + bl WmInitCore +_020D8844: + .byte 0x00, 0x00, 0x50, 0xE3, 0x14, 0x10, 0x9F, 0x05, 0x00, 0x20, 0xA0, 0x03 + .byte 0x00, 0x10, 0x91, 0x05, 0xB6, 0x21, 0xC1, 0x01, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x2C, 0x5E, 0x1D, 0x02 + + arm_func_start WM_GetNextTgid +WM_GetNextTgid: ; 0x020D8868 + stmdb sp!, {lr} + sub sp, sp, #0xc + + arm_func_start FUN_020d8870 +FUN_020d8870: ; 0x020D8870 + ldr r0, _020D88DC ; =0x02106A54 + ldr r0, [r0, #0x0] + cmp r0, #0x10000 + bne _020D88B0 + bl RTC_Init +_020D8884: + .byte 0x00, 0x00, 0x8D, 0xE2, 0xD0, 0xF5, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x06, 0x00, 0x00, 0x1A, 0x08, 0x20, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0x38, 0x10, 0x9F, 0xE5 + .byte 0x00, 0x04, 0x82, 0xE0, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1, 0x00, 0x00, 0x81, 0xE5 +_020D88B0: + ldr r1, _020D88DC ; =0x02106A54 + ldr r0, [r1, #0x0] + add r0, r0, #0x1 + mov r0, r0, lsl #0x10 + mov r2, r0, lsr #0x10 + mov r0, r2, lsl #0x10 + str r2, [r1, #0x0] + mov r0, r0, lsr #0x10 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_020D88DC: .word 0x02106A54 + + arm_func_start WM_GetOtherElements +WM_GetOtherElements: ; 0x020D88E0 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x88 + ldrh r2, [r1, #0x3c] + mov lr, r0 + cmp r2, #0x0 + beq _020D892C + mov r0, #0x0 + add r5, sp, #0x0 + strb r0, [sp, #0x0] + mov r4, #0x8 +_020D8908: + ldmia r5!, {r0-r3} + stmia lr!, {r0-r3} + subs r4, r4, #0x1 + bne _020D8908 + ldr r0, [r5, #0x0] + add sp, sp, #0x88 + str r0, [lr, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr +_020D892C: + ldrh r0, [r1, #0x3e] + strb r0, [sp, #0x0] + ldrb r0, [sp, #0x0] + cmp r0, #0x0 + bne _020D896C + add r5, sp, #0x0 + mov r4, #0x8 +_020D8948: + ldmia r5!, {r0-r3} + stmia lr!, {r0-r3} + subs r4, r4, #0x1 + bne _020D8948 + ldr r0, [r5, #0x0] + add sp, sp, #0x88 + str r0, [lr, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr +_020D896C: + cmp r0, #0x10 + movhi r0, #0x10 + strhib r0, [sp, #0x0] + ldrh r2, [r1, #0x0] + ldrb r3, [sp, #0x0] + mov r0, #0x0 + mov r2, r2, lsl #0x1 + sub r4, r2, #0x40 + cmp r3, #0x0 + add r3, r1, #0x40 + mov r2, r0 + and r1, r4, #0xff + ble _020D8A20 + add r12, sp, #0x0 +_020D89A4: + ldrb r5, [r3, #0x0] + add r6, r12, r2, lsl #0x3 + add r4, r3, #0x2 + strb r5, [r6, #0x4] + ldrb r5, [r3, #0x1] + strb r5, [r6, #0x5] + str r4, [r6, #0x8] + ldrb r4, [r6, #0x5] + add r4, r4, #0x2 + and r5, r4, #0xff + add r0, r0, r5 + and r0, r0, #0xff + cmp r0, r1 + bls _020D8A0C + mov r0, #0x0 + strb r0, [sp, #0x0] + mov r4, #0x8 +_020D89E8: + ldmia r12!, {r0-r3} + stmia lr!, {r0-r3} + subs r4, r4, #0x1 + bne _020D89E8 + ldr r0, [r12, #0x0] + add sp, sp, #0x88 + str r0, [lr, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr +_020D8A0C: + ldrb r4, [sp, #0x0] + add r2, r2, #0x1 + add r3, r3, r5 + cmp r2, r4 + blt _020D89A4 +_020D8A20: + add r4, sp, #0x0 + mov r12, #0x8 +_020D8A28: + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + subs r12, r12, #0x1 + bne _020D8A28 + ldr r0, [r4, #0x0] + str r0, [lr, #0x0] + add sp, sp, #0x88 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start WM_GetDispersionScanPeriod +WM_GetDispersionScanPeriod: ; 0x020D8A4C + stmdb sp!, {lr} + sub sp, sp, #0xc + add r0, sp, #0x0 + bl OS_GetMacAddress + mov r2, #0x0 + add r1, sp, #0x0 + mov r3, r2 +_020D8A68: + ldrb r0, [r1, #0x0] + add r2, r2, #0x1 + cmp r2, #0x6 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + add r1, r1, #0x1 + blt _020D8A68 + ldr r0, _020D8AE4 ; =0x027FFC3C + mov r1, #0xd + ldr r0, [r0, #0x0] + ldr r2, _020D8AE8 ; =0x66666667 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + mul r0, r3, r1 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + smull r0, r1, r2, r3 + mov r1, r1, asr #0x2 + mov r0, r3, lsr #0x1f + ldr r2, _020D8AEC ; =0x0000000A + add r1, r0, r1 + smull r0, r1, r2, r1 + sub r1, r3, r0 + add r0, r1, #0x1e + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_020D8AE4: .word 0x027FFC3C +_020D8AE8: .word 0x66666667 +_020D8AEC: .word 0x0000000A + + arm_func_start WM_GetDispersionBeaconPeriod +WM_GetDispersionBeaconPeriod: ; 0x020D8AF0 + stmdb sp!, {lr} + sub sp, sp, #0xc + add r0, sp, #0x0 + bl OS_GetMacAddress + mov r2, #0x0 + add r1, sp, #0x0 + mov r3, r2 +_020D8B0C: + ldrb r0, [r1, #0x0] + add r2, r2, #0x1 + cmp r2, #0x6 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + add r1, r1, #0x1 + blt _020D8B0C + ldr r0, _020D8B88 ; =0x027FFC3C + mov r1, #0x7 + ldr r0, [r0, #0x0] + ldr r2, _020D8B8C ; =0x66666667 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + mul r0, r3, r1 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + smull r0, r1, r2, r3 + mov r1, r1, asr #0x3 + mov r0, r3, lsr #0x1f + ldr r2, _020D8B90 ; =0x00000014 + add r1, r0, r1 + smull r0, r1, r2, r1 + sub r1, r3, r0 + add r0, r1, #0xc8 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_020D8B88: .word 0x027FFC3C +_020D8B8C: .word 0x66666667 +_020D8B90: .word 0x00000014 + + arm_func_start WM_GetLinkLevel +WM_GetLinkLevel: ; 0x020D8B94 + stmdb sp!, {r4,lr} + bl WMi_GetSystemWork + mov r4, r0 + bl WMi_CheckInitialized +_020D8BA4: + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x10, 0x40, 0xBD, 0x18 + .byte 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x00, 0x94, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x58, 0xCD, 0xFF, 0xEB + .byte 0x04, 0x20, 0x94, 0xE5, 0xB0, 0x00, 0xD2, 0xE1, 0x09, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A + .byte 0x0A, 0x00, 0x50, 0xE3, 0x0D, 0x00, 0x00, 0x0A, 0x0B, 0x00, 0x50, 0xE3, 0x0B, 0x00, 0x00, 0x0A + .byte 0x11, 0x00, 0x00, 0xEA, 0x4C, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x82, 0xE0 + .byte 0x4B, 0xCD, 0xFF, 0xEB, 0x04, 0x20, 0x94, 0xE5, 0x01, 0x0C, 0x82, 0xE2, 0xB2, 0x08, 0xD0, 0xE1 + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 + .byte 0xBC, 0x00, 0x82, 0xE2, 0x02, 0x10, 0xA0, 0xE3, 0x41, 0xCD, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5 + .byte 0xBC, 0x0B, 0xD0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x82, 0x01, 0x00, 0x00 + + arm_func_start WM_GetAllowedChannel +WM_GetAllowedChannel: ; 0x020D8C3C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WMi_CheckInitialized +_020D8C48: + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x09, 0xA0, 0x13 + .byte 0x0C, 0x00, 0x9F, 0x05, 0xB0, 0x00, 0xD0, 0x01, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xFA, 0xFC, 0x7F, 0x02 + + arm_func_start WM_ReadMPData +WM_ReadMPData: ; 0x020D8C68 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x40 + mov r5, r0 + mov r4, r1 + bl WMi_GetSystemWork + mov r6, r0 + bl WMi_CheckInitialized +_020D8C84: + .byte 0x00, 0x00, 0x50, 0xE3, 0x40, 0xD0, 0x8D, 0x12, 0x00, 0x00, 0xA0, 0x13 + .byte 0x70, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x01, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x3A + .byte 0x0F, 0x00, 0x54, 0xE3, 0x03, 0x00, 0x00, 0x9A, 0x40, 0xD0, 0x8D, 0xE2, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x04, 0x20, 0x96, 0xE5, 0xA4, 0x00, 0x9F, 0xE5 + .byte 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x82, 0xE0, 0x15, 0xCD, 0xFF, 0xEB, 0x04, 0x00, 0x96, 0xE5 + .byte 0x01, 0x10, 0xA0, 0xE3, 0x01, 0x0C, 0x80, 0xE2, 0xB2, 0x28, 0xD0, 0xE1, 0x11, 0x04, 0xA0, 0xE1 + .byte 0x00, 0x00, 0x12, 0xE0, 0x40, 0xD0, 0x8D, 0x02, 0x00, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0x08 + .byte 0x1E, 0xFF, 0x2F, 0x01, 0xB4, 0x00, 0xD5, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x40, 0xD0, 0x8D, 0x02 + .byte 0x00, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x0A, 0x00, 0x85, 0xE2 + .byte 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE3, 0x00, 0x20, 0x8D, 0xE2, 0x03, 0x01, 0x92, 0xE7 + .byte 0xB4, 0x10, 0xD0, 0xE1, 0x01, 0x00, 0x54, 0xE1, 0x40, 0xD0, 0x8D, 0x02, 0x70, 0x40, 0xBD, 0x08 + .byte 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0x30, 0x83, 0xE2, 0x01, 0x00, 0x43, 0xE2, 0xB6, 0x10, 0xD5, 0xE1 + .byte 0x00, 0x01, 0x92, 0xE7, 0x00, 0x00, 0x81, 0xE0, 0x03, 0x01, 0x82, 0xE7, 0xB4, 0x00, 0xD5, 0xE1 + .byte 0x00, 0x00, 0x53, 0xE1, 0xF0, 0xFF, 0xFF, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x40, 0xD0, 0x8D, 0xE2 + .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x82, 0x01, 0x00, 0x00 + + arm_func_start WM_GetMPReceiveBufferSize +WM_GetMPReceiveBufferSize: ; 0x020D8D6C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x8 + bl WMi_CheckStateEx +_020D8D8C: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x00, 0xA0, 0x13, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x04, 0x00, 0x94, 0xE5, 0x04, 0x10, 0xA0, 0xE3, 0x0C, 0x00, 0x80, 0xE2, 0xDC, 0xCC, 0xFF, 0xEB + .byte 0x04, 0x10, 0x94, 0xE5, 0x0C, 0x00, 0x91, 0xE5, 0x01, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02 + .byte 0x00, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x62, 0x0F, 0x81, 0xE2 + .byte 0x02, 0x10, 0xA0, 0xE3, 0xD2, 0xCC, 0xFF, 0xEB, 0x04, 0x10, 0x94, 0xE5, 0x01, 0x0C, 0x81, 0xE2 + .byte 0xB8, 0x08, 0xD0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x50, 0xA0, 0x03, 0x3E, 0x00, 0x81, 0xE2 + .byte 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x50, 0xA0, 0x13, 0xC9, 0xCC, 0xFF, 0xEB, 0x01, 0x00, 0x55, 0xE3 + .byte 0x04, 0x00, 0x94, 0xE5, 0x04, 0xD0, 0x8D, 0x12, 0xBE, 0x53, 0xD0, 0xE1, 0x51, 0x00, 0x85, 0x12 + .byte 0x1F, 0x00, 0xC0, 0x13, 0x80, 0x00, 0xA0, 0x11, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0xF8, 0x00, 0x80, 0xE2, 0x02, 0x10, 0xA0, 0xE3, 0xBD, 0xCC, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5 + .byte 0x0C, 0x10, 0x85, 0xE2, 0xB8, 0x0F, 0xD0, 0xE1, 0x91, 0x00, 0x00, 0xE0, 0x29, 0x00, 0x80, 0xE2 + .byte 0x1F, 0x00, 0xC0, 0xE3, 0x80, 0x00, 0xA0, 0xE1, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_GetMPSendBufferSize +WM_GetMPSendBufferSize: ; 0x020D8E54 + stmdb sp!, {r4,lr} + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x8 + bl WMi_CheckStateEx +_020D8E70: + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x04, 0x00, 0x94, 0xE5, 0x04, 0x10, 0xA0, 0xE3, 0x0C, 0x00, 0x80, 0xE2, 0xA4, 0xCC, 0xFF, 0xEB + .byte 0x04, 0x10, 0x94, 0xE5, 0x0C, 0x00, 0x91, 0xE5, 0x01, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x03 + .byte 0x10, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x3C, 0x00, 0x81, 0xE2, 0x04, 0x10, 0xA0, 0xE3 + .byte 0x9B, 0xCC, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0xBC, 0x03, 0xD0, 0xE1, 0x1F, 0x00, 0x80, 0xE2 + .byte 0x1F, 0x00, 0xC0, 0xE3, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_ReadStatus +WM_ReadStatus: ; 0x020D8ECC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WMi_GetSystemWork + mov r4, r0 + bl WMi_CheckInitialized +_020D8EE4: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18 + .byte 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x55, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03 + .byte 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x04, 0x00, 0x94, 0xE5, 0x1F, 0x1D, 0xA0, 0xE3 + .byte 0x83, 0xCC, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0x05, 0x10, 0xA0, 0xE1, 0x1F, 0x2D, 0xA0, 0xE3 + .byte 0xD9, 0xD4, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_SetPortCallback +WM_SetPortCallback: ; 0x020D8F34 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x48 + movs r5, r1 + mov r6, r0 + mov r4, r2 + beq _020D8F9C + add r0, sp, #0x0 + mov r1, #0x0 + mov r2, #0x44 + bl MI_CpuFill8 + mov r3, #0x0 + ldr r1, _020D9010 ; =0x0000FFFF + mov r7, #0x82 + mov r2, #0x19 + add r0, sp, #0x14 + strh r7, [sp, #0x0] + strh r3, [sp, #0x2] + strh r2, [sp, #0x4] + strh r6, [sp, #0x6] + str r3, [sp, #0x8] + str r3, [sp, #0xc] + strh r3, [sp, #0x10] + strh r1, [sp, #0x1a] + str r4, [sp, #0x1c] + strh r3, [sp, #0x12] + bl OS_GetMacAddress +_020D8F9C: + bl OS_DisableInterrupts + mov r8, r0 + bl WMi_CheckInitialized + movs r7, r0 + beq _020D8FC8 + mov r0, r8 + bl OS_RestoreInterrupts + add sp, sp, #0x48 + mov r0, r7 + ldmia sp!, {r4-r8,lr} + bx lr +_020D8FC8: + bl WMi_GetSystemWork + add r0, r0, r6, lsl #0x2 + str r5, [r0, #0xcc] + str r4, [r0, #0x10c] + cmp r5, #0x0 + beq _020D8FF8 + bl WM_GetConnectedAIDs + strh r0, [sp, #0x22] + bl WM_GetAID + strh r0, [sp, #0x20] + add r0, sp, #0x0 + blx r5 +_020D8FF8: + mov r0, r8 + bl OS_RestoreInterrupts +_020D9000: + .byte 0x00, 0x00, 0xA0, 0xE3, 0x48, 0xD0, 0x8D, 0xE2, 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020D9010: .word 0x0000FFFF + + arm_func_start WM_SetIndCallback +WM_SetIndCallback: ; 0x020D9014 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + bl OS_DisableInterrupts + mov r5, r0 + bl WMi_CheckInitialized + movs r4, r0 + beq _020D9044 + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4-r6,lr} + bx lr +_020D9044: + bl WMi_GetSystemWork + str r6, [r0, #0xc8] + mov r0, r5 + bl OS_RestoreInterrupts +_020D9054: + .byte 0x00, 0x00, 0xA0, 0xE3, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_Disconnect +WM_Disconnect: ; 0x020D9060 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r6, r0 + mov r5, r1 + bl WMi_GetSystemWork + mov r1, #0xa + mov r4, r0 + str r1, [sp, #0x0] + mov r12, #0xb + mov r0, #0x5 + mov r1, #0x7 + mov r2, #0x9 + mov r3, #0x8 + str r12, [sp, #0x4] + bl WMi_CheckStateEx +_020D909C: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x08, 0xD0, 0x8D, 0x12, 0x70, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x20, 0x94, 0xE5 + .byte 0xB0, 0x00, 0xD2, 0xE1, 0x07, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x00, 0x0A, 0x09, 0x00, 0x50, 0xE3 + .byte 0x16, 0x00, 0x00, 0x1A, 0x01, 0x00, 0x55, 0xE3, 0x01, 0x00, 0x00, 0x3A, 0x0F, 0x00, 0x55, 0xE3 + .byte 0x03, 0x00, 0x00, 0x9A, 0x08, 0xD0, 0x8D, 0xE2, 0x06, 0x00, 0xA0, 0xE3, 0x70, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x78, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x82, 0xE0 + .byte 0x0B, 0xCC, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x01, 0x0C, 0x80, 0xE2 + .byte 0xB2, 0x28, 0xD0, 0xE1, 0x11, 0x05, 0xA0, 0xE1, 0x00, 0x00, 0x12, 0xE0, 0x08, 0x00, 0x00, 0x1A + .byte 0x08, 0xD0, 0x8D, 0xE2, 0x07, 0x00, 0xA0, 0xE3, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x00, 0x55, 0xE3, 0x08, 0xD0, 0x8D, 0x12, 0x06, 0x00, 0xA0, 0x13, 0x70, 0x40, 0xBD, 0x18 + .byte 0x1E, 0xFF, 0x2F, 0x11, 0x06, 0x10, 0xA0, 0xE1, 0x0D, 0x00, 0xA0, 0xE3, 0x17, 0xFD, 0xFF, 0xEB + .byte 0x01, 0x10, 0xA0, 0xE3, 0x11, 0x25, 0xA0, 0xE1, 0x0D, 0x00, 0xA0, 0xE3, 0xC8, 0xFC, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x08, 0xD0, 0x8D, 0xE2, 0x70, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x82, 0x01, 0x00, 0x00 + + arm_func_start WM_StartConnectEx +WM_StartConnectEx: ; 0x020D9168 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x2c + mov r7, r0 + mov r6, r1 + mov r0, #0x1 + mov r1, #0x2 + mov r5, r2 + mov r4, r3 + bl WMi_CheckStateEx +_020D918C: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x2C, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x56, 0xE3 + .byte 0x2C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 + .byte 0xB0, 0x10, 0xD6, 0xE1, 0x06, 0x00, 0xA0, 0xE1, 0x81, 0x10, 0xA0, 0xE1, 0xDF, 0xCB, 0xFF, 0xEB + .byte 0x89, 0xFC, 0xFF, 0xEB, 0x01, 0x1C, 0x80, 0xE2, 0x00, 0x20, 0xA0, 0xE3, 0xB0, 0x25, 0xC1, 0xE1 + .byte 0x4C, 0x21, 0x80, 0xE5, 0x07, 0x10, 0xA0, 0xE1, 0x0C, 0x00, 0xA0, 0xE3, 0xEF, 0xFC, 0xFF, 0xEB + .byte 0x0C, 0x00, 0xA0, 0xE3, 0xB0, 0x00, 0xCD, 0xE1, 0x04, 0x60, 0x8D, 0xE5, 0x00, 0x00, 0x55, 0xE3 + .byte 0x04, 0x00, 0x00, 0x0A, 0x08, 0x10, 0x8D, 0xE2, 0x05, 0x00, 0xA0, 0xE1, 0x18, 0x20, 0xA0, 0xE3 + .byte 0x76, 0xD4, 0xFF, 0xEB, 0x03, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x8D, 0xE2, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x18, 0x20, 0xA0, 0xE3, 0x4C, 0xD4, 0xFF, 0xEB, 0xB0, 0x24, 0xDD, 0xE1, 0x00, 0x00, 0x8D, 0xE2 + .byte 0x28, 0x10, 0xA0, 0xE3, 0x20, 0x40, 0x8D, 0xE5, 0xB6, 0x22, 0xCD, 0xE1, 0x72, 0xFC, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x2C, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_EndScan +WM_EndScan: ; 0x020D9244 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, #0x5 + bl WMi_CheckStateEx +_020D9258: + .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18 + .byte 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1, 0x0B, 0x00, 0xA0, 0xE3, 0xCB, 0xFC, 0xFF, 0xEB + .byte 0x0B, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x7D, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_StartScanEx +WM_StartScanEx: ; 0x020D928C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x3c + mov r5, r0 + mov r0, #0x3 + mov r4, r1 + mov r2, r0 + mov r1, #0x2 + mov r3, #0x5 + bl WMi_CheckStateEx +_020D92B0: + .byte 0x00, 0x00, 0x50, 0xE3, 0x3C, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x00, 0x00, 0x54, 0xE3, 0x3C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08 + .byte 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x3C, 0xD0, 0x8D, 0x02 + .byte 0x06, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0xB4, 0x00, 0xD4, 0xE1 + .byte 0x01, 0x0B, 0x50, 0xE3, 0x3C, 0xD0, 0x8D, 0x82, 0x06, 0x00, 0xA0, 0x83, 0x30, 0x40, 0xBD, 0x88 + .byte 0x1E, 0xFF, 0x2F, 0x81, 0xB2, 0x01, 0xD4, 0xE1, 0x20, 0x00, 0x50, 0xE3, 0x3C, 0xD0, 0x8D, 0x82 + .byte 0x06, 0x00, 0xA0, 0x83, 0x30, 0x40, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0xB0, 0x11, 0xD4, 0xE1 + .byte 0x00, 0x00, 0x51, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x51, 0xE3, 0x06, 0x00, 0x00, 0x0A + .byte 0x02, 0x00, 0x51, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x03, 0x00, 0x51, 0xE3, 0x3C, 0xD0, 0x8D, 0x12 + .byte 0x06, 0x00, 0xA0, 0x13, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0xB4, 0x00, 0x9F, 0xE5 + .byte 0x00, 0x00, 0x81, 0xE0, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1, 0x01, 0x00, 0x50, 0xE3 + .byte 0x05, 0x00, 0x00, 0x8A, 0xB4, 0x03, 0xD4, 0xE1, 0x20, 0x00, 0x50, 0xE3, 0x3C, 0xD0, 0x8D, 0x82 + .byte 0x06, 0x00, 0xA0, 0x83, 0x30, 0x40, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0x05, 0x10, 0xA0, 0xE1 + .byte 0x26, 0x00, 0xA0, 0xE3, 0x85, 0xFC, 0xFF, 0xEB, 0x26, 0x00, 0xA0, 0xE3, 0xB0, 0x00, 0xCD, 0xE1 + .byte 0xB6, 0x20, 0xD4, 0xE1, 0x0C, 0x10, 0x8D, 0xE2, 0x0A, 0x00, 0x84, 0xE2, 0xB2, 0x20, 0xCD, 0xE1 + .byte 0x00, 0x30, 0x94, 0xE5, 0x06, 0x20, 0xA0, 0xE3, 0x04, 0x30, 0x8D, 0xE5, 0xB4, 0x30, 0xD4, 0xE1 + .byte 0xB8, 0x30, 0xCD, 0xE1, 0xB8, 0x30, 0xD4, 0xE1, 0xBA, 0x30, 0xCD, 0xE1, 0x07, 0xD4, 0xFF, 0xEB + .byte 0xB0, 0x21, 0xD4, 0xE1, 0x16, 0x10, 0x8D, 0xE2, 0x14, 0x00, 0x84, 0xE2, 0xB2, 0x21, 0xCD, 0xE1 + .byte 0xB4, 0x33, 0xD4, 0xE1, 0x20, 0x20, 0xA0, 0xE3, 0xB6, 0x33, 0xCD, 0xE1, 0xB2, 0x31, 0xD4, 0xE1 + .byte 0xB4, 0x31, 0xCD, 0xE1, 0xFD, 0xD3, 0xFF, 0xEB, 0x00, 0x00, 0x8D, 0xE2, 0x3C, 0x10, 0xA0, 0xE3 + .byte 0x01, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x3C, 0xD0, 0x8D, 0xE2 + .byte 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xFE, 0xFF, 0x00, 0x00 + + arm_func_start WM_StartScan +WM_StartScan: ; 0x020D940C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x14 + mov r5, r0 + mov r0, #0x3 + mov r4, r1 + mov r2, r0 + mov r1, #0x2 + mov r3, #0x5 + bl WMi_CheckStateEx +_020D9430: + .byte 0x00, 0x00, 0x50, 0xE3, 0x14, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x00, 0x00, 0x54, 0xE3, 0x14, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08 + .byte 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x14, 0xD0, 0x8D, 0x02 + .byte 0x06, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0xB4, 0x00, 0xD4, 0xE1 + .byte 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x00, 0x3A, 0x0E, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x9A + .byte 0x14, 0xD0, 0x8D, 0xE2, 0x06, 0x00, 0xA0, 0xE3, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + .byte 0x05, 0x10, 0xA0, 0xE1, 0x0A, 0x00, 0xA0, 0xE3, 0x40, 0xFC, 0xFF, 0xEB, 0x0A, 0x00, 0xA0, 0xE3 + .byte 0xB0, 0x00, 0xCD, 0xE1, 0xB4, 0x20, 0xD4, 0xE1, 0x00, 0x00, 0x8D, 0xE2, 0x10, 0x10, 0xA0, 0xE3 + .byte 0xB2, 0x20, 0xCD, 0xE1, 0x00, 0x20, 0x94, 0xE5, 0x04, 0x20, 0x8D, 0xE5, 0xB6, 0x20, 0xD4, 0xE1 + .byte 0xB8, 0x20, 0xCD, 0xE1, 0x08, 0x20, 0xD4, 0xE5, 0x0A, 0x20, 0xCD, 0xE5, 0x09, 0x20, 0xD4, 0xE5 + .byte 0x0B, 0x20, 0xCD, 0xE5, 0x0A, 0x20, 0xD4, 0xE5, 0x0C, 0x20, 0xCD, 0xE5, 0x0B, 0x20, 0xD4, 0xE5 + .byte 0x0D, 0x20, 0xCD, 0xE5, 0x0C, 0x20, 0xD4, 0xE5, 0x0E, 0x20, 0xCD, 0xE5, 0x0D, 0x20, 0xD4, 0xE5 + .byte 0x0F, 0x20, 0xCD, 0xE5, 0xC0, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 + .byte 0x14, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_EndParent +WM_EndParent: ; 0x020D950C + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, #0x7 + bl WMi_CheckStateEx +_020D9520: + .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 + .byte 0x09, 0x00, 0xA0, 0xE3, 0x19, 0xFC, 0xFF, 0xEB, 0x09, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 + .byte 0xCB, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_StartParent +WM_StartParent: ; 0x020D9554 + ldr ip, _020D9560 ; =0x020D9564 + mov r1, #0x1 + bx r12 + .balign 4 +_020D9560: .word 0x020D9564 +_020D9564: + .byte 0x30, 0x40, 0x2D, 0xE9, 0x04, 0xD0, 0x4D, 0xE2, 0x00, 0x50, 0xA0, 0xE1 + .byte 0x01, 0x40, 0xA0, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x02, 0x10, 0xA0, 0xE3, 0x52, 0xFB, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x95, 0xFB, 0xFF, 0xEB, 0x01, 0x1C, 0x80, 0xE2, 0x00, 0x20, 0xA0, 0xE3, 0xB0, 0x25, 0xC1, 0xE1 + .byte 0x4C, 0x21, 0x80, 0xE5, 0x05, 0x10, 0xA0, 0xE1, 0x08, 0x00, 0xA0, 0xE3, 0xFB, 0xFB, 0xFF, 0xEB + .byte 0x04, 0x20, 0xA0, 0xE1, 0x08, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0xA0, 0xE3, 0xAC, 0xFB, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WmCheckParentParameter +WmCheckParentParameter: ; 0x020D95D4 + ldrh r1, [r0, #0x4] + cmp r1, #0x70 + movhi r0, #0x0 + bxhi lr + ldrh r1, [r0, #0x18] + cmp r1, #0xa + blo _020D95F8 + cmp r1, #0x3e8 + bls _020D9600 +_020D95F8: + mov r0, #0x0 + bx lr +_020D9600: + ldrh r0, [r0, #0x32] + cmp r0, #0x1 + blo _020D9614 + cmp r0, #0xe + bls _020D961C +_020D9614: + mov r0, #0x0 + bx lr +_020D961C: + mov r0, #0x1 + bx lr + + arm_func_start WM_SetParentParameter +WM_SetParentParameter: ; 0x020D9624 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020D9640: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x00, 0x00, 0x54, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08 + .byte 0x1E, 0xFF, 0x2F, 0x01, 0xB4, 0x00, 0xD4, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A + .byte 0x00, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03 + .byte 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0xB4, 0x11, 0xD4, 0xE1, 0xB4, 0x03, 0xD4, 0xE1 + .byte 0x00, 0x00, 0x51, 0xE3, 0x2A, 0x20, 0xA0, 0x13, 0x00, 0x20, 0xA0, 0x03, 0x02, 0x00, 0x80, 0xE0 + .byte 0x02, 0x0C, 0x50, 0xE3, 0x06, 0x00, 0x00, 0xCA, 0xB6, 0x03, 0xD4, 0xE1, 0x00, 0x00, 0x51, 0xE3 + .byte 0x06, 0x10, 0xA0, 0x13, 0x00, 0x10, 0xA0, 0x03, 0x01, 0x00, 0x80, 0xE0, 0x02, 0x0C, 0x50, 0xE3 + .byte 0x03, 0x00, 0x00, 0xDA, 0x04, 0xD0, 0x8D, 0xE2, 0x06, 0x00, 0xA0, 0xE3, 0x30, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0xBD, 0xFF, 0xFF, 0xEB, 0x05, 0x10, 0xA0, 0xE1 + .byte 0x07, 0x00, 0xA0, 0xE3, 0xAD, 0xFB, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x40, 0x10, 0xA0, 0xE3 + .byte 0x92, 0xCA, 0xFF, 0xEB, 0xB4, 0x10, 0xD4, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0x0A + .byte 0x00, 0x00, 0x94, 0xE5, 0x8D, 0xCA, 0xFF, 0xEB, 0x04, 0x20, 0xA0, 0xE1, 0x07, 0x00, 0xA0, 0xE3 + .byte 0x01, 0x10, 0xA0, 0xE3, 0x56, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 + .byte 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_End +WM_End: ; 0x020D972C + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020D9740: + .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 + .byte 0x02, 0x00, 0xA0, 0xE3, 0x91, 0xFB, 0xFF, 0xEB, 0x02, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x43, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_Reset +WM_Reset: ; 0x020D9774 + stmdb sp!, {r4,lr} + mov r4, r0 + bl WMi_CheckIdle +_020D9780: + .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 + .byte 0x01, 0x00, 0xA0, 0xE3, 0x81, 0xFB, 0xFF, 0xEB, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x33, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_Initialize +WM_Initialize: ; 0x020D97B4 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + mov r4, r1 + mov r1, r2 + bl WM_Init +_020D97C8: + .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0xD0, 0x8D, 0x12 + .byte 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x6E, 0xFB, 0xFF, 0xEB, 0x00, 0xFB, 0xFF, 0xEB, 0x00, 0x30, 0xA0, 0xE1, 0x10, 0x10, 0x93, 0xE5 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0x8D, 0xE5, 0x00, 0x20, 0x93, 0xE5, 0x04, 0x30, 0x93, 0xE5 + .byte 0x03, 0x10, 0xA0, 0xE3, 0x1A, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 + .byte 0x08, 0xD0, 0x8D, 0xE2, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_PowerOff +WM_PowerOff: ; 0x020D981C + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020D9830: + .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 + .byte 0x06, 0x00, 0xA0, 0xE3, 0x55, 0xFB, 0xFF, 0xEB, 0x06, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x07, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_PowerOn +WM_PowerOn: ; 0x020D9864 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, r0 + bl WMi_CheckStateEx +_020D9878: + .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18 + .byte 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1, 0x05, 0x00, 0xA0, 0xE3, 0x43, 0xFB, 0xFF, 0xEB + .byte 0x05, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0xF5, 0xFA, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_Disable +WM_Disable: ; 0x020D98AC + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, r0 + bl WMi_CheckStateEx +_020D98C0: + .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 + .byte 0x04, 0x00, 0xA0, 0xE3, 0x31, 0xFB, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 + .byte 0xE3, 0xFA, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_Enable +WM_Enable: ; 0x020D98F4 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + mov r4, r0 + mov r0, #0x1 + mov r1, #0x0 + bl WMi_CheckStateEx +_020D990C: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x08, 0xD0, 0x8D, 0x12, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 + .byte 0x03, 0x00, 0xA0, 0xE3, 0x1D, 0xFB, 0xFF, 0xEB, 0xAF, 0xFA, 0xFF, 0xEB, 0x00, 0x30, 0xA0, 0xE1 + .byte 0x10, 0x10, 0x93, 0xE5, 0x03, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0x8D, 0xE5, 0x00, 0x20, 0x93, 0xE5 + .byte 0x04, 0x30, 0x93, 0xE5, 0x00, 0x10, 0xA0, 0xE1, 0xC9, 0xFA, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x02, 0x00, 0xA0, 0x03, 0x08, 0xD0, 0x8D, 0xE2, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_EndMP +WM_EndMP: ; 0x020D9960 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x2 + mov r1, #0x9 + mov r2, #0xa + bl WMi_CheckStateEx +_020D9984: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18 + .byte 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x00, 0x94, 0xE5, 0x04, 0x10, 0xA0, 0xE3, 0x0C, 0x00, 0x80, 0xE2 + .byte 0xDF, 0xC9, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0x0C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0x02, 0x03, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 + .byte 0x05, 0x10, 0xA0, 0xE1, 0x10, 0x00, 0xA0, 0xE3, 0xF4, 0xFA, 0xFF, 0xEB, 0x10, 0x00, 0xA0, 0xE3 + .byte 0x00, 0x10, 0xA0, 0xE3, 0xA6, 0xFA, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 + .byte 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_SetMPDataToPortEx +WM_SetMPDataToPortEx: ; 0x020D99EC + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x14 + mov r9, r0 + mov r8, r1 + mov r7, r2 + mov r6, r3 + mov r5, #0x1 + bl WMi_GetSystemWork + ldr r4, [r0, #0x4] + mov r0, #0x2 + mov r1, #0x9 + mov r2, #0xa + bl WMi_CheckStateEx +_020D9A20: + .byte 0x00, 0x00, 0x50, 0xE3, 0x14, 0xD0, 0x8D, 0x12, 0xF0, 0x43, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x3C, 0x00, 0x84, 0xE2, 0x02, 0x10, 0xA0, 0xE3, 0xB9, 0xC9, 0xFF, 0xEB, 0x62, 0x0F, 0x84, 0xE2 + .byte 0x02, 0x10, 0xA0, 0xE3, 0xB6, 0xC9, 0xFF, 0xEB, 0x01, 0x0C, 0x84, 0xE2, 0xB8, 0x08, 0xD0, 0xE1 + .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A, 0xE4, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3 + .byte 0x00, 0x00, 0x84, 0xE0, 0xAE, 0xC9, 0xFF, 0xEB, 0x01, 0x2C, 0x84, 0xE2, 0x86, 0x00, 0x84, 0xE2 + .byte 0x02, 0x10, 0xA0, 0xE3, 0xB2, 0x58, 0xD2, 0xE1, 0xA9, 0xC9, 0xFF, 0xEB, 0x00, 0x00, 0x57, 0xE3 + .byte 0x14, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x43, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 + .byte 0x00, 0x00, 0x55, 0xE3, 0x14, 0xD0, 0x8D, 0x02, 0x07, 0x00, 0xA0, 0x03, 0xF0, 0x43, 0xBD, 0x08 + .byte 0x1E, 0xFF, 0x2F, 0x01, 0x7C, 0x00, 0x84, 0xE2, 0x02, 0x10, 0xA0, 0xE3, 0x9C, 0xC9, 0xFF, 0xEB + .byte 0x7C, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x57, 0xE1, 0x14, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03 + .byte 0xF0, 0x43, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x02, 0x0C, 0x56, 0xE3, 0x14, 0xD0, 0x8D, 0x82 + .byte 0x06, 0x00, 0xA0, 0x83, 0xF0, 0x43, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0x00, 0x00, 0x56, 0xE3 + .byte 0x14, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x43, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 + .byte 0x07, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x90, 0xC9, 0xFF, 0xEB, 0xB0, 0x23, 0xDD, 0xE1 + .byte 0xB4, 0x13, 0xDD, 0xE1, 0xB8, 0x03, 0xDD, 0xE1, 0x00, 0x20, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5 + .byte 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x90, 0x8D, 0xE5, 0x07, 0x20, 0xA0, 0xE1, 0x06, 0x30, 0xA0, 0xE1 + .byte 0x0F, 0x00, 0xA0, 0xE3, 0x07, 0x10, 0xA0, 0xE3, 0x10, 0x80, 0x8D, 0xE5, 0x50, 0xFA, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x14, 0xD0, 0x8D, 0xE2, 0xF0, 0x43, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x82, 0x01, 0x00, 0x00 + + arm_func_start WM_StartMP +WM_StartMP: ; 0x020D9B48 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x24 + mov r6, r1 + mov r7, r0 + mov r5, r2 + add r1, sp, #0x8 + mov r0, #0x0 + mov r2, #0x1c + mov r4, r3 + bl MIi_CpuClear32 + ldrh r12, [sp, #0x3c] + mov r0, #0x3 + str r0, [sp, #0x8] + ldrh lr, [sp, #0x38] + strh r12, [sp, #0xc] + strh r12, [sp, #0xe] + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + add r12, sp, #0x8 + str lr, [sp, #0x0] + str r12, [sp, #0x4] + bl WMi_StartMP + add sp, sp, #0x24 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WM_StartMPEx +WM_StartMPEx: ; 0x020D9BB4 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x28 + mov r6, r1 + mov r7, r0 + mov r5, r2 + add r1, sp, #0x8 + mov r0, #0x0 + mov r2, #0x1c + mov r4, r3 + bl MIi_CpuClear32 + ldrh lr, [sp, #0x44] + ldr r1, [sp, #0x58] + ldrh r12, [sp, #0x48] + ldr r0, [sp, #0x54] + ldr r8, _020D9C54 ; =0x00001E03 + cmp r0, #0x0 + ldr r3, [sp, #0x4c] + ldr r2, [sp, #0x50] + strb r1, [sp, #0x22] + strh r12, [sp, #0x1e] + strb r3, [sp, #0x20] + strb r2, [sp, #0x21] + ldrh r1, [sp, #0x40] + str r8, [sp, #0x8] + orrne r0, r8, #0x4 + strne r0, [sp, #0x8] + strh lr, [sp, #0xc] + strh lr, [sp, #0xe] + strneh lr, [sp, #0x10] + str r1, [sp, #0x0] + add r12, sp, #0x8 + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + str r12, [sp, #0x4] + bl WMi_StartMP + add sp, sp, #0x28 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D9C54: .word 0x00001E03 + + arm_func_start WMi_StartMP +WMi_StartMP: ; 0x020D9C58 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x34 + mov r9, r0 + mov r8, r1 + mov r7, r2 + mov r6, r3 + bl WMi_GetSystemWork + ldr r5, [r0, #0x4] + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x8 + bl WMi_CheckStateEx +_020D9C88: + .byte 0x00, 0x00, 0x50, 0xE3, 0x34, 0xD0, 0x8D, 0x12 + .byte 0xF0, 0x43, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x62, 0x0F, 0x85, 0xE2, 0x02, 0x10, 0xA0, 0xE3 + .byte 0x1F, 0xC9, 0xFF, 0xEB, 0xC6, 0x00, 0x85, 0xE2, 0x02, 0x10, 0xA0, 0xE3, 0x1C, 0xC9, 0xFF, 0xEB + .byte 0x01, 0x0C, 0x85, 0xE2, 0xB8, 0x08, 0xD0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A + .byte 0xB6, 0x0C, 0xD5, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x34, 0xD0, 0x8D, 0x12, 0x03, 0x00, 0xA0, 0x13 + .byte 0xF0, 0x43, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x0C, 0x00, 0x85, 0xE2, 0x04, 0x10, 0xA0, 0xE3 + .byte 0x0F, 0xC9, 0xFF, 0xEB, 0x0C, 0x00, 0x95, 0xE5, 0x01, 0x00, 0x50, 0xE3, 0x34, 0xD0, 0x8D, 0x02 + .byte 0x03, 0x00, 0xA0, 0x03, 0xF0, 0x43, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x3F, 0x00, 0x17, 0xE2 + .byte 0x34, 0xD0, 0x8D, 0x12, 0x06, 0x00, 0xA0, 0x13, 0xF0, 0x43, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0xB0, 0x45, 0xDD, 0xE1, 0x1F, 0x00, 0x14, 0xE2, 0x34, 0xD0, 0x8D, 0x12, 0x06, 0x00, 0xA0, 0x13 + .byte 0xF0, 0x43, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x9C, 0x00, 0x85, 0xE2, 0x02, 0x10, 0xA0, 0xE3 + .byte 0xFB, 0xC8, 0xFF, 0xEB, 0xBC, 0x09, 0xD5, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x0B, 0x00, 0x00, 0x1A + .byte 0x09, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x57, 0xE1, 0x34, 0xD0, 0x8D, 0xB2, 0x06, 0x00, 0xA0, 0xB3 + .byte 0xF0, 0x43, 0xBD, 0xB8, 0x1E, 0xFF, 0x2F, 0xB1, 0x3D, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x54, 0xE1 + .byte 0x34, 0xD0, 0x8D, 0xB2, 0x06, 0x00, 0xA0, 0xB3, 0xF0, 0x43, 0xBD, 0xB8, 0x1E, 0xFF, 0x2F, 0xB1 + .byte 0x09, 0x10, 0xA0, 0xE1, 0x0E, 0x00, 0xA0, 0xE3, 0x08, 0xFA, 0xFF, 0xEB, 0x00, 0x10, 0x8D, 0xE2 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x30, 0x20, 0xA0, 0xE3, 0x1B, 0xD1, 0xFF, 0xEB, 0xB0, 0x35, 0xDD, 0xE1 + .byte 0xA7, 0x40, 0xA0, 0xE1, 0x0E, 0x50, 0xA0, 0xE3, 0x54, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x8D, 0xE2 + .byte 0x1C, 0x20, 0xA0, 0xE3, 0xB0, 0x50, 0xCD, 0xE1, 0x04, 0x80, 0x8D, 0xE5, 0x08, 0x40, 0x8D, 0xE5 + .byte 0x0C, 0x60, 0x8D, 0xE5, 0x10, 0x30, 0x8D, 0xE5, 0x14, 0xD1, 0xFF, 0xEB, 0x00, 0x00, 0x8D, 0xE2 + .byte 0x30, 0x10, 0xA0, 0xE3, 0x8C, 0xF9, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 + .byte 0x34, 0xD0, 0x8D, 0xE2, 0xF0, 0x43, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_EndDCF +WM_EndDCF: ; 0x020D9DDC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x1 + mov r1, #0xb + bl WMi_CheckStateEx +_020D9DFC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x00, 0x94, 0xE5 + .byte 0x04, 0x10, 0xA0, 0xE3, 0x10, 0x00, 0x80, 0xE2, 0xC1, 0xC8, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5 + .byte 0x10, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x03, 0x00, 0xA0, 0x03 + .byte 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x05, 0x10, 0xA0, 0xE1, 0x13, 0x00, 0xA0, 0xE3 + .byte 0xD6, 0xF9, 0xFF, 0xEB, 0x13, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x88, 0xF9, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_SetDCFData +WM_SetDCFData: ; 0x020D9E64 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl WMi_GetSystemWork + mov r8, r0 + mov r0, #0x1 + mov r1, #0xb + bl WMi_CheckStateEx +_020D9E90: + .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0xD0, 0x8D, 0x12, 0xF0, 0x41, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x04, 0x00, 0x98, 0xE5, 0x04, 0x10, 0xA0, 0xE3, 0x10, 0x00, 0x80, 0xE2, 0x9C, 0xC8, 0xFF, 0xEB + .byte 0x04, 0x00, 0x98, 0xE5, 0x10, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x10, 0xD0, 0x8D, 0x02 + .byte 0x03, 0x00, 0xA0, 0x03, 0xF0, 0x41, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x68, 0x00, 0x9F, 0xE5 + .byte 0x00, 0x00, 0x54, 0xE1, 0x10, 0xD0, 0x8D, 0x82, 0x06, 0x00, 0xA0, 0x83, 0xF0, 0x41, 0xBD, 0x88 + .byte 0x1E, 0xFF, 0x2F, 0x81, 0x05, 0x00, 0xA0, 0xE1, 0x04, 0x10, 0xA0, 0xE1, 0x93, 0xC8, 0xFF, 0xEB + .byte 0x07, 0x10, 0xA0, 0xE1, 0x12, 0x00, 0xA0, 0xE3, 0xA8, 0xF9, 0xFF, 0xEB, 0x08, 0x10, 0x8D, 0xE2 + .byte 0x06, 0x00, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE3, 0x34, 0xD1, 0xFF, 0xEB, 0x00, 0x50, 0x8D, 0xE5 + .byte 0x04, 0x40, 0x8D, 0xE5, 0x08, 0x20, 0x9D, 0xE5, 0x0C, 0x30, 0x9D, 0xE5, 0x12, 0x00, 0xA0, 0xE3 + .byte 0x04, 0x10, 0xA0, 0xE3, 0x52, 0xF9, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 + .byte 0x10, 0xD0, 0x8D, 0xE2, 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xE4, 0x05, 0x00, 0x00 + + arm_func_start WM_StartDCF +WM_StartDCF: ; 0x020D9F40 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x1 + mov r1, #0x8 + bl WMi_CheckStateEx +_020D9F68: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12 + .byte 0xF0, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x00, 0x94, 0xE5, 0x04, 0x10, 0xA0, 0xE3 + .byte 0x10, 0x00, 0x80, 0xE2, 0x66, 0xC8, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0x10, 0x00, 0x90, 0xE5 + .byte 0x01, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x03, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08 + .byte 0x1E, 0xFF, 0x2F, 0x01, 0x10, 0x00, 0x55, 0xE3, 0x04, 0xD0, 0x8D, 0x32, 0x06, 0x00, 0xA0, 0x33 + .byte 0xF0, 0x40, 0xBD, 0x38, 0x1E, 0xFF, 0x2F, 0x31, 0x00, 0x00, 0x56, 0xE3, 0x04, 0xD0, 0x8D, 0x02 + .byte 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x06, 0x00, 0xA0, 0xE1 + .byte 0x05, 0x10, 0xA0, 0xE1, 0x59, 0xC8, 0xFF, 0xEB, 0x07, 0x10, 0xA0, 0xE1, 0x11, 0x00, 0xA0, 0xE3 + .byte 0x6E, 0xF9, 0xFF, 0xEB, 0x06, 0x20, 0xA0, 0xE1, 0x05, 0x30, 0xA0, 0xE1, 0x11, 0x00, 0xA0, 0xE3 + .byte 0x02, 0x10, 0xA0, 0xE3, 0x1E, 0xF9, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 + .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WmGetSharedDataAddress +WmGetSharedDataAddress: ; 0x020DA00C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r12, #0x1 + mov r3, r12, lsl r3 + sub r3, r3, #0x1 + mov r5, r0 + and r0, r1, r3 + mov r4, r2 + bl MATH_CountPopulation + add r1, r5, #0x800 + ldrh r1, [r1, #0x10] + mla r0, r1, r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_GetSharedDataAddress +WM_GetSharedDataAddress: ; 0x020DA048 + stmdb sp!, {r4,lr} + mov r4, r1 + ldrh lr, [r4, #0x2] + cmp r0, #0x0 + mov r3, r2 + mov r1, #0x1 + mov r12, r1, lsl r3 + ldrh r1, [r4, #0x0] + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + cmp r4, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ands r2, r1, r12 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ands r2, lr, r12 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + add r2, r4, #0x4 + bl WmGetSharedDataAddress + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WmDataSharingSendDataSet +WmDataSharingSendDataSet: ; 0x020DA0B4 + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x10 + mov r10, r0 + mov r9, r1 + bl OS_DisableInterrupts + add r1, r10, #0x800 + ldrh r1, [r1, #0x8] + mov r7, r0 + mov r1, r1, lsl #0x9 + ldrh r1, [r10, r1] + cmp r1, #0x0 + bne _020DA210 + bl WMi_GetMPReadyAIDs + add r1, r10, #0x800 + ldrh r6, [r1, #0x8] + mov r5, r0 + ldrh r1, [r1, #0x18] + add r0, r6, #0x1 + and r0, r0, #0x3 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + cmp r1, #0x1 + addeq r0, r4, #0x1 + andeq r0, r0, #0x3 + moveq r0, r0, lsl #0x10 + moveq r8, r0, lsr #0x10 + movne r8, r4 + add r1, r10, r8, lsl #0x9 + mov r0, #0x0 + mov r2, #0x200 + bl MIi_CpuClear16 + add r0, r10, #0x800 + ldrh r3, [r0, #0xe] + orr r2, r5, #0x1 + mov r1, r8, lsl #0x9 + and r2, r3, r2 + strh r2, [r10, r1] + strh r4, [r0, #0x8] + ldrh r0, [r0, #0xe] + mov r1, r6, lsl #0x9 + cmp r9, #0x1 + strh r0, [r10, r1] + ldreqh r0, [r10, r1] + biceq r0, r0, #0x1 + streqh r0, [r10, r1] + mov r0, r7 + bl OS_RestoreInterrupts + add r3, r10, #0x800 + ldrh r1, [r3, #0xe] + mov r4, #0x1 + ldr r0, _020DA220 ; =WmDataSharingSetDataCallback + and r1, r1, r5 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + str r1, [sp, #0x0] + ldrh r5, [r3, #0x16] + mov r1, r10 + add r2, r10, r6, lsl #0x9 + str r5, [sp, #0x4] + str r4, [sp, #0x8] + ldrh r3, [r3, #0x14] + bl WM_SetMPDataToPortEx + cmp r0, #0x7 + bne _020DA1E4 + add r0, r10, r6, lsl #0x1 + ldr r1, _020DA224 ; =0x0000FFFF + add r0, r0, #0x800 + strh r1, [r0, #0x0] + add r0, r10, #0x800 + ldrh r1, [r0, #0xa] + add sp, sp, #0x10 + add r1, r1, #0x1 + and r1, r1, #0x3 + strh r1, [r0, #0xa] + ldmia sp!, {r4-r10,lr} + bx lr +_020DA1E4: + cmp r0, #0x0 + addeq sp, sp, #0x10 + ldmeqia sp!, {r4-r10,lr} + bxeq lr + cmp r0, #0x2 + addne r0, r10, #0x800 + movne r1, #0x5 + strneh r1, [r0, #0x1c] + add sp, sp, #0x10 + ldmia sp!, {r4-r10,lr} + bx lr +_020DA210: + bl OS_RestoreInterrupts + add sp, sp, #0x10 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020DA220: .word WmDataSharingSetDataCallback +_020DA224: .word 0x0000FFFF + + arm_func_start WmDataSharingReceiveData +WmDataSharingReceiveData: ; 0x020DA228 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r3, r1 + mov r0, #0x1 + mov r0, r0, lsl r3 + add r12, r7, #0x800 + mov r0, r0, lsl #0x10 + ldrh r1, [r12, #0xe] + mov r5, r0, lsr #0x10 + mov r6, r2 + ands r0, r1, r5 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldrh r4, [r12, #0x8] + mov r0, r4, lsl #0x9 + ldrh r0, [r7, r0] + ands r0, r5, r0 + bne _020DA2B4 + ldrh r0, [r12, #0x18] + cmp r0, #0x1 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + add r0, r4, #0x1 + and r0, r0, #0x3 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + mov r0, r4, lsl #0x9 + ldrh r0, [r7, r0] + ands r0, r5, r0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr +_020DA2B4: + add r2, r7, r4, lsl #0x9 + mov r0, r7 + add r2, r2, #0x4 + bl WmGetSharedDataAddress + mov r1, r0 + cmp r6, #0x0 + beq _020DA2E4 + add r0, r7, #0x800 + ldrh r2, [r0, #0x10] + mov r0, r6 + bl MIi_CpuCopy16 + b _020DA2F4 +_020DA2E4: + add r0, r7, #0x800 + ldrh r2, [r0, #0x10] + mov r0, #0x0 + bl MIi_CpuClear16 +_020DA2F4: + bl OS_DisableInterrupts + mov r4, r4, lsl #0x9 + ldrh r3, [r7, r4] + mvn r1, r5 + add r2, r7, #0x2 + and r1, r3, r1 + strh r1, [r7, r4] + ldrh r1, [r2, r4] + orr r1, r1, r5 + strh r1, [r2, r4] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WmDataSharingReceiveCallback_Child +WmDataSharingReceiveCallback_Child: ; 0x020DA32C + stmdb sp!, {r4-r8,lr} + mov r8, r0 + ldr r7, [r8, #0x1c] + cmp r7, #0x0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldrh r0, [r8, #0x2] + cmp r0, #0x0 + bne _020DA458 + ldrh r0, [r8, #0x4] + cmp r0, #0x15 + bgt _020DA394 + cmp r0, #0x15 + bge _020DA3C4 + cmp r0, #0x9 + ldmgtia sp!, {r4-r8,lr} + bxgt lr + cmp r0, #0x7 + ldmltia sp!, {r4-r8,lr} + bxlt lr + cmp r0, #0x7 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + cmp r0, #0x9 + ldmia sp!, {r4-r8,lr} + bx lr +_020DA394: + cmp r0, #0x1a + ldmgtia sp!, {r4-r8,lr} + bxgt lr + cmp r0, #0x19 + ldmltia sp!, {r4-r8,lr} + bxlt lr + cmp r0, #0x19 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + cmp r0, #0x1a + ldmia sp!, {r4-r8,lr} + bx lr +_020DA3C4: + ldr r4, [r8, #0xc] + ldrh r6, [r8, #0x10] + ldrh r5, [r4, #0x0] + bl WM_GetAID + add r1, r7, #0x800 + ldrh r1, [r1, #0x14] + cmp r6, r1 + beq _020DA3EC + cmp r6, #0x200 + movhi r6, #0x200 +_020DA3EC: + cmp r6, #0x4 + ldmccia sp!, {r4-r8,lr} + bxcc lr + mov r1, #0x1 + mov r0, r1, lsl r0 + ands r0, r5, r0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + add r0, r7, #0x800 + ldrh r1, [r0, #0x8] + mov r0, r4 + mov r2, r6 + add r1, r7, r1, lsl #0x9 + bl MIi_CpuCopy16 + add r1, r7, #0x800 + ldrh r0, [r1, #0x8] + ldrh r2, [r8, #0x1a] + add r0, r7, r0, lsl #0x1 + mov r2, r2, asr #0x1 + add r0, r0, #0x800 + strh r2, [r0, #0x0] + ldrh r0, [r1, #0x8] + add r0, r0, #0x1 + and r0, r0, #0x3 + strh r0, [r1, #0x8] + ldmia sp!, {r4-r8,lr} + bx lr +_020DA458: + add r0, r7, #0x800 + mov r1, #0x5 + strh r1, [r0, #0x1c] + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start WmDataSharingReceiveCallback_Parent +WmDataSharingReceiveCallback_Parent: ; 0x020DA46C + stmdb sp!, {r4-r6,lr} + ldr r4, [r0, #0x1c] + cmp r4, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldrh r1, [r0, #0x2] + cmp r1, #0x0 + bne _020DA5C4 + ldrh r1, [r0, #0x4] + cmp r1, #0x15 + bgt _020DA4D0 + cmp r1, #0x15 + bge _020DA504 + cmp r1, #0x9 + ldmgtia sp!, {r4-r6,lr} + bxgt lr + cmp r1, #0x7 + ldmltia sp!, {r4-r6,lr} + bxlt lr + cmp r1, #0x7 + beq _020DA528 + cmp r1, #0x9 + beq _020DA53C + ldmia sp!, {r4-r6,lr} + bx lr +_020DA4D0: + cmp r1, #0x1a + ldmgtia sp!, {r4-r6,lr} + bxgt lr + cmp r1, #0x19 + ldmltia sp!, {r4-r6,lr} + bxlt lr + cmp r1, #0x19 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + cmp r1, #0x1a + beq _020DA53C + ldmia sp!, {r4-r6,lr} + bx lr +_020DA504: + ldrh r1, [r0, #0x12] + ldr r2, [r0, #0xc] + mov r0, r4 + bl WmDataSharingReceiveData + mov r0, r4 + mov r1, #0x0 + bl WmDataSharingSendDataSet + ldmia sp!, {r4-r6,lr} + bx lr +_020DA528: + mov r0, r4 + mov r1, #0x0 + bl WmDataSharingSendDataSet + ldmia sp!, {r4-r6,lr} + bx lr +_020DA53C: + ldrh r5, [r0, #0x12] + mov r6, #0x1 + bl OS_DisableInterrupts + add r1, r4, #0x800 + ldrh lr, [r1, #0x8] + mvn r12, r6, lsl r5 + mov r3, lr, lsl #0x9 + ldrh r2, [r4, r3] + and r2, r2, r12 + strh r2, [r4, r3] + ldrh r1, [r1, #0x18] + cmp r1, #0x1 + bne _020DA58C + add r1, lr, #0x1 + and r1, r1, #0x3 + mov r1, r1, lsl #0x10 + mov r2, r1, lsr #0x7 + ldrh r1, [r4, r2] + and r1, r1, r12 + strh r1, [r4, r2] +_020DA58C: + bl OS_RestoreInterrupts + mov r0, r4 + mov r1, #0x0 + bl WmDataSharingSendDataSet + add r0, r4, #0x800 + ldrh r0, [r0, #0x18] + cmp r0, #0x1 + ldmneia sp!, {r4-r6,lr} + bxne lr + mov r0, r4 + mov r1, #0x0 + bl WmDataSharingSendDataSet + ldmia sp!, {r4-r6,lr} + bx lr +_020DA5C4: + add r0, r4, #0x800 + mov r1, #0x5 + strh r1, [r0, #0x1c] + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start WmDataSharingSetDataCallback +WmDataSharingSetDataCallback: ; 0x020DA5D8 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WMi_GetSystemWork + ldrh r2, [r5, #0xa] + ldr r1, _020DA6E4 ; =WmDataSharingReceiveCallback_Parent + add r0, r0, r2, lsl #0x2 + ldr r2, [r0, #0xcc] + ldr r4, [r0, #0x10c] + cmp r2, r1 + beq _020DA618 + ldr r0, _020DA6E8 ; =WmDataSharingReceiveCallback_Child + cmp r2, r0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr +_020DA618: + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, [r5, #0x20] + cmp r4, r0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + bl WM_GetAID + ldrh r1, [r5, #0x2] + cmp r1, #0x0 + bne _020DA694 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + add r1, r4, #0x800 + ldrh r0, [r1, #0xa] + ldrh r2, [r5, #0x1a] + add sp, sp, #0x4 + add r0, r4, r0, lsl #0x1 + mov r2, r2, asr #0x1 + add r0, r0, #0x800 + strh r2, [r0, #0x0] + ldrh r0, [r1, #0xa] + add r0, r0, #0x1 + and r0, r0, #0x3 + strh r0, [r1, #0xa] + ldmia sp!, {r4-r5,lr} + bx lr +_020DA694: + cmp r1, #0xa + bne _020DA6CC + cmp r0, #0x0 + addne r0, r4, #0x800 + ldrneh r1, [r0, #0xa] + add sp, sp, #0x4 + addne r1, r1, #0x3 + andne r1, r1, #0x3 + strneh r1, [r0, #0xa] + add r0, r4, #0x800 + mov r1, #0x4 + strh r1, [r0, #0x1c] + ldmia sp!, {r4-r5,lr} + bx lr +_020DA6CC: + add r0, r4, #0x800 + mov r1, #0x5 + strh r1, [r0, #0x1c] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DA6E4: .word WmDataSharingReceiveCallback_Parent +_020DA6E8: .word WmDataSharingReceiveCallback_Child + + arm_func_start WM_StepDataSharing +WM_StepDataSharing: ; 0x020DA6EC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r10, r0 + mov r9, r1 + mov r8, r2 + mov r0, #0x2 + mov r1, #0x9 + mov r2, #0xa + bl WMi_CheckStateEx +_020DA710: + .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0x12, 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x00, 0x00, 0x5A, 0xE3, 0x0C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x4F, 0xBD, 0x08 + .byte 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0x59, 0xE3, 0x0C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03 + .byte 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0x58, 0xE3, 0x0C, 0xD0, 0x8D, 0x02 + .byte 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0xC1, 0xF5, 0xFF, 0xEB + .byte 0x00, 0x40, 0xB0, 0xE1, 0x01, 0x00, 0x00, 0x1A, 0x9C, 0xF5, 0xFF, 0xEB, 0x00, 0x70, 0xA0, 0xE1 + .byte 0x02, 0x0B, 0x8A, 0xE2, 0xBC, 0x01, 0xD0, 0xE1, 0x05, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0x02 + .byte 0x01, 0x00, 0xA0, 0x03, 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0x00, 0x50, 0xE3 + .byte 0x04, 0x00, 0x00, 0x0A, 0x04, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0x12, 0x03, 0x00, 0xA0, 0x13 + .byte 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x54, 0xE3, 0x05, 0x40, 0xA0, 0xE3 + .byte 0x65, 0x00, 0x00, 0x1A, 0x00, 0x60, 0xA0, 0xE3, 0x06, 0xB0, 0xA0, 0xE1, 0x04, 0x00, 0x50, 0xE3 + .byte 0x2A, 0x00, 0x00, 0x1A, 0x02, 0x1B, 0x8A, 0xE2, 0x01, 0x30, 0xA0, 0xE3, 0xBC, 0x31, 0xC1, 0xE1 + .byte 0xBE, 0x50, 0xD1, 0xE1, 0xB8, 0x20, 0xD1, 0xE1, 0x84, 0x02, 0x9F, 0xE5, 0x07, 0x50, 0x05, 0xE0 + .byte 0x05, 0x58, 0xA0, 0xE1, 0x25, 0x58, 0xA0, 0xE1, 0x00, 0x50, 0x8D, 0xE5, 0xB6, 0x51, 0xD1, 0xE1 + .byte 0x03, 0x20, 0x82, 0xE2, 0x03, 0x20, 0x02, 0xE2, 0x04, 0x50, 0x8D, 0xE5, 0x08, 0x30, 0x8D, 0xE5 + .byte 0x02, 0x28, 0xA0, 0xE1, 0x22, 0x58, 0xA0, 0xE1, 0xB4, 0x31, 0xD1, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 + .byte 0x85, 0x24, 0x8A, 0xE0, 0x74, 0xFC, 0xFF, 0xEB, 0x07, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x1A + .byte 0x85, 0x00, 0x8A, 0xE0, 0x3C, 0x12, 0x9F, 0xE5, 0x02, 0x0B, 0x80, 0xE2, 0xB0, 0x10, 0xC0, 0xE1 + .byte 0x02, 0x0B, 0x8A, 0xE2, 0xBA, 0x10, 0xD0, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x03, 0x10, 0x01, 0xE2 + .byte 0xBA, 0x10, 0xC0, 0xE1, 0x09, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A + .byte 0x02, 0x00, 0x50, 0xE3, 0x02, 0x0B, 0x8A, 0x12, 0x04, 0x10, 0xA0, 0x11, 0xBC, 0x11, 0xC0, 0x11 + .byte 0x0C, 0xD0, 0x8D, 0x12, 0x01, 0x00, 0xA0, 0x13, 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x02, 0x0B, 0x8A, 0xE2, 0xBC, 0x20, 0xD0, 0xE1, 0xBA, 0x10, 0xD0, 0xE1, 0x01, 0x00, 0x52, 0xE1 + .byte 0x20, 0x00, 0x00, 0x0A, 0x82, 0x44, 0xA0, 0xE1, 0xB4, 0x30, 0x9A, 0xE1, 0x08, 0x10, 0xA0, 0xE1 + .byte 0x02, 0x2C, 0xA0, 0xE3, 0x01, 0x30, 0x83, 0xE3, 0xB4, 0x30, 0x8A, 0xE1, 0xBC, 0x00, 0xD0, 0xE1 + .byte 0x80, 0x04, 0x8A, 0xE0, 0x4D, 0xCE, 0xFF, 0xEB, 0x02, 0x1B, 0x8A, 0xE2, 0xBC, 0x00, 0xD1, 0xE1 + .byte 0x01, 0x60, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3, 0x80, 0x00, 0x8A, 0xE0, 0x02, 0x0B, 0x80, 0xE2 + .byte 0xB0, 0x00, 0xD0, 0xE1, 0xBA, 0x01, 0xC1, 0xE1, 0xBC, 0x00, 0xD1, 0xE1, 0x01, 0x00, 0x80, 0xE2 + .byte 0x03, 0x00, 0x00, 0xE2, 0xBC, 0x00, 0xC1, 0xE1, 0xB8, 0x01, 0xD1, 0xE1, 0x00, 0x00, 0x50, 0xE3 + .byte 0x07, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x57, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0xB8, 0x00, 0xD1, 0xE1 + .byte 0x80, 0x04, 0xA0, 0xE1, 0xB0, 0x00, 0x9A, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x06, 0xB0, 0xA0, 0x01 + .byte 0x00, 0x00, 0x00, 0x0A, 0x00, 0xB0, 0xA0, 0xE3, 0x0A, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 + .byte 0xE7, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x56, 0xE3, 0x4D, 0x00, 0x00, 0x0A, 0x0A, 0x00, 0xA0, 0xE1 + .byte 0x09, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x3E, 0xFE, 0xFF, 0xEB, 0x02, 0x0B, 0x8A, 0xE2 + .byte 0xB8, 0x01, 0xD0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x45, 0x00, 0x00, 0x1A, 0x0A, 0x00, 0xA0, 0xE1 + .byte 0x0B, 0x10, 0xA0, 0xE1, 0xDA, 0xFD, 0xFF, 0xEB, 0x41, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x50, 0xE3 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x02, 0x1B, 0x8A, 0x02, 0x01, 0x00, 0xA0, 0x03, 0xBC, 0x01, 0xC1, 0x01 + .byte 0x1A, 0x00, 0x00, 0x0A, 0x02, 0x1B, 0x8A, 0xE2, 0xBC, 0x20, 0xD1, 0xE1, 0xB8, 0x10, 0xD1, 0xE1 + .byte 0x01, 0x00, 0x52, 0xE1, 0x15, 0x00, 0x00, 0x0A, 0x82, 0x24, 0xA0, 0xE1, 0xB2, 0x10, 0x9A, 0xE1 + .byte 0x01, 0x30, 0x11, 0xE2, 0x01, 0x10, 0x81, 0x03, 0xB2, 0x10, 0x8A, 0x01, 0x0F, 0x00, 0x00, 0x0A + .byte 0x08, 0x10, 0xA0, 0xE1, 0x02, 0x00, 0x8A, 0xE0, 0x02, 0x2C, 0xA0, 0xE3, 0x0F, 0xCE, 0xFF, 0xEB + .byte 0x02, 0x2B, 0x8A, 0xE2, 0xBC, 0x10, 0xD2, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3 + .byte 0x81, 0x10, 0x8A, 0xE0, 0x02, 0x1B, 0x81, 0xE2, 0xB0, 0x10, 0xD1, 0xE1, 0xBA, 0x11, 0xC2, 0xE1 + .byte 0xBC, 0x10, 0xD2, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x03, 0x10, 0x01, 0xE2, 0xBC, 0x10, 0xC2, 0xE1 + .byte 0x00, 0x00, 0x50, 0xE3, 0x1E, 0x00, 0x00, 0x0A, 0x02, 0x0B, 0x8A, 0xE2, 0xBA, 0x10, 0xD0, 0xE1 + .byte 0xB0, 0x21, 0xD0, 0xE1, 0x09, 0x00, 0xA0, 0xE1, 0x81, 0x14, 0x8A, 0xE0, 0x20, 0x70, 0x81, 0xE2 + .byte 0x07, 0x10, 0xA0, 0xE1, 0xF9, 0xCD, 0xFF, 0xEB, 0x02, 0x3B, 0x8A, 0xE2, 0xBE, 0x10, 0xD3, 0xE1 + .byte 0x01, 0x50, 0xA0, 0xE3, 0x58, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x8D, 0xE5, 0xB6, 0x61, 0xD3, 0xE1 + .byte 0x0A, 0x10, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0x04, 0x60, 0x8D, 0xE5, 0x08, 0x50, 0x8D, 0xE5 + .byte 0xB0, 0x31, 0xD3, 0xE1, 0xF0, 0xFB, 0xFF, 0xEB, 0x02, 0x1B, 0x8A, 0xE2, 0xBA, 0x20, 0xD1, 0xE1 + .byte 0x02, 0x00, 0x50, 0xE3, 0x01, 0x20, 0x82, 0xE2, 0x03, 0x20, 0x02, 0xE2, 0xBA, 0x20, 0xC1, 0xE1 + .byte 0x03, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x13, 0xBC, 0x01, 0xC1, 0x11 + .byte 0x05, 0x40, 0xA0, 0x11, 0x04, 0x00, 0xA0, 0xE1, 0x0C, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xD8, 0xA5, 0x0D, 0x02, 0xFF, 0xFF, 0x00, 0x00 + + arm_func_start WM_EndDataSharing +WM_EndDataSharing: ; 0x020DAA6C + stmdb sp!, {r4,lr} + movs r4, r0 + moveq r0, #0x6 + ldmeqia sp!, {r4,lr} + bxeq lr + add r0, r4, #0x800 + ldrh r1, [r0, #0xe] + cmp r1, #0x0 + moveq r0, #0x3 + ldmeqia sp!, {r4,lr} + bxeq lr + ldrh r0, [r0, #0x16] + mov r1, #0x0 + mov r2, r1 + bl WM_SetPortCallback + add r1, r4, #0x800 + mov r0, #0x0 + strh r0, [r1, #0xe] + strh r0, [r1, #0x1c] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_StartDataSharing +WM_StartDataSharing: ; 0x020DAAC0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r10, r0 + mov r7, r1 + mov r6, r2 + mov r0, #0x2 + mov r1, #0x9 + mov r2, #0xa + mov r5, r3 + mov r9, #0x1 + bl WMi_CheckStateEx +_020DAAEC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x0C, 0xD0, 0x8D, 0x12, 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x5A, 0xE3 + .byte 0x0C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 + .byte 0x10, 0x00, 0x57, 0xE3, 0x0C, 0xD0, 0x8D, 0x22, 0x06, 0x00, 0xA0, 0x23, 0xF0, 0x4F, 0xBD, 0x28 + .byte 0x1E, 0xFF, 0x2F, 0x21, 0x00, 0x00, 0x56, 0xE3, 0x0C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03 + .byte 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0xCA, 0xF4, 0xFF, 0xEB, 0x00, 0x40, 0xB0, 0xE1 + .byte 0x01, 0x00, 0x00, 0x1A, 0xA5, 0xF4, 0xFF, 0xEB, 0x00, 0x90, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x82, 0x2E, 0xA0, 0xE3, 0xB8, 0xCD, 0xFF, 0xEB, 0x02, 0x0B, 0x8A, 0xE2 + .byte 0x00, 0x20, 0xA0, 0xE3, 0xB8, 0x20, 0xC0, 0xE1, 0xBA, 0x20, 0xC0, 0xE1, 0xBC, 0x20, 0xC0, 0xE1 + .byte 0xB0, 0x51, 0xC0, 0xE1, 0xB6, 0x71, 0xC0, 0xE1, 0xBE, 0x20, 0xC0, 0xE1, 0x01, 0x00, 0xA0, 0xE3 + .byte 0x30, 0x10, 0x9D, 0xE5, 0x10, 0x04, 0x86, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x00, 0x08, 0xA0, 0xE1 + .byte 0x01, 0x20, 0xA0, 0x13, 0x02, 0x1B, 0x8A, 0xE2, 0xB8, 0x21, 0xC1, 0xE1, 0x20, 0x08, 0xA0, 0xE1 + .byte 0xBE, 0x00, 0xC1, 0xE1, 0x2C, 0x0C, 0x00, 0xEB, 0x02, 0x3B, 0x8A, 0xE2, 0x95, 0x00, 0x01, 0xE0 + .byte 0xB2, 0x01, 0xC3, 0xE1, 0xB4, 0x11, 0xC3, 0xE1, 0xB4, 0x01, 0xD3, 0xE1, 0x7F, 0x0F, 0x50, 0xE3 + .byte 0x00, 0x00, 0xA0, 0x83, 0xBE, 0x00, 0xC3, 0x81, 0x0C, 0xD0, 0x8D, 0x82, 0x06, 0x00, 0xA0, 0x83 + .byte 0xF0, 0x4F, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0x04, 0x00, 0x80, 0xE2, 0xB4, 0x01, 0xC3, 0xE1 + .byte 0x01, 0x00, 0xA0, 0xE3, 0xBC, 0x01, 0xC3, 0xE1, 0x00, 0x00, 0x54, 0xE3, 0x44, 0x00, 0x00, 0x1A + .byte 0x01, 0x20, 0x89, 0xE3, 0x00, 0x40, 0xA0, 0xE3, 0xBE, 0x10, 0xD3, 0xE1, 0x84, 0x04, 0xA0, 0xE1 + .byte 0x01, 0x40, 0x84, 0xE2, 0x02, 0x10, 0x01, 0xE0, 0xB0, 0x10, 0x8A, 0xE1, 0x04, 0x00, 0x54, 0xE3 + .byte 0xF8, 0xFF, 0xFF, 0xBA, 0x10, 0x11, 0x9F, 0xE5, 0x07, 0x00, 0xA0, 0xE1, 0x0A, 0x20, 0xA0, 0xE1 + .byte 0xC3, 0xF8, 0xFF, 0xEB, 0x0A, 0x80, 0xA0, 0xE1, 0x00, 0x70, 0xA0, 0xE3, 0x02, 0x40, 0xA0, 0xE3 + .byte 0x01, 0x60, 0xA0, 0xE3, 0xF4, 0xB0, 0x9F, 0xE5, 0xF4, 0x50, 0x9F, 0xE5, 0x28, 0x00, 0x00, 0xEA + .byte 0x02, 0xCB, 0x8A, 0xE2, 0xB8, 0x20, 0xDC, 0xE1, 0x0B, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 + .byte 0x01, 0x20, 0x82, 0xE2, 0x03, 0x20, 0x02, 0xE2, 0xB8, 0x20, 0xCC, 0xE1, 0xBE, 0x30, 0xDC, 0xE1 + .byte 0x08, 0x20, 0xA0, 0xE1, 0x09, 0x30, 0x03, 0xE0, 0x03, 0x38, 0xA0, 0xE1, 0x23, 0x38, 0xA0, 0xE1 + .byte 0x00, 0x30, 0x8D, 0xE5, 0xB6, 0x31, 0xDC, 0xE1, 0x04, 0x30, 0x8D, 0xE5, 0x08, 0x60, 0x8D, 0xE5 + .byte 0xB4, 0x31, 0xDC, 0xE1, 0x58, 0xFB, 0xFF, 0xEB, 0x07, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A + .byte 0x87, 0x00, 0x8A, 0xE0, 0x02, 0x0B, 0x80, 0xE2, 0xB0, 0x50, 0xC0, 0xE1, 0x02, 0x0B, 0x8A, 0xE2 + .byte 0xBA, 0x10, 0xD0, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x03, 0x10, 0x01, 0xE2, 0xBA, 0x10, 0xC0, 0xE1 + .byte 0x09, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0x02, 0x00, 0x50, 0xE3 + .byte 0x02, 0x0B, 0x8A, 0x12, 0x05, 0x10, 0xA0, 0x13, 0xBC, 0x11, 0xC0, 0x11, 0x0C, 0xD0, 0x8D, 0x12 + .byte 0x01, 0x00, 0xA0, 0x13, 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x02, 0x8C, 0x88, 0xE2 + .byte 0x01, 0x70, 0x87, 0xE2, 0x02, 0x0B, 0x8A, 0xE2, 0xB8, 0x01, 0xD0, 0xE1, 0x01, 0x00, 0x50, 0xE3 + .byte 0x06, 0x00, 0xA0, 0x11, 0x04, 0x00, 0xA0, 0x01, 0x00, 0x00, 0x57, 0xE1, 0xCF, 0xFF, 0xFF, 0xBA + .byte 0x05, 0x00, 0x00, 0xEA, 0x2C, 0x10, 0x9F, 0xE5, 0x03, 0x40, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1 + .byte 0x0A, 0x20, 0xA0, 0xE1, 0xBA, 0x40, 0xC3, 0xE1, 0x85, 0xF8, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x0C, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x6C, 0xA4, 0x0D, 0x02 + .byte 0xD8, 0xA5, 0x0D, 0x02, 0xFF, 0xFF, 0x00, 0x00, 0x2C, 0xA3, 0x0D, 0x02 + + arm_func_start WM_EndKeySharing +WM_EndKeySharing: ; 0x020DAD3C + ldr ip, _020DAD44 ; =WM_EndDataSharing + bx r12 + .balign 4 +_020DAD44: .word WM_EndDataSharing + + arm_func_start WM_StartKeySharing +WM_StartKeySharing: ; 0x020DAD48 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020DAD70 ; =0x0000FFFF + mov r12, #0x1 + mov r3, #0x2 + str r12, [sp, #0x0] + bl WM_StartDataSharing + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DAD70: .word 0x0000FFFF + + arm_func_start WM_SetEntry +WM_SetEntry: ; 0x020DAD74 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x9 + bl WMi_CheckStateEx +_020DAD94: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18 + .byte 0x1E, 0xFF, 0x2F, 0x11, 0x05, 0x10, 0xA0, 0xE1, 0x21, 0x00, 0xA0, 0xE3, 0xFB, 0xF5, 0xFF, 0xEB + .byte 0x04, 0x20, 0xA0, 0xE1, 0x21, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0xA0, 0xE3, 0xAC, 0xF5, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_MeasureChannel +WM_MeasureChannel: ; 0x020DADD4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl WMi_GetSystemWork + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020DADFC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x0C, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x07, 0x10, 0xA0, 0xE1 + .byte 0x1E, 0x00, 0xA0, 0xE3, 0xE1, 0xF5, 0xFF, 0xEB, 0xB0, 0x22, 0xDD, 0xE1, 0x1E, 0x30, 0xA0, 0xE3 + .byte 0x00, 0x00, 0x8D, 0xE2, 0x0A, 0x10, 0xA0, 0xE3, 0xB0, 0x30, 0xCD, 0xE1, 0xB2, 0x60, 0xCD, 0xE1 + .byte 0xB4, 0x50, 0xCD, 0xE1, 0xB6, 0x40, 0xCD, 0xE1, 0xB8, 0x20, 0xCD, 0xE1, 0x6E, 0xF5, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x0C, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_SetLifeTime +WM_SetLifeTime: ; 0x020DAE54 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl WMi_CheckIdle +_020DAE70: + .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x07, 0x10, 0xA0, 0xE1, 0x1D, 0x00, 0xA0, 0xE3, 0xC4, 0xF5, 0xFF, 0xEB, 0xB0, 0xC2, 0xDD, 0xE1 + .byte 0x00, 0x40, 0x8D, 0xE5, 0x06, 0x20, 0xA0, 0xE1, 0x05, 0x30, 0xA0, 0xE1, 0x1D, 0x00, 0xA0, 0xE3 + .byte 0x04, 0x10, 0xA0, 0xE3, 0x04, 0xC0, 0x8D, 0xE5, 0x71, 0xF5, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x02, 0x00, 0xA0, 0x03, 0x0C, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_SetBeaconIndication +WM_SetBeaconIndication: ; 0x020DAEC0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + + arm_func_start FUN_020daecc +FUN_020daecc: ; 0x020DAECC + mov r4, r1 + bl WMi_CheckIdle +_020DAED4: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18 + .byte 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x54, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x54, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0x12, 0x06, 0x00, 0xA0, 0x13, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 + .byte 0x05, 0x10, 0xA0, 0xE1, 0x19, 0x00, 0xA0, 0xE3, 0xA4, 0xF5, 0xFF, 0xEB, 0x04, 0x20, 0xA0, 0xE1 + .byte 0x19, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0xA0, 0xE3, 0x55, 0xF5, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x02, 0x00, 0xA0, 0x03, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_SetGameInfo +WM_SetGameInfo: ; 0x020DAF30 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x9 + mov r4, r3 + bl WMi_CheckStateEx +_020DAF58: + .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0x12 + .byte 0xF0, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x56, 0xE3, 0x0C, 0xD0, 0x8D, 0x02 + .byte 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x70, 0x00, 0x55, 0xE3 + .byte 0x0C, 0xD0, 0x8D, 0x82, 0x06, 0x00, 0xA0, 0x83, 0xF0, 0x40, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81 + .byte 0x5C, 0x10, 0x9F, 0xE5, 0x06, 0x00, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x8F, 0xCC, 0xFF, 0xEB + .byte 0x4C, 0x00, 0x9F, 0xE5, 0x05, 0x10, 0xA0, 0xE1, 0x64, 0xC4, 0xFF, 0xEB, 0x07, 0x10, 0xA0, 0xE1 + .byte 0x18, 0x00, 0xA0, 0xE3, 0x79, 0xF5, 0xFF, 0xEB, 0xB0, 0x02, 0xDD, 0xE1, 0x00, 0x40, 0x8D, 0xE5 + .byte 0x24, 0x10, 0xDD, 0xE5, 0x04, 0x00, 0x8D, 0xE5, 0x24, 0x20, 0x9F, 0xE5, 0x08, 0x10, 0x8D, 0xE5 + .byte 0x05, 0x30, 0xA0, 0xE1, 0x18, 0x00, 0xA0, 0xE3, 0x05, 0x10, 0xA0, 0xE3, 0x24, 0xF5, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x0C, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xC0, 0x68, 0x1D, 0x02 + + arm_func_start WM_SetWEPKeyEx +WM_SetWEPKeyEx: ; 0x020DAFF8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl WMi_CheckIdle +_020DB014: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18 + .byte 0x1E, 0xFF, 0x2F, 0x11, 0x03, 0x00, 0x56, 0xE3, 0x04, 0xD0, 0x8D, 0x82, 0x06, 0x00, 0xA0, 0x83 + .byte 0xF0, 0x40, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0x00, 0x00, 0x56, 0xE3, 0x07, 0x00, 0x00, 0x0A + .byte 0x00, 0x00, 0x54, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08 + .byte 0x1E, 0xFF, 0x2F, 0x01, 0x04, 0x00, 0xA0, 0xE1, 0x50, 0x10, 0xA0, 0xE3, 0x37, 0xC4, 0xFF, 0xEB + .byte 0x07, 0x10, 0xA0, 0xE1, 0x27, 0x00, 0xA0, 0xE3, 0x4C, 0xF5, 0xFF, 0xEB, 0x06, 0x20, 0xA0, 0xE1 + .byte 0x04, 0x30, 0xA0, 0xE1, 0x27, 0x00, 0xA0, 0xE3, 0x03, 0x10, 0xA0, 0xE3, 0x00, 0x50, 0x8D, 0xE5 + .byte 0xFB, 0xF4, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start WM_SetWEPKeyEx2 +WM_SetWEPKeyEx2: ; 0x020DB098 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl WMi_CheckIdle +_020DB0AC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x70, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x03, 0x00, 0x55, 0xE3, 0x06, 0x00, 0xA0, 0x83 + .byte 0x70, 0x40, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0x00, 0x00, 0x55, 0xE3, 0x06, 0x00, 0x00, 0x0A + .byte 0x00, 0x00, 0x54, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 + .byte 0x04, 0x00, 0xA0, 0xE1, 0x50, 0x10, 0xA0, 0xE3, 0x14, 0xC4, 0xFF, 0xEB, 0x06, 0x10, 0xA0, 0xE1 + .byte 0x14, 0x00, 0xA0, 0xE3, 0x29, 0xF5, 0xFF, 0xEB, 0x05, 0x20, 0xA0, 0xE1, 0x04, 0x30, 0xA0, 0xE1 + .byte 0x14, 0x00, 0xA0, 0xE3, 0x02, 0x10, 0xA0, 0xE3, 0xD9, 0xF4, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x02, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CTRDG_CheckEnabled +CTRDG_CheckEnabled: ; 0x020DB11C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CTRDG_IsOptionCartridge +_020DB128: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12 + .byte 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x1C, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0xBF, 0xC9, 0xFF, 0xEB + .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CTRDG_Enable +CTRDG_Enable: ; 0x020DB15C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020DB1AC ; =0x021D6940 + mov r4, r0 + str r5, [r1, #0x0] + bl CTRDG_IsOptionCartridge +_020DB17C: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x04, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x55, 0xE3, 0x01, 0x1A, 0xA0, 0x13, 0x05, 0x1A, 0xA0, 0x03 + .byte 0x0F, 0x0A, 0xA0, 0xE3, 0x0F, 0xC6, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x60, 0xC8, 0xFF, 0xEB + .byte 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020DB1AC: .word 0x021D6940 + + arm_func_start CTRDG_IsEnabled +CTRDG_IsEnabled: ; 0x020DB1B0 + ldr r0, _020DB1BC ; =0x021D6940 + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020DB1BC: .word 0x021D6940 + + arm_func_start CTRDGi_AccessCommon +CTRDGi_AccessCommon: ; 0x020DB1C0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl CTRDG_IsExisting +_020DB1DC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0x02, 0x00, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 + .byte 0xC9, 0xFF, 0xFF, 0xEB, 0xC0, 0x00, 0x9F, 0xE5, 0xB2, 0x00, 0xD0, 0xE1, 0x01, 0xBC, 0xFF, 0xEB + .byte 0x21, 0x00, 0x54, 0xE3, 0x0D, 0x00, 0x00, 0x8A, 0x21, 0x00, 0x54, 0xE3, 0x17, 0x00, 0x00, 0x2A + .byte 0x11, 0x00, 0x54, 0xE3, 0x06, 0x00, 0x00, 0x8A, 0x10, 0x00, 0x54, 0xE3, 0x1C, 0x00, 0x00, 0x3A + .byte 0x10, 0x00, 0x54, 0xE3, 0x19, 0x00, 0x00, 0x0A, 0x11, 0x00, 0x54, 0xE3, 0x0B, 0x00, 0x00, 0x0A + .byte 0x17, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x54, 0xE3, 0xB0, 0x60, 0xC7, 0x01, 0x14, 0x00, 0x00, 0xEA + .byte 0x40, 0x00, 0x54, 0xE3, 0x02, 0x00, 0x00, 0x8A, 0x40, 0x00, 0x54, 0xE3, 0x00, 0x60, 0x87, 0x05 + .byte 0x0F, 0x00, 0x00, 0xEA, 0x41, 0x00, 0x54, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0x0C, 0x00, 0x00, 0xEA + .byte 0x00, 0x00, 0x55, 0xE3, 0x00, 0x00, 0xD7, 0x15, 0x00, 0x00, 0xC5, 0x15, 0x08, 0x00, 0x00, 0xEA + .byte 0x00, 0x00, 0x55, 0xE3, 0xB0, 0x00, 0xD7, 0x11, 0xB0, 0x00, 0xC5, 0x11, 0x04, 0x00, 0x00, 0xEA + .byte 0x00, 0x00, 0x55, 0xE3, 0x00, 0x00, 0x97, 0x15, 0x00, 0x00, 0x85, 0x15, 0x00, 0x00, 0x00, 0xEA + .byte 0x00, 0x60, 0xC7, 0xE5, 0x20, 0x00, 0x9F, 0xE5, 0xB2, 0x00, 0xD0, 0xE1, 0x7C, 0xBB, 0xFF, 0xEB + .byte 0xF9, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x13, 0x00, 0x00, 0xA0, 0x03 + .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x44, 0x69, 0x1D, 0x02 + + arm_func_start CTRDG_Read32 +CTRDG_Read32: ; 0x020DB2C0 + ldr ip, _020DB2D4 ; =CTRDGi_AccessCommon + mov r2, r1 + mov r1, #0x0 + mov r3, #0x41 + bx r12 + .balign 4 +_020DB2D4: .word CTRDGi_AccessCommon + + arm_func_start CTRDGi_CopyCommon +CTRDGi_CopyCommon: ; 0x020DB2D8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl CTRDG_IsExisting +_020DB2F4: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x00, 0x00, 0xA0, 0x03 + .byte 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x83, 0xFF, 0xFF, 0xEB, 0x18, 0x01, 0x9F, 0xE5 + .byte 0xB2, 0x00, 0xD0, 0xE1, 0xBB, 0xBB, 0xFF, 0xEB, 0x18, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x10, 0xE2 + .byte 0x04, 0x00, 0x00, 0x1A, 0x07, 0x00, 0xA0, 0xE1, 0x9A, 0xC9, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1 + .byte 0x04, 0x10, 0xA0, 0xE1, 0x88, 0xC3, 0xFF, 0xEB, 0x18, 0x00, 0x9D, 0xE5, 0x11, 0x00, 0x50, 0xE3 + .byte 0x09, 0x00, 0x00, 0x8A, 0x10, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x3A, 0x10, 0x00, 0x50, 0xE3 + .byte 0x0D, 0x00, 0x00, 0x0A, 0x11, 0x00, 0x50, 0xE3, 0x17, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x00, 0xEA + .byte 0x01, 0x00, 0x50, 0xE3, 0x1E, 0x00, 0x00, 0x0A, 0x25, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x50, 0xE3 + .byte 0x02, 0x00, 0x00, 0x8A, 0x20, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x0A, 0x20, 0x00, 0x00, 0xEA + .byte 0x21, 0x00, 0x50, 0xE3, 0x11, 0x00, 0x00, 0x0A, 0x1D, 0x00, 0x00, 0xEA, 0x07, 0x00, 0xA0, 0xE1 + .byte 0x06, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x04, 0x30, 0xA0, 0xE1, 0x1A, 0xCA, 0xFF, 0xEB + .byte 0x17, 0x00, 0x00, 0xEA, 0x07, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1 + .byte 0x04, 0x30, 0xA0, 0xE1, 0x32, 0xCA, 0xFF, 0xEB, 0x11, 0x00, 0x00, 0xEA, 0x06, 0x00, 0xA0, 0xE1 + .byte 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x84, 0xCB, 0xFF, 0xEB, 0x0C, 0x00, 0x00, 0xEA + .byte 0x06, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x8B, 0xCB, 0xFF, 0xEB + .byte 0x07, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x54, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x04, 0x00, 0x00, 0x9A + .byte 0x01, 0x00, 0xD6, 0xE4, 0x01, 0x10, 0x81, 0xE2, 0x04, 0x00, 0x51, 0xE1, 0x01, 0x00, 0xC5, 0xE4 + .byte 0xFA, 0xFF, 0xFF, 0x3A, 0x20, 0x00, 0x9F, 0xE5, 0xB2, 0x00, 0xD0, 0xE1, 0x20, 0xBB, 0xFF, 0xEB + .byte 0x9D, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x13, 0x00, 0x00, 0xA0, 0x03 + .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x44, 0x69, 0x1D, 0x02 + + arm_func_start CTRDG_CpuCopy32 +CTRDG_CpuCopy32: ; 0x020DB430 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r3, r2 + mov r12, #0x21 + mov r1, r0 + mov r2, lr + mov r0, #0x0 + str r12, [sp, #0x0] + bl CTRDGi_CopyCommon + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_CpuCopy16 +CTRDG_CpuCopy16: ; 0x020DB464 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r3, r2 + mov r12, #0x11 + mov r1, r0 + mov r2, lr + mov r0, #0x0 + str r12, [sp, #0x0] + bl CTRDGi_CopyCommon + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_CpuCopy8 +CTRDG_CpuCopy8: ; 0x020DB498 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r3, r2 + cmp lr, #0x8000000 + blo _020DB4DC + ldr r2, _020DB500 ; =0x0A010000 + cmp lr, r2 + bhs _020DB4DC + mov r12, #0x1 + mov r2, r0 + mov r0, #0x0 + str r12, [sp, #0x0] + bl CTRDGi_CopyCommon + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020DB4DC: + mov r12, #0x1 + mov r1, r0 + mov r2, lr + mov r0, #0x0 + str r12, [sp, #0x0] + bl CTRDGi_CopyCommon + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DB500: .word 0x0A010000 + + arm_func_start CTRDGi_SendtoPxi +CTRDGi_SendtoPxi: ; 0x020DB504 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r1, r7 + mov r0, #0xd + mov r2, #0x0 + bl PXI_SendWordByFifo +_020DB520: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 + .byte 0x01, 0x60, 0xA0, 0xE3, 0x0D, 0x50, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3, 0x06, 0x00, 0xA0, 0xE1 + .byte 0x2A, 0x94, 0xFC, 0xFB, 0x05, 0x00, 0xA0, 0xE1, 0x07, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1 + .byte 0xE2, 0xD1, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0xF7, 0xFF, 0xFF, 0x1A, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CTRDGi_UnlockByProcessor +CTRDGi_UnlockByProcessor: ; 0x020DB568 + stmdb sp!, {r4,lr} + mov r4, r1 + ldr r1, [r4, #0x0] + cmp r1, #0x0 + bne _020DB580 + bl OS_UnlockCartridge +_020DB580: + ldr r0, [r4, #0x4] + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CTRDGi_LockByProcessor +CTRDGi_LockByProcessor: ; 0x020DB590 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + ldr r5, _020DB60C ; =0x027FFFE8 + mov r4, #0x1 + bl OS_DisableInterrupts + str r0, [r6, #0x4] + mov r0, r5 + bl OS_ReadOwnerOfLockWord + and r0, r0, #0x40 + str r0, [r6, #0x0] + ldr r0, [r6, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + mov r0, r7 + bl OS_TryLockCartridge +_020DB5DC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x04, 0x00, 0x96, 0xE5 + .byte 0x4B, 0xC7, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0xFC, 0x93, 0xFC, 0xFB, 0xE9, 0xFF, 0xFF, 0xEA + .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020DB60C: .word 0x027FFFE8 + + arm_func_start CTRDGi_RestoreAccessCycle +CTRDGi_RestoreAccessCycle: ; 0x020DB610 + ldr r3, _020DB640 ; =0x04000204 + ldr r2, [r0, #0x0] + ldrh r1, [r3, #0x0] + bic r1, r1, #0xc + orr r1, r1, r2, lsl #0x2 + strh r1, [r3, #0x0] + ldrh r1, [r3, #0x0] + ldr r2, [r0, #0x4] + bic r0, r1, #0x10 + orr r0, r0, r2, lsl #0x4 + strh r0, [r3, #0x0] + bx lr + .balign 4 +_020DB640: .word 0x04000204 + + arm_func_start CTRDGi_ChangeLatestAccessCycle +CTRDGi_ChangeLatestAccessCycle: ; 0x020DB644 + ldr r2, _020DB688 ; =0x04000204 + ldrh r1, [r2, #0x0] + and r1, r1, #0xc + mov r1, r1, asr #0x2 + str r1, [r0, #0x0] + ldrh r1, [r2, #0x0] + and r1, r1, #0x10 + mov r1, r1, asr #0x4 + str r1, [r0, #0x4] + ldrh r0, [r2, #0x0] + bic r0, r0, #0xc + orr r0, r0, #0xc + strh r0, [r2, #0x0] + ldrh r0, [r2, #0x0] + bic r0, r0, #0x10 + strh r0, [r2, #0x0] + bx lr + .balign 4 +_020DB688: .word 0x04000204 + + arm_func_start CTRDG_IsExisting +CTRDG_IsExisting: + stmdb sp!, {r4,lr} + sub sp, sp, #0x10 + ldr r2, _020DB798 ; =0x027FFC30 + ldr r0, _020DB79C ; =0x0000FFFF + ldrh r1, [r2, #0x0] + mov r4, #0x1 + cmp r1, r0 + addeq sp, sp, #0x10 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldrb r0, [r2, #0x5] + mov r0, r0, lsl #0x1e + mov r0, r0, lsr #0x1f + cmp r0, #0x1 + addeq sp, sp, #0x10 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r0, _020DB7A0 ; =0x021D6944 + add r1, sp, #0x0 + ldrh r0, [r0, #0x2] + bl CTRDGi_LockByProcessor + add r0, sp, #0x8 + bl CTRDGi_ChangeLatestAccessCycle + mov r0, #0x8000000 + ldrb r2, [r0, #0xb2] + cmp r2, #0x96 + bne _020DB714 + ldr r1, _020DB798 ; =0x027FFC30 + ldrh r0, [r0, #0xbe] + ldrh r1, [r1, #0x0] + cmp r1, r0 + bne _020DB75C +_020DB714: + cmp r2, #0x96 + beq _020DB734 + ldr r1, _020DB798 ; =0x027FFC30 + ldr r0, _020DB7A4 ; =0x0801FFFE + ldrh r1, [r1, #0x0] + ldrh r0, [r0, #0x0] + cmp r1, r0 + bne _020DB75C +_020DB734: + ldr r2, _020DB798 ; =0x027FFC30 + mov r0, #0x8000000 + ldr r1, [r2, #0x8] + ldr r0, [r0, #0xac] + cmp r1, r0 + beq _020DB770 + ldrb r0, [r2, #0x5] + mov r0, r0, lsl #0x1f + movs r0, r0, lsr #0x1f + beq _020DB770 +_020DB75C: + ldr r1, _020DB798 ; =0x027FFC30 + mov r4, #0x0 + ldrb r0, [r1, #0x5] + orr r0, r0, #0x2 + strb r0, [r1, #0x5] +_020DB770: + add r0, sp, #0x8 + bl CTRDGi_RestoreAccessCycle + ldr r0, _020DB7A0 ; =0x021D6944 + add r1, sp, #0x0 + ldrh r0, [r0, #0x2] + bl CTRDGi_UnlockByProcessor + mov r0, r4 + add sp, sp, #0x10 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020DB798: .word 0x027FFC30 +_020DB79C: .word 0x0000FFFF +_020DB7A0: .word 0x021D6944 +_020DB7A4: .word 0x0801FFFE + + arm_func_start CTRDG_IsPulledOut +CTRDG_IsPulledOut: ; 0x020DB7A8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020DB800 ; =0x027FFC30 + ldr r0, _020DB804 ; =0x0000FFFF + ldrh r1, [r2, #0x0] + cmp r1, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {lr} + bxeq lr + ldrb r0, [r2, #0x5] + mov r0, r0, lsl #0x1e + movs r0, r0, lsr #0x1f + bne _020DB7E4 + bl CTRDG_IsExisting +_020DB7E4: + ldr r0, _020DB800 ; =0x027FFC30 + ldrb r0, [r0, #0x5] + mov r0, r0, lsl #0x1e + mov r0, r0, lsr #0x1f + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DB800: .word 0x027FFC30 +_020DB804: .word 0x0000FFFF + + arm_func_start CTRDGi_GetAgbMakerCodeAtInit +CTRDGi_GetAgbMakerCodeAtInit: ; 0x020DB808 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl CTRDGi_IsAgbCartridgeAtInit +_020DB814: + .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x9F, 0x15, 0xB6, 0x40, 0xD0, 0x11 + .byte 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x30, 0xFC, 0x7F, 0x02 + + arm_func_start CTRDG_GetAgbMakerCode +CTRDG_GetAgbMakerCode: ; 0x020DB830 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl CTRDG_IsExisting +_020DB83C: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x01, 0x00, 0x00, 0x0A, 0xEF, 0xFF, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1 + .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CTRDGi_GetAgbGameCodeAtInit +CTRDGi_GetAgbGameCodeAtInit: ; 0x020DB858 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl CTRDGi_IsAgbCartridgeAtInit +_020DB864: + .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x9F, 0x15, 0x08, 0x40, 0x90, 0x15 + .byte 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x30, 0xFC, 0x7F, 0x02 + + arm_func_start CTRDG_GetAgbGameCode +CTRDG_GetAgbGameCode: ; 0x020DB880 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl CTRDG_IsExisting +_020DB88C: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x01, 0x00, 0x00, 0x0A, 0xEF, 0xFF, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1 + .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CTRDGi_IsAgbCartridgeAtInit +CTRDGi_IsAgbCartridgeAtInit: + ldr r0, _020DB8BC ; =0x027FFC30 + ldrb r0, [r0, #0x5] + mov r0, r0, lsl #0x1f + mov r0, r0, lsr #0x1f + bx lr + .balign 4 +_020DB8BC: .word 0x027FFC30 + + arm_func_start CTRDG_IsOptionCartridge +CTRDG_IsOptionCartridge: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CTRDG_IsExisting +_020DB8CC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x05, 0x00, 0x00, 0x0A, 0xF3, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02 + .byte 0x01, 0x00, 0xA0, 0x03, 0x00, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CTRDG_IsAgbCartridge +CTRDG_IsAgbCartridge: ; 0x020DB8FC + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CTRDG_IsExisting +_020DB908: + .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A + .byte 0xE4, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x01, 0x00, 0xA0, 0x13 + .byte 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CTRDGi_InitCommon +CTRDGi_InitCommon: ; 0x020DB938 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020DB970 ; =0x021D6944 + mov r3, #0x0 + ldr r2, _020DB974 ; =0x05000001 + add r0, sp, #0x0 + str r3, [sp, #0x0] + blx FUN_020002FE + bl OS_GetLockID + ldr r1, _020DB970 ; =0x021D6944 + strh r0, [r1, #0x2] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DB970: .word 0x021D6944 +_020DB974: .word 0x05000001 + + arm_func_start CTRDGi_CallbackForSetPhi +CTRDGi_CallbackForSetPhi: ; 0x020DB978 + ldr r0, _020DB988 ; =0x021D694C + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + .balign 4 +_020DB988: .word 0x021D694C + + arm_func_start CTRDG_TerminateForPulledOut +CTRDG_TerminateForPulledOut: ; 0x020DB98C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, #0x2 + bl CTRDGi_SendtoPxi + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_PulledOutCallback +CTRDGi_PulledOutCallback: ; 0x020DB9AC + stmdb sp!, {lr} + sub sp, sp, #0x4 + and r0, r1, #0x3f + cmp r0, #0x11 + bne _020DBA14 + ldr r0, _020DBA24 ; =0x021D6954 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r1, _020DBA28 ; =0x021D6958 + mov r0, #0x0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + beq _020DB9F0 + blx r1 +_020DB9F0: + cmp r0, #0x0 + beq _020DB9FC + bl CTRDG_TerminateForPulledOut +_020DB9FC: + ldr r0, _020DBA24 ; =0x021D6954 + mov r1, #0x1 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020DBA14: + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DBA24: .word 0x021D6954 +_020DBA28: .word 0x021D6958 + + arm_func_start CTRDGi_CallbackForInitModuleInfo +CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C + stmdb sp!, {lr} + sub sp, sp, #0x4 + and r0, r1, #0x3f + cmp r0, #0x1 + ldreq r0, _020DBA64 ; =0x021D6944 + moveq r1, #0x1 + streqh r1, [r0, #0x0] + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DBA64: .word 0x021D6944 + + arm_func_start CTRDGi_InitModuleInfo +CTRDGi_InitModuleInfo: ; 0x020DBA68 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x14 + ldr r0, _020DBC50 ; =0x021D6948 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addne sp, sp, #0x14 + ldmneia sp!, {r4-r7,lr} + bxne lr + ldr r1, _020DBC54 ; =0x04000300 + mov r2, #0x1 + str r2, [r0, #0x0] + ldrh r0, [r1, #0x0] + ands r0, r0, #0x1 + addeq sp, sp, #0x14 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, #0x40000 + bl OS_SetIrqMask + ldr r3, _020DBC58 ; =0x04000208 + mov r2, #0x1 + ldrh r4, [r3, #0x0] + ldr r1, _020DBC5C ; =0x021D6944 + mov r6, r0 + strh r2, [r3, #0x0] + ldrh r0, [r1, #0x2] + add r1, sp, #0x0 + bl CTRDGi_LockByProcessor + ldr r1, _020DBC60 ; =0x04000204 + add r0, sp, #0x8 + ldrh r1, [r1, #0x0] + and r1, r1, #0x8000 + mov r5, r1, asr #0xf + bl CTRDGi_ChangeLatestAccessCycle + ldr r3, _020DBC60 ; =0x04000204 + ldr r0, _020DBC64 ; =0x021D6960 + ldrh r2, [r3, #0x0] + add r0, r0, #0x80 + mov r1, #0x40 + bic r2, r2, #0x8000 + strh r2, [r3, #0x0] + bl DC_InvalidateRange + ldr r2, _020DBC64 ; =0x021D6960 + ldr r1, _020DBC68 ; =0x08000080 + mov r0, #0x1 + mov r3, #0x40 + add r2, r2, #0x80 + bl MI_DmaCopy16 + ldr r2, _020DBC60 ; =0x04000204 + add r0, sp, #0x8 + ldrh r1, [r2, #0x0] + bic r1, r1, #0x8000 + orr r1, r1, r5, lsl #0xf + strh r1, [r2, #0x0] + bl CTRDGi_RestoreAccessCycle + ldr r0, _020DBC5C ; =0x021D6944 + add r1, sp, #0x0 + ldrh r0, [r0, #0x2] + bl CTRDGi_UnlockByProcessor + ldr r0, _020DBC6C ; =0x027FFF9B + ldrb r0, [r0, #0x0] + cmp r0, #0x0 + bne _020DBB70 + ldr r0, _020DBC70 ; =0x027FFF9A + ldrb r0, [r0, #0x0] + cmp r0, #0x0 + bne _020DBBDC +_020DBB70: + ldr r2, _020DBC64 ; =0x021D6960 + ldr r0, _020DBC74 ; =0x027FFC30 + ldrh r1, [r2, #0xbe] + mov r3, #0x0 + strh r1, [r0, #0x0] +_020DBB84: + add r0, r2, r3 + ldrb r1, [r0, #0xb5] + add r0, r3, #0x2700000 + add r0, r0, #0xff000 + add r3, r3, #0x1 + strb r1, [r0, #0xC32] + cmp r3, #0x3 + blt _020DBB84 + ldrh r0, [r2, #0xb0] + ldr r1, _020DBC74 ; =0x027FFC30 + strh r0, [r1, #0x6] + ldr r0, [r2, #0xac] + str r0, [r1, #0x8] + bl CTRDG_IsExisting +_020DBBBC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x01, 0x20, 0xA0, 0x13, 0xA0, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0x03, 0x00, 0x20, 0xC1, 0xE5 + .byte 0x98, 0x00, 0x9F, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0xC0, 0xE5 +_020DBBDC: + ldr r0, _020DBC78 ; =0xFFFF0020 + ldr r1, _020DBC7C ; =0x021D6964 + mov r2, #0x9c + bl MIi_CpuCopy32 + bl DC_FlushAll + ldr r0, _020DBC64 ; =0x021D6960 + add r0, r0, #0xfe000000 + mov r0, r0, lsr #0x5 + mov r0, r0, lsl #0x6 + orr r0, r0, #0x1 + bl CTRDGi_SendtoPxi + ldr r5, _020DBC5C ; =0x021D6944 + ldrh r0, [r5, #0x0] + cmp r0, #0x1 + beq _020DBC30 + mov r7, #0x1 +_020DBC1C: + mov r0, r7 + blx FUN_020005F2 + ldrh r0, [r5, #0x0] + cmp r0, #0x1 + bne _020DBC1C +_020DBC30: + ldr r2, _020DBC58 ; =0x04000208 + mov r0, r6 + ldrh r1, [r2, #0x0] + strh r4, [r2, #0x0] + bl OS_SetIrqMask + add sp, sp, #0x14 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DBC50: .word 0x021D6948 +_020DBC54: .word 0x04000300 +_020DBC58: .word 0x04000208 +_020DBC5C: .word 0x021D6944 +_020DBC60: .word 0x04000204 +_020DBC64: .word 0x021D6960 +_020DBC68: .word 0x08000080 +_020DBC6C: .word 0x027FFF9B +_020DBC70: .word 0x027FFF9A +_020DBC74: .word 0x027FFC30 +_020DBC78: .word 0xFFFF0020 +_020DBC7C: .word 0x021D6964 + + arm_func_start CTRDG_Init +CTRDG_Init: ; 0x020DBC80 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020DBD34 ; =0x021D6950 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + mov r1, #0x1 + str r1, [r0, #0x0] + bl CTRDGi_InitCommon + ldr r0, _020DBD38 ; =0x021D6954 + mov r1, #0x0 + str r1, [r0, #0x0] + bl PXI_Init + mov r5, #0xd + mov r4, #0x1 + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady +_020DBCD0: + .byte 0x00, 0x00, 0x50, 0xE3, 0xFA, 0xFF, 0xFF, 0x0A, 0x5C, 0x10, 0x9F, 0xE5, 0x0D, 0x00, 0xA0, 0xE3 + .byte 0x35, 0xD0, 0xFF, 0xEB, 0x5F, 0xFF, 0xFF, 0xEB, 0x0D, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x31, 0xD0, 0xFF, 0xEB, 0x44, 0x10, 0x9F, 0xE5, 0x0D, 0x00, 0xA0, 0xE3, 0x2E, 0xD0, 0xFF, 0xEB + .byte 0x3C, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x38, 0x00, 0x9F, 0xE5, 0x00, 0x20, 0x81, 0xE5 + .byte 0xAD, 0x07, 0x00, 0xEB, 0x30, 0x10, 0x9F, 0xE5, 0x11, 0x00, 0xA0, 0xE3, 0x26, 0xD0, 0xFF, 0xEB + .byte 0x00, 0x00, 0xA0, 0xE3, 0x0C, 0xFD, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 +_020DBD34: .word 0x021D6950 +_020DBD38: .word 0x021D6954 +_020DBD3C: + .byte 0x2C, 0xBA, 0x0D, 0x02 + .byte 0xAC, 0xB9, 0x0D, 0x02, 0x58, 0x69, 0x1D, 0x02, 0x20, 0x6A, 0x1D, 0x02, 0x78, 0xB9, 0x0D, 0x02 + + arm_func_start CTRDG_IdentifyAgbBackup +CTRDG_IdentifyAgbBackup: ; 0x020DBD50 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + cmp r7, #0x1 + mov r0, #0x1 + bhi _020DBEAC + bl OS_GetLockID + ldr r1, _020DBED8 ; =0x021D6B0C + strh r0, [r1, #0x0] + ldrh r0, [r1, #0x0] + bl OS_LockCartridge + ldr r6, _020DBEDC ; =0x04000204 + ldr r1, _020DBEE0 ; =0x02103FE4 + ldrh r3, [r6, #0x0] + ldrh r2, [r6, #0x0] + ldr r0, _020DBEE4 ; =0x021D6B28 + and r4, r3, #0x3 + bic r2, r2, #0x3 + orr r2, r2, #0x3 + strh r2, [r6, #0x0] + str r1, [r0, #0x0] + bl CTRDGi_ReadFlashID + ldr r2, _020DBEDC ; =0x04000204 + mov r6, r0 + ldrh r1, [r2, #0x0] + cmp r7, #0x0 + ldreq r5, _020DBEE8 ; =0x02103FF4 + bic r1, r1, #0x3 + orr r1, r1, r4 + cmp r7, #0x1 + ldr r0, _020DBED8 ; =0x021D6B0C + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + ldreq r5, _020DBEEC ; =0x02103FE8 + bl OS_UnlockCartridge2 + ldr r2, [r5, #0x0] + mov r0, #0x1 + ldrh r1, [r2, #0x38] + cmp r1, #0x0 + beq _020DBE14 + and r3, r6, #0xff +_020DBDF4: + ldrh r1, [r2, #0x38] + cmp r3, r1 + moveq r0, #0x0 + beq _020DBE14 + ldr r2, [r5, #0x4]! + ldrh r1, [r2, #0x38] + cmp r1, #0x0 + bne _020DBDF4 +_020DBE14: + ldr r2, [r2, #0x0] + ldr r1, _020DBEF0 ; =0x021D6B14 + ldr r3, _020DBEF4 ; =0x021D6B34 + str r2, [r1, #0x0] + ldr r1, [r5, #0x0] + ldr r2, _020DBEF8 ; =0x021D6B2C + ldr r4, [r1, #0x4] + ldr r1, _020DBEFC ; =0x021D6B18 + str r4, [r3, #0x0] + ldr r3, [r5, #0x0] + ldr r6, _020DBF00 ; =0x021D6B1C + ldr r3, [r3, #0x8] + ldr r4, _020DBF04 ; =0x021D6B30 + str r3, [r2, #0x0] + ldr r2, [r5, #0x0] + ldr r3, _020DBF08 ; =0x021D6B24 + ldr r7, [r2, #0xc] + ldr r2, _020DBEE4 ; =0x021D6B28 + str r7, [r1, #0x0] + ldr r7, [r5, #0x0] + ldr r1, _020DBF0C ; =0x021D6B20 + ldr r7, [r7, #0x10] + add sp, sp, #0x4 + str r7, [r6, #0x0] + ldr r6, [r5, #0x0] + ldr r6, [r6, #0x14] + str r6, [r4, #0x0] + ldr r4, [r5, #0x0] + ldr r4, [r4, #0x18] + str r4, [r3, #0x0] + ldr r3, [r5, #0x0] + ldr r3, [r3, #0x1c] + str r3, [r2, #0x0] + ldr r2, [r5, #0x0] + add r2, r2, #0x20 + str r2, [r1, #0x0] + ldmia sp!, {r4-r7,lr} + bx lr +_020DBEAC: + cmp r7, #0x2 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + bl OS_GetLockID + ldr r1, _020DBF10 ; =0x021D6B4C + strh r0, [r1, #0x0] + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DBED8: .word 0x021D6B0C +_020DBEDC: .word 0x04000204 +_020DBEE0: .word 0x02103FE4 +_020DBEE4: .word 0x021D6B28 +_020DBEE8: .word 0x02103FF4 +_020DBEEC: .word 0x02103FE8 +_020DBEF0: .word 0x021D6B14 +_020DBEF4: .word 0x021D6B34 +_020DBEF8: .word 0x021D6B2C +_020DBEFC: .word 0x021D6B18 +_020DBF00: .word 0x021D6B1C +_020DBF04: .word 0x021D6B30 +_020DBF08: .word 0x021D6B24 +_020DBF0C: .word 0x021D6B20 +_020DBF10: .word 0x021D6B4C + + arm_func_start CTRDG_WriteAndVerifyAgbFlashAsync +CTRDG_WriteAndVerifyAgbFlashAsync: ; 0x020DBF14 + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + str r2, [sp, #0x18] + ldr r1, _020DBF44 ; =CTRDGi_WriteAndVerifyAgbFlashSectorCore + add r0, sp, #0x0 + mov r2, r3 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DBF44: .word CTRDGi_WriteAndVerifyAgbFlashSectorCore + + arm_func_start CTRDG_VerifyAgbFlash +CTRDG_VerifyAgbFlash: ; 0x020DBF48 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + str r2, [sp, #0x18] + bl CTRDGi_VerifyAgbFlashCore + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_WriteAgbFlashSector +CTRDG_WriteAgbFlashSector: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020DBF90 ; =0x021D6B14 + ldr r2, [r2, #0x0] + blx r2 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DBF90: .word 0x021D6B14 + + arm_func_start CTRDG_ReadAgbFlash +CTRDG_ReadAgbFlash: ; 0x020DBF94 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0x14] + str r2, [sp, #0x1c] + str r3, [sp, #0x18] + bl CTRDGi_ReadAgbFlashCore + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteAndVerifyAgbFlashSectorCore +CTRDGi_WriteAndVerifyAgbFlashSectorCore: ; 0x020DBFC0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x24 + mov r4, r0 + ldmia r4!, {r0-r3} + add r12, sp, #0x0 + stmia r12!, {r0-r3} + ldmia r4!, {r0-r3} + stmia r12!, {r0-r3} + ldr r0, [r4, #0x0] + mov r7, #0x0 + str r0, [r12, #0x0] + ldrh r6, [sp, #0x20] + ldr r5, [sp, #0xc] + ldr r4, [sp, #0x18] + mov r0, r6 + mov r1, r5 + bl CTRDG_WriteAgbFlashSector +_020DC004: + .byte 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x06, 0x00, 0xA0, 0xE1 + .byte 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0xCA, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x24, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0x10, 0x87, 0xE2 + .byte 0x01, 0x18, 0xA0, 0xE1, 0x21, 0x78, 0xA0, 0xE1, 0x03, 0x00, 0x57, 0xE3, 0xED, 0xFF, 0xFF, 0x3A + .byte 0x24, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CTRDGi_VerifyAgbFlashCore +CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DC128 ; =0x021D6B0C + ldr r1, [r5, #0x0] + ldrh r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r6, [sp, #0x20] + ldr r5, [sp, #0xc] + ldr r4, [sp, #0x18] + bl OS_LockCartridge + ldr r3, _020DC12C ; =0x04000204 + ldr r0, _020DC130 ; =0x021D6B20 + ldrh r2, [r3, #0x0] + ldrh r1, [r3, #0x0] + and r7, r2, #0x3 + bic r1, r1, #0x3 + orr r1, r1, #0x3 + strh r1, [r3, #0x0] + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x20000 + bne _020DC0D4 + mov r0, r6, lsl #0xc + mov r0, r0, lsr #0x10 + bl CTRDGi_SetFlashBankMx + and r0, r6, #0xf + mov r0, r0, lsl #0x10 + mov r6, r0, lsr #0x10 +_020DC0D4: + ldr r1, _020DC130 ; =0x021D6B20 + mov r0, r5 + ldr r1, [r1, #0x0] + mov r2, r4 + ldrh r1, [r1, #0x8] + mov r1, r6, lsl r1 + add r1, r1, #0xa000000 + bl CTRDGi_VerifyFlashSectorCore + ldr r3, _020DC12C ; =0x04000204 + ldr r1, _020DC128 ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r7 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x24 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DC128: .word 0x021D6B0C +_020DC12C: .word 0x04000204 +_020DC130: .word 0x021D6B20 + + arm_func_start CTRDGi_VerifyFlashSectorCore +CTRDGi_VerifyFlashSectorCore: ; 0x020DC134 + cmp r2, #0x0 + sub r2, r2, #0x1 + beq _020DC160 +_020DC140: + ldrb r12, [r1], #0x1 + ldrb r3, [r0], #0x1 + cmp r12, r3 + subne r0, r1, #0x1 + bxne lr + cmp r2, #0x0 + sub r2, r2, #0x1 + bne _020DC140 +_020DC160: + mov r0, #0x0 + bx lr + + arm_func_start CTRDGi_ReadAgbFlashCore +CTRDGi_ReadAgbFlashCore: ; 0x020DC168 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x28 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DC25C ; =0x021D6B0C + ldr r1, [r5, #0x0] + ldrh r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r7, [sp, #0x20] + ldr r6, [sp, #0x14] + ldr r5, [sp, #0x1c] + ldr r4, [sp, #0x18] + bl OS_LockCartridge + ldr r3, _020DC260 ; =0x04000204 + ldr r0, _020DC264 ; =0x021D6B20 + ldrh r2, [r3, #0x0] + ldrh r1, [r3, #0x0] + and r8, r2, #0x3 + bic r1, r1, #0x3 + orr r1, r1, #0x3 + strh r1, [r3, #0x0] + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x20000 + bne _020DC1F4 + mov r0, r7, lsl #0xc + mov r0, r0, lsr #0x10 + bl CTRDGi_SetFlashBankMx + and r0, r7, #0xf + mov r0, r0, lsl #0x10 + mov r7, r0, lsr #0x10 +_020DC1F4: + ldr r0, _020DC264 ; =0x021D6B20 + cmp r4, #0x0 + ldr r0, [r0, #0x0] + sub r4, r4, #0x1 + ldrh r0, [r0, #0x8] + mov r0, r7, lsl r0 + add r0, r0, #0xa000000 + add r1, r6, r0 + beq _020DC22C +_020DC218: + ldrb r0, [r1], #0x1 + cmp r4, #0x0 + sub r4, r4, #0x1 + strb r0, [r5], #0x1 + bne _020DC218 +_020DC22C: + ldr r2, _020DC260 ; =0x04000204 + ldr r0, _020DC25C ; =0x021D6B0C + ldrh r1, [r2, #0x0] + bic r1, r1, #0x3 + orr r1, r1, r8 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, #0x0 + add sp, sp, #0x28 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020DC25C: .word 0x021D6B0C +_020DC260: .word 0x04000204 +_020DC264: .word 0x021D6B20 + + arm_func_start CTRDGi_PollingSR1MCOMMON +CTRDGi_PollingSR1MCOMMON: ; 0x020DC268 + stmdb sp!, {r4-r8,lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, #0x0 + bl StartFlashTimer + ldr r4, _020DC318 ; =0x021D6B10 +_020DC284: + bl CheckFlashTimer + mov r0, r7 + bl CTRDGi_ReadSrFunc + cmp r0, r6 + beq _020DC300 + ands r0, r0, #0x20 + beq _020DC2CC + mov r0, r7 + bl CTRDGi_ReadSrFunc +_020DC2A8: + .byte 0x00, 0x00, 0x56, 0xE1, 0x13, 0x00, 0x00, 0x0A + .byte 0x0A, 0x0A, 0x88, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x5C, 0x10, 0x9F, 0xE5, 0xF0, 0x20, 0xA0, 0xE3 + .byte 0x00, 0x20, 0xC1, 0xE5, 0x20, 0x58, 0xA0, 0xE1, 0x0C, 0x00, 0x00, 0xEA +_020DC2CC: + ldrh r0, [r4, #0x0] + cmp r0, #0x0 + beq _020DC284 + mov r0, r7 + bl CTRDGi_ReadSrFunc +_020DC2E0: + .byte 0x00, 0x00, 0x56, 0xE1, 0x05, 0x00, 0x00, 0x0A, 0x03, 0x09, 0x88, 0xE3, 0x00, 0x08, 0xA0, 0xE1 + .byte 0x24, 0x10, 0x9F, 0xE5, 0xF0, 0x20, 0xA0, 0xE3, 0x00, 0x20, 0xC1, 0xE5, 0x20, 0x58, 0xA0, 0xE1 +_020DC300: + bl CTRDG_IsExisting +_020DC304: + .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x5A, 0xA0, 0x03, 0x05, 0x00, 0xA0, 0xE1 + .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020DC318: .word 0x021D6B10 +_020DC31C: + .byte 0x55, 0x55, 0x00, 0x0A + + arm_func_start CTRDGi_PollingSR512kCOMMON +CTRDGi_PollingSR512kCOMMON: ; 0x020DC320 + stmdb sp!, {r4-r8,lr} + mov r4, r0 + mov r8, r1 + mov r7, r2 + mov r6, #0x0 + bl StartFlashTimer + ldr r5, _020DC3A8 ; =0x021D6B10 +_020DC33C: + mov r0, r8 + bl CTRDGi_ReadSrFunc + cmp r0, r7 + beq _020DC390 + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + beq _020DC33C + mov r0, r8 + bl CTRDGi_ReadSrFunc +_020DC360: + .byte 0x00, 0x00, 0x57, 0xE1, 0x09, 0x00, 0x00, 0x0A, 0x3C, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5 + .byte 0xB8, 0x01, 0xD0, 0xE1, 0xC2, 0x00, 0x50, 0xE3, 0x30, 0x00, 0x9F, 0x05, 0xF0, 0x10, 0xA0, 0x03 + .byte 0x00, 0x10, 0xC0, 0x05, 0x03, 0x09, 0x84, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x68, 0xA0, 0xE1 +_020DC390: + bl CTRDG_IsExisting +_020DC394: + .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x6A, 0xA0, 0x03, 0x06, 0x00, 0xA0, 0xE1 + .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020DC3A8: .word 0x021D6B10 +_020DC3AC: + .byte 0x20, 0x6B, 0x1D, 0x02 + .byte 0x55, 0x55, 0x00, 0x0A + + arm_func_start CTRDGi_ReadSrFunc +CTRDGi_ReadSrFunc: + ldrb r0, [r0, #0x0] + bx lr + + arm_func_start CheckFlashTimer +CheckFlashTimer: ; 0x020DC3BC + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_GetTick + ldr r3, _020DC420 ; =0x021D6B44 + ldr r2, _020DC424 ; =0x000082EA + ldr r12, [r3, #0x0] + ldr r3, [r3, #0x4] + subs r12, r0, r12 + sbc r0, r1, r3 + mov r1, r0, lsl #0x6 + orr r1, r1, r12, lsr #0x1a + mov r0, r12, lsl #0x6 + mov r3, #0x0 + bl _ll_udiv + ldr r2, _020DC428 ; =0x021D6B3C + ldr r3, [r2, #0x4] + ldr r2, [r2, #0x0] + cmp r3, r1 + cmpeq r2, r0 + ldrls r0, _020DC42C ; =0x021D6B10 + movls r1, #0x1 + strlsh r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC420: .word 0x021D6B44 +_020DC424: .word 0x000082EA +_020DC428: .word 0x021D6B3C +_020DC42C: .word 0x021D6B10 + + arm_func_start StartFlashTimer +StartFlashTimer: ; 0x020DC430 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020DC47C ; =0x021D6B28 + ldr r2, _020DC480 ; =0x021D6B10 + mov r3, #0x0 + ldr r1, [r1, #0x0] + strh r3, [r2, #0x0] + mov r0, r0, lsl #0x1 + ldrh r1, [r1, r0] + ldr r0, _020DC484 ; =0x021D6B3C + str r1, [r0, #0x0] + str r3, [r0, #0x4] + bl OS_GetTick + ldr r2, _020DC488 ; =0x021D6B44 + str r0, [r2, #0x0] + str r1, [r2, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC47C: .word 0x021D6B28 +_020DC480: .word 0x021D6B10 +_020DC484: .word 0x021D6B3C +_020DC488: .word 0x021D6B44 + + arm_func_start CTRDGi_ReadFlashID +CTRDGi_ReadFlashID: ; 0x020DC48C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r5, _020DC590 ; =0x04000208 + mov r0, #0x0 + ldrh r2, [r5, #0x0] + ldr r1, _020DC594 ; =0x021D6B38 + ldr r4, _020DC598 ; =0x0A005555 + strh r0, [r5, #0x0] + str r2, [r1, #0x0] + mov r3, #0xaa + ldr r2, _020DC59C ; =0x0A002AAA + strb r3, [r4, #0x0] + mov r3, #0x55 + strb r3, [r2, #0x0] + mov r2, #0x90 + strb r2, [r4, #0x0] + ldrh r2, [r5, #0x0] + ldr r1, [r1, #0x0] + strh r1, [r5, #0x0] + bl StartFlashTimer + ldr r4, _020DC5A0 ; =0x021D6B10 + ldrh r0, [r4, #0x0] + cmp r0, #0x0 + bne _020DC4FC +_020DC4EC: + bl CheckFlashTimer + ldrh r0, [r4, #0x0] + cmp r0, #0x0 + beq _020DC4EC +_020DC4FC: + ldr r0, _020DC5A4 ; =0x0A000001 + bl CTRDGi_ReadSrFunc + mov r4, r0, lsl #0x18 + mov r0, #0xa000000 + bl CTRDGi_ReadSrFunc + ldr ip, _020DC590 ; =0x04000208 + orr r4, r0, r4, lsr #0x10 + ldrh r2, [r12, #0x0] + mov r0, #0x0 + ldr r1, _020DC594 ; =0x021D6B38 + strh r0, [r12, #0x0] + ldr r5, _020DC598 ; =0x0A005555 + str r2, [r1, #0x0] + mov r3, #0xaa + ldr r2, _020DC59C ; =0x0A002AAA + strb r3, [r5, #0x0] + mov r3, #0x55 + strb r3, [r2, #0x0] + mov r2, #0xf0 + strb r2, [r5, #0x0] + strb r2, [r5, #0x0] + ldrh r2, [r12, #0x0] + ldr r1, [r1, #0x0] + strh r1, [r12, #0x0] + bl StartFlashTimer + ldr r5, _020DC5A0 ; =0x021D6B10 + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + bne _020DC580 +_020DC570: + bl CheckFlashTimer + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + beq _020DC570 +_020DC580: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DC590: .word 0x04000208 +_020DC594: .word 0x021D6B38 +_020DC598: .word 0x0A005555 +_020DC59C: .word 0x0A002AAA +_020DC5A0: .word 0x021D6B10 +_020DC5A4: .word 0x0A000001 + + arm_func_start CTRDGi_SetFlashBankMx +CTRDGi_SetFlashBankMx: ; 0x020DC5A8 + ldr r3, _020DC5D4 ; =0x0A005555 + mov r2, #0xaa + ldr r1, _020DC5D8 ; =0x0A002AAA + strb r2, [r3, #0x0] + mov r2, #0x55 + strb r2, [r1, #0x0] + mov r1, #0xb0 + strb r1, [r3, #0x0] + mov r1, #0xa000000 + strb r0, [r1, #0x0] + bx lr + .balign 4 +_020DC5D4: .word 0x0A005555 +_020DC5D8: .word 0x0A002AAA + + arm_func_start CTRDGi_WriteFlashSectorAsyncAT +CTRDGi_WriteFlashSectorAsyncAT: ; 0x020DC5DC + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DC604 ; =CTRDGi_WriteFlashSectorCoreAT + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC604: .word CTRDGi_WriteFlashSectorCoreAT + + arm_func_start CTRDGi_EraseFlashSectorAsyncAT +CTRDGi_EraseFlashSectorAsyncAT: ; 0x020DC608 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov r2, r1 + strh r0, [sp, #0x20] + ldr r1, _020DC630 ; =CTRDGi_EraseFlashSectorCoreAT + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC630: .word CTRDGi_EraseFlashSectorCoreAT + + arm_func_start CTRDGi_WriteFlashSectorAT +CTRDGi_WriteFlashSectorAT: ; 0x020DC634 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlashSectorCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashSectorAT +CTRDGi_EraseFlashSectorAT: + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + bl CTRDGi_EraseFlashSectorCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteFlash4KBAsyncAT +CTRDGi_WriteFlash4KBAsyncAT: ; 0x020DC688 + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DC6B0 ; =CTRDGi_WriteFlash4KBCoreAT + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC6B0: .word CTRDGi_WriteFlash4KBCoreAT + + arm_func_start CTRDGi_EraseFlash4KBAsyncAT +CTRDGi_EraseFlash4KBAsyncAT: ; 0x020DC6B4 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov r2, r1 + strh r0, [sp, #0x20] + ldr r1, _020DC6DC ; =CTRDGi_EraseFlash4KBCoreAT + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC6DC: .word CTRDGi_EraseFlash4KBCoreAT + + arm_func_start CTRDGi_EraseFlashChipAsyncAT +CTRDGi_EraseFlashChipAsyncAT: ; 0x020DC6E0 + stmdb sp!, {lr} + sub sp, sp, #0x24 + ldr r1, _020DC704 ; =CTRDGi_EraseFlashChipCoreAT + mov r2, r0 + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC704: .word CTRDGi_EraseFlashChipCoreAT + + arm_func_start CTRDGi_WriteFlash4KBAT +CTRDGi_WriteFlash4KBAT: ; 0x020DC708 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlash4KBCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlash4KBAT +CTRDGi_EraseFlash4KBAT: ; 0x020DC734 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + bl CTRDGi_EraseFlash4KBCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashChipAT +CTRDGi_EraseFlashChipAT: ; 0x020DC75C + stmdb sp!, {lr} + sub sp, sp, #0x24 + add r0, sp, #0x0 + bl CTRDGi_EraseFlashChipCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteFlash4KBCoreAT +CTRDGi_WriteFlash4KBCoreAT: ; 0x020DC780 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + str r0, [r4, #0x0] + ldrh r0, [sp, #0x20] + ldr r7, [sp, #0xc] + cmp r0, #0x10 + addcs sp, sp, #0x24 + ldrhs r0, _020DC85C ; =0x000080FF + ldmcsia sp!, {r4-r9,lr} + bxcs lr + ldr r1, _020DC860 ; =0x0210400C + mov r0, r0, lsl #0x15 + ldr r1, [r1, #0x24] + ldr r4, _020DC864 ; =0x021D6B08 + mov r8, r0, lsr #0x10 + strh r1, [r4, #0x0] + ldrh r0, [r4, #0x0] + cmp r0, #0x0 + beq _020DC84C + ldr r0, _020DC868 ; =0x02104048 + ldr r6, [r0, #0x24] + mov r5, #0x2 +_020DC7F4: + mov r9, r5 +_020DC7F8: + mov r0, r8 + mov r1, r7 + bl CTRDGi_WriteFlashSectorAT + movs r12, r0 + beq _020DC81C + sub r0, r9, #0x1 + mov r0, r0, lsl #0x10 + movs r9, r0, lsr #0x10 + bne _020DC7F8 +_020DC81C: + cmp r12, #0x0 + bne _020DC84C + ldrh r1, [r4, #0x0] + add r0, r8, #0x1 + mov r0, r0, lsl #0x10 + sub r1, r1, r6 + strh r1, [r4, #0x0] + ldrh r1, [r4, #0x0] + add r7, r7, r6 + mov r8, r0, lsr #0x10 + cmp r1, #0x0 + bne _020DC7F4 +_020DC84C: + mov r0, r12 + add sp, sp, #0x24 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020DC85C: .word 0x000080FF +_020DC860: .word 0x0210400C +_020DC864: .word 0x021D6B08 +_020DC868: .word 0x02104048 + + arm_func_start CTRDGi_WriteFlashSectorCoreAT +CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x24 + mov r5, r0 + add r4, sp, #0x0 + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DC984 ; =0x021D6B0C + ldr r1, [r5, #0x0] + ldrh r0, [r0, #0x0] + str r1, [r4, #0x0] + ldr r4, [sp, #0xc] + bl OS_LockCartridge + ldr r5, _020DC988 ; =0x04000204 + ldr r1, _020DC98C ; =0x021D6B20 + ldrh r0, [r5, #0x0] + ldr r1, [r1, #0x0] + ldrh r2, [r5, #0x0] + ldr r3, [r1, #0x10] + ldr r1, _020DC990 ; =0x02104048 + bic r2, r2, #0x3 + orr r2, r2, r3 + strh r2, [r5, #0x0] + ldr r5, _020DC994 ; =0x04000208 + ldrh lr, [sp, #0x20] + ldrh r12, [r1, #0x28] + ldrh r2, [r5, #0x0] + mov r3, #0x0 + mov lr, lr, lsl r12 + strh r3, [r5, #0x0] + ldr ip, _020DC998 ; =0x0A005555 + mov r5, #0xaa + strb r5, [r12, #0x0] + ldr r3, _020DC99C ; =0x0A002AAA + mov r5, #0x55 + strb r5, [r3, #0x0] + mov r3, #0xa0 + strb r3, [r12, #0x0] + ldr r3, [r1, #0x24] + and r5, r0, #0x3 + cmp r3, #0x0 + add r1, lr, #0xa000000 + beq _020DC92C +_020DC91C: + ldrb r0, [r4], #0x1 + subs r3, r3, #0x1 + strb r0, [r1], #0x1 + bne _020DC91C +_020DC92C: + ldr ip, _020DC994 ; =0x04000208 + ldr r3, _020DC9A0 ; =0x021D6B24 + ldrh r0, [r12, #0x0] + sub r1, r1, #0x1 + mov r0, #0x1 + strh r2, [r12, #0x0] + ldrb r2, [r4, #-0x1] + ldr r3, [r3, #0x0] + blx r3 + ldr r3, _020DC988 ; =0x04000204 + ldr r1, _020DC984 ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x24 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DC984: .word 0x021D6B0C +_020DC988: .word 0x04000204 +_020DC98C: .word 0x021D6B20 +_020DC990: .word 0x02104048 +_020DC994: .word 0x04000208 +_020DC998: .word 0x0A005555 +_020DC99C: .word 0x0A002AAA +_020DC9A0: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlash4KBCoreAT +CTRDGi_EraseFlash4KBCoreAT: ; 0x020DC9A4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + str r0, [r4, #0x0] + ldrh r0, [sp, #0x20] + cmp r0, #0x10 + addcs sp, sp, #0x24 + ldrhs r0, _020DCA54 ; =0x000080FF + ldmcsia sp!, {r4-r7,lr} + bxcs lr + mov r0, r0, lsl #0x15 + mov r5, r0, lsr #0x10 + mov r6, #0x0 + mov r4, #0x2 + mov r7, r4 + mov r0, r5 + bl CTRDGi_EraseFlashSectorAT +_020DCA00: + .byte 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A, 0x01, 0x10, 0x47, 0xE2, 0x01, 0x18, 0xA0, 0xE1 + .byte 0x21, 0x78, 0xB0, 0xE1, 0xF7, 0xFF, 0xFF, 0x1A, 0x01, 0x10, 0x85, 0xE2, 0x01, 0x18, 0xA0, 0xE1 + .byte 0x00, 0x00, 0x50, 0xE3, 0x21, 0x58, 0xA0, 0xE1, 0x24, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18 + .byte 0x1E, 0xFF, 0x2F, 0x11, 0x01, 0x10, 0x86, 0xE2, 0x01, 0x18, 0xA0, 0xE1, 0x21, 0x68, 0xA0, 0xE1 + .byte 0x20, 0x00, 0x56, 0xE3, 0xEA, 0xFF, 0xFF, 0x3A, 0x24, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 +_020DCA54: .word 0x000080FF + + arm_func_start CTRDGi_EraseFlashSectorCoreAT +CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + ldr r1, _020DCB80 ; =0x02104048 + str r0, [r4, #0x0] + ldr r0, _020DCB84 ; =0x021D6B0C + ldrh r2, [sp, #0x20] + ldrh r1, [r1, #0x28] + ldrh r0, [r0, #0x0] + mov r1, r2, lsl r1 + add r5, r1, #0xa000000 + bl OS_LockCartridge + ldr r4, _020DCB88 ; =0x04000204 + ldr r1, _020DCB8C ; =0x021D6B20 + ldrh r0, [r4, #0x0] + ldr r2, [r1, #0x0] + ldrh r1, [r4, #0x0] + ldr r2, [r2, #0x10] + ldr r3, _020DCB90 ; =0x04000208 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r4, #0x0] + ldrh r2, [r3, #0x0] + mov r1, #0x0 + ldr r4, _020DCB94 ; =0x0A005555 + strh r1, [r3, #0x0] + mov r3, #0xaa + strb r3, [r4, #0x0] + ldr r1, _020DCB98 ; =0x0A002AAA + mov r3, #0x55 + strb r3, [r1, #0x0] + mov r3, #0xa0 + strb r3, [r4, #0x0] + ldr r1, _020DCB80 ; =0x02104048 + and r4, r0, #0x3 + ldr r1, [r1, #0x24] + cmp r1, #0x0 + beq _020DCB18 + mov r0, #0xff +_020DCB0C: + strb r0, [r5], #0x1 + subs r1, r1, #0x1 + bne _020DCB0C +_020DCB18: + ldr ip, _020DCB90 ; =0x04000208 + ldr r3, _020DCB9C ; =0x021D6B24 + ldrh r0, [r12, #0x0] + sub r1, r5, #0x1 + strh r2, [r12, #0x0] + ldr r3, [r3, #0x0] + mov r0, #0x1 + mov r2, #0xff + blx r3 + ldr r2, _020DCB88 ; =0x04000204 + movs r5, r0 + ldrh r1, [r2, #0x0] + andne r0, r5, #0xff00 + orrne r0, r0, #0x2 + movne r0, r0, lsl #0x10 + bic r1, r1, #0x3 + movne r5, r0, lsr #0x10 + orr r1, r1, r4 + ldr r0, _020DCB84 ; =0x021D6B0C + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r5 + add sp, sp, #0x24 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DCB80: .word 0x02104048 +_020DCB84: .word 0x021D6B0C +_020DCB88: .word 0x04000204 +_020DCB8C: .word 0x021D6B20 +_020DCB90: .word 0x04000208 +_020DCB94: .word 0x0A005555 +_020DCB98: .word 0x0A002AAA +_020DCB9C: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashChipCoreAT +CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020DCC7C ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r4, _020DCC80 ; =0x04000204 + ldr r0, _020DCC84 ; =0x021D6B20 + ldrh r3, [r4, #0x0] + ldr r0, [r0, #0x0] + ldrh r1, [r4, #0x0] + ldr r2, [r0, #0x10] + ldr r0, _020DCC88 ; =0x04000208 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r4, #0x0] + ldrh r4, [r0, #0x0] + mov r2, #0x0 + ldr r1, _020DCC8C ; =0x021D6B38 + strh r2, [r0, #0x0] + ldr lr, _020DCC90 ; =0x0A005555 + str r4, [r1, #0x0] + mov r5, #0xaa + ldr r4, _020DCC94 ; =0x0A002AAA + strb r5, [lr, #0x0] + mov r12, #0x55 + strb r12, [r4, #0x0] + mov r2, #0x80 + strb r2, [lr, #0x0] + strb r5, [lr, #0x0] + strb r12, [r4, #0x0] + mov r2, #0x10 + strb r2, [lr, #0x0] + ldrh r2, [r0, #0x0] + ldr r2, [r1, #0x0] + ldr r1, _020DCC98 ; =0x021D6B24 + strh r2, [r0, #0x0] + ldr r4, [r1, #0x0] + mov r0, #0x3 + mov r1, #0xa000000 + mov r2, #0xff + and r5, r3, #0x3 + blx r4 + ldr r3, _020DCC80 ; =0x04000204 + ldr r1, _020DCC7C ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DCC7C: .word 0x021D6B0C +_020DCC80: .word 0x04000204 +_020DCC84: .word 0x021D6B20 +_020DCC88: .word 0x04000208 +_020DCC8C: .word 0x021D6B38 +_020DCC90: .word 0x0A005555 +_020DCC94: .word 0x0A002AAA +_020DCC98: .word 0x021D6B24 + + arm_func_start CTRDGi_WriteFlashSectorAsyncLE +CTRDGi_WriteFlashSectorAsyncLE: ; 0x020DCC9C + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DCCC4 ; =CTRDGi_WriteFlashSectorCoreLE + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DCCC4: .word CTRDGi_WriteFlashSectorCoreLE + + arm_func_start CTRDGi_EraseFlashSectorAsyncLE +CTRDGi_EraseFlashSectorAsyncLE: ; 0x020DCCC8 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov r2, r1 + strh r0, [sp, #0x20] + ldr r1, _020DCCF0 ; =CTRDGi_EraseFlashSectorCoreLE + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DCCF0: .word CTRDGi_EraseFlashSectorCoreLE + + arm_func_start CTRDGi_EraseFlashChipAsyncLE +CTRDGi_EraseFlashChipAsyncLE: ; 0x020DCCF4 + stmdb sp!, {lr} + sub sp, sp, #0x24 + ldr r1, _020DCD18 ; =CTRDGi_EraseFlashChipCoreLE + mov r2, r0 + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DCD18: .word CTRDGi_EraseFlashChipCoreLE + + arm_func_start CTRDGi_WriteFlashSectorLE +CTRDGi_WriteFlashSectorLE: ; 0x020DCD1C + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlashSectorCoreLE + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashSectorLE +CTRDGi_EraseFlashSectorLE: ; 0x020DCD48 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + bl CTRDGi_EraseFlashSectorCoreLE + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashChipLE +CTRDGi_EraseFlashChipLE: ; 0x020DCD70 + stmdb sp!, {lr} + sub sp, sp, #0x24 + add r0, sp, #0x0 + bl CTRDGi_EraseFlashChipCoreLE + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_VerifyFlashErase +CTRDGi_VerifyFlashErase: ; 0x020DCD94 + stmdb sp!, {r4-r6,lr} + ldr r2, _020DCE14 ; =0x021D6B0C + mov r4, r0 + ldrh r0, [r2, #0x0] + mov r5, r1 + bl OS_LockCartridge + ldr ip, _020DCE18 ; =0x04000204 + ldr r0, _020DCE1C ; =0x021D6B20 + ldrh r3, [r12, #0x0] + ldr r0, [r0, #0x0] + ldrh r1, [r12, #0x0] + ldr r2, [r0, #0x10] + mov r0, r4 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r12, #0x0] + and r6, r3, #0x3 + mov r4, #0x0 + blx r5 + cmp r0, #0x0 + ldr r2, _020DCE18 ; =0x04000204 + ldr r0, _020DCE14 ; =0x021D6B0C + ldrh r1, [r2, #0x0] + ldrne r4, _020DCE20 ; =0x00008004 + bic r1, r1, #0x3 + orr r1, r1, r6 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020DCE14: .word 0x021D6B0C +_020DCE18: .word 0x04000204 +_020DCE1C: .word 0x021D6B20 +_020DCE20: .word 0x00008004 + + arm_func_start CTRDGi_VerifyFlashCoreFF +CTRDGi_VerifyFlashCoreFF: ; 0x020DCE24 + ldr r1, _020DCE54 ; =0x021D6B20 + ldr r1, [r1, #0x0] + ldr r2, [r1, #0x4] + cmp r2, #0x0 + beq _020DCE4C +_020DCE38: + ldrb r1, [r0], #0x1 + cmp r1, #0xff + bne _020DCE4C + subs r2, r2, #0x1 + bne _020DCE38 +_020DCE4C: + mov r0, r2 + bx lr + .balign 4 +_020DCE54: .word 0x021D6B20 + + arm_func_start CTRDGi_WriteFlashSectorCoreLE +CTRDGi_WriteFlashSectorCoreLE: ; 0x020DCE58 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + str r0, [r4, #0x0] + ldrh r7, [sp, #0x20] + ldr r6, [sp, #0xc] + cmp r7, #0x10 + addcs sp, sp, #0x24 + ldrhs r0, _020DD018 ; =0x000080FF + ldmcsia sp!, {r4-r9,lr} + bxcs lr + ldr r0, _020DD01C ; =0x021D6B20 + mov r9, #0x0 + ldr r0, [r0, #0x0] + ldrh r0, [r0, #0x8] + mov r0, r7, lsl r0 + add r4, r0, #0xa000000 + ldr r5, _020DD020 ; =CTRDGi_VerifyFlashCoreFF +_020DCEB8: + mov r0, r7 + bl CTRDGi_EraseFlashSectorLE + movs r8, r0 + bne _020DCEE0 + mov r0, r4 + mov r1, r5 + bl CTRDGi_VerifyFlashErase + mov r0, r0, lsl #0x10 + movs r8, r0, lsr #0x10 + beq _020DCF04 +_020DCEE0: + add r0, r9, #0x1 + mov r0, r0, lsl #0x10 + cmp r9, #0x50 + mov r9, r0, lsr #0x10 + bne _020DCEB8 + add sp, sp, #0x24 + mov r0, r8 + ldmia sp!, {r4-r9,lr} + bx lr +_020DCF04: + mov r5, #0x1 + cmp r9, #0x0 + movne r5, #0x6 + cmp r5, #0x1 + mov r9, #0x1 + blo _020DCF38 +_020DCF1C: + mov r0, r7 + bl CTRDGi_EraseFlashSectorLE + add r0, r9, #0x1 + mov r0, r0, lsl #0x10 + mov r9, r0, lsr #0x10 + cmp r9, r5 + bls _020DCF1C +_020DCF38: + ldr r0, _020DD024 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r5, _020DD028 ; =0x04000204 + ldr r1, _020DD01C ; =0x021D6B20 + ldrh r0, [r5, #0x0] + ldr r3, [r1, #0x0] + ldrh r2, [r5, #0x0] + ldr r3, [r3, #0x10] + ldr r7, _020DD02C ; =0x021D6B08 + bic r2, r2, #0x3 + orr r2, r2, r3 + strh r2, [r5, #0x0] + ldr r1, [r1, #0x0] + ldr sb, _020DD030 ; =0x04000208 + ldr r1, [r1, #0x4] + mov r2, #0x0 + strh r1, [r7, #0x0] + ldrh r3, [r9, #0x0] + ldr r1, _020DD034 ; =0x021D6B38 + and r5, r0, #0x3 + strh r2, [r9, #0x0] + ldrh r0, [r7, #0x0] + str r3, [r1, #0x0] + cmp r0, #0x0 + beq _020DCFD4 +_020DCFA0: + mov r0, r6 + mov r1, r4 + bl CTRDGi_ProgramFlashByteLE + movs r8, r0 + bne _020DCFD4 + ldrh r0, [r7, #0x0] + add r6, r6, #0x1 + add r4, r4, #0x1 + sub r0, r0, #0x1 + strh r0, [r7, #0x0] + ldrh r0, [r7, #0x0] + cmp r0, #0x0 + bne _020DCFA0 +_020DCFD4: + ldr r3, _020DD030 ; =0x04000208 + ldr r0, _020DD034 ; =0x021D6B38 + ldrh r1, [r3, #0x0] + ldr r0, [r0, #0x0] + ldr r2, _020DD028 ; =0x04000204 + strh r0, [r3, #0x0] + ldrh r1, [r2, #0x0] + ldr r0, _020DD024 ; =0x021D6B0C + bic r1, r1, #0x3 + orr r1, r1, r5 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r8 + add sp, sp, #0x24 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020DD018: .word 0x000080FF +_020DD01C: .word 0x021D6B20 +_020DD020: .word CTRDGi_VerifyFlashCoreFF +_020DD024: .word 0x021D6B0C +_020DD028: .word 0x04000204 +_020DD02C: .word 0x021D6B08 +_020DD030: .word 0x04000208 +_020DD034: .word 0x021D6B38 + + arm_func_start CTRDGi_ProgramFlashByteLE +CTRDGi_ProgramFlashByteLE: ; 0x020DD038 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020DD08C ; =0x0A005555 + mov r3, #0xaa + ldr r2, _020DD090 ; =0x0A002AAA + strb r3, [r12, #0x0] + mov r3, #0x55 + mov lr, r0 + strb r3, [r2, #0x0] + mov r0, #0xa0 + strb r0, [r12, #0x0] + ldrb r2, [lr, #0x0] + ldr r3, _020DD094 ; =0x021D6B24 + mov r0, #0x1 + strb r2, [r1, #0x0] + ldrb r2, [lr, #0x0] + ldr r3, [r3, #0x0] + blx r3 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD08C: .word 0x0A005555 +_020DD090: .word 0x0A002AAA +_020DD094: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashSectorCoreLE +CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x28 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + str r0, [r4, #0x0] + ldrh r4, [sp, #0x20] + cmp r4, #0x10 + addcs sp, sp, #0x28 + ldrhs r0, _020DD1B8 ; =0x000080FF + ldmcsia sp!, {r4-r6,lr} + bxcs lr + ldr r0, _020DD1BC ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r6, _020DD1C0 ; =0x04000204 + ldr r1, _020DD1C4 ; =0x021D6B20 + ldrh r3, [r6, #0x0] + ldr r0, [r1, #0x0] + ldrh r2, [r6, #0x0] + ldr r5, [r0, #0x10] + ldr r0, _020DD1C8 ; =0x04000208 + bic r2, r2, #0x3 + orr r2, r2, r5 + strh r2, [r6, #0x0] + ldr r1, [r1, #0x0] + ldrh r5, [r0, #0x0] + ldrh r12, [r1, #0x8] + mov r1, #0x0 + ldr r2, _020DD1CC ; =0x021D6B38 + strh r1, [r0, #0x0] + mov r6, r4, lsl r12 + ldr lr, _020DD1D0 ; =0x0A005555 + str r5, [r2, #0x0] + mov r5, #0xaa + ldr r4, _020DD1D4 ; =0x0A002AAA + strb r5, [lr, #0x0] + mov r12, #0x55 + strb r12, [r4, #0x0] + mov r1, #0x80 + strb r1, [lr, #0x0] + strb r5, [lr, #0x0] + strb r12, [r4, #0x0] + add r1, r6, #0xa000000 + mov r4, #0x30 + strb r4, [r1, #0x0] + ldrh r4, [r0, #0x0] + ldr r4, [r2, #0x0] + ldr r2, _020DD1D8 ; =0x021D6B24 + strh r4, [r0, #0x0] + ldr r4, [r2, #0x0] + mov r0, #0x2 + mov r2, #0xff + and r5, r3, #0x3 + blx r4 + ldr r3, _020DD1C0 ; =0x04000204 + ldr r1, _020DD1BC ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x28 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020DD1B8: .word 0x000080FF +_020DD1BC: .word 0x021D6B0C +_020DD1C0: .word 0x04000204 +_020DD1C4: .word 0x021D6B20 +_020DD1C8: .word 0x04000208 +_020DD1CC: .word 0x021D6B38 +_020DD1D0: .word 0x0A005555 +_020DD1D4: .word 0x0A002AAA +_020DD1D8: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashChipCoreLE +CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020DD2B8 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r4, _020DD2BC ; =0x04000204 + ldr r0, _020DD2C0 ; =0x021D6B20 + ldrh r3, [r4, #0x0] + ldr r0, [r0, #0x0] + ldrh r1, [r4, #0x0] + ldr r2, [r0, #0x10] + ldr r0, _020DD2C4 ; =0x04000208 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r4, #0x0] + ldrh r4, [r0, #0x0] + mov r2, #0x0 + ldr r1, _020DD2C8 ; =0x021D6B38 + strh r2, [r0, #0x0] + ldr lr, _020DD2CC ; =0x0A005555 + str r4, [r1, #0x0] + mov r5, #0xaa + ldr r4, _020DD2D0 ; =0x0A002AAA + strb r5, [lr, #0x0] + mov r12, #0x55 + strb r12, [r4, #0x0] + mov r2, #0x80 + strb r2, [lr, #0x0] + strb r5, [lr, #0x0] + strb r12, [r4, #0x0] + mov r2, #0x10 + strb r2, [lr, #0x0] + ldrh r2, [r0, #0x0] + ldr r2, [r1, #0x0] + ldr r1, _020DD2D4 ; =0x021D6B24 + strh r2, [r0, #0x0] + ldr r4, [r1, #0x0] + mov r0, #0x3 + mov r1, #0xa000000 + mov r2, #0xff + and r5, r3, #0x3 + blx r4 + ldr r3, _020DD2BC ; =0x04000204 + ldr r1, _020DD2B8 ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DD2B8: .word 0x021D6B0C +_020DD2BC: .word 0x04000204 +_020DD2C0: .word 0x021D6B20 +_020DD2C4: .word 0x04000208 +_020DD2C8: .word 0x021D6B38 +_020DD2CC: .word 0x0A005555 +_020DD2D0: .word 0x0A002AAA +_020DD2D4: .word 0x021D6B24 + + arm_func_start CTRDGi_WriteFlashSectorAsyncMX +CTRDGi_WriteFlashSectorAsyncMX: ; 0x020DD2D8 + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DD300 ; =CTRDGi_WriteFlashSectorCoreMX + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD300: .word CTRDGi_WriteFlashSectorCoreMX + + arm_func_start CTRDGi_EraseFlashSectorAsyncMX +CTRDGi_EraseFlashSectorAsyncMX: ; 0x020DD304 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov r2, r1 + strh r0, [sp, #0x20] + ldr r1, _020DD32C ; =CTRDGi_EraseFlashSectorCoreMX + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD32C: .word CTRDGi_EraseFlashSectorCoreMX + + arm_func_start CTRDGi_EraseFlashChipAsyncMX +CTRDGi_EraseFlashChipAsyncMX: ; 0x020DD330 + stmdb sp!, {lr} + sub sp, sp, #0x24 + ldr r1, _020DD354 ; =CTRDGi_EraseFlashChipCoreMX + mov r2, r0 + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD354: .word CTRDGi_EraseFlashChipCoreMX + + arm_func_start CTRDGi_WriteFlashSectorMX +CTRDGi_WriteFlashSectorMX: ; 0x020DD358 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlashSectorCoreMX + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashSectorMX +CTRDGi_EraseFlashSectorMX: ; 0x020DD384 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + bl CTRDGi_EraseFlashSectorCoreMX + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashChipMX +CTRDGi_EraseFlashChipMX: ; 0x020DD3AC + stmdb sp!, {lr} + sub sp, sp, #0x24 + add r0, sp, #0x0 + bl CTRDGi_EraseFlashChipCoreMX + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteFlashSectorCoreMX +CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x28 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DD540 ; =0x021D6B20 + ldr r1, [r5, #0x0] + ldr r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r5, [sp, #0x20] + ldrh r0, [r0, #0xa] + ldr r4, [sp, #0xc] + cmp r5, r0 + addcs sp, sp, #0x28 + ldrhs r0, _020DD544 ; =0x000080FF + ldmcsia sp!, {r4-r8,lr} + bxcs lr + mov r0, r5 + bl CTRDGi_EraseFlashSectorMX + movs r6, r0 + addne sp, sp, #0x28 + ldmneia sp!, {r4-r8,lr} + bxne lr + ldr r0, _020DD548 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r7, _020DD54C ; =0x04000204 + ldr r0, _020DD540 ; =0x021D6B20 + ldrh r3, [r7, #0x0] + ldr r2, [r0, #0x0] + ldrh r1, [r7, #0x0] + mov r0, r5, lsl #0xc + ldr r2, [r2, #0x10] + bic r1, r1, #0x3 + orr r1, r1, r2 + mov r0, r0, lsr #0x10 + strh r1, [r7, #0x0] + and r7, r3, #0x3 + bl CTRDGi_SetFlashBankMx + ldr r0, _020DD540 ; =0x021D6B20 + and r1, r5, #0xf + ldr r3, [r0, #0x0] + mov r0, r1, lsl #0x10 + ldr r2, [r3, #0x4] + ldr r8, _020DD550 ; =0x021D6B08 + ldr r1, _020DD554 ; =0x04000208 + strh r2, [r8, #0x0] + ldrh r3, [r3, #0x8] + mov r5, r0, lsr #0x10 + ldrh r2, [r1, #0x0] + mov r0, #0x0 + mov r3, r5, lsl r3 + strh r0, [r1, #0x0] + ldrh r1, [r8, #0x0] + ldr r0, _020DD558 ; =0x021D6B38 + add r5, r3, #0xa000000 + str r2, [r0, #0x0] + cmp r1, #0x0 + beq _020DD4FC +_020DD4C8: + mov r0, r4 + mov r1, r5 + bl CTRDGi_ProgramFlashByteMX + movs r6, r0 + bne _020DD4FC + ldrh r0, [r8, #0x0] + add r4, r4, #0x1 + add r5, r5, #0x1 + sub r0, r0, #0x1 + strh r0, [r8, #0x0] + ldrh r0, [r8, #0x0] + cmp r0, #0x0 + bne _020DD4C8 +_020DD4FC: + ldr r3, _020DD554 ; =0x04000208 + ldr r0, _020DD558 ; =0x021D6B38 + ldrh r1, [r3, #0x0] + ldr r0, [r0, #0x0] + ldr r2, _020DD54C ; =0x04000204 + strh r0, [r3, #0x0] + ldrh r1, [r2, #0x0] + ldr r0, _020DD548 ; =0x021D6B0C + bic r1, r1, #0x3 + orr r1, r1, r7 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r6 + add sp, sp, #0x28 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020DD540: .word 0x021D6B20 +_020DD544: .word 0x000080FF +_020DD548: .word 0x021D6B0C +_020DD54C: .word 0x04000204 +_020DD550: .word 0x021D6B08 +_020DD554: .word 0x04000208 +_020DD558: .word 0x021D6B38 + + arm_func_start CTRDGi_ProgramFlashByteMX +CTRDGi_ProgramFlashByteMX: ; 0x020DD55C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020DD5B0 ; =0x0A005555 + mov r3, #0xaa + ldr r2, _020DD5B4 ; =0x0A002AAA + strb r3, [r12, #0x0] + mov r3, #0x55 + mov lr, r0 + strb r3, [r2, #0x0] + mov r0, #0xa0 + strb r0, [r12, #0x0] + ldrb r2, [lr, #0x0] + ldr r3, _020DD5B8 ; =0x021D6B24 + mov r0, #0x1 + strb r2, [r1, #0x0] + ldrb r2, [lr, #0x0] + ldr r3, [r3, #0x0] + blx r3 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD5B0: .word 0x0A005555 +_020DD5B4: .word 0x0A002AAA +_020DD5B8: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashSectorCoreMX +CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x34 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x10 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DD748 ; =0x021D6B20 + ldr r1, [r5, #0x0] + ldr r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r4, [sp, #0x30] + ldrh r0, [r0, #0xa] + cmp r4, r0 + addcs sp, sp, #0x34 + ldrhs r0, _020DD74C ; =0x000080FF + ldmcsia sp!, {r4-r11,lr} + bxcs lr + ldr r0, _020DD750 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r5, _020DD754 ; =0x04000204 + ldr r0, _020DD748 ; =0x021D6B20 + ldrh r3, [r5, #0x0] + ldr r2, [r0, #0x0] + ldrh r1, [r5, #0x0] + mov r0, r4, lsl #0xc + ldr r2, [r2, #0x10] + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r5, #0x0] + and r1, r3, #0x3 + mov r0, r0, lsr #0x10 + str r1, [sp, #0x0] + bl CTRDGi_SetFlashBankMx + and r0, r4, #0xf + mov r0, r0, lsl #0x10 + mov r9, r0, lsr #0x10 + mov r0, #0x2 + mov r10, #0x0 + str r0, [sp, #0x8] + mov r0, #0xff + ldr r8, _020DD758 ; =0x04000208 + mov r11, r10 + mov r7, #0xaa + mov r6, #0x55 + mov r5, #0x80 + mov r4, #0x30 + str r0, [sp, #0xc] +_020DD684: + ldr r0, _020DD748 ; =0x021D6B20 + ldrh r12, [r8, #0x0] + ldr r0, [r0, #0x0] + ldr r3, _020DD75C ; =0x021D6B38 + ldrh r1, [r0, #0x8] + ldr r0, [sp, #0x8] + ldr r2, [sp, #0xc] + strh r11, [r8, #0x0] + str r12, [r3, #0x0] + ldr r3, _020DD760 ; =0x0A005555 + mov r1, r9, lsl r1 + strb r7, [r3, #0x0] + ldr r3, _020DD764 ; =0x0A002AAA + add r1, r1, #0xa000000 + strb r6, [r3, #0x0] + ldr r3, _020DD760 ; =0x0A005555 + strb r5, [r3, #0x0] + strb r7, [r3, #0x0] + ldr r3, _020DD764 ; =0x0A002AAA + strb r6, [r3, #0x0] + strb r4, [r1, #0x0] + ldrh r3, [r8, #0x0] + ldr r3, _020DD75C ; =0x021D6B38 + ldr r3, [r3, #0x0] + strh r3, [r8, #0x0] + ldr r3, _020DD768 ; =0x021D6B24 + ldr r3, [r3, #0x0] + blx r3 + str r0, [sp, #0x4] + ands r0, r0, #0xa000 + beq _020DD714 + cmp r10, #0x0 + addeq r0, r10, #0x1 + moveq r0, r0, lsl #0x10 + moveq r10, r0, lsr #0x10 + beq _020DD684 +_020DD714: + ldr r2, _020DD754 ; =0x04000204 + ldr r1, _020DD750 ; =0x021D6B0C + ldrh r0, [r2, #0x0] + bic r3, r0, #0x3 + ldr r0, [sp, #0x0] + orr r0, r3, r0 + strh r0, [r2, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + ldr r0, [sp, #0x4] + add sp, sp, #0x34 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020DD748: .word 0x021D6B20 +_020DD74C: .word 0x000080FF +_020DD750: .word 0x021D6B0C +_020DD754: .word 0x04000204 +_020DD758: .word 0x04000208 +_020DD75C: .word 0x021D6B38 +_020DD760: .word 0x0A005555 +_020DD764: .word 0x0A002AAA +_020DD768: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashChipCoreMX +CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020DD848 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r4, _020DD84C ; =0x04000204 + ldr r0, _020DD850 ; =0x021D6B20 + ldrh r3, [r4, #0x0] + ldr r0, [r0, #0x0] + ldrh r1, [r4, #0x0] + ldr r2, [r0, #0x10] + ldr r0, _020DD854 ; =0x04000208 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r4, #0x0] + ldrh r4, [r0, #0x0] + mov r2, #0x0 + ldr r1, _020DD858 ; =0x021D6B38 + strh r2, [r0, #0x0] + ldr lr, _020DD85C ; =0x0A005555 + str r4, [r1, #0x0] + mov r5, #0xaa + ldr r4, _020DD860 ; =0x0A002AAA + strb r5, [lr, #0x0] + mov r12, #0x55 + strb r12, [r4, #0x0] + mov r2, #0x80 + strb r2, [lr, #0x0] + strb r5, [lr, #0x0] + strb r12, [r4, #0x0] + mov r2, #0x10 + strb r2, [lr, #0x0] + ldrh r2, [r0, #0x0] + ldr r2, [r1, #0x0] + ldr r1, _020DD864 ; =0x021D6B24 + strh r2, [r0, #0x0] + ldr r4, [r1, #0x0] + mov r0, #0x3 + mov r1, #0xa000000 + mov r2, #0xff + and r5, r3, #0x3 + blx r4 + ldr r3, _020DD84C ; =0x04000204 + ldr r1, _020DD848 ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DD848: .word 0x021D6B0C +_020DD84C: .word 0x04000204 +_020DD850: .word 0x021D6B20 +_020DD854: .word 0x04000208 +_020DD858: .word 0x021D6B38 +_020DD85C: .word 0x0A005555 +_020DD860: .word 0x0A002AAA +_020DD864: .word 0x021D6B24 +_020DD868: + .byte 0x00, 0x40, 0x2D, 0xE9, 0x24, 0xD0, 0x4D, 0xE2 + .byte 0x0C, 0x10, 0x8D, 0xE5, 0xB0, 0x02, 0xCD, 0xE1, 0x10, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE2 + .byte 0x5D, 0x00, 0x00, 0xEB, 0x24, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + .byte 0xC0, 0xD8, 0x0D, 0x02, 0x00, 0x40, 0x2D, 0xE9, 0x24, 0xD0, 0x4D, 0xE2, 0xB0, 0x02, 0xCD, 0xE1 + .byte 0x00, 0x00, 0x8D, 0xE2, 0x0C, 0x10, 0x8D, 0xE5, 0x04, 0x00, 0x00, 0xEB, 0x00, 0x08, 0xA0, 0xE1 + .byte 0x20, 0x08, 0xA0, 0xE1, 0x24, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + .byte 0xF0, 0x41, 0x2D, 0xE9, 0x28, 0xD0, 0x4D, 0xE2, 0x00, 0x50, 0xA0, 0xE1, 0x0F, 0x00, 0xB5, 0xE8 + .byte 0x00, 0x40, 0x8D, 0xE2, 0x0F, 0x00, 0xA4, 0xE8, 0x0F, 0x00, 0xB5, 0xE8, 0x0F, 0x00, 0xA4, 0xE8 + .byte 0x00, 0x01, 0x9F, 0xE5, 0x00, 0x10, 0x95, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x00, 0x10, 0x84, 0xE5 + .byte 0xB0, 0x52, 0xDD, 0xE1, 0xBA, 0x00, 0xD0, 0xE1, 0x0C, 0x40, 0x9D, 0xE5, 0x00, 0x00, 0x55, 0xE1 + .byte 0x28, 0xD0, 0x8D, 0x22, 0xE0, 0x00, 0x9F, 0x25, 0xF0, 0x41, 0xBD, 0x28, 0x1E, 0xFF, 0x2F, 0x21 + .byte 0x05, 0x00, 0xA0, 0xE1, 0x0B, 0xFD, 0xFF, 0xEB, 0x00, 0x60, 0xB0, 0xE1, 0x28, 0xD0, 0x8D, 0x12 + .byte 0xF0, 0x41, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0xC0, 0x00, 0x9F, 0xE5, 0xB0, 0x00, 0xD0, 0xE1 + .byte 0x34, 0xB2, 0xFF, 0xEB, 0xB8, 0x70, 0x9F, 0xE5, 0xA8, 0x00, 0x9F, 0xE5, 0xB0, 0x30, 0xD7, 0xE1 + .byte 0x00, 0x20, 0x90, 0xE5, 0xB0, 0x10, 0xD7, 0xE1, 0x10, 0x20, 0x92, 0xE5, 0xA4, 0x80, 0x9F, 0xE5 + .byte 0x03, 0x10, 0xC1, 0xE3, 0x02, 0x10, 0x81, 0xE1, 0xB0, 0x10, 0xC7, 0xE1, 0x00, 0x10, 0x90, 0xE5 + .byte 0x03, 0x70, 0x03, 0xE2, 0x04, 0x00, 0x91, 0xE5, 0xB0, 0x00, 0xC8, 0xE1, 0xB8, 0x10, 0xD1, 0xE1 + .byte 0xB0, 0x00, 0xD8, 0xE1, 0x15, 0x11, 0xA0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x54, 0x81, 0xE2 + .byte 0x0C, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0xA9, 0xFD, 0xFF, 0xEB + .byte 0x00, 0x60, 0xB0, 0xE1, 0x07, 0x00, 0x00, 0x1A, 0xB0, 0x00, 0xD8, 0xE1, 0x01, 0x40, 0x84, 0xE2 + .byte 0x01, 0x50, 0x85, 0xE2, 0x01, 0x00, 0x40, 0xE2, 0xB0, 0x00, 0xC8, 0xE1, 0xB0, 0x00, 0xD8, 0xE1 + .byte 0x00, 0x00, 0x50, 0xE3, 0xF2, 0xFF, 0xFF, 0x1A, 0x34, 0x20, 0x9F, 0xE5, 0x2C, 0x00, 0x9F, 0xE5 + .byte 0xB0, 0x10, 0xD2, 0xE1, 0x03, 0x10, 0xC1, 0xE3, 0x07, 0x10, 0x81, 0xE1, 0xB0, 0x10, 0xC2, 0xE1 + .byte 0xB0, 0x00, 0xD0, 0xE1, 0x03, 0xB2, 0xFF, 0xEB, 0x06, 0x00, 0xA0, 0xE1, 0x28, 0xD0, 0x8D, 0xE2 + .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x20, 0x6B, 0x1D, 0x02, 0xFF, 0x80, 0x00, 0x00 + .byte 0x0C, 0x6B, 0x1D, 0x02, 0x04, 0x02, 0x00, 0x04, 0x08, 0x6B, 0x1D, 0x02 + + arm_func_start CTRDGi_SetTask +CTRDGi_SetTask: ; 0x020DD9FC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r3, _020DDAA8 ; =0x021D6B50 + mov r7, r0 + mov r4, r1 + mov r6, r2 + ldr r5, [r3, #0x0] + bl CTRDGi_IsTaskAvailable +_020DDA1C: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x00, 0x00, 0x00, 0x1A, 0x89, 0xBF, 0xFF, 0xEB, 0x7C, 0x00, 0x9F, 0xE5, 0x22, 0x00, 0xD0, 0xE5 + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x00, 0x0A, 0x84, 0xBF, 0xFF, 0xEB, 0x33, 0xBE, 0xFF, 0xEB + .byte 0x01, 0x10, 0xA0, 0xE3, 0x22, 0x10, 0xC7, 0xE5, 0x00, 0x40, 0x87, 0xE5, 0xC4, 0x10, 0x85, 0xE2 + .byte 0x01, 0x00, 0x57, 0xE1, 0x00, 0x40, 0xA0, 0xE1, 0x48, 0x00, 0x9F, 0x05, 0x04, 0x60, 0x87, 0xE5 + .byte 0x00, 0x10, 0xA0, 0x03, 0x00, 0x10, 0x80, 0x05, 0x3C, 0xC0, 0x9F, 0xE5, 0x0F, 0x00, 0xB7, 0xE8 + .byte 0x0C, 0x60, 0xA0, 0xE1, 0x0F, 0x00, 0xAC, 0xE8, 0x0F, 0x00, 0xB7, 0xE8, 0x0F, 0x00, 0xAC, 0xE8 + .byte 0x00, 0x10, 0x97, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0x8C, 0xE5, 0xC0, 0x60, 0x85, 0xE5 + .byte 0xE6, 0xB5, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x21, 0xBE, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020DDAA8: .word 0x021D6B50 +_020DDAAC: + .byte 0x54, 0x6B, 0x1D, 0x02 + + arm_func_start CTRDGi_TaskThread +CTRDGi_TaskThread: ; 0x020DDAB0 + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x28 + ldr r6, _020DDB94 ; =0x021D6B54 + ldr r5, _020DDB98 ; =0x021D6B50 + mov r4, r0 + add r9, sp, #0x0 + mov r8, #0x0 + mov r7, #0x24 +_020DDAD0: + mov r0, r9 + mov r1, r8 + mov r2, r7 + bl MI_CpuFill8 + bl OS_DisableInterrupts + ldr r1, [r4, #0xc0] + mov r10, r0 + cmp r1, #0x0 + bne _020DDB08 +_020DDAF4: + mov r0, r8 + bl OS_SleepThread + ldr r0, [r4, #0xc0] + cmp r0, #0x0 + beq _020DDAF4 +_020DDB08: + ldr lr, [r4, #0xc0] + add r12, sp, #0x0 + ldmia lr!, {r0-r3} + stmia r12!, {r0-r3} + ldmia lr!, {r0-r3} + stmia r12!, {r0-r3} + ldr r1, [lr, #0x0] + mov r0, r10 + str r1, [r12, #0x0] + bl OS_RestoreInterrupts + ldr r1, [sp, #0x0] + cmp r1, #0x0 + beq _020DDB48 + mov r0, r9 + blx r1 + str r0, [sp, #0x8] +_020DDB48: + bl OS_DisableInterrupts + ldr r1, [sp, #0x4] + mov r10, r0 + strb r8, [r6, #0x22] + cmp r1, #0x0 + beq _020DDB68 + mov r0, r9 + blx r1 +_020DDB68: + ldr r0, [r5, #0x0] + cmp r0, #0x0 + beq _020DDB84 + mov r0, r10 + str r8, [r4, #0xc0] + bl OS_RestoreInterrupts + b _020DDAD0 +_020DDB84: + bl OS_ExitThread + add sp, sp, #0x28 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020DDB94: .word 0x021D6B54 +_020DDB98: .word 0x021D6B50 + + arm_func_start CTRDGi_InitTaskInfo +CTRDGi_InitTaskInfo: + ldr ip, _020DDBAC ; =MI_CpuFill8 + mov r1, #0x0 + mov r2, #0x24 + bx r12 + .balign 4 +_020DDBAC: .word MI_CpuFill8 + + arm_func_start CTRDGi_IsTaskAvailable +CTRDGi_IsTaskAvailable: + ldr r0, _020DDBC8 ; =0x021D6B50 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + bx lr + .balign 4 +_020DDBC8: .word 0x021D6B50 + + arm_func_start CTRDGi_InitTaskThread +CTRDGi_InitTaskThread: ; 0x020DDBCC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020DDC4C ; =0x021D6B50 + mov r4, r0 + ldr r0, [r1, #0x0] + cmp r0, #0x0 + bne _020DDC38 + add r0, r5, #0xc4 + str r5, [r1, #0x0] + bl CTRDGi_InitTaskInfo + ldr r0, _020DDC50 ; =0x021D6B54 + bl CTRDGi_InitTaskInfo +_020DDC04: + .byte 0x00, 0x00, 0xA0, 0xE3, 0xC0, 0x00, 0x85, 0xE5, 0x01, 0x2B, 0xA0, 0xE3 + .byte 0x3C, 0x10, 0x9F, 0xE5, 0x3C, 0x30, 0x9F, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x00, 0x20, 0x8D, 0xE5 + .byte 0x14, 0x20, 0xA0, 0xE3, 0x04, 0x20, 0x8D, 0xE5, 0x05, 0x20, 0xA0, 0xE1, 0x52, 0xB6, 0xFF, 0xEB + .byte 0x05, 0x00, 0xA0, 0xE1, 0x7D, 0xB5, 0xFF, 0xEB +_020DDC38: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DDC4C: .word 0x021D6B50 +_020DDC50: .word 0x021D6B54 +_020DDC54: + .byte 0xB0, 0xDA, 0x0D, 0x02, 0x78, 0x6F, 0x1D, 0x02 + + arm_func_start MATH_CountPopulation +MATH_CountPopulation: ; 0x020DDC5C + ldr r1, _020DDC94 ; =0x55555555 + ldr r2, _020DDC98 ; =0x33333333 + and r1, r1, r0, lsr #0x1 + sub r0, r0, r1 + and r1, r0, r2 + and r0, r2, r0, lsr #0x2 + add r1, r1, r0 + ldr r0, _020DDC9C ; =0x0F0F0F0F + add r1, r1, r1, lsr #0x4 + and r0, r1, r0 + add r0, r0, r0, lsr #0x8 + add r0, r0, r0, lsr #0x10 + and r0, r0, #0xff + bx lr + .balign 4 +_020DDC94: .word 0x55555555 +_020DDC98: .word 0x33333333 +_020DDC9C: .word 0x0F0F0F0F + + arm_func_start MATH_CalcSHA1 +MATH_CalcSHA1: ; 0x020DDCA0 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x68 + mov r6, r0 + add r0, sp, #0x0 + mov r5, r1 + mov r4, r2 + bl MATH_SHA1Init +_020DDCBC: + .byte 0x00, 0x00, 0x8D, 0xE2 + .byte 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0xCF, 0xD4, 0xFF, 0xEB, 0x00, 0x00, 0x8D, 0xE2 + .byte 0x06, 0x10, 0xA0, 0xE1, 0x4D, 0xD4, 0xFF, 0xEB, 0x68, 0xD0, 0x8D, 0xE2, 0x70, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start MATH_CalcMD5 +MATH_CalcMD5: ; 0x020DDCE4 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x58 + mov r6, r0 + add r0, sp, #0x0 + mov r5, r1 + mov r4, r2 + bl MATH_MD5Init +_020DDD00: + .byte 0x00, 0x00, 0x8D, 0xE2, 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0xCC, 0xD3, 0xFF, 0xEB + .byte 0x00, 0x10, 0x8D, 0xE2, 0x06, 0x00, 0xA0, 0xE1, 0x98, 0xD3, 0xFF, 0xEB, 0x58, 0xD0, 0x8D, 0xE2 + .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start MATH_CalcCRC32 +MATH_CalcCRC32: ; 0x020DDD28 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mvn r12, #0x0 + mov r3, r2 + add r1, sp, #0x0 + mov r2, lr + str r12, [sp, #0x0] + bl MATHi_CRC32UpdateRev +_020DDD4C: + .byte 0x00, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0xE0, 0xE1, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start MATH_CalcCRC16CCITT +MATH_CalcCRC16CCITT: ; 0x020DDD60 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020DDD94 ; =0x0000FFFF + mov lr, r1 + mov r3, r2 + add r1, sp, #0x0 + mov r2, lr + strh r12, [sp, #0x0] + bl MATHi_CRC16Update + ldrh r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DDD94: .word 0x0000FFFF + + arm_func_start MATH_CalcCRC16 +MATH_CalcCRC16: ; 0x020DDD98 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r12, #0x0 + mov r3, r2 + add r1, sp, #0x0 + mov r2, lr + strh r12, [sp, #0x0] + bl MATHi_CRC16UpdateRev + ldrh r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start MATH_CalcCRC8 +MATH_CalcCRC8: ; 0x020DDDCC + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r12, #0x0 + mov r3, r2 + add r1, sp, #0x0 + mov r2, lr + strb r12, [sp, #0x0] + bl MATHi_CRC8Update +_020DDDF0: + .byte 0x00, 0x00, 0xDD, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start MATHi_CRC32UpdateRev +MATHi_CRC32UpdateRev: + stmdb sp!, {r4,lr} + cmp r3, #0x0 + ldr r4, [r1, #0x0] + mov lr, #0x0 + bls _020DDE38 +_020DDE14: + ldrb r12, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, r3 + eor r12, r4, r12 + and r12, r12, #0xff + ldr r12, [r0, r12, lsl #0x2] + add r2, r2, #0x1 + eor r4, r12, r4, lsr #0x8 + blo _020DDE14 +_020DDE38: + str r4, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC32InitTableRev +MATHi_CRC32InitTableRev: ; 0x020DDE44 + stmdb sp!, {r4,lr} + mov lr, #0x0 + mov r3, lr +_020DDE50: + mov r4, lr + mov r12, r3 +_020DDE58: + ands r2, r4, #0x1 + eorne r4, r1, r4, lsr #0x1 + add r12, r12, #0x1 + moveq r4, r4, lsr #0x1 + cmp r12, #0x8 + blo _020DDE58 + str r4, [r0, lr, lsl #0x2] + add lr, lr, #0x1 + cmp lr, #0x100 + blo _020DDE50 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC16UpdateRev +MATHi_CRC16UpdateRev: ; 0x020DDE88 + stmdb sp!, {r4,lr} + cmp r3, #0x0 + ldrh r4, [r1, #0x0] + mov lr, #0x0 + bls _020DDEC4 +_020DDE9C: + ldrb r12, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, r3 + eor r12, r4, r12 + and r12, r12, #0xff + mov r12, r12, lsl #0x1 + ldrh r12, [r0, r12] + add r2, r2, #0x1 + eor r4, r12, r4, lsr #0x8 + blo _020DDE9C +_020DDEC4: + strh r4, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC16Update +MATHi_CRC16Update: ; 0x020DDED0 + stmdb sp!, {r4,lr} + cmp r3, #0x0 + ldrh r4, [r1, #0x0] + mov lr, #0x0 + bls _020DDF0C +_020DDEE4: + ldrb r12, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, r3 + eor r12, r12, r4, lsr #0x8 + and r12, r12, #0xff + mov r12, r12, lsl #0x1 + ldrh r12, [r0, r12] + add r2, r2, #0x1 + eor r4, r12, r4, lsl #0x8 + blo _020DDEE4 +_020DDF0C: + strh r4, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC16InitTableRev +MATHi_CRC16InitTableRev: ; 0x020DDF18 + stmdb sp!, {r4,lr} + mov lr, #0x0 + mov r3, lr +_020DDF24: + mov r4, lr + mov r12, r3 +_020DDF2C: + ands r2, r4, #0x1 + eorne r4, r1, r4, lsr #0x1 + add r12, r12, #0x1 + moveq r4, r4, lsr #0x1 + cmp r12, #0x8 + blo _020DDF2C + mov r2, lr, lsl #0x1 + add lr, lr, #0x1 + strh r4, [r0, r2] + cmp lr, #0x100 + blo _020DDF24 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC16InitTable +MATHi_CRC16InitTable: ; 0x020DDF60 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, #0x0 + mov r12, r4 + mov r3, r4 +_020DDF74: + mov r5, r12 + mov lr, r3 +_020DDF7C: + ands r2, r5, #0x8000 + eorne r5, r1, r5, lsl #0x1 + add lr, lr, #0x1 + moveq r5, r5, lsl #0x1 + cmp lr, #0x8 + blo _020DDF7C + mov r2, r4, lsl #0x1 + add r4, r4, #0x1 + strh r5, [r0, r2] + cmp r4, #0x100 + add r12, r12, #0x100 + blo _020DDF74 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start MATHi_CRC8Update +MATHi_CRC8Update: + stmdb sp!, {r4,lr} + cmp r3, #0x0 + ldrb r4, [r1, #0x0] + mov lr, #0x0 + bls _020DDFEC +_020DDFCC: + ldrb r12, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, r3 + eor r12, r4, r12 + and r12, r12, #0xff + add r2, r2, #0x1 + ldrb r4, [r0, r12] + blo _020DDFCC +_020DDFEC: + strb r4, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC8InitTable +MATHi_CRC8InitTable: ; 0x020DDFF8 + stmdb sp!, {r4,lr} + mov lr, #0x0 + mov r3, lr +_020DE004: + mov r4, lr + mov r12, r3 +_020DE00C: + ands r2, r4, #0x80 + eorne r4, r1, r4, lsl #0x1 + add r12, r12, #0x1 + moveq r4, r4, lsl #0x1 + cmp r12, #0x8 + blo _020DE00C + strb r4, [r0, lr] + add lr, lr, #0x1 + cmp lr, #0x100 + blo _020DE004 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start STD_CompareNString +STD_CompareNString: ; 0x020DE03C + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + beq _020DE080 + cmp r2, #0x0 + mov lr, #0x0 + ble _020DE080 +_020DE058: + ldrb r12, [r0, lr] + ldrb r3, [r1, lr] + cmp r12, r3 + addne sp, sp, #0x4 + subne r0, r12, r3 + ldmneia sp!, {lr} + bxne lr + add lr, lr, #0x1 + cmp lr, r2 + blt _020DE058 +_020DE080: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start STD_CompareString +STD_CompareString: ; 0x020DE090 + b _020DE09C +_020DE094: + add r0, r0, #0x1 + add r1, r1, #0x1 +_020DE09C: + ldrsb r2, [r1, #0x0] + ldrsb r3, [r0, #0x0] + cmp r3, r2 + bne _020DE0B4 + cmp r3, #0x0 + bne _020DE094 +_020DE0B4: + sub r0, r3, r2 + bx lr + + arm_func_start STD_GetStringLength +STD_GetStringLength: ; 0x020DE0BC + ldrsb r1, [r0, #0x0] + mov r2, #0x0 + cmp r1, #0x0 + beq _020DE0DC +_020DE0CC: + add r2, r2, #0x1 + ldrsb r1, [r0, r2] + cmp r1, #0x0 + bne _020DE0CC +_020DE0DC: + mov r0, r2 + bx lr + + arm_func_start STD_CopyLString +STD_CopyLString: ; 0x020DE0E4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + sub r12, r2, #0x1 + cmp r12, #0x0 + mov lr, #0x0 + ble _020DE120 +_020DE0FC: + ldrsb r3, [r1, #0x0] + strb r3, [r0, lr] + ldrsb r3, [r1, #0x0] + cmp r3, #0x0 + beq _020DE120 + add lr, lr, #0x1 + cmp lr, r12 + add r1, r1, #0x1 + blt _020DE0FC +_020DE120: + sub r3, r2, #0x1 + cmp lr, r3 + blt _020DE138 + cmp r2, #0x0 + movne r2, #0x0 + strneb r2, [r0, lr] +_020DE138: + mov r0, r1 + bl STD_GetStringLength + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start abort +abort: ; 0x020DE14C + stmdb sp!, {r3,lr} + mov r0, #0x1 + bl raise + ldr r1, _020DE16C ; =0x021D6F78 + mov r0, #0x1 + str r0, [r1, #0xc] + bl exit + ldmia sp!, {r3,pc} + .balign 4 +_020DE16C: .word 0x021D6F78 + + arm_func_start exit +exit: ; 0x020DE170 + stmdb sp!, {r4,lr} + ldr r1, _020DE1B8 ; =0x021D6F78 + mov r4, r0 + ldr r0, [r1, #0xc] + cmp r0, #0x0 + bne _020DE1AC + bl __destroy_global_chain + ldr r0, _020DE1B8 ; =0x021D6F78 + ldr r0, [r0, #0x4] + cmp r0, #0x0 + beq _020DE1AC + blx r0 + ldr r0, _020DE1B8 ; =0x021D6F78 + mov r1, #0x0 + str r1, [r0, #0x4] +_020DE1AC: + mov r0, r4 + bl __exit + ldmia sp!, {r4,pc} + .balign 4 +_020DE1B8: .word 0x021D6F78 + + arm_func_start __exit +__exit: ; 0x020DE1BC + stmdb sp!, {r3-r5,lr} + ldr r0, _020DE2CC ; =0x021D70D0 + bl OS_TryLockMutex +_020DE1C8: + .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A + .byte 0xF8, 0x00, 0x9F, 0xE5, 0xF8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0xF4, 0x00, 0x9F, 0xE5 + .byte 0x6C, 0x30, 0x92, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x00, 0x30, 0x81, 0xE5, 0x00, 0x20, 0x80, 0xE5 + .byte 0x15, 0x00, 0x00, 0xEA, 0xD4, 0x00, 0x9F, 0xE5, 0xD4, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5 + .byte 0x00, 0x10, 0x91, 0xE5, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A + .byte 0xC0, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2, 0x00, 0x10, 0x80, 0xE5 + .byte 0x09, 0x00, 0x00, 0xEA, 0xA0, 0x00, 0x9F, 0xE5, 0x78, 0xB7, 0xFF, 0xEB, 0x9C, 0x00, 0x9F, 0xE5 + .byte 0x9C, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0x98, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5 + .byte 0x01, 0x20, 0xA0, 0xE3, 0x00, 0x30, 0x81, 0xE5, 0x00, 0x20, 0x80, 0xE5, 0x88, 0x40, 0x9F, 0xE5 + .byte 0x08, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0xDA, 0x7C, 0x50, 0x9F, 0xE5 + .byte 0x08, 0x00, 0x94, 0xE5, 0x01, 0x10, 0x40, 0xE2, 0x01, 0x01, 0x95, 0xE7, 0x08, 0x10, 0x84, 0xE5 + .byte 0x30, 0xFF, 0x2F, 0xE1, 0x08, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0xF7, 0xFF, 0xFF, 0xCA + .byte 0x50, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x51, 0xE2, 0x00, 0x10, 0x80, 0xE5 + .byte 0x01, 0x00, 0x00, 0x1A, 0x30, 0x00, 0x9F, 0xE5, 0x40, 0xB7, 0xFF, 0xEB, 0x38, 0x00, 0x9F, 0xE5 + .byte 0x00, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A, 0x30, 0xFF, 0x2F, 0xE1 + .byte 0x24, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x8D, 0x02, 0x00, 0xEB, 0x0E, 0x39, 0x00, 0xEB, 0x38, 0x80, 0xBD, 0xE8 +_020DE2CC: .word 0x021D70D0 +_020DE2D0: + .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0x78, 0x6F, 0x1D, 0x02 + .byte 0x88, 0x6F, 0x1D, 0x02 + + arm_func_start nan +nan: ; 0x020DE2E4 + ldr r0, _020DE2F4 ; =0x02106B78 + ldr ip, _020DE2F8 ; =_f2d + ldr r0, [r0, #0x0] + bx r12 + .balign 4 +_020DE2F4: .word 0x02106B78 +_020DE2F8: .word _f2d + + arm_func_start __flush_line_buffered_output_files +__flush_line_buffered_output_files: ; 0x020DE2FC + stmdb sp!, {r3-r9,lr} + ldr r0, _020DE384 ; =0x02106A58 + mov r4, #0x0 + mov r5, #0x1 + mov r8, r0 + mvn r9, #0x0 + mov r7, r4 + mov r6, #0x4c +_020DE31C: + ldr r1, [r0, #0x4] + mov r2, r1, lsl #0x16 + movs r2, r2, lsr #0x1d + beq _020DE35C + mov r1, r1, lsl #0x19 + mov r1, r1, lsr #0x1e + tst r1, #0x1 + beq _020DE35C + ldr r1, [r0, #0x8] + mov r1, r1, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #0x1 + bne _020DE35C + bl fflush +_020DE354: + .byte 0x00, 0x00, 0x50, 0xE3, 0x09, 0x40, 0xA0, 0x11 +_020DE35C: + cmp r5, #0x3 + movge r0, r7 + bge _020DE374 + mul r0, r5, r6 + add r5, r5, #0x1 + add r0, r8, r0 +_020DE374: + cmp r0, #0x0 + bne _020DE31C + mov r0, r4 + ldmia sp!, {r3-r9,pc} + .balign 4 +_020DE384: .word 0x02106A58 + + arm_func_start __flush_all +__flush_all: ; 0x020DE388 + stmdb sp!, {r3-r9,lr} + ldr r0, _020DE3EC ; =0x02106A58 + mov r4, #0x0 + mov r5, #0x1 + mov r8, r0 + mvn r9, #0x0 + mov r7, r4 + mov r6, #0x4c +_020DE3A8: + ldr r1, [r0, #0x4] + mov r1, r1, lsl #0x16 + movs r1, r1, lsr #0x1d + beq _020DE3C4 + bl fflush +_020DE3BC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x09, 0x40, 0xA0, 0x11 +_020DE3C4: + cmp r5, #0x3 + movge r0, r7 + bge _020DE3DC + mul r0, r5, r6 + add r5, r5, #0x1 + add r0, r8, r0 +_020DE3DC: + cmp r0, #0x0 + bne _020DE3A8 + mov r0, r4 + ldmia sp!, {r3-r9,pc} + .balign 4 +_020DE3EC: .word 0x02106A58 + + arm_func_start abs +abs: ; 0x020DE3F0 + cmp r0, #0x0 + rsblt r0, r0, #0x0 + bx lr + + arm_func_start __msl_assertion_failed +__msl_assertion_failed: ; 0x020DE3FC + stmdb sp!, {r3-r4,lr} + sub sp, sp, #0x4 + mov r4, r0 + mov lr, r1 + mov r12, r2 + str r3, [sp, #0x0] + ldr r0, _020DE434 ; =0x02106B3C + mov r1, r4 + mov r2, lr + mov r3, r12 + bl printf + bl abort + add sp, sp, #0x4 + ldmia sp!, {r3-r4,pc} + .balign 4 +_020DE434: .word 0x02106B3C +__convert_from_newlines: + bx lr + + arm_func_start __convert_to_newlines +__convert_to_newlines: ; 0x020DE43C + bx lr +__prep_buffer: + ldr r1, [r0, #0x1c] + str r1, [r0, #0x24] + ldr r3, [r0, #0x20] + str r3, [r0, #0x28] + ldr r2, [r0, #0x18] + ldr r1, [r0, #0x2c] + and r1, r2, r1 + sub r1, r3, r1 + str r1, [r0, #0x28] + ldr r1, [r0, #0x18] + str r1, [r0, #0x34] + bx lr + + arm_func_start __load_buffer +__load_buffer: ; 0x020DE470 + stmdb sp!, {r4-r6,lr} + mov r5, r2 + mov r4, r0 + mov r6, r1 + bl __prep_buffer + cmp r5, #0x1 + ldreq r0, [r4, #0x20] + add r2, r4, #0x28 + streq r0, [r4, #0x28] + ldr r0, [r4, #0x0] + ldr r1, [r4, #0x1c] + ldr r3, [r4, #0x48] + ldr r12, [r4, #0x3c] + blx r12 + cmp r0, #0x2 + moveq r1, #0x0 + streq r1, [r4, #0x28] + cmp r6, #0x0 + ldrne r1, [r4, #0x28] + strne r1, [r6, #0x0] + cmp r0, #0x0 + ldmneia sp!, {r4-r6,pc} +_020DE4C8: + .byte 0x18, 0x10, 0x94, 0xE5, 0x28, 0x00, 0x94, 0xE5 + .byte 0x00, 0x00, 0x81, 0xE0, 0x18, 0x00, 0x84, 0xE5, 0x04, 0x00, 0x94, 0xE5, 0x80, 0x09, 0xA0, 0xE1 + .byte 0xA0, 0x0F, 0xB0, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x1C, 0x00, 0x94, 0xE5, 0x28, 0x10, 0x84, 0xE2 + .byte 0xD1, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x70, 0x80, 0xBD, 0xE8 +__flush_buffer: + stmdb sp!, {r3-r5,lr} + mov r5, r0 + ldr r2, [r5, #0x24] + ldr r0, [r5, #0x1c] + mov r4, r1 + subs r0, r2, r0 + beq _020DE574 + str r0, [r5, #0x28] + ldr r0, [r5, #0x4] + mov r0, r0, lsl #0x13 + movs r0, r0, lsr #0x1f + bne _020DE538 + ldr r0, [r5, #0x1c] + add r1, r5, #0x28 + bl __convert_from_newlines +_020DE538: + ldr r0, [r5, #0x0] + ldr r1, [r5, #0x1c] + ldr r3, [r5, #0x48] + ldr r12, [r5, #0x40] + add r2, r5, #0x28 + blx r12 + cmp r4, #0x0 + ldrne r1, [r5, #0x28] + strne r1, [r4, #0x0] + cmp r0, #0x0 + ldmneia sp!, {r3-r5,pc} +_020DE564: + .byte 0x18, 0x10, 0x95, 0xE5, 0x28, 0x00, 0x95, 0xE5, 0x00, 0x00, 0x81, 0xE0 + .byte 0x18, 0x00, 0x85, 0xE5 +_020DE574: + mov r0, r5 + bl __prep_buffer +_020DE57C: + .byte 0x00, 0x00, 0xA0, 0xE3 + .byte 0x38, 0x80, 0xBD, 0xE8 + + arm_func_start fread +fread: ; 0x020DE584 + stmdb sp!, {r4-r10,lr} + ldr r4, _020DE67C ; =0x02106A58 + mov r7, r3 + cmp r7, r4 + moveq r6, #0x2 + mov r10, r0 + movne r6, #0x5 + mov r0, #0x18 + mul r4, r6, r0 + ldr r5, _020DE680 ; =0x021D70D0 + mov r9, r1 + add r0, r5, r4 + mov r8, r2 + bl OS_TryLockMutex +_020DE5BC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x08, 0x00, 0x00, 0x1A, 0xB8, 0x00, 0x9F, 0xE5, 0xB8, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5 + .byte 0xB4, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7 + .byte 0x06, 0x11, 0x80, 0xE7, 0x15, 0x00, 0x00, 0xEA, 0x94, 0x00, 0x9F, 0xE5, 0x94, 0x10, 0x9F, 0xE5 + .byte 0x04, 0x00, 0x90, 0xE5, 0x06, 0x11, 0x91, 0xE7, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1 + .byte 0x04, 0x00, 0x00, 0x1A, 0x80, 0x10, 0x9F, 0xE5, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x80, 0xE2 + .byte 0x06, 0x01, 0x81, 0xE7, 0x09, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x85, 0xE0, 0x7B, 0xB6, 0xFF, 0xEB + .byte 0x5C, 0x00, 0x9F, 0xE5, 0x5C, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0x58, 0x00, 0x9F, 0xE5 + .byte 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7 + .byte 0x0A, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x07, 0x30, 0xA0, 0xE1 + .byte 0x0E, 0x00, 0x00, 0xEB, 0x30, 0x10, 0x9F, 0xE5, 0x00, 0x70, 0xA0, 0xE1, 0x06, 0x01, 0x91, 0xE7 + .byte 0x01, 0x00, 0x50, 0xE2, 0x06, 0x01, 0x81, 0xE7, 0x01, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x85, 0xE0 + .byte 0x4A, 0xB6, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1, 0xF0, 0x87, 0xBD, 0xE8 +_020DE67C: .word 0x02106A58 +_020DE680: .word 0x021D70D0 +_020DE684: + .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 + + arm_func_start __fread +__fread: ; 0x020DE690 + stmdb sp!, {r3-r10,lr} + sub sp, sp, #0x4 + mov r7, r3 + mov r9, r0 + mov r8, r1 + mov r0, r7 + mov r1, #0x0 + mov r4, r2 + bl fwide +_020DE6B4: + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x07, 0x00, 0xA0, 0xE1 + .byte 0x00, 0x10, 0xE0, 0xE3, 0x4A, 0x1A, 0x00, 0xEB, 0x98, 0x04, 0x14, 0xE0, 0x06, 0x00, 0x00, 0x0A + .byte 0x0D, 0x00, 0xD7, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x04, 0x10, 0x97, 0xE5 + .byte 0x01, 0x0B, 0xA0, 0xE1, 0xA0, 0x0E, 0xB0, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0x00, 0x00, 0xA0, 0xE3, 0xF8, 0x87, 0xBD, 0xE8, 0x81, 0x09, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1 + .byte 0x81, 0x0C, 0xA0, 0x11, 0x20, 0x0F, 0xA0, 0x11, 0x08, 0x10, 0x97, 0xE5, 0x02, 0x00, 0x50, 0x13 + .byte 0x01, 0x60, 0xA0, 0xE3, 0x81, 0x0E, 0xA0, 0xE1, 0x00, 0x60, 0xA0, 0x13, 0xA0, 0x0E, 0xB0, 0xE1 + .byte 0x09, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x97, 0xE5, 0x80, 0x0D, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 + .byte 0x01, 0x00, 0x10, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x07, 0x00, 0xC1, 0xE3, 0x02, 0x00, 0x80, 0xE3 + .byte 0x08, 0x00, 0x87, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x87, 0xE5, 0x08, 0x00, 0x97, 0xE5 + .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x02, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x2A + .byte 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC7, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0x28, 0x00, 0x87, 0xE5, 0xF8, 0x87, 0xBD, 0xE8, 0x04, 0x00, 0x97, 0xE5, 0x80, 0x0C, 0xA0, 0xE1 + .byte 0x20, 0x0F, 0xA0, 0xE1, 0x01, 0x00, 0x10, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0xDA, 0xFE, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC7, 0xE5 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2, 0x28, 0x00, 0x87, 0xE5, 0xF8, 0x87, 0xBD, 0xE8 + .byte 0x00, 0x00, 0x54, 0xE3, 0x00, 0x50, 0xA0, 0xE3, 0x2D, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x97, 0xE5 + .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x03, 0x00, 0x50, 0xE3, 0x28, 0x00, 0x00, 0x3A + .byte 0x05, 0xA0, 0xA0, 0xE1, 0x07, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0x04, 0x1A, 0x00, 0xEB + .byte 0x01, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x97, 0xE5, 0x06, 0x00, 0x00, 0x1A, 0x80, 0x0E, 0xA0, 0xE1 + .byte 0x20, 0x0E, 0x87, 0xE0, 0xBE, 0x00, 0xD0, 0xE1, 0x02, 0x50, 0x85, 0xE2, 0x02, 0x40, 0x44, 0xE2 + .byte 0xB2, 0x00, 0xC9, 0xE0, 0x05, 0x00, 0x00, 0xEA, 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0x87, 0xE0 + .byte 0x0F, 0x00, 0xD0, 0xE5, 0x01, 0x50, 0x85, 0xE2, 0x01, 0x40, 0x44, 0xE2, 0x01, 0x00, 0xC9, 0xE4 + .byte 0x08, 0x10, 0x97, 0xE5, 0x00, 0x00, 0x54, 0xE3, 0x81, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 + .byte 0x01, 0x00, 0x40, 0xE2, 0x07, 0x10, 0xC1, 0xE3, 0x07, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x81, 0xE1 + .byte 0x08, 0x00, 0x87, 0xE5, 0x04, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x97, 0xE5, 0x80, 0x0E, 0xA0, 0xE1 + .byte 0xA0, 0x0E, 0xA0, 0xE1, 0x03, 0x00, 0x50, 0xE3, 0xDD, 0xFF, 0xFF, 0x2A, 0x08, 0x00, 0x97, 0xE5 + .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x02, 0x00, 0x50, 0xE3, 0x30, 0x00, 0x97, 0x05 + .byte 0x28, 0x00, 0x87, 0x05, 0x00, 0x00, 0x54, 0xE3, 0x2E, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x97, 0xE5 + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x56, 0x03, 0x2A, 0x00, 0x00, 0x0A, 0x00, 0xA0, 0xA0, 0xE3 + .byte 0x28, 0x00, 0x97, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x11, 0x00, 0x00, 0x1A, 0x07, 0x00, 0xA0, 0xE1 + .byte 0x0A, 0x10, 0xA0, 0xE1, 0x0A, 0x20, 0xA0, 0xE1, 0xF0, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x0B, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC7, 0x05 + .byte 0x03, 0x00, 0x00, 0x0A, 0x08, 0x10, 0x97, 0xE5, 0x07, 0x10, 0xC1, 0xE3, 0x08, 0x10, 0x87, 0xE5 + .byte 0x0C, 0x00, 0xC7, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x87, 0xE5, 0x00, 0x40, 0xA0, 0xE3 + .byte 0x14, 0x00, 0x00, 0xEA, 0x28, 0x00, 0x97, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x04, 0x00, 0x50, 0xE1 + .byte 0x00, 0x40, 0x8D, 0x85, 0x24, 0x10, 0x97, 0xE5, 0x00, 0x20, 0x9D, 0xE5, 0x09, 0x00, 0xA0, 0xE1 + .byte 0xCC, 0x02, 0x00, 0xEB, 0x00, 0x20, 0x9D, 0xE5, 0x24, 0x00, 0x97, 0xE5, 0x02, 0x40, 0x54, 0xE0 + .byte 0x02, 0x00, 0x80, 0xE0, 0x24, 0x00, 0x87, 0xE5, 0x28, 0x10, 0x97, 0xE5, 0x00, 0x00, 0x9D, 0xE5 + .byte 0x02, 0x90, 0x89, 0xE0, 0x00, 0x00, 0x41, 0xE0, 0x02, 0x50, 0x85, 0xE0, 0x28, 0x00, 0x87, 0xE5 + .byte 0x00, 0x00, 0x56, 0x13, 0xD5, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x54, 0xE3, 0x20, 0x00, 0x00, 0x0A + .byte 0x00, 0x00, 0x56, 0xE3, 0x1E, 0x00, 0x00, 0x1A, 0x1C, 0x60, 0x97, 0xE5, 0x20, 0xA0, 0x97, 0xE5 + .byte 0x00, 0x10, 0x8D, 0xE2, 0x1C, 0x90, 0x87, 0xE5, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE3 + .byte 0x20, 0x40, 0x87, 0xE5, 0xC1, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x00, 0x0A + .byte 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x0D, 0x00, 0xC7, 0xE5 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x87, 0xE5, 0x05, 0x00, 0x00, 0xEA, 0x08, 0x10, 0x97, 0xE5 + .byte 0x07, 0x10, 0xC1, 0xE3, 0x08, 0x10, 0x87, 0xE5, 0x0C, 0x00, 0xC7, 0xE5, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x28, 0x00, 0x87, 0xE5, 0x00, 0x10, 0x9D, 0xE5, 0x07, 0x00, 0xA0, 0xE1, 0x1C, 0x60, 0x87, 0xE5 + .byte 0x20, 0xA0, 0x87, 0xE5, 0x01, 0x50, 0x85, 0xE0, 0xA0, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x28, 0x00, 0x87, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0xA0, 0xE1, 0x2E, 0x35, 0x00, 0xEB + .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF8, 0x87, 0xBD, 0xE8 +__fwrite: + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x8 + mov r9, r3 + mov r10, r0 + str r1, [sp, #0x0] + mov r0, r9 + mov r1, #0x0 + mov r4, r2 + bl fwide +_020DE9FC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x02, 0x00, 0x00, 0x1A, 0x09, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xE0, 0xE3, 0x78, 0x19, 0x00, 0xEB + .byte 0x00, 0x00, 0x9D, 0xE5, 0x90, 0x04, 0x15, 0xE0, 0x06, 0x00, 0x00, 0x0A, 0x0D, 0x00, 0xD9, 0xE5 + .byte 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x04, 0x10, 0x99, 0xE5, 0x01, 0x0B, 0xA0, 0xE1 + .byte 0xA0, 0x0E, 0xB0, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x08, 0xD0, 0x8D, 0xE2, 0x00, 0x00, 0xA0, 0xE3 + .byte 0xF8, 0x8F, 0xBD, 0xE8, 0x81, 0x09, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1, 0x81, 0x0C, 0xA0, 0x11 + .byte 0x20, 0x0F, 0xA0, 0x11, 0x02, 0x00, 0x50, 0x13, 0x08, 0x10, 0x99, 0xE5, 0x01, 0x00, 0x50, 0x13 + .byte 0x01, 0x80, 0xA0, 0xE3, 0x81, 0x0E, 0xA0, 0xE1, 0x00, 0x80, 0xA0, 0x13, 0xA0, 0x0E, 0xB0, 0xE1 + .byte 0x09, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x99, 0xE5, 0x80, 0x0D, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 + .byte 0x02, 0x00, 0x10, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x07, 0x00, 0xC1, 0xE3, 0x01, 0x10, 0x80, 0xE3 + .byte 0x09, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0x89, 0xE5, 0x68, 0xFE, 0xFF, 0xEB, 0x08, 0x00, 0x99, 0xE5 + .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A + .byte 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC9, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x08, 0xD0, 0x8D, 0xE2 + .byte 0x28, 0x00, 0x89, 0xE5, 0xF8, 0x8F, 0xBD, 0xE8, 0x00, 0x00, 0x55, 0xE3, 0x00, 0x60, 0xA0, 0xE3 + .byte 0x46, 0x00, 0x00, 0x0A, 0x1C, 0x00, 0x99, 0xE5, 0x24, 0x20, 0x99, 0xE5, 0x00, 0x00, 0x52, 0xE1 + .byte 0x00, 0x00, 0x58, 0x03, 0x41, 0x00, 0x00, 0x0A, 0x20, 0x10, 0x99, 0xE5, 0x00, 0x00, 0x42, 0xE0 + .byte 0x00, 0x00, 0x41, 0xE0, 0x28, 0x00, 0x89, 0xE5, 0x0A, 0xB0, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3 + .byte 0x28, 0x00, 0x99, 0xE5, 0x04, 0x70, 0xA0, 0xE1, 0x04, 0x00, 0x8D, 0xE5, 0x05, 0x00, 0x50, 0xE1 + .byte 0x04, 0x50, 0x8D, 0x85, 0x04, 0x00, 0x99, 0xE5, 0x80, 0x0C, 0xA0, 0xE1, 0x20, 0x0F, 0xA0, 0xE1 + .byte 0x01, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x1A, 0x04, 0x20, 0x9D, 0xE5, 0x00, 0x00, 0x52, 0xE3 + .byte 0x06, 0x00, 0x00, 0x0A, 0x0A, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x68, 0x02, 0x00, 0xEB + .byte 0x00, 0x70, 0xB0, 0xE1, 0x01, 0x00, 0x87, 0x12, 0x0A, 0x00, 0x40, 0x10, 0x04, 0x00, 0x8D, 0x15 + .byte 0x04, 0x20, 0x9D, 0xE5, 0x00, 0x00, 0x52, 0xE3, 0x0C, 0x00, 0x00, 0x0A, 0x24, 0x00, 0x99, 0xE5 + .byte 0x0A, 0x10, 0xA0, 0xE1, 0x33, 0x02, 0x00, 0xEB, 0x04, 0x20, 0x9D, 0xE5, 0x24, 0x00, 0x99, 0xE5 + .byte 0x02, 0xA0, 0x8A, 0xE0, 0x02, 0x00, 0x80, 0xE0, 0x24, 0x00, 0x89, 0xE5, 0x28, 0x10, 0x99, 0xE5 + .byte 0x04, 0x00, 0x9D, 0xE5, 0x02, 0x50, 0x45, 0xE0, 0x00, 0x00, 0x41, 0xE0, 0x28, 0x00, 0x89, 0xE5 + .byte 0x28, 0x00, 0x99, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x57, 0xE3 + .byte 0x03, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x99, 0xE5, 0x80, 0x0C, 0xA0, 0xE1, 0x20, 0x0F, 0xB0, 0xE1 + .byte 0x09, 0x00, 0x00, 0x1A, 0x09, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x4E, 0xFE, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC9, 0xE5 + .byte 0x00, 0x50, 0xA0, 0xE3, 0x28, 0x50, 0x89, 0xE5, 0x04, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x55, 0xE3, 0x00, 0x60, 0x86, 0xE0, 0x00, 0x00, 0x58, 0x13, 0xC3, 0xFF, 0xFF, 0x1A + .byte 0x00, 0x00, 0x55, 0xE3, 0x18, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x58, 0xE3, 0x16, 0x00, 0x00, 0x1A + .byte 0x1C, 0x40, 0x99, 0xE5, 0x20, 0x70, 0x99, 0xE5, 0x05, 0x20, 0x8A, 0xE0, 0x1C, 0xA0, 0x89, 0xE5 + .byte 0x20, 0x50, 0x89, 0xE5, 0x04, 0x10, 0x8D, 0xE2, 0x09, 0x00, 0xA0, 0xE1, 0x24, 0x20, 0x89, 0xE5 + .byte 0x35, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x9D, 0x05, 0x00, 0x60, 0x86, 0x00 + .byte 0x03, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC9, 0xE5, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x28, 0x00, 0x89, 0xE5, 0x1C, 0x40, 0x89, 0xE5, 0x09, 0x00, 0xA0, 0xE1, 0x20, 0x70, 0x89, 0xE5 + .byte 0xFA, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x89, 0xE5, 0x04, 0x00, 0x99, 0xE5 + .byte 0x00, 0x10, 0x9D, 0xE5, 0x80, 0x0C, 0xA0, 0xE1, 0x20, 0x0F, 0xA0, 0xE1, 0x02, 0x00, 0x50, 0xE3 + .byte 0x00, 0x00, 0xA0, 0x13, 0x28, 0x00, 0x89, 0x15, 0x06, 0x00, 0xA0, 0xE1, 0x82, 0x34, 0x00, 0xEB + .byte 0x08, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 + + arm_func_start fclose +fclose: ; 0x020DEC88 + stmdb sp!, {r3-r5,lr} + movs r5, r0 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020DEC98: + .byte 0x04, 0x10, 0x95, 0xE5, 0x01, 0x1B, 0xA0, 0xE1 + .byte 0xA1, 0x1E, 0xB0, 0xE1, 0x00, 0x00, 0xA0, 0x03, 0x38, 0x80, 0xBD, 0x08, 0x12, 0x00, 0x00, 0xEB + .byte 0x00, 0x40, 0xA0, 0xE1, 0x00, 0x00, 0x95, 0xE5, 0x44, 0x10, 0x95, 0xE5, 0x31, 0xFF, 0x2F, 0xE1 + .byte 0x04, 0x10, 0x95, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x0E, 0x1D, 0xC1, 0xE3, 0x04, 0x10, 0x85, 0xE5 + .byte 0x00, 0x20, 0x85, 0xE5, 0x08, 0x10, 0x95, 0xE5, 0x01, 0x1E, 0xA0, 0xE1, 0xA1, 0x1F, 0xB0, 0xE1 + .byte 0x01, 0x00, 0x42, 0x12, 0x38, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x54, 0xE3, 0x00, 0x00, 0x50, 0x03 + .byte 0x01, 0x20, 0xA0, 0x13, 0x00, 0x00, 0x62, 0xE2, 0x38, 0x80, 0xBD, 0xE8 + + arm_func_start fflush +fflush: + stmdb sp!, {r4,lr} + movs r4, r0 + bne _020DED10 + bl __flush_all + ldmia sp!, {r4,pc} +_020DED10: + ldrb r0, [r4, #0xd] + cmp r0, #0x0 + bne _020DED2C + ldr r0, [r4, #0x4] + mov r1, r0, lsl #0x16 + movs r1, r1, lsr #0x1d + bne _020DED34 +_020DED2C: + mvn r0, #0x0 + ldmia sp!, {r4,pc} +_020DED34: + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + cmp r0, #0x1 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020DED48: + .byte 0x08, 0x00, 0x94, 0xE5, 0x80, 0x1E, 0xA0, 0xE1 + .byte 0xA1, 0x1E, 0xA0, 0xE1, 0x03, 0x00, 0x51, 0xE3, 0x07, 0x00, 0xC0, 0x23, 0x02, 0x00, 0x80, 0x23 + .byte 0x08, 0x00, 0x84, 0x25, 0x08, 0x00, 0x94, 0xE5, 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 + .byte 0x02, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x03, 0x28, 0x00, 0x84, 0x05, 0x08, 0x00, 0x94, 0xE5 + .byte 0x80, 0x1E, 0xA0, 0xE1, 0xA1, 0x1E, 0xA0, 0xE1, 0x01, 0x00, 0x51, 0xE3, 0x03, 0x00, 0x00, 0x0A + .byte 0x07, 0x00, 0xC0, 0xE3, 0x08, 0x00, 0x84, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x80, 0xBD, 0xE8 + .byte 0x04, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0xD3, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x10, 0xA0, 0xE3, 0x0D, 0x10, 0xC4, 0xE5 + .byte 0x28, 0x00, 0x84, 0xE5, 0x01, 0x00, 0x40, 0xE2, 0x10, 0x80, 0xBD, 0xE8, 0x08, 0x10, 0x94, 0xE5 + .byte 0x07, 0x10, 0xC1, 0xE3, 0x08, 0x10, 0x84, 0xE5, 0x18, 0x00, 0x84, 0xE5, 0x28, 0x00, 0x84, 0xE5 + .byte 0x10, 0x80, 0xBD, 0xE8 + + arm_func_start _ftell +_ftell: ; 0x020DEDE4 + ldr r1, [r0, #0x4] + mov r1, r1, lsl #0x16 + mov r1, r1, lsr #0x1d + and r1, r1, #0xff + add r1, r1, #0xff + and r1, r1, #0xff + cmp r1, #0x1 + bhi _020DEE10 + ldrb r1, [r0, #0xd] + cmp r1, #0x0 + beq _020DEE24 +_020DEE10: + ldr r0, _020DEE5C ; =0x021D74A8 + mov r1, #0x28 + str r1, [r0, #0x0] + sub r0, r1, #0x29 + bx lr +_020DEE24: + ldr r1, [r0, #0x8] + mov r1, r1, lsl #0x1d + movs r12, r1, lsr #0x1d + ldreq r0, [r0, #0x18] + bxeq lr + ldr r2, [r0, #0x24] + ldr r1, [r0, #0x1c] + ldr r3, [r0, #0x34] + sub r0, r2, r1 + cmp r12, #0x3 + add r0, r3, r0 + subcs r1, r12, #0x2 + subcs r0, r0, r1 + bx lr + .balign 4 +_020DEE5C: .word 0x021D74A8 + + arm_func_start ftell +ftell: ; 0x020DEE60 + stmdb sp!, {r3-r7,lr} + ldr r1, _020DEF60 ; =0x02106A58 + mov r7, r0 + cmp r7, r1 + moveq r6, #0x2 + beq _020DEE98 + ldr r0, _020DEF64 ; =0x02106AA4 + cmp r7, r0 + moveq r6, #0x3 + beq _020DEE98 + ldr r0, _020DEF68 ; =0x02106AF0 + cmp r7, r0 + moveq r6, #0x4 + movne r6, #0x5 +_020DEE98: + mov r0, #0x18 + mul r4, r6, r0 + ldr r5, _020DEF6C ; =0x021D70D0 + add r0, r5, r4 + bl OS_TryLockMutex +_020DEEAC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x08, 0x00, 0x00, 0x1A, 0xB4, 0x00, 0x9F, 0xE5, 0xB4, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5 + .byte 0xB0, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7 + .byte 0x06, 0x11, 0x80, 0xE7, 0x15, 0x00, 0x00, 0xEA, 0x90, 0x00, 0x9F, 0xE5, 0x90, 0x10, 0x9F, 0xE5 + .byte 0x04, 0x00, 0x90, 0xE5, 0x06, 0x11, 0x91, 0xE7, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1 + .byte 0x04, 0x00, 0x00, 0x1A, 0x7C, 0x10, 0x9F, 0xE5, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x80, 0xE2 + .byte 0x06, 0x01, 0x81, 0xE7, 0x09, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x85, 0xE0, 0x3F, 0xB4, 0xFF, 0xEB + .byte 0x58, 0x00, 0x9F, 0xE5, 0x58, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0x54, 0x00, 0x9F, 0xE5 + .byte 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7 + .byte 0x07, 0x00, 0xA0, 0xE1, 0xAA, 0xFF, 0xFF, 0xEB, 0x38, 0x10, 0x9F, 0xE5, 0x00, 0x70, 0xA0, 0xE1 + .byte 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x50, 0xE2, 0x06, 0x01, 0x81, 0xE7, 0x01, 0x00, 0x00, 0x1A + .byte 0x04, 0x00, 0x85, 0xE0, 0x11, 0xB4, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1, 0xF8, 0x80, 0xBD, 0xE8 +_020DEF60: .word 0x02106A58 +_020DEF64: .word 0x02106AA4 +_020DEF68: .word 0x02106AF0 +_020DEF6C: .word 0x021D70D0 +_020DEF70: + .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 + + arm_func_start _fseek +_fseek: ; 0x020DEF7C + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r5,lr} + mov r5, r0 + ldr r1, [r5, #0x4] + mov r4, r2 + mov r1, r1, lsl #0x16 + mov r1, r1, lsr #0x1d + and r1, r1, #0xff + cmp r1, #0x1 + ldreqb r1, [r5, #0xd] + cmpeq r1, #0x0 + beq _020DEFC8 + ldr r0, _020DF160 ; =0x021D74A8 + mov r1, #0x28 + str r1, [r0, #0x0] + sub r0, r1, #0x29 + ldmia sp!, {r3-r5,lr} + add sp, sp, #0x10 + bx lr +_020DEFC8: + ldr r1, [r5, #0x8] + mov r1, r1, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #0x1 + bne _020DF018 + mov r1, #0x0 + bl __flush_buffer +_020DEFE4: + .byte 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3 + .byte 0x0D, 0x00, 0xC5, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x60, 0x01, 0x9F, 0xE5, 0x28, 0x10, 0xA0, 0xE3 + .byte 0x28, 0x20, 0x85, 0xE5, 0x00, 0x10, 0x80, 0xE5, 0x29, 0x00, 0x41, 0xE2, 0x38, 0x40, 0xBD, 0xE8 + .byte 0x10, 0xD0, 0x8D, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1 +_020DF018: + cmp r4, #0x1 + bne _020DF038 + mov r0, r5 + mov r4, #0x0 + bl _ftell + ldr r1, [sp, #0x14] + add r0, r1, r0 + str r0, [sp, #0x14] +_020DF038: + cmp r4, #0x2 + beq _020DF0CC + ldr r0, [r5, #0x4] + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + cmp r0, #0x3 + beq _020DF0CC + ldr r0, [r5, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + sub r0, r0, #0x2 + cmp r0, #0x1 + bhi _020DF0CC + ldr r2, [sp, #0x14] + ldr r0, [r5, #0x18] + cmp r2, r0 + bhs _020DF088 + ldr r0, [r5, #0x34] + cmp r2, r0 + bhs _020DF098 +_020DF088: + ldr r0, [r5, #0x8] + bic r0, r0, #0x7 + str r0, [r5, #0x8] + b _020DF0D8 +_020DF098: + ldr r1, [r5, #0x1c] + sub r0, r2, r0 + add r0, r1, r0 + str r0, [r5, #0x24] + ldr r1, [r5, #0x18] + ldr r0, [sp, #0x14] + sub r0, r1, r0 + str r0, [r5, #0x28] + ldr r0, [r5, #0x8] + bic r0, r0, #0x7 + orr r0, r0, #0x2 + str r0, [r5, #0x8] + b _020DF0D8 +_020DF0CC: + ldr r0, [r5, #0x8] + bic r0, r0, #0x7 + str r0, [r5, #0x8] +_020DF0D8: + ldr r0, [r5, #0x8] + mov r0, r0, lsl #0x1d + movs r0, r0, lsr #0x1d + bne _020DF150 + ldr r12, [r5, #0x38] + cmp r12, #0x0 + beq _020DF13C + ldr r0, [r5, #0x0] + ldr r3, [r5, #0x48] + add r1, sp, #0x14 + mov r2, r4 + blx r12 + cmp r0, #0x0 + beq _020DF13C + mov r0, #0x1 + strb r0, [r5, #0xd] + mov r2, #0x0 + ldr r0, _020DF160 ; =0x021D74A8 + mov r1, #0x28 + str r2, [r5, #0x28] + str r1, [r0, #0x0] + sub r0, r1, #0x29 + ldmia sp!, {r3-r5,lr} + add sp, sp, #0x10 + bx lr +_020DF13C: + mov r1, #0x0 + strb r1, [r5, #0xc] + ldr r0, [sp, #0x14] + str r0, [r5, #0x18] + str r1, [r5, #0x28] +_020DF150: + mov r0, #0x0 + ldmia sp!, {r3-r5,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020DF160: .word 0x021D74A8 + + arm_func_start fseek +fseek: + stmdb sp!, {r3-r9,lr} + ldr r3, _020DF274 ; =0x02106A58 + mov r9, r0 + cmp r9, r3 + mov r8, r1 + mov r7, r2 + moveq r6, #0x2 + beq _020DF1A4 + ldr r0, _020DF278 ; =0x02106AA4 + cmp r9, r0 + moveq r6, #0x3 + beq _020DF1A4 + ldr r0, _020DF27C ; =0x02106AF0 + cmp r9, r0 + moveq r6, #0x4 + movne r6, #0x5 +_020DF1A4: + mov r0, #0x18 + mul r4, r6, r0 + ldr r5, _020DF280 ; =0x021D70D0 + add r0, r5, r4 + bl OS_TryLockMutex +_020DF1B8: + .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A + .byte 0xBC, 0x00, 0x9F, 0xE5, 0xBC, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0xB8, 0x00, 0x9F, 0xE5 + .byte 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7 + .byte 0x15, 0x00, 0x00, 0xEA, 0x98, 0x00, 0x9F, 0xE5, 0x98, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5 + .byte 0x06, 0x11, 0x91, 0xE7, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A + .byte 0x84, 0x10, 0x9F, 0xE5, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x80, 0xE2, 0x06, 0x01, 0x81, 0xE7 + .byte 0x09, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x85, 0xE0, 0x7C, 0xB3, 0xFF, 0xEB, 0x60, 0x00, 0x9F, 0xE5 + .byte 0x60, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0x5C, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x91, 0xE5 + .byte 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7, 0x09, 0x00, 0xA0, 0xE1 + .byte 0x08, 0x10, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0x4B, 0xFF, 0xFF, 0xEB, 0x38, 0x10, 0x9F, 0xE5 + .byte 0x00, 0x70, 0xA0, 0xE1, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x50, 0xE2, 0x06, 0x01, 0x81, 0xE7 + .byte 0x01, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x85, 0xE0, 0x4C, 0xB3, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1 + .byte 0xF8, 0x83, 0xBD, 0xE8 +_020DF274: .word 0x02106A58 +_020DF278: .word 0x02106AA4 +_020DF27C: .word 0x02106AF0 +_020DF280: .word 0x021D70D0 +_020DF284: + .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 + + arm_func_start rewind +rewind: ; 0x020DF290 + stmdb sp!, {r4,lr} + mov r1, #0x0 + mov r4, r0 + mov r2, r1 + strb r1, [r4, #0xd] + bl fseek +_020DF2A8: + .byte 0x00, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC4, 0xE5 + .byte 0x10, 0x80, 0xBD, 0xE8 + + arm_func_start mbtowc +mbtowc: + stmdb sp!, {r3,lr} + ldr r3, _020DF2CC ; =0x02106C98 + ldr r3, [r3, #0x8] + ldr r3, [r3, #0x0] + blx r3 + ldmia sp!, {r3,pc} + .balign 4 +_020DF2CC: .word 0x02106C98 + + arm_func_start __mbtowc_noconv +__mbtowc_noconv: ; 0x020DF2D0 + cmp r1, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r2, #0x0 + mvneq r0, #0x0 + bxeq lr + cmp r0, #0x0 + ldrneb r2, [r1, #0x0] + strneh r2, [r0, #0x0] + ldrsb r0, [r1, #0x0] + cmp r0, #0x0 + moveq r0, #0x0 + movne r0, #0x1 + bx lr + + arm_func_start __wctomb_noconv +__wctomb_noconv: ; 0x020DF308 + cmp r0, #0x0 + moveq r0, #0x0 + strneb r1, [r0, #0x0] + movne r0, #0x1 + bx lr + + arm_func_start wctomb +wctomb: ; 0x020DF31C + stmdb sp!, {r3,lr} + ldr r2, _020DF334 ; =0x02106C98 + ldr r2, [r2, #0x8] + ldr r2, [r2, #0x4] + blx r2 + ldmia sp!, {r3,pc} + .balign 4 +_020DF334: .word 0x02106C98 + + arm_func_start mbstowcs +mbstowcs: ; 0x020DF338 + stmdb sp!, {r4-r8,lr} + mov r7, r1 + mov r8, r0 + mov r0, r7 + mov r6, r2 + bl strlen + mov r5, r0 + cmp r8, #0x0 + mov r4, #0x0 + beq _020DF3B8 + cmp r6, #0x0 + bls _020DF3B8 + ldrsb r0, [r7, #0x0] + cmp r0, #0x0 + beq _020DF3A0 + mov r0, r8 + mov r1, r7 + mov r2, r5 + bl mbtowc +_020DF384: + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x80, 0x88, 0xE2, 0x00, 0x70, 0x87, 0xC0 + .byte 0x00, 0x50, 0x45, 0xC0, 0x04, 0x00, 0x00, 0xCA, 0x00, 0x00, 0xE0, 0xE3, 0xF0, 0x81, 0xBD, 0xE8 +_020DF3A0: + mov r0, #0x0 + strh r0, [r8, #0x0] + b _020DF3B8 +_020DF3AC: + .byte 0x01, 0x40, 0x84, 0xE2 + .byte 0x06, 0x00, 0x54, 0xE1, 0xEB, 0xFF, 0xFF, 0x3A +_020DF3B8: + mov r0, r4 + ldmia sp!, {r4-r8,pc} + + arm_func_start wcstombs +wcstombs: ; 0x020DF3C0 + stmdb sp!, {r3-r9,lr} + movs r4, r0 + mov r9, r1 + cmpne r9, #0x0 + mov r8, r2 + mov r7, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r3-r9,pc} +_020DF3E0: + .byte 0x00, 0x60, 0x8D, 0xE2, 0xB0, 0x10, 0xD9, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x00, 0x00, 0xA0, 0x03 + .byte 0x07, 0x00, 0xC4, 0x07, 0x0D, 0x00, 0x00, 0x0A, 0x06, 0x00, 0xA0, 0xE1, 0x02, 0x90, 0x89, 0xE2 + .byte 0xC5, 0xFF, 0xFF, 0xEB, 0x00, 0x50, 0xA0, 0xE1, 0x05, 0x00, 0x87, 0xE0, 0x08, 0x00, 0x50, 0xE1 + .byte 0x06, 0x00, 0x00, 0x8A, 0x06, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x07, 0x00, 0x84, 0xE0 + .byte 0xDA, 0x0E, 0x00, 0xEB, 0x05, 0x70, 0x87, 0xE0, 0x08, 0x00, 0x57, 0xE1, 0xEC, 0xFF, 0xFF, 0x9A + .byte 0x07, 0x00, 0xA0, 0xE1, 0xF8, 0x83, 0xBD, 0xE8 + + arm_func_start memcpy +memcpy: ; 0x020DF438 + mov r12, r0 + cmp r2, #0x0 + bxeq lr +_020DF444: + ldrsb r3, [r1], #0x1 + subs r2, r2, #0x1 + strb r3, [r12], #0x1 + bne _020DF444 + bx lr + + arm_func_start memmove +memmove: ; 0x020DF458 + cmp r1, r0 + blo _020DF480 + mov r12, r0 + cmp r2, #0x0 + bxeq lr +_020DF46C: + ldrsb r3, [r1], #0x1 + subs r2, r2, #0x1 + strb r3, [r12], #0x1 + bne _020DF46C + bx lr +_020DF480: + cmp r2, #0x0 + add r3, r1, r2 + add r12, r0, r2 + bxeq lr +_020DF490: + ldrsb r1, [r3, #-0x1]! + subs r2, r2, #0x1 + strb r1, [r12, #-0x1]! + bne _020DF490 + bx lr + + arm_func_start Call_FillMemWithValue +Call_FillMemWithValue: ; 0x020DF4A4 + stmdb sp!, {r4,lr} + mov r4, r0 + bl __fill_mem + mov r0, r4 + ldmia sp!, {r4,pc} + + arm_func_start memchr +memchr: ; 0x020DF4B8 + cmp r2, #0x0 + and r3, r1, #0xff + beq _020DF4DC +_020DF4C4: + ldrb r1, [r0], #0x1 + cmp r1, r3 + subeq r0, r0, #0x1 + bxeq lr + subs r2, r2, #0x1 + bne _020DF4C4 +_020DF4DC: + mov r0, #0x0 + bx lr + + arm_func_start __memrchr +__memrchr: ; 0x020DF4E4 + cmp r2, #0x0 + and r3, r1, #0xff + add r0, r0, r2 + beq _020DF508 +_020DF4F4: + ldrb r1, [r0, #-0x1]! + cmp r1, r3 + bxeq lr + subs r2, r2, #0x1 + bne _020DF4F4 +_020DF508: + mov r0, #0x0 + bx lr + + arm_func_start memcmp +memcmp: ; 0x020DF510 + cmp r2, #0x0 + beq _020DF548 +_020DF518: + ldrb r12, [r0], #0x1 + ldrb r3, [r1], #0x1 + cmp r12, r3 + beq _020DF540 + ldrb r2, [r0, #-0x1] + ldrb r0, [r1, #-0x1] + cmp r2, r0 + mvncc r0, #0x0 + movcs r0, #0x1 + bx lr +_020DF540: + subs r2, r2, #0x1 + bne _020DF518 +_020DF548: + mov r0, #0x0 + bx lr + + arm_func_start __fill_mem +__fill_mem: ; 0x020DF550 + cmp r2, #0x20 + and r3, r1, #0xff + blo _020DF5E4 + rsb r1, r0, #0x0 + ands r12, r1, #0x3 + beq _020DF57C + sub r2, r2, r12 + and r1, r3, #0xff +_020DF570: + strb r1, [r0], #0x1 + subs r12, r12, #0x1 + bne _020DF570 +_020DF57C: + cmp r3, #0x0 + beq _020DF594 + mov r1, r3, lsl #0x10 + orr r1, r1, r3, lsl #0x18 + orr r1, r1, r3, lsl #0x8 + orr r3, r3, r1 +_020DF594: + movs r1, r2, lsr #0x5 + beq _020DF5C8 +_020DF59C: + str r3, [r0, #0x0] + str r3, [r0, #0x4] + str r3, [r0, #0x8] + str r3, [r0, #0xc] + str r3, [r0, #0x10] + str r3, [r0, #0x14] + str r3, [r0, #0x18] + str r3, [r0, #0x1c] + add r0, r0, #0x20 + subs r1, r1, #0x1 + bne _020DF59C +_020DF5C8: + and r1, r2, #0x1f + movs r1, r1, lsr #0x2 + beq _020DF5E0 +_020DF5D4: + str r3, [r0], #0x4 + subs r1, r1, #0x1 + bne _020DF5D4 +_020DF5E0: + and r2, r2, #0x3 +_020DF5E4: + cmp r2, #0x0 + bxeq lr + and r1, r3, #0xff +_020DF5F0: + strb r1, [r0], #0x1 + subs r2, r2, #0x1 + bne _020DF5F0 + bx lr + + arm_func_start parse_format_printf +parse_format_printf: ; 0x020DF600 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + ldrsb r3, [r0, #0x1] + mov r4, #0x0 + mov r5, #0x1 + mov lr, r2 + strb r5, [sp, #0x0] + strb r4, [sp, #0x1] + strb r4, [sp, #0x2] + strb r4, [sp, #0x3] + strb r4, [sp, #0x4] + str r4, [sp, #0x8] + str r4, [sp, #0xc] + cmp r3, #0x25 + add r12, r0, #0x1 + bne _020DF65C + add r0, sp, #0x0 + strb r3, [sp, #0x5] + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add sp, sp, #0x10 + add r0, r12, #0x1 + ldmia sp!, {r4-r8,pc} +_020DF65C: + mov r2, #0x2 + mov r0, r4 + mov r5, r2 + mov r6, r4 + mov r7, #0x1 +_020DF670: + mov r8, r7 + cmp r3, #0x2b + bgt _020DF6A0 + bge _020DF6C8 + cmp r3, #0x23 + bgt _020DF6F8 + cmp r3, #0x20 + blt _020DF6F8 + beq _020DF6D0 + cmp r3, #0x23 + beq _020DF6E0 + b _020DF6F8 +_020DF6A0: + cmp r3, #0x30 + bgt _020DF6F8 + cmp r3, #0x2d + blt _020DF6F8 + beq _020DF6C0 + cmp r3, #0x30 + beq _020DF6E8 + b _020DF6F8 +_020DF6C0: + strb r6, [sp, #0x0] + b _020DF6FC +_020DF6C8: + strb r7, [sp, #0x1] + b _020DF6FC +_020DF6D0: + ldrb r4, [sp, #0x1] + cmp r4, #0x1 + strneb r5, [sp, #0x1] + b _020DF6FC +_020DF6E0: + strb r7, [sp, #0x3] + b _020DF6FC +_020DF6E8: + ldrb r4, [sp, #0x0] + cmp r4, #0x0 + strneb r2, [sp, #0x0] + b _020DF6FC +_020DF6F8: + mov r8, r0 +_020DF6FC: + cmp r8, #0x0 + ldrnesb r3, [r12, #0x1]! + bne _020DF670 + cmp r3, #0x2a + bne _020DF744 + ldr r0, [r1, #0x0] + add r0, r0, #0x4 + str r0, [r1, #0x0] + ldr r0, [r0, #-0x4] + str r0, [sp, #0x8] + cmp r0, #0x0 + bge _020DF73C + rsb r0, r0, #0x0 + mov r2, #0x0 + strb r2, [sp, #0x0] + str r0, [sp, #0x8] +_020DF73C: + ldrsb r3, [r12, #0x1]! + b _020DF794 +_020DF744: + ldr r4, _020DFB88 ; =0x0210430C + mov r5, #0x0 + mov r0, #0xa + b _020DF768 +_020DF754: + ldr r2, [sp, #0x8] + sub r3, r3, #0x30 + mla r6, r2, r0, r3 + ldrsb r3, [r12, #0x1]! + str r6, [sp, #0x8] +_020DF768: + cmp r3, #0x0 + blt _020DF778 + cmp r3, #0x80 + blt _020DF780 +_020DF778: + mov r2, r5 + b _020DF78C +_020DF780: + mov r2, r3, lsl #0x1 + ldrh r2, [r4, r2] + and r2, r2, #0x8 +_020DF78C: + cmp r2, #0x0 + bne _020DF754 +_020DF794: + ldr r2, [sp, #0x8] + ldr r0, _020DFB8C ; =0x000001FD + cmp r2, r0 + ble _020DF7C4 + mov r1, #0xff + add r0, sp, #0x0 + strb r1, [sp, #0x5] + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add sp, sp, #0x10 + add r0, r12, #0x1 + ldmia sp!, {r4-r8,pc} +_020DF7C4: + cmp r3, #0x2e + bne _020DF858 + ldrsb r3, [r12, #0x1]! + mov r0, #0x1 + strb r0, [sp, #0x2] + cmp r3, #0x2a + bne _020DF808 + ldr r0, [r1, #0x0] + add r0, r0, #0x4 + str r0, [r1, #0x0] + ldr r0, [r0, #-0x4] + ldrsb r3, [r12, #0x1]! + str r0, [sp, #0xc] + cmp r0, #0x0 + movlt r0, #0x0 + strltb r0, [sp, #0x2] + b _020DF858 +_020DF808: + ldr r2, _020DFB88 ; =0x0210430C + mov r4, #0x0 + mov r0, #0xa + b _020DF82C +_020DF818: + ldr r1, [sp, #0xc] + sub r3, r3, #0x30 + mla r5, r1, r0, r3 + ldrsb r3, [r12, #0x1]! + str r5, [sp, #0xc] +_020DF82C: + cmp r3, #0x0 + blt _020DF83C + cmp r3, #0x80 + blt _020DF844 +_020DF83C: + mov r1, r4 + b _020DF850 +_020DF844: + mov r1, r3, lsl #0x1 + ldrh r1, [r2, r1] + and r1, r1, #0x8 +_020DF850: + cmp r1, #0x0 + bne _020DF818 +_020DF858: + cmp r3, #0x6c + mov r0, #0x1 + bgt _020DF890 + cmp r3, #0x68 + blt _020DF884 + beq _020DF8AC + cmp r3, #0x6a + beq _020DF8F8 + cmp r3, #0x6c + beq _020DF8C8 + b _020DF91C +_020DF884: + cmp r3, #0x4c + beq _020DF8EC + b _020DF91C +_020DF890: + cmp r3, #0x74 + bgt _020DF8A0 + beq _020DF904 + b _020DF91C +_020DF8A0: + cmp r3, #0x7a + beq _020DF910 + b _020DF91C +_020DF8AC: + ldrsb r1, [r12, #0x1] + mov r2, #0x2 + strb r2, [sp, #0x4] + cmp r1, #0x68 + streqb r0, [sp, #0x4] + ldreqsb r3, [r12, #0x1]! + b _020DF920 +_020DF8C8: + ldrsb r1, [r12, #0x1] + mov r2, #0x3 + strb r2, [sp, #0x4] + cmp r1, #0x6c + bne _020DF920 + mov r1, #0x4 + strb r1, [sp, #0x4] + ldrsb r3, [r12, #0x1]! + b _020DF920 +_020DF8EC: + mov r1, #0x9 + strb r1, [sp, #0x4] + b _020DF920 +_020DF8F8: + mov r1, #0x6 + strb r1, [sp, #0x4] + b _020DF920 +_020DF904: + mov r1, #0x8 + strb r1, [sp, #0x4] + b _020DF920 +_020DF910: + mov r1, #0x7 + strb r1, [sp, #0x4] + b _020DF920 +_020DF91C: + mov r0, #0x0 +_020DF920: + cmp r0, #0x0 + ldrnesb r3, [r12, #0x1]! + strb r3, [sp, #0x5] + cmp r3, #0x61 + bgt _020DF974 + bge _020DFA5C + cmp r3, #0x47 + bgt _020DF968 + subs r0, r3, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020DFB68 +_020DF94C: + .byte 0x42, 0x00, 0x00, 0xEA + .byte 0x84, 0x00, 0x00, 0xEA, 0x83, 0x00, 0x00, 0xEA, 0x82, 0x00, 0x00, 0xEA, 0x50, 0x00, 0x00, 0xEA + .byte 0x2F, 0x00, 0x00, 0xEA, 0x4A, 0x00, 0x00, 0xEA +_020DF968: + cmp r3, #0x58 + beq _020DF9E8 + b _020DFB68 +_020DF974: + cmp r3, #0x63 + bgt _020DF984 + beq _020DFB04 + b _020DFB68 +_020DF984: + sub r0, r3, #0x64 + cmp r0, #0x14 + addls pc, pc, r0, lsl #0x2 + b _020DFB68 +_020DF994: + .byte 0x13, 0x00, 0x00, 0xEA, 0x41, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x00, 0xEA + .byte 0x3B, 0x00, 0x00, 0xEA, 0x6F, 0x00, 0x00, 0xEA, 0x0E, 0x00, 0x00, 0xEA, 0x6D, 0x00, 0x00, 0xEA + .byte 0x6C, 0x00, 0x00, 0xEA, 0x6B, 0x00, 0x00, 0xEA, 0x6A, 0x00, 0x00, 0xEA, 0x64, 0x00, 0x00, 0xEA + .byte 0x08, 0x00, 0x00, 0xEA, 0x45, 0x00, 0x00, 0xEA, 0x66, 0x00, 0x00, 0xEA, 0x65, 0x00, 0x00, 0xEA + .byte 0x56, 0x00, 0x00, 0xEA, 0x63, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA, 0x61, 0x00, 0x00, 0xEA + .byte 0x60, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA +_020DF9E8: + ldrb r0, [sp, #0x4] + cmp r0, #0x9 + moveq r0, #0xff + streqb r0, [sp, #0x5] + beq _020DFB70 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0xc] + beq _020DFB70 + ldrb r0, [sp, #0x0] + cmp r0, #0x2 + moveq r0, #0x1 + streqb r0, [sp, #0x0] + b _020DFB70 +_020DFA24: + .byte 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13 + .byte 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13, 0xFF, 0x00, 0xA0, 0x03 + .byte 0x05, 0x00, 0xCD, 0x05, 0x49, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3 + .byte 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x44, 0x00, 0x00, 0xEA +_020DFA5C: + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0xd + streq r0, [sp, #0xc] + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + cmpne r0, #0x1 + moveq r0, #0xff + streqb r0, [sp, #0x5] + b _020DFB70 +_020DFA94: + .byte 0x0C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 + .byte 0x0C, 0x00, 0x8D, 0x05, 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13 + .byte 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13, 0x01, 0x00, 0x50, 0x13 + .byte 0xFF, 0x00, 0xA0, 0x03, 0x05, 0x00, 0xCD, 0x05, 0x28, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xDD, 0xE5 + .byte 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x23, 0x00, 0x00, 0xEA + .byte 0x78, 0x30, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3, 0x03, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE3 + .byte 0x05, 0x30, 0xCD, 0xE5, 0x03, 0x20, 0xCD, 0xE5, 0x04, 0x10, 0xCD, 0xE5, 0x0C, 0x00, 0x8D, 0xE5 + .byte 0x1A, 0x00, 0x00, 0xEA +_020DFB04: + ldrb r1, [sp, #0x4] + cmp r1, #0x3 + moveq r0, #0x5 + streqb r0, [sp, #0x4] + beq _020DFB70 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + cmpeq r1, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x5] + b _020DFB70 +_020DFB30: + .byte 0x04, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x03, 0x04, 0x00, 0xCD, 0x05 + .byte 0x0A, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x13, 0x05, 0x00, 0xCD, 0x15 + .byte 0x06, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xDD, 0xE5, 0x09, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x03 + .byte 0x05, 0x00, 0xCD, 0x05, 0x01, 0x00, 0x00, 0xEA +_020DFB68: + mov r0, #0xff + strb r0, [sp, #0x5] +_020DFB70: + add r0, sp, #0x0 + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add r0, r12, #0x1 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020DFB88: .word 0x0210430C +_020DFB8C: .word 0x000001FD + + arm_func_start long2str +long2str: ; 0x020DFB90 + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x10 + movs r10, r0 + mov r0, #0x0 + mov r5, r1 + str r0, [sp, #0xc] + ldr r7, [sp, #0x4c] + mov r6, r0 + strb r0, [r5, #-0x1]! + ldrb r0, [sp, #0x43] + str r1, [sp, #0x0] + ldrb r8, [sp, #0x45] + str r0, [sp, #0x4] + ldr r0, [sp, #0x48] + ldrb r11, [sp, #0x41] + str r0, [sp, #0x8] + cmpeq r7, #0x0 + bne _020DFC04 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020DFBF0 + cmp r8, #0x6f + beq _020DFC04 +_020DFBF0: + add sp, sp, #0x10 + mov r0, r5 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020DFC04: + cmp r8, #0x69 + bgt _020DFC2C + bge _020DFC60 + cmp r8, #0x58 + bgt _020DFC20 + beq _020DFC8C + b _020DFC94 +_020DFC20: + cmp r8, #0x64 + beq _020DFC60 + b _020DFC94 +_020DFC2C: + cmp r8, #0x6f + bgt _020DFC40 + moveq r4, #0x8 + moveq r11, #0x0 + b _020DFC94 +_020DFC40: + cmp r8, #0x78 + bgt _020DFC94 + cmp r8, #0x75 + blt _020DFC94 + beq _020DFC80 + cmp r8, #0x78 + beq _020DFC8C + b _020DFC94 +_020DFC60: + cmp r10, #0x0 + mov r4, #0xa + bge _020DFC94 + mov r0, #0x1 + cmp r10, #0x80000000 + rsbne r10, r10, #0x0 + str r0, [sp, #0xc] + b _020DFC94 +_020DFC80: + mov r4, #0xa + mov r11, #0x0 + b _020DFC94 +_020DFC8C: + mov r4, #0x10 + mov r11, #0x0 +_020DFC94: + mov r0, r10 + mov r1, r4 + bl _u32_div_f + mov r9, r1 + mov r0, r10 + mov r1, r4 + bl _u32_div_f + cmp r9, #0xa + mov r10, r0 + addlt r9, r9, #0x30 + blt _020DFCCC + cmp r8, #0x78 + addeq r9, r9, #0x57 + addne r9, r9, #0x37 +_020DFCCC: + cmp r10, #0x0 + strb r9, [r5, #-0x1]! + add r6, r6, #0x1 + bne _020DFC94 + cmp r4, #0x8 + bne _020DFD00 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrnesb r0, [r5, #0x0] + cmpne r0, #0x30 + movne r0, #0x30 + strneb r0, [r5, #-0x1]! + addne r6, r6, #0x1 +_020DFD00: + ldrb r0, [sp, #0x40] + cmp r0, #0x2 + bne _020DFD34 + ldr r0, [sp, #0xc] + ldr r7, [sp, #0x8] + cmp r0, #0x0 + cmpeq r11, #0x0 + subne r7, r7, #0x1 + cmp r4, #0x10 + bne _020DFD34 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + subne r7, r7, #0x2 +_020DFD34: + ldr r0, [sp, #0x0] + sub r1, r0, r5 + ldr r0, _020DFDD8 ; =0x000001FD + add r1, r7, r1 + cmp r1, r0 + addgt sp, sp, #0x10 + movgt r0, #0x0 + ldmgtia sp!, {r3-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + cmp r6, r7 + bge _020DFD78 + mov r0, #0x30 +_020DFD68: + add r6, r6, #0x1 + cmp r6, r7 + strb r0, [r5, #-0x1]! + blt _020DFD68 +_020DFD78: + cmp r4, #0x10 + bne _020DFD94 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x30 + strneb r8, [r5, #-0x1] + strneb r0, [r5, #-0x2]! +_020DFD94: + ldr r0, [sp, #0xc] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r5, #-0x1]! + bne _020DFDC4 + cmp r11, #0x1 + moveq r0, #0x2b + streqb r0, [r5, #-0x1]! + beq _020DFDC4 + cmp r11, #0x2 + moveq r0, #0x20 + streqb r0, [r5, #-0x1]! +_020DFDC4: + mov r0, r5 + add sp, sp, #0x10 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020DFDD8: .word 0x000001FD + + arm_func_start longlong2str +longlong2str: ; 0x020DFDDC + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x18 + mov r9, r1 + mov r1, #0x0 + mov r10, r0 + mov r6, r2 + mov r0, r1 + strb r0, [r6, #-0x1]! + ldr r0, [sp, #0x58] + cmp r9, #0x0 + str r0, [sp, #0x10] + ldrb r0, [sp, #0x4f] + cmpeq r10, #0x0 + str r2, [sp, #0x0] + str r0, [sp, #0x4] + ldr r0, [sp, #0x54] + str r1, [sp, #0x14] + str r0, [sp, #0x8] + ldrb r0, [sp, #0x4d] + mov r7, r1 + ldrb r8, [sp, #0x51] + str r0, [sp, #0xc] + ldreq r0, [sp, #0x10] + cmpeq r0, #0x0 + bne _020DFE6C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020DFE58 + cmp r8, #0x6f + beq _020DFE6C +_020DFE58: + add sp, sp, #0x18 + mov r0, r6 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020DFE6C: + cmp r8, #0x69 + bgt _020DFE94 + bge _020DFEC4 + cmp r8, #0x58 + bgt _020DFE88 + beq _020DFF18 + b _020DFF24 +_020DFE88: + cmp r8, #0x64 + beq _020DFEC4 + b _020DFF24 +_020DFE94: + cmp r8, #0x6f + bgt _020DFEA4 + beq _020DFEF8 + b _020DFF24 +_020DFEA4: + cmp r8, #0x78 + bgt _020DFF24 + cmp r8, #0x75 + blt _020DFF24 + beq _020DFF08 + cmp r8, #0x78 + beq _020DFF18 + b _020DFF24 +_020DFEC4: + subs r0, r10, #0x0 + sbcs r0, r9, #0x0 + mov r11, #0xa + mov r5, #0x0 + bge _020DFF24 + cmp r9, #0x80000000 + cmpeq r10, r5 + beq _020DFEEC + rsbs r10, r10, #0x0 + rsc r9, r9, #0x0 +_020DFEEC: + mov r0, #0x1 + str r0, [sp, #0x14] + b _020DFF24 +_020DFEF8: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0x8 + b _020DFF24 +_020DFF08: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0xa + b _020DFF24 +_020DFF18: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0x10 +_020DFF24: + mov r0, r10 + mov r1, r9 + mov r2, r11 + mov r3, r5 + bl _ull_mod + mov r4, r0 + mov r0, r10 + mov r1, r9 + mov r2, r11 + mov r3, r5 + bl _ll_udiv + mov r10, r0 + cmp r4, #0xa + mov r9, r1 + addlt r0, r4, #0x30 + blt _020DFF70 + cmp r8, #0x78 + addeq r0, r4, #0x57 + addne r0, r4, #0x37 +_020DFF70: + strb r0, [r6, #-0x1]! + mov r0, #0x0 + cmp r9, r0 + cmpeq r10, r0 + add r7, r7, #0x1 + bne _020DFF24 + cmp r5, #0x0 + cmpeq r11, #0x8 + bne _020DFFB0 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrnesb r0, [r6, #0x0] + cmpne r0, #0x30 + movne r0, #0x30 + strneb r0, [r6, #-0x1]! + addne r7, r7, #0x1 +_020DFFB0: + ldrb r0, [sp, #0x4c] + cmp r0, #0x2 + bne _020E0000 + ldr r0, [sp, #0x8] + str r0, [sp, #0x10] + ldr r0, [sp, #0x14] + cmp r0, #0x0 + ldreq r0, [sp, #0xc] + cmpeq r0, #0x0 + ldrne r0, [sp, #0x10] + subne r0, r0, #0x1 + strne r0, [sp, #0x10] + cmp r5, #0x0 + cmpeq r11, #0x10 + bne _020E0000 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrne r0, [sp, #0x10] + subne r0, r0, #0x2 + strne r0, [sp, #0x10] +_020E0000: + ldr r0, [sp, #0x0] + ldr r1, _020E00B8 ; =0x000001FD + sub r2, r0, r6 + ldr r0, [sp, #0x10] + add r0, r0, r2 + cmp r0, r1 + addgt sp, sp, #0x18 + movgt r0, #0x0 + ldmgtia sp!, {r3-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + ldr r0, [sp, #0x10] + cmp r7, r0 + bge _020E0050 + mov r1, #0x30 +_020E003C: + ldr r0, [sp, #0x10] + add r7, r7, #0x1 + cmp r7, r0 + strb r1, [r6, #-0x1]! + blt _020E003C +_020E0050: + cmp r5, #0x0 + cmpeq r11, #0x10 + bne _020E0070 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x30 + strneb r8, [r6, #-0x1] + strneb r0, [r6, #-0x2]! +_020E0070: + ldr r0, [sp, #0x14] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r6, #-0x1]! + bne _020E00A4 + ldr r0, [sp, #0xc] + cmp r0, #0x1 + moveq r0, #0x2b + streqb r0, [r6, #-0x1]! + beq _020E00A4 + cmp r0, #0x2 + moveq r0, #0x20 + streqb r0, [r6, #-0x1]! +_020E00A4: + mov r0, r6 + add sp, sp, #0x18 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E00B8: .word 0x000001FD + + arm_func_start double2hex +double2hex: ; 0x020E00BC + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r10,lr} + sub sp, sp, #0x44 + ldr r7, [sp, #0x80] + ldr r0, _020E056C ; =0x000001FD + mov r8, r2 + cmp r7, r0 + ldrb r6, [sp, #0x79] + ldrb r5, [sp, #0x77] + ldrb r4, [sp, #0x75] + ldr r1, [sp, #0x68] + ldr r2, [sp, #0x6c] + addgt sp, sp, #0x44 + movgt r0, #0x0 + ldmgtia sp!, {r3-r10,lr} + addgt sp, sp, #0x10 + bxgt lr + mov r10, #0x0 + mov r9, #0x20 + add r0, sp, #0x8 + add r3, sp, #0xc + strb r10, [sp, #0x8] + strh r9, [sp, #0xa] + bl __num2dec_internal2 + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x6c] + bl fabs + mov r2, r0 + mov r0, r10 + mov r3, r1 + mov r1, r0 + bl _deq + bne _020E0188 + ldr r3, _020E0570 ; =0x02106DA0 + sub r0, r8, #0x6 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + add sp, sp, #0x44 + strb r2, [r8, #-0x6] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r2, [r3, #0x4] + ldrb r1, [r3, #0x5] + strb r2, [r0, #0x4] + strb r1, [r0, #0x5] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0188: + ldrb r0, [sp, #0x11] + cmp r0, #0x49 + bne _020E0298 + ldrsb r0, [sp, #0xc] + cmp r0, #0x0 + beq _020E0224 + cmp r6, #0x41 + sub r0, r8, #0x5 + bne _020E01E8 + ldr r3, _020E0574 ; =0x02106DA8 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E01E8: + ldr r3, _020E0578 ; =0x02106DB0 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0224: + cmp r6, #0x41 + sub r0, r8, #0x4 + bne _020E0264 + ldr r3, _020E057C ; =0x02106DB8 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0264: + ldr r3, _020E0580 ; =0x02106DBC + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0298: + cmp r0, #0x4e + bne _020E03A4 + ldrsb r0, [sp, #0xc] + cmp r0, #0x0 + beq _020E0330 + cmp r6, #0x41 + sub r0, r8, #0x5 + bne _020E02F4 + ldr r3, _020E0584 ; =0x02106DC0 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E02F4: + ldr r3, _020E0588 ; =0x02106DC8 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0330: + cmp r6, #0x41 + sub r0, r8, #0x4 + bne _020E0370 + ldr r3, _020E058C ; =0x02106DD0 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0370: + ldr r3, _020E0590 ; =0x02106DD4 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E03A4: + mov r3, r10 + mov r1, #0x1 + mov r0, #0x64 + add r9, sp, #0x68 + strb r1, [sp, #0x34] + strb r1, [sp, #0x35] + strb r3, [sp, #0x36] + strb r3, [sp, #0x37] + strb r3, [sp, #0x38] + str r3, [sp, #0x3c] + str r1, [sp, #0x40] + strb r0, [sp, #0x39] +_020E03D4: + rsb r1, r3, #0x7 + ldrsb r2, [r9, r3] + ldrsb r0, [r9, r1] + strb r0, [r9, r3] + add r3, r3, #0x1 + strb r2, [r9, r1] + cmp r3, #0x4 + blt _020E03D4 + ldrb r0, [sp, #0x69] + ldrb r1, [sp, #0x68] + ldr sb, _020E0594 ; =0x000007FF + mov r0, r0, lsl #0x11 + orr r1, r0, r1, lsl #0x19 + add r0, sp, #0x34 + and lr, r9, r1, lsr #0x15 + sub r12, sp, #0x8 + ldmia r0, {r0-r3} + stmia r12, {r0-r3} + rsb r0, r9, #0x400 + mov r1, r8 + add r0, lr, r0 + ldmia r12, {r2-r3} + bl long2str + cmp r6, #0x61 + moveq r1, #0x70 + movne r1, #0x50 + strb r1, [r0, #-0x1]! + mov r1, r7, lsl #0x2 + mov lr, r7 + cmp r7, #0x1 + add r8, r1, #0xb + add r12, sp, #0x68 + blt _020E04E4 + mov r9, #0x30 +_020E045C: + cmp r8, #0x40 + bge _020E04CC + ldrb r1, [r12, r8, asr #0x3] + and r2, r8, #0x7 + rsb r3, r2, #0x7 + mov r2, r1, asr r3 + sub r10, r8, #0x4 + bic r1, r8, #0x7 + bic r10, r10, #0x7 + cmp r1, r10 + add r10, r12, r8, asr #0x3 + and r1, r2, #0xff + beq _020E04A0 + ldrb r2, [r10, #-0x1] + mov r2, r2, lsl #0x8 + orr r1, r1, r2, asr r3 + and r1, r1, #0xff +_020E04A0: + and r1, r1, #0xf + cmp r1, #0xa + addcc r1, r1, #0x30 + andcc r1, r1, #0xff + blo _020E04D0 + cmp r6, #0x61 + addeq r1, r1, #0x57 + andeq r1, r1, #0xff + addne r1, r1, #0x37 + andne r1, r1, #0xff + b _020E04D0 +_020E04CC: + mov r1, r9 +_020E04D0: + sub lr, lr, #0x1 + cmp lr, #0x1 + strb r1, [r0, #-0x1]! + sub r8, r8, #0x4 + bge _020E045C +_020E04E4: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r1, #0x2e + strneb r1, [r0, #-0x1]! + mov r1, #0x31 + strb r1, [r0, #-0x1] + cmp r6, #0x61 + moveq r1, #0x78 + movne r1, #0x58 + strb r1, [r0, #-0x2]! + mov r1, #0x30 + strb r1, [r0, #-0x1]! + ldrsb r1, [sp, #0xc] + cmp r1, #0x0 + movne r1, #0x2d + strneb r1, [r0, #-0x1]! + addne sp, sp, #0x44 + ldmneia sp!, {r3-r10,lr} + addne sp, sp, #0x10 + bxne lr + cmp r4, #0x1 + moveq r1, #0x2b + streqb r1, [r0, #-0x1]! + addeq sp, sp, #0x44 + ldmeqia sp!, {r3-r10,lr} + addeq sp, sp, #0x10 + bxeq lr + cmp r4, #0x2 + moveq r1, #0x20 + streqb r1, [r0, #-0x1]! + add sp, sp, #0x44 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E056C: .word 0x000001FD +_020E0570: .word 0x02106DA0 +_020E0574: .word 0x02106DA8 +_020E0578: .word 0x02106DB0 +_020E057C: .word 0x02106DB8 +_020E0580: .word 0x02106DBC +_020E0584: .word 0x02106DC0 +_020E0588: .word 0x02106DC8 +_020E058C: .word 0x02106DD0 +_020E0590: .word 0x02106DD4 +_020E0594: .word 0x000007FF + + arm_func_start round_decimal +round_decimal: ; 0x020E0598 + stmdb sp!, {r4,lr} + cmp r1, #0x0 + bge _020E05C0 + mov r1, #0x0 + strh r1, [r0, #0x2] + mov r1, #0x1 + strb r1, [r0, #0x4] + mov r1, #0x30 + strb r1, [r0, #0x5] + ldmia sp!, {r4,pc} +_020E05C0: + ldrb lr, [r0, #0x4] + cmp r1, lr + ldmgeia sp!, {r4,pc} +_020E05CC: + .byte 0x05, 0xC0, 0x80, 0xE2 + .byte 0x01, 0x20, 0x8C, 0xE0, 0x01, 0x20, 0x82, 0xE2, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2 + .byte 0x03, 0x3C, 0xA0, 0xE1, 0x43, 0x3C, 0xA0, 0xE1, 0x05, 0x00, 0x53, 0xE3, 0x0B, 0x00, 0x00, 0x1A + .byte 0x0E, 0xC0, 0x8C, 0xE0, 0x01, 0xC0, 0x4C, 0xE2, 0x02, 0x00, 0x5C, 0xE1, 0x02, 0x00, 0x00, 0x9A + .byte 0xD0, 0x30, 0xDC, 0xE1, 0x30, 0x00, 0x53, 0xE3, 0xF9, 0xFF, 0xFF, 0x0A, 0x02, 0x00, 0x5C, 0xE1 + .byte 0xD1, 0x30, 0x52, 0x01, 0x01, 0x40, 0x03, 0x02, 0x01, 0x40, 0xA0, 0x13, 0x01, 0x00, 0x00, 0xEA + .byte 0x01, 0x40, 0xA0, 0xC3, 0x00, 0x40, 0xA0, 0xD3, 0x00, 0x00, 0x51, 0xE3, 0x14, 0x00, 0x00, 0x0A + .byte 0x00, 0xC0, 0xA0, 0xE3, 0x01, 0xE0, 0xA0, 0xE3, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2 + .byte 0x04, 0x30, 0x83, 0xE0, 0x03, 0x3C, 0xA0, 0xE1, 0x43, 0x3C, 0xA0, 0xE1, 0x09, 0x00, 0x53, 0xE3 + .byte 0x0E, 0x40, 0xA0, 0xC1, 0x0C, 0x40, 0xA0, 0xD1, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x1A + .byte 0x00, 0x00, 0x53, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x41, 0xE2, 0x02, 0x00, 0x00, 0xEA + .byte 0x30, 0x30, 0x83, 0xE2, 0x00, 0x30, 0xC2, 0xE5, 0x01, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3 + .byte 0xEC, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x54, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0xF2, 0x30, 0xD0, 0xE1 + .byte 0x01, 0x20, 0xA0, 0xE3, 0x31, 0x10, 0xA0, 0xE3, 0x01, 0x30, 0x83, 0xE2, 0xB2, 0x30, 0xC0, 0xE1 + .byte 0x04, 0x20, 0xC0, 0xE5, 0x05, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x51, 0xE3 + .byte 0xBB, 0xFF, 0xFF, 0x0A, 0x04, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8 + + arm_func_start float2str +float2str: ; 0x020E06BC + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x2c + ldr r7, [sp, #0x68] + ldr r3, _020E0DF4 ; =0x000001FD + ldrb r6, [sp, #0x61] + ldrb r5, [sp, #0x5f] + ldrb r4, [sp, #0x5d] + cmp r7, r3 + mov r10, r0 + mov r8, r1 + mov r9, r2 + addgt sp, sp, #0x2c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + mov r12, #0x0 + mov r11, #0x20 + add r0, sp, #0x0 + add r3, sp, #0x4 + mov r1, r10 + mov r2, r8 + strb r12, [sp, #0x0] + strh r11, [sp, #0x2] + bl __num2dec_internal2 + ldrb r0, [sp, #0x8] + add r1, sp, #0x9 + add r0, r1, r0 + b _020E074C +_020E0734: + ldrb r2, [sp, #0x8] + ldrsh r1, [sp, #0x6] + sub r2, r2, #0x1 + add r1, r1, #0x1 + strb r2, [sp, #0x8] + strh r1, [sp, #0x6] +_020E074C: + ldrb r1, [sp, #0x8] + cmp r1, #0x1 + bls _020E0764 + ldrsb r1, [r0, #-0x1]! + cmp r1, #0x30 + beq _020E0734 +_020E0764: + ldrb r0, [sp, #0x9] + cmp r0, #0x30 + beq _020E0784 + cmp r0, #0x49 + beq _020E0790 + cmp r0, #0x4e + beq _020E08F0 + b _020E0A44 +_020E0784: + mov r0, #0x0 + strh r0, [sp, #0x6] + b _020E0A44 +_020E0790: + mov r2, #0x0 + mov r0, r10 + mov r1, r8 + mov r3, r2 + bl _dls + bhs _020E0854 + cmp r6, #0x0 + sub r0, r9, #0x5 + blt _020E07BC + cmp r6, #0x80 + blt _020E07C4 +_020E07BC: + mov r1, #0x0 + b _020E07D4 +_020E07C4: + ldr r1, _020E0DF8 ; =0x0210430C + mov r2, r6, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020E07D4: + cmp r1, #0x0 + beq _020E0818 + ldr r3, _020E0DFC ; =0x02106DA8 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0818: + ldr r3, _020E0E00 ; =0x02106DB0 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0854: + cmp r6, #0x0 + sub r0, r9, #0x4 + blt _020E0868 + cmp r6, #0x80 + blt _020E0870 +_020E0868: + mov r1, #0x0 + b _020E0880 +_020E0870: + ldr r1, _020E0DF8 ; =0x0210430C + mov r2, r6, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020E0880: + cmp r1, #0x0 + beq _020E08BC + ldr r3, _020E0E04 ; =0x02106DB8 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E08BC: + ldr r3, _020E0E08 ; =0x02106DBC + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E08F0: + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + beq _020E09A8 + cmp r6, #0x0 + sub r0, r9, #0x5 + blt _020E0910 + cmp r6, #0x80 + blt _020E0918 +_020E0910: + mov r1, #0x0 + b _020E0928 +_020E0918: + ldr r1, _020E0DF8 ; =0x0210430C + mov r2, r6, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020E0928: + cmp r1, #0x0 + beq _020E096C + ldr r3, _020E0E0C ; =0x02106DC0 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E096C: + ldr r3, _020E0E10 ; =0x02106DC8 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E09A8: + cmp r6, #0x0 + sub r0, r9, #0x4 + blt _020E09BC + cmp r6, #0x80 + blt _020E09C4 +_020E09BC: + mov r1, #0x0 + b _020E09D4 +_020E09C4: + ldr r1, _020E0DF8 ; =0x0210430C + mov r2, r6, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020E09D4: + cmp r1, #0x0 + beq _020E0A10 + ldr r3, _020E0E14 ; =0x02106DD0 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0A10: + ldr r3, _020E0E18 ; =0x02106DD4 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0A44: + ldrb r0, [sp, #0x8] + ldrsh r1, [sp, #0x6] + sub r8, r9, #0x1 + sub r0, r0, #0x1 + add r0, r1, r0 + strh r0, [sp, #0x6] + mov r0, #0x0 + strb r0, [r8, #0x0] + cmp r6, #0x65 + bgt _020E0A98 + bge _020E0B24 + cmp r6, #0x47 + bgt _020E0DE0 + cmp r6, #0x45 + blt _020E0DE0 + beq _020E0B24 + cmp r6, #0x46 + beq _020E0C6C + cmp r6, #0x47 + beq _020E0AB0 + b _020E0DE0 +_020E0A98: + cmp r6, #0x66 + bgt _020E0AA8 + beq _020E0C6C + b _020E0DE0 +_020E0AA8: + cmp r6, #0x67 + bne _020E0DE0 +_020E0AB0: + ldrb r0, [sp, #0x8] + cmp r0, r7 + ble _020E0AC8 + add r0, sp, #0x4 + mov r1, r7 + bl round_decimal +_020E0AC8: + ldrsh r2, [sp, #0x6] + mvn r0, #0x3 + cmp r2, r0 + blt _020E0AE0 + cmp r2, r7 + blt _020E0B00 +_020E0AE0: + cmp r5, #0x0 + ldreqb r0, [sp, #0x8] + subne r7, r7, #0x1 + subeq r7, r0, #0x1 + cmp r6, #0x67 + moveq r6, #0x65 + movne r6, #0x45 + b _020E0B24 +_020E0B00: + cmp r5, #0x0 + addne r0, r2, #0x1 + subne r7, r7, r0 + bne _020E0C6C + ldrb r1, [sp, #0x8] + add r0, r2, #0x1 + subs r7, r1, r0 + movmi r7, #0x0 + b _020E0C6C +_020E0B24: + ldrb r0, [sp, #0x8] + add r1, r7, #0x1 + cmp r0, r1 + ble _020E0B3C + add r0, sp, #0x4 + bl round_decimal +_020E0B3C: + ldrsh lr, [sp, #0x6] + mov r11, #0x2b + mov r10, #0x0 + cmp lr, #0x0 + rsblt lr, lr, #0x0 + movlt r11, #0x2d + ldr r3, _020E0E1C ; =0x66666667 + mov r0, #0xa + b _020E0B90 +_020E0B60: + mov r1, lr, lsr #0x1f + smull r2, r12, r3, lr + add r12, r1, r12, asr #0x2 + smull r1, r2, r0, r12 + sub r12, lr, r1 + add r1, r12, #0x30 + strb r1, [r8, #-0x1]! + mov r2, lr + smull r1, lr, r3, r2 + mov r1, r2, lsr #0x1f + add lr, r1, lr, asr #0x2 + add r10, r10, #0x1 +_020E0B90: + cmp lr, #0x0 + bne _020E0B60 + cmp r10, #0x2 + blt _020E0B60 + strb r11, [r8, #-0x1] + strb r6, [r8, #-0x2]! + sub r1, r9, r8 + ldr r0, _020E0DF4 ; =0x000001FD + add r1, r7, r1 + cmp r1, r0 + addgt sp, sp, #0x2c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + ldrb r1, [sp, #0x8] + add r0, r7, #0x1 + cmp r1, r0 + bge _020E0BFC + add r0, r7, #0x2 + sub r0, r0, r1 + subs r1, r0, #0x1 + beq _020E0BFC + mov r0, #0x30 +_020E0BF0: + strb r0, [r8, #-0x1]! + subs r1, r1, #0x1 + bne _020E0BF0 +_020E0BFC: + ldrb r1, [sp, #0x8] + add r0, sp, #0x9 + add r2, r0, r1 + subs r1, r1, #0x1 + beq _020E0C20 +_020E0C10: + ldrsb r0, [r2, #-0x1]! + subs r1, r1, #0x1 + strb r0, [r8, #-0x1]! + bne _020E0C10 +_020E0C20: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r0, #0x2e + strneb r0, [r8, #-0x1]! + ldrb r0, [sp, #0x9] + strb r0, [r8, #-0x1]! + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r8, #-0x1]! + bne _020E0DE0 + cmp r4, #0x1 + moveq r0, #0x2b + streqb r0, [r8, #-0x1]! + beq _020E0DE0 + cmp r4, #0x2 + moveq r0, #0x20 + streqb r0, [r8, #-0x1]! + b _020E0DE0 +_020E0C6C: + ldrsh r3, [sp, #0x6] + ldrb r2, [sp, #0x8] + sub r0, r2, r3 + subs r1, r0, #0x1 + movmi r1, #0x0 + cmp r1, r7 + ble _020E0CAC + sub r1, r1, r7 + add r0, sp, #0x4 + sub r1, r2, r1 + bl round_decimal + ldrsh r3, [sp, #0x6] + ldrb r2, [sp, #0x8] + sub r0, r2, r3 + subs r1, r0, #0x1 + movmi r1, #0x0 +_020E0CAC: + adds r0, r3, #0x1 + movmi r0, #0x0 + ldr r3, _020E0DF4 ; =0x000001FD + add r6, r0, r1 + cmp r6, r3 + addgt sp, sp, #0x2c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + add r3, sp, #0x9 + sub r6, r7, r1 + cmp r6, #0x0 + add r2, r3, r2 + mov r9, #0x0 + ble _020E0D00 + mov r3, #0x30 +_020E0CF0: + add r9, r9, #0x1 + cmp r9, r6 + strb r3, [r8, #-0x1]! + blt _020E0CF0 +_020E0D00: + mov r6, #0x0 + b _020E0D14 +_020E0D08: + ldrsb r3, [r2, #-0x1]! + add r6, r6, #0x1 + strb r3, [r8, #-0x1]! +_020E0D14: + cmp r6, r1 + ldrltb r3, [sp, #0x8] + cmplt r6, r3 + blt _020E0D08 + cmp r6, r1 + bge _020E0D40 + mov r3, #0x30 +_020E0D30: + add r6, r6, #0x1 + cmp r6, r1 + strb r3, [r8, #-0x1]! + blt _020E0D30 +_020E0D40: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r1, #0x2e + strneb r1, [r8, #-0x1]! + cmp r0, #0x0 + beq _020E0DA8 + ldrb r1, [sp, #0x8] + mov r5, #0x0 + sub r1, r0, r1 + cmp r1, #0x0 + ble _020E0D88 + mov r3, #0x30 +_020E0D70: + strb r3, [r8, #-0x1]! + ldrb r1, [sp, #0x8] + add r5, r5, #0x1 + sub r1, r0, r1 + cmp r5, r1 + blt _020E0D70 +_020E0D88: + cmp r5, r0 + bge _020E0DB0 +_020E0D90: + ldrsb r1, [r2, #-0x1]! + add r5, r5, #0x1 + cmp r5, r0 + strb r1, [r8, #-0x1]! + blt _020E0D90 + b _020E0DB0 +_020E0DA8: + mov r0, #0x30 + strb r0, [r8, #-0x1]! +_020E0DB0: + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r8, #-0x1]! + bne _020E0DE0 + cmp r4, #0x1 + moveq r0, #0x2b + streqb r0, [r8, #-0x1]! + beq _020E0DE0 + cmp r4, #0x2 + moveq r0, #0x20 + streqb r0, [r8, #-0x1]! +_020E0DE0: + mov r0, r8 + add sp, sp, #0x2c + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E0DF4: .word 0x000001FD +_020E0DF8: .word 0x0210430C +_020E0DFC: .word 0x02106DA8 +_020E0E00: .word 0x02106DB0 +_020E0E04: .word 0x02106DB8 +_020E0E08: .word 0x02106DBC +_020E0E0C: .word 0x02106DC0 +_020E0E10: .word 0x02106DC8 +_020E0E14: .word 0x02106DD0 +_020E0E18: .word 0x02106DD4 +_020E0E1C: .word 0x66666667 +__pformatter: + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x22c + mov r3, #0x20 + mov r11, r2 + strb r3, [sp, #0x19] + ldrsb r2, [r11, #0x0] + mov r9, r0 + mov r8, r1 + cmp r2, #0x0 + mov r10, #0x0 + beq _020E1628 +_020E0E50: + mov r0, r11 + mov r1, #0x25 + bl strchr + str r0, [sp, #0xc] + cmp r0, #0x0 + bne _020E0EA4 + mov r0, r11 + bl strlen + movs r2, r0 + add r10, r10, r2 + beq _020E1628 + mov r0, r8 + mov r1, r11 + blx r9 + cmp r0, #0x0 + bne _020E1628 + add sp, sp, #0x22c + mvn r0, #0x0 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0EA4: + subs r2, r0, r11 + add r10, r10, r2 + beq _020E0ED4 + mov r0, r8 + mov r1, r11 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E0ED4: + ldr r0, [sp, #0xc] + add r1, sp, #0x25c + add r2, sp, #0x1c + bl parse_format_printf + ldrb r1, [sp, #0x21] + mov r11, r0 + cmp r1, #0x61 + bgt _020E0F40 + bge _020E12A4 + cmp r1, #0x47 + bgt _020E0F34 + subs r0, r1, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020E0F28 +_020E0F0C: + .byte 0xE4, 0x00, 0x00, 0xEA + .byte 0x5D, 0x01, 0x00, 0xEA, 0x5C, 0x01, 0x00, 0xEA, 0x5B, 0x01, 0x00, 0xEA, 0xC6, 0x00, 0x00, 0xEA + .byte 0xC5, 0x00, 0x00, 0xEA, 0xC4, 0x00, 0x00, 0xEA +_020E0F28: + cmp r1, #0x25 + beq _020E1478 + b _020E148C +_020E0F34: + cmp r1, #0x58 + beq _020E1100 + b _020E148C +_020E0F40: + cmp r1, #0x75 + bgt _020E0FA8 + subs r0, r1, #0x64 + addpl pc, pc, r0, lsl #0x2 + b _020E0F9C +_020E0F54: + .byte 0x19, 0x00, 0x00, 0xEA, 0xB7, 0x00, 0x00, 0xEA, 0xB6, 0x00, 0x00, 0xEA + .byte 0xB5, 0x00, 0x00, 0xEA, 0x48, 0x01, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x46, 0x01, 0x00, 0xEA + .byte 0x45, 0x01, 0x00, 0xEA, 0x44, 0x01, 0x00, 0xEA, 0x43, 0x01, 0x00, 0xEA, 0x12, 0x01, 0x00, 0xEA + .byte 0x5E, 0x00, 0x00, 0xEA, 0x40, 0x01, 0x00, 0xEA, 0x3F, 0x01, 0x00, 0xEA, 0x3E, 0x01, 0x00, 0xEA + .byte 0xDD, 0x00, 0x00, 0xEA, 0x3C, 0x01, 0x00, 0xEA, 0x58, 0x00, 0x00, 0xEA +_020E0F9C: + cmp r1, #0x63 + beq _020E1458 + b _020E148C +_020E0FA8: + cmp r1, #0x78 + bgt _020E0FB8 + beq _020E1100 + b _020E148C +_020E0FB8: + cmp r1, #0xff + b _020E148C +_020E0FC0: + .byte 0x20, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5 + .byte 0x04, 0x10, 0x81, 0xE2, 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x50, 0x11, 0xE5, 0x25, 0x00, 0x00, 0xEA + .byte 0x04, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5, 0x08, 0x20, 0x81, 0xE2 + .byte 0x5C, 0x22, 0x8D, 0xE5, 0x08, 0x10, 0x12, 0xE5, 0x10, 0x10, 0x8D, 0xE5, 0x04, 0x10, 0x12, 0xE5 + .byte 0x14, 0x10, 0x8D, 0xE5, 0x1B, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A + .byte 0x5C, 0x12, 0x9D, 0xE5, 0x08, 0x20, 0x81, 0xE2, 0x5C, 0x22, 0x8D, 0xE5, 0x08, 0x10, 0x12, 0xE5 + .byte 0x10, 0x10, 0x8D, 0xE5, 0x04, 0x10, 0x12, 0xE5, 0x14, 0x10, 0x8D, 0xE5, 0x11, 0x00, 0x00, 0xEA + .byte 0x07, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2 + .byte 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x50, 0x11, 0xE5, 0x0A, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x50, 0xE3 + .byte 0x04, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2, 0x5C, 0x12, 0x8D, 0xE5 + .byte 0x04, 0x50, 0x11, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x5C, 0x12, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2 + .byte 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x50, 0x11, 0xE5, 0x02, 0x00, 0x50, 0xE3, 0x05, 0x18, 0xA0, 0x01 + .byte 0x41, 0x58, 0xA0, 0x01, 0x01, 0x00, 0x50, 0xE3, 0x05, 0x1C, 0xA0, 0x01, 0x41, 0x5C, 0xA0, 0x01 + .byte 0x04, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13, 0x1C, 0x00, 0x8D, 0xE2, 0x0A, 0x00, 0x00, 0x1A + .byte 0x04, 0x40, 0x4D, 0xE2, 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x84, 0xE8, 0x00, 0x30, 0x94, 0xE5 + .byte 0x10, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x9D, 0xE5, 0x8B, 0x2F, 0x8D, 0xE2, 0x46, 0xFB, 0xFF, 0xEB + .byte 0x00, 0x70, 0xB0, 0xE1, 0xF0, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x00, 0xEA, 0x08, 0x40, 0x4D, 0xE2 + .byte 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x84, 0xE8, 0x8B, 0x1F, 0x8D, 0xE2, 0x05, 0x00, 0xA0, 0xE1 + .byte 0x0C, 0x00, 0x94, 0xE8, 0xA9, 0xFA, 0xFF, 0xEB, 0x00, 0x70, 0xB0, 0xE1, 0xE6, 0x00, 0x00, 0x0A + .byte 0x02, 0x0C, 0x8D, 0xE2, 0x2B, 0x00, 0x80, 0xE2, 0x07, 0x60, 0x40, 0xE0, 0xF5, 0x00, 0x00, 0xEA +_020E1100: + ldrb r0, [sp, #0x20] + cmp r0, #0x3 + bne _020E1120 + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E11B8 +_020E1120: + cmp r0, #0x4 + bne _020E1148 + ldr r1, [sp, #0x25c] + add r2, r1, #0x8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E11B8 +_020E1148: + cmp r0, #0x6 + bne _020E1170 + ldr r1, [sp, #0x25c] + add r2, r1, #0x8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E11B8 +_020E1170: + cmp r0, #0x7 + bne _020E118C + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E11B8 +_020E118C: + cmp r0, #0x8 + bne _020E11A8 + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E11B8 +_020E11A8: + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] +_020E11B8: + cmp r0, #0x2 + moveq r1, r5, lsl #0x10 + moveq r5, r1, lsr #0x10 + cmp r0, #0x1 + andeq r5, r5, #0xff + cmp r0, #0x4 + cmpne r0, #0x6 + add r0, sp, #0x1c + bne _020E1208 + sub r4, sp, #0x4 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + ldr r3, [r4, #0x0] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r2, sp, #0x22c + bl longlong2str + movs r7, r0 + beq _020E148C + b _020E122C +_020E1208: + sub r4, sp, #0x8 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + add r1, sp, #0x22c + mov r0, r5 + ldmia r4, {r2-r3} + bl long2str + movs r7, r0 + beq _020E148C +_020E122C: + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _020E14D8 +_020E123C: + .byte 0x20, 0x00, 0xDD, 0xE5 + .byte 0x09, 0x00, 0x50, 0xE3, 0x5C, 0x02, 0x9D, 0x15, 0x08, 0x00, 0x80, 0x12, 0x5C, 0x02, 0x8D, 0x15 + .byte 0x02, 0x00, 0x00, 0x1A, 0x5C, 0x02, 0x9D, 0xE5, 0x08, 0x00, 0x80, 0xE2, 0x5C, 0x02, 0x8D, 0xE5 + .byte 0x08, 0x70, 0x10, 0xE5, 0x04, 0x60, 0x10, 0xE5, 0x1C, 0x00, 0x8D, 0xE2, 0x04, 0x40, 0x4D, 0xE2 + .byte 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x84, 0xE8, 0x00, 0x30, 0x94, 0xE5, 0x07, 0x00, 0xA0, 0xE1 + .byte 0x06, 0x10, 0xA0, 0xE1, 0x8B, 0x2F, 0x8D, 0xE2, 0x0B, 0xFD, 0xFF, 0xEB, 0x00, 0x70, 0xB0, 0xE1 + .byte 0x7D, 0x00, 0x00, 0x0A, 0x02, 0x0C, 0x8D, 0xE2, 0x2B, 0x00, 0x80, 0xE2, 0x07, 0x60, 0x40, 0xE0 + .byte 0x8C, 0x00, 0x00, 0xEA +_020E12A4: + ldrb r0, [sp, #0x20] + cmp r0, #0x9 + ldrne r0, [sp, #0x25c] + addne r0, r0, #0x8 + strne r0, [sp, #0x25c] + bne _020E12C8 + ldr r0, [sp, #0x25c] + add r0, r0, #0x8 + str r0, [sp, #0x25c] +_020E12C8: + ldr r7, [r0, #-0x8] + ldr r6, [r0, #-0x4] + add r0, sp, #0x1c + sub r4, sp, #0x4 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + ldr r3, [r4, #0x0] + mov r0, r7 + mov r1, r6 + add r2, sp, #0x22c + bl double2hex + movs r7, r0 + beq _020E148C + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _020E14D8 +_020E130C: + .byte 0x20, 0x00, 0xDD, 0xE5 + .byte 0x05, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x00, 0x1A, 0x5C, 0x02, 0x9D, 0xE5, 0x02, 0x2C, 0xA0, 0xE3 + .byte 0x04, 0x00, 0x80, 0xE2, 0x5C, 0x02, 0x8D, 0xE5, 0x04, 0x10, 0x10, 0xE5, 0x2C, 0x00, 0x8D, 0xE2 + .byte 0x00, 0x00, 0x51, 0xE3, 0x00, 0x13, 0x9F, 0x05, 0x20, 0xF8, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x51, 0x00, 0x00, 0xBA, 0x2C, 0x70, 0x8D, 0xE2, 0x03, 0x00, 0x00, 0xEA, 0x5C, 0x02, 0x9D, 0xE5 + .byte 0x04, 0x00, 0x80, 0xE2, 0x5C, 0x02, 0x8D, 0xE5, 0x04, 0x70, 0x10, 0xE5, 0x1F, 0x00, 0xDD, 0xE5 + .byte 0x00, 0x00, 0x57, 0xE3, 0xD4, 0x72, 0x9F, 0x05, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A + .byte 0x1E, 0x00, 0xDD, 0xE5, 0x01, 0x60, 0xD7, 0xE4, 0x00, 0x00, 0x50, 0xE3, 0x55, 0x00, 0x00, 0x0A + .byte 0x28, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x56, 0xE1, 0x00, 0x60, 0xA0, 0xC1, 0x51, 0x00, 0x00, 0xEA + .byte 0x1E, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0x28, 0x60, 0x9D, 0xE5 + .byte 0x07, 0x00, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x41, 0xF8, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x07, 0x60, 0x40, 0x10, 0x46, 0x00, 0x00, 0xEA, 0x07, 0x00, 0xA0, 0xE1 + .byte 0xB9, 0x06, 0x00, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x42, 0x00, 0x00, 0xEA, 0x5C, 0x12, 0x9D, 0xE5 + .byte 0x20, 0x00, 0xDD, 0xE5, 0x04, 0x10, 0x81, 0xE2, 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x10, 0x11, 0xE5 + .byte 0x08, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x8B, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA + .byte 0x89, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x11, 0x00, 0x00, 0xEA + .byte 0x85, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA + .byte 0x00, 0xA0, 0x81, 0xE5, 0x80, 0x00, 0x00, 0xEA, 0xB0, 0xA0, 0xC1, 0xE1, 0x7E, 0x00, 0x00, 0xEA + .byte 0x00, 0xA0, 0x81, 0xE5, 0x7C, 0x00, 0x00, 0xEA, 0x00, 0xA0, 0x81, 0xE5, 0xCA, 0x0F, 0xA0, 0xE1 + .byte 0x04, 0x00, 0x81, 0xE5, 0x78, 0x00, 0x00, 0xEA, 0x00, 0xA0, 0x81, 0xE5, 0x76, 0x00, 0x00, 0xEA + .byte 0x00, 0xA0, 0x81, 0xE5, 0x74, 0x00, 0x00, 0xEA, 0x00, 0xA0, 0x81, 0xE5, 0xCA, 0x0F, 0xA0, 0xE1 + .byte 0x04, 0x00, 0x81, 0xE5, 0x70, 0x00, 0x00, 0xEA +_020E1458: + ldr r0, [sp, #0x25c] + add r7, sp, #0x2c + add r0, r0, #0x4 + str r0, [sp, #0x25c] + ldr r0, [r0, #-0x4] + mov r6, #0x1 + strb r0, [sp, #0x2c] + b _020E14D8 +_020E1478: + mov r0, #0x25 + strb r0, [sp, #0x2c] + add r7, sp, #0x2c + mov r6, #0x1 + b _020E14D8 +_020E148C: + ldr r0, [sp, #0xc] + bl strlen + movs r4, r0 + beq _020E14C4 + ldr r1, [sp, #0xc] + mov r0, r8 + mov r2, r4 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E14C4: + add sp, sp, #0x22c + add r0, r10, r4 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E14D8: + ldrb r0, [sp, #0x1c] + mov r4, r6 + cmp r0, #0x0 + beq _020E158C + cmp r0, #0x2 + moveq r0, #0x30 + movne r0, #0x20 + strb r0, [sp, #0x19] + ldrsb r0, [r7, #0x0] + cmp r0, #0x2b + cmpne r0, #0x2d + cmpne r0, #0x20 + bne _020E1548 + ldrsb r0, [sp, #0x19] + cmp r0, #0x30 + bne _020E1548 + mov r0, r8 + mov r1, r7 + mov r2, #0x1 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + add r7, r7, #0x1 + sub r6, r6, #0x1 +_020E1548: + ldr r0, [sp, #0x24] + cmp r4, r0 + bge _020E158C +_020E1554: + mov r0, r8 + add r1, sp, #0x19 + mov r2, #0x1 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x24] + add r4, r4, #0x1 + cmp r4, r0 + blt _020E1554 +_020E158C: + cmp r6, #0x0 + beq _020E15BC + mov r0, r8 + mov r1, r7 + mov r2, r6 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E15BC: + ldrb r0, [sp, #0x1c] + cmp r0, #0x0 + bne _020E1618 + ldr r0, [sp, #0x24] + cmp r4, r0 + bge _020E1618 + mov r6, #0x20 + add r7, sp, #0x18 +_020E15DC: + mov r0, r8 + mov r1, r7 + mov r2, #0x1 + strb r6, [sp, #0x18] + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x24] + add r4, r4, #0x1 + cmp r4, r0 + blt _020E15DC +_020E1618: + add r10, r10, r4 + ldrsb r0, [r11, #0x0] + cmp r0, #0x0 + bne _020E0E50 +_020E1628: + mov r0, r10 + add sp, sp, #0x22c + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E163C: + .byte 0xD8, 0x6D, 0x10, 0x02 + .byte 0xDC, 0x6D, 0x10, 0x02 + + arm_func_start __FileWrite +__FileWrite: ; 0x020E1644 + stmdb sp!, {r3-r5,lr} + mov r5, r0 + mov r0, r1 + mov r3, r5 + mov r1, #0x1 + mov r4, r2 + bl __fwrite +_020E1660: + .byte 0x00, 0x00, 0x54, 0xE1, 0x00, 0x50, 0xA0, 0x13, 0x05, 0x00, 0xA0, 0xE1, 0x38, 0x80, 0xBD, 0xE8 + + arm_func_start __StringWrite +__StringWrite: ; 0x020E1670 + stmdb sp!, {r3-r5,lr} + mov r4, r0 + ldr r3, [r4, #0x8] + mov r5, r2 + ldr r2, [r4, #0x4] + add r0, r3, r5 + cmp r0, r2 + ldr r0, [r4, #0x0] + subhi r5, r2, r3 + mov r2, r5 + add r0, r0, r3 + bl memcpy + ldr r1, [r4, #0x8] + mov r0, #0x1 + add r1, r1, r5 + str r1, [r4, #0x8] + ldmia sp!, {r3-r5,pc} + + arm_func_start printf +printf: ; 0x020E16B4 + stmdb sp!, {r0-r3} + stmdb sp!, {r4,lr} + ldr r0, _020E17B4 ; =0x02106AA4 + mvn r1, #0x0 + bl fwide +_020E16C8: + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xE0, 0xA3 + .byte 0x10, 0x40, 0xBD, 0xA8, 0x10, 0xD0, 0x8D, 0xA2, 0x1E, 0xFF, 0x2F, 0xA1, 0xD4, 0x00, 0x9F, 0xE5 + .byte 0xFF, 0xA9, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A, 0xC8, 0x00, 0x9F, 0xE5 + .byte 0xC8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0xC4, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5 + .byte 0x01, 0x20, 0xA0, 0xE3, 0x0C, 0x30, 0x81, 0xE5, 0x0C, 0x20, 0x80, 0xE5, 0x15, 0x00, 0x00, 0xEA + .byte 0xA4, 0x00, 0x9F, 0xE5, 0xA4, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5, 0x0C, 0x10, 0x91, 0xE5 + .byte 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A, 0x90, 0x00, 0x9F, 0xE5 + .byte 0x0C, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2, 0x0C, 0x10, 0x80, 0xE5, 0x09, 0x00, 0x00, 0xEA + .byte 0x70, 0x00, 0x9F, 0xE5, 0x31, 0xAA, 0xFF, 0xEB, 0x6C, 0x00, 0x9F, 0xE5, 0x6C, 0x10, 0x9F, 0xE5 + .byte 0x04, 0x20, 0x90, 0xE5, 0x68, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5, 0x01, 0x20, 0xA0, 0xE3 + .byte 0x0C, 0x30, 0x81, 0xE5, 0x0C, 0x20, 0x80, 0xE5, 0x08, 0x00, 0x8D, 0xE2, 0x03, 0x30, 0xC0, 0xE3 + .byte 0x08, 0x20, 0x9D, 0xE5, 0x4C, 0x00, 0x9F, 0xE5, 0x34, 0x10, 0x9F, 0xE5, 0x04, 0x30, 0x83, 0xE2 + .byte 0xA6, 0xFD, 0xFF, 0xEB, 0x38, 0x10, 0x9F, 0xE5, 0x00, 0x40, 0xA0, 0xE1, 0x0C, 0x00, 0x91, 0xE5 + .byte 0x01, 0x00, 0x50, 0xE2, 0x0C, 0x00, 0x81, 0xE5, 0x01, 0x00, 0x00, 0x1A, 0x14, 0x00, 0x9F, 0xE5 + .byte 0xFE, 0xA9, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x10, 0xD0, 0x8D, 0xE2 + .byte 0x1E, 0xFF, 0x2F, 0xE1 +_020E17B4: .word 0x02106AA4 +_020E17B8: + .byte 0x18, 0x71, 0x1D, 0x02, 0x98, 0x34, 0x1D, 0x02 + .byte 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0x44, 0x16, 0x0E, 0x02 + + arm_func_start vsnprintf +vsnprintf: ; 0x020E17CC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + mov r4, r1 + mov r12, #0x0 + ldr r0, _020E1830 ; =__StringWrite + add r1, sp, #0x0 + str r5, [sp, #0x0] + str r4, [sp, #0x4] + str r12, [sp, #0x8] + bl __pformatter +_020E17F8: + .byte 0x00, 0x00, 0x55, 0xE3, 0x0C, 0xD0, 0x8D, 0x02 + .byte 0x30, 0x80, 0xBD, 0x08, 0x04, 0x00, 0x50, 0xE1, 0x00, 0x10, 0xA0, 0x33, 0x0C, 0xD0, 0x8D, 0x32 + .byte 0x00, 0x10, 0xC5, 0x37, 0x30, 0x80, 0xBD, 0x38, 0x00, 0x00, 0x54, 0xE3, 0x04, 0x10, 0x85, 0x10 + .byte 0x00, 0x20, 0xA0, 0x13, 0x01, 0x20, 0x41, 0x15, 0x0C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 +_020E1830: .word __StringWrite + + arm_func_start snprintf +snprintf: ; 0x020E1834 + stmdb sp!, {r0-r3} + stmdb sp!, {r3,lr} + add r3, sp, #0x10 + bic r3, r3, #0x3 + ldr r2, [sp, #0x10] + add r3, r3, #0x4 + bl vsnprintf + ldmia sp!, {r3,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start sprintf +sprintf: ; 0x020E185C + stmdb sp!, {r0-r3} + stmdb sp!, {r3,lr} + add r1, sp, #0xc + bic r1, r1, #0x3 + add r3, r1, #0x4 + ldr r2, [sp, #0xc] + mvn r1, #0x0 + bl vsnprintf + ldmia sp!, {r3,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start qsort +qsort: ; 0x020E1888 + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x10 + mov r9, r1 + cmp r9, #0x2 + mov r10, r0 + mov r8, r2 + mov r7, r3 + addcc sp, sp, #0x10 + ldmccia sp!, {r3-r11,pc} +_020E18AC: + .byte 0xA9, 0x00, 0xA0, 0xE1 + .byte 0x01, 0xB0, 0x80, 0xE2, 0x01, 0x00, 0x4B, 0xE2, 0x98, 0xA0, 0x20, 0xE0, 0x01, 0x20, 0x49, 0xE2 + .byte 0x0C, 0x00, 0x8D, 0xE5, 0x98, 0xA2, 0x20, 0xE0, 0x08, 0x00, 0x8D, 0xE5, 0x9B, 0x08, 0x00, 0xE0 + .byte 0x00, 0x10, 0xE0, 0xE3, 0x04, 0x00, 0x8D, 0xE5, 0x98, 0x01, 0x00, 0xE0, 0x00, 0x00, 0x8D, 0xE5 + .byte 0x01, 0x00, 0x5B, 0xE3, 0x07, 0x00, 0x00, 0x9A, 0x04, 0x00, 0x9D, 0xE5, 0x01, 0xB0, 0x4B, 0xE2 + .byte 0x08, 0x00, 0x40, 0xE0, 0x04, 0x00, 0x8D, 0xE5, 0x0C, 0x00, 0x9D, 0xE5, 0x08, 0x00, 0x40, 0xE0 + .byte 0x0C, 0x00, 0x8D, 0xE5, 0x11, 0x00, 0x00, 0xEA, 0x08, 0x20, 0xA0, 0xE1, 0x08, 0x40, 0x9D, 0xE5 + .byte 0x0C, 0x30, 0x9D, 0xE5, 0x00, 0x00, 0x58, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0xD0, 0x00, 0xD4, 0xE1 + .byte 0xD0, 0x10, 0xD3, 0xE1, 0x01, 0x20, 0x52, 0xE2, 0x01, 0x00, 0xC3, 0xE4, 0x01, 0x10, 0xC4, 0xE4 + .byte 0xF9, 0xFF, 0xFF, 0x1A, 0x01, 0x90, 0x49, 0xE2, 0x01, 0x00, 0x59, 0xE3, 0x10, 0xD0, 0x8D, 0x02 + .byte 0xF8, 0x8F, 0xBD, 0x08, 0x08, 0x00, 0x9D, 0xE5, 0x08, 0x00, 0x40, 0xE0, 0x08, 0x00, 0x8D, 0xE5 + .byte 0x04, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x9D, 0xE5, 0x0B, 0x40, 0xA0, 0xE1, 0x00, 0x00, 0x81, 0xE0 + .byte 0x8B, 0x00, 0x59, 0xE1, 0x00, 0x50, 0x8A, 0xE0, 0xDC, 0xFF, 0xFF, 0x3A, 0x84, 0x40, 0xA0, 0xE1 + .byte 0x01, 0x00, 0x44, 0xE2, 0x05, 0x60, 0xA0, 0xE1, 0x98, 0xA0, 0x25, 0xE0, 0x04, 0x00, 0x59, 0xE1 + .byte 0x05, 0x00, 0x00, 0x9A, 0x05, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0x85, 0xE0, 0x37, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x40, 0x84, 0xB2, 0x08, 0x50, 0x85, 0xB0, 0x06, 0x00, 0xA0, 0xE1 + .byte 0x05, 0x10, 0xA0, 0xE1, 0x37, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0xCB, 0xFF, 0xFF, 0xAA + .byte 0x08, 0x20, 0xA0, 0xE1, 0x05, 0x30, 0xA0, 0xE1, 0x00, 0x00, 0x58, 0xE3, 0x05, 0x00, 0x00, 0x0A + .byte 0xD0, 0x10, 0xD6, 0xE1, 0xD0, 0x00, 0xD3, 0xE1, 0x01, 0x20, 0x52, 0xE2, 0x01, 0x00, 0xC6, 0xE4 + .byte 0x01, 0x10, 0xC3, 0xE4, 0xF9, 0xFF, 0xFF, 0x1A, 0x84, 0x00, 0x59, 0xE1, 0xE2, 0xFF, 0xFF, 0x2A + .byte 0xBE, 0xFF, 0xFF, 0xEA, 0x10, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 + + arm_func_start rand +rand: ; 0x020E19EC + ldr r2, _020E1A14 ; =0x02106DE0 + ldr r0, _020E1A18 ; =0x41C64E6D + ldr r3, [r2, #0x0] + ldr r1, _020E1A1C ; =0x00007FFF + mul r0, r3, r0 + add r0, r0, #0x39 + add r0, r0, #0x3000 + str r0, [r2, #0x0] + and r0, r1, r0, lsr #0x10 + bx lr + .balign 4 +_020E1A14: .word 0x02106DE0 +_020E1A18: .word 0x41C64E6D +_020E1A1C: .word 0x00007FFF + + arm_func_start srand +srand: ; 0x020E1A20 + ldr r1, _020E1A2C ; =0x02106DE0 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020E1A2C: .word 0x02106DE0 + + arm_func_start parse_format_scanf +parse_format_scanf: ; 0x020E1A30 + stmdb sp!, {r3-r7,lr} + sub sp, sp, #0x28 + ldr r6, _020E1F20 ; =0x0210440C + add r5, sp, #0x0 + mov r7, r0 + mov lr, r1 + mov r4, r5 + ldmia r6!, {r0-r3} + stmia r5!, {r0-r3} + ldmia r6!, {r0-r3} + stmia r5!, {r0-r3} + ldmia r6, {r0-r1} + stmia r5, {r0-r1} + ldrsb r0, [r7, #0x1] + add r12, r7, #0x1 + cmp r0, #0x25 + bne _020E1A9C + strb r0, [sp, #0x3] + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4, {r0-r1} + stmia lr, {r0-r1} + add sp, sp, #0x28 + add r0, r12, #0x1 + ldmia sp!, {r3-r7,pc} +_020E1A9C: + cmp r0, #0x2a + moveq r0, #0x1 + streqb r0, [sp, #0x0] + ldreqsb r0, [r12, #0x1]! + cmp r0, #0x0 + blt _020E1ABC + cmp r0, #0x80 + blt _020E1AC4 +_020E1ABC: + mov r1, #0x0 + b _020E1AD4 +_020E1AC4: + ldr r1, _020E1F24 ; =0x0210430C + mov r2, r0, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x8 +_020E1AD4: + cmp r1, #0x0 + beq _020E1B74 + mov r1, #0x0 + ldr r3, _020E1F24 ; =0x0210430C + str r1, [sp, #0x4] + mov r4, r1 + mov r1, #0xa +_020E1AF0: + ldr r2, [sp, #0x4] + sub r0, r0, #0x30 + mla r0, r2, r1, r0 + str r0, [sp, #0x4] + ldrsb r0, [r12, #0x1]! + cmp r0, #0x0 + blt _020E1B14 + cmp r0, #0x80 + blt _020E1B1C +_020E1B14: + mov r2, r4 + b _020E1B28 +_020E1B1C: + mov r2, r0, lsl #0x1 + ldrh r2, [r3, r2] + and r2, r2, #0x8 +_020E1B28: + cmp r2, #0x0 + bne _020E1AF0 + ldr r1, [sp, #0x4] + cmp r1, #0x0 + bne _020E1B6C + mov r0, #0xff + add r4, sp, #0x0 + strb r0, [sp, #0x3] + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4, {r0-r1} + stmia lr, {r0-r1} + add sp, sp, #0x28 + add r0, r12, #0x1 + ldmia sp!, {r3-r7,pc} +_020E1B6C: + mov r1, #0x1 + strb r1, [sp, #0x1] +_020E1B74: + cmp r0, #0x6c + mov r1, #0x1 + bgt _020E1BAC + cmp r0, #0x68 + blt _020E1BA0 + beq _020E1BC8 + cmp r0, #0x6a + beq _020E1C14 + cmp r0, #0x6c + beq _020E1BE4 + b _020E1C38 +_020E1BA0: + cmp r0, #0x4c + beq _020E1C08 + b _020E1C38 +_020E1BAC: + cmp r0, #0x74 + bgt _020E1BBC + beq _020E1C2C + b _020E1C38 +_020E1BBC: + cmp r0, #0x7a + beq _020E1C20 + b _020E1C38 +_020E1BC8: + mov r2, #0x2 + strb r2, [sp, #0x2] + ldrsb r2, [r12, #0x1] + cmp r2, #0x68 + streqb r1, [sp, #0x2] + ldreqsb r0, [r12, #0x1]! + b _020E1C3C +_020E1BE4: + mov r2, #0x3 + strb r2, [sp, #0x2] + ldrsb r2, [r12, #0x1] + cmp r2, #0x6c + bne _020E1C3C + mov r0, #0x7 + strb r0, [sp, #0x2] + ldrsb r0, [r12, #0x1]! + b _020E1C3C +_020E1C08: + mov r2, #0x9 + strb r2, [sp, #0x2] + b _020E1C3C +_020E1C14: + mov r2, #0x4 + strb r2, [sp, #0x2] + b _020E1C3C +_020E1C20: + mov r2, #0x5 + strb r2, [sp, #0x2] + b _020E1C3C +_020E1C2C: + mov r2, #0x6 + strb r2, [sp, #0x2] + b _020E1C3C +_020E1C38: + mov r1, #0x0 +_020E1C3C: + cmp r1, #0x0 + ldrnesb r0, [r12, #0x1]! + strb r0, [sp, #0x3] + cmp r0, #0x5b + bgt _020E1C90 + bge _020E1DE0 + cmp r0, #0x47 + bgt _020E1C84 + subs r1, r0, #0x41 + addpl pc, pc, r1, lsl #0x2 + b _020E1EF0 +_020E1C68: + .byte 0x2B, 0x00, 0x00, 0xEA, 0x9F, 0x00, 0x00, 0xEA + .byte 0x9E, 0x00, 0x00, 0xEA, 0x9D, 0x00, 0x00, 0xEA, 0x27, 0x00, 0x00, 0xEA, 0x26, 0x00, 0x00, 0xEA + .byte 0x25, 0x00, 0x00, 0xEA +_020E1C84: + cmp r0, #0x58 + beq _020E1D08 + b _020E1EF0 +_020E1C90: + cmp r0, #0x61 + bgt _020E1CA0 + beq _020E1D1C + b _020E1EF0 +_020E1CA0: + sub r0, r0, #0x63 + cmp r0, #0x15 + addls pc, pc, r0, lsl #0x2 + b _020E1EF0 +_020E1CB0: + .byte 0x2D, 0x00, 0x00, 0xEA, 0x13, 0x00, 0x00, 0xEA, 0x17, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA + .byte 0x15, 0x00, 0x00, 0xEA, 0x89, 0x00, 0x00, 0xEA, 0x0E, 0x00, 0x00, 0xEA, 0x87, 0x00, 0x00, 0xEA + .byte 0x86, 0x00, 0x00, 0xEA, 0x85, 0x00, 0x00, 0xEA, 0x84, 0x00, 0x00, 0xEA, 0x85, 0x00, 0x00, 0xEA + .byte 0x08, 0x00, 0x00, 0xEA, 0x1B, 0x00, 0x00, 0xEA, 0x80, 0x00, 0x00, 0xEA, 0x7F, 0x00, 0x00, 0xEA + .byte 0x26, 0x00, 0x00, 0xEA, 0x7D, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA, 0x7B, 0x00, 0x00, 0xEA + .byte 0x7A, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA +_020E1D08: + ldrb r0, [sp, #0x2] + cmp r0, #0x9 + moveq r0, #0xff + streqb r0, [sp, #0x3] + b _020E1EF8 +_020E1D1C: + ldrb r1, [sp, #0x2] + cmp r1, #0x1 + cmpne r1, #0x2 + beq _020E1D3C + add r0, r1, #0xfc + and r0, r0, #0xff + cmp r0, #0x3 + bhi _020E1D48 +_020E1D3C: + mov r0, #0xff + strb r0, [sp, #0x3] + b _020E1EF8 +_020E1D48: + cmp r1, #0x3 + moveq r0, #0x8 + streqb r0, [sp, #0x2] + b _020E1EF8 +_020E1D58: + .byte 0x03, 0x10, 0xA0, 0xE3, 0x78, 0x00, 0xA0, 0xE3 + .byte 0x02, 0x10, 0xCD, 0xE5, 0x03, 0x00, 0xCD, 0xE5, 0x62, 0x00, 0x00, 0xEA, 0x02, 0x00, 0xDD, 0xE5 + .byte 0x03, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0xA0, 0x03, 0x02, 0x00, 0xCD, 0x05, 0x5D, 0x00, 0x00, 0x0A + .byte 0x00, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x13, 0x03, 0x00, 0xCD, 0x15, 0x59, 0x00, 0x00, 0xEA + .byte 0x02, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0xA0, 0x03, 0x02, 0x00, 0xCD, 0x05 + .byte 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x13, 0x03, 0x00, 0xCD, 0x15 + .byte 0x08, 0x20, 0x8D, 0xE2, 0x20, 0x10, 0xA0, 0xE3, 0xFF, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0x41, 0xE2 + .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0xC2, 0xE4, 0xFB, 0xFF, 0xFF, 0xCA, 0xC1, 0x10, 0xA0, 0xE3 + .byte 0xFE, 0x00, 0xA0, 0xE3, 0x09, 0x10, 0xCD, 0xE5, 0x0C, 0x00, 0xCD, 0xE5, 0x45, 0x00, 0x00, 0xEA +_020E1DE0: + ldrb r0, [sp, #0x2] + cmp r0, #0x3 + moveq r0, #0xa + streqb r0, [sp, #0x2] + beq _020E1E00 + cmp r0, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x3] +_020E1E00: + ldrsb r2, [r12, #0x1]! + mov r1, #0x0 + cmp r2, #0x5e + ldreqsb r2, [r12, #0x1]! + moveq r1, #0x1 + cmp r2, #0x5d + bne _020E1EA8 + ldrb r0, [sp, #0x13] + orr r0, r0, #0x20 + strb r0, [sp, #0x13] + ldrsb r2, [r12, #0x1]! + b _020E1EA8 +_020E1E30: + add r0, sp, #0x0 + and r3, r2, #0xff + add r6, r0, r3, asr #0x3 + ldrb r5, [r6, #0x8] + and r3, r2, #0x7 + mov r4, #0x1 + orr r3, r5, r4, lsl r3 + strb r3, [r6, #0x8] + ldrsb r3, [r12, #0x1] + cmp r3, #0x2d + bne _020E1EA4 + ldrsb r7, [r12, #0x2] + cmp r7, #0x0 + cmpne r7, #0x5d + beq _020E1EA4 + add r2, r2, #0x1 + cmp r2, r7 + bgt _020E1E9C +_020E1E78: + and r3, r2, #0xff + add r6, r0, r3, asr #0x3 + ldrb r5, [r6, #0x8] + and r3, r2, #0x7 + add r2, r2, #0x1 + orr r3, r5, r4, lsl r3 + strb r3, [r6, #0x8] + cmp r2, r7 + ble _020E1E78 +_020E1E9C: + ldrsb r2, [r12, #0x3]! + b _020E1EA8 +_020E1EA4: + ldrsb r2, [r12, #0x1]! +_020E1EA8: + cmp r2, #0x0 + cmpne r2, #0x5d + bne _020E1E30 + cmp r2, #0x0 + moveq r0, #0xff + streqb r0, [sp, #0x3] + beq _020E1EF8 + cmp r1, #0x0 + beq _020E1EF8 + add r2, sp, #0x8 + mov r1, #0x20 +_020E1ED4: + ldrb r0, [r2, #0x0] + sub r1, r1, #0x1 + cmp r1, #0x0 + mvn r0, r0 + strb r0, [r2], #0x1 + bgt _020E1ED4 + b _020E1EF8 +_020E1EF0: + mov r0, #0xff + strb r0, [sp, #0x3] +_020E1EF8: + add r4, sp, #0x0 + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4, {r0-r1} + stmia lr, {r0-r1} + add r0, r12, #0x1 + add sp, sp, #0x28 + ldmia sp!, {r3-r7,pc} + .balign 4 +_020E1F20: .word 0x0210440C +_020E1F24: .word 0x0210430C + + arm_func_start __sformatter +__sformatter: ; 0x020E1F28 + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x88 + ldrsb r5, [r2, #0x0] + str r2, [sp, #0xc] + mov r2, #0x0 + mov r9, r0 + mov r0, r2 + str r2, [sp, #0x20] + mov r8, r1 + str r3, [sp, #0x10] + str r0, [sp, #0x24] + cmp r5, #0x0 + ldr r10, [sp, #0xb0] + str r0, [sp, #0x30] + mov r4, r2 + str r0, [sp, #0x44] + str r0, [sp, #0x40] + beq _020E2C3C +_020E1F70: + cmp r5, #0x0 + mov r0, #0x1 + blt _020E1F84 + cmp r5, #0x80 + movlt r0, #0x0 +_020E1F84: + cmp r0, #0x0 + movne r0, #0x0 + bne _020E1FA0 + mov r1, r5, lsl #0x1 + ldr r0, _020E2C74 ; =0x0210430C + ldrh r0, [r0, r1] + and r0, r0, #0x100 +_020E1FA0: + cmp r0, #0x0 + beq _020E2060 + mov r2, #0x0 + ldr r1, _020E2C74 ; =0x0210430C + mov r12, r2 + mov r3, #0x1 +_020E1FB8: + ldr r0, [sp, #0xc] + ldrsb r5, [r0, #0x1]! + str r0, [sp, #0xc] + mov r0, r3 + cmp r5, #0x0 + blt _020E1FD8 + cmp r5, #0x80 + movlt r0, r2 +_020E1FD8: + cmp r0, #0x0 + movne r0, r12 + moveq r0, r5, lsl #0x1 + ldreqh r0, [r1, r0] + andeq r0, r0, #0x100 + cmp r0, #0x0 + bne _020E1FB8 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E2C2C + ldr r5, _020E2C74 ; =0x0210430C + b _020E200C +_020E2008: + add r4, r4, #0x1 +_020E200C: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + strb r0, [sp, #0x50] + ldrsb r1, [sp, #0x50] + cmp r1, #0x0 + blt _020E2034 + cmp r1, #0x80 + blt _020E203C +_020E2034: + mov r0, #0x0 + b _020E2048 +_020E203C: + mov r0, r1, lsl #0x1 + ldrh r0, [r5, r0] + and r0, r0, #0x100 +_020E2048: + cmp r0, #0x0 + bne _020E2008 + mov r0, r8 + mov r2, #0x1 + blx r9 + b _020E2C2C +_020E2060: + cmp r5, #0x25 + beq _020E20D8 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E20D8 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + strb r0, [sp, #0x50] + and r0, r5, #0xff + ldrsb r1, [sp, #0x50] + cmp r0, r1 + beq _020E20C4 + mov r0, r8 + mov r2, #0x1 + blx r9 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + ldr r0, [sp, #0xc] + add r0, r0, #0x1 + str r0, [sp, #0xc] + b _020E2C2C +_020E20C4: + ldr r0, [sp, #0xc] + add r4, r4, #0x1 + add r0, r0, #0x1 + str r0, [sp, #0xc] + b _020E2C2C +_020E20D8: + ldr r0, [sp, #0xc] + add r1, sp, #0x60 + bl parse_format_scanf + str r0, [sp, #0xc] + ldrb r0, [sp, #0x60] + cmp r0, #0x0 + bne _020E2114 + ldrb r0, [sp, #0x63] + cmp r0, #0x25 + beq _020E2114 + ldr r0, [sp, #0x10] + add r0, r0, #0x4 + str r0, [sp, #0x10] + ldr r5, [r0, #-0x4] + b _020E2118 +_020E2114: + mov r5, #0x0 +_020E2118: + ldrb r0, [sp, #0x63] + cmp r0, #0x6e + beq _020E2158 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E2158 + mov r0, r8 + mov r1, #0x0 + mov r2, #0x2 + blx r9 + cmp r0, #0x0 + beq _020E2158 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] +_020E2158: + ldrb r1, [sp, #0x63] + cmp r1, #0x5b + bgt _020E21B0 + bge _020E2984 + cmp r1, #0x47 + bgt _020E21A4 + subs r0, r1, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020E2198 +_020E217C: + .byte 0x1F, 0x01, 0x00, 0xEA + .byte 0xAD, 0x02, 0x00, 0xEA, 0xAC, 0x02, 0x00, 0xEA, 0xAB, 0x02, 0x00, 0xEA, 0x1B, 0x01, 0x00, 0xEA + .byte 0x1A, 0x01, 0x00, 0xEA, 0x19, 0x01, 0x00, 0xEA +_020E2198: + cmp r1, #0x25 + beq _020E287C + b _020E2C3C +_020E21A4: + cmp r1, #0x58 + beq _020E243C + b _020E2C3C +_020E21B0: + cmp r1, #0x78 + bgt _020E2228 + subs r0, r1, #0x63 + addpl pc, pc, r0, lsl #0x2 + b _020E221C +_020E21C4: + .byte 0x3E, 0x01, 0x00, 0xEA, 0x18, 0x00, 0x00, 0xEA, 0x0B, 0x01, 0x00, 0xEA + .byte 0x0A, 0x01, 0x00, 0xEA, 0x09, 0x01, 0x00, 0xEA, 0x97, 0x02, 0x00, 0xEA, 0x15, 0x00, 0x00, 0xEA + .byte 0x95, 0x02, 0x00, 0xEA, 0x94, 0x02, 0x00, 0xEA, 0x93, 0x02, 0x00, 0xEA, 0x92, 0x02, 0x00, 0xEA + .byte 0x74, 0x02, 0x00, 0xEA, 0x8C, 0x00, 0x00, 0xEA, 0x8F, 0x02, 0x00, 0xEA, 0x8E, 0x02, 0x00, 0xEA + .byte 0x8D, 0x02, 0x00, 0xEA, 0xBF, 0x01, 0x00, 0xEA, 0x8B, 0x02, 0x00, 0xEA, 0x88, 0x00, 0x00, 0xEA + .byte 0x89, 0x02, 0x00, 0xEA, 0x88, 0x02, 0x00, 0xEA, 0x87, 0x00, 0x00, 0xEA +_020E221C: + cmp r1, #0x61 + beq _020E2600 + b _020E2C3C +_020E2228: + cmp r1, #0xff + b _020E2C3C +_020E2230: + .byte 0x0A, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x00, 0xEA, 0x00, 0x00, 0xA0, 0xE3, 0x30, 0x10, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x51, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x00, 0x00, 0xA0, 0xE3, 0x1C, 0x00, 0x8D, 0xE5 + .byte 0x20, 0x00, 0x8D, 0xE5, 0x24, 0x00, 0x8D, 0xE5, 0x41, 0x00, 0x00, 0xEA, 0x62, 0x10, 0xDD, 0xE5 + .byte 0x5C, 0x20, 0x8D, 0xE2, 0x07, 0x00, 0x51, 0xE3, 0x04, 0x00, 0x51, 0x13, 0x58, 0x10, 0x8D, 0xE2 + .byte 0x0A, 0x00, 0x00, 0x1A, 0x00, 0x20, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5, 0x54, 0x10, 0x8D, 0xE2 + .byte 0x08, 0x10, 0x8D, 0xE5, 0x64, 0x10, 0x9D, 0xE5, 0x09, 0x20, 0xA0, 0xE1, 0x08, 0x30, 0xA0, 0xE1 + .byte 0xE7, 0x09, 0x00, 0xEB, 0x34, 0x00, 0x8D, 0xE5, 0x18, 0x10, 0x8D, 0xE5, 0x08, 0x00, 0x00, 0xEA + .byte 0x00, 0x20, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5, 0x54, 0x10, 0x8D, 0xE2, 0x08, 0x10, 0x8D, 0xE5 + .byte 0x64, 0x10, 0x9D, 0xE5, 0x09, 0x20, 0xA0, 0xE1, 0x08, 0x30, 0xA0, 0xE1, 0xE2, 0x08, 0x00, 0xEB + .byte 0x3C, 0x00, 0x8D, 0xE5, 0x5C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A + .byte 0x00, 0x00, 0x5A, 0xE3, 0x58, 0x02, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x30, 0x00, 0x8D, 0xE5 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x1C, 0x00, 0x8D, 0xE5, 0x20, 0x00, 0x8D, 0xE5, 0x24, 0x00, 0x8D, 0xE5 + .byte 0x1B, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x84, 0xE0, 0x62, 0x00, 0xDD, 0xE5, 0x07, 0x00, 0x50, 0xE3 + .byte 0x04, 0x00, 0x50, 0x13, 0x0E, 0x00, 0x00, 0x1A, 0x58, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 + .byte 0x06, 0x00, 0x00, 0x0A, 0x34, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x70, 0xE2, 0x20, 0x00, 0x8D, 0xE5 + .byte 0x18, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0xE0, 0xE2, 0x24, 0x00, 0x8D, 0xE5, 0x0C, 0x00, 0x00, 0xEA + .byte 0x34, 0x00, 0x9D, 0xE5, 0x20, 0x00, 0x8D, 0xE5, 0x18, 0x00, 0x9D, 0xE5, 0x24, 0x00, 0x8D, 0xE5 + .byte 0x07, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x3C, 0x00, 0x9D, 0x05 + .byte 0x1C, 0x00, 0x8D, 0x05, 0x02, 0x00, 0x00, 0x0A, 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x60, 0xE2 + .byte 0x1C, 0x00, 0x8D, 0xE5, 0x00, 0x00, 0x55, 0xE3, 0x2B, 0x00, 0x00, 0x0A, 0x62, 0x00, 0xDD, 0xE5 + .byte 0x07, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x22, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x00, 0xEA + .byte 0x08, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA, 0x0E, 0x00, 0x00, 0xEA + .byte 0x12, 0x00, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x85, 0xE5, 0x17, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0xC5, 0xE5 + .byte 0x14, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5, 0xB0, 0x00, 0xC5, 0xE1, 0x11, 0x00, 0x00, 0xEA + .byte 0x1C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x0E, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x85, 0xE5, 0x24, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5, 0x09, 0x00, 0x00, 0xEA + .byte 0x1C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x06, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x85, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5 + .byte 0x24, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5, 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 + .byte 0x44, 0x00, 0x9D, 0x05, 0x01, 0x00, 0x80, 0x02, 0x44, 0x00, 0x8D, 0x05, 0x40, 0x00, 0x9D, 0xE5 + .byte 0x01, 0x00, 0x80, 0xE2, 0x40, 0x00, 0x8D, 0xE5, 0xFF, 0x01, 0x00, 0xEA, 0x08, 0x00, 0xA0, 0xE3 + .byte 0x02, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x00, 0xEA +_020E243C: + mov r0, #0x10 + ldr r1, [sp, #0x30] + cmp r1, #0x0 + beq _020E2460 + mov r0, #0x0 + str r0, [sp, #0x3c] + str r0, [sp, #0x34] + str r0, [sp, #0x18] + b _020E2538 +_020E2460: + ldrb r1, [sp, #0x62] + add r2, sp, #0x5c + cmp r1, #0x7 + cmpne r1, #0x4 + add r1, sp, #0x58 + bne _020E24A4 + str r2, [sp, #0x0] + str r1, [sp, #0x4] + add r1, sp, #0x54 + str r1, [sp, #0x8] + ldr r1, [sp, #0x64] + mov r2, r9 + mov r3, r8 + bl __strtoull + str r0, [sp, #0x34] + str r1, [sp, #0x18] + b _020E24C8 +_020E24A4: + str r2, [sp, #0x0] + str r1, [sp, #0x4] + add r1, sp, #0x54 + str r1, [sp, #0x8] + ldr r1, [sp, #0x64] + mov r2, r9 + mov r3, r8 + bl __strtoul + str r0, [sp, #0x3c] +_020E24C8: + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + bne _020E24F8 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + mov r0, #0x0 + str r0, [sp, #0x3c] + str r0, [sp, #0x34] + str r0, [sp, #0x18] + b _020E2538 +_020E24F8: + add r4, r4, r0 + ldr r0, [sp, #0x58] + cmp r0, #0x0 + beq _020E2538 + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + ldrne r0, [sp, #0x3c] + rsbne r0, r0, #0x0 + strne r0, [sp, #0x3c] + bne _020E2538 + ldr r0, [sp, #0x34] + rsbs r0, r0, #0x0 + str r0, [sp, #0x34] + ldr r0, [sp, #0x18] + rsc r0, r0, #0x0 + str r0, [sp, #0x18] +_020E2538: + cmp r5, #0x0 + beq _020E25F0 + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + addls pc, pc, r0, lsl #0x2 + b _020E25DC +_020E2550: + .byte 0x06, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA + .byte 0x0E, 0x00, 0x00, 0xEA, 0x12, 0x00, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA + .byte 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x17, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0xC5, 0xE5, 0x14, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5, 0xB0, 0x00, 0xC5, 0xE1 + .byte 0x11, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x0E, 0x00, 0x00, 0xEA + .byte 0x34, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x18, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5 + .byte 0x09, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x06, 0x00, 0x00, 0xEA + .byte 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x34, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x85, 0xE5, 0x18, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5 +_020E25DC: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + ldreq r0, [sp, #0x44] + addeq r0, r0, #0x1 + streq r0, [sp, #0x44] +_020E25F0: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E2600: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + beq _020E261C + ldr r0, _020E2C78 ; =0x02106B78 + ldr r0, [r0, #0x0] + bl _f2d + b _020E2668 +_020E261C: + add r0, sp, #0x54 + str r0, [sp, #0x0] + ldr r0, [sp, #0x64] + mov r1, r9 + mov r2, r8 + add r3, sp, #0x5c + bl __strtold + ldr r2, [sp, #0x5c] + cmp r2, #0x0 + bne _020E2664 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + ldr r0, _020E2C78 ; =0x02106B78 + ldr r0, [r0, #0x0] + bl _f2d +_020E2660: + .byte 0x00, 0x00, 0x00, 0xEA +_020E2664: + add r4, r4, r2 +_020E2668: + cmp r5, #0x0 + beq _020E26B4 + ldrb r2, [sp, #0x62] + cmp r2, #0x0 + beq _020E2690 + cmp r2, #0x8 + beq _020E269C + cmp r2, #0x9 + stmeqia r5, {r0-r1} + b _020E26A0 +_020E2690: + bl _d2f +_020E2694: + .byte 0x00, 0x00, 0x85, 0xE5, 0x00, 0x00, 0x00, 0xEA +_020E269C: + stmia r5, {r0-r1} +_020E26A0: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + ldreq r0, [sp, #0x44] + addeq r0, r0, #0x1 + streq r0, [sp, #0x44] +_020E26B4: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E26C4: + .byte 0x61, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 + .byte 0x64, 0x00, 0x8D, 0x05, 0x00, 0x00, 0x55, 0xE3, 0x4B, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x5A, 0xE3 + .byte 0x04, 0x00, 0x00, 0x0A, 0x10, 0x00, 0x9D, 0xE5, 0x01, 0x70, 0xA0, 0xE3, 0x04, 0x00, 0x80, 0xE2 + .byte 0x04, 0xB0, 0x10, 0xE5, 0x10, 0x00, 0x8D, 0xE5, 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x00, 0x00, 0x50, 0xE3, 0x5C, 0x10, 0x8D, 0xE5, 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x5B, 0xE3 + .byte 0x00, 0x10, 0xC5, 0x15, 0x44, 0x01, 0x00, 0xEA, 0x00, 0x00, 0xE0, 0xE3, 0x2C, 0x50, 0x8D, 0xE5 + .byte 0x48, 0x00, 0x8D, 0xE5, 0x0D, 0x00, 0x00, 0xEA, 0x62, 0x00, 0xDD, 0xE5, 0x50, 0x60, 0xCD, 0xE5 + .byte 0x0A, 0x00, 0x50, 0xE3, 0xD0, 0x05, 0xDD, 0x11, 0x01, 0x00, 0xC5, 0x14, 0x04, 0x00, 0x00, 0x1A + .byte 0x05, 0x00, 0xA0, 0xE1, 0x50, 0x10, 0x8D, 0xE2, 0x01, 0x20, 0xA0, 0xE3, 0xD8, 0xF2, 0xFF, 0xEB + .byte 0x01, 0x50, 0x85, 0xE2, 0x5C, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0x80, 0xE2, 0x5C, 0x10, 0x8D, 0xE5 + .byte 0x64, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x40, 0xE2, 0x64, 0x00, 0x8D, 0xE5 + .byte 0x0E, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x5A, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x5B, 0xE1 + .byte 0x01, 0x70, 0xA0, 0x83, 0x00, 0x70, 0xA0, 0x93, 0x00, 0x00, 0x57, 0xE3, 0x07, 0x00, 0x00, 0x0A + .byte 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x60, 0xA0, 0xE1, 0x48, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x56, 0xE1, 0xDD, 0xFF, 0xFF, 0x1A + .byte 0x50, 0x60, 0xCD, 0xE5, 0x5C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A + .byte 0x00, 0x00, 0x5A, 0xE3, 0x0B, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x57, 0xE3, 0x09, 0x00, 0x00, 0x1A + .byte 0x00, 0x00, 0x5A, 0xE3, 0x18, 0x01, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x5B, 0xE3 + .byte 0x30, 0x00, 0x8D, 0xE5, 0x10, 0x01, 0x00, 0x0A, 0x2C, 0x00, 0x9D, 0xE5, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x00, 0x10, 0xC0, 0xE5, 0x0C, 0x01, 0x00, 0xEA, 0x00, 0x40, 0x84, 0xE0, 0x44, 0x00, 0x9D, 0xE5 + .byte 0x01, 0x00, 0x80, 0xE2, 0x44, 0x00, 0x8D, 0xE5, 0x17, 0x00, 0x00, 0xEA, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x5C, 0x00, 0x8D, 0xE5, 0x00, 0x50, 0xE0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x50, 0x60, 0xCD, 0xE5 + .byte 0x5C, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2, 0x5C, 0x00, 0x8D, 0xE5, 0x64, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x40, 0xE2, 0x64, 0x00, 0x8D, 0xE5, 0x06, 0x00, 0x00, 0x0A + .byte 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x60, 0xA0, 0xE1, 0x05, 0x00, 0x56, 0xE1, 0xEF, 0xFF, 0xFF, 0x1A, 0x50, 0x60, 0xCD, 0xE5 + .byte 0x5C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0xF3, 0x00, 0x00, 0x0A, 0x40, 0x00, 0x9D, 0xE5 + .byte 0x01, 0x00, 0x80, 0xE2, 0x40, 0x00, 0x8D, 0xE5, 0xEB, 0x00, 0x00, 0xEA +_020E287C: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E2C2C + ldr r5, _020E2C74 ; =0x0210430C + b _020E2894 +_020E2890: + add r4, r4, #0x1 +_020E2894: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + strb r0, [sp, #0x50] + ldrsb r1, [sp, #0x50] + cmp r1, #0x0 + blt _020E28BC + cmp r1, #0x80 + blt _020E28C4 +_020E28BC: + mov r0, #0x0 + b _020E28D0 +_020E28C4: + mov r0, r1, lsl #0x1 + ldrh r0, [r5, r0] + and r0, r0, #0x100 +_020E28D0: + cmp r0, #0x0 + bne _020E2890 + cmp r1, #0x25 + beq _020E2900 + mov r0, r8 + mov r2, #0x1 + blx r9 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + b _020E2C2C +_020E2900: + add r4, r4, #0x1 + b _020E2C2C +_020E2908: + .byte 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 + .byte 0x1B, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 + .byte 0x39, 0xFF, 0x2F, 0xE1, 0x50, 0x00, 0xCD, 0xE5, 0x05, 0x00, 0x00, 0xEA, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1 + .byte 0x50, 0x00, 0xCD, 0xE5, 0xD0, 0x15, 0xDD, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA + .byte 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA + .byte 0x0C, 0x03, 0x9F, 0xE5, 0x81, 0x20, 0xA0, 0xE1, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2 + .byte 0x00, 0x00, 0x50, 0xE3, 0xEC, 0xFF, 0xFF, 0x1A, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE3 + .byte 0x39, 0xFF, 0x2F, 0xE1 +_020E2984: + cmp r5, #0x0 + beq _020E2B00 + cmp r10, #0x0 + beq _020E29AC + ldr r0, [sp, #0x10] + mov r7, #0x1 + add r0, r0, #0x4 + str r0, [sp, #0x10] + ldr r0, [r0, #-0x4] + sub r11, r0, #0x1 +_020E29AC: + ldr r0, [sp, #0x30] + mov r1, #0x0 + cmp r0, #0x0 + str r1, [sp, #0x5c] + beq _020E29CC + cmp r11, #0x0 + strneb r1, [r5, #0x0] + b _020E2C2C +_020E29CC: + mvn r0, #0x0 + str r5, [sp, #0x28] + str r0, [sp, #0x4c] + b _020E2A30 +_020E29DC: + strb r6, [sp, #0x50] + ldrsb r1, [sp, #0x50] + add r2, sp, #0x60 + and r3, r1, #0xff + add r2, r2, r3, asr #0x3 + ldrb r3, [r2, #0x8] + and r0, r1, #0x7 + mov r2, #0x1 + tst r3, r2, lsl r0 + beq _020E2A80 + ldrb r0, [sp, #0x62] + cmp r0, #0xa + strneb r1, [r5], #0x1 + bne _020E2A24 + mov r0, r5 + add r1, sp, #0x50 + bl mbtowc + add r5, r5, #0x2 +_020E2A24: + ldr r0, [sp, #0x5c] + add r1, r0, #0x1 + str r1, [sp, #0x5c] +_020E2A30: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + sub r0, r0, #0x1 + str r0, [sp, #0x64] + beq _020E2A80 + cmp r10, #0x0 + beq _020E2A60 + cmp r11, r1 + movcs r7, #0x1 + movcc r7, #0x0 + cmp r7, #0x0 + beq _020E2A80 +_020E2A60: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r6, r0 + ldr r0, [sp, #0x4c] + cmp r6, r0 + bne _020E29DC +_020E2A80: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + beq _020E2AA0 + cmp r10, #0x0 + beq _020E2AD8 + cmp r7, #0x0 + bne _020E2AD8 +_020E2AA0: + mov r0, r8 + ldrsb r1, [sp, #0x50] + mov r2, #0x1 + blx r9 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + cmp r11, #0x0 + str r0, [sp, #0x30] + beq _020E2C2C + ldr r0, [sp, #0x28] + mov r1, #0x0 + strb r1, [r0, #0x0] + b _020E2C2C +_020E2AD8: + add r4, r4, r0 + ldrb r0, [sp, #0x62] + cmp r0, #0xa + mov r0, #0x0 + streqh r0, [r5, #0x0] + strneb r0, [r5, #0x0] + ldr r0, [sp, #0x44] + add r0, r0, #0x1 + str r0, [sp, #0x44] + b _020E2B9C +_020E2B00: + mov r0, #0x0 + str r0, [sp, #0x5c] + mvn r5, #0x0 + b _020E2B44 +_020E2B10: + strb r6, [sp, #0x50] + ldrsb r1, [sp, #0x50] + and r0, r1, #0x7 + and r2, r1, #0xff + add r1, sp, #0x60 + add r1, r1, r2, asr #0x3 + ldrb r2, [r1, #0x8] + mov r1, #0x1 + tst r2, r1, lsl r0 + beq _020E2B74 + ldr r0, [sp, #0x5c] + add r0, r0, #0x1 + str r0, [sp, #0x5c] +_020E2B44: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + sub r0, r0, #0x1 + str r0, [sp, #0x64] + beq _020E2B74 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r6, r0 + cmp r6, r5 + bne _020E2B10 +_020E2B74: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + bne _020E2B98 + mov r0, r8 + ldrsb r1, [sp, #0x50] + mov r2, #0x1 + blx r9 + b _020E2C2C +_020E2B98: + add r4, r4, r0 +_020E2B9C: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + blt _020E2BB8 + mov r0, r8 + ldrsb r1, [sp, #0x50] + mov r2, #0x1 + blx r9 +_020E2BB8: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E2BC8: + .byte 0x00, 0x00, 0x55, 0xE3, 0x16, 0x00, 0x00, 0x0A + .byte 0x62, 0x00, 0xDD, 0xE5, 0x07, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x12, 0x00, 0x00, 0xEA + .byte 0x06, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA + .byte 0x0D, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA + .byte 0x00, 0x40, 0x85, 0xE5, 0x08, 0x00, 0x00, 0xEA, 0xB0, 0x40, 0xC5, 0xE1, 0x06, 0x00, 0x00, 0xEA + .byte 0x00, 0x40, 0x85, 0xE5, 0x04, 0x00, 0x00, 0xEA, 0x00, 0x40, 0xC5, 0xE5, 0x02, 0x00, 0x00, 0xEA + .byte 0x00, 0x40, 0x85, 0xE5, 0xC4, 0x0F, 0xA0, 0xE1, 0x04, 0x00, 0x85, 0xE5 +_020E2C2C: + ldr r0, [sp, #0xc] + ldrsb r5, [r0, #0x0] + cmp r5, #0x0 + bne _020E1F70 +_020E2C3C: + mov r0, r8 + mov r1, #0x0 + mov r2, #0x2 + blx r9 + cmp r0, #0x0 + beq _020E2C68 + ldr r0, [sp, #0x40] + cmp r0, #0x0 + addeq sp, sp, #0x88 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,pc} +_020E2C68: + ldr r0, [sp, #0x44] + add sp, sp, #0x88 + ldmia sp!, {r3-r11,pc} + .balign 4 +_020E2C74: .word 0x0210430C +_020E2C78: .word 0x02106B78 + + arm_func_start __StringRead +__StringRead: ; 0x020E2C7C + cmp r2, #0x0 + beq _020E2C98 + cmp r2, #0x1 + beq _020E2CC8 + cmp r2, #0x2 + beq _020E2CF0 + b _020E2CF8 +_020E2C98: + ldr r1, [r0, #0x0] + ldrsb r2, [r1, #0x0] + cmp r2, #0x0 + bne _020E2CB8 + mov r1, #0x1 + str r1, [r0, #0x4] + sub r0, r1, #0x2 + bx lr +_020E2CB8: + add r1, r1, #0x1 + str r1, [r0, #0x0] + and r0, r2, #0xff + bx lr +_020E2CC8: + ldr r2, [r0, #0x4] + cmp r2, #0x0 + movne r2, #0x0 + strne r2, [r0, #0x4] + bne _020E2CE8 + ldr r2, [r0, #0x0] + sub r2, r2, #0x1 + str r2, [r0, #0x0] +_020E2CE8: + mov r0, r1 + bx lr +_020E2CF0: + ldr r0, [r0, #0x4] + bx lr +_020E2CF8: + mov r0, #0x0 + bx lr + + arm_func_start vsscanf +vsscanf: ; 0x020E2D00 + stmdb sp!, {lr} + sub sp, sp, #0xc + str r0, [sp, #0x4] + cmp r0, #0x0 + ldrnesb r0, [r0, #0x0] + mov lr, r1 + mov r3, r2 + cmpne r0, #0x0 + addeq sp, sp, #0xc + mvneq r0, #0x0 + ldmeqia sp!, {pc} + mov r12, #0x0 + str r12, [sp, #0x8] + ldr r0, _020E2D50 ; =__StringRead + add r1, sp, #0x4 + mov r2, lr + str r12, [sp, #0x0] + bl __sformatter + add sp, sp, #0xc + ldmia sp!, {pc} + .balign 4 +_020E2D50: .word __StringRead + + arm_func_start sscanf +sscanf: ; 0x020E2D54 + stmdb sp!, {r0-r3} + stmdb sp!, {r3,lr} + add r2, sp, #0xc + bic r2, r2, #0x3 + ldr r1, [sp, #0xc] + add r2, r2, #0x4 + bl vsscanf + ldmia sp!, {r3,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start raise +raise: ; 0x020E2D7C + stmdb sp!, {r3-r5,lr} + mov r5, r0 + cmp r5, #0x1 + blt _020E2D94 + cmp r5, #0x7 + ble _020E2D9C +_020E2D94: + mvn r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E2D9C: + ldr r0, _020E2E98 ; =0x021D7178 + bl OS_TryLockMutex +_020E2DA4: + .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A, 0xE8, 0x00, 0x9F, 0xE5 + .byte 0xE8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0xE4, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5 + .byte 0x01, 0x20, 0xA0, 0xE3, 0x1C, 0x30, 0x81, 0xE5, 0x1C, 0x20, 0x80, 0xE5, 0x15, 0x00, 0x00, 0xEA + .byte 0xC4, 0x00, 0x9F, 0xE5, 0xC4, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5, 0x1C, 0x10, 0x91, 0xE5 + .byte 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A, 0xB0, 0x00, 0x9F, 0xE5 + .byte 0x1C, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2, 0x1C, 0x10, 0x80, 0xE5, 0x09, 0x00, 0x00, 0xEA + .byte 0x90, 0x00, 0x9F, 0xE5, 0x81, 0xA4, 0xFF, 0xEB, 0x8C, 0x00, 0x9F, 0xE5, 0x8C, 0x10, 0x9F, 0xE5 + .byte 0x04, 0x20, 0x90, 0xE5, 0x88, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5, 0x01, 0x20, 0xA0, 0xE3 + .byte 0x1C, 0x30, 0x81, 0xE5, 0x1C, 0x20, 0x80, 0xE5, 0x78, 0x10, 0x9F, 0xE5, 0x01, 0x20, 0x45, 0xE2 + .byte 0x02, 0x41, 0x91, 0xE7, 0x01, 0x00, 0x54, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x02, 0x01, 0x81, 0x17 + .byte 0x5C, 0x00, 0x9F, 0xE5, 0x1C, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x51, 0xE2, 0x1C, 0x10, 0x80, 0xE5 + .byte 0x01, 0x00, 0x00, 0x1A, 0x3C, 0x00, 0x9F, 0xE5, 0x50, 0xA4, 0xFF, 0xEB, 0x01, 0x00, 0x54, 0xE3 + .byte 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x55, 0x03, 0x01, 0x00, 0x00, 0x1A + .byte 0x00, 0x00, 0xA0, 0xE3, 0x38, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x1A + .byte 0x00, 0x00, 0xA0, 0xE3, 0xB9, 0xEC, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1, 0x34, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x38, 0x80, 0xBD, 0xE8 +_020E2E98: .word 0x021D7178 +_020E2E9C: + .byte 0x98, 0x34, 0x1D, 0x02 + .byte 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0xAC, 0x74, 0x1D, 0x02 + + arm_func_start strlen +strlen: ; 0x020E2EAC + mvn r2, #0x0 +_020E2EB0: + ldrsb r1, [r0], #0x1 + add r2, r2, #0x1 + cmp r1, #0x0 + bne _020E2EB0 + mov r0, r2 + bx lr + + arm_func_start strcpy +strcpy: ; 0x020E2EC8 + stmdb sp!, {r3-r5,lr} + and r4, r1, #0x3 + and r3, r0, #0x3 + mov r2, r0 + cmp r3, r4 + bne _020E2F64 + cmp r4, #0x0 + beq _020E2F20 + ldrb r3, [r1, #0x0] + strb r3, [r0, #0x0] + cmp r3, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020E2EF8: + .byte 0x03, 0x40, 0x74, 0xE2, 0x05, 0x00, 0x00, 0x0A + .byte 0x01, 0x30, 0xF1, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x01, 0x30, 0xE2, 0xE5, 0x38, 0x80, 0xBD, 0x08 + .byte 0x01, 0x40, 0x54, 0xE2, 0xF9, 0xFF, 0xFF, 0x1A, 0x01, 0x20, 0x82, 0xE2, 0x01, 0x10, 0x81, 0xE2 +_020E2F20: + ldr r5, [r1, #0x0] + ldr r3, _020E2F88 ; =0xFEFEFEFF + mvn r4, r5 + add lr, r5, r3 + ldr ip, _020E2F8C ; =0x80808080 + and r4, lr, r4 + tst r4, r12 + bne _020E2F64 + sub r2, r2, #0x4 +_020E2F44: + str r5, [r2, #0x4]! + ldr r5, [r1, #0x4]! + add r4, r5, r3 + mvn lr, r5 + and lr, r4, lr + tst lr, r12 + beq _020E2F44 + add r2, r2, #0x4 +_020E2F64: + ldrb r3, [r1, #0x0] + strb r3, [r2, #0x0] + cmp r3, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020E2F74: + .byte 0x01, 0x30, 0xF1, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x01, 0x30, 0xE2, 0xE5 + .byte 0xFB, 0xFF, 0xFF, 0x1A, 0x38, 0x80, 0xBD, 0xE8 +_020E2F88: .word 0xFEFEFEFF +_020E2F8C: .word 0x80808080 + + arm_func_start strncpy +strncpy: ; 0x020E2F90 + stmdb sp!, {r3,lr} + mov lr, r0 + cmp r2, #0x0 + ldmeqia sp!, {r3,pc} +_020E2FA0: + .byte 0xD1, 0x30, 0xD1, 0xE0, 0x0E, 0xC0, 0xA0, 0xE1, 0x01, 0x30, 0xCE, 0xE4, 0xD0, 0x30, 0xDC, 0xE1 + .byte 0x00, 0x00, 0x53, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x01, 0x20, 0x52, 0xE2, 0x08, 0x80, 0xBD, 0x08 + .byte 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x10, 0xCE, 0xE4, 0x01, 0x20, 0x52, 0xE2, 0xFC, 0xFF, 0xFF, 0x1A + .byte 0x08, 0x80, 0xBD, 0xE8, 0x01, 0x20, 0x52, 0xE2, 0xF0, 0xFF, 0xFF, 0x1A, 0x08, 0x80, 0xBD, 0xE8 + + arm_func_start strcat +strcat: ; 0x020E2FE0 + mov r3, r0 +_020E2FE4: + ldrsb r2, [r3], #0x1 + cmp r2, #0x0 + bne _020E2FE4 + sub r3, r3, #0x1 +_020E2FF4: + ldrsb r2, [r1], #0x1 + mov r12, r3 + strb r2, [r3], #0x1 + ldrsb r2, [r12, #0x0] + cmp r2, #0x0 + bne _020E2FF4 + bx lr + + arm_func_start strncat +strncat: ; 0x020E3010 + stmdb sp!, {r3,lr} + mov r12, r0 +_020E3018: + ldrsb r3, [r12], #0x1 + cmp r3, #0x0 + bne _020E3018 + cmp r2, #0x0 + sub r12, r12, #0x1 + beq _020E3054 +_020E3030: + ldrsb r3, [r1], #0x1 + mov lr, r12 + strb r3, [r12], #0x1 + ldrsb r3, [lr, #0x0] + cmp r3, #0x0 + subeq r12, r12, #0x1 + beq _020E3054 + subs r2, r2, #0x1 + bne _020E3030 +_020E3054: + mov r1, #0x0 + strb r1, [r12, #0x0] + ldmia sp!, {r3,pc} + + arm_func_start strcmp +strcmp: ; 0x020E3060 + stmdb sp!, {r4,lr} + ldrb r2, [r0, #0x0] + ldrb r3, [r1, #0x0] + subs r3, r2, r3 + movne r0, r3 + ldmneia sp!, {r4,pc} +_020E3078: + .byte 0x03, 0x40, 0x00, 0xE2, 0x03, 0x30, 0x01, 0xE2 + .byte 0x04, 0x00, 0x53, 0xE1, 0x2C, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x54, 0xE3, 0x10, 0x00, 0x00, 0x0A + .byte 0x00, 0x00, 0x52, 0xE3, 0x00, 0x00, 0xA0, 0x03, 0x10, 0x80, 0xBD, 0x08, 0x03, 0x40, 0x74, 0xE2 + .byte 0x09, 0x00, 0x00, 0x0A, 0x01, 0x30, 0xF0, 0xE5, 0x01, 0x20, 0xF1, 0xE5, 0x02, 0x20, 0x53, 0xE0 + .byte 0x02, 0x00, 0xA0, 0x11, 0x10, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x53, 0xE3, 0x00, 0x00, 0xA0, 0x03 + .byte 0x10, 0x80, 0xBD, 0x08, 0x01, 0x40, 0x54, 0xE2, 0xF5, 0xFF, 0xFF, 0x1A, 0x01, 0x00, 0x80, 0xE2 + .byte 0x01, 0x10, 0x81, 0xE2, 0x00, 0x20, 0x90, 0xE5, 0x8C, 0x30, 0x9F, 0xE5, 0x02, 0x40, 0xE0, 0xE1 + .byte 0x03, 0xE0, 0x82, 0xE0, 0x84, 0xC0, 0x9F, 0xE5, 0x04, 0x40, 0x0E, 0xE0, 0x0C, 0x00, 0x14, 0xE1 + .byte 0x00, 0x40, 0x91, 0xE5, 0x0B, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x52, 0xE1, 0x06, 0x00, 0x00, 0x1A + .byte 0x04, 0x20, 0xB0, 0xE5, 0x04, 0x40, 0xB1, 0xE5, 0x03, 0xE0, 0x82, 0xE0, 0x0C, 0x00, 0x1E, 0xE1 + .byte 0x04, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x52, 0xE1, 0xF8, 0xFF, 0xFF, 0x0A, 0x01, 0x00, 0x40, 0xE2 + .byte 0x01, 0x10, 0x41, 0xE2, 0x04, 0x00, 0x00, 0xEA, 0x00, 0x20, 0xD0, 0xE5, 0x00, 0x30, 0xD1, 0xE5 + .byte 0x03, 0x30, 0x52, 0xE0, 0x03, 0x00, 0xA0, 0x11, 0x10, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x52, 0xE3 + .byte 0x00, 0x00, 0xA0, 0x03, 0x10, 0x80, 0xBD, 0x08, 0x01, 0x30, 0xF0, 0xE5, 0x01, 0x20, 0xF1, 0xE5 + .byte 0x02, 0x20, 0x53, 0xE0, 0x02, 0x00, 0xA0, 0x11, 0x10, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x53, 0xE3 + .byte 0xF8, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x80, 0xBD, 0xE8, 0xFF, 0xFE, 0xFE, 0xFE + .byte 0x80, 0x80, 0x80, 0x80 + + arm_func_start strncmp +strncmp: ; 0x020E3174 + cmp r2, #0x0 + beq _020E31A0 +_020E317C: + ldrb r12, [r1], #0x1 + ldrb r3, [r0], #0x1 + cmp r3, r12 + subne r0, r3, r12 + bxne lr + cmp r3, #0x0 + beq _020E31A0 + subs r2, r2, #0x1 + bne _020E317C +_020E31A0: + mov r0, #0x0 + bx lr + + arm_func_start strchr +strchr: ; 0x020E31A8 + ldrsb r2, [r0], #0x1 + mov r1, r1, lsl #0x18 + mov r1, r1, asr #0x18 + cmp r2, #0x0 + beq _020E31D4 +_020E31BC: + cmp r2, r1 + subeq r0, r0, #0x1 + bxeq lr + ldrsb r2, [r0], #0x1 + cmp r2, #0x0 + bne _020E31BC +_020E31D4: + cmp r1, #0x0 + movne r0, #0x0 + subeq r0, r0, #0x1 + bx lr + + arm_func_start strspn +strspn: ; 0x020E31E4 + stmdb sp!, {r4,lr} + sub sp, sp, #0x20 + add r12, sp, #0x0 + mov r3, #0x8 + mov r2, #0x0 +_020E31F8: + strb r2, [r12, #0x0] + strb r2, [r12, #0x1] + strb r2, [r12, #0x2] + strb r2, [r12, #0x3] + add r12, r12, #0x4 + subs r3, r3, #0x1 + bne _020E31F8 + ldrb r3, [r1, #0x0] + add r4, r1, #0x1 + cmp r3, #0x0 + beq _020E3254 + add lr, sp, #0x0 + mov r2, #0x1 +_020E322C: + and r12, r3, #0xff + and r1, r3, #0x7 + mov r1, r2, lsl r1 + ldrb r3, [lr, r12, asr #0x3] + and r1, r1, #0xff + orr r1, r3, r1 + strb r1, [lr, r12, asr #0x3] + ldrb r3, [r4], #0x1 + cmp r3, #0x0 + bne _020E322C +_020E3254: + ldrb r1, [r0, #0x0] + add r4, r0, #0x1 + cmp r1, #0x0 + beq _020E3294 + add r12, sp, #0x0 + mov r2, #0x1 +_020E326C: + and r3, r1, #0xff + and r1, r1, #0x7 + mov r1, r2, lsl r1 + ldrb r3, [r12, r3, asr #0x3] + and r1, r1, #0xff + tst r3, r1 + bne _020E3294 + ldrb r1, [r4], #0x1 + cmp r1, #0x0 + bne _020E326C +_020E3294: + sub r0, r4, r0 + sub r0, r0, #0x1 + add sp, sp, #0x20 + ldmia sp!, {r4,pc} + + arm_func_start strstr +strstr: ; 0x020E32A4 + stmdb sp!, {r4,lr} + cmp r1, #0x0 + ldrneb r2, [r1, #0x0] + cmpne r2, #0x0 + ldmeqia sp!, {r4,pc} +_020E32B8: + .byte 0x00, 0x30, 0xD0, 0xE5, 0x01, 0x40, 0x80, 0xE2 + .byte 0x00, 0x00, 0x53, 0xE3, 0x0F, 0x00, 0x00, 0x0A, 0x02, 0x00, 0x53, 0xE1, 0x0A, 0x00, 0x00, 0x1A + .byte 0x04, 0xE0, 0xA0, 0xE1, 0x01, 0xC0, 0x81, 0xE2, 0x01, 0x30, 0xDC, 0xE4, 0x01, 0x00, 0xDE, 0xE4 + .byte 0x03, 0x00, 0x50, 0xE1, 0x01, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x50, 0xE3, 0xF9, 0xFF, 0xFF, 0x1A + .byte 0x00, 0x00, 0x53, 0xE3, 0x01, 0x00, 0x44, 0x02, 0x10, 0x80, 0xBD, 0x08, 0x01, 0x30, 0xD4, 0xE4 + .byte 0x00, 0x00, 0x53, 0xE3, 0xEF, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x80, 0xBD, 0xE8 + + arm_func_start __strtold +__strtold: ; 0x020E3310 + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0xa8 + ldr r4, [sp, #0xd0] + mov r10, #0x0 + str r4, [sp, #0xd0] + str r0, [sp, #0x0] + add r6, sp, #0x80 + mov r9, r1 + mov r8, r2 + str r3, [sp, #0x4] + mov r4, r10 + str r10, [sp, #0x2c] + mov r5, #0x1 + mov r0, #0x4 +_020E3348: + strh r10, [r6, #0x0] + strh r10, [r6, #0x2] + strh r10, [r6, #0x4] + strh r10, [r6, #0x6] + add r6, r6, #0x8 + subs r0, r0, #0x1 + bne _020E3348 + mov r0, #0x0 + str r0, [sp, #0x28] + strh r10, [r6, #0x0] + strh r10, [r6, #0x2] + ldr r2, [sp, #0x28] + ldr r1, [sp, #0xd0] + strh r10, [r6, #0x4] + str r2, [r1, #0x0] + mov r1, r2 + mov r0, r8 + str r1, [sp, #0x24] + str r1, [sp, #0x20] + str r1, [sp, #0x1c] + str r1, [sp, #0x18] + str r1, [sp, #0x10] + str r1, [sp, #0xc] + str r1, [sp, #0x8] + add r4, r4, #0x1 + blx r9 + mov r1, r0 + ldr r7, _020E42F0 ; =0x02104439 + add r0, sp, #0x4d + mov r6, #0x4 +_020E33C0: + ldrb r3, [r7, #0x0] + ldrb r2, [r7, #0x1] + add r7, r7, #0x2 + strb r3, [r0, #0x0] + strb r2, [r0, #0x1] + add r0, r0, #0x2 + subs r6, r6, #0x1 + bne _020E33C0 + ldrb r3, [r7, #0x0] + ldr r2, _020E42F4 ; =0x02104434 + strb r3, [r0, #0x0] + ldrb r3, [r2, #0x1] + ldrb r0, [r2, #0x2] + ldrb r6, [r2, #0x0] + strb r3, [sp, #0x31] + strb r0, [sp, #0x32] + ldrb r3, [r2, #0x3] + ldrb r0, [r2, #0x4] + strb r6, [sp, #0x30] + strb r3, [sp, #0x33] + strb r0, [sp, #0x34] + b _020E4104 +_020E3418: + cmp r5, #0x100 + bgt _020E3490 + bge _020E3B98 + cmp r5, #0x20 + bgt _020E3474 + bge _020E3A6C + cmp r5, #0x8 + bgt _020E3468 + cmp r5, #0x0 + addge pc, pc, r5, lsl #0x2 + b _020E4104 +_020E3444: + .byte 0x2E, 0x03, 0x00, 0xEA, 0x21, 0x00, 0x00, 0xEA, 0x19, 0x01, 0x00, 0xEA + .byte 0x2B, 0x03, 0x00, 0xEA, 0x43, 0x01, 0x00, 0xEA, 0x29, 0x03, 0x00, 0xEA, 0x28, 0x03, 0x00, 0xEA + .byte 0x27, 0x03, 0x00, 0xEA, 0x49, 0x01, 0x00, 0xEA +_020E3468: + cmp r5, #0x10 + beq _020E3A34 + b _020E4104 +_020E3474: + cmp r5, #0x40 + bgt _020E3484 + beq _020E3AF8 + b _020E4104 +_020E3484: + cmp r5, #0x80 + beq _020E3B44 + b _020E4104 +_020E3490: + cmp r5, #0x2000 + bgt _020E34B8 + bge _020E36EC + cmp r5, #0x200 + bgt _020E34AC + beq _020E3BF8 + b _020E4104 +_020E34AC: + cmp r5, #0x400 + beq _020E3C20 + b _020E4104 +_020E34B8: + cmp r5, #0x4000 + bgt _020E34C8 + beq _020E35F4 + b _020E4104 +_020E34C8: + cmp r5, #0x8000 + beq _020E3C98 + b _020E4104 +_020E34D4: + .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 + .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1 + .byte 0x00, 0x0E, 0x9F, 0xE5, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 + .byte 0x08, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 + .byte 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x2C, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2 + .byte 0x2C, 0x00, 0x8D, 0xE5, 0xF6, 0x02, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA + .byte 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x01, 0x00, 0xA0, 0xE1, 0x01, 0x00, 0x00, 0xEA + .byte 0xB4, 0x0D, 0x9F, 0xE5, 0x01, 0x00, 0xD0, 0xE7, 0x49, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0xCA + .byte 0x15, 0x00, 0x00, 0xAA, 0x2D, 0x00, 0x50, 0xE3, 0x23, 0x00, 0x00, 0xCA, 0x2B, 0x00, 0x50, 0xE3 + .byte 0x21, 0x00, 0x00, 0xBA, 0x07, 0x00, 0x00, 0x0A, 0x2D, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A + .byte 0x1D, 0x00, 0x00, 0xEA, 0x4E, 0x00, 0x50, 0xE3, 0x13, 0x00, 0x00, 0x0A, 0x1A, 0x00, 0x00, 0xEA + .byte 0x01, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x8D, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1 + .byte 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 + .byte 0x01, 0x00, 0xA0, 0xE3, 0x18, 0x00, 0x8D, 0xE5, 0xD5, 0x02, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2 + .byte 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x10, 0xA0, 0xE1, 0x01, 0x59, 0xA0, 0xE3, 0xCD, 0x02, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2 + .byte 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x10, 0xA0, 0xE1, 0x02, 0x5A, 0xA0, 0xE3, 0xC5, 0x02, 0x00, 0xEA, 0x02, 0x50, 0xA0, 0xE3 + .byte 0xC3, 0x02, 0x00, 0xEA +_020E35F4: + mov r5, #0x1 + add r7, sp, #0x4d + add r0, sp, #0x76 + mov r6, #0x4 +_020E3604: + ldrb r3, [r7, #0x0] + ldrb r2, [r7, #0x1] + add r7, r7, #0x2 + strb r3, [r0, #0x0] + strb r2, [r0, #0x1] + add r0, r0, #0x2 + subs r6, r6, #0x1 + bne _020E3604 + ldrb r2, [r7, #0x0] + add r6, sp, #0x77 + ldr r7, _020E42FC ; =0x0210428C + strb r2, [r0, #0x0] + b _020E3658 +_020E3638: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r6, r6, #0x1 + add r5, r5, #0x1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 +_020E3658: + cmp r5, #0x8 + bge _020E3688 + cmp r1, #0x0 + blt _020E3670 + cmp r1, #0x80 + blt _020E3678 +_020E3670: + mov r2, r1 + b _020E367C +_020E3678: + ldrb r2, [r7, r1] +_020E367C: + ldrsb r0, [r6, #0x0] + cmp r0, r2 + beq _020E3638 +_020E3688: + cmp r5, #0x3 + cmpne r5, #0x8 + bne _020E36E4 + ldr r0, [sp, #0x28] + cmp r0, #0x0 + beq _020E36B8 + ldr r1, _020E4300 ; =0x02106B74 + mov r0, #0x0 + ldr r1, [r1, #0x0] + bl _fsub + bl _f2d + b _020E36C4 +_020E36B8: + ldr r0, _020E4300 ; =0x02106B74 + ldr r0, [r0, #0x0] + bl _f2d +_020E36C4: + ldr r2, [sp, #0x2c] + add r3, r2, r5 + ldr r2, [sp, #0x18] + add r3, r2, r3 + ldr r2, [sp, #0x4] + add sp, sp, #0xa8 + str r3, [r2, #0x0] + ldmia sp!, {r3-r11,pc} +_020E36E4: + mov r5, #0x1000 + b _020E4104 +_020E36EC: + ldrb r3, [sp, #0x30] + ldrb r0, [sp, #0x32] + ldrb r2, [sp, #0x31] + strb r3, [sp, #0x40] + strb r0, [sp, #0x42] + ldrb r3, [sp, #0x33] + ldrb r0, [sp, #0x34] + strb r2, [sp, #0x41] + mov r5, #0x1 + strb r0, [sp, #0x44] + mov r6, #0x0 + add r2, sp, #0x56 + strb r3, [sp, #0x43] + mov r0, #0x8 +_020E3724: + strb r6, [r2, #0x0] + strb r6, [r2, #0x1] + strb r6, [r2, #0x2] + strb r6, [r2, #0x3] + add r2, r2, #0x4 + subs r0, r0, #0x1 + bne _020E3724 + add r7, sp, #0x41 + b _020E3768 +_020E3748: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r7, r7, #0x1 + add r5, r5, #0x1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 +_020E3768: + cmp r5, #0x4 + bge _020E379C + cmp r1, #0x0 + blt _020E3780 + cmp r1, #0x80 + blt _020E3788 +_020E3780: + mov r2, r1 + b _020E3790 +_020E3788: + ldr r0, _020E42FC ; =0x0210428C + ldrb r2, [r0, r1] +_020E3790: + ldrsb r0, [r7, #0x0] + cmp r0, r2 + beq _020E3748 +_020E379C: + sub r0, r5, #0x3 + cmp r0, #0x1 + bhi _020E38B0 + cmp r5, #0x4 + bne _020E3854 + ldr r7, _020E42F8 ; =0x0210430C + b _020E37DC +_020E37B8: + add r0, sp, #0x56 + strb r1, [r0, r6] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r6, r6, #0x1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 +_020E37DC: + cmp r6, #0x20 + bge _020E3844 + cmp r1, #0x0 + blt _020E37F4 + cmp r1, #0x80 + blt _020E37FC +_020E37F4: + mov r0, #0x0 + b _020E3808 +_020E37FC: + mov r0, r1, lsl #0x1 + ldrh r0, [r7, r0] + and r0, r0, #0x8 +_020E3808: + cmp r0, #0x0 + bne _020E37B8 + cmp r1, #0x0 + blt _020E3820 + cmp r1, #0x80 + blt _020E3828 +_020E3820: + mov r0, #0x0 + b _020E3834 +_020E3828: + mov r0, r1, lsl #0x1 + ldrh r0, [r7, r0] + and r0, r0, #0x1 +_020E3834: + cmp r0, #0x0 + bne _020E37B8 + cmp r1, #0x2e + beq _020E37B8 +_020E3844: + cmp r1, #0x29 + movne r5, #0x1000 + bne _020E4104 + add r6, r6, #0x1 +_020E3854: + add r0, sp, #0x56 + mov r1, #0x0 + strb r1, [r0, r6] + ldr r1, [sp, #0x28] + cmp r1, #0x0 + beq _020E3888 + bl nan + mov r2, r0 + mov r0, #0x0 + mov r3, r1 + mov r1, r0 + bl _dsub +_020E3884: + .byte 0x00, 0x00, 0x00, 0xEA +_020E3888: + bl nan + ldr r2, [sp, #0x2c] + add r2, r2, r5 + add r3, r6, r2 + ldr r2, [sp, #0x18] + add r3, r2, r3 + ldr r2, [sp, #0x4] + add sp, sp, #0xa8 + str r3, [r2, #0x0] + ldmia sp!, {r3-r11,pc} +_020E38B0: + mov r5, #0x1000 + b _020E4104 +_020E38B8: + .byte 0x2E, 0x00, 0x51, 0xE3, 0x07, 0x00, 0x00, 0x1A + .byte 0x10, 0x50, 0xA0, 0xE3, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x08, 0x02, 0x00, 0xEA + .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA + .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1, 0xF4, 0x09, 0x9F, 0xE5 + .byte 0xB2, 0x00, 0x90, 0xE1, 0x08, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x5A, 0xA0, 0x03 + .byte 0xFB, 0x01, 0x00, 0x0A, 0x30, 0x00, 0x51, 0xE3, 0x10, 0x00, 0x00, 0x1A, 0x01, 0x40, 0x84, 0xE2 + .byte 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x03, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x50, 0xE3 + .byte 0x01, 0x00, 0x00, 0xAA, 0xB0, 0x29, 0x9F, 0xE5, 0x00, 0x00, 0xD2, 0xE7, 0x58, 0x00, 0x50, 0xE3 + .byte 0x02, 0x59, 0xA0, 0x03, 0x01, 0xA0, 0xA0, 0x03, 0x04, 0x50, 0xA0, 0x13, 0xE8, 0x01, 0x00, 0xEA + .byte 0x08, 0x50, 0xA0, 0xE3, 0xE6, 0x01, 0x00, 0xEA, 0x30, 0x00, 0x51, 0xE3, 0x08, 0x50, 0xA0, 0x13 + .byte 0xE3, 0x01, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 + .byte 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xDC, 0x01, 0x00, 0xEA + .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA + .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1, 0x44, 0x09, 0x9F, 0xE5 + .byte 0xB2, 0x00, 0x90, 0xE1, 0x08, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x1A + .byte 0x2E, 0x00, 0x51, 0xE3, 0x40, 0x50, 0xA0, 0x13, 0xCD, 0x01, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x20, 0x50, 0xA0, 0xE3, 0x01, 0x40, 0x84, 0xE2 + .byte 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xC5, 0x01, 0x00, 0xEA, 0x84, 0x20, 0xDD, 0xE5 + .byte 0x14, 0x00, 0x52, 0xE3, 0x1C, 0x00, 0x9D, 0x25, 0x01, 0x00, 0x80, 0x22, 0x1C, 0x00, 0x8D, 0x25 + .byte 0x04, 0x00, 0x00, 0x2A, 0x01, 0x00, 0x82, 0xE2, 0x84, 0x00, 0xCD, 0xE5, 0x80, 0x00, 0x8D, 0xE2 + .byte 0x02, 0x00, 0x80, 0xE0, 0x05, 0x10, 0xC0, 0xE5, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1 + .byte 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 + .byte 0xB3, 0x01, 0x00, 0xEA +_020E3A34: + cmp r1, #0x0 + blt _020E3A44 + cmp r1, #0x80 + blt _020E3A4C +_020E3A44: + mov r0, #0x0 + b _020E3A5C +_020E3A4C: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3A5C: + cmp r0, #0x0 + moveq r5, #0x1000 + movne r5, #0x20 + b _020E4104 +_020E3A6C: + cmp r1, #0x0 + blt _020E3A7C + cmp r1, #0x80 + blt _020E3A84 +_020E3A7C: + mov r0, #0x0 + b _020E3A94 +_020E3A84: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3A94: + cmp r0, #0x0 + moveq r5, #0x40 + beq _020E4104 + ldrb r3, [sp, #0x84] + cmp r3, #0x14 + bhs _020E3ADC + cmp r1, #0x30 + cmpeq r3, #0x0 + beq _020E3AD0 + ldrb r2, [sp, #0x84] + add r0, sp, #0x80 + add r0, r0, r3 + add r2, r2, #0x1 + strb r2, [sp, #0x84] + strb r1, [r0, #0x5] +_020E3AD0: + ldr r0, [sp, #0x1c] + sub r0, r0, #0x1 + str r0, [sp, #0x1c] +_020E3ADC: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3AF8: + cmp r1, #0x0 + blt _020E3B08 + cmp r1, #0x80 + blt _020E3B10 +_020E3B08: + mov r0, r1 + b _020E3B18 +_020E3B10: + ldr r0, _020E42FC ; =0x0210428C + ldrb r0, [r0, r1] +_020E3B18: + cmp r0, #0x45 + movne r5, #0x800 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r5, #0x80 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3B44: + cmp r1, #0x2b + bne _020E3B68 + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E3B90 +_020E3B68: + cmp r1, #0x2d + bne _020E3B90 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + mov r0, #0x1 + str r0, [sp, #0x24] +_020E3B90: + mov r5, #0x100 + b _020E4104 +_020E3B98: + cmp r1, #0x0 + blt _020E3BA8 + cmp r1, #0x80 + blt _020E3BB0 +_020E3BA8: + mov r0, #0x0 + b _020E3BC0 +_020E3BB0: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3BC0: + cmp r0, #0x0 + moveq r5, #0x1000 + beq _020E4104 + cmp r1, #0x30 + movne r5, #0x400 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r5, #0x200 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3BF8: + cmp r1, #0x30 + movne r5, #0x400 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3C20: + cmp r1, #0x0 + blt _020E3C30 + cmp r1, #0x80 + blt _020E3C38 +_020E3C30: + mov r0, #0x0 + b _020E3C48 +_020E3C38: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3C48: + cmp r0, #0x0 + moveq r5, #0x800 + beq _020E4104 + ldr r0, [sp, #0x20] + sub r2, r1, #0x30 + mov r1, #0xa + mla r0, r1, r0, r2 + ldr r1, _020E4304 ; =0x00007FFF + str r0, [sp, #0x20] + cmp r0, r1 + ldrgt r0, [sp, #0xd0] + movgt r1, #0x1 + strgt r1, [r0, #0x0] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3C98: + cmp r10, #0x20 + bgt _020E3CE8 + bge _020E3FBC + cmp r10, #0x8 + bgt _020E3CDC + cmp r10, #0x0 + addge pc, pc, r10, lsl #0x2 + b _020E4104 +_020E3CB8: + .byte 0x11, 0x01, 0x00, 0xEA, 0x12, 0x00, 0x00, 0xEA + .byte 0x25, 0x00, 0x00, 0xEA, 0x0E, 0x01, 0x00, 0xEA, 0x2D, 0x00, 0x00, 0xEA, 0x0C, 0x01, 0x00, 0xEA + .byte 0x0B, 0x01, 0x00, 0xEA, 0x0A, 0x01, 0x00, 0xEA, 0x6D, 0x00, 0x00, 0xEA +_020E3CDC: + cmp r10, #0x10 + beq _020E3F70 + b _020E4104 +_020E3CE8: + cmp r10, #0x80 + bgt _020E3D00 + bge _020E4064 + cmp r10, #0x40 + beq _020E4004 + b _020E4104 +_020E3D00: + cmp r10, #0x100 + beq _020E408C + b _020E4104 +_020E3D0C: + .byte 0x00, 0x10, 0xA0, 0xE3 + .byte 0x45, 0x00, 0x8D, 0xE2, 0x14, 0x00, 0x8D, 0xE5, 0x00, 0x10, 0xC0, 0xE5, 0x01, 0x10, 0xC0, 0xE5 + .byte 0x02, 0x10, 0xC0, 0xE5, 0x03, 0x10, 0xC0, 0xE5, 0x04, 0x10, 0xC0, 0xE5, 0x05, 0x10, 0xC0, 0xE5 + .byte 0x06, 0x10, 0xC0, 0xE5, 0x07, 0x10, 0xC0, 0xE5, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 + .byte 0x08, 0x10, 0x8D, 0xE5, 0x01, 0xB0, 0xA0, 0xE1, 0x02, 0xA0, 0xA0, 0xE3, 0x01, 0x40, 0x84, 0xE2 + .byte 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xE9, 0x00, 0x00, 0xEA, 0x30, 0x00, 0x51, 0xE3 + .byte 0x04, 0xA0, 0xA0, 0x13, 0xE6, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1 + .byte 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 + .byte 0xDF, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 + .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1 + .byte 0x50, 0x05, 0x9F, 0xE5, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0B, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 + .byte 0x0A, 0x00, 0x00, 0x1A, 0x2E, 0x00, 0x51, 0xE3, 0x10, 0xA0, 0xA0, 0x13, 0xD0, 0x00, 0x00, 0x1A + .byte 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x08, 0xA0, 0xA0, 0xE3 + .byte 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xC8, 0x00, 0x00, 0xEA + .byte 0x08, 0x20, 0x9D, 0xE5, 0x0E, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x52, 0xE1, 0x21, 0x00, 0x00, 0x2A + .byte 0x02, 0x00, 0xA0, 0xE1, 0x01, 0x00, 0x80, 0xE2, 0x08, 0x00, 0x8D, 0xE5, 0x14, 0x00, 0x9D, 0xE5 + .byte 0xAB, 0x2F, 0x8B, 0xE0, 0x00, 0x00, 0x51, 0xE3, 0xC2, 0x00, 0xD0, 0xE7, 0x03, 0x00, 0x00, 0xBA + .byte 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xAA, 0xDC, 0x24, 0x9F, 0xE5, 0x01, 0x10, 0xD2, 0xE7 + .byte 0x41, 0x00, 0x51, 0xE3, 0x37, 0x10, 0x41, 0xA2, 0x30, 0x10, 0x41, 0xB2, 0xAB, 0x2F, 0xA0, 0xE1 + .byte 0xFF, 0x30, 0x01, 0xE2, 0x8B, 0x1F, 0x62, 0xE0, 0xE1, 0x1F, 0x92, 0xE0, 0x03, 0x12, 0xA0, 0x01 + .byte 0xAB, 0x2F, 0x8B, 0xE0, 0x03, 0x00, 0x80, 0x11, 0xFF, 0x10, 0x01, 0x02, 0x01, 0x00, 0x80, 0x01 + .byte 0x14, 0x10, 0x9D, 0xE5, 0x01, 0xB0, 0x8B, 0xE2, 0xC2, 0x00, 0xC1, 0xE7, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x10, 0xA0, 0xE1, 0xA2, 0x00, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1 + .byte 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 + .byte 0x9B, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 + .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1 + .byte 0x40, 0x04, 0x9F, 0xE5, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0B, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 + .byte 0x10, 0xA0, 0xA0, 0x03, 0x8E, 0x00, 0x00, 0x0A, 0x08, 0x20, 0x9D, 0xE5, 0x0E, 0x00, 0xA0, 0xE3 + .byte 0x00, 0x00, 0x52, 0xE1, 0x1E, 0x00, 0x00, 0x2A, 0x14, 0x00, 0x9D, 0xE5, 0xAB, 0x2F, 0x8B, 0xE0 + .byte 0x00, 0x00, 0x51, 0xE3, 0xC2, 0x00, 0xD0, 0xE7, 0x03, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 + .byte 0x01, 0x00, 0x00, 0xAA, 0x00, 0x24, 0x9F, 0xE5, 0x01, 0x10, 0xD2, 0xE7, 0x41, 0x00, 0x51, 0xE3 + .byte 0x37, 0x10, 0x41, 0xA2, 0x30, 0x10, 0x41, 0xB2, 0xAB, 0x2F, 0xA0, 0xE1, 0xFF, 0x30, 0x01, 0xE2 + .byte 0x8B, 0x1F, 0x62, 0xE0, 0xE1, 0x1F, 0x92, 0xE0, 0x03, 0x12, 0xA0, 0x01, 0xAB, 0x2F, 0x8B, 0xE0 + .byte 0x03, 0x00, 0x80, 0x11, 0xFF, 0x10, 0x01, 0x02, 0x01, 0x00, 0x80, 0x01, 0x14, 0x10, 0x9D, 0xE5 + .byte 0x01, 0xB0, 0x8B, 0xE2, 0xC2, 0x00, 0xC1, 0xE7, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1 + .byte 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 + .byte 0x6B, 0x00, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x64, 0x00, 0x00, 0xEA +_020E3F70: + cmp r1, #0x0 + blt _020E3F80 + cmp r1, #0x80 + blt _020E3F88 +_020E3F80: + mov r0, r1 + b _020E3F90 +_020E3F88: + ldr r0, _020E42FC ; =0x0210428C + ldrb r0, [r0, r1] +_020E3F90: + cmp r0, #0x50 + movne r5, #0x800 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r10, #0x20 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3FBC: + cmp r1, #0x2d + moveq r0, #0x1 + streq r0, [sp, #0xc] + beq _020E3FE4 + cmp r1, #0x2b + beq _020E3FE4 + mov r0, r8 + mov r2, #0x1 + blx r9 + sub r4, r4, #0x1 +_020E3FE4: + mov r10, #0x40 + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E4004: + cmp r1, #0x0 + blt _020E4014 + cmp r1, #0x80 + blt _020E401C +_020E4014: + mov r0, #0x0 + b _020E402C +_020E401C: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E402C: + cmp r0, #0x0 + moveq r5, #0x1000 + beq _020E4104 + cmp r1, #0x30 + movne r10, #0x100 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r10, #0x80 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E4064: + cmp r1, #0x30 + movne r10, #0x100 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E408C: + cmp r1, #0x0 + blt _020E409C + cmp r1, #0x80 + blt _020E40A4 +_020E409C: + mov r0, #0x0 + b _020E40B4 +_020E40A4: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E40B4: + cmp r0, #0x0 + moveq r5, #0x800 + beq _020E4104 + ldr r0, [sp, #0x10] + sub r2, r1, #0x30 + mov r1, #0xa + mla r0, r1, r0, r2 + str r0, [sp, #0x10] + ldr r1, _020E4304 ; =0x00007FFF + ldr r0, [sp, #0x20] + add r4, r4, #0x1 + cmp r0, r1 + ldrgt r0, [sp, #0xd0] + movgt r1, #0x1 + strgt r1, [r0, #0x0] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r1, r0 +_020E4104: + ldr r0, [sp, #0x0] + cmp r4, r0 + bgt _020E4124 + mvn r0, #0x0 + cmp r1, r0 + beq _020E4124 + tst r5, #0x1800 + beq _020E3418 +_020E4124: + cmp r5, #0x8000 + beq _020E4140 + ldr r0, _020E4308 ; =0x00000E2C + tst r5, r0 + moveq r0, #0x1 + movne r0, #0x0 + b _020E4164 +_020E4140: + sub r0, r4, #0x1 + cmp r0, #0x2 + ble _020E4158 + ldr r0, _020E430C ; =0x0000018E + tst r10, r0 + bne _020E4160 +_020E4158: + mov r0, #0x1 + b _020E4164 +_020E4160: + mov r0, #0x0 +_020E4164: + cmp r0, #0x0 + movne r2, #0x0 + ldrne r0, [sp, #0x4] + bne _020E4184 + ldr r0, [sp, #0x2c] + sub r2, r4, #0x1 + add r2, r2, r0 + ldr r0, [sp, #0x4] +_020E4184: + str r2, [r0, #0x0] + mov r0, r8 + mov r2, #0x1 + blx r9 + cmp r10, #0x0 + bne _020E4388 + ldr r0, [sp, #0x24] + ldrb r2, [sp, #0x84] + cmp r0, #0x0 + ldrne r0, [sp, #0x20] + rsbne r0, r0, #0x0 + strne r0, [sp, #0x20] + add r0, sp, #0x85 + add r1, r0, r2 + b _020E41CC +_020E41C0: + ldr r0, [sp, #0x1c] + add r0, r0, #0x1 + str r0, [sp, #0x1c] +_020E41CC: + cmp r2, #0x0 + sub r2, r2, #0x1 + beq _020E41E4 + ldrb r0, [r1, #-0x1]! + cmp r0, #0x30 + beq _020E41C0 +_020E41E4: + add r0, r2, #0x1 + strb r0, [sp, #0x84] + ands r2, r0, #0xff + bne _020E4208 + add r1, r2, #0x1 + strb r1, [sp, #0x84] + add r0, sp, #0x85 + mov r1, #0x30 + strb r1, [r0, r2] +_020E4208: + ldr r1, [sp, #0x20] + ldr r0, [sp, #0x1c] + mov r2, #0x8000 + add r0, r1, r0 + rsb r2, r2, #0x0 + str r0, [sp, #0x20] + cmp r0, r2 + blt _020E4230 + cmp r0, r2, lsr #0x11 + ble _020E423C +_020E4230: + ldr r0, [sp, #0xd0] + mov r1, #0x1 + str r1, [r0, #0x0] +_020E423C: + ldr r0, [sp, #0xd0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020E4298 + ldr r0, [sp, #0x24] + cmp r0, #0x0 + movne r0, #0x0 + addne sp, sp, #0xa8 + movne r1, r0 + ldmneia sp!, {r3-r11,pc} +_020E4264: + .byte 0x28, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x9C, 0x10, 0x9F, 0x05 + .byte 0xA8, 0xD0, 0x8D, 0x02, 0x03, 0x00, 0x91, 0x08, 0xF8, 0x8F, 0xBD, 0x08, 0x8C, 0x10, 0x9F, 0xE5 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x0C, 0x00, 0x91, 0xE8, 0x00, 0x10, 0xA0, 0xE1, 0xCE, 0x18, 0x00, 0xEB + .byte 0xA8, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 +_020E4298: + ldr r1, [sp, #0x20] + add r0, sp, #0x80 + strh r1, [sp, #0x82] + bl __dec2num + mov r4, r0 + mov r6, r1 + mov r0, #0x0 + mov r1, r0 + mov r2, r4 + mov r3, r6 + bl _dneq + beq _020E4318 + mov r0, r4 + mov r1, r6 + mov r2, #0x0 + mov r3, #0x100000 + bl _dls + bhs _020E4318 + ldr r0, [sp, #0xd0] + mov r1, #0x1 + str r1, [r0, #0x0] + b _020E4344 + .balign 4 +_020E42F0: .word 0x02104439 +_020E42F4: .word 0x02104434 +_020E42F8: .word 0x0210430C +_020E42FC: .word 0x0210428C +_020E4300: .word 0x02106B74 +_020E4304: .word 0x00007FFF +_020E4308: .word 0x00000E2C +_020E430C: .word 0x0000018E +_020E4310: .word 0x02106B7C +_020E4314: .word 0x7FEFFFFF +_020E4318: + ldr r3, _020E4314 ; =0x7FEFFFFF + mov r0, r4 + mov r1, r6 + mvn r2, #0x0 + bl _dgr + bls _020E4344 + ldr r0, [sp, #0xd0] + mov r2, #0x1 + ldr r1, _020E4310 ; =0x02106B7C + str r2, [r0, #0x0] + ldmia r1, {r4,r6} +_020E4344: + ldr r0, [sp, #0x28] + cmp r0, #0x0 + beq _020E4378 + ldr r0, _020E4308 ; =0x00000E2C + tst r5, r0 + beq _020E4378 + mov r0, #0x0 + mov r1, r0 + mov r2, r4 + mov r3, r6 + bl _dsub + mov r4, r0 + mov r6, r1 +_020E4378: + add sp, sp, #0xa8 + mov r0, r4 + mov r1, r6 + ldmia sp!, {r3-r11,pc} +_020E4388: + ldr r0, [sp, #0xc] + add r4, sp, #0x38 + cmp r0, #0x0 + ldrne r0, [sp, #0x10] + ldrb r3, [sp, #0x45] + rsbne r0, r0, #0x0 + strne r0, [sp, #0x10] + ldr r1, [sp, #0x10] + ldr r0, [sp, #0x8] + mov r2, #0x0 + add r0, r1, r0, lsl #0x2 + str r0, [sp, #0x10] + mov r1, #0x80 + b _020E43D0 +_020E43C0: + ldr r0, [sp, #0x10] + add r2, r2, #0x1 + sub r0, r0, #0x1 + str r0, [sp, #0x10] +_020E43D0: + cmp r2, #0x4 + bhs _020E43E0 + tst r3, r1, asr r2 + beq _020E43C0 +_020E43E0: + adds r5, r2, #0x1 + beq _020E442C + add r0, sp, #0x4c + add r3, sp, #0x45 + str r0, [sp, #0x14] + mov r1, #0x0 + cmp r0, r3 + blo _020E442C + rsb r6, r5, #0x8 +_020E4404: + ldr r0, [sp, #0x14] + ldrb r0, [r0, #0x0] + orr r2, r1, r0, lsl r5 + mov r1, r0, asr r6 + ldr r0, [sp, #0x14] + and r1, r1, #0xff + strb r2, [r0], #-0x1 + str r0, [sp, #0x14] + cmp r0, r3 + bhs _020E4404 +_020E442C: + mov r2, #0x0 + mov r6, r2 + strb r2, [r4, #0x0] + strb r2, [r4, #0x1] + strb r2, [r4, #0x2] + strb r2, [r4, #0x3] + strb r2, [r4, #0x4] + strb r2, [r4, #0x5] + strb r2, [r4, #0x6] + strb r2, [r4, #0x7] + mov r3, #0xc + mov r7, #0x1 + mov r0, #0xff + add r1, sp, #0x45 +_020E4464: + add r5, r2, #0x8 + cmp r5, #0x34 + ldrb r5, [r1, r6] + rsbhi r8, r2, #0x34 + and r11, r3, #0x7 + andhi r5, r5, r0, lsl r8 + andhi r5, r5, #0xff + mov r8, r5, asr r11 + and r9, r8, #0xff + ldrb r10, [r4, r7] + rsb r8, r11, #0x8 + mov r5, r5, lsl r8 + orr r9, r10, r9 + strb r9, [r4, r7] + add r7, r7, #0x1 + add r2, r2, #0x8 + ldrb r8, [r4, r7] + and r5, r5, #0xff + cmp r2, #0x34 + orr r5, r8, r5 + strb r5, [r4, r7] + add r3, r3, #0x8 + add r6, r6, #0x1 + blo _020E4464 + ldr r0, [sp, #0x10] + mov r1, #0x800 + add r0, r0, #0xfe + add r2, r0, #0x300 + rsb r1, r1, #0x0 + tst r2, r1 + beq _020E44FC + ldr r2, [sp, #0xd0] + mov r3, #0x1 + mov r0, #0x0 + add sp, sp, #0xa8 + mov r1, r0 + str r3, [r2, #0x0] + ldmia sp!, {r3-r11,pc} +_020E44FC: + ldrb r0, [r4, #0x1] + mov r2, r2, lsl #0x15 + ldrb r1, [r4, #0x0] + orr r0, r0, r2, lsr #0x11 + strb r0, [r4, #0x1] + ldr r0, [sp, #0x28] + orr r1, r1, r2, lsr #0x19 + cmp r0, #0x0 + andne r0, r1, #0xff + strb r1, [r4, #0x0] + orrne r0, r0, #0x80 + strneb r0, [r4, #0x0] + mov r3, #0x0 +_020E4530: + rsb r1, r3, #0x7 + ldrb r2, [r4, r3] + ldrb r0, [r4, r1] + strb r0, [r4, r3] + add r3, r3, #0x1 + strb r2, [r4, r1] + cmp r3, #0x4 + blt _020E4530 + ldmia r4, {r0-r1} + add sp, sp, #0xa8 + ldmia sp!, {r3-r11,pc} + + arm_func_start strtold +strtold: ; 0x020E455C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x14 + mov r7, r0 + mov r0, #0x0 + mov r6, r1 + str r0, [sp, #0x8] + add r4, sp, #0xc + str r7, [sp, #0x4] + ldr r1, _020E4630 ; =__StringRead + add r2, sp, #0x4 + add r3, sp, #0x10 + sub r0, r0, #0x80000001 + str r4, [sp, #0x0] + bl __strtold + mov r5, r1 + mov r4, r0 + cmp r6, #0x0 + ldrne r0, [sp, #0x10] + mov r1, r5 + addne r0, r7, r0 + strne r0, [r6, #0x0] + mov r0, r4 + bl fabs + ldr r2, [sp, #0xc] + mov r6, r0 + mov r7, r1 + cmp r2, #0x0 + bne _020E4614 + mov r0, #0x0 + mov r1, r0 + mov r2, r4 + mov r3, r5 + bl _dneq + beq _020E4620 + mov r0, r6 + mov r1, r7 + mov r2, #0x0 + mov r3, #0x100000 + bl _dls + blo _020E4614 + ldr r3, _020E4634 ; =0x7FEFFFFF + mov r0, r6 + mov r1, r7 + mvn r2, #0x0 + bl _dgr + bls _020E4620 +_020E4614: + ldr r0, _020E4638 ; =0x021D74A8 + mov r1, #0x22 + str r1, [r0, #0x0] +_020E4620: + mov r0, r4 + mov r1, r5 + add sp, sp, #0x14 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020E4630: .word __StringRead +_020E4634: .word 0x7FEFFFFF +_020E4638: .word 0x021D74A8 + + arm_func_start atod +atod: ; 0x020E463C + ldr ip, _020E4648 ; =strtold + mov r1, #0x0 + bx r12 + .balign 4 +_020E4648: .word strtold + + arm_func_start __strtoul +__strtoul: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + ldr r4, [sp, #0x38] + movs r9, r0 + ldr r0, [sp, #0x34] + str r4, [sp, #0x38] + mov r4, #0x0 + str r0, [sp, #0x34] + ldr r0, [sp, #0x38] + str r1, [sp, #0x0] + str r4, [r0, #0x0] + mov r0, r4 + str r0, [sp, #0x4] + ldr r0, [sp, #0x34] + mov r1, r4 + str r1, [r0, #0x0] + ldr r0, [sp, #0x30] + str r4, [sp, #0x8] + mov r8, r2 + mov r7, r3 + mov r5, r4 + mov r10, r4 + str r0, [sp, #0x30] + mov r4, #0x1 + bmi _020E46CC + cmp r9, #0x1 + beq _020E46CC + cmp r9, #0x24 + bgt _020E46CC + ldr r0, [sp, #0x0] + cmp r0, #0x1 + bge _020E46D4 +_020E46CC: + mov r4, #0x40 + b _020E46F0 +_020E46D4: + ldr r1, [sp, #0x8] + mov r0, r7 + mov r3, r1 + mov r2, r1 + add r5, r3, #0x1 + blx r8 + mov r6, r0 +_020E46F0: + cmp r9, #0x0 + beq _020E4708 + mov r1, r9 + mvn r0, #0x0 + bl _u32_div_f + str r0, [sp, #0x4] +_020E4708: + mvn r11, #0x0 + b _020E49C8 +_020E4710: + cmp r4, #0x8 + bgt _020E4748 + cmp r4, #0x0 + addge pc, pc, r4, lsl #0x2 + b _020E49C8 +_020E4724: + .byte 0xA7, 0x00, 0x00, 0xEA, 0x09, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0xEA + .byte 0xA4, 0x00, 0x00, 0xEA, 0x40, 0x00, 0x00, 0xEA, 0xA2, 0x00, 0x00, 0xEA, 0xA1, 0x00, 0x00, 0xEA + .byte 0xA0, 0x00, 0x00, 0xEA, 0x4C, 0x00, 0x00, 0xEA +_020E4748: + cmp r4, #0x10 + beq _020E487C + b _020E49C8 +_020E4754: + .byte 0x00, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x56, 0xE3 + .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0xB8, 0x02, 0x9F, 0xE5 + .byte 0x86, 0x10, 0xA0, 0xE1, 0xB1, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 + .byte 0x08, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 + .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x08, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2 + .byte 0x08, 0x00, 0x8D, 0xE5, 0x87, 0x00, 0x00, 0xEA, 0x2B, 0x00, 0x56, 0xE3, 0x06, 0x00, 0x00, 0x1A + .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2 + .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x0A, 0x00, 0x00, 0xEA, 0x2D, 0x00, 0x56, 0xE3 + .byte 0x08, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 + .byte 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x34, 0x00, 0x9D, 0xE5 + .byte 0x01, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5, 0x02, 0x40, 0xA0, 0xE3, 0x71, 0x00, 0x00, 0xEA + .byte 0x00, 0x00, 0x59, 0xE3, 0x10, 0x00, 0x59, 0x13, 0x09, 0x00, 0x00, 0x1A, 0x30, 0x00, 0x56, 0xE3 + .byte 0x07, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 + .byte 0x04, 0x40, 0xA0, 0xE3, 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1 + .byte 0x64, 0x00, 0x00, 0xEA, 0x08, 0x40, 0xA0, 0xE3, 0x62, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x56, 0xE3 + .byte 0x78, 0x00, 0x56, 0x13, 0x08, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1 + .byte 0x01, 0x20, 0xA0, 0xE1, 0x10, 0x90, 0xA0, 0xE3, 0x08, 0x40, 0xA0, 0xE3, 0x01, 0x50, 0x85, 0xE2 + .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x56, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x59, 0xE3 + .byte 0x08, 0x90, 0xA0, 0x03, 0x10, 0x40, 0xA0, 0xE3, 0x52, 0x00, 0x00, 0xEA +_020E487C: + ldr r0, [sp, #0x4] + cmp r9, #0x0 + moveq r9, #0xa + cmp r0, #0x0 + bne _020E48A0 + mov r0, r11 + mov r1, r9 + bl _u32_div_f + str r0, [sp, #0x4] +_020E48A0: + cmp r6, #0x0 + blt _020E48B0 + cmp r6, #0x80 + blt _020E48B8 +_020E48B0: + mov r0, #0x0 + b _020E48C8 +_020E48B8: + ldr r0, _020E4A2C ; =0x0210430C + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x8 +_020E48C8: + cmp r0, #0x0 + beq _020E48F0 + sub r6, r6, #0x30 + cmp r6, r9 + blt _020E4978 + cmp r4, #0x10 + moveq r4, #0x20 + movne r4, #0x40 + add r6, r6, #0x30 + b _020E49C8 +_020E48F0: + cmp r6, #0x0 + blt _020E4900 + cmp r6, #0x80 + blt _020E4908 +_020E4900: + mov r0, #0x0 + b _020E4918 +_020E4908: + ldr r0, _020E4A2C ; =0x0210430C + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x1 +_020E4918: + cmp r0, #0x0 + beq _020E494C + cmp r6, #0x0 + blt _020E4930 + cmp r6, #0x80 + blt _020E4938 +_020E4930: + mov r0, r6 + b _020E4940 +_020E4938: + ldr r0, _020E4A30 ; =0x0210428C + ldrb r0, [r0, r6] +_020E4940: + sub r0, r0, #0x37 + cmp r0, r9 + blt _020E495C +_020E494C: + cmp r4, #0x10 + moveq r4, #0x20 + movne r4, #0x40 + b _020E49C8 +_020E495C: + cmp r6, #0x0 + blt _020E4974 + cmp r6, #0x80 + bge _020E4974 + ldr r0, _020E4A30 ; =0x0210428C + ldrb r6, [r0, r6] +_020E4974: + sub r6, r6, #0x37 +_020E4978: + ldr r0, [sp, #0x4] + mov r4, #0x10 + cmp r10, r0 + ldrhi r0, [sp, #0x38] + movhi r1, #0x1 + strhi r1, [r0, #0x0] + mul r0, r10, r9 + mov r10, r0 + sub r0, r11, r0 + cmp r6, r0 + ldrhi r0, [sp, #0x38] + movhi r1, #0x1 + strhi r1, [r0, #0x0] + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + add r10, r10, r6 + add r5, r5, #0x1 + blx r8 + mov r6, r0 +_020E49C8: + ldr r0, [sp, #0x0] + cmp r5, r0 + bgt _020E49E4 + cmp r6, r11 + beq _020E49E4 + tst r4, #0x60 + beq _020E4710 +_020E49E4: + tst r4, #0x34 + bne _020E49FC + ldr r0, [sp, #0x30] + mov r10, #0x0 + str r10, [r0, #0x0] + b _020E4A10 +_020E49FC: + ldr r0, [sp, #0x8] + sub r1, r5, #0x1 + add r1, r1, r0 + ldr r0, [sp, #0x30] + str r1, [r0, #0x0] +_020E4A10: + mov r0, r7 + mov r1, r6 + mov r2, #0x1 + blx r8 + mov r0, r10 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020E4A2C: .word 0x0210430C +_020E4A30: .word 0x0210428C + + arm_func_start __strtoull +__strtoull: ; 0x020E4A34 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x1c + ldr r4, [sp, #0x48] + movs r9, r0 + ldr r0, [sp, #0x44] + str r4, [sp, #0x48] + mov r4, #0x0 + str r0, [sp, #0x44] + ldr r0, [sp, #0x48] + str r1, [sp, #0x0] + str r4, [r0, #0x0] + mov r0, r4 + str r0, [sp, #0xc] + str r0, [sp, #0x8] + ldr r0, [sp, #0x44] + mov r1, r4 + str r1, [r0, #0x0] + ldr r0, [sp, #0x40] + str r4, [sp, #0x14] + mov r8, r2 + mov r7, r3 + mov r5, r4 + mov r10, r4 + mov r11, r4 + str r0, [sp, #0x40] + mov r4, #0x1 + bmi _020E4ABC + cmp r9, #0x1 + beq _020E4ABC + cmp r9, #0x24 + bgt _020E4ABC + ldr r0, [sp, #0x0] + cmp r0, #0x1 + bge _020E4AC4 +_020E4ABC: + mov r4, #0x40 + b _020E4ADC +_020E4AC4: + ldr r1, [sp, #0x14] + mov r0, r7 + mov r2, r1 + add r5, r1, #0x1 + blx r8 + mov r6, r0 +_020E4ADC: + cmp r9, #0x0 + beq _020E4B00 + mvn r0, #0x0 + mov r1, r0 + mov r3, r9, asr #0x1f + mov r2, r9 + bl _ll_udiv + str r0, [sp, #0xc] + str r1, [sp, #0x8] +_020E4B00: + mvn r0, #0x0 + str r0, [sp, #0x18] + b _020E4E08 +_020E4B0C: + cmp r4, #0x8 + bgt _020E4B44 + cmp r4, #0x0 + addge pc, pc, r4, lsl #0x2 + b _020E4E08 +_020E4B20: + .byte 0xB8, 0x00, 0x00, 0xEA, 0x09, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0xEA, 0xB5, 0x00, 0x00, 0xEA + .byte 0x40, 0x00, 0x00, 0xEA, 0xB3, 0x00, 0x00, 0xEA, 0xB2, 0x00, 0x00, 0xEA, 0xB1, 0x00, 0x00, 0xEA + .byte 0x4C, 0x00, 0x00, 0xEA +_020E4B44: + cmp r4, #0x10 + beq _020E4C78 + b _020E4E08 +_020E4B50: + .byte 0x00, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xBA + .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x08, 0x03, 0x9F, 0xE5, 0x86, 0x10, 0xA0, 0xE1 + .byte 0xB1, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A + .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x38, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x60, 0xA0, 0xE1, 0x14, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2, 0x14, 0x00, 0x8D, 0xE5 + .byte 0x98, 0x00, 0x00, 0xEA, 0x2B, 0x00, 0x56, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x60, 0xA0, 0xE1, 0x0A, 0x00, 0x00, 0xEA, 0x2D, 0x00, 0x56, 0xE3, 0x08, 0x00, 0x00, 0x1A + .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2 + .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x44, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0xA0, 0xE3 + .byte 0x00, 0x10, 0x80, 0xE5, 0x02, 0x40, 0xA0, 0xE3, 0x82, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x59, 0xE3 + .byte 0x10, 0x00, 0x59, 0x13, 0x09, 0x00, 0x00, 0x1A, 0x30, 0x00, 0x56, 0xE3, 0x07, 0x00, 0x00, 0x1A + .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x04, 0x40, 0xA0, 0xE3 + .byte 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x75, 0x00, 0x00, 0xEA + .byte 0x08, 0x40, 0xA0, 0xE3, 0x73, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x56, 0xE3, 0x78, 0x00, 0x56, 0x13 + .byte 0x08, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 + .byte 0x10, 0x90, 0xA0, 0xE3, 0x08, 0x40, 0xA0, 0xE3, 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x60, 0xA0, 0xE1, 0x67, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x59, 0xE3, 0x08, 0x90, 0xA0, 0x03 + .byte 0x10, 0x40, 0xA0, 0xE3, 0x63, 0x00, 0x00, 0xEA +_020E4C78: + ldr r1, [sp, #0x8] + mov r0, #0x0 + cmp r9, #0x0 + moveq r9, #0xa + cmp r1, r0 + ldr r1, [sp, #0xc] + cmpeq r1, r0 + bne _020E4CB4 + ldr r0, [sp, #0x18] + mov r3, r9, asr #0x1f + mov r1, r0 + mov r2, r9 + bl _ll_udiv + str r0, [sp, #0xc] + str r1, [sp, #0x8] +_020E4CB4: + cmp r6, #0x0 + blt _020E4CC4 + cmp r6, #0x80 + blt _020E4CCC +_020E4CC4: + mov r0, #0x0 + b _020E4CDC +_020E4CCC: + ldr r0, _020E4E78 ; =0x0210430C + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x8 +_020E4CDC: + cmp r0, #0x0 + beq _020E4D04 + sub r6, r6, #0x30 + cmp r6, r9 + blt _020E4D8C + cmp r4, #0x10 + moveq r4, #0x20 + movne r4, #0x40 + add r6, r6, #0x30 + b _020E4E08 +_020E4D04: + cmp r6, #0x0 + blt _020E4D14 + cmp r6, #0x80 + blt _020E4D1C +_020E4D14: + mov r0, #0x0 + b _020E4D2C +_020E4D1C: + ldr r0, _020E4E78 ; =0x0210430C + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x1 +_020E4D2C: + cmp r0, #0x0 + beq _020E4D60 + cmp r6, #0x0 + blt _020E4D44 + cmp r6, #0x80 + blt _020E4D4C +_020E4D44: + mov r0, r6 + b _020E4D54 +_020E4D4C: + ldr r0, _020E4E7C ; =0x0210428C + ldrb r0, [r0, r6] +_020E4D54: + sub r0, r0, #0x37 + cmp r0, r9 + blt _020E4D70 +_020E4D60: + cmp r4, #0x10 + moveq r4, #0x20 + movne r4, #0x40 + b _020E4E08 +_020E4D70: + cmp r6, #0x0 + blt _020E4D88 + cmp r6, #0x80 + bge _020E4D88 + ldr r0, _020E4E7C ; =0x0210428C + ldrb r6, [r0, r6] +_020E4D88: + sub r6, r6, #0x37 +_020E4D8C: + ldr r0, [sp, #0x8] + umull r2, r3, r10, r9 + cmp r11, r0 + ldr r0, [sp, #0xc] + mov r4, #0x10 + cmpeq r10, r0 + ldrhi r0, [sp, #0x48] + movhi r1, #0x1 + strhi r1, [r0, #0x0] + mov r1, r9, asr #0x1f + mla r3, r10, r1, r3 + mla r3, r11, r9, r3 + ldr r1, [sp, #0x18] + mov r10, r2 + subs r2, r1, r2 + mov r0, r6, asr #0x1f + sbc r1, r1, r3 + cmp r0, r1 + cmpeq r6, r2 + ldrhi r1, [sp, #0x48] + movhi r2, #0x1 + strhi r2, [r1, #0x0] + mov r1, #0x0 + mov r11, r3 + adds r10, r10, r6 + adc r11, r11, r0 + mov r0, r7 + mov r2, r1 + add r5, r5, #0x1 + blx r8 + mov r6, r0 +_020E4E08: + ldr r0, [sp, #0x0] + cmp r5, r0 + bgt _020E4E28 + ldr r0, [sp, #0x18] + cmp r6, r0 + beq _020E4E28 + tst r4, #0x60 + beq _020E4B0C +_020E4E28: + tst r4, #0x34 + bne _020E4E44 + ldr r0, [sp, #0x40] + mov r10, #0x0 + mov r11, r10 + str r10, [r0, #0x0] + b _020E4E58 +_020E4E44: + ldr r0, [sp, #0x14] + sub r1, r5, #0x1 + add r1, r1, r0 + ldr r0, [sp, #0x40] + str r1, [r0, #0x0] +_020E4E58: + mov r0, r7 + mov r1, r6 + mov r2, #0x1 + blx r8 + mov r0, r10 + mov r1, r11 + add sp, sp, #0x1c + ldmia sp!, {r4-r11,pc} + .balign 4 +_020E4E78: .word 0x0210430C +_020E4E7C: .word 0x0210428C + + arm_func_start strtoul +strtoul: ; 0x020E4E80 + stmdb sp!, {r3-r5,lr} + sub sp, sp, #0x20 + mov r5, r0 + mov lr, #0x0 + mov r0, r2 + mov r4, r1 + add r2, sp, #0x1c + str r5, [sp, #0xc] + str lr, [sp, #0x10] + str r2, [sp, #0x0] + add r1, sp, #0x18 + str r1, [sp, #0x4] + add r12, sp, #0x14 + ldr r2, _020E4F10 ; =__StringRead + add r3, sp, #0xc + sub r1, lr, #0x80000001 + str r12, [sp, #0x8] + bl __strtoul +_020E4EC8: + .byte 0x00, 0x00, 0x54, 0xE3, 0x1C, 0x10, 0x9D, 0x15 + .byte 0x01, 0x10, 0x85, 0x10, 0x00, 0x10, 0x84, 0x15, 0x14, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x51, 0xE3 + .byte 0x05, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x9F, 0xE5, 0x22, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5 + .byte 0x20, 0xD0, 0x8D, 0xE2, 0x00, 0x00, 0xE0, 0xE3, 0x38, 0x80, 0xBD, 0xE8, 0x18, 0x10, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x51, 0xE3, 0x00, 0x00, 0x60, 0x12, 0x20, 0xD0, 0x8D, 0xE2, 0x38, 0x80, 0xBD, 0xE8 +_020E4F10: .word __StringRead +_020E4F14: + .byte 0xA8, 0x74, 0x1D, 0x02 + + arm_func_start strtold2 +strtold2: ; 0x020E4F18 + stmdb sp!, {r3-r5,lr} + sub sp, sp, #0x20 + mov r5, r0 + mov lr, #0x0 + mov r0, r2 + mov r4, r1 + add r2, sp, #0x1c + str r5, [sp, #0xc] + str lr, [sp, #0x10] + str r2, [sp, #0x0] + add r1, sp, #0x18 + str r1, [sp, #0x4] + add r12, sp, #0x14 + ldr r2, _020E4FD8 ; =__StringRead + add r3, sp, #0xc + sub r1, lr, #0x80000001 + str r12, [sp, #0x8] + bl __strtoul +_020E4F60: + .byte 0x00, 0x00, 0x54, 0xE3, 0x1C, 0x10, 0x9D, 0x15, 0x01, 0x10, 0x85, 0x10, 0x00, 0x10, 0x84, 0x15 + .byte 0x14, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x09, 0x00, 0x00, 0x1A, 0x18, 0x20, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x52, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x02, 0x11, 0xE0, 0xE3, 0x01, 0x00, 0x50, 0xE1 + .byte 0x03, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x52, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x02, 0x01, 0x50, 0xE3 + .byte 0x08, 0x00, 0x00, 0x9A, 0x18, 0x00, 0x9D, 0xE5, 0x2C, 0x10, 0x9F, 0xE5, 0x22, 0x20, 0xA0, 0xE3 + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x01, 0xA0, 0x13, 0x00, 0x20, 0x81, 0xE5, 0x20, 0xD0, 0x8D, 0xE2 + .byte 0x02, 0x01, 0xE0, 0x03, 0x38, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x52, 0xE3, 0x00, 0x00, 0x60, 0x12 + .byte 0x20, 0xD0, 0x8D, 0xE2, 0x38, 0x80, 0xBD, 0xE8 +_020E4FD8: .word __StringRead +_020E4FDC: + .byte 0xA8, 0x74, 0x1D, 0x02 + + arm_func_start atol +atol: ; 0x020E4FE0 + ldr ip, _020E4FF0 ; =strtold + mov r1, #0x0 + mov r2, #0xa + bx r12 + .balign 4 +_020E4FF0: .word strtold2 + + arm_func_start fwide +fwide: + cmp r0, #0x0 + beq _020E500C + ldr r3, [r0, #0x4] + mov r2, r3, lsl #0x16 + movs r2, r2, lsr #0x1d + bne _020E5014 +_020E500C: + mov r0, #0x0 + bx lr +_020E5014: + mov r2, r3, lsl #0x14 + movs r2, r2, lsr #0x1e + beq _020E5034 + cmp r2, #0x1 + beq _020E505C + cmp r2, #0x2 + moveq r1, #0x1 + b _020E5060 +_020E5034: + cmp r1, #0x0 + ble _020E504C + bic r2, r3, #0xc00 + orr r2, r2, #0x800 + str r2, [r0, #0x4] + b _020E5060 +_020E504C: + biclt r2, r3, #0xc00 + orrlt r2, r2, #0x400 + strlt r2, [r0, #0x4] + b _020E5060 +_020E505C: + mvn r1, #0x0 +_020E5060: + mov r0, r1 + bx lr + + arm_func_start wmemcpy +wmemcpy: ; 0x020E5068 + ldr ip, _020E5074 ; =memcpy + mov r2, r2, lsl #0x1 + bx r12 + .balign 4 +_020E5074: .word memcpy + + arm_func_start wmemchr +wmemchr: ; 0x020E5078 + cmp r2, #0x0 + beq _020E5098 +_020E5080: + ldrh r3, [r0, #0x0] + cmp r3, r1 + bxeq lr + add r0, r0, #0x2 + subs r2, r2, #0x1 + bne _020E5080 +_020E5098: + mov r0, #0x0 + bx lr + + arm_func_start parse_format_wprintf +parse_format_wprintf: ; 0x020E50A0 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + ldrh r3, [r0, #0x2] + mov r4, #0x0 + mov r5, #0x1 + mov lr, r2 + strb r5, [sp, #0x0] + strb r4, [sp, #0x1] + strb r4, [sp, #0x2] + strb r4, [sp, #0x3] + strb r4, [sp, #0x4] + str r4, [sp, #0x8] + str r4, [sp, #0xc] + cmp r3, #0x25 + add r12, r0, #0x2 + bne _020E50FC + add r0, sp, #0x0 + strh r3, [sp, #0x6] + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add sp, sp, #0x10 + add r0, r12, #0x2 + ldmia sp!, {r4-r8,pc} +_020E50FC: + mov r2, #0x2 + mov r0, r4 + mov r5, r2 + mov r6, r4 + mov r7, #0x1 +_020E5110: + mov r8, r7 + cmp r3, #0x2b + bgt _020E5140 + bge _020E5168 + cmp r3, #0x23 + bgt _020E5198 + cmp r3, #0x20 + blt _020E5198 + beq _020E5170 + cmp r3, #0x23 + beq _020E5180 + b _020E5198 +_020E5140: + cmp r3, #0x30 + bgt _020E5198 + cmp r3, #0x2d + blt _020E5198 + beq _020E5160 + cmp r3, #0x30 + beq _020E5188 + b _020E5198 +_020E5160: + strb r6, [sp, #0x0] + b _020E519C +_020E5168: + strb r7, [sp, #0x1] + b _020E519C +_020E5170: + ldrb r4, [sp, #0x1] + cmp r4, #0x1 + strneb r5, [sp, #0x1] + b _020E519C +_020E5180: + strb r7, [sp, #0x3] + b _020E519C +_020E5188: + ldrb r4, [sp, #0x0] + cmp r4, #0x0 + strneb r2, [sp, #0x0] + b _020E519C +_020E5198: + mov r8, r0 +_020E519C: + cmp r8, #0x0 + ldrneh r3, [r12, #0x2]! + bne _020E5110 + cmp r3, #0x2a + bne _020E51E4 + ldr r0, [r1, #0x0] + add r0, r0, #0x4 + str r0, [r1, #0x0] + ldr r0, [r0, #-0x4] + str r0, [sp, #0x8] + cmp r0, #0x0 + bge _020E51DC + rsb r0, r0, #0x0 + mov r2, #0x0 + strb r2, [sp, #0x0] + str r0, [sp, #0x8] +_020E51DC: + ldrh r3, [r12, #0x2]! + b _020E5228 +_020E51E4: + mov r2, #0x0 + ldr r5, _020E560C ; =0x02104544 + mov r0, #0xa + b _020E5208 +_020E51F4: + ldr r4, [sp, #0x8] + sub r3, r3, #0x30 + mla r6, r4, r0, r3 + ldrh r3, [r12, #0x2]! + str r6, [sp, #0x8] +_020E5208: + cmp r3, #0x80 + movcs r4, r2 + bhs _020E5220 + mov r4, r3, lsl #0x1 + ldrh r4, [r5, r4] + and r4, r4, #0x8 +_020E5220: + cmp r4, #0x0 + bne _020E51F4 +_020E5228: + ldr r2, [sp, #0x8] + ldr r0, _020E5610 ; =0x000001FD + cmp r2, r0 + ble _020E5258 + ldr r1, _020E5614 ; =0x0000FFFF + add r0, sp, #0x0 + strh r1, [sp, #0x6] + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add sp, sp, #0x10 + add r0, r12, #0x2 + ldmia sp!, {r4-r8,pc} +_020E5258: + cmp r3, #0x2e + bne _020E52E0 + ldrh r3, [r12, #0x2]! + mov r0, #0x1 + strb r0, [sp, #0x2] + cmp r3, #0x2a + bne _020E529C + ldr r0, [r1, #0x0] + add r0, r0, #0x4 + str r0, [r1, #0x0] + ldr r0, [r0, #-0x4] + ldrh r3, [r12, #0x2]! + str r0, [sp, #0xc] + cmp r0, #0x0 + movlt r0, #0x0 + strltb r0, [sp, #0x2] + b _020E52E0 +_020E529C: + mov r1, #0x0 + ldr r4, _020E560C ; =0x02104544 + mov r0, #0xa + b _020E52C0 +_020E52AC: + ldr r2, [sp, #0xc] + sub r3, r3, #0x30 + mla r5, r2, r0, r3 + ldrh r3, [r12, #0x2]! + str r5, [sp, #0xc] +_020E52C0: + cmp r3, #0x80 + movcs r2, r1 + bhs _020E52D8 + mov r2, r3, lsl #0x1 + ldrh r2, [r4, r2] + and r2, r2, #0x8 +_020E52D8: + cmp r2, #0x0 + bne _020E52AC +_020E52E0: + cmp r3, #0x6c + mov r0, #0x1 + bgt _020E5318 + cmp r3, #0x68 + blt _020E530C + beq _020E5334 + cmp r3, #0x6a + beq _020E5380 + cmp r3, #0x6c + beq _020E5350 + b _020E53A4 +_020E530C: + cmp r3, #0x4c + beq _020E5374 + b _020E53A4 +_020E5318: + cmp r3, #0x74 + bgt _020E5328 + beq _020E538C + b _020E53A4 +_020E5328: + cmp r3, #0x7a + beq _020E5398 + b _020E53A4 +_020E5334: + ldrh r1, [r12, #0x2] + mov r2, #0x2 + strb r2, [sp, #0x4] + cmp r1, #0x68 + streqb r0, [sp, #0x4] + ldreqh r3, [r12, #0x2]! + b _020E53A8 +_020E5350: + ldrh r1, [r12, #0x2] + mov r2, #0x3 + strb r2, [sp, #0x4] + cmp r1, #0x6c + bne _020E53A8 + mov r1, #0x4 + strb r1, [sp, #0x4] + ldrh r3, [r12, #0x2]! + b _020E53A8 +_020E5374: + mov r1, #0x9 + strb r1, [sp, #0x4] + b _020E53A8 +_020E5380: + mov r1, #0x6 + strb r1, [sp, #0x4] + b _020E53A8 +_020E538C: + mov r1, #0x8 + strb r1, [sp, #0x4] + b _020E53A8 +_020E5398: + mov r1, #0x7 + strb r1, [sp, #0x4] + b _020E53A8 +_020E53A4: + mov r0, #0x0 +_020E53A8: + cmp r0, #0x0 + ldrneh r3, [r12, #0x2]! + strh r3, [sp, #0x6] + cmp r3, #0x61 + bgt _020E53FC + bge _020E54E0 + cmp r3, #0x47 + bgt _020E53F0 + subs r0, r3, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020E55EC +_020E53D4: + .byte 0x41, 0x00, 0x00, 0xEA, 0x83, 0x00, 0x00, 0xEA, 0x82, 0x00, 0x00, 0xEA + .byte 0x81, 0x00, 0x00, 0xEA, 0x4F, 0x00, 0x00, 0xEA, 0x2E, 0x00, 0x00, 0xEA, 0x49, 0x00, 0x00, 0xEA +_020E53F0: + cmp r3, #0x58 + beq _020E5470 + b _020E55EC +_020E53FC: + cmp r3, #0x63 + bgt _020E540C + beq _020E5588 + b _020E55EC +_020E540C: + sub r0, r3, #0x64 + cmp r0, #0x14 + addls pc, pc, r0, lsl #0x2 + b _020E55EC +_020E541C: + .byte 0x13, 0x00, 0x00, 0xEA + .byte 0x40, 0x00, 0x00, 0xEA, 0x1F, 0x00, 0x00, 0xEA, 0x3A, 0x00, 0x00, 0xEA, 0x6E, 0x00, 0x00, 0xEA + .byte 0x0E, 0x00, 0x00, 0xEA, 0x6C, 0x00, 0x00, 0xEA, 0x6B, 0x00, 0x00, 0xEA, 0x6A, 0x00, 0x00, 0xEA + .byte 0x69, 0x00, 0x00, 0xEA, 0x63, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x44, 0x00, 0x00, 0xEA + .byte 0x65, 0x00, 0x00, 0xEA, 0x64, 0x00, 0x00, 0xEA, 0x55, 0x00, 0x00, 0xEA, 0x62, 0x00, 0x00, 0xEA + .byte 0x02, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, 0xEA, 0x5F, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA +_020E5470: + ldrb r0, [sp, #0x4] + cmp r0, #0x9 + moveq r0, #0x4 + streqb r0, [sp, #0x4] + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0xc] + beq _020E55F4 + ldrb r0, [sp, #0x0] + cmp r0, #0x2 + moveq r0, #0x1 + streqb r0, [sp, #0x0] + b _020E55F4 +_020E54A8: + .byte 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3 + .byte 0x06, 0x00, 0x50, 0x13, 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13 + .byte 0x4C, 0x01, 0x9F, 0x05, 0xB6, 0x00, 0xCD, 0x01, 0x49, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xDD, 0xE5 + .byte 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x44, 0x00, 0x00, 0xEA +_020E54E0: + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0xd + streq r0, [sp, #0xc] + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + cmpne r0, #0x1 + ldreq r0, _020E5614 ; =0x0000FFFF + streqh r0, [sp, #0x6] + b _020E55F4 +_020E5518: + .byte 0x0C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 + .byte 0x01, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3 + .byte 0x06, 0x00, 0x50, 0x13, 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13 + .byte 0x01, 0x00, 0x50, 0x13, 0xC8, 0x00, 0x9F, 0x05, 0xB6, 0x00, 0xCD, 0x01, 0x28, 0x00, 0x00, 0x0A + .byte 0x02, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05 + .byte 0x23, 0x00, 0x00, 0xEA, 0x03, 0x30, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3, 0x78, 0x10, 0xA0, 0xE3 + .byte 0x08, 0x00, 0xA0, 0xE3, 0x04, 0x30, 0xCD, 0xE5, 0x03, 0x20, 0xCD, 0xE5, 0xB6, 0x10, 0xCD, 0xE1 + .byte 0x0C, 0x00, 0x8D, 0xE5, 0x1A, 0x00, 0x00, 0xEA +_020E5588: + ldrb r1, [sp, #0x4] + cmp r1, #0x3 + moveq r0, #0x5 + streqb r0, [sp, #0x4] + beq _020E55F4 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + cmpeq r1, #0x0 + ldrne r0, _020E5614 ; =0x0000FFFF + strneh r0, [sp, #0x6] + b _020E55F4 +_020E55B4: + .byte 0x04, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x03 + .byte 0x04, 0x00, 0xCD, 0x05, 0x0A, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0x40, 0x00, 0x9F, 0x15 + .byte 0xB6, 0x00, 0xCD, 0x11, 0x06, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xDD, 0xE5, 0x09, 0x00, 0x50, 0xE3 + .byte 0x04, 0x00, 0xA0, 0x03, 0x04, 0x00, 0xCD, 0x05, 0x01, 0x00, 0x00, 0xEA +_020E55EC: + ldr r0, _020E5614 ; =0x0000FFFF + strh r0, [sp, #0x6] +_020E55F4: + add r0, sp, #0x0 + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add r0, r12, #0x2 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020E560C: .word 0x02104544 +_020E5610: .word 0x000001FD +_020E5614: .word 0x0000FFFF + + arm_func_start long2str_wide +long2str_wide: ; 0x020E5618 + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x10 + movs r10, r0 + mov r0, #0x0 + mov r5, r1 + str r0, [sp, #0xc] + ldr r7, [sp, #0x4c] + mov r6, r0 + strh r0, [r5, #-0x2]! + ldrb r0, [sp, #0x43] + str r1, [sp, #0x0] + ldrh r8, [sp, #0x46] + str r0, [sp, #0x4] + ldr r0, [sp, #0x48] + ldrb r11, [sp, #0x41] + str r0, [sp, #0x8] + cmpeq r7, #0x0 + bne _020E568C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020E5678 + cmp r8, #0x6f + beq _020E568C +_020E5678: + add sp, sp, #0x10 + mov r0, r5 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E568C: + cmp r8, #0x69 + bgt _020E56B4 + bge _020E56E8 + cmp r8, #0x58 + bgt _020E56A8 + beq _020E5714 + b _020E571C +_020E56A8: + cmp r8, #0x64 + beq _020E56E8 + b _020E571C +_020E56B4: + cmp r8, #0x6f + bgt _020E56C8 + moveq r4, #0x8 + moveq r11, #0x0 + b _020E571C +_020E56C8: + cmp r8, #0x78 + bgt _020E571C + cmp r8, #0x75 + blt _020E571C + beq _020E5708 + cmp r8, #0x78 + beq _020E5714 + b _020E571C +_020E56E8: + cmp r10, #0x0 + mov r4, #0xa + bge _020E571C + mov r0, #0x1 + cmp r10, #0x80000000 + rsbne r10, r10, #0x0 + str r0, [sp, #0xc] + b _020E571C +_020E5708: + mov r4, #0xa + mov r11, #0x0 + b _020E571C +_020E5714: + mov r4, #0x10 + mov r11, #0x0 +_020E571C: + mov r0, r10 + mov r1, r4 + bl _u32_div_f + mov r9, r1 + mov r0, r10 + mov r1, r4 + bl _u32_div_f + cmp r9, #0xa + mov r10, r0 + addlt r9, r9, #0x30 + blt _020E5754 + cmp r8, #0x78 + addeq r9, r9, #0x57 + addne r9, r9, #0x37 +_020E5754: + cmp r10, #0x0 + strh r9, [r5, #-0x2]! + add r6, r6, #0x1 + bne _020E571C + cmp r4, #0x8 + bne _020E5788 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrneh r0, [r5, #0x0] + cmpne r0, #0x30 + movne r0, #0x30 + strneh r0, [r5, #-0x2]! + addne r6, r6, #0x1 +_020E5788: + ldrb r0, [sp, #0x40] + cmp r0, #0x2 + bne _020E57BC + ldr r0, [sp, #0xc] + ldr r7, [sp, #0x8] + cmp r0, #0x0 + cmpeq r11, #0x0 + subne r7, r7, #0x1 + cmp r4, #0x10 + bne _020E57BC + ldr r0, [sp, #0x4] + cmp r0, #0x0 + subne r7, r7, #0x2 +_020E57BC: + ldr r0, [sp, #0x0] + ldr r1, _020E5864 ; =0x000001FD + sub r0, r0, r5 + add r0, r0, r0, lsr #0x1f + add r0, r7, r0, asr #0x1 + cmp r0, r1 + addgt sp, sp, #0x10 + movgt r0, #0x0 + ldmgtia sp!, {r3-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + cmp r6, r7 + bge _020E5804 + mov r0, #0x30 +_020E57F4: + add r6, r6, #0x1 + cmp r6, r7 + strh r0, [r5, #-0x2]! + blt _020E57F4 +_020E5804: + cmp r4, #0x10 + bne _020E5820 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x30 + strneh r8, [r5, #-0x2] + strneh r0, [r5, #-0x4]! +_020E5820: + ldr r0, [sp, #0xc] + cmp r0, #0x0 + movne r0, #0x2d + strneh r0, [r5, #-0x2]! + bne _020E5850 + cmp r11, #0x1 + moveq r0, #0x2b + streqh r0, [r5, #-0x2]! + beq _020E5850 + cmp r11, #0x2 + moveq r0, #0x20 + streqh r0, [r5, #-0x2]! +_020E5850: + mov r0, r5 + add sp, sp, #0x10 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E5864: .word 0x000001FD + + arm_func_start longlong2str_wide +longlong2str_wide: ; 0x020E5868 + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x18 + mov r9, r1 + mov r1, #0x0 + mov r10, r0 + mov r6, r2 + mov r0, r1 + strh r0, [r6, #-0x2]! + ldr r0, [sp, #0x58] + cmp r9, #0x0 + str r0, [sp, #0x10] + ldrb r0, [sp, #0x4f] + cmpeq r10, #0x0 + str r2, [sp, #0x0] + str r0, [sp, #0x4] + ldr r0, [sp, #0x54] + str r1, [sp, #0x14] + str r0, [sp, #0x8] + ldrb r0, [sp, #0x4d] + mov r7, r1 + ldrh r8, [sp, #0x52] + str r0, [sp, #0xc] + ldreq r0, [sp, #0x10] + cmpeq r0, #0x0 + bne _020E58F8 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020E58E4 + cmp r8, #0x6f + beq _020E58F8 +_020E58E4: + add sp, sp, #0x18 + mov r0, r6 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E58F8: + cmp r8, #0x69 + bgt _020E5920 + bge _020E5950 + cmp r8, #0x58 + bgt _020E5914 + beq _020E59A4 + b _020E59B0 +_020E5914: + cmp r8, #0x64 + beq _020E5950 + b _020E59B0 +_020E5920: + cmp r8, #0x6f + bgt _020E5930 + beq _020E5984 + b _020E59B0 +_020E5930: + cmp r8, #0x78 + bgt _020E59B0 + cmp r8, #0x75 + blt _020E59B0 + beq _020E5994 + cmp r8, #0x78 + beq _020E59A4 + b _020E59B0 +_020E5950: + subs r0, r10, #0x0 + sbcs r0, r9, #0x0 + mov r11, #0xa + mov r5, #0x0 + bge _020E59B0 + cmp r9, #0x80000000 + cmpeq r10, r5 + beq _020E5978 + rsbs r10, r10, #0x0 + rsc r9, r9, #0x0 +_020E5978: + mov r0, #0x1 + str r0, [sp, #0x14] + b _020E59B0 +_020E5984: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0x8 + b _020E59B0 +_020E5994: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0xa + b _020E59B0 +_020E59A4: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0x10 +_020E59B0: + mov r0, r10 + mov r1, r9 + mov r2, r11 + mov r3, r5 + bl _ull_mod + mov r4, r0 + mov r0, r10 + mov r1, r9 + mov r2, r11 + mov r3, r5 + bl _ll_udiv + mov r10, r0 + cmp r4, #0xa + mov r9, r1 + addlt r0, r4, #0x30 + blt _020E59FC + cmp r8, #0x78 + addeq r0, r4, #0x57 + addne r0, r4, #0x37 +_020E59FC: + strh r0, [r6, #-0x2]! + mov r0, #0x0 + cmp r9, r0 + cmpeq r10, r0 + add r7, r7, #0x1 + bne _020E59B0 + cmp r5, #0x0 + cmpeq r11, #0x8 + bne _020E5A3C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrneh r0, [r6, #0x0] + cmpne r0, #0x30 + movne r0, #0x30 + strneh r0, [r6, #-0x2]! + addne r7, r7, #0x1 +_020E5A3C: + ldrb r0, [sp, #0x4c] + cmp r0, #0x2 + bne _020E5A8C + ldr r0, [sp, #0x8] + str r0, [sp, #0x10] + ldr r0, [sp, #0x14] + cmp r0, #0x0 + ldreq r0, [sp, #0xc] + cmpeq r0, #0x0 + ldrne r0, [sp, #0x10] + subne r0, r0, #0x1 + strne r0, [sp, #0x10] + cmp r5, #0x0 + cmpeq r11, #0x10 + bne _020E5A8C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrne r0, [sp, #0x10] + subne r0, r0, #0x2 + strne r0, [sp, #0x10] +_020E5A8C: + ldr r0, [sp, #0x0] + ldr r2, _020E5B48 ; =0x000001FD + sub r0, r0, r6 + add r1, r0, r0, lsr #0x1f + ldr r0, [sp, #0x10] + add r0, r0, r1, asr #0x1 + cmp r0, r2 + addgt sp, sp, #0x18 + movgt r0, #0x0 + ldmgtia sp!, {r3-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + ldr r0, [sp, #0x10] + cmp r7, r0 + bge _020E5AE0 + mov r1, #0x30 +_020E5ACC: + ldr r0, [sp, #0x10] + add r7, r7, #0x1 + cmp r7, r0 + strh r1, [r6, #-0x2]! + blt _020E5ACC +_020E5AE0: + cmp r5, #0x0 + cmpeq r11, #0x10 + bne _020E5B00 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x30 + strneh r8, [r6, #-0x2] + strneh r0, [r6, #-0x4]! +_020E5B00: + ldr r0, [sp, #0x14] + cmp r0, #0x0 + movne r0, #0x2d + strneh r0, [r6, #-0x2]! + bne _020E5B34 + ldr r0, [sp, #0xc] + cmp r0, #0x1 + moveq r0, #0x2b + streqh r0, [r6, #-0x2]! + beq _020E5B34 + cmp r0, #0x2 + moveq r0, #0x20 + streqh r0, [r6, #-0x2]! +_020E5B34: + mov r0, r6 + add sp, sp, #0x18 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E5B48: .word 0x000001FD + + arm_func_start double2hex_wide +double2hex_wide: ; 0x020E5B4C + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r10,lr} + sub sp, sp, #0x44 + ldr r7, [sp, #0x80] + ldr r0, _020E5EB8 ; =0x000001FD + mov r8, r2 + cmp r7, r0 + ldrh r6, [sp, #0x7a] + ldrb r5, [sp, #0x77] + ldrb r4, [sp, #0x75] + ldr r1, [sp, #0x68] + ldr r2, [sp, #0x6c] + addgt sp, sp, #0x44 + movgt r0, #0x0 + ldmgtia sp!, {r3-r10,lr} + addgt sp, sp, #0x10 + bxgt lr + mov r10, #0x0 + mov r9, #0x20 + add r0, sp, #0x8 + add r3, sp, #0xc + strb r10, [sp, #0x8] + strh r9, [sp, #0xa] + bl __num2dec_internal2 + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x6c] + bl fabs + mov r2, r0 + mov r0, r10 + mov r3, r1 + mov r1, r0 + bl _deq + bne _020E5BF4 + sub r4, r8, #0xc + ldr r1, _020E5EBC ; =0x02106DE4 + mov r0, r4 + bl wcscpy + add sp, sp, #0x44 + mov r0, r4 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E5BF4: + ldrb r0, [sp, #0x11] + cmp r0, #0x49 + bne _020E5C74 + ldrsb r0, [sp, #0xc] + cmp r0, #0x0 + beq _020E5C38 + cmp r6, #0x41 + sub r4, r8, #0xa + bne _020E5C28 + ldr r1, _020E5EC0 ; =0x02106DF0 + mov r0, r4 + bl wcscpy + b _020E5C60 +_020E5C28: + ldr r1, _020E5EC4 ; =0x02106DFC + mov r0, r4 + bl wcscpy + b _020E5C60 +_020E5C38: + cmp r6, #0x41 + sub r4, r8, #0x8 + bne _020E5C54 + ldr r1, _020E5EC8 ; =0x02106E08 + mov r0, r4 + bl wcscpy + b _020E5C60 +_020E5C54: + ldr r1, _020E5ECC ; =0x02106E10 + mov r0, r4 + bl wcscpy +_020E5C60: + add sp, sp, #0x44 + mov r0, r4 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E5C74: + cmp r0, #0x4e + bne _020E5CF0 + ldrsb r0, [sp, #0xc] + cmp r0, #0x0 + beq _020E5CB4 + cmp r6, #0x41 + sub r4, r8, #0xa + bne _020E5CA4 + ldr r1, _020E5ED0 ; =0x02106E18 + mov r0, r4 + bl wcscpy + b _020E5CDC +_020E5CA4: + ldr r1, _020E5ED4 ; =0x02106E24 + mov r0, r4 + bl wcscpy + b _020E5CDC +_020E5CB4: + cmp r6, #0x41 + sub r4, r8, #0x8 + bne _020E5CD0 + ldr r1, _020E5ED8 ; =0x02106E30 + mov r0, r4 + bl wcscpy + b _020E5CDC +_020E5CD0: + ldr r1, _020E5EDC ; =0x02106E38 + mov r0, r4 + bl wcscpy +_020E5CDC: + add sp, sp, #0x44 + mov r0, r4 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E5CF0: + mov r3, r10 + mov r1, #0x1 + mov r0, #0x64 + add r9, sp, #0x68 + strb r1, [sp, #0x34] + strb r1, [sp, #0x35] + strb r3, [sp, #0x36] + strb r3, [sp, #0x37] + strb r3, [sp, #0x38] + str r3, [sp, #0x3c] + str r1, [sp, #0x40] + strh r0, [sp, #0x3a] +_020E5D20: + rsb r1, r3, #0x7 + ldrsb r2, [r9, r3] + ldrsb r0, [r9, r1] + strb r0, [r9, r3] + add r3, r3, #0x1 + strb r2, [r9, r1] + cmp r3, #0x4 + blt _020E5D20 + ldrb r0, [sp, #0x69] + ldrb r1, [sp, #0x68] + ldr sb, _020E5EE0 ; =0x000007FF + mov r0, r0, lsl #0x11 + orr r1, r0, r1, lsl #0x19 + add r0, sp, #0x34 + and lr, r9, r1, lsr #0x15 + sub r12, sp, #0x8 + ldmia r0, {r0-r3} + stmia r12, {r0-r3} + rsb r0, r9, #0x400 + mov r1, r8 + add r0, lr, r0 + ldmia r12, {r2-r3} + bl long2str_wide + cmp r6, #0x61 + moveq r1, #0x70 + movne r1, #0x50 + strh r1, [r0, #-0x2]! + mov r1, r7, lsl #0x2 + mov lr, r7 + cmp r7, #0x1 + add r8, r1, #0xb + add r12, sp, #0x68 + blt _020E5E30 + mov r9, #0x30 +_020E5DA8: + cmp r8, #0x40 + bge _020E5E18 + ldrb r1, [r12, r8, asr #0x3] + and r2, r8, #0x7 + rsb r3, r2, #0x7 + mov r2, r1, asr r3 + sub r10, r8, #0x4 + bic r1, r8, #0x7 + bic r10, r10, #0x7 + cmp r1, r10 + add r10, r12, r8, asr #0x3 + and r1, r2, #0xff + beq _020E5DEC + ldrb r2, [r10, #-0x1] + mov r2, r2, lsl #0x8 + orr r1, r1, r2, asr r3 + and r1, r1, #0xff +_020E5DEC: + and r1, r1, #0xf + cmp r1, #0xa + addcc r1, r1, #0x30 + andcc r1, r1, #0xff + blo _020E5E1C + cmp r6, #0x61 + addeq r1, r1, #0x57 + andeq r1, r1, #0xff + addne r1, r1, #0x37 + andne r1, r1, #0xff + b _020E5E1C +_020E5E18: + mov r1, r9 +_020E5E1C: + sub lr, lr, #0x1 + cmp lr, #0x1 + strh r1, [r0, #-0x2]! + sub r8, r8, #0x4 + bge _020E5DA8 +_020E5E30: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r1, #0x2e + strneh r1, [r0, #-0x2]! + mov r1, #0x31 + strh r1, [r0, #-0x2] + cmp r6, #0x61 + moveq r1, #0x78 + movne r1, #0x58 + strh r1, [r0, #-0x4]! + mov r1, #0x30 + strh r1, [r0, #-0x2]! + ldrsb r1, [sp, #0xc] + cmp r1, #0x0 + movne r1, #0x2d + strneh r1, [r0, #-0x2]! + addne sp, sp, #0x44 + ldmneia sp!, {r3-r10,lr} + addne sp, sp, #0x10 + bxne lr + cmp r4, #0x1 + moveq r1, #0x2b + streqh r1, [r0, #-0x2]! + addeq sp, sp, #0x44 + ldmeqia sp!, {r3-r10,lr} + addeq sp, sp, #0x10 + bxeq lr + cmp r4, #0x2 + moveq r1, #0x20 + streqh r1, [r0, #-0x2]! + add sp, sp, #0x44 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E5EB8: .word 0x000001FD +_020E5EBC: .word 0x02106DE4 +_020E5EC0: .word 0x02106DF0 +_020E5EC4: .word 0x02106DFC +_020E5EC8: .word 0x02106E08 +_020E5ECC: .word 0x02106E10 +_020E5ED0: .word 0x02106E18 +_020E5ED4: .word 0x02106E24 +_020E5ED8: .word 0x02106E30 +_020E5EDC: .word 0x02106E38 +_020E5EE0: .word 0x000007FF + + arm_func_start round_decimal_wide +round_decimal_wide: ; 0x020E5EE4 + stmdb sp!, {r4,lr} + cmp r1, #0x0 + bge _020E5F0C + mov r1, #0x0 + strh r1, [r0, #0x2] + mov r1, #0x1 + strb r1, [r0, #0x4] + mov r1, #0x30 + strb r1, [r0, #0x5] + ldmia sp!, {r4,pc} +_020E5F0C: + ldrb lr, [r0, #0x4] + cmp r1, lr + ldmgeia sp!, {r4,pc} +_020E5F18: + .byte 0x05, 0xC0, 0x80, 0xE2, 0x01, 0x20, 0x8C, 0xE0 + .byte 0x01, 0x20, 0x82, 0xE2, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2, 0x03, 0x3C, 0xA0, 0xE1 + .byte 0x43, 0x3C, 0xA0, 0xE1, 0x05, 0x00, 0x53, 0xE3, 0x0B, 0x00, 0x00, 0x1A, 0x0E, 0xC0, 0x8C, 0xE0 + .byte 0x01, 0xC0, 0x4C, 0xE2, 0x02, 0x00, 0x5C, 0xE1, 0x02, 0x00, 0x00, 0x9A, 0xD0, 0x30, 0xDC, 0xE1 + .byte 0x30, 0x00, 0x53, 0xE3, 0xF9, 0xFF, 0xFF, 0x0A, 0x02, 0x00, 0x5C, 0xE1, 0xD1, 0x30, 0x52, 0x01 + .byte 0x01, 0x40, 0x03, 0x02, 0x01, 0x40, 0xA0, 0x13, 0x01, 0x00, 0x00, 0xEA, 0x01, 0x40, 0xA0, 0xC3 + .byte 0x00, 0x40, 0xA0, 0xD3, 0x00, 0x00, 0x51, 0xE3, 0x14, 0x00, 0x00, 0x0A, 0x00, 0xC0, 0xA0, 0xE3 + .byte 0x01, 0xE0, 0xA0, 0xE3, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2, 0x04, 0x30, 0x83, 0xE0 + .byte 0x03, 0x3C, 0xA0, 0xE1, 0x43, 0x3C, 0xA0, 0xE1, 0x09, 0x00, 0x53, 0xE3, 0x0E, 0x40, 0xA0, 0xC1 + .byte 0x0C, 0x40, 0xA0, 0xD1, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x53, 0xE3 + .byte 0x01, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x41, 0xE2, 0x02, 0x00, 0x00, 0xEA, 0x30, 0x30, 0x83, 0xE2 + .byte 0x00, 0x30, 0xC2, 0xE5, 0x01, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0xEC, 0xFF, 0xFF, 0x1A + .byte 0x00, 0x00, 0x54, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0xF2, 0x30, 0xD0, 0xE1, 0x01, 0x20, 0xA0, 0xE3 + .byte 0x31, 0x10, 0xA0, 0xE3, 0x01, 0x30, 0x83, 0xE2, 0xB2, 0x30, 0xC0, 0xE1, 0x04, 0x20, 0xC0, 0xE5 + .byte 0x05, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x51, 0xE3, 0xBB, 0xFF, 0xFF, 0x0A + .byte 0x04, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8 + + arm_func_start float2str_wide +float2str_wide: ; 0x020E6008 + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x22c + mov r10, r0 + add r0, sp, #0x250 + ldr r7, [sp, #0x268] + ldr r3, _020E6628 ; =0x000001FD + ldrh r6, [r0, #0x12] + cmp r7, r3 + ldrb r5, [sp, #0x25f] + ldrb r4, [sp, #0x25d] + mov r8, r1 + mov r9, r2 + addgt sp, sp, #0x22c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + mov r12, #0x0 + mov r11, #0x20 + add r0, sp, #0x0 + add r3, sp, #0x4 + mov r1, r10 + mov r2, r8 + strb r12, [sp, #0x0] + strh r11, [sp, #0x2] + bl __num2dec_internal2 + ldrb r0, [sp, #0x8] + add r1, sp, #0x9 + add r0, r1, r0 + b _020E609C +_020E6084: + ldrb r2, [sp, #0x8] + ldrsh r1, [sp, #0x6] + sub r2, r2, #0x1 + add r1, r1, #0x1 + strb r2, [sp, #0x8] + strh r1, [sp, #0x6] +_020E609C: + ldrb r1, [sp, #0x8] + cmp r1, #0x1 + bls _020E60B4 + ldrsb r1, [r0, #-0x1]! + cmp r1, #0x30 + beq _020E6084 +_020E60B4: + ldrb r0, [sp, #0x9] + cmp r0, #0x30 + beq _020E60D4 + cmp r0, #0x49 + beq _020E60E0 + cmp r0, #0x4e + beq _020E6198 + b _020E6244 +_020E60D4: + mov r0, #0x0 + strh r0, [sp, #0x6] + b _020E6244 +_020E60E0: + mov r2, #0x0 + mov r0, r10 + mov r1, r8 + mov r3, r2 + bl _dls + bhs _020E6140 + cmp r6, #0x80 + sub r4, r9, #0xa + movcs r0, #0x0 + bhs _020E6118 + ldr r0, _020E662C ; =0x02104544 + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x200 +_020E6118: + cmp r0, #0x0 + beq _020E6130 + ldr r1, _020E6630 ; =0x02106DF0 + mov r0, r4 + bl wcscpy + b _020E6184 +_020E6130: + ldr r1, _020E6634 ; =0x02106DFC + mov r0, r4 + bl wcscpy + b _020E6184 +_020E6140: + cmp r6, #0x80 + sub r4, r9, #0x8 + movcs r0, #0x0 + bhs _020E6160 + ldr r0, _020E662C ; =0x02104544 + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x200 +_020E6160: + cmp r0, #0x0 + beq _020E6178 + ldr r1, _020E6638 ; =0x02106E08 + mov r0, r4 + bl wcscpy + b _020E6184 +_020E6178: + ldr r1, _020E663C ; =0x02106E10 + mov r0, r4 + bl wcscpy +_020E6184: + add sp, sp, #0x22c + mov r0, r4 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E6198: + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + beq _020E61EC + cmp r6, #0x80 + sub r4, r9, #0xa + movcs r0, #0x0 + bhs _020E61C4 + ldr r0, _020E662C ; =0x02104544 + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x200 +_020E61C4: + cmp r0, #0x0 + beq _020E61DC + ldr r1, _020E6640 ; =0x02106E18 + mov r0, r4 + bl wcscpy + b _020E6230 +_020E61DC: + ldr r1, _020E6644 ; =0x02106E24 + mov r0, r4 + bl wcscpy + b _020E6230 +_020E61EC: + cmp r6, #0x80 + sub r4, r9, #0x8 + movcs r0, #0x0 + bhs _020E620C + ldr r0, _020E662C ; =0x02104544 + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x200 +_020E620C: + cmp r0, #0x0 + beq _020E6224 + ldr r1, _020E6648 ; =0x02106E30 + mov r0, r4 + bl wcscpy + b _020E6230 +_020E6224: + ldr r1, _020E664C ; =0x02106E38 + mov r0, r4 + bl wcscpy +_020E6230: + add sp, sp, #0x22c + mov r0, r4 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E6244: + ldrb r1, [sp, #0x8] + ldrsh r2, [sp, #0x6] + add r0, sp, #0x200 + sub r1, r1, #0x1 + add r0, r0, #0x2a + add r1, r2, r1 + sub r8, r0, #0x1 + strh r1, [sp, #0x6] + mov r0, #0x0 + strb r0, [r8, #0x0] + cmp r6, #0x65 + bgt _020E62A0 + bge _020E632C + cmp r6, #0x47 + bgt _020E65EC + cmp r6, #0x45 + blt _020E65EC + beq _020E632C + cmp r6, #0x46 + beq _020E6478 + cmp r6, #0x47 + beq _020E62B8 + b _020E65EC +_020E62A0: + cmp r6, #0x66 + bgt _020E62B0 + beq _020E6478 + b _020E65EC +_020E62B0: + cmp r6, #0x67 + bne _020E65EC +_020E62B8: + ldrb r0, [sp, #0x8] + cmp r0, r7 + ble _020E62D0 + add r0, sp, #0x4 + mov r1, r7 + bl round_decimal_wide +_020E62D0: + ldrsh r2, [sp, #0x6] + mvn r0, #0x3 + cmp r2, r0 + blt _020E62E8 + cmp r2, r7 + blt _020E6308 +_020E62E8: + cmp r5, #0x0 + ldreqb r0, [sp, #0x8] + subne r7, r7, #0x1 + subeq r7, r0, #0x1 + cmp r6, #0x67 + moveq r6, #0x65 + movne r6, #0x45 + b _020E632C +_020E6308: + cmp r5, #0x0 + addne r0, r2, #0x1 + subne r7, r7, r0 + bne _020E6478 + ldrb r1, [sp, #0x8] + add r0, r2, #0x1 + subs r7, r1, r0 + movmi r7, #0x0 + b _020E6478 +_020E632C: + ldrb r0, [sp, #0x8] + add r1, r7, #0x1 + cmp r0, r1 + ble _020E6344 + add r0, sp, #0x4 + bl round_decimal_wide +_020E6344: + ldrsh lr, [sp, #0x6] + mov r11, #0x2b + mov r10, #0x0 + cmp lr, #0x0 + rsblt lr, lr, #0x0 + movlt r11, #0x2d + ldr r3, _020E6650 ; =0x66666667 + mov r0, #0xa + b _020E6398 +_020E6368: + mov r1, lr, lsr #0x1f + smull r2, r12, r3, lr + add r12, r1, r12, asr #0x2 + smull r1, r2, r0, r12 + sub r12, lr, r1 + add r1, r12, #0x30 + strb r1, [r8, #-0x1]! + mov r2, lr + smull r1, lr, r3, r2 + mov r1, r2, lsr #0x1f + add lr, r1, lr, asr #0x2 + add r10, r10, #0x1 +_020E6398: + cmp lr, #0x0 + bne _020E6368 + cmp r10, #0x2 + blt _020E6368 + add r0, sp, #0x2a + strb r11, [r8, #-0x1] + strb r6, [r8, #-0x2]! + sub r1, r0, r8 + ldr r0, _020E6628 ; =0x000001FD + add r1, r1, r7 + cmp r1, r0 + addgt sp, sp, #0x22c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + ldrb r1, [sp, #0x8] + add r0, r7, #0x1 + cmp r1, r0 + bge _020E6408 + add r0, r7, #0x2 + sub r0, r0, r1 + subs r1, r0, #0x1 + beq _020E6408 + mov r0, #0x30 +_020E63FC: + strb r0, [r8, #-0x1]! + subs r1, r1, #0x1 + bne _020E63FC +_020E6408: + ldrb r1, [sp, #0x8] + add r0, sp, #0x9 + add r2, r0, r1 + subs r1, r1, #0x1 + beq _020E642C +_020E641C: + ldrsb r0, [r2, #-0x1]! + subs r1, r1, #0x1 + strb r0, [r8, #-0x1]! + bne _020E641C +_020E642C: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r0, #0x2e + strneb r0, [r8, #-0x1]! + ldrb r0, [sp, #0x9] + strb r0, [r8, #-0x1]! + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r8, #-0x1]! + bne _020E65EC + cmp r4, #0x1 + moveq r0, #0x2b + streqb r0, [r8, #-0x1]! + beq _020E65EC + cmp r4, #0x2 + moveq r0, #0x20 + streqb r0, [r8, #-0x1]! + b _020E65EC +_020E6478: + ldrsh r3, [sp, #0x6] + ldrb r2, [sp, #0x8] + sub r0, r2, r3 + subs r1, r0, #0x1 + movmi r1, #0x0 + cmp r1, r7 + ble _020E64B8 + sub r1, r1, r7 + add r0, sp, #0x4 + sub r1, r2, r1 + bl round_decimal_wide + ldrsh r3, [sp, #0x6] + ldrb r2, [sp, #0x8] + sub r0, r2, r3 + subs r1, r0, #0x1 + movmi r1, #0x0 +_020E64B8: + adds r0, r3, #0x1 + movmi r0, #0x0 + ldr r3, _020E6628 ; =0x000001FD + add r6, r0, r1 + cmp r6, r3 + addgt sp, sp, #0x22c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + add r3, sp, #0x9 + sub r6, r7, r1 + cmp r6, #0x0 + add r2, r3, r2 + mov r10, #0x0 + ble _020E650C + mov r3, #0x30 +_020E64FC: + add r10, r10, #0x1 + cmp r10, r6 + strb r3, [r8, #-0x1]! + blt _020E64FC +_020E650C: + mov r6, #0x0 + b _020E6520 +_020E6514: + ldrsb r3, [r2, #-0x1]! + add r6, r6, #0x1 + strb r3, [r8, #-0x1]! +_020E6520: + cmp r6, r1 + ldrltb r3, [sp, #0x8] + cmplt r6, r3 + blt _020E6514 + cmp r6, r1 + bge _020E654C + mov r3, #0x30 +_020E653C: + add r6, r6, #0x1 + cmp r6, r1 + strb r3, [r8, #-0x1]! + blt _020E653C +_020E654C: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r1, #0x2e + strneb r1, [r8, #-0x1]! + cmp r0, #0x0 + beq _020E65B4 + ldrb r1, [sp, #0x8] + mov r5, #0x0 + sub r1, r0, r1 + cmp r1, #0x0 + ble _020E6594 + mov r3, #0x30 +_020E657C: + strb r3, [r8, #-0x1]! + ldrb r1, [sp, #0x8] + add r5, r5, #0x1 + sub r1, r0, r1 + cmp r5, r1 + blt _020E657C +_020E6594: + cmp r5, r0 + bge _020E65BC +_020E659C: + ldrsb r1, [r2, #-0x1]! + add r5, r5, #0x1 + cmp r5, r0 + strb r1, [r8, #-0x1]! + blt _020E659C + b _020E65BC +_020E65B4: + mov r0, #0x30 + strb r0, [r8, #-0x1]! +_020E65BC: + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r8, #-0x1]! + bne _020E65EC + cmp r4, #0x1 + moveq r0, #0x2b + streqb r0, [r8, #-0x1]! + beq _020E65EC + cmp r4, #0x2 + moveq r0, #0x20 + streqb r0, [r8, #-0x1]! +_020E65EC: + mov r0, r8 + bl strlen + sub r1, r9, r0, lsl #0x1 + mov r0, r8 + sub r4, r1, #0x2 + bl strlen + mov r2, r0 + mov r0, r4 + mov r1, r8 + bl mbstowcs + mov r0, r4 + add sp, sp, #0x22c + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E6628: .word 0x000001FD +_020E662C: .word 0x02104544 +_020E6630: .word 0x02106DF0 +_020E6634: .word 0x02106DFC +_020E6638: .word 0x02106E08 +_020E663C: .word 0x02106E10 +_020E6640: .word 0x02106E18 +_020E6644: .word 0x02106E24 +_020E6648: .word 0x02106E30 +_020E664C: .word 0x02106E38 +_020E6650: .word 0x66666667 +__wpformatter: + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x430 + mov r3, #0x20 + mov r11, r2 + strh r3, [sp, #0x1c] + ldrh r2, [r11, #0x0] + mov r9, r0 + mov r8, r1 + cmp r2, #0x0 + mov r4, #0x0 + beq _020E6F24 +_020E6684: + mov r0, r11 + mov r1, #0x25 + bl wcschr + str r0, [sp, #0xc] + cmp r0, #0x0 + bne _020E66D8 + mov r0, r11 + bl wcslen + movs r2, r0 + add r4, r4, r2 + beq _020E6F24 + mov r0, r8 + mov r1, r11 + blx r9 + cmp r0, #0x0 + bne _020E6F24 + add sp, sp, #0x430 + mvn r0, #0x0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E66D8: + sub r0, r0, r11 + add r0, r0, r0, lsr #0x1f + movs r2, r0, asr #0x1 + add r4, r4, r2 + beq _020E6710 + mov r0, r8 + mov r1, r11 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E6710: + add r1, sp, #0x400 + ldr r0, [sp, #0xc] + add r1, r1, #0x64 + add r2, sp, #0x20 + bl parse_format_wprintf + ldrh r1, [sp, #0x26] + mov r11, r0 + cmp r1, #0x61 + bgt _020E6780 + bge _020E6AEC + cmp r1, #0x47 + bgt _020E6774 + subs r0, r1, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020E6768 +_020E674C: + .byte 0xE6, 0x00, 0x00, 0xEA + .byte 0x8E, 0x01, 0x00, 0xEA, 0x8D, 0x01, 0x00, 0xEA, 0x8C, 0x01, 0x00, 0xEA, 0xC6, 0x00, 0x00, 0xEA + .byte 0xC5, 0x00, 0x00, 0xEA, 0xC4, 0x00, 0x00, 0xEA +_020E6768: + cmp r1, #0x25 + beq _020E6D7C + b _020E6D90 +_020E6774: + cmp r1, #0x58 + beq _020E6940 + b _020E6D90 +_020E6780: + cmp r1, #0x75 + bgt _020E67E8 + subs r0, r1, #0x64 + addpl pc, pc, r0, lsl #0x2 + b _020E67DC +_020E6794: + .byte 0x1A, 0x00, 0x00, 0xEA, 0xB7, 0x00, 0x00, 0xEA, 0xB6, 0x00, 0x00, 0xEA + .byte 0xB5, 0x00, 0x00, 0xEA, 0x79, 0x01, 0x00, 0xEA, 0x15, 0x00, 0x00, 0xEA, 0x77, 0x01, 0x00, 0xEA + .byte 0x76, 0x01, 0x00, 0xEA, 0x75, 0x01, 0x00, 0xEA, 0x74, 0x01, 0x00, 0xEA, 0x35, 0x01, 0x00, 0xEA + .byte 0x5E, 0x00, 0x00, 0xEA, 0x71, 0x01, 0x00, 0xEA, 0x70, 0x01, 0x00, 0xEA, 0x6F, 0x01, 0x00, 0xEA + .byte 0xE1, 0x00, 0x00, 0xEA, 0x6D, 0x01, 0x00, 0xEA, 0x58, 0x00, 0x00, 0xEA +_020E67DC: + cmp r1, #0x63 + beq _020E6D24 + b _020E6D90 +_020E67E8: + cmp r1, #0x78 + bgt _020E67F8 + beq _020E6940 + b _020E6D90 +_020E67F8: + ldr r0, _020E6F38 ; =0x0000FFFF + cmp r1, r0 + b _020E6D90 +_020E6804: + .byte 0x24, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A + .byte 0x64, 0x14, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5 + .byte 0x25, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5 + .byte 0x08, 0x20, 0x81, 0xE2, 0x64, 0x24, 0x8D, 0xE5, 0x08, 0x10, 0x12, 0xE5, 0x10, 0x10, 0x8D, 0xE5 + .byte 0x04, 0x10, 0x12, 0xE5, 0x14, 0x10, 0x8D, 0xE5, 0x1B, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x50, 0xE3 + .byte 0x07, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5, 0x08, 0x20, 0x81, 0xE2, 0x64, 0x24, 0x8D, 0xE5 + .byte 0x08, 0x10, 0x12, 0xE5, 0x10, 0x10, 0x8D, 0xE5, 0x04, 0x10, 0x12, 0xE5, 0x14, 0x10, 0x8D, 0xE5 + .byte 0x11, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5 + .byte 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5, 0x0A, 0x00, 0x00, 0xEA + .byte 0x08, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2 + .byte 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x64, 0x14, 0x9D, 0xE5 + .byte 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5, 0x02, 0x00, 0x50, 0xE3 + .byte 0x0A, 0x18, 0xA0, 0x01, 0x41, 0xA8, 0xA0, 0x01, 0x04, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13 + .byte 0x20, 0x00, 0x8D, 0xE2, 0x0A, 0x00, 0x00, 0x1A, 0x04, 0x50, 0x4D, 0xE2, 0x0F, 0x00, 0x90, 0xE8 + .byte 0x0F, 0x00, 0x85, 0xE8, 0x00, 0x30, 0x95, 0xE5, 0x10, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x9D, 0xE5 + .byte 0x43, 0x2E, 0x8D, 0xE2, 0xDB, 0xFB, 0xFF, 0xEB, 0x00, 0x60, 0xB0, 0xE1, 0x23, 0x01, 0x00, 0x0A + .byte 0x08, 0x00, 0x00, 0xEA, 0x08, 0x50, 0x4D, 0xE2, 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x85, 0xE8 + .byte 0x43, 0x1E, 0x8D, 0xE2, 0x0A, 0x00, 0xA0, 0xE1, 0x0C, 0x00, 0x95, 0xE8, 0x3D, 0xFB, 0xFF, 0xEB + .byte 0x00, 0x60, 0xB0, 0xE1, 0x19, 0x01, 0x00, 0x0A, 0x01, 0x0B, 0x8D, 0xE2, 0x2E, 0x00, 0x80, 0xE2 + .byte 0x06, 0x00, 0x40, 0xE0, 0xA0, 0x0F, 0x80, 0xE0, 0xC0, 0x70, 0xA0, 0xE1, 0x26, 0x01, 0x00, 0xEA +_020E6940: + ldrb r0, [sp, #0x24] + cmp r0, #0x3 + bne _020E6960 + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E69F8 +_020E6960: + cmp r0, #0x4 + bne _020E6988 + ldr r1, [sp, #0x464] + add r2, r1, #0x8 + str r2, [sp, #0x464] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E69F8 +_020E6988: + cmp r0, #0x6 + bne _020E69B0 + ldr r1, [sp, #0x464] + add r2, r1, #0x8 + str r2, [sp, #0x464] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E69F8 +_020E69B0: + cmp r0, #0x7 + bne _020E69CC + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E69F8 +_020E69CC: + cmp r0, #0x8 + bne _020E69E8 + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E69F8 +_020E69E8: + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] +_020E69F8: + cmp r0, #0x2 + moveq r1, r10, lsl #0x10 + moveq r10, r1, lsr #0x10 + cmp r0, #0x4 + cmpne r0, #0x6 + add r0, sp, #0x20 + bne _020E6A40 + sub r5, sp, #0x4 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + ldr r3, [r5, #0x0] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r2, sp, #0x430 + bl longlong2str_wide + movs r6, r0 + beq _020E6D90 + b _020E6A64 +_020E6A40: + sub r5, sp, #0x8 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + add r1, sp, #0x430 + mov r0, r10 + ldmia r5, {r2-r3} + bl long2str_wide + movs r6, r0 + beq _020E6D90 +_020E6A64: + add r0, sp, #0x400 + add r0, r0, #0x2e + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC +_020E6A7C: + .byte 0x24, 0x00, 0xDD, 0xE5 + .byte 0x09, 0x00, 0x50, 0xE3, 0x64, 0x04, 0x9D, 0x15, 0x08, 0x00, 0x80, 0x12, 0x64, 0x04, 0x8D, 0x15 + .byte 0x02, 0x00, 0x00, 0x1A, 0x64, 0x04, 0x9D, 0xE5, 0x08, 0x00, 0x80, 0xE2, 0x64, 0x04, 0x8D, 0xE5 + .byte 0x08, 0x70, 0x10, 0xE5, 0x04, 0x60, 0x10, 0xE5, 0x20, 0x00, 0x8D, 0xE2, 0x04, 0x50, 0x4D, 0xE2 + .byte 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x85, 0xE8, 0x00, 0x30, 0x95, 0xE5, 0x07, 0x00, 0xA0, 0xE1 + .byte 0x06, 0x10, 0xA0, 0xE1, 0x43, 0x2E, 0x8D, 0xE2, 0x4E, 0xFD, 0xFF, 0xEB, 0x00, 0x60, 0xB0, 0xE1 + .byte 0xAE, 0x00, 0x00, 0x0A, 0x01, 0x0B, 0x8D, 0xE2, 0x2E, 0x00, 0x80, 0xE2, 0x06, 0x00, 0x40, 0xE0 + .byte 0xA0, 0x0F, 0x80, 0xE0, 0xC0, 0x70, 0xA0, 0xE1, 0xBB, 0x00, 0x00, 0xEA +_020E6AEC: + ldrb r0, [sp, #0x24] + cmp r0, #0x9 + ldrne r0, [sp, #0x464] + addne r0, r0, #0x8 + strne r0, [sp, #0x464] + bne _020E6B10 + ldr r0, [sp, #0x464] + add r0, r0, #0x8 + str r0, [sp, #0x464] +_020E6B10: + ldr r7, [r0, #-0x8] + ldr r6, [r0, #-0x4] + add r0, sp, #0x20 + sub r5, sp, #0x4 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + ldr r3, [r5, #0x0] + mov r0, r7 + mov r1, r6 + add r2, sp, #0x430 + bl double2hex_wide + movs r6, r0 + beq _020E6D90 + add r0, sp, #0x400 + add r0, r0, #0x2e + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC +_020E6B5C: + .byte 0x24, 0x00, 0xDD, 0xE5 + .byte 0x05, 0x00, 0x50, 0xE3, 0x23, 0x00, 0x00, 0x1A, 0x64, 0x04, 0x9D, 0xE5, 0x04, 0x00, 0x80, 0xE2 + .byte 0x64, 0x04, 0x8D, 0xE5, 0x04, 0x60, 0x10, 0xE5, 0x23, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x56, 0xE3 + .byte 0xB4, 0x63, 0x9F, 0x05, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0xB2, 0x10, 0xD6, 0xE0 + .byte 0x22, 0x00, 0xDD, 0xE5, 0xFF, 0x70, 0x01, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x8E, 0x00, 0x00, 0x0A + .byte 0x2C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x57, 0xE1, 0x00, 0x70, 0xA0, 0xC1, 0x8A, 0x00, 0x00, 0xEA + .byte 0x22, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x2C, 0x70, 0x9D, 0xE5 + .byte 0x06, 0x00, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x29, 0xF9, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x80, 0x00, 0x00, 0x0A, 0x06, 0x00, 0x40, 0xE0, 0xA0, 0x0F, 0x80, 0xE0 + .byte 0xC0, 0x70, 0xA0, 0xE1, 0x7C, 0x00, 0x00, 0xEA, 0x06, 0x00, 0xA0, 0xE1, 0x0A, 0x01, 0x00, 0xEB + .byte 0x00, 0x70, 0xA0, 0xE1, 0x78, 0x00, 0x00, 0xEA, 0x64, 0x04, 0x9D, 0xE5, 0x04, 0x00, 0x80, 0xE2 + .byte 0x64, 0x04, 0x8D, 0xE5, 0x04, 0x50, 0x10, 0xE5, 0x23, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x55, 0xE3 + .byte 0x28, 0x53, 0x9F, 0x05, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0xB0, 0x10, 0xD6, 0xE1 + .byte 0x22, 0x00, 0xDD, 0xE5, 0xFF, 0x60, 0x01, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x11, 0x00, 0x00, 0x0A + .byte 0x2C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x56, 0xE1, 0x00, 0x60, 0xA0, 0xC1, 0x0D, 0x00, 0x00, 0xEA + .byte 0x22, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0x2C, 0x60, 0x9D, 0xE5 + .byte 0x05, 0x00, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x15, 0xE2, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x60, 0x40, 0x10, 0x02, 0x00, 0x00, 0xEA, 0x05, 0x00, 0xA0, 0xE1 + .byte 0x8D, 0xF0, 0xFF, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x30, 0x00, 0x8D, 0xE2, 0x05, 0x10, 0xA0, 0xE1 + .byte 0x06, 0x20, 0xA0, 0xE1, 0xAB, 0xE1, 0xFF, 0xEB, 0x00, 0x70, 0xB0, 0xE1, 0x3F, 0x00, 0x00, 0x4A + .byte 0x30, 0x60, 0x8D, 0xE2, 0x50, 0x00, 0x00, 0xEA, 0x64, 0x14, 0x9D, 0xE5, 0x24, 0x00, 0xDD, 0xE5 + .byte 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0x60, 0x11, 0xE5, 0x08, 0x00, 0x50, 0xE3 + .byte 0x00, 0xF1, 0x8F, 0x90, 0x97, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0x95, 0x00, 0x00, 0xEA + .byte 0x07, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x11, 0x00, 0x00, 0xEA, 0x91, 0x00, 0x00, 0xEA + .byte 0x07, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5 + .byte 0x8C, 0x00, 0x00, 0xEA, 0xB0, 0x40, 0xC6, 0xE1, 0x8A, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5 + .byte 0x88, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5, 0xC4, 0x0F, 0xA0, 0xE1, 0x04, 0x00, 0x86, 0xE5 + .byte 0x84, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5, 0x82, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5 + .byte 0x80, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5, 0xC4, 0x0F, 0xA0, 0xE1, 0x04, 0x00, 0x86, 0xE5 + .byte 0x7C, 0x00, 0x00, 0xEA +_020E6D24: + ldrb r0, [sp, #0x24] + add r6, sp, #0x30 + cmp r0, #0x5 + bne _020E6D50 + ldr r0, [sp, #0x464] + mov r7, #0x1 + add r0, r0, #0x4 + str r0, [sp, #0x464] + ldr r0, [r0, #-0x4] + strh r0, [r6, #0x0] + b _020E6DDC +_020E6D50: + ldr r0, [sp, #0x464] + add r1, sp, #0x18 + add r0, r0, #0x4 + str r0, [sp, #0x464] + ldr r3, [r0, #-0x4] + mov r0, r6 + mov r2, #0x1 + strb r3, [sp, #0x18] + bl mbtowc + mov r7, r0 + b _020E6DDC +_020E6D7C: + mov r0, #0x25 + strh r0, [sp, #0x30] + add r6, sp, #0x30 + mov r7, #0x1 + b _020E6DDC +_020E6D90: + ldr r0, [sp, #0xc] + bl wcslen + movs r5, r0 + beq _020E6DC8 + ldr r1, [sp, #0xc] + mov r0, r8 + mov r2, r5 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E6DC8: + add sp, sp, #0x430 + add r0, r4, r5 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E6DDC: + ldrb r0, [sp, #0x20] + mov r5, r7 + cmp r0, #0x0 + beq _020E6E8C + cmp r0, #0x2 + moveq r1, #0x30 + movne r1, #0x20 + strh r1, [sp, #0x1c] + ldrh r0, [r6, #0x0] + cmp r0, #0x2b + cmpne r0, #0x2d + cmpne r0, #0x20 + bne _020E6E48 + cmp r1, #0x30 + bne _020E6E48 + mov r0, r8 + mov r1, r6 + mov r2, #0x1 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + add r6, r6, #0x2 + sub r7, r7, #0x1 +_020E6E48: + ldr r0, [sp, #0x28] + cmp r5, r0 + bge _020E6E8C +_020E6E54: + mov r0, r8 + add r1, sp, #0x1c + mov r2, #0x1 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x28] + add r5, r5, #0x1 + cmp r5, r0 + blt _020E6E54 +_020E6E8C: + cmp r7, #0x0 + beq _020E6EBC + mov r0, r8 + mov r1, r6 + mov r2, r7 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E6EBC: + ldrb r0, [sp, #0x20] + cmp r0, #0x0 + bne _020E6F14 + ldr r0, [sp, #0x28] + cmp r5, r0 + bge _020E6F14 + mov r7, #0x20 +_020E6ED8: + mov r0, r8 + add r1, sp, #0x1a + mov r2, #0x1 + strh r7, [sp, #0x1a] + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x28] + add r5, r5, #0x1 + cmp r5, r0 + blt _020E6ED8 +_020E6F14: + add r4, r4, r5 + ldrh r0, [r11, #0x0] + cmp r0, #0x0 + bne _020E6684 +_020E6F24: + mov r0, r4 + add sp, sp, #0x430 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E6F38: .word 0x0000FFFF +_020E6F3C: + .byte 0x40, 0x6E, 0x10, 0x02 + .byte 0x44, 0x6E, 0x10, 0x02 + + arm_func_start __wStringWrite +__wStringWrite: ; 0x020E6F44 + stmdb sp!, {r3-r5,lr} + mov r4, r0 + ldr r3, [r4, #0x8] + mov r5, r2 + ldr r2, [r4, #0x4] + add r0, r3, r5 + cmp r0, r2 + ldr r0, [r4, #0x0] + subhi r5, r2, r3 + mov r2, r5 + add r0, r0, r3, lsl #0x1 + bl wmemcpy + ldr r1, [r4, #0x8] + add r1, r1, r5 + str r1, [r4, #0x8] + ldmia sp!, {r3-r5,pc} + + arm_func_start swprintf +swprintf: ; 0x020E6F84 + stmdb sp!, {r0-r3} + stmdb sp!, {r3,lr} + add r3, sp, #0x10 + bic r3, r3, #0x3 + ldr r2, [sp, #0x10] + add r3, r3, #0x4 + bl vswprintf + ldmia sp!, {r3,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start vswprintf +vswprintf: ; 0x020E6FAC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + mov r4, r1 + mov r12, #0x0 + ldr r0, _020E7018 ; =__wStringWrite + add r1, sp, #0x0 + str r5, [sp, #0x0] + str r4, [sp, #0x4] + str r12, [sp, #0x8] + bl __wpformatter +_020E6FD8: + .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0xB2 + .byte 0x30, 0x80, 0xBD, 0xB8, 0x04, 0x00, 0x50, 0xE1, 0x04, 0x00, 0x00, 0x2A, 0x80, 0x10, 0xA0, 0xE1 + .byte 0x00, 0x20, 0xA0, 0xE3, 0x0C, 0xD0, 0x8D, 0xE2, 0xB1, 0x20, 0x85, 0xE1, 0x30, 0x80, 0xBD, 0xE8 + .byte 0x00, 0x10, 0xA0, 0xE3, 0x84, 0x00, 0x85, 0xE0, 0xB2, 0x10, 0x40, 0xE1, 0x01, 0x00, 0x41, 0xE2 + .byte 0x0C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 +_020E7018: .word __wStringWrite + + arm_func_start wcslen +wcslen: ; 0x020E701C + mvn r2, #0x0 +_020E7020: + ldrh r1, [r0], #0x2 + add r2, r2, #0x1 + cmp r1, #0x0 + bne _020E7020 + mov r0, r2 + bx lr + + arm_func_start wcscpy +wcscpy: ; 0x020E7038 + mov r3, r0 +_020E703C: + ldrh r2, [r1], #0x2 + mov r12, r3 + strh r2, [r3], #0x2 + ldrh r2, [r12, #0x0] + cmp r2, #0x0 + bne _020E703C + bx lr + + arm_func_start wcschr +wcschr: ; 0x020E7058 + ldrh r2, [r0], #0x2 + cmp r2, #0x0 + beq _020E707C +_020E7064: + cmp r2, r1 + subeq r0, r0, #0x2 + bxeq lr + ldrh r2, [r0], #0x2 + cmp r2, #0x0 + bne _020E7064 +_020E707C: + cmp r1, #0x0 + movne r0, #0x0 + subeq r0, r0, #0x2 + bx lr + + arm_func_start __ieee754_pow +__ieee754_pow: ; 0x020E708C + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x80 + ldr r8, [sp, #0xb4] + ldr r6, [sp, #0xac] + ldr r0, [sp, #0xb0] + bic r9, r8, #0x80000000 + orrs r1, r9, r0 + ldr r7, [sp, #0xa8] + bic r4, r6, #0x80000000 + addeq sp, sp, #0x80 + moveq r0, #0x0 + ldreq r1, _020E7638 ; =0x3FF00000 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r1, _020E763C ; =0x7FF00000 + cmp r4, r1 + bgt _020E70FC + bne _020E70E4 + cmp r7, #0x0 + bne _020E70FC +_020E70E4: + ldr r1, _020E763C ; =0x7FF00000 + cmp r9, r1 + bgt _020E70FC + bne _020E7120 + cmp r0, #0x0 + beq _020E7120 +_020E70FC: + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + ldr r2, [sp, #0xb0] + ldr r3, [sp, #0xb4] + bl _dadd + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7120: + cmp r6, #0x0 + mov r5, #0x0 + bge _020E7188 + ldr r1, _020E7640 ; =0x43400000 + cmp r9, r1 + movge r5, #0x2 + bge _020E7188 + sub r1, r1, #0x3500000 + cmp r9, r1 + blt _020E7188 + ldr r1, _020E7644 ; =0xFFFFFC01 + add r1, r1, r9, asr #0x14 + cmp r1, #0x14 + ble _020E7170 + rsb r2, r1, #0x34 + mov r1, r0, lsr r2 + cmp r0, r1, lsl r2 + andeq r1, r1, #0x1 + rsbeq r5, r1, #0x2 + b _020E7188 +_020E7170: + cmp r0, #0x0 + rsbeq r2, r1, #0x14 + moveq r1, r9, asr r2 + cmpeq r9, r1, lsl r2 + andeq r1, r1, #0x1 + rsbeq r5, r1, #0x2 +_020E7188: + cmp r0, #0x0 + bne _020E72E4 + ldr r1, _020E763C ; =0x7FF00000 + cmp r9, r1 + bne _020E723C + add r0, r4, #0x100000 + add r0, r0, #0xc0000000 + orrs r0, r0, r7 + bne _020E71D0 + ldr r0, [sp, #0xb0] + ldr r1, [sp, #0xb4] + mov r2, r0 + mov r3, r1 + bl _dsub + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E71D0: + sub r0, r1, #0x40000000 + cmp r4, r0 + blt _020E7200 + cmp r8, #0x0 + ldrge r0, [sp, #0xb0] + ldrge r1, [sp, #0xb4] + movlt r0, #0x0 + add sp, sp, #0x80 + movlt r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7200: + cmp r8, #0x0 + mov r0, #0x0 + addge sp, sp, #0x80 + movge r1, r0 + ldmgeia sp!, {r3-r11,lr} + addge sp, sp, #0x10 + bxge lr + ldr r2, [sp, #0xb0] + ldr r3, [sp, #0xb4] + mov r1, r0 + bl _dsub + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E723C: + sub r0, r1, #0x40000000 + cmp r9, r0 + bne _020E7288 + cmp r8, #0x0 + ldrge r0, [sp, #0xa8] + ldrge r1, [sp, #0xac] + addge sp, sp, #0x80 + ldmgeia sp!, {r3-r11,lr} + addge sp, sp, #0x10 + bxge lr + ldr r2, [sp, #0xa8] + ldr r3, [sp, #0xac] + sub r1, r1, #0x40000000 + mov r0, #0x0 + bl _ddiv + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7288: + cmp r8, #0x40000000 + bne _020E72B4 + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + mov r2, r0 + mov r3, r1 + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E72B4: + ldr r0, _020E7648 ; =0x3FE00000 + cmp r8, r0 + bne _020E72E4 + cmp r6, #0x0 + blt _020E72E4 + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + bl _dsqrt + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E72E4: + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + bl fabs + str r0, [sp, #0x70] + str r1, [sp, #0x74] + cmp r7, #0x0 + bne _020E73E8 + ldr r0, _020E763C ; =0x7FF00000 + cmp r4, r0 + cmpne r4, #0x0 + subne r0, r0, #0x40000000 + cmpne r4, r0 + bne _020E73E8 + ldr r2, [sp, #0x70] + ldr r3, [sp, #0x74] + str r2, [sp, #0x78] + str r3, [sp, #0x7c] + cmp r8, #0x0 + bge _020E7344 + ldr r1, _020E7638 ; =0x3FF00000 + mov r0, #0x0 + bl _ddiv + str r0, [sp, #0x78] + str r1, [sp, #0x7c] +_020E7344: + cmp r6, #0x0 + bge _020E73D0 + add r0, r4, #0x100000 + add r0, r0, #0xc0000000 + orrs r0, r0, r5 + bne _020E73AC + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + mov r2, r0 + mov r3, r1 + bl _dsub + mov r4, r0 + mov r5, r1 + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + mov r2, r0 + mov r3, r1 + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r5 + bl _ddiv + str r0, [sp, #0x78] + str r1, [sp, #0x7c] + b _020E73D0 +_020E73AC: + cmp r5, #0x1 + bne _020E73D0 + mov r0, #0x0 + ldr r2, [sp, #0x78] + ldr r3, [sp, #0x7c] + mov r1, r0 + bl _dsub + str r0, [sp, #0x78] + str r1, [sp, #0x7c] +_020E73D0: + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E73E8: + mov r0, r6, asr #0x1f + add r7, r0, #0x1 + orrs r0, r7, r5 + bne _020E7420 + ldr r0, _020E764C ; =0x02106B78 + ldr r1, _020E7650 ; =0x021D74A8 + ldr r0, [r0, #0x0] + mov r2, #0x21 + str r2, [r1, #0x0] + bl _f2d + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7420: + ldr r3, _020E7654 ; =0x41E00000 + cmp r9, r3 + ble _020E7724 + add r0, r3, #0x2100000 + cmp r9, r0 + ble _020E7490 + ldr r1, _020E7658 ; =0x3FEFFFFF + cmp r4, r1 + bgt _020E7464 + cmp r8, #0x0 + mov r0, #0x0 + addlt r1, r1, #0x40000001 + add sp, sp, #0x80 + movge r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7464: + add r0, r1, #0x1 + cmp r4, r0 + blt _020E7490 + cmp r8, #0x0 + mov r0, #0x0 + addgt r1, r1, #0x40000001 + add sp, sp, #0x80 + movle r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7490: + ldr r2, _020E7658 ; =0x3FEFFFFF + cmp r4, r2 + bge _020E74BC + cmp r8, #0x0 + mov r0, #0x0 + addlt r1, r2, #0x40000001 + add sp, sp, #0x80 + movge r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E74BC: + add r0, r2, #0x1 + cmp r4, r0 + ble _020E74E8 + cmp r8, #0x0 + mov r0, #0x0 + addgt r1, r2, #0x40000001 + add sp, sp, #0x80 + movle r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E74E8: + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + add r3, r2, #0x1 + mov r2, #0x0 + bl _dsub + mov r2, r0 + mov r3, r1 + str r0, [sp, #0x50] + str r1, [sp, #0x54] + bl _dmul + mov r6, r1 + mov r4, r0 + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + ldr r1, _020E765C ; =0x3FD00000 + mov r0, #0x0 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7660 ; =0x55555555 + sub r1, r0, #0x15800000 + bl _dsub + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, #0x0 + ldr r1, _020E7648 ; =0x3FE00000 + bl _dsub + mov r2, r0 + mov r0, r4 + mov r3, r1 + mov r1, r6 + bl _dmul + mov r6, r0 + mov r8, r1 + mov r0, #0x60000000 + ldr r1, _020E7664 ; =0x3FF71547 + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + bl _dmul + mov r4, r0 + mov r9, r1 + ldr r0, _020E7668 ; =0xF85DDF44 + ldr r1, _020E766C ; =0x3E54AE0B + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + bl _dmul + mov r11, r0 + mov r10, r1 + ldr r0, _020E7670 ; =0x652B82FE + ldr r1, _020E7664 ; =0x3FF71547 + mov r2, r6 + mov r3, r8 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r11 + mov r1, r10 + bl _dsub + mov r6, r0 + mov r8, r1 + mov r0, r4 + mov r1, r9 + mov r2, r6 + mov r3, r8 + bl _dadd + mov r2, r4 + mov r3, r9 + str r1, [sp, #0x5c] + mov r0, #0x0 + str r0, [sp, #0x58] + bl _dsub + mov r2, r0 + mov r0, r6 + mov r3, r1 + mov r1, r8 + bl _dsub + mov r4, r0 + mov r8, r1 + b _020E7C80 + .balign 4 +_020E7638: .word 0x3FF00000 +_020E763C: .word 0x7FF00000 +_020E7640: .word 0x43400000 +_020E7644: .word 0xFFFFFC01 +_020E7648: .word 0x3FE00000 +_020E764C: .word 0x02106B78 +_020E7650: .word 0x021D74A8 +_020E7654: .word 0x41E00000 +_020E7658: .word 0x3FEFFFFF +_020E765C: .word 0x3FD00000 +_020E7660: .word 0x55555555 +_020E7664: .word 0x3FF71547 +_020E7668: .word 0xF85DDF44 +_020E766C: .word 0x3E54AE0B +_020E7670: .word 0x652B82FE +_020E7674: .word 0x0003988E +_020E7678: .word 0x000BB67A +_020E767C: .word 0x02104754 +_020E7680: .word 0x4A454EEF +_020E7684: .word 0x3FCA7E28 +_020E7688: .word 0x93C9DB65 +_020E768C: .word 0x3FCD864A +_020E7690: .word 0xA91D4101 +_020E7694: .word 0x3FD17460 +_020E7698: .word 0x518F264D +_020E769C: .word 0x3FD55555 +_020E76A0: .word 0xDB6FABFF +_020E76A4: .word 0x3FDB6DB6 +_020E76A8: .word 0x33333303 +_020E76AC: .word 0x3FE33333 +_020E76B0: .word 0x40080000 +_020E76B4: + .byte 0x09, 0xC7, 0xEE, 0x3F, 0xF5, 0x01, 0x5B, 0x14, 0xE0, 0x2F, 0x3E, 0xBE + .byte 0xFD, 0x03, 0x3A, 0xDC, 0x64, 0x47, 0x10, 0x02, 0x44, 0x47, 0x10, 0x02 +_020E76CC: .word 0x40900000 +_020E76D0: .word 0x8800759C +_020E76D4: .word 0x7E37E43C +_020E76D8: .word 0x3C971547 +_020E76DC: .word 0x3F6F3400 +_020E76E0: .word 0xC2F8F359 +_020E76E4: .word 0x01A56E1F +_020E76E8: .word 0x3FE62E43 +_020E76EC: .word 0xFEFA39EF +_020E76F0: .word 0x3FE62E42 +_020E76F4: .word 0x0CA86C39 +_020E76F8: .word 0xBE205C61 +_020E76FC: .word 0x72BEA4D0 +_020E7700: .word 0x3E663769 +_020E7704: .word 0xC5D26BF1 +_020E7708: .word 0xBEBBBD41 +_020E770C: .word 0xAF25DE2C +_020E7710: .word 0x3F11566A +_020E7714: .word 0x16BEBD93 +_020E7718: .word 0xBF66C16C +_020E771C: .word 0x5555553E +_020E7720: .word 0x3FC55555 +_020E7724: + cmp r4, #0x100000 + mov r6, #0x0 + bge _020E7754 + ldr r0, [sp, #0x70] + ldr r1, [sp, #0x74] + mov r2, r6 + add r3, r3, #0x1600000 + bl _dmul + mov r4, r1 + str r0, [sp, #0x70] + str r4, [sp, #0x74] + sub r6, r6, #0x35 +_020E7754: + ldr r0, _020E7644 ; =0xFFFFFC01 + ldr r1, _020E7674 ; =0x0003988E + and r2, r4, r0, lsr #0xc + add r0, r0, r4, asr #0x14 + orr r9, r2, #0xff00000 + cmp r2, r1 + add r6, r6, r0 + orr r9, r9, #0x30000000 + movle r8, #0x0 + ble _020E7794 + ldr r0, _020E7678 ; =0x000BB67A + cmp r2, r0 + movlt r8, #0x1 + addge r6, r6, #0x1 + subge r9, r9, #0x100000 + movge r8, #0x0 +_020E7794: + ldr r2, _020E767C ; =0x02104754 + ldr r0, [sp, #0x70] + add r1, r2, r8, lsl #0x3 + ldr r3, [r1, #0x4] + ldr r2, [r2, r8, lsl #0x3] + mov r1, r9 + str r9, [sp, #0x74] + bl _dsub + ldr r2, _020E767C ; =0x02104754 + mov r10, r0 + add r3, r2, r8, lsl #0x3 + mov r4, r1 + ldr r0, [sp, #0x70] + ldr r2, [r2, r8, lsl #0x3] + ldr r3, [r3, #0x4] + mov r1, r9 + bl _dadd + mov r3, r1 + mov r2, r0 + ldr r1, _020E7638 ; =0x3FF00000 + mov r0, #0x0 + bl _ddiv + str r1, [sp, #0x24] + mov r11, r0 + ldr r3, [sp, #0x24] + mov r0, r10 + mov r1, r4 + mov r2, r11 + bl _dmul + mov r2, r9, asr #0x1 + orr r2, r2, #0x20000000 + mov r9, r1 + add r2, r2, #0x80000 + add r1, r2, r8, lsl #0x12 + ldr r2, _020E767C ; =0x02104754 + str r0, [sp, #0x28] + add r3, r2, r8, lsl #0x3 + mov r0, #0x0 + ldr r2, [r2, r8, lsl #0x3] + ldr r3, [r3, #0x4] + str r9, [sp, #0x4c] + str r1, [sp, #0x44] + str r0, [sp, #0x48] + str r0, [sp, #0x40] + bl _dsub + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x70] + ldr r1, [sp, #0x74] + bl _dsub + str r0, [sp, #0x2c] + str r1, [sp, #0x1c] + ldr r0, [sp, #0x48] + ldr r2, [sp, #0x40] + ldr r3, [sp, #0x44] + mov r1, r9 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r10 + mov r1, r4 + bl _dsub + mov r10, r0 + mov r4, r1 + ldr r2, [sp, #0x2c] + ldr r3, [sp, #0x1c] + ldr r0, [sp, #0x48] + mov r1, r9 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r10 + mov r1, r4 + bl _dsub + mov r3, r1 + mov r2, r0 + ldr r1, [sp, #0x24] + mov r0, r11 + bl _dmul + str r0, [sp, #0x30] + ldr r0, [sp, #0x28] + str r1, [sp, #0x14] + mov r1, r9 + mov r2, r0 + mov r3, r9 + bl _dmul + mov r4, r0 + mov r10, r1 + mov r2, r4 + mov r3, r10 + bl _dmul + str r0, [sp, #0x34] + mov r11, r1 + ldr r0, _020E7680 ; =0x4A454EEF + ldr r1, _020E7684 ; =0x3FCA7E28 + mov r2, r4 + mov r3, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7688 ; =0x93C9DB65 + ldr r1, _020E768C ; =0x3FCD864A + bl _dadd + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7690 ; =0xA91D4101 + ldr r1, _020E7694 ; =0x3FD17460 + bl _dadd + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7698 ; =0x518F264D + ldr r1, _020E769C ; =0x3FD55555 + bl _dadd + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76A0 ; =0xDB6FABFF + ldr r1, _020E76A4 ; =0x3FDB6DB6 + bl _dadd + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76A8 ; =0x33333303 + ldr r1, _020E76AC ; =0x3FE33333 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x34] + mov r1, r11 + bl _dmul + mov r4, r0 + mov r10, r1 + ldr r0, [sp, #0x48] + ldr r2, [sp, #0x28] + mov r1, r9 + mov r3, r9 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x30] + ldr r1, [sp, #0x14] + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dadd + mov r4, r0 + ldr r0, [sp, #0x48] + mov r10, r1 + mov r1, r9 + mov r2, r0 + mov r3, r1 + bl _dmul + str r1, [sp, #0xc] + mov r11, r0 + ldr r1, _020E76B0 ; =0x40080000 + ldr r3, [sp, #0xc] + mov r0, #0x0 + mov r2, r11 + bl _dadd + mov r2, r4 + mov r3, r10 + bl _dadd +_020E7A6C: + .byte 0x00, 0x00, 0xA0, 0xE3 + .byte 0xC8, 0x33, 0x1F, 0xE5, 0x00, 0x20, 0xA0, 0xE1, 0x44, 0x10, 0x8D, 0xE5, 0x40, 0x00, 0x8D, 0xE5 + .byte 0xD1, 0x0A, 0x00, 0xEB, 0x0C, 0x30, 0x9D, 0xE5, 0x0B, 0x20, 0xA0, 0xE1, 0xCE, 0x0A, 0x00, 0xEB + .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 + .byte 0xC9, 0x0A, 0x00, 0xEB, 0x38, 0x00, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5, 0x48, 0x00, 0x9D, 0xE5 + .byte 0x40, 0x20, 0x9D, 0xE5, 0x44, 0x30, 0x9D, 0xE5, 0x09, 0x10, 0xA0, 0xE1, 0x7C, 0x09, 0x00, 0xEB + .byte 0x00, 0x40, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1, 0x30, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x9D, 0xE5 + .byte 0x40, 0x20, 0x9D, 0xE5, 0x44, 0x30, 0x9D, 0xE5, 0x75, 0x09, 0x00, 0xEB, 0x3C, 0x00, 0x8D, 0xE5 + .byte 0x01, 0xB0, 0xA0, 0xE1, 0x38, 0x00, 0x9D, 0xE5, 0x04, 0x10, 0x9D, 0xE5, 0x28, 0x20, 0x9D, 0xE5 + .byte 0x09, 0x30, 0xA0, 0xE1, 0x6E, 0x09, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 + .byte 0x3C, 0x00, 0x9D, 0xE5, 0x0B, 0x10, 0xA0, 0xE1, 0x0D, 0x08, 0x00, 0xEB, 0x00, 0x90, 0xA0, 0xE1 + .byte 0x01, 0xB0, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0x09, 0x20, 0xA0, 0xE1 + .byte 0x0B, 0x30, 0xA0, 0xE1, 0x06, 0x08, 0x00, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0x20, 0xA0, 0xE1 + .byte 0x0A, 0x30, 0xA0, 0xE1, 0x6C, 0x10, 0x8D, 0xE5, 0x68, 0x00, 0x8D, 0xE5, 0xA2, 0x0A, 0x00, 0xEB + .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x09, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1 + .byte 0x9D, 0x0A, 0x00, 0xEB, 0x01, 0xA0, 0xA0, 0xE1, 0x00, 0xB0, 0xA0, 0xE1, 0xB0, 0x14, 0x1F, 0xE5 + .byte 0x68, 0x20, 0x9D, 0xE5, 0x6C, 0x30, 0x9D, 0xE5, 0x0E, 0x02, 0xA0, 0xE3, 0x50, 0x09, 0x00, 0xEB + .byte 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x90, 0xA0, 0xE1, 0xC8, 0x04, 0x1F, 0xE5, 0xC8, 0x14, 0x1F, 0xE5 + .byte 0x68, 0x20, 0x9D, 0xE5, 0x6C, 0x30, 0x9D, 0xE5, 0x49, 0x09, 0x00, 0xEB, 0x0B, 0x20, 0xA0, 0xE1 + .byte 0x0A, 0x30, 0xA0, 0xE1, 0x00, 0xB0, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1, 0xE4, 0x04, 0x1F, 0xE5 + .byte 0xF4, 0x14, 0x1F, 0xE5, 0x42, 0x09, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 + .byte 0x0B, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0xE1, 0x07, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1 + .byte 0x01, 0x30, 0xA0, 0xE1, 0x08, 0x05, 0x1F, 0xE5, 0x88, 0x11, 0x80, 0xE0, 0x88, 0x01, 0x90, 0xE7 + .byte 0x04, 0x10, 0x91, 0xE5, 0xDA, 0x07, 0x00, 0xEB, 0x00, 0xB0, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1 + .byte 0x06, 0x00, 0xA0, 0xE1, 0x13, 0x09, 0x00, 0xEB, 0x50, 0x00, 0x8D, 0xE5, 0x54, 0x10, 0x8D, 0xE5 + .byte 0x04, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x0B, 0x20, 0xA0, 0xE1, 0x0A, 0x30, 0xA0, 0xE1 + .byte 0xCF, 0x07, 0x00, 0xEB, 0x44, 0x25, 0x1F, 0xE5, 0x88, 0x31, 0x82, 0xE0, 0x88, 0x21, 0x92, 0xE7 + .byte 0x04, 0x30, 0x93, 0xE5, 0xCA, 0x07, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 + .byte 0x50, 0x00, 0x9D, 0xE5, 0x54, 0x10, 0x9D, 0xE5, 0xC5, 0x07, 0x00, 0xEB, 0x5C, 0x10, 0x8D, 0xE5 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x58, 0x00, 0x8D, 0xE5, 0x50, 0x20, 0x9D, 0xE5, 0x54, 0x30, 0x9D, 0xE5 + .byte 0x61, 0x0A, 0x00, 0xEB, 0x84, 0x25, 0x1F, 0xE5, 0x88, 0x31, 0x82, 0xE0, 0x88, 0x21, 0x92, 0xE7 + .byte 0x04, 0x30, 0x93, 0xE5, 0x5C, 0x0A, 0x00, 0xEB, 0x04, 0x20, 0xA0, 0xE1, 0x09, 0x30, 0xA0, 0xE1 + .byte 0x59, 0x0A, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x0B, 0x00, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 + .byte 0x0A, 0x10, 0xA0, 0xE1, 0x54, 0x0A, 0x00, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x80, 0xA0, 0xE1 +_020E7C80: + sub r0, r5, #0x1 + ldr r1, [sp, #0xb4] + orrs r0, r7, r0 + ldr r5, _020E7638 ; =0x3FF00000 + mov r2, #0x0 + ldr r0, [sp, #0xb0] + mov r3, r1 + mov r6, #0x0 + subeq r5, r5, #0x80000000 + str r1, [sp, #0x64] + str r2, [sp, #0x60] + bl _dsub + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x58] + ldr r1, [sp, #0x5c] + bl _dmul + mov r7, r0 + mov r9, r1 + ldr r0, [sp, #0xb0] + ldr r1, [sp, #0xb4] + mov r2, r4 + mov r3, r8 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r7 + mov r1, r9 + bl _dadd + mov r7, r0 + mov r8, r1 + ldr r0, [sp, #0x60] + ldr r1, [sp, #0x64] + ldr r2, [sp, #0x58] + ldr r3, [sp, #0x5c] + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r7 + mov r1, r8 + str r2, [sp, #0x68] + str r3, [sp, #0x6c] + bl _dadd + mov r9, r1 + ldr r2, _020E76CC ; =0x40900000 + str r0, [sp, #0x78] + str r9, [sp, #0x7c] + cmp r9, r2 + blt _020E7E0C + add r1, r9, #0xf700000 + add r1, r1, #0xb0000000 + orrs r0, r1, r0 + beq _020E7D8C + ldr r0, _020E76D0 ; =0x8800759C + ldr r1, _020E76D4 ; =0x7E37E43C + mov r2, r6 + mov r3, r5 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76D0 ; =0x8800759C + ldr r1, _020E76D4 ; =0x7E37E43C + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7D8C: + ldr r0, _020E7670 ; =0x652B82FE + ldr r1, _020E76D8 ; =0x3C971547 + mov r2, r7 + mov r3, r8 + bl _dadd + mov r4, r0 + mov r10, r1 + ldr r0, [sp, #0x78] + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + mov r1, r9 + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dgr + bls _020E7EC0 + ldr r0, _020E76D0 ; =0x8800759C + ldr r1, _020E76D4 ; =0x7E37E43C + mov r2, r6 + mov r3, r5 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76D0 ; =0x8800759C + ldr r1, _020E76D4 ; =0x7E37E43C + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7E0C: + bic r3, r9, #0x80000000 + add r2, r2, #0xcc00 + cmp r3, r2 + blt _020E7EC0 + ldr r2, _020E76DC ; =0x3F6F3400 + add r2, r9, r2 + orrs r2, r2, r0 + beq _020E7E64 + ldr r0, _020E76E0 ; =0xC2F8F359 + ldr r1, _020E76E4 ; =0x01A56E1F + mov r2, r6 + mov r3, r5 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76E0 ; =0xC2F8F359 + ldr r1, _020E76E4 ; =0x01A56E1F + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7E64: + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r7 + mov r1, r8 + bl _dleq + bhi _020E7EC0 + ldr r0, _020E76E0 ; =0xC2F8F359 + ldr r1, _020E76E4 ; =0x01A56E1F + mov r2, r6 + mov r3, r5 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76E0 ; =0xC2F8F359 + ldr r1, _020E76E4 ; =0x01A56E1F + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7EC0: + ldr r0, _020E7644 ; =0xFFFFFC01 + bic r3, r9, #0x80000000 + ldr r1, _020E7648 ; =0x3FE00000 + add r2, r0, r3, asr #0x14 + cmp r3, r1 + mov r4, #0x0 + ble _020E7F3C + mov r1, #0x100000 + add r2, r2, #0x1 + add r2, r9, r1, asr r2 + bic r3, r2, #0x80000000 + add r0, r0, r3, asr #0x14 + sub r3, r1, #0x1 + mvn r3, r3, asr r0 + sub r1, r1, #0x1 + and r1, r2, r1 + and r2, r2, r3 + str r2, [sp, #0x54] + str r4, [sp, #0x50] + orr r1, r1, #0x100000 + rsb r0, r0, #0x14 + mov r4, r1, asr r0 + cmp r9, #0x0 + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x6c] + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + rsblt r4, r4, #0x0 + bl _dsub + str r0, [sp, #0x68] + str r1, [sp, #0x6c] +_020E7F3C: + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + mov r0, r7 + mov r1, r8 + bl _dadd + mov r3, r1 + mov r0, #0x0 + ldr r1, _020E76E8 ; =0x3FE62E43 + mov r2, r0 + str r3, [sp, #0x54] + str r0, [sp, #0x50] + bl _dmul + mov r9, r0 + mov r10, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + bl _dsub + mov r2, r0 + mov r0, r7 + mov r3, r1 + mov r1, r8 + bl _dsub + mov r2, r0 + mov r3, r1 + ldr r0, _020E76EC ; =0xFEFA39EF + ldr r1, _020E76F0 ; =0x3FE62E42 + bl _dmul + mov r7, r0 + mov r8, r1 + ldr r0, _020E76F4 ; =0x0CA86C39 + ldr r1, _020E76F8 ; =0xBE205C61 + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r0, r7 + mov r3, r1 + mov r1, r8 + bl _dadd + mov r7, r0 + mov r8, r1 + mov r0, r9 + mov r1, r10 + mov r2, r7 + mov r3, r8 + bl _dadd + mov r2, r9 + mov r3, r10 + str r0, [sp, #0x78] + str r1, [sp, #0x7c] + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r7 + mov r1, r8 + bl _dsub + mov r8, r0 + mov r9, r1 + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + mov r2, r0 + mov r3, r1 + bl _dmul + mov r2, r0 + str r2, [sp, #0x50] + mov r3, r1 + str r3, [sp, #0x54] + ldr r0, _020E76FC ; =0x72BEA4D0 + ldr r1, _020E7700 ; =0x3E663769 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7704 ; =0xC5D26BF1 + ldr r1, _020E7708 ; =0xBEBBBD41 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E770C ; =0xAF25DE2C + ldr r1, _020E7710 ; =0x3F11566A + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7714 ; =0x16BEBD93 + ldr r1, _020E7718 ; =0xBF66C16C + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E771C ; =0x5555553E + ldr r1, _020E7720 ; =0x3FC55555 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + bl _dsub + mov r2, r0 + str r2, [sp, #0x58] + mov r3, r1 + str r3, [sp, #0x5c] + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + bl _dmul + mov r7, r0 + mov r10, r1 + ldr r0, [sp, #0x58] + ldr r1, [sp, #0x5c] + mov r2, #0x0 + mov r3, #0x40000000 + bl _dsub + mov r2, r0 + mov r0, r7 + mov r3, r1 + mov r1, r10 + bl _ddiv + mov r7, r0 + mov r10, r1 + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + mov r2, r8 + mov r3, r9 + bl _dmul + mov r2, r0 + mov r0, r8 + mov r3, r1 + mov r1, r9 + bl _dadd + mov r2, r0 + mov r0, r7 + mov r3, r1 + mov r1, r10 + bl _dsub + ldr r2, [sp, #0x78] + ldr r3, [sp, #0x7c] + bl _dsub + mov r3, r1 + mov r2, r0 + ldr r1, _020E7638 ; =0x3FF00000 + mov r0, #0x0 + bl _dsub + add r3, r1, r4, lsl #0x14 + mov r2, r3, asr #0x14 + str r0, [sp, #0x78] + cmp r2, #0x0 + str r1, [sp, #0x7c] + addgt r0, sp, #0x78 + strgt r3, [r0, #0x4] + bgt _020E81F0 + mov r2, r4 + bl scalbn + str r0, [sp, #0x78] + str r1, [sp, #0x7c] +_020E81F0: + ldr r2, [sp, #0x78] + ldr r3, [sp, #0x7c] + mov r0, r6 + mov r1, r5 + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start copysign +copysign: ; 0x020E8214 + stmdb sp!, {r0-r3} + ldr r1, [sp, #0x4] + ldr r0, [sp, #0xc] + bic r1, r1, #0x80000000 + and r0, r0, #0x80000000 + orr r1, r1, r0 + ldr r0, [sp, #0x0] + str r1, [sp, #0x4] + add sp, sp, #0x10 + bx lr + + arm_func_start fabs +fabs: ; 0x020E823C + stmdb sp!, {r0-r3} + add r2, sp, #0x0 + ldr r1, [r2, #0x4] + ldr r0, [sp, #0x0] + bic r1, r1, #0x80000000 + str r1, [r2, #0x4] + add sp, sp, #0x10 + bx lr + + arm_func_start frexp +frexp: ; 0x020E825C + stmdb sp!, {r0-r3} + stmdb sp!, {r4,lr} + ldr r1, [sp, #0xc] + ldr r0, _020E8308 ; =0x7FF00000 + mov r4, r2 + bic r3, r1, #0x80000000 + mov r2, #0x0 + str r2, [r4, #0x0] + cmp r3, r0 + ldr r0, [sp, #0x8] + bge _020E8290 + orrs r0, r3, r0 + bne _020E82A4 +_020E8290: + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E82A4: + cmp r3, #0x100000 + bge _020E82D0 + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + ldr r3, _020E830C ; =0x43500000 + bl _dmul + mvn r2, #0x35 + str r0, [sp, #0x8] + str r1, [sp, #0xc] + str r2, [r4, #0x0] + bic r3, r1, #0x80000000 +_020E82D0: + ldr r2, _020E8310 ; =0x800FFFFF + ldr r0, _020E8314 ; =0xFFFFFC02 + and r1, r1, r2 + orr r1, r1, #0xfe00000 + orr r1, r1, #0x30000000 + ldr r2, [r4, #0x0] + add r0, r0, r3, asr #0x14 + add r2, r2, r0 + ldr r0, [sp, #0x8] + str r2, [r4, #0x0] + str r1, [sp, #0xc] + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E8308: .word 0x7FF00000 +_020E830C: .word 0x43500000 +_020E8310: .word 0x800FFFFF +_020E8314: .word 0xFFFFFC02 + + arm_func_start ldexp +ldexp: ; 0x020E8318 + stmdb sp!, {r0-r3} + stmdb sp!, {r4,lr} + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + mov r4, r2 + bl __fpclassifyf + cmp r0, #0x2 + ble _020E8350 + mov r0, #0x0 + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + mov r1, r0 + bl _deq + bne _020E8364 +_020E8350: + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E8364: + ldr r3, [sp, #0xc] + ldr r0, _020E8538 ; =0x7FF00000 + ldr r1, [sp, #0x8] + and r0, r3, r0 + movs r12, r0, asr #0x14 + bne _020E83F0 + bic r0, r3, #0x80000000 + orrs r0, r1, r0 + ldreq r0, [sp, #0x8] + ldreq r1, [sp, #0xc] + ldmeqia sp!, {r4,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + ldr r3, _020E853C ; =0x43500000 + mov r2, #0x0 + bl _dmul + mov r3, r1 + ldr r1, _020E8538 ; =0x7FF00000 + ldr ip, _020E8540 ; =0xFFFF3CB0 + and r1, r3, r1 + mov r2, r0 + mov r0, r1, asr #0x14 + str r2, [sp, #0x8] + str r3, [sp, #0xc] + cmp r4, r12 + sub r12, r0, #0x36 + bge _020E83F0 + ldr r0, _020E8544 ; =0xC2F8F359 + ldr r1, _020E8548 ; =0x01A56E1F + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E83F0: + ldr r0, _020E854C ; =0x000007FF + cmp r12, r0 + bne _020E841C + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + mov r2, r0 + mov r3, r1 + bl _dadd + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E841C: + add r2, r12, r4 + sub r0, r0, #0x1 + cmp r2, r0 + ble _020E8460 + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + ldr r0, _020E8550 ; =0x8800759C + ldr r1, _020E8554 ; =0x7E37E43C + bl copysign + mov r2, r0 + mov r3, r1 + ldr r0, _020E8550 ; =0x8800759C + ldr r1, _020E8554 ; =0x7E37E43C + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E8460: + cmp r2, #0x0 + ble _020E8488 + ldr r1, _020E8558 ; =0x800FFFFF + ldr r0, [sp, #0x8] + and r1, r3, r1 + orr r1, r1, r2, lsl #0x14 + str r1, [sp, #0xc] + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E8488: + mvn r0, #0x35 + cmp r2, r0 + bgt _020E8508 + ldr r0, _020E855C ; =0x0000C350 + cmp r4, r0 + ble _020E84D4 + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + ldr r0, _020E8550 ; =0x8800759C + ldr r1, _020E8554 ; =0x7E37E43C + bl copysign + mov r2, r0 + mov r3, r1 + ldr r0, _020E8550 ; =0x8800759C + ldr r1, _020E8554 ; =0x7E37E43C + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E84D4: + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + ldr r0, _020E8544 ; =0xC2F8F359 + ldr r1, _020E8548 ; =0x01A56E1F + bl copysign + mov r2, r0 + mov r3, r1 + ldr r0, _020E8544 ; =0xC2F8F359 + ldr r1, _020E8548 ; =0x01A56E1F + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E8508: + ldr r0, _020E8558 ; =0x800FFFFF + add r1, r2, #0x36 + and r0, r3, r0 + orr r3, r0, r1, lsl #0x14 + ldr r2, [sp, #0x8] + ldr r1, _020E8560 ; =0x3C900000 + mov r0, #0x0 + str r3, [sp, #0xc] + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E8538: .word 0x7FF00000 +_020E853C: .word 0x43500000 +_020E8540: .word 0xFFFF3CB0 +_020E8544: .word 0xC2F8F359 +_020E8548: .word 0x01A56E1F +_020E854C: .word 0x000007FF +_020E8550: .word 0x8800759C +_020E8554: .word 0x7E37E43C +_020E8558: .word 0x800FFFFF +_020E855C: .word 0x0000C350 +_020E8560: .word 0x3C900000 + + arm_func_start pow +pow: ; 0x020E8564 + ldr ip, _020E856C ; =__ieee754_pow + bx r12 + .balign 4 +_020E856C: .word __ieee754_pow + + arm_func_start __must_round +__must_round: ; 0x020E8570 + add r3, r0, #0x5 + ldrb r2, [r3, r1] + add r12, r3, r1 + cmp r2, #0x5 + movhi r0, #0x1 + bxhi lr + mvncc r0, #0x0 + bxcc lr + ldrb r2, [r0, #0x4] + add r12, r12, #0x1 + add r3, r3, r2 + cmp r12, r3 + bhs _020E85C0 +_020E85A4: + ldrb r2, [r12, #0x0] + cmp r2, #0x0 + movne r0, #0x1 + bxne lr + add r12, r12, #0x1 + cmp r12, r3 + blo _020E85A4 +_020E85C0: + sub r1, r1, #0x1 + add r0, r0, r1 + ldrb r0, [r0, #0x5] + tst r0, #0x1 + movne r0, #0x1 + mvneq r0, #0x0 + bx lr + + arm_func_start __dorounddecup +__dorounddecup: ; 0x020E85DC + add r3, r0, #0x5 + add r1, r3, r1 + sub r12, r1, #0x1 + mov r1, #0x0 +_020E85EC: + ldrb r2, [r12, #0x0] + cmp r2, #0x9 + addcc r0, r2, #0x1 + strccb r0, [r12, #0x0] + bxcc lr + cmp r12, r3 + bne _020E8620 + mov r1, #0x1 + strb r1, [r12, #0x0] + ldrsh r1, [r0, #0x2] + add r1, r1, #0x1 + strh r1, [r0, #0x2] + bx lr +_020E8620: + strb r1, [r12], #-0x1 + b _020E85EC +_020E8628: + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start __rounddec +__rounddec: ; 0x020E862C + stmdb sp!, {r3-r5,lr} + mov r4, r1 + mov r5, r0 + cmp r4, #0x0 + ldmleia sp!, {r3-r5,pc} +_020E8640: + .byte 0x04, 0x20, 0xD5, 0xE5, 0x02, 0x00, 0x54, 0xE1, 0x38, 0x80, 0xBD, 0xA8, 0xC7, 0xFF, 0xFF, 0xEB + .byte 0x04, 0x40, 0xC5, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x38, 0x80, 0xBD, 0xB8, 0x05, 0x00, 0xA0, 0xE1 + .byte 0x04, 0x10, 0xA0, 0xE1, 0xDC, 0xFF, 0xFF, 0xEB, 0x38, 0x80, 0xBD, 0xE8 + + arm_func_start __ull2dec +__ull2dec: ; 0x020E866C + stmdb sp!, {r3-r11,lr} + mov r10, r0 + mov r0, #0x0 + mov r8, r2 + strb r0, [r10, #0x0] + mov r9, r1 + cmp r8, #0x0 + strb r0, [r10, #0x4] + cmpeq r9, #0x0 + beq _020E86F8 + mov r6, #0xa + mov r11, r0 + mov r5, r0 + mov r4, r0 +_020E86A4: + ldrb r1, [r10, #0x4] + mov r0, r9 + mov r2, r6 + add r3, r1, #0x1 + mov r7, r1 + strb r3, [r10, #0x4] + mov r1, r8 + mov r3, r11 + bl _ull_mod + add r1, r10, r7 + strb r0, [r1, #0x5] + mov r0, r9 + mov r1, r8 + mov r2, #0xa + mov r3, #0x0 + bl _ll_udiv + mov r8, r1 + mov r9, r0 + cmp r8, r5 + cmpeq r9, r4 + bne _020E86A4 +_020E86F8: + ldrb r0, [r10, #0x4] + add r2, r10, #0x5 + add r0, r2, r0 + sub r3, r0, #0x1 + cmp r2, r3 + bhs _020E8728 +_020E8710: + ldrb r0, [r3, #0x0] + ldrb r1, [r2, #0x0] + strb r0, [r2], #0x1 + strb r1, [r3], #-0x1 + cmp r2, r3 + blo _020E8710 +_020E8728: + ldrb r0, [r10, #0x4] + sub r0, r0, #0x1 + strh r0, [r10, #0x2] + ldmia sp!, {r3-r11,pc} + + arm_func_start __timesdec +__timesdec: ; 0x020E8738 + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x40 + ldrb r6, [r1, #0x4] + ldrb r5, [r2, #0x4] + mov r4, #0x0 + add r3, sp, #0x0 + add r5, r6, r5 + sub r5, r5, #0x1 + add r3, r3, r5 + add r6, r3, #0x1 + mov r7, r6 + strb r4, [r0, #0x0] + cmp r5, #0x0 + ble _020E8800 + add lr, r1, #0x5 + add r11, r2, #0x5 +_020E8778: + ldrb r3, [r2, #0x4] + sub r10, r3, #0x1 + sub r3, r5, r10 + subs r9, r3, #0x1 + ldrb r3, [r1, #0x4] + movmi r9, #0x0 + submi r10, r5, #0x1 + add r8, r10, #0x1 + sub r3, r3, r9 + cmp r8, r3 + movgt r8, r3 + add r10, r11, r10 + add r9, lr, r9 + cmp r8, #0x0 + ble _020E87CC +_020E87B4: + ldrb r12, [r9], #0x1 + ldrb r3, [r10], #-0x1 + sub r8, r8, #0x1 + cmp r8, #0x0 + mla r4, r12, r3, r4 + bgt _020E87B4 +_020E87CC: + ldr r3, _020E88B8 ; =0xCCCCCCCD + sub r5, r5, #0x1 + umull r8, r9, r4, r3 + mov r9, r9, lsr #0x3 + cmp r5, #0x0 + mov r10, #0xa + umull r8, r9, r10, r9 + sub r9, r4, r8 + strb r9, [r6, #-0x1]! + mov r8, r4 + umull r3, r4, r8, r3 + mov r4, r4, lsr #0x3 + bgt _020E8778 +_020E8800: + ldrsh r3, [r1, #0x2] + ldrsh r1, [r2, #0x2] + cmp r4, #0x0 + add r1, r3, r1 + strh r1, [r0, #0x2] + beq _020E8828 + strb r4, [r6, #-0x1]! + ldrsh r1, [r0, #0x2] + add r1, r1, #0x1 + strh r1, [r0, #0x2] +_020E8828: + mov r3, #0x0 + b _020E8840 +_020E8830: + ldrb r2, [r6], #0x1 + add r1, r0, r3 + add r3, r3, #0x1 + strb r2, [r1, #0x5] +_020E8840: + cmp r3, #0x20 + bge _020E8850 + cmp r6, r7 + blo _020E8830 +_020E8850: + cmp r6, r7 + addcs sp, sp, #0x40 + strb r3, [r0, #0x4] + ldmcsia sp!, {r3-r11,pc} +_020E8860: + .byte 0x00, 0x10, 0xD6, 0xE5, 0x05, 0x00, 0x51, 0xE3, 0x40, 0xD0, 0x8D, 0x32, 0xF8, 0x8F, 0xBD, 0x38 + .byte 0x0C, 0x00, 0x00, 0x1A, 0x01, 0x20, 0x86, 0xE2, 0x07, 0x00, 0x52, 0xE1, 0x05, 0x00, 0x00, 0x2A + .byte 0x00, 0x10, 0xD2, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x01, 0x20, 0x82, 0xE2 + .byte 0x07, 0x00, 0x52, 0xE1, 0xF9, 0xFF, 0xFF, 0x3A, 0x01, 0x10, 0x56, 0xE5, 0x01, 0x00, 0x11, 0xE3 + .byte 0x40, 0xD0, 0x8D, 0x02, 0xF8, 0x8F, 0xBD, 0x08, 0x04, 0x10, 0xD0, 0xE5, 0x4A, 0xFF, 0xFF, 0xEB + .byte 0x40, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 +_020E88B8: .word 0xCCCCCCCD + + arm_func_start __str2dec +__str2dec: ; 0x020E88BC + stmdb sp!, {r3,lr} + strh r2, [r0, #0x2] + mov r12, #0x0 + strb r12, [r0, #0x0] + b _020E88E4 +_020E88D0: + ldrsb r3, [r1], #0x1 + add r2, r0, r12 + add r12, r12, #0x1 + sub r3, r3, #0x30 + strb r3, [r2, #0x5] +_020E88E4: + cmp r12, #0x20 + bge _020E88F8 + ldrsb r2, [r1, #0x0] + cmp r2, #0x0 + bne _020E88D0 +_020E88F8: + strb r12, [r0, #0x4] + ldrsb r2, [r1, #0x0] + cmp r2, #0x0 + ldmeqia sp!, {r3,pc} +_020E8908: + .byte 0x05, 0x00, 0x52, 0xE3, 0x08, 0x80, 0xBD, 0xB8 + .byte 0x0D, 0x00, 0x00, 0xCA, 0xD1, 0x20, 0xD1, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x00, 0x00, 0x52, 0xE3 + .byte 0x04, 0x00, 0x00, 0x0A, 0x30, 0x00, 0x52, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0xD1, 0x20, 0xF1, 0xE1 + .byte 0x00, 0x00, 0x52, 0xE3, 0xFA, 0xFF, 0xFF, 0x1A, 0x01, 0x10, 0x4C, 0xE2, 0x01, 0x10, 0x80, 0xE0 + .byte 0x05, 0x10, 0xD1, 0xE5, 0x01, 0x00, 0x11, 0xE3, 0x08, 0x80, 0xBD, 0x08, 0x04, 0x10, 0xD0, 0xE5 + .byte 0x21, 0xFF, 0xFF, 0xEB, 0x08, 0x80, 0xBD, 0xE8 + + arm_func_start __two_exp +__two_exp: ; 0x020E8958 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4c + mov r4, r1 + mvn r2, #0x34 + mov r5, r0 + cmp r4, r2 + bgt _020E8988 + bge _020E8A54 + sub r0, r2, #0xb + cmp r4, r0 + beq _020E8A3C + b _020E8BE4 +_020E8988: + add r1, r4, #0x20 + cmp r1, #0x28 + addls pc, pc, r1, lsl #0x2 + b _020E8BE4 +_020E8998: + .byte 0x32, 0x00, 0x00, 0xEA, 0x90, 0x00, 0x00, 0xEA + .byte 0x8F, 0x00, 0x00, 0xEA, 0x8E, 0x00, 0x00, 0xEA, 0x8D, 0x00, 0x00, 0xEA, 0x8C, 0x00, 0x00, 0xEA + .byte 0x8B, 0x00, 0x00, 0xEA, 0x8A, 0x00, 0x00, 0xEA, 0x89, 0x00, 0x00, 0xEA, 0x88, 0x00, 0x00, 0xEA + .byte 0x87, 0x00, 0x00, 0xEA, 0x86, 0x00, 0x00, 0xEA, 0x85, 0x00, 0x00, 0xEA, 0x84, 0x00, 0x00, 0xEA + .byte 0x83, 0x00, 0x00, 0xEA, 0x82, 0x00, 0x00, 0xEA, 0x27, 0x00, 0x00, 0xEA, 0x80, 0x00, 0x00, 0xEA + .byte 0x7F, 0x00, 0x00, 0xEA, 0x7E, 0x00, 0x00, 0xEA, 0x7D, 0x00, 0x00, 0xEA, 0x7C, 0x00, 0x00, 0xEA + .byte 0x7B, 0x00, 0x00, 0xEA, 0x7A, 0x00, 0x00, 0xEA, 0x24, 0x00, 0x00, 0xEA, 0x28, 0x00, 0x00, 0xEA + .byte 0x2C, 0x00, 0x00, 0xEA, 0x30, 0x00, 0x00, 0xEA, 0x34, 0x00, 0x00, 0xEA, 0x38, 0x00, 0x00, 0xEA + .byte 0x3C, 0x00, 0x00, 0xEA, 0x40, 0x00, 0x00, 0xEA, 0x44, 0x00, 0x00, 0xEA, 0x48, 0x00, 0x00, 0xEA + .byte 0x4C, 0x00, 0x00, 0xEA, 0x50, 0x00, 0x00, 0xEA, 0x54, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x00, 0xEA + .byte 0x5C, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, 0xEA, 0x64, 0x00, 0x00, 0xEA +_020E8A3C: + ldr r1, _020E8C88 ; =0x02106E88 + mov r0, r5 + mvn r2, #0x13 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8A54: + ldr r1, _020E8C8C ; =0x02106EB8 + add r2, r2, #0x25 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8A68: + .byte 0x20, 0x12, 0x9F, 0xE5, 0x2B, 0x20, 0x82, 0xE2 + .byte 0x91, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x10, 0x12, 0x9F, 0xE5 + .byte 0x30, 0x20, 0x82, 0xE2, 0x8C, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 + .byte 0x00, 0x12, 0x9F, 0xE5, 0x32, 0x20, 0x82, 0xE2, 0x87, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 + .byte 0x30, 0x80, 0xBD, 0xE8, 0xF0, 0x11, 0x9F, 0xE5, 0x32, 0x20, 0x82, 0xE2, 0x82, 0xFF, 0xFF, 0xEB + .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0xE0, 0x11, 0x9F, 0xE5, 0x33, 0x20, 0x82, 0xE2 + .byte 0x7D, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0xD0, 0x11, 0x9F, 0xE5 + .byte 0x33, 0x20, 0x82, 0xE2, 0x78, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 + .byte 0xC0, 0x11, 0x9F, 0xE5, 0x33, 0x20, 0x82, 0xE2, 0x73, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 + .byte 0x30, 0x80, 0xBD, 0xE8, 0xB0, 0x11, 0x9F, 0xE5, 0x34, 0x20, 0x82, 0xE2, 0x6E, 0xFF, 0xFF, 0xEB + .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0xA0, 0x11, 0x9F, 0xE5, 0x34, 0x20, 0x82, 0xE2 + .byte 0x69, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x90, 0x11, 0x9F, 0xE5 + .byte 0x34, 0x20, 0x82, 0xE2, 0x64, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 + .byte 0x80, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x5F, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 + .byte 0x30, 0x80, 0xBD, 0xE8, 0x70, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x5A, 0xFF, 0xFF, 0xEB + .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x60, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3 + .byte 0x55, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x50, 0x11, 0x9F, 0xE5 + .byte 0x00, 0x20, 0xA0, 0xE3, 0x50, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 + .byte 0x40, 0x11, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x4B, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 + .byte 0x30, 0x80, 0xBD, 0xE8, 0x30, 0x11, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x46, 0xFF, 0xFF, 0xEB + .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x20, 0x11, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3 + .byte 0x41, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x10, 0x11, 0x9F, 0xE5 + .byte 0x02, 0x20, 0xA0, 0xE3, 0x3C, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 + .byte 0x00, 0x11, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3, 0x37, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 + .byte 0x30, 0x80, 0xBD, 0xE8 +_020E8BE4: + and r0, r4, #0x80000000 + add r1, r4, r0, lsr #0x1f + add r0, sp, #0x26 + mov r1, r1, asr #0x1 + bl __two_exp + add r1, sp, #0x26 + mov r0, r5 + mov r2, r1 + bl __timesdec + tst r4, #0x1 + addeq sp, sp, #0x4c + ldmeqia sp!, {r4-r5,pc} +_020E8C14: + .byte 0x00, 0x30, 0x8D, 0xE2, 0x05, 0xC0, 0xA0, 0xE1, 0x09, 0x20, 0xA0, 0xE3 + .byte 0xB0, 0x10, 0xDC, 0xE1, 0xB2, 0x00, 0xDC, 0xE1, 0x04, 0xC0, 0x8C, 0xE2, 0x01, 0x20, 0x52, 0xE2 + .byte 0xB0, 0x10, 0xC3, 0xE1, 0xB2, 0x00, 0xC3, 0xE1, 0x04, 0x30, 0x83, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A + .byte 0xB0, 0x00, 0xDC, 0xE1, 0x00, 0x00, 0x54, 0xE3, 0xB0, 0x00, 0xC3, 0xE1, 0x26, 0x00, 0x8D, 0xE2 + .byte 0x03, 0x00, 0x00, 0xDA, 0x60, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x16, 0xFF, 0xFF, 0xEB + .byte 0x02, 0x00, 0x00, 0xEA, 0x48, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xE0, 0xE3, 0x12, 0xFF, 0xFF, 0xEB + .byte 0x00, 0x10, 0x8D, 0xE2, 0x26, 0x20, 0x8D, 0xE2, 0x05, 0x00, 0xA0, 0xE1, 0xAD, 0xFE, 0xFF, 0xEB + .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 +_020E8C88: .word 0x02106E88 +_020E8C8C: .word 0x02106EB8 +_020E8C90: + .byte 0xE0, 0x6E, 0x10, 0x02, 0xF8, 0x6E, 0x10, 0x02, 0x08, 0x6F, 0x10, 0x02, 0x10, 0x6F, 0x10, 0x02 + .byte 0x18, 0x6F, 0x10, 0x02, 0x20, 0x6F, 0x10, 0x02, 0x28, 0x6F, 0x10, 0x02, 0x2C, 0x6F, 0x10, 0x02 + .byte 0x30, 0x6F, 0x10, 0x02, 0x34, 0x6F, 0x10, 0x02, 0x38, 0x6F, 0x10, 0x02, 0x3C, 0x6F, 0x10, 0x02 + .byte 0x40, 0x6F, 0x10, 0x02, 0x44, 0x6F, 0x10, 0x02, 0x48, 0x6F, 0x10, 0x02, 0x4C, 0x6F, 0x10, 0x02 + .byte 0x50, 0x6F, 0x10, 0x02, 0x54, 0x6F, 0x10, 0x02, 0x58, 0x6F, 0x10, 0x02 + + arm_func_start __equals_dec +__equals_dec: ; 0x020E8CDC + stmdb sp!, {r4,lr} + ldrb r3, [r0, #0x5] + cmp r3, #0x0 + bne _020E8D00 + ldrb r0, [r1, #0x5] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4,pc} +_020E8D00: + ldrb r2, [r1, #0x5] + cmp r2, #0x0 + bne _020E8D1C + cmp r3, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4,pc} +_020E8D1C: + ldrsh r3, [r0, #0x2] + ldrsh r2, [r1, #0x2] + cmp r3, r2 + bne _020E8DB4 + ldrb r4, [r0, #0x4] + ldrb r2, [r1, #0x4] + mov r12, #0x0 + mov lr, r4 + cmp r4, r2 + movgt lr, r2 + cmp lr, #0x0 + ble _020E8D74 + add r3, r0, r12 + add r2, r1, r12 + ldrb r3, [r3, #0x5] + ldrb r2, [r2, #0x5] + cmp r3, r2 + movne r0, #0x0 + ldmneia sp!, {r4,pc} +_020E8D68: + .byte 0x01, 0xC0, 0x8C, 0xE2, 0x0E, 0x00, 0x5C, 0xE1 + .byte 0xF5, 0xFF, 0xFF, 0xBA +_020E8D74: + cmp lr, r4 + moveq r0, r1 + ldrb r1, [r0, #0x4] + cmp r12, r1 + bge _020E8DAC + add r1, r0, r12 + ldrb r1, [r1, #0x5] + cmp r1, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,pc} +_020E8D9C: + .byte 0x04, 0x10, 0xD0, 0xE5 + .byte 0x01, 0xC0, 0x8C, 0xE2, 0x01, 0x00, 0x5C, 0xE1, 0xF6, 0xFF, 0xFF, 0xBA +_020E8DAC: + mov r0, #0x1 + ldmia sp!, {r4,pc} +_020E8DB4: + mov r0, #0x0 + ldmia sp!, {r4,pc} +__less_dec: + stmdb sp!, {r3-r5,lr} + ldrb r2, [r0, #0x5] + cmp r2, #0x0 + bne _020E8DE0 + ldrb r0, [r1, #0x5] + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E8DE0: + ldrb r2, [r1, #0x5] + cmp r2, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020E8DF0: + .byte 0xF2, 0x30, 0xD1, 0xE1, 0xF2, 0x20, 0xD0, 0xE1, 0x03, 0x00, 0x52, 0xE1, 0x23, 0x00, 0x00, 0x1A + .byte 0x04, 0x50, 0xD0, 0xE5, 0x04, 0x40, 0xD1, 0xE5, 0x00, 0xC0, 0xA0, 0xE3, 0x05, 0xE0, 0xA0, 0xE1 + .byte 0x04, 0x00, 0x55, 0xE1, 0x04, 0xE0, 0xA0, 0xC1, 0x00, 0x00, 0x5E, 0xE3, 0x0C, 0x00, 0x00, 0xDA + .byte 0x0C, 0x30, 0x81, 0xE0, 0x0C, 0x20, 0x80, 0xE0, 0x05, 0x30, 0xD3, 0xE5, 0x05, 0x20, 0xD2, 0xE5 + .byte 0x03, 0x00, 0x52, 0xE1, 0x01, 0x00, 0xA0, 0x33, 0x38, 0x80, 0xBD, 0x38, 0x02, 0x00, 0x53, 0xE1 + .byte 0x00, 0x00, 0xA0, 0x33, 0x38, 0x80, 0xBD, 0x38, 0x01, 0xC0, 0x8C, 0xE2, 0x0E, 0x00, 0x5C, 0xE1 + .byte 0xF2, 0xFF, 0xFF, 0xBA, 0x05, 0x00, 0x5E, 0xE1, 0x0A, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x5C, 0xE1 + .byte 0x08, 0x00, 0x00, 0xAA, 0x0C, 0x00, 0x81, 0xE0, 0x05, 0x00, 0xD0, 0xE5, 0x00, 0x00, 0x50, 0xE3 + .byte 0x01, 0x00, 0xA0, 0x13, 0x38, 0x80, 0xBD, 0x18, 0x04, 0x00, 0xD1, 0xE5, 0x01, 0xC0, 0x8C, 0xE2 + .byte 0x00, 0x00, 0x5C, 0xE1, 0xF6, 0xFF, 0xFF, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x38, 0x80, 0xBD, 0xE8 + .byte 0x01, 0x00, 0xA0, 0xB3, 0x00, 0x00, 0xA0, 0xA3, 0x38, 0x80, 0xBD, 0xE8 + + arm_func_start __minus_dec +__minus_dec: ; 0x020E8E9C + stmdb sp!, {r3-r7,lr} + mov r6, r0 + mov r5, #0x9 +_020E8EA8: + ldrh r4, [r1, #0x0] + ldrh r3, [r1, #0x2] + add r1, r1, #0x4 + subs r5, r5, #0x1 + strh r4, [r6, #0x0] + strh r3, [r6, #0x2] + add r6, r6, #0x4 + bne _020E8EA8 + ldrh r1, [r1, #0x0] + strh r1, [r6, #0x0] + ldrb r1, [r2, #0x5] + cmp r1, #0x0 + ldmeqia sp!, {r3-r7,pc} +_020E8EDC: + .byte 0x04, 0x70, 0xD0, 0xE5 + .byte 0x04, 0x30, 0xD2, 0xE5, 0xF2, 0x40, 0xD0, 0xE1, 0x07, 0x10, 0xA0, 0xE1, 0x03, 0x00, 0x57, 0xE1 + .byte 0x03, 0x10, 0xA0, 0xB1, 0xF2, 0x30, 0xD2, 0xE1, 0x03, 0x60, 0x44, 0xE0, 0x06, 0x10, 0x81, 0xE0 + .byte 0x20, 0x00, 0x51, 0xE3, 0x20, 0x10, 0xA0, 0xC3, 0x01, 0x00, 0x57, 0xE1, 0x08, 0x00, 0x00, 0xAA + .byte 0x00, 0x40, 0xA0, 0xE3, 0x04, 0x50, 0xD0, 0xE5, 0x07, 0x30, 0x80, 0xE0, 0x01, 0x50, 0x85, 0xE2 + .byte 0x04, 0x50, 0xC0, 0xE5, 0x05, 0x40, 0xC3, 0xE5, 0x04, 0x70, 0xD0, 0xE5, 0x01, 0x00, 0x57, 0xE1 + .byte 0xF7, 0xFF, 0xFF, 0xBA, 0x04, 0x40, 0xD2, 0xE5, 0x05, 0x30, 0x80, 0xE2, 0x01, 0xC0, 0x83, 0xE0 + .byte 0x06, 0x40, 0x84, 0xE0, 0x01, 0x00, 0x54, 0xE1, 0x04, 0xC0, 0x83, 0xB0, 0x03, 0x40, 0x4C, 0xE0 + .byte 0x05, 0x10, 0x82, 0xE2, 0x06, 0x40, 0x44, 0xE0, 0x04, 0xE0, 0x81, 0xE0, 0x0E, 0x40, 0xA0, 0xE1 + .byte 0x18, 0x00, 0x00, 0xEA, 0x01, 0x70, 0x7C, 0xE5, 0x01, 0x50, 0x7E, 0xE5, 0x05, 0x00, 0x57, 0xE1 + .byte 0x10, 0x00, 0x00, 0x2A, 0x01, 0x70, 0x5C, 0xE5, 0x01, 0x50, 0x4C, 0xE2, 0x00, 0x00, 0x57, 0xE3 + .byte 0x02, 0x00, 0x00, 0x1A, 0x01, 0x70, 0x75, 0xE5, 0x00, 0x00, 0x57, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A + .byte 0x0C, 0x00, 0x55, 0xE1, 0x07, 0x00, 0x00, 0x0A, 0x00, 0x70, 0xD5, 0xE5, 0x01, 0x70, 0x47, 0xE2 + .byte 0x00, 0x70, 0xC5, 0xE5, 0x01, 0x70, 0xF5, 0xE5, 0x0C, 0x00, 0x55, 0xE1, 0x0A, 0x70, 0x87, 0xE2 + .byte 0x00, 0x70, 0xC5, 0xE5, 0xF7, 0xFF, 0xFF, 0x1A, 0x00, 0x70, 0xDC, 0xE5, 0x00, 0x50, 0xDE, 0xE5 + .byte 0x05, 0x50, 0x47, 0xE0, 0x00, 0x50, 0xCC, 0xE5, 0x03, 0x00, 0x5C, 0xE1, 0x01, 0x00, 0x5E, 0x81 + .byte 0xE3, 0xFF, 0xFF, 0x8A, 0x04, 0x50, 0xD2, 0xE5, 0x01, 0xE0, 0x44, 0xE0, 0x05, 0x00, 0x5E, 0xE1 + .byte 0x2F, 0x00, 0x00, 0xAA, 0x00, 0x10, 0xD4, 0xE5, 0x00, 0x70, 0xA0, 0xE3, 0x05, 0x00, 0x51, 0xE3 + .byte 0x01, 0x70, 0xA0, 0x33, 0x11, 0x00, 0x00, 0x3A, 0x10, 0x00, 0x00, 0x1A, 0x05, 0x10, 0x82, 0xE2 + .byte 0x05, 0x20, 0x81, 0xE0, 0x01, 0x40, 0x84, 0xE2, 0x02, 0x00, 0x54, 0xE1, 0x05, 0x00, 0x00, 0x2A + .byte 0x00, 0x10, 0xD4, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x21, 0x00, 0x00, 0x1A, 0x01, 0x40, 0x84, 0xE2 + .byte 0x02, 0x00, 0x54, 0xE1, 0xF9, 0xFF, 0xFF, 0x3A, 0x0E, 0x10, 0x83, 0xE0, 0x06, 0x20, 0x81, 0xE0 + .byte 0x01, 0x10, 0x52, 0xE5, 0x01, 0xC0, 0x42, 0xE2, 0x01, 0x00, 0x11, 0xE3, 0x01, 0x70, 0xA0, 0x13 + .byte 0x00, 0x00, 0x57, 0xE3, 0x16, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xDC, 0xE5, 0x01, 0x00, 0x51, 0xE3 + .byte 0x10, 0x00, 0x00, 0x2A, 0x01, 0x10, 0x5C, 0xE5, 0x01, 0x20, 0x4C, 0xE2, 0x00, 0x00, 0x51, 0xE3 + .byte 0x02, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x72, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A + .byte 0x0C, 0x00, 0x52, 0xE1, 0x07, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xD2, 0xE5, 0x01, 0x10, 0x41, 0xE2 + .byte 0x00, 0x10, 0xC2, 0xE5, 0x01, 0x10, 0xF2, 0xE5, 0x0C, 0x00, 0x52, 0xE1, 0x0A, 0x10, 0x81, 0xE2 + .byte 0x00, 0x10, 0xC2, 0xE5, 0xF7, 0xFF, 0xFF, 0x1A, 0x00, 0x10, 0xDC, 0xE5, 0x01, 0x10, 0x41, 0xE2 + .byte 0x00, 0x10, 0xCC, 0xE5, 0x00, 0x10, 0xD3, 0xE5, 0x03, 0x50, 0xA0, 0xE1, 0x00, 0x00, 0x51, 0xE3 + .byte 0x02, 0x00, 0x00, 0x1A, 0x01, 0x10, 0xF5, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A + .byte 0x03, 0x00, 0x55, 0xE1, 0x0F, 0x00, 0x00, 0x9A, 0xF2, 0x10, 0xD0, 0xE1, 0x03, 0x20, 0x45, 0xE0 + .byte 0xFF, 0x40, 0x02, 0xE2, 0x04, 0x10, 0x41, 0xE0, 0xB2, 0x10, 0xC0, 0xE1, 0x04, 0x10, 0xD0, 0xE5 + .byte 0x01, 0x20, 0x83, 0xE0, 0x02, 0x00, 0x55, 0xE1, 0x03, 0x00, 0x00, 0x2A, 0x01, 0x10, 0xD5, 0xE4 + .byte 0x02, 0x00, 0x55, 0xE1, 0x01, 0x10, 0xC3, 0xE4, 0xFB, 0xFF, 0xFF, 0x3A, 0x04, 0x10, 0xD0, 0xE5 + .byte 0x04, 0x10, 0x41, 0xE0, 0x04, 0x10, 0xC0, 0xE5, 0x04, 0x10, 0xD0, 0xE5, 0x05, 0x20, 0x80, 0xE2 + .byte 0x01, 0x30, 0x82, 0xE0, 0x02, 0x00, 0x53, 0xE1, 0x04, 0x00, 0x00, 0x9A, 0x01, 0x10, 0x73, 0xE5 + .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x02, 0x00, 0x53, 0xE1, 0xFA, 0xFF, 0xFF, 0x8A + .byte 0x02, 0x10, 0x43, 0xE0, 0x01, 0x10, 0x81, 0xE2, 0x04, 0x10, 0xC0, 0xE5, 0xF8, 0x80, 0xBD, 0xE8 + + arm_func_start __num2dec_internal +__num2dec_internal: ; 0x020E9140 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x58 + mov r8, r1 + mov r6, r2 + mov r7, r0 + mov r0, r8 + mov r1, r6 + bl __signbitf +_020E9160: + .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x10, 0xA0, 0x13, 0x00, 0x10, 0xA0, 0x03, 0x01, 0x4C, 0xA0, 0xE1 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x06, 0x30, 0xA0, 0xE1 + .byte 0x44, 0x5C, 0xA0, 0xE1, 0xFC, 0x06, 0x00, 0xEB, 0x07, 0x00, 0x00, 0x1A, 0x00, 0x50, 0xC7, 0xE5 + .byte 0x00, 0x10, 0xA0, 0xE3, 0xB2, 0x10, 0xC7, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x04, 0x00, 0xC7, 0xE5 + .byte 0x58, 0xD0, 0x8D, 0xE2, 0x05, 0x10, 0xC7, 0xE5, 0xF0, 0x81, 0xBD, 0xE8, 0x08, 0x00, 0xA0, 0xE1 + .byte 0x06, 0x10, 0xA0, 0xE1, 0x1E, 0x02, 0x00, 0xEB, 0x02, 0x00, 0x50, 0xE3, 0x0D, 0x00, 0x00, 0xCA + .byte 0x00, 0x50, 0xC7, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC7, 0xE1, 0x01, 0x20, 0xA0, 0xE3 + .byte 0x08, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xC7, 0xE5, 0x14, 0x02, 0x00, 0xEB + .byte 0x01, 0x00, 0x50, 0xE3, 0x4E, 0x00, 0xA0, 0x03, 0x49, 0x00, 0xA0, 0x13, 0x58, 0xD0, 0x8D, 0xE2 + .byte 0x05, 0x00, 0xC7, 0xE5, 0xF0, 0x81, 0xBD, 0xE8, 0x00, 0x00, 0x55, 0xE3, 0x06, 0x00, 0x00, 0x0A + .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x06, 0x30, 0xA0, 0xE1 + .byte 0xED, 0x04, 0x00, 0xEB, 0x00, 0x80, 0xA0, 0xE1, 0x01, 0x60, 0xA0, 0xE1, 0x08, 0x20, 0x8D, 0xE2 + .byte 0x08, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x0B, 0xFC, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1 + .byte 0x01, 0x60, 0xA0, 0xE1, 0x00, 0xC0, 0x84, 0xE3, 0x00, 0x20, 0x7C, 0xE2, 0x01, 0x36, 0x86, 0xE3 + .byte 0x00, 0x10, 0xE3, 0xE2, 0x00, 0x00, 0xA0, 0xE3, 0x01, 0x30, 0x03, 0xE0, 0x01, 0x10, 0x40, 0xE2 + .byte 0x02, 0xC0, 0x0C, 0xE0, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x00, 0x9C, 0xE0, 0x02, 0x10, 0xA3, 0xE0 + .byte 0x00, 0x40, 0x8D, 0xE5, 0x04, 0x60, 0x8D, 0xE5, 0xC7, 0x01, 0x00, 0xEB, 0x35, 0x80, 0x60, 0xE2 + .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x8D, 0xE2, 0x08, 0x10, 0x41, 0xE0, 0xB5, 0xFD, 0xFF, 0xEB + .byte 0x04, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x21, 0xFC, 0xFF, 0xEB + .byte 0x45, 0x03, 0x00, 0xEB, 0x01, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x32, 0x00, 0x8D, 0xE2 + .byte 0xF1, 0xFC, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1, 0x32, 0x10, 0x8D, 0xE2, 0x0C, 0x20, 0x8D, 0xE2 + .byte 0x20, 0xFD, 0xFF, 0xEB, 0x00, 0x50, 0xC7, 0xE5, 0x58, 0xD0, 0x8D, 0xE2, 0xF0, 0x81, 0xBD, 0xE8 + + arm_func_start __num2dec_internal2 +__num2dec_internal2: ; 0x020E92C0 + stmdb sp!, {r3-r5,lr} + mov r4, r3 + ldrsh r5, [r0, #0x2] + mov r0, r4 + bl __num2dec_internal + ldrb r0, [r4, #0x5] + cmp r0, #0x9 + ldmhiia sp!, {r3-r5,pc} +_020E92E0: + .byte 0x20, 0x00, 0x55, 0xE3, 0x20, 0x50, 0xA0, 0xC3, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1 + .byte 0xCD, 0xFC, 0xFF, 0xEB, 0x04, 0x00, 0xD4, 0xE5, 0x05, 0x00, 0x50, 0xE1, 0x08, 0x00, 0x00, 0xAA + .byte 0x00, 0x10, 0xA0, 0xE3, 0x04, 0x20, 0xD4, 0xE5, 0x00, 0x00, 0x84, 0xE0, 0x01, 0x20, 0x82, 0xE2 + .byte 0x04, 0x20, 0xC4, 0xE5, 0x05, 0x10, 0xC0, 0xE5, 0x04, 0x00, 0xD4, 0xE5, 0x05, 0x00, 0x50, 0xE1 + .byte 0xF7, 0xFF, 0xFF, 0xBA, 0xF2, 0x10, 0xD4, 0xE1, 0x01, 0x00, 0x40, 0xE2, 0x00, 0x20, 0xA0, 0xE3 + .byte 0x00, 0x00, 0x41, 0xE0, 0xB2, 0x00, 0xC4, 0xE1, 0x04, 0x00, 0xD4, 0xE5, 0x00, 0x00, 0x50, 0xE3 + .byte 0x38, 0x80, 0xBD, 0xD8, 0x02, 0x10, 0x84, 0xE0, 0x05, 0x00, 0xD1, 0xE5, 0x01, 0x20, 0x82, 0xE2 + .byte 0x30, 0x00, 0x80, 0xE2, 0x05, 0x00, 0xC1, 0xE5, 0x04, 0x00, 0xD4, 0xE5, 0x00, 0x00, 0x52, 0xE1 + .byte 0xF7, 0xFF, 0xFF, 0xBA, 0x38, 0x80, 0xBD, 0xE8 + + arm_func_start __dec2num +__dec2num: ; 0x020E9368 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xfc + mov r4, r0 + ldrb r0, [r4, #0x4] + cmp r0, #0x0 + bne _020E93A8 + ldrsb r0, [r4, #0x0] + mov r2, #0x0 + cmp r0, #0x0 + ldreq r3, _020E996C ; =0x3FF00000 + mov r0, #0x0 + ldrne r3, _020E9970 ; =0xBFF00000 + mov r1, r0 + bl copysign + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E93A8: + ldrb r0, [r4, #0x5] + cmp r0, #0x30 + beq _020E93C8 + cmp r0, #0x49 + beq _020E93F0 + cmp r0, #0x4e + beq _020E9424 + b _020E946C +_020E93C8: + ldrsb r0, [r4, #0x0] + mov r2, #0x0 + cmp r0, #0x0 + ldreq r3, _020E996C ; =0x3FF00000 + mov r0, #0x0 + ldrne r3, _020E9970 ; =0xBFF00000 + mov r1, r0 + bl copysign + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E93F0: + ldrsb r0, [r4, #0x0] + mov r5, #0x0 + cmp r0, #0x0 + ldreq r4, _020E996C ; =0x3FF00000 + ldr r0, _020E9974 ; =0x02106B74 + ldrne r4, _020E9970 ; =0xBFF00000 + ldr r0, [r0, #0x0] + bl _f2d + mov r2, r5 + mov r3, r4 + bl copysign + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E9424: + ldr r1, _020E9978 ; =0x7FF00000 + add r3, sp, #0x10 + mov r2, #0x0 + str r2, [r3, #0x0] + str r1, [r3, #0x4] + ldrsb r0, [r4, #0x0] + cmp r0, #0x0 + beq _020E9454 + orr r0, r1, #0x80000000 + orr r1, r2, r2 + str r1, [r3, #0x0] + str r0, [r3, #0x4] +_020E9454: + ldmia r3, {r0-r1} + orr r0, r0, #0x0 + orr r1, r1, #0x80000 + stmia r3, {r0-r1} + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E946C: + add r3, sp, #0xd6 + mov r5, r4 + mov r2, #0x9 +_020E9478: + ldrh r1, [r5, #0x0] + ldrh r0, [r5, #0x2] + add r5, r5, #0x4 + subs r2, r2, #0x1 + strh r1, [r3, #0x0] + strh r0, [r3, #0x2] + add r3, r3, #0x4 + bne _020E9478 + ldrh r0, [r5, #0x0] + add r1, sp, #0xdb + strh r0, [r3, #0x0] + ldrb r0, [sp, #0xda] + add r5, r1, r0 + cmp r1, r5 + bhs _020E94C8 +_020E94B4: + ldrb r0, [r1, #0x0] + sub r0, r0, #0x30 + strb r0, [r1], #0x1 + cmp r1, r5 + blo _020E94B4 +_020E94C8: + ldrb r1, [sp, #0xda] + ldrsh r2, [sp, #0xd8] + add r0, sp, #0xb0 + sub r1, r1, #0x1 + add r1, r2, r1 + strh r1, [sp, #0xd8] + ldr r1, _020E997C ; =0x02106F5C + mov r2, #0x134 + ldrsh r11, [sp, #0xd8] + bl __str2dec + add r0, sp, #0xb0 + add r1, sp, #0xd6 + bl __less_dec +_020E94FC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x0C, 0x00, 0x00, 0x0A, 0xD0, 0x00, 0xD4, 0xE1, 0x00, 0x50, 0xA0, 0xE3, 0x00, 0x00, 0x50, 0xE3 + .byte 0x54, 0x44, 0x9F, 0x05, 0x58, 0x04, 0x9F, 0xE5, 0x50, 0x44, 0x9F, 0x15, 0x00, 0x00, 0x90, 0xE5 + .byte 0xC5, 0x07, 0x00, 0xEB, 0x05, 0x20, 0xA0, 0xE1, 0x04, 0x30, 0xA0, 0xE1, 0x38, 0xFB, 0xFF, 0xEB + .byte 0xFC, 0xD0, 0x8D, 0xE2, 0xF0, 0x8F, 0xBD, 0xE8, 0xDB, 0x10, 0x8D, 0xE2, 0x00, 0x00, 0xD1, 0xE5 + .byte 0x01, 0x80, 0x81, 0xE2, 0xCB, 0x02, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5 + .byte 0x05, 0x00, 0x58, 0xE1, 0x2D, 0x00, 0x00, 0x2A, 0x08, 0x00, 0x45, 0xE0, 0xA0, 0x1F, 0xA0, 0xE1 + .byte 0x80, 0x0E, 0x61, 0xE0, 0xE0, 0x7E, 0x91, 0xE0, 0x08, 0x70, 0xA0, 0x03, 0x00, 0x60, 0xA0, 0xE3 + .byte 0x00, 0x20, 0xA0, 0xE3, 0x00, 0x00, 0x57, 0xE3, 0x05, 0x00, 0x00, 0xDA, 0x0A, 0x00, 0xA0, 0xE3 + .byte 0x01, 0x10, 0xD8, 0xE4, 0x01, 0x20, 0x82, 0xE2, 0x07, 0x00, 0x52, 0xE1, 0x90, 0x16, 0x26, 0xE0 + .byte 0xFA, 0xFF, 0xFF, 0xBA, 0xE4, 0x03, 0x9F, 0xE5, 0x0C, 0x10, 0x9D, 0xE5, 0x87, 0x31, 0x80, 0xE0 + .byte 0x08, 0x20, 0x13, 0xE5, 0x08, 0x00, 0x9D, 0xE5, 0x04, 0x30, 0x13, 0xE5, 0xC0, 0x02, 0x00, 0xEB + .byte 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x90, 0xA0, 0xE1, 0x06, 0x00, 0xA0, 0xE1, 0xAD, 0x02, 0x00, 0xEB + .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1 + .byte 0x5B, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x56, 0xE3, 0x00, 0x60, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1 + .byte 0x05, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1 + .byte 0x0A, 0x30, 0xA0, 0xE1, 0xE0, 0x05, 0x00, 0xEB, 0x04, 0x00, 0x00, 0x0A, 0x08, 0x60, 0x8D, 0xE5 + .byte 0x0C, 0xA0, 0x8D, 0xE5, 0x05, 0x00, 0x58, 0xE1, 0x07, 0xB0, 0x4B, 0xE0, 0xD1, 0xFF, 0xFF, 0x3A + .byte 0x00, 0x00, 0x5B, 0xE3, 0x0E, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x6B, 0xE2, 0x85, 0x02, 0x00, 0xEB + .byte 0x01, 0x30, 0xA0, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x54, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3 + .byte 0xCB, 0xFB, 0xFF, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x08, 0x00, 0x9D, 0xE5 + .byte 0x0C, 0x10, 0x9D, 0xE5, 0x8F, 0x0A, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5 + .byte 0x0D, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0xA0, 0xE1, 0x76, 0x02, 0x00, 0xEB, 0x01, 0x30, 0xA0, 0xE1 + .byte 0x00, 0x20, 0xA0, 0xE1, 0x18, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0xBC, 0xFB, 0xFF, 0xEB + .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x08, 0x00, 0x9D, 0xE5, 0x0C, 0x10, 0x9D, 0xE5 + .byte 0x8B, 0x02, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5, 0x08, 0x00, 0x9D, 0xE5 + .byte 0x0C, 0x10, 0x9D, 0xE5, 0x0B, 0x20, 0xA0, 0xE1, 0x1E, 0xFB, 0xFF, 0xEB, 0x08, 0x00, 0x8D, 0xE5 + .byte 0x0C, 0x10, 0x8D, 0xE5, 0xE2, 0x00, 0x00, 0xEB, 0x02, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A + .byte 0xD0, 0x02, 0x9F, 0xE5, 0x00, 0x10, 0xE0, 0xE3, 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5 + .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x20, 0x9D, 0xE5, 0x8A, 0x00, 0x8D, 0xE2, 0x00, 0x40, 0x8D, 0xE2 + .byte 0x00, 0x50, 0xA0, 0xE3, 0x99, 0xFE, 0xFF, 0xEB, 0x8A, 0x00, 0x8D, 0xE2, 0xD6, 0x10, 0x8D, 0xE2 + .byte 0x7D, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x91, 0x00, 0x00, 0x1A, 0x8A, 0x00, 0x8D, 0xE2 + .byte 0xD6, 0x10, 0x8D, 0xE2, 0xB0, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x50, 0xA0, 0x13 + .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x55, 0xE3, 0x01, 0x60, 0xA0, 0x03 + .byte 0x00, 0x10, 0x8D, 0xE5, 0x04, 0x00, 0x8D, 0xE5, 0x00, 0x60, 0xA0, 0x13, 0x00, 0x00, 0x56, 0xE3 + .byte 0x07, 0x00, 0x00, 0x1A, 0x03, 0x00, 0x94, 0xE8, 0x01, 0x00, 0x90, 0xE2, 0x00, 0x10, 0xA1, 0xE2 + .byte 0x03, 0x00, 0x84, 0xE8, 0xBE, 0x00, 0x00, 0xEB, 0x02, 0x00, 0x50, 0xE3, 0x7C, 0x00, 0x00, 0x0A + .byte 0x05, 0x00, 0x00, 0xEA, 0x00, 0x10, 0x94, 0xE5, 0x04, 0x00, 0x94, 0xE5, 0x01, 0x10, 0x51, 0xE2 + .byte 0x00, 0x00, 0xC0, 0xE2, 0x00, 0x10, 0x84, 0xE5, 0x04, 0x00, 0x84, 0xE5, 0x00, 0x10, 0x9D, 0xE5 + .byte 0x04, 0x20, 0x9D, 0xE5, 0x64, 0x00, 0x8D, 0xE2, 0x74, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x55, 0xE3 + .byte 0x04, 0x00, 0x00, 0x0A, 0x64, 0x00, 0x8D, 0xE2, 0xD6, 0x10, 0x8D, 0xE2, 0x8E, 0xFD, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x48, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x55, 0xE3, 0x34, 0x00, 0x00, 0x1A + .byte 0xD6, 0x00, 0x8D, 0xE2, 0x64, 0x10, 0x8D, 0xE2, 0x87, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x2F, 0x00, 0x00, 0x1A, 0x8A, 0x30, 0x8D, 0xE2, 0x3E, 0x50, 0x8D, 0xE2, 0x09, 0x20, 0xA0, 0xE3 + .byte 0xB0, 0x10, 0xD3, 0xE1, 0xB2, 0x00, 0xD3, 0xE1, 0x04, 0x30, 0x83, 0xE2, 0xB0, 0x10, 0xC5, 0xE1 + .byte 0xB2, 0x00, 0xC5, 0xE1, 0x04, 0x50, 0x85, 0xE2, 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A + .byte 0xB0, 0x00, 0xD3, 0xE1, 0x64, 0x30, 0x8D, 0xE2, 0x8A, 0x40, 0x8D, 0xE2, 0xB0, 0x00, 0xC5, 0xE1 + .byte 0x09, 0x20, 0xA0, 0xE3, 0xB0, 0x10, 0xD3, 0xE1, 0xB2, 0x00, 0xD3, 0xE1, 0x04, 0x30, 0x83, 0xE2 + .byte 0xB0, 0x10, 0xC4, 0xE1, 0xB2, 0x00, 0xC4, 0xE1, 0x04, 0x40, 0x84, 0xE2, 0x01, 0x20, 0x52, 0xE2 + .byte 0xF7, 0xFF, 0xFF, 0x1A, 0xB0, 0x00, 0xD3, 0xE1, 0x3E, 0x30, 0x8D, 0xE2, 0x64, 0x50, 0x8D, 0xE2 + .byte 0xB0, 0x00, 0xC4, 0xE1, 0x09, 0x20, 0xA0, 0xE3, 0xB0, 0x10, 0xD3, 0xE1, 0xB2, 0x00, 0xD3, 0xE1 + .byte 0x04, 0x30, 0x83, 0xE2, 0xB0, 0x10, 0xC5, 0xE1, 0xB2, 0x00, 0xC5, 0xE1, 0x04, 0x50, 0x85, 0xE2 + .byte 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A, 0xB0, 0x40, 0xD3, 0xE1, 0x08, 0x30, 0x9D, 0xE5 + .byte 0x00, 0x10, 0x9D, 0xE5, 0x0C, 0x20, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0xB0, 0x40, 0xC5, 0xE1 + .byte 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0x8D, 0xE5, 0x04, 0x20, 0x8D, 0xE5 + .byte 0x11, 0x00, 0x00, 0xEA, 0x64, 0x70, 0x8D, 0xE2, 0x8A, 0x30, 0x8D, 0xE2, 0x09, 0x20, 0xA0, 0xE3 + .byte 0xB0, 0x10, 0xD7, 0xE1, 0xB2, 0x00, 0xD7, 0xE1, 0x04, 0x70, 0x87, 0xE2, 0xB0, 0x10, 0xC3, 0xE1 + .byte 0xB2, 0x00, 0xC3, 0xE1, 0x04, 0x30, 0x83, 0xE2, 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A + .byte 0xB0, 0x20, 0xD7, 0xE1, 0x00, 0x10, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0xB0, 0x20, 0xC3, 0xE1 + .byte 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, 0x9B, 0xFF, 0xFF, 0xEA, 0x3E, 0x00, 0x8D, 0xE2 + .byte 0xD6, 0x10, 0x8D, 0xE2, 0x8A, 0x20, 0x8D, 0xE2, 0x77, 0xFD, 0xFF, 0xEB, 0x18, 0x00, 0x8D, 0xE2 + .byte 0x64, 0x10, 0x8D, 0xE2, 0xD6, 0x20, 0x8D, 0xE2, 0x73, 0xFD, 0xFF, 0xEB, 0x3E, 0x00, 0x8D, 0xE2 + .byte 0x18, 0x10, 0x8D, 0xE2, 0x00, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x0B, 0x00, 0x00, 0x0A + .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0x01, 0xE2, 0x00, 0x00, 0x00, 0xE2 + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x51, 0x03, 0x0D, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x9D, 0xE5 + .byte 0x04, 0x00, 0x9D, 0xE5, 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, 0x08, 0x00, 0x00, 0xEA + .byte 0x3E, 0x00, 0x8D, 0xE2, 0x18, 0x10, 0x8D, 0xE2, 0x27, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x03, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0x08, 0x10, 0x8D, 0xE5 + .byte 0x0C, 0x00, 0x8D, 0xE5, 0xD6, 0x0D, 0xDD, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x00, 0x0A + .byte 0x00, 0x00, 0xA0, 0xE3, 0x08, 0x20, 0x9D, 0xE5, 0x0C, 0x30, 0x9D, 0xE5, 0x00, 0x10, 0xA0, 0xE1 + .byte 0x1D, 0x03, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5, 0x08, 0x00, 0x9D, 0xE5 + .byte 0x0C, 0x10, 0x9D, 0xE5, 0xFC, 0xD0, 0x8D, 0xE2, 0xF0, 0x8F, 0xBD, 0xE8 +_020E996C: .word 0x3FF00000 +_020E9970: .word 0xBFF00000 +_020E9974: .word 0x02106B74 +_020E9978: .word 0x7FF00000 +_020E997C: .word 0x02106F5C +_020E9980: + .byte 0x48, 0x6E, 0x10, 0x02, 0x00, 0x00, 0x14, 0x40, 0xFF, 0xFF, 0xEF, 0x7F + + arm_func_start __msl_generic_count_bits64 +__msl_generic_count_bits64: ; 0x020E998C + mov r3, r0, lsr #0x1 + ldr r2, _020E9A14 ; =0x55555555 + orr r3, r3, r1, lsl #0x1f + and r3, r3, r2 + subs r12, r0, r3 + and r2, r2, r1, lsr #0x1 + ldr r0, _020E9A18 ; =0x33333333 + sbc r3, r1, r2 + mov r1, r12, lsr #0x2 + orr r1, r1, r3, lsl #0x1e + and r2, r12, r0 + and r1, r1, r0 + adds r2, r2, r1 + and r1, r3, r0 + and r0, r0, r3, lsr #0x2 + adc r1, r1, r0 + mov r0, r2, lsr #0x4 + orr r0, r0, r1, lsl #0x1c + adds r2, r2, r0 + ldr r0, _020E9A1C ; =0x0F0F0F0F + adc r1, r1, r1, lsr #0x4 + and r3, r2, r0 + and r2, r1, r0 + mov r0, r3, lsr #0x8 + orr r0, r0, r2, lsl #0x18 + adds r1, r3, r0 + adc r2, r2, r2, lsr #0x8 + mov r0, r1, lsr #0x10 + orr r0, r0, r2, lsl #0x10 + adds r1, r1, r0 + adc r0, r2, r2, lsr #0x10 + adds r0, r1, r0 + and r0, r0, #0xff + bx lr + .balign 4 +_020E9A14: .word 0x55555555 +_020E9A18: .word 0x33333333 +_020E9A1C: .word 0x0F0F0F0F +__signbitf: + stmdb sp!, {r0-r3} + ldr r0, [sp, #0x4] + and r0, r0, #0x80000000 + add sp, sp, #0x10 + bx lr + + arm_func_start __fpclassifyf +__fpclassifyf: ; 0x020E9A34 + stmdb sp!, {r0-r3} + ldr r2, [sp, #0x4] + ldr r0, _020E9A9C ; =0x7FF00000 + ands r1, r2, r0 + beq _020E9A70 + cmp r1, r0 + bne _020E9A90 + ldr r0, _020E9AA0 ; =0x000FFFFF + tst r2, r0 + ldreq r0, [sp, #0x0] + add sp, sp, #0x10 + cmpeq r0, #0x0 + movne r0, #0x1 + moveq r0, #0x2 + bx lr +_020E9A70: + ldr r0, _020E9AA0 ; =0x000FFFFF + tst r2, r0 + ldreq r0, [sp, #0x0] + add sp, sp, #0x10 + cmpeq r0, #0x0 + movne r0, #0x5 + moveq r0, #0x3 + bx lr +_020E9A90: + mov r0, #0x4 + add sp, sp, #0x10 + bx lr + .balign 4 +_020E9A9C: .word 0x7FF00000 +_020E9AA0: .word 0x000FFFFF + + arm_func_start scalbn +scalbn: ; 0x020E9AA4 + stmdb sp!, {r3-r4,lr} + sub sp, sp, #0x4 + mov r4, r2 + add r2, sp, #0x0 + bl frexp + ldr r2, [sp, #0x0] + add r2, r2, r4 + str r2, [sp, #0x0] + bl ldexp + add sp, sp, #0x4 + ldmia sp!, {r3-r4,pc} + + arm_func_start stricmp +stricmp: ; 0x020E9AD0 + stmdb sp!, {r3,lr} + ldr r3, _020E9B34 ; =0x0210420C + ldrb r2, [r0], #0x1 + cmp r2, #0x0 + blt _020E9AF0 + cmp r2, #0x80 + bge _020E9AF0 + ldrb r2, [r3, r2] +_020E9AF0: + ldrb lr, [r1], #0x1 + and r12, r2, #0xff + cmp lr, #0x0 + blt _020E9B0C + cmp lr, #0x80 + bge _020E9B0C + ldrb lr, [r3, lr] +_020E9B0C: + and r2, lr, #0xff + cmp r12, r2 + mvncc r0, #0x0 + ldmccia sp!, {r3,pc} +_020E9B1C: + .byte 0x01, 0x00, 0xA0, 0x83 + .byte 0x08, 0x80, 0xBD, 0x88, 0x00, 0x00, 0x5C, 0xE3, 0xEA, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x08, 0x80, 0xBD, 0xE8 +_020E9B34: .word 0x0210420C + + arm_func_start strnicmp +strnicmp: ; 0x020E9B38 + ldr ip, _020E9B40 ; =stricmp + bx r12 + .balign 4 +_020E9B40: .word stricmp +_dadd: + stmdb sp!, {r4,lr} + eors r12, r1, r3 + eormi r3, r3, #0x80000000 + bmi _020EA5DC +_020E9B54: + subs r12, r0, r2 + sbcs lr, r1, r3 + bhs _020E9B70 + adds r2, r2, r12 + adc r3, r3, lr + subs r0, r0, r12 + sbc r1, r1, lr +_020E9B70: + mov lr, #0x80000000 + mov r12, r1, lsr #0x14 + orr r1, lr, r1, lsl #0xb + orr r1, r1, r0, lsr #0x15 + mov r0, r0, lsl #0xb + movs r4, r12, lsl #0x15 + cmnne r4, #0x200000 + beq _020E9C6C + mov r4, r3, lsr #0x14 + orr r3, lr, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs lr, r4, lsl #0x15 + beq _020E9CB4 +_020E9BA8: + subs r4, r12, r4 + beq _020E9C00 + cmp r4, #0x20 + ble _020E9BE4 + cmp r4, #0x38 + movge r4, #0x3f + sub r4, r4, #0x20 + rsb lr, r4, #0x20 + orrs lr, r2, r3, lsl lr + mov r2, r3, lsr r4 + orrne r2, r2, #0x1 + adds r0, r0, r2 + adcs r1, r1, #0x0 + blo _020E9C28 + b _020E9C0C +_020E9BE4: + rsb lr, r4, #0x20 + movs lr, r2, lsl lr + rsb lr, r4, #0x20 + mov r2, r2, lsr r4 + orr r2, r2, r3, lsl lr + mov r3, r3, lsr r4 + orrne r2, r2, #0x1 +_020E9C00: + adds r0, r0, r2 + adcs r1, r1, r3 + blo _020E9C28 +_020E9C0C: + add r12, r12, #0x1 + and r4, r0, #0x1 + movs r1, r1, rrx + orr r0, r4, r0, rrx + mov lr, r12, lsl #0x15 + cmn lr, #0x200000 + beq _020E9E38 +_020E9C28: + movs r2, r0, lsl #0x15 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + mov r1, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + tst r2, #0x80000000 + ldmeqia sp!, {r4,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020E9C6C: + cmp r12, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + bics r12, r12, #0x800 + beq _020E9CD8 + orrs r4, r0, r1, lsl #0x1 + bne _020E9E14 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r4, r4, lsl #0x15 + beq _020E9E00 + cmn r4, #0x200000 + bne _020E9E00 + orrs r4, r2, r3, lsl #0x1 + beq _020E9E00 + b _020E9E14 +_020E9CB4: + cmp r4, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + bic r12, r12, #0x800 + bics r4, r4, #0x800 + beq _020E9D44 + orrs r4, r2, r3, lsl #0x1 + bne _020E9E14 + b _020E9E00 +_020E9CD8: + orrs r4, r0, r1, lsl #0x1 + beq _020E9D18 + mov r12, #0x1 + bic r1, r1, #0x80000000 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r4, r4, lsl #0x15 + cmnne r4, #0x200000 + mov r4, r4, lsr #0x15 + orr r4, r4, lr, lsr #0x14 + beq _020E9CB4 + orr r3, r3, #0x80000000 + orr r12, r12, lr, lsr #0x14 + b _020E9BA8 +_020E9D18: + mov r12, r3, lsr #0x14 + mov r1, r3, lsl #0xb + orr r1, r1, r2, lsr #0x15 + mov r0, r2, lsl #0xb + movs r4, r12, lsl #0x15 + beq _020E9DCC + cmn r4, #0x200000 + bne _020E9DCC + orrs r4, r0, r1, lsl #0x1 + beq _020E9E00 + b _020E9E18 +_020E9D44: + orrs r4, r2, r3, lsl #0x1 + beq _020E9DDC + mov r4, #0x1 + bic r3, r3, #0x80000000 + cmp r1, #0x0 + bpl _020E9D68 + orr r12, r12, lr, lsr #0x14 + orr r4, r4, lr, lsr #0x14 + b _020E9BA8 +_020E9D68: + adds r0, r0, r2 + adcs r1, r1, r3 + blo _020E9D88 + add r12, r12, #0x1 + and r4, r0, #0x1 + movs r1, r1, rrx + mov r0, r0, rrx + orr r0, r0, r4 +_020E9D88: + cmp r1, #0x0 + subges r12, r12, #0x1 + movs r2, r0, lsl #0x15 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmeqia sp!, {r4,lr} + bxeq lr + tst r2, #0x80000000 + ldmeqia sp!, {r4,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr +_020E9DCC: + mov r1, r3 + mov r0, r2 + ldmia sp!, {r4,lr} + bx lr +_020E9DDC: + cmp r1, #0x0 + subges r12, r12, #0x1 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmia sp!, {r4,lr} + bx lr +_020E9E00: + ldr r1, _020E9E58 ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020E9E14: + mov r1, r3 +_020E9E18: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4,lr} + bx lr +_020E9E28: + .byte 0x00, 0x00, 0xE0, 0xE3, 0x02, 0x11, 0xC0, 0xE3 + .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020E9E38: + cmp r12, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + ldr r1, _020E9E58 ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020E9E58: .word 0x7FF00000 +_d2f: + and r2, r1, #0x80000000 + mov r12, r1, lsr #0x14 + bics r12, r12, #0x800 + beq _020E9ED4 + mov r3, r12, lsl #0x15 + cmn r3, #0x200000 + bhs _020E9EB8 + subs r12, r12, #0x380 + bls _020E9EE4 + cmp r12, #0xff + bge _020E9F54 + mov r1, r1, lsl #0xc + orr r3, r2, r1, lsr #0x9 + orr r3, r3, r0, lsr #0x1d + movs r1, r0, lsl #0x3 + orr r0, r3, r12, lsl #0x17 + bxeq lr + tst r1, #0x80000000 + bxeq lr + movs r1, r1, lsl #0x1 + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020E9EB8: + orrs r3, r0, r1, lsl #0xc + bne _020E9ECC + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020E9ECC: + mvn r0, #0x80000000 + bx lr +_020E9ED4: + orrs r3, r0, r1, lsl #0xc + bne _020E9F4C + mov r0, r2 + bx lr +_020E9EE4: + cmn r12, #0x17 + beq _020E9F38 + bmi _020E9F4C + mov r1, r1, lsl #0xb + orr r1, r1, #0x80000000 + mov r3, r1, lsr #0x8 + orr r3, r3, r0, lsr #0x1d + rsb r12, r12, #0x1 + movs r1, r0, lsl #0x3 + orr r0, r2, r3, lsr r12 + rsb r12, r12, #0x20 + mov r3, r3, lsl r12 + orrne r3, r3, #0x1 + movs r1, r3 + bxeq lr + tst r1, #0x80000000 + bxeq lr + movs r1, r1, lsl #0x1 + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020E9F38: + orr r0, r0, r1, lsl #0xc + movs r1, r0 + mov r0, r2 + addne r0, r0, #0x1 + bx lr +_020E9F4C: + mov r0, r2 + bx lr +_020E9F54: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr + + arm_func_start _dfix +_dfix: ; 0x020E9F60 + bic r3, r1, #0x80000000 + ldr r2, _020E9FA8 ; =0x0000041E + subs r2, r2, r3, lsr #0x14 + ble _020E9F9C + cmp r2, #0x20 + bge _020E9F94 + mov r3, r1, lsl #0xb + orr r3, r3, #0x80000000 + orr r3, r3, r0, lsr #0x15 + cmp r1, #0x0 + mov r0, r3, lsr r2 + rsbmi r0, r0, #0x0 + bx lr +_020E9F94: + mov r0, #0x0 + bx lr +_020E9F9C: + mvn r0, r1, asr #0x1f + add r0, r0, #0x80000000 + bx lr + .balign 4 +_020E9FA8: .word 0x0000041E + + arm_func_start _ll_ufrom_d +_ll_ufrom_d: ; 0x020E9FAC + tst r1, #0x80000000 + bne _020EA010 + ldr r2, _020EA034 ; =0x0000043E + subs r2, r2, r1, lsr #0x14 + blt _020EA028 + cmp r2, #0x40 + bge _020EA004 + mov r12, r1, lsl #0xb + orr r12, r12, #0x80000000 + orr r12, r12, r0, lsr #0x15 + cmp r2, #0x20 + ble _020E9FEC + sub r2, r2, #0x20 + mov r1, #0x0 + mov r0, r12, lsr r2 + bx lr +_020E9FEC: + mov r3, r0, lsl #0xb + mov r1, r12, lsr r2 + mov r0, r3, lsr r2 + rsb r2, r2, #0x20 + orr r0, r0, r12, lsl r2 + bx lr +_020EA004: + mov r1, #0x0 + mov r0, #0x0 + bx lr +_020EA010: + cmn r1, #0x100000 + cmpeq r0, #0x0 + bhi _020EA028 + mov r1, #0x0 + mov r0, #0x0 + bx lr +_020EA028: + mvn r1, #0x0 + mvn r0, #0x0 + bx lr + .balign 4 +_020EA034: .word 0x0000043E + + arm_func_start _dflt +_dflt: ; 0x020EA038 + ands r2, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r0, #0x0 + mov r1, #0x0 + bxeq lr + mov r3, #0x400 + add r3, r3, #0x1e + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 + movs r1, r0 + mov r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, r2, r1, lsr #0xc + orr r1, r1, r3, lsl #0x14 + bx lr + + arm_func_start _dfltu +_dfltu: ; 0x020EA078 + cmp r0, #0x0 + mov r1, #0x0 + bxeq lr + mov r3, #0x400 + add r3, r3, #0x1e + bmi _020EA09C + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 +_020EA09C: + mov r1, r0 + mov r0, r1, lsl #0x15 + add r1, r1, r1 + mov r1, r1, lsr #0xc + orr r1, r1, r3, lsl #0x14 + bx lr + + arm_func_start _dmul +_dmul: ; 0x020EA0B4 + stmdb sp!, {r4-r7,lr} + eor lr, r1, r3 + and lr, lr, #0x80000000 + mov r12, r1, lsr #0x14 + mov r1, r1, lsl #0xb + orr r1, r1, r0, lsr #0x15 + mov r0, r0, lsl #0xb + movs r6, r12, lsl #0x15 + cmnne r6, #0x200000 + beq _020EA1BC + orr r1, r1, #0x80000000 + bic r12, r12, #0x800 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r5, r4, lsl #0x15 + cmnne r5, #0x200000 + beq _020EA204 + orr r3, r3, #0x80000000 + bic r4, r4, #0x800 +_020EA108: + add r12, r4, r12 + umull r5, r4, r0, r2 + umull r7, r6, r0, r3 + adds r4, r7, r4 + adc r6, r6, #0x0 + umull r7, r0, r1, r2 + adds r4, r7, r4 + adcs r0, r0, r6 + umull r7, r2, r1, r3 + adc r1, r2, #0x0 + adds r0, r0, r7 + adc r1, r1, #0x0 + orrs r4, r4, r5 + orrne r0, r0, #0x1 + cmp r1, #0x0 + blt _020EA154 + sub r12, r12, #0x1 + adds r0, r0, r0 + adc r1, r1, r1 +_020EA154: + add r12, r12, #0x2 + subs r12, r12, #0x400 + bmi _020EA2F0 + beq _020EA2F0 + mov r6, r12, lsl #0x14 + cmn r6, #0x100000 + bmi _020EA3F0 + movs r2, r0, lsl #0x15 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + tst r2, #0x80000000 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA1BC: + bics r12, r12, #0x800 + beq _020EA218 + orrs r6, r0, r1, lsl #0x1 + bne _020EA3A4 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r5, r4, lsl #0x15 + beq _020EA1F8 + cmn r5, #0x200000 + bne _020EA390 + orrs r5, r2, r3, lsl #0x1 + beq _020EA390 + b _020EA3A4 +_020EA1F8: + orrs r5, r3, r2 + beq _020EA3B8 + b _020EA390 +_020EA204: + bics r4, r4, #0x800 + beq _020EA2AC + orrs r6, r2, r3, lsl #0x1 + bne _020EA3A4 + b _020EA390 +_020EA218: + orrs r6, r0, r1, lsl #0x1 + beq _020EA280 + mov r12, #0x1 + cmp r1, #0x0 + bne _020EA23C + sub r12, r12, #0x20 + movs r1, r0 + mov r0, #0x0 + bmi _020EA258 +_020EA23C: + clz r6, r1 + movs r1, r1, lsl r6 + rsb r6, r6, #0x20 + orr r1, r1, r0, lsr r6 + rsb r6, r6, #0x20 + mov r0, r0, lsl r6 + sub r12, r12, r6 +_020EA258: + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r5, r4, lsl #0x15 + cmnne r5, #0x200000 + beq _020EA204 + orr r3, r3, #0x80000000 + bic r4, r4, #0x800 + b _020EA108 +_020EA280: + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r5, r4, lsl #0x15 + beq _020EA404 + cmn r5, #0x200000 + bne _020EA404 + orrs r6, r2, r3, lsl #0x1 + beq _020EA3B8 + b _020EA3A4 +_020EA2AC: + orrs r5, r2, r3, lsl #0x1 + beq _020EA404 + mov r4, #0x1 + cmp r3, #0x0 + bne _020EA2D0 + sub r4, r4, #0x20 + movs r3, r2 + mov r2, #0x0 + bmi _020EA108 +_020EA2D0: + clz r6, r3 + movs r3, r3, lsl r6 + rsb r6, r6, #0x20 + orr r3, r3, r2, lsr r6 + rsb r6, r6, #0x20 + mov r2, r2, lsl r6 + sub r4, r4, r6 + b _020EA108 +_020EA2F0: + cmn r12, #0x34 + beq _020EA388 + bmi _020EA3E0 + mov r2, r1 + mov r3, r0 + add r4, r12, #0x34 + cmp r4, #0x20 + movge r2, r3 + movge r3, #0x0 + subge r4, r4, #0x20 + rsb r5, r4, #0x20 + mov r2, r2, lsl r4 + orr r2, r2, r3, lsr r5 + movs r3, r3, lsl r4 + orrne r2, r2, #0x1 + rsb r12, r12, #0xc + cmp r12, #0x20 + movge r0, r1 + movge r1, #0x0 + subge r12, r12, #0x20 + rsb r4, r12, #0x20 + mov r0, r0, lsr r12 + orr r0, r0, r1, lsl r4 + orr r1, lr, r1, lsr r12 + cmp r2, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + tst r2, #0x80000000 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA388: + orr r0, r0, r1, lsl #0x1 + b _020EA3C8 +_020EA390: + ldr r1, _020EA414 ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3A4: + mov r1, r3 + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3B8: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3C8: + movs r2, r0 + mov r1, lr + mov r0, #0x0 + addne r0, r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3E0: + mov r1, lr + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3F0: + ldr r1, _020EA414 ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA404: + mov r1, lr + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020EA414: .word 0x7FF00000 + + arm_func_start _dsqrt +_dsqrt: ; 0x020EA418 + stmdb sp!, {r4-r6,lr} + ldr r2, _020EA5A8 ; =0x7FF00000 + cmp r1, r2 + bhs _020EA564 + movs r12, r1, lsr #0x14 + beq _020EA510 + bic r1, r1, r2 + orr r1, r1, #0x100000 +_020EA438: + movs r12, r12, asr #0x1 + bhs _020EA44C + sub r12, r12, #0x1 + movs r0, r0, lsl #0x1 + adc r1, r1, r1 +_020EA44C: + movs r3, r0, lsl #0x1 + adc r1, r1, r1 + mov r2, #0x0 + mov r4, #0x0 + mov lr, #0x200000 +_020EA460: + add r6, r4, lr + cmp r6, r1 + addle r4, r6, lr + suble r1, r1, r6 + addle r2, r2, lr + movs r3, r3, lsl #0x1 + adc r1, r1, r1 + movs lr, lr, lsr #0x1 + bne _020EA460 + mov r0, #0x0 + mov r5, #0x0 + cmp r1, r4 + cmpeq r3, #0x80000000 + blo _020EA4A8 + subs r3, r3, #0x80000000 + sbc r1, r1, r4 + add r4, r4, #0x1 + mov r0, #0x80000000 +_020EA4A8: + movs r3, r3, lsl #0x1 + adc r1, r1, r1 + mov lr, #0x40000000 +_020EA4B4: + add r6, r5, lr + cmp r4, r1 + cmpeq r6, r3 + bhi _020EA4D4 + add r5, r6, lr + subs r3, r3, r6 + sbc r1, r1, r4 + add r0, r0, lr +_020EA4D4: + movs r3, r3, lsl #0x1 + adc r1, r1, r1 + movs lr, lr, lsr #0x1 + bne _020EA4B4 + orrs r1, r1, r3 + biceq r0, r0, #0x1 + movs r1, r2, lsr #0x1 + movs r0, r0, rrx + adcs r0, r0, #0x0 + adc r1, r1, #0x0 + add r1, r1, #0x20000000 + sub r1, r1, #0x100000 + add r1, r1, r12, lsl #0x14 + ldmia sp!, {r4-r6,lr} + bx lr +_020EA510: + cmp r1, #0x0 + bne _020EA540 + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mvn r12, #0x13 + clz r5, r0 + movs r0, r0, lsl r5 + sub r12, r12, r5 + mov r1, r0, lsr #0xb + mov r0, r0, lsl #0x15 + b _020EA438 +_020EA540: + clz r2, r1 + movs r1, r1, lsl r2 + rsb r2, r2, #0x2b + mov r1, r1, lsr #0xb + orr r1, r1, r0, lsr r2 + rsb r2, r2, #0x20 + mov r0, r0, lsl r2 + rsb r12, r2, #0x1 + b _020EA438 +_020EA564: + tst r1, #0x80000000 + beq _020EA580 + bics r3, r1, #0x80000000 + cmpeq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + b _020EA58C +_020EA580: + orrs r2, r0, r1, lsl #0xc + ldmeqia sp!, {r4-r6,lr} + bxeq lr +_020EA58C: + ldr r2, _020EA5AC ; =0x7FF80000 + orr r1, r1, r2 + ldr r3, _020EA5B0 ; =0x021D74A8 + mov r4, #0x21 + str r4, [r3, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020EA5A8: .word 0x7FF00000 +_020EA5AC: .word 0x7FF80000 +_020EA5B0: .word 0x021D74A8 + + arm_func_start _drsb +_drsb: ; 0x020EA5B4 + eor r1, r1, r3 + eor r3, r1, r3 + eor r1, r1, r3 + eor r0, r0, r2 + eor r2, r0, r2 + eor r0, r0, r2 +_dsub: + stmdb sp!, {r4,lr} + eors r12, r1, r3 + eormi r3, r3, #0x80000000 + bmi _020E9B54 +_020EA5DC: + subs r12, r0, r2 + sbcs lr, r1, r3 + bhs _020EA5FC + eor lr, lr, #0x80000000 + adds r2, r2, r12 + adc r3, r3, lr + subs r0, r0, r12 + sbc r1, r1, lr +_020EA5FC: + mov lr, #0x80000000 + mov r12, r1, lsr #0x14 + orr r1, lr, r1, lsl #0xb + orr r1, r1, r0, lsr #0x15 + mov r0, r0, lsl #0xb + movs r4, r12, lsl #0x15 + cmnne r4, #0x200000 + beq _020EA800 + mov r4, r3, lsr #0x14 + orr r3, lr, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs lr, r4, lsl #0x15 + beq _020EA848 +_020EA634: + subs r4, r12, r4 + beq _020EA6DC + cmp r4, #0x20 + ble _020EA670 + cmp r4, #0x38 + movge r4, #0x3f + sub r4, r4, #0x20 + rsb lr, r4, #0x20 + orrs lr, r2, r3, lsl lr + mov r2, r3, lsr r4 + orrne r2, r2, #0x1 + subs r0, r0, r2 + sbcs r1, r1, #0x0 + bmi _020EA698 + b _020EA788 +_020EA670: + rsb lr, r4, #0x20 + movs lr, r2, lsl lr + rsb lr, r4, #0x20 + mov r2, r2, lsr r4 + orr r2, r2, r3, lsl lr + mov r3, r3, lsr r4 + orrne r2, r2, #0x1 + subs r0, r0, r2 + sbcs r1, r1, r3 + bpl _020EA788 +_020EA698: + movs r2, r0, lsl #0x15 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + mov r1, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + tst r2, #0x80000000 + ldmeqia sp!, {r4,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020EA6DC: + subs r0, r0, r2 + sbc r1, r1, r3 + orrs lr, r1, r0 + beq _020EA96C + mov lr, r12, lsl #0x14 + and lr, lr, #0x80000000 + bic r12, r12, #0x800 + cmp r1, #0x0 + bmi _020EA764 + bne _020EA714 + sub r12, r12, #0x20 + movs r1, r0 + mov r0, #0x0 + bmi _020EA730 +_020EA714: + clz r4, r1 + movs r1, r1, lsl r4 + rsb r4, r4, #0x20 + orr r1, r1, r0, lsr r4 + rsb r4, r4, #0x20 + mov r0, r0, lsl r4 + sub r12, r12, r4 +_020EA730: + cmp r12, #0x0 + bgt _020EA76C + rsb r12, r12, #0xc + cmp r12, #0x20 + movge r0, r1 + movge r1, #0x0 + subge r12, r12, #0x20 + rsb r4, r12, #0x20 + mov r0, r0, lsr r12 + orr r0, r0, r1, lsl r4 + orr r1, lr, r1, lsr r12 + ldmia sp!, {r4,lr} + bx lr +_020EA764: + cmp r1, #0x0 + subges r12, r12, #0x1 +_020EA76C: + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmia sp!, {r4,lr} + bx lr +_020EA788: + mov lr, r12, lsl #0x14 + and lr, lr, #0x80000000 + bic r12, r12, #0x800 + cmp r1, #0x0 + bne _020EA7AC + sub r12, r12, #0x20 + movs r1, r0 + mov r0, #0x0 + bmi _020EA7C8 +_020EA7AC: + clz r4, r1 + movs r1, r1, lsl r4 + rsb r4, r4, #0x20 + orr r1, r1, r0, lsr r4 + rsb r4, r4, #0x20 + mov r0, r0, lsl r4 + sub r12, r12, r4 +_020EA7C8: + cmp r12, #0x0 + orrgt r12, r12, lr, lsr #0x14 + bgt _020EA698 + rsb r12, r12, #0xc + cmp r12, #0x20 + movge r0, r1 + movge r1, #0x0 + subge r12, r12, #0x20 + rsb r4, r12, #0x20 + mov r0, r0, lsr r12 + orr r0, r0, r1, lsl r4 + orr r1, lr, r1, lsr r12 + ldmia sp!, {r4,lr} + bx lr +_020EA800: + cmp r12, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + bics r12, r12, #0x800 + beq _020EA86C + orrs r4, r0, r1, lsl #0x1 + bne _020EA948 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r4, r4, lsl #0x15 + beq _020EA934 + cmn r4, #0x200000 + bne _020EA934 + orrs r4, r2, r3, lsl #0x1 + beq _020EA95C + b _020EA948 +_020EA848: + cmp r4, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + bic r12, r12, #0x800 + bics r4, r4, #0x800 + beq _020EA8E4 + orrs r4, r2, r3, lsl #0x1 + bne _020EA948 + b _020EA934 +_020EA86C: + orrs r4, r0, r1, lsl #0x1 + beq _020EA8AC + mov r12, #0x1 + bic r1, r1, #0x80000000 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r4, r4, lsl #0x15 + cmnne r4, #0x200000 + mov r4, r4, lsr #0x15 + orr r4, r4, lr, lsr #0x14 + beq _020EA848 + orr r3, r3, #0x80000000 + orr r12, r12, lr, lsr #0x14 + b _020EA634 +_020EA8AC: + mov r12, r3, lsr #0x14 + mov r1, r3, lsl #0xb + orr r1, r1, r2, lsr #0x15 + mov r0, r2, lsl #0xb + movs r4, r12, lsl #0x15 + beq _020EA8D8 + cmn r4, #0x200000 + bne _020EA900 + orrs r4, r0, r1, lsl #0x1 + bne _020EA94C + b _020EA934 +_020EA8D8: + orrs r4, r0, r1, lsl #0x1 + beq _020EA96C + b _020EA900 +_020EA8E4: + orrs r4, r2, r3, lsl #0x1 + beq _020EA910 + mov r4, #0x1 + bic r3, r3, #0x80000000 + orr r12, r12, lr, lsr #0x14 + orr r4, r4, lr, lsr #0x14 + b _020EA634 +_020EA900: + mov r1, r3 + mov r0, r2 + ldmia sp!, {r4,lr} + bx lr +_020EA910: + cmp r1, #0x0 + subges r12, r12, #0x1 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmia sp!, {r4,lr} + bx lr +_020EA934: + ldr r1, _020EA97C ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020EA948: + mov r1, r3 +_020EA94C: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4,lr} + bx lr +_020EA95C: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4,lr} + bx lr +_020EA96C: + mov r1, #0x0 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020EA97C: .word 0x7FF00000 + + arm_func_start _fadd +_fadd: ; 0x020EA980 + eors r2, r0, r1 + eormi r1, r1, #0x80000000 + bmi _020EB7BC +_020EA98C: + subs r12, r0, r1 + subcc r0, r0, r12 + addcc r1, r1, r12 + mov r2, #0x80000000 + mov r3, r0, lsr #0x17 + orr r0, r2, r0, lsl #0x8 + ands r12, r3, #0xff + cmpne r12, #0xff + beq _020EAA20 + mov r12, r1, lsr #0x17 + orr r1, r2, r1, lsl #0x8 + ands r2, r12, #0xff + beq _020EAA60 +_020EA9C0: + subs r12, r3, r12 + beq _020EA9D8 + rsb r2, r12, #0x20 + movs r2, r1, lsl r2 + mov r1, r1, lsr r12 + orrne r1, r1, #0x1 +_020EA9D8: + adds r0, r0, r1 + blo _020EA9F8 + and r1, r0, #0x1 + orr r0, r1, r0, rrx + add r3, r3, #0x1 + and r2, r3, #0xff + cmp r2, #0xff + beq _020EAB68 +_020EA9F8: + ands r1, r0, #0xff + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + tst r1, #0x80 + bxeq lr + ands r1, r1, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EAA20: + cmp r3, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + ands r3, r3, #0xff + beq _020EAA84 + movs r0, r0, lsl #0x1 + bne _020EAB94 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EAB88 + cmp r12, #0xff + blt _020EAB88 + cmp r1, #0x0 + beq _020EAB88 + b _020EAB94 +_020EAA60: + cmp r3, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + and r3, r3, #0xff + ands r12, r12, #0xff + beq _020EAAE0 +_020EAA78: + movs r1, r1, lsl #0x1 + bne _020EAB94 + b _020EAB88 +_020EAA84: + movs r0, r0, lsl #0x1 + beq _020EAABC + mov r3, #0x1 + mov r0, r0, lsr #0x1 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x8 + ands r12, r12, #0xff + beq _020EAAE0 + cmp r12, #0xff + beq _020EAA78 + orr r1, r1, #0x80000000 + orr r3, r3, r2, lsr #0x17 + orr r12, r12, r2, lsr #0x17 + b _020EA9C0 +_020EAABC: + mov r3, r1, lsr #0x17 + mov r0, r1, lsl #0x9 + ands r3, r3, #0xff + beq _020EAB48 + cmp r3, #0xff + blt _020EAB48 + cmp r0, #0x0 + beq _020EAB88 + b _020EAB80 +_020EAAE0: + movs r1, r1, lsl #0x1 + beq _020EAB50 + mov r1, r1, lsr #0x1 + mov r12, #0x1 + orr r3, r3, r2, lsr #0x17 + orr r12, r12, r2, lsr #0x17 + cmp r0, #0x0 + bmi _020EA9C0 + adds r0, r0, r1 + blo _020EAB14 + and r1, r0, #0x1 + orr r0, r1, r0, rrx + add r12, r12, #0x1 +_020EAB14: + cmp r0, #0x0 + subge r12, r12, #0x1 + ands r1, r0, #0xff + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r12, lsl #0x17 + bxeq lr + tst r1, #0x80 + bxeq lr + ands r1, r1, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EAB48: + mov r0, r1 + bx lr +_020EAB50: + cmp r0, #0x0 + subges r3, r3, #0x1 + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bx lr +_020EAB68: + cmp r3, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EAB80: + mvn r0, #0x80000000 + bx lr +_020EAB88: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EAB94: + mvn r0, #0x80000000 + bx lr +_020EAB9C: + .byte 0x02, 0x01, 0xE0, 0xE3 + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start _dgr +_dgr: ; 0x020EABA4 + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EAC18 + cmn r12, r3, lsl #0x1 + bhs _020EAC2C +_020EABB8: + orrs r12, r3, r1 + bmi _020EABE8 + cmp r1, r3 + cmpeq r0, r2 + movhi r0, #0x1 + movls r0, #0x0 + bx lr +_020EABD4: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EABE8: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x20000000 + msr cpsr_f, r12 + bxeq lr + cmp r3, r1 + cmpeq r2, r0 + movhi r0, #0x1 + movls r0, #0x0 + bx lr +_020EAC18: + bne _020EABD4 + cmp r0, #0x0 + bhi _020EABD4 + cmn r12, r3, lsl #0x1 + blo _020EABB8 +_020EAC2C: + bne _020EABD4 + cmp r2, #0x0 + bhi _020EABD4 + b _020EABB8 + + arm_func_start _dleq +_dleq: ; 0x020EAC3C + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EACBC + cmn r12, r3, lsl #0x1 + bhs _020EACD0 +_020EAC50: + orrs r12, r3, r1 + bmi _020EAC84 + cmp r1, r3 + cmpeq r0, r2 + movls r0, #0x1 + movhi r0, #0x0 + bx lr +_020EAC6C: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x40000000 + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAC84: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x1 + bne _020EACA8 + mrs r12, cpsr + bic r12, r12, #0x20000000 + orr r12, r12, #0x40000000 + msr cpsr_f, r12 + bxeq lr +_020EACA8: + cmp r3, r1 + cmpeq r2, r0 + movls r0, #0x1 + movhi r0, #0x0 + bx lr +_020EACBC: + bne _020EAC6C + cmp r0, #0x0 + bhi _020EAC6C + cmn r12, r3, lsl #0x1 + blo _020EAC50 +_020EACD0: + bne _020EAC6C + cmp r2, #0x0 + bhi _020EAC6C + b _020EAC50 + + arm_func_start _dls +_dls: ; 0x020EACE0 + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EAD58 + cmn r12, r3, lsl #0x1 + bhs _020EAD6C +_020EACF4: + orrs r12, r3, r1 + bmi _020EAD24 + cmp r1, r3 + cmpeq r0, r2 + movcc r0, #0x1 + movcs r0, #0x0 + bx lr +_020EAD10: + mov r0, #0x0 + mrs r12, cpsr + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAD24: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x0 + bne _020EAD44 + mrs r12, cpsr + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bxeq lr +_020EAD44: + cmp r3, r1 + cmpeq r2, r0 + movcc r0, #0x1 + movcs r0, #0x0 + bx lr +_020EAD58: + bne _020EAD10 + cmp r0, #0x0 + bhi _020EAD10 + cmn r12, r3, lsl #0x1 + blo _020EACF4 +_020EAD6C: + bne _020EAD10 + cmp r2, #0x0 + bhi _020EAD10 + b _020EACF4 + + arm_func_start _deq +_deq: ; 0x020EAD7C + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EADE4 + cmn r12, r3, lsl #0x1 + bhs _020EADF8 +_020EAD90: + orrs r12, r3, r1 + bmi _020EADC0 + cmp r1, r3 + cmpeq r0, r2 + moveq r0, #0x1 + movne r0, #0x0 + bx lr +_020EADAC: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EADC0: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x1 + bxeq lr + cmp r3, r1 + cmpeq r2, r0 + moveq r0, #0x1 + movne r0, #0x0 + bx lr +_020EADE4: + bne _020EADAC + cmp r0, #0x0 + bhi _020EADAC + cmn r12, r3, lsl #0x1 + blo _020EAD90 +_020EADF8: + bne _020EADAC + cmp r2, #0x0 + bhi _020EADAC + b _020EAD90 + + arm_func_start _dneq +_dneq: ; 0x020EAE08 + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EAE70 + cmn r12, r3, lsl #0x1 + bhs _020EAE84 +_020EAE1C: + orrs r12, r3, r1 + bmi _020EAE4C + cmp r1, r3 + cmpeq r0, r2 + movne r0, #0x1 + moveq r0, #0x0 + bx lr +_020EAE38: + mov r0, #0x1 + mrs r12, cpsr + bic r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EAE4C: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x0 + bxeq lr + cmp r3, r1 + cmpeq r2, r0 + movne r0, #0x1 + moveq r0, #0x0 + bx lr +_020EAE70: + bne _020EAE38 + cmp r0, #0x0 + bhi _020EAE38 + cmn r12, r3, lsl #0x1 + blo _020EAE1C +_020EAE84: + bne _020EAE38 + cmp r2, #0x0 + bhi _020EAE38 + b _020EAE1C + + arm_func_start _fgeq +_fgeq: ; 0x020EAE94 + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + cmpcs r3, r1, lsl #0x1 + blo _020EAEDC + cmp r0, #0x0 + bicmi r0, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r1, #0x0 + bicmi r1, r1, #0x80000000 + rsbmi r1, r1, #0x0 + cmp r0, r1 + movge r0, #0x1 + movlt r0, #0x0 + mrs r12, cpsr + biclt r12, r12, #0x20000000 + orrge r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAEDC: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _fgr +_fgr: ; 0x020EAEF0 + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + cmpcs r3, r1, lsl #0x1 + blo _020EAF38 + cmp r0, #0x0 + bicmi r0, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r1, #0x0 + bicmi r1, r1, #0x80000000 + rsbmi r1, r1, #0x0 + cmp r0, r1 + movgt r0, #0x1 + movle r0, #0x0 + mrs r12, cpsr + bicle r12, r12, #0x20000000 + orrgt r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAF38: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _fleq +_fleq: ; 0x020EAF4C + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + cmpcs r3, r1, lsl #0x1 + blo _020EAF9C + cmp r0, #0x0 + bicmi r0, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r1, #0x0 + bicmi r1, r1, #0x80000000 + rsbmi r1, r1, #0x0 + cmp r0, r1 + movle r0, #0x1 + movgt r0, #0x0 + mrs r12, cpsr + orrgt r12, r12, #0x20000000 + bicgt r12, r12, #0x40000000 + bicle r12, r12, #0x20000000 + orrle r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EAF9C: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x40000000 + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _fls +_fls: ; 0x020EAFB4 + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + cmpcs r3, r1, lsl #0x1 + blo _020EAFFC + cmp r0, #0x0 + bicmi r0, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r1, #0x0 + bicmi r1, r1, #0x80000000 + rsbmi r1, r1, #0x0 + cmp r0, r1 + movlt r0, #0x1 + movge r0, #0x0 + mrs r12, cpsr + orrge r12, r12, #0x20000000 + biclt r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAFFC: + mov r0, #0x0 + mrs r12, cpsr + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _feq +_feq: ; 0x020EB010 + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + blo _020EB064 + cmp r3, r1, lsl #0x1 + blo _020EB064 + orr r3, r0, r1 + movs r3, r3, lsl #0x1 + moveq r0, #0x0 + bne _020EB044 + mrs r12, cpsr + orr r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EB044: + cmp r0, r1 + movne r0, #0x1 + moveq r0, #0x0 + mrs r12, cpsr + bicne r12, r12, #0x40000000 + orreq r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EB064: + mov r0, #0x1 + mrs r12, cpsr + bic r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _frdiv +_frdiv: ; 0x020EB078 + eor r0, r0, r1 + eor r1, r0, r1 + eor r0, r0, r1 + + arm_func_start _fdiv +_fdiv: ; 0x020EB084 + stmdb sp!, {lr} + mov r12, #0xff + ands r3, r12, r0, lsr #0x17 + cmpne r3, #0xff + beq _020EB258 + ands r12, r12, r1, lsr #0x17 + cmpne r12, #0xff + beq _020EB294 + orr r1, r1, #0x800000 + orr r0, r0, #0x800000 + bic r2, r0, #0xff000000 + bic lr, r1, #0xff000000 +_020EB0B4: + cmp r2, lr + movcc r2, r2, lsl #0x1 + subcc r3, r3, #0x1 + teq r0, r1 + sub r0, pc, #0x94 + ldrb r1, [r0, lr, lsr #0xf] + rsb lr, lr, #0x0 + mov r0, lr, asr #0x1 + mul r0, r1, r0 + add r0, r0, #0x80000000 + mov r0, r0, lsr #0x6 + mul r0, r1, r0 + mov r0, r0, lsr #0xe + mul r1, lr, r0 + sub r12, r3, r12 + mov r1, r1, lsr #0xc + mul r1, r0, r1 + mov r0, r0, lsl #0xe + add r0, r0, r1, lsr #0xf + umull r1, r0, r2, r0 + mov r3, r0 + orrmi r0, r0, #0x80000000 + adds r12, r12, #0x7e + bmi _020EB35C + cmp r12, #0xfe + bge _020EB410 + add r0, r0, r12, lsl #0x17 + mov r12, r1, lsr #0x1c + cmp r12, #0x7 + beq _020EB238 + add r0, r0, r1, lsr #0x1f + ldmia sp!, {lr} + bx lr +_020EB138: + .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9 + .byte 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA + .byte 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4, 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE + .byte 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8, 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2 + .byte 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD, 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8 + .byte 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3, 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF + .byte 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA, 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6 + .byte 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2, 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF + .byte 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7 + .byte 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1 + .byte 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E, 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B + .byte 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95 + .byte 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90 + .byte 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B + .byte 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86 + .byte 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82 + .byte 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80 +_020EB238: + mov r1, r3, lsl #0x1 + add r1, r1, #0x1 + rsb lr, lr, #0x0 + mul r1, lr, r1 + cmp r1, r2, lsl #0x18 + addmi r0, r0, #0x1 + ldmia sp!, {lr} + bx lr +_020EB258: + eor lr, r0, r1 + and lr, lr, #0x80000000 + cmp r3, #0x0 + beq _020EB2B0 + movs r0, r0, lsl #0x9 + bne _020EB3F8 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EB3E8 + cmp r12, #0xff + blt _020EB3E8 + cmp r1, #0x0 + beq _020EB404 + b _020EB3E0 +_020EB294: + eor lr, r0, r1 + and lr, lr, #0x80000000 + cmp r12, #0x0 + beq _020EB314 +_020EB2A4: + movs r1, r1, lsl #0x9 + bne _020EB3E0 + b _020EB430 +_020EB2B0: + movs r2, r0, lsl #0x9 + beq _020EB2E4 + clz r3, r2 + movs r2, r2, lsl r3 + rsb r3, r3, #0x0 + mov r2, r2, lsr #0x8 + ands r12, r12, r1, lsr #0x17 + beq _020EB33C + cmp r12, #0xff + beq _020EB2A4 + orr r1, r1, #0x800000 + bic lr, r1, #0xff000000 + b _020EB0B4 +_020EB2E4: + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EB308 + cmp r12, #0xff + blt _020EB430 + cmp r1, #0x0 + beq _020EB430 + b _020EB3E0 +_020EB308: + cmp r1, #0x0 + beq _020EB404 + b _020EB430 +_020EB314: + movs r12, r1, lsl #0x9 + beq _020EB3E8 + mov lr, r12 + clz r12, lr + movs lr, lr, lsl r12 + rsb r12, r12, #0x0 + mov lr, lr, lsr #0x8 + orr r0, r0, #0x800000 + bic r2, r0, #0xff000000 + b _020EB0B4 +_020EB33C: + movs r12, r1, lsl #0x9 + beq _020EB3E8 + mov lr, r12 + clz r12, lr + movs lr, lr, lsl r12 + rsb r12, r12, #0x0 + mov lr, lr, lsr #0x8 + b _020EB0B4 +_020EB35C: + and r0, r0, #0x80000000 + cmn r12, #0x18 + beq _020EB3D0 + bmi _020EB428 + add r1, r12, #0x17 + mov r2, r2, lsl r1 + rsb r12, r12, #0x0 + mov r3, r3, lsr r12 + orr r0, r0, r3 + rsb lr, lr, #0x0 + mul r1, lr, r3 + cmp r1, r2 + ldmeqia sp!, {lr} + bxeq lr + add r1, r1, lr + cmp r1, r2 + beq _020EB3C4 + addmi r0, r0, #0x1 + subpl r1, r1, lr + add r1, lr, r1, lsl #0x1 + cmp r1, r2, lsl #0x1 + and r3, r0, #0x1 + addmi r0, r0, #0x1 + addeq r0, r0, r3 + ldmia sp!, {lr} + bx lr +_020EB3C4: + add r0, r0, #0x1 + ldmia sp!, {lr} + bx lr +_020EB3D0: + cmn r2, lr + addne r0, r0, #0x1 + ldmia sp!, {lr} + bx lr +_020EB3E0: + mov r0, r1 + b _020EB3F8 +_020EB3E8: + mov r0, #0xff000000 + orr r0, lr, r0, lsr #0x1 + ldmia sp!, {lr} + bx lr +_020EB3F8: + mvn r0, #0x80000000 + ldmia sp!, {lr} + bx lr +_020EB404: + mvn r0, #0x80000000 + ldmia sp!, {lr} + bx lr +_020EB410: + tst r0, #0x80000000 + mov r0, #0xff000000 + movne r0, r0, asr #0x1 + moveq r0, r0, lsr #0x1 + ldmia sp!, {lr} + bx lr +_020EB428: + ldmia sp!, {lr} + bx lr +_020EB430: + mov r0, lr + ldmia sp!, {lr} + bx lr +_f2d: + and r2, r0, #0x80000000 + mov r12, r0, lsr #0x17 + mov r3, r0, lsl #0x9 + ands r12, r12, #0xff + beq _020EB46C + cmp r12, #0xff + beq _020EB498 +_020EB458: + add r12, r12, #0x380 + mov r0, r3, lsl #0x14 + orr r1, r2, r3, lsr #0xc + orr r1, r1, r12, lsl #0x14 + bx lr +_020EB46C: + cmp r3, #0x0 + bne _020EB480 + mov r1, r2 + mov r0, #0x0 + bx lr +_020EB480: + mov r3, r3, lsr #0x1 + clz r12, r3 + movs r3, r3, lsl r12 + rsb r12, r12, #0x1 + add r3, r3, r3 + b _020EB458 +_020EB498: + cmp r3, #0x0 + bhi _020EB4B0 + ldr r1, _020EB4BC ; =0x7FF00000 + orr r1, r1, r2 + mov r0, #0x0 + bx lr +_020EB4B0: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + bx lr + .balign 4 +_020EB4BC: .word 0x7FF00000 + + arm_func_start _ffix +_ffix: ; 0x020EB4C0 + bic r1, r0, #0x80000000 + mov r2, #0x9e + subs r2, r2, r1, lsr #0x17 + ble _020EB4E8 + mov r1, r1, lsl #0x8 + orr r1, r1, #0x80000000 + cmp r0, #0x0 + mov r0, r1, lsr r2 + rsbmi r0, r0, #0x0 + bx lr +_020EB4E8: + mvn r0, r0, asr #0x1f + add r0, r0, #0x80000000 + bx lr + + arm_func_start _ffixu +_ffixu: ; 0x020EB4F4 + tst r0, #0x80000000 + bne _020EB518 + mov r1, #0x9e + subs r1, r1, r0, lsr #0x17 + blt _020EB52C + mov r2, r0, lsl #0x8 + orr r0, r2, #0x80000000 + mov r0, r0, lsr r1 + bx lr +_020EB518: + mov r2, #0xff000000 + cmp r2, r0, lsl #0x1 + movcs r0, #0x0 + mvncc r0, #0x0 + bx lr +_020EB52C: + mvn r0, #0x0 + bx lr + + arm_func_start _fflt +_fflt: ; 0x020EB534 + ands r2, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r0, #0x0 + bxeq lr + clz r3, r0 + movs r0, r0, lsl r3 + rsb r3, r3, #0x9e + ands r1, r0, #0xff + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bxeq lr + tst r1, #0x80 + bxeq lr + ands r3, r1, #0x7f + andeqs r3, r0, #0x1 + addne r0, r0, #0x1 + bx lr + + arm_func_start _ffltu +_ffltu: ; 0x020EB57C + cmp r0, #0x0 + bxeq lr + mov r3, #0x9e + bmi _020EB598 + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 +_020EB598: + ands r2, r0, #0xff + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bxeq lr + tst r2, #0x80 + bxeq lr + ands r1, r2, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr + + arm_func_start _fmul +_fmul: ; 0x020EB5C4 + eor r2, r0, r1 + and r2, r2, #0x80000000 + mov r12, #0xff + ands r3, r12, r0, lsr #0x17 + mov r0, r0, lsl #0x8 + cmpne r3, #0xff + beq _020EB640 + orr r0, r0, #0x80000000 + ands r12, r12, r1, lsr #0x17 + mov r1, r1, lsl #0x8 + cmpne r12, #0xff + beq _020EB680 + orr r1, r1, #0x80000000 +_020EB5F8: + add r12, r3, r12 + umull r1, r3, r0, r1 + movs r0, r3 + addpl r0, r0, r0 + subpl r12, r12, #0x1 + subs r12, r12, #0x7f + bmi _020EB70C + cmp r12, #0xfe + bge _020EB778 + ands r3, r0, #0xff + orr r0, r2, r0, lsr #0x8 + add r0, r0, r12, lsl #0x17 + tst r3, #0x80 + bxeq lr + orrs r1, r1, r3, lsl #0x19 + andeqs r3, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EB640: + cmp r3, #0x0 + beq _020EB694 + movs r0, r0, lsl #0x1 + bne _020EB768 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EB674 + cmp r12, #0xff + blt _020EB75C + cmp r1, #0x0 + beq _020EB75C + b _020EB768 +_020EB674: + cmp r1, #0x0 + beq _020EB770 + b _020EB75C +_020EB680: + cmp r12, #0x0 + beq _020EB6F0 +_020EB688: + movs r1, r1, lsl #0x1 + bne _020EB768 + b _020EB75C +_020EB694: + movs r0, r0, lsl #0x1 + beq _020EB6CC + mov r0, r0, lsr #0x1 + clz r3, r0 + movs r0, r0, lsl r3 + rsb r3, r3, #0x1 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x8 + ands r12, r12, #0xff + beq _020EB6F0 + cmp r12, #0xff + beq _020EB688 + orr r1, r1, #0x80000000 + b _020EB5F8 +_020EB6CC: + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EB79C + cmp r12, #0xff + blt _020EB79C + cmp r1, #0x0 + beq _020EB770 + b _020EB768 +_020EB6F0: + movs r1, r1, lsl #0x1 + beq _020EB79C + mov r1, r1, lsr #0x1 + clz r12, r1 + movs r1, r1, lsl r12 + rsb r12, r12, #0x1 + b _020EB5F8 +_020EB70C: + cmn r12, #0x18 + beq _020EB754 + bmi _020EB794 + cmp r1, #0x0 + orrne r0, r0, #0x1 + mov r3, r0 + mov r0, r0, lsr #0x8 + rsb r12, r12, #0x0 + orr r0, r2, r0, lsr r12 + rsb r12, r12, #0x18 + movs r1, r3, lsl r12 + bxeq lr + tst r1, #0x80000000 + bxeq lr + movs r1, r1, lsl #0x1 + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EB754: + mov r0, r0, lsl #0x1 + b _020EB784 +_020EB75C: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EB768: + mvn r0, #0x80000000 + bx lr +_020EB770: + mvn r0, #0x80000000 + bx lr +_020EB778: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EB784: + movs r1, r0 + mov r0, r2 + addne r0, r0, #0x1 + bx lr +_020EB794: + mov r0, r2 + bx lr +_020EB79C: + mov r0, r2 + bx lr + + arm_func_start _frsb +_frsb: ; 0x020EB7A4 + eor r0, r0, r1 + eor r1, r0, r1 + eor r0, r0, r1 + + arm_func_start _fsub +_fsub: ; 0x020EB7B0 + eors r2, r0, r1 + eormi r1, r1, #0x80000000 + bmi _020EA98C +_020EB7BC: + subs r12, r0, r1 + eorcc r12, r12, #0x80000000 + subcc r0, r0, r12 + addcc r1, r1, r12 + mov r2, #0x80000000 + mov r3, r0, lsr #0x17 + orr r0, r2, r0, lsl #0x8 + ands r12, r3, #0xff + cmpne r12, #0xff + beq _020EB8D8 + mov r12, r1, lsr #0x17 + orr r1, r2, r1, lsl #0x8 + ands r2, r12, #0xff + beq _020EB918 +_020EB7F4: + subs r12, r3, r12 + beq _020EB83C + rsb r2, r12, #0x20 + movs r2, r1, lsl r2 + mov r1, r1, lsr r12 + orrne r1, r1, #0x1 + subs r0, r0, r1 + bpl _020EB880 + ands r1, r0, #0xff + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + tst r1, #0x80 + bxeq lr + ands r1, r1, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EB83C: + subs r0, r0, r1 + beq _020EB9E4 + mov r2, r3, lsl #0x17 + and r2, r2, #0x80000000 + bic r3, r3, #0x100 + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 + cmp r3, #0x0 + bgt _020EB870 + rsb r3, r3, #0x9 + orr r0, r2, r0, lsr r3 + bx lr +_020EB870: + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bx lr +_020EB880: + mov r2, r3, lsl #0x17 + and r2, r2, #0x80000000 + bic r3, r3, #0x100 + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 + cmp r3, #0x0 + bgt _020EB8AC + rsb r3, r3, #0x9 + orr r0, r2, r0, lsr r3 + bx lr +_020EB8AC: + ands r1, r0, #0xff + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bxeq lr + tst r1, #0x80 + bxeq lr + ands r1, r1, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EB8D8: + cmp r3, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + ands r3, r3, #0xff + beq _020EB940 + movs r0, r0, lsl #0x1 + bne _020EBA18 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EBA0C + cmp r12, #0xff + blt _020EBA0C + cmp r1, #0x0 + beq _020EBA20 + b _020EBA18 +_020EB918: + cmp r12, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + and r3, r3, #0xff + ands r12, r12, #0xff + beq _020EB9A8 +_020EB930: + eor r2, r2, #0x80000000 + movs r1, r1, lsl #0x1 + bne _020EBA18 + b _020EBA0C +_020EB940: + movs r0, r0, lsl #0x1 + beq _020EB978 + mov r0, r0, lsr #0x1 + mov r3, #0x1 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x8 + ands r12, r12, #0xff + beq _020EB9A8 + cmp r12, #0xff + beq _020EB930 + orr r1, r1, #0x80000000 + orr r3, r3, r2, lsr #0x17 + orr r12, r12, r2, lsr #0x17 + b _020EB7F4 +_020EB978: + mov r3, r1, lsr #0x17 + mov r0, r1, lsl #0x9 + ands r2, r3, #0xff + beq _020EB99C + cmp r2, #0xff + blt _020EB9C4 + cmp r0, #0x0 + bne _020EBA04 + b _020EBA0C +_020EB99C: + cmp r0, #0x0 + beq _020EB9E4 + b _020EB9C4 +_020EB9A8: + movs r1, r1, lsl #0x1 + beq _020EB9CC + mov r1, r1, lsr #0x1 + mov r12, #0x1 + orr r12, r12, r2, lsr #0x17 + orr r3, r3, r2, lsr #0x17 + b _020EB7F4 +_020EB9C4: + mov r0, r1 + bx lr +_020EB9CC: + cmp r0, #0x0 + subges r3, r3, #0x1 + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bx lr +_020EB9E4: + mov r0, #0x0 + bx lr +_020EB9EC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x01, 0x30, 0x53, 0xA2, 0x00, 0x00, 0x80, 0xE0, 0xA0, 0x04, 0xA0, 0xE1, 0x83, 0x0B, 0x80, 0xE1 + .byte 0x1E, 0xFF, 0x2F, 0xE1 +_020EBA04: + mvn r0, #0x80000000 + bx lr +_020EBA0C: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EBA18: + mvn r0, #0x80000000 + bx lr +_020EBA20: + mvn r0, #0x80000000 + bx lr + + arm_func_start _ll_mod +_ll_mod: ; 0x020EBA28 + stmdb sp!, {r4-r7,r11-r12,lr} + mov r4, r1 + orr r4, r4, #0x1 + b _020EBA48 + + arm_func_start _ll_sdiv +_ll_sdiv: ; 0x020EBA38 + stmdb sp!, {r4-r7,r11-r12,lr} + eor r4, r1, r3 + mov r4, r4, asr #0x1 + mov r4, r4, lsl #0x1 +_020EBA48: + orrs r5, r3, r2 + bne _020EBA58 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBA58: + mov r5, r0, lsr #0x1f + add r5, r5, r1 + mov r6, r2, lsr #0x1f + add r6, r6, r3 + orrs r6, r5, r6 + bne _020EBA8C + mov r1, r2 + bl _s32_div_f + ands r4, r4, #0x1 + movne r0, r1 + mov r1, r0, asr #0x1f + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBA8C: + cmp r1, #0x0 + bge _020EBA9C + rsbs r0, r0, #0x0 + rsc r1, r1, #0x0 +_020EBA9C: + cmp r3, #0x0 + bge _020EBAAC + rsbs r2, r2, #0x0 + rsc r3, r3, #0x0 +_020EBAAC: + orrs r5, r1, r0 + beq _020EBBD0 + mov r5, #0x0 + mov r6, #0x1 + cmp r3, #0x0 + bmi _020EBAD8 +_020EBAC4: + add r5, r5, #0x1 + adds r2, r2, r2 + adcs r3, r3, r3 + bpl _020EBAC4 + add r6, r6, r5 +_020EBAD8: + cmp r1, #0x0 + blt _020EBAF8 +_020EBAE0: + cmp r6, #0x1 + beq _020EBAF8 + sub r6, r6, #0x1 + adds r0, r0, r0 + adcs r1, r1, r1 + bpl _020EBAE0 +_020EBAF8: + mov r7, #0x0 + mov r12, #0x0 + mov r11, #0x0 + b _020EBB20 +_020EBB08: + orr r12, r12, #0x1 + subs r6, r6, #0x1 + beq _020EBB78 + adds r0, r0, r0 + adcs r1, r1, r1 + adcs r7, r7, r7 +_020EBB20: + subs r0, r0, r2 + sbcs r1, r1, r3 + sbcs r7, r7, #0x0 + adds r12, r12, r12 + adc r11, r11, r11 + cmp r7, #0x0 + bge _020EBB08 +_020EBB3C: + subs r6, r6, #0x1 + beq _020EBB70 + adds r0, r0, r0 + adcs r1, r1, r1 + adc r7, r7, r7 + adds r0, r0, r2 + adcs r1, r1, r3 + adc r7, r7, #0x0 + adds r12, r12, r12 + adc r11, r11, r11 + cmp r7, #0x0 + bge _020EBB08 + b _020EBB3C +_020EBB70: + adds r0, r0, r2 + adc r1, r1, r3 +_020EBB78: + ands r7, r4, #0x1 + moveq r0, r12 + moveq r1, r11 + beq _020EBBB0 + subs r7, r5, #0x20 + movge r0, r1, lsr r7 + bge _020EBBD4 + rsb r7, r5, #0x20 + mov r0, r0, lsr r5 + orr r0, r0, r1, lsl r7 + mov r1, r1, lsr r5 + b _020EBBB0 +_020EBBA8: + .byte 0x31, 0x07, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 +_020EBBB0: + cmp r4, #0x0 + blt _020EBBC0 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBBC0: + rsbs r0, r0, #0x0 + rsc r1, r1, #0x0 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBBD0: + mov r0, #0x0 +_020EBBD4: + mov r1, #0x0 + cmp r4, #0x0 + blt _020EBBC0 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr + + arm_func_start _ll_udiv +_ll_udiv: ; 0x020EBBE8 + stmdb sp!, {r4-r7,r11-r12,lr} + mov r4, #0x0 + b _020EBBFC + + arm_func_start _ull_mod +_ull_mod: ; 0x020EBBF4 + stmdb sp!, {r4-r7,r11-r12,lr} + mov r4, #0x1 +_020EBBFC: + orrs r5, r3, r2 + bne _020EBC0C + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBC0C: + orrs r5, r1, r3 + bne _020EBAAC + mov r1, r2 + bl _u32_div_not_0_f +_020EBC1C: + .byte 0x00, 0x00, 0x54, 0xE3 + .byte 0x01, 0x00, 0xA0, 0x11, 0x00, 0x10, 0xA0, 0xE3, 0xF0, 0x58, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start _ll_mul +_ll_mul: ; 0x020EBC30 + stmdb sp!, {r4-r5,lr} + umull r5, r4, r0, r2 + mla r4, r0, r3, r4 + mla r4, r2, r1, r4 + mov r1, r4 + mov r0, r5 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start _ll_shl +_ll_shl: ; 0x020EBC50 + ands r2, r2, #0x3f + bxeq lr + subs r3, r2, #0x20 + bge _020EBC74 + rsb r3, r2, #0x20 + mov r1, r1, lsl r2 + orr r1, r1, r0, lsr r3 + mov r0, r0, lsl r2 + bx lr +_020EBC74: + mov r1, r0, lsl r3 + mov r0, #0x0 + bx lr + + arm_func_start _s32_div_f +_s32_div_f: ; 0x20EBC80 + ; Test whether the args have different signs + eor ip, r0, r1 + and ip, ip, #0x80000000 + ; Test the sign of the numerator, and make it positive + cmp r0, #0x0 + rsblt r0, r0, #0x0 + addlt ip, ip, #1 + ; Make the denominator positive, also test for div0 + cmp r1, #0x0 + rsblt r1, r1, #0x0 + beq _020EBE78 + ; If the numerator is less than the denominator, return (0, numerator) + cmp r0, r1 + movcc r1, r0 + movcc r0, #0x0 + bcc _020EBE78 + ; Do the actual division + mov r2, #0x1c + mov r3, r0, lsr #0x4 + cmp r1, r3, lsr #0xc + suble r2, r2, #0x10 + movle r3, r3, lsr #0x10 + cmp r1, r3, lsr #0x4 + suble r2, r2, #0x8 + movle r3, r3, lsr #0x8 + cmp r1, r3 + suble r2, r2, #0x4 + movle r3, r3, lsr #0x4 + mov r0, r0, lsl r2 + rsb r1, r1, #0x0 + adds r0, r0, r0 + add r2, r2, r2, lsl #0x1 + add pc, pc, r2, lsl #0x2 + nop + .rept 32 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + .endr + mov r1, r3 +_020EBE78: + ; If the signs differed originally, negate quotient + ands r3, ip, #0x80000000 + rsbne r0, r0, #0x0 + ; If the numerator was negative, negate remainder + ands r3, ip, #0x1 + rsbne r1, r1, #0x0 + bx lr + +; required to make the linker happy : + + arm_func_start _u32_div_f +_u32_div_f: ; 0x020EBE8C + cmp r1, #0x0 + bxeq lr ; About as wrong as we can be + arm_func_start _u32_div_not_0_f +_u32_div_not_0_f: + cmp r0, r1 + movcc r1, r0 + movcc r0, #0x0 + bxcc lr + mov r2, #0x1c + mov r3, r0, lsr #0x4 + cmp r1, r3, lsr #0xc + suble r2, r2, #0x10 + movle r3, r3, lsr #0x10 + cmp r1, r3, lsr #0x4 + suble r2, r2, #0x8 + movle r3, r3, lsr #0x8 + cmp r1, r3 + suble r2, r2, #0x4 + movle r3, r3, lsr #0x4 + mov r0, r0, lsl r2 + rsb r1, r1, #0x0 + adds r0, r0, r0 + add r2, r2, r2, lsl #0x1 + add pc, pc, r2, lsl #0x2 + nop + .rept 32 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + .endr + mov r1, r3 + bx lr + + arm_func_start _drdiv +_drdiv: ; 0x020EC070 + eor r1, r1, r3 + eor r3, r1, r3 + eor r1, r1, r3 + eor r0, r0, r2 + eor r2, r0, r2 + eor r0, r0, r2 + + arm_func_start _ddiv +_ddiv: ; 0x020EC088 + stmdb sp!, {r4-r6,lr} + ldr lr, _020EC5C8 ; =0x00000FFE + eor r4, r1, r3 + ands r12, lr, r1, lsr #0x13 + cmpne r12, lr + beq _020EC434 + bic r1, r1, lr, lsl #0x14 + orr r1, r1, #0x100000 + add r12, r12, r4, lsr #0x1f +_020EC0AC: + ands r4, lr, r3, lsr #0x13 + cmpne r4, lr + beq _020EC4CC + bic r3, r3, lr, lsl #0x14 + orr r3, r3, #0x100000 +_020EC0C0: + sub r12, r12, r4 + cmp r1, r3 + cmpeq r0, r2 + bhs _020EC0DC + adds r0, r0, r0 + adc r1, r1, r1 + sub r12, r12, #0x2 +_020EC0DC: + sub r4, pc, #0x24 + ldrb lr, [r4, r3, lsr #0xc] + rsbs r2, r2, #0x0 + rsc r3, r3, #0x0 + mov r4, #0x20000000 + mla r5, lr, r3, r4 + mov r6, r3, lsl #0xa + mov r5, r5, lsr #0x7 + mul lr, r5, lr + orr r6, r6, r2, lsr #0x16 + mov lr, lr, lsr #0xd + mul r5, lr, r6 + mov r6, r1, lsl #0xa + orr r6, r6, r0, lsr #0x16 + mov r5, r5, lsr #0x10 + mul r5, lr, r5 + mov lr, lr, lsl #0xe + add lr, lr, r5, lsr #0x10 + umull r5, r6, lr, r6 + umull r4, r5, r6, r2 + mla r5, r3, r6, r5 + mov r4, r4, lsr #0x1a + orr r4, r4, r5, lsl #0x6 + add r4, r4, r0, lsl #0x2 + umull lr, r5, r4, lr + mov r4, #0x0 + adds r5, r5, r6, lsl #0x18 + adc r4, r4, r6, lsr #0x8 + cmp r12, #0x800 + bge _020EC2C0 + add r12, r12, #0x7f0 + adds r12, r12, #0xc + bmi _020EC2D8 + orr r1, r4, r12, lsl #0x1f + bic r12, r12, #0x1 + add r1, r1, r12, lsl #0x13 + tst lr, #0x80000000 + bne _020EC1B0 + rsbs r2, r2, #0x0 + mov r4, r4, lsl #0x1 + add r4, r4, r5, lsr #0x1f + mul lr, r2, r4 + mov r6, #0x0 + mov r4, r5, lsl #0x1 + orr r4, r4, #0x1 + umlal r6, lr, r4, r2 + rsc r3, r3, #0x0 + mla lr, r4, r3, lr + cmp lr, r0, lsl #0x15 + bmi _020EC1B0 + mov r0, r5 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC1B0: + adds r0, r5, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC1C0: + .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1 + .byte 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4 + .byte 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE, 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8 + .byte 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2, 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD + .byte 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8, 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3 + .byte 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF, 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA + .byte 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6, 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2 + .byte 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF, 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB + .byte 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4 + .byte 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1, 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E + .byte 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98 + .byte 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92 + .byte 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90, 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D + .byte 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89 + .byte 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84 + .byte 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80 +_020EC2C0: + movs r1, r12, lsl #0x1f + orr r1, r1, #0x7f000000 + orr r1, r1, #0xf00000 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC2D8: + mvn r6, r12, asr #0x1 + cmp r6, #0x34 + bgt _020EC424 + beq _020EC400 + cmp r6, #0x14 + bge _020EC320 + rsb r6, r6, #0x13 + mov lr, r0, lsl r6 + rsb r6, r6, #0x14 + mov r0, r5, lsr r6 + rsb r6, r6, #0x20 + orr r0, r0, r4, lsl r6 + rsb r6, r6, #0x20 + mov r4, r4, lsr r6 + orr r1, r4, r12, lsl #0x1f + mov r12, lr + mov lr, #0x0 + b _020EC350 +_020EC320: + rsb r6, r6, #0x33 + mov lr, r1, lsl r6 + mov r1, r12, lsl #0x1f + rsb r6, r6, #0x20 + orr r12, lr, r0, lsr r6 + rsb r6, r6, #0x20 + mov lr, r0, lsl r6 + mov r5, r5, lsr #0x15 + orr r5, r5, r4, lsl #0xb + rsb r6, r6, #0x1f + mov r0, r5, lsr r6 + mov r4, #0x0 +_020EC350: + rsbs r2, r2, #0x0 + mul r4, r2, r4 + mov r5, #0x0 + umlal r5, r4, r2, r0 + rsc r3, r3, #0x0 + mla r4, r0, r3, r4 + cmp r4, r12 + cmpeq r5, lr + ldmeqia sp!, {r4-r6,lr} + bxeq lr + adds r5, r5, r2 + adc r4, r4, r3 + cmp r4, r12 + bmi _020EC3F4 + bne _020EC398 + cmp r5, lr + beq _020EC3E4 + blo _020EC3F4 +_020EC398: + subs r5, r5, r2 + sbc r4, r4, r3 +_020EC3A0: + adds r5, r5, r5 + adc r4, r4, r4 + adds r5, r5, r2 + adc r4, r4, r3 + adds lr, lr, lr + adc r12, r12, r12 + cmp r4, r12 + bmi _020EC3E4 + ldmneia sp!, {r4-r6,lr} + bxne lr + cmp r5, lr + blo _020EC3E4 + ldmneia sp!, {r4-r6,lr} + bxne lr + tst r0, #0x1 + ldmeqia sp!, {r4-r6,lr} + bxeq lr +_020EC3E4: + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC3F4: + adds r0, r0, #0x1 + adc r1, r1, #0x0 + b _020EC3A0 +_020EC400: + rsbs r2, r2, #0x0 + rsc r3, r3, #0x0 + cmp r1, r3 + cmpeq r0, r2 + mov r1, r12, lsl #0x1f + mov r0, #0x0 + movne r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC424: + mov r1, r12, lsl #0x1f + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC434: + orrs r5, r0, r1, lsl #0x1 + beq _020EC558 + cmp r12, lr + beq _020EC49C + movs r1, r1, lsl #0xc + beq _020EC478 + clz r5, r1 + movs r1, r1, lsl r5 + sub r12, r12, r5 + add r5, r12, #0x1f + mov r1, r1, lsr #0xb + orr r1, r1, r0, lsr r5 + rsb r5, r5, #0x20 + mov r0, r0, lsl r5 + mov r12, r12, lsl #0x1 + orr r12, r12, r4, lsr #0x1f + b _020EC0AC +_020EC478: + mvn r12, #0x13 + clz r5, r0 + movs r0, r0, lsl r5 + sub r12, r12, r5 + mov r1, r0, lsr #0xb + mov r0, r0, lsl #0x15 + mov r12, r12, lsl #0x1 + orr r12, r12, r4, lsr #0x1f + b _020EC0AC +_020EC49C: + orrs r5, r0, r1, lsl #0xc + bne _020EC580 + bic r5, r3, #0x80000000 + cmp r5, lr, lsl #0x13 + bhs _020EC4C0 + and r5, r3, #0x80000000 + eor r1, r5, r1 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC4C0: + orrs r5, r2, r3, lsl #0xc + bne _020EC5A0 + b _020EC5B8 +_020EC4CC: + orrs r5, r2, r3, lsl #0x1 + beq _020EC544 + cmp r4, lr + beq _020EC52C + movs r3, r3, lsl #0xc + beq _020EC50C + clz r5, r3 + movs r3, r3, lsl r5 + sub r4, r4, r5 + add r5, r4, #0x1f + mov r3, r3, lsr #0xb + orr r3, r3, r2, lsr r5 + rsb r5, r5, #0x20 + mov r2, r2, lsl r5 + mov r4, r4, lsl #0x1 + b _020EC0C0 +_020EC50C: + mvn r4, #0x13 + clz r5, r2 + movs r2, r2, lsl r5 + sub r4, r4, r5 + mov r3, r2, lsr #0xb + mov r2, r2, lsl #0x15 + mov r4, r4, lsl #0x1 + b _020EC0C0 +_020EC52C: + orrs r5, r2, r3, lsl #0xc + bne _020EC5A0 + mov r1, r12, lsl #0x1f + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC544: + mov r1, r12, lsl #0x1f + orr r1, r1, lr, lsl #0x13 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC558: + orrs r5, r2, r3, lsl #0x1 + beq _020EC5B8 + bic r5, r3, #0x80000000 + cmp r5, lr, lsl #0x13 + cmpeq r2, #0x0 + bhi _020EC5A0 + eor r1, r1, r3 + and r1, r1, #0x80000000 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC580: + tst r1, #0x80000 + beq _020EC5B8 + bic r5, r3, #0x80000000 + cmp r5, lr, lsl #0x13 + cmpeq r2, #0x0 + bhi _020EC5A0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC5A0: + tst r3, #0x80000 + beq _020EC5B8 + mov r1, r3 + mov r0, r2 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC5B8: + orr r1, r1, #0x7f000000 + orr r1, r1, #0xf80000 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020EC5C8: .word 0x00000FFE + + arm_func_start _fp_init +_fp_init: ; 0x020EC5CC + bx lr + + arm_func_start sys_writec +sys_writec: ; 0x020EC5D0 + str lr, [sp, #-0x4]! + mov r1, r0 + mov r0, #0x3 + swi 0x123456 + ldr pc, [sp], #0x4 + + arm_func_start sys_readc +sys_readc: ; 0x020EC5E4 + str lr, [sp, #-0x4]! + mov r1, #0x0 + mov r0, #0x7 + swi 0x123456 + ldr pc, [sp], #0x4 + + arm_func_start sys_exit +sys_exit: ; 0x020EC5F8 + mov r1, #0x0 + mov r0, #0x18 + swi 0x123456 + mov pc, lr + + arm_func_start __read_console +__read_console: ; 0x020EC608 + stmdb sp!, {r3-r7,lr} + mov r6, r2 + ldr r5, [r6, #0x0] + mov r7, r1 + cmp r5, #0x0 + mov r4, #0x0 + bls _020EC650 +_020EC624: + bl sys_readc + and r1, r0, #0xff + cmp r1, #0xd + strb r0, [r7, r4] + cmpne r1, #0xa + addeq r0, r4, #0x1 + streq r0, [r6, #0x0] + beq _020EC650 + add r4, r4, #0x1 + cmp r4, r5 + blo _020EC624 +_020EC650: + mov r0, #0x0 + ldmia sp!, {r3-r7,pc} + + arm_func_start __write_console +__write_console: ; 0x020EC658 + stmdb sp!, {r4-r6,lr} + ldr r5, [r2, #0x0] + mov r6, r1 + cmp r5, #0x0 + mov r4, #0x0 + bls _020EC684 +_020EC670: + add r0, r6, r4 + bl sys_writec + add r4, r4, #0x1 + cmp r4, r5 + blo _020EC670 +_020EC684: + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} + + arm_func_start __close_console +__close_console: ; 0x020EC68C + mov r0, #0x0 + bx lr + + arm_func_start __call_static_initializers +__call_static_initializers: ; 0x020EC694 + stmdb sp!, {r4,lr} + ldr r4, _020EC6BC ; =0x02104774 + b _020EC6A8 +_020EC6A0: + blx r0 + add r4, r4, #0x4 +_020EC6A8: + cmp r4, #0x0 + ldrne r0, [r4, #0x0] + cmpne r0, #0x0 + bne _020EC6A0 + ldmia sp!, {r4,pc} + .balign 4 +_020EC6BC: .word 0x02104774 + + arm_func_start __destroy_global_chain +__destroy_global_chain: ; 0x020EC6C0 + stmdb sp!, {r3-r5,lr} + ldr r4, _020EC700 ; =0x021D74C8 + ldr r2, [r4, #0x0] + cmp r2, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020EC6D4: + .byte 0x00, 0x50, 0xE0, 0xE3, 0x00, 0x00, 0x92, 0xE5, 0x05, 0x10, 0xA0, 0xE1 + .byte 0x00, 0x00, 0x84, 0xE5, 0x08, 0x00, 0x92, 0xE5, 0x04, 0x20, 0x92, 0xE5, 0x32, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x20, 0x94, 0xE5, 0x00, 0x00, 0x52, 0xE3, 0xF6, 0xFF, 0xFF, 0x1A, 0x38, 0x80, 0xBD, 0xE8 +_020EC700: .word 0x021D74C8 + + arm_func_start _ExitProcess +_ExitProcess: ; 0x020EC704 + ldr ip, _020EC70C ; =sys_exit + bx r12 + .balign 4 +_020EC70C: .word sys_exit diff --git a/global.inc b/global.inc index ffc62ba7..dfb91f39 100644 --- a/global.inc +++ b/global.inc @@ -467,8 +467,8 @@ .extern _ll_shl .extern _s32_div_f .extern _u32_div_f -.extern FUN_020EC5CC -.extern FUN_020EC694 +.extern _fp_init +.extern __call_static_initializers .extern FUN_021D74E0 .extern FUN_021D76AC .extern FUN_021D77C4 @@ -996,3 +996,43 @@ .extern FUN_020335B8 .extern FUN_02033678 .extern FUN_02033F70 + +.extern PM_GetLCDPower +.extern PXI_Init +.extern PXI_IsCallbackReady +.extern OS_GetCpsrIrq +.extern PXIi_HandlerRecvFifoNotEmpty +.extern OS_UnlockCard +.extern OS_TryLockCard +.extern OS_SleepThread +.extern OS_CreateThread +.extern OS_WakeupThread +.extern OS_WakeupThreadDirect +.extern PXI_SetFifoRecvCallback +.extern OS_SetThreadPriority +.extern FUN_02000B60 +.extern OS_GetDTCMAddress +.extern IC_InvalidateRange +.extern OS_ResetRequestIrqMask +.extern MIi_CardDmaCopy32 +.extern PXI_SendWordByFifo +.extern DC_StoreRange +.extern OS_SendMessage +.extern OS_ReceiveMessage +.extern OS_ReadOwnerOfLockWord +.extern OS_TryLockCartridge +.extern FUN_020002FE +.extern OS_SetIrqMask +.extern MI_DmaCopy16 +.extern DC_FlushAll +.extern OS_LockCartridge +.extern OS_UnlockCartridge +.extern OS_UnlockCartridge2 +.extern OS_ExitThread +.extern MATH_SHA1Init +.extern MATH_MD5Init +.extern __destroy_global_chain +.extern OS_TryLockMutex +.extern _ddiv +.extern _s32_div_f +.extern _u32_div_not_0_f diff --git a/pokediamond.lcf b/pokediamond.lcf index 23e82fa5..b3c98bb9 100644 --- a/pokediamond.lcf +++ b/pokediamond.lcf @@ -382,8 +382,9 @@ SECTIONS { string_util.o (.text) unk_020023C0.o (.text) rom1.5.o (.text) - FUN_020C9C0C.o (.text) - rom2.o (.text) + unk_020C9C0C.o (.text) + unk_020D5150.o (.text) + rom2.o (.data) string_util.o (.data) rom2_2.o (.text) } > arm9 diff --git a/undefined_syms.txt b/undefined_syms.txt index bffce056..a5a51eb5 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -813,3 +813,4 @@ FUN_02252534 = 0x02252534; FUN_02252538 = 0x02252538; FUN_022567E0 = 0x022567E0; gUnk027FFC20 = 0x027FFC20; +FUN_02000B60 = 0x02000B60; -- cgit v1.2.3 From 43e674c12c84bbfa97c06ee95d6d9a0ac1f5cda7 Mon Sep 17 00:00:00 2001 From: Demki Date: Thu, 23 Apr 2020 02:47:50 +0300 Subject: dism of PM, RTC, CARD, WM --- asm/CARD_arm9.s | 1782 +++++ asm/PM_arm9.s | 1125 +++ asm/RTC_arm9.s | 1028 +++ asm/WM_arm9.s | 3744 +++++++++ asm/rom2dism.s | 16534 +++++++++++++++++++++++++++++++++++++++ asm/unk_02000E0C.s | 2 +- asm/unk_020023C0.s | 4 +- asm/unk_020C9C0C.s | 503 -- asm/unk_020D5150.s | 21374 --------------------------------------------------- global.inc | 16 +- pokediamond.lcf | 6 +- undefined_syms.txt | 4 +- 12 files changed, 24235 insertions(+), 21887 deletions(-) create mode 100644 asm/CARD_arm9.s create mode 100644 asm/PM_arm9.s create mode 100644 asm/RTC_arm9.s create mode 100644 asm/WM_arm9.s create mode 100644 asm/rom2dism.s delete mode 100644 asm/unk_020D5150.s diff --git a/asm/CARD_arm9.s b/asm/CARD_arm9.s new file mode 100644 index 00000000..9756ce4b --- /dev/null +++ b/asm/CARD_arm9.s @@ -0,0 +1,1782 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CARD_UnlockBackup +CARD_UnlockBackup: ; 0x020D66A0 + ldr ip, _020D66AC ; =CARDi_UnlockResource + mov r1, #0x2 + bx r12 + .balign 4 +_020D66AC: .word CARDi_UnlockResource + + arm_func_start CARD_LockBackup +CARD_LockBackup: ; 0x020D66B0 + ldr ip, _020D66BC ; =CARDi_LockResource + mov r1, #0x2 + bx r12 + .balign 4 +_020D66BC: .word CARDi_LockResource + + arm_func_start CARD_UnlockRom +CARD_UnlockRom: ; 0x020D66C0 + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_UnlockCard + mov r0, r4 + mov r1, #0x1 + bl CARDi_UnlockResource + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CARD_LockRom +CARD_LockRom: ; 0x020D66E0 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r1, #0x1 + bl CARDi_LockResource + mov r0, r4 + bl OS_TryLockCard + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CARD_GetResultCode +CARD_GetResultCode: ; 0x020D6700 + ldr r0, _020D6710 ; =0x021D55C0 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D6710: .word 0x021D55C0 + + arm_func_start FUN_020D6714 +FUN_020D6714: ; 0x020D6714 + ldr r0, _020D672C ; =0x021D55C0 + ldr r0, [r0, #0x114] + ands r0, r0, #0x4 + moveq r0, #0x1 + movne r0, #0x0 + bx lr + .balign 4 +_020D672C: .word 0x021D55C0 + + arm_func_start CARDi_WaitAsync +CARDi_WaitAsync: ; 0x020D6730 + stmdb sp!, {r4-r6,lr} + ldr r6, _020D6788 ; =0x021D55C0 + bl OS_DisableInterrupts + ldr r1, [r6, #0x114] + mov r5, r0 + ands r0, r1, #0x4 + beq _020D6764 + add r4, r6, #0x10c +_020D6750: + mov r0, r4 + bl OS_SleepThread + ldr r0, [r6, #0x114] + ands r0, r0, #0x4 + bne _020D6750 +_020D6764: + mov r0, r5 + bl OS_RestoreInterrupts +_020D676C: ; 0x020D676C + ldr r0, [r6, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D6788: .word 0x021D55C0 + + arm_func_start CARD_Enable +CARD_Enable: ; 0x020D678C + ldr r1, _020D6798 ; =0x021D555C + str r0, [r1, #0x0] + bx lr + .balign 4 +_020D6798: .word 0x021D555C + + arm_func_start CARD_CheckEnabled +CARD_CheckEnabled: ; 0x020D679C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CARD_IsEnabled +_020D67A8: ; 0x020D67A8 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CARD_IsEnabled +CARD_IsEnabled: + ldr r0, _020D67D4 ; =0x021D555C + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D67D4: .word 0x021D555C + + arm_func_start CARDi_InitCommon +CARDi_InitCommon: ; 0x020D67D8 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r4, _020D68B8 ; =0x021D55C0 + ldr r1, _020D68BC ; =0x021D5560 + mvn r2, #0x2 + mov r0, #0x0 + str r2, [r4, #0x8] + mov r2, #0x60 + str r0, [r4, #0xc] + str r0, [r4, #0x18] + str r1, [r4, #0x0] + bl MIi_CpuClearFast + ldr r0, _020D68BC ; =0x021D5560 + mov r1, #0x60 + bl DC_FlushRange + ldr r0, _020D68C0 ; =0x027FFC40 + ldrh r0, [r0, #0x0] + cmp r0, #0x2 + beq _020D6834 + ldr r0, _020D68C4 ; =0x027FFE00 + ldr r1, _020D68C8 ; =0x027FFA80 + mov r2, #0x160 + bl MI_CpuCopy8 +_020D6834: + mov r2, #0x0 + str r2, [r4, #0x14] + ldr r0, [r4, #0x14] + mov r1, #0x4 + str r0, [r4, #0x10] + str r2, [r4, #0x110] + ldr r3, [r4, #0x110] + mov r0, #0x400 + str r3, [r4, #0x10c] + str r1, [r4, #0x108] + str r0, [sp, #0x0] + ldr r12, [r4, #0x108] + ldr r1, _020D68CC ; =CARDi_TaskThread + ldr r3, _020D68D0 ; =0x021D5BE0 + add r0, r4, #0x44 + str r12, [sp, #0x4] + bl OS_CreateThread + add r0, r4, #0x44 + bl OS_WakeupThreadDirect + ldr r1, _020D68D4 ; =CARDi_OnFifoRecv + mov r0, #0xb + bl PXI_SetFifoRecvCallback + ldr r0, _020D68C0 ; =0x027FFC40 + ldrh r0, [r0, #0x0] + cmp r0, #0x2 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4,lr} + bxeq lr + mov r0, #0x1 + bl CARD_Enable + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D68B8: .word 0x021D55C0 +_020D68BC: .word 0x021D5560 +_020D68C0: .word 0x027FFC40 +_020D68C4: .word 0x027FFE00 +_020D68C8: .word 0x027FFA80 +_020D68CC: .word CARDi_TaskThread +_020D68D0: .word 0x021D5BE0 +_020D68D4: .word CARDi_OnFifoRecv + + arm_func_start CARDi_UnlockResource +CARDi_UnlockResource: ; 0x020D68D8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r5, _020D6978 ; =0x021D55C0 + mov r7, r0 + mov r6, r1 + bl OS_DisableInterrupts + mov r1, r5 + mov r4, r0 + ldr r0, [r1, #0x8] + cmp r0, r7 + bne _020D6910 + ldr r0, [r5, #0xc] + cmp r0, #0x0 + bne _020D6918 +_020D6910: + bl OS_Terminate + b _020D6958 +_020D6918: + ldr r0, [r5, #0x18] + cmp r0, r6 + beq _020D6928 + bl OS_Terminate +_020D6928: + ldr r0, [r5, #0xc] + sub r0, r0, #0x1 + str r0, [r5, #0xc] + ldr r0, [r5, #0xc] + cmp r0, #0x0 + bne _020D6958 + mvn r0, #0x2 + str r0, [r5, #0x8] + mov r1, #0x0 + add r0, r5, #0x10 + str r1, [r5, #0x18] + bl OS_WakeupThread +_020D6958: + ldr r1, [r5, #0x0] + mov r2, #0x0 + mov r0, r4 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D6978: .word 0x021D55C0 + + arm_func_start CARDi_LockResource +CARDi_LockResource: ; 0x020D697C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r5, _020D6A14 ; =0x021D55C0 + mov r7, r0 + mov r6, r1 + bl OS_DisableInterrupts + ldr r1, [r5, #0x8] + mov r4, r0 + cmp r1, r7 + bne _020D69B8 + ldr r0, [r5, #0x18] + cmp r0, r6 + beq _020D69E8 + bl OS_Terminate + b _020D69E8 +_020D69B8: + ldr r0, [r5, #0x8] + mvn r8, #0x2 + cmp r0, r8 + beq _020D69E0 + add r9, r5, #0x10 +_020D69CC: + mov r0, r9 + bl OS_SleepThread + ldr r0, [r5, #0x8] + cmp r0, r8 + bne _020D69CC +_020D69E0: + str r7, [r5, #0x8] + str r6, [r5, #0x18] +_020D69E8: + ldr r1, [r5, #0xc] + mov r0, r4 + add r1, r1, #0x1 + str r1, [r5, #0xc] + ldr r1, [r5, #0x0] + mov r2, #0x0 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020D6A14: .word 0x021D55C0 + + arm_func_start CARDi_SetTask +CARDi_SetTask: ; 0x020D6A18 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r4, _020D6A5C ; =0x021D55C0 + mov r5, r0 + ldr r1, [r4, #0x108] + add r0, r4, #0x44 + bl OS_SetThreadPriority + add r0, r4, #0x44 + str r0, [r4, #0x104] + str r5, [r4, #0x40] + ldr r1, [r4, #0x114] + orr r1, r1, #0x8 + str r1, [r4, #0x114] + bl OS_WakeupThreadDirect + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D6A5C: .word 0x021D55C0 + + arm_func_start FUN_020D6A60 +FUN_020D6A60: ; 0x020D6A60 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020D6D60 ; =0x021D55C0 + mov r5, r0 + ldr r4, [r1, #0x0] + mov r1, #0x0 + add r0, r4, #0x18 + mov r2, #0x48 + bl MI_CpuFill8 +_020D6A84: ; 0x020D6A84 + cmp r5, #0x0 + str r5, [r4, #0x4] + mov r0, #0x3f + addeq sp, sp, #0x4 + str r0, [r4, #0x4c] + ldmeqia sp!, {r4-r5,lr} + bxeq lr + mov r0, r5, asr #0x8 + and r0, r0, #0xff + mov r2, #0x1 + mov r3, r2, lsl r0 + and r1, r5, #0xff + str r3, [r4, #0x18] + mov r0, #0xff + strb r0, [r4, #0x48] + cmp r1, #0x1 + bne _020D6B80 + cmp r3, #0x200 + beq _020D6AE4 + cmp r3, #0x2000 + beq _020D6B04 + cmp r3, #0x10000 + beq _020D6B28 + b _020D6D38 +_020D6AE4: + mov r0, #0x10 + str r0, [r4, #0x20] + str r2, [r4, #0x24] + mov r0, #0x5 + str r0, [r4, #0x28] + mov r0, #0xf0 + strb r0, [r4, #0x48] + b _020D6B48 +_020D6B04: + mov r0, #0x20 + str r0, [r4, #0x20] + mov r0, #0x2 + str r0, [r4, #0x24] + mov r0, #0x5 + str r0, [r4, #0x28] + mov r0, #0x0 + strb r0, [r4, #0x48] + b _020D6B48 +_020D6B28: + mov r0, #0x80 + str r0, [r4, #0x20] + mov r0, #0x2 + str r0, [r4, #0x24] + mov r0, #0xa + str r0, [r4, #0x28] + mov r0, #0x0 + strb r0, [r4, #0x48] +_020D6B48: + ldr r0, [r4, #0x20] + add sp, sp, #0x4 + str r0, [r4, #0x1c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x40 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x100 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x200 + str r0, [r4, #0x4c] + ldmia sp!, {r4-r5,lr} + bx lr +_020D6B80: + cmp r1, #0x2 + bne _020D6CD8 + cmp r3, #0x100000 + bhi _020D6BB8 + cmp r3, #0x100000 + bhs _020D6BD8 + cmp r3, #0x40000 + bhi _020D6BAC + cmp r3, #0x40000 + beq _020D6BD8 + b _020D6D38 +_020D6BAC: + cmp r3, #0x80000 + beq _020D6BD8 + b _020D6D38 +_020D6BB8: + cmp r3, #0x200000 + bhi _020D6BCC + cmp r3, #0x200000 + beq _020D6C10 + b _020D6D38 +_020D6BCC: + cmp r3, #0x800000 + beq _020D6C48 + b _020D6D38 +_020D6BD8: + mov r0, #0x19 + str r0, [r4, #0x2c] + mov r1, #0x12c + str r1, [r4, #0x30] + ldr r0, _020D6D64 ; =0x00001388 + str r1, [r4, #0x44] + str r0, [r4, #0x3c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x80 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x400 + str r0, [r4, #0x4c] + b _020D6C7C +_020D6C10: + mov r1, #0x3e8 + ldr r0, _020D6D68 ; =0x00000BB8 + str r1, [r4, #0x3c] + ldr r1, _020D6D6C ; =0x00004268 + str r0, [r4, #0x40] + ldr r0, _020D6D70 ; =0x00009C40 + str r1, [r4, #0x34] + str r0, [r4, #0x38] + mov r0, #0x0 + strb r0, [r4, #0x48] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x1000 + str r0, [r4, #0x4c] + b _020D6C7C +_020D6C48: + mov r1, #0x3e8 + ldr r0, _020D6D68 ; =0x00000BB8 + str r1, [r4, #0x3c] + ldr r1, _020D6D74 ; =0x000109A0 + str r0, [r4, #0x40] + ldr r0, _020D6D78 ; =0x00027100 + str r1, [r4, #0x34] + str r0, [r4, #0x38] + mov r0, #0x0 + strb r0, [r4, #0x48] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x1000 + str r0, [r4, #0x4c] +_020D6C7C: + mov r0, #0x10000 + str r0, [r4, #0x1c] + mov r0, #0x100 + str r0, [r4, #0x20] + mov r0, #0x3 + str r0, [r4, #0x24] + mov r0, #0x5 + str r0, [r4, #0x28] + ldr r0, [r4, #0x4c] + add sp, sp, #0x4 + orr r0, r0, #0x40 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x100 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x200 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x800 + str r0, [r4, #0x4c] + ldmia sp!, {r4-r5,lr} + bx lr +_020D6CD8: + cmp r1, #0x3 + bne _020D6D38 + cmp r3, #0x2000 + beq _020D6CF0 + cmp r3, #0x8000 + bne _020D6D38 +_020D6CF0: + str r3, [r4, #0x20] + str r3, [r4, #0x1c] + mov r0, #0x2 + str r0, [r4, #0x24] + mov r0, #0x0 + strb r0, [r4, #0x48] + ldr r0, [r4, #0x4c] + add sp, sp, #0x4 + orr r0, r0, #0x40 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x100 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x200 + str r0, [r4, #0x4c] + ldmia sp!, {r4-r5,lr} + bx lr +_020D6D38: + mov r1, #0x0 + str r1, [r4, #0x4] + str r1, [r4, #0x18] + ldr r0, _020D6D60 ; =0x021D55C0 + mov r1, #0x3 + ldr r0, [r0, #0x0] + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D6D60: .word 0x021D55C0 +_020D6D64: .word 0x00001388 +_020D6D68: .word 0x00000BB8 +_020D6D6C: .word 0x00004268 +_020D6D70: .word 0x00009C40 +_020D6D74: .word 0x000109A0 +_020D6D78: .word 0x00027100 + + arm_func_start CARD_CancelBackupAsync +CARD_CancelBackupAsync: ; 0x020D6D7C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r1, _020D6DA8 ; =0x021D55C0 + ldr r2, [r1, #0x114] + orr r2, r2, #0x40 + str r2, [r1, #0x114] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D6DA8: .word 0x021D55C0 + + arm_func_start CARD_TryWaitBackupAsync +CARD_TryWaitBackupAsync: ; 0x020D6DAC + ldr ip, _020D6DB4 ; =FUN_020D6714 + bx r12 + .balign 4 +_020D6DB4: .word FUN_020D6714 + + arm_func_start CARD_WaitBackupAsync +CARD_WaitBackupAsync: ; 0x020D6DB8 + ldr ip, _020D6DC0 ; =CARDi_WaitAsync + bx r12 + .balign 4 +_020D6DC0: .word CARDi_WaitAsync + + arm_func_start CARD_IdentifyBackup +CARD_IdentifyBackup: ; 0x020D6DC4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r0, _020D6F00 ; =0x02000C3C + ldr r7, _020D6F04 ; =0x021D55C0 + bl FUN_02000B60 +_020D6DDC: ; 0x020D6DDC + cmp r5, #0x0 + bne _020D6DE8 + bl OS_Terminate +_020D6DE8: + bl CARD_CheckEnabled + bl OS_DisableInterrupts + ldr r1, [r7, #0x114] + mov r4, r0 + ands r0, r1, #0x4 + beq _020D6E18 + add r6, r7, #0x10c +_020D6E04: + mov r0, r6 + bl OS_SleepThread + ldr r0, [r7, #0x114] + ands r0, r0, #0x4 + bne _020D6E04 +_020D6E18: + ldr r0, [r7, #0x114] + mov r1, #0x0 + orr r0, r0, #0x4 + str r0, [r7, #0x114] + str r1, [r7, #0x38] + mov r0, r4 + str r1, [r7, #0x3c] + bl OS_RestoreInterrupts + mov r0, r5 + bl FUN_020D6A60 + ldr r0, _020D6F08 ; =0x021D3498 + ldr r1, _020D6F04 ; =0x021D55C0 + ldr r2, [r0, #0x4] + mov r0, r7 + str r2, [r1, #0x104] + mov r1, #0x2 + mov r2, #0x1 + bl CARDi_Request +_020D6E60: ; 0x020D6E60 + ldr r0, [r7, #0x0] + mov r1, #0x0 + str r1, [r0, #0xc] + ldr r0, [r7, #0x0] + add r1, r7, #0x120 + str r1, [r0, #0x10] + ldr r1, [r7, #0x0] + mov r2, #0x1 + mov r0, r7 + str r2, [r1, #0x14] + mov r1, #0x6 + bl CARDi_Request + ldr r6, [r7, #0x38] + ldr r5, [r7, #0x3c] + bl OS_DisableInterrupts + mov r4, r0 + ldr r1, [r7, #0x114] + add r0, r7, #0x10c + bic r1, r1, #0x4c + str r1, [r7, #0x114] + bl OS_WakeupThread + ldr r0, [r7, #0x114] + ands r0, r0, #0x10 + beq _020D6EC8 + add r0, r7, #0x44 + bl OS_WakeupThreadDirect +_020D6EC8: + mov r0, r4 + bl OS_RestoreInterrupts +_020D6ED0: ; 0x020D6ED0 + cmp r6, #0x0 + beq _020D6EE0 + mov r0, r5 + blx r6 +_020D6EE0: + ldr r0, [r7, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D6F00: .word 0x02000C3C +_020D6F04: .word 0x021D55C0 +_020D6F08: .word 0x021D3498 + + arm_func_start CARD_GetBackupSectorSize +CARD_GetBackupSectorSize: ; 0x020D6F0C + ldr r0, _020D6F1C ; =0x021D55C0 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x1c] + bx lr + .balign 4 +_020D6F1C: .word 0x021D55C0 + + arm_func_start CARDi_RequestStreamCommand +CARDi_RequestStreamCommand: ; 0x020D6F20 + stmdb sp!, {r4-r10,lr} + mov r10, r0 + ldr r6, _020D7004 ; =0x021D55C0 + ldr r0, _020D7008 ; =0x02000C3C + mov r9, r1 + mov r8, r2 + mov r7, r3 + bl FUN_02000B60 + bl OS_DisableInterrupts + ldr r1, [r6, #0x114] + mov r5, r0 + ands r0, r1, #0x4 + beq _020D6F6C + add r4, r6, #0x10c +_020D6F58: + mov r0, r4 + bl OS_SleepThread + ldr r0, [r6, #0x114] + ands r0, r0, #0x4 + bne _020D6F58 +_020D6F6C: + ldr r0, [r6, #0x114] + ldr r1, [sp, #0x20] + orr r0, r0, #0x4 + str r0, [r6, #0x114] + str r7, [r6, #0x38] + mov r0, r5 + str r1, [r6, #0x3c] + bl OS_RestoreInterrupts + str r10, [r6, #0x1c] + str r9, [r6, #0x20] + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + str r8, [r6, #0x24] + ldr r2, [sp, #0x2c] + str r1, [r6, #0x2c] + ldr r1, [sp, #0x30] + str r2, [r6, #0x30] + str r1, [r6, #0x34] + cmp r0, #0x0 + beq _020D6FD0 + ldr r0, _020D700C ; =CARDi_RequestStreamCommandCore + bl CARDi_SetTask + mov r0, #0x1 + ldmia sp!, {r4-r10,lr} + bx lr +_020D6FD0: + ldr r0, _020D7010 ; =0x021D3498 + ldr r1, _020D7004 ; =0x021D55C0 + ldr r2, [r0, #0x4] + mov r0, r6 + str r2, [r1, #0x104] + bl CARDi_RequestStreamCommandCore +_020D6FE8: ; 0x020D6FE8 + ldr r0, [r6, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020D7004: .word 0x021D55C0 +_020D7008: .word 0x02000C3C +_020D700C: .word CARDi_RequestStreamCommandCore +_020D7010: .word 0x021D3498 + + arm_func_start CARDi_RequestStreamCommandCore +CARDi_RequestStreamCommandCore: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r9, r0 + ldr r8, [r9, #0x2c] + ldr r0, _020D720C ; =0x02000C3C + ldr r7, [r9, #0x34] + ldr r10, [r9, #0x30] + mov r6, #0x100 + bl FUN_02000B60 + cmp r8, #0xb + bne _020D7048 + bl CARD_GetBackupSectorSize + mov r6, r0 +_020D7048: + mov r0, #0x1 + add r4, r9, #0x120 + mov r11, #0x9 + str r0, [sp, #0x0] +_020D7058: + ldr r5, [r9, #0x24] + ldr r0, [r9, #0x0] + cmp r6, r5 + movcc r5, r6 + str r5, [r0, #0x14] + ldr r0, [r9, #0x114] + ands r0, r0, #0x40 + beq _020D7094 + ldr r0, [r9, #0x114] + mov r1, #0x7 + bic r0, r0, #0x40 + str r0, [r9, #0x114] + ldr r0, [r9, #0x0] + str r1, [r0, #0x0] + b _020D71A8 +_020D7094: + cmp r7, #0x3 + addls pc, pc, r7, lsl #0x2 + b _020D7124 +_020D70A0: + b _020D70B0 +_020D70A4: + b _020D70D4 +_020D70A8: + b _020D70D4 +_020D70AC: + b _020D710C +_020D70B0: + mov r1, r5 + add r0, r9, #0x120 + bl DC_InvalidateRange + ldr r1, [r9, #0x1c] + ldr r0, [r9, #0x0] + str r1, [r0, #0xc] + ldr r0, [r9, #0x0] + str r4, [r0, #0x10] + b _020D7124 +_020D70D4: + ldr r0, [r9, #0x1c] + mov r1, r4 + mov r2, r5 + bl MI_CpuCopy8 + mov r1, r5 + add r0, r9, #0x120 + bl DC_FlushRange + bl DC_WaitWriteBufferEmpty +_020D70F4: ; 0x020D70F4 + ldr r0, [r9, #0x0] + str r4, [r0, #0xc] + ldr r1, [r9, #0x20] + ldr r0, [r9, #0x0] + str r1, [r0, #0x10] + b _020D7124 +_020D710C: + ldr r1, [r9, #0x1c] + ldr r0, [r9, #0x0] + str r1, [r0, #0xc] + ldr r1, [r9, #0x20] + ldr r0, [r9, #0x0] + str r1, [r0, #0x10] +_020D7124: + mov r0, r9 + mov r1, r8 + mov r2, r10 + bl CARDi_Request +_020D7134: ; 0x020D7134 + cmp r0, #0x0 + beq _020D71A8 + cmp r7, #0x2 + bne _020D7160 + ldr r2, [sp, #0x0] + mov r0, r9 + mov r1, r11 + bl CARDi_Request +_020D7154: ; 0x020D7154 + cmp r0, #0x0 + bne _020D7178 + b _020D71A8 +_020D7160: + cmp r7, #0x0 + bne _020D7178 + ldr r1, [r9, #0x20] + mov r2, r5 + add r0, r9, #0x120 + bl MI_CpuCopy8 +_020D7178: + ldr r0, [r9, #0x1c] + add r0, r0, r5 + str r0, [r9, #0x1c] + ldr r0, [r9, #0x20] + add r0, r0, r5 + str r0, [r9, #0x20] + ldr r0, [r9, #0x24] + sub r0, r0, r5 + str r0, [r9, #0x24] + ldr r0, [r9, #0x24] + cmp r0, #0x0 + bne _020D7058 +_020D71A8: + ldr r6, [r9, #0x38] + ldr r5, [r9, #0x3c] + bl OS_DisableInterrupts + ldr r1, [r9, #0x114] + mov r4, r0 + bic r0, r1, #0x4c + str r0, [r9, #0x114] + add r0, r9, #0x10c + bl OS_WakeupThread + ldr r0, [r9, #0x114] + ands r0, r0, #0x10 + beq _020D71E0 + add r0, r9, #0x44 + bl OS_WakeupThreadDirect +_020D71E0: + mov r0, r4 + bl OS_RestoreInterrupts +_020D71E8: ; 0x020D71E8 + cmp r6, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + mov r0, r5 + blx r6 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D720C: .word 0x02000C3C + + arm_func_start CARDi_GetRomAccessor +CARDi_GetRomAccessor: ; 0x020D7210 + ldr r0, _020D7218 ; =CARDi_ReadCard + bx lr + .balign 4 +_020D7218: .word CARDi_ReadCard + + arm_func_start CARD_WaitRomAsync +CARD_WaitRomAsync: ; 0x020D721C + ldr ip, _020D7224 ; =CARDi_WaitAsync + bx r12 + .balign 4 +_020D7224: .word CARDi_WaitAsync + + arm_func_start CARD_Init +CARD_Init: ; 0x020D7228 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020D72A0 ; =0x021D55C0 + ldr r0, [r12, #0x114] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + mov r0, #0x1 + str r0, [r12, #0x114] + mov r3, #0x0 + str r3, [r12, #0x24] + ldr r0, [r12, #0x24] + mvn r1, #0x0 + str r0, [r12, #0x20] + ldr r2, [r12, #0x20] + ldr r0, _020D72A4 ; =0x021D5BE0 + str r2, [r12, #0x1c] + str r1, [r12, #0x28] + str r3, [r12, #0x38] + str r3, [r12, #0x3c] + str r3, [r0, #0x0] + bl CARDi_InitCommon + bl CARDi_GetRomAccessor + ldr r1, _020D72A8 ; =0x021D5C00 + str r0, [r1, #0x0] + bl CARD_InitPulledOutCallback + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D72A0: .word 0x021D55C0 +_020D72A4: .word 0x021D5BE0 +_020D72A8: .word 0x021D5C00 + + arm_func_start CARDi_ReadRom +CARDi_ReadRom: ; 0x020D72AC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr r6, _020D73C0 ; =0x021D55C0 + mov r10, r0 + mov r9, r1 + mov r8, r2 + mov r7, r3 + ldr fp, _020D73C4 ; =0x021D5C00 + bl CARD_CheckEnabled + bl OS_DisableInterrupts + ldr r1, [r6, #0x114] + mov r5, r0 + ands r0, r1, #0x4 + beq _020D72FC + add r4, r6, #0x10c +_020D72E8: + mov r0, r4 + bl OS_SleepThread + ldr r0, [r6, #0x114] + ands r0, r0, #0x4 + bne _020D72E8 +_020D72FC: + ldr r1, [r6, #0x114] + ldr r0, [sp, #0x28] + orr r1, r1, #0x4 + str r1, [r6, #0x114] + ldr r1, [sp, #0x2c] + str r0, [r6, #0x38] + mov r0, r5 + str r1, [r6, #0x3c] + bl OS_RestoreInterrupts + ldr r0, _020D73C8 ; =0x021D5BE0 + str r10, [r6, #0x28] + ldr r0, [r0, #0x0] + cmp r10, #0x3 + add r0, r9, r0 + str r0, [r6, #0x1c] + str r8, [r6, #0x20] + str r7, [r6, #0x24] + bhi _020D734C + mov r0, r10 + bl MI_StopDma +_020D734C: + mov r0, r11 + bl CARDi_TryReadCardDma +_020D7354: ; 0x020D7354 + cmp r0, #0x0 + beq _020D7380 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r11,lr} + bxne lr + bl CARD_WaitRomAsync + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr +_020D7380: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + beq _020D73A0 + ldr r0, _020D73CC ; =CARDi_ReadRomSyncCore + bl CARDi_SetTask + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr +_020D73A0: + ldr r1, _020D73D0 ; =0x021D3498 + mov r0, r6 + ldr r1, [r1, #0x4] + str r1, [r6, #0x104] + bl CARDi_ReadRomSyncCore + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D73C0: .word 0x021D55C0 +_020D73C4: .word 0x021D5C00 +_020D73C8: .word 0x021D5BE0 +_020D73CC: .word CARDi_ReadRomSyncCore +_020D73D0: .word 0x021D3498 + + arm_func_start CARDi_ReadRomSyncCore +CARDi_ReadRomSyncCore: ; 0x020D73D4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r4, _020D7478 ; =0x021D5C00 + mov r0, r4 + bl CARDi_ReadFromCache +_020D73E8: ; 0x020D73E8 + cmp r0, #0x0 + beq _020D73FC + ldr r1, [r4, #0x0] + mov r0, r4 + blx r1 +_020D73FC: + ldr r7, _020D747C ; =0x021D55C0 + bl CARDi_ReadRomIDCore + bl CARDi_CheckPulledOutCore +_020D7408: ; 0x020D7408 + ldr r0, [r7, #0x0] + mov r1, #0x0 + str r1, [r0, #0x0] + ldr r6, [r7, #0x38] + ldr r5, [r7, #0x3c] + bl OS_DisableInterrupts + ldr r1, [r7, #0x114] + mov r4, r0 + bic r0, r1, #0x4c + str r0, [r7, #0x114] + add r0, r7, #0x10c + bl OS_WakeupThread + ldr r0, [r7, #0x114] + ands r0, r0, #0x10 + beq _020D744C + add r0, r7, #0x44 + bl OS_WakeupThreadDirect +_020D744C: + mov r0, r4 + bl OS_RestoreInterrupts +_020D7454: ; 0x020D7454 + cmp r6, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r5 + blx r6 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D7478: .word 0x021D5C00 +_020D747C: .word 0x021D55C0 + + arm_func_start CARDi_ReadRomIDCore +CARDi_ReadRomIDCore: ; 0x020D7480 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, #0xb8000000 + mov r1, #0x0 + bl CARDi_SetRomOp + ldr r1, _020D74DC ; =0x02106A50 + mov r0, #0x2000 + ldr r1, [r1, #0x0] + rsb r0, r0, #0x0 + ldr r2, [r1, #0x60] + ldr r1, _020D74E0 ; =0x040001A4 + bic r2, r2, #0x7000000 + orr r2, r2, #0xa7000000 + and r0, r2, r0 + str r0, [r1, #0x0] +_020D74BC: + ldr r0, [r1, #0x0] + ands r0, r0, #0x800000 + beq _020D74BC + ldr r0, _020D74E4 ; =0x04100010 + ldr r0, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D74DC: .word 0x02106A50 +_020D74E0: .word 0x040001A4 +_020D74E4: .word 0x04100010 + + arm_func_start CARDi_ReadCard +CARDi_ReadCard: ; 0x020D74E8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r10, r0 + ldr sb, _020D75DC ; =0x021D55C0 + add r7, r10, #0x20 + ldr r5, _020D75E0 ; =0x04100010 + ldr r6, _020D75E4 ; =0x040001A4 + mov r11, #0x0 + mov r0, #0x200 + rsb r4, r0, #0x0 +_020D7510: + ldr r0, [r9, #0x1c] + and r1, r0, r4 + cmp r1, r0 + bne _020D7538 + ldr r8, [r9, #0x20] + ands r0, r8, #0x3 + bne _020D7538 + ldr r0, [r9, #0x24] + cmp r0, #0x200 + bhs _020D7540 +_020D7538: + mov r8, r7 + str r1, [r10, #0x8] +_020D7540: + mov r0, r1, lsr #0x8 + orr r0, r0, #0xb7000000 + mov r1, r1, lsl #0x18 + bl CARDi_SetRomOp + ldr r1, [r10, #0x4] + mov r0, r11 + str r1, [r6, #0x0] +_020D755C: + ldr r2, [r6, #0x0] + ands r1, r2, #0x800000 + beq _020D7578 + ldr r1, [r5, #0x0] + cmp r0, #0x200 + strcc r1, [r8, r0, lsl #0x2] + addcc r0, r0, #0x1 +_020D7578: + ands r1, r2, #0x80000000 + bne _020D755C + ldr r0, [r9, #0x20] + cmp r8, r0 + bne _020D75C0 + ldr r2, [r9, #0x1c] + ldr r1, [r9, #0x20] + ldr r0, [r9, #0x24] + add r2, r2, #0x200 + add r1, r1, #0x200 + subs r0, r0, #0x200 + str r2, [r9, #0x1c] + str r1, [r9, #0x20] + str r0, [r9, #0x24] + bne _020D7510 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr +_020D75C0: + mov r0, r10 + bl CARDi_ReadFromCache +_020D75C8: ; 0x020D75C8 + cmp r0, #0x0 + bne _020D7510 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D75DC: .word 0x021D55C0 +_020D75E0: .word 0x04100010 +_020D75E4: .word 0x040001A4 + + arm_func_start CARDi_TryReadCardDma +CARDi_TryReadCardDma: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr fp, _020D7748 ; =0x021D55C0 + mov r7, #0x0 + ldr r9, [r11, #0x20] + mov r10, r0 + mov r6, r7 + mov r5, r7 + mov r1, r7 + ands r4, r9, #0x1f + ldr r8, [r11, #0x24] + bne _020D7624 + ldr r0, [r11, #0x28] + cmp r0, #0x3 + movls r1, #0x1 +_020D7624: + cmp r1, #0x0 + beq _020D7678 + bl OS_GetDTCMAddress + ldr r1, _020D774C ; =0x01FF8000 + add r2, r9, r8 + cmp r2, r1 + mov r3, #0x1 + mov r1, #0x0 + bls _020D7650 + cmp r9, #0x2000000 + movcc r1, r3 +_020D7650: + cmp r1, #0x0 + bne _020D7670 + cmp r0, r2 + bhs _020D766C + add r0, r0, #0x4000 + cmp r0, r9 + bhi _020D7670 +_020D766C: + mov r3, #0x0 +_020D7670: + cmp r3, #0x0 + moveq r5, #0x1 +_020D7678: + cmp r5, #0x0 + beq _020D7694 + ldr r1, [r11, #0x1c] + ldr r0, _020D7750 ; =0x000001FF + orr r1, r1, r8 + ands r0, r1, r0 + moveq r6, #0x1 +_020D7694: + cmp r6, #0x0 + beq _020D76A4 + cmp r8, #0x0 + movne r7, #0x1 +_020D76A4: + ldr r0, _020D7754 ; =0x02106A50 + cmp r7, #0x0 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x60] + bic r0, r0, #0x7000000 + orr r0, r0, #0xa1000000 + str r0, [r10, #0x4] + beq _020D7738 + bl OS_DisableInterrupts + mov r5, r0 + mov r0, r9 + mov r1, r8 + bl IC_InvalidateRange +_020D76D8: ; 0x020D76D8 + cmp r4, #0x0 + beq _020D7700 + sub r9, r9, r4 + mov r0, r9 + mov r1, #0x20 + bl DC_StoreRange + add r0, r9, r8 + mov r1, #0x20 + bl DC_StoreRange + add r8, r8, #0x20 +_020D7700: + mov r0, r9 + mov r1, r8 + bl DC_InvalidateRange + bl DC_WaitWriteBufferEmpty + ldr r1, _020D7758 ; =CARDi_OnReadCard + mov r0, #0x80000 + bl OS_SetIrqFunction + mov r0, #0x80000 + bl OS_ResetRequestIrqMask + mov r0, #0x80000 + bl OS_EnableIrqMask + mov r0, r5 + bl OS_RestoreInterrupts + bl CARDi_SetCardDma +_020D7738: + mov r0, r7 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D7748: .word 0x021D55C0 +_020D774C: .word 0x01FF8000 +_020D7750: .word 0x000001FF +_020D7754: .word 0x02106A50 +_020D7758: .word CARDi_OnReadCard + + arm_func_start CARDi_OnReadCard +CARDi_OnReadCard: ; 0x020D775C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r0, _020D7838 ; =0x021D55C0 + ldr r0, [r0, #0x28] + bl MI_StopDma + ldr r0, _020D7838 ; =0x021D55C0 + ldr r3, [r0, #0x1c] + ldr r2, [r0, #0x20] + ldr r1, [r0, #0x24] + add r3, r3, #0x200 + add r2, r2, #0x200 + subs r1, r1, #0x200 + str r3, [r0, #0x1c] + str r2, [r0, #0x20] + str r1, [r0, #0x24] + bne _020D7828 + mov r0, #0x80000 + bl OS_DisableIrqMask + mov r0, #0x80000 + bl OS_ResetRequestIrqMask + ldr r7, _020D7838 ; =0x021D55C0 + bl CARDi_ReadRomIDCore + bl CARDi_CheckPulledOutCore +_020D77B8: ; 0x020D77B8 + ldr r0, [r7, #0x0] + mov r1, #0x0 + str r1, [r0, #0x0] + ldr r6, [r7, #0x38] + ldr r5, [r7, #0x3c] + bl OS_DisableInterrupts + ldr r1, [r7, #0x114] + mov r4, r0 + bic r0, r1, #0x4c + str r0, [r7, #0x114] + add r0, r7, #0x10c + bl OS_WakeupThread + ldr r0, [r7, #0x114] + ands r0, r0, #0x10 + beq _020D77FC + add r0, r7, #0x44 + bl OS_WakeupThreadDirect +_020D77FC: + mov r0, r4 + bl OS_RestoreInterrupts +_020D7804: ; 0x020D7804 + cmp r6, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r5 + blx r6 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_020D7828: + bl CARDi_SetCardDma + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D7838: .word 0x021D55C0 + + arm_func_start CARDi_SetCardDma +CARDi_SetCardDma: ; 0x020D783C + stmdb sp!, {r4,lr} + ldr r4, _020D7884 ; =0x021D55C0 + ldr r1, _020D7888 ; =0x04100010 + ldr r0, [r4, #0x28] + ldr r2, [r4, #0x20] + mov r3, #0x200 + bl MIi_CardDmaCopy32 + ldr r1, [r4, #0x1c] + mov r0, r1, lsr #0x8 + orr r0, r0, #0xb7000000 + mov r1, r1, lsl #0x18 + bl CARDi_SetRomOp + ldr r0, _020D788C ; =0x021D5C00 + ldr r1, _020D7890 ; =0x040001A4 + ldr r0, [r0, #0x4] + str r0, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D7884: .word 0x021D55C0 +_020D7888: .word 0x04100010 +_020D788C: .word 0x021D5C00 +_020D7890: .word 0x040001A4 + + arm_func_start CARDi_SetRomOp +CARDi_SetRomOp: ; 0x020D7894 + ldr r3, _020D790C ; =0x040001A4 +_020D7898: + ldr r2, [r3, #0x0] + ands r2, r2, #0x80000000 + bne _020D7898 + ldr r3, _020D7910 ; =0x040001A1 + mov r12, #0xc0 + ldr r2, _020D7914 ; =0x040001A8 + strb r12, [r3, #0x0] + mov r12, r0, lsr #0x18 + ldr r3, _020D7918 ; =0x040001A9 + strb r12, [r2, #0x0] + mov r12, r0, lsr #0x10 + ldr r2, _020D791C ; =0x040001AA + strb r12, [r3, #0x0] + mov r12, r0, lsr #0x8 + ldr r3, _020D7920 ; =0x040001AB + strb r12, [r2, #0x0] + ldr r2, _020D7924 ; =0x040001AC + strb r0, [r3, #0x0] + mov r3, r1, lsr #0x18 + ldr r0, _020D7928 ; =0x040001AD + strb r3, [r2, #0x0] + mov r3, r1, lsr #0x10 + ldr r2, _020D792C ; =0x040001AE + strb r3, [r0, #0x0] + mov r3, r1, lsr #0x8 + ldr r0, _020D7930 ; =0x040001AF + strb r3, [r2, #0x0] + strb r1, [r0, #0x0] + bx lr + .balign 4 +_020D790C: .word 0x040001A4 +_020D7910: .word 0x040001A1 +_020D7914: .word 0x040001A8 +_020D7918: .word 0x040001A9 +_020D791C: .word 0x040001AA +_020D7920: .word 0x040001AB +_020D7924: .word 0x040001AC +_020D7928: .word 0x040001AD +_020D792C: .word 0x040001AE +_020D7930: .word 0x040001AF + + arm_func_start CARDi_ReadFromCache +CARDi_ReadFromCache: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r5, _020D79C8 ; =0x021D55C0 + mov r1, #0x200 + ldr r3, [r5, #0x1c] + rsb r1, r1, #0x0 + ldr r2, [r0, #0x8] + and r3, r3, r1 + cmp r3, r2 + bne _020D79AC + ldr r2, [r5, #0x1c] + ldr r1, [r5, #0x24] + sub r3, r2, r3 + rsb r4, r3, #0x200 + cmp r4, r1 + movhi r4, r1 + add r0, r0, #0x20 + ldr r1, [r5, #0x20] + mov r2, r4 + add r0, r0, r3 + bl MI_CpuCopy8 + ldr r0, [r5, #0x1c] + add r0, r0, r4 + str r0, [r5, #0x1c] + ldr r0, [r5, #0x20] + add r0, r0, r4 + str r0, [r5, #0x20] + ldr r0, [r5, #0x24] + sub r0, r0, r4 + str r0, [r5, #0x24] +_020D79AC: + ldr r0, [r5, #0x24] + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D79C8: .word 0x021D55C0 + + arm_func_start CARDi_Request +CARDi_Request: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r6, r0 + ldr r0, [r6, #0x114] + mov r5, r1 + mov r4, r2 + ands r0, r0, #0x2 + bne _020D7A44 + ldr r1, [r6, #0x114] + mov r0, #0xb + orr r2, r1, #0x2 + mov r1, #0x1 + str r2, [r6, #0x114] + bl PXI_IsCallbackReady +_020D7A04: ; 0x020D7A04 + cmp r0, #0x0 + bne _020D7A34 + mov r9, #0x64 + mov r8, #0xb + mov r7, #0x1 +_020D7A18: + mov r0, r9 + bl OS_SpinWait + mov r0, r8 + mov r1, r7 + bl PXI_IsCallbackReady +_020D7A2C: ; 0x020D7A2C + cmp r0, #0x0 + beq _020D7A18 +_020D7A34: + mov r0, r6 + mov r1, #0x0 + mov r2, #0x1 + bl CARDi_Request +_020D7A44: + ldr r0, [r6, #0x0] + mov r1, #0x60 + bl DC_FlushRange + bl DC_WaitWriteBufferEmpty + mov r9, #0xb + mov r8, #0x1 + mov r7, #0x0 + mov r11, #0x60 +_020D7A64: + str r5, [r6, #0x4] + ldr r0, [r6, #0x114] + orr r0, r0, #0x20 + str r0, [r6, #0x114] +_020D7A74: + mov r0, r9 + mov r1, r5 + mov r2, r8 + bl PXI_SendWordByFifo +_020D7A84: ; 0x020D7A84 + cmp r0, #0x0 + blt _020D7A74 + cmp r5, #0x0 + bne _020D7AB0 + ldr r10, [r6, #0x0] +_020D7A98: + mov r0, r9 + mov r1, r10 + mov r2, r8 + bl PXI_SendWordByFifo +_020D7AA8: ; 0x020D7AA8 + cmp r0, #0x0 + blt _020D7A98 +_020D7AB0: + bl OS_DisableInterrupts + ldr r1, [r6, #0x114] + mov r10, r0 + ands r0, r1, #0x20 + beq _020D7AD8 +_020D7AC4: + mov r0, r7 + bl OS_SleepThread + ldr r0, [r6, #0x114] + ands r0, r0, #0x20 + bne _020D7AC4 +_020D7AD8: + mov r0, r10 + bl OS_RestoreInterrupts +_020D7AE0: ; 0x020D7AE0 + ldr r0, [r6, #0x0] + mov r1, r11 + bl DC_InvalidateRange +_020D7AEC: ; 0x020D7AEC + ldr r0, [r6, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x4 + bne _020D7B08 + sub r4, r4, #0x1 + cmp r4, #0x0 + bgt _020D7A64 +_020D7B08: + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start CARDi_TaskThread +CARDi_TaskThread: ; 0x020D7B20 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r5, _020D7B78 ; =0x021D55C0 + mov r6, #0x0 + add r7, r5, #0x44 +_020D7B34: + bl OS_DisableInterrupts + ldr r1, [r5, #0x114] + mov r4, r0 + ands r0, r1, #0x8 + bne _020D7B60 +_020D7B48: + mov r0, r6 + str r7, [r5, #0x104] + bl OS_SleepThread + ldr r0, [r5, #0x114] + ands r0, r0, #0x8 + beq _020D7B48 +_020D7B60: + mov r0, r4 + bl OS_RestoreInterrupts + ldr r1, [r5, #0x40] + mov r0, r5 + blx r1 + b _020D7B34 + .balign 4 +_020D7B78: .word 0x021D55C0 + + arm_func_start CARDi_OnFifoRecv +CARDi_OnFifoRecv: ; 0x020D7B7C + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0xb + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + ldr r1, _020D7BC8 ; =0x021D55C0 + ldr r0, [r1, #0x114] + bic r0, r0, #0x20 + str r0, [r1, #0x114] + ldr r0, [r1, #0x104] + bl OS_WakeupThreadDirect + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D7BC8: .word 0x021D55C0 + + arm_func_start CARDi_SendtoPxi +CARDi_SendtoPxi: ; 0x020D7BCC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r1, r7 + mov r0, #0xe + mov r2, #0x0 + bl PXI_SendWordByFifo +_020D7BEC: ; 0x020D7BEC + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r5, #0xe + mov r4, #0x0 +_020D7C04: + mov r0, r6 + blx FUN_020005F2 + mov r0, r5 + mov r1, r7 + mov r2, r4 + bl PXI_SendWordByFifo +_020D7C1C: ; 0x020D7C1C + cmp r0, #0x0 + bne _020D7C04 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start CARDi_CheckPulledOutCore +CARDi_CheckPulledOutCore: + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r1, _020D7C94 ; =0x027FFC10 + ldrh r1, [r1, #0x0] + cmp r1, #0x0 + ldreq r1, _020D7C98 ; =0x027FF800 + ldrne r1, _020D7C9C ; =0x027FFC00 + ldr r1, [r1, #0x0] + str r1, [sp, #0x0] + ldr r1, [sp, #0x0] + cmp r0, r1 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4,lr} + bxeq lr + bl OS_DisableInterrupts + mov r4, r0 + mov r0, #0xe + mov r1, #0x11 + mov r2, #0x0 + bl CARDi_PulledOutCallback + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D7C94: .word 0x027FFC10 +_020D7C98: .word 0x027FF800 +_020D7C9C: .word 0x027FFC00 + + arm_func_start CARD_TerminateForPulledOut +CARD_TerminateForPulledOut: ; 0x020D7CA0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020D7D10 ; =0x027FFFA8 + mov r5, #0x1 + ldrh r0, [r0, #0x0] + and r0, r0, #0x8000 + movs r0, r0, asr #0xf + beq _020D7CEC + bl PM_ForceToPowerOff + cmp r0, #0x4 + bne _020D7CE4 + ldr r4, _020D7D14 ; =0x000A3A47 +_020D7CD0: + mov r0, r4 + bl OS_SpinWait + bl PM_ForceToPowerOff + cmp r0, #0x4 + beq _020D7CD0 +_020D7CE4: + cmp r0, #0x0 + moveq r5, #0x0 +_020D7CEC: + cmp r5, #0x0 + beq _020D7D00 + mov r0, #0x1 + mov r1, r0 + bl CARDi_SendtoPxi +_020D7D00: + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D7D10: .word 0x027FFFA8 +_020D7D14: .word 0x000A3A47 + + arm_func_start CARD_IsPulledOut +CARD_IsPulledOut: ; 0x020D7D18 + ldr r0, _020D7D24 ; =0x021D5E20 + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D7D24: .word 0x021D5E20 + + arm_func_start CARDi_PulledOutCallback +CARDi_PulledOutCallback: ; 0x020D7D28 + stmdb sp!, {lr} + sub sp, sp, #0x4 + and r0, r1, #0x3f + cmp r0, #0x11 + bne _020D7D90 + ldr r2, _020D7DA0 ; =0x021D5E20 + ldr r0, [r2, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r1, _020D7DA4 ; =0x021D5E24 + mov r0, #0x1 + ldr r1, [r1, #0x0] + str r0, [r2, #0x0] + cmp r1, #0x0 + beq _020D7D70 + blx r1 +_020D7D70: + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + bl CARD_TerminateForPulledOut + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020D7D90: + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D7DA0: .word 0x021D5E20 +_020D7DA4: .word 0x021D5E24 + + arm_func_start CARD_InitPulledOutCallback +CARD_InitPulledOutCallback: ; 0x020D7DA8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl PXI_Init + ldr r1, _020D7DD8 ; =CARDi_PulledOutCallback + mov r0, #0xe + bl PXI_SetFifoRecvCallback + ldr r0, _020D7DDC ; =0x021D5E24 + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D7DD8: .word CARDi_PulledOutCallback +_020D7DDC: .word 0x021D5E24 diff --git a/asm/PM_arm9.s b/asm/PM_arm9.s new file mode 100644 index 00000000..0e654689 --- /dev/null +++ b/asm/PM_arm9.s @@ -0,0 +1,1125 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start PM_DeletePostSleepCallback +PM_DeletePostSleepCallback: ; 0x020D4AE8 + ldr ip, _020D4AF8 ; =0x020D4B78 + mov r1, r0 + ldr r0, _020D4AFC ; =0x021D54E0 + bx r12 + .balign 4 +_020D4AF8: .word 0x020D4B78 +_020D4AFC: .word 0x021D54E0 + + arm_func_start PM_DeletePreSleepCallback +PM_DeletePreSleepCallback: ; 0x020D4B00 + ldr ip, _020D4B10 ; =0x020D4B78 + mov r1, r0 + ldr r0, _020D4B14 ; =0x021D54D8 + bx r12 + .balign 4 +_020D4B10: .word 0x020D4B78 +_020D4B14: .word 0x021D54D8 + + arm_func_start PM_AppendPostSleepCallback +PM_AppendPostSleepCallback: ; 0x020D4B18 + ldr ip, _020D4B28 ; =FUN_020D4BC4 + mov r1, r0 + ldr r0, _020D4B2C ; =0x021D54E0 + bx r12 + .balign 4 +_020D4B28: .word FUN_020D4BC4 +_020D4B2C: .word 0x021D54E0 + + arm_func_start PM_PrependPreSleepCallback +PM_PrependPreSleepCallback: ; 0x020D4B30 + ldr ip, _020D4B40 ; =FUN_020D4C0C + mov r1, r0 + ldr r0, _020D4B44 ; =0x021D54D8 + bx r12 + .balign 4 +_020D4B40: .word FUN_020D4C0C +_020D4B44: .word 0x021D54D8 + + arm_func_start PMi_ExecuteList +PMi_ExecuteList: ; 0x020D4B48 + stmdb sp!, {r4,lr} + movs r4, r0 + ldmeqia sp!, {r4,lr} + bxeq lr +_020D4B58: + ldr r0, [r4, #0x4] + ldr r1, [r4, #0x0] + blx r1 + ldr r4, [r4, #0x8] + cmp r4, #0x0 + bne _020D4B58 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020D4B78 +FUN_020D4B78: + cmp r0, #0x0 + bxeq lr + ldr r3, [r0] + mov r2, r3 + cmp r3, #0x0 + bxeq lr +_020D4B90: + cmp r3, r1 + bne _020D4BB0 + cmp r3, r2 + ldreq r1, [r3, #0x8] + streq r1, [r0] + ldrne r0, [r3, #0x8] + strne r0, [r2, #0x8] + bx lr +_020D4BB0: + mov r2, r3 + ldr r3, [r3, #0x8] + cmp r3, #0x0 + bne _020D4B90 + bx lr + + arm_func_start FUN_020D4BC4 +FUN_020D4BC4: ; 0x020D4BC4 + cmp r0, #0x0 + bxeq lr + ldr r2, [r0, #0x0] + cmp r2, #0x0 + moveq r2, #0x0 + streq r2, [r1, #0x8] + streq r1, [r0, #0x0] + bxeq lr + ldr r0, [r2, #0x8] + cmp r0, #0x0 + beq _020D4C00 +_020D4BF0: + mov r2, r0 + ldr r0, [r0, #0x8] + cmp r0, #0x0 + bne _020D4BF0 +_020D4C00: + str r0, [r1, #0x8] + str r1, [r2, #0x8] + bx lr + + arm_func_start FUN_020D4C0C +FUN_020D4C0C: ; 0x020D4C0C + cmp r0, #0x0 + ldrne r2, [r0, #0x0] + strne r2, [r1, #0x8] + strne r1, [r0, #0x0] + bx lr + + arm_func_start PM_GetLEDPattern +PM_GetLEDPattern: ; 0x020D4C20 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D4C58 ; =0x020D587C + add r2, sp, #0x0 + bl PM_GetLEDPatternAsync +_020D4C34: + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmnefd sp!, {lr} + bxne lr + bl PMi_WaitBusy + ldr r0, [sp] + add sp, sp, #0x4 + ldmfd sp!, {lr} + bx lr +_020D4C58: .word 0x020D587C + + arm_func_start PM_GetLEDPatternAsync +PM_GetLEDPatternAsync: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl PMi_Lock +_020D4C70: + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r1, _020D4CA4 + ldr r0, _020D4CA8 + str r5, [r1, #0x4] + str r4, [r1, #0x8] + str r6, [r1, #0xC] + bl PMi_SendPxiData + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020D4CA4: .word 0x021D54E4 +_020D4CA8: .word 0x03006700 + + arm_func_start PMi_SendLEDPatternCommand +PMi_SendLEDPatternCommand: ; 0x020D4CAC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D4CE4 ; =0x020D587C + add r2, sp, #0x0 + bl PMi_SendLEDPatternCommandAsync +_020D4CC0: + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmnefd sp!, {lr} + bxne lr + bl PMi_WaitBusy + ldr r0, [sp] + add sp, sp, #0x4 + ldmfd sp!, {lr} + bx lr +_020D4CE4: .word 0x020D587C + + arm_func_start PMi_SendLEDPatternCommandAsync +PMi_SendLEDPatternCommandAsync: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl PMi_Lock +_020D4CFC: + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r0, _020D4D34 + ldr r1, _020D4D38 + and r2, r6, #0xff + orr r0, r2, r0 + str r5, [r1, #0x4] + str r4, [r1, #0x8] + bl PMi_SendPxiData + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020D4D34: .word 0x03006600 +_020D4D38: .word 0x021D54E4 + + arm_func_start PM_GetLCDPower +PM_GetLCDPower: ; 0x020D4D3C + ldr r0, _020D4D54 ; =0x04000304 + ldrh r0, [r0, #0x0] + ands r0, r0, #0x1 + movne r0, #0x1 + moveq r0, #0x0 + bx lr + .balign 4 +_020D4D54: .word 0x04000304 + + arm_func_start PM_SetLCDPower +PM_SetLCDPower: ; 0x020D4D58 + ldr ip, _020D4D74 ; =PMi_SetLCDPower + mov r1, #0x0 + cmp r0, #0x1 + movne r0, #0x0 + mov r2, r1 + mov r3, #0x1 + bx r12 + .balign 4 +_020D4D74: .word PMi_SetLCDPower + + arm_func_start PMi_SetLCDPower +PMi_SetLCDPower: ; 0x020D4D78 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + beq _020D4E00 + cmp r0, #0x1 + bne _020D4E4C + cmp r2, #0x0 + bne _020D4DC0 + ldr r2, _020D4E5C ; =0x027FFC3C + ldr r0, _020D4E60 ; =0x021D54DC + ldr r2, [r2, #0x0] + ldr r0, [r0, #0x0] + sub r0, r2, r0 + cmp r0, #0x7 + addls sp, sp, #0x4 + movls r0, #0x0 + ldmlsia sp!, {lr} + bxls lr +_020D4DC0: + cmp r1, #0x0 + beq _020D4DEC + cmp r3, #0x0 + beq _020D4DDC + mov r0, r1 + bl PMi_SetLED + b _020D4DEC +_020D4DDC: + mov r0, r1 + mov r1, #0x0 + mov r2, r1 + bl PMi_SetLEDAsync +_020D4DEC: + ldr r1, _020D4E64 ; =0x04000304 + ldrh r0, [r1, #0x0] + orr r0, r0, #0x1 + strh r0, [r1, #0x0] + b _020D4E4C +_020D4E00: + ldr lr, _020D4E64 ; =0x04000304 + ldr r2, _020D4E5C ; =0x027FFC3C + ldrh r12, [lr, #0x0] + ldr r0, _020D4E60 ; =0x021D54DC + cmp r1, #0x0 + bic r12, r12, #0x1 + strh r12, [lr, #0x0] + ldr r2, [r2, #0x0] + str r2, [r0, #0x0] + beq _020D4E4C + cmp r3, #0x0 + beq _020D4E3C + mov r0, r1 + bl PMi_SetLED + b _020D4E4C +_020D4E3C: + mov r0, r1 + mov r1, #0x0 + mov r2, r1 + bl PMi_SetLEDAsync +_020D4E4C: + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D4E5C: .word 0x027FFC3C +_020D4E60: .word 0x021D54DC +_020D4E64: .word 0x04000304 + + arm_func_start PM_GoSleepMode +PM_GoSleepMode: ; 0x020D4E68 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x1c + ldr r3, _020D5084 ; =0x021D54D8 + mov r10, r0 + ldr r0, [r3, #0x0] + mov r9, r1 + mov r11, r2 + mov r8, #0x0 + bl PMi_ExecuteList + ldr r1, _020D5088 ; =0x04000208 + mov r0, r8 + ldrh r4, [r1, #0x0] + strh r0, [r1, #0x0] + bl OS_DisableInterrupts +_020D4EA0: + str r0, [sp] + ldr r0, _020D508C + bl OS_DisableIrqMask + str r0, [sp, #0x4] + mov r0, #0x40000 + bl OS_SetIrqMask + ldr r0, [sp] + bl OS_RestoreInterrupts + ldr r2, _020D5088 + mov r1, #0x1 + ldrh r0, [r2] + ands r0, sl, #0x8 + strh r1, [r2] + beq _020D4EE8 + ldr r0, _020D5090 + ldrh r0, [r0] + cmp r0, #0x2 + biceq sl, sl, #0x8 +_020D4EE8: + ands r0, sl, #0x10 + beq _020D4EFC + bl CTRDG_IsExisting + cmp r0, #0x0 + biceq sl, sl, #0x10 +_020D4EFC: + ldr r0, _020D5094 + mov r1, #0x4000000 + ldr r7, [r1] + ldr r6, [r0] + bl PM_GetLCDPower + str r0, [sp, #0x8] + add r0, sp, #0xC + add r1, sp, #0x10 + bl PM_GetBackLight + mov r0, #0x2 + mov r1, #0x0 + bl FUN_020D526C + ldr r2, _020D5098 + ldr r0, [r2] + str r0, [sp, #0x14] +_020D4F38: + ldr r1, [r2] + ldr r0, [sp, #0x14] + cmp r0, r1 + beq _020D4F38 + ldr r0, [r2] + mov r2, #0x4000000 + str r0, [sp, #0x14] + ldr r0, [r2] + ldr r1, _020D5094 + bic r0, r0, #0x30000 + str r0, [r2] + ldr r0, [r1] + bic r0, r0, #0x10000 + str r0, [r1] + ldr r2, _020D5098 +_020D4F74: + ldr r1, [r2] + ldr r0, [sp, #0x14] + cmp r0, r1 + beq _020D4F74 + ldr r0, [r2] + str r0, [sp, #0x14] + ldr r2, _020D5098 +_020D4F90: + ldr r1, [r2] + ldr r0, [sp, #0x14] + cmp r0, r1 + beq _020D4F90 + ldr r0, [sp, #0xC] + ldr r1, [sp, #0x10] + orr r0, sl, r0, lsl #0x5 + orr r0, r0, r1, lsl #0x6 + mov r0, r0, lsl #0x10 + mov r5, r0, lsr #0x10 + orr r0, r9, fp + mov r0, r0, lsl #0x10 + mov r9, r0, lsr #0x10 +_020D4FC4: + mov r0, r5 + mov r1, r9 + bl PMi_SendSleepStart + cmp r0, #0x0 + bne _020D4FC4 + bl OS_Halt + ldr r0, _020D509C + bl OS_SpinWait + ands r0, sl, #0x8 + beq _020D4FFC + ldr r0, _020D50A0 + ldr r0, [r0] + ands r0, r0, #0x100000 + movne r8, #0x1 +_020D4FFC: + cmp r8, #0x0 + bne _020D5040 + ldr r0, [sp, #0x8] + cmp r0, #0x1 + bne _020D5028 + mov r0, #0x1 + mov r1, r0 + mov r2, r0 + mov r3, #0x0 + bl PMi_SetLCDPower + b _020D5030 +_020D5028: + mov r0, #0x1 + bl PMi_SetLED +_020D5030: + mov r1, #0x4000000 + ldr r0, _020D5094 + str r7, [r1] + str r6, [r0] +_020D5040: + bl OS_DisableInterrupts + ldr r0, [sp, #0x4] + bl OS_SetIrqMask + ldr r0, [sp] + bl OS_RestoreInterrupts + ldr r1, _020D5088 + cmp r8, #0x0 + ldrh r0, [r1] + strh r4, [r1] + beq _020D506C + bl PM_ForceToPowerOff +_020D506C: + ldr r0, _020D50A4 + ldr r0, [r0] + bl PMi_ExecuteList + add sp, sp, #0x1C + ldmia sp!, {r4-r11, lr} + bx lr +_020D5084: .word 0x021D54D8 +_020D5088: .word 0x04000208 +_020D508C: .word 0x003FFFFF +_020D5090: .word 0x027FFC40 +_020D5094: .word 0x04001000 +_020D5098: .word 0x027FFC3C +_020D509C: .word 0x00996A00 +_020D50A0: .word 0x04000214 +_020D50A4: .word 0x021D54E0 + + + arm_func_start PMi_SendPxiData +PMi_SendPxiData: ; 0x020D50A8 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, #0x8 + mov r4, #0x0 +_020D50B8: + mov r0, r5 + mov r1, r6 + mov r2, r4 + bl PXI_SendWordByFifo +_020D50C8: + cmp r0, #0 + bne _020D50B8 + ldmia sp!, {r4-r6, lr} + bx lr + + arm_func_start PM_GetBackLight +PM_GetBackLight: ; 0x020D50D8 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r5, r0 + add r1, sp, #0x0 + mov r0, #0x0 + bl PMi_ReadRegister +_020D50F4: + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r5, #0x0 + beq _020D5120 + ldrh r1, [sp] + ands r1, r1, #0x8 + movne r1, #0x1 + moveq r1, #0x0 + str r1, [r5] +_020D5120: + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldrh r1, [sp] + ands r1, r1, #0x4 + movne r1, #0x1 + moveq r1, #0x0 + str r1, [r4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start PM_SetAmpGain +PM_SetAmpGain: ; 0x020D5150 + ldr ip, _020D5164 ; =FUN_020D53DC + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0x10 + mov r0, #0x3 + bx r12 + .balign 4 +_020D5164: .word FUN_020D53DC + + arm_func_start PM_SetAmp +PM_SetAmp: ; 0x020D5168 + ldr ip, _020D517C ; =FUN_020D53DC + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0x10 + mov r0, #0x2 + bx r12 + .balign 4 +_020D517C: .word FUN_020D53DC + + arm_func_start PM_ForceToPowerOff +PM_ForceToPowerOff: ; 0x020D5180 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020D51B8 ; =PMi_DummyCallback + add r1, sp, #0x0 + bl PM_ForceToPowerOffAsync +_020D5194: ; 0x020D5194 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl PMi_WaitBusy +_020D51A8: ; 0x020D51A8 + ldr r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D51B8: .word PMi_DummyCallback + + arm_func_start PM_ForceToPowerOffAsync +PM_ForceToPowerOffAsync: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + ldr r0, _020D5268 ; =0x00996A00 + mov r6, r1 + bl OS_SpinWait + bl PM_GetLCDPower + cmp r0, #0x1 + beq _020D524C + add r0, sp, #0x0 + add r1, sp, #0x4 + bl PM_GetBackLight +_020D51EC: ; 0x020D51EC + ldr r0, [sp, #0x0] + cmp r0, #0x0 + beq _020D5204 + mov r0, #0x0 + mov r1, r0 + bl PM_SetBackLight +_020D5204: + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020D521C + mov r0, #0x1 + mov r1, #0x0 + bl PM_SetBackLight +_020D521C: + mov r0, #0x1 + bl PM_SetLCDPower +_020D5224: ; 0x020D5224 + cmp r0, #0x0 + bne _020D524C + ldr r5, _020D5268 ; =0x00996A00 + mov r4, #0x1 +_020D5234: + mov r0, r5 + bl OS_SpinWait + mov r0, r4 + bl PM_SetLCDPower +_020D5244: ; 0x020D5244 + cmp r0, #0x0 + beq _020D5234 +_020D524C: + mov r1, r7 + mov r2, r6 + mov r0, #0xe + bl PM_SendUtilityCommandAsync + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D5268: .word 0x00996A00 + + arm_func_start PM_SetBackLight +PM_SetBackLight: ; 0x020D526C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020D52A4 ; =PMi_DummyCallback + add r3, sp, #0x0 + bl PM_SetBackLightAsync +_020D5280: ; 0x020D5280 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl PMi_WaitBusy +_020D5294: ; 0x020D5294 + ldr r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D52A4: .word PMi_DummyCallback + + arm_func_start PM_SetBackLightAsync +PM_SetBackLightAsync: + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + mov r12, #0x0 + bne _020D52D0 + cmp r1, #0x1 + moveq r12, #0x6 + cmp r1, #0x0 + moveq r12, #0x7 + b _020D5304 +_020D52D0: + cmp r0, #0x1 + bne _020D52EC + cmp r1, #0x1 + moveq r12, #0x4 + cmp r1, #0x0 + moveq r12, #0x5 + b _020D5304 +_020D52EC: + cmp r0, #0x2 + bne _020D5304 + cmp r1, #0x1 + moveq r12, #0x8 + cmp r1, #0x0 + moveq r12, #0x9 +_020D5304: + cmp r12, #0x0 + addeq sp, sp, #0x4 + ldreq r0, _020D5334 ; =0x0000FFFF + ldmeqia sp!, {lr} + bxeq lr + mov r1, r2 + mov r0, r12 + mov r2, r3 + bl PM_SendUtilityCommandAsync + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D5334: .word 0x0000FFFF + + arm_func_start PMi_SetLED +PMi_SetLED: ; 0x020D5338 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D5370 ; =PMi_DummyCallback + add r2, sp, #0x0 + bl PMi_SetLEDAsync +_020D534C: ; 0x020D534C + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl PMi_WaitBusy +_020D5360: ; 0x020D5360 + ldr r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D5370: .word PMi_DummyCallback + + arm_func_start PMi_SetLEDAsync +PMi_SetLEDAsync: + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x1 + beq _020D5398 + cmp r0, #0x2 + beq _020D53A8 + cmp r0, #0x3 + beq _020D53A0 + b _020D53B0 +_020D5398: + mov r0, #0x1 + b _020D53B4 +_020D53A0: + mov r0, #0x2 + b _020D53B4 +_020D53A8: + mov r0, #0x3 + b _020D53B4 +_020D53B0: + mov r0, #0x0 +_020D53B4: + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldreq r0, _020D53D8 ; =0x0000FFFF + ldmeqia sp!, {lr} + bxeq lr + bl PM_SendUtilityCommandAsync + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D53D8: .word 0x0000FFFF + + arm_func_start FUN_020D53DC +FUN_020D53DC: ; 0x020D53DC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020D5414 ; =PMi_DummyCallback + add r3, sp, #0x0 + bl PMi_WriteRegisterAsync +_020D53F0: ; 0x020D53F0 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl PMi_WaitBusy +_020D5404: ; 0x020D5404 + ldr r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D5414: .word PMi_DummyCallback + + arm_func_start PMi_WriteRegisterAsync +PMi_WriteRegisterAsync: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r4, r1 + mov r6, r2 + mov r5, r3 + bl PMi_Lock +_020D5434: ; 0x020D5434 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x1 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldr r0, _020D5488 ; =0x02006400 + ldr r1, _020D548C ; =0x021D54E4 + and r2, r7, #0xff + orr r0, r2, r0 + str r6, [r1, #0x4] + str r5, [r1, #0x8] + bl PMi_SendPxiData + ldr r0, _020D5490 ; =0x0000FFFF + ldr r1, _020D5494 ; =0x01010000 + and r0, r4, r0 + orr r0, r0, r1 + bl PMi_SendPxiData +_020D5478: ; 0x020D5478 + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D5488: .word 0x02006400 +_020D548C: .word 0x021D54E4 +_020D5490: .word 0x0000FFFF +_020D5494: .word 0x01010000 + + arm_func_start PMi_ReadRegister +PMi_ReadRegister: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020D54D0 ; =PMi_DummyCallback + add r3, sp, #0x0 + bl PMi_ReadRegisterAsync +_020D54AC: ; 0x020D54AC + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl PMi_WaitBusy +_020D54C0: ; 0x020D54C0 + ldr r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D54D0: .word PMi_DummyCallback + + arm_func_start PMi_ReadRegisterAsync +PMi_ReadRegisterAsync: + stmdb sp!, {r4-r8,lr} + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl PMi_Lock +_020D54EC: ; 0x020D54EC + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr ip, _020D553C ; =0x021D550C + ldr r1, _020D5540 ; =0x021D54E4 + ldr r0, _020D5544 ; =0x03006500 + and r2, r7, #0xff + mov lr, r7, lsl #0x3 + mov r8, #0x0 + ldr r3, _020D5548 ; =0x021D5510 + strh r8, [r12, lr] + orr r0, r2, r0 + str r5, [r1, #0x4] + str r4, [r1, #0x8] + str r6, [r3, r7, lsl #0x3] + bl PMi_SendPxiData + mov r0, r8 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D553C: .word 0x021D550C +_020D5540: .word 0x021D54E4 +_020D5544: .word 0x03006500 +_020D5548: .word 0x021D5510 + + arm_func_start PM_SendUtilityCommandAsync +PM_SendUtilityCommandAsync: ; 0x020D554C + stmdb sp!, {r4-r6,lr} + mov r4, r0 + mov r6, r1 + mov r5, r2 + bl PMi_Lock +_020D5560: ; 0x020D5560 + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r2, r4, lsr #0x10 + ldr r1, _020D55B0 ; =0x021D54E4 + ldr r0, _020D55B4 ; =0x02006300 + and r2, r2, #0xff + orr r0, r2, r0 + str r6, [r1, #0x4] + str r5, [r1, #0x8] + bl PMi_SendPxiData + ldr r0, _020D55B8 ; =0x0000FFFF + ldr r1, _020D55BC ; =0x01010000 + and r0, r4, r0 + orr r0, r0, r1 + bl PMi_SendPxiData +_020D55A4: ; 0x020D55A4 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D55B0: .word 0x021D54E4 +_020D55B4: .word 0x02006300 +_020D55B8: .word 0x0000FFFF +_020D55BC: .word 0x01010000 + + arm_func_start PMi_SendSleepStart +PMi_SendSleepStart: ; 0x020D55C0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl PMi_Lock +_020D55D4: ; 0x020D55D4 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x1 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r1, _020D5660 ; =0x021D54D0 + mov r2, #0x0 + ldr r0, _020D5664 ; =0x03006000 + str r2, [r1, #0x0] + bl PMi_SendPxiData + ldr r1, _020D5660 ; =0x021D54D0 +_020D5600: + ldr r0, [r1, #0x0] + cmp r0, #0x0 + beq _020D5600 + mov r0, #0x0 + ldr ip, _020D5668 ; =0x021D54D4 + str r0, [r1, #0x0] + mov r2, r0 + mov r3, r0 + mov r1, #0x2 + str r0, [r12, #0x0] + bl PMi_SetLCDPower + ldr r0, _020D566C ; =0x02006100 + and r1, r5, #0xff + orr r0, r1, r0 + bl PMi_SendPxiData + ldr r0, _020D5670 ; =0x0000FFFF + ldr r1, _020D5674 ; =0x01010000 + and r0, r4, r0 + orr r0, r0, r1 + bl PMi_SendPxiData +_020D5650: ; 0x020D5650 + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D5660: .word 0x021D54D0 +_020D5664: .word 0x03006000 +_020D5668: .word 0x021D54D4 +_020D566C: .word 0x02006100 +_020D5670: .word 0x0000FFFF +_020D5674: .word 0x01010000 + + arm_func_start PMi_CommonCallback +PMi_CommonCallback: ; 0x020D5678 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + beq _020D569C + mov r0, #0x2 + bl PMi_CallCallbackAndUnlock + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020D569C: + and r0, r1, #0x7f00 + mov r0, r0, lsl #0x8 + and r1, r1, #0xff + mov r2, r0, lsr #0x10 + mov r0, r1, lsl #0x10 + cmp r2, #0x70 + mov r0, r0, lsr #0x10 + blo _020D56FC + cmp r2, #0x74 + bhi _020D56FC + ldr r1, _020D5750 ; =0x021D5510 + sub r2, r2, #0x70 + and r0, r0, #0xff + ldr r1, [r1, r2, lsl #0x3] + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r1, #0x0 + strneh r0, [r1, #0x0] + mov r1, r2, lsl #0x3 + ldr r0, _020D5754 ; =0x021D550C + mov r2, #0x1 + strh r2, [r0, r1] + mov r0, #0x0 + b _020D5740 +_020D56FC: + cmp r2, #0x60 + ldreq r1, _020D5758 ; =0x021D54D0 + moveq r2, #0x1 + streq r2, [r1, #0x0] + beq _020D5740 + cmp r2, #0x62 + ldreq r1, _020D575C ; =0x021D54D4 + moveq r2, #0x1 + streq r2, [r1, #0x0] + beq _020D5740 + cmp r2, #0x67 + bne _020D5740 + ldr r1, _020D5760 ; =0x021D54E4 + ldr r1, [r1, #0xc] + cmp r1, #0x0 + strne r0, [r1, #0x0] + mov r0, #0x0 +_020D5740: + bl PMi_CallCallbackAndUnlock + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D5750: .word 0x021D5510 +_020D5754: .word 0x021D550C +_020D5758: .word 0x021D54D0 +_020D575C: .word 0x021D54D4 +_020D5760: .word 0x021D54E4 + + arm_func_start PM_Init +PM_Init: ; 0x020D5764 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020D580C ; =0x021D54CC + ldrh r0, [r1, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, _020D5810 ; =0x021D54E4 + mov r2, #0x0 + mov r3, #0x1 + strh r3, [r1, #0x0] + str r2, [r0, #0x0] + str r2, [r0, #0x4] + bl PXI_Init + mov r5, #0x8 + mov r4, #0x1 +_020D57A8: + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady +_020D57B4: ; 0x020D57B4 + cmp r0, #0x0 + beq _020D57A8 + ldr r1, _020D5814 ; =PMi_CommonCallback + mov r0, #0x8 + bl PXI_SetFifoRecvCallback + mov r3, #0x0 + ldr r0, _020D5818 ; =0x021D550C + mov r2, r3 +_020D57D4: + mov r1, r3, lsl #0x3 + add r3, r3, #0x1 + strh r2, [r0, r1] + cmp r3, #0x5 + blt _020D57D4 + ldr r0, _020D581C ; =0x021D54F4 + bl OS_InitMutex + ldr r1, _020D5820 ; =0x027FFC3C + ldr r0, _020D5824 ; =0x021D54DC + ldr r1, [r1, #0x0] + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D580C: .word 0x021D54CC +_020D5810: .word 0x021D54E4 +_020D5814: .word PMi_CommonCallback +_020D5818: .word 0x021D550C +_020D581C: .word 0x021D54F4 +_020D5820: .word 0x027FFC3C +_020D5824: .word 0x021D54DC + + arm_func_start PMi_CallCallbackAndUnlock +PMi_CallCallbackAndUnlock: ; 0x020D5828 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020D5878 ; =0x021D54E4 + ldr r1, [r2, #0x0] + ldr r12, [r2, #0x4] + cmp r1, #0x0 + movne r3, #0x0 + strne r3, [r2, #0x0] + cmp r12, #0x0 + addeq sp, sp, #0x4 + ldr r1, [r2, #0x8] + ldmeqia sp!, {lr} + bxeq lr + ldr r2, _020D5878 ; =0x021D54E4 + mov r3, #0x0 + str r3, [r2, #0x4] + blx r12 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D5878: .word 0x021D54E4 + + arm_func_start PMi_DummyCallback +PMi_DummyCallback: ; 0x020D587C + str r0, [r1, #0x0] + bx lr + + arm_func_start PMi_WaitBusy +PMi_WaitBusy: + stmdb sp!, {r4,lr} + ldr r4, _020D58C0 ; =0x021D54E4 + ldr r0, [r4, #0x0] + cmp r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr +_020D589C: + bl OS_GetCpsrIrq + cmp r0, #0x80 + bne _020D58AC + bl PXIi_HandlerRecvFifoNotEmpty +_020D58AC: + ldr r0, [r4, #0x0] + cmp r0, #0x0 + bne _020D589C + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D58C0: .word 0x021D54E4 + + arm_func_start PMi_Lock +PMi_Lock: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r1, _020D5910 ; =0x021D54E4 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020D58F4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {lr} + bx lr +_020D58F4: + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D5910: .word 0x021D54E4 diff --git a/asm/RTC_arm9.s b/asm/RTC_arm9.s new file mode 100644 index 00000000..e6f5b4ee --- /dev/null +++ b/asm/RTC_arm9.s @@ -0,0 +1,1028 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start RtcWaitBusy +RtcWaitBusy: ; 0x020D5914 + ldr ip, _020D5928 ; =0x021D5538 +_020D5918: + ldr r0, [r12, #0x0] + cmp r0, #0x1 + beq _020D5918 + bx lr + .balign 4 +_020D5928: .word 0x021D5538 + + arm_func_start RtcGetResultCallback +RtcGetResultCallback: ; 0x020D592C + ldr r1, _020D5938 ; =0x021D5538 + str r0, [r1, #0x20] + bx lr + .balign 4 +_020D5938: .word 0x021D5538 + + arm_func_start RtcBCD2HEX +RtcBCD2HEX: ; 0x020D593C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, #0x0 + mov r3, r5 + mov r2, r5 +_020D5950: + mov r1, r0, lsr r2 + and r1, r1, #0xf + cmp r1, #0xa + addcs sp, sp, #0x4 + movcs r0, #0x0 + ldmcsia sp!, {r4-r5,lr} + bxcs lr + add r3, r3, #0x1 + cmp r3, #0x8 + add r2, r2, #0x4 + blt _020D5950 + mov r12, #0x0 + mov lr, r12 + mov r4, #0x1 + mov r2, #0xa +_020D598C: + mov r1, r0, lsr lr + and r3, r1, #0xf + mul r1, r4, r2 + mla r5, r4, r3, r5 + add r12, r12, #0x1 + mov r4, r1 + cmp r12, #0x8 + add lr, lr, #0x4 + blt _020D598C + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start RtcCommonCallback +RtcCommonCallback: ; 0x020D59C0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + beq _020D5A30 + ldr r0, _020D5F30 ; =0x021D5538 + ldr r2, _020D5F30 ; =0x021D5538 + ldr r1, [r0, #0x18] + ldr r4, [r2, #0x4] + cmp r1, #0x0 + movne r1, #0x0 + strne r1, [r0, #0x18] + ldr r0, _020D5F30 ; =0x021D5538 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + movne r1, #0x0 + strne r1, [r0, #0x0] + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r1, [r2, #0x10] + mov r3, #0x0 + mov r0, #0x6 + str r3, [r2, #0x4] + blx r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020D5A30: + and r0, r1, #0x7f00 + mov r0, r0, lsr #0x8 + and r0, r0, #0xff + cmp r0, #0x30 + and r2, r1, #0xff + bne _020D5A70 + ldr r0, _020D5F30 ; =0x021D5538 + ldr r0, [r0, #0x1c] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + blx r0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020D5A70: + cmp r2, #0x0 + bne _020D5E88 + ldr r0, _020D5F30 ; =0x021D5538 + mov r5, #0x0 + ldr r1, [r0, #0x14] + cmp r1, #0xf + addls pc, pc, r1, lsl #0x2 + b _020D5E74 +_020D5A90: + b _020D5AD0 +_020D5A94: + b _020D5B24 +_020D5A98: + b _020D5B74 +_020D5A9C: + b _020D5ED0 +_020D5AA0: + b _020D5ED0 +_020D5AA4: + b _020D5ED0 +_020D5AA8: + b _020D5C1C +_020D5AAC: + b _020D5C4C +_020D5AB0: + b _020D5C70 +_020D5AB4: + b _020D5D14 +_020D5AB8: + b _020D5DC8 +_020D5ABC: + b _020D5ED0 +_020D5AC0: + b _020D5ED0 +_020D5AC4: + b _020D5ED0 +_020D5AC8: + b _020D5ED0 +_020D5ACC: + b _020D5ED0 +_020D5AD0: + ldr r1, _020D5F34 ; =0x027FFDE8 + ldr r4, [r0, #0x8] + ldrb r0, [r1, #0x0] + bl RtcBCD2HEX + ldr r1, _020D5F34 ; =0x027FFDE8 + str r0, [r4, #0x0] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x13 + mov r0, r0, lsr #0x1b + bl RtcBCD2HEX + ldr r1, _020D5F34 ; =0x027FFDE8 + str r0, [r4, #0x4] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0xa + mov r0, r0, lsr #0x1a + bl RtcBCD2HEX + str r0, [r4, #0x8] + mov r0, r4 + bl RTC_GetDayOfWeek + str r0, [r4, #0xc] + b _020D5ED0 +_020D5B24: + ldr r1, _020D5F38 ; =0x027FFDEC + ldr r4, [r0, #0x8] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x1a + mov r0, r0, lsr #0x1a + bl RtcBCD2HEX + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0x0] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x11 + mov r0, r0, lsr #0x19 + bl RtcBCD2HEX + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0x4] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x9 + mov r0, r0, lsr #0x19 + bl RtcBCD2HEX + str r0, [r4, #0x8] + b _020D5ED0 +_020D5B74: + ldr r1, _020D5F34 ; =0x027FFDE8 + ldr r4, [r0, #0x8] + ldr r0, [r1, #0x0] + and r0, r0, #0xff + bl RtcBCD2HEX + ldr r1, _020D5F34 ; =0x027FFDE8 + str r0, [r4, #0x0] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x13 + mov r0, r0, lsr #0x1b + bl RtcBCD2HEX + ldr r1, _020D5F34 ; =0x027FFDE8 + str r0, [r4, #0x4] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0xa + mov r0, r0, lsr #0x1a + bl RtcBCD2HEX + str r0, [r4, #0x8] + mov r0, r4 + bl RTC_GetDayOfWeek + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0xc] + ldr r0, [r1, #0x0] + ldr r1, _020D5F30 ; =0x021D5538 + mov r0, r0, lsl #0x1a + mov r0, r0, lsr #0x1a + ldr r4, [r1, #0xc] + bl RtcBCD2HEX + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0x0] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x11 + mov r0, r0, lsr #0x19 + bl RtcBCD2HEX + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0x4] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x9 + mov r0, r0, lsr #0x19 + bl RtcBCD2HEX + str r0, [r4, #0x8] + b _020D5ED0 +_020D5C1C: + ldr r1, _020D5F3C ; =0x027FFDEA + ldr r2, [r0, #0x8] + ldrh r0, [r1, #0x0] + mov r0, r0, lsl #0x1c + mov r0, r0, lsr #0x1c + cmp r0, #0x4 + bne _020D5C44 + mov r0, #0x1 + str r0, [r2, #0x0] + b _020D5ED0 +_020D5C44: + str r5, [r2, #0x0] + b _020D5ED0 +_020D5C4C: + ldr r1, _020D5F3C ; =0x027FFDEA + ldr r2, [r0, #0x8] + ldrh r0, [r1, #0x0] + mov r0, r0, lsl #0x19 + movs r0, r0, lsr #0x1f + movne r0, #0x1 + strne r0, [r2, #0x0] + streq r5, [r2, #0x0] + b _020D5ED0 +_020D5C70: + ldr r1, _020D5F38 ; =0x027FFDEC + ldr r4, [r0, #0x8] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + str r0, [r4, #0x0] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x12 + mov r0, r0, lsr #0x1a + bl RtcBCD2HEX + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0x4] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x9 + mov r0, r0, lsr #0x19 + bl RtcBCD2HEX + str r0, [r4, #0x8] + mov r1, r5 + ldr r0, _020D5F38 ; =0x027FFDEC + str r1, [r4, #0xc] + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x18 + movs r0, r0, lsr #0x1f + ldrne r0, [r4, #0xc] + addne r0, r0, #0x1 + strne r0, [r4, #0xc] + ldr r0, _020D5F38 ; =0x027FFDEC + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x10 + movs r0, r0, lsr #0x1f + ldrne r0, [r4, #0xc] + addne r0, r0, #0x2 + strne r0, [r4, #0xc] + ldr r0, _020D5F38 ; =0x027FFDEC + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x8 + movs r0, r0, lsr #0x1f + ldrne r0, [r4, #0xc] + addne r0, r0, #0x4 + strne r0, [r4, #0xc] + b _020D5ED0 +_020D5D14: + ldr r3, [r0, #0x18] + cmp r3, #0x0 + bne _020D5DC0 + ldr r1, [r0, #0x8] + ldr r1, [r1, #0x0] + cmp r1, #0x1 + bne _020D5D7C + ldr r2, _020D5F3C ; =0x027FFDEA + ldrh r1, [r2, #0x0] + mov r1, r1, lsl #0x1c + mov r1, r1, lsr #0x1c + cmp r1, #0x4 + beq _020D5ED0 + add r1, r3, #0x1 + str r1, [r0, #0x18] + ldrh r0, [r2, #0x0] + bic r0, r0, #0xf + orr r0, r0, #0x4 + strh r0, [r2, #0x0] + bl RTCi_WriteRawStatus2Async +_020D5D64: ; 0x020D5D64 + cmp r0, #0x0 + moveq r1, r5 + ldreq r0, _020D5F30 ; =0x021D5538 + moveq r5, #0x3 + streq r1, [r0, #0x18] + b _020D5ED0 +_020D5D7C: + ldr r2, _020D5F3C ; =0x027FFDEA + ldrh r1, [r2, #0x0] + mov r1, r1, lsl #0x1c + movs r1, r1, lsr #0x1c + beq _020D5ED0 + add r1, r3, #0x1 + str r1, [r0, #0x18] + ldrh r0, [r2, #0x0] + bic r0, r0, #0xf + strh r0, [r2, #0x0] + bl RTCi_WriteRawStatus2Async +_020D5DA8: ; 0x020D5DA8 + cmp r0, #0x0 + moveq r1, r5 + ldreq r0, _020D5F30 ; =0x021D5538 + moveq r5, #0x3 + streq r1, [r0, #0x18] + b _020D5ED0 +_020D5DC0: + str r5, [r0, #0x18] + b _020D5ED0 +_020D5DC8: + ldr r3, [r0, #0x18] + cmp r3, #0x0 + bne _020D5E6C + ldr r1, [r0, #0x8] + ldr r1, [r1, #0x0] + cmp r1, #0x1 + bne _020D5E28 + ldr r2, _020D5F3C ; =0x027FFDEA + ldrh r1, [r2, #0x0] + mov r1, r1, lsl #0x19 + movs r1, r1, lsr #0x1f + bne _020D5ED0 + add r1, r3, #0x1 + str r1, [r0, #0x18] + ldrh r0, [r2, #0x0] + orr r0, r0, #0x40 + strh r0, [r2, #0x0] + bl RTCi_WriteRawStatus2Async +_020D5E10: ; 0x020D5E10 + cmp r0, #0x0 + moveq r1, r5 + ldreq r0, _020D5F30 ; =0x021D5538 + moveq r5, #0x3 + streq r1, [r0, #0x18] + b _020D5ED0 +_020D5E28: + ldr r2, _020D5F3C ; =0x027FFDEA + ldrh r1, [r2, #0x0] + mov r1, r1, lsl #0x19 + movs r1, r1, lsr #0x1f + beq _020D5ED0 + add r1, r3, #0x1 + str r1, [r0, #0x18] + ldrh r0, [r2, #0x0] + bic r0, r0, #0x40 + strh r0, [r2, #0x0] + bl RTCi_WriteRawStatus2Async +_020D5E54: ; 0x020D5E54 + cmp r0, #0x0 + moveq r1, r5 + ldreq r0, _020D5F30 ; =0x021D5538 + moveq r5, #0x3 + streq r1, [r0, #0x18] + b _020D5ED0 +_020D5E6C: + str r5, [r0, #0x18] + b _020D5ED0 +_020D5E74: + ldr r0, _020D5F30 ; =0x021D5538 + mov r1, #0x0 + str r1, [r0, #0x18] + mov r5, #0x4 + b _020D5ED0 +_020D5E88: + ldr r0, _020D5F30 ; =0x021D5538 + mov r1, #0x0 + str r1, [r0, #0x18] + cmp r2, #0x4 + addls pc, pc, r2, lsl #0x2 + b _020D5ECC +_020D5EA0: + b _020D5ECC +_020D5EA4: + b _020D5EB4 +_020D5EA8: + b _020D5EBC +_020D5EAC: + b _020D5EC4 +_020D5EB0: + b _020D5ECC +_020D5EB4: + mov r5, #0x4 + b _020D5ED0 +_020D5EBC: + mov r5, #0x5 + b _020D5ED0 +_020D5EC4: + mov r5, #0x1 + b _020D5ED0 +_020D5ECC: + mov r5, #0x6 +_020D5ED0: + ldr r0, _020D5F30 ; =0x021D5538 + ldr r1, [r0, #0x18] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r2, _020D5F30 ; =0x021D5538 + ldr r1, [r0, #0x0] + ldr r4, [r2, #0x4] + cmp r1, #0x0 + movne r1, #0x0 + strne r1, [r0, #0x0] + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r1, [r2, #0x10] + mov r3, #0x0 + mov r0, r5 + str r3, [r2, #0x4] + blx r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D5F30: .word 0x021D5538 +_020D5F34: .word 0x027FFDE8 +_020D5F38: .word 0x027FFDEC +_020D5F3C: .word 0x027FFDEA + + arm_func_start RTC_GetDateTimeAsync +RTC_GetDateTimeAsync: ; 0x020D5F40 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl OS_DisableInterrupts + ldr r1, _020D5FCC ; =0x021D5538 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020D5F80 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020D5F80: + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + ldr r0, _020D5FCC ; =0x021D5538 + mov r2, #0x2 + mov r1, #0x0 + str r2, [r0, #0x14] + str r1, [r0, #0x18] + str r7, [r0, #0x8] + str r6, [r0, #0xc] + str r5, [r0, #0x4] + str r4, [r0, #0x10] + bl RTCi_ReadRawDateTimeAsync +_020D5FB4: ; 0x020D5FB4 + cmp r0, #0x0 + movne r0, #0x0 + moveq r0, #0x3 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D5FCC: .word 0x021D5538 + + arm_func_start RTC_GetTime +RTC_GetTime: ; 0x020D5FD0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D600C ; =RtcGetResultCallback + mov r2, #0x0 + bl RTC_GetTimeAsync + ldr r1, _020D6010 ; =0x021D5538 + cmp r0, #0x0 + str r0, [r1, #0x20] + bne _020D5FF8 + bl RtcWaitBusy +_020D5FF8: + ldr r0, _020D6010 ; =0x021D5538 + ldr r0, [r0, #0x20] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D600C: .word RtcGetResultCallback +_020D6010: .word 0x021D5538 + + arm_func_start RTC_GetTimeAsync +RTC_GetTimeAsync: ; 0x020D6014 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl OS_DisableInterrupts + ldr r1, _020D608C ; =0x021D5538 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020D6048 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020D6048: + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + ldr r0, _020D608C ; =0x021D5538 + mov r2, #0x1 + mov r1, #0x0 + str r2, [r0, #0x14] + str r1, [r0, #0x18] + str r6, [r0, #0x8] + str r5, [r0, #0x4] + str r4, [r0, #0x10] + bl RTCi_ReadRawTimeAsync +_020D6078: ; 0x020D6078 + cmp r0, #0x0 + movne r0, #0x0 + moveq r0, #0x3 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D608C: .word 0x021D5538 + + arm_func_start RTC_GetDate +RTC_GetDate: ; 0x020D6090 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D60CC ; =RtcGetResultCallback + mov r2, #0x0 + bl RTC_GetDateAsync + ldr r1, _020D60D0 ; =0x021D5538 + cmp r0, #0x0 + str r0, [r1, #0x20] + bne _020D60B8 + bl RtcWaitBusy +_020D60B8: + ldr r0, _020D60D0 ; =0x021D5538 + ldr r0, [r0, #0x20] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D60CC: .word RtcGetResultCallback +_020D60D0: .word 0x021D5538 + + arm_func_start RTC_GetDateAsync +RTC_GetDateAsync: ; 0x020D60D4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl OS_DisableInterrupts + ldr r1, _020D6148 ; =0x021D5538 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020D6108 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020D6108: + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + ldr r0, _020D6148 ; =0x021D5538 + mov r1, #0x0 + str r1, [r0, #0x14] + str r1, [r0, #0x18] + str r6, [r0, #0x8] + str r5, [r0, #0x4] + str r4, [r0, #0x10] + bl RTCi_ReadRawDateAsync +_020D6134: ; 0x020D6134 + cmp r0, #0x0 + movne r0, #0x0 + moveq r0, #0x3 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D6148: .word 0x021D5538 + + arm_func_start RTC_Init +RTC_Init: ; 0x020D614C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020D61C8 ; =0x021D5534 + ldrh r0, [r1, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, _020D61CC ; =0x021D5538 + mov r2, #0x0 + mov r3, #0x1 + strh r3, [r1, #0x0] + str r2, [r0, #0x0] + str r2, [r0, #0x4] + str r2, [r0, #0x1c] + str r2, [r0, #0x8] + str r2, [r0, #0xc] + bl PXI_Init + mov r5, #0x5 + mov r4, #0x1 +_020D619C: + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady +_020D61A8: ; 0x020D61A8 + cmp r0, #0x0 + beq _020D619C + ldr r1, _020D61D0 ; =RtcCommonCallback + mov r0, #0x5 + bl PXI_SetFifoRecvCallback + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D61C8: .word 0x021D5534 +_020D61CC: .word 0x021D5538 +_020D61D0: .word RtcCommonCallback + + arm_func_start FUN_020D61D4 +FUN_020D61D4: ; 0x020D61D4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, r0, lsl #0x8 + and r1, r0, #0x7f00 + mov r0, #0x5 + mov r2, #0x0 + bl PXI_SendWordByFifo +_020D61F0: ; 0x020D61F0 + cmp r0, #0x0 + movge r0, #0x1 + movlt r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start RTCi_WriteRawStatus2Async +RTCi_WriteRawStatus2Async: + ldr ip, _020D6214 ; =FUN_020D61D4 + mov r0, #0x27 + bx r12 + .balign 4 +_020D6214: .word FUN_020D61D4 + + arm_func_start RTCi_ReadRawTimeAsync +RTCi_ReadRawTimeAsync: + ldr ip, _020D6224 ; =FUN_020D61D4 + mov r0, #0x12 + bx r12 + .balign 4 +_020D6224: .word FUN_020D61D4 + + arm_func_start RTCi_ReadRawDateAsync +RTCi_ReadRawDateAsync: + ldr ip, _020D6234 ; =FUN_020D61D4 + mov r0, #0x11 + bx r12 + .balign 4 +_020D6234: .word FUN_020D61D4 + + arm_func_start RTCi_ReadRawDateTimeAsync +RTCi_ReadRawDateTimeAsync: + ldr ip, _020D6244 ; =FUN_020D61D4 + mov r0, #0x10 + bx r12 + .balign 4 +_020D6244: .word FUN_020D61D4 + + arm_func_start RTC_GetDayOfWeek +RTC_GetDayOfWeek: ; 0x020D6248 + stmdb sp!, {r4-r6,lr} + ldr r1, [r0, #0x4] + ldr r2, [r0, #0x0] + sub r3, r1, #0x2 + cmp r3, #0x1 + add lr, r2, #0x7d0 + ldr r4, _020D630C ; =0x51EB851F + sublt lr, lr, #0x1 + ldr r12, [r0, #0x8] + smull r0, r2, r4, lr + addlt r3, r3, #0xc + mov r1, #0x1a + mul r0, r3, r1 + smull r1, r3, r4, lr + ldr r5, _020D6310 ; =0x66666667 + sub r0, r0, #0x2 + smull r4, r1, r5, r0 + mov r4, lr, lsr #0x1f + mov r2, r2, asr #0x5 + mov r3, r3, asr #0x5 + add r3, r4, r3 + ldr r5, _020D6314 ; =0x00000064 + add r2, r4, r2 + smull r2, r4, r5, r2 + sub r2, lr, r2 + mov r1, r1, asr #0x2 + mov r0, r0, lsr #0x1f + add r1, r0, r1 + mov r4, r2, asr #0x1 + add r0, r12, r1 + add r1, r2, r4, lsr #0x1e + add r2, r2, r0 + mov r6, r3, asr #0x1 + add r0, r3, r6, lsr #0x1e + add r1, r2, r1, asr #0x2 + add r1, r1, r0, asr #0x2 + mov r0, #0x5 + mla r4, r3, r0, r1 + ldr r3, _020D6318 ; =0x92492493 + mov r1, r4, lsr #0x1f + smull r2, r0, r3, r4 + add r0, r4, r0 + mov r0, r0, asr #0x2 + ldr r2, _020D631C ; =0x00000007 + add r0, r1, r0 + smull r0, r1, r2, r0 + sub r0, r4, r0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D630C: .word 0x51EB851F +_020D6310: .word 0x66666667 +_020D6314: .word 0x00000064 +_020D6318: .word 0x92492493 +_020D631C: .word 0x00000007 + + arm_func_start RTC_ConvertSecondToDateTime +RTC_ConvertSecondToDateTime: ; 0x020D6320 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r2 + mov r12, #0x0 + mov r4, r3 + subs r2, r5, r12 + sbcs r2, r4, r12 + mov r7, r0 + mov r6, r1 + movlt r5, r12 + movlt r4, r12 + blt _020D6364 + ldr r1, _020D63B0 ; =0xBC19137F + subs r0, r1, r5 + sbcs r0, r12, r4 + movlt r5, r1 + movlt r4, r12 +_020D6364: + ldr r2, _020D63B4 ; =0x00015180 + mov r0, r5 + mov r1, r4 + mov r3, #0x0 + bl _ll_mod + mov r1, r0 + mov r0, r6 + bl RTCi_ConvertSecondToTime + ldr r2, _020D63B4 ; =0x00015180 + mov r0, r5 + mov r1, r4 + mov r3, #0x0 + bl FUN_020EBA38 + mov r1, r0 + mov r0, r7 + bl RTC_ConvertDayToDate + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D63B0: .word 0xBC19137F +_020D63B4: .word 0x00015180 + + arm_func_start RTCi_ConvertSecondToTime +RTCi_ConvertSecondToTime: ; 0x020D63B8 + stmdb sp!, {r4-r6,lr} + ldr r2, _020D6448 ; =0x0001517F + cmp r1, #0x0 + movlt r1, #0x0 + cmp r1, r2 + ldr ip, _020D644C ; =0x88888889 + movgt r1, r2 + smull r2, r3, r12, r1 + smull r2, lr, r12, r1 + ldr r5, _020D6450 ; =0x91A2B3C5 + add r3, r1, r3 + smull r4, r2, r5, r1 + mov r5, r1, lsr #0x1f + mov r3, r3, asr #0x5 + add r3, r5, r3 + smull r4, r6, r12, r3 + add lr, r1, lr + mov lr, lr, asr #0x5 + add r6, r3, r6 + add r2, r1, r2 + ldr r4, _020D6454 ; =0x0000003C + add lr, r5, lr + smull r12, lr, r4, lr + sub lr, r1, r12 + mov r2, r2, asr #0xb + mov r6, r6, asr #0x5 + mov r1, r3, lsr #0x1f + add r6, r1, r6 + smull r1, r12, r4, r6 + str lr, [r0, #0x8] + sub r6, r3, r1 + str r6, [r0, #0x4] + add r2, r5, r2 + str r2, [r0, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D6448: .word 0x0001517F +_020D644C: .word 0x88888889 +_020D6450: .word 0x91A2B3C5 +_020D6454: .word 0x0000003C + + arm_func_start RTC_ConvertDayToDate +RTC_ConvertDayToDate: ; 0x020D6458 + stmdb sp!, {r4,lr} + ldr r2, _020D6560 ; =0x00008EAC + cmp r1, #0x0 + movlt r1, #0x0 + cmp r1, r2 + movgt r1, r2 + ldr r3, _020D6564 ; =0x92492493 + add lr, r1, #0x6 + smull r2, r4, r3, lr + add r4, lr, r4 + mov r4, r4, asr #0x2 + mov r2, lr, lsr #0x1f + ldr ip, _020D6568 ; =0x00000007 + add r4, r2, r4 + smull r2, r3, r12, r4 + sub r4, lr, r2 + ldr r2, _020D656C ; =0x0000016D + ldr r3, _020D6570 ; =0x0000016E + str r4, [r0, #0xc] + mov lr, #0x0 +_020D64A8: + ands r12, lr, #0x3 + moveq r12, r3 + movne r12, r2 + mov r4, r1 + subs r1, r1, r12 + movmi r1, r4 + bmi _020D64D0 + add lr, lr, #0x1 + cmp lr, #0x63 + blo _020D64A8 +_020D64D0: + ldr r2, _020D656C ; =0x0000016D + str lr, [r0, #0x0] + cmp r1, r2 + movgt r1, r2 + ands r2, lr, #0x3 + bne _020D6518 + cmp r1, #0x3c + bge _020D6514 + cmp r1, #0x1f + movlt r2, #0x1 + subge r1, r1, #0x1f + movge r2, #0x2 + str r2, [r0, #0x4] + add r1, r1, #0x1 + str r1, [r0, #0x8] + ldmia sp!, {r4,lr} + bx lr +_020D6514: + sub r1, r1, #0x1 +_020D6518: + ldr r3, _020D6574 ; =0x02106A20 + mov r4, #0xb +_020D6520: + ldr r2, [r3, r4, lsl #0x2] + mov r12, r4, lsl #0x2 + cmp r1, r2 + blt _020D6550 + add r2, r4, #0x1 + str r2, [r0, #0x4] + ldr r2, [r3, r12] + sub r1, r1, r2 + add r1, r1, #0x1 + str r1, [r0, #0x8] + ldmia sp!, {r4,lr} + bx lr +_020D6550: + subs r4, r4, #0x1 + bpl _020D6520 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D6560: .word 0x00008EAC +_020D6564: .word 0x92492493 +_020D6568: .word 0x00000007 +_020D656C: .word 0x0000016D +_020D6570: .word 0x0000016E +_020D6574: .word 0x02106A20 + + arm_func_start RTC_ConvertDateTimeToSecond +RTC_ConvertDateTimeToSecond: ; 0x020D6578 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + bl RTC_ConvertDateToDay + mov r4, r0 + mvn r0, #0x0 + cmp r4, r0 + addeq sp, sp, #0x4 + moveq r1, r0 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + mov r0, r5 + bl RTCi_ConvertTimeToSecond + mvn r2, #0x0 + cmp r0, r2 + moveq r1, r2 + beq _020D65DC + ldr r1, _020D65EC ; =0x00015180 + mov r2, #0x0 + umull r12, r3, r4, r1 + mla r3, r4, r2, r3 + mov r2, r4, asr #0x1f + mla r3, r2, r1, r3 + adds r2, r0, r12 + adc r1, r3, r0, asr #0x1f +_020D65DC: + mov r0, r2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D65EC: .word 0x00015180 + + arm_func_start RTCi_ConvertTimeToSecond +RTCi_ConvertTimeToSecond: ; 0x020D65F0 + ldr r3, [r0, #0x4] + ldr r2, [r0, #0x0] + mov r1, #0x3c + mla r3, r2, r1, r3 + ldr r0, [r0, #0x8] + mla r0, r3, r1, r0 + bx lr + + arm_func_start RTC_ConvertDateToDay +RTC_ConvertDateToDay: ; 0x020D660C + ldr r3, [r0, #0x0] + cmp r3, #0x64 + bhs _020D665C + ldr r2, [r0, #0x4] + cmp r2, #0x1 + blo _020D665C + cmp r2, #0xc + bhi _020D665C + ldr r1, [r0, #0x8] + cmp r1, #0x1 + blo _020D665C + cmp r1, #0x1f + bhi _020D665C + ldr r0, [r0, #0xc] + cmp r0, #0x7 + bge _020D665C + cmp r2, #0x1 + blo _020D665C + cmp r2, #0xc + bls _020D6664 +_020D665C: + mvn r0, #0x0 + bx lr +_020D6664: + ldr r0, _020D6698 ; =0x02106A1C + sub r1, r1, #0x1 + ldr r0, [r0, r2, lsl #0x2] + cmp r2, #0x3 + add r2, r1, r0 + blo _020D6684 + ands r0, r3, #0x3 + addeq r2, r2, #0x1 +_020D6684: + ldr r0, _020D669C ; =0x0000016D + add r1, r3, #0x3 + mla r0, r3, r0, r2 + add r0, r0, r1, lsr #0x2 + bx lr + .balign 4 +_020D6698: .word 0x02106A1C +_020D669C: .word 0x0000016D diff --git a/asm/WM_arm9.s b/asm/WM_arm9.s new file mode 100644 index 00000000..0e5eb0c5 --- /dev/null +++ b/asm/WM_arm9.s @@ -0,0 +1,3744 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start WMi_GetMPReadyAIDs +WMi_GetMPReadyAIDs: ; 0x020D7DE0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r1, _020D7E30 ; =0x021D5E2C + mov r4, r0 + ldr r0, [r1, #0x0] + cmp r0, #0x0 + moveq r5, #0x0 + beq _020D7E18 + ldr r5, [r0, #0x4] + mov r1, #0x2 + add r0, r5, #0x86 + bl DC_InvalidateRange + ldrh r5, [r5, #0x86] +_020D7E18: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D7E30: .word 0x021D5E2C + + arm_func_start WM_GetConnectedAIDs +WM_GetConnectedAIDs: ; 0x020D7E34 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020D7E64 ; =0x021D5E2C + ldr r1, [r1, #0x0] + cmp r1, #0x0 + ldrne r4, [r1, #0x14c] + moveq r4, #0x0 + bl OS_RestoreInterrupts + mov r0, r4, lsl #0x10 + mov r0, r0, lsr #0x10 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D7E64: .word 0x021D5E2C + + arm_func_start WM_GetAID +WM_GetAID: ; 0x020D7E68 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020D7E98 ; =0x021D5E2C + ldr r1, [r1, #0x0] + cmp r1, #0x0 + addne r1, r1, #0x100 + ldrneh r4, [r1, #0x50] + moveq r4, #0x0 + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D7E98: .word 0x021D5E2C + + arm_func_start WMi_GetStatusAddress +WMi_GetStatusAddress: ; 0x020D7E9C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WMi_CheckInitialized +_020D7EA8: ; 0x020D7EA8 + cmp r0, #0x0 + movne r0, #0x0 + ldreq r0, _020D7EC8 ; =0x021D5E2C + ldreq r0, [r0, #0x0] + ldreq r0, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D7EC8: .word 0x021D5E2C + + arm_func_start WmClearFifoRecvFlag +WmClearFifoRecvFlag: ; 0x020D7ECC + ldr r1, _020D7EE4 ; =0x027FFF96 + ldrh r0, [r1, #0x0] + ands r2, r0, #0x1 + bicne r0, r0, #0x1 + strneh r0, [r1, #0x0] + bx lr + .balign 4 +_020D7EE4: .word 0x027FFF96 + + arm_func_start WmReceiveFifo +WmReceiveFifo: ; 0x020D7EE8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + ldr r0, _020D82B0 ; =0x021D5E2C + cmp r2, #0x0 + ldr r8, [r0, #0x0] + mov r10, r1 + addne sp, sp, #0xc + ldmneia sp!, {r4-r11,lr} + bxne lr + ldr r0, [r8, #0x10] + mov r1, #0x100 + bl DC_InvalidateRange + ldrh r0, [r8, #0x16] + cmp r0, #0x0 + bne _020D7F30 + ldr r0, [r8, #0x4] + mov r1, #0x800 + bl DC_InvalidateRange +_020D7F30: + ldr r0, [r8, #0x10] + cmp r10, r0 + beq _020D7F48 + mov r0, r10 + mov r1, #0x100 + bl DC_InvalidateRange +_020D7F48: + ldrh r0, [r10, #0x0] + cmp r0, #0x2c + blo _020D8000 + cmp r0, #0x80 + bne _020D7F84 + ldrh r0, [r10, #0x2] + cmp r0, #0x13 + bne _020D7F6C + bl OS_Terminate +_020D7F6C: + ldr r1, [r8, #0xc8] + cmp r1, #0x0 + beq _020D8268 + mov r0, r10 + blx r1 + b _020D8268 +_020D7F84: + cmp r0, #0x82 + bne _020D7FD8 + ldrh r0, [r10, #0x6] + add r1, r8, r0, lsl #0x2 + ldr r0, [r1, #0xcc] + cmp r0, #0x0 + beq _020D8268 + ldr r0, [r1, #0x10c] + str r0, [r10, #0x1c] + ldr r0, [r8, #0x14c] + strh r0, [r10, #0x22] + ldr r1, [r8, #0x4] + ldr r0, [r10, #0x8] + ldrh r1, [r1, #0x72] + bl DC_InvalidateRange + ldrh r1, [r10, #0x6] + mov r0, r10 + add r1, r8, r1, lsl #0x2 + ldr r1, [r1, #0xcc] + blx r1 + b _020D8268 +_020D7FD8: + cmp r0, #0x81 + bne _020D8268 + mov r0, #0xf + strh r0, [r10, #0x0] + ldr r1, [r10, #0x1c] + cmp r1, #0x0 + beq _020D8268 + mov r0, r10 + blx r1 + b _020D8268 +_020D8000: + cmp r0, #0xe + bne _020D8040 + ldrh r1, [r10, #0x4] + ldr r0, _020D82B4 ; =0x0000FFF5 + add r0, r1, r0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #0x1 + bhi _020D8040 + ldrh r0, [r10, #0x2] + cmp r0, #0x0 + bne _020D8040 + ldr r1, [r8, #0x4] + ldr r0, [r10, #0x8] + ldrh r1, [r1, #0x72] + bl DC_InvalidateRange +_020D8040: + ldrh r1, [r10, #0x0] + cmp r1, #0x2 + bne _020D8088 + ldrh r0, [r10, #0x2] + cmp r0, #0x0 + bne _020D8088 + add r0, r8, r1, lsl #0x2 + ldr r4, [r0, #0x18] + bl WM_Finish +_020D8064: ; 0x020D8064 + cmp r4, #0x0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r11,lr} + bxeq lr + mov r0, r10 + blx r4 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr +_020D8088: + add r0, r8, r1, lsl #0x2 + ldr r1, [r0, #0x18] + cmp r1, #0x0 + beq _020D80B8 + mov r0, r10 + blx r1 + ldr r0, _020D82B8 ; =0x021D5E28 + ldrh r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r11,lr} + bxeq lr +_020D80B8: + ldrh r0, [r10, #0x0] + cmp r0, #0x8 + beq _020D80CC + cmp r0, #0xc + bne _020D8268 +_020D80CC: + cmp r0, #0x8 + bne _020D8100 + add r0, r10, #0xa + str r0, [sp, #0x0] + ldrh r0, [r10, #0x2c] + add r11, r10, #0x14 + ldrh r7, [r10, #0x8] + ldrh r6, [r10, #0x10] + ldrh r4, [r10, #0x12] + str r0, [sp, #0x4] + ldrh r9, [r10, #0x2e] + mov r5, #0x0 + b _020D8130 +_020D8100: + cmp r0, #0xc + bne _020D8130 + ldrh r0, [r10, #0x16] + mov r6, #0x0 + ldrh r7, [r10, #0x8] + str r0, [sp, #0x4] + add r0, r10, #0x10 + ldrh r5, [r10, #0xa] + ldrh r4, [r10, #0xc] + ldrh r9, [r10, #0x18] + mov r11, r6 + str r0, [sp, #0x0] +_020D8130: + cmp r7, #0x7 + beq _020D8148 + cmp r7, #0x9 + beq _020D8148 + cmp r7, #0x1a + bne _020D8268 +_020D8148: + cmp r7, #0x7 + ldreq r1, [r8, #0x14c] + moveq r0, #0x1 + orreq r0, r1, r0, lsl r6 + streq r0, [r8, #0x14c] + movne r0, #0x1 + mvnne r0, r0, lsl r6 + ldrne r1, [r8, #0x14c] + add r3, r8, #0x100 + andne r0, r1, r0 + strne r0, [r8, #0x14c] + ldr r0, _020D82BC ; =0x021D5E78 + mov r1, #0x0 + mov r2, #0x44 + strh r5, [r3, #0x50] + bl MI_CpuFill8 + ldr r3, _020D82BC ; =0x021D5E78 + mov r1, #0x0 + mov r2, #0x82 + strh r2, [r3, #0x0] + strh r7, [r3, #0x4] + strh r6, [r3, #0x12] + strh r5, [r3, #0x20] + strh r1, [r3, #0x2] + str r1, [r3, #0x8] + str r1, [r3, #0xc] + strh r1, [r3, #0x10] + ldr r1, [r8, #0x14c] + ldr r2, _020D82C0 ; =0x0000FFFF + strh r1, [r3, #0x22] + strh r2, [r3, #0x1a] + ldr r0, [sp, #0x0] + ldr r1, _020D82C4 ; =0x021D5E8C + mov r2, #0x6 + strh r4, [r3, #0x3c] + bl MI_CpuCopy8 +_020D81D8: ; 0x020D81D8 + cmp r11, #0x0 + beq _020D81F4 + ldr r1, _020D82C8 ; =0x021D5E9C + mov r0, r11 + mov r2, #0x18 + bl MIi_CpuCopy16 + b _020D8204 +_020D81F4: + ldr r1, _020D82C8 ; =0x021D5E9C + mov r0, #0x0 + mov r2, #0x18 + bl MIi_CpuClear16 +_020D8204: + cmp r5, #0x0 + ldreq r1, [sp, #0x4] + ldr r0, _020D82BC ; =0x021D5E78 + movne r1, r9 + cmp r5, #0x0 + ldrne r9, [sp, #0x4] + ldr r5, _020D82BC ; =0x021D5E78 + strh r1, [r0, #0x40] + mov r4, #0x0 + strh r9, [r5, #0x42] +_020D822C: + strh r4, [r5, #0x6] + add r2, r8, r4, lsl #0x2 + ldr r0, [r2, #0xcc] + cmp r0, #0x0 + beq _020D8254 + ldr r1, [r2, #0x10c] + mov r0, r5 + str r1, [r5, #0x1c] + ldr r1, [r2, #0xcc] + blx r1 +_020D8254: + add r0, r4, #0x1 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + cmp r4, #0x10 + blo _020D822C +_020D8268: + ldr r0, [r8, #0x10] + mov r1, #0x100 + bl DC_InvalidateRange + bl WmClearFifoRecvFlag + ldr r0, [r8, #0x10] + cmp r10, r0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldrh r2, [r10, #0x0] + mov r0, r10 + mov r1, #0x100 + orr r2, r2, #0x8000 + strh r2, [r10, #0x0] + bl DC_StoreRange + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D82B0: .word 0x021D5E2C +_020D82B4: .word 0x0000FFF5 +_020D82B8: .word 0x021D5E28 +_020D82BC: .word 0x021D5E78 +_020D82C0: .word 0x0000FFFF +_020D82C4: .word 0x021D5E8C +_020D82C8: .word 0x021D5E9C + + arm_func_start WMi_CheckStateEx +WMi_CheckStateEx: + stmdb sp!, {r0-r3} + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WMi_CheckInitialized +_020D82DC: ; 0x020D82DC + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + addne sp, sp, #0x10 + bxne lr + ldr r0, _020D8370 ; =0x021D5E2C + mov r1, #0x2 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x4] + bl DC_InvalidateRange + ldr r0, _020D8370 ; =0x021D5E2C + add r1, sp, #0x8 + ldr r2, [r0, #0x0] + ldr r0, [sp, #0x8] + ldr r2, [r2, #0x4] + cmp r0, #0x0 + bic r1, r1, #0x3 + addeq sp, sp, #0x4 + add r12, r1, #0x4 + ldrh r3, [r2, #0x0] + mov r0, #0x3 + ldmeqia sp!, {lr} + addeq sp, sp, #0x10 + bxeq lr + mov r2, #0x0 +_020D8340: + add r12, r12, #0x4 + ldr r1, [r12, #-0x4] + cmp r1, r3 + ldr r1, [sp, #0x8] + moveq r0, r2 + subs r1, r1, #0x1 + str r1, [sp, #0x8] + bne _020D8340 + add sp, sp, #0x4 + ldmia sp!, {lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020D8370: .word 0x021D5E2C + + arm_func_start WMi_CheckIdle +WMi_CheckIdle: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WMi_CheckInitialized +_020D8380: ; 0x020D8380 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020D83CC ; =0x021D5E2C + mov r1, #0x2 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x4] + bl DC_InvalidateRange + ldr r0, _020D83CC ; =0x021D5E2C + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x4] + ldrh r0, [r0, #0x0] + cmp r0, #0x1 + movls r0, #0x3 + movhi r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D83CC: .word 0x021D5E2C + + arm_func_start WMi_CheckInitialized +WMi_CheckInitialized: + ldr r0, _020D83E8 ; =0x021D5E28 + ldrh r0, [r0, #0x0] + cmp r0, #0x0 + movne r0, #0x0 + moveq r0, #0x3 + bx lr + .balign 4 +_020D83E8: .word 0x021D5E28 + + arm_func_start WMi_GetSystemWork +WMi_GetSystemWork: ; 0x020D83EC + ldr r0, _020D83F8 ; =0x021D5E2C + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D83F8: .word 0x021D5E2C + + arm_func_start WMi_SendCommandDirect +WMi_SendCommandDirect: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r4, r1 + bl WmGetCommandBuffer4Arm7 + movs r5, r0 + moveq r0, #0x8 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl MI_CpuCopy8 + mov r0, r5 + mov r1, r4 + bl DC_StoreRange + mov r1, r5 + mov r0, #0xa + mov r2, #0x0 + bl PXI_SendWordByFifo + mov r4, r0 + ldr r0, _020D8470 ; =0x021D5E30 + mov r1, r5 + mov r2, #0x1 + bl OS_SendMessage +_020D845C: ; 0x020D845C + cmp r4, #0x0 + movlt r0, #0x8 + movge r0, #0x2 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D8470: .word 0x021D5E30 + + arm_func_start WMi_SendCommand +WMi_SendCommand: + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + bl WmGetCommandBuffer4Arm7 + movs r5, r0 + addeq sp, sp, #0x4 + moveq r0, #0x8 + ldmeqia sp!, {r4-r5,lr} + addeq sp, sp, #0x10 + bxeq lr + strh r4, [r5, #0x0] + ldrh r2, [sp, #0x14] + add r0, sp, #0x14 + bic r0, r0, #0x3 + mov r3, #0x0 + cmp r2, #0x0 + add r4, r0, #0x4 + ble _020D84DC +_020D84C0: + add r4, r4, #0x4 + ldr r1, [r4, #-0x4] + add r0, r5, r3, lsl #0x2 + add r3, r3, #0x1 + str r1, [r0, #0x4] + cmp r3, r2 + blt _020D84C0 +_020D84DC: + mov r0, r5 + mov r1, #0x100 + bl DC_StoreRange + mov r1, r5 + mov r0, #0xa + mov r2, #0x0 + bl PXI_SendWordByFifo + mov r4, r0 + ldr r0, _020D8528 ; =0x021D5E30 + mov r1, r5 + mov r2, #0x1 + bl OS_SendMessage +_020D850C: ; 0x020D850C + cmp r4, #0x0 + movlt r0, #0x8 + movge r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020D8528: .word 0x021D5E30 + + arm_func_start WmGetCommandBuffer4Arm7 +WmGetCommandBuffer4Arm7: ; 0x020D852C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020D859C ; =0x021D5E30 + add r1, sp, #0x0 + mov r2, #0x0 + bl OS_ReceiveMessage +_020D8544: ; 0x020D8544 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {lr} + bxeq lr + ldr r0, [sp, #0x0] + mov r1, #0x2 + bl DC_InvalidateRange + ldr r1, [sp, #0x0] + ldrh r0, [r1, #0x0] + ands r0, r0, #0x8000 + addne sp, sp, #0x4 + movne r0, r1 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020D859C ; =0x021D5E30 + mov r2, #0x1 + bl OS_JamMessage +_020D858C: ; 0x020D858C + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D859C: .word 0x021D5E30 + + arm_func_start WMi_SetCallbackTable +WMi_SetCallbackTable: ; 0x020D85A0 + ldr r2, _020D85B4 ; =0x021D5E2C + ldr r2, [r2, #0x0] + add r0, r2, r0, lsl #0x2 + str r1, [r0, #0x18] + bx lr + .balign 4 +_020D85B4: .word 0x021D5E2C + + arm_func_start WM_Finish +WM_Finish: + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + mov r4, r0 + bl WMi_CheckInitialized +_020D85C8: ; 0x020D85C8 + cmp r0, #0x0 + beq _020D85E4 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + ldmia sp!, {r4,lr} + bx lr +_020D85E4: + mov r0, #0x1 + mov r1, #0x0 + bl WMi_CheckStateEx +_020D85F0: ; 0x020D85F0 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + bl WmClearFifoRecvFlag + mov r0, #0xa + mov r1, #0x0 + bl PXI_SetFifoRecvCallback + ldr r2, _020D8634 ; =0x021D5E2C + mov r3, #0x0 + ldr r1, _020D8638 ; =0x021D5E28 + mov r0, r4 + str r3, [r2, #0x0] + strh r3, [r1, #0x0] + bl OS_RestoreInterrupts +_020D8628: ; 0x020D8628 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D8634: .word 0x021D5E2C +_020D8638: .word 0x021D5E28 + + arm_func_start WmInitCore +WmInitCore: + stmdb sp!, {r4-r10,lr} + mov r6, r0 + mov r5, r1 + mov r7, r2 + bl OS_DisableInterrupts + ldr r1, _020D881C ; =0x021D5E28 + mov r4, r0 + ldrh r1, [r1, #0x0] + cmp r1, #0x0 + beq _020D8674 + bl OS_RestoreInterrupts + mov r0, #0x3 + ldmia sp!, {r4-r10,lr} + bx lr +_020D8674: + cmp r6, #0x0 + bne _020D868C + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r10,lr} + bx lr +_020D868C: + cmp r5, #0x3 + bls _020D86A4 + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r10,lr} + bx lr +_020D86A4: + ands r1, r6, #0x1f + beq _020D86BC + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r10,lr} + bx lr +_020D86BC: + bl PXI_Init + mov r0, #0xa + mov r1, #0x1 + bl PXI_IsCallbackReady +_020D86CC: ; 0x020D86CC + cmp r0, #0x0 + bne _020D86E8 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x4 + ldmia sp!, {r4-r10,lr} + bx lr +_020D86E8: + mov r0, r6 + mov r1, r7 + bl DC_InvalidateRange + mov r0, r5 + mov r1, r6 + mov r3, r7 + mov r2, #0x0 + bl MI_DmaFill32 + ldr r0, _020D8820 ; =0x021D5E2C + add r1, r6, #0x200 + str r6, [r0, #0x0] + str r1, [r6, #0x0] + ldr r2, [r0, #0x0] + ldr r1, [r2, #0x0] + add r1, r1, #0x300 + str r1, [r2, #0x4] + ldr r2, [r0, #0x0] + ldr r1, [r2, #0x4] + add r1, r1, #0x800 + str r1, [r2, #0xc] + ldr r1, [r0, #0x0] + ldr r0, [r1, #0xc] + add r0, r0, #0x100 + str r0, [r1, #0x10] + bl WmClearFifoRecvFlag + ldr r1, _020D8820 ; =0x021D5E2C + mov r3, #0x0 + ldr r0, [r1, #0x0] + strh r5, [r0, #0x14] + ldr r0, [r1, #0x0] + str r3, [r0, #0x14c] + ldr r0, [r1, #0x0] + add r0, r0, #0x100 + strh r3, [r0, #0x50] + mov r2, r3 +_020D8774: + ldr r0, [r1, #0x0] + add r0, r0, r3, lsl #0x2 + str r2, [r0, #0xcc] + ldr r0, [r1, #0x0] + add r0, r0, r3, lsl #0x2 + add r3, r3, #0x1 + str r2, [r0, #0x10c] + cmp r3, #0x10 + blt _020D8774 + ldr r0, _020D8824 ; =0x021D5E30 + ldr r1, _020D8828 ; =0x021D5E50 + mov r2, #0xa + bl OS_InitMessageQueue + ldr sb, _020D882C ; =0x021D5EC0 + mov r10, #0x0 + ldr r6, _020D8824 ; =0x021D5E30 + mov r8, #0x8000 + mov r7, #0x2 + mov r5, #0x1 +_020D87C0: + mov r0, r9 + mov r1, r7 + strh r8, [r9, #0x0] + bl DC_StoreRange + mov r0, r6 + mov r1, r9 + mov r2, r5 + bl OS_SendMessage + add r10, r10, #0x1 + cmp r10, #0xa + add r9, r9, #0x100 + blt _020D87C0 + ldr r1, _020D8830 ; =WmReceiveFifo + mov r0, #0xa + bl PXI_SetFifoRecvCallback + ldr r1, _020D881C ; =0x021D5E28 + mov r2, #0x1 + mov r0, r4 + strh r2, [r1, #0x0] + bl OS_RestoreInterrupts +_020D8810: ; 0x020D8810 + mov r0, #0x0 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020D881C: .word 0x021D5E28 +_020D8820: .word 0x021D5E2C +_020D8824: .word 0x021D5E30 +_020D8828: .word 0x021D5E50 +_020D882C: .word 0x021D5EC0 +_020D8830: .word WmReceiveFifo + + arm_func_start WM_Init +WM_Init: + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, #0xf00 + bl WmInitCore +_020D8844: ; 0x020D8844 + cmp r0, #0x0 + ldreq r1, _020D8864 ; =0x021D5E2C + moveq r2, #0x0 + ldreq r1, [r1, #0x0] + streqh r2, [r1, #0x16] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D8864: .word 0x021D5E2C + + arm_func_start WM_GetNextTgid +WM_GetNextTgid: ; 0x020D8868 + stmdb sp!, {lr} + sub sp, sp, #0xc + + arm_func_start FUN_020D8870 +FUN_020D8870: ; 0x020D8870 + ldr r0, _020D88DC ; =0x02106A54 + ldr r0, [r0, #0x0] + cmp r0, #0x10000 + bne _020D88B0 + bl RTC_Init +_020D8884: ; 0x020D8884 + add r0, sp, #0x0 + bl RTC_GetTime +_020D888C: ; 0x020D888C + cmp r0, #0x0 + bne _020D88B0 + ldr r2, [sp, #0x8] + ldr r0, [sp, #0x4] + ldr r1, _020D88DC ; =0x02106A54 + add r0, r2, r0, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + str r0, [r1, #0x0] +_020D88B0: + ldr r1, _020D88DC ; =0x02106A54 + ldr r0, [r1, #0x0] + add r0, r0, #0x1 + mov r0, r0, lsl #0x10 + mov r2, r0, lsr #0x10 + mov r0, r2, lsl #0x10 + str r2, [r1, #0x0] + mov r0, r0, lsr #0x10 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_020D88DC: .word 0x02106A54 + + arm_func_start WM_GetOtherElements +WM_GetOtherElements: ; 0x020D88E0 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x88 + ldrh r2, [r1, #0x3c] + mov lr, r0 + cmp r2, #0x0 + beq _020D892C + mov r0, #0x0 + add r5, sp, #0x0 + strb r0, [sp, #0x0] + mov r4, #0x8 +_020D8908: + ldmia r5!, {r0-r3} + stmia lr!, {r0-r3} + subs r4, r4, #0x1 + bne _020D8908 + ldr r0, [r5, #0x0] + add sp, sp, #0x88 + str r0, [lr, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr +_020D892C: + ldrh r0, [r1, #0x3e] + strb r0, [sp, #0x0] + ldrb r0, [sp, #0x0] + cmp r0, #0x0 + bne _020D896C + add r5, sp, #0x0 + mov r4, #0x8 +_020D8948: + ldmia r5!, {r0-r3} + stmia lr!, {r0-r3} + subs r4, r4, #0x1 + bne _020D8948 + ldr r0, [r5, #0x0] + add sp, sp, #0x88 + str r0, [lr, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr +_020D896C: + cmp r0, #0x10 + movhi r0, #0x10 + strhib r0, [sp, #0x0] + ldrh r2, [r1, #0x0] + ldrb r3, [sp, #0x0] + mov r0, #0x0 + mov r2, r2, lsl #0x1 + sub r4, r2, #0x40 + cmp r3, #0x0 + add r3, r1, #0x40 + mov r2, r0 + and r1, r4, #0xff + ble _020D8A20 + add r12, sp, #0x0 +_020D89A4: + ldrb r5, [r3, #0x0] + add r6, r12, r2, lsl #0x3 + add r4, r3, #0x2 + strb r5, [r6, #0x4] + ldrb r5, [r3, #0x1] + strb r5, [r6, #0x5] + str r4, [r6, #0x8] + ldrb r4, [r6, #0x5] + add r4, r4, #0x2 + and r5, r4, #0xff + add r0, r0, r5 + and r0, r0, #0xff + cmp r0, r1 + bls _020D8A0C + mov r0, #0x0 + strb r0, [sp, #0x0] + mov r4, #0x8 +_020D89E8: + ldmia r12!, {r0-r3} + stmia lr!, {r0-r3} + subs r4, r4, #0x1 + bne _020D89E8 + ldr r0, [r12, #0x0] + add sp, sp, #0x88 + str r0, [lr, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr +_020D8A0C: + ldrb r4, [sp, #0x0] + add r2, r2, #0x1 + add r3, r3, r5 + cmp r2, r4 + blt _020D89A4 +_020D8A20: + add r4, sp, #0x0 + mov r12, #0x8 +_020D8A28: + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + subs r12, r12, #0x1 + bne _020D8A28 + ldr r0, [r4, #0x0] + str r0, [lr, #0x0] + add sp, sp, #0x88 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start WM_GetDispersionScanPeriod +WM_GetDispersionScanPeriod: ; 0x020D8A4C + stmdb sp!, {lr} + sub sp, sp, #0xc + add r0, sp, #0x0 + bl OS_GetMacAddress + mov r2, #0x0 + add r1, sp, #0x0 + mov r3, r2 +_020D8A68: + ldrb r0, [r1, #0x0] + add r2, r2, #0x1 + cmp r2, #0x6 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + add r1, r1, #0x1 + blt _020D8A68 + ldr r0, _020D8AE4 ; =0x027FFC3C + mov r1, #0xd + ldr r0, [r0, #0x0] + ldr r2, _020D8AE8 ; =0x66666667 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + mul r0, r3, r1 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + smull r0, r1, r2, r3 + mov r1, r1, asr #0x2 + mov r0, r3, lsr #0x1f + ldr r2, _020D8AEC ; =0x0000000A + add r1, r0, r1 + smull r0, r1, r2, r1 + sub r1, r3, r0 + add r0, r1, #0x1e + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_020D8AE4: .word 0x027FFC3C +_020D8AE8: .word 0x66666667 +_020D8AEC: .word 0x0000000A + + arm_func_start WM_GetDispersionBeaconPeriod +WM_GetDispersionBeaconPeriod: ; 0x020D8AF0 + stmdb sp!, {lr} + sub sp, sp, #0xc + add r0, sp, #0x0 + bl OS_GetMacAddress + mov r2, #0x0 + add r1, sp, #0x0 + mov r3, r2 +_020D8B0C: + ldrb r0, [r1, #0x0] + add r2, r2, #0x1 + cmp r2, #0x6 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + add r1, r1, #0x1 + blt _020D8B0C + ldr r0, _020D8B88 ; =0x027FFC3C + mov r1, #0x7 + ldr r0, [r0, #0x0] + ldr r2, _020D8B8C ; =0x66666667 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + mul r0, r3, r1 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + smull r0, r1, r2, r3 + mov r1, r1, asr #0x3 + mov r0, r3, lsr #0x1f + ldr r2, _020D8B90 ; =0x00000014 + add r1, r0, r1 + smull r0, r1, r2, r1 + sub r1, r3, r0 + add r0, r1, #0xc8 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_020D8B88: .word 0x027FFC3C +_020D8B8C: .word 0x66666667 +_020D8B90: .word 0x00000014 + + arm_func_start WM_GetLinkLevel +WM_GetLinkLevel: ; 0x020D8B94 + stmdb sp!, {r4,lr} + bl WMi_GetSystemWork + mov r4, r0 + bl WMi_CheckInitialized +_020D8BA4: ; 0x020D8BA4 + cmp r0, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x2 + bl DC_InvalidateRange + ldr r2, [r4, #0x4] + ldrh r0, [r2, #0x0] + cmp r0, #0x9 + beq _020D8BE4 + cmp r0, #0xa + beq _020D8C10 + cmp r0, #0xb + beq _020D8C10 + b _020D8C2C +_020D8BE4: + ldr r0, _020D8C38 ; =0x00000182 + mov r1, #0x2 + add r0, r2, r0 + bl DC_InvalidateRange + ldr r2, [r4, #0x4] + add r0, r2, #0x100 + ldrh r0, [r0, #0x82] + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr +_020D8C10: + add r0, r2, #0xbc + mov r1, #0x2 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + ldrh r0, [r0, #0xbc] + ldmia sp!, {r4,lr} + bx lr +_020D8C2C: + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D8C38: .word 0x00000182 + + arm_func_start WM_GetAllowedChannel +WM_GetAllowedChannel: ; 0x020D8C3C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WMi_CheckInitialized +_020D8C48: ; 0x020D8C48 + cmp r0, #0x0 + movne r0, #0x8000 + ldreq r0, _020D8C64 ; =0x027FFCFA + ldreqh r0, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D8C64: .word 0x027FFCFA + + arm_func_start WM_ReadMPData +WM_ReadMPData: ; 0x020D8C68 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x40 + mov r5, r0 + mov r4, r1 + bl WMi_GetSystemWork + mov r6, r0 + bl WMi_CheckInitialized +_020D8C84: ; 0x020D8C84 + cmp r0, #0x0 + addne sp, sp, #0x40 + movne r0, #0x0 + ldmneia sp!, {r4-r6,lr} + bxne lr + cmp r4, #0x1 + blo _020D8CA8 + cmp r4, #0xf + bls _020D8CB8 +_020D8CA8: + add sp, sp, #0x40 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020D8CB8: + ldr r2, [r6, #0x4] + ldr r0, _020D8D68 ; =0x00000182 + mov r1, #0x2 + add r0, r2, r0 + bl DC_InvalidateRange + ldr r0, [r6, #0x4] + mov r1, #0x1 + add r0, r0, #0x100 + ldrh r2, [r0, #0x82] + mov r0, r1, lsl r4 + ands r0, r2, r0 + addeq sp, sp, #0x40 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldrh r0, [r5, #0x4] + cmp r0, #0x0 + addeq sp, sp, #0x40 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + add r0, r5, #0xa + str r0, [sp, #0x0] + mov r3, #0x0 + add r2, sp, #0x0 +_020D8D1C: + ldr r0, [r2, r3, lsl #0x2] + ldrh r1, [r0, #0x4] + cmp r4, r1 + addeq sp, sp, #0x40 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + add r3, r3, #0x1 + sub r0, r3, #0x1 + ldrh r1, [r5, #0x6] + ldr r0, [r2, r0, lsl #0x2] + add r0, r1, r0 + str r0, [r2, r3, lsl #0x2] + ldrh r0, [r5, #0x4] + cmp r3, r0 + blt _020D8D1C + mov r0, #0x0 + add sp, sp, #0x40 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D8D68: .word 0x00000182 + + arm_func_start WM_GetMPReceiveBufferSize +WM_GetMPReceiveBufferSize: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x8 + bl WMi_CheckStateEx +_020D8D8C: ; 0x020D8D8C + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x4 + add r0, r0, #0xc + bl DC_InvalidateRange + ldr r1, [r4, #0x4] + ldr r0, [r1, #0xc] + cmp r0, #0x1 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + add r0, r1, #0x188 + mov r1, #0x2 + bl DC_InvalidateRange + ldr r1, [r4, #0x4] + add r0, r1, #0x100 + ldrh r0, [r0, #0x88] + cmp r0, #0x0 + moveq r5, #0x1 + add r0, r1, #0x3e + mov r1, #0x2 + movne r5, #0x0 + bl DC_InvalidateRange + cmp r5, #0x1 + ldr r0, [r4, #0x4] + addne sp, sp, #0x4 + ldrh r5, [r0, #0x3e] + addne r0, r5, #0x51 + bicne r0, r0, #0x1f + movne r0, r0, lsl #0x1 + ldmneia sp!, {r4-r5,lr} + bxne lr + add r0, r0, #0xf8 + mov r1, #0x2 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + add r1, r5, #0xc + ldrh r0, [r0, #0xf8] + mul r0, r1, r0 + add r0, r0, #0x29 + bic r0, r0, #0x1f + mov r0, r0, lsl #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_GetMPSendBufferSize +WM_GetMPSendBufferSize: + stmdb sp!, {r4,lr} + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x8 + bl WMi_CheckStateEx +_020D8E70: ; 0x020D8E70 + cmp r0, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x4 + add r0, r0, #0xc + bl DC_InvalidateRange + ldr r1, [r4, #0x4] + ldr r0, [r1, #0xc] + cmp r0, #0x1 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + add r0, r1, #0x3c + mov r1, #0x4 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + ldrh r0, [r0, #0x3c] + add r0, r0, #0x1f + bic r0, r0, #0x1f + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_ReadStatus +WM_ReadStatus: ; 0x020D8ECC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WMi_GetSystemWork + mov r4, r0 + bl WMi_CheckInitialized +_020D8EE4: ; 0x020D8EE4 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r5, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, [r4, #0x4] + mov r1, #0x7c0 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + mov r1, r5 + mov r2, #0x7c0 + bl MIi_CpuCopyFast +_020D8F24: ; 0x020D8F24 + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_SetPortCallback +WM_SetPortCallback: + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x48 + movs r5, r1 + mov r6, r0 + mov r4, r2 + beq _020D8F9C + add r0, sp, #0x0 + mov r1, #0x0 + mov r2, #0x44 + bl MI_CpuFill8 + mov r3, #0x0 + ldr r1, _020D9010 ; =0x0000FFFF + mov r7, #0x82 + mov r2, #0x19 + add r0, sp, #0x14 + strh r7, [sp, #0x0] + strh r3, [sp, #0x2] + strh r2, [sp, #0x4] + strh r6, [sp, #0x6] + str r3, [sp, #0x8] + str r3, [sp, #0xc] + strh r3, [sp, #0x10] + strh r1, [sp, #0x1a] + str r4, [sp, #0x1c] + strh r3, [sp, #0x12] + bl OS_GetMacAddress +_020D8F9C: + bl OS_DisableInterrupts + mov r8, r0 + bl WMi_CheckInitialized + movs r7, r0 + beq _020D8FC8 + mov r0, r8 + bl OS_RestoreInterrupts + add sp, sp, #0x48 + mov r0, r7 + ldmia sp!, {r4-r8,lr} + bx lr +_020D8FC8: + bl WMi_GetSystemWork + add r0, r0, r6, lsl #0x2 + str r5, [r0, #0xcc] + str r4, [r0, #0x10c] + cmp r5, #0x0 + beq _020D8FF8 + bl WM_GetConnectedAIDs + strh r0, [sp, #0x22] + bl WM_GetAID + strh r0, [sp, #0x20] + add r0, sp, #0x0 + blx r5 +_020D8FF8: + mov r0, r8 + bl OS_RestoreInterrupts +_020D9000: ; 0x020D9000 + mov r0, #0x0 + add sp, sp, #0x48 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D9010: .word 0x0000FFFF + + arm_func_start WM_SetIndCallback +WM_SetIndCallback: ; 0x020D9014 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + bl OS_DisableInterrupts + mov r5, r0 + bl WMi_CheckInitialized + movs r4, r0 + beq _020D9044 + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4-r6,lr} + bx lr +_020D9044: + bl WMi_GetSystemWork + str r6, [r0, #0xc8] + mov r0, r5 + bl OS_RestoreInterrupts +_020D9054: ; 0x020D9054 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start WM_Disconnect +WM_Disconnect: ; 0x020D9060 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r6, r0 + mov r5, r1 + bl WMi_GetSystemWork + mov r1, #0xa + mov r4, r0 + str r1, [sp, #0x0] + mov r12, #0xb + mov r0, #0x5 + mov r1, #0x7 + mov r2, #0x9 + mov r3, #0x8 + str r12, [sp, #0x4] + bl WMi_CheckStateEx +_020D909C: ; 0x020D909C + cmp r0, #0x0 + addne sp, sp, #0x8 + ldmneia sp!, {r4-r6,lr} + bxne lr + ldr r2, [r4, #0x4] + ldrh r0, [r2, #0x0] + cmp r0, #0x7 + beq _020D90C4 + cmp r0, #0x9 + bne _020D9120 +_020D90C4: + cmp r5, #0x1 + blo _020D90D4 + cmp r5, #0xf + bls _020D90E4 +_020D90D4: + add sp, sp, #0x8 + mov r0, #0x6 + ldmia sp!, {r4-r6,lr} + bx lr +_020D90E4: + ldr r0, _020D9164 ; =0x00000182 + mov r1, #0x2 + add r0, r2, r0 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + mov r1, #0x1 + add r0, r0, #0x100 + ldrh r2, [r0, #0x82] + mov r0, r1, lsl r5 + ands r0, r2, r0 + bne _020D9134 + add sp, sp, #0x8 + mov r0, #0x7 + ldmia sp!, {r4-r6,lr} + bx lr +_020D9120: + cmp r5, #0x0 + addne sp, sp, #0x8 + movne r0, #0x6 + ldmneia sp!, {r4-r6,lr} + bxne lr +_020D9134: + mov r1, r6 + mov r0, #0xd + bl WMi_SetCallbackTable + mov r1, #0x1 + mov r2, r1, lsl r5 + mov r0, #0xd + bl WMi_SendCommand +_020D9150: ; 0x020D9150 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D9164: .word 0x00000182 + + arm_func_start WM_StartConnectEx +WM_StartConnectEx: ; 0x020D9168 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x2c + mov r7, r0 + mov r6, r1 + mov r0, #0x1 + mov r1, #0x2 + mov r5, r2 + mov r4, r3 + bl WMi_CheckStateEx +_020D918C: ; 0x020D918C + cmp r0, #0x0 + addne sp, sp, #0x2c + ldmneia sp!, {r4-r7,lr} + bxne lr + cmp r6, #0x0 + addeq sp, sp, #0x2c + moveq r0, #0x6 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldrh r1, [r6, #0x0] + mov r0, r6 + mov r1, r1, lsl #0x1 + bl DC_StoreRange + bl WMi_GetSystemWork + add r1, r0, #0x100 + mov r2, #0x0 + strh r2, [r1, #0x50] + str r2, [r0, #0x14c] + mov r1, r7 + mov r0, #0xc + bl WMi_SetCallbackTable + mov r0, #0xc + strh r0, [sp, #0x0] + str r6, [sp, #0x4] + cmp r5, #0x0 + beq _020D9208 + add r1, sp, #0x8 + mov r0, r5 + mov r2, #0x18 + bl MI_CpuCopy8 + b _020D9218 +_020D9208: + add r0, sp, #0x8 + mov r1, #0x0 + mov r2, #0x18 + bl MI_CpuFill8 +_020D9218: + ldrh r2, [sp, #0x40] + add r0, sp, #0x0 + mov r1, #0x28 + str r4, [sp, #0x20] + strh r2, [sp, #0x26] + bl WMi_SendCommandDirect +_020D9230: ; 0x020D9230 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x2c + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WM_EndScan +WM_EndScan: ; 0x020D9244 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, #0x5 + bl WMi_CheckStateEx +_020D9258: ; 0x020D9258 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0xb + bl WMi_SetCallbackTable + mov r0, #0xb + mov r1, #0x0 + bl WMi_SendCommand +_020D927C: ; 0x020D927C + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_StartScanEx +WM_StartScanEx: ; 0x020D928C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x3c + mov r5, r0 + mov r0, #0x3 + mov r4, r1 + mov r2, r0 + mov r1, #0x2 + mov r3, #0x5 + bl WMi_CheckStateEx +_020D92B0: ; 0x020D92B0 + cmp r0, #0x0 + addne sp, sp, #0x3c + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r4, #0x0 + addeq sp, sp, #0x3c + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, [r4, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x3c + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldrh r0, [r4, #0x4] + cmp r0, #0x400 + addhi sp, sp, #0x3c + movhi r0, #0x6 + ldmhiia sp!, {r4-r5,lr} + bxhi lr + ldrh r0, [r4, #0x12] + cmp r0, #0x20 + addhi sp, sp, #0x3c + movhi r0, #0x6 + ldmhiia sp!, {r4-r5,lr} + bxhi lr + ldrh r1, [r4, #0x10] + cmp r1, #0x0 + beq _020D934C + cmp r1, #0x1 + beq _020D934C + cmp r1, #0x2 + beq _020D934C + cmp r1, #0x3 + addne sp, sp, #0x3c + movne r0, #0x6 + ldmneia sp!, {r4-r5,lr} + bxne lr +_020D934C: + ldr r0, _020D9408 ; =0x0000FFFE + add r0, r1, r0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #0x1 + bhi _020D937C + ldrh r0, [r4, #0x34] + cmp r0, #0x20 + addhi sp, sp, #0x3c + movhi r0, #0x6 + ldmhiia sp!, {r4-r5,lr} + bxhi lr +_020D937C: + mov r1, r5 + mov r0, #0x26 + bl WMi_SetCallbackTable + mov r0, #0x26 + strh r0, [sp, #0x0] + ldrh r2, [r4, #0x6] + add r1, sp, #0xc + add r0, r4, #0xa + strh r2, [sp, #0x2] + ldr r3, [r4, #0x0] + mov r2, #0x6 + str r3, [sp, #0x4] + ldrh r3, [r4, #0x4] + strh r3, [sp, #0x8] + ldrh r3, [r4, #0x8] + strh r3, [sp, #0xa] + bl MI_CpuCopy8 + ldrh r2, [r4, #0x10] + add r1, sp, #0x16 + add r0, r4, #0x14 + strh r2, [sp, #0x12] + ldrh r3, [r4, #0x34] + mov r2, #0x20 + strh r3, [sp, #0x36] + ldrh r3, [r4, #0x12] + strh r3, [sp, #0x14] + bl MI_CpuCopy8 +_020D93E8: ; 0x020D93E8 + add r0, sp, #0x0 + mov r1, #0x3c + bl WMi_SendCommandDirect +_020D93F4: ; 0x020D93F4 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x3c + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D9408: .word 0x0000FFFE + + arm_func_start WM_StartScan +WM_StartScan: ; 0x020D940C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x14 + mov r5, r0 + mov r0, #0x3 + mov r4, r1 + mov r2, r0 + mov r1, #0x2 + mov r3, #0x5 + bl WMi_CheckStateEx +_020D9430: ; 0x020D9430 + cmp r0, #0x0 + addne sp, sp, #0x14 + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r4, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, [r4, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldrh r0, [r4, #0x4] + cmp r0, #0x1 + blo _020D9480 + cmp r0, #0xe + bls _020D9490 +_020D9480: + add sp, sp, #0x14 + mov r0, #0x6 + ldmia sp!, {r4-r5,lr} + bx lr +_020D9490: + mov r1, r5 + mov r0, #0xa + bl WMi_SetCallbackTable + mov r0, #0xa + strh r0, [sp, #0x0] + ldrh r2, [r4, #0x4] + add r0, sp, #0x0 + mov r1, #0x10 + strh r2, [sp, #0x2] + ldr r2, [r4, #0x0] + str r2, [sp, #0x4] + ldrh r2, [r4, #0x6] + strh r2, [sp, #0x8] + ldrb r2, [r4, #0x8] + strb r2, [sp, #0xa] + ldrb r2, [r4, #0x9] + strb r2, [sp, #0xb] + ldrb r2, [r4, #0xa] + strb r2, [sp, #0xc] + ldrb r2, [r4, #0xb] + strb r2, [sp, #0xd] + ldrb r2, [r4, #0xc] + strb r2, [sp, #0xe] + ldrb r2, [r4, #0xd] + strb r2, [sp, #0xf] + bl WMi_SendCommandDirect +_020D94F8: ; 0x020D94F8 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x14 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_EndParent +WM_EndParent: ; 0x020D950C + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, #0x7 + bl WMi_CheckStateEx +_020D9520: ; 0x020D9520 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x9 + bl WMi_SetCallbackTable + mov r0, #0x9 + mov r1, #0x0 + bl WMi_SendCommand +_020D9544: ; 0x020D9544 + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_StartParent +WM_StartParent: ; 0x020D9554 + ldr ip, _020D9560 ; =FUN_020D9564 + mov r1, #0x1 + bx r12 + .balign 4 +_020D9560: .word FUN_020D9564 + + arm_func_start FUN_020D9564 +FUN_020D9564: ; 0x020D9564 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020D9580: ; 0x020D9580 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + bl WMi_GetSystemWork + add r1, r0, #0x100 + mov r2, #0x0 + strh r2, [r1, #0x50] + str r2, [r0, #0x14c] + mov r1, r5 + mov r0, #0x8 + bl WMi_SetCallbackTable + mov r2, r4 + mov r0, #0x8 + mov r1, #0x1 + bl WMi_SendCommand +_020D95C0: ; 0x020D95C0 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WmCheckParentParameter +WmCheckParentParameter: ; 0x020D95D4 + ldrh r1, [r0, #0x4] + cmp r1, #0x70 + movhi r0, #0x0 + bxhi lr + ldrh r1, [r0, #0x18] + cmp r1, #0xa + blo _020D95F8 + cmp r1, #0x3e8 + bls _020D9600 +_020D95F8: + mov r0, #0x0 + bx lr +_020D9600: + ldrh r0, [r0, #0x32] + cmp r0, #0x1 + blo _020D9614 + cmp r0, #0xe + bls _020D961C +_020D9614: + mov r0, #0x0 + bx lr +_020D961C: + mov r0, #0x1 + bx lr + + arm_func_start WM_SetParentParameter +WM_SetParentParameter: ; 0x020D9624 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020D9640: ; 0x020D9640 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r4, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldrh r0, [r4, #0x4] + cmp r0, #0x0 + beq _020D9688 + ldr r0, [r4, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr +_020D9688: + ldrh r1, [r4, #0x14] + ldrh r0, [r4, #0x34] + cmp r1, #0x0 + movne r2, #0x2a + moveq r2, #0x0 + add r0, r0, r2 + cmp r0, #0x200 + bgt _020D96C4 + ldrh r0, [r4, #0x36] + cmp r1, #0x0 + movne r1, #0x6 + moveq r1, #0x0 + add r0, r0, r1 + cmp r0, #0x200 + ble _020D96D4 +_020D96C4: + add sp, sp, #0x4 + mov r0, #0x6 + ldmia sp!, {r4-r5,lr} + bx lr +_020D96D4: + mov r0, r4 + bl WmCheckParentParameter + mov r1, r5 + mov r0, #0x7 + bl WMi_SetCallbackTable + mov r0, r4 + mov r1, #0x40 + bl DC_StoreRange + ldrh r1, [r4, #0x4] + cmp r1, #0x0 + beq _020D9708 + ldr r0, [r4, #0x0] + bl DC_StoreRange +_020D9708: + mov r2, r4 + mov r0, #0x7 + mov r1, #0x1 + bl WMi_SendCommand +_020D9718: ; 0x020D9718 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_End +WM_End: ; 0x020D972C + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020D9740: ; 0x020D9740 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x2 + bl WMi_SetCallbackTable + mov r0, #0x2 + mov r1, #0x0 + bl WMi_SendCommand +_020D9764: ; 0x020D9764 + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_Reset +WM_Reset: ; 0x020D9774 + stmdb sp!, {r4,lr} + mov r4, r0 + bl WMi_CheckIdle +_020D9780: ; 0x020D9780 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x1 + bl WMi_SetCallbackTable + mov r0, #0x1 + mov r1, #0x0 + bl WMi_SendCommand +_020D97A4: ; 0x020D97A4 + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_Initialize +WM_Initialize: ; 0x020D97B4 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + mov r4, r1 + mov r1, r2 + bl WM_Init +_020D97C8: ; 0x020D97C8 + cmp r0, #0x0 + addne sp, sp, #0x8 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x0 + bl WMi_SetCallbackTable + bl WMi_GetSystemWork + mov r3, r0 + ldr r1, [r3, #0x10] + mov r0, #0x0 + str r1, [sp, #0x0] + ldr r2, [r3, #0x0] + ldr r3, [r3, #0x4] + mov r1, #0x3 + bl WMi_SendCommand +_020D9808: ; 0x020D9808 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_PowerOff +WM_PowerOff: ; 0x020D981C + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020D9830: ; 0x020D9830 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x6 + bl WMi_SetCallbackTable + mov r0, #0x6 + mov r1, #0x0 + bl WMi_SendCommand +_020D9854: ; 0x020D9854 + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_PowerOn +WM_PowerOn: ; 0x020D9864 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, r0 + bl WMi_CheckStateEx +_020D9878: ; 0x020D9878 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x5 + bl WMi_SetCallbackTable + mov r0, #0x5 + mov r1, #0x0 + bl WMi_SendCommand +_020D989C: ; 0x020D989C + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_Disable +WM_Disable: ; 0x020D98AC + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, r0 + bl WMi_CheckStateEx +_020D98C0: ; 0x020D98C0 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x4 + bl WMi_SetCallbackTable + mov r0, #0x4 + mov r1, #0x0 + bl WMi_SendCommand +_020D98E4: ; 0x020D98E4 + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_Enable +WM_Enable: ; 0x020D98F4 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + mov r4, r0 + mov r0, #0x1 + mov r1, #0x0 + bl WMi_CheckStateEx +_020D990C: ; 0x020D990C + cmp r0, #0x0 + addne sp, sp, #0x8 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x3 + bl WMi_SetCallbackTable + bl WMi_GetSystemWork + mov r3, r0 + ldr r1, [r3, #0x10] + mov r0, #0x3 + str r1, [sp, #0x0] + ldr r2, [r3, #0x0] + ldr r3, [r3, #0x4] + mov r1, r0 + bl WMi_SendCommand +_020D994C: ; 0x020D994C + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_EndMP +WM_EndMP: ; 0x020D9960 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x2 + mov r1, #0x9 + mov r2, #0xa + bl WMi_CheckStateEx +_020D9984: ; 0x020D9984 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x4 + add r0, r0, #0xc + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + ldr r0, [r0, #0xc] + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x3 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + mov r1, r5 + mov r0, #0x10 + bl WMi_SetCallbackTable + mov r0, #0x10 + mov r1, #0x0 + bl WMi_SendCommand +_020D99D8: ; 0x020D99D8 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_SetMPDataToPortEx +WM_SetMPDataToPortEx: ; 0x020D99EC + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x14 + mov r9, r0 + mov r8, r1 + mov r7, r2 + mov r6, r3 + mov r5, #0x1 + bl WMi_GetSystemWork + ldr r4, [r0, #0x4] + mov r0, #0x2 + mov r1, #0x9 + mov r2, #0xa + bl WMi_CheckStateEx +_020D9A20: ; 0x020D9A20 + cmp r0, #0x0 + addne sp, sp, #0x14 + ldmneia sp!, {r4-r9,lr} + bxne lr + add r0, r4, #0x3c + mov r1, #0x2 + bl DC_InvalidateRange + add r0, r4, #0x188 + mov r1, #0x2 + bl DC_InvalidateRange + add r0, r4, #0x100 + ldrh r0, [r0, #0x88] + cmp r0, #0x0 + bne _020D9A7C + ldr r0, _020D9B44 ; =0x00000182 + mov r1, #0x2 + add r0, r4, r0 + bl DC_InvalidateRange + add r2, r4, #0x100 + add r0, r4, #0x86 + mov r1, #0x2 + ldrh r5, [r2, #0x82] + bl DC_InvalidateRange +_020D9A7C: + cmp r7, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x6 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r5, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x7 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + add r0, r4, #0x7c + mov r1, #0x2 + bl DC_InvalidateRange + ldr r0, [r4, #0x7c] + cmp r7, r0 + addeq sp, sp, #0x14 + moveq r0, #0x6 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r6, #0x200 + addhi sp, sp, #0x14 + movhi r0, #0x6 + ldmhiia sp!, {r4-r9,lr} + bxhi lr + cmp r6, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x6 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + mov r0, r7 + mov r1, r6 + bl DC_StoreRange + ldrh r2, [sp, #0x30] + ldrh r1, [sp, #0x34] + ldrh r0, [sp, #0x38] + str r2, [sp, #0x0] + str r1, [sp, #0x4] + str r0, [sp, #0x8] + str r9, [sp, #0xc] + mov r2, r7 + mov r3, r6 + mov r0, #0xf + mov r1, #0x7 + str r8, [sp, #0x10] + bl WMi_SendCommand +_020D9B30: ; 0x020D9B30 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x14 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020D9B44: .word 0x00000182 + + arm_func_start WM_StartMP +WM_StartMP: ; 0x020D9B48 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x24 + mov r6, r1 + mov r7, r0 + mov r5, r2 + add r1, sp, #0x8 + mov r0, #0x0 + mov r2, #0x1c + mov r4, r3 + bl MIi_CpuClear32 + ldrh r12, [sp, #0x3c] + mov r0, #0x3 + str r0, [sp, #0x8] + ldrh lr, [sp, #0x38] + strh r12, [sp, #0xc] + strh r12, [sp, #0xe] + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + add r12, sp, #0x8 + str lr, [sp, #0x0] + str r12, [sp, #0x4] + bl WMi_StartMP + add sp, sp, #0x24 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WM_StartMPEx +WM_StartMPEx: ; 0x020D9BB4 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x28 + mov r6, r1 + mov r7, r0 + mov r5, r2 + add r1, sp, #0x8 + mov r0, #0x0 + mov r2, #0x1c + mov r4, r3 + bl MIi_CpuClear32 + ldrh lr, [sp, #0x44] + ldr r1, [sp, #0x58] + ldrh r12, [sp, #0x48] + ldr r0, [sp, #0x54] + ldr r8, _020D9C54 ; =0x00001E03 + cmp r0, #0x0 + ldr r3, [sp, #0x4c] + ldr r2, [sp, #0x50] + strb r1, [sp, #0x22] + strh r12, [sp, #0x1e] + strb r3, [sp, #0x20] + strb r2, [sp, #0x21] + ldrh r1, [sp, #0x40] + str r8, [sp, #0x8] + orrne r0, r8, #0x4 + strne r0, [sp, #0x8] + strh lr, [sp, #0xc] + strh lr, [sp, #0xe] + strneh lr, [sp, #0x10] + str r1, [sp, #0x0] + add r12, sp, #0x8 + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + str r12, [sp, #0x4] + bl WMi_StartMP + add sp, sp, #0x28 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D9C54: .word 0x00001E03 + + arm_func_start WMi_StartMP +WMi_StartMP: ; 0x020D9C58 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x34 + mov r9, r0 + mov r8, r1 + mov r7, r2 + mov r6, r3 + bl WMi_GetSystemWork + ldr r5, [r0, #0x4] + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x8 + bl WMi_CheckStateEx +_020D9C88: ; 0x020D9C88 + cmp r0, #0x0 + addne sp, sp, #0x34 + ldmneia sp!, {r4-r9,lr} + bxne lr + add r0, r5, #0x188 + mov r1, #0x2 + bl DC_InvalidateRange + add r0, r5, #0xc6 + mov r1, #0x2 + bl DC_InvalidateRange + add r0, r5, #0x100 + ldrh r0, [r0, #0x88] + cmp r0, #0x0 + beq _020D9CD8 + ldrh r0, [r5, #0xc6] + cmp r0, #0x1 + addne sp, sp, #0x34 + movne r0, #0x3 + ldmneia sp!, {r4-r9,lr} + bxne lr +_020D9CD8: + add r0, r5, #0xc + mov r1, #0x4 + bl DC_InvalidateRange + ldr r0, [r5, #0xc] + cmp r0, #0x1 + addeq sp, sp, #0x34 + moveq r0, #0x3 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + ands r0, r7, #0x3f + addne sp, sp, #0x34 + movne r0, #0x6 + ldmneia sp!, {r4-r9,lr} + bxne lr + ldrh r4, [sp, #0x50] + ands r0, r4, #0x1f + addne sp, sp, #0x34 + movne r0, #0x6 + ldmneia sp!, {r4-r9,lr} + bxne lr + add r0, r5, #0x9c + mov r1, #0x2 + bl DC_InvalidateRange + ldrh r0, [r5, #0x9c] + cmp r0, #0x0 + bne _020D9D70 + bl WM_GetMPReceiveBufferSize +_020D9D44: ; 0x020D9D44 + cmp r7, r0 + addlt sp, sp, #0x34 + movlt r0, #0x6 + ldmltia sp!, {r4-r9,lr} + bxlt lr + bl WM_GetMPSendBufferSize +_020D9D5C: ; 0x020D9D5C + cmp r4, r0 + addlt sp, sp, #0x34 + movlt r0, #0x6 + ldmltia sp!, {r4-r9,lr} + bxlt lr +_020D9D70: + mov r1, r9 + mov r0, #0xe + bl WMi_SetCallbackTable + add r1, sp, #0x0 + mov r0, #0x0 + mov r2, #0x30 + bl MIi_CpuClear32 + ldrh r3, [sp, #0x50] + mov r4, r7, lsr #0x1 + mov r5, #0xe + ldr r0, [sp, #0x54] + add r1, sp, #0x14 + mov r2, #0x1c + strh r5, [sp, #0x0] + str r8, [sp, #0x4] + str r4, [sp, #0x8] + str r6, [sp, #0xc] + str r3, [sp, #0x10] + bl MIi_CpuCopy32 +_020D9DBC: ; 0x020D9DBC + add r0, sp, #0x0 + mov r1, #0x30 + bl WMi_SendCommandDirect +_020D9DC8: ; 0x020D9DC8 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x34 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start WM_EndDCF +WM_EndDCF: ; 0x020D9DDC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x1 + mov r1, #0xb + bl WMi_CheckStateEx +_020D9DFC: ; 0x020D9DFC + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x4 + add r0, r0, #0x10 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + ldr r0, [r0, #0x10] + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x3 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + mov r1, r5 + mov r0, #0x13 + bl WMi_SetCallbackTable + mov r0, #0x13 + mov r1, #0x0 + bl WMi_SendCommand +_020D9E50: ; 0x020D9E50 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_SetDCFData +WM_SetDCFData: ; 0x020D9E64 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl WMi_GetSystemWork + mov r8, r0 + mov r0, #0x1 + mov r1, #0xb + bl WMi_CheckStateEx +_020D9E90: ; 0x020D9E90 + cmp r0, #0x0 + addne sp, sp, #0x10 + ldmneia sp!, {r4-r8,lr} + bxne lr + ldr r0, [r8, #0x4] + mov r1, #0x4 + add r0, r0, #0x10 + bl DC_InvalidateRange + ldr r0, [r8, #0x4] + ldr r0, [r0, #0x10] + cmp r0, #0x0 + addeq sp, sp, #0x10 + moveq r0, #0x3 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r0, _020D9F3C ; =0x000005E4 + cmp r4, r0 + addhi sp, sp, #0x10 + movhi r0, #0x6 + ldmhiia sp!, {r4-r8,lr} + bxhi lr + mov r0, r5 + mov r1, r4 + bl DC_StoreRange + mov r1, r7 + mov r0, #0x12 + bl WMi_SetCallbackTable + add r1, sp, #0x8 + mov r0, r6 + mov r2, #0x6 + bl MI_CpuCopy8 + str r5, [sp, #0x0] + str r4, [sp, #0x4] + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + mov r0, #0x12 + mov r1, #0x4 + bl WMi_SendCommand +_020D9F28: ; 0x020D9F28 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D9F3C: .word 0x000005E4 + + arm_func_start WM_StartDCF +WM_StartDCF: ; 0x020D9F40 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x1 + mov r1, #0x8 + bl WMi_CheckStateEx +_020D9F68: ; 0x020D9F68 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x4 + add r0, r0, #0x10 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + ldr r0, [r0, #0x10] + cmp r0, #0x1 + addeq sp, sp, #0x4 + moveq r0, #0x3 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + cmp r5, #0x10 + addcc sp, sp, #0x4 + movcc r0, #0x6 + ldmccia sp!, {r4-r7,lr} + bxcc lr + cmp r6, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x6 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r6 + mov r1, r5 + bl DC_StoreRange + mov r1, r7 + mov r0, #0x11 + bl WMi_SetCallbackTable + mov r2, r6 + mov r3, r5 + mov r0, #0x11 + mov r1, #0x2 + bl WMi_SendCommand +_020D9FF8: ; 0x020D9FF8 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WmGetSharedDataAddress +WmGetSharedDataAddress: ; 0x020DA00C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r12, #0x1 + mov r3, r12, lsl r3 + sub r3, r3, #0x1 + mov r5, r0 + and r0, r1, r3 + mov r4, r2 + bl FUN_020DDC5C + add r1, r5, #0x800 + ldrh r1, [r1, #0x10] + mla r0, r1, r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_GetSharedDataAddress +WM_GetSharedDataAddress: ; 0x020DA048 + stmdb sp!, {r4,lr} + mov r4, r1 + ldrh lr, [r4, #0x2] + cmp r0, #0x0 + mov r3, r2 + mov r1, #0x1 + mov r12, r1, lsl r3 + ldrh r1, [r4, #0x0] + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + cmp r4, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ands r2, r1, r12 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ands r2, lr, r12 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + add r2, r4, #0x4 + bl WmGetSharedDataAddress + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WmDataSharingSendDataSet +WmDataSharingSendDataSet: + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x10 + mov r10, r0 + mov r9, r1 + bl OS_DisableInterrupts + add r1, r10, #0x800 + ldrh r1, [r1, #0x8] + mov r7, r0 + mov r1, r1, lsl #0x9 + ldrh r1, [r10, r1] + cmp r1, #0x0 + bne _020DA210 + bl WMi_GetMPReadyAIDs + add r1, r10, #0x800 + ldrh r6, [r1, #0x8] + mov r5, r0 + ldrh r1, [r1, #0x18] + add r0, r6, #0x1 + and r0, r0, #0x3 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + cmp r1, #0x1 + addeq r0, r4, #0x1 + andeq r0, r0, #0x3 + moveq r0, r0, lsl #0x10 + moveq r8, r0, lsr #0x10 + movne r8, r4 + add r1, r10, r8, lsl #0x9 + mov r0, #0x0 + mov r2, #0x200 + bl MIi_CpuClear16 + add r0, r10, #0x800 + ldrh r3, [r0, #0xe] + orr r2, r5, #0x1 + mov r1, r8, lsl #0x9 + and r2, r3, r2 + strh r2, [r10, r1] + strh r4, [r0, #0x8] + ldrh r0, [r0, #0xe] + mov r1, r6, lsl #0x9 + cmp r9, #0x1 + strh r0, [r10, r1] + ldreqh r0, [r10, r1] + biceq r0, r0, #0x1 + streqh r0, [r10, r1] + mov r0, r7 + bl OS_RestoreInterrupts + add r3, r10, #0x800 + ldrh r1, [r3, #0xe] + mov r4, #0x1 + ldr r0, _020DA220 ; =WmDataSharingSetDataCallback + and r1, r1, r5 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + str r1, [sp, #0x0] + ldrh r5, [r3, #0x16] + mov r1, r10 + add r2, r10, r6, lsl #0x9 + str r5, [sp, #0x4] + str r4, [sp, #0x8] + ldrh r3, [r3, #0x14] + bl WM_SetMPDataToPortEx + cmp r0, #0x7 + bne _020DA1E4 + add r0, r10, r6, lsl #0x1 + ldr r1, _020DA224 ; =0x0000FFFF + add r0, r0, #0x800 + strh r1, [r0, #0x0] + add r0, r10, #0x800 + ldrh r1, [r0, #0xa] + add sp, sp, #0x10 + add r1, r1, #0x1 + and r1, r1, #0x3 + strh r1, [r0, #0xa] + ldmia sp!, {r4-r10,lr} + bx lr +_020DA1E4: + cmp r0, #0x0 + addeq sp, sp, #0x10 + ldmeqia sp!, {r4-r10,lr} + bxeq lr + cmp r0, #0x2 + addne r0, r10, #0x800 + movne r1, #0x5 + strneh r1, [r0, #0x1c] + add sp, sp, #0x10 + ldmia sp!, {r4-r10,lr} + bx lr +_020DA210: + bl OS_RestoreInterrupts + add sp, sp, #0x10 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020DA220: .word WmDataSharingSetDataCallback +_020DA224: .word 0x0000FFFF + + arm_func_start WmDataSharingReceiveData +WmDataSharingReceiveData: ; 0x020DA228 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r3, r1 + mov r0, #0x1 + mov r0, r0, lsl r3 + add r12, r7, #0x800 + mov r0, r0, lsl #0x10 + ldrh r1, [r12, #0xe] + mov r5, r0, lsr #0x10 + mov r6, r2 + ands r0, r1, r5 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldrh r4, [r12, #0x8] + mov r0, r4, lsl #0x9 + ldrh r0, [r7, r0] + ands r0, r5, r0 + bne _020DA2B4 + ldrh r0, [r12, #0x18] + cmp r0, #0x1 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + add r0, r4, #0x1 + and r0, r0, #0x3 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + mov r0, r4, lsl #0x9 + ldrh r0, [r7, r0] + ands r0, r5, r0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr +_020DA2B4: + add r2, r7, r4, lsl #0x9 + mov r0, r7 + add r2, r2, #0x4 + bl WmGetSharedDataAddress + mov r1, r0 + cmp r6, #0x0 + beq _020DA2E4 + add r0, r7, #0x800 + ldrh r2, [r0, #0x10] + mov r0, r6 + bl MIi_CpuCopy16 + b _020DA2F4 +_020DA2E4: + add r0, r7, #0x800 + ldrh r2, [r0, #0x10] + mov r0, #0x0 + bl MIi_CpuClear16 +_020DA2F4: + bl OS_DisableInterrupts + mov r4, r4, lsl #0x9 + ldrh r3, [r7, r4] + mvn r1, r5 + add r2, r7, #0x2 + and r1, r3, r1 + strh r1, [r7, r4] + ldrh r1, [r2, r4] + orr r1, r1, r5 + strh r1, [r2, r4] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WmDataSharingReceiveCallback_Child +WmDataSharingReceiveCallback_Child: ; 0x020DA32C + stmdb sp!, {r4-r8,lr} + mov r8, r0 + ldr r7, [r8, #0x1c] + cmp r7, #0x0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldrh r0, [r8, #0x2] + cmp r0, #0x0 + bne _020DA458 + ldrh r0, [r8, #0x4] + cmp r0, #0x15 + bgt _020DA394 + cmp r0, #0x15 + bge _020DA3C4 + cmp r0, #0x9 + ldmgtia sp!, {r4-r8,lr} + bxgt lr + cmp r0, #0x7 + ldmltia sp!, {r4-r8,lr} + bxlt lr + cmp r0, #0x7 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + cmp r0, #0x9 + ldmia sp!, {r4-r8,lr} + bx lr +_020DA394: + cmp r0, #0x1a + ldmgtia sp!, {r4-r8,lr} + bxgt lr + cmp r0, #0x19 + ldmltia sp!, {r4-r8,lr} + bxlt lr + cmp r0, #0x19 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + cmp r0, #0x1a + ldmia sp!, {r4-r8,lr} + bx lr +_020DA3C4: + ldr r4, [r8, #0xc] + ldrh r6, [r8, #0x10] + ldrh r5, [r4, #0x0] + bl WM_GetAID + add r1, r7, #0x800 + ldrh r1, [r1, #0x14] + cmp r6, r1 + beq _020DA3EC + cmp r6, #0x200 + movhi r6, #0x200 +_020DA3EC: + cmp r6, #0x4 + ldmccia sp!, {r4-r8,lr} + bxcc lr + mov r1, #0x1 + mov r0, r1, lsl r0 + ands r0, r5, r0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + add r0, r7, #0x800 + ldrh r1, [r0, #0x8] + mov r0, r4 + mov r2, r6 + add r1, r7, r1, lsl #0x9 + bl MIi_CpuCopy16 + add r1, r7, #0x800 + ldrh r0, [r1, #0x8] + ldrh r2, [r8, #0x1a] + add r0, r7, r0, lsl #0x1 + mov r2, r2, asr #0x1 + add r0, r0, #0x800 + strh r2, [r0, #0x0] + ldrh r0, [r1, #0x8] + add r0, r0, #0x1 + and r0, r0, #0x3 + strh r0, [r1, #0x8] + ldmia sp!, {r4-r8,lr} + bx lr +_020DA458: + add r0, r7, #0x800 + mov r1, #0x5 + strh r1, [r0, #0x1c] + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start WmDataSharingReceiveCallback_Parent +WmDataSharingReceiveCallback_Parent: ; 0x020DA46C + stmdb sp!, {r4-r6,lr} + ldr r4, [r0, #0x1c] + cmp r4, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldrh r1, [r0, #0x2] + cmp r1, #0x0 + bne _020DA5C4 + ldrh r1, [r0, #0x4] + cmp r1, #0x15 + bgt _020DA4D0 + cmp r1, #0x15 + bge _020DA504 + cmp r1, #0x9 + ldmgtia sp!, {r4-r6,lr} + bxgt lr + cmp r1, #0x7 + ldmltia sp!, {r4-r6,lr} + bxlt lr + cmp r1, #0x7 + beq _020DA528 + cmp r1, #0x9 + beq _020DA53C + ldmia sp!, {r4-r6,lr} + bx lr +_020DA4D0: + cmp r1, #0x1a + ldmgtia sp!, {r4-r6,lr} + bxgt lr + cmp r1, #0x19 + ldmltia sp!, {r4-r6,lr} + bxlt lr + cmp r1, #0x19 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + cmp r1, #0x1a + beq _020DA53C + ldmia sp!, {r4-r6,lr} + bx lr +_020DA504: + ldrh r1, [r0, #0x12] + ldr r2, [r0, #0xc] + mov r0, r4 + bl WmDataSharingReceiveData + mov r0, r4 + mov r1, #0x0 + bl WmDataSharingSendDataSet + ldmia sp!, {r4-r6,lr} + bx lr +_020DA528: + mov r0, r4 + mov r1, #0x0 + bl WmDataSharingSendDataSet + ldmia sp!, {r4-r6,lr} + bx lr +_020DA53C: + ldrh r5, [r0, #0x12] + mov r6, #0x1 + bl OS_DisableInterrupts + add r1, r4, #0x800 + ldrh lr, [r1, #0x8] + mvn r12, r6, lsl r5 + mov r3, lr, lsl #0x9 + ldrh r2, [r4, r3] + and r2, r2, r12 + strh r2, [r4, r3] + ldrh r1, [r1, #0x18] + cmp r1, #0x1 + bne _020DA58C + add r1, lr, #0x1 + and r1, r1, #0x3 + mov r1, r1, lsl #0x10 + mov r2, r1, lsr #0x7 + ldrh r1, [r4, r2] + and r1, r1, r12 + strh r1, [r4, r2] +_020DA58C: + bl OS_RestoreInterrupts + mov r0, r4 + mov r1, #0x0 + bl WmDataSharingSendDataSet + add r0, r4, #0x800 + ldrh r0, [r0, #0x18] + cmp r0, #0x1 + ldmneia sp!, {r4-r6,lr} + bxne lr + mov r0, r4 + mov r1, #0x0 + bl WmDataSharingSendDataSet + ldmia sp!, {r4-r6,lr} + bx lr +_020DA5C4: + add r0, r4, #0x800 + mov r1, #0x5 + strh r1, [r0, #0x1c] + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start WmDataSharingSetDataCallback +WmDataSharingSetDataCallback: ; 0x020DA5D8 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WMi_GetSystemWork + ldrh r2, [r5, #0xa] + ldr r1, _020DA6E4 ; =WmDataSharingReceiveCallback_Parent + add r0, r0, r2, lsl #0x2 + ldr r2, [r0, #0xcc] + ldr r4, [r0, #0x10c] + cmp r2, r1 + beq _020DA618 + ldr r0, _020DA6E8 ; =WmDataSharingReceiveCallback_Child + cmp r2, r0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr +_020DA618: + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, [r5, #0x20] + cmp r4, r0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + bl WM_GetAID + ldrh r1, [r5, #0x2] + cmp r1, #0x0 + bne _020DA694 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + add r1, r4, #0x800 + ldrh r0, [r1, #0xa] + ldrh r2, [r5, #0x1a] + add sp, sp, #0x4 + add r0, r4, r0, lsl #0x1 + mov r2, r2, asr #0x1 + add r0, r0, #0x800 + strh r2, [r0, #0x0] + ldrh r0, [r1, #0xa] + add r0, r0, #0x1 + and r0, r0, #0x3 + strh r0, [r1, #0xa] + ldmia sp!, {r4-r5,lr} + bx lr +_020DA694: + cmp r1, #0xa + bne _020DA6CC + cmp r0, #0x0 + addne r0, r4, #0x800 + ldrneh r1, [r0, #0xa] + add sp, sp, #0x4 + addne r1, r1, #0x3 + andne r1, r1, #0x3 + strneh r1, [r0, #0xa] + add r0, r4, #0x800 + mov r1, #0x4 + strh r1, [r0, #0x1c] + ldmia sp!, {r4-r5,lr} + bx lr +_020DA6CC: + add r0, r4, #0x800 + mov r1, #0x5 + strh r1, [r0, #0x1c] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DA6E4: .word WmDataSharingReceiveCallback_Parent +_020DA6E8: .word WmDataSharingReceiveCallback_Child + + arm_func_start WM_StepDataSharing +WM_StepDataSharing: ; 0x020DA6EC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r10, r0 + mov r9, r1 + mov r8, r2 + mov r0, #0x2 + mov r1, #0x9 + mov r2, #0xa + bl WMi_CheckStateEx +_020DA710: ; 0x020DA710 + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r11,lr} + bxne lr + cmp r10, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + cmp r9, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + cmp r8, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + bl WM_GetAID + movs r4, r0 + bne _020DA770 + bl WMi_GetMPReadyAIDs + mov r7, r0 +_020DA770: + add r0, r10, #0x800 + ldrh r0, [r0, #0x1c] + cmp r0, #0x5 + addeq sp, sp, #0xc + moveq r0, #0x1 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + cmp r0, #0x1 + beq _020DA7A8 + cmp r0, #0x4 + addne sp, sp, #0xc + movne r0, #0x3 + ldmneia sp!, {r4-r11,lr} + bxne lr +_020DA7A8: + cmp r4, #0x0 + mov r4, #0x5 + bne _020DA94C + mov r6, #0x0 + mov r11, r6 + cmp r0, #0x4 + bne _020DA870 + add r1, r10, #0x800 + mov r3, #0x1 + strh r3, [r1, #0x1c] + ldrh r5, [r1, #0xe] + ldrh r2, [r1, #0x8] + ldr r0, _020DAA64 ; =WmDataSharingSetDataCallback + and r5, r5, r7 + mov r5, r5, lsl #0x10 + mov r5, r5, lsr #0x10 + str r5, [sp, #0x0] + ldrh r5, [r1, #0x16] + add r2, r2, #0x3 + and r2, r2, #0x3 + str r5, [sp, #0x4] + str r3, [sp, #0x8] + mov r2, r2, lsl #0x10 + mov r5, r2, lsr #0x10 + ldrh r3, [r1, #0x14] + mov r1, r10 + add r2, r10, r5, lsl #0x9 + bl WM_SetMPDataToPortEx + cmp r0, #0x7 + bne _020DA848 + add r0, r10, r5, lsl #0x1 + ldr r1, _020DAA68 ; =0x0000FFFF + add r0, r0, #0x800 + strh r1, [r0, #0x0] + add r0, r10, #0x800 + ldrh r1, [r0, #0xa] + add r1, r1, #0x1 + and r1, r1, #0x3 + strh r1, [r0, #0xa] + b _020DA870 +_020DA848: + cmp r0, #0x0 + beq _020DA870 + cmp r0, #0x2 + addne r0, r10, #0x800 + movne r1, r4 + strneh r1, [r0, #0x1c] + addne sp, sp, #0xc + movne r0, #0x1 + ldmneia sp!, {r4-r11,lr} + bxne lr +_020DA870: + add r0, r10, #0x800 + ldrh r2, [r0, #0xc] + ldrh r1, [r0, #0xa] + cmp r2, r1 + beq _020DA908 + mov r4, r2, lsl #0x9 + ldrh r3, [r10, r4] + mov r1, r8 + mov r2, #0x200 + orr r3, r3, #0x1 + strh r3, [r10, r4] + ldrh r0, [r0, #0xc] + add r0, r10, r0, lsl #0x9 + bl MIi_CpuCopy16 + add r1, r10, #0x800 + ldrh r0, [r1, #0xc] + mov r6, #0x1 + mov r4, #0x0 + add r0, r10, r0, lsl #0x1 + add r0, r0, #0x800 + ldrh r0, [r0, #0x0] + strh r0, [r1, #0x1a] + ldrh r0, [r1, #0xc] + add r0, r0, #0x1 + and r0, r0, #0x3 + strh r0, [r1, #0xc] + ldrh r0, [r1, #0x18] + cmp r0, #0x0 + bne _020DA904 + cmp r7, #0x0 + beq _020DA904 + ldrh r0, [r1, #0x8] + mov r0, r0, lsl #0x9 + ldrh r0, [r10, r0] + cmp r0, #0x1 + moveq r11, r6 + beq _020DA908 +_020DA904: + mov r11, #0x0 +_020DA908: + mov r0, r10 + mov r1, #0x0 + bl WmDataSharingSendDataSet +_020DA914: ; 0x020DA914 + cmp r6, #0x0 + beq _020DAA54 + mov r0, r10 + mov r2, r9 + mov r1, #0x0 + bl WmDataSharingReceiveData + add r0, r10, #0x800 + ldrh r0, [r0, #0x18] + cmp r0, #0x0 + bne _020DAA54 + mov r0, r10 + mov r1, r11 + bl WmDataSharingSendDataSet + b _020DAA54 +_020DA94C: + cmp r0, #0x4 + mov r0, #0x0 + addeq r1, r10, #0x800 + moveq r0, #0x1 + streqh r0, [r1, #0x1c] + beq _020DA9D0 + add r1, r10, #0x800 + ldrh r2, [r1, #0xc] + ldrh r1, [r1, #0x8] + cmp r2, r1 + beq _020DA9D0 + mov r2, r2, lsl #0x9 + ldrh r1, [r10, r2] + ands r3, r1, #0x1 + orreq r1, r1, #0x1 + streqh r1, [r10, r2] + beq _020DA9D0 + mov r1, r8 + add r0, r10, r2 + mov r2, #0x200 + bl MIi_CpuCopy16 + add r2, r10, #0x800 + ldrh r1, [r2, #0xc] + mov r0, #0x1 + mov r4, #0x0 + add r1, r10, r1, lsl #0x1 + add r1, r1, #0x800 + ldrh r1, [r1, #0x0] + strh r1, [r2, #0x1a] + ldrh r1, [r2, #0xc] + add r1, r1, #0x1 + and r1, r1, #0x3 + strh r1, [r2, #0xc] +_020DA9D0: + cmp r0, #0x0 + beq _020DAA54 + add r0, r10, #0x800 + ldrh r1, [r0, #0xa] + ldrh r2, [r0, #0x10] + mov r0, r9 + add r1, r10, r1, lsl #0x9 + add r7, r1, #0x20 + mov r1, r7 + bl MIi_CpuCopy16 + add r3, r10, #0x800 + ldrh r1, [r3, #0xe] + mov r5, #0x1 + ldr r0, _020DAA64 ; =WmDataSharingSetDataCallback + str r1, [sp, #0x0] + ldrh r6, [r3, #0x16] + mov r1, r10 + mov r2, r7 + str r6, [sp, #0x4] + str r5, [sp, #0x8] + ldrh r3, [r3, #0x10] + bl WM_SetMPDataToPortEx + add r1, r10, #0x800 + ldrh r2, [r1, #0xa] + cmp r0, #0x2 + add r2, r2, #0x1 + and r2, r2, #0x3 + strh r2, [r1, #0xa] + beq _020DAA54 + cmp r0, #0x0 + movne r0, #0x5 + strneh r0, [r1, #0x1c] + movne r4, r5 +_020DAA54: + mov r0, r4 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020DAA64: .word WmDataSharingSetDataCallback +_020DAA68: .word 0x0000FFFF + + arm_func_start WM_EndDataSharing +WM_EndDataSharing: ; 0x020DAA6C + stmdb sp!, {r4,lr} + movs r4, r0 + moveq r0, #0x6 + ldmeqia sp!, {r4,lr} + bxeq lr + add r0, r4, #0x800 + ldrh r1, [r0, #0xe] + cmp r1, #0x0 + moveq r0, #0x3 + ldmeqia sp!, {r4,lr} + bxeq lr + ldrh r0, [r0, #0x16] + mov r1, #0x0 + mov r2, r1 + bl WM_SetPortCallback + add r1, r4, #0x800 + mov r0, #0x0 + strh r0, [r1, #0xe] + strh r0, [r1, #0x1c] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_StartDataSharing +WM_StartDataSharing: ; 0x020DAAC0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r10, r0 + mov r7, r1 + mov r6, r2 + mov r0, #0x2 + mov r1, #0x9 + mov r2, #0xa + mov r5, r3 + mov r9, #0x1 + bl WMi_CheckStateEx +_020DAAEC: ; 0x020DAAEC + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r11,lr} + bxne lr + cmp r10, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + cmp r7, #0x10 + addcs sp, sp, #0xc + movcs r0, #0x6 + ldmcsia sp!, {r4-r11,lr} + bxcs lr + cmp r6, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + bl WM_GetAID + movs r4, r0 + bne _020DAB4C + bl WMi_GetMPReadyAIDs + mov r9, r0 +_020DAB4C: + mov r1, r10 + mov r0, #0x0 + mov r2, #0x820 + bl MIi_CpuClearFast + add r0, r10, #0x800 + mov r2, #0x0 + strh r2, [r0, #0x8] + strh r2, [r0, #0xa] + strh r2, [r0, #0xc] + strh r5, [r0, #0x10] + strh r7, [r0, #0x16] + strh r2, [r0, #0xe] + mov r0, #0x1 + ldr r1, [sp, #0x30] + orr r0, r6, r0, lsl r4 + cmp r1, #0x0 + mov r0, r0, lsl #0x10 + movne r2, #0x1 + add r1, r10, #0x800 + strh r2, [r1, #0x18] + mov r0, r0, lsr #0x10 + strh r0, [r1, #0xe] + bl FUN_020DDC5C + add r3, r10, #0x800 + mul r1, r5, r0 + strh r0, [r3, #0x12] + strh r1, [r3, #0x14] + ldrh r0, [r3, #0x14] + cmp r0, #0x1fc + movhi r0, #0x0 + strhih r0, [r3, #0xe] + addhi sp, sp, #0xc + movhi r0, #0x6 + ldmhiia sp!, {r4-r11,lr} + bxhi lr + add r0, r0, #0x4 + strh r0, [r3, #0x14] + mov r0, #0x1 + strh r0, [r3, #0x1c] + cmp r4, #0x0 + bne _020DAD04 + orr r2, r9, #0x1 + mov r4, #0x0 +_020DABF8: + ldrh r1, [r3, #0xe] + mov r0, r4, lsl #0x9 + add r4, r4, #0x1 + and r1, r1, r2 + strh r1, [r10, r0] + cmp r4, #0x4 + blt _020DABF8 + ldr r1, _020DAD2C ; =WmDataSharingReceiveCallback_Parent + mov r0, r7 + mov r2, r10 + bl WM_SetPortCallback + mov r8, r10 + mov r7, #0x0 + mov r4, #0x2 + mov r6, #0x1 + ldr fp, _020DAD30 ; =WmDataSharingSetDataCallback + ldr r5, _020DAD34 ; =0x0000FFFF + b _020DACE4 +_020DAC40: + add r12, r10, #0x800 + ldrh r2, [r12, #0x8] + mov r0, r11 + mov r1, r10 + add r2, r2, #0x1 + and r2, r2, #0x3 + strh r2, [r12, #0x8] + ldrh r3, [r12, #0xe] + mov r2, r8 + and r3, r3, r9 + mov r3, r3, lsl #0x10 + mov r3, r3, lsr #0x10 + str r3, [sp, #0x0] + ldrh r3, [r12, #0x16] + str r3, [sp, #0x4] + str r6, [sp, #0x8] + ldrh r3, [r12, #0x14] + bl WM_SetMPDataToPortEx + cmp r0, #0x7 + bne _020DACB4 + add r0, r10, r7, lsl #0x1 + add r0, r0, #0x800 + strh r5, [r0, #0x0] + add r0, r10, #0x800 + ldrh r1, [r0, #0xa] + add r1, r1, #0x1 + and r1, r1, #0x3 + strh r1, [r0, #0xa] + b _020DACDC +_020DACB4: + cmp r0, #0x0 + beq _020DACDC + cmp r0, #0x2 + addne r0, r10, #0x800 + movne r1, #0x5 + strneh r1, [r0, #0x1c] + addne sp, sp, #0xc + movne r0, #0x1 + ldmneia sp!, {r4-r11,lr} + bxne lr +_020DACDC: + add r8, r8, #0x200 + add r7, r7, #0x1 +_020DACE4: + add r0, r10, #0x800 + ldrh r0, [r0, #0x18] + cmp r0, #0x1 + movne r0, r6 + moveq r0, r4 + cmp r7, r0 + blt _020DAC40 + b _020DAD1C +_020DAD04: + ldr r1, _020DAD38 ; =WmDataSharingReceiveCallback_Child + mov r4, #0x3 + mov r0, r7 + mov r2, r10 + strh r4, [r3, #0xa] + bl WM_SetPortCallback +_020DAD1C: + mov r0, #0x0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020DAD2C: .word WmDataSharingReceiveCallback_Parent +_020DAD30: .word WmDataSharingSetDataCallback +_020DAD34: .word 0x0000FFFF +_020DAD38: .word WmDataSharingReceiveCallback_Child + + arm_func_start WM_EndKeySharing +WM_EndKeySharing: ; 0x020DAD3C + ldr ip, _020DAD44 ; =WM_EndDataSharing + bx r12 + .balign 4 +_020DAD44: .word WM_EndDataSharing + + arm_func_start WM_StartKeySharing +WM_StartKeySharing: ; 0x020DAD48 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020DAD70 ; =0x0000FFFF + mov r12, #0x1 + mov r3, #0x2 + str r12, [sp, #0x0] + bl WM_StartDataSharing + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DAD70: .word 0x0000FFFF + + arm_func_start WM_SetEntry +WM_SetEntry: ; 0x020DAD74 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x9 + bl WMi_CheckStateEx +_020DAD94: ; 0x020DAD94 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + mov r1, r5 + mov r0, #0x21 + bl WMi_SetCallbackTable + mov r2, r4 + mov r0, #0x21 + mov r1, #0x1 + bl WMi_SendCommand +_020DADC0: ; 0x020DADC0 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_MeasureChannel +WM_MeasureChannel: ; 0x020DADD4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl WMi_GetSystemWork + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020DADFC: ; 0x020DADFC + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r7,lr} + bxne lr + mov r1, r7 + mov r0, #0x1e + bl WMi_SetCallbackTable + ldrh r2, [sp, #0x20] + mov r3, #0x1e + add r0, sp, #0x0 + mov r1, #0xa + strh r3, [sp, #0x0] + strh r6, [sp, #0x2] + strh r5, [sp, #0x4] + strh r4, [sp, #0x6] + strh r2, [sp, #0x8] + bl WMi_SendCommandDirect +_020DAE40: ; 0x020DAE40 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WM_SetLifeTime +WM_SetLifeTime: ; 0x020DAE54 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl WMi_CheckIdle +_020DAE70: ; 0x020DAE70 + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r7,lr} + bxne lr + mov r1, r7 + mov r0, #0x1d + bl WMi_SetCallbackTable + ldrh r12, [sp, #0x20] + str r4, [sp, #0x0] + mov r2, r6 + mov r3, r5 + mov r0, #0x1d + mov r1, #0x4 + str r12, [sp, #0x4] + bl WMi_SendCommand +_020DAEAC: ; 0x020DAEAC + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WM_SetBeaconIndication +WM_SetBeaconIndication: ; 0x020DAEC0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 +_020DAECC: ; 0x020DAECC + mov r4, r1 + bl WMi_CheckIdle +_020DAED4: ; 0x020DAED4 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r4, #0x0 + beq _020DAF00 + cmp r4, #0x1 + addne sp, sp, #0x4 + movne r0, #0x6 + ldmneia sp!, {r4-r5,lr} + bxne lr +_020DAF00: + mov r1, r5 + mov r0, #0x19 + bl WMi_SetCallbackTable + mov r2, r4 + mov r0, #0x19 + mov r1, #0x1 + bl WMi_SendCommand +_020DAF1C: ; 0x020DAF1C + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_SetGameInfo +WM_SetGameInfo: ; 0x020DAF30 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x9 + mov r4, r3 + bl WMi_CheckStateEx +_020DAF58: ; 0x020DAF58 + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r7,lr} + bxne lr + cmp r6, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + cmp r5, #0x70 + addhi sp, sp, #0xc + movhi r0, #0x6 + ldmhiia sp!, {r4-r7,lr} + bxhi lr + ldr r1, _020DAFF4 ; =0x021D68C0 + mov r0, r6 + mov r2, r5 + bl MIi_CpuCopy16 + ldr r0, _020DAFF4 ; =0x021D68C0 + mov r1, r5 + bl DC_StoreRange + mov r1, r7 + mov r0, #0x18 + bl WMi_SetCallbackTable + ldrh r0, [sp, #0x20] + str r4, [sp, #0x0] + ldrb r1, [sp, #0x24] + str r0, [sp, #0x4] + ldr r2, _020DAFF4 ; =0x021D68C0 + str r1, [sp, #0x8] + mov r3, r5 + mov r0, #0x18 + mov r1, #0x5 + bl WMi_SendCommand +_020DAFE0: ; 0x020DAFE0 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DAFF4: .word 0x021D68C0 + + arm_func_start WM_SetWEPKeyEx +WM_SetWEPKeyEx: ; 0x020DAFF8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl WMi_CheckIdle +_020DB014: ; 0x020DB014 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + cmp r6, #0x3 + addhi sp, sp, #0x4 + movhi r0, #0x6 + ldmhiia sp!, {r4-r7,lr} + bxhi lr + cmp r6, #0x0 + beq _020DB060 + cmp r4, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x6 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r4 + mov r1, #0x50 + bl DC_StoreRange +_020DB060: + mov r1, r7 + mov r0, #0x27 + bl WMi_SetCallbackTable + mov r2, r6 + mov r3, r4 + mov r0, #0x27 + mov r1, #0x3 + str r5, [sp, #0x0] + bl WMi_SendCommand +_020DB084: ; 0x020DB084 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WM_SetWEPKeyEx2 +WM_SetWEPKeyEx2: ; 0x020DB098 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl WMi_CheckIdle +_020DB0AC: ; 0x020DB0AC + cmp r0, #0x0 + ldmneia sp!, {r4-r6,lr} + bxne lr + cmp r5, #0x3 + movhi r0, #0x6 + ldmhiia sp!, {r4-r6,lr} + bxhi lr + cmp r5, #0x0 + beq _020DB0EC + cmp r4, #0x0 + moveq r0, #0x6 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r0, r4 + mov r1, #0x50 + bl DC_StoreRange +_020DB0EC: + mov r1, r6 + mov r0, #0x14 + bl WMi_SetCallbackTable + mov r2, r5 + mov r3, r4 + mov r0, #0x14 + mov r1, #0x2 + bl WMi_SendCommand +_020DB10C: ; 0x020DB10C + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4-r6,lr} + bx lr diff --git a/asm/rom2dism.s b/asm/rom2dism.s new file mode 100644 index 00000000..051a235d --- /dev/null +++ b/asm/rom2dism.s @@ -0,0 +1,16534 @@ + .include "asm/macros.inc" + .include "global.inc" + + ; TODO: disassemble the rest of the .byte s + + .text + + arm_func_start CTRDG_CheckEnabled +CTRDG_CheckEnabled: ; 0x020DB11C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CTRDG_IsOptionCartridge +_020DB128: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12 + .byte 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x1C, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0xBF, 0xC9, 0xFF, 0xEB + .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CTRDG_Enable +CTRDG_Enable: ; 0x020DB15C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020DB1AC ; =0x021D6940 + mov r4, r0 + str r5, [r1, #0x0] + bl CTRDG_IsOptionCartridge +_020DB17C: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x04, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x55, 0xE3, 0x01, 0x1A, 0xA0, 0x13, 0x05, 0x1A, 0xA0, 0x03 + .byte 0x0F, 0x0A, 0xA0, 0xE3, 0x0F, 0xC6, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x60, 0xC8, 0xFF, 0xEB + .byte 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020DB1AC: .word 0x021D6940 + + arm_func_start CTRDG_IsEnabled +CTRDG_IsEnabled: ; 0x020DB1B0 + ldr r0, _020DB1BC ; =0x021D6940 + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020DB1BC: .word 0x021D6940 + + arm_func_start CTRDGi_AccessCommon +CTRDGi_AccessCommon: ; 0x020DB1C0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl CTRDG_IsExisting +_020DB1DC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0x02, 0x00, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 + .byte 0xC9, 0xFF, 0xFF, 0xEB, 0xC0, 0x00, 0x9F, 0xE5, 0xB2, 0x00, 0xD0, 0xE1, 0x01, 0xBC, 0xFF, 0xEB + .byte 0x21, 0x00, 0x54, 0xE3, 0x0D, 0x00, 0x00, 0x8A, 0x21, 0x00, 0x54, 0xE3, 0x17, 0x00, 0x00, 0x2A + .byte 0x11, 0x00, 0x54, 0xE3, 0x06, 0x00, 0x00, 0x8A, 0x10, 0x00, 0x54, 0xE3, 0x1C, 0x00, 0x00, 0x3A + .byte 0x10, 0x00, 0x54, 0xE3, 0x19, 0x00, 0x00, 0x0A, 0x11, 0x00, 0x54, 0xE3, 0x0B, 0x00, 0x00, 0x0A + .byte 0x17, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x54, 0xE3, 0xB0, 0x60, 0xC7, 0x01, 0x14, 0x00, 0x00, 0xEA + .byte 0x40, 0x00, 0x54, 0xE3, 0x02, 0x00, 0x00, 0x8A, 0x40, 0x00, 0x54, 0xE3, 0x00, 0x60, 0x87, 0x05 + .byte 0x0F, 0x00, 0x00, 0xEA, 0x41, 0x00, 0x54, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0x0C, 0x00, 0x00, 0xEA + .byte 0x00, 0x00, 0x55, 0xE3, 0x00, 0x00, 0xD7, 0x15, 0x00, 0x00, 0xC5, 0x15, 0x08, 0x00, 0x00, 0xEA + .byte 0x00, 0x00, 0x55, 0xE3, 0xB0, 0x00, 0xD7, 0x11, 0xB0, 0x00, 0xC5, 0x11, 0x04, 0x00, 0x00, 0xEA + .byte 0x00, 0x00, 0x55, 0xE3, 0x00, 0x00, 0x97, 0x15, 0x00, 0x00, 0x85, 0x15, 0x00, 0x00, 0x00, 0xEA + .byte 0x00, 0x60, 0xC7, 0xE5, 0x20, 0x00, 0x9F, 0xE5, 0xB2, 0x00, 0xD0, 0xE1, 0x7C, 0xBB, 0xFF, 0xEB + .byte 0xF9, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x13, 0x00, 0x00, 0xA0, 0x03 + .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x44, 0x69, 0x1D, 0x02 + + arm_func_start CTRDG_Read32 +CTRDG_Read32: ; 0x020DB2C0 + ldr ip, _020DB2D4 ; =CTRDGi_AccessCommon + mov r2, r1 + mov r1, #0x0 + mov r3, #0x41 + bx r12 + .balign 4 +_020DB2D4: .word CTRDGi_AccessCommon + + arm_func_start CTRDGi_CopyCommon +CTRDGi_CopyCommon: ; 0x020DB2D8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl CTRDG_IsExisting +_020DB2F4: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x00, 0x00, 0xA0, 0x03 + .byte 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x83, 0xFF, 0xFF, 0xEB, 0x18, 0x01, 0x9F, 0xE5 + .byte 0xB2, 0x00, 0xD0, 0xE1, 0xBB, 0xBB, 0xFF, 0xEB, 0x18, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x10, 0xE2 + .byte 0x04, 0x00, 0x00, 0x1A, 0x07, 0x00, 0xA0, 0xE1, 0x9A, 0xC9, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1 + .byte 0x04, 0x10, 0xA0, 0xE1, 0x88, 0xC3, 0xFF, 0xEB, 0x18, 0x00, 0x9D, 0xE5, 0x11, 0x00, 0x50, 0xE3 + .byte 0x09, 0x00, 0x00, 0x8A, 0x10, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x3A, 0x10, 0x00, 0x50, 0xE3 + .byte 0x0D, 0x00, 0x00, 0x0A, 0x11, 0x00, 0x50, 0xE3, 0x17, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x00, 0xEA + .byte 0x01, 0x00, 0x50, 0xE3, 0x1E, 0x00, 0x00, 0x0A, 0x25, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x50, 0xE3 + .byte 0x02, 0x00, 0x00, 0x8A, 0x20, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x0A, 0x20, 0x00, 0x00, 0xEA + .byte 0x21, 0x00, 0x50, 0xE3, 0x11, 0x00, 0x00, 0x0A, 0x1D, 0x00, 0x00, 0xEA, 0x07, 0x00, 0xA0, 0xE1 + .byte 0x06, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x04, 0x30, 0xA0, 0xE1, 0x1A, 0xCA, 0xFF, 0xEB + .byte 0x17, 0x00, 0x00, 0xEA, 0x07, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1 + .byte 0x04, 0x30, 0xA0, 0xE1, 0x32, 0xCA, 0xFF, 0xEB, 0x11, 0x00, 0x00, 0xEA, 0x06, 0x00, 0xA0, 0xE1 + .byte 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x84, 0xCB, 0xFF, 0xEB, 0x0C, 0x00, 0x00, 0xEA + .byte 0x06, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x8B, 0xCB, 0xFF, 0xEB + .byte 0x07, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x54, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x04, 0x00, 0x00, 0x9A + .byte 0x01, 0x00, 0xD6, 0xE4, 0x01, 0x10, 0x81, 0xE2, 0x04, 0x00, 0x51, 0xE1, 0x01, 0x00, 0xC5, 0xE4 + .byte 0xFA, 0xFF, 0xFF, 0x3A, 0x20, 0x00, 0x9F, 0xE5, 0xB2, 0x00, 0xD0, 0xE1, 0x20, 0xBB, 0xFF, 0xEB + .byte 0x9D, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x13, 0x00, 0x00, 0xA0, 0x03 + .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x44, 0x69, 0x1D, 0x02 + + arm_func_start CTRDG_CpuCopy32 +CTRDG_CpuCopy32: ; 0x020DB430 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r3, r2 + mov r12, #0x21 + mov r1, r0 + mov r2, lr + mov r0, #0x0 + str r12, [sp, #0x0] + bl CTRDGi_CopyCommon + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_CpuCopy16 +CTRDG_CpuCopy16: ; 0x020DB464 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r3, r2 + mov r12, #0x11 + mov r1, r0 + mov r2, lr + mov r0, #0x0 + str r12, [sp, #0x0] + bl CTRDGi_CopyCommon + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_CpuCopy8 +CTRDG_CpuCopy8: ; 0x020DB498 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r3, r2 + cmp lr, #0x8000000 + blo _020DB4DC + ldr r2, _020DB500 ; =0x0A010000 + cmp lr, r2 + bhs _020DB4DC + mov r12, #0x1 + mov r2, r0 + mov r0, #0x0 + str r12, [sp, #0x0] + bl CTRDGi_CopyCommon + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020DB4DC: + mov r12, #0x1 + mov r1, r0 + mov r2, lr + mov r0, #0x0 + str r12, [sp, #0x0] + bl CTRDGi_CopyCommon + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DB500: .word 0x0A010000 + + arm_func_start CTRDGi_SendtoPxi +CTRDGi_SendtoPxi: ; 0x020DB504 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r1, r7 + mov r0, #0xd + mov r2, #0x0 + bl PXI_SendWordByFifo +_020DB520: + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 + .byte 0x01, 0x60, 0xA0, 0xE3, 0x0D, 0x50, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3, 0x06, 0x00, 0xA0, 0xE1 + .byte 0x2A, 0x94, 0xFC, 0xFB, 0x05, 0x00, 0xA0, 0xE1, 0x07, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1 + .byte 0xE2, 0xD1, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0xF7, 0xFF, 0xFF, 0x1A, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CTRDGi_UnlockByProcessor +CTRDGi_UnlockByProcessor: ; 0x020DB568 + stmdb sp!, {r4,lr} + mov r4, r1 + ldr r1, [r4, #0x0] + cmp r1, #0x0 + bne _020DB580 + bl OS_UnlockCartridge +_020DB580: + ldr r0, [r4, #0x4] + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CTRDGi_LockByProcessor +CTRDGi_LockByProcessor: ; 0x020DB590 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + ldr r5, _020DB60C ; =0x027FFFE8 + mov r4, #0x1 + bl OS_DisableInterrupts + str r0, [r6, #0x4] + mov r0, r5 + bl OS_ReadOwnerOfLockWord + and r0, r0, #0x40 + str r0, [r6, #0x0] + ldr r0, [r6, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + mov r0, r7 + bl OS_TryLockCartridge +_020DB5DC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x04, 0x00, 0x96, 0xE5 + .byte 0x4B, 0xC7, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0xFC, 0x93, 0xFC, 0xFB, 0xE9, 0xFF, 0xFF, 0xEA + .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020DB60C: .word 0x027FFFE8 + + arm_func_start CTRDGi_RestoreAccessCycle +CTRDGi_RestoreAccessCycle: ; 0x020DB610 + ldr r3, _020DB640 ; =0x04000204 + ldr r2, [r0, #0x0] + ldrh r1, [r3, #0x0] + bic r1, r1, #0xc + orr r1, r1, r2, lsl #0x2 + strh r1, [r3, #0x0] + ldrh r1, [r3, #0x0] + ldr r2, [r0, #0x4] + bic r0, r1, #0x10 + orr r0, r0, r2, lsl #0x4 + strh r0, [r3, #0x0] + bx lr + .balign 4 +_020DB640: .word 0x04000204 + + arm_func_start CTRDGi_ChangeLatestAccessCycle +CTRDGi_ChangeLatestAccessCycle: ; 0x020DB644 + ldr r2, _020DB688 ; =0x04000204 + ldrh r1, [r2, #0x0] + and r1, r1, #0xc + mov r1, r1, asr #0x2 + str r1, [r0, #0x0] + ldrh r1, [r2, #0x0] + and r1, r1, #0x10 + mov r1, r1, asr #0x4 + str r1, [r0, #0x4] + ldrh r0, [r2, #0x0] + bic r0, r0, #0xc + orr r0, r0, #0xc + strh r0, [r2, #0x0] + ldrh r0, [r2, #0x0] + bic r0, r0, #0x10 + strh r0, [r2, #0x0] + bx lr + .balign 4 +_020DB688: .word 0x04000204 + + arm_func_start CTRDG_IsExisting +CTRDG_IsExisting: + stmdb sp!, {r4,lr} + sub sp, sp, #0x10 + ldr r2, _020DB798 ; =0x027FFC30 + ldr r0, _020DB79C ; =0x0000FFFF + ldrh r1, [r2, #0x0] + mov r4, #0x1 + cmp r1, r0 + addeq sp, sp, #0x10 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldrb r0, [r2, #0x5] + mov r0, r0, lsl #0x1e + mov r0, r0, lsr #0x1f + cmp r0, #0x1 + addeq sp, sp, #0x10 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r0, _020DB7A0 ; =0x021D6944 + add r1, sp, #0x0 + ldrh r0, [r0, #0x2] + bl CTRDGi_LockByProcessor + add r0, sp, #0x8 + bl CTRDGi_ChangeLatestAccessCycle + mov r0, #0x8000000 + ldrb r2, [r0, #0xb2] + cmp r2, #0x96 + bne _020DB714 + ldr r1, _020DB798 ; =0x027FFC30 + ldrh r0, [r0, #0xbe] + ldrh r1, [r1, #0x0] + cmp r1, r0 + bne _020DB75C +_020DB714: + cmp r2, #0x96 + beq _020DB734 + ldr r1, _020DB798 ; =0x027FFC30 + ldr r0, _020DB7A4 ; =0x0801FFFE + ldrh r1, [r1, #0x0] + ldrh r0, [r0, #0x0] + cmp r1, r0 + bne _020DB75C +_020DB734: + ldr r2, _020DB798 ; =0x027FFC30 + mov r0, #0x8000000 + ldr r1, [r2, #0x8] + ldr r0, [r0, #0xac] + cmp r1, r0 + beq _020DB770 + ldrb r0, [r2, #0x5] + mov r0, r0, lsl #0x1f + movs r0, r0, lsr #0x1f + beq _020DB770 +_020DB75C: + ldr r1, _020DB798 ; =0x027FFC30 + mov r4, #0x0 + ldrb r0, [r1, #0x5] + orr r0, r0, #0x2 + strb r0, [r1, #0x5] +_020DB770: + add r0, sp, #0x8 + bl CTRDGi_RestoreAccessCycle + ldr r0, _020DB7A0 ; =0x021D6944 + add r1, sp, #0x0 + ldrh r0, [r0, #0x2] + bl CTRDGi_UnlockByProcessor + mov r0, r4 + add sp, sp, #0x10 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020DB798: .word 0x027FFC30 +_020DB79C: .word 0x0000FFFF +_020DB7A0: .word 0x021D6944 +_020DB7A4: .word 0x0801FFFE + + arm_func_start CTRDG_IsPulledOut +CTRDG_IsPulledOut: ; 0x020DB7A8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020DB800 ; =0x027FFC30 + ldr r0, _020DB804 ; =0x0000FFFF + ldrh r1, [r2, #0x0] + cmp r1, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {lr} + bxeq lr + ldrb r0, [r2, #0x5] + mov r0, r0, lsl #0x1e + movs r0, r0, lsr #0x1f + bne _020DB7E4 + bl CTRDG_IsExisting +_020DB7E4: + ldr r0, _020DB800 ; =0x027FFC30 + ldrb r0, [r0, #0x5] + mov r0, r0, lsl #0x1e + mov r0, r0, lsr #0x1f + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DB800: .word 0x027FFC30 +_020DB804: .word 0x0000FFFF + + arm_func_start CTRDGi_GetAgbMakerCodeAtInit +CTRDGi_GetAgbMakerCodeAtInit: ; 0x020DB808 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl CTRDGi_IsAgbCartridgeAtInit +_020DB814: + .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x9F, 0x15, 0xB6, 0x40, 0xD0, 0x11 + .byte 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x30, 0xFC, 0x7F, 0x02 + + arm_func_start CTRDG_GetAgbMakerCode +CTRDG_GetAgbMakerCode: ; 0x020DB830 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl CTRDG_IsExisting +_020DB83C: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x01, 0x00, 0x00, 0x0A, 0xEF, 0xFF, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1 + .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CTRDGi_GetAgbGameCodeAtInit +CTRDGi_GetAgbGameCodeAtInit: ; 0x020DB858 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl CTRDGi_IsAgbCartridgeAtInit +_020DB864: + .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x9F, 0x15, 0x08, 0x40, 0x90, 0x15 + .byte 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x30, 0xFC, 0x7F, 0x02 + + arm_func_start CTRDG_GetAgbGameCode +CTRDG_GetAgbGameCode: ; 0x020DB880 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl CTRDG_IsExisting +_020DB88C: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x01, 0x00, 0x00, 0x0A, 0xEF, 0xFF, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1 + .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CTRDGi_IsAgbCartridgeAtInit +CTRDGi_IsAgbCartridgeAtInit: + ldr r0, _020DB8BC ; =0x027FFC30 + ldrb r0, [r0, #0x5] + mov r0, r0, lsl #0x1f + mov r0, r0, lsr #0x1f + bx lr + .balign 4 +_020DB8BC: .word 0x027FFC30 + + arm_func_start CTRDG_IsOptionCartridge +CTRDG_IsOptionCartridge: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CTRDG_IsExisting +_020DB8CC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x05, 0x00, 0x00, 0x0A, 0xF3, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02 + .byte 0x01, 0x00, 0xA0, 0x03, 0x00, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CTRDG_IsAgbCartridge +CTRDG_IsAgbCartridge: ; 0x020DB8FC + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CTRDG_IsExisting +_020DB908: + .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A + .byte 0xE4, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x01, 0x00, 0xA0, 0x13 + .byte 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CTRDGi_InitCommon +CTRDGi_InitCommon: ; 0x020DB938 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020DB970 ; =0x021D6944 + mov r3, #0x0 + ldr r2, _020DB974 ; =0x05000001 + add r0, sp, #0x0 + str r3, [sp, #0x0] + blx FUN_020002FE + bl OS_GetLockID + ldr r1, _020DB970 ; =0x021D6944 + strh r0, [r1, #0x2] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DB970: .word 0x021D6944 +_020DB974: .word 0x05000001 + + arm_func_start CTRDGi_CallbackForSetPhi +CTRDGi_CallbackForSetPhi: ; 0x020DB978 + ldr r0, _020DB988 ; =0x021D694C + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + .balign 4 +_020DB988: .word 0x021D694C + + arm_func_start CTRDG_TerminateForPulledOut +CTRDG_TerminateForPulledOut: ; 0x020DB98C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, #0x2 + bl CTRDGi_SendtoPxi + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_PulledOutCallback +CTRDGi_PulledOutCallback: ; 0x020DB9AC + stmdb sp!, {lr} + sub sp, sp, #0x4 + and r0, r1, #0x3f + cmp r0, #0x11 + bne _020DBA14 + ldr r0, _020DBA24 ; =0x021D6954 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r1, _020DBA28 ; =0x021D6958 + mov r0, #0x0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + beq _020DB9F0 + blx r1 +_020DB9F0: + cmp r0, #0x0 + beq _020DB9FC + bl CTRDG_TerminateForPulledOut +_020DB9FC: + ldr r0, _020DBA24 ; =0x021D6954 + mov r1, #0x1 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020DBA14: + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DBA24: .word 0x021D6954 +_020DBA28: .word 0x021D6958 + + arm_func_start CTRDGi_CallbackForInitModuleInfo +CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C + stmdb sp!, {lr} + sub sp, sp, #0x4 + and r0, r1, #0x3f + cmp r0, #0x1 + ldreq r0, _020DBA64 ; =0x021D6944 + moveq r1, #0x1 + streqh r1, [r0, #0x0] + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DBA64: .word 0x021D6944 + + arm_func_start CTRDGi_InitModuleInfo +CTRDGi_InitModuleInfo: ; 0x020DBA68 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x14 + ldr r0, _020DBC50 ; =0x021D6948 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addne sp, sp, #0x14 + ldmneia sp!, {r4-r7,lr} + bxne lr + ldr r1, _020DBC54 ; =0x04000300 + mov r2, #0x1 + str r2, [r0, #0x0] + ldrh r0, [r1, #0x0] + ands r0, r0, #0x1 + addeq sp, sp, #0x14 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, #0x40000 + bl OS_SetIrqMask + ldr r3, _020DBC58 ; =0x04000208 + mov r2, #0x1 + ldrh r4, [r3, #0x0] + ldr r1, _020DBC5C ; =0x021D6944 + mov r6, r0 + strh r2, [r3, #0x0] + ldrh r0, [r1, #0x2] + add r1, sp, #0x0 + bl CTRDGi_LockByProcessor + ldr r1, _020DBC60 ; =0x04000204 + add r0, sp, #0x8 + ldrh r1, [r1, #0x0] + and r1, r1, #0x8000 + mov r5, r1, asr #0xf + bl CTRDGi_ChangeLatestAccessCycle + ldr r3, _020DBC60 ; =0x04000204 + ldr r0, _020DBC64 ; =0x021D6960 + ldrh r2, [r3, #0x0] + add r0, r0, #0x80 + mov r1, #0x40 + bic r2, r2, #0x8000 + strh r2, [r3, #0x0] + bl DC_InvalidateRange + ldr r2, _020DBC64 ; =0x021D6960 + ldr r1, _020DBC68 ; =0x08000080 + mov r0, #0x1 + mov r3, #0x40 + add r2, r2, #0x80 + bl MI_DmaCopy16 + ldr r2, _020DBC60 ; =0x04000204 + add r0, sp, #0x8 + ldrh r1, [r2, #0x0] + bic r1, r1, #0x8000 + orr r1, r1, r5, lsl #0xf + strh r1, [r2, #0x0] + bl CTRDGi_RestoreAccessCycle + ldr r0, _020DBC5C ; =0x021D6944 + add r1, sp, #0x0 + ldrh r0, [r0, #0x2] + bl CTRDGi_UnlockByProcessor + ldr r0, _020DBC6C ; =0x027FFF9B + ldrb r0, [r0, #0x0] + cmp r0, #0x0 + bne _020DBB70 + ldr r0, _020DBC70 ; =0x027FFF9A + ldrb r0, [r0, #0x0] + cmp r0, #0x0 + bne _020DBBDC +_020DBB70: + ldr r2, _020DBC64 ; =0x021D6960 + ldr r0, _020DBC74 ; =0x027FFC30 + ldrh r1, [r2, #0xbe] + mov r3, #0x0 + strh r1, [r0, #0x0] +_020DBB84: + add r0, r2, r3 + ldrb r1, [r0, #0xb5] + add r0, r3, #0x2700000 + add r0, r0, #0xff000 + add r3, r3, #0x1 + strb r1, [r0, #0xC32] + cmp r3, #0x3 + blt _020DBB84 + ldrh r0, [r2, #0xb0] + ldr r1, _020DBC74 ; =0x027FFC30 + strh r0, [r1, #0x6] + ldr r0, [r2, #0xac] + str r0, [r1, #0x8] + bl CTRDG_IsExisting +_020DBBBC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x01, 0x20, 0xA0, 0x13, 0xA0, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0x03, 0x00, 0x20, 0xC1, 0xE5 + .byte 0x98, 0x00, 0x9F, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0xC0, 0xE5 +_020DBBDC: + ldr r0, _020DBC78 ; =0xFFFF0020 + ldr r1, _020DBC7C ; =0x021D6964 + mov r2, #0x9c + bl MIi_CpuCopy32 + bl DC_FlushAll + ldr r0, _020DBC64 ; =0x021D6960 + add r0, r0, #0xfe000000 + mov r0, r0, lsr #0x5 + mov r0, r0, lsl #0x6 + orr r0, r0, #0x1 + bl CTRDGi_SendtoPxi + ldr r5, _020DBC5C ; =0x021D6944 + ldrh r0, [r5, #0x0] + cmp r0, #0x1 + beq _020DBC30 + mov r7, #0x1 +_020DBC1C: + mov r0, r7 + blx FUN_020005F2 + ldrh r0, [r5, #0x0] + cmp r0, #0x1 + bne _020DBC1C +_020DBC30: + ldr r2, _020DBC58 ; =0x04000208 + mov r0, r6 + ldrh r1, [r2, #0x0] + strh r4, [r2, #0x0] + bl OS_SetIrqMask + add sp, sp, #0x14 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DBC50: .word 0x021D6948 +_020DBC54: .word 0x04000300 +_020DBC58: .word 0x04000208 +_020DBC5C: .word 0x021D6944 +_020DBC60: .word 0x04000204 +_020DBC64: .word 0x021D6960 +_020DBC68: .word 0x08000080 +_020DBC6C: .word 0x027FFF9B +_020DBC70: .word 0x027FFF9A +_020DBC74: .word 0x027FFC30 +_020DBC78: .word 0xFFFF0020 +_020DBC7C: .word 0x021D6964 + + arm_func_start CTRDG_Init +CTRDG_Init: ; 0x020DBC80 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020DBD34 ; =0x021D6950 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + mov r1, #0x1 + str r1, [r0, #0x0] + bl CTRDGi_InitCommon + ldr r0, _020DBD38 ; =0x021D6954 + mov r1, #0x0 + str r1, [r0, #0x0] + bl PXI_Init + mov r5, #0xd + mov r4, #0x1 + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady +_020DBCD0: + .byte 0x00, 0x00, 0x50, 0xE3, 0xFA, 0xFF, 0xFF, 0x0A, 0x5C, 0x10, 0x9F, 0xE5, 0x0D, 0x00, 0xA0, 0xE3 + .byte 0x35, 0xD0, 0xFF, 0xEB, 0x5F, 0xFF, 0xFF, 0xEB, 0x0D, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x31, 0xD0, 0xFF, 0xEB, 0x44, 0x10, 0x9F, 0xE5, 0x0D, 0x00, 0xA0, 0xE3, 0x2E, 0xD0, 0xFF, 0xEB + .byte 0x3C, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x38, 0x00, 0x9F, 0xE5, 0x00, 0x20, 0x81, 0xE5 + .byte 0xAD, 0x07, 0x00, 0xEB, 0x30, 0x10, 0x9F, 0xE5, 0x11, 0x00, 0xA0, 0xE3, 0x26, 0xD0, 0xFF, 0xEB + .byte 0x00, 0x00, 0xA0, 0xE3, 0x0C, 0xFD, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 +_020DBD34: .word 0x021D6950 +_020DBD38: .word 0x021D6954 +_020DBD3C: + .byte 0x2C, 0xBA, 0x0D, 0x02 + .byte 0xAC, 0xB9, 0x0D, 0x02, 0x58, 0x69, 0x1D, 0x02, 0x20, 0x6A, 0x1D, 0x02, 0x78, 0xB9, 0x0D, 0x02 + + arm_func_start CTRDG_IdentifyAgbBackup +CTRDG_IdentifyAgbBackup: ; 0x020DBD50 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + cmp r7, #0x1 + mov r0, #0x1 + bhi _020DBEAC + bl OS_GetLockID + ldr r1, _020DBED8 ; =0x021D6B0C + strh r0, [r1, #0x0] + ldrh r0, [r1, #0x0] + bl OS_LockCartridge + ldr r6, _020DBEDC ; =0x04000204 + ldr r1, _020DBEE0 ; =0x02103FE4 + ldrh r3, [r6, #0x0] + ldrh r2, [r6, #0x0] + ldr r0, _020DBEE4 ; =0x021D6B28 + and r4, r3, #0x3 + bic r2, r2, #0x3 + orr r2, r2, #0x3 + strh r2, [r6, #0x0] + str r1, [r0, #0x0] + bl CTRDGi_ReadFlashID + ldr r2, _020DBEDC ; =0x04000204 + mov r6, r0 + ldrh r1, [r2, #0x0] + cmp r7, #0x0 + ldreq r5, _020DBEE8 ; =0x02103FF4 + bic r1, r1, #0x3 + orr r1, r1, r4 + cmp r7, #0x1 + ldr r0, _020DBED8 ; =0x021D6B0C + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + ldreq r5, _020DBEEC ; =0x02103FE8 + bl OS_UnlockCartridge2 + ldr r2, [r5, #0x0] + mov r0, #0x1 + ldrh r1, [r2, #0x38] + cmp r1, #0x0 + beq _020DBE14 + and r3, r6, #0xff +_020DBDF4: + ldrh r1, [r2, #0x38] + cmp r3, r1 + moveq r0, #0x0 + beq _020DBE14 + ldr r2, [r5, #0x4]! + ldrh r1, [r2, #0x38] + cmp r1, #0x0 + bne _020DBDF4 +_020DBE14: + ldr r2, [r2, #0x0] + ldr r1, _020DBEF0 ; =0x021D6B14 + ldr r3, _020DBEF4 ; =0x021D6B34 + str r2, [r1, #0x0] + ldr r1, [r5, #0x0] + ldr r2, _020DBEF8 ; =0x021D6B2C + ldr r4, [r1, #0x4] + ldr r1, _020DBEFC ; =0x021D6B18 + str r4, [r3, #0x0] + ldr r3, [r5, #0x0] + ldr r6, _020DBF00 ; =0x021D6B1C + ldr r3, [r3, #0x8] + ldr r4, _020DBF04 ; =0x021D6B30 + str r3, [r2, #0x0] + ldr r2, [r5, #0x0] + ldr r3, _020DBF08 ; =0x021D6B24 + ldr r7, [r2, #0xc] + ldr r2, _020DBEE4 ; =0x021D6B28 + str r7, [r1, #0x0] + ldr r7, [r5, #0x0] + ldr r1, _020DBF0C ; =0x021D6B20 + ldr r7, [r7, #0x10] + add sp, sp, #0x4 + str r7, [r6, #0x0] + ldr r6, [r5, #0x0] + ldr r6, [r6, #0x14] + str r6, [r4, #0x0] + ldr r4, [r5, #0x0] + ldr r4, [r4, #0x18] + str r4, [r3, #0x0] + ldr r3, [r5, #0x0] + ldr r3, [r3, #0x1c] + str r3, [r2, #0x0] + ldr r2, [r5, #0x0] + add r2, r2, #0x20 + str r2, [r1, #0x0] + ldmia sp!, {r4-r7,lr} + bx lr +_020DBEAC: + cmp r7, #0x2 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + bl OS_GetLockID + ldr r1, _020DBF10 ; =0x021D6B4C + strh r0, [r1, #0x0] + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DBED8: .word 0x021D6B0C +_020DBEDC: .word 0x04000204 +_020DBEE0: .word 0x02103FE4 +_020DBEE4: .word 0x021D6B28 +_020DBEE8: .word 0x02103FF4 +_020DBEEC: .word 0x02103FE8 +_020DBEF0: .word 0x021D6B14 +_020DBEF4: .word 0x021D6B34 +_020DBEF8: .word 0x021D6B2C +_020DBEFC: .word 0x021D6B18 +_020DBF00: .word 0x021D6B1C +_020DBF04: .word 0x021D6B30 +_020DBF08: .word 0x021D6B24 +_020DBF0C: .word 0x021D6B20 +_020DBF10: .word 0x021D6B4C + + arm_func_start CTRDG_WriteAndVerifyAgbFlashAsync +CTRDG_WriteAndVerifyAgbFlashAsync: ; 0x020DBF14 + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + str r2, [sp, #0x18] + ldr r1, _020DBF44 ; =CTRDGi_WriteAndVerifyAgbFlashSectorCore + add r0, sp, #0x0 + mov r2, r3 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DBF44: .word CTRDGi_WriteAndVerifyAgbFlashSectorCore + + arm_func_start CTRDG_VerifyAgbFlash +CTRDG_VerifyAgbFlash: ; 0x020DBF48 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + str r2, [sp, #0x18] + bl CTRDGi_VerifyAgbFlashCore + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_WriteAgbFlashSector +CTRDG_WriteAgbFlashSector: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020DBF90 ; =0x021D6B14 + ldr r2, [r2, #0x0] + blx r2 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DBF90: .word 0x021D6B14 + + arm_func_start CTRDG_ReadAgbFlash +CTRDG_ReadAgbFlash: ; 0x020DBF94 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0x14] + str r2, [sp, #0x1c] + str r3, [sp, #0x18] + bl CTRDGi_ReadAgbFlashCore + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteAndVerifyAgbFlashSectorCore +CTRDGi_WriteAndVerifyAgbFlashSectorCore: ; 0x020DBFC0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x24 + mov r4, r0 + ldmia r4!, {r0-r3} + add r12, sp, #0x0 + stmia r12!, {r0-r3} + ldmia r4!, {r0-r3} + stmia r12!, {r0-r3} + ldr r0, [r4, #0x0] + mov r7, #0x0 + str r0, [r12, #0x0] + ldrh r6, [sp, #0x20] + ldr r5, [sp, #0xc] + ldr r4, [sp, #0x18] + mov r0, r6 + mov r1, r5 + bl CTRDG_WriteAgbFlashSector +_020DC004: + .byte 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x06, 0x00, 0xA0, 0xE1 + .byte 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0xCA, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x24, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0x10, 0x87, 0xE2 + .byte 0x01, 0x18, 0xA0, 0xE1, 0x21, 0x78, 0xA0, 0xE1, 0x03, 0x00, 0x57, 0xE3, 0xED, 0xFF, 0xFF, 0x3A + .byte 0x24, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start CTRDGi_VerifyAgbFlashCore +CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DC128 ; =0x021D6B0C + ldr r1, [r5, #0x0] + ldrh r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r6, [sp, #0x20] + ldr r5, [sp, #0xc] + ldr r4, [sp, #0x18] + bl OS_LockCartridge + ldr r3, _020DC12C ; =0x04000204 + ldr r0, _020DC130 ; =0x021D6B20 + ldrh r2, [r3, #0x0] + ldrh r1, [r3, #0x0] + and r7, r2, #0x3 + bic r1, r1, #0x3 + orr r1, r1, #0x3 + strh r1, [r3, #0x0] + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x20000 + bne _020DC0D4 + mov r0, r6, lsl #0xc + mov r0, r0, lsr #0x10 + bl CTRDGi_SetFlashBankMx + and r0, r6, #0xf + mov r0, r0, lsl #0x10 + mov r6, r0, lsr #0x10 +_020DC0D4: + ldr r1, _020DC130 ; =0x021D6B20 + mov r0, r5 + ldr r1, [r1, #0x0] + mov r2, r4 + ldrh r1, [r1, #0x8] + mov r1, r6, lsl r1 + add r1, r1, #0xa000000 + bl CTRDGi_VerifyFlashSectorCore + ldr r3, _020DC12C ; =0x04000204 + ldr r1, _020DC128 ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r7 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x24 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DC128: .word 0x021D6B0C +_020DC12C: .word 0x04000204 +_020DC130: .word 0x021D6B20 + + arm_func_start CTRDGi_VerifyFlashSectorCore +CTRDGi_VerifyFlashSectorCore: ; 0x020DC134 + cmp r2, #0x0 + sub r2, r2, #0x1 + beq _020DC160 +_020DC140: + ldrb r12, [r1], #0x1 + ldrb r3, [r0], #0x1 + cmp r12, r3 + subne r0, r1, #0x1 + bxne lr + cmp r2, #0x0 + sub r2, r2, #0x1 + bne _020DC140 +_020DC160: + mov r0, #0x0 + bx lr + + arm_func_start CTRDGi_ReadAgbFlashCore +CTRDGi_ReadAgbFlashCore: ; 0x020DC168 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x28 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DC25C ; =0x021D6B0C + ldr r1, [r5, #0x0] + ldrh r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r7, [sp, #0x20] + ldr r6, [sp, #0x14] + ldr r5, [sp, #0x1c] + ldr r4, [sp, #0x18] + bl OS_LockCartridge + ldr r3, _020DC260 ; =0x04000204 + ldr r0, _020DC264 ; =0x021D6B20 + ldrh r2, [r3, #0x0] + ldrh r1, [r3, #0x0] + and r8, r2, #0x3 + bic r1, r1, #0x3 + orr r1, r1, #0x3 + strh r1, [r3, #0x0] + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x20000 + bne _020DC1F4 + mov r0, r7, lsl #0xc + mov r0, r0, lsr #0x10 + bl CTRDGi_SetFlashBankMx + and r0, r7, #0xf + mov r0, r0, lsl #0x10 + mov r7, r0, lsr #0x10 +_020DC1F4: + ldr r0, _020DC264 ; =0x021D6B20 + cmp r4, #0x0 + ldr r0, [r0, #0x0] + sub r4, r4, #0x1 + ldrh r0, [r0, #0x8] + mov r0, r7, lsl r0 + add r0, r0, #0xa000000 + add r1, r6, r0 + beq _020DC22C +_020DC218: + ldrb r0, [r1], #0x1 + cmp r4, #0x0 + sub r4, r4, #0x1 + strb r0, [r5], #0x1 + bne _020DC218 +_020DC22C: + ldr r2, _020DC260 ; =0x04000204 + ldr r0, _020DC25C ; =0x021D6B0C + ldrh r1, [r2, #0x0] + bic r1, r1, #0x3 + orr r1, r1, r8 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, #0x0 + add sp, sp, #0x28 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020DC25C: .word 0x021D6B0C +_020DC260: .word 0x04000204 +_020DC264: .word 0x021D6B20 + + arm_func_start CTRDGi_PollingSR1MCOMMON +CTRDGi_PollingSR1MCOMMON: ; 0x020DC268 + stmdb sp!, {r4-r8,lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, #0x0 + bl StartFlashTimer + ldr r4, _020DC318 ; =0x021D6B10 +_020DC284: + bl CheckFlashTimer + mov r0, r7 + bl CTRDGi_ReadSrFunc + cmp r0, r6 + beq _020DC300 + ands r0, r0, #0x20 + beq _020DC2CC + mov r0, r7 + bl CTRDGi_ReadSrFunc +_020DC2A8: + .byte 0x00, 0x00, 0x56, 0xE1, 0x13, 0x00, 0x00, 0x0A + .byte 0x0A, 0x0A, 0x88, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x5C, 0x10, 0x9F, 0xE5, 0xF0, 0x20, 0xA0, 0xE3 + .byte 0x00, 0x20, 0xC1, 0xE5, 0x20, 0x58, 0xA0, 0xE1, 0x0C, 0x00, 0x00, 0xEA +_020DC2CC: + ldrh r0, [r4, #0x0] + cmp r0, #0x0 + beq _020DC284 + mov r0, r7 + bl CTRDGi_ReadSrFunc +_020DC2E0: + .byte 0x00, 0x00, 0x56, 0xE1, 0x05, 0x00, 0x00, 0x0A, 0x03, 0x09, 0x88, 0xE3, 0x00, 0x08, 0xA0, 0xE1 + .byte 0x24, 0x10, 0x9F, 0xE5, 0xF0, 0x20, 0xA0, 0xE3, 0x00, 0x20, 0xC1, 0xE5, 0x20, 0x58, 0xA0, 0xE1 +_020DC300: + bl CTRDG_IsExisting +_020DC304: + .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x5A, 0xA0, 0x03, 0x05, 0x00, 0xA0, 0xE1 + .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020DC318: .word 0x021D6B10 +_020DC31C: + .byte 0x55, 0x55, 0x00, 0x0A + + arm_func_start CTRDGi_PollingSR512kCOMMON +CTRDGi_PollingSR512kCOMMON: ; 0x020DC320 + stmdb sp!, {r4-r8,lr} + mov r4, r0 + mov r8, r1 + mov r7, r2 + mov r6, #0x0 + bl StartFlashTimer + ldr r5, _020DC3A8 ; =0x021D6B10 +_020DC33C: + mov r0, r8 + bl CTRDGi_ReadSrFunc + cmp r0, r7 + beq _020DC390 + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + beq _020DC33C + mov r0, r8 + bl CTRDGi_ReadSrFunc +_020DC360: + .byte 0x00, 0x00, 0x57, 0xE1, 0x09, 0x00, 0x00, 0x0A, 0x3C, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5 + .byte 0xB8, 0x01, 0xD0, 0xE1, 0xC2, 0x00, 0x50, 0xE3, 0x30, 0x00, 0x9F, 0x05, 0xF0, 0x10, 0xA0, 0x03 + .byte 0x00, 0x10, 0xC0, 0x05, 0x03, 0x09, 0x84, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x68, 0xA0, 0xE1 +_020DC390: + bl CTRDG_IsExisting +_020DC394: + .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x6A, 0xA0, 0x03, 0x06, 0x00, 0xA0, 0xE1 + .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020DC3A8: .word 0x021D6B10 +_020DC3AC: + .byte 0x20, 0x6B, 0x1D, 0x02 + .byte 0x55, 0x55, 0x00, 0x0A + + arm_func_start CTRDGi_ReadSrFunc +CTRDGi_ReadSrFunc: + ldrb r0, [r0, #0x0] + bx lr + + arm_func_start CheckFlashTimer +CheckFlashTimer: ; 0x020DC3BC + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_GetTick + ldr r3, _020DC420 ; =0x021D6B44 + ldr r2, _020DC424 ; =0x000082EA + ldr r12, [r3, #0x0] + ldr r3, [r3, #0x4] + subs r12, r0, r12 + sbc r0, r1, r3 + mov r1, r0, lsl #0x6 + orr r1, r1, r12, lsr #0x1a + mov r0, r12, lsl #0x6 + mov r3, #0x0 + bl _ll_udiv + ldr r2, _020DC428 ; =0x021D6B3C + ldr r3, [r2, #0x4] + ldr r2, [r2, #0x0] + cmp r3, r1 + cmpeq r2, r0 + ldrls r0, _020DC42C ; =0x021D6B10 + movls r1, #0x1 + strlsh r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC420: .word 0x021D6B44 +_020DC424: .word 0x000082EA +_020DC428: .word 0x021D6B3C +_020DC42C: .word 0x021D6B10 + + arm_func_start StartFlashTimer +StartFlashTimer: ; 0x020DC430 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020DC47C ; =0x021D6B28 + ldr r2, _020DC480 ; =0x021D6B10 + mov r3, #0x0 + ldr r1, [r1, #0x0] + strh r3, [r2, #0x0] + mov r0, r0, lsl #0x1 + ldrh r1, [r1, r0] + ldr r0, _020DC484 ; =0x021D6B3C + str r1, [r0, #0x0] + str r3, [r0, #0x4] + bl OS_GetTick + ldr r2, _020DC488 ; =0x021D6B44 + str r0, [r2, #0x0] + str r1, [r2, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC47C: .word 0x021D6B28 +_020DC480: .word 0x021D6B10 +_020DC484: .word 0x021D6B3C +_020DC488: .word 0x021D6B44 + + arm_func_start CTRDGi_ReadFlashID +CTRDGi_ReadFlashID: ; 0x020DC48C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r5, _020DC590 ; =0x04000208 + mov r0, #0x0 + ldrh r2, [r5, #0x0] + ldr r1, _020DC594 ; =0x021D6B38 + ldr r4, _020DC598 ; =0x0A005555 + strh r0, [r5, #0x0] + str r2, [r1, #0x0] + mov r3, #0xaa + ldr r2, _020DC59C ; =0x0A002AAA + strb r3, [r4, #0x0] + mov r3, #0x55 + strb r3, [r2, #0x0] + mov r2, #0x90 + strb r2, [r4, #0x0] + ldrh r2, [r5, #0x0] + ldr r1, [r1, #0x0] + strh r1, [r5, #0x0] + bl StartFlashTimer + ldr r4, _020DC5A0 ; =0x021D6B10 + ldrh r0, [r4, #0x0] + cmp r0, #0x0 + bne _020DC4FC +_020DC4EC: + bl CheckFlashTimer + ldrh r0, [r4, #0x0] + cmp r0, #0x0 + beq _020DC4EC +_020DC4FC: + ldr r0, _020DC5A4 ; =0x0A000001 + bl CTRDGi_ReadSrFunc + mov r4, r0, lsl #0x18 + mov r0, #0xa000000 + bl CTRDGi_ReadSrFunc + ldr ip, _020DC590 ; =0x04000208 + orr r4, r0, r4, lsr #0x10 + ldrh r2, [r12, #0x0] + mov r0, #0x0 + ldr r1, _020DC594 ; =0x021D6B38 + strh r0, [r12, #0x0] + ldr r5, _020DC598 ; =0x0A005555 + str r2, [r1, #0x0] + mov r3, #0xaa + ldr r2, _020DC59C ; =0x0A002AAA + strb r3, [r5, #0x0] + mov r3, #0x55 + strb r3, [r2, #0x0] + mov r2, #0xf0 + strb r2, [r5, #0x0] + strb r2, [r5, #0x0] + ldrh r2, [r12, #0x0] + ldr r1, [r1, #0x0] + strh r1, [r12, #0x0] + bl StartFlashTimer + ldr r5, _020DC5A0 ; =0x021D6B10 + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + bne _020DC580 +_020DC570: + bl CheckFlashTimer + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + beq _020DC570 +_020DC580: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DC590: .word 0x04000208 +_020DC594: .word 0x021D6B38 +_020DC598: .word 0x0A005555 +_020DC59C: .word 0x0A002AAA +_020DC5A0: .word 0x021D6B10 +_020DC5A4: .word 0x0A000001 + + arm_func_start CTRDGi_SetFlashBankMx +CTRDGi_SetFlashBankMx: ; 0x020DC5A8 + ldr r3, _020DC5D4 ; =0x0A005555 + mov r2, #0xaa + ldr r1, _020DC5D8 ; =0x0A002AAA + strb r2, [r3, #0x0] + mov r2, #0x55 + strb r2, [r1, #0x0] + mov r1, #0xb0 + strb r1, [r3, #0x0] + mov r1, #0xa000000 + strb r0, [r1, #0x0] + bx lr + .balign 4 +_020DC5D4: .word 0x0A005555 +_020DC5D8: .word 0x0A002AAA + + arm_func_start CTRDGi_WriteFlashSectorAsyncAT +CTRDGi_WriteFlashSectorAsyncAT: ; 0x020DC5DC + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DC604 ; =CTRDGi_WriteFlashSectorCoreAT + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC604: .word CTRDGi_WriteFlashSectorCoreAT + + arm_func_start CTRDGi_EraseFlashSectorAsyncAT +CTRDGi_EraseFlashSectorAsyncAT: ; 0x020DC608 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov r2, r1 + strh r0, [sp, #0x20] + ldr r1, _020DC630 ; =CTRDGi_EraseFlashSectorCoreAT + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC630: .word CTRDGi_EraseFlashSectorCoreAT + + arm_func_start CTRDGi_WriteFlashSectorAT +CTRDGi_WriteFlashSectorAT: ; 0x020DC634 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlashSectorCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashSectorAT +CTRDGi_EraseFlashSectorAT: + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + bl CTRDGi_EraseFlashSectorCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteFlash4KBAsyncAT +CTRDGi_WriteFlash4KBAsyncAT: ; 0x020DC688 + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DC6B0 ; =CTRDGi_WriteFlash4KBCoreAT + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC6B0: .word CTRDGi_WriteFlash4KBCoreAT + + arm_func_start CTRDGi_EraseFlash4KBAsyncAT +CTRDGi_EraseFlash4KBAsyncAT: ; 0x020DC6B4 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov r2, r1 + strh r0, [sp, #0x20] + ldr r1, _020DC6DC ; =CTRDGi_EraseFlash4KBCoreAT + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC6DC: .word CTRDGi_EraseFlash4KBCoreAT + + arm_func_start CTRDGi_EraseFlashChipAsyncAT +CTRDGi_EraseFlashChipAsyncAT: ; 0x020DC6E0 + stmdb sp!, {lr} + sub sp, sp, #0x24 + ldr r1, _020DC704 ; =CTRDGi_EraseFlashChipCoreAT + mov r2, r0 + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC704: .word CTRDGi_EraseFlashChipCoreAT + + arm_func_start CTRDGi_WriteFlash4KBAT +CTRDGi_WriteFlash4KBAT: ; 0x020DC708 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlash4KBCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlash4KBAT +CTRDGi_EraseFlash4KBAT: ; 0x020DC734 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + bl CTRDGi_EraseFlash4KBCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashChipAT +CTRDGi_EraseFlashChipAT: ; 0x020DC75C + stmdb sp!, {lr} + sub sp, sp, #0x24 + add r0, sp, #0x0 + bl CTRDGi_EraseFlashChipCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteFlash4KBCoreAT +CTRDGi_WriteFlash4KBCoreAT: ; 0x020DC780 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + str r0, [r4, #0x0] + ldrh r0, [sp, #0x20] + ldr r7, [sp, #0xc] + cmp r0, #0x10 + addcs sp, sp, #0x24 + ldrhs r0, _020DC85C ; =0x000080FF + ldmcsia sp!, {r4-r9,lr} + bxcs lr + ldr r1, _020DC860 ; =0x0210400C + mov r0, r0, lsl #0x15 + ldr r1, [r1, #0x24] + ldr r4, _020DC864 ; =0x021D6B08 + mov r8, r0, lsr #0x10 + strh r1, [r4, #0x0] + ldrh r0, [r4, #0x0] + cmp r0, #0x0 + beq _020DC84C + ldr r0, _020DC868 ; =0x02104048 + ldr r6, [r0, #0x24] + mov r5, #0x2 +_020DC7F4: + mov r9, r5 +_020DC7F8: + mov r0, r8 + mov r1, r7 + bl CTRDGi_WriteFlashSectorAT + movs r12, r0 + beq _020DC81C + sub r0, r9, #0x1 + mov r0, r0, lsl #0x10 + movs r9, r0, lsr #0x10 + bne _020DC7F8 +_020DC81C: + cmp r12, #0x0 + bne _020DC84C + ldrh r1, [r4, #0x0] + add r0, r8, #0x1 + mov r0, r0, lsl #0x10 + sub r1, r1, r6 + strh r1, [r4, #0x0] + ldrh r1, [r4, #0x0] + add r7, r7, r6 + mov r8, r0, lsr #0x10 + cmp r1, #0x0 + bne _020DC7F4 +_020DC84C: + mov r0, r12 + add sp, sp, #0x24 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020DC85C: .word 0x000080FF +_020DC860: .word 0x0210400C +_020DC864: .word 0x021D6B08 +_020DC868: .word 0x02104048 + + arm_func_start CTRDGi_WriteFlashSectorCoreAT +CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x24 + mov r5, r0 + add r4, sp, #0x0 + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DC984 ; =0x021D6B0C + ldr r1, [r5, #0x0] + ldrh r0, [r0, #0x0] + str r1, [r4, #0x0] + ldr r4, [sp, #0xc] + bl OS_LockCartridge + ldr r5, _020DC988 ; =0x04000204 + ldr r1, _020DC98C ; =0x021D6B20 + ldrh r0, [r5, #0x0] + ldr r1, [r1, #0x0] + ldrh r2, [r5, #0x0] + ldr r3, [r1, #0x10] + ldr r1, _020DC990 ; =0x02104048 + bic r2, r2, #0x3 + orr r2, r2, r3 + strh r2, [r5, #0x0] + ldr r5, _020DC994 ; =0x04000208 + ldrh lr, [sp, #0x20] + ldrh r12, [r1, #0x28] + ldrh r2, [r5, #0x0] + mov r3, #0x0 + mov lr, lr, lsl r12 + strh r3, [r5, #0x0] + ldr ip, _020DC998 ; =0x0A005555 + mov r5, #0xaa + strb r5, [r12, #0x0] + ldr r3, _020DC99C ; =0x0A002AAA + mov r5, #0x55 + strb r5, [r3, #0x0] + mov r3, #0xa0 + strb r3, [r12, #0x0] + ldr r3, [r1, #0x24] + and r5, r0, #0x3 + cmp r3, #0x0 + add r1, lr, #0xa000000 + beq _020DC92C +_020DC91C: + ldrb r0, [r4], #0x1 + subs r3, r3, #0x1 + strb r0, [r1], #0x1 + bne _020DC91C +_020DC92C: + ldr ip, _020DC994 ; =0x04000208 + ldr r3, _020DC9A0 ; =0x021D6B24 + ldrh r0, [r12, #0x0] + sub r1, r1, #0x1 + mov r0, #0x1 + strh r2, [r12, #0x0] + ldrb r2, [r4, #-0x1] + ldr r3, [r3, #0x0] + blx r3 + ldr r3, _020DC988 ; =0x04000204 + ldr r1, _020DC984 ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x24 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DC984: .word 0x021D6B0C +_020DC988: .word 0x04000204 +_020DC98C: .word 0x021D6B20 +_020DC990: .word 0x02104048 +_020DC994: .word 0x04000208 +_020DC998: .word 0x0A005555 +_020DC99C: .word 0x0A002AAA +_020DC9A0: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlash4KBCoreAT +CTRDGi_EraseFlash4KBCoreAT: ; 0x020DC9A4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + str r0, [r4, #0x0] + ldrh r0, [sp, #0x20] + cmp r0, #0x10 + addcs sp, sp, #0x24 + ldrhs r0, _020DCA54 ; =0x000080FF + ldmcsia sp!, {r4-r7,lr} + bxcs lr + mov r0, r0, lsl #0x15 + mov r5, r0, lsr #0x10 + mov r6, #0x0 + mov r4, #0x2 + mov r7, r4 + mov r0, r5 + bl CTRDGi_EraseFlashSectorAT +_020DCA00: + .byte 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A, 0x01, 0x10, 0x47, 0xE2, 0x01, 0x18, 0xA0, 0xE1 + .byte 0x21, 0x78, 0xB0, 0xE1, 0xF7, 0xFF, 0xFF, 0x1A, 0x01, 0x10, 0x85, 0xE2, 0x01, 0x18, 0xA0, 0xE1 + .byte 0x00, 0x00, 0x50, 0xE3, 0x21, 0x58, 0xA0, 0xE1, 0x24, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18 + .byte 0x1E, 0xFF, 0x2F, 0x11, 0x01, 0x10, 0x86, 0xE2, 0x01, 0x18, 0xA0, 0xE1, 0x21, 0x68, 0xA0, 0xE1 + .byte 0x20, 0x00, 0x56, 0xE3, 0xEA, 0xFF, 0xFF, 0x3A, 0x24, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 +_020DCA54: .word 0x000080FF + + arm_func_start CTRDGi_EraseFlashSectorCoreAT +CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + ldr r1, _020DCB80 ; =0x02104048 + str r0, [r4, #0x0] + ldr r0, _020DCB84 ; =0x021D6B0C + ldrh r2, [sp, #0x20] + ldrh r1, [r1, #0x28] + ldrh r0, [r0, #0x0] + mov r1, r2, lsl r1 + add r5, r1, #0xa000000 + bl OS_LockCartridge + ldr r4, _020DCB88 ; =0x04000204 + ldr r1, _020DCB8C ; =0x021D6B20 + ldrh r0, [r4, #0x0] + ldr r2, [r1, #0x0] + ldrh r1, [r4, #0x0] + ldr r2, [r2, #0x10] + ldr r3, _020DCB90 ; =0x04000208 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r4, #0x0] + ldrh r2, [r3, #0x0] + mov r1, #0x0 + ldr r4, _020DCB94 ; =0x0A005555 + strh r1, [r3, #0x0] + mov r3, #0xaa + strb r3, [r4, #0x0] + ldr r1, _020DCB98 ; =0x0A002AAA + mov r3, #0x55 + strb r3, [r1, #0x0] + mov r3, #0xa0 + strb r3, [r4, #0x0] + ldr r1, _020DCB80 ; =0x02104048 + and r4, r0, #0x3 + ldr r1, [r1, #0x24] + cmp r1, #0x0 + beq _020DCB18 + mov r0, #0xff +_020DCB0C: + strb r0, [r5], #0x1 + subs r1, r1, #0x1 + bne _020DCB0C +_020DCB18: + ldr ip, _020DCB90 ; =0x04000208 + ldr r3, _020DCB9C ; =0x021D6B24 + ldrh r0, [r12, #0x0] + sub r1, r5, #0x1 + strh r2, [r12, #0x0] + ldr r3, [r3, #0x0] + mov r0, #0x1 + mov r2, #0xff + blx r3 + ldr r2, _020DCB88 ; =0x04000204 + movs r5, r0 + ldrh r1, [r2, #0x0] + andne r0, r5, #0xff00 + orrne r0, r0, #0x2 + movne r0, r0, lsl #0x10 + bic r1, r1, #0x3 + movne r5, r0, lsr #0x10 + orr r1, r1, r4 + ldr r0, _020DCB84 ; =0x021D6B0C + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r5 + add sp, sp, #0x24 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DCB80: .word 0x02104048 +_020DCB84: .word 0x021D6B0C +_020DCB88: .word 0x04000204 +_020DCB8C: .word 0x021D6B20 +_020DCB90: .word 0x04000208 +_020DCB94: .word 0x0A005555 +_020DCB98: .word 0x0A002AAA +_020DCB9C: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashChipCoreAT +CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020DCC7C ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r4, _020DCC80 ; =0x04000204 + ldr r0, _020DCC84 ; =0x021D6B20 + ldrh r3, [r4, #0x0] + ldr r0, [r0, #0x0] + ldrh r1, [r4, #0x0] + ldr r2, [r0, #0x10] + ldr r0, _020DCC88 ; =0x04000208 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r4, #0x0] + ldrh r4, [r0, #0x0] + mov r2, #0x0 + ldr r1, _020DCC8C ; =0x021D6B38 + strh r2, [r0, #0x0] + ldr lr, _020DCC90 ; =0x0A005555 + str r4, [r1, #0x0] + mov r5, #0xaa + ldr r4, _020DCC94 ; =0x0A002AAA + strb r5, [lr, #0x0] + mov r12, #0x55 + strb r12, [r4, #0x0] + mov r2, #0x80 + strb r2, [lr, #0x0] + strb r5, [lr, #0x0] + strb r12, [r4, #0x0] + mov r2, #0x10 + strb r2, [lr, #0x0] + ldrh r2, [r0, #0x0] + ldr r2, [r1, #0x0] + ldr r1, _020DCC98 ; =0x021D6B24 + strh r2, [r0, #0x0] + ldr r4, [r1, #0x0] + mov r0, #0x3 + mov r1, #0xa000000 + mov r2, #0xff + and r5, r3, #0x3 + blx r4 + ldr r3, _020DCC80 ; =0x04000204 + ldr r1, _020DCC7C ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DCC7C: .word 0x021D6B0C +_020DCC80: .word 0x04000204 +_020DCC84: .word 0x021D6B20 +_020DCC88: .word 0x04000208 +_020DCC8C: .word 0x021D6B38 +_020DCC90: .word 0x0A005555 +_020DCC94: .word 0x0A002AAA +_020DCC98: .word 0x021D6B24 + + arm_func_start CTRDGi_WriteFlashSectorAsyncLE +CTRDGi_WriteFlashSectorAsyncLE: ; 0x020DCC9C + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DCCC4 ; =CTRDGi_WriteFlashSectorCoreLE + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DCCC4: .word CTRDGi_WriteFlashSectorCoreLE + + arm_func_start CTRDGi_EraseFlashSectorAsyncLE +CTRDGi_EraseFlashSectorAsyncLE: ; 0x020DCCC8 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov r2, r1 + strh r0, [sp, #0x20] + ldr r1, _020DCCF0 ; =CTRDGi_EraseFlashSectorCoreLE + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DCCF0: .word CTRDGi_EraseFlashSectorCoreLE + + arm_func_start CTRDGi_EraseFlashChipAsyncLE +CTRDGi_EraseFlashChipAsyncLE: ; 0x020DCCF4 + stmdb sp!, {lr} + sub sp, sp, #0x24 + ldr r1, _020DCD18 ; =CTRDGi_EraseFlashChipCoreLE + mov r2, r0 + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DCD18: .word CTRDGi_EraseFlashChipCoreLE + + arm_func_start CTRDGi_WriteFlashSectorLE +CTRDGi_WriteFlashSectorLE: ; 0x020DCD1C + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlashSectorCoreLE + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashSectorLE +CTRDGi_EraseFlashSectorLE: ; 0x020DCD48 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + bl CTRDGi_EraseFlashSectorCoreLE + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashChipLE +CTRDGi_EraseFlashChipLE: ; 0x020DCD70 + stmdb sp!, {lr} + sub sp, sp, #0x24 + add r0, sp, #0x0 + bl CTRDGi_EraseFlashChipCoreLE + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_VerifyFlashErase +CTRDGi_VerifyFlashErase: ; 0x020DCD94 + stmdb sp!, {r4-r6,lr} + ldr r2, _020DCE14 ; =0x021D6B0C + mov r4, r0 + ldrh r0, [r2, #0x0] + mov r5, r1 + bl OS_LockCartridge + ldr ip, _020DCE18 ; =0x04000204 + ldr r0, _020DCE1C ; =0x021D6B20 + ldrh r3, [r12, #0x0] + ldr r0, [r0, #0x0] + ldrh r1, [r12, #0x0] + ldr r2, [r0, #0x10] + mov r0, r4 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r12, #0x0] + and r6, r3, #0x3 + mov r4, #0x0 + blx r5 + cmp r0, #0x0 + ldr r2, _020DCE18 ; =0x04000204 + ldr r0, _020DCE14 ; =0x021D6B0C + ldrh r1, [r2, #0x0] + ldrne r4, _020DCE20 ; =0x00008004 + bic r1, r1, #0x3 + orr r1, r1, r6 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020DCE14: .word 0x021D6B0C +_020DCE18: .word 0x04000204 +_020DCE1C: .word 0x021D6B20 +_020DCE20: .word 0x00008004 + + arm_func_start CTRDGi_VerifyFlashCoreFF +CTRDGi_VerifyFlashCoreFF: ; 0x020DCE24 + ldr r1, _020DCE54 ; =0x021D6B20 + ldr r1, [r1, #0x0] + ldr r2, [r1, #0x4] + cmp r2, #0x0 + beq _020DCE4C +_020DCE38: + ldrb r1, [r0], #0x1 + cmp r1, #0xff + bne _020DCE4C + subs r2, r2, #0x1 + bne _020DCE38 +_020DCE4C: + mov r0, r2 + bx lr + .balign 4 +_020DCE54: .word 0x021D6B20 + + arm_func_start CTRDGi_WriteFlashSectorCoreLE +CTRDGi_WriteFlashSectorCoreLE: ; 0x020DCE58 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + str r0, [r4, #0x0] + ldrh r7, [sp, #0x20] + ldr r6, [sp, #0xc] + cmp r7, #0x10 + addcs sp, sp, #0x24 + ldrhs r0, _020DD018 ; =0x000080FF + ldmcsia sp!, {r4-r9,lr} + bxcs lr + ldr r0, _020DD01C ; =0x021D6B20 + mov r9, #0x0 + ldr r0, [r0, #0x0] + ldrh r0, [r0, #0x8] + mov r0, r7, lsl r0 + add r4, r0, #0xa000000 + ldr r5, _020DD020 ; =CTRDGi_VerifyFlashCoreFF +_020DCEB8: + mov r0, r7 + bl CTRDGi_EraseFlashSectorLE + movs r8, r0 + bne _020DCEE0 + mov r0, r4 + mov r1, r5 + bl CTRDGi_VerifyFlashErase + mov r0, r0, lsl #0x10 + movs r8, r0, lsr #0x10 + beq _020DCF04 +_020DCEE0: + add r0, r9, #0x1 + mov r0, r0, lsl #0x10 + cmp r9, #0x50 + mov r9, r0, lsr #0x10 + bne _020DCEB8 + add sp, sp, #0x24 + mov r0, r8 + ldmia sp!, {r4-r9,lr} + bx lr +_020DCF04: + mov r5, #0x1 + cmp r9, #0x0 + movne r5, #0x6 + cmp r5, #0x1 + mov r9, #0x1 + blo _020DCF38 +_020DCF1C: + mov r0, r7 + bl CTRDGi_EraseFlashSectorLE + add r0, r9, #0x1 + mov r0, r0, lsl #0x10 + mov r9, r0, lsr #0x10 + cmp r9, r5 + bls _020DCF1C +_020DCF38: + ldr r0, _020DD024 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r5, _020DD028 ; =0x04000204 + ldr r1, _020DD01C ; =0x021D6B20 + ldrh r0, [r5, #0x0] + ldr r3, [r1, #0x0] + ldrh r2, [r5, #0x0] + ldr r3, [r3, #0x10] + ldr r7, _020DD02C ; =0x021D6B08 + bic r2, r2, #0x3 + orr r2, r2, r3 + strh r2, [r5, #0x0] + ldr r1, [r1, #0x0] + ldr sb, _020DD030 ; =0x04000208 + ldr r1, [r1, #0x4] + mov r2, #0x0 + strh r1, [r7, #0x0] + ldrh r3, [r9, #0x0] + ldr r1, _020DD034 ; =0x021D6B38 + and r5, r0, #0x3 + strh r2, [r9, #0x0] + ldrh r0, [r7, #0x0] + str r3, [r1, #0x0] + cmp r0, #0x0 + beq _020DCFD4 +_020DCFA0: + mov r0, r6 + mov r1, r4 + bl CTRDGi_ProgramFlashByteLE + movs r8, r0 + bne _020DCFD4 + ldrh r0, [r7, #0x0] + add r6, r6, #0x1 + add r4, r4, #0x1 + sub r0, r0, #0x1 + strh r0, [r7, #0x0] + ldrh r0, [r7, #0x0] + cmp r0, #0x0 + bne _020DCFA0 +_020DCFD4: + ldr r3, _020DD030 ; =0x04000208 + ldr r0, _020DD034 ; =0x021D6B38 + ldrh r1, [r3, #0x0] + ldr r0, [r0, #0x0] + ldr r2, _020DD028 ; =0x04000204 + strh r0, [r3, #0x0] + ldrh r1, [r2, #0x0] + ldr r0, _020DD024 ; =0x021D6B0C + bic r1, r1, #0x3 + orr r1, r1, r5 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r8 + add sp, sp, #0x24 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020DD018: .word 0x000080FF +_020DD01C: .word 0x021D6B20 +_020DD020: .word CTRDGi_VerifyFlashCoreFF +_020DD024: .word 0x021D6B0C +_020DD028: .word 0x04000204 +_020DD02C: .word 0x021D6B08 +_020DD030: .word 0x04000208 +_020DD034: .word 0x021D6B38 + + arm_func_start CTRDGi_ProgramFlashByteLE +CTRDGi_ProgramFlashByteLE: ; 0x020DD038 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020DD08C ; =0x0A005555 + mov r3, #0xaa + ldr r2, _020DD090 ; =0x0A002AAA + strb r3, [r12, #0x0] + mov r3, #0x55 + mov lr, r0 + strb r3, [r2, #0x0] + mov r0, #0xa0 + strb r0, [r12, #0x0] + ldrb r2, [lr, #0x0] + ldr r3, _020DD094 ; =0x021D6B24 + mov r0, #0x1 + strb r2, [r1, #0x0] + ldrb r2, [lr, #0x0] + ldr r3, [r3, #0x0] + blx r3 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD08C: .word 0x0A005555 +_020DD090: .word 0x0A002AAA +_020DD094: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashSectorCoreLE +CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x28 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + str r0, [r4, #0x0] + ldrh r4, [sp, #0x20] + cmp r4, #0x10 + addcs sp, sp, #0x28 + ldrhs r0, _020DD1B8 ; =0x000080FF + ldmcsia sp!, {r4-r6,lr} + bxcs lr + ldr r0, _020DD1BC ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r6, _020DD1C0 ; =0x04000204 + ldr r1, _020DD1C4 ; =0x021D6B20 + ldrh r3, [r6, #0x0] + ldr r0, [r1, #0x0] + ldrh r2, [r6, #0x0] + ldr r5, [r0, #0x10] + ldr r0, _020DD1C8 ; =0x04000208 + bic r2, r2, #0x3 + orr r2, r2, r5 + strh r2, [r6, #0x0] + ldr r1, [r1, #0x0] + ldrh r5, [r0, #0x0] + ldrh r12, [r1, #0x8] + mov r1, #0x0 + ldr r2, _020DD1CC ; =0x021D6B38 + strh r1, [r0, #0x0] + mov r6, r4, lsl r12 + ldr lr, _020DD1D0 ; =0x0A005555 + str r5, [r2, #0x0] + mov r5, #0xaa + ldr r4, _020DD1D4 ; =0x0A002AAA + strb r5, [lr, #0x0] + mov r12, #0x55 + strb r12, [r4, #0x0] + mov r1, #0x80 + strb r1, [lr, #0x0] + strb r5, [lr, #0x0] + strb r12, [r4, #0x0] + add r1, r6, #0xa000000 + mov r4, #0x30 + strb r4, [r1, #0x0] + ldrh r4, [r0, #0x0] + ldr r4, [r2, #0x0] + ldr r2, _020DD1D8 ; =0x021D6B24 + strh r4, [r0, #0x0] + ldr r4, [r2, #0x0] + mov r0, #0x2 + mov r2, #0xff + and r5, r3, #0x3 + blx r4 + ldr r3, _020DD1C0 ; =0x04000204 + ldr r1, _020DD1BC ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x28 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020DD1B8: .word 0x000080FF +_020DD1BC: .word 0x021D6B0C +_020DD1C0: .word 0x04000204 +_020DD1C4: .word 0x021D6B20 +_020DD1C8: .word 0x04000208 +_020DD1CC: .word 0x021D6B38 +_020DD1D0: .word 0x0A005555 +_020DD1D4: .word 0x0A002AAA +_020DD1D8: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashChipCoreLE +CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020DD2B8 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r4, _020DD2BC ; =0x04000204 + ldr r0, _020DD2C0 ; =0x021D6B20 + ldrh r3, [r4, #0x0] + ldr r0, [r0, #0x0] + ldrh r1, [r4, #0x0] + ldr r2, [r0, #0x10] + ldr r0, _020DD2C4 ; =0x04000208 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r4, #0x0] + ldrh r4, [r0, #0x0] + mov r2, #0x0 + ldr r1, _020DD2C8 ; =0x021D6B38 + strh r2, [r0, #0x0] + ldr lr, _020DD2CC ; =0x0A005555 + str r4, [r1, #0x0] + mov r5, #0xaa + ldr r4, _020DD2D0 ; =0x0A002AAA + strb r5, [lr, #0x0] + mov r12, #0x55 + strb r12, [r4, #0x0] + mov r2, #0x80 + strb r2, [lr, #0x0] + strb r5, [lr, #0x0] + strb r12, [r4, #0x0] + mov r2, #0x10 + strb r2, [lr, #0x0] + ldrh r2, [r0, #0x0] + ldr r2, [r1, #0x0] + ldr r1, _020DD2D4 ; =0x021D6B24 + strh r2, [r0, #0x0] + ldr r4, [r1, #0x0] + mov r0, #0x3 + mov r1, #0xa000000 + mov r2, #0xff + and r5, r3, #0x3 + blx r4 + ldr r3, _020DD2BC ; =0x04000204 + ldr r1, _020DD2B8 ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DD2B8: .word 0x021D6B0C +_020DD2BC: .word 0x04000204 +_020DD2C0: .word 0x021D6B20 +_020DD2C4: .word 0x04000208 +_020DD2C8: .word 0x021D6B38 +_020DD2CC: .word 0x0A005555 +_020DD2D0: .word 0x0A002AAA +_020DD2D4: .word 0x021D6B24 + + arm_func_start CTRDGi_WriteFlashSectorAsyncMX +CTRDGi_WriteFlashSectorAsyncMX: ; 0x020DD2D8 + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DD300 ; =CTRDGi_WriteFlashSectorCoreMX + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD300: .word CTRDGi_WriteFlashSectorCoreMX + + arm_func_start CTRDGi_EraseFlashSectorAsyncMX +CTRDGi_EraseFlashSectorAsyncMX: ; 0x020DD304 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov r2, r1 + strh r0, [sp, #0x20] + ldr r1, _020DD32C ; =CTRDGi_EraseFlashSectorCoreMX + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD32C: .word CTRDGi_EraseFlashSectorCoreMX + + arm_func_start CTRDGi_EraseFlashChipAsyncMX +CTRDGi_EraseFlashChipAsyncMX: ; 0x020DD330 + stmdb sp!, {lr} + sub sp, sp, #0x24 + ldr r1, _020DD354 ; =CTRDGi_EraseFlashChipCoreMX + mov r2, r0 + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD354: .word CTRDGi_EraseFlashChipCoreMX + + arm_func_start CTRDGi_WriteFlashSectorMX +CTRDGi_WriteFlashSectorMX: ; 0x020DD358 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlashSectorCoreMX + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashSectorMX +CTRDGi_EraseFlashSectorMX: ; 0x020DD384 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + bl CTRDGi_EraseFlashSectorCoreMX + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashChipMX +CTRDGi_EraseFlashChipMX: ; 0x020DD3AC + stmdb sp!, {lr} + sub sp, sp, #0x24 + add r0, sp, #0x0 + bl CTRDGi_EraseFlashChipCoreMX + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteFlashSectorCoreMX +CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x28 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DD540 ; =0x021D6B20 + ldr r1, [r5, #0x0] + ldr r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r5, [sp, #0x20] + ldrh r0, [r0, #0xa] + ldr r4, [sp, #0xc] + cmp r5, r0 + addcs sp, sp, #0x28 + ldrhs r0, _020DD544 ; =0x000080FF + ldmcsia sp!, {r4-r8,lr} + bxcs lr + mov r0, r5 + bl CTRDGi_EraseFlashSectorMX + movs r6, r0 + addne sp, sp, #0x28 + ldmneia sp!, {r4-r8,lr} + bxne lr + ldr r0, _020DD548 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r7, _020DD54C ; =0x04000204 + ldr r0, _020DD540 ; =0x021D6B20 + ldrh r3, [r7, #0x0] + ldr r2, [r0, #0x0] + ldrh r1, [r7, #0x0] + mov r0, r5, lsl #0xc + ldr r2, [r2, #0x10] + bic r1, r1, #0x3 + orr r1, r1, r2 + mov r0, r0, lsr #0x10 + strh r1, [r7, #0x0] + and r7, r3, #0x3 + bl CTRDGi_SetFlashBankMx + ldr r0, _020DD540 ; =0x021D6B20 + and r1, r5, #0xf + ldr r3, [r0, #0x0] + mov r0, r1, lsl #0x10 + ldr r2, [r3, #0x4] + ldr r8, _020DD550 ; =0x021D6B08 + ldr r1, _020DD554 ; =0x04000208 + strh r2, [r8, #0x0] + ldrh r3, [r3, #0x8] + mov r5, r0, lsr #0x10 + ldrh r2, [r1, #0x0] + mov r0, #0x0 + mov r3, r5, lsl r3 + strh r0, [r1, #0x0] + ldrh r1, [r8, #0x0] + ldr r0, _020DD558 ; =0x021D6B38 + add r5, r3, #0xa000000 + str r2, [r0, #0x0] + cmp r1, #0x0 + beq _020DD4FC +_020DD4C8: + mov r0, r4 + mov r1, r5 + bl CTRDGi_ProgramFlashByteMX + movs r6, r0 + bne _020DD4FC + ldrh r0, [r8, #0x0] + add r4, r4, #0x1 + add r5, r5, #0x1 + sub r0, r0, #0x1 + strh r0, [r8, #0x0] + ldrh r0, [r8, #0x0] + cmp r0, #0x0 + bne _020DD4C8 +_020DD4FC: + ldr r3, _020DD554 ; =0x04000208 + ldr r0, _020DD558 ; =0x021D6B38 + ldrh r1, [r3, #0x0] + ldr r0, [r0, #0x0] + ldr r2, _020DD54C ; =0x04000204 + strh r0, [r3, #0x0] + ldrh r1, [r2, #0x0] + ldr r0, _020DD548 ; =0x021D6B0C + bic r1, r1, #0x3 + orr r1, r1, r7 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r6 + add sp, sp, #0x28 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020DD540: .word 0x021D6B20 +_020DD544: .word 0x000080FF +_020DD548: .word 0x021D6B0C +_020DD54C: .word 0x04000204 +_020DD550: .word 0x021D6B08 +_020DD554: .word 0x04000208 +_020DD558: .word 0x021D6B38 + + arm_func_start CTRDGi_ProgramFlashByteMX +CTRDGi_ProgramFlashByteMX: ; 0x020DD55C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020DD5B0 ; =0x0A005555 + mov r3, #0xaa + ldr r2, _020DD5B4 ; =0x0A002AAA + strb r3, [r12, #0x0] + mov r3, #0x55 + mov lr, r0 + strb r3, [r2, #0x0] + mov r0, #0xa0 + strb r0, [r12, #0x0] + ldrb r2, [lr, #0x0] + ldr r3, _020DD5B8 ; =0x021D6B24 + mov r0, #0x1 + strb r2, [r1, #0x0] + ldrb r2, [lr, #0x0] + ldr r3, [r3, #0x0] + blx r3 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD5B0: .word 0x0A005555 +_020DD5B4: .word 0x0A002AAA +_020DD5B8: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashSectorCoreMX +CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x34 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x10 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DD748 ; =0x021D6B20 + ldr r1, [r5, #0x0] + ldr r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r4, [sp, #0x30] + ldrh r0, [r0, #0xa] + cmp r4, r0 + addcs sp, sp, #0x34 + ldrhs r0, _020DD74C ; =0x000080FF + ldmcsia sp!, {r4-r11,lr} + bxcs lr + ldr r0, _020DD750 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r5, _020DD754 ; =0x04000204 + ldr r0, _020DD748 ; =0x021D6B20 + ldrh r3, [r5, #0x0] + ldr r2, [r0, #0x0] + ldrh r1, [r5, #0x0] + mov r0, r4, lsl #0xc + ldr r2, [r2, #0x10] + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r5, #0x0] + and r1, r3, #0x3 + mov r0, r0, lsr #0x10 + str r1, [sp, #0x0] + bl CTRDGi_SetFlashBankMx + and r0, r4, #0xf + mov r0, r0, lsl #0x10 + mov r9, r0, lsr #0x10 + mov r0, #0x2 + mov r10, #0x0 + str r0, [sp, #0x8] + mov r0, #0xff + ldr r8, _020DD758 ; =0x04000208 + mov r11, r10 + mov r7, #0xaa + mov r6, #0x55 + mov r5, #0x80 + mov r4, #0x30 + str r0, [sp, #0xc] +_020DD684: + ldr r0, _020DD748 ; =0x021D6B20 + ldrh r12, [r8, #0x0] + ldr r0, [r0, #0x0] + ldr r3, _020DD75C ; =0x021D6B38 + ldrh r1, [r0, #0x8] + ldr r0, [sp, #0x8] + ldr r2, [sp, #0xc] + strh r11, [r8, #0x0] + str r12, [r3, #0x0] + ldr r3, _020DD760 ; =0x0A005555 + mov r1, r9, lsl r1 + strb r7, [r3, #0x0] + ldr r3, _020DD764 ; =0x0A002AAA + add r1, r1, #0xa000000 + strb r6, [r3, #0x0] + ldr r3, _020DD760 ; =0x0A005555 + strb r5, [r3, #0x0] + strb r7, [r3, #0x0] + ldr r3, _020DD764 ; =0x0A002AAA + strb r6, [r3, #0x0] + strb r4, [r1, #0x0] + ldrh r3, [r8, #0x0] + ldr r3, _020DD75C ; =0x021D6B38 + ldr r3, [r3, #0x0] + strh r3, [r8, #0x0] + ldr r3, _020DD768 ; =0x021D6B24 + ldr r3, [r3, #0x0] + blx r3 + str r0, [sp, #0x4] + ands r0, r0, #0xa000 + beq _020DD714 + cmp r10, #0x0 + addeq r0, r10, #0x1 + moveq r0, r0, lsl #0x10 + moveq r10, r0, lsr #0x10 + beq _020DD684 +_020DD714: + ldr r2, _020DD754 ; =0x04000204 + ldr r1, _020DD750 ; =0x021D6B0C + ldrh r0, [r2, #0x0] + bic r3, r0, #0x3 + ldr r0, [sp, #0x0] + orr r0, r3, r0 + strh r0, [r2, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + ldr r0, [sp, #0x4] + add sp, sp, #0x34 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020DD748: .word 0x021D6B20 +_020DD74C: .word 0x000080FF +_020DD750: .word 0x021D6B0C +_020DD754: .word 0x04000204 +_020DD758: .word 0x04000208 +_020DD75C: .word 0x021D6B38 +_020DD760: .word 0x0A005555 +_020DD764: .word 0x0A002AAA +_020DD768: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashChipCoreMX +CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020DD848 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r4, _020DD84C ; =0x04000204 + ldr r0, _020DD850 ; =0x021D6B20 + ldrh r3, [r4, #0x0] + ldr r0, [r0, #0x0] + ldrh r1, [r4, #0x0] + ldr r2, [r0, #0x10] + ldr r0, _020DD854 ; =0x04000208 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r4, #0x0] + ldrh r4, [r0, #0x0] + mov r2, #0x0 + ldr r1, _020DD858 ; =0x021D6B38 + strh r2, [r0, #0x0] + ldr lr, _020DD85C ; =0x0A005555 + str r4, [r1, #0x0] + mov r5, #0xaa + ldr r4, _020DD860 ; =0x0A002AAA + strb r5, [lr, #0x0] + mov r12, #0x55 + strb r12, [r4, #0x0] + mov r2, #0x80 + strb r2, [lr, #0x0] + strb r5, [lr, #0x0] + strb r12, [r4, #0x0] + mov r2, #0x10 + strb r2, [lr, #0x0] + ldrh r2, [r0, #0x0] + ldr r2, [r1, #0x0] + ldr r1, _020DD864 ; =0x021D6B24 + strh r2, [r0, #0x0] + ldr r4, [r1, #0x0] + mov r0, #0x3 + mov r1, #0xa000000 + mov r2, #0xff + and r5, r3, #0x3 + blx r4 + ldr r3, _020DD84C ; =0x04000204 + ldr r1, _020DD848 ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DD848: .word 0x021D6B0C +_020DD84C: .word 0x04000204 +_020DD850: .word 0x021D6B20 +_020DD854: .word 0x04000208 +_020DD858: .word 0x021D6B38 +_020DD85C: .word 0x0A005555 +_020DD860: .word 0x0A002AAA +_020DD864: .word 0x021D6B24 +_020DD868: + .byte 0x00, 0x40, 0x2D, 0xE9, 0x24, 0xD0, 0x4D, 0xE2 + .byte 0x0C, 0x10, 0x8D, 0xE5, 0xB0, 0x02, 0xCD, 0xE1, 0x10, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE2 + .byte 0x5D, 0x00, 0x00, 0xEB, 0x24, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + .byte 0xC0, 0xD8, 0x0D, 0x02, 0x00, 0x40, 0x2D, 0xE9, 0x24, 0xD0, 0x4D, 0xE2, 0xB0, 0x02, 0xCD, 0xE1 + .byte 0x00, 0x00, 0x8D, 0xE2, 0x0C, 0x10, 0x8D, 0xE5, 0x04, 0x00, 0x00, 0xEB, 0x00, 0x08, 0xA0, 0xE1 + .byte 0x20, 0x08, 0xA0, 0xE1, 0x24, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + .byte 0xF0, 0x41, 0x2D, 0xE9, 0x28, 0xD0, 0x4D, 0xE2, 0x00, 0x50, 0xA0, 0xE1, 0x0F, 0x00, 0xB5, 0xE8 + .byte 0x00, 0x40, 0x8D, 0xE2, 0x0F, 0x00, 0xA4, 0xE8, 0x0F, 0x00, 0xB5, 0xE8, 0x0F, 0x00, 0xA4, 0xE8 + .byte 0x00, 0x01, 0x9F, 0xE5, 0x00, 0x10, 0x95, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x00, 0x10, 0x84, 0xE5 + .byte 0xB0, 0x52, 0xDD, 0xE1, 0xBA, 0x00, 0xD0, 0xE1, 0x0C, 0x40, 0x9D, 0xE5, 0x00, 0x00, 0x55, 0xE1 + .byte 0x28, 0xD0, 0x8D, 0x22, 0xE0, 0x00, 0x9F, 0x25, 0xF0, 0x41, 0xBD, 0x28, 0x1E, 0xFF, 0x2F, 0x21 + .byte 0x05, 0x00, 0xA0, 0xE1, 0x0B, 0xFD, 0xFF, 0xEB, 0x00, 0x60, 0xB0, 0xE1, 0x28, 0xD0, 0x8D, 0x12 + .byte 0xF0, 0x41, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0xC0, 0x00, 0x9F, 0xE5, 0xB0, 0x00, 0xD0, 0xE1 + .byte 0x34, 0xB2, 0xFF, 0xEB, 0xB8, 0x70, 0x9F, 0xE5, 0xA8, 0x00, 0x9F, 0xE5, 0xB0, 0x30, 0xD7, 0xE1 + .byte 0x00, 0x20, 0x90, 0xE5, 0xB0, 0x10, 0xD7, 0xE1, 0x10, 0x20, 0x92, 0xE5, 0xA4, 0x80, 0x9F, 0xE5 + .byte 0x03, 0x10, 0xC1, 0xE3, 0x02, 0x10, 0x81, 0xE1, 0xB0, 0x10, 0xC7, 0xE1, 0x00, 0x10, 0x90, 0xE5 + .byte 0x03, 0x70, 0x03, 0xE2, 0x04, 0x00, 0x91, 0xE5, 0xB0, 0x00, 0xC8, 0xE1, 0xB8, 0x10, 0xD1, 0xE1 + .byte 0xB0, 0x00, 0xD8, 0xE1, 0x15, 0x11, 0xA0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x54, 0x81, 0xE2 + .byte 0x0C, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0xA9, 0xFD, 0xFF, 0xEB + .byte 0x00, 0x60, 0xB0, 0xE1, 0x07, 0x00, 0x00, 0x1A, 0xB0, 0x00, 0xD8, 0xE1, 0x01, 0x40, 0x84, 0xE2 + .byte 0x01, 0x50, 0x85, 0xE2, 0x01, 0x00, 0x40, 0xE2, 0xB0, 0x00, 0xC8, 0xE1, 0xB0, 0x00, 0xD8, 0xE1 + .byte 0x00, 0x00, 0x50, 0xE3, 0xF2, 0xFF, 0xFF, 0x1A, 0x34, 0x20, 0x9F, 0xE5, 0x2C, 0x00, 0x9F, 0xE5 + .byte 0xB0, 0x10, 0xD2, 0xE1, 0x03, 0x10, 0xC1, 0xE3, 0x07, 0x10, 0x81, 0xE1, 0xB0, 0x10, 0xC2, 0xE1 + .byte 0xB0, 0x00, 0xD0, 0xE1, 0x03, 0xB2, 0xFF, 0xEB, 0x06, 0x00, 0xA0, 0xE1, 0x28, 0xD0, 0x8D, 0xE2 + .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x20, 0x6B, 0x1D, 0x02, 0xFF, 0x80, 0x00, 0x00 + .byte 0x0C, 0x6B, 0x1D, 0x02, 0x04, 0x02, 0x00, 0x04, 0x08, 0x6B, 0x1D, 0x02 + + arm_func_start CTRDGi_SetTask +CTRDGi_SetTask: ; 0x020DD9FC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r3, _020DDAA8 ; =0x021D6B50 + mov r7, r0 + mov r4, r1 + mov r6, r2 + ldr r5, [r3, #0x0] + bl CTRDGi_IsTaskAvailable +_020DDA1C: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x00, 0x00, 0x00, 0x1A, 0x89, 0xBF, 0xFF, 0xEB, 0x7C, 0x00, 0x9F, 0xE5, 0x22, 0x00, 0xD0, 0xE5 + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x00, 0x0A, 0x84, 0xBF, 0xFF, 0xEB, 0x33, 0xBE, 0xFF, 0xEB + .byte 0x01, 0x10, 0xA0, 0xE3, 0x22, 0x10, 0xC7, 0xE5, 0x00, 0x40, 0x87, 0xE5, 0xC4, 0x10, 0x85, 0xE2 + .byte 0x01, 0x00, 0x57, 0xE1, 0x00, 0x40, 0xA0, 0xE1, 0x48, 0x00, 0x9F, 0x05, 0x04, 0x60, 0x87, 0xE5 + .byte 0x00, 0x10, 0xA0, 0x03, 0x00, 0x10, 0x80, 0x05, 0x3C, 0xC0, 0x9F, 0xE5, 0x0F, 0x00, 0xB7, 0xE8 + .byte 0x0C, 0x60, 0xA0, 0xE1, 0x0F, 0x00, 0xAC, 0xE8, 0x0F, 0x00, 0xB7, 0xE8, 0x0F, 0x00, 0xAC, 0xE8 + .byte 0x00, 0x10, 0x97, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0x8C, 0xE5, 0xC0, 0x60, 0x85, 0xE5 + .byte 0xE6, 0xB5, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x21, 0xBE, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020DDAA8: .word 0x021D6B50 +_020DDAAC: + .byte 0x54, 0x6B, 0x1D, 0x02 + + arm_func_start CTRDGi_TaskThread +CTRDGi_TaskThread: ; 0x020DDAB0 + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x28 + ldr r6, _020DDB94 ; =0x021D6B54 + ldr r5, _020DDB98 ; =0x021D6B50 + mov r4, r0 + add r9, sp, #0x0 + mov r8, #0x0 + mov r7, #0x24 +_020DDAD0: + mov r0, r9 + mov r1, r8 + mov r2, r7 + bl MI_CpuFill8 + bl OS_DisableInterrupts + ldr r1, [r4, #0xc0] + mov r10, r0 + cmp r1, #0x0 + bne _020DDB08 +_020DDAF4: + mov r0, r8 + bl OS_SleepThread + ldr r0, [r4, #0xc0] + cmp r0, #0x0 + beq _020DDAF4 +_020DDB08: + ldr lr, [r4, #0xc0] + add r12, sp, #0x0 + ldmia lr!, {r0-r3} + stmia r12!, {r0-r3} + ldmia lr!, {r0-r3} + stmia r12!, {r0-r3} + ldr r1, [lr, #0x0] + mov r0, r10 + str r1, [r12, #0x0] + bl OS_RestoreInterrupts + ldr r1, [sp, #0x0] + cmp r1, #0x0 + beq _020DDB48 + mov r0, r9 + blx r1 + str r0, [sp, #0x8] +_020DDB48: + bl OS_DisableInterrupts + ldr r1, [sp, #0x4] + mov r10, r0 + strb r8, [r6, #0x22] + cmp r1, #0x0 + beq _020DDB68 + mov r0, r9 + blx r1 +_020DDB68: + ldr r0, [r5, #0x0] + cmp r0, #0x0 + beq _020DDB84 + mov r0, r10 + str r8, [r4, #0xc0] + bl OS_RestoreInterrupts + b _020DDAD0 +_020DDB84: + bl OS_ExitThread + add sp, sp, #0x28 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020DDB94: .word 0x021D6B54 +_020DDB98: .word 0x021D6B50 + + arm_func_start CTRDGi_InitTaskInfo +CTRDGi_InitTaskInfo: + ldr ip, _020DDBAC ; =MI_CpuFill8 + mov r1, #0x0 + mov r2, #0x24 + bx r12 + .balign 4 +_020DDBAC: .word MI_CpuFill8 + + arm_func_start CTRDGi_IsTaskAvailable +CTRDGi_IsTaskAvailable: + ldr r0, _020DDBC8 ; =0x021D6B50 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + bx lr + .balign 4 +_020DDBC8: .word 0x021D6B50 + + arm_func_start CTRDGi_InitTaskThread +CTRDGi_InitTaskThread: ; 0x020DDBCC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020DDC4C ; =0x021D6B50 + mov r4, r0 + ldr r0, [r1, #0x0] + cmp r0, #0x0 + bne _020DDC38 + add r0, r5, #0xc4 + str r5, [r1, #0x0] + bl CTRDGi_InitTaskInfo + ldr r0, _020DDC50 ; =0x021D6B54 + bl CTRDGi_InitTaskInfo +_020DDC04: + .byte 0x00, 0x00, 0xA0, 0xE3, 0xC0, 0x00, 0x85, 0xE5, 0x01, 0x2B, 0xA0, 0xE3 + .byte 0x3C, 0x10, 0x9F, 0xE5, 0x3C, 0x30, 0x9F, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x00, 0x20, 0x8D, 0xE5 + .byte 0x14, 0x20, 0xA0, 0xE3, 0x04, 0x20, 0x8D, 0xE5, 0x05, 0x20, 0xA0, 0xE1, 0x52, 0xB6, 0xFF, 0xEB + .byte 0x05, 0x00, 0xA0, 0xE1, 0x7D, 0xB5, 0xFF, 0xEB +_020DDC38: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DDC4C: .word 0x021D6B50 +_020DDC50: .word 0x021D6B54 +_020DDC54: + .byte 0xB0, 0xDA, 0x0D, 0x02, 0x78, 0x6F, 0x1D, 0x02 + + arm_func_start MATH_CountPopulation +MATH_CountPopulation: ; 0x020DDC5C + ldr r1, _020DDC94 ; =0x55555555 + ldr r2, _020DDC98 ; =0x33333333 + and r1, r1, r0, lsr #0x1 + sub r0, r0, r1 + and r1, r0, r2 + and r0, r2, r0, lsr #0x2 + add r1, r1, r0 + ldr r0, _020DDC9C ; =0x0F0F0F0F + add r1, r1, r1, lsr #0x4 + and r0, r1, r0 + add r0, r0, r0, lsr #0x8 + add r0, r0, r0, lsr #0x10 + and r0, r0, #0xff + bx lr + .balign 4 +_020DDC94: .word 0x55555555 +_020DDC98: .word 0x33333333 +_020DDC9C: .word 0x0F0F0F0F + + arm_func_start MATH_CalcSHA1 +MATH_CalcSHA1: ; 0x020DDCA0 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x68 + mov r6, r0 + add r0, sp, #0x0 + mov r5, r1 + mov r4, r2 + bl MATH_SHA1Init +_020DDCBC: + .byte 0x00, 0x00, 0x8D, 0xE2 + .byte 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0xCF, 0xD4, 0xFF, 0xEB, 0x00, 0x00, 0x8D, 0xE2 + .byte 0x06, 0x10, 0xA0, 0xE1, 0x4D, 0xD4, 0xFF, 0xEB, 0x68, 0xD0, 0x8D, 0xE2, 0x70, 0x40, 0xBD, 0xE8 + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start MATH_CalcMD5 +MATH_CalcMD5: ; 0x020DDCE4 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x58 + mov r6, r0 + add r0, sp, #0x0 + mov r5, r1 + mov r4, r2 + bl MATH_MD5Init +_020DDD00: + .byte 0x00, 0x00, 0x8D, 0xE2, 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0xCC, 0xD3, 0xFF, 0xEB + .byte 0x00, 0x10, 0x8D, 0xE2, 0x06, 0x00, 0xA0, 0xE1, 0x98, 0xD3, 0xFF, 0xEB, 0x58, 0xD0, 0x8D, 0xE2 + .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start MATH_CalcCRC32 +MATH_CalcCRC32: ; 0x020DDD28 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mvn r12, #0x0 + mov r3, r2 + add r1, sp, #0x0 + mov r2, lr + str r12, [sp, #0x0] + bl MATHi_CRC32UpdateRev +_020DDD4C: + .byte 0x00, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0xE0, 0xE1, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start MATH_CalcCRC16CCITT +MATH_CalcCRC16CCITT: ; 0x020DDD60 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020DDD94 ; =0x0000FFFF + mov lr, r1 + mov r3, r2 + add r1, sp, #0x0 + mov r2, lr + strh r12, [sp, #0x0] + bl MATHi_CRC16Update + ldrh r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DDD94: .word 0x0000FFFF + + arm_func_start MATH_CalcCRC16 +MATH_CalcCRC16: ; 0x020DDD98 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r12, #0x0 + mov r3, r2 + add r1, sp, #0x0 + mov r2, lr + strh r12, [sp, #0x0] + bl MATHi_CRC16UpdateRev + ldrh r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start MATH_CalcCRC8 +MATH_CalcCRC8: ; 0x020DDDCC + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r12, #0x0 + mov r3, r2 + add r1, sp, #0x0 + mov r2, lr + strb r12, [sp, #0x0] + bl MATHi_CRC8Update +_020DDDF0: + .byte 0x00, 0x00, 0xDD, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start MATHi_CRC32UpdateRev +MATHi_CRC32UpdateRev: + stmdb sp!, {r4,lr} + cmp r3, #0x0 + ldr r4, [r1, #0x0] + mov lr, #0x0 + bls _020DDE38 +_020DDE14: + ldrb r12, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, r3 + eor r12, r4, r12 + and r12, r12, #0xff + ldr r12, [r0, r12, lsl #0x2] + add r2, r2, #0x1 + eor r4, r12, r4, lsr #0x8 + blo _020DDE14 +_020DDE38: + str r4, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC32InitTableRev +MATHi_CRC32InitTableRev: ; 0x020DDE44 + stmdb sp!, {r4,lr} + mov lr, #0x0 + mov r3, lr +_020DDE50: + mov r4, lr + mov r12, r3 +_020DDE58: + ands r2, r4, #0x1 + eorne r4, r1, r4, lsr #0x1 + add r12, r12, #0x1 + moveq r4, r4, lsr #0x1 + cmp r12, #0x8 + blo _020DDE58 + str r4, [r0, lr, lsl #0x2] + add lr, lr, #0x1 + cmp lr, #0x100 + blo _020DDE50 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC16UpdateRev +MATHi_CRC16UpdateRev: ; 0x020DDE88 + stmdb sp!, {r4,lr} + cmp r3, #0x0 + ldrh r4, [r1, #0x0] + mov lr, #0x0 + bls _020DDEC4 +_020DDE9C: + ldrb r12, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, r3 + eor r12, r4, r12 + and r12, r12, #0xff + mov r12, r12, lsl #0x1 + ldrh r12, [r0, r12] + add r2, r2, #0x1 + eor r4, r12, r4, lsr #0x8 + blo _020DDE9C +_020DDEC4: + strh r4, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC16Update +MATHi_CRC16Update: ; 0x020DDED0 + stmdb sp!, {r4,lr} + cmp r3, #0x0 + ldrh r4, [r1, #0x0] + mov lr, #0x0 + bls _020DDF0C +_020DDEE4: + ldrb r12, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, r3 + eor r12, r12, r4, lsr #0x8 + and r12, r12, #0xff + mov r12, r12, lsl #0x1 + ldrh r12, [r0, r12] + add r2, r2, #0x1 + eor r4, r12, r4, lsl #0x8 + blo _020DDEE4 +_020DDF0C: + strh r4, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC16InitTableRev +MATHi_CRC16InitTableRev: ; 0x020DDF18 + stmdb sp!, {r4,lr} + mov lr, #0x0 + mov r3, lr +_020DDF24: + mov r4, lr + mov r12, r3 +_020DDF2C: + ands r2, r4, #0x1 + eorne r4, r1, r4, lsr #0x1 + add r12, r12, #0x1 + moveq r4, r4, lsr #0x1 + cmp r12, #0x8 + blo _020DDF2C + mov r2, lr, lsl #0x1 + add lr, lr, #0x1 + strh r4, [r0, r2] + cmp lr, #0x100 + blo _020DDF24 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC16InitTable +MATHi_CRC16InitTable: ; 0x020DDF60 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, #0x0 + mov r12, r4 + mov r3, r4 +_020DDF74: + mov r5, r12 + mov lr, r3 +_020DDF7C: + ands r2, r5, #0x8000 + eorne r5, r1, r5, lsl #0x1 + add lr, lr, #0x1 + moveq r5, r5, lsl #0x1 + cmp lr, #0x8 + blo _020DDF7C + mov r2, r4, lsl #0x1 + add r4, r4, #0x1 + strh r5, [r0, r2] + cmp r4, #0x100 + add r12, r12, #0x100 + blo _020DDF74 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start MATHi_CRC8Update +MATHi_CRC8Update: + stmdb sp!, {r4,lr} + cmp r3, #0x0 + ldrb r4, [r1, #0x0] + mov lr, #0x0 + bls _020DDFEC +_020DDFCC: + ldrb r12, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, r3 + eor r12, r4, r12 + and r12, r12, #0xff + add r2, r2, #0x1 + ldrb r4, [r0, r12] + blo _020DDFCC +_020DDFEC: + strb r4, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC8InitTable +MATHi_CRC8InitTable: ; 0x020DDFF8 + stmdb sp!, {r4,lr} + mov lr, #0x0 + mov r3, lr +_020DE004: + mov r4, lr + mov r12, r3 +_020DE00C: + ands r2, r4, #0x80 + eorne r4, r1, r4, lsl #0x1 + add r12, r12, #0x1 + moveq r4, r4, lsl #0x1 + cmp r12, #0x8 + blo _020DE00C + strb r4, [r0, lr] + add lr, lr, #0x1 + cmp lr, #0x100 + blo _020DE004 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start STD_CompareNString +STD_CompareNString: ; 0x020DE03C + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + beq _020DE080 + cmp r2, #0x0 + mov lr, #0x0 + ble _020DE080 +_020DE058: + ldrb r12, [r0, lr] + ldrb r3, [r1, lr] + cmp r12, r3 + addne sp, sp, #0x4 + subne r0, r12, r3 + ldmneia sp!, {lr} + bxne lr + add lr, lr, #0x1 + cmp lr, r2 + blt _020DE058 +_020DE080: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start STD_CompareString +STD_CompareString: ; 0x020DE090 + b _020DE09C +_020DE094: + add r0, r0, #0x1 + add r1, r1, #0x1 +_020DE09C: + ldrsb r2, [r1, #0x0] + ldrsb r3, [r0, #0x0] + cmp r3, r2 + bne _020DE0B4 + cmp r3, #0x0 + bne _020DE094 +_020DE0B4: + sub r0, r3, r2 + bx lr + + arm_func_start STD_GetStringLength +STD_GetStringLength: ; 0x020DE0BC + ldrsb r1, [r0, #0x0] + mov r2, #0x0 + cmp r1, #0x0 + beq _020DE0DC +_020DE0CC: + add r2, r2, #0x1 + ldrsb r1, [r0, r2] + cmp r1, #0x0 + bne _020DE0CC +_020DE0DC: + mov r0, r2 + bx lr + + arm_func_start STD_CopyLString +STD_CopyLString: ; 0x020DE0E4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + sub r12, r2, #0x1 + cmp r12, #0x0 + mov lr, #0x0 + ble _020DE120 +_020DE0FC: + ldrsb r3, [r1, #0x0] + strb r3, [r0, lr] + ldrsb r3, [r1, #0x0] + cmp r3, #0x0 + beq _020DE120 + add lr, lr, #0x1 + cmp lr, r12 + add r1, r1, #0x1 + blt _020DE0FC +_020DE120: + sub r3, r2, #0x1 + cmp lr, r3 + blt _020DE138 + cmp r2, #0x0 + movne r2, #0x0 + strneb r2, [r0, lr] +_020DE138: + mov r0, r1 + bl STD_GetStringLength + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start abort +abort: ; 0x020DE14C + stmdb sp!, {r3,lr} + mov r0, #0x1 + bl raise + ldr r1, _020DE16C ; =0x021D6F78 + mov r0, #0x1 + str r0, [r1, #0xc] + bl exit + ldmia sp!, {r3,pc} + .balign 4 +_020DE16C: .word 0x021D6F78 + + arm_func_start exit +exit: ; 0x020DE170 + stmdb sp!, {r4,lr} + ldr r1, _020DE1B8 ; =0x021D6F78 + mov r4, r0 + ldr r0, [r1, #0xc] + cmp r0, #0x0 + bne _020DE1AC + bl __destroy_global_chain + ldr r0, _020DE1B8 ; =0x021D6F78 + ldr r0, [r0, #0x4] + cmp r0, #0x0 + beq _020DE1AC + blx r0 + ldr r0, _020DE1B8 ; =0x021D6F78 + mov r1, #0x0 + str r1, [r0, #0x4] +_020DE1AC: + mov r0, r4 + bl __exit + ldmia sp!, {r4,pc} + .balign 4 +_020DE1B8: .word 0x021D6F78 + + arm_func_start __exit +__exit: ; 0x020DE1BC + stmdb sp!, {r3-r5,lr} + ldr r0, _020DE2CC ; =0x021D70D0 + bl OS_TryLockMutex +_020DE1C8: + .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A + .byte 0xF8, 0x00, 0x9F, 0xE5, 0xF8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0xF4, 0x00, 0x9F, 0xE5 + .byte 0x6C, 0x30, 0x92, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x00, 0x30, 0x81, 0xE5, 0x00, 0x20, 0x80, 0xE5 + .byte 0x15, 0x00, 0x00, 0xEA, 0xD4, 0x00, 0x9F, 0xE5, 0xD4, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5 + .byte 0x00, 0x10, 0x91, 0xE5, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A + .byte 0xC0, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2, 0x00, 0x10, 0x80, 0xE5 + .byte 0x09, 0x00, 0x00, 0xEA, 0xA0, 0x00, 0x9F, 0xE5, 0x78, 0xB7, 0xFF, 0xEB, 0x9C, 0x00, 0x9F, 0xE5 + .byte 0x9C, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0x98, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5 + .byte 0x01, 0x20, 0xA0, 0xE3, 0x00, 0x30, 0x81, 0xE5, 0x00, 0x20, 0x80, 0xE5, 0x88, 0x40, 0x9F, 0xE5 + .byte 0x08, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0xDA, 0x7C, 0x50, 0x9F, 0xE5 + .byte 0x08, 0x00, 0x94, 0xE5, 0x01, 0x10, 0x40, 0xE2, 0x01, 0x01, 0x95, 0xE7, 0x08, 0x10, 0x84, 0xE5 + .byte 0x30, 0xFF, 0x2F, 0xE1, 0x08, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0xF7, 0xFF, 0xFF, 0xCA + .byte 0x50, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x51, 0xE2, 0x00, 0x10, 0x80, 0xE5 + .byte 0x01, 0x00, 0x00, 0x1A, 0x30, 0x00, 0x9F, 0xE5, 0x40, 0xB7, 0xFF, 0xEB, 0x38, 0x00, 0x9F, 0xE5 + .byte 0x00, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A, 0x30, 0xFF, 0x2F, 0xE1 + .byte 0x24, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x8D, 0x02, 0x00, 0xEB, 0x0E, 0x39, 0x00, 0xEB, 0x38, 0x80, 0xBD, 0xE8 +_020DE2CC: .word 0x021D70D0 +_020DE2D0: + .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0x78, 0x6F, 0x1D, 0x02 + .byte 0x88, 0x6F, 0x1D, 0x02 + + arm_func_start nan +nan: ; 0x020DE2E4 + ldr r0, _020DE2F4 ; =0x02106B78 + ldr ip, _020DE2F8 ; =_f2d + ldr r0, [r0, #0x0] + bx r12 + .balign 4 +_020DE2F4: .word 0x02106B78 +_020DE2F8: .word _f2d + + arm_func_start __flush_line_buffered_output_files +__flush_line_buffered_output_files: ; 0x020DE2FC + stmdb sp!, {r3-r9,lr} + ldr r0, _020DE384 ; =0x02106A58 + mov r4, #0x0 + mov r5, #0x1 + mov r8, r0 + mvn r9, #0x0 + mov r7, r4 + mov r6, #0x4c +_020DE31C: + ldr r1, [r0, #0x4] + mov r2, r1, lsl #0x16 + movs r2, r2, lsr #0x1d + beq _020DE35C + mov r1, r1, lsl #0x19 + mov r1, r1, lsr #0x1e + tst r1, #0x1 + beq _020DE35C + ldr r1, [r0, #0x8] + mov r1, r1, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #0x1 + bne _020DE35C + bl fflush +_020DE354: + .byte 0x00, 0x00, 0x50, 0xE3, 0x09, 0x40, 0xA0, 0x11 +_020DE35C: + cmp r5, #0x3 + movge r0, r7 + bge _020DE374 + mul r0, r5, r6 + add r5, r5, #0x1 + add r0, r8, r0 +_020DE374: + cmp r0, #0x0 + bne _020DE31C + mov r0, r4 + ldmia sp!, {r3-r9,pc} + .balign 4 +_020DE384: .word 0x02106A58 + + arm_func_start __flush_all +__flush_all: ; 0x020DE388 + stmdb sp!, {r3-r9,lr} + ldr r0, _020DE3EC ; =0x02106A58 + mov r4, #0x0 + mov r5, #0x1 + mov r8, r0 + mvn r9, #0x0 + mov r7, r4 + mov r6, #0x4c +_020DE3A8: + ldr r1, [r0, #0x4] + mov r1, r1, lsl #0x16 + movs r1, r1, lsr #0x1d + beq _020DE3C4 + bl fflush +_020DE3BC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x09, 0x40, 0xA0, 0x11 +_020DE3C4: + cmp r5, #0x3 + movge r0, r7 + bge _020DE3DC + mul r0, r5, r6 + add r5, r5, #0x1 + add r0, r8, r0 +_020DE3DC: + cmp r0, #0x0 + bne _020DE3A8 + mov r0, r4 + ldmia sp!, {r3-r9,pc} + .balign 4 +_020DE3EC: .word 0x02106A58 + + arm_func_start abs +abs: ; 0x020DE3F0 + cmp r0, #0x0 + rsblt r0, r0, #0x0 + bx lr + + arm_func_start __msl_assertion_failed +__msl_assertion_failed: ; 0x020DE3FC + stmdb sp!, {r3-r4,lr} + sub sp, sp, #0x4 + mov r4, r0 + mov lr, r1 + mov r12, r2 + str r3, [sp, #0x0] + ldr r0, _020DE434 ; =0x02106B3C + mov r1, r4 + mov r2, lr + mov r3, r12 + bl printf + bl abort + add sp, sp, #0x4 + ldmia sp!, {r3-r4,pc} + .balign 4 +_020DE434: .word 0x02106B3C +__convert_from_newlines: + bx lr + + arm_func_start __convert_to_newlines +__convert_to_newlines: ; 0x020DE43C + bx lr +__prep_buffer: + ldr r1, [r0, #0x1c] + str r1, [r0, #0x24] + ldr r3, [r0, #0x20] + str r3, [r0, #0x28] + ldr r2, [r0, #0x18] + ldr r1, [r0, #0x2c] + and r1, r2, r1 + sub r1, r3, r1 + str r1, [r0, #0x28] + ldr r1, [r0, #0x18] + str r1, [r0, #0x34] + bx lr + + arm_func_start __load_buffer +__load_buffer: ; 0x020DE470 + stmdb sp!, {r4-r6,lr} + mov r5, r2 + mov r4, r0 + mov r6, r1 + bl __prep_buffer + cmp r5, #0x1 + ldreq r0, [r4, #0x20] + add r2, r4, #0x28 + streq r0, [r4, #0x28] + ldr r0, [r4, #0x0] + ldr r1, [r4, #0x1c] + ldr r3, [r4, #0x48] + ldr r12, [r4, #0x3c] + blx r12 + cmp r0, #0x2 + moveq r1, #0x0 + streq r1, [r4, #0x28] + cmp r6, #0x0 + ldrne r1, [r4, #0x28] + strne r1, [r6, #0x0] + cmp r0, #0x0 + ldmneia sp!, {r4-r6,pc} +_020DE4C8: + .byte 0x18, 0x10, 0x94, 0xE5, 0x28, 0x00, 0x94, 0xE5 + .byte 0x00, 0x00, 0x81, 0xE0, 0x18, 0x00, 0x84, 0xE5, 0x04, 0x00, 0x94, 0xE5, 0x80, 0x09, 0xA0, 0xE1 + .byte 0xA0, 0x0F, 0xB0, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x1C, 0x00, 0x94, 0xE5, 0x28, 0x10, 0x84, 0xE2 + .byte 0xD1, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x70, 0x80, 0xBD, 0xE8 +__flush_buffer: + stmdb sp!, {r3-r5,lr} + mov r5, r0 + ldr r2, [r5, #0x24] + ldr r0, [r5, #0x1c] + mov r4, r1 + subs r0, r2, r0 + beq _020DE574 + str r0, [r5, #0x28] + ldr r0, [r5, #0x4] + mov r0, r0, lsl #0x13 + movs r0, r0, lsr #0x1f + bne _020DE538 + ldr r0, [r5, #0x1c] + add r1, r5, #0x28 + bl __convert_from_newlines +_020DE538: + ldr r0, [r5, #0x0] + ldr r1, [r5, #0x1c] + ldr r3, [r5, #0x48] + ldr r12, [r5, #0x40] + add r2, r5, #0x28 + blx r12 + cmp r4, #0x0 + ldrne r1, [r5, #0x28] + strne r1, [r4, #0x0] + cmp r0, #0x0 + ldmneia sp!, {r3-r5,pc} +_020DE564: + .byte 0x18, 0x10, 0x95, 0xE5, 0x28, 0x00, 0x95, 0xE5, 0x00, 0x00, 0x81, 0xE0 + .byte 0x18, 0x00, 0x85, 0xE5 +_020DE574: + mov r0, r5 + bl __prep_buffer +_020DE57C: + .byte 0x00, 0x00, 0xA0, 0xE3 + .byte 0x38, 0x80, 0xBD, 0xE8 + + arm_func_start fread +fread: ; 0x020DE584 + stmdb sp!, {r4-r10,lr} + ldr r4, _020DE67C ; =0x02106A58 + mov r7, r3 + cmp r7, r4 + moveq r6, #0x2 + mov r10, r0 + movne r6, #0x5 + mov r0, #0x18 + mul r4, r6, r0 + ldr r5, _020DE680 ; =0x021D70D0 + mov r9, r1 + add r0, r5, r4 + mov r8, r2 + bl OS_TryLockMutex +_020DE5BC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x08, 0x00, 0x00, 0x1A, 0xB8, 0x00, 0x9F, 0xE5, 0xB8, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5 + .byte 0xB4, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7 + .byte 0x06, 0x11, 0x80, 0xE7, 0x15, 0x00, 0x00, 0xEA, 0x94, 0x00, 0x9F, 0xE5, 0x94, 0x10, 0x9F, 0xE5 + .byte 0x04, 0x00, 0x90, 0xE5, 0x06, 0x11, 0x91, 0xE7, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1 + .byte 0x04, 0x00, 0x00, 0x1A, 0x80, 0x10, 0x9F, 0xE5, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x80, 0xE2 + .byte 0x06, 0x01, 0x81, 0xE7, 0x09, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x85, 0xE0, 0x7B, 0xB6, 0xFF, 0xEB + .byte 0x5C, 0x00, 0x9F, 0xE5, 0x5C, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0x58, 0x00, 0x9F, 0xE5 + .byte 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7 + .byte 0x0A, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x07, 0x30, 0xA0, 0xE1 + .byte 0x0E, 0x00, 0x00, 0xEB, 0x30, 0x10, 0x9F, 0xE5, 0x00, 0x70, 0xA0, 0xE1, 0x06, 0x01, 0x91, 0xE7 + .byte 0x01, 0x00, 0x50, 0xE2, 0x06, 0x01, 0x81, 0xE7, 0x01, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x85, 0xE0 + .byte 0x4A, 0xB6, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1, 0xF0, 0x87, 0xBD, 0xE8 +_020DE67C: .word 0x02106A58 +_020DE680: .word 0x021D70D0 +_020DE684: + .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 + + arm_func_start __fread +__fread: ; 0x020DE690 + stmdb sp!, {r3-r10,lr} + sub sp, sp, #0x4 + mov r7, r3 + mov r9, r0 + mov r8, r1 + mov r0, r7 + mov r1, #0x0 + mov r4, r2 + bl fwide +_020DE6B4: + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x07, 0x00, 0xA0, 0xE1 + .byte 0x00, 0x10, 0xE0, 0xE3, 0x4A, 0x1A, 0x00, 0xEB, 0x98, 0x04, 0x14, 0xE0, 0x06, 0x00, 0x00, 0x0A + .byte 0x0D, 0x00, 0xD7, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x04, 0x10, 0x97, 0xE5 + .byte 0x01, 0x0B, 0xA0, 0xE1, 0xA0, 0x0E, 0xB0, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0x00, 0x00, 0xA0, 0xE3, 0xF8, 0x87, 0xBD, 0xE8, 0x81, 0x09, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1 + .byte 0x81, 0x0C, 0xA0, 0x11, 0x20, 0x0F, 0xA0, 0x11, 0x08, 0x10, 0x97, 0xE5, 0x02, 0x00, 0x50, 0x13 + .byte 0x01, 0x60, 0xA0, 0xE3, 0x81, 0x0E, 0xA0, 0xE1, 0x00, 0x60, 0xA0, 0x13, 0xA0, 0x0E, 0xB0, 0xE1 + .byte 0x09, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x97, 0xE5, 0x80, 0x0D, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 + .byte 0x01, 0x00, 0x10, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x07, 0x00, 0xC1, 0xE3, 0x02, 0x00, 0x80, 0xE3 + .byte 0x08, 0x00, 0x87, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x87, 0xE5, 0x08, 0x00, 0x97, 0xE5 + .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x02, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x2A + .byte 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC7, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2 + .byte 0x28, 0x00, 0x87, 0xE5, 0xF8, 0x87, 0xBD, 0xE8, 0x04, 0x00, 0x97, 0xE5, 0x80, 0x0C, 0xA0, 0xE1 + .byte 0x20, 0x0F, 0xA0, 0xE1, 0x01, 0x00, 0x10, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0xDA, 0xFE, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC7, 0xE5 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2, 0x28, 0x00, 0x87, 0xE5, 0xF8, 0x87, 0xBD, 0xE8 + .byte 0x00, 0x00, 0x54, 0xE3, 0x00, 0x50, 0xA0, 0xE3, 0x2D, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x97, 0xE5 + .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x03, 0x00, 0x50, 0xE3, 0x28, 0x00, 0x00, 0x3A + .byte 0x05, 0xA0, 0xA0, 0xE1, 0x07, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0x04, 0x1A, 0x00, 0xEB + .byte 0x01, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x97, 0xE5, 0x06, 0x00, 0x00, 0x1A, 0x80, 0x0E, 0xA0, 0xE1 + .byte 0x20, 0x0E, 0x87, 0xE0, 0xBE, 0x00, 0xD0, 0xE1, 0x02, 0x50, 0x85, 0xE2, 0x02, 0x40, 0x44, 0xE2 + .byte 0xB2, 0x00, 0xC9, 0xE0, 0x05, 0x00, 0x00, 0xEA, 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0x87, 0xE0 + .byte 0x0F, 0x00, 0xD0, 0xE5, 0x01, 0x50, 0x85, 0xE2, 0x01, 0x40, 0x44, 0xE2, 0x01, 0x00, 0xC9, 0xE4 + .byte 0x08, 0x10, 0x97, 0xE5, 0x00, 0x00, 0x54, 0xE3, 0x81, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 + .byte 0x01, 0x00, 0x40, 0xE2, 0x07, 0x10, 0xC1, 0xE3, 0x07, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x81, 0xE1 + .byte 0x08, 0x00, 0x87, 0xE5, 0x04, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x97, 0xE5, 0x80, 0x0E, 0xA0, 0xE1 + .byte 0xA0, 0x0E, 0xA0, 0xE1, 0x03, 0x00, 0x50, 0xE3, 0xDD, 0xFF, 0xFF, 0x2A, 0x08, 0x00, 0x97, 0xE5 + .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x02, 0x00, 0x50, 0xE3, 0x30, 0x00, 0x97, 0x05 + .byte 0x28, 0x00, 0x87, 0x05, 0x00, 0x00, 0x54, 0xE3, 0x2E, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x97, 0xE5 + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x56, 0x03, 0x2A, 0x00, 0x00, 0x0A, 0x00, 0xA0, 0xA0, 0xE3 + .byte 0x28, 0x00, 0x97, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x11, 0x00, 0x00, 0x1A, 0x07, 0x00, 0xA0, 0xE1 + .byte 0x0A, 0x10, 0xA0, 0xE1, 0x0A, 0x20, 0xA0, 0xE1, 0xF0, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x0B, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC7, 0x05 + .byte 0x03, 0x00, 0x00, 0x0A, 0x08, 0x10, 0x97, 0xE5, 0x07, 0x10, 0xC1, 0xE3, 0x08, 0x10, 0x87, 0xE5 + .byte 0x0C, 0x00, 0xC7, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x87, 0xE5, 0x00, 0x40, 0xA0, 0xE3 + .byte 0x14, 0x00, 0x00, 0xEA, 0x28, 0x00, 0x97, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x04, 0x00, 0x50, 0xE1 + .byte 0x00, 0x40, 0x8D, 0x85, 0x24, 0x10, 0x97, 0xE5, 0x00, 0x20, 0x9D, 0xE5, 0x09, 0x00, 0xA0, 0xE1 + .byte 0xCC, 0x02, 0x00, 0xEB, 0x00, 0x20, 0x9D, 0xE5, 0x24, 0x00, 0x97, 0xE5, 0x02, 0x40, 0x54, 0xE0 + .byte 0x02, 0x00, 0x80, 0xE0, 0x24, 0x00, 0x87, 0xE5, 0x28, 0x10, 0x97, 0xE5, 0x00, 0x00, 0x9D, 0xE5 + .byte 0x02, 0x90, 0x89, 0xE0, 0x00, 0x00, 0x41, 0xE0, 0x02, 0x50, 0x85, 0xE0, 0x28, 0x00, 0x87, 0xE5 + .byte 0x00, 0x00, 0x56, 0x13, 0xD5, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x54, 0xE3, 0x20, 0x00, 0x00, 0x0A + .byte 0x00, 0x00, 0x56, 0xE3, 0x1E, 0x00, 0x00, 0x1A, 0x1C, 0x60, 0x97, 0xE5, 0x20, 0xA0, 0x97, 0xE5 + .byte 0x00, 0x10, 0x8D, 0xE2, 0x1C, 0x90, 0x87, 0xE5, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE3 + .byte 0x20, 0x40, 0x87, 0xE5, 0xC1, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x00, 0x0A + .byte 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x0D, 0x00, 0xC7, 0xE5 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x87, 0xE5, 0x05, 0x00, 0x00, 0xEA, 0x08, 0x10, 0x97, 0xE5 + .byte 0x07, 0x10, 0xC1, 0xE3, 0x08, 0x10, 0x87, 0xE5, 0x0C, 0x00, 0xC7, 0xE5, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x28, 0x00, 0x87, 0xE5, 0x00, 0x10, 0x9D, 0xE5, 0x07, 0x00, 0xA0, 0xE1, 0x1C, 0x60, 0x87, 0xE5 + .byte 0x20, 0xA0, 0x87, 0xE5, 0x01, 0x50, 0x85, 0xE0, 0xA0, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x28, 0x00, 0x87, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0xA0, 0xE1, 0x2E, 0x35, 0x00, 0xEB + .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF8, 0x87, 0xBD, 0xE8 +__fwrite: + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x8 + mov r9, r3 + mov r10, r0 + str r1, [sp, #0x0] + mov r0, r9 + mov r1, #0x0 + mov r4, r2 + bl fwide +_020DE9FC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x02, 0x00, 0x00, 0x1A, 0x09, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xE0, 0xE3, 0x78, 0x19, 0x00, 0xEB + .byte 0x00, 0x00, 0x9D, 0xE5, 0x90, 0x04, 0x15, 0xE0, 0x06, 0x00, 0x00, 0x0A, 0x0D, 0x00, 0xD9, 0xE5 + .byte 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x04, 0x10, 0x99, 0xE5, 0x01, 0x0B, 0xA0, 0xE1 + .byte 0xA0, 0x0E, 0xB0, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x08, 0xD0, 0x8D, 0xE2, 0x00, 0x00, 0xA0, 0xE3 + .byte 0xF8, 0x8F, 0xBD, 0xE8, 0x81, 0x09, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1, 0x81, 0x0C, 0xA0, 0x11 + .byte 0x20, 0x0F, 0xA0, 0x11, 0x02, 0x00, 0x50, 0x13, 0x08, 0x10, 0x99, 0xE5, 0x01, 0x00, 0x50, 0x13 + .byte 0x01, 0x80, 0xA0, 0xE3, 0x81, 0x0E, 0xA0, 0xE1, 0x00, 0x80, 0xA0, 0x13, 0xA0, 0x0E, 0xB0, 0xE1 + .byte 0x09, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x99, 0xE5, 0x80, 0x0D, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 + .byte 0x02, 0x00, 0x10, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x07, 0x00, 0xC1, 0xE3, 0x01, 0x10, 0x80, 0xE3 + .byte 0x09, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0x89, 0xE5, 0x68, 0xFE, 0xFF, 0xEB, 0x08, 0x00, 0x99, 0xE5 + .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A + .byte 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC9, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x08, 0xD0, 0x8D, 0xE2 + .byte 0x28, 0x00, 0x89, 0xE5, 0xF8, 0x8F, 0xBD, 0xE8, 0x00, 0x00, 0x55, 0xE3, 0x00, 0x60, 0xA0, 0xE3 + .byte 0x46, 0x00, 0x00, 0x0A, 0x1C, 0x00, 0x99, 0xE5, 0x24, 0x20, 0x99, 0xE5, 0x00, 0x00, 0x52, 0xE1 + .byte 0x00, 0x00, 0x58, 0x03, 0x41, 0x00, 0x00, 0x0A, 0x20, 0x10, 0x99, 0xE5, 0x00, 0x00, 0x42, 0xE0 + .byte 0x00, 0x00, 0x41, 0xE0, 0x28, 0x00, 0x89, 0xE5, 0x0A, 0xB0, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3 + .byte 0x28, 0x00, 0x99, 0xE5, 0x04, 0x70, 0xA0, 0xE1, 0x04, 0x00, 0x8D, 0xE5, 0x05, 0x00, 0x50, 0xE1 + .byte 0x04, 0x50, 0x8D, 0x85, 0x04, 0x00, 0x99, 0xE5, 0x80, 0x0C, 0xA0, 0xE1, 0x20, 0x0F, 0xA0, 0xE1 + .byte 0x01, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x1A, 0x04, 0x20, 0x9D, 0xE5, 0x00, 0x00, 0x52, 0xE3 + .byte 0x06, 0x00, 0x00, 0x0A, 0x0A, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x68, 0x02, 0x00, 0xEB + .byte 0x00, 0x70, 0xB0, 0xE1, 0x01, 0x00, 0x87, 0x12, 0x0A, 0x00, 0x40, 0x10, 0x04, 0x00, 0x8D, 0x15 + .byte 0x04, 0x20, 0x9D, 0xE5, 0x00, 0x00, 0x52, 0xE3, 0x0C, 0x00, 0x00, 0x0A, 0x24, 0x00, 0x99, 0xE5 + .byte 0x0A, 0x10, 0xA0, 0xE1, 0x33, 0x02, 0x00, 0xEB, 0x04, 0x20, 0x9D, 0xE5, 0x24, 0x00, 0x99, 0xE5 + .byte 0x02, 0xA0, 0x8A, 0xE0, 0x02, 0x00, 0x80, 0xE0, 0x24, 0x00, 0x89, 0xE5, 0x28, 0x10, 0x99, 0xE5 + .byte 0x04, 0x00, 0x9D, 0xE5, 0x02, 0x50, 0x45, 0xE0, 0x00, 0x00, 0x41, 0xE0, 0x28, 0x00, 0x89, 0xE5 + .byte 0x28, 0x00, 0x99, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x57, 0xE3 + .byte 0x03, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x99, 0xE5, 0x80, 0x0C, 0xA0, 0xE1, 0x20, 0x0F, 0xB0, 0xE1 + .byte 0x09, 0x00, 0x00, 0x1A, 0x09, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x4E, 0xFE, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC9, 0xE5 + .byte 0x00, 0x50, 0xA0, 0xE3, 0x28, 0x50, 0x89, 0xE5, 0x04, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x55, 0xE3, 0x00, 0x60, 0x86, 0xE0, 0x00, 0x00, 0x58, 0x13, 0xC3, 0xFF, 0xFF, 0x1A + .byte 0x00, 0x00, 0x55, 0xE3, 0x18, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x58, 0xE3, 0x16, 0x00, 0x00, 0x1A + .byte 0x1C, 0x40, 0x99, 0xE5, 0x20, 0x70, 0x99, 0xE5, 0x05, 0x20, 0x8A, 0xE0, 0x1C, 0xA0, 0x89, 0xE5 + .byte 0x20, 0x50, 0x89, 0xE5, 0x04, 0x10, 0x8D, 0xE2, 0x09, 0x00, 0xA0, 0xE1, 0x24, 0x20, 0x89, 0xE5 + .byte 0x35, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x9D, 0x05, 0x00, 0x60, 0x86, 0x00 + .byte 0x03, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC9, 0xE5, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x28, 0x00, 0x89, 0xE5, 0x1C, 0x40, 0x89, 0xE5, 0x09, 0x00, 0xA0, 0xE1, 0x20, 0x70, 0x89, 0xE5 + .byte 0xFA, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x89, 0xE5, 0x04, 0x00, 0x99, 0xE5 + .byte 0x00, 0x10, 0x9D, 0xE5, 0x80, 0x0C, 0xA0, 0xE1, 0x20, 0x0F, 0xA0, 0xE1, 0x02, 0x00, 0x50, 0xE3 + .byte 0x00, 0x00, 0xA0, 0x13, 0x28, 0x00, 0x89, 0x15, 0x06, 0x00, 0xA0, 0xE1, 0x82, 0x34, 0x00, 0xEB + .byte 0x08, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 + + arm_func_start fclose +fclose: ; 0x020DEC88 + stmdb sp!, {r3-r5,lr} + movs r5, r0 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020DEC98: + .byte 0x04, 0x10, 0x95, 0xE5, 0x01, 0x1B, 0xA0, 0xE1 + .byte 0xA1, 0x1E, 0xB0, 0xE1, 0x00, 0x00, 0xA0, 0x03, 0x38, 0x80, 0xBD, 0x08, 0x12, 0x00, 0x00, 0xEB + .byte 0x00, 0x40, 0xA0, 0xE1, 0x00, 0x00, 0x95, 0xE5, 0x44, 0x10, 0x95, 0xE5, 0x31, 0xFF, 0x2F, 0xE1 + .byte 0x04, 0x10, 0x95, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x0E, 0x1D, 0xC1, 0xE3, 0x04, 0x10, 0x85, 0xE5 + .byte 0x00, 0x20, 0x85, 0xE5, 0x08, 0x10, 0x95, 0xE5, 0x01, 0x1E, 0xA0, 0xE1, 0xA1, 0x1F, 0xB0, 0xE1 + .byte 0x01, 0x00, 0x42, 0x12, 0x38, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x54, 0xE3, 0x00, 0x00, 0x50, 0x03 + .byte 0x01, 0x20, 0xA0, 0x13, 0x00, 0x00, 0x62, 0xE2, 0x38, 0x80, 0xBD, 0xE8 + + arm_func_start fflush +fflush: + stmdb sp!, {r4,lr} + movs r4, r0 + bne _020DED10 + bl __flush_all + ldmia sp!, {r4,pc} +_020DED10: + ldrb r0, [r4, #0xd] + cmp r0, #0x0 + bne _020DED2C + ldr r0, [r4, #0x4] + mov r1, r0, lsl #0x16 + movs r1, r1, lsr #0x1d + bne _020DED34 +_020DED2C: + mvn r0, #0x0 + ldmia sp!, {r4,pc} +_020DED34: + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + cmp r0, #0x1 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020DED48: + .byte 0x08, 0x00, 0x94, 0xE5, 0x80, 0x1E, 0xA0, 0xE1 + .byte 0xA1, 0x1E, 0xA0, 0xE1, 0x03, 0x00, 0x51, 0xE3, 0x07, 0x00, 0xC0, 0x23, 0x02, 0x00, 0x80, 0x23 + .byte 0x08, 0x00, 0x84, 0x25, 0x08, 0x00, 0x94, 0xE5, 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 + .byte 0x02, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x03, 0x28, 0x00, 0x84, 0x05, 0x08, 0x00, 0x94, 0xE5 + .byte 0x80, 0x1E, 0xA0, 0xE1, 0xA1, 0x1E, 0xA0, 0xE1, 0x01, 0x00, 0x51, 0xE3, 0x03, 0x00, 0x00, 0x0A + .byte 0x07, 0x00, 0xC0, 0xE3, 0x08, 0x00, 0x84, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x80, 0xBD, 0xE8 + .byte 0x04, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0xD3, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x10, 0xA0, 0xE3, 0x0D, 0x10, 0xC4, 0xE5 + .byte 0x28, 0x00, 0x84, 0xE5, 0x01, 0x00, 0x40, 0xE2, 0x10, 0x80, 0xBD, 0xE8, 0x08, 0x10, 0x94, 0xE5 + .byte 0x07, 0x10, 0xC1, 0xE3, 0x08, 0x10, 0x84, 0xE5, 0x18, 0x00, 0x84, 0xE5, 0x28, 0x00, 0x84, 0xE5 + .byte 0x10, 0x80, 0xBD, 0xE8 + + arm_func_start _ftell +_ftell: ; 0x020DEDE4 + ldr r1, [r0, #0x4] + mov r1, r1, lsl #0x16 + mov r1, r1, lsr #0x1d + and r1, r1, #0xff + add r1, r1, #0xff + and r1, r1, #0xff + cmp r1, #0x1 + bhi _020DEE10 + ldrb r1, [r0, #0xd] + cmp r1, #0x0 + beq _020DEE24 +_020DEE10: + ldr r0, _020DEE5C ; =0x021D74A8 + mov r1, #0x28 + str r1, [r0, #0x0] + sub r0, r1, #0x29 + bx lr +_020DEE24: + ldr r1, [r0, #0x8] + mov r1, r1, lsl #0x1d + movs r12, r1, lsr #0x1d + ldreq r0, [r0, #0x18] + bxeq lr + ldr r2, [r0, #0x24] + ldr r1, [r0, #0x1c] + ldr r3, [r0, #0x34] + sub r0, r2, r1 + cmp r12, #0x3 + add r0, r3, r0 + subcs r1, r12, #0x2 + subcs r0, r0, r1 + bx lr + .balign 4 +_020DEE5C: .word 0x021D74A8 + + arm_func_start ftell +ftell: ; 0x020DEE60 + stmdb sp!, {r3-r7,lr} + ldr r1, _020DEF60 ; =0x02106A58 + mov r7, r0 + cmp r7, r1 + moveq r6, #0x2 + beq _020DEE98 + ldr r0, _020DEF64 ; =0x02106AA4 + cmp r7, r0 + moveq r6, #0x3 + beq _020DEE98 + ldr r0, _020DEF68 ; =0x02106AF0 + cmp r7, r0 + moveq r6, #0x4 + movne r6, #0x5 +_020DEE98: + mov r0, #0x18 + mul r4, r6, r0 + ldr r5, _020DEF6C ; =0x021D70D0 + add r0, r5, r4 + bl OS_TryLockMutex +_020DEEAC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x08, 0x00, 0x00, 0x1A, 0xB4, 0x00, 0x9F, 0xE5, 0xB4, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5 + .byte 0xB0, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7 + .byte 0x06, 0x11, 0x80, 0xE7, 0x15, 0x00, 0x00, 0xEA, 0x90, 0x00, 0x9F, 0xE5, 0x90, 0x10, 0x9F, 0xE5 + .byte 0x04, 0x00, 0x90, 0xE5, 0x06, 0x11, 0x91, 0xE7, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1 + .byte 0x04, 0x00, 0x00, 0x1A, 0x7C, 0x10, 0x9F, 0xE5, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x80, 0xE2 + .byte 0x06, 0x01, 0x81, 0xE7, 0x09, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x85, 0xE0, 0x3F, 0xB4, 0xFF, 0xEB + .byte 0x58, 0x00, 0x9F, 0xE5, 0x58, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0x54, 0x00, 0x9F, 0xE5 + .byte 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7 + .byte 0x07, 0x00, 0xA0, 0xE1, 0xAA, 0xFF, 0xFF, 0xEB, 0x38, 0x10, 0x9F, 0xE5, 0x00, 0x70, 0xA0, 0xE1 + .byte 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x50, 0xE2, 0x06, 0x01, 0x81, 0xE7, 0x01, 0x00, 0x00, 0x1A + .byte 0x04, 0x00, 0x85, 0xE0, 0x11, 0xB4, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1, 0xF8, 0x80, 0xBD, 0xE8 +_020DEF60: .word 0x02106A58 +_020DEF64: .word 0x02106AA4 +_020DEF68: .word 0x02106AF0 +_020DEF6C: .word 0x021D70D0 +_020DEF70: + .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 + + arm_func_start _fseek +_fseek: ; 0x020DEF7C + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r5,lr} + mov r5, r0 + ldr r1, [r5, #0x4] + mov r4, r2 + mov r1, r1, lsl #0x16 + mov r1, r1, lsr #0x1d + and r1, r1, #0xff + cmp r1, #0x1 + ldreqb r1, [r5, #0xd] + cmpeq r1, #0x0 + beq _020DEFC8 + ldr r0, _020DF160 ; =0x021D74A8 + mov r1, #0x28 + str r1, [r0, #0x0] + sub r0, r1, #0x29 + ldmia sp!, {r3-r5,lr} + add sp, sp, #0x10 + bx lr +_020DEFC8: + ldr r1, [r5, #0x8] + mov r1, r1, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #0x1 + bne _020DF018 + mov r1, #0x0 + bl __flush_buffer +_020DEFE4: + .byte 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3 + .byte 0x0D, 0x00, 0xC5, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x60, 0x01, 0x9F, 0xE5, 0x28, 0x10, 0xA0, 0xE3 + .byte 0x28, 0x20, 0x85, 0xE5, 0x00, 0x10, 0x80, 0xE5, 0x29, 0x00, 0x41, 0xE2, 0x38, 0x40, 0xBD, 0xE8 + .byte 0x10, 0xD0, 0x8D, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1 +_020DF018: + cmp r4, #0x1 + bne _020DF038 + mov r0, r5 + mov r4, #0x0 + bl _ftell + ldr r1, [sp, #0x14] + add r0, r1, r0 + str r0, [sp, #0x14] +_020DF038: + cmp r4, #0x2 + beq _020DF0CC + ldr r0, [r5, #0x4] + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + cmp r0, #0x3 + beq _020DF0CC + ldr r0, [r5, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + sub r0, r0, #0x2 + cmp r0, #0x1 + bhi _020DF0CC + ldr r2, [sp, #0x14] + ldr r0, [r5, #0x18] + cmp r2, r0 + bhs _020DF088 + ldr r0, [r5, #0x34] + cmp r2, r0 + bhs _020DF098 +_020DF088: + ldr r0, [r5, #0x8] + bic r0, r0, #0x7 + str r0, [r5, #0x8] + b _020DF0D8 +_020DF098: + ldr r1, [r5, #0x1c] + sub r0, r2, r0 + add r0, r1, r0 + str r0, [r5, #0x24] + ldr r1, [r5, #0x18] + ldr r0, [sp, #0x14] + sub r0, r1, r0 + str r0, [r5, #0x28] + ldr r0, [r5, #0x8] + bic r0, r0, #0x7 + orr r0, r0, #0x2 + str r0, [r5, #0x8] + b _020DF0D8 +_020DF0CC: + ldr r0, [r5, #0x8] + bic r0, r0, #0x7 + str r0, [r5, #0x8] +_020DF0D8: + ldr r0, [r5, #0x8] + mov r0, r0, lsl #0x1d + movs r0, r0, lsr #0x1d + bne _020DF150 + ldr r12, [r5, #0x38] + cmp r12, #0x0 + beq _020DF13C + ldr r0, [r5, #0x0] + ldr r3, [r5, #0x48] + add r1, sp, #0x14 + mov r2, r4 + blx r12 + cmp r0, #0x0 + beq _020DF13C + mov r0, #0x1 + strb r0, [r5, #0xd] + mov r2, #0x0 + ldr r0, _020DF160 ; =0x021D74A8 + mov r1, #0x28 + str r2, [r5, #0x28] + str r1, [r0, #0x0] + sub r0, r1, #0x29 + ldmia sp!, {r3-r5,lr} + add sp, sp, #0x10 + bx lr +_020DF13C: + mov r1, #0x0 + strb r1, [r5, #0xc] + ldr r0, [sp, #0x14] + str r0, [r5, #0x18] + str r1, [r5, #0x28] +_020DF150: + mov r0, #0x0 + ldmia sp!, {r3-r5,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020DF160: .word 0x021D74A8 + + arm_func_start fseek +fseek: + stmdb sp!, {r3-r9,lr} + ldr r3, _020DF274 ; =0x02106A58 + mov r9, r0 + cmp r9, r3 + mov r8, r1 + mov r7, r2 + moveq r6, #0x2 + beq _020DF1A4 + ldr r0, _020DF278 ; =0x02106AA4 + cmp r9, r0 + moveq r6, #0x3 + beq _020DF1A4 + ldr r0, _020DF27C ; =0x02106AF0 + cmp r9, r0 + moveq r6, #0x4 + movne r6, #0x5 +_020DF1A4: + mov r0, #0x18 + mul r4, r6, r0 + ldr r5, _020DF280 ; =0x021D70D0 + add r0, r5, r4 + bl OS_TryLockMutex +_020DF1B8: + .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A + .byte 0xBC, 0x00, 0x9F, 0xE5, 0xBC, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0xB8, 0x00, 0x9F, 0xE5 + .byte 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7 + .byte 0x15, 0x00, 0x00, 0xEA, 0x98, 0x00, 0x9F, 0xE5, 0x98, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5 + .byte 0x06, 0x11, 0x91, 0xE7, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A + .byte 0x84, 0x10, 0x9F, 0xE5, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x80, 0xE2, 0x06, 0x01, 0x81, 0xE7 + .byte 0x09, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x85, 0xE0, 0x7C, 0xB3, 0xFF, 0xEB, 0x60, 0x00, 0x9F, 0xE5 + .byte 0x60, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0x5C, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x91, 0xE5 + .byte 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7, 0x09, 0x00, 0xA0, 0xE1 + .byte 0x08, 0x10, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0x4B, 0xFF, 0xFF, 0xEB, 0x38, 0x10, 0x9F, 0xE5 + .byte 0x00, 0x70, 0xA0, 0xE1, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x50, 0xE2, 0x06, 0x01, 0x81, 0xE7 + .byte 0x01, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x85, 0xE0, 0x4C, 0xB3, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1 + .byte 0xF8, 0x83, 0xBD, 0xE8 +_020DF274: .word 0x02106A58 +_020DF278: .word 0x02106AA4 +_020DF27C: .word 0x02106AF0 +_020DF280: .word 0x021D70D0 +_020DF284: + .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 + + arm_func_start rewind +rewind: ; 0x020DF290 + stmdb sp!, {r4,lr} + mov r1, #0x0 + mov r4, r0 + mov r2, r1 + strb r1, [r4, #0xd] + bl fseek +_020DF2A8: + .byte 0x00, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC4, 0xE5 + .byte 0x10, 0x80, 0xBD, 0xE8 + + arm_func_start mbtowc +mbtowc: + stmdb sp!, {r3,lr} + ldr r3, _020DF2CC ; =0x02106C98 + ldr r3, [r3, #0x8] + ldr r3, [r3, #0x0] + blx r3 + ldmia sp!, {r3,pc} + .balign 4 +_020DF2CC: .word 0x02106C98 + + arm_func_start __mbtowc_noconv +__mbtowc_noconv: ; 0x020DF2D0 + cmp r1, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r2, #0x0 + mvneq r0, #0x0 + bxeq lr + cmp r0, #0x0 + ldrneb r2, [r1, #0x0] + strneh r2, [r0, #0x0] + ldrsb r0, [r1, #0x0] + cmp r0, #0x0 + moveq r0, #0x0 + movne r0, #0x1 + bx lr + + arm_func_start __wctomb_noconv +__wctomb_noconv: ; 0x020DF308 + cmp r0, #0x0 + moveq r0, #0x0 + strneb r1, [r0, #0x0] + movne r0, #0x1 + bx lr + + arm_func_start wctomb +wctomb: ; 0x020DF31C + stmdb sp!, {r3,lr} + ldr r2, _020DF334 ; =0x02106C98 + ldr r2, [r2, #0x8] + ldr r2, [r2, #0x4] + blx r2 + ldmia sp!, {r3,pc} + .balign 4 +_020DF334: .word 0x02106C98 + + arm_func_start mbstowcs +mbstowcs: ; 0x020DF338 + stmdb sp!, {r4-r8,lr} + mov r7, r1 + mov r8, r0 + mov r0, r7 + mov r6, r2 + bl strlen + mov r5, r0 + cmp r8, #0x0 + mov r4, #0x0 + beq _020DF3B8 + cmp r6, #0x0 + bls _020DF3B8 + ldrsb r0, [r7, #0x0] + cmp r0, #0x0 + beq _020DF3A0 + mov r0, r8 + mov r1, r7 + mov r2, r5 + bl mbtowc +_020DF384: + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x80, 0x88, 0xE2, 0x00, 0x70, 0x87, 0xC0 + .byte 0x00, 0x50, 0x45, 0xC0, 0x04, 0x00, 0x00, 0xCA, 0x00, 0x00, 0xE0, 0xE3, 0xF0, 0x81, 0xBD, 0xE8 +_020DF3A0: + mov r0, #0x0 + strh r0, [r8, #0x0] + b _020DF3B8 +_020DF3AC: + .byte 0x01, 0x40, 0x84, 0xE2 + .byte 0x06, 0x00, 0x54, 0xE1, 0xEB, 0xFF, 0xFF, 0x3A +_020DF3B8: + mov r0, r4 + ldmia sp!, {r4-r8,pc} + + arm_func_start wcstombs +wcstombs: ; 0x020DF3C0 + stmdb sp!, {r3-r9,lr} + movs r4, r0 + mov r9, r1 + cmpne r9, #0x0 + mov r8, r2 + mov r7, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r3-r9,pc} +_020DF3E0: + .byte 0x00, 0x60, 0x8D, 0xE2, 0xB0, 0x10, 0xD9, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x00, 0x00, 0xA0, 0x03 + .byte 0x07, 0x00, 0xC4, 0x07, 0x0D, 0x00, 0x00, 0x0A, 0x06, 0x00, 0xA0, 0xE1, 0x02, 0x90, 0x89, 0xE2 + .byte 0xC5, 0xFF, 0xFF, 0xEB, 0x00, 0x50, 0xA0, 0xE1, 0x05, 0x00, 0x87, 0xE0, 0x08, 0x00, 0x50, 0xE1 + .byte 0x06, 0x00, 0x00, 0x8A, 0x06, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x07, 0x00, 0x84, 0xE0 + .byte 0xDA, 0x0E, 0x00, 0xEB, 0x05, 0x70, 0x87, 0xE0, 0x08, 0x00, 0x57, 0xE1, 0xEC, 0xFF, 0xFF, 0x9A + .byte 0x07, 0x00, 0xA0, 0xE1, 0xF8, 0x83, 0xBD, 0xE8 + + arm_func_start memcpy +memcpy: ; 0x020DF438 + mov r12, r0 + cmp r2, #0x0 + bxeq lr +_020DF444: + ldrsb r3, [r1], #0x1 + subs r2, r2, #0x1 + strb r3, [r12], #0x1 + bne _020DF444 + bx lr + + arm_func_start memmove +memmove: ; 0x020DF458 + cmp r1, r0 + blo _020DF480 + mov r12, r0 + cmp r2, #0x0 + bxeq lr +_020DF46C: + ldrsb r3, [r1], #0x1 + subs r2, r2, #0x1 + strb r3, [r12], #0x1 + bne _020DF46C + bx lr +_020DF480: + cmp r2, #0x0 + add r3, r1, r2 + add r12, r0, r2 + bxeq lr +_020DF490: + ldrsb r1, [r3, #-0x1]! + subs r2, r2, #0x1 + strb r1, [r12, #-0x1]! + bne _020DF490 + bx lr + + arm_func_start Call_FillMemWithValue +Call_FillMemWithValue: ; 0x020DF4A4 + stmdb sp!, {r4,lr} + mov r4, r0 + bl __fill_mem + mov r0, r4 + ldmia sp!, {r4,pc} + + arm_func_start memchr +memchr: ; 0x020DF4B8 + cmp r2, #0x0 + and r3, r1, #0xff + beq _020DF4DC +_020DF4C4: + ldrb r1, [r0], #0x1 + cmp r1, r3 + subeq r0, r0, #0x1 + bxeq lr + subs r2, r2, #0x1 + bne _020DF4C4 +_020DF4DC: + mov r0, #0x0 + bx lr + + arm_func_start __memrchr +__memrchr: ; 0x020DF4E4 + cmp r2, #0x0 + and r3, r1, #0xff + add r0, r0, r2 + beq _020DF508 +_020DF4F4: + ldrb r1, [r0, #-0x1]! + cmp r1, r3 + bxeq lr + subs r2, r2, #0x1 + bne _020DF4F4 +_020DF508: + mov r0, #0x0 + bx lr + + arm_func_start memcmp +memcmp: ; 0x020DF510 + cmp r2, #0x0 + beq _020DF548 +_020DF518: + ldrb r12, [r0], #0x1 + ldrb r3, [r1], #0x1 + cmp r12, r3 + beq _020DF540 + ldrb r2, [r0, #-0x1] + ldrb r0, [r1, #-0x1] + cmp r2, r0 + mvncc r0, #0x0 + movcs r0, #0x1 + bx lr +_020DF540: + subs r2, r2, #0x1 + bne _020DF518 +_020DF548: + mov r0, #0x0 + bx lr + + arm_func_start __fill_mem +__fill_mem: ; 0x020DF550 + cmp r2, #0x20 + and r3, r1, #0xff + blo _020DF5E4 + rsb r1, r0, #0x0 + ands r12, r1, #0x3 + beq _020DF57C + sub r2, r2, r12 + and r1, r3, #0xff +_020DF570: + strb r1, [r0], #0x1 + subs r12, r12, #0x1 + bne _020DF570 +_020DF57C: + cmp r3, #0x0 + beq _020DF594 + mov r1, r3, lsl #0x10 + orr r1, r1, r3, lsl #0x18 + orr r1, r1, r3, lsl #0x8 + orr r3, r3, r1 +_020DF594: + movs r1, r2, lsr #0x5 + beq _020DF5C8 +_020DF59C: + str r3, [r0, #0x0] + str r3, [r0, #0x4] + str r3, [r0, #0x8] + str r3, [r0, #0xc] + str r3, [r0, #0x10] + str r3, [r0, #0x14] + str r3, [r0, #0x18] + str r3, [r0, #0x1c] + add r0, r0, #0x20 + subs r1, r1, #0x1 + bne _020DF59C +_020DF5C8: + and r1, r2, #0x1f + movs r1, r1, lsr #0x2 + beq _020DF5E0 +_020DF5D4: + str r3, [r0], #0x4 + subs r1, r1, #0x1 + bne _020DF5D4 +_020DF5E0: + and r2, r2, #0x3 +_020DF5E4: + cmp r2, #0x0 + bxeq lr + and r1, r3, #0xff +_020DF5F0: + strb r1, [r0], #0x1 + subs r2, r2, #0x1 + bne _020DF5F0 + bx lr + + arm_func_start parse_format_printf +parse_format_printf: ; 0x020DF600 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + ldrsb r3, [r0, #0x1] + mov r4, #0x0 + mov r5, #0x1 + mov lr, r2 + strb r5, [sp, #0x0] + strb r4, [sp, #0x1] + strb r4, [sp, #0x2] + strb r4, [sp, #0x3] + strb r4, [sp, #0x4] + str r4, [sp, #0x8] + str r4, [sp, #0xc] + cmp r3, #0x25 + add r12, r0, #0x1 + bne _020DF65C + add r0, sp, #0x0 + strb r3, [sp, #0x5] + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add sp, sp, #0x10 + add r0, r12, #0x1 + ldmia sp!, {r4-r8,pc} +_020DF65C: + mov r2, #0x2 + mov r0, r4 + mov r5, r2 + mov r6, r4 + mov r7, #0x1 +_020DF670: + mov r8, r7 + cmp r3, #0x2b + bgt _020DF6A0 + bge _020DF6C8 + cmp r3, #0x23 + bgt _020DF6F8 + cmp r3, #0x20 + blt _020DF6F8 + beq _020DF6D0 + cmp r3, #0x23 + beq _020DF6E0 + b _020DF6F8 +_020DF6A0: + cmp r3, #0x30 + bgt _020DF6F8 + cmp r3, #0x2d + blt _020DF6F8 + beq _020DF6C0 + cmp r3, #0x30 + beq _020DF6E8 + b _020DF6F8 +_020DF6C0: + strb r6, [sp, #0x0] + b _020DF6FC +_020DF6C8: + strb r7, [sp, #0x1] + b _020DF6FC +_020DF6D0: + ldrb r4, [sp, #0x1] + cmp r4, #0x1 + strneb r5, [sp, #0x1] + b _020DF6FC +_020DF6E0: + strb r7, [sp, #0x3] + b _020DF6FC +_020DF6E8: + ldrb r4, [sp, #0x0] + cmp r4, #0x0 + strneb r2, [sp, #0x0] + b _020DF6FC +_020DF6F8: + mov r8, r0 +_020DF6FC: + cmp r8, #0x0 + ldrnesb r3, [r12, #0x1]! + bne _020DF670 + cmp r3, #0x2a + bne _020DF744 + ldr r0, [r1, #0x0] + add r0, r0, #0x4 + str r0, [r1, #0x0] + ldr r0, [r0, #-0x4] + str r0, [sp, #0x8] + cmp r0, #0x0 + bge _020DF73C + rsb r0, r0, #0x0 + mov r2, #0x0 + strb r2, [sp, #0x0] + str r0, [sp, #0x8] +_020DF73C: + ldrsb r3, [r12, #0x1]! + b _020DF794 +_020DF744: + ldr r4, _020DFB88 ; =0x0210430C + mov r5, #0x0 + mov r0, #0xa + b _020DF768 +_020DF754: + ldr r2, [sp, #0x8] + sub r3, r3, #0x30 + mla r6, r2, r0, r3 + ldrsb r3, [r12, #0x1]! + str r6, [sp, #0x8] +_020DF768: + cmp r3, #0x0 + blt _020DF778 + cmp r3, #0x80 + blt _020DF780 +_020DF778: + mov r2, r5 + b _020DF78C +_020DF780: + mov r2, r3, lsl #0x1 + ldrh r2, [r4, r2] + and r2, r2, #0x8 +_020DF78C: + cmp r2, #0x0 + bne _020DF754 +_020DF794: + ldr r2, [sp, #0x8] + ldr r0, _020DFB8C ; =0x000001FD + cmp r2, r0 + ble _020DF7C4 + mov r1, #0xff + add r0, sp, #0x0 + strb r1, [sp, #0x5] + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add sp, sp, #0x10 + add r0, r12, #0x1 + ldmia sp!, {r4-r8,pc} +_020DF7C4: + cmp r3, #0x2e + bne _020DF858 + ldrsb r3, [r12, #0x1]! + mov r0, #0x1 + strb r0, [sp, #0x2] + cmp r3, #0x2a + bne _020DF808 + ldr r0, [r1, #0x0] + add r0, r0, #0x4 + str r0, [r1, #0x0] + ldr r0, [r0, #-0x4] + ldrsb r3, [r12, #0x1]! + str r0, [sp, #0xc] + cmp r0, #0x0 + movlt r0, #0x0 + strltb r0, [sp, #0x2] + b _020DF858 +_020DF808: + ldr r2, _020DFB88 ; =0x0210430C + mov r4, #0x0 + mov r0, #0xa + b _020DF82C +_020DF818: + ldr r1, [sp, #0xc] + sub r3, r3, #0x30 + mla r5, r1, r0, r3 + ldrsb r3, [r12, #0x1]! + str r5, [sp, #0xc] +_020DF82C: + cmp r3, #0x0 + blt _020DF83C + cmp r3, #0x80 + blt _020DF844 +_020DF83C: + mov r1, r4 + b _020DF850 +_020DF844: + mov r1, r3, lsl #0x1 + ldrh r1, [r2, r1] + and r1, r1, #0x8 +_020DF850: + cmp r1, #0x0 + bne _020DF818 +_020DF858: + cmp r3, #0x6c + mov r0, #0x1 + bgt _020DF890 + cmp r3, #0x68 + blt _020DF884 + beq _020DF8AC + cmp r3, #0x6a + beq _020DF8F8 + cmp r3, #0x6c + beq _020DF8C8 + b _020DF91C +_020DF884: + cmp r3, #0x4c + beq _020DF8EC + b _020DF91C +_020DF890: + cmp r3, #0x74 + bgt _020DF8A0 + beq _020DF904 + b _020DF91C +_020DF8A0: + cmp r3, #0x7a + beq _020DF910 + b _020DF91C +_020DF8AC: + ldrsb r1, [r12, #0x1] + mov r2, #0x2 + strb r2, [sp, #0x4] + cmp r1, #0x68 + streqb r0, [sp, #0x4] + ldreqsb r3, [r12, #0x1]! + b _020DF920 +_020DF8C8: + ldrsb r1, [r12, #0x1] + mov r2, #0x3 + strb r2, [sp, #0x4] + cmp r1, #0x6c + bne _020DF920 + mov r1, #0x4 + strb r1, [sp, #0x4] + ldrsb r3, [r12, #0x1]! + b _020DF920 +_020DF8EC: + mov r1, #0x9 + strb r1, [sp, #0x4] + b _020DF920 +_020DF8F8: + mov r1, #0x6 + strb r1, [sp, #0x4] + b _020DF920 +_020DF904: + mov r1, #0x8 + strb r1, [sp, #0x4] + b _020DF920 +_020DF910: + mov r1, #0x7 + strb r1, [sp, #0x4] + b _020DF920 +_020DF91C: + mov r0, #0x0 +_020DF920: + cmp r0, #0x0 + ldrnesb r3, [r12, #0x1]! + strb r3, [sp, #0x5] + cmp r3, #0x61 + bgt _020DF974 + bge _020DFA5C + cmp r3, #0x47 + bgt _020DF968 + subs r0, r3, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020DFB68 +_020DF94C: + .byte 0x42, 0x00, 0x00, 0xEA + .byte 0x84, 0x00, 0x00, 0xEA, 0x83, 0x00, 0x00, 0xEA, 0x82, 0x00, 0x00, 0xEA, 0x50, 0x00, 0x00, 0xEA + .byte 0x2F, 0x00, 0x00, 0xEA, 0x4A, 0x00, 0x00, 0xEA +_020DF968: + cmp r3, #0x58 + beq _020DF9E8 + b _020DFB68 +_020DF974: + cmp r3, #0x63 + bgt _020DF984 + beq _020DFB04 + b _020DFB68 +_020DF984: + sub r0, r3, #0x64 + cmp r0, #0x14 + addls pc, pc, r0, lsl #0x2 + b _020DFB68 +_020DF994: + .byte 0x13, 0x00, 0x00, 0xEA, 0x41, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x00, 0xEA + .byte 0x3B, 0x00, 0x00, 0xEA, 0x6F, 0x00, 0x00, 0xEA, 0x0E, 0x00, 0x00, 0xEA, 0x6D, 0x00, 0x00, 0xEA + .byte 0x6C, 0x00, 0x00, 0xEA, 0x6B, 0x00, 0x00, 0xEA, 0x6A, 0x00, 0x00, 0xEA, 0x64, 0x00, 0x00, 0xEA + .byte 0x08, 0x00, 0x00, 0xEA, 0x45, 0x00, 0x00, 0xEA, 0x66, 0x00, 0x00, 0xEA, 0x65, 0x00, 0x00, 0xEA + .byte 0x56, 0x00, 0x00, 0xEA, 0x63, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA, 0x61, 0x00, 0x00, 0xEA + .byte 0x60, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA +_020DF9E8: + ldrb r0, [sp, #0x4] + cmp r0, #0x9 + moveq r0, #0xff + streqb r0, [sp, #0x5] + beq _020DFB70 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0xc] + beq _020DFB70 + ldrb r0, [sp, #0x0] + cmp r0, #0x2 + moveq r0, #0x1 + streqb r0, [sp, #0x0] + b _020DFB70 +_020DFA24: + .byte 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13 + .byte 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13, 0xFF, 0x00, 0xA0, 0x03 + .byte 0x05, 0x00, 0xCD, 0x05, 0x49, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3 + .byte 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x44, 0x00, 0x00, 0xEA +_020DFA5C: + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0xd + streq r0, [sp, #0xc] + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + cmpne r0, #0x1 + moveq r0, #0xff + streqb r0, [sp, #0x5] + b _020DFB70 +_020DFA94: + .byte 0x0C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 + .byte 0x0C, 0x00, 0x8D, 0x05, 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13 + .byte 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13, 0x01, 0x00, 0x50, 0x13 + .byte 0xFF, 0x00, 0xA0, 0x03, 0x05, 0x00, 0xCD, 0x05, 0x28, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xDD, 0xE5 + .byte 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x23, 0x00, 0x00, 0xEA + .byte 0x78, 0x30, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3, 0x03, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE3 + .byte 0x05, 0x30, 0xCD, 0xE5, 0x03, 0x20, 0xCD, 0xE5, 0x04, 0x10, 0xCD, 0xE5, 0x0C, 0x00, 0x8D, 0xE5 + .byte 0x1A, 0x00, 0x00, 0xEA +_020DFB04: + ldrb r1, [sp, #0x4] + cmp r1, #0x3 + moveq r0, #0x5 + streqb r0, [sp, #0x4] + beq _020DFB70 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + cmpeq r1, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x5] + b _020DFB70 +_020DFB30: + .byte 0x04, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x03, 0x04, 0x00, 0xCD, 0x05 + .byte 0x0A, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x13, 0x05, 0x00, 0xCD, 0x15 + .byte 0x06, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xDD, 0xE5, 0x09, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x03 + .byte 0x05, 0x00, 0xCD, 0x05, 0x01, 0x00, 0x00, 0xEA +_020DFB68: + mov r0, #0xff + strb r0, [sp, #0x5] +_020DFB70: + add r0, sp, #0x0 + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add r0, r12, #0x1 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020DFB88: .word 0x0210430C +_020DFB8C: .word 0x000001FD + + arm_func_start long2str +long2str: ; 0x020DFB90 + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x10 + movs r10, r0 + mov r0, #0x0 + mov r5, r1 + str r0, [sp, #0xc] + ldr r7, [sp, #0x4c] + mov r6, r0 + strb r0, [r5, #-0x1]! + ldrb r0, [sp, #0x43] + str r1, [sp, #0x0] + ldrb r8, [sp, #0x45] + str r0, [sp, #0x4] + ldr r0, [sp, #0x48] + ldrb r11, [sp, #0x41] + str r0, [sp, #0x8] + cmpeq r7, #0x0 + bne _020DFC04 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020DFBF0 + cmp r8, #0x6f + beq _020DFC04 +_020DFBF0: + add sp, sp, #0x10 + mov r0, r5 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020DFC04: + cmp r8, #0x69 + bgt _020DFC2C + bge _020DFC60 + cmp r8, #0x58 + bgt _020DFC20 + beq _020DFC8C + b _020DFC94 +_020DFC20: + cmp r8, #0x64 + beq _020DFC60 + b _020DFC94 +_020DFC2C: + cmp r8, #0x6f + bgt _020DFC40 + moveq r4, #0x8 + moveq r11, #0x0 + b _020DFC94 +_020DFC40: + cmp r8, #0x78 + bgt _020DFC94 + cmp r8, #0x75 + blt _020DFC94 + beq _020DFC80 + cmp r8, #0x78 + beq _020DFC8C + b _020DFC94 +_020DFC60: + cmp r10, #0x0 + mov r4, #0xa + bge _020DFC94 + mov r0, #0x1 + cmp r10, #0x80000000 + rsbne r10, r10, #0x0 + str r0, [sp, #0xc] + b _020DFC94 +_020DFC80: + mov r4, #0xa + mov r11, #0x0 + b _020DFC94 +_020DFC8C: + mov r4, #0x10 + mov r11, #0x0 +_020DFC94: + mov r0, r10 + mov r1, r4 + bl _u32_div_f + mov r9, r1 + mov r0, r10 + mov r1, r4 + bl _u32_div_f + cmp r9, #0xa + mov r10, r0 + addlt r9, r9, #0x30 + blt _020DFCCC + cmp r8, #0x78 + addeq r9, r9, #0x57 + addne r9, r9, #0x37 +_020DFCCC: + cmp r10, #0x0 + strb r9, [r5, #-0x1]! + add r6, r6, #0x1 + bne _020DFC94 + cmp r4, #0x8 + bne _020DFD00 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrnesb r0, [r5, #0x0] + cmpne r0, #0x30 + movne r0, #0x30 + strneb r0, [r5, #-0x1]! + addne r6, r6, #0x1 +_020DFD00: + ldrb r0, [sp, #0x40] + cmp r0, #0x2 + bne _020DFD34 + ldr r0, [sp, #0xc] + ldr r7, [sp, #0x8] + cmp r0, #0x0 + cmpeq r11, #0x0 + subne r7, r7, #0x1 + cmp r4, #0x10 + bne _020DFD34 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + subne r7, r7, #0x2 +_020DFD34: + ldr r0, [sp, #0x0] + sub r1, r0, r5 + ldr r0, _020DFDD8 ; =0x000001FD + add r1, r7, r1 + cmp r1, r0 + addgt sp, sp, #0x10 + movgt r0, #0x0 + ldmgtia sp!, {r3-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + cmp r6, r7 + bge _020DFD78 + mov r0, #0x30 +_020DFD68: + add r6, r6, #0x1 + cmp r6, r7 + strb r0, [r5, #-0x1]! + blt _020DFD68 +_020DFD78: + cmp r4, #0x10 + bne _020DFD94 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x30 + strneb r8, [r5, #-0x1] + strneb r0, [r5, #-0x2]! +_020DFD94: + ldr r0, [sp, #0xc] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r5, #-0x1]! + bne _020DFDC4 + cmp r11, #0x1 + moveq r0, #0x2b + streqb r0, [r5, #-0x1]! + beq _020DFDC4 + cmp r11, #0x2 + moveq r0, #0x20 + streqb r0, [r5, #-0x1]! +_020DFDC4: + mov r0, r5 + add sp, sp, #0x10 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020DFDD8: .word 0x000001FD + + arm_func_start longlong2str +longlong2str: ; 0x020DFDDC + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x18 + mov r9, r1 + mov r1, #0x0 + mov r10, r0 + mov r6, r2 + mov r0, r1 + strb r0, [r6, #-0x1]! + ldr r0, [sp, #0x58] + cmp r9, #0x0 + str r0, [sp, #0x10] + ldrb r0, [sp, #0x4f] + cmpeq r10, #0x0 + str r2, [sp, #0x0] + str r0, [sp, #0x4] + ldr r0, [sp, #0x54] + str r1, [sp, #0x14] + str r0, [sp, #0x8] + ldrb r0, [sp, #0x4d] + mov r7, r1 + ldrb r8, [sp, #0x51] + str r0, [sp, #0xc] + ldreq r0, [sp, #0x10] + cmpeq r0, #0x0 + bne _020DFE6C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020DFE58 + cmp r8, #0x6f + beq _020DFE6C +_020DFE58: + add sp, sp, #0x18 + mov r0, r6 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020DFE6C: + cmp r8, #0x69 + bgt _020DFE94 + bge _020DFEC4 + cmp r8, #0x58 + bgt _020DFE88 + beq _020DFF18 + b _020DFF24 +_020DFE88: + cmp r8, #0x64 + beq _020DFEC4 + b _020DFF24 +_020DFE94: + cmp r8, #0x6f + bgt _020DFEA4 + beq _020DFEF8 + b _020DFF24 +_020DFEA4: + cmp r8, #0x78 + bgt _020DFF24 + cmp r8, #0x75 + blt _020DFF24 + beq _020DFF08 + cmp r8, #0x78 + beq _020DFF18 + b _020DFF24 +_020DFEC4: + subs r0, r10, #0x0 + sbcs r0, r9, #0x0 + mov r11, #0xa + mov r5, #0x0 + bge _020DFF24 + cmp r9, #0x80000000 + cmpeq r10, r5 + beq _020DFEEC + rsbs r10, r10, #0x0 + rsc r9, r9, #0x0 +_020DFEEC: + mov r0, #0x1 + str r0, [sp, #0x14] + b _020DFF24 +_020DFEF8: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0x8 + b _020DFF24 +_020DFF08: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0xa + b _020DFF24 +_020DFF18: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0x10 +_020DFF24: + mov r0, r10 + mov r1, r9 + mov r2, r11 + mov r3, r5 + bl _ull_mod + mov r4, r0 + mov r0, r10 + mov r1, r9 + mov r2, r11 + mov r3, r5 + bl _ll_udiv + mov r10, r0 + cmp r4, #0xa + mov r9, r1 + addlt r0, r4, #0x30 + blt _020DFF70 + cmp r8, #0x78 + addeq r0, r4, #0x57 + addne r0, r4, #0x37 +_020DFF70: + strb r0, [r6, #-0x1]! + mov r0, #0x0 + cmp r9, r0 + cmpeq r10, r0 + add r7, r7, #0x1 + bne _020DFF24 + cmp r5, #0x0 + cmpeq r11, #0x8 + bne _020DFFB0 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrnesb r0, [r6, #0x0] + cmpne r0, #0x30 + movne r0, #0x30 + strneb r0, [r6, #-0x1]! + addne r7, r7, #0x1 +_020DFFB0: + ldrb r0, [sp, #0x4c] + cmp r0, #0x2 + bne _020E0000 + ldr r0, [sp, #0x8] + str r0, [sp, #0x10] + ldr r0, [sp, #0x14] + cmp r0, #0x0 + ldreq r0, [sp, #0xc] + cmpeq r0, #0x0 + ldrne r0, [sp, #0x10] + subne r0, r0, #0x1 + strne r0, [sp, #0x10] + cmp r5, #0x0 + cmpeq r11, #0x10 + bne _020E0000 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrne r0, [sp, #0x10] + subne r0, r0, #0x2 + strne r0, [sp, #0x10] +_020E0000: + ldr r0, [sp, #0x0] + ldr r1, _020E00B8 ; =0x000001FD + sub r2, r0, r6 + ldr r0, [sp, #0x10] + add r0, r0, r2 + cmp r0, r1 + addgt sp, sp, #0x18 + movgt r0, #0x0 + ldmgtia sp!, {r3-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + ldr r0, [sp, #0x10] + cmp r7, r0 + bge _020E0050 + mov r1, #0x30 +_020E003C: + ldr r0, [sp, #0x10] + add r7, r7, #0x1 + cmp r7, r0 + strb r1, [r6, #-0x1]! + blt _020E003C +_020E0050: + cmp r5, #0x0 + cmpeq r11, #0x10 + bne _020E0070 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x30 + strneb r8, [r6, #-0x1] + strneb r0, [r6, #-0x2]! +_020E0070: + ldr r0, [sp, #0x14] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r6, #-0x1]! + bne _020E00A4 + ldr r0, [sp, #0xc] + cmp r0, #0x1 + moveq r0, #0x2b + streqb r0, [r6, #-0x1]! + beq _020E00A4 + cmp r0, #0x2 + moveq r0, #0x20 + streqb r0, [r6, #-0x1]! +_020E00A4: + mov r0, r6 + add sp, sp, #0x18 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E00B8: .word 0x000001FD + + arm_func_start double2hex +double2hex: ; 0x020E00BC + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r10,lr} + sub sp, sp, #0x44 + ldr r7, [sp, #0x80] + ldr r0, _020E056C ; =0x000001FD + mov r8, r2 + cmp r7, r0 + ldrb r6, [sp, #0x79] + ldrb r5, [sp, #0x77] + ldrb r4, [sp, #0x75] + ldr r1, [sp, #0x68] + ldr r2, [sp, #0x6c] + addgt sp, sp, #0x44 + movgt r0, #0x0 + ldmgtia sp!, {r3-r10,lr} + addgt sp, sp, #0x10 + bxgt lr + mov r10, #0x0 + mov r9, #0x20 + add r0, sp, #0x8 + add r3, sp, #0xc + strb r10, [sp, #0x8] + strh r9, [sp, #0xa] + bl __num2dec_internal2 + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x6c] + bl fabs + mov r2, r0 + mov r0, r10 + mov r3, r1 + mov r1, r0 + bl _deq + bne _020E0188 + ldr r3, _020E0570 ; =0x02106DA0 + sub r0, r8, #0x6 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + add sp, sp, #0x44 + strb r2, [r8, #-0x6] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r2, [r3, #0x4] + ldrb r1, [r3, #0x5] + strb r2, [r0, #0x4] + strb r1, [r0, #0x5] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0188: + ldrb r0, [sp, #0x11] + cmp r0, #0x49 + bne _020E0298 + ldrsb r0, [sp, #0xc] + cmp r0, #0x0 + beq _020E0224 + cmp r6, #0x41 + sub r0, r8, #0x5 + bne _020E01E8 + ldr r3, _020E0574 ; =0x02106DA8 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E01E8: + ldr r3, _020E0578 ; =0x02106DB0 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0224: + cmp r6, #0x41 + sub r0, r8, #0x4 + bne _020E0264 + ldr r3, _020E057C ; =0x02106DB8 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0264: + ldr r3, _020E0580 ; =0x02106DBC + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0298: + cmp r0, #0x4e + bne _020E03A4 + ldrsb r0, [sp, #0xc] + cmp r0, #0x0 + beq _020E0330 + cmp r6, #0x41 + sub r0, r8, #0x5 + bne _020E02F4 + ldr r3, _020E0584 ; =0x02106DC0 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E02F4: + ldr r3, _020E0588 ; =0x02106DC8 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0330: + cmp r6, #0x41 + sub r0, r8, #0x4 + bne _020E0370 + ldr r3, _020E058C ; =0x02106DD0 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0370: + ldr r3, _020E0590 ; =0x02106DD4 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E03A4: + mov r3, r10 + mov r1, #0x1 + mov r0, #0x64 + add r9, sp, #0x68 + strb r1, [sp, #0x34] + strb r1, [sp, #0x35] + strb r3, [sp, #0x36] + strb r3, [sp, #0x37] + strb r3, [sp, #0x38] + str r3, [sp, #0x3c] + str r1, [sp, #0x40] + strb r0, [sp, #0x39] +_020E03D4: + rsb r1, r3, #0x7 + ldrsb r2, [r9, r3] + ldrsb r0, [r9, r1] + strb r0, [r9, r3] + add r3, r3, #0x1 + strb r2, [r9, r1] + cmp r3, #0x4 + blt _020E03D4 + ldrb r0, [sp, #0x69] + ldrb r1, [sp, #0x68] + ldr sb, _020E0594 ; =0x000007FF + mov r0, r0, lsl #0x11 + orr r1, r0, r1, lsl #0x19 + add r0, sp, #0x34 + and lr, r9, r1, lsr #0x15 + sub r12, sp, #0x8 + ldmia r0, {r0-r3} + stmia r12, {r0-r3} + rsb r0, r9, #0x400 + mov r1, r8 + add r0, lr, r0 + ldmia r12, {r2-r3} + bl long2str + cmp r6, #0x61 + moveq r1, #0x70 + movne r1, #0x50 + strb r1, [r0, #-0x1]! + mov r1, r7, lsl #0x2 + mov lr, r7 + cmp r7, #0x1 + add r8, r1, #0xb + add r12, sp, #0x68 + blt _020E04E4 + mov r9, #0x30 +_020E045C: + cmp r8, #0x40 + bge _020E04CC + ldrb r1, [r12, r8, asr #0x3] + and r2, r8, #0x7 + rsb r3, r2, #0x7 + mov r2, r1, asr r3 + sub r10, r8, #0x4 + bic r1, r8, #0x7 + bic r10, r10, #0x7 + cmp r1, r10 + add r10, r12, r8, asr #0x3 + and r1, r2, #0xff + beq _020E04A0 + ldrb r2, [r10, #-0x1] + mov r2, r2, lsl #0x8 + orr r1, r1, r2, asr r3 + and r1, r1, #0xff +_020E04A0: + and r1, r1, #0xf + cmp r1, #0xa + addcc r1, r1, #0x30 + andcc r1, r1, #0xff + blo _020E04D0 + cmp r6, #0x61 + addeq r1, r1, #0x57 + andeq r1, r1, #0xff + addne r1, r1, #0x37 + andne r1, r1, #0xff + b _020E04D0 +_020E04CC: + mov r1, r9 +_020E04D0: + sub lr, lr, #0x1 + cmp lr, #0x1 + strb r1, [r0, #-0x1]! + sub r8, r8, #0x4 + bge _020E045C +_020E04E4: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r1, #0x2e + strneb r1, [r0, #-0x1]! + mov r1, #0x31 + strb r1, [r0, #-0x1] + cmp r6, #0x61 + moveq r1, #0x78 + movne r1, #0x58 + strb r1, [r0, #-0x2]! + mov r1, #0x30 + strb r1, [r0, #-0x1]! + ldrsb r1, [sp, #0xc] + cmp r1, #0x0 + movne r1, #0x2d + strneb r1, [r0, #-0x1]! + addne sp, sp, #0x44 + ldmneia sp!, {r3-r10,lr} + addne sp, sp, #0x10 + bxne lr + cmp r4, #0x1 + moveq r1, #0x2b + streqb r1, [r0, #-0x1]! + addeq sp, sp, #0x44 + ldmeqia sp!, {r3-r10,lr} + addeq sp, sp, #0x10 + bxeq lr + cmp r4, #0x2 + moveq r1, #0x20 + streqb r1, [r0, #-0x1]! + add sp, sp, #0x44 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E056C: .word 0x000001FD +_020E0570: .word 0x02106DA0 +_020E0574: .word 0x02106DA8 +_020E0578: .word 0x02106DB0 +_020E057C: .word 0x02106DB8 +_020E0580: .word 0x02106DBC +_020E0584: .word 0x02106DC0 +_020E0588: .word 0x02106DC8 +_020E058C: .word 0x02106DD0 +_020E0590: .word 0x02106DD4 +_020E0594: .word 0x000007FF + + arm_func_start round_decimal +round_decimal: ; 0x020E0598 + stmdb sp!, {r4,lr} + cmp r1, #0x0 + bge _020E05C0 + mov r1, #0x0 + strh r1, [r0, #0x2] + mov r1, #0x1 + strb r1, [r0, #0x4] + mov r1, #0x30 + strb r1, [r0, #0x5] + ldmia sp!, {r4,pc} +_020E05C0: + ldrb lr, [r0, #0x4] + cmp r1, lr + ldmgeia sp!, {r4,pc} +_020E05CC: + .byte 0x05, 0xC0, 0x80, 0xE2 + .byte 0x01, 0x20, 0x8C, 0xE0, 0x01, 0x20, 0x82, 0xE2, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2 + .byte 0x03, 0x3C, 0xA0, 0xE1, 0x43, 0x3C, 0xA0, 0xE1, 0x05, 0x00, 0x53, 0xE3, 0x0B, 0x00, 0x00, 0x1A + .byte 0x0E, 0xC0, 0x8C, 0xE0, 0x01, 0xC0, 0x4C, 0xE2, 0x02, 0x00, 0x5C, 0xE1, 0x02, 0x00, 0x00, 0x9A + .byte 0xD0, 0x30, 0xDC, 0xE1, 0x30, 0x00, 0x53, 0xE3, 0xF9, 0xFF, 0xFF, 0x0A, 0x02, 0x00, 0x5C, 0xE1 + .byte 0xD1, 0x30, 0x52, 0x01, 0x01, 0x40, 0x03, 0x02, 0x01, 0x40, 0xA0, 0x13, 0x01, 0x00, 0x00, 0xEA + .byte 0x01, 0x40, 0xA0, 0xC3, 0x00, 0x40, 0xA0, 0xD3, 0x00, 0x00, 0x51, 0xE3, 0x14, 0x00, 0x00, 0x0A + .byte 0x00, 0xC0, 0xA0, 0xE3, 0x01, 0xE0, 0xA0, 0xE3, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2 + .byte 0x04, 0x30, 0x83, 0xE0, 0x03, 0x3C, 0xA0, 0xE1, 0x43, 0x3C, 0xA0, 0xE1, 0x09, 0x00, 0x53, 0xE3 + .byte 0x0E, 0x40, 0xA0, 0xC1, 0x0C, 0x40, 0xA0, 0xD1, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x1A + .byte 0x00, 0x00, 0x53, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x41, 0xE2, 0x02, 0x00, 0x00, 0xEA + .byte 0x30, 0x30, 0x83, 0xE2, 0x00, 0x30, 0xC2, 0xE5, 0x01, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3 + .byte 0xEC, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x54, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0xF2, 0x30, 0xD0, 0xE1 + .byte 0x01, 0x20, 0xA0, 0xE3, 0x31, 0x10, 0xA0, 0xE3, 0x01, 0x30, 0x83, 0xE2, 0xB2, 0x30, 0xC0, 0xE1 + .byte 0x04, 0x20, 0xC0, 0xE5, 0x05, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x51, 0xE3 + .byte 0xBB, 0xFF, 0xFF, 0x0A, 0x04, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8 + + arm_func_start float2str +float2str: ; 0x020E06BC + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x2c + ldr r7, [sp, #0x68] + ldr r3, _020E0DF4 ; =0x000001FD + ldrb r6, [sp, #0x61] + ldrb r5, [sp, #0x5f] + ldrb r4, [sp, #0x5d] + cmp r7, r3 + mov r10, r0 + mov r8, r1 + mov r9, r2 + addgt sp, sp, #0x2c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + mov r12, #0x0 + mov r11, #0x20 + add r0, sp, #0x0 + add r3, sp, #0x4 + mov r1, r10 + mov r2, r8 + strb r12, [sp, #0x0] + strh r11, [sp, #0x2] + bl __num2dec_internal2 + ldrb r0, [sp, #0x8] + add r1, sp, #0x9 + add r0, r1, r0 + b _020E074C +_020E0734: + ldrb r2, [sp, #0x8] + ldrsh r1, [sp, #0x6] + sub r2, r2, #0x1 + add r1, r1, #0x1 + strb r2, [sp, #0x8] + strh r1, [sp, #0x6] +_020E074C: + ldrb r1, [sp, #0x8] + cmp r1, #0x1 + bls _020E0764 + ldrsb r1, [r0, #-0x1]! + cmp r1, #0x30 + beq _020E0734 +_020E0764: + ldrb r0, [sp, #0x9] + cmp r0, #0x30 + beq _020E0784 + cmp r0, #0x49 + beq _020E0790 + cmp r0, #0x4e + beq _020E08F0 + b _020E0A44 +_020E0784: + mov r0, #0x0 + strh r0, [sp, #0x6] + b _020E0A44 +_020E0790: + mov r2, #0x0 + mov r0, r10 + mov r1, r8 + mov r3, r2 + bl _dls + bhs _020E0854 + cmp r6, #0x0 + sub r0, r9, #0x5 + blt _020E07BC + cmp r6, #0x80 + blt _020E07C4 +_020E07BC: + mov r1, #0x0 + b _020E07D4 +_020E07C4: + ldr r1, _020E0DF8 ; =0x0210430C + mov r2, r6, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020E07D4: + cmp r1, #0x0 + beq _020E0818 + ldr r3, _020E0DFC ; =0x02106DA8 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0818: + ldr r3, _020E0E00 ; =0x02106DB0 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0854: + cmp r6, #0x0 + sub r0, r9, #0x4 + blt _020E0868 + cmp r6, #0x80 + blt _020E0870 +_020E0868: + mov r1, #0x0 + b _020E0880 +_020E0870: + ldr r1, _020E0DF8 ; =0x0210430C + mov r2, r6, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020E0880: + cmp r1, #0x0 + beq _020E08BC + ldr r3, _020E0E04 ; =0x02106DB8 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E08BC: + ldr r3, _020E0E08 ; =0x02106DBC + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E08F0: + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + beq _020E09A8 + cmp r6, #0x0 + sub r0, r9, #0x5 + blt _020E0910 + cmp r6, #0x80 + blt _020E0918 +_020E0910: + mov r1, #0x0 + b _020E0928 +_020E0918: + ldr r1, _020E0DF8 ; =0x0210430C + mov r2, r6, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020E0928: + cmp r1, #0x0 + beq _020E096C + ldr r3, _020E0E0C ; =0x02106DC0 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E096C: + ldr r3, _020E0E10 ; =0x02106DC8 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E09A8: + cmp r6, #0x0 + sub r0, r9, #0x4 + blt _020E09BC + cmp r6, #0x80 + blt _020E09C4 +_020E09BC: + mov r1, #0x0 + b _020E09D4 +_020E09C4: + ldr r1, _020E0DF8 ; =0x0210430C + mov r2, r6, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020E09D4: + cmp r1, #0x0 + beq _020E0A10 + ldr r3, _020E0E14 ; =0x02106DD0 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0A10: + ldr r3, _020E0E18 ; =0x02106DD4 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0A44: + ldrb r0, [sp, #0x8] + ldrsh r1, [sp, #0x6] + sub r8, r9, #0x1 + sub r0, r0, #0x1 + add r0, r1, r0 + strh r0, [sp, #0x6] + mov r0, #0x0 + strb r0, [r8, #0x0] + cmp r6, #0x65 + bgt _020E0A98 + bge _020E0B24 + cmp r6, #0x47 + bgt _020E0DE0 + cmp r6, #0x45 + blt _020E0DE0 + beq _020E0B24 + cmp r6, #0x46 + beq _020E0C6C + cmp r6, #0x47 + beq _020E0AB0 + b _020E0DE0 +_020E0A98: + cmp r6, #0x66 + bgt _020E0AA8 + beq _020E0C6C + b _020E0DE0 +_020E0AA8: + cmp r6, #0x67 + bne _020E0DE0 +_020E0AB0: + ldrb r0, [sp, #0x8] + cmp r0, r7 + ble _020E0AC8 + add r0, sp, #0x4 + mov r1, r7 + bl round_decimal +_020E0AC8: + ldrsh r2, [sp, #0x6] + mvn r0, #0x3 + cmp r2, r0 + blt _020E0AE0 + cmp r2, r7 + blt _020E0B00 +_020E0AE0: + cmp r5, #0x0 + ldreqb r0, [sp, #0x8] + subne r7, r7, #0x1 + subeq r7, r0, #0x1 + cmp r6, #0x67 + moveq r6, #0x65 + movne r6, #0x45 + b _020E0B24 +_020E0B00: + cmp r5, #0x0 + addne r0, r2, #0x1 + subne r7, r7, r0 + bne _020E0C6C + ldrb r1, [sp, #0x8] + add r0, r2, #0x1 + subs r7, r1, r0 + movmi r7, #0x0 + b _020E0C6C +_020E0B24: + ldrb r0, [sp, #0x8] + add r1, r7, #0x1 + cmp r0, r1 + ble _020E0B3C + add r0, sp, #0x4 + bl round_decimal +_020E0B3C: + ldrsh lr, [sp, #0x6] + mov r11, #0x2b + mov r10, #0x0 + cmp lr, #0x0 + rsblt lr, lr, #0x0 + movlt r11, #0x2d + ldr r3, _020E0E1C ; =0x66666667 + mov r0, #0xa + b _020E0B90 +_020E0B60: + mov r1, lr, lsr #0x1f + smull r2, r12, r3, lr + add r12, r1, r12, asr #0x2 + smull r1, r2, r0, r12 + sub r12, lr, r1 + add r1, r12, #0x30 + strb r1, [r8, #-0x1]! + mov r2, lr + smull r1, lr, r3, r2 + mov r1, r2, lsr #0x1f + add lr, r1, lr, asr #0x2 + add r10, r10, #0x1 +_020E0B90: + cmp lr, #0x0 + bne _020E0B60 + cmp r10, #0x2 + blt _020E0B60 + strb r11, [r8, #-0x1] + strb r6, [r8, #-0x2]! + sub r1, r9, r8 + ldr r0, _020E0DF4 ; =0x000001FD + add r1, r7, r1 + cmp r1, r0 + addgt sp, sp, #0x2c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + ldrb r1, [sp, #0x8] + add r0, r7, #0x1 + cmp r1, r0 + bge _020E0BFC + add r0, r7, #0x2 + sub r0, r0, r1 + subs r1, r0, #0x1 + beq _020E0BFC + mov r0, #0x30 +_020E0BF0: + strb r0, [r8, #-0x1]! + subs r1, r1, #0x1 + bne _020E0BF0 +_020E0BFC: + ldrb r1, [sp, #0x8] + add r0, sp, #0x9 + add r2, r0, r1 + subs r1, r1, #0x1 + beq _020E0C20 +_020E0C10: + ldrsb r0, [r2, #-0x1]! + subs r1, r1, #0x1 + strb r0, [r8, #-0x1]! + bne _020E0C10 +_020E0C20: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r0, #0x2e + strneb r0, [r8, #-0x1]! + ldrb r0, [sp, #0x9] + strb r0, [r8, #-0x1]! + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r8, #-0x1]! + bne _020E0DE0 + cmp r4, #0x1 + moveq r0, #0x2b + streqb r0, [r8, #-0x1]! + beq _020E0DE0 + cmp r4, #0x2 + moveq r0, #0x20 + streqb r0, [r8, #-0x1]! + b _020E0DE0 +_020E0C6C: + ldrsh r3, [sp, #0x6] + ldrb r2, [sp, #0x8] + sub r0, r2, r3 + subs r1, r0, #0x1 + movmi r1, #0x0 + cmp r1, r7 + ble _020E0CAC + sub r1, r1, r7 + add r0, sp, #0x4 + sub r1, r2, r1 + bl round_decimal + ldrsh r3, [sp, #0x6] + ldrb r2, [sp, #0x8] + sub r0, r2, r3 + subs r1, r0, #0x1 + movmi r1, #0x0 +_020E0CAC: + adds r0, r3, #0x1 + movmi r0, #0x0 + ldr r3, _020E0DF4 ; =0x000001FD + add r6, r0, r1 + cmp r6, r3 + addgt sp, sp, #0x2c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + add r3, sp, #0x9 + sub r6, r7, r1 + cmp r6, #0x0 + add r2, r3, r2 + mov r9, #0x0 + ble _020E0D00 + mov r3, #0x30 +_020E0CF0: + add r9, r9, #0x1 + cmp r9, r6 + strb r3, [r8, #-0x1]! + blt _020E0CF0 +_020E0D00: + mov r6, #0x0 + b _020E0D14 +_020E0D08: + ldrsb r3, [r2, #-0x1]! + add r6, r6, #0x1 + strb r3, [r8, #-0x1]! +_020E0D14: + cmp r6, r1 + ldrltb r3, [sp, #0x8] + cmplt r6, r3 + blt _020E0D08 + cmp r6, r1 + bge _020E0D40 + mov r3, #0x30 +_020E0D30: + add r6, r6, #0x1 + cmp r6, r1 + strb r3, [r8, #-0x1]! + blt _020E0D30 +_020E0D40: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r1, #0x2e + strneb r1, [r8, #-0x1]! + cmp r0, #0x0 + beq _020E0DA8 + ldrb r1, [sp, #0x8] + mov r5, #0x0 + sub r1, r0, r1 + cmp r1, #0x0 + ble _020E0D88 + mov r3, #0x30 +_020E0D70: + strb r3, [r8, #-0x1]! + ldrb r1, [sp, #0x8] + add r5, r5, #0x1 + sub r1, r0, r1 + cmp r5, r1 + blt _020E0D70 +_020E0D88: + cmp r5, r0 + bge _020E0DB0 +_020E0D90: + ldrsb r1, [r2, #-0x1]! + add r5, r5, #0x1 + cmp r5, r0 + strb r1, [r8, #-0x1]! + blt _020E0D90 + b _020E0DB0 +_020E0DA8: + mov r0, #0x30 + strb r0, [r8, #-0x1]! +_020E0DB0: + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r8, #-0x1]! + bne _020E0DE0 + cmp r4, #0x1 + moveq r0, #0x2b + streqb r0, [r8, #-0x1]! + beq _020E0DE0 + cmp r4, #0x2 + moveq r0, #0x20 + streqb r0, [r8, #-0x1]! +_020E0DE0: + mov r0, r8 + add sp, sp, #0x2c + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E0DF4: .word 0x000001FD +_020E0DF8: .word 0x0210430C +_020E0DFC: .word 0x02106DA8 +_020E0E00: .word 0x02106DB0 +_020E0E04: .word 0x02106DB8 +_020E0E08: .word 0x02106DBC +_020E0E0C: .word 0x02106DC0 +_020E0E10: .word 0x02106DC8 +_020E0E14: .word 0x02106DD0 +_020E0E18: .word 0x02106DD4 +_020E0E1C: .word 0x66666667 +__pformatter: + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x22c + mov r3, #0x20 + mov r11, r2 + strb r3, [sp, #0x19] + ldrsb r2, [r11, #0x0] + mov r9, r0 + mov r8, r1 + cmp r2, #0x0 + mov r10, #0x0 + beq _020E1628 +_020E0E50: + mov r0, r11 + mov r1, #0x25 + bl strchr + str r0, [sp, #0xc] + cmp r0, #0x0 + bne _020E0EA4 + mov r0, r11 + bl strlen + movs r2, r0 + add r10, r10, r2 + beq _020E1628 + mov r0, r8 + mov r1, r11 + blx r9 + cmp r0, #0x0 + bne _020E1628 + add sp, sp, #0x22c + mvn r0, #0x0 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0EA4: + subs r2, r0, r11 + add r10, r10, r2 + beq _020E0ED4 + mov r0, r8 + mov r1, r11 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E0ED4: + ldr r0, [sp, #0xc] + add r1, sp, #0x25c + add r2, sp, #0x1c + bl parse_format_printf + ldrb r1, [sp, #0x21] + mov r11, r0 + cmp r1, #0x61 + bgt _020E0F40 + bge _020E12A4 + cmp r1, #0x47 + bgt _020E0F34 + subs r0, r1, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020E0F28 +_020E0F0C: + .byte 0xE4, 0x00, 0x00, 0xEA + .byte 0x5D, 0x01, 0x00, 0xEA, 0x5C, 0x01, 0x00, 0xEA, 0x5B, 0x01, 0x00, 0xEA, 0xC6, 0x00, 0x00, 0xEA + .byte 0xC5, 0x00, 0x00, 0xEA, 0xC4, 0x00, 0x00, 0xEA +_020E0F28: + cmp r1, #0x25 + beq _020E1478 + b _020E148C +_020E0F34: + cmp r1, #0x58 + beq _020E1100 + b _020E148C +_020E0F40: + cmp r1, #0x75 + bgt _020E0FA8 + subs r0, r1, #0x64 + addpl pc, pc, r0, lsl #0x2 + b _020E0F9C +_020E0F54: + .byte 0x19, 0x00, 0x00, 0xEA, 0xB7, 0x00, 0x00, 0xEA, 0xB6, 0x00, 0x00, 0xEA + .byte 0xB5, 0x00, 0x00, 0xEA, 0x48, 0x01, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x46, 0x01, 0x00, 0xEA + .byte 0x45, 0x01, 0x00, 0xEA, 0x44, 0x01, 0x00, 0xEA, 0x43, 0x01, 0x00, 0xEA, 0x12, 0x01, 0x00, 0xEA + .byte 0x5E, 0x00, 0x00, 0xEA, 0x40, 0x01, 0x00, 0xEA, 0x3F, 0x01, 0x00, 0xEA, 0x3E, 0x01, 0x00, 0xEA + .byte 0xDD, 0x00, 0x00, 0xEA, 0x3C, 0x01, 0x00, 0xEA, 0x58, 0x00, 0x00, 0xEA +_020E0F9C: + cmp r1, #0x63 + beq _020E1458 + b _020E148C +_020E0FA8: + cmp r1, #0x78 + bgt _020E0FB8 + beq _020E1100 + b _020E148C +_020E0FB8: + cmp r1, #0xff + b _020E148C +_020E0FC0: + .byte 0x20, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5 + .byte 0x04, 0x10, 0x81, 0xE2, 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x50, 0x11, 0xE5, 0x25, 0x00, 0x00, 0xEA + .byte 0x04, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5, 0x08, 0x20, 0x81, 0xE2 + .byte 0x5C, 0x22, 0x8D, 0xE5, 0x08, 0x10, 0x12, 0xE5, 0x10, 0x10, 0x8D, 0xE5, 0x04, 0x10, 0x12, 0xE5 + .byte 0x14, 0x10, 0x8D, 0xE5, 0x1B, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A + .byte 0x5C, 0x12, 0x9D, 0xE5, 0x08, 0x20, 0x81, 0xE2, 0x5C, 0x22, 0x8D, 0xE5, 0x08, 0x10, 0x12, 0xE5 + .byte 0x10, 0x10, 0x8D, 0xE5, 0x04, 0x10, 0x12, 0xE5, 0x14, 0x10, 0x8D, 0xE5, 0x11, 0x00, 0x00, 0xEA + .byte 0x07, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2 + .byte 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x50, 0x11, 0xE5, 0x0A, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x50, 0xE3 + .byte 0x04, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2, 0x5C, 0x12, 0x8D, 0xE5 + .byte 0x04, 0x50, 0x11, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x5C, 0x12, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2 + .byte 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x50, 0x11, 0xE5, 0x02, 0x00, 0x50, 0xE3, 0x05, 0x18, 0xA0, 0x01 + .byte 0x41, 0x58, 0xA0, 0x01, 0x01, 0x00, 0x50, 0xE3, 0x05, 0x1C, 0xA0, 0x01, 0x41, 0x5C, 0xA0, 0x01 + .byte 0x04, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13, 0x1C, 0x00, 0x8D, 0xE2, 0x0A, 0x00, 0x00, 0x1A + .byte 0x04, 0x40, 0x4D, 0xE2, 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x84, 0xE8, 0x00, 0x30, 0x94, 0xE5 + .byte 0x10, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x9D, 0xE5, 0x8B, 0x2F, 0x8D, 0xE2, 0x46, 0xFB, 0xFF, 0xEB + .byte 0x00, 0x70, 0xB0, 0xE1, 0xF0, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x00, 0xEA, 0x08, 0x40, 0x4D, 0xE2 + .byte 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x84, 0xE8, 0x8B, 0x1F, 0x8D, 0xE2, 0x05, 0x00, 0xA0, 0xE1 + .byte 0x0C, 0x00, 0x94, 0xE8, 0xA9, 0xFA, 0xFF, 0xEB, 0x00, 0x70, 0xB0, 0xE1, 0xE6, 0x00, 0x00, 0x0A + .byte 0x02, 0x0C, 0x8D, 0xE2, 0x2B, 0x00, 0x80, 0xE2, 0x07, 0x60, 0x40, 0xE0, 0xF5, 0x00, 0x00, 0xEA +_020E1100: + ldrb r0, [sp, #0x20] + cmp r0, #0x3 + bne _020E1120 + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E11B8 +_020E1120: + cmp r0, #0x4 + bne _020E1148 + ldr r1, [sp, #0x25c] + add r2, r1, #0x8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E11B8 +_020E1148: + cmp r0, #0x6 + bne _020E1170 + ldr r1, [sp, #0x25c] + add r2, r1, #0x8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E11B8 +_020E1170: + cmp r0, #0x7 + bne _020E118C + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E11B8 +_020E118C: + cmp r0, #0x8 + bne _020E11A8 + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E11B8 +_020E11A8: + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] +_020E11B8: + cmp r0, #0x2 + moveq r1, r5, lsl #0x10 + moveq r5, r1, lsr #0x10 + cmp r0, #0x1 + andeq r5, r5, #0xff + cmp r0, #0x4 + cmpne r0, #0x6 + add r0, sp, #0x1c + bne _020E1208 + sub r4, sp, #0x4 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + ldr r3, [r4, #0x0] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r2, sp, #0x22c + bl longlong2str + movs r7, r0 + beq _020E148C + b _020E122C +_020E1208: + sub r4, sp, #0x8 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + add r1, sp, #0x22c + mov r0, r5 + ldmia r4, {r2-r3} + bl long2str + movs r7, r0 + beq _020E148C +_020E122C: + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _020E14D8 +_020E123C: + .byte 0x20, 0x00, 0xDD, 0xE5 + .byte 0x09, 0x00, 0x50, 0xE3, 0x5C, 0x02, 0x9D, 0x15, 0x08, 0x00, 0x80, 0x12, 0x5C, 0x02, 0x8D, 0x15 + .byte 0x02, 0x00, 0x00, 0x1A, 0x5C, 0x02, 0x9D, 0xE5, 0x08, 0x00, 0x80, 0xE2, 0x5C, 0x02, 0x8D, 0xE5 + .byte 0x08, 0x70, 0x10, 0xE5, 0x04, 0x60, 0x10, 0xE5, 0x1C, 0x00, 0x8D, 0xE2, 0x04, 0x40, 0x4D, 0xE2 + .byte 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x84, 0xE8, 0x00, 0x30, 0x94, 0xE5, 0x07, 0x00, 0xA0, 0xE1 + .byte 0x06, 0x10, 0xA0, 0xE1, 0x8B, 0x2F, 0x8D, 0xE2, 0x0B, 0xFD, 0xFF, 0xEB, 0x00, 0x70, 0xB0, 0xE1 + .byte 0x7D, 0x00, 0x00, 0x0A, 0x02, 0x0C, 0x8D, 0xE2, 0x2B, 0x00, 0x80, 0xE2, 0x07, 0x60, 0x40, 0xE0 + .byte 0x8C, 0x00, 0x00, 0xEA +_020E12A4: + ldrb r0, [sp, #0x20] + cmp r0, #0x9 + ldrne r0, [sp, #0x25c] + addne r0, r0, #0x8 + strne r0, [sp, #0x25c] + bne _020E12C8 + ldr r0, [sp, #0x25c] + add r0, r0, #0x8 + str r0, [sp, #0x25c] +_020E12C8: + ldr r7, [r0, #-0x8] + ldr r6, [r0, #-0x4] + add r0, sp, #0x1c + sub r4, sp, #0x4 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + ldr r3, [r4, #0x0] + mov r0, r7 + mov r1, r6 + add r2, sp, #0x22c + bl double2hex + movs r7, r0 + beq _020E148C + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _020E14D8 +_020E130C: + .byte 0x20, 0x00, 0xDD, 0xE5 + .byte 0x05, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x00, 0x1A, 0x5C, 0x02, 0x9D, 0xE5, 0x02, 0x2C, 0xA0, 0xE3 + .byte 0x04, 0x00, 0x80, 0xE2, 0x5C, 0x02, 0x8D, 0xE5, 0x04, 0x10, 0x10, 0xE5, 0x2C, 0x00, 0x8D, 0xE2 + .byte 0x00, 0x00, 0x51, 0xE3, 0x00, 0x13, 0x9F, 0x05, 0x20, 0xF8, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x51, 0x00, 0x00, 0xBA, 0x2C, 0x70, 0x8D, 0xE2, 0x03, 0x00, 0x00, 0xEA, 0x5C, 0x02, 0x9D, 0xE5 + .byte 0x04, 0x00, 0x80, 0xE2, 0x5C, 0x02, 0x8D, 0xE5, 0x04, 0x70, 0x10, 0xE5, 0x1F, 0x00, 0xDD, 0xE5 + .byte 0x00, 0x00, 0x57, 0xE3, 0xD4, 0x72, 0x9F, 0x05, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A + .byte 0x1E, 0x00, 0xDD, 0xE5, 0x01, 0x60, 0xD7, 0xE4, 0x00, 0x00, 0x50, 0xE3, 0x55, 0x00, 0x00, 0x0A + .byte 0x28, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x56, 0xE1, 0x00, 0x60, 0xA0, 0xC1, 0x51, 0x00, 0x00, 0xEA + .byte 0x1E, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0x28, 0x60, 0x9D, 0xE5 + .byte 0x07, 0x00, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x41, 0xF8, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x07, 0x60, 0x40, 0x10, 0x46, 0x00, 0x00, 0xEA, 0x07, 0x00, 0xA0, 0xE1 + .byte 0xB9, 0x06, 0x00, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x42, 0x00, 0x00, 0xEA, 0x5C, 0x12, 0x9D, 0xE5 + .byte 0x20, 0x00, 0xDD, 0xE5, 0x04, 0x10, 0x81, 0xE2, 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x10, 0x11, 0xE5 + .byte 0x08, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x8B, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA + .byte 0x89, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x11, 0x00, 0x00, 0xEA + .byte 0x85, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA + .byte 0x00, 0xA0, 0x81, 0xE5, 0x80, 0x00, 0x00, 0xEA, 0xB0, 0xA0, 0xC1, 0xE1, 0x7E, 0x00, 0x00, 0xEA + .byte 0x00, 0xA0, 0x81, 0xE5, 0x7C, 0x00, 0x00, 0xEA, 0x00, 0xA0, 0x81, 0xE5, 0xCA, 0x0F, 0xA0, 0xE1 + .byte 0x04, 0x00, 0x81, 0xE5, 0x78, 0x00, 0x00, 0xEA, 0x00, 0xA0, 0x81, 0xE5, 0x76, 0x00, 0x00, 0xEA + .byte 0x00, 0xA0, 0x81, 0xE5, 0x74, 0x00, 0x00, 0xEA, 0x00, 0xA0, 0x81, 0xE5, 0xCA, 0x0F, 0xA0, 0xE1 + .byte 0x04, 0x00, 0x81, 0xE5, 0x70, 0x00, 0x00, 0xEA +_020E1458: + ldr r0, [sp, #0x25c] + add r7, sp, #0x2c + add r0, r0, #0x4 + str r0, [sp, #0x25c] + ldr r0, [r0, #-0x4] + mov r6, #0x1 + strb r0, [sp, #0x2c] + b _020E14D8 +_020E1478: + mov r0, #0x25 + strb r0, [sp, #0x2c] + add r7, sp, #0x2c + mov r6, #0x1 + b _020E14D8 +_020E148C: + ldr r0, [sp, #0xc] + bl strlen + movs r4, r0 + beq _020E14C4 + ldr r1, [sp, #0xc] + mov r0, r8 + mov r2, r4 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E14C4: + add sp, sp, #0x22c + add r0, r10, r4 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E14D8: + ldrb r0, [sp, #0x1c] + mov r4, r6 + cmp r0, #0x0 + beq _020E158C + cmp r0, #0x2 + moveq r0, #0x30 + movne r0, #0x20 + strb r0, [sp, #0x19] + ldrsb r0, [r7, #0x0] + cmp r0, #0x2b + cmpne r0, #0x2d + cmpne r0, #0x20 + bne _020E1548 + ldrsb r0, [sp, #0x19] + cmp r0, #0x30 + bne _020E1548 + mov r0, r8 + mov r1, r7 + mov r2, #0x1 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + add r7, r7, #0x1 + sub r6, r6, #0x1 +_020E1548: + ldr r0, [sp, #0x24] + cmp r4, r0 + bge _020E158C +_020E1554: + mov r0, r8 + add r1, sp, #0x19 + mov r2, #0x1 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x24] + add r4, r4, #0x1 + cmp r4, r0 + blt _020E1554 +_020E158C: + cmp r6, #0x0 + beq _020E15BC + mov r0, r8 + mov r1, r7 + mov r2, r6 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E15BC: + ldrb r0, [sp, #0x1c] + cmp r0, #0x0 + bne _020E1618 + ldr r0, [sp, #0x24] + cmp r4, r0 + bge _020E1618 + mov r6, #0x20 + add r7, sp, #0x18 +_020E15DC: + mov r0, r8 + mov r1, r7 + mov r2, #0x1 + strb r6, [sp, #0x18] + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x24] + add r4, r4, #0x1 + cmp r4, r0 + blt _020E15DC +_020E1618: + add r10, r10, r4 + ldrsb r0, [r11, #0x0] + cmp r0, #0x0 + bne _020E0E50 +_020E1628: + mov r0, r10 + add sp, sp, #0x22c + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E163C: + .byte 0xD8, 0x6D, 0x10, 0x02 + .byte 0xDC, 0x6D, 0x10, 0x02 + + arm_func_start __FileWrite +__FileWrite: ; 0x020E1644 + stmdb sp!, {r3-r5,lr} + mov r5, r0 + mov r0, r1 + mov r3, r5 + mov r1, #0x1 + mov r4, r2 + bl __fwrite +_020E1660: + .byte 0x00, 0x00, 0x54, 0xE1, 0x00, 0x50, 0xA0, 0x13, 0x05, 0x00, 0xA0, 0xE1, 0x38, 0x80, 0xBD, 0xE8 + + arm_func_start __StringWrite +__StringWrite: ; 0x020E1670 + stmdb sp!, {r3-r5,lr} + mov r4, r0 + ldr r3, [r4, #0x8] + mov r5, r2 + ldr r2, [r4, #0x4] + add r0, r3, r5 + cmp r0, r2 + ldr r0, [r4, #0x0] + subhi r5, r2, r3 + mov r2, r5 + add r0, r0, r3 + bl memcpy + ldr r1, [r4, #0x8] + mov r0, #0x1 + add r1, r1, r5 + str r1, [r4, #0x8] + ldmia sp!, {r3-r5,pc} + + arm_func_start printf +printf: ; 0x020E16B4 + stmdb sp!, {r0-r3} + stmdb sp!, {r4,lr} + ldr r0, _020E17B4 ; =0x02106AA4 + mvn r1, #0x0 + bl fwide +_020E16C8: + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xE0, 0xA3 + .byte 0x10, 0x40, 0xBD, 0xA8, 0x10, 0xD0, 0x8D, 0xA2, 0x1E, 0xFF, 0x2F, 0xA1, 0xD4, 0x00, 0x9F, 0xE5 + .byte 0xFF, 0xA9, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A, 0xC8, 0x00, 0x9F, 0xE5 + .byte 0xC8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0xC4, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5 + .byte 0x01, 0x20, 0xA0, 0xE3, 0x0C, 0x30, 0x81, 0xE5, 0x0C, 0x20, 0x80, 0xE5, 0x15, 0x00, 0x00, 0xEA + .byte 0xA4, 0x00, 0x9F, 0xE5, 0xA4, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5, 0x0C, 0x10, 0x91, 0xE5 + .byte 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A, 0x90, 0x00, 0x9F, 0xE5 + .byte 0x0C, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2, 0x0C, 0x10, 0x80, 0xE5, 0x09, 0x00, 0x00, 0xEA + .byte 0x70, 0x00, 0x9F, 0xE5, 0x31, 0xAA, 0xFF, 0xEB, 0x6C, 0x00, 0x9F, 0xE5, 0x6C, 0x10, 0x9F, 0xE5 + .byte 0x04, 0x20, 0x90, 0xE5, 0x68, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5, 0x01, 0x20, 0xA0, 0xE3 + .byte 0x0C, 0x30, 0x81, 0xE5, 0x0C, 0x20, 0x80, 0xE5, 0x08, 0x00, 0x8D, 0xE2, 0x03, 0x30, 0xC0, 0xE3 + .byte 0x08, 0x20, 0x9D, 0xE5, 0x4C, 0x00, 0x9F, 0xE5, 0x34, 0x10, 0x9F, 0xE5, 0x04, 0x30, 0x83, 0xE2 + .byte 0xA6, 0xFD, 0xFF, 0xEB, 0x38, 0x10, 0x9F, 0xE5, 0x00, 0x40, 0xA0, 0xE1, 0x0C, 0x00, 0x91, 0xE5 + .byte 0x01, 0x00, 0x50, 0xE2, 0x0C, 0x00, 0x81, 0xE5, 0x01, 0x00, 0x00, 0x1A, 0x14, 0x00, 0x9F, 0xE5 + .byte 0xFE, 0xA9, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x10, 0xD0, 0x8D, 0xE2 + .byte 0x1E, 0xFF, 0x2F, 0xE1 +_020E17B4: .word 0x02106AA4 +_020E17B8: + .byte 0x18, 0x71, 0x1D, 0x02, 0x98, 0x34, 0x1D, 0x02 + .byte 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0x44, 0x16, 0x0E, 0x02 + + arm_func_start vsnprintf +vsnprintf: ; 0x020E17CC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + mov r4, r1 + mov r12, #0x0 + ldr r0, _020E1830 ; =__StringWrite + add r1, sp, #0x0 + str r5, [sp, #0x0] + str r4, [sp, #0x4] + str r12, [sp, #0x8] + bl __pformatter +_020E17F8: + .byte 0x00, 0x00, 0x55, 0xE3, 0x0C, 0xD0, 0x8D, 0x02 + .byte 0x30, 0x80, 0xBD, 0x08, 0x04, 0x00, 0x50, 0xE1, 0x00, 0x10, 0xA0, 0x33, 0x0C, 0xD0, 0x8D, 0x32 + .byte 0x00, 0x10, 0xC5, 0x37, 0x30, 0x80, 0xBD, 0x38, 0x00, 0x00, 0x54, 0xE3, 0x04, 0x10, 0x85, 0x10 + .byte 0x00, 0x20, 0xA0, 0x13, 0x01, 0x20, 0x41, 0x15, 0x0C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 +_020E1830: .word __StringWrite + + arm_func_start snprintf +snprintf: ; 0x020E1834 + stmdb sp!, {r0-r3} + stmdb sp!, {r3,lr} + add r3, sp, #0x10 + bic r3, r3, #0x3 + ldr r2, [sp, #0x10] + add r3, r3, #0x4 + bl vsnprintf + ldmia sp!, {r3,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start sprintf +sprintf: ; 0x020E185C + stmdb sp!, {r0-r3} + stmdb sp!, {r3,lr} + add r1, sp, #0xc + bic r1, r1, #0x3 + add r3, r1, #0x4 + ldr r2, [sp, #0xc] + mvn r1, #0x0 + bl vsnprintf + ldmia sp!, {r3,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start qsort +qsort: ; 0x020E1888 + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x10 + mov r9, r1 + cmp r9, #0x2 + mov r10, r0 + mov r8, r2 + mov r7, r3 + addcc sp, sp, #0x10 + ldmccia sp!, {r3-r11,pc} +_020E18AC: + .byte 0xA9, 0x00, 0xA0, 0xE1 + .byte 0x01, 0xB0, 0x80, 0xE2, 0x01, 0x00, 0x4B, 0xE2, 0x98, 0xA0, 0x20, 0xE0, 0x01, 0x20, 0x49, 0xE2 + .byte 0x0C, 0x00, 0x8D, 0xE5, 0x98, 0xA2, 0x20, 0xE0, 0x08, 0x00, 0x8D, 0xE5, 0x9B, 0x08, 0x00, 0xE0 + .byte 0x00, 0x10, 0xE0, 0xE3, 0x04, 0x00, 0x8D, 0xE5, 0x98, 0x01, 0x00, 0xE0, 0x00, 0x00, 0x8D, 0xE5 + .byte 0x01, 0x00, 0x5B, 0xE3, 0x07, 0x00, 0x00, 0x9A, 0x04, 0x00, 0x9D, 0xE5, 0x01, 0xB0, 0x4B, 0xE2 + .byte 0x08, 0x00, 0x40, 0xE0, 0x04, 0x00, 0x8D, 0xE5, 0x0C, 0x00, 0x9D, 0xE5, 0x08, 0x00, 0x40, 0xE0 + .byte 0x0C, 0x00, 0x8D, 0xE5, 0x11, 0x00, 0x00, 0xEA, 0x08, 0x20, 0xA0, 0xE1, 0x08, 0x40, 0x9D, 0xE5 + .byte 0x0C, 0x30, 0x9D, 0xE5, 0x00, 0x00, 0x58, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0xD0, 0x00, 0xD4, 0xE1 + .byte 0xD0, 0x10, 0xD3, 0xE1, 0x01, 0x20, 0x52, 0xE2, 0x01, 0x00, 0xC3, 0xE4, 0x01, 0x10, 0xC4, 0xE4 + .byte 0xF9, 0xFF, 0xFF, 0x1A, 0x01, 0x90, 0x49, 0xE2, 0x01, 0x00, 0x59, 0xE3, 0x10, 0xD0, 0x8D, 0x02 + .byte 0xF8, 0x8F, 0xBD, 0x08, 0x08, 0x00, 0x9D, 0xE5, 0x08, 0x00, 0x40, 0xE0, 0x08, 0x00, 0x8D, 0xE5 + .byte 0x04, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x9D, 0xE5, 0x0B, 0x40, 0xA0, 0xE1, 0x00, 0x00, 0x81, 0xE0 + .byte 0x8B, 0x00, 0x59, 0xE1, 0x00, 0x50, 0x8A, 0xE0, 0xDC, 0xFF, 0xFF, 0x3A, 0x84, 0x40, 0xA0, 0xE1 + .byte 0x01, 0x00, 0x44, 0xE2, 0x05, 0x60, 0xA0, 0xE1, 0x98, 0xA0, 0x25, 0xE0, 0x04, 0x00, 0x59, 0xE1 + .byte 0x05, 0x00, 0x00, 0x9A, 0x05, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0x85, 0xE0, 0x37, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x40, 0x84, 0xB2, 0x08, 0x50, 0x85, 0xB0, 0x06, 0x00, 0xA0, 0xE1 + .byte 0x05, 0x10, 0xA0, 0xE1, 0x37, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0xCB, 0xFF, 0xFF, 0xAA + .byte 0x08, 0x20, 0xA0, 0xE1, 0x05, 0x30, 0xA0, 0xE1, 0x00, 0x00, 0x58, 0xE3, 0x05, 0x00, 0x00, 0x0A + .byte 0xD0, 0x10, 0xD6, 0xE1, 0xD0, 0x00, 0xD3, 0xE1, 0x01, 0x20, 0x52, 0xE2, 0x01, 0x00, 0xC6, 0xE4 + .byte 0x01, 0x10, 0xC3, 0xE4, 0xF9, 0xFF, 0xFF, 0x1A, 0x84, 0x00, 0x59, 0xE1, 0xE2, 0xFF, 0xFF, 0x2A + .byte 0xBE, 0xFF, 0xFF, 0xEA, 0x10, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 + + arm_func_start rand +rand: ; 0x020E19EC + ldr r2, _020E1A14 ; =0x02106DE0 + ldr r0, _020E1A18 ; =0x41C64E6D + ldr r3, [r2, #0x0] + ldr r1, _020E1A1C ; =0x00007FFF + mul r0, r3, r0 + add r0, r0, #0x39 + add r0, r0, #0x3000 + str r0, [r2, #0x0] + and r0, r1, r0, lsr #0x10 + bx lr + .balign 4 +_020E1A14: .word 0x02106DE0 +_020E1A18: .word 0x41C64E6D +_020E1A1C: .word 0x00007FFF + + arm_func_start srand +srand: ; 0x020E1A20 + ldr r1, _020E1A2C ; =0x02106DE0 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020E1A2C: .word 0x02106DE0 + + arm_func_start parse_format_scanf +parse_format_scanf: ; 0x020E1A30 + stmdb sp!, {r3-r7,lr} + sub sp, sp, #0x28 + ldr r6, _020E1F20 ; =0x0210440C + add r5, sp, #0x0 + mov r7, r0 + mov lr, r1 + mov r4, r5 + ldmia r6!, {r0-r3} + stmia r5!, {r0-r3} + ldmia r6!, {r0-r3} + stmia r5!, {r0-r3} + ldmia r6, {r0-r1} + stmia r5, {r0-r1} + ldrsb r0, [r7, #0x1] + add r12, r7, #0x1 + cmp r0, #0x25 + bne _020E1A9C + strb r0, [sp, #0x3] + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4, {r0-r1} + stmia lr, {r0-r1} + add sp, sp, #0x28 + add r0, r12, #0x1 + ldmia sp!, {r3-r7,pc} +_020E1A9C: + cmp r0, #0x2a + moveq r0, #0x1 + streqb r0, [sp, #0x0] + ldreqsb r0, [r12, #0x1]! + cmp r0, #0x0 + blt _020E1ABC + cmp r0, #0x80 + blt _020E1AC4 +_020E1ABC: + mov r1, #0x0 + b _020E1AD4 +_020E1AC4: + ldr r1, _020E1F24 ; =0x0210430C + mov r2, r0, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x8 +_020E1AD4: + cmp r1, #0x0 + beq _020E1B74 + mov r1, #0x0 + ldr r3, _020E1F24 ; =0x0210430C + str r1, [sp, #0x4] + mov r4, r1 + mov r1, #0xa +_020E1AF0: + ldr r2, [sp, #0x4] + sub r0, r0, #0x30 + mla r0, r2, r1, r0 + str r0, [sp, #0x4] + ldrsb r0, [r12, #0x1]! + cmp r0, #0x0 + blt _020E1B14 + cmp r0, #0x80 + blt _020E1B1C +_020E1B14: + mov r2, r4 + b _020E1B28 +_020E1B1C: + mov r2, r0, lsl #0x1 + ldrh r2, [r3, r2] + and r2, r2, #0x8 +_020E1B28: + cmp r2, #0x0 + bne _020E1AF0 + ldr r1, [sp, #0x4] + cmp r1, #0x0 + bne _020E1B6C + mov r0, #0xff + add r4, sp, #0x0 + strb r0, [sp, #0x3] + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4, {r0-r1} + stmia lr, {r0-r1} + add sp, sp, #0x28 + add r0, r12, #0x1 + ldmia sp!, {r3-r7,pc} +_020E1B6C: + mov r1, #0x1 + strb r1, [sp, #0x1] +_020E1B74: + cmp r0, #0x6c + mov r1, #0x1 + bgt _020E1BAC + cmp r0, #0x68 + blt _020E1BA0 + beq _020E1BC8 + cmp r0, #0x6a + beq _020E1C14 + cmp r0, #0x6c + beq _020E1BE4 + b _020E1C38 +_020E1BA0: + cmp r0, #0x4c + beq _020E1C08 + b _020E1C38 +_020E1BAC: + cmp r0, #0x74 + bgt _020E1BBC + beq _020E1C2C + b _020E1C38 +_020E1BBC: + cmp r0, #0x7a + beq _020E1C20 + b _020E1C38 +_020E1BC8: + mov r2, #0x2 + strb r2, [sp, #0x2] + ldrsb r2, [r12, #0x1] + cmp r2, #0x68 + streqb r1, [sp, #0x2] + ldreqsb r0, [r12, #0x1]! + b _020E1C3C +_020E1BE4: + mov r2, #0x3 + strb r2, [sp, #0x2] + ldrsb r2, [r12, #0x1] + cmp r2, #0x6c + bne _020E1C3C + mov r0, #0x7 + strb r0, [sp, #0x2] + ldrsb r0, [r12, #0x1]! + b _020E1C3C +_020E1C08: + mov r2, #0x9 + strb r2, [sp, #0x2] + b _020E1C3C +_020E1C14: + mov r2, #0x4 + strb r2, [sp, #0x2] + b _020E1C3C +_020E1C20: + mov r2, #0x5 + strb r2, [sp, #0x2] + b _020E1C3C +_020E1C2C: + mov r2, #0x6 + strb r2, [sp, #0x2] + b _020E1C3C +_020E1C38: + mov r1, #0x0 +_020E1C3C: + cmp r1, #0x0 + ldrnesb r0, [r12, #0x1]! + strb r0, [sp, #0x3] + cmp r0, #0x5b + bgt _020E1C90 + bge _020E1DE0 + cmp r0, #0x47 + bgt _020E1C84 + subs r1, r0, #0x41 + addpl pc, pc, r1, lsl #0x2 + b _020E1EF0 +_020E1C68: + .byte 0x2B, 0x00, 0x00, 0xEA, 0x9F, 0x00, 0x00, 0xEA + .byte 0x9E, 0x00, 0x00, 0xEA, 0x9D, 0x00, 0x00, 0xEA, 0x27, 0x00, 0x00, 0xEA, 0x26, 0x00, 0x00, 0xEA + .byte 0x25, 0x00, 0x00, 0xEA +_020E1C84: + cmp r0, #0x58 + beq _020E1D08 + b _020E1EF0 +_020E1C90: + cmp r0, #0x61 + bgt _020E1CA0 + beq _020E1D1C + b _020E1EF0 +_020E1CA0: + sub r0, r0, #0x63 + cmp r0, #0x15 + addls pc, pc, r0, lsl #0x2 + b _020E1EF0 +_020E1CB0: + .byte 0x2D, 0x00, 0x00, 0xEA, 0x13, 0x00, 0x00, 0xEA, 0x17, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA + .byte 0x15, 0x00, 0x00, 0xEA, 0x89, 0x00, 0x00, 0xEA, 0x0E, 0x00, 0x00, 0xEA, 0x87, 0x00, 0x00, 0xEA + .byte 0x86, 0x00, 0x00, 0xEA, 0x85, 0x00, 0x00, 0xEA, 0x84, 0x00, 0x00, 0xEA, 0x85, 0x00, 0x00, 0xEA + .byte 0x08, 0x00, 0x00, 0xEA, 0x1B, 0x00, 0x00, 0xEA, 0x80, 0x00, 0x00, 0xEA, 0x7F, 0x00, 0x00, 0xEA + .byte 0x26, 0x00, 0x00, 0xEA, 0x7D, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA, 0x7B, 0x00, 0x00, 0xEA + .byte 0x7A, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA +_020E1D08: + ldrb r0, [sp, #0x2] + cmp r0, #0x9 + moveq r0, #0xff + streqb r0, [sp, #0x3] + b _020E1EF8 +_020E1D1C: + ldrb r1, [sp, #0x2] + cmp r1, #0x1 + cmpne r1, #0x2 + beq _020E1D3C + add r0, r1, #0xfc + and r0, r0, #0xff + cmp r0, #0x3 + bhi _020E1D48 +_020E1D3C: + mov r0, #0xff + strb r0, [sp, #0x3] + b _020E1EF8 +_020E1D48: + cmp r1, #0x3 + moveq r0, #0x8 + streqb r0, [sp, #0x2] + b _020E1EF8 +_020E1D58: + .byte 0x03, 0x10, 0xA0, 0xE3, 0x78, 0x00, 0xA0, 0xE3 + .byte 0x02, 0x10, 0xCD, 0xE5, 0x03, 0x00, 0xCD, 0xE5, 0x62, 0x00, 0x00, 0xEA, 0x02, 0x00, 0xDD, 0xE5 + .byte 0x03, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0xA0, 0x03, 0x02, 0x00, 0xCD, 0x05, 0x5D, 0x00, 0x00, 0x0A + .byte 0x00, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x13, 0x03, 0x00, 0xCD, 0x15, 0x59, 0x00, 0x00, 0xEA + .byte 0x02, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0xA0, 0x03, 0x02, 0x00, 0xCD, 0x05 + .byte 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x13, 0x03, 0x00, 0xCD, 0x15 + .byte 0x08, 0x20, 0x8D, 0xE2, 0x20, 0x10, 0xA0, 0xE3, 0xFF, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0x41, 0xE2 + .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0xC2, 0xE4, 0xFB, 0xFF, 0xFF, 0xCA, 0xC1, 0x10, 0xA0, 0xE3 + .byte 0xFE, 0x00, 0xA0, 0xE3, 0x09, 0x10, 0xCD, 0xE5, 0x0C, 0x00, 0xCD, 0xE5, 0x45, 0x00, 0x00, 0xEA +_020E1DE0: + ldrb r0, [sp, #0x2] + cmp r0, #0x3 + moveq r0, #0xa + streqb r0, [sp, #0x2] + beq _020E1E00 + cmp r0, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x3] +_020E1E00: + ldrsb r2, [r12, #0x1]! + mov r1, #0x0 + cmp r2, #0x5e + ldreqsb r2, [r12, #0x1]! + moveq r1, #0x1 + cmp r2, #0x5d + bne _020E1EA8 + ldrb r0, [sp, #0x13] + orr r0, r0, #0x20 + strb r0, [sp, #0x13] + ldrsb r2, [r12, #0x1]! + b _020E1EA8 +_020E1E30: + add r0, sp, #0x0 + and r3, r2, #0xff + add r6, r0, r3, asr #0x3 + ldrb r5, [r6, #0x8] + and r3, r2, #0x7 + mov r4, #0x1 + orr r3, r5, r4, lsl r3 + strb r3, [r6, #0x8] + ldrsb r3, [r12, #0x1] + cmp r3, #0x2d + bne _020E1EA4 + ldrsb r7, [r12, #0x2] + cmp r7, #0x0 + cmpne r7, #0x5d + beq _020E1EA4 + add r2, r2, #0x1 + cmp r2, r7 + bgt _020E1E9C +_020E1E78: + and r3, r2, #0xff + add r6, r0, r3, asr #0x3 + ldrb r5, [r6, #0x8] + and r3, r2, #0x7 + add r2, r2, #0x1 + orr r3, r5, r4, lsl r3 + strb r3, [r6, #0x8] + cmp r2, r7 + ble _020E1E78 +_020E1E9C: + ldrsb r2, [r12, #0x3]! + b _020E1EA8 +_020E1EA4: + ldrsb r2, [r12, #0x1]! +_020E1EA8: + cmp r2, #0x0 + cmpne r2, #0x5d + bne _020E1E30 + cmp r2, #0x0 + moveq r0, #0xff + streqb r0, [sp, #0x3] + beq _020E1EF8 + cmp r1, #0x0 + beq _020E1EF8 + add r2, sp, #0x8 + mov r1, #0x20 +_020E1ED4: + ldrb r0, [r2, #0x0] + sub r1, r1, #0x1 + cmp r1, #0x0 + mvn r0, r0 + strb r0, [r2], #0x1 + bgt _020E1ED4 + b _020E1EF8 +_020E1EF0: + mov r0, #0xff + strb r0, [sp, #0x3] +_020E1EF8: + add r4, sp, #0x0 + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4, {r0-r1} + stmia lr, {r0-r1} + add r0, r12, #0x1 + add sp, sp, #0x28 + ldmia sp!, {r3-r7,pc} + .balign 4 +_020E1F20: .word 0x0210440C +_020E1F24: .word 0x0210430C + + arm_func_start __sformatter +__sformatter: ; 0x020E1F28 + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x88 + ldrsb r5, [r2, #0x0] + str r2, [sp, #0xc] + mov r2, #0x0 + mov r9, r0 + mov r0, r2 + str r2, [sp, #0x20] + mov r8, r1 + str r3, [sp, #0x10] + str r0, [sp, #0x24] + cmp r5, #0x0 + ldr r10, [sp, #0xb0] + str r0, [sp, #0x30] + mov r4, r2 + str r0, [sp, #0x44] + str r0, [sp, #0x40] + beq _020E2C3C +_020E1F70: + cmp r5, #0x0 + mov r0, #0x1 + blt _020E1F84 + cmp r5, #0x80 + movlt r0, #0x0 +_020E1F84: + cmp r0, #0x0 + movne r0, #0x0 + bne _020E1FA0 + mov r1, r5, lsl #0x1 + ldr r0, _020E2C74 ; =0x0210430C + ldrh r0, [r0, r1] + and r0, r0, #0x100 +_020E1FA0: + cmp r0, #0x0 + beq _020E2060 + mov r2, #0x0 + ldr r1, _020E2C74 ; =0x0210430C + mov r12, r2 + mov r3, #0x1 +_020E1FB8: + ldr r0, [sp, #0xc] + ldrsb r5, [r0, #0x1]! + str r0, [sp, #0xc] + mov r0, r3 + cmp r5, #0x0 + blt _020E1FD8 + cmp r5, #0x80 + movlt r0, r2 +_020E1FD8: + cmp r0, #0x0 + movne r0, r12 + moveq r0, r5, lsl #0x1 + ldreqh r0, [r1, r0] + andeq r0, r0, #0x100 + cmp r0, #0x0 + bne _020E1FB8 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E2C2C + ldr r5, _020E2C74 ; =0x0210430C + b _020E200C +_020E2008: + add r4, r4, #0x1 +_020E200C: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + strb r0, [sp, #0x50] + ldrsb r1, [sp, #0x50] + cmp r1, #0x0 + blt _020E2034 + cmp r1, #0x80 + blt _020E203C +_020E2034: + mov r0, #0x0 + b _020E2048 +_020E203C: + mov r0, r1, lsl #0x1 + ldrh r0, [r5, r0] + and r0, r0, #0x100 +_020E2048: + cmp r0, #0x0 + bne _020E2008 + mov r0, r8 + mov r2, #0x1 + blx r9 + b _020E2C2C +_020E2060: + cmp r5, #0x25 + beq _020E20D8 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E20D8 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + strb r0, [sp, #0x50] + and r0, r5, #0xff + ldrsb r1, [sp, #0x50] + cmp r0, r1 + beq _020E20C4 + mov r0, r8 + mov r2, #0x1 + blx r9 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + ldr r0, [sp, #0xc] + add r0, r0, #0x1 + str r0, [sp, #0xc] + b _020E2C2C +_020E20C4: + ldr r0, [sp, #0xc] + add r4, r4, #0x1 + add r0, r0, #0x1 + str r0, [sp, #0xc] + b _020E2C2C +_020E20D8: + ldr r0, [sp, #0xc] + add r1, sp, #0x60 + bl parse_format_scanf + str r0, [sp, #0xc] + ldrb r0, [sp, #0x60] + cmp r0, #0x0 + bne _020E2114 + ldrb r0, [sp, #0x63] + cmp r0, #0x25 + beq _020E2114 + ldr r0, [sp, #0x10] + add r0, r0, #0x4 + str r0, [sp, #0x10] + ldr r5, [r0, #-0x4] + b _020E2118 +_020E2114: + mov r5, #0x0 +_020E2118: + ldrb r0, [sp, #0x63] + cmp r0, #0x6e + beq _020E2158 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E2158 + mov r0, r8 + mov r1, #0x0 + mov r2, #0x2 + blx r9 + cmp r0, #0x0 + beq _020E2158 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] +_020E2158: + ldrb r1, [sp, #0x63] + cmp r1, #0x5b + bgt _020E21B0 + bge _020E2984 + cmp r1, #0x47 + bgt _020E21A4 + subs r0, r1, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020E2198 +_020E217C: + .byte 0x1F, 0x01, 0x00, 0xEA + .byte 0xAD, 0x02, 0x00, 0xEA, 0xAC, 0x02, 0x00, 0xEA, 0xAB, 0x02, 0x00, 0xEA, 0x1B, 0x01, 0x00, 0xEA + .byte 0x1A, 0x01, 0x00, 0xEA, 0x19, 0x01, 0x00, 0xEA +_020E2198: + cmp r1, #0x25 + beq _020E287C + b _020E2C3C +_020E21A4: + cmp r1, #0x58 + beq _020E243C + b _020E2C3C +_020E21B0: + cmp r1, #0x78 + bgt _020E2228 + subs r0, r1, #0x63 + addpl pc, pc, r0, lsl #0x2 + b _020E221C +_020E21C4: + .byte 0x3E, 0x01, 0x00, 0xEA, 0x18, 0x00, 0x00, 0xEA, 0x0B, 0x01, 0x00, 0xEA + .byte 0x0A, 0x01, 0x00, 0xEA, 0x09, 0x01, 0x00, 0xEA, 0x97, 0x02, 0x00, 0xEA, 0x15, 0x00, 0x00, 0xEA + .byte 0x95, 0x02, 0x00, 0xEA, 0x94, 0x02, 0x00, 0xEA, 0x93, 0x02, 0x00, 0xEA, 0x92, 0x02, 0x00, 0xEA + .byte 0x74, 0x02, 0x00, 0xEA, 0x8C, 0x00, 0x00, 0xEA, 0x8F, 0x02, 0x00, 0xEA, 0x8E, 0x02, 0x00, 0xEA + .byte 0x8D, 0x02, 0x00, 0xEA, 0xBF, 0x01, 0x00, 0xEA, 0x8B, 0x02, 0x00, 0xEA, 0x88, 0x00, 0x00, 0xEA + .byte 0x89, 0x02, 0x00, 0xEA, 0x88, 0x02, 0x00, 0xEA, 0x87, 0x00, 0x00, 0xEA +_020E221C: + cmp r1, #0x61 + beq _020E2600 + b _020E2C3C +_020E2228: + cmp r1, #0xff + b _020E2C3C +_020E2230: + .byte 0x0A, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x00, 0xEA, 0x00, 0x00, 0xA0, 0xE3, 0x30, 0x10, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x51, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x00, 0x00, 0xA0, 0xE3, 0x1C, 0x00, 0x8D, 0xE5 + .byte 0x20, 0x00, 0x8D, 0xE5, 0x24, 0x00, 0x8D, 0xE5, 0x41, 0x00, 0x00, 0xEA, 0x62, 0x10, 0xDD, 0xE5 + .byte 0x5C, 0x20, 0x8D, 0xE2, 0x07, 0x00, 0x51, 0xE3, 0x04, 0x00, 0x51, 0x13, 0x58, 0x10, 0x8D, 0xE2 + .byte 0x0A, 0x00, 0x00, 0x1A, 0x00, 0x20, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5, 0x54, 0x10, 0x8D, 0xE2 + .byte 0x08, 0x10, 0x8D, 0xE5, 0x64, 0x10, 0x9D, 0xE5, 0x09, 0x20, 0xA0, 0xE1, 0x08, 0x30, 0xA0, 0xE1 + .byte 0xE7, 0x09, 0x00, 0xEB, 0x34, 0x00, 0x8D, 0xE5, 0x18, 0x10, 0x8D, 0xE5, 0x08, 0x00, 0x00, 0xEA + .byte 0x00, 0x20, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5, 0x54, 0x10, 0x8D, 0xE2, 0x08, 0x10, 0x8D, 0xE5 + .byte 0x64, 0x10, 0x9D, 0xE5, 0x09, 0x20, 0xA0, 0xE1, 0x08, 0x30, 0xA0, 0xE1, 0xE2, 0x08, 0x00, 0xEB + .byte 0x3C, 0x00, 0x8D, 0xE5, 0x5C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A + .byte 0x00, 0x00, 0x5A, 0xE3, 0x58, 0x02, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x30, 0x00, 0x8D, 0xE5 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x1C, 0x00, 0x8D, 0xE5, 0x20, 0x00, 0x8D, 0xE5, 0x24, 0x00, 0x8D, 0xE5 + .byte 0x1B, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x84, 0xE0, 0x62, 0x00, 0xDD, 0xE5, 0x07, 0x00, 0x50, 0xE3 + .byte 0x04, 0x00, 0x50, 0x13, 0x0E, 0x00, 0x00, 0x1A, 0x58, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 + .byte 0x06, 0x00, 0x00, 0x0A, 0x34, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x70, 0xE2, 0x20, 0x00, 0x8D, 0xE5 + .byte 0x18, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0xE0, 0xE2, 0x24, 0x00, 0x8D, 0xE5, 0x0C, 0x00, 0x00, 0xEA + .byte 0x34, 0x00, 0x9D, 0xE5, 0x20, 0x00, 0x8D, 0xE5, 0x18, 0x00, 0x9D, 0xE5, 0x24, 0x00, 0x8D, 0xE5 + .byte 0x07, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x3C, 0x00, 0x9D, 0x05 + .byte 0x1C, 0x00, 0x8D, 0x05, 0x02, 0x00, 0x00, 0x0A, 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x60, 0xE2 + .byte 0x1C, 0x00, 0x8D, 0xE5, 0x00, 0x00, 0x55, 0xE3, 0x2B, 0x00, 0x00, 0x0A, 0x62, 0x00, 0xDD, 0xE5 + .byte 0x07, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x22, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x00, 0xEA + .byte 0x08, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA, 0x0E, 0x00, 0x00, 0xEA + .byte 0x12, 0x00, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x85, 0xE5, 0x17, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0xC5, 0xE5 + .byte 0x14, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5, 0xB0, 0x00, 0xC5, 0xE1, 0x11, 0x00, 0x00, 0xEA + .byte 0x1C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x0E, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x85, 0xE5, 0x24, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5, 0x09, 0x00, 0x00, 0xEA + .byte 0x1C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x06, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x85, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5 + .byte 0x24, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5, 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 + .byte 0x44, 0x00, 0x9D, 0x05, 0x01, 0x00, 0x80, 0x02, 0x44, 0x00, 0x8D, 0x05, 0x40, 0x00, 0x9D, 0xE5 + .byte 0x01, 0x00, 0x80, 0xE2, 0x40, 0x00, 0x8D, 0xE5, 0xFF, 0x01, 0x00, 0xEA, 0x08, 0x00, 0xA0, 0xE3 + .byte 0x02, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x00, 0xEA +_020E243C: + mov r0, #0x10 + ldr r1, [sp, #0x30] + cmp r1, #0x0 + beq _020E2460 + mov r0, #0x0 + str r0, [sp, #0x3c] + str r0, [sp, #0x34] + str r0, [sp, #0x18] + b _020E2538 +_020E2460: + ldrb r1, [sp, #0x62] + add r2, sp, #0x5c + cmp r1, #0x7 + cmpne r1, #0x4 + add r1, sp, #0x58 + bne _020E24A4 + str r2, [sp, #0x0] + str r1, [sp, #0x4] + add r1, sp, #0x54 + str r1, [sp, #0x8] + ldr r1, [sp, #0x64] + mov r2, r9 + mov r3, r8 + bl __strtoull + str r0, [sp, #0x34] + str r1, [sp, #0x18] + b _020E24C8 +_020E24A4: + str r2, [sp, #0x0] + str r1, [sp, #0x4] + add r1, sp, #0x54 + str r1, [sp, #0x8] + ldr r1, [sp, #0x64] + mov r2, r9 + mov r3, r8 + bl __strtoul + str r0, [sp, #0x3c] +_020E24C8: + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + bne _020E24F8 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + mov r0, #0x0 + str r0, [sp, #0x3c] + str r0, [sp, #0x34] + str r0, [sp, #0x18] + b _020E2538 +_020E24F8: + add r4, r4, r0 + ldr r0, [sp, #0x58] + cmp r0, #0x0 + beq _020E2538 + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + ldrne r0, [sp, #0x3c] + rsbne r0, r0, #0x0 + strne r0, [sp, #0x3c] + bne _020E2538 + ldr r0, [sp, #0x34] + rsbs r0, r0, #0x0 + str r0, [sp, #0x34] + ldr r0, [sp, #0x18] + rsc r0, r0, #0x0 + str r0, [sp, #0x18] +_020E2538: + cmp r5, #0x0 + beq _020E25F0 + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + addls pc, pc, r0, lsl #0x2 + b _020E25DC +_020E2550: + .byte 0x06, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA + .byte 0x0E, 0x00, 0x00, 0xEA, 0x12, 0x00, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA + .byte 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x17, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0xC5, 0xE5, 0x14, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5, 0xB0, 0x00, 0xC5, 0xE1 + .byte 0x11, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x0E, 0x00, 0x00, 0xEA + .byte 0x34, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x18, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5 + .byte 0x09, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x06, 0x00, 0x00, 0xEA + .byte 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x34, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x85, 0xE5, 0x18, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5 +_020E25DC: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + ldreq r0, [sp, #0x44] + addeq r0, r0, #0x1 + streq r0, [sp, #0x44] +_020E25F0: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E2600: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + beq _020E261C + ldr r0, _020E2C78 ; =0x02106B78 + ldr r0, [r0, #0x0] + bl _f2d + b _020E2668 +_020E261C: + add r0, sp, #0x54 + str r0, [sp, #0x0] + ldr r0, [sp, #0x64] + mov r1, r9 + mov r2, r8 + add r3, sp, #0x5c + bl __strtold + ldr r2, [sp, #0x5c] + cmp r2, #0x0 + bne _020E2664 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + ldr r0, _020E2C78 ; =0x02106B78 + ldr r0, [r0, #0x0] + bl _f2d +_020E2660: + .byte 0x00, 0x00, 0x00, 0xEA +_020E2664: + add r4, r4, r2 +_020E2668: + cmp r5, #0x0 + beq _020E26B4 + ldrb r2, [sp, #0x62] + cmp r2, #0x0 + beq _020E2690 + cmp r2, #0x8 + beq _020E269C + cmp r2, #0x9 + stmeqia r5, {r0-r1} + b _020E26A0 +_020E2690: + bl _d2f +_020E2694: + .byte 0x00, 0x00, 0x85, 0xE5, 0x00, 0x00, 0x00, 0xEA +_020E269C: + stmia r5, {r0-r1} +_020E26A0: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + ldreq r0, [sp, #0x44] + addeq r0, r0, #0x1 + streq r0, [sp, #0x44] +_020E26B4: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E26C4: + .byte 0x61, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 + .byte 0x64, 0x00, 0x8D, 0x05, 0x00, 0x00, 0x55, 0xE3, 0x4B, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x5A, 0xE3 + .byte 0x04, 0x00, 0x00, 0x0A, 0x10, 0x00, 0x9D, 0xE5, 0x01, 0x70, 0xA0, 0xE3, 0x04, 0x00, 0x80, 0xE2 + .byte 0x04, 0xB0, 0x10, 0xE5, 0x10, 0x00, 0x8D, 0xE5, 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x00, 0x00, 0x50, 0xE3, 0x5C, 0x10, 0x8D, 0xE5, 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x5B, 0xE3 + .byte 0x00, 0x10, 0xC5, 0x15, 0x44, 0x01, 0x00, 0xEA, 0x00, 0x00, 0xE0, 0xE3, 0x2C, 0x50, 0x8D, 0xE5 + .byte 0x48, 0x00, 0x8D, 0xE5, 0x0D, 0x00, 0x00, 0xEA, 0x62, 0x00, 0xDD, 0xE5, 0x50, 0x60, 0xCD, 0xE5 + .byte 0x0A, 0x00, 0x50, 0xE3, 0xD0, 0x05, 0xDD, 0x11, 0x01, 0x00, 0xC5, 0x14, 0x04, 0x00, 0x00, 0x1A + .byte 0x05, 0x00, 0xA0, 0xE1, 0x50, 0x10, 0x8D, 0xE2, 0x01, 0x20, 0xA0, 0xE3, 0xD8, 0xF2, 0xFF, 0xEB + .byte 0x01, 0x50, 0x85, 0xE2, 0x5C, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0x80, 0xE2, 0x5C, 0x10, 0x8D, 0xE5 + .byte 0x64, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x40, 0xE2, 0x64, 0x00, 0x8D, 0xE5 + .byte 0x0E, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x5A, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x5B, 0xE1 + .byte 0x01, 0x70, 0xA0, 0x83, 0x00, 0x70, 0xA0, 0x93, 0x00, 0x00, 0x57, 0xE3, 0x07, 0x00, 0x00, 0x0A + .byte 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x60, 0xA0, 0xE1, 0x48, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x56, 0xE1, 0xDD, 0xFF, 0xFF, 0x1A + .byte 0x50, 0x60, 0xCD, 0xE5, 0x5C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A + .byte 0x00, 0x00, 0x5A, 0xE3, 0x0B, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x57, 0xE3, 0x09, 0x00, 0x00, 0x1A + .byte 0x00, 0x00, 0x5A, 0xE3, 0x18, 0x01, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x5B, 0xE3 + .byte 0x30, 0x00, 0x8D, 0xE5, 0x10, 0x01, 0x00, 0x0A, 0x2C, 0x00, 0x9D, 0xE5, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x00, 0x10, 0xC0, 0xE5, 0x0C, 0x01, 0x00, 0xEA, 0x00, 0x40, 0x84, 0xE0, 0x44, 0x00, 0x9D, 0xE5 + .byte 0x01, 0x00, 0x80, 0xE2, 0x44, 0x00, 0x8D, 0xE5, 0x17, 0x00, 0x00, 0xEA, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x5C, 0x00, 0x8D, 0xE5, 0x00, 0x50, 0xE0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x50, 0x60, 0xCD, 0xE5 + .byte 0x5C, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2, 0x5C, 0x00, 0x8D, 0xE5, 0x64, 0x00, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x40, 0xE2, 0x64, 0x00, 0x8D, 0xE5, 0x06, 0x00, 0x00, 0x0A + .byte 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x60, 0xA0, 0xE1, 0x05, 0x00, 0x56, 0xE1, 0xEF, 0xFF, 0xFF, 0x1A, 0x50, 0x60, 0xCD, 0xE5 + .byte 0x5C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0xF3, 0x00, 0x00, 0x0A, 0x40, 0x00, 0x9D, 0xE5 + .byte 0x01, 0x00, 0x80, 0xE2, 0x40, 0x00, 0x8D, 0xE5, 0xEB, 0x00, 0x00, 0xEA +_020E287C: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E2C2C + ldr r5, _020E2C74 ; =0x0210430C + b _020E2894 +_020E2890: + add r4, r4, #0x1 +_020E2894: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + strb r0, [sp, #0x50] + ldrsb r1, [sp, #0x50] + cmp r1, #0x0 + blt _020E28BC + cmp r1, #0x80 + blt _020E28C4 +_020E28BC: + mov r0, #0x0 + b _020E28D0 +_020E28C4: + mov r0, r1, lsl #0x1 + ldrh r0, [r5, r0] + and r0, r0, #0x100 +_020E28D0: + cmp r0, #0x0 + bne _020E2890 + cmp r1, #0x25 + beq _020E2900 + mov r0, r8 + mov r2, #0x1 + blx r9 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + b _020E2C2C +_020E2900: + add r4, r4, #0x1 + b _020E2C2C +_020E2908: + .byte 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 + .byte 0x1B, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 + .byte 0x39, 0xFF, 0x2F, 0xE1, 0x50, 0x00, 0xCD, 0xE5, 0x05, 0x00, 0x00, 0xEA, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1 + .byte 0x50, 0x00, 0xCD, 0xE5, 0xD0, 0x15, 0xDD, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA + .byte 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA + .byte 0x0C, 0x03, 0x9F, 0xE5, 0x81, 0x20, 0xA0, 0xE1, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2 + .byte 0x00, 0x00, 0x50, 0xE3, 0xEC, 0xFF, 0xFF, 0x1A, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE3 + .byte 0x39, 0xFF, 0x2F, 0xE1 +_020E2984: + cmp r5, #0x0 + beq _020E2B00 + cmp r10, #0x0 + beq _020E29AC + ldr r0, [sp, #0x10] + mov r7, #0x1 + add r0, r0, #0x4 + str r0, [sp, #0x10] + ldr r0, [r0, #-0x4] + sub r11, r0, #0x1 +_020E29AC: + ldr r0, [sp, #0x30] + mov r1, #0x0 + cmp r0, #0x0 + str r1, [sp, #0x5c] + beq _020E29CC + cmp r11, #0x0 + strneb r1, [r5, #0x0] + b _020E2C2C +_020E29CC: + mvn r0, #0x0 + str r5, [sp, #0x28] + str r0, [sp, #0x4c] + b _020E2A30 +_020E29DC: + strb r6, [sp, #0x50] + ldrsb r1, [sp, #0x50] + add r2, sp, #0x60 + and r3, r1, #0xff + add r2, r2, r3, asr #0x3 + ldrb r3, [r2, #0x8] + and r0, r1, #0x7 + mov r2, #0x1 + tst r3, r2, lsl r0 + beq _020E2A80 + ldrb r0, [sp, #0x62] + cmp r0, #0xa + strneb r1, [r5], #0x1 + bne _020E2A24 + mov r0, r5 + add r1, sp, #0x50 + bl mbtowc + add r5, r5, #0x2 +_020E2A24: + ldr r0, [sp, #0x5c] + add r1, r0, #0x1 + str r1, [sp, #0x5c] +_020E2A30: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + sub r0, r0, #0x1 + str r0, [sp, #0x64] + beq _020E2A80 + cmp r10, #0x0 + beq _020E2A60 + cmp r11, r1 + movcs r7, #0x1 + movcc r7, #0x0 + cmp r7, #0x0 + beq _020E2A80 +_020E2A60: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r6, r0 + ldr r0, [sp, #0x4c] + cmp r6, r0 + bne _020E29DC +_020E2A80: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + beq _020E2AA0 + cmp r10, #0x0 + beq _020E2AD8 + cmp r7, #0x0 + bne _020E2AD8 +_020E2AA0: + mov r0, r8 + ldrsb r1, [sp, #0x50] + mov r2, #0x1 + blx r9 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + cmp r11, #0x0 + str r0, [sp, #0x30] + beq _020E2C2C + ldr r0, [sp, #0x28] + mov r1, #0x0 + strb r1, [r0, #0x0] + b _020E2C2C +_020E2AD8: + add r4, r4, r0 + ldrb r0, [sp, #0x62] + cmp r0, #0xa + mov r0, #0x0 + streqh r0, [r5, #0x0] + strneb r0, [r5, #0x0] + ldr r0, [sp, #0x44] + add r0, r0, #0x1 + str r0, [sp, #0x44] + b _020E2B9C +_020E2B00: + mov r0, #0x0 + str r0, [sp, #0x5c] + mvn r5, #0x0 + b _020E2B44 +_020E2B10: + strb r6, [sp, #0x50] + ldrsb r1, [sp, #0x50] + and r0, r1, #0x7 + and r2, r1, #0xff + add r1, sp, #0x60 + add r1, r1, r2, asr #0x3 + ldrb r2, [r1, #0x8] + mov r1, #0x1 + tst r2, r1, lsl r0 + beq _020E2B74 + ldr r0, [sp, #0x5c] + add r0, r0, #0x1 + str r0, [sp, #0x5c] +_020E2B44: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + sub r0, r0, #0x1 + str r0, [sp, #0x64] + beq _020E2B74 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r6, r0 + cmp r6, r5 + bne _020E2B10 +_020E2B74: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + bne _020E2B98 + mov r0, r8 + ldrsb r1, [sp, #0x50] + mov r2, #0x1 + blx r9 + b _020E2C2C +_020E2B98: + add r4, r4, r0 +_020E2B9C: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + blt _020E2BB8 + mov r0, r8 + ldrsb r1, [sp, #0x50] + mov r2, #0x1 + blx r9 +_020E2BB8: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E2BC8: + .byte 0x00, 0x00, 0x55, 0xE3, 0x16, 0x00, 0x00, 0x0A + .byte 0x62, 0x00, 0xDD, 0xE5, 0x07, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x12, 0x00, 0x00, 0xEA + .byte 0x06, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA + .byte 0x0D, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA + .byte 0x00, 0x40, 0x85, 0xE5, 0x08, 0x00, 0x00, 0xEA, 0xB0, 0x40, 0xC5, 0xE1, 0x06, 0x00, 0x00, 0xEA + .byte 0x00, 0x40, 0x85, 0xE5, 0x04, 0x00, 0x00, 0xEA, 0x00, 0x40, 0xC5, 0xE5, 0x02, 0x00, 0x00, 0xEA + .byte 0x00, 0x40, 0x85, 0xE5, 0xC4, 0x0F, 0xA0, 0xE1, 0x04, 0x00, 0x85, 0xE5 +_020E2C2C: + ldr r0, [sp, #0xc] + ldrsb r5, [r0, #0x0] + cmp r5, #0x0 + bne _020E1F70 +_020E2C3C: + mov r0, r8 + mov r1, #0x0 + mov r2, #0x2 + blx r9 + cmp r0, #0x0 + beq _020E2C68 + ldr r0, [sp, #0x40] + cmp r0, #0x0 + addeq sp, sp, #0x88 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,pc} +_020E2C68: + ldr r0, [sp, #0x44] + add sp, sp, #0x88 + ldmia sp!, {r3-r11,pc} + .balign 4 +_020E2C74: .word 0x0210430C +_020E2C78: .word 0x02106B78 + + arm_func_start __StringRead +__StringRead: ; 0x020E2C7C + cmp r2, #0x0 + beq _020E2C98 + cmp r2, #0x1 + beq _020E2CC8 + cmp r2, #0x2 + beq _020E2CF0 + b _020E2CF8 +_020E2C98: + ldr r1, [r0, #0x0] + ldrsb r2, [r1, #0x0] + cmp r2, #0x0 + bne _020E2CB8 + mov r1, #0x1 + str r1, [r0, #0x4] + sub r0, r1, #0x2 + bx lr +_020E2CB8: + add r1, r1, #0x1 + str r1, [r0, #0x0] + and r0, r2, #0xff + bx lr +_020E2CC8: + ldr r2, [r0, #0x4] + cmp r2, #0x0 + movne r2, #0x0 + strne r2, [r0, #0x4] + bne _020E2CE8 + ldr r2, [r0, #0x0] + sub r2, r2, #0x1 + str r2, [r0, #0x0] +_020E2CE8: + mov r0, r1 + bx lr +_020E2CF0: + ldr r0, [r0, #0x4] + bx lr +_020E2CF8: + mov r0, #0x0 + bx lr + + arm_func_start vsscanf +vsscanf: ; 0x020E2D00 + stmdb sp!, {lr} + sub sp, sp, #0xc + str r0, [sp, #0x4] + cmp r0, #0x0 + ldrnesb r0, [r0, #0x0] + mov lr, r1 + mov r3, r2 + cmpne r0, #0x0 + addeq sp, sp, #0xc + mvneq r0, #0x0 + ldmeqia sp!, {pc} + mov r12, #0x0 + str r12, [sp, #0x8] + ldr r0, _020E2D50 ; =__StringRead + add r1, sp, #0x4 + mov r2, lr + str r12, [sp, #0x0] + bl __sformatter + add sp, sp, #0xc + ldmia sp!, {pc} + .balign 4 +_020E2D50: .word __StringRead + + arm_func_start sscanf +sscanf: ; 0x020E2D54 + stmdb sp!, {r0-r3} + stmdb sp!, {r3,lr} + add r2, sp, #0xc + bic r2, r2, #0x3 + ldr r1, [sp, #0xc] + add r2, r2, #0x4 + bl vsscanf + ldmia sp!, {r3,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start raise +raise: ; 0x020E2D7C + stmdb sp!, {r3-r5,lr} + mov r5, r0 + cmp r5, #0x1 + blt _020E2D94 + cmp r5, #0x7 + ble _020E2D9C +_020E2D94: + mvn r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E2D9C: + ldr r0, _020E2E98 ; =0x021D7178 + bl OS_TryLockMutex +_020E2DA4: + .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A, 0xE8, 0x00, 0x9F, 0xE5 + .byte 0xE8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0xE4, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5 + .byte 0x01, 0x20, 0xA0, 0xE3, 0x1C, 0x30, 0x81, 0xE5, 0x1C, 0x20, 0x80, 0xE5, 0x15, 0x00, 0x00, 0xEA + .byte 0xC4, 0x00, 0x9F, 0xE5, 0xC4, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5, 0x1C, 0x10, 0x91, 0xE5 + .byte 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A, 0xB0, 0x00, 0x9F, 0xE5 + .byte 0x1C, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2, 0x1C, 0x10, 0x80, 0xE5, 0x09, 0x00, 0x00, 0xEA + .byte 0x90, 0x00, 0x9F, 0xE5, 0x81, 0xA4, 0xFF, 0xEB, 0x8C, 0x00, 0x9F, 0xE5, 0x8C, 0x10, 0x9F, 0xE5 + .byte 0x04, 0x20, 0x90, 0xE5, 0x88, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5, 0x01, 0x20, 0xA0, 0xE3 + .byte 0x1C, 0x30, 0x81, 0xE5, 0x1C, 0x20, 0x80, 0xE5, 0x78, 0x10, 0x9F, 0xE5, 0x01, 0x20, 0x45, 0xE2 + .byte 0x02, 0x41, 0x91, 0xE7, 0x01, 0x00, 0x54, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x02, 0x01, 0x81, 0x17 + .byte 0x5C, 0x00, 0x9F, 0xE5, 0x1C, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x51, 0xE2, 0x1C, 0x10, 0x80, 0xE5 + .byte 0x01, 0x00, 0x00, 0x1A, 0x3C, 0x00, 0x9F, 0xE5, 0x50, 0xA4, 0xFF, 0xEB, 0x01, 0x00, 0x54, 0xE3 + .byte 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x55, 0x03, 0x01, 0x00, 0x00, 0x1A + .byte 0x00, 0x00, 0xA0, 0xE3, 0x38, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x1A + .byte 0x00, 0x00, 0xA0, 0xE3, 0xB9, 0xEC, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1, 0x34, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x38, 0x80, 0xBD, 0xE8 +_020E2E98: .word 0x021D7178 +_020E2E9C: + .byte 0x98, 0x34, 0x1D, 0x02 + .byte 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0xAC, 0x74, 0x1D, 0x02 + + arm_func_start strlen +strlen: ; 0x020E2EAC + mvn r2, #0x0 +_020E2EB0: + ldrsb r1, [r0], #0x1 + add r2, r2, #0x1 + cmp r1, #0x0 + bne _020E2EB0 + mov r0, r2 + bx lr + + arm_func_start strcpy +strcpy: ; 0x020E2EC8 + stmdb sp!, {r3-r5,lr} + and r4, r1, #0x3 + and r3, r0, #0x3 + mov r2, r0 + cmp r3, r4 + bne _020E2F64 + cmp r4, #0x0 + beq _020E2F20 + ldrb r3, [r1, #0x0] + strb r3, [r0, #0x0] + cmp r3, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020E2EF8: + .byte 0x03, 0x40, 0x74, 0xE2, 0x05, 0x00, 0x00, 0x0A + .byte 0x01, 0x30, 0xF1, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x01, 0x30, 0xE2, 0xE5, 0x38, 0x80, 0xBD, 0x08 + .byte 0x01, 0x40, 0x54, 0xE2, 0xF9, 0xFF, 0xFF, 0x1A, 0x01, 0x20, 0x82, 0xE2, 0x01, 0x10, 0x81, 0xE2 +_020E2F20: + ldr r5, [r1, #0x0] + ldr r3, _020E2F88 ; =0xFEFEFEFF + mvn r4, r5 + add lr, r5, r3 + ldr ip, _020E2F8C ; =0x80808080 + and r4, lr, r4 + tst r4, r12 + bne _020E2F64 + sub r2, r2, #0x4 +_020E2F44: + str r5, [r2, #0x4]! + ldr r5, [r1, #0x4]! + add r4, r5, r3 + mvn lr, r5 + and lr, r4, lr + tst lr, r12 + beq _020E2F44 + add r2, r2, #0x4 +_020E2F64: + ldrb r3, [r1, #0x0] + strb r3, [r2, #0x0] + cmp r3, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020E2F74: + .byte 0x01, 0x30, 0xF1, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x01, 0x30, 0xE2, 0xE5 + .byte 0xFB, 0xFF, 0xFF, 0x1A, 0x38, 0x80, 0xBD, 0xE8 +_020E2F88: .word 0xFEFEFEFF +_020E2F8C: .word 0x80808080 + + arm_func_start strncpy +strncpy: ; 0x020E2F90 + stmdb sp!, {r3,lr} + mov lr, r0 + cmp r2, #0x0 + ldmeqia sp!, {r3,pc} +_020E2FA0: + .byte 0xD1, 0x30, 0xD1, 0xE0, 0x0E, 0xC0, 0xA0, 0xE1, 0x01, 0x30, 0xCE, 0xE4, 0xD0, 0x30, 0xDC, 0xE1 + .byte 0x00, 0x00, 0x53, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x01, 0x20, 0x52, 0xE2, 0x08, 0x80, 0xBD, 0x08 + .byte 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x10, 0xCE, 0xE4, 0x01, 0x20, 0x52, 0xE2, 0xFC, 0xFF, 0xFF, 0x1A + .byte 0x08, 0x80, 0xBD, 0xE8, 0x01, 0x20, 0x52, 0xE2, 0xF0, 0xFF, 0xFF, 0x1A, 0x08, 0x80, 0xBD, 0xE8 + + arm_func_start strcat +strcat: ; 0x020E2FE0 + mov r3, r0 +_020E2FE4: + ldrsb r2, [r3], #0x1 + cmp r2, #0x0 + bne _020E2FE4 + sub r3, r3, #0x1 +_020E2FF4: + ldrsb r2, [r1], #0x1 + mov r12, r3 + strb r2, [r3], #0x1 + ldrsb r2, [r12, #0x0] + cmp r2, #0x0 + bne _020E2FF4 + bx lr + + arm_func_start strncat +strncat: ; 0x020E3010 + stmdb sp!, {r3,lr} + mov r12, r0 +_020E3018: + ldrsb r3, [r12], #0x1 + cmp r3, #0x0 + bne _020E3018 + cmp r2, #0x0 + sub r12, r12, #0x1 + beq _020E3054 +_020E3030: + ldrsb r3, [r1], #0x1 + mov lr, r12 + strb r3, [r12], #0x1 + ldrsb r3, [lr, #0x0] + cmp r3, #0x0 + subeq r12, r12, #0x1 + beq _020E3054 + subs r2, r2, #0x1 + bne _020E3030 +_020E3054: + mov r1, #0x0 + strb r1, [r12, #0x0] + ldmia sp!, {r3,pc} + + arm_func_start strcmp +strcmp: ; 0x020E3060 + stmdb sp!, {r4,lr} + ldrb r2, [r0, #0x0] + ldrb r3, [r1, #0x0] + subs r3, r2, r3 + movne r0, r3 + ldmneia sp!, {r4,pc} +_020E3078: + .byte 0x03, 0x40, 0x00, 0xE2, 0x03, 0x30, 0x01, 0xE2 + .byte 0x04, 0x00, 0x53, 0xE1, 0x2C, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x54, 0xE3, 0x10, 0x00, 0x00, 0x0A + .byte 0x00, 0x00, 0x52, 0xE3, 0x00, 0x00, 0xA0, 0x03, 0x10, 0x80, 0xBD, 0x08, 0x03, 0x40, 0x74, 0xE2 + .byte 0x09, 0x00, 0x00, 0x0A, 0x01, 0x30, 0xF0, 0xE5, 0x01, 0x20, 0xF1, 0xE5, 0x02, 0x20, 0x53, 0xE0 + .byte 0x02, 0x00, 0xA0, 0x11, 0x10, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x53, 0xE3, 0x00, 0x00, 0xA0, 0x03 + .byte 0x10, 0x80, 0xBD, 0x08, 0x01, 0x40, 0x54, 0xE2, 0xF5, 0xFF, 0xFF, 0x1A, 0x01, 0x00, 0x80, 0xE2 + .byte 0x01, 0x10, 0x81, 0xE2, 0x00, 0x20, 0x90, 0xE5, 0x8C, 0x30, 0x9F, 0xE5, 0x02, 0x40, 0xE0, 0xE1 + .byte 0x03, 0xE0, 0x82, 0xE0, 0x84, 0xC0, 0x9F, 0xE5, 0x04, 0x40, 0x0E, 0xE0, 0x0C, 0x00, 0x14, 0xE1 + .byte 0x00, 0x40, 0x91, 0xE5, 0x0B, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x52, 0xE1, 0x06, 0x00, 0x00, 0x1A + .byte 0x04, 0x20, 0xB0, 0xE5, 0x04, 0x40, 0xB1, 0xE5, 0x03, 0xE0, 0x82, 0xE0, 0x0C, 0x00, 0x1E, 0xE1 + .byte 0x04, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x52, 0xE1, 0xF8, 0xFF, 0xFF, 0x0A, 0x01, 0x00, 0x40, 0xE2 + .byte 0x01, 0x10, 0x41, 0xE2, 0x04, 0x00, 0x00, 0xEA, 0x00, 0x20, 0xD0, 0xE5, 0x00, 0x30, 0xD1, 0xE5 + .byte 0x03, 0x30, 0x52, 0xE0, 0x03, 0x00, 0xA0, 0x11, 0x10, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x52, 0xE3 + .byte 0x00, 0x00, 0xA0, 0x03, 0x10, 0x80, 0xBD, 0x08, 0x01, 0x30, 0xF0, 0xE5, 0x01, 0x20, 0xF1, 0xE5 + .byte 0x02, 0x20, 0x53, 0xE0, 0x02, 0x00, 0xA0, 0x11, 0x10, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x53, 0xE3 + .byte 0xF8, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x80, 0xBD, 0xE8, 0xFF, 0xFE, 0xFE, 0xFE + .byte 0x80, 0x80, 0x80, 0x80 + + arm_func_start strncmp +strncmp: ; 0x020E3174 + cmp r2, #0x0 + beq _020E31A0 +_020E317C: + ldrb r12, [r1], #0x1 + ldrb r3, [r0], #0x1 + cmp r3, r12 + subne r0, r3, r12 + bxne lr + cmp r3, #0x0 + beq _020E31A0 + subs r2, r2, #0x1 + bne _020E317C +_020E31A0: + mov r0, #0x0 + bx lr + + arm_func_start strchr +strchr: ; 0x020E31A8 + ldrsb r2, [r0], #0x1 + mov r1, r1, lsl #0x18 + mov r1, r1, asr #0x18 + cmp r2, #0x0 + beq _020E31D4 +_020E31BC: + cmp r2, r1 + subeq r0, r0, #0x1 + bxeq lr + ldrsb r2, [r0], #0x1 + cmp r2, #0x0 + bne _020E31BC +_020E31D4: + cmp r1, #0x0 + movne r0, #0x0 + subeq r0, r0, #0x1 + bx lr + + arm_func_start strspn +strspn: ; 0x020E31E4 + stmdb sp!, {r4,lr} + sub sp, sp, #0x20 + add r12, sp, #0x0 + mov r3, #0x8 + mov r2, #0x0 +_020E31F8: + strb r2, [r12, #0x0] + strb r2, [r12, #0x1] + strb r2, [r12, #0x2] + strb r2, [r12, #0x3] + add r12, r12, #0x4 + subs r3, r3, #0x1 + bne _020E31F8 + ldrb r3, [r1, #0x0] + add r4, r1, #0x1 + cmp r3, #0x0 + beq _020E3254 + add lr, sp, #0x0 + mov r2, #0x1 +_020E322C: + and r12, r3, #0xff + and r1, r3, #0x7 + mov r1, r2, lsl r1 + ldrb r3, [lr, r12, asr #0x3] + and r1, r1, #0xff + orr r1, r3, r1 + strb r1, [lr, r12, asr #0x3] + ldrb r3, [r4], #0x1 + cmp r3, #0x0 + bne _020E322C +_020E3254: + ldrb r1, [r0, #0x0] + add r4, r0, #0x1 + cmp r1, #0x0 + beq _020E3294 + add r12, sp, #0x0 + mov r2, #0x1 +_020E326C: + and r3, r1, #0xff + and r1, r1, #0x7 + mov r1, r2, lsl r1 + ldrb r3, [r12, r3, asr #0x3] + and r1, r1, #0xff + tst r3, r1 + bne _020E3294 + ldrb r1, [r4], #0x1 + cmp r1, #0x0 + bne _020E326C +_020E3294: + sub r0, r4, r0 + sub r0, r0, #0x1 + add sp, sp, #0x20 + ldmia sp!, {r4,pc} + + arm_func_start strstr +strstr: ; 0x020E32A4 + stmdb sp!, {r4,lr} + cmp r1, #0x0 + ldrneb r2, [r1, #0x0] + cmpne r2, #0x0 + ldmeqia sp!, {r4,pc} +_020E32B8: + .byte 0x00, 0x30, 0xD0, 0xE5, 0x01, 0x40, 0x80, 0xE2 + .byte 0x00, 0x00, 0x53, 0xE3, 0x0F, 0x00, 0x00, 0x0A, 0x02, 0x00, 0x53, 0xE1, 0x0A, 0x00, 0x00, 0x1A + .byte 0x04, 0xE0, 0xA0, 0xE1, 0x01, 0xC0, 0x81, 0xE2, 0x01, 0x30, 0xDC, 0xE4, 0x01, 0x00, 0xDE, 0xE4 + .byte 0x03, 0x00, 0x50, 0xE1, 0x01, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x50, 0xE3, 0xF9, 0xFF, 0xFF, 0x1A + .byte 0x00, 0x00, 0x53, 0xE3, 0x01, 0x00, 0x44, 0x02, 0x10, 0x80, 0xBD, 0x08, 0x01, 0x30, 0xD4, 0xE4 + .byte 0x00, 0x00, 0x53, 0xE3, 0xEF, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x80, 0xBD, 0xE8 + + arm_func_start __strtold +__strtold: ; 0x020E3310 + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0xa8 + ldr r4, [sp, #0xd0] + mov r10, #0x0 + str r4, [sp, #0xd0] + str r0, [sp, #0x0] + add r6, sp, #0x80 + mov r9, r1 + mov r8, r2 + str r3, [sp, #0x4] + mov r4, r10 + str r10, [sp, #0x2c] + mov r5, #0x1 + mov r0, #0x4 +_020E3348: + strh r10, [r6, #0x0] + strh r10, [r6, #0x2] + strh r10, [r6, #0x4] + strh r10, [r6, #0x6] + add r6, r6, #0x8 + subs r0, r0, #0x1 + bne _020E3348 + mov r0, #0x0 + str r0, [sp, #0x28] + strh r10, [r6, #0x0] + strh r10, [r6, #0x2] + ldr r2, [sp, #0x28] + ldr r1, [sp, #0xd0] + strh r10, [r6, #0x4] + str r2, [r1, #0x0] + mov r1, r2 + mov r0, r8 + str r1, [sp, #0x24] + str r1, [sp, #0x20] + str r1, [sp, #0x1c] + str r1, [sp, #0x18] + str r1, [sp, #0x10] + str r1, [sp, #0xc] + str r1, [sp, #0x8] + add r4, r4, #0x1 + blx r9 + mov r1, r0 + ldr r7, _020E42F0 ; =0x02104439 + add r0, sp, #0x4d + mov r6, #0x4 +_020E33C0: + ldrb r3, [r7, #0x0] + ldrb r2, [r7, #0x1] + add r7, r7, #0x2 + strb r3, [r0, #0x0] + strb r2, [r0, #0x1] + add r0, r0, #0x2 + subs r6, r6, #0x1 + bne _020E33C0 + ldrb r3, [r7, #0x0] + ldr r2, _020E42F4 ; =0x02104434 + strb r3, [r0, #0x0] + ldrb r3, [r2, #0x1] + ldrb r0, [r2, #0x2] + ldrb r6, [r2, #0x0] + strb r3, [sp, #0x31] + strb r0, [sp, #0x32] + ldrb r3, [r2, #0x3] + ldrb r0, [r2, #0x4] + strb r6, [sp, #0x30] + strb r3, [sp, #0x33] + strb r0, [sp, #0x34] + b _020E4104 +_020E3418: + cmp r5, #0x100 + bgt _020E3490 + bge _020E3B98 + cmp r5, #0x20 + bgt _020E3474 + bge _020E3A6C + cmp r5, #0x8 + bgt _020E3468 + cmp r5, #0x0 + addge pc, pc, r5, lsl #0x2 + b _020E4104 +_020E3444: + .byte 0x2E, 0x03, 0x00, 0xEA, 0x21, 0x00, 0x00, 0xEA, 0x19, 0x01, 0x00, 0xEA + .byte 0x2B, 0x03, 0x00, 0xEA, 0x43, 0x01, 0x00, 0xEA, 0x29, 0x03, 0x00, 0xEA, 0x28, 0x03, 0x00, 0xEA + .byte 0x27, 0x03, 0x00, 0xEA, 0x49, 0x01, 0x00, 0xEA +_020E3468: + cmp r5, #0x10 + beq _020E3A34 + b _020E4104 +_020E3474: + cmp r5, #0x40 + bgt _020E3484 + beq _020E3AF8 + b _020E4104 +_020E3484: + cmp r5, #0x80 + beq _020E3B44 + b _020E4104 +_020E3490: + cmp r5, #0x2000 + bgt _020E34B8 + bge _020E36EC + cmp r5, #0x200 + bgt _020E34AC + beq _020E3BF8 + b _020E4104 +_020E34AC: + cmp r5, #0x400 + beq _020E3C20 + b _020E4104 +_020E34B8: + cmp r5, #0x4000 + bgt _020E34C8 + beq _020E35F4 + b _020E4104 +_020E34C8: + cmp r5, #0x8000 + beq _020E3C98 + b _020E4104 +_020E34D4: + .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 + .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1 + .byte 0x00, 0x0E, 0x9F, 0xE5, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 + .byte 0x08, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 + .byte 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x2C, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2 + .byte 0x2C, 0x00, 0x8D, 0xE5, 0xF6, 0x02, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA + .byte 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x01, 0x00, 0xA0, 0xE1, 0x01, 0x00, 0x00, 0xEA + .byte 0xB4, 0x0D, 0x9F, 0xE5, 0x01, 0x00, 0xD0, 0xE7, 0x49, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0xCA + .byte 0x15, 0x00, 0x00, 0xAA, 0x2D, 0x00, 0x50, 0xE3, 0x23, 0x00, 0x00, 0xCA, 0x2B, 0x00, 0x50, 0xE3 + .byte 0x21, 0x00, 0x00, 0xBA, 0x07, 0x00, 0x00, 0x0A, 0x2D, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A + .byte 0x1D, 0x00, 0x00, 0xEA, 0x4E, 0x00, 0x50, 0xE3, 0x13, 0x00, 0x00, 0x0A, 0x1A, 0x00, 0x00, 0xEA + .byte 0x01, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x8D, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1 + .byte 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 + .byte 0x01, 0x00, 0xA0, 0xE3, 0x18, 0x00, 0x8D, 0xE5, 0xD5, 0x02, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2 + .byte 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x10, 0xA0, 0xE1, 0x01, 0x59, 0xA0, 0xE3, 0xCD, 0x02, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2 + .byte 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x10, 0xA0, 0xE1, 0x02, 0x5A, 0xA0, 0xE3, 0xC5, 0x02, 0x00, 0xEA, 0x02, 0x50, 0xA0, 0xE3 + .byte 0xC3, 0x02, 0x00, 0xEA +_020E35F4: + mov r5, #0x1 + add r7, sp, #0x4d + add r0, sp, #0x76 + mov r6, #0x4 +_020E3604: + ldrb r3, [r7, #0x0] + ldrb r2, [r7, #0x1] + add r7, r7, #0x2 + strb r3, [r0, #0x0] + strb r2, [r0, #0x1] + add r0, r0, #0x2 + subs r6, r6, #0x1 + bne _020E3604 + ldrb r2, [r7, #0x0] + add r6, sp, #0x77 + ldr r7, _020E42FC ; =0x0210428C + strb r2, [r0, #0x0] + b _020E3658 +_020E3638: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r6, r6, #0x1 + add r5, r5, #0x1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 +_020E3658: + cmp r5, #0x8 + bge _020E3688 + cmp r1, #0x0 + blt _020E3670 + cmp r1, #0x80 + blt _020E3678 +_020E3670: + mov r2, r1 + b _020E367C +_020E3678: + ldrb r2, [r7, r1] +_020E367C: + ldrsb r0, [r6, #0x0] + cmp r0, r2 + beq _020E3638 +_020E3688: + cmp r5, #0x3 + cmpne r5, #0x8 + bne _020E36E4 + ldr r0, [sp, #0x28] + cmp r0, #0x0 + beq _020E36B8 + ldr r1, _020E4300 ; =0x02106B74 + mov r0, #0x0 + ldr r1, [r1, #0x0] + bl _fsub + bl _f2d + b _020E36C4 +_020E36B8: + ldr r0, _020E4300 ; =0x02106B74 + ldr r0, [r0, #0x0] + bl _f2d +_020E36C4: + ldr r2, [sp, #0x2c] + add r3, r2, r5 + ldr r2, [sp, #0x18] + add r3, r2, r3 + ldr r2, [sp, #0x4] + add sp, sp, #0xa8 + str r3, [r2, #0x0] + ldmia sp!, {r3-r11,pc} +_020E36E4: + mov r5, #0x1000 + b _020E4104 +_020E36EC: + ldrb r3, [sp, #0x30] + ldrb r0, [sp, #0x32] + ldrb r2, [sp, #0x31] + strb r3, [sp, #0x40] + strb r0, [sp, #0x42] + ldrb r3, [sp, #0x33] + ldrb r0, [sp, #0x34] + strb r2, [sp, #0x41] + mov r5, #0x1 + strb r0, [sp, #0x44] + mov r6, #0x0 + add r2, sp, #0x56 + strb r3, [sp, #0x43] + mov r0, #0x8 +_020E3724: + strb r6, [r2, #0x0] + strb r6, [r2, #0x1] + strb r6, [r2, #0x2] + strb r6, [r2, #0x3] + add r2, r2, #0x4 + subs r0, r0, #0x1 + bne _020E3724 + add r7, sp, #0x41 + b _020E3768 +_020E3748: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r7, r7, #0x1 + add r5, r5, #0x1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 +_020E3768: + cmp r5, #0x4 + bge _020E379C + cmp r1, #0x0 + blt _020E3780 + cmp r1, #0x80 + blt _020E3788 +_020E3780: + mov r2, r1 + b _020E3790 +_020E3788: + ldr r0, _020E42FC ; =0x0210428C + ldrb r2, [r0, r1] +_020E3790: + ldrsb r0, [r7, #0x0] + cmp r0, r2 + beq _020E3748 +_020E379C: + sub r0, r5, #0x3 + cmp r0, #0x1 + bhi _020E38B0 + cmp r5, #0x4 + bne _020E3854 + ldr r7, _020E42F8 ; =0x0210430C + b _020E37DC +_020E37B8: + add r0, sp, #0x56 + strb r1, [r0, r6] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r6, r6, #0x1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 +_020E37DC: + cmp r6, #0x20 + bge _020E3844 + cmp r1, #0x0 + blt _020E37F4 + cmp r1, #0x80 + blt _020E37FC +_020E37F4: + mov r0, #0x0 + b _020E3808 +_020E37FC: + mov r0, r1, lsl #0x1 + ldrh r0, [r7, r0] + and r0, r0, #0x8 +_020E3808: + cmp r0, #0x0 + bne _020E37B8 + cmp r1, #0x0 + blt _020E3820 + cmp r1, #0x80 + blt _020E3828 +_020E3820: + mov r0, #0x0 + b _020E3834 +_020E3828: + mov r0, r1, lsl #0x1 + ldrh r0, [r7, r0] + and r0, r0, #0x1 +_020E3834: + cmp r0, #0x0 + bne _020E37B8 + cmp r1, #0x2e + beq _020E37B8 +_020E3844: + cmp r1, #0x29 + movne r5, #0x1000 + bne _020E4104 + add r6, r6, #0x1 +_020E3854: + add r0, sp, #0x56 + mov r1, #0x0 + strb r1, [r0, r6] + ldr r1, [sp, #0x28] + cmp r1, #0x0 + beq _020E3888 + bl nan + mov r2, r0 + mov r0, #0x0 + mov r3, r1 + mov r1, r0 + bl _dsub +_020E3884: + .byte 0x00, 0x00, 0x00, 0xEA +_020E3888: + bl nan + ldr r2, [sp, #0x2c] + add r2, r2, r5 + add r3, r6, r2 + ldr r2, [sp, #0x18] + add r3, r2, r3 + ldr r2, [sp, #0x4] + add sp, sp, #0xa8 + str r3, [r2, #0x0] + ldmia sp!, {r3-r11,pc} +_020E38B0: + mov r5, #0x1000 + b _020E4104 +_020E38B8: + .byte 0x2E, 0x00, 0x51, 0xE3, 0x07, 0x00, 0x00, 0x1A + .byte 0x10, 0x50, 0xA0, 0xE3, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x08, 0x02, 0x00, 0xEA + .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA + .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1, 0xF4, 0x09, 0x9F, 0xE5 + .byte 0xB2, 0x00, 0x90, 0xE1, 0x08, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x5A, 0xA0, 0x03 + .byte 0xFB, 0x01, 0x00, 0x0A, 0x30, 0x00, 0x51, 0xE3, 0x10, 0x00, 0x00, 0x1A, 0x01, 0x40, 0x84, 0xE2 + .byte 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x03, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x50, 0xE3 + .byte 0x01, 0x00, 0x00, 0xAA, 0xB0, 0x29, 0x9F, 0xE5, 0x00, 0x00, 0xD2, 0xE7, 0x58, 0x00, 0x50, 0xE3 + .byte 0x02, 0x59, 0xA0, 0x03, 0x01, 0xA0, 0xA0, 0x03, 0x04, 0x50, 0xA0, 0x13, 0xE8, 0x01, 0x00, 0xEA + .byte 0x08, 0x50, 0xA0, 0xE3, 0xE6, 0x01, 0x00, 0xEA, 0x30, 0x00, 0x51, 0xE3, 0x08, 0x50, 0xA0, 0x13 + .byte 0xE3, 0x01, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 + .byte 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xDC, 0x01, 0x00, 0xEA + .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA + .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1, 0x44, 0x09, 0x9F, 0xE5 + .byte 0xB2, 0x00, 0x90, 0xE1, 0x08, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x1A + .byte 0x2E, 0x00, 0x51, 0xE3, 0x40, 0x50, 0xA0, 0x13, 0xCD, 0x01, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x20, 0x50, 0xA0, 0xE3, 0x01, 0x40, 0x84, 0xE2 + .byte 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xC5, 0x01, 0x00, 0xEA, 0x84, 0x20, 0xDD, 0xE5 + .byte 0x14, 0x00, 0x52, 0xE3, 0x1C, 0x00, 0x9D, 0x25, 0x01, 0x00, 0x80, 0x22, 0x1C, 0x00, 0x8D, 0x25 + .byte 0x04, 0x00, 0x00, 0x2A, 0x01, 0x00, 0x82, 0xE2, 0x84, 0x00, 0xCD, 0xE5, 0x80, 0x00, 0x8D, 0xE2 + .byte 0x02, 0x00, 0x80, 0xE0, 0x05, 0x10, 0xC0, 0xE5, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1 + .byte 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 + .byte 0xB3, 0x01, 0x00, 0xEA +_020E3A34: + cmp r1, #0x0 + blt _020E3A44 + cmp r1, #0x80 + blt _020E3A4C +_020E3A44: + mov r0, #0x0 + b _020E3A5C +_020E3A4C: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3A5C: + cmp r0, #0x0 + moveq r5, #0x1000 + movne r5, #0x20 + b _020E4104 +_020E3A6C: + cmp r1, #0x0 + blt _020E3A7C + cmp r1, #0x80 + blt _020E3A84 +_020E3A7C: + mov r0, #0x0 + b _020E3A94 +_020E3A84: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3A94: + cmp r0, #0x0 + moveq r5, #0x40 + beq _020E4104 + ldrb r3, [sp, #0x84] + cmp r3, #0x14 + bhs _020E3ADC + cmp r1, #0x30 + cmpeq r3, #0x0 + beq _020E3AD0 + ldrb r2, [sp, #0x84] + add r0, sp, #0x80 + add r0, r0, r3 + add r2, r2, #0x1 + strb r2, [sp, #0x84] + strb r1, [r0, #0x5] +_020E3AD0: + ldr r0, [sp, #0x1c] + sub r0, r0, #0x1 + str r0, [sp, #0x1c] +_020E3ADC: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3AF8: + cmp r1, #0x0 + blt _020E3B08 + cmp r1, #0x80 + blt _020E3B10 +_020E3B08: + mov r0, r1 + b _020E3B18 +_020E3B10: + ldr r0, _020E42FC ; =0x0210428C + ldrb r0, [r0, r1] +_020E3B18: + cmp r0, #0x45 + movne r5, #0x800 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r5, #0x80 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3B44: + cmp r1, #0x2b + bne _020E3B68 + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E3B90 +_020E3B68: + cmp r1, #0x2d + bne _020E3B90 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + mov r0, #0x1 + str r0, [sp, #0x24] +_020E3B90: + mov r5, #0x100 + b _020E4104 +_020E3B98: + cmp r1, #0x0 + blt _020E3BA8 + cmp r1, #0x80 + blt _020E3BB0 +_020E3BA8: + mov r0, #0x0 + b _020E3BC0 +_020E3BB0: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3BC0: + cmp r0, #0x0 + moveq r5, #0x1000 + beq _020E4104 + cmp r1, #0x30 + movne r5, #0x400 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r5, #0x200 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3BF8: + cmp r1, #0x30 + movne r5, #0x400 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3C20: + cmp r1, #0x0 + blt _020E3C30 + cmp r1, #0x80 + blt _020E3C38 +_020E3C30: + mov r0, #0x0 + b _020E3C48 +_020E3C38: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3C48: + cmp r0, #0x0 + moveq r5, #0x800 + beq _020E4104 + ldr r0, [sp, #0x20] + sub r2, r1, #0x30 + mov r1, #0xa + mla r0, r1, r0, r2 + ldr r1, _020E4304 ; =0x00007FFF + str r0, [sp, #0x20] + cmp r0, r1 + ldrgt r0, [sp, #0xd0] + movgt r1, #0x1 + strgt r1, [r0, #0x0] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3C98: + cmp r10, #0x20 + bgt _020E3CE8 + bge _020E3FBC + cmp r10, #0x8 + bgt _020E3CDC + cmp r10, #0x0 + addge pc, pc, r10, lsl #0x2 + b _020E4104 +_020E3CB8: + .byte 0x11, 0x01, 0x00, 0xEA, 0x12, 0x00, 0x00, 0xEA + .byte 0x25, 0x00, 0x00, 0xEA, 0x0E, 0x01, 0x00, 0xEA, 0x2D, 0x00, 0x00, 0xEA, 0x0C, 0x01, 0x00, 0xEA + .byte 0x0B, 0x01, 0x00, 0xEA, 0x0A, 0x01, 0x00, 0xEA, 0x6D, 0x00, 0x00, 0xEA +_020E3CDC: + cmp r10, #0x10 + beq _020E3F70 + b _020E4104 +_020E3CE8: + cmp r10, #0x80 + bgt _020E3D00 + bge _020E4064 + cmp r10, #0x40 + beq _020E4004 + b _020E4104 +_020E3D00: + cmp r10, #0x100 + beq _020E408C + b _020E4104 +_020E3D0C: + .byte 0x00, 0x10, 0xA0, 0xE3 + .byte 0x45, 0x00, 0x8D, 0xE2, 0x14, 0x00, 0x8D, 0xE5, 0x00, 0x10, 0xC0, 0xE5, 0x01, 0x10, 0xC0, 0xE5 + .byte 0x02, 0x10, 0xC0, 0xE5, 0x03, 0x10, 0xC0, 0xE5, 0x04, 0x10, 0xC0, 0xE5, 0x05, 0x10, 0xC0, 0xE5 + .byte 0x06, 0x10, 0xC0, 0xE5, 0x07, 0x10, 0xC0, 0xE5, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 + .byte 0x08, 0x10, 0x8D, 0xE5, 0x01, 0xB0, 0xA0, 0xE1, 0x02, 0xA0, 0xA0, 0xE3, 0x01, 0x40, 0x84, 0xE2 + .byte 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xE9, 0x00, 0x00, 0xEA, 0x30, 0x00, 0x51, 0xE3 + .byte 0x04, 0xA0, 0xA0, 0x13, 0xE6, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1 + .byte 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 + .byte 0xDF, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 + .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1 + .byte 0x50, 0x05, 0x9F, 0xE5, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0B, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 + .byte 0x0A, 0x00, 0x00, 0x1A, 0x2E, 0x00, 0x51, 0xE3, 0x10, 0xA0, 0xA0, 0x13, 0xD0, 0x00, 0x00, 0x1A + .byte 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x08, 0xA0, 0xA0, 0xE3 + .byte 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xC8, 0x00, 0x00, 0xEA + .byte 0x08, 0x20, 0x9D, 0xE5, 0x0E, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x52, 0xE1, 0x21, 0x00, 0x00, 0x2A + .byte 0x02, 0x00, 0xA0, 0xE1, 0x01, 0x00, 0x80, 0xE2, 0x08, 0x00, 0x8D, 0xE5, 0x14, 0x00, 0x9D, 0xE5 + .byte 0xAB, 0x2F, 0x8B, 0xE0, 0x00, 0x00, 0x51, 0xE3, 0xC2, 0x00, 0xD0, 0xE7, 0x03, 0x00, 0x00, 0xBA + .byte 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xAA, 0xDC, 0x24, 0x9F, 0xE5, 0x01, 0x10, 0xD2, 0xE7 + .byte 0x41, 0x00, 0x51, 0xE3, 0x37, 0x10, 0x41, 0xA2, 0x30, 0x10, 0x41, 0xB2, 0xAB, 0x2F, 0xA0, 0xE1 + .byte 0xFF, 0x30, 0x01, 0xE2, 0x8B, 0x1F, 0x62, 0xE0, 0xE1, 0x1F, 0x92, 0xE0, 0x03, 0x12, 0xA0, 0x01 + .byte 0xAB, 0x2F, 0x8B, 0xE0, 0x03, 0x00, 0x80, 0x11, 0xFF, 0x10, 0x01, 0x02, 0x01, 0x00, 0x80, 0x01 + .byte 0x14, 0x10, 0x9D, 0xE5, 0x01, 0xB0, 0x8B, 0xE2, 0xC2, 0x00, 0xC1, 0xE7, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x10, 0xA0, 0xE1, 0xA2, 0x00, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1 + .byte 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 + .byte 0x9B, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 + .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1 + .byte 0x40, 0x04, 0x9F, 0xE5, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0B, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 + .byte 0x10, 0xA0, 0xA0, 0x03, 0x8E, 0x00, 0x00, 0x0A, 0x08, 0x20, 0x9D, 0xE5, 0x0E, 0x00, 0xA0, 0xE3 + .byte 0x00, 0x00, 0x52, 0xE1, 0x1E, 0x00, 0x00, 0x2A, 0x14, 0x00, 0x9D, 0xE5, 0xAB, 0x2F, 0x8B, 0xE0 + .byte 0x00, 0x00, 0x51, 0xE3, 0xC2, 0x00, 0xD0, 0xE7, 0x03, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 + .byte 0x01, 0x00, 0x00, 0xAA, 0x00, 0x24, 0x9F, 0xE5, 0x01, 0x10, 0xD2, 0xE7, 0x41, 0x00, 0x51, 0xE3 + .byte 0x37, 0x10, 0x41, 0xA2, 0x30, 0x10, 0x41, 0xB2, 0xAB, 0x2F, 0xA0, 0xE1, 0xFF, 0x30, 0x01, 0xE2 + .byte 0x8B, 0x1F, 0x62, 0xE0, 0xE1, 0x1F, 0x92, 0xE0, 0x03, 0x12, 0xA0, 0x01, 0xAB, 0x2F, 0x8B, 0xE0 + .byte 0x03, 0x00, 0x80, 0x11, 0xFF, 0x10, 0x01, 0x02, 0x01, 0x00, 0x80, 0x01, 0x14, 0x10, 0x9D, 0xE5 + .byte 0x01, 0xB0, 0x8B, 0xE2, 0xC2, 0x00, 0xC1, 0xE7, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1 + .byte 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 + .byte 0x6B, 0x00, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x64, 0x00, 0x00, 0xEA +_020E3F70: + cmp r1, #0x0 + blt _020E3F80 + cmp r1, #0x80 + blt _020E3F88 +_020E3F80: + mov r0, r1 + b _020E3F90 +_020E3F88: + ldr r0, _020E42FC ; =0x0210428C + ldrb r0, [r0, r1] +_020E3F90: + cmp r0, #0x50 + movne r5, #0x800 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r10, #0x20 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3FBC: + cmp r1, #0x2d + moveq r0, #0x1 + streq r0, [sp, #0xc] + beq _020E3FE4 + cmp r1, #0x2b + beq _020E3FE4 + mov r0, r8 + mov r2, #0x1 + blx r9 + sub r4, r4, #0x1 +_020E3FE4: + mov r10, #0x40 + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E4004: + cmp r1, #0x0 + blt _020E4014 + cmp r1, #0x80 + blt _020E401C +_020E4014: + mov r0, #0x0 + b _020E402C +_020E401C: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E402C: + cmp r0, #0x0 + moveq r5, #0x1000 + beq _020E4104 + cmp r1, #0x30 + movne r10, #0x100 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r10, #0x80 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E4064: + cmp r1, #0x30 + movne r10, #0x100 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E408C: + cmp r1, #0x0 + blt _020E409C + cmp r1, #0x80 + blt _020E40A4 +_020E409C: + mov r0, #0x0 + b _020E40B4 +_020E40A4: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E40B4: + cmp r0, #0x0 + moveq r5, #0x800 + beq _020E4104 + ldr r0, [sp, #0x10] + sub r2, r1, #0x30 + mov r1, #0xa + mla r0, r1, r0, r2 + str r0, [sp, #0x10] + ldr r1, _020E4304 ; =0x00007FFF + ldr r0, [sp, #0x20] + add r4, r4, #0x1 + cmp r0, r1 + ldrgt r0, [sp, #0xd0] + movgt r1, #0x1 + strgt r1, [r0, #0x0] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r1, r0 +_020E4104: + ldr r0, [sp, #0x0] + cmp r4, r0 + bgt _020E4124 + mvn r0, #0x0 + cmp r1, r0 + beq _020E4124 + tst r5, #0x1800 + beq _020E3418 +_020E4124: + cmp r5, #0x8000 + beq _020E4140 + ldr r0, _020E4308 ; =0x00000E2C + tst r5, r0 + moveq r0, #0x1 + movne r0, #0x0 + b _020E4164 +_020E4140: + sub r0, r4, #0x1 + cmp r0, #0x2 + ble _020E4158 + ldr r0, _020E430C ; =0x0000018E + tst r10, r0 + bne _020E4160 +_020E4158: + mov r0, #0x1 + b _020E4164 +_020E4160: + mov r0, #0x0 +_020E4164: + cmp r0, #0x0 + movne r2, #0x0 + ldrne r0, [sp, #0x4] + bne _020E4184 + ldr r0, [sp, #0x2c] + sub r2, r4, #0x1 + add r2, r2, r0 + ldr r0, [sp, #0x4] +_020E4184: + str r2, [r0, #0x0] + mov r0, r8 + mov r2, #0x1 + blx r9 + cmp r10, #0x0 + bne _020E4388 + ldr r0, [sp, #0x24] + ldrb r2, [sp, #0x84] + cmp r0, #0x0 + ldrne r0, [sp, #0x20] + rsbne r0, r0, #0x0 + strne r0, [sp, #0x20] + add r0, sp, #0x85 + add r1, r0, r2 + b _020E41CC +_020E41C0: + ldr r0, [sp, #0x1c] + add r0, r0, #0x1 + str r0, [sp, #0x1c] +_020E41CC: + cmp r2, #0x0 + sub r2, r2, #0x1 + beq _020E41E4 + ldrb r0, [r1, #-0x1]! + cmp r0, #0x30 + beq _020E41C0 +_020E41E4: + add r0, r2, #0x1 + strb r0, [sp, #0x84] + ands r2, r0, #0xff + bne _020E4208 + add r1, r2, #0x1 + strb r1, [sp, #0x84] + add r0, sp, #0x85 + mov r1, #0x30 + strb r1, [r0, r2] +_020E4208: + ldr r1, [sp, #0x20] + ldr r0, [sp, #0x1c] + mov r2, #0x8000 + add r0, r1, r0 + rsb r2, r2, #0x0 + str r0, [sp, #0x20] + cmp r0, r2 + blt _020E4230 + cmp r0, r2, lsr #0x11 + ble _020E423C +_020E4230: + ldr r0, [sp, #0xd0] + mov r1, #0x1 + str r1, [r0, #0x0] +_020E423C: + ldr r0, [sp, #0xd0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020E4298 + ldr r0, [sp, #0x24] + cmp r0, #0x0 + movne r0, #0x0 + addne sp, sp, #0xa8 + movne r1, r0 + ldmneia sp!, {r3-r11,pc} +_020E4264: + .byte 0x28, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x9C, 0x10, 0x9F, 0x05 + .byte 0xA8, 0xD0, 0x8D, 0x02, 0x03, 0x00, 0x91, 0x08, 0xF8, 0x8F, 0xBD, 0x08, 0x8C, 0x10, 0x9F, 0xE5 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x0C, 0x00, 0x91, 0xE8, 0x00, 0x10, 0xA0, 0xE1, 0xCE, 0x18, 0x00, 0xEB + .byte 0xA8, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 +_020E4298: + ldr r1, [sp, #0x20] + add r0, sp, #0x80 + strh r1, [sp, #0x82] + bl __dec2num + mov r4, r0 + mov r6, r1 + mov r0, #0x0 + mov r1, r0 + mov r2, r4 + mov r3, r6 + bl _dneq + beq _020E4318 + mov r0, r4 + mov r1, r6 + mov r2, #0x0 + mov r3, #0x100000 + bl _dls + bhs _020E4318 + ldr r0, [sp, #0xd0] + mov r1, #0x1 + str r1, [r0, #0x0] + b _020E4344 + .balign 4 +_020E42F0: .word 0x02104439 +_020E42F4: .word 0x02104434 +_020E42F8: .word 0x0210430C +_020E42FC: .word 0x0210428C +_020E4300: .word 0x02106B74 +_020E4304: .word 0x00007FFF +_020E4308: .word 0x00000E2C +_020E430C: .word 0x0000018E +_020E4310: .word 0x02106B7C +_020E4314: .word 0x7FEFFFFF +_020E4318: + ldr r3, _020E4314 ; =0x7FEFFFFF + mov r0, r4 + mov r1, r6 + mvn r2, #0x0 + bl _dgr + bls _020E4344 + ldr r0, [sp, #0xd0] + mov r2, #0x1 + ldr r1, _020E4310 ; =0x02106B7C + str r2, [r0, #0x0] + ldmia r1, {r4,r6} +_020E4344: + ldr r0, [sp, #0x28] + cmp r0, #0x0 + beq _020E4378 + ldr r0, _020E4308 ; =0x00000E2C + tst r5, r0 + beq _020E4378 + mov r0, #0x0 + mov r1, r0 + mov r2, r4 + mov r3, r6 + bl _dsub + mov r4, r0 + mov r6, r1 +_020E4378: + add sp, sp, #0xa8 + mov r0, r4 + mov r1, r6 + ldmia sp!, {r3-r11,pc} +_020E4388: + ldr r0, [sp, #0xc] + add r4, sp, #0x38 + cmp r0, #0x0 + ldrne r0, [sp, #0x10] + ldrb r3, [sp, #0x45] + rsbne r0, r0, #0x0 + strne r0, [sp, #0x10] + ldr r1, [sp, #0x10] + ldr r0, [sp, #0x8] + mov r2, #0x0 + add r0, r1, r0, lsl #0x2 + str r0, [sp, #0x10] + mov r1, #0x80 + b _020E43D0 +_020E43C0: + ldr r0, [sp, #0x10] + add r2, r2, #0x1 + sub r0, r0, #0x1 + str r0, [sp, #0x10] +_020E43D0: + cmp r2, #0x4 + bhs _020E43E0 + tst r3, r1, asr r2 + beq _020E43C0 +_020E43E0: + adds r5, r2, #0x1 + beq _020E442C + add r0, sp, #0x4c + add r3, sp, #0x45 + str r0, [sp, #0x14] + mov r1, #0x0 + cmp r0, r3 + blo _020E442C + rsb r6, r5, #0x8 +_020E4404: + ldr r0, [sp, #0x14] + ldrb r0, [r0, #0x0] + orr r2, r1, r0, lsl r5 + mov r1, r0, asr r6 + ldr r0, [sp, #0x14] + and r1, r1, #0xff + strb r2, [r0], #-0x1 + str r0, [sp, #0x14] + cmp r0, r3 + bhs _020E4404 +_020E442C: + mov r2, #0x0 + mov r6, r2 + strb r2, [r4, #0x0] + strb r2, [r4, #0x1] + strb r2, [r4, #0x2] + strb r2, [r4, #0x3] + strb r2, [r4, #0x4] + strb r2, [r4, #0x5] + strb r2, [r4, #0x6] + strb r2, [r4, #0x7] + mov r3, #0xc + mov r7, #0x1 + mov r0, #0xff + add r1, sp, #0x45 +_020E4464: + add r5, r2, #0x8 + cmp r5, #0x34 + ldrb r5, [r1, r6] + rsbhi r8, r2, #0x34 + and r11, r3, #0x7 + andhi r5, r5, r0, lsl r8 + andhi r5, r5, #0xff + mov r8, r5, asr r11 + and r9, r8, #0xff + ldrb r10, [r4, r7] + rsb r8, r11, #0x8 + mov r5, r5, lsl r8 + orr r9, r10, r9 + strb r9, [r4, r7] + add r7, r7, #0x1 + add r2, r2, #0x8 + ldrb r8, [r4, r7] + and r5, r5, #0xff + cmp r2, #0x34 + orr r5, r8, r5 + strb r5, [r4, r7] + add r3, r3, #0x8 + add r6, r6, #0x1 + blo _020E4464 + ldr r0, [sp, #0x10] + mov r1, #0x800 + add r0, r0, #0xfe + add r2, r0, #0x300 + rsb r1, r1, #0x0 + tst r2, r1 + beq _020E44FC + ldr r2, [sp, #0xd0] + mov r3, #0x1 + mov r0, #0x0 + add sp, sp, #0xa8 + mov r1, r0 + str r3, [r2, #0x0] + ldmia sp!, {r3-r11,pc} +_020E44FC: + ldrb r0, [r4, #0x1] + mov r2, r2, lsl #0x15 + ldrb r1, [r4, #0x0] + orr r0, r0, r2, lsr #0x11 + strb r0, [r4, #0x1] + ldr r0, [sp, #0x28] + orr r1, r1, r2, lsr #0x19 + cmp r0, #0x0 + andne r0, r1, #0xff + strb r1, [r4, #0x0] + orrne r0, r0, #0x80 + strneb r0, [r4, #0x0] + mov r3, #0x0 +_020E4530: + rsb r1, r3, #0x7 + ldrb r2, [r4, r3] + ldrb r0, [r4, r1] + strb r0, [r4, r3] + add r3, r3, #0x1 + strb r2, [r4, r1] + cmp r3, #0x4 + blt _020E4530 + ldmia r4, {r0-r1} + add sp, sp, #0xa8 + ldmia sp!, {r3-r11,pc} + + arm_func_start strtold +strtold: ; 0x020E455C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x14 + mov r7, r0 + mov r0, #0x0 + mov r6, r1 + str r0, [sp, #0x8] + add r4, sp, #0xc + str r7, [sp, #0x4] + ldr r1, _020E4630 ; =__StringRead + add r2, sp, #0x4 + add r3, sp, #0x10 + sub r0, r0, #0x80000001 + str r4, [sp, #0x0] + bl __strtold + mov r5, r1 + mov r4, r0 + cmp r6, #0x0 + ldrne r0, [sp, #0x10] + mov r1, r5 + addne r0, r7, r0 + strne r0, [r6, #0x0] + mov r0, r4 + bl fabs + ldr r2, [sp, #0xc] + mov r6, r0 + mov r7, r1 + cmp r2, #0x0 + bne _020E4614 + mov r0, #0x0 + mov r1, r0 + mov r2, r4 + mov r3, r5 + bl _dneq + beq _020E4620 + mov r0, r6 + mov r1, r7 + mov r2, #0x0 + mov r3, #0x100000 + bl _dls + blo _020E4614 + ldr r3, _020E4634 ; =0x7FEFFFFF + mov r0, r6 + mov r1, r7 + mvn r2, #0x0 + bl _dgr + bls _020E4620 +_020E4614: + ldr r0, _020E4638 ; =0x021D74A8 + mov r1, #0x22 + str r1, [r0, #0x0] +_020E4620: + mov r0, r4 + mov r1, r5 + add sp, sp, #0x14 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020E4630: .word __StringRead +_020E4634: .word 0x7FEFFFFF +_020E4638: .word 0x021D74A8 + + arm_func_start atod +atod: ; 0x020E463C + ldr ip, _020E4648 ; =strtold + mov r1, #0x0 + bx r12 + .balign 4 +_020E4648: .word strtold + + arm_func_start __strtoul +__strtoul: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + ldr r4, [sp, #0x38] + movs r9, r0 + ldr r0, [sp, #0x34] + str r4, [sp, #0x38] + mov r4, #0x0 + str r0, [sp, #0x34] + ldr r0, [sp, #0x38] + str r1, [sp, #0x0] + str r4, [r0, #0x0] + mov r0, r4 + str r0, [sp, #0x4] + ldr r0, [sp, #0x34] + mov r1, r4 + str r1, [r0, #0x0] + ldr r0, [sp, #0x30] + str r4, [sp, #0x8] + mov r8, r2 + mov r7, r3 + mov r5, r4 + mov r10, r4 + str r0, [sp, #0x30] + mov r4, #0x1 + bmi _020E46CC + cmp r9, #0x1 + beq _020E46CC + cmp r9, #0x24 + bgt _020E46CC + ldr r0, [sp, #0x0] + cmp r0, #0x1 + bge _020E46D4 +_020E46CC: + mov r4, #0x40 + b _020E46F0 +_020E46D4: + ldr r1, [sp, #0x8] + mov r0, r7 + mov r3, r1 + mov r2, r1 + add r5, r3, #0x1 + blx r8 + mov r6, r0 +_020E46F0: + cmp r9, #0x0 + beq _020E4708 + mov r1, r9 + mvn r0, #0x0 + bl _u32_div_f + str r0, [sp, #0x4] +_020E4708: + mvn r11, #0x0 + b _020E49C8 +_020E4710: + cmp r4, #0x8 + bgt _020E4748 + cmp r4, #0x0 + addge pc, pc, r4, lsl #0x2 + b _020E49C8 +_020E4724: + .byte 0xA7, 0x00, 0x00, 0xEA, 0x09, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0xEA + .byte 0xA4, 0x00, 0x00, 0xEA, 0x40, 0x00, 0x00, 0xEA, 0xA2, 0x00, 0x00, 0xEA, 0xA1, 0x00, 0x00, 0xEA + .byte 0xA0, 0x00, 0x00, 0xEA, 0x4C, 0x00, 0x00, 0xEA +_020E4748: + cmp r4, #0x10 + beq _020E487C + b _020E49C8 +_020E4754: + .byte 0x00, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x56, 0xE3 + .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0xB8, 0x02, 0x9F, 0xE5 + .byte 0x86, 0x10, 0xA0, 0xE1, 0xB1, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 + .byte 0x08, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 + .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x08, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2 + .byte 0x08, 0x00, 0x8D, 0xE5, 0x87, 0x00, 0x00, 0xEA, 0x2B, 0x00, 0x56, 0xE3, 0x06, 0x00, 0x00, 0x1A + .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2 + .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x0A, 0x00, 0x00, 0xEA, 0x2D, 0x00, 0x56, 0xE3 + .byte 0x08, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 + .byte 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x34, 0x00, 0x9D, 0xE5 + .byte 0x01, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5, 0x02, 0x40, 0xA0, 0xE3, 0x71, 0x00, 0x00, 0xEA + .byte 0x00, 0x00, 0x59, 0xE3, 0x10, 0x00, 0x59, 0x13, 0x09, 0x00, 0x00, 0x1A, 0x30, 0x00, 0x56, 0xE3 + .byte 0x07, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 + .byte 0x04, 0x40, 0xA0, 0xE3, 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1 + .byte 0x64, 0x00, 0x00, 0xEA, 0x08, 0x40, 0xA0, 0xE3, 0x62, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x56, 0xE3 + .byte 0x78, 0x00, 0x56, 0x13, 0x08, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1 + .byte 0x01, 0x20, 0xA0, 0xE1, 0x10, 0x90, 0xA0, 0xE3, 0x08, 0x40, 0xA0, 0xE3, 0x01, 0x50, 0x85, 0xE2 + .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x56, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x59, 0xE3 + .byte 0x08, 0x90, 0xA0, 0x03, 0x10, 0x40, 0xA0, 0xE3, 0x52, 0x00, 0x00, 0xEA +_020E487C: + ldr r0, [sp, #0x4] + cmp r9, #0x0 + moveq r9, #0xa + cmp r0, #0x0 + bne _020E48A0 + mov r0, r11 + mov r1, r9 + bl _u32_div_f + str r0, [sp, #0x4] +_020E48A0: + cmp r6, #0x0 + blt _020E48B0 + cmp r6, #0x80 + blt _020E48B8 +_020E48B0: + mov r0, #0x0 + b _020E48C8 +_020E48B8: + ldr r0, _020E4A2C ; =0x0210430C + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x8 +_020E48C8: + cmp r0, #0x0 + beq _020E48F0 + sub r6, r6, #0x30 + cmp r6, r9 + blt _020E4978 + cmp r4, #0x10 + moveq r4, #0x20 + movne r4, #0x40 + add r6, r6, #0x30 + b _020E49C8 +_020E48F0: + cmp r6, #0x0 + blt _020E4900 + cmp r6, #0x80 + blt _020E4908 +_020E4900: + mov r0, #0x0 + b _020E4918 +_020E4908: + ldr r0, _020E4A2C ; =0x0210430C + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x1 +_020E4918: + cmp r0, #0x0 + beq _020E494C + cmp r6, #0x0 + blt _020E4930 + cmp r6, #0x80 + blt _020E4938 +_020E4930: + mov r0, r6 + b _020E4940 +_020E4938: + ldr r0, _020E4A30 ; =0x0210428C + ldrb r0, [r0, r6] +_020E4940: + sub r0, r0, #0x37 + cmp r0, r9 + blt _020E495C +_020E494C: + cmp r4, #0x10 + moveq r4, #0x20 + movne r4, #0x40 + b _020E49C8 +_020E495C: + cmp r6, #0x0 + blt _020E4974 + cmp r6, #0x80 + bge _020E4974 + ldr r0, _020E4A30 ; =0x0210428C + ldrb r6, [r0, r6] +_020E4974: + sub r6, r6, #0x37 +_020E4978: + ldr r0, [sp, #0x4] + mov r4, #0x10 + cmp r10, r0 + ldrhi r0, [sp, #0x38] + movhi r1, #0x1 + strhi r1, [r0, #0x0] + mul r0, r10, r9 + mov r10, r0 + sub r0, r11, r0 + cmp r6, r0 + ldrhi r0, [sp, #0x38] + movhi r1, #0x1 + strhi r1, [r0, #0x0] + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + add r10, r10, r6 + add r5, r5, #0x1 + blx r8 + mov r6, r0 +_020E49C8: + ldr r0, [sp, #0x0] + cmp r5, r0 + bgt _020E49E4 + cmp r6, r11 + beq _020E49E4 + tst r4, #0x60 + beq _020E4710 +_020E49E4: + tst r4, #0x34 + bne _020E49FC + ldr r0, [sp, #0x30] + mov r10, #0x0 + str r10, [r0, #0x0] + b _020E4A10 +_020E49FC: + ldr r0, [sp, #0x8] + sub r1, r5, #0x1 + add r1, r1, r0 + ldr r0, [sp, #0x30] + str r1, [r0, #0x0] +_020E4A10: + mov r0, r7 + mov r1, r6 + mov r2, #0x1 + blx r8 + mov r0, r10 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020E4A2C: .word 0x0210430C +_020E4A30: .word 0x0210428C + + arm_func_start __strtoull +__strtoull: ; 0x020E4A34 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x1c + ldr r4, [sp, #0x48] + movs r9, r0 + ldr r0, [sp, #0x44] + str r4, [sp, #0x48] + mov r4, #0x0 + str r0, [sp, #0x44] + ldr r0, [sp, #0x48] + str r1, [sp, #0x0] + str r4, [r0, #0x0] + mov r0, r4 + str r0, [sp, #0xc] + str r0, [sp, #0x8] + ldr r0, [sp, #0x44] + mov r1, r4 + str r1, [r0, #0x0] + ldr r0, [sp, #0x40] + str r4, [sp, #0x14] + mov r8, r2 + mov r7, r3 + mov r5, r4 + mov r10, r4 + mov r11, r4 + str r0, [sp, #0x40] + mov r4, #0x1 + bmi _020E4ABC + cmp r9, #0x1 + beq _020E4ABC + cmp r9, #0x24 + bgt _020E4ABC + ldr r0, [sp, #0x0] + cmp r0, #0x1 + bge _020E4AC4 +_020E4ABC: + mov r4, #0x40 + b _020E4ADC +_020E4AC4: + ldr r1, [sp, #0x14] + mov r0, r7 + mov r2, r1 + add r5, r1, #0x1 + blx r8 + mov r6, r0 +_020E4ADC: + cmp r9, #0x0 + beq _020E4B00 + mvn r0, #0x0 + mov r1, r0 + mov r3, r9, asr #0x1f + mov r2, r9 + bl _ll_udiv + str r0, [sp, #0xc] + str r1, [sp, #0x8] +_020E4B00: + mvn r0, #0x0 + str r0, [sp, #0x18] + b _020E4E08 +_020E4B0C: + cmp r4, #0x8 + bgt _020E4B44 + cmp r4, #0x0 + addge pc, pc, r4, lsl #0x2 + b _020E4E08 +_020E4B20: + .byte 0xB8, 0x00, 0x00, 0xEA, 0x09, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0xEA, 0xB5, 0x00, 0x00, 0xEA + .byte 0x40, 0x00, 0x00, 0xEA, 0xB3, 0x00, 0x00, 0xEA, 0xB2, 0x00, 0x00, 0xEA, 0xB1, 0x00, 0x00, 0xEA + .byte 0x4C, 0x00, 0x00, 0xEA +_020E4B44: + cmp r4, #0x10 + beq _020E4C78 + b _020E4E08 +_020E4B50: + .byte 0x00, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xBA + .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x08, 0x03, 0x9F, 0xE5, 0x86, 0x10, 0xA0, 0xE1 + .byte 0xB1, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A + .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x38, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x60, 0xA0, 0xE1, 0x14, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2, 0x14, 0x00, 0x8D, 0xE5 + .byte 0x98, 0x00, 0x00, 0xEA, 0x2B, 0x00, 0x56, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3 + .byte 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x60, 0xA0, 0xE1, 0x0A, 0x00, 0x00, 0xEA, 0x2D, 0x00, 0x56, 0xE3, 0x08, 0x00, 0x00, 0x1A + .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2 + .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x44, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0xA0, 0xE3 + .byte 0x00, 0x10, 0x80, 0xE5, 0x02, 0x40, 0xA0, 0xE3, 0x82, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x59, 0xE3 + .byte 0x10, 0x00, 0x59, 0x13, 0x09, 0x00, 0x00, 0x1A, 0x30, 0x00, 0x56, 0xE3, 0x07, 0x00, 0x00, 0x1A + .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x04, 0x40, 0xA0, 0xE3 + .byte 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x75, 0x00, 0x00, 0xEA + .byte 0x08, 0x40, 0xA0, 0xE3, 0x73, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x56, 0xE3, 0x78, 0x00, 0x56, 0x13 + .byte 0x08, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 + .byte 0x10, 0x90, 0xA0, 0xE3, 0x08, 0x40, 0xA0, 0xE3, 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x60, 0xA0, 0xE1, 0x67, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x59, 0xE3, 0x08, 0x90, 0xA0, 0x03 + .byte 0x10, 0x40, 0xA0, 0xE3, 0x63, 0x00, 0x00, 0xEA +_020E4C78: + ldr r1, [sp, #0x8] + mov r0, #0x0 + cmp r9, #0x0 + moveq r9, #0xa + cmp r1, r0 + ldr r1, [sp, #0xc] + cmpeq r1, r0 + bne _020E4CB4 + ldr r0, [sp, #0x18] + mov r3, r9, asr #0x1f + mov r1, r0 + mov r2, r9 + bl _ll_udiv + str r0, [sp, #0xc] + str r1, [sp, #0x8] +_020E4CB4: + cmp r6, #0x0 + blt _020E4CC4 + cmp r6, #0x80 + blt _020E4CCC +_020E4CC4: + mov r0, #0x0 + b _020E4CDC +_020E4CCC: + ldr r0, _020E4E78 ; =0x0210430C + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x8 +_020E4CDC: + cmp r0, #0x0 + beq _020E4D04 + sub r6, r6, #0x30 + cmp r6, r9 + blt _020E4D8C + cmp r4, #0x10 + moveq r4, #0x20 + movne r4, #0x40 + add r6, r6, #0x30 + b _020E4E08 +_020E4D04: + cmp r6, #0x0 + blt _020E4D14 + cmp r6, #0x80 + blt _020E4D1C +_020E4D14: + mov r0, #0x0 + b _020E4D2C +_020E4D1C: + ldr r0, _020E4E78 ; =0x0210430C + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x1 +_020E4D2C: + cmp r0, #0x0 + beq _020E4D60 + cmp r6, #0x0 + blt _020E4D44 + cmp r6, #0x80 + blt _020E4D4C +_020E4D44: + mov r0, r6 + b _020E4D54 +_020E4D4C: + ldr r0, _020E4E7C ; =0x0210428C + ldrb r0, [r0, r6] +_020E4D54: + sub r0, r0, #0x37 + cmp r0, r9 + blt _020E4D70 +_020E4D60: + cmp r4, #0x10 + moveq r4, #0x20 + movne r4, #0x40 + b _020E4E08 +_020E4D70: + cmp r6, #0x0 + blt _020E4D88 + cmp r6, #0x80 + bge _020E4D88 + ldr r0, _020E4E7C ; =0x0210428C + ldrb r6, [r0, r6] +_020E4D88: + sub r6, r6, #0x37 +_020E4D8C: + ldr r0, [sp, #0x8] + umull r2, r3, r10, r9 + cmp r11, r0 + ldr r0, [sp, #0xc] + mov r4, #0x10 + cmpeq r10, r0 + ldrhi r0, [sp, #0x48] + movhi r1, #0x1 + strhi r1, [r0, #0x0] + mov r1, r9, asr #0x1f + mla r3, r10, r1, r3 + mla r3, r11, r9, r3 + ldr r1, [sp, #0x18] + mov r10, r2 + subs r2, r1, r2 + mov r0, r6, asr #0x1f + sbc r1, r1, r3 + cmp r0, r1 + cmpeq r6, r2 + ldrhi r1, [sp, #0x48] + movhi r2, #0x1 + strhi r2, [r1, #0x0] + mov r1, #0x0 + mov r11, r3 + adds r10, r10, r6 + adc r11, r11, r0 + mov r0, r7 + mov r2, r1 + add r5, r5, #0x1 + blx r8 + mov r6, r0 +_020E4E08: + ldr r0, [sp, #0x0] + cmp r5, r0 + bgt _020E4E28 + ldr r0, [sp, #0x18] + cmp r6, r0 + beq _020E4E28 + tst r4, #0x60 + beq _020E4B0C +_020E4E28: + tst r4, #0x34 + bne _020E4E44 + ldr r0, [sp, #0x40] + mov r10, #0x0 + mov r11, r10 + str r10, [r0, #0x0] + b _020E4E58 +_020E4E44: + ldr r0, [sp, #0x14] + sub r1, r5, #0x1 + add r1, r1, r0 + ldr r0, [sp, #0x40] + str r1, [r0, #0x0] +_020E4E58: + mov r0, r7 + mov r1, r6 + mov r2, #0x1 + blx r8 + mov r0, r10 + mov r1, r11 + add sp, sp, #0x1c + ldmia sp!, {r4-r11,pc} + .balign 4 +_020E4E78: .word 0x0210430C +_020E4E7C: .word 0x0210428C + + arm_func_start strtoul +strtoul: ; 0x020E4E80 + stmdb sp!, {r3-r5,lr} + sub sp, sp, #0x20 + mov r5, r0 + mov lr, #0x0 + mov r0, r2 + mov r4, r1 + add r2, sp, #0x1c + str r5, [sp, #0xc] + str lr, [sp, #0x10] + str r2, [sp, #0x0] + add r1, sp, #0x18 + str r1, [sp, #0x4] + add r12, sp, #0x14 + ldr r2, _020E4F10 ; =__StringRead + add r3, sp, #0xc + sub r1, lr, #0x80000001 + str r12, [sp, #0x8] + bl __strtoul +_020E4EC8: + .byte 0x00, 0x00, 0x54, 0xE3, 0x1C, 0x10, 0x9D, 0x15 + .byte 0x01, 0x10, 0x85, 0x10, 0x00, 0x10, 0x84, 0x15, 0x14, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x51, 0xE3 + .byte 0x05, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x9F, 0xE5, 0x22, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5 + .byte 0x20, 0xD0, 0x8D, 0xE2, 0x00, 0x00, 0xE0, 0xE3, 0x38, 0x80, 0xBD, 0xE8, 0x18, 0x10, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x51, 0xE3, 0x00, 0x00, 0x60, 0x12, 0x20, 0xD0, 0x8D, 0xE2, 0x38, 0x80, 0xBD, 0xE8 +_020E4F10: .word __StringRead +_020E4F14: + .byte 0xA8, 0x74, 0x1D, 0x02 + + arm_func_start strtold2 +strtold2: ; 0x020E4F18 + stmdb sp!, {r3-r5,lr} + sub sp, sp, #0x20 + mov r5, r0 + mov lr, #0x0 + mov r0, r2 + mov r4, r1 + add r2, sp, #0x1c + str r5, [sp, #0xc] + str lr, [sp, #0x10] + str r2, [sp, #0x0] + add r1, sp, #0x18 + str r1, [sp, #0x4] + add r12, sp, #0x14 + ldr r2, _020E4FD8 ; =__StringRead + add r3, sp, #0xc + sub r1, lr, #0x80000001 + str r12, [sp, #0x8] + bl __strtoul +_020E4F60: + .byte 0x00, 0x00, 0x54, 0xE3, 0x1C, 0x10, 0x9D, 0x15, 0x01, 0x10, 0x85, 0x10, 0x00, 0x10, 0x84, 0x15 + .byte 0x14, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x09, 0x00, 0x00, 0x1A, 0x18, 0x20, 0x9D, 0xE5 + .byte 0x00, 0x00, 0x52, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x02, 0x11, 0xE0, 0xE3, 0x01, 0x00, 0x50, 0xE1 + .byte 0x03, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x52, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x02, 0x01, 0x50, 0xE3 + .byte 0x08, 0x00, 0x00, 0x9A, 0x18, 0x00, 0x9D, 0xE5, 0x2C, 0x10, 0x9F, 0xE5, 0x22, 0x20, 0xA0, 0xE3 + .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x01, 0xA0, 0x13, 0x00, 0x20, 0x81, 0xE5, 0x20, 0xD0, 0x8D, 0xE2 + .byte 0x02, 0x01, 0xE0, 0x03, 0x38, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x52, 0xE3, 0x00, 0x00, 0x60, 0x12 + .byte 0x20, 0xD0, 0x8D, 0xE2, 0x38, 0x80, 0xBD, 0xE8 +_020E4FD8: .word __StringRead +_020E4FDC: + .byte 0xA8, 0x74, 0x1D, 0x02 + + arm_func_start atol +atol: ; 0x020E4FE0 + ldr ip, _020E4FF0 ; =strtold + mov r1, #0x0 + mov r2, #0xa + bx r12 + .balign 4 +_020E4FF0: .word strtold2 + + arm_func_start fwide +fwide: + cmp r0, #0x0 + beq _020E500C + ldr r3, [r0, #0x4] + mov r2, r3, lsl #0x16 + movs r2, r2, lsr #0x1d + bne _020E5014 +_020E500C: + mov r0, #0x0 + bx lr +_020E5014: + mov r2, r3, lsl #0x14 + movs r2, r2, lsr #0x1e + beq _020E5034 + cmp r2, #0x1 + beq _020E505C + cmp r2, #0x2 + moveq r1, #0x1 + b _020E5060 +_020E5034: + cmp r1, #0x0 + ble _020E504C + bic r2, r3, #0xc00 + orr r2, r2, #0x800 + str r2, [r0, #0x4] + b _020E5060 +_020E504C: + biclt r2, r3, #0xc00 + orrlt r2, r2, #0x400 + strlt r2, [r0, #0x4] + b _020E5060 +_020E505C: + mvn r1, #0x0 +_020E5060: + mov r0, r1 + bx lr + + arm_func_start wmemcpy +wmemcpy: ; 0x020E5068 + ldr ip, _020E5074 ; =memcpy + mov r2, r2, lsl #0x1 + bx r12 + .balign 4 +_020E5074: .word memcpy + + arm_func_start wmemchr +wmemchr: ; 0x020E5078 + cmp r2, #0x0 + beq _020E5098 +_020E5080: + ldrh r3, [r0, #0x0] + cmp r3, r1 + bxeq lr + add r0, r0, #0x2 + subs r2, r2, #0x1 + bne _020E5080 +_020E5098: + mov r0, #0x0 + bx lr + + arm_func_start parse_format_wprintf +parse_format_wprintf: ; 0x020E50A0 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + ldrh r3, [r0, #0x2] + mov r4, #0x0 + mov r5, #0x1 + mov lr, r2 + strb r5, [sp, #0x0] + strb r4, [sp, #0x1] + strb r4, [sp, #0x2] + strb r4, [sp, #0x3] + strb r4, [sp, #0x4] + str r4, [sp, #0x8] + str r4, [sp, #0xc] + cmp r3, #0x25 + add r12, r0, #0x2 + bne _020E50FC + add r0, sp, #0x0 + strh r3, [sp, #0x6] + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add sp, sp, #0x10 + add r0, r12, #0x2 + ldmia sp!, {r4-r8,pc} +_020E50FC: + mov r2, #0x2 + mov r0, r4 + mov r5, r2 + mov r6, r4 + mov r7, #0x1 +_020E5110: + mov r8, r7 + cmp r3, #0x2b + bgt _020E5140 + bge _020E5168 + cmp r3, #0x23 + bgt _020E5198 + cmp r3, #0x20 + blt _020E5198 + beq _020E5170 + cmp r3, #0x23 + beq _020E5180 + b _020E5198 +_020E5140: + cmp r3, #0x30 + bgt _020E5198 + cmp r3, #0x2d + blt _020E5198 + beq _020E5160 + cmp r3, #0x30 + beq _020E5188 + b _020E5198 +_020E5160: + strb r6, [sp, #0x0] + b _020E519C +_020E5168: + strb r7, [sp, #0x1] + b _020E519C +_020E5170: + ldrb r4, [sp, #0x1] + cmp r4, #0x1 + strneb r5, [sp, #0x1] + b _020E519C +_020E5180: + strb r7, [sp, #0x3] + b _020E519C +_020E5188: + ldrb r4, [sp, #0x0] + cmp r4, #0x0 + strneb r2, [sp, #0x0] + b _020E519C +_020E5198: + mov r8, r0 +_020E519C: + cmp r8, #0x0 + ldrneh r3, [r12, #0x2]! + bne _020E5110 + cmp r3, #0x2a + bne _020E51E4 + ldr r0, [r1, #0x0] + add r0, r0, #0x4 + str r0, [r1, #0x0] + ldr r0, [r0, #-0x4] + str r0, [sp, #0x8] + cmp r0, #0x0 + bge _020E51DC + rsb r0, r0, #0x0 + mov r2, #0x0 + strb r2, [sp, #0x0] + str r0, [sp, #0x8] +_020E51DC: + ldrh r3, [r12, #0x2]! + b _020E5228 +_020E51E4: + mov r2, #0x0 + ldr r5, _020E560C ; =0x02104544 + mov r0, #0xa + b _020E5208 +_020E51F4: + ldr r4, [sp, #0x8] + sub r3, r3, #0x30 + mla r6, r4, r0, r3 + ldrh r3, [r12, #0x2]! + str r6, [sp, #0x8] +_020E5208: + cmp r3, #0x80 + movcs r4, r2 + bhs _020E5220 + mov r4, r3, lsl #0x1 + ldrh r4, [r5, r4] + and r4, r4, #0x8 +_020E5220: + cmp r4, #0x0 + bne _020E51F4 +_020E5228: + ldr r2, [sp, #0x8] + ldr r0, _020E5610 ; =0x000001FD + cmp r2, r0 + ble _020E5258 + ldr r1, _020E5614 ; =0x0000FFFF + add r0, sp, #0x0 + strh r1, [sp, #0x6] + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add sp, sp, #0x10 + add r0, r12, #0x2 + ldmia sp!, {r4-r8,pc} +_020E5258: + cmp r3, #0x2e + bne _020E52E0 + ldrh r3, [r12, #0x2]! + mov r0, #0x1 + strb r0, [sp, #0x2] + cmp r3, #0x2a + bne _020E529C + ldr r0, [r1, #0x0] + add r0, r0, #0x4 + str r0, [r1, #0x0] + ldr r0, [r0, #-0x4] + ldrh r3, [r12, #0x2]! + str r0, [sp, #0xc] + cmp r0, #0x0 + movlt r0, #0x0 + strltb r0, [sp, #0x2] + b _020E52E0 +_020E529C: + mov r1, #0x0 + ldr r4, _020E560C ; =0x02104544 + mov r0, #0xa + b _020E52C0 +_020E52AC: + ldr r2, [sp, #0xc] + sub r3, r3, #0x30 + mla r5, r2, r0, r3 + ldrh r3, [r12, #0x2]! + str r5, [sp, #0xc] +_020E52C0: + cmp r3, #0x80 + movcs r2, r1 + bhs _020E52D8 + mov r2, r3, lsl #0x1 + ldrh r2, [r4, r2] + and r2, r2, #0x8 +_020E52D8: + cmp r2, #0x0 + bne _020E52AC +_020E52E0: + cmp r3, #0x6c + mov r0, #0x1 + bgt _020E5318 + cmp r3, #0x68 + blt _020E530C + beq _020E5334 + cmp r3, #0x6a + beq _020E5380 + cmp r3, #0x6c + beq _020E5350 + b _020E53A4 +_020E530C: + cmp r3, #0x4c + beq _020E5374 + b _020E53A4 +_020E5318: + cmp r3, #0x74 + bgt _020E5328 + beq _020E538C + b _020E53A4 +_020E5328: + cmp r3, #0x7a + beq _020E5398 + b _020E53A4 +_020E5334: + ldrh r1, [r12, #0x2] + mov r2, #0x2 + strb r2, [sp, #0x4] + cmp r1, #0x68 + streqb r0, [sp, #0x4] + ldreqh r3, [r12, #0x2]! + b _020E53A8 +_020E5350: + ldrh r1, [r12, #0x2] + mov r2, #0x3 + strb r2, [sp, #0x4] + cmp r1, #0x6c + bne _020E53A8 + mov r1, #0x4 + strb r1, [sp, #0x4] + ldrh r3, [r12, #0x2]! + b _020E53A8 +_020E5374: + mov r1, #0x9 + strb r1, [sp, #0x4] + b _020E53A8 +_020E5380: + mov r1, #0x6 + strb r1, [sp, #0x4] + b _020E53A8 +_020E538C: + mov r1, #0x8 + strb r1, [sp, #0x4] + b _020E53A8 +_020E5398: + mov r1, #0x7 + strb r1, [sp, #0x4] + b _020E53A8 +_020E53A4: + mov r0, #0x0 +_020E53A8: + cmp r0, #0x0 + ldrneh r3, [r12, #0x2]! + strh r3, [sp, #0x6] + cmp r3, #0x61 + bgt _020E53FC + bge _020E54E0 + cmp r3, #0x47 + bgt _020E53F0 + subs r0, r3, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020E55EC +_020E53D4: + .byte 0x41, 0x00, 0x00, 0xEA, 0x83, 0x00, 0x00, 0xEA, 0x82, 0x00, 0x00, 0xEA + .byte 0x81, 0x00, 0x00, 0xEA, 0x4F, 0x00, 0x00, 0xEA, 0x2E, 0x00, 0x00, 0xEA, 0x49, 0x00, 0x00, 0xEA +_020E53F0: + cmp r3, #0x58 + beq _020E5470 + b _020E55EC +_020E53FC: + cmp r3, #0x63 + bgt _020E540C + beq _020E5588 + b _020E55EC +_020E540C: + sub r0, r3, #0x64 + cmp r0, #0x14 + addls pc, pc, r0, lsl #0x2 + b _020E55EC +_020E541C: + .byte 0x13, 0x00, 0x00, 0xEA + .byte 0x40, 0x00, 0x00, 0xEA, 0x1F, 0x00, 0x00, 0xEA, 0x3A, 0x00, 0x00, 0xEA, 0x6E, 0x00, 0x00, 0xEA + .byte 0x0E, 0x00, 0x00, 0xEA, 0x6C, 0x00, 0x00, 0xEA, 0x6B, 0x00, 0x00, 0xEA, 0x6A, 0x00, 0x00, 0xEA + .byte 0x69, 0x00, 0x00, 0xEA, 0x63, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x44, 0x00, 0x00, 0xEA + .byte 0x65, 0x00, 0x00, 0xEA, 0x64, 0x00, 0x00, 0xEA, 0x55, 0x00, 0x00, 0xEA, 0x62, 0x00, 0x00, 0xEA + .byte 0x02, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, 0xEA, 0x5F, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA +_020E5470: + ldrb r0, [sp, #0x4] + cmp r0, #0x9 + moveq r0, #0x4 + streqb r0, [sp, #0x4] + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0xc] + beq _020E55F4 + ldrb r0, [sp, #0x0] + cmp r0, #0x2 + moveq r0, #0x1 + streqb r0, [sp, #0x0] + b _020E55F4 +_020E54A8: + .byte 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3 + .byte 0x06, 0x00, 0x50, 0x13, 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13 + .byte 0x4C, 0x01, 0x9F, 0x05, 0xB6, 0x00, 0xCD, 0x01, 0x49, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xDD, 0xE5 + .byte 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x44, 0x00, 0x00, 0xEA +_020E54E0: + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0xd + streq r0, [sp, #0xc] + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + cmpne r0, #0x1 + ldreq r0, _020E5614 ; =0x0000FFFF + streqh r0, [sp, #0x6] + b _020E55F4 +_020E5518: + .byte 0x0C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 + .byte 0x01, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3 + .byte 0x06, 0x00, 0x50, 0x13, 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13 + .byte 0x01, 0x00, 0x50, 0x13, 0xC8, 0x00, 0x9F, 0x05, 0xB6, 0x00, 0xCD, 0x01, 0x28, 0x00, 0x00, 0x0A + .byte 0x02, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05 + .byte 0x23, 0x00, 0x00, 0xEA, 0x03, 0x30, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3, 0x78, 0x10, 0xA0, 0xE3 + .byte 0x08, 0x00, 0xA0, 0xE3, 0x04, 0x30, 0xCD, 0xE5, 0x03, 0x20, 0xCD, 0xE5, 0xB6, 0x10, 0xCD, 0xE1 + .byte 0x0C, 0x00, 0x8D, 0xE5, 0x1A, 0x00, 0x00, 0xEA +_020E5588: + ldrb r1, [sp, #0x4] + cmp r1, #0x3 + moveq r0, #0x5 + streqb r0, [sp, #0x4] + beq _020E55F4 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + cmpeq r1, #0x0 + ldrne r0, _020E5614 ; =0x0000FFFF + strneh r0, [sp, #0x6] + b _020E55F4 +_020E55B4: + .byte 0x04, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x03 + .byte 0x04, 0x00, 0xCD, 0x05, 0x0A, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0x40, 0x00, 0x9F, 0x15 + .byte 0xB6, 0x00, 0xCD, 0x11, 0x06, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xDD, 0xE5, 0x09, 0x00, 0x50, 0xE3 + .byte 0x04, 0x00, 0xA0, 0x03, 0x04, 0x00, 0xCD, 0x05, 0x01, 0x00, 0x00, 0xEA +_020E55EC: + ldr r0, _020E5614 ; =0x0000FFFF + strh r0, [sp, #0x6] +_020E55F4: + add r0, sp, #0x0 + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add r0, r12, #0x2 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020E560C: .word 0x02104544 +_020E5610: .word 0x000001FD +_020E5614: .word 0x0000FFFF + + arm_func_start long2str_wide +long2str_wide: ; 0x020E5618 + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x10 + movs r10, r0 + mov r0, #0x0 + mov r5, r1 + str r0, [sp, #0xc] + ldr r7, [sp, #0x4c] + mov r6, r0 + strh r0, [r5, #-0x2]! + ldrb r0, [sp, #0x43] + str r1, [sp, #0x0] + ldrh r8, [sp, #0x46] + str r0, [sp, #0x4] + ldr r0, [sp, #0x48] + ldrb r11, [sp, #0x41] + str r0, [sp, #0x8] + cmpeq r7, #0x0 + bne _020E568C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020E5678 + cmp r8, #0x6f + beq _020E568C +_020E5678: + add sp, sp, #0x10 + mov r0, r5 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E568C: + cmp r8, #0x69 + bgt _020E56B4 + bge _020E56E8 + cmp r8, #0x58 + bgt _020E56A8 + beq _020E5714 + b _020E571C +_020E56A8: + cmp r8, #0x64 + beq _020E56E8 + b _020E571C +_020E56B4: + cmp r8, #0x6f + bgt _020E56C8 + moveq r4, #0x8 + moveq r11, #0x0 + b _020E571C +_020E56C8: + cmp r8, #0x78 + bgt _020E571C + cmp r8, #0x75 + blt _020E571C + beq _020E5708 + cmp r8, #0x78 + beq _020E5714 + b _020E571C +_020E56E8: + cmp r10, #0x0 + mov r4, #0xa + bge _020E571C + mov r0, #0x1 + cmp r10, #0x80000000 + rsbne r10, r10, #0x0 + str r0, [sp, #0xc] + b _020E571C +_020E5708: + mov r4, #0xa + mov r11, #0x0 + b _020E571C +_020E5714: + mov r4, #0x10 + mov r11, #0x0 +_020E571C: + mov r0, r10 + mov r1, r4 + bl _u32_div_f + mov r9, r1 + mov r0, r10 + mov r1, r4 + bl _u32_div_f + cmp r9, #0xa + mov r10, r0 + addlt r9, r9, #0x30 + blt _020E5754 + cmp r8, #0x78 + addeq r9, r9, #0x57 + addne r9, r9, #0x37 +_020E5754: + cmp r10, #0x0 + strh r9, [r5, #-0x2]! + add r6, r6, #0x1 + bne _020E571C + cmp r4, #0x8 + bne _020E5788 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrneh r0, [r5, #0x0] + cmpne r0, #0x30 + movne r0, #0x30 + strneh r0, [r5, #-0x2]! + addne r6, r6, #0x1 +_020E5788: + ldrb r0, [sp, #0x40] + cmp r0, #0x2 + bne _020E57BC + ldr r0, [sp, #0xc] + ldr r7, [sp, #0x8] + cmp r0, #0x0 + cmpeq r11, #0x0 + subne r7, r7, #0x1 + cmp r4, #0x10 + bne _020E57BC + ldr r0, [sp, #0x4] + cmp r0, #0x0 + subne r7, r7, #0x2 +_020E57BC: + ldr r0, [sp, #0x0] + ldr r1, _020E5864 ; =0x000001FD + sub r0, r0, r5 + add r0, r0, r0, lsr #0x1f + add r0, r7, r0, asr #0x1 + cmp r0, r1 + addgt sp, sp, #0x10 + movgt r0, #0x0 + ldmgtia sp!, {r3-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + cmp r6, r7 + bge _020E5804 + mov r0, #0x30 +_020E57F4: + add r6, r6, #0x1 + cmp r6, r7 + strh r0, [r5, #-0x2]! + blt _020E57F4 +_020E5804: + cmp r4, #0x10 + bne _020E5820 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x30 + strneh r8, [r5, #-0x2] + strneh r0, [r5, #-0x4]! +_020E5820: + ldr r0, [sp, #0xc] + cmp r0, #0x0 + movne r0, #0x2d + strneh r0, [r5, #-0x2]! + bne _020E5850 + cmp r11, #0x1 + moveq r0, #0x2b + streqh r0, [r5, #-0x2]! + beq _020E5850 + cmp r11, #0x2 + moveq r0, #0x20 + streqh r0, [r5, #-0x2]! +_020E5850: + mov r0, r5 + add sp, sp, #0x10 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E5864: .word 0x000001FD + + arm_func_start longlong2str_wide +longlong2str_wide: ; 0x020E5868 + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x18 + mov r9, r1 + mov r1, #0x0 + mov r10, r0 + mov r6, r2 + mov r0, r1 + strh r0, [r6, #-0x2]! + ldr r0, [sp, #0x58] + cmp r9, #0x0 + str r0, [sp, #0x10] + ldrb r0, [sp, #0x4f] + cmpeq r10, #0x0 + str r2, [sp, #0x0] + str r0, [sp, #0x4] + ldr r0, [sp, #0x54] + str r1, [sp, #0x14] + str r0, [sp, #0x8] + ldrb r0, [sp, #0x4d] + mov r7, r1 + ldrh r8, [sp, #0x52] + str r0, [sp, #0xc] + ldreq r0, [sp, #0x10] + cmpeq r0, #0x0 + bne _020E58F8 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020E58E4 + cmp r8, #0x6f + beq _020E58F8 +_020E58E4: + add sp, sp, #0x18 + mov r0, r6 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E58F8: + cmp r8, #0x69 + bgt _020E5920 + bge _020E5950 + cmp r8, #0x58 + bgt _020E5914 + beq _020E59A4 + b _020E59B0 +_020E5914: + cmp r8, #0x64 + beq _020E5950 + b _020E59B0 +_020E5920: + cmp r8, #0x6f + bgt _020E5930 + beq _020E5984 + b _020E59B0 +_020E5930: + cmp r8, #0x78 + bgt _020E59B0 + cmp r8, #0x75 + blt _020E59B0 + beq _020E5994 + cmp r8, #0x78 + beq _020E59A4 + b _020E59B0 +_020E5950: + subs r0, r10, #0x0 + sbcs r0, r9, #0x0 + mov r11, #0xa + mov r5, #0x0 + bge _020E59B0 + cmp r9, #0x80000000 + cmpeq r10, r5 + beq _020E5978 + rsbs r10, r10, #0x0 + rsc r9, r9, #0x0 +_020E5978: + mov r0, #0x1 + str r0, [sp, #0x14] + b _020E59B0 +_020E5984: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0x8 + b _020E59B0 +_020E5994: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0xa + b _020E59B0 +_020E59A4: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0x10 +_020E59B0: + mov r0, r10 + mov r1, r9 + mov r2, r11 + mov r3, r5 + bl _ull_mod + mov r4, r0 + mov r0, r10 + mov r1, r9 + mov r2, r11 + mov r3, r5 + bl _ll_udiv + mov r10, r0 + cmp r4, #0xa + mov r9, r1 + addlt r0, r4, #0x30 + blt _020E59FC + cmp r8, #0x78 + addeq r0, r4, #0x57 + addne r0, r4, #0x37 +_020E59FC: + strh r0, [r6, #-0x2]! + mov r0, #0x0 + cmp r9, r0 + cmpeq r10, r0 + add r7, r7, #0x1 + bne _020E59B0 + cmp r5, #0x0 + cmpeq r11, #0x8 + bne _020E5A3C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrneh r0, [r6, #0x0] + cmpne r0, #0x30 + movne r0, #0x30 + strneh r0, [r6, #-0x2]! + addne r7, r7, #0x1 +_020E5A3C: + ldrb r0, [sp, #0x4c] + cmp r0, #0x2 + bne _020E5A8C + ldr r0, [sp, #0x8] + str r0, [sp, #0x10] + ldr r0, [sp, #0x14] + cmp r0, #0x0 + ldreq r0, [sp, #0xc] + cmpeq r0, #0x0 + ldrne r0, [sp, #0x10] + subne r0, r0, #0x1 + strne r0, [sp, #0x10] + cmp r5, #0x0 + cmpeq r11, #0x10 + bne _020E5A8C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrne r0, [sp, #0x10] + subne r0, r0, #0x2 + strne r0, [sp, #0x10] +_020E5A8C: + ldr r0, [sp, #0x0] + ldr r2, _020E5B48 ; =0x000001FD + sub r0, r0, r6 + add r1, r0, r0, lsr #0x1f + ldr r0, [sp, #0x10] + add r0, r0, r1, asr #0x1 + cmp r0, r2 + addgt sp, sp, #0x18 + movgt r0, #0x0 + ldmgtia sp!, {r3-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + ldr r0, [sp, #0x10] + cmp r7, r0 + bge _020E5AE0 + mov r1, #0x30 +_020E5ACC: + ldr r0, [sp, #0x10] + add r7, r7, #0x1 + cmp r7, r0 + strh r1, [r6, #-0x2]! + blt _020E5ACC +_020E5AE0: + cmp r5, #0x0 + cmpeq r11, #0x10 + bne _020E5B00 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x30 + strneh r8, [r6, #-0x2] + strneh r0, [r6, #-0x4]! +_020E5B00: + ldr r0, [sp, #0x14] + cmp r0, #0x0 + movne r0, #0x2d + strneh r0, [r6, #-0x2]! + bne _020E5B34 + ldr r0, [sp, #0xc] + cmp r0, #0x1 + moveq r0, #0x2b + streqh r0, [r6, #-0x2]! + beq _020E5B34 + cmp r0, #0x2 + moveq r0, #0x20 + streqh r0, [r6, #-0x2]! +_020E5B34: + mov r0, r6 + add sp, sp, #0x18 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E5B48: .word 0x000001FD + + arm_func_start double2hex_wide +double2hex_wide: ; 0x020E5B4C + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r10,lr} + sub sp, sp, #0x44 + ldr r7, [sp, #0x80] + ldr r0, _020E5EB8 ; =0x000001FD + mov r8, r2 + cmp r7, r0 + ldrh r6, [sp, #0x7a] + ldrb r5, [sp, #0x77] + ldrb r4, [sp, #0x75] + ldr r1, [sp, #0x68] + ldr r2, [sp, #0x6c] + addgt sp, sp, #0x44 + movgt r0, #0x0 + ldmgtia sp!, {r3-r10,lr} + addgt sp, sp, #0x10 + bxgt lr + mov r10, #0x0 + mov r9, #0x20 + add r0, sp, #0x8 + add r3, sp, #0xc + strb r10, [sp, #0x8] + strh r9, [sp, #0xa] + bl __num2dec_internal2 + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x6c] + bl fabs + mov r2, r0 + mov r0, r10 + mov r3, r1 + mov r1, r0 + bl _deq + bne _020E5BF4 + sub r4, r8, #0xc + ldr r1, _020E5EBC ; =0x02106DE4 + mov r0, r4 + bl wcscpy + add sp, sp, #0x44 + mov r0, r4 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E5BF4: + ldrb r0, [sp, #0x11] + cmp r0, #0x49 + bne _020E5C74 + ldrsb r0, [sp, #0xc] + cmp r0, #0x0 + beq _020E5C38 + cmp r6, #0x41 + sub r4, r8, #0xa + bne _020E5C28 + ldr r1, _020E5EC0 ; =0x02106DF0 + mov r0, r4 + bl wcscpy + b _020E5C60 +_020E5C28: + ldr r1, _020E5EC4 ; =0x02106DFC + mov r0, r4 + bl wcscpy + b _020E5C60 +_020E5C38: + cmp r6, #0x41 + sub r4, r8, #0x8 + bne _020E5C54 + ldr r1, _020E5EC8 ; =0x02106E08 + mov r0, r4 + bl wcscpy + b _020E5C60 +_020E5C54: + ldr r1, _020E5ECC ; =0x02106E10 + mov r0, r4 + bl wcscpy +_020E5C60: + add sp, sp, #0x44 + mov r0, r4 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E5C74: + cmp r0, #0x4e + bne _020E5CF0 + ldrsb r0, [sp, #0xc] + cmp r0, #0x0 + beq _020E5CB4 + cmp r6, #0x41 + sub r4, r8, #0xa + bne _020E5CA4 + ldr r1, _020E5ED0 ; =0x02106E18 + mov r0, r4 + bl wcscpy + b _020E5CDC +_020E5CA4: + ldr r1, _020E5ED4 ; =0x02106E24 + mov r0, r4 + bl wcscpy + b _020E5CDC +_020E5CB4: + cmp r6, #0x41 + sub r4, r8, #0x8 + bne _020E5CD0 + ldr r1, _020E5ED8 ; =0x02106E30 + mov r0, r4 + bl wcscpy + b _020E5CDC +_020E5CD0: + ldr r1, _020E5EDC ; =0x02106E38 + mov r0, r4 + bl wcscpy +_020E5CDC: + add sp, sp, #0x44 + mov r0, r4 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E5CF0: + mov r3, r10 + mov r1, #0x1 + mov r0, #0x64 + add r9, sp, #0x68 + strb r1, [sp, #0x34] + strb r1, [sp, #0x35] + strb r3, [sp, #0x36] + strb r3, [sp, #0x37] + strb r3, [sp, #0x38] + str r3, [sp, #0x3c] + str r1, [sp, #0x40] + strh r0, [sp, #0x3a] +_020E5D20: + rsb r1, r3, #0x7 + ldrsb r2, [r9, r3] + ldrsb r0, [r9, r1] + strb r0, [r9, r3] + add r3, r3, #0x1 + strb r2, [r9, r1] + cmp r3, #0x4 + blt _020E5D20 + ldrb r0, [sp, #0x69] + ldrb r1, [sp, #0x68] + ldr sb, _020E5EE0 ; =0x000007FF + mov r0, r0, lsl #0x11 + orr r1, r0, r1, lsl #0x19 + add r0, sp, #0x34 + and lr, r9, r1, lsr #0x15 + sub r12, sp, #0x8 + ldmia r0, {r0-r3} + stmia r12, {r0-r3} + rsb r0, r9, #0x400 + mov r1, r8 + add r0, lr, r0 + ldmia r12, {r2-r3} + bl long2str_wide + cmp r6, #0x61 + moveq r1, #0x70 + movne r1, #0x50 + strh r1, [r0, #-0x2]! + mov r1, r7, lsl #0x2 + mov lr, r7 + cmp r7, #0x1 + add r8, r1, #0xb + add r12, sp, #0x68 + blt _020E5E30 + mov r9, #0x30 +_020E5DA8: + cmp r8, #0x40 + bge _020E5E18 + ldrb r1, [r12, r8, asr #0x3] + and r2, r8, #0x7 + rsb r3, r2, #0x7 + mov r2, r1, asr r3 + sub r10, r8, #0x4 + bic r1, r8, #0x7 + bic r10, r10, #0x7 + cmp r1, r10 + add r10, r12, r8, asr #0x3 + and r1, r2, #0xff + beq _020E5DEC + ldrb r2, [r10, #-0x1] + mov r2, r2, lsl #0x8 + orr r1, r1, r2, asr r3 + and r1, r1, #0xff +_020E5DEC: + and r1, r1, #0xf + cmp r1, #0xa + addcc r1, r1, #0x30 + andcc r1, r1, #0xff + blo _020E5E1C + cmp r6, #0x61 + addeq r1, r1, #0x57 + andeq r1, r1, #0xff + addne r1, r1, #0x37 + andne r1, r1, #0xff + b _020E5E1C +_020E5E18: + mov r1, r9 +_020E5E1C: + sub lr, lr, #0x1 + cmp lr, #0x1 + strh r1, [r0, #-0x2]! + sub r8, r8, #0x4 + bge _020E5DA8 +_020E5E30: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r1, #0x2e + strneh r1, [r0, #-0x2]! + mov r1, #0x31 + strh r1, [r0, #-0x2] + cmp r6, #0x61 + moveq r1, #0x78 + movne r1, #0x58 + strh r1, [r0, #-0x4]! + mov r1, #0x30 + strh r1, [r0, #-0x2]! + ldrsb r1, [sp, #0xc] + cmp r1, #0x0 + movne r1, #0x2d + strneh r1, [r0, #-0x2]! + addne sp, sp, #0x44 + ldmneia sp!, {r3-r10,lr} + addne sp, sp, #0x10 + bxne lr + cmp r4, #0x1 + moveq r1, #0x2b + streqh r1, [r0, #-0x2]! + addeq sp, sp, #0x44 + ldmeqia sp!, {r3-r10,lr} + addeq sp, sp, #0x10 + bxeq lr + cmp r4, #0x2 + moveq r1, #0x20 + streqh r1, [r0, #-0x2]! + add sp, sp, #0x44 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E5EB8: .word 0x000001FD +_020E5EBC: .word 0x02106DE4 +_020E5EC0: .word 0x02106DF0 +_020E5EC4: .word 0x02106DFC +_020E5EC8: .word 0x02106E08 +_020E5ECC: .word 0x02106E10 +_020E5ED0: .word 0x02106E18 +_020E5ED4: .word 0x02106E24 +_020E5ED8: .word 0x02106E30 +_020E5EDC: .word 0x02106E38 +_020E5EE0: .word 0x000007FF + + arm_func_start round_decimal_wide +round_decimal_wide: ; 0x020E5EE4 + stmdb sp!, {r4,lr} + cmp r1, #0x0 + bge _020E5F0C + mov r1, #0x0 + strh r1, [r0, #0x2] + mov r1, #0x1 + strb r1, [r0, #0x4] + mov r1, #0x30 + strb r1, [r0, #0x5] + ldmia sp!, {r4,pc} +_020E5F0C: + ldrb lr, [r0, #0x4] + cmp r1, lr + ldmgeia sp!, {r4,pc} +_020E5F18: + .byte 0x05, 0xC0, 0x80, 0xE2, 0x01, 0x20, 0x8C, 0xE0 + .byte 0x01, 0x20, 0x82, 0xE2, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2, 0x03, 0x3C, 0xA0, 0xE1 + .byte 0x43, 0x3C, 0xA0, 0xE1, 0x05, 0x00, 0x53, 0xE3, 0x0B, 0x00, 0x00, 0x1A, 0x0E, 0xC0, 0x8C, 0xE0 + .byte 0x01, 0xC0, 0x4C, 0xE2, 0x02, 0x00, 0x5C, 0xE1, 0x02, 0x00, 0x00, 0x9A, 0xD0, 0x30, 0xDC, 0xE1 + .byte 0x30, 0x00, 0x53, 0xE3, 0xF9, 0xFF, 0xFF, 0x0A, 0x02, 0x00, 0x5C, 0xE1, 0xD1, 0x30, 0x52, 0x01 + .byte 0x01, 0x40, 0x03, 0x02, 0x01, 0x40, 0xA0, 0x13, 0x01, 0x00, 0x00, 0xEA, 0x01, 0x40, 0xA0, 0xC3 + .byte 0x00, 0x40, 0xA0, 0xD3, 0x00, 0x00, 0x51, 0xE3, 0x14, 0x00, 0x00, 0x0A, 0x00, 0xC0, 0xA0, 0xE3 + .byte 0x01, 0xE0, 0xA0, 0xE3, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2, 0x04, 0x30, 0x83, 0xE0 + .byte 0x03, 0x3C, 0xA0, 0xE1, 0x43, 0x3C, 0xA0, 0xE1, 0x09, 0x00, 0x53, 0xE3, 0x0E, 0x40, 0xA0, 0xC1 + .byte 0x0C, 0x40, 0xA0, 0xD1, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x53, 0xE3 + .byte 0x01, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x41, 0xE2, 0x02, 0x00, 0x00, 0xEA, 0x30, 0x30, 0x83, 0xE2 + .byte 0x00, 0x30, 0xC2, 0xE5, 0x01, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0xEC, 0xFF, 0xFF, 0x1A + .byte 0x00, 0x00, 0x54, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0xF2, 0x30, 0xD0, 0xE1, 0x01, 0x20, 0xA0, 0xE3 + .byte 0x31, 0x10, 0xA0, 0xE3, 0x01, 0x30, 0x83, 0xE2, 0xB2, 0x30, 0xC0, 0xE1, 0x04, 0x20, 0xC0, 0xE5 + .byte 0x05, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x51, 0xE3, 0xBB, 0xFF, 0xFF, 0x0A + .byte 0x04, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8 + + arm_func_start float2str_wide +float2str_wide: ; 0x020E6008 + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x22c + mov r10, r0 + add r0, sp, #0x250 + ldr r7, [sp, #0x268] + ldr r3, _020E6628 ; =0x000001FD + ldrh r6, [r0, #0x12] + cmp r7, r3 + ldrb r5, [sp, #0x25f] + ldrb r4, [sp, #0x25d] + mov r8, r1 + mov r9, r2 + addgt sp, sp, #0x22c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + mov r12, #0x0 + mov r11, #0x20 + add r0, sp, #0x0 + add r3, sp, #0x4 + mov r1, r10 + mov r2, r8 + strb r12, [sp, #0x0] + strh r11, [sp, #0x2] + bl __num2dec_internal2 + ldrb r0, [sp, #0x8] + add r1, sp, #0x9 + add r0, r1, r0 + b _020E609C +_020E6084: + ldrb r2, [sp, #0x8] + ldrsh r1, [sp, #0x6] + sub r2, r2, #0x1 + add r1, r1, #0x1 + strb r2, [sp, #0x8] + strh r1, [sp, #0x6] +_020E609C: + ldrb r1, [sp, #0x8] + cmp r1, #0x1 + bls _020E60B4 + ldrsb r1, [r0, #-0x1]! + cmp r1, #0x30 + beq _020E6084 +_020E60B4: + ldrb r0, [sp, #0x9] + cmp r0, #0x30 + beq _020E60D4 + cmp r0, #0x49 + beq _020E60E0 + cmp r0, #0x4e + beq _020E6198 + b _020E6244 +_020E60D4: + mov r0, #0x0 + strh r0, [sp, #0x6] + b _020E6244 +_020E60E0: + mov r2, #0x0 + mov r0, r10 + mov r1, r8 + mov r3, r2 + bl _dls + bhs _020E6140 + cmp r6, #0x80 + sub r4, r9, #0xa + movcs r0, #0x0 + bhs _020E6118 + ldr r0, _020E662C ; =0x02104544 + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x200 +_020E6118: + cmp r0, #0x0 + beq _020E6130 + ldr r1, _020E6630 ; =0x02106DF0 + mov r0, r4 + bl wcscpy + b _020E6184 +_020E6130: + ldr r1, _020E6634 ; =0x02106DFC + mov r0, r4 + bl wcscpy + b _020E6184 +_020E6140: + cmp r6, #0x80 + sub r4, r9, #0x8 + movcs r0, #0x0 + bhs _020E6160 + ldr r0, _020E662C ; =0x02104544 + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x200 +_020E6160: + cmp r0, #0x0 + beq _020E6178 + ldr r1, _020E6638 ; =0x02106E08 + mov r0, r4 + bl wcscpy + b _020E6184 +_020E6178: + ldr r1, _020E663C ; =0x02106E10 + mov r0, r4 + bl wcscpy +_020E6184: + add sp, sp, #0x22c + mov r0, r4 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E6198: + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + beq _020E61EC + cmp r6, #0x80 + sub r4, r9, #0xa + movcs r0, #0x0 + bhs _020E61C4 + ldr r0, _020E662C ; =0x02104544 + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x200 +_020E61C4: + cmp r0, #0x0 + beq _020E61DC + ldr r1, _020E6640 ; =0x02106E18 + mov r0, r4 + bl wcscpy + b _020E6230 +_020E61DC: + ldr r1, _020E6644 ; =0x02106E24 + mov r0, r4 + bl wcscpy + b _020E6230 +_020E61EC: + cmp r6, #0x80 + sub r4, r9, #0x8 + movcs r0, #0x0 + bhs _020E620C + ldr r0, _020E662C ; =0x02104544 + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x200 +_020E620C: + cmp r0, #0x0 + beq _020E6224 + ldr r1, _020E6648 ; =0x02106E30 + mov r0, r4 + bl wcscpy + b _020E6230 +_020E6224: + ldr r1, _020E664C ; =0x02106E38 + mov r0, r4 + bl wcscpy +_020E6230: + add sp, sp, #0x22c + mov r0, r4 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E6244: + ldrb r1, [sp, #0x8] + ldrsh r2, [sp, #0x6] + add r0, sp, #0x200 + sub r1, r1, #0x1 + add r0, r0, #0x2a + add r1, r2, r1 + sub r8, r0, #0x1 + strh r1, [sp, #0x6] + mov r0, #0x0 + strb r0, [r8, #0x0] + cmp r6, #0x65 + bgt _020E62A0 + bge _020E632C + cmp r6, #0x47 + bgt _020E65EC + cmp r6, #0x45 + blt _020E65EC + beq _020E632C + cmp r6, #0x46 + beq _020E6478 + cmp r6, #0x47 + beq _020E62B8 + b _020E65EC +_020E62A0: + cmp r6, #0x66 + bgt _020E62B0 + beq _020E6478 + b _020E65EC +_020E62B0: + cmp r6, #0x67 + bne _020E65EC +_020E62B8: + ldrb r0, [sp, #0x8] + cmp r0, r7 + ble _020E62D0 + add r0, sp, #0x4 + mov r1, r7 + bl round_decimal_wide +_020E62D0: + ldrsh r2, [sp, #0x6] + mvn r0, #0x3 + cmp r2, r0 + blt _020E62E8 + cmp r2, r7 + blt _020E6308 +_020E62E8: + cmp r5, #0x0 + ldreqb r0, [sp, #0x8] + subne r7, r7, #0x1 + subeq r7, r0, #0x1 + cmp r6, #0x67 + moveq r6, #0x65 + movne r6, #0x45 + b _020E632C +_020E6308: + cmp r5, #0x0 + addne r0, r2, #0x1 + subne r7, r7, r0 + bne _020E6478 + ldrb r1, [sp, #0x8] + add r0, r2, #0x1 + subs r7, r1, r0 + movmi r7, #0x0 + b _020E6478 +_020E632C: + ldrb r0, [sp, #0x8] + add r1, r7, #0x1 + cmp r0, r1 + ble _020E6344 + add r0, sp, #0x4 + bl round_decimal_wide +_020E6344: + ldrsh lr, [sp, #0x6] + mov r11, #0x2b + mov r10, #0x0 + cmp lr, #0x0 + rsblt lr, lr, #0x0 + movlt r11, #0x2d + ldr r3, _020E6650 ; =0x66666667 + mov r0, #0xa + b _020E6398 +_020E6368: + mov r1, lr, lsr #0x1f + smull r2, r12, r3, lr + add r12, r1, r12, asr #0x2 + smull r1, r2, r0, r12 + sub r12, lr, r1 + add r1, r12, #0x30 + strb r1, [r8, #-0x1]! + mov r2, lr + smull r1, lr, r3, r2 + mov r1, r2, lsr #0x1f + add lr, r1, lr, asr #0x2 + add r10, r10, #0x1 +_020E6398: + cmp lr, #0x0 + bne _020E6368 + cmp r10, #0x2 + blt _020E6368 + add r0, sp, #0x2a + strb r11, [r8, #-0x1] + strb r6, [r8, #-0x2]! + sub r1, r0, r8 + ldr r0, _020E6628 ; =0x000001FD + add r1, r1, r7 + cmp r1, r0 + addgt sp, sp, #0x22c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + ldrb r1, [sp, #0x8] + add r0, r7, #0x1 + cmp r1, r0 + bge _020E6408 + add r0, r7, #0x2 + sub r0, r0, r1 + subs r1, r0, #0x1 + beq _020E6408 + mov r0, #0x30 +_020E63FC: + strb r0, [r8, #-0x1]! + subs r1, r1, #0x1 + bne _020E63FC +_020E6408: + ldrb r1, [sp, #0x8] + add r0, sp, #0x9 + add r2, r0, r1 + subs r1, r1, #0x1 + beq _020E642C +_020E641C: + ldrsb r0, [r2, #-0x1]! + subs r1, r1, #0x1 + strb r0, [r8, #-0x1]! + bne _020E641C +_020E642C: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r0, #0x2e + strneb r0, [r8, #-0x1]! + ldrb r0, [sp, #0x9] + strb r0, [r8, #-0x1]! + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r8, #-0x1]! + bne _020E65EC + cmp r4, #0x1 + moveq r0, #0x2b + streqb r0, [r8, #-0x1]! + beq _020E65EC + cmp r4, #0x2 + moveq r0, #0x20 + streqb r0, [r8, #-0x1]! + b _020E65EC +_020E6478: + ldrsh r3, [sp, #0x6] + ldrb r2, [sp, #0x8] + sub r0, r2, r3 + subs r1, r0, #0x1 + movmi r1, #0x0 + cmp r1, r7 + ble _020E64B8 + sub r1, r1, r7 + add r0, sp, #0x4 + sub r1, r2, r1 + bl round_decimal_wide + ldrsh r3, [sp, #0x6] + ldrb r2, [sp, #0x8] + sub r0, r2, r3 + subs r1, r0, #0x1 + movmi r1, #0x0 +_020E64B8: + adds r0, r3, #0x1 + movmi r0, #0x0 + ldr r3, _020E6628 ; =0x000001FD + add r6, r0, r1 + cmp r6, r3 + addgt sp, sp, #0x22c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + add r3, sp, #0x9 + sub r6, r7, r1 + cmp r6, #0x0 + add r2, r3, r2 + mov r10, #0x0 + ble _020E650C + mov r3, #0x30 +_020E64FC: + add r10, r10, #0x1 + cmp r10, r6 + strb r3, [r8, #-0x1]! + blt _020E64FC +_020E650C: + mov r6, #0x0 + b _020E6520 +_020E6514: + ldrsb r3, [r2, #-0x1]! + add r6, r6, #0x1 + strb r3, [r8, #-0x1]! +_020E6520: + cmp r6, r1 + ldrltb r3, [sp, #0x8] + cmplt r6, r3 + blt _020E6514 + cmp r6, r1 + bge _020E654C + mov r3, #0x30 +_020E653C: + add r6, r6, #0x1 + cmp r6, r1 + strb r3, [r8, #-0x1]! + blt _020E653C +_020E654C: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r1, #0x2e + strneb r1, [r8, #-0x1]! + cmp r0, #0x0 + beq _020E65B4 + ldrb r1, [sp, #0x8] + mov r5, #0x0 + sub r1, r0, r1 + cmp r1, #0x0 + ble _020E6594 + mov r3, #0x30 +_020E657C: + strb r3, [r8, #-0x1]! + ldrb r1, [sp, #0x8] + add r5, r5, #0x1 + sub r1, r0, r1 + cmp r5, r1 + blt _020E657C +_020E6594: + cmp r5, r0 + bge _020E65BC +_020E659C: + ldrsb r1, [r2, #-0x1]! + add r5, r5, #0x1 + cmp r5, r0 + strb r1, [r8, #-0x1]! + blt _020E659C + b _020E65BC +_020E65B4: + mov r0, #0x30 + strb r0, [r8, #-0x1]! +_020E65BC: + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r8, #-0x1]! + bne _020E65EC + cmp r4, #0x1 + moveq r0, #0x2b + streqb r0, [r8, #-0x1]! + beq _020E65EC + cmp r4, #0x2 + moveq r0, #0x20 + streqb r0, [r8, #-0x1]! +_020E65EC: + mov r0, r8 + bl strlen + sub r1, r9, r0, lsl #0x1 + mov r0, r8 + sub r4, r1, #0x2 + bl strlen + mov r2, r0 + mov r0, r4 + mov r1, r8 + bl mbstowcs + mov r0, r4 + add sp, sp, #0x22c + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E6628: .word 0x000001FD +_020E662C: .word 0x02104544 +_020E6630: .word 0x02106DF0 +_020E6634: .word 0x02106DFC +_020E6638: .word 0x02106E08 +_020E663C: .word 0x02106E10 +_020E6640: .word 0x02106E18 +_020E6644: .word 0x02106E24 +_020E6648: .word 0x02106E30 +_020E664C: .word 0x02106E38 +_020E6650: .word 0x66666667 +__wpformatter: + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x430 + mov r3, #0x20 + mov r11, r2 + strh r3, [sp, #0x1c] + ldrh r2, [r11, #0x0] + mov r9, r0 + mov r8, r1 + cmp r2, #0x0 + mov r4, #0x0 + beq _020E6F24 +_020E6684: + mov r0, r11 + mov r1, #0x25 + bl wcschr + str r0, [sp, #0xc] + cmp r0, #0x0 + bne _020E66D8 + mov r0, r11 + bl wcslen + movs r2, r0 + add r4, r4, r2 + beq _020E6F24 + mov r0, r8 + mov r1, r11 + blx r9 + cmp r0, #0x0 + bne _020E6F24 + add sp, sp, #0x430 + mvn r0, #0x0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E66D8: + sub r0, r0, r11 + add r0, r0, r0, lsr #0x1f + movs r2, r0, asr #0x1 + add r4, r4, r2 + beq _020E6710 + mov r0, r8 + mov r1, r11 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E6710: + add r1, sp, #0x400 + ldr r0, [sp, #0xc] + add r1, r1, #0x64 + add r2, sp, #0x20 + bl parse_format_wprintf + ldrh r1, [sp, #0x26] + mov r11, r0 + cmp r1, #0x61 + bgt _020E6780 + bge _020E6AEC + cmp r1, #0x47 + bgt _020E6774 + subs r0, r1, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020E6768 +_020E674C: + .byte 0xE6, 0x00, 0x00, 0xEA + .byte 0x8E, 0x01, 0x00, 0xEA, 0x8D, 0x01, 0x00, 0xEA, 0x8C, 0x01, 0x00, 0xEA, 0xC6, 0x00, 0x00, 0xEA + .byte 0xC5, 0x00, 0x00, 0xEA, 0xC4, 0x00, 0x00, 0xEA +_020E6768: + cmp r1, #0x25 + beq _020E6D7C + b _020E6D90 +_020E6774: + cmp r1, #0x58 + beq _020E6940 + b _020E6D90 +_020E6780: + cmp r1, #0x75 + bgt _020E67E8 + subs r0, r1, #0x64 + addpl pc, pc, r0, lsl #0x2 + b _020E67DC +_020E6794: + .byte 0x1A, 0x00, 0x00, 0xEA, 0xB7, 0x00, 0x00, 0xEA, 0xB6, 0x00, 0x00, 0xEA + .byte 0xB5, 0x00, 0x00, 0xEA, 0x79, 0x01, 0x00, 0xEA, 0x15, 0x00, 0x00, 0xEA, 0x77, 0x01, 0x00, 0xEA + .byte 0x76, 0x01, 0x00, 0xEA, 0x75, 0x01, 0x00, 0xEA, 0x74, 0x01, 0x00, 0xEA, 0x35, 0x01, 0x00, 0xEA + .byte 0x5E, 0x00, 0x00, 0xEA, 0x71, 0x01, 0x00, 0xEA, 0x70, 0x01, 0x00, 0xEA, 0x6F, 0x01, 0x00, 0xEA + .byte 0xE1, 0x00, 0x00, 0xEA, 0x6D, 0x01, 0x00, 0xEA, 0x58, 0x00, 0x00, 0xEA +_020E67DC: + cmp r1, #0x63 + beq _020E6D24 + b _020E6D90 +_020E67E8: + cmp r1, #0x78 + bgt _020E67F8 + beq _020E6940 + b _020E6D90 +_020E67F8: + ldr r0, _020E6F38 ; =0x0000FFFF + cmp r1, r0 + b _020E6D90 +_020E6804: + .byte 0x24, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A + .byte 0x64, 0x14, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5 + .byte 0x25, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5 + .byte 0x08, 0x20, 0x81, 0xE2, 0x64, 0x24, 0x8D, 0xE5, 0x08, 0x10, 0x12, 0xE5, 0x10, 0x10, 0x8D, 0xE5 + .byte 0x04, 0x10, 0x12, 0xE5, 0x14, 0x10, 0x8D, 0xE5, 0x1B, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x50, 0xE3 + .byte 0x07, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5, 0x08, 0x20, 0x81, 0xE2, 0x64, 0x24, 0x8D, 0xE5 + .byte 0x08, 0x10, 0x12, 0xE5, 0x10, 0x10, 0x8D, 0xE5, 0x04, 0x10, 0x12, 0xE5, 0x14, 0x10, 0x8D, 0xE5 + .byte 0x11, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5 + .byte 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5, 0x0A, 0x00, 0x00, 0xEA + .byte 0x08, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2 + .byte 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x64, 0x14, 0x9D, 0xE5 + .byte 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5, 0x02, 0x00, 0x50, 0xE3 + .byte 0x0A, 0x18, 0xA0, 0x01, 0x41, 0xA8, 0xA0, 0x01, 0x04, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13 + .byte 0x20, 0x00, 0x8D, 0xE2, 0x0A, 0x00, 0x00, 0x1A, 0x04, 0x50, 0x4D, 0xE2, 0x0F, 0x00, 0x90, 0xE8 + .byte 0x0F, 0x00, 0x85, 0xE8, 0x00, 0x30, 0x95, 0xE5, 0x10, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x9D, 0xE5 + .byte 0x43, 0x2E, 0x8D, 0xE2, 0xDB, 0xFB, 0xFF, 0xEB, 0x00, 0x60, 0xB0, 0xE1, 0x23, 0x01, 0x00, 0x0A + .byte 0x08, 0x00, 0x00, 0xEA, 0x08, 0x50, 0x4D, 0xE2, 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x85, 0xE8 + .byte 0x43, 0x1E, 0x8D, 0xE2, 0x0A, 0x00, 0xA0, 0xE1, 0x0C, 0x00, 0x95, 0xE8, 0x3D, 0xFB, 0xFF, 0xEB + .byte 0x00, 0x60, 0xB0, 0xE1, 0x19, 0x01, 0x00, 0x0A, 0x01, 0x0B, 0x8D, 0xE2, 0x2E, 0x00, 0x80, 0xE2 + .byte 0x06, 0x00, 0x40, 0xE0, 0xA0, 0x0F, 0x80, 0xE0, 0xC0, 0x70, 0xA0, 0xE1, 0x26, 0x01, 0x00, 0xEA +_020E6940: + ldrb r0, [sp, #0x24] + cmp r0, #0x3 + bne _020E6960 + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E69F8 +_020E6960: + cmp r0, #0x4 + bne _020E6988 + ldr r1, [sp, #0x464] + add r2, r1, #0x8 + str r2, [sp, #0x464] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E69F8 +_020E6988: + cmp r0, #0x6 + bne _020E69B0 + ldr r1, [sp, #0x464] + add r2, r1, #0x8 + str r2, [sp, #0x464] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E69F8 +_020E69B0: + cmp r0, #0x7 + bne _020E69CC + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E69F8 +_020E69CC: + cmp r0, #0x8 + bne _020E69E8 + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E69F8 +_020E69E8: + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] +_020E69F8: + cmp r0, #0x2 + moveq r1, r10, lsl #0x10 + moveq r10, r1, lsr #0x10 + cmp r0, #0x4 + cmpne r0, #0x6 + add r0, sp, #0x20 + bne _020E6A40 + sub r5, sp, #0x4 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + ldr r3, [r5, #0x0] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r2, sp, #0x430 + bl longlong2str_wide + movs r6, r0 + beq _020E6D90 + b _020E6A64 +_020E6A40: + sub r5, sp, #0x8 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + add r1, sp, #0x430 + mov r0, r10 + ldmia r5, {r2-r3} + bl long2str_wide + movs r6, r0 + beq _020E6D90 +_020E6A64: + add r0, sp, #0x400 + add r0, r0, #0x2e + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC +_020E6A7C: + .byte 0x24, 0x00, 0xDD, 0xE5 + .byte 0x09, 0x00, 0x50, 0xE3, 0x64, 0x04, 0x9D, 0x15, 0x08, 0x00, 0x80, 0x12, 0x64, 0x04, 0x8D, 0x15 + .byte 0x02, 0x00, 0x00, 0x1A, 0x64, 0x04, 0x9D, 0xE5, 0x08, 0x00, 0x80, 0xE2, 0x64, 0x04, 0x8D, 0xE5 + .byte 0x08, 0x70, 0x10, 0xE5, 0x04, 0x60, 0x10, 0xE5, 0x20, 0x00, 0x8D, 0xE2, 0x04, 0x50, 0x4D, 0xE2 + .byte 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x85, 0xE8, 0x00, 0x30, 0x95, 0xE5, 0x07, 0x00, 0xA0, 0xE1 + .byte 0x06, 0x10, 0xA0, 0xE1, 0x43, 0x2E, 0x8D, 0xE2, 0x4E, 0xFD, 0xFF, 0xEB, 0x00, 0x60, 0xB0, 0xE1 + .byte 0xAE, 0x00, 0x00, 0x0A, 0x01, 0x0B, 0x8D, 0xE2, 0x2E, 0x00, 0x80, 0xE2, 0x06, 0x00, 0x40, 0xE0 + .byte 0xA0, 0x0F, 0x80, 0xE0, 0xC0, 0x70, 0xA0, 0xE1, 0xBB, 0x00, 0x00, 0xEA +_020E6AEC: + ldrb r0, [sp, #0x24] + cmp r0, #0x9 + ldrne r0, [sp, #0x464] + addne r0, r0, #0x8 + strne r0, [sp, #0x464] + bne _020E6B10 + ldr r0, [sp, #0x464] + add r0, r0, #0x8 + str r0, [sp, #0x464] +_020E6B10: + ldr r7, [r0, #-0x8] + ldr r6, [r0, #-0x4] + add r0, sp, #0x20 + sub r5, sp, #0x4 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + ldr r3, [r5, #0x0] + mov r0, r7 + mov r1, r6 + add r2, sp, #0x430 + bl double2hex_wide + movs r6, r0 + beq _020E6D90 + add r0, sp, #0x400 + add r0, r0, #0x2e + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC +_020E6B5C: + .byte 0x24, 0x00, 0xDD, 0xE5 + .byte 0x05, 0x00, 0x50, 0xE3, 0x23, 0x00, 0x00, 0x1A, 0x64, 0x04, 0x9D, 0xE5, 0x04, 0x00, 0x80, 0xE2 + .byte 0x64, 0x04, 0x8D, 0xE5, 0x04, 0x60, 0x10, 0xE5, 0x23, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x56, 0xE3 + .byte 0xB4, 0x63, 0x9F, 0x05, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0xB2, 0x10, 0xD6, 0xE0 + .byte 0x22, 0x00, 0xDD, 0xE5, 0xFF, 0x70, 0x01, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x8E, 0x00, 0x00, 0x0A + .byte 0x2C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x57, 0xE1, 0x00, 0x70, 0xA0, 0xC1, 0x8A, 0x00, 0x00, 0xEA + .byte 0x22, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x2C, 0x70, 0x9D, 0xE5 + .byte 0x06, 0x00, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x29, 0xF9, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x80, 0x00, 0x00, 0x0A, 0x06, 0x00, 0x40, 0xE0, 0xA0, 0x0F, 0x80, 0xE0 + .byte 0xC0, 0x70, 0xA0, 0xE1, 0x7C, 0x00, 0x00, 0xEA, 0x06, 0x00, 0xA0, 0xE1, 0x0A, 0x01, 0x00, 0xEB + .byte 0x00, 0x70, 0xA0, 0xE1, 0x78, 0x00, 0x00, 0xEA, 0x64, 0x04, 0x9D, 0xE5, 0x04, 0x00, 0x80, 0xE2 + .byte 0x64, 0x04, 0x8D, 0xE5, 0x04, 0x50, 0x10, 0xE5, 0x23, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x55, 0xE3 + .byte 0x28, 0x53, 0x9F, 0x05, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0xB0, 0x10, 0xD6, 0xE1 + .byte 0x22, 0x00, 0xDD, 0xE5, 0xFF, 0x60, 0x01, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x11, 0x00, 0x00, 0x0A + .byte 0x2C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x56, 0xE1, 0x00, 0x60, 0xA0, 0xC1, 0x0D, 0x00, 0x00, 0xEA + .byte 0x22, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0x2C, 0x60, 0x9D, 0xE5 + .byte 0x05, 0x00, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x15, 0xE2, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x60, 0x40, 0x10, 0x02, 0x00, 0x00, 0xEA, 0x05, 0x00, 0xA0, 0xE1 + .byte 0x8D, 0xF0, 0xFF, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x30, 0x00, 0x8D, 0xE2, 0x05, 0x10, 0xA0, 0xE1 + .byte 0x06, 0x20, 0xA0, 0xE1, 0xAB, 0xE1, 0xFF, 0xEB, 0x00, 0x70, 0xB0, 0xE1, 0x3F, 0x00, 0x00, 0x4A + .byte 0x30, 0x60, 0x8D, 0xE2, 0x50, 0x00, 0x00, 0xEA, 0x64, 0x14, 0x9D, 0xE5, 0x24, 0x00, 0xDD, 0xE5 + .byte 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0x60, 0x11, 0xE5, 0x08, 0x00, 0x50, 0xE3 + .byte 0x00, 0xF1, 0x8F, 0x90, 0x97, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0x95, 0x00, 0x00, 0xEA + .byte 0x07, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x11, 0x00, 0x00, 0xEA, 0x91, 0x00, 0x00, 0xEA + .byte 0x07, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5 + .byte 0x8C, 0x00, 0x00, 0xEA, 0xB0, 0x40, 0xC6, 0xE1, 0x8A, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5 + .byte 0x88, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5, 0xC4, 0x0F, 0xA0, 0xE1, 0x04, 0x00, 0x86, 0xE5 + .byte 0x84, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5, 0x82, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5 + .byte 0x80, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5, 0xC4, 0x0F, 0xA0, 0xE1, 0x04, 0x00, 0x86, 0xE5 + .byte 0x7C, 0x00, 0x00, 0xEA +_020E6D24: + ldrb r0, [sp, #0x24] + add r6, sp, #0x30 + cmp r0, #0x5 + bne _020E6D50 + ldr r0, [sp, #0x464] + mov r7, #0x1 + add r0, r0, #0x4 + str r0, [sp, #0x464] + ldr r0, [r0, #-0x4] + strh r0, [r6, #0x0] + b _020E6DDC +_020E6D50: + ldr r0, [sp, #0x464] + add r1, sp, #0x18 + add r0, r0, #0x4 + str r0, [sp, #0x464] + ldr r3, [r0, #-0x4] + mov r0, r6 + mov r2, #0x1 + strb r3, [sp, #0x18] + bl mbtowc + mov r7, r0 + b _020E6DDC +_020E6D7C: + mov r0, #0x25 + strh r0, [sp, #0x30] + add r6, sp, #0x30 + mov r7, #0x1 + b _020E6DDC +_020E6D90: + ldr r0, [sp, #0xc] + bl wcslen + movs r5, r0 + beq _020E6DC8 + ldr r1, [sp, #0xc] + mov r0, r8 + mov r2, r5 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E6DC8: + add sp, sp, #0x430 + add r0, r4, r5 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E6DDC: + ldrb r0, [sp, #0x20] + mov r5, r7 + cmp r0, #0x0 + beq _020E6E8C + cmp r0, #0x2 + moveq r1, #0x30 + movne r1, #0x20 + strh r1, [sp, #0x1c] + ldrh r0, [r6, #0x0] + cmp r0, #0x2b + cmpne r0, #0x2d + cmpne r0, #0x20 + bne _020E6E48 + cmp r1, #0x30 + bne _020E6E48 + mov r0, r8 + mov r1, r6 + mov r2, #0x1 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + add r6, r6, #0x2 + sub r7, r7, #0x1 +_020E6E48: + ldr r0, [sp, #0x28] + cmp r5, r0 + bge _020E6E8C +_020E6E54: + mov r0, r8 + add r1, sp, #0x1c + mov r2, #0x1 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x28] + add r5, r5, #0x1 + cmp r5, r0 + blt _020E6E54 +_020E6E8C: + cmp r7, #0x0 + beq _020E6EBC + mov r0, r8 + mov r1, r6 + mov r2, r7 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E6EBC: + ldrb r0, [sp, #0x20] + cmp r0, #0x0 + bne _020E6F14 + ldr r0, [sp, #0x28] + cmp r5, r0 + bge _020E6F14 + mov r7, #0x20 +_020E6ED8: + mov r0, r8 + add r1, sp, #0x1a + mov r2, #0x1 + strh r7, [sp, #0x1a] + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x28] + add r5, r5, #0x1 + cmp r5, r0 + blt _020E6ED8 +_020E6F14: + add r4, r4, r5 + ldrh r0, [r11, #0x0] + cmp r0, #0x0 + bne _020E6684 +_020E6F24: + mov r0, r4 + add sp, sp, #0x430 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E6F38: .word 0x0000FFFF +_020E6F3C: + .byte 0x40, 0x6E, 0x10, 0x02 + .byte 0x44, 0x6E, 0x10, 0x02 + + arm_func_start __wStringWrite +__wStringWrite: ; 0x020E6F44 + stmdb sp!, {r3-r5,lr} + mov r4, r0 + ldr r3, [r4, #0x8] + mov r5, r2 + ldr r2, [r4, #0x4] + add r0, r3, r5 + cmp r0, r2 + ldr r0, [r4, #0x0] + subhi r5, r2, r3 + mov r2, r5 + add r0, r0, r3, lsl #0x1 + bl wmemcpy + ldr r1, [r4, #0x8] + add r1, r1, r5 + str r1, [r4, #0x8] + ldmia sp!, {r3-r5,pc} + + arm_func_start swprintf +swprintf: ; 0x020E6F84 + stmdb sp!, {r0-r3} + stmdb sp!, {r3,lr} + add r3, sp, #0x10 + bic r3, r3, #0x3 + ldr r2, [sp, #0x10] + add r3, r3, #0x4 + bl vswprintf + ldmia sp!, {r3,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start vswprintf +vswprintf: ; 0x020E6FAC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + mov r4, r1 + mov r12, #0x0 + ldr r0, _020E7018 ; =__wStringWrite + add r1, sp, #0x0 + str r5, [sp, #0x0] + str r4, [sp, #0x4] + str r12, [sp, #0x8] + bl __wpformatter +_020E6FD8: + .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0xB2 + .byte 0x30, 0x80, 0xBD, 0xB8, 0x04, 0x00, 0x50, 0xE1, 0x04, 0x00, 0x00, 0x2A, 0x80, 0x10, 0xA0, 0xE1 + .byte 0x00, 0x20, 0xA0, 0xE3, 0x0C, 0xD0, 0x8D, 0xE2, 0xB1, 0x20, 0x85, 0xE1, 0x30, 0x80, 0xBD, 0xE8 + .byte 0x00, 0x10, 0xA0, 0xE3, 0x84, 0x00, 0x85, 0xE0, 0xB2, 0x10, 0x40, 0xE1, 0x01, 0x00, 0x41, 0xE2 + .byte 0x0C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 +_020E7018: .word __wStringWrite + + arm_func_start wcslen +wcslen: ; 0x020E701C + mvn r2, #0x0 +_020E7020: + ldrh r1, [r0], #0x2 + add r2, r2, #0x1 + cmp r1, #0x0 + bne _020E7020 + mov r0, r2 + bx lr + + arm_func_start wcscpy +wcscpy: ; 0x020E7038 + mov r3, r0 +_020E703C: + ldrh r2, [r1], #0x2 + mov r12, r3 + strh r2, [r3], #0x2 + ldrh r2, [r12, #0x0] + cmp r2, #0x0 + bne _020E703C + bx lr + + arm_func_start wcschr +wcschr: ; 0x020E7058 + ldrh r2, [r0], #0x2 + cmp r2, #0x0 + beq _020E707C +_020E7064: + cmp r2, r1 + subeq r0, r0, #0x2 + bxeq lr + ldrh r2, [r0], #0x2 + cmp r2, #0x0 + bne _020E7064 +_020E707C: + cmp r1, #0x0 + movne r0, #0x0 + subeq r0, r0, #0x2 + bx lr + + arm_func_start __ieee754_pow +__ieee754_pow: ; 0x020E708C + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x80 + ldr r8, [sp, #0xb4] + ldr r6, [sp, #0xac] + ldr r0, [sp, #0xb0] + bic r9, r8, #0x80000000 + orrs r1, r9, r0 + ldr r7, [sp, #0xa8] + bic r4, r6, #0x80000000 + addeq sp, sp, #0x80 + moveq r0, #0x0 + ldreq r1, _020E7638 ; =0x3FF00000 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r1, _020E763C ; =0x7FF00000 + cmp r4, r1 + bgt _020E70FC + bne _020E70E4 + cmp r7, #0x0 + bne _020E70FC +_020E70E4: + ldr r1, _020E763C ; =0x7FF00000 + cmp r9, r1 + bgt _020E70FC + bne _020E7120 + cmp r0, #0x0 + beq _020E7120 +_020E70FC: + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + ldr r2, [sp, #0xb0] + ldr r3, [sp, #0xb4] + bl _dadd + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7120: + cmp r6, #0x0 + mov r5, #0x0 + bge _020E7188 + ldr r1, _020E7640 ; =0x43400000 + cmp r9, r1 + movge r5, #0x2 + bge _020E7188 + sub r1, r1, #0x3500000 + cmp r9, r1 + blt _020E7188 + ldr r1, _020E7644 ; =0xFFFFFC01 + add r1, r1, r9, asr #0x14 + cmp r1, #0x14 + ble _020E7170 + rsb r2, r1, #0x34 + mov r1, r0, lsr r2 + cmp r0, r1, lsl r2 + andeq r1, r1, #0x1 + rsbeq r5, r1, #0x2 + b _020E7188 +_020E7170: + cmp r0, #0x0 + rsbeq r2, r1, #0x14 + moveq r1, r9, asr r2 + cmpeq r9, r1, lsl r2 + andeq r1, r1, #0x1 + rsbeq r5, r1, #0x2 +_020E7188: + cmp r0, #0x0 + bne _020E72E4 + ldr r1, _020E763C ; =0x7FF00000 + cmp r9, r1 + bne _020E723C + add r0, r4, #0x100000 + add r0, r0, #0xc0000000 + orrs r0, r0, r7 + bne _020E71D0 + ldr r0, [sp, #0xb0] + ldr r1, [sp, #0xb4] + mov r2, r0 + mov r3, r1 + bl _dsub + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E71D0: + sub r0, r1, #0x40000000 + cmp r4, r0 + blt _020E7200 + cmp r8, #0x0 + ldrge r0, [sp, #0xb0] + ldrge r1, [sp, #0xb4] + movlt r0, #0x0 + add sp, sp, #0x80 + movlt r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7200: + cmp r8, #0x0 + mov r0, #0x0 + addge sp, sp, #0x80 + movge r1, r0 + ldmgeia sp!, {r3-r11,lr} + addge sp, sp, #0x10 + bxge lr + ldr r2, [sp, #0xb0] + ldr r3, [sp, #0xb4] + mov r1, r0 + bl _dsub + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E723C: + sub r0, r1, #0x40000000 + cmp r9, r0 + bne _020E7288 + cmp r8, #0x0 + ldrge r0, [sp, #0xa8] + ldrge r1, [sp, #0xac] + addge sp, sp, #0x80 + ldmgeia sp!, {r3-r11,lr} + addge sp, sp, #0x10 + bxge lr + ldr r2, [sp, #0xa8] + ldr r3, [sp, #0xac] + sub r1, r1, #0x40000000 + mov r0, #0x0 + bl _ddiv + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7288: + cmp r8, #0x40000000 + bne _020E72B4 + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + mov r2, r0 + mov r3, r1 + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E72B4: + ldr r0, _020E7648 ; =0x3FE00000 + cmp r8, r0 + bne _020E72E4 + cmp r6, #0x0 + blt _020E72E4 + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + bl _dsqrt + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E72E4: + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + bl fabs + str r0, [sp, #0x70] + str r1, [sp, #0x74] + cmp r7, #0x0 + bne _020E73E8 + ldr r0, _020E763C ; =0x7FF00000 + cmp r4, r0 + cmpne r4, #0x0 + subne r0, r0, #0x40000000 + cmpne r4, r0 + bne _020E73E8 + ldr r2, [sp, #0x70] + ldr r3, [sp, #0x74] + str r2, [sp, #0x78] + str r3, [sp, #0x7c] + cmp r8, #0x0 + bge _020E7344 + ldr r1, _020E7638 ; =0x3FF00000 + mov r0, #0x0 + bl _ddiv + str r0, [sp, #0x78] + str r1, [sp, #0x7c] +_020E7344: + cmp r6, #0x0 + bge _020E73D0 + add r0, r4, #0x100000 + add r0, r0, #0xc0000000 + orrs r0, r0, r5 + bne _020E73AC + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + mov r2, r0 + mov r3, r1 + bl _dsub + mov r4, r0 + mov r5, r1 + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + mov r2, r0 + mov r3, r1 + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r5 + bl _ddiv + str r0, [sp, #0x78] + str r1, [sp, #0x7c] + b _020E73D0 +_020E73AC: + cmp r5, #0x1 + bne _020E73D0 + mov r0, #0x0 + ldr r2, [sp, #0x78] + ldr r3, [sp, #0x7c] + mov r1, r0 + bl _dsub + str r0, [sp, #0x78] + str r1, [sp, #0x7c] +_020E73D0: + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E73E8: + mov r0, r6, asr #0x1f + add r7, r0, #0x1 + orrs r0, r7, r5 + bne _020E7420 + ldr r0, _020E764C ; =0x02106B78 + ldr r1, _020E7650 ; =0x021D74A8 + ldr r0, [r0, #0x0] + mov r2, #0x21 + str r2, [r1, #0x0] + bl _f2d + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7420: + ldr r3, _020E7654 ; =0x41E00000 + cmp r9, r3 + ble _020E7724 + add r0, r3, #0x2100000 + cmp r9, r0 + ble _020E7490 + ldr r1, _020E7658 ; =0x3FEFFFFF + cmp r4, r1 + bgt _020E7464 + cmp r8, #0x0 + mov r0, #0x0 + addlt r1, r1, #0x40000001 + add sp, sp, #0x80 + movge r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7464: + add r0, r1, #0x1 + cmp r4, r0 + blt _020E7490 + cmp r8, #0x0 + mov r0, #0x0 + addgt r1, r1, #0x40000001 + add sp, sp, #0x80 + movle r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7490: + ldr r2, _020E7658 ; =0x3FEFFFFF + cmp r4, r2 + bge _020E74BC + cmp r8, #0x0 + mov r0, #0x0 + addlt r1, r2, #0x40000001 + add sp, sp, #0x80 + movge r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E74BC: + add r0, r2, #0x1 + cmp r4, r0 + ble _020E74E8 + cmp r8, #0x0 + mov r0, #0x0 + addgt r1, r2, #0x40000001 + add sp, sp, #0x80 + movle r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E74E8: + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + add r3, r2, #0x1 + mov r2, #0x0 + bl _dsub + mov r2, r0 + mov r3, r1 + str r0, [sp, #0x50] + str r1, [sp, #0x54] + bl _dmul + mov r6, r1 + mov r4, r0 + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + ldr r1, _020E765C ; =0x3FD00000 + mov r0, #0x0 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7660 ; =0x55555555 + sub r1, r0, #0x15800000 + bl _dsub + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, #0x0 + ldr r1, _020E7648 ; =0x3FE00000 + bl _dsub + mov r2, r0 + mov r0, r4 + mov r3, r1 + mov r1, r6 + bl _dmul + mov r6, r0 + mov r8, r1 + mov r0, #0x60000000 + ldr r1, _020E7664 ; =0x3FF71547 + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + bl _dmul + mov r4, r0 + mov r9, r1 + ldr r0, _020E7668 ; =0xF85DDF44 + ldr r1, _020E766C ; =0x3E54AE0B + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + bl _dmul + mov r11, r0 + mov r10, r1 + ldr r0, _020E7670 ; =0x652B82FE + ldr r1, _020E7664 ; =0x3FF71547 + mov r2, r6 + mov r3, r8 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r11 + mov r1, r10 + bl _dsub + mov r6, r0 + mov r8, r1 + mov r0, r4 + mov r1, r9 + mov r2, r6 + mov r3, r8 + bl _dadd + mov r2, r4 + mov r3, r9 + str r1, [sp, #0x5c] + mov r0, #0x0 + str r0, [sp, #0x58] + bl _dsub + mov r2, r0 + mov r0, r6 + mov r3, r1 + mov r1, r8 + bl _dsub + mov r4, r0 + mov r8, r1 + b _020E7C80 + .balign 4 +_020E7638: .word 0x3FF00000 +_020E763C: .word 0x7FF00000 +_020E7640: .word 0x43400000 +_020E7644: .word 0xFFFFFC01 +_020E7648: .word 0x3FE00000 +_020E764C: .word 0x02106B78 +_020E7650: .word 0x021D74A8 +_020E7654: .word 0x41E00000 +_020E7658: .word 0x3FEFFFFF +_020E765C: .word 0x3FD00000 +_020E7660: .word 0x55555555 +_020E7664: .word 0x3FF71547 +_020E7668: .word 0xF85DDF44 +_020E766C: .word 0x3E54AE0B +_020E7670: .word 0x652B82FE +_020E7674: .word 0x0003988E +_020E7678: .word 0x000BB67A +_020E767C: .word 0x02104754 +_020E7680: .word 0x4A454EEF +_020E7684: .word 0x3FCA7E28 +_020E7688: .word 0x93C9DB65 +_020E768C: .word 0x3FCD864A +_020E7690: .word 0xA91D4101 +_020E7694: .word 0x3FD17460 +_020E7698: .word 0x518F264D +_020E769C: .word 0x3FD55555 +_020E76A0: .word 0xDB6FABFF +_020E76A4: .word 0x3FDB6DB6 +_020E76A8: .word 0x33333303 +_020E76AC: .word 0x3FE33333 +_020E76B0: .word 0x40080000 +_020E76B4: + .byte 0x09, 0xC7, 0xEE, 0x3F, 0xF5, 0x01, 0x5B, 0x14, 0xE0, 0x2F, 0x3E, 0xBE + .byte 0xFD, 0x03, 0x3A, 0xDC, 0x64, 0x47, 0x10, 0x02, 0x44, 0x47, 0x10, 0x02 +_020E76CC: .word 0x40900000 +_020E76D0: .word 0x8800759C +_020E76D4: .word 0x7E37E43C +_020E76D8: .word 0x3C971547 +_020E76DC: .word 0x3F6F3400 +_020E76E0: .word 0xC2F8F359 +_020E76E4: .word 0x01A56E1F +_020E76E8: .word 0x3FE62E43 +_020E76EC: .word 0xFEFA39EF +_020E76F0: .word 0x3FE62E42 +_020E76F4: .word 0x0CA86C39 +_020E76F8: .word 0xBE205C61 +_020E76FC: .word 0x72BEA4D0 +_020E7700: .word 0x3E663769 +_020E7704: .word 0xC5D26BF1 +_020E7708: .word 0xBEBBBD41 +_020E770C: .word 0xAF25DE2C +_020E7710: .word 0x3F11566A +_020E7714: .word 0x16BEBD93 +_020E7718: .word 0xBF66C16C +_020E771C: .word 0x5555553E +_020E7720: .word 0x3FC55555 +_020E7724: + cmp r4, #0x100000 + mov r6, #0x0 + bge _020E7754 + ldr r0, [sp, #0x70] + ldr r1, [sp, #0x74] + mov r2, r6 + add r3, r3, #0x1600000 + bl _dmul + mov r4, r1 + str r0, [sp, #0x70] + str r4, [sp, #0x74] + sub r6, r6, #0x35 +_020E7754: + ldr r0, _020E7644 ; =0xFFFFFC01 + ldr r1, _020E7674 ; =0x0003988E + and r2, r4, r0, lsr #0xc + add r0, r0, r4, asr #0x14 + orr r9, r2, #0xff00000 + cmp r2, r1 + add r6, r6, r0 + orr r9, r9, #0x30000000 + movle r8, #0x0 + ble _020E7794 + ldr r0, _020E7678 ; =0x000BB67A + cmp r2, r0 + movlt r8, #0x1 + addge r6, r6, #0x1 + subge r9, r9, #0x100000 + movge r8, #0x0 +_020E7794: + ldr r2, _020E767C ; =0x02104754 + ldr r0, [sp, #0x70] + add r1, r2, r8, lsl #0x3 + ldr r3, [r1, #0x4] + ldr r2, [r2, r8, lsl #0x3] + mov r1, r9 + str r9, [sp, #0x74] + bl _dsub + ldr r2, _020E767C ; =0x02104754 + mov r10, r0 + add r3, r2, r8, lsl #0x3 + mov r4, r1 + ldr r0, [sp, #0x70] + ldr r2, [r2, r8, lsl #0x3] + ldr r3, [r3, #0x4] + mov r1, r9 + bl _dadd + mov r3, r1 + mov r2, r0 + ldr r1, _020E7638 ; =0x3FF00000 + mov r0, #0x0 + bl _ddiv + str r1, [sp, #0x24] + mov r11, r0 + ldr r3, [sp, #0x24] + mov r0, r10 + mov r1, r4 + mov r2, r11 + bl _dmul + mov r2, r9, asr #0x1 + orr r2, r2, #0x20000000 + mov r9, r1 + add r2, r2, #0x80000 + add r1, r2, r8, lsl #0x12 + ldr r2, _020E767C ; =0x02104754 + str r0, [sp, #0x28] + add r3, r2, r8, lsl #0x3 + mov r0, #0x0 + ldr r2, [r2, r8, lsl #0x3] + ldr r3, [r3, #0x4] + str r9, [sp, #0x4c] + str r1, [sp, #0x44] + str r0, [sp, #0x48] + str r0, [sp, #0x40] + bl _dsub + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x70] + ldr r1, [sp, #0x74] + bl _dsub + str r0, [sp, #0x2c] + str r1, [sp, #0x1c] + ldr r0, [sp, #0x48] + ldr r2, [sp, #0x40] + ldr r3, [sp, #0x44] + mov r1, r9 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r10 + mov r1, r4 + bl _dsub + mov r10, r0 + mov r4, r1 + ldr r2, [sp, #0x2c] + ldr r3, [sp, #0x1c] + ldr r0, [sp, #0x48] + mov r1, r9 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r10 + mov r1, r4 + bl _dsub + mov r3, r1 + mov r2, r0 + ldr r1, [sp, #0x24] + mov r0, r11 + bl _dmul + str r0, [sp, #0x30] + ldr r0, [sp, #0x28] + str r1, [sp, #0x14] + mov r1, r9 + mov r2, r0 + mov r3, r9 + bl _dmul + mov r4, r0 + mov r10, r1 + mov r2, r4 + mov r3, r10 + bl _dmul + str r0, [sp, #0x34] + mov r11, r1 + ldr r0, _020E7680 ; =0x4A454EEF + ldr r1, _020E7684 ; =0x3FCA7E28 + mov r2, r4 + mov r3, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7688 ; =0x93C9DB65 + ldr r1, _020E768C ; =0x3FCD864A + bl _dadd + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7690 ; =0xA91D4101 + ldr r1, _020E7694 ; =0x3FD17460 + bl _dadd + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7698 ; =0x518F264D + ldr r1, _020E769C ; =0x3FD55555 + bl _dadd + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76A0 ; =0xDB6FABFF + ldr r1, _020E76A4 ; =0x3FDB6DB6 + bl _dadd + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76A8 ; =0x33333303 + ldr r1, _020E76AC ; =0x3FE33333 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x34] + mov r1, r11 + bl _dmul + mov r4, r0 + mov r10, r1 + ldr r0, [sp, #0x48] + ldr r2, [sp, #0x28] + mov r1, r9 + mov r3, r9 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x30] + ldr r1, [sp, #0x14] + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dadd + mov r4, r0 + ldr r0, [sp, #0x48] + mov r10, r1 + mov r1, r9 + mov r2, r0 + mov r3, r1 + bl _dmul + str r1, [sp, #0xc] + mov r11, r0 + ldr r1, _020E76B0 ; =0x40080000 + ldr r3, [sp, #0xc] + mov r0, #0x0 + mov r2, r11 + bl _dadd + mov r2, r4 + mov r3, r10 + bl _dadd +_020E7A6C: + .byte 0x00, 0x00, 0xA0, 0xE3 + .byte 0xC8, 0x33, 0x1F, 0xE5, 0x00, 0x20, 0xA0, 0xE1, 0x44, 0x10, 0x8D, 0xE5, 0x40, 0x00, 0x8D, 0xE5 + .byte 0xD1, 0x0A, 0x00, 0xEB, 0x0C, 0x30, 0x9D, 0xE5, 0x0B, 0x20, 0xA0, 0xE1, 0xCE, 0x0A, 0x00, 0xEB + .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 + .byte 0xC9, 0x0A, 0x00, 0xEB, 0x38, 0x00, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5, 0x48, 0x00, 0x9D, 0xE5 + .byte 0x40, 0x20, 0x9D, 0xE5, 0x44, 0x30, 0x9D, 0xE5, 0x09, 0x10, 0xA0, 0xE1, 0x7C, 0x09, 0x00, 0xEB + .byte 0x00, 0x40, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1, 0x30, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x9D, 0xE5 + .byte 0x40, 0x20, 0x9D, 0xE5, 0x44, 0x30, 0x9D, 0xE5, 0x75, 0x09, 0x00, 0xEB, 0x3C, 0x00, 0x8D, 0xE5 + .byte 0x01, 0xB0, 0xA0, 0xE1, 0x38, 0x00, 0x9D, 0xE5, 0x04, 0x10, 0x9D, 0xE5, 0x28, 0x20, 0x9D, 0xE5 + .byte 0x09, 0x30, 0xA0, 0xE1, 0x6E, 0x09, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 + .byte 0x3C, 0x00, 0x9D, 0xE5, 0x0B, 0x10, 0xA0, 0xE1, 0x0D, 0x08, 0x00, 0xEB, 0x00, 0x90, 0xA0, 0xE1 + .byte 0x01, 0xB0, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0x09, 0x20, 0xA0, 0xE1 + .byte 0x0B, 0x30, 0xA0, 0xE1, 0x06, 0x08, 0x00, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0x20, 0xA0, 0xE1 + .byte 0x0A, 0x30, 0xA0, 0xE1, 0x6C, 0x10, 0x8D, 0xE5, 0x68, 0x00, 0x8D, 0xE5, 0xA2, 0x0A, 0x00, 0xEB + .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x09, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1 + .byte 0x9D, 0x0A, 0x00, 0xEB, 0x01, 0xA0, 0xA0, 0xE1, 0x00, 0xB0, 0xA0, 0xE1, 0xB0, 0x14, 0x1F, 0xE5 + .byte 0x68, 0x20, 0x9D, 0xE5, 0x6C, 0x30, 0x9D, 0xE5, 0x0E, 0x02, 0xA0, 0xE3, 0x50, 0x09, 0x00, 0xEB + .byte 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x90, 0xA0, 0xE1, 0xC8, 0x04, 0x1F, 0xE5, 0xC8, 0x14, 0x1F, 0xE5 + .byte 0x68, 0x20, 0x9D, 0xE5, 0x6C, 0x30, 0x9D, 0xE5, 0x49, 0x09, 0x00, 0xEB, 0x0B, 0x20, 0xA0, 0xE1 + .byte 0x0A, 0x30, 0xA0, 0xE1, 0x00, 0xB0, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1, 0xE4, 0x04, 0x1F, 0xE5 + .byte 0xF4, 0x14, 0x1F, 0xE5, 0x42, 0x09, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 + .byte 0x0B, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0xE1, 0x07, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1 + .byte 0x01, 0x30, 0xA0, 0xE1, 0x08, 0x05, 0x1F, 0xE5, 0x88, 0x11, 0x80, 0xE0, 0x88, 0x01, 0x90, 0xE7 + .byte 0x04, 0x10, 0x91, 0xE5, 0xDA, 0x07, 0x00, 0xEB, 0x00, 0xB0, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1 + .byte 0x06, 0x00, 0xA0, 0xE1, 0x13, 0x09, 0x00, 0xEB, 0x50, 0x00, 0x8D, 0xE5, 0x54, 0x10, 0x8D, 0xE5 + .byte 0x04, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x0B, 0x20, 0xA0, 0xE1, 0x0A, 0x30, 0xA0, 0xE1 + .byte 0xCF, 0x07, 0x00, 0xEB, 0x44, 0x25, 0x1F, 0xE5, 0x88, 0x31, 0x82, 0xE0, 0x88, 0x21, 0x92, 0xE7 + .byte 0x04, 0x30, 0x93, 0xE5, 0xCA, 0x07, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 + .byte 0x50, 0x00, 0x9D, 0xE5, 0x54, 0x10, 0x9D, 0xE5, 0xC5, 0x07, 0x00, 0xEB, 0x5C, 0x10, 0x8D, 0xE5 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x58, 0x00, 0x8D, 0xE5, 0x50, 0x20, 0x9D, 0xE5, 0x54, 0x30, 0x9D, 0xE5 + .byte 0x61, 0x0A, 0x00, 0xEB, 0x84, 0x25, 0x1F, 0xE5, 0x88, 0x31, 0x82, 0xE0, 0x88, 0x21, 0x92, 0xE7 + .byte 0x04, 0x30, 0x93, 0xE5, 0x5C, 0x0A, 0x00, 0xEB, 0x04, 0x20, 0xA0, 0xE1, 0x09, 0x30, 0xA0, 0xE1 + .byte 0x59, 0x0A, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x0B, 0x00, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 + .byte 0x0A, 0x10, 0xA0, 0xE1, 0x54, 0x0A, 0x00, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x80, 0xA0, 0xE1 +_020E7C80: + sub r0, r5, #0x1 + ldr r1, [sp, #0xb4] + orrs r0, r7, r0 + ldr r5, _020E7638 ; =0x3FF00000 + mov r2, #0x0 + ldr r0, [sp, #0xb0] + mov r3, r1 + mov r6, #0x0 + subeq r5, r5, #0x80000000 + str r1, [sp, #0x64] + str r2, [sp, #0x60] + bl _dsub + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x58] + ldr r1, [sp, #0x5c] + bl _dmul + mov r7, r0 + mov r9, r1 + ldr r0, [sp, #0xb0] + ldr r1, [sp, #0xb4] + mov r2, r4 + mov r3, r8 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r7 + mov r1, r9 + bl _dadd + mov r7, r0 + mov r8, r1 + ldr r0, [sp, #0x60] + ldr r1, [sp, #0x64] + ldr r2, [sp, #0x58] + ldr r3, [sp, #0x5c] + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r7 + mov r1, r8 + str r2, [sp, #0x68] + str r3, [sp, #0x6c] + bl _dadd + mov r9, r1 + ldr r2, _020E76CC ; =0x40900000 + str r0, [sp, #0x78] + str r9, [sp, #0x7c] + cmp r9, r2 + blt _020E7E0C + add r1, r9, #0xf700000 + add r1, r1, #0xb0000000 + orrs r0, r1, r0 + beq _020E7D8C + ldr r0, _020E76D0 ; =0x8800759C + ldr r1, _020E76D4 ; =0x7E37E43C + mov r2, r6 + mov r3, r5 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76D0 ; =0x8800759C + ldr r1, _020E76D4 ; =0x7E37E43C + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7D8C: + ldr r0, _020E7670 ; =0x652B82FE + ldr r1, _020E76D8 ; =0x3C971547 + mov r2, r7 + mov r3, r8 + bl _dadd + mov r4, r0 + mov r10, r1 + ldr r0, [sp, #0x78] + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + mov r1, r9 + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dgr + bls _020E7EC0 + ldr r0, _020E76D0 ; =0x8800759C + ldr r1, _020E76D4 ; =0x7E37E43C + mov r2, r6 + mov r3, r5 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76D0 ; =0x8800759C + ldr r1, _020E76D4 ; =0x7E37E43C + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7E0C: + bic r3, r9, #0x80000000 + add r2, r2, #0xcc00 + cmp r3, r2 + blt _020E7EC0 + ldr r2, _020E76DC ; =0x3F6F3400 + add r2, r9, r2 + orrs r2, r2, r0 + beq _020E7E64 + ldr r0, _020E76E0 ; =0xC2F8F359 + ldr r1, _020E76E4 ; =0x01A56E1F + mov r2, r6 + mov r3, r5 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76E0 ; =0xC2F8F359 + ldr r1, _020E76E4 ; =0x01A56E1F + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7E64: + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r7 + mov r1, r8 + bl _dleq + bhi _020E7EC0 + ldr r0, _020E76E0 ; =0xC2F8F359 + ldr r1, _020E76E4 ; =0x01A56E1F + mov r2, r6 + mov r3, r5 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76E0 ; =0xC2F8F359 + ldr r1, _020E76E4 ; =0x01A56E1F + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7EC0: + ldr r0, _020E7644 ; =0xFFFFFC01 + bic r3, r9, #0x80000000 + ldr r1, _020E7648 ; =0x3FE00000 + add r2, r0, r3, asr #0x14 + cmp r3, r1 + mov r4, #0x0 + ble _020E7F3C + mov r1, #0x100000 + add r2, r2, #0x1 + add r2, r9, r1, asr r2 + bic r3, r2, #0x80000000 + add r0, r0, r3, asr #0x14 + sub r3, r1, #0x1 + mvn r3, r3, asr r0 + sub r1, r1, #0x1 + and r1, r2, r1 + and r2, r2, r3 + str r2, [sp, #0x54] + str r4, [sp, #0x50] + orr r1, r1, #0x100000 + rsb r0, r0, #0x14 + mov r4, r1, asr r0 + cmp r9, #0x0 + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x6c] + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + rsblt r4, r4, #0x0 + bl _dsub + str r0, [sp, #0x68] + str r1, [sp, #0x6c] +_020E7F3C: + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + mov r0, r7 + mov r1, r8 + bl _dadd + mov r3, r1 + mov r0, #0x0 + ldr r1, _020E76E8 ; =0x3FE62E43 + mov r2, r0 + str r3, [sp, #0x54] + str r0, [sp, #0x50] + bl _dmul + mov r9, r0 + mov r10, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + bl _dsub + mov r2, r0 + mov r0, r7 + mov r3, r1 + mov r1, r8 + bl _dsub + mov r2, r0 + mov r3, r1 + ldr r0, _020E76EC ; =0xFEFA39EF + ldr r1, _020E76F0 ; =0x3FE62E42 + bl _dmul + mov r7, r0 + mov r8, r1 + ldr r0, _020E76F4 ; =0x0CA86C39 + ldr r1, _020E76F8 ; =0xBE205C61 + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r0, r7 + mov r3, r1 + mov r1, r8 + bl _dadd + mov r7, r0 + mov r8, r1 + mov r0, r9 + mov r1, r10 + mov r2, r7 + mov r3, r8 + bl _dadd + mov r2, r9 + mov r3, r10 + str r0, [sp, #0x78] + str r1, [sp, #0x7c] + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r7 + mov r1, r8 + bl _dsub + mov r8, r0 + mov r9, r1 + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + mov r2, r0 + mov r3, r1 + bl _dmul + mov r2, r0 + str r2, [sp, #0x50] + mov r3, r1 + str r3, [sp, #0x54] + ldr r0, _020E76FC ; =0x72BEA4D0 + ldr r1, _020E7700 ; =0x3E663769 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7704 ; =0xC5D26BF1 + ldr r1, _020E7708 ; =0xBEBBBD41 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E770C ; =0xAF25DE2C + ldr r1, _020E7710 ; =0x3F11566A + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7714 ; =0x16BEBD93 + ldr r1, _020E7718 ; =0xBF66C16C + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E771C ; =0x5555553E + ldr r1, _020E7720 ; =0x3FC55555 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + bl _dsub + mov r2, r0 + str r2, [sp, #0x58] + mov r3, r1 + str r3, [sp, #0x5c] + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + bl _dmul + mov r7, r0 + mov r10, r1 + ldr r0, [sp, #0x58] + ldr r1, [sp, #0x5c] + mov r2, #0x0 + mov r3, #0x40000000 + bl _dsub + mov r2, r0 + mov r0, r7 + mov r3, r1 + mov r1, r10 + bl _ddiv + mov r7, r0 + mov r10, r1 + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + mov r2, r8 + mov r3, r9 + bl _dmul + mov r2, r0 + mov r0, r8 + mov r3, r1 + mov r1, r9 + bl _dadd + mov r2, r0 + mov r0, r7 + mov r3, r1 + mov r1, r10 + bl _dsub + ldr r2, [sp, #0x78] + ldr r3, [sp, #0x7c] + bl _dsub + mov r3, r1 + mov r2, r0 + ldr r1, _020E7638 ; =0x3FF00000 + mov r0, #0x0 + bl _dsub + add r3, r1, r4, lsl #0x14 + mov r2, r3, asr #0x14 + str r0, [sp, #0x78] + cmp r2, #0x0 + str r1, [sp, #0x7c] + addgt r0, sp, #0x78 + strgt r3, [r0, #0x4] + bgt _020E81F0 + mov r2, r4 + bl scalbn + str r0, [sp, #0x78] + str r1, [sp, #0x7c] +_020E81F0: + ldr r2, [sp, #0x78] + ldr r3, [sp, #0x7c] + mov r0, r6 + mov r1, r5 + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start copysign +copysign: ; 0x020E8214 + stmdb sp!, {r0-r3} + ldr r1, [sp, #0x4] + ldr r0, [sp, #0xc] + bic r1, r1, #0x80000000 + and r0, r0, #0x80000000 + orr r1, r1, r0 + ldr r0, [sp, #0x0] + str r1, [sp, #0x4] + add sp, sp, #0x10 + bx lr + + arm_func_start fabs +fabs: ; 0x020E823C + stmdb sp!, {r0-r3} + add r2, sp, #0x0 + ldr r1, [r2, #0x4] + ldr r0, [sp, #0x0] + bic r1, r1, #0x80000000 + str r1, [r2, #0x4] + add sp, sp, #0x10 + bx lr + + arm_func_start frexp +frexp: ; 0x020E825C + stmdb sp!, {r0-r3} + stmdb sp!, {r4,lr} + ldr r1, [sp, #0xc] + ldr r0, _020E8308 ; =0x7FF00000 + mov r4, r2 + bic r3, r1, #0x80000000 + mov r2, #0x0 + str r2, [r4, #0x0] + cmp r3, r0 + ldr r0, [sp, #0x8] + bge _020E8290 + orrs r0, r3, r0 + bne _020E82A4 +_020E8290: + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E82A4: + cmp r3, #0x100000 + bge _020E82D0 + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + ldr r3, _020E830C ; =0x43500000 + bl _dmul + mvn r2, #0x35 + str r0, [sp, #0x8] + str r1, [sp, #0xc] + str r2, [r4, #0x0] + bic r3, r1, #0x80000000 +_020E82D0: + ldr r2, _020E8310 ; =0x800FFFFF + ldr r0, _020E8314 ; =0xFFFFFC02 + and r1, r1, r2 + orr r1, r1, #0xfe00000 + orr r1, r1, #0x30000000 + ldr r2, [r4, #0x0] + add r0, r0, r3, asr #0x14 + add r2, r2, r0 + ldr r0, [sp, #0x8] + str r2, [r4, #0x0] + str r1, [sp, #0xc] + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E8308: .word 0x7FF00000 +_020E830C: .word 0x43500000 +_020E8310: .word 0x800FFFFF +_020E8314: .word 0xFFFFFC02 + + arm_func_start ldexp +ldexp: ; 0x020E8318 + stmdb sp!, {r0-r3} + stmdb sp!, {r4,lr} + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + mov r4, r2 + bl __fpclassifyf + cmp r0, #0x2 + ble _020E8350 + mov r0, #0x0 + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + mov r1, r0 + bl _deq + bne _020E8364 +_020E8350: + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E8364: + ldr r3, [sp, #0xc] + ldr r0, _020E8538 ; =0x7FF00000 + ldr r1, [sp, #0x8] + and r0, r3, r0 + movs r12, r0, asr #0x14 + bne _020E83F0 + bic r0, r3, #0x80000000 + orrs r0, r1, r0 + ldreq r0, [sp, #0x8] + ldreq r1, [sp, #0xc] + ldmeqia sp!, {r4,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + ldr r3, _020E853C ; =0x43500000 + mov r2, #0x0 + bl _dmul + mov r3, r1 + ldr r1, _020E8538 ; =0x7FF00000 + ldr ip, _020E8540 ; =0xFFFF3CB0 + and r1, r3, r1 + mov r2, r0 + mov r0, r1, asr #0x14 + str r2, [sp, #0x8] + str r3, [sp, #0xc] + cmp r4, r12 + sub r12, r0, #0x36 + bge _020E83F0 + ldr r0, _020E8544 ; =0xC2F8F359 + ldr r1, _020E8548 ; =0x01A56E1F + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E83F0: + ldr r0, _020E854C ; =0x000007FF + cmp r12, r0 + bne _020E841C + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + mov r2, r0 + mov r3, r1 + bl _dadd + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E841C: + add r2, r12, r4 + sub r0, r0, #0x1 + cmp r2, r0 + ble _020E8460 + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + ldr r0, _020E8550 ; =0x8800759C + ldr r1, _020E8554 ; =0x7E37E43C + bl copysign + mov r2, r0 + mov r3, r1 + ldr r0, _020E8550 ; =0x8800759C + ldr r1, _020E8554 ; =0x7E37E43C + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E8460: + cmp r2, #0x0 + ble _020E8488 + ldr r1, _020E8558 ; =0x800FFFFF + ldr r0, [sp, #0x8] + and r1, r3, r1 + orr r1, r1, r2, lsl #0x14 + str r1, [sp, #0xc] + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E8488: + mvn r0, #0x35 + cmp r2, r0 + bgt _020E8508 + ldr r0, _020E855C ; =0x0000C350 + cmp r4, r0 + ble _020E84D4 + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + ldr r0, _020E8550 ; =0x8800759C + ldr r1, _020E8554 ; =0x7E37E43C + bl copysign + mov r2, r0 + mov r3, r1 + ldr r0, _020E8550 ; =0x8800759C + ldr r1, _020E8554 ; =0x7E37E43C + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E84D4: + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + ldr r0, _020E8544 ; =0xC2F8F359 + ldr r1, _020E8548 ; =0x01A56E1F + bl copysign + mov r2, r0 + mov r3, r1 + ldr r0, _020E8544 ; =0xC2F8F359 + ldr r1, _020E8548 ; =0x01A56E1F + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E8508: + ldr r0, _020E8558 ; =0x800FFFFF + add r1, r2, #0x36 + and r0, r3, r0 + orr r3, r0, r1, lsl #0x14 + ldr r2, [sp, #0x8] + ldr r1, _020E8560 ; =0x3C900000 + mov r0, #0x0 + str r3, [sp, #0xc] + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E8538: .word 0x7FF00000 +_020E853C: .word 0x43500000 +_020E8540: .word 0xFFFF3CB0 +_020E8544: .word 0xC2F8F359 +_020E8548: .word 0x01A56E1F +_020E854C: .word 0x000007FF +_020E8550: .word 0x8800759C +_020E8554: .word 0x7E37E43C +_020E8558: .word 0x800FFFFF +_020E855C: .word 0x0000C350 +_020E8560: .word 0x3C900000 + + arm_func_start pow +pow: ; 0x020E8564 + ldr ip, _020E856C ; =__ieee754_pow + bx r12 + .balign 4 +_020E856C: .word __ieee754_pow + + arm_func_start __must_round +__must_round: ; 0x020E8570 + add r3, r0, #0x5 + ldrb r2, [r3, r1] + add r12, r3, r1 + cmp r2, #0x5 + movhi r0, #0x1 + bxhi lr + mvncc r0, #0x0 + bxcc lr + ldrb r2, [r0, #0x4] + add r12, r12, #0x1 + add r3, r3, r2 + cmp r12, r3 + bhs _020E85C0 +_020E85A4: + ldrb r2, [r12, #0x0] + cmp r2, #0x0 + movne r0, #0x1 + bxne lr + add r12, r12, #0x1 + cmp r12, r3 + blo _020E85A4 +_020E85C0: + sub r1, r1, #0x1 + add r0, r0, r1 + ldrb r0, [r0, #0x5] + tst r0, #0x1 + movne r0, #0x1 + mvneq r0, #0x0 + bx lr + + arm_func_start __dorounddecup +__dorounddecup: ; 0x020E85DC + add r3, r0, #0x5 + add r1, r3, r1 + sub r12, r1, #0x1 + mov r1, #0x0 +_020E85EC: + ldrb r2, [r12, #0x0] + cmp r2, #0x9 + addcc r0, r2, #0x1 + strccb r0, [r12, #0x0] + bxcc lr + cmp r12, r3 + bne _020E8620 + mov r1, #0x1 + strb r1, [r12, #0x0] + ldrsh r1, [r0, #0x2] + add r1, r1, #0x1 + strh r1, [r0, #0x2] + bx lr +_020E8620: + strb r1, [r12], #-0x1 + b _020E85EC +_020E8628: + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start __rounddec +__rounddec: ; 0x020E862C + stmdb sp!, {r3-r5,lr} + mov r4, r1 + mov r5, r0 + cmp r4, #0x0 + ldmleia sp!, {r3-r5,pc} +_020E8640: + .byte 0x04, 0x20, 0xD5, 0xE5, 0x02, 0x00, 0x54, 0xE1, 0x38, 0x80, 0xBD, 0xA8, 0xC7, 0xFF, 0xFF, 0xEB + .byte 0x04, 0x40, 0xC5, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x38, 0x80, 0xBD, 0xB8, 0x05, 0x00, 0xA0, 0xE1 + .byte 0x04, 0x10, 0xA0, 0xE1, 0xDC, 0xFF, 0xFF, 0xEB, 0x38, 0x80, 0xBD, 0xE8 + + arm_func_start __ull2dec +__ull2dec: ; 0x020E866C + stmdb sp!, {r3-r11,lr} + mov r10, r0 + mov r0, #0x0 + mov r8, r2 + strb r0, [r10, #0x0] + mov r9, r1 + cmp r8, #0x0 + strb r0, [r10, #0x4] + cmpeq r9, #0x0 + beq _020E86F8 + mov r6, #0xa + mov r11, r0 + mov r5, r0 + mov r4, r0 +_020E86A4: + ldrb r1, [r10, #0x4] + mov r0, r9 + mov r2, r6 + add r3, r1, #0x1 + mov r7, r1 + strb r3, [r10, #0x4] + mov r1, r8 + mov r3, r11 + bl _ull_mod + add r1, r10, r7 + strb r0, [r1, #0x5] + mov r0, r9 + mov r1, r8 + mov r2, #0xa + mov r3, #0x0 + bl _ll_udiv + mov r8, r1 + mov r9, r0 + cmp r8, r5 + cmpeq r9, r4 + bne _020E86A4 +_020E86F8: + ldrb r0, [r10, #0x4] + add r2, r10, #0x5 + add r0, r2, r0 + sub r3, r0, #0x1 + cmp r2, r3 + bhs _020E8728 +_020E8710: + ldrb r0, [r3, #0x0] + ldrb r1, [r2, #0x0] + strb r0, [r2], #0x1 + strb r1, [r3], #-0x1 + cmp r2, r3 + blo _020E8710 +_020E8728: + ldrb r0, [r10, #0x4] + sub r0, r0, #0x1 + strh r0, [r10, #0x2] + ldmia sp!, {r3-r11,pc} + + arm_func_start __timesdec +__timesdec: ; 0x020E8738 + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x40 + ldrb r6, [r1, #0x4] + ldrb r5, [r2, #0x4] + mov r4, #0x0 + add r3, sp, #0x0 + add r5, r6, r5 + sub r5, r5, #0x1 + add r3, r3, r5 + add r6, r3, #0x1 + mov r7, r6 + strb r4, [r0, #0x0] + cmp r5, #0x0 + ble _020E8800 + add lr, r1, #0x5 + add r11, r2, #0x5 +_020E8778: + ldrb r3, [r2, #0x4] + sub r10, r3, #0x1 + sub r3, r5, r10 + subs r9, r3, #0x1 + ldrb r3, [r1, #0x4] + movmi r9, #0x0 + submi r10, r5, #0x1 + add r8, r10, #0x1 + sub r3, r3, r9 + cmp r8, r3 + movgt r8, r3 + add r10, r11, r10 + add r9, lr, r9 + cmp r8, #0x0 + ble _020E87CC +_020E87B4: + ldrb r12, [r9], #0x1 + ldrb r3, [r10], #-0x1 + sub r8, r8, #0x1 + cmp r8, #0x0 + mla r4, r12, r3, r4 + bgt _020E87B4 +_020E87CC: + ldr r3, _020E88B8 ; =0xCCCCCCCD + sub r5, r5, #0x1 + umull r8, r9, r4, r3 + mov r9, r9, lsr #0x3 + cmp r5, #0x0 + mov r10, #0xa + umull r8, r9, r10, r9 + sub r9, r4, r8 + strb r9, [r6, #-0x1]! + mov r8, r4 + umull r3, r4, r8, r3 + mov r4, r4, lsr #0x3 + bgt _020E8778 +_020E8800: + ldrsh r3, [r1, #0x2] + ldrsh r1, [r2, #0x2] + cmp r4, #0x0 + add r1, r3, r1 + strh r1, [r0, #0x2] + beq _020E8828 + strb r4, [r6, #-0x1]! + ldrsh r1, [r0, #0x2] + add r1, r1, #0x1 + strh r1, [r0, #0x2] +_020E8828: + mov r3, #0x0 + b _020E8840 +_020E8830: + ldrb r2, [r6], #0x1 + add r1, r0, r3 + add r3, r3, #0x1 + strb r2, [r1, #0x5] +_020E8840: + cmp r3, #0x20 + bge _020E8850 + cmp r6, r7 + blo _020E8830 +_020E8850: + cmp r6, r7 + addcs sp, sp, #0x40 + strb r3, [r0, #0x4] + ldmcsia sp!, {r3-r11,pc} +_020E8860: + .byte 0x00, 0x10, 0xD6, 0xE5, 0x05, 0x00, 0x51, 0xE3, 0x40, 0xD0, 0x8D, 0x32, 0xF8, 0x8F, 0xBD, 0x38 + .byte 0x0C, 0x00, 0x00, 0x1A, 0x01, 0x20, 0x86, 0xE2, 0x07, 0x00, 0x52, 0xE1, 0x05, 0x00, 0x00, 0x2A + .byte 0x00, 0x10, 0xD2, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x01, 0x20, 0x82, 0xE2 + .byte 0x07, 0x00, 0x52, 0xE1, 0xF9, 0xFF, 0xFF, 0x3A, 0x01, 0x10, 0x56, 0xE5, 0x01, 0x00, 0x11, 0xE3 + .byte 0x40, 0xD0, 0x8D, 0x02, 0xF8, 0x8F, 0xBD, 0x08, 0x04, 0x10, 0xD0, 0xE5, 0x4A, 0xFF, 0xFF, 0xEB + .byte 0x40, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 +_020E88B8: .word 0xCCCCCCCD + + arm_func_start __str2dec +__str2dec: ; 0x020E88BC + stmdb sp!, {r3,lr} + strh r2, [r0, #0x2] + mov r12, #0x0 + strb r12, [r0, #0x0] + b _020E88E4 +_020E88D0: + ldrsb r3, [r1], #0x1 + add r2, r0, r12 + add r12, r12, #0x1 + sub r3, r3, #0x30 + strb r3, [r2, #0x5] +_020E88E4: + cmp r12, #0x20 + bge _020E88F8 + ldrsb r2, [r1, #0x0] + cmp r2, #0x0 + bne _020E88D0 +_020E88F8: + strb r12, [r0, #0x4] + ldrsb r2, [r1, #0x0] + cmp r2, #0x0 + ldmeqia sp!, {r3,pc} +_020E8908: + .byte 0x05, 0x00, 0x52, 0xE3, 0x08, 0x80, 0xBD, 0xB8 + .byte 0x0D, 0x00, 0x00, 0xCA, 0xD1, 0x20, 0xD1, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x00, 0x00, 0x52, 0xE3 + .byte 0x04, 0x00, 0x00, 0x0A, 0x30, 0x00, 0x52, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0xD1, 0x20, 0xF1, 0xE1 + .byte 0x00, 0x00, 0x52, 0xE3, 0xFA, 0xFF, 0xFF, 0x1A, 0x01, 0x10, 0x4C, 0xE2, 0x01, 0x10, 0x80, 0xE0 + .byte 0x05, 0x10, 0xD1, 0xE5, 0x01, 0x00, 0x11, 0xE3, 0x08, 0x80, 0xBD, 0x08, 0x04, 0x10, 0xD0, 0xE5 + .byte 0x21, 0xFF, 0xFF, 0xEB, 0x08, 0x80, 0xBD, 0xE8 + + arm_func_start __two_exp +__two_exp: ; 0x020E8958 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4c + mov r4, r1 + mvn r2, #0x34 + mov r5, r0 + cmp r4, r2 + bgt _020E8988 + bge _020E8A54 + sub r0, r2, #0xb + cmp r4, r0 + beq _020E8A3C + b _020E8BE4 +_020E8988: + add r1, r4, #0x20 + cmp r1, #0x28 + addls pc, pc, r1, lsl #0x2 + b _020E8BE4 +_020E8998: + .byte 0x32, 0x00, 0x00, 0xEA, 0x90, 0x00, 0x00, 0xEA + .byte 0x8F, 0x00, 0x00, 0xEA, 0x8E, 0x00, 0x00, 0xEA, 0x8D, 0x00, 0x00, 0xEA, 0x8C, 0x00, 0x00, 0xEA + .byte 0x8B, 0x00, 0x00, 0xEA, 0x8A, 0x00, 0x00, 0xEA, 0x89, 0x00, 0x00, 0xEA, 0x88, 0x00, 0x00, 0xEA + .byte 0x87, 0x00, 0x00, 0xEA, 0x86, 0x00, 0x00, 0xEA, 0x85, 0x00, 0x00, 0xEA, 0x84, 0x00, 0x00, 0xEA + .byte 0x83, 0x00, 0x00, 0xEA, 0x82, 0x00, 0x00, 0xEA, 0x27, 0x00, 0x00, 0xEA, 0x80, 0x00, 0x00, 0xEA + .byte 0x7F, 0x00, 0x00, 0xEA, 0x7E, 0x00, 0x00, 0xEA, 0x7D, 0x00, 0x00, 0xEA, 0x7C, 0x00, 0x00, 0xEA + .byte 0x7B, 0x00, 0x00, 0xEA, 0x7A, 0x00, 0x00, 0xEA, 0x24, 0x00, 0x00, 0xEA, 0x28, 0x00, 0x00, 0xEA + .byte 0x2C, 0x00, 0x00, 0xEA, 0x30, 0x00, 0x00, 0xEA, 0x34, 0x00, 0x00, 0xEA, 0x38, 0x00, 0x00, 0xEA + .byte 0x3C, 0x00, 0x00, 0xEA, 0x40, 0x00, 0x00, 0xEA, 0x44, 0x00, 0x00, 0xEA, 0x48, 0x00, 0x00, 0xEA + .byte 0x4C, 0x00, 0x00, 0xEA, 0x50, 0x00, 0x00, 0xEA, 0x54, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x00, 0xEA + .byte 0x5C, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, 0xEA, 0x64, 0x00, 0x00, 0xEA +_020E8A3C: + ldr r1, _020E8C88 ; =0x02106E88 + mov r0, r5 + mvn r2, #0x13 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8A54: + ldr r1, _020E8C8C ; =0x02106EB8 + add r2, r2, #0x25 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8A68: + .byte 0x20, 0x12, 0x9F, 0xE5, 0x2B, 0x20, 0x82, 0xE2 + .byte 0x91, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x10, 0x12, 0x9F, 0xE5 + .byte 0x30, 0x20, 0x82, 0xE2, 0x8C, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 + .byte 0x00, 0x12, 0x9F, 0xE5, 0x32, 0x20, 0x82, 0xE2, 0x87, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 + .byte 0x30, 0x80, 0xBD, 0xE8, 0xF0, 0x11, 0x9F, 0xE5, 0x32, 0x20, 0x82, 0xE2, 0x82, 0xFF, 0xFF, 0xEB + .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0xE0, 0x11, 0x9F, 0xE5, 0x33, 0x20, 0x82, 0xE2 + .byte 0x7D, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0xD0, 0x11, 0x9F, 0xE5 + .byte 0x33, 0x20, 0x82, 0xE2, 0x78, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 + .byte 0xC0, 0x11, 0x9F, 0xE5, 0x33, 0x20, 0x82, 0xE2, 0x73, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 + .byte 0x30, 0x80, 0xBD, 0xE8, 0xB0, 0x11, 0x9F, 0xE5, 0x34, 0x20, 0x82, 0xE2, 0x6E, 0xFF, 0xFF, 0xEB + .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0xA0, 0x11, 0x9F, 0xE5, 0x34, 0x20, 0x82, 0xE2 + .byte 0x69, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x90, 0x11, 0x9F, 0xE5 + .byte 0x34, 0x20, 0x82, 0xE2, 0x64, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 + .byte 0x80, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x5F, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 + .byte 0x30, 0x80, 0xBD, 0xE8, 0x70, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x5A, 0xFF, 0xFF, 0xEB + .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x60, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3 + .byte 0x55, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x50, 0x11, 0x9F, 0xE5 + .byte 0x00, 0x20, 0xA0, 0xE3, 0x50, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 + .byte 0x40, 0x11, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x4B, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 + .byte 0x30, 0x80, 0xBD, 0xE8, 0x30, 0x11, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x46, 0xFF, 0xFF, 0xEB + .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x20, 0x11, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3 + .byte 0x41, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x10, 0x11, 0x9F, 0xE5 + .byte 0x02, 0x20, 0xA0, 0xE3, 0x3C, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 + .byte 0x00, 0x11, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3, 0x37, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 + .byte 0x30, 0x80, 0xBD, 0xE8 +_020E8BE4: + and r0, r4, #0x80000000 + add r1, r4, r0, lsr #0x1f + add r0, sp, #0x26 + mov r1, r1, asr #0x1 + bl __two_exp + add r1, sp, #0x26 + mov r0, r5 + mov r2, r1 + bl __timesdec + tst r4, #0x1 + addeq sp, sp, #0x4c + ldmeqia sp!, {r4-r5,pc} +_020E8C14: + .byte 0x00, 0x30, 0x8D, 0xE2, 0x05, 0xC0, 0xA0, 0xE1, 0x09, 0x20, 0xA0, 0xE3 + .byte 0xB0, 0x10, 0xDC, 0xE1, 0xB2, 0x00, 0xDC, 0xE1, 0x04, 0xC0, 0x8C, 0xE2, 0x01, 0x20, 0x52, 0xE2 + .byte 0xB0, 0x10, 0xC3, 0xE1, 0xB2, 0x00, 0xC3, 0xE1, 0x04, 0x30, 0x83, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A + .byte 0xB0, 0x00, 0xDC, 0xE1, 0x00, 0x00, 0x54, 0xE3, 0xB0, 0x00, 0xC3, 0xE1, 0x26, 0x00, 0x8D, 0xE2 + .byte 0x03, 0x00, 0x00, 0xDA, 0x60, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x16, 0xFF, 0xFF, 0xEB + .byte 0x02, 0x00, 0x00, 0xEA, 0x48, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xE0, 0xE3, 0x12, 0xFF, 0xFF, 0xEB + .byte 0x00, 0x10, 0x8D, 0xE2, 0x26, 0x20, 0x8D, 0xE2, 0x05, 0x00, 0xA0, 0xE1, 0xAD, 0xFE, 0xFF, 0xEB + .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 +_020E8C88: .word 0x02106E88 +_020E8C8C: .word 0x02106EB8 +_020E8C90: + .byte 0xE0, 0x6E, 0x10, 0x02, 0xF8, 0x6E, 0x10, 0x02, 0x08, 0x6F, 0x10, 0x02, 0x10, 0x6F, 0x10, 0x02 + .byte 0x18, 0x6F, 0x10, 0x02, 0x20, 0x6F, 0x10, 0x02, 0x28, 0x6F, 0x10, 0x02, 0x2C, 0x6F, 0x10, 0x02 + .byte 0x30, 0x6F, 0x10, 0x02, 0x34, 0x6F, 0x10, 0x02, 0x38, 0x6F, 0x10, 0x02, 0x3C, 0x6F, 0x10, 0x02 + .byte 0x40, 0x6F, 0x10, 0x02, 0x44, 0x6F, 0x10, 0x02, 0x48, 0x6F, 0x10, 0x02, 0x4C, 0x6F, 0x10, 0x02 + .byte 0x50, 0x6F, 0x10, 0x02, 0x54, 0x6F, 0x10, 0x02, 0x58, 0x6F, 0x10, 0x02 + + arm_func_start __equals_dec +__equals_dec: ; 0x020E8CDC + stmdb sp!, {r4,lr} + ldrb r3, [r0, #0x5] + cmp r3, #0x0 + bne _020E8D00 + ldrb r0, [r1, #0x5] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4,pc} +_020E8D00: + ldrb r2, [r1, #0x5] + cmp r2, #0x0 + bne _020E8D1C + cmp r3, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4,pc} +_020E8D1C: + ldrsh r3, [r0, #0x2] + ldrsh r2, [r1, #0x2] + cmp r3, r2 + bne _020E8DB4 + ldrb r4, [r0, #0x4] + ldrb r2, [r1, #0x4] + mov r12, #0x0 + mov lr, r4 + cmp r4, r2 + movgt lr, r2 + cmp lr, #0x0 + ble _020E8D74 + add r3, r0, r12 + add r2, r1, r12 + ldrb r3, [r3, #0x5] + ldrb r2, [r2, #0x5] + cmp r3, r2 + movne r0, #0x0 + ldmneia sp!, {r4,pc} +_020E8D68: + .byte 0x01, 0xC0, 0x8C, 0xE2, 0x0E, 0x00, 0x5C, 0xE1 + .byte 0xF5, 0xFF, 0xFF, 0xBA +_020E8D74: + cmp lr, r4 + moveq r0, r1 + ldrb r1, [r0, #0x4] + cmp r12, r1 + bge _020E8DAC + add r1, r0, r12 + ldrb r1, [r1, #0x5] + cmp r1, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,pc} +_020E8D9C: + .byte 0x04, 0x10, 0xD0, 0xE5 + .byte 0x01, 0xC0, 0x8C, 0xE2, 0x01, 0x00, 0x5C, 0xE1, 0xF6, 0xFF, 0xFF, 0xBA +_020E8DAC: + mov r0, #0x1 + ldmia sp!, {r4,pc} +_020E8DB4: + mov r0, #0x0 + ldmia sp!, {r4,pc} +__less_dec: + stmdb sp!, {r3-r5,lr} + ldrb r2, [r0, #0x5] + cmp r2, #0x0 + bne _020E8DE0 + ldrb r0, [r1, #0x5] + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E8DE0: + ldrb r2, [r1, #0x5] + cmp r2, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020E8DF0: + .byte 0xF2, 0x30, 0xD1, 0xE1, 0xF2, 0x20, 0xD0, 0xE1, 0x03, 0x00, 0x52, 0xE1, 0x23, 0x00, 0x00, 0x1A + .byte 0x04, 0x50, 0xD0, 0xE5, 0x04, 0x40, 0xD1, 0xE5, 0x00, 0xC0, 0xA0, 0xE3, 0x05, 0xE0, 0xA0, 0xE1 + .byte 0x04, 0x00, 0x55, 0xE1, 0x04, 0xE0, 0xA0, 0xC1, 0x00, 0x00, 0x5E, 0xE3, 0x0C, 0x00, 0x00, 0xDA + .byte 0x0C, 0x30, 0x81, 0xE0, 0x0C, 0x20, 0x80, 0xE0, 0x05, 0x30, 0xD3, 0xE5, 0x05, 0x20, 0xD2, 0xE5 + .byte 0x03, 0x00, 0x52, 0xE1, 0x01, 0x00, 0xA0, 0x33, 0x38, 0x80, 0xBD, 0x38, 0x02, 0x00, 0x53, 0xE1 + .byte 0x00, 0x00, 0xA0, 0x33, 0x38, 0x80, 0xBD, 0x38, 0x01, 0xC0, 0x8C, 0xE2, 0x0E, 0x00, 0x5C, 0xE1 + .byte 0xF2, 0xFF, 0xFF, 0xBA, 0x05, 0x00, 0x5E, 0xE1, 0x0A, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x5C, 0xE1 + .byte 0x08, 0x00, 0x00, 0xAA, 0x0C, 0x00, 0x81, 0xE0, 0x05, 0x00, 0xD0, 0xE5, 0x00, 0x00, 0x50, 0xE3 + .byte 0x01, 0x00, 0xA0, 0x13, 0x38, 0x80, 0xBD, 0x18, 0x04, 0x00, 0xD1, 0xE5, 0x01, 0xC0, 0x8C, 0xE2 + .byte 0x00, 0x00, 0x5C, 0xE1, 0xF6, 0xFF, 0xFF, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x38, 0x80, 0xBD, 0xE8 + .byte 0x01, 0x00, 0xA0, 0xB3, 0x00, 0x00, 0xA0, 0xA3, 0x38, 0x80, 0xBD, 0xE8 + + arm_func_start __minus_dec +__minus_dec: ; 0x020E8E9C + stmdb sp!, {r3-r7,lr} + mov r6, r0 + mov r5, #0x9 +_020E8EA8: + ldrh r4, [r1, #0x0] + ldrh r3, [r1, #0x2] + add r1, r1, #0x4 + subs r5, r5, #0x1 + strh r4, [r6, #0x0] + strh r3, [r6, #0x2] + add r6, r6, #0x4 + bne _020E8EA8 + ldrh r1, [r1, #0x0] + strh r1, [r6, #0x0] + ldrb r1, [r2, #0x5] + cmp r1, #0x0 + ldmeqia sp!, {r3-r7,pc} +_020E8EDC: + .byte 0x04, 0x70, 0xD0, 0xE5 + .byte 0x04, 0x30, 0xD2, 0xE5, 0xF2, 0x40, 0xD0, 0xE1, 0x07, 0x10, 0xA0, 0xE1, 0x03, 0x00, 0x57, 0xE1 + .byte 0x03, 0x10, 0xA0, 0xB1, 0xF2, 0x30, 0xD2, 0xE1, 0x03, 0x60, 0x44, 0xE0, 0x06, 0x10, 0x81, 0xE0 + .byte 0x20, 0x00, 0x51, 0xE3, 0x20, 0x10, 0xA0, 0xC3, 0x01, 0x00, 0x57, 0xE1, 0x08, 0x00, 0x00, 0xAA + .byte 0x00, 0x40, 0xA0, 0xE3, 0x04, 0x50, 0xD0, 0xE5, 0x07, 0x30, 0x80, 0xE0, 0x01, 0x50, 0x85, 0xE2 + .byte 0x04, 0x50, 0xC0, 0xE5, 0x05, 0x40, 0xC3, 0xE5, 0x04, 0x70, 0xD0, 0xE5, 0x01, 0x00, 0x57, 0xE1 + .byte 0xF7, 0xFF, 0xFF, 0xBA, 0x04, 0x40, 0xD2, 0xE5, 0x05, 0x30, 0x80, 0xE2, 0x01, 0xC0, 0x83, 0xE0 + .byte 0x06, 0x40, 0x84, 0xE0, 0x01, 0x00, 0x54, 0xE1, 0x04, 0xC0, 0x83, 0xB0, 0x03, 0x40, 0x4C, 0xE0 + .byte 0x05, 0x10, 0x82, 0xE2, 0x06, 0x40, 0x44, 0xE0, 0x04, 0xE0, 0x81, 0xE0, 0x0E, 0x40, 0xA0, 0xE1 + .byte 0x18, 0x00, 0x00, 0xEA, 0x01, 0x70, 0x7C, 0xE5, 0x01, 0x50, 0x7E, 0xE5, 0x05, 0x00, 0x57, 0xE1 + .byte 0x10, 0x00, 0x00, 0x2A, 0x01, 0x70, 0x5C, 0xE5, 0x01, 0x50, 0x4C, 0xE2, 0x00, 0x00, 0x57, 0xE3 + .byte 0x02, 0x00, 0x00, 0x1A, 0x01, 0x70, 0x75, 0xE5, 0x00, 0x00, 0x57, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A + .byte 0x0C, 0x00, 0x55, 0xE1, 0x07, 0x00, 0x00, 0x0A, 0x00, 0x70, 0xD5, 0xE5, 0x01, 0x70, 0x47, 0xE2 + .byte 0x00, 0x70, 0xC5, 0xE5, 0x01, 0x70, 0xF5, 0xE5, 0x0C, 0x00, 0x55, 0xE1, 0x0A, 0x70, 0x87, 0xE2 + .byte 0x00, 0x70, 0xC5, 0xE5, 0xF7, 0xFF, 0xFF, 0x1A, 0x00, 0x70, 0xDC, 0xE5, 0x00, 0x50, 0xDE, 0xE5 + .byte 0x05, 0x50, 0x47, 0xE0, 0x00, 0x50, 0xCC, 0xE5, 0x03, 0x00, 0x5C, 0xE1, 0x01, 0x00, 0x5E, 0x81 + .byte 0xE3, 0xFF, 0xFF, 0x8A, 0x04, 0x50, 0xD2, 0xE5, 0x01, 0xE0, 0x44, 0xE0, 0x05, 0x00, 0x5E, 0xE1 + .byte 0x2F, 0x00, 0x00, 0xAA, 0x00, 0x10, 0xD4, 0xE5, 0x00, 0x70, 0xA0, 0xE3, 0x05, 0x00, 0x51, 0xE3 + .byte 0x01, 0x70, 0xA0, 0x33, 0x11, 0x00, 0x00, 0x3A, 0x10, 0x00, 0x00, 0x1A, 0x05, 0x10, 0x82, 0xE2 + .byte 0x05, 0x20, 0x81, 0xE0, 0x01, 0x40, 0x84, 0xE2, 0x02, 0x00, 0x54, 0xE1, 0x05, 0x00, 0x00, 0x2A + .byte 0x00, 0x10, 0xD4, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x21, 0x00, 0x00, 0x1A, 0x01, 0x40, 0x84, 0xE2 + .byte 0x02, 0x00, 0x54, 0xE1, 0xF9, 0xFF, 0xFF, 0x3A, 0x0E, 0x10, 0x83, 0xE0, 0x06, 0x20, 0x81, 0xE0 + .byte 0x01, 0x10, 0x52, 0xE5, 0x01, 0xC0, 0x42, 0xE2, 0x01, 0x00, 0x11, 0xE3, 0x01, 0x70, 0xA0, 0x13 + .byte 0x00, 0x00, 0x57, 0xE3, 0x16, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xDC, 0xE5, 0x01, 0x00, 0x51, 0xE3 + .byte 0x10, 0x00, 0x00, 0x2A, 0x01, 0x10, 0x5C, 0xE5, 0x01, 0x20, 0x4C, 0xE2, 0x00, 0x00, 0x51, 0xE3 + .byte 0x02, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x72, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A + .byte 0x0C, 0x00, 0x52, 0xE1, 0x07, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xD2, 0xE5, 0x01, 0x10, 0x41, 0xE2 + .byte 0x00, 0x10, 0xC2, 0xE5, 0x01, 0x10, 0xF2, 0xE5, 0x0C, 0x00, 0x52, 0xE1, 0x0A, 0x10, 0x81, 0xE2 + .byte 0x00, 0x10, 0xC2, 0xE5, 0xF7, 0xFF, 0xFF, 0x1A, 0x00, 0x10, 0xDC, 0xE5, 0x01, 0x10, 0x41, 0xE2 + .byte 0x00, 0x10, 0xCC, 0xE5, 0x00, 0x10, 0xD3, 0xE5, 0x03, 0x50, 0xA0, 0xE1, 0x00, 0x00, 0x51, 0xE3 + .byte 0x02, 0x00, 0x00, 0x1A, 0x01, 0x10, 0xF5, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A + .byte 0x03, 0x00, 0x55, 0xE1, 0x0F, 0x00, 0x00, 0x9A, 0xF2, 0x10, 0xD0, 0xE1, 0x03, 0x20, 0x45, 0xE0 + .byte 0xFF, 0x40, 0x02, 0xE2, 0x04, 0x10, 0x41, 0xE0, 0xB2, 0x10, 0xC0, 0xE1, 0x04, 0x10, 0xD0, 0xE5 + .byte 0x01, 0x20, 0x83, 0xE0, 0x02, 0x00, 0x55, 0xE1, 0x03, 0x00, 0x00, 0x2A, 0x01, 0x10, 0xD5, 0xE4 + .byte 0x02, 0x00, 0x55, 0xE1, 0x01, 0x10, 0xC3, 0xE4, 0xFB, 0xFF, 0xFF, 0x3A, 0x04, 0x10, 0xD0, 0xE5 + .byte 0x04, 0x10, 0x41, 0xE0, 0x04, 0x10, 0xC0, 0xE5, 0x04, 0x10, 0xD0, 0xE5, 0x05, 0x20, 0x80, 0xE2 + .byte 0x01, 0x30, 0x82, 0xE0, 0x02, 0x00, 0x53, 0xE1, 0x04, 0x00, 0x00, 0x9A, 0x01, 0x10, 0x73, 0xE5 + .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x02, 0x00, 0x53, 0xE1, 0xFA, 0xFF, 0xFF, 0x8A + .byte 0x02, 0x10, 0x43, 0xE0, 0x01, 0x10, 0x81, 0xE2, 0x04, 0x10, 0xC0, 0xE5, 0xF8, 0x80, 0xBD, 0xE8 + + arm_func_start __num2dec_internal +__num2dec_internal: ; 0x020E9140 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x58 + mov r8, r1 + mov r6, r2 + mov r7, r0 + mov r0, r8 + mov r1, r6 + bl __signbitf +_020E9160: + .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x10, 0xA0, 0x13, 0x00, 0x10, 0xA0, 0x03, 0x01, 0x4C, 0xA0, 0xE1 + .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x06, 0x30, 0xA0, 0xE1 + .byte 0x44, 0x5C, 0xA0, 0xE1, 0xFC, 0x06, 0x00, 0xEB, 0x07, 0x00, 0x00, 0x1A, 0x00, 0x50, 0xC7, 0xE5 + .byte 0x00, 0x10, 0xA0, 0xE3, 0xB2, 0x10, 0xC7, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x04, 0x00, 0xC7, 0xE5 + .byte 0x58, 0xD0, 0x8D, 0xE2, 0x05, 0x10, 0xC7, 0xE5, 0xF0, 0x81, 0xBD, 0xE8, 0x08, 0x00, 0xA0, 0xE1 + .byte 0x06, 0x10, 0xA0, 0xE1, 0x1E, 0x02, 0x00, 0xEB, 0x02, 0x00, 0x50, 0xE3, 0x0D, 0x00, 0x00, 0xCA + .byte 0x00, 0x50, 0xC7, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC7, 0xE1, 0x01, 0x20, 0xA0, 0xE3 + .byte 0x08, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xC7, 0xE5, 0x14, 0x02, 0x00, 0xEB + .byte 0x01, 0x00, 0x50, 0xE3, 0x4E, 0x00, 0xA0, 0x03, 0x49, 0x00, 0xA0, 0x13, 0x58, 0xD0, 0x8D, 0xE2 + .byte 0x05, 0x00, 0xC7, 0xE5, 0xF0, 0x81, 0xBD, 0xE8, 0x00, 0x00, 0x55, 0xE3, 0x06, 0x00, 0x00, 0x0A + .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x06, 0x30, 0xA0, 0xE1 + .byte 0xED, 0x04, 0x00, 0xEB, 0x00, 0x80, 0xA0, 0xE1, 0x01, 0x60, 0xA0, 0xE1, 0x08, 0x20, 0x8D, 0xE2 + .byte 0x08, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x0B, 0xFC, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1 + .byte 0x01, 0x60, 0xA0, 0xE1, 0x00, 0xC0, 0x84, 0xE3, 0x00, 0x20, 0x7C, 0xE2, 0x01, 0x36, 0x86, 0xE3 + .byte 0x00, 0x10, 0xE3, 0xE2, 0x00, 0x00, 0xA0, 0xE3, 0x01, 0x30, 0x03, 0xE0, 0x01, 0x10, 0x40, 0xE2 + .byte 0x02, 0xC0, 0x0C, 0xE0, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x00, 0x9C, 0xE0, 0x02, 0x10, 0xA3, 0xE0 + .byte 0x00, 0x40, 0x8D, 0xE5, 0x04, 0x60, 0x8D, 0xE5, 0xC7, 0x01, 0x00, 0xEB, 0x35, 0x80, 0x60, 0xE2 + .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x8D, 0xE2, 0x08, 0x10, 0x41, 0xE0, 0xB5, 0xFD, 0xFF, 0xEB + .byte 0x04, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x21, 0xFC, 0xFF, 0xEB + .byte 0x45, 0x03, 0x00, 0xEB, 0x01, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x32, 0x00, 0x8D, 0xE2 + .byte 0xF1, 0xFC, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1, 0x32, 0x10, 0x8D, 0xE2, 0x0C, 0x20, 0x8D, 0xE2 + .byte 0x20, 0xFD, 0xFF, 0xEB, 0x00, 0x50, 0xC7, 0xE5, 0x58, 0xD0, 0x8D, 0xE2, 0xF0, 0x81, 0xBD, 0xE8 + + arm_func_start __num2dec_internal2 +__num2dec_internal2: ; 0x020E92C0 + stmdb sp!, {r3-r5,lr} + mov r4, r3 + ldrsh r5, [r0, #0x2] + mov r0, r4 + bl __num2dec_internal + ldrb r0, [r4, #0x5] + cmp r0, #0x9 + ldmhiia sp!, {r3-r5,pc} +_020E92E0: + .byte 0x20, 0x00, 0x55, 0xE3, 0x20, 0x50, 0xA0, 0xC3, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1 + .byte 0xCD, 0xFC, 0xFF, 0xEB, 0x04, 0x00, 0xD4, 0xE5, 0x05, 0x00, 0x50, 0xE1, 0x08, 0x00, 0x00, 0xAA + .byte 0x00, 0x10, 0xA0, 0xE3, 0x04, 0x20, 0xD4, 0xE5, 0x00, 0x00, 0x84, 0xE0, 0x01, 0x20, 0x82, 0xE2 + .byte 0x04, 0x20, 0xC4, 0xE5, 0x05, 0x10, 0xC0, 0xE5, 0x04, 0x00, 0xD4, 0xE5, 0x05, 0x00, 0x50, 0xE1 + .byte 0xF7, 0xFF, 0xFF, 0xBA, 0xF2, 0x10, 0xD4, 0xE1, 0x01, 0x00, 0x40, 0xE2, 0x00, 0x20, 0xA0, 0xE3 + .byte 0x00, 0x00, 0x41, 0xE0, 0xB2, 0x00, 0xC4, 0xE1, 0x04, 0x00, 0xD4, 0xE5, 0x00, 0x00, 0x50, 0xE3 + .byte 0x38, 0x80, 0xBD, 0xD8, 0x02, 0x10, 0x84, 0xE0, 0x05, 0x00, 0xD1, 0xE5, 0x01, 0x20, 0x82, 0xE2 + .byte 0x30, 0x00, 0x80, 0xE2, 0x05, 0x00, 0xC1, 0xE5, 0x04, 0x00, 0xD4, 0xE5, 0x00, 0x00, 0x52, 0xE1 + .byte 0xF7, 0xFF, 0xFF, 0xBA, 0x38, 0x80, 0xBD, 0xE8 + + arm_func_start __dec2num +__dec2num: ; 0x020E9368 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xfc + mov r4, r0 + ldrb r0, [r4, #0x4] + cmp r0, #0x0 + bne _020E93A8 + ldrsb r0, [r4, #0x0] + mov r2, #0x0 + cmp r0, #0x0 + ldreq r3, _020E996C ; =0x3FF00000 + mov r0, #0x0 + ldrne r3, _020E9970 ; =0xBFF00000 + mov r1, r0 + bl copysign + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E93A8: + ldrb r0, [r4, #0x5] + cmp r0, #0x30 + beq _020E93C8 + cmp r0, #0x49 + beq _020E93F0 + cmp r0, #0x4e + beq _020E9424 + b _020E946C +_020E93C8: + ldrsb r0, [r4, #0x0] + mov r2, #0x0 + cmp r0, #0x0 + ldreq r3, _020E996C ; =0x3FF00000 + mov r0, #0x0 + ldrne r3, _020E9970 ; =0xBFF00000 + mov r1, r0 + bl copysign + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E93F0: + ldrsb r0, [r4, #0x0] + mov r5, #0x0 + cmp r0, #0x0 + ldreq r4, _020E996C ; =0x3FF00000 + ldr r0, _020E9974 ; =0x02106B74 + ldrne r4, _020E9970 ; =0xBFF00000 + ldr r0, [r0, #0x0] + bl _f2d + mov r2, r5 + mov r3, r4 + bl copysign + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E9424: + ldr r1, _020E9978 ; =0x7FF00000 + add r3, sp, #0x10 + mov r2, #0x0 + str r2, [r3, #0x0] + str r1, [r3, #0x4] + ldrsb r0, [r4, #0x0] + cmp r0, #0x0 + beq _020E9454 + orr r0, r1, #0x80000000 + orr r1, r2, r2 + str r1, [r3, #0x0] + str r0, [r3, #0x4] +_020E9454: + ldmia r3, {r0-r1} + orr r0, r0, #0x0 + orr r1, r1, #0x80000 + stmia r3, {r0-r1} + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E946C: + add r3, sp, #0xd6 + mov r5, r4 + mov r2, #0x9 +_020E9478: + ldrh r1, [r5, #0x0] + ldrh r0, [r5, #0x2] + add r5, r5, #0x4 + subs r2, r2, #0x1 + strh r1, [r3, #0x0] + strh r0, [r3, #0x2] + add r3, r3, #0x4 + bne _020E9478 + ldrh r0, [r5, #0x0] + add r1, sp, #0xdb + strh r0, [r3, #0x0] + ldrb r0, [sp, #0xda] + add r5, r1, r0 + cmp r1, r5 + bhs _020E94C8 +_020E94B4: + ldrb r0, [r1, #0x0] + sub r0, r0, #0x30 + strb r0, [r1], #0x1 + cmp r1, r5 + blo _020E94B4 +_020E94C8: + ldrb r1, [sp, #0xda] + ldrsh r2, [sp, #0xd8] + add r0, sp, #0xb0 + sub r1, r1, #0x1 + add r1, r2, r1 + strh r1, [sp, #0xd8] + ldr r1, _020E997C ; =0x02106F5C + mov r2, #0x134 + ldrsh r11, [sp, #0xd8] + bl __str2dec + add r0, sp, #0xb0 + add r1, sp, #0xd6 + bl __less_dec +_020E94FC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x0C, 0x00, 0x00, 0x0A, 0xD0, 0x00, 0xD4, 0xE1, 0x00, 0x50, 0xA0, 0xE3, 0x00, 0x00, 0x50, 0xE3 + .byte 0x54, 0x44, 0x9F, 0x05, 0x58, 0x04, 0x9F, 0xE5, 0x50, 0x44, 0x9F, 0x15, 0x00, 0x00, 0x90, 0xE5 + .byte 0xC5, 0x07, 0x00, 0xEB, 0x05, 0x20, 0xA0, 0xE1, 0x04, 0x30, 0xA0, 0xE1, 0x38, 0xFB, 0xFF, 0xEB + .byte 0xFC, 0xD0, 0x8D, 0xE2, 0xF0, 0x8F, 0xBD, 0xE8, 0xDB, 0x10, 0x8D, 0xE2, 0x00, 0x00, 0xD1, 0xE5 + .byte 0x01, 0x80, 0x81, 0xE2, 0xCB, 0x02, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5 + .byte 0x05, 0x00, 0x58, 0xE1, 0x2D, 0x00, 0x00, 0x2A, 0x08, 0x00, 0x45, 0xE0, 0xA0, 0x1F, 0xA0, 0xE1 + .byte 0x80, 0x0E, 0x61, 0xE0, 0xE0, 0x7E, 0x91, 0xE0, 0x08, 0x70, 0xA0, 0x03, 0x00, 0x60, 0xA0, 0xE3 + .byte 0x00, 0x20, 0xA0, 0xE3, 0x00, 0x00, 0x57, 0xE3, 0x05, 0x00, 0x00, 0xDA, 0x0A, 0x00, 0xA0, 0xE3 + .byte 0x01, 0x10, 0xD8, 0xE4, 0x01, 0x20, 0x82, 0xE2, 0x07, 0x00, 0x52, 0xE1, 0x90, 0x16, 0x26, 0xE0 + .byte 0xFA, 0xFF, 0xFF, 0xBA, 0xE4, 0x03, 0x9F, 0xE5, 0x0C, 0x10, 0x9D, 0xE5, 0x87, 0x31, 0x80, 0xE0 + .byte 0x08, 0x20, 0x13, 0xE5, 0x08, 0x00, 0x9D, 0xE5, 0x04, 0x30, 0x13, 0xE5, 0xC0, 0x02, 0x00, 0xEB + .byte 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x90, 0xA0, 0xE1, 0x06, 0x00, 0xA0, 0xE1, 0xAD, 0x02, 0x00, 0xEB + .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1 + .byte 0x5B, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x56, 0xE3, 0x00, 0x60, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1 + .byte 0x05, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1 + .byte 0x0A, 0x30, 0xA0, 0xE1, 0xE0, 0x05, 0x00, 0xEB, 0x04, 0x00, 0x00, 0x0A, 0x08, 0x60, 0x8D, 0xE5 + .byte 0x0C, 0xA0, 0x8D, 0xE5, 0x05, 0x00, 0x58, 0xE1, 0x07, 0xB0, 0x4B, 0xE0, 0xD1, 0xFF, 0xFF, 0x3A + .byte 0x00, 0x00, 0x5B, 0xE3, 0x0E, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x6B, 0xE2, 0x85, 0x02, 0x00, 0xEB + .byte 0x01, 0x30, 0xA0, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x54, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3 + .byte 0xCB, 0xFB, 0xFF, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x08, 0x00, 0x9D, 0xE5 + .byte 0x0C, 0x10, 0x9D, 0xE5, 0x8F, 0x0A, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5 + .byte 0x0D, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0xA0, 0xE1, 0x76, 0x02, 0x00, 0xEB, 0x01, 0x30, 0xA0, 0xE1 + .byte 0x00, 0x20, 0xA0, 0xE1, 0x18, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0xBC, 0xFB, 0xFF, 0xEB + .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x08, 0x00, 0x9D, 0xE5, 0x0C, 0x10, 0x9D, 0xE5 + .byte 0x8B, 0x02, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5, 0x08, 0x00, 0x9D, 0xE5 + .byte 0x0C, 0x10, 0x9D, 0xE5, 0x0B, 0x20, 0xA0, 0xE1, 0x1E, 0xFB, 0xFF, 0xEB, 0x08, 0x00, 0x8D, 0xE5 + .byte 0x0C, 0x10, 0x8D, 0xE5, 0xE2, 0x00, 0x00, 0xEB, 0x02, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A + .byte 0xD0, 0x02, 0x9F, 0xE5, 0x00, 0x10, 0xE0, 0xE3, 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5 + .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x20, 0x9D, 0xE5, 0x8A, 0x00, 0x8D, 0xE2, 0x00, 0x40, 0x8D, 0xE2 + .byte 0x00, 0x50, 0xA0, 0xE3, 0x99, 0xFE, 0xFF, 0xEB, 0x8A, 0x00, 0x8D, 0xE2, 0xD6, 0x10, 0x8D, 0xE2 + .byte 0x7D, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x91, 0x00, 0x00, 0x1A, 0x8A, 0x00, 0x8D, 0xE2 + .byte 0xD6, 0x10, 0x8D, 0xE2, 0xB0, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x50, 0xA0, 0x13 + .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x55, 0xE3, 0x01, 0x60, 0xA0, 0x03 + .byte 0x00, 0x10, 0x8D, 0xE5, 0x04, 0x00, 0x8D, 0xE5, 0x00, 0x60, 0xA0, 0x13, 0x00, 0x00, 0x56, 0xE3 + .byte 0x07, 0x00, 0x00, 0x1A, 0x03, 0x00, 0x94, 0xE8, 0x01, 0x00, 0x90, 0xE2, 0x00, 0x10, 0xA1, 0xE2 + .byte 0x03, 0x00, 0x84, 0xE8, 0xBE, 0x00, 0x00, 0xEB, 0x02, 0x00, 0x50, 0xE3, 0x7C, 0x00, 0x00, 0x0A + .byte 0x05, 0x00, 0x00, 0xEA, 0x00, 0x10, 0x94, 0xE5, 0x04, 0x00, 0x94, 0xE5, 0x01, 0x10, 0x51, 0xE2 + .byte 0x00, 0x00, 0xC0, 0xE2, 0x00, 0x10, 0x84, 0xE5, 0x04, 0x00, 0x84, 0xE5, 0x00, 0x10, 0x9D, 0xE5 + .byte 0x04, 0x20, 0x9D, 0xE5, 0x64, 0x00, 0x8D, 0xE2, 0x74, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x55, 0xE3 + .byte 0x04, 0x00, 0x00, 0x0A, 0x64, 0x00, 0x8D, 0xE2, 0xD6, 0x10, 0x8D, 0xE2, 0x8E, 0xFD, 0xFF, 0xEB + .byte 0x00, 0x00, 0x50, 0xE3, 0x48, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x55, 0xE3, 0x34, 0x00, 0x00, 0x1A + .byte 0xD6, 0x00, 0x8D, 0xE2, 0x64, 0x10, 0x8D, 0xE2, 0x87, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x2F, 0x00, 0x00, 0x1A, 0x8A, 0x30, 0x8D, 0xE2, 0x3E, 0x50, 0x8D, 0xE2, 0x09, 0x20, 0xA0, 0xE3 + .byte 0xB0, 0x10, 0xD3, 0xE1, 0xB2, 0x00, 0xD3, 0xE1, 0x04, 0x30, 0x83, 0xE2, 0xB0, 0x10, 0xC5, 0xE1 + .byte 0xB2, 0x00, 0xC5, 0xE1, 0x04, 0x50, 0x85, 0xE2, 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A + .byte 0xB0, 0x00, 0xD3, 0xE1, 0x64, 0x30, 0x8D, 0xE2, 0x8A, 0x40, 0x8D, 0xE2, 0xB0, 0x00, 0xC5, 0xE1 + .byte 0x09, 0x20, 0xA0, 0xE3, 0xB0, 0x10, 0xD3, 0xE1, 0xB2, 0x00, 0xD3, 0xE1, 0x04, 0x30, 0x83, 0xE2 + .byte 0xB0, 0x10, 0xC4, 0xE1, 0xB2, 0x00, 0xC4, 0xE1, 0x04, 0x40, 0x84, 0xE2, 0x01, 0x20, 0x52, 0xE2 + .byte 0xF7, 0xFF, 0xFF, 0x1A, 0xB0, 0x00, 0xD3, 0xE1, 0x3E, 0x30, 0x8D, 0xE2, 0x64, 0x50, 0x8D, 0xE2 + .byte 0xB0, 0x00, 0xC4, 0xE1, 0x09, 0x20, 0xA0, 0xE3, 0xB0, 0x10, 0xD3, 0xE1, 0xB2, 0x00, 0xD3, 0xE1 + .byte 0x04, 0x30, 0x83, 0xE2, 0xB0, 0x10, 0xC5, 0xE1, 0xB2, 0x00, 0xC5, 0xE1, 0x04, 0x50, 0x85, 0xE2 + .byte 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A, 0xB0, 0x40, 0xD3, 0xE1, 0x08, 0x30, 0x9D, 0xE5 + .byte 0x00, 0x10, 0x9D, 0xE5, 0x0C, 0x20, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0xB0, 0x40, 0xC5, 0xE1 + .byte 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0x8D, 0xE5, 0x04, 0x20, 0x8D, 0xE5 + .byte 0x11, 0x00, 0x00, 0xEA, 0x64, 0x70, 0x8D, 0xE2, 0x8A, 0x30, 0x8D, 0xE2, 0x09, 0x20, 0xA0, 0xE3 + .byte 0xB0, 0x10, 0xD7, 0xE1, 0xB2, 0x00, 0xD7, 0xE1, 0x04, 0x70, 0x87, 0xE2, 0xB0, 0x10, 0xC3, 0xE1 + .byte 0xB2, 0x00, 0xC3, 0xE1, 0x04, 0x30, 0x83, 0xE2, 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A + .byte 0xB0, 0x20, 0xD7, 0xE1, 0x00, 0x10, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0xB0, 0x20, 0xC3, 0xE1 + .byte 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, 0x9B, 0xFF, 0xFF, 0xEA, 0x3E, 0x00, 0x8D, 0xE2 + .byte 0xD6, 0x10, 0x8D, 0xE2, 0x8A, 0x20, 0x8D, 0xE2, 0x77, 0xFD, 0xFF, 0xEB, 0x18, 0x00, 0x8D, 0xE2 + .byte 0x64, 0x10, 0x8D, 0xE2, 0xD6, 0x20, 0x8D, 0xE2, 0x73, 0xFD, 0xFF, 0xEB, 0x3E, 0x00, 0x8D, 0xE2 + .byte 0x18, 0x10, 0x8D, 0xE2, 0x00, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x0B, 0x00, 0x00, 0x0A + .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0x01, 0xE2, 0x00, 0x00, 0x00, 0xE2 + .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x51, 0x03, 0x0D, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x9D, 0xE5 + .byte 0x04, 0x00, 0x9D, 0xE5, 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, 0x08, 0x00, 0x00, 0xEA + .byte 0x3E, 0x00, 0x8D, 0xE2, 0x18, 0x10, 0x8D, 0xE2, 0x27, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 + .byte 0x03, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0x08, 0x10, 0x8D, 0xE5 + .byte 0x0C, 0x00, 0x8D, 0xE5, 0xD6, 0x0D, 0xDD, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x00, 0x0A + .byte 0x00, 0x00, 0xA0, 0xE3, 0x08, 0x20, 0x9D, 0xE5, 0x0C, 0x30, 0x9D, 0xE5, 0x00, 0x10, 0xA0, 0xE1 + .byte 0x1D, 0x03, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5, 0x08, 0x00, 0x9D, 0xE5 + .byte 0x0C, 0x10, 0x9D, 0xE5, 0xFC, 0xD0, 0x8D, 0xE2, 0xF0, 0x8F, 0xBD, 0xE8 +_020E996C: .word 0x3FF00000 +_020E9970: .word 0xBFF00000 +_020E9974: .word 0x02106B74 +_020E9978: .word 0x7FF00000 +_020E997C: .word 0x02106F5C +_020E9980: + .byte 0x48, 0x6E, 0x10, 0x02, 0x00, 0x00, 0x14, 0x40, 0xFF, 0xFF, 0xEF, 0x7F + + arm_func_start __msl_generic_count_bits64 +__msl_generic_count_bits64: ; 0x020E998C + mov r3, r0, lsr #0x1 + ldr r2, _020E9A14 ; =0x55555555 + orr r3, r3, r1, lsl #0x1f + and r3, r3, r2 + subs r12, r0, r3 + and r2, r2, r1, lsr #0x1 + ldr r0, _020E9A18 ; =0x33333333 + sbc r3, r1, r2 + mov r1, r12, lsr #0x2 + orr r1, r1, r3, lsl #0x1e + and r2, r12, r0 + and r1, r1, r0 + adds r2, r2, r1 + and r1, r3, r0 + and r0, r0, r3, lsr #0x2 + adc r1, r1, r0 + mov r0, r2, lsr #0x4 + orr r0, r0, r1, lsl #0x1c + adds r2, r2, r0 + ldr r0, _020E9A1C ; =0x0F0F0F0F + adc r1, r1, r1, lsr #0x4 + and r3, r2, r0 + and r2, r1, r0 + mov r0, r3, lsr #0x8 + orr r0, r0, r2, lsl #0x18 + adds r1, r3, r0 + adc r2, r2, r2, lsr #0x8 + mov r0, r1, lsr #0x10 + orr r0, r0, r2, lsl #0x10 + adds r1, r1, r0 + adc r0, r2, r2, lsr #0x10 + adds r0, r1, r0 + and r0, r0, #0xff + bx lr + .balign 4 +_020E9A14: .word 0x55555555 +_020E9A18: .word 0x33333333 +_020E9A1C: .word 0x0F0F0F0F +__signbitf: + stmdb sp!, {r0-r3} + ldr r0, [sp, #0x4] + and r0, r0, #0x80000000 + add sp, sp, #0x10 + bx lr + + arm_func_start __fpclassifyf +__fpclassifyf: ; 0x020E9A34 + stmdb sp!, {r0-r3} + ldr r2, [sp, #0x4] + ldr r0, _020E9A9C ; =0x7FF00000 + ands r1, r2, r0 + beq _020E9A70 + cmp r1, r0 + bne _020E9A90 + ldr r0, _020E9AA0 ; =0x000FFFFF + tst r2, r0 + ldreq r0, [sp, #0x0] + add sp, sp, #0x10 + cmpeq r0, #0x0 + movne r0, #0x1 + moveq r0, #0x2 + bx lr +_020E9A70: + ldr r0, _020E9AA0 ; =0x000FFFFF + tst r2, r0 + ldreq r0, [sp, #0x0] + add sp, sp, #0x10 + cmpeq r0, #0x0 + movne r0, #0x5 + moveq r0, #0x3 + bx lr +_020E9A90: + mov r0, #0x4 + add sp, sp, #0x10 + bx lr + .balign 4 +_020E9A9C: .word 0x7FF00000 +_020E9AA0: .word 0x000FFFFF + + arm_func_start scalbn +scalbn: ; 0x020E9AA4 + stmdb sp!, {r3-r4,lr} + sub sp, sp, #0x4 + mov r4, r2 + add r2, sp, #0x0 + bl frexp + ldr r2, [sp, #0x0] + add r2, r2, r4 + str r2, [sp, #0x0] + bl ldexp + add sp, sp, #0x4 + ldmia sp!, {r3-r4,pc} + + arm_func_start stricmp +stricmp: ; 0x020E9AD0 + stmdb sp!, {r3,lr} + ldr r3, _020E9B34 ; =0x0210420C + ldrb r2, [r0], #0x1 + cmp r2, #0x0 + blt _020E9AF0 + cmp r2, #0x80 + bge _020E9AF0 + ldrb r2, [r3, r2] +_020E9AF0: + ldrb lr, [r1], #0x1 + and r12, r2, #0xff + cmp lr, #0x0 + blt _020E9B0C + cmp lr, #0x80 + bge _020E9B0C + ldrb lr, [r3, lr] +_020E9B0C: + and r2, lr, #0xff + cmp r12, r2 + mvncc r0, #0x0 + ldmccia sp!, {r3,pc} +_020E9B1C: + .byte 0x01, 0x00, 0xA0, 0x83 + .byte 0x08, 0x80, 0xBD, 0x88, 0x00, 0x00, 0x5C, 0xE3, 0xEA, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3 + .byte 0x08, 0x80, 0xBD, 0xE8 +_020E9B34: .word 0x0210420C + + arm_func_start strnicmp +strnicmp: ; 0x020E9B38 + ldr ip, _020E9B40 ; =stricmp + bx r12 + .balign 4 +_020E9B40: .word stricmp +_dadd: + stmdb sp!, {r4,lr} + eors r12, r1, r3 + eormi r3, r3, #0x80000000 + bmi _020EA5DC +_020E9B54: + subs r12, r0, r2 + sbcs lr, r1, r3 + bhs _020E9B70 + adds r2, r2, r12 + adc r3, r3, lr + subs r0, r0, r12 + sbc r1, r1, lr +_020E9B70: + mov lr, #0x80000000 + mov r12, r1, lsr #0x14 + orr r1, lr, r1, lsl #0xb + orr r1, r1, r0, lsr #0x15 + mov r0, r0, lsl #0xb + movs r4, r12, lsl #0x15 + cmnne r4, #0x200000 + beq _020E9C6C + mov r4, r3, lsr #0x14 + orr r3, lr, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs lr, r4, lsl #0x15 + beq _020E9CB4 +_020E9BA8: + subs r4, r12, r4 + beq _020E9C00 + cmp r4, #0x20 + ble _020E9BE4 + cmp r4, #0x38 + movge r4, #0x3f + sub r4, r4, #0x20 + rsb lr, r4, #0x20 + orrs lr, r2, r3, lsl lr + mov r2, r3, lsr r4 + orrne r2, r2, #0x1 + adds r0, r0, r2 + adcs r1, r1, #0x0 + blo _020E9C28 + b _020E9C0C +_020E9BE4: + rsb lr, r4, #0x20 + movs lr, r2, lsl lr + rsb lr, r4, #0x20 + mov r2, r2, lsr r4 + orr r2, r2, r3, lsl lr + mov r3, r3, lsr r4 + orrne r2, r2, #0x1 +_020E9C00: + adds r0, r0, r2 + adcs r1, r1, r3 + blo _020E9C28 +_020E9C0C: + add r12, r12, #0x1 + and r4, r0, #0x1 + movs r1, r1, rrx + orr r0, r4, r0, rrx + mov lr, r12, lsl #0x15 + cmn lr, #0x200000 + beq _020E9E38 +_020E9C28: + movs r2, r0, lsl #0x15 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + mov r1, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + tst r2, #0x80000000 + ldmeqia sp!, {r4,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020E9C6C: + cmp r12, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + bics r12, r12, #0x800 + beq _020E9CD8 + orrs r4, r0, r1, lsl #0x1 + bne _020E9E14 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r4, r4, lsl #0x15 + beq _020E9E00 + cmn r4, #0x200000 + bne _020E9E00 + orrs r4, r2, r3, lsl #0x1 + beq _020E9E00 + b _020E9E14 +_020E9CB4: + cmp r4, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + bic r12, r12, #0x800 + bics r4, r4, #0x800 + beq _020E9D44 + orrs r4, r2, r3, lsl #0x1 + bne _020E9E14 + b _020E9E00 +_020E9CD8: + orrs r4, r0, r1, lsl #0x1 + beq _020E9D18 + mov r12, #0x1 + bic r1, r1, #0x80000000 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r4, r4, lsl #0x15 + cmnne r4, #0x200000 + mov r4, r4, lsr #0x15 + orr r4, r4, lr, lsr #0x14 + beq _020E9CB4 + orr r3, r3, #0x80000000 + orr r12, r12, lr, lsr #0x14 + b _020E9BA8 +_020E9D18: + mov r12, r3, lsr #0x14 + mov r1, r3, lsl #0xb + orr r1, r1, r2, lsr #0x15 + mov r0, r2, lsl #0xb + movs r4, r12, lsl #0x15 + beq _020E9DCC + cmn r4, #0x200000 + bne _020E9DCC + orrs r4, r0, r1, lsl #0x1 + beq _020E9E00 + b _020E9E18 +_020E9D44: + orrs r4, r2, r3, lsl #0x1 + beq _020E9DDC + mov r4, #0x1 + bic r3, r3, #0x80000000 + cmp r1, #0x0 + bpl _020E9D68 + orr r12, r12, lr, lsr #0x14 + orr r4, r4, lr, lsr #0x14 + b _020E9BA8 +_020E9D68: + adds r0, r0, r2 + adcs r1, r1, r3 + blo _020E9D88 + add r12, r12, #0x1 + and r4, r0, #0x1 + movs r1, r1, rrx + mov r0, r0, rrx + orr r0, r0, r4 +_020E9D88: + cmp r1, #0x0 + subges r12, r12, #0x1 + movs r2, r0, lsl #0x15 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmeqia sp!, {r4,lr} + bxeq lr + tst r2, #0x80000000 + ldmeqia sp!, {r4,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr +_020E9DCC: + mov r1, r3 + mov r0, r2 + ldmia sp!, {r4,lr} + bx lr +_020E9DDC: + cmp r1, #0x0 + subges r12, r12, #0x1 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmia sp!, {r4,lr} + bx lr +_020E9E00: + ldr r1, _020E9E58 ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020E9E14: + mov r1, r3 +_020E9E18: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4,lr} + bx lr +_020E9E28: + .byte 0x00, 0x00, 0xE0, 0xE3, 0x02, 0x11, 0xC0, 0xE3 + .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020E9E38: + cmp r12, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + ldr r1, _020E9E58 ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020E9E58: .word 0x7FF00000 +_d2f: + and r2, r1, #0x80000000 + mov r12, r1, lsr #0x14 + bics r12, r12, #0x800 + beq _020E9ED4 + mov r3, r12, lsl #0x15 + cmn r3, #0x200000 + bhs _020E9EB8 + subs r12, r12, #0x380 + bls _020E9EE4 + cmp r12, #0xff + bge _020E9F54 + mov r1, r1, lsl #0xc + orr r3, r2, r1, lsr #0x9 + orr r3, r3, r0, lsr #0x1d + movs r1, r0, lsl #0x3 + orr r0, r3, r12, lsl #0x17 + bxeq lr + tst r1, #0x80000000 + bxeq lr + movs r1, r1, lsl #0x1 + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020E9EB8: + orrs r3, r0, r1, lsl #0xc + bne _020E9ECC + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020E9ECC: + mvn r0, #0x80000000 + bx lr +_020E9ED4: + orrs r3, r0, r1, lsl #0xc + bne _020E9F4C + mov r0, r2 + bx lr +_020E9EE4: + cmn r12, #0x17 + beq _020E9F38 + bmi _020E9F4C + mov r1, r1, lsl #0xb + orr r1, r1, #0x80000000 + mov r3, r1, lsr #0x8 + orr r3, r3, r0, lsr #0x1d + rsb r12, r12, #0x1 + movs r1, r0, lsl #0x3 + orr r0, r2, r3, lsr r12 + rsb r12, r12, #0x20 + mov r3, r3, lsl r12 + orrne r3, r3, #0x1 + movs r1, r3 + bxeq lr + tst r1, #0x80000000 + bxeq lr + movs r1, r1, lsl #0x1 + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020E9F38: + orr r0, r0, r1, lsl #0xc + movs r1, r0 + mov r0, r2 + addne r0, r0, #0x1 + bx lr +_020E9F4C: + mov r0, r2 + bx lr +_020E9F54: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr + + arm_func_start _dfix +_dfix: ; 0x020E9F60 + bic r3, r1, #0x80000000 + ldr r2, _020E9FA8 ; =0x0000041E + subs r2, r2, r3, lsr #0x14 + ble _020E9F9C + cmp r2, #0x20 + bge _020E9F94 + mov r3, r1, lsl #0xb + orr r3, r3, #0x80000000 + orr r3, r3, r0, lsr #0x15 + cmp r1, #0x0 + mov r0, r3, lsr r2 + rsbmi r0, r0, #0x0 + bx lr +_020E9F94: + mov r0, #0x0 + bx lr +_020E9F9C: + mvn r0, r1, asr #0x1f + add r0, r0, #0x80000000 + bx lr + .balign 4 +_020E9FA8: .word 0x0000041E + + arm_func_start _ll_ufrom_d +_ll_ufrom_d: ; 0x020E9FAC + tst r1, #0x80000000 + bne _020EA010 + ldr r2, _020EA034 ; =0x0000043E + subs r2, r2, r1, lsr #0x14 + blt _020EA028 + cmp r2, #0x40 + bge _020EA004 + mov r12, r1, lsl #0xb + orr r12, r12, #0x80000000 + orr r12, r12, r0, lsr #0x15 + cmp r2, #0x20 + ble _020E9FEC + sub r2, r2, #0x20 + mov r1, #0x0 + mov r0, r12, lsr r2 + bx lr +_020E9FEC: + mov r3, r0, lsl #0xb + mov r1, r12, lsr r2 + mov r0, r3, lsr r2 + rsb r2, r2, #0x20 + orr r0, r0, r12, lsl r2 + bx lr +_020EA004: + mov r1, #0x0 + mov r0, #0x0 + bx lr +_020EA010: + cmn r1, #0x100000 + cmpeq r0, #0x0 + bhi _020EA028 + mov r1, #0x0 + mov r0, #0x0 + bx lr +_020EA028: + mvn r1, #0x0 + mvn r0, #0x0 + bx lr + .balign 4 +_020EA034: .word 0x0000043E + + arm_func_start _dflt +_dflt: ; 0x020EA038 + ands r2, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r0, #0x0 + mov r1, #0x0 + bxeq lr + mov r3, #0x400 + add r3, r3, #0x1e + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 + movs r1, r0 + mov r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, r2, r1, lsr #0xc + orr r1, r1, r3, lsl #0x14 + bx lr + + arm_func_start _dfltu +_dfltu: ; 0x020EA078 + cmp r0, #0x0 + mov r1, #0x0 + bxeq lr + mov r3, #0x400 + add r3, r3, #0x1e + bmi _020EA09C + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 +_020EA09C: + mov r1, r0 + mov r0, r1, lsl #0x15 + add r1, r1, r1 + mov r1, r1, lsr #0xc + orr r1, r1, r3, lsl #0x14 + bx lr + + arm_func_start _dmul +_dmul: ; 0x020EA0B4 + stmdb sp!, {r4-r7,lr} + eor lr, r1, r3 + and lr, lr, #0x80000000 + mov r12, r1, lsr #0x14 + mov r1, r1, lsl #0xb + orr r1, r1, r0, lsr #0x15 + mov r0, r0, lsl #0xb + movs r6, r12, lsl #0x15 + cmnne r6, #0x200000 + beq _020EA1BC + orr r1, r1, #0x80000000 + bic r12, r12, #0x800 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r5, r4, lsl #0x15 + cmnne r5, #0x200000 + beq _020EA204 + orr r3, r3, #0x80000000 + bic r4, r4, #0x800 +_020EA108: + add r12, r4, r12 + umull r5, r4, r0, r2 + umull r7, r6, r0, r3 + adds r4, r7, r4 + adc r6, r6, #0x0 + umull r7, r0, r1, r2 + adds r4, r7, r4 + adcs r0, r0, r6 + umull r7, r2, r1, r3 + adc r1, r2, #0x0 + adds r0, r0, r7 + adc r1, r1, #0x0 + orrs r4, r4, r5 + orrne r0, r0, #0x1 + cmp r1, #0x0 + blt _020EA154 + sub r12, r12, #0x1 + adds r0, r0, r0 + adc r1, r1, r1 +_020EA154: + add r12, r12, #0x2 + subs r12, r12, #0x400 + bmi _020EA2F0 + beq _020EA2F0 + mov r6, r12, lsl #0x14 + cmn r6, #0x100000 + bmi _020EA3F0 + movs r2, r0, lsl #0x15 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + tst r2, #0x80000000 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA1BC: + bics r12, r12, #0x800 + beq _020EA218 + orrs r6, r0, r1, lsl #0x1 + bne _020EA3A4 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r5, r4, lsl #0x15 + beq _020EA1F8 + cmn r5, #0x200000 + bne _020EA390 + orrs r5, r2, r3, lsl #0x1 + beq _020EA390 + b _020EA3A4 +_020EA1F8: + orrs r5, r3, r2 + beq _020EA3B8 + b _020EA390 +_020EA204: + bics r4, r4, #0x800 + beq _020EA2AC + orrs r6, r2, r3, lsl #0x1 + bne _020EA3A4 + b _020EA390 +_020EA218: + orrs r6, r0, r1, lsl #0x1 + beq _020EA280 + mov r12, #0x1 + cmp r1, #0x0 + bne _020EA23C + sub r12, r12, #0x20 + movs r1, r0 + mov r0, #0x0 + bmi _020EA258 +_020EA23C: + clz r6, r1 + movs r1, r1, lsl r6 + rsb r6, r6, #0x20 + orr r1, r1, r0, lsr r6 + rsb r6, r6, #0x20 + mov r0, r0, lsl r6 + sub r12, r12, r6 +_020EA258: + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r5, r4, lsl #0x15 + cmnne r5, #0x200000 + beq _020EA204 + orr r3, r3, #0x80000000 + bic r4, r4, #0x800 + b _020EA108 +_020EA280: + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r5, r4, lsl #0x15 + beq _020EA404 + cmn r5, #0x200000 + bne _020EA404 + orrs r6, r2, r3, lsl #0x1 + beq _020EA3B8 + b _020EA3A4 +_020EA2AC: + orrs r5, r2, r3, lsl #0x1 + beq _020EA404 + mov r4, #0x1 + cmp r3, #0x0 + bne _020EA2D0 + sub r4, r4, #0x20 + movs r3, r2 + mov r2, #0x0 + bmi _020EA108 +_020EA2D0: + clz r6, r3 + movs r3, r3, lsl r6 + rsb r6, r6, #0x20 + orr r3, r3, r2, lsr r6 + rsb r6, r6, #0x20 + mov r2, r2, lsl r6 + sub r4, r4, r6 + b _020EA108 +_020EA2F0: + cmn r12, #0x34 + beq _020EA388 + bmi _020EA3E0 + mov r2, r1 + mov r3, r0 + add r4, r12, #0x34 + cmp r4, #0x20 + movge r2, r3 + movge r3, #0x0 + subge r4, r4, #0x20 + rsb r5, r4, #0x20 + mov r2, r2, lsl r4 + orr r2, r2, r3, lsr r5 + movs r3, r3, lsl r4 + orrne r2, r2, #0x1 + rsb r12, r12, #0xc + cmp r12, #0x20 + movge r0, r1 + movge r1, #0x0 + subge r12, r12, #0x20 + rsb r4, r12, #0x20 + mov r0, r0, lsr r12 + orr r0, r0, r1, lsl r4 + orr r1, lr, r1, lsr r12 + cmp r2, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + tst r2, #0x80000000 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA388: + orr r0, r0, r1, lsl #0x1 + b _020EA3C8 +_020EA390: + ldr r1, _020EA414 ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3A4: + mov r1, r3 + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3B8: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3C8: + movs r2, r0 + mov r1, lr + mov r0, #0x0 + addne r0, r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3E0: + mov r1, lr + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3F0: + ldr r1, _020EA414 ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA404: + mov r1, lr + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020EA414: .word 0x7FF00000 + + arm_func_start _dsqrt +_dsqrt: ; 0x020EA418 + stmdb sp!, {r4-r6,lr} + ldr r2, _020EA5A8 ; =0x7FF00000 + cmp r1, r2 + bhs _020EA564 + movs r12, r1, lsr #0x14 + beq _020EA510 + bic r1, r1, r2 + orr r1, r1, #0x100000 +_020EA438: + movs r12, r12, asr #0x1 + bhs _020EA44C + sub r12, r12, #0x1 + movs r0, r0, lsl #0x1 + adc r1, r1, r1 +_020EA44C: + movs r3, r0, lsl #0x1 + adc r1, r1, r1 + mov r2, #0x0 + mov r4, #0x0 + mov lr, #0x200000 +_020EA460: + add r6, r4, lr + cmp r6, r1 + addle r4, r6, lr + suble r1, r1, r6 + addle r2, r2, lr + movs r3, r3, lsl #0x1 + adc r1, r1, r1 + movs lr, lr, lsr #0x1 + bne _020EA460 + mov r0, #0x0 + mov r5, #0x0 + cmp r1, r4 + cmpeq r3, #0x80000000 + blo _020EA4A8 + subs r3, r3, #0x80000000 + sbc r1, r1, r4 + add r4, r4, #0x1 + mov r0, #0x80000000 +_020EA4A8: + movs r3, r3, lsl #0x1 + adc r1, r1, r1 + mov lr, #0x40000000 +_020EA4B4: + add r6, r5, lr + cmp r4, r1 + cmpeq r6, r3 + bhi _020EA4D4 + add r5, r6, lr + subs r3, r3, r6 + sbc r1, r1, r4 + add r0, r0, lr +_020EA4D4: + movs r3, r3, lsl #0x1 + adc r1, r1, r1 + movs lr, lr, lsr #0x1 + bne _020EA4B4 + orrs r1, r1, r3 + biceq r0, r0, #0x1 + movs r1, r2, lsr #0x1 + movs r0, r0, rrx + adcs r0, r0, #0x0 + adc r1, r1, #0x0 + add r1, r1, #0x20000000 + sub r1, r1, #0x100000 + add r1, r1, r12, lsl #0x14 + ldmia sp!, {r4-r6,lr} + bx lr +_020EA510: + cmp r1, #0x0 + bne _020EA540 + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mvn r12, #0x13 + clz r5, r0 + movs r0, r0, lsl r5 + sub r12, r12, r5 + mov r1, r0, lsr #0xb + mov r0, r0, lsl #0x15 + b _020EA438 +_020EA540: + clz r2, r1 + movs r1, r1, lsl r2 + rsb r2, r2, #0x2b + mov r1, r1, lsr #0xb + orr r1, r1, r0, lsr r2 + rsb r2, r2, #0x20 + mov r0, r0, lsl r2 + rsb r12, r2, #0x1 + b _020EA438 +_020EA564: + tst r1, #0x80000000 + beq _020EA580 + bics r3, r1, #0x80000000 + cmpeq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + b _020EA58C +_020EA580: + orrs r2, r0, r1, lsl #0xc + ldmeqia sp!, {r4-r6,lr} + bxeq lr +_020EA58C: + ldr r2, _020EA5AC ; =0x7FF80000 + orr r1, r1, r2 + ldr r3, _020EA5B0 ; =0x021D74A8 + mov r4, #0x21 + str r4, [r3, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020EA5A8: .word 0x7FF00000 +_020EA5AC: .word 0x7FF80000 +_020EA5B0: .word 0x021D74A8 + + arm_func_start _drsb +_drsb: ; 0x020EA5B4 + eor r1, r1, r3 + eor r3, r1, r3 + eor r1, r1, r3 + eor r0, r0, r2 + eor r2, r0, r2 + eor r0, r0, r2 +_dsub: + stmdb sp!, {r4,lr} + eors r12, r1, r3 + eormi r3, r3, #0x80000000 + bmi _020E9B54 +_020EA5DC: + subs r12, r0, r2 + sbcs lr, r1, r3 + bhs _020EA5FC + eor lr, lr, #0x80000000 + adds r2, r2, r12 + adc r3, r3, lr + subs r0, r0, r12 + sbc r1, r1, lr +_020EA5FC: + mov lr, #0x80000000 + mov r12, r1, lsr #0x14 + orr r1, lr, r1, lsl #0xb + orr r1, r1, r0, lsr #0x15 + mov r0, r0, lsl #0xb + movs r4, r12, lsl #0x15 + cmnne r4, #0x200000 + beq _020EA800 + mov r4, r3, lsr #0x14 + orr r3, lr, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs lr, r4, lsl #0x15 + beq _020EA848 +_020EA634: + subs r4, r12, r4 + beq _020EA6DC + cmp r4, #0x20 + ble _020EA670 + cmp r4, #0x38 + movge r4, #0x3f + sub r4, r4, #0x20 + rsb lr, r4, #0x20 + orrs lr, r2, r3, lsl lr + mov r2, r3, lsr r4 + orrne r2, r2, #0x1 + subs r0, r0, r2 + sbcs r1, r1, #0x0 + bmi _020EA698 + b _020EA788 +_020EA670: + rsb lr, r4, #0x20 + movs lr, r2, lsl lr + rsb lr, r4, #0x20 + mov r2, r2, lsr r4 + orr r2, r2, r3, lsl lr + mov r3, r3, lsr r4 + orrne r2, r2, #0x1 + subs r0, r0, r2 + sbcs r1, r1, r3 + bpl _020EA788 +_020EA698: + movs r2, r0, lsl #0x15 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + mov r1, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + tst r2, #0x80000000 + ldmeqia sp!, {r4,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020EA6DC: + subs r0, r0, r2 + sbc r1, r1, r3 + orrs lr, r1, r0 + beq _020EA96C + mov lr, r12, lsl #0x14 + and lr, lr, #0x80000000 + bic r12, r12, #0x800 + cmp r1, #0x0 + bmi _020EA764 + bne _020EA714 + sub r12, r12, #0x20 + movs r1, r0 + mov r0, #0x0 + bmi _020EA730 +_020EA714: + clz r4, r1 + movs r1, r1, lsl r4 + rsb r4, r4, #0x20 + orr r1, r1, r0, lsr r4 + rsb r4, r4, #0x20 + mov r0, r0, lsl r4 + sub r12, r12, r4 +_020EA730: + cmp r12, #0x0 + bgt _020EA76C + rsb r12, r12, #0xc + cmp r12, #0x20 + movge r0, r1 + movge r1, #0x0 + subge r12, r12, #0x20 + rsb r4, r12, #0x20 + mov r0, r0, lsr r12 + orr r0, r0, r1, lsl r4 + orr r1, lr, r1, lsr r12 + ldmia sp!, {r4,lr} + bx lr +_020EA764: + cmp r1, #0x0 + subges r12, r12, #0x1 +_020EA76C: + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmia sp!, {r4,lr} + bx lr +_020EA788: + mov lr, r12, lsl #0x14 + and lr, lr, #0x80000000 + bic r12, r12, #0x800 + cmp r1, #0x0 + bne _020EA7AC + sub r12, r12, #0x20 + movs r1, r0 + mov r0, #0x0 + bmi _020EA7C8 +_020EA7AC: + clz r4, r1 + movs r1, r1, lsl r4 + rsb r4, r4, #0x20 + orr r1, r1, r0, lsr r4 + rsb r4, r4, #0x20 + mov r0, r0, lsl r4 + sub r12, r12, r4 +_020EA7C8: + cmp r12, #0x0 + orrgt r12, r12, lr, lsr #0x14 + bgt _020EA698 + rsb r12, r12, #0xc + cmp r12, #0x20 + movge r0, r1 + movge r1, #0x0 + subge r12, r12, #0x20 + rsb r4, r12, #0x20 + mov r0, r0, lsr r12 + orr r0, r0, r1, lsl r4 + orr r1, lr, r1, lsr r12 + ldmia sp!, {r4,lr} + bx lr +_020EA800: + cmp r12, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + bics r12, r12, #0x800 + beq _020EA86C + orrs r4, r0, r1, lsl #0x1 + bne _020EA948 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r4, r4, lsl #0x15 + beq _020EA934 + cmn r4, #0x200000 + bne _020EA934 + orrs r4, r2, r3, lsl #0x1 + beq _020EA95C + b _020EA948 +_020EA848: + cmp r4, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + bic r12, r12, #0x800 + bics r4, r4, #0x800 + beq _020EA8E4 + orrs r4, r2, r3, lsl #0x1 + bne _020EA948 + b _020EA934 +_020EA86C: + orrs r4, r0, r1, lsl #0x1 + beq _020EA8AC + mov r12, #0x1 + bic r1, r1, #0x80000000 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r4, r4, lsl #0x15 + cmnne r4, #0x200000 + mov r4, r4, lsr #0x15 + orr r4, r4, lr, lsr #0x14 + beq _020EA848 + orr r3, r3, #0x80000000 + orr r12, r12, lr, lsr #0x14 + b _020EA634 +_020EA8AC: + mov r12, r3, lsr #0x14 + mov r1, r3, lsl #0xb + orr r1, r1, r2, lsr #0x15 + mov r0, r2, lsl #0xb + movs r4, r12, lsl #0x15 + beq _020EA8D8 + cmn r4, #0x200000 + bne _020EA900 + orrs r4, r0, r1, lsl #0x1 + bne _020EA94C + b _020EA934 +_020EA8D8: + orrs r4, r0, r1, lsl #0x1 + beq _020EA96C + b _020EA900 +_020EA8E4: + orrs r4, r2, r3, lsl #0x1 + beq _020EA910 + mov r4, #0x1 + bic r3, r3, #0x80000000 + orr r12, r12, lr, lsr #0x14 + orr r4, r4, lr, lsr #0x14 + b _020EA634 +_020EA900: + mov r1, r3 + mov r0, r2 + ldmia sp!, {r4,lr} + bx lr +_020EA910: + cmp r1, #0x0 + subges r12, r12, #0x1 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmia sp!, {r4,lr} + bx lr +_020EA934: + ldr r1, _020EA97C ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020EA948: + mov r1, r3 +_020EA94C: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4,lr} + bx lr +_020EA95C: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4,lr} + bx lr +_020EA96C: + mov r1, #0x0 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020EA97C: .word 0x7FF00000 + + arm_func_start _fadd +_fadd: ; 0x020EA980 + eors r2, r0, r1 + eormi r1, r1, #0x80000000 + bmi _020EB7BC +_020EA98C: + subs r12, r0, r1 + subcc r0, r0, r12 + addcc r1, r1, r12 + mov r2, #0x80000000 + mov r3, r0, lsr #0x17 + orr r0, r2, r0, lsl #0x8 + ands r12, r3, #0xff + cmpne r12, #0xff + beq _020EAA20 + mov r12, r1, lsr #0x17 + orr r1, r2, r1, lsl #0x8 + ands r2, r12, #0xff + beq _020EAA60 +_020EA9C0: + subs r12, r3, r12 + beq _020EA9D8 + rsb r2, r12, #0x20 + movs r2, r1, lsl r2 + mov r1, r1, lsr r12 + orrne r1, r1, #0x1 +_020EA9D8: + adds r0, r0, r1 + blo _020EA9F8 + and r1, r0, #0x1 + orr r0, r1, r0, rrx + add r3, r3, #0x1 + and r2, r3, #0xff + cmp r2, #0xff + beq _020EAB68 +_020EA9F8: + ands r1, r0, #0xff + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + tst r1, #0x80 + bxeq lr + ands r1, r1, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EAA20: + cmp r3, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + ands r3, r3, #0xff + beq _020EAA84 + movs r0, r0, lsl #0x1 + bne _020EAB94 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EAB88 + cmp r12, #0xff + blt _020EAB88 + cmp r1, #0x0 + beq _020EAB88 + b _020EAB94 +_020EAA60: + cmp r3, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + and r3, r3, #0xff + ands r12, r12, #0xff + beq _020EAAE0 +_020EAA78: + movs r1, r1, lsl #0x1 + bne _020EAB94 + b _020EAB88 +_020EAA84: + movs r0, r0, lsl #0x1 + beq _020EAABC + mov r3, #0x1 + mov r0, r0, lsr #0x1 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x8 + ands r12, r12, #0xff + beq _020EAAE0 + cmp r12, #0xff + beq _020EAA78 + orr r1, r1, #0x80000000 + orr r3, r3, r2, lsr #0x17 + orr r12, r12, r2, lsr #0x17 + b _020EA9C0 +_020EAABC: + mov r3, r1, lsr #0x17 + mov r0, r1, lsl #0x9 + ands r3, r3, #0xff + beq _020EAB48 + cmp r3, #0xff + blt _020EAB48 + cmp r0, #0x0 + beq _020EAB88 + b _020EAB80 +_020EAAE0: + movs r1, r1, lsl #0x1 + beq _020EAB50 + mov r1, r1, lsr #0x1 + mov r12, #0x1 + orr r3, r3, r2, lsr #0x17 + orr r12, r12, r2, lsr #0x17 + cmp r0, #0x0 + bmi _020EA9C0 + adds r0, r0, r1 + blo _020EAB14 + and r1, r0, #0x1 + orr r0, r1, r0, rrx + add r12, r12, #0x1 +_020EAB14: + cmp r0, #0x0 + subge r12, r12, #0x1 + ands r1, r0, #0xff + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r12, lsl #0x17 + bxeq lr + tst r1, #0x80 + bxeq lr + ands r1, r1, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EAB48: + mov r0, r1 + bx lr +_020EAB50: + cmp r0, #0x0 + subges r3, r3, #0x1 + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bx lr +_020EAB68: + cmp r3, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EAB80: + mvn r0, #0x80000000 + bx lr +_020EAB88: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EAB94: + mvn r0, #0x80000000 + bx lr +_020EAB9C: + .byte 0x02, 0x01, 0xE0, 0xE3 + .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start _dgr +_dgr: ; 0x020EABA4 + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EAC18 + cmn r12, r3, lsl #0x1 + bhs _020EAC2C +_020EABB8: + orrs r12, r3, r1 + bmi _020EABE8 + cmp r1, r3 + cmpeq r0, r2 + movhi r0, #0x1 + movls r0, #0x0 + bx lr +_020EABD4: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EABE8: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x20000000 + msr cpsr_f, r12 + bxeq lr + cmp r3, r1 + cmpeq r2, r0 + movhi r0, #0x1 + movls r0, #0x0 + bx lr +_020EAC18: + bne _020EABD4 + cmp r0, #0x0 + bhi _020EABD4 + cmn r12, r3, lsl #0x1 + blo _020EABB8 +_020EAC2C: + bne _020EABD4 + cmp r2, #0x0 + bhi _020EABD4 + b _020EABB8 + + arm_func_start _dleq +_dleq: ; 0x020EAC3C + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EACBC + cmn r12, r3, lsl #0x1 + bhs _020EACD0 +_020EAC50: + orrs r12, r3, r1 + bmi _020EAC84 + cmp r1, r3 + cmpeq r0, r2 + movls r0, #0x1 + movhi r0, #0x0 + bx lr +_020EAC6C: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x40000000 + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAC84: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x1 + bne _020EACA8 + mrs r12, cpsr + bic r12, r12, #0x20000000 + orr r12, r12, #0x40000000 + msr cpsr_f, r12 + bxeq lr +_020EACA8: + cmp r3, r1 + cmpeq r2, r0 + movls r0, #0x1 + movhi r0, #0x0 + bx lr +_020EACBC: + bne _020EAC6C + cmp r0, #0x0 + bhi _020EAC6C + cmn r12, r3, lsl #0x1 + blo _020EAC50 +_020EACD0: + bne _020EAC6C + cmp r2, #0x0 + bhi _020EAC6C + b _020EAC50 + + arm_func_start _dls +_dls: ; 0x020EACE0 + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EAD58 + cmn r12, r3, lsl #0x1 + bhs _020EAD6C +_020EACF4: + orrs r12, r3, r1 + bmi _020EAD24 + cmp r1, r3 + cmpeq r0, r2 + movcc r0, #0x1 + movcs r0, #0x0 + bx lr +_020EAD10: + mov r0, #0x0 + mrs r12, cpsr + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAD24: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x0 + bne _020EAD44 + mrs r12, cpsr + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bxeq lr +_020EAD44: + cmp r3, r1 + cmpeq r2, r0 + movcc r0, #0x1 + movcs r0, #0x0 + bx lr +_020EAD58: + bne _020EAD10 + cmp r0, #0x0 + bhi _020EAD10 + cmn r12, r3, lsl #0x1 + blo _020EACF4 +_020EAD6C: + bne _020EAD10 + cmp r2, #0x0 + bhi _020EAD10 + b _020EACF4 + + arm_func_start _deq +_deq: ; 0x020EAD7C + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EADE4 + cmn r12, r3, lsl #0x1 + bhs _020EADF8 +_020EAD90: + orrs r12, r3, r1 + bmi _020EADC0 + cmp r1, r3 + cmpeq r0, r2 + moveq r0, #0x1 + movne r0, #0x0 + bx lr +_020EADAC: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EADC0: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x1 + bxeq lr + cmp r3, r1 + cmpeq r2, r0 + moveq r0, #0x1 + movne r0, #0x0 + bx lr +_020EADE4: + bne _020EADAC + cmp r0, #0x0 + bhi _020EADAC + cmn r12, r3, lsl #0x1 + blo _020EAD90 +_020EADF8: + bne _020EADAC + cmp r2, #0x0 + bhi _020EADAC + b _020EAD90 + + arm_func_start _dneq +_dneq: ; 0x020EAE08 + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EAE70 + cmn r12, r3, lsl #0x1 + bhs _020EAE84 +_020EAE1C: + orrs r12, r3, r1 + bmi _020EAE4C + cmp r1, r3 + cmpeq r0, r2 + movne r0, #0x1 + moveq r0, #0x0 + bx lr +_020EAE38: + mov r0, #0x1 + mrs r12, cpsr + bic r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EAE4C: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x0 + bxeq lr + cmp r3, r1 + cmpeq r2, r0 + movne r0, #0x1 + moveq r0, #0x0 + bx lr +_020EAE70: + bne _020EAE38 + cmp r0, #0x0 + bhi _020EAE38 + cmn r12, r3, lsl #0x1 + blo _020EAE1C +_020EAE84: + bne _020EAE38 + cmp r2, #0x0 + bhi _020EAE38 + b _020EAE1C + + arm_func_start _fgeq +_fgeq: ; 0x020EAE94 + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + cmpcs r3, r1, lsl #0x1 + blo _020EAEDC + cmp r0, #0x0 + bicmi r0, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r1, #0x0 + bicmi r1, r1, #0x80000000 + rsbmi r1, r1, #0x0 + cmp r0, r1 + movge r0, #0x1 + movlt r0, #0x0 + mrs r12, cpsr + biclt r12, r12, #0x20000000 + orrge r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAEDC: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _fgr +_fgr: ; 0x020EAEF0 + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + cmpcs r3, r1, lsl #0x1 + blo _020EAF38 + cmp r0, #0x0 + bicmi r0, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r1, #0x0 + bicmi r1, r1, #0x80000000 + rsbmi r1, r1, #0x0 + cmp r0, r1 + movgt r0, #0x1 + movle r0, #0x0 + mrs r12, cpsr + bicle r12, r12, #0x20000000 + orrgt r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAF38: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _fleq +_fleq: ; 0x020EAF4C + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + cmpcs r3, r1, lsl #0x1 + blo _020EAF9C + cmp r0, #0x0 + bicmi r0, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r1, #0x0 + bicmi r1, r1, #0x80000000 + rsbmi r1, r1, #0x0 + cmp r0, r1 + movle r0, #0x1 + movgt r0, #0x0 + mrs r12, cpsr + orrgt r12, r12, #0x20000000 + bicgt r12, r12, #0x40000000 + bicle r12, r12, #0x20000000 + orrle r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EAF9C: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x40000000 + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _fls +_fls: ; 0x020EAFB4 + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + cmpcs r3, r1, lsl #0x1 + blo _020EAFFC + cmp r0, #0x0 + bicmi r0, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r1, #0x0 + bicmi r1, r1, #0x80000000 + rsbmi r1, r1, #0x0 + cmp r0, r1 + movlt r0, #0x1 + movge r0, #0x0 + mrs r12, cpsr + orrge r12, r12, #0x20000000 + biclt r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAFFC: + mov r0, #0x0 + mrs r12, cpsr + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _feq +_feq: ; 0x020EB010 + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + blo _020EB064 + cmp r3, r1, lsl #0x1 + blo _020EB064 + orr r3, r0, r1 + movs r3, r3, lsl #0x1 + moveq r0, #0x0 + bne _020EB044 + mrs r12, cpsr + orr r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EB044: + cmp r0, r1 + movne r0, #0x1 + moveq r0, #0x0 + mrs r12, cpsr + bicne r12, r12, #0x40000000 + orreq r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EB064: + mov r0, #0x1 + mrs r12, cpsr + bic r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _frdiv +_frdiv: ; 0x020EB078 + eor r0, r0, r1 + eor r1, r0, r1 + eor r0, r0, r1 + + arm_func_start _fdiv +_fdiv: ; 0x020EB084 + stmdb sp!, {lr} + mov r12, #0xff + ands r3, r12, r0, lsr #0x17 + cmpne r3, #0xff + beq _020EB258 + ands r12, r12, r1, lsr #0x17 + cmpne r12, #0xff + beq _020EB294 + orr r1, r1, #0x800000 + orr r0, r0, #0x800000 + bic r2, r0, #0xff000000 + bic lr, r1, #0xff000000 +_020EB0B4: + cmp r2, lr + movcc r2, r2, lsl #0x1 + subcc r3, r3, #0x1 + teq r0, r1 + sub r0, pc, #0x94 + ldrb r1, [r0, lr, lsr #0xf] + rsb lr, lr, #0x0 + mov r0, lr, asr #0x1 + mul r0, r1, r0 + add r0, r0, #0x80000000 + mov r0, r0, lsr #0x6 + mul r0, r1, r0 + mov r0, r0, lsr #0xe + mul r1, lr, r0 + sub r12, r3, r12 + mov r1, r1, lsr #0xc + mul r1, r0, r1 + mov r0, r0, lsl #0xe + add r0, r0, r1, lsr #0xf + umull r1, r0, r2, r0 + mov r3, r0 + orrmi r0, r0, #0x80000000 + adds r12, r12, #0x7e + bmi _020EB35C + cmp r12, #0xfe + bge _020EB410 + add r0, r0, r12, lsl #0x17 + mov r12, r1, lsr #0x1c + cmp r12, #0x7 + beq _020EB238 + add r0, r0, r1, lsr #0x1f + ldmia sp!, {lr} + bx lr +_020EB138: + .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9 + .byte 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA + .byte 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4, 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE + .byte 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8, 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2 + .byte 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD, 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8 + .byte 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3, 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF + .byte 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA, 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6 + .byte 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2, 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF + .byte 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7 + .byte 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1 + .byte 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E, 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B + .byte 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95 + .byte 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90 + .byte 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B + .byte 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86 + .byte 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82 + .byte 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80 +_020EB238: + mov r1, r3, lsl #0x1 + add r1, r1, #0x1 + rsb lr, lr, #0x0 + mul r1, lr, r1 + cmp r1, r2, lsl #0x18 + addmi r0, r0, #0x1 + ldmia sp!, {lr} + bx lr +_020EB258: + eor lr, r0, r1 + and lr, lr, #0x80000000 + cmp r3, #0x0 + beq _020EB2B0 + movs r0, r0, lsl #0x9 + bne _020EB3F8 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EB3E8 + cmp r12, #0xff + blt _020EB3E8 + cmp r1, #0x0 + beq _020EB404 + b _020EB3E0 +_020EB294: + eor lr, r0, r1 + and lr, lr, #0x80000000 + cmp r12, #0x0 + beq _020EB314 +_020EB2A4: + movs r1, r1, lsl #0x9 + bne _020EB3E0 + b _020EB430 +_020EB2B0: + movs r2, r0, lsl #0x9 + beq _020EB2E4 + clz r3, r2 + movs r2, r2, lsl r3 + rsb r3, r3, #0x0 + mov r2, r2, lsr #0x8 + ands r12, r12, r1, lsr #0x17 + beq _020EB33C + cmp r12, #0xff + beq _020EB2A4 + orr r1, r1, #0x800000 + bic lr, r1, #0xff000000 + b _020EB0B4 +_020EB2E4: + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EB308 + cmp r12, #0xff + blt _020EB430 + cmp r1, #0x0 + beq _020EB430 + b _020EB3E0 +_020EB308: + cmp r1, #0x0 + beq _020EB404 + b _020EB430 +_020EB314: + movs r12, r1, lsl #0x9 + beq _020EB3E8 + mov lr, r12 + clz r12, lr + movs lr, lr, lsl r12 + rsb r12, r12, #0x0 + mov lr, lr, lsr #0x8 + orr r0, r0, #0x800000 + bic r2, r0, #0xff000000 + b _020EB0B4 +_020EB33C: + movs r12, r1, lsl #0x9 + beq _020EB3E8 + mov lr, r12 + clz r12, lr + movs lr, lr, lsl r12 + rsb r12, r12, #0x0 + mov lr, lr, lsr #0x8 + b _020EB0B4 +_020EB35C: + and r0, r0, #0x80000000 + cmn r12, #0x18 + beq _020EB3D0 + bmi _020EB428 + add r1, r12, #0x17 + mov r2, r2, lsl r1 + rsb r12, r12, #0x0 + mov r3, r3, lsr r12 + orr r0, r0, r3 + rsb lr, lr, #0x0 + mul r1, lr, r3 + cmp r1, r2 + ldmeqia sp!, {lr} + bxeq lr + add r1, r1, lr + cmp r1, r2 + beq _020EB3C4 + addmi r0, r0, #0x1 + subpl r1, r1, lr + add r1, lr, r1, lsl #0x1 + cmp r1, r2, lsl #0x1 + and r3, r0, #0x1 + addmi r0, r0, #0x1 + addeq r0, r0, r3 + ldmia sp!, {lr} + bx lr +_020EB3C4: + add r0, r0, #0x1 + ldmia sp!, {lr} + bx lr +_020EB3D0: + cmn r2, lr + addne r0, r0, #0x1 + ldmia sp!, {lr} + bx lr +_020EB3E0: + mov r0, r1 + b _020EB3F8 +_020EB3E8: + mov r0, #0xff000000 + orr r0, lr, r0, lsr #0x1 + ldmia sp!, {lr} + bx lr +_020EB3F8: + mvn r0, #0x80000000 + ldmia sp!, {lr} + bx lr +_020EB404: + mvn r0, #0x80000000 + ldmia sp!, {lr} + bx lr +_020EB410: + tst r0, #0x80000000 + mov r0, #0xff000000 + movne r0, r0, asr #0x1 + moveq r0, r0, lsr #0x1 + ldmia sp!, {lr} + bx lr +_020EB428: + ldmia sp!, {lr} + bx lr +_020EB430: + mov r0, lr + ldmia sp!, {lr} + bx lr +_f2d: + and r2, r0, #0x80000000 + mov r12, r0, lsr #0x17 + mov r3, r0, lsl #0x9 + ands r12, r12, #0xff + beq _020EB46C + cmp r12, #0xff + beq _020EB498 +_020EB458: + add r12, r12, #0x380 + mov r0, r3, lsl #0x14 + orr r1, r2, r3, lsr #0xc + orr r1, r1, r12, lsl #0x14 + bx lr +_020EB46C: + cmp r3, #0x0 + bne _020EB480 + mov r1, r2 + mov r0, #0x0 + bx lr +_020EB480: + mov r3, r3, lsr #0x1 + clz r12, r3 + movs r3, r3, lsl r12 + rsb r12, r12, #0x1 + add r3, r3, r3 + b _020EB458 +_020EB498: + cmp r3, #0x0 + bhi _020EB4B0 + ldr r1, _020EB4BC ; =0x7FF00000 + orr r1, r1, r2 + mov r0, #0x0 + bx lr +_020EB4B0: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + bx lr + .balign 4 +_020EB4BC: .word 0x7FF00000 + + arm_func_start _ffix +_ffix: ; 0x020EB4C0 + bic r1, r0, #0x80000000 + mov r2, #0x9e + subs r2, r2, r1, lsr #0x17 + ble _020EB4E8 + mov r1, r1, lsl #0x8 + orr r1, r1, #0x80000000 + cmp r0, #0x0 + mov r0, r1, lsr r2 + rsbmi r0, r0, #0x0 + bx lr +_020EB4E8: + mvn r0, r0, asr #0x1f + add r0, r0, #0x80000000 + bx lr + + arm_func_start _ffixu +_ffixu: ; 0x020EB4F4 + tst r0, #0x80000000 + bne _020EB518 + mov r1, #0x9e + subs r1, r1, r0, lsr #0x17 + blt _020EB52C + mov r2, r0, lsl #0x8 + orr r0, r2, #0x80000000 + mov r0, r0, lsr r1 + bx lr +_020EB518: + mov r2, #0xff000000 + cmp r2, r0, lsl #0x1 + movcs r0, #0x0 + mvncc r0, #0x0 + bx lr +_020EB52C: + mvn r0, #0x0 + bx lr + + arm_func_start _fflt +_fflt: ; 0x020EB534 + ands r2, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r0, #0x0 + bxeq lr + clz r3, r0 + movs r0, r0, lsl r3 + rsb r3, r3, #0x9e + ands r1, r0, #0xff + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bxeq lr + tst r1, #0x80 + bxeq lr + ands r3, r1, #0x7f + andeqs r3, r0, #0x1 + addne r0, r0, #0x1 + bx lr + + arm_func_start _ffltu +_ffltu: ; 0x020EB57C + cmp r0, #0x0 + bxeq lr + mov r3, #0x9e + bmi _020EB598 + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 +_020EB598: + ands r2, r0, #0xff + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bxeq lr + tst r2, #0x80 + bxeq lr + ands r1, r2, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr + + arm_func_start _fmul +_fmul: ; 0x020EB5C4 + eor r2, r0, r1 + and r2, r2, #0x80000000 + mov r12, #0xff + ands r3, r12, r0, lsr #0x17 + mov r0, r0, lsl #0x8 + cmpne r3, #0xff + beq _020EB640 + orr r0, r0, #0x80000000 + ands r12, r12, r1, lsr #0x17 + mov r1, r1, lsl #0x8 + cmpne r12, #0xff + beq _020EB680 + orr r1, r1, #0x80000000 +_020EB5F8: + add r12, r3, r12 + umull r1, r3, r0, r1 + movs r0, r3 + addpl r0, r0, r0 + subpl r12, r12, #0x1 + subs r12, r12, #0x7f + bmi _020EB70C + cmp r12, #0xfe + bge _020EB778 + ands r3, r0, #0xff + orr r0, r2, r0, lsr #0x8 + add r0, r0, r12, lsl #0x17 + tst r3, #0x80 + bxeq lr + orrs r1, r1, r3, lsl #0x19 + andeqs r3, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EB640: + cmp r3, #0x0 + beq _020EB694 + movs r0, r0, lsl #0x1 + bne _020EB768 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EB674 + cmp r12, #0xff + blt _020EB75C + cmp r1, #0x0 + beq _020EB75C + b _020EB768 +_020EB674: + cmp r1, #0x0 + beq _020EB770 + b _020EB75C +_020EB680: + cmp r12, #0x0 + beq _020EB6F0 +_020EB688: + movs r1, r1, lsl #0x1 + bne _020EB768 + b _020EB75C +_020EB694: + movs r0, r0, lsl #0x1 + beq _020EB6CC + mov r0, r0, lsr #0x1 + clz r3, r0 + movs r0, r0, lsl r3 + rsb r3, r3, #0x1 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x8 + ands r12, r12, #0xff + beq _020EB6F0 + cmp r12, #0xff + beq _020EB688 + orr r1, r1, #0x80000000 + b _020EB5F8 +_020EB6CC: + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EB79C + cmp r12, #0xff + blt _020EB79C + cmp r1, #0x0 + beq _020EB770 + b _020EB768 +_020EB6F0: + movs r1, r1, lsl #0x1 + beq _020EB79C + mov r1, r1, lsr #0x1 + clz r12, r1 + movs r1, r1, lsl r12 + rsb r12, r12, #0x1 + b _020EB5F8 +_020EB70C: + cmn r12, #0x18 + beq _020EB754 + bmi _020EB794 + cmp r1, #0x0 + orrne r0, r0, #0x1 + mov r3, r0 + mov r0, r0, lsr #0x8 + rsb r12, r12, #0x0 + orr r0, r2, r0, lsr r12 + rsb r12, r12, #0x18 + movs r1, r3, lsl r12 + bxeq lr + tst r1, #0x80000000 + bxeq lr + movs r1, r1, lsl #0x1 + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EB754: + mov r0, r0, lsl #0x1 + b _020EB784 +_020EB75C: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EB768: + mvn r0, #0x80000000 + bx lr +_020EB770: + mvn r0, #0x80000000 + bx lr +_020EB778: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EB784: + movs r1, r0 + mov r0, r2 + addne r0, r0, #0x1 + bx lr +_020EB794: + mov r0, r2 + bx lr +_020EB79C: + mov r0, r2 + bx lr + + arm_func_start _frsb +_frsb: ; 0x020EB7A4 + eor r0, r0, r1 + eor r1, r0, r1 + eor r0, r0, r1 + + arm_func_start _fsub +_fsub: ; 0x020EB7B0 + eors r2, r0, r1 + eormi r1, r1, #0x80000000 + bmi _020EA98C +_020EB7BC: + subs r12, r0, r1 + eorcc r12, r12, #0x80000000 + subcc r0, r0, r12 + addcc r1, r1, r12 + mov r2, #0x80000000 + mov r3, r0, lsr #0x17 + orr r0, r2, r0, lsl #0x8 + ands r12, r3, #0xff + cmpne r12, #0xff + beq _020EB8D8 + mov r12, r1, lsr #0x17 + orr r1, r2, r1, lsl #0x8 + ands r2, r12, #0xff + beq _020EB918 +_020EB7F4: + subs r12, r3, r12 + beq _020EB83C + rsb r2, r12, #0x20 + movs r2, r1, lsl r2 + mov r1, r1, lsr r12 + orrne r1, r1, #0x1 + subs r0, r0, r1 + bpl _020EB880 + ands r1, r0, #0xff + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + tst r1, #0x80 + bxeq lr + ands r1, r1, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EB83C: + subs r0, r0, r1 + beq _020EB9E4 + mov r2, r3, lsl #0x17 + and r2, r2, #0x80000000 + bic r3, r3, #0x100 + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 + cmp r3, #0x0 + bgt _020EB870 + rsb r3, r3, #0x9 + orr r0, r2, r0, lsr r3 + bx lr +_020EB870: + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bx lr +_020EB880: + mov r2, r3, lsl #0x17 + and r2, r2, #0x80000000 + bic r3, r3, #0x100 + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 + cmp r3, #0x0 + bgt _020EB8AC + rsb r3, r3, #0x9 + orr r0, r2, r0, lsr r3 + bx lr +_020EB8AC: + ands r1, r0, #0xff + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bxeq lr + tst r1, #0x80 + bxeq lr + ands r1, r1, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EB8D8: + cmp r3, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + ands r3, r3, #0xff + beq _020EB940 + movs r0, r0, lsl #0x1 + bne _020EBA18 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EBA0C + cmp r12, #0xff + blt _020EBA0C + cmp r1, #0x0 + beq _020EBA20 + b _020EBA18 +_020EB918: + cmp r12, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + and r3, r3, #0xff + ands r12, r12, #0xff + beq _020EB9A8 +_020EB930: + eor r2, r2, #0x80000000 + movs r1, r1, lsl #0x1 + bne _020EBA18 + b _020EBA0C +_020EB940: + movs r0, r0, lsl #0x1 + beq _020EB978 + mov r0, r0, lsr #0x1 + mov r3, #0x1 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x8 + ands r12, r12, #0xff + beq _020EB9A8 + cmp r12, #0xff + beq _020EB930 + orr r1, r1, #0x80000000 + orr r3, r3, r2, lsr #0x17 + orr r12, r12, r2, lsr #0x17 + b _020EB7F4 +_020EB978: + mov r3, r1, lsr #0x17 + mov r0, r1, lsl #0x9 + ands r2, r3, #0xff + beq _020EB99C + cmp r2, #0xff + blt _020EB9C4 + cmp r0, #0x0 + bne _020EBA04 + b _020EBA0C +_020EB99C: + cmp r0, #0x0 + beq _020EB9E4 + b _020EB9C4 +_020EB9A8: + movs r1, r1, lsl #0x1 + beq _020EB9CC + mov r1, r1, lsr #0x1 + mov r12, #0x1 + orr r12, r12, r2, lsr #0x17 + orr r3, r3, r2, lsr #0x17 + b _020EB7F4 +_020EB9C4: + mov r0, r1 + bx lr +_020EB9CC: + cmp r0, #0x0 + subges r3, r3, #0x1 + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bx lr +_020EB9E4: + mov r0, #0x0 + bx lr +_020EB9EC: + .byte 0x00, 0x00, 0x50, 0xE3 + .byte 0x01, 0x30, 0x53, 0xA2, 0x00, 0x00, 0x80, 0xE0, 0xA0, 0x04, 0xA0, 0xE1, 0x83, 0x0B, 0x80, 0xE1 + .byte 0x1E, 0xFF, 0x2F, 0xE1 +_020EBA04: + mvn r0, #0x80000000 + bx lr +_020EBA0C: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EBA18: + mvn r0, #0x80000000 + bx lr +_020EBA20: + mvn r0, #0x80000000 + bx lr + + arm_func_start _ll_mod +_ll_mod: ; 0x020EBA28 + stmdb sp!, {r4-r7,r11-r12,lr} + mov r4, r1 + orr r4, r4, #0x1 + b _020EBA48 + + arm_func_start _ll_sdiv +_ll_sdiv: ; 0x020EBA38 + stmdb sp!, {r4-r7,r11-r12,lr} + eor r4, r1, r3 + mov r4, r4, asr #0x1 + mov r4, r4, lsl #0x1 +_020EBA48: + orrs r5, r3, r2 + bne _020EBA58 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBA58: + mov r5, r0, lsr #0x1f + add r5, r5, r1 + mov r6, r2, lsr #0x1f + add r6, r6, r3 + orrs r6, r5, r6 + bne _020EBA8C + mov r1, r2 + bl _s32_div_f + ands r4, r4, #0x1 + movne r0, r1 + mov r1, r0, asr #0x1f + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBA8C: + cmp r1, #0x0 + bge _020EBA9C + rsbs r0, r0, #0x0 + rsc r1, r1, #0x0 +_020EBA9C: + cmp r3, #0x0 + bge _020EBAAC + rsbs r2, r2, #0x0 + rsc r3, r3, #0x0 +_020EBAAC: + orrs r5, r1, r0 + beq _020EBBD0 + mov r5, #0x0 + mov r6, #0x1 + cmp r3, #0x0 + bmi _020EBAD8 +_020EBAC4: + add r5, r5, #0x1 + adds r2, r2, r2 + adcs r3, r3, r3 + bpl _020EBAC4 + add r6, r6, r5 +_020EBAD8: + cmp r1, #0x0 + blt _020EBAF8 +_020EBAE0: + cmp r6, #0x1 + beq _020EBAF8 + sub r6, r6, #0x1 + adds r0, r0, r0 + adcs r1, r1, r1 + bpl _020EBAE0 +_020EBAF8: + mov r7, #0x0 + mov r12, #0x0 + mov r11, #0x0 + b _020EBB20 +_020EBB08: + orr r12, r12, #0x1 + subs r6, r6, #0x1 + beq _020EBB78 + adds r0, r0, r0 + adcs r1, r1, r1 + adcs r7, r7, r7 +_020EBB20: + subs r0, r0, r2 + sbcs r1, r1, r3 + sbcs r7, r7, #0x0 + adds r12, r12, r12 + adc r11, r11, r11 + cmp r7, #0x0 + bge _020EBB08 +_020EBB3C: + subs r6, r6, #0x1 + beq _020EBB70 + adds r0, r0, r0 + adcs r1, r1, r1 + adc r7, r7, r7 + adds r0, r0, r2 + adcs r1, r1, r3 + adc r7, r7, #0x0 + adds r12, r12, r12 + adc r11, r11, r11 + cmp r7, #0x0 + bge _020EBB08 + b _020EBB3C +_020EBB70: + adds r0, r0, r2 + adc r1, r1, r3 +_020EBB78: + ands r7, r4, #0x1 + moveq r0, r12 + moveq r1, r11 + beq _020EBBB0 + subs r7, r5, #0x20 + movge r0, r1, lsr r7 + bge _020EBBD4 + rsb r7, r5, #0x20 + mov r0, r0, lsr r5 + orr r0, r0, r1, lsl r7 + mov r1, r1, lsr r5 + b _020EBBB0 +_020EBBA8: + .byte 0x31, 0x07, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 +_020EBBB0: + cmp r4, #0x0 + blt _020EBBC0 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBBC0: + rsbs r0, r0, #0x0 + rsc r1, r1, #0x0 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBBD0: + mov r0, #0x0 +_020EBBD4: + mov r1, #0x0 + cmp r4, #0x0 + blt _020EBBC0 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr + + arm_func_start _ll_udiv +_ll_udiv: ; 0x020EBBE8 + stmdb sp!, {r4-r7,r11-r12,lr} + mov r4, #0x0 + b _020EBBFC + + arm_func_start _ull_mod +_ull_mod: ; 0x020EBBF4 + stmdb sp!, {r4-r7,r11-r12,lr} + mov r4, #0x1 +_020EBBFC: + orrs r5, r3, r2 + bne _020EBC0C + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBC0C: + orrs r5, r1, r3 + bne _020EBAAC + mov r1, r2 + bl _u32_div_not_0_f +_020EBC1C: + .byte 0x00, 0x00, 0x54, 0xE3 + .byte 0x01, 0x00, 0xA0, 0x11, 0x00, 0x10, 0xA0, 0xE3, 0xF0, 0x58, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start _ll_mul +_ll_mul: ; 0x020EBC30 + stmdb sp!, {r4-r5,lr} + umull r5, r4, r0, r2 + mla r4, r0, r3, r4 + mla r4, r2, r1, r4 + mov r1, r4 + mov r0, r5 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start _ll_shl +_ll_shl: ; 0x020EBC50 + ands r2, r2, #0x3f + bxeq lr + subs r3, r2, #0x20 + bge _020EBC74 + rsb r3, r2, #0x20 + mov r1, r1, lsl r2 + orr r1, r1, r0, lsr r3 + mov r0, r0, lsl r2 + bx lr +_020EBC74: + mov r1, r0, lsl r3 + mov r0, #0x0 + bx lr + + arm_func_start _s32_div_f +_s32_div_f: ; 0x20EBC80 + ; Test whether the args have different signs + eor ip, r0, r1 + and ip, ip, #0x80000000 + ; Test the sign of the numerator, and make it positive + cmp r0, #0x0 + rsblt r0, r0, #0x0 + addlt ip, ip, #1 + ; Make the denominator positive, also test for div0 + cmp r1, #0x0 + rsblt r1, r1, #0x0 + beq _020EBE78 + ; If the numerator is less than the denominator, return (0, numerator) + cmp r0, r1 + movcc r1, r0 + movcc r0, #0x0 + bcc _020EBE78 + ; Do the actual division + mov r2, #0x1c + mov r3, r0, lsr #0x4 + cmp r1, r3, lsr #0xc + suble r2, r2, #0x10 + movle r3, r3, lsr #0x10 + cmp r1, r3, lsr #0x4 + suble r2, r2, #0x8 + movle r3, r3, lsr #0x8 + cmp r1, r3 + suble r2, r2, #0x4 + movle r3, r3, lsr #0x4 + mov r0, r0, lsl r2 + rsb r1, r1, #0x0 + adds r0, r0, r0 + add r2, r2, r2, lsl #0x1 + add pc, pc, r2, lsl #0x2 + nop + .rept 32 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + .endr + mov r1, r3 +_020EBE78: + ; If the signs differed originally, negate quotient + ands r3, ip, #0x80000000 + rsbne r0, r0, #0x0 + ; If the numerator was negative, negate remainder + ands r3, ip, #0x1 + rsbne r1, r1, #0x0 + bx lr + +; required to make the linker happy : + + arm_func_start _u32_div_f +_u32_div_f: ; 0x020EBE8C + cmp r1, #0x0 + bxeq lr ; About as wrong as we can be + arm_func_start _u32_div_not_0_f +_u32_div_not_0_f: + cmp r0, r1 + movcc r1, r0 + movcc r0, #0x0 + bxcc lr + mov r2, #0x1c + mov r3, r0, lsr #0x4 + cmp r1, r3, lsr #0xc + suble r2, r2, #0x10 + movle r3, r3, lsr #0x10 + cmp r1, r3, lsr #0x4 + suble r2, r2, #0x8 + movle r3, r3, lsr #0x8 + cmp r1, r3 + suble r2, r2, #0x4 + movle r3, r3, lsr #0x4 + mov r0, r0, lsl r2 + rsb r1, r1, #0x0 + adds r0, r0, r0 + add r2, r2, r2, lsl #0x1 + add pc, pc, r2, lsl #0x2 + nop + .rept 32 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + .endr + mov r1, r3 + bx lr + + arm_func_start _drdiv +_drdiv: ; 0x020EC070 + eor r1, r1, r3 + eor r3, r1, r3 + eor r1, r1, r3 + eor r0, r0, r2 + eor r2, r0, r2 + eor r0, r0, r2 + + arm_func_start _ddiv +_ddiv: ; 0x020EC088 + stmdb sp!, {r4-r6,lr} + ldr lr, _020EC5C8 ; =0x00000FFE + eor r4, r1, r3 + ands r12, lr, r1, lsr #0x13 + cmpne r12, lr + beq _020EC434 + bic r1, r1, lr, lsl #0x14 + orr r1, r1, #0x100000 + add r12, r12, r4, lsr #0x1f +_020EC0AC: + ands r4, lr, r3, lsr #0x13 + cmpne r4, lr + beq _020EC4CC + bic r3, r3, lr, lsl #0x14 + orr r3, r3, #0x100000 +_020EC0C0: + sub r12, r12, r4 + cmp r1, r3 + cmpeq r0, r2 + bhs _020EC0DC + adds r0, r0, r0 + adc r1, r1, r1 + sub r12, r12, #0x2 +_020EC0DC: + sub r4, pc, #0x24 + ldrb lr, [r4, r3, lsr #0xc] + rsbs r2, r2, #0x0 + rsc r3, r3, #0x0 + mov r4, #0x20000000 + mla r5, lr, r3, r4 + mov r6, r3, lsl #0xa + mov r5, r5, lsr #0x7 + mul lr, r5, lr + orr r6, r6, r2, lsr #0x16 + mov lr, lr, lsr #0xd + mul r5, lr, r6 + mov r6, r1, lsl #0xa + orr r6, r6, r0, lsr #0x16 + mov r5, r5, lsr #0x10 + mul r5, lr, r5 + mov lr, lr, lsl #0xe + add lr, lr, r5, lsr #0x10 + umull r5, r6, lr, r6 + umull r4, r5, r6, r2 + mla r5, r3, r6, r5 + mov r4, r4, lsr #0x1a + orr r4, r4, r5, lsl #0x6 + add r4, r4, r0, lsl #0x2 + umull lr, r5, r4, lr + mov r4, #0x0 + adds r5, r5, r6, lsl #0x18 + adc r4, r4, r6, lsr #0x8 + cmp r12, #0x800 + bge _020EC2C0 + add r12, r12, #0x7f0 + adds r12, r12, #0xc + bmi _020EC2D8 + orr r1, r4, r12, lsl #0x1f + bic r12, r12, #0x1 + add r1, r1, r12, lsl #0x13 + tst lr, #0x80000000 + bne _020EC1B0 + rsbs r2, r2, #0x0 + mov r4, r4, lsl #0x1 + add r4, r4, r5, lsr #0x1f + mul lr, r2, r4 + mov r6, #0x0 + mov r4, r5, lsl #0x1 + orr r4, r4, #0x1 + umlal r6, lr, r4, r2 + rsc r3, r3, #0x0 + mla lr, r4, r3, lr + cmp lr, r0, lsl #0x15 + bmi _020EC1B0 + mov r0, r5 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC1B0: + adds r0, r5, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC1C0: + .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1 + .byte 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4 + .byte 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE, 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8 + .byte 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2, 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD + .byte 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8, 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3 + .byte 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF, 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA + .byte 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6, 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2 + .byte 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF, 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB + .byte 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4 + .byte 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1, 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E + .byte 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98 + .byte 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92 + .byte 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90, 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D + .byte 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89 + .byte 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84 + .byte 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80 +_020EC2C0: + movs r1, r12, lsl #0x1f + orr r1, r1, #0x7f000000 + orr r1, r1, #0xf00000 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC2D8: + mvn r6, r12, asr #0x1 + cmp r6, #0x34 + bgt _020EC424 + beq _020EC400 + cmp r6, #0x14 + bge _020EC320 + rsb r6, r6, #0x13 + mov lr, r0, lsl r6 + rsb r6, r6, #0x14 + mov r0, r5, lsr r6 + rsb r6, r6, #0x20 + orr r0, r0, r4, lsl r6 + rsb r6, r6, #0x20 + mov r4, r4, lsr r6 + orr r1, r4, r12, lsl #0x1f + mov r12, lr + mov lr, #0x0 + b _020EC350 +_020EC320: + rsb r6, r6, #0x33 + mov lr, r1, lsl r6 + mov r1, r12, lsl #0x1f + rsb r6, r6, #0x20 + orr r12, lr, r0, lsr r6 + rsb r6, r6, #0x20 + mov lr, r0, lsl r6 + mov r5, r5, lsr #0x15 + orr r5, r5, r4, lsl #0xb + rsb r6, r6, #0x1f + mov r0, r5, lsr r6 + mov r4, #0x0 +_020EC350: + rsbs r2, r2, #0x0 + mul r4, r2, r4 + mov r5, #0x0 + umlal r5, r4, r2, r0 + rsc r3, r3, #0x0 + mla r4, r0, r3, r4 + cmp r4, r12 + cmpeq r5, lr + ldmeqia sp!, {r4-r6,lr} + bxeq lr + adds r5, r5, r2 + adc r4, r4, r3 + cmp r4, r12 + bmi _020EC3F4 + bne _020EC398 + cmp r5, lr + beq _020EC3E4 + blo _020EC3F4 +_020EC398: + subs r5, r5, r2 + sbc r4, r4, r3 +_020EC3A0: + adds r5, r5, r5 + adc r4, r4, r4 + adds r5, r5, r2 + adc r4, r4, r3 + adds lr, lr, lr + adc r12, r12, r12 + cmp r4, r12 + bmi _020EC3E4 + ldmneia sp!, {r4-r6,lr} + bxne lr + cmp r5, lr + blo _020EC3E4 + ldmneia sp!, {r4-r6,lr} + bxne lr + tst r0, #0x1 + ldmeqia sp!, {r4-r6,lr} + bxeq lr +_020EC3E4: + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC3F4: + adds r0, r0, #0x1 + adc r1, r1, #0x0 + b _020EC3A0 +_020EC400: + rsbs r2, r2, #0x0 + rsc r3, r3, #0x0 + cmp r1, r3 + cmpeq r0, r2 + mov r1, r12, lsl #0x1f + mov r0, #0x0 + movne r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC424: + mov r1, r12, lsl #0x1f + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC434: + orrs r5, r0, r1, lsl #0x1 + beq _020EC558 + cmp r12, lr + beq _020EC49C + movs r1, r1, lsl #0xc + beq _020EC478 + clz r5, r1 + movs r1, r1, lsl r5 + sub r12, r12, r5 + add r5, r12, #0x1f + mov r1, r1, lsr #0xb + orr r1, r1, r0, lsr r5 + rsb r5, r5, #0x20 + mov r0, r0, lsl r5 + mov r12, r12, lsl #0x1 + orr r12, r12, r4, lsr #0x1f + b _020EC0AC +_020EC478: + mvn r12, #0x13 + clz r5, r0 + movs r0, r0, lsl r5 + sub r12, r12, r5 + mov r1, r0, lsr #0xb + mov r0, r0, lsl #0x15 + mov r12, r12, lsl #0x1 + orr r12, r12, r4, lsr #0x1f + b _020EC0AC +_020EC49C: + orrs r5, r0, r1, lsl #0xc + bne _020EC580 + bic r5, r3, #0x80000000 + cmp r5, lr, lsl #0x13 + bhs _020EC4C0 + and r5, r3, #0x80000000 + eor r1, r5, r1 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC4C0: + orrs r5, r2, r3, lsl #0xc + bne _020EC5A0 + b _020EC5B8 +_020EC4CC: + orrs r5, r2, r3, lsl #0x1 + beq _020EC544 + cmp r4, lr + beq _020EC52C + movs r3, r3, lsl #0xc + beq _020EC50C + clz r5, r3 + movs r3, r3, lsl r5 + sub r4, r4, r5 + add r5, r4, #0x1f + mov r3, r3, lsr #0xb + orr r3, r3, r2, lsr r5 + rsb r5, r5, #0x20 + mov r2, r2, lsl r5 + mov r4, r4, lsl #0x1 + b _020EC0C0 +_020EC50C: + mvn r4, #0x13 + clz r5, r2 + movs r2, r2, lsl r5 + sub r4, r4, r5 + mov r3, r2, lsr #0xb + mov r2, r2, lsl #0x15 + mov r4, r4, lsl #0x1 + b _020EC0C0 +_020EC52C: + orrs r5, r2, r3, lsl #0xc + bne _020EC5A0 + mov r1, r12, lsl #0x1f + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC544: + mov r1, r12, lsl #0x1f + orr r1, r1, lr, lsl #0x13 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC558: + orrs r5, r2, r3, lsl #0x1 + beq _020EC5B8 + bic r5, r3, #0x80000000 + cmp r5, lr, lsl #0x13 + cmpeq r2, #0x0 + bhi _020EC5A0 + eor r1, r1, r3 + and r1, r1, #0x80000000 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC580: + tst r1, #0x80000 + beq _020EC5B8 + bic r5, r3, #0x80000000 + cmp r5, lr, lsl #0x13 + cmpeq r2, #0x0 + bhi _020EC5A0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC5A0: + tst r3, #0x80000 + beq _020EC5B8 + mov r1, r3 + mov r0, r2 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC5B8: + orr r1, r1, #0x7f000000 + orr r1, r1, #0xf80000 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020EC5C8: .word 0x00000FFE + + arm_func_start _fp_init +_fp_init: ; 0x020EC5CC + bx lr + + arm_func_start sys_writec +sys_writec: ; 0x020EC5D0 + str lr, [sp, #-0x4]! + mov r1, r0 + mov r0, #0x3 + swi 0x123456 + ldr pc, [sp], #0x4 + + arm_func_start sys_readc +sys_readc: ; 0x020EC5E4 + str lr, [sp, #-0x4]! + mov r1, #0x0 + mov r0, #0x7 + swi 0x123456 + ldr pc, [sp], #0x4 + + arm_func_start sys_exit +sys_exit: ; 0x020EC5F8 + mov r1, #0x0 + mov r0, #0x18 + swi 0x123456 + mov pc, lr + + arm_func_start __read_console +__read_console: ; 0x020EC608 + stmdb sp!, {r3-r7,lr} + mov r6, r2 + ldr r5, [r6, #0x0] + mov r7, r1 + cmp r5, #0x0 + mov r4, #0x0 + bls _020EC650 +_020EC624: + bl sys_readc + and r1, r0, #0xff + cmp r1, #0xd + strb r0, [r7, r4] + cmpne r1, #0xa + addeq r0, r4, #0x1 + streq r0, [r6, #0x0] + beq _020EC650 + add r4, r4, #0x1 + cmp r4, r5 + blo _020EC624 +_020EC650: + mov r0, #0x0 + ldmia sp!, {r3-r7,pc} + + arm_func_start __write_console +__write_console: ; 0x020EC658 + stmdb sp!, {r4-r6,lr} + ldr r5, [r2, #0x0] + mov r6, r1 + cmp r5, #0x0 + mov r4, #0x0 + bls _020EC684 +_020EC670: + add r0, r6, r4 + bl sys_writec + add r4, r4, #0x1 + cmp r4, r5 + blo _020EC670 +_020EC684: + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} + + arm_func_start __close_console +__close_console: ; 0x020EC68C + mov r0, #0x0 + bx lr + + arm_func_start __call_static_initializers +__call_static_initializers: ; 0x020EC694 + stmdb sp!, {r4,lr} + ldr r4, _020EC6BC ; =0x02104774 + b _020EC6A8 +_020EC6A0: + blx r0 + add r4, r4, #0x4 +_020EC6A8: + cmp r4, #0x0 + ldrne r0, [r4, #0x0] + cmpne r0, #0x0 + bne _020EC6A0 + ldmia sp!, {r4,pc} + .balign 4 +_020EC6BC: .word 0x02104774 + + arm_func_start __destroy_global_chain +__destroy_global_chain: ; 0x020EC6C0 + stmdb sp!, {r3-r5,lr} + ldr r4, _020EC700 ; =0x021D74C8 + ldr r2, [r4, #0x0] + cmp r2, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020EC6D4: + .byte 0x00, 0x50, 0xE0, 0xE3, 0x00, 0x00, 0x92, 0xE5, 0x05, 0x10, 0xA0, 0xE1 + .byte 0x00, 0x00, 0x84, 0xE5, 0x08, 0x00, 0x92, 0xE5, 0x04, 0x20, 0x92, 0xE5, 0x32, 0xFF, 0x2F, 0xE1 + .byte 0x00, 0x20, 0x94, 0xE5, 0x00, 0x00, 0x52, 0xE3, 0xF6, 0xFF, 0xFF, 0x1A, 0x38, 0x80, 0xBD, 0xE8 +_020EC700: .word 0x021D74C8 + + arm_func_start _ExitProcess +_ExitProcess: ; 0x020EC704 + ldr ip, _020EC70C ; =sys_exit + bx r12 + .balign 4 +_020EC70C: .word sys_exit diff --git a/asm/unk_02000E0C.s b/asm/unk_02000E0C.s index 506ff81a..93c07623 100644 --- a/asm/unk_02000E0C.s +++ b/asm/unk_02000E0C.s @@ -286,7 +286,7 @@ _02001032: blx CARD_IsPulledOut cmp r0, #0x0 beq _02001048 - blx FUN_020D5180 + blx PM_ForceToPowerOff b _0200105C _02001048: ldrh r1, [r4, #0x0] diff --git a/asm/unk_020023C0.s b/asm/unk_020023C0.s index 6bcd42ad..ab564a3f 100644 --- a/asm/unk_020023C0.s +++ b/asm/unk_020023C0.s @@ -3893,7 +3893,7 @@ FUN_020040C8: ; 0x020040C8 push {r3, lr} blx MIC_Init mov r0, #0x1 - blx FUN_020D5168 + blx PM_SetAmp mov r0, #0x2 blx FUN_020D5150 pop {r3, pc} @@ -34136,7 +34136,7 @@ _02012598: .word 0x020ED3C8 thumb_func_start FUN_0201259C FUN_0201259C: ; 0x0201259C push {r3, lr} - blx FUN_020D614C + blx FUNRTC_Init ldr r3, _020125CC ; =0x021C4808 mov r0, #0x0 add r2, r3, #0x0 diff --git a/asm/unk_020C9C0C.s b/asm/unk_020C9C0C.s index b5fab565..c6cdac46 100644 --- a/asm/unk_020C9C0C.s +++ b/asm/unk_020C9C0C.s @@ -13261,506 +13261,3 @@ _020D4AD8: .word 0x021D54AC _020D4ADC: .word 0x021D54B0 _020D4AE0: .word 0x027FFF90 _020D4AE4: .word MicCommonCallback - - arm_func_start PM_DeletePostSleepCallback -PM_DeletePostSleepCallback: ; 0x020D4AE8 - ldr ip, _020D4AF8 ; =0x020D4B78 - mov r1, r0 - ldr r0, _020D4AFC ; =0x021D54E0 - bx r12 - .balign 4 -_020D4AF8: .word 0x020D4B78 -_020D4AFC: .word 0x021D54E0 - - arm_func_start PM_DeletePreSleepCallback -PM_DeletePreSleepCallback: ; 0x020D4B00 - ldr ip, _020D4B10 ; =0x020D4B78 - mov r1, r0 - ldr r0, _020D4B14 ; =0x021D54D8 - bx r12 - .balign 4 -_020D4B10: .word 0x020D4B78 -_020D4B14: .word 0x021D54D8 - - arm_func_start PM_AppendPostSleepCallback -PM_AppendPostSleepCallback: ; 0x020D4B18 - ldr ip, _020D4B28 ; =FUN_020D4BC4 - mov r1, r0 - ldr r0, _020D4B2C ; =0x021D54E0 - bx r12 - .balign 4 -_020D4B28: .word FUN_020D4BC4 -_020D4B2C: .word 0x021D54E0 - - arm_func_start PM_PrependPreSleepCallback -PM_PrependPreSleepCallback: ; 0x020D4B30 - ldr ip, _020D4B40 ; =FUN_020D4C0C - mov r1, r0 - ldr r0, _020D4B44 ; =0x021D54D8 - bx r12 - .balign 4 -_020D4B40: .word FUN_020D4C0C -_020D4B44: .word 0x021D54D8 - - arm_func_start PMi_ExecuteList -PMi_ExecuteList: ; 0x020D4B48 - stmdb sp!, {r4,lr} - movs r4, r0 - ldmeqia sp!, {r4,lr} - bxeq lr -_020D4B58: - ldr r0, [r4, #0x4] - ldr r1, [r4, #0x0] - blx r1 - ldr r4, [r4, #0x8] - cmp r4, #0x0 - bne _020D4B58 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start FUN_020D4B78 -FUN_020D4B78: - cmp r0, #0x0 - bxeq lr - ldr r3, [r0] - mov r2, r3 - cmp r3, #0x0 - bxeq lr -_020D4B90: - cmp r3, r1 - bne _020D4BB0 - cmp r3, r2 - ldreq r1, [r3, #0x8] - streq r1, [r0] - ldrne r0, [r3, #0x8] - strne r0, [r2, #0x8] - bx lr -_020D4BB0: - mov r2, r3 - ldr r3, [r3, #0x8] - cmp r3, #0x0 - bne _020D4B90 - bx lr - - arm_func_start FUN_020D4BC4 -FUN_020D4BC4: ; 0x020D4BC4 - cmp r0, #0x0 - bxeq lr - ldr r2, [r0, #0x0] - cmp r2, #0x0 - moveq r2, #0x0 - streq r2, [r1, #0x8] - streq r1, [r0, #0x0] - bxeq lr - ldr r0, [r2, #0x8] - cmp r0, #0x0 - beq _020D4C00 -_020D4BF0: - mov r2, r0 - ldr r0, [r0, #0x8] - cmp r0, #0x0 - bne _020D4BF0 -_020D4C00: - str r0, [r1, #0x8] - str r1, [r2, #0x8] - bx lr - - arm_func_start FUN_020D4C0C -FUN_020D4C0C: ; 0x020D4C0C - cmp r0, #0x0 - ldrne r2, [r0, #0x0] - strne r2, [r1, #0x8] - strne r1, [r0, #0x0] - bx lr - - arm_func_start PM_GetLEDPattern -PM_GetLEDPattern: ; 0x020D4C20 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D4C58 ; =0x020D587C - add r2, sp, #0x0 - bl PM_GetLEDPatternAsync -_020D4C34: - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmnefd sp!, {lr} - bxne lr - bl PMi_WaitBusy - ldr r0, [sp] - add sp, sp, #0x4 - ldmfd sp!, {lr} - bx lr -_020D4C58: .word 0x020D587C - - arm_func_start PM_GetLEDPatternAsync -PM_GetLEDPatternAsync: - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl PMi_Lock -_020D4C70: - cmp r0, #0x0 - moveq r0, #0x1 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - ldr r1, _020D4CA4 - ldr r0, _020D4CA8 - str r5, [r1, #0x4] - str r4, [r1, #0x8] - str r6, [r1, #0xC] - bl PMi_SendPxiData - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020D4CA4: .word 0x021D54E4 -_020D4CA8: .word 0x03006700 - - arm_func_start PMi_SendLEDPatternCommand -PMi_SendLEDPatternCommand: ; 0x020D4CAC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D4CE4 ; =0x020D587C - add r2, sp, #0x0 - bl PMi_SendLEDPatternCommandAsync -_020D4CC0: - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmnefd sp!, {lr} - bxne lr - bl PMi_WaitBusy - ldr r0, [sp] - add sp, sp, #0x4 - ldmfd sp!, {lr} - bx lr -_020D4CE4: .word 0x020D587C - - arm_func_start PMi_SendLEDPatternCommandAsync -PMi_SendLEDPatternCommandAsync: - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl PMi_Lock -_020D4CFC: - cmp r0, #0x0 - moveq r0, #0x1 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - ldr r0, _020D4D34 - ldr r1, _020D4D38 - and r2, r6, #0xff - orr r0, r2, r0 - str r5, [r1, #0x4] - str r4, [r1, #0x8] - bl PMi_SendPxiData - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020D4D34: .word 0x03006600 -_020D4D38: .word 0x021D54E4 - - arm_func_start PM_GetLCDPower -PM_GetLCDPower: ; 0x020D4D3C - ldr r0, _020D4D54 ; =0x04000304 - ldrh r0, [r0, #0x0] - ands r0, r0, #0x1 - movne r0, #0x1 - moveq r0, #0x0 - bx lr - .balign 4 -_020D4D54: .word 0x04000304 - - arm_func_start PM_SetLCDPower -PM_SetLCDPower: ; 0x020D4D58 - ldr ip, _020D4D74 ; =PMi_SetLCDPower - mov r1, #0x0 - cmp r0, #0x1 - movne r0, #0x0 - mov r2, r1 - mov r3, #0x1 - bx r12 - .balign 4 -_020D4D74: .word PMi_SetLCDPower - - arm_func_start PMi_SetLCDPower -PMi_SetLCDPower: ; 0x020D4D78 - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0x0 - beq _020D4E00 - cmp r0, #0x1 - bne _020D4E4C - cmp r2, #0x0 - bne _020D4DC0 - ldr r2, _020D4E5C ; =0x027FFC3C - ldr r0, _020D4E60 ; =0x021D54DC - ldr r2, [r2, #0x0] - ldr r0, [r0, #0x0] - sub r0, r2, r0 - cmp r0, #0x7 - addls sp, sp, #0x4 - movls r0, #0x0 - ldmlsia sp!, {lr} - bxls lr -_020D4DC0: - cmp r1, #0x0 - beq _020D4DEC - cmp r3, #0x0 - beq _020D4DDC - mov r0, r1 - bl PMi_SetLED - b _020D4DEC -_020D4DDC: - mov r0, r1 - mov r1, #0x0 - mov r2, r1 - bl PMi_SetLEDAsync -_020D4DEC: - ldr r1, _020D4E64 ; =0x04000304 - ldrh r0, [r1, #0x0] - orr r0, r0, #0x1 - strh r0, [r1, #0x0] - b _020D4E4C -_020D4E00: - ldr lr, _020D4E64 ; =0x04000304 - ldr r2, _020D4E5C ; =0x027FFC3C - ldrh r12, [lr, #0x0] - ldr r0, _020D4E60 ; =0x021D54DC - cmp r1, #0x0 - bic r12, r12, #0x1 - strh r12, [lr, #0x0] - ldr r2, [r2, #0x0] - str r2, [r0, #0x0] - beq _020D4E4C - cmp r3, #0x0 - beq _020D4E3C - mov r0, r1 - bl PMi_SetLED - b _020D4E4C -_020D4E3C: - mov r0, r1 - mov r1, #0x0 - mov r2, r1 - bl PMi_SetLEDAsync -_020D4E4C: - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D4E5C: .word 0x027FFC3C -_020D4E60: .word 0x021D54DC -_020D4E64: .word 0x04000304 - - arm_func_start PM_GoSleepMode -PM_GoSleepMode: ; 0x020D4E68 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x1c - ldr r3, _020D5084 ; =0x021D54D8 - mov r10, r0 - ldr r0, [r3, #0x0] - mov r9, r1 - mov r11, r2 - mov r8, #0x0 - bl PMi_ExecuteList - ldr r1, _020D5088 ; =0x04000208 - mov r0, r8 - ldrh r4, [r1, #0x0] - strh r0, [r1, #0x0] - bl OS_DisableInterrupts -_020D4EA0: - str r0, [sp] - ldr r0, _020D508C - bl OS_DisableIrqMask - str r0, [sp, #0x4] - mov r0, #0x40000 - bl OS_SetIrqMask - ldr r0, [sp] - bl OS_RestoreInterrupts - ldr r2, _020D5088 - mov r1, #0x1 - ldrh r0, [r2] - ands r0, sl, #0x8 - strh r1, [r2] - beq _020D4EE8 - ldr r0, _020D5090 - ldrh r0, [r0] - cmp r0, #0x2 - biceq sl, sl, #0x8 -_020D4EE8: - ands r0, sl, #0x10 - beq _020D4EFC - bl CTRDG_IsExisting - cmp r0, #0x0 - biceq sl, sl, #0x10 -_020D4EFC: - ldr r0, _020D5094 - mov r1, #0x4000000 - ldr r7, [r1] - ldr r6, [r0] - bl PM_GetLCDPower - str r0, [sp, #0x8] - add r0, sp, #0xC - add r1, sp, #0x10 - bl PM_GetBackLight - mov r0, #0x2 - mov r1, #0x0 - bl FUN_020D526C - ldr r2, _020D5098 - ldr r0, [r2] - str r0, [sp, #0x14] -_020D4F38: - ldr r1, [r2] - ldr r0, [sp, #0x14] - cmp r0, r1 - beq _020D4F38 - ldr r0, [r2] - mov r2, #0x4000000 - str r0, [sp, #0x14] - ldr r0, [r2] - ldr r1, _020D5094 - bic r0, r0, #0x30000 - str r0, [r2] - ldr r0, [r1] - bic r0, r0, #0x10000 - str r0, [r1] - ldr r2, _020D5098 -_020D4F74: - ldr r1, [r2] - ldr r0, [sp, #0x14] - cmp r0, r1 - beq _020D4F74 - ldr r0, [r2] - str r0, [sp, #0x14] - ldr r2, _020D5098 -_020D4F90: - ldr r1, [r2] - ldr r0, [sp, #0x14] - cmp r0, r1 - beq _020D4F90 - ldr r0, [sp, #0xC] - ldr r1, [sp, #0x10] - orr r0, sl, r0, lsl #0x5 - orr r0, r0, r1, lsl #0x6 - mov r0, r0, lsl #0x10 - mov r5, r0, lsr #0x10 - orr r0, r9, fp - mov r0, r0, lsl #0x10 - mov r9, r0, lsr #0x10 -_020D4FC4: - mov r0, r5 - mov r1, r9 - bl PMi_SendSleepStart - cmp r0, #0x0 - bne _020D4FC4 - bl OS_Halt - ldr r0, _020D509C - bl OS_SpinWait - ands r0, sl, #0x8 - beq _020D4FFC - ldr r0, _020D50A0 - ldr r0, [r0] - ands r0, r0, #0x100000 - movne r8, #0x1 -_020D4FFC: - cmp r8, #0x0 - bne _020D5040 - ldr r0, [sp, #0x8] - cmp r0, #0x1 - bne _020D5028 - mov r0, #0x1 - mov r1, r0 - mov r2, r0 - mov r3, #0x0 - bl PMi_SetLCDPower - b _020D5030 -_020D5028: - mov r0, #0x1 - bl PMi_SetLED -_020D5030: - mov r1, #0x4000000 - ldr r0, _020D5094 - str r7, [r1] - str r6, [r0] -_020D5040: - bl OS_DisableInterrupts - ldr r0, [sp, #0x4] - bl OS_SetIrqMask - ldr r0, [sp] - bl OS_RestoreInterrupts - ldr r1, _020D5088 - cmp r8, #0x0 - ldrh r0, [r1] - strh r4, [r1] - beq _020D506C - bl FUN_020D5180 -_020D506C: - ldr r0, _020D50A4 - ldr r0, [r0] - bl PMi_ExecuteList - add sp, sp, #0x1C - ldmia sp!, {r4-r11, lr} - bx lr -_020D5084: .word 0x021D54D8 -_020D5088: .word 0x04000208 -_020D508C: .word 0x003FFFFF -_020D5090: .word 0x027FFC40 -_020D5094: .word 0x04001000 -_020D5098: .word 0x027FFC3C -_020D509C: .word 0x00996A00 -_020D50A0: .word 0x04000214 -_020D50A4: .word 0x021D54E0 - - - arm_func_start PMi_SendPxiData -PMi_SendPxiData: ; 0x020D50A8 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, #0x8 - mov r4, #0x0 -_020D50B8: - mov r0, r5 - mov r1, r6 - mov r2, r4 - bl PXI_SendWordByFifo -_020D50C8: - cmp r0, #0 - bne _020D50B8 - ldmia sp!, {r4-r6, lr} - bx lr - - arm_func_start PM_GetBackLight -PM_GetBackLight: ; 0x020D50D8 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r1 - mov r5, r0 - add r1, sp, #0x0 - mov r0, #0x0 - bl PMi_ReadRegister -_020D50F4: - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - cmp r5, #0x0 - beq _020D5120 - ldrh r1, [sp] - ands r1, r1, #0x8 - movne r1, #0x1 - moveq r1, #0x0 - str r1, [r5] -_020D5120: - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldrh r1, [sp] - ands r1, r1, #0x4 - movne r1, #0x1 - moveq r1, #0x0 - str r1, [r4] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr diff --git a/asm/unk_020D5150.s b/asm/unk_020D5150.s deleted file mode 100644 index ed1fb8b6..00000000 --- a/asm/unk_020D5150.s +++ /dev/null @@ -1,21374 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - ; TODO: disassemble the rest of the .byte s - - .text - - arm_func_start PM_SetAmpGain -PM_SetAmpGain: - ldr ip, _020D5164 ; =0x020D53DC - mov r0, r0, lsl #0x10 - mov r1, r0, lsr #0x10 - mov r0, #0x3 - bx r12 - .balign 4 -_020D5164: .word 0x020D53DC - - arm_func_start PM_SetAmp -PM_SetAmp: ; 0x020D5168 - ldr ip, _020D517C ; =0x020D53DC - mov r0, r0, lsl #0x10 - mov r1, r0, lsr #0x10 - mov r0, #0x2 - bx r12 - .balign 4 -_020D517C: .word 0x020D53DC - - arm_func_start PM_ForceToPowerOff -PM_ForceToPowerOff: ; 0x020D5180 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020D51B8 ; =PMi_DummyCallback - add r1, sp, #0x0 - bl PM_ForceToPowerOffAsync -_020D5194: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0xB6, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x9D, 0xE5, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D51B8: .word PMi_DummyCallback - - arm_func_start PM_ForceToPowerOffAsync -PM_ForceToPowerOffAsync: - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - mov r7, r0 - ldr r0, _020D5268 ; =0x00996A00 - mov r6, r1 - bl OS_SpinWait - bl PM_GetLCDPower - cmp r0, #0x1 - beq _020D524C - add r0, sp, #0x0 - add r1, sp, #0x4 - bl PM_GetBackLight -_020D51EC: - .byte 0x00, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x19, 0x00, 0x00, 0xEB, 0x04, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x0A - .byte 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x13, 0x00, 0x00, 0xEB, 0x01, 0x00, 0xA0, 0xE3 - .byte 0xCC, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x34, 0x50, 0x9F, 0xE5 - .byte 0x01, 0x40, 0xA0, 0xE3, 0x05, 0x00, 0xA0, 0xE1, 0x50, 0xE0, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1 - .byte 0xC4, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0xF9, 0xFF, 0xFF, 0x0A -_020D524C: - mov r1, r7 - mov r2, r6 - mov r0, #0xe - bl PM_SendUtilityCommandAsync - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020D5268: .word 0x00996A00 - - arm_func_start PM_SetBackLight -PM_SetBackLight: ; 0x020D526C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020D52A4 ; =PMi_DummyCallback - add r3, sp, #0x0 - bl PM_SetBackLightAsync -_020D5280: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x7B, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x9D, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 -_020D52A4: .word PMi_DummyCallback - - arm_func_start PM_SetBackLightAsync -PM_SetBackLightAsync: - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0x0 - mov r12, #0x0 - bne _020D52D0 - cmp r1, #0x1 - moveq r12, #0x6 - cmp r1, #0x0 - moveq r12, #0x7 - b _020D5304 -_020D52D0: - cmp r0, #0x1 - bne _020D52EC - cmp r1, #0x1 - moveq r12, #0x4 - cmp r1, #0x0 - moveq r12, #0x5 - b _020D5304 -_020D52EC: - cmp r0, #0x2 - bne _020D5304 - cmp r1, #0x1 - moveq r12, #0x8 - cmp r1, #0x0 - moveq r12, #0x9 -_020D5304: - cmp r12, #0x0 - addeq sp, sp, #0x4 - ldreq r0, _020D5334 ; =0x0000FFFF - ldmeqia sp!, {lr} - bxeq lr - mov r1, r2 - mov r0, r12 - mov r2, r3 - bl PM_SendUtilityCommandAsync - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D5334: .word 0x0000FFFF - - arm_func_start PMi_SetLED -PMi_SetLED: ; 0x020D5338 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D5370 ; =PMi_DummyCallback - add r2, sp, #0x0 - bl PMi_SetLEDAsync -_020D534C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x48, 0x01, 0x00, 0xEB - .byte 0x00, 0x00, 0x9D, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D5370: .word PMi_DummyCallback - - arm_func_start PMi_SetLEDAsync -PMi_SetLEDAsync: - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0x1 - beq _020D5398 - cmp r0, #0x2 - beq _020D53A8 - cmp r0, #0x3 - beq _020D53A0 - b _020D53B0 -_020D5398: - mov r0, #0x1 - b _020D53B4 -_020D53A0: - mov r0, #0x2 - b _020D53B4 -_020D53A8: - mov r0, #0x3 - b _020D53B4 -_020D53B0: - mov r0, #0x0 -_020D53B4: - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldreq r0, _020D53D8 ; =0x0000FFFF - ldmeqia sp!, {lr} - bxeq lr - bl PM_SendUtilityCommandAsync - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D53D8: .word 0x0000FFFF -_020D53DC: - .byte 0x00, 0x40, 0x2D, 0xE9 - .byte 0x04, 0xD0, 0x4D, 0xE2, 0x28, 0x20, 0x9F, 0xE5, 0x00, 0x30, 0x8D, 0xE2, 0x09, 0x00, 0x00, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x1F, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x9D, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x7C, 0x58, 0x0D, 0x02 - - arm_func_start PMi_WriteRegisterAsync -PMi_WriteRegisterAsync: ; 0x020D5418 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r4, r1 - mov r6, r2 - mov r5, r3 - bl PMi_Lock -_020D5434: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x01, 0x00, 0xA0, 0x03 - .byte 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x38, 0x00, 0x9F, 0xE5, 0x38, 0x10, 0x9F, 0xE5 - .byte 0xFF, 0x20, 0x07, 0xE2, 0x00, 0x00, 0x82, 0xE1, 0x04, 0x60, 0x81, 0xE5, 0x08, 0x50, 0x81, 0xE5 - .byte 0x10, 0xFF, 0xFF, 0xEB, 0x24, 0x00, 0x9F, 0xE5, 0x24, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0x04, 0xE0 - .byte 0x01, 0x00, 0x80, 0xE1, 0x0B, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x64, 0x00, 0x02, 0xE4, 0x54, 0x1D, 0x02 - .byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01 - - arm_func_start PMi_ReadRegister -PMi_ReadRegister: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020D54D0 ; =PMi_DummyCallback - add r3, sp, #0x0 - bl PMi_ReadRegisterAsync -_020D54AC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0xF0, 0x00, 0x00, 0xEB - .byte 0x00, 0x00, 0x9D, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D54D0: .word PMi_DummyCallback - - arm_func_start PMi_ReadRegisterAsync -PMi_ReadRegisterAsync: - stmdb sp!, {r4-r8,lr} - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl PMi_Lock -_020D54EC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0xA0, 0x03, 0xF0, 0x41, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x38, 0xC0, 0x9F, 0xE5 - .byte 0x38, 0x10, 0x9F, 0xE5, 0x38, 0x00, 0x9F, 0xE5, 0xFF, 0x20, 0x07, 0xE2, 0x87, 0xE1, 0xA0, 0xE1 - .byte 0x00, 0x80, 0xA0, 0xE3, 0x2C, 0x30, 0x9F, 0xE5, 0xBE, 0x80, 0x8C, 0xE1, 0x00, 0x00, 0x82, 0xE1 - .byte 0x04, 0x50, 0x81, 0xE5, 0x08, 0x40, 0x81, 0xE5, 0x87, 0x61, 0x83, 0xE7, 0xDD, 0xFE, 0xFF, 0xEB - .byte 0x08, 0x00, 0xA0, 0xE1, 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x0C, 0x55, 0x1D, 0x02 - .byte 0xE4, 0x54, 0x1D, 0x02, 0x00, 0x65, 0x00, 0x03, 0x10, 0x55, 0x1D, 0x02 - - arm_func_start PM_SendUtilityCommandAsync -PM_SendUtilityCommandAsync: ; 0x020D554C - stmdb sp!, {r4-r6,lr} - mov r4, r0 - mov r6, r1 - mov r5, r2 - bl PMi_Lock -_020D5560: - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x24, 0x28, 0xA0, 0xE1, 0x34, 0x10, 0x9F, 0xE5, 0x34, 0x00, 0x9F, 0xE5, 0xFF, 0x20, 0x02, 0xE2 - .byte 0x00, 0x00, 0x82, 0xE1, 0x04, 0x60, 0x81, 0xE5, 0x08, 0x50, 0x81, 0xE5, 0xC5, 0xFE, 0xFF, 0xEB - .byte 0x20, 0x00, 0x9F, 0xE5, 0x20, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0x04, 0xE0, 0x01, 0x00, 0x80, 0xE1 - .byte 0xC0, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xE4, 0x54, 0x1D, 0x02, 0x00, 0x63, 0x00, 0x02, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01 - - arm_func_start PMi_SendSleepStart -PMi_SendSleepStart: ; 0x020D55C0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - bl PMi_Lock -_020D55D4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x01, 0x00, 0xA0, 0x03 - .byte 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x70, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3 - .byte 0x6C, 0x00, 0x9F, 0xE5, 0x00, 0x20, 0x81, 0xE5, 0xAA, 0xFE, 0xFF, 0xEB, 0x5C, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x91, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x50, 0xC0, 0x9F, 0xE5, 0x00, 0x00, 0x81, 0xE5, 0x00, 0x20, 0xA0, 0xE1, 0x00, 0x30, 0xA0, 0xE1 - .byte 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x8C, 0xE5, 0xD2, 0xFD, 0xFF, 0xEB, 0x38, 0x00, 0x9F, 0xE5 - .byte 0xFF, 0x10, 0x05, 0xE2, 0x00, 0x00, 0x81, 0xE1, 0x9A, 0xFE, 0xFF, 0xEB, 0x2C, 0x00, 0x9F, 0xE5 - .byte 0x2C, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0x04, 0xE0, 0x01, 0x00, 0x80, 0xE1, 0x95, 0xFE, 0xFF, 0xEB - .byte 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xD0, 0x54, 0x1D, 0x02, 0x00, 0x60, 0x00, 0x03, 0xD4, 0x54, 0x1D, 0x02, 0x00, 0x61, 0x00, 0x02 - .byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01 - - arm_func_start PMi_CommonCallback -PMi_CommonCallback: ; 0x020D5678 - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r2, #0x0 - beq _020D569C - mov r0, #0x2 - bl PMi_CallCallbackAndUnlock - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020D569C: - and r0, r1, #0x7f00 - mov r0, r0, lsl #0x8 - and r1, r1, #0xff - mov r2, r0, lsr #0x10 - mov r0, r1, lsl #0x10 - cmp r2, #0x70 - mov r0, r0, lsr #0x10 - blo _020D56FC - cmp r2, #0x74 - bhi _020D56FC - ldr r1, _020D5750 ; =0x021D5510 - sub r2, r2, #0x70 - and r0, r0, #0xff - ldr r1, [r1, r2, lsl #0x3] - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r1, #0x0 - strneh r0, [r1, #0x0] - mov r1, r2, lsl #0x3 - ldr r0, _020D5754 ; =0x021D550C - mov r2, #0x1 - strh r2, [r0, r1] - mov r0, #0x0 - b _020D5740 -_020D56FC: - cmp r2, #0x60 - ldreq r1, _020D5758 ; =0x021D54D0 - moveq r2, #0x1 - streq r2, [r1, #0x0] - beq _020D5740 - cmp r2, #0x62 - ldreq r1, _020D575C ; =0x021D54D4 - moveq r2, #0x1 - streq r2, [r1, #0x0] - beq _020D5740 - cmp r2, #0x67 - bne _020D5740 - ldr r1, _020D5760 ; =0x021D54E4 - ldr r1, [r1, #0xc] - cmp r1, #0x0 - strne r0, [r1, #0x0] - mov r0, #0x0 -_020D5740: - bl PMi_CallCallbackAndUnlock - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D5750: .word 0x021D5510 -_020D5754: .word 0x021D550C -_020D5758: .word 0x021D54D0 -_020D575C: .word 0x021D54D4 -_020D5760: .word 0x021D54E4 - - arm_func_start PM_Init -PM_Init: ; 0x020D5764 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r1, _020D580C ; =0x021D54CC - ldrh r0, [r1, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - ldr r0, _020D5810 ; =0x021D54E4 - mov r2, #0x0 - mov r3, #0x1 - strh r3, [r1, #0x0] - str r2, [r0, #0x0] - str r2, [r0, #0x4] - bl PXI_Init - mov r5, #0x8 - mov r4, #0x1 - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady -_020D57B4: - .byte 0x00, 0x00, 0x50, 0xE3, 0xFA, 0xFF, 0xFF, 0x0A, 0x50, 0x10, 0x9F, 0xE5 - .byte 0x08, 0x00, 0xA0, 0xE3, 0x7C, 0xE9, 0xFF, 0xEB, 0x00, 0x30, 0xA0, 0xE3, 0x44, 0x00, 0x9F, 0xE5 - .byte 0x03, 0x20, 0xA0, 0xE1, 0x83, 0x11, 0xA0, 0xE1, 0x01, 0x30, 0x83, 0xE2, 0xB1, 0x20, 0x80, 0xE1 - .byte 0x05, 0x00, 0x53, 0xE3, 0xFA, 0xFF, 0xFF, 0xBA, 0x2C, 0x00, 0x9F, 0xE5, 0x2A, 0xDA, 0xFF, 0xEB - .byte 0x28, 0x10, 0x9F, 0xE5, 0x28, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x91, 0xE5, 0x00, 0x10, 0x80, 0xE5 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D580C: .word 0x021D54CC -_020D5810: .word 0x021D54E4 -_020D5814: - .byte 0x78, 0x56, 0x0D, 0x02, 0x0C, 0x55, 0x1D, 0x02, 0xF4, 0x54, 0x1D, 0x02 - .byte 0x3C, 0xFC, 0x7F, 0x02, 0xDC, 0x54, 0x1D, 0x02 - - arm_func_start PMi_CallCallbackAndUnlock -PMi_CallCallbackAndUnlock: ; 0x020D5828 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020D5878 ; =0x021D54E4 - ldr r1, [r2, #0x0] - ldr r12, [r2, #0x4] - cmp r1, #0x0 - movne r3, #0x0 - strne r3, [r2, #0x0] - cmp r12, #0x0 - addeq sp, sp, #0x4 - ldr r1, [r2, #0x8] - ldmeqia sp!, {lr} - bxeq lr - ldr r2, _020D5878 ; =0x021D54E4 - mov r3, #0x0 - str r3, [r2, #0x4] - blx r12 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D5878: .word 0x021D54E4 - - arm_func_start PMi_DummyCallback -PMi_DummyCallback: ; 0x020D587C - str r0, [r1, #0x0] - bx lr - - arm_func_start PMi_WaitBusy -PMi_WaitBusy: ; 0x020D5884 - stmdb sp!, {r4,lr} - ldr r4, _020D58C0 ; =0x021D54E4 - ldr r0, [r4, #0x0] - cmp r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr -_020D589C: - bl OS_GetCpsrIrq - cmp r0, #0x80 - bne _020D58AC - bl PXIi_HandlerRecvFifoNotEmpty -_020D58AC: - ldr r0, [r4, #0x0] - cmp r0, #0x0 - bne _020D589C - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D58C0: .word 0x021D54E4 - - arm_func_start PMi_Lock -PMi_Lock: - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - ldr r1, _020D5910 ; =0x021D54E4 - ldr r2, [r1, #0x0] - cmp r2, #0x0 - beq _020D58F4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {lr} - bx lr -_020D58F4: - mov r2, #0x1 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D5910: .word 0x021D54E4 - - arm_func_start RtcWaitBusy -RtcWaitBusy: ; 0x020D5914 - ldr ip, _020D5928 ; =0x021D5538 -_020D5918: - ldr r0, [r12, #0x0] - cmp r0, #0x1 - beq _020D5918 - bx lr - .balign 4 -_020D5928: .word 0x021D5538 - - arm_func_start RtcGetResultCallback -RtcGetResultCallback: ; 0x020D592C - ldr r1, _020D5938 ; =0x021D5538 - str r0, [r1, #0x20] - bx lr - .balign 4 -_020D5938: .word 0x021D5538 - - arm_func_start RtcBCD2HEX -RtcBCD2HEX: ; 0x020D593C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, #0x0 - mov r3, r5 - mov r2, r5 -_020D5950: - mov r1, r0, lsr r2 - and r1, r1, #0xf - cmp r1, #0xa - addcs sp, sp, #0x4 - movcs r0, #0x0 - ldmcsia sp!, {r4-r5,lr} - bxcs lr - add r3, r3, #0x1 - cmp r3, #0x8 - add r2, r2, #0x4 - blt _020D5950 - mov r12, #0x0 - mov lr, r12 - mov r4, #0x1 - mov r2, #0xa -_020D598C: - mov r1, r0, lsr lr - and r3, r1, #0xf - mul r1, r4, r2 - mla r5, r4, r3, r5 - add r12, r12, #0x1 - mov r4, r1 - cmp r12, #0x8 - add lr, lr, #0x4 - blt _020D598C - mov r0, r5 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start RtcCommonCallback -RtcCommonCallback: ; 0x020D59C0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - cmp r2, #0x0 - beq _020D5A30 - ldr r0, _020D5F30 ; =0x021D5538 - ldr r2, _020D5F30 ; =0x021D5538 - ldr r1, [r0, #0x18] - ldr r4, [r2, #0x4] - cmp r1, #0x0 - movne r1, #0x0 - strne r1, [r0, #0x18] - ldr r0, _020D5F30 ; =0x021D5538 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - movne r1, #0x0 - strne r1, [r0, #0x0] - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r1, [r2, #0x10] - mov r3, #0x0 - mov r0, #0x6 - str r3, [r2, #0x4] - blx r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr -_020D5A30: - and r0, r1, #0x7f00 - mov r0, r0, lsr #0x8 - and r0, r0, #0xff - cmp r0, #0x30 - and r2, r1, #0xff - bne _020D5A70 - ldr r0, _020D5F30 ; =0x021D5538 - ldr r0, [r0, #0x1c] - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - blx r0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr -_020D5A70: - cmp r2, #0x0 - bne _020D5E88 - ldr r0, _020D5F30 ; =0x021D5538 - mov r5, #0x0 - ldr r1, [r0, #0x14] - cmp r1, #0xf - addls pc, pc, r1, lsl #0x2 - b _020D5E74 -_020D5A90: - .byte 0x0E, 0x00, 0x00, 0xEA, 0x22, 0x00, 0x00, 0xEA, 0x35, 0x00, 0x00, 0xEA, 0x0B, 0x01, 0x00, 0xEA - .byte 0x0A, 0x01, 0x00, 0xEA, 0x09, 0x01, 0x00, 0xEA, 0x5B, 0x00, 0x00, 0xEA, 0x66, 0x00, 0x00, 0xEA - .byte 0x6E, 0x00, 0x00, 0xEA, 0x96, 0x00, 0x00, 0xEA, 0xC2, 0x00, 0x00, 0xEA, 0x03, 0x01, 0x00, 0xEA - .byte 0x02, 0x01, 0x00, 0xEA, 0x01, 0x01, 0x00, 0xEA, 0x00, 0x01, 0x00, 0xEA, 0xFF, 0x00, 0x00, 0xEA - .byte 0x5C, 0x14, 0x9F, 0xE5, 0x08, 0x40, 0x90, 0xE5, 0x00, 0x00, 0xD1, 0xE5, 0x96, 0xFF, 0xFF, 0xEB - .byte 0x4C, 0x14, 0x9F, 0xE5, 0x00, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x80, 0x09, 0xA0, 0xE1 - .byte 0xA0, 0x0D, 0xA0, 0xE1, 0x90, 0xFF, 0xFF, 0xEB, 0x34, 0x14, 0x9F, 0xE5, 0x04, 0x00, 0x84, 0xE5 - .byte 0x00, 0x00, 0x91, 0xE5, 0x00, 0x05, 0xA0, 0xE1, 0x20, 0x0D, 0xA0, 0xE1, 0x8A, 0xFF, 0xFF, 0xEB - .byte 0x08, 0x00, 0x84, 0xE5, 0x04, 0x00, 0xA0, 0xE1, 0xCA, 0x01, 0x00, 0xEB, 0x0C, 0x00, 0x84, 0xE5 - .byte 0xEA, 0x00, 0x00, 0xEA, 0x0C, 0x14, 0x9F, 0xE5, 0x08, 0x40, 0x90, 0xE5, 0x00, 0x00, 0x91, 0xE5 - .byte 0x00, 0x0D, 0xA0, 0xE1, 0x20, 0x0D, 0xA0, 0xE1, 0x7F, 0xFF, 0xFF, 0xEB, 0xF4, 0x13, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x80, 0x08, 0xA0, 0xE1, 0xA0, 0x0C, 0xA0, 0xE1 - .byte 0x79, 0xFF, 0xFF, 0xEB, 0xDC, 0x13, 0x9F, 0xE5, 0x04, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5 - .byte 0x80, 0x04, 0xA0, 0xE1, 0xA0, 0x0C, 0xA0, 0xE1, 0x73, 0xFF, 0xFF, 0xEB, 0x08, 0x00, 0x84, 0xE5 - .byte 0xD6, 0x00, 0x00, 0xEA, 0xB8, 0x13, 0x9F, 0xE5, 0x08, 0x40, 0x90, 0xE5, 0x00, 0x00, 0x91, 0xE5 - .byte 0xFF, 0x00, 0x00, 0xE2, 0x6C, 0xFF, 0xFF, 0xEB, 0xA4, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0x84, 0xE5 - .byte 0x00, 0x00, 0x91, 0xE5, 0x80, 0x09, 0xA0, 0xE1, 0xA0, 0x0D, 0xA0, 0xE1, 0x66, 0xFF, 0xFF, 0xEB - .byte 0x8C, 0x13, 0x9F, 0xE5, 0x04, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x00, 0x05, 0xA0, 0xE1 - .byte 0x20, 0x0D, 0xA0, 0xE1, 0x60, 0xFF, 0xFF, 0xEB, 0x08, 0x00, 0x84, 0xE5, 0x04, 0x00, 0xA0, 0xE1 - .byte 0xA0, 0x01, 0x00, 0xEB, 0x6C, 0x13, 0x9F, 0xE5, 0x0C, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5 - .byte 0x58, 0x13, 0x9F, 0xE5, 0x00, 0x0D, 0xA0, 0xE1, 0x20, 0x0D, 0xA0, 0xE1, 0x0C, 0x40, 0x91, 0xE5 - .byte 0x55, 0xFF, 0xFF, 0xEB, 0x4C, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5 - .byte 0x80, 0x08, 0xA0, 0xE1, 0xA0, 0x0C, 0xA0, 0xE1, 0x4F, 0xFF, 0xFF, 0xEB, 0x34, 0x13, 0x9F, 0xE5 - .byte 0x04, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x80, 0x04, 0xA0, 0xE1, 0xA0, 0x0C, 0xA0, 0xE1 - .byte 0x49, 0xFF, 0xFF, 0xEB, 0x08, 0x00, 0x84, 0xE5, 0xAC, 0x00, 0x00, 0xEA, 0x18, 0x13, 0x9F, 0xE5 - .byte 0x08, 0x20, 0x90, 0xE5, 0xB0, 0x00, 0xD1, 0xE1, 0x00, 0x0E, 0xA0, 0xE1, 0x20, 0x0E, 0xA0, 0xE1 - .byte 0x04, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x82, 0xE5 - .byte 0xA2, 0x00, 0x00, 0xEA, 0x00, 0x50, 0x82, 0xE5, 0xA0, 0x00, 0x00, 0xEA, 0xE8, 0x12, 0x9F, 0xE5 - .byte 0x08, 0x20, 0x90, 0xE5, 0xB0, 0x00, 0xD1, 0xE1, 0x80, 0x0C, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1 - .byte 0x01, 0x00, 0xA0, 0x13, 0x00, 0x00, 0x82, 0x15, 0x00, 0x50, 0x82, 0x05, 0x97, 0x00, 0x00, 0xEA - .byte 0xC0, 0x12, 0x9F, 0xE5, 0x08, 0x40, 0x90, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x80, 0x0E, 0xA0, 0xE1 - .byte 0xA0, 0x0E, 0xA0, 0xE1, 0x00, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x00, 0x09, 0xA0, 0xE1 - .byte 0x20, 0x0D, 0xA0, 0xE1, 0x28, 0xFF, 0xFF, 0xEB, 0x98, 0x12, 0x9F, 0xE5, 0x04, 0x00, 0x84, 0xE5 - .byte 0x00, 0x00, 0x91, 0xE5, 0x80, 0x04, 0xA0, 0xE1, 0xA0, 0x0C, 0xA0, 0xE1, 0x22, 0xFF, 0xFF, 0xEB - .byte 0x08, 0x00, 0x84, 0xE5, 0x05, 0x10, 0xA0, 0xE1, 0x78, 0x02, 0x9F, 0xE5, 0x0C, 0x10, 0x84, 0xE5 - .byte 0x00, 0x00, 0x90, 0xE5, 0x00, 0x0C, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1, 0x0C, 0x00, 0x94, 0x15 - .byte 0x01, 0x00, 0x80, 0x12, 0x0C, 0x00, 0x84, 0x15, 0x58, 0x02, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5 - .byte 0x00, 0x08, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1, 0x0C, 0x00, 0x94, 0x15, 0x02, 0x00, 0x80, 0x12 - .byte 0x0C, 0x00, 0x84, 0x15, 0x3C, 0x02, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x00, 0x04, 0xA0, 0xE1 - .byte 0xA0, 0x0F, 0xB0, 0xE1, 0x0C, 0x00, 0x94, 0x15, 0x04, 0x00, 0x80, 0x12, 0x0C, 0x00, 0x84, 0x15 - .byte 0x6E, 0x00, 0x00, 0xEA, 0x18, 0x30, 0x90, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x27, 0x00, 0x00, 0x1A - .byte 0x08, 0x10, 0x90, 0xE5, 0x00, 0x10, 0x91, 0xE5, 0x01, 0x00, 0x51, 0xE3, 0x12, 0x00, 0x00, 0x1A - .byte 0x04, 0x22, 0x9F, 0xE5, 0xB0, 0x10, 0xD2, 0xE1, 0x01, 0x1E, 0xA0, 0xE1, 0x21, 0x1E, 0xA0, 0xE1 - .byte 0x04, 0x00, 0x51, 0xE3, 0x61, 0x00, 0x00, 0x0A, 0x01, 0x10, 0x83, 0xE2, 0x18, 0x10, 0x80, 0xE5 - .byte 0xB0, 0x00, 0xD2, 0xE1, 0x0F, 0x00, 0xC0, 0xE3, 0x04, 0x00, 0x80, 0xE3, 0xB0, 0x00, 0xC2, 0xE1 - .byte 0x28, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x10, 0xA0, 0x01, 0xBC, 0x01, 0x9F, 0x05 - .byte 0x03, 0x50, 0xA0, 0x03, 0x18, 0x10, 0x80, 0x05, 0x54, 0x00, 0x00, 0xEA, 0xB8, 0x21, 0x9F, 0xE5 - .byte 0xB0, 0x10, 0xD2, 0xE1, 0x01, 0x1E, 0xA0, 0xE1, 0x21, 0x1E, 0xB0, 0xE1, 0x4F, 0x00, 0x00, 0x0A - .byte 0x01, 0x10, 0x83, 0xE2, 0x18, 0x10, 0x80, 0xE5, 0xB0, 0x00, 0xD2, 0xE1, 0x0F, 0x00, 0xC0, 0xE3 - .byte 0xB0, 0x00, 0xC2, 0xE1, 0x17, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x10, 0xA0, 0x01 - .byte 0x78, 0x01, 0x9F, 0x05, 0x03, 0x50, 0xA0, 0x03, 0x18, 0x10, 0x80, 0x05, 0x43, 0x00, 0x00, 0xEA - .byte 0x18, 0x50, 0x80, 0xE5, 0x41, 0x00, 0x00, 0xEA, 0x18, 0x30, 0x90, 0xE5, 0x00, 0x00, 0x53, 0xE3 - .byte 0x25, 0x00, 0x00, 0x1A, 0x08, 0x10, 0x90, 0xE5, 0x00, 0x10, 0x91, 0xE5, 0x01, 0x00, 0x51, 0xE3 - .byte 0x10, 0x00, 0x00, 0x1A, 0x50, 0x21, 0x9F, 0xE5, 0xB0, 0x10, 0xD2, 0xE1, 0x81, 0x1C, 0xA0, 0xE1 - .byte 0xA1, 0x1F, 0xB0, 0xE1, 0x35, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x83, 0xE2, 0x18, 0x10, 0x80, 0xE5 - .byte 0xB0, 0x00, 0xD2, 0xE1, 0x40, 0x00, 0x80, 0xE3, 0xB0, 0x00, 0xC2, 0xE1, 0xFD, 0x00, 0x00, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x10, 0xA0, 0x01, 0x10, 0x01, 0x9F, 0x05, 0x03, 0x50, 0xA0, 0x03 - .byte 0x18, 0x10, 0x80, 0x05, 0x29, 0x00, 0x00, 0xEA, 0x0C, 0x21, 0x9F, 0xE5, 0xB0, 0x10, 0xD2, 0xE1 - .byte 0x81, 0x1C, 0xA0, 0xE1, 0xA1, 0x1F, 0xB0, 0xE1, 0x24, 0x00, 0x00, 0x0A, 0x01, 0x10, 0x83, 0xE2 - .byte 0x18, 0x10, 0x80, 0xE5, 0xB0, 0x00, 0xD2, 0xE1, 0x40, 0x00, 0xC0, 0xE3, 0xB0, 0x00, 0xC2, 0xE1 - .byte 0xEC, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x10, 0xA0, 0x01, 0xCC, 0x00, 0x9F, 0x05 - .byte 0x03, 0x50, 0xA0, 0x03, 0x18, 0x10, 0x80, 0x05, 0x18, 0x00, 0x00, 0xEA, 0x18, 0x50, 0x80, 0xE5 - .byte 0x16, 0x00, 0x00, 0xEA -_020D5E74: - ldr r0, _020D5F30 ; =0x021D5538 - mov r1, #0x0 - str r1, [r0, #0x18] - mov r5, #0x4 - b _020D5ED0 -_020D5E88: - ldr r0, _020D5F30 ; =0x021D5538 - mov r1, #0x0 - str r1, [r0, #0x18] - cmp r2, #0x4 - addls pc, pc, r2, lsl #0x2 - b _020D5ECC -_020D5EA0: - .byte 0x09, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA, 0x03, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x00, 0xEA - .byte 0x05, 0x00, 0x00, 0xEA, 0x04, 0x50, 0xA0, 0xE3, 0x04, 0x00, 0x00, 0xEA, 0x05, 0x50, 0xA0, 0xE3 - .byte 0x02, 0x00, 0x00, 0xEA, 0x01, 0x50, 0xA0, 0xE3, 0x00, 0x00, 0x00, 0xEA -_020D5ECC: - mov r5, #0x6 -_020D5ED0: - ldr r0, _020D5F30 ; =0x021D5538 - ldr r1, [r0, #0x18] - cmp r1, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - ldr r2, _020D5F30 ; =0x021D5538 - ldr r1, [r0, #0x0] - ldr r4, [r2, #0x4] - cmp r1, #0x0 - movne r1, #0x0 - strne r1, [r0, #0x0] - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r1, [r2, #0x10] - mov r3, #0x0 - mov r0, r5 - str r3, [r2, #0x4] - blx r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D5F30: .word 0x021D5538 -_020D5F34: - .byte 0xE8, 0xFD, 0x7F, 0x02, 0xEC, 0xFD, 0x7F, 0x02, 0xEA, 0xFD, 0x7F, 0x02 - - arm_func_start RTC_GetDateTimeAsync -RTC_GetDateTimeAsync: ; 0x020D5F40 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl OS_DisableInterrupts - ldr r1, _020D5FCC ; =0x021D5538 - ldr r2, [r1, #0x0] - cmp r2, #0x0 - beq _020D5F80 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020D5F80: - mov r2, #0x1 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - ldr r0, _020D5FCC ; =0x021D5538 - mov r2, #0x2 - mov r1, #0x0 - str r2, [r0, #0x14] - str r1, [r0, #0x18] - str r7, [r0, #0x8] - str r6, [r0, #0xc] - str r5, [r0, #0x4] - str r4, [r0, #0x10] - bl RTCi_ReadRawDateTimeAsync -_020D5FB4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x03, 0x00, 0xA0, 0x03 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D5FCC: .word 0x021D5538 - - arm_func_start RTC_GetTime -RTC_GetTime: ; 0x020D5FD0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D600C ; =RtcGetResultCallback - mov r2, #0x0 - bl RTC_GetTimeAsync - ldr r1, _020D6010 ; =0x021D5538 - cmp r0, #0x0 - str r0, [r1, #0x20] - bne _020D5FF8 - bl RtcWaitBusy -_020D5FF8: - ldr r0, _020D6010 ; =0x021D5538 - ldr r0, [r0, #0x20] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D600C: .word RtcGetResultCallback -_020D6010: .word 0x021D5538 - - arm_func_start RTC_GetTimeAsync -RTC_GetTimeAsync: ; 0x020D6014 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl OS_DisableInterrupts - ldr r1, _020D608C ; =0x021D5538 - ldr r2, [r1, #0x0] - cmp r2, #0x0 - beq _020D6048 - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4-r6,lr} - bx lr -_020D6048: - mov r2, #0x1 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - ldr r0, _020D608C ; =0x021D5538 - mov r2, #0x1 - mov r1, #0x0 - str r2, [r0, #0x14] - str r1, [r0, #0x18] - str r6, [r0, #0x8] - str r5, [r0, #0x4] - str r4, [r0, #0x10] - bl RTCi_ReadRawTimeAsync -_020D6078: - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13 - .byte 0x03, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D608C: .word 0x021D5538 - - arm_func_start RTC_GetDate -RTC_GetDate: ; 0x020D6090 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D60CC ; =RtcGetResultCallback - mov r2, #0x0 - bl RTC_GetDateAsync - ldr r1, _020D60D0 ; =0x021D5538 - cmp r0, #0x0 - str r0, [r1, #0x20] - bne _020D60B8 - bl RtcWaitBusy -_020D60B8: - ldr r0, _020D60D0 ; =0x021D5538 - ldr r0, [r0, #0x20] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D60CC: .word RtcGetResultCallback -_020D60D0: .word 0x021D5538 - - arm_func_start RTC_GetDateAsync -RTC_GetDateAsync: ; 0x020D60D4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl OS_DisableInterrupts - ldr r1, _020D6148 ; =0x021D5538 - ldr r2, [r1, #0x0] - cmp r2, #0x0 - beq _020D6108 - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4-r6,lr} - bx lr -_020D6108: - mov r2, #0x1 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - ldr r0, _020D6148 ; =0x021D5538 - mov r1, #0x0 - str r1, [r0, #0x14] - str r1, [r0, #0x18] - str r6, [r0, #0x8] - str r5, [r0, #0x4] - str r4, [r0, #0x10] - bl RTCi_ReadRawDateAsync -_020D6134: - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x03, 0x00, 0xA0, 0x03 - .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D6148: .word 0x021D5538 - - arm_func_start RTC_Init -RTC_Init: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r1, _020D61C8 ; =0x021D5534 - ldrh r0, [r1, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - ldr r0, _020D61CC ; =0x021D5538 - mov r2, #0x0 - mov r3, #0x1 - strh r3, [r1, #0x0] - str r2, [r0, #0x0] - str r2, [r0, #0x4] - str r2, [r0, #0x1c] - str r2, [r0, #0x8] - str r2, [r0, #0xc] - bl PXI_Init - mov r5, #0x5 - mov r4, #0x1 - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady -_020D61A8: - .byte 0x00, 0x00, 0x50, 0xE3, 0xFA, 0xFF, 0xFF, 0x0A - .byte 0x18, 0x10, 0x9F, 0xE5, 0x05, 0x00, 0xA0, 0xE3, 0xFF, 0xE6, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D61C8: .word 0x021D5534 -_020D61CC: .word 0x021D5538 -_020D61D0: - .byte 0xC0, 0x59, 0x0D, 0x02, 0x00, 0x40, 0x2D, 0xE9, 0x04, 0xD0, 0x4D, 0xE2, 0x00, 0x04, 0xA0, 0xE1 - .byte 0x7F, 0x1C, 0x00, 0xE2, 0x05, 0x00, 0xA0, 0xE3, 0x00, 0x20, 0xA0, 0xE3, 0xBB, 0xE6, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0xA3, 0x00, 0x00, 0xA0, 0xB3, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start RTCi_WriteRawStatus2Async -RTCi_WriteRawStatus2Async: ; 0x020D6208 - ldr ip, _020D6214 ; =0x020D61D4 - mov r0, #0x27 - bx r12 - .balign 4 -_020D6214: .word 0x020D61D4 - - arm_func_start RTCi_ReadRawTimeAsync -RTCi_ReadRawTimeAsync: - ldr ip, _020D6224 ; =0x020D61D4 - mov r0, #0x12 - bx r12 - .balign 4 -_020D6224: .word 0x020D61D4 - - arm_func_start RTCi_ReadRawDateAsync -RTCi_ReadRawDateAsync: - ldr ip, _020D6234 ; =0x020D61D4 - mov r0, #0x11 - bx r12 - .balign 4 -_020D6234: .word 0x020D61D4 - - arm_func_start RTCi_ReadRawDateTimeAsync -RTCi_ReadRawDateTimeAsync: - ldr ip, _020D6244 ; =0x020D61D4 - mov r0, #0x10 - bx r12 - .balign 4 -_020D6244: .word 0x020D61D4 - - arm_func_start RTC_GetDayOfWeek -RTC_GetDayOfWeek: ; 0x020D6248 - stmdb sp!, {r4-r6,lr} - ldr r1, [r0, #0x4] - ldr r2, [r0, #0x0] - sub r3, r1, #0x2 - cmp r3, #0x1 - add lr, r2, #0x7d0 - ldr r4, _020D630C ; =0x51EB851F - sublt lr, lr, #0x1 - ldr r12, [r0, #0x8] - smull r0, r2, r4, lr - addlt r3, r3, #0xc - mov r1, #0x1a - mul r0, r3, r1 - smull r1, r3, r4, lr - ldr r5, _020D6310 ; =0x66666667 - sub r0, r0, #0x2 - smull r4, r1, r5, r0 - mov r4, lr, lsr #0x1f - mov r2, r2, asr #0x5 - mov r3, r3, asr #0x5 - add r3, r4, r3 - ldr r5, _020D6314 ; =0x00000064 - add r2, r4, r2 - smull r2, r4, r5, r2 - sub r2, lr, r2 - mov r1, r1, asr #0x2 - mov r0, r0, lsr #0x1f - add r1, r0, r1 - mov r4, r2, asr #0x1 - add r0, r12, r1 - add r1, r2, r4, lsr #0x1e - add r2, r2, r0 - mov r6, r3, asr #0x1 - add r0, r3, r6, lsr #0x1e - add r1, r2, r1, asr #0x2 - add r1, r1, r0, asr #0x2 - mov r0, #0x5 - mla r4, r3, r0, r1 - ldr r3, _020D6318 ; =0x92492493 - mov r1, r4, lsr #0x1f - smull r2, r0, r3, r4 - add r0, r4, r0 - mov r0, r0, asr #0x2 - ldr r2, _020D631C ; =0x00000007 - add r0, r1, r0 - smull r0, r1, r2, r0 - sub r0, r4, r0 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D630C: .word 0x51EB851F -_020D6310: .word 0x66666667 -_020D6314: .word 0x00000064 -_020D6318: .word 0x92492493 -_020D631C: .word 0x00000007 - - arm_func_start RTC_ConvertSecondToDateTime -RTC_ConvertSecondToDateTime: ; 0x020D6320 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r2 - mov r12, #0x0 - mov r4, r3 - subs r2, r5, r12 - sbcs r2, r4, r12 - mov r7, r0 - mov r6, r1 - movlt r5, r12 - movlt r4, r12 - blt _020D6364 - ldr r1, _020D63B0 ; =0xBC19137F - subs r0, r1, r5 - sbcs r0, r12, r4 - movlt r5, r1 - movlt r4, r12 -_020D6364: - ldr r2, _020D63B4 ; =0x00015180 - mov r0, r5 - mov r1, r4 - mov r3, #0x0 - bl _ll_mod - mov r1, r0 - mov r0, r6 - bl RTCi_ConvertSecondToTime - ldr r2, _020D63B4 ; =0x00015180 - mov r0, r5 - mov r1, r4 - mov r3, #0x0 - bl _ll_sdiv - mov r1, r0 - mov r0, r7 - bl RTC_ConvertDayToDate - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020D63B0: .word 0xBC19137F -_020D63B4: .word 0x00015180 - - arm_func_start RTCi_ConvertSecondToTime -RTCi_ConvertSecondToTime: ; 0x020D63B8 - stmdb sp!, {r4-r6,lr} - ldr r2, _020D6448 ; =0x0001517F - cmp r1, #0x0 - movlt r1, #0x0 - cmp r1, r2 - ldr ip, _020D644C ; =0x88888889 - movgt r1, r2 - smull r2, r3, r12, r1 - smull r2, lr, r12, r1 - ldr r5, _020D6450 ; =0x91A2B3C5 - add r3, r1, r3 - smull r4, r2, r5, r1 - mov r5, r1, lsr #0x1f - mov r3, r3, asr #0x5 - add r3, r5, r3 - smull r4, r6, r12, r3 - add lr, r1, lr - mov lr, lr, asr #0x5 - add r6, r3, r6 - add r2, r1, r2 - ldr r4, _020D6454 ; =0x0000003C - add lr, r5, lr - smull r12, lr, r4, lr - sub lr, r1, r12 - mov r2, r2, asr #0xb - mov r6, r6, asr #0x5 - mov r1, r3, lsr #0x1f - add r6, r1, r6 - smull r1, r12, r4, r6 - str lr, [r0, #0x8] - sub r6, r3, r1 - str r6, [r0, #0x4] - add r2, r5, r2 - str r2, [r0, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D6448: .word 0x0001517F -_020D644C: .word 0x88888889 -_020D6450: .word 0x91A2B3C5 -_020D6454: .word 0x0000003C - - arm_func_start RTC_ConvertDayToDate -RTC_ConvertDayToDate: ; 0x020D6458 - stmdb sp!, {r4,lr} - ldr r2, _020D6560 ; =0x00008EAC - cmp r1, #0x0 - movlt r1, #0x0 - cmp r1, r2 - movgt r1, r2 - ldr r3, _020D6564 ; =0x92492493 - add lr, r1, #0x6 - smull r2, r4, r3, lr - add r4, lr, r4 - mov r4, r4, asr #0x2 - mov r2, lr, lsr #0x1f - ldr ip, _020D6568 ; =0x00000007 - add r4, r2, r4 - smull r2, r3, r12, r4 - sub r4, lr, r2 - ldr r2, _020D656C ; =0x0000016D - ldr r3, _020D6570 ; =0x0000016E - str r4, [r0, #0xc] - mov lr, #0x0 -_020D64A8: - ands r12, lr, #0x3 - moveq r12, r3 - movne r12, r2 - mov r4, r1 - subs r1, r1, r12 - movmi r1, r4 - bmi _020D64D0 - add lr, lr, #0x1 - cmp lr, #0x63 - blo _020D64A8 -_020D64D0: - ldr r2, _020D656C ; =0x0000016D - str lr, [r0, #0x0] - cmp r1, r2 - movgt r1, r2 - ands r2, lr, #0x3 - bne _020D6518 - cmp r1, #0x3c - bge _020D6514 - cmp r1, #0x1f - movlt r2, #0x1 - subge r1, r1, #0x1f - movge r2, #0x2 - str r2, [r0, #0x4] - add r1, r1, #0x1 - str r1, [r0, #0x8] - ldmia sp!, {r4,lr} - bx lr -_020D6514: - sub r1, r1, #0x1 -_020D6518: - ldr r3, _020D6574 ; =0x02106A20 - mov r4, #0xb -_020D6520: - ldr r2, [r3, r4, lsl #0x2] - mov r12, r4, lsl #0x2 - cmp r1, r2 - blt _020D6550 - add r2, r4, #0x1 - str r2, [r0, #0x4] - ldr r2, [r3, r12] - sub r1, r1, r2 - add r1, r1, #0x1 - str r1, [r0, #0x8] - ldmia sp!, {r4,lr} - bx lr -_020D6550: - subs r4, r4, #0x1 - bpl _020D6520 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D6560: .word 0x00008EAC -_020D6564: .word 0x92492493 -_020D6568: .word 0x00000007 -_020D656C: .word 0x0000016D -_020D6570: .word 0x0000016E -_020D6574: .word 0x02106A20 - - arm_func_start RTC_ConvertDateTimeToSecond -RTC_ConvertDateTimeToSecond: ; 0x020D6578 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r1 - bl RTC_ConvertDateToDay - mov r4, r0 - mvn r0, #0x0 - cmp r4, r0 - addeq sp, sp, #0x4 - moveq r1, r0 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - mov r0, r5 - bl RTCi_ConvertTimeToSecond - mvn r2, #0x0 - cmp r0, r2 - moveq r1, r2 - beq _020D65DC - ldr r1, _020D65EC ; =0x00015180 - mov r2, #0x0 - umull r12, r3, r4, r1 - mla r3, r4, r2, r3 - mov r2, r4, asr #0x1f - mla r3, r2, r1, r3 - adds r2, r0, r12 - adc r1, r3, r0, asr #0x1f -_020D65DC: - mov r0, r2 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D65EC: .word 0x00015180 - - arm_func_start RTCi_ConvertTimeToSecond -RTCi_ConvertTimeToSecond: ; 0x020D65F0 - ldr r3, [r0, #0x4] - ldr r2, [r0, #0x0] - mov r1, #0x3c - mla r3, r2, r1, r3 - ldr r0, [r0, #0x8] - mla r0, r3, r1, r0 - bx lr - - arm_func_start RTC_ConvertDateToDay -RTC_ConvertDateToDay: ; 0x020D660C - ldr r3, [r0, #0x0] - cmp r3, #0x64 - bhs _020D665C - ldr r2, [r0, #0x4] - cmp r2, #0x1 - blo _020D665C - cmp r2, #0xc - bhi _020D665C - ldr r1, [r0, #0x8] - cmp r1, #0x1 - blo _020D665C - cmp r1, #0x1f - bhi _020D665C - ldr r0, [r0, #0xc] - cmp r0, #0x7 - bge _020D665C - cmp r2, #0x1 - blo _020D665C - cmp r2, #0xc - bls _020D6664 -_020D665C: - mvn r0, #0x0 - bx lr -_020D6664: - ldr r0, _020D6698 ; =0x02106A1C - sub r1, r1, #0x1 - ldr r0, [r0, r2, lsl #0x2] - cmp r2, #0x3 - add r2, r1, r0 - blo _020D6684 - ands r0, r3, #0x3 - addeq r2, r2, #0x1 -_020D6684: - ldr r0, _020D669C ; =0x0000016D - add r1, r3, #0x3 - mla r0, r3, r0, r2 - add r0, r0, r1, lsr #0x2 - bx lr - .balign 4 -_020D6698: .word 0x02106A1C -_020D669C: .word 0x0000016D - - arm_func_start CARD_UnlockBackup -CARD_UnlockBackup: ; 0x020D66A0 - ldr ip, _020D66AC ; =CARDi_UnlockResource - mov r1, #0x2 - bx r12 - .balign 4 -_020D66AC: .word CARDi_UnlockResource - - arm_func_start CARD_LockBackup -CARD_LockBackup: ; 0x020D66B0 - ldr ip, _020D66BC ; =CARDi_LockResource - mov r1, #0x2 - bx r12 - .balign 4 -_020D66BC: .word CARDi_LockResource - - arm_func_start CARD_UnlockRom -CARD_UnlockRom: ; 0x020D66C0 - stmdb sp!, {r4,lr} - mov r4, r0 - bl OS_UnlockCard - mov r0, r4 - mov r1, #0x1 - bl CARDi_UnlockResource - ldmia sp!, {r4,lr} - bx lr - - arm_func_start CARD_LockRom -CARD_LockRom: ; 0x020D66E0 - stmdb sp!, {r4,lr} - mov r4, r0 - mov r1, #0x1 - bl CARDi_LockResource - mov r0, r4 - bl OS_TryLockCard - ldmia sp!, {r4,lr} - bx lr - - arm_func_start CARD_GetResultCode -CARD_GetResultCode: ; 0x020D6700 - ldr r0, _020D6710 ; =0x021D55C0 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020D6710: .word 0x021D55C0 - - arm_func_start FUN_020d6714 -FUN_020d6714: ; 0x020D6714 - ldr r0, _020D672C ; =0x021D55C0 - ldr r0, [r0, #0x114] - ands r0, r0, #0x4 - moveq r0, #0x1 - movne r0, #0x0 - bx lr - .balign 4 -_020D672C: .word 0x021D55C0 - - arm_func_start CARDi_WaitAsync -CARDi_WaitAsync: ; 0x020D6730 - stmdb sp!, {r4-r6,lr} - ldr r6, _020D6788 ; =0x021D55C0 - bl OS_DisableInterrupts - ldr r1, [r6, #0x114] - mov r5, r0 - ands r0, r1, #0x4 - beq _020D6764 - add r4, r6, #0x10c -_020D6750: - mov r0, r4 - bl OS_SleepThread - ldr r0, [r6, #0x114] - ands r0, r0, #0x4 - bne _020D6750 -_020D6764: - mov r0, r5 - bl OS_RestoreInterrupts -_020D676C: - .byte 0x00, 0x00, 0x96, 0xE5 - .byte 0x00, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03, 0x00, 0x00, 0xA0, 0x13 - .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D6788: .word 0x021D55C0 - - arm_func_start CARD_Enable -CARD_Enable: ; 0x020D678C - ldr r1, _020D6798 ; =0x021D555C - str r0, [r1, #0x0] - bx lr - .balign 4 -_020D6798: .word 0x021D555C - - arm_func_start CARD_CheckEnabled -CARD_CheckEnabled: ; 0x020D679C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl CARD_IsEnabled -_020D67A8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12 - .byte 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x24, 0xDC, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CARD_IsEnabled -CARD_IsEnabled: - ldr r0, _020D67D4 ; =0x021D555C - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020D67D4: .word 0x021D555C - - arm_func_start CARDi_InitCommon -CARDi_InitCommon: ; 0x020D67D8 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r4, _020D68B8 ; =0x021D55C0 - ldr r1, _020D68BC ; =0x021D5560 - mvn r2, #0x2 - mov r0, #0x0 - str r2, [r4, #0x8] - mov r2, #0x60 - str r0, [r4, #0xc] - str r0, [r4, #0x18] - str r1, [r4, #0x0] - bl MIi_CpuClearFast - ldr r0, _020D68BC ; =0x021D5560 - mov r1, #0x60 - bl DC_FlushRange - ldr r0, _020D68C0 ; =0x027FFC40 - ldrh r0, [r0, #0x0] - cmp r0, #0x2 - beq _020D6834 - ldr r0, _020D68C4 ; =0x027FFE00 - ldr r1, _020D68C8 ; =0x027FFA80 - mov r2, #0x160 - bl MI_CpuCopy8 -_020D6834: - mov r2, #0x0 - str r2, [r4, #0x14] - ldr r0, [r4, #0x14] - mov r1, #0x4 - str r0, [r4, #0x10] - str r2, [r4, #0x110] - ldr r3, [r4, #0x110] - mov r0, #0x400 - str r3, [r4, #0x10c] - str r1, [r4, #0x108] - str r0, [sp, #0x0] - ldr r12, [r4, #0x108] - ldr r1, _020D68CC ; =CARDi_TaskThread - ldr r3, _020D68D0 ; =0x021D5BE0 - add r0, r4, #0x44 - str r12, [sp, #0x4] - bl OS_CreateThread - add r0, r4, #0x44 - bl OS_WakeupThreadDirect - ldr r1, _020D68D4 ; =CARDi_OnFifoRecv - mov r0, #0xb - bl PXI_SetFifoRecvCallback - ldr r0, _020D68C0 ; =0x027FFC40 - ldrh r0, [r0, #0x0] - cmp r0, #0x2 - addeq sp, sp, #0x8 - ldmeqia sp!, {r4,lr} - bxeq lr - mov r0, #0x1 - bl CARD_Enable - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D68B8: .word 0x021D55C0 -_020D68BC: .word 0x021D5560 -_020D68C0: .word 0x027FFC40 -_020D68C4: .word 0x027FFE00 -_020D68C8: .word 0x027FFA80 -_020D68CC: .word CARDi_TaskThread -_020D68D0: .word 0x021D5BE0 -_020D68D4: .word CARDi_OnFifoRecv - - arm_func_start CARDi_UnlockResource -CARDi_UnlockResource: ; 0x020D68D8 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r5, _020D6978 ; =0x021D55C0 - mov r7, r0 - mov r6, r1 - bl OS_DisableInterrupts - mov r1, r5 - mov r4, r0 - ldr r0, [r1, #0x8] - cmp r0, r7 - bne _020D6910 - ldr r0, [r5, #0xc] - cmp r0, #0x0 - bne _020D6918 -_020D6910: - bl OS_Terminate - b _020D6958 -_020D6918: - ldr r0, [r5, #0x18] - cmp r0, r6 - beq _020D6928 - bl OS_Terminate -_020D6928: - ldr r0, [r5, #0xc] - sub r0, r0, #0x1 - str r0, [r5, #0xc] - ldr r0, [r5, #0xc] - cmp r0, #0x0 - bne _020D6958 - mvn r0, #0x2 - str r0, [r5, #0x8] - mov r1, #0x0 - add r0, r5, #0x10 - str r1, [r5, #0x18] - bl OS_WakeupThread -_020D6958: - ldr r1, [r5, #0x0] - mov r2, #0x0 - mov r0, r4 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020D6978: .word 0x021D55C0 - - arm_func_start CARDi_LockResource -CARDi_LockResource: ; 0x020D697C - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - ldr r5, _020D6A14 ; =0x021D55C0 - mov r7, r0 - mov r6, r1 - bl OS_DisableInterrupts - ldr r1, [r5, #0x8] - mov r4, r0 - cmp r1, r7 - bne _020D69B8 - ldr r0, [r5, #0x18] - cmp r0, r6 - beq _020D69E8 - bl OS_Terminate - b _020D69E8 -_020D69B8: - ldr r0, [r5, #0x8] - mvn r8, #0x2 - cmp r0, r8 - beq _020D69E0 - add r9, r5, #0x10 -_020D69CC: - mov r0, r9 - bl OS_SleepThread - ldr r0, [r5, #0x8] - cmp r0, r8 - bne _020D69CC -_020D69E0: - str r7, [r5, #0x8] - str r6, [r5, #0x18] -_020D69E8: - ldr r1, [r5, #0xc] - mov r0, r4 - add r1, r1, #0x1 - str r1, [r5, #0xc] - ldr r1, [r5, #0x0] - mov r2, #0x0 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r9,lr} - bx lr - .balign 4 -_020D6A14: .word 0x021D55C0 - - arm_func_start CARDi_SetTask -CARDi_SetTask: ; 0x020D6A18 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r4, _020D6A5C ; =0x021D55C0 - mov r5, r0 - ldr r1, [r4, #0x108] - add r0, r4, #0x44 - bl OS_SetThreadPriority - add r0, r4, #0x44 - str r0, [r4, #0x104] - str r5, [r4, #0x40] - ldr r1, [r4, #0x114] - orr r1, r1, #0x8 - str r1, [r4, #0x114] - bl OS_WakeupThreadDirect - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D6A5C: .word 0x021D55C0 - - arm_func_start FUN_020d6a60 -FUN_020d6a60: ; 0x020D6A60 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r1, _020D6D60 ; =0x021D55C0 - mov r5, r0 - ldr r4, [r1, #0x0] - mov r1, #0x0 - add r0, r4, #0x18 - mov r2, #0x48 - bl MI_CpuFill8 -_020D6A84: - .byte 0x00, 0x00, 0x55, 0xE3, 0x04, 0x50, 0x84, 0xE5, 0x3F, 0x00, 0xA0, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x02, 0x4C, 0x00, 0x84, 0xE5, 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x45, 0x04, 0xA0, 0xE1, 0xFF, 0x00, 0x00, 0xE2, 0x01, 0x20, 0xA0, 0xE3, 0x12, 0x30, 0xA0, 0xE1 - .byte 0xFF, 0x10, 0x05, 0xE2, 0x18, 0x30, 0x84, 0xE5, 0xFF, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5 - .byte 0x01, 0x00, 0x51, 0xE3, 0x2D, 0x00, 0x00, 0x1A, 0x02, 0x0C, 0x53, 0xE3, 0x04, 0x00, 0x00, 0x0A - .byte 0x02, 0x0A, 0x53, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x01, 0x08, 0x53, 0xE3, 0x11, 0x00, 0x00, 0x0A - .byte 0x94, 0x00, 0x00, 0xEA, 0x10, 0x00, 0xA0, 0xE3, 0x20, 0x00, 0x84, 0xE5, 0x24, 0x20, 0x84, 0xE5 - .byte 0x05, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x84, 0xE5, 0xF0, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5 - .byte 0x10, 0x00, 0x00, 0xEA, 0x20, 0x00, 0xA0, 0xE3, 0x20, 0x00, 0x84, 0xE5, 0x02, 0x00, 0xA0, 0xE3 - .byte 0x24, 0x00, 0x84, 0xE5, 0x05, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x84, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x48, 0x00, 0xC4, 0xE5, 0x07, 0x00, 0x00, 0xEA, 0x80, 0x00, 0xA0, 0xE3, 0x20, 0x00, 0x84, 0xE5 - .byte 0x02, 0x00, 0xA0, 0xE3, 0x24, 0x00, 0x84, 0xE5, 0x0A, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x84, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5, 0x20, 0x00, 0x94, 0xE5, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x1C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x40, 0x00, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5 - .byte 0x4C, 0x00, 0x94, 0xE5, 0x01, 0x0C, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5 - .byte 0x02, 0x0C, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x02, 0x00, 0x51, 0xE3, 0x53, 0x00, 0x00, 0x1A, 0x01, 0x06, 0x53, 0xE3, 0x09, 0x00, 0x00, 0x8A - .byte 0x01, 0x06, 0x53, 0xE3, 0x0F, 0x00, 0x00, 0x2A, 0x01, 0x07, 0x53, 0xE3, 0x02, 0x00, 0x00, 0x8A - .byte 0x01, 0x07, 0x53, 0xE3, 0x0B, 0x00, 0x00, 0x0A, 0x62, 0x00, 0x00, 0xEA, 0x02, 0x07, 0x53, 0xE3 - .byte 0x08, 0x00, 0x00, 0x0A, 0x5F, 0x00, 0x00, 0xEA, 0x02, 0x06, 0x53, 0xE3, 0x02, 0x00, 0x00, 0x8A - .byte 0x02, 0x06, 0x53, 0xE3, 0x11, 0x00, 0x00, 0x0A, 0x5A, 0x00, 0x00, 0xEA, 0x02, 0x05, 0x53, 0xE3 - .byte 0x1C, 0x00, 0x00, 0x0A, 0x57, 0x00, 0x00, 0xEA, 0x19, 0x00, 0xA0, 0xE3, 0x2C, 0x00, 0x84, 0xE5 - .byte 0x4B, 0x1F, 0xA0, 0xE3, 0x30, 0x10, 0x84, 0xE5, 0x74, 0x01, 0x9F, 0xE5, 0x44, 0x10, 0x84, 0xE5 - .byte 0x3C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x80, 0x00, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5 - .byte 0x4C, 0x00, 0x94, 0xE5, 0x01, 0x0B, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x1A, 0x00, 0x00, 0xEA - .byte 0xFA, 0x1F, 0xA0, 0xE3, 0x4C, 0x01, 0x9F, 0xE5, 0x3C, 0x10, 0x84, 0xE5, 0x48, 0x11, 0x9F, 0xE5 - .byte 0x40, 0x00, 0x84, 0xE5, 0x44, 0x01, 0x9F, 0xE5, 0x34, 0x10, 0x84, 0xE5, 0x38, 0x00, 0x84, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x01, 0x0A, 0x80, 0xE3 - .byte 0x4C, 0x00, 0x84, 0xE5, 0x0C, 0x00, 0x00, 0xEA, 0xFA, 0x1F, 0xA0, 0xE3, 0x14, 0x01, 0x9F, 0xE5 - .byte 0x3C, 0x10, 0x84, 0xE5, 0x18, 0x11, 0x9F, 0xE5, 0x40, 0x00, 0x84, 0xE5, 0x14, 0x01, 0x9F, 0xE5 - .byte 0x34, 0x10, 0x84, 0xE5, 0x38, 0x00, 0x84, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5 - .byte 0x4C, 0x00, 0x94, 0xE5, 0x01, 0x0A, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x01, 0x08, 0xA0, 0xE3 - .byte 0x1C, 0x00, 0x84, 0xE5, 0x01, 0x0C, 0xA0, 0xE3, 0x20, 0x00, 0x84, 0xE5, 0x03, 0x00, 0xA0, 0xE3 - .byte 0x24, 0x00, 0x84, 0xE5, 0x05, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x40, 0x00, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5 - .byte 0x01, 0x0C, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x02, 0x0C, 0x80, 0xE3 - .byte 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x02, 0x0B, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5 - .byte 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x03, 0x00, 0x51, 0xE3, 0x15, 0x00, 0x00, 0x1A - .byte 0x02, 0x0A, 0x53, 0xE3, 0x01, 0x00, 0x00, 0x0A, 0x02, 0x09, 0x53, 0xE3, 0x11, 0x00, 0x00, 0x1A - .byte 0x20, 0x30, 0x84, 0xE5, 0x1C, 0x30, 0x84, 0xE5, 0x02, 0x00, 0xA0, 0xE3, 0x24, 0x00, 0x84, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x40, 0x00, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x01, 0x0C, 0x80, 0xE3 - .byte 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x02, 0x0C, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5 - .byte 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x04, 0x10, 0x84, 0xE5 - .byte 0x18, 0x10, 0x84, 0xE5, 0x14, 0x00, 0x9F, 0xE5, 0x03, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x90, 0xE5 - .byte 0x00, 0x10, 0x80, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D6D60: .word 0x021D55C0 -_020D6D64: - .byte 0x88, 0x13, 0x00, 0x00, 0xB8, 0x0B, 0x00, 0x00, 0x68, 0x42, 0x00, 0x00 - .byte 0x40, 0x9C, 0x00, 0x00, 0xA0, 0x09, 0x01, 0x00, 0x00, 0x71, 0x02, 0x00 - - arm_func_start CARD_CancelBackupAsync -CARD_CancelBackupAsync: ; 0x020D6D7C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - ldr r1, _020D6DA8 ; =0x021D55C0 - ldr r2, [r1, #0x114] - orr r2, r2, #0x40 - str r2, [r1, #0x114] - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D6DA8: .word 0x021D55C0 - - arm_func_start CARD_TryWaitBackupAsync -CARD_TryWaitBackupAsync: ; 0x020D6DAC - ldr ip, _020D6DB4 ; =FUN_020d6714 - bx r12 - .balign 4 -_020D6DB4: .word FUN_020d6714 - - arm_func_start CARD_WaitBackupAsync -CARD_WaitBackupAsync: ; 0x020D6DB8 - ldr ip, _020D6DC0 ; =CARDi_WaitAsync - bx r12 - .balign 4 -_020D6DC0: .word CARDi_WaitAsync - - arm_func_start CARD_IdentifyBackup -CARD_IdentifyBackup: ; 0x020D6DC4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldr r0, _020D6F00 ; =0x02000C3C - ldr r7, _020D6F04 ; =0x021D55C0 - bl FUN_02000B60 -_020D6DDC: - .byte 0x00, 0x00, 0x55, 0xE3 - .byte 0x00, 0x00, 0x00, 0x1A, 0x99, 0xDA, 0xFF, 0xEB, 0x6B, 0xFE, 0xFF, 0xEB, 0x47, 0xD9, 0xFF, 0xEB - .byte 0x14, 0x11, 0x97, 0xE5, 0x00, 0x40, 0xA0, 0xE1, 0x04, 0x00, 0x11, 0xE2, 0x05, 0x00, 0x00, 0x0A - .byte 0x43, 0x6F, 0x87, 0xE2, 0x06, 0x00, 0xA0, 0xE1, 0x35, 0xD1, 0xFF, 0xEB, 0x14, 0x01, 0x97, 0xE5 - .byte 0x04, 0x00, 0x10, 0xE2, 0xFA, 0xFF, 0xFF, 0x1A, 0x14, 0x01, 0x97, 0xE5, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x04, 0x00, 0x80, 0xE3, 0x14, 0x01, 0x87, 0xE5, 0x38, 0x10, 0x87, 0xE5, 0x04, 0x00, 0xA0, 0xE1 - .byte 0x3C, 0x10, 0x87, 0xE5, 0x3A, 0xD9, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1, 0x07, 0xFF, 0xFF, 0xEB - .byte 0xC0, 0x00, 0x9F, 0xE5, 0xB8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x04, 0x21, 0x81, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3, 0xDA, 0x02, 0x00, 0xEB - .byte 0x00, 0x00, 0x97, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x0C, 0x10, 0x80, 0xE5, 0x00, 0x00, 0x97, 0xE5 - .byte 0x12, 0x1E, 0x87, 0xE2, 0x10, 0x10, 0x80, 0xE5, 0x00, 0x10, 0x97, 0xE5, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x07, 0x00, 0xA0, 0xE1, 0x14, 0x20, 0x81, 0xE5, 0x06, 0x10, 0xA0, 0xE3, 0xCE, 0x02, 0x00, 0xEB - .byte 0x38, 0x60, 0x97, 0xE5, 0x3C, 0x50, 0x97, 0xE5, 0x1C, 0xD9, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1 - .byte 0x14, 0x11, 0x97, 0xE5, 0x43, 0x0F, 0x87, 0xE2, 0x4C, 0x10, 0xC1, 0xE3, 0x14, 0x11, 0x87, 0xE5 - .byte 0xEB, 0xD0, 0xFF, 0xEB, 0x14, 0x01, 0x97, 0xE5, 0x10, 0x00, 0x10, 0xE2, 0x01, 0x00, 0x00, 0x0A - .byte 0x44, 0x00, 0x87, 0xE2, 0xD9, 0xD0, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x14, 0xD9, 0xFF, 0xEB - .byte 0x00, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0x0A, 0x05, 0x00, 0xA0, 0xE1, 0x36, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x00, 0x97, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 - .byte 0x00, 0x00, 0xA0, 0x13, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D6F00: .word 0x02000C3C -_020D6F04: .word 0x021D55C0 -_020D6F08: - .byte 0x98, 0x34, 0x1D, 0x02 - - arm_func_start CARD_GetBackupSectorSize -CARD_GetBackupSectorSize: ; 0x020D6F0C - ldr r0, _020D6F1C ; =0x021D55C0 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x1c] - bx lr - .balign 4 -_020D6F1C: .word 0x021D55C0 - - arm_func_start CARDi_RequestStreamCommand -CARDi_RequestStreamCommand: ; 0x020D6F20 - stmdb sp!, {r4-r10,lr} - mov r10, r0 - ldr r6, _020D7004 ; =0x021D55C0 - ldr r0, _020D7008 ; =0x02000C3C - mov r9, r1 - mov r8, r2 - mov r7, r3 - bl FUN_02000B60 - bl OS_DisableInterrupts - ldr r1, [r6, #0x114] - mov r5, r0 - ands r0, r1, #0x4 - beq _020D6F6C - add r4, r6, #0x10c -_020D6F58: - mov r0, r4 - bl OS_SleepThread - ldr r0, [r6, #0x114] - ands r0, r0, #0x4 - bne _020D6F58 -_020D6F6C: - ldr r0, [r6, #0x114] - ldr r1, [sp, #0x20] - orr r0, r0, #0x4 - str r0, [r6, #0x114] - str r7, [r6, #0x38] - mov r0, r5 - str r1, [r6, #0x3c] - bl OS_RestoreInterrupts - str r10, [r6, #0x1c] - str r9, [r6, #0x20] - ldr r0, [sp, #0x24] - ldr r1, [sp, #0x28] - str r8, [r6, #0x24] - ldr r2, [sp, #0x2c] - str r1, [r6, #0x2c] - ldr r1, [sp, #0x30] - str r2, [r6, #0x30] - str r1, [r6, #0x34] - cmp r0, #0x0 - beq _020D6FD0 - ldr r0, _020D700C ; =CARDi_RequestStreamCommandCore - bl CARDi_SetTask - mov r0, #0x1 - ldmia sp!, {r4-r10,lr} - bx lr -_020D6FD0: - ldr r0, _020D7010 ; =0x021D3498 - ldr r1, _020D7004 ; =0x021D55C0 - ldr r2, [r0, #0x4] - mov r0, r6 - str r2, [r1, #0x104] - bl CARDi_RequestStreamCommandCore -_020D6FE8: - .byte 0x00, 0x00, 0x96, 0xE5, 0x00, 0x00, 0x90, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03, 0x00, 0x00, 0xA0, 0x13, 0xF0, 0x47, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 -_020D7004: .word 0x021D55C0 -_020D7008: .word 0x02000C3C -_020D700C: .word CARDi_RequestStreamCommandCore -_020D7010: .word 0x021D3498 - - arm_func_start CARDi_RequestStreamCommandCore -CARDi_RequestStreamCommandCore: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r9, r0 - ldr r8, [r9, #0x2c] - ldr r0, _020D720C ; =0x02000C3C - ldr r7, [r9, #0x34] - ldr r10, [r9, #0x30] - mov r6, #0x100 - bl FUN_02000B60 - cmp r8, #0xb - bne _020D7048 - bl CARD_GetBackupSectorSize - mov r6, r0 -_020D7048: - mov r0, #0x1 - add r4, r9, #0x120 - mov r11, #0x9 - str r0, [sp, #0x0] - ldr r5, [r9, #0x24] - ldr r0, [r9, #0x0] - cmp r6, r5 - movcc r5, r6 - str r5, [r0, #0x14] - ldr r0, [r9, #0x114] - ands r0, r0, #0x40 - beq _020D7094 - ldr r0, [r9, #0x114] - mov r1, #0x7 - bic r0, r0, #0x40 - str r0, [r9, #0x114] - ldr r0, [r9, #0x0] - str r1, [r0, #0x0] - b _020D71A8 -_020D7094: - cmp r7, #0x3 - addls pc, pc, r7, lsl #0x2 - b _020D7124 -_020D70A0: - .byte 0x02, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x09, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA - .byte 0x05, 0x10, 0xA0, 0xE1, 0x12, 0x0E, 0x89, 0xE2, 0x19, 0xD4, 0xFF, 0xEB, 0x1C, 0x10, 0x99, 0xE5 - .byte 0x00, 0x00, 0x99, 0xE5, 0x0C, 0x10, 0x80, 0xE5, 0x00, 0x00, 0x99, 0xE5, 0x10, 0x40, 0x80, 0xE5 - .byte 0x13, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x99, 0xE5, 0x04, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1 - .byte 0xBE, 0xDC, 0xFF, 0xEB, 0x05, 0x10, 0xA0, 0xE1, 0x12, 0x0E, 0x89, 0xE2, 0x1A, 0xD4, 0xFF, 0xEB - .byte 0x22, 0xD4, 0xFF, 0xEB, 0x00, 0x00, 0x99, 0xE5, 0x0C, 0x40, 0x80, 0xE5, 0x20, 0x10, 0x99, 0xE5 - .byte 0x00, 0x00, 0x99, 0xE5, 0x10, 0x10, 0x80, 0xE5, 0x05, 0x00, 0x00, 0xEA, 0x1C, 0x10, 0x99, 0xE5 - .byte 0x00, 0x00, 0x99, 0xE5, 0x0C, 0x10, 0x80, 0xE5, 0x20, 0x10, 0x99, 0xE5, 0x00, 0x00, 0x99, 0xE5 - .byte 0x10, 0x10, 0x80, 0xE5 -_020D7124: - mov r0, r9 - mov r1, r8 - mov r2, r10 - bl CARDi_Request -_020D7134: - .byte 0x00, 0x00, 0x50, 0xE3, 0x1A, 0x00, 0x00, 0x0A, 0x02, 0x00, 0x57, 0xE3 - .byte 0x06, 0x00, 0x00, 0x1A, 0x00, 0x20, 0x9D, 0xE5, 0x09, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1 - .byte 0x1D, 0x02, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x11, 0x00, 0x00, 0xEA - .byte 0x00, 0x00, 0x57, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x20, 0x10, 0x99, 0xE5, 0x05, 0x20, 0xA0, 0xE1 - .byte 0x12, 0x0E, 0x89, 0xE2, 0x99, 0xDC, 0xFF, 0xEB, 0x1C, 0x00, 0x99, 0xE5, 0x05, 0x00, 0x80, 0xE0 - .byte 0x1C, 0x00, 0x89, 0xE5, 0x20, 0x00, 0x99, 0xE5, 0x05, 0x00, 0x80, 0xE0, 0x20, 0x00, 0x89, 0xE5 - .byte 0x24, 0x00, 0x99, 0xE5, 0x05, 0x00, 0x40, 0xE0, 0x24, 0x00, 0x89, 0xE5, 0x24, 0x00, 0x99, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0xAB, 0xFF, 0xFF, 0x1A -_020D71A8: - ldr r6, [r9, #0x38] - ldr r5, [r9, #0x3c] - bl OS_DisableInterrupts - ldr r1, [r9, #0x114] - mov r4, r0 - bic r0, r1, #0x4c - str r0, [r9, #0x114] - add r0, r9, #0x10c - bl OS_WakeupThread - ldr r0, [r9, #0x114] - ands r0, r0, #0x10 - beq _020D71E0 - add r0, r9, #0x44 - bl OS_WakeupThreadDirect -_020D71E0: - mov r0, r4 - bl OS_RestoreInterrupts -_020D71E8: - .byte 0x00, 0x00, 0x56, 0xE3, 0x04, 0xD0, 0x8D, 0x02 - .byte 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x05, 0x00, 0xA0, 0xE1, 0x36, 0xFF, 0x2F, 0xE1 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D720C: .word 0x02000C3C - - arm_func_start CARDi_GetRomAccessor -CARDi_GetRomAccessor: ; 0x020D7210 - ldr r0, _020D7218 ; =CARDi_ReadCard - bx lr - .balign 4 -_020D7218: .word CARDi_ReadCard - - arm_func_start CARD_WaitRomAsync -CARD_WaitRomAsync: ; 0x020D721C - ldr ip, _020D7224 ; =CARDi_WaitAsync - bx r12 - .balign 4 -_020D7224: .word CARDi_WaitAsync - - arm_func_start CARD_Init -CARD_Init: ; 0x020D7228 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr ip, _020D72A0 ; =0x021D55C0 - ldr r0, [r12, #0x114] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - mov r0, #0x1 - str r0, [r12, #0x114] - mov r3, #0x0 - str r3, [r12, #0x24] - ldr r0, [r12, #0x24] - mvn r1, #0x0 - str r0, [r12, #0x20] - ldr r2, [r12, #0x20] - ldr r0, _020D72A4 ; =0x021D5BE0 - str r2, [r12, #0x1c] - str r1, [r12, #0x28] - str r3, [r12, #0x38] - str r3, [r12, #0x3c] - str r3, [r0, #0x0] - bl CARDi_InitCommon - bl CARDi_GetRomAccessor - ldr r1, _020D72A8 ; =0x021D5C00 - str r0, [r1, #0x0] - bl CARD_InitPulledOutCallback - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D72A0: .word 0x021D55C0 -_020D72A4: .word 0x021D5BE0 -_020D72A8: .word 0x021D5C00 - - arm_func_start CARDi_ReadRom -CARDi_ReadRom: ; 0x020D72AC - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - ldr r6, _020D73C0 ; =0x021D55C0 - mov r10, r0 - mov r9, r1 - mov r8, r2 - mov r7, r3 - ldr fp, _020D73C4 ; =0x021D5C00 - bl CARD_CheckEnabled - bl OS_DisableInterrupts - ldr r1, [r6, #0x114] - mov r5, r0 - ands r0, r1, #0x4 - beq _020D72FC - add r4, r6, #0x10c -_020D72E8: - mov r0, r4 - bl OS_SleepThread - ldr r0, [r6, #0x114] - ands r0, r0, #0x4 - bne _020D72E8 -_020D72FC: - ldr r1, [r6, #0x114] - ldr r0, [sp, #0x28] - orr r1, r1, #0x4 - str r1, [r6, #0x114] - ldr r1, [sp, #0x2c] - str r0, [r6, #0x38] - mov r0, r5 - str r1, [r6, #0x3c] - bl OS_RestoreInterrupts - ldr r0, _020D73C8 ; =0x021D5BE0 - str r10, [r6, #0x28] - ldr r0, [r0, #0x0] - cmp r10, #0x3 - add r0, r9, r0 - str r0, [r6, #0x1c] - str r8, [r6, #0x20] - str r7, [r6, #0x24] - bhi _020D734C - mov r0, r10 - bl MI_StopDma -_020D734C: - mov r0, r11 - bl CARDi_TryReadCardDma -_020D7354: - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0x30, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0xA9, 0xFF, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x38, 0x00, 0x9F, 0xE5 - .byte 0xA0, 0xFD, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x28, 0x10, 0x9F, 0xE5, 0x06, 0x00, 0xA0, 0xE1, 0x04, 0x10, 0x91, 0xE5, 0x04, 0x11, 0x86, 0xE5 - .byte 0x07, 0x00, 0x00, 0xEB, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D73C0: .word 0x021D55C0 -_020D73C4: .word 0x021D5C00 -_020D73C8: .word 0x021D5BE0 -_020D73CC: - .byte 0xD4, 0x73, 0x0D, 0x02 - .byte 0x98, 0x34, 0x1D, 0x02 - - arm_func_start CARDi_ReadRomSyncCore -CARDi_ReadRomSyncCore: ; 0x020D73D4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r4, _020D7478 ; =0x021D5C00 - mov r0, r4 - bl CARDi_ReadFromCache -_020D73E8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x0A - .byte 0x00, 0x10, 0x94, 0xE5, 0x04, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x78, 0x70, 0x9F, 0xE5 - .byte 0x1E, 0x00, 0x00, 0xEB, 0x09, 0x02, 0x00, 0xEB, 0x00, 0x00, 0x97, 0xE5, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x10, 0x80, 0xE5, 0x38, 0x60, 0x97, 0xE5, 0x3C, 0x50, 0x97, 0xE5, 0xBB, 0xD7, 0xFF, 0xEB - .byte 0x14, 0x11, 0x97, 0xE5, 0x00, 0x40, 0xA0, 0xE1, 0x4C, 0x00, 0xC1, 0xE3, 0x14, 0x01, 0x87, 0xE5 - .byte 0x43, 0x0F, 0x87, 0xE2, 0x8A, 0xCF, 0xFF, 0xEB, 0x14, 0x01, 0x97, 0xE5, 0x10, 0x00, 0x10, 0xE2 - .byte 0x01, 0x00, 0x00, 0x0A, 0x44, 0x00, 0x87, 0xE2, 0x78, 0xCF, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1 - .byte 0xB3, 0xD7, 0xFF, 0xEB, 0x00, 0x00, 0x56, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x05, 0x00, 0xA0, 0xE1, 0x36, 0xFF, 0x2F, 0xE1, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D7478: .word 0x021D5C00 -_020D747C: - .byte 0xC0, 0x55, 0x1D, 0x02 - - arm_func_start CARDi_ReadRomIDCore -CARDi_ReadRomIDCore: ; 0x020D7480 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r0, #0xb8000000 - mov r1, #0x0 - bl CARDi_SetRomOp - ldr r1, _020D74DC ; =0x02106A50 - mov r0, #0x2000 - ldr r1, [r1, #0x0] - rsb r0, r0, #0x0 - ldr r2, [r1, #0x60] - ldr r1, _020D74E0 ; =0x040001A4 - bic r2, r2, #0x7000000 - orr r2, r2, #0xa7000000 - and r0, r2, r0 - str r0, [r1, #0x0] -_020D74BC: - ldr r0, [r1, #0x0] - ands r0, r0, #0x800000 - beq _020D74BC - ldr r0, _020D74E4 ; =0x04100010 - ldr r0, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D74DC: .word 0x02106A50 -_020D74E0: .word 0x040001A4 -_020D74E4: .word 0x04100010 - - arm_func_start CARDi_ReadCard -CARDi_ReadCard: ; 0x020D74E8 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r10, r0 - ldr sb, _020D75DC ; =0x021D55C0 - add r7, r10, #0x20 - ldr r5, _020D75E0 ; =0x04100010 - ldr r6, _020D75E4 ; =0x040001A4 - mov r11, #0x0 - mov r0, #0x200 - rsb r4, r0, #0x0 -_020D7510: - ldr r0, [r9, #0x1c] - and r1, r0, r4 - cmp r1, r0 - bne _020D7538 - ldr r8, [r9, #0x20] - ands r0, r8, #0x3 - bne _020D7538 - ldr r0, [r9, #0x24] - cmp r0, #0x200 - bhs _020D7540 -_020D7538: - mov r8, r7 - str r1, [r10, #0x8] -_020D7540: - mov r0, r1, lsr #0x8 - orr r0, r0, #0xb7000000 - mov r1, r1, lsl #0x18 - bl CARDi_SetRomOp - ldr r1, [r10, #0x4] - mov r0, r11 - str r1, [r6, #0x0] -_020D755C: - ldr r2, [r6, #0x0] - ands r1, r2, #0x800000 - beq _020D7578 - ldr r1, [r5, #0x0] - cmp r0, #0x200 - strcc r1, [r8, r0, lsl #0x2] - addcc r0, r0, #0x1 -_020D7578: - ands r1, r2, #0x80000000 - bne _020D755C - ldr r0, [r9, #0x20] - cmp r8, r0 - bne _020D75C0 - ldr r2, [r9, #0x1c] - ldr r1, [r9, #0x20] - ldr r0, [r9, #0x24] - add r2, r2, #0x200 - add r1, r1, #0x200 - subs r0, r0, #0x200 - str r2, [r9, #0x1c] - str r1, [r9, #0x20] - str r0, [r9, #0x24] - bne _020D7510 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,lr} - bx lr -_020D75C0: - mov r0, r10 - bl CARDi_ReadFromCache -_020D75C8: - .byte 0x00, 0x00, 0x50, 0xE3, 0xCF, 0xFF, 0xFF, 0x1A - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D75DC: .word 0x021D55C0 -_020D75E0: .word 0x04100010 -_020D75E4: .word 0x040001A4 - - arm_func_start CARDi_TryReadCardDma -CARDi_TryReadCardDma: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - ldr fp, _020D7748 ; =0x021D55C0 - mov r7, #0x0 - ldr r9, [r11, #0x20] - mov r10, r0 - mov r6, r7 - mov r5, r7 - mov r1, r7 - ands r4, r9, #0x1f - ldr r8, [r11, #0x24] - bne _020D7624 - ldr r0, [r11, #0x28] - cmp r0, #0x3 - movls r1, #0x1 -_020D7624: - cmp r1, #0x0 - beq _020D7678 - bl OS_GetDTCMAddress - ldr r1, _020D774C ; =0x01FF8000 - add r2, r9, r8 - cmp r2, r1 - mov r3, #0x1 - mov r1, #0x0 - bls _020D7650 - cmp r9, #0x2000000 - movcc r1, r3 -_020D7650: - cmp r1, #0x0 - bne _020D7670 - cmp r0, r2 - bhs _020D766C - add r0, r0, #0x4000 - cmp r0, r9 - bhi _020D7670 -_020D766C: - mov r3, #0x0 -_020D7670: - cmp r3, #0x0 - moveq r5, #0x1 -_020D7678: - cmp r5, #0x0 - beq _020D7694 - ldr r1, [r11, #0x1c] - ldr r0, _020D7750 ; =0x000001FF - orr r1, r1, r8 - ands r0, r1, r0 - moveq r6, #0x1 -_020D7694: - cmp r6, #0x0 - beq _020D76A4 - cmp r8, #0x0 - movne r7, #0x1 -_020D76A4: - ldr r0, _020D7754 ; =0x02106A50 - cmp r7, #0x0 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x60] - bic r0, r0, #0x7000000 - orr r0, r0, #0xa1000000 - str r0, [r10, #0x4] - beq _020D7738 - bl OS_DisableInterrupts - mov r5, r0 - mov r0, r9 - mov r1, r8 - bl IC_InvalidateRange -_020D76D8: - .byte 0x00, 0x00, 0x54, 0xE3, 0x07, 0x00, 0x00, 0x0A - .byte 0x04, 0x90, 0x49, 0xE0, 0x09, 0x00, 0xA0, 0xE1, 0x20, 0x10, 0xA0, 0xE3, 0x93, 0xD2, 0xFF, 0xEB - .byte 0x08, 0x00, 0x89, 0xE0, 0x20, 0x10, 0xA0, 0xE3, 0x90, 0xD2, 0xFF, 0xEB, 0x20, 0x80, 0x88, 0xE2 - .byte 0x09, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0xA0, 0xE1, 0x85, 0xD2, 0xFF, 0xEB, 0x9B, 0xD2, 0xFF, 0xEB - .byte 0x40, 0x10, 0x9F, 0xE5, 0x02, 0x07, 0xA0, 0xE3, 0x33, 0xCA, 0xFF, 0xEB, 0x02, 0x07, 0xA0, 0xE3 - .byte 0xAE, 0xC9, 0xFF, 0xEB, 0x02, 0x07, 0xA0, 0xE3, 0xCB, 0xC9, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1 - .byte 0xFB, 0xD6, 0xFF, 0xEB, 0x40, 0x00, 0x00, 0xEB -_020D7738: - mov r0, r7 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020D7748: .word 0x021D55C0 -_020D774C: .word 0x01FF8000 -_020D7750: .word 0x000001FF -_020D7754: .word 0x02106A50 -_020D7758: - .byte 0x5C, 0x77, 0x0D, 0x02 - - arm_func_start CARDi_OnReadCard -CARDi_OnReadCard: ; 0x020D775C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r0, _020D7838 ; =0x021D55C0 - ldr r0, [r0, #0x28] - bl MI_StopDma - ldr r0, _020D7838 ; =0x021D55C0 - ldr r3, [r0, #0x1c] - ldr r2, [r0, #0x20] - ldr r1, [r0, #0x24] - add r3, r3, #0x200 - add r2, r2, #0x200 - subs r1, r1, #0x200 - str r3, [r0, #0x1c] - str r2, [r0, #0x20] - str r1, [r0, #0x24] - bne _020D7828 - mov r0, #0x80000 - bl OS_DisableIrqMask - mov r0, #0x80000 - bl OS_ResetRequestIrqMask - ldr r7, _020D7838 ; =0x021D55C0 - bl CARDi_ReadRomIDCore - bl CARDi_CheckPulledOutCore -_020D77B8: - .byte 0x00, 0x00, 0x97, 0xE5, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x10, 0x80, 0xE5, 0x38, 0x60, 0x97, 0xE5, 0x3C, 0x50, 0x97, 0xE5, 0xCF, 0xD6, 0xFF, 0xEB - .byte 0x14, 0x11, 0x97, 0xE5, 0x00, 0x40, 0xA0, 0xE1, 0x4C, 0x00, 0xC1, 0xE3, 0x14, 0x01, 0x87, 0xE5 - .byte 0x43, 0x0F, 0x87, 0xE2, 0x9E, 0xCE, 0xFF, 0xEB, 0x14, 0x01, 0x97, 0xE5, 0x10, 0x00, 0x10, 0xE2 - .byte 0x01, 0x00, 0x00, 0x0A, 0x44, 0x00, 0x87, 0xE2, 0x8C, 0xCE, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1 - .byte 0xC7, 0xD6, 0xFF, 0xEB, 0x00, 0x00, 0x56, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x05, 0x00, 0xA0, 0xE1, 0x36, 0xFF, 0x2F, 0xE1, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D7828: - bl CARDi_SetCardDma - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020D7838: .word 0x021D55C0 - - arm_func_start CARDi_SetCardDma -CARDi_SetCardDma: ; 0x020D783C - stmdb sp!, {r4,lr} - ldr r4, _020D7884 ; =0x021D55C0 - ldr r1, _020D7888 ; =0x04100010 - ldr r0, [r4, #0x28] - ldr r2, [r4, #0x20] - mov r3, #0x200 - bl MIi_CardDmaCopy32 - ldr r1, [r4, #0x1c] - mov r0, r1, lsr #0x8 - orr r0, r0, #0xb7000000 - mov r1, r1, lsl #0x18 - bl CARDi_SetRomOp - ldr r0, _020D788C ; =0x021D5C00 - ldr r1, _020D7890 ; =0x040001A4 - ldr r0, [r0, #0x4] - str r0, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D7884: .word 0x021D55C0 -_020D7888: .word 0x04100010 -_020D788C: .word 0x021D5C00 -_020D7890: .word 0x040001A4 - - arm_func_start CARDi_SetRomOp -CARDi_SetRomOp: ; 0x020D7894 - ldr r3, _020D790C ; =0x040001A4 -_020D7898: - ldr r2, [r3, #0x0] - ands r2, r2, #0x80000000 - bne _020D7898 - ldr r3, _020D7910 ; =0x040001A1 - mov r12, #0xc0 - ldr r2, _020D7914 ; =0x040001A8 - strb r12, [r3, #0x0] - mov r12, r0, lsr #0x18 - ldr r3, _020D7918 ; =0x040001A9 - strb r12, [r2, #0x0] - mov r12, r0, lsr #0x10 - ldr r2, _020D791C ; =0x040001AA - strb r12, [r3, #0x0] - mov r12, r0, lsr #0x8 - ldr r3, _020D7920 ; =0x040001AB - strb r12, [r2, #0x0] - ldr r2, _020D7924 ; =0x040001AC - strb r0, [r3, #0x0] - mov r3, r1, lsr #0x18 - ldr r0, _020D7928 ; =0x040001AD - strb r3, [r2, #0x0] - mov r3, r1, lsr #0x10 - ldr r2, _020D792C ; =0x040001AE - strb r3, [r0, #0x0] - mov r3, r1, lsr #0x8 - ldr r0, _020D7930 ; =0x040001AF - strb r3, [r2, #0x0] - strb r1, [r0, #0x0] - bx lr - .balign 4 -_020D790C: .word 0x040001A4 -_020D7910: .word 0x040001A1 -_020D7914: .word 0x040001A8 -_020D7918: .word 0x040001A9 -_020D791C: .word 0x040001AA -_020D7920: .word 0x040001AB -_020D7924: .word 0x040001AC -_020D7928: .word 0x040001AD -_020D792C: .word 0x040001AE -_020D7930: .word 0x040001AF - - arm_func_start CARDi_ReadFromCache -CARDi_ReadFromCache: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r5, _020D79C8 ; =0x021D55C0 - mov r1, #0x200 - ldr r3, [r5, #0x1c] - rsb r1, r1, #0x0 - ldr r2, [r0, #0x8] - and r3, r3, r1 - cmp r3, r2 - bne _020D79AC - ldr r2, [r5, #0x1c] - ldr r1, [r5, #0x24] - sub r3, r2, r3 - rsb r4, r3, #0x200 - cmp r4, r1 - movhi r4, r1 - add r0, r0, #0x20 - ldr r1, [r5, #0x20] - mov r2, r4 - add r0, r0, r3 - bl MI_CpuCopy8 - ldr r0, [r5, #0x1c] - add r0, r0, r4 - str r0, [r5, #0x1c] - ldr r0, [r5, #0x20] - add r0, r0, r4 - str r0, [r5, #0x20] - ldr r0, [r5, #0x24] - sub r0, r0, r4 - str r0, [r5, #0x24] -_020D79AC: - ldr r0, [r5, #0x24] - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D79C8: .word 0x021D55C0 - - arm_func_start CARDi_Request -CARDi_Request: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r6, r0 - ldr r0, [r6, #0x114] - mov r5, r1 - mov r4, r2 - ands r0, r0, #0x2 - bne _020D7A44 - ldr r1, [r6, #0x114] - mov r0, #0xb - orr r2, r1, #0x2 - mov r1, #0x1 - str r2, [r6, #0x114] - bl PXI_IsCallbackReady -_020D7A04: - .byte 0x00, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x1A, 0x64, 0x90, 0xA0, 0xE3 - .byte 0x0B, 0x80, 0xA0, 0xE3, 0x01, 0x70, 0xA0, 0xE3, 0x09, 0x00, 0xA0, 0xE1, 0x57, 0xD6, 0xFF, 0xEB - .byte 0x08, 0x00, 0xA0, 0xE1, 0x07, 0x10, 0xA0, 0xE1, 0xD9, 0xE0, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0xF8, 0xFF, 0xFF, 0x0A, 0x06, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3 - .byte 0xE1, 0xFF, 0xFF, 0xEB -_020D7A44: - ldr r0, [r6, #0x0] - mov r1, #0x60 - bl DC_FlushRange - bl DC_WaitWriteBufferEmpty - mov r9, #0xb - mov r8, #0x1 - mov r7, #0x0 - mov r11, #0x60 - str r5, [r6, #0x4] - ldr r0, [r6, #0x114] - orr r0, r0, #0x20 - str r0, [r6, #0x114] - mov r0, r9 - mov r1, r5 - mov r2, r8 - bl PXI_SendWordByFifo -_020D7A84: - .byte 0x00, 0x00, 0x50, 0xE3, 0xF9, 0xFF, 0xFF, 0xBA, 0x00, 0x00, 0x55, 0xE3 - .byte 0x06, 0x00, 0x00, 0x1A, 0x00, 0xA0, 0x96, 0xE5, 0x09, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 - .byte 0x08, 0x20, 0xA0, 0xE1, 0x8D, 0xE0, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0xF9, 0xFF, 0xFF, 0xBA - .byte 0x16, 0xD6, 0xFF, 0xEB, 0x14, 0x11, 0x96, 0xE5, 0x00, 0xA0, 0xA0, 0xE1, 0x20, 0x00, 0x11, 0xE2 - .byte 0x04, 0x00, 0x00, 0x0A, 0x07, 0x00, 0xA0, 0xE1, 0x05, 0xCE, 0xFF, 0xEB, 0x14, 0x01, 0x96, 0xE5 - .byte 0x20, 0x00, 0x10, 0xE2, 0xFA, 0xFF, 0xFF, 0x1A, 0x0A, 0x00, 0xA0, 0xE1, 0x10, 0xD6, 0xFF, 0xEB - .byte 0x00, 0x00, 0x96, 0xE5, 0x0B, 0x10, 0xA0, 0xE1, 0x8D, 0xD1, 0xFF, 0xEB, 0x00, 0x00, 0x96, 0xE5 - .byte 0x00, 0x00, 0x90, 0xE5, 0x04, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x01, 0x40, 0x44, 0xE2 - .byte 0x00, 0x00, 0x54, 0xE3, 0xD6, 0xFF, 0xFF, 0xCA, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 - .byte 0x00, 0x00, 0xA0, 0x13, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CARDi_TaskThread -CARDi_TaskThread: ; 0x020D7B20 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r5, _020D7B78 ; =0x021D55C0 - mov r6, #0x0 - add r7, r5, #0x44 -_020D7B34: - bl OS_DisableInterrupts - ldr r1, [r5, #0x114] - mov r4, r0 - ands r0, r1, #0x8 - bne _020D7B60 -_020D7B48: - mov r0, r6 - str r7, [r5, #0x104] - bl OS_SleepThread - ldr r0, [r5, #0x114] - ands r0, r0, #0x8 - beq _020D7B48 -_020D7B60: - mov r0, r4 - bl OS_RestoreInterrupts - ldr r1, [r5, #0x40] - mov r0, r5 - blx r1 - b _020D7B34 - .balign 4 -_020D7B78: .word 0x021D55C0 - - arm_func_start CARDi_OnFifoRecv -CARDi_OnFifoRecv: ; 0x020D7B7C - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0xb - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - cmp r2, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - ldr r1, _020D7BC8 ; =0x021D55C0 - ldr r0, [r1, #0x114] - bic r0, r0, #0x20 - str r0, [r1, #0x114] - ldr r0, [r1, #0x104] - bl OS_WakeupThreadDirect - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D7BC8: .word 0x021D55C0 - - arm_func_start CARDi_SendtoPxi -CARDi_SendtoPxi: ; 0x020D7BCC - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r1, r7 - mov r0, #0xe - mov r2, #0x0 - bl PXI_SendWordByFifo -_020D7BEC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x0E, 0x50, 0xA0, 0xE3 - .byte 0x00, 0x40, 0xA0, 0xE3, 0x06, 0x00, 0xA0, 0xE1, 0x78, 0xA2, 0xFC, 0xFB, 0x05, 0x00, 0xA0, 0xE1 - .byte 0x07, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x30, 0xE0, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0xF7, 0xFF, 0xFF, 0x1A, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CARDi_CheckPulledOutCore -CARDi_CheckPulledOutCore: - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r1, _020D7C94 ; =0x027FFC10 - ldrh r1, [r1, #0x0] - cmp r1, #0x0 - ldreq r1, _020D7C98 ; =0x027FF800 - ldrne r1, _020D7C9C ; =0x027FFC00 - ldr r1, [r1, #0x0] - str r1, [sp, #0x0] - ldr r1, [sp, #0x0] - cmp r0, r1 - addeq sp, sp, #0x8 - ldmeqia sp!, {r4,lr} - bxeq lr - bl OS_DisableInterrupts - mov r4, r0 - mov r0, #0xe - mov r1, #0x11 - mov r2, #0x0 - bl CARDi_PulledOutCallback - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D7C94: .word 0x027FFC10 -_020D7C98: .word 0x027FF800 -_020D7C9C: .word 0x027FFC00 - - arm_func_start CARD_TerminateForPulledOut -CARD_TerminateForPulledOut: ; 0x020D7CA0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020D7D10 ; =0x027FFFA8 - mov r5, #0x1 - ldrh r0, [r0, #0x0] - and r0, r0, #0x8000 - movs r0, r0, asr #0xf - beq _020D7CEC - bl PM_ForceToPowerOff - cmp r0, #0x4 - bne _020D7CE4 - ldr r4, _020D7D14 ; =0x000A3A47 -_020D7CD0: - mov r0, r4 - bl OS_SpinWait - bl PM_ForceToPowerOff - cmp r0, #0x4 - beq _020D7CD0 -_020D7CE4: - cmp r0, #0x0 - moveq r5, #0x0 -_020D7CEC: - cmp r5, #0x0 - beq _020D7D00 - mov r0, #0x1 - mov r1, r0 - bl CARDi_SendtoPxi -_020D7D00: - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D7D10: .word 0x027FFFA8 -_020D7D14: .word 0x000A3A47 - - arm_func_start CARD_IsPulledOut -CARD_IsPulledOut: ; 0x020D7D18 - ldr r0, _020D7D24 ; =0x021D5E20 - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020D7D24: .word 0x021D5E20 - - arm_func_start CARDi_PulledOutCallback -CARDi_PulledOutCallback: ; 0x020D7D28 - stmdb sp!, {lr} - sub sp, sp, #0x4 - and r0, r1, #0x3f - cmp r0, #0x11 - bne _020D7D90 - ldr r2, _020D7DA0 ; =0x021D5E20 - ldr r0, [r2, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r1, _020D7DA4 ; =0x021D5E24 - mov r0, #0x1 - ldr r1, [r1, #0x0] - str r0, [r2, #0x0] - cmp r1, #0x0 - beq _020D7D70 - blx r1 -_020D7D70: - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - bl CARD_TerminateForPulledOut - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020D7D90: - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D7DA0: .word 0x021D5E20 -_020D7DA4: .word 0x021D5E24 - - arm_func_start CARD_InitPulledOutCallback -CARD_InitPulledOutCallback: ; 0x020D7DA8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl PXI_Init - ldr r1, _020D7DD8 ; =CARDi_PulledOutCallback - mov r0, #0xe - bl PXI_SetFifoRecvCallback - ldr r0, _020D7DDC ; =0x021D5E24 - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D7DD8: .word CARDi_PulledOutCallback -_020D7DDC: .word 0x021D5E24 - - arm_func_start WMi_GetMPReadyAIDs -WMi_GetMPReadyAIDs: ; 0x020D7DE0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - ldr r1, _020D7E30 ; =0x021D5E2C - mov r4, r0 - ldr r0, [r1, #0x0] - cmp r0, #0x0 - moveq r5, #0x0 - beq _020D7E18 - ldr r5, [r0, #0x4] - mov r1, #0x2 - add r0, r5, #0x86 - bl DC_InvalidateRange - ldrh r5, [r5, #0x86] -_020D7E18: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, r5 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D7E30: .word 0x021D5E2C - - arm_func_start WM_GetConnectedAIDs -WM_GetConnectedAIDs: ; 0x020D7E34 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020D7E64 ; =0x021D5E2C - ldr r1, [r1, #0x0] - cmp r1, #0x0 - ldrne r4, [r1, #0x14c] - moveq r4, #0x0 - bl OS_RestoreInterrupts - mov r0, r4, lsl #0x10 - mov r0, r0, lsr #0x10 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D7E64: .word 0x021D5E2C - - arm_func_start WM_GetAID -WM_GetAID: ; 0x020D7E68 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020D7E98 ; =0x021D5E2C - ldr r1, [r1, #0x0] - cmp r1, #0x0 - addne r1, r1, #0x100 - ldrneh r4, [r1, #0x50] - moveq r4, #0x0 - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D7E98: .word 0x021D5E2C - - arm_func_start WMi_GetStatusAddress -WMi_GetStatusAddress: ; 0x020D7E9C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl WMi_CheckInitialized -_020D7EA8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13 - .byte 0x10, 0x00, 0x9F, 0x05, 0x00, 0x00, 0x90, 0x05, 0x04, 0x00, 0x90, 0x05, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x2C, 0x5E, 0x1D, 0x02 - - arm_func_start WmClearFifoRecvFlag -WmClearFifoRecvFlag: ; 0x020D7ECC - ldr r1, _020D7EE4 ; =0x027FFF96 - ldrh r0, [r1, #0x0] - ands r2, r0, #0x1 - bicne r0, r0, #0x1 - strneh r0, [r1, #0x0] - bx lr - .balign 4 -_020D7EE4: .word 0x027FFF96 - - arm_func_start WmReceiveFifo -WmReceiveFifo: ; 0x020D7EE8 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - ldr r0, _020D82B0 ; =0x021D5E2C - cmp r2, #0x0 - ldr r8, [r0, #0x0] - mov r10, r1 - addne sp, sp, #0xc - ldmneia sp!, {r4-r11,lr} - bxne lr - ldr r0, [r8, #0x10] - mov r1, #0x100 - bl DC_InvalidateRange - ldrh r0, [r8, #0x16] - cmp r0, #0x0 - bne _020D7F30 - ldr r0, [r8, #0x4] - mov r1, #0x800 - bl DC_InvalidateRange -_020D7F30: - ldr r0, [r8, #0x10] - cmp r10, r0 - beq _020D7F48 - mov r0, r10 - mov r1, #0x100 - bl DC_InvalidateRange -_020D7F48: - ldrh r0, [r10, #0x0] - cmp r0, #0x2c - blo _020D8000 - cmp r0, #0x80 - bne _020D7F84 - ldrh r0, [r10, #0x2] - cmp r0, #0x13 - bne _020D7F6C - bl OS_Terminate -_020D7F6C: - ldr r1, [r8, #0xc8] - cmp r1, #0x0 - beq _020D8268 - mov r0, r10 - blx r1 - b _020D8268 -_020D7F84: - cmp r0, #0x82 - bne _020D7FD8 - ldrh r0, [r10, #0x6] - add r1, r8, r0, lsl #0x2 - ldr r0, [r1, #0xcc] - cmp r0, #0x0 - beq _020D8268 - ldr r0, [r1, #0x10c] - str r0, [r10, #0x1c] - ldr r0, [r8, #0x14c] - strh r0, [r10, #0x22] - ldr r1, [r8, #0x4] - ldr r0, [r10, #0x8] - ldrh r1, [r1, #0x72] - bl DC_InvalidateRange - ldrh r1, [r10, #0x6] - mov r0, r10 - add r1, r8, r1, lsl #0x2 - ldr r1, [r1, #0xcc] - blx r1 - b _020D8268 -_020D7FD8: - cmp r0, #0x81 - bne _020D8268 - mov r0, #0xf - strh r0, [r10, #0x0] - ldr r1, [r10, #0x1c] - cmp r1, #0x0 - beq _020D8268 - mov r0, r10 - blx r1 - b _020D8268 -_020D8000: - cmp r0, #0xe - bne _020D8040 - ldrh r1, [r10, #0x4] - ldr r0, _020D82B4 ; =0x0000FFF5 - add r0, r1, r0 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #0x1 - bhi _020D8040 - ldrh r0, [r10, #0x2] - cmp r0, #0x0 - bne _020D8040 - ldr r1, [r8, #0x4] - ldr r0, [r10, #0x8] - ldrh r1, [r1, #0x72] - bl DC_InvalidateRange -_020D8040: - ldrh r1, [r10, #0x0] - cmp r1, #0x2 - bne _020D8088 - ldrh r0, [r10, #0x2] - cmp r0, #0x0 - bne _020D8088 - add r0, r8, r1, lsl #0x2 - ldr r4, [r0, #0x18] - bl WM_Finish -_020D8064: - .byte 0x00, 0x00, 0x54, 0xE3, 0x0C, 0xD0, 0x8D, 0x02, 0xF0, 0x4F, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x0A, 0x00, 0xA0, 0xE1, 0x34, 0xFF, 0x2F, 0xE1, 0x0C, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D8088: - add r0, r8, r1, lsl #0x2 - ldr r1, [r0, #0x18] - cmp r1, #0x0 - beq _020D80B8 - mov r0, r10 - blx r1 - ldr r0, _020D82B8 ; =0x021D5E28 - ldrh r0, [r0, #0x0] - cmp r0, #0x0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4-r11,lr} - bxeq lr -_020D80B8: - ldrh r0, [r10, #0x0] - cmp r0, #0x8 - beq _020D80CC - cmp r0, #0xc - bne _020D8268 -_020D80CC: - cmp r0, #0x8 - bne _020D8100 - add r0, r10, #0xa - str r0, [sp, #0x0] - ldrh r0, [r10, #0x2c] - add r11, r10, #0x14 - ldrh r7, [r10, #0x8] - ldrh r6, [r10, #0x10] - ldrh r4, [r10, #0x12] - str r0, [sp, #0x4] - ldrh r9, [r10, #0x2e] - mov r5, #0x0 - b _020D8130 -_020D8100: - cmp r0, #0xc - bne _020D8130 - ldrh r0, [r10, #0x16] - mov r6, #0x0 - ldrh r7, [r10, #0x8] - str r0, [sp, #0x4] - add r0, r10, #0x10 - ldrh r5, [r10, #0xa] - ldrh r4, [r10, #0xc] - ldrh r9, [r10, #0x18] - mov r11, r6 - str r0, [sp, #0x0] -_020D8130: - cmp r7, #0x7 - beq _020D8148 - cmp r7, #0x9 - beq _020D8148 - cmp r7, #0x1a - bne _020D8268 -_020D8148: - cmp r7, #0x7 - ldreq r1, [r8, #0x14c] - moveq r0, #0x1 - orreq r0, r1, r0, lsl r6 - streq r0, [r8, #0x14c] - movne r0, #0x1 - mvnne r0, r0, lsl r6 - ldrne r1, [r8, #0x14c] - add r3, r8, #0x100 - andne r0, r1, r0 - strne r0, [r8, #0x14c] - ldr r0, _020D82BC ; =0x021D5E78 - mov r1, #0x0 - mov r2, #0x44 - strh r5, [r3, #0x50] - bl MI_CpuFill8 - ldr r3, _020D82BC ; =0x021D5E78 - mov r1, #0x0 - mov r2, #0x82 - strh r2, [r3, #0x0] - strh r7, [r3, #0x4] - strh r6, [r3, #0x12] - strh r5, [r3, #0x20] - strh r1, [r3, #0x2] - str r1, [r3, #0x8] - str r1, [r3, #0xc] - strh r1, [r3, #0x10] - ldr r1, [r8, #0x14c] - ldr r2, _020D82C0 ; =0x0000FFFF - strh r1, [r3, #0x22] - strh r2, [r3, #0x1a] - ldr r0, [sp, #0x0] - ldr r1, _020D82C4 ; =0x021D5E8C - mov r2, #0x6 - strh r4, [r3, #0x3c] - bl MI_CpuCopy8 -_020D81D8: - .byte 0x00, 0x00, 0x5B, 0xE3, 0x04, 0x00, 0x00, 0x0A - .byte 0xE0, 0x10, 0x9F, 0xE5, 0x0B, 0x00, 0xA0, 0xE1, 0x18, 0x20, 0xA0, 0xE3, 0xFB, 0xD7, 0xFF, 0xEB - .byte 0x03, 0x00, 0x00, 0xEA, 0xCC, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x18, 0x20, 0xA0, 0xE3 - .byte 0xF0, 0xD7, 0xFF, 0xEB, 0x00, 0x00, 0x55, 0xE3, 0x04, 0x10, 0x9D, 0x05, 0xA8, 0x00, 0x9F, 0xE5 - .byte 0x09, 0x10, 0xA0, 0x11, 0x00, 0x00, 0x55, 0xE3, 0x04, 0x90, 0x9D, 0x15, 0x98, 0x50, 0x9F, 0xE5 - .byte 0xB0, 0x14, 0xC0, 0xE1, 0x00, 0x40, 0xA0, 0xE3, 0xB2, 0x94, 0xC5, 0xE1, 0xB6, 0x40, 0xC5, 0xE1 - .byte 0x04, 0x21, 0x88, 0xE0, 0xCC, 0x00, 0x92, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A - .byte 0x0C, 0x11, 0x92, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x1C, 0x10, 0x85, 0xE5, 0xCC, 0x10, 0x92, 0xE5 - .byte 0x31, 0xFF, 0x2F, 0xE1, 0x01, 0x00, 0x84, 0xE2, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x48, 0xA0, 0xE1 - .byte 0x10, 0x00, 0x54, 0xE3, 0xF0, 0xFF, 0xFF, 0x3A -_020D8268: - ldr r0, [r8, #0x10] - mov r1, #0x100 - bl DC_InvalidateRange - bl WmClearFifoRecvFlag - ldr r0, [r8, #0x10] - cmp r10, r0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4-r11,lr} - bxeq lr - ldrh r2, [r10, #0x0] - mov r0, r10 - mov r1, #0x100 - orr r2, r2, #0x8000 - strh r2, [r10, #0x0] - bl DC_StoreRange - add sp, sp, #0xc - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020D82B0: .word 0x021D5E2C -_020D82B4: .word 0x0000FFF5 -_020D82B8: .word 0x021D5E28 -_020D82BC: .word 0x021D5E78 -_020D82C0: .word 0x0000FFFF -_020D82C4: .word 0x021D5E8C -_020D82C8: - .byte 0x9C, 0x5E, 0x1D, 0x02 - - arm_func_start WMi_CheckStateEx -WMi_CheckStateEx: - stmdb sp!, {r0-r3} - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl WMi_CheckInitialized -_020D82DC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x10, 0xD0, 0x8D, 0x12, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x78, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x90, 0xE5, 0x04, 0x00, 0x90, 0xE5 - .byte 0x87, 0xCF, 0xFF, 0xEB, 0x64, 0x00, 0x9F, 0xE5, 0x08, 0x10, 0x8D, 0xE2, 0x00, 0x20, 0x90, 0xE5 - .byte 0x08, 0x00, 0x9D, 0xE5, 0x04, 0x20, 0x92, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x10, 0xC1, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x02, 0x04, 0xC0, 0x81, 0xE2, 0xB0, 0x30, 0xD2, 0xE1, 0x03, 0x00, 0xA0, 0xE3 - .byte 0x00, 0x40, 0xBD, 0x08, 0x10, 0xD0, 0x8D, 0x02, 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x20, 0xA0, 0xE3 - .byte 0x04, 0xC0, 0x8C, 0xE2, 0x04, 0x10, 0x1C, 0xE5, 0x03, 0x00, 0x51, 0xE1, 0x08, 0x10, 0x9D, 0xE5 - .byte 0x02, 0x00, 0xA0, 0x01, 0x01, 0x10, 0x51, 0xE2, 0x08, 0x10, 0x8D, 0xE5, 0xF7, 0xFF, 0xFF, 0x1A - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x10, 0xD0, 0x8D, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x2C, 0x5E, 0x1D, 0x02 - - arm_func_start WMi_CheckIdle -WMi_CheckIdle: - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl WMi_CheckInitialized -_020D8380: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x34, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x90, 0xE5, 0x04, 0x00, 0x90, 0xE5 - .byte 0x5F, 0xCF, 0xFF, 0xEB, 0x20, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x04, 0x00, 0x90, 0xE5 - .byte 0xB0, 0x00, 0xD0, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x03, 0x00, 0xA0, 0x93, 0x00, 0x00, 0xA0, 0x83 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x2C, 0x5E, 0x1D, 0x02 - - arm_func_start WMi_CheckInitialized -WMi_CheckInitialized: - ldr r0, _020D83E8 ; =0x021D5E28 - ldrh r0, [r0, #0x0] - cmp r0, #0x0 - movne r0, #0x0 - moveq r0, #0x3 - bx lr - .balign 4 -_020D83E8: .word 0x021D5E28 - - arm_func_start WMi_GetSystemWork -WMi_GetSystemWork: ; 0x020D83EC - ldr r0, _020D83F8 ; =0x021D5E2C - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020D83F8: .word 0x021D5E2C - - arm_func_start WMi_SendCommandDirect -WMi_SendCommandDirect: ; 0x020D83FC - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r4, r1 - bl WmGetCommandBuffer4Arm7 - movs r5, r0 - moveq r0, #0x8 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl MI_CpuCopy8 - mov r0, r5 - mov r1, r4 - bl DC_StoreRange - mov r1, r5 - mov r0, #0xa - mov r2, #0x0 - bl PXI_SendWordByFifo - mov r4, r0 - ldr r0, _020D8470 ; =0x021D5E30 - mov r1, r5 - mov r2, #0x1 - bl OS_SendMessage -_020D845C: - .byte 0x00, 0x00, 0x54, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xB3, 0x02, 0x00, 0xA0, 0xA3, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D8470: .word 0x021D5E30 - - arm_func_start WMi_SendCommand -WMi_SendCommand: ; 0x020D8474 - stmdb sp!, {r0-r3} - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r0 - bl WmGetCommandBuffer4Arm7 - movs r5, r0 - addeq sp, sp, #0x4 - moveq r0, #0x8 - ldmeqia sp!, {r4-r5,lr} - addeq sp, sp, #0x10 - bxeq lr - strh r4, [r5, #0x0] - ldrh r2, [sp, #0x14] - add r0, sp, #0x14 - bic r0, r0, #0x3 - mov r3, #0x0 - cmp r2, #0x0 - add r4, r0, #0x4 - ble _020D84DC -_020D84C0: - add r4, r4, #0x4 - ldr r1, [r4, #-0x4] - add r0, r5, r3, lsl #0x2 - add r3, r3, #0x1 - str r1, [r0, #0x4] - cmp r3, r2 - blt _020D84C0 -_020D84DC: - mov r0, r5 - mov r1, #0x100 - bl DC_StoreRange - mov r1, r5 - mov r0, #0xa - mov r2, #0x0 - bl PXI_SendWordByFifo - mov r4, r0 - ldr r0, _020D8528 ; =0x021D5E30 - mov r1, r5 - mov r2, #0x1 - bl OS_SendMessage -_020D850C: - .byte 0x00, 0x00, 0x54, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xB3, 0x02, 0x00, 0xA0, 0xA3, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 - .byte 0x10, 0xD0, 0x8D, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1 -_020D8528: .word 0x021D5E30 - - arm_func_start WmGetCommandBuffer4Arm7 -WmGetCommandBuffer4Arm7: ; 0x020D852C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020D859C ; =0x021D5E30 - add r1, sp, #0x0 - mov r2, #0x0 - bl OS_ReceiveMessage -_020D8544: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x00, 0x00, 0xA0, 0x03 - .byte 0x00, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0x9D, 0xE5, 0x02, 0x10, 0xA0, 0xE3 - .byte 0xEF, 0xCE, 0xFF, 0xEB, 0x00, 0x10, 0x9D, 0xE5, 0xB0, 0x00, 0xD1, 0xE1, 0x02, 0x09, 0x10, 0xE2 - .byte 0x04, 0xD0, 0x8D, 0x12, 0x01, 0x00, 0xA0, 0x11, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x14, 0x00, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0xB5, 0xCD, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D859C: .word 0x021D5E30 - - arm_func_start WMi_SetCallbackTable -WMi_SetCallbackTable: ; 0x020D85A0 - ldr r2, _020D85B4 ; =0x021D5E2C - ldr r2, [r2, #0x0] - add r0, r2, r0, lsl #0x2 - str r1, [r0, #0x18] - bx lr - .balign 4 -_020D85B4: .word 0x021D5E2C - - arm_func_start WM_Finish -WM_Finish: - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - mov r4, r0 - bl WMi_CheckInitialized -_020D85C8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A - .byte 0x04, 0x00, 0xA0, 0xE1, 0x52, 0xD3, 0xFF, 0xEB, 0x03, 0x00, 0xA0, 0xE3, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x36, 0xFF, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x32, 0xFE, 0xFF, 0xEB - .byte 0x0A, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0xEB, 0xDD, 0xFF, 0xEB, 0x20, 0x20, 0x9F, 0xE5 - .byte 0x00, 0x30, 0xA0, 0xE3, 0x1C, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0xA0, 0xE1, 0x00, 0x30, 0x82, 0xE5 - .byte 0xB0, 0x30, 0xC1, 0xE1, 0x3E, 0xD3, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x2C, 0x5E, 0x1D, 0x02, 0x28, 0x5E, 0x1D, 0x02 - - arm_func_start WmInitCore -WmInitCore: - stmdb sp!, {r4-r10,lr} - mov r6, r0 - mov r5, r1 - mov r7, r2 - bl OS_DisableInterrupts - ldr r1, _020D881C ; =0x021D5E28 - mov r4, r0 - ldrh r1, [r1, #0x0] - cmp r1, #0x0 - beq _020D8674 - bl OS_RestoreInterrupts - mov r0, #0x3 - ldmia sp!, {r4-r10,lr} - bx lr -_020D8674: - cmp r6, #0x0 - bne _020D868C - bl OS_RestoreInterrupts - mov r0, #0x6 - ldmia sp!, {r4-r10,lr} - bx lr -_020D868C: - cmp r5, #0x3 - bls _020D86A4 - bl OS_RestoreInterrupts - mov r0, #0x6 - ldmia sp!, {r4-r10,lr} - bx lr -_020D86A4: - ands r1, r6, #0x1f - beq _020D86BC - bl OS_RestoreInterrupts - mov r0, #0x6 - ldmia sp!, {r4-r10,lr} - bx lr -_020D86BC: - bl PXI_Init - mov r0, #0xa - mov r1, #0x1 - bl PXI_IsCallbackReady -_020D86CC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0x00, 0x00, 0x1A, 0x04, 0x00, 0xA0, 0xE1, 0x11, 0xD3, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE3 - .byte 0xF0, 0x47, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x06, 0x00, 0xA0, 0xE1, 0x07, 0x10, 0xA0, 0xE1 - .byte 0x8B, 0xCE, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x07, 0x30, 0xA0, 0xE1 - .byte 0x00, 0x20, 0xA0, 0xE3, 0x7D, 0xD5, 0xFF, 0xEB, 0x10, 0x01, 0x9F, 0xE5, 0x02, 0x1C, 0x86, 0xE2 - .byte 0x00, 0x60, 0x80, 0xE5, 0x00, 0x10, 0x86, 0xE5, 0x00, 0x20, 0x90, 0xE5, 0x00, 0x10, 0x92, 0xE5 - .byte 0x03, 0x1C, 0x81, 0xE2, 0x04, 0x10, 0x82, 0xE5, 0x00, 0x20, 0x90, 0xE5, 0x04, 0x10, 0x92, 0xE5 - .byte 0x02, 0x1B, 0x81, 0xE2, 0x0C, 0x10, 0x82, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x0C, 0x00, 0x91, 0xE5 - .byte 0x01, 0x0C, 0x80, 0xE2, 0x10, 0x00, 0x81, 0xE5, 0xDF, 0xFD, 0xFF, 0xEB, 0xCC, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x30, 0xA0, 0xE3, 0x00, 0x00, 0x91, 0xE5, 0xB4, 0x51, 0xC0, 0xE1, 0x00, 0x00, 0x91, 0xE5 - .byte 0x4C, 0x31, 0x80, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x01, 0x0C, 0x80, 0xE2, 0xB0, 0x35, 0xC0, 0xE1 - .byte 0x03, 0x20, 0xA0, 0xE1, 0x00, 0x00, 0x91, 0xE5, 0x03, 0x01, 0x80, 0xE0, 0xCC, 0x20, 0x80, 0xE5 - .byte 0x00, 0x00, 0x91, 0xE5, 0x03, 0x01, 0x80, 0xE0, 0x01, 0x30, 0x83, 0xE2, 0x0C, 0x21, 0x80, 0xE5 - .byte 0x10, 0x00, 0x53, 0xE3, 0xF6, 0xFF, 0xFF, 0xBA, 0x84, 0x00, 0x9F, 0xE5, 0x84, 0x10, 0x9F, 0xE5 - .byte 0x0A, 0x20, 0xA0, 0xE3, 0xB0, 0xCD, 0xFF, 0xEB, 0x7C, 0x90, 0x9F, 0xE5, 0x00, 0xA0, 0xA0, 0xE3 - .byte 0x6C, 0x60, 0x9F, 0xE5, 0x02, 0x89, 0xA0, 0xE3, 0x02, 0x70, 0xA0, 0xE3, 0x01, 0x50, 0xA0, 0xE3 - .byte 0x09, 0x00, 0xA0, 0xE1, 0x07, 0x10, 0xA0, 0xE1, 0xB0, 0x80, 0xC9, 0xE1, 0x5B, 0xCE, 0xFF, 0xEB - .byte 0x06, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x78, 0xCD, 0xFF, 0xEB - .byte 0x01, 0xA0, 0x8A, 0xE2, 0x0A, 0x00, 0x5A, 0xE3, 0x01, 0x9C, 0x89, 0xE2, 0xF3, 0xFF, 0xFF, 0xBA - .byte 0x38, 0x10, 0x9F, 0xE5, 0x0A, 0x00, 0xA0, 0xE3, 0x6F, 0xDD, 0xFF, 0xEB, 0x18, 0x10, 0x9F, 0xE5 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x04, 0x00, 0xA0, 0xE1, 0xB0, 0x20, 0xC1, 0xE1, 0xC4, 0xD2, 0xFF, 0xEB - .byte 0x00, 0x00, 0xA0, 0xE3, 0xF0, 0x47, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D881C: .word 0x021D5E28 -_020D8820: - .byte 0x2C, 0x5E, 0x1D, 0x02, 0x30, 0x5E, 0x1D, 0x02, 0x50, 0x5E, 0x1D, 0x02, 0xC0, 0x5E, 0x1D, 0x02 - .byte 0xE8, 0x7E, 0x0D, 0x02 - - arm_func_start WM_Init -WM_Init: - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, #0xf00 - bl WmInitCore -_020D8844: - .byte 0x00, 0x00, 0x50, 0xE3, 0x14, 0x10, 0x9F, 0x05, 0x00, 0x20, 0xA0, 0x03 - .byte 0x00, 0x10, 0x91, 0x05, 0xB6, 0x21, 0xC1, 0x01, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x2C, 0x5E, 0x1D, 0x02 - - arm_func_start WM_GetNextTgid -WM_GetNextTgid: ; 0x020D8868 - stmdb sp!, {lr} - sub sp, sp, #0xc - - arm_func_start FUN_020d8870 -FUN_020d8870: ; 0x020D8870 - ldr r0, _020D88DC ; =0x02106A54 - ldr r0, [r0, #0x0] - cmp r0, #0x10000 - bne _020D88B0 - bl RTC_Init -_020D8884: - .byte 0x00, 0x00, 0x8D, 0xE2, 0xD0, 0xF5, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0x00, 0x1A, 0x08, 0x20, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0x38, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x04, 0x82, 0xE0, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1, 0x00, 0x00, 0x81, 0xE5 -_020D88B0: - ldr r1, _020D88DC ; =0x02106A54 - ldr r0, [r1, #0x0] - add r0, r0, #0x1 - mov r0, r0, lsl #0x10 - mov r2, r0, lsr #0x10 - mov r0, r2, lsl #0x10 - str r2, [r1, #0x0] - mov r0, r0, lsr #0x10 - add sp, sp, #0xc - ldmia sp!, {lr} - bx lr - .balign 4 -_020D88DC: .word 0x02106A54 - - arm_func_start WM_GetOtherElements -WM_GetOtherElements: ; 0x020D88E0 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x88 - ldrh r2, [r1, #0x3c] - mov lr, r0 - cmp r2, #0x0 - beq _020D892C - mov r0, #0x0 - add r5, sp, #0x0 - strb r0, [sp, #0x0] - mov r4, #0x8 -_020D8908: - ldmia r5!, {r0-r3} - stmia lr!, {r0-r3} - subs r4, r4, #0x1 - bne _020D8908 - ldr r0, [r5, #0x0] - add sp, sp, #0x88 - str r0, [lr, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr -_020D892C: - ldrh r0, [r1, #0x3e] - strb r0, [sp, #0x0] - ldrb r0, [sp, #0x0] - cmp r0, #0x0 - bne _020D896C - add r5, sp, #0x0 - mov r4, #0x8 -_020D8948: - ldmia r5!, {r0-r3} - stmia lr!, {r0-r3} - subs r4, r4, #0x1 - bne _020D8948 - ldr r0, [r5, #0x0] - add sp, sp, #0x88 - str r0, [lr, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr -_020D896C: - cmp r0, #0x10 - movhi r0, #0x10 - strhib r0, [sp, #0x0] - ldrh r2, [r1, #0x0] - ldrb r3, [sp, #0x0] - mov r0, #0x0 - mov r2, r2, lsl #0x1 - sub r4, r2, #0x40 - cmp r3, #0x0 - add r3, r1, #0x40 - mov r2, r0 - and r1, r4, #0xff - ble _020D8A20 - add r12, sp, #0x0 -_020D89A4: - ldrb r5, [r3, #0x0] - add r6, r12, r2, lsl #0x3 - add r4, r3, #0x2 - strb r5, [r6, #0x4] - ldrb r5, [r3, #0x1] - strb r5, [r6, #0x5] - str r4, [r6, #0x8] - ldrb r4, [r6, #0x5] - add r4, r4, #0x2 - and r5, r4, #0xff - add r0, r0, r5 - and r0, r0, #0xff - cmp r0, r1 - bls _020D8A0C - mov r0, #0x0 - strb r0, [sp, #0x0] - mov r4, #0x8 -_020D89E8: - ldmia r12!, {r0-r3} - stmia lr!, {r0-r3} - subs r4, r4, #0x1 - bne _020D89E8 - ldr r0, [r12, #0x0] - add sp, sp, #0x88 - str r0, [lr, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr -_020D8A0C: - ldrb r4, [sp, #0x0] - add r2, r2, #0x1 - add r3, r3, r5 - cmp r2, r4 - blt _020D89A4 -_020D8A20: - add r4, sp, #0x0 - mov r12, #0x8 -_020D8A28: - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - subs r12, r12, #0x1 - bne _020D8A28 - ldr r0, [r4, #0x0] - str r0, [lr, #0x0] - add sp, sp, #0x88 - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start WM_GetDispersionScanPeriod -WM_GetDispersionScanPeriod: ; 0x020D8A4C - stmdb sp!, {lr} - sub sp, sp, #0xc - add r0, sp, #0x0 - bl OS_GetMacAddress - mov r2, #0x0 - add r1, sp, #0x0 - mov r3, r2 -_020D8A68: - ldrb r0, [r1, #0x0] - add r2, r2, #0x1 - cmp r2, #0x6 - add r0, r3, r0 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - add r1, r1, #0x1 - blt _020D8A68 - ldr r0, _020D8AE4 ; =0x027FFC3C - mov r1, #0xd - ldr r0, [r0, #0x0] - ldr r2, _020D8AE8 ; =0x66666667 - add r0, r3, r0 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - mul r0, r3, r1 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - smull r0, r1, r2, r3 - mov r1, r1, asr #0x2 - mov r0, r3, lsr #0x1f - ldr r2, _020D8AEC ; =0x0000000A - add r1, r0, r1 - smull r0, r1, r2, r1 - sub r1, r3, r0 - add r0, r1, #0x1e - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0xc - ldmia sp!, {lr} - bx lr - .balign 4 -_020D8AE4: .word 0x027FFC3C -_020D8AE8: .word 0x66666667 -_020D8AEC: .word 0x0000000A - - arm_func_start WM_GetDispersionBeaconPeriod -WM_GetDispersionBeaconPeriod: ; 0x020D8AF0 - stmdb sp!, {lr} - sub sp, sp, #0xc - add r0, sp, #0x0 - bl OS_GetMacAddress - mov r2, #0x0 - add r1, sp, #0x0 - mov r3, r2 -_020D8B0C: - ldrb r0, [r1, #0x0] - add r2, r2, #0x1 - cmp r2, #0x6 - add r0, r3, r0 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - add r1, r1, #0x1 - blt _020D8B0C - ldr r0, _020D8B88 ; =0x027FFC3C - mov r1, #0x7 - ldr r0, [r0, #0x0] - ldr r2, _020D8B8C ; =0x66666667 - add r0, r3, r0 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - mul r0, r3, r1 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - smull r0, r1, r2, r3 - mov r1, r1, asr #0x3 - mov r0, r3, lsr #0x1f - ldr r2, _020D8B90 ; =0x00000014 - add r1, r0, r1 - smull r0, r1, r2, r1 - sub r1, r3, r0 - add r0, r1, #0xc8 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0xc - ldmia sp!, {lr} - bx lr - .balign 4 -_020D8B88: .word 0x027FFC3C -_020D8B8C: .word 0x66666667 -_020D8B90: .word 0x00000014 - - arm_func_start WM_GetLinkLevel -WM_GetLinkLevel: ; 0x020D8B94 - stmdb sp!, {r4,lr} - bl WMi_GetSystemWork - mov r4, r0 - bl WMi_CheckInitialized -_020D8BA4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x10, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x00, 0x94, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x58, 0xCD, 0xFF, 0xEB - .byte 0x04, 0x20, 0x94, 0xE5, 0xB0, 0x00, 0xD2, 0xE1, 0x09, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A - .byte 0x0A, 0x00, 0x50, 0xE3, 0x0D, 0x00, 0x00, 0x0A, 0x0B, 0x00, 0x50, 0xE3, 0x0B, 0x00, 0x00, 0x0A - .byte 0x11, 0x00, 0x00, 0xEA, 0x4C, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x82, 0xE0 - .byte 0x4B, 0xCD, 0xFF, 0xEB, 0x04, 0x20, 0x94, 0xE5, 0x01, 0x0C, 0x82, 0xE2, 0xB2, 0x08, 0xD0, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0xBC, 0x00, 0x82, 0xE2, 0x02, 0x10, 0xA0, 0xE3, 0x41, 0xCD, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5 - .byte 0xBC, 0x0B, 0xD0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x82, 0x01, 0x00, 0x00 - - arm_func_start WM_GetAllowedChannel -WM_GetAllowedChannel: ; 0x020D8C3C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl WMi_CheckInitialized -_020D8C48: - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x09, 0xA0, 0x13 - .byte 0x0C, 0x00, 0x9F, 0x05, 0xB0, 0x00, 0xD0, 0x01, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xFA, 0xFC, 0x7F, 0x02 - - arm_func_start WM_ReadMPData -WM_ReadMPData: ; 0x020D8C68 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x40 - mov r5, r0 - mov r4, r1 - bl WMi_GetSystemWork - mov r6, r0 - bl WMi_CheckInitialized -_020D8C84: - .byte 0x00, 0x00, 0x50, 0xE3, 0x40, 0xD0, 0x8D, 0x12, 0x00, 0x00, 0xA0, 0x13 - .byte 0x70, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x01, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x3A - .byte 0x0F, 0x00, 0x54, 0xE3, 0x03, 0x00, 0x00, 0x9A, 0x40, 0xD0, 0x8D, 0xE2, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x04, 0x20, 0x96, 0xE5, 0xA4, 0x00, 0x9F, 0xE5 - .byte 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x82, 0xE0, 0x15, 0xCD, 0xFF, 0xEB, 0x04, 0x00, 0x96, 0xE5 - .byte 0x01, 0x10, 0xA0, 0xE3, 0x01, 0x0C, 0x80, 0xE2, 0xB2, 0x28, 0xD0, 0xE1, 0x11, 0x04, 0xA0, 0xE1 - .byte 0x00, 0x00, 0x12, 0xE0, 0x40, 0xD0, 0x8D, 0x02, 0x00, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0xB4, 0x00, 0xD5, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x40, 0xD0, 0x8D, 0x02 - .byte 0x00, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x0A, 0x00, 0x85, 0xE2 - .byte 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE3, 0x00, 0x20, 0x8D, 0xE2, 0x03, 0x01, 0x92, 0xE7 - .byte 0xB4, 0x10, 0xD0, 0xE1, 0x01, 0x00, 0x54, 0xE1, 0x40, 0xD0, 0x8D, 0x02, 0x70, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0x30, 0x83, 0xE2, 0x01, 0x00, 0x43, 0xE2, 0xB6, 0x10, 0xD5, 0xE1 - .byte 0x00, 0x01, 0x92, 0xE7, 0x00, 0x00, 0x81, 0xE0, 0x03, 0x01, 0x82, 0xE7, 0xB4, 0x00, 0xD5, 0xE1 - .byte 0x00, 0x00, 0x53, 0xE1, 0xF0, 0xFF, 0xFF, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x40, 0xD0, 0x8D, 0xE2 - .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x82, 0x01, 0x00, 0x00 - - arm_func_start WM_GetMPReceiveBufferSize -WM_GetMPReceiveBufferSize: ; 0x020D8D6C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl WMi_GetSystemWork - mov r4, r0 - mov r0, #0x2 - mov r1, #0x7 - mov r2, #0x8 - bl WMi_CheckStateEx -_020D8D8C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x00, 0xA0, 0x13, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x04, 0x00, 0x94, 0xE5, 0x04, 0x10, 0xA0, 0xE3, 0x0C, 0x00, 0x80, 0xE2, 0xDC, 0xCC, 0xFF, 0xEB - .byte 0x04, 0x10, 0x94, 0xE5, 0x0C, 0x00, 0x91, 0xE5, 0x01, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02 - .byte 0x00, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x62, 0x0F, 0x81, 0xE2 - .byte 0x02, 0x10, 0xA0, 0xE3, 0xD2, 0xCC, 0xFF, 0xEB, 0x04, 0x10, 0x94, 0xE5, 0x01, 0x0C, 0x81, 0xE2 - .byte 0xB8, 0x08, 0xD0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x50, 0xA0, 0x03, 0x3E, 0x00, 0x81, 0xE2 - .byte 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x50, 0xA0, 0x13, 0xC9, 0xCC, 0xFF, 0xEB, 0x01, 0x00, 0x55, 0xE3 - .byte 0x04, 0x00, 0x94, 0xE5, 0x04, 0xD0, 0x8D, 0x12, 0xBE, 0x53, 0xD0, 0xE1, 0x51, 0x00, 0x85, 0x12 - .byte 0x1F, 0x00, 0xC0, 0x13, 0x80, 0x00, 0xA0, 0x11, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0xF8, 0x00, 0x80, 0xE2, 0x02, 0x10, 0xA0, 0xE3, 0xBD, 0xCC, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5 - .byte 0x0C, 0x10, 0x85, 0xE2, 0xB8, 0x0F, 0xD0, 0xE1, 0x91, 0x00, 0x00, 0xE0, 0x29, 0x00, 0x80, 0xE2 - .byte 0x1F, 0x00, 0xC0, 0xE3, 0x80, 0x00, 0xA0, 0xE1, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_GetMPSendBufferSize -WM_GetMPSendBufferSize: ; 0x020D8E54 - stmdb sp!, {r4,lr} - bl WMi_GetSystemWork - mov r4, r0 - mov r0, #0x2 - mov r1, #0x7 - mov r2, #0x8 - bl WMi_CheckStateEx -_020D8E70: - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x04, 0x00, 0x94, 0xE5, 0x04, 0x10, 0xA0, 0xE3, 0x0C, 0x00, 0x80, 0xE2, 0xA4, 0xCC, 0xFF, 0xEB - .byte 0x04, 0x10, 0x94, 0xE5, 0x0C, 0x00, 0x91, 0xE5, 0x01, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x03 - .byte 0x10, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x3C, 0x00, 0x81, 0xE2, 0x04, 0x10, 0xA0, 0xE3 - .byte 0x9B, 0xCC, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0xBC, 0x03, 0xD0, 0xE1, 0x1F, 0x00, 0x80, 0xE2 - .byte 0x1F, 0x00, 0xC0, 0xE3, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_ReadStatus -WM_ReadStatus: ; 0x020D8ECC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl WMi_GetSystemWork - mov r4, r0 - bl WMi_CheckInitialized -_020D8EE4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x55, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03 - .byte 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x04, 0x00, 0x94, 0xE5, 0x1F, 0x1D, 0xA0, 0xE3 - .byte 0x83, 0xCC, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0x05, 0x10, 0xA0, 0xE1, 0x1F, 0x2D, 0xA0, 0xE3 - .byte 0xD9, 0xD4, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_SetPortCallback -WM_SetPortCallback: ; 0x020D8F34 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x48 - movs r5, r1 - mov r6, r0 - mov r4, r2 - beq _020D8F9C - add r0, sp, #0x0 - mov r1, #0x0 - mov r2, #0x44 - bl MI_CpuFill8 - mov r3, #0x0 - ldr r1, _020D9010 ; =0x0000FFFF - mov r7, #0x82 - mov r2, #0x19 - add r0, sp, #0x14 - strh r7, [sp, #0x0] - strh r3, [sp, #0x2] - strh r2, [sp, #0x4] - strh r6, [sp, #0x6] - str r3, [sp, #0x8] - str r3, [sp, #0xc] - strh r3, [sp, #0x10] - strh r1, [sp, #0x1a] - str r4, [sp, #0x1c] - strh r3, [sp, #0x12] - bl OS_GetMacAddress -_020D8F9C: - bl OS_DisableInterrupts - mov r8, r0 - bl WMi_CheckInitialized - movs r7, r0 - beq _020D8FC8 - mov r0, r8 - bl OS_RestoreInterrupts - add sp, sp, #0x48 - mov r0, r7 - ldmia sp!, {r4-r8,lr} - bx lr -_020D8FC8: - bl WMi_GetSystemWork - add r0, r0, r6, lsl #0x2 - str r5, [r0, #0xcc] - str r4, [r0, #0x10c] - cmp r5, #0x0 - beq _020D8FF8 - bl WM_GetConnectedAIDs - strh r0, [sp, #0x22] - bl WM_GetAID - strh r0, [sp, #0x20] - add r0, sp, #0x0 - blx r5 -_020D8FF8: - mov r0, r8 - bl OS_RestoreInterrupts -_020D9000: - .byte 0x00, 0x00, 0xA0, 0xE3, 0x48, 0xD0, 0x8D, 0xE2, 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D9010: .word 0x0000FFFF - - arm_func_start WM_SetIndCallback -WM_SetIndCallback: ; 0x020D9014 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - bl OS_DisableInterrupts - mov r5, r0 - bl WMi_CheckInitialized - movs r4, r0 - beq _020D9044 - mov r0, r5 - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4-r6,lr} - bx lr -_020D9044: - bl WMi_GetSystemWork - str r6, [r0, #0xc8] - mov r0, r5 - bl OS_RestoreInterrupts -_020D9054: - .byte 0x00, 0x00, 0xA0, 0xE3, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_Disconnect -WM_Disconnect: ; 0x020D9060 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x8 - mov r6, r0 - mov r5, r1 - bl WMi_GetSystemWork - mov r1, #0xa - mov r4, r0 - str r1, [sp, #0x0] - mov r12, #0xb - mov r0, #0x5 - mov r1, #0x7 - mov r2, #0x9 - mov r3, #0x8 - str r12, [sp, #0x4] - bl WMi_CheckStateEx -_020D909C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0xD0, 0x8D, 0x12, 0x70, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x20, 0x94, 0xE5 - .byte 0xB0, 0x00, 0xD2, 0xE1, 0x07, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x00, 0x0A, 0x09, 0x00, 0x50, 0xE3 - .byte 0x16, 0x00, 0x00, 0x1A, 0x01, 0x00, 0x55, 0xE3, 0x01, 0x00, 0x00, 0x3A, 0x0F, 0x00, 0x55, 0xE3 - .byte 0x03, 0x00, 0x00, 0x9A, 0x08, 0xD0, 0x8D, 0xE2, 0x06, 0x00, 0xA0, 0xE3, 0x70, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x78, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x82, 0xE0 - .byte 0x0B, 0xCC, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x01, 0x0C, 0x80, 0xE2 - .byte 0xB2, 0x28, 0xD0, 0xE1, 0x11, 0x05, 0xA0, 0xE1, 0x00, 0x00, 0x12, 0xE0, 0x08, 0x00, 0x00, 0x1A - .byte 0x08, 0xD0, 0x8D, 0xE2, 0x07, 0x00, 0xA0, 0xE3, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x00, 0x55, 0xE3, 0x08, 0xD0, 0x8D, 0x12, 0x06, 0x00, 0xA0, 0x13, 0x70, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x06, 0x10, 0xA0, 0xE1, 0x0D, 0x00, 0xA0, 0xE3, 0x17, 0xFD, 0xFF, 0xEB - .byte 0x01, 0x10, 0xA0, 0xE3, 0x11, 0x25, 0xA0, 0xE1, 0x0D, 0x00, 0xA0, 0xE3, 0xC8, 0xFC, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x08, 0xD0, 0x8D, 0xE2, 0x70, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x82, 0x01, 0x00, 0x00 - - arm_func_start WM_StartConnectEx -WM_StartConnectEx: ; 0x020D9168 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x2c - mov r7, r0 - mov r6, r1 - mov r0, #0x1 - mov r1, #0x2 - mov r5, r2 - mov r4, r3 - bl WMi_CheckStateEx -_020D918C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x2C, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x56, 0xE3 - .byte 0x2C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0xB0, 0x10, 0xD6, 0xE1, 0x06, 0x00, 0xA0, 0xE1, 0x81, 0x10, 0xA0, 0xE1, 0xDF, 0xCB, 0xFF, 0xEB - .byte 0x89, 0xFC, 0xFF, 0xEB, 0x01, 0x1C, 0x80, 0xE2, 0x00, 0x20, 0xA0, 0xE3, 0xB0, 0x25, 0xC1, 0xE1 - .byte 0x4C, 0x21, 0x80, 0xE5, 0x07, 0x10, 0xA0, 0xE1, 0x0C, 0x00, 0xA0, 0xE3, 0xEF, 0xFC, 0xFF, 0xEB - .byte 0x0C, 0x00, 0xA0, 0xE3, 0xB0, 0x00, 0xCD, 0xE1, 0x04, 0x60, 0x8D, 0xE5, 0x00, 0x00, 0x55, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x08, 0x10, 0x8D, 0xE2, 0x05, 0x00, 0xA0, 0xE1, 0x18, 0x20, 0xA0, 0xE3 - .byte 0x76, 0xD4, 0xFF, 0xEB, 0x03, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x8D, 0xE2, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x18, 0x20, 0xA0, 0xE3, 0x4C, 0xD4, 0xFF, 0xEB, 0xB0, 0x24, 0xDD, 0xE1, 0x00, 0x00, 0x8D, 0xE2 - .byte 0x28, 0x10, 0xA0, 0xE3, 0x20, 0x40, 0x8D, 0xE5, 0xB6, 0x22, 0xCD, 0xE1, 0x72, 0xFC, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x2C, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_EndScan -WM_EndScan: ; 0x020D9244 - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, #0x5 - bl WMi_CheckStateEx -_020D9258: - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1, 0x0B, 0x00, 0xA0, 0xE3, 0xCB, 0xFC, 0xFF, 0xEB - .byte 0x0B, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x7D, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_StartScanEx -WM_StartScanEx: ; 0x020D928C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x3c - mov r5, r0 - mov r0, #0x3 - mov r4, r1 - mov r2, r0 - mov r1, #0x2 - mov r3, #0x5 - bl WMi_CheckStateEx -_020D92B0: - .byte 0x00, 0x00, 0x50, 0xE3, 0x3C, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x00, 0x00, 0x54, 0xE3, 0x3C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x3C, 0xD0, 0x8D, 0x02 - .byte 0x06, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0xB4, 0x00, 0xD4, 0xE1 - .byte 0x01, 0x0B, 0x50, 0xE3, 0x3C, 0xD0, 0x8D, 0x82, 0x06, 0x00, 0xA0, 0x83, 0x30, 0x40, 0xBD, 0x88 - .byte 0x1E, 0xFF, 0x2F, 0x81, 0xB2, 0x01, 0xD4, 0xE1, 0x20, 0x00, 0x50, 0xE3, 0x3C, 0xD0, 0x8D, 0x82 - .byte 0x06, 0x00, 0xA0, 0x83, 0x30, 0x40, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0xB0, 0x11, 0xD4, 0xE1 - .byte 0x00, 0x00, 0x51, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x51, 0xE3, 0x06, 0x00, 0x00, 0x0A - .byte 0x02, 0x00, 0x51, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x03, 0x00, 0x51, 0xE3, 0x3C, 0xD0, 0x8D, 0x12 - .byte 0x06, 0x00, 0xA0, 0x13, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0xB4, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x81, 0xE0, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1, 0x01, 0x00, 0x50, 0xE3 - .byte 0x05, 0x00, 0x00, 0x8A, 0xB4, 0x03, 0xD4, 0xE1, 0x20, 0x00, 0x50, 0xE3, 0x3C, 0xD0, 0x8D, 0x82 - .byte 0x06, 0x00, 0xA0, 0x83, 0x30, 0x40, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0x05, 0x10, 0xA0, 0xE1 - .byte 0x26, 0x00, 0xA0, 0xE3, 0x85, 0xFC, 0xFF, 0xEB, 0x26, 0x00, 0xA0, 0xE3, 0xB0, 0x00, 0xCD, 0xE1 - .byte 0xB6, 0x20, 0xD4, 0xE1, 0x0C, 0x10, 0x8D, 0xE2, 0x0A, 0x00, 0x84, 0xE2, 0xB2, 0x20, 0xCD, 0xE1 - .byte 0x00, 0x30, 0x94, 0xE5, 0x06, 0x20, 0xA0, 0xE3, 0x04, 0x30, 0x8D, 0xE5, 0xB4, 0x30, 0xD4, 0xE1 - .byte 0xB8, 0x30, 0xCD, 0xE1, 0xB8, 0x30, 0xD4, 0xE1, 0xBA, 0x30, 0xCD, 0xE1, 0x07, 0xD4, 0xFF, 0xEB - .byte 0xB0, 0x21, 0xD4, 0xE1, 0x16, 0x10, 0x8D, 0xE2, 0x14, 0x00, 0x84, 0xE2, 0xB2, 0x21, 0xCD, 0xE1 - .byte 0xB4, 0x33, 0xD4, 0xE1, 0x20, 0x20, 0xA0, 0xE3, 0xB6, 0x33, 0xCD, 0xE1, 0xB2, 0x31, 0xD4, 0xE1 - .byte 0xB4, 0x31, 0xCD, 0xE1, 0xFD, 0xD3, 0xFF, 0xEB, 0x00, 0x00, 0x8D, 0xE2, 0x3C, 0x10, 0xA0, 0xE3 - .byte 0x01, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x3C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xFE, 0xFF, 0x00, 0x00 - - arm_func_start WM_StartScan -WM_StartScan: ; 0x020D940C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x14 - mov r5, r0 - mov r0, #0x3 - mov r4, r1 - mov r2, r0 - mov r1, #0x2 - mov r3, #0x5 - bl WMi_CheckStateEx -_020D9430: - .byte 0x00, 0x00, 0x50, 0xE3, 0x14, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x00, 0x00, 0x54, 0xE3, 0x14, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x14, 0xD0, 0x8D, 0x02 - .byte 0x06, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0xB4, 0x00, 0xD4, 0xE1 - .byte 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x00, 0x3A, 0x0E, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x9A - .byte 0x14, 0xD0, 0x8D, 0xE2, 0x06, 0x00, 0xA0, 0xE3, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x0A, 0x00, 0xA0, 0xE3, 0x40, 0xFC, 0xFF, 0xEB, 0x0A, 0x00, 0xA0, 0xE3 - .byte 0xB0, 0x00, 0xCD, 0xE1, 0xB4, 0x20, 0xD4, 0xE1, 0x00, 0x00, 0x8D, 0xE2, 0x10, 0x10, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xCD, 0xE1, 0x00, 0x20, 0x94, 0xE5, 0x04, 0x20, 0x8D, 0xE5, 0xB6, 0x20, 0xD4, 0xE1 - .byte 0xB8, 0x20, 0xCD, 0xE1, 0x08, 0x20, 0xD4, 0xE5, 0x0A, 0x20, 0xCD, 0xE5, 0x09, 0x20, 0xD4, 0xE5 - .byte 0x0B, 0x20, 0xCD, 0xE5, 0x0A, 0x20, 0xD4, 0xE5, 0x0C, 0x20, 0xCD, 0xE5, 0x0B, 0x20, 0xD4, 0xE5 - .byte 0x0D, 0x20, 0xCD, 0xE5, 0x0C, 0x20, 0xD4, 0xE5, 0x0E, 0x20, 0xCD, 0xE5, 0x0D, 0x20, 0xD4, 0xE5 - .byte 0x0F, 0x20, 0xCD, 0xE5, 0xC0, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 - .byte 0x14, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_EndParent -WM_EndParent: ; 0x020D950C - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, #0x7 - bl WMi_CheckStateEx -_020D9520: - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 - .byte 0x09, 0x00, 0xA0, 0xE3, 0x19, 0xFC, 0xFF, 0xEB, 0x09, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 - .byte 0xCB, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_StartParent -WM_StartParent: ; 0x020D9554 - ldr ip, _020D9560 ; =0x020D9564 - mov r1, #0x1 - bx r12 - .balign 4 -_020D9560: .word 0x020D9564 -_020D9564: - .byte 0x30, 0x40, 0x2D, 0xE9, 0x04, 0xD0, 0x4D, 0xE2, 0x00, 0x50, 0xA0, 0xE1 - .byte 0x01, 0x40, 0xA0, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x02, 0x10, 0xA0, 0xE3, 0x52, 0xFB, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x95, 0xFB, 0xFF, 0xEB, 0x01, 0x1C, 0x80, 0xE2, 0x00, 0x20, 0xA0, 0xE3, 0xB0, 0x25, 0xC1, 0xE1 - .byte 0x4C, 0x21, 0x80, 0xE5, 0x05, 0x10, 0xA0, 0xE1, 0x08, 0x00, 0xA0, 0xE3, 0xFB, 0xFB, 0xFF, 0xEB - .byte 0x04, 0x20, 0xA0, 0xE1, 0x08, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0xA0, 0xE3, 0xAC, 0xFB, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WmCheckParentParameter -WmCheckParentParameter: ; 0x020D95D4 - ldrh r1, [r0, #0x4] - cmp r1, #0x70 - movhi r0, #0x0 - bxhi lr - ldrh r1, [r0, #0x18] - cmp r1, #0xa - blo _020D95F8 - cmp r1, #0x3e8 - bls _020D9600 -_020D95F8: - mov r0, #0x0 - bx lr -_020D9600: - ldrh r0, [r0, #0x32] - cmp r0, #0x1 - blo _020D9614 - cmp r0, #0xe - bls _020D961C -_020D9614: - mov r0, #0x0 - bx lr -_020D961C: - mov r0, #0x1 - bx lr - - arm_func_start WM_SetParentParameter -WM_SetParentParameter: ; 0x020D9624 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - mov r0, #0x1 - mov r1, #0x2 - bl WMi_CheckStateEx -_020D9640: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x00, 0x00, 0x54, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0xB4, 0x00, 0xD4, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03 - .byte 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0xB4, 0x11, 0xD4, 0xE1, 0xB4, 0x03, 0xD4, 0xE1 - .byte 0x00, 0x00, 0x51, 0xE3, 0x2A, 0x20, 0xA0, 0x13, 0x00, 0x20, 0xA0, 0x03, 0x02, 0x00, 0x80, 0xE0 - .byte 0x02, 0x0C, 0x50, 0xE3, 0x06, 0x00, 0x00, 0xCA, 0xB6, 0x03, 0xD4, 0xE1, 0x00, 0x00, 0x51, 0xE3 - .byte 0x06, 0x10, 0xA0, 0x13, 0x00, 0x10, 0xA0, 0x03, 0x01, 0x00, 0x80, 0xE0, 0x02, 0x0C, 0x50, 0xE3 - .byte 0x03, 0x00, 0x00, 0xDA, 0x04, 0xD0, 0x8D, 0xE2, 0x06, 0x00, 0xA0, 0xE3, 0x30, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0xBD, 0xFF, 0xFF, 0xEB, 0x05, 0x10, 0xA0, 0xE1 - .byte 0x07, 0x00, 0xA0, 0xE3, 0xAD, 0xFB, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x40, 0x10, 0xA0, 0xE3 - .byte 0x92, 0xCA, 0xFF, 0xEB, 0xB4, 0x10, 0xD4, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x94, 0xE5, 0x8D, 0xCA, 0xFF, 0xEB, 0x04, 0x20, 0xA0, 0xE1, 0x07, 0x00, 0xA0, 0xE3 - .byte 0x01, 0x10, 0xA0, 0xE3, 0x56, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_End -WM_End: ; 0x020D972C - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, #0x2 - bl WMi_CheckStateEx -_020D9740: - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 - .byte 0x02, 0x00, 0xA0, 0xE3, 0x91, 0xFB, 0xFF, 0xEB, 0x02, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x43, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_Reset -WM_Reset: ; 0x020D9774 - stmdb sp!, {r4,lr} - mov r4, r0 - bl WMi_CheckIdle -_020D9780: - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 - .byte 0x01, 0x00, 0xA0, 0xE3, 0x81, 0xFB, 0xFF, 0xEB, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x33, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_Initialize -WM_Initialize: ; 0x020D97B4 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - mov r4, r1 - mov r1, r2 - bl WM_Init -_020D97C8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0xD0, 0x8D, 0x12 - .byte 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x6E, 0xFB, 0xFF, 0xEB, 0x00, 0xFB, 0xFF, 0xEB, 0x00, 0x30, 0xA0, 0xE1, 0x10, 0x10, 0x93, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0x8D, 0xE5, 0x00, 0x20, 0x93, 0xE5, 0x04, 0x30, 0x93, 0xE5 - .byte 0x03, 0x10, 0xA0, 0xE3, 0x1A, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 - .byte 0x08, 0xD0, 0x8D, 0xE2, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_PowerOff -WM_PowerOff: ; 0x020D981C - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, #0x2 - bl WMi_CheckStateEx -_020D9830: - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 - .byte 0x06, 0x00, 0xA0, 0xE3, 0x55, 0xFB, 0xFF, 0xEB, 0x06, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x07, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_PowerOn -WM_PowerOn: ; 0x020D9864 - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, r0 - bl WMi_CheckStateEx -_020D9878: - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1, 0x05, 0x00, 0xA0, 0xE3, 0x43, 0xFB, 0xFF, 0xEB - .byte 0x05, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0xF5, 0xFA, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_Disable -WM_Disable: ; 0x020D98AC - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, r0 - bl WMi_CheckStateEx -_020D98C0: - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 - .byte 0x04, 0x00, 0xA0, 0xE3, 0x31, 0xFB, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 - .byte 0xE3, 0xFA, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_Enable -WM_Enable: ; 0x020D98F4 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - mov r4, r0 - mov r0, #0x1 - mov r1, #0x0 - bl WMi_CheckStateEx -_020D990C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0xD0, 0x8D, 0x12, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 - .byte 0x03, 0x00, 0xA0, 0xE3, 0x1D, 0xFB, 0xFF, 0xEB, 0xAF, 0xFA, 0xFF, 0xEB, 0x00, 0x30, 0xA0, 0xE1 - .byte 0x10, 0x10, 0x93, 0xE5, 0x03, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0x8D, 0xE5, 0x00, 0x20, 0x93, 0xE5 - .byte 0x04, 0x30, 0x93, 0xE5, 0x00, 0x10, 0xA0, 0xE1, 0xC9, 0xFA, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0xA0, 0x03, 0x08, 0xD0, 0x8D, 0xE2, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_EndMP -WM_EndMP: ; 0x020D9960 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl WMi_GetSystemWork - mov r4, r0 - mov r0, #0x2 - mov r1, #0x9 - mov r2, #0xa - bl WMi_CheckStateEx -_020D9984: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x00, 0x94, 0xE5, 0x04, 0x10, 0xA0, 0xE3, 0x0C, 0x00, 0x80, 0xE2 - .byte 0xDF, 0xC9, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0x0C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x02, 0x03, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x10, 0x00, 0xA0, 0xE3, 0xF4, 0xFA, 0xFF, 0xEB, 0x10, 0x00, 0xA0, 0xE3 - .byte 0x00, 0x10, 0xA0, 0xE3, 0xA6, 0xFA, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_SetMPDataToPortEx -WM_SetMPDataToPortEx: ; 0x020D99EC - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x14 - mov r9, r0 - mov r8, r1 - mov r7, r2 - mov r6, r3 - mov r5, #0x1 - bl WMi_GetSystemWork - ldr r4, [r0, #0x4] - mov r0, #0x2 - mov r1, #0x9 - mov r2, #0xa - bl WMi_CheckStateEx -_020D9A20: - .byte 0x00, 0x00, 0x50, 0xE3, 0x14, 0xD0, 0x8D, 0x12, 0xF0, 0x43, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x3C, 0x00, 0x84, 0xE2, 0x02, 0x10, 0xA0, 0xE3, 0xB9, 0xC9, 0xFF, 0xEB, 0x62, 0x0F, 0x84, 0xE2 - .byte 0x02, 0x10, 0xA0, 0xE3, 0xB6, 0xC9, 0xFF, 0xEB, 0x01, 0x0C, 0x84, 0xE2, 0xB8, 0x08, 0xD0, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A, 0xE4, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x84, 0xE0, 0xAE, 0xC9, 0xFF, 0xEB, 0x01, 0x2C, 0x84, 0xE2, 0x86, 0x00, 0x84, 0xE2 - .byte 0x02, 0x10, 0xA0, 0xE3, 0xB2, 0x58, 0xD2, 0xE1, 0xA9, 0xC9, 0xFF, 0xEB, 0x00, 0x00, 0x57, 0xE3 - .byte 0x14, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x43, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x00, 0x00, 0x55, 0xE3, 0x14, 0xD0, 0x8D, 0x02, 0x07, 0x00, 0xA0, 0x03, 0xF0, 0x43, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x7C, 0x00, 0x84, 0xE2, 0x02, 0x10, 0xA0, 0xE3, 0x9C, 0xC9, 0xFF, 0xEB - .byte 0x7C, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x57, 0xE1, 0x14, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03 - .byte 0xF0, 0x43, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x02, 0x0C, 0x56, 0xE3, 0x14, 0xD0, 0x8D, 0x82 - .byte 0x06, 0x00, 0xA0, 0x83, 0xF0, 0x43, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0x00, 0x00, 0x56, 0xE3 - .byte 0x14, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x43, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x07, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x90, 0xC9, 0xFF, 0xEB, 0xB0, 0x23, 0xDD, 0xE1 - .byte 0xB4, 0x13, 0xDD, 0xE1, 0xB8, 0x03, 0xDD, 0xE1, 0x00, 0x20, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5 - .byte 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x90, 0x8D, 0xE5, 0x07, 0x20, 0xA0, 0xE1, 0x06, 0x30, 0xA0, 0xE1 - .byte 0x0F, 0x00, 0xA0, 0xE3, 0x07, 0x10, 0xA0, 0xE3, 0x10, 0x80, 0x8D, 0xE5, 0x50, 0xFA, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x14, 0xD0, 0x8D, 0xE2, 0xF0, 0x43, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x82, 0x01, 0x00, 0x00 - - arm_func_start WM_StartMP -WM_StartMP: ; 0x020D9B48 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x24 - mov r6, r1 - mov r7, r0 - mov r5, r2 - add r1, sp, #0x8 - mov r0, #0x0 - mov r2, #0x1c - mov r4, r3 - bl MIi_CpuClear32 - ldrh r12, [sp, #0x3c] - mov r0, #0x3 - str r0, [sp, #0x8] - ldrh lr, [sp, #0x38] - strh r12, [sp, #0xc] - strh r12, [sp, #0xe] - mov r0, r7 - mov r1, r6 - mov r2, r5 - mov r3, r4 - add r12, sp, #0x8 - str lr, [sp, #0x0] - str r12, [sp, #0x4] - bl WMi_StartMP - add sp, sp, #0x24 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start WM_StartMPEx -WM_StartMPEx: ; 0x020D9BB4 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x28 - mov r6, r1 - mov r7, r0 - mov r5, r2 - add r1, sp, #0x8 - mov r0, #0x0 - mov r2, #0x1c - mov r4, r3 - bl MIi_CpuClear32 - ldrh lr, [sp, #0x44] - ldr r1, [sp, #0x58] - ldrh r12, [sp, #0x48] - ldr r0, [sp, #0x54] - ldr r8, _020D9C54 ; =0x00001E03 - cmp r0, #0x0 - ldr r3, [sp, #0x4c] - ldr r2, [sp, #0x50] - strb r1, [sp, #0x22] - strh r12, [sp, #0x1e] - strb r3, [sp, #0x20] - strb r2, [sp, #0x21] - ldrh r1, [sp, #0x40] - str r8, [sp, #0x8] - orrne r0, r8, #0x4 - strne r0, [sp, #0x8] - strh lr, [sp, #0xc] - strh lr, [sp, #0xe] - strneh lr, [sp, #0x10] - str r1, [sp, #0x0] - add r12, sp, #0x8 - mov r0, r7 - mov r1, r6 - mov r2, r5 - mov r3, r4 - str r12, [sp, #0x4] - bl WMi_StartMP - add sp, sp, #0x28 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020D9C54: .word 0x00001E03 - - arm_func_start WMi_StartMP -WMi_StartMP: ; 0x020D9C58 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x34 - mov r9, r0 - mov r8, r1 - mov r7, r2 - mov r6, r3 - bl WMi_GetSystemWork - ldr r5, [r0, #0x4] - mov r0, #0x2 - mov r1, #0x7 - mov r2, #0x8 - bl WMi_CheckStateEx -_020D9C88: - .byte 0x00, 0x00, 0x50, 0xE3, 0x34, 0xD0, 0x8D, 0x12 - .byte 0xF0, 0x43, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x62, 0x0F, 0x85, 0xE2, 0x02, 0x10, 0xA0, 0xE3 - .byte 0x1F, 0xC9, 0xFF, 0xEB, 0xC6, 0x00, 0x85, 0xE2, 0x02, 0x10, 0xA0, 0xE3, 0x1C, 0xC9, 0xFF, 0xEB - .byte 0x01, 0x0C, 0x85, 0xE2, 0xB8, 0x08, 0xD0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A - .byte 0xB6, 0x0C, 0xD5, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x34, 0xD0, 0x8D, 0x12, 0x03, 0x00, 0xA0, 0x13 - .byte 0xF0, 0x43, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x0C, 0x00, 0x85, 0xE2, 0x04, 0x10, 0xA0, 0xE3 - .byte 0x0F, 0xC9, 0xFF, 0xEB, 0x0C, 0x00, 0x95, 0xE5, 0x01, 0x00, 0x50, 0xE3, 0x34, 0xD0, 0x8D, 0x02 - .byte 0x03, 0x00, 0xA0, 0x03, 0xF0, 0x43, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x3F, 0x00, 0x17, 0xE2 - .byte 0x34, 0xD0, 0x8D, 0x12, 0x06, 0x00, 0xA0, 0x13, 0xF0, 0x43, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0xB0, 0x45, 0xDD, 0xE1, 0x1F, 0x00, 0x14, 0xE2, 0x34, 0xD0, 0x8D, 0x12, 0x06, 0x00, 0xA0, 0x13 - .byte 0xF0, 0x43, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x9C, 0x00, 0x85, 0xE2, 0x02, 0x10, 0xA0, 0xE3 - .byte 0xFB, 0xC8, 0xFF, 0xEB, 0xBC, 0x09, 0xD5, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x0B, 0x00, 0x00, 0x1A - .byte 0x09, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x57, 0xE1, 0x34, 0xD0, 0x8D, 0xB2, 0x06, 0x00, 0xA0, 0xB3 - .byte 0xF0, 0x43, 0xBD, 0xB8, 0x1E, 0xFF, 0x2F, 0xB1, 0x3D, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x54, 0xE1 - .byte 0x34, 0xD0, 0x8D, 0xB2, 0x06, 0x00, 0xA0, 0xB3, 0xF0, 0x43, 0xBD, 0xB8, 0x1E, 0xFF, 0x2F, 0xB1 - .byte 0x09, 0x10, 0xA0, 0xE1, 0x0E, 0x00, 0xA0, 0xE3, 0x08, 0xFA, 0xFF, 0xEB, 0x00, 0x10, 0x8D, 0xE2 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x30, 0x20, 0xA0, 0xE3, 0x1B, 0xD1, 0xFF, 0xEB, 0xB0, 0x35, 0xDD, 0xE1 - .byte 0xA7, 0x40, 0xA0, 0xE1, 0x0E, 0x50, 0xA0, 0xE3, 0x54, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x8D, 0xE2 - .byte 0x1C, 0x20, 0xA0, 0xE3, 0xB0, 0x50, 0xCD, 0xE1, 0x04, 0x80, 0x8D, 0xE5, 0x08, 0x40, 0x8D, 0xE5 - .byte 0x0C, 0x60, 0x8D, 0xE5, 0x10, 0x30, 0x8D, 0xE5, 0x14, 0xD1, 0xFF, 0xEB, 0x00, 0x00, 0x8D, 0xE2 - .byte 0x30, 0x10, 0xA0, 0xE3, 0x8C, 0xF9, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 - .byte 0x34, 0xD0, 0x8D, 0xE2, 0xF0, 0x43, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_EndDCF -WM_EndDCF: ; 0x020D9DDC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl WMi_GetSystemWork - mov r4, r0 - mov r0, #0x1 - mov r1, #0xb - bl WMi_CheckStateEx -_020D9DFC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x00, 0x94, 0xE5 - .byte 0x04, 0x10, 0xA0, 0xE3, 0x10, 0x00, 0x80, 0xE2, 0xC1, 0xC8, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5 - .byte 0x10, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x03, 0x00, 0xA0, 0x03 - .byte 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x05, 0x10, 0xA0, 0xE1, 0x13, 0x00, 0xA0, 0xE3 - .byte 0xD6, 0xF9, 0xFF, 0xEB, 0x13, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x88, 0xF9, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_SetDCFData -WM_SetDCFData: ; 0x020D9E64 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x10 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl WMi_GetSystemWork - mov r8, r0 - mov r0, #0x1 - mov r1, #0xb - bl WMi_CheckStateEx -_020D9E90: - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0xD0, 0x8D, 0x12, 0xF0, 0x41, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x04, 0x00, 0x98, 0xE5, 0x04, 0x10, 0xA0, 0xE3, 0x10, 0x00, 0x80, 0xE2, 0x9C, 0xC8, 0xFF, 0xEB - .byte 0x04, 0x00, 0x98, 0xE5, 0x10, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x10, 0xD0, 0x8D, 0x02 - .byte 0x03, 0x00, 0xA0, 0x03, 0xF0, 0x41, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x68, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x54, 0xE1, 0x10, 0xD0, 0x8D, 0x82, 0x06, 0x00, 0xA0, 0x83, 0xF0, 0x41, 0xBD, 0x88 - .byte 0x1E, 0xFF, 0x2F, 0x81, 0x05, 0x00, 0xA0, 0xE1, 0x04, 0x10, 0xA0, 0xE1, 0x93, 0xC8, 0xFF, 0xEB - .byte 0x07, 0x10, 0xA0, 0xE1, 0x12, 0x00, 0xA0, 0xE3, 0xA8, 0xF9, 0xFF, 0xEB, 0x08, 0x10, 0x8D, 0xE2 - .byte 0x06, 0x00, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE3, 0x34, 0xD1, 0xFF, 0xEB, 0x00, 0x50, 0x8D, 0xE5 - .byte 0x04, 0x40, 0x8D, 0xE5, 0x08, 0x20, 0x9D, 0xE5, 0x0C, 0x30, 0x9D, 0xE5, 0x12, 0x00, 0xA0, 0xE3 - .byte 0x04, 0x10, 0xA0, 0xE3, 0x52, 0xF9, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 - .byte 0x10, 0xD0, 0x8D, 0xE2, 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xE4, 0x05, 0x00, 0x00 - - arm_func_start WM_StartDCF -WM_StartDCF: ; 0x020D9F40 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - bl WMi_GetSystemWork - mov r4, r0 - mov r0, #0x1 - mov r1, #0x8 - bl WMi_CheckStateEx -_020D9F68: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12 - .byte 0xF0, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x00, 0x94, 0xE5, 0x04, 0x10, 0xA0, 0xE3 - .byte 0x10, 0x00, 0x80, 0xE2, 0x66, 0xC8, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0x10, 0x00, 0x90, 0xE5 - .byte 0x01, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x03, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x10, 0x00, 0x55, 0xE3, 0x04, 0xD0, 0x8D, 0x32, 0x06, 0x00, 0xA0, 0x33 - .byte 0xF0, 0x40, 0xBD, 0x38, 0x1E, 0xFF, 0x2F, 0x31, 0x00, 0x00, 0x56, 0xE3, 0x04, 0xD0, 0x8D, 0x02 - .byte 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x06, 0x00, 0xA0, 0xE1 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x59, 0xC8, 0xFF, 0xEB, 0x07, 0x10, 0xA0, 0xE1, 0x11, 0x00, 0xA0, 0xE3 - .byte 0x6E, 0xF9, 0xFF, 0xEB, 0x06, 0x20, 0xA0, 0xE1, 0x05, 0x30, 0xA0, 0xE1, 0x11, 0x00, 0xA0, 0xE3 - .byte 0x02, 0x10, 0xA0, 0xE3, 0x1E, 0xF9, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WmGetSharedDataAddress -WmGetSharedDataAddress: ; 0x020DA00C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r12, #0x1 - mov r3, r12, lsl r3 - sub r3, r3, #0x1 - mov r5, r0 - and r0, r1, r3 - mov r4, r2 - bl MATH_CountPopulation - add r1, r5, #0x800 - ldrh r1, [r1, #0x10] - mla r0, r1, r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start WM_GetSharedDataAddress -WM_GetSharedDataAddress: ; 0x020DA048 - stmdb sp!, {r4,lr} - mov r4, r1 - ldrh lr, [r4, #0x2] - cmp r0, #0x0 - mov r3, r2 - mov r1, #0x1 - mov r12, r1, lsl r3 - ldrh r1, [r4, #0x0] - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - cmp r4, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ands r2, r1, r12 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ands r2, lr, r12 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - add r2, r4, #0x4 - bl WmGetSharedDataAddress - ldmia sp!, {r4,lr} - bx lr - - arm_func_start WmDataSharingSendDataSet -WmDataSharingSendDataSet: ; 0x020DA0B4 - stmdb sp!, {r4-r10,lr} - sub sp, sp, #0x10 - mov r10, r0 - mov r9, r1 - bl OS_DisableInterrupts - add r1, r10, #0x800 - ldrh r1, [r1, #0x8] - mov r7, r0 - mov r1, r1, lsl #0x9 - ldrh r1, [r10, r1] - cmp r1, #0x0 - bne _020DA210 - bl WMi_GetMPReadyAIDs - add r1, r10, #0x800 - ldrh r6, [r1, #0x8] - mov r5, r0 - ldrh r1, [r1, #0x18] - add r0, r6, #0x1 - and r0, r0, #0x3 - mov r0, r0, lsl #0x10 - mov r4, r0, lsr #0x10 - cmp r1, #0x1 - addeq r0, r4, #0x1 - andeq r0, r0, #0x3 - moveq r0, r0, lsl #0x10 - moveq r8, r0, lsr #0x10 - movne r8, r4 - add r1, r10, r8, lsl #0x9 - mov r0, #0x0 - mov r2, #0x200 - bl MIi_CpuClear16 - add r0, r10, #0x800 - ldrh r3, [r0, #0xe] - orr r2, r5, #0x1 - mov r1, r8, lsl #0x9 - and r2, r3, r2 - strh r2, [r10, r1] - strh r4, [r0, #0x8] - ldrh r0, [r0, #0xe] - mov r1, r6, lsl #0x9 - cmp r9, #0x1 - strh r0, [r10, r1] - ldreqh r0, [r10, r1] - biceq r0, r0, #0x1 - streqh r0, [r10, r1] - mov r0, r7 - bl OS_RestoreInterrupts - add r3, r10, #0x800 - ldrh r1, [r3, #0xe] - mov r4, #0x1 - ldr r0, _020DA220 ; =WmDataSharingSetDataCallback - and r1, r1, r5 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - str r1, [sp, #0x0] - ldrh r5, [r3, #0x16] - mov r1, r10 - add r2, r10, r6, lsl #0x9 - str r5, [sp, #0x4] - str r4, [sp, #0x8] - ldrh r3, [r3, #0x14] - bl WM_SetMPDataToPortEx - cmp r0, #0x7 - bne _020DA1E4 - add r0, r10, r6, lsl #0x1 - ldr r1, _020DA224 ; =0x0000FFFF - add r0, r0, #0x800 - strh r1, [r0, #0x0] - add r0, r10, #0x800 - ldrh r1, [r0, #0xa] - add sp, sp, #0x10 - add r1, r1, #0x1 - and r1, r1, #0x3 - strh r1, [r0, #0xa] - ldmia sp!, {r4-r10,lr} - bx lr -_020DA1E4: - cmp r0, #0x0 - addeq sp, sp, #0x10 - ldmeqia sp!, {r4-r10,lr} - bxeq lr - cmp r0, #0x2 - addne r0, r10, #0x800 - movne r1, #0x5 - strneh r1, [r0, #0x1c] - add sp, sp, #0x10 - ldmia sp!, {r4-r10,lr} - bx lr -_020DA210: - bl OS_RestoreInterrupts - add sp, sp, #0x10 - ldmia sp!, {r4-r10,lr} - bx lr - .balign 4 -_020DA220: .word WmDataSharingSetDataCallback -_020DA224: .word 0x0000FFFF - - arm_func_start WmDataSharingReceiveData -WmDataSharingReceiveData: ; 0x020DA228 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r3, r1 - mov r0, #0x1 - mov r0, r0, lsl r3 - add r12, r7, #0x800 - mov r0, r0, lsl #0x10 - ldrh r1, [r12, #0xe] - mov r5, r0, lsr #0x10 - mov r6, r2 - ands r0, r1, r5 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - ldrh r4, [r12, #0x8] - mov r0, r4, lsl #0x9 - ldrh r0, [r7, r0] - ands r0, r5, r0 - bne _020DA2B4 - ldrh r0, [r12, #0x18] - cmp r0, #0x1 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r7,lr} - bxne lr - add r0, r4, #0x1 - and r0, r0, #0x3 - mov r0, r0, lsl #0x10 - mov r4, r0, lsr #0x10 - mov r0, r4, lsl #0x9 - ldrh r0, [r7, r0] - ands r0, r5, r0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr -_020DA2B4: - add r2, r7, r4, lsl #0x9 - mov r0, r7 - add r2, r2, #0x4 - bl WmGetSharedDataAddress - mov r1, r0 - cmp r6, #0x0 - beq _020DA2E4 - add r0, r7, #0x800 - ldrh r2, [r0, #0x10] - mov r0, r6 - bl MIi_CpuCopy16 - b _020DA2F4 -_020DA2E4: - add r0, r7, #0x800 - ldrh r2, [r0, #0x10] - mov r0, #0x0 - bl MIi_CpuClear16 -_020DA2F4: - bl OS_DisableInterrupts - mov r4, r4, lsl #0x9 - ldrh r3, [r7, r4] - mvn r1, r5 - add r2, r7, #0x2 - and r1, r3, r1 - strh r1, [r7, r4] - ldrh r1, [r2, r4] - orr r1, r1, r5 - strh r1, [r2, r4] - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start WmDataSharingReceiveCallback_Child -WmDataSharingReceiveCallback_Child: ; 0x020DA32C - stmdb sp!, {r4-r8,lr} - mov r8, r0 - ldr r7, [r8, #0x1c] - cmp r7, #0x0 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - ldrh r0, [r8, #0x2] - cmp r0, #0x0 - bne _020DA458 - ldrh r0, [r8, #0x4] - cmp r0, #0x15 - bgt _020DA394 - cmp r0, #0x15 - bge _020DA3C4 - cmp r0, #0x9 - ldmgtia sp!, {r4-r8,lr} - bxgt lr - cmp r0, #0x7 - ldmltia sp!, {r4-r8,lr} - bxlt lr - cmp r0, #0x7 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - cmp r0, #0x9 - ldmia sp!, {r4-r8,lr} - bx lr -_020DA394: - cmp r0, #0x1a - ldmgtia sp!, {r4-r8,lr} - bxgt lr - cmp r0, #0x19 - ldmltia sp!, {r4-r8,lr} - bxlt lr - cmp r0, #0x19 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - cmp r0, #0x1a - ldmia sp!, {r4-r8,lr} - bx lr -_020DA3C4: - ldr r4, [r8, #0xc] - ldrh r6, [r8, #0x10] - ldrh r5, [r4, #0x0] - bl WM_GetAID - add r1, r7, #0x800 - ldrh r1, [r1, #0x14] - cmp r6, r1 - beq _020DA3EC - cmp r6, #0x200 - movhi r6, #0x200 -_020DA3EC: - cmp r6, #0x4 - ldmccia sp!, {r4-r8,lr} - bxcc lr - mov r1, #0x1 - mov r0, r1, lsl r0 - ands r0, r5, r0 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - add r0, r7, #0x800 - ldrh r1, [r0, #0x8] - mov r0, r4 - mov r2, r6 - add r1, r7, r1, lsl #0x9 - bl MIi_CpuCopy16 - add r1, r7, #0x800 - ldrh r0, [r1, #0x8] - ldrh r2, [r8, #0x1a] - add r0, r7, r0, lsl #0x1 - mov r2, r2, asr #0x1 - add r0, r0, #0x800 - strh r2, [r0, #0x0] - ldrh r0, [r1, #0x8] - add r0, r0, #0x1 - and r0, r0, #0x3 - strh r0, [r1, #0x8] - ldmia sp!, {r4-r8,lr} - bx lr -_020DA458: - add r0, r7, #0x800 - mov r1, #0x5 - strh r1, [r0, #0x1c] - ldmia sp!, {r4-r8,lr} - bx lr - - arm_func_start WmDataSharingReceiveCallback_Parent -WmDataSharingReceiveCallback_Parent: ; 0x020DA46C - stmdb sp!, {r4-r6,lr} - ldr r4, [r0, #0x1c] - cmp r4, #0x0 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - ldrh r1, [r0, #0x2] - cmp r1, #0x0 - bne _020DA5C4 - ldrh r1, [r0, #0x4] - cmp r1, #0x15 - bgt _020DA4D0 - cmp r1, #0x15 - bge _020DA504 - cmp r1, #0x9 - ldmgtia sp!, {r4-r6,lr} - bxgt lr - cmp r1, #0x7 - ldmltia sp!, {r4-r6,lr} - bxlt lr - cmp r1, #0x7 - beq _020DA528 - cmp r1, #0x9 - beq _020DA53C - ldmia sp!, {r4-r6,lr} - bx lr -_020DA4D0: - cmp r1, #0x1a - ldmgtia sp!, {r4-r6,lr} - bxgt lr - cmp r1, #0x19 - ldmltia sp!, {r4-r6,lr} - bxlt lr - cmp r1, #0x19 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - cmp r1, #0x1a - beq _020DA53C - ldmia sp!, {r4-r6,lr} - bx lr -_020DA504: - ldrh r1, [r0, #0x12] - ldr r2, [r0, #0xc] - mov r0, r4 - bl WmDataSharingReceiveData - mov r0, r4 - mov r1, #0x0 - bl WmDataSharingSendDataSet - ldmia sp!, {r4-r6,lr} - bx lr -_020DA528: - mov r0, r4 - mov r1, #0x0 - bl WmDataSharingSendDataSet - ldmia sp!, {r4-r6,lr} - bx lr -_020DA53C: - ldrh r5, [r0, #0x12] - mov r6, #0x1 - bl OS_DisableInterrupts - add r1, r4, #0x800 - ldrh lr, [r1, #0x8] - mvn r12, r6, lsl r5 - mov r3, lr, lsl #0x9 - ldrh r2, [r4, r3] - and r2, r2, r12 - strh r2, [r4, r3] - ldrh r1, [r1, #0x18] - cmp r1, #0x1 - bne _020DA58C - add r1, lr, #0x1 - and r1, r1, #0x3 - mov r1, r1, lsl #0x10 - mov r2, r1, lsr #0x7 - ldrh r1, [r4, r2] - and r1, r1, r12 - strh r1, [r4, r2] -_020DA58C: - bl OS_RestoreInterrupts - mov r0, r4 - mov r1, #0x0 - bl WmDataSharingSendDataSet - add r0, r4, #0x800 - ldrh r0, [r0, #0x18] - cmp r0, #0x1 - ldmneia sp!, {r4-r6,lr} - bxne lr - mov r0, r4 - mov r1, #0x0 - bl WmDataSharingSendDataSet - ldmia sp!, {r4-r6,lr} - bx lr -_020DA5C4: - add r0, r4, #0x800 - mov r1, #0x5 - strh r1, [r0, #0x1c] - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start WmDataSharingSetDataCallback -WmDataSharingSetDataCallback: ; 0x020DA5D8 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl WMi_GetSystemWork - ldrh r2, [r5, #0xa] - ldr r1, _020DA6E4 ; =WmDataSharingReceiveCallback_Parent - add r0, r0, r2, lsl #0x2 - ldr r2, [r0, #0xcc] - ldr r4, [r0, #0x10c] - cmp r2, r1 - beq _020DA618 - ldr r0, _020DA6E8 ; =WmDataSharingReceiveCallback_Child - cmp r2, r0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr -_020DA618: - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r0, [r5, #0x20] - cmp r4, r0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - bl WM_GetAID - ldrh r1, [r5, #0x2] - cmp r1, #0x0 - bne _020DA694 - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - add r1, r4, #0x800 - ldrh r0, [r1, #0xa] - ldrh r2, [r5, #0x1a] - add sp, sp, #0x4 - add r0, r4, r0, lsl #0x1 - mov r2, r2, asr #0x1 - add r0, r0, #0x800 - strh r2, [r0, #0x0] - ldrh r0, [r1, #0xa] - add r0, r0, #0x1 - and r0, r0, #0x3 - strh r0, [r1, #0xa] - ldmia sp!, {r4-r5,lr} - bx lr -_020DA694: - cmp r1, #0xa - bne _020DA6CC - cmp r0, #0x0 - addne r0, r4, #0x800 - ldrneh r1, [r0, #0xa] - add sp, sp, #0x4 - addne r1, r1, #0x3 - andne r1, r1, #0x3 - strneh r1, [r0, #0xa] - add r0, r4, #0x800 - mov r1, #0x4 - strh r1, [r0, #0x1c] - ldmia sp!, {r4-r5,lr} - bx lr -_020DA6CC: - add r0, r4, #0x800 - mov r1, #0x5 - strh r1, [r0, #0x1c] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DA6E4: .word WmDataSharingReceiveCallback_Parent -_020DA6E8: .word WmDataSharingReceiveCallback_Child - - arm_func_start WM_StepDataSharing -WM_StepDataSharing: ; 0x020DA6EC - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - mov r10, r0 - mov r9, r1 - mov r8, r2 - mov r0, #0x2 - mov r1, #0x9 - mov r2, #0xa - bl WMi_CheckStateEx -_020DA710: - .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0x12, 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x00, 0x00, 0x5A, 0xE3, 0x0C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x4F, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0x59, 0xE3, 0x0C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03 - .byte 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0x58, 0xE3, 0x0C, 0xD0, 0x8D, 0x02 - .byte 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0xC1, 0xF5, 0xFF, 0xEB - .byte 0x00, 0x40, 0xB0, 0xE1, 0x01, 0x00, 0x00, 0x1A, 0x9C, 0xF5, 0xFF, 0xEB, 0x00, 0x70, 0xA0, 0xE1 - .byte 0x02, 0x0B, 0x8A, 0xE2, 0xBC, 0x01, 0xD0, 0xE1, 0x05, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0x02 - .byte 0x01, 0x00, 0xA0, 0x03, 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0x00, 0x50, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x04, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0x12, 0x03, 0x00, 0xA0, 0x13 - .byte 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x54, 0xE3, 0x05, 0x40, 0xA0, 0xE3 - .byte 0x65, 0x00, 0x00, 0x1A, 0x00, 0x60, 0xA0, 0xE3, 0x06, 0xB0, 0xA0, 0xE1, 0x04, 0x00, 0x50, 0xE3 - .byte 0x2A, 0x00, 0x00, 0x1A, 0x02, 0x1B, 0x8A, 0xE2, 0x01, 0x30, 0xA0, 0xE3, 0xBC, 0x31, 0xC1, 0xE1 - .byte 0xBE, 0x50, 0xD1, 0xE1, 0xB8, 0x20, 0xD1, 0xE1, 0x84, 0x02, 0x9F, 0xE5, 0x07, 0x50, 0x05, 0xE0 - .byte 0x05, 0x58, 0xA0, 0xE1, 0x25, 0x58, 0xA0, 0xE1, 0x00, 0x50, 0x8D, 0xE5, 0xB6, 0x51, 0xD1, 0xE1 - .byte 0x03, 0x20, 0x82, 0xE2, 0x03, 0x20, 0x02, 0xE2, 0x04, 0x50, 0x8D, 0xE5, 0x08, 0x30, 0x8D, 0xE5 - .byte 0x02, 0x28, 0xA0, 0xE1, 0x22, 0x58, 0xA0, 0xE1, 0xB4, 0x31, 0xD1, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 - .byte 0x85, 0x24, 0x8A, 0xE0, 0x74, 0xFC, 0xFF, 0xEB, 0x07, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x1A - .byte 0x85, 0x00, 0x8A, 0xE0, 0x3C, 0x12, 0x9F, 0xE5, 0x02, 0x0B, 0x80, 0xE2, 0xB0, 0x10, 0xC0, 0xE1 - .byte 0x02, 0x0B, 0x8A, 0xE2, 0xBA, 0x10, 0xD0, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x03, 0x10, 0x01, 0xE2 - .byte 0xBA, 0x10, 0xC0, 0xE1, 0x09, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A - .byte 0x02, 0x00, 0x50, 0xE3, 0x02, 0x0B, 0x8A, 0x12, 0x04, 0x10, 0xA0, 0x11, 0xBC, 0x11, 0xC0, 0x11 - .byte 0x0C, 0xD0, 0x8D, 0x12, 0x01, 0x00, 0xA0, 0x13, 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x02, 0x0B, 0x8A, 0xE2, 0xBC, 0x20, 0xD0, 0xE1, 0xBA, 0x10, 0xD0, 0xE1, 0x01, 0x00, 0x52, 0xE1 - .byte 0x20, 0x00, 0x00, 0x0A, 0x82, 0x44, 0xA0, 0xE1, 0xB4, 0x30, 0x9A, 0xE1, 0x08, 0x10, 0xA0, 0xE1 - .byte 0x02, 0x2C, 0xA0, 0xE3, 0x01, 0x30, 0x83, 0xE3, 0xB4, 0x30, 0x8A, 0xE1, 0xBC, 0x00, 0xD0, 0xE1 - .byte 0x80, 0x04, 0x8A, 0xE0, 0x4D, 0xCE, 0xFF, 0xEB, 0x02, 0x1B, 0x8A, 0xE2, 0xBC, 0x00, 0xD1, 0xE1 - .byte 0x01, 0x60, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3, 0x80, 0x00, 0x8A, 0xE0, 0x02, 0x0B, 0x80, 0xE2 - .byte 0xB0, 0x00, 0xD0, 0xE1, 0xBA, 0x01, 0xC1, 0xE1, 0xBC, 0x00, 0xD1, 0xE1, 0x01, 0x00, 0x80, 0xE2 - .byte 0x03, 0x00, 0x00, 0xE2, 0xBC, 0x00, 0xC1, 0xE1, 0xB8, 0x01, 0xD1, 0xE1, 0x00, 0x00, 0x50, 0xE3 - .byte 0x07, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x57, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0xB8, 0x00, 0xD1, 0xE1 - .byte 0x80, 0x04, 0xA0, 0xE1, 0xB0, 0x00, 0x9A, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x06, 0xB0, 0xA0, 0x01 - .byte 0x00, 0x00, 0x00, 0x0A, 0x00, 0xB0, 0xA0, 0xE3, 0x0A, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 - .byte 0xE7, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x56, 0xE3, 0x4D, 0x00, 0x00, 0x0A, 0x0A, 0x00, 0xA0, 0xE1 - .byte 0x09, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x3E, 0xFE, 0xFF, 0xEB, 0x02, 0x0B, 0x8A, 0xE2 - .byte 0xB8, 0x01, 0xD0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x45, 0x00, 0x00, 0x1A, 0x0A, 0x00, 0xA0, 0xE1 - .byte 0x0B, 0x10, 0xA0, 0xE1, 0xDA, 0xFD, 0xFF, 0xEB, 0x41, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x50, 0xE3 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x02, 0x1B, 0x8A, 0x02, 0x01, 0x00, 0xA0, 0x03, 0xBC, 0x01, 0xC1, 0x01 - .byte 0x1A, 0x00, 0x00, 0x0A, 0x02, 0x1B, 0x8A, 0xE2, 0xBC, 0x20, 0xD1, 0xE1, 0xB8, 0x10, 0xD1, 0xE1 - .byte 0x01, 0x00, 0x52, 0xE1, 0x15, 0x00, 0x00, 0x0A, 0x82, 0x24, 0xA0, 0xE1, 0xB2, 0x10, 0x9A, 0xE1 - .byte 0x01, 0x30, 0x11, 0xE2, 0x01, 0x10, 0x81, 0x03, 0xB2, 0x10, 0x8A, 0x01, 0x0F, 0x00, 0x00, 0x0A - .byte 0x08, 0x10, 0xA0, 0xE1, 0x02, 0x00, 0x8A, 0xE0, 0x02, 0x2C, 0xA0, 0xE3, 0x0F, 0xCE, 0xFF, 0xEB - .byte 0x02, 0x2B, 0x8A, 0xE2, 0xBC, 0x10, 0xD2, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3 - .byte 0x81, 0x10, 0x8A, 0xE0, 0x02, 0x1B, 0x81, 0xE2, 0xB0, 0x10, 0xD1, 0xE1, 0xBA, 0x11, 0xC2, 0xE1 - .byte 0xBC, 0x10, 0xD2, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x03, 0x10, 0x01, 0xE2, 0xBC, 0x10, 0xC2, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x1E, 0x00, 0x00, 0x0A, 0x02, 0x0B, 0x8A, 0xE2, 0xBA, 0x10, 0xD0, 0xE1 - .byte 0xB0, 0x21, 0xD0, 0xE1, 0x09, 0x00, 0xA0, 0xE1, 0x81, 0x14, 0x8A, 0xE0, 0x20, 0x70, 0x81, 0xE2 - .byte 0x07, 0x10, 0xA0, 0xE1, 0xF9, 0xCD, 0xFF, 0xEB, 0x02, 0x3B, 0x8A, 0xE2, 0xBE, 0x10, 0xD3, 0xE1 - .byte 0x01, 0x50, 0xA0, 0xE3, 0x58, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x8D, 0xE5, 0xB6, 0x61, 0xD3, 0xE1 - .byte 0x0A, 0x10, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0x04, 0x60, 0x8D, 0xE5, 0x08, 0x50, 0x8D, 0xE5 - .byte 0xB0, 0x31, 0xD3, 0xE1, 0xF0, 0xFB, 0xFF, 0xEB, 0x02, 0x1B, 0x8A, 0xE2, 0xBA, 0x20, 0xD1, 0xE1 - .byte 0x02, 0x00, 0x50, 0xE3, 0x01, 0x20, 0x82, 0xE2, 0x03, 0x20, 0x02, 0xE2, 0xBA, 0x20, 0xC1, 0xE1 - .byte 0x03, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x13, 0xBC, 0x01, 0xC1, 0x11 - .byte 0x05, 0x40, 0xA0, 0x11, 0x04, 0x00, 0xA0, 0xE1, 0x0C, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xD8, 0xA5, 0x0D, 0x02, 0xFF, 0xFF, 0x00, 0x00 - - arm_func_start WM_EndDataSharing -WM_EndDataSharing: ; 0x020DAA6C - stmdb sp!, {r4,lr} - movs r4, r0 - moveq r0, #0x6 - ldmeqia sp!, {r4,lr} - bxeq lr - add r0, r4, #0x800 - ldrh r1, [r0, #0xe] - cmp r1, #0x0 - moveq r0, #0x3 - ldmeqia sp!, {r4,lr} - bxeq lr - ldrh r0, [r0, #0x16] - mov r1, #0x0 - mov r2, r1 - bl WM_SetPortCallback - add r1, r4, #0x800 - mov r0, #0x0 - strh r0, [r1, #0xe] - strh r0, [r1, #0x1c] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start WM_StartDataSharing -WM_StartDataSharing: ; 0x020DAAC0 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - mov r10, r0 - mov r7, r1 - mov r6, r2 - mov r0, #0x2 - mov r1, #0x9 - mov r2, #0xa - mov r5, r3 - mov r9, #0x1 - bl WMi_CheckStateEx -_020DAAEC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x0C, 0xD0, 0x8D, 0x12, 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x5A, 0xE3 - .byte 0x0C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x10, 0x00, 0x57, 0xE3, 0x0C, 0xD0, 0x8D, 0x22, 0x06, 0x00, 0xA0, 0x23, 0xF0, 0x4F, 0xBD, 0x28 - .byte 0x1E, 0xFF, 0x2F, 0x21, 0x00, 0x00, 0x56, 0xE3, 0x0C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03 - .byte 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0xCA, 0xF4, 0xFF, 0xEB, 0x00, 0x40, 0xB0, 0xE1 - .byte 0x01, 0x00, 0x00, 0x1A, 0xA5, 0xF4, 0xFF, 0xEB, 0x00, 0x90, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x82, 0x2E, 0xA0, 0xE3, 0xB8, 0xCD, 0xFF, 0xEB, 0x02, 0x0B, 0x8A, 0xE2 - .byte 0x00, 0x20, 0xA0, 0xE3, 0xB8, 0x20, 0xC0, 0xE1, 0xBA, 0x20, 0xC0, 0xE1, 0xBC, 0x20, 0xC0, 0xE1 - .byte 0xB0, 0x51, 0xC0, 0xE1, 0xB6, 0x71, 0xC0, 0xE1, 0xBE, 0x20, 0xC0, 0xE1, 0x01, 0x00, 0xA0, 0xE3 - .byte 0x30, 0x10, 0x9D, 0xE5, 0x10, 0x04, 0x86, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x00, 0x08, 0xA0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0x13, 0x02, 0x1B, 0x8A, 0xE2, 0xB8, 0x21, 0xC1, 0xE1, 0x20, 0x08, 0xA0, 0xE1 - .byte 0xBE, 0x00, 0xC1, 0xE1, 0x2C, 0x0C, 0x00, 0xEB, 0x02, 0x3B, 0x8A, 0xE2, 0x95, 0x00, 0x01, 0xE0 - .byte 0xB2, 0x01, 0xC3, 0xE1, 0xB4, 0x11, 0xC3, 0xE1, 0xB4, 0x01, 0xD3, 0xE1, 0x7F, 0x0F, 0x50, 0xE3 - .byte 0x00, 0x00, 0xA0, 0x83, 0xBE, 0x00, 0xC3, 0x81, 0x0C, 0xD0, 0x8D, 0x82, 0x06, 0x00, 0xA0, 0x83 - .byte 0xF0, 0x4F, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0x04, 0x00, 0x80, 0xE2, 0xB4, 0x01, 0xC3, 0xE1 - .byte 0x01, 0x00, 0xA0, 0xE3, 0xBC, 0x01, 0xC3, 0xE1, 0x00, 0x00, 0x54, 0xE3, 0x44, 0x00, 0x00, 0x1A - .byte 0x01, 0x20, 0x89, 0xE3, 0x00, 0x40, 0xA0, 0xE3, 0xBE, 0x10, 0xD3, 0xE1, 0x84, 0x04, 0xA0, 0xE1 - .byte 0x01, 0x40, 0x84, 0xE2, 0x02, 0x10, 0x01, 0xE0, 0xB0, 0x10, 0x8A, 0xE1, 0x04, 0x00, 0x54, 0xE3 - .byte 0xF8, 0xFF, 0xFF, 0xBA, 0x10, 0x11, 0x9F, 0xE5, 0x07, 0x00, 0xA0, 0xE1, 0x0A, 0x20, 0xA0, 0xE1 - .byte 0xC3, 0xF8, 0xFF, 0xEB, 0x0A, 0x80, 0xA0, 0xE1, 0x00, 0x70, 0xA0, 0xE3, 0x02, 0x40, 0xA0, 0xE3 - .byte 0x01, 0x60, 0xA0, 0xE3, 0xF4, 0xB0, 0x9F, 0xE5, 0xF4, 0x50, 0x9F, 0xE5, 0x28, 0x00, 0x00, 0xEA - .byte 0x02, 0xCB, 0x8A, 0xE2, 0xB8, 0x20, 0xDC, 0xE1, 0x0B, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 - .byte 0x01, 0x20, 0x82, 0xE2, 0x03, 0x20, 0x02, 0xE2, 0xB8, 0x20, 0xCC, 0xE1, 0xBE, 0x30, 0xDC, 0xE1 - .byte 0x08, 0x20, 0xA0, 0xE1, 0x09, 0x30, 0x03, 0xE0, 0x03, 0x38, 0xA0, 0xE1, 0x23, 0x38, 0xA0, 0xE1 - .byte 0x00, 0x30, 0x8D, 0xE5, 0xB6, 0x31, 0xDC, 0xE1, 0x04, 0x30, 0x8D, 0xE5, 0x08, 0x60, 0x8D, 0xE5 - .byte 0xB4, 0x31, 0xDC, 0xE1, 0x58, 0xFB, 0xFF, 0xEB, 0x07, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A - .byte 0x87, 0x00, 0x8A, 0xE0, 0x02, 0x0B, 0x80, 0xE2, 0xB0, 0x50, 0xC0, 0xE1, 0x02, 0x0B, 0x8A, 0xE2 - .byte 0xBA, 0x10, 0xD0, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x03, 0x10, 0x01, 0xE2, 0xBA, 0x10, 0xC0, 0xE1 - .byte 0x09, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0x02, 0x00, 0x50, 0xE3 - .byte 0x02, 0x0B, 0x8A, 0x12, 0x05, 0x10, 0xA0, 0x13, 0xBC, 0x11, 0xC0, 0x11, 0x0C, 0xD0, 0x8D, 0x12 - .byte 0x01, 0x00, 0xA0, 0x13, 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x02, 0x8C, 0x88, 0xE2 - .byte 0x01, 0x70, 0x87, 0xE2, 0x02, 0x0B, 0x8A, 0xE2, 0xB8, 0x01, 0xD0, 0xE1, 0x01, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0xA0, 0x11, 0x04, 0x00, 0xA0, 0x01, 0x00, 0x00, 0x57, 0xE1, 0xCF, 0xFF, 0xFF, 0xBA - .byte 0x05, 0x00, 0x00, 0xEA, 0x2C, 0x10, 0x9F, 0xE5, 0x03, 0x40, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x0A, 0x20, 0xA0, 0xE1, 0xBA, 0x40, 0xC3, 0xE1, 0x85, 0xF8, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x0C, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x6C, 0xA4, 0x0D, 0x02 - .byte 0xD8, 0xA5, 0x0D, 0x02, 0xFF, 0xFF, 0x00, 0x00, 0x2C, 0xA3, 0x0D, 0x02 - - arm_func_start WM_EndKeySharing -WM_EndKeySharing: ; 0x020DAD3C - ldr ip, _020DAD44 ; =WM_EndDataSharing - bx r12 - .balign 4 -_020DAD44: .word WM_EndDataSharing - - arm_func_start WM_StartKeySharing -WM_StartKeySharing: ; 0x020DAD48 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020DAD70 ; =0x0000FFFF - mov r12, #0x1 - mov r3, #0x2 - str r12, [sp, #0x0] - bl WM_StartDataSharing - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DAD70: .word 0x0000FFFF - - arm_func_start WM_SetEntry -WM_SetEntry: ; 0x020DAD74 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - mov r0, #0x2 - mov r1, #0x7 - mov r2, #0x9 - bl WMi_CheckStateEx -_020DAD94: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x05, 0x10, 0xA0, 0xE1, 0x21, 0x00, 0xA0, 0xE3, 0xFB, 0xF5, 0xFF, 0xEB - .byte 0x04, 0x20, 0xA0, 0xE1, 0x21, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0xA0, 0xE3, 0xAC, 0xF5, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_MeasureChannel -WM_MeasureChannel: ; 0x020DADD4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl WMi_GetSystemWork - mov r0, #0x1 - mov r1, #0x2 - bl WMi_CheckStateEx -_020DADFC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x0C, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x07, 0x10, 0xA0, 0xE1 - .byte 0x1E, 0x00, 0xA0, 0xE3, 0xE1, 0xF5, 0xFF, 0xEB, 0xB0, 0x22, 0xDD, 0xE1, 0x1E, 0x30, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x8D, 0xE2, 0x0A, 0x10, 0xA0, 0xE3, 0xB0, 0x30, 0xCD, 0xE1, 0xB2, 0x60, 0xCD, 0xE1 - .byte 0xB4, 0x50, 0xCD, 0xE1, 0xB6, 0x40, 0xCD, 0xE1, 0xB8, 0x20, 0xCD, 0xE1, 0x6E, 0xF5, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x0C, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_SetLifeTime -WM_SetLifeTime: ; 0x020DAE54 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl WMi_CheckIdle -_020DAE70: - .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x07, 0x10, 0xA0, 0xE1, 0x1D, 0x00, 0xA0, 0xE3, 0xC4, 0xF5, 0xFF, 0xEB, 0xB0, 0xC2, 0xDD, 0xE1 - .byte 0x00, 0x40, 0x8D, 0xE5, 0x06, 0x20, 0xA0, 0xE1, 0x05, 0x30, 0xA0, 0xE1, 0x1D, 0x00, 0xA0, 0xE3 - .byte 0x04, 0x10, 0xA0, 0xE3, 0x04, 0xC0, 0x8D, 0xE5, 0x71, 0xF5, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0xA0, 0x03, 0x0C, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_SetBeaconIndication -WM_SetBeaconIndication: ; 0x020DAEC0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - - arm_func_start FUN_020daecc -FUN_020daecc: ; 0x020DAECC - mov r4, r1 - bl WMi_CheckIdle -_020DAED4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x54, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x54, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x12, 0x06, 0x00, 0xA0, 0x13, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x19, 0x00, 0xA0, 0xE3, 0xA4, 0xF5, 0xFF, 0xEB, 0x04, 0x20, 0xA0, 0xE1 - .byte 0x19, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0xA0, 0xE3, 0x55, 0xF5, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0xA0, 0x03, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_SetGameInfo -WM_SetGameInfo: ; 0x020DAF30 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r0, #0x2 - mov r1, #0x7 - mov r2, #0x9 - mov r4, r3 - bl WMi_CheckStateEx -_020DAF58: - .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0x12 - .byte 0xF0, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x56, 0xE3, 0x0C, 0xD0, 0x8D, 0x02 - .byte 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x70, 0x00, 0x55, 0xE3 - .byte 0x0C, 0xD0, 0x8D, 0x82, 0x06, 0x00, 0xA0, 0x83, 0xF0, 0x40, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81 - .byte 0x5C, 0x10, 0x9F, 0xE5, 0x06, 0x00, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x8F, 0xCC, 0xFF, 0xEB - .byte 0x4C, 0x00, 0x9F, 0xE5, 0x05, 0x10, 0xA0, 0xE1, 0x64, 0xC4, 0xFF, 0xEB, 0x07, 0x10, 0xA0, 0xE1 - .byte 0x18, 0x00, 0xA0, 0xE3, 0x79, 0xF5, 0xFF, 0xEB, 0xB0, 0x02, 0xDD, 0xE1, 0x00, 0x40, 0x8D, 0xE5 - .byte 0x24, 0x10, 0xDD, 0xE5, 0x04, 0x00, 0x8D, 0xE5, 0x24, 0x20, 0x9F, 0xE5, 0x08, 0x10, 0x8D, 0xE5 - .byte 0x05, 0x30, 0xA0, 0xE1, 0x18, 0x00, 0xA0, 0xE3, 0x05, 0x10, 0xA0, 0xE3, 0x24, 0xF5, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x0C, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xC0, 0x68, 0x1D, 0x02 - - arm_func_start WM_SetWEPKeyEx -WM_SetWEPKeyEx: ; 0x020DAFF8 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl WMi_CheckIdle -_020DB014: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x03, 0x00, 0x56, 0xE3, 0x04, 0xD0, 0x8D, 0x82, 0x06, 0x00, 0xA0, 0x83 - .byte 0xF0, 0x40, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0x00, 0x00, 0x56, 0xE3, 0x07, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x54, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x04, 0x00, 0xA0, 0xE1, 0x50, 0x10, 0xA0, 0xE3, 0x37, 0xC4, 0xFF, 0xEB - .byte 0x07, 0x10, 0xA0, 0xE1, 0x27, 0x00, 0xA0, 0xE3, 0x4C, 0xF5, 0xFF, 0xEB, 0x06, 0x20, 0xA0, 0xE1 - .byte 0x04, 0x30, 0xA0, 0xE1, 0x27, 0x00, 0xA0, 0xE3, 0x03, 0x10, 0xA0, 0xE3, 0x00, 0x50, 0x8D, 0xE5 - .byte 0xFB, 0xF4, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_SetWEPKeyEx2 -WM_SetWEPKeyEx2: ; 0x020DB098 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl WMi_CheckIdle -_020DB0AC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x70, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x03, 0x00, 0x55, 0xE3, 0x06, 0x00, 0xA0, 0x83 - .byte 0x70, 0x40, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0x00, 0x00, 0x55, 0xE3, 0x06, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x54, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x04, 0x00, 0xA0, 0xE1, 0x50, 0x10, 0xA0, 0xE3, 0x14, 0xC4, 0xFF, 0xEB, 0x06, 0x10, 0xA0, 0xE1 - .byte 0x14, 0x00, 0xA0, 0xE3, 0x29, 0xF5, 0xFF, 0xEB, 0x05, 0x20, 0xA0, 0xE1, 0x04, 0x30, 0xA0, 0xE1 - .byte 0x14, 0x00, 0xA0, 0xE3, 0x02, 0x10, 0xA0, 0xE3, 0xD9, 0xF4, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CTRDG_CheckEnabled -CTRDG_CheckEnabled: ; 0x020DB11C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl CTRDG_IsOptionCartridge -_020DB128: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12 - .byte 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x1C, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0xBF, 0xC9, 0xFF, 0xEB - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CTRDG_Enable -CTRDG_Enable: ; 0x020DB15C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, _020DB1AC ; =0x021D6940 - mov r4, r0 - str r5, [r1, #0x0] - bl CTRDG_IsOptionCartridge -_020DB17C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x55, 0xE3, 0x01, 0x1A, 0xA0, 0x13, 0x05, 0x1A, 0xA0, 0x03 - .byte 0x0F, 0x0A, 0xA0, 0xE3, 0x0F, 0xC6, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x60, 0xC8, 0xFF, 0xEB - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020DB1AC: .word 0x021D6940 - - arm_func_start CTRDG_IsEnabled -CTRDG_IsEnabled: ; 0x020DB1B0 - ldr r0, _020DB1BC ; =0x021D6940 - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020DB1BC: .word 0x021D6940 - - arm_func_start CTRDGi_AccessCommon -CTRDGi_AccessCommon: ; 0x020DB1C0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl CTRDG_IsExisting -_020DB1DC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x02, 0x00, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0xC9, 0xFF, 0xFF, 0xEB, 0xC0, 0x00, 0x9F, 0xE5, 0xB2, 0x00, 0xD0, 0xE1, 0x01, 0xBC, 0xFF, 0xEB - .byte 0x21, 0x00, 0x54, 0xE3, 0x0D, 0x00, 0x00, 0x8A, 0x21, 0x00, 0x54, 0xE3, 0x17, 0x00, 0x00, 0x2A - .byte 0x11, 0x00, 0x54, 0xE3, 0x06, 0x00, 0x00, 0x8A, 0x10, 0x00, 0x54, 0xE3, 0x1C, 0x00, 0x00, 0x3A - .byte 0x10, 0x00, 0x54, 0xE3, 0x19, 0x00, 0x00, 0x0A, 0x11, 0x00, 0x54, 0xE3, 0x0B, 0x00, 0x00, 0x0A - .byte 0x17, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x54, 0xE3, 0xB0, 0x60, 0xC7, 0x01, 0x14, 0x00, 0x00, 0xEA - .byte 0x40, 0x00, 0x54, 0xE3, 0x02, 0x00, 0x00, 0x8A, 0x40, 0x00, 0x54, 0xE3, 0x00, 0x60, 0x87, 0x05 - .byte 0x0F, 0x00, 0x00, 0xEA, 0x41, 0x00, 0x54, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0x0C, 0x00, 0x00, 0xEA - .byte 0x00, 0x00, 0x55, 0xE3, 0x00, 0x00, 0xD7, 0x15, 0x00, 0x00, 0xC5, 0x15, 0x08, 0x00, 0x00, 0xEA - .byte 0x00, 0x00, 0x55, 0xE3, 0xB0, 0x00, 0xD7, 0x11, 0xB0, 0x00, 0xC5, 0x11, 0x04, 0x00, 0x00, 0xEA - .byte 0x00, 0x00, 0x55, 0xE3, 0x00, 0x00, 0x97, 0x15, 0x00, 0x00, 0x85, 0x15, 0x00, 0x00, 0x00, 0xEA - .byte 0x00, 0x60, 0xC7, 0xE5, 0x20, 0x00, 0x9F, 0xE5, 0xB2, 0x00, 0xD0, 0xE1, 0x7C, 0xBB, 0xFF, 0xEB - .byte 0xF9, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x13, 0x00, 0x00, 0xA0, 0x03 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x44, 0x69, 0x1D, 0x02 - - arm_func_start CTRDG_Read32 -CTRDG_Read32: ; 0x020DB2C0 - ldr ip, _020DB2D4 ; =CTRDGi_AccessCommon - mov r2, r1 - mov r1, #0x0 - mov r3, #0x41 - bx r12 - .balign 4 -_020DB2D4: .word CTRDGi_AccessCommon - - arm_func_start CTRDGi_CopyCommon -CTRDGi_CopyCommon: ; 0x020DB2D8 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl CTRDG_IsExisting -_020DB2F4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x00, 0x00, 0xA0, 0x03 - .byte 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x83, 0xFF, 0xFF, 0xEB, 0x18, 0x01, 0x9F, 0xE5 - .byte 0xB2, 0x00, 0xD0, 0xE1, 0xBB, 0xBB, 0xFF, 0xEB, 0x18, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x10, 0xE2 - .byte 0x04, 0x00, 0x00, 0x1A, 0x07, 0x00, 0xA0, 0xE1, 0x9A, 0xC9, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1 - .byte 0x04, 0x10, 0xA0, 0xE1, 0x88, 0xC3, 0xFF, 0xEB, 0x18, 0x00, 0x9D, 0xE5, 0x11, 0x00, 0x50, 0xE3 - .byte 0x09, 0x00, 0x00, 0x8A, 0x10, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x3A, 0x10, 0x00, 0x50, 0xE3 - .byte 0x0D, 0x00, 0x00, 0x0A, 0x11, 0x00, 0x50, 0xE3, 0x17, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x00, 0xEA - .byte 0x01, 0x00, 0x50, 0xE3, 0x1E, 0x00, 0x00, 0x0A, 0x25, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0x00, 0x8A, 0x20, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x0A, 0x20, 0x00, 0x00, 0xEA - .byte 0x21, 0x00, 0x50, 0xE3, 0x11, 0x00, 0x00, 0x0A, 0x1D, 0x00, 0x00, 0xEA, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x06, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x04, 0x30, 0xA0, 0xE1, 0x1A, 0xCA, 0xFF, 0xEB - .byte 0x17, 0x00, 0x00, 0xEA, 0x07, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1 - .byte 0x04, 0x30, 0xA0, 0xE1, 0x32, 0xCA, 0xFF, 0xEB, 0x11, 0x00, 0x00, 0xEA, 0x06, 0x00, 0xA0, 0xE1 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x84, 0xCB, 0xFF, 0xEB, 0x0C, 0x00, 0x00, 0xEA - .byte 0x06, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x8B, 0xCB, 0xFF, 0xEB - .byte 0x07, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x54, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x04, 0x00, 0x00, 0x9A - .byte 0x01, 0x00, 0xD6, 0xE4, 0x01, 0x10, 0x81, 0xE2, 0x04, 0x00, 0x51, 0xE1, 0x01, 0x00, 0xC5, 0xE4 - .byte 0xFA, 0xFF, 0xFF, 0x3A, 0x20, 0x00, 0x9F, 0xE5, 0xB2, 0x00, 0xD0, 0xE1, 0x20, 0xBB, 0xFF, 0xEB - .byte 0x9D, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x13, 0x00, 0x00, 0xA0, 0x03 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x44, 0x69, 0x1D, 0x02 - - arm_func_start CTRDG_CpuCopy32 -CTRDG_CpuCopy32: ; 0x020DB430 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r3, r2 - mov r12, #0x21 - mov r1, r0 - mov r2, lr - mov r0, #0x0 - str r12, [sp, #0x0] - bl CTRDGi_CopyCommon - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDG_CpuCopy16 -CTRDG_CpuCopy16: ; 0x020DB464 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r3, r2 - mov r12, #0x11 - mov r1, r0 - mov r2, lr - mov r0, #0x0 - str r12, [sp, #0x0] - bl CTRDGi_CopyCommon - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDG_CpuCopy8 -CTRDG_CpuCopy8: ; 0x020DB498 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r3, r2 - cmp lr, #0x8000000 - blo _020DB4DC - ldr r2, _020DB500 ; =0x0A010000 - cmp lr, r2 - bhs _020DB4DC - mov r12, #0x1 - mov r2, r0 - mov r0, #0x0 - str r12, [sp, #0x0] - bl CTRDGi_CopyCommon - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020DB4DC: - mov r12, #0x1 - mov r1, r0 - mov r2, lr - mov r0, #0x0 - str r12, [sp, #0x0] - bl CTRDGi_CopyCommon - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DB500: .word 0x0A010000 - - arm_func_start CTRDGi_SendtoPxi -CTRDGi_SendtoPxi: ; 0x020DB504 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r1, r7 - mov r0, #0xd - mov r2, #0x0 - bl PXI_SendWordByFifo -_020DB520: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x01, 0x60, 0xA0, 0xE3, 0x0D, 0x50, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3, 0x06, 0x00, 0xA0, 0xE1 - .byte 0x2A, 0x94, 0xFC, 0xFB, 0x05, 0x00, 0xA0, 0xE1, 0x07, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1 - .byte 0xE2, 0xD1, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0xF7, 0xFF, 0xFF, 0x1A, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CTRDGi_UnlockByProcessor -CTRDGi_UnlockByProcessor: ; 0x020DB568 - stmdb sp!, {r4,lr} - mov r4, r1 - ldr r1, [r4, #0x0] - cmp r1, #0x0 - bne _020DB580 - bl OS_UnlockCartridge -_020DB580: - ldr r0, [r4, #0x4] - bl OS_RestoreInterrupts - ldmia sp!, {r4,lr} - bx lr - - arm_func_start CTRDGi_LockByProcessor -CTRDGi_LockByProcessor: ; 0x020DB590 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - ldr r5, _020DB60C ; =0x027FFFE8 - mov r4, #0x1 - bl OS_DisableInterrupts - str r0, [r6, #0x4] - mov r0, r5 - bl OS_ReadOwnerOfLockWord - and r0, r0, #0x40 - str r0, [r6, #0x0] - ldr r0, [r6, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r7,lr} - bxne lr - mov r0, r7 - bl OS_TryLockCartridge -_020DB5DC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x04, 0x00, 0x96, 0xE5 - .byte 0x4B, 0xC7, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0xFC, 0x93, 0xFC, 0xFB, 0xE9, 0xFF, 0xFF, 0xEA - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020DB60C: .word 0x027FFFE8 - - arm_func_start CTRDGi_RestoreAccessCycle -CTRDGi_RestoreAccessCycle: ; 0x020DB610 - ldr r3, _020DB640 ; =0x04000204 - ldr r2, [r0, #0x0] - ldrh r1, [r3, #0x0] - bic r1, r1, #0xc - orr r1, r1, r2, lsl #0x2 - strh r1, [r3, #0x0] - ldrh r1, [r3, #0x0] - ldr r2, [r0, #0x4] - bic r0, r1, #0x10 - orr r0, r0, r2, lsl #0x4 - strh r0, [r3, #0x0] - bx lr - .balign 4 -_020DB640: .word 0x04000204 - - arm_func_start CTRDGi_ChangeLatestAccessCycle -CTRDGi_ChangeLatestAccessCycle: ; 0x020DB644 - ldr r2, _020DB688 ; =0x04000204 - ldrh r1, [r2, #0x0] - and r1, r1, #0xc - mov r1, r1, asr #0x2 - str r1, [r0, #0x0] - ldrh r1, [r2, #0x0] - and r1, r1, #0x10 - mov r1, r1, asr #0x4 - str r1, [r0, #0x4] - ldrh r0, [r2, #0x0] - bic r0, r0, #0xc - orr r0, r0, #0xc - strh r0, [r2, #0x0] - ldrh r0, [r2, #0x0] - bic r0, r0, #0x10 - strh r0, [r2, #0x0] - bx lr - .balign 4 -_020DB688: .word 0x04000204 - - arm_func_start CTRDG_IsExisting -CTRDG_IsExisting: - stmdb sp!, {r4,lr} - sub sp, sp, #0x10 - ldr r2, _020DB798 ; =0x027FFC30 - ldr r0, _020DB79C ; =0x0000FFFF - ldrh r1, [r2, #0x0] - mov r4, #0x1 - cmp r1, r0 - addeq sp, sp, #0x10 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ldrb r0, [r2, #0x5] - mov r0, r0, lsl #0x1e - mov r0, r0, lsr #0x1f - cmp r0, #0x1 - addeq sp, sp, #0x10 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ldr r0, _020DB7A0 ; =0x021D6944 - add r1, sp, #0x0 - ldrh r0, [r0, #0x2] - bl CTRDGi_LockByProcessor - add r0, sp, #0x8 - bl CTRDGi_ChangeLatestAccessCycle - mov r0, #0x8000000 - ldrb r2, [r0, #0xb2] - cmp r2, #0x96 - bne _020DB714 - ldr r1, _020DB798 ; =0x027FFC30 - ldrh r0, [r0, #0xbe] - ldrh r1, [r1, #0x0] - cmp r1, r0 - bne _020DB75C -_020DB714: - cmp r2, #0x96 - beq _020DB734 - ldr r1, _020DB798 ; =0x027FFC30 - ldr r0, _020DB7A4 ; =0x0801FFFE - ldrh r1, [r1, #0x0] - ldrh r0, [r0, #0x0] - cmp r1, r0 - bne _020DB75C -_020DB734: - ldr r2, _020DB798 ; =0x027FFC30 - mov r0, #0x8000000 - ldr r1, [r2, #0x8] - ldr r0, [r0, #0xac] - cmp r1, r0 - beq _020DB770 - ldrb r0, [r2, #0x5] - mov r0, r0, lsl #0x1f - movs r0, r0, lsr #0x1f - beq _020DB770 -_020DB75C: - ldr r1, _020DB798 ; =0x027FFC30 - mov r4, #0x0 - ldrb r0, [r1, #0x5] - orr r0, r0, #0x2 - strb r0, [r1, #0x5] -_020DB770: - add r0, sp, #0x8 - bl CTRDGi_RestoreAccessCycle - ldr r0, _020DB7A0 ; =0x021D6944 - add r1, sp, #0x0 - ldrh r0, [r0, #0x2] - bl CTRDGi_UnlockByProcessor - mov r0, r4 - add sp, sp, #0x10 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020DB798: .word 0x027FFC30 -_020DB79C: .word 0x0000FFFF -_020DB7A0: .word 0x021D6944 -_020DB7A4: .word 0x0801FFFE - - arm_func_start CTRDG_IsPulledOut -CTRDG_IsPulledOut: ; 0x020DB7A8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020DB800 ; =0x027FFC30 - ldr r0, _020DB804 ; =0x0000FFFF - ldrh r1, [r2, #0x0] - cmp r1, r0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {lr} - bxeq lr - ldrb r0, [r2, #0x5] - mov r0, r0, lsl #0x1e - movs r0, r0, lsr #0x1f - bne _020DB7E4 - bl CTRDG_IsExisting -_020DB7E4: - ldr r0, _020DB800 ; =0x027FFC30 - ldrb r0, [r0, #0x5] - mov r0, r0, lsl #0x1e - mov r0, r0, lsr #0x1f - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DB800: .word 0x027FFC30 -_020DB804: .word 0x0000FFFF - - arm_func_start CTRDGi_GetAgbMakerCodeAtInit -CTRDGi_GetAgbMakerCodeAtInit: ; 0x020DB808 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl CTRDGi_IsAgbCartridgeAtInit -_020DB814: - .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x9F, 0x15, 0xB6, 0x40, 0xD0, 0x11 - .byte 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x30, 0xFC, 0x7F, 0x02 - - arm_func_start CTRDG_GetAgbMakerCode -CTRDG_GetAgbMakerCode: ; 0x020DB830 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl CTRDG_IsExisting -_020DB83C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0x00, 0x0A, 0xEF, 0xFF, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1 - .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CTRDGi_GetAgbGameCodeAtInit -CTRDGi_GetAgbGameCodeAtInit: ; 0x020DB858 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl CTRDGi_IsAgbCartridgeAtInit -_020DB864: - .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x9F, 0x15, 0x08, 0x40, 0x90, 0x15 - .byte 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x30, 0xFC, 0x7F, 0x02 - - arm_func_start CTRDG_GetAgbGameCode -CTRDG_GetAgbGameCode: ; 0x020DB880 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl CTRDG_IsExisting -_020DB88C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0x00, 0x0A, 0xEF, 0xFF, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1 - .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CTRDGi_IsAgbCartridgeAtInit -CTRDGi_IsAgbCartridgeAtInit: - ldr r0, _020DB8BC ; =0x027FFC30 - ldrb r0, [r0, #0x5] - mov r0, r0, lsl #0x1f - mov r0, r0, lsr #0x1f - bx lr - .balign 4 -_020DB8BC: .word 0x027FFC30 - - arm_func_start CTRDG_IsOptionCartridge -CTRDG_IsOptionCartridge: - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl CTRDG_IsExisting -_020DB8CC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x05, 0x00, 0x00, 0x0A, 0xF3, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02 - .byte 0x01, 0x00, 0xA0, 0x03, 0x00, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CTRDG_IsAgbCartridge -CTRDG_IsAgbCartridge: ; 0x020DB8FC - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl CTRDG_IsExisting -_020DB908: - .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A - .byte 0xE4, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x01, 0x00, 0xA0, 0x13 - .byte 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CTRDGi_InitCommon -CTRDGi_InitCommon: ; 0x020DB938 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020DB970 ; =0x021D6944 - mov r3, #0x0 - ldr r2, _020DB974 ; =0x05000001 - add r0, sp, #0x0 - str r3, [sp, #0x0] - blx FUN_020002FE - bl OS_GetLockID - ldr r1, _020DB970 ; =0x021D6944 - strh r0, [r1, #0x2] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DB970: .word 0x021D6944 -_020DB974: .word 0x05000001 - - arm_func_start CTRDGi_CallbackForSetPhi -CTRDGi_CallbackForSetPhi: ; 0x020DB978 - ldr r0, _020DB988 ; =0x021D694C - mov r1, #0x0 - str r1, [r0, #0x0] - bx lr - .balign 4 -_020DB988: .word 0x021D694C - - arm_func_start CTRDG_TerminateForPulledOut -CTRDG_TerminateForPulledOut: ; 0x020DB98C - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r0, #0x2 - bl CTRDGi_SendtoPxi - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_PulledOutCallback -CTRDGi_PulledOutCallback: ; 0x020DB9AC - stmdb sp!, {lr} - sub sp, sp, #0x4 - and r0, r1, #0x3f - cmp r0, #0x11 - bne _020DBA14 - ldr r0, _020DBA24 ; =0x021D6954 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r1, _020DBA28 ; =0x021D6958 - mov r0, #0x0 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - beq _020DB9F0 - blx r1 -_020DB9F0: - cmp r0, #0x0 - beq _020DB9FC - bl CTRDG_TerminateForPulledOut -_020DB9FC: - ldr r0, _020DBA24 ; =0x021D6954 - mov r1, #0x1 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020DBA14: - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DBA24: .word 0x021D6954 -_020DBA28: .word 0x021D6958 - - arm_func_start CTRDGi_CallbackForInitModuleInfo -CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C - stmdb sp!, {lr} - sub sp, sp, #0x4 - and r0, r1, #0x3f - cmp r0, #0x1 - ldreq r0, _020DBA64 ; =0x021D6944 - moveq r1, #0x1 - streqh r1, [r0, #0x0] - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DBA64: .word 0x021D6944 - - arm_func_start CTRDGi_InitModuleInfo -CTRDGi_InitModuleInfo: ; 0x020DBA68 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x14 - ldr r0, _020DBC50 ; =0x021D6948 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - addne sp, sp, #0x14 - ldmneia sp!, {r4-r7,lr} - bxne lr - ldr r1, _020DBC54 ; =0x04000300 - mov r2, #0x1 - str r2, [r0, #0x0] - ldrh r0, [r1, #0x0] - ands r0, r0, #0x1 - addeq sp, sp, #0x14 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - mov r0, #0x40000 - bl OS_SetIrqMask - ldr r3, _020DBC58 ; =0x04000208 - mov r2, #0x1 - ldrh r4, [r3, #0x0] - ldr r1, _020DBC5C ; =0x021D6944 - mov r6, r0 - strh r2, [r3, #0x0] - ldrh r0, [r1, #0x2] - add r1, sp, #0x0 - bl CTRDGi_LockByProcessor - ldr r1, _020DBC60 ; =0x04000204 - add r0, sp, #0x8 - ldrh r1, [r1, #0x0] - and r1, r1, #0x8000 - mov r5, r1, asr #0xf - bl CTRDGi_ChangeLatestAccessCycle - ldr r3, _020DBC60 ; =0x04000204 - ldr r0, _020DBC64 ; =0x021D6960 - ldrh r2, [r3, #0x0] - add r0, r0, #0x80 - mov r1, #0x40 - bic r2, r2, #0x8000 - strh r2, [r3, #0x0] - bl DC_InvalidateRange - ldr r2, _020DBC64 ; =0x021D6960 - ldr r1, _020DBC68 ; =0x08000080 - mov r0, #0x1 - mov r3, #0x40 - add r2, r2, #0x80 - bl MI_DmaCopy16 - ldr r2, _020DBC60 ; =0x04000204 - add r0, sp, #0x8 - ldrh r1, [r2, #0x0] - bic r1, r1, #0x8000 - orr r1, r1, r5, lsl #0xf - strh r1, [r2, #0x0] - bl CTRDGi_RestoreAccessCycle - ldr r0, _020DBC5C ; =0x021D6944 - add r1, sp, #0x0 - ldrh r0, [r0, #0x2] - bl CTRDGi_UnlockByProcessor - ldr r0, _020DBC6C ; =0x027FFF9B - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _020DBB70 - ldr r0, _020DBC70 ; =0x027FFF9A - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _020DBBDC -_020DBB70: - ldr r2, _020DBC64 ; =0x021D6960 - ldr r0, _020DBC74 ; =0x027FFC30 - ldrh r1, [r2, #0xbe] - mov r3, #0x0 - strh r1, [r0, #0x0] -_020DBB84: - add r0, r2, r3 - ldrb r1, [r0, #0xb5] - add r0, r3, #0x2700000 - add r0, r0, #0xff000 - add r3, r3, #0x1 - strb r1, [r0, #0xC32] - cmp r3, #0x3 - blt _020DBB84 - ldrh r0, [r2, #0xb0] - ldr r1, _020DBC74 ; =0x027FFC30 - strh r0, [r1, #0x6] - ldr r0, [r2, #0xac] - str r0, [r1, #0x8] - bl CTRDG_IsExisting -_020DBBBC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x20, 0xA0, 0x13, 0xA0, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0x03, 0x00, 0x20, 0xC1, 0xE5 - .byte 0x98, 0x00, 0x9F, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0xC0, 0xE5 -_020DBBDC: - ldr r0, _020DBC78 ; =0xFFFF0020 - ldr r1, _020DBC7C ; =0x021D6964 - mov r2, #0x9c - bl MIi_CpuCopy32 - bl DC_FlushAll - ldr r0, _020DBC64 ; =0x021D6960 - add r0, r0, #0xfe000000 - mov r0, r0, lsr #0x5 - mov r0, r0, lsl #0x6 - orr r0, r0, #0x1 - bl CTRDGi_SendtoPxi - ldr r5, _020DBC5C ; =0x021D6944 - ldrh r0, [r5, #0x0] - cmp r0, #0x1 - beq _020DBC30 - mov r7, #0x1 -_020DBC1C: - mov r0, r7 - blx FUN_020005F2 - ldrh r0, [r5, #0x0] - cmp r0, #0x1 - bne _020DBC1C -_020DBC30: - ldr r2, _020DBC58 ; =0x04000208 - mov r0, r6 - ldrh r1, [r2, #0x0] - strh r4, [r2, #0x0] - bl OS_SetIrqMask - add sp, sp, #0x14 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DBC50: .word 0x021D6948 -_020DBC54: .word 0x04000300 -_020DBC58: .word 0x04000208 -_020DBC5C: .word 0x021D6944 -_020DBC60: .word 0x04000204 -_020DBC64: .word 0x021D6960 -_020DBC68: .word 0x08000080 -_020DBC6C: .word 0x027FFF9B -_020DBC70: .word 0x027FFF9A -_020DBC74: .word 0x027FFC30 -_020DBC78: .word 0xFFFF0020 -_020DBC7C: .word 0x021D6964 - - arm_func_start CTRDG_Init -CTRDG_Init: ; 0x020DBC80 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020DBD34 ; =0x021D6950 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - mov r1, #0x1 - str r1, [r0, #0x0] - bl CTRDGi_InitCommon - ldr r0, _020DBD38 ; =0x021D6954 - mov r1, #0x0 - str r1, [r0, #0x0] - bl PXI_Init - mov r5, #0xd - mov r4, #0x1 - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady -_020DBCD0: - .byte 0x00, 0x00, 0x50, 0xE3, 0xFA, 0xFF, 0xFF, 0x0A, 0x5C, 0x10, 0x9F, 0xE5, 0x0D, 0x00, 0xA0, 0xE3 - .byte 0x35, 0xD0, 0xFF, 0xEB, 0x5F, 0xFF, 0xFF, 0xEB, 0x0D, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x31, 0xD0, 0xFF, 0xEB, 0x44, 0x10, 0x9F, 0xE5, 0x0D, 0x00, 0xA0, 0xE3, 0x2E, 0xD0, 0xFF, 0xEB - .byte 0x3C, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x38, 0x00, 0x9F, 0xE5, 0x00, 0x20, 0x81, 0xE5 - .byte 0xAD, 0x07, 0x00, 0xEB, 0x30, 0x10, 0x9F, 0xE5, 0x11, 0x00, 0xA0, 0xE3, 0x26, 0xD0, 0xFF, 0xEB - .byte 0x00, 0x00, 0xA0, 0xE3, 0x0C, 0xFD, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 -_020DBD34: .word 0x021D6950 -_020DBD38: .word 0x021D6954 -_020DBD3C: - .byte 0x2C, 0xBA, 0x0D, 0x02 - .byte 0xAC, 0xB9, 0x0D, 0x02, 0x58, 0x69, 0x1D, 0x02, 0x20, 0x6A, 0x1D, 0x02, 0x78, 0xB9, 0x0D, 0x02 - - arm_func_start CTRDG_IdentifyAgbBackup -CTRDG_IdentifyAgbBackup: ; 0x020DBD50 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - cmp r7, #0x1 - mov r0, #0x1 - bhi _020DBEAC - bl OS_GetLockID - ldr r1, _020DBED8 ; =0x021D6B0C - strh r0, [r1, #0x0] - ldrh r0, [r1, #0x0] - bl OS_LockCartridge - ldr r6, _020DBEDC ; =0x04000204 - ldr r1, _020DBEE0 ; =0x02103FE4 - ldrh r3, [r6, #0x0] - ldrh r2, [r6, #0x0] - ldr r0, _020DBEE4 ; =0x021D6B28 - and r4, r3, #0x3 - bic r2, r2, #0x3 - orr r2, r2, #0x3 - strh r2, [r6, #0x0] - str r1, [r0, #0x0] - bl CTRDGi_ReadFlashID - ldr r2, _020DBEDC ; =0x04000204 - mov r6, r0 - ldrh r1, [r2, #0x0] - cmp r7, #0x0 - ldreq r5, _020DBEE8 ; =0x02103FF4 - bic r1, r1, #0x3 - orr r1, r1, r4 - cmp r7, #0x1 - ldr r0, _020DBED8 ; =0x021D6B0C - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - ldreq r5, _020DBEEC ; =0x02103FE8 - bl OS_UnlockCartridge2 - ldr r2, [r5, #0x0] - mov r0, #0x1 - ldrh r1, [r2, #0x38] - cmp r1, #0x0 - beq _020DBE14 - and r3, r6, #0xff -_020DBDF4: - ldrh r1, [r2, #0x38] - cmp r3, r1 - moveq r0, #0x0 - beq _020DBE14 - ldr r2, [r5, #0x4]! - ldrh r1, [r2, #0x38] - cmp r1, #0x0 - bne _020DBDF4 -_020DBE14: - ldr r2, [r2, #0x0] - ldr r1, _020DBEF0 ; =0x021D6B14 - ldr r3, _020DBEF4 ; =0x021D6B34 - str r2, [r1, #0x0] - ldr r1, [r5, #0x0] - ldr r2, _020DBEF8 ; =0x021D6B2C - ldr r4, [r1, #0x4] - ldr r1, _020DBEFC ; =0x021D6B18 - str r4, [r3, #0x0] - ldr r3, [r5, #0x0] - ldr r6, _020DBF00 ; =0x021D6B1C - ldr r3, [r3, #0x8] - ldr r4, _020DBF04 ; =0x021D6B30 - str r3, [r2, #0x0] - ldr r2, [r5, #0x0] - ldr r3, _020DBF08 ; =0x021D6B24 - ldr r7, [r2, #0xc] - ldr r2, _020DBEE4 ; =0x021D6B28 - str r7, [r1, #0x0] - ldr r7, [r5, #0x0] - ldr r1, _020DBF0C ; =0x021D6B20 - ldr r7, [r7, #0x10] - add sp, sp, #0x4 - str r7, [r6, #0x0] - ldr r6, [r5, #0x0] - ldr r6, [r6, #0x14] - str r6, [r4, #0x0] - ldr r4, [r5, #0x0] - ldr r4, [r4, #0x18] - str r4, [r3, #0x0] - ldr r3, [r5, #0x0] - ldr r3, [r3, #0x1c] - str r3, [r2, #0x0] - ldr r2, [r5, #0x0] - add r2, r2, #0x20 - str r2, [r1, #0x0] - ldmia sp!, {r4-r7,lr} - bx lr -_020DBEAC: - cmp r7, #0x2 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r7,lr} - bxne lr - bl OS_GetLockID - ldr r1, _020DBF10 ; =0x021D6B4C - strh r0, [r1, #0x0] - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DBED8: .word 0x021D6B0C -_020DBEDC: .word 0x04000204 -_020DBEE0: .word 0x02103FE4 -_020DBEE4: .word 0x021D6B28 -_020DBEE8: .word 0x02103FF4 -_020DBEEC: .word 0x02103FE8 -_020DBEF0: .word 0x021D6B14 -_020DBEF4: .word 0x021D6B34 -_020DBEF8: .word 0x021D6B2C -_020DBEFC: .word 0x021D6B18 -_020DBF00: .word 0x021D6B1C -_020DBF04: .word 0x021D6B30 -_020DBF08: .word 0x021D6B24 -_020DBF0C: .word 0x021D6B20 -_020DBF10: .word 0x021D6B4C - - arm_func_start CTRDG_WriteAndVerifyAgbFlashAsync -CTRDG_WriteAndVerifyAgbFlashAsync: ; 0x020DBF14 - stmdb sp!, {lr} - sub sp, sp, #0x24 - str r1, [sp, #0xc] - strh r0, [sp, #0x20] - str r2, [sp, #0x18] - ldr r1, _020DBF44 ; =CTRDGi_WriteAndVerifyAgbFlashSectorCore - add r0, sp, #0x0 - mov r2, r3 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DBF44: .word CTRDGi_WriteAndVerifyAgbFlashSectorCore - - arm_func_start CTRDG_VerifyAgbFlash -CTRDG_VerifyAgbFlash: ; 0x020DBF48 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0xc] - str r2, [sp, #0x18] - bl CTRDGi_VerifyAgbFlashCore - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDG_WriteAgbFlashSector -CTRDG_WriteAgbFlashSector: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020DBF90 ; =0x021D6B14 - ldr r2, [r2, #0x0] - blx r2 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DBF90: .word 0x021D6B14 - - arm_func_start CTRDG_ReadAgbFlash -CTRDG_ReadAgbFlash: ; 0x020DBF94 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0x14] - str r2, [sp, #0x1c] - str r3, [sp, #0x18] - bl CTRDGi_ReadAgbFlashCore - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_WriteAndVerifyAgbFlashSectorCore -CTRDGi_WriteAndVerifyAgbFlashSectorCore: ; 0x020DBFC0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x24 - mov r4, r0 - ldmia r4!, {r0-r3} - add r12, sp, #0x0 - stmia r12!, {r0-r3} - ldmia r4!, {r0-r3} - stmia r12!, {r0-r3} - ldr r0, [r4, #0x0] - mov r7, #0x0 - str r0, [r12, #0x0] - ldrh r6, [sp, #0x20] - ldr r5, [sp, #0xc] - ldr r4, [sp, #0x18] - mov r0, r6 - mov r1, r5 - bl CTRDG_WriteAgbFlashSector -_020DC004: - .byte 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x06, 0x00, 0xA0, 0xE1 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0xCA, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x24, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0x10, 0x87, 0xE2 - .byte 0x01, 0x18, 0xA0, 0xE1, 0x21, 0x78, 0xA0, 0xE1, 0x03, 0x00, 0x57, 0xE3, 0xED, 0xFF, 0xFF, 0x3A - .byte 0x24, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CTRDGi_VerifyAgbFlashCore -CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x24 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, _020DC128 ; =0x021D6B0C - ldr r1, [r5, #0x0] - ldrh r0, [r0, #0x0] - str r1, [r4, #0x0] - ldrh r6, [sp, #0x20] - ldr r5, [sp, #0xc] - ldr r4, [sp, #0x18] - bl OS_LockCartridge - ldr r3, _020DC12C ; =0x04000204 - ldr r0, _020DC130 ; =0x021D6B20 - ldrh r2, [r3, #0x0] - ldrh r1, [r3, #0x0] - and r7, r2, #0x3 - bic r1, r1, #0x3 - orr r1, r1, #0x3 - strh r1, [r3, #0x0] - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x0] - cmp r0, #0x20000 - bne _020DC0D4 - mov r0, r6, lsl #0xc - mov r0, r0, lsr #0x10 - bl CTRDGi_SetFlashBankMx - and r0, r6, #0xf - mov r0, r0, lsl #0x10 - mov r6, r0, lsr #0x10 -_020DC0D4: - ldr r1, _020DC130 ; =0x021D6B20 - mov r0, r5 - ldr r1, [r1, #0x0] - mov r2, r4 - ldrh r1, [r1, #0x8] - mov r1, r6, lsl r1 - add r1, r1, #0xa000000 - bl CTRDGi_VerifyFlashSectorCore - ldr r3, _020DC12C ; =0x04000204 - ldr r1, _020DC128 ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r7 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x24 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DC128: .word 0x021D6B0C -_020DC12C: .word 0x04000204 -_020DC130: .word 0x021D6B20 - - arm_func_start CTRDGi_VerifyFlashSectorCore -CTRDGi_VerifyFlashSectorCore: ; 0x020DC134 - cmp r2, #0x0 - sub r2, r2, #0x1 - beq _020DC160 -_020DC140: - ldrb r12, [r1], #0x1 - ldrb r3, [r0], #0x1 - cmp r12, r3 - subne r0, r1, #0x1 - bxne lr - cmp r2, #0x0 - sub r2, r2, #0x1 - bne _020DC140 -_020DC160: - mov r0, #0x0 - bx lr - - arm_func_start CTRDGi_ReadAgbFlashCore -CTRDGi_ReadAgbFlashCore: ; 0x020DC168 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x28 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, _020DC25C ; =0x021D6B0C - ldr r1, [r5, #0x0] - ldrh r0, [r0, #0x0] - str r1, [r4, #0x0] - ldrh r7, [sp, #0x20] - ldr r6, [sp, #0x14] - ldr r5, [sp, #0x1c] - ldr r4, [sp, #0x18] - bl OS_LockCartridge - ldr r3, _020DC260 ; =0x04000204 - ldr r0, _020DC264 ; =0x021D6B20 - ldrh r2, [r3, #0x0] - ldrh r1, [r3, #0x0] - and r8, r2, #0x3 - bic r1, r1, #0x3 - orr r1, r1, #0x3 - strh r1, [r3, #0x0] - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x0] - cmp r0, #0x20000 - bne _020DC1F4 - mov r0, r7, lsl #0xc - mov r0, r0, lsr #0x10 - bl CTRDGi_SetFlashBankMx - and r0, r7, #0xf - mov r0, r0, lsl #0x10 - mov r7, r0, lsr #0x10 -_020DC1F4: - ldr r0, _020DC264 ; =0x021D6B20 - cmp r4, #0x0 - ldr r0, [r0, #0x0] - sub r4, r4, #0x1 - ldrh r0, [r0, #0x8] - mov r0, r7, lsl r0 - add r0, r0, #0xa000000 - add r1, r6, r0 - beq _020DC22C -_020DC218: - ldrb r0, [r1], #0x1 - cmp r4, #0x0 - sub r4, r4, #0x1 - strb r0, [r5], #0x1 - bne _020DC218 -_020DC22C: - ldr r2, _020DC260 ; =0x04000204 - ldr r0, _020DC25C ; =0x021D6B0C - ldrh r1, [r2, #0x0] - bic r1, r1, #0x3 - orr r1, r1, r8 - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge2 - mov r0, #0x0 - add sp, sp, #0x28 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020DC25C: .word 0x021D6B0C -_020DC260: .word 0x04000204 -_020DC264: .word 0x021D6B20 - - arm_func_start CTRDGi_PollingSR1MCOMMON -CTRDGi_PollingSR1MCOMMON: ; 0x020DC268 - stmdb sp!, {r4-r8,lr} - mov r8, r0 - mov r7, r1 - mov r6, r2 - mov r5, #0x0 - bl StartFlashTimer - ldr r4, _020DC318 ; =0x021D6B10 -_020DC284: - bl CheckFlashTimer - mov r0, r7 - bl CTRDGi_ReadSrFunc - cmp r0, r6 - beq _020DC300 - ands r0, r0, #0x20 - beq _020DC2CC - mov r0, r7 - bl CTRDGi_ReadSrFunc -_020DC2A8: - .byte 0x00, 0x00, 0x56, 0xE1, 0x13, 0x00, 0x00, 0x0A - .byte 0x0A, 0x0A, 0x88, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x5C, 0x10, 0x9F, 0xE5, 0xF0, 0x20, 0xA0, 0xE3 - .byte 0x00, 0x20, 0xC1, 0xE5, 0x20, 0x58, 0xA0, 0xE1, 0x0C, 0x00, 0x00, 0xEA -_020DC2CC: - ldrh r0, [r4, #0x0] - cmp r0, #0x0 - beq _020DC284 - mov r0, r7 - bl CTRDGi_ReadSrFunc -_020DC2E0: - .byte 0x00, 0x00, 0x56, 0xE1, 0x05, 0x00, 0x00, 0x0A, 0x03, 0x09, 0x88, 0xE3, 0x00, 0x08, 0xA0, 0xE1 - .byte 0x24, 0x10, 0x9F, 0xE5, 0xF0, 0x20, 0xA0, 0xE3, 0x00, 0x20, 0xC1, 0xE5, 0x20, 0x58, 0xA0, 0xE1 -_020DC300: - bl CTRDG_IsExisting -_020DC304: - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x5A, 0xA0, 0x03, 0x05, 0x00, 0xA0, 0xE1 - .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020DC318: .word 0x021D6B10 -_020DC31C: - .byte 0x55, 0x55, 0x00, 0x0A - - arm_func_start CTRDGi_PollingSR512kCOMMON -CTRDGi_PollingSR512kCOMMON: ; 0x020DC320 - stmdb sp!, {r4-r8,lr} - mov r4, r0 - mov r8, r1 - mov r7, r2 - mov r6, #0x0 - bl StartFlashTimer - ldr r5, _020DC3A8 ; =0x021D6B10 -_020DC33C: - mov r0, r8 - bl CTRDGi_ReadSrFunc - cmp r0, r7 - beq _020DC390 - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - beq _020DC33C - mov r0, r8 - bl CTRDGi_ReadSrFunc -_020DC360: - .byte 0x00, 0x00, 0x57, 0xE1, 0x09, 0x00, 0x00, 0x0A, 0x3C, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5 - .byte 0xB8, 0x01, 0xD0, 0xE1, 0xC2, 0x00, 0x50, 0xE3, 0x30, 0x00, 0x9F, 0x05, 0xF0, 0x10, 0xA0, 0x03 - .byte 0x00, 0x10, 0xC0, 0x05, 0x03, 0x09, 0x84, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x68, 0xA0, 0xE1 -_020DC390: - bl CTRDG_IsExisting -_020DC394: - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x6A, 0xA0, 0x03, 0x06, 0x00, 0xA0, 0xE1 - .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020DC3A8: .word 0x021D6B10 -_020DC3AC: - .byte 0x20, 0x6B, 0x1D, 0x02 - .byte 0x55, 0x55, 0x00, 0x0A - - arm_func_start CTRDGi_ReadSrFunc -CTRDGi_ReadSrFunc: - ldrb r0, [r0, #0x0] - bx lr - - arm_func_start CheckFlashTimer -CheckFlashTimer: ; 0x020DC3BC - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl OS_GetTick - ldr r3, _020DC420 ; =0x021D6B44 - ldr r2, _020DC424 ; =0x000082EA - ldr r12, [r3, #0x0] - ldr r3, [r3, #0x4] - subs r12, r0, r12 - sbc r0, r1, r3 - mov r1, r0, lsl #0x6 - orr r1, r1, r12, lsr #0x1a - mov r0, r12, lsl #0x6 - mov r3, #0x0 - bl _ll_udiv - ldr r2, _020DC428 ; =0x021D6B3C - ldr r3, [r2, #0x4] - ldr r2, [r2, #0x0] - cmp r3, r1 - cmpeq r2, r0 - ldrls r0, _020DC42C ; =0x021D6B10 - movls r1, #0x1 - strlsh r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC420: .word 0x021D6B44 -_020DC424: .word 0x000082EA -_020DC428: .word 0x021D6B3C -_020DC42C: .word 0x021D6B10 - - arm_func_start StartFlashTimer -StartFlashTimer: ; 0x020DC430 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020DC47C ; =0x021D6B28 - ldr r2, _020DC480 ; =0x021D6B10 - mov r3, #0x0 - ldr r1, [r1, #0x0] - strh r3, [r2, #0x0] - mov r0, r0, lsl #0x1 - ldrh r1, [r1, r0] - ldr r0, _020DC484 ; =0x021D6B3C - str r1, [r0, #0x0] - str r3, [r0, #0x4] - bl OS_GetTick - ldr r2, _020DC488 ; =0x021D6B44 - str r0, [r2, #0x0] - str r1, [r2, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC47C: .word 0x021D6B28 -_020DC480: .word 0x021D6B10 -_020DC484: .word 0x021D6B3C -_020DC488: .word 0x021D6B44 - - arm_func_start CTRDGi_ReadFlashID -CTRDGi_ReadFlashID: ; 0x020DC48C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r5, _020DC590 ; =0x04000208 - mov r0, #0x0 - ldrh r2, [r5, #0x0] - ldr r1, _020DC594 ; =0x021D6B38 - ldr r4, _020DC598 ; =0x0A005555 - strh r0, [r5, #0x0] - str r2, [r1, #0x0] - mov r3, #0xaa - ldr r2, _020DC59C ; =0x0A002AAA - strb r3, [r4, #0x0] - mov r3, #0x55 - strb r3, [r2, #0x0] - mov r2, #0x90 - strb r2, [r4, #0x0] - ldrh r2, [r5, #0x0] - ldr r1, [r1, #0x0] - strh r1, [r5, #0x0] - bl StartFlashTimer - ldr r4, _020DC5A0 ; =0x021D6B10 - ldrh r0, [r4, #0x0] - cmp r0, #0x0 - bne _020DC4FC -_020DC4EC: - bl CheckFlashTimer - ldrh r0, [r4, #0x0] - cmp r0, #0x0 - beq _020DC4EC -_020DC4FC: - ldr r0, _020DC5A4 ; =0x0A000001 - bl CTRDGi_ReadSrFunc - mov r4, r0, lsl #0x18 - mov r0, #0xa000000 - bl CTRDGi_ReadSrFunc - ldr ip, _020DC590 ; =0x04000208 - orr r4, r0, r4, lsr #0x10 - ldrh r2, [r12, #0x0] - mov r0, #0x0 - ldr r1, _020DC594 ; =0x021D6B38 - strh r0, [r12, #0x0] - ldr r5, _020DC598 ; =0x0A005555 - str r2, [r1, #0x0] - mov r3, #0xaa - ldr r2, _020DC59C ; =0x0A002AAA - strb r3, [r5, #0x0] - mov r3, #0x55 - strb r3, [r2, #0x0] - mov r2, #0xf0 - strb r2, [r5, #0x0] - strb r2, [r5, #0x0] - ldrh r2, [r12, #0x0] - ldr r1, [r1, #0x0] - strh r1, [r12, #0x0] - bl StartFlashTimer - ldr r5, _020DC5A0 ; =0x021D6B10 - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - bne _020DC580 -_020DC570: - bl CheckFlashTimer - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - beq _020DC570 -_020DC580: - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DC590: .word 0x04000208 -_020DC594: .word 0x021D6B38 -_020DC598: .word 0x0A005555 -_020DC59C: .word 0x0A002AAA -_020DC5A0: .word 0x021D6B10 -_020DC5A4: .word 0x0A000001 - - arm_func_start CTRDGi_SetFlashBankMx -CTRDGi_SetFlashBankMx: ; 0x020DC5A8 - ldr r3, _020DC5D4 ; =0x0A005555 - mov r2, #0xaa - ldr r1, _020DC5D8 ; =0x0A002AAA - strb r2, [r3, #0x0] - mov r2, #0x55 - strb r2, [r1, #0x0] - mov r1, #0xb0 - strb r1, [r3, #0x0] - mov r1, #0xa000000 - strb r0, [r1, #0x0] - bx lr - .balign 4 -_020DC5D4: .word 0x0A005555 -_020DC5D8: .word 0x0A002AAA - - arm_func_start CTRDGi_WriteFlashSectorAsyncAT -CTRDGi_WriteFlashSectorAsyncAT: ; 0x020DC5DC - stmdb sp!, {lr} - sub sp, sp, #0x24 - str r1, [sp, #0xc] - strh r0, [sp, #0x20] - ldr r1, _020DC604 ; =CTRDGi_WriteFlashSectorCoreAT - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC604: .word CTRDGi_WriteFlashSectorCoreAT - - arm_func_start CTRDGi_EraseFlashSectorAsyncAT -CTRDGi_EraseFlashSectorAsyncAT: ; 0x020DC608 - stmdb sp!, {lr} - sub sp, sp, #0x24 - mov r2, r1 - strh r0, [sp, #0x20] - ldr r1, _020DC630 ; =CTRDGi_EraseFlashSectorCoreAT - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC630: .word CTRDGi_EraseFlashSectorCoreAT - - arm_func_start CTRDGi_WriteFlashSectorAT -CTRDGi_WriteFlashSectorAT: ; 0x020DC634 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0xc] - bl CTRDGi_WriteFlashSectorCoreAT - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashSectorAT -CTRDGi_EraseFlashSectorAT: - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - bl CTRDGi_EraseFlashSectorCoreAT - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_WriteFlash4KBAsyncAT -CTRDGi_WriteFlash4KBAsyncAT: ; 0x020DC688 - stmdb sp!, {lr} - sub sp, sp, #0x24 - str r1, [sp, #0xc] - strh r0, [sp, #0x20] - ldr r1, _020DC6B0 ; =CTRDGi_WriteFlash4KBCoreAT - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC6B0: .word CTRDGi_WriteFlash4KBCoreAT - - arm_func_start CTRDGi_EraseFlash4KBAsyncAT -CTRDGi_EraseFlash4KBAsyncAT: ; 0x020DC6B4 - stmdb sp!, {lr} - sub sp, sp, #0x24 - mov r2, r1 - strh r0, [sp, #0x20] - ldr r1, _020DC6DC ; =CTRDGi_EraseFlash4KBCoreAT - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC6DC: .word CTRDGi_EraseFlash4KBCoreAT - - arm_func_start CTRDGi_EraseFlashChipAsyncAT -CTRDGi_EraseFlashChipAsyncAT: ; 0x020DC6E0 - stmdb sp!, {lr} - sub sp, sp, #0x24 - ldr r1, _020DC704 ; =CTRDGi_EraseFlashChipCoreAT - mov r2, r0 - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC704: .word CTRDGi_EraseFlashChipCoreAT - - arm_func_start CTRDGi_WriteFlash4KBAT -CTRDGi_WriteFlash4KBAT: ; 0x020DC708 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0xc] - bl CTRDGi_WriteFlash4KBCoreAT - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlash4KBAT -CTRDGi_EraseFlash4KBAT: ; 0x020DC734 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - bl CTRDGi_EraseFlash4KBCoreAT - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashChipAT -CTRDGi_EraseFlashChipAT: ; 0x020DC75C - stmdb sp!, {lr} - sub sp, sp, #0x24 - add r0, sp, #0x0 - bl CTRDGi_EraseFlashChipCoreAT - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_WriteFlash4KBCoreAT -CTRDGi_WriteFlash4KBCoreAT: ; 0x020DC780 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x24 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, [r5, #0x0] - str r0, [r4, #0x0] - ldrh r0, [sp, #0x20] - ldr r7, [sp, #0xc] - cmp r0, #0x10 - addcs sp, sp, #0x24 - ldrhs r0, _020DC85C ; =0x000080FF - ldmcsia sp!, {r4-r9,lr} - bxcs lr - ldr r1, _020DC860 ; =0x0210400C - mov r0, r0, lsl #0x15 - ldr r1, [r1, #0x24] - ldr r4, _020DC864 ; =0x021D6B08 - mov r8, r0, lsr #0x10 - strh r1, [r4, #0x0] - ldrh r0, [r4, #0x0] - cmp r0, #0x0 - beq _020DC84C - ldr r0, _020DC868 ; =0x02104048 - ldr r6, [r0, #0x24] - mov r5, #0x2 -_020DC7F4: - mov r9, r5 -_020DC7F8: - mov r0, r8 - mov r1, r7 - bl CTRDGi_WriteFlashSectorAT - movs r12, r0 - beq _020DC81C - sub r0, r9, #0x1 - mov r0, r0, lsl #0x10 - movs r9, r0, lsr #0x10 - bne _020DC7F8 -_020DC81C: - cmp r12, #0x0 - bne _020DC84C - ldrh r1, [r4, #0x0] - add r0, r8, #0x1 - mov r0, r0, lsl #0x10 - sub r1, r1, r6 - strh r1, [r4, #0x0] - ldrh r1, [r4, #0x0] - add r7, r7, r6 - mov r8, r0, lsr #0x10 - cmp r1, #0x0 - bne _020DC7F4 -_020DC84C: - mov r0, r12 - add sp, sp, #0x24 - ldmia sp!, {r4-r9,lr} - bx lr - .balign 4 -_020DC85C: .word 0x000080FF -_020DC860: .word 0x0210400C -_020DC864: .word 0x021D6B08 -_020DC868: .word 0x02104048 - - arm_func_start CTRDGi_WriteFlashSectorCoreAT -CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x24 - mov r5, r0 - add r4, sp, #0x0 - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, _020DC984 ; =0x021D6B0C - ldr r1, [r5, #0x0] - ldrh r0, [r0, #0x0] - str r1, [r4, #0x0] - ldr r4, [sp, #0xc] - bl OS_LockCartridge - ldr r5, _020DC988 ; =0x04000204 - ldr r1, _020DC98C ; =0x021D6B20 - ldrh r0, [r5, #0x0] - ldr r1, [r1, #0x0] - ldrh r2, [r5, #0x0] - ldr r3, [r1, #0x10] - ldr r1, _020DC990 ; =0x02104048 - bic r2, r2, #0x3 - orr r2, r2, r3 - strh r2, [r5, #0x0] - ldr r5, _020DC994 ; =0x04000208 - ldrh lr, [sp, #0x20] - ldrh r12, [r1, #0x28] - ldrh r2, [r5, #0x0] - mov r3, #0x0 - mov lr, lr, lsl r12 - strh r3, [r5, #0x0] - ldr ip, _020DC998 ; =0x0A005555 - mov r5, #0xaa - strb r5, [r12, #0x0] - ldr r3, _020DC99C ; =0x0A002AAA - mov r5, #0x55 - strb r5, [r3, #0x0] - mov r3, #0xa0 - strb r3, [r12, #0x0] - ldr r3, [r1, #0x24] - and r5, r0, #0x3 - cmp r3, #0x0 - add r1, lr, #0xa000000 - beq _020DC92C -_020DC91C: - ldrb r0, [r4], #0x1 - subs r3, r3, #0x1 - strb r0, [r1], #0x1 - bne _020DC91C -_020DC92C: - ldr ip, _020DC994 ; =0x04000208 - ldr r3, _020DC9A0 ; =0x021D6B24 - ldrh r0, [r12, #0x0] - sub r1, r1, #0x1 - mov r0, #0x1 - strh r2, [r12, #0x0] - ldrb r2, [r4, #-0x1] - ldr r3, [r3, #0x0] - blx r3 - ldr r3, _020DC988 ; =0x04000204 - ldr r1, _020DC984 ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r5 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x24 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DC984: .word 0x021D6B0C -_020DC988: .word 0x04000204 -_020DC98C: .word 0x021D6B20 -_020DC990: .word 0x02104048 -_020DC994: .word 0x04000208 -_020DC998: .word 0x0A005555 -_020DC99C: .word 0x0A002AAA -_020DC9A0: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlash4KBCoreAT -CTRDGi_EraseFlash4KBCoreAT: ; 0x020DC9A4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x24 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, [r5, #0x0] - str r0, [r4, #0x0] - ldrh r0, [sp, #0x20] - cmp r0, #0x10 - addcs sp, sp, #0x24 - ldrhs r0, _020DCA54 ; =0x000080FF - ldmcsia sp!, {r4-r7,lr} - bxcs lr - mov r0, r0, lsl #0x15 - mov r5, r0, lsr #0x10 - mov r6, #0x0 - mov r4, #0x2 - mov r7, r4 - mov r0, r5 - bl CTRDGi_EraseFlashSectorAT -_020DCA00: - .byte 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A, 0x01, 0x10, 0x47, 0xE2, 0x01, 0x18, 0xA0, 0xE1 - .byte 0x21, 0x78, 0xB0, 0xE1, 0xF7, 0xFF, 0xFF, 0x1A, 0x01, 0x10, 0x85, 0xE2, 0x01, 0x18, 0xA0, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x21, 0x58, 0xA0, 0xE1, 0x24, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x01, 0x10, 0x86, 0xE2, 0x01, 0x18, 0xA0, 0xE1, 0x21, 0x68, 0xA0, 0xE1 - .byte 0x20, 0x00, 0x56, 0xE3, 0xEA, 0xFF, 0xFF, 0x3A, 0x24, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 -_020DCA54: .word 0x000080FF - - arm_func_start CTRDGi_EraseFlashSectorCoreAT -CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x24 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, [r5, #0x0] - ldr r1, _020DCB80 ; =0x02104048 - str r0, [r4, #0x0] - ldr r0, _020DCB84 ; =0x021D6B0C - ldrh r2, [sp, #0x20] - ldrh r1, [r1, #0x28] - ldrh r0, [r0, #0x0] - mov r1, r2, lsl r1 - add r5, r1, #0xa000000 - bl OS_LockCartridge - ldr r4, _020DCB88 ; =0x04000204 - ldr r1, _020DCB8C ; =0x021D6B20 - ldrh r0, [r4, #0x0] - ldr r2, [r1, #0x0] - ldrh r1, [r4, #0x0] - ldr r2, [r2, #0x10] - ldr r3, _020DCB90 ; =0x04000208 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r4, #0x0] - ldrh r2, [r3, #0x0] - mov r1, #0x0 - ldr r4, _020DCB94 ; =0x0A005555 - strh r1, [r3, #0x0] - mov r3, #0xaa - strb r3, [r4, #0x0] - ldr r1, _020DCB98 ; =0x0A002AAA - mov r3, #0x55 - strb r3, [r1, #0x0] - mov r3, #0xa0 - strb r3, [r4, #0x0] - ldr r1, _020DCB80 ; =0x02104048 - and r4, r0, #0x3 - ldr r1, [r1, #0x24] - cmp r1, #0x0 - beq _020DCB18 - mov r0, #0xff -_020DCB0C: - strb r0, [r5], #0x1 - subs r1, r1, #0x1 - bne _020DCB0C -_020DCB18: - ldr ip, _020DCB90 ; =0x04000208 - ldr r3, _020DCB9C ; =0x021D6B24 - ldrh r0, [r12, #0x0] - sub r1, r5, #0x1 - strh r2, [r12, #0x0] - ldr r3, [r3, #0x0] - mov r0, #0x1 - mov r2, #0xff - blx r3 - ldr r2, _020DCB88 ; =0x04000204 - movs r5, r0 - ldrh r1, [r2, #0x0] - andne r0, r5, #0xff00 - orrne r0, r0, #0x2 - movne r0, r0, lsl #0x10 - bic r1, r1, #0x3 - movne r5, r0, lsr #0x10 - orr r1, r1, r4 - ldr r0, _020DCB84 ; =0x021D6B0C - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge2 - mov r0, r5 - add sp, sp, #0x24 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DCB80: .word 0x02104048 -_020DCB84: .word 0x021D6B0C -_020DCB88: .word 0x04000204 -_020DCB8C: .word 0x021D6B20 -_020DCB90: .word 0x04000208 -_020DCB94: .word 0x0A005555 -_020DCB98: .word 0x0A002AAA -_020DCB9C: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlashChipCoreAT -CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020DCC7C ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r4, _020DCC80 ; =0x04000204 - ldr r0, _020DCC84 ; =0x021D6B20 - ldrh r3, [r4, #0x0] - ldr r0, [r0, #0x0] - ldrh r1, [r4, #0x0] - ldr r2, [r0, #0x10] - ldr r0, _020DCC88 ; =0x04000208 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r4, #0x0] - ldrh r4, [r0, #0x0] - mov r2, #0x0 - ldr r1, _020DCC8C ; =0x021D6B38 - strh r2, [r0, #0x0] - ldr lr, _020DCC90 ; =0x0A005555 - str r4, [r1, #0x0] - mov r5, #0xaa - ldr r4, _020DCC94 ; =0x0A002AAA - strb r5, [lr, #0x0] - mov r12, #0x55 - strb r12, [r4, #0x0] - mov r2, #0x80 - strb r2, [lr, #0x0] - strb r5, [lr, #0x0] - strb r12, [r4, #0x0] - mov r2, #0x10 - strb r2, [lr, #0x0] - ldrh r2, [r0, #0x0] - ldr r2, [r1, #0x0] - ldr r1, _020DCC98 ; =0x021D6B24 - strh r2, [r0, #0x0] - ldr r4, [r1, #0x0] - mov r0, #0x3 - mov r1, #0xa000000 - mov r2, #0xff - and r5, r3, #0x3 - blx r4 - ldr r3, _020DCC80 ; =0x04000204 - ldr r1, _020DCC7C ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r5 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DCC7C: .word 0x021D6B0C -_020DCC80: .word 0x04000204 -_020DCC84: .word 0x021D6B20 -_020DCC88: .word 0x04000208 -_020DCC8C: .word 0x021D6B38 -_020DCC90: .word 0x0A005555 -_020DCC94: .word 0x0A002AAA -_020DCC98: .word 0x021D6B24 - - arm_func_start CTRDGi_WriteFlashSectorAsyncLE -CTRDGi_WriteFlashSectorAsyncLE: ; 0x020DCC9C - stmdb sp!, {lr} - sub sp, sp, #0x24 - str r1, [sp, #0xc] - strh r0, [sp, #0x20] - ldr r1, _020DCCC4 ; =CTRDGi_WriteFlashSectorCoreLE - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DCCC4: .word CTRDGi_WriteFlashSectorCoreLE - - arm_func_start CTRDGi_EraseFlashSectorAsyncLE -CTRDGi_EraseFlashSectorAsyncLE: ; 0x020DCCC8 - stmdb sp!, {lr} - sub sp, sp, #0x24 - mov r2, r1 - strh r0, [sp, #0x20] - ldr r1, _020DCCF0 ; =CTRDGi_EraseFlashSectorCoreLE - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DCCF0: .word CTRDGi_EraseFlashSectorCoreLE - - arm_func_start CTRDGi_EraseFlashChipAsyncLE -CTRDGi_EraseFlashChipAsyncLE: ; 0x020DCCF4 - stmdb sp!, {lr} - sub sp, sp, #0x24 - ldr r1, _020DCD18 ; =CTRDGi_EraseFlashChipCoreLE - mov r2, r0 - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DCD18: .word CTRDGi_EraseFlashChipCoreLE - - arm_func_start CTRDGi_WriteFlashSectorLE -CTRDGi_WriteFlashSectorLE: ; 0x020DCD1C - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0xc] - bl CTRDGi_WriteFlashSectorCoreLE - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashSectorLE -CTRDGi_EraseFlashSectorLE: ; 0x020DCD48 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - bl CTRDGi_EraseFlashSectorCoreLE - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashChipLE -CTRDGi_EraseFlashChipLE: ; 0x020DCD70 - stmdb sp!, {lr} - sub sp, sp, #0x24 - add r0, sp, #0x0 - bl CTRDGi_EraseFlashChipCoreLE - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_VerifyFlashErase -CTRDGi_VerifyFlashErase: ; 0x020DCD94 - stmdb sp!, {r4-r6,lr} - ldr r2, _020DCE14 ; =0x021D6B0C - mov r4, r0 - ldrh r0, [r2, #0x0] - mov r5, r1 - bl OS_LockCartridge - ldr ip, _020DCE18 ; =0x04000204 - ldr r0, _020DCE1C ; =0x021D6B20 - ldrh r3, [r12, #0x0] - ldr r0, [r0, #0x0] - ldrh r1, [r12, #0x0] - ldr r2, [r0, #0x10] - mov r0, r4 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r12, #0x0] - and r6, r3, #0x3 - mov r4, #0x0 - blx r5 - cmp r0, #0x0 - ldr r2, _020DCE18 ; =0x04000204 - ldr r0, _020DCE14 ; =0x021D6B0C - ldrh r1, [r2, #0x0] - ldrne r4, _020DCE20 ; =0x00008004 - bic r1, r1, #0x3 - orr r1, r1, r6 - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020DCE14: .word 0x021D6B0C -_020DCE18: .word 0x04000204 -_020DCE1C: .word 0x021D6B20 -_020DCE20: .word 0x00008004 - - arm_func_start CTRDGi_VerifyFlashCoreFF -CTRDGi_VerifyFlashCoreFF: ; 0x020DCE24 - ldr r1, _020DCE54 ; =0x021D6B20 - ldr r1, [r1, #0x0] - ldr r2, [r1, #0x4] - cmp r2, #0x0 - beq _020DCE4C -_020DCE38: - ldrb r1, [r0], #0x1 - cmp r1, #0xff - bne _020DCE4C - subs r2, r2, #0x1 - bne _020DCE38 -_020DCE4C: - mov r0, r2 - bx lr - .balign 4 -_020DCE54: .word 0x021D6B20 - - arm_func_start CTRDGi_WriteFlashSectorCoreLE -CTRDGi_WriteFlashSectorCoreLE: ; 0x020DCE58 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x24 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, [r5, #0x0] - str r0, [r4, #0x0] - ldrh r7, [sp, #0x20] - ldr r6, [sp, #0xc] - cmp r7, #0x10 - addcs sp, sp, #0x24 - ldrhs r0, _020DD018 ; =0x000080FF - ldmcsia sp!, {r4-r9,lr} - bxcs lr - ldr r0, _020DD01C ; =0x021D6B20 - mov r9, #0x0 - ldr r0, [r0, #0x0] - ldrh r0, [r0, #0x8] - mov r0, r7, lsl r0 - add r4, r0, #0xa000000 - ldr r5, _020DD020 ; =CTRDGi_VerifyFlashCoreFF -_020DCEB8: - mov r0, r7 - bl CTRDGi_EraseFlashSectorLE - movs r8, r0 - bne _020DCEE0 - mov r0, r4 - mov r1, r5 - bl CTRDGi_VerifyFlashErase - mov r0, r0, lsl #0x10 - movs r8, r0, lsr #0x10 - beq _020DCF04 -_020DCEE0: - add r0, r9, #0x1 - mov r0, r0, lsl #0x10 - cmp r9, #0x50 - mov r9, r0, lsr #0x10 - bne _020DCEB8 - add sp, sp, #0x24 - mov r0, r8 - ldmia sp!, {r4-r9,lr} - bx lr -_020DCF04: - mov r5, #0x1 - cmp r9, #0x0 - movne r5, #0x6 - cmp r5, #0x1 - mov r9, #0x1 - blo _020DCF38 -_020DCF1C: - mov r0, r7 - bl CTRDGi_EraseFlashSectorLE - add r0, r9, #0x1 - mov r0, r0, lsl #0x10 - mov r9, r0, lsr #0x10 - cmp r9, r5 - bls _020DCF1C -_020DCF38: - ldr r0, _020DD024 ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r5, _020DD028 ; =0x04000204 - ldr r1, _020DD01C ; =0x021D6B20 - ldrh r0, [r5, #0x0] - ldr r3, [r1, #0x0] - ldrh r2, [r5, #0x0] - ldr r3, [r3, #0x10] - ldr r7, _020DD02C ; =0x021D6B08 - bic r2, r2, #0x3 - orr r2, r2, r3 - strh r2, [r5, #0x0] - ldr r1, [r1, #0x0] - ldr sb, _020DD030 ; =0x04000208 - ldr r1, [r1, #0x4] - mov r2, #0x0 - strh r1, [r7, #0x0] - ldrh r3, [r9, #0x0] - ldr r1, _020DD034 ; =0x021D6B38 - and r5, r0, #0x3 - strh r2, [r9, #0x0] - ldrh r0, [r7, #0x0] - str r3, [r1, #0x0] - cmp r0, #0x0 - beq _020DCFD4 -_020DCFA0: - mov r0, r6 - mov r1, r4 - bl CTRDGi_ProgramFlashByteLE - movs r8, r0 - bne _020DCFD4 - ldrh r0, [r7, #0x0] - add r6, r6, #0x1 - add r4, r4, #0x1 - sub r0, r0, #0x1 - strh r0, [r7, #0x0] - ldrh r0, [r7, #0x0] - cmp r0, #0x0 - bne _020DCFA0 -_020DCFD4: - ldr r3, _020DD030 ; =0x04000208 - ldr r0, _020DD034 ; =0x021D6B38 - ldrh r1, [r3, #0x0] - ldr r0, [r0, #0x0] - ldr r2, _020DD028 ; =0x04000204 - strh r0, [r3, #0x0] - ldrh r1, [r2, #0x0] - ldr r0, _020DD024 ; =0x021D6B0C - bic r1, r1, #0x3 - orr r1, r1, r5 - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge2 - mov r0, r8 - add sp, sp, #0x24 - ldmia sp!, {r4-r9,lr} - bx lr - .balign 4 -_020DD018: .word 0x000080FF -_020DD01C: .word 0x021D6B20 -_020DD020: .word CTRDGi_VerifyFlashCoreFF -_020DD024: .word 0x021D6B0C -_020DD028: .word 0x04000204 -_020DD02C: .word 0x021D6B08 -_020DD030: .word 0x04000208 -_020DD034: .word 0x021D6B38 - - arm_func_start CTRDGi_ProgramFlashByteLE -CTRDGi_ProgramFlashByteLE: ; 0x020DD038 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr ip, _020DD08C ; =0x0A005555 - mov r3, #0xaa - ldr r2, _020DD090 ; =0x0A002AAA - strb r3, [r12, #0x0] - mov r3, #0x55 - mov lr, r0 - strb r3, [r2, #0x0] - mov r0, #0xa0 - strb r0, [r12, #0x0] - ldrb r2, [lr, #0x0] - ldr r3, _020DD094 ; =0x021D6B24 - mov r0, #0x1 - strb r2, [r1, #0x0] - ldrb r2, [lr, #0x0] - ldr r3, [r3, #0x0] - blx r3 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DD08C: .word 0x0A005555 -_020DD090: .word 0x0A002AAA -_020DD094: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlashSectorCoreLE -CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x28 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, [r5, #0x0] - str r0, [r4, #0x0] - ldrh r4, [sp, #0x20] - cmp r4, #0x10 - addcs sp, sp, #0x28 - ldrhs r0, _020DD1B8 ; =0x000080FF - ldmcsia sp!, {r4-r6,lr} - bxcs lr - ldr r0, _020DD1BC ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r6, _020DD1C0 ; =0x04000204 - ldr r1, _020DD1C4 ; =0x021D6B20 - ldrh r3, [r6, #0x0] - ldr r0, [r1, #0x0] - ldrh r2, [r6, #0x0] - ldr r5, [r0, #0x10] - ldr r0, _020DD1C8 ; =0x04000208 - bic r2, r2, #0x3 - orr r2, r2, r5 - strh r2, [r6, #0x0] - ldr r1, [r1, #0x0] - ldrh r5, [r0, #0x0] - ldrh r12, [r1, #0x8] - mov r1, #0x0 - ldr r2, _020DD1CC ; =0x021D6B38 - strh r1, [r0, #0x0] - mov r6, r4, lsl r12 - ldr lr, _020DD1D0 ; =0x0A005555 - str r5, [r2, #0x0] - mov r5, #0xaa - ldr r4, _020DD1D4 ; =0x0A002AAA - strb r5, [lr, #0x0] - mov r12, #0x55 - strb r12, [r4, #0x0] - mov r1, #0x80 - strb r1, [lr, #0x0] - strb r5, [lr, #0x0] - strb r12, [r4, #0x0] - add r1, r6, #0xa000000 - mov r4, #0x30 - strb r4, [r1, #0x0] - ldrh r4, [r0, #0x0] - ldr r4, [r2, #0x0] - ldr r2, _020DD1D8 ; =0x021D6B24 - strh r4, [r0, #0x0] - ldr r4, [r2, #0x0] - mov r0, #0x2 - mov r2, #0xff - and r5, r3, #0x3 - blx r4 - ldr r3, _020DD1C0 ; =0x04000204 - ldr r1, _020DD1BC ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r5 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x28 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020DD1B8: .word 0x000080FF -_020DD1BC: .word 0x021D6B0C -_020DD1C0: .word 0x04000204 -_020DD1C4: .word 0x021D6B20 -_020DD1C8: .word 0x04000208 -_020DD1CC: .word 0x021D6B38 -_020DD1D0: .word 0x0A005555 -_020DD1D4: .word 0x0A002AAA -_020DD1D8: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlashChipCoreLE -CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020DD2B8 ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r4, _020DD2BC ; =0x04000204 - ldr r0, _020DD2C0 ; =0x021D6B20 - ldrh r3, [r4, #0x0] - ldr r0, [r0, #0x0] - ldrh r1, [r4, #0x0] - ldr r2, [r0, #0x10] - ldr r0, _020DD2C4 ; =0x04000208 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r4, #0x0] - ldrh r4, [r0, #0x0] - mov r2, #0x0 - ldr r1, _020DD2C8 ; =0x021D6B38 - strh r2, [r0, #0x0] - ldr lr, _020DD2CC ; =0x0A005555 - str r4, [r1, #0x0] - mov r5, #0xaa - ldr r4, _020DD2D0 ; =0x0A002AAA - strb r5, [lr, #0x0] - mov r12, #0x55 - strb r12, [r4, #0x0] - mov r2, #0x80 - strb r2, [lr, #0x0] - strb r5, [lr, #0x0] - strb r12, [r4, #0x0] - mov r2, #0x10 - strb r2, [lr, #0x0] - ldrh r2, [r0, #0x0] - ldr r2, [r1, #0x0] - ldr r1, _020DD2D4 ; =0x021D6B24 - strh r2, [r0, #0x0] - ldr r4, [r1, #0x0] - mov r0, #0x3 - mov r1, #0xa000000 - mov r2, #0xff - and r5, r3, #0x3 - blx r4 - ldr r3, _020DD2BC ; =0x04000204 - ldr r1, _020DD2B8 ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r5 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DD2B8: .word 0x021D6B0C -_020DD2BC: .word 0x04000204 -_020DD2C0: .word 0x021D6B20 -_020DD2C4: .word 0x04000208 -_020DD2C8: .word 0x021D6B38 -_020DD2CC: .word 0x0A005555 -_020DD2D0: .word 0x0A002AAA -_020DD2D4: .word 0x021D6B24 - - arm_func_start CTRDGi_WriteFlashSectorAsyncMX -CTRDGi_WriteFlashSectorAsyncMX: ; 0x020DD2D8 - stmdb sp!, {lr} - sub sp, sp, #0x24 - str r1, [sp, #0xc] - strh r0, [sp, #0x20] - ldr r1, _020DD300 ; =CTRDGi_WriteFlashSectorCoreMX - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DD300: .word CTRDGi_WriteFlashSectorCoreMX - - arm_func_start CTRDGi_EraseFlashSectorAsyncMX -CTRDGi_EraseFlashSectorAsyncMX: ; 0x020DD304 - stmdb sp!, {lr} - sub sp, sp, #0x24 - mov r2, r1 - strh r0, [sp, #0x20] - ldr r1, _020DD32C ; =CTRDGi_EraseFlashSectorCoreMX - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DD32C: .word CTRDGi_EraseFlashSectorCoreMX - - arm_func_start CTRDGi_EraseFlashChipAsyncMX -CTRDGi_EraseFlashChipAsyncMX: ; 0x020DD330 - stmdb sp!, {lr} - sub sp, sp, #0x24 - ldr r1, _020DD354 ; =CTRDGi_EraseFlashChipCoreMX - mov r2, r0 - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DD354: .word CTRDGi_EraseFlashChipCoreMX - - arm_func_start CTRDGi_WriteFlashSectorMX -CTRDGi_WriteFlashSectorMX: ; 0x020DD358 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0xc] - bl CTRDGi_WriteFlashSectorCoreMX - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashSectorMX -CTRDGi_EraseFlashSectorMX: ; 0x020DD384 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - bl CTRDGi_EraseFlashSectorCoreMX - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashChipMX -CTRDGi_EraseFlashChipMX: ; 0x020DD3AC - stmdb sp!, {lr} - sub sp, sp, #0x24 - add r0, sp, #0x0 - bl CTRDGi_EraseFlashChipCoreMX - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_WriteFlashSectorCoreMX -CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x28 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, _020DD540 ; =0x021D6B20 - ldr r1, [r5, #0x0] - ldr r0, [r0, #0x0] - str r1, [r4, #0x0] - ldrh r5, [sp, #0x20] - ldrh r0, [r0, #0xa] - ldr r4, [sp, #0xc] - cmp r5, r0 - addcs sp, sp, #0x28 - ldrhs r0, _020DD544 ; =0x000080FF - ldmcsia sp!, {r4-r8,lr} - bxcs lr - mov r0, r5 - bl CTRDGi_EraseFlashSectorMX - movs r6, r0 - addne sp, sp, #0x28 - ldmneia sp!, {r4-r8,lr} - bxne lr - ldr r0, _020DD548 ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r7, _020DD54C ; =0x04000204 - ldr r0, _020DD540 ; =0x021D6B20 - ldrh r3, [r7, #0x0] - ldr r2, [r0, #0x0] - ldrh r1, [r7, #0x0] - mov r0, r5, lsl #0xc - ldr r2, [r2, #0x10] - bic r1, r1, #0x3 - orr r1, r1, r2 - mov r0, r0, lsr #0x10 - strh r1, [r7, #0x0] - and r7, r3, #0x3 - bl CTRDGi_SetFlashBankMx - ldr r0, _020DD540 ; =0x021D6B20 - and r1, r5, #0xf - ldr r3, [r0, #0x0] - mov r0, r1, lsl #0x10 - ldr r2, [r3, #0x4] - ldr r8, _020DD550 ; =0x021D6B08 - ldr r1, _020DD554 ; =0x04000208 - strh r2, [r8, #0x0] - ldrh r3, [r3, #0x8] - mov r5, r0, lsr #0x10 - ldrh r2, [r1, #0x0] - mov r0, #0x0 - mov r3, r5, lsl r3 - strh r0, [r1, #0x0] - ldrh r1, [r8, #0x0] - ldr r0, _020DD558 ; =0x021D6B38 - add r5, r3, #0xa000000 - str r2, [r0, #0x0] - cmp r1, #0x0 - beq _020DD4FC -_020DD4C8: - mov r0, r4 - mov r1, r5 - bl CTRDGi_ProgramFlashByteMX - movs r6, r0 - bne _020DD4FC - ldrh r0, [r8, #0x0] - add r4, r4, #0x1 - add r5, r5, #0x1 - sub r0, r0, #0x1 - strh r0, [r8, #0x0] - ldrh r0, [r8, #0x0] - cmp r0, #0x0 - bne _020DD4C8 -_020DD4FC: - ldr r3, _020DD554 ; =0x04000208 - ldr r0, _020DD558 ; =0x021D6B38 - ldrh r1, [r3, #0x0] - ldr r0, [r0, #0x0] - ldr r2, _020DD54C ; =0x04000204 - strh r0, [r3, #0x0] - ldrh r1, [r2, #0x0] - ldr r0, _020DD548 ; =0x021D6B0C - bic r1, r1, #0x3 - orr r1, r1, r7 - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge2 - mov r0, r6 - add sp, sp, #0x28 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020DD540: .word 0x021D6B20 -_020DD544: .word 0x000080FF -_020DD548: .word 0x021D6B0C -_020DD54C: .word 0x04000204 -_020DD550: .word 0x021D6B08 -_020DD554: .word 0x04000208 -_020DD558: .word 0x021D6B38 - - arm_func_start CTRDGi_ProgramFlashByteMX -CTRDGi_ProgramFlashByteMX: ; 0x020DD55C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr ip, _020DD5B0 ; =0x0A005555 - mov r3, #0xaa - ldr r2, _020DD5B4 ; =0x0A002AAA - strb r3, [r12, #0x0] - mov r3, #0x55 - mov lr, r0 - strb r3, [r2, #0x0] - mov r0, #0xa0 - strb r0, [r12, #0x0] - ldrb r2, [lr, #0x0] - ldr r3, _020DD5B8 ; =0x021D6B24 - mov r0, #0x1 - strb r2, [r1, #0x0] - ldrb r2, [lr, #0x0] - ldr r3, [r3, #0x0] - blx r3 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DD5B0: .word 0x0A005555 -_020DD5B4: .word 0x0A002AAA -_020DD5B8: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlashSectorCoreMX -CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x34 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x10 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, _020DD748 ; =0x021D6B20 - ldr r1, [r5, #0x0] - ldr r0, [r0, #0x0] - str r1, [r4, #0x0] - ldrh r4, [sp, #0x30] - ldrh r0, [r0, #0xa] - cmp r4, r0 - addcs sp, sp, #0x34 - ldrhs r0, _020DD74C ; =0x000080FF - ldmcsia sp!, {r4-r11,lr} - bxcs lr - ldr r0, _020DD750 ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r5, _020DD754 ; =0x04000204 - ldr r0, _020DD748 ; =0x021D6B20 - ldrh r3, [r5, #0x0] - ldr r2, [r0, #0x0] - ldrh r1, [r5, #0x0] - mov r0, r4, lsl #0xc - ldr r2, [r2, #0x10] - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r5, #0x0] - and r1, r3, #0x3 - mov r0, r0, lsr #0x10 - str r1, [sp, #0x0] - bl CTRDGi_SetFlashBankMx - and r0, r4, #0xf - mov r0, r0, lsl #0x10 - mov r9, r0, lsr #0x10 - mov r0, #0x2 - mov r10, #0x0 - str r0, [sp, #0x8] - mov r0, #0xff - ldr r8, _020DD758 ; =0x04000208 - mov r11, r10 - mov r7, #0xaa - mov r6, #0x55 - mov r5, #0x80 - mov r4, #0x30 - str r0, [sp, #0xc] -_020DD684: - ldr r0, _020DD748 ; =0x021D6B20 - ldrh r12, [r8, #0x0] - ldr r0, [r0, #0x0] - ldr r3, _020DD75C ; =0x021D6B38 - ldrh r1, [r0, #0x8] - ldr r0, [sp, #0x8] - ldr r2, [sp, #0xc] - strh r11, [r8, #0x0] - str r12, [r3, #0x0] - ldr r3, _020DD760 ; =0x0A005555 - mov r1, r9, lsl r1 - strb r7, [r3, #0x0] - ldr r3, _020DD764 ; =0x0A002AAA - add r1, r1, #0xa000000 - strb r6, [r3, #0x0] - ldr r3, _020DD760 ; =0x0A005555 - strb r5, [r3, #0x0] - strb r7, [r3, #0x0] - ldr r3, _020DD764 ; =0x0A002AAA - strb r6, [r3, #0x0] - strb r4, [r1, #0x0] - ldrh r3, [r8, #0x0] - ldr r3, _020DD75C ; =0x021D6B38 - ldr r3, [r3, #0x0] - strh r3, [r8, #0x0] - ldr r3, _020DD768 ; =0x021D6B24 - ldr r3, [r3, #0x0] - blx r3 - str r0, [sp, #0x4] - ands r0, r0, #0xa000 - beq _020DD714 - cmp r10, #0x0 - addeq r0, r10, #0x1 - moveq r0, r0, lsl #0x10 - moveq r10, r0, lsr #0x10 - beq _020DD684 -_020DD714: - ldr r2, _020DD754 ; =0x04000204 - ldr r1, _020DD750 ; =0x021D6B0C - ldrh r0, [r2, #0x0] - bic r3, r0, #0x3 - ldr r0, [sp, #0x0] - orr r0, r3, r0 - strh r0, [r2, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - ldr r0, [sp, #0x4] - add sp, sp, #0x34 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020DD748: .word 0x021D6B20 -_020DD74C: .word 0x000080FF -_020DD750: .word 0x021D6B0C -_020DD754: .word 0x04000204 -_020DD758: .word 0x04000208 -_020DD75C: .word 0x021D6B38 -_020DD760: .word 0x0A005555 -_020DD764: .word 0x0A002AAA -_020DD768: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlashChipCoreMX -CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020DD848 ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r4, _020DD84C ; =0x04000204 - ldr r0, _020DD850 ; =0x021D6B20 - ldrh r3, [r4, #0x0] - ldr r0, [r0, #0x0] - ldrh r1, [r4, #0x0] - ldr r2, [r0, #0x10] - ldr r0, _020DD854 ; =0x04000208 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r4, #0x0] - ldrh r4, [r0, #0x0] - mov r2, #0x0 - ldr r1, _020DD858 ; =0x021D6B38 - strh r2, [r0, #0x0] - ldr lr, _020DD85C ; =0x0A005555 - str r4, [r1, #0x0] - mov r5, #0xaa - ldr r4, _020DD860 ; =0x0A002AAA - strb r5, [lr, #0x0] - mov r12, #0x55 - strb r12, [r4, #0x0] - mov r2, #0x80 - strb r2, [lr, #0x0] - strb r5, [lr, #0x0] - strb r12, [r4, #0x0] - mov r2, #0x10 - strb r2, [lr, #0x0] - ldrh r2, [r0, #0x0] - ldr r2, [r1, #0x0] - ldr r1, _020DD864 ; =0x021D6B24 - strh r2, [r0, #0x0] - ldr r4, [r1, #0x0] - mov r0, #0x3 - mov r1, #0xa000000 - mov r2, #0xff - and r5, r3, #0x3 - blx r4 - ldr r3, _020DD84C ; =0x04000204 - ldr r1, _020DD848 ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r5 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DD848: .word 0x021D6B0C -_020DD84C: .word 0x04000204 -_020DD850: .word 0x021D6B20 -_020DD854: .word 0x04000208 -_020DD858: .word 0x021D6B38 -_020DD85C: .word 0x0A005555 -_020DD860: .word 0x0A002AAA -_020DD864: .word 0x021D6B24 -_020DD868: - .byte 0x00, 0x40, 0x2D, 0xE9, 0x24, 0xD0, 0x4D, 0xE2 - .byte 0x0C, 0x10, 0x8D, 0xE5, 0xB0, 0x02, 0xCD, 0xE1, 0x10, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE2 - .byte 0x5D, 0x00, 0x00, 0xEB, 0x24, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xC0, 0xD8, 0x0D, 0x02, 0x00, 0x40, 0x2D, 0xE9, 0x24, 0xD0, 0x4D, 0xE2, 0xB0, 0x02, 0xCD, 0xE1 - .byte 0x00, 0x00, 0x8D, 0xE2, 0x0C, 0x10, 0x8D, 0xE5, 0x04, 0x00, 0x00, 0xEB, 0x00, 0x08, 0xA0, 0xE1 - .byte 0x20, 0x08, 0xA0, 0xE1, 0x24, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xF0, 0x41, 0x2D, 0xE9, 0x28, 0xD0, 0x4D, 0xE2, 0x00, 0x50, 0xA0, 0xE1, 0x0F, 0x00, 0xB5, 0xE8 - .byte 0x00, 0x40, 0x8D, 0xE2, 0x0F, 0x00, 0xA4, 0xE8, 0x0F, 0x00, 0xB5, 0xE8, 0x0F, 0x00, 0xA4, 0xE8 - .byte 0x00, 0x01, 0x9F, 0xE5, 0x00, 0x10, 0x95, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x00, 0x10, 0x84, 0xE5 - .byte 0xB0, 0x52, 0xDD, 0xE1, 0xBA, 0x00, 0xD0, 0xE1, 0x0C, 0x40, 0x9D, 0xE5, 0x00, 0x00, 0x55, 0xE1 - .byte 0x28, 0xD0, 0x8D, 0x22, 0xE0, 0x00, 0x9F, 0x25, 0xF0, 0x41, 0xBD, 0x28, 0x1E, 0xFF, 0x2F, 0x21 - .byte 0x05, 0x00, 0xA0, 0xE1, 0x0B, 0xFD, 0xFF, 0xEB, 0x00, 0x60, 0xB0, 0xE1, 0x28, 0xD0, 0x8D, 0x12 - .byte 0xF0, 0x41, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0xC0, 0x00, 0x9F, 0xE5, 0xB0, 0x00, 0xD0, 0xE1 - .byte 0x34, 0xB2, 0xFF, 0xEB, 0xB8, 0x70, 0x9F, 0xE5, 0xA8, 0x00, 0x9F, 0xE5, 0xB0, 0x30, 0xD7, 0xE1 - .byte 0x00, 0x20, 0x90, 0xE5, 0xB0, 0x10, 0xD7, 0xE1, 0x10, 0x20, 0x92, 0xE5, 0xA4, 0x80, 0x9F, 0xE5 - .byte 0x03, 0x10, 0xC1, 0xE3, 0x02, 0x10, 0x81, 0xE1, 0xB0, 0x10, 0xC7, 0xE1, 0x00, 0x10, 0x90, 0xE5 - .byte 0x03, 0x70, 0x03, 0xE2, 0x04, 0x00, 0x91, 0xE5, 0xB0, 0x00, 0xC8, 0xE1, 0xB8, 0x10, 0xD1, 0xE1 - .byte 0xB0, 0x00, 0xD8, 0xE1, 0x15, 0x11, 0xA0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x54, 0x81, 0xE2 - .byte 0x0C, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0xA9, 0xFD, 0xFF, 0xEB - .byte 0x00, 0x60, 0xB0, 0xE1, 0x07, 0x00, 0x00, 0x1A, 0xB0, 0x00, 0xD8, 0xE1, 0x01, 0x40, 0x84, 0xE2 - .byte 0x01, 0x50, 0x85, 0xE2, 0x01, 0x00, 0x40, 0xE2, 0xB0, 0x00, 0xC8, 0xE1, 0xB0, 0x00, 0xD8, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0xF2, 0xFF, 0xFF, 0x1A, 0x34, 0x20, 0x9F, 0xE5, 0x2C, 0x00, 0x9F, 0xE5 - .byte 0xB0, 0x10, 0xD2, 0xE1, 0x03, 0x10, 0xC1, 0xE3, 0x07, 0x10, 0x81, 0xE1, 0xB0, 0x10, 0xC2, 0xE1 - .byte 0xB0, 0x00, 0xD0, 0xE1, 0x03, 0xB2, 0xFF, 0xEB, 0x06, 0x00, 0xA0, 0xE1, 0x28, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x20, 0x6B, 0x1D, 0x02, 0xFF, 0x80, 0x00, 0x00 - .byte 0x0C, 0x6B, 0x1D, 0x02, 0x04, 0x02, 0x00, 0x04, 0x08, 0x6B, 0x1D, 0x02 - - arm_func_start CTRDGi_SetTask -CTRDGi_SetTask: ; 0x020DD9FC - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r3, _020DDAA8 ; =0x021D6B50 - mov r7, r0 - mov r4, r1 - mov r6, r2 - ldr r5, [r3, #0x0] - bl CTRDGi_IsTaskAvailable -_020DDA1C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x00, 0x00, 0x00, 0x1A, 0x89, 0xBF, 0xFF, 0xEB, 0x7C, 0x00, 0x9F, 0xE5, 0x22, 0x00, 0xD0, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x00, 0x0A, 0x84, 0xBF, 0xFF, 0xEB, 0x33, 0xBE, 0xFF, 0xEB - .byte 0x01, 0x10, 0xA0, 0xE3, 0x22, 0x10, 0xC7, 0xE5, 0x00, 0x40, 0x87, 0xE5, 0xC4, 0x10, 0x85, 0xE2 - .byte 0x01, 0x00, 0x57, 0xE1, 0x00, 0x40, 0xA0, 0xE1, 0x48, 0x00, 0x9F, 0x05, 0x04, 0x60, 0x87, 0xE5 - .byte 0x00, 0x10, 0xA0, 0x03, 0x00, 0x10, 0x80, 0x05, 0x3C, 0xC0, 0x9F, 0xE5, 0x0F, 0x00, 0xB7, 0xE8 - .byte 0x0C, 0x60, 0xA0, 0xE1, 0x0F, 0x00, 0xAC, 0xE8, 0x0F, 0x00, 0xB7, 0xE8, 0x0F, 0x00, 0xAC, 0xE8 - .byte 0x00, 0x10, 0x97, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0x8C, 0xE5, 0xC0, 0x60, 0x85, 0xE5 - .byte 0xE6, 0xB5, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x21, 0xBE, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020DDAA8: .word 0x021D6B50 -_020DDAAC: - .byte 0x54, 0x6B, 0x1D, 0x02 - - arm_func_start CTRDGi_TaskThread -CTRDGi_TaskThread: ; 0x020DDAB0 - stmdb sp!, {r4-r10,lr} - sub sp, sp, #0x28 - ldr r6, _020DDB94 ; =0x021D6B54 - ldr r5, _020DDB98 ; =0x021D6B50 - mov r4, r0 - add r9, sp, #0x0 - mov r8, #0x0 - mov r7, #0x24 -_020DDAD0: - mov r0, r9 - mov r1, r8 - mov r2, r7 - bl MI_CpuFill8 - bl OS_DisableInterrupts - ldr r1, [r4, #0xc0] - mov r10, r0 - cmp r1, #0x0 - bne _020DDB08 -_020DDAF4: - mov r0, r8 - bl OS_SleepThread - ldr r0, [r4, #0xc0] - cmp r0, #0x0 - beq _020DDAF4 -_020DDB08: - ldr lr, [r4, #0xc0] - add r12, sp, #0x0 - ldmia lr!, {r0-r3} - stmia r12!, {r0-r3} - ldmia lr!, {r0-r3} - stmia r12!, {r0-r3} - ldr r1, [lr, #0x0] - mov r0, r10 - str r1, [r12, #0x0] - bl OS_RestoreInterrupts - ldr r1, [sp, #0x0] - cmp r1, #0x0 - beq _020DDB48 - mov r0, r9 - blx r1 - str r0, [sp, #0x8] -_020DDB48: - bl OS_DisableInterrupts - ldr r1, [sp, #0x4] - mov r10, r0 - strb r8, [r6, #0x22] - cmp r1, #0x0 - beq _020DDB68 - mov r0, r9 - blx r1 -_020DDB68: - ldr r0, [r5, #0x0] - cmp r0, #0x0 - beq _020DDB84 - mov r0, r10 - str r8, [r4, #0xc0] - bl OS_RestoreInterrupts - b _020DDAD0 -_020DDB84: - bl OS_ExitThread - add sp, sp, #0x28 - ldmia sp!, {r4-r10,lr} - bx lr - .balign 4 -_020DDB94: .word 0x021D6B54 -_020DDB98: .word 0x021D6B50 - - arm_func_start CTRDGi_InitTaskInfo -CTRDGi_InitTaskInfo: - ldr ip, _020DDBAC ; =MI_CpuFill8 - mov r1, #0x0 - mov r2, #0x24 - bx r12 - .balign 4 -_020DDBAC: .word MI_CpuFill8 - - arm_func_start CTRDGi_IsTaskAvailable -CTRDGi_IsTaskAvailable: - ldr r0, _020DDBC8 ; =0x021D6B50 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - bx lr - .balign 4 -_020DDBC8: .word 0x021D6B50 - - arm_func_start CTRDGi_InitTaskThread -CTRDGi_InitTaskThread: ; 0x020DDBCC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, _020DDC4C ; =0x021D6B50 - mov r4, r0 - ldr r0, [r1, #0x0] - cmp r0, #0x0 - bne _020DDC38 - add r0, r5, #0xc4 - str r5, [r1, #0x0] - bl CTRDGi_InitTaskInfo - ldr r0, _020DDC50 ; =0x021D6B54 - bl CTRDGi_InitTaskInfo -_020DDC04: - .byte 0x00, 0x00, 0xA0, 0xE3, 0xC0, 0x00, 0x85, 0xE5, 0x01, 0x2B, 0xA0, 0xE3 - .byte 0x3C, 0x10, 0x9F, 0xE5, 0x3C, 0x30, 0x9F, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x00, 0x20, 0x8D, 0xE5 - .byte 0x14, 0x20, 0xA0, 0xE3, 0x04, 0x20, 0x8D, 0xE5, 0x05, 0x20, 0xA0, 0xE1, 0x52, 0xB6, 0xFF, 0xEB - .byte 0x05, 0x00, 0xA0, 0xE1, 0x7D, 0xB5, 0xFF, 0xEB -_020DDC38: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DDC4C: .word 0x021D6B50 -_020DDC50: .word 0x021D6B54 -_020DDC54: - .byte 0xB0, 0xDA, 0x0D, 0x02, 0x78, 0x6F, 0x1D, 0x02 - - arm_func_start MATH_CountPopulation -MATH_CountPopulation: ; 0x020DDC5C - ldr r1, _020DDC94 ; =0x55555555 - ldr r2, _020DDC98 ; =0x33333333 - and r1, r1, r0, lsr #0x1 - sub r0, r0, r1 - and r1, r0, r2 - and r0, r2, r0, lsr #0x2 - add r1, r1, r0 - ldr r0, _020DDC9C ; =0x0F0F0F0F - add r1, r1, r1, lsr #0x4 - and r0, r1, r0 - add r0, r0, r0, lsr #0x8 - add r0, r0, r0, lsr #0x10 - and r0, r0, #0xff - bx lr - .balign 4 -_020DDC94: .word 0x55555555 -_020DDC98: .word 0x33333333 -_020DDC9C: .word 0x0F0F0F0F - - arm_func_start MATH_CalcSHA1 -MATH_CalcSHA1: ; 0x020DDCA0 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x68 - mov r6, r0 - add r0, sp, #0x0 - mov r5, r1 - mov r4, r2 - bl MATH_SHA1Init -_020DDCBC: - .byte 0x00, 0x00, 0x8D, 0xE2 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0xCF, 0xD4, 0xFF, 0xEB, 0x00, 0x00, 0x8D, 0xE2 - .byte 0x06, 0x10, 0xA0, 0xE1, 0x4D, 0xD4, 0xFF, 0xEB, 0x68, 0xD0, 0x8D, 0xE2, 0x70, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start MATH_CalcMD5 -MATH_CalcMD5: ; 0x020DDCE4 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x58 - mov r6, r0 - add r0, sp, #0x0 - mov r5, r1 - mov r4, r2 - bl MATH_MD5Init -_020DDD00: - .byte 0x00, 0x00, 0x8D, 0xE2, 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0xCC, 0xD3, 0xFF, 0xEB - .byte 0x00, 0x10, 0x8D, 0xE2, 0x06, 0x00, 0xA0, 0xE1, 0x98, 0xD3, 0xFF, 0xEB, 0x58, 0xD0, 0x8D, 0xE2 - .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start MATH_CalcCRC32 -MATH_CalcCRC32: ; 0x020DDD28 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mvn r12, #0x0 - mov r3, r2 - add r1, sp, #0x0 - mov r2, lr - str r12, [sp, #0x0] - bl MATHi_CRC32UpdateRev -_020DDD4C: - .byte 0x00, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0xE0, 0xE1, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start MATH_CalcCRC16CCITT -MATH_CalcCRC16CCITT: ; 0x020DDD60 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr ip, _020DDD94 ; =0x0000FFFF - mov lr, r1 - mov r3, r2 - add r1, sp, #0x0 - mov r2, lr - strh r12, [sp, #0x0] - bl MATHi_CRC16Update - ldrh r0, [sp, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DDD94: .word 0x0000FFFF - - arm_func_start MATH_CalcCRC16 -MATH_CalcCRC16: ; 0x020DDD98 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r12, #0x0 - mov r3, r2 - add r1, sp, #0x0 - mov r2, lr - strh r12, [sp, #0x0] - bl MATHi_CRC16UpdateRev - ldrh r0, [sp, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start MATH_CalcCRC8 -MATH_CalcCRC8: ; 0x020DDDCC - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r12, #0x0 - mov r3, r2 - add r1, sp, #0x0 - mov r2, lr - strb r12, [sp, #0x0] - bl MATHi_CRC8Update -_020DDDF0: - .byte 0x00, 0x00, 0xDD, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start MATHi_CRC32UpdateRev -MATHi_CRC32UpdateRev: - stmdb sp!, {r4,lr} - cmp r3, #0x0 - ldr r4, [r1, #0x0] - mov lr, #0x0 - bls _020DDE38 -_020DDE14: - ldrb r12, [r2, #0x0] - add lr, lr, #0x1 - cmp lr, r3 - eor r12, r4, r12 - and r12, r12, #0xff - ldr r12, [r0, r12, lsl #0x2] - add r2, r2, #0x1 - eor r4, r12, r4, lsr #0x8 - blo _020DDE14 -_020DDE38: - str r4, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC32InitTableRev -MATHi_CRC32InitTableRev: ; 0x020DDE44 - stmdb sp!, {r4,lr} - mov lr, #0x0 - mov r3, lr -_020DDE50: - mov r4, lr - mov r12, r3 -_020DDE58: - ands r2, r4, #0x1 - eorne r4, r1, r4, lsr #0x1 - add r12, r12, #0x1 - moveq r4, r4, lsr #0x1 - cmp r12, #0x8 - blo _020DDE58 - str r4, [r0, lr, lsl #0x2] - add lr, lr, #0x1 - cmp lr, #0x100 - blo _020DDE50 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC16UpdateRev -MATHi_CRC16UpdateRev: ; 0x020DDE88 - stmdb sp!, {r4,lr} - cmp r3, #0x0 - ldrh r4, [r1, #0x0] - mov lr, #0x0 - bls _020DDEC4 -_020DDE9C: - ldrb r12, [r2, #0x0] - add lr, lr, #0x1 - cmp lr, r3 - eor r12, r4, r12 - and r12, r12, #0xff - mov r12, r12, lsl #0x1 - ldrh r12, [r0, r12] - add r2, r2, #0x1 - eor r4, r12, r4, lsr #0x8 - blo _020DDE9C -_020DDEC4: - strh r4, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC16Update -MATHi_CRC16Update: ; 0x020DDED0 - stmdb sp!, {r4,lr} - cmp r3, #0x0 - ldrh r4, [r1, #0x0] - mov lr, #0x0 - bls _020DDF0C -_020DDEE4: - ldrb r12, [r2, #0x0] - add lr, lr, #0x1 - cmp lr, r3 - eor r12, r12, r4, lsr #0x8 - and r12, r12, #0xff - mov r12, r12, lsl #0x1 - ldrh r12, [r0, r12] - add r2, r2, #0x1 - eor r4, r12, r4, lsl #0x8 - blo _020DDEE4 -_020DDF0C: - strh r4, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC16InitTableRev -MATHi_CRC16InitTableRev: ; 0x020DDF18 - stmdb sp!, {r4,lr} - mov lr, #0x0 - mov r3, lr -_020DDF24: - mov r4, lr - mov r12, r3 -_020DDF2C: - ands r2, r4, #0x1 - eorne r4, r1, r4, lsr #0x1 - add r12, r12, #0x1 - moveq r4, r4, lsr #0x1 - cmp r12, #0x8 - blo _020DDF2C - mov r2, lr, lsl #0x1 - add lr, lr, #0x1 - strh r4, [r0, r2] - cmp lr, #0x100 - blo _020DDF24 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC16InitTable -MATHi_CRC16InitTable: ; 0x020DDF60 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, #0x0 - mov r12, r4 - mov r3, r4 -_020DDF74: - mov r5, r12 - mov lr, r3 -_020DDF7C: - ands r2, r5, #0x8000 - eorne r5, r1, r5, lsl #0x1 - add lr, lr, #0x1 - moveq r5, r5, lsl #0x1 - cmp lr, #0x8 - blo _020DDF7C - mov r2, r4, lsl #0x1 - add r4, r4, #0x1 - strh r5, [r0, r2] - cmp r4, #0x100 - add r12, r12, #0x100 - blo _020DDF74 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start MATHi_CRC8Update -MATHi_CRC8Update: - stmdb sp!, {r4,lr} - cmp r3, #0x0 - ldrb r4, [r1, #0x0] - mov lr, #0x0 - bls _020DDFEC -_020DDFCC: - ldrb r12, [r2, #0x0] - add lr, lr, #0x1 - cmp lr, r3 - eor r12, r4, r12 - and r12, r12, #0xff - add r2, r2, #0x1 - ldrb r4, [r0, r12] - blo _020DDFCC -_020DDFEC: - strb r4, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC8InitTable -MATHi_CRC8InitTable: ; 0x020DDFF8 - stmdb sp!, {r4,lr} - mov lr, #0x0 - mov r3, lr -_020DE004: - mov r4, lr - mov r12, r3 -_020DE00C: - ands r2, r4, #0x80 - eorne r4, r1, r4, lsl #0x1 - add r12, r12, #0x1 - moveq r4, r4, lsl #0x1 - cmp r12, #0x8 - blo _020DE00C - strb r4, [r0, lr] - add lr, lr, #0x1 - cmp lr, #0x100 - blo _020DE004 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start STD_CompareNString -STD_CompareNString: ; 0x020DE03C - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r2, #0x0 - beq _020DE080 - cmp r2, #0x0 - mov lr, #0x0 - ble _020DE080 -_020DE058: - ldrb r12, [r0, lr] - ldrb r3, [r1, lr] - cmp r12, r3 - addne sp, sp, #0x4 - subne r0, r12, r3 - ldmneia sp!, {lr} - bxne lr - add lr, lr, #0x1 - cmp lr, r2 - blt _020DE058 -_020DE080: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start STD_CompareString -STD_CompareString: ; 0x020DE090 - b _020DE09C -_020DE094: - add r0, r0, #0x1 - add r1, r1, #0x1 -_020DE09C: - ldrsb r2, [r1, #0x0] - ldrsb r3, [r0, #0x0] - cmp r3, r2 - bne _020DE0B4 - cmp r3, #0x0 - bne _020DE094 -_020DE0B4: - sub r0, r3, r2 - bx lr - - arm_func_start STD_GetStringLength -STD_GetStringLength: ; 0x020DE0BC - ldrsb r1, [r0, #0x0] - mov r2, #0x0 - cmp r1, #0x0 - beq _020DE0DC -_020DE0CC: - add r2, r2, #0x1 - ldrsb r1, [r0, r2] - cmp r1, #0x0 - bne _020DE0CC -_020DE0DC: - mov r0, r2 - bx lr - - arm_func_start STD_CopyLString -STD_CopyLString: ; 0x020DE0E4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - sub r12, r2, #0x1 - cmp r12, #0x0 - mov lr, #0x0 - ble _020DE120 -_020DE0FC: - ldrsb r3, [r1, #0x0] - strb r3, [r0, lr] - ldrsb r3, [r1, #0x0] - cmp r3, #0x0 - beq _020DE120 - add lr, lr, #0x1 - cmp lr, r12 - add r1, r1, #0x1 - blt _020DE0FC -_020DE120: - sub r3, r2, #0x1 - cmp lr, r3 - blt _020DE138 - cmp r2, #0x0 - movne r2, #0x0 - strneb r2, [r0, lr] -_020DE138: - mov r0, r1 - bl STD_GetStringLength - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start abort -abort: ; 0x020DE14C - stmdb sp!, {r3,lr} - mov r0, #0x1 - bl raise - ldr r1, _020DE16C ; =0x021D6F78 - mov r0, #0x1 - str r0, [r1, #0xc] - bl exit - ldmia sp!, {r3,pc} - .balign 4 -_020DE16C: .word 0x021D6F78 - - arm_func_start exit -exit: ; 0x020DE170 - stmdb sp!, {r4,lr} - ldr r1, _020DE1B8 ; =0x021D6F78 - mov r4, r0 - ldr r0, [r1, #0xc] - cmp r0, #0x0 - bne _020DE1AC - bl __destroy_global_chain - ldr r0, _020DE1B8 ; =0x021D6F78 - ldr r0, [r0, #0x4] - cmp r0, #0x0 - beq _020DE1AC - blx r0 - ldr r0, _020DE1B8 ; =0x021D6F78 - mov r1, #0x0 - str r1, [r0, #0x4] -_020DE1AC: - mov r0, r4 - bl __exit - ldmia sp!, {r4,pc} - .balign 4 -_020DE1B8: .word 0x021D6F78 - - arm_func_start __exit -__exit: ; 0x020DE1BC - stmdb sp!, {r3-r5,lr} - ldr r0, _020DE2CC ; =0x021D70D0 - bl OS_TryLockMutex -_020DE1C8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A - .byte 0xF8, 0x00, 0x9F, 0xE5, 0xF8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0xF4, 0x00, 0x9F, 0xE5 - .byte 0x6C, 0x30, 0x92, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x00, 0x30, 0x81, 0xE5, 0x00, 0x20, 0x80, 0xE5 - .byte 0x15, 0x00, 0x00, 0xEA, 0xD4, 0x00, 0x9F, 0xE5, 0xD4, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5 - .byte 0x00, 0x10, 0x91, 0xE5, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A - .byte 0xC0, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2, 0x00, 0x10, 0x80, 0xE5 - .byte 0x09, 0x00, 0x00, 0xEA, 0xA0, 0x00, 0x9F, 0xE5, 0x78, 0xB7, 0xFF, 0xEB, 0x9C, 0x00, 0x9F, 0xE5 - .byte 0x9C, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0x98, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x00, 0x30, 0x81, 0xE5, 0x00, 0x20, 0x80, 0xE5, 0x88, 0x40, 0x9F, 0xE5 - .byte 0x08, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0xDA, 0x7C, 0x50, 0x9F, 0xE5 - .byte 0x08, 0x00, 0x94, 0xE5, 0x01, 0x10, 0x40, 0xE2, 0x01, 0x01, 0x95, 0xE7, 0x08, 0x10, 0x84, 0xE5 - .byte 0x30, 0xFF, 0x2F, 0xE1, 0x08, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0xF7, 0xFF, 0xFF, 0xCA - .byte 0x50, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x51, 0xE2, 0x00, 0x10, 0x80, 0xE5 - .byte 0x01, 0x00, 0x00, 0x1A, 0x30, 0x00, 0x9F, 0xE5, 0x40, 0xB7, 0xFF, 0xEB, 0x38, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A, 0x30, 0xFF, 0x2F, 0xE1 - .byte 0x24, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x8D, 0x02, 0x00, 0xEB, 0x0E, 0x39, 0x00, 0xEB, 0x38, 0x80, 0xBD, 0xE8 -_020DE2CC: .word 0x021D70D0 -_020DE2D0: - .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0x78, 0x6F, 0x1D, 0x02 - .byte 0x88, 0x6F, 0x1D, 0x02 - - arm_func_start nan -nan: ; 0x020DE2E4 - ldr r0, _020DE2F4 ; =0x02106B78 - ldr ip, _020DE2F8 ; =_f2d - ldr r0, [r0, #0x0] - bx r12 - .balign 4 -_020DE2F4: .word 0x02106B78 -_020DE2F8: .word _f2d - - arm_func_start __flush_line_buffered_output_files -__flush_line_buffered_output_files: ; 0x020DE2FC - stmdb sp!, {r3-r9,lr} - ldr r0, _020DE384 ; =0x02106A58 - mov r4, #0x0 - mov r5, #0x1 - mov r8, r0 - mvn r9, #0x0 - mov r7, r4 - mov r6, #0x4c -_020DE31C: - ldr r1, [r0, #0x4] - mov r2, r1, lsl #0x16 - movs r2, r2, lsr #0x1d - beq _020DE35C - mov r1, r1, lsl #0x19 - mov r1, r1, lsr #0x1e - tst r1, #0x1 - beq _020DE35C - ldr r1, [r0, #0x8] - mov r1, r1, lsl #0x1d - mov r1, r1, lsr #0x1d - cmp r1, #0x1 - bne _020DE35C - bl fflush -_020DE354: - .byte 0x00, 0x00, 0x50, 0xE3, 0x09, 0x40, 0xA0, 0x11 -_020DE35C: - cmp r5, #0x3 - movge r0, r7 - bge _020DE374 - mul r0, r5, r6 - add r5, r5, #0x1 - add r0, r8, r0 -_020DE374: - cmp r0, #0x0 - bne _020DE31C - mov r0, r4 - ldmia sp!, {r3-r9,pc} - .balign 4 -_020DE384: .word 0x02106A58 - - arm_func_start __flush_all -__flush_all: ; 0x020DE388 - stmdb sp!, {r3-r9,lr} - ldr r0, _020DE3EC ; =0x02106A58 - mov r4, #0x0 - mov r5, #0x1 - mov r8, r0 - mvn r9, #0x0 - mov r7, r4 - mov r6, #0x4c -_020DE3A8: - ldr r1, [r0, #0x4] - mov r1, r1, lsl #0x16 - movs r1, r1, lsr #0x1d - beq _020DE3C4 - bl fflush -_020DE3BC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x09, 0x40, 0xA0, 0x11 -_020DE3C4: - cmp r5, #0x3 - movge r0, r7 - bge _020DE3DC - mul r0, r5, r6 - add r5, r5, #0x1 - add r0, r8, r0 -_020DE3DC: - cmp r0, #0x0 - bne _020DE3A8 - mov r0, r4 - ldmia sp!, {r3-r9,pc} - .balign 4 -_020DE3EC: .word 0x02106A58 - - arm_func_start abs -abs: ; 0x020DE3F0 - cmp r0, #0x0 - rsblt r0, r0, #0x0 - bx lr - - arm_func_start __msl_assertion_failed -__msl_assertion_failed: ; 0x020DE3FC - stmdb sp!, {r3-r4,lr} - sub sp, sp, #0x4 - mov r4, r0 - mov lr, r1 - mov r12, r2 - str r3, [sp, #0x0] - ldr r0, _020DE434 ; =0x02106B3C - mov r1, r4 - mov r2, lr - mov r3, r12 - bl printf - bl abort - add sp, sp, #0x4 - ldmia sp!, {r3-r4,pc} - .balign 4 -_020DE434: .word 0x02106B3C -__convert_from_newlines: - bx lr - - arm_func_start __convert_to_newlines -__convert_to_newlines: ; 0x020DE43C - bx lr -__prep_buffer: - ldr r1, [r0, #0x1c] - str r1, [r0, #0x24] - ldr r3, [r0, #0x20] - str r3, [r0, #0x28] - ldr r2, [r0, #0x18] - ldr r1, [r0, #0x2c] - and r1, r2, r1 - sub r1, r3, r1 - str r1, [r0, #0x28] - ldr r1, [r0, #0x18] - str r1, [r0, #0x34] - bx lr - - arm_func_start __load_buffer -__load_buffer: ; 0x020DE470 - stmdb sp!, {r4-r6,lr} - mov r5, r2 - mov r4, r0 - mov r6, r1 - bl __prep_buffer - cmp r5, #0x1 - ldreq r0, [r4, #0x20] - add r2, r4, #0x28 - streq r0, [r4, #0x28] - ldr r0, [r4, #0x0] - ldr r1, [r4, #0x1c] - ldr r3, [r4, #0x48] - ldr r12, [r4, #0x3c] - blx r12 - cmp r0, #0x2 - moveq r1, #0x0 - streq r1, [r4, #0x28] - cmp r6, #0x0 - ldrne r1, [r4, #0x28] - strne r1, [r6, #0x0] - cmp r0, #0x0 - ldmneia sp!, {r4-r6,pc} -_020DE4C8: - .byte 0x18, 0x10, 0x94, 0xE5, 0x28, 0x00, 0x94, 0xE5 - .byte 0x00, 0x00, 0x81, 0xE0, 0x18, 0x00, 0x84, 0xE5, 0x04, 0x00, 0x94, 0xE5, 0x80, 0x09, 0xA0, 0xE1 - .byte 0xA0, 0x0F, 0xB0, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x1C, 0x00, 0x94, 0xE5, 0x28, 0x10, 0x84, 0xE2 - .byte 0xD1, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x70, 0x80, 0xBD, 0xE8 -__flush_buffer: - stmdb sp!, {r3-r5,lr} - mov r5, r0 - ldr r2, [r5, #0x24] - ldr r0, [r5, #0x1c] - mov r4, r1 - subs r0, r2, r0 - beq _020DE574 - str r0, [r5, #0x28] - ldr r0, [r5, #0x4] - mov r0, r0, lsl #0x13 - movs r0, r0, lsr #0x1f - bne _020DE538 - ldr r0, [r5, #0x1c] - add r1, r5, #0x28 - bl __convert_from_newlines -_020DE538: - ldr r0, [r5, #0x0] - ldr r1, [r5, #0x1c] - ldr r3, [r5, #0x48] - ldr r12, [r5, #0x40] - add r2, r5, #0x28 - blx r12 - cmp r4, #0x0 - ldrne r1, [r5, #0x28] - strne r1, [r4, #0x0] - cmp r0, #0x0 - ldmneia sp!, {r3-r5,pc} -_020DE564: - .byte 0x18, 0x10, 0x95, 0xE5, 0x28, 0x00, 0x95, 0xE5, 0x00, 0x00, 0x81, 0xE0 - .byte 0x18, 0x00, 0x85, 0xE5 -_020DE574: - mov r0, r5 - bl __prep_buffer -_020DE57C: - .byte 0x00, 0x00, 0xA0, 0xE3 - .byte 0x38, 0x80, 0xBD, 0xE8 - - arm_func_start fread -fread: ; 0x020DE584 - stmdb sp!, {r4-r10,lr} - ldr r4, _020DE67C ; =0x02106A58 - mov r7, r3 - cmp r7, r4 - moveq r6, #0x2 - mov r10, r0 - movne r6, #0x5 - mov r0, #0x18 - mul r4, r6, r0 - ldr r5, _020DE680 ; =0x021D70D0 - mov r9, r1 - add r0, r5, r4 - mov r8, r2 - bl OS_TryLockMutex -_020DE5BC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0x00, 0x00, 0x1A, 0xB8, 0x00, 0x9F, 0xE5, 0xB8, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5 - .byte 0xB4, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7 - .byte 0x06, 0x11, 0x80, 0xE7, 0x15, 0x00, 0x00, 0xEA, 0x94, 0x00, 0x9F, 0xE5, 0x94, 0x10, 0x9F, 0xE5 - .byte 0x04, 0x00, 0x90, 0xE5, 0x06, 0x11, 0x91, 0xE7, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1 - .byte 0x04, 0x00, 0x00, 0x1A, 0x80, 0x10, 0x9F, 0xE5, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x80, 0xE2 - .byte 0x06, 0x01, 0x81, 0xE7, 0x09, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x85, 0xE0, 0x7B, 0xB6, 0xFF, 0xEB - .byte 0x5C, 0x00, 0x9F, 0xE5, 0x5C, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0x58, 0x00, 0x9F, 0xE5 - .byte 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7 - .byte 0x0A, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x07, 0x30, 0xA0, 0xE1 - .byte 0x0E, 0x00, 0x00, 0xEB, 0x30, 0x10, 0x9F, 0xE5, 0x00, 0x70, 0xA0, 0xE1, 0x06, 0x01, 0x91, 0xE7 - .byte 0x01, 0x00, 0x50, 0xE2, 0x06, 0x01, 0x81, 0xE7, 0x01, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x85, 0xE0 - .byte 0x4A, 0xB6, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1, 0xF0, 0x87, 0xBD, 0xE8 -_020DE67C: .word 0x02106A58 -_020DE680: .word 0x021D70D0 -_020DE684: - .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 - - arm_func_start __fread -__fread: ; 0x020DE690 - stmdb sp!, {r3-r10,lr} - sub sp, sp, #0x4 - mov r7, r3 - mov r9, r0 - mov r8, r1 - mov r0, r7 - mov r1, #0x0 - mov r4, r2 - bl fwide -_020DE6B4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x00, 0x10, 0xE0, 0xE3, 0x4A, 0x1A, 0x00, 0xEB, 0x98, 0x04, 0x14, 0xE0, 0x06, 0x00, 0x00, 0x0A - .byte 0x0D, 0x00, 0xD7, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x04, 0x10, 0x97, 0xE5 - .byte 0x01, 0x0B, 0xA0, 0xE1, 0xA0, 0x0E, 0xB0, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x00, 0x00, 0xA0, 0xE3, 0xF8, 0x87, 0xBD, 0xE8, 0x81, 0x09, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1 - .byte 0x81, 0x0C, 0xA0, 0x11, 0x20, 0x0F, 0xA0, 0x11, 0x08, 0x10, 0x97, 0xE5, 0x02, 0x00, 0x50, 0x13 - .byte 0x01, 0x60, 0xA0, 0xE3, 0x81, 0x0E, 0xA0, 0xE1, 0x00, 0x60, 0xA0, 0x13, 0xA0, 0x0E, 0xB0, 0xE1 - .byte 0x09, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x97, 0xE5, 0x80, 0x0D, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 - .byte 0x01, 0x00, 0x10, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x07, 0x00, 0xC1, 0xE3, 0x02, 0x00, 0x80, 0xE3 - .byte 0x08, 0x00, 0x87, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x87, 0xE5, 0x08, 0x00, 0x97, 0xE5 - .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x02, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x2A - .byte 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC7, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x28, 0x00, 0x87, 0xE5, 0xF8, 0x87, 0xBD, 0xE8, 0x04, 0x00, 0x97, 0xE5, 0x80, 0x0C, 0xA0, 0xE1 - .byte 0x20, 0x0F, 0xA0, 0xE1, 0x01, 0x00, 0x10, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0xDA, 0xFE, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC7, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2, 0x28, 0x00, 0x87, 0xE5, 0xF8, 0x87, 0xBD, 0xE8 - .byte 0x00, 0x00, 0x54, 0xE3, 0x00, 0x50, 0xA0, 0xE3, 0x2D, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x97, 0xE5 - .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x03, 0x00, 0x50, 0xE3, 0x28, 0x00, 0x00, 0x3A - .byte 0x05, 0xA0, 0xA0, 0xE1, 0x07, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0x04, 0x1A, 0x00, 0xEB - .byte 0x01, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x97, 0xE5, 0x06, 0x00, 0x00, 0x1A, 0x80, 0x0E, 0xA0, 0xE1 - .byte 0x20, 0x0E, 0x87, 0xE0, 0xBE, 0x00, 0xD0, 0xE1, 0x02, 0x50, 0x85, 0xE2, 0x02, 0x40, 0x44, 0xE2 - .byte 0xB2, 0x00, 0xC9, 0xE0, 0x05, 0x00, 0x00, 0xEA, 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0x87, 0xE0 - .byte 0x0F, 0x00, 0xD0, 0xE5, 0x01, 0x50, 0x85, 0xE2, 0x01, 0x40, 0x44, 0xE2, 0x01, 0x00, 0xC9, 0xE4 - .byte 0x08, 0x10, 0x97, 0xE5, 0x00, 0x00, 0x54, 0xE3, 0x81, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 - .byte 0x01, 0x00, 0x40, 0xE2, 0x07, 0x10, 0xC1, 0xE3, 0x07, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x81, 0xE1 - .byte 0x08, 0x00, 0x87, 0xE5, 0x04, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x97, 0xE5, 0x80, 0x0E, 0xA0, 0xE1 - .byte 0xA0, 0x0E, 0xA0, 0xE1, 0x03, 0x00, 0x50, 0xE3, 0xDD, 0xFF, 0xFF, 0x2A, 0x08, 0x00, 0x97, 0xE5 - .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x02, 0x00, 0x50, 0xE3, 0x30, 0x00, 0x97, 0x05 - .byte 0x28, 0x00, 0x87, 0x05, 0x00, 0x00, 0x54, 0xE3, 0x2E, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x97, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x56, 0x03, 0x2A, 0x00, 0x00, 0x0A, 0x00, 0xA0, 0xA0, 0xE3 - .byte 0x28, 0x00, 0x97, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x11, 0x00, 0x00, 0x1A, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x0A, 0x10, 0xA0, 0xE1, 0x0A, 0x20, 0xA0, 0xE1, 0xF0, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x0B, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC7, 0x05 - .byte 0x03, 0x00, 0x00, 0x0A, 0x08, 0x10, 0x97, 0xE5, 0x07, 0x10, 0xC1, 0xE3, 0x08, 0x10, 0x87, 0xE5 - .byte 0x0C, 0x00, 0xC7, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x87, 0xE5, 0x00, 0x40, 0xA0, 0xE3 - .byte 0x14, 0x00, 0x00, 0xEA, 0x28, 0x00, 0x97, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x04, 0x00, 0x50, 0xE1 - .byte 0x00, 0x40, 0x8D, 0x85, 0x24, 0x10, 0x97, 0xE5, 0x00, 0x20, 0x9D, 0xE5, 0x09, 0x00, 0xA0, 0xE1 - .byte 0xCC, 0x02, 0x00, 0xEB, 0x00, 0x20, 0x9D, 0xE5, 0x24, 0x00, 0x97, 0xE5, 0x02, 0x40, 0x54, 0xE0 - .byte 0x02, 0x00, 0x80, 0xE0, 0x24, 0x00, 0x87, 0xE5, 0x28, 0x10, 0x97, 0xE5, 0x00, 0x00, 0x9D, 0xE5 - .byte 0x02, 0x90, 0x89, 0xE0, 0x00, 0x00, 0x41, 0xE0, 0x02, 0x50, 0x85, 0xE0, 0x28, 0x00, 0x87, 0xE5 - .byte 0x00, 0x00, 0x56, 0x13, 0xD5, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x54, 0xE3, 0x20, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x56, 0xE3, 0x1E, 0x00, 0x00, 0x1A, 0x1C, 0x60, 0x97, 0xE5, 0x20, 0xA0, 0x97, 0xE5 - .byte 0x00, 0x10, 0x8D, 0xE2, 0x1C, 0x90, 0x87, 0xE5, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x20, 0x40, 0x87, 0xE5, 0xC1, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x00, 0x0A - .byte 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x0D, 0x00, 0xC7, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x87, 0xE5, 0x05, 0x00, 0x00, 0xEA, 0x08, 0x10, 0x97, 0xE5 - .byte 0x07, 0x10, 0xC1, 0xE3, 0x08, 0x10, 0x87, 0xE5, 0x0C, 0x00, 0xC7, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x28, 0x00, 0x87, 0xE5, 0x00, 0x10, 0x9D, 0xE5, 0x07, 0x00, 0xA0, 0xE1, 0x1C, 0x60, 0x87, 0xE5 - .byte 0x20, 0xA0, 0x87, 0xE5, 0x01, 0x50, 0x85, 0xE0, 0xA0, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x28, 0x00, 0x87, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0xA0, 0xE1, 0x2E, 0x35, 0x00, 0xEB - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF8, 0x87, 0xBD, 0xE8 -__fwrite: - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x8 - mov r9, r3 - mov r10, r0 - str r1, [sp, #0x0] - mov r0, r9 - mov r1, #0x0 - mov r4, r2 - bl fwide -_020DE9FC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0x00, 0x1A, 0x09, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xE0, 0xE3, 0x78, 0x19, 0x00, 0xEB - .byte 0x00, 0x00, 0x9D, 0xE5, 0x90, 0x04, 0x15, 0xE0, 0x06, 0x00, 0x00, 0x0A, 0x0D, 0x00, 0xD9, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x04, 0x10, 0x99, 0xE5, 0x01, 0x0B, 0xA0, 0xE1 - .byte 0xA0, 0x0E, 0xB0, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x08, 0xD0, 0x8D, 0xE2, 0x00, 0x00, 0xA0, 0xE3 - .byte 0xF8, 0x8F, 0xBD, 0xE8, 0x81, 0x09, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1, 0x81, 0x0C, 0xA0, 0x11 - .byte 0x20, 0x0F, 0xA0, 0x11, 0x02, 0x00, 0x50, 0x13, 0x08, 0x10, 0x99, 0xE5, 0x01, 0x00, 0x50, 0x13 - .byte 0x01, 0x80, 0xA0, 0xE3, 0x81, 0x0E, 0xA0, 0xE1, 0x00, 0x80, 0xA0, 0x13, 0xA0, 0x0E, 0xB0, 0xE1 - .byte 0x09, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x99, 0xE5, 0x80, 0x0D, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 - .byte 0x02, 0x00, 0x10, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x07, 0x00, 0xC1, 0xE3, 0x01, 0x10, 0x80, 0xE3 - .byte 0x09, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0x89, 0xE5, 0x68, 0xFE, 0xFF, 0xEB, 0x08, 0x00, 0x99, 0xE5 - .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A - .byte 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC9, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x08, 0xD0, 0x8D, 0xE2 - .byte 0x28, 0x00, 0x89, 0xE5, 0xF8, 0x8F, 0xBD, 0xE8, 0x00, 0x00, 0x55, 0xE3, 0x00, 0x60, 0xA0, 0xE3 - .byte 0x46, 0x00, 0x00, 0x0A, 0x1C, 0x00, 0x99, 0xE5, 0x24, 0x20, 0x99, 0xE5, 0x00, 0x00, 0x52, 0xE1 - .byte 0x00, 0x00, 0x58, 0x03, 0x41, 0x00, 0x00, 0x0A, 0x20, 0x10, 0x99, 0xE5, 0x00, 0x00, 0x42, 0xE0 - .byte 0x00, 0x00, 0x41, 0xE0, 0x28, 0x00, 0x89, 0xE5, 0x0A, 0xB0, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3 - .byte 0x28, 0x00, 0x99, 0xE5, 0x04, 0x70, 0xA0, 0xE1, 0x04, 0x00, 0x8D, 0xE5, 0x05, 0x00, 0x50, 0xE1 - .byte 0x04, 0x50, 0x8D, 0x85, 0x04, 0x00, 0x99, 0xE5, 0x80, 0x0C, 0xA0, 0xE1, 0x20, 0x0F, 0xA0, 0xE1 - .byte 0x01, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x1A, 0x04, 0x20, 0x9D, 0xE5, 0x00, 0x00, 0x52, 0xE3 - .byte 0x06, 0x00, 0x00, 0x0A, 0x0A, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x68, 0x02, 0x00, 0xEB - .byte 0x00, 0x70, 0xB0, 0xE1, 0x01, 0x00, 0x87, 0x12, 0x0A, 0x00, 0x40, 0x10, 0x04, 0x00, 0x8D, 0x15 - .byte 0x04, 0x20, 0x9D, 0xE5, 0x00, 0x00, 0x52, 0xE3, 0x0C, 0x00, 0x00, 0x0A, 0x24, 0x00, 0x99, 0xE5 - .byte 0x0A, 0x10, 0xA0, 0xE1, 0x33, 0x02, 0x00, 0xEB, 0x04, 0x20, 0x9D, 0xE5, 0x24, 0x00, 0x99, 0xE5 - .byte 0x02, 0xA0, 0x8A, 0xE0, 0x02, 0x00, 0x80, 0xE0, 0x24, 0x00, 0x89, 0xE5, 0x28, 0x10, 0x99, 0xE5 - .byte 0x04, 0x00, 0x9D, 0xE5, 0x02, 0x50, 0x45, 0xE0, 0x00, 0x00, 0x41, 0xE0, 0x28, 0x00, 0x89, 0xE5 - .byte 0x28, 0x00, 0x99, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x57, 0xE3 - .byte 0x03, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x99, 0xE5, 0x80, 0x0C, 0xA0, 0xE1, 0x20, 0x0F, 0xB0, 0xE1 - .byte 0x09, 0x00, 0x00, 0x1A, 0x09, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x4E, 0xFE, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC9, 0xE5 - .byte 0x00, 0x50, 0xA0, 0xE3, 0x28, 0x50, 0x89, 0xE5, 0x04, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x55, 0xE3, 0x00, 0x60, 0x86, 0xE0, 0x00, 0x00, 0x58, 0x13, 0xC3, 0xFF, 0xFF, 0x1A - .byte 0x00, 0x00, 0x55, 0xE3, 0x18, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x58, 0xE3, 0x16, 0x00, 0x00, 0x1A - .byte 0x1C, 0x40, 0x99, 0xE5, 0x20, 0x70, 0x99, 0xE5, 0x05, 0x20, 0x8A, 0xE0, 0x1C, 0xA0, 0x89, 0xE5 - .byte 0x20, 0x50, 0x89, 0xE5, 0x04, 0x10, 0x8D, 0xE2, 0x09, 0x00, 0xA0, 0xE1, 0x24, 0x20, 0x89, 0xE5 - .byte 0x35, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x9D, 0x05, 0x00, 0x60, 0x86, 0x00 - .byte 0x03, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC9, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x28, 0x00, 0x89, 0xE5, 0x1C, 0x40, 0x89, 0xE5, 0x09, 0x00, 0xA0, 0xE1, 0x20, 0x70, 0x89, 0xE5 - .byte 0xFA, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x89, 0xE5, 0x04, 0x00, 0x99, 0xE5 - .byte 0x00, 0x10, 0x9D, 0xE5, 0x80, 0x0C, 0xA0, 0xE1, 0x20, 0x0F, 0xA0, 0xE1, 0x02, 0x00, 0x50, 0xE3 - .byte 0x00, 0x00, 0xA0, 0x13, 0x28, 0x00, 0x89, 0x15, 0x06, 0x00, 0xA0, 0xE1, 0x82, 0x34, 0x00, 0xEB - .byte 0x08, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 - - arm_func_start fclose -fclose: ; 0x020DEC88 - stmdb sp!, {r3-r5,lr} - movs r5, r0 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r5,pc} -_020DEC98: - .byte 0x04, 0x10, 0x95, 0xE5, 0x01, 0x1B, 0xA0, 0xE1 - .byte 0xA1, 0x1E, 0xB0, 0xE1, 0x00, 0x00, 0xA0, 0x03, 0x38, 0x80, 0xBD, 0x08, 0x12, 0x00, 0x00, 0xEB - .byte 0x00, 0x40, 0xA0, 0xE1, 0x00, 0x00, 0x95, 0xE5, 0x44, 0x10, 0x95, 0xE5, 0x31, 0xFF, 0x2F, 0xE1 - .byte 0x04, 0x10, 0x95, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x0E, 0x1D, 0xC1, 0xE3, 0x04, 0x10, 0x85, 0xE5 - .byte 0x00, 0x20, 0x85, 0xE5, 0x08, 0x10, 0x95, 0xE5, 0x01, 0x1E, 0xA0, 0xE1, 0xA1, 0x1F, 0xB0, 0xE1 - .byte 0x01, 0x00, 0x42, 0x12, 0x38, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x54, 0xE3, 0x00, 0x00, 0x50, 0x03 - .byte 0x01, 0x20, 0xA0, 0x13, 0x00, 0x00, 0x62, 0xE2, 0x38, 0x80, 0xBD, 0xE8 - - arm_func_start fflush -fflush: - stmdb sp!, {r4,lr} - movs r4, r0 - bne _020DED10 - bl __flush_all - ldmia sp!, {r4,pc} -_020DED10: - ldrb r0, [r4, #0xd] - cmp r0, #0x0 - bne _020DED2C - ldr r0, [r4, #0x4] - mov r1, r0, lsl #0x16 - movs r1, r1, lsr #0x1d - bne _020DED34 -_020DED2C: - mvn r0, #0x0 - ldmia sp!, {r4,pc} -_020DED34: - mov r0, r0, lsl #0x1b - mov r0, r0, lsr #0x1d - cmp r0, #0x1 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} -_020DED48: - .byte 0x08, 0x00, 0x94, 0xE5, 0x80, 0x1E, 0xA0, 0xE1 - .byte 0xA1, 0x1E, 0xA0, 0xE1, 0x03, 0x00, 0x51, 0xE3, 0x07, 0x00, 0xC0, 0x23, 0x02, 0x00, 0x80, 0x23 - .byte 0x08, 0x00, 0x84, 0x25, 0x08, 0x00, 0x94, 0xE5, 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 - .byte 0x02, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x03, 0x28, 0x00, 0x84, 0x05, 0x08, 0x00, 0x94, 0xE5 - .byte 0x80, 0x1E, 0xA0, 0xE1, 0xA1, 0x1E, 0xA0, 0xE1, 0x01, 0x00, 0x51, 0xE3, 0x03, 0x00, 0x00, 0x0A - .byte 0x07, 0x00, 0xC0, 0xE3, 0x08, 0x00, 0x84, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x80, 0xBD, 0xE8 - .byte 0x04, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0xD3, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x10, 0xA0, 0xE3, 0x0D, 0x10, 0xC4, 0xE5 - .byte 0x28, 0x00, 0x84, 0xE5, 0x01, 0x00, 0x40, 0xE2, 0x10, 0x80, 0xBD, 0xE8, 0x08, 0x10, 0x94, 0xE5 - .byte 0x07, 0x10, 0xC1, 0xE3, 0x08, 0x10, 0x84, 0xE5, 0x18, 0x00, 0x84, 0xE5, 0x28, 0x00, 0x84, 0xE5 - .byte 0x10, 0x80, 0xBD, 0xE8 - - arm_func_start _ftell -_ftell: ; 0x020DEDE4 - ldr r1, [r0, #0x4] - mov r1, r1, lsl #0x16 - mov r1, r1, lsr #0x1d - and r1, r1, #0xff - add r1, r1, #0xff - and r1, r1, #0xff - cmp r1, #0x1 - bhi _020DEE10 - ldrb r1, [r0, #0xd] - cmp r1, #0x0 - beq _020DEE24 -_020DEE10: - ldr r0, _020DEE5C ; =0x021D74A8 - mov r1, #0x28 - str r1, [r0, #0x0] - sub r0, r1, #0x29 - bx lr -_020DEE24: - ldr r1, [r0, #0x8] - mov r1, r1, lsl #0x1d - movs r12, r1, lsr #0x1d - ldreq r0, [r0, #0x18] - bxeq lr - ldr r2, [r0, #0x24] - ldr r1, [r0, #0x1c] - ldr r3, [r0, #0x34] - sub r0, r2, r1 - cmp r12, #0x3 - add r0, r3, r0 - subcs r1, r12, #0x2 - subcs r0, r0, r1 - bx lr - .balign 4 -_020DEE5C: .word 0x021D74A8 - - arm_func_start ftell -ftell: ; 0x020DEE60 - stmdb sp!, {r3-r7,lr} - ldr r1, _020DEF60 ; =0x02106A58 - mov r7, r0 - cmp r7, r1 - moveq r6, #0x2 - beq _020DEE98 - ldr r0, _020DEF64 ; =0x02106AA4 - cmp r7, r0 - moveq r6, #0x3 - beq _020DEE98 - ldr r0, _020DEF68 ; =0x02106AF0 - cmp r7, r0 - moveq r6, #0x4 - movne r6, #0x5 -_020DEE98: - mov r0, #0x18 - mul r4, r6, r0 - ldr r5, _020DEF6C ; =0x021D70D0 - add r0, r5, r4 - bl OS_TryLockMutex -_020DEEAC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0x00, 0x00, 0x1A, 0xB4, 0x00, 0x9F, 0xE5, 0xB4, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5 - .byte 0xB0, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7 - .byte 0x06, 0x11, 0x80, 0xE7, 0x15, 0x00, 0x00, 0xEA, 0x90, 0x00, 0x9F, 0xE5, 0x90, 0x10, 0x9F, 0xE5 - .byte 0x04, 0x00, 0x90, 0xE5, 0x06, 0x11, 0x91, 0xE7, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1 - .byte 0x04, 0x00, 0x00, 0x1A, 0x7C, 0x10, 0x9F, 0xE5, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x80, 0xE2 - .byte 0x06, 0x01, 0x81, 0xE7, 0x09, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x85, 0xE0, 0x3F, 0xB4, 0xFF, 0xEB - .byte 0x58, 0x00, 0x9F, 0xE5, 0x58, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0x54, 0x00, 0x9F, 0xE5 - .byte 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7 - .byte 0x07, 0x00, 0xA0, 0xE1, 0xAA, 0xFF, 0xFF, 0xEB, 0x38, 0x10, 0x9F, 0xE5, 0x00, 0x70, 0xA0, 0xE1 - .byte 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x50, 0xE2, 0x06, 0x01, 0x81, 0xE7, 0x01, 0x00, 0x00, 0x1A - .byte 0x04, 0x00, 0x85, 0xE0, 0x11, 0xB4, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1, 0xF8, 0x80, 0xBD, 0xE8 -_020DEF60: .word 0x02106A58 -_020DEF64: .word 0x02106AA4 -_020DEF68: .word 0x02106AF0 -_020DEF6C: .word 0x021D70D0 -_020DEF70: - .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 - - arm_func_start _fseek -_fseek: ; 0x020DEF7C - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r5,lr} - mov r5, r0 - ldr r1, [r5, #0x4] - mov r4, r2 - mov r1, r1, lsl #0x16 - mov r1, r1, lsr #0x1d - and r1, r1, #0xff - cmp r1, #0x1 - ldreqb r1, [r5, #0xd] - cmpeq r1, #0x0 - beq _020DEFC8 - ldr r0, _020DF160 ; =0x021D74A8 - mov r1, #0x28 - str r1, [r0, #0x0] - sub r0, r1, #0x29 - ldmia sp!, {r3-r5,lr} - add sp, sp, #0x10 - bx lr -_020DEFC8: - ldr r1, [r5, #0x8] - mov r1, r1, lsl #0x1d - mov r1, r1, lsr #0x1d - cmp r1, #0x1 - bne _020DF018 - mov r1, #0x0 - bl __flush_buffer -_020DEFE4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3 - .byte 0x0D, 0x00, 0xC5, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x60, 0x01, 0x9F, 0xE5, 0x28, 0x10, 0xA0, 0xE3 - .byte 0x28, 0x20, 0x85, 0xE5, 0x00, 0x10, 0x80, 0xE5, 0x29, 0x00, 0x41, 0xE2, 0x38, 0x40, 0xBD, 0xE8 - .byte 0x10, 0xD0, 0x8D, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1 -_020DF018: - cmp r4, #0x1 - bne _020DF038 - mov r0, r5 - mov r4, #0x0 - bl _ftell - ldr r1, [sp, #0x14] - add r0, r1, r0 - str r0, [sp, #0x14] -_020DF038: - cmp r4, #0x2 - beq _020DF0CC - ldr r0, [r5, #0x4] - mov r0, r0, lsl #0x1b - mov r0, r0, lsr #0x1d - cmp r0, #0x3 - beq _020DF0CC - ldr r0, [r5, #0x8] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - sub r0, r0, #0x2 - cmp r0, #0x1 - bhi _020DF0CC - ldr r2, [sp, #0x14] - ldr r0, [r5, #0x18] - cmp r2, r0 - bhs _020DF088 - ldr r0, [r5, #0x34] - cmp r2, r0 - bhs _020DF098 -_020DF088: - ldr r0, [r5, #0x8] - bic r0, r0, #0x7 - str r0, [r5, #0x8] - b _020DF0D8 -_020DF098: - ldr r1, [r5, #0x1c] - sub r0, r2, r0 - add r0, r1, r0 - str r0, [r5, #0x24] - ldr r1, [r5, #0x18] - ldr r0, [sp, #0x14] - sub r0, r1, r0 - str r0, [r5, #0x28] - ldr r0, [r5, #0x8] - bic r0, r0, #0x7 - orr r0, r0, #0x2 - str r0, [r5, #0x8] - b _020DF0D8 -_020DF0CC: - ldr r0, [r5, #0x8] - bic r0, r0, #0x7 - str r0, [r5, #0x8] -_020DF0D8: - ldr r0, [r5, #0x8] - mov r0, r0, lsl #0x1d - movs r0, r0, lsr #0x1d - bne _020DF150 - ldr r12, [r5, #0x38] - cmp r12, #0x0 - beq _020DF13C - ldr r0, [r5, #0x0] - ldr r3, [r5, #0x48] - add r1, sp, #0x14 - mov r2, r4 - blx r12 - cmp r0, #0x0 - beq _020DF13C - mov r0, #0x1 - strb r0, [r5, #0xd] - mov r2, #0x0 - ldr r0, _020DF160 ; =0x021D74A8 - mov r1, #0x28 - str r2, [r5, #0x28] - str r1, [r0, #0x0] - sub r0, r1, #0x29 - ldmia sp!, {r3-r5,lr} - add sp, sp, #0x10 - bx lr -_020DF13C: - mov r1, #0x0 - strb r1, [r5, #0xc] - ldr r0, [sp, #0x14] - str r0, [r5, #0x18] - str r1, [r5, #0x28] -_020DF150: - mov r0, #0x0 - ldmia sp!, {r3-r5,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020DF160: .word 0x021D74A8 - - arm_func_start fseek -fseek: - stmdb sp!, {r3-r9,lr} - ldr r3, _020DF274 ; =0x02106A58 - mov r9, r0 - cmp r9, r3 - mov r8, r1 - mov r7, r2 - moveq r6, #0x2 - beq _020DF1A4 - ldr r0, _020DF278 ; =0x02106AA4 - cmp r9, r0 - moveq r6, #0x3 - beq _020DF1A4 - ldr r0, _020DF27C ; =0x02106AF0 - cmp r9, r0 - moveq r6, #0x4 - movne r6, #0x5 -_020DF1A4: - mov r0, #0x18 - mul r4, r6, r0 - ldr r5, _020DF280 ; =0x021D70D0 - add r0, r5, r4 - bl OS_TryLockMutex -_020DF1B8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A - .byte 0xBC, 0x00, 0x9F, 0xE5, 0xBC, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0xB8, 0x00, 0x9F, 0xE5 - .byte 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7 - .byte 0x15, 0x00, 0x00, 0xEA, 0x98, 0x00, 0x9F, 0xE5, 0x98, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5 - .byte 0x06, 0x11, 0x91, 0xE7, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A - .byte 0x84, 0x10, 0x9F, 0xE5, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x80, 0xE2, 0x06, 0x01, 0x81, 0xE7 - .byte 0x09, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x85, 0xE0, 0x7C, 0xB3, 0xFF, 0xEB, 0x60, 0x00, 0x9F, 0xE5 - .byte 0x60, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0x5C, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x91, 0xE5 - .byte 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7, 0x09, 0x00, 0xA0, 0xE1 - .byte 0x08, 0x10, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0x4B, 0xFF, 0xFF, 0xEB, 0x38, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x70, 0xA0, 0xE1, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x50, 0xE2, 0x06, 0x01, 0x81, 0xE7 - .byte 0x01, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x85, 0xE0, 0x4C, 0xB3, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1 - .byte 0xF8, 0x83, 0xBD, 0xE8 -_020DF274: .word 0x02106A58 -_020DF278: .word 0x02106AA4 -_020DF27C: .word 0x02106AF0 -_020DF280: .word 0x021D70D0 -_020DF284: - .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 - - arm_func_start rewind -rewind: ; 0x020DF290 - stmdb sp!, {r4,lr} - mov r1, #0x0 - mov r4, r0 - mov r2, r1 - strb r1, [r4, #0xd] - bl fseek -_020DF2A8: - .byte 0x00, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC4, 0xE5 - .byte 0x10, 0x80, 0xBD, 0xE8 - - arm_func_start mbtowc -mbtowc: - stmdb sp!, {r3,lr} - ldr r3, _020DF2CC ; =0x02106C98 - ldr r3, [r3, #0x8] - ldr r3, [r3, #0x0] - blx r3 - ldmia sp!, {r3,pc} - .balign 4 -_020DF2CC: .word 0x02106C98 - - arm_func_start __mbtowc_noconv -__mbtowc_noconv: ; 0x020DF2D0 - cmp r1, #0x0 - moveq r0, #0x0 - bxeq lr - cmp r2, #0x0 - mvneq r0, #0x0 - bxeq lr - cmp r0, #0x0 - ldrneb r2, [r1, #0x0] - strneh r2, [r0, #0x0] - ldrsb r0, [r1, #0x0] - cmp r0, #0x0 - moveq r0, #0x0 - movne r0, #0x1 - bx lr - - arm_func_start __wctomb_noconv -__wctomb_noconv: ; 0x020DF308 - cmp r0, #0x0 - moveq r0, #0x0 - strneb r1, [r0, #0x0] - movne r0, #0x1 - bx lr - - arm_func_start wctomb -wctomb: ; 0x020DF31C - stmdb sp!, {r3,lr} - ldr r2, _020DF334 ; =0x02106C98 - ldr r2, [r2, #0x8] - ldr r2, [r2, #0x4] - blx r2 - ldmia sp!, {r3,pc} - .balign 4 -_020DF334: .word 0x02106C98 - - arm_func_start mbstowcs -mbstowcs: ; 0x020DF338 - stmdb sp!, {r4-r8,lr} - mov r7, r1 - mov r8, r0 - mov r0, r7 - mov r6, r2 - bl strlen - mov r5, r0 - cmp r8, #0x0 - mov r4, #0x0 - beq _020DF3B8 - cmp r6, #0x0 - bls _020DF3B8 - ldrsb r0, [r7, #0x0] - cmp r0, #0x0 - beq _020DF3A0 - mov r0, r8 - mov r1, r7 - mov r2, r5 - bl mbtowc -_020DF384: - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x80, 0x88, 0xE2, 0x00, 0x70, 0x87, 0xC0 - .byte 0x00, 0x50, 0x45, 0xC0, 0x04, 0x00, 0x00, 0xCA, 0x00, 0x00, 0xE0, 0xE3, 0xF0, 0x81, 0xBD, 0xE8 -_020DF3A0: - mov r0, #0x0 - strh r0, [r8, #0x0] - b _020DF3B8 -_020DF3AC: - .byte 0x01, 0x40, 0x84, 0xE2 - .byte 0x06, 0x00, 0x54, 0xE1, 0xEB, 0xFF, 0xFF, 0x3A -_020DF3B8: - mov r0, r4 - ldmia sp!, {r4-r8,pc} - - arm_func_start wcstombs -wcstombs: ; 0x020DF3C0 - stmdb sp!, {r3-r9,lr} - movs r4, r0 - mov r9, r1 - cmpne r9, #0x0 - mov r8, r2 - mov r7, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r3-r9,pc} -_020DF3E0: - .byte 0x00, 0x60, 0x8D, 0xE2, 0xB0, 0x10, 0xD9, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x00, 0x00, 0xA0, 0x03 - .byte 0x07, 0x00, 0xC4, 0x07, 0x0D, 0x00, 0x00, 0x0A, 0x06, 0x00, 0xA0, 0xE1, 0x02, 0x90, 0x89, 0xE2 - .byte 0xC5, 0xFF, 0xFF, 0xEB, 0x00, 0x50, 0xA0, 0xE1, 0x05, 0x00, 0x87, 0xE0, 0x08, 0x00, 0x50, 0xE1 - .byte 0x06, 0x00, 0x00, 0x8A, 0x06, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x07, 0x00, 0x84, 0xE0 - .byte 0xDA, 0x0E, 0x00, 0xEB, 0x05, 0x70, 0x87, 0xE0, 0x08, 0x00, 0x57, 0xE1, 0xEC, 0xFF, 0xFF, 0x9A - .byte 0x07, 0x00, 0xA0, 0xE1, 0xF8, 0x83, 0xBD, 0xE8 - - arm_func_start memcpy -memcpy: ; 0x020DF438 - mov r12, r0 - cmp r2, #0x0 - bxeq lr -_020DF444: - ldrsb r3, [r1], #0x1 - subs r2, r2, #0x1 - strb r3, [r12], #0x1 - bne _020DF444 - bx lr - - arm_func_start memmove -memmove: ; 0x020DF458 - cmp r1, r0 - blo _020DF480 - mov r12, r0 - cmp r2, #0x0 - bxeq lr -_020DF46C: - ldrsb r3, [r1], #0x1 - subs r2, r2, #0x1 - strb r3, [r12], #0x1 - bne _020DF46C - bx lr -_020DF480: - cmp r2, #0x0 - add r3, r1, r2 - add r12, r0, r2 - bxeq lr -_020DF490: - ldrsb r1, [r3, #-0x1]! - subs r2, r2, #0x1 - strb r1, [r12, #-0x1]! - bne _020DF490 - bx lr - - arm_func_start Call_FillMemWithValue -Call_FillMemWithValue: ; 0x020DF4A4 - stmdb sp!, {r4,lr} - mov r4, r0 - bl __fill_mem - mov r0, r4 - ldmia sp!, {r4,pc} - - arm_func_start memchr -memchr: ; 0x020DF4B8 - cmp r2, #0x0 - and r3, r1, #0xff - beq _020DF4DC -_020DF4C4: - ldrb r1, [r0], #0x1 - cmp r1, r3 - subeq r0, r0, #0x1 - bxeq lr - subs r2, r2, #0x1 - bne _020DF4C4 -_020DF4DC: - mov r0, #0x0 - bx lr - - arm_func_start __memrchr -__memrchr: ; 0x020DF4E4 - cmp r2, #0x0 - and r3, r1, #0xff - add r0, r0, r2 - beq _020DF508 -_020DF4F4: - ldrb r1, [r0, #-0x1]! - cmp r1, r3 - bxeq lr - subs r2, r2, #0x1 - bne _020DF4F4 -_020DF508: - mov r0, #0x0 - bx lr - - arm_func_start memcmp -memcmp: ; 0x020DF510 - cmp r2, #0x0 - beq _020DF548 -_020DF518: - ldrb r12, [r0], #0x1 - ldrb r3, [r1], #0x1 - cmp r12, r3 - beq _020DF540 - ldrb r2, [r0, #-0x1] - ldrb r0, [r1, #-0x1] - cmp r2, r0 - mvncc r0, #0x0 - movcs r0, #0x1 - bx lr -_020DF540: - subs r2, r2, #0x1 - bne _020DF518 -_020DF548: - mov r0, #0x0 - bx lr - - arm_func_start __fill_mem -__fill_mem: ; 0x020DF550 - cmp r2, #0x20 - and r3, r1, #0xff - blo _020DF5E4 - rsb r1, r0, #0x0 - ands r12, r1, #0x3 - beq _020DF57C - sub r2, r2, r12 - and r1, r3, #0xff -_020DF570: - strb r1, [r0], #0x1 - subs r12, r12, #0x1 - bne _020DF570 -_020DF57C: - cmp r3, #0x0 - beq _020DF594 - mov r1, r3, lsl #0x10 - orr r1, r1, r3, lsl #0x18 - orr r1, r1, r3, lsl #0x8 - orr r3, r3, r1 -_020DF594: - movs r1, r2, lsr #0x5 - beq _020DF5C8 -_020DF59C: - str r3, [r0, #0x0] - str r3, [r0, #0x4] - str r3, [r0, #0x8] - str r3, [r0, #0xc] - str r3, [r0, #0x10] - str r3, [r0, #0x14] - str r3, [r0, #0x18] - str r3, [r0, #0x1c] - add r0, r0, #0x20 - subs r1, r1, #0x1 - bne _020DF59C -_020DF5C8: - and r1, r2, #0x1f - movs r1, r1, lsr #0x2 - beq _020DF5E0 -_020DF5D4: - str r3, [r0], #0x4 - subs r1, r1, #0x1 - bne _020DF5D4 -_020DF5E0: - and r2, r2, #0x3 -_020DF5E4: - cmp r2, #0x0 - bxeq lr - and r1, r3, #0xff -_020DF5F0: - strb r1, [r0], #0x1 - subs r2, r2, #0x1 - bne _020DF5F0 - bx lr - - arm_func_start parse_format_printf -parse_format_printf: ; 0x020DF600 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x10 - ldrsb r3, [r0, #0x1] - mov r4, #0x0 - mov r5, #0x1 - mov lr, r2 - strb r5, [sp, #0x0] - strb r4, [sp, #0x1] - strb r4, [sp, #0x2] - strb r4, [sp, #0x3] - strb r4, [sp, #0x4] - str r4, [sp, #0x8] - str r4, [sp, #0xc] - cmp r3, #0x25 - add r12, r0, #0x1 - bne _020DF65C - add r0, sp, #0x0 - strb r3, [sp, #0x5] - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add sp, sp, #0x10 - add r0, r12, #0x1 - ldmia sp!, {r4-r8,pc} -_020DF65C: - mov r2, #0x2 - mov r0, r4 - mov r5, r2 - mov r6, r4 - mov r7, #0x1 -_020DF670: - mov r8, r7 - cmp r3, #0x2b - bgt _020DF6A0 - bge _020DF6C8 - cmp r3, #0x23 - bgt _020DF6F8 - cmp r3, #0x20 - blt _020DF6F8 - beq _020DF6D0 - cmp r3, #0x23 - beq _020DF6E0 - b _020DF6F8 -_020DF6A0: - cmp r3, #0x30 - bgt _020DF6F8 - cmp r3, #0x2d - blt _020DF6F8 - beq _020DF6C0 - cmp r3, #0x30 - beq _020DF6E8 - b _020DF6F8 -_020DF6C0: - strb r6, [sp, #0x0] - b _020DF6FC -_020DF6C8: - strb r7, [sp, #0x1] - b _020DF6FC -_020DF6D0: - ldrb r4, [sp, #0x1] - cmp r4, #0x1 - strneb r5, [sp, #0x1] - b _020DF6FC -_020DF6E0: - strb r7, [sp, #0x3] - b _020DF6FC -_020DF6E8: - ldrb r4, [sp, #0x0] - cmp r4, #0x0 - strneb r2, [sp, #0x0] - b _020DF6FC -_020DF6F8: - mov r8, r0 -_020DF6FC: - cmp r8, #0x0 - ldrnesb r3, [r12, #0x1]! - bne _020DF670 - cmp r3, #0x2a - bne _020DF744 - ldr r0, [r1, #0x0] - add r0, r0, #0x4 - str r0, [r1, #0x0] - ldr r0, [r0, #-0x4] - str r0, [sp, #0x8] - cmp r0, #0x0 - bge _020DF73C - rsb r0, r0, #0x0 - mov r2, #0x0 - strb r2, [sp, #0x0] - str r0, [sp, #0x8] -_020DF73C: - ldrsb r3, [r12, #0x1]! - b _020DF794 -_020DF744: - ldr r4, _020DFB88 ; =0x0210430C - mov r5, #0x0 - mov r0, #0xa - b _020DF768 -_020DF754: - ldr r2, [sp, #0x8] - sub r3, r3, #0x30 - mla r6, r2, r0, r3 - ldrsb r3, [r12, #0x1]! - str r6, [sp, #0x8] -_020DF768: - cmp r3, #0x0 - blt _020DF778 - cmp r3, #0x80 - blt _020DF780 -_020DF778: - mov r2, r5 - b _020DF78C -_020DF780: - mov r2, r3, lsl #0x1 - ldrh r2, [r4, r2] - and r2, r2, #0x8 -_020DF78C: - cmp r2, #0x0 - bne _020DF754 -_020DF794: - ldr r2, [sp, #0x8] - ldr r0, _020DFB8C ; =0x000001FD - cmp r2, r0 - ble _020DF7C4 - mov r1, #0xff - add r0, sp, #0x0 - strb r1, [sp, #0x5] - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add sp, sp, #0x10 - add r0, r12, #0x1 - ldmia sp!, {r4-r8,pc} -_020DF7C4: - cmp r3, #0x2e - bne _020DF858 - ldrsb r3, [r12, #0x1]! - mov r0, #0x1 - strb r0, [sp, #0x2] - cmp r3, #0x2a - bne _020DF808 - ldr r0, [r1, #0x0] - add r0, r0, #0x4 - str r0, [r1, #0x0] - ldr r0, [r0, #-0x4] - ldrsb r3, [r12, #0x1]! - str r0, [sp, #0xc] - cmp r0, #0x0 - movlt r0, #0x0 - strltb r0, [sp, #0x2] - b _020DF858 -_020DF808: - ldr r2, _020DFB88 ; =0x0210430C - mov r4, #0x0 - mov r0, #0xa - b _020DF82C -_020DF818: - ldr r1, [sp, #0xc] - sub r3, r3, #0x30 - mla r5, r1, r0, r3 - ldrsb r3, [r12, #0x1]! - str r5, [sp, #0xc] -_020DF82C: - cmp r3, #0x0 - blt _020DF83C - cmp r3, #0x80 - blt _020DF844 -_020DF83C: - mov r1, r4 - b _020DF850 -_020DF844: - mov r1, r3, lsl #0x1 - ldrh r1, [r2, r1] - and r1, r1, #0x8 -_020DF850: - cmp r1, #0x0 - bne _020DF818 -_020DF858: - cmp r3, #0x6c - mov r0, #0x1 - bgt _020DF890 - cmp r3, #0x68 - blt _020DF884 - beq _020DF8AC - cmp r3, #0x6a - beq _020DF8F8 - cmp r3, #0x6c - beq _020DF8C8 - b _020DF91C -_020DF884: - cmp r3, #0x4c - beq _020DF8EC - b _020DF91C -_020DF890: - cmp r3, #0x74 - bgt _020DF8A0 - beq _020DF904 - b _020DF91C -_020DF8A0: - cmp r3, #0x7a - beq _020DF910 - b _020DF91C -_020DF8AC: - ldrsb r1, [r12, #0x1] - mov r2, #0x2 - strb r2, [sp, #0x4] - cmp r1, #0x68 - streqb r0, [sp, #0x4] - ldreqsb r3, [r12, #0x1]! - b _020DF920 -_020DF8C8: - ldrsb r1, [r12, #0x1] - mov r2, #0x3 - strb r2, [sp, #0x4] - cmp r1, #0x6c - bne _020DF920 - mov r1, #0x4 - strb r1, [sp, #0x4] - ldrsb r3, [r12, #0x1]! - b _020DF920 -_020DF8EC: - mov r1, #0x9 - strb r1, [sp, #0x4] - b _020DF920 -_020DF8F8: - mov r1, #0x6 - strb r1, [sp, #0x4] - b _020DF920 -_020DF904: - mov r1, #0x8 - strb r1, [sp, #0x4] - b _020DF920 -_020DF910: - mov r1, #0x7 - strb r1, [sp, #0x4] - b _020DF920 -_020DF91C: - mov r0, #0x0 -_020DF920: - cmp r0, #0x0 - ldrnesb r3, [r12, #0x1]! - strb r3, [sp, #0x5] - cmp r3, #0x61 - bgt _020DF974 - bge _020DFA5C - cmp r3, #0x47 - bgt _020DF968 - subs r0, r3, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020DFB68 -_020DF94C: - .byte 0x42, 0x00, 0x00, 0xEA - .byte 0x84, 0x00, 0x00, 0xEA, 0x83, 0x00, 0x00, 0xEA, 0x82, 0x00, 0x00, 0xEA, 0x50, 0x00, 0x00, 0xEA - .byte 0x2F, 0x00, 0x00, 0xEA, 0x4A, 0x00, 0x00, 0xEA -_020DF968: - cmp r3, #0x58 - beq _020DF9E8 - b _020DFB68 -_020DF974: - cmp r3, #0x63 - bgt _020DF984 - beq _020DFB04 - b _020DFB68 -_020DF984: - sub r0, r3, #0x64 - cmp r0, #0x14 - addls pc, pc, r0, lsl #0x2 - b _020DFB68 -_020DF994: - .byte 0x13, 0x00, 0x00, 0xEA, 0x41, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x00, 0xEA - .byte 0x3B, 0x00, 0x00, 0xEA, 0x6F, 0x00, 0x00, 0xEA, 0x0E, 0x00, 0x00, 0xEA, 0x6D, 0x00, 0x00, 0xEA - .byte 0x6C, 0x00, 0x00, 0xEA, 0x6B, 0x00, 0x00, 0xEA, 0x6A, 0x00, 0x00, 0xEA, 0x64, 0x00, 0x00, 0xEA - .byte 0x08, 0x00, 0x00, 0xEA, 0x45, 0x00, 0x00, 0xEA, 0x66, 0x00, 0x00, 0xEA, 0x65, 0x00, 0x00, 0xEA - .byte 0x56, 0x00, 0x00, 0xEA, 0x63, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA, 0x61, 0x00, 0x00, 0xEA - .byte 0x60, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA -_020DF9E8: - ldrb r0, [sp, #0x4] - cmp r0, #0x9 - moveq r0, #0xff - streqb r0, [sp, #0x5] - beq _020DFB70 - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0x1 - streq r0, [sp, #0xc] - beq _020DFB70 - ldrb r0, [sp, #0x0] - cmp r0, #0x2 - moveq r0, #0x1 - streqb r0, [sp, #0x0] - b _020DFB70 -_020DFA24: - .byte 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13 - .byte 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13, 0xFF, 0x00, 0xA0, 0x03 - .byte 0x05, 0x00, 0xCD, 0x05, 0x49, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x44, 0x00, 0x00, 0xEA -_020DFA5C: - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0xd - streq r0, [sp, #0xc] - ldrb r0, [sp, #0x4] - cmp r0, #0x2 - cmpne r0, #0x6 - cmpne r0, #0x7 - cmpne r0, #0x8 - cmpne r0, #0x4 - cmpne r0, #0x1 - moveq r0, #0xff - streqb r0, [sp, #0x5] - b _020DFB70 -_020DFA94: - .byte 0x0C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 - .byte 0x0C, 0x00, 0x8D, 0x05, 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13 - .byte 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13, 0x01, 0x00, 0x50, 0x13 - .byte 0xFF, 0x00, 0xA0, 0x03, 0x05, 0x00, 0xCD, 0x05, 0x28, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xDD, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x23, 0x00, 0x00, 0xEA - .byte 0x78, 0x30, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3, 0x03, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE3 - .byte 0x05, 0x30, 0xCD, 0xE5, 0x03, 0x20, 0xCD, 0xE5, 0x04, 0x10, 0xCD, 0xE5, 0x0C, 0x00, 0x8D, 0xE5 - .byte 0x1A, 0x00, 0x00, 0xEA -_020DFB04: - ldrb r1, [sp, #0x4] - cmp r1, #0x3 - moveq r0, #0x5 - streqb r0, [sp, #0x4] - beq _020DFB70 - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - cmpeq r1, #0x0 - movne r0, #0xff - strneb r0, [sp, #0x5] - b _020DFB70 -_020DFB30: - .byte 0x04, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x03, 0x04, 0x00, 0xCD, 0x05 - .byte 0x0A, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x13, 0x05, 0x00, 0xCD, 0x15 - .byte 0x06, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xDD, 0xE5, 0x09, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x03 - .byte 0x05, 0x00, 0xCD, 0x05, 0x01, 0x00, 0x00, 0xEA -_020DFB68: - mov r0, #0xff - strb r0, [sp, #0x5] -_020DFB70: - add r0, sp, #0x0 - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add r0, r12, #0x1 - add sp, sp, #0x10 - ldmia sp!, {r4-r8,pc} - .balign 4 -_020DFB88: .word 0x0210430C -_020DFB8C: .word 0x000001FD - - arm_func_start long2str -long2str: ; 0x020DFB90 - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x10 - movs r10, r0 - mov r0, #0x0 - mov r5, r1 - str r0, [sp, #0xc] - ldr r7, [sp, #0x4c] - mov r6, r0 - strb r0, [r5, #-0x1]! - ldrb r0, [sp, #0x43] - str r1, [sp, #0x0] - ldrb r8, [sp, #0x45] - str r0, [sp, #0x4] - ldr r0, [sp, #0x48] - ldrb r11, [sp, #0x41] - str r0, [sp, #0x8] - cmpeq r7, #0x0 - bne _020DFC04 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _020DFBF0 - cmp r8, #0x6f - beq _020DFC04 -_020DFBF0: - add sp, sp, #0x10 - mov r0, r5 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020DFC04: - cmp r8, #0x69 - bgt _020DFC2C - bge _020DFC60 - cmp r8, #0x58 - bgt _020DFC20 - beq _020DFC8C - b _020DFC94 -_020DFC20: - cmp r8, #0x64 - beq _020DFC60 - b _020DFC94 -_020DFC2C: - cmp r8, #0x6f - bgt _020DFC40 - moveq r4, #0x8 - moveq r11, #0x0 - b _020DFC94 -_020DFC40: - cmp r8, #0x78 - bgt _020DFC94 - cmp r8, #0x75 - blt _020DFC94 - beq _020DFC80 - cmp r8, #0x78 - beq _020DFC8C - b _020DFC94 -_020DFC60: - cmp r10, #0x0 - mov r4, #0xa - bge _020DFC94 - mov r0, #0x1 - cmp r10, #0x80000000 - rsbne r10, r10, #0x0 - str r0, [sp, #0xc] - b _020DFC94 -_020DFC80: - mov r4, #0xa - mov r11, #0x0 - b _020DFC94 -_020DFC8C: - mov r4, #0x10 - mov r11, #0x0 -_020DFC94: - mov r0, r10 - mov r1, r4 - bl _u32_div_f - mov r9, r1 - mov r0, r10 - mov r1, r4 - bl _u32_div_f - cmp r9, #0xa - mov r10, r0 - addlt r9, r9, #0x30 - blt _020DFCCC - cmp r8, #0x78 - addeq r9, r9, #0x57 - addne r9, r9, #0x37 -_020DFCCC: - cmp r10, #0x0 - strb r9, [r5, #-0x1]! - add r6, r6, #0x1 - bne _020DFC94 - cmp r4, #0x8 - bne _020DFD00 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrnesb r0, [r5, #0x0] - cmpne r0, #0x30 - movne r0, #0x30 - strneb r0, [r5, #-0x1]! - addne r6, r6, #0x1 -_020DFD00: - ldrb r0, [sp, #0x40] - cmp r0, #0x2 - bne _020DFD34 - ldr r0, [sp, #0xc] - ldr r7, [sp, #0x8] - cmp r0, #0x0 - cmpeq r11, #0x0 - subne r7, r7, #0x1 - cmp r4, #0x10 - bne _020DFD34 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - subne r7, r7, #0x2 -_020DFD34: - ldr r0, [sp, #0x0] - sub r1, r0, r5 - ldr r0, _020DFDD8 ; =0x000001FD - add r1, r7, r1 - cmp r1, r0 - addgt sp, sp, #0x10 - movgt r0, #0x0 - ldmgtia sp!, {r3-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - cmp r6, r7 - bge _020DFD78 - mov r0, #0x30 -_020DFD68: - add r6, r6, #0x1 - cmp r6, r7 - strb r0, [r5, #-0x1]! - blt _020DFD68 -_020DFD78: - cmp r4, #0x10 - bne _020DFD94 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x30 - strneb r8, [r5, #-0x1] - strneb r0, [r5, #-0x2]! -_020DFD94: - ldr r0, [sp, #0xc] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r5, #-0x1]! - bne _020DFDC4 - cmp r11, #0x1 - moveq r0, #0x2b - streqb r0, [r5, #-0x1]! - beq _020DFDC4 - cmp r11, #0x2 - moveq r0, #0x20 - streqb r0, [r5, #-0x1]! -_020DFDC4: - mov r0, r5 - add sp, sp, #0x10 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020DFDD8: .word 0x000001FD - - arm_func_start longlong2str -longlong2str: ; 0x020DFDDC - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x18 - mov r9, r1 - mov r1, #0x0 - mov r10, r0 - mov r6, r2 - mov r0, r1 - strb r0, [r6, #-0x1]! - ldr r0, [sp, #0x58] - cmp r9, #0x0 - str r0, [sp, #0x10] - ldrb r0, [sp, #0x4f] - cmpeq r10, #0x0 - str r2, [sp, #0x0] - str r0, [sp, #0x4] - ldr r0, [sp, #0x54] - str r1, [sp, #0x14] - str r0, [sp, #0x8] - ldrb r0, [sp, #0x4d] - mov r7, r1 - ldrb r8, [sp, #0x51] - str r0, [sp, #0xc] - ldreq r0, [sp, #0x10] - cmpeq r0, #0x0 - bne _020DFE6C - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _020DFE58 - cmp r8, #0x6f - beq _020DFE6C -_020DFE58: - add sp, sp, #0x18 - mov r0, r6 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020DFE6C: - cmp r8, #0x69 - bgt _020DFE94 - bge _020DFEC4 - cmp r8, #0x58 - bgt _020DFE88 - beq _020DFF18 - b _020DFF24 -_020DFE88: - cmp r8, #0x64 - beq _020DFEC4 - b _020DFF24 -_020DFE94: - cmp r8, #0x6f - bgt _020DFEA4 - beq _020DFEF8 - b _020DFF24 -_020DFEA4: - cmp r8, #0x78 - bgt _020DFF24 - cmp r8, #0x75 - blt _020DFF24 - beq _020DFF08 - cmp r8, #0x78 - beq _020DFF18 - b _020DFF24 -_020DFEC4: - subs r0, r10, #0x0 - sbcs r0, r9, #0x0 - mov r11, #0xa - mov r5, #0x0 - bge _020DFF24 - cmp r9, #0x80000000 - cmpeq r10, r5 - beq _020DFEEC - rsbs r10, r10, #0x0 - rsc r9, r9, #0x0 -_020DFEEC: - mov r0, #0x1 - str r0, [sp, #0x14] - b _020DFF24 -_020DFEF8: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0x8 - b _020DFF24 -_020DFF08: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0xa - b _020DFF24 -_020DFF18: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0x10 -_020DFF24: - mov r0, r10 - mov r1, r9 - mov r2, r11 - mov r3, r5 - bl _ull_mod - mov r4, r0 - mov r0, r10 - mov r1, r9 - mov r2, r11 - mov r3, r5 - bl _ll_udiv - mov r10, r0 - cmp r4, #0xa - mov r9, r1 - addlt r0, r4, #0x30 - blt _020DFF70 - cmp r8, #0x78 - addeq r0, r4, #0x57 - addne r0, r4, #0x37 -_020DFF70: - strb r0, [r6, #-0x1]! - mov r0, #0x0 - cmp r9, r0 - cmpeq r10, r0 - add r7, r7, #0x1 - bne _020DFF24 - cmp r5, #0x0 - cmpeq r11, #0x8 - bne _020DFFB0 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrnesb r0, [r6, #0x0] - cmpne r0, #0x30 - movne r0, #0x30 - strneb r0, [r6, #-0x1]! - addne r7, r7, #0x1 -_020DFFB0: - ldrb r0, [sp, #0x4c] - cmp r0, #0x2 - bne _020E0000 - ldr r0, [sp, #0x8] - str r0, [sp, #0x10] - ldr r0, [sp, #0x14] - cmp r0, #0x0 - ldreq r0, [sp, #0xc] - cmpeq r0, #0x0 - ldrne r0, [sp, #0x10] - subne r0, r0, #0x1 - strne r0, [sp, #0x10] - cmp r5, #0x0 - cmpeq r11, #0x10 - bne _020E0000 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrne r0, [sp, #0x10] - subne r0, r0, #0x2 - strne r0, [sp, #0x10] -_020E0000: - ldr r0, [sp, #0x0] - ldr r1, _020E00B8 ; =0x000001FD - sub r2, r0, r6 - ldr r0, [sp, #0x10] - add r0, r0, r2 - cmp r0, r1 - addgt sp, sp, #0x18 - movgt r0, #0x0 - ldmgtia sp!, {r3-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - ldr r0, [sp, #0x10] - cmp r7, r0 - bge _020E0050 - mov r1, #0x30 -_020E003C: - ldr r0, [sp, #0x10] - add r7, r7, #0x1 - cmp r7, r0 - strb r1, [r6, #-0x1]! - blt _020E003C -_020E0050: - cmp r5, #0x0 - cmpeq r11, #0x10 - bne _020E0070 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x30 - strneb r8, [r6, #-0x1] - strneb r0, [r6, #-0x2]! -_020E0070: - ldr r0, [sp, #0x14] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r6, #-0x1]! - bne _020E00A4 - ldr r0, [sp, #0xc] - cmp r0, #0x1 - moveq r0, #0x2b - streqb r0, [r6, #-0x1]! - beq _020E00A4 - cmp r0, #0x2 - moveq r0, #0x20 - streqb r0, [r6, #-0x1]! -_020E00A4: - mov r0, r6 - add sp, sp, #0x18 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E00B8: .word 0x000001FD - - arm_func_start double2hex -double2hex: ; 0x020E00BC - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r10,lr} - sub sp, sp, #0x44 - ldr r7, [sp, #0x80] - ldr r0, _020E056C ; =0x000001FD - mov r8, r2 - cmp r7, r0 - ldrb r6, [sp, #0x79] - ldrb r5, [sp, #0x77] - ldrb r4, [sp, #0x75] - ldr r1, [sp, #0x68] - ldr r2, [sp, #0x6c] - addgt sp, sp, #0x44 - movgt r0, #0x0 - ldmgtia sp!, {r3-r10,lr} - addgt sp, sp, #0x10 - bxgt lr - mov r10, #0x0 - mov r9, #0x20 - add r0, sp, #0x8 - add r3, sp, #0xc - strb r10, [sp, #0x8] - strh r9, [sp, #0xa] - bl __num2dec_internal2 - ldr r0, [sp, #0x68] - ldr r1, [sp, #0x6c] - bl fabs - mov r2, r0 - mov r0, r10 - mov r3, r1 - mov r1, r0 - bl _deq - bne _020E0188 - ldr r3, _020E0570 ; =0x02106DA0 - sub r0, r8, #0x6 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - add sp, sp, #0x44 - strb r2, [r8, #-0x6] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r2, [r3, #0x4] - ldrb r1, [r3, #0x5] - strb r2, [r0, #0x4] - strb r1, [r0, #0x5] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0188: - ldrb r0, [sp, #0x11] - cmp r0, #0x49 - bne _020E0298 - ldrsb r0, [sp, #0xc] - cmp r0, #0x0 - beq _020E0224 - cmp r6, #0x41 - sub r0, r8, #0x5 - bne _020E01E8 - ldr r3, _020E0574 ; =0x02106DA8 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E01E8: - ldr r3, _020E0578 ; =0x02106DB0 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0224: - cmp r6, #0x41 - sub r0, r8, #0x4 - bne _020E0264 - ldr r3, _020E057C ; =0x02106DB8 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0264: - ldr r3, _020E0580 ; =0x02106DBC - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0298: - cmp r0, #0x4e - bne _020E03A4 - ldrsb r0, [sp, #0xc] - cmp r0, #0x0 - beq _020E0330 - cmp r6, #0x41 - sub r0, r8, #0x5 - bne _020E02F4 - ldr r3, _020E0584 ; =0x02106DC0 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E02F4: - ldr r3, _020E0588 ; =0x02106DC8 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0330: - cmp r6, #0x41 - sub r0, r8, #0x4 - bne _020E0370 - ldr r3, _020E058C ; =0x02106DD0 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0370: - ldr r3, _020E0590 ; =0x02106DD4 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E03A4: - mov r3, r10 - mov r1, #0x1 - mov r0, #0x64 - add r9, sp, #0x68 - strb r1, [sp, #0x34] - strb r1, [sp, #0x35] - strb r3, [sp, #0x36] - strb r3, [sp, #0x37] - strb r3, [sp, #0x38] - str r3, [sp, #0x3c] - str r1, [sp, #0x40] - strb r0, [sp, #0x39] -_020E03D4: - rsb r1, r3, #0x7 - ldrsb r2, [r9, r3] - ldrsb r0, [r9, r1] - strb r0, [r9, r3] - add r3, r3, #0x1 - strb r2, [r9, r1] - cmp r3, #0x4 - blt _020E03D4 - ldrb r0, [sp, #0x69] - ldrb r1, [sp, #0x68] - ldr sb, _020E0594 ; =0x000007FF - mov r0, r0, lsl #0x11 - orr r1, r0, r1, lsl #0x19 - add r0, sp, #0x34 - and lr, r9, r1, lsr #0x15 - sub r12, sp, #0x8 - ldmia r0, {r0-r3} - stmia r12, {r0-r3} - rsb r0, r9, #0x400 - mov r1, r8 - add r0, lr, r0 - ldmia r12, {r2-r3} - bl long2str - cmp r6, #0x61 - moveq r1, #0x70 - movne r1, #0x50 - strb r1, [r0, #-0x1]! - mov r1, r7, lsl #0x2 - mov lr, r7 - cmp r7, #0x1 - add r8, r1, #0xb - add r12, sp, #0x68 - blt _020E04E4 - mov r9, #0x30 -_020E045C: - cmp r8, #0x40 - bge _020E04CC - ldrb r1, [r12, r8, asr #0x3] - and r2, r8, #0x7 - rsb r3, r2, #0x7 - mov r2, r1, asr r3 - sub r10, r8, #0x4 - bic r1, r8, #0x7 - bic r10, r10, #0x7 - cmp r1, r10 - add r10, r12, r8, asr #0x3 - and r1, r2, #0xff - beq _020E04A0 - ldrb r2, [r10, #-0x1] - mov r2, r2, lsl #0x8 - orr r1, r1, r2, asr r3 - and r1, r1, #0xff -_020E04A0: - and r1, r1, #0xf - cmp r1, #0xa - addcc r1, r1, #0x30 - andcc r1, r1, #0xff - blo _020E04D0 - cmp r6, #0x61 - addeq r1, r1, #0x57 - andeq r1, r1, #0xff - addne r1, r1, #0x37 - andne r1, r1, #0xff - b _020E04D0 -_020E04CC: - mov r1, r9 -_020E04D0: - sub lr, lr, #0x1 - cmp lr, #0x1 - strb r1, [r0, #-0x1]! - sub r8, r8, #0x4 - bge _020E045C -_020E04E4: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r1, #0x2e - strneb r1, [r0, #-0x1]! - mov r1, #0x31 - strb r1, [r0, #-0x1] - cmp r6, #0x61 - moveq r1, #0x78 - movne r1, #0x58 - strb r1, [r0, #-0x2]! - mov r1, #0x30 - strb r1, [r0, #-0x1]! - ldrsb r1, [sp, #0xc] - cmp r1, #0x0 - movne r1, #0x2d - strneb r1, [r0, #-0x1]! - addne sp, sp, #0x44 - ldmneia sp!, {r3-r10,lr} - addne sp, sp, #0x10 - bxne lr - cmp r4, #0x1 - moveq r1, #0x2b - streqb r1, [r0, #-0x1]! - addeq sp, sp, #0x44 - ldmeqia sp!, {r3-r10,lr} - addeq sp, sp, #0x10 - bxeq lr - cmp r4, #0x2 - moveq r1, #0x20 - streqb r1, [r0, #-0x1]! - add sp, sp, #0x44 - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E056C: .word 0x000001FD -_020E0570: .word 0x02106DA0 -_020E0574: .word 0x02106DA8 -_020E0578: .word 0x02106DB0 -_020E057C: .word 0x02106DB8 -_020E0580: .word 0x02106DBC -_020E0584: .word 0x02106DC0 -_020E0588: .word 0x02106DC8 -_020E058C: .word 0x02106DD0 -_020E0590: .word 0x02106DD4 -_020E0594: .word 0x000007FF - - arm_func_start round_decimal -round_decimal: ; 0x020E0598 - stmdb sp!, {r4,lr} - cmp r1, #0x0 - bge _020E05C0 - mov r1, #0x0 - strh r1, [r0, #0x2] - mov r1, #0x1 - strb r1, [r0, #0x4] - mov r1, #0x30 - strb r1, [r0, #0x5] - ldmia sp!, {r4,pc} -_020E05C0: - ldrb lr, [r0, #0x4] - cmp r1, lr - ldmgeia sp!, {r4,pc} -_020E05CC: - .byte 0x05, 0xC0, 0x80, 0xE2 - .byte 0x01, 0x20, 0x8C, 0xE0, 0x01, 0x20, 0x82, 0xE2, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2 - .byte 0x03, 0x3C, 0xA0, 0xE1, 0x43, 0x3C, 0xA0, 0xE1, 0x05, 0x00, 0x53, 0xE3, 0x0B, 0x00, 0x00, 0x1A - .byte 0x0E, 0xC0, 0x8C, 0xE0, 0x01, 0xC0, 0x4C, 0xE2, 0x02, 0x00, 0x5C, 0xE1, 0x02, 0x00, 0x00, 0x9A - .byte 0xD0, 0x30, 0xDC, 0xE1, 0x30, 0x00, 0x53, 0xE3, 0xF9, 0xFF, 0xFF, 0x0A, 0x02, 0x00, 0x5C, 0xE1 - .byte 0xD1, 0x30, 0x52, 0x01, 0x01, 0x40, 0x03, 0x02, 0x01, 0x40, 0xA0, 0x13, 0x01, 0x00, 0x00, 0xEA - .byte 0x01, 0x40, 0xA0, 0xC3, 0x00, 0x40, 0xA0, 0xD3, 0x00, 0x00, 0x51, 0xE3, 0x14, 0x00, 0x00, 0x0A - .byte 0x00, 0xC0, 0xA0, 0xE3, 0x01, 0xE0, 0xA0, 0xE3, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2 - .byte 0x04, 0x30, 0x83, 0xE0, 0x03, 0x3C, 0xA0, 0xE1, 0x43, 0x3C, 0xA0, 0xE1, 0x09, 0x00, 0x53, 0xE3 - .byte 0x0E, 0x40, 0xA0, 0xC1, 0x0C, 0x40, 0xA0, 0xD1, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0x53, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x41, 0xE2, 0x02, 0x00, 0x00, 0xEA - .byte 0x30, 0x30, 0x83, 0xE2, 0x00, 0x30, 0xC2, 0xE5, 0x01, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3 - .byte 0xEC, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x54, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0xF2, 0x30, 0xD0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x31, 0x10, 0xA0, 0xE3, 0x01, 0x30, 0x83, 0xE2, 0xB2, 0x30, 0xC0, 0xE1 - .byte 0x04, 0x20, 0xC0, 0xE5, 0x05, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x51, 0xE3 - .byte 0xBB, 0xFF, 0xFF, 0x0A, 0x04, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8 - - arm_func_start float2str -float2str: ; 0x020E06BC - stmdb sp!, {r0-r3} - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x2c - ldr r7, [sp, #0x68] - ldr r3, _020E0DF4 ; =0x000001FD - ldrb r6, [sp, #0x61] - ldrb r5, [sp, #0x5f] - ldrb r4, [sp, #0x5d] - cmp r7, r3 - mov r10, r0 - mov r8, r1 - mov r9, r2 - addgt sp, sp, #0x2c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - mov r12, #0x0 - mov r11, #0x20 - add r0, sp, #0x0 - add r3, sp, #0x4 - mov r1, r10 - mov r2, r8 - strb r12, [sp, #0x0] - strh r11, [sp, #0x2] - bl __num2dec_internal2 - ldrb r0, [sp, #0x8] - add r1, sp, #0x9 - add r0, r1, r0 - b _020E074C -_020E0734: - ldrb r2, [sp, #0x8] - ldrsh r1, [sp, #0x6] - sub r2, r2, #0x1 - add r1, r1, #0x1 - strb r2, [sp, #0x8] - strh r1, [sp, #0x6] -_020E074C: - ldrb r1, [sp, #0x8] - cmp r1, #0x1 - bls _020E0764 - ldrsb r1, [r0, #-0x1]! - cmp r1, #0x30 - beq _020E0734 -_020E0764: - ldrb r0, [sp, #0x9] - cmp r0, #0x30 - beq _020E0784 - cmp r0, #0x49 - beq _020E0790 - cmp r0, #0x4e - beq _020E08F0 - b _020E0A44 -_020E0784: - mov r0, #0x0 - strh r0, [sp, #0x6] - b _020E0A44 -_020E0790: - mov r2, #0x0 - mov r0, r10 - mov r1, r8 - mov r3, r2 - bl _dls - bhs _020E0854 - cmp r6, #0x0 - sub r0, r9, #0x5 - blt _020E07BC - cmp r6, #0x80 - blt _020E07C4 -_020E07BC: - mov r1, #0x0 - b _020E07D4 -_020E07C4: - ldr r1, _020E0DF8 ; =0x0210430C - mov r2, r6, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020E07D4: - cmp r1, #0x0 - beq _020E0818 - ldr r3, _020E0DFC ; =0x02106DA8 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0818: - ldr r3, _020E0E00 ; =0x02106DB0 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0854: - cmp r6, #0x0 - sub r0, r9, #0x4 - blt _020E0868 - cmp r6, #0x80 - blt _020E0870 -_020E0868: - mov r1, #0x0 - b _020E0880 -_020E0870: - ldr r1, _020E0DF8 ; =0x0210430C - mov r2, r6, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020E0880: - cmp r1, #0x0 - beq _020E08BC - ldr r3, _020E0E04 ; =0x02106DB8 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E08BC: - ldr r3, _020E0E08 ; =0x02106DBC - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E08F0: - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - beq _020E09A8 - cmp r6, #0x0 - sub r0, r9, #0x5 - blt _020E0910 - cmp r6, #0x80 - blt _020E0918 -_020E0910: - mov r1, #0x0 - b _020E0928 -_020E0918: - ldr r1, _020E0DF8 ; =0x0210430C - mov r2, r6, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020E0928: - cmp r1, #0x0 - beq _020E096C - ldr r3, _020E0E0C ; =0x02106DC0 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E096C: - ldr r3, _020E0E10 ; =0x02106DC8 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E09A8: - cmp r6, #0x0 - sub r0, r9, #0x4 - blt _020E09BC - cmp r6, #0x80 - blt _020E09C4 -_020E09BC: - mov r1, #0x0 - b _020E09D4 -_020E09C4: - ldr r1, _020E0DF8 ; =0x0210430C - mov r2, r6, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020E09D4: - cmp r1, #0x0 - beq _020E0A10 - ldr r3, _020E0E14 ; =0x02106DD0 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0A10: - ldr r3, _020E0E18 ; =0x02106DD4 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0A44: - ldrb r0, [sp, #0x8] - ldrsh r1, [sp, #0x6] - sub r8, r9, #0x1 - sub r0, r0, #0x1 - add r0, r1, r0 - strh r0, [sp, #0x6] - mov r0, #0x0 - strb r0, [r8, #0x0] - cmp r6, #0x65 - bgt _020E0A98 - bge _020E0B24 - cmp r6, #0x47 - bgt _020E0DE0 - cmp r6, #0x45 - blt _020E0DE0 - beq _020E0B24 - cmp r6, #0x46 - beq _020E0C6C - cmp r6, #0x47 - beq _020E0AB0 - b _020E0DE0 -_020E0A98: - cmp r6, #0x66 - bgt _020E0AA8 - beq _020E0C6C - b _020E0DE0 -_020E0AA8: - cmp r6, #0x67 - bne _020E0DE0 -_020E0AB0: - ldrb r0, [sp, #0x8] - cmp r0, r7 - ble _020E0AC8 - add r0, sp, #0x4 - mov r1, r7 - bl round_decimal -_020E0AC8: - ldrsh r2, [sp, #0x6] - mvn r0, #0x3 - cmp r2, r0 - blt _020E0AE0 - cmp r2, r7 - blt _020E0B00 -_020E0AE0: - cmp r5, #0x0 - ldreqb r0, [sp, #0x8] - subne r7, r7, #0x1 - subeq r7, r0, #0x1 - cmp r6, #0x67 - moveq r6, #0x65 - movne r6, #0x45 - b _020E0B24 -_020E0B00: - cmp r5, #0x0 - addne r0, r2, #0x1 - subne r7, r7, r0 - bne _020E0C6C - ldrb r1, [sp, #0x8] - add r0, r2, #0x1 - subs r7, r1, r0 - movmi r7, #0x0 - b _020E0C6C -_020E0B24: - ldrb r0, [sp, #0x8] - add r1, r7, #0x1 - cmp r0, r1 - ble _020E0B3C - add r0, sp, #0x4 - bl round_decimal -_020E0B3C: - ldrsh lr, [sp, #0x6] - mov r11, #0x2b - mov r10, #0x0 - cmp lr, #0x0 - rsblt lr, lr, #0x0 - movlt r11, #0x2d - ldr r3, _020E0E1C ; =0x66666667 - mov r0, #0xa - b _020E0B90 -_020E0B60: - mov r1, lr, lsr #0x1f - smull r2, r12, r3, lr - add r12, r1, r12, asr #0x2 - smull r1, r2, r0, r12 - sub r12, lr, r1 - add r1, r12, #0x30 - strb r1, [r8, #-0x1]! - mov r2, lr - smull r1, lr, r3, r2 - mov r1, r2, lsr #0x1f - add lr, r1, lr, asr #0x2 - add r10, r10, #0x1 -_020E0B90: - cmp lr, #0x0 - bne _020E0B60 - cmp r10, #0x2 - blt _020E0B60 - strb r11, [r8, #-0x1] - strb r6, [r8, #-0x2]! - sub r1, r9, r8 - ldr r0, _020E0DF4 ; =0x000001FD - add r1, r7, r1 - cmp r1, r0 - addgt sp, sp, #0x2c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - ldrb r1, [sp, #0x8] - add r0, r7, #0x1 - cmp r1, r0 - bge _020E0BFC - add r0, r7, #0x2 - sub r0, r0, r1 - subs r1, r0, #0x1 - beq _020E0BFC - mov r0, #0x30 -_020E0BF0: - strb r0, [r8, #-0x1]! - subs r1, r1, #0x1 - bne _020E0BF0 -_020E0BFC: - ldrb r1, [sp, #0x8] - add r0, sp, #0x9 - add r2, r0, r1 - subs r1, r1, #0x1 - beq _020E0C20 -_020E0C10: - ldrsb r0, [r2, #-0x1]! - subs r1, r1, #0x1 - strb r0, [r8, #-0x1]! - bne _020E0C10 -_020E0C20: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r0, #0x2e - strneb r0, [r8, #-0x1]! - ldrb r0, [sp, #0x9] - strb r0, [r8, #-0x1]! - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r8, #-0x1]! - bne _020E0DE0 - cmp r4, #0x1 - moveq r0, #0x2b - streqb r0, [r8, #-0x1]! - beq _020E0DE0 - cmp r4, #0x2 - moveq r0, #0x20 - streqb r0, [r8, #-0x1]! - b _020E0DE0 -_020E0C6C: - ldrsh r3, [sp, #0x6] - ldrb r2, [sp, #0x8] - sub r0, r2, r3 - subs r1, r0, #0x1 - movmi r1, #0x0 - cmp r1, r7 - ble _020E0CAC - sub r1, r1, r7 - add r0, sp, #0x4 - sub r1, r2, r1 - bl round_decimal - ldrsh r3, [sp, #0x6] - ldrb r2, [sp, #0x8] - sub r0, r2, r3 - subs r1, r0, #0x1 - movmi r1, #0x0 -_020E0CAC: - adds r0, r3, #0x1 - movmi r0, #0x0 - ldr r3, _020E0DF4 ; =0x000001FD - add r6, r0, r1 - cmp r6, r3 - addgt sp, sp, #0x2c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - add r3, sp, #0x9 - sub r6, r7, r1 - cmp r6, #0x0 - add r2, r3, r2 - mov r9, #0x0 - ble _020E0D00 - mov r3, #0x30 -_020E0CF0: - add r9, r9, #0x1 - cmp r9, r6 - strb r3, [r8, #-0x1]! - blt _020E0CF0 -_020E0D00: - mov r6, #0x0 - b _020E0D14 -_020E0D08: - ldrsb r3, [r2, #-0x1]! - add r6, r6, #0x1 - strb r3, [r8, #-0x1]! -_020E0D14: - cmp r6, r1 - ldrltb r3, [sp, #0x8] - cmplt r6, r3 - blt _020E0D08 - cmp r6, r1 - bge _020E0D40 - mov r3, #0x30 -_020E0D30: - add r6, r6, #0x1 - cmp r6, r1 - strb r3, [r8, #-0x1]! - blt _020E0D30 -_020E0D40: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r1, #0x2e - strneb r1, [r8, #-0x1]! - cmp r0, #0x0 - beq _020E0DA8 - ldrb r1, [sp, #0x8] - mov r5, #0x0 - sub r1, r0, r1 - cmp r1, #0x0 - ble _020E0D88 - mov r3, #0x30 -_020E0D70: - strb r3, [r8, #-0x1]! - ldrb r1, [sp, #0x8] - add r5, r5, #0x1 - sub r1, r0, r1 - cmp r5, r1 - blt _020E0D70 -_020E0D88: - cmp r5, r0 - bge _020E0DB0 -_020E0D90: - ldrsb r1, [r2, #-0x1]! - add r5, r5, #0x1 - cmp r5, r0 - strb r1, [r8, #-0x1]! - blt _020E0D90 - b _020E0DB0 -_020E0DA8: - mov r0, #0x30 - strb r0, [r8, #-0x1]! -_020E0DB0: - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r8, #-0x1]! - bne _020E0DE0 - cmp r4, #0x1 - moveq r0, #0x2b - streqb r0, [r8, #-0x1]! - beq _020E0DE0 - cmp r4, #0x2 - moveq r0, #0x20 - streqb r0, [r8, #-0x1]! -_020E0DE0: - mov r0, r8 - add sp, sp, #0x2c - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E0DF4: .word 0x000001FD -_020E0DF8: .word 0x0210430C -_020E0DFC: .word 0x02106DA8 -_020E0E00: .word 0x02106DB0 -_020E0E04: .word 0x02106DB8 -_020E0E08: .word 0x02106DBC -_020E0E0C: .word 0x02106DC0 -_020E0E10: .word 0x02106DC8 -_020E0E14: .word 0x02106DD0 -_020E0E18: .word 0x02106DD4 -_020E0E1C: .word 0x66666667 -__pformatter: - stmdb sp!, {r0-r3} - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x22c - mov r3, #0x20 - mov r11, r2 - strb r3, [sp, #0x19] - ldrsb r2, [r11, #0x0] - mov r9, r0 - mov r8, r1 - cmp r2, #0x0 - mov r10, #0x0 - beq _020E1628 -_020E0E50: - mov r0, r11 - mov r1, #0x25 - bl strchr - str r0, [sp, #0xc] - cmp r0, #0x0 - bne _020E0EA4 - mov r0, r11 - bl strlen - movs r2, r0 - add r10, r10, r2 - beq _020E1628 - mov r0, r8 - mov r1, r11 - blx r9 - cmp r0, #0x0 - bne _020E1628 - add sp, sp, #0x22c - mvn r0, #0x0 - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0EA4: - subs r2, r0, r11 - add r10, r10, r2 - beq _020E0ED4 - mov r0, r8 - mov r1, r11 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E0ED4: - ldr r0, [sp, #0xc] - add r1, sp, #0x25c - add r2, sp, #0x1c - bl parse_format_printf - ldrb r1, [sp, #0x21] - mov r11, r0 - cmp r1, #0x61 - bgt _020E0F40 - bge _020E12A4 - cmp r1, #0x47 - bgt _020E0F34 - subs r0, r1, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020E0F28 -_020E0F0C: - .byte 0xE4, 0x00, 0x00, 0xEA - .byte 0x5D, 0x01, 0x00, 0xEA, 0x5C, 0x01, 0x00, 0xEA, 0x5B, 0x01, 0x00, 0xEA, 0xC6, 0x00, 0x00, 0xEA - .byte 0xC5, 0x00, 0x00, 0xEA, 0xC4, 0x00, 0x00, 0xEA -_020E0F28: - cmp r1, #0x25 - beq _020E1478 - b _020E148C -_020E0F34: - cmp r1, #0x58 - beq _020E1100 - b _020E148C -_020E0F40: - cmp r1, #0x75 - bgt _020E0FA8 - subs r0, r1, #0x64 - addpl pc, pc, r0, lsl #0x2 - b _020E0F9C -_020E0F54: - .byte 0x19, 0x00, 0x00, 0xEA, 0xB7, 0x00, 0x00, 0xEA, 0xB6, 0x00, 0x00, 0xEA - .byte 0xB5, 0x00, 0x00, 0xEA, 0x48, 0x01, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x46, 0x01, 0x00, 0xEA - .byte 0x45, 0x01, 0x00, 0xEA, 0x44, 0x01, 0x00, 0xEA, 0x43, 0x01, 0x00, 0xEA, 0x12, 0x01, 0x00, 0xEA - .byte 0x5E, 0x00, 0x00, 0xEA, 0x40, 0x01, 0x00, 0xEA, 0x3F, 0x01, 0x00, 0xEA, 0x3E, 0x01, 0x00, 0xEA - .byte 0xDD, 0x00, 0x00, 0xEA, 0x3C, 0x01, 0x00, 0xEA, 0x58, 0x00, 0x00, 0xEA -_020E0F9C: - cmp r1, #0x63 - beq _020E1458 - b _020E148C -_020E0FA8: - cmp r1, #0x78 - bgt _020E0FB8 - beq _020E1100 - b _020E148C -_020E0FB8: - cmp r1, #0xff - b _020E148C -_020E0FC0: - .byte 0x20, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5 - .byte 0x04, 0x10, 0x81, 0xE2, 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x50, 0x11, 0xE5, 0x25, 0x00, 0x00, 0xEA - .byte 0x04, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5, 0x08, 0x20, 0x81, 0xE2 - .byte 0x5C, 0x22, 0x8D, 0xE5, 0x08, 0x10, 0x12, 0xE5, 0x10, 0x10, 0x8D, 0xE5, 0x04, 0x10, 0x12, 0xE5 - .byte 0x14, 0x10, 0x8D, 0xE5, 0x1B, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A - .byte 0x5C, 0x12, 0x9D, 0xE5, 0x08, 0x20, 0x81, 0xE2, 0x5C, 0x22, 0x8D, 0xE5, 0x08, 0x10, 0x12, 0xE5 - .byte 0x10, 0x10, 0x8D, 0xE5, 0x04, 0x10, 0x12, 0xE5, 0x14, 0x10, 0x8D, 0xE5, 0x11, 0x00, 0x00, 0xEA - .byte 0x07, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2 - .byte 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x50, 0x11, 0xE5, 0x0A, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x50, 0xE3 - .byte 0x04, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2, 0x5C, 0x12, 0x8D, 0xE5 - .byte 0x04, 0x50, 0x11, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x5C, 0x12, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2 - .byte 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x50, 0x11, 0xE5, 0x02, 0x00, 0x50, 0xE3, 0x05, 0x18, 0xA0, 0x01 - .byte 0x41, 0x58, 0xA0, 0x01, 0x01, 0x00, 0x50, 0xE3, 0x05, 0x1C, 0xA0, 0x01, 0x41, 0x5C, 0xA0, 0x01 - .byte 0x04, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13, 0x1C, 0x00, 0x8D, 0xE2, 0x0A, 0x00, 0x00, 0x1A - .byte 0x04, 0x40, 0x4D, 0xE2, 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x84, 0xE8, 0x00, 0x30, 0x94, 0xE5 - .byte 0x10, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x9D, 0xE5, 0x8B, 0x2F, 0x8D, 0xE2, 0x46, 0xFB, 0xFF, 0xEB - .byte 0x00, 0x70, 0xB0, 0xE1, 0xF0, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x00, 0xEA, 0x08, 0x40, 0x4D, 0xE2 - .byte 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x84, 0xE8, 0x8B, 0x1F, 0x8D, 0xE2, 0x05, 0x00, 0xA0, 0xE1 - .byte 0x0C, 0x00, 0x94, 0xE8, 0xA9, 0xFA, 0xFF, 0xEB, 0x00, 0x70, 0xB0, 0xE1, 0xE6, 0x00, 0x00, 0x0A - .byte 0x02, 0x0C, 0x8D, 0xE2, 0x2B, 0x00, 0x80, 0xE2, 0x07, 0x60, 0x40, 0xE0, 0xF5, 0x00, 0x00, 0xEA -_020E1100: - ldrb r0, [sp, #0x20] - cmp r0, #0x3 - bne _020E1120 - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] - b _020E11B8 -_020E1120: - cmp r0, #0x4 - bne _020E1148 - ldr r1, [sp, #0x25c] - add r2, r1, #0x8 - str r2, [sp, #0x25c] - ldr r1, [r2, #-0x8] - str r1, [sp, #0x10] - ldr r1, [r2, #-0x4] - str r1, [sp, #0x14] - b _020E11B8 -_020E1148: - cmp r0, #0x6 - bne _020E1170 - ldr r1, [sp, #0x25c] - add r2, r1, #0x8 - str r2, [sp, #0x25c] - ldr r1, [r2, #-0x8] - str r1, [sp, #0x10] - ldr r1, [r2, #-0x4] - str r1, [sp, #0x14] - b _020E11B8 -_020E1170: - cmp r0, #0x7 - bne _020E118C - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] - b _020E11B8 -_020E118C: - cmp r0, #0x8 - bne _020E11A8 - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] - b _020E11B8 -_020E11A8: - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] -_020E11B8: - cmp r0, #0x2 - moveq r1, r5, lsl #0x10 - moveq r5, r1, lsr #0x10 - cmp r0, #0x1 - andeq r5, r5, #0xff - cmp r0, #0x4 - cmpne r0, #0x6 - add r0, sp, #0x1c - bne _020E1208 - sub r4, sp, #0x4 - ldmia r0, {r0-r3} - stmia r4, {r0-r3} - ldr r3, [r4, #0x0] - ldr r0, [sp, #0x10] - ldr r1, [sp, #0x14] - add r2, sp, #0x22c - bl longlong2str - movs r7, r0 - beq _020E148C - b _020E122C -_020E1208: - sub r4, sp, #0x8 - ldmia r0, {r0-r3} - stmia r4, {r0-r3} - add r1, sp, #0x22c - mov r0, r5 - ldmia r4, {r2-r3} - bl long2str - movs r7, r0 - beq _020E148C -_020E122C: - add r0, sp, #0x200 - add r0, r0, #0x2b - sub r6, r0, r7 - b _020E14D8 -_020E123C: - .byte 0x20, 0x00, 0xDD, 0xE5 - .byte 0x09, 0x00, 0x50, 0xE3, 0x5C, 0x02, 0x9D, 0x15, 0x08, 0x00, 0x80, 0x12, 0x5C, 0x02, 0x8D, 0x15 - .byte 0x02, 0x00, 0x00, 0x1A, 0x5C, 0x02, 0x9D, 0xE5, 0x08, 0x00, 0x80, 0xE2, 0x5C, 0x02, 0x8D, 0xE5 - .byte 0x08, 0x70, 0x10, 0xE5, 0x04, 0x60, 0x10, 0xE5, 0x1C, 0x00, 0x8D, 0xE2, 0x04, 0x40, 0x4D, 0xE2 - .byte 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x84, 0xE8, 0x00, 0x30, 0x94, 0xE5, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x06, 0x10, 0xA0, 0xE1, 0x8B, 0x2F, 0x8D, 0xE2, 0x0B, 0xFD, 0xFF, 0xEB, 0x00, 0x70, 0xB0, 0xE1 - .byte 0x7D, 0x00, 0x00, 0x0A, 0x02, 0x0C, 0x8D, 0xE2, 0x2B, 0x00, 0x80, 0xE2, 0x07, 0x60, 0x40, 0xE0 - .byte 0x8C, 0x00, 0x00, 0xEA -_020E12A4: - ldrb r0, [sp, #0x20] - cmp r0, #0x9 - ldrne r0, [sp, #0x25c] - addne r0, r0, #0x8 - strne r0, [sp, #0x25c] - bne _020E12C8 - ldr r0, [sp, #0x25c] - add r0, r0, #0x8 - str r0, [sp, #0x25c] -_020E12C8: - ldr r7, [r0, #-0x8] - ldr r6, [r0, #-0x4] - add r0, sp, #0x1c - sub r4, sp, #0x4 - ldmia r0, {r0-r3} - stmia r4, {r0-r3} - ldr r3, [r4, #0x0] - mov r0, r7 - mov r1, r6 - add r2, sp, #0x22c - bl double2hex - movs r7, r0 - beq _020E148C - add r0, sp, #0x200 - add r0, r0, #0x2b - sub r6, r0, r7 - b _020E14D8 -_020E130C: - .byte 0x20, 0x00, 0xDD, 0xE5 - .byte 0x05, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x00, 0x1A, 0x5C, 0x02, 0x9D, 0xE5, 0x02, 0x2C, 0xA0, 0xE3 - .byte 0x04, 0x00, 0x80, 0xE2, 0x5C, 0x02, 0x8D, 0xE5, 0x04, 0x10, 0x10, 0xE5, 0x2C, 0x00, 0x8D, 0xE2 - .byte 0x00, 0x00, 0x51, 0xE3, 0x00, 0x13, 0x9F, 0x05, 0x20, 0xF8, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x51, 0x00, 0x00, 0xBA, 0x2C, 0x70, 0x8D, 0xE2, 0x03, 0x00, 0x00, 0xEA, 0x5C, 0x02, 0x9D, 0xE5 - .byte 0x04, 0x00, 0x80, 0xE2, 0x5C, 0x02, 0x8D, 0xE5, 0x04, 0x70, 0x10, 0xE5, 0x1F, 0x00, 0xDD, 0xE5 - .byte 0x00, 0x00, 0x57, 0xE3, 0xD4, 0x72, 0x9F, 0x05, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A - .byte 0x1E, 0x00, 0xDD, 0xE5, 0x01, 0x60, 0xD7, 0xE4, 0x00, 0x00, 0x50, 0xE3, 0x55, 0x00, 0x00, 0x0A - .byte 0x28, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x56, 0xE1, 0x00, 0x60, 0xA0, 0xC1, 0x51, 0x00, 0x00, 0xEA - .byte 0x1E, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0x28, 0x60, 0x9D, 0xE5 - .byte 0x07, 0x00, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x41, 0xF8, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x07, 0x60, 0x40, 0x10, 0x46, 0x00, 0x00, 0xEA, 0x07, 0x00, 0xA0, 0xE1 - .byte 0xB9, 0x06, 0x00, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x42, 0x00, 0x00, 0xEA, 0x5C, 0x12, 0x9D, 0xE5 - .byte 0x20, 0x00, 0xDD, 0xE5, 0x04, 0x10, 0x81, 0xE2, 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x10, 0x11, 0xE5 - .byte 0x08, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x8B, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA - .byte 0x89, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x11, 0x00, 0x00, 0xEA - .byte 0x85, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA - .byte 0x00, 0xA0, 0x81, 0xE5, 0x80, 0x00, 0x00, 0xEA, 0xB0, 0xA0, 0xC1, 0xE1, 0x7E, 0x00, 0x00, 0xEA - .byte 0x00, 0xA0, 0x81, 0xE5, 0x7C, 0x00, 0x00, 0xEA, 0x00, 0xA0, 0x81, 0xE5, 0xCA, 0x0F, 0xA0, 0xE1 - .byte 0x04, 0x00, 0x81, 0xE5, 0x78, 0x00, 0x00, 0xEA, 0x00, 0xA0, 0x81, 0xE5, 0x76, 0x00, 0x00, 0xEA - .byte 0x00, 0xA0, 0x81, 0xE5, 0x74, 0x00, 0x00, 0xEA, 0x00, 0xA0, 0x81, 0xE5, 0xCA, 0x0F, 0xA0, 0xE1 - .byte 0x04, 0x00, 0x81, 0xE5, 0x70, 0x00, 0x00, 0xEA -_020E1458: - ldr r0, [sp, #0x25c] - add r7, sp, #0x2c - add r0, r0, #0x4 - str r0, [sp, #0x25c] - ldr r0, [r0, #-0x4] - mov r6, #0x1 - strb r0, [sp, #0x2c] - b _020E14D8 -_020E1478: - mov r0, #0x25 - strb r0, [sp, #0x2c] - add r7, sp, #0x2c - mov r6, #0x1 - b _020E14D8 -_020E148C: - ldr r0, [sp, #0xc] - bl strlen - movs r4, r0 - beq _020E14C4 - ldr r1, [sp, #0xc] - mov r0, r8 - mov r2, r4 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E14C4: - add sp, sp, #0x22c - add r0, r10, r4 - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E14D8: - ldrb r0, [sp, #0x1c] - mov r4, r6 - cmp r0, #0x0 - beq _020E158C - cmp r0, #0x2 - moveq r0, #0x30 - movne r0, #0x20 - strb r0, [sp, #0x19] - ldrsb r0, [r7, #0x0] - cmp r0, #0x2b - cmpne r0, #0x2d - cmpne r0, #0x20 - bne _020E1548 - ldrsb r0, [sp, #0x19] - cmp r0, #0x30 - bne _020E1548 - mov r0, r8 - mov r1, r7 - mov r2, #0x1 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - add r7, r7, #0x1 - sub r6, r6, #0x1 -_020E1548: - ldr r0, [sp, #0x24] - cmp r4, r0 - bge _020E158C -_020E1554: - mov r0, r8 - add r1, sp, #0x19 - mov r2, #0x1 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x24] - add r4, r4, #0x1 - cmp r4, r0 - blt _020E1554 -_020E158C: - cmp r6, #0x0 - beq _020E15BC - mov r0, r8 - mov r1, r7 - mov r2, r6 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E15BC: - ldrb r0, [sp, #0x1c] - cmp r0, #0x0 - bne _020E1618 - ldr r0, [sp, #0x24] - cmp r4, r0 - bge _020E1618 - mov r6, #0x20 - add r7, sp, #0x18 -_020E15DC: - mov r0, r8 - mov r1, r7 - mov r2, #0x1 - strb r6, [sp, #0x18] - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x24] - add r4, r4, #0x1 - cmp r4, r0 - blt _020E15DC -_020E1618: - add r10, r10, r4 - ldrsb r0, [r11, #0x0] - cmp r0, #0x0 - bne _020E0E50 -_020E1628: - mov r0, r10 - add sp, sp, #0x22c - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E163C: - .byte 0xD8, 0x6D, 0x10, 0x02 - .byte 0xDC, 0x6D, 0x10, 0x02 - - arm_func_start __FileWrite -__FileWrite: ; 0x020E1644 - stmdb sp!, {r3-r5,lr} - mov r5, r0 - mov r0, r1 - mov r3, r5 - mov r1, #0x1 - mov r4, r2 - bl __fwrite -_020E1660: - .byte 0x00, 0x00, 0x54, 0xE1, 0x00, 0x50, 0xA0, 0x13, 0x05, 0x00, 0xA0, 0xE1, 0x38, 0x80, 0xBD, 0xE8 - - arm_func_start __StringWrite -__StringWrite: ; 0x020E1670 - stmdb sp!, {r3-r5,lr} - mov r4, r0 - ldr r3, [r4, #0x8] - mov r5, r2 - ldr r2, [r4, #0x4] - add r0, r3, r5 - cmp r0, r2 - ldr r0, [r4, #0x0] - subhi r5, r2, r3 - mov r2, r5 - add r0, r0, r3 - bl memcpy - ldr r1, [r4, #0x8] - mov r0, #0x1 - add r1, r1, r5 - str r1, [r4, #0x8] - ldmia sp!, {r3-r5,pc} - - arm_func_start printf -printf: ; 0x020E16B4 - stmdb sp!, {r0-r3} - stmdb sp!, {r4,lr} - ldr r0, _020E17B4 ; =0x02106AA4 - mvn r1, #0x0 - bl fwide -_020E16C8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xE0, 0xA3 - .byte 0x10, 0x40, 0xBD, 0xA8, 0x10, 0xD0, 0x8D, 0xA2, 0x1E, 0xFF, 0x2F, 0xA1, 0xD4, 0x00, 0x9F, 0xE5 - .byte 0xFF, 0xA9, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A, 0xC8, 0x00, 0x9F, 0xE5 - .byte 0xC8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0xC4, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x0C, 0x30, 0x81, 0xE5, 0x0C, 0x20, 0x80, 0xE5, 0x15, 0x00, 0x00, 0xEA - .byte 0xA4, 0x00, 0x9F, 0xE5, 0xA4, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5, 0x0C, 0x10, 0x91, 0xE5 - .byte 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A, 0x90, 0x00, 0x9F, 0xE5 - .byte 0x0C, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2, 0x0C, 0x10, 0x80, 0xE5, 0x09, 0x00, 0x00, 0xEA - .byte 0x70, 0x00, 0x9F, 0xE5, 0x31, 0xAA, 0xFF, 0xEB, 0x6C, 0x00, 0x9F, 0xE5, 0x6C, 0x10, 0x9F, 0xE5 - .byte 0x04, 0x20, 0x90, 0xE5, 0x68, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x0C, 0x30, 0x81, 0xE5, 0x0C, 0x20, 0x80, 0xE5, 0x08, 0x00, 0x8D, 0xE2, 0x03, 0x30, 0xC0, 0xE3 - .byte 0x08, 0x20, 0x9D, 0xE5, 0x4C, 0x00, 0x9F, 0xE5, 0x34, 0x10, 0x9F, 0xE5, 0x04, 0x30, 0x83, 0xE2 - .byte 0xA6, 0xFD, 0xFF, 0xEB, 0x38, 0x10, 0x9F, 0xE5, 0x00, 0x40, 0xA0, 0xE1, 0x0C, 0x00, 0x91, 0xE5 - .byte 0x01, 0x00, 0x50, 0xE2, 0x0C, 0x00, 0x81, 0xE5, 0x01, 0x00, 0x00, 0x1A, 0x14, 0x00, 0x9F, 0xE5 - .byte 0xFE, 0xA9, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x10, 0xD0, 0x8D, 0xE2 - .byte 0x1E, 0xFF, 0x2F, 0xE1 -_020E17B4: .word 0x02106AA4 -_020E17B8: - .byte 0x18, 0x71, 0x1D, 0x02, 0x98, 0x34, 0x1D, 0x02 - .byte 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0x44, 0x16, 0x0E, 0x02 - - arm_func_start vsnprintf -vsnprintf: ; 0x020E17CC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - mov r5, r0 - mov r4, r1 - mov r12, #0x0 - ldr r0, _020E1830 ; =__StringWrite - add r1, sp, #0x0 - str r5, [sp, #0x0] - str r4, [sp, #0x4] - str r12, [sp, #0x8] - bl __pformatter -_020E17F8: - .byte 0x00, 0x00, 0x55, 0xE3, 0x0C, 0xD0, 0x8D, 0x02 - .byte 0x30, 0x80, 0xBD, 0x08, 0x04, 0x00, 0x50, 0xE1, 0x00, 0x10, 0xA0, 0x33, 0x0C, 0xD0, 0x8D, 0x32 - .byte 0x00, 0x10, 0xC5, 0x37, 0x30, 0x80, 0xBD, 0x38, 0x00, 0x00, 0x54, 0xE3, 0x04, 0x10, 0x85, 0x10 - .byte 0x00, 0x20, 0xA0, 0x13, 0x01, 0x20, 0x41, 0x15, 0x0C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 -_020E1830: .word __StringWrite - - arm_func_start snprintf -snprintf: ; 0x020E1834 - stmdb sp!, {r0-r3} - stmdb sp!, {r3,lr} - add r3, sp, #0x10 - bic r3, r3, #0x3 - ldr r2, [sp, #0x10] - add r3, r3, #0x4 - bl vsnprintf - ldmia sp!, {r3,lr} - add sp, sp, #0x10 - bx lr - - arm_func_start sprintf -sprintf: ; 0x020E185C - stmdb sp!, {r0-r3} - stmdb sp!, {r3,lr} - add r1, sp, #0xc - bic r1, r1, #0x3 - add r3, r1, #0x4 - ldr r2, [sp, #0xc] - mvn r1, #0x0 - bl vsnprintf - ldmia sp!, {r3,lr} - add sp, sp, #0x10 - bx lr - - arm_func_start qsort -qsort: ; 0x020E1888 - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x10 - mov r9, r1 - cmp r9, #0x2 - mov r10, r0 - mov r8, r2 - mov r7, r3 - addcc sp, sp, #0x10 - ldmccia sp!, {r3-r11,pc} -_020E18AC: - .byte 0xA9, 0x00, 0xA0, 0xE1 - .byte 0x01, 0xB0, 0x80, 0xE2, 0x01, 0x00, 0x4B, 0xE2, 0x98, 0xA0, 0x20, 0xE0, 0x01, 0x20, 0x49, 0xE2 - .byte 0x0C, 0x00, 0x8D, 0xE5, 0x98, 0xA2, 0x20, 0xE0, 0x08, 0x00, 0x8D, 0xE5, 0x9B, 0x08, 0x00, 0xE0 - .byte 0x00, 0x10, 0xE0, 0xE3, 0x04, 0x00, 0x8D, 0xE5, 0x98, 0x01, 0x00, 0xE0, 0x00, 0x00, 0x8D, 0xE5 - .byte 0x01, 0x00, 0x5B, 0xE3, 0x07, 0x00, 0x00, 0x9A, 0x04, 0x00, 0x9D, 0xE5, 0x01, 0xB0, 0x4B, 0xE2 - .byte 0x08, 0x00, 0x40, 0xE0, 0x04, 0x00, 0x8D, 0xE5, 0x0C, 0x00, 0x9D, 0xE5, 0x08, 0x00, 0x40, 0xE0 - .byte 0x0C, 0x00, 0x8D, 0xE5, 0x11, 0x00, 0x00, 0xEA, 0x08, 0x20, 0xA0, 0xE1, 0x08, 0x40, 0x9D, 0xE5 - .byte 0x0C, 0x30, 0x9D, 0xE5, 0x00, 0x00, 0x58, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0xD0, 0x00, 0xD4, 0xE1 - .byte 0xD0, 0x10, 0xD3, 0xE1, 0x01, 0x20, 0x52, 0xE2, 0x01, 0x00, 0xC3, 0xE4, 0x01, 0x10, 0xC4, 0xE4 - .byte 0xF9, 0xFF, 0xFF, 0x1A, 0x01, 0x90, 0x49, 0xE2, 0x01, 0x00, 0x59, 0xE3, 0x10, 0xD0, 0x8D, 0x02 - .byte 0xF8, 0x8F, 0xBD, 0x08, 0x08, 0x00, 0x9D, 0xE5, 0x08, 0x00, 0x40, 0xE0, 0x08, 0x00, 0x8D, 0xE5 - .byte 0x04, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x9D, 0xE5, 0x0B, 0x40, 0xA0, 0xE1, 0x00, 0x00, 0x81, 0xE0 - .byte 0x8B, 0x00, 0x59, 0xE1, 0x00, 0x50, 0x8A, 0xE0, 0xDC, 0xFF, 0xFF, 0x3A, 0x84, 0x40, 0xA0, 0xE1 - .byte 0x01, 0x00, 0x44, 0xE2, 0x05, 0x60, 0xA0, 0xE1, 0x98, 0xA0, 0x25, 0xE0, 0x04, 0x00, 0x59, 0xE1 - .byte 0x05, 0x00, 0x00, 0x9A, 0x05, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0x85, 0xE0, 0x37, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x40, 0x84, 0xB2, 0x08, 0x50, 0x85, 0xB0, 0x06, 0x00, 0xA0, 0xE1 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x37, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0xCB, 0xFF, 0xFF, 0xAA - .byte 0x08, 0x20, 0xA0, 0xE1, 0x05, 0x30, 0xA0, 0xE1, 0x00, 0x00, 0x58, 0xE3, 0x05, 0x00, 0x00, 0x0A - .byte 0xD0, 0x10, 0xD6, 0xE1, 0xD0, 0x00, 0xD3, 0xE1, 0x01, 0x20, 0x52, 0xE2, 0x01, 0x00, 0xC6, 0xE4 - .byte 0x01, 0x10, 0xC3, 0xE4, 0xF9, 0xFF, 0xFF, 0x1A, 0x84, 0x00, 0x59, 0xE1, 0xE2, 0xFF, 0xFF, 0x2A - .byte 0xBE, 0xFF, 0xFF, 0xEA, 0x10, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 - - arm_func_start rand -rand: ; 0x020E19EC - ldr r2, _020E1A14 ; =0x02106DE0 - ldr r0, _020E1A18 ; =0x41C64E6D - ldr r3, [r2, #0x0] - ldr r1, _020E1A1C ; =0x00007FFF - mul r0, r3, r0 - add r0, r0, #0x39 - add r0, r0, #0x3000 - str r0, [r2, #0x0] - and r0, r1, r0, lsr #0x10 - bx lr - .balign 4 -_020E1A14: .word 0x02106DE0 -_020E1A18: .word 0x41C64E6D -_020E1A1C: .word 0x00007FFF - - arm_func_start srand -srand: ; 0x020E1A20 - ldr r1, _020E1A2C ; =0x02106DE0 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020E1A2C: .word 0x02106DE0 - - arm_func_start parse_format_scanf -parse_format_scanf: ; 0x020E1A30 - stmdb sp!, {r3-r7,lr} - sub sp, sp, #0x28 - ldr r6, _020E1F20 ; =0x0210440C - add r5, sp, #0x0 - mov r7, r0 - mov lr, r1 - mov r4, r5 - ldmia r6!, {r0-r3} - stmia r5!, {r0-r3} - ldmia r6!, {r0-r3} - stmia r5!, {r0-r3} - ldmia r6, {r0-r1} - stmia r5, {r0-r1} - ldrsb r0, [r7, #0x1] - add r12, r7, #0x1 - cmp r0, #0x25 - bne _020E1A9C - strb r0, [sp, #0x3] - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4, {r0-r1} - stmia lr, {r0-r1} - add sp, sp, #0x28 - add r0, r12, #0x1 - ldmia sp!, {r3-r7,pc} -_020E1A9C: - cmp r0, #0x2a - moveq r0, #0x1 - streqb r0, [sp, #0x0] - ldreqsb r0, [r12, #0x1]! - cmp r0, #0x0 - blt _020E1ABC - cmp r0, #0x80 - blt _020E1AC4 -_020E1ABC: - mov r1, #0x0 - b _020E1AD4 -_020E1AC4: - ldr r1, _020E1F24 ; =0x0210430C - mov r2, r0, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x8 -_020E1AD4: - cmp r1, #0x0 - beq _020E1B74 - mov r1, #0x0 - ldr r3, _020E1F24 ; =0x0210430C - str r1, [sp, #0x4] - mov r4, r1 - mov r1, #0xa -_020E1AF0: - ldr r2, [sp, #0x4] - sub r0, r0, #0x30 - mla r0, r2, r1, r0 - str r0, [sp, #0x4] - ldrsb r0, [r12, #0x1]! - cmp r0, #0x0 - blt _020E1B14 - cmp r0, #0x80 - blt _020E1B1C -_020E1B14: - mov r2, r4 - b _020E1B28 -_020E1B1C: - mov r2, r0, lsl #0x1 - ldrh r2, [r3, r2] - and r2, r2, #0x8 -_020E1B28: - cmp r2, #0x0 - bne _020E1AF0 - ldr r1, [sp, #0x4] - cmp r1, #0x0 - bne _020E1B6C - mov r0, #0xff - add r4, sp, #0x0 - strb r0, [sp, #0x3] - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4, {r0-r1} - stmia lr, {r0-r1} - add sp, sp, #0x28 - add r0, r12, #0x1 - ldmia sp!, {r3-r7,pc} -_020E1B6C: - mov r1, #0x1 - strb r1, [sp, #0x1] -_020E1B74: - cmp r0, #0x6c - mov r1, #0x1 - bgt _020E1BAC - cmp r0, #0x68 - blt _020E1BA0 - beq _020E1BC8 - cmp r0, #0x6a - beq _020E1C14 - cmp r0, #0x6c - beq _020E1BE4 - b _020E1C38 -_020E1BA0: - cmp r0, #0x4c - beq _020E1C08 - b _020E1C38 -_020E1BAC: - cmp r0, #0x74 - bgt _020E1BBC - beq _020E1C2C - b _020E1C38 -_020E1BBC: - cmp r0, #0x7a - beq _020E1C20 - b _020E1C38 -_020E1BC8: - mov r2, #0x2 - strb r2, [sp, #0x2] - ldrsb r2, [r12, #0x1] - cmp r2, #0x68 - streqb r1, [sp, #0x2] - ldreqsb r0, [r12, #0x1]! - b _020E1C3C -_020E1BE4: - mov r2, #0x3 - strb r2, [sp, #0x2] - ldrsb r2, [r12, #0x1] - cmp r2, #0x6c - bne _020E1C3C - mov r0, #0x7 - strb r0, [sp, #0x2] - ldrsb r0, [r12, #0x1]! - b _020E1C3C -_020E1C08: - mov r2, #0x9 - strb r2, [sp, #0x2] - b _020E1C3C -_020E1C14: - mov r2, #0x4 - strb r2, [sp, #0x2] - b _020E1C3C -_020E1C20: - mov r2, #0x5 - strb r2, [sp, #0x2] - b _020E1C3C -_020E1C2C: - mov r2, #0x6 - strb r2, [sp, #0x2] - b _020E1C3C -_020E1C38: - mov r1, #0x0 -_020E1C3C: - cmp r1, #0x0 - ldrnesb r0, [r12, #0x1]! - strb r0, [sp, #0x3] - cmp r0, #0x5b - bgt _020E1C90 - bge _020E1DE0 - cmp r0, #0x47 - bgt _020E1C84 - subs r1, r0, #0x41 - addpl pc, pc, r1, lsl #0x2 - b _020E1EF0 -_020E1C68: - .byte 0x2B, 0x00, 0x00, 0xEA, 0x9F, 0x00, 0x00, 0xEA - .byte 0x9E, 0x00, 0x00, 0xEA, 0x9D, 0x00, 0x00, 0xEA, 0x27, 0x00, 0x00, 0xEA, 0x26, 0x00, 0x00, 0xEA - .byte 0x25, 0x00, 0x00, 0xEA -_020E1C84: - cmp r0, #0x58 - beq _020E1D08 - b _020E1EF0 -_020E1C90: - cmp r0, #0x61 - bgt _020E1CA0 - beq _020E1D1C - b _020E1EF0 -_020E1CA0: - sub r0, r0, #0x63 - cmp r0, #0x15 - addls pc, pc, r0, lsl #0x2 - b _020E1EF0 -_020E1CB0: - .byte 0x2D, 0x00, 0x00, 0xEA, 0x13, 0x00, 0x00, 0xEA, 0x17, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA - .byte 0x15, 0x00, 0x00, 0xEA, 0x89, 0x00, 0x00, 0xEA, 0x0E, 0x00, 0x00, 0xEA, 0x87, 0x00, 0x00, 0xEA - .byte 0x86, 0x00, 0x00, 0xEA, 0x85, 0x00, 0x00, 0xEA, 0x84, 0x00, 0x00, 0xEA, 0x85, 0x00, 0x00, 0xEA - .byte 0x08, 0x00, 0x00, 0xEA, 0x1B, 0x00, 0x00, 0xEA, 0x80, 0x00, 0x00, 0xEA, 0x7F, 0x00, 0x00, 0xEA - .byte 0x26, 0x00, 0x00, 0xEA, 0x7D, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA, 0x7B, 0x00, 0x00, 0xEA - .byte 0x7A, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA -_020E1D08: - ldrb r0, [sp, #0x2] - cmp r0, #0x9 - moveq r0, #0xff - streqb r0, [sp, #0x3] - b _020E1EF8 -_020E1D1C: - ldrb r1, [sp, #0x2] - cmp r1, #0x1 - cmpne r1, #0x2 - beq _020E1D3C - add r0, r1, #0xfc - and r0, r0, #0xff - cmp r0, #0x3 - bhi _020E1D48 -_020E1D3C: - mov r0, #0xff - strb r0, [sp, #0x3] - b _020E1EF8 -_020E1D48: - cmp r1, #0x3 - moveq r0, #0x8 - streqb r0, [sp, #0x2] - b _020E1EF8 -_020E1D58: - .byte 0x03, 0x10, 0xA0, 0xE3, 0x78, 0x00, 0xA0, 0xE3 - .byte 0x02, 0x10, 0xCD, 0xE5, 0x03, 0x00, 0xCD, 0xE5, 0x62, 0x00, 0x00, 0xEA, 0x02, 0x00, 0xDD, 0xE5 - .byte 0x03, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0xA0, 0x03, 0x02, 0x00, 0xCD, 0x05, 0x5D, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x13, 0x03, 0x00, 0xCD, 0x15, 0x59, 0x00, 0x00, 0xEA - .byte 0x02, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0xA0, 0x03, 0x02, 0x00, 0xCD, 0x05 - .byte 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x13, 0x03, 0x00, 0xCD, 0x15 - .byte 0x08, 0x20, 0x8D, 0xE2, 0x20, 0x10, 0xA0, 0xE3, 0xFF, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0x41, 0xE2 - .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0xC2, 0xE4, 0xFB, 0xFF, 0xFF, 0xCA, 0xC1, 0x10, 0xA0, 0xE3 - .byte 0xFE, 0x00, 0xA0, 0xE3, 0x09, 0x10, 0xCD, 0xE5, 0x0C, 0x00, 0xCD, 0xE5, 0x45, 0x00, 0x00, 0xEA -_020E1DE0: - ldrb r0, [sp, #0x2] - cmp r0, #0x3 - moveq r0, #0xa - streqb r0, [sp, #0x2] - beq _020E1E00 - cmp r0, #0x0 - movne r0, #0xff - strneb r0, [sp, #0x3] -_020E1E00: - ldrsb r2, [r12, #0x1]! - mov r1, #0x0 - cmp r2, #0x5e - ldreqsb r2, [r12, #0x1]! - moveq r1, #0x1 - cmp r2, #0x5d - bne _020E1EA8 - ldrb r0, [sp, #0x13] - orr r0, r0, #0x20 - strb r0, [sp, #0x13] - ldrsb r2, [r12, #0x1]! - b _020E1EA8 -_020E1E30: - add r0, sp, #0x0 - and r3, r2, #0xff - add r6, r0, r3, asr #0x3 - ldrb r5, [r6, #0x8] - and r3, r2, #0x7 - mov r4, #0x1 - orr r3, r5, r4, lsl r3 - strb r3, [r6, #0x8] - ldrsb r3, [r12, #0x1] - cmp r3, #0x2d - bne _020E1EA4 - ldrsb r7, [r12, #0x2] - cmp r7, #0x0 - cmpne r7, #0x5d - beq _020E1EA4 - add r2, r2, #0x1 - cmp r2, r7 - bgt _020E1E9C -_020E1E78: - and r3, r2, #0xff - add r6, r0, r3, asr #0x3 - ldrb r5, [r6, #0x8] - and r3, r2, #0x7 - add r2, r2, #0x1 - orr r3, r5, r4, lsl r3 - strb r3, [r6, #0x8] - cmp r2, r7 - ble _020E1E78 -_020E1E9C: - ldrsb r2, [r12, #0x3]! - b _020E1EA8 -_020E1EA4: - ldrsb r2, [r12, #0x1]! -_020E1EA8: - cmp r2, #0x0 - cmpne r2, #0x5d - bne _020E1E30 - cmp r2, #0x0 - moveq r0, #0xff - streqb r0, [sp, #0x3] - beq _020E1EF8 - cmp r1, #0x0 - beq _020E1EF8 - add r2, sp, #0x8 - mov r1, #0x20 -_020E1ED4: - ldrb r0, [r2, #0x0] - sub r1, r1, #0x1 - cmp r1, #0x0 - mvn r0, r0 - strb r0, [r2], #0x1 - bgt _020E1ED4 - b _020E1EF8 -_020E1EF0: - mov r0, #0xff - strb r0, [sp, #0x3] -_020E1EF8: - add r4, sp, #0x0 - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4, {r0-r1} - stmia lr, {r0-r1} - add r0, r12, #0x1 - add sp, sp, #0x28 - ldmia sp!, {r3-r7,pc} - .balign 4 -_020E1F20: .word 0x0210440C -_020E1F24: .word 0x0210430C - - arm_func_start __sformatter -__sformatter: ; 0x020E1F28 - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x88 - ldrsb r5, [r2, #0x0] - str r2, [sp, #0xc] - mov r2, #0x0 - mov r9, r0 - mov r0, r2 - str r2, [sp, #0x20] - mov r8, r1 - str r3, [sp, #0x10] - str r0, [sp, #0x24] - cmp r5, #0x0 - ldr r10, [sp, #0xb0] - str r0, [sp, #0x30] - mov r4, r2 - str r0, [sp, #0x44] - str r0, [sp, #0x40] - beq _020E2C3C -_020E1F70: - cmp r5, #0x0 - mov r0, #0x1 - blt _020E1F84 - cmp r5, #0x80 - movlt r0, #0x0 -_020E1F84: - cmp r0, #0x0 - movne r0, #0x0 - bne _020E1FA0 - mov r1, r5, lsl #0x1 - ldr r0, _020E2C74 ; =0x0210430C - ldrh r0, [r0, r1] - and r0, r0, #0x100 -_020E1FA0: - cmp r0, #0x0 - beq _020E2060 - mov r2, #0x0 - ldr r1, _020E2C74 ; =0x0210430C - mov r12, r2 - mov r3, #0x1 -_020E1FB8: - ldr r0, [sp, #0xc] - ldrsb r5, [r0, #0x1]! - str r0, [sp, #0xc] - mov r0, r3 - cmp r5, #0x0 - blt _020E1FD8 - cmp r5, #0x80 - movlt r0, r2 -_020E1FD8: - cmp r0, #0x0 - movne r0, r12 - moveq r0, r5, lsl #0x1 - ldreqh r0, [r1, r0] - andeq r0, r0, #0x100 - cmp r0, #0x0 - bne _020E1FB8 - ldr r0, [sp, #0x30] - cmp r0, #0x0 - bne _020E2C2C - ldr r5, _020E2C74 ; =0x0210430C - b _020E200C -_020E2008: - add r4, r4, #0x1 -_020E200C: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - strb r0, [sp, #0x50] - ldrsb r1, [sp, #0x50] - cmp r1, #0x0 - blt _020E2034 - cmp r1, #0x80 - blt _020E203C -_020E2034: - mov r0, #0x0 - b _020E2048 -_020E203C: - mov r0, r1, lsl #0x1 - ldrh r0, [r5, r0] - and r0, r0, #0x100 -_020E2048: - cmp r0, #0x0 - bne _020E2008 - mov r0, r8 - mov r2, #0x1 - blx r9 - b _020E2C2C -_020E2060: - cmp r5, #0x25 - beq _020E20D8 - ldr r0, [sp, #0x30] - cmp r0, #0x0 - bne _020E20D8 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - strb r0, [sp, #0x50] - and r0, r5, #0xff - ldrsb r1, [sp, #0x50] - cmp r0, r1 - beq _020E20C4 - mov r0, r8 - mov r2, #0x1 - blx r9 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - ldr r0, [sp, #0xc] - add r0, r0, #0x1 - str r0, [sp, #0xc] - b _020E2C2C -_020E20C4: - ldr r0, [sp, #0xc] - add r4, r4, #0x1 - add r0, r0, #0x1 - str r0, [sp, #0xc] - b _020E2C2C -_020E20D8: - ldr r0, [sp, #0xc] - add r1, sp, #0x60 - bl parse_format_scanf - str r0, [sp, #0xc] - ldrb r0, [sp, #0x60] - cmp r0, #0x0 - bne _020E2114 - ldrb r0, [sp, #0x63] - cmp r0, #0x25 - beq _020E2114 - ldr r0, [sp, #0x10] - add r0, r0, #0x4 - str r0, [sp, #0x10] - ldr r5, [r0, #-0x4] - b _020E2118 -_020E2114: - mov r5, #0x0 -_020E2118: - ldrb r0, [sp, #0x63] - cmp r0, #0x6e - beq _020E2158 - ldr r0, [sp, #0x30] - cmp r0, #0x0 - bne _020E2158 - mov r0, r8 - mov r1, #0x0 - mov r2, #0x2 - blx r9 - cmp r0, #0x0 - beq _020E2158 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] -_020E2158: - ldrb r1, [sp, #0x63] - cmp r1, #0x5b - bgt _020E21B0 - bge _020E2984 - cmp r1, #0x47 - bgt _020E21A4 - subs r0, r1, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020E2198 -_020E217C: - .byte 0x1F, 0x01, 0x00, 0xEA - .byte 0xAD, 0x02, 0x00, 0xEA, 0xAC, 0x02, 0x00, 0xEA, 0xAB, 0x02, 0x00, 0xEA, 0x1B, 0x01, 0x00, 0xEA - .byte 0x1A, 0x01, 0x00, 0xEA, 0x19, 0x01, 0x00, 0xEA -_020E2198: - cmp r1, #0x25 - beq _020E287C - b _020E2C3C -_020E21A4: - cmp r1, #0x58 - beq _020E243C - b _020E2C3C -_020E21B0: - cmp r1, #0x78 - bgt _020E2228 - subs r0, r1, #0x63 - addpl pc, pc, r0, lsl #0x2 - b _020E221C -_020E21C4: - .byte 0x3E, 0x01, 0x00, 0xEA, 0x18, 0x00, 0x00, 0xEA, 0x0B, 0x01, 0x00, 0xEA - .byte 0x0A, 0x01, 0x00, 0xEA, 0x09, 0x01, 0x00, 0xEA, 0x97, 0x02, 0x00, 0xEA, 0x15, 0x00, 0x00, 0xEA - .byte 0x95, 0x02, 0x00, 0xEA, 0x94, 0x02, 0x00, 0xEA, 0x93, 0x02, 0x00, 0xEA, 0x92, 0x02, 0x00, 0xEA - .byte 0x74, 0x02, 0x00, 0xEA, 0x8C, 0x00, 0x00, 0xEA, 0x8F, 0x02, 0x00, 0xEA, 0x8E, 0x02, 0x00, 0xEA - .byte 0x8D, 0x02, 0x00, 0xEA, 0xBF, 0x01, 0x00, 0xEA, 0x8B, 0x02, 0x00, 0xEA, 0x88, 0x00, 0x00, 0xEA - .byte 0x89, 0x02, 0x00, 0xEA, 0x88, 0x02, 0x00, 0xEA, 0x87, 0x00, 0x00, 0xEA -_020E221C: - cmp r1, #0x61 - beq _020E2600 - b _020E2C3C -_020E2228: - cmp r1, #0xff - b _020E2C3C -_020E2230: - .byte 0x0A, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x00, 0xEA, 0x00, 0x00, 0xA0, 0xE3, 0x30, 0x10, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x51, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x00, 0x00, 0xA0, 0xE3, 0x1C, 0x00, 0x8D, 0xE5 - .byte 0x20, 0x00, 0x8D, 0xE5, 0x24, 0x00, 0x8D, 0xE5, 0x41, 0x00, 0x00, 0xEA, 0x62, 0x10, 0xDD, 0xE5 - .byte 0x5C, 0x20, 0x8D, 0xE2, 0x07, 0x00, 0x51, 0xE3, 0x04, 0x00, 0x51, 0x13, 0x58, 0x10, 0x8D, 0xE2 - .byte 0x0A, 0x00, 0x00, 0x1A, 0x00, 0x20, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5, 0x54, 0x10, 0x8D, 0xE2 - .byte 0x08, 0x10, 0x8D, 0xE5, 0x64, 0x10, 0x9D, 0xE5, 0x09, 0x20, 0xA0, 0xE1, 0x08, 0x30, 0xA0, 0xE1 - .byte 0xE7, 0x09, 0x00, 0xEB, 0x34, 0x00, 0x8D, 0xE5, 0x18, 0x10, 0x8D, 0xE5, 0x08, 0x00, 0x00, 0xEA - .byte 0x00, 0x20, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5, 0x54, 0x10, 0x8D, 0xE2, 0x08, 0x10, 0x8D, 0xE5 - .byte 0x64, 0x10, 0x9D, 0xE5, 0x09, 0x20, 0xA0, 0xE1, 0x08, 0x30, 0xA0, 0xE1, 0xE2, 0x08, 0x00, 0xEB - .byte 0x3C, 0x00, 0x8D, 0xE5, 0x5C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0x5A, 0xE3, 0x58, 0x02, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x30, 0x00, 0x8D, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x1C, 0x00, 0x8D, 0xE5, 0x20, 0x00, 0x8D, 0xE5, 0x24, 0x00, 0x8D, 0xE5 - .byte 0x1B, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x84, 0xE0, 0x62, 0x00, 0xDD, 0xE5, 0x07, 0x00, 0x50, 0xE3 - .byte 0x04, 0x00, 0x50, 0x13, 0x0E, 0x00, 0x00, 0x1A, 0x58, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0x00, 0x0A, 0x34, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x70, 0xE2, 0x20, 0x00, 0x8D, 0xE5 - .byte 0x18, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0xE0, 0xE2, 0x24, 0x00, 0x8D, 0xE5, 0x0C, 0x00, 0x00, 0xEA - .byte 0x34, 0x00, 0x9D, 0xE5, 0x20, 0x00, 0x8D, 0xE5, 0x18, 0x00, 0x9D, 0xE5, 0x24, 0x00, 0x8D, 0xE5 - .byte 0x07, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x3C, 0x00, 0x9D, 0x05 - .byte 0x1C, 0x00, 0x8D, 0x05, 0x02, 0x00, 0x00, 0x0A, 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x60, 0xE2 - .byte 0x1C, 0x00, 0x8D, 0xE5, 0x00, 0x00, 0x55, 0xE3, 0x2B, 0x00, 0x00, 0x0A, 0x62, 0x00, 0xDD, 0xE5 - .byte 0x07, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x22, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x00, 0xEA - .byte 0x08, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA, 0x0E, 0x00, 0x00, 0xEA - .byte 0x12, 0x00, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x85, 0xE5, 0x17, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0xC5, 0xE5 - .byte 0x14, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5, 0xB0, 0x00, 0xC5, 0xE1, 0x11, 0x00, 0x00, 0xEA - .byte 0x1C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x0E, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x85, 0xE5, 0x24, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5, 0x09, 0x00, 0x00, 0xEA - .byte 0x1C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x06, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x85, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5 - .byte 0x24, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5, 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x44, 0x00, 0x9D, 0x05, 0x01, 0x00, 0x80, 0x02, 0x44, 0x00, 0x8D, 0x05, 0x40, 0x00, 0x9D, 0xE5 - .byte 0x01, 0x00, 0x80, 0xE2, 0x40, 0x00, 0x8D, 0xE5, 0xFF, 0x01, 0x00, 0xEA, 0x08, 0x00, 0xA0, 0xE3 - .byte 0x02, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x00, 0xEA -_020E243C: - mov r0, #0x10 - ldr r1, [sp, #0x30] - cmp r1, #0x0 - beq _020E2460 - mov r0, #0x0 - str r0, [sp, #0x3c] - str r0, [sp, #0x34] - str r0, [sp, #0x18] - b _020E2538 -_020E2460: - ldrb r1, [sp, #0x62] - add r2, sp, #0x5c - cmp r1, #0x7 - cmpne r1, #0x4 - add r1, sp, #0x58 - bne _020E24A4 - str r2, [sp, #0x0] - str r1, [sp, #0x4] - add r1, sp, #0x54 - str r1, [sp, #0x8] - ldr r1, [sp, #0x64] - mov r2, r9 - mov r3, r8 - bl __strtoull - str r0, [sp, #0x34] - str r1, [sp, #0x18] - b _020E24C8 -_020E24A4: - str r2, [sp, #0x0] - str r1, [sp, #0x4] - add r1, sp, #0x54 - str r1, [sp, #0x8] - ldr r1, [sp, #0x64] - mov r2, r9 - mov r3, r8 - bl __strtoul - str r0, [sp, #0x3c] -_020E24C8: - ldr r0, [sp, #0x5c] - cmp r0, #0x0 - bne _020E24F8 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - mov r0, #0x0 - str r0, [sp, #0x3c] - str r0, [sp, #0x34] - str r0, [sp, #0x18] - b _020E2538 -_020E24F8: - add r4, r4, r0 - ldr r0, [sp, #0x58] - cmp r0, #0x0 - beq _020E2538 - ldrb r0, [sp, #0x62] - cmp r0, #0x7 - ldrne r0, [sp, #0x3c] - rsbne r0, r0, #0x0 - strne r0, [sp, #0x3c] - bne _020E2538 - ldr r0, [sp, #0x34] - rsbs r0, r0, #0x0 - str r0, [sp, #0x34] - ldr r0, [sp, #0x18] - rsc r0, r0, #0x0 - str r0, [sp, #0x18] -_020E2538: - cmp r5, #0x0 - beq _020E25F0 - ldrb r0, [sp, #0x62] - cmp r0, #0x7 - addls pc, pc, r0, lsl #0x2 - b _020E25DC -_020E2550: - .byte 0x06, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA - .byte 0x0E, 0x00, 0x00, 0xEA, 0x12, 0x00, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA - .byte 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x17, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0xC5, 0xE5, 0x14, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5, 0xB0, 0x00, 0xC5, 0xE1 - .byte 0x11, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x0E, 0x00, 0x00, 0xEA - .byte 0x34, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x18, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5 - .byte 0x09, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x06, 0x00, 0x00, 0xEA - .byte 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x34, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x85, 0xE5, 0x18, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5 -_020E25DC: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - ldreq r0, [sp, #0x44] - addeq r0, r0, #0x1 - streq r0, [sp, #0x44] -_020E25F0: - ldr r0, [sp, #0x40] - add r0, r0, #0x1 - str r0, [sp, #0x40] - b _020E2C2C -_020E2600: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - beq _020E261C - ldr r0, _020E2C78 ; =0x02106B78 - ldr r0, [r0, #0x0] - bl _f2d - b _020E2668 -_020E261C: - add r0, sp, #0x54 - str r0, [sp, #0x0] - ldr r0, [sp, #0x64] - mov r1, r9 - mov r2, r8 - add r3, sp, #0x5c - bl __strtold - ldr r2, [sp, #0x5c] - cmp r2, #0x0 - bne _020E2664 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - ldr r0, _020E2C78 ; =0x02106B78 - ldr r0, [r0, #0x0] - bl _f2d -_020E2660: - .byte 0x00, 0x00, 0x00, 0xEA -_020E2664: - add r4, r4, r2 -_020E2668: - cmp r5, #0x0 - beq _020E26B4 - ldrb r2, [sp, #0x62] - cmp r2, #0x0 - beq _020E2690 - cmp r2, #0x8 - beq _020E269C - cmp r2, #0x9 - stmeqia r5, {r0-r1} - b _020E26A0 -_020E2690: - bl _d2f -_020E2694: - .byte 0x00, 0x00, 0x85, 0xE5, 0x00, 0x00, 0x00, 0xEA -_020E269C: - stmia r5, {r0-r1} -_020E26A0: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - ldreq r0, [sp, #0x44] - addeq r0, r0, #0x1 - streq r0, [sp, #0x44] -_020E26B4: - ldr r0, [sp, #0x40] - add r0, r0, #0x1 - str r0, [sp, #0x40] - b _020E2C2C -_020E26C4: - .byte 0x61, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 - .byte 0x64, 0x00, 0x8D, 0x05, 0x00, 0x00, 0x55, 0xE3, 0x4B, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x5A, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x10, 0x00, 0x9D, 0xE5, 0x01, 0x70, 0xA0, 0xE3, 0x04, 0x00, 0x80, 0xE2 - .byte 0x04, 0xB0, 0x10, 0xE5, 0x10, 0x00, 0x8D, 0xE5, 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x50, 0xE3, 0x5C, 0x10, 0x8D, 0xE5, 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x5B, 0xE3 - .byte 0x00, 0x10, 0xC5, 0x15, 0x44, 0x01, 0x00, 0xEA, 0x00, 0x00, 0xE0, 0xE3, 0x2C, 0x50, 0x8D, 0xE5 - .byte 0x48, 0x00, 0x8D, 0xE5, 0x0D, 0x00, 0x00, 0xEA, 0x62, 0x00, 0xDD, 0xE5, 0x50, 0x60, 0xCD, 0xE5 - .byte 0x0A, 0x00, 0x50, 0xE3, 0xD0, 0x05, 0xDD, 0x11, 0x01, 0x00, 0xC5, 0x14, 0x04, 0x00, 0x00, 0x1A - .byte 0x05, 0x00, 0xA0, 0xE1, 0x50, 0x10, 0x8D, 0xE2, 0x01, 0x20, 0xA0, 0xE3, 0xD8, 0xF2, 0xFF, 0xEB - .byte 0x01, 0x50, 0x85, 0xE2, 0x5C, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0x80, 0xE2, 0x5C, 0x10, 0x8D, 0xE5 - .byte 0x64, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x40, 0xE2, 0x64, 0x00, 0x8D, 0xE5 - .byte 0x0E, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x5A, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x5B, 0xE1 - .byte 0x01, 0x70, 0xA0, 0x83, 0x00, 0x70, 0xA0, 0x93, 0x00, 0x00, 0x57, 0xE3, 0x07, 0x00, 0x00, 0x0A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE1, 0x48, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x56, 0xE1, 0xDD, 0xFF, 0xFF, 0x1A - .byte 0x50, 0x60, 0xCD, 0xE5, 0x5C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x5A, 0xE3, 0x0B, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x57, 0xE3, 0x09, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0x5A, 0xE3, 0x18, 0x01, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x5B, 0xE3 - .byte 0x30, 0x00, 0x8D, 0xE5, 0x10, 0x01, 0x00, 0x0A, 0x2C, 0x00, 0x9D, 0xE5, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x10, 0xC0, 0xE5, 0x0C, 0x01, 0x00, 0xEA, 0x00, 0x40, 0x84, 0xE0, 0x44, 0x00, 0x9D, 0xE5 - .byte 0x01, 0x00, 0x80, 0xE2, 0x44, 0x00, 0x8D, 0xE5, 0x17, 0x00, 0x00, 0xEA, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x5C, 0x00, 0x8D, 0xE5, 0x00, 0x50, 0xE0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x50, 0x60, 0xCD, 0xE5 - .byte 0x5C, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2, 0x5C, 0x00, 0x8D, 0xE5, 0x64, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x40, 0xE2, 0x64, 0x00, 0x8D, 0xE5, 0x06, 0x00, 0x00, 0x0A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE1, 0x05, 0x00, 0x56, 0xE1, 0xEF, 0xFF, 0xFF, 0x1A, 0x50, 0x60, 0xCD, 0xE5 - .byte 0x5C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0xF3, 0x00, 0x00, 0x0A, 0x40, 0x00, 0x9D, 0xE5 - .byte 0x01, 0x00, 0x80, 0xE2, 0x40, 0x00, 0x8D, 0xE5, 0xEB, 0x00, 0x00, 0xEA -_020E287C: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - bne _020E2C2C - ldr r5, _020E2C74 ; =0x0210430C - b _020E2894 -_020E2890: - add r4, r4, #0x1 -_020E2894: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - strb r0, [sp, #0x50] - ldrsb r1, [sp, #0x50] - cmp r1, #0x0 - blt _020E28BC - cmp r1, #0x80 - blt _020E28C4 -_020E28BC: - mov r0, #0x0 - b _020E28D0 -_020E28C4: - mov r0, r1, lsl #0x1 - ldrh r0, [r5, r0] - and r0, r0, #0x100 -_020E28D0: - cmp r0, #0x0 - bne _020E2890 - cmp r1, #0x25 - beq _020E2900 - mov r0, r8 - mov r2, #0x1 - blx r9 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - b _020E2C2C -_020E2900: - add r4, r4, #0x1 - b _020E2C2C -_020E2908: - .byte 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x1B, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x39, 0xFF, 0x2F, 0xE1, 0x50, 0x00, 0xCD, 0xE5, 0x05, 0x00, 0x00, 0xEA, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x50, 0x00, 0xCD, 0xE5, 0xD0, 0x15, 0xDD, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA - .byte 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA - .byte 0x0C, 0x03, 0x9F, 0xE5, 0x81, 0x20, 0xA0, 0xE1, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2 - .byte 0x00, 0x00, 0x50, 0xE3, 0xEC, 0xFF, 0xFF, 0x1A, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x39, 0xFF, 0x2F, 0xE1 -_020E2984: - cmp r5, #0x0 - beq _020E2B00 - cmp r10, #0x0 - beq _020E29AC - ldr r0, [sp, #0x10] - mov r7, #0x1 - add r0, r0, #0x4 - str r0, [sp, #0x10] - ldr r0, [r0, #-0x4] - sub r11, r0, #0x1 -_020E29AC: - ldr r0, [sp, #0x30] - mov r1, #0x0 - cmp r0, #0x0 - str r1, [sp, #0x5c] - beq _020E29CC - cmp r11, #0x0 - strneb r1, [r5, #0x0] - b _020E2C2C -_020E29CC: - mvn r0, #0x0 - str r5, [sp, #0x28] - str r0, [sp, #0x4c] - b _020E2A30 -_020E29DC: - strb r6, [sp, #0x50] - ldrsb r1, [sp, #0x50] - add r2, sp, #0x60 - and r3, r1, #0xff - add r2, r2, r3, asr #0x3 - ldrb r3, [r2, #0x8] - and r0, r1, #0x7 - mov r2, #0x1 - tst r3, r2, lsl r0 - beq _020E2A80 - ldrb r0, [sp, #0x62] - cmp r0, #0xa - strneb r1, [r5], #0x1 - bne _020E2A24 - mov r0, r5 - add r1, sp, #0x50 - bl mbtowc - add r5, r5, #0x2 -_020E2A24: - ldr r0, [sp, #0x5c] - add r1, r0, #0x1 - str r1, [sp, #0x5c] -_020E2A30: - ldr r0, [sp, #0x64] - cmp r0, #0x0 - sub r0, r0, #0x1 - str r0, [sp, #0x64] - beq _020E2A80 - cmp r10, #0x0 - beq _020E2A60 - cmp r11, r1 - movcs r7, #0x1 - movcc r7, #0x0 - cmp r7, #0x0 - beq _020E2A80 -_020E2A60: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - mov r6, r0 - ldr r0, [sp, #0x4c] - cmp r6, r0 - bne _020E29DC -_020E2A80: - strb r6, [sp, #0x50] - ldr r0, [sp, #0x5c] - cmp r0, #0x0 - beq _020E2AA0 - cmp r10, #0x0 - beq _020E2AD8 - cmp r7, #0x0 - bne _020E2AD8 -_020E2AA0: - mov r0, r8 - ldrsb r1, [sp, #0x50] - mov r2, #0x1 - blx r9 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - cmp r11, #0x0 - str r0, [sp, #0x30] - beq _020E2C2C - ldr r0, [sp, #0x28] - mov r1, #0x0 - strb r1, [r0, #0x0] - b _020E2C2C -_020E2AD8: - add r4, r4, r0 - ldrb r0, [sp, #0x62] - cmp r0, #0xa - mov r0, #0x0 - streqh r0, [r5, #0x0] - strneb r0, [r5, #0x0] - ldr r0, [sp, #0x44] - add r0, r0, #0x1 - str r0, [sp, #0x44] - b _020E2B9C -_020E2B00: - mov r0, #0x0 - str r0, [sp, #0x5c] - mvn r5, #0x0 - b _020E2B44 -_020E2B10: - strb r6, [sp, #0x50] - ldrsb r1, [sp, #0x50] - and r0, r1, #0x7 - and r2, r1, #0xff - add r1, sp, #0x60 - add r1, r1, r2, asr #0x3 - ldrb r2, [r1, #0x8] - mov r1, #0x1 - tst r2, r1, lsl r0 - beq _020E2B74 - ldr r0, [sp, #0x5c] - add r0, r0, #0x1 - str r0, [sp, #0x5c] -_020E2B44: - ldr r0, [sp, #0x64] - cmp r0, #0x0 - sub r0, r0, #0x1 - str r0, [sp, #0x64] - beq _020E2B74 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - mov r6, r0 - cmp r6, r5 - bne _020E2B10 -_020E2B74: - strb r6, [sp, #0x50] - ldr r0, [sp, #0x5c] - cmp r0, #0x0 - bne _020E2B98 - mov r0, r8 - ldrsb r1, [sp, #0x50] - mov r2, #0x1 - blx r9 - b _020E2C2C -_020E2B98: - add r4, r4, r0 -_020E2B9C: - ldr r0, [sp, #0x64] - cmp r0, #0x0 - blt _020E2BB8 - mov r0, r8 - ldrsb r1, [sp, #0x50] - mov r2, #0x1 - blx r9 -_020E2BB8: - ldr r0, [sp, #0x40] - add r0, r0, #0x1 - str r0, [sp, #0x40] - b _020E2C2C -_020E2BC8: - .byte 0x00, 0x00, 0x55, 0xE3, 0x16, 0x00, 0x00, 0x0A - .byte 0x62, 0x00, 0xDD, 0xE5, 0x07, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x12, 0x00, 0x00, 0xEA - .byte 0x06, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA - .byte 0x0D, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA - .byte 0x00, 0x40, 0x85, 0xE5, 0x08, 0x00, 0x00, 0xEA, 0xB0, 0x40, 0xC5, 0xE1, 0x06, 0x00, 0x00, 0xEA - .byte 0x00, 0x40, 0x85, 0xE5, 0x04, 0x00, 0x00, 0xEA, 0x00, 0x40, 0xC5, 0xE5, 0x02, 0x00, 0x00, 0xEA - .byte 0x00, 0x40, 0x85, 0xE5, 0xC4, 0x0F, 0xA0, 0xE1, 0x04, 0x00, 0x85, 0xE5 -_020E2C2C: - ldr r0, [sp, #0xc] - ldrsb r5, [r0, #0x0] - cmp r5, #0x0 - bne _020E1F70 -_020E2C3C: - mov r0, r8 - mov r1, #0x0 - mov r2, #0x2 - blx r9 - cmp r0, #0x0 - beq _020E2C68 - ldr r0, [sp, #0x40] - cmp r0, #0x0 - addeq sp, sp, #0x88 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,pc} -_020E2C68: - ldr r0, [sp, #0x44] - add sp, sp, #0x88 - ldmia sp!, {r3-r11,pc} - .balign 4 -_020E2C74: .word 0x0210430C -_020E2C78: .word 0x02106B78 - - arm_func_start __StringRead -__StringRead: ; 0x020E2C7C - cmp r2, #0x0 - beq _020E2C98 - cmp r2, #0x1 - beq _020E2CC8 - cmp r2, #0x2 - beq _020E2CF0 - b _020E2CF8 -_020E2C98: - ldr r1, [r0, #0x0] - ldrsb r2, [r1, #0x0] - cmp r2, #0x0 - bne _020E2CB8 - mov r1, #0x1 - str r1, [r0, #0x4] - sub r0, r1, #0x2 - bx lr -_020E2CB8: - add r1, r1, #0x1 - str r1, [r0, #0x0] - and r0, r2, #0xff - bx lr -_020E2CC8: - ldr r2, [r0, #0x4] - cmp r2, #0x0 - movne r2, #0x0 - strne r2, [r0, #0x4] - bne _020E2CE8 - ldr r2, [r0, #0x0] - sub r2, r2, #0x1 - str r2, [r0, #0x0] -_020E2CE8: - mov r0, r1 - bx lr -_020E2CF0: - ldr r0, [r0, #0x4] - bx lr -_020E2CF8: - mov r0, #0x0 - bx lr - - arm_func_start vsscanf -vsscanf: ; 0x020E2D00 - stmdb sp!, {lr} - sub sp, sp, #0xc - str r0, [sp, #0x4] - cmp r0, #0x0 - ldrnesb r0, [r0, #0x0] - mov lr, r1 - mov r3, r2 - cmpne r0, #0x0 - addeq sp, sp, #0xc - mvneq r0, #0x0 - ldmeqia sp!, {pc} - mov r12, #0x0 - str r12, [sp, #0x8] - ldr r0, _020E2D50 ; =__StringRead - add r1, sp, #0x4 - mov r2, lr - str r12, [sp, #0x0] - bl __sformatter - add sp, sp, #0xc - ldmia sp!, {pc} - .balign 4 -_020E2D50: .word __StringRead - - arm_func_start sscanf -sscanf: ; 0x020E2D54 - stmdb sp!, {r0-r3} - stmdb sp!, {r3,lr} - add r2, sp, #0xc - bic r2, r2, #0x3 - ldr r1, [sp, #0xc] - add r2, r2, #0x4 - bl vsscanf - ldmia sp!, {r3,lr} - add sp, sp, #0x10 - bx lr - - arm_func_start raise -raise: ; 0x020E2D7C - stmdb sp!, {r3-r5,lr} - mov r5, r0 - cmp r5, #0x1 - blt _020E2D94 - cmp r5, #0x7 - ble _020E2D9C -_020E2D94: - mvn r0, #0x0 - ldmia sp!, {r3-r5,pc} -_020E2D9C: - ldr r0, _020E2E98 ; =0x021D7178 - bl OS_TryLockMutex -_020E2DA4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A, 0xE8, 0x00, 0x9F, 0xE5 - .byte 0xE8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0xE4, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x1C, 0x30, 0x81, 0xE5, 0x1C, 0x20, 0x80, 0xE5, 0x15, 0x00, 0x00, 0xEA - .byte 0xC4, 0x00, 0x9F, 0xE5, 0xC4, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5, 0x1C, 0x10, 0x91, 0xE5 - .byte 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A, 0xB0, 0x00, 0x9F, 0xE5 - .byte 0x1C, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2, 0x1C, 0x10, 0x80, 0xE5, 0x09, 0x00, 0x00, 0xEA - .byte 0x90, 0x00, 0x9F, 0xE5, 0x81, 0xA4, 0xFF, 0xEB, 0x8C, 0x00, 0x9F, 0xE5, 0x8C, 0x10, 0x9F, 0xE5 - .byte 0x04, 0x20, 0x90, 0xE5, 0x88, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x1C, 0x30, 0x81, 0xE5, 0x1C, 0x20, 0x80, 0xE5, 0x78, 0x10, 0x9F, 0xE5, 0x01, 0x20, 0x45, 0xE2 - .byte 0x02, 0x41, 0x91, 0xE7, 0x01, 0x00, 0x54, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x02, 0x01, 0x81, 0x17 - .byte 0x5C, 0x00, 0x9F, 0xE5, 0x1C, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x51, 0xE2, 0x1C, 0x10, 0x80, 0xE5 - .byte 0x01, 0x00, 0x00, 0x1A, 0x3C, 0x00, 0x9F, 0xE5, 0x50, 0xA4, 0xFF, 0xEB, 0x01, 0x00, 0x54, 0xE3 - .byte 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x55, 0x03, 0x01, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0xA0, 0xE3, 0x38, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0xA0, 0xE3, 0xB9, 0xEC, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1, 0x34, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x38, 0x80, 0xBD, 0xE8 -_020E2E98: .word 0x021D7178 -_020E2E9C: - .byte 0x98, 0x34, 0x1D, 0x02 - .byte 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0xAC, 0x74, 0x1D, 0x02 - - arm_func_start strlen -strlen: ; 0x020E2EAC - mvn r2, #0x0 -_020E2EB0: - ldrsb r1, [r0], #0x1 - add r2, r2, #0x1 - cmp r1, #0x0 - bne _020E2EB0 - mov r0, r2 - bx lr - - arm_func_start strcpy -strcpy: ; 0x020E2EC8 - stmdb sp!, {r3-r5,lr} - and r4, r1, #0x3 - and r3, r0, #0x3 - mov r2, r0 - cmp r3, r4 - bne _020E2F64 - cmp r4, #0x0 - beq _020E2F20 - ldrb r3, [r1, #0x0] - strb r3, [r0, #0x0] - cmp r3, #0x0 - ldmeqia sp!, {r3-r5,pc} -_020E2EF8: - .byte 0x03, 0x40, 0x74, 0xE2, 0x05, 0x00, 0x00, 0x0A - .byte 0x01, 0x30, 0xF1, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x01, 0x30, 0xE2, 0xE5, 0x38, 0x80, 0xBD, 0x08 - .byte 0x01, 0x40, 0x54, 0xE2, 0xF9, 0xFF, 0xFF, 0x1A, 0x01, 0x20, 0x82, 0xE2, 0x01, 0x10, 0x81, 0xE2 -_020E2F20: - ldr r5, [r1, #0x0] - ldr r3, _020E2F88 ; =0xFEFEFEFF - mvn r4, r5 - add lr, r5, r3 - ldr ip, _020E2F8C ; =0x80808080 - and r4, lr, r4 - tst r4, r12 - bne _020E2F64 - sub r2, r2, #0x4 -_020E2F44: - str r5, [r2, #0x4]! - ldr r5, [r1, #0x4]! - add r4, r5, r3 - mvn lr, r5 - and lr, r4, lr - tst lr, r12 - beq _020E2F44 - add r2, r2, #0x4 -_020E2F64: - ldrb r3, [r1, #0x0] - strb r3, [r2, #0x0] - cmp r3, #0x0 - ldmeqia sp!, {r3-r5,pc} -_020E2F74: - .byte 0x01, 0x30, 0xF1, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x01, 0x30, 0xE2, 0xE5 - .byte 0xFB, 0xFF, 0xFF, 0x1A, 0x38, 0x80, 0xBD, 0xE8 -_020E2F88: .word 0xFEFEFEFF -_020E2F8C: .word 0x80808080 - - arm_func_start strncpy -strncpy: ; 0x020E2F90 - stmdb sp!, {r3,lr} - mov lr, r0 - cmp r2, #0x0 - ldmeqia sp!, {r3,pc} -_020E2FA0: - .byte 0xD1, 0x30, 0xD1, 0xE0, 0x0E, 0xC0, 0xA0, 0xE1, 0x01, 0x30, 0xCE, 0xE4, 0xD0, 0x30, 0xDC, 0xE1 - .byte 0x00, 0x00, 0x53, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x01, 0x20, 0x52, 0xE2, 0x08, 0x80, 0xBD, 0x08 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x10, 0xCE, 0xE4, 0x01, 0x20, 0x52, 0xE2, 0xFC, 0xFF, 0xFF, 0x1A - .byte 0x08, 0x80, 0xBD, 0xE8, 0x01, 0x20, 0x52, 0xE2, 0xF0, 0xFF, 0xFF, 0x1A, 0x08, 0x80, 0xBD, 0xE8 - - arm_func_start strcat -strcat: ; 0x020E2FE0 - mov r3, r0 -_020E2FE4: - ldrsb r2, [r3], #0x1 - cmp r2, #0x0 - bne _020E2FE4 - sub r3, r3, #0x1 -_020E2FF4: - ldrsb r2, [r1], #0x1 - mov r12, r3 - strb r2, [r3], #0x1 - ldrsb r2, [r12, #0x0] - cmp r2, #0x0 - bne _020E2FF4 - bx lr - - arm_func_start strncat -strncat: ; 0x020E3010 - stmdb sp!, {r3,lr} - mov r12, r0 -_020E3018: - ldrsb r3, [r12], #0x1 - cmp r3, #0x0 - bne _020E3018 - cmp r2, #0x0 - sub r12, r12, #0x1 - beq _020E3054 -_020E3030: - ldrsb r3, [r1], #0x1 - mov lr, r12 - strb r3, [r12], #0x1 - ldrsb r3, [lr, #0x0] - cmp r3, #0x0 - subeq r12, r12, #0x1 - beq _020E3054 - subs r2, r2, #0x1 - bne _020E3030 -_020E3054: - mov r1, #0x0 - strb r1, [r12, #0x0] - ldmia sp!, {r3,pc} - - arm_func_start strcmp -strcmp: ; 0x020E3060 - stmdb sp!, {r4,lr} - ldrb r2, [r0, #0x0] - ldrb r3, [r1, #0x0] - subs r3, r2, r3 - movne r0, r3 - ldmneia sp!, {r4,pc} -_020E3078: - .byte 0x03, 0x40, 0x00, 0xE2, 0x03, 0x30, 0x01, 0xE2 - .byte 0x04, 0x00, 0x53, 0xE1, 0x2C, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x54, 0xE3, 0x10, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x52, 0xE3, 0x00, 0x00, 0xA0, 0x03, 0x10, 0x80, 0xBD, 0x08, 0x03, 0x40, 0x74, 0xE2 - .byte 0x09, 0x00, 0x00, 0x0A, 0x01, 0x30, 0xF0, 0xE5, 0x01, 0x20, 0xF1, 0xE5, 0x02, 0x20, 0x53, 0xE0 - .byte 0x02, 0x00, 0xA0, 0x11, 0x10, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x53, 0xE3, 0x00, 0x00, 0xA0, 0x03 - .byte 0x10, 0x80, 0xBD, 0x08, 0x01, 0x40, 0x54, 0xE2, 0xF5, 0xFF, 0xFF, 0x1A, 0x01, 0x00, 0x80, 0xE2 - .byte 0x01, 0x10, 0x81, 0xE2, 0x00, 0x20, 0x90, 0xE5, 0x8C, 0x30, 0x9F, 0xE5, 0x02, 0x40, 0xE0, 0xE1 - .byte 0x03, 0xE0, 0x82, 0xE0, 0x84, 0xC0, 0x9F, 0xE5, 0x04, 0x40, 0x0E, 0xE0, 0x0C, 0x00, 0x14, 0xE1 - .byte 0x00, 0x40, 0x91, 0xE5, 0x0B, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x52, 0xE1, 0x06, 0x00, 0x00, 0x1A - .byte 0x04, 0x20, 0xB0, 0xE5, 0x04, 0x40, 0xB1, 0xE5, 0x03, 0xE0, 0x82, 0xE0, 0x0C, 0x00, 0x1E, 0xE1 - .byte 0x04, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x52, 0xE1, 0xF8, 0xFF, 0xFF, 0x0A, 0x01, 0x00, 0x40, 0xE2 - .byte 0x01, 0x10, 0x41, 0xE2, 0x04, 0x00, 0x00, 0xEA, 0x00, 0x20, 0xD0, 0xE5, 0x00, 0x30, 0xD1, 0xE5 - .byte 0x03, 0x30, 0x52, 0xE0, 0x03, 0x00, 0xA0, 0x11, 0x10, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x52, 0xE3 - .byte 0x00, 0x00, 0xA0, 0x03, 0x10, 0x80, 0xBD, 0x08, 0x01, 0x30, 0xF0, 0xE5, 0x01, 0x20, 0xF1, 0xE5 - .byte 0x02, 0x20, 0x53, 0xE0, 0x02, 0x00, 0xA0, 0x11, 0x10, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x53, 0xE3 - .byte 0xF8, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x80, 0xBD, 0xE8, 0xFF, 0xFE, 0xFE, 0xFE - .byte 0x80, 0x80, 0x80, 0x80 - - arm_func_start strncmp -strncmp: ; 0x020E3174 - cmp r2, #0x0 - beq _020E31A0 -_020E317C: - ldrb r12, [r1], #0x1 - ldrb r3, [r0], #0x1 - cmp r3, r12 - subne r0, r3, r12 - bxne lr - cmp r3, #0x0 - beq _020E31A0 - subs r2, r2, #0x1 - bne _020E317C -_020E31A0: - mov r0, #0x0 - bx lr - - arm_func_start strchr -strchr: ; 0x020E31A8 - ldrsb r2, [r0], #0x1 - mov r1, r1, lsl #0x18 - mov r1, r1, asr #0x18 - cmp r2, #0x0 - beq _020E31D4 -_020E31BC: - cmp r2, r1 - subeq r0, r0, #0x1 - bxeq lr - ldrsb r2, [r0], #0x1 - cmp r2, #0x0 - bne _020E31BC -_020E31D4: - cmp r1, #0x0 - movne r0, #0x0 - subeq r0, r0, #0x1 - bx lr - - arm_func_start strspn -strspn: ; 0x020E31E4 - stmdb sp!, {r4,lr} - sub sp, sp, #0x20 - add r12, sp, #0x0 - mov r3, #0x8 - mov r2, #0x0 -_020E31F8: - strb r2, [r12, #0x0] - strb r2, [r12, #0x1] - strb r2, [r12, #0x2] - strb r2, [r12, #0x3] - add r12, r12, #0x4 - subs r3, r3, #0x1 - bne _020E31F8 - ldrb r3, [r1, #0x0] - add r4, r1, #0x1 - cmp r3, #0x0 - beq _020E3254 - add lr, sp, #0x0 - mov r2, #0x1 -_020E322C: - and r12, r3, #0xff - and r1, r3, #0x7 - mov r1, r2, lsl r1 - ldrb r3, [lr, r12, asr #0x3] - and r1, r1, #0xff - orr r1, r3, r1 - strb r1, [lr, r12, asr #0x3] - ldrb r3, [r4], #0x1 - cmp r3, #0x0 - bne _020E322C -_020E3254: - ldrb r1, [r0, #0x0] - add r4, r0, #0x1 - cmp r1, #0x0 - beq _020E3294 - add r12, sp, #0x0 - mov r2, #0x1 -_020E326C: - and r3, r1, #0xff - and r1, r1, #0x7 - mov r1, r2, lsl r1 - ldrb r3, [r12, r3, asr #0x3] - and r1, r1, #0xff - tst r3, r1 - bne _020E3294 - ldrb r1, [r4], #0x1 - cmp r1, #0x0 - bne _020E326C -_020E3294: - sub r0, r4, r0 - sub r0, r0, #0x1 - add sp, sp, #0x20 - ldmia sp!, {r4,pc} - - arm_func_start strstr -strstr: ; 0x020E32A4 - stmdb sp!, {r4,lr} - cmp r1, #0x0 - ldrneb r2, [r1, #0x0] - cmpne r2, #0x0 - ldmeqia sp!, {r4,pc} -_020E32B8: - .byte 0x00, 0x30, 0xD0, 0xE5, 0x01, 0x40, 0x80, 0xE2 - .byte 0x00, 0x00, 0x53, 0xE3, 0x0F, 0x00, 0x00, 0x0A, 0x02, 0x00, 0x53, 0xE1, 0x0A, 0x00, 0x00, 0x1A - .byte 0x04, 0xE0, 0xA0, 0xE1, 0x01, 0xC0, 0x81, 0xE2, 0x01, 0x30, 0xDC, 0xE4, 0x01, 0x00, 0xDE, 0xE4 - .byte 0x03, 0x00, 0x50, 0xE1, 0x01, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x50, 0xE3, 0xF9, 0xFF, 0xFF, 0x1A - .byte 0x00, 0x00, 0x53, 0xE3, 0x01, 0x00, 0x44, 0x02, 0x10, 0x80, 0xBD, 0x08, 0x01, 0x30, 0xD4, 0xE4 - .byte 0x00, 0x00, 0x53, 0xE3, 0xEF, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x80, 0xBD, 0xE8 - - arm_func_start __strtold -__strtold: ; 0x020E3310 - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0xa8 - ldr r4, [sp, #0xd0] - mov r10, #0x0 - str r4, [sp, #0xd0] - str r0, [sp, #0x0] - add r6, sp, #0x80 - mov r9, r1 - mov r8, r2 - str r3, [sp, #0x4] - mov r4, r10 - str r10, [sp, #0x2c] - mov r5, #0x1 - mov r0, #0x4 -_020E3348: - strh r10, [r6, #0x0] - strh r10, [r6, #0x2] - strh r10, [r6, #0x4] - strh r10, [r6, #0x6] - add r6, r6, #0x8 - subs r0, r0, #0x1 - bne _020E3348 - mov r0, #0x0 - str r0, [sp, #0x28] - strh r10, [r6, #0x0] - strh r10, [r6, #0x2] - ldr r2, [sp, #0x28] - ldr r1, [sp, #0xd0] - strh r10, [r6, #0x4] - str r2, [r1, #0x0] - mov r1, r2 - mov r0, r8 - str r1, [sp, #0x24] - str r1, [sp, #0x20] - str r1, [sp, #0x1c] - str r1, [sp, #0x18] - str r1, [sp, #0x10] - str r1, [sp, #0xc] - str r1, [sp, #0x8] - add r4, r4, #0x1 - blx r9 - mov r1, r0 - ldr r7, _020E42F0 ; =0x02104439 - add r0, sp, #0x4d - mov r6, #0x4 -_020E33C0: - ldrb r3, [r7, #0x0] - ldrb r2, [r7, #0x1] - add r7, r7, #0x2 - strb r3, [r0, #0x0] - strb r2, [r0, #0x1] - add r0, r0, #0x2 - subs r6, r6, #0x1 - bne _020E33C0 - ldrb r3, [r7, #0x0] - ldr r2, _020E42F4 ; =0x02104434 - strb r3, [r0, #0x0] - ldrb r3, [r2, #0x1] - ldrb r0, [r2, #0x2] - ldrb r6, [r2, #0x0] - strb r3, [sp, #0x31] - strb r0, [sp, #0x32] - ldrb r3, [r2, #0x3] - ldrb r0, [r2, #0x4] - strb r6, [sp, #0x30] - strb r3, [sp, #0x33] - strb r0, [sp, #0x34] - b _020E4104 -_020E3418: - cmp r5, #0x100 - bgt _020E3490 - bge _020E3B98 - cmp r5, #0x20 - bgt _020E3474 - bge _020E3A6C - cmp r5, #0x8 - bgt _020E3468 - cmp r5, #0x0 - addge pc, pc, r5, lsl #0x2 - b _020E4104 -_020E3444: - .byte 0x2E, 0x03, 0x00, 0xEA, 0x21, 0x00, 0x00, 0xEA, 0x19, 0x01, 0x00, 0xEA - .byte 0x2B, 0x03, 0x00, 0xEA, 0x43, 0x01, 0x00, 0xEA, 0x29, 0x03, 0x00, 0xEA, 0x28, 0x03, 0x00, 0xEA - .byte 0x27, 0x03, 0x00, 0xEA, 0x49, 0x01, 0x00, 0xEA -_020E3468: - cmp r5, #0x10 - beq _020E3A34 - b _020E4104 -_020E3474: - cmp r5, #0x40 - bgt _020E3484 - beq _020E3AF8 - b _020E4104 -_020E3484: - cmp r5, #0x80 - beq _020E3B44 - b _020E4104 -_020E3490: - cmp r5, #0x2000 - bgt _020E34B8 - bge _020E36EC - cmp r5, #0x200 - bgt _020E34AC - beq _020E3BF8 - b _020E4104 -_020E34AC: - cmp r5, #0x400 - beq _020E3C20 - b _020E4104 -_020E34B8: - cmp r5, #0x4000 - bgt _020E34C8 - beq _020E35F4 - b _020E4104 -_020E34C8: - cmp r5, #0x8000 - beq _020E3C98 - b _020E4104 -_020E34D4: - .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 - .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1 - .byte 0x00, 0x0E, 0x9F, 0xE5, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x2C, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2 - .byte 0x2C, 0x00, 0x8D, 0xE5, 0xF6, 0x02, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA - .byte 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x01, 0x00, 0xA0, 0xE1, 0x01, 0x00, 0x00, 0xEA - .byte 0xB4, 0x0D, 0x9F, 0xE5, 0x01, 0x00, 0xD0, 0xE7, 0x49, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0xCA - .byte 0x15, 0x00, 0x00, 0xAA, 0x2D, 0x00, 0x50, 0xE3, 0x23, 0x00, 0x00, 0xCA, 0x2B, 0x00, 0x50, 0xE3 - .byte 0x21, 0x00, 0x00, 0xBA, 0x07, 0x00, 0x00, 0x0A, 0x2D, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A - .byte 0x1D, 0x00, 0x00, 0xEA, 0x4E, 0x00, 0x50, 0xE3, 0x13, 0x00, 0x00, 0x0A, 0x1A, 0x00, 0x00, 0xEA - .byte 0x01, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x8D, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x01, 0x00, 0xA0, 0xE3, 0x18, 0x00, 0x8D, 0xE5, 0xD5, 0x02, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE1, 0x01, 0x59, 0xA0, 0xE3, 0xCD, 0x02, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE1, 0x02, 0x5A, 0xA0, 0xE3, 0xC5, 0x02, 0x00, 0xEA, 0x02, 0x50, 0xA0, 0xE3 - .byte 0xC3, 0x02, 0x00, 0xEA -_020E35F4: - mov r5, #0x1 - add r7, sp, #0x4d - add r0, sp, #0x76 - mov r6, #0x4 -_020E3604: - ldrb r3, [r7, #0x0] - ldrb r2, [r7, #0x1] - add r7, r7, #0x2 - strb r3, [r0, #0x0] - strb r2, [r0, #0x1] - add r0, r0, #0x2 - subs r6, r6, #0x1 - bne _020E3604 - ldrb r2, [r7, #0x0] - add r6, sp, #0x77 - ldr r7, _020E42FC ; =0x0210428C - strb r2, [r0, #0x0] - b _020E3658 -_020E3638: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r6, r6, #0x1 - add r5, r5, #0x1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 -_020E3658: - cmp r5, #0x8 - bge _020E3688 - cmp r1, #0x0 - blt _020E3670 - cmp r1, #0x80 - blt _020E3678 -_020E3670: - mov r2, r1 - b _020E367C -_020E3678: - ldrb r2, [r7, r1] -_020E367C: - ldrsb r0, [r6, #0x0] - cmp r0, r2 - beq _020E3638 -_020E3688: - cmp r5, #0x3 - cmpne r5, #0x8 - bne _020E36E4 - ldr r0, [sp, #0x28] - cmp r0, #0x0 - beq _020E36B8 - ldr r1, _020E4300 ; =0x02106B74 - mov r0, #0x0 - ldr r1, [r1, #0x0] - bl _fsub - bl _f2d - b _020E36C4 -_020E36B8: - ldr r0, _020E4300 ; =0x02106B74 - ldr r0, [r0, #0x0] - bl _f2d -_020E36C4: - ldr r2, [sp, #0x2c] - add r3, r2, r5 - ldr r2, [sp, #0x18] - add r3, r2, r3 - ldr r2, [sp, #0x4] - add sp, sp, #0xa8 - str r3, [r2, #0x0] - ldmia sp!, {r3-r11,pc} -_020E36E4: - mov r5, #0x1000 - b _020E4104 -_020E36EC: - ldrb r3, [sp, #0x30] - ldrb r0, [sp, #0x32] - ldrb r2, [sp, #0x31] - strb r3, [sp, #0x40] - strb r0, [sp, #0x42] - ldrb r3, [sp, #0x33] - ldrb r0, [sp, #0x34] - strb r2, [sp, #0x41] - mov r5, #0x1 - strb r0, [sp, #0x44] - mov r6, #0x0 - add r2, sp, #0x56 - strb r3, [sp, #0x43] - mov r0, #0x8 -_020E3724: - strb r6, [r2, #0x0] - strb r6, [r2, #0x1] - strb r6, [r2, #0x2] - strb r6, [r2, #0x3] - add r2, r2, #0x4 - subs r0, r0, #0x1 - bne _020E3724 - add r7, sp, #0x41 - b _020E3768 -_020E3748: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r7, r7, #0x1 - add r5, r5, #0x1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 -_020E3768: - cmp r5, #0x4 - bge _020E379C - cmp r1, #0x0 - blt _020E3780 - cmp r1, #0x80 - blt _020E3788 -_020E3780: - mov r2, r1 - b _020E3790 -_020E3788: - ldr r0, _020E42FC ; =0x0210428C - ldrb r2, [r0, r1] -_020E3790: - ldrsb r0, [r7, #0x0] - cmp r0, r2 - beq _020E3748 -_020E379C: - sub r0, r5, #0x3 - cmp r0, #0x1 - bhi _020E38B0 - cmp r5, #0x4 - bne _020E3854 - ldr r7, _020E42F8 ; =0x0210430C - b _020E37DC -_020E37B8: - add r0, sp, #0x56 - strb r1, [r0, r6] - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r6, r6, #0x1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 -_020E37DC: - cmp r6, #0x20 - bge _020E3844 - cmp r1, #0x0 - blt _020E37F4 - cmp r1, #0x80 - blt _020E37FC -_020E37F4: - mov r0, #0x0 - b _020E3808 -_020E37FC: - mov r0, r1, lsl #0x1 - ldrh r0, [r7, r0] - and r0, r0, #0x8 -_020E3808: - cmp r0, #0x0 - bne _020E37B8 - cmp r1, #0x0 - blt _020E3820 - cmp r1, #0x80 - blt _020E3828 -_020E3820: - mov r0, #0x0 - b _020E3834 -_020E3828: - mov r0, r1, lsl #0x1 - ldrh r0, [r7, r0] - and r0, r0, #0x1 -_020E3834: - cmp r0, #0x0 - bne _020E37B8 - cmp r1, #0x2e - beq _020E37B8 -_020E3844: - cmp r1, #0x29 - movne r5, #0x1000 - bne _020E4104 - add r6, r6, #0x1 -_020E3854: - add r0, sp, #0x56 - mov r1, #0x0 - strb r1, [r0, r6] - ldr r1, [sp, #0x28] - cmp r1, #0x0 - beq _020E3888 - bl nan - mov r2, r0 - mov r0, #0x0 - mov r3, r1 - mov r1, r0 - bl _dsub -_020E3884: - .byte 0x00, 0x00, 0x00, 0xEA -_020E3888: - bl nan - ldr r2, [sp, #0x2c] - add r2, r2, r5 - add r3, r6, r2 - ldr r2, [sp, #0x18] - add r3, r2, r3 - ldr r2, [sp, #0x4] - add sp, sp, #0xa8 - str r3, [r2, #0x0] - ldmia sp!, {r3-r11,pc} -_020E38B0: - mov r5, #0x1000 - b _020E4104 -_020E38B8: - .byte 0x2E, 0x00, 0x51, 0xE3, 0x07, 0x00, 0x00, 0x1A - .byte 0x10, 0x50, 0xA0, 0xE3, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x08, 0x02, 0x00, 0xEA - .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA - .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1, 0xF4, 0x09, 0x9F, 0xE5 - .byte 0xB2, 0x00, 0x90, 0xE1, 0x08, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x5A, 0xA0, 0x03 - .byte 0xFB, 0x01, 0x00, 0x0A, 0x30, 0x00, 0x51, 0xE3, 0x10, 0x00, 0x00, 0x1A, 0x01, 0x40, 0x84, 0xE2 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x03, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0x00, 0xAA, 0xB0, 0x29, 0x9F, 0xE5, 0x00, 0x00, 0xD2, 0xE7, 0x58, 0x00, 0x50, 0xE3 - .byte 0x02, 0x59, 0xA0, 0x03, 0x01, 0xA0, 0xA0, 0x03, 0x04, 0x50, 0xA0, 0x13, 0xE8, 0x01, 0x00, 0xEA - .byte 0x08, 0x50, 0xA0, 0xE3, 0xE6, 0x01, 0x00, 0xEA, 0x30, 0x00, 0x51, 0xE3, 0x08, 0x50, 0xA0, 0x13 - .byte 0xE3, 0x01, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xDC, 0x01, 0x00, 0xEA - .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA - .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1, 0x44, 0x09, 0x9F, 0xE5 - .byte 0xB2, 0x00, 0x90, 0xE1, 0x08, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x1A - .byte 0x2E, 0x00, 0x51, 0xE3, 0x40, 0x50, 0xA0, 0x13, 0xCD, 0x01, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x20, 0x50, 0xA0, 0xE3, 0x01, 0x40, 0x84, 0xE2 - .byte 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xC5, 0x01, 0x00, 0xEA, 0x84, 0x20, 0xDD, 0xE5 - .byte 0x14, 0x00, 0x52, 0xE3, 0x1C, 0x00, 0x9D, 0x25, 0x01, 0x00, 0x80, 0x22, 0x1C, 0x00, 0x8D, 0x25 - .byte 0x04, 0x00, 0x00, 0x2A, 0x01, 0x00, 0x82, 0xE2, 0x84, 0x00, 0xCD, 0xE5, 0x80, 0x00, 0x8D, 0xE2 - .byte 0x02, 0x00, 0x80, 0xE0, 0x05, 0x10, 0xC0, 0xE5, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0xB3, 0x01, 0x00, 0xEA -_020E3A34: - cmp r1, #0x0 - blt _020E3A44 - cmp r1, #0x80 - blt _020E3A4C -_020E3A44: - mov r0, #0x0 - b _020E3A5C -_020E3A4C: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =0x0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3A5C: - cmp r0, #0x0 - moveq r5, #0x1000 - movne r5, #0x20 - b _020E4104 -_020E3A6C: - cmp r1, #0x0 - blt _020E3A7C - cmp r1, #0x80 - blt _020E3A84 -_020E3A7C: - mov r0, #0x0 - b _020E3A94 -_020E3A84: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =0x0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3A94: - cmp r0, #0x0 - moveq r5, #0x40 - beq _020E4104 - ldrb r3, [sp, #0x84] - cmp r3, #0x14 - bhs _020E3ADC - cmp r1, #0x30 - cmpeq r3, #0x0 - beq _020E3AD0 - ldrb r2, [sp, #0x84] - add r0, sp, #0x80 - add r0, r0, r3 - add r2, r2, #0x1 - strb r2, [sp, #0x84] - strb r1, [r0, #0x5] -_020E3AD0: - ldr r0, [sp, #0x1c] - sub r0, r0, #0x1 - str r0, [sp, #0x1c] -_020E3ADC: - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3AF8: - cmp r1, #0x0 - blt _020E3B08 - cmp r1, #0x80 - blt _020E3B10 -_020E3B08: - mov r0, r1 - b _020E3B18 -_020E3B10: - ldr r0, _020E42FC ; =0x0210428C - ldrb r0, [r0, r1] -_020E3B18: - cmp r0, #0x45 - movne r5, #0x800 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r5, #0x80 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3B44: - cmp r1, #0x2b - bne _020E3B68 - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - b _020E3B90 -_020E3B68: - cmp r1, #0x2d - bne _020E3B90 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - mov r0, #0x1 - str r0, [sp, #0x24] -_020E3B90: - mov r5, #0x100 - b _020E4104 -_020E3B98: - cmp r1, #0x0 - blt _020E3BA8 - cmp r1, #0x80 - blt _020E3BB0 -_020E3BA8: - mov r0, #0x0 - b _020E3BC0 -_020E3BB0: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =0x0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3BC0: - cmp r0, #0x0 - moveq r5, #0x1000 - beq _020E4104 - cmp r1, #0x30 - movne r5, #0x400 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r5, #0x200 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3BF8: - cmp r1, #0x30 - movne r5, #0x400 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3C20: - cmp r1, #0x0 - blt _020E3C30 - cmp r1, #0x80 - blt _020E3C38 -_020E3C30: - mov r0, #0x0 - b _020E3C48 -_020E3C38: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =0x0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3C48: - cmp r0, #0x0 - moveq r5, #0x800 - beq _020E4104 - ldr r0, [sp, #0x20] - sub r2, r1, #0x30 - mov r1, #0xa - mla r0, r1, r0, r2 - ldr r1, _020E4304 ; =0x00007FFF - str r0, [sp, #0x20] - cmp r0, r1 - ldrgt r0, [sp, #0xd0] - movgt r1, #0x1 - strgt r1, [r0, #0x0] - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3C98: - cmp r10, #0x20 - bgt _020E3CE8 - bge _020E3FBC - cmp r10, #0x8 - bgt _020E3CDC - cmp r10, #0x0 - addge pc, pc, r10, lsl #0x2 - b _020E4104 -_020E3CB8: - .byte 0x11, 0x01, 0x00, 0xEA, 0x12, 0x00, 0x00, 0xEA - .byte 0x25, 0x00, 0x00, 0xEA, 0x0E, 0x01, 0x00, 0xEA, 0x2D, 0x00, 0x00, 0xEA, 0x0C, 0x01, 0x00, 0xEA - .byte 0x0B, 0x01, 0x00, 0xEA, 0x0A, 0x01, 0x00, 0xEA, 0x6D, 0x00, 0x00, 0xEA -_020E3CDC: - cmp r10, #0x10 - beq _020E3F70 - b _020E4104 -_020E3CE8: - cmp r10, #0x80 - bgt _020E3D00 - bge _020E4064 - cmp r10, #0x40 - beq _020E4004 - b _020E4104 -_020E3D00: - cmp r10, #0x100 - beq _020E408C - b _020E4104 -_020E3D0C: - .byte 0x00, 0x10, 0xA0, 0xE3 - .byte 0x45, 0x00, 0x8D, 0xE2, 0x14, 0x00, 0x8D, 0xE5, 0x00, 0x10, 0xC0, 0xE5, 0x01, 0x10, 0xC0, 0xE5 - .byte 0x02, 0x10, 0xC0, 0xE5, 0x03, 0x10, 0xC0, 0xE5, 0x04, 0x10, 0xC0, 0xE5, 0x05, 0x10, 0xC0, 0xE5 - .byte 0x06, 0x10, 0xC0, 0xE5, 0x07, 0x10, 0xC0, 0xE5, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x08, 0x10, 0x8D, 0xE5, 0x01, 0xB0, 0xA0, 0xE1, 0x02, 0xA0, 0xA0, 0xE3, 0x01, 0x40, 0x84, 0xE2 - .byte 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xE9, 0x00, 0x00, 0xEA, 0x30, 0x00, 0x51, 0xE3 - .byte 0x04, 0xA0, 0xA0, 0x13, 0xE6, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0xDF, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 - .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1 - .byte 0x50, 0x05, 0x9F, 0xE5, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0B, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 - .byte 0x0A, 0x00, 0x00, 0x1A, 0x2E, 0x00, 0x51, 0xE3, 0x10, 0xA0, 0xA0, 0x13, 0xD0, 0x00, 0x00, 0x1A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x08, 0xA0, 0xA0, 0xE3 - .byte 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xC8, 0x00, 0x00, 0xEA - .byte 0x08, 0x20, 0x9D, 0xE5, 0x0E, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x52, 0xE1, 0x21, 0x00, 0x00, 0x2A - .byte 0x02, 0x00, 0xA0, 0xE1, 0x01, 0x00, 0x80, 0xE2, 0x08, 0x00, 0x8D, 0xE5, 0x14, 0x00, 0x9D, 0xE5 - .byte 0xAB, 0x2F, 0x8B, 0xE0, 0x00, 0x00, 0x51, 0xE3, 0xC2, 0x00, 0xD0, 0xE7, 0x03, 0x00, 0x00, 0xBA - .byte 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xAA, 0xDC, 0x24, 0x9F, 0xE5, 0x01, 0x10, 0xD2, 0xE7 - .byte 0x41, 0x00, 0x51, 0xE3, 0x37, 0x10, 0x41, 0xA2, 0x30, 0x10, 0x41, 0xB2, 0xAB, 0x2F, 0xA0, 0xE1 - .byte 0xFF, 0x30, 0x01, 0xE2, 0x8B, 0x1F, 0x62, 0xE0, 0xE1, 0x1F, 0x92, 0xE0, 0x03, 0x12, 0xA0, 0x01 - .byte 0xAB, 0x2F, 0x8B, 0xE0, 0x03, 0x00, 0x80, 0x11, 0xFF, 0x10, 0x01, 0x02, 0x01, 0x00, 0x80, 0x01 - .byte 0x14, 0x10, 0x9D, 0xE5, 0x01, 0xB0, 0x8B, 0xE2, 0xC2, 0x00, 0xC1, 0xE7, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE1, 0xA2, 0x00, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x9B, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 - .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1 - .byte 0x40, 0x04, 0x9F, 0xE5, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0B, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 - .byte 0x10, 0xA0, 0xA0, 0x03, 0x8E, 0x00, 0x00, 0x0A, 0x08, 0x20, 0x9D, 0xE5, 0x0E, 0x00, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x52, 0xE1, 0x1E, 0x00, 0x00, 0x2A, 0x14, 0x00, 0x9D, 0xE5, 0xAB, 0x2F, 0x8B, 0xE0 - .byte 0x00, 0x00, 0x51, 0xE3, 0xC2, 0x00, 0xD0, 0xE7, 0x03, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 - .byte 0x01, 0x00, 0x00, 0xAA, 0x00, 0x24, 0x9F, 0xE5, 0x01, 0x10, 0xD2, 0xE7, 0x41, 0x00, 0x51, 0xE3 - .byte 0x37, 0x10, 0x41, 0xA2, 0x30, 0x10, 0x41, 0xB2, 0xAB, 0x2F, 0xA0, 0xE1, 0xFF, 0x30, 0x01, 0xE2 - .byte 0x8B, 0x1F, 0x62, 0xE0, 0xE1, 0x1F, 0x92, 0xE0, 0x03, 0x12, 0xA0, 0x01, 0xAB, 0x2F, 0x8B, 0xE0 - .byte 0x03, 0x00, 0x80, 0x11, 0xFF, 0x10, 0x01, 0x02, 0x01, 0x00, 0x80, 0x01, 0x14, 0x10, 0x9D, 0xE5 - .byte 0x01, 0xB0, 0x8B, 0xE2, 0xC2, 0x00, 0xC1, 0xE7, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x6B, 0x00, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x64, 0x00, 0x00, 0xEA -_020E3F70: - cmp r1, #0x0 - blt _020E3F80 - cmp r1, #0x80 - blt _020E3F88 -_020E3F80: - mov r0, r1 - b _020E3F90 -_020E3F88: - ldr r0, _020E42FC ; =0x0210428C - ldrb r0, [r0, r1] -_020E3F90: - cmp r0, #0x50 - movne r5, #0x800 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r10, #0x20 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3FBC: - cmp r1, #0x2d - moveq r0, #0x1 - streq r0, [sp, #0xc] - beq _020E3FE4 - cmp r1, #0x2b - beq _020E3FE4 - mov r0, r8 - mov r2, #0x1 - blx r9 - sub r4, r4, #0x1 -_020E3FE4: - mov r10, #0x40 - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - b _020E4104 -_020E4004: - cmp r1, #0x0 - blt _020E4014 - cmp r1, #0x80 - blt _020E401C -_020E4014: - mov r0, #0x0 - b _020E402C -_020E401C: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =0x0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E402C: - cmp r0, #0x0 - moveq r5, #0x1000 - beq _020E4104 - cmp r1, #0x30 - movne r10, #0x100 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r10, #0x80 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E4064: - cmp r1, #0x30 - movne r10, #0x100 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E408C: - cmp r1, #0x0 - blt _020E409C - cmp r1, #0x80 - blt _020E40A4 -_020E409C: - mov r0, #0x0 - b _020E40B4 -_020E40A4: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =0x0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E40B4: - cmp r0, #0x0 - moveq r5, #0x800 - beq _020E4104 - ldr r0, [sp, #0x10] - sub r2, r1, #0x30 - mov r1, #0xa - mla r0, r1, r0, r2 - str r0, [sp, #0x10] - ldr r1, _020E4304 ; =0x00007FFF - ldr r0, [sp, #0x20] - add r4, r4, #0x1 - cmp r0, r1 - ldrgt r0, [sp, #0xd0] - movgt r1, #0x1 - strgt r1, [r0, #0x0] - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - mov r1, r0 -_020E4104: - ldr r0, [sp, #0x0] - cmp r4, r0 - bgt _020E4124 - mvn r0, #0x0 - cmp r1, r0 - beq _020E4124 - tst r5, #0x1800 - beq _020E3418 -_020E4124: - cmp r5, #0x8000 - beq _020E4140 - ldr r0, _020E4308 ; =0x00000E2C - tst r5, r0 - moveq r0, #0x1 - movne r0, #0x0 - b _020E4164 -_020E4140: - sub r0, r4, #0x1 - cmp r0, #0x2 - ble _020E4158 - ldr r0, _020E430C ; =0x0000018E - tst r10, r0 - bne _020E4160 -_020E4158: - mov r0, #0x1 - b _020E4164 -_020E4160: - mov r0, #0x0 -_020E4164: - cmp r0, #0x0 - movne r2, #0x0 - ldrne r0, [sp, #0x4] - bne _020E4184 - ldr r0, [sp, #0x2c] - sub r2, r4, #0x1 - add r2, r2, r0 - ldr r0, [sp, #0x4] -_020E4184: - str r2, [r0, #0x0] - mov r0, r8 - mov r2, #0x1 - blx r9 - cmp r10, #0x0 - bne _020E4388 - ldr r0, [sp, #0x24] - ldrb r2, [sp, #0x84] - cmp r0, #0x0 - ldrne r0, [sp, #0x20] - rsbne r0, r0, #0x0 - strne r0, [sp, #0x20] - add r0, sp, #0x85 - add r1, r0, r2 - b _020E41CC -_020E41C0: - ldr r0, [sp, #0x1c] - add r0, r0, #0x1 - str r0, [sp, #0x1c] -_020E41CC: - cmp r2, #0x0 - sub r2, r2, #0x1 - beq _020E41E4 - ldrb r0, [r1, #-0x1]! - cmp r0, #0x30 - beq _020E41C0 -_020E41E4: - add r0, r2, #0x1 - strb r0, [sp, #0x84] - ands r2, r0, #0xff - bne _020E4208 - add r1, r2, #0x1 - strb r1, [sp, #0x84] - add r0, sp, #0x85 - mov r1, #0x30 - strb r1, [r0, r2] -_020E4208: - ldr r1, [sp, #0x20] - ldr r0, [sp, #0x1c] - mov r2, #0x8000 - add r0, r1, r0 - rsb r2, r2, #0x0 - str r0, [sp, #0x20] - cmp r0, r2 - blt _020E4230 - cmp r0, r2, lsr #0x11 - ble _020E423C -_020E4230: - ldr r0, [sp, #0xd0] - mov r1, #0x1 - str r1, [r0, #0x0] -_020E423C: - ldr r0, [sp, #0xd0] - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _020E4298 - ldr r0, [sp, #0x24] - cmp r0, #0x0 - movne r0, #0x0 - addne sp, sp, #0xa8 - movne r1, r0 - ldmneia sp!, {r3-r11,pc} -_020E4264: - .byte 0x28, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x9C, 0x10, 0x9F, 0x05 - .byte 0xA8, 0xD0, 0x8D, 0x02, 0x03, 0x00, 0x91, 0x08, 0xF8, 0x8F, 0xBD, 0x08, 0x8C, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x0C, 0x00, 0x91, 0xE8, 0x00, 0x10, 0xA0, 0xE1, 0xCE, 0x18, 0x00, 0xEB - .byte 0xA8, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 -_020E4298: - ldr r1, [sp, #0x20] - add r0, sp, #0x80 - strh r1, [sp, #0x82] - bl __dec2num - mov r4, r0 - mov r6, r1 - mov r0, #0x0 - mov r1, r0 - mov r2, r4 - mov r3, r6 - bl _dneq - beq _020E4318 - mov r0, r4 - mov r1, r6 - mov r2, #0x0 - mov r3, #0x100000 - bl _dls - bhs _020E4318 - ldr r0, [sp, #0xd0] - mov r1, #0x1 - str r1, [r0, #0x0] - b _020E4344 - .balign 4 -_020E42F0: .word 0x02104439 -_020E42F4: .word 0x02104434 -_020E42F8: .word 0x0210430C -_020E42FC: .word 0x0210428C -_020E4300: .word 0x02106B74 -_020E4304: .word 0x00007FFF -_020E4308: .word 0x00000E2C -_020E430C: .word 0x0000018E -_020E4310: .word 0x02106B7C -_020E4314: .word 0x7FEFFFFF -_020E4318: - ldr r3, _020E4314 ; =0x7FEFFFFF - mov r0, r4 - mov r1, r6 - mvn r2, #0x0 - bl _dgr - bls _020E4344 - ldr r0, [sp, #0xd0] - mov r2, #0x1 - ldr r1, _020E4310 ; =0x02106B7C - str r2, [r0, #0x0] - ldmia r1, {r4,r6} -_020E4344: - ldr r0, [sp, #0x28] - cmp r0, #0x0 - beq _020E4378 - ldr r0, _020E4308 ; =0x00000E2C - tst r5, r0 - beq _020E4378 - mov r0, #0x0 - mov r1, r0 - mov r2, r4 - mov r3, r6 - bl _dsub - mov r4, r0 - mov r6, r1 -_020E4378: - add sp, sp, #0xa8 - mov r0, r4 - mov r1, r6 - ldmia sp!, {r3-r11,pc} -_020E4388: - ldr r0, [sp, #0xc] - add r4, sp, #0x38 - cmp r0, #0x0 - ldrne r0, [sp, #0x10] - ldrb r3, [sp, #0x45] - rsbne r0, r0, #0x0 - strne r0, [sp, #0x10] - ldr r1, [sp, #0x10] - ldr r0, [sp, #0x8] - mov r2, #0x0 - add r0, r1, r0, lsl #0x2 - str r0, [sp, #0x10] - mov r1, #0x80 - b _020E43D0 -_020E43C0: - ldr r0, [sp, #0x10] - add r2, r2, #0x1 - sub r0, r0, #0x1 - str r0, [sp, #0x10] -_020E43D0: - cmp r2, #0x4 - bhs _020E43E0 - tst r3, r1, asr r2 - beq _020E43C0 -_020E43E0: - adds r5, r2, #0x1 - beq _020E442C - add r0, sp, #0x4c - add r3, sp, #0x45 - str r0, [sp, #0x14] - mov r1, #0x0 - cmp r0, r3 - blo _020E442C - rsb r6, r5, #0x8 -_020E4404: - ldr r0, [sp, #0x14] - ldrb r0, [r0, #0x0] - orr r2, r1, r0, lsl r5 - mov r1, r0, asr r6 - ldr r0, [sp, #0x14] - and r1, r1, #0xff - strb r2, [r0], #-0x1 - str r0, [sp, #0x14] - cmp r0, r3 - bhs _020E4404 -_020E442C: - mov r2, #0x0 - mov r6, r2 - strb r2, [r4, #0x0] - strb r2, [r4, #0x1] - strb r2, [r4, #0x2] - strb r2, [r4, #0x3] - strb r2, [r4, #0x4] - strb r2, [r4, #0x5] - strb r2, [r4, #0x6] - strb r2, [r4, #0x7] - mov r3, #0xc - mov r7, #0x1 - mov r0, #0xff - add r1, sp, #0x45 -_020E4464: - add r5, r2, #0x8 - cmp r5, #0x34 - ldrb r5, [r1, r6] - rsbhi r8, r2, #0x34 - and r11, r3, #0x7 - andhi r5, r5, r0, lsl r8 - andhi r5, r5, #0xff - mov r8, r5, asr r11 - and r9, r8, #0xff - ldrb r10, [r4, r7] - rsb r8, r11, #0x8 - mov r5, r5, lsl r8 - orr r9, r10, r9 - strb r9, [r4, r7] - add r7, r7, #0x1 - add r2, r2, #0x8 - ldrb r8, [r4, r7] - and r5, r5, #0xff - cmp r2, #0x34 - orr r5, r8, r5 - strb r5, [r4, r7] - add r3, r3, #0x8 - add r6, r6, #0x1 - blo _020E4464 - ldr r0, [sp, #0x10] - mov r1, #0x800 - add r0, r0, #0xfe - add r2, r0, #0x300 - rsb r1, r1, #0x0 - tst r2, r1 - beq _020E44FC - ldr r2, [sp, #0xd0] - mov r3, #0x1 - mov r0, #0x0 - add sp, sp, #0xa8 - mov r1, r0 - str r3, [r2, #0x0] - ldmia sp!, {r3-r11,pc} -_020E44FC: - ldrb r0, [r4, #0x1] - mov r2, r2, lsl #0x15 - ldrb r1, [r4, #0x0] - orr r0, r0, r2, lsr #0x11 - strb r0, [r4, #0x1] - ldr r0, [sp, #0x28] - orr r1, r1, r2, lsr #0x19 - cmp r0, #0x0 - andne r0, r1, #0xff - strb r1, [r4, #0x0] - orrne r0, r0, #0x80 - strneb r0, [r4, #0x0] - mov r3, #0x0 -_020E4530: - rsb r1, r3, #0x7 - ldrb r2, [r4, r3] - ldrb r0, [r4, r1] - strb r0, [r4, r3] - add r3, r3, #0x1 - strb r2, [r4, r1] - cmp r3, #0x4 - blt _020E4530 - ldmia r4, {r0-r1} - add sp, sp, #0xa8 - ldmia sp!, {r3-r11,pc} - - arm_func_start strtold -strtold: ; 0x020E455C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x14 - mov r7, r0 - mov r0, #0x0 - mov r6, r1 - str r0, [sp, #0x8] - add r4, sp, #0xc - str r7, [sp, #0x4] - ldr r1, _020E4630 ; =__StringRead - add r2, sp, #0x4 - add r3, sp, #0x10 - sub r0, r0, #0x80000001 - str r4, [sp, #0x0] - bl __strtold - mov r5, r1 - mov r4, r0 - cmp r6, #0x0 - ldrne r0, [sp, #0x10] - mov r1, r5 - addne r0, r7, r0 - strne r0, [r6, #0x0] - mov r0, r4 - bl fabs - ldr r2, [sp, #0xc] - mov r6, r0 - mov r7, r1 - cmp r2, #0x0 - bne _020E4614 - mov r0, #0x0 - mov r1, r0 - mov r2, r4 - mov r3, r5 - bl _dneq - beq _020E4620 - mov r0, r6 - mov r1, r7 - mov r2, #0x0 - mov r3, #0x100000 - bl _dls - blo _020E4614 - ldr r3, _020E4634 ; =0x7FEFFFFF - mov r0, r6 - mov r1, r7 - mvn r2, #0x0 - bl _dgr - bls _020E4620 -_020E4614: - ldr r0, _020E4638 ; =0x021D74A8 - mov r1, #0x22 - str r1, [r0, #0x0] -_020E4620: - mov r0, r4 - mov r1, r5 - add sp, sp, #0x14 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020E4630: .word __StringRead -_020E4634: .word 0x7FEFFFFF -_020E4638: .word 0x021D74A8 - - arm_func_start atod -atod: ; 0x020E463C - ldr ip, _020E4648 ; =strtold - mov r1, #0x0 - bx r12 - .balign 4 -_020E4648: .word strtold - - arm_func_start __strtoul -__strtoul: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - ldr r4, [sp, #0x38] - movs r9, r0 - ldr r0, [sp, #0x34] - str r4, [sp, #0x38] - mov r4, #0x0 - str r0, [sp, #0x34] - ldr r0, [sp, #0x38] - str r1, [sp, #0x0] - str r4, [r0, #0x0] - mov r0, r4 - str r0, [sp, #0x4] - ldr r0, [sp, #0x34] - mov r1, r4 - str r1, [r0, #0x0] - ldr r0, [sp, #0x30] - str r4, [sp, #0x8] - mov r8, r2 - mov r7, r3 - mov r5, r4 - mov r10, r4 - str r0, [sp, #0x30] - mov r4, #0x1 - bmi _020E46CC - cmp r9, #0x1 - beq _020E46CC - cmp r9, #0x24 - bgt _020E46CC - ldr r0, [sp, #0x0] - cmp r0, #0x1 - bge _020E46D4 -_020E46CC: - mov r4, #0x40 - b _020E46F0 -_020E46D4: - ldr r1, [sp, #0x8] - mov r0, r7 - mov r3, r1 - mov r2, r1 - add r5, r3, #0x1 - blx r8 - mov r6, r0 -_020E46F0: - cmp r9, #0x0 - beq _020E4708 - mov r1, r9 - mvn r0, #0x0 - bl _u32_div_f - str r0, [sp, #0x4] -_020E4708: - mvn r11, #0x0 - b _020E49C8 -_020E4710: - cmp r4, #0x8 - bgt _020E4748 - cmp r4, #0x0 - addge pc, pc, r4, lsl #0x2 - b _020E49C8 -_020E4724: - .byte 0xA7, 0x00, 0x00, 0xEA, 0x09, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0xEA - .byte 0xA4, 0x00, 0x00, 0xEA, 0x40, 0x00, 0x00, 0xEA, 0xA2, 0x00, 0x00, 0xEA, 0xA1, 0x00, 0x00, 0xEA - .byte 0xA0, 0x00, 0x00, 0xEA, 0x4C, 0x00, 0x00, 0xEA -_020E4748: - cmp r4, #0x10 - beq _020E487C - b _020E49C8 -_020E4754: - .byte 0x00, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x56, 0xE3 - .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0xB8, 0x02, 0x9F, 0xE5 - .byte 0x86, 0x10, 0xA0, 0xE1, 0xB1, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x08, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2 - .byte 0x08, 0x00, 0x8D, 0xE5, 0x87, 0x00, 0x00, 0xEA, 0x2B, 0x00, 0x56, 0xE3, 0x06, 0x00, 0x00, 0x1A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2 - .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x0A, 0x00, 0x00, 0xEA, 0x2D, 0x00, 0x56, 0xE3 - .byte 0x08, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x34, 0x00, 0x9D, 0xE5 - .byte 0x01, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5, 0x02, 0x40, 0xA0, 0xE3, 0x71, 0x00, 0x00, 0xEA - .byte 0x00, 0x00, 0x59, 0xE3, 0x10, 0x00, 0x59, 0x13, 0x09, 0x00, 0x00, 0x1A, 0x30, 0x00, 0x56, 0xE3 - .byte 0x07, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x04, 0x40, 0xA0, 0xE3, 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1 - .byte 0x64, 0x00, 0x00, 0xEA, 0x08, 0x40, 0xA0, 0xE3, 0x62, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x56, 0xE3 - .byte 0x78, 0x00, 0x56, 0x13, 0x08, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x10, 0x90, 0xA0, 0xE3, 0x08, 0x40, 0xA0, 0xE3, 0x01, 0x50, 0x85, 0xE2 - .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x56, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x59, 0xE3 - .byte 0x08, 0x90, 0xA0, 0x03, 0x10, 0x40, 0xA0, 0xE3, 0x52, 0x00, 0x00, 0xEA -_020E487C: - ldr r0, [sp, #0x4] - cmp r9, #0x0 - moveq r9, #0xa - cmp r0, #0x0 - bne _020E48A0 - mov r0, r11 - mov r1, r9 - bl _u32_div_f - str r0, [sp, #0x4] -_020E48A0: - cmp r6, #0x0 - blt _020E48B0 - cmp r6, #0x80 - blt _020E48B8 -_020E48B0: - mov r0, #0x0 - b _020E48C8 -_020E48B8: - ldr r0, _020E4A2C ; =0x0210430C - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x8 -_020E48C8: - cmp r0, #0x0 - beq _020E48F0 - sub r6, r6, #0x30 - cmp r6, r9 - blt _020E4978 - cmp r4, #0x10 - moveq r4, #0x20 - movne r4, #0x40 - add r6, r6, #0x30 - b _020E49C8 -_020E48F0: - cmp r6, #0x0 - blt _020E4900 - cmp r6, #0x80 - blt _020E4908 -_020E4900: - mov r0, #0x0 - b _020E4918 -_020E4908: - ldr r0, _020E4A2C ; =0x0210430C - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x1 -_020E4918: - cmp r0, #0x0 - beq _020E494C - cmp r6, #0x0 - blt _020E4930 - cmp r6, #0x80 - blt _020E4938 -_020E4930: - mov r0, r6 - b _020E4940 -_020E4938: - ldr r0, _020E4A30 ; =0x0210428C - ldrb r0, [r0, r6] -_020E4940: - sub r0, r0, #0x37 - cmp r0, r9 - blt _020E495C -_020E494C: - cmp r4, #0x10 - moveq r4, #0x20 - movne r4, #0x40 - b _020E49C8 -_020E495C: - cmp r6, #0x0 - blt _020E4974 - cmp r6, #0x80 - bge _020E4974 - ldr r0, _020E4A30 ; =0x0210428C - ldrb r6, [r0, r6] -_020E4974: - sub r6, r6, #0x37 -_020E4978: - ldr r0, [sp, #0x4] - mov r4, #0x10 - cmp r10, r0 - ldrhi r0, [sp, #0x38] - movhi r1, #0x1 - strhi r1, [r0, #0x0] - mul r0, r10, r9 - mov r10, r0 - sub r0, r11, r0 - cmp r6, r0 - ldrhi r0, [sp, #0x38] - movhi r1, #0x1 - strhi r1, [r0, #0x0] - mov r1, #0x0 - mov r0, r7 - mov r2, r1 - add r10, r10, r6 - add r5, r5, #0x1 - blx r8 - mov r6, r0 -_020E49C8: - ldr r0, [sp, #0x0] - cmp r5, r0 - bgt _020E49E4 - cmp r6, r11 - beq _020E49E4 - tst r4, #0x60 - beq _020E4710 -_020E49E4: - tst r4, #0x34 - bne _020E49FC - ldr r0, [sp, #0x30] - mov r10, #0x0 - str r10, [r0, #0x0] - b _020E4A10 -_020E49FC: - ldr r0, [sp, #0x8] - sub r1, r5, #0x1 - add r1, r1, r0 - ldr r0, [sp, #0x30] - str r1, [r0, #0x0] -_020E4A10: - mov r0, r7 - mov r1, r6 - mov r2, #0x1 - blx r8 - mov r0, r10 - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} - .balign 4 -_020E4A2C: .word 0x0210430C -_020E4A30: .word 0x0210428C - - arm_func_start __strtoull -__strtoull: ; 0x020E4A34 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x1c - ldr r4, [sp, #0x48] - movs r9, r0 - ldr r0, [sp, #0x44] - str r4, [sp, #0x48] - mov r4, #0x0 - str r0, [sp, #0x44] - ldr r0, [sp, #0x48] - str r1, [sp, #0x0] - str r4, [r0, #0x0] - mov r0, r4 - str r0, [sp, #0xc] - str r0, [sp, #0x8] - ldr r0, [sp, #0x44] - mov r1, r4 - str r1, [r0, #0x0] - ldr r0, [sp, #0x40] - str r4, [sp, #0x14] - mov r8, r2 - mov r7, r3 - mov r5, r4 - mov r10, r4 - mov r11, r4 - str r0, [sp, #0x40] - mov r4, #0x1 - bmi _020E4ABC - cmp r9, #0x1 - beq _020E4ABC - cmp r9, #0x24 - bgt _020E4ABC - ldr r0, [sp, #0x0] - cmp r0, #0x1 - bge _020E4AC4 -_020E4ABC: - mov r4, #0x40 - b _020E4ADC -_020E4AC4: - ldr r1, [sp, #0x14] - mov r0, r7 - mov r2, r1 - add r5, r1, #0x1 - blx r8 - mov r6, r0 -_020E4ADC: - cmp r9, #0x0 - beq _020E4B00 - mvn r0, #0x0 - mov r1, r0 - mov r3, r9, asr #0x1f - mov r2, r9 - bl _ll_udiv - str r0, [sp, #0xc] - str r1, [sp, #0x8] -_020E4B00: - mvn r0, #0x0 - str r0, [sp, #0x18] - b _020E4E08 -_020E4B0C: - cmp r4, #0x8 - bgt _020E4B44 - cmp r4, #0x0 - addge pc, pc, r4, lsl #0x2 - b _020E4E08 -_020E4B20: - .byte 0xB8, 0x00, 0x00, 0xEA, 0x09, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0xEA, 0xB5, 0x00, 0x00, 0xEA - .byte 0x40, 0x00, 0x00, 0xEA, 0xB3, 0x00, 0x00, 0xEA, 0xB2, 0x00, 0x00, 0xEA, 0xB1, 0x00, 0x00, 0xEA - .byte 0x4C, 0x00, 0x00, 0xEA -_020E4B44: - cmp r4, #0x10 - beq _020E4C78 - b _020E4E08 -_020E4B50: - .byte 0x00, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xBA - .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x08, 0x03, 0x9F, 0xE5, 0x86, 0x10, 0xA0, 0xE1 - .byte 0xB1, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x38, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE1, 0x14, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2, 0x14, 0x00, 0x8D, 0xE5 - .byte 0x98, 0x00, 0x00, 0xEA, 0x2B, 0x00, 0x56, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE1, 0x0A, 0x00, 0x00, 0xEA, 0x2D, 0x00, 0x56, 0xE3, 0x08, 0x00, 0x00, 0x1A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2 - .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x44, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x10, 0x80, 0xE5, 0x02, 0x40, 0xA0, 0xE3, 0x82, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x59, 0xE3 - .byte 0x10, 0x00, 0x59, 0x13, 0x09, 0x00, 0x00, 0x1A, 0x30, 0x00, 0x56, 0xE3, 0x07, 0x00, 0x00, 0x1A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x04, 0x40, 0xA0, 0xE3 - .byte 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x75, 0x00, 0x00, 0xEA - .byte 0x08, 0x40, 0xA0, 0xE3, 0x73, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x56, 0xE3, 0x78, 0x00, 0x56, 0x13 - .byte 0x08, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x10, 0x90, 0xA0, 0xE3, 0x08, 0x40, 0xA0, 0xE3, 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE1, 0x67, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x59, 0xE3, 0x08, 0x90, 0xA0, 0x03 - .byte 0x10, 0x40, 0xA0, 0xE3, 0x63, 0x00, 0x00, 0xEA -_020E4C78: - ldr r1, [sp, #0x8] - mov r0, #0x0 - cmp r9, #0x0 - moveq r9, #0xa - cmp r1, r0 - ldr r1, [sp, #0xc] - cmpeq r1, r0 - bne _020E4CB4 - ldr r0, [sp, #0x18] - mov r3, r9, asr #0x1f - mov r1, r0 - mov r2, r9 - bl _ll_udiv - str r0, [sp, #0xc] - str r1, [sp, #0x8] -_020E4CB4: - cmp r6, #0x0 - blt _020E4CC4 - cmp r6, #0x80 - blt _020E4CCC -_020E4CC4: - mov r0, #0x0 - b _020E4CDC -_020E4CCC: - ldr r0, _020E4E78 ; =0x0210430C - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x8 -_020E4CDC: - cmp r0, #0x0 - beq _020E4D04 - sub r6, r6, #0x30 - cmp r6, r9 - blt _020E4D8C - cmp r4, #0x10 - moveq r4, #0x20 - movne r4, #0x40 - add r6, r6, #0x30 - b _020E4E08 -_020E4D04: - cmp r6, #0x0 - blt _020E4D14 - cmp r6, #0x80 - blt _020E4D1C -_020E4D14: - mov r0, #0x0 - b _020E4D2C -_020E4D1C: - ldr r0, _020E4E78 ; =0x0210430C - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x1 -_020E4D2C: - cmp r0, #0x0 - beq _020E4D60 - cmp r6, #0x0 - blt _020E4D44 - cmp r6, #0x80 - blt _020E4D4C -_020E4D44: - mov r0, r6 - b _020E4D54 -_020E4D4C: - ldr r0, _020E4E7C ; =0x0210428C - ldrb r0, [r0, r6] -_020E4D54: - sub r0, r0, #0x37 - cmp r0, r9 - blt _020E4D70 -_020E4D60: - cmp r4, #0x10 - moveq r4, #0x20 - movne r4, #0x40 - b _020E4E08 -_020E4D70: - cmp r6, #0x0 - blt _020E4D88 - cmp r6, #0x80 - bge _020E4D88 - ldr r0, _020E4E7C ; =0x0210428C - ldrb r6, [r0, r6] -_020E4D88: - sub r6, r6, #0x37 -_020E4D8C: - ldr r0, [sp, #0x8] - umull r2, r3, r10, r9 - cmp r11, r0 - ldr r0, [sp, #0xc] - mov r4, #0x10 - cmpeq r10, r0 - ldrhi r0, [sp, #0x48] - movhi r1, #0x1 - strhi r1, [r0, #0x0] - mov r1, r9, asr #0x1f - mla r3, r10, r1, r3 - mla r3, r11, r9, r3 - ldr r1, [sp, #0x18] - mov r10, r2 - subs r2, r1, r2 - mov r0, r6, asr #0x1f - sbc r1, r1, r3 - cmp r0, r1 - cmpeq r6, r2 - ldrhi r1, [sp, #0x48] - movhi r2, #0x1 - strhi r2, [r1, #0x0] - mov r1, #0x0 - mov r11, r3 - adds r10, r10, r6 - adc r11, r11, r0 - mov r0, r7 - mov r2, r1 - add r5, r5, #0x1 - blx r8 - mov r6, r0 -_020E4E08: - ldr r0, [sp, #0x0] - cmp r5, r0 - bgt _020E4E28 - ldr r0, [sp, #0x18] - cmp r6, r0 - beq _020E4E28 - tst r4, #0x60 - beq _020E4B0C -_020E4E28: - tst r4, #0x34 - bne _020E4E44 - ldr r0, [sp, #0x40] - mov r10, #0x0 - mov r11, r10 - str r10, [r0, #0x0] - b _020E4E58 -_020E4E44: - ldr r0, [sp, #0x14] - sub r1, r5, #0x1 - add r1, r1, r0 - ldr r0, [sp, #0x40] - str r1, [r0, #0x0] -_020E4E58: - mov r0, r7 - mov r1, r6 - mov r2, #0x1 - blx r8 - mov r0, r10 - mov r1, r11 - add sp, sp, #0x1c - ldmia sp!, {r4-r11,pc} - .balign 4 -_020E4E78: .word 0x0210430C -_020E4E7C: .word 0x0210428C - - arm_func_start strtoul -strtoul: ; 0x020E4E80 - stmdb sp!, {r3-r5,lr} - sub sp, sp, #0x20 - mov r5, r0 - mov lr, #0x0 - mov r0, r2 - mov r4, r1 - add r2, sp, #0x1c - str r5, [sp, #0xc] - str lr, [sp, #0x10] - str r2, [sp, #0x0] - add r1, sp, #0x18 - str r1, [sp, #0x4] - add r12, sp, #0x14 - ldr r2, _020E4F10 ; =__StringRead - add r3, sp, #0xc - sub r1, lr, #0x80000001 - str r12, [sp, #0x8] - bl __strtoul -_020E4EC8: - .byte 0x00, 0x00, 0x54, 0xE3, 0x1C, 0x10, 0x9D, 0x15 - .byte 0x01, 0x10, 0x85, 0x10, 0x00, 0x10, 0x84, 0x15, 0x14, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x51, 0xE3 - .byte 0x05, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x9F, 0xE5, 0x22, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5 - .byte 0x20, 0xD0, 0x8D, 0xE2, 0x00, 0x00, 0xE0, 0xE3, 0x38, 0x80, 0xBD, 0xE8, 0x18, 0x10, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x51, 0xE3, 0x00, 0x00, 0x60, 0x12, 0x20, 0xD0, 0x8D, 0xE2, 0x38, 0x80, 0xBD, 0xE8 -_020E4F10: .word __StringRead -_020E4F14: - .byte 0xA8, 0x74, 0x1D, 0x02 - - arm_func_start strtold2 -strtold2: ; 0x020E4F18 - stmdb sp!, {r3-r5,lr} - sub sp, sp, #0x20 - mov r5, r0 - mov lr, #0x0 - mov r0, r2 - mov r4, r1 - add r2, sp, #0x1c - str r5, [sp, #0xc] - str lr, [sp, #0x10] - str r2, [sp, #0x0] - add r1, sp, #0x18 - str r1, [sp, #0x4] - add r12, sp, #0x14 - ldr r2, _020E4FD8 ; =__StringRead - add r3, sp, #0xc - sub r1, lr, #0x80000001 - str r12, [sp, #0x8] - bl __strtoul -_020E4F60: - .byte 0x00, 0x00, 0x54, 0xE3, 0x1C, 0x10, 0x9D, 0x15, 0x01, 0x10, 0x85, 0x10, 0x00, 0x10, 0x84, 0x15 - .byte 0x14, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x09, 0x00, 0x00, 0x1A, 0x18, 0x20, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x52, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x02, 0x11, 0xE0, 0xE3, 0x01, 0x00, 0x50, 0xE1 - .byte 0x03, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x52, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x02, 0x01, 0x50, 0xE3 - .byte 0x08, 0x00, 0x00, 0x9A, 0x18, 0x00, 0x9D, 0xE5, 0x2C, 0x10, 0x9F, 0xE5, 0x22, 0x20, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x01, 0xA0, 0x13, 0x00, 0x20, 0x81, 0xE5, 0x20, 0xD0, 0x8D, 0xE2 - .byte 0x02, 0x01, 0xE0, 0x03, 0x38, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x52, 0xE3, 0x00, 0x00, 0x60, 0x12 - .byte 0x20, 0xD0, 0x8D, 0xE2, 0x38, 0x80, 0xBD, 0xE8 -_020E4FD8: .word __StringRead -_020E4FDC: - .byte 0xA8, 0x74, 0x1D, 0x02 - - arm_func_start atol -atol: ; 0x020E4FE0 - ldr ip, _020E4FF0 ; =strtold - mov r1, #0x0 - mov r2, #0xa - bx r12 - .balign 4 -_020E4FF0: .word strtold2 - - arm_func_start fwide -fwide: - cmp r0, #0x0 - beq _020E500C - ldr r3, [r0, #0x4] - mov r2, r3, lsl #0x16 - movs r2, r2, lsr #0x1d - bne _020E5014 -_020E500C: - mov r0, #0x0 - bx lr -_020E5014: - mov r2, r3, lsl #0x14 - movs r2, r2, lsr #0x1e - beq _020E5034 - cmp r2, #0x1 - beq _020E505C - cmp r2, #0x2 - moveq r1, #0x1 - b _020E5060 -_020E5034: - cmp r1, #0x0 - ble _020E504C - bic r2, r3, #0xc00 - orr r2, r2, #0x800 - str r2, [r0, #0x4] - b _020E5060 -_020E504C: - biclt r2, r3, #0xc00 - orrlt r2, r2, #0x400 - strlt r2, [r0, #0x4] - b _020E5060 -_020E505C: - mvn r1, #0x0 -_020E5060: - mov r0, r1 - bx lr - - arm_func_start wmemcpy -wmemcpy: ; 0x020E5068 - ldr ip, _020E5074 ; =memcpy - mov r2, r2, lsl #0x1 - bx r12 - .balign 4 -_020E5074: .word memcpy - - arm_func_start wmemchr -wmemchr: ; 0x020E5078 - cmp r2, #0x0 - beq _020E5098 -_020E5080: - ldrh r3, [r0, #0x0] - cmp r3, r1 - bxeq lr - add r0, r0, #0x2 - subs r2, r2, #0x1 - bne _020E5080 -_020E5098: - mov r0, #0x0 - bx lr - - arm_func_start parse_format_wprintf -parse_format_wprintf: ; 0x020E50A0 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x10 - ldrh r3, [r0, #0x2] - mov r4, #0x0 - mov r5, #0x1 - mov lr, r2 - strb r5, [sp, #0x0] - strb r4, [sp, #0x1] - strb r4, [sp, #0x2] - strb r4, [sp, #0x3] - strb r4, [sp, #0x4] - str r4, [sp, #0x8] - str r4, [sp, #0xc] - cmp r3, #0x25 - add r12, r0, #0x2 - bne _020E50FC - add r0, sp, #0x0 - strh r3, [sp, #0x6] - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add sp, sp, #0x10 - add r0, r12, #0x2 - ldmia sp!, {r4-r8,pc} -_020E50FC: - mov r2, #0x2 - mov r0, r4 - mov r5, r2 - mov r6, r4 - mov r7, #0x1 -_020E5110: - mov r8, r7 - cmp r3, #0x2b - bgt _020E5140 - bge _020E5168 - cmp r3, #0x23 - bgt _020E5198 - cmp r3, #0x20 - blt _020E5198 - beq _020E5170 - cmp r3, #0x23 - beq _020E5180 - b _020E5198 -_020E5140: - cmp r3, #0x30 - bgt _020E5198 - cmp r3, #0x2d - blt _020E5198 - beq _020E5160 - cmp r3, #0x30 - beq _020E5188 - b _020E5198 -_020E5160: - strb r6, [sp, #0x0] - b _020E519C -_020E5168: - strb r7, [sp, #0x1] - b _020E519C -_020E5170: - ldrb r4, [sp, #0x1] - cmp r4, #0x1 - strneb r5, [sp, #0x1] - b _020E519C -_020E5180: - strb r7, [sp, #0x3] - b _020E519C -_020E5188: - ldrb r4, [sp, #0x0] - cmp r4, #0x0 - strneb r2, [sp, #0x0] - b _020E519C -_020E5198: - mov r8, r0 -_020E519C: - cmp r8, #0x0 - ldrneh r3, [r12, #0x2]! - bne _020E5110 - cmp r3, #0x2a - bne _020E51E4 - ldr r0, [r1, #0x0] - add r0, r0, #0x4 - str r0, [r1, #0x0] - ldr r0, [r0, #-0x4] - str r0, [sp, #0x8] - cmp r0, #0x0 - bge _020E51DC - rsb r0, r0, #0x0 - mov r2, #0x0 - strb r2, [sp, #0x0] - str r0, [sp, #0x8] -_020E51DC: - ldrh r3, [r12, #0x2]! - b _020E5228 -_020E51E4: - mov r2, #0x0 - ldr r5, _020E560C ; =0x02104544 - mov r0, #0xa - b _020E5208 -_020E51F4: - ldr r4, [sp, #0x8] - sub r3, r3, #0x30 - mla r6, r4, r0, r3 - ldrh r3, [r12, #0x2]! - str r6, [sp, #0x8] -_020E5208: - cmp r3, #0x80 - movcs r4, r2 - bhs _020E5220 - mov r4, r3, lsl #0x1 - ldrh r4, [r5, r4] - and r4, r4, #0x8 -_020E5220: - cmp r4, #0x0 - bne _020E51F4 -_020E5228: - ldr r2, [sp, #0x8] - ldr r0, _020E5610 ; =0x000001FD - cmp r2, r0 - ble _020E5258 - ldr r1, _020E5614 ; =0x0000FFFF - add r0, sp, #0x0 - strh r1, [sp, #0x6] - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add sp, sp, #0x10 - add r0, r12, #0x2 - ldmia sp!, {r4-r8,pc} -_020E5258: - cmp r3, #0x2e - bne _020E52E0 - ldrh r3, [r12, #0x2]! - mov r0, #0x1 - strb r0, [sp, #0x2] - cmp r3, #0x2a - bne _020E529C - ldr r0, [r1, #0x0] - add r0, r0, #0x4 - str r0, [r1, #0x0] - ldr r0, [r0, #-0x4] - ldrh r3, [r12, #0x2]! - str r0, [sp, #0xc] - cmp r0, #0x0 - movlt r0, #0x0 - strltb r0, [sp, #0x2] - b _020E52E0 -_020E529C: - mov r1, #0x0 - ldr r4, _020E560C ; =0x02104544 - mov r0, #0xa - b _020E52C0 -_020E52AC: - ldr r2, [sp, #0xc] - sub r3, r3, #0x30 - mla r5, r2, r0, r3 - ldrh r3, [r12, #0x2]! - str r5, [sp, #0xc] -_020E52C0: - cmp r3, #0x80 - movcs r2, r1 - bhs _020E52D8 - mov r2, r3, lsl #0x1 - ldrh r2, [r4, r2] - and r2, r2, #0x8 -_020E52D8: - cmp r2, #0x0 - bne _020E52AC -_020E52E0: - cmp r3, #0x6c - mov r0, #0x1 - bgt _020E5318 - cmp r3, #0x68 - blt _020E530C - beq _020E5334 - cmp r3, #0x6a - beq _020E5380 - cmp r3, #0x6c - beq _020E5350 - b _020E53A4 -_020E530C: - cmp r3, #0x4c - beq _020E5374 - b _020E53A4 -_020E5318: - cmp r3, #0x74 - bgt _020E5328 - beq _020E538C - b _020E53A4 -_020E5328: - cmp r3, #0x7a - beq _020E5398 - b _020E53A4 -_020E5334: - ldrh r1, [r12, #0x2] - mov r2, #0x2 - strb r2, [sp, #0x4] - cmp r1, #0x68 - streqb r0, [sp, #0x4] - ldreqh r3, [r12, #0x2]! - b _020E53A8 -_020E5350: - ldrh r1, [r12, #0x2] - mov r2, #0x3 - strb r2, [sp, #0x4] - cmp r1, #0x6c - bne _020E53A8 - mov r1, #0x4 - strb r1, [sp, #0x4] - ldrh r3, [r12, #0x2]! - b _020E53A8 -_020E5374: - mov r1, #0x9 - strb r1, [sp, #0x4] - b _020E53A8 -_020E5380: - mov r1, #0x6 - strb r1, [sp, #0x4] - b _020E53A8 -_020E538C: - mov r1, #0x8 - strb r1, [sp, #0x4] - b _020E53A8 -_020E5398: - mov r1, #0x7 - strb r1, [sp, #0x4] - b _020E53A8 -_020E53A4: - mov r0, #0x0 -_020E53A8: - cmp r0, #0x0 - ldrneh r3, [r12, #0x2]! - strh r3, [sp, #0x6] - cmp r3, #0x61 - bgt _020E53FC - bge _020E54E0 - cmp r3, #0x47 - bgt _020E53F0 - subs r0, r3, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020E55EC -_020E53D4: - .byte 0x41, 0x00, 0x00, 0xEA, 0x83, 0x00, 0x00, 0xEA, 0x82, 0x00, 0x00, 0xEA - .byte 0x81, 0x00, 0x00, 0xEA, 0x4F, 0x00, 0x00, 0xEA, 0x2E, 0x00, 0x00, 0xEA, 0x49, 0x00, 0x00, 0xEA -_020E53F0: - cmp r3, #0x58 - beq _020E5470 - b _020E55EC -_020E53FC: - cmp r3, #0x63 - bgt _020E540C - beq _020E5588 - b _020E55EC -_020E540C: - sub r0, r3, #0x64 - cmp r0, #0x14 - addls pc, pc, r0, lsl #0x2 - b _020E55EC -_020E541C: - .byte 0x13, 0x00, 0x00, 0xEA - .byte 0x40, 0x00, 0x00, 0xEA, 0x1F, 0x00, 0x00, 0xEA, 0x3A, 0x00, 0x00, 0xEA, 0x6E, 0x00, 0x00, 0xEA - .byte 0x0E, 0x00, 0x00, 0xEA, 0x6C, 0x00, 0x00, 0xEA, 0x6B, 0x00, 0x00, 0xEA, 0x6A, 0x00, 0x00, 0xEA - .byte 0x69, 0x00, 0x00, 0xEA, 0x63, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x44, 0x00, 0x00, 0xEA - .byte 0x65, 0x00, 0x00, 0xEA, 0x64, 0x00, 0x00, 0xEA, 0x55, 0x00, 0x00, 0xEA, 0x62, 0x00, 0x00, 0xEA - .byte 0x02, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, 0xEA, 0x5F, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA -_020E5470: - ldrb r0, [sp, #0x4] - cmp r0, #0x9 - moveq r0, #0x4 - streqb r0, [sp, #0x4] - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0x1 - streq r0, [sp, #0xc] - beq _020E55F4 - ldrb r0, [sp, #0x0] - cmp r0, #0x2 - moveq r0, #0x1 - streqb r0, [sp, #0x0] - b _020E55F4 -_020E54A8: - .byte 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0x50, 0x13, 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13 - .byte 0x4C, 0x01, 0x9F, 0x05, 0xB6, 0x00, 0xCD, 0x01, 0x49, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xDD, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x44, 0x00, 0x00, 0xEA -_020E54E0: - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0xd - streq r0, [sp, #0xc] - ldrb r0, [sp, #0x4] - cmp r0, #0x2 - cmpne r0, #0x6 - cmpne r0, #0x7 - cmpne r0, #0x8 - cmpne r0, #0x4 - cmpne r0, #0x1 - ldreq r0, _020E5614 ; =0x0000FFFF - streqh r0, [sp, #0x6] - b _020E55F4 -_020E5518: - .byte 0x0C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0x50, 0x13, 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13 - .byte 0x01, 0x00, 0x50, 0x13, 0xC8, 0x00, 0x9F, 0x05, 0xB6, 0x00, 0xCD, 0x01, 0x28, 0x00, 0x00, 0x0A - .byte 0x02, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05 - .byte 0x23, 0x00, 0x00, 0xEA, 0x03, 0x30, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3, 0x78, 0x10, 0xA0, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xE3, 0x04, 0x30, 0xCD, 0xE5, 0x03, 0x20, 0xCD, 0xE5, 0xB6, 0x10, 0xCD, 0xE1 - .byte 0x0C, 0x00, 0x8D, 0xE5, 0x1A, 0x00, 0x00, 0xEA -_020E5588: - ldrb r1, [sp, #0x4] - cmp r1, #0x3 - moveq r0, #0x5 - streqb r0, [sp, #0x4] - beq _020E55F4 - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - cmpeq r1, #0x0 - ldrne r0, _020E5614 ; =0x0000FFFF - strneh r0, [sp, #0x6] - b _020E55F4 -_020E55B4: - .byte 0x04, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x03 - .byte 0x04, 0x00, 0xCD, 0x05, 0x0A, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0x40, 0x00, 0x9F, 0x15 - .byte 0xB6, 0x00, 0xCD, 0x11, 0x06, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xDD, 0xE5, 0x09, 0x00, 0x50, 0xE3 - .byte 0x04, 0x00, 0xA0, 0x03, 0x04, 0x00, 0xCD, 0x05, 0x01, 0x00, 0x00, 0xEA -_020E55EC: - ldr r0, _020E5614 ; =0x0000FFFF - strh r0, [sp, #0x6] -_020E55F4: - add r0, sp, #0x0 - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add r0, r12, #0x2 - add sp, sp, #0x10 - ldmia sp!, {r4-r8,pc} - .balign 4 -_020E560C: .word 0x02104544 -_020E5610: .word 0x000001FD -_020E5614: .word 0x0000FFFF - - arm_func_start long2str_wide -long2str_wide: ; 0x020E5618 - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x10 - movs r10, r0 - mov r0, #0x0 - mov r5, r1 - str r0, [sp, #0xc] - ldr r7, [sp, #0x4c] - mov r6, r0 - strh r0, [r5, #-0x2]! - ldrb r0, [sp, #0x43] - str r1, [sp, #0x0] - ldrh r8, [sp, #0x46] - str r0, [sp, #0x4] - ldr r0, [sp, #0x48] - ldrb r11, [sp, #0x41] - str r0, [sp, #0x8] - cmpeq r7, #0x0 - bne _020E568C - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _020E5678 - cmp r8, #0x6f - beq _020E568C -_020E5678: - add sp, sp, #0x10 - mov r0, r5 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E568C: - cmp r8, #0x69 - bgt _020E56B4 - bge _020E56E8 - cmp r8, #0x58 - bgt _020E56A8 - beq _020E5714 - b _020E571C -_020E56A8: - cmp r8, #0x64 - beq _020E56E8 - b _020E571C -_020E56B4: - cmp r8, #0x6f - bgt _020E56C8 - moveq r4, #0x8 - moveq r11, #0x0 - b _020E571C -_020E56C8: - cmp r8, #0x78 - bgt _020E571C - cmp r8, #0x75 - blt _020E571C - beq _020E5708 - cmp r8, #0x78 - beq _020E5714 - b _020E571C -_020E56E8: - cmp r10, #0x0 - mov r4, #0xa - bge _020E571C - mov r0, #0x1 - cmp r10, #0x80000000 - rsbne r10, r10, #0x0 - str r0, [sp, #0xc] - b _020E571C -_020E5708: - mov r4, #0xa - mov r11, #0x0 - b _020E571C -_020E5714: - mov r4, #0x10 - mov r11, #0x0 -_020E571C: - mov r0, r10 - mov r1, r4 - bl _u32_div_f - mov r9, r1 - mov r0, r10 - mov r1, r4 - bl _u32_div_f - cmp r9, #0xa - mov r10, r0 - addlt r9, r9, #0x30 - blt _020E5754 - cmp r8, #0x78 - addeq r9, r9, #0x57 - addne r9, r9, #0x37 -_020E5754: - cmp r10, #0x0 - strh r9, [r5, #-0x2]! - add r6, r6, #0x1 - bne _020E571C - cmp r4, #0x8 - bne _020E5788 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrneh r0, [r5, #0x0] - cmpne r0, #0x30 - movne r0, #0x30 - strneh r0, [r5, #-0x2]! - addne r6, r6, #0x1 -_020E5788: - ldrb r0, [sp, #0x40] - cmp r0, #0x2 - bne _020E57BC - ldr r0, [sp, #0xc] - ldr r7, [sp, #0x8] - cmp r0, #0x0 - cmpeq r11, #0x0 - subne r7, r7, #0x1 - cmp r4, #0x10 - bne _020E57BC - ldr r0, [sp, #0x4] - cmp r0, #0x0 - subne r7, r7, #0x2 -_020E57BC: - ldr r0, [sp, #0x0] - ldr r1, _020E5864 ; =0x000001FD - sub r0, r0, r5 - add r0, r0, r0, lsr #0x1f - add r0, r7, r0, asr #0x1 - cmp r0, r1 - addgt sp, sp, #0x10 - movgt r0, #0x0 - ldmgtia sp!, {r3-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - cmp r6, r7 - bge _020E5804 - mov r0, #0x30 -_020E57F4: - add r6, r6, #0x1 - cmp r6, r7 - strh r0, [r5, #-0x2]! - blt _020E57F4 -_020E5804: - cmp r4, #0x10 - bne _020E5820 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x30 - strneh r8, [r5, #-0x2] - strneh r0, [r5, #-0x4]! -_020E5820: - ldr r0, [sp, #0xc] - cmp r0, #0x0 - movne r0, #0x2d - strneh r0, [r5, #-0x2]! - bne _020E5850 - cmp r11, #0x1 - moveq r0, #0x2b - streqh r0, [r5, #-0x2]! - beq _020E5850 - cmp r11, #0x2 - moveq r0, #0x20 - streqh r0, [r5, #-0x2]! -_020E5850: - mov r0, r5 - add sp, sp, #0x10 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E5864: .word 0x000001FD - - arm_func_start longlong2str_wide -longlong2str_wide: ; 0x020E5868 - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x18 - mov r9, r1 - mov r1, #0x0 - mov r10, r0 - mov r6, r2 - mov r0, r1 - strh r0, [r6, #-0x2]! - ldr r0, [sp, #0x58] - cmp r9, #0x0 - str r0, [sp, #0x10] - ldrb r0, [sp, #0x4f] - cmpeq r10, #0x0 - str r2, [sp, #0x0] - str r0, [sp, #0x4] - ldr r0, [sp, #0x54] - str r1, [sp, #0x14] - str r0, [sp, #0x8] - ldrb r0, [sp, #0x4d] - mov r7, r1 - ldrh r8, [sp, #0x52] - str r0, [sp, #0xc] - ldreq r0, [sp, #0x10] - cmpeq r0, #0x0 - bne _020E58F8 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _020E58E4 - cmp r8, #0x6f - beq _020E58F8 -_020E58E4: - add sp, sp, #0x18 - mov r0, r6 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E58F8: - cmp r8, #0x69 - bgt _020E5920 - bge _020E5950 - cmp r8, #0x58 - bgt _020E5914 - beq _020E59A4 - b _020E59B0 -_020E5914: - cmp r8, #0x64 - beq _020E5950 - b _020E59B0 -_020E5920: - cmp r8, #0x6f - bgt _020E5930 - beq _020E5984 - b _020E59B0 -_020E5930: - cmp r8, #0x78 - bgt _020E59B0 - cmp r8, #0x75 - blt _020E59B0 - beq _020E5994 - cmp r8, #0x78 - beq _020E59A4 - b _020E59B0 -_020E5950: - subs r0, r10, #0x0 - sbcs r0, r9, #0x0 - mov r11, #0xa - mov r5, #0x0 - bge _020E59B0 - cmp r9, #0x80000000 - cmpeq r10, r5 - beq _020E5978 - rsbs r10, r10, #0x0 - rsc r9, r9, #0x0 -_020E5978: - mov r0, #0x1 - str r0, [sp, #0x14] - b _020E59B0 -_020E5984: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0x8 - b _020E59B0 -_020E5994: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0xa - b _020E59B0 -_020E59A4: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0x10 -_020E59B0: - mov r0, r10 - mov r1, r9 - mov r2, r11 - mov r3, r5 - bl _ull_mod - mov r4, r0 - mov r0, r10 - mov r1, r9 - mov r2, r11 - mov r3, r5 - bl _ll_udiv - mov r10, r0 - cmp r4, #0xa - mov r9, r1 - addlt r0, r4, #0x30 - blt _020E59FC - cmp r8, #0x78 - addeq r0, r4, #0x57 - addne r0, r4, #0x37 -_020E59FC: - strh r0, [r6, #-0x2]! - mov r0, #0x0 - cmp r9, r0 - cmpeq r10, r0 - add r7, r7, #0x1 - bne _020E59B0 - cmp r5, #0x0 - cmpeq r11, #0x8 - bne _020E5A3C - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrneh r0, [r6, #0x0] - cmpne r0, #0x30 - movne r0, #0x30 - strneh r0, [r6, #-0x2]! - addne r7, r7, #0x1 -_020E5A3C: - ldrb r0, [sp, #0x4c] - cmp r0, #0x2 - bne _020E5A8C - ldr r0, [sp, #0x8] - str r0, [sp, #0x10] - ldr r0, [sp, #0x14] - cmp r0, #0x0 - ldreq r0, [sp, #0xc] - cmpeq r0, #0x0 - ldrne r0, [sp, #0x10] - subne r0, r0, #0x1 - strne r0, [sp, #0x10] - cmp r5, #0x0 - cmpeq r11, #0x10 - bne _020E5A8C - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrne r0, [sp, #0x10] - subne r0, r0, #0x2 - strne r0, [sp, #0x10] -_020E5A8C: - ldr r0, [sp, #0x0] - ldr r2, _020E5B48 ; =0x000001FD - sub r0, r0, r6 - add r1, r0, r0, lsr #0x1f - ldr r0, [sp, #0x10] - add r0, r0, r1, asr #0x1 - cmp r0, r2 - addgt sp, sp, #0x18 - movgt r0, #0x0 - ldmgtia sp!, {r3-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - ldr r0, [sp, #0x10] - cmp r7, r0 - bge _020E5AE0 - mov r1, #0x30 -_020E5ACC: - ldr r0, [sp, #0x10] - add r7, r7, #0x1 - cmp r7, r0 - strh r1, [r6, #-0x2]! - blt _020E5ACC -_020E5AE0: - cmp r5, #0x0 - cmpeq r11, #0x10 - bne _020E5B00 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x30 - strneh r8, [r6, #-0x2] - strneh r0, [r6, #-0x4]! -_020E5B00: - ldr r0, [sp, #0x14] - cmp r0, #0x0 - movne r0, #0x2d - strneh r0, [r6, #-0x2]! - bne _020E5B34 - ldr r0, [sp, #0xc] - cmp r0, #0x1 - moveq r0, #0x2b - streqh r0, [r6, #-0x2]! - beq _020E5B34 - cmp r0, #0x2 - moveq r0, #0x20 - streqh r0, [r6, #-0x2]! -_020E5B34: - mov r0, r6 - add sp, sp, #0x18 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E5B48: .word 0x000001FD - - arm_func_start double2hex_wide -double2hex_wide: ; 0x020E5B4C - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r10,lr} - sub sp, sp, #0x44 - ldr r7, [sp, #0x80] - ldr r0, _020E5EB8 ; =0x000001FD - mov r8, r2 - cmp r7, r0 - ldrh r6, [sp, #0x7a] - ldrb r5, [sp, #0x77] - ldrb r4, [sp, #0x75] - ldr r1, [sp, #0x68] - ldr r2, [sp, #0x6c] - addgt sp, sp, #0x44 - movgt r0, #0x0 - ldmgtia sp!, {r3-r10,lr} - addgt sp, sp, #0x10 - bxgt lr - mov r10, #0x0 - mov r9, #0x20 - add r0, sp, #0x8 - add r3, sp, #0xc - strb r10, [sp, #0x8] - strh r9, [sp, #0xa] - bl __num2dec_internal2 - ldr r0, [sp, #0x68] - ldr r1, [sp, #0x6c] - bl fabs - mov r2, r0 - mov r0, r10 - mov r3, r1 - mov r1, r0 - bl _deq - bne _020E5BF4 - sub r4, r8, #0xc - ldr r1, _020E5EBC ; =0x02106DE4 - mov r0, r4 - bl wcscpy - add sp, sp, #0x44 - mov r0, r4 - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E5BF4: - ldrb r0, [sp, #0x11] - cmp r0, #0x49 - bne _020E5C74 - ldrsb r0, [sp, #0xc] - cmp r0, #0x0 - beq _020E5C38 - cmp r6, #0x41 - sub r4, r8, #0xa - bne _020E5C28 - ldr r1, _020E5EC0 ; =0x02106DF0 - mov r0, r4 - bl wcscpy - b _020E5C60 -_020E5C28: - ldr r1, _020E5EC4 ; =0x02106DFC - mov r0, r4 - bl wcscpy - b _020E5C60 -_020E5C38: - cmp r6, #0x41 - sub r4, r8, #0x8 - bne _020E5C54 - ldr r1, _020E5EC8 ; =0x02106E08 - mov r0, r4 - bl wcscpy - b _020E5C60 -_020E5C54: - ldr r1, _020E5ECC ; =0x02106E10 - mov r0, r4 - bl wcscpy -_020E5C60: - add sp, sp, #0x44 - mov r0, r4 - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E5C74: - cmp r0, #0x4e - bne _020E5CF0 - ldrsb r0, [sp, #0xc] - cmp r0, #0x0 - beq _020E5CB4 - cmp r6, #0x41 - sub r4, r8, #0xa - bne _020E5CA4 - ldr r1, _020E5ED0 ; =0x02106E18 - mov r0, r4 - bl wcscpy - b _020E5CDC -_020E5CA4: - ldr r1, _020E5ED4 ; =0x02106E24 - mov r0, r4 - bl wcscpy - b _020E5CDC -_020E5CB4: - cmp r6, #0x41 - sub r4, r8, #0x8 - bne _020E5CD0 - ldr r1, _020E5ED8 ; =0x02106E30 - mov r0, r4 - bl wcscpy - b _020E5CDC -_020E5CD0: - ldr r1, _020E5EDC ; =0x02106E38 - mov r0, r4 - bl wcscpy -_020E5CDC: - add sp, sp, #0x44 - mov r0, r4 - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E5CF0: - mov r3, r10 - mov r1, #0x1 - mov r0, #0x64 - add r9, sp, #0x68 - strb r1, [sp, #0x34] - strb r1, [sp, #0x35] - strb r3, [sp, #0x36] - strb r3, [sp, #0x37] - strb r3, [sp, #0x38] - str r3, [sp, #0x3c] - str r1, [sp, #0x40] - strh r0, [sp, #0x3a] -_020E5D20: - rsb r1, r3, #0x7 - ldrsb r2, [r9, r3] - ldrsb r0, [r9, r1] - strb r0, [r9, r3] - add r3, r3, #0x1 - strb r2, [r9, r1] - cmp r3, #0x4 - blt _020E5D20 - ldrb r0, [sp, #0x69] - ldrb r1, [sp, #0x68] - ldr sb, _020E5EE0 ; =0x000007FF - mov r0, r0, lsl #0x11 - orr r1, r0, r1, lsl #0x19 - add r0, sp, #0x34 - and lr, r9, r1, lsr #0x15 - sub r12, sp, #0x8 - ldmia r0, {r0-r3} - stmia r12, {r0-r3} - rsb r0, r9, #0x400 - mov r1, r8 - add r0, lr, r0 - ldmia r12, {r2-r3} - bl long2str_wide - cmp r6, #0x61 - moveq r1, #0x70 - movne r1, #0x50 - strh r1, [r0, #-0x2]! - mov r1, r7, lsl #0x2 - mov lr, r7 - cmp r7, #0x1 - add r8, r1, #0xb - add r12, sp, #0x68 - blt _020E5E30 - mov r9, #0x30 -_020E5DA8: - cmp r8, #0x40 - bge _020E5E18 - ldrb r1, [r12, r8, asr #0x3] - and r2, r8, #0x7 - rsb r3, r2, #0x7 - mov r2, r1, asr r3 - sub r10, r8, #0x4 - bic r1, r8, #0x7 - bic r10, r10, #0x7 - cmp r1, r10 - add r10, r12, r8, asr #0x3 - and r1, r2, #0xff - beq _020E5DEC - ldrb r2, [r10, #-0x1] - mov r2, r2, lsl #0x8 - orr r1, r1, r2, asr r3 - and r1, r1, #0xff -_020E5DEC: - and r1, r1, #0xf - cmp r1, #0xa - addcc r1, r1, #0x30 - andcc r1, r1, #0xff - blo _020E5E1C - cmp r6, #0x61 - addeq r1, r1, #0x57 - andeq r1, r1, #0xff - addne r1, r1, #0x37 - andne r1, r1, #0xff - b _020E5E1C -_020E5E18: - mov r1, r9 -_020E5E1C: - sub lr, lr, #0x1 - cmp lr, #0x1 - strh r1, [r0, #-0x2]! - sub r8, r8, #0x4 - bge _020E5DA8 -_020E5E30: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r1, #0x2e - strneh r1, [r0, #-0x2]! - mov r1, #0x31 - strh r1, [r0, #-0x2] - cmp r6, #0x61 - moveq r1, #0x78 - movne r1, #0x58 - strh r1, [r0, #-0x4]! - mov r1, #0x30 - strh r1, [r0, #-0x2]! - ldrsb r1, [sp, #0xc] - cmp r1, #0x0 - movne r1, #0x2d - strneh r1, [r0, #-0x2]! - addne sp, sp, #0x44 - ldmneia sp!, {r3-r10,lr} - addne sp, sp, #0x10 - bxne lr - cmp r4, #0x1 - moveq r1, #0x2b - streqh r1, [r0, #-0x2]! - addeq sp, sp, #0x44 - ldmeqia sp!, {r3-r10,lr} - addeq sp, sp, #0x10 - bxeq lr - cmp r4, #0x2 - moveq r1, #0x20 - streqh r1, [r0, #-0x2]! - add sp, sp, #0x44 - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E5EB8: .word 0x000001FD -_020E5EBC: .word 0x02106DE4 -_020E5EC0: .word 0x02106DF0 -_020E5EC4: .word 0x02106DFC -_020E5EC8: .word 0x02106E08 -_020E5ECC: .word 0x02106E10 -_020E5ED0: .word 0x02106E18 -_020E5ED4: .word 0x02106E24 -_020E5ED8: .word 0x02106E30 -_020E5EDC: .word 0x02106E38 -_020E5EE0: .word 0x000007FF - - arm_func_start round_decimal_wide -round_decimal_wide: ; 0x020E5EE4 - stmdb sp!, {r4,lr} - cmp r1, #0x0 - bge _020E5F0C - mov r1, #0x0 - strh r1, [r0, #0x2] - mov r1, #0x1 - strb r1, [r0, #0x4] - mov r1, #0x30 - strb r1, [r0, #0x5] - ldmia sp!, {r4,pc} -_020E5F0C: - ldrb lr, [r0, #0x4] - cmp r1, lr - ldmgeia sp!, {r4,pc} -_020E5F18: - .byte 0x05, 0xC0, 0x80, 0xE2, 0x01, 0x20, 0x8C, 0xE0 - .byte 0x01, 0x20, 0x82, 0xE2, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2, 0x03, 0x3C, 0xA0, 0xE1 - .byte 0x43, 0x3C, 0xA0, 0xE1, 0x05, 0x00, 0x53, 0xE3, 0x0B, 0x00, 0x00, 0x1A, 0x0E, 0xC0, 0x8C, 0xE0 - .byte 0x01, 0xC0, 0x4C, 0xE2, 0x02, 0x00, 0x5C, 0xE1, 0x02, 0x00, 0x00, 0x9A, 0xD0, 0x30, 0xDC, 0xE1 - .byte 0x30, 0x00, 0x53, 0xE3, 0xF9, 0xFF, 0xFF, 0x0A, 0x02, 0x00, 0x5C, 0xE1, 0xD1, 0x30, 0x52, 0x01 - .byte 0x01, 0x40, 0x03, 0x02, 0x01, 0x40, 0xA0, 0x13, 0x01, 0x00, 0x00, 0xEA, 0x01, 0x40, 0xA0, 0xC3 - .byte 0x00, 0x40, 0xA0, 0xD3, 0x00, 0x00, 0x51, 0xE3, 0x14, 0x00, 0x00, 0x0A, 0x00, 0xC0, 0xA0, 0xE3 - .byte 0x01, 0xE0, 0xA0, 0xE3, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2, 0x04, 0x30, 0x83, 0xE0 - .byte 0x03, 0x3C, 0xA0, 0xE1, 0x43, 0x3C, 0xA0, 0xE1, 0x09, 0x00, 0x53, 0xE3, 0x0E, 0x40, 0xA0, 0xC1 - .byte 0x0C, 0x40, 0xA0, 0xD1, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x53, 0xE3 - .byte 0x01, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x41, 0xE2, 0x02, 0x00, 0x00, 0xEA, 0x30, 0x30, 0x83, 0xE2 - .byte 0x00, 0x30, 0xC2, 0xE5, 0x01, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0xEC, 0xFF, 0xFF, 0x1A - .byte 0x00, 0x00, 0x54, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0xF2, 0x30, 0xD0, 0xE1, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x31, 0x10, 0xA0, 0xE3, 0x01, 0x30, 0x83, 0xE2, 0xB2, 0x30, 0xC0, 0xE1, 0x04, 0x20, 0xC0, 0xE5 - .byte 0x05, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x51, 0xE3, 0xBB, 0xFF, 0xFF, 0x0A - .byte 0x04, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8 - - arm_func_start float2str_wide -float2str_wide: ; 0x020E6008 - stmdb sp!, {r0-r3} - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x22c - mov r10, r0 - add r0, sp, #0x250 - ldr r7, [sp, #0x268] - ldr r3, _020E6628 ; =0x000001FD - ldrh r6, [r0, #0x12] - cmp r7, r3 - ldrb r5, [sp, #0x25f] - ldrb r4, [sp, #0x25d] - mov r8, r1 - mov r9, r2 - addgt sp, sp, #0x22c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - mov r12, #0x0 - mov r11, #0x20 - add r0, sp, #0x0 - add r3, sp, #0x4 - mov r1, r10 - mov r2, r8 - strb r12, [sp, #0x0] - strh r11, [sp, #0x2] - bl __num2dec_internal2 - ldrb r0, [sp, #0x8] - add r1, sp, #0x9 - add r0, r1, r0 - b _020E609C -_020E6084: - ldrb r2, [sp, #0x8] - ldrsh r1, [sp, #0x6] - sub r2, r2, #0x1 - add r1, r1, #0x1 - strb r2, [sp, #0x8] - strh r1, [sp, #0x6] -_020E609C: - ldrb r1, [sp, #0x8] - cmp r1, #0x1 - bls _020E60B4 - ldrsb r1, [r0, #-0x1]! - cmp r1, #0x30 - beq _020E6084 -_020E60B4: - ldrb r0, [sp, #0x9] - cmp r0, #0x30 - beq _020E60D4 - cmp r0, #0x49 - beq _020E60E0 - cmp r0, #0x4e - beq _020E6198 - b _020E6244 -_020E60D4: - mov r0, #0x0 - strh r0, [sp, #0x6] - b _020E6244 -_020E60E0: - mov r2, #0x0 - mov r0, r10 - mov r1, r8 - mov r3, r2 - bl _dls - bhs _020E6140 - cmp r6, #0x80 - sub r4, r9, #0xa - movcs r0, #0x0 - bhs _020E6118 - ldr r0, _020E662C ; =0x02104544 - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x200 -_020E6118: - cmp r0, #0x0 - beq _020E6130 - ldr r1, _020E6630 ; =0x02106DF0 - mov r0, r4 - bl wcscpy - b _020E6184 -_020E6130: - ldr r1, _020E6634 ; =0x02106DFC - mov r0, r4 - bl wcscpy - b _020E6184 -_020E6140: - cmp r6, #0x80 - sub r4, r9, #0x8 - movcs r0, #0x0 - bhs _020E6160 - ldr r0, _020E662C ; =0x02104544 - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x200 -_020E6160: - cmp r0, #0x0 - beq _020E6178 - ldr r1, _020E6638 ; =0x02106E08 - mov r0, r4 - bl wcscpy - b _020E6184 -_020E6178: - ldr r1, _020E663C ; =0x02106E10 - mov r0, r4 - bl wcscpy -_020E6184: - add sp, sp, #0x22c - mov r0, r4 - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E6198: - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - beq _020E61EC - cmp r6, #0x80 - sub r4, r9, #0xa - movcs r0, #0x0 - bhs _020E61C4 - ldr r0, _020E662C ; =0x02104544 - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x200 -_020E61C4: - cmp r0, #0x0 - beq _020E61DC - ldr r1, _020E6640 ; =0x02106E18 - mov r0, r4 - bl wcscpy - b _020E6230 -_020E61DC: - ldr r1, _020E6644 ; =0x02106E24 - mov r0, r4 - bl wcscpy - b _020E6230 -_020E61EC: - cmp r6, #0x80 - sub r4, r9, #0x8 - movcs r0, #0x0 - bhs _020E620C - ldr r0, _020E662C ; =0x02104544 - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x200 -_020E620C: - cmp r0, #0x0 - beq _020E6224 - ldr r1, _020E6648 ; =0x02106E30 - mov r0, r4 - bl wcscpy - b _020E6230 -_020E6224: - ldr r1, _020E664C ; =0x02106E38 - mov r0, r4 - bl wcscpy -_020E6230: - add sp, sp, #0x22c - mov r0, r4 - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E6244: - ldrb r1, [sp, #0x8] - ldrsh r2, [sp, #0x6] - add r0, sp, #0x200 - sub r1, r1, #0x1 - add r0, r0, #0x2a - add r1, r2, r1 - sub r8, r0, #0x1 - strh r1, [sp, #0x6] - mov r0, #0x0 - strb r0, [r8, #0x0] - cmp r6, #0x65 - bgt _020E62A0 - bge _020E632C - cmp r6, #0x47 - bgt _020E65EC - cmp r6, #0x45 - blt _020E65EC - beq _020E632C - cmp r6, #0x46 - beq _020E6478 - cmp r6, #0x47 - beq _020E62B8 - b _020E65EC -_020E62A0: - cmp r6, #0x66 - bgt _020E62B0 - beq _020E6478 - b _020E65EC -_020E62B0: - cmp r6, #0x67 - bne _020E65EC -_020E62B8: - ldrb r0, [sp, #0x8] - cmp r0, r7 - ble _020E62D0 - add r0, sp, #0x4 - mov r1, r7 - bl round_decimal_wide -_020E62D0: - ldrsh r2, [sp, #0x6] - mvn r0, #0x3 - cmp r2, r0 - blt _020E62E8 - cmp r2, r7 - blt _020E6308 -_020E62E8: - cmp r5, #0x0 - ldreqb r0, [sp, #0x8] - subne r7, r7, #0x1 - subeq r7, r0, #0x1 - cmp r6, #0x67 - moveq r6, #0x65 - movne r6, #0x45 - b _020E632C -_020E6308: - cmp r5, #0x0 - addne r0, r2, #0x1 - subne r7, r7, r0 - bne _020E6478 - ldrb r1, [sp, #0x8] - add r0, r2, #0x1 - subs r7, r1, r0 - movmi r7, #0x0 - b _020E6478 -_020E632C: - ldrb r0, [sp, #0x8] - add r1, r7, #0x1 - cmp r0, r1 - ble _020E6344 - add r0, sp, #0x4 - bl round_decimal_wide -_020E6344: - ldrsh lr, [sp, #0x6] - mov r11, #0x2b - mov r10, #0x0 - cmp lr, #0x0 - rsblt lr, lr, #0x0 - movlt r11, #0x2d - ldr r3, _020E6650 ; =0x66666667 - mov r0, #0xa - b _020E6398 -_020E6368: - mov r1, lr, lsr #0x1f - smull r2, r12, r3, lr - add r12, r1, r12, asr #0x2 - smull r1, r2, r0, r12 - sub r12, lr, r1 - add r1, r12, #0x30 - strb r1, [r8, #-0x1]! - mov r2, lr - smull r1, lr, r3, r2 - mov r1, r2, lsr #0x1f - add lr, r1, lr, asr #0x2 - add r10, r10, #0x1 -_020E6398: - cmp lr, #0x0 - bne _020E6368 - cmp r10, #0x2 - blt _020E6368 - add r0, sp, #0x2a - strb r11, [r8, #-0x1] - strb r6, [r8, #-0x2]! - sub r1, r0, r8 - ldr r0, _020E6628 ; =0x000001FD - add r1, r1, r7 - cmp r1, r0 - addgt sp, sp, #0x22c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - ldrb r1, [sp, #0x8] - add r0, r7, #0x1 - cmp r1, r0 - bge _020E6408 - add r0, r7, #0x2 - sub r0, r0, r1 - subs r1, r0, #0x1 - beq _020E6408 - mov r0, #0x30 -_020E63FC: - strb r0, [r8, #-0x1]! - subs r1, r1, #0x1 - bne _020E63FC -_020E6408: - ldrb r1, [sp, #0x8] - add r0, sp, #0x9 - add r2, r0, r1 - subs r1, r1, #0x1 - beq _020E642C -_020E641C: - ldrsb r0, [r2, #-0x1]! - subs r1, r1, #0x1 - strb r0, [r8, #-0x1]! - bne _020E641C -_020E642C: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r0, #0x2e - strneb r0, [r8, #-0x1]! - ldrb r0, [sp, #0x9] - strb r0, [r8, #-0x1]! - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r8, #-0x1]! - bne _020E65EC - cmp r4, #0x1 - moveq r0, #0x2b - streqb r0, [r8, #-0x1]! - beq _020E65EC - cmp r4, #0x2 - moveq r0, #0x20 - streqb r0, [r8, #-0x1]! - b _020E65EC -_020E6478: - ldrsh r3, [sp, #0x6] - ldrb r2, [sp, #0x8] - sub r0, r2, r3 - subs r1, r0, #0x1 - movmi r1, #0x0 - cmp r1, r7 - ble _020E64B8 - sub r1, r1, r7 - add r0, sp, #0x4 - sub r1, r2, r1 - bl round_decimal_wide - ldrsh r3, [sp, #0x6] - ldrb r2, [sp, #0x8] - sub r0, r2, r3 - subs r1, r0, #0x1 - movmi r1, #0x0 -_020E64B8: - adds r0, r3, #0x1 - movmi r0, #0x0 - ldr r3, _020E6628 ; =0x000001FD - add r6, r0, r1 - cmp r6, r3 - addgt sp, sp, #0x22c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - add r3, sp, #0x9 - sub r6, r7, r1 - cmp r6, #0x0 - add r2, r3, r2 - mov r10, #0x0 - ble _020E650C - mov r3, #0x30 -_020E64FC: - add r10, r10, #0x1 - cmp r10, r6 - strb r3, [r8, #-0x1]! - blt _020E64FC -_020E650C: - mov r6, #0x0 - b _020E6520 -_020E6514: - ldrsb r3, [r2, #-0x1]! - add r6, r6, #0x1 - strb r3, [r8, #-0x1]! -_020E6520: - cmp r6, r1 - ldrltb r3, [sp, #0x8] - cmplt r6, r3 - blt _020E6514 - cmp r6, r1 - bge _020E654C - mov r3, #0x30 -_020E653C: - add r6, r6, #0x1 - cmp r6, r1 - strb r3, [r8, #-0x1]! - blt _020E653C -_020E654C: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r1, #0x2e - strneb r1, [r8, #-0x1]! - cmp r0, #0x0 - beq _020E65B4 - ldrb r1, [sp, #0x8] - mov r5, #0x0 - sub r1, r0, r1 - cmp r1, #0x0 - ble _020E6594 - mov r3, #0x30 -_020E657C: - strb r3, [r8, #-0x1]! - ldrb r1, [sp, #0x8] - add r5, r5, #0x1 - sub r1, r0, r1 - cmp r5, r1 - blt _020E657C -_020E6594: - cmp r5, r0 - bge _020E65BC -_020E659C: - ldrsb r1, [r2, #-0x1]! - add r5, r5, #0x1 - cmp r5, r0 - strb r1, [r8, #-0x1]! - blt _020E659C - b _020E65BC -_020E65B4: - mov r0, #0x30 - strb r0, [r8, #-0x1]! -_020E65BC: - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r8, #-0x1]! - bne _020E65EC - cmp r4, #0x1 - moveq r0, #0x2b - streqb r0, [r8, #-0x1]! - beq _020E65EC - cmp r4, #0x2 - moveq r0, #0x20 - streqb r0, [r8, #-0x1]! -_020E65EC: - mov r0, r8 - bl strlen - sub r1, r9, r0, lsl #0x1 - mov r0, r8 - sub r4, r1, #0x2 - bl strlen - mov r2, r0 - mov r0, r4 - mov r1, r8 - bl mbstowcs - mov r0, r4 - add sp, sp, #0x22c - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E6628: .word 0x000001FD -_020E662C: .word 0x02104544 -_020E6630: .word 0x02106DF0 -_020E6634: .word 0x02106DFC -_020E6638: .word 0x02106E08 -_020E663C: .word 0x02106E10 -_020E6640: .word 0x02106E18 -_020E6644: .word 0x02106E24 -_020E6648: .word 0x02106E30 -_020E664C: .word 0x02106E38 -_020E6650: .word 0x66666667 -__wpformatter: - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x430 - mov r3, #0x20 - mov r11, r2 - strh r3, [sp, #0x1c] - ldrh r2, [r11, #0x0] - mov r9, r0 - mov r8, r1 - cmp r2, #0x0 - mov r4, #0x0 - beq _020E6F24 -_020E6684: - mov r0, r11 - mov r1, #0x25 - bl wcschr - str r0, [sp, #0xc] - cmp r0, #0x0 - bne _020E66D8 - mov r0, r11 - bl wcslen - movs r2, r0 - add r4, r4, r2 - beq _020E6F24 - mov r0, r8 - mov r1, r11 - blx r9 - cmp r0, #0x0 - bne _020E6F24 - add sp, sp, #0x430 - mvn r0, #0x0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E66D8: - sub r0, r0, r11 - add r0, r0, r0, lsr #0x1f - movs r2, r0, asr #0x1 - add r4, r4, r2 - beq _020E6710 - mov r0, r8 - mov r1, r11 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E6710: - add r1, sp, #0x400 - ldr r0, [sp, #0xc] - add r1, r1, #0x64 - add r2, sp, #0x20 - bl parse_format_wprintf - ldrh r1, [sp, #0x26] - mov r11, r0 - cmp r1, #0x61 - bgt _020E6780 - bge _020E6AEC - cmp r1, #0x47 - bgt _020E6774 - subs r0, r1, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020E6768 -_020E674C: - .byte 0xE6, 0x00, 0x00, 0xEA - .byte 0x8E, 0x01, 0x00, 0xEA, 0x8D, 0x01, 0x00, 0xEA, 0x8C, 0x01, 0x00, 0xEA, 0xC6, 0x00, 0x00, 0xEA - .byte 0xC5, 0x00, 0x00, 0xEA, 0xC4, 0x00, 0x00, 0xEA -_020E6768: - cmp r1, #0x25 - beq _020E6D7C - b _020E6D90 -_020E6774: - cmp r1, #0x58 - beq _020E6940 - b _020E6D90 -_020E6780: - cmp r1, #0x75 - bgt _020E67E8 - subs r0, r1, #0x64 - addpl pc, pc, r0, lsl #0x2 - b _020E67DC -_020E6794: - .byte 0x1A, 0x00, 0x00, 0xEA, 0xB7, 0x00, 0x00, 0xEA, 0xB6, 0x00, 0x00, 0xEA - .byte 0xB5, 0x00, 0x00, 0xEA, 0x79, 0x01, 0x00, 0xEA, 0x15, 0x00, 0x00, 0xEA, 0x77, 0x01, 0x00, 0xEA - .byte 0x76, 0x01, 0x00, 0xEA, 0x75, 0x01, 0x00, 0xEA, 0x74, 0x01, 0x00, 0xEA, 0x35, 0x01, 0x00, 0xEA - .byte 0x5E, 0x00, 0x00, 0xEA, 0x71, 0x01, 0x00, 0xEA, 0x70, 0x01, 0x00, 0xEA, 0x6F, 0x01, 0x00, 0xEA - .byte 0xE1, 0x00, 0x00, 0xEA, 0x6D, 0x01, 0x00, 0xEA, 0x58, 0x00, 0x00, 0xEA -_020E67DC: - cmp r1, #0x63 - beq _020E6D24 - b _020E6D90 -_020E67E8: - cmp r1, #0x78 - bgt _020E67F8 - beq _020E6940 - b _020E6D90 -_020E67F8: - ldr r0, _020E6F38 ; =0x0000FFFF - cmp r1, r0 - b _020E6D90 -_020E6804: - .byte 0x24, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A - .byte 0x64, 0x14, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5 - .byte 0x25, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5 - .byte 0x08, 0x20, 0x81, 0xE2, 0x64, 0x24, 0x8D, 0xE5, 0x08, 0x10, 0x12, 0xE5, 0x10, 0x10, 0x8D, 0xE5 - .byte 0x04, 0x10, 0x12, 0xE5, 0x14, 0x10, 0x8D, 0xE5, 0x1B, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x50, 0xE3 - .byte 0x07, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5, 0x08, 0x20, 0x81, 0xE2, 0x64, 0x24, 0x8D, 0xE5 - .byte 0x08, 0x10, 0x12, 0xE5, 0x10, 0x10, 0x8D, 0xE5, 0x04, 0x10, 0x12, 0xE5, 0x14, 0x10, 0x8D, 0xE5 - .byte 0x11, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5 - .byte 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5, 0x0A, 0x00, 0x00, 0xEA - .byte 0x08, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2 - .byte 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x64, 0x14, 0x9D, 0xE5 - .byte 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5, 0x02, 0x00, 0x50, 0xE3 - .byte 0x0A, 0x18, 0xA0, 0x01, 0x41, 0xA8, 0xA0, 0x01, 0x04, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13 - .byte 0x20, 0x00, 0x8D, 0xE2, 0x0A, 0x00, 0x00, 0x1A, 0x04, 0x50, 0x4D, 0xE2, 0x0F, 0x00, 0x90, 0xE8 - .byte 0x0F, 0x00, 0x85, 0xE8, 0x00, 0x30, 0x95, 0xE5, 0x10, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x9D, 0xE5 - .byte 0x43, 0x2E, 0x8D, 0xE2, 0xDB, 0xFB, 0xFF, 0xEB, 0x00, 0x60, 0xB0, 0xE1, 0x23, 0x01, 0x00, 0x0A - .byte 0x08, 0x00, 0x00, 0xEA, 0x08, 0x50, 0x4D, 0xE2, 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x85, 0xE8 - .byte 0x43, 0x1E, 0x8D, 0xE2, 0x0A, 0x00, 0xA0, 0xE1, 0x0C, 0x00, 0x95, 0xE8, 0x3D, 0xFB, 0xFF, 0xEB - .byte 0x00, 0x60, 0xB0, 0xE1, 0x19, 0x01, 0x00, 0x0A, 0x01, 0x0B, 0x8D, 0xE2, 0x2E, 0x00, 0x80, 0xE2 - .byte 0x06, 0x00, 0x40, 0xE0, 0xA0, 0x0F, 0x80, 0xE0, 0xC0, 0x70, 0xA0, 0xE1, 0x26, 0x01, 0x00, 0xEA -_020E6940: - ldrb r0, [sp, #0x24] - cmp r0, #0x3 - bne _020E6960 - ldr r1, [sp, #0x464] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r10, [r1, #-0x4] - b _020E69F8 -_020E6960: - cmp r0, #0x4 - bne _020E6988 - ldr r1, [sp, #0x464] - add r2, r1, #0x8 - str r2, [sp, #0x464] - ldr r1, [r2, #-0x8] - str r1, [sp, #0x10] - ldr r1, [r2, #-0x4] - str r1, [sp, #0x14] - b _020E69F8 -_020E6988: - cmp r0, #0x6 - bne _020E69B0 - ldr r1, [sp, #0x464] - add r2, r1, #0x8 - str r2, [sp, #0x464] - ldr r1, [r2, #-0x8] - str r1, [sp, #0x10] - ldr r1, [r2, #-0x4] - str r1, [sp, #0x14] - b _020E69F8 -_020E69B0: - cmp r0, #0x7 - bne _020E69CC - ldr r1, [sp, #0x464] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r10, [r1, #-0x4] - b _020E69F8 -_020E69CC: - cmp r0, #0x8 - bne _020E69E8 - ldr r1, [sp, #0x464] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r10, [r1, #-0x4] - b _020E69F8 -_020E69E8: - ldr r1, [sp, #0x464] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r10, [r1, #-0x4] -_020E69F8: - cmp r0, #0x2 - moveq r1, r10, lsl #0x10 - moveq r10, r1, lsr #0x10 - cmp r0, #0x4 - cmpne r0, #0x6 - add r0, sp, #0x20 - bne _020E6A40 - sub r5, sp, #0x4 - ldmia r0, {r0-r3} - stmia r5, {r0-r3} - ldr r3, [r5, #0x0] - ldr r0, [sp, #0x10] - ldr r1, [sp, #0x14] - add r2, sp, #0x430 - bl longlong2str_wide - movs r6, r0 - beq _020E6D90 - b _020E6A64 -_020E6A40: - sub r5, sp, #0x8 - ldmia r0, {r0-r3} - stmia r5, {r0-r3} - add r1, sp, #0x430 - mov r0, r10 - ldmia r5, {r2-r3} - bl long2str_wide - movs r6, r0 - beq _020E6D90 -_020E6A64: - add r0, sp, #0x400 - add r0, r0, #0x2e - sub r0, r0, r6 - add r0, r0, r0, lsr #0x1f - mov r7, r0, asr #0x1 - b _020E6DDC -_020E6A7C: - .byte 0x24, 0x00, 0xDD, 0xE5 - .byte 0x09, 0x00, 0x50, 0xE3, 0x64, 0x04, 0x9D, 0x15, 0x08, 0x00, 0x80, 0x12, 0x64, 0x04, 0x8D, 0x15 - .byte 0x02, 0x00, 0x00, 0x1A, 0x64, 0x04, 0x9D, 0xE5, 0x08, 0x00, 0x80, 0xE2, 0x64, 0x04, 0x8D, 0xE5 - .byte 0x08, 0x70, 0x10, 0xE5, 0x04, 0x60, 0x10, 0xE5, 0x20, 0x00, 0x8D, 0xE2, 0x04, 0x50, 0x4D, 0xE2 - .byte 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x85, 0xE8, 0x00, 0x30, 0x95, 0xE5, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x06, 0x10, 0xA0, 0xE1, 0x43, 0x2E, 0x8D, 0xE2, 0x4E, 0xFD, 0xFF, 0xEB, 0x00, 0x60, 0xB0, 0xE1 - .byte 0xAE, 0x00, 0x00, 0x0A, 0x01, 0x0B, 0x8D, 0xE2, 0x2E, 0x00, 0x80, 0xE2, 0x06, 0x00, 0x40, 0xE0 - .byte 0xA0, 0x0F, 0x80, 0xE0, 0xC0, 0x70, 0xA0, 0xE1, 0xBB, 0x00, 0x00, 0xEA -_020E6AEC: - ldrb r0, [sp, #0x24] - cmp r0, #0x9 - ldrne r0, [sp, #0x464] - addne r0, r0, #0x8 - strne r0, [sp, #0x464] - bne _020E6B10 - ldr r0, [sp, #0x464] - add r0, r0, #0x8 - str r0, [sp, #0x464] -_020E6B10: - ldr r7, [r0, #-0x8] - ldr r6, [r0, #-0x4] - add r0, sp, #0x20 - sub r5, sp, #0x4 - ldmia r0, {r0-r3} - stmia r5, {r0-r3} - ldr r3, [r5, #0x0] - mov r0, r7 - mov r1, r6 - add r2, sp, #0x430 - bl double2hex_wide - movs r6, r0 - beq _020E6D90 - add r0, sp, #0x400 - add r0, r0, #0x2e - sub r0, r0, r6 - add r0, r0, r0, lsr #0x1f - mov r7, r0, asr #0x1 - b _020E6DDC -_020E6B5C: - .byte 0x24, 0x00, 0xDD, 0xE5 - .byte 0x05, 0x00, 0x50, 0xE3, 0x23, 0x00, 0x00, 0x1A, 0x64, 0x04, 0x9D, 0xE5, 0x04, 0x00, 0x80, 0xE2 - .byte 0x64, 0x04, 0x8D, 0xE5, 0x04, 0x60, 0x10, 0xE5, 0x23, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x56, 0xE3 - .byte 0xB4, 0x63, 0x9F, 0x05, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0xB2, 0x10, 0xD6, 0xE0 - .byte 0x22, 0x00, 0xDD, 0xE5, 0xFF, 0x70, 0x01, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x8E, 0x00, 0x00, 0x0A - .byte 0x2C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x57, 0xE1, 0x00, 0x70, 0xA0, 0xC1, 0x8A, 0x00, 0x00, 0xEA - .byte 0x22, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x2C, 0x70, 0x9D, 0xE5 - .byte 0x06, 0x00, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x29, 0xF9, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x80, 0x00, 0x00, 0x0A, 0x06, 0x00, 0x40, 0xE0, 0xA0, 0x0F, 0x80, 0xE0 - .byte 0xC0, 0x70, 0xA0, 0xE1, 0x7C, 0x00, 0x00, 0xEA, 0x06, 0x00, 0xA0, 0xE1, 0x0A, 0x01, 0x00, 0xEB - .byte 0x00, 0x70, 0xA0, 0xE1, 0x78, 0x00, 0x00, 0xEA, 0x64, 0x04, 0x9D, 0xE5, 0x04, 0x00, 0x80, 0xE2 - .byte 0x64, 0x04, 0x8D, 0xE5, 0x04, 0x50, 0x10, 0xE5, 0x23, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x55, 0xE3 - .byte 0x28, 0x53, 0x9F, 0x05, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0xB0, 0x10, 0xD6, 0xE1 - .byte 0x22, 0x00, 0xDD, 0xE5, 0xFF, 0x60, 0x01, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x11, 0x00, 0x00, 0x0A - .byte 0x2C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x56, 0xE1, 0x00, 0x60, 0xA0, 0xC1, 0x0D, 0x00, 0x00, 0xEA - .byte 0x22, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0x2C, 0x60, 0x9D, 0xE5 - .byte 0x05, 0x00, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x15, 0xE2, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x60, 0x40, 0x10, 0x02, 0x00, 0x00, 0xEA, 0x05, 0x00, 0xA0, 0xE1 - .byte 0x8D, 0xF0, 0xFF, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x30, 0x00, 0x8D, 0xE2, 0x05, 0x10, 0xA0, 0xE1 - .byte 0x06, 0x20, 0xA0, 0xE1, 0xAB, 0xE1, 0xFF, 0xEB, 0x00, 0x70, 0xB0, 0xE1, 0x3F, 0x00, 0x00, 0x4A - .byte 0x30, 0x60, 0x8D, 0xE2, 0x50, 0x00, 0x00, 0xEA, 0x64, 0x14, 0x9D, 0xE5, 0x24, 0x00, 0xDD, 0xE5 - .byte 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0x60, 0x11, 0xE5, 0x08, 0x00, 0x50, 0xE3 - .byte 0x00, 0xF1, 0x8F, 0x90, 0x97, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0x95, 0x00, 0x00, 0xEA - .byte 0x07, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x11, 0x00, 0x00, 0xEA, 0x91, 0x00, 0x00, 0xEA - .byte 0x07, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5 - .byte 0x8C, 0x00, 0x00, 0xEA, 0xB0, 0x40, 0xC6, 0xE1, 0x8A, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5 - .byte 0x88, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5, 0xC4, 0x0F, 0xA0, 0xE1, 0x04, 0x00, 0x86, 0xE5 - .byte 0x84, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5, 0x82, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5 - .byte 0x80, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5, 0xC4, 0x0F, 0xA0, 0xE1, 0x04, 0x00, 0x86, 0xE5 - .byte 0x7C, 0x00, 0x00, 0xEA -_020E6D24: - ldrb r0, [sp, #0x24] - add r6, sp, #0x30 - cmp r0, #0x5 - bne _020E6D50 - ldr r0, [sp, #0x464] - mov r7, #0x1 - add r0, r0, #0x4 - str r0, [sp, #0x464] - ldr r0, [r0, #-0x4] - strh r0, [r6, #0x0] - b _020E6DDC -_020E6D50: - ldr r0, [sp, #0x464] - add r1, sp, #0x18 - add r0, r0, #0x4 - str r0, [sp, #0x464] - ldr r3, [r0, #-0x4] - mov r0, r6 - mov r2, #0x1 - strb r3, [sp, #0x18] - bl mbtowc - mov r7, r0 - b _020E6DDC -_020E6D7C: - mov r0, #0x25 - strh r0, [sp, #0x30] - add r6, sp, #0x30 - mov r7, #0x1 - b _020E6DDC -_020E6D90: - ldr r0, [sp, #0xc] - bl wcslen - movs r5, r0 - beq _020E6DC8 - ldr r1, [sp, #0xc] - mov r0, r8 - mov r2, r5 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E6DC8: - add sp, sp, #0x430 - add r0, r4, r5 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E6DDC: - ldrb r0, [sp, #0x20] - mov r5, r7 - cmp r0, #0x0 - beq _020E6E8C - cmp r0, #0x2 - moveq r1, #0x30 - movne r1, #0x20 - strh r1, [sp, #0x1c] - ldrh r0, [r6, #0x0] - cmp r0, #0x2b - cmpne r0, #0x2d - cmpne r0, #0x20 - bne _020E6E48 - cmp r1, #0x30 - bne _020E6E48 - mov r0, r8 - mov r1, r6 - mov r2, #0x1 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - add r6, r6, #0x2 - sub r7, r7, #0x1 -_020E6E48: - ldr r0, [sp, #0x28] - cmp r5, r0 - bge _020E6E8C -_020E6E54: - mov r0, r8 - add r1, sp, #0x1c - mov r2, #0x1 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x28] - add r5, r5, #0x1 - cmp r5, r0 - blt _020E6E54 -_020E6E8C: - cmp r7, #0x0 - beq _020E6EBC - mov r0, r8 - mov r1, r6 - mov r2, r7 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E6EBC: - ldrb r0, [sp, #0x20] - cmp r0, #0x0 - bne _020E6F14 - ldr r0, [sp, #0x28] - cmp r5, r0 - bge _020E6F14 - mov r7, #0x20 -_020E6ED8: - mov r0, r8 - add r1, sp, #0x1a - mov r2, #0x1 - strh r7, [sp, #0x1a] - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x28] - add r5, r5, #0x1 - cmp r5, r0 - blt _020E6ED8 -_020E6F14: - add r4, r4, r5 - ldrh r0, [r11, #0x0] - cmp r0, #0x0 - bne _020E6684 -_020E6F24: - mov r0, r4 - add sp, sp, #0x430 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E6F38: .word 0x0000FFFF -_020E6F3C: - .byte 0x40, 0x6E, 0x10, 0x02 - .byte 0x44, 0x6E, 0x10, 0x02 - - arm_func_start __wStringWrite -__wStringWrite: ; 0x020E6F44 - stmdb sp!, {r3-r5,lr} - mov r4, r0 - ldr r3, [r4, #0x8] - mov r5, r2 - ldr r2, [r4, #0x4] - add r0, r3, r5 - cmp r0, r2 - ldr r0, [r4, #0x0] - subhi r5, r2, r3 - mov r2, r5 - add r0, r0, r3, lsl #0x1 - bl wmemcpy - ldr r1, [r4, #0x8] - add r1, r1, r5 - str r1, [r4, #0x8] - ldmia sp!, {r3-r5,pc} - - arm_func_start swprintf -swprintf: ; 0x020E6F84 - stmdb sp!, {r0-r3} - stmdb sp!, {r3,lr} - add r3, sp, #0x10 - bic r3, r3, #0x3 - ldr r2, [sp, #0x10] - add r3, r3, #0x4 - bl vswprintf - ldmia sp!, {r3,lr} - add sp, sp, #0x10 - bx lr - - arm_func_start vswprintf -vswprintf: ; 0x020E6FAC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - mov r5, r0 - mov r4, r1 - mov r12, #0x0 - ldr r0, _020E7018 ; =__wStringWrite - add r1, sp, #0x0 - str r5, [sp, #0x0] - str r4, [sp, #0x4] - str r12, [sp, #0x8] - bl __wpformatter -_020E6FD8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0xB2 - .byte 0x30, 0x80, 0xBD, 0xB8, 0x04, 0x00, 0x50, 0xE1, 0x04, 0x00, 0x00, 0x2A, 0x80, 0x10, 0xA0, 0xE1 - .byte 0x00, 0x20, 0xA0, 0xE3, 0x0C, 0xD0, 0x8D, 0xE2, 0xB1, 0x20, 0x85, 0xE1, 0x30, 0x80, 0xBD, 0xE8 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x84, 0x00, 0x85, 0xE0, 0xB2, 0x10, 0x40, 0xE1, 0x01, 0x00, 0x41, 0xE2 - .byte 0x0C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 -_020E7018: .word __wStringWrite - - arm_func_start wcslen -wcslen: ; 0x020E701C - mvn r2, #0x0 -_020E7020: - ldrh r1, [r0], #0x2 - add r2, r2, #0x1 - cmp r1, #0x0 - bne _020E7020 - mov r0, r2 - bx lr - - arm_func_start wcscpy -wcscpy: ; 0x020E7038 - mov r3, r0 -_020E703C: - ldrh r2, [r1], #0x2 - mov r12, r3 - strh r2, [r3], #0x2 - ldrh r2, [r12, #0x0] - cmp r2, #0x0 - bne _020E703C - bx lr - - arm_func_start wcschr -wcschr: ; 0x020E7058 - ldrh r2, [r0], #0x2 - cmp r2, #0x0 - beq _020E707C -_020E7064: - cmp r2, r1 - subeq r0, r0, #0x2 - bxeq lr - ldrh r2, [r0], #0x2 - cmp r2, #0x0 - bne _020E7064 -_020E707C: - cmp r1, #0x0 - movne r0, #0x0 - subeq r0, r0, #0x2 - bx lr - - arm_func_start __ieee754_pow -__ieee754_pow: ; 0x020E708C - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x80 - ldr r8, [sp, #0xb4] - ldr r6, [sp, #0xac] - ldr r0, [sp, #0xb0] - bic r9, r8, #0x80000000 - orrs r1, r9, r0 - ldr r7, [sp, #0xa8] - bic r4, r6, #0x80000000 - addeq sp, sp, #0x80 - moveq r0, #0x0 - ldreq r1, _020E7638 ; =0x3FF00000 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r1, _020E763C ; =0x7FF00000 - cmp r4, r1 - bgt _020E70FC - bne _020E70E4 - cmp r7, #0x0 - bne _020E70FC -_020E70E4: - ldr r1, _020E763C ; =0x7FF00000 - cmp r9, r1 - bgt _020E70FC - bne _020E7120 - cmp r0, #0x0 - beq _020E7120 -_020E70FC: - ldr r0, [sp, #0xa8] - ldr r1, [sp, #0xac] - ldr r2, [sp, #0xb0] - ldr r3, [sp, #0xb4] - bl _dadd - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7120: - cmp r6, #0x0 - mov r5, #0x0 - bge _020E7188 - ldr r1, _020E7640 ; =0x43400000 - cmp r9, r1 - movge r5, #0x2 - bge _020E7188 - sub r1, r1, #0x3500000 - cmp r9, r1 - blt _020E7188 - ldr r1, _020E7644 ; =0xFFFFFC01 - add r1, r1, r9, asr #0x14 - cmp r1, #0x14 - ble _020E7170 - rsb r2, r1, #0x34 - mov r1, r0, lsr r2 - cmp r0, r1, lsl r2 - andeq r1, r1, #0x1 - rsbeq r5, r1, #0x2 - b _020E7188 -_020E7170: - cmp r0, #0x0 - rsbeq r2, r1, #0x14 - moveq r1, r9, asr r2 - cmpeq r9, r1, lsl r2 - andeq r1, r1, #0x1 - rsbeq r5, r1, #0x2 -_020E7188: - cmp r0, #0x0 - bne _020E72E4 - ldr r1, _020E763C ; =0x7FF00000 - cmp r9, r1 - bne _020E723C - add r0, r4, #0x100000 - add r0, r0, #0xc0000000 - orrs r0, r0, r7 - bne _020E71D0 - ldr r0, [sp, #0xb0] - ldr r1, [sp, #0xb4] - mov r2, r0 - mov r3, r1 - bl _dsub - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E71D0: - sub r0, r1, #0x40000000 - cmp r4, r0 - blt _020E7200 - cmp r8, #0x0 - ldrge r0, [sp, #0xb0] - ldrge r1, [sp, #0xb4] - movlt r0, #0x0 - add sp, sp, #0x80 - movlt r1, r0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7200: - cmp r8, #0x0 - mov r0, #0x0 - addge sp, sp, #0x80 - movge r1, r0 - ldmgeia sp!, {r3-r11,lr} - addge sp, sp, #0x10 - bxge lr - ldr r2, [sp, #0xb0] - ldr r3, [sp, #0xb4] - mov r1, r0 - bl _dsub - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E723C: - sub r0, r1, #0x40000000 - cmp r9, r0 - bne _020E7288 - cmp r8, #0x0 - ldrge r0, [sp, #0xa8] - ldrge r1, [sp, #0xac] - addge sp, sp, #0x80 - ldmgeia sp!, {r3-r11,lr} - addge sp, sp, #0x10 - bxge lr - ldr r2, [sp, #0xa8] - ldr r3, [sp, #0xac] - sub r1, r1, #0x40000000 - mov r0, #0x0 - bl _ddiv - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7288: - cmp r8, #0x40000000 - bne _020E72B4 - ldr r0, [sp, #0xa8] - ldr r1, [sp, #0xac] - mov r2, r0 - mov r3, r1 - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E72B4: - ldr r0, _020E7648 ; =0x3FE00000 - cmp r8, r0 - bne _020E72E4 - cmp r6, #0x0 - blt _020E72E4 - ldr r0, [sp, #0xa8] - ldr r1, [sp, #0xac] - bl _dsqrt - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E72E4: - ldr r0, [sp, #0xa8] - ldr r1, [sp, #0xac] - bl fabs - str r0, [sp, #0x70] - str r1, [sp, #0x74] - cmp r7, #0x0 - bne _020E73E8 - ldr r0, _020E763C ; =0x7FF00000 - cmp r4, r0 - cmpne r4, #0x0 - subne r0, r0, #0x40000000 - cmpne r4, r0 - bne _020E73E8 - ldr r2, [sp, #0x70] - ldr r3, [sp, #0x74] - str r2, [sp, #0x78] - str r3, [sp, #0x7c] - cmp r8, #0x0 - bge _020E7344 - ldr r1, _020E7638 ; =0x3FF00000 - mov r0, #0x0 - bl _ddiv - str r0, [sp, #0x78] - str r1, [sp, #0x7c] -_020E7344: - cmp r6, #0x0 - bge _020E73D0 - add r0, r4, #0x100000 - add r0, r0, #0xc0000000 - orrs r0, r0, r5 - bne _020E73AC - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - mov r2, r0 - mov r3, r1 - bl _dsub - mov r4, r0 - mov r5, r1 - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - mov r2, r0 - mov r3, r1 - bl _dsub - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r5 - bl _ddiv - str r0, [sp, #0x78] - str r1, [sp, #0x7c] - b _020E73D0 -_020E73AC: - cmp r5, #0x1 - bne _020E73D0 - mov r0, #0x0 - ldr r2, [sp, #0x78] - ldr r3, [sp, #0x7c] - mov r1, r0 - bl _dsub - str r0, [sp, #0x78] - str r1, [sp, #0x7c] -_020E73D0: - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E73E8: - mov r0, r6, asr #0x1f - add r7, r0, #0x1 - orrs r0, r7, r5 - bne _020E7420 - ldr r0, _020E764C ; =0x02106B78 - ldr r1, _020E7650 ; =0x021D74A8 - ldr r0, [r0, #0x0] - mov r2, #0x21 - str r2, [r1, #0x0] - bl _f2d - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7420: - ldr r3, _020E7654 ; =0x41E00000 - cmp r9, r3 - ble _020E7724 - add r0, r3, #0x2100000 - cmp r9, r0 - ble _020E7490 - ldr r1, _020E7658 ; =0x3FEFFFFF - cmp r4, r1 - bgt _020E7464 - cmp r8, #0x0 - mov r0, #0x0 - addlt r1, r1, #0x40000001 - add sp, sp, #0x80 - movge r1, r0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7464: - add r0, r1, #0x1 - cmp r4, r0 - blt _020E7490 - cmp r8, #0x0 - mov r0, #0x0 - addgt r1, r1, #0x40000001 - add sp, sp, #0x80 - movle r1, r0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7490: - ldr r2, _020E7658 ; =0x3FEFFFFF - cmp r4, r2 - bge _020E74BC - cmp r8, #0x0 - mov r0, #0x0 - addlt r1, r2, #0x40000001 - add sp, sp, #0x80 - movge r1, r0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E74BC: - add r0, r2, #0x1 - cmp r4, r0 - ble _020E74E8 - cmp r8, #0x0 - mov r0, #0x0 - addgt r1, r2, #0x40000001 - add sp, sp, #0x80 - movle r1, r0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E74E8: - ldr r0, [sp, #0xa8] - ldr r1, [sp, #0xac] - add r3, r2, #0x1 - mov r2, #0x0 - bl _dsub - mov r2, r0 - mov r3, r1 - str r0, [sp, #0x50] - str r1, [sp, #0x54] - bl _dmul - mov r6, r1 - mov r4, r0 - ldr r2, [sp, #0x50] - ldr r3, [sp, #0x54] - ldr r1, _020E765C ; =0x3FD00000 - mov r0, #0x0 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7660 ; =0x55555555 - sub r1, r0, #0x15800000 - bl _dsub - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, #0x0 - ldr r1, _020E7648 ; =0x3FE00000 - bl _dsub - mov r2, r0 - mov r0, r4 - mov r3, r1 - mov r1, r6 - bl _dmul - mov r6, r0 - mov r8, r1 - mov r0, #0x60000000 - ldr r1, _020E7664 ; =0x3FF71547 - ldr r2, [sp, #0x50] - ldr r3, [sp, #0x54] - bl _dmul - mov r4, r0 - mov r9, r1 - ldr r0, _020E7668 ; =0xF85DDF44 - ldr r1, _020E766C ; =0x3E54AE0B - ldr r2, [sp, #0x50] - ldr r3, [sp, #0x54] - bl _dmul - mov r11, r0 - mov r10, r1 - ldr r0, _020E7670 ; =0x652B82FE - ldr r1, _020E7664 ; =0x3FF71547 - mov r2, r6 - mov r3, r8 - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r11 - mov r1, r10 - bl _dsub - mov r6, r0 - mov r8, r1 - mov r0, r4 - mov r1, r9 - mov r2, r6 - mov r3, r8 - bl _dadd - mov r2, r4 - mov r3, r9 - str r1, [sp, #0x5c] - mov r0, #0x0 - str r0, [sp, #0x58] - bl _dsub - mov r2, r0 - mov r0, r6 - mov r3, r1 - mov r1, r8 - bl _dsub - mov r4, r0 - mov r8, r1 - b _020E7C80 - .balign 4 -_020E7638: .word 0x3FF00000 -_020E763C: .word 0x7FF00000 -_020E7640: .word 0x43400000 -_020E7644: .word 0xFFFFFC01 -_020E7648: .word 0x3FE00000 -_020E764C: .word 0x02106B78 -_020E7650: .word 0x021D74A8 -_020E7654: .word 0x41E00000 -_020E7658: .word 0x3FEFFFFF -_020E765C: .word 0x3FD00000 -_020E7660: .word 0x55555555 -_020E7664: .word 0x3FF71547 -_020E7668: .word 0xF85DDF44 -_020E766C: .word 0x3E54AE0B -_020E7670: .word 0x652B82FE -_020E7674: .word 0x0003988E -_020E7678: .word 0x000BB67A -_020E767C: .word 0x02104754 -_020E7680: .word 0x4A454EEF -_020E7684: .word 0x3FCA7E28 -_020E7688: .word 0x93C9DB65 -_020E768C: .word 0x3FCD864A -_020E7690: .word 0xA91D4101 -_020E7694: .word 0x3FD17460 -_020E7698: .word 0x518F264D -_020E769C: .word 0x3FD55555 -_020E76A0: .word 0xDB6FABFF -_020E76A4: .word 0x3FDB6DB6 -_020E76A8: .word 0x33333303 -_020E76AC: .word 0x3FE33333 -_020E76B0: .word 0x40080000 -_020E76B4: - .byte 0x09, 0xC7, 0xEE, 0x3F, 0xF5, 0x01, 0x5B, 0x14, 0xE0, 0x2F, 0x3E, 0xBE - .byte 0xFD, 0x03, 0x3A, 0xDC, 0x64, 0x47, 0x10, 0x02, 0x44, 0x47, 0x10, 0x02 -_020E76CC: .word 0x40900000 -_020E76D0: .word 0x8800759C -_020E76D4: .word 0x7E37E43C -_020E76D8: .word 0x3C971547 -_020E76DC: .word 0x3F6F3400 -_020E76E0: .word 0xC2F8F359 -_020E76E4: .word 0x01A56E1F -_020E76E8: .word 0x3FE62E43 -_020E76EC: .word 0xFEFA39EF -_020E76F0: .word 0x3FE62E42 -_020E76F4: .word 0x0CA86C39 -_020E76F8: .word 0xBE205C61 -_020E76FC: .word 0x72BEA4D0 -_020E7700: .word 0x3E663769 -_020E7704: .word 0xC5D26BF1 -_020E7708: .word 0xBEBBBD41 -_020E770C: .word 0xAF25DE2C -_020E7710: .word 0x3F11566A -_020E7714: .word 0x16BEBD93 -_020E7718: .word 0xBF66C16C -_020E771C: .word 0x5555553E -_020E7720: .word 0x3FC55555 -_020E7724: - cmp r4, #0x100000 - mov r6, #0x0 - bge _020E7754 - ldr r0, [sp, #0x70] - ldr r1, [sp, #0x74] - mov r2, r6 - add r3, r3, #0x1600000 - bl _dmul - mov r4, r1 - str r0, [sp, #0x70] - str r4, [sp, #0x74] - sub r6, r6, #0x35 -_020E7754: - ldr r0, _020E7644 ; =0xFFFFFC01 - ldr r1, _020E7674 ; =0x0003988E - and r2, r4, r0, lsr #0xc - add r0, r0, r4, asr #0x14 - orr r9, r2, #0xff00000 - cmp r2, r1 - add r6, r6, r0 - orr r9, r9, #0x30000000 - movle r8, #0x0 - ble _020E7794 - ldr r0, _020E7678 ; =0x000BB67A - cmp r2, r0 - movlt r8, #0x1 - addge r6, r6, #0x1 - subge r9, r9, #0x100000 - movge r8, #0x0 -_020E7794: - ldr r2, _020E767C ; =0x02104754 - ldr r0, [sp, #0x70] - add r1, r2, r8, lsl #0x3 - ldr r3, [r1, #0x4] - ldr r2, [r2, r8, lsl #0x3] - mov r1, r9 - str r9, [sp, #0x74] - bl _dsub - ldr r2, _020E767C ; =0x02104754 - mov r10, r0 - add r3, r2, r8, lsl #0x3 - mov r4, r1 - ldr r0, [sp, #0x70] - ldr r2, [r2, r8, lsl #0x3] - ldr r3, [r3, #0x4] - mov r1, r9 - bl _dadd - mov r3, r1 - mov r2, r0 - ldr r1, _020E7638 ; =0x3FF00000 - mov r0, #0x0 - bl _ddiv - str r1, [sp, #0x24] - mov r11, r0 - ldr r3, [sp, #0x24] - mov r0, r10 - mov r1, r4 - mov r2, r11 - bl _dmul - mov r2, r9, asr #0x1 - orr r2, r2, #0x20000000 - mov r9, r1 - add r2, r2, #0x80000 - add r1, r2, r8, lsl #0x12 - ldr r2, _020E767C ; =0x02104754 - str r0, [sp, #0x28] - add r3, r2, r8, lsl #0x3 - mov r0, #0x0 - ldr r2, [r2, r8, lsl #0x3] - ldr r3, [r3, #0x4] - str r9, [sp, #0x4c] - str r1, [sp, #0x44] - str r0, [sp, #0x48] - str r0, [sp, #0x40] - bl _dsub - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x70] - ldr r1, [sp, #0x74] - bl _dsub - str r0, [sp, #0x2c] - str r1, [sp, #0x1c] - ldr r0, [sp, #0x48] - ldr r2, [sp, #0x40] - ldr r3, [sp, #0x44] - mov r1, r9 - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r10 - mov r1, r4 - bl _dsub - mov r10, r0 - mov r4, r1 - ldr r2, [sp, #0x2c] - ldr r3, [sp, #0x1c] - ldr r0, [sp, #0x48] - mov r1, r9 - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r10 - mov r1, r4 - bl _dsub - mov r3, r1 - mov r2, r0 - ldr r1, [sp, #0x24] - mov r0, r11 - bl _dmul - str r0, [sp, #0x30] - ldr r0, [sp, #0x28] - str r1, [sp, #0x14] - mov r1, r9 - mov r2, r0 - mov r3, r9 - bl _dmul - mov r4, r0 - mov r10, r1 - mov r2, r4 - mov r3, r10 - bl _dmul - str r0, [sp, #0x34] - mov r11, r1 - ldr r0, _020E7680 ; =0x4A454EEF - ldr r1, _020E7684 ; =0x3FCA7E28 - mov r2, r4 - mov r3, r10 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7688 ; =0x93C9DB65 - ldr r1, _020E768C ; =0x3FCD864A - bl _dadd - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7690 ; =0xA91D4101 - ldr r1, _020E7694 ; =0x3FD17460 - bl _dadd - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7698 ; =0x518F264D - ldr r1, _020E769C ; =0x3FD55555 - bl _dadd - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76A0 ; =0xDB6FABFF - ldr r1, _020E76A4 ; =0x3FDB6DB6 - bl _dadd - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76A8 ; =0x33333303 - ldr r1, _020E76AC ; =0x3FE33333 - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x34] - mov r1, r11 - bl _dmul - mov r4, r0 - mov r10, r1 - ldr r0, [sp, #0x48] - ldr r2, [sp, #0x28] - mov r1, r9 - mov r3, r9 - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x30] - ldr r1, [sp, #0x14] - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dadd - mov r4, r0 - ldr r0, [sp, #0x48] - mov r10, r1 - mov r1, r9 - mov r2, r0 - mov r3, r1 - bl _dmul - str r1, [sp, #0xc] - mov r11, r0 - ldr r1, _020E76B0 ; =0x40080000 - ldr r3, [sp, #0xc] - mov r0, #0x0 - mov r2, r11 - bl _dadd - mov r2, r4 - mov r3, r10 - bl _dadd -_020E7A6C: - .byte 0x00, 0x00, 0xA0, 0xE3 - .byte 0xC8, 0x33, 0x1F, 0xE5, 0x00, 0x20, 0xA0, 0xE1, 0x44, 0x10, 0x8D, 0xE5, 0x40, 0x00, 0x8D, 0xE5 - .byte 0xD1, 0x0A, 0x00, 0xEB, 0x0C, 0x30, 0x9D, 0xE5, 0x0B, 0x20, 0xA0, 0xE1, 0xCE, 0x0A, 0x00, 0xEB - .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 - .byte 0xC9, 0x0A, 0x00, 0xEB, 0x38, 0x00, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5, 0x48, 0x00, 0x9D, 0xE5 - .byte 0x40, 0x20, 0x9D, 0xE5, 0x44, 0x30, 0x9D, 0xE5, 0x09, 0x10, 0xA0, 0xE1, 0x7C, 0x09, 0x00, 0xEB - .byte 0x00, 0x40, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1, 0x30, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x9D, 0xE5 - .byte 0x40, 0x20, 0x9D, 0xE5, 0x44, 0x30, 0x9D, 0xE5, 0x75, 0x09, 0x00, 0xEB, 0x3C, 0x00, 0x8D, 0xE5 - .byte 0x01, 0xB0, 0xA0, 0xE1, 0x38, 0x00, 0x9D, 0xE5, 0x04, 0x10, 0x9D, 0xE5, 0x28, 0x20, 0x9D, 0xE5 - .byte 0x09, 0x30, 0xA0, 0xE1, 0x6E, 0x09, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 - .byte 0x3C, 0x00, 0x9D, 0xE5, 0x0B, 0x10, 0xA0, 0xE1, 0x0D, 0x08, 0x00, 0xEB, 0x00, 0x90, 0xA0, 0xE1 - .byte 0x01, 0xB0, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0x09, 0x20, 0xA0, 0xE1 - .byte 0x0B, 0x30, 0xA0, 0xE1, 0x06, 0x08, 0x00, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0x20, 0xA0, 0xE1 - .byte 0x0A, 0x30, 0xA0, 0xE1, 0x6C, 0x10, 0x8D, 0xE5, 0x68, 0x00, 0x8D, 0xE5, 0xA2, 0x0A, 0x00, 0xEB - .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x09, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1 - .byte 0x9D, 0x0A, 0x00, 0xEB, 0x01, 0xA0, 0xA0, 0xE1, 0x00, 0xB0, 0xA0, 0xE1, 0xB0, 0x14, 0x1F, 0xE5 - .byte 0x68, 0x20, 0x9D, 0xE5, 0x6C, 0x30, 0x9D, 0xE5, 0x0E, 0x02, 0xA0, 0xE3, 0x50, 0x09, 0x00, 0xEB - .byte 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x90, 0xA0, 0xE1, 0xC8, 0x04, 0x1F, 0xE5, 0xC8, 0x14, 0x1F, 0xE5 - .byte 0x68, 0x20, 0x9D, 0xE5, 0x6C, 0x30, 0x9D, 0xE5, 0x49, 0x09, 0x00, 0xEB, 0x0B, 0x20, 0xA0, 0xE1 - .byte 0x0A, 0x30, 0xA0, 0xE1, 0x00, 0xB0, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1, 0xE4, 0x04, 0x1F, 0xE5 - .byte 0xF4, 0x14, 0x1F, 0xE5, 0x42, 0x09, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 - .byte 0x0B, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0xE1, 0x07, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1 - .byte 0x01, 0x30, 0xA0, 0xE1, 0x08, 0x05, 0x1F, 0xE5, 0x88, 0x11, 0x80, 0xE0, 0x88, 0x01, 0x90, 0xE7 - .byte 0x04, 0x10, 0x91, 0xE5, 0xDA, 0x07, 0x00, 0xEB, 0x00, 0xB0, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1 - .byte 0x06, 0x00, 0xA0, 0xE1, 0x13, 0x09, 0x00, 0xEB, 0x50, 0x00, 0x8D, 0xE5, 0x54, 0x10, 0x8D, 0xE5 - .byte 0x04, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x0B, 0x20, 0xA0, 0xE1, 0x0A, 0x30, 0xA0, 0xE1 - .byte 0xCF, 0x07, 0x00, 0xEB, 0x44, 0x25, 0x1F, 0xE5, 0x88, 0x31, 0x82, 0xE0, 0x88, 0x21, 0x92, 0xE7 - .byte 0x04, 0x30, 0x93, 0xE5, 0xCA, 0x07, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 - .byte 0x50, 0x00, 0x9D, 0xE5, 0x54, 0x10, 0x9D, 0xE5, 0xC5, 0x07, 0x00, 0xEB, 0x5C, 0x10, 0x8D, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x58, 0x00, 0x8D, 0xE5, 0x50, 0x20, 0x9D, 0xE5, 0x54, 0x30, 0x9D, 0xE5 - .byte 0x61, 0x0A, 0x00, 0xEB, 0x84, 0x25, 0x1F, 0xE5, 0x88, 0x31, 0x82, 0xE0, 0x88, 0x21, 0x92, 0xE7 - .byte 0x04, 0x30, 0x93, 0xE5, 0x5C, 0x0A, 0x00, 0xEB, 0x04, 0x20, 0xA0, 0xE1, 0x09, 0x30, 0xA0, 0xE1 - .byte 0x59, 0x0A, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x0B, 0x00, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 - .byte 0x0A, 0x10, 0xA0, 0xE1, 0x54, 0x0A, 0x00, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x80, 0xA0, 0xE1 -_020E7C80: - sub r0, r5, #0x1 - ldr r1, [sp, #0xb4] - orrs r0, r7, r0 - ldr r5, _020E7638 ; =0x3FF00000 - mov r2, #0x0 - ldr r0, [sp, #0xb0] - mov r3, r1 - mov r6, #0x0 - subeq r5, r5, #0x80000000 - str r1, [sp, #0x64] - str r2, [sp, #0x60] - bl _dsub - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x58] - ldr r1, [sp, #0x5c] - bl _dmul - mov r7, r0 - mov r9, r1 - ldr r0, [sp, #0xb0] - ldr r1, [sp, #0xb4] - mov r2, r4 - mov r3, r8 - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r7 - mov r1, r9 - bl _dadd - mov r7, r0 - mov r8, r1 - ldr r0, [sp, #0x60] - ldr r1, [sp, #0x64] - ldr r2, [sp, #0x58] - ldr r3, [sp, #0x5c] - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r7 - mov r1, r8 - str r2, [sp, #0x68] - str r3, [sp, #0x6c] - bl _dadd - mov r9, r1 - ldr r2, _020E76CC ; =0x40900000 - str r0, [sp, #0x78] - str r9, [sp, #0x7c] - cmp r9, r2 - blt _020E7E0C - add r1, r9, #0xf700000 - add r1, r1, #0xb0000000 - orrs r0, r1, r0 - beq _020E7D8C - ldr r0, _020E76D0 ; =0x8800759C - ldr r1, _020E76D4 ; =0x7E37E43C - mov r2, r6 - mov r3, r5 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76D0 ; =0x8800759C - ldr r1, _020E76D4 ; =0x7E37E43C - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7D8C: - ldr r0, _020E7670 ; =0x652B82FE - ldr r1, _020E76D8 ; =0x3C971547 - mov r2, r7 - mov r3, r8 - bl _dadd - mov r4, r0 - mov r10, r1 - ldr r0, [sp, #0x78] - ldr r2, [sp, #0x68] - ldr r3, [sp, #0x6c] - mov r1, r9 - bl _dsub - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dgr - bls _020E7EC0 - ldr r0, _020E76D0 ; =0x8800759C - ldr r1, _020E76D4 ; =0x7E37E43C - mov r2, r6 - mov r3, r5 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76D0 ; =0x8800759C - ldr r1, _020E76D4 ; =0x7E37E43C - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7E0C: - bic r3, r9, #0x80000000 - add r2, r2, #0xcc00 - cmp r3, r2 - blt _020E7EC0 - ldr r2, _020E76DC ; =0x3F6F3400 - add r2, r9, r2 - orrs r2, r2, r0 - beq _020E7E64 - ldr r0, _020E76E0 ; =0xC2F8F359 - ldr r1, _020E76E4 ; =0x01A56E1F - mov r2, r6 - mov r3, r5 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76E0 ; =0xC2F8F359 - ldr r1, _020E76E4 ; =0x01A56E1F - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7E64: - ldr r2, [sp, #0x68] - ldr r3, [sp, #0x6c] - bl _dsub - mov r2, r0 - mov r3, r1 - mov r0, r7 - mov r1, r8 - bl _dleq - bhi _020E7EC0 - ldr r0, _020E76E0 ; =0xC2F8F359 - ldr r1, _020E76E4 ; =0x01A56E1F - mov r2, r6 - mov r3, r5 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76E0 ; =0xC2F8F359 - ldr r1, _020E76E4 ; =0x01A56E1F - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7EC0: - ldr r0, _020E7644 ; =0xFFFFFC01 - bic r3, r9, #0x80000000 - ldr r1, _020E7648 ; =0x3FE00000 - add r2, r0, r3, asr #0x14 - cmp r3, r1 - mov r4, #0x0 - ble _020E7F3C - mov r1, #0x100000 - add r2, r2, #0x1 - add r2, r9, r1, asr r2 - bic r3, r2, #0x80000000 - add r0, r0, r3, asr #0x14 - sub r3, r1, #0x1 - mvn r3, r3, asr r0 - sub r1, r1, #0x1 - and r1, r2, r1 - and r2, r2, r3 - str r2, [sp, #0x54] - str r4, [sp, #0x50] - orr r1, r1, #0x100000 - rsb r0, r0, #0x14 - mov r4, r1, asr r0 - cmp r9, #0x0 - ldr r0, [sp, #0x68] - ldr r1, [sp, #0x6c] - ldr r2, [sp, #0x50] - ldr r3, [sp, #0x54] - rsblt r4, r4, #0x0 - bl _dsub - str r0, [sp, #0x68] - str r1, [sp, #0x6c] -_020E7F3C: - ldr r2, [sp, #0x68] - ldr r3, [sp, #0x6c] - mov r0, r7 - mov r1, r8 - bl _dadd - mov r3, r1 - mov r0, #0x0 - ldr r1, _020E76E8 ; =0x3FE62E43 - mov r2, r0 - str r3, [sp, #0x54] - str r0, [sp, #0x50] - bl _dmul - mov r9, r0 - mov r10, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - ldr r2, [sp, #0x68] - ldr r3, [sp, #0x6c] - bl _dsub - mov r2, r0 - mov r0, r7 - mov r3, r1 - mov r1, r8 - bl _dsub - mov r2, r0 - mov r3, r1 - ldr r0, _020E76EC ; =0xFEFA39EF - ldr r1, _020E76F0 ; =0x3FE62E42 - bl _dmul - mov r7, r0 - mov r8, r1 - ldr r0, _020E76F4 ; =0x0CA86C39 - ldr r1, _020E76F8 ; =0xBE205C61 - ldr r2, [sp, #0x50] - ldr r3, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r0, r7 - mov r3, r1 - mov r1, r8 - bl _dadd - mov r7, r0 - mov r8, r1 - mov r0, r9 - mov r1, r10 - mov r2, r7 - mov r3, r8 - bl _dadd - mov r2, r9 - mov r3, r10 - str r0, [sp, #0x78] - str r1, [sp, #0x7c] - bl _dsub - mov r2, r0 - mov r3, r1 - mov r0, r7 - mov r1, r8 - bl _dsub - mov r8, r0 - mov r9, r1 - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - mov r2, r0 - mov r3, r1 - bl _dmul - mov r2, r0 - str r2, [sp, #0x50] - mov r3, r1 - str r3, [sp, #0x54] - ldr r0, _020E76FC ; =0x72BEA4D0 - ldr r1, _020E7700 ; =0x3E663769 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7704 ; =0xC5D26BF1 - ldr r1, _020E7708 ; =0xBEBBBD41 - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E770C ; =0xAF25DE2C - ldr r1, _020E7710 ; =0x3F11566A - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7714 ; =0x16BEBD93 - ldr r1, _020E7718 ; =0xBF66C16C - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E771C ; =0x5555553E - ldr r1, _020E7720 ; =0x3FC55555 - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - bl _dsub - mov r2, r0 - str r2, [sp, #0x58] - mov r3, r1 - str r3, [sp, #0x5c] - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - bl _dmul - mov r7, r0 - mov r10, r1 - ldr r0, [sp, #0x58] - ldr r1, [sp, #0x5c] - mov r2, #0x0 - mov r3, #0x40000000 - bl _dsub - mov r2, r0 - mov r0, r7 - mov r3, r1 - mov r1, r10 - bl _ddiv - mov r7, r0 - mov r10, r1 - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - mov r2, r8 - mov r3, r9 - bl _dmul - mov r2, r0 - mov r0, r8 - mov r3, r1 - mov r1, r9 - bl _dadd - mov r2, r0 - mov r0, r7 - mov r3, r1 - mov r1, r10 - bl _dsub - ldr r2, [sp, #0x78] - ldr r3, [sp, #0x7c] - bl _dsub - mov r3, r1 - mov r2, r0 - ldr r1, _020E7638 ; =0x3FF00000 - mov r0, #0x0 - bl _dsub - add r3, r1, r4, lsl #0x14 - mov r2, r3, asr #0x14 - str r0, [sp, #0x78] - cmp r2, #0x0 - str r1, [sp, #0x7c] - addgt r0, sp, #0x78 - strgt r3, [r0, #0x4] - bgt _020E81F0 - mov r2, r4 - bl scalbn - str r0, [sp, #0x78] - str r1, [sp, #0x7c] -_020E81F0: - ldr r2, [sp, #0x78] - ldr r3, [sp, #0x7c] - mov r0, r6 - mov r1, r5 - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - - arm_func_start copysign -copysign: ; 0x020E8214 - stmdb sp!, {r0-r3} - ldr r1, [sp, #0x4] - ldr r0, [sp, #0xc] - bic r1, r1, #0x80000000 - and r0, r0, #0x80000000 - orr r1, r1, r0 - ldr r0, [sp, #0x0] - str r1, [sp, #0x4] - add sp, sp, #0x10 - bx lr - - arm_func_start fabs -fabs: ; 0x020E823C - stmdb sp!, {r0-r3} - add r2, sp, #0x0 - ldr r1, [r2, #0x4] - ldr r0, [sp, #0x0] - bic r1, r1, #0x80000000 - str r1, [r2, #0x4] - add sp, sp, #0x10 - bx lr - - arm_func_start frexp -frexp: ; 0x020E825C - stmdb sp!, {r0-r3} - stmdb sp!, {r4,lr} - ldr r1, [sp, #0xc] - ldr r0, _020E8308 ; =0x7FF00000 - mov r4, r2 - bic r3, r1, #0x80000000 - mov r2, #0x0 - str r2, [r4, #0x0] - cmp r3, r0 - ldr r0, [sp, #0x8] - bge _020E8290 - orrs r0, r3, r0 - bne _020E82A4 -_020E8290: - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E82A4: - cmp r3, #0x100000 - bge _020E82D0 - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - ldr r3, _020E830C ; =0x43500000 - bl _dmul - mvn r2, #0x35 - str r0, [sp, #0x8] - str r1, [sp, #0xc] - str r2, [r4, #0x0] - bic r3, r1, #0x80000000 -_020E82D0: - ldr r2, _020E8310 ; =0x800FFFFF - ldr r0, _020E8314 ; =0xFFFFFC02 - and r1, r1, r2 - orr r1, r1, #0xfe00000 - orr r1, r1, #0x30000000 - ldr r2, [r4, #0x0] - add r0, r0, r3, asr #0x14 - add r2, r2, r0 - ldr r0, [sp, #0x8] - str r2, [r4, #0x0] - str r1, [sp, #0xc] - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E8308: .word 0x7FF00000 -_020E830C: .word 0x43500000 -_020E8310: .word 0x800FFFFF -_020E8314: .word 0xFFFFFC02 - - arm_func_start ldexp -ldexp: ; 0x020E8318 - stmdb sp!, {r0-r3} - stmdb sp!, {r4,lr} - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - mov r4, r2 - bl __fpclassifyf - cmp r0, #0x2 - ble _020E8350 - mov r0, #0x0 - ldr r2, [sp, #0x8] - ldr r3, [sp, #0xc] - mov r1, r0 - bl _deq - bne _020E8364 -_020E8350: - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E8364: - ldr r3, [sp, #0xc] - ldr r0, _020E8538 ; =0x7FF00000 - ldr r1, [sp, #0x8] - and r0, r3, r0 - movs r12, r0, asr #0x14 - bne _020E83F0 - bic r0, r3, #0x80000000 - orrs r0, r1, r0 - ldreq r0, [sp, #0x8] - ldreq r1, [sp, #0xc] - ldmeqia sp!, {r4,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - ldr r3, _020E853C ; =0x43500000 - mov r2, #0x0 - bl _dmul - mov r3, r1 - ldr r1, _020E8538 ; =0x7FF00000 - ldr ip, _020E8540 ; =0xFFFF3CB0 - and r1, r3, r1 - mov r2, r0 - mov r0, r1, asr #0x14 - str r2, [sp, #0x8] - str r3, [sp, #0xc] - cmp r4, r12 - sub r12, r0, #0x36 - bge _020E83F0 - ldr r0, _020E8544 ; =0xC2F8F359 - ldr r1, _020E8548 ; =0x01A56E1F - bl _dmul - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E83F0: - ldr r0, _020E854C ; =0x000007FF - cmp r12, r0 - bne _020E841C - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - mov r2, r0 - mov r3, r1 - bl _dadd - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E841C: - add r2, r12, r4 - sub r0, r0, #0x1 - cmp r2, r0 - ble _020E8460 - ldr r2, [sp, #0x8] - ldr r3, [sp, #0xc] - ldr r0, _020E8550 ; =0x8800759C - ldr r1, _020E8554 ; =0x7E37E43C - bl copysign - mov r2, r0 - mov r3, r1 - ldr r0, _020E8550 ; =0x8800759C - ldr r1, _020E8554 ; =0x7E37E43C - bl _dmul - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E8460: - cmp r2, #0x0 - ble _020E8488 - ldr r1, _020E8558 ; =0x800FFFFF - ldr r0, [sp, #0x8] - and r1, r3, r1 - orr r1, r1, r2, lsl #0x14 - str r1, [sp, #0xc] - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E8488: - mvn r0, #0x35 - cmp r2, r0 - bgt _020E8508 - ldr r0, _020E855C ; =0x0000C350 - cmp r4, r0 - ble _020E84D4 - ldr r2, [sp, #0x8] - ldr r3, [sp, #0xc] - ldr r0, _020E8550 ; =0x8800759C - ldr r1, _020E8554 ; =0x7E37E43C - bl copysign - mov r2, r0 - mov r3, r1 - ldr r0, _020E8550 ; =0x8800759C - ldr r1, _020E8554 ; =0x7E37E43C - bl _dmul - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E84D4: - ldr r2, [sp, #0x8] - ldr r3, [sp, #0xc] - ldr r0, _020E8544 ; =0xC2F8F359 - ldr r1, _020E8548 ; =0x01A56E1F - bl copysign - mov r2, r0 - mov r3, r1 - ldr r0, _020E8544 ; =0xC2F8F359 - ldr r1, _020E8548 ; =0x01A56E1F - bl _dmul - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E8508: - ldr r0, _020E8558 ; =0x800FFFFF - add r1, r2, #0x36 - and r0, r3, r0 - orr r3, r0, r1, lsl #0x14 - ldr r2, [sp, #0x8] - ldr r1, _020E8560 ; =0x3C900000 - mov r0, #0x0 - str r3, [sp, #0xc] - bl _dmul - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E8538: .word 0x7FF00000 -_020E853C: .word 0x43500000 -_020E8540: .word 0xFFFF3CB0 -_020E8544: .word 0xC2F8F359 -_020E8548: .word 0x01A56E1F -_020E854C: .word 0x000007FF -_020E8550: .word 0x8800759C -_020E8554: .word 0x7E37E43C -_020E8558: .word 0x800FFFFF -_020E855C: .word 0x0000C350 -_020E8560: .word 0x3C900000 - - arm_func_start pow -pow: ; 0x020E8564 - ldr ip, _020E856C ; =__ieee754_pow - bx r12 - .balign 4 -_020E856C: .word __ieee754_pow - - arm_func_start __must_round -__must_round: ; 0x020E8570 - add r3, r0, #0x5 - ldrb r2, [r3, r1] - add r12, r3, r1 - cmp r2, #0x5 - movhi r0, #0x1 - bxhi lr - mvncc r0, #0x0 - bxcc lr - ldrb r2, [r0, #0x4] - add r12, r12, #0x1 - add r3, r3, r2 - cmp r12, r3 - bhs _020E85C0 -_020E85A4: - ldrb r2, [r12, #0x0] - cmp r2, #0x0 - movne r0, #0x1 - bxne lr - add r12, r12, #0x1 - cmp r12, r3 - blo _020E85A4 -_020E85C0: - sub r1, r1, #0x1 - add r0, r0, r1 - ldrb r0, [r0, #0x5] - tst r0, #0x1 - movne r0, #0x1 - mvneq r0, #0x0 - bx lr - - arm_func_start __dorounddecup -__dorounddecup: ; 0x020E85DC - add r3, r0, #0x5 - add r1, r3, r1 - sub r12, r1, #0x1 - mov r1, #0x0 -_020E85EC: - ldrb r2, [r12, #0x0] - cmp r2, #0x9 - addcc r0, r2, #0x1 - strccb r0, [r12, #0x0] - bxcc lr - cmp r12, r3 - bne _020E8620 - mov r1, #0x1 - strb r1, [r12, #0x0] - ldrsh r1, [r0, #0x2] - add r1, r1, #0x1 - strh r1, [r0, #0x2] - bx lr -_020E8620: - strb r1, [r12], #-0x1 - b _020E85EC -_020E8628: - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start __rounddec -__rounddec: ; 0x020E862C - stmdb sp!, {r3-r5,lr} - mov r4, r1 - mov r5, r0 - cmp r4, #0x0 - ldmleia sp!, {r3-r5,pc} -_020E8640: - .byte 0x04, 0x20, 0xD5, 0xE5, 0x02, 0x00, 0x54, 0xE1, 0x38, 0x80, 0xBD, 0xA8, 0xC7, 0xFF, 0xFF, 0xEB - .byte 0x04, 0x40, 0xC5, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x38, 0x80, 0xBD, 0xB8, 0x05, 0x00, 0xA0, 0xE1 - .byte 0x04, 0x10, 0xA0, 0xE1, 0xDC, 0xFF, 0xFF, 0xEB, 0x38, 0x80, 0xBD, 0xE8 - - arm_func_start __ull2dec -__ull2dec: ; 0x020E866C - stmdb sp!, {r3-r11,lr} - mov r10, r0 - mov r0, #0x0 - mov r8, r2 - strb r0, [r10, #0x0] - mov r9, r1 - cmp r8, #0x0 - strb r0, [r10, #0x4] - cmpeq r9, #0x0 - beq _020E86F8 - mov r6, #0xa - mov r11, r0 - mov r5, r0 - mov r4, r0 -_020E86A4: - ldrb r1, [r10, #0x4] - mov r0, r9 - mov r2, r6 - add r3, r1, #0x1 - mov r7, r1 - strb r3, [r10, #0x4] - mov r1, r8 - mov r3, r11 - bl _ull_mod - add r1, r10, r7 - strb r0, [r1, #0x5] - mov r0, r9 - mov r1, r8 - mov r2, #0xa - mov r3, #0x0 - bl _ll_udiv - mov r8, r1 - mov r9, r0 - cmp r8, r5 - cmpeq r9, r4 - bne _020E86A4 -_020E86F8: - ldrb r0, [r10, #0x4] - add r2, r10, #0x5 - add r0, r2, r0 - sub r3, r0, #0x1 - cmp r2, r3 - bhs _020E8728 -_020E8710: - ldrb r0, [r3, #0x0] - ldrb r1, [r2, #0x0] - strb r0, [r2], #0x1 - strb r1, [r3], #-0x1 - cmp r2, r3 - blo _020E8710 -_020E8728: - ldrb r0, [r10, #0x4] - sub r0, r0, #0x1 - strh r0, [r10, #0x2] - ldmia sp!, {r3-r11,pc} - - arm_func_start __timesdec -__timesdec: ; 0x020E8738 - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x40 - ldrb r6, [r1, #0x4] - ldrb r5, [r2, #0x4] - mov r4, #0x0 - add r3, sp, #0x0 - add r5, r6, r5 - sub r5, r5, #0x1 - add r3, r3, r5 - add r6, r3, #0x1 - mov r7, r6 - strb r4, [r0, #0x0] - cmp r5, #0x0 - ble _020E8800 - add lr, r1, #0x5 - add r11, r2, #0x5 -_020E8778: - ldrb r3, [r2, #0x4] - sub r10, r3, #0x1 - sub r3, r5, r10 - subs r9, r3, #0x1 - ldrb r3, [r1, #0x4] - movmi r9, #0x0 - submi r10, r5, #0x1 - add r8, r10, #0x1 - sub r3, r3, r9 - cmp r8, r3 - movgt r8, r3 - add r10, r11, r10 - add r9, lr, r9 - cmp r8, #0x0 - ble _020E87CC -_020E87B4: - ldrb r12, [r9], #0x1 - ldrb r3, [r10], #-0x1 - sub r8, r8, #0x1 - cmp r8, #0x0 - mla r4, r12, r3, r4 - bgt _020E87B4 -_020E87CC: - ldr r3, _020E88B8 ; =0xCCCCCCCD - sub r5, r5, #0x1 - umull r8, r9, r4, r3 - mov r9, r9, lsr #0x3 - cmp r5, #0x0 - mov r10, #0xa - umull r8, r9, r10, r9 - sub r9, r4, r8 - strb r9, [r6, #-0x1]! - mov r8, r4 - umull r3, r4, r8, r3 - mov r4, r4, lsr #0x3 - bgt _020E8778 -_020E8800: - ldrsh r3, [r1, #0x2] - ldrsh r1, [r2, #0x2] - cmp r4, #0x0 - add r1, r3, r1 - strh r1, [r0, #0x2] - beq _020E8828 - strb r4, [r6, #-0x1]! - ldrsh r1, [r0, #0x2] - add r1, r1, #0x1 - strh r1, [r0, #0x2] -_020E8828: - mov r3, #0x0 - b _020E8840 -_020E8830: - ldrb r2, [r6], #0x1 - add r1, r0, r3 - add r3, r3, #0x1 - strb r2, [r1, #0x5] -_020E8840: - cmp r3, #0x20 - bge _020E8850 - cmp r6, r7 - blo _020E8830 -_020E8850: - cmp r6, r7 - addcs sp, sp, #0x40 - strb r3, [r0, #0x4] - ldmcsia sp!, {r3-r11,pc} -_020E8860: - .byte 0x00, 0x10, 0xD6, 0xE5, 0x05, 0x00, 0x51, 0xE3, 0x40, 0xD0, 0x8D, 0x32, 0xF8, 0x8F, 0xBD, 0x38 - .byte 0x0C, 0x00, 0x00, 0x1A, 0x01, 0x20, 0x86, 0xE2, 0x07, 0x00, 0x52, 0xE1, 0x05, 0x00, 0x00, 0x2A - .byte 0x00, 0x10, 0xD2, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x01, 0x20, 0x82, 0xE2 - .byte 0x07, 0x00, 0x52, 0xE1, 0xF9, 0xFF, 0xFF, 0x3A, 0x01, 0x10, 0x56, 0xE5, 0x01, 0x00, 0x11, 0xE3 - .byte 0x40, 0xD0, 0x8D, 0x02, 0xF8, 0x8F, 0xBD, 0x08, 0x04, 0x10, 0xD0, 0xE5, 0x4A, 0xFF, 0xFF, 0xEB - .byte 0x40, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 -_020E88B8: .word 0xCCCCCCCD - - arm_func_start __str2dec -__str2dec: ; 0x020E88BC - stmdb sp!, {r3,lr} - strh r2, [r0, #0x2] - mov r12, #0x0 - strb r12, [r0, #0x0] - b _020E88E4 -_020E88D0: - ldrsb r3, [r1], #0x1 - add r2, r0, r12 - add r12, r12, #0x1 - sub r3, r3, #0x30 - strb r3, [r2, #0x5] -_020E88E4: - cmp r12, #0x20 - bge _020E88F8 - ldrsb r2, [r1, #0x0] - cmp r2, #0x0 - bne _020E88D0 -_020E88F8: - strb r12, [r0, #0x4] - ldrsb r2, [r1, #0x0] - cmp r2, #0x0 - ldmeqia sp!, {r3,pc} -_020E8908: - .byte 0x05, 0x00, 0x52, 0xE3, 0x08, 0x80, 0xBD, 0xB8 - .byte 0x0D, 0x00, 0x00, 0xCA, 0xD1, 0x20, 0xD1, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x00, 0x00, 0x52, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x30, 0x00, 0x52, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0xD1, 0x20, 0xF1, 0xE1 - .byte 0x00, 0x00, 0x52, 0xE3, 0xFA, 0xFF, 0xFF, 0x1A, 0x01, 0x10, 0x4C, 0xE2, 0x01, 0x10, 0x80, 0xE0 - .byte 0x05, 0x10, 0xD1, 0xE5, 0x01, 0x00, 0x11, 0xE3, 0x08, 0x80, 0xBD, 0x08, 0x04, 0x10, 0xD0, 0xE5 - .byte 0x21, 0xFF, 0xFF, 0xEB, 0x08, 0x80, 0xBD, 0xE8 - - arm_func_start __two_exp -__two_exp: ; 0x020E8958 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4c - mov r4, r1 - mvn r2, #0x34 - mov r5, r0 - cmp r4, r2 - bgt _020E8988 - bge _020E8A54 - sub r0, r2, #0xb - cmp r4, r0 - beq _020E8A3C - b _020E8BE4 -_020E8988: - add r1, r4, #0x20 - cmp r1, #0x28 - addls pc, pc, r1, lsl #0x2 - b _020E8BE4 -_020E8998: - .byte 0x32, 0x00, 0x00, 0xEA, 0x90, 0x00, 0x00, 0xEA - .byte 0x8F, 0x00, 0x00, 0xEA, 0x8E, 0x00, 0x00, 0xEA, 0x8D, 0x00, 0x00, 0xEA, 0x8C, 0x00, 0x00, 0xEA - .byte 0x8B, 0x00, 0x00, 0xEA, 0x8A, 0x00, 0x00, 0xEA, 0x89, 0x00, 0x00, 0xEA, 0x88, 0x00, 0x00, 0xEA - .byte 0x87, 0x00, 0x00, 0xEA, 0x86, 0x00, 0x00, 0xEA, 0x85, 0x00, 0x00, 0xEA, 0x84, 0x00, 0x00, 0xEA - .byte 0x83, 0x00, 0x00, 0xEA, 0x82, 0x00, 0x00, 0xEA, 0x27, 0x00, 0x00, 0xEA, 0x80, 0x00, 0x00, 0xEA - .byte 0x7F, 0x00, 0x00, 0xEA, 0x7E, 0x00, 0x00, 0xEA, 0x7D, 0x00, 0x00, 0xEA, 0x7C, 0x00, 0x00, 0xEA - .byte 0x7B, 0x00, 0x00, 0xEA, 0x7A, 0x00, 0x00, 0xEA, 0x24, 0x00, 0x00, 0xEA, 0x28, 0x00, 0x00, 0xEA - .byte 0x2C, 0x00, 0x00, 0xEA, 0x30, 0x00, 0x00, 0xEA, 0x34, 0x00, 0x00, 0xEA, 0x38, 0x00, 0x00, 0xEA - .byte 0x3C, 0x00, 0x00, 0xEA, 0x40, 0x00, 0x00, 0xEA, 0x44, 0x00, 0x00, 0xEA, 0x48, 0x00, 0x00, 0xEA - .byte 0x4C, 0x00, 0x00, 0xEA, 0x50, 0x00, 0x00, 0xEA, 0x54, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x00, 0xEA - .byte 0x5C, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, 0xEA, 0x64, 0x00, 0x00, 0xEA -_020E8A3C: - ldr r1, _020E8C88 ; =0x02106E88 - mov r0, r5 - mvn r2, #0x13 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8A54: - ldr r1, _020E8C8C ; =0x02106EB8 - add r2, r2, #0x25 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8A68: - .byte 0x20, 0x12, 0x9F, 0xE5, 0x2B, 0x20, 0x82, 0xE2 - .byte 0x91, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x10, 0x12, 0x9F, 0xE5 - .byte 0x30, 0x20, 0x82, 0xE2, 0x8C, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 - .byte 0x00, 0x12, 0x9F, 0xE5, 0x32, 0x20, 0x82, 0xE2, 0x87, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x80, 0xBD, 0xE8, 0xF0, 0x11, 0x9F, 0xE5, 0x32, 0x20, 0x82, 0xE2, 0x82, 0xFF, 0xFF, 0xEB - .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0xE0, 0x11, 0x9F, 0xE5, 0x33, 0x20, 0x82, 0xE2 - .byte 0x7D, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0xD0, 0x11, 0x9F, 0xE5 - .byte 0x33, 0x20, 0x82, 0xE2, 0x78, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 - .byte 0xC0, 0x11, 0x9F, 0xE5, 0x33, 0x20, 0x82, 0xE2, 0x73, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x80, 0xBD, 0xE8, 0xB0, 0x11, 0x9F, 0xE5, 0x34, 0x20, 0x82, 0xE2, 0x6E, 0xFF, 0xFF, 0xEB - .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0xA0, 0x11, 0x9F, 0xE5, 0x34, 0x20, 0x82, 0xE2 - .byte 0x69, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x90, 0x11, 0x9F, 0xE5 - .byte 0x34, 0x20, 0x82, 0xE2, 0x64, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 - .byte 0x80, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x5F, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x80, 0xBD, 0xE8, 0x70, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x5A, 0xFF, 0xFF, 0xEB - .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x60, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3 - .byte 0x55, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x50, 0x11, 0x9F, 0xE5 - .byte 0x00, 0x20, 0xA0, 0xE3, 0x50, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 - .byte 0x40, 0x11, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x4B, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x80, 0xBD, 0xE8, 0x30, 0x11, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x46, 0xFF, 0xFF, 0xEB - .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x20, 0x11, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x41, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x10, 0x11, 0x9F, 0xE5 - .byte 0x02, 0x20, 0xA0, 0xE3, 0x3C, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 - .byte 0x00, 0x11, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3, 0x37, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x80, 0xBD, 0xE8 -_020E8BE4: - and r0, r4, #0x80000000 - add r1, r4, r0, lsr #0x1f - add r0, sp, #0x26 - mov r1, r1, asr #0x1 - bl __two_exp - add r1, sp, #0x26 - mov r0, r5 - mov r2, r1 - bl __timesdec - tst r4, #0x1 - addeq sp, sp, #0x4c - ldmeqia sp!, {r4-r5,pc} -_020E8C14: - .byte 0x00, 0x30, 0x8D, 0xE2, 0x05, 0xC0, 0xA0, 0xE1, 0x09, 0x20, 0xA0, 0xE3 - .byte 0xB0, 0x10, 0xDC, 0xE1, 0xB2, 0x00, 0xDC, 0xE1, 0x04, 0xC0, 0x8C, 0xE2, 0x01, 0x20, 0x52, 0xE2 - .byte 0xB0, 0x10, 0xC3, 0xE1, 0xB2, 0x00, 0xC3, 0xE1, 0x04, 0x30, 0x83, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A - .byte 0xB0, 0x00, 0xDC, 0xE1, 0x00, 0x00, 0x54, 0xE3, 0xB0, 0x00, 0xC3, 0xE1, 0x26, 0x00, 0x8D, 0xE2 - .byte 0x03, 0x00, 0x00, 0xDA, 0x60, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x16, 0xFF, 0xFF, 0xEB - .byte 0x02, 0x00, 0x00, 0xEA, 0x48, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xE0, 0xE3, 0x12, 0xFF, 0xFF, 0xEB - .byte 0x00, 0x10, 0x8D, 0xE2, 0x26, 0x20, 0x8D, 0xE2, 0x05, 0x00, 0xA0, 0xE1, 0xAD, 0xFE, 0xFF, 0xEB - .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 -_020E8C88: .word 0x02106E88 -_020E8C8C: .word 0x02106EB8 -_020E8C90: - .byte 0xE0, 0x6E, 0x10, 0x02, 0xF8, 0x6E, 0x10, 0x02, 0x08, 0x6F, 0x10, 0x02, 0x10, 0x6F, 0x10, 0x02 - .byte 0x18, 0x6F, 0x10, 0x02, 0x20, 0x6F, 0x10, 0x02, 0x28, 0x6F, 0x10, 0x02, 0x2C, 0x6F, 0x10, 0x02 - .byte 0x30, 0x6F, 0x10, 0x02, 0x34, 0x6F, 0x10, 0x02, 0x38, 0x6F, 0x10, 0x02, 0x3C, 0x6F, 0x10, 0x02 - .byte 0x40, 0x6F, 0x10, 0x02, 0x44, 0x6F, 0x10, 0x02, 0x48, 0x6F, 0x10, 0x02, 0x4C, 0x6F, 0x10, 0x02 - .byte 0x50, 0x6F, 0x10, 0x02, 0x54, 0x6F, 0x10, 0x02, 0x58, 0x6F, 0x10, 0x02 - - arm_func_start __equals_dec -__equals_dec: ; 0x020E8CDC - stmdb sp!, {r4,lr} - ldrb r3, [r0, #0x5] - cmp r3, #0x0 - bne _020E8D00 - ldrb r0, [r1, #0x5] - cmp r0, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - ldmia sp!, {r4,pc} -_020E8D00: - ldrb r2, [r1, #0x5] - cmp r2, #0x0 - bne _020E8D1C - cmp r3, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - ldmia sp!, {r4,pc} -_020E8D1C: - ldrsh r3, [r0, #0x2] - ldrsh r2, [r1, #0x2] - cmp r3, r2 - bne _020E8DB4 - ldrb r4, [r0, #0x4] - ldrb r2, [r1, #0x4] - mov r12, #0x0 - mov lr, r4 - cmp r4, r2 - movgt lr, r2 - cmp lr, #0x0 - ble _020E8D74 - add r3, r0, r12 - add r2, r1, r12 - ldrb r3, [r3, #0x5] - ldrb r2, [r2, #0x5] - cmp r3, r2 - movne r0, #0x0 - ldmneia sp!, {r4,pc} -_020E8D68: - .byte 0x01, 0xC0, 0x8C, 0xE2, 0x0E, 0x00, 0x5C, 0xE1 - .byte 0xF5, 0xFF, 0xFF, 0xBA -_020E8D74: - cmp lr, r4 - moveq r0, r1 - ldrb r1, [r0, #0x4] - cmp r12, r1 - bge _020E8DAC - add r1, r0, r12 - ldrb r1, [r1, #0x5] - cmp r1, #0x0 - movne r0, #0x0 - ldmneia sp!, {r4,pc} -_020E8D9C: - .byte 0x04, 0x10, 0xD0, 0xE5 - .byte 0x01, 0xC0, 0x8C, 0xE2, 0x01, 0x00, 0x5C, 0xE1, 0xF6, 0xFF, 0xFF, 0xBA -_020E8DAC: - mov r0, #0x1 - ldmia sp!, {r4,pc} -_020E8DB4: - mov r0, #0x0 - ldmia sp!, {r4,pc} -__less_dec: - stmdb sp!, {r3-r5,lr} - ldrb r2, [r0, #0x5] - cmp r2, #0x0 - bne _020E8DE0 - ldrb r0, [r1, #0x5] - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - ldmia sp!, {r3-r5,pc} -_020E8DE0: - ldrb r2, [r1, #0x5] - cmp r2, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r3-r5,pc} -_020E8DF0: - .byte 0xF2, 0x30, 0xD1, 0xE1, 0xF2, 0x20, 0xD0, 0xE1, 0x03, 0x00, 0x52, 0xE1, 0x23, 0x00, 0x00, 0x1A - .byte 0x04, 0x50, 0xD0, 0xE5, 0x04, 0x40, 0xD1, 0xE5, 0x00, 0xC0, 0xA0, 0xE3, 0x05, 0xE0, 0xA0, 0xE1 - .byte 0x04, 0x00, 0x55, 0xE1, 0x04, 0xE0, 0xA0, 0xC1, 0x00, 0x00, 0x5E, 0xE3, 0x0C, 0x00, 0x00, 0xDA - .byte 0x0C, 0x30, 0x81, 0xE0, 0x0C, 0x20, 0x80, 0xE0, 0x05, 0x30, 0xD3, 0xE5, 0x05, 0x20, 0xD2, 0xE5 - .byte 0x03, 0x00, 0x52, 0xE1, 0x01, 0x00, 0xA0, 0x33, 0x38, 0x80, 0xBD, 0x38, 0x02, 0x00, 0x53, 0xE1 - .byte 0x00, 0x00, 0xA0, 0x33, 0x38, 0x80, 0xBD, 0x38, 0x01, 0xC0, 0x8C, 0xE2, 0x0E, 0x00, 0x5C, 0xE1 - .byte 0xF2, 0xFF, 0xFF, 0xBA, 0x05, 0x00, 0x5E, 0xE1, 0x0A, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x5C, 0xE1 - .byte 0x08, 0x00, 0x00, 0xAA, 0x0C, 0x00, 0x81, 0xE0, 0x05, 0x00, 0xD0, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0xA0, 0x13, 0x38, 0x80, 0xBD, 0x18, 0x04, 0x00, 0xD1, 0xE5, 0x01, 0xC0, 0x8C, 0xE2 - .byte 0x00, 0x00, 0x5C, 0xE1, 0xF6, 0xFF, 0xFF, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x38, 0x80, 0xBD, 0xE8 - .byte 0x01, 0x00, 0xA0, 0xB3, 0x00, 0x00, 0xA0, 0xA3, 0x38, 0x80, 0xBD, 0xE8 - - arm_func_start __minus_dec -__minus_dec: ; 0x020E8E9C - stmdb sp!, {r3-r7,lr} - mov r6, r0 - mov r5, #0x9 -_020E8EA8: - ldrh r4, [r1, #0x0] - ldrh r3, [r1, #0x2] - add r1, r1, #0x4 - subs r5, r5, #0x1 - strh r4, [r6, #0x0] - strh r3, [r6, #0x2] - add r6, r6, #0x4 - bne _020E8EA8 - ldrh r1, [r1, #0x0] - strh r1, [r6, #0x0] - ldrb r1, [r2, #0x5] - cmp r1, #0x0 - ldmeqia sp!, {r3-r7,pc} -_020E8EDC: - .byte 0x04, 0x70, 0xD0, 0xE5 - .byte 0x04, 0x30, 0xD2, 0xE5, 0xF2, 0x40, 0xD0, 0xE1, 0x07, 0x10, 0xA0, 0xE1, 0x03, 0x00, 0x57, 0xE1 - .byte 0x03, 0x10, 0xA0, 0xB1, 0xF2, 0x30, 0xD2, 0xE1, 0x03, 0x60, 0x44, 0xE0, 0x06, 0x10, 0x81, 0xE0 - .byte 0x20, 0x00, 0x51, 0xE3, 0x20, 0x10, 0xA0, 0xC3, 0x01, 0x00, 0x57, 0xE1, 0x08, 0x00, 0x00, 0xAA - .byte 0x00, 0x40, 0xA0, 0xE3, 0x04, 0x50, 0xD0, 0xE5, 0x07, 0x30, 0x80, 0xE0, 0x01, 0x50, 0x85, 0xE2 - .byte 0x04, 0x50, 0xC0, 0xE5, 0x05, 0x40, 0xC3, 0xE5, 0x04, 0x70, 0xD0, 0xE5, 0x01, 0x00, 0x57, 0xE1 - .byte 0xF7, 0xFF, 0xFF, 0xBA, 0x04, 0x40, 0xD2, 0xE5, 0x05, 0x30, 0x80, 0xE2, 0x01, 0xC0, 0x83, 0xE0 - .byte 0x06, 0x40, 0x84, 0xE0, 0x01, 0x00, 0x54, 0xE1, 0x04, 0xC0, 0x83, 0xB0, 0x03, 0x40, 0x4C, 0xE0 - .byte 0x05, 0x10, 0x82, 0xE2, 0x06, 0x40, 0x44, 0xE0, 0x04, 0xE0, 0x81, 0xE0, 0x0E, 0x40, 0xA0, 0xE1 - .byte 0x18, 0x00, 0x00, 0xEA, 0x01, 0x70, 0x7C, 0xE5, 0x01, 0x50, 0x7E, 0xE5, 0x05, 0x00, 0x57, 0xE1 - .byte 0x10, 0x00, 0x00, 0x2A, 0x01, 0x70, 0x5C, 0xE5, 0x01, 0x50, 0x4C, 0xE2, 0x00, 0x00, 0x57, 0xE3 - .byte 0x02, 0x00, 0x00, 0x1A, 0x01, 0x70, 0x75, 0xE5, 0x00, 0x00, 0x57, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A - .byte 0x0C, 0x00, 0x55, 0xE1, 0x07, 0x00, 0x00, 0x0A, 0x00, 0x70, 0xD5, 0xE5, 0x01, 0x70, 0x47, 0xE2 - .byte 0x00, 0x70, 0xC5, 0xE5, 0x01, 0x70, 0xF5, 0xE5, 0x0C, 0x00, 0x55, 0xE1, 0x0A, 0x70, 0x87, 0xE2 - .byte 0x00, 0x70, 0xC5, 0xE5, 0xF7, 0xFF, 0xFF, 0x1A, 0x00, 0x70, 0xDC, 0xE5, 0x00, 0x50, 0xDE, 0xE5 - .byte 0x05, 0x50, 0x47, 0xE0, 0x00, 0x50, 0xCC, 0xE5, 0x03, 0x00, 0x5C, 0xE1, 0x01, 0x00, 0x5E, 0x81 - .byte 0xE3, 0xFF, 0xFF, 0x8A, 0x04, 0x50, 0xD2, 0xE5, 0x01, 0xE0, 0x44, 0xE0, 0x05, 0x00, 0x5E, 0xE1 - .byte 0x2F, 0x00, 0x00, 0xAA, 0x00, 0x10, 0xD4, 0xE5, 0x00, 0x70, 0xA0, 0xE3, 0x05, 0x00, 0x51, 0xE3 - .byte 0x01, 0x70, 0xA0, 0x33, 0x11, 0x00, 0x00, 0x3A, 0x10, 0x00, 0x00, 0x1A, 0x05, 0x10, 0x82, 0xE2 - .byte 0x05, 0x20, 0x81, 0xE0, 0x01, 0x40, 0x84, 0xE2, 0x02, 0x00, 0x54, 0xE1, 0x05, 0x00, 0x00, 0x2A - .byte 0x00, 0x10, 0xD4, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x21, 0x00, 0x00, 0x1A, 0x01, 0x40, 0x84, 0xE2 - .byte 0x02, 0x00, 0x54, 0xE1, 0xF9, 0xFF, 0xFF, 0x3A, 0x0E, 0x10, 0x83, 0xE0, 0x06, 0x20, 0x81, 0xE0 - .byte 0x01, 0x10, 0x52, 0xE5, 0x01, 0xC0, 0x42, 0xE2, 0x01, 0x00, 0x11, 0xE3, 0x01, 0x70, 0xA0, 0x13 - .byte 0x00, 0x00, 0x57, 0xE3, 0x16, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xDC, 0xE5, 0x01, 0x00, 0x51, 0xE3 - .byte 0x10, 0x00, 0x00, 0x2A, 0x01, 0x10, 0x5C, 0xE5, 0x01, 0x20, 0x4C, 0xE2, 0x00, 0x00, 0x51, 0xE3 - .byte 0x02, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x72, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A - .byte 0x0C, 0x00, 0x52, 0xE1, 0x07, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xD2, 0xE5, 0x01, 0x10, 0x41, 0xE2 - .byte 0x00, 0x10, 0xC2, 0xE5, 0x01, 0x10, 0xF2, 0xE5, 0x0C, 0x00, 0x52, 0xE1, 0x0A, 0x10, 0x81, 0xE2 - .byte 0x00, 0x10, 0xC2, 0xE5, 0xF7, 0xFF, 0xFF, 0x1A, 0x00, 0x10, 0xDC, 0xE5, 0x01, 0x10, 0x41, 0xE2 - .byte 0x00, 0x10, 0xCC, 0xE5, 0x00, 0x10, 0xD3, 0xE5, 0x03, 0x50, 0xA0, 0xE1, 0x00, 0x00, 0x51, 0xE3 - .byte 0x02, 0x00, 0x00, 0x1A, 0x01, 0x10, 0xF5, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A - .byte 0x03, 0x00, 0x55, 0xE1, 0x0F, 0x00, 0x00, 0x9A, 0xF2, 0x10, 0xD0, 0xE1, 0x03, 0x20, 0x45, 0xE0 - .byte 0xFF, 0x40, 0x02, 0xE2, 0x04, 0x10, 0x41, 0xE0, 0xB2, 0x10, 0xC0, 0xE1, 0x04, 0x10, 0xD0, 0xE5 - .byte 0x01, 0x20, 0x83, 0xE0, 0x02, 0x00, 0x55, 0xE1, 0x03, 0x00, 0x00, 0x2A, 0x01, 0x10, 0xD5, 0xE4 - .byte 0x02, 0x00, 0x55, 0xE1, 0x01, 0x10, 0xC3, 0xE4, 0xFB, 0xFF, 0xFF, 0x3A, 0x04, 0x10, 0xD0, 0xE5 - .byte 0x04, 0x10, 0x41, 0xE0, 0x04, 0x10, 0xC0, 0xE5, 0x04, 0x10, 0xD0, 0xE5, 0x05, 0x20, 0x80, 0xE2 - .byte 0x01, 0x30, 0x82, 0xE0, 0x02, 0x00, 0x53, 0xE1, 0x04, 0x00, 0x00, 0x9A, 0x01, 0x10, 0x73, 0xE5 - .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x02, 0x00, 0x53, 0xE1, 0xFA, 0xFF, 0xFF, 0x8A - .byte 0x02, 0x10, 0x43, 0xE0, 0x01, 0x10, 0x81, 0xE2, 0x04, 0x10, 0xC0, 0xE5, 0xF8, 0x80, 0xBD, 0xE8 - - arm_func_start __num2dec_internal -__num2dec_internal: ; 0x020E9140 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x58 - mov r8, r1 - mov r6, r2 - mov r7, r0 - mov r0, r8 - mov r1, r6 - bl __signbitf -_020E9160: - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x10, 0xA0, 0x13, 0x00, 0x10, 0xA0, 0x03, 0x01, 0x4C, 0xA0, 0xE1 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x06, 0x30, 0xA0, 0xE1 - .byte 0x44, 0x5C, 0xA0, 0xE1, 0xFC, 0x06, 0x00, 0xEB, 0x07, 0x00, 0x00, 0x1A, 0x00, 0x50, 0xC7, 0xE5 - .byte 0x00, 0x10, 0xA0, 0xE3, 0xB2, 0x10, 0xC7, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x04, 0x00, 0xC7, 0xE5 - .byte 0x58, 0xD0, 0x8D, 0xE2, 0x05, 0x10, 0xC7, 0xE5, 0xF0, 0x81, 0xBD, 0xE8, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x06, 0x10, 0xA0, 0xE1, 0x1E, 0x02, 0x00, 0xEB, 0x02, 0x00, 0x50, 0xE3, 0x0D, 0x00, 0x00, 0xCA - .byte 0x00, 0x50, 0xC7, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC7, 0xE1, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xC7, 0xE5, 0x14, 0x02, 0x00, 0xEB - .byte 0x01, 0x00, 0x50, 0xE3, 0x4E, 0x00, 0xA0, 0x03, 0x49, 0x00, 0xA0, 0x13, 0x58, 0xD0, 0x8D, 0xE2 - .byte 0x05, 0x00, 0xC7, 0xE5, 0xF0, 0x81, 0xBD, 0xE8, 0x00, 0x00, 0x55, 0xE3, 0x06, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x06, 0x30, 0xA0, 0xE1 - .byte 0xED, 0x04, 0x00, 0xEB, 0x00, 0x80, 0xA0, 0xE1, 0x01, 0x60, 0xA0, 0xE1, 0x08, 0x20, 0x8D, 0xE2 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x0B, 0xFC, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1 - .byte 0x01, 0x60, 0xA0, 0xE1, 0x00, 0xC0, 0x84, 0xE3, 0x00, 0x20, 0x7C, 0xE2, 0x01, 0x36, 0x86, 0xE3 - .byte 0x00, 0x10, 0xE3, 0xE2, 0x00, 0x00, 0xA0, 0xE3, 0x01, 0x30, 0x03, 0xE0, 0x01, 0x10, 0x40, 0xE2 - .byte 0x02, 0xC0, 0x0C, 0xE0, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x00, 0x9C, 0xE0, 0x02, 0x10, 0xA3, 0xE0 - .byte 0x00, 0x40, 0x8D, 0xE5, 0x04, 0x60, 0x8D, 0xE5, 0xC7, 0x01, 0x00, 0xEB, 0x35, 0x80, 0x60, 0xE2 - .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x8D, 0xE2, 0x08, 0x10, 0x41, 0xE0, 0xB5, 0xFD, 0xFF, 0xEB - .byte 0x04, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x21, 0xFC, 0xFF, 0xEB - .byte 0x45, 0x03, 0x00, 0xEB, 0x01, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x32, 0x00, 0x8D, 0xE2 - .byte 0xF1, 0xFC, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1, 0x32, 0x10, 0x8D, 0xE2, 0x0C, 0x20, 0x8D, 0xE2 - .byte 0x20, 0xFD, 0xFF, 0xEB, 0x00, 0x50, 0xC7, 0xE5, 0x58, 0xD0, 0x8D, 0xE2, 0xF0, 0x81, 0xBD, 0xE8 - - arm_func_start __num2dec_internal2 -__num2dec_internal2: ; 0x020E92C0 - stmdb sp!, {r3-r5,lr} - mov r4, r3 - ldrsh r5, [r0, #0x2] - mov r0, r4 - bl __num2dec_internal - ldrb r0, [r4, #0x5] - cmp r0, #0x9 - ldmhiia sp!, {r3-r5,pc} -_020E92E0: - .byte 0x20, 0x00, 0x55, 0xE3, 0x20, 0x50, 0xA0, 0xC3, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1 - .byte 0xCD, 0xFC, 0xFF, 0xEB, 0x04, 0x00, 0xD4, 0xE5, 0x05, 0x00, 0x50, 0xE1, 0x08, 0x00, 0x00, 0xAA - .byte 0x00, 0x10, 0xA0, 0xE3, 0x04, 0x20, 0xD4, 0xE5, 0x00, 0x00, 0x84, 0xE0, 0x01, 0x20, 0x82, 0xE2 - .byte 0x04, 0x20, 0xC4, 0xE5, 0x05, 0x10, 0xC0, 0xE5, 0x04, 0x00, 0xD4, 0xE5, 0x05, 0x00, 0x50, 0xE1 - .byte 0xF7, 0xFF, 0xFF, 0xBA, 0xF2, 0x10, 0xD4, 0xE1, 0x01, 0x00, 0x40, 0xE2, 0x00, 0x20, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x41, 0xE0, 0xB2, 0x00, 0xC4, 0xE1, 0x04, 0x00, 0xD4, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x38, 0x80, 0xBD, 0xD8, 0x02, 0x10, 0x84, 0xE0, 0x05, 0x00, 0xD1, 0xE5, 0x01, 0x20, 0x82, 0xE2 - .byte 0x30, 0x00, 0x80, 0xE2, 0x05, 0x00, 0xC1, 0xE5, 0x04, 0x00, 0xD4, 0xE5, 0x00, 0x00, 0x52, 0xE1 - .byte 0xF7, 0xFF, 0xFF, 0xBA, 0x38, 0x80, 0xBD, 0xE8 - - arm_func_start __dec2num -__dec2num: ; 0x020E9368 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xfc - mov r4, r0 - ldrb r0, [r4, #0x4] - cmp r0, #0x0 - bne _020E93A8 - ldrsb r0, [r4, #0x0] - mov r2, #0x0 - cmp r0, #0x0 - ldreq r3, _020E996C ; =0x3FF00000 - mov r0, #0x0 - ldrne r3, _020E9970 ; =0xBFF00000 - mov r1, r0 - bl copysign - add sp, sp, #0xfc - ldmia sp!, {r4-r11,pc} -_020E93A8: - ldrb r0, [r4, #0x5] - cmp r0, #0x30 - beq _020E93C8 - cmp r0, #0x49 - beq _020E93F0 - cmp r0, #0x4e - beq _020E9424 - b _020E946C -_020E93C8: - ldrsb r0, [r4, #0x0] - mov r2, #0x0 - cmp r0, #0x0 - ldreq r3, _020E996C ; =0x3FF00000 - mov r0, #0x0 - ldrne r3, _020E9970 ; =0xBFF00000 - mov r1, r0 - bl copysign - add sp, sp, #0xfc - ldmia sp!, {r4-r11,pc} -_020E93F0: - ldrsb r0, [r4, #0x0] - mov r5, #0x0 - cmp r0, #0x0 - ldreq r4, _020E996C ; =0x3FF00000 - ldr r0, _020E9974 ; =0x02106B74 - ldrne r4, _020E9970 ; =0xBFF00000 - ldr r0, [r0, #0x0] - bl _f2d - mov r2, r5 - mov r3, r4 - bl copysign - add sp, sp, #0xfc - ldmia sp!, {r4-r11,pc} -_020E9424: - ldr r1, _020E9978 ; =0x7FF00000 - add r3, sp, #0x10 - mov r2, #0x0 - str r2, [r3, #0x0] - str r1, [r3, #0x4] - ldrsb r0, [r4, #0x0] - cmp r0, #0x0 - beq _020E9454 - orr r0, r1, #0x80000000 - orr r1, r2, r2 - str r1, [r3, #0x0] - str r0, [r3, #0x4] -_020E9454: - ldmia r3, {r0-r1} - orr r0, r0, #0x0 - orr r1, r1, #0x80000 - stmia r3, {r0-r1} - add sp, sp, #0xfc - ldmia sp!, {r4-r11,pc} -_020E946C: - add r3, sp, #0xd6 - mov r5, r4 - mov r2, #0x9 -_020E9478: - ldrh r1, [r5, #0x0] - ldrh r0, [r5, #0x2] - add r5, r5, #0x4 - subs r2, r2, #0x1 - strh r1, [r3, #0x0] - strh r0, [r3, #0x2] - add r3, r3, #0x4 - bne _020E9478 - ldrh r0, [r5, #0x0] - add r1, sp, #0xdb - strh r0, [r3, #0x0] - ldrb r0, [sp, #0xda] - add r5, r1, r0 - cmp r1, r5 - bhs _020E94C8 -_020E94B4: - ldrb r0, [r1, #0x0] - sub r0, r0, #0x30 - strb r0, [r1], #0x1 - cmp r1, r5 - blo _020E94B4 -_020E94C8: - ldrb r1, [sp, #0xda] - ldrsh r2, [sp, #0xd8] - add r0, sp, #0xb0 - sub r1, r1, #0x1 - add r1, r2, r1 - strh r1, [sp, #0xd8] - ldr r1, _020E997C ; =0x02106F5C - mov r2, #0x134 - ldrsh r11, [sp, #0xd8] - bl __str2dec - add r0, sp, #0xb0 - add r1, sp, #0xd6 - bl __less_dec -_020E94FC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x0C, 0x00, 0x00, 0x0A, 0xD0, 0x00, 0xD4, 0xE1, 0x00, 0x50, 0xA0, 0xE3, 0x00, 0x00, 0x50, 0xE3 - .byte 0x54, 0x44, 0x9F, 0x05, 0x58, 0x04, 0x9F, 0xE5, 0x50, 0x44, 0x9F, 0x15, 0x00, 0x00, 0x90, 0xE5 - .byte 0xC5, 0x07, 0x00, 0xEB, 0x05, 0x20, 0xA0, 0xE1, 0x04, 0x30, 0xA0, 0xE1, 0x38, 0xFB, 0xFF, 0xEB - .byte 0xFC, 0xD0, 0x8D, 0xE2, 0xF0, 0x8F, 0xBD, 0xE8, 0xDB, 0x10, 0x8D, 0xE2, 0x00, 0x00, 0xD1, 0xE5 - .byte 0x01, 0x80, 0x81, 0xE2, 0xCB, 0x02, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5 - .byte 0x05, 0x00, 0x58, 0xE1, 0x2D, 0x00, 0x00, 0x2A, 0x08, 0x00, 0x45, 0xE0, 0xA0, 0x1F, 0xA0, 0xE1 - .byte 0x80, 0x0E, 0x61, 0xE0, 0xE0, 0x7E, 0x91, 0xE0, 0x08, 0x70, 0xA0, 0x03, 0x00, 0x60, 0xA0, 0xE3 - .byte 0x00, 0x20, 0xA0, 0xE3, 0x00, 0x00, 0x57, 0xE3, 0x05, 0x00, 0x00, 0xDA, 0x0A, 0x00, 0xA0, 0xE3 - .byte 0x01, 0x10, 0xD8, 0xE4, 0x01, 0x20, 0x82, 0xE2, 0x07, 0x00, 0x52, 0xE1, 0x90, 0x16, 0x26, 0xE0 - .byte 0xFA, 0xFF, 0xFF, 0xBA, 0xE4, 0x03, 0x9F, 0xE5, 0x0C, 0x10, 0x9D, 0xE5, 0x87, 0x31, 0x80, 0xE0 - .byte 0x08, 0x20, 0x13, 0xE5, 0x08, 0x00, 0x9D, 0xE5, 0x04, 0x30, 0x13, 0xE5, 0xC0, 0x02, 0x00, 0xEB - .byte 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x90, 0xA0, 0xE1, 0x06, 0x00, 0xA0, 0xE1, 0xAD, 0x02, 0x00, 0xEB - .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1 - .byte 0x5B, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x56, 0xE3, 0x00, 0x60, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1 - .byte 0x05, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1 - .byte 0x0A, 0x30, 0xA0, 0xE1, 0xE0, 0x05, 0x00, 0xEB, 0x04, 0x00, 0x00, 0x0A, 0x08, 0x60, 0x8D, 0xE5 - .byte 0x0C, 0xA0, 0x8D, 0xE5, 0x05, 0x00, 0x58, 0xE1, 0x07, 0xB0, 0x4B, 0xE0, 0xD1, 0xFF, 0xFF, 0x3A - .byte 0x00, 0x00, 0x5B, 0xE3, 0x0E, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x6B, 0xE2, 0x85, 0x02, 0x00, 0xEB - .byte 0x01, 0x30, 0xA0, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x54, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0xCB, 0xFB, 0xFF, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x08, 0x00, 0x9D, 0xE5 - .byte 0x0C, 0x10, 0x9D, 0xE5, 0x8F, 0x0A, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5 - .byte 0x0D, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0xA0, 0xE1, 0x76, 0x02, 0x00, 0xEB, 0x01, 0x30, 0xA0, 0xE1 - .byte 0x00, 0x20, 0xA0, 0xE1, 0x18, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0xBC, 0xFB, 0xFF, 0xEB - .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x08, 0x00, 0x9D, 0xE5, 0x0C, 0x10, 0x9D, 0xE5 - .byte 0x8B, 0x02, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5, 0x08, 0x00, 0x9D, 0xE5 - .byte 0x0C, 0x10, 0x9D, 0xE5, 0x0B, 0x20, 0xA0, 0xE1, 0x1E, 0xFB, 0xFF, 0xEB, 0x08, 0x00, 0x8D, 0xE5 - .byte 0x0C, 0x10, 0x8D, 0xE5, 0xE2, 0x00, 0x00, 0xEB, 0x02, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A - .byte 0xD0, 0x02, 0x9F, 0xE5, 0x00, 0x10, 0xE0, 0xE3, 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5 - .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x20, 0x9D, 0xE5, 0x8A, 0x00, 0x8D, 0xE2, 0x00, 0x40, 0x8D, 0xE2 - .byte 0x00, 0x50, 0xA0, 0xE3, 0x99, 0xFE, 0xFF, 0xEB, 0x8A, 0x00, 0x8D, 0xE2, 0xD6, 0x10, 0x8D, 0xE2 - .byte 0x7D, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x91, 0x00, 0x00, 0x1A, 0x8A, 0x00, 0x8D, 0xE2 - .byte 0xD6, 0x10, 0x8D, 0xE2, 0xB0, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x50, 0xA0, 0x13 - .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x55, 0xE3, 0x01, 0x60, 0xA0, 0x03 - .byte 0x00, 0x10, 0x8D, 0xE5, 0x04, 0x00, 0x8D, 0xE5, 0x00, 0x60, 0xA0, 0x13, 0x00, 0x00, 0x56, 0xE3 - .byte 0x07, 0x00, 0x00, 0x1A, 0x03, 0x00, 0x94, 0xE8, 0x01, 0x00, 0x90, 0xE2, 0x00, 0x10, 0xA1, 0xE2 - .byte 0x03, 0x00, 0x84, 0xE8, 0xBE, 0x00, 0x00, 0xEB, 0x02, 0x00, 0x50, 0xE3, 0x7C, 0x00, 0x00, 0x0A - .byte 0x05, 0x00, 0x00, 0xEA, 0x00, 0x10, 0x94, 0xE5, 0x04, 0x00, 0x94, 0xE5, 0x01, 0x10, 0x51, 0xE2 - .byte 0x00, 0x00, 0xC0, 0xE2, 0x00, 0x10, 0x84, 0xE5, 0x04, 0x00, 0x84, 0xE5, 0x00, 0x10, 0x9D, 0xE5 - .byte 0x04, 0x20, 0x9D, 0xE5, 0x64, 0x00, 0x8D, 0xE2, 0x74, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x55, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x64, 0x00, 0x8D, 0xE2, 0xD6, 0x10, 0x8D, 0xE2, 0x8E, 0xFD, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x48, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x55, 0xE3, 0x34, 0x00, 0x00, 0x1A - .byte 0xD6, 0x00, 0x8D, 0xE2, 0x64, 0x10, 0x8D, 0xE2, 0x87, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x2F, 0x00, 0x00, 0x1A, 0x8A, 0x30, 0x8D, 0xE2, 0x3E, 0x50, 0x8D, 0xE2, 0x09, 0x20, 0xA0, 0xE3 - .byte 0xB0, 0x10, 0xD3, 0xE1, 0xB2, 0x00, 0xD3, 0xE1, 0x04, 0x30, 0x83, 0xE2, 0xB0, 0x10, 0xC5, 0xE1 - .byte 0xB2, 0x00, 0xC5, 0xE1, 0x04, 0x50, 0x85, 0xE2, 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A - .byte 0xB0, 0x00, 0xD3, 0xE1, 0x64, 0x30, 0x8D, 0xE2, 0x8A, 0x40, 0x8D, 0xE2, 0xB0, 0x00, 0xC5, 0xE1 - .byte 0x09, 0x20, 0xA0, 0xE3, 0xB0, 0x10, 0xD3, 0xE1, 0xB2, 0x00, 0xD3, 0xE1, 0x04, 0x30, 0x83, 0xE2 - .byte 0xB0, 0x10, 0xC4, 0xE1, 0xB2, 0x00, 0xC4, 0xE1, 0x04, 0x40, 0x84, 0xE2, 0x01, 0x20, 0x52, 0xE2 - .byte 0xF7, 0xFF, 0xFF, 0x1A, 0xB0, 0x00, 0xD3, 0xE1, 0x3E, 0x30, 0x8D, 0xE2, 0x64, 0x50, 0x8D, 0xE2 - .byte 0xB0, 0x00, 0xC4, 0xE1, 0x09, 0x20, 0xA0, 0xE3, 0xB0, 0x10, 0xD3, 0xE1, 0xB2, 0x00, 0xD3, 0xE1 - .byte 0x04, 0x30, 0x83, 0xE2, 0xB0, 0x10, 0xC5, 0xE1, 0xB2, 0x00, 0xC5, 0xE1, 0x04, 0x50, 0x85, 0xE2 - .byte 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A, 0xB0, 0x40, 0xD3, 0xE1, 0x08, 0x30, 0x9D, 0xE5 - .byte 0x00, 0x10, 0x9D, 0xE5, 0x0C, 0x20, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0xB0, 0x40, 0xC5, 0xE1 - .byte 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0x8D, 0xE5, 0x04, 0x20, 0x8D, 0xE5 - .byte 0x11, 0x00, 0x00, 0xEA, 0x64, 0x70, 0x8D, 0xE2, 0x8A, 0x30, 0x8D, 0xE2, 0x09, 0x20, 0xA0, 0xE3 - .byte 0xB0, 0x10, 0xD7, 0xE1, 0xB2, 0x00, 0xD7, 0xE1, 0x04, 0x70, 0x87, 0xE2, 0xB0, 0x10, 0xC3, 0xE1 - .byte 0xB2, 0x00, 0xC3, 0xE1, 0x04, 0x30, 0x83, 0xE2, 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A - .byte 0xB0, 0x20, 0xD7, 0xE1, 0x00, 0x10, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0xB0, 0x20, 0xC3, 0xE1 - .byte 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, 0x9B, 0xFF, 0xFF, 0xEA, 0x3E, 0x00, 0x8D, 0xE2 - .byte 0xD6, 0x10, 0x8D, 0xE2, 0x8A, 0x20, 0x8D, 0xE2, 0x77, 0xFD, 0xFF, 0xEB, 0x18, 0x00, 0x8D, 0xE2 - .byte 0x64, 0x10, 0x8D, 0xE2, 0xD6, 0x20, 0x8D, 0xE2, 0x73, 0xFD, 0xFF, 0xEB, 0x3E, 0x00, 0x8D, 0xE2 - .byte 0x18, 0x10, 0x8D, 0xE2, 0x00, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x0B, 0x00, 0x00, 0x0A - .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0x01, 0xE2, 0x00, 0x00, 0x00, 0xE2 - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x51, 0x03, 0x0D, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x9D, 0xE5 - .byte 0x04, 0x00, 0x9D, 0xE5, 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, 0x08, 0x00, 0x00, 0xEA - .byte 0x3E, 0x00, 0x8D, 0xE2, 0x18, 0x10, 0x8D, 0xE2, 0x27, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x03, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0x08, 0x10, 0x8D, 0xE5 - .byte 0x0C, 0x00, 0x8D, 0xE5, 0xD6, 0x0D, 0xDD, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0xA0, 0xE3, 0x08, 0x20, 0x9D, 0xE5, 0x0C, 0x30, 0x9D, 0xE5, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x1D, 0x03, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5, 0x08, 0x00, 0x9D, 0xE5 - .byte 0x0C, 0x10, 0x9D, 0xE5, 0xFC, 0xD0, 0x8D, 0xE2, 0xF0, 0x8F, 0xBD, 0xE8 -_020E996C: .word 0x3FF00000 -_020E9970: .word 0xBFF00000 -_020E9974: .word 0x02106B74 -_020E9978: .word 0x7FF00000 -_020E997C: .word 0x02106F5C -_020E9980: - .byte 0x48, 0x6E, 0x10, 0x02, 0x00, 0x00, 0x14, 0x40, 0xFF, 0xFF, 0xEF, 0x7F - - arm_func_start __msl_generic_count_bits64 -__msl_generic_count_bits64: ; 0x020E998C - mov r3, r0, lsr #0x1 - ldr r2, _020E9A14 ; =0x55555555 - orr r3, r3, r1, lsl #0x1f - and r3, r3, r2 - subs r12, r0, r3 - and r2, r2, r1, lsr #0x1 - ldr r0, _020E9A18 ; =0x33333333 - sbc r3, r1, r2 - mov r1, r12, lsr #0x2 - orr r1, r1, r3, lsl #0x1e - and r2, r12, r0 - and r1, r1, r0 - adds r2, r2, r1 - and r1, r3, r0 - and r0, r0, r3, lsr #0x2 - adc r1, r1, r0 - mov r0, r2, lsr #0x4 - orr r0, r0, r1, lsl #0x1c - adds r2, r2, r0 - ldr r0, _020E9A1C ; =0x0F0F0F0F - adc r1, r1, r1, lsr #0x4 - and r3, r2, r0 - and r2, r1, r0 - mov r0, r3, lsr #0x8 - orr r0, r0, r2, lsl #0x18 - adds r1, r3, r0 - adc r2, r2, r2, lsr #0x8 - mov r0, r1, lsr #0x10 - orr r0, r0, r2, lsl #0x10 - adds r1, r1, r0 - adc r0, r2, r2, lsr #0x10 - adds r0, r1, r0 - and r0, r0, #0xff - bx lr - .balign 4 -_020E9A14: .word 0x55555555 -_020E9A18: .word 0x33333333 -_020E9A1C: .word 0x0F0F0F0F -__signbitf: - stmdb sp!, {r0-r3} - ldr r0, [sp, #0x4] - and r0, r0, #0x80000000 - add sp, sp, #0x10 - bx lr - - arm_func_start __fpclassifyf -__fpclassifyf: ; 0x020E9A34 - stmdb sp!, {r0-r3} - ldr r2, [sp, #0x4] - ldr r0, _020E9A9C ; =0x7FF00000 - ands r1, r2, r0 - beq _020E9A70 - cmp r1, r0 - bne _020E9A90 - ldr r0, _020E9AA0 ; =0x000FFFFF - tst r2, r0 - ldreq r0, [sp, #0x0] - add sp, sp, #0x10 - cmpeq r0, #0x0 - movne r0, #0x1 - moveq r0, #0x2 - bx lr -_020E9A70: - ldr r0, _020E9AA0 ; =0x000FFFFF - tst r2, r0 - ldreq r0, [sp, #0x0] - add sp, sp, #0x10 - cmpeq r0, #0x0 - movne r0, #0x5 - moveq r0, #0x3 - bx lr -_020E9A90: - mov r0, #0x4 - add sp, sp, #0x10 - bx lr - .balign 4 -_020E9A9C: .word 0x7FF00000 -_020E9AA0: .word 0x000FFFFF - - arm_func_start scalbn -scalbn: ; 0x020E9AA4 - stmdb sp!, {r3-r4,lr} - sub sp, sp, #0x4 - mov r4, r2 - add r2, sp, #0x0 - bl frexp - ldr r2, [sp, #0x0] - add r2, r2, r4 - str r2, [sp, #0x0] - bl ldexp - add sp, sp, #0x4 - ldmia sp!, {r3-r4,pc} - - arm_func_start stricmp -stricmp: ; 0x020E9AD0 - stmdb sp!, {r3,lr} - ldr r3, _020E9B34 ; =0x0210420C - ldrb r2, [r0], #0x1 - cmp r2, #0x0 - blt _020E9AF0 - cmp r2, #0x80 - bge _020E9AF0 - ldrb r2, [r3, r2] -_020E9AF0: - ldrb lr, [r1], #0x1 - and r12, r2, #0xff - cmp lr, #0x0 - blt _020E9B0C - cmp lr, #0x80 - bge _020E9B0C - ldrb lr, [r3, lr] -_020E9B0C: - and r2, lr, #0xff - cmp r12, r2 - mvncc r0, #0x0 - ldmccia sp!, {r3,pc} -_020E9B1C: - .byte 0x01, 0x00, 0xA0, 0x83 - .byte 0x08, 0x80, 0xBD, 0x88, 0x00, 0x00, 0x5C, 0xE3, 0xEA, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x08, 0x80, 0xBD, 0xE8 -_020E9B34: .word 0x0210420C - - arm_func_start strnicmp -strnicmp: ; 0x020E9B38 - ldr ip, _020E9B40 ; =stricmp - bx r12 - .balign 4 -_020E9B40: .word stricmp -_dadd: - stmdb sp!, {r4,lr} - eors r12, r1, r3 - eormi r3, r3, #0x80000000 - bmi _020EA5DC -_020E9B54: - subs r12, r0, r2 - sbcs lr, r1, r3 - bhs _020E9B70 - adds r2, r2, r12 - adc r3, r3, lr - subs r0, r0, r12 - sbc r1, r1, lr -_020E9B70: - mov lr, #0x80000000 - mov r12, r1, lsr #0x14 - orr r1, lr, r1, lsl #0xb - orr r1, r1, r0, lsr #0x15 - mov r0, r0, lsl #0xb - movs r4, r12, lsl #0x15 - cmnne r4, #0x200000 - beq _020E9C6C - mov r4, r3, lsr #0x14 - orr r3, lr, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs lr, r4, lsl #0x15 - beq _020E9CB4 -_020E9BA8: - subs r4, r12, r4 - beq _020E9C00 - cmp r4, #0x20 - ble _020E9BE4 - cmp r4, #0x38 - movge r4, #0x3f - sub r4, r4, #0x20 - rsb lr, r4, #0x20 - orrs lr, r2, r3, lsl lr - mov r2, r3, lsr r4 - orrne r2, r2, #0x1 - adds r0, r0, r2 - adcs r1, r1, #0x0 - blo _020E9C28 - b _020E9C0C -_020E9BE4: - rsb lr, r4, #0x20 - movs lr, r2, lsl lr - rsb lr, r4, #0x20 - mov r2, r2, lsr r4 - orr r2, r2, r3, lsl lr - mov r3, r3, lsr r4 - orrne r2, r2, #0x1 -_020E9C00: - adds r0, r0, r2 - adcs r1, r1, r3 - blo _020E9C28 -_020E9C0C: - add r12, r12, #0x1 - and r4, r0, #0x1 - movs r1, r1, rrx - orr r0, r4, r0, rrx - mov lr, r12, lsl #0x15 - cmn lr, #0x200000 - beq _020E9E38 -_020E9C28: - movs r2, r0, lsl #0x15 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - mov r1, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - tst r2, #0x80000000 - ldmeqia sp!, {r4,lr} - bxeq lr - movs r2, r2, lsl #0x1 - andeqs r2, r0, #0x1 - ldmeqia sp!, {r4,lr} - bxeq lr - adds r0, r0, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4,lr} - bx lr -_020E9C6C: - cmp r12, #0x800 - movge lr, #0x80000000 - movlt lr, #0x0 - bics r12, r12, #0x800 - beq _020E9CD8 - orrs r4, r0, r1, lsl #0x1 - bne _020E9E14 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r4, r4, lsl #0x15 - beq _020E9E00 - cmn r4, #0x200000 - bne _020E9E00 - orrs r4, r2, r3, lsl #0x1 - beq _020E9E00 - b _020E9E14 -_020E9CB4: - cmp r4, #0x800 - movge lr, #0x80000000 - movlt lr, #0x0 - bic r12, r12, #0x800 - bics r4, r4, #0x800 - beq _020E9D44 - orrs r4, r2, r3, lsl #0x1 - bne _020E9E14 - b _020E9E00 -_020E9CD8: - orrs r4, r0, r1, lsl #0x1 - beq _020E9D18 - mov r12, #0x1 - bic r1, r1, #0x80000000 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r4, r4, lsl #0x15 - cmnne r4, #0x200000 - mov r4, r4, lsr #0x15 - orr r4, r4, lr, lsr #0x14 - beq _020E9CB4 - orr r3, r3, #0x80000000 - orr r12, r12, lr, lsr #0x14 - b _020E9BA8 -_020E9D18: - mov r12, r3, lsr #0x14 - mov r1, r3, lsl #0xb - orr r1, r1, r2, lsr #0x15 - mov r0, r2, lsl #0xb - movs r4, r12, lsl #0x15 - beq _020E9DCC - cmn r4, #0x200000 - bne _020E9DCC - orrs r4, r0, r1, lsl #0x1 - beq _020E9E00 - b _020E9E18 -_020E9D44: - orrs r4, r2, r3, lsl #0x1 - beq _020E9DDC - mov r4, #0x1 - bic r3, r3, #0x80000000 - cmp r1, #0x0 - bpl _020E9D68 - orr r12, r12, lr, lsr #0x14 - orr r4, r4, lr, lsr #0x14 - b _020E9BA8 -_020E9D68: - adds r0, r0, r2 - adcs r1, r1, r3 - blo _020E9D88 - add r12, r12, #0x1 - and r4, r0, #0x1 - movs r1, r1, rrx - mov r0, r0, rrx - orr r0, r0, r4 -_020E9D88: - cmp r1, #0x0 - subges r12, r12, #0x1 - movs r2, r0, lsl #0x15 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, lr, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - ldmeqia sp!, {r4,lr} - bxeq lr - tst r2, #0x80000000 - ldmeqia sp!, {r4,lr} - bxeq lr - movs r2, r2, lsl #0x1 - andeqs r2, r0, #0x1 - ldmeqia sp!, {r4,lr} - bxeq lr -_020E9DCC: - mov r1, r3 - mov r0, r2 - ldmia sp!, {r4,lr} - bx lr -_020E9DDC: - cmp r1, #0x0 - subges r12, r12, #0x1 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, lr, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - ldmia sp!, {r4,lr} - bx lr -_020E9E00: - ldr r1, _020E9E58 ; =0x7FF00000 - orr r1, lr, r1 - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr -_020E9E14: - mov r1, r3 -_020E9E18: - mvn r0, #0x0 - bic r1, r0, #0x80000000 - ldmia sp!, {r4,lr} - bx lr -_020E9E28: - .byte 0x00, 0x00, 0xE0, 0xE3, 0x02, 0x11, 0xC0, 0xE3 - .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020E9E38: - cmp r12, #0x800 - movge lr, #0x80000000 - movlt lr, #0x0 - ldr r1, _020E9E58 ; =0x7FF00000 - orr r1, lr, r1 - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020E9E58: .word 0x7FF00000 -_d2f: - and r2, r1, #0x80000000 - mov r12, r1, lsr #0x14 - bics r12, r12, #0x800 - beq _020E9ED4 - mov r3, r12, lsl #0x15 - cmn r3, #0x200000 - bhs _020E9EB8 - subs r12, r12, #0x380 - bls _020E9EE4 - cmp r12, #0xff - bge _020E9F54 - mov r1, r1, lsl #0xc - orr r3, r2, r1, lsr #0x9 - orr r3, r3, r0, lsr #0x1d - movs r1, r0, lsl #0x3 - orr r0, r3, r12, lsl #0x17 - bxeq lr - tst r1, #0x80000000 - bxeq lr - movs r1, r1, lsl #0x1 - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020E9EB8: - orrs r3, r0, r1, lsl #0xc - bne _020E9ECC - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020E9ECC: - mvn r0, #0x80000000 - bx lr -_020E9ED4: - orrs r3, r0, r1, lsl #0xc - bne _020E9F4C - mov r0, r2 - bx lr -_020E9EE4: - cmn r12, #0x17 - beq _020E9F38 - bmi _020E9F4C - mov r1, r1, lsl #0xb - orr r1, r1, #0x80000000 - mov r3, r1, lsr #0x8 - orr r3, r3, r0, lsr #0x1d - rsb r12, r12, #0x1 - movs r1, r0, lsl #0x3 - orr r0, r2, r3, lsr r12 - rsb r12, r12, #0x20 - mov r3, r3, lsl r12 - orrne r3, r3, #0x1 - movs r1, r3 - bxeq lr - tst r1, #0x80000000 - bxeq lr - movs r1, r1, lsl #0x1 - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020E9F38: - orr r0, r0, r1, lsl #0xc - movs r1, r0 - mov r0, r2 - addne r0, r0, #0x1 - bx lr -_020E9F4C: - mov r0, r2 - bx lr -_020E9F54: - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr - - arm_func_start _dfix -_dfix: ; 0x020E9F60 - bic r3, r1, #0x80000000 - ldr r2, _020E9FA8 ; =0x0000041E - subs r2, r2, r3, lsr #0x14 - ble _020E9F9C - cmp r2, #0x20 - bge _020E9F94 - mov r3, r1, lsl #0xb - orr r3, r3, #0x80000000 - orr r3, r3, r0, lsr #0x15 - cmp r1, #0x0 - mov r0, r3, lsr r2 - rsbmi r0, r0, #0x0 - bx lr -_020E9F94: - mov r0, #0x0 - bx lr -_020E9F9C: - mvn r0, r1, asr #0x1f - add r0, r0, #0x80000000 - bx lr - .balign 4 -_020E9FA8: .word 0x0000041E - - arm_func_start _ll_ufrom_d -_ll_ufrom_d: ; 0x020E9FAC - tst r1, #0x80000000 - bne _020EA010 - ldr r2, _020EA034 ; =0x0000043E - subs r2, r2, r1, lsr #0x14 - blt _020EA028 - cmp r2, #0x40 - bge _020EA004 - mov r12, r1, lsl #0xb - orr r12, r12, #0x80000000 - orr r12, r12, r0, lsr #0x15 - cmp r2, #0x20 - ble _020E9FEC - sub r2, r2, #0x20 - mov r1, #0x0 - mov r0, r12, lsr r2 - bx lr -_020E9FEC: - mov r3, r0, lsl #0xb - mov r1, r12, lsr r2 - mov r0, r3, lsr r2 - rsb r2, r2, #0x20 - orr r0, r0, r12, lsl r2 - bx lr -_020EA004: - mov r1, #0x0 - mov r0, #0x0 - bx lr -_020EA010: - cmn r1, #0x100000 - cmpeq r0, #0x0 - bhi _020EA028 - mov r1, #0x0 - mov r0, #0x0 - bx lr -_020EA028: - mvn r1, #0x0 - mvn r0, #0x0 - bx lr - .balign 4 -_020EA034: .word 0x0000043E - - arm_func_start _dflt -_dflt: ; 0x020EA038 - ands r2, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r0, #0x0 - mov r1, #0x0 - bxeq lr - mov r3, #0x400 - add r3, r3, #0x1e - clz r12, r0 - movs r0, r0, lsl r12 - sub r3, r3, r12 - movs r1, r0 - mov r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, r2, r1, lsr #0xc - orr r1, r1, r3, lsl #0x14 - bx lr - - arm_func_start _dfltu -_dfltu: ; 0x020EA078 - cmp r0, #0x0 - mov r1, #0x0 - bxeq lr - mov r3, #0x400 - add r3, r3, #0x1e - bmi _020EA09C - clz r12, r0 - movs r0, r0, lsl r12 - sub r3, r3, r12 -_020EA09C: - mov r1, r0 - mov r0, r1, lsl #0x15 - add r1, r1, r1 - mov r1, r1, lsr #0xc - orr r1, r1, r3, lsl #0x14 - bx lr - - arm_func_start _dmul -_dmul: ; 0x020EA0B4 - stmdb sp!, {r4-r7,lr} - eor lr, r1, r3 - and lr, lr, #0x80000000 - mov r12, r1, lsr #0x14 - mov r1, r1, lsl #0xb - orr r1, r1, r0, lsr #0x15 - mov r0, r0, lsl #0xb - movs r6, r12, lsl #0x15 - cmnne r6, #0x200000 - beq _020EA1BC - orr r1, r1, #0x80000000 - bic r12, r12, #0x800 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r5, r4, lsl #0x15 - cmnne r5, #0x200000 - beq _020EA204 - orr r3, r3, #0x80000000 - bic r4, r4, #0x800 -_020EA108: - add r12, r4, r12 - umull r5, r4, r0, r2 - umull r7, r6, r0, r3 - adds r4, r7, r4 - adc r6, r6, #0x0 - umull r7, r0, r1, r2 - adds r4, r7, r4 - adcs r0, r0, r6 - umull r7, r2, r1, r3 - adc r1, r2, #0x0 - adds r0, r0, r7 - adc r1, r1, #0x0 - orrs r4, r4, r5 - orrne r0, r0, #0x1 - cmp r1, #0x0 - blt _020EA154 - sub r12, r12, #0x1 - adds r0, r0, r0 - adc r1, r1, r1 -_020EA154: - add r12, r12, #0x2 - subs r12, r12, #0x400 - bmi _020EA2F0 - beq _020EA2F0 - mov r6, r12, lsl #0x14 - cmn r6, #0x100000 - bmi _020EA3F0 - movs r2, r0, lsl #0x15 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, lr, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - tst r2, #0x80000000 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - movs r2, r2, lsl #0x1 - andeqs r2, r0, #0x1 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - adds r0, r0, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA1BC: - bics r12, r12, #0x800 - beq _020EA218 - orrs r6, r0, r1, lsl #0x1 - bne _020EA3A4 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r5, r4, lsl #0x15 - beq _020EA1F8 - cmn r5, #0x200000 - bne _020EA390 - orrs r5, r2, r3, lsl #0x1 - beq _020EA390 - b _020EA3A4 -_020EA1F8: - orrs r5, r3, r2 - beq _020EA3B8 - b _020EA390 -_020EA204: - bics r4, r4, #0x800 - beq _020EA2AC - orrs r6, r2, r3, lsl #0x1 - bne _020EA3A4 - b _020EA390 -_020EA218: - orrs r6, r0, r1, lsl #0x1 - beq _020EA280 - mov r12, #0x1 - cmp r1, #0x0 - bne _020EA23C - sub r12, r12, #0x20 - movs r1, r0 - mov r0, #0x0 - bmi _020EA258 -_020EA23C: - clz r6, r1 - movs r1, r1, lsl r6 - rsb r6, r6, #0x20 - orr r1, r1, r0, lsr r6 - rsb r6, r6, #0x20 - mov r0, r0, lsl r6 - sub r12, r12, r6 -_020EA258: - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r5, r4, lsl #0x15 - cmnne r5, #0x200000 - beq _020EA204 - orr r3, r3, #0x80000000 - bic r4, r4, #0x800 - b _020EA108 -_020EA280: - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r5, r4, lsl #0x15 - beq _020EA404 - cmn r5, #0x200000 - bne _020EA404 - orrs r6, r2, r3, lsl #0x1 - beq _020EA3B8 - b _020EA3A4 -_020EA2AC: - orrs r5, r2, r3, lsl #0x1 - beq _020EA404 - mov r4, #0x1 - cmp r3, #0x0 - bne _020EA2D0 - sub r4, r4, #0x20 - movs r3, r2 - mov r2, #0x0 - bmi _020EA108 -_020EA2D0: - clz r6, r3 - movs r3, r3, lsl r6 - rsb r6, r6, #0x20 - orr r3, r3, r2, lsr r6 - rsb r6, r6, #0x20 - mov r2, r2, lsl r6 - sub r4, r4, r6 - b _020EA108 -_020EA2F0: - cmn r12, #0x34 - beq _020EA388 - bmi _020EA3E0 - mov r2, r1 - mov r3, r0 - add r4, r12, #0x34 - cmp r4, #0x20 - movge r2, r3 - movge r3, #0x0 - subge r4, r4, #0x20 - rsb r5, r4, #0x20 - mov r2, r2, lsl r4 - orr r2, r2, r3, lsr r5 - movs r3, r3, lsl r4 - orrne r2, r2, #0x1 - rsb r12, r12, #0xc - cmp r12, #0x20 - movge r0, r1 - movge r1, #0x0 - subge r12, r12, #0x20 - rsb r4, r12, #0x20 - mov r0, r0, lsr r12 - orr r0, r0, r1, lsl r4 - orr r1, lr, r1, lsr r12 - cmp r2, #0x0 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - tst r2, #0x80000000 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - movs r2, r2, lsl #0x1 - andeqs r2, r0, #0x1 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - adds r0, r0, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA388: - orr r0, r0, r1, lsl #0x1 - b _020EA3C8 -_020EA390: - ldr r1, _020EA414 ; =0x7FF00000 - orr r1, lr, r1 - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA3A4: - mov r1, r3 - mvn r0, #0x0 - bic r1, r0, #0x80000000 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA3B8: - mvn r0, #0x0 - bic r1, r0, #0x80000000 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA3C8: - movs r2, r0 - mov r1, lr - mov r0, #0x0 - addne r0, r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA3E0: - mov r1, lr - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA3F0: - ldr r1, _020EA414 ; =0x7FF00000 - orr r1, lr, r1 - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA404: - mov r1, lr - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020EA414: .word 0x7FF00000 - - arm_func_start _dsqrt -_dsqrt: ; 0x020EA418 - stmdb sp!, {r4-r6,lr} - ldr r2, _020EA5A8 ; =0x7FF00000 - cmp r1, r2 - bhs _020EA564 - movs r12, r1, lsr #0x14 - beq _020EA510 - bic r1, r1, r2 - orr r1, r1, #0x100000 -_020EA438: - movs r12, r12, asr #0x1 - bhs _020EA44C - sub r12, r12, #0x1 - movs r0, r0, lsl #0x1 - adc r1, r1, r1 -_020EA44C: - movs r3, r0, lsl #0x1 - adc r1, r1, r1 - mov r2, #0x0 - mov r4, #0x0 - mov lr, #0x200000 -_020EA460: - add r6, r4, lr - cmp r6, r1 - addle r4, r6, lr - suble r1, r1, r6 - addle r2, r2, lr - movs r3, r3, lsl #0x1 - adc r1, r1, r1 - movs lr, lr, lsr #0x1 - bne _020EA460 - mov r0, #0x0 - mov r5, #0x0 - cmp r1, r4 - cmpeq r3, #0x80000000 - blo _020EA4A8 - subs r3, r3, #0x80000000 - sbc r1, r1, r4 - add r4, r4, #0x1 - mov r0, #0x80000000 -_020EA4A8: - movs r3, r3, lsl #0x1 - adc r1, r1, r1 - mov lr, #0x40000000 -_020EA4B4: - add r6, r5, lr - cmp r4, r1 - cmpeq r6, r3 - bhi _020EA4D4 - add r5, r6, lr - subs r3, r3, r6 - sbc r1, r1, r4 - add r0, r0, lr -_020EA4D4: - movs r3, r3, lsl #0x1 - adc r1, r1, r1 - movs lr, lr, lsr #0x1 - bne _020EA4B4 - orrs r1, r1, r3 - biceq r0, r0, #0x1 - movs r1, r2, lsr #0x1 - movs r0, r0, rrx - adcs r0, r0, #0x0 - adc r1, r1, #0x0 - add r1, r1, #0x20000000 - sub r1, r1, #0x100000 - add r1, r1, r12, lsl #0x14 - ldmia sp!, {r4-r6,lr} - bx lr -_020EA510: - cmp r1, #0x0 - bne _020EA540 - cmp r0, #0x0 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - mvn r12, #0x13 - clz r5, r0 - movs r0, r0, lsl r5 - sub r12, r12, r5 - mov r1, r0, lsr #0xb - mov r0, r0, lsl #0x15 - b _020EA438 -_020EA540: - clz r2, r1 - movs r1, r1, lsl r2 - rsb r2, r2, #0x2b - mov r1, r1, lsr #0xb - orr r1, r1, r0, lsr r2 - rsb r2, r2, #0x20 - mov r0, r0, lsl r2 - rsb r12, r2, #0x1 - b _020EA438 -_020EA564: - tst r1, #0x80000000 - beq _020EA580 - bics r3, r1, #0x80000000 - cmpeq r0, #0x0 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - b _020EA58C -_020EA580: - orrs r2, r0, r1, lsl #0xc - ldmeqia sp!, {r4-r6,lr} - bxeq lr -_020EA58C: - ldr r2, _020EA5AC ; =0x7FF80000 - orr r1, r1, r2 - ldr r3, _020EA5B0 ; =0x021D74A8 - mov r4, #0x21 - str r4, [r3, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020EA5A8: .word 0x7FF00000 -_020EA5AC: .word 0x7FF80000 -_020EA5B0: .word 0x021D74A8 - - arm_func_start _drsb -_drsb: ; 0x020EA5B4 - eor r1, r1, r3 - eor r3, r1, r3 - eor r1, r1, r3 - eor r0, r0, r2 - eor r2, r0, r2 - eor r0, r0, r2 -_dsub: - stmdb sp!, {r4,lr} - eors r12, r1, r3 - eormi r3, r3, #0x80000000 - bmi _020E9B54 -_020EA5DC: - subs r12, r0, r2 - sbcs lr, r1, r3 - bhs _020EA5FC - eor lr, lr, #0x80000000 - adds r2, r2, r12 - adc r3, r3, lr - subs r0, r0, r12 - sbc r1, r1, lr -_020EA5FC: - mov lr, #0x80000000 - mov r12, r1, lsr #0x14 - orr r1, lr, r1, lsl #0xb - orr r1, r1, r0, lsr #0x15 - mov r0, r0, lsl #0xb - movs r4, r12, lsl #0x15 - cmnne r4, #0x200000 - beq _020EA800 - mov r4, r3, lsr #0x14 - orr r3, lr, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs lr, r4, lsl #0x15 - beq _020EA848 -_020EA634: - subs r4, r12, r4 - beq _020EA6DC - cmp r4, #0x20 - ble _020EA670 - cmp r4, #0x38 - movge r4, #0x3f - sub r4, r4, #0x20 - rsb lr, r4, #0x20 - orrs lr, r2, r3, lsl lr - mov r2, r3, lsr r4 - orrne r2, r2, #0x1 - subs r0, r0, r2 - sbcs r1, r1, #0x0 - bmi _020EA698 - b _020EA788 -_020EA670: - rsb lr, r4, #0x20 - movs lr, r2, lsl lr - rsb lr, r4, #0x20 - mov r2, r2, lsr r4 - orr r2, r2, r3, lsl lr - mov r3, r3, lsr r4 - orrne r2, r2, #0x1 - subs r0, r0, r2 - sbcs r1, r1, r3 - bpl _020EA788 -_020EA698: - movs r2, r0, lsl #0x15 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - mov r1, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - tst r2, #0x80000000 - ldmeqia sp!, {r4,lr} - bxeq lr - movs r2, r2, lsl #0x1 - andeqs r2, r0, #0x1 - ldmeqia sp!, {r4,lr} - bxeq lr - adds r0, r0, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4,lr} - bx lr -_020EA6DC: - subs r0, r0, r2 - sbc r1, r1, r3 - orrs lr, r1, r0 - beq _020EA96C - mov lr, r12, lsl #0x14 - and lr, lr, #0x80000000 - bic r12, r12, #0x800 - cmp r1, #0x0 - bmi _020EA764 - bne _020EA714 - sub r12, r12, #0x20 - movs r1, r0 - mov r0, #0x0 - bmi _020EA730 -_020EA714: - clz r4, r1 - movs r1, r1, lsl r4 - rsb r4, r4, #0x20 - orr r1, r1, r0, lsr r4 - rsb r4, r4, #0x20 - mov r0, r0, lsl r4 - sub r12, r12, r4 -_020EA730: - cmp r12, #0x0 - bgt _020EA76C - rsb r12, r12, #0xc - cmp r12, #0x20 - movge r0, r1 - movge r1, #0x0 - subge r12, r12, #0x20 - rsb r4, r12, #0x20 - mov r0, r0, lsr r12 - orr r0, r0, r1, lsl r4 - orr r1, lr, r1, lsr r12 - ldmia sp!, {r4,lr} - bx lr -_020EA764: - cmp r1, #0x0 - subges r12, r12, #0x1 -_020EA76C: - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, lr, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - ldmia sp!, {r4,lr} - bx lr -_020EA788: - mov lr, r12, lsl #0x14 - and lr, lr, #0x80000000 - bic r12, r12, #0x800 - cmp r1, #0x0 - bne _020EA7AC - sub r12, r12, #0x20 - movs r1, r0 - mov r0, #0x0 - bmi _020EA7C8 -_020EA7AC: - clz r4, r1 - movs r1, r1, lsl r4 - rsb r4, r4, #0x20 - orr r1, r1, r0, lsr r4 - rsb r4, r4, #0x20 - mov r0, r0, lsl r4 - sub r12, r12, r4 -_020EA7C8: - cmp r12, #0x0 - orrgt r12, r12, lr, lsr #0x14 - bgt _020EA698 - rsb r12, r12, #0xc - cmp r12, #0x20 - movge r0, r1 - movge r1, #0x0 - subge r12, r12, #0x20 - rsb r4, r12, #0x20 - mov r0, r0, lsr r12 - orr r0, r0, r1, lsl r4 - orr r1, lr, r1, lsr r12 - ldmia sp!, {r4,lr} - bx lr -_020EA800: - cmp r12, #0x800 - movge lr, #0x80000000 - movlt lr, #0x0 - bics r12, r12, #0x800 - beq _020EA86C - orrs r4, r0, r1, lsl #0x1 - bne _020EA948 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r4, r4, lsl #0x15 - beq _020EA934 - cmn r4, #0x200000 - bne _020EA934 - orrs r4, r2, r3, lsl #0x1 - beq _020EA95C - b _020EA948 -_020EA848: - cmp r4, #0x800 - movge lr, #0x80000000 - movlt lr, #0x0 - bic r12, r12, #0x800 - bics r4, r4, #0x800 - beq _020EA8E4 - orrs r4, r2, r3, lsl #0x1 - bne _020EA948 - b _020EA934 -_020EA86C: - orrs r4, r0, r1, lsl #0x1 - beq _020EA8AC - mov r12, #0x1 - bic r1, r1, #0x80000000 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r4, r4, lsl #0x15 - cmnne r4, #0x200000 - mov r4, r4, lsr #0x15 - orr r4, r4, lr, lsr #0x14 - beq _020EA848 - orr r3, r3, #0x80000000 - orr r12, r12, lr, lsr #0x14 - b _020EA634 -_020EA8AC: - mov r12, r3, lsr #0x14 - mov r1, r3, lsl #0xb - orr r1, r1, r2, lsr #0x15 - mov r0, r2, lsl #0xb - movs r4, r12, lsl #0x15 - beq _020EA8D8 - cmn r4, #0x200000 - bne _020EA900 - orrs r4, r0, r1, lsl #0x1 - bne _020EA94C - b _020EA934 -_020EA8D8: - orrs r4, r0, r1, lsl #0x1 - beq _020EA96C - b _020EA900 -_020EA8E4: - orrs r4, r2, r3, lsl #0x1 - beq _020EA910 - mov r4, #0x1 - bic r3, r3, #0x80000000 - orr r12, r12, lr, lsr #0x14 - orr r4, r4, lr, lsr #0x14 - b _020EA634 -_020EA900: - mov r1, r3 - mov r0, r2 - ldmia sp!, {r4,lr} - bx lr -_020EA910: - cmp r1, #0x0 - subges r12, r12, #0x1 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, lr, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - ldmia sp!, {r4,lr} - bx lr -_020EA934: - ldr r1, _020EA97C ; =0x7FF00000 - orr r1, lr, r1 - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr -_020EA948: - mov r1, r3 -_020EA94C: - mvn r0, #0x0 - bic r1, r0, #0x80000000 - ldmia sp!, {r4,lr} - bx lr -_020EA95C: - mvn r0, #0x0 - bic r1, r0, #0x80000000 - ldmia sp!, {r4,lr} - bx lr -_020EA96C: - mov r1, #0x0 - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020EA97C: .word 0x7FF00000 - - arm_func_start _fadd -_fadd: ; 0x020EA980 - eors r2, r0, r1 - eormi r1, r1, #0x80000000 - bmi _020EB7BC -_020EA98C: - subs r12, r0, r1 - subcc r0, r0, r12 - addcc r1, r1, r12 - mov r2, #0x80000000 - mov r3, r0, lsr #0x17 - orr r0, r2, r0, lsl #0x8 - ands r12, r3, #0xff - cmpne r12, #0xff - beq _020EAA20 - mov r12, r1, lsr #0x17 - orr r1, r2, r1, lsl #0x8 - ands r2, r12, #0xff - beq _020EAA60 -_020EA9C0: - subs r12, r3, r12 - beq _020EA9D8 - rsb r2, r12, #0x20 - movs r2, r1, lsl r2 - mov r1, r1, lsr r12 - orrne r1, r1, #0x1 -_020EA9D8: - adds r0, r0, r1 - blo _020EA9F8 - and r1, r0, #0x1 - orr r0, r1, r0, rrx - add r3, r3, #0x1 - and r2, r3, #0xff - cmp r2, #0xff - beq _020EAB68 -_020EA9F8: - ands r1, r0, #0xff - add r0, r0, r0 - mov r0, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - tst r1, #0x80 - bxeq lr - ands r1, r1, #0x7f - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EAA20: - cmp r3, #0x100 - movge r2, #0x80000000 - movlt r2, #0x0 - ands r3, r3, #0xff - beq _020EAA84 - movs r0, r0, lsl #0x1 - bne _020EAB94 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EAB88 - cmp r12, #0xff - blt _020EAB88 - cmp r1, #0x0 - beq _020EAB88 - b _020EAB94 -_020EAA60: - cmp r3, #0x100 - movge r2, #0x80000000 - movlt r2, #0x0 - and r3, r3, #0xff - ands r12, r12, #0xff - beq _020EAAE0 -_020EAA78: - movs r1, r1, lsl #0x1 - bne _020EAB94 - b _020EAB88 -_020EAA84: - movs r0, r0, lsl #0x1 - beq _020EAABC - mov r3, #0x1 - mov r0, r0, lsr #0x1 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x8 - ands r12, r12, #0xff - beq _020EAAE0 - cmp r12, #0xff - beq _020EAA78 - orr r1, r1, #0x80000000 - orr r3, r3, r2, lsr #0x17 - orr r12, r12, r2, lsr #0x17 - b _020EA9C0 -_020EAABC: - mov r3, r1, lsr #0x17 - mov r0, r1, lsl #0x9 - ands r3, r3, #0xff - beq _020EAB48 - cmp r3, #0xff - blt _020EAB48 - cmp r0, #0x0 - beq _020EAB88 - b _020EAB80 -_020EAAE0: - movs r1, r1, lsl #0x1 - beq _020EAB50 - mov r1, r1, lsr #0x1 - mov r12, #0x1 - orr r3, r3, r2, lsr #0x17 - orr r12, r12, r2, lsr #0x17 - cmp r0, #0x0 - bmi _020EA9C0 - adds r0, r0, r1 - blo _020EAB14 - and r1, r0, #0x1 - orr r0, r1, r0, rrx - add r12, r12, #0x1 -_020EAB14: - cmp r0, #0x0 - subge r12, r12, #0x1 - ands r1, r0, #0xff - add r0, r0, r0 - mov r0, r0, lsr #0x9 - orr r0, r0, r12, lsl #0x17 - bxeq lr - tst r1, #0x80 - bxeq lr - ands r1, r1, #0x7f - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EAB48: - mov r0, r1 - bx lr -_020EAB50: - cmp r0, #0x0 - subges r3, r3, #0x1 - add r0, r0, r0 - orr r0, r2, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bx lr -_020EAB68: - cmp r3, #0x100 - movge r2, #0x80000000 - movlt r2, #0x0 - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020EAB80: - mvn r0, #0x80000000 - bx lr -_020EAB88: - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020EAB94: - mvn r0, #0x80000000 - bx lr -_020EAB9C: - .byte 0x02, 0x01, 0xE0, 0xE3 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start _dgr -_dgr: ; 0x020EABA4 - mov r12, #0x200000 - cmn r12, r1, lsl #0x1 - bhs _020EAC18 - cmn r12, r3, lsl #0x1 - bhs _020EAC2C -_020EABB8: - orrs r12, r3, r1 - bmi _020EABE8 - cmp r1, r3 - cmpeq r0, r2 - movhi r0, #0x1 - movls r0, #0x0 - bx lr -_020EABD4: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EABE8: - orr r12, r0, r12, lsl #0x1 - orrs r12, r12, r2 - moveq r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x20000000 - msr cpsr_f, r12 - bxeq lr - cmp r3, r1 - cmpeq r2, r0 - movhi r0, #0x1 - movls r0, #0x0 - bx lr -_020EAC18: - bne _020EABD4 - cmp r0, #0x0 - bhi _020EABD4 - cmn r12, r3, lsl #0x1 - blo _020EABB8 -_020EAC2C: - bne _020EABD4 - cmp r2, #0x0 - bhi _020EABD4 - b _020EABB8 - - arm_func_start _dleq -_dleq: ; 0x020EAC3C - mov r12, #0x200000 - cmn r12, r1, lsl #0x1 - bhs _020EACBC - cmn r12, r3, lsl #0x1 - bhs _020EACD0 -_020EAC50: - orrs r12, r3, r1 - bmi _020EAC84 - cmp r1, r3 - cmpeq r0, r2 - movls r0, #0x1 - movhi r0, #0x0 - bx lr -_020EAC6C: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x40000000 - orr r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EAC84: - orr r12, r0, r12, lsl #0x1 - orrs r12, r12, r2 - moveq r0, #0x1 - bne _020EACA8 - mrs r12, cpsr - bic r12, r12, #0x20000000 - orr r12, r12, #0x40000000 - msr cpsr_f, r12 - bxeq lr -_020EACA8: - cmp r3, r1 - cmpeq r2, r0 - movls r0, #0x1 - movhi r0, #0x0 - bx lr -_020EACBC: - bne _020EAC6C - cmp r0, #0x0 - bhi _020EAC6C - cmn r12, r3, lsl #0x1 - blo _020EAC50 -_020EACD0: - bne _020EAC6C - cmp r2, #0x0 - bhi _020EAC6C - b _020EAC50 - - arm_func_start _dls -_dls: ; 0x020EACE0 - mov r12, #0x200000 - cmn r12, r1, lsl #0x1 - bhs _020EAD58 - cmn r12, r3, lsl #0x1 - bhs _020EAD6C -_020EACF4: - orrs r12, r3, r1 - bmi _020EAD24 - cmp r1, r3 - cmpeq r0, r2 - movcc r0, #0x1 - movcs r0, #0x0 - bx lr -_020EAD10: - mov r0, #0x0 - mrs r12, cpsr - orr r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EAD24: - orr r12, r0, r12, lsl #0x1 - orrs r12, r12, r2 - moveq r0, #0x0 - bne _020EAD44 - mrs r12, cpsr - orr r12, r12, #0x20000000 - msr cpsr_f, r12 - bxeq lr -_020EAD44: - cmp r3, r1 - cmpeq r2, r0 - movcc r0, #0x1 - movcs r0, #0x0 - bx lr -_020EAD58: - bne _020EAD10 - cmp r0, #0x0 - bhi _020EAD10 - cmn r12, r3, lsl #0x1 - blo _020EACF4 -_020EAD6C: - bne _020EAD10 - cmp r2, #0x0 - bhi _020EAD10 - b _020EACF4 - - arm_func_start _deq -_deq: ; 0x020EAD7C - mov r12, #0x200000 - cmn r12, r1, lsl #0x1 - bhs _020EADE4 - cmn r12, r3, lsl #0x1 - bhs _020EADF8 -_020EAD90: - orrs r12, r3, r1 - bmi _020EADC0 - cmp r1, r3 - cmpeq r0, r2 - moveq r0, #0x1 - movne r0, #0x0 - bx lr -_020EADAC: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr -_020EADC0: - orr r12, r0, r12, lsl #0x1 - orrs r12, r12, r2 - moveq r0, #0x1 - bxeq lr - cmp r3, r1 - cmpeq r2, r0 - moveq r0, #0x1 - movne r0, #0x0 - bx lr -_020EADE4: - bne _020EADAC - cmp r0, #0x0 - bhi _020EADAC - cmn r12, r3, lsl #0x1 - blo _020EAD90 -_020EADF8: - bne _020EADAC - cmp r2, #0x0 - bhi _020EADAC - b _020EAD90 - - arm_func_start _dneq -_dneq: ; 0x020EAE08 - mov r12, #0x200000 - cmn r12, r1, lsl #0x1 - bhs _020EAE70 - cmn r12, r3, lsl #0x1 - bhs _020EAE84 -_020EAE1C: - orrs r12, r3, r1 - bmi _020EAE4C - cmp r1, r3 - cmpeq r0, r2 - movne r0, #0x1 - moveq r0, #0x0 - bx lr -_020EAE38: - mov r0, #0x1 - mrs r12, cpsr - bic r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr -_020EAE4C: - orr r12, r0, r12, lsl #0x1 - orrs r12, r12, r2 - moveq r0, #0x0 - bxeq lr - cmp r3, r1 - cmpeq r2, r0 - movne r0, #0x1 - moveq r0, #0x0 - bx lr -_020EAE70: - bne _020EAE38 - cmp r0, #0x0 - bhi _020EAE38 - cmn r12, r3, lsl #0x1 - blo _020EAE1C -_020EAE84: - bne _020EAE38 - cmp r2, #0x0 - bhi _020EAE38 - b _020EAE1C - - arm_func_start _fgeq -_fgeq: ; 0x020EAE94 - mov r3, #0xff000000 - cmp r3, r0, lsl #0x1 - cmpcs r3, r1, lsl #0x1 - blo _020EAEDC - cmp r0, #0x0 - bicmi r0, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r1, #0x0 - bicmi r1, r1, #0x80000000 - rsbmi r1, r1, #0x0 - cmp r0, r1 - movge r0, #0x1 - movlt r0, #0x0 - mrs r12, cpsr - biclt r12, r12, #0x20000000 - orrge r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EAEDC: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr - - arm_func_start _fgr -_fgr: ; 0x020EAEF0 - mov r3, #0xff000000 - cmp r3, r0, lsl #0x1 - cmpcs r3, r1, lsl #0x1 - blo _020EAF38 - cmp r0, #0x0 - bicmi r0, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r1, #0x0 - bicmi r1, r1, #0x80000000 - rsbmi r1, r1, #0x0 - cmp r0, r1 - movgt r0, #0x1 - movle r0, #0x0 - mrs r12, cpsr - bicle r12, r12, #0x20000000 - orrgt r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EAF38: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr - - arm_func_start _fleq -_fleq: ; 0x020EAF4C - mov r3, #0xff000000 - cmp r3, r0, lsl #0x1 - cmpcs r3, r1, lsl #0x1 - blo _020EAF9C - cmp r0, #0x0 - bicmi r0, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r1, #0x0 - bicmi r1, r1, #0x80000000 - rsbmi r1, r1, #0x0 - cmp r0, r1 - movle r0, #0x1 - movgt r0, #0x0 - mrs r12, cpsr - orrgt r12, r12, #0x20000000 - bicgt r12, r12, #0x40000000 - bicle r12, r12, #0x20000000 - orrle r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr -_020EAF9C: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x40000000 - orr r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr - - arm_func_start _fls -_fls: ; 0x020EAFB4 - mov r3, #0xff000000 - cmp r3, r0, lsl #0x1 - cmpcs r3, r1, lsl #0x1 - blo _020EAFFC - cmp r0, #0x0 - bicmi r0, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r1, #0x0 - bicmi r1, r1, #0x80000000 - rsbmi r1, r1, #0x0 - cmp r0, r1 - movlt r0, #0x1 - movge r0, #0x0 - mrs r12, cpsr - orrge r12, r12, #0x20000000 - biclt r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EAFFC: - mov r0, #0x0 - mrs r12, cpsr - orr r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr - - arm_func_start _feq -_feq: ; 0x020EB010 - mov r3, #0xff000000 - cmp r3, r0, lsl #0x1 - blo _020EB064 - cmp r3, r1, lsl #0x1 - blo _020EB064 - orr r3, r0, r1 - movs r3, r3, lsl #0x1 - moveq r0, #0x0 - bne _020EB044 - mrs r12, cpsr - orr r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr -_020EB044: - cmp r0, r1 - movne r0, #0x1 - moveq r0, #0x0 - mrs r12, cpsr - bicne r12, r12, #0x40000000 - orreq r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr -_020EB064: - mov r0, #0x1 - mrs r12, cpsr - bic r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr - - arm_func_start _frdiv -_frdiv: ; 0x020EB078 - eor r0, r0, r1 - eor r1, r0, r1 - eor r0, r0, r1 - - arm_func_start _fdiv -_fdiv: ; 0x020EB084 - stmdb sp!, {lr} - mov r12, #0xff - ands r3, r12, r0, lsr #0x17 - cmpne r3, #0xff - beq _020EB258 - ands r12, r12, r1, lsr #0x17 - cmpne r12, #0xff - beq _020EB294 - orr r1, r1, #0x800000 - orr r0, r0, #0x800000 - bic r2, r0, #0xff000000 - bic lr, r1, #0xff000000 -_020EB0B4: - cmp r2, lr - movcc r2, r2, lsl #0x1 - subcc r3, r3, #0x1 - teq r0, r1 - sub r0, pc, #0x94 - ldrb r1, [r0, lr, lsr #0xf] - rsb lr, lr, #0x0 - mov r0, lr, asr #0x1 - mul r0, r1, r0 - add r0, r0, #0x80000000 - mov r0, r0, lsr #0x6 - mul r0, r1, r0 - mov r0, r0, lsr #0xe - mul r1, lr, r0 - sub r12, r3, r12 - mov r1, r1, lsr #0xc - mul r1, r0, r1 - mov r0, r0, lsl #0xe - add r0, r0, r1, lsr #0xf - umull r1, r0, r2, r0 - mov r3, r0 - orrmi r0, r0, #0x80000000 - adds r12, r12, #0x7e - bmi _020EB35C - cmp r12, #0xfe - bge _020EB410 - add r0, r0, r12, lsl #0x17 - mov r12, r1, lsr #0x1c - cmp r12, #0x7 - beq _020EB238 - add r0, r0, r1, lsr #0x1f - ldmia sp!, {lr} - bx lr -_020EB138: - .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9 - .byte 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA - .byte 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4, 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE - .byte 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8, 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2 - .byte 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD, 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8 - .byte 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3, 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF - .byte 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA, 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6 - .byte 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2, 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF - .byte 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7 - .byte 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1 - .byte 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E, 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B - .byte 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95 - .byte 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90 - .byte 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B - .byte 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86 - .byte 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82 - .byte 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80 -_020EB238: - mov r1, r3, lsl #0x1 - add r1, r1, #0x1 - rsb lr, lr, #0x0 - mul r1, lr, r1 - cmp r1, r2, lsl #0x18 - addmi r0, r0, #0x1 - ldmia sp!, {lr} - bx lr -_020EB258: - eor lr, r0, r1 - and lr, lr, #0x80000000 - cmp r3, #0x0 - beq _020EB2B0 - movs r0, r0, lsl #0x9 - bne _020EB3F8 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EB3E8 - cmp r12, #0xff - blt _020EB3E8 - cmp r1, #0x0 - beq _020EB404 - b _020EB3E0 -_020EB294: - eor lr, r0, r1 - and lr, lr, #0x80000000 - cmp r12, #0x0 - beq _020EB314 -_020EB2A4: - movs r1, r1, lsl #0x9 - bne _020EB3E0 - b _020EB430 -_020EB2B0: - movs r2, r0, lsl #0x9 - beq _020EB2E4 - clz r3, r2 - movs r2, r2, lsl r3 - rsb r3, r3, #0x0 - mov r2, r2, lsr #0x8 - ands r12, r12, r1, lsr #0x17 - beq _020EB33C - cmp r12, #0xff - beq _020EB2A4 - orr r1, r1, #0x800000 - bic lr, r1, #0xff000000 - b _020EB0B4 -_020EB2E4: - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EB308 - cmp r12, #0xff - blt _020EB430 - cmp r1, #0x0 - beq _020EB430 - b _020EB3E0 -_020EB308: - cmp r1, #0x0 - beq _020EB404 - b _020EB430 -_020EB314: - movs r12, r1, lsl #0x9 - beq _020EB3E8 - mov lr, r12 - clz r12, lr - movs lr, lr, lsl r12 - rsb r12, r12, #0x0 - mov lr, lr, lsr #0x8 - orr r0, r0, #0x800000 - bic r2, r0, #0xff000000 - b _020EB0B4 -_020EB33C: - movs r12, r1, lsl #0x9 - beq _020EB3E8 - mov lr, r12 - clz r12, lr - movs lr, lr, lsl r12 - rsb r12, r12, #0x0 - mov lr, lr, lsr #0x8 - b _020EB0B4 -_020EB35C: - and r0, r0, #0x80000000 - cmn r12, #0x18 - beq _020EB3D0 - bmi _020EB428 - add r1, r12, #0x17 - mov r2, r2, lsl r1 - rsb r12, r12, #0x0 - mov r3, r3, lsr r12 - orr r0, r0, r3 - rsb lr, lr, #0x0 - mul r1, lr, r3 - cmp r1, r2 - ldmeqia sp!, {lr} - bxeq lr - add r1, r1, lr - cmp r1, r2 - beq _020EB3C4 - addmi r0, r0, #0x1 - subpl r1, r1, lr - add r1, lr, r1, lsl #0x1 - cmp r1, r2, lsl #0x1 - and r3, r0, #0x1 - addmi r0, r0, #0x1 - addeq r0, r0, r3 - ldmia sp!, {lr} - bx lr -_020EB3C4: - add r0, r0, #0x1 - ldmia sp!, {lr} - bx lr -_020EB3D0: - cmn r2, lr - addne r0, r0, #0x1 - ldmia sp!, {lr} - bx lr -_020EB3E0: - mov r0, r1 - b _020EB3F8 -_020EB3E8: - mov r0, #0xff000000 - orr r0, lr, r0, lsr #0x1 - ldmia sp!, {lr} - bx lr -_020EB3F8: - mvn r0, #0x80000000 - ldmia sp!, {lr} - bx lr -_020EB404: - mvn r0, #0x80000000 - ldmia sp!, {lr} - bx lr -_020EB410: - tst r0, #0x80000000 - mov r0, #0xff000000 - movne r0, r0, asr #0x1 - moveq r0, r0, lsr #0x1 - ldmia sp!, {lr} - bx lr -_020EB428: - ldmia sp!, {lr} - bx lr -_020EB430: - mov r0, lr - ldmia sp!, {lr} - bx lr -_f2d: - and r2, r0, #0x80000000 - mov r12, r0, lsr #0x17 - mov r3, r0, lsl #0x9 - ands r12, r12, #0xff - beq _020EB46C - cmp r12, #0xff - beq _020EB498 -_020EB458: - add r12, r12, #0x380 - mov r0, r3, lsl #0x14 - orr r1, r2, r3, lsr #0xc - orr r1, r1, r12, lsl #0x14 - bx lr -_020EB46C: - cmp r3, #0x0 - bne _020EB480 - mov r1, r2 - mov r0, #0x0 - bx lr -_020EB480: - mov r3, r3, lsr #0x1 - clz r12, r3 - movs r3, r3, lsl r12 - rsb r12, r12, #0x1 - add r3, r3, r3 - b _020EB458 -_020EB498: - cmp r3, #0x0 - bhi _020EB4B0 - ldr r1, _020EB4BC ; =0x7FF00000 - orr r1, r1, r2 - mov r0, #0x0 - bx lr -_020EB4B0: - mvn r0, #0x0 - bic r1, r0, #0x80000000 - bx lr - .balign 4 -_020EB4BC: .word 0x7FF00000 - - arm_func_start _ffix -_ffix: ; 0x020EB4C0 - bic r1, r0, #0x80000000 - mov r2, #0x9e - subs r2, r2, r1, lsr #0x17 - ble _020EB4E8 - mov r1, r1, lsl #0x8 - orr r1, r1, #0x80000000 - cmp r0, #0x0 - mov r0, r1, lsr r2 - rsbmi r0, r0, #0x0 - bx lr -_020EB4E8: - mvn r0, r0, asr #0x1f - add r0, r0, #0x80000000 - bx lr - - arm_func_start _ffixu -_ffixu: ; 0x020EB4F4 - tst r0, #0x80000000 - bne _020EB518 - mov r1, #0x9e - subs r1, r1, r0, lsr #0x17 - blt _020EB52C - mov r2, r0, lsl #0x8 - orr r0, r2, #0x80000000 - mov r0, r0, lsr r1 - bx lr -_020EB518: - mov r2, #0xff000000 - cmp r2, r0, lsl #0x1 - movcs r0, #0x0 - mvncc r0, #0x0 - bx lr -_020EB52C: - mvn r0, #0x0 - bx lr - - arm_func_start _fflt -_fflt: ; 0x020EB534 - ands r2, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r0, #0x0 - bxeq lr - clz r3, r0 - movs r0, r0, lsl r3 - rsb r3, r3, #0x9e - ands r1, r0, #0xff - add r0, r0, r0 - orr r0, r2, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bxeq lr - tst r1, #0x80 - bxeq lr - ands r3, r1, #0x7f - andeqs r3, r0, #0x1 - addne r0, r0, #0x1 - bx lr - - arm_func_start _ffltu -_ffltu: ; 0x020EB57C - cmp r0, #0x0 - bxeq lr - mov r3, #0x9e - bmi _020EB598 - clz r12, r0 - movs r0, r0, lsl r12 - sub r3, r3, r12 -_020EB598: - ands r2, r0, #0xff - add r0, r0, r0 - mov r0, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bxeq lr - tst r2, #0x80 - bxeq lr - ands r1, r2, #0x7f - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr - - arm_func_start _fmul -_fmul: ; 0x020EB5C4 - eor r2, r0, r1 - and r2, r2, #0x80000000 - mov r12, #0xff - ands r3, r12, r0, lsr #0x17 - mov r0, r0, lsl #0x8 - cmpne r3, #0xff - beq _020EB640 - orr r0, r0, #0x80000000 - ands r12, r12, r1, lsr #0x17 - mov r1, r1, lsl #0x8 - cmpne r12, #0xff - beq _020EB680 - orr r1, r1, #0x80000000 -_020EB5F8: - add r12, r3, r12 - umull r1, r3, r0, r1 - movs r0, r3 - addpl r0, r0, r0 - subpl r12, r12, #0x1 - subs r12, r12, #0x7f - bmi _020EB70C - cmp r12, #0xfe - bge _020EB778 - ands r3, r0, #0xff - orr r0, r2, r0, lsr #0x8 - add r0, r0, r12, lsl #0x17 - tst r3, #0x80 - bxeq lr - orrs r1, r1, r3, lsl #0x19 - andeqs r3, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EB640: - cmp r3, #0x0 - beq _020EB694 - movs r0, r0, lsl #0x1 - bne _020EB768 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EB674 - cmp r12, #0xff - blt _020EB75C - cmp r1, #0x0 - beq _020EB75C - b _020EB768 -_020EB674: - cmp r1, #0x0 - beq _020EB770 - b _020EB75C -_020EB680: - cmp r12, #0x0 - beq _020EB6F0 -_020EB688: - movs r1, r1, lsl #0x1 - bne _020EB768 - b _020EB75C -_020EB694: - movs r0, r0, lsl #0x1 - beq _020EB6CC - mov r0, r0, lsr #0x1 - clz r3, r0 - movs r0, r0, lsl r3 - rsb r3, r3, #0x1 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x8 - ands r12, r12, #0xff - beq _020EB6F0 - cmp r12, #0xff - beq _020EB688 - orr r1, r1, #0x80000000 - b _020EB5F8 -_020EB6CC: - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EB79C - cmp r12, #0xff - blt _020EB79C - cmp r1, #0x0 - beq _020EB770 - b _020EB768 -_020EB6F0: - movs r1, r1, lsl #0x1 - beq _020EB79C - mov r1, r1, lsr #0x1 - clz r12, r1 - movs r1, r1, lsl r12 - rsb r12, r12, #0x1 - b _020EB5F8 -_020EB70C: - cmn r12, #0x18 - beq _020EB754 - bmi _020EB794 - cmp r1, #0x0 - orrne r0, r0, #0x1 - mov r3, r0 - mov r0, r0, lsr #0x8 - rsb r12, r12, #0x0 - orr r0, r2, r0, lsr r12 - rsb r12, r12, #0x18 - movs r1, r3, lsl r12 - bxeq lr - tst r1, #0x80000000 - bxeq lr - movs r1, r1, lsl #0x1 - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EB754: - mov r0, r0, lsl #0x1 - b _020EB784 -_020EB75C: - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020EB768: - mvn r0, #0x80000000 - bx lr -_020EB770: - mvn r0, #0x80000000 - bx lr -_020EB778: - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020EB784: - movs r1, r0 - mov r0, r2 - addne r0, r0, #0x1 - bx lr -_020EB794: - mov r0, r2 - bx lr -_020EB79C: - mov r0, r2 - bx lr - - arm_func_start _frsb -_frsb: ; 0x020EB7A4 - eor r0, r0, r1 - eor r1, r0, r1 - eor r0, r0, r1 - - arm_func_start _fsub -_fsub: ; 0x020EB7B0 - eors r2, r0, r1 - eormi r1, r1, #0x80000000 - bmi _020EA98C -_020EB7BC: - subs r12, r0, r1 - eorcc r12, r12, #0x80000000 - subcc r0, r0, r12 - addcc r1, r1, r12 - mov r2, #0x80000000 - mov r3, r0, lsr #0x17 - orr r0, r2, r0, lsl #0x8 - ands r12, r3, #0xff - cmpne r12, #0xff - beq _020EB8D8 - mov r12, r1, lsr #0x17 - orr r1, r2, r1, lsl #0x8 - ands r2, r12, #0xff - beq _020EB918 -_020EB7F4: - subs r12, r3, r12 - beq _020EB83C - rsb r2, r12, #0x20 - movs r2, r1, lsl r2 - mov r1, r1, lsr r12 - orrne r1, r1, #0x1 - subs r0, r0, r1 - bpl _020EB880 - ands r1, r0, #0xff - add r0, r0, r0 - mov r0, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - tst r1, #0x80 - bxeq lr - ands r1, r1, #0x7f - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EB83C: - subs r0, r0, r1 - beq _020EB9E4 - mov r2, r3, lsl #0x17 - and r2, r2, #0x80000000 - bic r3, r3, #0x100 - clz r12, r0 - movs r0, r0, lsl r12 - sub r3, r3, r12 - cmp r3, #0x0 - bgt _020EB870 - rsb r3, r3, #0x9 - orr r0, r2, r0, lsr r3 - bx lr -_020EB870: - add r0, r0, r0 - orr r0, r2, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bx lr -_020EB880: - mov r2, r3, lsl #0x17 - and r2, r2, #0x80000000 - bic r3, r3, #0x100 - clz r12, r0 - movs r0, r0, lsl r12 - sub r3, r3, r12 - cmp r3, #0x0 - bgt _020EB8AC - rsb r3, r3, #0x9 - orr r0, r2, r0, lsr r3 - bx lr -_020EB8AC: - ands r1, r0, #0xff - add r0, r0, r0 - orr r0, r2, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bxeq lr - tst r1, #0x80 - bxeq lr - ands r1, r1, #0x7f - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EB8D8: - cmp r3, #0x100 - movge r2, #0x80000000 - movlt r2, #0x0 - ands r3, r3, #0xff - beq _020EB940 - movs r0, r0, lsl #0x1 - bne _020EBA18 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EBA0C - cmp r12, #0xff - blt _020EBA0C - cmp r1, #0x0 - beq _020EBA20 - b _020EBA18 -_020EB918: - cmp r12, #0x100 - movge r2, #0x80000000 - movlt r2, #0x0 - and r3, r3, #0xff - ands r12, r12, #0xff - beq _020EB9A8 -_020EB930: - eor r2, r2, #0x80000000 - movs r1, r1, lsl #0x1 - bne _020EBA18 - b _020EBA0C -_020EB940: - movs r0, r0, lsl #0x1 - beq _020EB978 - mov r0, r0, lsr #0x1 - mov r3, #0x1 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x8 - ands r12, r12, #0xff - beq _020EB9A8 - cmp r12, #0xff - beq _020EB930 - orr r1, r1, #0x80000000 - orr r3, r3, r2, lsr #0x17 - orr r12, r12, r2, lsr #0x17 - b _020EB7F4 -_020EB978: - mov r3, r1, lsr #0x17 - mov r0, r1, lsl #0x9 - ands r2, r3, #0xff - beq _020EB99C - cmp r2, #0xff - blt _020EB9C4 - cmp r0, #0x0 - bne _020EBA04 - b _020EBA0C -_020EB99C: - cmp r0, #0x0 - beq _020EB9E4 - b _020EB9C4 -_020EB9A8: - movs r1, r1, lsl #0x1 - beq _020EB9CC - mov r1, r1, lsr #0x1 - mov r12, #0x1 - orr r12, r12, r2, lsr #0x17 - orr r3, r3, r2, lsr #0x17 - b _020EB7F4 -_020EB9C4: - mov r0, r1 - bx lr -_020EB9CC: - cmp r0, #0x0 - subges r3, r3, #0x1 - add r0, r0, r0 - orr r0, r2, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bx lr -_020EB9E4: - mov r0, #0x0 - bx lr -_020EB9EC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x30, 0x53, 0xA2, 0x00, 0x00, 0x80, 0xE0, 0xA0, 0x04, 0xA0, 0xE1, 0x83, 0x0B, 0x80, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1 -_020EBA04: - mvn r0, #0x80000000 - bx lr -_020EBA0C: - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020EBA18: - mvn r0, #0x80000000 - bx lr -_020EBA20: - mvn r0, #0x80000000 - bx lr - - arm_func_start _ll_mod -_ll_mod: ; 0x020EBA28 - stmdb sp!, {r4-r7,r11-r12,lr} - mov r4, r1 - orr r4, r4, #0x1 - b _020EBA48 - - arm_func_start _ll_sdiv -_ll_sdiv: ; 0x020EBA38 - stmdb sp!, {r4-r7,r11-r12,lr} - eor r4, r1, r3 - mov r4, r4, asr #0x1 - mov r4, r4, lsl #0x1 -_020EBA48: - orrs r5, r3, r2 - bne _020EBA58 - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr -_020EBA58: - mov r5, r0, lsr #0x1f - add r5, r5, r1 - mov r6, r2, lsr #0x1f - add r6, r6, r3 - orrs r6, r5, r6 - bne _020EBA8C - mov r1, r2 - bl _s32_div_f - ands r4, r4, #0x1 - movne r0, r1 - mov r1, r0, asr #0x1f - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr -_020EBA8C: - cmp r1, #0x0 - bge _020EBA9C - rsbs r0, r0, #0x0 - rsc r1, r1, #0x0 -_020EBA9C: - cmp r3, #0x0 - bge _020EBAAC - rsbs r2, r2, #0x0 - rsc r3, r3, #0x0 -_020EBAAC: - orrs r5, r1, r0 - beq _020EBBD0 - mov r5, #0x0 - mov r6, #0x1 - cmp r3, #0x0 - bmi _020EBAD8 -_020EBAC4: - add r5, r5, #0x1 - adds r2, r2, r2 - adcs r3, r3, r3 - bpl _020EBAC4 - add r6, r6, r5 -_020EBAD8: - cmp r1, #0x0 - blt _020EBAF8 -_020EBAE0: - cmp r6, #0x1 - beq _020EBAF8 - sub r6, r6, #0x1 - adds r0, r0, r0 - adcs r1, r1, r1 - bpl _020EBAE0 -_020EBAF8: - mov r7, #0x0 - mov r12, #0x0 - mov r11, #0x0 - b _020EBB20 -_020EBB08: - orr r12, r12, #0x1 - subs r6, r6, #0x1 - beq _020EBB78 - adds r0, r0, r0 - adcs r1, r1, r1 - adcs r7, r7, r7 -_020EBB20: - subs r0, r0, r2 - sbcs r1, r1, r3 - sbcs r7, r7, #0x0 - adds r12, r12, r12 - adc r11, r11, r11 - cmp r7, #0x0 - bge _020EBB08 -_020EBB3C: - subs r6, r6, #0x1 - beq _020EBB70 - adds r0, r0, r0 - adcs r1, r1, r1 - adc r7, r7, r7 - adds r0, r0, r2 - adcs r1, r1, r3 - adc r7, r7, #0x0 - adds r12, r12, r12 - adc r11, r11, r11 - cmp r7, #0x0 - bge _020EBB08 - b _020EBB3C -_020EBB70: - adds r0, r0, r2 - adc r1, r1, r3 -_020EBB78: - ands r7, r4, #0x1 - moveq r0, r12 - moveq r1, r11 - beq _020EBBB0 - subs r7, r5, #0x20 - movge r0, r1, lsr r7 - bge _020EBBD4 - rsb r7, r5, #0x20 - mov r0, r0, lsr r5 - orr r0, r0, r1, lsl r7 - mov r1, r1, lsr r5 - b _020EBBB0 -_020EBBA8: - .byte 0x31, 0x07, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 -_020EBBB0: - cmp r4, #0x0 - blt _020EBBC0 - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr -_020EBBC0: - rsbs r0, r0, #0x0 - rsc r1, r1, #0x0 - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr -_020EBBD0: - mov r0, #0x0 -_020EBBD4: - mov r1, #0x0 - cmp r4, #0x0 - blt _020EBBC0 - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr - - arm_func_start _ll_udiv -_ll_udiv: ; 0x020EBBE8 - stmdb sp!, {r4-r7,r11-r12,lr} - mov r4, #0x0 - b _020EBBFC - - arm_func_start _ull_mod -_ull_mod: ; 0x020EBBF4 - stmdb sp!, {r4-r7,r11-r12,lr} - mov r4, #0x1 -_020EBBFC: - orrs r5, r3, r2 - bne _020EBC0C - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr -_020EBC0C: - orrs r5, r1, r3 - bne _020EBAAC - mov r1, r2 - bl _u32_div_not_0_f -_020EBC1C: - .byte 0x00, 0x00, 0x54, 0xE3 - .byte 0x01, 0x00, 0xA0, 0x11, 0x00, 0x10, 0xA0, 0xE3, 0xF0, 0x58, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start _ll_mul -_ll_mul: ; 0x020EBC30 - stmdb sp!, {r4-r5,lr} - umull r5, r4, r0, r2 - mla r4, r0, r3, r4 - mla r4, r2, r1, r4 - mov r1, r4 - mov r0, r5 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start _ll_shl -_ll_shl: ; 0x020EBC50 - ands r2, r2, #0x3f - bxeq lr - subs r3, r2, #0x20 - bge _020EBC74 - rsb r3, r2, #0x20 - mov r1, r1, lsl r2 - orr r1, r1, r0, lsr r3 - mov r0, r0, lsl r2 - bx lr -_020EBC74: - mov r1, r0, lsl r3 - mov r0, #0x0 - bx lr - - arm_func_start _s32_div_f -_s32_div_f: ; 0x20EBC80 - ; Test whether the args have different signs - eor ip, r0, r1 - and ip, ip, #0x80000000 - ; Test the sign of the numerator, and make it positive - cmp r0, #0x0 - rsblt r0, r0, #0x0 - addlt ip, ip, #1 - ; Make the denominator positive, also test for div0 - cmp r1, #0x0 - rsblt r1, r1, #0x0 - beq _020EBE78 - ; If the numerator is less than the denominator, return (0, numerator) - cmp r0, r1 - movcc r1, r0 - movcc r0, #0x0 - bcc _020EBE78 - ; Do the actual division - mov r2, #0x1c - mov r3, r0, lsr #0x4 - cmp r1, r3, lsr #0xc - suble r2, r2, #0x10 - movle r3, r3, lsr #0x10 - cmp r1, r3, lsr #0x4 - suble r2, r2, #0x8 - movle r3, r3, lsr #0x8 - cmp r1, r3 - suble r2, r2, #0x4 - movle r3, r3, lsr #0x4 - mov r0, r0, lsl r2 - rsb r1, r1, #0x0 - adds r0, r0, r0 - add r2, r2, r2, lsl #0x1 - add pc, pc, r2, lsl #0x2 - nop - .rept 32 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - .endr - mov r1, r3 -_020EBE78: - ; If the signs differed originally, negate quotient - ands r3, ip, #0x80000000 - rsbne r0, r0, #0x0 - ; If the numerator was negative, negate remainder - ands r3, ip, #0x1 - rsbne r1, r1, #0x0 - bx lr - -; required to make the linker happy : - - arm_func_start _u32_div_f -_u32_div_f: ; 0x020EBE8C - cmp r1, #0x0 - bxeq lr ; About as wrong as we can be - arm_func_start _u32_div_not_0_f -_u32_div_not_0_f: - cmp r0, r1 - movcc r1, r0 - movcc r0, #0x0 - bxcc lr - mov r2, #0x1c - mov r3, r0, lsr #0x4 - cmp r1, r3, lsr #0xc - suble r2, r2, #0x10 - movle r3, r3, lsr #0x10 - cmp r1, r3, lsr #0x4 - suble r2, r2, #0x8 - movle r3, r3, lsr #0x8 - cmp r1, r3 - suble r2, r2, #0x4 - movle r3, r3, lsr #0x4 - mov r0, r0, lsl r2 - rsb r1, r1, #0x0 - adds r0, r0, r0 - add r2, r2, r2, lsl #0x1 - add pc, pc, r2, lsl #0x2 - nop - .rept 32 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - .endr - mov r1, r3 - bx lr - - arm_func_start _drdiv -_drdiv: ; 0x020EC070 - eor r1, r1, r3 - eor r3, r1, r3 - eor r1, r1, r3 - eor r0, r0, r2 - eor r2, r0, r2 - eor r0, r0, r2 - - arm_func_start _ddiv -_ddiv: ; 0x020EC088 - stmdb sp!, {r4-r6,lr} - ldr lr, _020EC5C8 ; =0x00000FFE - eor r4, r1, r3 - ands r12, lr, r1, lsr #0x13 - cmpne r12, lr - beq _020EC434 - bic r1, r1, lr, lsl #0x14 - orr r1, r1, #0x100000 - add r12, r12, r4, lsr #0x1f -_020EC0AC: - ands r4, lr, r3, lsr #0x13 - cmpne r4, lr - beq _020EC4CC - bic r3, r3, lr, lsl #0x14 - orr r3, r3, #0x100000 -_020EC0C0: - sub r12, r12, r4 - cmp r1, r3 - cmpeq r0, r2 - bhs _020EC0DC - adds r0, r0, r0 - adc r1, r1, r1 - sub r12, r12, #0x2 -_020EC0DC: - sub r4, pc, #0x24 - ldrb lr, [r4, r3, lsr #0xc] - rsbs r2, r2, #0x0 - rsc r3, r3, #0x0 - mov r4, #0x20000000 - mla r5, lr, r3, r4 - mov r6, r3, lsl #0xa - mov r5, r5, lsr #0x7 - mul lr, r5, lr - orr r6, r6, r2, lsr #0x16 - mov lr, lr, lsr #0xd - mul r5, lr, r6 - mov r6, r1, lsl #0xa - orr r6, r6, r0, lsr #0x16 - mov r5, r5, lsr #0x10 - mul r5, lr, r5 - mov lr, lr, lsl #0xe - add lr, lr, r5, lsr #0x10 - umull r5, r6, lr, r6 - umull r4, r5, r6, r2 - mla r5, r3, r6, r5 - mov r4, r4, lsr #0x1a - orr r4, r4, r5, lsl #0x6 - add r4, r4, r0, lsl #0x2 - umull lr, r5, r4, lr - mov r4, #0x0 - adds r5, r5, r6, lsl #0x18 - adc r4, r4, r6, lsr #0x8 - cmp r12, #0x800 - bge _020EC2C0 - add r12, r12, #0x7f0 - adds r12, r12, #0xc - bmi _020EC2D8 - orr r1, r4, r12, lsl #0x1f - bic r12, r12, #0x1 - add r1, r1, r12, lsl #0x13 - tst lr, #0x80000000 - bne _020EC1B0 - rsbs r2, r2, #0x0 - mov r4, r4, lsl #0x1 - add r4, r4, r5, lsr #0x1f - mul lr, r2, r4 - mov r6, #0x0 - mov r4, r5, lsl #0x1 - orr r4, r4, #0x1 - umlal r6, lr, r4, r2 - rsc r3, r3, #0x0 - mla lr, r4, r3, lr - cmp lr, r0, lsl #0x15 - bmi _020EC1B0 - mov r0, r5 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC1B0: - adds r0, r5, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC1C0: - .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1 - .byte 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4 - .byte 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE, 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8 - .byte 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2, 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD - .byte 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8, 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3 - .byte 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF, 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA - .byte 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6, 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2 - .byte 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF, 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB - .byte 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4 - .byte 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1, 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E - .byte 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98 - .byte 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92 - .byte 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90, 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D - .byte 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89 - .byte 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84 - .byte 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80 -_020EC2C0: - movs r1, r12, lsl #0x1f - orr r1, r1, #0x7f000000 - orr r1, r1, #0xf00000 - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC2D8: - mvn r6, r12, asr #0x1 - cmp r6, #0x34 - bgt _020EC424 - beq _020EC400 - cmp r6, #0x14 - bge _020EC320 - rsb r6, r6, #0x13 - mov lr, r0, lsl r6 - rsb r6, r6, #0x14 - mov r0, r5, lsr r6 - rsb r6, r6, #0x20 - orr r0, r0, r4, lsl r6 - rsb r6, r6, #0x20 - mov r4, r4, lsr r6 - orr r1, r4, r12, lsl #0x1f - mov r12, lr - mov lr, #0x0 - b _020EC350 -_020EC320: - rsb r6, r6, #0x33 - mov lr, r1, lsl r6 - mov r1, r12, lsl #0x1f - rsb r6, r6, #0x20 - orr r12, lr, r0, lsr r6 - rsb r6, r6, #0x20 - mov lr, r0, lsl r6 - mov r5, r5, lsr #0x15 - orr r5, r5, r4, lsl #0xb - rsb r6, r6, #0x1f - mov r0, r5, lsr r6 - mov r4, #0x0 -_020EC350: - rsbs r2, r2, #0x0 - mul r4, r2, r4 - mov r5, #0x0 - umlal r5, r4, r2, r0 - rsc r3, r3, #0x0 - mla r4, r0, r3, r4 - cmp r4, r12 - cmpeq r5, lr - ldmeqia sp!, {r4-r6,lr} - bxeq lr - adds r5, r5, r2 - adc r4, r4, r3 - cmp r4, r12 - bmi _020EC3F4 - bne _020EC398 - cmp r5, lr - beq _020EC3E4 - blo _020EC3F4 -_020EC398: - subs r5, r5, r2 - sbc r4, r4, r3 -_020EC3A0: - adds r5, r5, r5 - adc r4, r4, r4 - adds r5, r5, r2 - adc r4, r4, r3 - adds lr, lr, lr - adc r12, r12, r12 - cmp r4, r12 - bmi _020EC3E4 - ldmneia sp!, {r4-r6,lr} - bxne lr - cmp r5, lr - blo _020EC3E4 - ldmneia sp!, {r4-r6,lr} - bxne lr - tst r0, #0x1 - ldmeqia sp!, {r4-r6,lr} - bxeq lr -_020EC3E4: - adds r0, r0, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC3F4: - adds r0, r0, #0x1 - adc r1, r1, #0x0 - b _020EC3A0 -_020EC400: - rsbs r2, r2, #0x0 - rsc r3, r3, #0x0 - cmp r1, r3 - cmpeq r0, r2 - mov r1, r12, lsl #0x1f - mov r0, #0x0 - movne r0, #0x1 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC424: - mov r1, r12, lsl #0x1f - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC434: - orrs r5, r0, r1, lsl #0x1 - beq _020EC558 - cmp r12, lr - beq _020EC49C - movs r1, r1, lsl #0xc - beq _020EC478 - clz r5, r1 - movs r1, r1, lsl r5 - sub r12, r12, r5 - add r5, r12, #0x1f - mov r1, r1, lsr #0xb - orr r1, r1, r0, lsr r5 - rsb r5, r5, #0x20 - mov r0, r0, lsl r5 - mov r12, r12, lsl #0x1 - orr r12, r12, r4, lsr #0x1f - b _020EC0AC -_020EC478: - mvn r12, #0x13 - clz r5, r0 - movs r0, r0, lsl r5 - sub r12, r12, r5 - mov r1, r0, lsr #0xb - mov r0, r0, lsl #0x15 - mov r12, r12, lsl #0x1 - orr r12, r12, r4, lsr #0x1f - b _020EC0AC -_020EC49C: - orrs r5, r0, r1, lsl #0xc - bne _020EC580 - bic r5, r3, #0x80000000 - cmp r5, lr, lsl #0x13 - bhs _020EC4C0 - and r5, r3, #0x80000000 - eor r1, r5, r1 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC4C0: - orrs r5, r2, r3, lsl #0xc - bne _020EC5A0 - b _020EC5B8 -_020EC4CC: - orrs r5, r2, r3, lsl #0x1 - beq _020EC544 - cmp r4, lr - beq _020EC52C - movs r3, r3, lsl #0xc - beq _020EC50C - clz r5, r3 - movs r3, r3, lsl r5 - sub r4, r4, r5 - add r5, r4, #0x1f - mov r3, r3, lsr #0xb - orr r3, r3, r2, lsr r5 - rsb r5, r5, #0x20 - mov r2, r2, lsl r5 - mov r4, r4, lsl #0x1 - b _020EC0C0 -_020EC50C: - mvn r4, #0x13 - clz r5, r2 - movs r2, r2, lsl r5 - sub r4, r4, r5 - mov r3, r2, lsr #0xb - mov r2, r2, lsl #0x15 - mov r4, r4, lsl #0x1 - b _020EC0C0 -_020EC52C: - orrs r5, r2, r3, lsl #0xc - bne _020EC5A0 - mov r1, r12, lsl #0x1f - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC544: - mov r1, r12, lsl #0x1f - orr r1, r1, lr, lsl #0x13 - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC558: - orrs r5, r2, r3, lsl #0x1 - beq _020EC5B8 - bic r5, r3, #0x80000000 - cmp r5, lr, lsl #0x13 - cmpeq r2, #0x0 - bhi _020EC5A0 - eor r1, r1, r3 - and r1, r1, #0x80000000 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC580: - tst r1, #0x80000 - beq _020EC5B8 - bic r5, r3, #0x80000000 - cmp r5, lr, lsl #0x13 - cmpeq r2, #0x0 - bhi _020EC5A0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC5A0: - tst r3, #0x80000 - beq _020EC5B8 - mov r1, r3 - mov r0, r2 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC5B8: - orr r1, r1, #0x7f000000 - orr r1, r1, #0xf80000 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020EC5C8: .word 0x00000FFE - - arm_func_start _fp_init -_fp_init: ; 0x020EC5CC - bx lr - - arm_func_start sys_writec -sys_writec: ; 0x020EC5D0 - str lr, [sp, #-0x4]! - mov r1, r0 - mov r0, #0x3 - swi 0x123456 - ldr pc, [sp], #0x4 - - arm_func_start sys_readc -sys_readc: ; 0x020EC5E4 - str lr, [sp, #-0x4]! - mov r1, #0x0 - mov r0, #0x7 - swi 0x123456 - ldr pc, [sp], #0x4 - - arm_func_start sys_exit -sys_exit: ; 0x020EC5F8 - mov r1, #0x0 - mov r0, #0x18 - swi 0x123456 - mov pc, lr - - arm_func_start __read_console -__read_console: ; 0x020EC608 - stmdb sp!, {r3-r7,lr} - mov r6, r2 - ldr r5, [r6, #0x0] - mov r7, r1 - cmp r5, #0x0 - mov r4, #0x0 - bls _020EC650 -_020EC624: - bl sys_readc - and r1, r0, #0xff - cmp r1, #0xd - strb r0, [r7, r4] - cmpne r1, #0xa - addeq r0, r4, #0x1 - streq r0, [r6, #0x0] - beq _020EC650 - add r4, r4, #0x1 - cmp r4, r5 - blo _020EC624 -_020EC650: - mov r0, #0x0 - ldmia sp!, {r3-r7,pc} - - arm_func_start __write_console -__write_console: ; 0x020EC658 - stmdb sp!, {r4-r6,lr} - ldr r5, [r2, #0x0] - mov r6, r1 - cmp r5, #0x0 - mov r4, #0x0 - bls _020EC684 -_020EC670: - add r0, r6, r4 - bl sys_writec - add r4, r4, #0x1 - cmp r4, r5 - blo _020EC670 -_020EC684: - mov r0, #0x0 - ldmia sp!, {r4-r6,pc} - - arm_func_start __close_console -__close_console: ; 0x020EC68C - mov r0, #0x0 - bx lr - - arm_func_start __call_static_initializers -__call_static_initializers: ; 0x020EC694 - stmdb sp!, {r4,lr} - ldr r4, _020EC6BC ; =0x02104774 - b _020EC6A8 -_020EC6A0: - blx r0 - add r4, r4, #0x4 -_020EC6A8: - cmp r4, #0x0 - ldrne r0, [r4, #0x0] - cmpne r0, #0x0 - bne _020EC6A0 - ldmia sp!, {r4,pc} - .balign 4 -_020EC6BC: .word 0x02104774 - - arm_func_start __destroy_global_chain -__destroy_global_chain: ; 0x020EC6C0 - stmdb sp!, {r3-r5,lr} - ldr r4, _020EC700 ; =0x021D74C8 - ldr r2, [r4, #0x0] - cmp r2, #0x0 - ldmeqia sp!, {r3-r5,pc} -_020EC6D4: - .byte 0x00, 0x50, 0xE0, 0xE3, 0x00, 0x00, 0x92, 0xE5, 0x05, 0x10, 0xA0, 0xE1 - .byte 0x00, 0x00, 0x84, 0xE5, 0x08, 0x00, 0x92, 0xE5, 0x04, 0x20, 0x92, 0xE5, 0x32, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x20, 0x94, 0xE5, 0x00, 0x00, 0x52, 0xE3, 0xF6, 0xFF, 0xFF, 0x1A, 0x38, 0x80, 0xBD, 0xE8 -_020EC700: .word 0x021D74C8 - - arm_func_start _ExitProcess -_ExitProcess: ; 0x020EC704 - ldr ip, _020EC70C ; =sys_exit - bx r12 - .balign 4 -_020EC70C: .word sys_exit diff --git a/global.inc b/global.inc index dfb91f39..d20893e3 100644 --- a/global.inc +++ b/global.inc @@ -397,11 +397,11 @@ .extern PM_GoSleepMode .extern PM_GetBackLight .extern FUN_020D5150 -.extern FUN_020D5168 -.extern FUN_020D5180 +.extern PM_SetAmp +.extern PM_ForceToPowerOff .extern FUN_020D526C .extern FUN_020D5F40 -.extern FUN_020D614C +.extern FUNRTC_Init .extern FUN_020D6320 .extern FUN_020D6578 .extern FUN_020D660C @@ -1036,3 +1036,13 @@ .extern _ddiv .extern _s32_div_f .extern _u32_div_not_0_f +.extern OS_Halt +.extern OS_InitMutex +.extern PM_SetLCDPower +.extern PMi_SendPxiData +.extern _ll_mod +.extern RTC_Init +.extern OS_JamMessage +.extern MI_DmaFill32 +.extern OS_InitMessageQueue +.extern RTC_GetTime diff --git a/pokediamond.lcf b/pokediamond.lcf index b3c98bb9..bfbb2669 100644 --- a/pokediamond.lcf +++ b/pokediamond.lcf @@ -383,7 +383,11 @@ SECTIONS { unk_020023C0.o (.text) rom1.5.o (.text) unk_020C9C0C.o (.text) - unk_020D5150.o (.text) + PM_arm9.o (.text) + RTC_arm9.o (.text) + CARD_arm9.o (.text) + WM_arm9.o (.text) + rom2dism.o (.text) rom2.o (.data) string_util.o (.data) rom2_2.o (.text) diff --git a/undefined_syms.txt b/undefined_syms.txt index a5a51eb5..d5641e7f 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -291,8 +291,6 @@ FUN_020C94E8 = 0x020C94E8; FUN_020C9550 = 0x020C9550; OS_SpinWait = 0x020CD380; FUN_020D5150 = 0x020D5150; -FUN_020D5168 = 0x020D5168; -FUN_020D5180 = 0x020D5180; FUN_020D526C = 0x020D526C; PMi_SetLED = 0x020D5338; PMi_SetLEDAsync = 0x020D5374; @@ -302,7 +300,7 @@ PM_Init = 0x020D5764; PMi_WaitBusy = 0x020D5884; PMi_Lock = 0x020D58C4; FUN_020D5F40 = 0x020D5F40; -FUN_020D614C = 0x020D614C; +FUNRTC_Init = 0x020D614C; FUN_020D6320 = 0x020D6320; FUN_020D6578 = 0x020D6578; FUN_020D660C = 0x020D660C; -- cgit v1.2.3 From 0a26578d1a34ebb557d8704b90beec7874d146f0 Mon Sep 17 00:00:00 2001 From: Demki Date: Thu, 23 Apr 2020 03:37:04 +0300 Subject: dism CTRDG, and MATH --- asm/CTRDG_arm9.s | 3238 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ asm/MATH_arm9.s | 320 ++++++ asm/rom2dism.s | 3105 --------------------------------------------------- global.inc | 6 + pokediamond.lcf | 2 + 5 files changed, 3566 insertions(+), 3105 deletions(-) create mode 100644 asm/CTRDG_arm9.s create mode 100644 asm/MATH_arm9.s diff --git a/asm/CTRDG_arm9.s b/asm/CTRDG_arm9.s new file mode 100644 index 00000000..02592388 --- /dev/null +++ b/asm/CTRDG_arm9.s @@ -0,0 +1,3238 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CTRDG_CheckEnabled +CTRDG_CheckEnabled: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CTRDG_IsOptionCartridge +_020DB128: ; 0x020DB128 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl CTRDG_IsEnabled +_020DB13C: ; 0x020DB13C + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_Enable +CTRDG_Enable: ; 0x020DB15C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020DB1AC ; =0x021D6940 + mov r4, r0 + str r5, [r1, #0x0] + bl CTRDG_IsOptionCartridge +_020DB17C: ; 0x020DB17C + cmp r0, #0x0 + bne _020DB198 + cmp r5, #0x0 + movne r1, #0x1000 + moveq r1, #0x5000 + mov r0, #0xf000 + bl OS_SetDPermissionsForProtectionRegion +_020DB198: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DB1AC: .word 0x021D6940 + + arm_func_start CTRDG_IsEnabled +CTRDG_IsEnabled: + ldr r0, _020DB1BC ; =0x021D6940 + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020DB1BC: .word 0x021D6940 + + arm_func_start CTRDGi_AccessCommon +CTRDGi_AccessCommon: ; 0x020DB1C0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl CTRDG_IsExisting +_020DB1DC: ; 0x020DB1DC + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + bl CTRDG_CheckEnabled + ldr r0, _020DB2BC ; =0x021D6944 + ldrh r0, [r0, #0x2] + bl OS_LockCartridge + cmp r4, #0x21 + bhi _020DB240 + cmp r4, #0x21 + bhs _020DB270 + cmp r4, #0x11 + bhi _020DB234 + cmp r4, #0x10 + blo _020DB294 + cmp r4, #0x10 + beq _020DB290 + cmp r4, #0x11 + beq _020DB260 + b _020DB294 +_020DB234: + cmp r4, #0x20 + streqh r6, [r7, #0x0] + b _020DB294 +_020DB240: + cmp r4, #0x40 + bhi _020DB254 + cmp r4, #0x40 + streq r6, [r7, #0x0] + b _020DB294 +_020DB254: + cmp r4, #0x41 + beq _020DB280 + b _020DB294 +_020DB260: + cmp r5, #0x0 + ldrneb r0, [r7, #0x0] + strneb r0, [r5, #0x0] + b _020DB294 +_020DB270: + cmp r5, #0x0 + ldrneh r0, [r7, #0x0] + strneh r0, [r5, #0x0] + b _020DB294 +_020DB280: + cmp r5, #0x0 + ldrne r0, [r7, #0x0] + strne r0, [r5, #0x0] + b _020DB294 +_020DB290: + strb r6, [r7, #0x0] +_020DB294: + ldr r0, _020DB2BC ; =0x021D6944 + ldrh r0, [r0, #0x2] + bl OS_UnlockCartridge + bl CTRDG_IsExisting +_020DB2A4: ; 0x020DB2A4 + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DB2BC: .word 0x021D6944 + + arm_func_start CTRDG_Read32 +CTRDG_Read32: ; 0x020DB2C0 + ldr ip, _020DB2D4 ; =CTRDGi_AccessCommon + mov r2, r1 + mov r1, #0x0 + mov r3, #0x41 + bx r12 + .balign 4 +_020DB2D4: .word CTRDGi_AccessCommon + + arm_func_start CTRDGi_CopyCommon +CTRDGi_CopyCommon: ; 0x020DB2D8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl CTRDG_IsExisting +_020DB2F4: ; 0x020DB2F4 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + bl CTRDG_CheckEnabled + ldr r0, _020DB42C ; =0x021D6944 + ldrh r0, [r0, #0x2] + bl OS_LockCartridge + ldr r0, [sp, #0x18] + ands r0, r0, #0x1 + bne _020DB338 + mov r0, r7 + bl MI_StopDma + mov r0, r5 + mov r1, r4 + bl DC_FlushRange +_020DB338: + ldr r0, [sp, #0x18] + cmp r0, #0x11 + bhi _020DB36C + cmp r0, #0x10 + blo _020DB360 + cmp r0, #0x10 + beq _020DB38C + cmp r0, #0x11 + beq _020DB3BC + b _020DB404 +_020DB360: + cmp r0, #0x1 + beq _020DB3E4 + b _020DB404 +_020DB36C: + cmp r0, #0x20 + bhi _020DB380 + cmp r0, #0x20 + beq _020DB3A4 + b _020DB404 +_020DB380: + cmp r0, #0x21 + beq _020DB3D0 + b _020DB404 +_020DB38C: + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + bl MI_DmaCopy16 + b _020DB404 +_020DB3A4: + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + bl MI_DmaCopy32 + b _020DB404 +_020DB3BC: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl MIi_CpuCopy16 + b _020DB404 +_020DB3D0: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl MIi_CpuCopy32 + b _020DB404 +_020DB3E4: + cmp r4, #0x0 + mov r1, #0x0 + bls _020DB404 +_020DB3F0: + ldrb r0, [r6], #0x1 + add r1, r1, #0x1 + cmp r1, r4 + strb r0, [r5], #0x1 + blo _020DB3F0 +_020DB404: + ldr r0, _020DB42C ; =0x021D6944 + ldrh r0, [r0, #0x2] + bl OS_UnlockCartridge + bl CTRDG_IsExisting +_020DB414: ; 0x020DB414 + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DB42C: .word 0x021D6944 + + arm_func_start CTRDG_CpuCopy32 +CTRDG_CpuCopy32: ; 0x020DB430 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r3, r2 + mov r12, #0x21 + mov r1, r0 + mov r2, lr + mov r0, #0x0 + str r12, [sp, #0x0] + bl CTRDGi_CopyCommon + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_CpuCopy16 +CTRDG_CpuCopy16: ; 0x020DB464 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r3, r2 + mov r12, #0x11 + mov r1, r0 + mov r2, lr + mov r0, #0x0 + str r12, [sp, #0x0] + bl CTRDGi_CopyCommon + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_CpuCopy8 +CTRDG_CpuCopy8: ; 0x020DB498 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r3, r2 + cmp lr, #0x8000000 + blo _020DB4DC + ldr r2, _020DB500 ; =0x0A010000 + cmp lr, r2 + bhs _020DB4DC + mov r12, #0x1 + mov r2, r0 + mov r0, #0x0 + str r12, [sp, #0x0] + bl CTRDGi_CopyCommon + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020DB4DC: + mov r12, #0x1 + mov r1, r0 + mov r2, lr + mov r0, #0x0 + str r12, [sp, #0x0] + bl CTRDGi_CopyCommon + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DB500: .word 0x0A010000 + + arm_func_start CTRDGi_SendtoPxi +CTRDGi_SendtoPxi: ; 0x020DB504 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r1, r7 + mov r0, #0xd + mov r2, #0x0 + bl PXI_SendWordByFifo +_020DB520: ; 0x020DB520 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r6, #0x1 + mov r5, #0xd + mov r4, #0x0 +_020DB53C: + mov r0, r6 + blx FUN_020005F2 + mov r0, r5 + mov r1, r7 + mov r2, r4 + bl PXI_SendWordByFifo +_020DB554: ; 0x020DB554 + cmp r0, #0x0 + bne _020DB53C + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start CTRDGi_UnlockByProcessor +CTRDGi_UnlockByProcessor: ; 0x020DB568 + stmdb sp!, {r4,lr} + mov r4, r1 + ldr r1, [r4, #0x0] + cmp r1, #0x0 + bne _020DB580 + bl OS_UnlockCartridge +_020DB580: + ldr r0, [r4, #0x4] + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CTRDGi_LockByProcessor +CTRDGi_LockByProcessor: ; 0x020DB590 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + ldr r5, _020DB60C ; =0x027FFFE8 + mov r4, #0x1 +_020DB5A8: + bl OS_DisableInterrupts + str r0, [r6, #0x4] + mov r0, r5 + bl OS_ReadOwnerOfLockWord + and r0, r0, #0x40 + str r0, [r6, #0x0] + ldr r0, [r6, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + mov r0, r7 + bl OS_TryLockCartridge +_020DB5DC: ; 0x020DB5DC + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldr r0, [r6, #0x4] + bl OS_RestoreInterrupts + mov r0, r4 + blx FUN_020005F2 + b _020DB5A8 +_020DB600: ; 0x020DB600 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DB60C: .word 0x027FFFE8 + + arm_func_start CTRDGi_RestoreAccessCycle +CTRDGi_RestoreAccessCycle: ; 0x020DB610 + ldr r3, _020DB640 ; =0x04000204 + ldr r2, [r0, #0x0] + ldrh r1, [r3, #0x0] + bic r1, r1, #0xc + orr r1, r1, r2, lsl #0x2 + strh r1, [r3, #0x0] + ldrh r1, [r3, #0x0] + ldr r2, [r0, #0x4] + bic r0, r1, #0x10 + orr r0, r0, r2, lsl #0x4 + strh r0, [r3, #0x0] + bx lr + .balign 4 +_020DB640: .word 0x04000204 + + arm_func_start CTRDGi_ChangeLatestAccessCycle +CTRDGi_ChangeLatestAccessCycle: ; 0x020DB644 + ldr r2, _020DB688 ; =0x04000204 + ldrh r1, [r2, #0x0] + and r1, r1, #0xc + mov r1, r1, asr #0x2 + str r1, [r0, #0x0] + ldrh r1, [r2, #0x0] + and r1, r1, #0x10 + mov r1, r1, asr #0x4 + str r1, [r0, #0x4] + ldrh r0, [r2, #0x0] + bic r0, r0, #0xc + orr r0, r0, #0xc + strh r0, [r2, #0x0] + ldrh r0, [r2, #0x0] + bic r0, r0, #0x10 + strh r0, [r2, #0x0] + bx lr + .balign 4 +_020DB688: .word 0x04000204 + + arm_func_start CTRDG_IsExisting +CTRDG_IsExisting: + stmdb sp!, {r4,lr} + sub sp, sp, #0x10 + ldr r2, _020DB798 ; =0x027FFC30 + ldr r0, _020DB79C ; =0x0000FFFF + ldrh r1, [r2, #0x0] + mov r4, #0x1 + cmp r1, r0 + addeq sp, sp, #0x10 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldrb r0, [r2, #0x5] + mov r0, r0, lsl #0x1e + mov r0, r0, lsr #0x1f + cmp r0, #0x1 + addeq sp, sp, #0x10 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r0, _020DB7A0 ; =0x021D6944 + add r1, sp, #0x0 + ldrh r0, [r0, #0x2] + bl CTRDGi_LockByProcessor + add r0, sp, #0x8 + bl CTRDGi_ChangeLatestAccessCycle + mov r0, #0x8000000 + ldrb r2, [r0, #0xb2] + cmp r2, #0x96 + bne _020DB714 + ldr r1, _020DB798 ; =0x027FFC30 + ldrh r0, [r0, #0xbe] + ldrh r1, [r1, #0x0] + cmp r1, r0 + bne _020DB75C +_020DB714: + cmp r2, #0x96 + beq _020DB734 + ldr r1, _020DB798 ; =0x027FFC30 + ldr r0, _020DB7A4 ; =0x0801FFFE + ldrh r1, [r1, #0x0] + ldrh r0, [r0, #0x0] + cmp r1, r0 + bne _020DB75C +_020DB734: + ldr r2, _020DB798 ; =0x027FFC30 + mov r0, #0x8000000 + ldr r1, [r2, #0x8] + ldr r0, [r0, #0xac] + cmp r1, r0 + beq _020DB770 + ldrb r0, [r2, #0x5] + mov r0, r0, lsl #0x1f + movs r0, r0, lsr #0x1f + beq _020DB770 +_020DB75C: + ldr r1, _020DB798 ; =0x027FFC30 + mov r4, #0x0 + ldrb r0, [r1, #0x5] + orr r0, r0, #0x2 + strb r0, [r1, #0x5] +_020DB770: + add r0, sp, #0x8 + bl CTRDGi_RestoreAccessCycle + ldr r0, _020DB7A0 ; =0x021D6944 + add r1, sp, #0x0 + ldrh r0, [r0, #0x2] + bl CTRDGi_UnlockByProcessor + mov r0, r4 + add sp, sp, #0x10 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020DB798: .word 0x027FFC30 +_020DB79C: .word 0x0000FFFF +_020DB7A0: .word 0x021D6944 +_020DB7A4: .word 0x0801FFFE + + arm_func_start CTRDG_IsPulledOut +CTRDG_IsPulledOut: ; 0x020DB7A8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020DB800 ; =0x027FFC30 + ldr r0, _020DB804 ; =0x0000FFFF + ldrh r1, [r2, #0x0] + cmp r1, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {lr} + bxeq lr + ldrb r0, [r2, #0x5] + mov r0, r0, lsl #0x1e + movs r0, r0, lsr #0x1f + bne _020DB7E4 + bl CTRDG_IsExisting +_020DB7E4: + ldr r0, _020DB800 ; =0x027FFC30 + ldrb r0, [r0, #0x5] + mov r0, r0, lsl #0x1e + mov r0, r0, lsr #0x1f + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DB800: .word 0x027FFC30 +_020DB804: .word 0x0000FFFF + + arm_func_start CTRDGi_GetAgbMakerCodeAtInit +CTRDGi_GetAgbMakerCodeAtInit: ; 0x020DB808 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl CTRDGi_IsAgbCartridgeAtInit +_020DB814: ; 0x020DB814 + cmp r0, #0x0 + ldrne r0, _020DB82C ; =0x027FFC30 + ldrneh r4, [r0, #0x6] + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020DB82C: .word 0x027FFC30 + + arm_func_start CTRDG_GetAgbMakerCode +CTRDG_GetAgbMakerCode: ; 0x020DB830 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl CTRDG_IsExisting +_020DB83C: ; 0x020DB83C + cmp r0, #0x0 + beq _020DB84C + bl CTRDGi_GetAgbMakerCodeAtInit + mov r4, r0 +_020DB84C: + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CTRDGi_GetAgbGameCodeAtInit +CTRDGi_GetAgbGameCodeAtInit: ; 0x020DB858 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl CTRDGi_IsAgbCartridgeAtInit +_020DB864: ; 0x020DB864 + cmp r0, #0x0 + ldrne r0, _020DB87C ; =0x027FFC30 + ldrne r4, [r0, #0x8] + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020DB87C: .word 0x027FFC30 + + arm_func_start CTRDG_GetAgbGameCode +CTRDG_GetAgbGameCode: ; 0x020DB880 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl CTRDG_IsExisting +_020DB88C: ; 0x020DB88C + cmp r0, #0x0 + beq _020DB89C + bl CTRDGi_GetAgbGameCodeAtInit + mov r4, r0 +_020DB89C: + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CTRDGi_IsAgbCartridgeAtInit +CTRDGi_IsAgbCartridgeAtInit: + ldr r0, _020DB8BC ; =0x027FFC30 + ldrb r0, [r0, #0x5] + mov r0, r0, lsl #0x1f + mov r0, r0, lsr #0x1f + bx lr + .balign 4 +_020DB8BC: .word 0x027FFC30 + + arm_func_start CTRDG_IsOptionCartridge +CTRDG_IsOptionCartridge: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CTRDG_IsExisting +_020DB8CC: ; 0x020DB8CC + cmp r0, #0x0 + beq _020DB8EC + bl CTRDGi_IsAgbCartridgeAtInit +_020DB8D8: ; 0x020DB8D8 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x1 + ldmeqia sp!, {lr} + bxeq lr +_020DB8EC: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_IsAgbCartridge +CTRDG_IsAgbCartridge: ; 0x020DB8FC + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CTRDG_IsExisting +_020DB908: ; 0x020DB908 + cmp r0, #0x0 + beq _020DB928 + bl CTRDGi_IsAgbCartridgeAtInit +_020DB914: ; 0x020DB914 + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, #0x1 + ldmneia sp!, {lr} + bxne lr +_020DB928: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_InitCommon +CTRDGi_InitCommon: ; 0x020DB938 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020DB970 ; =0x021D6944 + mov r3, #0x0 + ldr r2, _020DB974 ; =0x05000001 + add r0, sp, #0x0 + str r3, [sp, #0x0] + blx FUN_020002FE + bl OS_GetLockID + ldr r1, _020DB970 ; =0x021D6944 + strh r0, [r1, #0x2] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DB970: .word 0x021D6944 +_020DB974: .word 0x05000001 + + arm_func_start CTRDGi_CallbackForSetPhi +CTRDGi_CallbackForSetPhi: ; 0x020DB978 + ldr r0, _020DB988 ; =0x021D694C + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + .balign 4 +_020DB988: .word 0x021D694C + + arm_func_start CTRDG_TerminateForPulledOut +CTRDG_TerminateForPulledOut: ; 0x020DB98C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, #0x2 + bl CTRDGi_SendtoPxi + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_PulledOutCallback +CTRDGi_PulledOutCallback: ; 0x020DB9AC + stmdb sp!, {lr} + sub sp, sp, #0x4 + and r0, r1, #0x3f + cmp r0, #0x11 + bne _020DBA14 + ldr r0, _020DBA24 ; =0x021D6954 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r1, _020DBA28 ; =0x021D6958 + mov r0, #0x0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + beq _020DB9F0 + blx r1 +_020DB9F0: + cmp r0, #0x0 + beq _020DB9FC + bl CTRDG_TerminateForPulledOut +_020DB9FC: + ldr r0, _020DBA24 ; =0x021D6954 + mov r1, #0x1 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020DBA14: + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DBA24: .word 0x021D6954 +_020DBA28: .word 0x021D6958 + + arm_func_start CTRDGi_CallbackForInitModuleInfo +CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C + stmdb sp!, {lr} + sub sp, sp, #0x4 + and r0, r1, #0x3f + cmp r0, #0x1 + ldreq r0, _020DBA64 ; =0x021D6944 + moveq r1, #0x1 + streqh r1, [r0, #0x0] + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DBA64: .word 0x021D6944 + + arm_func_start CTRDGi_InitModuleInfo +CTRDGi_InitModuleInfo: ; 0x020DBA68 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x14 + ldr r0, _020DBC50 ; =0x021D6948 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addne sp, sp, #0x14 + ldmneia sp!, {r4-r7,lr} + bxne lr + ldr r1, _020DBC54 ; =0x04000300 + mov r2, #0x1 + str r2, [r0, #0x0] + ldrh r0, [r1, #0x0] + ands r0, r0, #0x1 + addeq sp, sp, #0x14 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, #0x40000 + bl OS_SetIrqMask + ldr r3, _020DBC58 ; =0x04000208 + mov r2, #0x1 + ldrh r4, [r3, #0x0] + ldr r1, _020DBC5C ; =0x021D6944 + mov r6, r0 + strh r2, [r3, #0x0] + ldrh r0, [r1, #0x2] + add r1, sp, #0x0 + bl CTRDGi_LockByProcessor + ldr r1, _020DBC60 ; =0x04000204 + add r0, sp, #0x8 + ldrh r1, [r1, #0x0] + and r1, r1, #0x8000 + mov r5, r1, asr #0xf + bl CTRDGi_ChangeLatestAccessCycle + ldr r3, _020DBC60 ; =0x04000204 + ldr r0, _020DBC64 ; =0x021D6960 + ldrh r2, [r3, #0x0] + add r0, r0, #0x80 + mov r1, #0x40 + bic r2, r2, #0x8000 + strh r2, [r3, #0x0] + bl DC_InvalidateRange + ldr r2, _020DBC64 ; =0x021D6960 + ldr r1, _020DBC68 ; =0x08000080 + mov r0, #0x1 + mov r3, #0x40 + add r2, r2, #0x80 + bl MI_DmaCopy16 + ldr r2, _020DBC60 ; =0x04000204 + add r0, sp, #0x8 + ldrh r1, [r2, #0x0] + bic r1, r1, #0x8000 + orr r1, r1, r5, lsl #0xf + strh r1, [r2, #0x0] + bl CTRDGi_RestoreAccessCycle + ldr r0, _020DBC5C ; =0x021D6944 + add r1, sp, #0x0 + ldrh r0, [r0, #0x2] + bl CTRDGi_UnlockByProcessor + ldr r0, _020DBC6C ; =0x027FFF9B + ldrb r0, [r0, #0x0] + cmp r0, #0x0 + bne _020DBB70 + ldr r0, _020DBC70 ; =0x027FFF9A + ldrb r0, [r0, #0x0] + cmp r0, #0x0 + bne _020DBBDC +_020DBB70: + ldr r2, _020DBC64 ; =0x021D6960 + ldr r0, _020DBC74 ; =0x027FFC30 + ldrh r1, [r2, #0xbe] + mov r3, #0x0 + strh r1, [r0, #0x0] +_020DBB84: + add r0, r2, r3 + ldrb r1, [r0, #0xb5] + add r0, r3, #0x2700000 + add r0, r0, #0xff000 + add r3, r3, #0x1 + strb r1, [r0, #0xC32] + cmp r3, #0x3 + blt _020DBB84 + ldrh r0, [r2, #0xb0] + ldr r1, _020DBC74 ; =0x027FFC30 + strh r0, [r1, #0x6] + ldr r0, [r2, #0xac] + str r0, [r1, #0x8] + bl CTRDG_IsExisting +_020DBBBC: ; 0x020DBBBC + cmp r0, #0x0 + movne r2, #0x1 + ldr r1, _020DBC6C ; =0x027FFF9B + moveq r2, #0x0 + strb r2, [r1, #0x0] + ldr r0, _020DBC70 ; =0x027FFF9A + mov r1, #0x1 + strb r1, [r0, #0x0] +_020DBBDC: + ldr r0, _020DBC78 ; =0xFFFF0020 + ldr r1, _020DBC7C ; =0x021D6964 + mov r2, #0x9c + bl MIi_CpuCopy32 + bl DC_FlushAll + ldr r0, _020DBC64 ; =0x021D6960 + add r0, r0, #0xfe000000 + mov r0, r0, lsr #0x5 + mov r0, r0, lsl #0x6 + orr r0, r0, #0x1 + bl CTRDGi_SendtoPxi + ldr r5, _020DBC5C ; =0x021D6944 + ldrh r0, [r5, #0x0] + cmp r0, #0x1 + beq _020DBC30 + mov r7, #0x1 +_020DBC1C: + mov r0, r7 + blx FUN_020005F2 + ldrh r0, [r5, #0x0] + cmp r0, #0x1 + bne _020DBC1C +_020DBC30: + ldr r2, _020DBC58 ; =0x04000208 + mov r0, r6 + ldrh r1, [r2, #0x0] + strh r4, [r2, #0x0] + bl OS_SetIrqMask + add sp, sp, #0x14 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DBC50: .word 0x021D6948 +_020DBC54: .word 0x04000300 +_020DBC58: .word 0x04000208 +_020DBC5C: .word 0x021D6944 +_020DBC60: .word 0x04000204 +_020DBC64: .word 0x021D6960 +_020DBC68: .word 0x08000080 +_020DBC6C: .word 0x027FFF9B +_020DBC70: .word 0x027FFF9A +_020DBC74: .word 0x027FFC30 +_020DBC78: .word 0xFFFF0020 +_020DBC7C: .word 0x021D6964 + + arm_func_start CTRDG_Init +CTRDG_Init: ; 0x020DBC80 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020DBD34 ; =0x021D6950 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + mov r1, #0x1 + str r1, [r0, #0x0] + bl CTRDGi_InitCommon + ldr r0, _020DBD38 ; =0x021D6954 + mov r1, #0x0 + str r1, [r0, #0x0] + bl PXI_Init + mov r5, #0xd + mov r4, #0x1 +_020DBCC4: + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady +_020DBCD0: ; 0x020DBCD0 + cmp r0, #0x0 + beq _020DBCC4 + ldr r1, _020DBD3C ; =CTRDGi_CallbackForInitModuleInfo + mov r0, #0xd + bl PXI_SetFifoRecvCallback + bl CTRDGi_InitModuleInfo + mov r0, #0xd + mov r1, #0x0 + bl PXI_SetFifoRecvCallback + ldr r1, _020DBD40 ; =CTRDGi_PulledOutCallback + mov r0, #0xd + bl PXI_SetFifoRecvCallback + ldr r1, _020DBD44 ; =0x021D6958 + mov r2, #0x0 + ldr r0, _020DBD48 ; =0x021D6A20 + str r2, [r1, #0x0] + bl CTRDGi_InitTaskThread + ldr r1, _020DBD4C ; =CTRDGi_CallbackForSetPhi + mov r0, #0x11 + bl PXI_SetFifoRecvCallback +_020DBD20: ; 0x020DBD20 + mov r0, #0x0 + bl CTRDG_Enable + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DBD34: .word 0x021D6950 +_020DBD38: .word 0x021D6954 +_020DBD3C: .word CTRDGi_CallbackForInitModuleInfo +_020DBD40: .word CTRDGi_PulledOutCallback +_020DBD44: .word 0x021D6958 +_020DBD48: .word 0x021D6A20 +_020DBD4C: .word CTRDGi_CallbackForSetPhi + + arm_func_start CTRDG_IdentifyAgbBackup +CTRDG_IdentifyAgbBackup: ; 0x020DBD50 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + cmp r7, #0x1 + mov r0, #0x1 + bhi _020DBEAC + bl OS_GetLockID + ldr r1, _020DBED8 ; =0x021D6B0C + strh r0, [r1, #0x0] + ldrh r0, [r1, #0x0] + bl OS_LockCartridge + ldr r6, _020DBEDC ; =0x04000204 + ldr r1, _020DBEE0 ; =0x02103FE4 + ldrh r3, [r6, #0x0] + ldrh r2, [r6, #0x0] + ldr r0, _020DBEE4 ; =0x021D6B28 + and r4, r3, #0x3 + bic r2, r2, #0x3 + orr r2, r2, #0x3 + strh r2, [r6, #0x0] + str r1, [r0, #0x0] + bl CTRDGi_ReadFlashID + ldr r2, _020DBEDC ; =0x04000204 + mov r6, r0 + ldrh r1, [r2, #0x0] + cmp r7, #0x0 + ldreq r5, _020DBEE8 ; =0x02103FF4 + bic r1, r1, #0x3 + orr r1, r1, r4 + cmp r7, #0x1 + ldr r0, _020DBED8 ; =0x021D6B0C + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + ldreq r5, _020DBEEC ; =0x02103FE8 + bl OS_UnlockCartridge2 + ldr r2, [r5, #0x0] + mov r0, #0x1 + ldrh r1, [r2, #0x38] + cmp r1, #0x0 + beq _020DBE14 + and r3, r6, #0xff +_020DBDF4: + ldrh r1, [r2, #0x38] + cmp r3, r1 + moveq r0, #0x0 + beq _020DBE14 + ldr r2, [r5, #0x4]! + ldrh r1, [r2, #0x38] + cmp r1, #0x0 + bne _020DBDF4 +_020DBE14: + ldr r2, [r2, #0x0] + ldr r1, _020DBEF0 ; =0x021D6B14 + ldr r3, _020DBEF4 ; =0x021D6B34 + str r2, [r1, #0x0] + ldr r1, [r5, #0x0] + ldr r2, _020DBEF8 ; =0x021D6B2C + ldr r4, [r1, #0x4] + ldr r1, _020DBEFC ; =0x021D6B18 + str r4, [r3, #0x0] + ldr r3, [r5, #0x0] + ldr r6, _020DBF00 ; =0x021D6B1C + ldr r3, [r3, #0x8] + ldr r4, _020DBF04 ; =0x021D6B30 + str r3, [r2, #0x0] + ldr r2, [r5, #0x0] + ldr r3, _020DBF08 ; =0x021D6B24 + ldr r7, [r2, #0xc] + ldr r2, _020DBEE4 ; =0x021D6B28 + str r7, [r1, #0x0] + ldr r7, [r5, #0x0] + ldr r1, _020DBF0C ; =0x021D6B20 + ldr r7, [r7, #0x10] + add sp, sp, #0x4 + str r7, [r6, #0x0] + ldr r6, [r5, #0x0] + ldr r6, [r6, #0x14] + str r6, [r4, #0x0] + ldr r4, [r5, #0x0] + ldr r4, [r4, #0x18] + str r4, [r3, #0x0] + ldr r3, [r5, #0x0] + ldr r3, [r3, #0x1c] + str r3, [r2, #0x0] + ldr r2, [r5, #0x0] + add r2, r2, #0x20 + str r2, [r1, #0x0] + ldmia sp!, {r4-r7,lr} + bx lr +_020DBEAC: + cmp r7, #0x2 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + bl OS_GetLockID + ldr r1, _020DBF10 ; =0x021D6B4C + strh r0, [r1, #0x0] + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DBED8: .word 0x021D6B0C +_020DBEDC: .word 0x04000204 +_020DBEE0: .word 0x02103FE4 +_020DBEE4: .word 0x021D6B28 +_020DBEE8: .word 0x02103FF4 +_020DBEEC: .word 0x02103FE8 +_020DBEF0: .word 0x021D6B14 +_020DBEF4: .word 0x021D6B34 +_020DBEF8: .word 0x021D6B2C +_020DBEFC: .word 0x021D6B18 +_020DBF00: .word 0x021D6B1C +_020DBF04: .word 0x021D6B30 +_020DBF08: .word 0x021D6B24 +_020DBF0C: .word 0x021D6B20 +_020DBF10: .word 0x021D6B4C + + arm_func_start CTRDG_WriteAndVerifyAgbFlashAsync +CTRDG_WriteAndVerifyAgbFlashAsync: ; 0x020DBF14 + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + str r2, [sp, #0x18] + ldr r1, _020DBF44 ; =CTRDGi_WriteAndVerifyAgbFlashSectorCore + add r0, sp, #0x0 + mov r2, r3 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DBF44: .word CTRDGi_WriteAndVerifyAgbFlashSectorCore + + arm_func_start CTRDG_VerifyAgbFlash +CTRDG_VerifyAgbFlash: + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + str r2, [sp, #0x18] + bl CTRDGi_VerifyAgbFlashCore + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_WriteAgbFlashSector +CTRDG_WriteAgbFlashSector: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020DBF90 ; =0x021D6B14 + ldr r2, [r2, #0x0] + blx r2 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DBF90: .word 0x021D6B14 + + arm_func_start CTRDG_ReadAgbFlash +CTRDG_ReadAgbFlash: ; 0x020DBF94 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0x14] + str r2, [sp, #0x1c] + str r3, [sp, #0x18] + bl CTRDGi_ReadAgbFlashCore + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteAndVerifyAgbFlashSectorCore +CTRDGi_WriteAndVerifyAgbFlashSectorCore: ; 0x020DBFC0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x24 + mov r4, r0 + ldmia r4!, {r0-r3} + add r12, sp, #0x0 + stmia r12!, {r0-r3} + ldmia r4!, {r0-r3} + stmia r12!, {r0-r3} + ldr r0, [r4, #0x0] + mov r7, #0x0 + str r0, [r12, #0x0] + ldrh r6, [sp, #0x20] + ldr r5, [sp, #0xc] + ldr r4, [sp, #0x18] +_020DBFF8: + mov r0, r6 + mov r1, r5 + bl CTRDG_WriteAgbFlashSector +_020DC004: ; 0x020DC004 + cmp r0, #0x0 + bne _020DC02C + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl CTRDG_VerifyAgbFlash +_020DC01C: ; 0x020DC01C + cmp r0, #0x0 + addeq sp, sp, #0x24 + ldmeqia sp!, {r4-r7,lr} + bxeq lr +_020DC02C: + add r1, r7, #0x1 + mov r1, r1, lsl #0x10 + mov r7, r1, lsr #0x10 + cmp r7, #0x3 + blo _020DBFF8 + add sp, sp, #0x24 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start CTRDGi_VerifyAgbFlashCore +CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DC128 ; =0x021D6B0C + ldr r1, [r5, #0x0] + ldrh r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r6, [sp, #0x20] + ldr r5, [sp, #0xc] + ldr r4, [sp, #0x18] + bl OS_LockCartridge + ldr r3, _020DC12C ; =0x04000204 + ldr r0, _020DC130 ; =0x021D6B20 + ldrh r2, [r3, #0x0] + ldrh r1, [r3, #0x0] + and r7, r2, #0x3 + bic r1, r1, #0x3 + orr r1, r1, #0x3 + strh r1, [r3, #0x0] + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x20000 + bne _020DC0D4 + mov r0, r6, lsl #0xc + mov r0, r0, lsr #0x10 + bl CTRDGi_SetFlashBankMx + and r0, r6, #0xf + mov r0, r0, lsl #0x10 + mov r6, r0, lsr #0x10 +_020DC0D4: + ldr r1, _020DC130 ; =0x021D6B20 + mov r0, r5 + ldr r1, [r1, #0x0] + mov r2, r4 + ldrh r1, [r1, #0x8] + mov r1, r6, lsl r1 + add r1, r1, #0xa000000 + bl CTRDGi_VerifyFlashSectorCore + ldr r3, _020DC12C ; =0x04000204 + ldr r1, _020DC128 ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r7 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x24 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DC128: .word 0x021D6B0C +_020DC12C: .word 0x04000204 +_020DC130: .word 0x021D6B20 + + arm_func_start CTRDGi_VerifyFlashSectorCore +CTRDGi_VerifyFlashSectorCore: ; 0x020DC134 + cmp r2, #0x0 + sub r2, r2, #0x1 + beq _020DC160 +_020DC140: + ldrb r12, [r1], #0x1 + ldrb r3, [r0], #0x1 + cmp r12, r3 + subne r0, r1, #0x1 + bxne lr + cmp r2, #0x0 + sub r2, r2, #0x1 + bne _020DC140 +_020DC160: + mov r0, #0x0 + bx lr + + arm_func_start CTRDGi_ReadAgbFlashCore +CTRDGi_ReadAgbFlashCore: ; 0x020DC168 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x28 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DC25C ; =0x021D6B0C + ldr r1, [r5, #0x0] + ldrh r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r7, [sp, #0x20] + ldr r6, [sp, #0x14] + ldr r5, [sp, #0x1c] + ldr r4, [sp, #0x18] + bl OS_LockCartridge + ldr r3, _020DC260 ; =0x04000204 + ldr r0, _020DC264 ; =0x021D6B20 + ldrh r2, [r3, #0x0] + ldrh r1, [r3, #0x0] + and r8, r2, #0x3 + bic r1, r1, #0x3 + orr r1, r1, #0x3 + strh r1, [r3, #0x0] + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x20000 + bne _020DC1F4 + mov r0, r7, lsl #0xc + mov r0, r0, lsr #0x10 + bl CTRDGi_SetFlashBankMx + and r0, r7, #0xf + mov r0, r0, lsl #0x10 + mov r7, r0, lsr #0x10 +_020DC1F4: + ldr r0, _020DC264 ; =0x021D6B20 + cmp r4, #0x0 + ldr r0, [r0, #0x0] + sub r4, r4, #0x1 + ldrh r0, [r0, #0x8] + mov r0, r7, lsl r0 + add r0, r0, #0xa000000 + add r1, r6, r0 + beq _020DC22C +_020DC218: + ldrb r0, [r1], #0x1 + cmp r4, #0x0 + sub r4, r4, #0x1 + strb r0, [r5], #0x1 + bne _020DC218 +_020DC22C: + ldr r2, _020DC260 ; =0x04000204 + ldr r0, _020DC25C ; =0x021D6B0C + ldrh r1, [r2, #0x0] + bic r1, r1, #0x3 + orr r1, r1, r8 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, #0x0 + add sp, sp, #0x28 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020DC25C: .word 0x021D6B0C +_020DC260: .word 0x04000204 +_020DC264: .word 0x021D6B20 + + arm_func_start CTRDGi_PollingSR1MCOMMON +CTRDGi_PollingSR1MCOMMON: ; 0x020DC268 + stmdb sp!, {r4-r8,lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, #0x0 + bl StartFlashTimer + ldr r4, _020DC318 ; =0x021D6B10 +_020DC284: + bl CheckFlashTimer + mov r0, r7 + bl CTRDGi_ReadSrFunc + cmp r0, r6 + beq _020DC300 + ands r0, r0, #0x20 + beq _020DC2CC + mov r0, r7 + bl CTRDGi_ReadSrFunc +_020DC2A8: ; 0x020DC2A8 + cmp r6, r0 + beq _020DC300 + orr r0, r8, #0xa000 + mov r0, r0, lsl #0x10 + ldr r1, _020DC31C ; =0x0A005555 + mov r2, #0xf0 + strb r2, [r1, #0x0] + mov r5, r0, lsr #0x10 + b _020DC300 +_020DC2CC: + ldrh r0, [r4, #0x0] + cmp r0, #0x0 + beq _020DC284 + mov r0, r7 + bl CTRDGi_ReadSrFunc +_020DC2E0: ; 0x020DC2E0 + cmp r6, r0 + beq _020DC300 + orr r0, r8, #0xc000 + mov r0, r0, lsl #0x10 + ldr r1, _020DC31C ; =0x0A005555 + mov r2, #0xf0 + strb r2, [r1, #0x0] + mov r5, r0, lsr #0x10 +_020DC300: + bl CTRDG_IsExisting +_020DC304: ; 0x020DC304 + cmp r0, #0x0 + moveq r5, #0x1000 + mov r0, r5 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020DC318: .word 0x021D6B10 +_020DC31C: .word 0x0A005555 + + arm_func_start CTRDGi_PollingSR512kCOMMON +CTRDGi_PollingSR512kCOMMON: ; 0x020DC320 + stmdb sp!, {r4-r8,lr} + mov r4, r0 + mov r8, r1 + mov r7, r2 + mov r6, #0x0 + bl StartFlashTimer + ldr r5, _020DC3A8 ; =0x021D6B10 +_020DC33C: + mov r0, r8 + bl CTRDGi_ReadSrFunc + cmp r0, r7 + beq _020DC390 + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + beq _020DC33C + mov r0, r8 + bl CTRDGi_ReadSrFunc +_020DC360: ; 0x020DC360 + cmp r7, r0 + beq _020DC390 + ldr r0, _020DC3AC ; =0x021D6B20 + ldr r0, [r0, #0x0] + ldrh r0, [r0, #0x18] + cmp r0, #0xc2 + ldreq r0, _020DC3B0 ; =0x0A005555 + moveq r1, #0xf0 + streqb r1, [r0, #0x0] + orr r0, r4, #0xc000 + mov r0, r0, lsl #0x10 + mov r6, r0, lsr #0x10 +_020DC390: + bl CTRDG_IsExisting +_020DC394: ; 0x020DC394 + cmp r0, #0x0 + moveq r6, #0x1000 + mov r0, r6 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020DC3A8: .word 0x021D6B10 +_020DC3AC: .word 0x021D6B20 +_020DC3B0: .word 0x0A005555 + + arm_func_start CTRDGi_ReadSrFunc +CTRDGi_ReadSrFunc: + ldrb r0, [r0, #0x0] + bx lr + + arm_func_start CheckFlashTimer +CheckFlashTimer: ; 0x020DC3BC + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_GetTick + ldr r3, _020DC420 ; =0x021D6B44 + ldr r2, _020DC424 ; =0x000082EA + ldr r12, [r3, #0x0] + ldr r3, [r3, #0x4] + subs r12, r0, r12 + sbc r0, r1, r3 + mov r1, r0, lsl #0x6 + orr r1, r1, r12, lsr #0x1a + mov r0, r12, lsl #0x6 + mov r3, #0x0 + bl _ll_udiv + ldr r2, _020DC428 ; =0x021D6B3C + ldr r3, [r2, #0x4] + ldr r2, [r2, #0x0] + cmp r3, r1 + cmpeq r2, r0 + ldrls r0, _020DC42C ; =0x021D6B10 + movls r1, #0x1 + strlsh r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC420: .word 0x021D6B44 +_020DC424: .word 0x000082EA +_020DC428: .word 0x021D6B3C +_020DC42C: .word 0x021D6B10 + + arm_func_start StartFlashTimer +StartFlashTimer: ; 0x020DC430 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020DC47C ; =0x021D6B28 + ldr r2, _020DC480 ; =0x021D6B10 + mov r3, #0x0 + ldr r1, [r1, #0x0] + strh r3, [r2, #0x0] + mov r0, r0, lsl #0x1 + ldrh r1, [r1, r0] + ldr r0, _020DC484 ; =0x021D6B3C + str r1, [r0, #0x0] + str r3, [r0, #0x4] + bl OS_GetTick + ldr r2, _020DC488 ; =0x021D6B44 + str r0, [r2, #0x0] + str r1, [r2, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC47C: .word 0x021D6B28 +_020DC480: .word 0x021D6B10 +_020DC484: .word 0x021D6B3C +_020DC488: .word 0x021D6B44 + + arm_func_start CTRDGi_ReadFlashID +CTRDGi_ReadFlashID: ; 0x020DC48C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r5, _020DC590 ; =0x04000208 + mov r0, #0x0 + ldrh r2, [r5, #0x0] + ldr r1, _020DC594 ; =0x021D6B38 + ldr r4, _020DC598 ; =0x0A005555 + strh r0, [r5, #0x0] + str r2, [r1, #0x0] + mov r3, #0xaa + ldr r2, _020DC59C ; =0x0A002AAA + strb r3, [r4, #0x0] + mov r3, #0x55 + strb r3, [r2, #0x0] + mov r2, #0x90 + strb r2, [r4, #0x0] + ldrh r2, [r5, #0x0] + ldr r1, [r1, #0x0] + strh r1, [r5, #0x0] + bl StartFlashTimer + ldr r4, _020DC5A0 ; =0x021D6B10 + ldrh r0, [r4, #0x0] + cmp r0, #0x0 + bne _020DC4FC +_020DC4EC: + bl CheckFlashTimer + ldrh r0, [r4, #0x0] + cmp r0, #0x0 + beq _020DC4EC +_020DC4FC: + ldr r0, _020DC5A4 ; =0x0A000001 + bl CTRDGi_ReadSrFunc + mov r4, r0, lsl #0x18 + mov r0, #0xa000000 + bl CTRDGi_ReadSrFunc + ldr ip, _020DC590 ; =0x04000208 + orr r4, r0, r4, lsr #0x10 + ldrh r2, [r12, #0x0] + mov r0, #0x0 + ldr r1, _020DC594 ; =0x021D6B38 + strh r0, [r12, #0x0] + ldr r5, _020DC598 ; =0x0A005555 + str r2, [r1, #0x0] + mov r3, #0xaa + ldr r2, _020DC59C ; =0x0A002AAA + strb r3, [r5, #0x0] + mov r3, #0x55 + strb r3, [r2, #0x0] + mov r2, #0xf0 + strb r2, [r5, #0x0] + strb r2, [r5, #0x0] + ldrh r2, [r12, #0x0] + ldr r1, [r1, #0x0] + strh r1, [r12, #0x0] + bl StartFlashTimer + ldr r5, _020DC5A0 ; =0x021D6B10 + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + bne _020DC580 +_020DC570: + bl CheckFlashTimer + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + beq _020DC570 +_020DC580: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DC590: .word 0x04000208 +_020DC594: .word 0x021D6B38 +_020DC598: .word 0x0A005555 +_020DC59C: .word 0x0A002AAA +_020DC5A0: .word 0x021D6B10 +_020DC5A4: .word 0x0A000001 + + arm_func_start CTRDGi_SetFlashBankMx +CTRDGi_SetFlashBankMx: ; 0x020DC5A8 + ldr r3, _020DC5D4 ; =0x0A005555 + mov r2, #0xaa + ldr r1, _020DC5D8 ; =0x0A002AAA + strb r2, [r3, #0x0] + mov r2, #0x55 + strb r2, [r1, #0x0] + mov r1, #0xb0 + strb r1, [r3, #0x0] + mov r1, #0xa000000 + strb r0, [r1, #0x0] + bx lr + .balign 4 +_020DC5D4: .word 0x0A005555 +_020DC5D8: .word 0x0A002AAA + + arm_func_start CTRDGi_WriteFlashSectorAsyncAT +CTRDGi_WriteFlashSectorAsyncAT: ; 0x020DC5DC + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DC604 ; =CTRDGi_WriteFlashSectorCoreAT + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC604: .word CTRDGi_WriteFlashSectorCoreAT + + arm_func_start CTRDGi_EraseFlashSectorAsyncAT +CTRDGi_EraseFlashSectorAsyncAT: ; 0x020DC608 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov r2, r1 + strh r0, [sp, #0x20] + ldr r1, _020DC630 ; =CTRDGi_EraseFlashSectorCoreAT + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC630: .word CTRDGi_EraseFlashSectorCoreAT + + arm_func_start CTRDGi_WriteFlashSectorAT +CTRDGi_WriteFlashSectorAT: ; 0x020DC634 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlashSectorCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashSectorAT +CTRDGi_EraseFlashSectorAT: + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + bl CTRDGi_EraseFlashSectorCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteFlash4KBAsyncAT +CTRDGi_WriteFlash4KBAsyncAT: ; 0x020DC688 + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DC6B0 ; =CTRDGi_WriteFlash4KBCoreAT + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC6B0: .word CTRDGi_WriteFlash4KBCoreAT + + arm_func_start CTRDGi_EraseFlash4KBAsyncAT +CTRDGi_EraseFlash4KBAsyncAT: ; 0x020DC6B4 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov r2, r1 + strh r0, [sp, #0x20] + ldr r1, _020DC6DC ; =CTRDGi_EraseFlash4KBCoreAT + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC6DC: .word CTRDGi_EraseFlash4KBCoreAT + + arm_func_start CTRDGi_EraseFlashChipAsyncAT +CTRDGi_EraseFlashChipAsyncAT: ; 0x020DC6E0 + stmdb sp!, {lr} + sub sp, sp, #0x24 + ldr r1, _020DC704 ; =CTRDGi_EraseFlashChipCoreAT + mov r2, r0 + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC704: .word CTRDGi_EraseFlashChipCoreAT + + arm_func_start CTRDGi_WriteFlash4KBAT +CTRDGi_WriteFlash4KBAT: ; 0x020DC708 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlash4KBCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlash4KBAT +CTRDGi_EraseFlash4KBAT: ; 0x020DC734 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + bl CTRDGi_EraseFlash4KBCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashChipAT +CTRDGi_EraseFlashChipAT: ; 0x020DC75C + stmdb sp!, {lr} + sub sp, sp, #0x24 + add r0, sp, #0x0 + bl CTRDGi_EraseFlashChipCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteFlash4KBCoreAT +CTRDGi_WriteFlash4KBCoreAT: ; 0x020DC780 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + str r0, [r4, #0x0] + ldrh r0, [sp, #0x20] + ldr r7, [sp, #0xc] + cmp r0, #0x10 + addcs sp, sp, #0x24 + ldrhs r0, _020DC85C ; =0x000080FF + ldmcsia sp!, {r4-r9,lr} + bxcs lr + ldr r1, _020DC860 ; =0x0210400C + mov r0, r0, lsl #0x15 + ldr r1, [r1, #0x24] + ldr r4, _020DC864 ; =0x021D6B08 + mov r8, r0, lsr #0x10 + strh r1, [r4, #0x0] + ldrh r0, [r4, #0x0] + cmp r0, #0x0 + beq _020DC84C + ldr r0, _020DC868 ; =0x02104048 + ldr r6, [r0, #0x24] + mov r5, #0x2 +_020DC7F4: + mov r9, r5 +_020DC7F8: + mov r0, r8 + mov r1, r7 + bl CTRDGi_WriteFlashSectorAT + movs r12, r0 + beq _020DC81C + sub r0, r9, #0x1 + mov r0, r0, lsl #0x10 + movs r9, r0, lsr #0x10 + bne _020DC7F8 +_020DC81C: + cmp r12, #0x0 + bne _020DC84C + ldrh r1, [r4, #0x0] + add r0, r8, #0x1 + mov r0, r0, lsl #0x10 + sub r1, r1, r6 + strh r1, [r4, #0x0] + ldrh r1, [r4, #0x0] + add r7, r7, r6 + mov r8, r0, lsr #0x10 + cmp r1, #0x0 + bne _020DC7F4 +_020DC84C: + mov r0, r12 + add sp, sp, #0x24 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020DC85C: .word 0x000080FF +_020DC860: .word 0x0210400C +_020DC864: .word 0x021D6B08 +_020DC868: .word 0x02104048 + + arm_func_start CTRDGi_WriteFlashSectorCoreAT +CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x24 + mov r5, r0 + add r4, sp, #0x0 + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DC984 ; =0x021D6B0C + ldr r1, [r5, #0x0] + ldrh r0, [r0, #0x0] + str r1, [r4, #0x0] + ldr r4, [sp, #0xc] + bl OS_LockCartridge + ldr r5, _020DC988 ; =0x04000204 + ldr r1, _020DC98C ; =0x021D6B20 + ldrh r0, [r5, #0x0] + ldr r1, [r1, #0x0] + ldrh r2, [r5, #0x0] + ldr r3, [r1, #0x10] + ldr r1, _020DC990 ; =0x02104048 + bic r2, r2, #0x3 + orr r2, r2, r3 + strh r2, [r5, #0x0] + ldr r5, _020DC994 ; =0x04000208 + ldrh lr, [sp, #0x20] + ldrh r12, [r1, #0x28] + ldrh r2, [r5, #0x0] + mov r3, #0x0 + mov lr, lr, lsl r12 + strh r3, [r5, #0x0] + ldr ip, _020DC998 ; =0x0A005555 + mov r5, #0xaa + strb r5, [r12, #0x0] + ldr r3, _020DC99C ; =0x0A002AAA + mov r5, #0x55 + strb r5, [r3, #0x0] + mov r3, #0xa0 + strb r3, [r12, #0x0] + ldr r3, [r1, #0x24] + and r5, r0, #0x3 + cmp r3, #0x0 + add r1, lr, #0xa000000 + beq _020DC92C +_020DC91C: + ldrb r0, [r4], #0x1 + subs r3, r3, #0x1 + strb r0, [r1], #0x1 + bne _020DC91C +_020DC92C: + ldr ip, _020DC994 ; =0x04000208 + ldr r3, _020DC9A0 ; =0x021D6B24 + ldrh r0, [r12, #0x0] + sub r1, r1, #0x1 + mov r0, #0x1 + strh r2, [r12, #0x0] + ldrb r2, [r4, #-0x1] + ldr r3, [r3, #0x0] + blx r3 + ldr r3, _020DC988 ; =0x04000204 + ldr r1, _020DC984 ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x24 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DC984: .word 0x021D6B0C +_020DC988: .word 0x04000204 +_020DC98C: .word 0x021D6B20 +_020DC990: .word 0x02104048 +_020DC994: .word 0x04000208 +_020DC998: .word 0x0A005555 +_020DC99C: .word 0x0A002AAA +_020DC9A0: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlash4KBCoreAT +CTRDGi_EraseFlash4KBCoreAT: ; 0x020DC9A4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + str r0, [r4, #0x0] + ldrh r0, [sp, #0x20] + cmp r0, #0x10 + addcs sp, sp, #0x24 + ldrhs r0, _020DCA54 ; =0x000080FF + ldmcsia sp!, {r4-r7,lr} + bxcs lr + mov r0, r0, lsl #0x15 + mov r5, r0, lsr #0x10 + mov r6, #0x0 + mov r4, #0x2 +_020DC9F4: + mov r7, r4 +_020DC9F8: + mov r0, r5 + bl CTRDGi_EraseFlashSectorAT +_020DCA00: ; 0x020DCA00 + cmp r0, #0x0 + beq _020DCA18 + sub r1, r7, #0x1 + mov r1, r1, lsl #0x10 + movs r7, r1, lsr #0x10 + bne _020DC9F8 +_020DCA18: + add r1, r5, #0x1 + mov r1, r1, lsl #0x10 + cmp r0, #0x0 + mov r5, r1, lsr #0x10 + addne sp, sp, #0x24 + ldmneia sp!, {r4-r7,lr} + bxne lr + add r1, r6, #0x1 + mov r1, r1, lsl #0x10 + mov r6, r1, lsr #0x10 + cmp r6, #0x20 + blo _020DC9F4 + add sp, sp, #0x24 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DCA54: .word 0x000080FF + + arm_func_start CTRDGi_EraseFlashSectorCoreAT +CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + ldr r1, _020DCB80 ; =0x02104048 + str r0, [r4, #0x0] + ldr r0, _020DCB84 ; =0x021D6B0C + ldrh r2, [sp, #0x20] + ldrh r1, [r1, #0x28] + ldrh r0, [r0, #0x0] + mov r1, r2, lsl r1 + add r5, r1, #0xa000000 + bl OS_LockCartridge + ldr r4, _020DCB88 ; =0x04000204 + ldr r1, _020DCB8C ; =0x021D6B20 + ldrh r0, [r4, #0x0] + ldr r2, [r1, #0x0] + ldrh r1, [r4, #0x0] + ldr r2, [r2, #0x10] + ldr r3, _020DCB90 ; =0x04000208 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r4, #0x0] + ldrh r2, [r3, #0x0] + mov r1, #0x0 + ldr r4, _020DCB94 ; =0x0A005555 + strh r1, [r3, #0x0] + mov r3, #0xaa + strb r3, [r4, #0x0] + ldr r1, _020DCB98 ; =0x0A002AAA + mov r3, #0x55 + strb r3, [r1, #0x0] + mov r3, #0xa0 + strb r3, [r4, #0x0] + ldr r1, _020DCB80 ; =0x02104048 + and r4, r0, #0x3 + ldr r1, [r1, #0x24] + cmp r1, #0x0 + beq _020DCB18 + mov r0, #0xff +_020DCB0C: + strb r0, [r5], #0x1 + subs r1, r1, #0x1 + bne _020DCB0C +_020DCB18: + ldr ip, _020DCB90 ; =0x04000208 + ldr r3, _020DCB9C ; =0x021D6B24 + ldrh r0, [r12, #0x0] + sub r1, r5, #0x1 + strh r2, [r12, #0x0] + ldr r3, [r3, #0x0] + mov r0, #0x1 + mov r2, #0xff + blx r3 + ldr r2, _020DCB88 ; =0x04000204 + movs r5, r0 + ldrh r1, [r2, #0x0] + andne r0, r5, #0xff00 + orrne r0, r0, #0x2 + movne r0, r0, lsl #0x10 + bic r1, r1, #0x3 + movne r5, r0, lsr #0x10 + orr r1, r1, r4 + ldr r0, _020DCB84 ; =0x021D6B0C + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r5 + add sp, sp, #0x24 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DCB80: .word 0x02104048 +_020DCB84: .word 0x021D6B0C +_020DCB88: .word 0x04000204 +_020DCB8C: .word 0x021D6B20 +_020DCB90: .word 0x04000208 +_020DCB94: .word 0x0A005555 +_020DCB98: .word 0x0A002AAA +_020DCB9C: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashChipCoreAT +CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020DCC7C ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r4, _020DCC80 ; =0x04000204 + ldr r0, _020DCC84 ; =0x021D6B20 + ldrh r3, [r4, #0x0] + ldr r0, [r0, #0x0] + ldrh r1, [r4, #0x0] + ldr r2, [r0, #0x10] + ldr r0, _020DCC88 ; =0x04000208 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r4, #0x0] + ldrh r4, [r0, #0x0] + mov r2, #0x0 + ldr r1, _020DCC8C ; =0x021D6B38 + strh r2, [r0, #0x0] + ldr lr, _020DCC90 ; =0x0A005555 + str r4, [r1, #0x0] + mov r5, #0xaa + ldr r4, _020DCC94 ; =0x0A002AAA + strb r5, [lr, #0x0] + mov r12, #0x55 + strb r12, [r4, #0x0] + mov r2, #0x80 + strb r2, [lr, #0x0] + strb r5, [lr, #0x0] + strb r12, [r4, #0x0] + mov r2, #0x10 + strb r2, [lr, #0x0] + ldrh r2, [r0, #0x0] + ldr r2, [r1, #0x0] + ldr r1, _020DCC98 ; =0x021D6B24 + strh r2, [r0, #0x0] + ldr r4, [r1, #0x0] + mov r0, #0x3 + mov r1, #0xa000000 + mov r2, #0xff + and r5, r3, #0x3 + blx r4 + ldr r3, _020DCC80 ; =0x04000204 + ldr r1, _020DCC7C ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DCC7C: .word 0x021D6B0C +_020DCC80: .word 0x04000204 +_020DCC84: .word 0x021D6B20 +_020DCC88: .word 0x04000208 +_020DCC8C: .word 0x021D6B38 +_020DCC90: .word 0x0A005555 +_020DCC94: .word 0x0A002AAA +_020DCC98: .word 0x021D6B24 + + arm_func_start CTRDGi_WriteFlashSectorAsyncLE +CTRDGi_WriteFlashSectorAsyncLE: ; 0x020DCC9C + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DCCC4 ; =CTRDGi_WriteFlashSectorCoreLE + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DCCC4: .word CTRDGi_WriteFlashSectorCoreLE + + arm_func_start CTRDGi_EraseFlashSectorAsyncLE +CTRDGi_EraseFlashSectorAsyncLE: ; 0x020DCCC8 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov r2, r1 + strh r0, [sp, #0x20] + ldr r1, _020DCCF0 ; =CTRDGi_EraseFlashSectorCoreLE + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DCCF0: .word CTRDGi_EraseFlashSectorCoreLE + + arm_func_start CTRDGi_EraseFlashChipAsyncLE +CTRDGi_EraseFlashChipAsyncLE: ; 0x020DCCF4 + stmdb sp!, {lr} + sub sp, sp, #0x24 + ldr r1, _020DCD18 ; =CTRDGi_EraseFlashChipCoreLE + mov r2, r0 + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DCD18: .word CTRDGi_EraseFlashChipCoreLE + + arm_func_start CTRDGi_WriteFlashSectorLE +CTRDGi_WriteFlashSectorLE: ; 0x020DCD1C + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlashSectorCoreLE + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashSectorLE +CTRDGi_EraseFlashSectorLE: ; 0x020DCD48 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + bl CTRDGi_EraseFlashSectorCoreLE + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashChipLE +CTRDGi_EraseFlashChipLE: ; 0x020DCD70 + stmdb sp!, {lr} + sub sp, sp, #0x24 + add r0, sp, #0x0 + bl CTRDGi_EraseFlashChipCoreLE + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_VerifyFlashErase +CTRDGi_VerifyFlashErase: ; 0x020DCD94 + stmdb sp!, {r4-r6,lr} + ldr r2, _020DCE14 ; =0x021D6B0C + mov r4, r0 + ldrh r0, [r2, #0x0] + mov r5, r1 + bl OS_LockCartridge + ldr ip, _020DCE18 ; =0x04000204 + ldr r0, _020DCE1C ; =0x021D6B20 + ldrh r3, [r12, #0x0] + ldr r0, [r0, #0x0] + ldrh r1, [r12, #0x0] + ldr r2, [r0, #0x10] + mov r0, r4 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r12, #0x0] + and r6, r3, #0x3 + mov r4, #0x0 + blx r5 + cmp r0, #0x0 + ldr r2, _020DCE18 ; =0x04000204 + ldr r0, _020DCE14 ; =0x021D6B0C + ldrh r1, [r2, #0x0] + ldrne r4, _020DCE20 ; =0x00008004 + bic r1, r1, #0x3 + orr r1, r1, r6 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020DCE14: .word 0x021D6B0C +_020DCE18: .word 0x04000204 +_020DCE1C: .word 0x021D6B20 +_020DCE20: .word 0x00008004 + + arm_func_start CTRDGi_VerifyFlashCoreFF +CTRDGi_VerifyFlashCoreFF: ; 0x020DCE24 + ldr r1, _020DCE54 ; =0x021D6B20 + ldr r1, [r1, #0x0] + ldr r2, [r1, #0x4] + cmp r2, #0x0 + beq _020DCE4C +_020DCE38: + ldrb r1, [r0], #0x1 + cmp r1, #0xff + bne _020DCE4C + subs r2, r2, #0x1 + bne _020DCE38 +_020DCE4C: + mov r0, r2 + bx lr + .balign 4 +_020DCE54: .word 0x021D6B20 + + arm_func_start CTRDGi_WriteFlashSectorCoreLE +CTRDGi_WriteFlashSectorCoreLE: ; 0x020DCE58 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + str r0, [r4, #0x0] + ldrh r7, [sp, #0x20] + ldr r6, [sp, #0xc] + cmp r7, #0x10 + addcs sp, sp, #0x24 + ldrhs r0, _020DD018 ; =0x000080FF + ldmcsia sp!, {r4-r9,lr} + bxcs lr + ldr r0, _020DD01C ; =0x021D6B20 + mov r9, #0x0 + ldr r0, [r0, #0x0] + ldrh r0, [r0, #0x8] + mov r0, r7, lsl r0 + add r4, r0, #0xa000000 + ldr r5, _020DD020 ; =CTRDGi_VerifyFlashCoreFF +_020DCEB8: + mov r0, r7 + bl CTRDGi_EraseFlashSectorLE + movs r8, r0 + bne _020DCEE0 + mov r0, r4 + mov r1, r5 + bl CTRDGi_VerifyFlashErase + mov r0, r0, lsl #0x10 + movs r8, r0, lsr #0x10 + beq _020DCF04 +_020DCEE0: + add r0, r9, #0x1 + mov r0, r0, lsl #0x10 + cmp r9, #0x50 + mov r9, r0, lsr #0x10 + bne _020DCEB8 + add sp, sp, #0x24 + mov r0, r8 + ldmia sp!, {r4-r9,lr} + bx lr +_020DCF04: + mov r5, #0x1 + cmp r9, #0x0 + movne r5, #0x6 + cmp r5, #0x1 + mov r9, #0x1 + blo _020DCF38 +_020DCF1C: + mov r0, r7 + bl CTRDGi_EraseFlashSectorLE + add r0, r9, #0x1 + mov r0, r0, lsl #0x10 + mov r9, r0, lsr #0x10 + cmp r9, r5 + bls _020DCF1C +_020DCF38: + ldr r0, _020DD024 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r5, _020DD028 ; =0x04000204 + ldr r1, _020DD01C ; =0x021D6B20 + ldrh r0, [r5, #0x0] + ldr r3, [r1, #0x0] + ldrh r2, [r5, #0x0] + ldr r3, [r3, #0x10] + ldr r7, _020DD02C ; =0x021D6B08 + bic r2, r2, #0x3 + orr r2, r2, r3 + strh r2, [r5, #0x0] + ldr r1, [r1, #0x0] + ldr sb, _020DD030 ; =0x04000208 + ldr r1, [r1, #0x4] + mov r2, #0x0 + strh r1, [r7, #0x0] + ldrh r3, [r9, #0x0] + ldr r1, _020DD034 ; =0x021D6B38 + and r5, r0, #0x3 + strh r2, [r9, #0x0] + ldrh r0, [r7, #0x0] + str r3, [r1, #0x0] + cmp r0, #0x0 + beq _020DCFD4 +_020DCFA0: + mov r0, r6 + mov r1, r4 + bl CTRDGi_ProgramFlashByteLE + movs r8, r0 + bne _020DCFD4 + ldrh r0, [r7, #0x0] + add r6, r6, #0x1 + add r4, r4, #0x1 + sub r0, r0, #0x1 + strh r0, [r7, #0x0] + ldrh r0, [r7, #0x0] + cmp r0, #0x0 + bne _020DCFA0 +_020DCFD4: + ldr r3, _020DD030 ; =0x04000208 + ldr r0, _020DD034 ; =0x021D6B38 + ldrh r1, [r3, #0x0] + ldr r0, [r0, #0x0] + ldr r2, _020DD028 ; =0x04000204 + strh r0, [r3, #0x0] + ldrh r1, [r2, #0x0] + ldr r0, _020DD024 ; =0x021D6B0C + bic r1, r1, #0x3 + orr r1, r1, r5 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r8 + add sp, sp, #0x24 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020DD018: .word 0x000080FF +_020DD01C: .word 0x021D6B20 +_020DD020: .word CTRDGi_VerifyFlashCoreFF +_020DD024: .word 0x021D6B0C +_020DD028: .word 0x04000204 +_020DD02C: .word 0x021D6B08 +_020DD030: .word 0x04000208 +_020DD034: .word 0x021D6B38 + + arm_func_start CTRDGi_ProgramFlashByteLE +CTRDGi_ProgramFlashByteLE: ; 0x020DD038 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020DD08C ; =0x0A005555 + mov r3, #0xaa + ldr r2, _020DD090 ; =0x0A002AAA + strb r3, [r12, #0x0] + mov r3, #0x55 + mov lr, r0 + strb r3, [r2, #0x0] + mov r0, #0xa0 + strb r0, [r12, #0x0] + ldrb r2, [lr, #0x0] + ldr r3, _020DD094 ; =0x021D6B24 + mov r0, #0x1 + strb r2, [r1, #0x0] + ldrb r2, [lr, #0x0] + ldr r3, [r3, #0x0] + blx r3 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD08C: .word 0x0A005555 +_020DD090: .word 0x0A002AAA +_020DD094: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashSectorCoreLE +CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x28 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + str r0, [r4, #0x0] + ldrh r4, [sp, #0x20] + cmp r4, #0x10 + addcs sp, sp, #0x28 + ldrhs r0, _020DD1B8 ; =0x000080FF + ldmcsia sp!, {r4-r6,lr} + bxcs lr + ldr r0, _020DD1BC ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r6, _020DD1C0 ; =0x04000204 + ldr r1, _020DD1C4 ; =0x021D6B20 + ldrh r3, [r6, #0x0] + ldr r0, [r1, #0x0] + ldrh r2, [r6, #0x0] + ldr r5, [r0, #0x10] + ldr r0, _020DD1C8 ; =0x04000208 + bic r2, r2, #0x3 + orr r2, r2, r5 + strh r2, [r6, #0x0] + ldr r1, [r1, #0x0] + ldrh r5, [r0, #0x0] + ldrh r12, [r1, #0x8] + mov r1, #0x0 + ldr r2, _020DD1CC ; =0x021D6B38 + strh r1, [r0, #0x0] + mov r6, r4, lsl r12 + ldr lr, _020DD1D0 ; =0x0A005555 + str r5, [r2, #0x0] + mov r5, #0xaa + ldr r4, _020DD1D4 ; =0x0A002AAA + strb r5, [lr, #0x0] + mov r12, #0x55 + strb r12, [r4, #0x0] + mov r1, #0x80 + strb r1, [lr, #0x0] + strb r5, [lr, #0x0] + strb r12, [r4, #0x0] + add r1, r6, #0xa000000 + mov r4, #0x30 + strb r4, [r1, #0x0] + ldrh r4, [r0, #0x0] + ldr r4, [r2, #0x0] + ldr r2, _020DD1D8 ; =0x021D6B24 + strh r4, [r0, #0x0] + ldr r4, [r2, #0x0] + mov r0, #0x2 + mov r2, #0xff + and r5, r3, #0x3 + blx r4 + ldr r3, _020DD1C0 ; =0x04000204 + ldr r1, _020DD1BC ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x28 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020DD1B8: .word 0x000080FF +_020DD1BC: .word 0x021D6B0C +_020DD1C0: .word 0x04000204 +_020DD1C4: .word 0x021D6B20 +_020DD1C8: .word 0x04000208 +_020DD1CC: .word 0x021D6B38 +_020DD1D0: .word 0x0A005555 +_020DD1D4: .word 0x0A002AAA +_020DD1D8: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashChipCoreLE +CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020DD2B8 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r4, _020DD2BC ; =0x04000204 + ldr r0, _020DD2C0 ; =0x021D6B20 + ldrh r3, [r4, #0x0] + ldr r0, [r0, #0x0] + ldrh r1, [r4, #0x0] + ldr r2, [r0, #0x10] + ldr r0, _020DD2C4 ; =0x04000208 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r4, #0x0] + ldrh r4, [r0, #0x0] + mov r2, #0x0 + ldr r1, _020DD2C8 ; =0x021D6B38 + strh r2, [r0, #0x0] + ldr lr, _020DD2CC ; =0x0A005555 + str r4, [r1, #0x0] + mov r5, #0xaa + ldr r4, _020DD2D0 ; =0x0A002AAA + strb r5, [lr, #0x0] + mov r12, #0x55 + strb r12, [r4, #0x0] + mov r2, #0x80 + strb r2, [lr, #0x0] + strb r5, [lr, #0x0] + strb r12, [r4, #0x0] + mov r2, #0x10 + strb r2, [lr, #0x0] + ldrh r2, [r0, #0x0] + ldr r2, [r1, #0x0] + ldr r1, _020DD2D4 ; =0x021D6B24 + strh r2, [r0, #0x0] + ldr r4, [r1, #0x0] + mov r0, #0x3 + mov r1, #0xa000000 + mov r2, #0xff + and r5, r3, #0x3 + blx r4 + ldr r3, _020DD2BC ; =0x04000204 + ldr r1, _020DD2B8 ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DD2B8: .word 0x021D6B0C +_020DD2BC: .word 0x04000204 +_020DD2C0: .word 0x021D6B20 +_020DD2C4: .word 0x04000208 +_020DD2C8: .word 0x021D6B38 +_020DD2CC: .word 0x0A005555 +_020DD2D0: .word 0x0A002AAA +_020DD2D4: .word 0x021D6B24 + + arm_func_start CTRDGi_WriteFlashSectorAsyncMX +CTRDGi_WriteFlashSectorAsyncMX: ; 0x020DD2D8 + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DD300 ; =CTRDGi_WriteFlashSectorCoreMX + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD300: .word CTRDGi_WriteFlashSectorCoreMX + + arm_func_start CTRDGi_EraseFlashSectorAsyncMX +CTRDGi_EraseFlashSectorAsyncMX: ; 0x020DD304 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov r2, r1 + strh r0, [sp, #0x20] + ldr r1, _020DD32C ; =CTRDGi_EraseFlashSectorCoreMX + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD32C: .word CTRDGi_EraseFlashSectorCoreMX + + arm_func_start CTRDGi_EraseFlashChipAsyncMX +CTRDGi_EraseFlashChipAsyncMX: ; 0x020DD330 + stmdb sp!, {lr} + sub sp, sp, #0x24 + ldr r1, _020DD354 ; =CTRDGi_EraseFlashChipCoreMX + mov r2, r0 + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD354: .word CTRDGi_EraseFlashChipCoreMX + + arm_func_start CTRDGi_WriteFlashSectorMX +CTRDGi_WriteFlashSectorMX: ; 0x020DD358 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlashSectorCoreMX + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashSectorMX +CTRDGi_EraseFlashSectorMX: ; 0x020DD384 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + bl CTRDGi_EraseFlashSectorCoreMX + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashChipMX +CTRDGi_EraseFlashChipMX: ; 0x020DD3AC + stmdb sp!, {lr} + sub sp, sp, #0x24 + add r0, sp, #0x0 + bl CTRDGi_EraseFlashChipCoreMX + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteFlashSectorCoreMX +CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x28 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DD540 ; =0x021D6B20 + ldr r1, [r5, #0x0] + ldr r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r5, [sp, #0x20] + ldrh r0, [r0, #0xa] + ldr r4, [sp, #0xc] + cmp r5, r0 + addcs sp, sp, #0x28 + ldrhs r0, _020DD544 ; =0x000080FF + ldmcsia sp!, {r4-r8,lr} + bxcs lr + mov r0, r5 + bl CTRDGi_EraseFlashSectorMX + movs r6, r0 + addne sp, sp, #0x28 + ldmneia sp!, {r4-r8,lr} + bxne lr + ldr r0, _020DD548 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r7, _020DD54C ; =0x04000204 + ldr r0, _020DD540 ; =0x021D6B20 + ldrh r3, [r7, #0x0] + ldr r2, [r0, #0x0] + ldrh r1, [r7, #0x0] + mov r0, r5, lsl #0xc + ldr r2, [r2, #0x10] + bic r1, r1, #0x3 + orr r1, r1, r2 + mov r0, r0, lsr #0x10 + strh r1, [r7, #0x0] + and r7, r3, #0x3 + bl CTRDGi_SetFlashBankMx + ldr r0, _020DD540 ; =0x021D6B20 + and r1, r5, #0xf + ldr r3, [r0, #0x0] + mov r0, r1, lsl #0x10 + ldr r2, [r3, #0x4] + ldr r8, _020DD550 ; =0x021D6B08 + ldr r1, _020DD554 ; =0x04000208 + strh r2, [r8, #0x0] + ldrh r3, [r3, #0x8] + mov r5, r0, lsr #0x10 + ldrh r2, [r1, #0x0] + mov r0, #0x0 + mov r3, r5, lsl r3 + strh r0, [r1, #0x0] + ldrh r1, [r8, #0x0] + ldr r0, _020DD558 ; =0x021D6B38 + add r5, r3, #0xa000000 + str r2, [r0, #0x0] + cmp r1, #0x0 + beq _020DD4FC +_020DD4C8: + mov r0, r4 + mov r1, r5 + bl CTRDGi_ProgramFlashByteMX + movs r6, r0 + bne _020DD4FC + ldrh r0, [r8, #0x0] + add r4, r4, #0x1 + add r5, r5, #0x1 + sub r0, r0, #0x1 + strh r0, [r8, #0x0] + ldrh r0, [r8, #0x0] + cmp r0, #0x0 + bne _020DD4C8 +_020DD4FC: + ldr r3, _020DD554 ; =0x04000208 + ldr r0, _020DD558 ; =0x021D6B38 + ldrh r1, [r3, #0x0] + ldr r0, [r0, #0x0] + ldr r2, _020DD54C ; =0x04000204 + strh r0, [r3, #0x0] + ldrh r1, [r2, #0x0] + ldr r0, _020DD548 ; =0x021D6B0C + bic r1, r1, #0x3 + orr r1, r1, r7 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r6 + add sp, sp, #0x28 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020DD540: .word 0x021D6B20 +_020DD544: .word 0x000080FF +_020DD548: .word 0x021D6B0C +_020DD54C: .word 0x04000204 +_020DD550: .word 0x021D6B08 +_020DD554: .word 0x04000208 +_020DD558: .word 0x021D6B38 + + arm_func_start CTRDGi_ProgramFlashByteMX +CTRDGi_ProgramFlashByteMX: ; 0x020DD55C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020DD5B0 ; =0x0A005555 + mov r3, #0xaa + ldr r2, _020DD5B4 ; =0x0A002AAA + strb r3, [r12, #0x0] + mov r3, #0x55 + mov lr, r0 + strb r3, [r2, #0x0] + mov r0, #0xa0 + strb r0, [r12, #0x0] + ldrb r2, [lr, #0x0] + ldr r3, _020DD5B8 ; =0x021D6B24 + mov r0, #0x1 + strb r2, [r1, #0x0] + ldrb r2, [lr, #0x0] + ldr r3, [r3, #0x0] + blx r3 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD5B0: .word 0x0A005555 +_020DD5B4: .word 0x0A002AAA +_020DD5B8: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashSectorCoreMX +CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x34 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x10 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DD748 ; =0x021D6B20 + ldr r1, [r5, #0x0] + ldr r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r4, [sp, #0x30] + ldrh r0, [r0, #0xa] + cmp r4, r0 + addcs sp, sp, #0x34 + ldrhs r0, _020DD74C ; =0x000080FF + ldmcsia sp!, {r4-r11,lr} + bxcs lr + ldr r0, _020DD750 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r5, _020DD754 ; =0x04000204 + ldr r0, _020DD748 ; =0x021D6B20 + ldrh r3, [r5, #0x0] + ldr r2, [r0, #0x0] + ldrh r1, [r5, #0x0] + mov r0, r4, lsl #0xc + ldr r2, [r2, #0x10] + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r5, #0x0] + and r1, r3, #0x3 + mov r0, r0, lsr #0x10 + str r1, [sp, #0x0] + bl CTRDGi_SetFlashBankMx + and r0, r4, #0xf + mov r0, r0, lsl #0x10 + mov r9, r0, lsr #0x10 + mov r0, #0x2 + mov r10, #0x0 + str r0, [sp, #0x8] + mov r0, #0xff + ldr r8, _020DD758 ; =0x04000208 + mov r11, r10 + mov r7, #0xaa + mov r6, #0x55 + mov r5, #0x80 + mov r4, #0x30 + str r0, [sp, #0xc] +_020DD684: + ldr r0, _020DD748 ; =0x021D6B20 + ldrh r12, [r8, #0x0] + ldr r0, [r0, #0x0] + ldr r3, _020DD75C ; =0x021D6B38 + ldrh r1, [r0, #0x8] + ldr r0, [sp, #0x8] + ldr r2, [sp, #0xc] + strh r11, [r8, #0x0] + str r12, [r3, #0x0] + ldr r3, _020DD760 ; =0x0A005555 + mov r1, r9, lsl r1 + strb r7, [r3, #0x0] + ldr r3, _020DD764 ; =0x0A002AAA + add r1, r1, #0xa000000 + strb r6, [r3, #0x0] + ldr r3, _020DD760 ; =0x0A005555 + strb r5, [r3, #0x0] + strb r7, [r3, #0x0] + ldr r3, _020DD764 ; =0x0A002AAA + strb r6, [r3, #0x0] + strb r4, [r1, #0x0] + ldrh r3, [r8, #0x0] + ldr r3, _020DD75C ; =0x021D6B38 + ldr r3, [r3, #0x0] + strh r3, [r8, #0x0] + ldr r3, _020DD768 ; =0x021D6B24 + ldr r3, [r3, #0x0] + blx r3 + str r0, [sp, #0x4] + ands r0, r0, #0xa000 + beq _020DD714 + cmp r10, #0x0 + addeq r0, r10, #0x1 + moveq r0, r0, lsl #0x10 + moveq r10, r0, lsr #0x10 + beq _020DD684 +_020DD714: + ldr r2, _020DD754 ; =0x04000204 + ldr r1, _020DD750 ; =0x021D6B0C + ldrh r0, [r2, #0x0] + bic r3, r0, #0x3 + ldr r0, [sp, #0x0] + orr r0, r3, r0 + strh r0, [r2, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + ldr r0, [sp, #0x4] + add sp, sp, #0x34 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020DD748: .word 0x021D6B20 +_020DD74C: .word 0x000080FF +_020DD750: .word 0x021D6B0C +_020DD754: .word 0x04000204 +_020DD758: .word 0x04000208 +_020DD75C: .word 0x021D6B38 +_020DD760: .word 0x0A005555 +_020DD764: .word 0x0A002AAA +_020DD768: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashChipCoreMX +CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020DD848 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r4, _020DD84C ; =0x04000204 + ldr r0, _020DD850 ; =0x021D6B20 + ldrh r3, [r4, #0x0] + ldr r0, [r0, #0x0] + ldrh r1, [r4, #0x0] + ldr r2, [r0, #0x10] + ldr r0, _020DD854 ; =0x04000208 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r4, #0x0] + ldrh r4, [r0, #0x0] + mov r2, #0x0 + ldr r1, _020DD858 ; =0x021D6B38 + strh r2, [r0, #0x0] + ldr lr, _020DD85C ; =0x0A005555 + str r4, [r1, #0x0] + mov r5, #0xaa + ldr r4, _020DD860 ; =0x0A002AAA + strb r5, [lr, #0x0] + mov r12, #0x55 + strb r12, [r4, #0x0] + mov r2, #0x80 + strb r2, [lr, #0x0] + strb r5, [lr, #0x0] + strb r12, [r4, #0x0] + mov r2, #0x10 + strb r2, [lr, #0x0] + ldrh r2, [r0, #0x0] + ldr r2, [r1, #0x0] + ldr r1, _020DD864 ; =0x021D6B24 + strh r2, [r0, #0x0] + ldr r4, [r1, #0x0] + mov r0, #0x3 + mov r1, #0xa000000 + mov r2, #0xff + and r5, r3, #0x3 + blx r4 + ldr r3, _020DD84C ; =0x04000204 + ldr r1, _020DD848 ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DD848: .word 0x021D6B0C +_020DD84C: .word 0x04000204 +_020DD850: .word 0x021D6B20 +_020DD854: .word 0x04000208 +_020DD858: .word 0x021D6B38 +_020DD85C: .word 0x0A005555 +_020DD860: .word 0x0A002AAA +_020DD864: .word 0x021D6B24 + + arm_func_start FUN_020DD868 +FUN_020DD868: ; 0x020DD868 + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DD890 ; =FUN_020DD8C0 + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD890: .word FUN_020DD8C0 + + arm_func_start FUN_020DD894 +FUN_020DD894: ; 0x020DD894 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl FUN_020DD8C0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_020DD8C0 +FUN_020DD8C0: ; 0x020DD8C0 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x28 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DD9E8 ; =0x021D6B20 + ldr r1, [r5, #0x0] + ldr r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r5, [sp, #0x20] + ldrh r0, [r0, #0xa] + ldr r4, [sp, #0xc] + cmp r5, r0 + addcs sp, sp, #0x28 + ldrhs r0, _020DD9EC ; =0x000080FF + ldmcsia sp!, {r4-r8,lr} + bxcs lr + mov r0, r5 + bl CTRDGi_EraseFlashSectorLE + movs r6, r0 + addne sp, sp, #0x28 + ldmneia sp!, {r4-r8,lr} + bxne lr + ldr r0, _020DD9F0 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r7, _020DD9F4 ; =0x04000204 + ldr r0, _020DD9E8 ; =0x021D6B20 + ldrh r3, [r7, #0x0] + ldr r2, [r0, #0x0] + ldrh r1, [r7, #0x0] + ldr r2, [r2, #0x10] + ldr r8, _020DD9F8 ; =0x021D6B08 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r7, #0x0] + ldr r1, [r0, #0x0] + and r7, r3, #0x3 + ldr r0, [r1, #0x4] + strh r0, [r8, #0x0] + ldrh r1, [r1, #0x8] + ldrh r0, [r8, #0x0] + mov r1, r5, lsl r1 + cmp r0, #0x0 + add r5, r1, #0xa000000 + beq _020DD9B8 +_020DD984: + mov r0, r4 + mov r1, r5 + bl CTRDGi_ProgramFlashByteLE + movs r6, r0 + bne _020DD9B8 + ldrh r0, [r8, #0x0] + add r4, r4, #0x1 + add r5, r5, #0x1 + sub r0, r0, #0x1 + strh r0, [r8, #0x0] + ldrh r0, [r8, #0x0] + cmp r0, #0x0 + bne _020DD984 +_020DD9B8: + ldr r2, _020DD9F4 ; =0x04000204 + ldr r0, _020DD9F0 ; =0x021D6B0C + ldrh r1, [r2, #0x0] + bic r1, r1, #0x3 + orr r1, r1, r7 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r6 + add sp, sp, #0x28 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020DD9E8: .word 0x021D6B20 +_020DD9EC: .word 0x000080FF +_020DD9F0: .word 0x021D6B0C +_020DD9F4: .word 0x04000204 +_020DD9F8: .word 0x021D6B08 + + arm_func_start CTRDGi_SetTask +CTRDGi_SetTask: ; 0x020DD9FC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r3, _020DDAA8 ; =0x021D6B50 + mov r7, r0 + mov r4, r1 + mov r6, r2 + ldr r5, [r3, #0x0] + bl CTRDGi_IsTaskAvailable +_020DDA1C: ; 0x020DDA1C + cmp r0, #0x0 + bne _020DDA28 + bl OS_Terminate +_020DDA28: + ldr r0, _020DDAAC ; =0x021D6B54 + ldrb r0, [r0, #0x22] + cmp r0, #0x0 + beq _020DDA3C + bl OS_Terminate +_020DDA3C: + bl OS_DisableInterrupts + mov r1, #0x1 + strb r1, [r7, #0x22] + str r4, [r7, #0x0] + add r1, r5, #0xc4 + cmp r7, r1 + mov r4, r0 + ldreq r0, _020DDAA8 ; =0x021D6B50 + str r6, [r7, #0x4] + moveq r1, #0x0 + streq r1, [r0, #0x0] + ldr ip, _020DDAAC ; =0x021D6B54 + ldmia r7!, {r0-r3} + mov r6, r12 + stmia r12!, {r0-r3} + ldmia r7!, {r0-r3} + stmia r12!, {r0-r3} + ldr r1, [r7, #0x0] + mov r0, r5 + str r1, [r12, #0x0] + str r6, [r5, #0xc0] + bl OS_WakeupThreadDirect + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DDAA8: .word 0x021D6B50 +_020DDAAC: .word 0x021D6B54 + + arm_func_start CTRDGi_TaskThread +CTRDGi_TaskThread: ; 0x020DDAB0 + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x28 + ldr r6, _020DDB94 ; =0x021D6B54 + ldr r5, _020DDB98 ; =0x021D6B50 + mov r4, r0 + add r9, sp, #0x0 + mov r8, #0x0 + mov r7, #0x24 +_020DDAD0: + mov r0, r9 + mov r1, r8 + mov r2, r7 + bl MI_CpuFill8 + bl OS_DisableInterrupts + ldr r1, [r4, #0xc0] + mov r10, r0 + cmp r1, #0x0 + bne _020DDB08 +_020DDAF4: + mov r0, r8 + bl OS_SleepThread + ldr r0, [r4, #0xc0] + cmp r0, #0x0 + beq _020DDAF4 +_020DDB08: + ldr lr, [r4, #0xc0] + add r12, sp, #0x0 + ldmia lr!, {r0-r3} + stmia r12!, {r0-r3} + ldmia lr!, {r0-r3} + stmia r12!, {r0-r3} + ldr r1, [lr, #0x0] + mov r0, r10 + str r1, [r12, #0x0] + bl OS_RestoreInterrupts + ldr r1, [sp, #0x0] + cmp r1, #0x0 + beq _020DDB48 + mov r0, r9 + blx r1 + str r0, [sp, #0x8] +_020DDB48: + bl OS_DisableInterrupts + ldr r1, [sp, #0x4] + mov r10, r0 + strb r8, [r6, #0x22] + cmp r1, #0x0 + beq _020DDB68 + mov r0, r9 + blx r1 +_020DDB68: + ldr r0, [r5, #0x0] + cmp r0, #0x0 + beq _020DDB84 + mov r0, r10 + str r8, [r4, #0xc0] + bl OS_RestoreInterrupts + b _020DDAD0 +_020DDB84: + bl OS_ExitThread + add sp, sp, #0x28 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020DDB94: .word 0x021D6B54 +_020DDB98: .word 0x021D6B50 + + arm_func_start CTRDGi_InitTaskInfo +CTRDGi_InitTaskInfo: + ldr ip, _020DDBAC ; =MI_CpuFill8 + mov r1, #0x0 + mov r2, #0x24 + bx r12 + .balign 4 +_020DDBAC: .word MI_CpuFill8 + + arm_func_start CTRDGi_IsTaskAvailable +CTRDGi_IsTaskAvailable: + ldr r0, _020DDBC8 ; =0x021D6B50 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + bx lr + .balign 4 +_020DDBC8: .word 0x021D6B50 + + arm_func_start CTRDGi_InitTaskThread +CTRDGi_InitTaskThread: ; 0x020DDBCC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020DDC4C ; =0x021D6B50 + mov r4, r0 + ldr r0, [r1, #0x0] + cmp r0, #0x0 + bne _020DDC38 + add r0, r5, #0xc4 + str r5, [r1, #0x0] + bl CTRDGi_InitTaskInfo + ldr r0, _020DDC50 ; =0x021D6B54 + bl CTRDGi_InitTaskInfo +_020DDC04: ; 0x020DDC04 + mov r0, #0x0 + str r0, [r5, #0xc0] + mov r2, #0x400 + ldr r1, _020DDC54 ; =CTRDGi_TaskThread + ldr r3, _020DDC58 ; =0x021D6F78 + mov r0, r5 + str r2, [sp, #0x0] + mov r2, #0x14 + str r2, [sp, #0x4] + mov r2, r5 + bl OS_CreateThread + mov r0, r5 + bl OS_WakeupThreadDirect +_020DDC38: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DDC4C: .word 0x021D6B50 +_020DDC50: .word 0x021D6B54 +_020DDC54: .word CTRDGi_TaskThread +_020DDC58: .word 0x021D6F78 diff --git a/asm/MATH_arm9.s b/asm/MATH_arm9.s new file mode 100644 index 00000000..3b384077 --- /dev/null +++ b/asm/MATH_arm9.s @@ -0,0 +1,320 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start MATH_CountPopulation +MATH_CountPopulation: ; 0x020DDC5C + ldr r1, _020DDC94 ; =0x55555555 + ldr r2, _020DDC98 ; =0x33333333 + and r1, r1, r0, lsr #0x1 + sub r0, r0, r1 + and r1, r0, r2 + and r0, r2, r0, lsr #0x2 + add r1, r1, r0 + ldr r0, _020DDC9C ; =0x0F0F0F0F + add r1, r1, r1, lsr #0x4 + and r0, r1, r0 + add r0, r0, r0, lsr #0x8 + add r0, r0, r0, lsr #0x10 + and r0, r0, #0xff + bx lr + .balign 4 +_020DDC94: .word 0x55555555 +_020DDC98: .word 0x33333333 +_020DDC9C: .word 0x0F0F0F0F + + arm_func_start MATH_CalcSHA1 +MATH_CalcSHA1: ; 0x020DDCA0 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x68 + mov r6, r0 + add r0, sp, #0x0 + mov r5, r1 + mov r4, r2 + bl MATH_SHA1Init +_020DDCBC: ; 0x020DDCBC + add r0, sp, #0x0 + mov r1, r5 + mov r2, r4 + bl MATH_SHA1Update +_020DDCCC: ; 0x020DDCCC + add r0, sp, #0x0 + mov r1, r6 + bl MATH_SHA1GetHash + add sp, sp, #0x68 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start MATH_CalcMD5 +MATH_CalcMD5: ; 0x020DDCE4 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x58 + mov r6, r0 + add r0, sp, #0x0 + mov r5, r1 + mov r4, r2 + bl MATH_MD5Init +_020DDD00: ; 0x020DDD00 + add r0, sp, #0x0 + mov r1, r5 + mov r2, r4 + bl MATH_MD5Update + add r1, sp, #0x0 + mov r0, r6 + bl MATH_MD5GetHash + add sp, sp, #0x58 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start MATH_CalcCRC32 +MATH_CalcCRC32: ; 0x020DDD28 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mvn r12, #0x0 + mov r3, r2 + add r1, sp, #0x0 + mov r2, lr + str r12, [sp, #0x0] + bl MATHi_CRC32UpdateRev +_020DDD4C: ; 0x020DDD4C + ldr r0, [sp, #0x0] + mvn r0, r0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start MATH_CalcCRC16CCITT +MATH_CalcCRC16CCITT: ; 0x020DDD60 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020DDD94 ; =0x0000FFFF + mov lr, r1 + mov r3, r2 + add r1, sp, #0x0 + mov r2, lr + strh r12, [sp, #0x0] + bl MATHi_CRC16Update + ldrh r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DDD94: .word 0x0000FFFF + + arm_func_start MATH_CalcCRC16 +MATH_CalcCRC16: ; 0x020DDD98 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r12, #0x0 + mov r3, r2 + add r1, sp, #0x0 + mov r2, lr + strh r12, [sp, #0x0] + bl MATHi_CRC16UpdateRev + ldrh r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start MATH_CalcCRC8 +MATH_CalcCRC8: ; 0x020DDDCC + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r12, #0x0 + mov r3, r2 + add r1, sp, #0x0 + mov r2, lr + strb r12, [sp, #0x0] + bl MATHi_CRC8Update +_020DDDF0: ; 0x020DDDF0 + ldrb r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start MATHi_CRC32UpdateRev +MATHi_CRC32UpdateRev: + stmdb sp!, {r4,lr} + cmp r3, #0x0 + ldr r4, [r1, #0x0] + mov lr, #0x0 + bls _020DDE38 +_020DDE14: + ldrb r12, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, r3 + eor r12, r4, r12 + and r12, r12, #0xff + ldr r12, [r0, r12, lsl #0x2] + add r2, r2, #0x1 + eor r4, r12, r4, lsr #0x8 + blo _020DDE14 +_020DDE38: + str r4, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC32InitTableRev +MATHi_CRC32InitTableRev: ; 0x020DDE44 + stmdb sp!, {r4,lr} + mov lr, #0x0 + mov r3, lr +_020DDE50: + mov r4, lr + mov r12, r3 +_020DDE58: + ands r2, r4, #0x1 + eorne r4, r1, r4, lsr #0x1 + add r12, r12, #0x1 + moveq r4, r4, lsr #0x1 + cmp r12, #0x8 + blo _020DDE58 + str r4, [r0, lr, lsl #0x2] + add lr, lr, #0x1 + cmp lr, #0x100 + blo _020DDE50 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC16UpdateRev +MATHi_CRC16UpdateRev: ; 0x020DDE88 + stmdb sp!, {r4,lr} + cmp r3, #0x0 + ldrh r4, [r1, #0x0] + mov lr, #0x0 + bls _020DDEC4 +_020DDE9C: + ldrb r12, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, r3 + eor r12, r4, r12 + and r12, r12, #0xff + mov r12, r12, lsl #0x1 + ldrh r12, [r0, r12] + add r2, r2, #0x1 + eor r4, r12, r4, lsr #0x8 + blo _020DDE9C +_020DDEC4: + strh r4, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC16Update +MATHi_CRC16Update: ; 0x020DDED0 + stmdb sp!, {r4,lr} + cmp r3, #0x0 + ldrh r4, [r1, #0x0] + mov lr, #0x0 + bls _020DDF0C +_020DDEE4: + ldrb r12, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, r3 + eor r12, r12, r4, lsr #0x8 + and r12, r12, #0xff + mov r12, r12, lsl #0x1 + ldrh r12, [r0, r12] + add r2, r2, #0x1 + eor r4, r12, r4, lsl #0x8 + blo _020DDEE4 +_020DDF0C: + strh r4, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC16InitTableRev +MATHi_CRC16InitTableRev: ; 0x020DDF18 + stmdb sp!, {r4,lr} + mov lr, #0x0 + mov r3, lr +_020DDF24: + mov r4, lr + mov r12, r3 +_020DDF2C: + ands r2, r4, #0x1 + eorne r4, r1, r4, lsr #0x1 + add r12, r12, #0x1 + moveq r4, r4, lsr #0x1 + cmp r12, #0x8 + blo _020DDF2C + mov r2, lr, lsl #0x1 + add lr, lr, #0x1 + strh r4, [r0, r2] + cmp lr, #0x100 + blo _020DDF24 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC16InitTable +MATHi_CRC16InitTable: ; 0x020DDF60 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, #0x0 + mov r12, r4 + mov r3, r4 +_020DDF74: + mov r5, r12 + mov lr, r3 +_020DDF7C: + ands r2, r5, #0x8000 + eorne r5, r1, r5, lsl #0x1 + add lr, lr, #0x1 + moveq r5, r5, lsl #0x1 + cmp lr, #0x8 + blo _020DDF7C + mov r2, r4, lsl #0x1 + add r4, r4, #0x1 + strh r5, [r0, r2] + cmp r4, #0x100 + add r12, r12, #0x100 + blo _020DDF74 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start MATHi_CRC8Update +MATHi_CRC8Update: + stmdb sp!, {r4,lr} + cmp r3, #0x0 + ldrb r4, [r1, #0x0] + mov lr, #0x0 + bls _020DDFEC +_020DDFCC: + ldrb r12, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, r3 + eor r12, r4, r12 + and r12, r12, #0xff + add r2, r2, #0x1 + ldrb r4, [r0, r12] + blo _020DDFCC +_020DDFEC: + strb r4, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC8InitTable +MATHi_CRC8InitTable: ; 0x020DDFF8 + stmdb sp!, {r4,lr} + mov lr, #0x0 + mov r3, lr +_020DE004: + mov r4, lr + mov r12, r3 +_020DE00C: + ands r2, r4, #0x80 + eorne r4, r1, r4, lsl #0x1 + add r12, r12, #0x1 + moveq r4, r4, lsl #0x1 + cmp r12, #0x8 + blo _020DE00C + strb r4, [r0, lr] + add lr, lr, #0x1 + cmp lr, #0x100 + blo _020DE004 + ldmia sp!, {r4,lr} + bx lr diff --git a/asm/rom2dism.s b/asm/rom2dism.s index 051a235d..7994c2ed 100644 --- a/asm/rom2dism.s +++ b/asm/rom2dism.s @@ -5,3111 +5,6 @@ .text - arm_func_start CTRDG_CheckEnabled -CTRDG_CheckEnabled: ; 0x020DB11C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl CTRDG_IsOptionCartridge -_020DB128: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12 - .byte 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x1C, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0xBF, 0xC9, 0xFF, 0xEB - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CTRDG_Enable -CTRDG_Enable: ; 0x020DB15C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, _020DB1AC ; =0x021D6940 - mov r4, r0 - str r5, [r1, #0x0] - bl CTRDG_IsOptionCartridge -_020DB17C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x55, 0xE3, 0x01, 0x1A, 0xA0, 0x13, 0x05, 0x1A, 0xA0, 0x03 - .byte 0x0F, 0x0A, 0xA0, 0xE3, 0x0F, 0xC6, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x60, 0xC8, 0xFF, 0xEB - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020DB1AC: .word 0x021D6940 - - arm_func_start CTRDG_IsEnabled -CTRDG_IsEnabled: ; 0x020DB1B0 - ldr r0, _020DB1BC ; =0x021D6940 - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020DB1BC: .word 0x021D6940 - - arm_func_start CTRDGi_AccessCommon -CTRDGi_AccessCommon: ; 0x020DB1C0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl CTRDG_IsExisting -_020DB1DC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x02, 0x00, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0xC9, 0xFF, 0xFF, 0xEB, 0xC0, 0x00, 0x9F, 0xE5, 0xB2, 0x00, 0xD0, 0xE1, 0x01, 0xBC, 0xFF, 0xEB - .byte 0x21, 0x00, 0x54, 0xE3, 0x0D, 0x00, 0x00, 0x8A, 0x21, 0x00, 0x54, 0xE3, 0x17, 0x00, 0x00, 0x2A - .byte 0x11, 0x00, 0x54, 0xE3, 0x06, 0x00, 0x00, 0x8A, 0x10, 0x00, 0x54, 0xE3, 0x1C, 0x00, 0x00, 0x3A - .byte 0x10, 0x00, 0x54, 0xE3, 0x19, 0x00, 0x00, 0x0A, 0x11, 0x00, 0x54, 0xE3, 0x0B, 0x00, 0x00, 0x0A - .byte 0x17, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x54, 0xE3, 0xB0, 0x60, 0xC7, 0x01, 0x14, 0x00, 0x00, 0xEA - .byte 0x40, 0x00, 0x54, 0xE3, 0x02, 0x00, 0x00, 0x8A, 0x40, 0x00, 0x54, 0xE3, 0x00, 0x60, 0x87, 0x05 - .byte 0x0F, 0x00, 0x00, 0xEA, 0x41, 0x00, 0x54, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0x0C, 0x00, 0x00, 0xEA - .byte 0x00, 0x00, 0x55, 0xE3, 0x00, 0x00, 0xD7, 0x15, 0x00, 0x00, 0xC5, 0x15, 0x08, 0x00, 0x00, 0xEA - .byte 0x00, 0x00, 0x55, 0xE3, 0xB0, 0x00, 0xD7, 0x11, 0xB0, 0x00, 0xC5, 0x11, 0x04, 0x00, 0x00, 0xEA - .byte 0x00, 0x00, 0x55, 0xE3, 0x00, 0x00, 0x97, 0x15, 0x00, 0x00, 0x85, 0x15, 0x00, 0x00, 0x00, 0xEA - .byte 0x00, 0x60, 0xC7, 0xE5, 0x20, 0x00, 0x9F, 0xE5, 0xB2, 0x00, 0xD0, 0xE1, 0x7C, 0xBB, 0xFF, 0xEB - .byte 0xF9, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x13, 0x00, 0x00, 0xA0, 0x03 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x44, 0x69, 0x1D, 0x02 - - arm_func_start CTRDG_Read32 -CTRDG_Read32: ; 0x020DB2C0 - ldr ip, _020DB2D4 ; =CTRDGi_AccessCommon - mov r2, r1 - mov r1, #0x0 - mov r3, #0x41 - bx r12 - .balign 4 -_020DB2D4: .word CTRDGi_AccessCommon - - arm_func_start CTRDGi_CopyCommon -CTRDGi_CopyCommon: ; 0x020DB2D8 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl CTRDG_IsExisting -_020DB2F4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x00, 0x00, 0xA0, 0x03 - .byte 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x83, 0xFF, 0xFF, 0xEB, 0x18, 0x01, 0x9F, 0xE5 - .byte 0xB2, 0x00, 0xD0, 0xE1, 0xBB, 0xBB, 0xFF, 0xEB, 0x18, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x10, 0xE2 - .byte 0x04, 0x00, 0x00, 0x1A, 0x07, 0x00, 0xA0, 0xE1, 0x9A, 0xC9, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1 - .byte 0x04, 0x10, 0xA0, 0xE1, 0x88, 0xC3, 0xFF, 0xEB, 0x18, 0x00, 0x9D, 0xE5, 0x11, 0x00, 0x50, 0xE3 - .byte 0x09, 0x00, 0x00, 0x8A, 0x10, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x3A, 0x10, 0x00, 0x50, 0xE3 - .byte 0x0D, 0x00, 0x00, 0x0A, 0x11, 0x00, 0x50, 0xE3, 0x17, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x00, 0xEA - .byte 0x01, 0x00, 0x50, 0xE3, 0x1E, 0x00, 0x00, 0x0A, 0x25, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0x00, 0x8A, 0x20, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x0A, 0x20, 0x00, 0x00, 0xEA - .byte 0x21, 0x00, 0x50, 0xE3, 0x11, 0x00, 0x00, 0x0A, 0x1D, 0x00, 0x00, 0xEA, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x06, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x04, 0x30, 0xA0, 0xE1, 0x1A, 0xCA, 0xFF, 0xEB - .byte 0x17, 0x00, 0x00, 0xEA, 0x07, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1 - .byte 0x04, 0x30, 0xA0, 0xE1, 0x32, 0xCA, 0xFF, 0xEB, 0x11, 0x00, 0x00, 0xEA, 0x06, 0x00, 0xA0, 0xE1 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x84, 0xCB, 0xFF, 0xEB, 0x0C, 0x00, 0x00, 0xEA - .byte 0x06, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x8B, 0xCB, 0xFF, 0xEB - .byte 0x07, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x54, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x04, 0x00, 0x00, 0x9A - .byte 0x01, 0x00, 0xD6, 0xE4, 0x01, 0x10, 0x81, 0xE2, 0x04, 0x00, 0x51, 0xE1, 0x01, 0x00, 0xC5, 0xE4 - .byte 0xFA, 0xFF, 0xFF, 0x3A, 0x20, 0x00, 0x9F, 0xE5, 0xB2, 0x00, 0xD0, 0xE1, 0x20, 0xBB, 0xFF, 0xEB - .byte 0x9D, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x13, 0x00, 0x00, 0xA0, 0x03 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x44, 0x69, 0x1D, 0x02 - - arm_func_start CTRDG_CpuCopy32 -CTRDG_CpuCopy32: ; 0x020DB430 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r3, r2 - mov r12, #0x21 - mov r1, r0 - mov r2, lr - mov r0, #0x0 - str r12, [sp, #0x0] - bl CTRDGi_CopyCommon - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDG_CpuCopy16 -CTRDG_CpuCopy16: ; 0x020DB464 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r3, r2 - mov r12, #0x11 - mov r1, r0 - mov r2, lr - mov r0, #0x0 - str r12, [sp, #0x0] - bl CTRDGi_CopyCommon - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDG_CpuCopy8 -CTRDG_CpuCopy8: ; 0x020DB498 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r3, r2 - cmp lr, #0x8000000 - blo _020DB4DC - ldr r2, _020DB500 ; =0x0A010000 - cmp lr, r2 - bhs _020DB4DC - mov r12, #0x1 - mov r2, r0 - mov r0, #0x0 - str r12, [sp, #0x0] - bl CTRDGi_CopyCommon - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020DB4DC: - mov r12, #0x1 - mov r1, r0 - mov r2, lr - mov r0, #0x0 - str r12, [sp, #0x0] - bl CTRDGi_CopyCommon - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DB500: .word 0x0A010000 - - arm_func_start CTRDGi_SendtoPxi -CTRDGi_SendtoPxi: ; 0x020DB504 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r1, r7 - mov r0, #0xd - mov r2, #0x0 - bl PXI_SendWordByFifo -_020DB520: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x01, 0x60, 0xA0, 0xE3, 0x0D, 0x50, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3, 0x06, 0x00, 0xA0, 0xE1 - .byte 0x2A, 0x94, 0xFC, 0xFB, 0x05, 0x00, 0xA0, 0xE1, 0x07, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1 - .byte 0xE2, 0xD1, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0xF7, 0xFF, 0xFF, 0x1A, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CTRDGi_UnlockByProcessor -CTRDGi_UnlockByProcessor: ; 0x020DB568 - stmdb sp!, {r4,lr} - mov r4, r1 - ldr r1, [r4, #0x0] - cmp r1, #0x0 - bne _020DB580 - bl OS_UnlockCartridge -_020DB580: - ldr r0, [r4, #0x4] - bl OS_RestoreInterrupts - ldmia sp!, {r4,lr} - bx lr - - arm_func_start CTRDGi_LockByProcessor -CTRDGi_LockByProcessor: ; 0x020DB590 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - ldr r5, _020DB60C ; =0x027FFFE8 - mov r4, #0x1 - bl OS_DisableInterrupts - str r0, [r6, #0x4] - mov r0, r5 - bl OS_ReadOwnerOfLockWord - and r0, r0, #0x40 - str r0, [r6, #0x0] - ldr r0, [r6, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r7,lr} - bxne lr - mov r0, r7 - bl OS_TryLockCartridge -_020DB5DC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x04, 0x00, 0x96, 0xE5 - .byte 0x4B, 0xC7, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0xFC, 0x93, 0xFC, 0xFB, 0xE9, 0xFF, 0xFF, 0xEA - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020DB60C: .word 0x027FFFE8 - - arm_func_start CTRDGi_RestoreAccessCycle -CTRDGi_RestoreAccessCycle: ; 0x020DB610 - ldr r3, _020DB640 ; =0x04000204 - ldr r2, [r0, #0x0] - ldrh r1, [r3, #0x0] - bic r1, r1, #0xc - orr r1, r1, r2, lsl #0x2 - strh r1, [r3, #0x0] - ldrh r1, [r3, #0x0] - ldr r2, [r0, #0x4] - bic r0, r1, #0x10 - orr r0, r0, r2, lsl #0x4 - strh r0, [r3, #0x0] - bx lr - .balign 4 -_020DB640: .word 0x04000204 - - arm_func_start CTRDGi_ChangeLatestAccessCycle -CTRDGi_ChangeLatestAccessCycle: ; 0x020DB644 - ldr r2, _020DB688 ; =0x04000204 - ldrh r1, [r2, #0x0] - and r1, r1, #0xc - mov r1, r1, asr #0x2 - str r1, [r0, #0x0] - ldrh r1, [r2, #0x0] - and r1, r1, #0x10 - mov r1, r1, asr #0x4 - str r1, [r0, #0x4] - ldrh r0, [r2, #0x0] - bic r0, r0, #0xc - orr r0, r0, #0xc - strh r0, [r2, #0x0] - ldrh r0, [r2, #0x0] - bic r0, r0, #0x10 - strh r0, [r2, #0x0] - bx lr - .balign 4 -_020DB688: .word 0x04000204 - - arm_func_start CTRDG_IsExisting -CTRDG_IsExisting: - stmdb sp!, {r4,lr} - sub sp, sp, #0x10 - ldr r2, _020DB798 ; =0x027FFC30 - ldr r0, _020DB79C ; =0x0000FFFF - ldrh r1, [r2, #0x0] - mov r4, #0x1 - cmp r1, r0 - addeq sp, sp, #0x10 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ldrb r0, [r2, #0x5] - mov r0, r0, lsl #0x1e - mov r0, r0, lsr #0x1f - cmp r0, #0x1 - addeq sp, sp, #0x10 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ldr r0, _020DB7A0 ; =0x021D6944 - add r1, sp, #0x0 - ldrh r0, [r0, #0x2] - bl CTRDGi_LockByProcessor - add r0, sp, #0x8 - bl CTRDGi_ChangeLatestAccessCycle - mov r0, #0x8000000 - ldrb r2, [r0, #0xb2] - cmp r2, #0x96 - bne _020DB714 - ldr r1, _020DB798 ; =0x027FFC30 - ldrh r0, [r0, #0xbe] - ldrh r1, [r1, #0x0] - cmp r1, r0 - bne _020DB75C -_020DB714: - cmp r2, #0x96 - beq _020DB734 - ldr r1, _020DB798 ; =0x027FFC30 - ldr r0, _020DB7A4 ; =0x0801FFFE - ldrh r1, [r1, #0x0] - ldrh r0, [r0, #0x0] - cmp r1, r0 - bne _020DB75C -_020DB734: - ldr r2, _020DB798 ; =0x027FFC30 - mov r0, #0x8000000 - ldr r1, [r2, #0x8] - ldr r0, [r0, #0xac] - cmp r1, r0 - beq _020DB770 - ldrb r0, [r2, #0x5] - mov r0, r0, lsl #0x1f - movs r0, r0, lsr #0x1f - beq _020DB770 -_020DB75C: - ldr r1, _020DB798 ; =0x027FFC30 - mov r4, #0x0 - ldrb r0, [r1, #0x5] - orr r0, r0, #0x2 - strb r0, [r1, #0x5] -_020DB770: - add r0, sp, #0x8 - bl CTRDGi_RestoreAccessCycle - ldr r0, _020DB7A0 ; =0x021D6944 - add r1, sp, #0x0 - ldrh r0, [r0, #0x2] - bl CTRDGi_UnlockByProcessor - mov r0, r4 - add sp, sp, #0x10 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020DB798: .word 0x027FFC30 -_020DB79C: .word 0x0000FFFF -_020DB7A0: .word 0x021D6944 -_020DB7A4: .word 0x0801FFFE - - arm_func_start CTRDG_IsPulledOut -CTRDG_IsPulledOut: ; 0x020DB7A8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020DB800 ; =0x027FFC30 - ldr r0, _020DB804 ; =0x0000FFFF - ldrh r1, [r2, #0x0] - cmp r1, r0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {lr} - bxeq lr - ldrb r0, [r2, #0x5] - mov r0, r0, lsl #0x1e - movs r0, r0, lsr #0x1f - bne _020DB7E4 - bl CTRDG_IsExisting -_020DB7E4: - ldr r0, _020DB800 ; =0x027FFC30 - ldrb r0, [r0, #0x5] - mov r0, r0, lsl #0x1e - mov r0, r0, lsr #0x1f - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DB800: .word 0x027FFC30 -_020DB804: .word 0x0000FFFF - - arm_func_start CTRDGi_GetAgbMakerCodeAtInit -CTRDGi_GetAgbMakerCodeAtInit: ; 0x020DB808 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl CTRDGi_IsAgbCartridgeAtInit -_020DB814: - .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x9F, 0x15, 0xB6, 0x40, 0xD0, 0x11 - .byte 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x30, 0xFC, 0x7F, 0x02 - - arm_func_start CTRDG_GetAgbMakerCode -CTRDG_GetAgbMakerCode: ; 0x020DB830 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl CTRDG_IsExisting -_020DB83C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0x00, 0x0A, 0xEF, 0xFF, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1 - .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CTRDGi_GetAgbGameCodeAtInit -CTRDGi_GetAgbGameCodeAtInit: ; 0x020DB858 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl CTRDGi_IsAgbCartridgeAtInit -_020DB864: - .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x9F, 0x15, 0x08, 0x40, 0x90, 0x15 - .byte 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x30, 0xFC, 0x7F, 0x02 - - arm_func_start CTRDG_GetAgbGameCode -CTRDG_GetAgbGameCode: ; 0x020DB880 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl CTRDG_IsExisting -_020DB88C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0x00, 0x0A, 0xEF, 0xFF, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1 - .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CTRDGi_IsAgbCartridgeAtInit -CTRDGi_IsAgbCartridgeAtInit: - ldr r0, _020DB8BC ; =0x027FFC30 - ldrb r0, [r0, #0x5] - mov r0, r0, lsl #0x1f - mov r0, r0, lsr #0x1f - bx lr - .balign 4 -_020DB8BC: .word 0x027FFC30 - - arm_func_start CTRDG_IsOptionCartridge -CTRDG_IsOptionCartridge: - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl CTRDG_IsExisting -_020DB8CC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x05, 0x00, 0x00, 0x0A, 0xF3, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02 - .byte 0x01, 0x00, 0xA0, 0x03, 0x00, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CTRDG_IsAgbCartridge -CTRDG_IsAgbCartridge: ; 0x020DB8FC - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl CTRDG_IsExisting -_020DB908: - .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A - .byte 0xE4, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x01, 0x00, 0xA0, 0x13 - .byte 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CTRDGi_InitCommon -CTRDGi_InitCommon: ; 0x020DB938 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020DB970 ; =0x021D6944 - mov r3, #0x0 - ldr r2, _020DB974 ; =0x05000001 - add r0, sp, #0x0 - str r3, [sp, #0x0] - blx FUN_020002FE - bl OS_GetLockID - ldr r1, _020DB970 ; =0x021D6944 - strh r0, [r1, #0x2] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DB970: .word 0x021D6944 -_020DB974: .word 0x05000001 - - arm_func_start CTRDGi_CallbackForSetPhi -CTRDGi_CallbackForSetPhi: ; 0x020DB978 - ldr r0, _020DB988 ; =0x021D694C - mov r1, #0x0 - str r1, [r0, #0x0] - bx lr - .balign 4 -_020DB988: .word 0x021D694C - - arm_func_start CTRDG_TerminateForPulledOut -CTRDG_TerminateForPulledOut: ; 0x020DB98C - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r0, #0x2 - bl CTRDGi_SendtoPxi - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_PulledOutCallback -CTRDGi_PulledOutCallback: ; 0x020DB9AC - stmdb sp!, {lr} - sub sp, sp, #0x4 - and r0, r1, #0x3f - cmp r0, #0x11 - bne _020DBA14 - ldr r0, _020DBA24 ; =0x021D6954 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r1, _020DBA28 ; =0x021D6958 - mov r0, #0x0 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - beq _020DB9F0 - blx r1 -_020DB9F0: - cmp r0, #0x0 - beq _020DB9FC - bl CTRDG_TerminateForPulledOut -_020DB9FC: - ldr r0, _020DBA24 ; =0x021D6954 - mov r1, #0x1 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020DBA14: - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DBA24: .word 0x021D6954 -_020DBA28: .word 0x021D6958 - - arm_func_start CTRDGi_CallbackForInitModuleInfo -CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C - stmdb sp!, {lr} - sub sp, sp, #0x4 - and r0, r1, #0x3f - cmp r0, #0x1 - ldreq r0, _020DBA64 ; =0x021D6944 - moveq r1, #0x1 - streqh r1, [r0, #0x0] - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DBA64: .word 0x021D6944 - - arm_func_start CTRDGi_InitModuleInfo -CTRDGi_InitModuleInfo: ; 0x020DBA68 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x14 - ldr r0, _020DBC50 ; =0x021D6948 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - addne sp, sp, #0x14 - ldmneia sp!, {r4-r7,lr} - bxne lr - ldr r1, _020DBC54 ; =0x04000300 - mov r2, #0x1 - str r2, [r0, #0x0] - ldrh r0, [r1, #0x0] - ands r0, r0, #0x1 - addeq sp, sp, #0x14 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - mov r0, #0x40000 - bl OS_SetIrqMask - ldr r3, _020DBC58 ; =0x04000208 - mov r2, #0x1 - ldrh r4, [r3, #0x0] - ldr r1, _020DBC5C ; =0x021D6944 - mov r6, r0 - strh r2, [r3, #0x0] - ldrh r0, [r1, #0x2] - add r1, sp, #0x0 - bl CTRDGi_LockByProcessor - ldr r1, _020DBC60 ; =0x04000204 - add r0, sp, #0x8 - ldrh r1, [r1, #0x0] - and r1, r1, #0x8000 - mov r5, r1, asr #0xf - bl CTRDGi_ChangeLatestAccessCycle - ldr r3, _020DBC60 ; =0x04000204 - ldr r0, _020DBC64 ; =0x021D6960 - ldrh r2, [r3, #0x0] - add r0, r0, #0x80 - mov r1, #0x40 - bic r2, r2, #0x8000 - strh r2, [r3, #0x0] - bl DC_InvalidateRange - ldr r2, _020DBC64 ; =0x021D6960 - ldr r1, _020DBC68 ; =0x08000080 - mov r0, #0x1 - mov r3, #0x40 - add r2, r2, #0x80 - bl MI_DmaCopy16 - ldr r2, _020DBC60 ; =0x04000204 - add r0, sp, #0x8 - ldrh r1, [r2, #0x0] - bic r1, r1, #0x8000 - orr r1, r1, r5, lsl #0xf - strh r1, [r2, #0x0] - bl CTRDGi_RestoreAccessCycle - ldr r0, _020DBC5C ; =0x021D6944 - add r1, sp, #0x0 - ldrh r0, [r0, #0x2] - bl CTRDGi_UnlockByProcessor - ldr r0, _020DBC6C ; =0x027FFF9B - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _020DBB70 - ldr r0, _020DBC70 ; =0x027FFF9A - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _020DBBDC -_020DBB70: - ldr r2, _020DBC64 ; =0x021D6960 - ldr r0, _020DBC74 ; =0x027FFC30 - ldrh r1, [r2, #0xbe] - mov r3, #0x0 - strh r1, [r0, #0x0] -_020DBB84: - add r0, r2, r3 - ldrb r1, [r0, #0xb5] - add r0, r3, #0x2700000 - add r0, r0, #0xff000 - add r3, r3, #0x1 - strb r1, [r0, #0xC32] - cmp r3, #0x3 - blt _020DBB84 - ldrh r0, [r2, #0xb0] - ldr r1, _020DBC74 ; =0x027FFC30 - strh r0, [r1, #0x6] - ldr r0, [r2, #0xac] - str r0, [r1, #0x8] - bl CTRDG_IsExisting -_020DBBBC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x20, 0xA0, 0x13, 0xA0, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0x03, 0x00, 0x20, 0xC1, 0xE5 - .byte 0x98, 0x00, 0x9F, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0xC0, 0xE5 -_020DBBDC: - ldr r0, _020DBC78 ; =0xFFFF0020 - ldr r1, _020DBC7C ; =0x021D6964 - mov r2, #0x9c - bl MIi_CpuCopy32 - bl DC_FlushAll - ldr r0, _020DBC64 ; =0x021D6960 - add r0, r0, #0xfe000000 - mov r0, r0, lsr #0x5 - mov r0, r0, lsl #0x6 - orr r0, r0, #0x1 - bl CTRDGi_SendtoPxi - ldr r5, _020DBC5C ; =0x021D6944 - ldrh r0, [r5, #0x0] - cmp r0, #0x1 - beq _020DBC30 - mov r7, #0x1 -_020DBC1C: - mov r0, r7 - blx FUN_020005F2 - ldrh r0, [r5, #0x0] - cmp r0, #0x1 - bne _020DBC1C -_020DBC30: - ldr r2, _020DBC58 ; =0x04000208 - mov r0, r6 - ldrh r1, [r2, #0x0] - strh r4, [r2, #0x0] - bl OS_SetIrqMask - add sp, sp, #0x14 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DBC50: .word 0x021D6948 -_020DBC54: .word 0x04000300 -_020DBC58: .word 0x04000208 -_020DBC5C: .word 0x021D6944 -_020DBC60: .word 0x04000204 -_020DBC64: .word 0x021D6960 -_020DBC68: .word 0x08000080 -_020DBC6C: .word 0x027FFF9B -_020DBC70: .word 0x027FFF9A -_020DBC74: .word 0x027FFC30 -_020DBC78: .word 0xFFFF0020 -_020DBC7C: .word 0x021D6964 - - arm_func_start CTRDG_Init -CTRDG_Init: ; 0x020DBC80 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020DBD34 ; =0x021D6950 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - mov r1, #0x1 - str r1, [r0, #0x0] - bl CTRDGi_InitCommon - ldr r0, _020DBD38 ; =0x021D6954 - mov r1, #0x0 - str r1, [r0, #0x0] - bl PXI_Init - mov r5, #0xd - mov r4, #0x1 - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady -_020DBCD0: - .byte 0x00, 0x00, 0x50, 0xE3, 0xFA, 0xFF, 0xFF, 0x0A, 0x5C, 0x10, 0x9F, 0xE5, 0x0D, 0x00, 0xA0, 0xE3 - .byte 0x35, 0xD0, 0xFF, 0xEB, 0x5F, 0xFF, 0xFF, 0xEB, 0x0D, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x31, 0xD0, 0xFF, 0xEB, 0x44, 0x10, 0x9F, 0xE5, 0x0D, 0x00, 0xA0, 0xE3, 0x2E, 0xD0, 0xFF, 0xEB - .byte 0x3C, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x38, 0x00, 0x9F, 0xE5, 0x00, 0x20, 0x81, 0xE5 - .byte 0xAD, 0x07, 0x00, 0xEB, 0x30, 0x10, 0x9F, 0xE5, 0x11, 0x00, 0xA0, 0xE3, 0x26, 0xD0, 0xFF, 0xEB - .byte 0x00, 0x00, 0xA0, 0xE3, 0x0C, 0xFD, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 -_020DBD34: .word 0x021D6950 -_020DBD38: .word 0x021D6954 -_020DBD3C: - .byte 0x2C, 0xBA, 0x0D, 0x02 - .byte 0xAC, 0xB9, 0x0D, 0x02, 0x58, 0x69, 0x1D, 0x02, 0x20, 0x6A, 0x1D, 0x02, 0x78, 0xB9, 0x0D, 0x02 - - arm_func_start CTRDG_IdentifyAgbBackup -CTRDG_IdentifyAgbBackup: ; 0x020DBD50 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - cmp r7, #0x1 - mov r0, #0x1 - bhi _020DBEAC - bl OS_GetLockID - ldr r1, _020DBED8 ; =0x021D6B0C - strh r0, [r1, #0x0] - ldrh r0, [r1, #0x0] - bl OS_LockCartridge - ldr r6, _020DBEDC ; =0x04000204 - ldr r1, _020DBEE0 ; =0x02103FE4 - ldrh r3, [r6, #0x0] - ldrh r2, [r6, #0x0] - ldr r0, _020DBEE4 ; =0x021D6B28 - and r4, r3, #0x3 - bic r2, r2, #0x3 - orr r2, r2, #0x3 - strh r2, [r6, #0x0] - str r1, [r0, #0x0] - bl CTRDGi_ReadFlashID - ldr r2, _020DBEDC ; =0x04000204 - mov r6, r0 - ldrh r1, [r2, #0x0] - cmp r7, #0x0 - ldreq r5, _020DBEE8 ; =0x02103FF4 - bic r1, r1, #0x3 - orr r1, r1, r4 - cmp r7, #0x1 - ldr r0, _020DBED8 ; =0x021D6B0C - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - ldreq r5, _020DBEEC ; =0x02103FE8 - bl OS_UnlockCartridge2 - ldr r2, [r5, #0x0] - mov r0, #0x1 - ldrh r1, [r2, #0x38] - cmp r1, #0x0 - beq _020DBE14 - and r3, r6, #0xff -_020DBDF4: - ldrh r1, [r2, #0x38] - cmp r3, r1 - moveq r0, #0x0 - beq _020DBE14 - ldr r2, [r5, #0x4]! - ldrh r1, [r2, #0x38] - cmp r1, #0x0 - bne _020DBDF4 -_020DBE14: - ldr r2, [r2, #0x0] - ldr r1, _020DBEF0 ; =0x021D6B14 - ldr r3, _020DBEF4 ; =0x021D6B34 - str r2, [r1, #0x0] - ldr r1, [r5, #0x0] - ldr r2, _020DBEF8 ; =0x021D6B2C - ldr r4, [r1, #0x4] - ldr r1, _020DBEFC ; =0x021D6B18 - str r4, [r3, #0x0] - ldr r3, [r5, #0x0] - ldr r6, _020DBF00 ; =0x021D6B1C - ldr r3, [r3, #0x8] - ldr r4, _020DBF04 ; =0x021D6B30 - str r3, [r2, #0x0] - ldr r2, [r5, #0x0] - ldr r3, _020DBF08 ; =0x021D6B24 - ldr r7, [r2, #0xc] - ldr r2, _020DBEE4 ; =0x021D6B28 - str r7, [r1, #0x0] - ldr r7, [r5, #0x0] - ldr r1, _020DBF0C ; =0x021D6B20 - ldr r7, [r7, #0x10] - add sp, sp, #0x4 - str r7, [r6, #0x0] - ldr r6, [r5, #0x0] - ldr r6, [r6, #0x14] - str r6, [r4, #0x0] - ldr r4, [r5, #0x0] - ldr r4, [r4, #0x18] - str r4, [r3, #0x0] - ldr r3, [r5, #0x0] - ldr r3, [r3, #0x1c] - str r3, [r2, #0x0] - ldr r2, [r5, #0x0] - add r2, r2, #0x20 - str r2, [r1, #0x0] - ldmia sp!, {r4-r7,lr} - bx lr -_020DBEAC: - cmp r7, #0x2 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r7,lr} - bxne lr - bl OS_GetLockID - ldr r1, _020DBF10 ; =0x021D6B4C - strh r0, [r1, #0x0] - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DBED8: .word 0x021D6B0C -_020DBEDC: .word 0x04000204 -_020DBEE0: .word 0x02103FE4 -_020DBEE4: .word 0x021D6B28 -_020DBEE8: .word 0x02103FF4 -_020DBEEC: .word 0x02103FE8 -_020DBEF0: .word 0x021D6B14 -_020DBEF4: .word 0x021D6B34 -_020DBEF8: .word 0x021D6B2C -_020DBEFC: .word 0x021D6B18 -_020DBF00: .word 0x021D6B1C -_020DBF04: .word 0x021D6B30 -_020DBF08: .word 0x021D6B24 -_020DBF0C: .word 0x021D6B20 -_020DBF10: .word 0x021D6B4C - - arm_func_start CTRDG_WriteAndVerifyAgbFlashAsync -CTRDG_WriteAndVerifyAgbFlashAsync: ; 0x020DBF14 - stmdb sp!, {lr} - sub sp, sp, #0x24 - str r1, [sp, #0xc] - strh r0, [sp, #0x20] - str r2, [sp, #0x18] - ldr r1, _020DBF44 ; =CTRDGi_WriteAndVerifyAgbFlashSectorCore - add r0, sp, #0x0 - mov r2, r3 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DBF44: .word CTRDGi_WriteAndVerifyAgbFlashSectorCore - - arm_func_start CTRDG_VerifyAgbFlash -CTRDG_VerifyAgbFlash: ; 0x020DBF48 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0xc] - str r2, [sp, #0x18] - bl CTRDGi_VerifyAgbFlashCore - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDG_WriteAgbFlashSector -CTRDG_WriteAgbFlashSector: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020DBF90 ; =0x021D6B14 - ldr r2, [r2, #0x0] - blx r2 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DBF90: .word 0x021D6B14 - - arm_func_start CTRDG_ReadAgbFlash -CTRDG_ReadAgbFlash: ; 0x020DBF94 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0x14] - str r2, [sp, #0x1c] - str r3, [sp, #0x18] - bl CTRDGi_ReadAgbFlashCore - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_WriteAndVerifyAgbFlashSectorCore -CTRDGi_WriteAndVerifyAgbFlashSectorCore: ; 0x020DBFC0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x24 - mov r4, r0 - ldmia r4!, {r0-r3} - add r12, sp, #0x0 - stmia r12!, {r0-r3} - ldmia r4!, {r0-r3} - stmia r12!, {r0-r3} - ldr r0, [r4, #0x0] - mov r7, #0x0 - str r0, [r12, #0x0] - ldrh r6, [sp, #0x20] - ldr r5, [sp, #0xc] - ldr r4, [sp, #0x18] - mov r0, r6 - mov r1, r5 - bl CTRDG_WriteAgbFlashSector -_020DC004: - .byte 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x06, 0x00, 0xA0, 0xE1 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0xCA, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x24, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0x10, 0x87, 0xE2 - .byte 0x01, 0x18, 0xA0, 0xE1, 0x21, 0x78, 0xA0, 0xE1, 0x03, 0x00, 0x57, 0xE3, 0xED, 0xFF, 0xFF, 0x3A - .byte 0x24, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CTRDGi_VerifyAgbFlashCore -CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x24 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, _020DC128 ; =0x021D6B0C - ldr r1, [r5, #0x0] - ldrh r0, [r0, #0x0] - str r1, [r4, #0x0] - ldrh r6, [sp, #0x20] - ldr r5, [sp, #0xc] - ldr r4, [sp, #0x18] - bl OS_LockCartridge - ldr r3, _020DC12C ; =0x04000204 - ldr r0, _020DC130 ; =0x021D6B20 - ldrh r2, [r3, #0x0] - ldrh r1, [r3, #0x0] - and r7, r2, #0x3 - bic r1, r1, #0x3 - orr r1, r1, #0x3 - strh r1, [r3, #0x0] - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x0] - cmp r0, #0x20000 - bne _020DC0D4 - mov r0, r6, lsl #0xc - mov r0, r0, lsr #0x10 - bl CTRDGi_SetFlashBankMx - and r0, r6, #0xf - mov r0, r0, lsl #0x10 - mov r6, r0, lsr #0x10 -_020DC0D4: - ldr r1, _020DC130 ; =0x021D6B20 - mov r0, r5 - ldr r1, [r1, #0x0] - mov r2, r4 - ldrh r1, [r1, #0x8] - mov r1, r6, lsl r1 - add r1, r1, #0xa000000 - bl CTRDGi_VerifyFlashSectorCore - ldr r3, _020DC12C ; =0x04000204 - ldr r1, _020DC128 ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r7 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x24 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DC128: .word 0x021D6B0C -_020DC12C: .word 0x04000204 -_020DC130: .word 0x021D6B20 - - arm_func_start CTRDGi_VerifyFlashSectorCore -CTRDGi_VerifyFlashSectorCore: ; 0x020DC134 - cmp r2, #0x0 - sub r2, r2, #0x1 - beq _020DC160 -_020DC140: - ldrb r12, [r1], #0x1 - ldrb r3, [r0], #0x1 - cmp r12, r3 - subne r0, r1, #0x1 - bxne lr - cmp r2, #0x0 - sub r2, r2, #0x1 - bne _020DC140 -_020DC160: - mov r0, #0x0 - bx lr - - arm_func_start CTRDGi_ReadAgbFlashCore -CTRDGi_ReadAgbFlashCore: ; 0x020DC168 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x28 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, _020DC25C ; =0x021D6B0C - ldr r1, [r5, #0x0] - ldrh r0, [r0, #0x0] - str r1, [r4, #0x0] - ldrh r7, [sp, #0x20] - ldr r6, [sp, #0x14] - ldr r5, [sp, #0x1c] - ldr r4, [sp, #0x18] - bl OS_LockCartridge - ldr r3, _020DC260 ; =0x04000204 - ldr r0, _020DC264 ; =0x021D6B20 - ldrh r2, [r3, #0x0] - ldrh r1, [r3, #0x0] - and r8, r2, #0x3 - bic r1, r1, #0x3 - orr r1, r1, #0x3 - strh r1, [r3, #0x0] - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x0] - cmp r0, #0x20000 - bne _020DC1F4 - mov r0, r7, lsl #0xc - mov r0, r0, lsr #0x10 - bl CTRDGi_SetFlashBankMx - and r0, r7, #0xf - mov r0, r0, lsl #0x10 - mov r7, r0, lsr #0x10 -_020DC1F4: - ldr r0, _020DC264 ; =0x021D6B20 - cmp r4, #0x0 - ldr r0, [r0, #0x0] - sub r4, r4, #0x1 - ldrh r0, [r0, #0x8] - mov r0, r7, lsl r0 - add r0, r0, #0xa000000 - add r1, r6, r0 - beq _020DC22C -_020DC218: - ldrb r0, [r1], #0x1 - cmp r4, #0x0 - sub r4, r4, #0x1 - strb r0, [r5], #0x1 - bne _020DC218 -_020DC22C: - ldr r2, _020DC260 ; =0x04000204 - ldr r0, _020DC25C ; =0x021D6B0C - ldrh r1, [r2, #0x0] - bic r1, r1, #0x3 - orr r1, r1, r8 - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge2 - mov r0, #0x0 - add sp, sp, #0x28 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020DC25C: .word 0x021D6B0C -_020DC260: .word 0x04000204 -_020DC264: .word 0x021D6B20 - - arm_func_start CTRDGi_PollingSR1MCOMMON -CTRDGi_PollingSR1MCOMMON: ; 0x020DC268 - stmdb sp!, {r4-r8,lr} - mov r8, r0 - mov r7, r1 - mov r6, r2 - mov r5, #0x0 - bl StartFlashTimer - ldr r4, _020DC318 ; =0x021D6B10 -_020DC284: - bl CheckFlashTimer - mov r0, r7 - bl CTRDGi_ReadSrFunc - cmp r0, r6 - beq _020DC300 - ands r0, r0, #0x20 - beq _020DC2CC - mov r0, r7 - bl CTRDGi_ReadSrFunc -_020DC2A8: - .byte 0x00, 0x00, 0x56, 0xE1, 0x13, 0x00, 0x00, 0x0A - .byte 0x0A, 0x0A, 0x88, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x5C, 0x10, 0x9F, 0xE5, 0xF0, 0x20, 0xA0, 0xE3 - .byte 0x00, 0x20, 0xC1, 0xE5, 0x20, 0x58, 0xA0, 0xE1, 0x0C, 0x00, 0x00, 0xEA -_020DC2CC: - ldrh r0, [r4, #0x0] - cmp r0, #0x0 - beq _020DC284 - mov r0, r7 - bl CTRDGi_ReadSrFunc -_020DC2E0: - .byte 0x00, 0x00, 0x56, 0xE1, 0x05, 0x00, 0x00, 0x0A, 0x03, 0x09, 0x88, 0xE3, 0x00, 0x08, 0xA0, 0xE1 - .byte 0x24, 0x10, 0x9F, 0xE5, 0xF0, 0x20, 0xA0, 0xE3, 0x00, 0x20, 0xC1, 0xE5, 0x20, 0x58, 0xA0, 0xE1 -_020DC300: - bl CTRDG_IsExisting -_020DC304: - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x5A, 0xA0, 0x03, 0x05, 0x00, 0xA0, 0xE1 - .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020DC318: .word 0x021D6B10 -_020DC31C: - .byte 0x55, 0x55, 0x00, 0x0A - - arm_func_start CTRDGi_PollingSR512kCOMMON -CTRDGi_PollingSR512kCOMMON: ; 0x020DC320 - stmdb sp!, {r4-r8,lr} - mov r4, r0 - mov r8, r1 - mov r7, r2 - mov r6, #0x0 - bl StartFlashTimer - ldr r5, _020DC3A8 ; =0x021D6B10 -_020DC33C: - mov r0, r8 - bl CTRDGi_ReadSrFunc - cmp r0, r7 - beq _020DC390 - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - beq _020DC33C - mov r0, r8 - bl CTRDGi_ReadSrFunc -_020DC360: - .byte 0x00, 0x00, 0x57, 0xE1, 0x09, 0x00, 0x00, 0x0A, 0x3C, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5 - .byte 0xB8, 0x01, 0xD0, 0xE1, 0xC2, 0x00, 0x50, 0xE3, 0x30, 0x00, 0x9F, 0x05, 0xF0, 0x10, 0xA0, 0x03 - .byte 0x00, 0x10, 0xC0, 0x05, 0x03, 0x09, 0x84, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x68, 0xA0, 0xE1 -_020DC390: - bl CTRDG_IsExisting -_020DC394: - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x6A, 0xA0, 0x03, 0x06, 0x00, 0xA0, 0xE1 - .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020DC3A8: .word 0x021D6B10 -_020DC3AC: - .byte 0x20, 0x6B, 0x1D, 0x02 - .byte 0x55, 0x55, 0x00, 0x0A - - arm_func_start CTRDGi_ReadSrFunc -CTRDGi_ReadSrFunc: - ldrb r0, [r0, #0x0] - bx lr - - arm_func_start CheckFlashTimer -CheckFlashTimer: ; 0x020DC3BC - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl OS_GetTick - ldr r3, _020DC420 ; =0x021D6B44 - ldr r2, _020DC424 ; =0x000082EA - ldr r12, [r3, #0x0] - ldr r3, [r3, #0x4] - subs r12, r0, r12 - sbc r0, r1, r3 - mov r1, r0, lsl #0x6 - orr r1, r1, r12, lsr #0x1a - mov r0, r12, lsl #0x6 - mov r3, #0x0 - bl _ll_udiv - ldr r2, _020DC428 ; =0x021D6B3C - ldr r3, [r2, #0x4] - ldr r2, [r2, #0x0] - cmp r3, r1 - cmpeq r2, r0 - ldrls r0, _020DC42C ; =0x021D6B10 - movls r1, #0x1 - strlsh r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC420: .word 0x021D6B44 -_020DC424: .word 0x000082EA -_020DC428: .word 0x021D6B3C -_020DC42C: .word 0x021D6B10 - - arm_func_start StartFlashTimer -StartFlashTimer: ; 0x020DC430 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020DC47C ; =0x021D6B28 - ldr r2, _020DC480 ; =0x021D6B10 - mov r3, #0x0 - ldr r1, [r1, #0x0] - strh r3, [r2, #0x0] - mov r0, r0, lsl #0x1 - ldrh r1, [r1, r0] - ldr r0, _020DC484 ; =0x021D6B3C - str r1, [r0, #0x0] - str r3, [r0, #0x4] - bl OS_GetTick - ldr r2, _020DC488 ; =0x021D6B44 - str r0, [r2, #0x0] - str r1, [r2, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC47C: .word 0x021D6B28 -_020DC480: .word 0x021D6B10 -_020DC484: .word 0x021D6B3C -_020DC488: .word 0x021D6B44 - - arm_func_start CTRDGi_ReadFlashID -CTRDGi_ReadFlashID: ; 0x020DC48C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r5, _020DC590 ; =0x04000208 - mov r0, #0x0 - ldrh r2, [r5, #0x0] - ldr r1, _020DC594 ; =0x021D6B38 - ldr r4, _020DC598 ; =0x0A005555 - strh r0, [r5, #0x0] - str r2, [r1, #0x0] - mov r3, #0xaa - ldr r2, _020DC59C ; =0x0A002AAA - strb r3, [r4, #0x0] - mov r3, #0x55 - strb r3, [r2, #0x0] - mov r2, #0x90 - strb r2, [r4, #0x0] - ldrh r2, [r5, #0x0] - ldr r1, [r1, #0x0] - strh r1, [r5, #0x0] - bl StartFlashTimer - ldr r4, _020DC5A0 ; =0x021D6B10 - ldrh r0, [r4, #0x0] - cmp r0, #0x0 - bne _020DC4FC -_020DC4EC: - bl CheckFlashTimer - ldrh r0, [r4, #0x0] - cmp r0, #0x0 - beq _020DC4EC -_020DC4FC: - ldr r0, _020DC5A4 ; =0x0A000001 - bl CTRDGi_ReadSrFunc - mov r4, r0, lsl #0x18 - mov r0, #0xa000000 - bl CTRDGi_ReadSrFunc - ldr ip, _020DC590 ; =0x04000208 - orr r4, r0, r4, lsr #0x10 - ldrh r2, [r12, #0x0] - mov r0, #0x0 - ldr r1, _020DC594 ; =0x021D6B38 - strh r0, [r12, #0x0] - ldr r5, _020DC598 ; =0x0A005555 - str r2, [r1, #0x0] - mov r3, #0xaa - ldr r2, _020DC59C ; =0x0A002AAA - strb r3, [r5, #0x0] - mov r3, #0x55 - strb r3, [r2, #0x0] - mov r2, #0xf0 - strb r2, [r5, #0x0] - strb r2, [r5, #0x0] - ldrh r2, [r12, #0x0] - ldr r1, [r1, #0x0] - strh r1, [r12, #0x0] - bl StartFlashTimer - ldr r5, _020DC5A0 ; =0x021D6B10 - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - bne _020DC580 -_020DC570: - bl CheckFlashTimer - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - beq _020DC570 -_020DC580: - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DC590: .word 0x04000208 -_020DC594: .word 0x021D6B38 -_020DC598: .word 0x0A005555 -_020DC59C: .word 0x0A002AAA -_020DC5A0: .word 0x021D6B10 -_020DC5A4: .word 0x0A000001 - - arm_func_start CTRDGi_SetFlashBankMx -CTRDGi_SetFlashBankMx: ; 0x020DC5A8 - ldr r3, _020DC5D4 ; =0x0A005555 - mov r2, #0xaa - ldr r1, _020DC5D8 ; =0x0A002AAA - strb r2, [r3, #0x0] - mov r2, #0x55 - strb r2, [r1, #0x0] - mov r1, #0xb0 - strb r1, [r3, #0x0] - mov r1, #0xa000000 - strb r0, [r1, #0x0] - bx lr - .balign 4 -_020DC5D4: .word 0x0A005555 -_020DC5D8: .word 0x0A002AAA - - arm_func_start CTRDGi_WriteFlashSectorAsyncAT -CTRDGi_WriteFlashSectorAsyncAT: ; 0x020DC5DC - stmdb sp!, {lr} - sub sp, sp, #0x24 - str r1, [sp, #0xc] - strh r0, [sp, #0x20] - ldr r1, _020DC604 ; =CTRDGi_WriteFlashSectorCoreAT - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC604: .word CTRDGi_WriteFlashSectorCoreAT - - arm_func_start CTRDGi_EraseFlashSectorAsyncAT -CTRDGi_EraseFlashSectorAsyncAT: ; 0x020DC608 - stmdb sp!, {lr} - sub sp, sp, #0x24 - mov r2, r1 - strh r0, [sp, #0x20] - ldr r1, _020DC630 ; =CTRDGi_EraseFlashSectorCoreAT - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC630: .word CTRDGi_EraseFlashSectorCoreAT - - arm_func_start CTRDGi_WriteFlashSectorAT -CTRDGi_WriteFlashSectorAT: ; 0x020DC634 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0xc] - bl CTRDGi_WriteFlashSectorCoreAT - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashSectorAT -CTRDGi_EraseFlashSectorAT: - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - bl CTRDGi_EraseFlashSectorCoreAT - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_WriteFlash4KBAsyncAT -CTRDGi_WriteFlash4KBAsyncAT: ; 0x020DC688 - stmdb sp!, {lr} - sub sp, sp, #0x24 - str r1, [sp, #0xc] - strh r0, [sp, #0x20] - ldr r1, _020DC6B0 ; =CTRDGi_WriteFlash4KBCoreAT - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC6B0: .word CTRDGi_WriteFlash4KBCoreAT - - arm_func_start CTRDGi_EraseFlash4KBAsyncAT -CTRDGi_EraseFlash4KBAsyncAT: ; 0x020DC6B4 - stmdb sp!, {lr} - sub sp, sp, #0x24 - mov r2, r1 - strh r0, [sp, #0x20] - ldr r1, _020DC6DC ; =CTRDGi_EraseFlash4KBCoreAT - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC6DC: .word CTRDGi_EraseFlash4KBCoreAT - - arm_func_start CTRDGi_EraseFlashChipAsyncAT -CTRDGi_EraseFlashChipAsyncAT: ; 0x020DC6E0 - stmdb sp!, {lr} - sub sp, sp, #0x24 - ldr r1, _020DC704 ; =CTRDGi_EraseFlashChipCoreAT - mov r2, r0 - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC704: .word CTRDGi_EraseFlashChipCoreAT - - arm_func_start CTRDGi_WriteFlash4KBAT -CTRDGi_WriteFlash4KBAT: ; 0x020DC708 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0xc] - bl CTRDGi_WriteFlash4KBCoreAT - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlash4KBAT -CTRDGi_EraseFlash4KBAT: ; 0x020DC734 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - bl CTRDGi_EraseFlash4KBCoreAT - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashChipAT -CTRDGi_EraseFlashChipAT: ; 0x020DC75C - stmdb sp!, {lr} - sub sp, sp, #0x24 - add r0, sp, #0x0 - bl CTRDGi_EraseFlashChipCoreAT - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_WriteFlash4KBCoreAT -CTRDGi_WriteFlash4KBCoreAT: ; 0x020DC780 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x24 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, [r5, #0x0] - str r0, [r4, #0x0] - ldrh r0, [sp, #0x20] - ldr r7, [sp, #0xc] - cmp r0, #0x10 - addcs sp, sp, #0x24 - ldrhs r0, _020DC85C ; =0x000080FF - ldmcsia sp!, {r4-r9,lr} - bxcs lr - ldr r1, _020DC860 ; =0x0210400C - mov r0, r0, lsl #0x15 - ldr r1, [r1, #0x24] - ldr r4, _020DC864 ; =0x021D6B08 - mov r8, r0, lsr #0x10 - strh r1, [r4, #0x0] - ldrh r0, [r4, #0x0] - cmp r0, #0x0 - beq _020DC84C - ldr r0, _020DC868 ; =0x02104048 - ldr r6, [r0, #0x24] - mov r5, #0x2 -_020DC7F4: - mov r9, r5 -_020DC7F8: - mov r0, r8 - mov r1, r7 - bl CTRDGi_WriteFlashSectorAT - movs r12, r0 - beq _020DC81C - sub r0, r9, #0x1 - mov r0, r0, lsl #0x10 - movs r9, r0, lsr #0x10 - bne _020DC7F8 -_020DC81C: - cmp r12, #0x0 - bne _020DC84C - ldrh r1, [r4, #0x0] - add r0, r8, #0x1 - mov r0, r0, lsl #0x10 - sub r1, r1, r6 - strh r1, [r4, #0x0] - ldrh r1, [r4, #0x0] - add r7, r7, r6 - mov r8, r0, lsr #0x10 - cmp r1, #0x0 - bne _020DC7F4 -_020DC84C: - mov r0, r12 - add sp, sp, #0x24 - ldmia sp!, {r4-r9,lr} - bx lr - .balign 4 -_020DC85C: .word 0x000080FF -_020DC860: .word 0x0210400C -_020DC864: .word 0x021D6B08 -_020DC868: .word 0x02104048 - - arm_func_start CTRDGi_WriteFlashSectorCoreAT -CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x24 - mov r5, r0 - add r4, sp, #0x0 - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, _020DC984 ; =0x021D6B0C - ldr r1, [r5, #0x0] - ldrh r0, [r0, #0x0] - str r1, [r4, #0x0] - ldr r4, [sp, #0xc] - bl OS_LockCartridge - ldr r5, _020DC988 ; =0x04000204 - ldr r1, _020DC98C ; =0x021D6B20 - ldrh r0, [r5, #0x0] - ldr r1, [r1, #0x0] - ldrh r2, [r5, #0x0] - ldr r3, [r1, #0x10] - ldr r1, _020DC990 ; =0x02104048 - bic r2, r2, #0x3 - orr r2, r2, r3 - strh r2, [r5, #0x0] - ldr r5, _020DC994 ; =0x04000208 - ldrh lr, [sp, #0x20] - ldrh r12, [r1, #0x28] - ldrh r2, [r5, #0x0] - mov r3, #0x0 - mov lr, lr, lsl r12 - strh r3, [r5, #0x0] - ldr ip, _020DC998 ; =0x0A005555 - mov r5, #0xaa - strb r5, [r12, #0x0] - ldr r3, _020DC99C ; =0x0A002AAA - mov r5, #0x55 - strb r5, [r3, #0x0] - mov r3, #0xa0 - strb r3, [r12, #0x0] - ldr r3, [r1, #0x24] - and r5, r0, #0x3 - cmp r3, #0x0 - add r1, lr, #0xa000000 - beq _020DC92C -_020DC91C: - ldrb r0, [r4], #0x1 - subs r3, r3, #0x1 - strb r0, [r1], #0x1 - bne _020DC91C -_020DC92C: - ldr ip, _020DC994 ; =0x04000208 - ldr r3, _020DC9A0 ; =0x021D6B24 - ldrh r0, [r12, #0x0] - sub r1, r1, #0x1 - mov r0, #0x1 - strh r2, [r12, #0x0] - ldrb r2, [r4, #-0x1] - ldr r3, [r3, #0x0] - blx r3 - ldr r3, _020DC988 ; =0x04000204 - ldr r1, _020DC984 ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r5 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x24 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DC984: .word 0x021D6B0C -_020DC988: .word 0x04000204 -_020DC98C: .word 0x021D6B20 -_020DC990: .word 0x02104048 -_020DC994: .word 0x04000208 -_020DC998: .word 0x0A005555 -_020DC99C: .word 0x0A002AAA -_020DC9A0: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlash4KBCoreAT -CTRDGi_EraseFlash4KBCoreAT: ; 0x020DC9A4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x24 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, [r5, #0x0] - str r0, [r4, #0x0] - ldrh r0, [sp, #0x20] - cmp r0, #0x10 - addcs sp, sp, #0x24 - ldrhs r0, _020DCA54 ; =0x000080FF - ldmcsia sp!, {r4-r7,lr} - bxcs lr - mov r0, r0, lsl #0x15 - mov r5, r0, lsr #0x10 - mov r6, #0x0 - mov r4, #0x2 - mov r7, r4 - mov r0, r5 - bl CTRDGi_EraseFlashSectorAT -_020DCA00: - .byte 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A, 0x01, 0x10, 0x47, 0xE2, 0x01, 0x18, 0xA0, 0xE1 - .byte 0x21, 0x78, 0xB0, 0xE1, 0xF7, 0xFF, 0xFF, 0x1A, 0x01, 0x10, 0x85, 0xE2, 0x01, 0x18, 0xA0, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x21, 0x58, 0xA0, 0xE1, 0x24, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x01, 0x10, 0x86, 0xE2, 0x01, 0x18, 0xA0, 0xE1, 0x21, 0x68, 0xA0, 0xE1 - .byte 0x20, 0x00, 0x56, 0xE3, 0xEA, 0xFF, 0xFF, 0x3A, 0x24, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 -_020DCA54: .word 0x000080FF - - arm_func_start CTRDGi_EraseFlashSectorCoreAT -CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x24 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, [r5, #0x0] - ldr r1, _020DCB80 ; =0x02104048 - str r0, [r4, #0x0] - ldr r0, _020DCB84 ; =0x021D6B0C - ldrh r2, [sp, #0x20] - ldrh r1, [r1, #0x28] - ldrh r0, [r0, #0x0] - mov r1, r2, lsl r1 - add r5, r1, #0xa000000 - bl OS_LockCartridge - ldr r4, _020DCB88 ; =0x04000204 - ldr r1, _020DCB8C ; =0x021D6B20 - ldrh r0, [r4, #0x0] - ldr r2, [r1, #0x0] - ldrh r1, [r4, #0x0] - ldr r2, [r2, #0x10] - ldr r3, _020DCB90 ; =0x04000208 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r4, #0x0] - ldrh r2, [r3, #0x0] - mov r1, #0x0 - ldr r4, _020DCB94 ; =0x0A005555 - strh r1, [r3, #0x0] - mov r3, #0xaa - strb r3, [r4, #0x0] - ldr r1, _020DCB98 ; =0x0A002AAA - mov r3, #0x55 - strb r3, [r1, #0x0] - mov r3, #0xa0 - strb r3, [r4, #0x0] - ldr r1, _020DCB80 ; =0x02104048 - and r4, r0, #0x3 - ldr r1, [r1, #0x24] - cmp r1, #0x0 - beq _020DCB18 - mov r0, #0xff -_020DCB0C: - strb r0, [r5], #0x1 - subs r1, r1, #0x1 - bne _020DCB0C -_020DCB18: - ldr ip, _020DCB90 ; =0x04000208 - ldr r3, _020DCB9C ; =0x021D6B24 - ldrh r0, [r12, #0x0] - sub r1, r5, #0x1 - strh r2, [r12, #0x0] - ldr r3, [r3, #0x0] - mov r0, #0x1 - mov r2, #0xff - blx r3 - ldr r2, _020DCB88 ; =0x04000204 - movs r5, r0 - ldrh r1, [r2, #0x0] - andne r0, r5, #0xff00 - orrne r0, r0, #0x2 - movne r0, r0, lsl #0x10 - bic r1, r1, #0x3 - movne r5, r0, lsr #0x10 - orr r1, r1, r4 - ldr r0, _020DCB84 ; =0x021D6B0C - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge2 - mov r0, r5 - add sp, sp, #0x24 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DCB80: .word 0x02104048 -_020DCB84: .word 0x021D6B0C -_020DCB88: .word 0x04000204 -_020DCB8C: .word 0x021D6B20 -_020DCB90: .word 0x04000208 -_020DCB94: .word 0x0A005555 -_020DCB98: .word 0x0A002AAA -_020DCB9C: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlashChipCoreAT -CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020DCC7C ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r4, _020DCC80 ; =0x04000204 - ldr r0, _020DCC84 ; =0x021D6B20 - ldrh r3, [r4, #0x0] - ldr r0, [r0, #0x0] - ldrh r1, [r4, #0x0] - ldr r2, [r0, #0x10] - ldr r0, _020DCC88 ; =0x04000208 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r4, #0x0] - ldrh r4, [r0, #0x0] - mov r2, #0x0 - ldr r1, _020DCC8C ; =0x021D6B38 - strh r2, [r0, #0x0] - ldr lr, _020DCC90 ; =0x0A005555 - str r4, [r1, #0x0] - mov r5, #0xaa - ldr r4, _020DCC94 ; =0x0A002AAA - strb r5, [lr, #0x0] - mov r12, #0x55 - strb r12, [r4, #0x0] - mov r2, #0x80 - strb r2, [lr, #0x0] - strb r5, [lr, #0x0] - strb r12, [r4, #0x0] - mov r2, #0x10 - strb r2, [lr, #0x0] - ldrh r2, [r0, #0x0] - ldr r2, [r1, #0x0] - ldr r1, _020DCC98 ; =0x021D6B24 - strh r2, [r0, #0x0] - ldr r4, [r1, #0x0] - mov r0, #0x3 - mov r1, #0xa000000 - mov r2, #0xff - and r5, r3, #0x3 - blx r4 - ldr r3, _020DCC80 ; =0x04000204 - ldr r1, _020DCC7C ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r5 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DCC7C: .word 0x021D6B0C -_020DCC80: .word 0x04000204 -_020DCC84: .word 0x021D6B20 -_020DCC88: .word 0x04000208 -_020DCC8C: .word 0x021D6B38 -_020DCC90: .word 0x0A005555 -_020DCC94: .word 0x0A002AAA -_020DCC98: .word 0x021D6B24 - - arm_func_start CTRDGi_WriteFlashSectorAsyncLE -CTRDGi_WriteFlashSectorAsyncLE: ; 0x020DCC9C - stmdb sp!, {lr} - sub sp, sp, #0x24 - str r1, [sp, #0xc] - strh r0, [sp, #0x20] - ldr r1, _020DCCC4 ; =CTRDGi_WriteFlashSectorCoreLE - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DCCC4: .word CTRDGi_WriteFlashSectorCoreLE - - arm_func_start CTRDGi_EraseFlashSectorAsyncLE -CTRDGi_EraseFlashSectorAsyncLE: ; 0x020DCCC8 - stmdb sp!, {lr} - sub sp, sp, #0x24 - mov r2, r1 - strh r0, [sp, #0x20] - ldr r1, _020DCCF0 ; =CTRDGi_EraseFlashSectorCoreLE - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DCCF0: .word CTRDGi_EraseFlashSectorCoreLE - - arm_func_start CTRDGi_EraseFlashChipAsyncLE -CTRDGi_EraseFlashChipAsyncLE: ; 0x020DCCF4 - stmdb sp!, {lr} - sub sp, sp, #0x24 - ldr r1, _020DCD18 ; =CTRDGi_EraseFlashChipCoreLE - mov r2, r0 - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DCD18: .word CTRDGi_EraseFlashChipCoreLE - - arm_func_start CTRDGi_WriteFlashSectorLE -CTRDGi_WriteFlashSectorLE: ; 0x020DCD1C - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0xc] - bl CTRDGi_WriteFlashSectorCoreLE - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashSectorLE -CTRDGi_EraseFlashSectorLE: ; 0x020DCD48 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - bl CTRDGi_EraseFlashSectorCoreLE - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashChipLE -CTRDGi_EraseFlashChipLE: ; 0x020DCD70 - stmdb sp!, {lr} - sub sp, sp, #0x24 - add r0, sp, #0x0 - bl CTRDGi_EraseFlashChipCoreLE - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_VerifyFlashErase -CTRDGi_VerifyFlashErase: ; 0x020DCD94 - stmdb sp!, {r4-r6,lr} - ldr r2, _020DCE14 ; =0x021D6B0C - mov r4, r0 - ldrh r0, [r2, #0x0] - mov r5, r1 - bl OS_LockCartridge - ldr ip, _020DCE18 ; =0x04000204 - ldr r0, _020DCE1C ; =0x021D6B20 - ldrh r3, [r12, #0x0] - ldr r0, [r0, #0x0] - ldrh r1, [r12, #0x0] - ldr r2, [r0, #0x10] - mov r0, r4 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r12, #0x0] - and r6, r3, #0x3 - mov r4, #0x0 - blx r5 - cmp r0, #0x0 - ldr r2, _020DCE18 ; =0x04000204 - ldr r0, _020DCE14 ; =0x021D6B0C - ldrh r1, [r2, #0x0] - ldrne r4, _020DCE20 ; =0x00008004 - bic r1, r1, #0x3 - orr r1, r1, r6 - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020DCE14: .word 0x021D6B0C -_020DCE18: .word 0x04000204 -_020DCE1C: .word 0x021D6B20 -_020DCE20: .word 0x00008004 - - arm_func_start CTRDGi_VerifyFlashCoreFF -CTRDGi_VerifyFlashCoreFF: ; 0x020DCE24 - ldr r1, _020DCE54 ; =0x021D6B20 - ldr r1, [r1, #0x0] - ldr r2, [r1, #0x4] - cmp r2, #0x0 - beq _020DCE4C -_020DCE38: - ldrb r1, [r0], #0x1 - cmp r1, #0xff - bne _020DCE4C - subs r2, r2, #0x1 - bne _020DCE38 -_020DCE4C: - mov r0, r2 - bx lr - .balign 4 -_020DCE54: .word 0x021D6B20 - - arm_func_start CTRDGi_WriteFlashSectorCoreLE -CTRDGi_WriteFlashSectorCoreLE: ; 0x020DCE58 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x24 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, [r5, #0x0] - str r0, [r4, #0x0] - ldrh r7, [sp, #0x20] - ldr r6, [sp, #0xc] - cmp r7, #0x10 - addcs sp, sp, #0x24 - ldrhs r0, _020DD018 ; =0x000080FF - ldmcsia sp!, {r4-r9,lr} - bxcs lr - ldr r0, _020DD01C ; =0x021D6B20 - mov r9, #0x0 - ldr r0, [r0, #0x0] - ldrh r0, [r0, #0x8] - mov r0, r7, lsl r0 - add r4, r0, #0xa000000 - ldr r5, _020DD020 ; =CTRDGi_VerifyFlashCoreFF -_020DCEB8: - mov r0, r7 - bl CTRDGi_EraseFlashSectorLE - movs r8, r0 - bne _020DCEE0 - mov r0, r4 - mov r1, r5 - bl CTRDGi_VerifyFlashErase - mov r0, r0, lsl #0x10 - movs r8, r0, lsr #0x10 - beq _020DCF04 -_020DCEE0: - add r0, r9, #0x1 - mov r0, r0, lsl #0x10 - cmp r9, #0x50 - mov r9, r0, lsr #0x10 - bne _020DCEB8 - add sp, sp, #0x24 - mov r0, r8 - ldmia sp!, {r4-r9,lr} - bx lr -_020DCF04: - mov r5, #0x1 - cmp r9, #0x0 - movne r5, #0x6 - cmp r5, #0x1 - mov r9, #0x1 - blo _020DCF38 -_020DCF1C: - mov r0, r7 - bl CTRDGi_EraseFlashSectorLE - add r0, r9, #0x1 - mov r0, r0, lsl #0x10 - mov r9, r0, lsr #0x10 - cmp r9, r5 - bls _020DCF1C -_020DCF38: - ldr r0, _020DD024 ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r5, _020DD028 ; =0x04000204 - ldr r1, _020DD01C ; =0x021D6B20 - ldrh r0, [r5, #0x0] - ldr r3, [r1, #0x0] - ldrh r2, [r5, #0x0] - ldr r3, [r3, #0x10] - ldr r7, _020DD02C ; =0x021D6B08 - bic r2, r2, #0x3 - orr r2, r2, r3 - strh r2, [r5, #0x0] - ldr r1, [r1, #0x0] - ldr sb, _020DD030 ; =0x04000208 - ldr r1, [r1, #0x4] - mov r2, #0x0 - strh r1, [r7, #0x0] - ldrh r3, [r9, #0x0] - ldr r1, _020DD034 ; =0x021D6B38 - and r5, r0, #0x3 - strh r2, [r9, #0x0] - ldrh r0, [r7, #0x0] - str r3, [r1, #0x0] - cmp r0, #0x0 - beq _020DCFD4 -_020DCFA0: - mov r0, r6 - mov r1, r4 - bl CTRDGi_ProgramFlashByteLE - movs r8, r0 - bne _020DCFD4 - ldrh r0, [r7, #0x0] - add r6, r6, #0x1 - add r4, r4, #0x1 - sub r0, r0, #0x1 - strh r0, [r7, #0x0] - ldrh r0, [r7, #0x0] - cmp r0, #0x0 - bne _020DCFA0 -_020DCFD4: - ldr r3, _020DD030 ; =0x04000208 - ldr r0, _020DD034 ; =0x021D6B38 - ldrh r1, [r3, #0x0] - ldr r0, [r0, #0x0] - ldr r2, _020DD028 ; =0x04000204 - strh r0, [r3, #0x0] - ldrh r1, [r2, #0x0] - ldr r0, _020DD024 ; =0x021D6B0C - bic r1, r1, #0x3 - orr r1, r1, r5 - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge2 - mov r0, r8 - add sp, sp, #0x24 - ldmia sp!, {r4-r9,lr} - bx lr - .balign 4 -_020DD018: .word 0x000080FF -_020DD01C: .word 0x021D6B20 -_020DD020: .word CTRDGi_VerifyFlashCoreFF -_020DD024: .word 0x021D6B0C -_020DD028: .word 0x04000204 -_020DD02C: .word 0x021D6B08 -_020DD030: .word 0x04000208 -_020DD034: .word 0x021D6B38 - - arm_func_start CTRDGi_ProgramFlashByteLE -CTRDGi_ProgramFlashByteLE: ; 0x020DD038 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr ip, _020DD08C ; =0x0A005555 - mov r3, #0xaa - ldr r2, _020DD090 ; =0x0A002AAA - strb r3, [r12, #0x0] - mov r3, #0x55 - mov lr, r0 - strb r3, [r2, #0x0] - mov r0, #0xa0 - strb r0, [r12, #0x0] - ldrb r2, [lr, #0x0] - ldr r3, _020DD094 ; =0x021D6B24 - mov r0, #0x1 - strb r2, [r1, #0x0] - ldrb r2, [lr, #0x0] - ldr r3, [r3, #0x0] - blx r3 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DD08C: .word 0x0A005555 -_020DD090: .word 0x0A002AAA -_020DD094: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlashSectorCoreLE -CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x28 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, [r5, #0x0] - str r0, [r4, #0x0] - ldrh r4, [sp, #0x20] - cmp r4, #0x10 - addcs sp, sp, #0x28 - ldrhs r0, _020DD1B8 ; =0x000080FF - ldmcsia sp!, {r4-r6,lr} - bxcs lr - ldr r0, _020DD1BC ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r6, _020DD1C0 ; =0x04000204 - ldr r1, _020DD1C4 ; =0x021D6B20 - ldrh r3, [r6, #0x0] - ldr r0, [r1, #0x0] - ldrh r2, [r6, #0x0] - ldr r5, [r0, #0x10] - ldr r0, _020DD1C8 ; =0x04000208 - bic r2, r2, #0x3 - orr r2, r2, r5 - strh r2, [r6, #0x0] - ldr r1, [r1, #0x0] - ldrh r5, [r0, #0x0] - ldrh r12, [r1, #0x8] - mov r1, #0x0 - ldr r2, _020DD1CC ; =0x021D6B38 - strh r1, [r0, #0x0] - mov r6, r4, lsl r12 - ldr lr, _020DD1D0 ; =0x0A005555 - str r5, [r2, #0x0] - mov r5, #0xaa - ldr r4, _020DD1D4 ; =0x0A002AAA - strb r5, [lr, #0x0] - mov r12, #0x55 - strb r12, [r4, #0x0] - mov r1, #0x80 - strb r1, [lr, #0x0] - strb r5, [lr, #0x0] - strb r12, [r4, #0x0] - add r1, r6, #0xa000000 - mov r4, #0x30 - strb r4, [r1, #0x0] - ldrh r4, [r0, #0x0] - ldr r4, [r2, #0x0] - ldr r2, _020DD1D8 ; =0x021D6B24 - strh r4, [r0, #0x0] - ldr r4, [r2, #0x0] - mov r0, #0x2 - mov r2, #0xff - and r5, r3, #0x3 - blx r4 - ldr r3, _020DD1C0 ; =0x04000204 - ldr r1, _020DD1BC ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r5 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x28 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020DD1B8: .word 0x000080FF -_020DD1BC: .word 0x021D6B0C -_020DD1C0: .word 0x04000204 -_020DD1C4: .word 0x021D6B20 -_020DD1C8: .word 0x04000208 -_020DD1CC: .word 0x021D6B38 -_020DD1D0: .word 0x0A005555 -_020DD1D4: .word 0x0A002AAA -_020DD1D8: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlashChipCoreLE -CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020DD2B8 ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r4, _020DD2BC ; =0x04000204 - ldr r0, _020DD2C0 ; =0x021D6B20 - ldrh r3, [r4, #0x0] - ldr r0, [r0, #0x0] - ldrh r1, [r4, #0x0] - ldr r2, [r0, #0x10] - ldr r0, _020DD2C4 ; =0x04000208 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r4, #0x0] - ldrh r4, [r0, #0x0] - mov r2, #0x0 - ldr r1, _020DD2C8 ; =0x021D6B38 - strh r2, [r0, #0x0] - ldr lr, _020DD2CC ; =0x0A005555 - str r4, [r1, #0x0] - mov r5, #0xaa - ldr r4, _020DD2D0 ; =0x0A002AAA - strb r5, [lr, #0x0] - mov r12, #0x55 - strb r12, [r4, #0x0] - mov r2, #0x80 - strb r2, [lr, #0x0] - strb r5, [lr, #0x0] - strb r12, [r4, #0x0] - mov r2, #0x10 - strb r2, [lr, #0x0] - ldrh r2, [r0, #0x0] - ldr r2, [r1, #0x0] - ldr r1, _020DD2D4 ; =0x021D6B24 - strh r2, [r0, #0x0] - ldr r4, [r1, #0x0] - mov r0, #0x3 - mov r1, #0xa000000 - mov r2, #0xff - and r5, r3, #0x3 - blx r4 - ldr r3, _020DD2BC ; =0x04000204 - ldr r1, _020DD2B8 ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r5 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DD2B8: .word 0x021D6B0C -_020DD2BC: .word 0x04000204 -_020DD2C0: .word 0x021D6B20 -_020DD2C4: .word 0x04000208 -_020DD2C8: .word 0x021D6B38 -_020DD2CC: .word 0x0A005555 -_020DD2D0: .word 0x0A002AAA -_020DD2D4: .word 0x021D6B24 - - arm_func_start CTRDGi_WriteFlashSectorAsyncMX -CTRDGi_WriteFlashSectorAsyncMX: ; 0x020DD2D8 - stmdb sp!, {lr} - sub sp, sp, #0x24 - str r1, [sp, #0xc] - strh r0, [sp, #0x20] - ldr r1, _020DD300 ; =CTRDGi_WriteFlashSectorCoreMX - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DD300: .word CTRDGi_WriteFlashSectorCoreMX - - arm_func_start CTRDGi_EraseFlashSectorAsyncMX -CTRDGi_EraseFlashSectorAsyncMX: ; 0x020DD304 - stmdb sp!, {lr} - sub sp, sp, #0x24 - mov r2, r1 - strh r0, [sp, #0x20] - ldr r1, _020DD32C ; =CTRDGi_EraseFlashSectorCoreMX - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DD32C: .word CTRDGi_EraseFlashSectorCoreMX - - arm_func_start CTRDGi_EraseFlashChipAsyncMX -CTRDGi_EraseFlashChipAsyncMX: ; 0x020DD330 - stmdb sp!, {lr} - sub sp, sp, #0x24 - ldr r1, _020DD354 ; =CTRDGi_EraseFlashChipCoreMX - mov r2, r0 - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DD354: .word CTRDGi_EraseFlashChipCoreMX - - arm_func_start CTRDGi_WriteFlashSectorMX -CTRDGi_WriteFlashSectorMX: ; 0x020DD358 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0xc] - bl CTRDGi_WriteFlashSectorCoreMX - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashSectorMX -CTRDGi_EraseFlashSectorMX: ; 0x020DD384 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - bl CTRDGi_EraseFlashSectorCoreMX - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashChipMX -CTRDGi_EraseFlashChipMX: ; 0x020DD3AC - stmdb sp!, {lr} - sub sp, sp, #0x24 - add r0, sp, #0x0 - bl CTRDGi_EraseFlashChipCoreMX - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_WriteFlashSectorCoreMX -CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x28 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, _020DD540 ; =0x021D6B20 - ldr r1, [r5, #0x0] - ldr r0, [r0, #0x0] - str r1, [r4, #0x0] - ldrh r5, [sp, #0x20] - ldrh r0, [r0, #0xa] - ldr r4, [sp, #0xc] - cmp r5, r0 - addcs sp, sp, #0x28 - ldrhs r0, _020DD544 ; =0x000080FF - ldmcsia sp!, {r4-r8,lr} - bxcs lr - mov r0, r5 - bl CTRDGi_EraseFlashSectorMX - movs r6, r0 - addne sp, sp, #0x28 - ldmneia sp!, {r4-r8,lr} - bxne lr - ldr r0, _020DD548 ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r7, _020DD54C ; =0x04000204 - ldr r0, _020DD540 ; =0x021D6B20 - ldrh r3, [r7, #0x0] - ldr r2, [r0, #0x0] - ldrh r1, [r7, #0x0] - mov r0, r5, lsl #0xc - ldr r2, [r2, #0x10] - bic r1, r1, #0x3 - orr r1, r1, r2 - mov r0, r0, lsr #0x10 - strh r1, [r7, #0x0] - and r7, r3, #0x3 - bl CTRDGi_SetFlashBankMx - ldr r0, _020DD540 ; =0x021D6B20 - and r1, r5, #0xf - ldr r3, [r0, #0x0] - mov r0, r1, lsl #0x10 - ldr r2, [r3, #0x4] - ldr r8, _020DD550 ; =0x021D6B08 - ldr r1, _020DD554 ; =0x04000208 - strh r2, [r8, #0x0] - ldrh r3, [r3, #0x8] - mov r5, r0, lsr #0x10 - ldrh r2, [r1, #0x0] - mov r0, #0x0 - mov r3, r5, lsl r3 - strh r0, [r1, #0x0] - ldrh r1, [r8, #0x0] - ldr r0, _020DD558 ; =0x021D6B38 - add r5, r3, #0xa000000 - str r2, [r0, #0x0] - cmp r1, #0x0 - beq _020DD4FC -_020DD4C8: - mov r0, r4 - mov r1, r5 - bl CTRDGi_ProgramFlashByteMX - movs r6, r0 - bne _020DD4FC - ldrh r0, [r8, #0x0] - add r4, r4, #0x1 - add r5, r5, #0x1 - sub r0, r0, #0x1 - strh r0, [r8, #0x0] - ldrh r0, [r8, #0x0] - cmp r0, #0x0 - bne _020DD4C8 -_020DD4FC: - ldr r3, _020DD554 ; =0x04000208 - ldr r0, _020DD558 ; =0x021D6B38 - ldrh r1, [r3, #0x0] - ldr r0, [r0, #0x0] - ldr r2, _020DD54C ; =0x04000204 - strh r0, [r3, #0x0] - ldrh r1, [r2, #0x0] - ldr r0, _020DD548 ; =0x021D6B0C - bic r1, r1, #0x3 - orr r1, r1, r7 - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge2 - mov r0, r6 - add sp, sp, #0x28 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020DD540: .word 0x021D6B20 -_020DD544: .word 0x000080FF -_020DD548: .word 0x021D6B0C -_020DD54C: .word 0x04000204 -_020DD550: .word 0x021D6B08 -_020DD554: .word 0x04000208 -_020DD558: .word 0x021D6B38 - - arm_func_start CTRDGi_ProgramFlashByteMX -CTRDGi_ProgramFlashByteMX: ; 0x020DD55C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr ip, _020DD5B0 ; =0x0A005555 - mov r3, #0xaa - ldr r2, _020DD5B4 ; =0x0A002AAA - strb r3, [r12, #0x0] - mov r3, #0x55 - mov lr, r0 - strb r3, [r2, #0x0] - mov r0, #0xa0 - strb r0, [r12, #0x0] - ldrb r2, [lr, #0x0] - ldr r3, _020DD5B8 ; =0x021D6B24 - mov r0, #0x1 - strb r2, [r1, #0x0] - ldrb r2, [lr, #0x0] - ldr r3, [r3, #0x0] - blx r3 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DD5B0: .word 0x0A005555 -_020DD5B4: .word 0x0A002AAA -_020DD5B8: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlashSectorCoreMX -CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x34 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x10 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, _020DD748 ; =0x021D6B20 - ldr r1, [r5, #0x0] - ldr r0, [r0, #0x0] - str r1, [r4, #0x0] - ldrh r4, [sp, #0x30] - ldrh r0, [r0, #0xa] - cmp r4, r0 - addcs sp, sp, #0x34 - ldrhs r0, _020DD74C ; =0x000080FF - ldmcsia sp!, {r4-r11,lr} - bxcs lr - ldr r0, _020DD750 ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r5, _020DD754 ; =0x04000204 - ldr r0, _020DD748 ; =0x021D6B20 - ldrh r3, [r5, #0x0] - ldr r2, [r0, #0x0] - ldrh r1, [r5, #0x0] - mov r0, r4, lsl #0xc - ldr r2, [r2, #0x10] - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r5, #0x0] - and r1, r3, #0x3 - mov r0, r0, lsr #0x10 - str r1, [sp, #0x0] - bl CTRDGi_SetFlashBankMx - and r0, r4, #0xf - mov r0, r0, lsl #0x10 - mov r9, r0, lsr #0x10 - mov r0, #0x2 - mov r10, #0x0 - str r0, [sp, #0x8] - mov r0, #0xff - ldr r8, _020DD758 ; =0x04000208 - mov r11, r10 - mov r7, #0xaa - mov r6, #0x55 - mov r5, #0x80 - mov r4, #0x30 - str r0, [sp, #0xc] -_020DD684: - ldr r0, _020DD748 ; =0x021D6B20 - ldrh r12, [r8, #0x0] - ldr r0, [r0, #0x0] - ldr r3, _020DD75C ; =0x021D6B38 - ldrh r1, [r0, #0x8] - ldr r0, [sp, #0x8] - ldr r2, [sp, #0xc] - strh r11, [r8, #0x0] - str r12, [r3, #0x0] - ldr r3, _020DD760 ; =0x0A005555 - mov r1, r9, lsl r1 - strb r7, [r3, #0x0] - ldr r3, _020DD764 ; =0x0A002AAA - add r1, r1, #0xa000000 - strb r6, [r3, #0x0] - ldr r3, _020DD760 ; =0x0A005555 - strb r5, [r3, #0x0] - strb r7, [r3, #0x0] - ldr r3, _020DD764 ; =0x0A002AAA - strb r6, [r3, #0x0] - strb r4, [r1, #0x0] - ldrh r3, [r8, #0x0] - ldr r3, _020DD75C ; =0x021D6B38 - ldr r3, [r3, #0x0] - strh r3, [r8, #0x0] - ldr r3, _020DD768 ; =0x021D6B24 - ldr r3, [r3, #0x0] - blx r3 - str r0, [sp, #0x4] - ands r0, r0, #0xa000 - beq _020DD714 - cmp r10, #0x0 - addeq r0, r10, #0x1 - moveq r0, r0, lsl #0x10 - moveq r10, r0, lsr #0x10 - beq _020DD684 -_020DD714: - ldr r2, _020DD754 ; =0x04000204 - ldr r1, _020DD750 ; =0x021D6B0C - ldrh r0, [r2, #0x0] - bic r3, r0, #0x3 - ldr r0, [sp, #0x0] - orr r0, r3, r0 - strh r0, [r2, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - ldr r0, [sp, #0x4] - add sp, sp, #0x34 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020DD748: .word 0x021D6B20 -_020DD74C: .word 0x000080FF -_020DD750: .word 0x021D6B0C -_020DD754: .word 0x04000204 -_020DD758: .word 0x04000208 -_020DD75C: .word 0x021D6B38 -_020DD760: .word 0x0A005555 -_020DD764: .word 0x0A002AAA -_020DD768: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlashChipCoreMX -CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020DD848 ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r4, _020DD84C ; =0x04000204 - ldr r0, _020DD850 ; =0x021D6B20 - ldrh r3, [r4, #0x0] - ldr r0, [r0, #0x0] - ldrh r1, [r4, #0x0] - ldr r2, [r0, #0x10] - ldr r0, _020DD854 ; =0x04000208 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r4, #0x0] - ldrh r4, [r0, #0x0] - mov r2, #0x0 - ldr r1, _020DD858 ; =0x021D6B38 - strh r2, [r0, #0x0] - ldr lr, _020DD85C ; =0x0A005555 - str r4, [r1, #0x0] - mov r5, #0xaa - ldr r4, _020DD860 ; =0x0A002AAA - strb r5, [lr, #0x0] - mov r12, #0x55 - strb r12, [r4, #0x0] - mov r2, #0x80 - strb r2, [lr, #0x0] - strb r5, [lr, #0x0] - strb r12, [r4, #0x0] - mov r2, #0x10 - strb r2, [lr, #0x0] - ldrh r2, [r0, #0x0] - ldr r2, [r1, #0x0] - ldr r1, _020DD864 ; =0x021D6B24 - strh r2, [r0, #0x0] - ldr r4, [r1, #0x0] - mov r0, #0x3 - mov r1, #0xa000000 - mov r2, #0xff - and r5, r3, #0x3 - blx r4 - ldr r3, _020DD84C ; =0x04000204 - ldr r1, _020DD848 ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r5 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DD848: .word 0x021D6B0C -_020DD84C: .word 0x04000204 -_020DD850: .word 0x021D6B20 -_020DD854: .word 0x04000208 -_020DD858: .word 0x021D6B38 -_020DD85C: .word 0x0A005555 -_020DD860: .word 0x0A002AAA -_020DD864: .word 0x021D6B24 -_020DD868: - .byte 0x00, 0x40, 0x2D, 0xE9, 0x24, 0xD0, 0x4D, 0xE2 - .byte 0x0C, 0x10, 0x8D, 0xE5, 0xB0, 0x02, 0xCD, 0xE1, 0x10, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE2 - .byte 0x5D, 0x00, 0x00, 0xEB, 0x24, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xC0, 0xD8, 0x0D, 0x02, 0x00, 0x40, 0x2D, 0xE9, 0x24, 0xD0, 0x4D, 0xE2, 0xB0, 0x02, 0xCD, 0xE1 - .byte 0x00, 0x00, 0x8D, 0xE2, 0x0C, 0x10, 0x8D, 0xE5, 0x04, 0x00, 0x00, 0xEB, 0x00, 0x08, 0xA0, 0xE1 - .byte 0x20, 0x08, 0xA0, 0xE1, 0x24, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xF0, 0x41, 0x2D, 0xE9, 0x28, 0xD0, 0x4D, 0xE2, 0x00, 0x50, 0xA0, 0xE1, 0x0F, 0x00, 0xB5, 0xE8 - .byte 0x00, 0x40, 0x8D, 0xE2, 0x0F, 0x00, 0xA4, 0xE8, 0x0F, 0x00, 0xB5, 0xE8, 0x0F, 0x00, 0xA4, 0xE8 - .byte 0x00, 0x01, 0x9F, 0xE5, 0x00, 0x10, 0x95, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x00, 0x10, 0x84, 0xE5 - .byte 0xB0, 0x52, 0xDD, 0xE1, 0xBA, 0x00, 0xD0, 0xE1, 0x0C, 0x40, 0x9D, 0xE5, 0x00, 0x00, 0x55, 0xE1 - .byte 0x28, 0xD0, 0x8D, 0x22, 0xE0, 0x00, 0x9F, 0x25, 0xF0, 0x41, 0xBD, 0x28, 0x1E, 0xFF, 0x2F, 0x21 - .byte 0x05, 0x00, 0xA0, 0xE1, 0x0B, 0xFD, 0xFF, 0xEB, 0x00, 0x60, 0xB0, 0xE1, 0x28, 0xD0, 0x8D, 0x12 - .byte 0xF0, 0x41, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0xC0, 0x00, 0x9F, 0xE5, 0xB0, 0x00, 0xD0, 0xE1 - .byte 0x34, 0xB2, 0xFF, 0xEB, 0xB8, 0x70, 0x9F, 0xE5, 0xA8, 0x00, 0x9F, 0xE5, 0xB0, 0x30, 0xD7, 0xE1 - .byte 0x00, 0x20, 0x90, 0xE5, 0xB0, 0x10, 0xD7, 0xE1, 0x10, 0x20, 0x92, 0xE5, 0xA4, 0x80, 0x9F, 0xE5 - .byte 0x03, 0x10, 0xC1, 0xE3, 0x02, 0x10, 0x81, 0xE1, 0xB0, 0x10, 0xC7, 0xE1, 0x00, 0x10, 0x90, 0xE5 - .byte 0x03, 0x70, 0x03, 0xE2, 0x04, 0x00, 0x91, 0xE5, 0xB0, 0x00, 0xC8, 0xE1, 0xB8, 0x10, 0xD1, 0xE1 - .byte 0xB0, 0x00, 0xD8, 0xE1, 0x15, 0x11, 0xA0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x54, 0x81, 0xE2 - .byte 0x0C, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0xA9, 0xFD, 0xFF, 0xEB - .byte 0x00, 0x60, 0xB0, 0xE1, 0x07, 0x00, 0x00, 0x1A, 0xB0, 0x00, 0xD8, 0xE1, 0x01, 0x40, 0x84, 0xE2 - .byte 0x01, 0x50, 0x85, 0xE2, 0x01, 0x00, 0x40, 0xE2, 0xB0, 0x00, 0xC8, 0xE1, 0xB0, 0x00, 0xD8, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0xF2, 0xFF, 0xFF, 0x1A, 0x34, 0x20, 0x9F, 0xE5, 0x2C, 0x00, 0x9F, 0xE5 - .byte 0xB0, 0x10, 0xD2, 0xE1, 0x03, 0x10, 0xC1, 0xE3, 0x07, 0x10, 0x81, 0xE1, 0xB0, 0x10, 0xC2, 0xE1 - .byte 0xB0, 0x00, 0xD0, 0xE1, 0x03, 0xB2, 0xFF, 0xEB, 0x06, 0x00, 0xA0, 0xE1, 0x28, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x20, 0x6B, 0x1D, 0x02, 0xFF, 0x80, 0x00, 0x00 - .byte 0x0C, 0x6B, 0x1D, 0x02, 0x04, 0x02, 0x00, 0x04, 0x08, 0x6B, 0x1D, 0x02 - - arm_func_start CTRDGi_SetTask -CTRDGi_SetTask: ; 0x020DD9FC - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r3, _020DDAA8 ; =0x021D6B50 - mov r7, r0 - mov r4, r1 - mov r6, r2 - ldr r5, [r3, #0x0] - bl CTRDGi_IsTaskAvailable -_020DDA1C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x00, 0x00, 0x00, 0x1A, 0x89, 0xBF, 0xFF, 0xEB, 0x7C, 0x00, 0x9F, 0xE5, 0x22, 0x00, 0xD0, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x00, 0x0A, 0x84, 0xBF, 0xFF, 0xEB, 0x33, 0xBE, 0xFF, 0xEB - .byte 0x01, 0x10, 0xA0, 0xE3, 0x22, 0x10, 0xC7, 0xE5, 0x00, 0x40, 0x87, 0xE5, 0xC4, 0x10, 0x85, 0xE2 - .byte 0x01, 0x00, 0x57, 0xE1, 0x00, 0x40, 0xA0, 0xE1, 0x48, 0x00, 0x9F, 0x05, 0x04, 0x60, 0x87, 0xE5 - .byte 0x00, 0x10, 0xA0, 0x03, 0x00, 0x10, 0x80, 0x05, 0x3C, 0xC0, 0x9F, 0xE5, 0x0F, 0x00, 0xB7, 0xE8 - .byte 0x0C, 0x60, 0xA0, 0xE1, 0x0F, 0x00, 0xAC, 0xE8, 0x0F, 0x00, 0xB7, 0xE8, 0x0F, 0x00, 0xAC, 0xE8 - .byte 0x00, 0x10, 0x97, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0x8C, 0xE5, 0xC0, 0x60, 0x85, 0xE5 - .byte 0xE6, 0xB5, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x21, 0xBE, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020DDAA8: .word 0x021D6B50 -_020DDAAC: - .byte 0x54, 0x6B, 0x1D, 0x02 - - arm_func_start CTRDGi_TaskThread -CTRDGi_TaskThread: ; 0x020DDAB0 - stmdb sp!, {r4-r10,lr} - sub sp, sp, #0x28 - ldr r6, _020DDB94 ; =0x021D6B54 - ldr r5, _020DDB98 ; =0x021D6B50 - mov r4, r0 - add r9, sp, #0x0 - mov r8, #0x0 - mov r7, #0x24 -_020DDAD0: - mov r0, r9 - mov r1, r8 - mov r2, r7 - bl MI_CpuFill8 - bl OS_DisableInterrupts - ldr r1, [r4, #0xc0] - mov r10, r0 - cmp r1, #0x0 - bne _020DDB08 -_020DDAF4: - mov r0, r8 - bl OS_SleepThread - ldr r0, [r4, #0xc0] - cmp r0, #0x0 - beq _020DDAF4 -_020DDB08: - ldr lr, [r4, #0xc0] - add r12, sp, #0x0 - ldmia lr!, {r0-r3} - stmia r12!, {r0-r3} - ldmia lr!, {r0-r3} - stmia r12!, {r0-r3} - ldr r1, [lr, #0x0] - mov r0, r10 - str r1, [r12, #0x0] - bl OS_RestoreInterrupts - ldr r1, [sp, #0x0] - cmp r1, #0x0 - beq _020DDB48 - mov r0, r9 - blx r1 - str r0, [sp, #0x8] -_020DDB48: - bl OS_DisableInterrupts - ldr r1, [sp, #0x4] - mov r10, r0 - strb r8, [r6, #0x22] - cmp r1, #0x0 - beq _020DDB68 - mov r0, r9 - blx r1 -_020DDB68: - ldr r0, [r5, #0x0] - cmp r0, #0x0 - beq _020DDB84 - mov r0, r10 - str r8, [r4, #0xc0] - bl OS_RestoreInterrupts - b _020DDAD0 -_020DDB84: - bl OS_ExitThread - add sp, sp, #0x28 - ldmia sp!, {r4-r10,lr} - bx lr - .balign 4 -_020DDB94: .word 0x021D6B54 -_020DDB98: .word 0x021D6B50 - - arm_func_start CTRDGi_InitTaskInfo -CTRDGi_InitTaskInfo: - ldr ip, _020DDBAC ; =MI_CpuFill8 - mov r1, #0x0 - mov r2, #0x24 - bx r12 - .balign 4 -_020DDBAC: .word MI_CpuFill8 - - arm_func_start CTRDGi_IsTaskAvailable -CTRDGi_IsTaskAvailable: - ldr r0, _020DDBC8 ; =0x021D6B50 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - bx lr - .balign 4 -_020DDBC8: .word 0x021D6B50 - - arm_func_start CTRDGi_InitTaskThread -CTRDGi_InitTaskThread: ; 0x020DDBCC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, _020DDC4C ; =0x021D6B50 - mov r4, r0 - ldr r0, [r1, #0x0] - cmp r0, #0x0 - bne _020DDC38 - add r0, r5, #0xc4 - str r5, [r1, #0x0] - bl CTRDGi_InitTaskInfo - ldr r0, _020DDC50 ; =0x021D6B54 - bl CTRDGi_InitTaskInfo -_020DDC04: - .byte 0x00, 0x00, 0xA0, 0xE3, 0xC0, 0x00, 0x85, 0xE5, 0x01, 0x2B, 0xA0, 0xE3 - .byte 0x3C, 0x10, 0x9F, 0xE5, 0x3C, 0x30, 0x9F, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x00, 0x20, 0x8D, 0xE5 - .byte 0x14, 0x20, 0xA0, 0xE3, 0x04, 0x20, 0x8D, 0xE5, 0x05, 0x20, 0xA0, 0xE1, 0x52, 0xB6, 0xFF, 0xEB - .byte 0x05, 0x00, 0xA0, 0xE1, 0x7D, 0xB5, 0xFF, 0xEB -_020DDC38: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DDC4C: .word 0x021D6B50 -_020DDC50: .word 0x021D6B54 -_020DDC54: - .byte 0xB0, 0xDA, 0x0D, 0x02, 0x78, 0x6F, 0x1D, 0x02 - - arm_func_start MATH_CountPopulation -MATH_CountPopulation: ; 0x020DDC5C - ldr r1, _020DDC94 ; =0x55555555 - ldr r2, _020DDC98 ; =0x33333333 - and r1, r1, r0, lsr #0x1 - sub r0, r0, r1 - and r1, r0, r2 - and r0, r2, r0, lsr #0x2 - add r1, r1, r0 - ldr r0, _020DDC9C ; =0x0F0F0F0F - add r1, r1, r1, lsr #0x4 - and r0, r1, r0 - add r0, r0, r0, lsr #0x8 - add r0, r0, r0, lsr #0x10 - and r0, r0, #0xff - bx lr - .balign 4 -_020DDC94: .word 0x55555555 -_020DDC98: .word 0x33333333 -_020DDC9C: .word 0x0F0F0F0F - - arm_func_start MATH_CalcSHA1 -MATH_CalcSHA1: ; 0x020DDCA0 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x68 - mov r6, r0 - add r0, sp, #0x0 - mov r5, r1 - mov r4, r2 - bl MATH_SHA1Init -_020DDCBC: - .byte 0x00, 0x00, 0x8D, 0xE2 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0xCF, 0xD4, 0xFF, 0xEB, 0x00, 0x00, 0x8D, 0xE2 - .byte 0x06, 0x10, 0xA0, 0xE1, 0x4D, 0xD4, 0xFF, 0xEB, 0x68, 0xD0, 0x8D, 0xE2, 0x70, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start MATH_CalcMD5 -MATH_CalcMD5: ; 0x020DDCE4 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x58 - mov r6, r0 - add r0, sp, #0x0 - mov r5, r1 - mov r4, r2 - bl MATH_MD5Init -_020DDD00: - .byte 0x00, 0x00, 0x8D, 0xE2, 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0xCC, 0xD3, 0xFF, 0xEB - .byte 0x00, 0x10, 0x8D, 0xE2, 0x06, 0x00, 0xA0, 0xE1, 0x98, 0xD3, 0xFF, 0xEB, 0x58, 0xD0, 0x8D, 0xE2 - .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start MATH_CalcCRC32 -MATH_CalcCRC32: ; 0x020DDD28 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mvn r12, #0x0 - mov r3, r2 - add r1, sp, #0x0 - mov r2, lr - str r12, [sp, #0x0] - bl MATHi_CRC32UpdateRev -_020DDD4C: - .byte 0x00, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0xE0, 0xE1, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start MATH_CalcCRC16CCITT -MATH_CalcCRC16CCITT: ; 0x020DDD60 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr ip, _020DDD94 ; =0x0000FFFF - mov lr, r1 - mov r3, r2 - add r1, sp, #0x0 - mov r2, lr - strh r12, [sp, #0x0] - bl MATHi_CRC16Update - ldrh r0, [sp, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DDD94: .word 0x0000FFFF - - arm_func_start MATH_CalcCRC16 -MATH_CalcCRC16: ; 0x020DDD98 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r12, #0x0 - mov r3, r2 - add r1, sp, #0x0 - mov r2, lr - strh r12, [sp, #0x0] - bl MATHi_CRC16UpdateRev - ldrh r0, [sp, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start MATH_CalcCRC8 -MATH_CalcCRC8: ; 0x020DDDCC - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r12, #0x0 - mov r3, r2 - add r1, sp, #0x0 - mov r2, lr - strb r12, [sp, #0x0] - bl MATHi_CRC8Update -_020DDDF0: - .byte 0x00, 0x00, 0xDD, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start MATHi_CRC32UpdateRev -MATHi_CRC32UpdateRev: - stmdb sp!, {r4,lr} - cmp r3, #0x0 - ldr r4, [r1, #0x0] - mov lr, #0x0 - bls _020DDE38 -_020DDE14: - ldrb r12, [r2, #0x0] - add lr, lr, #0x1 - cmp lr, r3 - eor r12, r4, r12 - and r12, r12, #0xff - ldr r12, [r0, r12, lsl #0x2] - add r2, r2, #0x1 - eor r4, r12, r4, lsr #0x8 - blo _020DDE14 -_020DDE38: - str r4, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC32InitTableRev -MATHi_CRC32InitTableRev: ; 0x020DDE44 - stmdb sp!, {r4,lr} - mov lr, #0x0 - mov r3, lr -_020DDE50: - mov r4, lr - mov r12, r3 -_020DDE58: - ands r2, r4, #0x1 - eorne r4, r1, r4, lsr #0x1 - add r12, r12, #0x1 - moveq r4, r4, lsr #0x1 - cmp r12, #0x8 - blo _020DDE58 - str r4, [r0, lr, lsl #0x2] - add lr, lr, #0x1 - cmp lr, #0x100 - blo _020DDE50 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC16UpdateRev -MATHi_CRC16UpdateRev: ; 0x020DDE88 - stmdb sp!, {r4,lr} - cmp r3, #0x0 - ldrh r4, [r1, #0x0] - mov lr, #0x0 - bls _020DDEC4 -_020DDE9C: - ldrb r12, [r2, #0x0] - add lr, lr, #0x1 - cmp lr, r3 - eor r12, r4, r12 - and r12, r12, #0xff - mov r12, r12, lsl #0x1 - ldrh r12, [r0, r12] - add r2, r2, #0x1 - eor r4, r12, r4, lsr #0x8 - blo _020DDE9C -_020DDEC4: - strh r4, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC16Update -MATHi_CRC16Update: ; 0x020DDED0 - stmdb sp!, {r4,lr} - cmp r3, #0x0 - ldrh r4, [r1, #0x0] - mov lr, #0x0 - bls _020DDF0C -_020DDEE4: - ldrb r12, [r2, #0x0] - add lr, lr, #0x1 - cmp lr, r3 - eor r12, r12, r4, lsr #0x8 - and r12, r12, #0xff - mov r12, r12, lsl #0x1 - ldrh r12, [r0, r12] - add r2, r2, #0x1 - eor r4, r12, r4, lsl #0x8 - blo _020DDEE4 -_020DDF0C: - strh r4, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC16InitTableRev -MATHi_CRC16InitTableRev: ; 0x020DDF18 - stmdb sp!, {r4,lr} - mov lr, #0x0 - mov r3, lr -_020DDF24: - mov r4, lr - mov r12, r3 -_020DDF2C: - ands r2, r4, #0x1 - eorne r4, r1, r4, lsr #0x1 - add r12, r12, #0x1 - moveq r4, r4, lsr #0x1 - cmp r12, #0x8 - blo _020DDF2C - mov r2, lr, lsl #0x1 - add lr, lr, #0x1 - strh r4, [r0, r2] - cmp lr, #0x100 - blo _020DDF24 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC16InitTable -MATHi_CRC16InitTable: ; 0x020DDF60 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, #0x0 - mov r12, r4 - mov r3, r4 -_020DDF74: - mov r5, r12 - mov lr, r3 -_020DDF7C: - ands r2, r5, #0x8000 - eorne r5, r1, r5, lsl #0x1 - add lr, lr, #0x1 - moveq r5, r5, lsl #0x1 - cmp lr, #0x8 - blo _020DDF7C - mov r2, r4, lsl #0x1 - add r4, r4, #0x1 - strh r5, [r0, r2] - cmp r4, #0x100 - add r12, r12, #0x100 - blo _020DDF74 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start MATHi_CRC8Update -MATHi_CRC8Update: - stmdb sp!, {r4,lr} - cmp r3, #0x0 - ldrb r4, [r1, #0x0] - mov lr, #0x0 - bls _020DDFEC -_020DDFCC: - ldrb r12, [r2, #0x0] - add lr, lr, #0x1 - cmp lr, r3 - eor r12, r4, r12 - and r12, r12, #0xff - add r2, r2, #0x1 - ldrb r4, [r0, r12] - blo _020DDFCC -_020DDFEC: - strb r4, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC8InitTable -MATHi_CRC8InitTable: ; 0x020DDFF8 - stmdb sp!, {r4,lr} - mov lr, #0x0 - mov r3, lr -_020DE004: - mov r4, lr - mov r12, r3 -_020DE00C: - ands r2, r4, #0x80 - eorne r4, r1, r4, lsl #0x1 - add r12, r12, #0x1 - moveq r4, r4, lsl #0x1 - cmp r12, #0x8 - blo _020DE00C - strb r4, [r0, lr] - add lr, lr, #0x1 - cmp lr, #0x100 - blo _020DE004 - ldmia sp!, {r4,lr} - bx lr - arm_func_start STD_CompareNString STD_CompareNString: ; 0x020DE03C stmdb sp!, {lr} diff --git a/global.inc b/global.inc index d20893e3..7eb60996 100644 --- a/global.inc +++ b/global.inc @@ -1046,3 +1046,9 @@ .extern MI_DmaFill32 .extern OS_InitMessageQueue .extern RTC_GetTime +.extern OS_SetDPermissionsForProtectionRegion +.extern MI_DmaCopy32 +.extern MATH_SHA1Update +.extern MATH_SHA1GetHash +.extern MATH_MD5Update +.extern MATH_MD5GetHash diff --git a/pokediamond.lcf b/pokediamond.lcf index bfbb2669..840d581c 100644 --- a/pokediamond.lcf +++ b/pokediamond.lcf @@ -387,6 +387,8 @@ SECTIONS { RTC_arm9.o (.text) CARD_arm9.o (.text) WM_arm9.o (.text) + CTRDG_arm9.o (.text) + MATH_arm9.o (.text) rom2dism.o (.text) rom2.o (.data) string_util.o (.data) -- cgit v1.2.3 From 1750bfd8497b314cf7ac24d8221ac936a9cfa9c6 Mon Sep 17 00:00:00 2001 From: Demki Date: Thu, 23 Apr 2020 14:07:39 +0300 Subject: dism STD --- asm/STD_arm9.s | 17117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ asm/rom2dism.s | 13429 ------------------------------------------ global.inc | 3 + pokediamond.lcf | 2 +- 4 files changed, 17121 insertions(+), 13430 deletions(-) create mode 100644 asm/STD_arm9.s delete mode 100644 asm/rom2dism.s diff --git a/asm/STD_arm9.s b/asm/STD_arm9.s new file mode 100644 index 00000000..e25cc0c5 --- /dev/null +++ b/asm/STD_arm9.s @@ -0,0 +1,17117 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start STD_CompareNString +STD_CompareNString: ; 0x020DE03C + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + beq _020DE080 + cmp r2, #0x0 + mov lr, #0x0 + ble _020DE080 +_020DE058: + ldrb r12, [r0, lr] + ldrb r3, [r1, lr] + cmp r12, r3 + addne sp, sp, #0x4 + subne r0, r12, r3 + ldmneia sp!, {lr} + bxne lr + add lr, lr, #0x1 + cmp lr, r2 + blt _020DE058 +_020DE080: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start STD_CompareString +STD_CompareString: ; 0x020DE090 + b _020DE09C +_020DE094: + add r0, r0, #0x1 + add r1, r1, #0x1 +_020DE09C: + ldrsb r2, [r1, #0x0] + ldrsb r3, [r0, #0x0] + cmp r3, r2 + bne _020DE0B4 + cmp r3, #0x0 + bne _020DE094 +_020DE0B4: + sub r0, r3, r2 + bx lr + + arm_func_start STD_GetStringLength +STD_GetStringLength: ; 0x020DE0BC + ldrsb r1, [r0, #0x0] + mov r2, #0x0 + cmp r1, #0x0 + beq _020DE0DC +_020DE0CC: + add r2, r2, #0x1 + ldrsb r1, [r0, r2] + cmp r1, #0x0 + bne _020DE0CC +_020DE0DC: + mov r0, r2 + bx lr + + arm_func_start STD_CopyLString +STD_CopyLString: ; 0x020DE0E4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + sub r12, r2, #0x1 + cmp r12, #0x0 + mov lr, #0x0 + ble _020DE120 +_020DE0FC: + ldrsb r3, [r1, #0x0] + strb r3, [r0, lr] + ldrsb r3, [r1, #0x0] + cmp r3, #0x0 + beq _020DE120 + add lr, lr, #0x1 + cmp lr, r12 + add r1, r1, #0x1 + blt _020DE0FC +_020DE120: + sub r3, r2, #0x1 + cmp lr, r3 + blt _020DE138 + cmp r2, #0x0 + movne r2, #0x0 + strneb r2, [r0, lr] +_020DE138: + mov r0, r1 + bl STD_GetStringLength + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start abort +abort: ; 0x020DE14C + stmdb sp!, {r3,lr} + mov r0, #0x1 + bl raise + ldr r1, _020DE16C ; =0x021D6F78 + mov r0, #0x1 + str r0, [r1, #0xc] + bl exit + ldmia sp!, {r3,pc} + .balign 4 +_020DE16C: .word 0x021D6F78 + + arm_func_start exit +exit: ; 0x020DE170 + stmdb sp!, {r4,lr} + ldr r1, _020DE1B8 ; =0x021D6F78 + mov r4, r0 + ldr r0, [r1, #0xc] + cmp r0, #0x0 + bne _020DE1AC + bl __destroy_global_chain + ldr r0, _020DE1B8 ; =0x021D6F78 + ldr r0, [r0, #0x4] + cmp r0, #0x0 + beq _020DE1AC + blx r0 + ldr r0, _020DE1B8 ; =0x021D6F78 + mov r1, #0x0 + str r1, [r0, #0x4] +_020DE1AC: + mov r0, r4 + bl __exit + ldmia sp!, {r4,pc} + .balign 4 +_020DE1B8: .word 0x021D6F78 + + arm_func_start __exit +__exit: ; 0x020DE1BC + stmdb sp!, {r3-r5,lr} + ldr r0, _020DE2CC ; =0x021D70D0 + bl OS_TryLockMutex +_020DE1C8: ; 0x020DE1C8 + cmp r0, #0x0 + bne _020DE1F4 + ldr r0, _020DE2D0 ; =0x021D3498 + ldr r1, _020DE2D4 ; =0x021D7088 + ldr r2, [r0, #0x4] + ldr r0, _020DE2D8 ; =0x021D70AC + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0x0] + str r2, [r0, #0x0] + b _020DE24C +_020DE1F4: + ldr r0, _020DE2D0 ; =0x021D3498 + ldr r1, _020DE2D4 ; =0x021D7088 + ldr r0, [r0, #0x4] + ldr r1, [r1, #0x0] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020DE224 + ldr r0, _020DE2D8 ; =0x021D70AC + ldr r1, [r0, #0x0] + add r1, r1, #0x1 + str r1, [r0, #0x0] + b _020DE24C +_020DE224: + ldr r0, _020DE2CC ; =0x021D70D0 + bl OS_LockMutex + ldr r0, _020DE2D0 ; =0x021D3498 + ldr r1, _020DE2D4 ; =0x021D7088 + ldr r2, [r0, #0x4] + ldr r0, _020DE2D8 ; =0x021D70AC + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0x0] + str r2, [r0, #0x0] +_020DE24C: + ldr r4, _020DE2DC ; =0x021D6F78 + ldr r0, [r4, #0x8] + cmp r0, #0x0 + ble _020DE280 + ldr r5, _020DE2E0 ; =0x021D6F88 +_020DE260: + ldr r0, [r4, #0x8] + sub r1, r0, #0x1 + ldr r0, [r5, r1, lsl #0x2] + str r1, [r4, #0x8] + blx r0 + ldr r0, [r4, #0x8] + cmp r0, #0x0 + bgt _020DE260 +_020DE280: + ldr r0, _020DE2D8 ; =0x021D70AC + ldr r1, [r0, #0x0] + subs r1, r1, #0x1 + str r1, [r0, #0x0] + bne _020DE29C + ldr r0, _020DE2CC ; =0x021D70D0 + bl OS_UnlockMutex +_020DE29C: + ldr r0, _020DE2DC ; =0x021D6F78 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020DE2BC + blx r0 + ldr r0, _020DE2DC ; =0x021D6F78 + mov r1, #0x0 + str r1, [r0, #0x0] +_020DE2BC: + mov r0, #0x0 + bl fflush + bl _ExitProcess + ldmia sp!, {r3-r5,pc} + .balign 4 +_020DE2CC: .word 0x021D70D0 +_020DE2D0: .word 0x021D3498 +_020DE2D4: .word 0x021D7088 +_020DE2D8: .word 0x021D70AC +_020DE2DC: .word 0x021D6F78 +_020DE2E0: .word 0x021D6F88 + + arm_func_start nan +nan: ; 0x020DE2E4 + ldr r0, _020DE2F4 ; =0x02106B78 + ldr ip, _020DE2F8 ; =_f2d + ldr r0, [r0, #0x0] + bx r12 + .balign 4 +_020DE2F4: .word 0x02106B78 +_020DE2F8: .word _f2d + +arm_func_start __flush_line_buffered_output_files +__flush_line_buffered_output_files: + stmdb sp!, {r3-r9,lr} + ldr r0, _020DE384 ; =0x02106A58 + mov r4, #0x0 + mov r5, #0x1 + mov r8, r0 + mvn r9, #0x0 + mov r7, r4 + mov r6, #0x4c +_020DE31C: + ldr r1, [r0, #0x4] + mov r2, r1, lsl #0x16 + movs r2, r2, lsr #0x1d + beq _020DE35C + mov r1, r1, lsl #0x19 + mov r1, r1, lsr #0x1e + tst r1, #0x1 + beq _020DE35C + ldr r1, [r0, #0x8] + mov r1, r1, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #0x1 + bne _020DE35C + bl fflush +_020DE354: ; 0x020DE354 + cmp r0, #0x0 + movne r4, r9 +_020DE35C: + cmp r5, #0x3 + movge r0, r7 + bge _020DE374 + mul r0, r5, r6 + add r5, r5, #0x1 + add r0, r8, r0 +_020DE374: + cmp r0, #0x0 + bne _020DE31C + mov r0, r4 + ldmia sp!, {r3-r9,pc} + .balign 4 +_020DE384: .word 0x02106A58 + + arm_func_start __flush_all +__flush_all: ; 0x020DE388 + stmdb sp!, {r3-r9,lr} + ldr r0, _020DE3EC ; =0x02106A58 + mov r4, #0x0 + mov r5, #0x1 + mov r8, r0 + mvn r9, #0x0 + mov r7, r4 + mov r6, #0x4c +_020DE3A8: + ldr r1, [r0, #0x4] + mov r1, r1, lsl #0x16 + movs r1, r1, lsr #0x1d + beq _020DE3C4 + bl fflush +_020DE3BC: ; 0x020DE3BC + cmp r0, #0x0 + movne r4, r9 +_020DE3C4: + cmp r5, #0x3 + movge r0, r7 + bge _020DE3DC + mul r0, r5, r6 + add r5, r5, #0x1 + add r0, r8, r0 +_020DE3DC: + cmp r0, #0x0 + bne _020DE3A8 + mov r0, r4 + ldmia sp!, {r3-r9,pc} + .balign 4 +_020DE3EC: .word 0x02106A58 + + arm_func_start abs +abs: ; 0x020DE3F0 + cmp r0, #0x0 + rsblt r0, r0, #0x0 + bx lr + + arm_func_start __msl_assertion_failed +__msl_assertion_failed: ; 0x020DE3FC + stmdb sp!, {r3-r4,lr} + sub sp, sp, #0x4 + mov r4, r0 + mov lr, r1 + mov r12, r2 + str r3, [sp, #0x0] + ldr r0, _020DE434 ; =0x02106B3C + mov r1, r4 + mov r2, lr + mov r3, r12 + bl printf + bl abort + add sp, sp, #0x4 + ldmia sp!, {r3-r4,pc} + .balign 4 +_020DE434: .word 0x02106B3C + +arm_func_start __convert_from_newlines +__convert_from_newlines: + bx lr + +arm_func_start __convert_to_newlines +__convert_to_newlines: + bx lr + +arm_func_start __prep_buffer +__prep_buffer: + ldr r1, [r0, #0x1c] + str r1, [r0, #0x24] + ldr r3, [r0, #0x20] + str r3, [r0, #0x28] + ldr r2, [r0, #0x18] + ldr r1, [r0, #0x2c] + and r1, r2, r1 + sub r1, r3, r1 + str r1, [r0, #0x28] + ldr r1, [r0, #0x18] + str r1, [r0, #0x34] + bx lr + +arm_func_start __load_buffer +__load_buffer: + stmdb sp!, {r4-r6,lr} + mov r5, r2 + mov r4, r0 + mov r6, r1 + bl __prep_buffer + cmp r5, #0x1 + ldreq r0, [r4, #0x20] + add r2, r4, #0x28 + streq r0, [r4, #0x28] + ldr r0, [r4, #0x0] + ldr r1, [r4, #0x1c] + ldr r3, [r4, #0x48] + ldr r12, [r4, #0x3c] + blx r12 + cmp r0, #0x2 + moveq r1, #0x0 + streq r1, [r4, #0x28] + cmp r6, #0x0 + ldrne r1, [r4, #0x28] + strne r1, [r6, #0x0] + cmp r0, #0x0 + ldmneia sp!, {r4-r6,pc} +_020DE4C8: ; 0x020DE4C8 + ldr r1, [r4, #0x18] + ldr r0, [r4, #0x28] + add r0, r1, r0 + str r0, [r4, #0x18] + ldr r0, [r4, #0x4] + mov r0, r0, lsl #0x13 + movs r0, r0, lsr #0x1f + bne _020DE4F4 + ldr r0, [r4, #0x1c] + add r1, r4, #0x28 + bl __convert_to_newlines +_020DE4F4: + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} + +arm_func_start __flush_buffer +__flush_buffer: + stmdb sp!, {r3-r5,lr} + mov r5, r0 + ldr r2, [r5, #0x24] + ldr r0, [r5, #0x1c] + mov r4, r1 + subs r0, r2, r0 + beq _020DE574 + str r0, [r5, #0x28] + ldr r0, [r5, #0x4] + mov r0, r0, lsl #0x13 + movs r0, r0, lsr #0x1f + bne _020DE538 + ldr r0, [r5, #0x1c] + add r1, r5, #0x28 + bl __convert_from_newlines +_020DE538: + ldr r0, [r5, #0x0] + ldr r1, [r5, #0x1c] + ldr r3, [r5, #0x48] + ldr r12, [r5, #0x40] + add r2, r5, #0x28 + blx r12 + cmp r4, #0x0 + ldrne r1, [r5, #0x28] + strne r1, [r4, #0x0] + cmp r0, #0x0 + ldmneia sp!, {r3-r5,pc} +_020DE564: ; 0x020DE564 + ldr r1, [r5, #0x18] + ldr r0, [r5, #0x28] + add r0, r1, r0 + str r0, [r5, #0x18] +_020DE574: + mov r0, r5 + bl __prep_buffer +_020DE57C: ; 0x020DE57C + mov r0, #0x0 + ldmia sp!, {r3-r5,pc} + + arm_func_start fread +fread: ; 0x020DE584 + stmdb sp!, {r4-r10,lr} + ldr r4, _020DE67C ; =0x02106A58 + mov r7, r3 + cmp r7, r4 + moveq r6, #0x2 + mov r10, r0 + movne r6, #0x5 + mov r0, #0x18 + mul r4, r6, r0 + ldr r5, _020DE680 ; =0x021D70D0 + mov r9, r1 + add r0, r5, r4 + mov r8, r2 + bl OS_TryLockMutex +_020DE5BC: ; 0x020DE5BC + cmp r0, #0x0 + bne _020DE5E8 + ldr r0, _020DE684 ; =0x021D3498 + ldr r2, _020DE688 ; =0x021D7088 + ldr r1, [r0, #0x4] + ldr r0, _020DE68C ; =0x021D70AC + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] + b _020DE640 +_020DE5E8: + ldr r0, _020DE684 ; =0x021D3498 + ldr r1, _020DE688 ; =0x021D7088 + ldr r0, [r0, #0x4] + ldr r1, [r1, r6, lsl #0x2] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020DE618 + ldr r1, _020DE68C ; =0x021D70AC + ldr r0, [r1, r6, lsl #0x2] + add r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + b _020DE640 +_020DE618: + add r0, r5, r4 + bl OS_LockMutex + ldr r0, _020DE684 ; =0x021D3498 + ldr r2, _020DE688 ; =0x021D7088 + ldr r1, [r0, #0x4] + ldr r0, _020DE68C ; =0x021D70AC + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] +_020DE640: + mov r0, r10 + mov r1, r9 + mov r2, r8 + mov r3, r7 + bl __fread + ldr r1, _020DE68C ; =0x021D70AC + mov r7, r0 + ldr r0, [r1, r6, lsl #0x2] + subs r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + bne _020DE674 + add r0, r5, r4 + bl OS_UnlockMutex +_020DE674: + mov r0, r7 + ldmia sp!, {r4-r10,pc} + .balign 4 +_020DE67C: .word 0x02106A58 +_020DE680: .word 0x021D70D0 +_020DE684: .word 0x021D3498 +_020DE688: .word 0x021D7088 +_020DE68C: .word 0x021D70AC + + arm_func_start __fread +__fread: ; 0x020DE690 + stmdb sp!, {r3-r10,lr} + sub sp, sp, #0x4 + mov r7, r3 + mov r9, r0 + mov r8, r1 + mov r0, r7 + mov r1, #0x0 + mov r4, r2 + bl fwide +_020DE6B4: ; 0x020DE6B4 + cmp r0, #0x0 + bne _020DE6C8 + mov r0, r7 + mvn r1, #0x0 + bl fwide +_020DE6C8: + muls r4, r8, r4 + beq _020DE6EC + ldrb r0, [r7, #0xd] + cmp r0, #0x0 + bne _020DE6EC + ldr r1, [r7, #0x4] + mov r0, r1, lsl #0x16 + movs r0, r0, lsr #0x1d + bne _020DE6F8 +_020DE6EC: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r3-r10,pc} +_020DE6F8: + mov r0, r1, lsl #0x13 + movs r0, r0, lsr #0x1f + movne r0, r1, lsl #0x19 + movne r0, r0, lsr #0x1e + ldr r1, [r7, #0x8] + cmpne r0, #0x2 + mov r6, #0x1 + mov r0, r1, lsl #0x1d + movne r6, #0x0 + movs r0, r0, lsr #0x1d + bne _020DE74C + ldr r0, [r7, #0x4] + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + tst r0, #0x1 + beq _020DE74C + bic r0, r1, #0x7 + orr r0, r0, #0x2 + str r0, [r7, #0x8] + mov r0, #0x0 + str r0, [r7, #0x28] +_020DE74C: + ldr r0, [r7, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x2 + bhs _020DE778 + mov r0, #0x1 + strb r0, [r7, #0xd] + mov r0, #0x0 + add sp, sp, #0x4 + str r0, [r7, #0x28] + ldmia sp!, {r3-r10,pc} +_020DE778: + ldr r0, [r7, #0x4] + mov r0, r0, lsl #0x19 + mov r0, r0, lsr #0x1e + tst r0, #0x1 + beq _020DE7B0 + bl __flush_line_buffered_output_files +_020DE790: ; 0x020DE790 + cmp r0, #0x0 + beq _020DE7B0 + mov r0, #0x1 + strb r0, [r7, #0xd] + mov r0, #0x0 + add sp, sp, #0x4 + str r0, [r7, #0x28] + ldmia sp!, {r3-r10,pc} +_020DE7B0: + cmp r4, #0x0 + mov r5, #0x0 + beq _020DE874 + ldr r0, [r7, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x3 + blo _020DE874 + mov r10, r5 +_020DE7D4: + mov r0, r7 + mov r1, r10 + bl fwide + cmp r0, #0x1 + ldr r0, [r7, #0x8] + bne _020DE808 + mov r0, r0, lsl #0x1d + add r0, r7, r0, lsr #0x1c + ldrh r0, [r0, #0xe] + add r5, r5, #0x2 + sub r4, r4, #0x2 + strh r0, [r9], #0x2 + b _020DE820 +_020DE808: + mov r0, r0, lsl #0x1d + add r0, r7, r0, lsr #0x1d + ldrb r0, [r0, #0xf] + add r5, r5, #0x1 + sub r4, r4, #0x1 + strb r0, [r9], #0x1 +_020DE820: + ldr r1, [r7, #0x8] + cmp r4, #0x0 + mov r0, r1, lsl #0x1d + mov r0, r0, lsr #0x1d + sub r0, r0, #0x1 + bic r1, r1, #0x7 + and r0, r0, #0x7 + orr r0, r1, r0 + str r0, [r7, #0x8] + beq _020DE85C + ldr r0, [r7, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x3 + bhs _020DE7D4 +_020DE85C: + ldr r0, [r7, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x2 + ldreq r0, [r7, #0x30] + streq r0, [r7, #0x28] +_020DE874: + cmp r4, #0x0 + beq _020DE938 + ldr r0, [r7, #0x28] + cmp r0, #0x0 + cmpeq r6, #0x0 + beq _020DE938 + mov r10, #0x0 +_020DE890: + ldr r0, [r7, #0x28] + cmp r0, #0x0 + bne _020DE8E4 + mov r0, r7 + mov r1, r10 + mov r2, r10 + bl __load_buffer +_020DE8AC: ; 0x020DE8AC + cmp r0, #0x0 + beq _020DE8E4 + cmp r0, #0x1 + mov r0, #0x1 + streqb r0, [r7, #0xd] + beq _020DE8D4 + ldr r1, [r7, #0x8] + bic r1, r1, #0x7 + str r1, [r7, #0x8] + strb r0, [r7, #0xc] +_020DE8D4: + mov r0, #0x0 + str r0, [r7, #0x28] + mov r4, #0x0 + b _020DE938 +_020DE8E4: + ldr r0, [r7, #0x28] + str r0, [sp, #0x0] + cmp r0, r4 + strhi r4, [sp, #0x0] + ldr r1, [r7, #0x24] + ldr r2, [sp, #0x0] + mov r0, r9 + bl memcpy + ldr r2, [sp, #0x0] + ldr r0, [r7, #0x24] + subs r4, r4, r2 + add r0, r0, r2 + str r0, [r7, #0x24] + ldr r1, [r7, #0x28] + ldr r0, [sp, #0x0] + add r9, r9, r2 + sub r0, r1, r0 + add r5, r5, r2 + str r0, [r7, #0x28] + cmpne r6, #0x0 + bne _020DE890 +_020DE938: + cmp r4, #0x0 + beq _020DE9C4 + cmp r6, #0x0 + bne _020DE9C4 + ldr r6, [r7, #0x1c] + ldr r10, [r7, #0x20] + add r1, sp, #0x0 + str r9, [r7, #0x1c] + mov r0, r7 + mov r2, #0x1 + str r4, [r7, #0x20] + bl __load_buffer +_020DE968: ; 0x020DE968 + cmp r0, #0x0 + beq _020DE9A4 + cmp r0, #0x1 + mov r0, #0x1 + bne _020DE98C + strb r0, [r7, #0xd] + mov r0, #0x0 + str r0, [r7, #0x28] + b _020DE9A4 +_020DE98C: + ldr r1, [r7, #0x8] + bic r1, r1, #0x7 + str r1, [r7, #0x8] + strb r0, [r7, #0xc] + mov r0, #0x0 + str r0, [r7, #0x28] +_020DE9A4: + ldr r1, [sp, #0x0] + mov r0, r7 + str r6, [r7, #0x1c] + str r10, [r7, #0x20] + add r5, r5, r1 + bl __prep_buffer +_020DE9BC: ; 0x020DE9BC + mov r0, #0x0 + str r0, [r7, #0x28] +_020DE9C4: + mov r0, r5 + mov r1, r8 + bl _u32_div_f + add sp, sp, #0x4 + ldmia sp!, {r3-r10,pc} + +arm_func_start __fwrite +__fwrite: + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x8 + mov r9, r3 + mov r10, r0 + str r1, [sp, #0x0] + mov r0, r9 + mov r1, #0x0 + mov r4, r2 + bl fwide +_020DE9FC: ; 0x020DE9FC + cmp r0, #0x0 + bne _020DEA10 + mov r0, r9 + mvn r1, #0x0 + bl fwide +_020DEA10: + ldr r0, [sp, #0x0] + muls r5, r0, r4 + beq _020DEA38 + ldrb r0, [r9, #0xd] + cmp r0, #0x0 + bne _020DEA38 + ldr r1, [r9, #0x4] + mov r0, r1, lsl #0x16 + movs r0, r0, lsr #0x1d + bne _020DEA44 +_020DEA38: + add sp, sp, #0x8 + mov r0, #0x0 + ldmia sp!, {r3-r11,pc} +_020DEA44: + mov r0, r1, lsl #0x13 + movs r0, r0, lsr #0x1f + movne r0, r1, lsl #0x19 + movne r0, r0, lsr #0x1e + cmpne r0, #0x2 + ldr r1, [r9, #0x8] + cmpne r0, #0x1 + mov r8, #0x1 + mov r0, r1, lsl #0x1d + movne r8, #0x0 + movs r0, r0, lsr #0x1d + bne _020DEA9C + ldr r0, [r9, #0x4] + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + tst r0, #0x2 + beq _020DEA9C + bic r0, r1, #0x7 + orr r1, r0, #0x1 + mov r0, r9 + str r1, [r9, #0x8] + bl __prep_buffer +_020DEA9C: + ldr r0, [r9, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x1 + beq _020DEAC8 + mov r0, #0x1 + strb r0, [r9, #0xd] + mov r0, #0x0 + add sp, sp, #0x8 + str r0, [r9, #0x28] + ldmia sp!, {r3-r11,pc} +_020DEAC8: + cmp r5, #0x0 + mov r6, #0x0 + beq _020DEBF0 + ldr r0, [r9, #0x1c] + ldr r2, [r9, #0x24] + cmp r2, r0 + cmpeq r8, #0x0 + beq _020DEBF0 + ldr r1, [r9, #0x20] + sub r0, r2, r0 + sub r0, r1, r0 + str r0, [r9, #0x28] + mov r11, #0xa + mov r4, #0x0 +_020DEB00: + ldr r0, [r9, #0x28] + mov r7, r4 + str r0, [sp, #0x4] + cmp r0, r5 + strhi r5, [sp, #0x4] + ldr r0, [r9, #0x4] + mov r0, r0, lsl #0x19 + mov r0, r0, lsr #0x1e + cmp r0, #0x1 + bne _020DEB50 + ldr r2, [sp, #0x4] + cmp r2, #0x0 + beq _020DEB50 + mov r0, r10 + mov r1, r11 + bl __memrchr + movs r7, r0 + addne r0, r7, #0x1 + subne r0, r0, r10 + strne r0, [sp, #0x4] +_020DEB50: + ldr r2, [sp, #0x4] + cmp r2, #0x0 + beq _020DEB90 + ldr r0, [r9, #0x24] + mov r1, r10 + bl memcpy + ldr r2, [sp, #0x4] + ldr r0, [r9, #0x24] + add r10, r10, r2 + add r0, r0, r2 + str r0, [r9, #0x24] + ldr r1, [r9, #0x28] + ldr r0, [sp, #0x4] + sub r5, r5, r2 + sub r0, r1, r0 + str r0, [r9, #0x28] +_020DEB90: + ldr r0, [r9, #0x28] + cmp r0, #0x0 + beq _020DEBB4 + cmp r7, #0x0 + bne _020DEBB4 + ldr r0, [r9, #0x4] + mov r0, r0, lsl #0x19 + movs r0, r0, lsr #0x1e + bne _020DEBDC +_020DEBB4: + mov r0, r9 + mov r1, #0x0 + bl __flush_buffer +_020DEBC0: ; 0x020DEBC0 + cmp r0, #0x0 + beq _020DEBDC + mov r0, #0x1 + strb r0, [r9, #0xd] + mov r5, #0x0 + str r5, [r9, #0x28] + b _020DEBF0 +_020DEBDC: + ldr r0, [sp, #0x4] + cmp r5, #0x0 + add r6, r6, r0 + cmpne r8, #0x0 + bne _020DEB00 +_020DEBF0: + cmp r5, #0x0 + beq _020DEC5C + cmp r8, #0x0 + bne _020DEC5C + ldr r4, [r9, #0x1c] + ldr r7, [r9, #0x20] + add r2, r10, r5 + str r10, [r9, #0x1c] + str r5, [r9, #0x20] + add r1, sp, #0x4 + mov r0, r9 + str r2, [r9, #0x24] + bl __flush_buffer +_020DEC24: ; 0x020DEC24 + cmp r0, #0x0 + ldreq r0, [sp, #0x4] + addeq r6, r6, r0 + beq _020DEC44 + mov r0, #0x1 + strb r0, [r9, #0xd] + mov r0, #0x0 + str r0, [r9, #0x28] +_020DEC44: + str r4, [r9, #0x1c] + mov r0, r9 + str r7, [r9, #0x20] + bl __prep_buffer +_020DEC54: ; 0x020DEC54 + mov r0, #0x0 + str r0, [r9, #0x28] +_020DEC5C: + ldr r0, [r9, #0x4] + ldr r1, [sp, #0x0] + mov r0, r0, lsl #0x19 + mov r0, r0, lsr #0x1e + cmp r0, #0x2 + movne r0, #0x0 + strne r0, [r9, #0x28] + mov r0, r6 + bl _u32_div_f + add sp, sp, #0x8 + ldmia sp!, {r3-r11,pc} + + arm_func_start fclose +fclose: ; 0x020DEC88 + stmdb sp!, {r3-r5,lr} + movs r5, r0 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020DEC98: ; 0x020DEC98 + ldr r1, [r5, #0x4] + mov r1, r1, lsl #0x16 + movs r1, r1, lsr #0x1d + moveq r0, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020DECAC: ; 0x020DECAC + bl fflush + mov r4, r0 + ldr r0, [r5, #0x0] + ldr r1, [r5, #0x44] + blx r1 + ldr r1, [r5, #0x4] + mov r2, #0x0 + bic r1, r1, #0x380 + str r1, [r5, #0x4] + str r2, [r5, #0x0] + ldr r1, [r5, #0x8] + mov r1, r1, lsl #0x1c + movs r1, r1, lsr #0x1f + subne r0, r2, #0x1 + ldmneia sp!, {r3-r5,pc} +_020DECE8: ; 0x020DECE8 + cmp r4, #0x0 + cmpeq r0, #0x0 + movne r2, #0x1 + rsb r0, r2, #0x0 + ldmia sp!, {r3-r5,pc} + +arm_func_start fflush +fflush: + stmdb sp!, {r4,lr} + movs r4, r0 + bne _020DED10 + bl __flush_all + ldmia sp!, {r4,pc} +_020DED10: + ldrb r0, [r4, #0xd] + cmp r0, #0x0 + bne _020DED2C + ldr r0, [r4, #0x4] + mov r1, r0, lsl #0x16 + movs r1, r1, lsr #0x1d + bne _020DED34 +_020DED2C: + mvn r0, #0x0 + ldmia sp!, {r4,pc} +_020DED34: + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + cmp r0, #0x1 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020DED48: ; 0x020DED48 + ldr r0, [r4, #0x8] + mov r1, r0, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #0x3 + biccs r0, r0, #0x7 + orrcs r0, r0, #0x2 + strcs r0, [r4, #0x8] + ldr r0, [r4, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x2 + moveq r0, #0x0 + streq r0, [r4, #0x28] + ldr r0, [r4, #0x8] + mov r1, r0, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #0x1 + beq _020DEDA0 + bic r0, r0, #0x7 + str r0, [r4, #0x8] + mov r0, #0x0 + ldmia sp!, {r4,pc} +_020DEDA0: + mov r0, r4 + mov r1, #0x0 + bl __flush_buffer +_020DEDAC: ; 0x020DEDAC + cmp r0, #0x0 + mov r0, #0x0 + beq _020DEDCC + mov r1, #0x1 + strb r1, [r4, #0xd] + str r0, [r4, #0x28] + sub r0, r0, #0x1 + ldmia sp!, {r4,pc} +_020DEDCC: + ldr r1, [r4, #0x8] + bic r1, r1, #0x7 + str r1, [r4, #0x8] + str r0, [r4, #0x18] + str r0, [r4, #0x28] + ldmia sp!, {r4,pc} + + arm_func_start _ftell +_ftell: ; 0x020DEDE4 + ldr r1, [r0, #0x4] + mov r1, r1, lsl #0x16 + mov r1, r1, lsr #0x1d + and r1, r1, #0xff + add r1, r1, #0xff + and r1, r1, #0xff + cmp r1, #0x1 + bhi _020DEE10 + ldrb r1, [r0, #0xd] + cmp r1, #0x0 + beq _020DEE24 +_020DEE10: + ldr r0, _020DEE5C ; =0x021D74A8 + mov r1, #0x28 + str r1, [r0, #0x0] + sub r0, r1, #0x29 + bx lr +_020DEE24: + ldr r1, [r0, #0x8] + mov r1, r1, lsl #0x1d + movs r12, r1, lsr #0x1d + ldreq r0, [r0, #0x18] + bxeq lr + ldr r2, [r0, #0x24] + ldr r1, [r0, #0x1c] + ldr r3, [r0, #0x34] + sub r0, r2, r1 + cmp r12, #0x3 + add r0, r3, r0 + subcs r1, r12, #0x2 + subcs r0, r0, r1 + bx lr + .balign 4 +_020DEE5C: .word 0x021D74A8 + + arm_func_start ftell +ftell: ; 0x020DEE60 + stmdb sp!, {r3-r7,lr} + ldr r1, _020DEF60 ; =0x02106A58 + mov r7, r0 + cmp r7, r1 + moveq r6, #0x2 + beq _020DEE98 + ldr r0, _020DEF64 ; =0x02106AA4 + cmp r7, r0 + moveq r6, #0x3 + beq _020DEE98 + ldr r0, _020DEF68 ; =0x02106AF0 + cmp r7, r0 + moveq r6, #0x4 + movne r6, #0x5 +_020DEE98: + mov r0, #0x18 + mul r4, r6, r0 + ldr r5, _020DEF6C ; =0x021D70D0 + add r0, r5, r4 + bl OS_TryLockMutex +_020DEEAC: ; 0x020DEEAC + cmp r0, #0x0 + bne _020DEED8 + ldr r0, _020DEF70 ; =0x021D3498 + ldr r2, _020DEF74 ; =0x021D7088 + ldr r1, [r0, #0x4] + ldr r0, _020DEF78 ; =0x021D70AC + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] + b _020DEF30 +_020DEED8: + ldr r0, _020DEF70 ; =0x021D3498 + ldr r1, _020DEF74 ; =0x021D7088 + ldr r0, [r0, #0x4] + ldr r1, [r1, r6, lsl #0x2] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020DEF08 + ldr r1, _020DEF78 ; =0x021D70AC + ldr r0, [r1, r6, lsl #0x2] + add r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + b _020DEF30 +_020DEF08: + add r0, r5, r4 + bl OS_LockMutex + ldr r0, _020DEF70 ; =0x021D3498 + ldr r2, _020DEF74 ; =0x021D7088 + ldr r1, [r0, #0x4] + ldr r0, _020DEF78 ; =0x021D70AC + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] +_020DEF30: + mov r0, r7 + bl _ftell + ldr r1, _020DEF78 ; =0x021D70AC + mov r7, r0 + ldr r0, [r1, r6, lsl #0x2] + subs r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + bne _020DEF58 + add r0, r5, r4 + bl OS_UnlockMutex +_020DEF58: + mov r0, r7 + ldmia sp!, {r3-r7,pc} + .balign 4 +_020DEF60: .word 0x02106A58 +_020DEF64: .word 0x02106AA4 +_020DEF68: .word 0x02106AF0 +_020DEF6C: .word 0x021D70D0 +_020DEF70: .word 0x021D3498 +_020DEF74: .word 0x021D7088 +_020DEF78: .word 0x021D70AC + + arm_func_start _fseek +_fseek: ; 0x020DEF7C + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r5,lr} + mov r5, r0 + ldr r1, [r5, #0x4] + mov r4, r2 + mov r1, r1, lsl #0x16 + mov r1, r1, lsr #0x1d + and r1, r1, #0xff + cmp r1, #0x1 + ldreqb r1, [r5, #0xd] + cmpeq r1, #0x0 + beq _020DEFC8 + ldr r0, _020DF160 ; =0x021D74A8 + mov r1, #0x28 + str r1, [r0, #0x0] + sub r0, r1, #0x29 + ldmia sp!, {r3-r5,lr} + add sp, sp, #0x10 + bx lr +_020DEFC8: + ldr r1, [r5, #0x8] + mov r1, r1, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #0x1 + bne _020DF018 + mov r1, #0x0 + bl __flush_buffer +_020DEFE4: ; 0x020DEFE4 + cmp r0, #0x0 + beq _020DF018 + mov r0, #0x1 + strb r0, [r5, #0xd] + mov r2, #0x0 + ldr r0, _020DF160 ; =0x021D74A8 + mov r1, #0x28 + str r2, [r5, #0x28] + str r1, [r0, #0x0] + sub r0, r1, #0x29 + ldmia sp!, {r3-r5,lr} + add sp, sp, #0x10 + bx lr +_020DF018: + cmp r4, #0x1 + bne _020DF038 + mov r0, r5 + mov r4, #0x0 + bl _ftell + ldr r1, [sp, #0x14] + add r0, r1, r0 + str r0, [sp, #0x14] +_020DF038: + cmp r4, #0x2 + beq _020DF0CC + ldr r0, [r5, #0x4] + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + cmp r0, #0x3 + beq _020DF0CC + ldr r0, [r5, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + sub r0, r0, #0x2 + cmp r0, #0x1 + bhi _020DF0CC + ldr r2, [sp, #0x14] + ldr r0, [r5, #0x18] + cmp r2, r0 + bhs _020DF088 + ldr r0, [r5, #0x34] + cmp r2, r0 + bhs _020DF098 +_020DF088: + ldr r0, [r5, #0x8] + bic r0, r0, #0x7 + str r0, [r5, #0x8] + b _020DF0D8 +_020DF098: + ldr r1, [r5, #0x1c] + sub r0, r2, r0 + add r0, r1, r0 + str r0, [r5, #0x24] + ldr r1, [r5, #0x18] + ldr r0, [sp, #0x14] + sub r0, r1, r0 + str r0, [r5, #0x28] + ldr r0, [r5, #0x8] + bic r0, r0, #0x7 + orr r0, r0, #0x2 + str r0, [r5, #0x8] + b _020DF0D8 +_020DF0CC: + ldr r0, [r5, #0x8] + bic r0, r0, #0x7 + str r0, [r5, #0x8] +_020DF0D8: + ldr r0, [r5, #0x8] + mov r0, r0, lsl #0x1d + movs r0, r0, lsr #0x1d + bne _020DF150 + ldr r12, [r5, #0x38] + cmp r12, #0x0 + beq _020DF13C + ldr r0, [r5, #0x0] + ldr r3, [r5, #0x48] + add r1, sp, #0x14 + mov r2, r4 + blx r12 + cmp r0, #0x0 + beq _020DF13C + mov r0, #0x1 + strb r0, [r5, #0xd] + mov r2, #0x0 + ldr r0, _020DF160 ; =0x021D74A8 + mov r1, #0x28 + str r2, [r5, #0x28] + str r1, [r0, #0x0] + sub r0, r1, #0x29 + ldmia sp!, {r3-r5,lr} + add sp, sp, #0x10 + bx lr +_020DF13C: + mov r1, #0x0 + strb r1, [r5, #0xc] + ldr r0, [sp, #0x14] + str r0, [r5, #0x18] + str r1, [r5, #0x28] +_020DF150: + mov r0, #0x0 + ldmia sp!, {r3-r5,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020DF160: .word 0x021D74A8 + +arm_func_start fseek +fseek: + stmdb sp!, {r3-r9,lr} + ldr r3, _020DF274 ; =0x02106A58 + mov r9, r0 + cmp r9, r3 + mov r8, r1 + mov r7, r2 + moveq r6, #0x2 + beq _020DF1A4 + ldr r0, _020DF278 ; =0x02106AA4 + cmp r9, r0 + moveq r6, #0x3 + beq _020DF1A4 + ldr r0, _020DF27C ; =0x02106AF0 + cmp r9, r0 + moveq r6, #0x4 + movne r6, #0x5 +_020DF1A4: + mov r0, #0x18 + mul r4, r6, r0 + ldr r5, _020DF280 ; =0x021D70D0 + add r0, r5, r4 + bl OS_TryLockMutex +_020DF1B8: ; 0x020DF1B8 + cmp r0, #0x0 + bne _020DF1E4 + ldr r0, _020DF284 ; =0x021D3498 + ldr r2, _020DF288 ; =0x021D7088 + ldr r1, [r0, #0x4] + ldr r0, _020DF28C ; =0x021D70AC + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] + b _020DF23C +_020DF1E4: + ldr r0, _020DF284 ; =0x021D3498 + ldr r1, _020DF288 ; =0x021D7088 + ldr r0, [r0, #0x4] + ldr r1, [r1, r6, lsl #0x2] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020DF214 + ldr r1, _020DF28C ; =0x021D70AC + ldr r0, [r1, r6, lsl #0x2] + add r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + b _020DF23C +_020DF214: + add r0, r5, r4 + bl OS_LockMutex + ldr r0, _020DF284 ; =0x021D3498 + ldr r2, _020DF288 ; =0x021D7088 + ldr r1, [r0, #0x4] + ldr r0, _020DF28C ; =0x021D70AC + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] +_020DF23C: + mov r0, r9 + mov r1, r8 + mov r2, r7 + bl _fseek + ldr r1, _020DF28C ; =0x021D70AC + mov r7, r0 + ldr r0, [r1, r6, lsl #0x2] + subs r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + bne _020DF26C + add r0, r5, r4 + bl OS_UnlockMutex +_020DF26C: + mov r0, r7 + ldmia sp!, {r3-r9,pc} + .balign 4 +_020DF274: .word 0x02106A58 +_020DF278: .word 0x02106AA4 +_020DF27C: .word 0x02106AF0 +_020DF280: .word 0x021D70D0 +_020DF284: .word 0x021D3498 +_020DF288: .word 0x021D7088 +_020DF28C: .word 0x021D70AC + + arm_func_start rewind +rewind: ; 0x020DF290 + stmdb sp!, {r4,lr} + mov r1, #0x0 + mov r4, r0 + mov r2, r1 + strb r1, [r4, #0xd] + bl fseek +_020DF2A8: ; 0x020DF2A8 + mov r0, #0x0 + strb r0, [r4, #0xd] + ldmia sp!, {r4,pc} + +arm_func_start mbtowc +mbtowc: + stmdb sp!, {r3,lr} + ldr r3, _020DF2CC ; =0x02106C98 + ldr r3, [r3, #0x8] + ldr r3, [r3, #0x0] + blx r3 + ldmia sp!, {r3,pc} + .balign 4 +_020DF2CC: .word 0x02106C98 + + arm_func_start __mbtowc_noconv +__mbtowc_noconv: ; 0x020DF2D0 + cmp r1, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r2, #0x0 + mvneq r0, #0x0 + bxeq lr + cmp r0, #0x0 + ldrneb r2, [r1, #0x0] + strneh r2, [r0, #0x0] + ldrsb r0, [r1, #0x0] + cmp r0, #0x0 + moveq r0, #0x0 + movne r0, #0x1 + bx lr + + arm_func_start __wctomb_noconv +__wctomb_noconv: ; 0x020DF308 + cmp r0, #0x0 + moveq r0, #0x0 + strneb r1, [r0, #0x0] + movne r0, #0x1 + bx lr + + arm_func_start wctomb +wctomb: ; 0x020DF31C + stmdb sp!, {r3,lr} + ldr r2, _020DF334 ; =0x02106C98 + ldr r2, [r2, #0x8] + ldr r2, [r2, #0x4] + blx r2 + ldmia sp!, {r3,pc} + .balign 4 +_020DF334: .word 0x02106C98 + + arm_func_start mbstowcs +mbstowcs: ; 0x020DF338 + stmdb sp!, {r4-r8,lr} + mov r7, r1 + mov r8, r0 + mov r0, r7 + mov r6, r2 + bl strlen + mov r5, r0 + cmp r8, #0x0 + mov r4, #0x0 + beq _020DF3B8 + cmp r6, #0x0 + bls _020DF3B8 +_020DF368: + ldrsb r0, [r7, #0x0] + cmp r0, #0x0 + beq _020DF3A0 + mov r0, r8 + mov r1, r7 + mov r2, r5 + bl mbtowc +_020DF384: ; 0x020DF384 + cmp r0, #0x0 + add r8, r8, #0x2 + addgt r7, r7, r0 + subgt r5, r5, r0 + bgt _020DF3AC + mvn r0, #0x0 + ldmia sp!, {r4-r8,pc} +_020DF3A0: + mov r0, #0x0 + strh r0, [r8, #0x0] + b _020DF3B8 +_020DF3AC: + add r4, r4, #0x1 + cmp r4, r6 + blo _020DF368 +_020DF3B8: + mov r0, r4 + ldmia sp!, {r4-r8,pc} + +arm_func_start wcstombs +wcstombs: + stmdb sp!, {r3-r9,lr} + movs r4, r0 + mov r9, r1 + cmpne r9, #0x0 + mov r8, r2 + mov r7, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r3-r9,pc} +_020DF3E0: ; 0x020DF3E0 + add r6, sp, #0x0 +_020DF3E4: + ldrh r1, [r9, #0x0] + cmp r1, #0x0 + moveq r0, #0x0 + streqb r0, [r4, r7] + beq _020DF430 + mov r0, r6 + add r9, r9, #0x2 + bl wctomb + mov r5, r0 + add r0, r7, r5 + cmp r0, r8 + bhi _020DF430 + mov r1, r6 + mov r2, r5 + add r0, r4, r7 + bl strncpy + add r7, r7, r5 + cmp r7, r8 + bls _020DF3E4 +_020DF430: + mov r0, r7 + ldmia sp!, {r3-r9,pc} + + arm_func_start memcpy +memcpy: ; 0x020DF438 + mov r12, r0 + cmp r2, #0x0 + bxeq lr +_020DF444: + ldrsb r3, [r1], #0x1 + subs r2, r2, #0x1 + strb r3, [r12], #0x1 + bne _020DF444 + bx lr + + arm_func_start memmove +memmove: ; 0x020DF458 + cmp r1, r0 + blo _020DF480 + mov r12, r0 + cmp r2, #0x0 + bxeq lr +_020DF46C: + ldrsb r3, [r1], #0x1 + subs r2, r2, #0x1 + strb r3, [r12], #0x1 + bne _020DF46C + bx lr +_020DF480: + cmp r2, #0x0 + add r3, r1, r2 + add r12, r0, r2 + bxeq lr +_020DF490: + ldrsb r1, [r3, #-0x1]! + subs r2, r2, #0x1 + strb r1, [r12, #-0x1]! + bne _020DF490 + bx lr + + arm_func_start Call_FillMemWithValue +Call_FillMemWithValue: ; 0x020DF4A4 + stmdb sp!, {r4,lr} + mov r4, r0 + bl __fill_mem + mov r0, r4 + ldmia sp!, {r4,pc} + +arm_func_start memchr +memchr: + cmp r2, #0x0 + and r3, r1, #0xff + beq _020DF4DC +_020DF4C4: + ldrb r1, [r0], #0x1 + cmp r1, r3 + subeq r0, r0, #0x1 + bxeq lr + subs r2, r2, #0x1 + bne _020DF4C4 +_020DF4DC: + mov r0, #0x0 + bx lr + + arm_func_start __memrchr +__memrchr: ; 0x020DF4E4 + cmp r2, #0x0 + and r3, r1, #0xff + add r0, r0, r2 + beq _020DF508 +_020DF4F4: + ldrb r1, [r0, #-0x1]! + cmp r1, r3 + bxeq lr + subs r2, r2, #0x1 + bne _020DF4F4 +_020DF508: + mov r0, #0x0 + bx lr + + arm_func_start memcmp +memcmp: ; 0x020DF510 + cmp r2, #0x0 + beq _020DF548 +_020DF518: + ldrb r12, [r0], #0x1 + ldrb r3, [r1], #0x1 + cmp r12, r3 + beq _020DF540 + ldrb r2, [r0, #-0x1] + ldrb r0, [r1, #-0x1] + cmp r2, r0 + mvncc r0, #0x0 + movcs r0, #0x1 + bx lr +_020DF540: + subs r2, r2, #0x1 + bne _020DF518 +_020DF548: + mov r0, #0x0 + bx lr + + arm_func_start __fill_mem +__fill_mem: ; 0x020DF550 + cmp r2, #0x20 + and r3, r1, #0xff + blo _020DF5E4 + rsb r1, r0, #0x0 + ands r12, r1, #0x3 + beq _020DF57C + sub r2, r2, r12 + and r1, r3, #0xff +_020DF570: + strb r1, [r0], #0x1 + subs r12, r12, #0x1 + bne _020DF570 +_020DF57C: + cmp r3, #0x0 + beq _020DF594 + mov r1, r3, lsl #0x10 + orr r1, r1, r3, lsl #0x18 + orr r1, r1, r3, lsl #0x8 + orr r3, r3, r1 +_020DF594: + movs r1, r2, lsr #0x5 + beq _020DF5C8 +_020DF59C: + str r3, [r0, #0x0] + str r3, [r0, #0x4] + str r3, [r0, #0x8] + str r3, [r0, #0xc] + str r3, [r0, #0x10] + str r3, [r0, #0x14] + str r3, [r0, #0x18] + str r3, [r0, #0x1c] + add r0, r0, #0x20 + subs r1, r1, #0x1 + bne _020DF59C +_020DF5C8: + and r1, r2, #0x1f + movs r1, r1, lsr #0x2 + beq _020DF5E0 +_020DF5D4: + str r3, [r0], #0x4 + subs r1, r1, #0x1 + bne _020DF5D4 +_020DF5E0: + and r2, r2, #0x3 +_020DF5E4: + cmp r2, #0x0 + bxeq lr + and r1, r3, #0xff +_020DF5F0: + strb r1, [r0], #0x1 + subs r2, r2, #0x1 + bne _020DF5F0 + bx lr + + arm_func_start parse_format_printf +parse_format_printf: ; 0x020DF600 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + ldrsb r3, [r0, #0x1] + mov r4, #0x0 + mov r5, #0x1 + mov lr, r2 + strb r5, [sp, #0x0] + strb r4, [sp, #0x1] + strb r4, [sp, #0x2] + strb r4, [sp, #0x3] + strb r4, [sp, #0x4] + str r4, [sp, #0x8] + str r4, [sp, #0xc] + cmp r3, #0x25 + add r12, r0, #0x1 + bne _020DF65C + add r0, sp, #0x0 + strb r3, [sp, #0x5] + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add sp, sp, #0x10 + add r0, r12, #0x1 + ldmia sp!, {r4-r8,pc} +_020DF65C: + mov r2, #0x2 + mov r0, r4 + mov r5, r2 + mov r6, r4 + mov r7, #0x1 +_020DF670: + mov r8, r7 + cmp r3, #0x2b + bgt _020DF6A0 + bge _020DF6C8 + cmp r3, #0x23 + bgt _020DF6F8 + cmp r3, #0x20 + blt _020DF6F8 + beq _020DF6D0 + cmp r3, #0x23 + beq _020DF6E0 + b _020DF6F8 +_020DF6A0: + cmp r3, #0x30 + bgt _020DF6F8 + cmp r3, #0x2d + blt _020DF6F8 + beq _020DF6C0 + cmp r3, #0x30 + beq _020DF6E8 + b _020DF6F8 +_020DF6C0: + strb r6, [sp, #0x0] + b _020DF6FC +_020DF6C8: + strb r7, [sp, #0x1] + b _020DF6FC +_020DF6D0: + ldrb r4, [sp, #0x1] + cmp r4, #0x1 + strneb r5, [sp, #0x1] + b _020DF6FC +_020DF6E0: + strb r7, [sp, #0x3] + b _020DF6FC +_020DF6E8: + ldrb r4, [sp, #0x0] + cmp r4, #0x0 + strneb r2, [sp, #0x0] + b _020DF6FC +_020DF6F8: + mov r8, r0 +_020DF6FC: + cmp r8, #0x0 + ldrnesb r3, [r12, #0x1]! + bne _020DF670 + cmp r3, #0x2a + bne _020DF744 + ldr r0, [r1, #0x0] + add r0, r0, #0x4 + str r0, [r1, #0x0] + ldr r0, [r0, #-0x4] + str r0, [sp, #0x8] + cmp r0, #0x0 + bge _020DF73C + rsb r0, r0, #0x0 + mov r2, #0x0 + strb r2, [sp, #0x0] + str r0, [sp, #0x8] +_020DF73C: + ldrsb r3, [r12, #0x1]! + b _020DF794 +_020DF744: + ldr r4, _020DFB88 ; =0x0210430C + mov r5, #0x0 + mov r0, #0xa + b _020DF768 +_020DF754: + ldr r2, [sp, #0x8] + sub r3, r3, #0x30 + mla r6, r2, r0, r3 + ldrsb r3, [r12, #0x1]! + str r6, [sp, #0x8] +_020DF768: + cmp r3, #0x0 + blt _020DF778 + cmp r3, #0x80 + blt _020DF780 +_020DF778: + mov r2, r5 + b _020DF78C +_020DF780: + mov r2, r3, lsl #0x1 + ldrh r2, [r4, r2] + and r2, r2, #0x8 +_020DF78C: + cmp r2, #0x0 + bne _020DF754 +_020DF794: + ldr r2, [sp, #0x8] + ldr r0, _020DFB8C ; =0x000001FD + cmp r2, r0 + ble _020DF7C4 + mov r1, #0xff + add r0, sp, #0x0 + strb r1, [sp, #0x5] + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add sp, sp, #0x10 + add r0, r12, #0x1 + ldmia sp!, {r4-r8,pc} +_020DF7C4: + cmp r3, #0x2e + bne _020DF858 + ldrsb r3, [r12, #0x1]! + mov r0, #0x1 + strb r0, [sp, #0x2] + cmp r3, #0x2a + bne _020DF808 + ldr r0, [r1, #0x0] + add r0, r0, #0x4 + str r0, [r1, #0x0] + ldr r0, [r0, #-0x4] + ldrsb r3, [r12, #0x1]! + str r0, [sp, #0xc] + cmp r0, #0x0 + movlt r0, #0x0 + strltb r0, [sp, #0x2] + b _020DF858 +_020DF808: + ldr r2, _020DFB88 ; =0x0210430C + mov r4, #0x0 + mov r0, #0xa + b _020DF82C +_020DF818: + ldr r1, [sp, #0xc] + sub r3, r3, #0x30 + mla r5, r1, r0, r3 + ldrsb r3, [r12, #0x1]! + str r5, [sp, #0xc] +_020DF82C: + cmp r3, #0x0 + blt _020DF83C + cmp r3, #0x80 + blt _020DF844 +_020DF83C: + mov r1, r4 + b _020DF850 +_020DF844: + mov r1, r3, lsl #0x1 + ldrh r1, [r2, r1] + and r1, r1, #0x8 +_020DF850: + cmp r1, #0x0 + bne _020DF818 +_020DF858: + cmp r3, #0x6c + mov r0, #0x1 + bgt _020DF890 + cmp r3, #0x68 + blt _020DF884 + beq _020DF8AC + cmp r3, #0x6a + beq _020DF8F8 + cmp r3, #0x6c + beq _020DF8C8 + b _020DF91C +_020DF884: + cmp r3, #0x4c + beq _020DF8EC + b _020DF91C +_020DF890: + cmp r3, #0x74 + bgt _020DF8A0 + beq _020DF904 + b _020DF91C +_020DF8A0: + cmp r3, #0x7a + beq _020DF910 + b _020DF91C +_020DF8AC: + ldrsb r1, [r12, #0x1] + mov r2, #0x2 + strb r2, [sp, #0x4] + cmp r1, #0x68 + streqb r0, [sp, #0x4] + ldreqsb r3, [r12, #0x1]! + b _020DF920 +_020DF8C8: + ldrsb r1, [r12, #0x1] + mov r2, #0x3 + strb r2, [sp, #0x4] + cmp r1, #0x6c + bne _020DF920 + mov r1, #0x4 + strb r1, [sp, #0x4] + ldrsb r3, [r12, #0x1]! + b _020DF920 +_020DF8EC: + mov r1, #0x9 + strb r1, [sp, #0x4] + b _020DF920 +_020DF8F8: + mov r1, #0x6 + strb r1, [sp, #0x4] + b _020DF920 +_020DF904: + mov r1, #0x8 + strb r1, [sp, #0x4] + b _020DF920 +_020DF910: + mov r1, #0x7 + strb r1, [sp, #0x4] + b _020DF920 +_020DF91C: + mov r0, #0x0 +_020DF920: + cmp r0, #0x0 + ldrnesb r3, [r12, #0x1]! + strb r3, [sp, #0x5] + cmp r3, #0x61 + bgt _020DF974 + bge _020DFA5C + cmp r3, #0x47 + bgt _020DF968 + subs r0, r3, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020DFB68 +_020DF94C: ; 0x020DF94C + b _020DFA5C +_020DF950: ; 0x020DF950 + b _020DFB68 +_020DF954: ; 0x020DF954 + b _020DFB68 +_020DF958: ; 0x020DF958 + b _020DFB68 +_020DF95C: ; 0x020DF95C + b _020DFAA4 +_020DF960: ; 0x020DF960 + b _020DFA24 +_020DF964: ; 0x020DF964 + b _020DFA94 +_020DF968: + cmp r3, #0x58 + beq _020DF9E8 + b _020DFB68 +_020DF974: + cmp r3, #0x63 + bgt _020DF984 + beq _020DFB04 + b _020DFB68 +_020DF984: + sub r0, r3, #0x64 + cmp r0, #0x14 + addls pc, pc, r0, lsl #0x2 + b _020DFB68 +_020DF994: + b _020DF9E8 +_020DF998: + b _020DFAA4 +_020DF99C: + b _020DFA24 +_020DF9A0: + b _020DFA94 +_020DF9A4: + b _020DFB68 +_020DF9A8: + b _020DF9E8 +_020DF9AC: + b _020DFB68 +_020DF9B0: + b _020DFB68 +_020DF9B4: + b _020DFB68 +_020DF9B8: + b _020DFB68 +_020DF9BC: + b _020DFB54 +_020DF9C0: + b _020DF9E8 +_020DF9C4: + b _020DFAE0 +_020DF9C8: + b _020DFB68 +_020DF9CC: + b _020DFB68 +_020DF9D0: + b _020DFB30 +_020DF9D4: + b _020DFB68 +_020DF9D8: + b _020DF9E8 +_020DF9DC: + b _020DFB68 +_020DF9E0: + b _020DFB68 +_020DF9E4: + b _020DF9E8 +_020DF9E8: + ldrb r0, [sp, #0x4] + cmp r0, #0x9 + moveq r0, #0xff + streqb r0, [sp, #0x5] + beq _020DFB70 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0xc] + beq _020DFB70 + ldrb r0, [sp, #0x0] + cmp r0, #0x2 + moveq r0, #0x1 + streqb r0, [sp, #0x0] + b _020DFB70 +_020DFA24: + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + moveq r0, #0xff + streqb r0, [sp, #0x5] + beq _020DFB70 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x6 + streq r0, [sp, #0xc] + b _020DFB70 +_020DFA5C: + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0xd + streq r0, [sp, #0xc] + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + cmpne r0, #0x1 + moveq r0, #0xff + streqb r0, [sp, #0x5] + b _020DFB70 +_020DFA94: + ldr r0, [sp, #0xc] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0xc] +_020DFAA4: + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + cmpne r0, #0x1 + moveq r0, #0xff + streqb r0, [sp, #0x5] + beq _020DFB70 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x6 + streq r0, [sp, #0xc] + b _020DFB70 +_020DFAE0: + mov r3, #0x78 + mov r2, #0x1 + mov r1, #0x3 + mov r0, #0x8 + strb r3, [sp, #0x5] + strb r2, [sp, #0x3] + strb r1, [sp, #0x4] + str r0, [sp, #0xc] + b _020DFB70 +_020DFB04: + ldrb r1, [sp, #0x4] + cmp r1, #0x3 + moveq r0, #0x5 + streqb r0, [sp, #0x4] + beq _020DFB70 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + cmpeq r1, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x5] + b _020DFB70 +_020DFB30: + ldrb r0, [sp, #0x4] + cmp r0, #0x3 + moveq r0, #0x5 + streqb r0, [sp, #0x4] + beq _020DFB70 + cmp r0, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x5] + b _020DFB70 +_020DFB54: + ldrb r0, [sp, #0x4] + cmp r0, #0x9 + moveq r0, #0xff + streqb r0, [sp, #0x5] + b _020DFB70 +_020DFB68: + mov r0, #0xff + strb r0, [sp, #0x5] +_020DFB70: + add r0, sp, #0x0 + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add r0, r12, #0x1 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020DFB88: .word 0x0210430C +_020DFB8C: .word 0x000001FD + + arm_func_start long2str +long2str: ; 0x020DFB90 + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x10 + movs r10, r0 + mov r0, #0x0 + mov r5, r1 + str r0, [sp, #0xc] + ldr r7, [sp, #0x4c] + mov r6, r0 + strb r0, [r5, #-0x1]! + ldrb r0, [sp, #0x43] + str r1, [sp, #0x0] + ldrb r8, [sp, #0x45] + str r0, [sp, #0x4] + ldr r0, [sp, #0x48] + ldrb r11, [sp, #0x41] + str r0, [sp, #0x8] + cmpeq r7, #0x0 + bne _020DFC04 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020DFBF0 + cmp r8, #0x6f + beq _020DFC04 +_020DFBF0: + add sp, sp, #0x10 + mov r0, r5 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020DFC04: + cmp r8, #0x69 + bgt _020DFC2C + bge _020DFC60 + cmp r8, #0x58 + bgt _020DFC20 + beq _020DFC8C + b _020DFC94 +_020DFC20: + cmp r8, #0x64 + beq _020DFC60 + b _020DFC94 +_020DFC2C: + cmp r8, #0x6f + bgt _020DFC40 + moveq r4, #0x8 + moveq r11, #0x0 + b _020DFC94 +_020DFC40: + cmp r8, #0x78 + bgt _020DFC94 + cmp r8, #0x75 + blt _020DFC94 + beq _020DFC80 + cmp r8, #0x78 + beq _020DFC8C + b _020DFC94 +_020DFC60: + cmp r10, #0x0 + mov r4, #0xa + bge _020DFC94 + mov r0, #0x1 + cmp r10, #0x80000000 + rsbne r10, r10, #0x0 + str r0, [sp, #0xc] + b _020DFC94 +_020DFC80: + mov r4, #0xa + mov r11, #0x0 + b _020DFC94 +_020DFC8C: + mov r4, #0x10 + mov r11, #0x0 +_020DFC94: + mov r0, r10 + mov r1, r4 + bl _u32_div_f + mov r9, r1 + mov r0, r10 + mov r1, r4 + bl _u32_div_f + cmp r9, #0xa + mov r10, r0 + addlt r9, r9, #0x30 + blt _020DFCCC + cmp r8, #0x78 + addeq r9, r9, #0x57 + addne r9, r9, #0x37 +_020DFCCC: + cmp r10, #0x0 + strb r9, [r5, #-0x1]! + add r6, r6, #0x1 + bne _020DFC94 + cmp r4, #0x8 + bne _020DFD00 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrnesb r0, [r5, #0x0] + cmpne r0, #0x30 + movne r0, #0x30 + strneb r0, [r5, #-0x1]! + addne r6, r6, #0x1 +_020DFD00: + ldrb r0, [sp, #0x40] + cmp r0, #0x2 + bne _020DFD34 + ldr r0, [sp, #0xc] + ldr r7, [sp, #0x8] + cmp r0, #0x0 + cmpeq r11, #0x0 + subne r7, r7, #0x1 + cmp r4, #0x10 + bne _020DFD34 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + subne r7, r7, #0x2 +_020DFD34: + ldr r0, [sp, #0x0] + sub r1, r0, r5 + ldr r0, _020DFDD8 ; =0x000001FD + add r1, r7, r1 + cmp r1, r0 + addgt sp, sp, #0x10 + movgt r0, #0x0 + ldmgtia sp!, {r3-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + cmp r6, r7 + bge _020DFD78 + mov r0, #0x30 +_020DFD68: + add r6, r6, #0x1 + cmp r6, r7 + strb r0, [r5, #-0x1]! + blt _020DFD68 +_020DFD78: + cmp r4, #0x10 + bne _020DFD94 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x30 + strneb r8, [r5, #-0x1] + strneb r0, [r5, #-0x2]! +_020DFD94: + ldr r0, [sp, #0xc] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r5, #-0x1]! + bne _020DFDC4 + cmp r11, #0x1 + moveq r0, #0x2b + streqb r0, [r5, #-0x1]! + beq _020DFDC4 + cmp r11, #0x2 + moveq r0, #0x20 + streqb r0, [r5, #-0x1]! +_020DFDC4: + mov r0, r5 + add sp, sp, #0x10 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020DFDD8: .word 0x000001FD + + arm_func_start longlong2str +longlong2str: ; 0x020DFDDC + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x18 + mov r9, r1 + mov r1, #0x0 + mov r10, r0 + mov r6, r2 + mov r0, r1 + strb r0, [r6, #-0x1]! + ldr r0, [sp, #0x58] + cmp r9, #0x0 + str r0, [sp, #0x10] + ldrb r0, [sp, #0x4f] + cmpeq r10, #0x0 + str r2, [sp, #0x0] + str r0, [sp, #0x4] + ldr r0, [sp, #0x54] + str r1, [sp, #0x14] + str r0, [sp, #0x8] + ldrb r0, [sp, #0x4d] + mov r7, r1 + ldrb r8, [sp, #0x51] + str r0, [sp, #0xc] + ldreq r0, [sp, #0x10] + cmpeq r0, #0x0 + bne _020DFE6C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020DFE58 + cmp r8, #0x6f + beq _020DFE6C +_020DFE58: + add sp, sp, #0x18 + mov r0, r6 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020DFE6C: + cmp r8, #0x69 + bgt _020DFE94 + bge _020DFEC4 + cmp r8, #0x58 + bgt _020DFE88 + beq _020DFF18 + b _020DFF24 +_020DFE88: + cmp r8, #0x64 + beq _020DFEC4 + b _020DFF24 +_020DFE94: + cmp r8, #0x6f + bgt _020DFEA4 + beq _020DFEF8 + b _020DFF24 +_020DFEA4: + cmp r8, #0x78 + bgt _020DFF24 + cmp r8, #0x75 + blt _020DFF24 + beq _020DFF08 + cmp r8, #0x78 + beq _020DFF18 + b _020DFF24 +_020DFEC4: + subs r0, r10, #0x0 + sbcs r0, r9, #0x0 + mov r11, #0xa + mov r5, #0x0 + bge _020DFF24 + cmp r9, #0x80000000 + cmpeq r10, r5 + beq _020DFEEC + rsbs r10, r10, #0x0 + rsc r9, r9, #0x0 +_020DFEEC: + mov r0, #0x1 + str r0, [sp, #0x14] + b _020DFF24 +_020DFEF8: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0x8 + b _020DFF24 +_020DFF08: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0xa + b _020DFF24 +_020DFF18: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0x10 +_020DFF24: + mov r0, r10 + mov r1, r9 + mov r2, r11 + mov r3, r5 + bl _ull_mod + mov r4, r0 + mov r0, r10 + mov r1, r9 + mov r2, r11 + mov r3, r5 + bl _ll_udiv + mov r10, r0 + cmp r4, #0xa + mov r9, r1 + addlt r0, r4, #0x30 + blt _020DFF70 + cmp r8, #0x78 + addeq r0, r4, #0x57 + addne r0, r4, #0x37 +_020DFF70: + strb r0, [r6, #-0x1]! + mov r0, #0x0 + cmp r9, r0 + cmpeq r10, r0 + add r7, r7, #0x1 + bne _020DFF24 + cmp r5, #0x0 + cmpeq r11, #0x8 + bne _020DFFB0 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrnesb r0, [r6, #0x0] + cmpne r0, #0x30 + movne r0, #0x30 + strneb r0, [r6, #-0x1]! + addne r7, r7, #0x1 +_020DFFB0: + ldrb r0, [sp, #0x4c] + cmp r0, #0x2 + bne _020E0000 + ldr r0, [sp, #0x8] + str r0, [sp, #0x10] + ldr r0, [sp, #0x14] + cmp r0, #0x0 + ldreq r0, [sp, #0xc] + cmpeq r0, #0x0 + ldrne r0, [sp, #0x10] + subne r0, r0, #0x1 + strne r0, [sp, #0x10] + cmp r5, #0x0 + cmpeq r11, #0x10 + bne _020E0000 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrne r0, [sp, #0x10] + subne r0, r0, #0x2 + strne r0, [sp, #0x10] +_020E0000: + ldr r0, [sp, #0x0] + ldr r1, _020E00B8 ; =0x000001FD + sub r2, r0, r6 + ldr r0, [sp, #0x10] + add r0, r0, r2 + cmp r0, r1 + addgt sp, sp, #0x18 + movgt r0, #0x0 + ldmgtia sp!, {r3-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + ldr r0, [sp, #0x10] + cmp r7, r0 + bge _020E0050 + mov r1, #0x30 +_020E003C: + ldr r0, [sp, #0x10] + add r7, r7, #0x1 + cmp r7, r0 + strb r1, [r6, #-0x1]! + blt _020E003C +_020E0050: + cmp r5, #0x0 + cmpeq r11, #0x10 + bne _020E0070 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x30 + strneb r8, [r6, #-0x1] + strneb r0, [r6, #-0x2]! +_020E0070: + ldr r0, [sp, #0x14] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r6, #-0x1]! + bne _020E00A4 + ldr r0, [sp, #0xc] + cmp r0, #0x1 + moveq r0, #0x2b + streqb r0, [r6, #-0x1]! + beq _020E00A4 + cmp r0, #0x2 + moveq r0, #0x20 + streqb r0, [r6, #-0x1]! +_020E00A4: + mov r0, r6 + add sp, sp, #0x18 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E00B8: .word 0x000001FD + + arm_func_start double2hex +double2hex: ; 0x020E00BC + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r10,lr} + sub sp, sp, #0x44 + ldr r7, [sp, #0x80] + ldr r0, _020E056C ; =0x000001FD + mov r8, r2 + cmp r7, r0 + ldrb r6, [sp, #0x79] + ldrb r5, [sp, #0x77] + ldrb r4, [sp, #0x75] + ldr r1, [sp, #0x68] + ldr r2, [sp, #0x6c] + addgt sp, sp, #0x44 + movgt r0, #0x0 + ldmgtia sp!, {r3-r10,lr} + addgt sp, sp, #0x10 + bxgt lr + mov r10, #0x0 + mov r9, #0x20 + add r0, sp, #0x8 + add r3, sp, #0xc + strb r10, [sp, #0x8] + strh r9, [sp, #0xa] + bl __num2dec_internal2 + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x6c] + bl fabs + mov r2, r0 + mov r0, r10 + mov r3, r1 + mov r1, r0 + bl _deq + bne _020E0188 + ldr r3, _020E0570 ; =0x02106DA0 + sub r0, r8, #0x6 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + add sp, sp, #0x44 + strb r2, [r8, #-0x6] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r2, [r3, #0x4] + ldrb r1, [r3, #0x5] + strb r2, [r0, #0x4] + strb r1, [r0, #0x5] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0188: + ldrb r0, [sp, #0x11] + cmp r0, #0x49 + bne _020E0298 + ldrsb r0, [sp, #0xc] + cmp r0, #0x0 + beq _020E0224 + cmp r6, #0x41 + sub r0, r8, #0x5 + bne _020E01E8 + ldr r3, _020E0574 ; =0x02106DA8 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E01E8: + ldr r3, _020E0578 ; =0x02106DB0 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0224: + cmp r6, #0x41 + sub r0, r8, #0x4 + bne _020E0264 + ldr r3, _020E057C ; =0x02106DB8 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0264: + ldr r3, _020E0580 ; =0x02106DBC + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0298: + cmp r0, #0x4e + bne _020E03A4 + ldrsb r0, [sp, #0xc] + cmp r0, #0x0 + beq _020E0330 + cmp r6, #0x41 + sub r0, r8, #0x5 + bne _020E02F4 + ldr r3, _020E0584 ; =0x02106DC0 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E02F4: + ldr r3, _020E0588 ; =0x02106DC8 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0330: + cmp r6, #0x41 + sub r0, r8, #0x4 + bne _020E0370 + ldr r3, _020E058C ; =0x02106DD0 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0370: + ldr r3, _020E0590 ; =0x02106DD4 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E03A4: + mov r3, r10 + mov r1, #0x1 + mov r0, #0x64 + add r9, sp, #0x68 + strb r1, [sp, #0x34] + strb r1, [sp, #0x35] + strb r3, [sp, #0x36] + strb r3, [sp, #0x37] + strb r3, [sp, #0x38] + str r3, [sp, #0x3c] + str r1, [sp, #0x40] + strb r0, [sp, #0x39] +_020E03D4: + rsb r1, r3, #0x7 + ldrsb r2, [r9, r3] + ldrsb r0, [r9, r1] + strb r0, [r9, r3] + add r3, r3, #0x1 + strb r2, [r9, r1] + cmp r3, #0x4 + blt _020E03D4 + ldrb r0, [sp, #0x69] + ldrb r1, [sp, #0x68] + ldr sb, _020E0594 ; =0x000007FF + mov r0, r0, lsl #0x11 + orr r1, r0, r1, lsl #0x19 + add r0, sp, #0x34 + and lr, r9, r1, lsr #0x15 + sub r12, sp, #0x8 + ldmia r0, {r0-r3} + stmia r12, {r0-r3} + rsb r0, r9, #0x400 + mov r1, r8 + add r0, lr, r0 + ldmia r12, {r2-r3} + bl long2str + cmp r6, #0x61 + moveq r1, #0x70 + movne r1, #0x50 + strb r1, [r0, #-0x1]! + mov r1, r7, lsl #0x2 + mov lr, r7 + cmp r7, #0x1 + add r8, r1, #0xb + add r12, sp, #0x68 + blt _020E04E4 + mov r9, #0x30 +_020E045C: + cmp r8, #0x40 + bge _020E04CC + ldrb r1, [r12, r8, asr #0x3] + and r2, r8, #0x7 + rsb r3, r2, #0x7 + mov r2, r1, asr r3 + sub r10, r8, #0x4 + bic r1, r8, #0x7 + bic r10, r10, #0x7 + cmp r1, r10 + add r10, r12, r8, asr #0x3 + and r1, r2, #0xff + beq _020E04A0 + ldrb r2, [r10, #-0x1] + mov r2, r2, lsl #0x8 + orr r1, r1, r2, asr r3 + and r1, r1, #0xff +_020E04A0: + and r1, r1, #0xf + cmp r1, #0xa + addcc r1, r1, #0x30 + andcc r1, r1, #0xff + blo _020E04D0 + cmp r6, #0x61 + addeq r1, r1, #0x57 + andeq r1, r1, #0xff + addne r1, r1, #0x37 + andne r1, r1, #0xff + b _020E04D0 +_020E04CC: + mov r1, r9 +_020E04D0: + sub lr, lr, #0x1 + cmp lr, #0x1 + strb r1, [r0, #-0x1]! + sub r8, r8, #0x4 + bge _020E045C +_020E04E4: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r1, #0x2e + strneb r1, [r0, #-0x1]! + mov r1, #0x31 + strb r1, [r0, #-0x1] + cmp r6, #0x61 + moveq r1, #0x78 + movne r1, #0x58 + strb r1, [r0, #-0x2]! + mov r1, #0x30 + strb r1, [r0, #-0x1]! + ldrsb r1, [sp, #0xc] + cmp r1, #0x0 + movne r1, #0x2d + strneb r1, [r0, #-0x1]! + addne sp, sp, #0x44 + ldmneia sp!, {r3-r10,lr} + addne sp, sp, #0x10 + bxne lr + cmp r4, #0x1 + moveq r1, #0x2b + streqb r1, [r0, #-0x1]! + addeq sp, sp, #0x44 + ldmeqia sp!, {r3-r10,lr} + addeq sp, sp, #0x10 + bxeq lr + cmp r4, #0x2 + moveq r1, #0x20 + streqb r1, [r0, #-0x1]! + add sp, sp, #0x44 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E056C: .word 0x000001FD +_020E0570: .word 0x02106DA0 +_020E0574: .word 0x02106DA8 +_020E0578: .word 0x02106DB0 +_020E057C: .word 0x02106DB8 +_020E0580: .word 0x02106DBC +_020E0584: .word 0x02106DC0 +_020E0588: .word 0x02106DC8 +_020E058C: .word 0x02106DD0 +_020E0590: .word 0x02106DD4 +_020E0594: .word 0x000007FF + + arm_func_start round_decimal +round_decimal: ; 0x020E0598 + stmdb sp!, {r4,lr} + cmp r1, #0x0 + bge _020E05C0 +_020E05A4: + mov r1, #0x0 + strh r1, [r0, #0x2] + mov r1, #0x1 + strb r1, [r0, #0x4] + mov r1, #0x30 + strb r1, [r0, #0x5] + ldmia sp!, {r4,pc} +_020E05C0: + ldrb lr, [r0, #0x4] + cmp r1, lr + ldmgeia sp!, {r4,pc} +_020E05CC: ; 0x020E05CC + add r12, r0, #0x5 + add r2, r12, r1 + add r2, r2, #0x1 + ldrsb r3, [r2, #-0x1]! + sub r3, r3, #0x30 + mov r3, r3, lsl #0x18 + mov r3, r3, asr #0x18 + cmp r3, #0x5 + bne _020E0620 + add r12, r12, lr +_020E05F4: + sub r12, r12, #0x1 + cmp r12, r2 + bls _020E060C + ldrsb r3, [r12, #0x0] + cmp r3, #0x30 + beq _020E05F4 +_020E060C: + cmp r12, r2 + ldreqsb r3, [r2, #-0x1] + andeq r4, r3, #0x1 + movne r4, #0x1 + b _020E0628 +_020E0620: + movgt r4, #0x1 + movle r4, #0x0 +_020E0628: + cmp r1, #0x0 + beq _020E0684 + mov r12, #0x0 + mov lr, #0x1 +_020E0638: + ldrsb r3, [r2, #-0x1]! + sub r3, r3, #0x30 + add r3, r3, r4 + mov r3, r3, lsl #0x18 + mov r3, r3, asr #0x18 + cmp r3, #0x9 + movgt r4, lr + movle r4, r12 + cmp r4, #0x0 + bne _020E0668 + cmp r3, #0x0 + bne _020E0670 +_020E0668: + sub r1, r1, #0x1 + b _020E067C +_020E0670: + add r3, r3, #0x30 + strb r3, [r2, #0x0] + b _020E0684 +_020E067C: + cmp r1, #0x0 + bne _020E0638 +_020E0684: + cmp r4, #0x0 + beq _020E06AC + ldrsh r3, [r0, #0x2] + mov r2, #0x1 + mov r1, #0x31 + add r3, r3, #0x1 + strh r3, [r0, #0x2] + strb r2, [r0, #0x4] + strb r1, [r0, #0x5] + ldmia sp!, {r4,pc} +_020E06AC: + cmp r1, #0x0 + beq _020E05A4 + strb r1, [r0, #0x4] + ldmia sp!, {r4,pc} + + arm_func_start float2str +float2str: ; 0x020E06BC + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x2c + ldr r7, [sp, #0x68] + ldr r3, _020E0DF4 ; =0x000001FD + ldrb r6, [sp, #0x61] + ldrb r5, [sp, #0x5f] + ldrb r4, [sp, #0x5d] + cmp r7, r3 + mov r10, r0 + mov r8, r1 + mov r9, r2 + addgt sp, sp, #0x2c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + mov r12, #0x0 + mov r11, #0x20 + add r0, sp, #0x0 + add r3, sp, #0x4 + mov r1, r10 + mov r2, r8 + strb r12, [sp, #0x0] + strh r11, [sp, #0x2] + bl __num2dec_internal2 + ldrb r0, [sp, #0x8] + add r1, sp, #0x9 + add r0, r1, r0 + b _020E074C +_020E0734: + ldrb r2, [sp, #0x8] + ldrsh r1, [sp, #0x6] + sub r2, r2, #0x1 + add r1, r1, #0x1 + strb r2, [sp, #0x8] + strh r1, [sp, #0x6] +_020E074C: + ldrb r1, [sp, #0x8] + cmp r1, #0x1 + bls _020E0764 + ldrsb r1, [r0, #-0x1]! + cmp r1, #0x30 + beq _020E0734 +_020E0764: + ldrb r0, [sp, #0x9] + cmp r0, #0x30 + beq _020E0784 + cmp r0, #0x49 + beq _020E0790 + cmp r0, #0x4e + beq _020E08F0 + b _020E0A44 +_020E0784: + mov r0, #0x0 + strh r0, [sp, #0x6] + b _020E0A44 +_020E0790: + mov r2, #0x0 + mov r0, r10 + mov r1, r8 + mov r3, r2 + bl _dls + bhs _020E0854 + cmp r6, #0x0 + sub r0, r9, #0x5 + blt _020E07BC + cmp r6, #0x80 + blt _020E07C4 +_020E07BC: + mov r1, #0x0 + b _020E07D4 +_020E07C4: + ldr r1, _020E0DF8 ; =0x0210430C + mov r2, r6, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020E07D4: + cmp r1, #0x0 + beq _020E0818 + ldr r3, _020E0DFC ; =0x02106DA8 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0818: + ldr r3, _020E0E00 ; =0x02106DB0 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0854: + cmp r6, #0x0 + sub r0, r9, #0x4 + blt _020E0868 + cmp r6, #0x80 + blt _020E0870 +_020E0868: + mov r1, #0x0 + b _020E0880 +_020E0870: + ldr r1, _020E0DF8 ; =0x0210430C + mov r2, r6, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020E0880: + cmp r1, #0x0 + beq _020E08BC + ldr r3, _020E0E04 ; =0x02106DB8 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E08BC: + ldr r3, _020E0E08 ; =0x02106DBC + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E08F0: + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + beq _020E09A8 + cmp r6, #0x0 + sub r0, r9, #0x5 + blt _020E0910 + cmp r6, #0x80 + blt _020E0918 +_020E0910: + mov r1, #0x0 + b _020E0928 +_020E0918: + ldr r1, _020E0DF8 ; =0x0210430C + mov r2, r6, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020E0928: + cmp r1, #0x0 + beq _020E096C + ldr r3, _020E0E0C ; =0x02106DC0 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E096C: + ldr r3, _020E0E10 ; =0x02106DC8 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E09A8: + cmp r6, #0x0 + sub r0, r9, #0x4 + blt _020E09BC + cmp r6, #0x80 + blt _020E09C4 +_020E09BC: + mov r1, #0x0 + b _020E09D4 +_020E09C4: + ldr r1, _020E0DF8 ; =0x0210430C + mov r2, r6, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020E09D4: + cmp r1, #0x0 + beq _020E0A10 + ldr r3, _020E0E14 ; =0x02106DD0 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0A10: + ldr r3, _020E0E18 ; =0x02106DD4 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0A44: + ldrb r0, [sp, #0x8] + ldrsh r1, [sp, #0x6] + sub r8, r9, #0x1 + sub r0, r0, #0x1 + add r0, r1, r0 + strh r0, [sp, #0x6] + mov r0, #0x0 + strb r0, [r8, #0x0] + cmp r6, #0x65 + bgt _020E0A98 + bge _020E0B24 + cmp r6, #0x47 + bgt _020E0DE0 + cmp r6, #0x45 + blt _020E0DE0 + beq _020E0B24 + cmp r6, #0x46 + beq _020E0C6C + cmp r6, #0x47 + beq _020E0AB0 + b _020E0DE0 +_020E0A98: + cmp r6, #0x66 + bgt _020E0AA8 + beq _020E0C6C + b _020E0DE0 +_020E0AA8: + cmp r6, #0x67 + bne _020E0DE0 +_020E0AB0: + ldrb r0, [sp, #0x8] + cmp r0, r7 + ble _020E0AC8 + add r0, sp, #0x4 + mov r1, r7 + bl round_decimal +_020E0AC8: + ldrsh r2, [sp, #0x6] + mvn r0, #0x3 + cmp r2, r0 + blt _020E0AE0 + cmp r2, r7 + blt _020E0B00 +_020E0AE0: + cmp r5, #0x0 + ldreqb r0, [sp, #0x8] + subne r7, r7, #0x1 + subeq r7, r0, #0x1 + cmp r6, #0x67 + moveq r6, #0x65 + movne r6, #0x45 + b _020E0B24 +_020E0B00: + cmp r5, #0x0 + addne r0, r2, #0x1 + subne r7, r7, r0 + bne _020E0C6C + ldrb r1, [sp, #0x8] + add r0, r2, #0x1 + subs r7, r1, r0 + movmi r7, #0x0 + b _020E0C6C +_020E0B24: + ldrb r0, [sp, #0x8] + add r1, r7, #0x1 + cmp r0, r1 + ble _020E0B3C + add r0, sp, #0x4 + bl round_decimal +_020E0B3C: + ldrsh lr, [sp, #0x6] + mov r11, #0x2b + mov r10, #0x0 + cmp lr, #0x0 + rsblt lr, lr, #0x0 + movlt r11, #0x2d + ldr r3, _020E0E1C ; =0x66666667 + mov r0, #0xa + b _020E0B90 +_020E0B60: + mov r1, lr, lsr #0x1f + smull r2, r12, r3, lr + add r12, r1, r12, asr #0x2 + smull r1, r2, r0, r12 + sub r12, lr, r1 + add r1, r12, #0x30 + strb r1, [r8, #-0x1]! + mov r2, lr + smull r1, lr, r3, r2 + mov r1, r2, lsr #0x1f + add lr, r1, lr, asr #0x2 + add r10, r10, #0x1 +_020E0B90: + cmp lr, #0x0 + bne _020E0B60 + cmp r10, #0x2 + blt _020E0B60 + strb r11, [r8, #-0x1] + strb r6, [r8, #-0x2]! + sub r1, r9, r8 + ldr r0, _020E0DF4 ; =0x000001FD + add r1, r7, r1 + cmp r1, r0 + addgt sp, sp, #0x2c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + ldrb r1, [sp, #0x8] + add r0, r7, #0x1 + cmp r1, r0 + bge _020E0BFC + add r0, r7, #0x2 + sub r0, r0, r1 + subs r1, r0, #0x1 + beq _020E0BFC + mov r0, #0x30 +_020E0BF0: + strb r0, [r8, #-0x1]! + subs r1, r1, #0x1 + bne _020E0BF0 +_020E0BFC: + ldrb r1, [sp, #0x8] + add r0, sp, #0x9 + add r2, r0, r1 + subs r1, r1, #0x1 + beq _020E0C20 +_020E0C10: + ldrsb r0, [r2, #-0x1]! + subs r1, r1, #0x1 + strb r0, [r8, #-0x1]! + bne _020E0C10 +_020E0C20: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r0, #0x2e + strneb r0, [r8, #-0x1]! + ldrb r0, [sp, #0x9] + strb r0, [r8, #-0x1]! + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r8, #-0x1]! + bne _020E0DE0 + cmp r4, #0x1 + moveq r0, #0x2b + streqb r0, [r8, #-0x1]! + beq _020E0DE0 + cmp r4, #0x2 + moveq r0, #0x20 + streqb r0, [r8, #-0x1]! + b _020E0DE0 +_020E0C6C: + ldrsh r3, [sp, #0x6] + ldrb r2, [sp, #0x8] + sub r0, r2, r3 + subs r1, r0, #0x1 + movmi r1, #0x0 + cmp r1, r7 + ble _020E0CAC + sub r1, r1, r7 + add r0, sp, #0x4 + sub r1, r2, r1 + bl round_decimal + ldrsh r3, [sp, #0x6] + ldrb r2, [sp, #0x8] + sub r0, r2, r3 + subs r1, r0, #0x1 + movmi r1, #0x0 +_020E0CAC: + adds r0, r3, #0x1 + movmi r0, #0x0 + ldr r3, _020E0DF4 ; =0x000001FD + add r6, r0, r1 + cmp r6, r3 + addgt sp, sp, #0x2c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + add r3, sp, #0x9 + sub r6, r7, r1 + cmp r6, #0x0 + add r2, r3, r2 + mov r9, #0x0 + ble _020E0D00 + mov r3, #0x30 +_020E0CF0: + add r9, r9, #0x1 + cmp r9, r6 + strb r3, [r8, #-0x1]! + blt _020E0CF0 +_020E0D00: + mov r6, #0x0 + b _020E0D14 +_020E0D08: + ldrsb r3, [r2, #-0x1]! + add r6, r6, #0x1 + strb r3, [r8, #-0x1]! +_020E0D14: + cmp r6, r1 + ldrltb r3, [sp, #0x8] + cmplt r6, r3 + blt _020E0D08 + cmp r6, r1 + bge _020E0D40 + mov r3, #0x30 +_020E0D30: + add r6, r6, #0x1 + cmp r6, r1 + strb r3, [r8, #-0x1]! + blt _020E0D30 +_020E0D40: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r1, #0x2e + strneb r1, [r8, #-0x1]! + cmp r0, #0x0 + beq _020E0DA8 + ldrb r1, [sp, #0x8] + mov r5, #0x0 + sub r1, r0, r1 + cmp r1, #0x0 + ble _020E0D88 + mov r3, #0x30 +_020E0D70: + strb r3, [r8, #-0x1]! + ldrb r1, [sp, #0x8] + add r5, r5, #0x1 + sub r1, r0, r1 + cmp r5, r1 + blt _020E0D70 +_020E0D88: + cmp r5, r0 + bge _020E0DB0 +_020E0D90: + ldrsb r1, [r2, #-0x1]! + add r5, r5, #0x1 + cmp r5, r0 + strb r1, [r8, #-0x1]! + blt _020E0D90 + b _020E0DB0 +_020E0DA8: + mov r0, #0x30 + strb r0, [r8, #-0x1]! +_020E0DB0: + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r8, #-0x1]! + bne _020E0DE0 + cmp r4, #0x1 + moveq r0, #0x2b + streqb r0, [r8, #-0x1]! + beq _020E0DE0 + cmp r4, #0x2 + moveq r0, #0x20 + streqb r0, [r8, #-0x1]! +_020E0DE0: + mov r0, r8 + add sp, sp, #0x2c + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E0DF4: .word 0x000001FD +_020E0DF8: .word 0x0210430C +_020E0DFC: .word 0x02106DA8 +_020E0E00: .word 0x02106DB0 +_020E0E04: .word 0x02106DB8 +_020E0E08: .word 0x02106DBC +_020E0E0C: .word 0x02106DC0 +_020E0E10: .word 0x02106DC8 +_020E0E14: .word 0x02106DD0 +_020E0E18: .word 0x02106DD4 +_020E0E1C: .word 0x66666667 + +arm_func_start __pformatter +__pformatter: + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x22c + mov r3, #0x20 + mov r11, r2 + strb r3, [sp, #0x19] + ldrsb r2, [r11, #0x0] + mov r9, r0 + mov r8, r1 + cmp r2, #0x0 + mov r10, #0x0 + beq _020E1628 +_020E0E50: + mov r0, r11 + mov r1, #0x25 + bl strchr + str r0, [sp, #0xc] + cmp r0, #0x0 + bne _020E0EA4 + mov r0, r11 + bl strlen + movs r2, r0 + add r10, r10, r2 + beq _020E1628 + mov r0, r8 + mov r1, r11 + blx r9 + cmp r0, #0x0 + bne _020E1628 + add sp, sp, #0x22c + mvn r0, #0x0 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0EA4: + subs r2, r0, r11 + add r10, r10, r2 + beq _020E0ED4 + mov r0, r8 + mov r1, r11 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E0ED4: + ldr r0, [sp, #0xc] + add r1, sp, #0x25c + add r2, sp, #0x1c + bl parse_format_printf + ldrb r1, [sp, #0x21] + mov r11, r0 + cmp r1, #0x61 + bgt _020E0F40 + bge _020E12A4 + cmp r1, #0x47 + bgt _020E0F34 + subs r0, r1, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020E0F28 +_020E0F0C: ; 0x020E0F0C + b _020E12A4 +_020E0F10: ; 0x020E0F10 + b _020E148C +_020E0F14: ; 0x020E0F14 + b _020E148C +_020E0F18: ; 0x020E0F18 + b _020E148C +_020E0F1C: ; 0x020E0F1C + b _020E123C +_020E0F20: ; 0x020E0F20 + b _020E123C +_020E0F24: ; 0x020E0F24 + b _020E123C +_020E0F28: + cmp r1, #0x25 + beq _020E1478 + b _020E148C +_020E0F34: + cmp r1, #0x58 + beq _020E1100 + b _020E148C +_020E0F40: + cmp r1, #0x75 + bgt _020E0FA8 + subs r0, r1, #0x64 + addpl pc, pc, r0, lsl #0x2 + b _020E0F9C +_020E0F54: ; 0x020E0F54 + b _020E0FC0 +_020E0F58: ; 0x020E0F58 + b _020E123C +_020E0F5C: ; 0x020E0F5C + b _020E123C +_020E0F60: ; 0x020E0F60 + b _020E123C +_020E0F64: ; 0x020E0F64 + b _020E148C +_020E0F68: ; 0x020E0F68 + b _020E0FC0 +_020E0F6C: ; 0x020E0F6C + b _020E148C +_020E0F70: ; 0x020E0F70 + b _020E148C +_020E0F74: ; 0x020E0F74 + b _020E148C +_020E0F78: ; 0x020E0F78 + b _020E148C +_020E0F7C: ; 0x020E0F7C + b _020E13CC +_020E0F80: ; 0x020E0F80 + b _020E1100 +_020E0F84: ; 0x020E0F84 + b _020E148C +_020E0F88: ; 0x020E0F88 + b _020E148C +_020E0F8C: ; 0x020E0F8C + b _020E148C +_020E0F90: ; 0x020E0F90 + b _020E130C +_020E0F94: ; 0x020E0F94 + b _020E148C +_020E0F98: ; 0x020E0F98 + b _020E1100 +_020E0F9C: + cmp r1, #0x63 + beq _020E1458 + b _020E148C +_020E0FA8: + cmp r1, #0x78 + bgt _020E0FB8 + beq _020E1100 + b _020E148C +_020E0FB8: + cmp r1, #0xff + b _020E148C +_020E0FC0: + ldrb r0, [sp, #0x20] + cmp r0, #0x3 + bne _020E0FE0 + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E1078 +_020E0FE0: + cmp r0, #0x4 + bne _020E1008 + ldr r1, [sp, #0x25c] + add r2, r1, #0x8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E1078 +_020E1008: + cmp r0, #0x6 + bne _020E1030 + ldr r1, [sp, #0x25c] + add r2, r1, #0x8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E1078 +_020E1030: + cmp r0, #0x7 + bne _020E104C + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E1078 +_020E104C: + cmp r0, #0x8 + bne _020E1068 + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E1078 +_020E1068: + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] +_020E1078: + cmp r0, #0x2 + moveq r1, r5, lsl #0x10 + moveq r5, r1, asr #0x10 + cmp r0, #0x1 + moveq r1, r5, lsl #0x18 + moveq r5, r1, asr #0x18 + cmp r0, #0x4 + cmpne r0, #0x6 + add r0, sp, #0x1c + bne _020E10CC + sub r4, sp, #0x4 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + ldr r3, [r4, #0x0] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r2, sp, #0x22c + bl longlong2str + movs r7, r0 + beq _020E148C + b _020E10F0 +_020E10CC: + sub r4, sp, #0x8 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + add r1, sp, #0x22c + mov r0, r5 + ldmia r4, {r2-r3} + bl long2str + movs r7, r0 + beq _020E148C +_020E10F0: + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _020E14D8 +_020E1100: + ldrb r0, [sp, #0x20] + cmp r0, #0x3 + bne _020E1120 + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E11B8 +_020E1120: + cmp r0, #0x4 + bne _020E1148 + ldr r1, [sp, #0x25c] + add r2, r1, #0x8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E11B8 +_020E1148: + cmp r0, #0x6 + bne _020E1170 + ldr r1, [sp, #0x25c] + add r2, r1, #0x8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E11B8 +_020E1170: + cmp r0, #0x7 + bne _020E118C + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E11B8 +_020E118C: + cmp r0, #0x8 + bne _020E11A8 + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E11B8 +_020E11A8: + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] +_020E11B8: + cmp r0, #0x2 + moveq r1, r5, lsl #0x10 + moveq r5, r1, lsr #0x10 + cmp r0, #0x1 + andeq r5, r5, #0xff + cmp r0, #0x4 + cmpne r0, #0x6 + add r0, sp, #0x1c + bne _020E1208 + sub r4, sp, #0x4 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + ldr r3, [r4, #0x0] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r2, sp, #0x22c + bl longlong2str + movs r7, r0 + beq _020E148C + b _020E122C +_020E1208: + sub r4, sp, #0x8 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + add r1, sp, #0x22c + mov r0, r5 + ldmia r4, {r2-r3} + bl long2str + movs r7, r0 + beq _020E148C +_020E122C: + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _020E14D8 +_020E123C: + ldrb r0, [sp, #0x20] + cmp r0, #0x9 + ldrne r0, [sp, #0x25c] + addne r0, r0, #0x8 + strne r0, [sp, #0x25c] + bne _020E1260 + ldr r0, [sp, #0x25c] + add r0, r0, #0x8 + str r0, [sp, #0x25c] +_020E1260: + ldr r7, [r0, #-0x8] + ldr r6, [r0, #-0x4] + add r0, sp, #0x1c + sub r4, sp, #0x4 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + ldr r3, [r4, #0x0] + mov r0, r7 + mov r1, r6 + add r2, sp, #0x22c + bl float2str + movs r7, r0 + beq _020E148C + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _020E14D8 +_020E12A4: + ldrb r0, [sp, #0x20] + cmp r0, #0x9 + ldrne r0, [sp, #0x25c] + addne r0, r0, #0x8 + strne r0, [sp, #0x25c] + bne _020E12C8 + ldr r0, [sp, #0x25c] + add r0, r0, #0x8 + str r0, [sp, #0x25c] +_020E12C8: + ldr r7, [r0, #-0x8] + ldr r6, [r0, #-0x4] + add r0, sp, #0x1c + sub r4, sp, #0x4 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + ldr r3, [r4, #0x0] + mov r0, r7 + mov r1, r6 + add r2, sp, #0x22c + bl double2hex + movs r7, r0 + beq _020E148C + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _020E14D8 +_020E130C: + ldrb r0, [sp, #0x20] + cmp r0, #0x5 + bne _020E134C + ldr r0, [sp, #0x25c] + mov r2, #0x200 + add r0, r0, #0x4 + str r0, [sp, #0x25c] + ldr r1, [r0, #-0x4] + add r0, sp, #0x2c + cmp r1, #0x0 + ldreq r1, _020E163C ; =0x02106DD8 + bl wcstombs +_020E133C: ; 0x020E133C + cmp r0, #0x0 + blt _020E148C + add r7, sp, #0x2c + b _020E135C +_020E134C: + ldr r0, [sp, #0x25c] + add r0, r0, #0x4 + str r0, [sp, #0x25c] + ldr r7, [r0, #-0x4] +_020E135C: + ldrb r0, [sp, #0x1f] + cmp r7, #0x0 + ldreq r7, _020E1640 ; =0x02106DDC + cmp r0, #0x0 + beq _020E1390 + ldrb r0, [sp, #0x1e] + ldrb r6, [r7], #0x1 + cmp r0, #0x0 + beq _020E14D8 + ldr r0, [sp, #0x28] + cmp r6, r0 + movgt r6, r0 + b _020E14D8 +_020E1390: + ldrb r0, [sp, #0x1e] + cmp r0, #0x0 + beq _020E13BC + ldr r6, [sp, #0x28] + mov r0, r7 + mov r2, r6 + mov r1, #0x0 + bl memchr +_020E13B0: ; 0x020E13B0 + cmp r0, #0x0 + subne r6, r0, r7 + b _020E14D8 +_020E13BC: + mov r0, r7 + bl strlen + mov r6, r0 + b _020E14D8 +_020E13CC: + ldr r1, [sp, #0x25c] + ldrb r0, [sp, #0x20] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r1, [r1, #-0x4] + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020E161C +_020E13EC: + b _020E1410 +_020E13F0: + b _020E161C +_020E13F4: + b _020E1418 +_020E13F8: + b _020E1420 +_020E13FC: + b _020E1448 +_020E1400: + b _020E161C +_020E1404: + b _020E1428 +_020E1408: + b _020E1438 +_020E140C: + b _020E1440 +_020E1410: + str r10, [r1, #0x0] + b _020E161C +_020E1418: + strh r10, [r1, #0x0] + b _020E161C +_020E1420: + str r10, [r1, #0x0] + b _020E161C +_020E1428: + str r10, [r1, #0x0] + mov r0, r10, asr #0x1f + str r0, [r1, #0x4] + b _020E161C +_020E1438: + str r10, [r1, #0x0] + b _020E161C +_020E1440: + str r10, [r1, #0x0] + b _020E161C +_020E1448: + str r10, [r1, #0x0] + mov r0, r10, asr #0x1f + str r0, [r1, #0x4] + b _020E161C +_020E1458: + ldr r0, [sp, #0x25c] + add r7, sp, #0x2c + add r0, r0, #0x4 + str r0, [sp, #0x25c] + ldr r0, [r0, #-0x4] + mov r6, #0x1 + strb r0, [sp, #0x2c] + b _020E14D8 +_020E1478: + mov r0, #0x25 + strb r0, [sp, #0x2c] + add r7, sp, #0x2c + mov r6, #0x1 + b _020E14D8 +_020E148C: + ldr r0, [sp, #0xc] + bl strlen + movs r4, r0 + beq _020E14C4 + ldr r1, [sp, #0xc] + mov r0, r8 + mov r2, r4 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E14C4: + add sp, sp, #0x22c + add r0, r10, r4 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E14D8: + ldrb r0, [sp, #0x1c] + mov r4, r6 + cmp r0, #0x0 + beq _020E158C + cmp r0, #0x2 + moveq r0, #0x30 + movne r0, #0x20 + strb r0, [sp, #0x19] + ldrsb r0, [r7, #0x0] + cmp r0, #0x2b + cmpne r0, #0x2d + cmpne r0, #0x20 + bne _020E1548 + ldrsb r0, [sp, #0x19] + cmp r0, #0x30 + bne _020E1548 + mov r0, r8 + mov r1, r7 + mov r2, #0x1 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + add r7, r7, #0x1 + sub r6, r6, #0x1 +_020E1548: + ldr r0, [sp, #0x24] + cmp r4, r0 + bge _020E158C +_020E1554: + mov r0, r8 + add r1, sp, #0x19 + mov r2, #0x1 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x24] + add r4, r4, #0x1 + cmp r4, r0 + blt _020E1554 +_020E158C: + cmp r6, #0x0 + beq _020E15BC + mov r0, r8 + mov r1, r7 + mov r2, r6 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E15BC: + ldrb r0, [sp, #0x1c] + cmp r0, #0x0 + bne _020E1618 + ldr r0, [sp, #0x24] + cmp r4, r0 + bge _020E1618 + mov r6, #0x20 + add r7, sp, #0x18 +_020E15DC: + mov r0, r8 + mov r1, r7 + mov r2, #0x1 + strb r6, [sp, #0x18] + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x24] + add r4, r4, #0x1 + cmp r4, r0 + blt _020E15DC +_020E1618: + add r10, r10, r4 +_020E161C: + ldrsb r0, [r11, #0x0] + cmp r0, #0x0 + bne _020E0E50 +_020E1628: + mov r0, r10 + add sp, sp, #0x22c + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E163C: .word 0x02106DD8 +_020E1640: .word 0x02106DDC + + arm_func_start __FileWrite +__FileWrite: ; 0x020E1644 + stmdb sp!, {r3-r5,lr} + mov r5, r0 + mov r0, r1 + mov r3, r5 + mov r1, #0x1 + mov r4, r2 + bl __fwrite +_020E1660: ; 0x020E1660 + cmp r4, r0 + movne r5, #0x0 + mov r0, r5 + ldmia sp!, {r3-r5,pc} + + arm_func_start __StringWrite +__StringWrite: ; 0x020E1670 + stmdb sp!, {r3-r5,lr} + mov r4, r0 + ldr r3, [r4, #0x8] + mov r5, r2 + ldr r2, [r4, #0x4] + add r0, r3, r5 + cmp r0, r2 + ldr r0, [r4, #0x0] + subhi r5, r2, r3 + mov r2, r5 + add r0, r0, r3 + bl memcpy + ldr r1, [r4, #0x8] + mov r0, #0x1 + add r1, r1, r5 + str r1, [r4, #0x8] + ldmia sp!, {r3-r5,pc} + + arm_func_start printf +printf: ; 0x020E16B4 + stmdb sp!, {r0-r3} + stmdb sp!, {r4,lr} + ldr r0, _020E17B4 ; =0x02106AA4 + mvn r1, #0x0 + bl fwide +_020E16C8: ; 0x020E16C8 + cmp r0, #0x0 + mvnge r0, #0x0 + ldmgeia sp!, {r4,lr} + addge sp, sp, #0x10 + bxge lr + ldr r0, _020E17B8 ; =0x021D7118 + bl OS_TryLockMutex +_020E16E4: ; 0x020E16E4 + cmp r0, #0x0 + bne _020E1710 + ldr r0, _020E17BC ; =0x021D3498 + ldr r1, _020E17C0 ; =0x021D7088 + ldr r2, [r0, #0x4] + ldr r0, _020E17C4 ; =0x021D70AC + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0xc] + str r2, [r0, #0xc] + b _020E1768 +_020E1710: + ldr r0, _020E17BC ; =0x021D3498 + ldr r1, _020E17C0 ; =0x021D7088 + ldr r0, [r0, #0x4] + ldr r1, [r1, #0xc] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020E1740 + ldr r0, _020E17C4 ; =0x021D70AC + ldr r1, [r0, #0xc] + add r1, r1, #0x1 + str r1, [r0, #0xc] + b _020E1768 +_020E1740: + ldr r0, _020E17B8 ; =0x021D7118 + bl OS_LockMutex + ldr r0, _020E17BC ; =0x021D3498 + ldr r1, _020E17C0 ; =0x021D7088 + ldr r2, [r0, #0x4] + ldr r0, _020E17C4 ; =0x021D70AC + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0xc] + str r2, [r0, #0xc] +_020E1768: + add r0, sp, #0x8 + bic r3, r0, #0x3 + ldr r2, [sp, #0x8] + ldr r0, _020E17C8 ; =__FileWrite + ldr r1, _020E17B4 ; =0x02106AA4 + add r3, r3, #0x4 + bl __pformatter + ldr r1, _020E17C4 ; =0x021D70AC + mov r4, r0 + ldr r0, [r1, #0xc] + subs r0, r0, #0x1 + str r0, [r1, #0xc] + bne _020E17A4 + ldr r0, _020E17B8 ; =0x021D7118 + bl OS_UnlockMutex +_020E17A4: + mov r0, r4 + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E17B4: .word 0x02106AA4 +_020E17B8: .word 0x021D7118 +_020E17BC: .word 0x021D3498 +_020E17C0: .word 0x021D7088 +_020E17C4: .word 0x021D70AC +_020E17C8: .word __FileWrite + + arm_func_start vsnprintf +vsnprintf: ; 0x020E17CC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + mov r4, r1 + mov r12, #0x0 + ldr r0, _020E1830 ; =__StringWrite + add r1, sp, #0x0 + str r5, [sp, #0x0] + str r4, [sp, #0x4] + str r12, [sp, #0x8] + bl __pformatter +_020E17F8: ; 0x020E17F8 + cmp r5, #0x0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r5,pc} +_020E1804: ; 0x020E1804 + cmp r0, r4 + movcc r1, #0x0 + addcc sp, sp, #0xc + strccb r1, [r5, r0] + ldmccia sp!, {r4-r5,pc} +_020E1818: ; 0x020E1818 + cmp r4, #0x0 + addne r1, r5, r4 + movne r2, #0x0 + strneb r2, [r1, #-0x1] + add sp, sp, #0xc + ldmia sp!, {r4-r5,pc} + .balign 4 +_020E1830: .word __StringWrite + + arm_func_start snprintf +snprintf: ; 0x020E1834 + stmdb sp!, {r0-r3} + stmdb sp!, {r3,lr} + add r3, sp, #0x10 + bic r3, r3, #0x3 + ldr r2, [sp, #0x10] + add r3, r3, #0x4 + bl vsnprintf + ldmia sp!, {r3,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start sprintf +sprintf: ; 0x020E185C + stmdb sp!, {r0-r3} + stmdb sp!, {r3,lr} + add r1, sp, #0xc + bic r1, r1, #0x3 + add r3, r1, #0x4 + ldr r2, [sp, #0xc] + mvn r1, #0x0 + bl vsnprintf + ldmia sp!, {r3,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start qsort +qsort: ; 0x020E1888 + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x10 + mov r9, r1 + cmp r9, #0x2 + mov r10, r0 + mov r8, r2 + mov r7, r3 + addcc sp, sp, #0x10 + ldmccia sp!, {r3-r11,pc} +_020E18AC: ; 0x020E18AC + mov r0, r9, lsr #0x1 + add r11, r0, #0x1 + sub r0, r11, #0x1 + mla r0, r8, r0, r10 + sub r2, r9, #0x1 + str r0, [sp, #0xc] + mla r0, r8, r2, r10 + str r0, [sp, #0x8] + mul r0, r11, r8 + mvn r1, #0x0 + str r0, [sp, #0x4] + mul r0, r8, r1 + str r0, [sp, #0x0] +_020E18E0: + cmp r11, #0x1 + bls _020E1908 + ldr r0, [sp, #0x4] + sub r11, r11, #0x1 + sub r0, r0, r8 + str r0, [sp, #0x4] + ldr r0, [sp, #0xc] + sub r0, r0, r8 + str r0, [sp, #0xc] + b _020E1950 +_020E1908: + mov r2, r8 + ldr r4, [sp, #0x8] + ldr r3, [sp, #0xc] + cmp r8, #0x0 + beq _020E1934 +_020E191C: + ldrsb r0, [r4, #0x0] + ldrsb r1, [r3, #0x0] + subs r2, r2, #0x1 + strb r0, [r3], #0x1 + strb r1, [r4], #0x1 + bne _020E191C +_020E1934: + sub r9, r9, #0x1 + cmp r9, #0x1 + addeq sp, sp, #0x10 + ldmeqia sp!, {r3-r11,pc} +_020E1944: ; 0x020E1944 + ldr r0, [sp, #0x8] + sub r0, r0, r8 + str r0, [sp, #0x8] +_020E1950: + ldr r1, [sp, #0x4] + ldr r0, [sp, #0x0] + mov r4, r11 + add r0, r1, r0 + cmp r9, r11, lsl #0x1 + add r5, r10, r0 + blo _020E18E0 +_020E196C: + mov r4, r4, lsl #0x1 + sub r0, r4, #0x1 + mov r6, r5 + mla r5, r8, r0, r10 + cmp r9, r4 + bls _020E199C + mov r0, r5 + add r1, r5, r8 + blx r7 + cmp r0, #0x0 + addlt r4, r4, #0x1 + addlt r5, r5, r8 +_020E199C: + mov r0, r6 + mov r1, r5 + blx r7 + cmp r0, #0x0 + bge _020E18E0 + mov r2, r8 + mov r3, r5 + cmp r8, #0x0 + beq _020E19D8 +_020E19C0: + ldrsb r1, [r6, #0x0] + ldrsb r0, [r3, #0x0] + subs r2, r2, #0x1 + strb r0, [r6], #0x1 + strb r1, [r3], #0x1 + bne _020E19C0 +_020E19D8: + cmp r9, r4, lsl #0x1 + bhs _020E196C + b _020E18E0 +_020E19E4: ; 0x020E19E4 + add sp, sp, #0x10 + ldmia sp!, {r3-r11,pc} + + arm_func_start rand +rand: ; 0x020E19EC + ldr r2, _020E1A14 ; =0x02106DE0 + ldr r0, _020E1A18 ; =0x41C64E6D + ldr r3, [r2, #0x0] + ldr r1, _020E1A1C ; =0x00007FFF + mul r0, r3, r0 + add r0, r0, #0x39 + add r0, r0, #0x3000 + str r0, [r2, #0x0] + and r0, r1, r0, lsr #0x10 + bx lr + .balign 4 +_020E1A14: .word 0x02106DE0 +_020E1A18: .word 0x41C64E6D +_020E1A1C: .word 0x00007FFF + + arm_func_start srand +srand: ; 0x020E1A20 + ldr r1, _020E1A2C ; =0x02106DE0 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020E1A2C: .word 0x02106DE0 + + arm_func_start parse_format_scanf +parse_format_scanf: ; 0x020E1A30 + stmdb sp!, {r3-r7,lr} + sub sp, sp, #0x28 + ldr r6, _020E1F20 ; =0x0210440C + add r5, sp, #0x0 + mov r7, r0 + mov lr, r1 + mov r4, r5 + ldmia r6!, {r0-r3} + stmia r5!, {r0-r3} + ldmia r6!, {r0-r3} + stmia r5!, {r0-r3} + ldmia r6, {r0-r1} + stmia r5, {r0-r1} + ldrsb r0, [r7, #0x1] + add r12, r7, #0x1 + cmp r0, #0x25 + bne _020E1A9C + strb r0, [sp, #0x3] + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4, {r0-r1} + stmia lr, {r0-r1} + add sp, sp, #0x28 + add r0, r12, #0x1 + ldmia sp!, {r3-r7,pc} +_020E1A9C: + cmp r0, #0x2a + moveq r0, #0x1 + streqb r0, [sp, #0x0] + ldreqsb r0, [r12, #0x1]! + cmp r0, #0x0 + blt _020E1ABC + cmp r0, #0x80 + blt _020E1AC4 +_020E1ABC: + mov r1, #0x0 + b _020E1AD4 +_020E1AC4: + ldr r1, _020E1F24 ; =0x0210430C + mov r2, r0, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x8 +_020E1AD4: + cmp r1, #0x0 + beq _020E1B74 + mov r1, #0x0 + ldr r3, _020E1F24 ; =0x0210430C + str r1, [sp, #0x4] + mov r4, r1 + mov r1, #0xa +_020E1AF0: + ldr r2, [sp, #0x4] + sub r0, r0, #0x30 + mla r0, r2, r1, r0 + str r0, [sp, #0x4] + ldrsb r0, [r12, #0x1]! + cmp r0, #0x0 + blt _020E1B14 + cmp r0, #0x80 + blt _020E1B1C +_020E1B14: + mov r2, r4 + b _020E1B28 +_020E1B1C: + mov r2, r0, lsl #0x1 + ldrh r2, [r3, r2] + and r2, r2, #0x8 +_020E1B28: + cmp r2, #0x0 + bne _020E1AF0 + ldr r1, [sp, #0x4] + cmp r1, #0x0 + bne _020E1B6C + mov r0, #0xff + add r4, sp, #0x0 + strb r0, [sp, #0x3] + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4, {r0-r1} + stmia lr, {r0-r1} + add sp, sp, #0x28 + add r0, r12, #0x1 + ldmia sp!, {r3-r7,pc} +_020E1B6C: + mov r1, #0x1 + strb r1, [sp, #0x1] +_020E1B74: + cmp r0, #0x6c + mov r1, #0x1 + bgt _020E1BAC + cmp r0, #0x68 + blt _020E1BA0 + beq _020E1BC8 + cmp r0, #0x6a + beq _020E1C14 + cmp r0, #0x6c + beq _020E1BE4 + b _020E1C38 +_020E1BA0: + cmp r0, #0x4c + beq _020E1C08 + b _020E1C38 +_020E1BAC: + cmp r0, #0x74 + bgt _020E1BBC + beq _020E1C2C + b _020E1C38 +_020E1BBC: + cmp r0, #0x7a + beq _020E1C20 + b _020E1C38 +_020E1BC8: + mov r2, #0x2 + strb r2, [sp, #0x2] + ldrsb r2, [r12, #0x1] + cmp r2, #0x68 + streqb r1, [sp, #0x2] + ldreqsb r0, [r12, #0x1]! + b _020E1C3C +_020E1BE4: + mov r2, #0x3 + strb r2, [sp, #0x2] + ldrsb r2, [r12, #0x1] + cmp r2, #0x6c + bne _020E1C3C + mov r0, #0x7 + strb r0, [sp, #0x2] + ldrsb r0, [r12, #0x1]! + b _020E1C3C +_020E1C08: + mov r2, #0x9 + strb r2, [sp, #0x2] + b _020E1C3C +_020E1C14: + mov r2, #0x4 + strb r2, [sp, #0x2] + b _020E1C3C +_020E1C20: + mov r2, #0x5 + strb r2, [sp, #0x2] + b _020E1C3C +_020E1C2C: + mov r2, #0x6 + strb r2, [sp, #0x2] + b _020E1C3C +_020E1C38: + mov r1, #0x0 +_020E1C3C: + cmp r1, #0x0 + ldrnesb r0, [r12, #0x1]! + strb r0, [sp, #0x3] + cmp r0, #0x5b + bgt _020E1C90 + bge _020E1DE0 + cmp r0, #0x47 + bgt _020E1C84 + subs r1, r0, #0x41 + addpl pc, pc, r1, lsl #0x2 + b _020E1EF0 +_020E1C68: ; 0x020E1C68 + b _020E1D1C +_020E1C6C: ; 0x020E1C6C + b _020E1EF0 +_020E1C70: ; 0x020E1C70 + b _020E1EF0 +_020E1C74: ; 0x020E1C74 + b _020E1EF0 +_020E1C78: ; 0x020E1C78 + b _020E1D1C +_020E1C7C: ; 0x020E1C7C + b _020E1D1C +_020E1C80: ; 0x020E1C80 + b _020E1D1C +_020E1C84: + cmp r0, #0x58 + beq _020E1D08 + b _020E1EF0 +_020E1C90: + cmp r0, #0x61 + bgt _020E1CA0 + beq _020E1D1C + b _020E1EF0 +_020E1CA0: + sub r0, r0, #0x63 + cmp r0, #0x15 + addls pc, pc, r0, lsl #0x2 + b _020E1EF0 +_020E1CB0: + b _020E1D6C +_020E1CB4: + b _020E1D08 +_020E1CB8: + b _020E1D1C +_020E1CBC: + b _020E1D1C +_020E1CC0: + b _020E1D1C +_020E1CC4: + b _020E1EF0 +_020E1CC8: + b _020E1D08 +_020E1CCC: + b _020E1EF0 +_020E1CD0: + b _020E1EF0 +_020E1CD4: + b _020E1EF0 +_020E1CD8: + b _020E1EF0 +_020E1CDC: + b _020E1EF8 +_020E1CE0: + b _020E1D08 +_020E1CE4: + b _020E1D58 +_020E1CE8: + b _020E1EF0 +_020E1CEC: + b _020E1EF0 +_020E1CF0: + b _020E1D90 +_020E1CF4: + b _020E1EF0 +_020E1CF8: + b _020E1D08 +_020E1CFC: + b _020E1EF0 +_020E1D00: + b _020E1EF0 +_020E1D04: + b _020E1D08 +_020E1D08: + ldrb r0, [sp, #0x2] + cmp r0, #0x9 + moveq r0, #0xff + streqb r0, [sp, #0x3] + b _020E1EF8 +_020E1D1C: + ldrb r1, [sp, #0x2] + cmp r1, #0x1 + cmpne r1, #0x2 + beq _020E1D3C + add r0, r1, #0xfc + and r0, r0, #0xff + cmp r0, #0x3 + bhi _020E1D48 +_020E1D3C: + mov r0, #0xff + strb r0, [sp, #0x3] + b _020E1EF8 +_020E1D48: + cmp r1, #0x3 + moveq r0, #0x8 + streqb r0, [sp, #0x2] + b _020E1EF8 +_020E1D58: + mov r1, #0x3 + mov r0, #0x78 + strb r1, [sp, #0x2] + strb r0, [sp, #0x3] + b _020E1EF8 +_020E1D6C: + ldrb r0, [sp, #0x2] + cmp r0, #0x3 + moveq r0, #0xa + streqb r0, [sp, #0x2] + beq _020E1EF8 + cmp r0, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x3] + b _020E1EF8 +_020E1D90: + ldrb r0, [sp, #0x2] + cmp r0, #0x3 + moveq r0, #0xa + streqb r0, [sp, #0x2] + beq _020E1DB0 + cmp r0, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x3] +_020E1DB0: + add r2, sp, #0x8 + mov r1, #0x20 + mov r0, #0xff +_020E1DBC: + sub r1, r1, #0x1 + cmp r1, #0x0 + strb r0, [r2], #0x1 + bgt _020E1DBC + mov r1, #0xc1 + mov r0, #0xfe + strb r1, [sp, #0x9] + strb r0, [sp, #0xc] + b _020E1EF8 +_020E1DE0: + ldrb r0, [sp, #0x2] + cmp r0, #0x3 + moveq r0, #0xa + streqb r0, [sp, #0x2] + beq _020E1E00 + cmp r0, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x3] +_020E1E00: + ldrsb r2, [r12, #0x1]! + mov r1, #0x0 + cmp r2, #0x5e + ldreqsb r2, [r12, #0x1]! + moveq r1, #0x1 + cmp r2, #0x5d + bne _020E1EA8 + ldrb r0, [sp, #0x13] + orr r0, r0, #0x20 + strb r0, [sp, #0x13] + ldrsb r2, [r12, #0x1]! + b _020E1EA8 +_020E1E30: + add r0, sp, #0x0 + and r3, r2, #0xff + add r6, r0, r3, asr #0x3 + ldrb r5, [r6, #0x8] + and r3, r2, #0x7 + mov r4, #0x1 + orr r3, r5, r4, lsl r3 + strb r3, [r6, #0x8] + ldrsb r3, [r12, #0x1] + cmp r3, #0x2d + bne _020E1EA4 + ldrsb r7, [r12, #0x2] + cmp r7, #0x0 + cmpne r7, #0x5d + beq _020E1EA4 + add r2, r2, #0x1 + cmp r2, r7 + bgt _020E1E9C +_020E1E78: + and r3, r2, #0xff + add r6, r0, r3, asr #0x3 + ldrb r5, [r6, #0x8] + and r3, r2, #0x7 + add r2, r2, #0x1 + orr r3, r5, r4, lsl r3 + strb r3, [r6, #0x8] + cmp r2, r7 + ble _020E1E78 +_020E1E9C: + ldrsb r2, [r12, #0x3]! + b _020E1EA8 +_020E1EA4: + ldrsb r2, [r12, #0x1]! +_020E1EA8: + cmp r2, #0x0 + cmpne r2, #0x5d + bne _020E1E30 + cmp r2, #0x0 + moveq r0, #0xff + streqb r0, [sp, #0x3] + beq _020E1EF8 + cmp r1, #0x0 + beq _020E1EF8 + add r2, sp, #0x8 + mov r1, #0x20 +_020E1ED4: + ldrb r0, [r2, #0x0] + sub r1, r1, #0x1 + cmp r1, #0x0 + mvn r0, r0 + strb r0, [r2], #0x1 + bgt _020E1ED4 + b _020E1EF8 +_020E1EF0: + mov r0, #0xff + strb r0, [sp, #0x3] +_020E1EF8: + add r4, sp, #0x0 + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4, {r0-r1} + stmia lr, {r0-r1} + add r0, r12, #0x1 + add sp, sp, #0x28 + ldmia sp!, {r3-r7,pc} + .balign 4 +_020E1F20: .word 0x0210440C +_020E1F24: .word 0x0210430C + + arm_func_start __sformatter +__sformatter: ; 0x020E1F28 + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x88 + ldrsb r5, [r2, #0x0] + str r2, [sp, #0xc] + mov r2, #0x0 + mov r9, r0 + mov r0, r2 + str r2, [sp, #0x20] + mov r8, r1 + str r3, [sp, #0x10] + str r0, [sp, #0x24] + cmp r5, #0x0 + ldr r10, [sp, #0xb0] + str r0, [sp, #0x30] + mov r4, r2 + str r0, [sp, #0x44] + str r0, [sp, #0x40] + beq _020E2C3C +_020E1F70: + cmp r5, #0x0 + mov r0, #0x1 + blt _020E1F84 + cmp r5, #0x80 + movlt r0, #0x0 +_020E1F84: + cmp r0, #0x0 + movne r0, #0x0 + bne _020E1FA0 + mov r1, r5, lsl #0x1 + ldr r0, _020E2C74 ; =0x0210430C + ldrh r0, [r0, r1] + and r0, r0, #0x100 +_020E1FA0: + cmp r0, #0x0 + beq _020E2060 + mov r2, #0x0 + ldr r1, _020E2C74 ; =0x0210430C + mov r12, r2 + mov r3, #0x1 +_020E1FB8: + ldr r0, [sp, #0xc] + ldrsb r5, [r0, #0x1]! + str r0, [sp, #0xc] + mov r0, r3 + cmp r5, #0x0 + blt _020E1FD8 + cmp r5, #0x80 + movlt r0, r2 +_020E1FD8: + cmp r0, #0x0 + movne r0, r12 + moveq r0, r5, lsl #0x1 + ldreqh r0, [r1, r0] + andeq r0, r0, #0x100 + cmp r0, #0x0 + bne _020E1FB8 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E2C2C + ldr r5, _020E2C74 ; =0x0210430C + b _020E200C +_020E2008: + add r4, r4, #0x1 +_020E200C: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + strb r0, [sp, #0x50] + ldrsb r1, [sp, #0x50] + cmp r1, #0x0 + blt _020E2034 + cmp r1, #0x80 + blt _020E203C +_020E2034: + mov r0, #0x0 + b _020E2048 +_020E203C: + mov r0, r1, lsl #0x1 + ldrh r0, [r5, r0] + and r0, r0, #0x100 +_020E2048: + cmp r0, #0x0 + bne _020E2008 + mov r0, r8 + mov r2, #0x1 + blx r9 + b _020E2C2C +_020E2060: + cmp r5, #0x25 + beq _020E20D8 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E20D8 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + strb r0, [sp, #0x50] + and r0, r5, #0xff + ldrsb r1, [sp, #0x50] + cmp r0, r1 + beq _020E20C4 + mov r0, r8 + mov r2, #0x1 + blx r9 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + ldr r0, [sp, #0xc] + add r0, r0, #0x1 + str r0, [sp, #0xc] + b _020E2C2C +_020E20C4: + ldr r0, [sp, #0xc] + add r4, r4, #0x1 + add r0, r0, #0x1 + str r0, [sp, #0xc] + b _020E2C2C +_020E20D8: + ldr r0, [sp, #0xc] + add r1, sp, #0x60 + bl parse_format_scanf + str r0, [sp, #0xc] + ldrb r0, [sp, #0x60] + cmp r0, #0x0 + bne _020E2114 + ldrb r0, [sp, #0x63] + cmp r0, #0x25 + beq _020E2114 + ldr r0, [sp, #0x10] + add r0, r0, #0x4 + str r0, [sp, #0x10] + ldr r5, [r0, #-0x4] + b _020E2118 +_020E2114: + mov r5, #0x0 +_020E2118: + ldrb r0, [sp, #0x63] + cmp r0, #0x6e + beq _020E2158 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E2158 + mov r0, r8 + mov r1, #0x0 + mov r2, #0x2 + blx r9 + cmp r0, #0x0 + beq _020E2158 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] +_020E2158: + ldrb r1, [sp, #0x63] + cmp r1, #0x5b + bgt _020E21B0 + bge _020E2984 + cmp r1, #0x47 + bgt _020E21A4 + subs r0, r1, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020E2198 +_020E217C: ; 0x020E217C + b _020E2600 +_020E2180: ; 0x020E2180 + b _020E2C3C +_020E2184: ; 0x020E2184 + b _020E2C3C +_020E2188: ; 0x020E2188 + b _020E2C3C +_020E218C: ; 0x020E218C + b _020E2600 +_020E2190: ; 0x020E2190 + b _020E2600 +_020E2194: ; 0x020E2194 + b _020E2600 +_020E2198: + cmp r1, #0x25 + beq _020E287C + b _020E2C3C +_020E21A4: + cmp r1, #0x58 + beq _020E243C + b _020E2C3C +_020E21B0: + cmp r1, #0x78 + bgt _020E2228 + subs r0, r1, #0x63 + addpl pc, pc, r0, lsl #0x2 + b _020E221C +_020E21C4: ; 0x020E21C4 + b _020E26C4 +_020E21C8: ; 0x020E21C8 + b _020E2230 +_020E21CC: ; 0x020E21CC + b _020E2600 +_020E21D0: ; 0x020E21D0 + b _020E2600 +_020E21D4: ; 0x020E21D4 + b _020E2600 +_020E21D8: ; 0x020E21D8 + b _020E2C3C +_020E21DC: ; 0x020E21DC + b _020E2238 +_020E21E0: ; 0x020E21E0 + b _020E2C3C +_020E21E4: ; 0x020E21E4 + b _020E2C3C +_020E21E8: ; 0x020E21E8 + b _020E2C3C +_020E21EC: ; 0x020E21EC + b _020E2C3C +_020E21F0: ; 0x020E21F0 + b _020E2BC8 +_020E21F4: ; 0x020E21F4 + b _020E242C +_020E21F8: ; 0x020E21F8 + b _020E2C3C +_020E21FC: ; 0x020E21FC + b _020E2C3C +_020E2200: ; 0x020E2200 + b _020E2C3C +_020E2204: ; 0x020E2204 + b _020E2908 +_020E2208: ; 0x020E2208 + b _020E2C3C +_020E220C: ; 0x020E220C + b _020E2434 +_020E2210: ; 0x020E2210 + b _020E2C3C +_020E2214: ; 0x020E2214 + b _020E2C3C +_020E2218: ; 0x020E2218 + b _020E243C +_020E221C: + cmp r1, #0x61 + beq _020E2600 + b _020E2C3C +_020E2228: + cmp r1, #0xff + b _020E2C3C +_020E2230: + mov r0, #0xa + b _020E223C +_020E2238: + mov r0, #0x0 +_020E223C: + ldr r1, [sp, #0x30] + cmp r1, #0x0 + beq _020E225C + mov r0, #0x0 + str r0, [sp, #0x1c] + str r0, [sp, #0x20] + str r0, [sp, #0x24] + b _020E2364 +_020E225C: + ldrb r1, [sp, #0x62] + add r2, sp, #0x5c + cmp r1, #0x7 + cmpne r1, #0x4 + add r1, sp, #0x58 + bne _020E22A0 + str r2, [sp, #0x0] + str r1, [sp, #0x4] + add r1, sp, #0x54 + str r1, [sp, #0x8] + ldr r1, [sp, #0x64] + mov r2, r9 + mov r3, r8 + bl __strtoull + str r0, [sp, #0x34] + str r1, [sp, #0x18] + b _020E22C4 +_020E22A0: + str r2, [sp, #0x0] + str r1, [sp, #0x4] + add r1, sp, #0x54 + str r1, [sp, #0x8] + ldr r1, [sp, #0x64] + mov r2, r9 + mov r3, r8 + bl __strtoul + str r0, [sp, #0x3c] +_020E22C4: + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + bne _020E22F4 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + mov r0, #0x0 + str r0, [sp, #0x1c] + str r0, [sp, #0x20] + str r0, [sp, #0x24] + b _020E2364 +_020E22F4: + add r4, r4, r0 + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + cmpne r0, #0x4 + bne _020E2344 + ldr r0, [sp, #0x58] + cmp r0, #0x0 + beq _020E2330 + ldr r0, [sp, #0x34] + rsbs r0, r0, #0x0 + str r0, [sp, #0x20] + ldr r0, [sp, #0x18] + rsc r0, r0, #0x0 + str r0, [sp, #0x24] + b _020E2364 +_020E2330: + ldr r0, [sp, #0x34] + str r0, [sp, #0x20] + ldr r0, [sp, #0x18] + str r0, [sp, #0x24] + b _020E2364 +_020E2344: + ldr r0, [sp, #0x58] + cmp r0, #0x0 + ldreq r0, [sp, #0x3c] + streq r0, [sp, #0x1c] + beq _020E2364 + ldr r0, [sp, #0x3c] + rsb r0, r0, #0x0 + str r0, [sp, #0x1c] +_020E2364: + cmp r5, #0x0 + beq _020E241C + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + addls pc, pc, r0, lsl #0x2 + b _020E2408 +_020E237C: + b _020E239C +_020E2380: + b _020E23A8 +_020E2384: + b _020E23B4 +_020E2388: + b _020E23C0 +_020E238C: + b _020E23CC +_020E2390: + b _020E23E0 +_020E2394: + b _020E23EC +_020E2398: + b _020E23F8 +_020E239C: + ldr r0, [sp, #0x1c] + str r0, [r5, #0x0] + b _020E2408 +_020E23A8: + ldr r0, [sp, #0x1c] + strb r0, [r5, #0x0] + b _020E2408 +_020E23B4: + ldr r0, [sp, #0x1c] + strh r0, [r5, #0x0] + b _020E2408 +_020E23C0: + ldr r0, [sp, #0x1c] + str r0, [r5, #0x0] + b _020E2408 +_020E23CC: + ldr r0, [sp, #0x20] + str r0, [r5, #0x0] + ldr r0, [sp, #0x24] + str r0, [r5, #0x4] + b _020E2408 +_020E23E0: + ldr r0, [sp, #0x1c] + str r0, [r5, #0x0] + b _020E2408 +_020E23EC: + ldr r0, [sp, #0x1c] + str r0, [r5, #0x0] + b _020E2408 +_020E23F8: + ldr r0, [sp, #0x20] + str r0, [r5, #0x0] + ldr r0, [sp, #0x24] + str r0, [r5, #0x4] +_020E2408: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + ldreq r0, [sp, #0x44] + addeq r0, r0, #0x1 + streq r0, [sp, #0x44] +_020E241C: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E242C: + mov r0, #0x8 + b _020E2440 +_020E2434: + mov r0, #0xa + b _020E2440 +_020E243C: + mov r0, #0x10 +_020E2440: + ldr r1, [sp, #0x30] + cmp r1, #0x0 + beq _020E2460 + mov r0, #0x0 + str r0, [sp, #0x3c] + str r0, [sp, #0x34] + str r0, [sp, #0x18] + b _020E2538 +_020E2460: + ldrb r1, [sp, #0x62] + add r2, sp, #0x5c + cmp r1, #0x7 + cmpne r1, #0x4 + add r1, sp, #0x58 + bne _020E24A4 + str r2, [sp, #0x0] + str r1, [sp, #0x4] + add r1, sp, #0x54 + str r1, [sp, #0x8] + ldr r1, [sp, #0x64] + mov r2, r9 + mov r3, r8 + bl __strtoull + str r0, [sp, #0x34] + str r1, [sp, #0x18] + b _020E24C8 +_020E24A4: + str r2, [sp, #0x0] + str r1, [sp, #0x4] + add r1, sp, #0x54 + str r1, [sp, #0x8] + ldr r1, [sp, #0x64] + mov r2, r9 + mov r3, r8 + bl __strtoul + str r0, [sp, #0x3c] +_020E24C8: + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + bne _020E24F8 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + mov r0, #0x0 + str r0, [sp, #0x3c] + str r0, [sp, #0x34] + str r0, [sp, #0x18] + b _020E2538 +_020E24F8: + add r4, r4, r0 + ldr r0, [sp, #0x58] + cmp r0, #0x0 + beq _020E2538 + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + ldrne r0, [sp, #0x3c] + rsbne r0, r0, #0x0 + strne r0, [sp, #0x3c] + bne _020E2538 + ldr r0, [sp, #0x34] + rsbs r0, r0, #0x0 + str r0, [sp, #0x34] + ldr r0, [sp, #0x18] + rsc r0, r0, #0x0 + str r0, [sp, #0x18] +_020E2538: + cmp r5, #0x0 + beq _020E25F0 + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + addls pc, pc, r0, lsl #0x2 + b _020E25DC +_020E2550: + b _020E2570 +_020E2554: + b _020E257C +_020E2558: + b _020E2588 +_020E255C: + b _020E2594 +_020E2560: + b _020E25A0 +_020E2564: + b _020E25B4 +_020E2568: + b _020E25C0 +_020E256C: + b _020E25CC +_020E2570: + ldr r0, [sp, #0x3c] + str r0, [r5, #0x0] + b _020E25DC +_020E257C: + ldr r0, [sp, #0x3c] + strb r0, [r5, #0x0] + b _020E25DC +_020E2588: + ldr r0, [sp, #0x3c] + strh r0, [r5, #0x0] + b _020E25DC +_020E2594: + ldr r0, [sp, #0x3c] + str r0, [r5, #0x0] + b _020E25DC +_020E25A0: + ldr r0, [sp, #0x34] + str r0, [r5, #0x0] + ldr r0, [sp, #0x18] + str r0, [r5, #0x4] + b _020E25DC +_020E25B4: + ldr r0, [sp, #0x3c] + str r0, [r5, #0x0] + b _020E25DC +_020E25C0: + ldr r0, [sp, #0x3c] + str r0, [r5, #0x0] + b _020E25DC +_020E25CC: + ldr r0, [sp, #0x34] + str r0, [r5, #0x0] + ldr r0, [sp, #0x18] + str r0, [r5, #0x4] +_020E25DC: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + ldreq r0, [sp, #0x44] + addeq r0, r0, #0x1 + streq r0, [sp, #0x44] +_020E25F0: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E2600: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + beq _020E261C + ldr r0, _020E2C78 ; =0x02106B78 + ldr r0, [r0, #0x0] + bl _f2d + b _020E2668 +_020E261C: + add r0, sp, #0x54 + str r0, [sp, #0x0] + ldr r0, [sp, #0x64] + mov r1, r9 + mov r2, r8 + add r3, sp, #0x5c + bl __strtold + ldr r2, [sp, #0x5c] + cmp r2, #0x0 + bne _020E2664 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + ldr r0, _020E2C78 ; =0x02106B78 + ldr r0, [r0, #0x0] + bl _f2d +_020E2660: ; 0x020E2660 + b _020E2668 +_020E2664: + add r4, r4, r2 +_020E2668: + cmp r5, #0x0 + beq _020E26B4 + ldrb r2, [sp, #0x62] + cmp r2, #0x0 + beq _020E2690 + cmp r2, #0x8 + beq _020E269C + cmp r2, #0x9 + stmeqia r5, {r0-r1} + b _020E26A0 +_020E2690: + bl _d2f +_020E2694: ; 0x020E2694 + str r0, [r5, #0x0] + b _020E26A0 +_020E269C: + stmia r5, {r0-r1} +_020E26A0: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + ldreq r0, [sp, #0x44] + addeq r0, r0, #0x1 + streq r0, [sp, #0x44] +_020E26B4: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E26C4: + ldrb r0, [sp, #0x61] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0x64] + cmp r5, #0x0 + beq _020E280C + cmp r10, #0x0 + beq _020E26F8 + ldr r0, [sp, #0x10] + mov r7, #0x1 + add r0, r0, #0x4 + ldr r11, [r0, #-0x4] + str r0, [sp, #0x10] +_020E26F8: + ldr r0, [sp, #0x30] + mov r1, #0x0 + cmp r0, #0x0 + str r1, [sp, #0x5c] + beq _020E2718 + cmp r11, #0x0 + strneb r1, [r5, #0x0] + b _020E2C2C +_020E2718: + mvn r0, #0x0 + str r5, [sp, #0x2c] + str r0, [sp, #0x48] + b _020E2760 +_020E2728: + ldrb r0, [sp, #0x62] + strb r6, [sp, #0x50] + cmp r0, #0xa + ldrnesb r0, [sp, #0x50] + strneb r0, [r5], #0x1 + bne _020E2754 + mov r0, r5 + add r1, sp, #0x50 + mov r2, #0x1 + bl mbtowc + add r5, r5, #0x1 +_020E2754: + ldr r0, [sp, #0x5c] + add r1, r0, #0x1 + str r1, [sp, #0x5c] +_020E2760: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + sub r0, r0, #0x1 + str r0, [sp, #0x64] + beq _020E27B0 + cmp r10, #0x0 + beq _020E2790 + cmp r11, r1 + movhi r7, #0x1 + movls r7, #0x0 + cmp r7, #0x0 + beq _020E27B0 +_020E2790: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r6, r0 + ldr r0, [sp, #0x48] + cmp r6, r0 + bne _020E2728 +_020E27B0: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + beq _020E27D0 + cmp r10, #0x0 + beq _020E27F8 + cmp r7, #0x0 + bne _020E27F8 +_020E27D0: + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + cmp r11, #0x0 + str r0, [sp, #0x30] + beq _020E2C2C + ldr r0, [sp, #0x2c] + mov r1, #0x0 + strb r1, [r0, #0x0] + b _020E2C2C +_020E27F8: + add r4, r4, r0 + ldr r0, [sp, #0x44] + add r0, r0, #0x1 + str r0, [sp, #0x44] + b _020E286C +_020E280C: + mov r0, #0x0 + str r0, [sp, #0x5c] + mvn r5, #0x0 + b _020E282C +_020E281C: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + add r0, r0, #0x1 + str r0, [sp, #0x5c] +_020E282C: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + sub r0, r0, #0x1 + str r0, [sp, #0x64] + beq _020E285C + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r6, r0 + cmp r6, r5 + bne _020E281C +_020E285C: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + beq _020E2C3C +_020E286C: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E287C: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E2C2C + ldr r5, _020E2C74 ; =0x0210430C + b _020E2894 +_020E2890: + add r4, r4, #0x1 +_020E2894: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + strb r0, [sp, #0x50] + ldrsb r1, [sp, #0x50] + cmp r1, #0x0 + blt _020E28BC + cmp r1, #0x80 + blt _020E28C4 +_020E28BC: + mov r0, #0x0 + b _020E28D0 +_020E28C4: + mov r0, r1, lsl #0x1 + ldrh r0, [r5, r0] + and r0, r0, #0x100 +_020E28D0: + cmp r0, #0x0 + bne _020E2890 + cmp r1, #0x25 + beq _020E2900 + mov r0, r8 + mov r2, #0x1 + blx r9 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + b _020E2C2C +_020E2900: + add r4, r4, #0x1 + b _020E2C2C +_020E2908: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E2984 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + strb r0, [sp, #0x50] + b _020E2944 +_020E292C: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + strb r0, [sp, #0x50] +_020E2944: + ldrsb r1, [sp, #0x50] + cmp r1, #0x0 + blt _020E2958 + cmp r1, #0x80 + blt _020E2960 +_020E2958: + mov r0, #0x0 + b _020E2970 +_020E2960: + ldr r0, _020E2C74 ; =0x0210430C + mov r2, r1, lsl #0x1 + ldrh r0, [r0, r2] + and r0, r0, #0x100 +_020E2970: + cmp r0, #0x0 + bne _020E292C + mov r0, r8 + mov r2, #0x1 + blx r9 +_020E2984: + cmp r5, #0x0 + beq _020E2B00 + cmp r10, #0x0 + beq _020E29AC + ldr r0, [sp, #0x10] + mov r7, #0x1 + add r0, r0, #0x4 + str r0, [sp, #0x10] + ldr r0, [r0, #-0x4] + sub r11, r0, #0x1 +_020E29AC: + ldr r0, [sp, #0x30] + mov r1, #0x0 + cmp r0, #0x0 + str r1, [sp, #0x5c] + beq _020E29CC + cmp r11, #0x0 + strneb r1, [r5, #0x0] + b _020E2C2C +_020E29CC: + mvn r0, #0x0 + str r5, [sp, #0x28] + str r0, [sp, #0x4c] + b _020E2A30 +_020E29DC: + strb r6, [sp, #0x50] + ldrsb r1, [sp, #0x50] + add r2, sp, #0x60 + and r3, r1, #0xff + add r2, r2, r3, asr #0x3 + ldrb r3, [r2, #0x8] + and r0, r1, #0x7 + mov r2, #0x1 + tst r3, r2, lsl r0 + beq _020E2A80 + ldrb r0, [sp, #0x62] + cmp r0, #0xa + strneb r1, [r5], #0x1 + bne _020E2A24 + mov r0, r5 + add r1, sp, #0x50 + bl mbtowc + add r5, r5, #0x2 +_020E2A24: + ldr r0, [sp, #0x5c] + add r1, r0, #0x1 + str r1, [sp, #0x5c] +_020E2A30: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + sub r0, r0, #0x1 + str r0, [sp, #0x64] + beq _020E2A80 + cmp r10, #0x0 + beq _020E2A60 + cmp r11, r1 + movcs r7, #0x1 + movcc r7, #0x0 + cmp r7, #0x0 + beq _020E2A80 +_020E2A60: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r6, r0 + ldr r0, [sp, #0x4c] + cmp r6, r0 + bne _020E29DC +_020E2A80: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + beq _020E2AA0 + cmp r10, #0x0 + beq _020E2AD8 + cmp r7, #0x0 + bne _020E2AD8 +_020E2AA0: + mov r0, r8 + ldrsb r1, [sp, #0x50] + mov r2, #0x1 + blx r9 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + cmp r11, #0x0 + str r0, [sp, #0x30] + beq _020E2C2C + ldr r0, [sp, #0x28] + mov r1, #0x0 + strb r1, [r0, #0x0] + b _020E2C2C +_020E2AD8: + add r4, r4, r0 + ldrb r0, [sp, #0x62] + cmp r0, #0xa + mov r0, #0x0 + streqh r0, [r5, #0x0] + strneb r0, [r5, #0x0] + ldr r0, [sp, #0x44] + add r0, r0, #0x1 + str r0, [sp, #0x44] + b _020E2B9C +_020E2B00: + mov r0, #0x0 + str r0, [sp, #0x5c] + mvn r5, #0x0 + b _020E2B44 +_020E2B10: + strb r6, [sp, #0x50] + ldrsb r1, [sp, #0x50] + and r0, r1, #0x7 + and r2, r1, #0xff + add r1, sp, #0x60 + add r1, r1, r2, asr #0x3 + ldrb r2, [r1, #0x8] + mov r1, #0x1 + tst r2, r1, lsl r0 + beq _020E2B74 + ldr r0, [sp, #0x5c] + add r0, r0, #0x1 + str r0, [sp, #0x5c] +_020E2B44: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + sub r0, r0, #0x1 + str r0, [sp, #0x64] + beq _020E2B74 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r6, r0 + cmp r6, r5 + bne _020E2B10 +_020E2B74: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + bne _020E2B98 + mov r0, r8 + ldrsb r1, [sp, #0x50] + mov r2, #0x1 + blx r9 + b _020E2C2C +_020E2B98: + add r4, r4, r0 +_020E2B9C: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + blt _020E2BB8 + mov r0, r8 + ldrsb r1, [sp, #0x50] + mov r2, #0x1 + blx r9 +_020E2BB8: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E2BC8: + cmp r5, #0x0 + beq _020E2C2C + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + addls pc, pc, r0, lsl #0x2 + b _020E2C2C +_020E2BE0: + b _020E2C00 +_020E2BE4: + b _020E2C18 +_020E2BE8: + b _020E2C08 +_020E2BEC: + b _020E2C10 +_020E2BF0: + b _020E2C2C +_020E2BF4: + b _020E2C2C +_020E2BF8: + b _020E2C2C +_020E2BFC: + b _020E2C20 +_020E2C00: + str r4, [r5, #0x0] + b _020E2C2C +_020E2C08: + strh r4, [r5, #0x0] + b _020E2C2C +_020E2C10: + str r4, [r5, #0x0] + b _020E2C2C +_020E2C18: + strb r4, [r5, #0x0] + b _020E2C2C +_020E2C20: + str r4, [r5, #0x0] + mov r0, r4, asr #0x1f + str r0, [r5, #0x4] +_020E2C2C: + ldr r0, [sp, #0xc] + ldrsb r5, [r0, #0x0] + cmp r5, #0x0 + bne _020E1F70 +_020E2C3C: + mov r0, r8 + mov r1, #0x0 + mov r2, #0x2 + blx r9 + cmp r0, #0x0 + beq _020E2C68 + ldr r0, [sp, #0x40] + cmp r0, #0x0 + addeq sp, sp, #0x88 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,pc} +_020E2C68: + ldr r0, [sp, #0x44] + add sp, sp, #0x88 + ldmia sp!, {r3-r11,pc} + .balign 4 +_020E2C74: .word 0x0210430C +_020E2C78: .word 0x02106B78 + + arm_func_start __StringRead +__StringRead: ; 0x020E2C7C + cmp r2, #0x0 + beq _020E2C98 + cmp r2, #0x1 + beq _020E2CC8 + cmp r2, #0x2 + beq _020E2CF0 + b _020E2CF8 +_020E2C98: + ldr r1, [r0, #0x0] + ldrsb r2, [r1, #0x0] + cmp r2, #0x0 + bne _020E2CB8 + mov r1, #0x1 + str r1, [r0, #0x4] + sub r0, r1, #0x2 + bx lr +_020E2CB8: + add r1, r1, #0x1 + str r1, [r0, #0x0] + and r0, r2, #0xff + bx lr +_020E2CC8: + ldr r2, [r0, #0x4] + cmp r2, #0x0 + movne r2, #0x0 + strne r2, [r0, #0x4] + bne _020E2CE8 + ldr r2, [r0, #0x0] + sub r2, r2, #0x1 + str r2, [r0, #0x0] +_020E2CE8: + mov r0, r1 + bx lr +_020E2CF0: + ldr r0, [r0, #0x4] + bx lr +_020E2CF8: + mov r0, #0x0 + bx lr + + arm_func_start vsscanf +vsscanf: ; 0x020E2D00 + stmdb sp!, {lr} + sub sp, sp, #0xc + str r0, [sp, #0x4] + cmp r0, #0x0 + ldrnesb r0, [r0, #0x0] + mov lr, r1 + mov r3, r2 + cmpne r0, #0x0 + addeq sp, sp, #0xc + mvneq r0, #0x0 + ldmeqia sp!, {pc} + mov r12, #0x0 + str r12, [sp, #0x8] + ldr r0, _020E2D50 ; =__StringRead + add r1, sp, #0x4 + mov r2, lr + str r12, [sp, #0x0] + bl __sformatter + add sp, sp, #0xc + ldmia sp!, {pc} + .balign 4 +_020E2D50: .word __StringRead + + arm_func_start sscanf +sscanf: ; 0x020E2D54 + stmdb sp!, {r0-r3} + stmdb sp!, {r3,lr} + add r2, sp, #0xc + bic r2, r2, #0x3 + ldr r1, [sp, #0xc] + add r2, r2, #0x4 + bl vsscanf + ldmia sp!, {r3,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start raise +raise: ; 0x020E2D7C + stmdb sp!, {r3-r5,lr} + mov r5, r0 + cmp r5, #0x1 + blt _020E2D94 + cmp r5, #0x7 + ble _020E2D9C +_020E2D94: + mvn r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E2D9C: + ldr r0, _020E2E98 ; =0x021D7178 + bl OS_TryLockMutex +_020E2DA4: ; 0x020E2DA4 + cmp r0, #0x0 + bne _020E2DD0 + ldr r0, _020E2E9C ; =0x021D3498 + ldr r1, _020E2EA0 ; =0x021D7088 + ldr r2, [r0, #0x4] + ldr r0, _020E2EA4 ; =0x021D70AC + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0x1c] + str r2, [r0, #0x1c] + b _020E2E28 +_020E2DD0: + ldr r0, _020E2E9C ; =0x021D3498 + ldr r1, _020E2EA0 ; =0x021D7088 + ldr r0, [r0, #0x4] + ldr r1, [r1, #0x1c] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020E2E00 + ldr r0, _020E2EA4 ; =0x021D70AC + ldr r1, [r0, #0x1c] + add r1, r1, #0x1 + str r1, [r0, #0x1c] + b _020E2E28 +_020E2E00: + ldr r0, _020E2E98 ; =0x021D7178 + bl OS_LockMutex + ldr r0, _020E2E9C ; =0x021D3498 + ldr r1, _020E2EA0 ; =0x021D7088 + ldr r2, [r0, #0x4] + ldr r0, _020E2EA4 ; =0x021D70AC + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0x1c] + str r2, [r0, #0x1c] +_020E2E28: + ldr r1, _020E2EA8 ; =0x021D74AC + sub r2, r5, #0x1 + ldr r4, [r1, r2, lsl #0x2] + cmp r4, #0x1 + movne r0, #0x0 + strne r0, [r1, r2, lsl #0x2] + ldr r0, _020E2EA4 ; =0x021D70AC + ldr r1, [r0, #0x1c] + subs r1, r1, #0x1 + str r1, [r0, #0x1c] + bne _020E2E5C + ldr r0, _020E2E98 ; =0x021D7178 + bl OS_UnlockMutex +_020E2E5C: + cmp r4, #0x1 + beq _020E2E70 + cmp r4, #0x0 + cmpeq r5, #0x1 + bne _020E2E78 +_020E2E70: + mov r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E2E78: + cmp r4, #0x0 + bne _020E2E88 + mov r0, #0x0 + bl exit +_020E2E88: + mov r0, r5 + blx r4 + mov r0, #0x0 + ldmia sp!, {r3-r5,pc} + .balign 4 +_020E2E98: .word 0x021D7178 +_020E2E9C: .word 0x021D3498 +_020E2EA0: .word 0x021D7088 +_020E2EA4: .word 0x021D70AC +_020E2EA8: .word 0x021D74AC + + arm_func_start strlen +strlen: ; 0x020E2EAC + mvn r2, #0x0 +_020E2EB0: + ldrsb r1, [r0], #0x1 + add r2, r2, #0x1 + cmp r1, #0x0 + bne _020E2EB0 + mov r0, r2 + bx lr + + arm_func_start strcpy +strcpy: ; 0x020E2EC8 + stmdb sp!, {r3-r5,lr} + and r4, r1, #0x3 + and r3, r0, #0x3 + mov r2, r0 + cmp r3, r4 + bne _020E2F64 + cmp r4, #0x0 + beq _020E2F20 + ldrb r3, [r1, #0x0] + strb r3, [r0, #0x0] + cmp r3, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020E2EF8: ; 0x020E2EF8 + rsbs r4, r4, #0x3 + beq _020E2F18 +_020E2F00: + ldrb r3, [r1, #0x1]! + cmp r3, #0x0 + strb r3, [r2, #0x1]! + ldmeqia sp!, {r3-r5,pc} +_020E2F10: ; 0x020E2F10 + subs r4, r4, #0x1 + bne _020E2F00 +_020E2F18: + add r2, r2, #0x1 + add r1, r1, #0x1 +_020E2F20: + ldr r5, [r1, #0x0] + ldr r3, _020E2F88 ; =0xFEFEFEFF + mvn r4, r5 + add lr, r5, r3 + ldr ip, _020E2F8C ; =0x80808080 + and r4, lr, r4 + tst r4, r12 + bne _020E2F64 + sub r2, r2, #0x4 +_020E2F44: + str r5, [r2, #0x4]! + ldr r5, [r1, #0x4]! + add r4, r5, r3 + mvn lr, r5 + and lr, r4, lr + tst lr, r12 + beq _020E2F44 + add r2, r2, #0x4 +_020E2F64: + ldrb r3, [r1, #0x0] + strb r3, [r2, #0x0] + cmp r3, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020E2F74: + ldrb r3, [r1, #0x1]! + cmp r3, #0x0 + strb r3, [r2, #0x1]! + bne _020E2F74 + ldmia sp!, {r3-r5,pc} + .balign 4 +_020E2F88: .word 0xFEFEFEFF +_020E2F8C: .word 0x80808080 + + arm_func_start strncpy +strncpy: ; 0x020E2F90 + stmdb sp!, {r3,lr} + mov lr, r0 + cmp r2, #0x0 + ldmeqia sp!, {r3,pc} +_020E2FA0: + ldrsb r3, [r1], #0x1 + mov r12, lr + strb r3, [lr], #0x1 + ldrsb r3, [r12, #0x0] + cmp r3, #0x0 + bne _020E2FD4 + subs r2, r2, #0x1 + ldmeqia sp!, {r3,pc} +_020E2FC0: ; 0x020E2FC0 + mov r1, #0x0 +_020E2FC4: + strb r1, [lr], #0x1 + subs r2, r2, #0x1 + bne _020E2FC4 + ldmia sp!, {r3,pc} +_020E2FD4: + subs r2, r2, #0x1 + bne _020E2FA0 + ldmia sp!, {r3,pc} + + arm_func_start strcat +strcat: ; 0x020E2FE0 + mov r3, r0 +_020E2FE4: + ldrsb r2, [r3], #0x1 + cmp r2, #0x0 + bne _020E2FE4 + sub r3, r3, #0x1 +_020E2FF4: + ldrsb r2, [r1], #0x1 + mov r12, r3 + strb r2, [r3], #0x1 + ldrsb r2, [r12, #0x0] + cmp r2, #0x0 + bne _020E2FF4 + bx lr + + arm_func_start strncat +strncat: ; 0x020E3010 + stmdb sp!, {r3,lr} + mov r12, r0 +_020E3018: + ldrsb r3, [r12], #0x1 + cmp r3, #0x0 + bne _020E3018 + cmp r2, #0x0 + sub r12, r12, #0x1 + beq _020E3054 +_020E3030: + ldrsb r3, [r1], #0x1 + mov lr, r12 + strb r3, [r12], #0x1 + ldrsb r3, [lr, #0x0] + cmp r3, #0x0 + subeq r12, r12, #0x1 + beq _020E3054 + subs r2, r2, #0x1 + bne _020E3030 +_020E3054: + mov r1, #0x0 + strb r1, [r12, #0x0] + ldmia sp!, {r3,pc} + + arm_func_start strcmp +strcmp: ; 0x020E3060 + stmdb sp!, {r4,lr} + ldrb r2, [r0, #0x0] + ldrb r3, [r1, #0x0] + subs r3, r2, r3 + movne r0, r3 + ldmneia sp!, {r4,pc} +_020E3078: ; 0x020E3078 + and r4, r0, #0x3 + and r3, r1, #0x3 + cmp r3, r4 + bne _020E313C + cmp r4, #0x0 + beq _020E30D4 + cmp r2, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020E309C: ; 0x020E309C + rsbs r4, r4, #0x3 + beq _020E30CC +_020E30A4: + ldrb r3, [r0, #0x1]! + ldrb r2, [r1, #0x1]! + subs r2, r3, r2 + movne r0, r2 + ldmneia sp!, {r4,pc} +_020E30B8: ; 0x020E30B8 + cmp r3, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020E30C4: ; 0x020E30C4 + subs r4, r4, #0x1 + bne _020E30A4 +_020E30CC: + add r0, r0, #0x1 + add r1, r1, #0x1 +_020E30D4: + ldr r2, [r0, #0x0] + ldr r3, _020E316C ; =0xFEFEFEFF + mvn r4, r2 + add lr, r2, r3 + ldr ip, _020E3170 ; =0x80808080 + and r4, lr, r4 + tst r4, r12 + ldr r4, [r1, #0x0] + bne _020E3128 + cmp r2, r4 + bne _020E311C +_020E3100: + ldr r2, [r0, #0x4]! + ldr r4, [r1, #0x4]! + add lr, r2, r3 + tst lr, r12 + bne _020E3128 + cmp r2, r4 + beq _020E3100 +_020E311C: + sub r0, r0, #0x1 + sub r1, r1, #0x1 + b _020E313C +_020E3128: + ldrb r2, [r0, #0x0] + ldrb r3, [r1, #0x0] + subs r3, r2, r3 + movne r0, r3 + ldmneia sp!, {r4,pc} +_020E313C: + cmp r2, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020E3148: + ldrb r3, [r0, #0x1]! + ldrb r2, [r1, #0x1]! + subs r2, r3, r2 + movne r0, r2 + ldmneia sp!, {r4,pc} +_020E315C: ; 0x020E315C + cmp r3, #0x0 + bne _020E3148 + mov r0, #0x0 + ldmia sp!, {r4,pc} + .balign 4 +_020E316C: .word 0xFEFEFEFF +_020E3170: .word 0x80808080 + + arm_func_start strncmp +strncmp: ; 0x020E3174 + cmp r2, #0x0 + beq _020E31A0 +_020E317C: + ldrb r12, [r1], #0x1 + ldrb r3, [r0], #0x1 + cmp r3, r12 + subne r0, r3, r12 + bxne lr + cmp r3, #0x0 + beq _020E31A0 + subs r2, r2, #0x1 + bne _020E317C +_020E31A0: + mov r0, #0x0 + bx lr + + arm_func_start strchr +strchr: ; 0x020E31A8 + ldrsb r2, [r0], #0x1 + mov r1, r1, lsl #0x18 + mov r1, r1, asr #0x18 + cmp r2, #0x0 + beq _020E31D4 +_020E31BC: + cmp r2, r1 + subeq r0, r0, #0x1 + bxeq lr + ldrsb r2, [r0], #0x1 + cmp r2, #0x0 + bne _020E31BC +_020E31D4: + cmp r1, #0x0 + movne r0, #0x0 + subeq r0, r0, #0x1 + bx lr + + arm_func_start strspn +strspn: ; 0x020E31E4 + stmdb sp!, {r4,lr} + sub sp, sp, #0x20 + add r12, sp, #0x0 + mov r3, #0x8 + mov r2, #0x0 +_020E31F8: + strb r2, [r12, #0x0] + strb r2, [r12, #0x1] + strb r2, [r12, #0x2] + strb r2, [r12, #0x3] + add r12, r12, #0x4 + subs r3, r3, #0x1 + bne _020E31F8 + ldrb r3, [r1, #0x0] + add r4, r1, #0x1 + cmp r3, #0x0 + beq _020E3254 + add lr, sp, #0x0 + mov r2, #0x1 +_020E322C: + and r12, r3, #0xff + and r1, r3, #0x7 + mov r1, r2, lsl r1 + ldrb r3, [lr, r12, asr #0x3] + and r1, r1, #0xff + orr r1, r3, r1 + strb r1, [lr, r12, asr #0x3] + ldrb r3, [r4], #0x1 + cmp r3, #0x0 + bne _020E322C +_020E3254: + ldrb r1, [r0, #0x0] + add r4, r0, #0x1 + cmp r1, #0x0 + beq _020E3294 + add r12, sp, #0x0 + mov r2, #0x1 +_020E326C: + and r3, r1, #0xff + and r1, r1, #0x7 + mov r1, r2, lsl r1 + ldrb r3, [r12, r3, asr #0x3] + and r1, r1, #0xff + tst r3, r1 + bne _020E3294 + ldrb r1, [r4], #0x1 + cmp r1, #0x0 + bne _020E326C +_020E3294: + sub r0, r4, r0 + sub r0, r0, #0x1 + add sp, sp, #0x20 + ldmia sp!, {r4,pc} + + arm_func_start strstr +strstr: ; 0x020E32A4 + stmdb sp!, {r4,lr} + cmp r1, #0x0 + ldrneb r2, [r1, #0x0] + cmpne r2, #0x0 + ldmeqia sp!, {r4,pc} +_020E32B8: ; 0x020E32B8 + ldrb r3, [r0, #0x0] + add r4, r0, #0x1 + cmp r3, #0x0 + beq _020E3308 +_020E32C8: + cmp r3, r2 + bne _020E32FC + mov lr, r4 + add r12, r1, #0x1 +_020E32D8: + ldrb r3, [r12], #0x1 + ldrb r0, [lr], #0x1 + cmp r0, r3 + bne _020E32F0 + cmp r0, #0x0 + bne _020E32D8 +_020E32F0: + cmp r3, #0x0 + subeq r0, r4, #0x1 + ldmeqia sp!, {r4,pc} +_020E32FC: + ldrb r3, [r4], #0x1 + cmp r3, #0x0 + bne _020E32C8 +_020E3308: + mov r0, #0x0 + ldmia sp!, {r4,pc} + + arm_func_start __strtold +__strtold: ; 0x020E3310 + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0xa8 + ldr r4, [sp, #0xd0] + mov r10, #0x0 + str r4, [sp, #0xd0] + str r0, [sp, #0x0] + add r6, sp, #0x80 + mov r9, r1 + mov r8, r2 + str r3, [sp, #0x4] + mov r4, r10 + str r10, [sp, #0x2c] + mov r5, #0x1 + mov r0, #0x4 +_020E3348: + strh r10, [r6, #0x0] + strh r10, [r6, #0x2] + strh r10, [r6, #0x4] + strh r10, [r6, #0x6] + add r6, r6, #0x8 + subs r0, r0, #0x1 + bne _020E3348 + mov r0, #0x0 + str r0, [sp, #0x28] + strh r10, [r6, #0x0] + strh r10, [r6, #0x2] + ldr r2, [sp, #0x28] + ldr r1, [sp, #0xd0] + strh r10, [r6, #0x4] + str r2, [r1, #0x0] + mov r1, r2 + mov r0, r8 + str r1, [sp, #0x24] + str r1, [sp, #0x20] + str r1, [sp, #0x1c] + str r1, [sp, #0x18] + str r1, [sp, #0x10] + str r1, [sp, #0xc] + str r1, [sp, #0x8] + add r4, r4, #0x1 + blx r9 + mov r1, r0 + ldr r7, _020E42F0 ; =0x02104439 + add r0, sp, #0x4d + mov r6, #0x4 +_020E33C0: + ldrb r3, [r7, #0x0] + ldrb r2, [r7, #0x1] + add r7, r7, #0x2 + strb r3, [r0, #0x0] + strb r2, [r0, #0x1] + add r0, r0, #0x2 + subs r6, r6, #0x1 + bne _020E33C0 + ldrb r3, [r7, #0x0] + ldr r2, _020E42F4 ; =0x02104434 + strb r3, [r0, #0x0] + ldrb r3, [r2, #0x1] + ldrb r0, [r2, #0x2] + ldrb r6, [r2, #0x0] + strb r3, [sp, #0x31] + strb r0, [sp, #0x32] + ldrb r3, [r2, #0x3] + ldrb r0, [r2, #0x4] + strb r6, [sp, #0x30] + strb r3, [sp, #0x33] + strb r0, [sp, #0x34] + b _020E4104 +_020E3418: + cmp r5, #0x100 + bgt _020E3490 + bge _020E3B98 + cmp r5, #0x20 + bgt _020E3474 + bge _020E3A6C + cmp r5, #0x8 + bgt _020E3468 + cmp r5, #0x0 + addge pc, pc, r5, lsl #0x2 + b _020E4104 +_020E3444: ; 0x020E3444 + b _020E4104 +_020E3448: ; 0x020E3448 + b _020E34D4 +_020E344C: ; 0x020E344C + b _020E38B8 +_020E3450: ; 0x020E3450 + b _020E4104 +_020E3454: ; 0x020E3454 + b _020E3968 +_020E3458: ; 0x020E3458 + b _020E4104 +_020E345C: ; 0x020E345C + b _020E4104 +_020E3460: ; 0x020E3460 + b _020E4104 +_020E3464: ; 0x020E3464 + b _020E3990 +_020E3468: + cmp r5, #0x10 + beq _020E3A34 + b _020E4104 +_020E3474: + cmp r5, #0x40 + bgt _020E3484 + beq _020E3AF8 + b _020E4104 +_020E3484: + cmp r5, #0x80 + beq _020E3B44 + b _020E4104 +_020E3490: + cmp r5, #0x2000 + bgt _020E34B8 + bge _020E36EC + cmp r5, #0x200 + bgt _020E34AC + beq _020E3BF8 + b _020E4104 +_020E34AC: + cmp r5, #0x400 + beq _020E3C20 + b _020E4104 +_020E34B8: + cmp r5, #0x4000 + bgt _020E34C8 + beq _020E35F4 + b _020E4104 +_020E34C8: + cmp r5, #0x8000 + beq _020E3C98 + b _020E4104 +_020E34D4: + cmp r1, #0x0 + blt _020E34E4 + cmp r1, #0x80 + blt _020E34EC +_020E34E4: + mov r0, #0x0 + b _020E34FC +_020E34EC: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x100 +_020E34FC: + cmp r0, #0x0 + beq _020E3528 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r1, r0 + ldr r0, [sp, #0x2c] + add r0, r0, #0x1 + str r0, [sp, #0x2c] + b _020E4104 +_020E3528: + cmp r1, #0x0 + blt _020E3538 + cmp r1, #0x80 + blt _020E3540 +_020E3538: + mov r0, r1 + b _020E3548 +_020E3540: + ldr r0, _020E42FC ; =0x0210428C + ldrb r0, [r0, r1] +_020E3548: + cmp r0, #0x49 + bgt _020E3574 + bge _020E35AC + cmp r0, #0x2d + bgt _020E35EC + cmp r0, #0x2b + blt _020E35EC + beq _020E3588 + cmp r0, #0x2d + beq _020E3580 + b _020E35EC +_020E3574: + cmp r0, #0x4e + beq _020E35CC + b _020E35EC +_020E3580: + mov r0, #0x1 + str r0, [sp, #0x28] +_020E3588: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + mov r0, #0x1 + str r0, [sp, #0x18] + b _020E4104 +_020E35AC: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + mov r5, #0x4000 + b _020E4104 +_020E35CC: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + mov r5, #0x2000 + b _020E4104 +_020E35EC: + mov r5, #0x2 + b _020E4104 +_020E35F4: + mov r5, #0x1 + add r7, sp, #0x4d + add r0, sp, #0x76 + mov r6, #0x4 +_020E3604: + ldrb r3, [r7, #0x0] + ldrb r2, [r7, #0x1] + add r7, r7, #0x2 + strb r3, [r0, #0x0] + strb r2, [r0, #0x1] + add r0, r0, #0x2 + subs r6, r6, #0x1 + bne _020E3604 + ldrb r2, [r7, #0x0] + add r6, sp, #0x77 + ldr r7, _020E42FC ; =0x0210428C + strb r2, [r0, #0x0] + b _020E3658 +_020E3638: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r6, r6, #0x1 + add r5, r5, #0x1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 +_020E3658: + cmp r5, #0x8 + bge _020E3688 + cmp r1, #0x0 + blt _020E3670 + cmp r1, #0x80 + blt _020E3678 +_020E3670: + mov r2, r1 + b _020E367C +_020E3678: + ldrb r2, [r7, r1] +_020E367C: + ldrsb r0, [r6, #0x0] + cmp r0, r2 + beq _020E3638 +_020E3688: + cmp r5, #0x3 + cmpne r5, #0x8 + bne _020E36E4 + ldr r0, [sp, #0x28] + cmp r0, #0x0 + beq _020E36B8 + ldr r1, _020E4300 ; =0x02106B74 + mov r0, #0x0 + ldr r1, [r1, #0x0] + bl _fsub + bl _f2d + b _020E36C4 +_020E36B8: + ldr r0, _020E4300 ; =0x02106B74 + ldr r0, [r0, #0x0] + bl _f2d +_020E36C4: + ldr r2, [sp, #0x2c] + add r3, r2, r5 + ldr r2, [sp, #0x18] + add r3, r2, r3 + ldr r2, [sp, #0x4] + add sp, sp, #0xa8 + str r3, [r2, #0x0] + ldmia sp!, {r3-r11,pc} +_020E36E4: + mov r5, #0x1000 + b _020E4104 +_020E36EC: + ldrb r3, [sp, #0x30] + ldrb r0, [sp, #0x32] + ldrb r2, [sp, #0x31] + strb r3, [sp, #0x40] + strb r0, [sp, #0x42] + ldrb r3, [sp, #0x33] + ldrb r0, [sp, #0x34] + strb r2, [sp, #0x41] + mov r5, #0x1 + strb r0, [sp, #0x44] + mov r6, #0x0 + add r2, sp, #0x56 + strb r3, [sp, #0x43] + mov r0, #0x8 +_020E3724: + strb r6, [r2, #0x0] + strb r6, [r2, #0x1] + strb r6, [r2, #0x2] + strb r6, [r2, #0x3] + add r2, r2, #0x4 + subs r0, r0, #0x1 + bne _020E3724 + add r7, sp, #0x41 + b _020E3768 +_020E3748: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r7, r7, #0x1 + add r5, r5, #0x1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 +_020E3768: + cmp r5, #0x4 + bge _020E379C + cmp r1, #0x0 + blt _020E3780 + cmp r1, #0x80 + blt _020E3788 +_020E3780: + mov r2, r1 + b _020E3790 +_020E3788: + ldr r0, _020E42FC ; =0x0210428C + ldrb r2, [r0, r1] +_020E3790: + ldrsb r0, [r7, #0x0] + cmp r0, r2 + beq _020E3748 +_020E379C: + sub r0, r5, #0x3 + cmp r0, #0x1 + bhi _020E38B0 + cmp r5, #0x4 + bne _020E3854 + ldr r7, _020E42F8 ; =0x0210430C + b _020E37DC +_020E37B8: + add r0, sp, #0x56 + strb r1, [r0, r6] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r6, r6, #0x1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 +_020E37DC: + cmp r6, #0x20 + bge _020E3844 + cmp r1, #0x0 + blt _020E37F4 + cmp r1, #0x80 + blt _020E37FC +_020E37F4: + mov r0, #0x0 + b _020E3808 +_020E37FC: + mov r0, r1, lsl #0x1 + ldrh r0, [r7, r0] + and r0, r0, #0x8 +_020E3808: + cmp r0, #0x0 + bne _020E37B8 + cmp r1, #0x0 + blt _020E3820 + cmp r1, #0x80 + blt _020E3828 +_020E3820: + mov r0, #0x0 + b _020E3834 +_020E3828: + mov r0, r1, lsl #0x1 + ldrh r0, [r7, r0] + and r0, r0, #0x1 +_020E3834: + cmp r0, #0x0 + bne _020E37B8 + cmp r1, #0x2e + beq _020E37B8 +_020E3844: + cmp r1, #0x29 + movne r5, #0x1000 + bne _020E4104 + add r6, r6, #0x1 +_020E3854: + add r0, sp, #0x56 + mov r1, #0x0 + strb r1, [r0, r6] + ldr r1, [sp, #0x28] + cmp r1, #0x0 + beq _020E3888 + bl nan + mov r2, r0 + mov r0, #0x0 + mov r3, r1 + mov r1, r0 + bl _dsub +_020E3884: ; 0x020E3884 + b _020E388C +_020E3888: + bl nan +_020E388C: + ldr r2, [sp, #0x2c] + add r2, r2, r5 + add r3, r6, r2 + ldr r2, [sp, #0x18] + add r3, r2, r3 + ldr r2, [sp, #0x4] + add sp, sp, #0xa8 + str r3, [r2, #0x0] + ldmia sp!, {r3-r11,pc} +_020E38B0: + mov r5, #0x1000 + b _020E4104 +_020E38B8: + cmp r1, #0x2e + bne _020E38E0 + mov r5, #0x10 + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E38E0: + cmp r1, #0x0 + blt _020E38F0 + cmp r1, #0x80 + blt _020E38F8 +_020E38F0: + mov r0, #0x0 + b _020E3908 +_020E38F8: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3908: + cmp r0, #0x0 + moveq r5, #0x1000 + beq _020E4104 + cmp r1, #0x30 + bne _020E3960 + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + cmp r0, #0x0 + mov r1, r0 + blt _020E394C + cmp r0, #0x80 + bge _020E394C + ldr r2, _020E42FC ; =0x0210428C + ldrb r0, [r2, r0] +_020E394C: + cmp r0, #0x58 + moveq r5, #0x8000 + moveq r10, #0x1 + movne r5, #0x4 + b _020E4104 +_020E3960: + mov r5, #0x8 + b _020E4104 +_020E3968: + cmp r1, #0x30 + movne r5, #0x8 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3990: + cmp r1, #0x0 + blt _020E39A0 + cmp r1, #0x80 + blt _020E39A8 +_020E39A0: + mov r0, #0x0 + b _020E39B8 +_020E39A8: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E39B8: + cmp r0, #0x0 + bne _020E39EC + cmp r1, #0x2e + movne r5, #0x40 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r5, #0x20 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E39EC: + ldrb r2, [sp, #0x84] + cmp r2, #0x14 + ldrcs r0, [sp, #0x1c] + addcs r0, r0, #0x1 + strcs r0, [sp, #0x1c] + bhs _020E3A18 + add r0, r2, #0x1 + strb r0, [sp, #0x84] + add r0, sp, #0x80 + add r0, r0, r2 + strb r1, [r0, #0x5] +_020E3A18: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3A34: + cmp r1, #0x0 + blt _020E3A44 + cmp r1, #0x80 + blt _020E3A4C +_020E3A44: + mov r0, #0x0 + b _020E3A5C +_020E3A4C: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3A5C: + cmp r0, #0x0 + moveq r5, #0x1000 + movne r5, #0x20 + b _020E4104 +_020E3A6C: + cmp r1, #0x0 + blt _020E3A7C + cmp r1, #0x80 + blt _020E3A84 +_020E3A7C: + mov r0, #0x0 + b _020E3A94 +_020E3A84: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3A94: + cmp r0, #0x0 + moveq r5, #0x40 + beq _020E4104 + ldrb r3, [sp, #0x84] + cmp r3, #0x14 + bhs _020E3ADC + cmp r1, #0x30 + cmpeq r3, #0x0 + beq _020E3AD0 + ldrb r2, [sp, #0x84] + add r0, sp, #0x80 + add r0, r0, r3 + add r2, r2, #0x1 + strb r2, [sp, #0x84] + strb r1, [r0, #0x5] +_020E3AD0: + ldr r0, [sp, #0x1c] + sub r0, r0, #0x1 + str r0, [sp, #0x1c] +_020E3ADC: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3AF8: + cmp r1, #0x0 + blt _020E3B08 + cmp r1, #0x80 + blt _020E3B10 +_020E3B08: + mov r0, r1 + b _020E3B18 +_020E3B10: + ldr r0, _020E42FC ; =0x0210428C + ldrb r0, [r0, r1] +_020E3B18: + cmp r0, #0x45 + movne r5, #0x800 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r5, #0x80 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3B44: + cmp r1, #0x2b + bne _020E3B68 + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E3B90 +_020E3B68: + cmp r1, #0x2d + bne _020E3B90 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + mov r0, #0x1 + str r0, [sp, #0x24] +_020E3B90: + mov r5, #0x100 + b _020E4104 +_020E3B98: + cmp r1, #0x0 + blt _020E3BA8 + cmp r1, #0x80 + blt _020E3BB0 +_020E3BA8: + mov r0, #0x0 + b _020E3BC0 +_020E3BB0: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3BC0: + cmp r0, #0x0 + moveq r5, #0x1000 + beq _020E4104 + cmp r1, #0x30 + movne r5, #0x400 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r5, #0x200 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3BF8: + cmp r1, #0x30 + movne r5, #0x400 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3C20: + cmp r1, #0x0 + blt _020E3C30 + cmp r1, #0x80 + blt _020E3C38 +_020E3C30: + mov r0, #0x0 + b _020E3C48 +_020E3C38: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3C48: + cmp r0, #0x0 + moveq r5, #0x800 + beq _020E4104 + ldr r0, [sp, #0x20] + sub r2, r1, #0x30 + mov r1, #0xa + mla r0, r1, r0, r2 + ldr r1, _020E4304 ; =0x00007FFF + str r0, [sp, #0x20] + cmp r0, r1 + ldrgt r0, [sp, #0xd0] + movgt r1, #0x1 + strgt r1, [r0, #0x0] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3C98: + cmp r10, #0x20 + bgt _020E3CE8 + bge _020E3FBC + cmp r10, #0x8 + bgt _020E3CDC + cmp r10, #0x0 + addge pc, pc, r10, lsl #0x2 + b _020E4104 +_020E3CB8: ; 0x020E3CB8 + b _020E4104 +_020E3CBC: ; 0x020E3CBC + b _020E3D0C +_020E3CC0: ; 0x020E3CC0 + b _020E3D5C +_020E3CC4: ; 0x020E3CC4 + b _020E4104 +_020E3CC8: ; 0x020E3CC8 + b _020E3D84 +_020E3CCC: ; 0x020E3CCC + b _020E4104 +_020E3CD0: ; 0x020E3CD0 + b _020E4104 +_020E3CD4: ; 0x020E3CD4 + b _020E4104 +_020E3CD8: ; 0x020E3CD8 + b _020E3E94 +_020E3CDC: + cmp r10, #0x10 + beq _020E3F70 + b _020E4104 +_020E3CE8: + cmp r10, #0x80 + bgt _020E3D00 + bge _020E4064 + cmp r10, #0x40 + beq _020E4004 + b _020E4104 +_020E3D00: + cmp r10, #0x100 + beq _020E408C + b _020E4104 +_020E3D0C: + mov r1, #0x0 + add r0, sp, #0x45 + str r0, [sp, #0x14] + strb r1, [r0, #0x0] + strb r1, [r0, #0x1] + strb r1, [r0, #0x2] + strb r1, [r0, #0x3] + strb r1, [r0, #0x4] + strb r1, [r0, #0x5] + strb r1, [r0, #0x6] + strb r1, [r0, #0x7] + mov r0, r8 + mov r2, r1 + str r1, [sp, #0x8] + mov r11, r1 + mov r10, #0x2 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3D5C: + cmp r1, #0x30 + movne r10, #0x4 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3D84: + cmp r1, #0x0 + blt _020E3D94 + cmp r1, #0x80 + blt _020E3D9C +_020E3D94: + mov r0, #0x0 + b _020E3DAC +_020E3D9C: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x400 +_020E3DAC: + cmp r0, #0x0 + bne _020E3DE0 + cmp r1, #0x2e + movne r10, #0x10 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r10, #0x8 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3DE0: + ldr r2, [sp, #0x8] + mov r0, #0xe + cmp r2, r0 + bhs _020E3E78 + mov r0, r2 + add r0, r0, #0x1 + str r0, [sp, #0x8] + ldr r0, [sp, #0x14] + add r2, r11, r11, lsr #0x1f + cmp r1, #0x0 + ldrb r0, [r0, r2, asr #0x1] + blt _020E3E20 + cmp r1, #0x80 + bge _020E3E20 + ldr r2, _020E42FC ; =0x0210428C + ldrb r1, [r2, r1] +_020E3E20: + cmp r1, #0x41 + subge r1, r1, #0x37 + sublt r1, r1, #0x30 + mov r2, r11, lsr #0x1f + and r3, r1, #0xff + rsb r1, r2, r11, lsl #0x1f + adds r1, r2, r1, ror #0x1f + moveq r1, r3, lsl #0x4 + add r2, r11, r11, lsr #0x1f + orrne r0, r0, r3 + andeq r1, r1, #0xff + orreq r0, r0, r1 + ldr r1, [sp, #0x14] + add r11, r11, #0x1 + strb r0, [r1, r2, asr #0x1] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3E78: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3E94: + cmp r1, #0x0 + blt _020E3EA4 + cmp r1, #0x80 + blt _020E3EAC +_020E3EA4: + mov r0, #0x0 + b _020E3EBC +_020E3EAC: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x400 +_020E3EBC: + cmp r0, #0x0 + moveq r10, #0x10 + beq _020E4104 + ldr r2, [sp, #0x8] + mov r0, #0xe + cmp r2, r0 + bhs _020E3F54 + ldr r0, [sp, #0x14] + add r2, r11, r11, lsr #0x1f + cmp r1, #0x0 + ldrb r0, [r0, r2, asr #0x1] + blt _020E3EFC + cmp r1, #0x80 + bge _020E3EFC + ldr r2, _020E42FC ; =0x0210428C + ldrb r1, [r2, r1] +_020E3EFC: + cmp r1, #0x41 + subge r1, r1, #0x37 + sublt r1, r1, #0x30 + mov r2, r11, lsr #0x1f + and r3, r1, #0xff + rsb r1, r2, r11, lsl #0x1f + adds r1, r2, r1, ror #0x1f + moveq r1, r3, lsl #0x4 + add r2, r11, r11, lsr #0x1f + orrne r0, r0, r3 + andeq r1, r1, #0xff + orreq r0, r0, r1 + ldr r1, [sp, #0x14] + add r11, r11, #0x1 + strb r0, [r1, r2, asr #0x1] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3F54: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3F70: + cmp r1, #0x0 + blt _020E3F80 + cmp r1, #0x80 + blt _020E3F88 +_020E3F80: + mov r0, r1 + b _020E3F90 +_020E3F88: + ldr r0, _020E42FC ; =0x0210428C + ldrb r0, [r0, r1] +_020E3F90: + cmp r0, #0x50 + movne r5, #0x800 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r10, #0x20 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3FBC: + cmp r1, #0x2d + moveq r0, #0x1 + streq r0, [sp, #0xc] + beq _020E3FE4 + cmp r1, #0x2b + beq _020E3FE4 + mov r0, r8 + mov r2, #0x1 + blx r9 + sub r4, r4, #0x1 +_020E3FE4: + mov r10, #0x40 + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E4004: + cmp r1, #0x0 + blt _020E4014 + cmp r1, #0x80 + blt _020E401C +_020E4014: + mov r0, #0x0 + b _020E402C +_020E401C: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E402C: + cmp r0, #0x0 + moveq r5, #0x1000 + beq _020E4104 + cmp r1, #0x30 + movne r10, #0x100 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r10, #0x80 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E4064: + cmp r1, #0x30 + movne r10, #0x100 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E408C: + cmp r1, #0x0 + blt _020E409C + cmp r1, #0x80 + blt _020E40A4 +_020E409C: + mov r0, #0x0 + b _020E40B4 +_020E40A4: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E40B4: + cmp r0, #0x0 + moveq r5, #0x800 + beq _020E4104 + ldr r0, [sp, #0x10] + sub r2, r1, #0x30 + mov r1, #0xa + mla r0, r1, r0, r2 + str r0, [sp, #0x10] + ldr r1, _020E4304 ; =0x00007FFF + ldr r0, [sp, #0x20] + add r4, r4, #0x1 + cmp r0, r1 + ldrgt r0, [sp, #0xd0] + movgt r1, #0x1 + strgt r1, [r0, #0x0] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r1, r0 +_020E4104: + ldr r0, [sp, #0x0] + cmp r4, r0 + bgt _020E4124 + mvn r0, #0x0 + cmp r1, r0 + beq _020E4124 + tst r5, #0x1800 + beq _020E3418 +_020E4124: + cmp r5, #0x8000 + beq _020E4140 + ldr r0, _020E4308 ; =0x00000E2C + tst r5, r0 + moveq r0, #0x1 + movne r0, #0x0 + b _020E4164 +_020E4140: + sub r0, r4, #0x1 + cmp r0, #0x2 + ble _020E4158 + ldr r0, _020E430C ; =0x0000018E + tst r10, r0 + bne _020E4160 +_020E4158: + mov r0, #0x1 + b _020E4164 +_020E4160: + mov r0, #0x0 +_020E4164: + cmp r0, #0x0 + movne r2, #0x0 + ldrne r0, [sp, #0x4] + bne _020E4184 + ldr r0, [sp, #0x2c] + sub r2, r4, #0x1 + add r2, r2, r0 + ldr r0, [sp, #0x4] +_020E4184: + str r2, [r0, #0x0] + mov r0, r8 + mov r2, #0x1 + blx r9 + cmp r10, #0x0 + bne _020E4388 + ldr r0, [sp, #0x24] + ldrb r2, [sp, #0x84] + cmp r0, #0x0 + ldrne r0, [sp, #0x20] + rsbne r0, r0, #0x0 + strne r0, [sp, #0x20] + add r0, sp, #0x85 + add r1, r0, r2 + b _020E41CC +_020E41C0: + ldr r0, [sp, #0x1c] + add r0, r0, #0x1 + str r0, [sp, #0x1c] +_020E41CC: + cmp r2, #0x0 + sub r2, r2, #0x1 + beq _020E41E4 + ldrb r0, [r1, #-0x1]! + cmp r0, #0x30 + beq _020E41C0 +_020E41E4: + add r0, r2, #0x1 + strb r0, [sp, #0x84] + ands r2, r0, #0xff + bne _020E4208 + add r1, r2, #0x1 + strb r1, [sp, #0x84] + add r0, sp, #0x85 + mov r1, #0x30 + strb r1, [r0, r2] +_020E4208: + ldr r1, [sp, #0x20] + ldr r0, [sp, #0x1c] + mov r2, #0x8000 + add r0, r1, r0 + rsb r2, r2, #0x0 + str r0, [sp, #0x20] + cmp r0, r2 + blt _020E4230 + cmp r0, r2, lsr #0x11 + ble _020E423C +_020E4230: + ldr r0, [sp, #0xd0] + mov r1, #0x1 + str r1, [r0, #0x0] +_020E423C: + ldr r0, [sp, #0xd0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020E4298 + ldr r0, [sp, #0x24] + cmp r0, #0x0 + movne r0, #0x0 + addne sp, sp, #0xa8 + movne r1, r0 + ldmneia sp!, {r3-r11,pc} +_020E4264: ; 0x020E4264 + ldr r0, [sp, #0x28] + cmp r0, #0x0 + ldreq r1, _020E4310 ; =0x02106B7C + addeq sp, sp, #0xa8 + ldmeqia r1, {r0-r1} + ldmeqia sp!, {r3-r11,pc} +_020E427C: ; 0x020E427C + ldr r1, _020E4310 ; =0x02106B7C + mov r0, #0x0 + ldmia r1, {r2-r3} + mov r1, r0 + bl _dsub + add sp, sp, #0xa8 + ldmia sp!, {r3-r11,pc} +_020E4298: + ldr r1, [sp, #0x20] + add r0, sp, #0x80 + strh r1, [sp, #0x82] + bl __dec2num + mov r4, r0 + mov r6, r1 + mov r0, #0x0 + mov r1, r0 + mov r2, r4 + mov r3, r6 + bl _dneq + beq _020E4318 + mov r0, r4 + mov r1, r6 + mov r2, #0x0 + mov r3, #0x100000 + bl _dls + bhs _020E4318 + ldr r0, [sp, #0xd0] + mov r1, #0x1 + str r1, [r0, #0x0] + b _020E4344 + .balign 4 +_020E42F0: .word 0x02104439 +_020E42F4: .word 0x02104434 +_020E42F8: .word 0x0210430C +_020E42FC: .word 0x0210428C +_020E4300: .word 0x02106B74 +_020E4304: .word 0x00007FFF +_020E4308: .word 0x00000E2C +_020E430C: .word 0x0000018E +_020E4310: .word 0x02106B7C +_020E4314: .word 0x7FEFFFFF +_020E4318: + ldr r3, _020E4314 ; =0x7FEFFFFF + mov r0, r4 + mov r1, r6 + mvn r2, #0x0 + bl _dgr + bls _020E4344 + ldr r0, [sp, #0xd0] + mov r2, #0x1 + ldr r1, _020E4310 ; =0x02106B7C + str r2, [r0, #0x0] + ldmia r1, {r4,r6} +_020E4344: + ldr r0, [sp, #0x28] + cmp r0, #0x0 + beq _020E4378 + ldr r0, _020E4308 ; =0x00000E2C + tst r5, r0 + beq _020E4378 + mov r0, #0x0 + mov r1, r0 + mov r2, r4 + mov r3, r6 + bl _dsub + mov r4, r0 + mov r6, r1 +_020E4378: + add sp, sp, #0xa8 + mov r0, r4 + mov r1, r6 + ldmia sp!, {r3-r11,pc} +_020E4388: + ldr r0, [sp, #0xc] + add r4, sp, #0x38 + cmp r0, #0x0 + ldrne r0, [sp, #0x10] + ldrb r3, [sp, #0x45] + rsbne r0, r0, #0x0 + strne r0, [sp, #0x10] + ldr r1, [sp, #0x10] + ldr r0, [sp, #0x8] + mov r2, #0x0 + add r0, r1, r0, lsl #0x2 + str r0, [sp, #0x10] + mov r1, #0x80 + b _020E43D0 +_020E43C0: + ldr r0, [sp, #0x10] + add r2, r2, #0x1 + sub r0, r0, #0x1 + str r0, [sp, #0x10] +_020E43D0: + cmp r2, #0x4 + bhs _020E43E0 + tst r3, r1, asr r2 + beq _020E43C0 +_020E43E0: + adds r5, r2, #0x1 + beq _020E442C + add r0, sp, #0x4c + add r3, sp, #0x45 + str r0, [sp, #0x14] + mov r1, #0x0 + cmp r0, r3 + blo _020E442C + rsb r6, r5, #0x8 +_020E4404: + ldr r0, [sp, #0x14] + ldrb r0, [r0, #0x0] + orr r2, r1, r0, lsl r5 + mov r1, r0, asr r6 + ldr r0, [sp, #0x14] + and r1, r1, #0xff + strb r2, [r0], #-0x1 + str r0, [sp, #0x14] + cmp r0, r3 + bhs _020E4404 +_020E442C: + mov r2, #0x0 + mov r6, r2 + strb r2, [r4, #0x0] + strb r2, [r4, #0x1] + strb r2, [r4, #0x2] + strb r2, [r4, #0x3] + strb r2, [r4, #0x4] + strb r2, [r4, #0x5] + strb r2, [r4, #0x6] + strb r2, [r4, #0x7] + mov r3, #0xc + mov r7, #0x1 + mov r0, #0xff + add r1, sp, #0x45 +_020E4464: + add r5, r2, #0x8 + cmp r5, #0x34 + ldrb r5, [r1, r6] + rsbhi r8, r2, #0x34 + and r11, r3, #0x7 + andhi r5, r5, r0, lsl r8 + andhi r5, r5, #0xff + mov r8, r5, asr r11 + and r9, r8, #0xff + ldrb r10, [r4, r7] + rsb r8, r11, #0x8 + mov r5, r5, lsl r8 + orr r9, r10, r9 + strb r9, [r4, r7] + add r7, r7, #0x1 + add r2, r2, #0x8 + ldrb r8, [r4, r7] + and r5, r5, #0xff + cmp r2, #0x34 + orr r5, r8, r5 + strb r5, [r4, r7] + add r3, r3, #0x8 + add r6, r6, #0x1 + blo _020E4464 + ldr r0, [sp, #0x10] + mov r1, #0x800 + add r0, r0, #0xfe + add r2, r0, #0x300 + rsb r1, r1, #0x0 + tst r2, r1 + beq _020E44FC + ldr r2, [sp, #0xd0] + mov r3, #0x1 + mov r0, #0x0 + add sp, sp, #0xa8 + mov r1, r0 + str r3, [r2, #0x0] + ldmia sp!, {r3-r11,pc} +_020E44FC: + ldrb r0, [r4, #0x1] + mov r2, r2, lsl #0x15 + ldrb r1, [r4, #0x0] + orr r0, r0, r2, lsr #0x11 + strb r0, [r4, #0x1] + ldr r0, [sp, #0x28] + orr r1, r1, r2, lsr #0x19 + cmp r0, #0x0 + andne r0, r1, #0xff + strb r1, [r4, #0x0] + orrne r0, r0, #0x80 + strneb r0, [r4, #0x0] + mov r3, #0x0 +_020E4530: + rsb r1, r3, #0x7 + ldrb r2, [r4, r3] + ldrb r0, [r4, r1] + strb r0, [r4, r3] + add r3, r3, #0x1 + strb r2, [r4, r1] + cmp r3, #0x4 + blt _020E4530 + ldmia r4, {r0-r1} + add sp, sp, #0xa8 + ldmia sp!, {r3-r11,pc} + + arm_func_start strtold +strtold: ; 0x020E455C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x14 + mov r7, r0 + mov r0, #0x0 + mov r6, r1 + str r0, [sp, #0x8] + add r4, sp, #0xc + str r7, [sp, #0x4] + ldr r1, _020E4630 ; =__StringRead + add r2, sp, #0x4 + add r3, sp, #0x10 + sub r0, r0, #0x80000001 + str r4, [sp, #0x0] + bl __strtold + mov r5, r1 + mov r4, r0 + cmp r6, #0x0 + ldrne r0, [sp, #0x10] + mov r1, r5 + addne r0, r7, r0 + strne r0, [r6, #0x0] + mov r0, r4 + bl fabs + ldr r2, [sp, #0xc] + mov r6, r0 + mov r7, r1 + cmp r2, #0x0 + bne _020E4614 + mov r0, #0x0 + mov r1, r0 + mov r2, r4 + mov r3, r5 + bl _dneq + beq _020E4620 + mov r0, r6 + mov r1, r7 + mov r2, #0x0 + mov r3, #0x100000 + bl _dls + blo _020E4614 + ldr r3, _020E4634 ; =0x7FEFFFFF + mov r0, r6 + mov r1, r7 + mvn r2, #0x0 + bl _dgr + bls _020E4620 +_020E4614: + ldr r0, _020E4638 ; =0x021D74A8 + mov r1, #0x22 + str r1, [r0, #0x0] +_020E4620: + mov r0, r4 + mov r1, r5 + add sp, sp, #0x14 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020E4630: .word __StringRead +_020E4634: .word 0x7FEFFFFF +_020E4638: .word 0x021D74A8 + + arm_func_start atod +atod: ; 0x020E463C + ldr ip, _020E4648 ; =strtold + mov r1, #0x0 + bx r12 + .balign 4 +_020E4648: .word strtold + +arm_func_start __strtoul +__strtoul: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + ldr r4, [sp, #0x38] + movs r9, r0 + ldr r0, [sp, #0x34] + str r4, [sp, #0x38] + mov r4, #0x0 + str r0, [sp, #0x34] + ldr r0, [sp, #0x38] + str r1, [sp, #0x0] + str r4, [r0, #0x0] + mov r0, r4 + str r0, [sp, #0x4] + ldr r0, [sp, #0x34] + mov r1, r4 + str r1, [r0, #0x0] + ldr r0, [sp, #0x30] + str r4, [sp, #0x8] + mov r8, r2 + mov r7, r3 + mov r5, r4 + mov r10, r4 + str r0, [sp, #0x30] + mov r4, #0x1 + bmi _020E46CC + cmp r9, #0x1 + beq _020E46CC + cmp r9, #0x24 + bgt _020E46CC + ldr r0, [sp, #0x0] + cmp r0, #0x1 + bge _020E46D4 +_020E46CC: + mov r4, #0x40 + b _020E46F0 +_020E46D4: + ldr r1, [sp, #0x8] + mov r0, r7 + mov r3, r1 + mov r2, r1 + add r5, r3, #0x1 + blx r8 + mov r6, r0 +_020E46F0: + cmp r9, #0x0 + beq _020E4708 + mov r1, r9 + mvn r0, #0x0 + bl _u32_div_f + str r0, [sp, #0x4] +_020E4708: + mvn r11, #0x0 + b _020E49C8 +_020E4710: + cmp r4, #0x8 + bgt _020E4748 + cmp r4, #0x0 + addge pc, pc, r4, lsl #0x2 + b _020E49C8 +_020E4724: ; 0x020E4724 + b _020E49C8 +_020E4728: ; 0x020E4728 + b _020E4754 +_020E472C: ; 0x020E472C + b _020E4800 +_020E4730: ; 0x020E4730 + b _020E49C8 +_020E4734: ; 0x020E4734 + b _020E483C +_020E4738: ; 0x020E4738 + b _020E49C8 +_020E473C: ; 0x020E473C + b _020E49C8 +_020E4740: ; 0x020E4740 + b _020E49C8 +_020E4744: ; 0x020E4744 + b _020E487C +_020E4748: + cmp r4, #0x10 + beq _020E487C + b _020E49C8 +_020E4754: + cmp r6, #0x0 + blt _020E4764 + cmp r6, #0x80 + blt _020E476C +_020E4764: + mov r0, #0x0 + b _020E477C +_020E476C: + ldr r0, _020E4A2C ; =0x0210430C + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x100 +_020E477C: + cmp r0, #0x0 + beq _020E47A8 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + blx r8 + mov r6, r0 + ldr r0, [sp, #0x8] + add r0, r0, #0x1 + str r0, [sp, #0x8] + b _020E49C8 +_020E47A8: + cmp r6, #0x2b + bne _020E47CC + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E47F8 +_020E47CC: + cmp r6, #0x2d + bne _020E47F8 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + ldr r0, [sp, #0x34] + mov r1, #0x1 + str r1, [r0, #0x0] +_020E47F8: + mov r4, #0x2 + b _020E49C8 +_020E4800: + cmp r9, #0x0 + cmpne r9, #0x10 + bne _020E4834 + cmp r6, #0x30 + bne _020E4834 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + mov r4, #0x4 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E49C8 +_020E4834: + mov r4, #0x8 + b _020E49C8 +_020E483C: + cmp r6, #0x58 + cmpne r6, #0x78 + bne _020E486C + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + mov r9, #0x10 + mov r4, #0x8 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E49C8 +_020E486C: + cmp r9, #0x0 + moveq r9, #0x8 + mov r4, #0x10 + b _020E49C8 +_020E487C: + ldr r0, [sp, #0x4] + cmp r9, #0x0 + moveq r9, #0xa + cmp r0, #0x0 + bne _020E48A0 + mov r0, r11 + mov r1, r9 + bl _u32_div_f + str r0, [sp, #0x4] +_020E48A0: + cmp r6, #0x0 + blt _020E48B0 + cmp r6, #0x80 + blt _020E48B8 +_020E48B0: + mov r0, #0x0 + b _020E48C8 +_020E48B8: + ldr r0, _020E4A2C ; =0x0210430C + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x8 +_020E48C8: + cmp r0, #0x0 + beq _020E48F0 + sub r6, r6, #0x30 + cmp r6, r9 + blt _020E4978 + cmp r4, #0x10 + moveq r4, #0x20 + movne r4, #0x40 + add r6, r6, #0x30 + b _020E49C8 +_020E48F0: + cmp r6, #0x0 + blt _020E4900 + cmp r6, #0x80 + blt _020E4908 +_020E4900: + mov r0, #0x0 + b _020E4918 +_020E4908: + ldr r0, _020E4A2C ; =0x0210430C + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x1 +_020E4918: + cmp r0, #0x0 + beq _020E494C + cmp r6, #0x0 + blt _020E4930 + cmp r6, #0x80 + blt _020E4938 +_020E4930: + mov r0, r6 + b _020E4940 +_020E4938: + ldr r0, _020E4A30 ; =0x0210428C + ldrb r0, [r0, r6] +_020E4940: + sub r0, r0, #0x37 + cmp r0, r9 + blt _020E495C +_020E494C: + cmp r4, #0x10 + moveq r4, #0x20 + movne r4, #0x40 + b _020E49C8 +_020E495C: + cmp r6, #0x0 + blt _020E4974 + cmp r6, #0x80 + bge _020E4974 + ldr r0, _020E4A30 ; =0x0210428C + ldrb r6, [r0, r6] +_020E4974: + sub r6, r6, #0x37 +_020E4978: + ldr r0, [sp, #0x4] + mov r4, #0x10 + cmp r10, r0 + ldrhi r0, [sp, #0x38] + movhi r1, #0x1 + strhi r1, [r0, #0x0] + mul r0, r10, r9 + mov r10, r0 + sub r0, r11, r0 + cmp r6, r0 + ldrhi r0, [sp, #0x38] + movhi r1, #0x1 + strhi r1, [r0, #0x0] + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + add r10, r10, r6 + add r5, r5, #0x1 + blx r8 + mov r6, r0 +_020E49C8: + ldr r0, [sp, #0x0] + cmp r5, r0 + bgt _020E49E4 + cmp r6, r11 + beq _020E49E4 + tst r4, #0x60 + beq _020E4710 +_020E49E4: + tst r4, #0x34 + bne _020E49FC + ldr r0, [sp, #0x30] + mov r10, #0x0 + str r10, [r0, #0x0] + b _020E4A10 +_020E49FC: + ldr r0, [sp, #0x8] + sub r1, r5, #0x1 + add r1, r1, r0 + ldr r0, [sp, #0x30] + str r1, [r0, #0x0] +_020E4A10: + mov r0, r7 + mov r1, r6 + mov r2, #0x1 + blx r8 + mov r0, r10 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020E4A2C: .word 0x0210430C +_020E4A30: .word 0x0210428C + + arm_func_start __strtoull +__strtoull: ; 0x020E4A34 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x1c + ldr r4, [sp, #0x48] + movs r9, r0 + ldr r0, [sp, #0x44] + str r4, [sp, #0x48] + mov r4, #0x0 + str r0, [sp, #0x44] + ldr r0, [sp, #0x48] + str r1, [sp, #0x0] + str r4, [r0, #0x0] + mov r0, r4 + str r0, [sp, #0xc] + str r0, [sp, #0x8] + ldr r0, [sp, #0x44] + mov r1, r4 + str r1, [r0, #0x0] + ldr r0, [sp, #0x40] + str r4, [sp, #0x14] + mov r8, r2 + mov r7, r3 + mov r5, r4 + mov r10, r4 + mov r11, r4 + str r0, [sp, #0x40] + mov r4, #0x1 + bmi _020E4ABC + cmp r9, #0x1 + beq _020E4ABC + cmp r9, #0x24 + bgt _020E4ABC + ldr r0, [sp, #0x0] + cmp r0, #0x1 + bge _020E4AC4 +_020E4ABC: + mov r4, #0x40 + b _020E4ADC +_020E4AC4: + ldr r1, [sp, #0x14] + mov r0, r7 + mov r2, r1 + add r5, r1, #0x1 + blx r8 + mov r6, r0 +_020E4ADC: + cmp r9, #0x0 + beq _020E4B00 + mvn r0, #0x0 + mov r1, r0 + mov r3, r9, asr #0x1f + mov r2, r9 + bl _ll_udiv + str r0, [sp, #0xc] + str r1, [sp, #0x8] +_020E4B00: + mvn r0, #0x0 + str r0, [sp, #0x18] + b _020E4E08 +_020E4B0C: + cmp r4, #0x8 + bgt _020E4B44 + cmp r4, #0x0 + addge pc, pc, r4, lsl #0x2 + b _020E4E08 +_020E4B20: ; 0x020E4B20 + b _020E4E08 +_020E4B24: ; 0x020E4B24 + b _020E4B50 +_020E4B28: ; 0x020E4B28 + b _020E4BFC +_020E4B2C: ; 0x020E4B2C + b _020E4E08 +_020E4B30: ; 0x020E4B30 + b _020E4C38 +_020E4B34: ; 0x020E4B34 + b _020E4E08 +_020E4B38: ; 0x020E4B38 + b _020E4E08 +_020E4B3C: ; 0x020E4B3C + b _020E4E08 +_020E4B40: ; 0x020E4B40 + b _020E4C78 +_020E4B44: + cmp r4, #0x10 + beq _020E4C78 + b _020E4E08 +_020E4B50: + cmp r6, #0x0 + blt _020E4B60 + cmp r6, #0x80 + blt _020E4B68 +_020E4B60: + mov r0, #0x0 + b _020E4B78 +_020E4B68: + ldr r0, _020E4E78 ; =0x0210430C + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x100 +_020E4B78: + cmp r0, #0x0 + beq _020E4BA4 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + blx r8 + mov r6, r0 + ldr r0, [sp, #0x14] + add r0, r0, #0x1 + str r0, [sp, #0x14] + b _020E4E08 +_020E4BA4: + cmp r6, #0x2b + bne _020E4BC8 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E4BF4 +_020E4BC8: + cmp r6, #0x2d + bne _020E4BF4 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + ldr r0, [sp, #0x44] + mov r1, #0x1 + str r1, [r0, #0x0] +_020E4BF4: + mov r4, #0x2 + b _020E4E08 +_020E4BFC: + cmp r9, #0x0 + cmpne r9, #0x10 + bne _020E4C30 + cmp r6, #0x30 + bne _020E4C30 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + mov r4, #0x4 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E4E08 +_020E4C30: + mov r4, #0x8 + b _020E4E08 +_020E4C38: + cmp r6, #0x58 + cmpne r6, #0x78 + bne _020E4C68 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + mov r9, #0x10 + mov r4, #0x8 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E4E08 +_020E4C68: + cmp r9, #0x0 + moveq r9, #0x8 + mov r4, #0x10 + b _020E4E08 +_020E4C78: + ldr r1, [sp, #0x8] + mov r0, #0x0 + cmp r9, #0x0 + moveq r9, #0xa + cmp r1, r0 + ldr r1, [sp, #0xc] + cmpeq r1, r0 + bne _020E4CB4 + ldr r0, [sp, #0x18] + mov r3, r9, asr #0x1f + mov r1, r0 + mov r2, r9 + bl _ll_udiv + str r0, [sp, #0xc] + str r1, [sp, #0x8] +_020E4CB4: + cmp r6, #0x0 + blt _020E4CC4 + cmp r6, #0x80 + blt _020E4CCC +_020E4CC4: + mov r0, #0x0 + b _020E4CDC +_020E4CCC: + ldr r0, _020E4E78 ; =0x0210430C + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x8 +_020E4CDC: + cmp r0, #0x0 + beq _020E4D04 + sub r6, r6, #0x30 + cmp r6, r9 + blt _020E4D8C + cmp r4, #0x10 + moveq r4, #0x20 + movne r4, #0x40 + add r6, r6, #0x30 + b _020E4E08 +_020E4D04: + cmp r6, #0x0 + blt _020E4D14 + cmp r6, #0x80 + blt _020E4D1C +_020E4D14: + mov r0, #0x0 + b _020E4D2C +_020E4D1C: + ldr r0, _020E4E78 ; =0x0210430C + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x1 +_020E4D2C: + cmp r0, #0x0 + beq _020E4D60 + cmp r6, #0x0 + blt _020E4D44 + cmp r6, #0x80 + blt _020E4D4C +_020E4D44: + mov r0, r6 + b _020E4D54 +_020E4D4C: + ldr r0, _020E4E7C ; =0x0210428C + ldrb r0, [r0, r6] +_020E4D54: + sub r0, r0, #0x37 + cmp r0, r9 + blt _020E4D70 +_020E4D60: + cmp r4, #0x10 + moveq r4, #0x20 + movne r4, #0x40 + b _020E4E08 +_020E4D70: + cmp r6, #0x0 + blt _020E4D88 + cmp r6, #0x80 + bge _020E4D88 + ldr r0, _020E4E7C ; =0x0210428C + ldrb r6, [r0, r6] +_020E4D88: + sub r6, r6, #0x37 +_020E4D8C: + ldr r0, [sp, #0x8] + umull r2, r3, r10, r9 + cmp r11, r0 + ldr r0, [sp, #0xc] + mov r4, #0x10 + cmpeq r10, r0 + ldrhi r0, [sp, #0x48] + movhi r1, #0x1 + strhi r1, [r0, #0x0] + mov r1, r9, asr #0x1f + mla r3, r10, r1, r3 + mla r3, r11, r9, r3 + ldr r1, [sp, #0x18] + mov r10, r2 + subs r2, r1, r2 + mov r0, r6, asr #0x1f + sbc r1, r1, r3 + cmp r0, r1 + cmpeq r6, r2 + ldrhi r1, [sp, #0x48] + movhi r2, #0x1 + strhi r2, [r1, #0x0] + mov r1, #0x0 + mov r11, r3 + adds r10, r10, r6 + adc r11, r11, r0 + mov r0, r7 + mov r2, r1 + add r5, r5, #0x1 + blx r8 + mov r6, r0 +_020E4E08: + ldr r0, [sp, #0x0] + cmp r5, r0 + bgt _020E4E28 + ldr r0, [sp, #0x18] + cmp r6, r0 + beq _020E4E28 + tst r4, #0x60 + beq _020E4B0C +_020E4E28: + tst r4, #0x34 + bne _020E4E44 + ldr r0, [sp, #0x40] + mov r10, #0x0 + mov r11, r10 + str r10, [r0, #0x0] + b _020E4E58 +_020E4E44: + ldr r0, [sp, #0x14] + sub r1, r5, #0x1 + add r1, r1, r0 + ldr r0, [sp, #0x40] + str r1, [r0, #0x0] +_020E4E58: + mov r0, r7 + mov r1, r6 + mov r2, #0x1 + blx r8 + mov r0, r10 + mov r1, r11 + add sp, sp, #0x1c + ldmia sp!, {r4-r11,pc} + .balign 4 +_020E4E78: .word 0x0210430C +_020E4E7C: .word 0x0210428C + + arm_func_start strtoul +strtoul: ; 0x020E4E80 + stmdb sp!, {r3-r5,lr} + sub sp, sp, #0x20 + mov r5, r0 + mov lr, #0x0 + mov r0, r2 + mov r4, r1 + add r2, sp, #0x1c + str r5, [sp, #0xc] + str lr, [sp, #0x10] + str r2, [sp, #0x0] + add r1, sp, #0x18 + str r1, [sp, #0x4] + add r12, sp, #0x14 + ldr r2, _020E4F10 ; =__StringRead + add r3, sp, #0xc + sub r1, lr, #0x80000001 + str r12, [sp, #0x8] + bl __strtoul +_020E4EC8: ; 0x020E4EC8 + cmp r4, #0x0 + ldrne r1, [sp, #0x1c] + addne r1, r5, r1 + strne r1, [r4, #0x0] + ldr r1, [sp, #0x14] + cmp r1, #0x0 + beq _020E4EFC + ldr r0, _020E4F14 ; =0x021D74A8 + mov r1, #0x22 + str r1, [r0, #0x0] + add sp, sp, #0x20 + mvn r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E4EFC: + ldr r1, [sp, #0x18] + cmp r1, #0x0 + rsbne r0, r0, #0x0 + add sp, sp, #0x20 + ldmia sp!, {r3-r5,pc} + .balign 4 +_020E4F10: .word __StringRead +_020E4F14: .word 0x021D74A8 + + arm_func_start strtold2 +strtold2: ; 0x020E4F18 + stmdb sp!, {r3-r5,lr} + sub sp, sp, #0x20 + mov r5, r0 + mov lr, #0x0 + mov r0, r2 + mov r4, r1 + add r2, sp, #0x1c + str r5, [sp, #0xc] + str lr, [sp, #0x10] + str r2, [sp, #0x0] + add r1, sp, #0x18 + str r1, [sp, #0x4] + add r12, sp, #0x14 + ldr r2, _020E4FD8 ; =__StringRead + add r3, sp, #0xc + sub r1, lr, #0x80000001 + str r12, [sp, #0x8] + bl __strtoul +_020E4F60: ; 0x020E4F60 + cmp r4, #0x0 + ldrne r1, [sp, #0x1c] + addne r1, r5, r1 + strne r1, [r4, #0x0] + ldr r1, [sp, #0x14] + cmp r1, #0x0 + bne _020E4FA4 + ldr r2, [sp, #0x18] + cmp r2, #0x0 + bne _020E4F94 + mvn r1, #0x80000000 + cmp r0, r1 + bhi _020E4FA4 +_020E4F94: + cmp r2, #0x0 + beq _020E4FC8 + cmp r0, #0x80000000 + bls _020E4FC8 +_020E4FA4: + ldr r0, [sp, #0x18] + ldr r1, _020E4FDC ; =0x021D74A8 + mov r2, #0x22 + cmp r0, #0x0 + movne r0, #0x80000000 + str r2, [r1, #0x0] + add sp, sp, #0x20 + mvneq r0, #0x80000000 + ldmia sp!, {r3-r5,pc} +_020E4FC8: + cmp r2, #0x0 + rsbne r0, r0, #0x0 + add sp, sp, #0x20 + ldmia sp!, {r3-r5,pc} + .balign 4 +_020E4FD8: .word __StringRead +_020E4FDC: .word 0x021D74A8 + + arm_func_start atol +atol: ; 0x020E4FE0 + ldr ip, _020E4FF0 ; =strtold + mov r1, #0x0 + mov r2, #0xa + bx r12 + .balign 4 +_020E4FF0: .word strtold2 + +arm_func_start fwide +fwide: + cmp r0, #0x0 + beq _020E500C + ldr r3, [r0, #0x4] + mov r2, r3, lsl #0x16 + movs r2, r2, lsr #0x1d + bne _020E5014 +_020E500C: + mov r0, #0x0 + bx lr +_020E5014: + mov r2, r3, lsl #0x14 + movs r2, r2, lsr #0x1e + beq _020E5034 + cmp r2, #0x1 + beq _020E505C + cmp r2, #0x2 + moveq r1, #0x1 + b _020E5060 +_020E5034: + cmp r1, #0x0 + ble _020E504C + bic r2, r3, #0xc00 + orr r2, r2, #0x800 + str r2, [r0, #0x4] + b _020E5060 +_020E504C: + biclt r2, r3, #0xc00 + orrlt r2, r2, #0x400 + strlt r2, [r0, #0x4] + b _020E5060 +_020E505C: + mvn r1, #0x0 +_020E5060: + mov r0, r1 + bx lr + + arm_func_start wmemcpy +wmemcpy: ; 0x020E5068 + ldr ip, _020E5074 ; =memcpy + mov r2, r2, lsl #0x1 + bx r12 + .balign 4 +_020E5074: .word memcpy + +arm_func_start wmemchr +wmemchr: + cmp r2, #0x0 + beq _020E5098 +_020E5080: + ldrh r3, [r0, #0x0] + cmp r3, r1 + bxeq lr + add r0, r0, #0x2 + subs r2, r2, #0x1 + bne _020E5080 +_020E5098: + mov r0, #0x0 + bx lr + + arm_func_start parse_format_wprintf +parse_format_wprintf: ; 0x020E50A0 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + ldrh r3, [r0, #0x2] + mov r4, #0x0 + mov r5, #0x1 + mov lr, r2 + strb r5, [sp, #0x0] + strb r4, [sp, #0x1] + strb r4, [sp, #0x2] + strb r4, [sp, #0x3] + strb r4, [sp, #0x4] + str r4, [sp, #0x8] + str r4, [sp, #0xc] + cmp r3, #0x25 + add r12, r0, #0x2 + bne _020E50FC + add r0, sp, #0x0 + strh r3, [sp, #0x6] + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add sp, sp, #0x10 + add r0, r12, #0x2 + ldmia sp!, {r4-r8,pc} +_020E50FC: + mov r2, #0x2 + mov r0, r4 + mov r5, r2 + mov r6, r4 + mov r7, #0x1 +_020E5110: + mov r8, r7 + cmp r3, #0x2b + bgt _020E5140 + bge _020E5168 + cmp r3, #0x23 + bgt _020E5198 + cmp r3, #0x20 + blt _020E5198 + beq _020E5170 + cmp r3, #0x23 + beq _020E5180 + b _020E5198 +_020E5140: + cmp r3, #0x30 + bgt _020E5198 + cmp r3, #0x2d + blt _020E5198 + beq _020E5160 + cmp r3, #0x30 + beq _020E5188 + b _020E5198 +_020E5160: + strb r6, [sp, #0x0] + b _020E519C +_020E5168: + strb r7, [sp, #0x1] + b _020E519C +_020E5170: + ldrb r4, [sp, #0x1] + cmp r4, #0x1 + strneb r5, [sp, #0x1] + b _020E519C +_020E5180: + strb r7, [sp, #0x3] + b _020E519C +_020E5188: + ldrb r4, [sp, #0x0] + cmp r4, #0x0 + strneb r2, [sp, #0x0] + b _020E519C +_020E5198: + mov r8, r0 +_020E519C: + cmp r8, #0x0 + ldrneh r3, [r12, #0x2]! + bne _020E5110 + cmp r3, #0x2a + bne _020E51E4 + ldr r0, [r1, #0x0] + add r0, r0, #0x4 + str r0, [r1, #0x0] + ldr r0, [r0, #-0x4] + str r0, [sp, #0x8] + cmp r0, #0x0 + bge _020E51DC + rsb r0, r0, #0x0 + mov r2, #0x0 + strb r2, [sp, #0x0] + str r0, [sp, #0x8] +_020E51DC: + ldrh r3, [r12, #0x2]! + b _020E5228 +_020E51E4: + mov r2, #0x0 + ldr r5, _020E560C ; =0x02104544 + mov r0, #0xa + b _020E5208 +_020E51F4: + ldr r4, [sp, #0x8] + sub r3, r3, #0x30 + mla r6, r4, r0, r3 + ldrh r3, [r12, #0x2]! + str r6, [sp, #0x8] +_020E5208: + cmp r3, #0x80 + movcs r4, r2 + bhs _020E5220 + mov r4, r3, lsl #0x1 + ldrh r4, [r5, r4] + and r4, r4, #0x8 +_020E5220: + cmp r4, #0x0 + bne _020E51F4 +_020E5228: + ldr r2, [sp, #0x8] + ldr r0, _020E5610 ; =0x000001FD + cmp r2, r0 + ble _020E5258 + ldr r1, _020E5614 ; =0x0000FFFF + add r0, sp, #0x0 + strh r1, [sp, #0x6] + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add sp, sp, #0x10 + add r0, r12, #0x2 + ldmia sp!, {r4-r8,pc} +_020E5258: + cmp r3, #0x2e + bne _020E52E0 + ldrh r3, [r12, #0x2]! + mov r0, #0x1 + strb r0, [sp, #0x2] + cmp r3, #0x2a + bne _020E529C + ldr r0, [r1, #0x0] + add r0, r0, #0x4 + str r0, [r1, #0x0] + ldr r0, [r0, #-0x4] + ldrh r3, [r12, #0x2]! + str r0, [sp, #0xc] + cmp r0, #0x0 + movlt r0, #0x0 + strltb r0, [sp, #0x2] + b _020E52E0 +_020E529C: + mov r1, #0x0 + ldr r4, _020E560C ; =0x02104544 + mov r0, #0xa + b _020E52C0 +_020E52AC: + ldr r2, [sp, #0xc] + sub r3, r3, #0x30 + mla r5, r2, r0, r3 + ldrh r3, [r12, #0x2]! + str r5, [sp, #0xc] +_020E52C0: + cmp r3, #0x80 + movcs r2, r1 + bhs _020E52D8 + mov r2, r3, lsl #0x1 + ldrh r2, [r4, r2] + and r2, r2, #0x8 +_020E52D8: + cmp r2, #0x0 + bne _020E52AC +_020E52E0: + cmp r3, #0x6c + mov r0, #0x1 + bgt _020E5318 + cmp r3, #0x68 + blt _020E530C + beq _020E5334 + cmp r3, #0x6a + beq _020E5380 + cmp r3, #0x6c + beq _020E5350 + b _020E53A4 +_020E530C: + cmp r3, #0x4c + beq _020E5374 + b _020E53A4 +_020E5318: + cmp r3, #0x74 + bgt _020E5328 + beq _020E538C + b _020E53A4 +_020E5328: + cmp r3, #0x7a + beq _020E5398 + b _020E53A4 +_020E5334: + ldrh r1, [r12, #0x2] + mov r2, #0x2 + strb r2, [sp, #0x4] + cmp r1, #0x68 + streqb r0, [sp, #0x4] + ldreqh r3, [r12, #0x2]! + b _020E53A8 +_020E5350: + ldrh r1, [r12, #0x2] + mov r2, #0x3 + strb r2, [sp, #0x4] + cmp r1, #0x6c + bne _020E53A8 + mov r1, #0x4 + strb r1, [sp, #0x4] + ldrh r3, [r12, #0x2]! + b _020E53A8 +_020E5374: + mov r1, #0x9 + strb r1, [sp, #0x4] + b _020E53A8 +_020E5380: + mov r1, #0x6 + strb r1, [sp, #0x4] + b _020E53A8 +_020E538C: + mov r1, #0x8 + strb r1, [sp, #0x4] + b _020E53A8 +_020E5398: + mov r1, #0x7 + strb r1, [sp, #0x4] + b _020E53A8 +_020E53A4: + mov r0, #0x0 +_020E53A8: + cmp r0, #0x0 + ldrneh r3, [r12, #0x2]! + strh r3, [sp, #0x6] + cmp r3, #0x61 + bgt _020E53FC + bge _020E54E0 + cmp r3, #0x47 + bgt _020E53F0 + subs r0, r3, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020E55EC +_020E53D4: ; 0x020E53D4 + b _020E54E0 +_020E53D8: ; 0x020E53D8 + b _020E55EC +_020E53DC: ; 0x020E53DC + b _020E55EC +_020E53E0: ; 0x020E53E0 + b _020E55EC +_020E53E4: ; 0x020E53E4 + b _020E5528 +_020E53E8: ; 0x020E53E8 + b _020E54A8 +_020E53EC: ; 0x020E53EC + b _020E5518 +_020E53F0: + cmp r3, #0x58 + beq _020E5470 + b _020E55EC +_020E53FC: + cmp r3, #0x63 + bgt _020E540C + beq _020E5588 + b _020E55EC +_020E540C: + sub r0, r3, #0x64 + cmp r0, #0x14 + addls pc, pc, r0, lsl #0x2 + b _020E55EC +_020E541C: + b _020E5470 +_020E5420: + b _020E5528 +_020E5424: + b _020E54A8 +_020E5428: + b _020E5518 +_020E542C: + b _020E55EC +_020E5430: + b _020E5470 +_020E5434: + b _020E55EC +_020E5438: + b _020E55EC +_020E543C: + b _020E55EC +_020E5440: + b _020E55EC +_020E5444: + b _020E55D8 +_020E5448: + b _020E5470 +_020E544C: + b _020E5564 +_020E5450: + b _020E55EC +_020E5454: + b _020E55EC +_020E5458: + b _020E55B4 +_020E545C: + b _020E55EC +_020E5460: + b _020E5470 +_020E5464: + b _020E55EC +_020E5468: + b _020E55EC +_020E546C: + b _020E5470 +_020E5470: + ldrb r0, [sp, #0x4] + cmp r0, #0x9 + moveq r0, #0x4 + streqb r0, [sp, #0x4] + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0xc] + beq _020E55F4 + ldrb r0, [sp, #0x0] + cmp r0, #0x2 + moveq r0, #0x1 + streqb r0, [sp, #0x0] + b _020E55F4 +_020E54A8: + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + ldreq r0, _020E5614 ; =0x0000FFFF + streqh r0, [sp, #0x6] + beq _020E55F4 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x6 + streq r0, [sp, #0xc] + b _020E55F4 +_020E54E0: + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0xd + streq r0, [sp, #0xc] + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + cmpne r0, #0x1 + ldreq r0, _020E5614 ; =0x0000FFFF + streqh r0, [sp, #0x6] + b _020E55F4 +_020E5518: + ldr r0, [sp, #0xc] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0xc] +_020E5528: + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + cmpne r0, #0x1 + ldreq r0, _020E5614 ; =0x0000FFFF + streqh r0, [sp, #0x6] + beq _020E55F4 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x6 + streq r0, [sp, #0xc] + b _020E55F4 +_020E5564: + mov r3, #0x3 + mov r2, #0x1 + mov r1, #0x78 + mov r0, #0x8 + strb r3, [sp, #0x4] + strb r2, [sp, #0x3] + strh r1, [sp, #0x6] + str r0, [sp, #0xc] + b _020E55F4 +_020E5588: + ldrb r1, [sp, #0x4] + cmp r1, #0x3 + moveq r0, #0x5 + streqb r0, [sp, #0x4] + beq _020E55F4 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + cmpeq r1, #0x0 + ldrne r0, _020E5614 ; =0x0000FFFF + strneh r0, [sp, #0x6] + b _020E55F4 +_020E55B4: + ldrb r0, [sp, #0x4] + cmp r0, #0x3 + moveq r0, #0x5 + streqb r0, [sp, #0x4] + beq _020E55F4 + cmp r0, #0x0 + ldrne r0, _020E5614 ; =0x0000FFFF + strneh r0, [sp, #0x6] + b _020E55F4 +_020E55D8: + ldrb r0, [sp, #0x4] + cmp r0, #0x9 + moveq r0, #0x4 + streqb r0, [sp, #0x4] + b _020E55F4 +_020E55EC: + ldr r0, _020E5614 ; =0x0000FFFF + strh r0, [sp, #0x6] +_020E55F4: + add r0, sp, #0x0 + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add r0, r12, #0x2 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020E560C: .word 0x02104544 +_020E5610: .word 0x000001FD +_020E5614: .word 0x0000FFFF + + arm_func_start long2str_wide +long2str_wide: ; 0x020E5618 + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x10 + movs r10, r0 + mov r0, #0x0 + mov r5, r1 + str r0, [sp, #0xc] + ldr r7, [sp, #0x4c] + mov r6, r0 + strh r0, [r5, #-0x2]! + ldrb r0, [sp, #0x43] + str r1, [sp, #0x0] + ldrh r8, [sp, #0x46] + str r0, [sp, #0x4] + ldr r0, [sp, #0x48] + ldrb r11, [sp, #0x41] + str r0, [sp, #0x8] + cmpeq r7, #0x0 + bne _020E568C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020E5678 + cmp r8, #0x6f + beq _020E568C +_020E5678: + add sp, sp, #0x10 + mov r0, r5 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E568C: + cmp r8, #0x69 + bgt _020E56B4 + bge _020E56E8 + cmp r8, #0x58 + bgt _020E56A8 + beq _020E5714 + b _020E571C +_020E56A8: + cmp r8, #0x64 + beq _020E56E8 + b _020E571C +_020E56B4: + cmp r8, #0x6f + bgt _020E56C8 + moveq r4, #0x8 + moveq r11, #0x0 + b _020E571C +_020E56C8: + cmp r8, #0x78 + bgt _020E571C + cmp r8, #0x75 + blt _020E571C + beq _020E5708 + cmp r8, #0x78 + beq _020E5714 + b _020E571C +_020E56E8: + cmp r10, #0x0 + mov r4, #0xa + bge _020E571C + mov r0, #0x1 + cmp r10, #0x80000000 + rsbne r10, r10, #0x0 + str r0, [sp, #0xc] + b _020E571C +_020E5708: + mov r4, #0xa + mov r11, #0x0 + b _020E571C +_020E5714: + mov r4, #0x10 + mov r11, #0x0 +_020E571C: + mov r0, r10 + mov r1, r4 + bl _u32_div_f + mov r9, r1 + mov r0, r10 + mov r1, r4 + bl _u32_div_f + cmp r9, #0xa + mov r10, r0 + addlt r9, r9, #0x30 + blt _020E5754 + cmp r8, #0x78 + addeq r9, r9, #0x57 + addne r9, r9, #0x37 +_020E5754: + cmp r10, #0x0 + strh r9, [r5, #-0x2]! + add r6, r6, #0x1 + bne _020E571C + cmp r4, #0x8 + bne _020E5788 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrneh r0, [r5, #0x0] + cmpne r0, #0x30 + movne r0, #0x30 + strneh r0, [r5, #-0x2]! + addne r6, r6, #0x1 +_020E5788: + ldrb r0, [sp, #0x40] + cmp r0, #0x2 + bne _020E57BC + ldr r0, [sp, #0xc] + ldr r7, [sp, #0x8] + cmp r0, #0x0 + cmpeq r11, #0x0 + subne r7, r7, #0x1 + cmp r4, #0x10 + bne _020E57BC + ldr r0, [sp, #0x4] + cmp r0, #0x0 + subne r7, r7, #0x2 +_020E57BC: + ldr r0, [sp, #0x0] + ldr r1, _020E5864 ; =0x000001FD + sub r0, r0, r5 + add r0, r0, r0, lsr #0x1f + add r0, r7, r0, asr #0x1 + cmp r0, r1 + addgt sp, sp, #0x10 + movgt r0, #0x0 + ldmgtia sp!, {r3-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + cmp r6, r7 + bge _020E5804 + mov r0, #0x30 +_020E57F4: + add r6, r6, #0x1 + cmp r6, r7 + strh r0, [r5, #-0x2]! + blt _020E57F4 +_020E5804: + cmp r4, #0x10 + bne _020E5820 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x30 + strneh r8, [r5, #-0x2] + strneh r0, [r5, #-0x4]! +_020E5820: + ldr r0, [sp, #0xc] + cmp r0, #0x0 + movne r0, #0x2d + strneh r0, [r5, #-0x2]! + bne _020E5850 + cmp r11, #0x1 + moveq r0, #0x2b + streqh r0, [r5, #-0x2]! + beq _020E5850 + cmp r11, #0x2 + moveq r0, #0x20 + streqh r0, [r5, #-0x2]! +_020E5850: + mov r0, r5 + add sp, sp, #0x10 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E5864: .word 0x000001FD + + arm_func_start longlong2str_wide +longlong2str_wide: ; 0x020E5868 + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x18 + mov r9, r1 + mov r1, #0x0 + mov r10, r0 + mov r6, r2 + mov r0, r1 + strh r0, [r6, #-0x2]! + ldr r0, [sp, #0x58] + cmp r9, #0x0 + str r0, [sp, #0x10] + ldrb r0, [sp, #0x4f] + cmpeq r10, #0x0 + str r2, [sp, #0x0] + str r0, [sp, #0x4] + ldr r0, [sp, #0x54] + str r1, [sp, #0x14] + str r0, [sp, #0x8] + ldrb r0, [sp, #0x4d] + mov r7, r1 + ldrh r8, [sp, #0x52] + str r0, [sp, #0xc] + ldreq r0, [sp, #0x10] + cmpeq r0, #0x0 + bne _020E58F8 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020E58E4 + cmp r8, #0x6f + beq _020E58F8 +_020E58E4: + add sp, sp, #0x18 + mov r0, r6 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E58F8: + cmp r8, #0x69 + bgt _020E5920 + bge _020E5950 + cmp r8, #0x58 + bgt _020E5914 + beq _020E59A4 + b _020E59B0 +_020E5914: + cmp r8, #0x64 + beq _020E5950 + b _020E59B0 +_020E5920: + cmp r8, #0x6f + bgt _020E5930 + beq _020E5984 + b _020E59B0 +_020E5930: + cmp r8, #0x78 + bgt _020E59B0 + cmp r8, #0x75 + blt _020E59B0 + beq _020E5994 + cmp r8, #0x78 + beq _020E59A4 + b _020E59B0 +_020E5950: + subs r0, r10, #0x0 + sbcs r0, r9, #0x0 + mov r11, #0xa + mov r5, #0x0 + bge _020E59B0 + cmp r9, #0x80000000 + cmpeq r10, r5 + beq _020E5978 + rsbs r10, r10, #0x0 + rsc r9, r9, #0x0 +_020E5978: + mov r0, #0x1 + str r0, [sp, #0x14] + b _020E59B0 +_020E5984: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0x8 + b _020E59B0 +_020E5994: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0xa + b _020E59B0 +_020E59A4: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0x10 +_020E59B0: + mov r0, r10 + mov r1, r9 + mov r2, r11 + mov r3, r5 + bl _ull_mod + mov r4, r0 + mov r0, r10 + mov r1, r9 + mov r2, r11 + mov r3, r5 + bl _ll_udiv + mov r10, r0 + cmp r4, #0xa + mov r9, r1 + addlt r0, r4, #0x30 + blt _020E59FC + cmp r8, #0x78 + addeq r0, r4, #0x57 + addne r0, r4, #0x37 +_020E59FC: + strh r0, [r6, #-0x2]! + mov r0, #0x0 + cmp r9, r0 + cmpeq r10, r0 + add r7, r7, #0x1 + bne _020E59B0 + cmp r5, #0x0 + cmpeq r11, #0x8 + bne _020E5A3C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrneh r0, [r6, #0x0] + cmpne r0, #0x30 + movne r0, #0x30 + strneh r0, [r6, #-0x2]! + addne r7, r7, #0x1 +_020E5A3C: + ldrb r0, [sp, #0x4c] + cmp r0, #0x2 + bne _020E5A8C + ldr r0, [sp, #0x8] + str r0, [sp, #0x10] + ldr r0, [sp, #0x14] + cmp r0, #0x0 + ldreq r0, [sp, #0xc] + cmpeq r0, #0x0 + ldrne r0, [sp, #0x10] + subne r0, r0, #0x1 + strne r0, [sp, #0x10] + cmp r5, #0x0 + cmpeq r11, #0x10 + bne _020E5A8C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrne r0, [sp, #0x10] + subne r0, r0, #0x2 + strne r0, [sp, #0x10] +_020E5A8C: + ldr r0, [sp, #0x0] + ldr r2, _020E5B48 ; =0x000001FD + sub r0, r0, r6 + add r1, r0, r0, lsr #0x1f + ldr r0, [sp, #0x10] + add r0, r0, r1, asr #0x1 + cmp r0, r2 + addgt sp, sp, #0x18 + movgt r0, #0x0 + ldmgtia sp!, {r3-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + ldr r0, [sp, #0x10] + cmp r7, r0 + bge _020E5AE0 + mov r1, #0x30 +_020E5ACC: + ldr r0, [sp, #0x10] + add r7, r7, #0x1 + cmp r7, r0 + strh r1, [r6, #-0x2]! + blt _020E5ACC +_020E5AE0: + cmp r5, #0x0 + cmpeq r11, #0x10 + bne _020E5B00 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x30 + strneh r8, [r6, #-0x2] + strneh r0, [r6, #-0x4]! +_020E5B00: + ldr r0, [sp, #0x14] + cmp r0, #0x0 + movne r0, #0x2d + strneh r0, [r6, #-0x2]! + bne _020E5B34 + ldr r0, [sp, #0xc] + cmp r0, #0x1 + moveq r0, #0x2b + streqh r0, [r6, #-0x2]! + beq _020E5B34 + cmp r0, #0x2 + moveq r0, #0x20 + streqh r0, [r6, #-0x2]! +_020E5B34: + mov r0, r6 + add sp, sp, #0x18 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E5B48: .word 0x000001FD + + arm_func_start double2hex_wide +double2hex_wide: ; 0x020E5B4C + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r10,lr} + sub sp, sp, #0x44 + ldr r7, [sp, #0x80] + ldr r0, _020E5EB8 ; =0x000001FD + mov r8, r2 + cmp r7, r0 + ldrh r6, [sp, #0x7a] + ldrb r5, [sp, #0x77] + ldrb r4, [sp, #0x75] + ldr r1, [sp, #0x68] + ldr r2, [sp, #0x6c] + addgt sp, sp, #0x44 + movgt r0, #0x0 + ldmgtia sp!, {r3-r10,lr} + addgt sp, sp, #0x10 + bxgt lr + mov r10, #0x0 + mov r9, #0x20 + add r0, sp, #0x8 + add r3, sp, #0xc + strb r10, [sp, #0x8] + strh r9, [sp, #0xa] + bl __num2dec_internal2 + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x6c] + bl fabs + mov r2, r0 + mov r0, r10 + mov r3, r1 + mov r1, r0 + bl _deq + bne _020E5BF4 + sub r4, r8, #0xc + ldr r1, _020E5EBC ; =0x02106DE4 + mov r0, r4 + bl wcscpy + add sp, sp, #0x44 + mov r0, r4 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E5BF4: + ldrb r0, [sp, #0x11] + cmp r0, #0x49 + bne _020E5C74 + ldrsb r0, [sp, #0xc] + cmp r0, #0x0 + beq _020E5C38 + cmp r6, #0x41 + sub r4, r8, #0xa + bne _020E5C28 + ldr r1, _020E5EC0 ; =0x02106DF0 + mov r0, r4 + bl wcscpy + b _020E5C60 +_020E5C28: + ldr r1, _020E5EC4 ; =0x02106DFC + mov r0, r4 + bl wcscpy + b _020E5C60 +_020E5C38: + cmp r6, #0x41 + sub r4, r8, #0x8 + bne _020E5C54 + ldr r1, _020E5EC8 ; =0x02106E08 + mov r0, r4 + bl wcscpy + b _020E5C60 +_020E5C54: + ldr r1, _020E5ECC ; =0x02106E10 + mov r0, r4 + bl wcscpy +_020E5C60: + add sp, sp, #0x44 + mov r0, r4 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E5C74: + cmp r0, #0x4e + bne _020E5CF0 + ldrsb r0, [sp, #0xc] + cmp r0, #0x0 + beq _020E5CB4 + cmp r6, #0x41 + sub r4, r8, #0xa + bne _020E5CA4 + ldr r1, _020E5ED0 ; =0x02106E18 + mov r0, r4 + bl wcscpy + b _020E5CDC +_020E5CA4: + ldr r1, _020E5ED4 ; =0x02106E24 + mov r0, r4 + bl wcscpy + b _020E5CDC +_020E5CB4: + cmp r6, #0x41 + sub r4, r8, #0x8 + bne _020E5CD0 + ldr r1, _020E5ED8 ; =0x02106E30 + mov r0, r4 + bl wcscpy + b _020E5CDC +_020E5CD0: + ldr r1, _020E5EDC ; =0x02106E38 + mov r0, r4 + bl wcscpy +_020E5CDC: + add sp, sp, #0x44 + mov r0, r4 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E5CF0: + mov r3, r10 + mov r1, #0x1 + mov r0, #0x64 + add r9, sp, #0x68 + strb r1, [sp, #0x34] + strb r1, [sp, #0x35] + strb r3, [sp, #0x36] + strb r3, [sp, #0x37] + strb r3, [sp, #0x38] + str r3, [sp, #0x3c] + str r1, [sp, #0x40] + strh r0, [sp, #0x3a] +_020E5D20: + rsb r1, r3, #0x7 + ldrsb r2, [r9, r3] + ldrsb r0, [r9, r1] + strb r0, [r9, r3] + add r3, r3, #0x1 + strb r2, [r9, r1] + cmp r3, #0x4 + blt _020E5D20 + ldrb r0, [sp, #0x69] + ldrb r1, [sp, #0x68] + ldr sb, _020E5EE0 ; =0x000007FF + mov r0, r0, lsl #0x11 + orr r1, r0, r1, lsl #0x19 + add r0, sp, #0x34 + and lr, r9, r1, lsr #0x15 + sub r12, sp, #0x8 + ldmia r0, {r0-r3} + stmia r12, {r0-r3} + rsb r0, r9, #0x400 + mov r1, r8 + add r0, lr, r0 + ldmia r12, {r2-r3} + bl long2str_wide + cmp r6, #0x61 + moveq r1, #0x70 + movne r1, #0x50 + strh r1, [r0, #-0x2]! + mov r1, r7, lsl #0x2 + mov lr, r7 + cmp r7, #0x1 + add r8, r1, #0xb + add r12, sp, #0x68 + blt _020E5E30 + mov r9, #0x30 +_020E5DA8: + cmp r8, #0x40 + bge _020E5E18 + ldrb r1, [r12, r8, asr #0x3] + and r2, r8, #0x7 + rsb r3, r2, #0x7 + mov r2, r1, asr r3 + sub r10, r8, #0x4 + bic r1, r8, #0x7 + bic r10, r10, #0x7 + cmp r1, r10 + add r10, r12, r8, asr #0x3 + and r1, r2, #0xff + beq _020E5DEC + ldrb r2, [r10, #-0x1] + mov r2, r2, lsl #0x8 + orr r1, r1, r2, asr r3 + and r1, r1, #0xff +_020E5DEC: + and r1, r1, #0xf + cmp r1, #0xa + addcc r1, r1, #0x30 + andcc r1, r1, #0xff + blo _020E5E1C + cmp r6, #0x61 + addeq r1, r1, #0x57 + andeq r1, r1, #0xff + addne r1, r1, #0x37 + andne r1, r1, #0xff + b _020E5E1C +_020E5E18: + mov r1, r9 +_020E5E1C: + sub lr, lr, #0x1 + cmp lr, #0x1 + strh r1, [r0, #-0x2]! + sub r8, r8, #0x4 + bge _020E5DA8 +_020E5E30: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r1, #0x2e + strneh r1, [r0, #-0x2]! + mov r1, #0x31 + strh r1, [r0, #-0x2] + cmp r6, #0x61 + moveq r1, #0x78 + movne r1, #0x58 + strh r1, [r0, #-0x4]! + mov r1, #0x30 + strh r1, [r0, #-0x2]! + ldrsb r1, [sp, #0xc] + cmp r1, #0x0 + movne r1, #0x2d + strneh r1, [r0, #-0x2]! + addne sp, sp, #0x44 + ldmneia sp!, {r3-r10,lr} + addne sp, sp, #0x10 + bxne lr + cmp r4, #0x1 + moveq r1, #0x2b + streqh r1, [r0, #-0x2]! + addeq sp, sp, #0x44 + ldmeqia sp!, {r3-r10,lr} + addeq sp, sp, #0x10 + bxeq lr + cmp r4, #0x2 + moveq r1, #0x20 + streqh r1, [r0, #-0x2]! + add sp, sp, #0x44 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E5EB8: .word 0x000001FD +_020E5EBC: .word 0x02106DE4 +_020E5EC0: .word 0x02106DF0 +_020E5EC4: .word 0x02106DFC +_020E5EC8: .word 0x02106E08 +_020E5ECC: .word 0x02106E10 +_020E5ED0: .word 0x02106E18 +_020E5ED4: .word 0x02106E24 +_020E5ED8: .word 0x02106E30 +_020E5EDC: .word 0x02106E38 +_020E5EE0: .word 0x000007FF + + arm_func_start round_decimal_wide +round_decimal_wide: ; 0x020E5EE4 + stmdb sp!, {r4,lr} + cmp r1, #0x0 + bge _020E5F0C +_020E5EF0: + mov r1, #0x0 + strh r1, [r0, #0x2] + mov r1, #0x1 + strb r1, [r0, #0x4] + mov r1, #0x30 + strb r1, [r0, #0x5] + ldmia sp!, {r4,pc} +_020E5F0C: + ldrb lr, [r0, #0x4] + cmp r1, lr + ldmgeia sp!, {r4,pc} +_020E5F18: ; 0x020E5F18 + add r12, r0, #0x5 + add r2, r12, r1 + add r2, r2, #0x1 + ldrsb r3, [r2, #-0x1]! + sub r3, r3, #0x30 + mov r3, r3, lsl #0x18 + mov r3, r3, asr #0x18 + cmp r3, #0x5 + bne _020E5F6C + add r12, r12, lr +_020E5F40: + sub r12, r12, #0x1 + cmp r12, r2 + bls _020E5F58 + ldrsb r3, [r12, #0x0] + cmp r3, #0x30 + beq _020E5F40 +_020E5F58: + cmp r12, r2 + ldreqsb r3, [r2, #-0x1] + andeq r4, r3, #0x1 + movne r4, #0x1 + b _020E5F74 +_020E5F6C: + movgt r4, #0x1 + movle r4, #0x0 +_020E5F74: + cmp r1, #0x0 + beq _020E5FD0 + mov r12, #0x0 + mov lr, #0x1 +_020E5F84: + ldrsb r3, [r2, #-0x1]! + sub r3, r3, #0x30 + add r3, r3, r4 + mov r3, r3, lsl #0x18 + mov r3, r3, asr #0x18 + cmp r3, #0x9 + movgt r4, lr + movle r4, r12 + cmp r4, #0x0 + bne _020E5FB4 + cmp r3, #0x0 + bne _020E5FBC +_020E5FB4: + sub r1, r1, #0x1 + b _020E5FC8 +_020E5FBC: + add r3, r3, #0x30 + strb r3, [r2, #0x0] + b _020E5FD0 +_020E5FC8: + cmp r1, #0x0 + bne _020E5F84 +_020E5FD0: + cmp r4, #0x0 + beq _020E5FF8 + ldrsh r3, [r0, #0x2] + mov r2, #0x1 + mov r1, #0x31 + add r3, r3, #0x1 + strh r3, [r0, #0x2] + strb r2, [r0, #0x4] + strb r1, [r0, #0x5] + ldmia sp!, {r4,pc} +_020E5FF8: + cmp r1, #0x0 + beq _020E5EF0 + strb r1, [r0, #0x4] + ldmia sp!, {r4,pc} + + arm_func_start float2str_wide +float2str_wide: ; 0x020E6008 + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x22c + mov r10, r0 + add r0, sp, #0x250 + ldr r7, [sp, #0x268] + ldr r3, _020E6628 ; =0x000001FD + ldrh r6, [r0, #0x12] + cmp r7, r3 + ldrb r5, [sp, #0x25f] + ldrb r4, [sp, #0x25d] + mov r8, r1 + mov r9, r2 + addgt sp, sp, #0x22c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + mov r12, #0x0 + mov r11, #0x20 + add r0, sp, #0x0 + add r3, sp, #0x4 + mov r1, r10 + mov r2, r8 + strb r12, [sp, #0x0] + strh r11, [sp, #0x2] + bl __num2dec_internal2 + ldrb r0, [sp, #0x8] + add r1, sp, #0x9 + add r0, r1, r0 + b _020E609C +_020E6084: + ldrb r2, [sp, #0x8] + ldrsh r1, [sp, #0x6] + sub r2, r2, #0x1 + add r1, r1, #0x1 + strb r2, [sp, #0x8] + strh r1, [sp, #0x6] +_020E609C: + ldrb r1, [sp, #0x8] + cmp r1, #0x1 + bls _020E60B4 + ldrsb r1, [r0, #-0x1]! + cmp r1, #0x30 + beq _020E6084 +_020E60B4: + ldrb r0, [sp, #0x9] + cmp r0, #0x30 + beq _020E60D4 + cmp r0, #0x49 + beq _020E60E0 + cmp r0, #0x4e + beq _020E6198 + b _020E6244 +_020E60D4: + mov r0, #0x0 + strh r0, [sp, #0x6] + b _020E6244 +_020E60E0: + mov r2, #0x0 + mov r0, r10 + mov r1, r8 + mov r3, r2 + bl _dls + bhs _020E6140 + cmp r6, #0x80 + sub r4, r9, #0xa + movcs r0, #0x0 + bhs _020E6118 + ldr r0, _020E662C ; =0x02104544 + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x200 +_020E6118: + cmp r0, #0x0 + beq _020E6130 + ldr r1, _020E6630 ; =0x02106DF0 + mov r0, r4 + bl wcscpy + b _020E6184 +_020E6130: + ldr r1, _020E6634 ; =0x02106DFC + mov r0, r4 + bl wcscpy + b _020E6184 +_020E6140: + cmp r6, #0x80 + sub r4, r9, #0x8 + movcs r0, #0x0 + bhs _020E6160 + ldr r0, _020E662C ; =0x02104544 + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x200 +_020E6160: + cmp r0, #0x0 + beq _020E6178 + ldr r1, _020E6638 ; =0x02106E08 + mov r0, r4 + bl wcscpy + b _020E6184 +_020E6178: + ldr r1, _020E663C ; =0x02106E10 + mov r0, r4 + bl wcscpy +_020E6184: + add sp, sp, #0x22c + mov r0, r4 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E6198: + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + beq _020E61EC + cmp r6, #0x80 + sub r4, r9, #0xa + movcs r0, #0x0 + bhs _020E61C4 + ldr r0, _020E662C ; =0x02104544 + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x200 +_020E61C4: + cmp r0, #0x0 + beq _020E61DC + ldr r1, _020E6640 ; =0x02106E18 + mov r0, r4 + bl wcscpy + b _020E6230 +_020E61DC: + ldr r1, _020E6644 ; =0x02106E24 + mov r0, r4 + bl wcscpy + b _020E6230 +_020E61EC: + cmp r6, #0x80 + sub r4, r9, #0x8 + movcs r0, #0x0 + bhs _020E620C + ldr r0, _020E662C ; =0x02104544 + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x200 +_020E620C: + cmp r0, #0x0 + beq _020E6224 + ldr r1, _020E6648 ; =0x02106E30 + mov r0, r4 + bl wcscpy + b _020E6230 +_020E6224: + ldr r1, _020E664C ; =0x02106E38 + mov r0, r4 + bl wcscpy +_020E6230: + add sp, sp, #0x22c + mov r0, r4 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E6244: + ldrb r1, [sp, #0x8] + ldrsh r2, [sp, #0x6] + add r0, sp, #0x200 + sub r1, r1, #0x1 + add r0, r0, #0x2a + add r1, r2, r1 + sub r8, r0, #0x1 + strh r1, [sp, #0x6] + mov r0, #0x0 + strb r0, [r8, #0x0] + cmp r6, #0x65 + bgt _020E62A0 + bge _020E632C + cmp r6, #0x47 + bgt _020E65EC + cmp r6, #0x45 + blt _020E65EC + beq _020E632C + cmp r6, #0x46 + beq _020E6478 + cmp r6, #0x47 + beq _020E62B8 + b _020E65EC +_020E62A0: + cmp r6, #0x66 + bgt _020E62B0 + beq _020E6478 + b _020E65EC +_020E62B0: + cmp r6, #0x67 + bne _020E65EC +_020E62B8: + ldrb r0, [sp, #0x8] + cmp r0, r7 + ble _020E62D0 + add r0, sp, #0x4 + mov r1, r7 + bl round_decimal_wide +_020E62D0: + ldrsh r2, [sp, #0x6] + mvn r0, #0x3 + cmp r2, r0 + blt _020E62E8 + cmp r2, r7 + blt _020E6308 +_020E62E8: + cmp r5, #0x0 + ldreqb r0, [sp, #0x8] + subne r7, r7, #0x1 + subeq r7, r0, #0x1 + cmp r6, #0x67 + moveq r6, #0x65 + movne r6, #0x45 + b _020E632C +_020E6308: + cmp r5, #0x0 + addne r0, r2, #0x1 + subne r7, r7, r0 + bne _020E6478 + ldrb r1, [sp, #0x8] + add r0, r2, #0x1 + subs r7, r1, r0 + movmi r7, #0x0 + b _020E6478 +_020E632C: + ldrb r0, [sp, #0x8] + add r1, r7, #0x1 + cmp r0, r1 + ble _020E6344 + add r0, sp, #0x4 + bl round_decimal_wide +_020E6344: + ldrsh lr, [sp, #0x6] + mov r11, #0x2b + mov r10, #0x0 + cmp lr, #0x0 + rsblt lr, lr, #0x0 + movlt r11, #0x2d + ldr r3, _020E6650 ; =0x66666667 + mov r0, #0xa + b _020E6398 +_020E6368: + mov r1, lr, lsr #0x1f + smull r2, r12, r3, lr + add r12, r1, r12, asr #0x2 + smull r1, r2, r0, r12 + sub r12, lr, r1 + add r1, r12, #0x30 + strb r1, [r8, #-0x1]! + mov r2, lr + smull r1, lr, r3, r2 + mov r1, r2, lsr #0x1f + add lr, r1, lr, asr #0x2 + add r10, r10, #0x1 +_020E6398: + cmp lr, #0x0 + bne _020E6368 + cmp r10, #0x2 + blt _020E6368 + add r0, sp, #0x2a + strb r11, [r8, #-0x1] + strb r6, [r8, #-0x2]! + sub r1, r0, r8 + ldr r0, _020E6628 ; =0x000001FD + add r1, r1, r7 + cmp r1, r0 + addgt sp, sp, #0x22c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + ldrb r1, [sp, #0x8] + add r0, r7, #0x1 + cmp r1, r0 + bge _020E6408 + add r0, r7, #0x2 + sub r0, r0, r1 + subs r1, r0, #0x1 + beq _020E6408 + mov r0, #0x30 +_020E63FC: + strb r0, [r8, #-0x1]! + subs r1, r1, #0x1 + bne _020E63FC +_020E6408: + ldrb r1, [sp, #0x8] + add r0, sp, #0x9 + add r2, r0, r1 + subs r1, r1, #0x1 + beq _020E642C +_020E641C: + ldrsb r0, [r2, #-0x1]! + subs r1, r1, #0x1 + strb r0, [r8, #-0x1]! + bne _020E641C +_020E642C: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r0, #0x2e + strneb r0, [r8, #-0x1]! + ldrb r0, [sp, #0x9] + strb r0, [r8, #-0x1]! + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r8, #-0x1]! + bne _020E65EC + cmp r4, #0x1 + moveq r0, #0x2b + streqb r0, [r8, #-0x1]! + beq _020E65EC + cmp r4, #0x2 + moveq r0, #0x20 + streqb r0, [r8, #-0x1]! + b _020E65EC +_020E6478: + ldrsh r3, [sp, #0x6] + ldrb r2, [sp, #0x8] + sub r0, r2, r3 + subs r1, r0, #0x1 + movmi r1, #0x0 + cmp r1, r7 + ble _020E64B8 + sub r1, r1, r7 + add r0, sp, #0x4 + sub r1, r2, r1 + bl round_decimal_wide + ldrsh r3, [sp, #0x6] + ldrb r2, [sp, #0x8] + sub r0, r2, r3 + subs r1, r0, #0x1 + movmi r1, #0x0 +_020E64B8: + adds r0, r3, #0x1 + movmi r0, #0x0 + ldr r3, _020E6628 ; =0x000001FD + add r6, r0, r1 + cmp r6, r3 + addgt sp, sp, #0x22c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + add r3, sp, #0x9 + sub r6, r7, r1 + cmp r6, #0x0 + add r2, r3, r2 + mov r10, #0x0 + ble _020E650C + mov r3, #0x30 +_020E64FC: + add r10, r10, #0x1 + cmp r10, r6 + strb r3, [r8, #-0x1]! + blt _020E64FC +_020E650C: + mov r6, #0x0 + b _020E6520 +_020E6514: + ldrsb r3, [r2, #-0x1]! + add r6, r6, #0x1 + strb r3, [r8, #-0x1]! +_020E6520: + cmp r6, r1 + ldrltb r3, [sp, #0x8] + cmplt r6, r3 + blt _020E6514 + cmp r6, r1 + bge _020E654C + mov r3, #0x30 +_020E653C: + add r6, r6, #0x1 + cmp r6, r1 + strb r3, [r8, #-0x1]! + blt _020E653C +_020E654C: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r1, #0x2e + strneb r1, [r8, #-0x1]! + cmp r0, #0x0 + beq _020E65B4 + ldrb r1, [sp, #0x8] + mov r5, #0x0 + sub r1, r0, r1 + cmp r1, #0x0 + ble _020E6594 + mov r3, #0x30 +_020E657C: + strb r3, [r8, #-0x1]! + ldrb r1, [sp, #0x8] + add r5, r5, #0x1 + sub r1, r0, r1 + cmp r5, r1 + blt _020E657C +_020E6594: + cmp r5, r0 + bge _020E65BC +_020E659C: + ldrsb r1, [r2, #-0x1]! + add r5, r5, #0x1 + cmp r5, r0 + strb r1, [r8, #-0x1]! + blt _020E659C + b _020E65BC +_020E65B4: + mov r0, #0x30 + strb r0, [r8, #-0x1]! +_020E65BC: + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r8, #-0x1]! + bne _020E65EC + cmp r4, #0x1 + moveq r0, #0x2b + streqb r0, [r8, #-0x1]! + beq _020E65EC + cmp r4, #0x2 + moveq r0, #0x20 + streqb r0, [r8, #-0x1]! +_020E65EC: + mov r0, r8 + bl strlen + sub r1, r9, r0, lsl #0x1 + mov r0, r8 + sub r4, r1, #0x2 + bl strlen + mov r2, r0 + mov r0, r4 + mov r1, r8 + bl mbstowcs + mov r0, r4 + add sp, sp, #0x22c + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E6628: .word 0x000001FD +_020E662C: .word 0x02104544 +_020E6630: .word 0x02106DF0 +_020E6634: .word 0x02106DFC +_020E6638: .word 0x02106E08 +_020E663C: .word 0x02106E10 +_020E6640: .word 0x02106E18 +_020E6644: .word 0x02106E24 +_020E6648: .word 0x02106E30 +_020E664C: .word 0x02106E38 +_020E6650: .word 0x66666667 + +arm_func_start __wpformatter +__wpformatter: + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x430 + mov r3, #0x20 + mov r11, r2 + strh r3, [sp, #0x1c] + ldrh r2, [r11, #0x0] + mov r9, r0 + mov r8, r1 + cmp r2, #0x0 + mov r4, #0x0 + beq _020E6F24 +_020E6684: + mov r0, r11 + mov r1, #0x25 + bl wcschr + str r0, [sp, #0xc] + cmp r0, #0x0 + bne _020E66D8 + mov r0, r11 + bl wcslen + movs r2, r0 + add r4, r4, r2 + beq _020E6F24 + mov r0, r8 + mov r1, r11 + blx r9 + cmp r0, #0x0 + bne _020E6F24 + add sp, sp, #0x430 + mvn r0, #0x0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E66D8: + sub r0, r0, r11 + add r0, r0, r0, lsr #0x1f + movs r2, r0, asr #0x1 + add r4, r4, r2 + beq _020E6710 + mov r0, r8 + mov r1, r11 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E6710: + add r1, sp, #0x400 + ldr r0, [sp, #0xc] + add r1, r1, #0x64 + add r2, sp, #0x20 + bl parse_format_wprintf + ldrh r1, [sp, #0x26] + mov r11, r0 + cmp r1, #0x61 + bgt _020E6780 + bge _020E6AEC + cmp r1, #0x47 + bgt _020E6774 + subs r0, r1, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020E6768 +_020E674C: ; 0x020E674C + b _020E6AEC +_020E6750: ; 0x020E6750 + b _020E6D90 +_020E6754: ; 0x020E6754 + b _020E6D90 +_020E6758: ; 0x020E6758 + b _020E6D90 +_020E675C: ; 0x020E675C + b _020E6A7C +_020E6760: ; 0x020E6760 + b _020E6A7C +_020E6764: ; 0x020E6764 + b _020E6A7C +_020E6768: + cmp r1, #0x25 + beq _020E6D7C + b _020E6D90 +_020E6774: + cmp r1, #0x58 + beq _020E6940 + b _020E6D90 +_020E6780: + cmp r1, #0x75 + bgt _020E67E8 + subs r0, r1, #0x64 + addpl pc, pc, r0, lsl #0x2 + b _020E67DC +_020E6794: ; 0x020E6794 + b _020E6804 +_020E6798: ; 0x020E6798 + b _020E6A7C +_020E679C: ; 0x020E679C + b _020E6A7C +_020E67A0: ; 0x020E67A0 + b _020E6A7C +_020E67A4: ; 0x020E67A4 + b _020E6D90 +_020E67A8: ; 0x020E67A8 + b _020E6804 +_020E67AC: ; 0x020E67AC + b _020E6D90 +_020E67B0: ; 0x020E67B0 + b _020E6D90 +_020E67B4: ; 0x020E67B4 + b _020E6D90 +_020E67B8: ; 0x020E67B8 + b _020E6D90 +_020E67BC: ; 0x020E67BC + b _020E6C98 +_020E67C0: ; 0x020E67C0 + b _020E6940 +_020E67C4: ; 0x020E67C4 + b _020E6D90 +_020E67C8: ; 0x020E67C8 + b _020E6D90 +_020E67CC: ; 0x020E67CC + b _020E6D90 +_020E67D0: ; 0x020E67D0 + b _020E6B5C +_020E67D4: ; 0x020E67D4 + b _020E6D90 +_020E67D8: ; 0x020E67D8 + b _020E6940 +_020E67DC: + cmp r1, #0x63 + beq _020E6D24 + b _020E6D90 +_020E67E8: + cmp r1, #0x78 + bgt _020E67F8 + beq _020E6940 + b _020E6D90 +_020E67F8: + ldr r0, _020E6F38 ; =0x0000FFFF + cmp r1, r0 + b _020E6D90 +_020E6804: + ldrb r0, [sp, #0x24] + cmp r0, #0x3 + bne _020E6824 + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E68BC +_020E6824: + cmp r0, #0x4 + bne _020E684C + ldr r1, [sp, #0x464] + add r2, r1, #0x8 + str r2, [sp, #0x464] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E68BC +_020E684C: + cmp r0, #0x6 + bne _020E6874 + ldr r1, [sp, #0x464] + add r2, r1, #0x8 + str r2, [sp, #0x464] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E68BC +_020E6874: + cmp r0, #0x7 + bne _020E6890 + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E68BC +_020E6890: + cmp r0, #0x8 + bne _020E68AC + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E68BC +_020E68AC: + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] +_020E68BC: + cmp r0, #0x2 + moveq r1, r10, lsl #0x10 + moveq r10, r1, asr #0x10 + cmp r0, #0x4 + cmpne r0, #0x6 + add r0, sp, #0x20 + bne _020E6904 + sub r5, sp, #0x4 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + ldr r3, [r5, #0x0] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r2, sp, #0x430 + bl longlong2str_wide + movs r6, r0 + beq _020E6D90 + b _020E6928 +_020E6904: + sub r5, sp, #0x8 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + add r1, sp, #0x430 + mov r0, r10 + ldmia r5, {r2-r3} + bl long2str_wide + movs r6, r0 + beq _020E6D90 +_020E6928: + add r0, sp, #0x400 + add r0, r0, #0x2e + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC +_020E6940: + ldrb r0, [sp, #0x24] + cmp r0, #0x3 + bne _020E6960 + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E69F8 +_020E6960: + cmp r0, #0x4 + bne _020E6988 + ldr r1, [sp, #0x464] + add r2, r1, #0x8 + str r2, [sp, #0x464] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E69F8 +_020E6988: + cmp r0, #0x6 + bne _020E69B0 + ldr r1, [sp, #0x464] + add r2, r1, #0x8 + str r2, [sp, #0x464] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E69F8 +_020E69B0: + cmp r0, #0x7 + bne _020E69CC + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E69F8 +_020E69CC: + cmp r0, #0x8 + bne _020E69E8 + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E69F8 +_020E69E8: + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] +_020E69F8: + cmp r0, #0x2 + moveq r1, r10, lsl #0x10 + moveq r10, r1, lsr #0x10 + cmp r0, #0x4 + cmpne r0, #0x6 + add r0, sp, #0x20 + bne _020E6A40 + sub r5, sp, #0x4 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + ldr r3, [r5, #0x0] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r2, sp, #0x430 + bl longlong2str_wide + movs r6, r0 + beq _020E6D90 + b _020E6A64 +_020E6A40: + sub r5, sp, #0x8 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + add r1, sp, #0x430 + mov r0, r10 + ldmia r5, {r2-r3} + bl long2str_wide + movs r6, r0 + beq _020E6D90 +_020E6A64: + add r0, sp, #0x400 + add r0, r0, #0x2e + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC +_020E6A7C: + ldrb r0, [sp, #0x24] + cmp r0, #0x9 + ldrne r0, [sp, #0x464] + addne r0, r0, #0x8 + strne r0, [sp, #0x464] + bne _020E6AA0 + ldr r0, [sp, #0x464] + add r0, r0, #0x8 + str r0, [sp, #0x464] +_020E6AA0: + ldr r7, [r0, #-0x8] + ldr r6, [r0, #-0x4] + add r0, sp, #0x20 + sub r5, sp, #0x4 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + ldr r3, [r5, #0x0] + mov r0, r7 + mov r1, r6 + add r2, sp, #0x430 + bl float2str_wide + movs r6, r0 + beq _020E6D90 + add r0, sp, #0x400 + add r0, r0, #0x2e + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC +_020E6AEC: + ldrb r0, [sp, #0x24] + cmp r0, #0x9 + ldrne r0, [sp, #0x464] + addne r0, r0, #0x8 + strne r0, [sp, #0x464] + bne _020E6B10 + ldr r0, [sp, #0x464] + add r0, r0, #0x8 + str r0, [sp, #0x464] +_020E6B10: + ldr r7, [r0, #-0x8] + ldr r6, [r0, #-0x4] + add r0, sp, #0x20 + sub r5, sp, #0x4 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + ldr r3, [r5, #0x0] + mov r0, r7 + mov r1, r6 + add r2, sp, #0x430 + bl double2hex_wide + movs r6, r0 + beq _020E6D90 + add r0, sp, #0x400 + add r0, r0, #0x2e + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC +_020E6B5C: + ldrb r0, [sp, #0x24] + cmp r0, #0x5 + bne _020E6BF8 + ldr r0, [sp, #0x464] + add r0, r0, #0x4 + str r0, [sp, #0x464] + ldr r6, [r0, #-0x4] + ldrb r0, [sp, #0x23] + cmp r6, #0x0 + ldreq r6, _020E6F3C ; =0x02106E40 + cmp r0, #0x0 + beq _020E6BB0 + ldrh r1, [r6], #0x2 + ldrb r0, [sp, #0x22] + and r7, r1, #0xff + cmp r0, #0x0 + beq _020E6DDC + ldr r0, [sp, #0x2c] + cmp r7, r0 + movgt r7, r0 + b _020E6DDC +_020E6BB0: + ldrb r0, [sp, #0x22] + cmp r0, #0x0 + beq _020E6BE8 + ldr r7, [sp, #0x2c] + mov r0, r6 + mov r2, r7 + mov r1, #0x0 + bl wmemchr +_020E6BD0: ; 0x020E6BD0 + cmp r0, #0x0 + beq _020E6DDC + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC +_020E6BE8: + mov r0, r6 + bl wcslen + mov r7, r0 + b _020E6DDC +_020E6BF8: + ldr r0, [sp, #0x464] + add r0, r0, #0x4 + str r0, [sp, #0x464] + ldr r5, [r0, #-0x4] + ldrb r0, [sp, #0x23] + cmp r5, #0x0 + ldreq r5, _020E6F40 ; =0x02106E44 + cmp r0, #0x0 + beq _020E6C40 + ldrh r1, [r6, #0x0] + ldrb r0, [sp, #0x22] + and r6, r1, #0xff + cmp r0, #0x0 + beq _020E6C78 + ldr r0, [sp, #0x2c] + cmp r6, r0 + movgt r6, r0 + b _020E6C78 +_020E6C40: + ldrb r0, [sp, #0x22] + cmp r0, #0x0 + beq _020E6C6C + ldr r6, [sp, #0x2c] + mov r0, r5 + mov r2, r6 + mov r1, #0x0 + bl memchr +_020E6C60: ; 0x020E6C60 + cmp r0, #0x0 + subne r6, r0, r5 + b _020E6C78 +_020E6C6C: + mov r0, r5 + bl strlen + mov r6, r0 +_020E6C78: + add r0, sp, #0x30 + mov r1, r5 + mov r2, r6 + bl mbstowcs + movs r7, r0 + bmi _020E6D90 + add r6, sp, #0x30 + b _020E6DDC +_020E6C98: + ldr r1, [sp, #0x464] + ldrb r0, [sp, #0x24] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r6, [r1, #-0x4] + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020E6F18 +_020E6CB8: + b _020E6CDC +_020E6CBC: + b _020E6F18 +_020E6CC0: + b _020E6CE4 +_020E6CC4: + b _020E6CEC +_020E6CC8: + b _020E6D14 +_020E6CCC: + b _020E6F18 +_020E6CD0: + b _020E6CF4 +_020E6CD4: + b _020E6D04 +_020E6CD8: + b _020E6D0C +_020E6CDC: + str r4, [r6, #0x0] + b _020E6F18 +_020E6CE4: + strh r4, [r6, #0x0] + b _020E6F18 +_020E6CEC: + str r4, [r6, #0x0] + b _020E6F18 +_020E6CF4: + str r4, [r6, #0x0] + mov r0, r4, asr #0x1f + str r0, [r6, #0x4] + b _020E6F18 +_020E6D04: + str r4, [r6, #0x0] + b _020E6F18 +_020E6D0C: + str r4, [r6, #0x0] + b _020E6F18 +_020E6D14: + str r4, [r6, #0x0] + mov r0, r4, asr #0x1f + str r0, [r6, #0x4] + b _020E6F18 +_020E6D24: + ldrb r0, [sp, #0x24] + add r6, sp, #0x30 + cmp r0, #0x5 + bne _020E6D50 + ldr r0, [sp, #0x464] + mov r7, #0x1 + add r0, r0, #0x4 + str r0, [sp, #0x464] + ldr r0, [r0, #-0x4] + strh r0, [r6, #0x0] + b _020E6DDC +_020E6D50: + ldr r0, [sp, #0x464] + add r1, sp, #0x18 + add r0, r0, #0x4 + str r0, [sp, #0x464] + ldr r3, [r0, #-0x4] + mov r0, r6 + mov r2, #0x1 + strb r3, [sp, #0x18] + bl mbtowc + mov r7, r0 + b _020E6DDC +_020E6D7C: + mov r0, #0x25 + strh r0, [sp, #0x30] + add r6, sp, #0x30 + mov r7, #0x1 + b _020E6DDC +_020E6D90: + ldr r0, [sp, #0xc] + bl wcslen + movs r5, r0 + beq _020E6DC8 + ldr r1, [sp, #0xc] + mov r0, r8 + mov r2, r5 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E6DC8: + add sp, sp, #0x430 + add r0, r4, r5 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E6DDC: + ldrb r0, [sp, #0x20] + mov r5, r7 + cmp r0, #0x0 + beq _020E6E8C + cmp r0, #0x2 + moveq r1, #0x30 + movne r1, #0x20 + strh r1, [sp, #0x1c] + ldrh r0, [r6, #0x0] + cmp r0, #0x2b + cmpne r0, #0x2d + cmpne r0, #0x20 + bne _020E6E48 + cmp r1, #0x30 + bne _020E6E48 + mov r0, r8 + mov r1, r6 + mov r2, #0x1 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + add r6, r6, #0x2 + sub r7, r7, #0x1 +_020E6E48: + ldr r0, [sp, #0x28] + cmp r5, r0 + bge _020E6E8C +_020E6E54: + mov r0, r8 + add r1, sp, #0x1c + mov r2, #0x1 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x28] + add r5, r5, #0x1 + cmp r5, r0 + blt _020E6E54 +_020E6E8C: + cmp r7, #0x0 + beq _020E6EBC + mov r0, r8 + mov r1, r6 + mov r2, r7 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E6EBC: + ldrb r0, [sp, #0x20] + cmp r0, #0x0 + bne _020E6F14 + ldr r0, [sp, #0x28] + cmp r5, r0 + bge _020E6F14 + mov r7, #0x20 +_020E6ED8: + mov r0, r8 + add r1, sp, #0x1a + mov r2, #0x1 + strh r7, [sp, #0x1a] + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x28] + add r5, r5, #0x1 + cmp r5, r0 + blt _020E6ED8 +_020E6F14: + add r4, r4, r5 +_020E6F18: + ldrh r0, [r11, #0x0] + cmp r0, #0x0 + bne _020E6684 +_020E6F24: + mov r0, r4 + add sp, sp, #0x430 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E6F38: .word 0x0000FFFF +_020E6F3C: .word 0x02106E40 +_020E6F40: .word 0x02106E44 + + arm_func_start __wStringWrite +__wStringWrite: ; 0x020E6F44 + stmdb sp!, {r3-r5,lr} + mov r4, r0 + ldr r3, [r4, #0x8] + mov r5, r2 + ldr r2, [r4, #0x4] + add r0, r3, r5 + cmp r0, r2 + ldr r0, [r4, #0x0] + subhi r5, r2, r3 + mov r2, r5 + add r0, r0, r3, lsl #0x1 + bl wmemcpy + ldr r1, [r4, #0x8] + add r1, r1, r5 + str r1, [r4, #0x8] + ldmia sp!, {r3-r5,pc} + + arm_func_start swprintf +swprintf: ; 0x020E6F84 + stmdb sp!, {r0-r3} + stmdb sp!, {r3,lr} + add r3, sp, #0x10 + bic r3, r3, #0x3 + ldr r2, [sp, #0x10] + add r3, r3, #0x4 + bl vswprintf + ldmia sp!, {r3,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start vswprintf +vswprintf: ; 0x020E6FAC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + mov r4, r1 + mov r12, #0x0 + ldr r0, _020E7018 ; =__wStringWrite + add r1, sp, #0x0 + str r5, [sp, #0x0] + str r4, [sp, #0x4] + str r12, [sp, #0x8] + bl __wpformatter +_020E6FD8: ; 0x020E6FD8 + cmp r0, #0x0 + addlt sp, sp, #0xc + ldmltia sp!, {r4-r5,pc} +_020E6FE4: ; 0x020E6FE4 + cmp r0, r4 + bhs _020E7000 + mov r1, r0, lsl #0x1 + mov r2, #0x0 + add sp, sp, #0xc + strh r2, [r5, r1] + ldmia sp!, {r4-r5,pc} +_020E7000: + mov r1, #0x0 + add r0, r5, r4, lsl #0x1 + strh r1, [r0, #-0x2] + sub r0, r1, #0x1 + add sp, sp, #0xc + ldmia sp!, {r4-r5,pc} + .balign 4 +_020E7018: .word __wStringWrite + + arm_func_start wcslen +wcslen: ; 0x020E701C + mvn r2, #0x0 +_020E7020: + ldrh r1, [r0], #0x2 + add r2, r2, #0x1 + cmp r1, #0x0 + bne _020E7020 + mov r0, r2 + bx lr + + arm_func_start wcscpy +wcscpy: ; 0x020E7038 + mov r3, r0 +_020E703C: + ldrh r2, [r1], #0x2 + mov r12, r3 + strh r2, [r3], #0x2 + ldrh r2, [r12, #0x0] + cmp r2, #0x0 + bne _020E703C + bx lr + + arm_func_start wcschr +wcschr: ; 0x020E7058 + ldrh r2, [r0], #0x2 + cmp r2, #0x0 + beq _020E707C +_020E7064: + cmp r2, r1 + subeq r0, r0, #0x2 + bxeq lr + ldrh r2, [r0], #0x2 + cmp r2, #0x0 + bne _020E7064 +_020E707C: + cmp r1, #0x0 + movne r0, #0x0 + subeq r0, r0, #0x2 + bx lr + + arm_func_start __ieee754_pow +__ieee754_pow: ; 0x020E708C + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x80 + ldr r8, [sp, #0xb4] + ldr r6, [sp, #0xac] + ldr r0, [sp, #0xb0] + bic r9, r8, #0x80000000 + orrs r1, r9, r0 + ldr r7, [sp, #0xa8] + bic r4, r6, #0x80000000 + addeq sp, sp, #0x80 + moveq r0, #0x0 + ldreq r1, _020E7638 ; =0x3FF00000 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r1, _020E763C ; =0x7FF00000 + cmp r4, r1 + bgt _020E70FC + bne _020E70E4 + cmp r7, #0x0 + bne _020E70FC +_020E70E4: + ldr r1, _020E763C ; =0x7FF00000 + cmp r9, r1 + bgt _020E70FC + bne _020E7120 + cmp r0, #0x0 + beq _020E7120 +_020E70FC: + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + ldr r2, [sp, #0xb0] + ldr r3, [sp, #0xb4] + bl _dadd + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7120: + cmp r6, #0x0 + mov r5, #0x0 + bge _020E7188 + ldr r1, _020E7640 ; =0x43400000 + cmp r9, r1 + movge r5, #0x2 + bge _020E7188 + sub r1, r1, #0x3500000 + cmp r9, r1 + blt _020E7188 + ldr r1, _020E7644 ; =0xFFFFFC01 + add r1, r1, r9, asr #0x14 + cmp r1, #0x14 + ble _020E7170 + rsb r2, r1, #0x34 + mov r1, r0, lsr r2 + cmp r0, r1, lsl r2 + andeq r1, r1, #0x1 + rsbeq r5, r1, #0x2 + b _020E7188 +_020E7170: + cmp r0, #0x0 + rsbeq r2, r1, #0x14 + moveq r1, r9, asr r2 + cmpeq r9, r1, lsl r2 + andeq r1, r1, #0x1 + rsbeq r5, r1, #0x2 +_020E7188: + cmp r0, #0x0 + bne _020E72E4 + ldr r1, _020E763C ; =0x7FF00000 + cmp r9, r1 + bne _020E723C + add r0, r4, #0x100000 + add r0, r0, #0xc0000000 + orrs r0, r0, r7 + bne _020E71D0 + ldr r0, [sp, #0xb0] + ldr r1, [sp, #0xb4] + mov r2, r0 + mov r3, r1 + bl _dsub + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E71D0: + sub r0, r1, #0x40000000 + cmp r4, r0 + blt _020E7200 + cmp r8, #0x0 + ldrge r0, [sp, #0xb0] + ldrge r1, [sp, #0xb4] + movlt r0, #0x0 + add sp, sp, #0x80 + movlt r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7200: + cmp r8, #0x0 + mov r0, #0x0 + addge sp, sp, #0x80 + movge r1, r0 + ldmgeia sp!, {r3-r11,lr} + addge sp, sp, #0x10 + bxge lr + ldr r2, [sp, #0xb0] + ldr r3, [sp, #0xb4] + mov r1, r0 + bl _dsub + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E723C: + sub r0, r1, #0x40000000 + cmp r9, r0 + bne _020E7288 + cmp r8, #0x0 + ldrge r0, [sp, #0xa8] + ldrge r1, [sp, #0xac] + addge sp, sp, #0x80 + ldmgeia sp!, {r3-r11,lr} + addge sp, sp, #0x10 + bxge lr + ldr r2, [sp, #0xa8] + ldr r3, [sp, #0xac] + sub r1, r1, #0x40000000 + mov r0, #0x0 + bl _ddiv + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7288: + cmp r8, #0x40000000 + bne _020E72B4 + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + mov r2, r0 + mov r3, r1 + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E72B4: + ldr r0, _020E7648 ; =0x3FE00000 + cmp r8, r0 + bne _020E72E4 + cmp r6, #0x0 + blt _020E72E4 + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + bl _dsqrt + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E72E4: + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + bl fabs + str r0, [sp, #0x70] + str r1, [sp, #0x74] + cmp r7, #0x0 + bne _020E73E8 + ldr r0, _020E763C ; =0x7FF00000 + cmp r4, r0 + cmpne r4, #0x0 + subne r0, r0, #0x40000000 + cmpne r4, r0 + bne _020E73E8 + ldr r2, [sp, #0x70] + ldr r3, [sp, #0x74] + str r2, [sp, #0x78] + str r3, [sp, #0x7c] + cmp r8, #0x0 + bge _020E7344 + ldr r1, _020E7638 ; =0x3FF00000 + mov r0, #0x0 + bl _ddiv + str r0, [sp, #0x78] + str r1, [sp, #0x7c] +_020E7344: + cmp r6, #0x0 + bge _020E73D0 + add r0, r4, #0x100000 + add r0, r0, #0xc0000000 + orrs r0, r0, r5 + bne _020E73AC + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + mov r2, r0 + mov r3, r1 + bl _dsub + mov r4, r0 + mov r5, r1 + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + mov r2, r0 + mov r3, r1 + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r5 + bl _ddiv + str r0, [sp, #0x78] + str r1, [sp, #0x7c] + b _020E73D0 +_020E73AC: + cmp r5, #0x1 + bne _020E73D0 + mov r0, #0x0 + ldr r2, [sp, #0x78] + ldr r3, [sp, #0x7c] + mov r1, r0 + bl _dsub + str r0, [sp, #0x78] + str r1, [sp, #0x7c] +_020E73D0: + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E73E8: + mov r0, r6, asr #0x1f + add r7, r0, #0x1 + orrs r0, r7, r5 + bne _020E7420 + ldr r0, _020E764C ; =0x02106B78 + ldr r1, _020E7650 ; =0x021D74A8 + ldr r0, [r0, #0x0] + mov r2, #0x21 + str r2, [r1, #0x0] + bl _f2d + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7420: + ldr r3, _020E7654 ; =0x41E00000 + cmp r9, r3 + ble _020E7724 + add r0, r3, #0x2100000 + cmp r9, r0 + ble _020E7490 + ldr r1, _020E7658 ; =0x3FEFFFFF + cmp r4, r1 + bgt _020E7464 + cmp r8, #0x0 + mov r0, #0x0 + addlt r1, r1, #0x40000001 + add sp, sp, #0x80 + movge r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7464: + add r0, r1, #0x1 + cmp r4, r0 + blt _020E7490 + cmp r8, #0x0 + mov r0, #0x0 + addgt r1, r1, #0x40000001 + add sp, sp, #0x80 + movle r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7490: + ldr r2, _020E7658 ; =0x3FEFFFFF + cmp r4, r2 + bge _020E74BC + cmp r8, #0x0 + mov r0, #0x0 + addlt r1, r2, #0x40000001 + add sp, sp, #0x80 + movge r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E74BC: + add r0, r2, #0x1 + cmp r4, r0 + ble _020E74E8 + cmp r8, #0x0 + mov r0, #0x0 + addgt r1, r2, #0x40000001 + add sp, sp, #0x80 + movle r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E74E8: + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + add r3, r2, #0x1 + mov r2, #0x0 + bl _dsub + mov r2, r0 + mov r3, r1 + str r0, [sp, #0x50] + str r1, [sp, #0x54] + bl _dmul + mov r6, r1 + mov r4, r0 + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + ldr r1, _020E765C ; =0x3FD00000 + mov r0, #0x0 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7660 ; =0x55555555 + sub r1, r0, #0x15800000 + bl _dsub + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, #0x0 + ldr r1, _020E7648 ; =0x3FE00000 + bl _dsub + mov r2, r0 + mov r0, r4 + mov r3, r1 + mov r1, r6 + bl _dmul + mov r6, r0 + mov r8, r1 + mov r0, #0x60000000 + ldr r1, _020E7664 ; =0x3FF71547 + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + bl _dmul + mov r4, r0 + mov r9, r1 + ldr r0, _020E7668 ; =0xF85DDF44 + ldr r1, _020E766C ; =0x3E54AE0B + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + bl _dmul + mov r11, r0 + mov r10, r1 + ldr r0, _020E7670 ; =0x652B82FE + ldr r1, _020E7664 ; =0x3FF71547 + mov r2, r6 + mov r3, r8 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r11 + mov r1, r10 + bl _dsub + mov r6, r0 + mov r8, r1 + mov r0, r4 + mov r1, r9 + mov r2, r6 + mov r3, r8 + bl _dadd + mov r2, r4 + mov r3, r9 + str r1, [sp, #0x5c] + mov r0, #0x0 + str r0, [sp, #0x58] + bl _dsub + mov r2, r0 + mov r0, r6 + mov r3, r1 + mov r1, r8 + bl _dsub + mov r4, r0 + mov r8, r1 + b _020E7C80 + .balign 4 +_020E7638: .word 0x3FF00000 +_020E763C: .word 0x7FF00000 +_020E7640: .word 0x43400000 +_020E7644: .word 0xFFFFFC01 +_020E7648: .word 0x3FE00000 +_020E764C: .word 0x02106B78 +_020E7650: .word 0x021D74A8 +_020E7654: .word 0x41E00000 +_020E7658: .word 0x3FEFFFFF +_020E765C: .word 0x3FD00000 +_020E7660: .word 0x55555555 +_020E7664: .word 0x3FF71547 +_020E7668: .word 0xF85DDF44 +_020E766C: .word 0x3E54AE0B +_020E7670: .word 0x652B82FE +_020E7674: .word 0x0003988E +_020E7678: .word 0x000BB67A +_020E767C: .word 0x02104754 +_020E7680: .word 0x4A454EEF +_020E7684: .word 0x3FCA7E28 +_020E7688: .word 0x93C9DB65 +_020E768C: .word 0x3FCD864A +_020E7690: .word 0xA91D4101 +_020E7694: .word 0x3FD17460 +_020E7698: .word 0x518F264D +_020E769C: .word 0x3FD55555 +_020E76A0: .word 0xDB6FABFF +_020E76A4: .word 0x3FDB6DB6 +_020E76A8: .word 0x33333303 +_020E76AC: .word 0x3FE33333 +_020E76B0: .word 0x40080000 +_020E76B4: .word 0x3FEEC709 +_020E76B8: .word 0x145B01F5 +_020E76BC: .word 0xBE3E2FE0 +_020E76C0: .word 0xDC3A03FD +_020E76C4: .word 0x02104764 +_020E76C8: .word 0x02104744 +_020E76CC: .word 0x40900000 +_020E76D0: .word 0x8800759C +_020E76D4: .word 0x7E37E43C +_020E76D8: .word 0x3C971547 +_020E76DC: .word 0x3F6F3400 +_020E76E0: .word 0xC2F8F359 +_020E76E4: .word 0x01A56E1F +_020E76E8: .word 0x3FE62E43 +_020E76EC: .word 0xFEFA39EF +_020E76F0: .word 0x3FE62E42 +_020E76F4: .word 0x0CA86C39 +_020E76F8: .word 0xBE205C61 +_020E76FC: .word 0x72BEA4D0 +_020E7700: .word 0x3E663769 +_020E7704: .word 0xC5D26BF1 +_020E7708: .word 0xBEBBBD41 +_020E770C: .word 0xAF25DE2C +_020E7710: .word 0x3F11566A +_020E7714: .word 0x16BEBD93 +_020E7718: .word 0xBF66C16C +_020E771C: .word 0x5555553E +_020E7720: .word 0x3FC55555 +_020E7724: + cmp r4, #0x100000 + mov r6, #0x0 + bge _020E7754 + ldr r0, [sp, #0x70] + ldr r1, [sp, #0x74] + mov r2, r6 + add r3, r3, #0x1600000 + bl _dmul + mov r4, r1 + str r0, [sp, #0x70] + str r4, [sp, #0x74] + sub r6, r6, #0x35 +_020E7754: + ldr r0, _020E7644 ; =0xFFFFFC01 + ldr r1, _020E7674 ; =0x0003988E + and r2, r4, r0, lsr #0xc + add r0, r0, r4, asr #0x14 + orr r9, r2, #0xff00000 + cmp r2, r1 + add r6, r6, r0 + orr r9, r9, #0x30000000 + movle r8, #0x0 + ble _020E7794 + ldr r0, _020E7678 ; =0x000BB67A + cmp r2, r0 + movlt r8, #0x1 + addge r6, r6, #0x1 + subge r9, r9, #0x100000 + movge r8, #0x0 +_020E7794: + ldr r2, _020E767C ; =0x02104754 + ldr r0, [sp, #0x70] + add r1, r2, r8, lsl #0x3 + ldr r3, [r1, #0x4] + ldr r2, [r2, r8, lsl #0x3] + mov r1, r9 + str r9, [sp, #0x74] + bl _dsub + ldr r2, _020E767C ; =0x02104754 + mov r10, r0 + add r3, r2, r8, lsl #0x3 + mov r4, r1 + ldr r0, [sp, #0x70] + ldr r2, [r2, r8, lsl #0x3] + ldr r3, [r3, #0x4] + mov r1, r9 + bl _dadd + mov r3, r1 + mov r2, r0 + ldr r1, _020E7638 ; =0x3FF00000 + mov r0, #0x0 + bl _ddiv + str r1, [sp, #0x24] + mov r11, r0 + ldr r3, [sp, #0x24] + mov r0, r10 + mov r1, r4 + mov r2, r11 + bl _dmul + mov r2, r9, asr #0x1 + orr r2, r2, #0x20000000 + mov r9, r1 + add r2, r2, #0x80000 + add r1, r2, r8, lsl #0x12 + ldr r2, _020E767C ; =0x02104754 + str r0, [sp, #0x28] + add r3, r2, r8, lsl #0x3 + mov r0, #0x0 + ldr r2, [r2, r8, lsl #0x3] + ldr r3, [r3, #0x4] + str r9, [sp, #0x4c] + str r1, [sp, #0x44] + str r0, [sp, #0x48] + str r0, [sp, #0x40] + bl _dsub + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x70] + ldr r1, [sp, #0x74] + bl _dsub + str r0, [sp, #0x2c] + str r1, [sp, #0x1c] + ldr r0, [sp, #0x48] + ldr r2, [sp, #0x40] + ldr r3, [sp, #0x44] + mov r1, r9 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r10 + mov r1, r4 + bl _dsub + mov r10, r0 + mov r4, r1 + ldr r2, [sp, #0x2c] + ldr r3, [sp, #0x1c] + ldr r0, [sp, #0x48] + mov r1, r9 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r10 + mov r1, r4 + bl _dsub + mov r3, r1 + mov r2, r0 + ldr r1, [sp, #0x24] + mov r0, r11 + bl _dmul + str r0, [sp, #0x30] + ldr r0, [sp, #0x28] + str r1, [sp, #0x14] + mov r1, r9 + mov r2, r0 + mov r3, r9 + bl _dmul + mov r4, r0 + mov r10, r1 + mov r2, r4 + mov r3, r10 + bl _dmul + str r0, [sp, #0x34] + mov r11, r1 + ldr r0, _020E7680 ; =0x4A454EEF + ldr r1, _020E7684 ; =0x3FCA7E28 + mov r2, r4 + mov r3, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7688 ; =0x93C9DB65 + ldr r1, _020E768C ; =0x3FCD864A + bl _dadd + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7690 ; =0xA91D4101 + ldr r1, _020E7694 ; =0x3FD17460 + bl _dadd + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7698 ; =0x518F264D + ldr r1, _020E769C ; =0x3FD55555 + bl _dadd + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76A0 ; =0xDB6FABFF + ldr r1, _020E76A4 ; =0x3FDB6DB6 + bl _dadd + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76A8 ; =0x33333303 + ldr r1, _020E76AC ; =0x3FE33333 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x34] + mov r1, r11 + bl _dmul + mov r4, r0 + mov r10, r1 + ldr r0, [sp, #0x48] + ldr r2, [sp, #0x28] + mov r1, r9 + mov r3, r9 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x30] + ldr r1, [sp, #0x14] + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dadd + mov r4, r0 + ldr r0, [sp, #0x48] + mov r10, r1 + mov r1, r9 + mov r2, r0 + mov r3, r1 + bl _dmul + str r1, [sp, #0xc] + mov r11, r0 + ldr r1, _020E76B0 ; =0x40080000 + ldr r3, [sp, #0xc] + mov r0, #0x0 + mov r2, r11 + bl _dadd + mov r2, r4 + mov r3, r10 + bl _dadd +_020E7A6C: ; 0x020E7A6C + mov r0, #0x0 + ldr r3, _020E76B0 ; =0x40080000 + mov r2, r0 + str r1, [sp, #0x44] + str r0, [sp, #0x40] + bl _dsub + ldr r3, [sp, #0xc] + mov r2, r11 + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dsub + str r0, [sp, #0x38] + str r1, [sp, #0x4] + ldr r0, [sp, #0x48] + ldr r2, [sp, #0x40] + ldr r3, [sp, #0x44] + mov r1, r9 + bl _dmul + mov r4, r0 + mov r10, r1 + ldr r0, [sp, #0x30] + ldr r1, [sp, #0x14] + ldr r2, [sp, #0x40] + ldr r3, [sp, #0x44] + bl _dmul + str r0, [sp, #0x3c] + mov r11, r1 + ldr r0, [sp, #0x38] + ldr r1, [sp, #0x4] + ldr r2, [sp, #0x28] + mov r3, r9 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x3c] + mov r1, r11 + bl _dadd + mov r9, r0 + mov r11, r1 + mov r0, r4 + mov r1, r10 + mov r2, r9 + mov r3, r11 + bl _dadd +_020E7B28: ; 0x020E7B28 + mov r0, #0x0 + mov r2, r4 + mov r3, r10 + str r1, [sp, #0x6c] + str r0, [sp, #0x68] + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r9 + mov r1, r11 + bl _dsub + mov r10, r1 + mov r11, r0 + ldr r1, _020E76B4 ; =0x3FEEC709 + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + mov r0, #0xe0000000 + bl _dmul + mov r4, r0 + mov r9, r1 + ldr r0, _020E76B8 ; =0x145B01F5 + ldr r1, _020E76BC ; =0xBE3E2FE0 + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + bl _dmul + mov r2, r11 + mov r3, r10 + mov r11, r0 + mov r10, r1 + ldr r0, _020E76C0 ; =0xDC3A03FD + ldr r1, _020E76B4 ; =0x3FEEC709 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r11 + mov r1, r10 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, _020E76C4 ; =0x02104764 + add r1, r0, r8, lsl #0x3 + ldr r0, [r0, r8, lsl #0x3] + ldr r1, [r1, #0x4] + bl _dadd + mov r11, r0 + mov r10, r1 + mov r0, r6 + bl _dflt + str r0, [sp, #0x50] + str r1, [sp, #0x54] + mov r0, r4 + mov r1, r9 + mov r2, r11 + mov r3, r10 + bl _dadd + ldr r2, _020E76C8 ; =0x02104744 + add r3, r2, r8, lsl #0x3 + ldr r2, [r2, r8, lsl #0x3] + ldr r3, [r3, #0x4] + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dadd + str r1, [sp, #0x5c] + mov r0, #0x0 + str r0, [sp, #0x58] + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + bl _dsub + ldr r2, _020E76C8 ; =0x02104744 + add r3, r2, r8, lsl #0x3 + ldr r2, [r2, r8, lsl #0x3] + ldr r3, [r3, #0x4] + bl _dsub + mov r2, r4 + mov r3, r9 + bl _dsub + mov r2, r0 + mov r0, r11 + mov r3, r1 + mov r1, r10 + bl _dsub + mov r4, r0 + mov r8, r1 +_020E7C80: + sub r0, r5, #0x1 + ldr r1, [sp, #0xb4] + orrs r0, r7, r0 + ldr r5, _020E7638 ; =0x3FF00000 + mov r2, #0x0 + ldr r0, [sp, #0xb0] + mov r3, r1 + mov r6, #0x0 + subeq r5, r5, #0x80000000 + str r1, [sp, #0x64] + str r2, [sp, #0x60] + bl _dsub + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x58] + ldr r1, [sp, #0x5c] + bl _dmul + mov r7, r0 + mov r9, r1 + ldr r0, [sp, #0xb0] + ldr r1, [sp, #0xb4] + mov r2, r4 + mov r3, r8 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r7 + mov r1, r9 + bl _dadd + mov r7, r0 + mov r8, r1 + ldr r0, [sp, #0x60] + ldr r1, [sp, #0x64] + ldr r2, [sp, #0x58] + ldr r3, [sp, #0x5c] + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r7 + mov r1, r8 + str r2, [sp, #0x68] + str r3, [sp, #0x6c] + bl _dadd + mov r9, r1 + ldr r2, _020E76CC ; =0x40900000 + str r0, [sp, #0x78] + str r9, [sp, #0x7c] + cmp r9, r2 + blt _020E7E0C + add r1, r9, #0xf700000 + add r1, r1, #0xb0000000 + orrs r0, r1, r0 + beq _020E7D8C + ldr r0, _020E76D0 ; =0x8800759C + ldr r1, _020E76D4 ; =0x7E37E43C + mov r2, r6 + mov r3, r5 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76D0 ; =0x8800759C + ldr r1, _020E76D4 ; =0x7E37E43C + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7D8C: + ldr r0, _020E7670 ; =0x652B82FE + ldr r1, _020E76D8 ; =0x3C971547 + mov r2, r7 + mov r3, r8 + bl _dadd + mov r4, r0 + mov r10, r1 + ldr r0, [sp, #0x78] + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + mov r1, r9 + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dgr + bls _020E7EC0 + ldr r0, _020E76D0 ; =0x8800759C + ldr r1, _020E76D4 ; =0x7E37E43C + mov r2, r6 + mov r3, r5 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76D0 ; =0x8800759C + ldr r1, _020E76D4 ; =0x7E37E43C + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7E0C: + bic r3, r9, #0x80000000 + add r2, r2, #0xcc00 + cmp r3, r2 + blt _020E7EC0 + ldr r2, _020E76DC ; =0x3F6F3400 + add r2, r9, r2 + orrs r2, r2, r0 + beq _020E7E64 + ldr r0, _020E76E0 ; =0xC2F8F359 + ldr r1, _020E76E4 ; =0x01A56E1F + mov r2, r6 + mov r3, r5 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76E0 ; =0xC2F8F359 + ldr r1, _020E76E4 ; =0x01A56E1F + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7E64: + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r7 + mov r1, r8 + bl _dleq + bhi _020E7EC0 + ldr r0, _020E76E0 ; =0xC2F8F359 + ldr r1, _020E76E4 ; =0x01A56E1F + mov r2, r6 + mov r3, r5 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76E0 ; =0xC2F8F359 + ldr r1, _020E76E4 ; =0x01A56E1F + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7EC0: + ldr r0, _020E7644 ; =0xFFFFFC01 + bic r3, r9, #0x80000000 + ldr r1, _020E7648 ; =0x3FE00000 + add r2, r0, r3, asr #0x14 + cmp r3, r1 + mov r4, #0x0 + ble _020E7F3C + mov r1, #0x100000 + add r2, r2, #0x1 + add r2, r9, r1, asr r2 + bic r3, r2, #0x80000000 + add r0, r0, r3, asr #0x14 + sub r3, r1, #0x1 + mvn r3, r3, asr r0 + sub r1, r1, #0x1 + and r1, r2, r1 + and r2, r2, r3 + str r2, [sp, #0x54] + str r4, [sp, #0x50] + orr r1, r1, #0x100000 + rsb r0, r0, #0x14 + mov r4, r1, asr r0 + cmp r9, #0x0 + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x6c] + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + rsblt r4, r4, #0x0 + bl _dsub + str r0, [sp, #0x68] + str r1, [sp, #0x6c] +_020E7F3C: + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + mov r0, r7 + mov r1, r8 + bl _dadd + mov r3, r1 + mov r0, #0x0 + ldr r1, _020E76E8 ; =0x3FE62E43 + mov r2, r0 + str r3, [sp, #0x54] + str r0, [sp, #0x50] + bl _dmul + mov r9, r0 + mov r10, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + bl _dsub + mov r2, r0 + mov r0, r7 + mov r3, r1 + mov r1, r8 + bl _dsub + mov r2, r0 + mov r3, r1 + ldr r0, _020E76EC ; =0xFEFA39EF + ldr r1, _020E76F0 ; =0x3FE62E42 + bl _dmul + mov r7, r0 + mov r8, r1 + ldr r0, _020E76F4 ; =0x0CA86C39 + ldr r1, _020E76F8 ; =0xBE205C61 + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r0, r7 + mov r3, r1 + mov r1, r8 + bl _dadd + mov r7, r0 + mov r8, r1 + mov r0, r9 + mov r1, r10 + mov r2, r7 + mov r3, r8 + bl _dadd + mov r2, r9 + mov r3, r10 + str r0, [sp, #0x78] + str r1, [sp, #0x7c] + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r7 + mov r1, r8 + bl _dsub + mov r8, r0 + mov r9, r1 + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + mov r2, r0 + mov r3, r1 + bl _dmul + mov r2, r0 + str r2, [sp, #0x50] + mov r3, r1 + str r3, [sp, #0x54] + ldr r0, _020E76FC ; =0x72BEA4D0 + ldr r1, _020E7700 ; =0x3E663769 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7704 ; =0xC5D26BF1 + ldr r1, _020E7708 ; =0xBEBBBD41 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E770C ; =0xAF25DE2C + ldr r1, _020E7710 ; =0x3F11566A + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7714 ; =0x16BEBD93 + ldr r1, _020E7718 ; =0xBF66C16C + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E771C ; =0x5555553E + ldr r1, _020E7720 ; =0x3FC55555 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + bl _dsub + mov r2, r0 + str r2, [sp, #0x58] + mov r3, r1 + str r3, [sp, #0x5c] + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + bl _dmul + mov r7, r0 + mov r10, r1 + ldr r0, [sp, #0x58] + ldr r1, [sp, #0x5c] + mov r2, #0x0 + mov r3, #0x40000000 + bl _dsub + mov r2, r0 + mov r0, r7 + mov r3, r1 + mov r1, r10 + bl _ddiv + mov r7, r0 + mov r10, r1 + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + mov r2, r8 + mov r3, r9 + bl _dmul + mov r2, r0 + mov r0, r8 + mov r3, r1 + mov r1, r9 + bl _dadd + mov r2, r0 + mov r0, r7 + mov r3, r1 + mov r1, r10 + bl _dsub + ldr r2, [sp, #0x78] + ldr r3, [sp, #0x7c] + bl _dsub + mov r3, r1 + mov r2, r0 + ldr r1, _020E7638 ; =0x3FF00000 + mov r0, #0x0 + bl _dsub + add r3, r1, r4, lsl #0x14 + mov r2, r3, asr #0x14 + str r0, [sp, #0x78] + cmp r2, #0x0 + str r1, [sp, #0x7c] + addgt r0, sp, #0x78 + strgt r3, [r0, #0x4] + bgt _020E81F0 + mov r2, r4 + bl scalbn + str r0, [sp, #0x78] + str r1, [sp, #0x7c] +_020E81F0: + ldr r2, [sp, #0x78] + ldr r3, [sp, #0x7c] + mov r0, r6 + mov r1, r5 + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start copysign +copysign: ; 0x020E8214 + stmdb sp!, {r0-r3} + ldr r1, [sp, #0x4] + ldr r0, [sp, #0xc] + bic r1, r1, #0x80000000 + and r0, r0, #0x80000000 + orr r1, r1, r0 + ldr r0, [sp, #0x0] + str r1, [sp, #0x4] + add sp, sp, #0x10 + bx lr + + arm_func_start fabs +fabs: ; 0x020E823C + stmdb sp!, {r0-r3} + add r2, sp, #0x0 + ldr r1, [r2, #0x4] + ldr r0, [sp, #0x0] + bic r1, r1, #0x80000000 + str r1, [r2, #0x4] + add sp, sp, #0x10 + bx lr + + arm_func_start frexp +frexp: ; 0x020E825C + stmdb sp!, {r0-r3} + stmdb sp!, {r4,lr} + ldr r1, [sp, #0xc] + ldr r0, _020E8308 ; =0x7FF00000 + mov r4, r2 + bic r3, r1, #0x80000000 + mov r2, #0x0 + str r2, [r4, #0x0] + cmp r3, r0 + ldr r0, [sp, #0x8] + bge _020E8290 + orrs r0, r3, r0 + bne _020E82A4 +_020E8290: + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E82A4: + cmp r3, #0x100000 + bge _020E82D0 + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + ldr r3, _020E830C ; =0x43500000 + bl _dmul + mvn r2, #0x35 + str r0, [sp, #0x8] + str r1, [sp, #0xc] + str r2, [r4, #0x0] + bic r3, r1, #0x80000000 +_020E82D0: + ldr r2, _020E8310 ; =0x800FFFFF + ldr r0, _020E8314 ; =0xFFFFFC02 + and r1, r1, r2 + orr r1, r1, #0xfe00000 + orr r1, r1, #0x30000000 + ldr r2, [r4, #0x0] + add r0, r0, r3, asr #0x14 + add r2, r2, r0 + ldr r0, [sp, #0x8] + str r2, [r4, #0x0] + str r1, [sp, #0xc] + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E8308: .word 0x7FF00000 +_020E830C: .word 0x43500000 +_020E8310: .word 0x800FFFFF +_020E8314: .word 0xFFFFFC02 + + arm_func_start ldexp +ldexp: ; 0x020E8318 + stmdb sp!, {r0-r3} + stmdb sp!, {r4,lr} + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + mov r4, r2 + bl __fpclassifyf + cmp r0, #0x2 + ble _020E8350 + mov r0, #0x0 + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + mov r1, r0 + bl _deq + bne _020E8364 +_020E8350: + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E8364: + ldr r3, [sp, #0xc] + ldr r0, _020E8538 ; =0x7FF00000 + ldr r1, [sp, #0x8] + and r0, r3, r0 + movs r12, r0, asr #0x14 + bne _020E83F0 + bic r0, r3, #0x80000000 + orrs r0, r1, r0 + ldreq r0, [sp, #0x8] + ldreq r1, [sp, #0xc] + ldmeqia sp!, {r4,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + ldr r3, _020E853C ; =0x43500000 + mov r2, #0x0 + bl _dmul + mov r3, r1 + ldr r1, _020E8538 ; =0x7FF00000 + ldr ip, _020E8540 ; =0xFFFF3CB0 + and r1, r3, r1 + mov r2, r0 + mov r0, r1, asr #0x14 + str r2, [sp, #0x8] + str r3, [sp, #0xc] + cmp r4, r12 + sub r12, r0, #0x36 + bge _020E83F0 + ldr r0, _020E8544 ; =0xC2F8F359 + ldr r1, _020E8548 ; =0x01A56E1F + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E83F0: + ldr r0, _020E854C ; =0x000007FF + cmp r12, r0 + bne _020E841C + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + mov r2, r0 + mov r3, r1 + bl _dadd + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E841C: + add r2, r12, r4 + sub r0, r0, #0x1 + cmp r2, r0 + ble _020E8460 + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + ldr r0, _020E8550 ; =0x8800759C + ldr r1, _020E8554 ; =0x7E37E43C + bl copysign + mov r2, r0 + mov r3, r1 + ldr r0, _020E8550 ; =0x8800759C + ldr r1, _020E8554 ; =0x7E37E43C + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E8460: + cmp r2, #0x0 + ble _020E8488 + ldr r1, _020E8558 ; =0x800FFFFF + ldr r0, [sp, #0x8] + and r1, r3, r1 + orr r1, r1, r2, lsl #0x14 + str r1, [sp, #0xc] + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E8488: + mvn r0, #0x35 + cmp r2, r0 + bgt _020E8508 + ldr r0, _020E855C ; =0x0000C350 + cmp r4, r0 + ble _020E84D4 + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + ldr r0, _020E8550 ; =0x8800759C + ldr r1, _020E8554 ; =0x7E37E43C + bl copysign + mov r2, r0 + mov r3, r1 + ldr r0, _020E8550 ; =0x8800759C + ldr r1, _020E8554 ; =0x7E37E43C + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E84D4: + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + ldr r0, _020E8544 ; =0xC2F8F359 + ldr r1, _020E8548 ; =0x01A56E1F + bl copysign + mov r2, r0 + mov r3, r1 + ldr r0, _020E8544 ; =0xC2F8F359 + ldr r1, _020E8548 ; =0x01A56E1F + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E8508: + ldr r0, _020E8558 ; =0x800FFFFF + add r1, r2, #0x36 + and r0, r3, r0 + orr r3, r0, r1, lsl #0x14 + ldr r2, [sp, #0x8] + ldr r1, _020E8560 ; =0x3C900000 + mov r0, #0x0 + str r3, [sp, #0xc] + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E8538: .word 0x7FF00000 +_020E853C: .word 0x43500000 +_020E8540: .word 0xFFFF3CB0 +_020E8544: .word 0xC2F8F359 +_020E8548: .word 0x01A56E1F +_020E854C: .word 0x000007FF +_020E8550: .word 0x8800759C +_020E8554: .word 0x7E37E43C +_020E8558: .word 0x800FFFFF +_020E855C: .word 0x0000C350 +_020E8560: .word 0x3C900000 + + arm_func_start pow +pow: ; 0x020E8564 + ldr ip, _020E856C ; =__ieee754_pow + bx r12 + .balign 4 +_020E856C: .word __ieee754_pow + + arm_func_start __must_round +__must_round: ; 0x020E8570 + add r3, r0, #0x5 + ldrb r2, [r3, r1] + add r12, r3, r1 + cmp r2, #0x5 + movhi r0, #0x1 + bxhi lr + mvncc r0, #0x0 + bxcc lr + ldrb r2, [r0, #0x4] + add r12, r12, #0x1 + add r3, r3, r2 + cmp r12, r3 + bhs _020E85C0 +_020E85A4: + ldrb r2, [r12, #0x0] + cmp r2, #0x0 + movne r0, #0x1 + bxne lr + add r12, r12, #0x1 + cmp r12, r3 + blo _020E85A4 +_020E85C0: + sub r1, r1, #0x1 + add r0, r0, r1 + ldrb r0, [r0, #0x5] + tst r0, #0x1 + movne r0, #0x1 + mvneq r0, #0x0 + bx lr + + arm_func_start __dorounddecup +__dorounddecup: ; 0x020E85DC + add r3, r0, #0x5 + add r1, r3, r1 + sub r12, r1, #0x1 + mov r1, #0x0 +_020E85EC: + ldrb r2, [r12, #0x0] + cmp r2, #0x9 + addcc r0, r2, #0x1 + strccb r0, [r12, #0x0] + bxcc lr + cmp r12, r3 + bne _020E8620 + mov r1, #0x1 + strb r1, [r12, #0x0] + ldrsh r1, [r0, #0x2] + add r1, r1, #0x1 + strh r1, [r0, #0x2] + bx lr +_020E8620: + strb r1, [r12], #-0x1 + b _020E85EC +_020E8628: ; 0x020E8628 + bx lr + + arm_func_start __rounddec +__rounddec: ; 0x020E862C + stmdb sp!, {r3-r5,lr} + mov r4, r1 + mov r5, r0 + cmp r4, #0x0 + ldmleia sp!, {r3-r5,pc} +_020E8640: ; 0x020E8640 + ldrb r2, [r5, #0x4] + cmp r4, r2 + ldmgeia sp!, {r3-r5,pc} +_020E864C: ; 0x020E864C + bl __must_round + strb r4, [r5, #0x4] + cmp r0, #0x0 + ldmltia sp!, {r3-r5,pc} +_020E865C: ; 0x020E865C + mov r0, r5 + mov r1, r4 + bl __dorounddecup + ldmia sp!, {r3-r5,pc} + + arm_func_start __ull2dec +__ull2dec: ; 0x020E866C + stmdb sp!, {r3-r11,lr} + mov r10, r0 + mov r0, #0x0 + mov r8, r2 + strb r0, [r10, #0x0] + mov r9, r1 + cmp r8, #0x0 + strb r0, [r10, #0x4] + cmpeq r9, #0x0 + beq _020E86F8 + mov r6, #0xa + mov r11, r0 + mov r5, r0 + mov r4, r0 +_020E86A4: + ldrb r1, [r10, #0x4] + mov r0, r9 + mov r2, r6 + add r3, r1, #0x1 + mov r7, r1 + strb r3, [r10, #0x4] + mov r1, r8 + mov r3, r11 + bl _ull_mod + add r1, r10, r7 + strb r0, [r1, #0x5] + mov r0, r9 + mov r1, r8 + mov r2, #0xa + mov r3, #0x0 + bl _ll_udiv + mov r8, r1 + mov r9, r0 + cmp r8, r5 + cmpeq r9, r4 + bne _020E86A4 +_020E86F8: + ldrb r0, [r10, #0x4] + add r2, r10, #0x5 + add r0, r2, r0 + sub r3, r0, #0x1 + cmp r2, r3 + bhs _020E8728 +_020E8710: + ldrb r0, [r3, #0x0] + ldrb r1, [r2, #0x0] + strb r0, [r2], #0x1 + strb r1, [r3], #-0x1 + cmp r2, r3 + blo _020E8710 +_020E8728: + ldrb r0, [r10, #0x4] + sub r0, r0, #0x1 + strh r0, [r10, #0x2] + ldmia sp!, {r3-r11,pc} + + arm_func_start __timesdec +__timesdec: ; 0x020E8738 + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x40 + ldrb r6, [r1, #0x4] + ldrb r5, [r2, #0x4] + mov r4, #0x0 + add r3, sp, #0x0 + add r5, r6, r5 + sub r5, r5, #0x1 + add r3, r3, r5 + add r6, r3, #0x1 + mov r7, r6 + strb r4, [r0, #0x0] + cmp r5, #0x0 + ble _020E8800 + add lr, r1, #0x5 + add r11, r2, #0x5 +_020E8778: + ldrb r3, [r2, #0x4] + sub r10, r3, #0x1 + sub r3, r5, r10 + subs r9, r3, #0x1 + ldrb r3, [r1, #0x4] + movmi r9, #0x0 + submi r10, r5, #0x1 + add r8, r10, #0x1 + sub r3, r3, r9 + cmp r8, r3 + movgt r8, r3 + add r10, r11, r10 + add r9, lr, r9 + cmp r8, #0x0 + ble _020E87CC +_020E87B4: + ldrb r12, [r9], #0x1 + ldrb r3, [r10], #-0x1 + sub r8, r8, #0x1 + cmp r8, #0x0 + mla r4, r12, r3, r4 + bgt _020E87B4 +_020E87CC: + ldr r3, _020E88B8 ; =0xCCCCCCCD + sub r5, r5, #0x1 + umull r8, r9, r4, r3 + mov r9, r9, lsr #0x3 + cmp r5, #0x0 + mov r10, #0xa + umull r8, r9, r10, r9 + sub r9, r4, r8 + strb r9, [r6, #-0x1]! + mov r8, r4 + umull r3, r4, r8, r3 + mov r4, r4, lsr #0x3 + bgt _020E8778 +_020E8800: + ldrsh r3, [r1, #0x2] + ldrsh r1, [r2, #0x2] + cmp r4, #0x0 + add r1, r3, r1 + strh r1, [r0, #0x2] + beq _020E8828 + strb r4, [r6, #-0x1]! + ldrsh r1, [r0, #0x2] + add r1, r1, #0x1 + strh r1, [r0, #0x2] +_020E8828: + mov r3, #0x0 + b _020E8840 +_020E8830: + ldrb r2, [r6], #0x1 + add r1, r0, r3 + add r3, r3, #0x1 + strb r2, [r1, #0x5] +_020E8840: + cmp r3, #0x20 + bge _020E8850 + cmp r6, r7 + blo _020E8830 +_020E8850: + cmp r6, r7 + addcs sp, sp, #0x40 + strb r3, [r0, #0x4] + ldmcsia sp!, {r3-r11,pc} +_020E8860: ; 0x020E8860 + ldrb r1, [r6, #0x0] + cmp r1, #0x5 + addcc sp, sp, #0x40 + ldmccia sp!, {r3-r11,pc} +_020E8870: ; 0x020E8870 + bne _020E88A8 + add r2, r6, #0x1 + cmp r2, r7 + bhs _020E8898 +_020E8880: + ldrb r1, [r2, #0x0] + cmp r1, #0x0 + bne _020E88A8 + add r2, r2, #0x1 + cmp r2, r7 + blo _020E8880 +_020E8898: + ldrb r1, [r6, #-0x1] + tst r1, #0x1 + addeq sp, sp, #0x40 + ldmeqia sp!, {r3-r11,pc} +_020E88A8: + ldrb r1, [r0, #0x4] + bl __dorounddecup + add sp, sp, #0x40 + ldmia sp!, {r3-r11,pc} + .balign 4 +_020E88B8: .word 0xCCCCCCCD + + arm_func_start __str2dec +__str2dec: ; 0x020E88BC + stmdb sp!, {r3,lr} + strh r2, [r0, #0x2] + mov r12, #0x0 + strb r12, [r0, #0x0] + b _020E88E4 +_020E88D0: + ldrsb r3, [r1], #0x1 + add r2, r0, r12 + add r12, r12, #0x1 + sub r3, r3, #0x30 + strb r3, [r2, #0x5] +_020E88E4: + cmp r12, #0x20 + bge _020E88F8 + ldrsb r2, [r1, #0x0] + cmp r2, #0x0 + bne _020E88D0 +_020E88F8: + strb r12, [r0, #0x4] + ldrsb r2, [r1, #0x0] + cmp r2, #0x0 + ldmeqia sp!, {r3,pc} +_020E8908: ; 0x020E8908 + cmp r2, #0x5 + ldmltia sp!, {r3,pc} +_020E8910: ; 0x020E8910 + bgt _020E894C + ldrsb r2, [r1, #0x1] + add r1, r1, #0x1 + cmp r2, #0x0 + beq _020E8938 +_020E8924: + cmp r2, #0x30 + bne _020E894C + ldrsb r2, [r1, #0x1]! + cmp r2, #0x0 + bne _020E8924 +_020E8938: + sub r1, r12, #0x1 + add r1, r0, r1 + ldrb r1, [r1, #0x5] + tst r1, #0x1 + ldmeqia sp!, {r3,pc} +_020E894C: + ldrb r1, [r0, #0x4] + bl __dorounddecup + ldmia sp!, {r3,pc} + + arm_func_start __two_exp +__two_exp: ; 0x020E8958 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4c + mov r4, r1 + mvn r2, #0x34 + mov r5, r0 + cmp r4, r2 + bgt _020E8988 + bge _020E8A54 + sub r0, r2, #0xb + cmp r4, r0 + beq _020E8A3C + b _020E8BE4 +_020E8988: + add r1, r4, #0x20 + cmp r1, #0x28 + addls pc, pc, r1, lsl #0x2 + b _020E8BE4 +_020E8998: + b _020E8A68 +_020E899C: + b _020E8BE4 +_020E89A0: + b _020E8BE4 +_020E89A4: + b _020E8BE4 +_020E89A8: + b _020E8BE4 +_020E89AC: + b _020E8BE4 +_020E89B0: + b _020E8BE4 +_020E89B4: + b _020E8BE4 +_020E89B8: + b _020E8BE4 +_020E89BC: + b _020E8BE4 +_020E89C0: + b _020E8BE4 +_020E89C4: + b _020E8BE4 +_020E89C8: + b _020E8BE4 +_020E89CC: + b _020E8BE4 +_020E89D0: + b _020E8BE4 +_020E89D4: + b _020E8BE4 +_020E89D8: + b _020E8A7C +_020E89DC: + b _020E8BE4 +_020E89E0: + b _020E8BE4 +_020E89E4: + b _020E8BE4 +_020E89E8: + b _020E8BE4 +_020E89EC: + b _020E8BE4 +_020E89F0: + b _020E8BE4 +_020E89F4: + b _020E8BE4 +_020E89F8: + b _020E8A90 +_020E89FC: + b _020E8AA4 +_020E8A00: + b _020E8AB8 +_020E8A04: + b _020E8ACC +_020E8A08: + b _020E8AE0 +_020E8A0C: + b _020E8AF4 +_020E8A10: + b _020E8B08 +_020E8A14: + b _020E8B1C +_020E8A18: + b _020E8B30 +_020E8A1C: + b _020E8B44 +_020E8A20: + b _020E8B58 +_020E8A24: + b _020E8B6C +_020E8A28: + b _020E8B80 +_020E8A2C: + b _020E8B94 +_020E8A30: + b _020E8BA8 +_020E8A34: + b _020E8BBC +_020E8A38: + b _020E8BD0 +_020E8A3C: + ldr r1, _020E8C88 ; =0x02106E88 + mov r0, r5 + mvn r2, #0x13 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8A54: + ldr r1, _020E8C8C ; =0x02106EB8 + add r2, r2, #0x25 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8A68: + ldr r1, _020E8C90 ; =0x02106EE0 + add r2, r2, #0x2b + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8A7C: + ldr r1, _020E8C94 ; =0x02106EF8 + add r2, r2, #0x30 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8A90: + ldr r1, _020E8C98 ; =0x02106F08 + add r2, r2, #0x32 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8AA4: + ldr r1, _020E8C9C ; =0x02106F10 + add r2, r2, #0x32 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8AB8: + ldr r1, _020E8CA0 ; =0x02106F18 + add r2, r2, #0x33 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8ACC: + ldr r1, _020E8CA4 ; =0x02106F20 + add r2, r2, #0x33 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8AE0: + ldr r1, _020E8CA8 ; =0x02106F28 + add r2, r2, #0x33 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8AF4: + ldr r1, _020E8CAC ; =0x02106F2C + add r2, r2, #0x34 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B08: + ldr r1, _020E8CB0 ; =0x02106F30 + add r2, r2, #0x34 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B1C: + ldr r1, _020E8CB4 ; =0x02106F34 + add r2, r2, #0x34 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B30: + ldr r1, _020E8CB8 ; =0x02106F38 + mov r2, #0x0 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B44: + ldr r1, _020E8CBC ; =0x02106F3C + mov r2, #0x0 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B58: + ldr r1, _020E8CC0 ; =0x02106F40 + mov r2, #0x0 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B6C: + ldr r1, _020E8CC4 ; =0x02106F44 + mov r2, #0x0 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B80: + ldr r1, _020E8CC8 ; =0x02106F48 + mov r2, #0x1 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B94: + ldr r1, _020E8CCC ; =0x02106F4C + mov r2, #0x1 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8BA8: + ldr r1, _020E8CD0 ; =0x02106F50 + mov r2, #0x1 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8BBC: + ldr r1, _020E8CD4 ; =0x02106F54 + mov r2, #0x2 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8BD0: + ldr r1, _020E8CD8 ; =0x02106F58 + mov r2, #0x2 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8BE4: + and r0, r4, #0x80000000 + add r1, r4, r0, lsr #0x1f + add r0, sp, #0x26 + mov r1, r1, asr #0x1 + bl __two_exp + add r1, sp, #0x26 + mov r0, r5 + mov r2, r1 + bl __timesdec + tst r4, #0x1 + addeq sp, sp, #0x4c + ldmeqia sp!, {r4-r5,pc} +_020E8C14: ; 0x020E8C14 + add r3, sp, #0x0 + mov r12, r5 + mov r2, #0x9 +_020E8C20: + ldrh r1, [r12, #0x0] + ldrh r0, [r12, #0x2] + add r12, r12, #0x4 + subs r2, r2, #0x1 + strh r1, [r3, #0x0] + strh r0, [r3, #0x2] + add r3, r3, #0x4 + bne _020E8C20 + ldrh r0, [r12, #0x0] + cmp r4, #0x0 + strh r0, [r3, #0x0] + add r0, sp, #0x26 + ble _020E8C64 + ldr r1, _020E8CBC ; =0x02106F3C + mov r2, #0x0 + bl __str2dec + b _020E8C70 +_020E8C64: + ldr r1, _020E8CB4 ; =0x02106F34 + mvn r2, #0x0 + bl __str2dec +_020E8C70: + add r1, sp, #0x0 + add r2, sp, #0x26 + mov r0, r5 + bl __timesdec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} + .balign 4 +_020E8C88: .word 0x02106E88 +_020E8C8C: .word 0x02106EB8 +_020E8C90: .word 0x02106EE0 +_020E8C94: .word 0x02106EF8 +_020E8C98: .word 0x02106F08 +_020E8C9C: .word 0x02106F10 +_020E8CA0: .word 0x02106F18 +_020E8CA4: .word 0x02106F20 +_020E8CA8: .word 0x02106F28 +_020E8CAC: .word 0x02106F2C +_020E8CB0: .word 0x02106F30 +_020E8CB4: .word 0x02106F34 +_020E8CB8: .word 0x02106F38 +_020E8CBC: .word 0x02106F3C +_020E8CC0: .word 0x02106F40 +_020E8CC4: .word 0x02106F44 +_020E8CC8: .word 0x02106F48 +_020E8CCC: .word 0x02106F4C +_020E8CD0: .word 0x02106F50 +_020E8CD4: .word 0x02106F54 +_020E8CD8: .word 0x02106F58 + +arm_func_start __equals_dec +__equals_dec: + stmdb sp!, {r4,lr} + ldrb r3, [r0, #0x5] + cmp r3, #0x0 + bne _020E8D00 + ldrb r0, [r1, #0x5] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4,pc} +_020E8D00: + ldrb r2, [r1, #0x5] + cmp r2, #0x0 + bne _020E8D1C + cmp r3, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4,pc} +_020E8D1C: + ldrsh r3, [r0, #0x2] + ldrsh r2, [r1, #0x2] + cmp r3, r2 + bne _020E8DB4 + ldrb r4, [r0, #0x4] + ldrb r2, [r1, #0x4] + mov r12, #0x0 + mov lr, r4 + cmp r4, r2 + movgt lr, r2 + cmp lr, #0x0 + ble _020E8D74 +_020E8D4C: + add r3, r0, r12 + add r2, r1, r12 + ldrb r3, [r3, #0x5] + ldrb r2, [r2, #0x5] + cmp r3, r2 + movne r0, #0x0 + ldmneia sp!, {r4,pc} +_020E8D68: ; 0x020E8D68 + add r12, r12, #0x1 + cmp r12, lr + blt _020E8D4C +_020E8D74: + cmp lr, r4 + moveq r0, r1 + ldrb r1, [r0, #0x4] + cmp r12, r1 + bge _020E8DAC +_020E8D88: + add r1, r0, r12 + ldrb r1, [r1, #0x5] + cmp r1, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,pc} +_020E8D9C: ; 0x020E8D9C + ldrb r1, [r0, #0x4] + add r12, r12, #0x1 + cmp r12, r1 + blt _020E8D88 +_020E8DAC: + mov r0, #0x1 + ldmia sp!, {r4,pc} +_020E8DB4: + mov r0, #0x0 + ldmia sp!, {r4,pc} + +arm_func_start __less_dec +__less_dec: + stmdb sp!, {r3-r5,lr} + ldrb r2, [r0, #0x5] + cmp r2, #0x0 + bne _020E8DE0 + ldrb r0, [r1, #0x5] + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E8DE0: + ldrb r2, [r1, #0x5] + cmp r2, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020E8DF0: ; 0x020E8DF0 + ldrsh r3, [r1, #0x2] + ldrsh r2, [r0, #0x2] + cmp r2, r3 + bne _020E8E90 + ldrb r5, [r0, #0x4] + ldrb r4, [r1, #0x4] + mov r12, #0x0 + mov lr, r5 + cmp r5, r4 + movgt lr, r4 + cmp lr, #0x0 + ble _020E8E54 +_020E8E20: + add r3, r1, r12 + add r2, r0, r12 + ldrb r3, [r3, #0x5] + ldrb r2, [r2, #0x5] + cmp r2, r3 + movcc r0, #0x1 + ldmccia sp!, {r3-r5,pc} +_020E8E3C: ; 0x020E8E3C + cmp r3, r2 + movcc r0, #0x0 + ldmccia sp!, {r3-r5,pc} +_020E8E48: ; 0x020E8E48 + add r12, r12, #0x1 + cmp r12, lr + blt _020E8E20 +_020E8E54: + cmp lr, r5 + bne _020E8E88 + cmp r12, r4 + bge _020E8E88 +_020E8E64: + add r0, r1, r12 + ldrb r0, [r0, #0x5] + cmp r0, #0x0 + movne r0, #0x1 + ldmneia sp!, {r3-r5,pc} +_020E8E78: ; 0x020E8E78 + ldrb r0, [r1, #0x4] + add r12, r12, #0x1 + cmp r12, r0 + blt _020E8E64 +_020E8E88: + mov r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E8E90: + movlt r0, #0x1 + movge r0, #0x0 + ldmia sp!, {r3-r5,pc} + + arm_func_start __minus_dec +__minus_dec: ; 0x020E8E9C + stmdb sp!, {r3-r7,lr} + mov r6, r0 + mov r5, #0x9 +_020E8EA8: + ldrh r4, [r1, #0x0] + ldrh r3, [r1, #0x2] + add r1, r1, #0x4 + subs r5, r5, #0x1 + strh r4, [r6, #0x0] + strh r3, [r6, #0x2] + add r6, r6, #0x4 + bne _020E8EA8 + ldrh r1, [r1, #0x0] + strh r1, [r6, #0x0] + ldrb r1, [r2, #0x5] + cmp r1, #0x0 + ldmeqia sp!, {r3-r7,pc} +_020E8EDC: ; 0x020E8EDC + ldrb r7, [r0, #0x4] + ldrb r3, [r2, #0x4] + ldrsh r4, [r0, #0x2] + mov r1, r7 + cmp r7, r3 + movlt r1, r3 + ldrsh r3, [r2, #0x2] + sub r6, r4, r3 + add r1, r1, r6 + cmp r1, #0x20 + movgt r1, #0x20 + cmp r7, r1 + bge _020E8F34 + mov r4, #0x0 +_020E8F14: + ldrb r5, [r0, #0x4] + add r3, r0, r7 + add r5, r5, #0x1 + strb r5, [r0, #0x4] + strb r4, [r3, #0x5] + ldrb r7, [r0, #0x4] + cmp r7, r1 + blt _020E8F14 +_020E8F34: + ldrb r4, [r2, #0x4] + add r3, r0, #0x5 + add r12, r3, r1 + add r4, r4, r6 + cmp r4, r1 + addlt r12, r3, r4 + sub r4, r12, r3 + add r1, r2, #0x5 + sub r4, r4, r6 + add lr, r1, r4 + mov r4, lr + b _020E8FC8 +_020E8F64: + ldrb r7, [r12, #-0x1]! + ldrb r5, [lr, #-0x1]! + cmp r7, r5 + bhs _020E8FB8 + ldrb r7, [r12, #-0x1] + sub r5, r12, #0x1 + cmp r7, #0x0 + bne _020E8F90 +_020E8F84: + ldrb r7, [r5, #-0x1]! + cmp r7, #0x0 + beq _020E8F84 +_020E8F90: + cmp r5, r12 + beq _020E8FB8 +_020E8F98: + ldrb r7, [r5, #0x0] + sub r7, r7, #0x1 + strb r7, [r5, #0x0] + ldrb r7, [r5, #0x1]! + cmp r5, r12 + add r7, r7, #0xa + strb r7, [r5, #0x0] + bne _020E8F98 +_020E8FB8: + ldrb r7, [r12, #0x0] + ldrb r5, [lr, #0x0] + sub r5, r7, r5 + strb r5, [r12, #0x0] +_020E8FC8: + cmp r12, r3 + cmphi lr, r1 + bhi _020E8F64 + ldrb r5, [r2, #0x4] + sub lr, r4, r1 + cmp lr, r5 + bge _020E90A4 + ldrb r1, [r4, #0x0] + mov r7, #0x0 + cmp r1, #0x5 + movcc r7, #0x1 + blo _020E9040 + bne _020E9040 + add r1, r2, #0x5 + add r2, r1, r5 + add r4, r4, #0x1 + cmp r4, r2 + bhs _020E9028 +_020E9010: + ldrb r1, [r4, #0x0] + cmp r1, #0x0 + bne _020E90A4 + add r4, r4, #0x1 + cmp r4, r2 + blo _020E9010 +_020E9028: + add r1, r3, lr + add r2, r1, r6 + ldrb r1, [r2, #-0x1] + sub r12, r2, #0x1 + tst r1, #0x1 + movne r7, #0x1 +_020E9040: + cmp r7, #0x0 + beq _020E90A4 + ldrb r1, [r12, #0x0] + cmp r1, #0x1 + bhs _020E9098 + ldrb r1, [r12, #-0x1] + sub r2, r12, #0x1 + cmp r1, #0x0 + bne _020E9070 +_020E9064: + ldrb r1, [r2, #-0x1]! + cmp r1, #0x0 + beq _020E9064 +_020E9070: + cmp r2, r12 + beq _020E9098 +_020E9078: + ldrb r1, [r2, #0x0] + sub r1, r1, #0x1 + strb r1, [r2, #0x0] + ldrb r1, [r2, #0x1]! + cmp r2, r12 + add r1, r1, #0xa + strb r1, [r2, #0x0] + bne _020E9078 +_020E9098: + ldrb r1, [r12, #0x0] + sub r1, r1, #0x1 + strb r1, [r12, #0x0] +_020E90A4: + ldrb r1, [r3, #0x0] + mov r5, r3 + cmp r1, #0x0 + bne _020E90C0 +_020E90B4: + ldrb r1, [r5, #0x1]! + cmp r1, #0x0 + beq _020E90B4 +_020E90C0: + cmp r5, r3 + bls _020E9108 + ldrsh r1, [r0, #0x2] + sub r2, r5, r3 + and r4, r2, #0xff + sub r1, r1, r4 + strh r1, [r0, #0x2] + ldrb r1, [r0, #0x4] + add r2, r3, r1 + cmp r5, r2 + bhs _020E90FC +_020E90EC: + ldrb r1, [r5], #0x1 + cmp r5, r2 + strb r1, [r3], #0x1 + blo _020E90EC +_020E90FC: + ldrb r1, [r0, #0x4] + sub r1, r1, r4 + strb r1, [r0, #0x4] +_020E9108: + ldrb r1, [r0, #0x4] + add r2, r0, #0x5 + add r3, r2, r1 + cmp r3, r2 + bls _020E9130 +_020E911C: + ldrb r1, [r3, #-0x1]! + cmp r1, #0x0 + bne _020E9130 + cmp r3, r2 + bhi _020E911C +_020E9130: + sub r1, r3, r2 + add r1, r1, #0x1 + strb r1, [r0, #0x4] + ldmia sp!, {r3-r7,pc} + +arm_func_start __num2dec_internal +__num2dec_internal: + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x58 + mov r8, r1 + mov r6, r2 + mov r7, r0 + mov r0, r8 + mov r1, r6 + bl __signbitf +_020E9160: ; 0x020E9160 + cmp r0, #0x0 + movne r1, #0x1 + moveq r1, #0x0 + mov r4, r1, lsl #0x18 + mov r0, #0x0 + mov r1, r0 + mov r2, r8 + mov r3, r6 + mov r5, r4, asr #0x18 + bl _deq + bne _020E91AC + strb r5, [r7, #0x0] + mov r1, #0x0 + strh r1, [r7, #0x2] + mov r0, #0x1 + strb r0, [r7, #0x4] + add sp, sp, #0x58 + strb r1, [r7, #0x5] + ldmia sp!, {r4-r8,pc} +_020E91AC: + mov r0, r8 + mov r1, r6 + bl __fpclassifyf + cmp r0, #0x2 + bgt _020E91F8 + strb r5, [r7, #0x0] + mov r2, #0x0 + strh r2, [r7, #0x2] + mov r2, #0x1 + mov r0, r8 + mov r1, r6 + strb r2, [r7, #0x4] + bl __fpclassifyf + cmp r0, #0x1 + moveq r0, #0x4e + movne r0, #0x49 + add sp, sp, #0x58 + strb r0, [r7, #0x5] + ldmia sp!, {r4-r8,pc} +_020E91F8: + cmp r5, #0x0 + beq _020E921C + mov r0, #0x0 + mov r1, r0 + mov r2, r8 + mov r3, r6 + bl _dsub + mov r8, r0 + mov r6, r1 +_020E921C: + add r2, sp, #0x8 + mov r0, r8 + mov r1, r6 + bl frexp + mov r4, r0 + mov r6, r1 + orr r12, r4, #0x0 + rsbs r2, r12, #0x0 + orr r3, r6, #0x100000 + rsc r1, r3, #0x0 + mov r0, #0x0 + and r3, r3, r1 + sub r1, r0, #0x1 + and r12, r12, r2 + mov r2, r1 + adds r0, r12, r1 + adc r1, r3, r2 + str r4, [sp, #0x0] + str r6, [sp, #0x4] + bl __msl_generic_count_bits64 + rsb r8, r0, #0x35 + ldr r1, [sp, #0x8] + add r0, sp, #0xc + sub r1, r1, r8 + bl __two_exp + mov r0, r4 + mov r1, r6 + mov r2, r8 + bl ldexp + bl _ll_ufrom_d + mov r2, r1 + mov r1, r0 + add r0, sp, #0x32 + bl __ull2dec + mov r0, r7 + add r1, sp, #0x32 + add r2, sp, #0xc + bl __timesdec + strb r5, [r7, #0x0] + add sp, sp, #0x58 + ldmia sp!, {r4-r8,pc} + + arm_func_start __num2dec_internal2 +__num2dec_internal2: ; 0x020E92C0 + stmdb sp!, {r3-r5,lr} + mov r4, r3 + ldrsh r5, [r0, #0x2] + mov r0, r4 + bl __num2dec_internal + ldrb r0, [r4, #0x5] + cmp r0, #0x9 + ldmhiia sp!, {r3-r5,pc} +_020E92E0: ; 0x020E92E0 + cmp r5, #0x20 + movgt r5, #0x20 + mov r0, r4 + mov r1, r5 + bl __rounddec + ldrb r0, [r4, #0x4] + cmp r0, r5 + bge _020E9324 + mov r1, #0x0 +_020E9304: + ldrb r2, [r4, #0x4] + add r0, r4, r0 + add r2, r2, #0x1 + strb r2, [r4, #0x4] + strb r1, [r0, #0x5] + ldrb r0, [r4, #0x4] + cmp r0, r5 + blt _020E9304 +_020E9324: + ldrsh r1, [r4, #0x2] + sub r0, r0, #0x1 + mov r2, #0x0 + sub r0, r1, r0 + strh r0, [r4, #0x2] + ldrb r0, [r4, #0x4] + cmp r0, #0x0 + ldmleia sp!, {r3-r5,pc} +_020E9344: + add r1, r4, r2 + ldrb r0, [r1, #0x5] + add r2, r2, #0x1 + add r0, r0, #0x30 + strb r0, [r1, #0x5] + ldrb r0, [r4, #0x4] + cmp r2, r0 + blt _020E9344 + ldmia sp!, {r3-r5,pc} + + arm_func_start __dec2num +__dec2num: ; 0x020E9368 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xfc + mov r4, r0 + ldrb r0, [r4, #0x4] + cmp r0, #0x0 + bne _020E93A8 + ldrsb r0, [r4, #0x0] + mov r2, #0x0 + cmp r0, #0x0 + ldreq r3, _020E996C ; =0x3FF00000 + mov r0, #0x0 + ldrne r3, _020E9970 ; =0xBFF00000 + mov r1, r0 + bl copysign + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E93A8: + ldrb r0, [r4, #0x5] + cmp r0, #0x30 + beq _020E93C8 + cmp r0, #0x49 + beq _020E93F0 + cmp r0, #0x4e + beq _020E9424 + b _020E946C +_020E93C8: + ldrsb r0, [r4, #0x0] + mov r2, #0x0 + cmp r0, #0x0 + ldreq r3, _020E996C ; =0x3FF00000 + mov r0, #0x0 + ldrne r3, _020E9970 ; =0xBFF00000 + mov r1, r0 + bl copysign + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E93F0: + ldrsb r0, [r4, #0x0] + mov r5, #0x0 + cmp r0, #0x0 + ldreq r4, _020E996C ; =0x3FF00000 + ldr r0, _020E9974 ; =0x02106B74 + ldrne r4, _020E9970 ; =0xBFF00000 + ldr r0, [r0, #0x0] + bl _f2d + mov r2, r5 + mov r3, r4 + bl copysign + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E9424: + ldr r1, _020E9978 ; =0x7FF00000 + add r3, sp, #0x10 + mov r2, #0x0 + str r2, [r3, #0x0] + str r1, [r3, #0x4] + ldrsb r0, [r4, #0x0] + cmp r0, #0x0 + beq _020E9454 + orr r0, r1, #0x80000000 + orr r1, r2, r2 + str r1, [r3, #0x0] + str r0, [r3, #0x4] +_020E9454: + ldmia r3, {r0-r1} + orr r0, r0, #0x0 + orr r1, r1, #0x80000 + stmia r3, {r0-r1} + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E946C: + add r3, sp, #0xd6 + mov r5, r4 + mov r2, #0x9 +_020E9478: + ldrh r1, [r5, #0x0] + ldrh r0, [r5, #0x2] + add r5, r5, #0x4 + subs r2, r2, #0x1 + strh r1, [r3, #0x0] + strh r0, [r3, #0x2] + add r3, r3, #0x4 + bne _020E9478 + ldrh r0, [r5, #0x0] + add r1, sp, #0xdb + strh r0, [r3, #0x0] + ldrb r0, [sp, #0xda] + add r5, r1, r0 + cmp r1, r5 + bhs _020E94C8 +_020E94B4: + ldrb r0, [r1, #0x0] + sub r0, r0, #0x30 + strb r0, [r1], #0x1 + cmp r1, r5 + blo _020E94B4 +_020E94C8: + ldrb r1, [sp, #0xda] + ldrsh r2, [sp, #0xd8] + add r0, sp, #0xb0 + sub r1, r1, #0x1 + add r1, r2, r1 + strh r1, [sp, #0xd8] + ldr r1, _020E997C ; =0x02106F5C + mov r2, #0x134 + ldrsh r11, [sp, #0xd8] + bl __str2dec + add r0, sp, #0xb0 + add r1, sp, #0xd6 + bl __less_dec +_020E94FC: ; 0x020E94FC + cmp r0, #0x0 + beq _020E9538 + ldrsb r0, [r4, #0x0] + mov r5, #0x0 + cmp r0, #0x0 + ldreq r4, _020E996C ; =0x3FF00000 + ldr r0, _020E9974 ; =0x02106B74 + ldrne r4, _020E9970 ; =0xBFF00000 + ldr r0, [r0, #0x0] + bl _f2d + mov r2, r5 + mov r3, r4 + bl copysign + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E9538: + add r1, sp, #0xdb + ldrb r0, [r1, #0x0] + add r8, r1, #0x1 + bl _dfltu + str r0, [sp, #0x8] + str r1, [sp, #0xc] + cmp r8, r5 + bhs _020E9610 +_020E9558: + sub r0, r5, r8 + mov r1, r0, lsr #0x1f + rsb r0, r1, r0, lsl #0x1d + adds r7, r1, r0, ror #0x1d + moveq r7, #0x8 + mov r6, #0x0 + mov r2, #0x0 + cmp r7, #0x0 + ble _020E9594 + mov r0, #0xa +_020E9580: + ldrb r1, [r8], #0x1 + add r2, r2, #0x1 + cmp r2, r7 + mla r6, r0, r6, r1 + blt _020E9580 +_020E9594: + ldr r0, _020E9980 ; =0x02106E48 + ldr r1, [sp, #0xc] + add r3, r0, r7, lsl #0x3 + ldr r2, [r3, #-0x8] + ldr r0, [sp, #0x8] + ldr r3, [r3, #-0x4] + bl _dmul + mov r4, r0 + mov r9, r1 + mov r0, r6 + bl _dfltu + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r9 + bl _dadd +_020E95D4: ; 0x020E95D4 + cmp r6, #0x0 + mov r6, r0 + mov r10, r1 + beq _020E95FC + mov r0, r4 + mov r1, r9 + mov r2, r6 + mov r3, r10 + bl _deq + beq _020E9610 +_020E95FC: + str r6, [sp, #0x8] + str r10, [sp, #0xc] + cmp r8, r5 + sub r11, r11, r7 + blo _020E9558 +_020E9610: + cmp r11, #0x0 + bge _020E9654 + rsb r0, r11, #0x0 + bl _dflt + mov r3, r1 + mov r2, r0 + ldr r1, _020E9984 ; =0x40140000 + mov r0, #0x0 + bl pow + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + bl _ddiv + str r0, [sp, #0x8] + str r1, [sp, #0xc] + b _020E968C +_020E9654: + mov r0, r11 + bl _dflt + mov r3, r1 + mov r2, r0 + ldr r1, _020E9984 ; =0x40140000 + mov r0, #0x0 + bl pow + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + bl _dmul + str r0, [sp, #0x8] + str r1, [sp, #0xc] +_020E968C: + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + mov r2, r11 + bl ldexp + str r0, [sp, #0x8] + str r1, [sp, #0xc] + bl __fpclassifyf + cmp r0, #0x2 + bne _020E96C0 + ldr r0, _020E9988 ; =0x7FEFFFFF + mvn r1, #0x0 + str r1, [sp, #0x8] + str r0, [sp, #0xc] +_020E96C0: + ldr r1, [sp, #0x8] + ldr r2, [sp, #0xc] + add r0, sp, #0x8a + add r4, sp, #0x0 + mov r5, #0x0 + bl __num2dec_internal + add r0, sp, #0x8a + add r1, sp, #0xd6 + bl __equals_dec +_020E96E4: ; 0x020E96E4 + cmp r0, #0x0 + bne _020E9934 + add r0, sp, #0x8a + add r1, sp, #0xd6 + bl __less_dec +_020E96F8: ; 0x020E96F8 + cmp r0, #0x0 + movne r5, #0x1 + ldr r1, [sp, #0x8] + ldr r0, [sp, #0xc] + cmp r5, #0x0 + moveq r6, #0x1 + str r1, [sp, #0x0] + str r0, [sp, #0x4] + movne r6, #0x0 +_020E971C: + cmp r6, #0x0 + bne _020E9744 + ldmia r4, {r0-r1} + adds r0, r0, #0x1 + adc r1, r1, #0x0 + stmia r4, {r0-r1} + bl __fpclassifyf + cmp r0, #0x2 + beq _020E9934 + b _020E975C +_020E9744: + ldr r1, [r4, #0x0] + ldr r0, [r4, #0x4] + subs r1, r1, #0x1 + sbc r0, r0, #0x0 + str r1, [r4, #0x0] + str r0, [r4, #0x4] +_020E975C: + ldr r1, [sp, #0x0] + ldr r2, [sp, #0x4] + add r0, sp, #0x64 + bl __num2dec_internal +_020E976C: ; 0x020E976C + cmp r5, #0x0 + beq _020E9788 + add r0, sp, #0x64 + add r1, sp, #0xd6 + bl __less_dec +_020E9780: ; 0x020E9780 + cmp r0, #0x0 + beq _020E98AC +_020E9788: + cmp r5, #0x0 + bne _020E9864 + add r0, sp, #0xd6 + add r1, sp, #0x64 + bl __less_dec +_020E979C: ; 0x020E979C + cmp r0, #0x0 + bne _020E9864 + add r3, sp, #0x8a + add r5, sp, #0x3e + mov r2, #0x9 +_020E97B0: + ldrh r1, [r3, #0x0] + ldrh r0, [r3, #0x2] + add r3, r3, #0x4 + strh r1, [r5, #0x0] + strh r0, [r5, #0x2] + add r5, r5, #0x4 + subs r2, r2, #0x1 + bne _020E97B0 + ldrh r0, [r3, #0x0] + add r3, sp, #0x64 + add r4, sp, #0x8a + strh r0, [r5, #0x0] + mov r2, #0x9 +_020E97E4: + ldrh r1, [r3, #0x0] + ldrh r0, [r3, #0x2] + add r3, r3, #0x4 + strh r1, [r4, #0x0] + strh r0, [r4, #0x2] + add r4, r4, #0x4 + subs r2, r2, #0x1 + bne _020E97E4 + ldrh r0, [r3, #0x0] + add r3, sp, #0x3e + add r5, sp, #0x64 + strh r0, [r4, #0x0] + mov r2, #0x9 +_020E9818: + ldrh r1, [r3, #0x0] + ldrh r0, [r3, #0x2] + add r3, r3, #0x4 + strh r1, [r5, #0x0] + strh r0, [r5, #0x2] + add r5, r5, #0x4 + subs r2, r2, #0x1 + bne _020E9818 + ldrh r4, [r3, #0x0] + ldr r3, [sp, #0x8] + ldr r1, [sp, #0x0] + ldr r2, [sp, #0xc] + ldr r0, [sp, #0x4] + strh r4, [r5, #0x0] + str r1, [sp, #0x8] + str r0, [sp, #0xc] + str r3, [sp, #0x0] + str r2, [sp, #0x4] + b _020E98AC +_020E9864: + add r7, sp, #0x64 + add r3, sp, #0x8a + mov r2, #0x9 +_020E9870: + ldrh r1, [r7, #0x0] + ldrh r0, [r7, #0x2] + add r7, r7, #0x4 + strh r1, [r3, #0x0] + strh r0, [r3, #0x2] + add r3, r3, #0x4 + subs r2, r2, #0x1 + bne _020E9870 + ldrh r2, [r7, #0x0] + ldr r1, [sp, #0x0] + ldr r0, [sp, #0x4] + strh r2, [r3, #0x0] + str r1, [sp, #0x8] + str r0, [sp, #0xc] + b _020E971C +_020E98AC: + add r0, sp, #0x3e + add r1, sp, #0xd6 + add r2, sp, #0x8a + bl __minus_dec + add r0, sp, #0x18 + add r1, sp, #0x64 + add r2, sp, #0xd6 + bl __minus_dec + add r0, sp, #0x3e + add r1, sp, #0x18 + bl __equals_dec +_020E98D8: ; 0x020E98D8 + cmp r0, #0x0 + beq _020E9910 + ldr r1, [sp, #0x8] + ldr r0, [sp, #0xc] + and r1, r1, #0x1 + and r0, r0, #0x0 + cmp r0, #0x0 + cmpeq r1, #0x0 + beq _020E9934 + ldr r1, [sp, #0x0] + ldr r0, [sp, #0x4] + str r1, [sp, #0x8] + str r0, [sp, #0xc] + b _020E9934 +_020E9910: + add r0, sp, #0x3e + add r1, sp, #0x18 + bl __less_dec +_020E991C: ; 0x020E991C + cmp r0, #0x0 + bne _020E9934 + ldr r1, [sp, #0x0] + ldr r0, [sp, #0x4] + str r1, [sp, #0x8] + str r0, [sp, #0xc] +_020E9934: + ldrsb r0, [sp, #0xd6] + cmp r0, #0x0 + beq _020E995C + mov r0, #0x0 + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + mov r1, r0 + bl _dsub + str r0, [sp, #0x8] + str r1, [sp, #0xc] +_020E995C: + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020E996C: .word 0x3FF00000 +_020E9970: .word 0xBFF00000 +_020E9974: .word 0x02106B74 +_020E9978: .word 0x7FF00000 +_020E997C: .word 0x02106F5C +_020E9980: .word 0x02106E48 +_020E9984: .word 0x40140000 +_020E9988: .word 0x7FEFFFFF + + arm_func_start __msl_generic_count_bits64 +__msl_generic_count_bits64: ; 0x020E998C + mov r3, r0, lsr #0x1 + ldr r2, _020E9A14 ; =0x55555555 + orr r3, r3, r1, lsl #0x1f + and r3, r3, r2 + subs r12, r0, r3 + and r2, r2, r1, lsr #0x1 + ldr r0, _020E9A18 ; =0x33333333 + sbc r3, r1, r2 + mov r1, r12, lsr #0x2 + orr r1, r1, r3, lsl #0x1e + and r2, r12, r0 + and r1, r1, r0 + adds r2, r2, r1 + and r1, r3, r0 + and r0, r0, r3, lsr #0x2 + adc r1, r1, r0 + mov r0, r2, lsr #0x4 + orr r0, r0, r1, lsl #0x1c + adds r2, r2, r0 + ldr r0, _020E9A1C ; =0x0F0F0F0F + adc r1, r1, r1, lsr #0x4 + and r3, r2, r0 + and r2, r1, r0 + mov r0, r3, lsr #0x8 + orr r0, r0, r2, lsl #0x18 + adds r1, r3, r0 + adc r2, r2, r2, lsr #0x8 + mov r0, r1, lsr #0x10 + orr r0, r0, r2, lsl #0x10 + adds r1, r1, r0 + adc r0, r2, r2, lsr #0x10 + adds r0, r1, r0 + and r0, r0, #0xff + bx lr + .balign 4 +_020E9A14: .word 0x55555555 +_020E9A18: .word 0x33333333 +_020E9A1C: .word 0x0F0F0F0F + +arm_func_start __signbitf +__signbitf: + stmdb sp!, {r0-r3} + ldr r0, [sp, #0x4] + and r0, r0, #0x80000000 + add sp, sp, #0x10 + bx lr + + arm_func_start __fpclassifyf +__fpclassifyf: ; 0x020E9A34 + stmdb sp!, {r0-r3} + ldr r2, [sp, #0x4] + ldr r0, _020E9A9C ; =0x7FF00000 + ands r1, r2, r0 + beq _020E9A70 + cmp r1, r0 + bne _020E9A90 + ldr r0, _020E9AA0 ; =0x000FFFFF + tst r2, r0 + ldreq r0, [sp, #0x0] + add sp, sp, #0x10 + cmpeq r0, #0x0 + movne r0, #0x1 + moveq r0, #0x2 + bx lr +_020E9A70: + ldr r0, _020E9AA0 ; =0x000FFFFF + tst r2, r0 + ldreq r0, [sp, #0x0] + add sp, sp, #0x10 + cmpeq r0, #0x0 + movne r0, #0x5 + moveq r0, #0x3 + bx lr +_020E9A90: + mov r0, #0x4 + add sp, sp, #0x10 + bx lr + .balign 4 +_020E9A9C: .word 0x7FF00000 +_020E9AA0: .word 0x000FFFFF + + arm_func_start scalbn +scalbn: ; 0x020E9AA4 + stmdb sp!, {r3-r4,lr} + sub sp, sp, #0x4 + mov r4, r2 + add r2, sp, #0x0 + bl frexp + ldr r2, [sp, #0x0] + add r2, r2, r4 + str r2, [sp, #0x0] + bl ldexp + add sp, sp, #0x4 + ldmia sp!, {r3-r4,pc} + + arm_func_start stricmp +stricmp: ; 0x020E9AD0 + stmdb sp!, {r3,lr} + ldr r3, _020E9B34 ; =0x0210420C +_020E9AD8: + ldrb r2, [r0], #0x1 + cmp r2, #0x0 + blt _020E9AF0 + cmp r2, #0x80 + bge _020E9AF0 + ldrb r2, [r3, r2] +_020E9AF0: + ldrb lr, [r1], #0x1 + and r12, r2, #0xff + cmp lr, #0x0 + blt _020E9B0C + cmp lr, #0x80 + bge _020E9B0C + ldrb lr, [r3, lr] +_020E9B0C: + and r2, lr, #0xff + cmp r12, r2 + mvncc r0, #0x0 + ldmccia sp!, {r3,pc} +_020E9B1C: ; 0x020E9B1C + movhi r0, #0x1 + ldmhiia sp!, {r3,pc} +_020E9B24: ; 0x020E9B24 + cmp r12, #0x0 + bne _020E9AD8 + mov r0, #0x0 + ldmia sp!, {r3,pc} + .balign 4 +_020E9B34: .word 0x0210420C + + arm_func_start strnicmp +strnicmp: ; 0x020E9B38 + ldr ip, _020E9B40 ; =stricmp + bx r12 + .balign 4 +_020E9B40: .word stricmp + +arm_func_start _dadd +_dadd: + stmdb sp!, {r4,lr} + eors r12, r1, r3 + eormi r3, r3, #0x80000000 + bmi _020EA5DC +_020E9B54: + subs r12, r0, r2 + sbcs lr, r1, r3 + bhs _020E9B70 + adds r2, r2, r12 + adc r3, r3, lr + subs r0, r0, r12 + sbc r1, r1, lr +_020E9B70: + mov lr, #0x80000000 + mov r12, r1, lsr #0x14 + orr r1, lr, r1, lsl #0xb + orr r1, r1, r0, lsr #0x15 + mov r0, r0, lsl #0xb + movs r4, r12, lsl #0x15 + cmnne r4, #0x200000 + beq _020E9C6C + mov r4, r3, lsr #0x14 + orr r3, lr, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs lr, r4, lsl #0x15 + beq _020E9CB4 +_020E9BA8: + subs r4, r12, r4 + beq _020E9C00 + cmp r4, #0x20 + ble _020E9BE4 + cmp r4, #0x38 + movge r4, #0x3f + sub r4, r4, #0x20 + rsb lr, r4, #0x20 + orrs lr, r2, r3, lsl lr + mov r2, r3, lsr r4 + orrne r2, r2, #0x1 + adds r0, r0, r2 + adcs r1, r1, #0x0 + blo _020E9C28 + b _020E9C0C +_020E9BE4: + rsb lr, r4, #0x20 + movs lr, r2, lsl lr + rsb lr, r4, #0x20 + mov r2, r2, lsr r4 + orr r2, r2, r3, lsl lr + mov r3, r3, lsr r4 + orrne r2, r2, #0x1 +_020E9C00: + adds r0, r0, r2 + adcs r1, r1, r3 + blo _020E9C28 +_020E9C0C: + add r12, r12, #0x1 + and r4, r0, #0x1 + movs r1, r1, rrx + orr r0, r4, r0, rrx + mov lr, r12, lsl #0x15 + cmn lr, #0x200000 + beq _020E9E38 +_020E9C28: + movs r2, r0, lsl #0x15 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + mov r1, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + tst r2, #0x80000000 + ldmeqia sp!, {r4,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020E9C6C: + cmp r12, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + bics r12, r12, #0x800 + beq _020E9CD8 + orrs r4, r0, r1, lsl #0x1 + bne _020E9E14 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r4, r4, lsl #0x15 + beq _020E9E00 + cmn r4, #0x200000 + bne _020E9E00 + orrs r4, r2, r3, lsl #0x1 + beq _020E9E00 + b _020E9E14 +_020E9CB4: + cmp r4, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + bic r12, r12, #0x800 + bics r4, r4, #0x800 + beq _020E9D44 + orrs r4, r2, r3, lsl #0x1 + bne _020E9E14 + b _020E9E00 +_020E9CD8: + orrs r4, r0, r1, lsl #0x1 + beq _020E9D18 + mov r12, #0x1 + bic r1, r1, #0x80000000 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r4, r4, lsl #0x15 + cmnne r4, #0x200000 + mov r4, r4, lsr #0x15 + orr r4, r4, lr, lsr #0x14 + beq _020E9CB4 + orr r3, r3, #0x80000000 + orr r12, r12, lr, lsr #0x14 + b _020E9BA8 +_020E9D18: + mov r12, r3, lsr #0x14 + mov r1, r3, lsl #0xb + orr r1, r1, r2, lsr #0x15 + mov r0, r2, lsl #0xb + movs r4, r12, lsl #0x15 + beq _020E9DCC + cmn r4, #0x200000 + bne _020E9DCC + orrs r4, r0, r1, lsl #0x1 + beq _020E9E00 + b _020E9E18 +_020E9D44: + orrs r4, r2, r3, lsl #0x1 + beq _020E9DDC + mov r4, #0x1 + bic r3, r3, #0x80000000 + cmp r1, #0x0 + bpl _020E9D68 + orr r12, r12, lr, lsr #0x14 + orr r4, r4, lr, lsr #0x14 + b _020E9BA8 +_020E9D68: + adds r0, r0, r2 + adcs r1, r1, r3 + blo _020E9D88 + add r12, r12, #0x1 + and r4, r0, #0x1 + movs r1, r1, rrx + mov r0, r0, rrx + orr r0, r0, r4 +_020E9D88: + cmp r1, #0x0 + subges r12, r12, #0x1 + movs r2, r0, lsl #0x15 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmeqia sp!, {r4,lr} + bxeq lr + tst r2, #0x80000000 + ldmeqia sp!, {r4,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr +_020E9DCC: + mov r1, r3 + mov r0, r2 + ldmia sp!, {r4,lr} + bx lr +_020E9DDC: + cmp r1, #0x0 + subges r12, r12, #0x1 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmia sp!, {r4,lr} + bx lr +_020E9E00: + ldr r1, _020E9E58 ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020E9E14: + mov r1, r3 +_020E9E18: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4,lr} + bx lr +_020E9E28: ; 0x020E9E28 + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4,lr} + bx lr +_020E9E38: + cmp r12, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + ldr r1, _020E9E58 ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020E9E58: .word 0x7FF00000 + +arm_func_start _d2f +_d2f: + and r2, r1, #0x80000000 + mov r12, r1, lsr #0x14 + bics r12, r12, #0x800 + beq _020E9ED4 + mov r3, r12, lsl #0x15 + cmn r3, #0x200000 + bhs _020E9EB8 + subs r12, r12, #0x380 + bls _020E9EE4 + cmp r12, #0xff + bge _020E9F54 + mov r1, r1, lsl #0xc + orr r3, r2, r1, lsr #0x9 + orr r3, r3, r0, lsr #0x1d + movs r1, r0, lsl #0x3 + orr r0, r3, r12, lsl #0x17 + bxeq lr + tst r1, #0x80000000 + bxeq lr + movs r1, r1, lsl #0x1 + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020E9EB8: + orrs r3, r0, r1, lsl #0xc + bne _020E9ECC + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020E9ECC: + mvn r0, #0x80000000 + bx lr +_020E9ED4: + orrs r3, r0, r1, lsl #0xc + bne _020E9F4C + mov r0, r2 + bx lr +_020E9EE4: + cmn r12, #0x17 + beq _020E9F38 + bmi _020E9F4C + mov r1, r1, lsl #0xb + orr r1, r1, #0x80000000 + mov r3, r1, lsr #0x8 + orr r3, r3, r0, lsr #0x1d + rsb r12, r12, #0x1 + movs r1, r0, lsl #0x3 + orr r0, r2, r3, lsr r12 + rsb r12, r12, #0x20 + mov r3, r3, lsl r12 + orrne r3, r3, #0x1 + movs r1, r3 + bxeq lr + tst r1, #0x80000000 + bxeq lr + movs r1, r1, lsl #0x1 + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020E9F38: + orr r0, r0, r1, lsl #0xc + movs r1, r0 + mov r0, r2 + addne r0, r0, #0x1 + bx lr +_020E9F4C: + mov r0, r2 + bx lr +_020E9F54: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr + + arm_func_start _dfix +_dfix: ; 0x020E9F60 + bic r3, r1, #0x80000000 + ldr r2, _020E9FA8 ; =0x0000041E + subs r2, r2, r3, lsr #0x14 + ble _020E9F9C + cmp r2, #0x20 + bge _020E9F94 + mov r3, r1, lsl #0xb + orr r3, r3, #0x80000000 + orr r3, r3, r0, lsr #0x15 + cmp r1, #0x0 + mov r0, r3, lsr r2 + rsbmi r0, r0, #0x0 + bx lr +_020E9F94: + mov r0, #0x0 + bx lr +_020E9F9C: + mvn r0, r1, asr #0x1f + add r0, r0, #0x80000000 + bx lr + .balign 4 +_020E9FA8: .word 0x0000041E + + arm_func_start _ll_ufrom_d +_ll_ufrom_d: ; 0x020E9FAC + tst r1, #0x80000000 + bne _020EA010 + ldr r2, _020EA034 ; =0x0000043E + subs r2, r2, r1, lsr #0x14 + blt _020EA028 + cmp r2, #0x40 + bge _020EA004 + mov r12, r1, lsl #0xb + orr r12, r12, #0x80000000 + orr r12, r12, r0, lsr #0x15 + cmp r2, #0x20 + ble _020E9FEC + sub r2, r2, #0x20 + mov r1, #0x0 + mov r0, r12, lsr r2 + bx lr +_020E9FEC: + mov r3, r0, lsl #0xb + mov r1, r12, lsr r2 + mov r0, r3, lsr r2 + rsb r2, r2, #0x20 + orr r0, r0, r12, lsl r2 + bx lr +_020EA004: + mov r1, #0x0 + mov r0, #0x0 + bx lr +_020EA010: + cmn r1, #0x100000 + cmpeq r0, #0x0 + bhi _020EA028 + mov r1, #0x0 + mov r0, #0x0 + bx lr +_020EA028: + mvn r1, #0x0 + mvn r0, #0x0 + bx lr + .balign 4 +_020EA034: .word 0x0000043E + + arm_func_start _dflt +_dflt: ; 0x020EA038 + ands r2, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r0, #0x0 + mov r1, #0x0 + bxeq lr + mov r3, #0x400 + add r3, r3, #0x1e + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 + movs r1, r0 + mov r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, r2, r1, lsr #0xc + orr r1, r1, r3, lsl #0x14 + bx lr + + arm_func_start _dfltu +_dfltu: ; 0x020EA078 + cmp r0, #0x0 + mov r1, #0x0 + bxeq lr + mov r3, #0x400 + add r3, r3, #0x1e + bmi _020EA09C + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 +_020EA09C: + mov r1, r0 + mov r0, r1, lsl #0x15 + add r1, r1, r1 + mov r1, r1, lsr #0xc + orr r1, r1, r3, lsl #0x14 + bx lr + + arm_func_start _dmul +_dmul: ; 0x020EA0B4 + stmdb sp!, {r4-r7,lr} + eor lr, r1, r3 + and lr, lr, #0x80000000 + mov r12, r1, lsr #0x14 + mov r1, r1, lsl #0xb + orr r1, r1, r0, lsr #0x15 + mov r0, r0, lsl #0xb + movs r6, r12, lsl #0x15 + cmnne r6, #0x200000 + beq _020EA1BC + orr r1, r1, #0x80000000 + bic r12, r12, #0x800 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r5, r4, lsl #0x15 + cmnne r5, #0x200000 + beq _020EA204 + orr r3, r3, #0x80000000 + bic r4, r4, #0x800 +_020EA108: + add r12, r4, r12 + umull r5, r4, r0, r2 + umull r7, r6, r0, r3 + adds r4, r7, r4 + adc r6, r6, #0x0 + umull r7, r0, r1, r2 + adds r4, r7, r4 + adcs r0, r0, r6 + umull r7, r2, r1, r3 + adc r1, r2, #0x0 + adds r0, r0, r7 + adc r1, r1, #0x0 + orrs r4, r4, r5 + orrne r0, r0, #0x1 + cmp r1, #0x0 + blt _020EA154 + sub r12, r12, #0x1 + adds r0, r0, r0 + adc r1, r1, r1 +_020EA154: + add r12, r12, #0x2 + subs r12, r12, #0x400 + bmi _020EA2F0 + beq _020EA2F0 + mov r6, r12, lsl #0x14 + cmn r6, #0x100000 + bmi _020EA3F0 + movs r2, r0, lsl #0x15 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + tst r2, #0x80000000 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA1BC: + bics r12, r12, #0x800 + beq _020EA218 + orrs r6, r0, r1, lsl #0x1 + bne _020EA3A4 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r5, r4, lsl #0x15 + beq _020EA1F8 + cmn r5, #0x200000 + bne _020EA390 + orrs r5, r2, r3, lsl #0x1 + beq _020EA390 + b _020EA3A4 +_020EA1F8: + orrs r5, r3, r2 + beq _020EA3B8 + b _020EA390 +_020EA204: + bics r4, r4, #0x800 + beq _020EA2AC + orrs r6, r2, r3, lsl #0x1 + bne _020EA3A4 + b _020EA390 +_020EA218: + orrs r6, r0, r1, lsl #0x1 + beq _020EA280 + mov r12, #0x1 + cmp r1, #0x0 + bne _020EA23C + sub r12, r12, #0x20 + movs r1, r0 + mov r0, #0x0 + bmi _020EA258 +_020EA23C: + clz r6, r1 + movs r1, r1, lsl r6 + rsb r6, r6, #0x20 + orr r1, r1, r0, lsr r6 + rsb r6, r6, #0x20 + mov r0, r0, lsl r6 + sub r12, r12, r6 +_020EA258: + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r5, r4, lsl #0x15 + cmnne r5, #0x200000 + beq _020EA204 + orr r3, r3, #0x80000000 + bic r4, r4, #0x800 + b _020EA108 +_020EA280: + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r5, r4, lsl #0x15 + beq _020EA404 + cmn r5, #0x200000 + bne _020EA404 + orrs r6, r2, r3, lsl #0x1 + beq _020EA3B8 + b _020EA3A4 +_020EA2AC: + orrs r5, r2, r3, lsl #0x1 + beq _020EA404 + mov r4, #0x1 + cmp r3, #0x0 + bne _020EA2D0 + sub r4, r4, #0x20 + movs r3, r2 + mov r2, #0x0 + bmi _020EA108 +_020EA2D0: + clz r6, r3 + movs r3, r3, lsl r6 + rsb r6, r6, #0x20 + orr r3, r3, r2, lsr r6 + rsb r6, r6, #0x20 + mov r2, r2, lsl r6 + sub r4, r4, r6 + b _020EA108 +_020EA2F0: + cmn r12, #0x34 + beq _020EA388 + bmi _020EA3E0 + mov r2, r1 + mov r3, r0 + add r4, r12, #0x34 + cmp r4, #0x20 + movge r2, r3 + movge r3, #0x0 + subge r4, r4, #0x20 + rsb r5, r4, #0x20 + mov r2, r2, lsl r4 + orr r2, r2, r3, lsr r5 + movs r3, r3, lsl r4 + orrne r2, r2, #0x1 + rsb r12, r12, #0xc + cmp r12, #0x20 + movge r0, r1 + movge r1, #0x0 + subge r12, r12, #0x20 + rsb r4, r12, #0x20 + mov r0, r0, lsr r12 + orr r0, r0, r1, lsl r4 + orr r1, lr, r1, lsr r12 + cmp r2, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + tst r2, #0x80000000 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA388: + orr r0, r0, r1, lsl #0x1 + b _020EA3C8 +_020EA390: + ldr r1, _020EA414 ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3A4: + mov r1, r3 + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3B8: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3C8: + movs r2, r0 + mov r1, lr + mov r0, #0x0 + addne r0, r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3E0: + mov r1, lr + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3F0: + ldr r1, _020EA414 ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA404: + mov r1, lr + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020EA414: .word 0x7FF00000 + + arm_func_start _dsqrt +_dsqrt: ; 0x020EA418 + stmdb sp!, {r4-r6,lr} + ldr r2, _020EA5A8 ; =0x7FF00000 + cmp r1, r2 + bhs _020EA564 + movs r12, r1, lsr #0x14 + beq _020EA510 + bic r1, r1, r2 + orr r1, r1, #0x100000 +_020EA438: + movs r12, r12, asr #0x1 + bhs _020EA44C + sub r12, r12, #0x1 + movs r0, r0, lsl #0x1 + adc r1, r1, r1 +_020EA44C: + movs r3, r0, lsl #0x1 + adc r1, r1, r1 + mov r2, #0x0 + mov r4, #0x0 + mov lr, #0x200000 +_020EA460: + add r6, r4, lr + cmp r6, r1 + addle r4, r6, lr + suble r1, r1, r6 + addle r2, r2, lr + movs r3, r3, lsl #0x1 + adc r1, r1, r1 + movs lr, lr, lsr #0x1 + bne _020EA460 + mov r0, #0x0 + mov r5, #0x0 + cmp r1, r4 + cmpeq r3, #0x80000000 + blo _020EA4A8 + subs r3, r3, #0x80000000 + sbc r1, r1, r4 + add r4, r4, #0x1 + mov r0, #0x80000000 +_020EA4A8: + movs r3, r3, lsl #0x1 + adc r1, r1, r1 + mov lr, #0x40000000 +_020EA4B4: + add r6, r5, lr + cmp r4, r1 + cmpeq r6, r3 + bhi _020EA4D4 + add r5, r6, lr + subs r3, r3, r6 + sbc r1, r1, r4 + add r0, r0, lr +_020EA4D4: + movs r3, r3, lsl #0x1 + adc r1, r1, r1 + movs lr, lr, lsr #0x1 + bne _020EA4B4 + orrs r1, r1, r3 + biceq r0, r0, #0x1 + movs r1, r2, lsr #0x1 + movs r0, r0, rrx + adcs r0, r0, #0x0 + adc r1, r1, #0x0 + add r1, r1, #0x20000000 + sub r1, r1, #0x100000 + add r1, r1, r12, lsl #0x14 + ldmia sp!, {r4-r6,lr} + bx lr +_020EA510: + cmp r1, #0x0 + bne _020EA540 + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mvn r12, #0x13 + clz r5, r0 + movs r0, r0, lsl r5 + sub r12, r12, r5 + mov r1, r0, lsr #0xb + mov r0, r0, lsl #0x15 + b _020EA438 +_020EA540: + clz r2, r1 + movs r1, r1, lsl r2 + rsb r2, r2, #0x2b + mov r1, r1, lsr #0xb + orr r1, r1, r0, lsr r2 + rsb r2, r2, #0x20 + mov r0, r0, lsl r2 + rsb r12, r2, #0x1 + b _020EA438 +_020EA564: + tst r1, #0x80000000 + beq _020EA580 + bics r3, r1, #0x80000000 + cmpeq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + b _020EA58C +_020EA580: + orrs r2, r0, r1, lsl #0xc + ldmeqia sp!, {r4-r6,lr} + bxeq lr +_020EA58C: + ldr r2, _020EA5AC ; =0x7FF80000 + orr r1, r1, r2 + ldr r3, _020EA5B0 ; =0x021D74A8 + mov r4, #0x21 + str r4, [r3, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020EA5A8: .word 0x7FF00000 +_020EA5AC: .word 0x7FF80000 +_020EA5B0: .word 0x021D74A8 + + arm_func_start _drsb +_drsb: ; 0x020EA5B4 + eor r1, r1, r3 + eor r3, r1, r3 + eor r1, r1, r3 + eor r0, r0, r2 + eor r2, r0, r2 + eor r0, r0, r2 + +arm_func_start _dsub +_dsub: + stmdb sp!, {r4,lr} + eors r12, r1, r3 + eormi r3, r3, #0x80000000 + bmi _020E9B54 +_020EA5DC: + subs r12, r0, r2 + sbcs lr, r1, r3 + bhs _020EA5FC + eor lr, lr, #0x80000000 + adds r2, r2, r12 + adc r3, r3, lr + subs r0, r0, r12 + sbc r1, r1, lr +_020EA5FC: + mov lr, #0x80000000 + mov r12, r1, lsr #0x14 + orr r1, lr, r1, lsl #0xb + orr r1, r1, r0, lsr #0x15 + mov r0, r0, lsl #0xb + movs r4, r12, lsl #0x15 + cmnne r4, #0x200000 + beq _020EA800 + mov r4, r3, lsr #0x14 + orr r3, lr, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs lr, r4, lsl #0x15 + beq _020EA848 +_020EA634: + subs r4, r12, r4 + beq _020EA6DC + cmp r4, #0x20 + ble _020EA670 + cmp r4, #0x38 + movge r4, #0x3f + sub r4, r4, #0x20 + rsb lr, r4, #0x20 + orrs lr, r2, r3, lsl lr + mov r2, r3, lsr r4 + orrne r2, r2, #0x1 + subs r0, r0, r2 + sbcs r1, r1, #0x0 + bmi _020EA698 + b _020EA788 +_020EA670: + rsb lr, r4, #0x20 + movs lr, r2, lsl lr + rsb lr, r4, #0x20 + mov r2, r2, lsr r4 + orr r2, r2, r3, lsl lr + mov r3, r3, lsr r4 + orrne r2, r2, #0x1 + subs r0, r0, r2 + sbcs r1, r1, r3 + bpl _020EA788 +_020EA698: + movs r2, r0, lsl #0x15 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + mov r1, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + tst r2, #0x80000000 + ldmeqia sp!, {r4,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020EA6DC: + subs r0, r0, r2 + sbc r1, r1, r3 + orrs lr, r1, r0 + beq _020EA96C + mov lr, r12, lsl #0x14 + and lr, lr, #0x80000000 + bic r12, r12, #0x800 + cmp r1, #0x0 + bmi _020EA764 + bne _020EA714 + sub r12, r12, #0x20 + movs r1, r0 + mov r0, #0x0 + bmi _020EA730 +_020EA714: + clz r4, r1 + movs r1, r1, lsl r4 + rsb r4, r4, #0x20 + orr r1, r1, r0, lsr r4 + rsb r4, r4, #0x20 + mov r0, r0, lsl r4 + sub r12, r12, r4 +_020EA730: + cmp r12, #0x0 + bgt _020EA76C + rsb r12, r12, #0xc + cmp r12, #0x20 + movge r0, r1 + movge r1, #0x0 + subge r12, r12, #0x20 + rsb r4, r12, #0x20 + mov r0, r0, lsr r12 + orr r0, r0, r1, lsl r4 + orr r1, lr, r1, lsr r12 + ldmia sp!, {r4,lr} + bx lr +_020EA764: + cmp r1, #0x0 + subges r12, r12, #0x1 +_020EA76C: + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmia sp!, {r4,lr} + bx lr +_020EA788: + mov lr, r12, lsl #0x14 + and lr, lr, #0x80000000 + bic r12, r12, #0x800 + cmp r1, #0x0 + bne _020EA7AC + sub r12, r12, #0x20 + movs r1, r0 + mov r0, #0x0 + bmi _020EA7C8 +_020EA7AC: + clz r4, r1 + movs r1, r1, lsl r4 + rsb r4, r4, #0x20 + orr r1, r1, r0, lsr r4 + rsb r4, r4, #0x20 + mov r0, r0, lsl r4 + sub r12, r12, r4 +_020EA7C8: + cmp r12, #0x0 + orrgt r12, r12, lr, lsr #0x14 + bgt _020EA698 + rsb r12, r12, #0xc + cmp r12, #0x20 + movge r0, r1 + movge r1, #0x0 + subge r12, r12, #0x20 + rsb r4, r12, #0x20 + mov r0, r0, lsr r12 + orr r0, r0, r1, lsl r4 + orr r1, lr, r1, lsr r12 + ldmia sp!, {r4,lr} + bx lr +_020EA800: + cmp r12, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + bics r12, r12, #0x800 + beq _020EA86C + orrs r4, r0, r1, lsl #0x1 + bne _020EA948 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r4, r4, lsl #0x15 + beq _020EA934 + cmn r4, #0x200000 + bne _020EA934 + orrs r4, r2, r3, lsl #0x1 + beq _020EA95C + b _020EA948 +_020EA848: + cmp r4, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + bic r12, r12, #0x800 + bics r4, r4, #0x800 + beq _020EA8E4 + orrs r4, r2, r3, lsl #0x1 + bne _020EA948 + b _020EA934 +_020EA86C: + orrs r4, r0, r1, lsl #0x1 + beq _020EA8AC + mov r12, #0x1 + bic r1, r1, #0x80000000 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r4, r4, lsl #0x15 + cmnne r4, #0x200000 + mov r4, r4, lsr #0x15 + orr r4, r4, lr, lsr #0x14 + beq _020EA848 + orr r3, r3, #0x80000000 + orr r12, r12, lr, lsr #0x14 + b _020EA634 +_020EA8AC: + mov r12, r3, lsr #0x14 + mov r1, r3, lsl #0xb + orr r1, r1, r2, lsr #0x15 + mov r0, r2, lsl #0xb + movs r4, r12, lsl #0x15 + beq _020EA8D8 + cmn r4, #0x200000 + bne _020EA900 + orrs r4, r0, r1, lsl #0x1 + bne _020EA94C + b _020EA934 +_020EA8D8: + orrs r4, r0, r1, lsl #0x1 + beq _020EA96C + b _020EA900 +_020EA8E4: + orrs r4, r2, r3, lsl #0x1 + beq _020EA910 + mov r4, #0x1 + bic r3, r3, #0x80000000 + orr r12, r12, lr, lsr #0x14 + orr r4, r4, lr, lsr #0x14 + b _020EA634 +_020EA900: + mov r1, r3 + mov r0, r2 + ldmia sp!, {r4,lr} + bx lr +_020EA910: + cmp r1, #0x0 + subges r12, r12, #0x1 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmia sp!, {r4,lr} + bx lr +_020EA934: + ldr r1, _020EA97C ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020EA948: + mov r1, r3 +_020EA94C: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4,lr} + bx lr +_020EA95C: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4,lr} + bx lr +_020EA96C: + mov r1, #0x0 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020EA97C: .word 0x7FF00000 + + arm_func_start _fadd +_fadd: ; 0x020EA980 + eors r2, r0, r1 + eormi r1, r1, #0x80000000 + bmi _020EB7BC +_020EA98C: + subs r12, r0, r1 + subcc r0, r0, r12 + addcc r1, r1, r12 + mov r2, #0x80000000 + mov r3, r0, lsr #0x17 + orr r0, r2, r0, lsl #0x8 + ands r12, r3, #0xff + cmpne r12, #0xff + beq _020EAA20 + mov r12, r1, lsr #0x17 + orr r1, r2, r1, lsl #0x8 + ands r2, r12, #0xff + beq _020EAA60 +_020EA9C0: + subs r12, r3, r12 + beq _020EA9D8 + rsb r2, r12, #0x20 + movs r2, r1, lsl r2 + mov r1, r1, lsr r12 + orrne r1, r1, #0x1 +_020EA9D8: + adds r0, r0, r1 + blo _020EA9F8 + and r1, r0, #0x1 + orr r0, r1, r0, rrx + add r3, r3, #0x1 + and r2, r3, #0xff + cmp r2, #0xff + beq _020EAB68 +_020EA9F8: + ands r1, r0, #0xff + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + tst r1, #0x80 + bxeq lr + ands r1, r1, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EAA20: + cmp r3, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + ands r3, r3, #0xff + beq _020EAA84 + movs r0, r0, lsl #0x1 + bne _020EAB94 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EAB88 + cmp r12, #0xff + blt _020EAB88 + cmp r1, #0x0 + beq _020EAB88 + b _020EAB94 +_020EAA60: + cmp r3, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + and r3, r3, #0xff + ands r12, r12, #0xff + beq _020EAAE0 +_020EAA78: + movs r1, r1, lsl #0x1 + bne _020EAB94 + b _020EAB88 +_020EAA84: + movs r0, r0, lsl #0x1 + beq _020EAABC + mov r3, #0x1 + mov r0, r0, lsr #0x1 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x8 + ands r12, r12, #0xff + beq _020EAAE0 + cmp r12, #0xff + beq _020EAA78 + orr r1, r1, #0x80000000 + orr r3, r3, r2, lsr #0x17 + orr r12, r12, r2, lsr #0x17 + b _020EA9C0 +_020EAABC: + mov r3, r1, lsr #0x17 + mov r0, r1, lsl #0x9 + ands r3, r3, #0xff + beq _020EAB48 + cmp r3, #0xff + blt _020EAB48 + cmp r0, #0x0 + beq _020EAB88 + b _020EAB80 +_020EAAE0: + movs r1, r1, lsl #0x1 + beq _020EAB50 + mov r1, r1, lsr #0x1 + mov r12, #0x1 + orr r3, r3, r2, lsr #0x17 + orr r12, r12, r2, lsr #0x17 + cmp r0, #0x0 + bmi _020EA9C0 + adds r0, r0, r1 + blo _020EAB14 + and r1, r0, #0x1 + orr r0, r1, r0, rrx + add r12, r12, #0x1 +_020EAB14: + cmp r0, #0x0 + subge r12, r12, #0x1 + ands r1, r0, #0xff + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r12, lsl #0x17 + bxeq lr + tst r1, #0x80 + bxeq lr + ands r1, r1, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EAB48: + mov r0, r1 + bx lr +_020EAB50: + cmp r0, #0x0 + subges r3, r3, #0x1 + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bx lr +_020EAB68: + cmp r3, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EAB80: + mvn r0, #0x80000000 + bx lr +_020EAB88: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EAB94: + mvn r0, #0x80000000 + bx lr +_020EAB9C: ; 0x020EAB9C + mvn r0, #0x80000000 + bx lr + + arm_func_start _dgr +_dgr: ; 0x020EABA4 + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EAC18 + cmn r12, r3, lsl #0x1 + bhs _020EAC2C +_020EABB8: + orrs r12, r3, r1 + bmi _020EABE8 + cmp r1, r3 + cmpeq r0, r2 + movhi r0, #0x1 + movls r0, #0x0 + bx lr +_020EABD4: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EABE8: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x20000000 + msr cpsr_f, r12 + bxeq lr + cmp r3, r1 + cmpeq r2, r0 + movhi r0, #0x1 + movls r0, #0x0 + bx lr +_020EAC18: + bne _020EABD4 + cmp r0, #0x0 + bhi _020EABD4 + cmn r12, r3, lsl #0x1 + blo _020EABB8 +_020EAC2C: + bne _020EABD4 + cmp r2, #0x0 + bhi _020EABD4 + b _020EABB8 + + arm_func_start _dleq +_dleq: ; 0x020EAC3C + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EACBC + cmn r12, r3, lsl #0x1 + bhs _020EACD0 +_020EAC50: + orrs r12, r3, r1 + bmi _020EAC84 + cmp r1, r3 + cmpeq r0, r2 + movls r0, #0x1 + movhi r0, #0x0 + bx lr +_020EAC6C: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x40000000 + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAC84: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x1 + bne _020EACA8 + mrs r12, cpsr + bic r12, r12, #0x20000000 + orr r12, r12, #0x40000000 + msr cpsr_f, r12 + bxeq lr +_020EACA8: + cmp r3, r1 + cmpeq r2, r0 + movls r0, #0x1 + movhi r0, #0x0 + bx lr +_020EACBC: + bne _020EAC6C + cmp r0, #0x0 + bhi _020EAC6C + cmn r12, r3, lsl #0x1 + blo _020EAC50 +_020EACD0: + bne _020EAC6C + cmp r2, #0x0 + bhi _020EAC6C + b _020EAC50 + + arm_func_start _dls +_dls: ; 0x020EACE0 + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EAD58 + cmn r12, r3, lsl #0x1 + bhs _020EAD6C +_020EACF4: + orrs r12, r3, r1 + bmi _020EAD24 + cmp r1, r3 + cmpeq r0, r2 + movcc r0, #0x1 + movcs r0, #0x0 + bx lr +_020EAD10: + mov r0, #0x0 + mrs r12, cpsr + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAD24: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x0 + bne _020EAD44 + mrs r12, cpsr + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bxeq lr +_020EAD44: + cmp r3, r1 + cmpeq r2, r0 + movcc r0, #0x1 + movcs r0, #0x0 + bx lr +_020EAD58: + bne _020EAD10 + cmp r0, #0x0 + bhi _020EAD10 + cmn r12, r3, lsl #0x1 + blo _020EACF4 +_020EAD6C: + bne _020EAD10 + cmp r2, #0x0 + bhi _020EAD10 + b _020EACF4 + + arm_func_start _deq +_deq: ; 0x020EAD7C + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EADE4 + cmn r12, r3, lsl #0x1 + bhs _020EADF8 +_020EAD90: + orrs r12, r3, r1 + bmi _020EADC0 + cmp r1, r3 + cmpeq r0, r2 + moveq r0, #0x1 + movne r0, #0x0 + bx lr +_020EADAC: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EADC0: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x1 + bxeq lr + cmp r3, r1 + cmpeq r2, r0 + moveq r0, #0x1 + movne r0, #0x0 + bx lr +_020EADE4: + bne _020EADAC + cmp r0, #0x0 + bhi _020EADAC + cmn r12, r3, lsl #0x1 + blo _020EAD90 +_020EADF8: + bne _020EADAC + cmp r2, #0x0 + bhi _020EADAC + b _020EAD90 + + arm_func_start _dneq +_dneq: ; 0x020EAE08 + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EAE70 + cmn r12, r3, lsl #0x1 + bhs _020EAE84 +_020EAE1C: + orrs r12, r3, r1 + bmi _020EAE4C + cmp r1, r3 + cmpeq r0, r2 + movne r0, #0x1 + moveq r0, #0x0 + bx lr +_020EAE38: + mov r0, #0x1 + mrs r12, cpsr + bic r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EAE4C: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x0 + bxeq lr + cmp r3, r1 + cmpeq r2, r0 + movne r0, #0x1 + moveq r0, #0x0 + bx lr +_020EAE70: + bne _020EAE38 + cmp r0, #0x0 + bhi _020EAE38 + cmn r12, r3, lsl #0x1 + blo _020EAE1C +_020EAE84: + bne _020EAE38 + cmp r2, #0x0 + bhi _020EAE38 + b _020EAE1C + + arm_func_start _fgeq +_fgeq: ; 0x020EAE94 + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + cmpcs r3, r1, lsl #0x1 + blo _020EAEDC + cmp r0, #0x0 + bicmi r0, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r1, #0x0 + bicmi r1, r1, #0x80000000 + rsbmi r1, r1, #0x0 + cmp r0, r1 + movge r0, #0x1 + movlt r0, #0x0 + mrs r12, cpsr + biclt r12, r12, #0x20000000 + orrge r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAEDC: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _fgr +_fgr: ; 0x020EAEF0 + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + cmpcs r3, r1, lsl #0x1 + blo _020EAF38 + cmp r0, #0x0 + bicmi r0, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r1, #0x0 + bicmi r1, r1, #0x80000000 + rsbmi r1, r1, #0x0 + cmp r0, r1 + movgt r0, #0x1 + movle r0, #0x0 + mrs r12, cpsr + bicle r12, r12, #0x20000000 + orrgt r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAF38: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _fleq +_fleq: ; 0x020EAF4C + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + cmpcs r3, r1, lsl #0x1 + blo _020EAF9C + cmp r0, #0x0 + bicmi r0, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r1, #0x0 + bicmi r1, r1, #0x80000000 + rsbmi r1, r1, #0x0 + cmp r0, r1 + movle r0, #0x1 + movgt r0, #0x0 + mrs r12, cpsr + orrgt r12, r12, #0x20000000 + bicgt r12, r12, #0x40000000 + bicle r12, r12, #0x20000000 + orrle r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EAF9C: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x40000000 + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _fls +_fls: ; 0x020EAFB4 + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + cmpcs r3, r1, lsl #0x1 + blo _020EAFFC + cmp r0, #0x0 + bicmi r0, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r1, #0x0 + bicmi r1, r1, #0x80000000 + rsbmi r1, r1, #0x0 + cmp r0, r1 + movlt r0, #0x1 + movge r0, #0x0 + mrs r12, cpsr + orrge r12, r12, #0x20000000 + biclt r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAFFC: + mov r0, #0x0 + mrs r12, cpsr + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _feq +_feq: ; 0x020EB010 + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + blo _020EB064 + cmp r3, r1, lsl #0x1 + blo _020EB064 + orr r3, r0, r1 + movs r3, r3, lsl #0x1 + moveq r0, #0x0 + bne _020EB044 + mrs r12, cpsr + orr r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EB044: + cmp r0, r1 + movne r0, #0x1 + moveq r0, #0x0 + mrs r12, cpsr + bicne r12, r12, #0x40000000 + orreq r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EB064: + mov r0, #0x1 + mrs r12, cpsr + bic r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _frdiv +_frdiv: ; 0x020EB078 + eor r0, r0, r1 + eor r1, r0, r1 + eor r0, r0, r1 + + arm_func_start _fdiv +_fdiv: ; 0x020EB084 + stmdb sp!, {lr} + mov r12, #0xff + ands r3, r12, r0, lsr #0x17 + cmpne r3, #0xff + beq _020EB258 + ands r12, r12, r1, lsr #0x17 + cmpne r12, #0xff + beq _020EB294 + orr r1, r1, #0x800000 + orr r0, r0, #0x800000 + bic r2, r0, #0xff000000 + bic lr, r1, #0xff000000 +_020EB0B4: + cmp r2, lr + movcc r2, r2, lsl #0x1 + subcc r3, r3, #0x1 + teq r0, r1 + sub r0, pc, #0x94 + ldrb r1, [r0, lr, lsr #0xf] + rsb lr, lr, #0x0 + mov r0, lr, asr #0x1 + mul r0, r1, r0 + add r0, r0, #0x80000000 + mov r0, r0, lsr #0x6 + mul r0, r1, r0 + mov r0, r0, lsr #0xe + mul r1, lr, r0 + sub r12, r3, r12 + mov r1, r1, lsr #0xc + mul r1, r0, r1 + mov r0, r0, lsl #0xe + add r0, r0, r1, lsr #0xf + umull r1, r0, r2, r0 + mov r3, r0 + orrmi r0, r0, #0x80000000 + adds r12, r12, #0x7e + bmi _020EB35C + cmp r12, #0xfe + bge _020EB410 + add r0, r0, r12, lsl #0x17 + mov r12, r1, lsr #0x1c + cmp r12, #0x7 + beq _020EB238 + add r0, r0, r1, lsr #0x1f + ldmia sp!, {lr} + bx lr +_020EB138: ; not code + .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9 + .byte 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA + .byte 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4, 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE + .byte 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8, 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2 + .byte 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD, 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8 + .byte 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3, 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF + .byte 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA, 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6 + .byte 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2, 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF + .byte 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7 + .byte 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1 + .byte 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E, 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B + .byte 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95 + .byte 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90 + .byte 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B + .byte 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86 + .byte 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82 + .byte 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80 +_020EB238: + mov r1, r3, lsl #0x1 + add r1, r1, #0x1 + rsb lr, lr, #0x0 + mul r1, lr, r1 + cmp r1, r2, lsl #0x18 + addmi r0, r0, #0x1 + ldmia sp!, {lr} + bx lr +_020EB258: + eor lr, r0, r1 + and lr, lr, #0x80000000 + cmp r3, #0x0 + beq _020EB2B0 + movs r0, r0, lsl #0x9 + bne _020EB3F8 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EB3E8 + cmp r12, #0xff + blt _020EB3E8 + cmp r1, #0x0 + beq _020EB404 + b _020EB3E0 +_020EB294: + eor lr, r0, r1 + and lr, lr, #0x80000000 + cmp r12, #0x0 + beq _020EB314 +_020EB2A4: + movs r1, r1, lsl #0x9 + bne _020EB3E0 + b _020EB430 +_020EB2B0: + movs r2, r0, lsl #0x9 + beq _020EB2E4 + clz r3, r2 + movs r2, r2, lsl r3 + rsb r3, r3, #0x0 + mov r2, r2, lsr #0x8 + ands r12, r12, r1, lsr #0x17 + beq _020EB33C + cmp r12, #0xff + beq _020EB2A4 + orr r1, r1, #0x800000 + bic lr, r1, #0xff000000 + b _020EB0B4 +_020EB2E4: + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EB308 + cmp r12, #0xff + blt _020EB430 + cmp r1, #0x0 + beq _020EB430 + b _020EB3E0 +_020EB308: + cmp r1, #0x0 + beq _020EB404 + b _020EB430 +_020EB314: + movs r12, r1, lsl #0x9 + beq _020EB3E8 + mov lr, r12 + clz r12, lr + movs lr, lr, lsl r12 + rsb r12, r12, #0x0 + mov lr, lr, lsr #0x8 + orr r0, r0, #0x800000 + bic r2, r0, #0xff000000 + b _020EB0B4 +_020EB33C: + movs r12, r1, lsl #0x9 + beq _020EB3E8 + mov lr, r12 + clz r12, lr + movs lr, lr, lsl r12 + rsb r12, r12, #0x0 + mov lr, lr, lsr #0x8 + b _020EB0B4 +_020EB35C: + and r0, r0, #0x80000000 + cmn r12, #0x18 + beq _020EB3D0 + bmi _020EB428 + add r1, r12, #0x17 + mov r2, r2, lsl r1 + rsb r12, r12, #0x0 + mov r3, r3, lsr r12 + orr r0, r0, r3 + rsb lr, lr, #0x0 + mul r1, lr, r3 + cmp r1, r2 + ldmeqia sp!, {lr} + bxeq lr + add r1, r1, lr + cmp r1, r2 + beq _020EB3C4 + addmi r0, r0, #0x1 + subpl r1, r1, lr + add r1, lr, r1, lsl #0x1 + cmp r1, r2, lsl #0x1 + and r3, r0, #0x1 + addmi r0, r0, #0x1 + addeq r0, r0, r3 + ldmia sp!, {lr} + bx lr +_020EB3C4: + add r0, r0, #0x1 + ldmia sp!, {lr} + bx lr +_020EB3D0: + cmn r2, lr + addne r0, r0, #0x1 + ldmia sp!, {lr} + bx lr +_020EB3E0: + mov r0, r1 + b _020EB3F8 +_020EB3E8: + mov r0, #0xff000000 + orr r0, lr, r0, lsr #0x1 + ldmia sp!, {lr} + bx lr +_020EB3F8: + mvn r0, #0x80000000 + ldmia sp!, {lr} + bx lr +_020EB404: + mvn r0, #0x80000000 + ldmia sp!, {lr} + bx lr +_020EB410: + tst r0, #0x80000000 + mov r0, #0xff000000 + movne r0, r0, asr #0x1 + moveq r0, r0, lsr #0x1 + ldmia sp!, {lr} + bx lr +_020EB428: + ldmia sp!, {lr} + bx lr +_020EB430: + mov r0, lr + ldmia sp!, {lr} + bx lr + +arm_func_start _f2d +_f2d: + and r2, r0, #0x80000000 + mov r12, r0, lsr #0x17 + mov r3, r0, lsl #0x9 + ands r12, r12, #0xff + beq _020EB46C + cmp r12, #0xff + beq _020EB498 +_020EB458: + add r12, r12, #0x380 + mov r0, r3, lsl #0x14 + orr r1, r2, r3, lsr #0xc + orr r1, r1, r12, lsl #0x14 + bx lr +_020EB46C: + cmp r3, #0x0 + bne _020EB480 + mov r1, r2 + mov r0, #0x0 + bx lr +_020EB480: + mov r3, r3, lsr #0x1 + clz r12, r3 + movs r3, r3, lsl r12 + rsb r12, r12, #0x1 + add r3, r3, r3 + b _020EB458 +_020EB498: + cmp r3, #0x0 + bhi _020EB4B0 + ldr r1, _020EB4BC ; =0x7FF00000 + orr r1, r1, r2 + mov r0, #0x0 + bx lr +_020EB4B0: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + bx lr + .balign 4 +_020EB4BC: .word 0x7FF00000 + + arm_func_start _ffix +_ffix: ; 0x020EB4C0 + bic r1, r0, #0x80000000 + mov r2, #0x9e + subs r2, r2, r1, lsr #0x17 + ble _020EB4E8 + mov r1, r1, lsl #0x8 + orr r1, r1, #0x80000000 + cmp r0, #0x0 + mov r0, r1, lsr r2 + rsbmi r0, r0, #0x0 + bx lr +_020EB4E8: + mvn r0, r0, asr #0x1f + add r0, r0, #0x80000000 + bx lr + + arm_func_start _ffixu +_ffixu: ; 0x020EB4F4 + tst r0, #0x80000000 + bne _020EB518 + mov r1, #0x9e + subs r1, r1, r0, lsr #0x17 + blt _020EB52C + mov r2, r0, lsl #0x8 + orr r0, r2, #0x80000000 + mov r0, r0, lsr r1 + bx lr +_020EB518: + mov r2, #0xff000000 + cmp r2, r0, lsl #0x1 + movcs r0, #0x0 + mvncc r0, #0x0 + bx lr +_020EB52C: + mvn r0, #0x0 + bx lr + + arm_func_start _fflt +_fflt: ; 0x020EB534 + ands r2, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r0, #0x0 + bxeq lr + clz r3, r0 + movs r0, r0, lsl r3 + rsb r3, r3, #0x9e + ands r1, r0, #0xff + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bxeq lr + tst r1, #0x80 + bxeq lr + ands r3, r1, #0x7f + andeqs r3, r0, #0x1 + addne r0, r0, #0x1 + bx lr + + arm_func_start _ffltu +_ffltu: ; 0x020EB57C + cmp r0, #0x0 + bxeq lr + mov r3, #0x9e + bmi _020EB598 + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 +_020EB598: + ands r2, r0, #0xff + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bxeq lr + tst r2, #0x80 + bxeq lr + ands r1, r2, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr + + arm_func_start _fmul +_fmul: ; 0x020EB5C4 + eor r2, r0, r1 + and r2, r2, #0x80000000 + mov r12, #0xff + ands r3, r12, r0, lsr #0x17 + mov r0, r0, lsl #0x8 + cmpne r3, #0xff + beq _020EB640 + orr r0, r0, #0x80000000 + ands r12, r12, r1, lsr #0x17 + mov r1, r1, lsl #0x8 + cmpne r12, #0xff + beq _020EB680 + orr r1, r1, #0x80000000 +_020EB5F8: + add r12, r3, r12 + umull r1, r3, r0, r1 + movs r0, r3 + addpl r0, r0, r0 + subpl r12, r12, #0x1 + subs r12, r12, #0x7f + bmi _020EB70C + cmp r12, #0xfe + bge _020EB778 + ands r3, r0, #0xff + orr r0, r2, r0, lsr #0x8 + add r0, r0, r12, lsl #0x17 + tst r3, #0x80 + bxeq lr + orrs r1, r1, r3, lsl #0x19 + andeqs r3, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EB640: + cmp r3, #0x0 + beq _020EB694 + movs r0, r0, lsl #0x1 + bne _020EB768 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EB674 + cmp r12, #0xff + blt _020EB75C + cmp r1, #0x0 + beq _020EB75C + b _020EB768 +_020EB674: + cmp r1, #0x0 + beq _020EB770 + b _020EB75C +_020EB680: + cmp r12, #0x0 + beq _020EB6F0 +_020EB688: + movs r1, r1, lsl #0x1 + bne _020EB768 + b _020EB75C +_020EB694: + movs r0, r0, lsl #0x1 + beq _020EB6CC + mov r0, r0, lsr #0x1 + clz r3, r0 + movs r0, r0, lsl r3 + rsb r3, r3, #0x1 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x8 + ands r12, r12, #0xff + beq _020EB6F0 + cmp r12, #0xff + beq _020EB688 + orr r1, r1, #0x80000000 + b _020EB5F8 +_020EB6CC: + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EB79C + cmp r12, #0xff + blt _020EB79C + cmp r1, #0x0 + beq _020EB770 + b _020EB768 +_020EB6F0: + movs r1, r1, lsl #0x1 + beq _020EB79C + mov r1, r1, lsr #0x1 + clz r12, r1 + movs r1, r1, lsl r12 + rsb r12, r12, #0x1 + b _020EB5F8 +_020EB70C: + cmn r12, #0x18 + beq _020EB754 + bmi _020EB794 + cmp r1, #0x0 + orrne r0, r0, #0x1 + mov r3, r0 + mov r0, r0, lsr #0x8 + rsb r12, r12, #0x0 + orr r0, r2, r0, lsr r12 + rsb r12, r12, #0x18 + movs r1, r3, lsl r12 + bxeq lr + tst r1, #0x80000000 + bxeq lr + movs r1, r1, lsl #0x1 + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EB754: + mov r0, r0, lsl #0x1 + b _020EB784 +_020EB75C: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EB768: + mvn r0, #0x80000000 + bx lr +_020EB770: + mvn r0, #0x80000000 + bx lr +_020EB778: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EB784: + movs r1, r0 + mov r0, r2 + addne r0, r0, #0x1 + bx lr +_020EB794: + mov r0, r2 + bx lr +_020EB79C: + mov r0, r2 + bx lr + + arm_func_start _frsb +_frsb: ; 0x020EB7A4 + eor r0, r0, r1 + eor r1, r0, r1 + eor r0, r0, r1 + + arm_func_start _fsub +_fsub: ; 0x020EB7B0 + eors r2, r0, r1 + eormi r1, r1, #0x80000000 + bmi _020EA98C +_020EB7BC: + subs r12, r0, r1 + eorcc r12, r12, #0x80000000 + subcc r0, r0, r12 + addcc r1, r1, r12 + mov r2, #0x80000000 + mov r3, r0, lsr #0x17 + orr r0, r2, r0, lsl #0x8 + ands r12, r3, #0xff + cmpne r12, #0xff + beq _020EB8D8 + mov r12, r1, lsr #0x17 + orr r1, r2, r1, lsl #0x8 + ands r2, r12, #0xff + beq _020EB918 +_020EB7F4: + subs r12, r3, r12 + beq _020EB83C + rsb r2, r12, #0x20 + movs r2, r1, lsl r2 + mov r1, r1, lsr r12 + orrne r1, r1, #0x1 + subs r0, r0, r1 + bpl _020EB880 + ands r1, r0, #0xff + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + tst r1, #0x80 + bxeq lr + ands r1, r1, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EB83C: + subs r0, r0, r1 + beq _020EB9E4 + mov r2, r3, lsl #0x17 + and r2, r2, #0x80000000 + bic r3, r3, #0x100 + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 + cmp r3, #0x0 + bgt _020EB870 + rsb r3, r3, #0x9 + orr r0, r2, r0, lsr r3 + bx lr +_020EB870: + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bx lr +_020EB880: + mov r2, r3, lsl #0x17 + and r2, r2, #0x80000000 + bic r3, r3, #0x100 + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 + cmp r3, #0x0 + bgt _020EB8AC + rsb r3, r3, #0x9 + orr r0, r2, r0, lsr r3 + bx lr +_020EB8AC: + ands r1, r0, #0xff + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bxeq lr + tst r1, #0x80 + bxeq lr + ands r1, r1, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EB8D8: + cmp r3, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + ands r3, r3, #0xff + beq _020EB940 + movs r0, r0, lsl #0x1 + bne _020EBA18 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EBA0C + cmp r12, #0xff + blt _020EBA0C + cmp r1, #0x0 + beq _020EBA20 + b _020EBA18 +_020EB918: + cmp r12, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + and r3, r3, #0xff + ands r12, r12, #0xff + beq _020EB9A8 +_020EB930: + eor r2, r2, #0x80000000 + movs r1, r1, lsl #0x1 + bne _020EBA18 + b _020EBA0C +_020EB940: + movs r0, r0, lsl #0x1 + beq _020EB978 + mov r0, r0, lsr #0x1 + mov r3, #0x1 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x8 + ands r12, r12, #0xff + beq _020EB9A8 + cmp r12, #0xff + beq _020EB930 + orr r1, r1, #0x80000000 + orr r3, r3, r2, lsr #0x17 + orr r12, r12, r2, lsr #0x17 + b _020EB7F4 +_020EB978: + mov r3, r1, lsr #0x17 + mov r0, r1, lsl #0x9 + ands r2, r3, #0xff + beq _020EB99C + cmp r2, #0xff + blt _020EB9C4 + cmp r0, #0x0 + bne _020EBA04 + b _020EBA0C +_020EB99C: + cmp r0, #0x0 + beq _020EB9E4 + b _020EB9C4 +_020EB9A8: + movs r1, r1, lsl #0x1 + beq _020EB9CC + mov r1, r1, lsr #0x1 + mov r12, #0x1 + orr r12, r12, r2, lsr #0x17 + orr r3, r3, r2, lsr #0x17 + b _020EB7F4 +_020EB9C4: + mov r0, r1 + bx lr +_020EB9CC: + cmp r0, #0x0 + subges r3, r3, #0x1 + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bx lr +_020EB9E4: + mov r0, #0x0 + bx lr +_020EB9EC: ; 0x020EB9EC + cmp r0, #0x0 + subges r3, r3, #0x1 + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bx lr +_020EBA04: + mvn r0, #0x80000000 + bx lr +_020EBA0C: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EBA18: + mvn r0, #0x80000000 + bx lr +_020EBA20: + mvn r0, #0x80000000 + bx lr + + arm_func_start _ll_mod +_ll_mod: ; 0x020EBA28 + stmdb sp!, {r4-r7,r11-r12,lr} + mov r4, r1 + orr r4, r4, #0x1 + b _020EBA48 + + arm_func_start _ll_sdiv +_ll_sdiv: ; 0x020EBA38 + stmdb sp!, {r4-r7,r11-r12,lr} + eor r4, r1, r3 + mov r4, r4, asr #0x1 + mov r4, r4, lsl #0x1 +_020EBA48: + orrs r5, r3, r2 + bne _020EBA58 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBA58: + mov r5, r0, lsr #0x1f + add r5, r5, r1 + mov r6, r2, lsr #0x1f + add r6, r6, r3 + orrs r6, r5, r6 + bne _020EBA8C + mov r1, r2 + bl _s32_div_f + ands r4, r4, #0x1 + movne r0, r1 + mov r1, r0, asr #0x1f + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBA8C: + cmp r1, #0x0 + bge _020EBA9C + rsbs r0, r0, #0x0 + rsc r1, r1, #0x0 +_020EBA9C: + cmp r3, #0x0 + bge _020EBAAC + rsbs r2, r2, #0x0 + rsc r3, r3, #0x0 +_020EBAAC: + orrs r5, r1, r0 + beq _020EBBD0 + mov r5, #0x0 + mov r6, #0x1 + cmp r3, #0x0 + bmi _020EBAD8 +_020EBAC4: + add r5, r5, #0x1 + adds r2, r2, r2 + adcs r3, r3, r3 + bpl _020EBAC4 + add r6, r6, r5 +_020EBAD8: + cmp r1, #0x0 + blt _020EBAF8 +_020EBAE0: + cmp r6, #0x1 + beq _020EBAF8 + sub r6, r6, #0x1 + adds r0, r0, r0 + adcs r1, r1, r1 + bpl _020EBAE0 +_020EBAF8: + mov r7, #0x0 + mov r12, #0x0 + mov r11, #0x0 + b _020EBB20 +_020EBB08: + orr r12, r12, #0x1 + subs r6, r6, #0x1 + beq _020EBB78 + adds r0, r0, r0 + adcs r1, r1, r1 + adcs r7, r7, r7 +_020EBB20: + subs r0, r0, r2 + sbcs r1, r1, r3 + sbcs r7, r7, #0x0 + adds r12, r12, r12 + adc r11, r11, r11 + cmp r7, #0x0 + bge _020EBB08 +_020EBB3C: + subs r6, r6, #0x1 + beq _020EBB70 + adds r0, r0, r0 + adcs r1, r1, r1 + adc r7, r7, r7 + adds r0, r0, r2 + adcs r1, r1, r3 + adc r7, r7, #0x0 + adds r12, r12, r12 + adc r11, r11, r11 + cmp r7, #0x0 + bge _020EBB08 + b _020EBB3C +_020EBB70: + adds r0, r0, r2 + adc r1, r1, r3 +_020EBB78: + ands r7, r4, #0x1 + moveq r0, r12 + moveq r1, r11 + beq _020EBBB0 + subs r7, r5, #0x20 + movge r0, r1, lsr r7 + bge _020EBBD4 + rsb r7, r5, #0x20 + mov r0, r0, lsr r5 + orr r0, r0, r1, lsl r7 + mov r1, r1, lsr r5 + b _020EBBB0 +_020EBBA8: ; 0x020EBBA8 + mov r0, r1, lsr r7 + mov r1, #0x0 +_020EBBB0: + cmp r4, #0x0 + blt _020EBBC0 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBBC0: + rsbs r0, r0, #0x0 + rsc r1, r1, #0x0 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBBD0: + mov r0, #0x0 +_020EBBD4: + mov r1, #0x0 + cmp r4, #0x0 + blt _020EBBC0 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr + + arm_func_start _ll_udiv +_ll_udiv: ; 0x020EBBE8 + stmdb sp!, {r4-r7,r11-r12,lr} + mov r4, #0x0 + b _020EBBFC + + arm_func_start _ull_mod +_ull_mod: ; 0x020EBBF4 + stmdb sp!, {r4-r7,r11-r12,lr} + mov r4, #0x1 +_020EBBFC: + orrs r5, r3, r2 + bne _020EBC0C + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBC0C: + orrs r5, r1, r3 + bne _020EBAAC + mov r1, r2 + bl _u32_div_not_0_f +_020EBC1C: ; 0x020EBC1C + cmp r4, #0x0 + movne r0, r1 + mov r1, #0x0 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr + + arm_func_start _ll_mul +_ll_mul: ; 0x020EBC30 + stmdb sp!, {r4-r5,lr} + umull r5, r4, r0, r2 + mla r4, r0, r3, r4 + mla r4, r2, r1, r4 + mov r1, r4 + mov r0, r5 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start _ll_shl +_ll_shl: ; 0x020EBC50 + ands r2, r2, #0x3f + bxeq lr + subs r3, r2, #0x20 + bge _020EBC74 + rsb r3, r2, #0x20 + mov r1, r1, lsl r2 + orr r1, r1, r0, lsr r3 + mov r0, r0, lsl r2 + bx lr +_020EBC74: + mov r1, r0, lsl r3 + mov r0, #0x0 + bx lr + + arm_func_start _s32_div_f +_s32_div_f: ; 0x020EBC80 + eor r12, r0, r1 + and r12, r12, #0x80000000 + cmp r0, #0x0 + rsblt r0, r0, #0x0 + addlt r12, r12, #0x1 + cmp r1, #0x0 + rsblt r1, r1, #0x0 + beq _020EBE78 + cmp r0, r1 + movcc r1, r0 + movcc r0, #0x0 + blo _020EBE78 + mov r2, #0x1c + mov r3, r0, lsr #0x4 + cmp r1, r3, lsr #0xc + suble r2, r2, #0x10 + movle r3, r3, lsr #0x10 + cmp r1, r3, lsr #0x4 + suble r2, r2, #0x8 + movle r3, r3, lsr #0x8 + cmp r1, r3 + suble r2, r2, #0x4 + movle r3, r3, lsr #0x4 + mov r0, r0, lsl r2 + rsb r1, r1, #0x0 + adds r0, r0, r0 + add r2, r2, r2, lsl #0x1 + add pc, pc, r2, lsl #0x2 + mov r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + mov r1, r3 +_020EBE78: + ands r3, r12, #0x80000000 + rsbne r0, r0, #0x0 + ands r3, r12, #0x1 + rsbne r1, r1, #0x0 + bx lr + + arm_func_start _u32_div_f +_u32_div_f: ; 0x020EBE8C + cmp r1, #0x0 + bxeq lr + + arm_func_start _u32_div_not_0_f +_u32_div_not_0_f: + cmp r0, r1 + movcc r1, r0 + movcc r0, #0x0 + bxcc lr + mov r2, #0x1c + mov r3, r0, lsr #0x4 + cmp r1, r3, lsr #0xc + suble r2, r2, #0x10 + movle r3, r3, lsr #0x10 + cmp r1, r3, lsr #0x4 + suble r2, r2, #0x8 + movle r3, r3, lsr #0x8 + cmp r1, r3 + suble r2, r2, #0x4 + movle r3, r3, lsr #0x4 + mov r0, r0, lsl r2 + rsb r1, r1, #0x0 + adds r0, r0, r0 + add r2, r2, r2, lsl #0x1 + add pc, pc, r2, lsl #0x2 + mov r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + mov r1, r3 + bx lr + + arm_func_start _drdiv +_drdiv: ; 0x020EC070 + eor r1, r1, r3 + eor r3, r1, r3 + eor r1, r1, r3 + eor r0, r0, r2 + eor r2, r0, r2 + eor r0, r0, r2 + + arm_func_start _ddiv +_ddiv: ; 0x020EC088 + stmdb sp!, {r4-r6,lr} + ldr lr, _020EC5C8 ; =0x00000FFE + eor r4, r1, r3 + ands r12, lr, r1, lsr #0x13 + cmpne r12, lr + beq _020EC434 + bic r1, r1, lr, lsl #0x14 + orr r1, r1, #0x100000 + add r12, r12, r4, lsr #0x1f +_020EC0AC: + ands r4, lr, r3, lsr #0x13 + cmpne r4, lr + beq _020EC4CC + bic r3, r3, lr, lsl #0x14 + orr r3, r3, #0x100000 +_020EC0C0: + sub r12, r12, r4 + cmp r1, r3 + cmpeq r0, r2 + bhs _020EC0DC + adds r0, r0, r0 + adc r1, r1, r1 + sub r12, r12, #0x2 +_020EC0DC: + sub r4, pc, #0x24 + ldrb lr, [r4, r3, lsr #0xc] + rsbs r2, r2, #0x0 + rsc r3, r3, #0x0 + mov r4, #0x20000000 + mla r5, lr, r3, r4 + mov r6, r3, lsl #0xa + mov r5, r5, lsr #0x7 + mul lr, r5, lr + orr r6, r6, r2, lsr #0x16 + mov lr, lr, lsr #0xd + mul r5, lr, r6 + mov r6, r1, lsl #0xa + orr r6, r6, r0, lsr #0x16 + mov r5, r5, lsr #0x10 + mul r5, lr, r5 + mov lr, lr, lsl #0xe + add lr, lr, r5, lsr #0x10 + umull r5, r6, lr, r6 + umull r4, r5, r6, r2 + mla r5, r3, r6, r5 + mov r4, r4, lsr #0x1a + orr r4, r4, r5, lsl #0x6 + add r4, r4, r0, lsl #0x2 + umull lr, r5, r4, lr + mov r4, #0x0 + adds r5, r5, r6, lsl #0x18 + adc r4, r4, r6, lsr #0x8 + cmp r12, #0x800 + bge _020EC2C0 + add r12, r12, #0x7f0 + adds r12, r12, #0xc + bmi _020EC2D8 + orr r1, r4, r12, lsl #0x1f + bic r12, r12, #0x1 + add r1, r1, r12, lsl #0x13 + tst lr, #0x80000000 + bne _020EC1B0 + rsbs r2, r2, #0x0 + mov r4, r4, lsl #0x1 + add r4, r4, r5, lsr #0x1f + mul lr, r2, r4 + mov r6, #0x0 + mov r4, r5, lsl #0x1 + orr r4, r4, #0x1 + umlal r6, lr, r4, r2 + rsc r3, r3, #0x0 + mla lr, r4, r3, lr + cmp lr, r0, lsl #0x15 + bmi _020EC1B0 + mov r0, r5 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC1B0: + adds r0, r5, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC1C0: ; not code + .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1 + .byte 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4 + .byte 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE, 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8 + .byte 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2, 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD + .byte 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8, 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3 + .byte 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF, 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA + .byte 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6, 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2 + .byte 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF, 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB + .byte 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4 + .byte 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1, 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E + .byte 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98 + .byte 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92 + .byte 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90, 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D + .byte 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89 + .byte 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84 + .byte 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80 +_020EC2C0: + movs r1, r12, lsl #0x1f + orr r1, r1, #0x7f000000 + orr r1, r1, #0xf00000 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC2D8: + mvn r6, r12, asr #0x1 + cmp r6, #0x34 + bgt _020EC424 + beq _020EC400 + cmp r6, #0x14 + bge _020EC320 + rsb r6, r6, #0x13 + mov lr, r0, lsl r6 + rsb r6, r6, #0x14 + mov r0, r5, lsr r6 + rsb r6, r6, #0x20 + orr r0, r0, r4, lsl r6 + rsb r6, r6, #0x20 + mov r4, r4, lsr r6 + orr r1, r4, r12, lsl #0x1f + mov r12, lr + mov lr, #0x0 + b _020EC350 +_020EC320: + rsb r6, r6, #0x33 + mov lr, r1, lsl r6 + mov r1, r12, lsl #0x1f + rsb r6, r6, #0x20 + orr r12, lr, r0, lsr r6 + rsb r6, r6, #0x20 + mov lr, r0, lsl r6 + mov r5, r5, lsr #0x15 + orr r5, r5, r4, lsl #0xb + rsb r6, r6, #0x1f + mov r0, r5, lsr r6 + mov r4, #0x0 +_020EC350: + rsbs r2, r2, #0x0 + mul r4, r2, r4 + mov r5, #0x0 + umlal r5, r4, r2, r0 + rsc r3, r3, #0x0 + mla r4, r0, r3, r4 + cmp r4, r12 + cmpeq r5, lr + ldmeqia sp!, {r4-r6,lr} + bxeq lr + adds r5, r5, r2 + adc r4, r4, r3 + cmp r4, r12 + bmi _020EC3F4 + bne _020EC398 + cmp r5, lr + beq _020EC3E4 + blo _020EC3F4 +_020EC398: + subs r5, r5, r2 + sbc r4, r4, r3 +_020EC3A0: + adds r5, r5, r5 + adc r4, r4, r4 + adds r5, r5, r2 + adc r4, r4, r3 + adds lr, lr, lr + adc r12, r12, r12 + cmp r4, r12 + bmi _020EC3E4 + ldmneia sp!, {r4-r6,lr} + bxne lr + cmp r5, lr + blo _020EC3E4 + ldmneia sp!, {r4-r6,lr} + bxne lr + tst r0, #0x1 + ldmeqia sp!, {r4-r6,lr} + bxeq lr +_020EC3E4: + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC3F4: + adds r0, r0, #0x1 + adc r1, r1, #0x0 + b _020EC3A0 +_020EC400: + rsbs r2, r2, #0x0 + rsc r3, r3, #0x0 + cmp r1, r3 + cmpeq r0, r2 + mov r1, r12, lsl #0x1f + mov r0, #0x0 + movne r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC424: + mov r1, r12, lsl #0x1f + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC434: + orrs r5, r0, r1, lsl #0x1 + beq _020EC558 + cmp r12, lr + beq _020EC49C + movs r1, r1, lsl #0xc + beq _020EC478 + clz r5, r1 + movs r1, r1, lsl r5 + sub r12, r12, r5 + add r5, r12, #0x1f + mov r1, r1, lsr #0xb + orr r1, r1, r0, lsr r5 + rsb r5, r5, #0x20 + mov r0, r0, lsl r5 + mov r12, r12, lsl #0x1 + orr r12, r12, r4, lsr #0x1f + b _020EC0AC +_020EC478: + mvn r12, #0x13 + clz r5, r0 + movs r0, r0, lsl r5 + sub r12, r12, r5 + mov r1, r0, lsr #0xb + mov r0, r0, lsl #0x15 + mov r12, r12, lsl #0x1 + orr r12, r12, r4, lsr #0x1f + b _020EC0AC +_020EC49C: + orrs r5, r0, r1, lsl #0xc + bne _020EC580 + bic r5, r3, #0x80000000 + cmp r5, lr, lsl #0x13 + bhs _020EC4C0 + and r5, r3, #0x80000000 + eor r1, r5, r1 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC4C0: + orrs r5, r2, r3, lsl #0xc + bne _020EC5A0 + b _020EC5B8 +_020EC4CC: + orrs r5, r2, r3, lsl #0x1 + beq _020EC544 + cmp r4, lr + beq _020EC52C + movs r3, r3, lsl #0xc + beq _020EC50C + clz r5, r3 + movs r3, r3, lsl r5 + sub r4, r4, r5 + add r5, r4, #0x1f + mov r3, r3, lsr #0xb + orr r3, r3, r2, lsr r5 + rsb r5, r5, #0x20 + mov r2, r2, lsl r5 + mov r4, r4, lsl #0x1 + b _020EC0C0 +_020EC50C: + mvn r4, #0x13 + clz r5, r2 + movs r2, r2, lsl r5 + sub r4, r4, r5 + mov r3, r2, lsr #0xb + mov r2, r2, lsl #0x15 + mov r4, r4, lsl #0x1 + b _020EC0C0 +_020EC52C: + orrs r5, r2, r3, lsl #0xc + bne _020EC5A0 + mov r1, r12, lsl #0x1f + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC544: + mov r1, r12, lsl #0x1f + orr r1, r1, lr, lsl #0x13 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC558: + orrs r5, r2, r3, lsl #0x1 + beq _020EC5B8 + bic r5, r3, #0x80000000 + cmp r5, lr, lsl #0x13 + cmpeq r2, #0x0 + bhi _020EC5A0 + eor r1, r1, r3 + and r1, r1, #0x80000000 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC580: + tst r1, #0x80000 + beq _020EC5B8 + bic r5, r3, #0x80000000 + cmp r5, lr, lsl #0x13 + cmpeq r2, #0x0 + bhi _020EC5A0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC5A0: + tst r3, #0x80000 + beq _020EC5B8 + mov r1, r3 + mov r0, r2 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC5B8: + orr r1, r1, #0x7f000000 + orr r1, r1, #0xf80000 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020EC5C8: .word 0x00000FFE + + arm_func_start _fp_init +_fp_init: ; 0x020EC5CC + bx lr + + arm_func_start sys_writec +sys_writec: ; 0x020EC5D0 + str lr, [sp, #-0x4]! + mov r1, r0 + mov r0, #0x3 + swi 0x123456 + ldr pc, [sp], #0x4 + + arm_func_start sys_readc +sys_readc: ; 0x020EC5E4 + str lr, [sp, #-0x4]! + mov r1, #0x0 + mov r0, #0x7 + swi 0x123456 + ldr pc, [sp], #0x4 + + arm_func_start sys_exit +sys_exit: ; 0x020EC5F8 + mov r1, #0x0 + mov r0, #0x18 + swi 0x123456 + mov pc, lr + + arm_func_start __read_console +__read_console: ; 0x020EC608 + stmdb sp!, {r3-r7,lr} + mov r6, r2 + ldr r5, [r6, #0x0] + mov r7, r1 + cmp r5, #0x0 + mov r4, #0x0 + bls _020EC650 +_020EC624: + bl sys_readc + and r1, r0, #0xff + cmp r1, #0xd + strb r0, [r7, r4] + cmpne r1, #0xa + addeq r0, r4, #0x1 + streq r0, [r6, #0x0] + beq _020EC650 + add r4, r4, #0x1 + cmp r4, r5 + blo _020EC624 +_020EC650: + mov r0, #0x0 + ldmia sp!, {r3-r7,pc} + + arm_func_start __write_console +__write_console: ; 0x020EC658 + stmdb sp!, {r4-r6,lr} + ldr r5, [r2, #0x0] + mov r6, r1 + cmp r5, #0x0 + mov r4, #0x0 + bls _020EC684 +_020EC670: + add r0, r6, r4 + bl sys_writec + add r4, r4, #0x1 + cmp r4, r5 + blo _020EC670 +_020EC684: + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} + + arm_func_start __close_console +__close_console: ; 0x020EC68C + mov r0, #0x0 + bx lr + + arm_func_start __call_static_initializers +__call_static_initializers: ; 0x020EC694 + stmdb sp!, {r4,lr} + ldr r4, _020EC6BC ; =0x02104774 + b _020EC6A8 +_020EC6A0: + blx r0 + add r4, r4, #0x4 +_020EC6A8: + cmp r4, #0x0 + ldrne r0, [r4, #0x0] + cmpne r0, #0x0 + bne _020EC6A0 + ldmia sp!, {r4,pc} + .balign 4 +_020EC6BC: .word 0x02104774 + + arm_func_start __destroy_global_chain +__destroy_global_chain: ; 0x020EC6C0 + stmdb sp!, {r3-r5,lr} + ldr r4, _020EC700 ; =0x021D74C8 + ldr r2, [r4, #0x0] + cmp r2, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020EC6D4: ; 0x020EC6D4 + mvn r5, #0x0 +_020EC6D8: + ldr r0, [r2, #0x0] + mov r1, r5 + str r0, [r4, #0x0] + ldr r0, [r2, #0x8] + ldr r2, [r2, #0x4] + blx r2 + ldr r2, [r4, #0x0] + cmp r2, #0x0 + bne _020EC6D8 + ldmia sp!, {r3-r5,pc} + .balign 4 +_020EC700: .word 0x021D74C8 + + arm_func_start _ExitProcess +_ExitProcess: ; 0x020EC704 + ldr ip, _020EC70C ; =sys_exit + bx r12 + .balign 4 +_020EC70C: .word sys_exit diff --git a/asm/rom2dism.s b/asm/rom2dism.s deleted file mode 100644 index 7994c2ed..00000000 --- a/asm/rom2dism.s +++ /dev/null @@ -1,13429 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - ; TODO: disassemble the rest of the .byte s - - .text - - arm_func_start STD_CompareNString -STD_CompareNString: ; 0x020DE03C - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r2, #0x0 - beq _020DE080 - cmp r2, #0x0 - mov lr, #0x0 - ble _020DE080 -_020DE058: - ldrb r12, [r0, lr] - ldrb r3, [r1, lr] - cmp r12, r3 - addne sp, sp, #0x4 - subne r0, r12, r3 - ldmneia sp!, {lr} - bxne lr - add lr, lr, #0x1 - cmp lr, r2 - blt _020DE058 -_020DE080: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start STD_CompareString -STD_CompareString: ; 0x020DE090 - b _020DE09C -_020DE094: - add r0, r0, #0x1 - add r1, r1, #0x1 -_020DE09C: - ldrsb r2, [r1, #0x0] - ldrsb r3, [r0, #0x0] - cmp r3, r2 - bne _020DE0B4 - cmp r3, #0x0 - bne _020DE094 -_020DE0B4: - sub r0, r3, r2 - bx lr - - arm_func_start STD_GetStringLength -STD_GetStringLength: ; 0x020DE0BC - ldrsb r1, [r0, #0x0] - mov r2, #0x0 - cmp r1, #0x0 - beq _020DE0DC -_020DE0CC: - add r2, r2, #0x1 - ldrsb r1, [r0, r2] - cmp r1, #0x0 - bne _020DE0CC -_020DE0DC: - mov r0, r2 - bx lr - - arm_func_start STD_CopyLString -STD_CopyLString: ; 0x020DE0E4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - sub r12, r2, #0x1 - cmp r12, #0x0 - mov lr, #0x0 - ble _020DE120 -_020DE0FC: - ldrsb r3, [r1, #0x0] - strb r3, [r0, lr] - ldrsb r3, [r1, #0x0] - cmp r3, #0x0 - beq _020DE120 - add lr, lr, #0x1 - cmp lr, r12 - add r1, r1, #0x1 - blt _020DE0FC -_020DE120: - sub r3, r2, #0x1 - cmp lr, r3 - blt _020DE138 - cmp r2, #0x0 - movne r2, #0x0 - strneb r2, [r0, lr] -_020DE138: - mov r0, r1 - bl STD_GetStringLength - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start abort -abort: ; 0x020DE14C - stmdb sp!, {r3,lr} - mov r0, #0x1 - bl raise - ldr r1, _020DE16C ; =0x021D6F78 - mov r0, #0x1 - str r0, [r1, #0xc] - bl exit - ldmia sp!, {r3,pc} - .balign 4 -_020DE16C: .word 0x021D6F78 - - arm_func_start exit -exit: ; 0x020DE170 - stmdb sp!, {r4,lr} - ldr r1, _020DE1B8 ; =0x021D6F78 - mov r4, r0 - ldr r0, [r1, #0xc] - cmp r0, #0x0 - bne _020DE1AC - bl __destroy_global_chain - ldr r0, _020DE1B8 ; =0x021D6F78 - ldr r0, [r0, #0x4] - cmp r0, #0x0 - beq _020DE1AC - blx r0 - ldr r0, _020DE1B8 ; =0x021D6F78 - mov r1, #0x0 - str r1, [r0, #0x4] -_020DE1AC: - mov r0, r4 - bl __exit - ldmia sp!, {r4,pc} - .balign 4 -_020DE1B8: .word 0x021D6F78 - - arm_func_start __exit -__exit: ; 0x020DE1BC - stmdb sp!, {r3-r5,lr} - ldr r0, _020DE2CC ; =0x021D70D0 - bl OS_TryLockMutex -_020DE1C8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A - .byte 0xF8, 0x00, 0x9F, 0xE5, 0xF8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0xF4, 0x00, 0x9F, 0xE5 - .byte 0x6C, 0x30, 0x92, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x00, 0x30, 0x81, 0xE5, 0x00, 0x20, 0x80, 0xE5 - .byte 0x15, 0x00, 0x00, 0xEA, 0xD4, 0x00, 0x9F, 0xE5, 0xD4, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5 - .byte 0x00, 0x10, 0x91, 0xE5, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A - .byte 0xC0, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2, 0x00, 0x10, 0x80, 0xE5 - .byte 0x09, 0x00, 0x00, 0xEA, 0xA0, 0x00, 0x9F, 0xE5, 0x78, 0xB7, 0xFF, 0xEB, 0x9C, 0x00, 0x9F, 0xE5 - .byte 0x9C, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0x98, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x00, 0x30, 0x81, 0xE5, 0x00, 0x20, 0x80, 0xE5, 0x88, 0x40, 0x9F, 0xE5 - .byte 0x08, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0xDA, 0x7C, 0x50, 0x9F, 0xE5 - .byte 0x08, 0x00, 0x94, 0xE5, 0x01, 0x10, 0x40, 0xE2, 0x01, 0x01, 0x95, 0xE7, 0x08, 0x10, 0x84, 0xE5 - .byte 0x30, 0xFF, 0x2F, 0xE1, 0x08, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0xF7, 0xFF, 0xFF, 0xCA - .byte 0x50, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x51, 0xE2, 0x00, 0x10, 0x80, 0xE5 - .byte 0x01, 0x00, 0x00, 0x1A, 0x30, 0x00, 0x9F, 0xE5, 0x40, 0xB7, 0xFF, 0xEB, 0x38, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A, 0x30, 0xFF, 0x2F, 0xE1 - .byte 0x24, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x8D, 0x02, 0x00, 0xEB, 0x0E, 0x39, 0x00, 0xEB, 0x38, 0x80, 0xBD, 0xE8 -_020DE2CC: .word 0x021D70D0 -_020DE2D0: - .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0x78, 0x6F, 0x1D, 0x02 - .byte 0x88, 0x6F, 0x1D, 0x02 - - arm_func_start nan -nan: ; 0x020DE2E4 - ldr r0, _020DE2F4 ; =0x02106B78 - ldr ip, _020DE2F8 ; =_f2d - ldr r0, [r0, #0x0] - bx r12 - .balign 4 -_020DE2F4: .word 0x02106B78 -_020DE2F8: .word _f2d - - arm_func_start __flush_line_buffered_output_files -__flush_line_buffered_output_files: ; 0x020DE2FC - stmdb sp!, {r3-r9,lr} - ldr r0, _020DE384 ; =0x02106A58 - mov r4, #0x0 - mov r5, #0x1 - mov r8, r0 - mvn r9, #0x0 - mov r7, r4 - mov r6, #0x4c -_020DE31C: - ldr r1, [r0, #0x4] - mov r2, r1, lsl #0x16 - movs r2, r2, lsr #0x1d - beq _020DE35C - mov r1, r1, lsl #0x19 - mov r1, r1, lsr #0x1e - tst r1, #0x1 - beq _020DE35C - ldr r1, [r0, #0x8] - mov r1, r1, lsl #0x1d - mov r1, r1, lsr #0x1d - cmp r1, #0x1 - bne _020DE35C - bl fflush -_020DE354: - .byte 0x00, 0x00, 0x50, 0xE3, 0x09, 0x40, 0xA0, 0x11 -_020DE35C: - cmp r5, #0x3 - movge r0, r7 - bge _020DE374 - mul r0, r5, r6 - add r5, r5, #0x1 - add r0, r8, r0 -_020DE374: - cmp r0, #0x0 - bne _020DE31C - mov r0, r4 - ldmia sp!, {r3-r9,pc} - .balign 4 -_020DE384: .word 0x02106A58 - - arm_func_start __flush_all -__flush_all: ; 0x020DE388 - stmdb sp!, {r3-r9,lr} - ldr r0, _020DE3EC ; =0x02106A58 - mov r4, #0x0 - mov r5, #0x1 - mov r8, r0 - mvn r9, #0x0 - mov r7, r4 - mov r6, #0x4c -_020DE3A8: - ldr r1, [r0, #0x4] - mov r1, r1, lsl #0x16 - movs r1, r1, lsr #0x1d - beq _020DE3C4 - bl fflush -_020DE3BC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x09, 0x40, 0xA0, 0x11 -_020DE3C4: - cmp r5, #0x3 - movge r0, r7 - bge _020DE3DC - mul r0, r5, r6 - add r5, r5, #0x1 - add r0, r8, r0 -_020DE3DC: - cmp r0, #0x0 - bne _020DE3A8 - mov r0, r4 - ldmia sp!, {r3-r9,pc} - .balign 4 -_020DE3EC: .word 0x02106A58 - - arm_func_start abs -abs: ; 0x020DE3F0 - cmp r0, #0x0 - rsblt r0, r0, #0x0 - bx lr - - arm_func_start __msl_assertion_failed -__msl_assertion_failed: ; 0x020DE3FC - stmdb sp!, {r3-r4,lr} - sub sp, sp, #0x4 - mov r4, r0 - mov lr, r1 - mov r12, r2 - str r3, [sp, #0x0] - ldr r0, _020DE434 ; =0x02106B3C - mov r1, r4 - mov r2, lr - mov r3, r12 - bl printf - bl abort - add sp, sp, #0x4 - ldmia sp!, {r3-r4,pc} - .balign 4 -_020DE434: .word 0x02106B3C -__convert_from_newlines: - bx lr - - arm_func_start __convert_to_newlines -__convert_to_newlines: ; 0x020DE43C - bx lr -__prep_buffer: - ldr r1, [r0, #0x1c] - str r1, [r0, #0x24] - ldr r3, [r0, #0x20] - str r3, [r0, #0x28] - ldr r2, [r0, #0x18] - ldr r1, [r0, #0x2c] - and r1, r2, r1 - sub r1, r3, r1 - str r1, [r0, #0x28] - ldr r1, [r0, #0x18] - str r1, [r0, #0x34] - bx lr - - arm_func_start __load_buffer -__load_buffer: ; 0x020DE470 - stmdb sp!, {r4-r6,lr} - mov r5, r2 - mov r4, r0 - mov r6, r1 - bl __prep_buffer - cmp r5, #0x1 - ldreq r0, [r4, #0x20] - add r2, r4, #0x28 - streq r0, [r4, #0x28] - ldr r0, [r4, #0x0] - ldr r1, [r4, #0x1c] - ldr r3, [r4, #0x48] - ldr r12, [r4, #0x3c] - blx r12 - cmp r0, #0x2 - moveq r1, #0x0 - streq r1, [r4, #0x28] - cmp r6, #0x0 - ldrne r1, [r4, #0x28] - strne r1, [r6, #0x0] - cmp r0, #0x0 - ldmneia sp!, {r4-r6,pc} -_020DE4C8: - .byte 0x18, 0x10, 0x94, 0xE5, 0x28, 0x00, 0x94, 0xE5 - .byte 0x00, 0x00, 0x81, 0xE0, 0x18, 0x00, 0x84, 0xE5, 0x04, 0x00, 0x94, 0xE5, 0x80, 0x09, 0xA0, 0xE1 - .byte 0xA0, 0x0F, 0xB0, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x1C, 0x00, 0x94, 0xE5, 0x28, 0x10, 0x84, 0xE2 - .byte 0xD1, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x70, 0x80, 0xBD, 0xE8 -__flush_buffer: - stmdb sp!, {r3-r5,lr} - mov r5, r0 - ldr r2, [r5, #0x24] - ldr r0, [r5, #0x1c] - mov r4, r1 - subs r0, r2, r0 - beq _020DE574 - str r0, [r5, #0x28] - ldr r0, [r5, #0x4] - mov r0, r0, lsl #0x13 - movs r0, r0, lsr #0x1f - bne _020DE538 - ldr r0, [r5, #0x1c] - add r1, r5, #0x28 - bl __convert_from_newlines -_020DE538: - ldr r0, [r5, #0x0] - ldr r1, [r5, #0x1c] - ldr r3, [r5, #0x48] - ldr r12, [r5, #0x40] - add r2, r5, #0x28 - blx r12 - cmp r4, #0x0 - ldrne r1, [r5, #0x28] - strne r1, [r4, #0x0] - cmp r0, #0x0 - ldmneia sp!, {r3-r5,pc} -_020DE564: - .byte 0x18, 0x10, 0x95, 0xE5, 0x28, 0x00, 0x95, 0xE5, 0x00, 0x00, 0x81, 0xE0 - .byte 0x18, 0x00, 0x85, 0xE5 -_020DE574: - mov r0, r5 - bl __prep_buffer -_020DE57C: - .byte 0x00, 0x00, 0xA0, 0xE3 - .byte 0x38, 0x80, 0xBD, 0xE8 - - arm_func_start fread -fread: ; 0x020DE584 - stmdb sp!, {r4-r10,lr} - ldr r4, _020DE67C ; =0x02106A58 - mov r7, r3 - cmp r7, r4 - moveq r6, #0x2 - mov r10, r0 - movne r6, #0x5 - mov r0, #0x18 - mul r4, r6, r0 - ldr r5, _020DE680 ; =0x021D70D0 - mov r9, r1 - add r0, r5, r4 - mov r8, r2 - bl OS_TryLockMutex -_020DE5BC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0x00, 0x00, 0x1A, 0xB8, 0x00, 0x9F, 0xE5, 0xB8, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5 - .byte 0xB4, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7 - .byte 0x06, 0x11, 0x80, 0xE7, 0x15, 0x00, 0x00, 0xEA, 0x94, 0x00, 0x9F, 0xE5, 0x94, 0x10, 0x9F, 0xE5 - .byte 0x04, 0x00, 0x90, 0xE5, 0x06, 0x11, 0x91, 0xE7, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1 - .byte 0x04, 0x00, 0x00, 0x1A, 0x80, 0x10, 0x9F, 0xE5, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x80, 0xE2 - .byte 0x06, 0x01, 0x81, 0xE7, 0x09, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x85, 0xE0, 0x7B, 0xB6, 0xFF, 0xEB - .byte 0x5C, 0x00, 0x9F, 0xE5, 0x5C, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0x58, 0x00, 0x9F, 0xE5 - .byte 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7 - .byte 0x0A, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x07, 0x30, 0xA0, 0xE1 - .byte 0x0E, 0x00, 0x00, 0xEB, 0x30, 0x10, 0x9F, 0xE5, 0x00, 0x70, 0xA0, 0xE1, 0x06, 0x01, 0x91, 0xE7 - .byte 0x01, 0x00, 0x50, 0xE2, 0x06, 0x01, 0x81, 0xE7, 0x01, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x85, 0xE0 - .byte 0x4A, 0xB6, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1, 0xF0, 0x87, 0xBD, 0xE8 -_020DE67C: .word 0x02106A58 -_020DE680: .word 0x021D70D0 -_020DE684: - .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 - - arm_func_start __fread -__fread: ; 0x020DE690 - stmdb sp!, {r3-r10,lr} - sub sp, sp, #0x4 - mov r7, r3 - mov r9, r0 - mov r8, r1 - mov r0, r7 - mov r1, #0x0 - mov r4, r2 - bl fwide -_020DE6B4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x00, 0x10, 0xE0, 0xE3, 0x4A, 0x1A, 0x00, 0xEB, 0x98, 0x04, 0x14, 0xE0, 0x06, 0x00, 0x00, 0x0A - .byte 0x0D, 0x00, 0xD7, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x04, 0x10, 0x97, 0xE5 - .byte 0x01, 0x0B, 0xA0, 0xE1, 0xA0, 0x0E, 0xB0, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x00, 0x00, 0xA0, 0xE3, 0xF8, 0x87, 0xBD, 0xE8, 0x81, 0x09, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1 - .byte 0x81, 0x0C, 0xA0, 0x11, 0x20, 0x0F, 0xA0, 0x11, 0x08, 0x10, 0x97, 0xE5, 0x02, 0x00, 0x50, 0x13 - .byte 0x01, 0x60, 0xA0, 0xE3, 0x81, 0x0E, 0xA0, 0xE1, 0x00, 0x60, 0xA0, 0x13, 0xA0, 0x0E, 0xB0, 0xE1 - .byte 0x09, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x97, 0xE5, 0x80, 0x0D, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 - .byte 0x01, 0x00, 0x10, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x07, 0x00, 0xC1, 0xE3, 0x02, 0x00, 0x80, 0xE3 - .byte 0x08, 0x00, 0x87, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x87, 0xE5, 0x08, 0x00, 0x97, 0xE5 - .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x02, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x2A - .byte 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC7, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x28, 0x00, 0x87, 0xE5, 0xF8, 0x87, 0xBD, 0xE8, 0x04, 0x00, 0x97, 0xE5, 0x80, 0x0C, 0xA0, 0xE1 - .byte 0x20, 0x0F, 0xA0, 0xE1, 0x01, 0x00, 0x10, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0xDA, 0xFE, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC7, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2, 0x28, 0x00, 0x87, 0xE5, 0xF8, 0x87, 0xBD, 0xE8 - .byte 0x00, 0x00, 0x54, 0xE3, 0x00, 0x50, 0xA0, 0xE3, 0x2D, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x97, 0xE5 - .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x03, 0x00, 0x50, 0xE3, 0x28, 0x00, 0x00, 0x3A - .byte 0x05, 0xA0, 0xA0, 0xE1, 0x07, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0x04, 0x1A, 0x00, 0xEB - .byte 0x01, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x97, 0xE5, 0x06, 0x00, 0x00, 0x1A, 0x80, 0x0E, 0xA0, 0xE1 - .byte 0x20, 0x0E, 0x87, 0xE0, 0xBE, 0x00, 0xD0, 0xE1, 0x02, 0x50, 0x85, 0xE2, 0x02, 0x40, 0x44, 0xE2 - .byte 0xB2, 0x00, 0xC9, 0xE0, 0x05, 0x00, 0x00, 0xEA, 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0x87, 0xE0 - .byte 0x0F, 0x00, 0xD0, 0xE5, 0x01, 0x50, 0x85, 0xE2, 0x01, 0x40, 0x44, 0xE2, 0x01, 0x00, 0xC9, 0xE4 - .byte 0x08, 0x10, 0x97, 0xE5, 0x00, 0x00, 0x54, 0xE3, 0x81, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 - .byte 0x01, 0x00, 0x40, 0xE2, 0x07, 0x10, 0xC1, 0xE3, 0x07, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x81, 0xE1 - .byte 0x08, 0x00, 0x87, 0xE5, 0x04, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x97, 0xE5, 0x80, 0x0E, 0xA0, 0xE1 - .byte 0xA0, 0x0E, 0xA0, 0xE1, 0x03, 0x00, 0x50, 0xE3, 0xDD, 0xFF, 0xFF, 0x2A, 0x08, 0x00, 0x97, 0xE5 - .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x02, 0x00, 0x50, 0xE3, 0x30, 0x00, 0x97, 0x05 - .byte 0x28, 0x00, 0x87, 0x05, 0x00, 0x00, 0x54, 0xE3, 0x2E, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x97, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x56, 0x03, 0x2A, 0x00, 0x00, 0x0A, 0x00, 0xA0, 0xA0, 0xE3 - .byte 0x28, 0x00, 0x97, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x11, 0x00, 0x00, 0x1A, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x0A, 0x10, 0xA0, 0xE1, 0x0A, 0x20, 0xA0, 0xE1, 0xF0, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x0B, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC7, 0x05 - .byte 0x03, 0x00, 0x00, 0x0A, 0x08, 0x10, 0x97, 0xE5, 0x07, 0x10, 0xC1, 0xE3, 0x08, 0x10, 0x87, 0xE5 - .byte 0x0C, 0x00, 0xC7, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x87, 0xE5, 0x00, 0x40, 0xA0, 0xE3 - .byte 0x14, 0x00, 0x00, 0xEA, 0x28, 0x00, 0x97, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x04, 0x00, 0x50, 0xE1 - .byte 0x00, 0x40, 0x8D, 0x85, 0x24, 0x10, 0x97, 0xE5, 0x00, 0x20, 0x9D, 0xE5, 0x09, 0x00, 0xA0, 0xE1 - .byte 0xCC, 0x02, 0x00, 0xEB, 0x00, 0x20, 0x9D, 0xE5, 0x24, 0x00, 0x97, 0xE5, 0x02, 0x40, 0x54, 0xE0 - .byte 0x02, 0x00, 0x80, 0xE0, 0x24, 0x00, 0x87, 0xE5, 0x28, 0x10, 0x97, 0xE5, 0x00, 0x00, 0x9D, 0xE5 - .byte 0x02, 0x90, 0x89, 0xE0, 0x00, 0x00, 0x41, 0xE0, 0x02, 0x50, 0x85, 0xE0, 0x28, 0x00, 0x87, 0xE5 - .byte 0x00, 0x00, 0x56, 0x13, 0xD5, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x54, 0xE3, 0x20, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x56, 0xE3, 0x1E, 0x00, 0x00, 0x1A, 0x1C, 0x60, 0x97, 0xE5, 0x20, 0xA0, 0x97, 0xE5 - .byte 0x00, 0x10, 0x8D, 0xE2, 0x1C, 0x90, 0x87, 0xE5, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x20, 0x40, 0x87, 0xE5, 0xC1, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x00, 0x0A - .byte 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x0D, 0x00, 0xC7, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x87, 0xE5, 0x05, 0x00, 0x00, 0xEA, 0x08, 0x10, 0x97, 0xE5 - .byte 0x07, 0x10, 0xC1, 0xE3, 0x08, 0x10, 0x87, 0xE5, 0x0C, 0x00, 0xC7, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x28, 0x00, 0x87, 0xE5, 0x00, 0x10, 0x9D, 0xE5, 0x07, 0x00, 0xA0, 0xE1, 0x1C, 0x60, 0x87, 0xE5 - .byte 0x20, 0xA0, 0x87, 0xE5, 0x01, 0x50, 0x85, 0xE0, 0xA0, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x28, 0x00, 0x87, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0xA0, 0xE1, 0x2E, 0x35, 0x00, 0xEB - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF8, 0x87, 0xBD, 0xE8 -__fwrite: - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x8 - mov r9, r3 - mov r10, r0 - str r1, [sp, #0x0] - mov r0, r9 - mov r1, #0x0 - mov r4, r2 - bl fwide -_020DE9FC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0x00, 0x1A, 0x09, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xE0, 0xE3, 0x78, 0x19, 0x00, 0xEB - .byte 0x00, 0x00, 0x9D, 0xE5, 0x90, 0x04, 0x15, 0xE0, 0x06, 0x00, 0x00, 0x0A, 0x0D, 0x00, 0xD9, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x04, 0x10, 0x99, 0xE5, 0x01, 0x0B, 0xA0, 0xE1 - .byte 0xA0, 0x0E, 0xB0, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x08, 0xD0, 0x8D, 0xE2, 0x00, 0x00, 0xA0, 0xE3 - .byte 0xF8, 0x8F, 0xBD, 0xE8, 0x81, 0x09, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1, 0x81, 0x0C, 0xA0, 0x11 - .byte 0x20, 0x0F, 0xA0, 0x11, 0x02, 0x00, 0x50, 0x13, 0x08, 0x10, 0x99, 0xE5, 0x01, 0x00, 0x50, 0x13 - .byte 0x01, 0x80, 0xA0, 0xE3, 0x81, 0x0E, 0xA0, 0xE1, 0x00, 0x80, 0xA0, 0x13, 0xA0, 0x0E, 0xB0, 0xE1 - .byte 0x09, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x99, 0xE5, 0x80, 0x0D, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 - .byte 0x02, 0x00, 0x10, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x07, 0x00, 0xC1, 0xE3, 0x01, 0x10, 0x80, 0xE3 - .byte 0x09, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0x89, 0xE5, 0x68, 0xFE, 0xFF, 0xEB, 0x08, 0x00, 0x99, 0xE5 - .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A - .byte 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC9, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x08, 0xD0, 0x8D, 0xE2 - .byte 0x28, 0x00, 0x89, 0xE5, 0xF8, 0x8F, 0xBD, 0xE8, 0x00, 0x00, 0x55, 0xE3, 0x00, 0x60, 0xA0, 0xE3 - .byte 0x46, 0x00, 0x00, 0x0A, 0x1C, 0x00, 0x99, 0xE5, 0x24, 0x20, 0x99, 0xE5, 0x00, 0x00, 0x52, 0xE1 - .byte 0x00, 0x00, 0x58, 0x03, 0x41, 0x00, 0x00, 0x0A, 0x20, 0x10, 0x99, 0xE5, 0x00, 0x00, 0x42, 0xE0 - .byte 0x00, 0x00, 0x41, 0xE0, 0x28, 0x00, 0x89, 0xE5, 0x0A, 0xB0, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3 - .byte 0x28, 0x00, 0x99, 0xE5, 0x04, 0x70, 0xA0, 0xE1, 0x04, 0x00, 0x8D, 0xE5, 0x05, 0x00, 0x50, 0xE1 - .byte 0x04, 0x50, 0x8D, 0x85, 0x04, 0x00, 0x99, 0xE5, 0x80, 0x0C, 0xA0, 0xE1, 0x20, 0x0F, 0xA0, 0xE1 - .byte 0x01, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x1A, 0x04, 0x20, 0x9D, 0xE5, 0x00, 0x00, 0x52, 0xE3 - .byte 0x06, 0x00, 0x00, 0x0A, 0x0A, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x68, 0x02, 0x00, 0xEB - .byte 0x00, 0x70, 0xB0, 0xE1, 0x01, 0x00, 0x87, 0x12, 0x0A, 0x00, 0x40, 0x10, 0x04, 0x00, 0x8D, 0x15 - .byte 0x04, 0x20, 0x9D, 0xE5, 0x00, 0x00, 0x52, 0xE3, 0x0C, 0x00, 0x00, 0x0A, 0x24, 0x00, 0x99, 0xE5 - .byte 0x0A, 0x10, 0xA0, 0xE1, 0x33, 0x02, 0x00, 0xEB, 0x04, 0x20, 0x9D, 0xE5, 0x24, 0x00, 0x99, 0xE5 - .byte 0x02, 0xA0, 0x8A, 0xE0, 0x02, 0x00, 0x80, 0xE0, 0x24, 0x00, 0x89, 0xE5, 0x28, 0x10, 0x99, 0xE5 - .byte 0x04, 0x00, 0x9D, 0xE5, 0x02, 0x50, 0x45, 0xE0, 0x00, 0x00, 0x41, 0xE0, 0x28, 0x00, 0x89, 0xE5 - .byte 0x28, 0x00, 0x99, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x57, 0xE3 - .byte 0x03, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x99, 0xE5, 0x80, 0x0C, 0xA0, 0xE1, 0x20, 0x0F, 0xB0, 0xE1 - .byte 0x09, 0x00, 0x00, 0x1A, 0x09, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x4E, 0xFE, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC9, 0xE5 - .byte 0x00, 0x50, 0xA0, 0xE3, 0x28, 0x50, 0x89, 0xE5, 0x04, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x55, 0xE3, 0x00, 0x60, 0x86, 0xE0, 0x00, 0x00, 0x58, 0x13, 0xC3, 0xFF, 0xFF, 0x1A - .byte 0x00, 0x00, 0x55, 0xE3, 0x18, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x58, 0xE3, 0x16, 0x00, 0x00, 0x1A - .byte 0x1C, 0x40, 0x99, 0xE5, 0x20, 0x70, 0x99, 0xE5, 0x05, 0x20, 0x8A, 0xE0, 0x1C, 0xA0, 0x89, 0xE5 - .byte 0x20, 0x50, 0x89, 0xE5, 0x04, 0x10, 0x8D, 0xE2, 0x09, 0x00, 0xA0, 0xE1, 0x24, 0x20, 0x89, 0xE5 - .byte 0x35, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x9D, 0x05, 0x00, 0x60, 0x86, 0x00 - .byte 0x03, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC9, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x28, 0x00, 0x89, 0xE5, 0x1C, 0x40, 0x89, 0xE5, 0x09, 0x00, 0xA0, 0xE1, 0x20, 0x70, 0x89, 0xE5 - .byte 0xFA, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x89, 0xE5, 0x04, 0x00, 0x99, 0xE5 - .byte 0x00, 0x10, 0x9D, 0xE5, 0x80, 0x0C, 0xA0, 0xE1, 0x20, 0x0F, 0xA0, 0xE1, 0x02, 0x00, 0x50, 0xE3 - .byte 0x00, 0x00, 0xA0, 0x13, 0x28, 0x00, 0x89, 0x15, 0x06, 0x00, 0xA0, 0xE1, 0x82, 0x34, 0x00, 0xEB - .byte 0x08, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 - - arm_func_start fclose -fclose: ; 0x020DEC88 - stmdb sp!, {r3-r5,lr} - movs r5, r0 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r5,pc} -_020DEC98: - .byte 0x04, 0x10, 0x95, 0xE5, 0x01, 0x1B, 0xA0, 0xE1 - .byte 0xA1, 0x1E, 0xB0, 0xE1, 0x00, 0x00, 0xA0, 0x03, 0x38, 0x80, 0xBD, 0x08, 0x12, 0x00, 0x00, 0xEB - .byte 0x00, 0x40, 0xA0, 0xE1, 0x00, 0x00, 0x95, 0xE5, 0x44, 0x10, 0x95, 0xE5, 0x31, 0xFF, 0x2F, 0xE1 - .byte 0x04, 0x10, 0x95, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x0E, 0x1D, 0xC1, 0xE3, 0x04, 0x10, 0x85, 0xE5 - .byte 0x00, 0x20, 0x85, 0xE5, 0x08, 0x10, 0x95, 0xE5, 0x01, 0x1E, 0xA0, 0xE1, 0xA1, 0x1F, 0xB0, 0xE1 - .byte 0x01, 0x00, 0x42, 0x12, 0x38, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x54, 0xE3, 0x00, 0x00, 0x50, 0x03 - .byte 0x01, 0x20, 0xA0, 0x13, 0x00, 0x00, 0x62, 0xE2, 0x38, 0x80, 0xBD, 0xE8 - - arm_func_start fflush -fflush: - stmdb sp!, {r4,lr} - movs r4, r0 - bne _020DED10 - bl __flush_all - ldmia sp!, {r4,pc} -_020DED10: - ldrb r0, [r4, #0xd] - cmp r0, #0x0 - bne _020DED2C - ldr r0, [r4, #0x4] - mov r1, r0, lsl #0x16 - movs r1, r1, lsr #0x1d - bne _020DED34 -_020DED2C: - mvn r0, #0x0 - ldmia sp!, {r4,pc} -_020DED34: - mov r0, r0, lsl #0x1b - mov r0, r0, lsr #0x1d - cmp r0, #0x1 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} -_020DED48: - .byte 0x08, 0x00, 0x94, 0xE5, 0x80, 0x1E, 0xA0, 0xE1 - .byte 0xA1, 0x1E, 0xA0, 0xE1, 0x03, 0x00, 0x51, 0xE3, 0x07, 0x00, 0xC0, 0x23, 0x02, 0x00, 0x80, 0x23 - .byte 0x08, 0x00, 0x84, 0x25, 0x08, 0x00, 0x94, 0xE5, 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 - .byte 0x02, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x03, 0x28, 0x00, 0x84, 0x05, 0x08, 0x00, 0x94, 0xE5 - .byte 0x80, 0x1E, 0xA0, 0xE1, 0xA1, 0x1E, 0xA0, 0xE1, 0x01, 0x00, 0x51, 0xE3, 0x03, 0x00, 0x00, 0x0A - .byte 0x07, 0x00, 0xC0, 0xE3, 0x08, 0x00, 0x84, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x80, 0xBD, 0xE8 - .byte 0x04, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0xD3, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x10, 0xA0, 0xE3, 0x0D, 0x10, 0xC4, 0xE5 - .byte 0x28, 0x00, 0x84, 0xE5, 0x01, 0x00, 0x40, 0xE2, 0x10, 0x80, 0xBD, 0xE8, 0x08, 0x10, 0x94, 0xE5 - .byte 0x07, 0x10, 0xC1, 0xE3, 0x08, 0x10, 0x84, 0xE5, 0x18, 0x00, 0x84, 0xE5, 0x28, 0x00, 0x84, 0xE5 - .byte 0x10, 0x80, 0xBD, 0xE8 - - arm_func_start _ftell -_ftell: ; 0x020DEDE4 - ldr r1, [r0, #0x4] - mov r1, r1, lsl #0x16 - mov r1, r1, lsr #0x1d - and r1, r1, #0xff - add r1, r1, #0xff - and r1, r1, #0xff - cmp r1, #0x1 - bhi _020DEE10 - ldrb r1, [r0, #0xd] - cmp r1, #0x0 - beq _020DEE24 -_020DEE10: - ldr r0, _020DEE5C ; =0x021D74A8 - mov r1, #0x28 - str r1, [r0, #0x0] - sub r0, r1, #0x29 - bx lr -_020DEE24: - ldr r1, [r0, #0x8] - mov r1, r1, lsl #0x1d - movs r12, r1, lsr #0x1d - ldreq r0, [r0, #0x18] - bxeq lr - ldr r2, [r0, #0x24] - ldr r1, [r0, #0x1c] - ldr r3, [r0, #0x34] - sub r0, r2, r1 - cmp r12, #0x3 - add r0, r3, r0 - subcs r1, r12, #0x2 - subcs r0, r0, r1 - bx lr - .balign 4 -_020DEE5C: .word 0x021D74A8 - - arm_func_start ftell -ftell: ; 0x020DEE60 - stmdb sp!, {r3-r7,lr} - ldr r1, _020DEF60 ; =0x02106A58 - mov r7, r0 - cmp r7, r1 - moveq r6, #0x2 - beq _020DEE98 - ldr r0, _020DEF64 ; =0x02106AA4 - cmp r7, r0 - moveq r6, #0x3 - beq _020DEE98 - ldr r0, _020DEF68 ; =0x02106AF0 - cmp r7, r0 - moveq r6, #0x4 - movne r6, #0x5 -_020DEE98: - mov r0, #0x18 - mul r4, r6, r0 - ldr r5, _020DEF6C ; =0x021D70D0 - add r0, r5, r4 - bl OS_TryLockMutex -_020DEEAC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0x00, 0x00, 0x1A, 0xB4, 0x00, 0x9F, 0xE5, 0xB4, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5 - .byte 0xB0, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7 - .byte 0x06, 0x11, 0x80, 0xE7, 0x15, 0x00, 0x00, 0xEA, 0x90, 0x00, 0x9F, 0xE5, 0x90, 0x10, 0x9F, 0xE5 - .byte 0x04, 0x00, 0x90, 0xE5, 0x06, 0x11, 0x91, 0xE7, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1 - .byte 0x04, 0x00, 0x00, 0x1A, 0x7C, 0x10, 0x9F, 0xE5, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x80, 0xE2 - .byte 0x06, 0x01, 0x81, 0xE7, 0x09, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x85, 0xE0, 0x3F, 0xB4, 0xFF, 0xEB - .byte 0x58, 0x00, 0x9F, 0xE5, 0x58, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0x54, 0x00, 0x9F, 0xE5 - .byte 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7 - .byte 0x07, 0x00, 0xA0, 0xE1, 0xAA, 0xFF, 0xFF, 0xEB, 0x38, 0x10, 0x9F, 0xE5, 0x00, 0x70, 0xA0, 0xE1 - .byte 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x50, 0xE2, 0x06, 0x01, 0x81, 0xE7, 0x01, 0x00, 0x00, 0x1A - .byte 0x04, 0x00, 0x85, 0xE0, 0x11, 0xB4, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1, 0xF8, 0x80, 0xBD, 0xE8 -_020DEF60: .word 0x02106A58 -_020DEF64: .word 0x02106AA4 -_020DEF68: .word 0x02106AF0 -_020DEF6C: .word 0x021D70D0 -_020DEF70: - .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 - - arm_func_start _fseek -_fseek: ; 0x020DEF7C - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r5,lr} - mov r5, r0 - ldr r1, [r5, #0x4] - mov r4, r2 - mov r1, r1, lsl #0x16 - mov r1, r1, lsr #0x1d - and r1, r1, #0xff - cmp r1, #0x1 - ldreqb r1, [r5, #0xd] - cmpeq r1, #0x0 - beq _020DEFC8 - ldr r0, _020DF160 ; =0x021D74A8 - mov r1, #0x28 - str r1, [r0, #0x0] - sub r0, r1, #0x29 - ldmia sp!, {r3-r5,lr} - add sp, sp, #0x10 - bx lr -_020DEFC8: - ldr r1, [r5, #0x8] - mov r1, r1, lsl #0x1d - mov r1, r1, lsr #0x1d - cmp r1, #0x1 - bne _020DF018 - mov r1, #0x0 - bl __flush_buffer -_020DEFE4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3 - .byte 0x0D, 0x00, 0xC5, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x60, 0x01, 0x9F, 0xE5, 0x28, 0x10, 0xA0, 0xE3 - .byte 0x28, 0x20, 0x85, 0xE5, 0x00, 0x10, 0x80, 0xE5, 0x29, 0x00, 0x41, 0xE2, 0x38, 0x40, 0xBD, 0xE8 - .byte 0x10, 0xD0, 0x8D, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1 -_020DF018: - cmp r4, #0x1 - bne _020DF038 - mov r0, r5 - mov r4, #0x0 - bl _ftell - ldr r1, [sp, #0x14] - add r0, r1, r0 - str r0, [sp, #0x14] -_020DF038: - cmp r4, #0x2 - beq _020DF0CC - ldr r0, [r5, #0x4] - mov r0, r0, lsl #0x1b - mov r0, r0, lsr #0x1d - cmp r0, #0x3 - beq _020DF0CC - ldr r0, [r5, #0x8] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - sub r0, r0, #0x2 - cmp r0, #0x1 - bhi _020DF0CC - ldr r2, [sp, #0x14] - ldr r0, [r5, #0x18] - cmp r2, r0 - bhs _020DF088 - ldr r0, [r5, #0x34] - cmp r2, r0 - bhs _020DF098 -_020DF088: - ldr r0, [r5, #0x8] - bic r0, r0, #0x7 - str r0, [r5, #0x8] - b _020DF0D8 -_020DF098: - ldr r1, [r5, #0x1c] - sub r0, r2, r0 - add r0, r1, r0 - str r0, [r5, #0x24] - ldr r1, [r5, #0x18] - ldr r0, [sp, #0x14] - sub r0, r1, r0 - str r0, [r5, #0x28] - ldr r0, [r5, #0x8] - bic r0, r0, #0x7 - orr r0, r0, #0x2 - str r0, [r5, #0x8] - b _020DF0D8 -_020DF0CC: - ldr r0, [r5, #0x8] - bic r0, r0, #0x7 - str r0, [r5, #0x8] -_020DF0D8: - ldr r0, [r5, #0x8] - mov r0, r0, lsl #0x1d - movs r0, r0, lsr #0x1d - bne _020DF150 - ldr r12, [r5, #0x38] - cmp r12, #0x0 - beq _020DF13C - ldr r0, [r5, #0x0] - ldr r3, [r5, #0x48] - add r1, sp, #0x14 - mov r2, r4 - blx r12 - cmp r0, #0x0 - beq _020DF13C - mov r0, #0x1 - strb r0, [r5, #0xd] - mov r2, #0x0 - ldr r0, _020DF160 ; =0x021D74A8 - mov r1, #0x28 - str r2, [r5, #0x28] - str r1, [r0, #0x0] - sub r0, r1, #0x29 - ldmia sp!, {r3-r5,lr} - add sp, sp, #0x10 - bx lr -_020DF13C: - mov r1, #0x0 - strb r1, [r5, #0xc] - ldr r0, [sp, #0x14] - str r0, [r5, #0x18] - str r1, [r5, #0x28] -_020DF150: - mov r0, #0x0 - ldmia sp!, {r3-r5,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020DF160: .word 0x021D74A8 - - arm_func_start fseek -fseek: - stmdb sp!, {r3-r9,lr} - ldr r3, _020DF274 ; =0x02106A58 - mov r9, r0 - cmp r9, r3 - mov r8, r1 - mov r7, r2 - moveq r6, #0x2 - beq _020DF1A4 - ldr r0, _020DF278 ; =0x02106AA4 - cmp r9, r0 - moveq r6, #0x3 - beq _020DF1A4 - ldr r0, _020DF27C ; =0x02106AF0 - cmp r9, r0 - moveq r6, #0x4 - movne r6, #0x5 -_020DF1A4: - mov r0, #0x18 - mul r4, r6, r0 - ldr r5, _020DF280 ; =0x021D70D0 - add r0, r5, r4 - bl OS_TryLockMutex -_020DF1B8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A - .byte 0xBC, 0x00, 0x9F, 0xE5, 0xBC, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0xB8, 0x00, 0x9F, 0xE5 - .byte 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7 - .byte 0x15, 0x00, 0x00, 0xEA, 0x98, 0x00, 0x9F, 0xE5, 0x98, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5 - .byte 0x06, 0x11, 0x91, 0xE7, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A - .byte 0x84, 0x10, 0x9F, 0xE5, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x80, 0xE2, 0x06, 0x01, 0x81, 0xE7 - .byte 0x09, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x85, 0xE0, 0x7C, 0xB3, 0xFF, 0xEB, 0x60, 0x00, 0x9F, 0xE5 - .byte 0x60, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0x5C, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x91, 0xE5 - .byte 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7, 0x09, 0x00, 0xA0, 0xE1 - .byte 0x08, 0x10, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0x4B, 0xFF, 0xFF, 0xEB, 0x38, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x70, 0xA0, 0xE1, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x50, 0xE2, 0x06, 0x01, 0x81, 0xE7 - .byte 0x01, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x85, 0xE0, 0x4C, 0xB3, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1 - .byte 0xF8, 0x83, 0xBD, 0xE8 -_020DF274: .word 0x02106A58 -_020DF278: .word 0x02106AA4 -_020DF27C: .word 0x02106AF0 -_020DF280: .word 0x021D70D0 -_020DF284: - .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 - - arm_func_start rewind -rewind: ; 0x020DF290 - stmdb sp!, {r4,lr} - mov r1, #0x0 - mov r4, r0 - mov r2, r1 - strb r1, [r4, #0xd] - bl fseek -_020DF2A8: - .byte 0x00, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC4, 0xE5 - .byte 0x10, 0x80, 0xBD, 0xE8 - - arm_func_start mbtowc -mbtowc: - stmdb sp!, {r3,lr} - ldr r3, _020DF2CC ; =0x02106C98 - ldr r3, [r3, #0x8] - ldr r3, [r3, #0x0] - blx r3 - ldmia sp!, {r3,pc} - .balign 4 -_020DF2CC: .word 0x02106C98 - - arm_func_start __mbtowc_noconv -__mbtowc_noconv: ; 0x020DF2D0 - cmp r1, #0x0 - moveq r0, #0x0 - bxeq lr - cmp r2, #0x0 - mvneq r0, #0x0 - bxeq lr - cmp r0, #0x0 - ldrneb r2, [r1, #0x0] - strneh r2, [r0, #0x0] - ldrsb r0, [r1, #0x0] - cmp r0, #0x0 - moveq r0, #0x0 - movne r0, #0x1 - bx lr - - arm_func_start __wctomb_noconv -__wctomb_noconv: ; 0x020DF308 - cmp r0, #0x0 - moveq r0, #0x0 - strneb r1, [r0, #0x0] - movne r0, #0x1 - bx lr - - arm_func_start wctomb -wctomb: ; 0x020DF31C - stmdb sp!, {r3,lr} - ldr r2, _020DF334 ; =0x02106C98 - ldr r2, [r2, #0x8] - ldr r2, [r2, #0x4] - blx r2 - ldmia sp!, {r3,pc} - .balign 4 -_020DF334: .word 0x02106C98 - - arm_func_start mbstowcs -mbstowcs: ; 0x020DF338 - stmdb sp!, {r4-r8,lr} - mov r7, r1 - mov r8, r0 - mov r0, r7 - mov r6, r2 - bl strlen - mov r5, r0 - cmp r8, #0x0 - mov r4, #0x0 - beq _020DF3B8 - cmp r6, #0x0 - bls _020DF3B8 - ldrsb r0, [r7, #0x0] - cmp r0, #0x0 - beq _020DF3A0 - mov r0, r8 - mov r1, r7 - mov r2, r5 - bl mbtowc -_020DF384: - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x80, 0x88, 0xE2, 0x00, 0x70, 0x87, 0xC0 - .byte 0x00, 0x50, 0x45, 0xC0, 0x04, 0x00, 0x00, 0xCA, 0x00, 0x00, 0xE0, 0xE3, 0xF0, 0x81, 0xBD, 0xE8 -_020DF3A0: - mov r0, #0x0 - strh r0, [r8, #0x0] - b _020DF3B8 -_020DF3AC: - .byte 0x01, 0x40, 0x84, 0xE2 - .byte 0x06, 0x00, 0x54, 0xE1, 0xEB, 0xFF, 0xFF, 0x3A -_020DF3B8: - mov r0, r4 - ldmia sp!, {r4-r8,pc} - - arm_func_start wcstombs -wcstombs: ; 0x020DF3C0 - stmdb sp!, {r3-r9,lr} - movs r4, r0 - mov r9, r1 - cmpne r9, #0x0 - mov r8, r2 - mov r7, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r3-r9,pc} -_020DF3E0: - .byte 0x00, 0x60, 0x8D, 0xE2, 0xB0, 0x10, 0xD9, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x00, 0x00, 0xA0, 0x03 - .byte 0x07, 0x00, 0xC4, 0x07, 0x0D, 0x00, 0x00, 0x0A, 0x06, 0x00, 0xA0, 0xE1, 0x02, 0x90, 0x89, 0xE2 - .byte 0xC5, 0xFF, 0xFF, 0xEB, 0x00, 0x50, 0xA0, 0xE1, 0x05, 0x00, 0x87, 0xE0, 0x08, 0x00, 0x50, 0xE1 - .byte 0x06, 0x00, 0x00, 0x8A, 0x06, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x07, 0x00, 0x84, 0xE0 - .byte 0xDA, 0x0E, 0x00, 0xEB, 0x05, 0x70, 0x87, 0xE0, 0x08, 0x00, 0x57, 0xE1, 0xEC, 0xFF, 0xFF, 0x9A - .byte 0x07, 0x00, 0xA0, 0xE1, 0xF8, 0x83, 0xBD, 0xE8 - - arm_func_start memcpy -memcpy: ; 0x020DF438 - mov r12, r0 - cmp r2, #0x0 - bxeq lr -_020DF444: - ldrsb r3, [r1], #0x1 - subs r2, r2, #0x1 - strb r3, [r12], #0x1 - bne _020DF444 - bx lr - - arm_func_start memmove -memmove: ; 0x020DF458 - cmp r1, r0 - blo _020DF480 - mov r12, r0 - cmp r2, #0x0 - bxeq lr -_020DF46C: - ldrsb r3, [r1], #0x1 - subs r2, r2, #0x1 - strb r3, [r12], #0x1 - bne _020DF46C - bx lr -_020DF480: - cmp r2, #0x0 - add r3, r1, r2 - add r12, r0, r2 - bxeq lr -_020DF490: - ldrsb r1, [r3, #-0x1]! - subs r2, r2, #0x1 - strb r1, [r12, #-0x1]! - bne _020DF490 - bx lr - - arm_func_start Call_FillMemWithValue -Call_FillMemWithValue: ; 0x020DF4A4 - stmdb sp!, {r4,lr} - mov r4, r0 - bl __fill_mem - mov r0, r4 - ldmia sp!, {r4,pc} - - arm_func_start memchr -memchr: ; 0x020DF4B8 - cmp r2, #0x0 - and r3, r1, #0xff - beq _020DF4DC -_020DF4C4: - ldrb r1, [r0], #0x1 - cmp r1, r3 - subeq r0, r0, #0x1 - bxeq lr - subs r2, r2, #0x1 - bne _020DF4C4 -_020DF4DC: - mov r0, #0x0 - bx lr - - arm_func_start __memrchr -__memrchr: ; 0x020DF4E4 - cmp r2, #0x0 - and r3, r1, #0xff - add r0, r0, r2 - beq _020DF508 -_020DF4F4: - ldrb r1, [r0, #-0x1]! - cmp r1, r3 - bxeq lr - subs r2, r2, #0x1 - bne _020DF4F4 -_020DF508: - mov r0, #0x0 - bx lr - - arm_func_start memcmp -memcmp: ; 0x020DF510 - cmp r2, #0x0 - beq _020DF548 -_020DF518: - ldrb r12, [r0], #0x1 - ldrb r3, [r1], #0x1 - cmp r12, r3 - beq _020DF540 - ldrb r2, [r0, #-0x1] - ldrb r0, [r1, #-0x1] - cmp r2, r0 - mvncc r0, #0x0 - movcs r0, #0x1 - bx lr -_020DF540: - subs r2, r2, #0x1 - bne _020DF518 -_020DF548: - mov r0, #0x0 - bx lr - - arm_func_start __fill_mem -__fill_mem: ; 0x020DF550 - cmp r2, #0x20 - and r3, r1, #0xff - blo _020DF5E4 - rsb r1, r0, #0x0 - ands r12, r1, #0x3 - beq _020DF57C - sub r2, r2, r12 - and r1, r3, #0xff -_020DF570: - strb r1, [r0], #0x1 - subs r12, r12, #0x1 - bne _020DF570 -_020DF57C: - cmp r3, #0x0 - beq _020DF594 - mov r1, r3, lsl #0x10 - orr r1, r1, r3, lsl #0x18 - orr r1, r1, r3, lsl #0x8 - orr r3, r3, r1 -_020DF594: - movs r1, r2, lsr #0x5 - beq _020DF5C8 -_020DF59C: - str r3, [r0, #0x0] - str r3, [r0, #0x4] - str r3, [r0, #0x8] - str r3, [r0, #0xc] - str r3, [r0, #0x10] - str r3, [r0, #0x14] - str r3, [r0, #0x18] - str r3, [r0, #0x1c] - add r0, r0, #0x20 - subs r1, r1, #0x1 - bne _020DF59C -_020DF5C8: - and r1, r2, #0x1f - movs r1, r1, lsr #0x2 - beq _020DF5E0 -_020DF5D4: - str r3, [r0], #0x4 - subs r1, r1, #0x1 - bne _020DF5D4 -_020DF5E0: - and r2, r2, #0x3 -_020DF5E4: - cmp r2, #0x0 - bxeq lr - and r1, r3, #0xff -_020DF5F0: - strb r1, [r0], #0x1 - subs r2, r2, #0x1 - bne _020DF5F0 - bx lr - - arm_func_start parse_format_printf -parse_format_printf: ; 0x020DF600 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x10 - ldrsb r3, [r0, #0x1] - mov r4, #0x0 - mov r5, #0x1 - mov lr, r2 - strb r5, [sp, #0x0] - strb r4, [sp, #0x1] - strb r4, [sp, #0x2] - strb r4, [sp, #0x3] - strb r4, [sp, #0x4] - str r4, [sp, #0x8] - str r4, [sp, #0xc] - cmp r3, #0x25 - add r12, r0, #0x1 - bne _020DF65C - add r0, sp, #0x0 - strb r3, [sp, #0x5] - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add sp, sp, #0x10 - add r0, r12, #0x1 - ldmia sp!, {r4-r8,pc} -_020DF65C: - mov r2, #0x2 - mov r0, r4 - mov r5, r2 - mov r6, r4 - mov r7, #0x1 -_020DF670: - mov r8, r7 - cmp r3, #0x2b - bgt _020DF6A0 - bge _020DF6C8 - cmp r3, #0x23 - bgt _020DF6F8 - cmp r3, #0x20 - blt _020DF6F8 - beq _020DF6D0 - cmp r3, #0x23 - beq _020DF6E0 - b _020DF6F8 -_020DF6A0: - cmp r3, #0x30 - bgt _020DF6F8 - cmp r3, #0x2d - blt _020DF6F8 - beq _020DF6C0 - cmp r3, #0x30 - beq _020DF6E8 - b _020DF6F8 -_020DF6C0: - strb r6, [sp, #0x0] - b _020DF6FC -_020DF6C8: - strb r7, [sp, #0x1] - b _020DF6FC -_020DF6D0: - ldrb r4, [sp, #0x1] - cmp r4, #0x1 - strneb r5, [sp, #0x1] - b _020DF6FC -_020DF6E0: - strb r7, [sp, #0x3] - b _020DF6FC -_020DF6E8: - ldrb r4, [sp, #0x0] - cmp r4, #0x0 - strneb r2, [sp, #0x0] - b _020DF6FC -_020DF6F8: - mov r8, r0 -_020DF6FC: - cmp r8, #0x0 - ldrnesb r3, [r12, #0x1]! - bne _020DF670 - cmp r3, #0x2a - bne _020DF744 - ldr r0, [r1, #0x0] - add r0, r0, #0x4 - str r0, [r1, #0x0] - ldr r0, [r0, #-0x4] - str r0, [sp, #0x8] - cmp r0, #0x0 - bge _020DF73C - rsb r0, r0, #0x0 - mov r2, #0x0 - strb r2, [sp, #0x0] - str r0, [sp, #0x8] -_020DF73C: - ldrsb r3, [r12, #0x1]! - b _020DF794 -_020DF744: - ldr r4, _020DFB88 ; =0x0210430C - mov r5, #0x0 - mov r0, #0xa - b _020DF768 -_020DF754: - ldr r2, [sp, #0x8] - sub r3, r3, #0x30 - mla r6, r2, r0, r3 - ldrsb r3, [r12, #0x1]! - str r6, [sp, #0x8] -_020DF768: - cmp r3, #0x0 - blt _020DF778 - cmp r3, #0x80 - blt _020DF780 -_020DF778: - mov r2, r5 - b _020DF78C -_020DF780: - mov r2, r3, lsl #0x1 - ldrh r2, [r4, r2] - and r2, r2, #0x8 -_020DF78C: - cmp r2, #0x0 - bne _020DF754 -_020DF794: - ldr r2, [sp, #0x8] - ldr r0, _020DFB8C ; =0x000001FD - cmp r2, r0 - ble _020DF7C4 - mov r1, #0xff - add r0, sp, #0x0 - strb r1, [sp, #0x5] - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add sp, sp, #0x10 - add r0, r12, #0x1 - ldmia sp!, {r4-r8,pc} -_020DF7C4: - cmp r3, #0x2e - bne _020DF858 - ldrsb r3, [r12, #0x1]! - mov r0, #0x1 - strb r0, [sp, #0x2] - cmp r3, #0x2a - bne _020DF808 - ldr r0, [r1, #0x0] - add r0, r0, #0x4 - str r0, [r1, #0x0] - ldr r0, [r0, #-0x4] - ldrsb r3, [r12, #0x1]! - str r0, [sp, #0xc] - cmp r0, #0x0 - movlt r0, #0x0 - strltb r0, [sp, #0x2] - b _020DF858 -_020DF808: - ldr r2, _020DFB88 ; =0x0210430C - mov r4, #0x0 - mov r0, #0xa - b _020DF82C -_020DF818: - ldr r1, [sp, #0xc] - sub r3, r3, #0x30 - mla r5, r1, r0, r3 - ldrsb r3, [r12, #0x1]! - str r5, [sp, #0xc] -_020DF82C: - cmp r3, #0x0 - blt _020DF83C - cmp r3, #0x80 - blt _020DF844 -_020DF83C: - mov r1, r4 - b _020DF850 -_020DF844: - mov r1, r3, lsl #0x1 - ldrh r1, [r2, r1] - and r1, r1, #0x8 -_020DF850: - cmp r1, #0x0 - bne _020DF818 -_020DF858: - cmp r3, #0x6c - mov r0, #0x1 - bgt _020DF890 - cmp r3, #0x68 - blt _020DF884 - beq _020DF8AC - cmp r3, #0x6a - beq _020DF8F8 - cmp r3, #0x6c - beq _020DF8C8 - b _020DF91C -_020DF884: - cmp r3, #0x4c - beq _020DF8EC - b _020DF91C -_020DF890: - cmp r3, #0x74 - bgt _020DF8A0 - beq _020DF904 - b _020DF91C -_020DF8A0: - cmp r3, #0x7a - beq _020DF910 - b _020DF91C -_020DF8AC: - ldrsb r1, [r12, #0x1] - mov r2, #0x2 - strb r2, [sp, #0x4] - cmp r1, #0x68 - streqb r0, [sp, #0x4] - ldreqsb r3, [r12, #0x1]! - b _020DF920 -_020DF8C8: - ldrsb r1, [r12, #0x1] - mov r2, #0x3 - strb r2, [sp, #0x4] - cmp r1, #0x6c - bne _020DF920 - mov r1, #0x4 - strb r1, [sp, #0x4] - ldrsb r3, [r12, #0x1]! - b _020DF920 -_020DF8EC: - mov r1, #0x9 - strb r1, [sp, #0x4] - b _020DF920 -_020DF8F8: - mov r1, #0x6 - strb r1, [sp, #0x4] - b _020DF920 -_020DF904: - mov r1, #0x8 - strb r1, [sp, #0x4] - b _020DF920 -_020DF910: - mov r1, #0x7 - strb r1, [sp, #0x4] - b _020DF920 -_020DF91C: - mov r0, #0x0 -_020DF920: - cmp r0, #0x0 - ldrnesb r3, [r12, #0x1]! - strb r3, [sp, #0x5] - cmp r3, #0x61 - bgt _020DF974 - bge _020DFA5C - cmp r3, #0x47 - bgt _020DF968 - subs r0, r3, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020DFB68 -_020DF94C: - .byte 0x42, 0x00, 0x00, 0xEA - .byte 0x84, 0x00, 0x00, 0xEA, 0x83, 0x00, 0x00, 0xEA, 0x82, 0x00, 0x00, 0xEA, 0x50, 0x00, 0x00, 0xEA - .byte 0x2F, 0x00, 0x00, 0xEA, 0x4A, 0x00, 0x00, 0xEA -_020DF968: - cmp r3, #0x58 - beq _020DF9E8 - b _020DFB68 -_020DF974: - cmp r3, #0x63 - bgt _020DF984 - beq _020DFB04 - b _020DFB68 -_020DF984: - sub r0, r3, #0x64 - cmp r0, #0x14 - addls pc, pc, r0, lsl #0x2 - b _020DFB68 -_020DF994: - .byte 0x13, 0x00, 0x00, 0xEA, 0x41, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x00, 0xEA - .byte 0x3B, 0x00, 0x00, 0xEA, 0x6F, 0x00, 0x00, 0xEA, 0x0E, 0x00, 0x00, 0xEA, 0x6D, 0x00, 0x00, 0xEA - .byte 0x6C, 0x00, 0x00, 0xEA, 0x6B, 0x00, 0x00, 0xEA, 0x6A, 0x00, 0x00, 0xEA, 0x64, 0x00, 0x00, 0xEA - .byte 0x08, 0x00, 0x00, 0xEA, 0x45, 0x00, 0x00, 0xEA, 0x66, 0x00, 0x00, 0xEA, 0x65, 0x00, 0x00, 0xEA - .byte 0x56, 0x00, 0x00, 0xEA, 0x63, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA, 0x61, 0x00, 0x00, 0xEA - .byte 0x60, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA -_020DF9E8: - ldrb r0, [sp, #0x4] - cmp r0, #0x9 - moveq r0, #0xff - streqb r0, [sp, #0x5] - beq _020DFB70 - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0x1 - streq r0, [sp, #0xc] - beq _020DFB70 - ldrb r0, [sp, #0x0] - cmp r0, #0x2 - moveq r0, #0x1 - streqb r0, [sp, #0x0] - b _020DFB70 -_020DFA24: - .byte 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13 - .byte 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13, 0xFF, 0x00, 0xA0, 0x03 - .byte 0x05, 0x00, 0xCD, 0x05, 0x49, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x44, 0x00, 0x00, 0xEA -_020DFA5C: - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0xd - streq r0, [sp, #0xc] - ldrb r0, [sp, #0x4] - cmp r0, #0x2 - cmpne r0, #0x6 - cmpne r0, #0x7 - cmpne r0, #0x8 - cmpne r0, #0x4 - cmpne r0, #0x1 - moveq r0, #0xff - streqb r0, [sp, #0x5] - b _020DFB70 -_020DFA94: - .byte 0x0C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 - .byte 0x0C, 0x00, 0x8D, 0x05, 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13 - .byte 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13, 0x01, 0x00, 0x50, 0x13 - .byte 0xFF, 0x00, 0xA0, 0x03, 0x05, 0x00, 0xCD, 0x05, 0x28, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xDD, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x23, 0x00, 0x00, 0xEA - .byte 0x78, 0x30, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3, 0x03, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE3 - .byte 0x05, 0x30, 0xCD, 0xE5, 0x03, 0x20, 0xCD, 0xE5, 0x04, 0x10, 0xCD, 0xE5, 0x0C, 0x00, 0x8D, 0xE5 - .byte 0x1A, 0x00, 0x00, 0xEA -_020DFB04: - ldrb r1, [sp, #0x4] - cmp r1, #0x3 - moveq r0, #0x5 - streqb r0, [sp, #0x4] - beq _020DFB70 - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - cmpeq r1, #0x0 - movne r0, #0xff - strneb r0, [sp, #0x5] - b _020DFB70 -_020DFB30: - .byte 0x04, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x03, 0x04, 0x00, 0xCD, 0x05 - .byte 0x0A, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x13, 0x05, 0x00, 0xCD, 0x15 - .byte 0x06, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xDD, 0xE5, 0x09, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x03 - .byte 0x05, 0x00, 0xCD, 0x05, 0x01, 0x00, 0x00, 0xEA -_020DFB68: - mov r0, #0xff - strb r0, [sp, #0x5] -_020DFB70: - add r0, sp, #0x0 - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add r0, r12, #0x1 - add sp, sp, #0x10 - ldmia sp!, {r4-r8,pc} - .balign 4 -_020DFB88: .word 0x0210430C -_020DFB8C: .word 0x000001FD - - arm_func_start long2str -long2str: ; 0x020DFB90 - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x10 - movs r10, r0 - mov r0, #0x0 - mov r5, r1 - str r0, [sp, #0xc] - ldr r7, [sp, #0x4c] - mov r6, r0 - strb r0, [r5, #-0x1]! - ldrb r0, [sp, #0x43] - str r1, [sp, #0x0] - ldrb r8, [sp, #0x45] - str r0, [sp, #0x4] - ldr r0, [sp, #0x48] - ldrb r11, [sp, #0x41] - str r0, [sp, #0x8] - cmpeq r7, #0x0 - bne _020DFC04 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _020DFBF0 - cmp r8, #0x6f - beq _020DFC04 -_020DFBF0: - add sp, sp, #0x10 - mov r0, r5 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020DFC04: - cmp r8, #0x69 - bgt _020DFC2C - bge _020DFC60 - cmp r8, #0x58 - bgt _020DFC20 - beq _020DFC8C - b _020DFC94 -_020DFC20: - cmp r8, #0x64 - beq _020DFC60 - b _020DFC94 -_020DFC2C: - cmp r8, #0x6f - bgt _020DFC40 - moveq r4, #0x8 - moveq r11, #0x0 - b _020DFC94 -_020DFC40: - cmp r8, #0x78 - bgt _020DFC94 - cmp r8, #0x75 - blt _020DFC94 - beq _020DFC80 - cmp r8, #0x78 - beq _020DFC8C - b _020DFC94 -_020DFC60: - cmp r10, #0x0 - mov r4, #0xa - bge _020DFC94 - mov r0, #0x1 - cmp r10, #0x80000000 - rsbne r10, r10, #0x0 - str r0, [sp, #0xc] - b _020DFC94 -_020DFC80: - mov r4, #0xa - mov r11, #0x0 - b _020DFC94 -_020DFC8C: - mov r4, #0x10 - mov r11, #0x0 -_020DFC94: - mov r0, r10 - mov r1, r4 - bl _u32_div_f - mov r9, r1 - mov r0, r10 - mov r1, r4 - bl _u32_div_f - cmp r9, #0xa - mov r10, r0 - addlt r9, r9, #0x30 - blt _020DFCCC - cmp r8, #0x78 - addeq r9, r9, #0x57 - addne r9, r9, #0x37 -_020DFCCC: - cmp r10, #0x0 - strb r9, [r5, #-0x1]! - add r6, r6, #0x1 - bne _020DFC94 - cmp r4, #0x8 - bne _020DFD00 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrnesb r0, [r5, #0x0] - cmpne r0, #0x30 - movne r0, #0x30 - strneb r0, [r5, #-0x1]! - addne r6, r6, #0x1 -_020DFD00: - ldrb r0, [sp, #0x40] - cmp r0, #0x2 - bne _020DFD34 - ldr r0, [sp, #0xc] - ldr r7, [sp, #0x8] - cmp r0, #0x0 - cmpeq r11, #0x0 - subne r7, r7, #0x1 - cmp r4, #0x10 - bne _020DFD34 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - subne r7, r7, #0x2 -_020DFD34: - ldr r0, [sp, #0x0] - sub r1, r0, r5 - ldr r0, _020DFDD8 ; =0x000001FD - add r1, r7, r1 - cmp r1, r0 - addgt sp, sp, #0x10 - movgt r0, #0x0 - ldmgtia sp!, {r3-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - cmp r6, r7 - bge _020DFD78 - mov r0, #0x30 -_020DFD68: - add r6, r6, #0x1 - cmp r6, r7 - strb r0, [r5, #-0x1]! - blt _020DFD68 -_020DFD78: - cmp r4, #0x10 - bne _020DFD94 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x30 - strneb r8, [r5, #-0x1] - strneb r0, [r5, #-0x2]! -_020DFD94: - ldr r0, [sp, #0xc] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r5, #-0x1]! - bne _020DFDC4 - cmp r11, #0x1 - moveq r0, #0x2b - streqb r0, [r5, #-0x1]! - beq _020DFDC4 - cmp r11, #0x2 - moveq r0, #0x20 - streqb r0, [r5, #-0x1]! -_020DFDC4: - mov r0, r5 - add sp, sp, #0x10 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020DFDD8: .word 0x000001FD - - arm_func_start longlong2str -longlong2str: ; 0x020DFDDC - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x18 - mov r9, r1 - mov r1, #0x0 - mov r10, r0 - mov r6, r2 - mov r0, r1 - strb r0, [r6, #-0x1]! - ldr r0, [sp, #0x58] - cmp r9, #0x0 - str r0, [sp, #0x10] - ldrb r0, [sp, #0x4f] - cmpeq r10, #0x0 - str r2, [sp, #0x0] - str r0, [sp, #0x4] - ldr r0, [sp, #0x54] - str r1, [sp, #0x14] - str r0, [sp, #0x8] - ldrb r0, [sp, #0x4d] - mov r7, r1 - ldrb r8, [sp, #0x51] - str r0, [sp, #0xc] - ldreq r0, [sp, #0x10] - cmpeq r0, #0x0 - bne _020DFE6C - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _020DFE58 - cmp r8, #0x6f - beq _020DFE6C -_020DFE58: - add sp, sp, #0x18 - mov r0, r6 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020DFE6C: - cmp r8, #0x69 - bgt _020DFE94 - bge _020DFEC4 - cmp r8, #0x58 - bgt _020DFE88 - beq _020DFF18 - b _020DFF24 -_020DFE88: - cmp r8, #0x64 - beq _020DFEC4 - b _020DFF24 -_020DFE94: - cmp r8, #0x6f - bgt _020DFEA4 - beq _020DFEF8 - b _020DFF24 -_020DFEA4: - cmp r8, #0x78 - bgt _020DFF24 - cmp r8, #0x75 - blt _020DFF24 - beq _020DFF08 - cmp r8, #0x78 - beq _020DFF18 - b _020DFF24 -_020DFEC4: - subs r0, r10, #0x0 - sbcs r0, r9, #0x0 - mov r11, #0xa - mov r5, #0x0 - bge _020DFF24 - cmp r9, #0x80000000 - cmpeq r10, r5 - beq _020DFEEC - rsbs r10, r10, #0x0 - rsc r9, r9, #0x0 -_020DFEEC: - mov r0, #0x1 - str r0, [sp, #0x14] - b _020DFF24 -_020DFEF8: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0x8 - b _020DFF24 -_020DFF08: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0xa - b _020DFF24 -_020DFF18: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0x10 -_020DFF24: - mov r0, r10 - mov r1, r9 - mov r2, r11 - mov r3, r5 - bl _ull_mod - mov r4, r0 - mov r0, r10 - mov r1, r9 - mov r2, r11 - mov r3, r5 - bl _ll_udiv - mov r10, r0 - cmp r4, #0xa - mov r9, r1 - addlt r0, r4, #0x30 - blt _020DFF70 - cmp r8, #0x78 - addeq r0, r4, #0x57 - addne r0, r4, #0x37 -_020DFF70: - strb r0, [r6, #-0x1]! - mov r0, #0x0 - cmp r9, r0 - cmpeq r10, r0 - add r7, r7, #0x1 - bne _020DFF24 - cmp r5, #0x0 - cmpeq r11, #0x8 - bne _020DFFB0 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrnesb r0, [r6, #0x0] - cmpne r0, #0x30 - movne r0, #0x30 - strneb r0, [r6, #-0x1]! - addne r7, r7, #0x1 -_020DFFB0: - ldrb r0, [sp, #0x4c] - cmp r0, #0x2 - bne _020E0000 - ldr r0, [sp, #0x8] - str r0, [sp, #0x10] - ldr r0, [sp, #0x14] - cmp r0, #0x0 - ldreq r0, [sp, #0xc] - cmpeq r0, #0x0 - ldrne r0, [sp, #0x10] - subne r0, r0, #0x1 - strne r0, [sp, #0x10] - cmp r5, #0x0 - cmpeq r11, #0x10 - bne _020E0000 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrne r0, [sp, #0x10] - subne r0, r0, #0x2 - strne r0, [sp, #0x10] -_020E0000: - ldr r0, [sp, #0x0] - ldr r1, _020E00B8 ; =0x000001FD - sub r2, r0, r6 - ldr r0, [sp, #0x10] - add r0, r0, r2 - cmp r0, r1 - addgt sp, sp, #0x18 - movgt r0, #0x0 - ldmgtia sp!, {r3-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - ldr r0, [sp, #0x10] - cmp r7, r0 - bge _020E0050 - mov r1, #0x30 -_020E003C: - ldr r0, [sp, #0x10] - add r7, r7, #0x1 - cmp r7, r0 - strb r1, [r6, #-0x1]! - blt _020E003C -_020E0050: - cmp r5, #0x0 - cmpeq r11, #0x10 - bne _020E0070 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x30 - strneb r8, [r6, #-0x1] - strneb r0, [r6, #-0x2]! -_020E0070: - ldr r0, [sp, #0x14] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r6, #-0x1]! - bne _020E00A4 - ldr r0, [sp, #0xc] - cmp r0, #0x1 - moveq r0, #0x2b - streqb r0, [r6, #-0x1]! - beq _020E00A4 - cmp r0, #0x2 - moveq r0, #0x20 - streqb r0, [r6, #-0x1]! -_020E00A4: - mov r0, r6 - add sp, sp, #0x18 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E00B8: .word 0x000001FD - - arm_func_start double2hex -double2hex: ; 0x020E00BC - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r10,lr} - sub sp, sp, #0x44 - ldr r7, [sp, #0x80] - ldr r0, _020E056C ; =0x000001FD - mov r8, r2 - cmp r7, r0 - ldrb r6, [sp, #0x79] - ldrb r5, [sp, #0x77] - ldrb r4, [sp, #0x75] - ldr r1, [sp, #0x68] - ldr r2, [sp, #0x6c] - addgt sp, sp, #0x44 - movgt r0, #0x0 - ldmgtia sp!, {r3-r10,lr} - addgt sp, sp, #0x10 - bxgt lr - mov r10, #0x0 - mov r9, #0x20 - add r0, sp, #0x8 - add r3, sp, #0xc - strb r10, [sp, #0x8] - strh r9, [sp, #0xa] - bl __num2dec_internal2 - ldr r0, [sp, #0x68] - ldr r1, [sp, #0x6c] - bl fabs - mov r2, r0 - mov r0, r10 - mov r3, r1 - mov r1, r0 - bl _deq - bne _020E0188 - ldr r3, _020E0570 ; =0x02106DA0 - sub r0, r8, #0x6 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - add sp, sp, #0x44 - strb r2, [r8, #-0x6] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r2, [r3, #0x4] - ldrb r1, [r3, #0x5] - strb r2, [r0, #0x4] - strb r1, [r0, #0x5] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0188: - ldrb r0, [sp, #0x11] - cmp r0, #0x49 - bne _020E0298 - ldrsb r0, [sp, #0xc] - cmp r0, #0x0 - beq _020E0224 - cmp r6, #0x41 - sub r0, r8, #0x5 - bne _020E01E8 - ldr r3, _020E0574 ; =0x02106DA8 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E01E8: - ldr r3, _020E0578 ; =0x02106DB0 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0224: - cmp r6, #0x41 - sub r0, r8, #0x4 - bne _020E0264 - ldr r3, _020E057C ; =0x02106DB8 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0264: - ldr r3, _020E0580 ; =0x02106DBC - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0298: - cmp r0, #0x4e - bne _020E03A4 - ldrsb r0, [sp, #0xc] - cmp r0, #0x0 - beq _020E0330 - cmp r6, #0x41 - sub r0, r8, #0x5 - bne _020E02F4 - ldr r3, _020E0584 ; =0x02106DC0 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E02F4: - ldr r3, _020E0588 ; =0x02106DC8 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0330: - cmp r6, #0x41 - sub r0, r8, #0x4 - bne _020E0370 - ldr r3, _020E058C ; =0x02106DD0 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0370: - ldr r3, _020E0590 ; =0x02106DD4 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E03A4: - mov r3, r10 - mov r1, #0x1 - mov r0, #0x64 - add r9, sp, #0x68 - strb r1, [sp, #0x34] - strb r1, [sp, #0x35] - strb r3, [sp, #0x36] - strb r3, [sp, #0x37] - strb r3, [sp, #0x38] - str r3, [sp, #0x3c] - str r1, [sp, #0x40] - strb r0, [sp, #0x39] -_020E03D4: - rsb r1, r3, #0x7 - ldrsb r2, [r9, r3] - ldrsb r0, [r9, r1] - strb r0, [r9, r3] - add r3, r3, #0x1 - strb r2, [r9, r1] - cmp r3, #0x4 - blt _020E03D4 - ldrb r0, [sp, #0x69] - ldrb r1, [sp, #0x68] - ldr sb, _020E0594 ; =0x000007FF - mov r0, r0, lsl #0x11 - orr r1, r0, r1, lsl #0x19 - add r0, sp, #0x34 - and lr, r9, r1, lsr #0x15 - sub r12, sp, #0x8 - ldmia r0, {r0-r3} - stmia r12, {r0-r3} - rsb r0, r9, #0x400 - mov r1, r8 - add r0, lr, r0 - ldmia r12, {r2-r3} - bl long2str - cmp r6, #0x61 - moveq r1, #0x70 - movne r1, #0x50 - strb r1, [r0, #-0x1]! - mov r1, r7, lsl #0x2 - mov lr, r7 - cmp r7, #0x1 - add r8, r1, #0xb - add r12, sp, #0x68 - blt _020E04E4 - mov r9, #0x30 -_020E045C: - cmp r8, #0x40 - bge _020E04CC - ldrb r1, [r12, r8, asr #0x3] - and r2, r8, #0x7 - rsb r3, r2, #0x7 - mov r2, r1, asr r3 - sub r10, r8, #0x4 - bic r1, r8, #0x7 - bic r10, r10, #0x7 - cmp r1, r10 - add r10, r12, r8, asr #0x3 - and r1, r2, #0xff - beq _020E04A0 - ldrb r2, [r10, #-0x1] - mov r2, r2, lsl #0x8 - orr r1, r1, r2, asr r3 - and r1, r1, #0xff -_020E04A0: - and r1, r1, #0xf - cmp r1, #0xa - addcc r1, r1, #0x30 - andcc r1, r1, #0xff - blo _020E04D0 - cmp r6, #0x61 - addeq r1, r1, #0x57 - andeq r1, r1, #0xff - addne r1, r1, #0x37 - andne r1, r1, #0xff - b _020E04D0 -_020E04CC: - mov r1, r9 -_020E04D0: - sub lr, lr, #0x1 - cmp lr, #0x1 - strb r1, [r0, #-0x1]! - sub r8, r8, #0x4 - bge _020E045C -_020E04E4: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r1, #0x2e - strneb r1, [r0, #-0x1]! - mov r1, #0x31 - strb r1, [r0, #-0x1] - cmp r6, #0x61 - moveq r1, #0x78 - movne r1, #0x58 - strb r1, [r0, #-0x2]! - mov r1, #0x30 - strb r1, [r0, #-0x1]! - ldrsb r1, [sp, #0xc] - cmp r1, #0x0 - movne r1, #0x2d - strneb r1, [r0, #-0x1]! - addne sp, sp, #0x44 - ldmneia sp!, {r3-r10,lr} - addne sp, sp, #0x10 - bxne lr - cmp r4, #0x1 - moveq r1, #0x2b - streqb r1, [r0, #-0x1]! - addeq sp, sp, #0x44 - ldmeqia sp!, {r3-r10,lr} - addeq sp, sp, #0x10 - bxeq lr - cmp r4, #0x2 - moveq r1, #0x20 - streqb r1, [r0, #-0x1]! - add sp, sp, #0x44 - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E056C: .word 0x000001FD -_020E0570: .word 0x02106DA0 -_020E0574: .word 0x02106DA8 -_020E0578: .word 0x02106DB0 -_020E057C: .word 0x02106DB8 -_020E0580: .word 0x02106DBC -_020E0584: .word 0x02106DC0 -_020E0588: .word 0x02106DC8 -_020E058C: .word 0x02106DD0 -_020E0590: .word 0x02106DD4 -_020E0594: .word 0x000007FF - - arm_func_start round_decimal -round_decimal: ; 0x020E0598 - stmdb sp!, {r4,lr} - cmp r1, #0x0 - bge _020E05C0 - mov r1, #0x0 - strh r1, [r0, #0x2] - mov r1, #0x1 - strb r1, [r0, #0x4] - mov r1, #0x30 - strb r1, [r0, #0x5] - ldmia sp!, {r4,pc} -_020E05C0: - ldrb lr, [r0, #0x4] - cmp r1, lr - ldmgeia sp!, {r4,pc} -_020E05CC: - .byte 0x05, 0xC0, 0x80, 0xE2 - .byte 0x01, 0x20, 0x8C, 0xE0, 0x01, 0x20, 0x82, 0xE2, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2 - .byte 0x03, 0x3C, 0xA0, 0xE1, 0x43, 0x3C, 0xA0, 0xE1, 0x05, 0x00, 0x53, 0xE3, 0x0B, 0x00, 0x00, 0x1A - .byte 0x0E, 0xC0, 0x8C, 0xE0, 0x01, 0xC0, 0x4C, 0xE2, 0x02, 0x00, 0x5C, 0xE1, 0x02, 0x00, 0x00, 0x9A - .byte 0xD0, 0x30, 0xDC, 0xE1, 0x30, 0x00, 0x53, 0xE3, 0xF9, 0xFF, 0xFF, 0x0A, 0x02, 0x00, 0x5C, 0xE1 - .byte 0xD1, 0x30, 0x52, 0x01, 0x01, 0x40, 0x03, 0x02, 0x01, 0x40, 0xA0, 0x13, 0x01, 0x00, 0x00, 0xEA - .byte 0x01, 0x40, 0xA0, 0xC3, 0x00, 0x40, 0xA0, 0xD3, 0x00, 0x00, 0x51, 0xE3, 0x14, 0x00, 0x00, 0x0A - .byte 0x00, 0xC0, 0xA0, 0xE3, 0x01, 0xE0, 0xA0, 0xE3, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2 - .byte 0x04, 0x30, 0x83, 0xE0, 0x03, 0x3C, 0xA0, 0xE1, 0x43, 0x3C, 0xA0, 0xE1, 0x09, 0x00, 0x53, 0xE3 - .byte 0x0E, 0x40, 0xA0, 0xC1, 0x0C, 0x40, 0xA0, 0xD1, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0x53, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x41, 0xE2, 0x02, 0x00, 0x00, 0xEA - .byte 0x30, 0x30, 0x83, 0xE2, 0x00, 0x30, 0xC2, 0xE5, 0x01, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3 - .byte 0xEC, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x54, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0xF2, 0x30, 0xD0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x31, 0x10, 0xA0, 0xE3, 0x01, 0x30, 0x83, 0xE2, 0xB2, 0x30, 0xC0, 0xE1 - .byte 0x04, 0x20, 0xC0, 0xE5, 0x05, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x51, 0xE3 - .byte 0xBB, 0xFF, 0xFF, 0x0A, 0x04, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8 - - arm_func_start float2str -float2str: ; 0x020E06BC - stmdb sp!, {r0-r3} - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x2c - ldr r7, [sp, #0x68] - ldr r3, _020E0DF4 ; =0x000001FD - ldrb r6, [sp, #0x61] - ldrb r5, [sp, #0x5f] - ldrb r4, [sp, #0x5d] - cmp r7, r3 - mov r10, r0 - mov r8, r1 - mov r9, r2 - addgt sp, sp, #0x2c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - mov r12, #0x0 - mov r11, #0x20 - add r0, sp, #0x0 - add r3, sp, #0x4 - mov r1, r10 - mov r2, r8 - strb r12, [sp, #0x0] - strh r11, [sp, #0x2] - bl __num2dec_internal2 - ldrb r0, [sp, #0x8] - add r1, sp, #0x9 - add r0, r1, r0 - b _020E074C -_020E0734: - ldrb r2, [sp, #0x8] - ldrsh r1, [sp, #0x6] - sub r2, r2, #0x1 - add r1, r1, #0x1 - strb r2, [sp, #0x8] - strh r1, [sp, #0x6] -_020E074C: - ldrb r1, [sp, #0x8] - cmp r1, #0x1 - bls _020E0764 - ldrsb r1, [r0, #-0x1]! - cmp r1, #0x30 - beq _020E0734 -_020E0764: - ldrb r0, [sp, #0x9] - cmp r0, #0x30 - beq _020E0784 - cmp r0, #0x49 - beq _020E0790 - cmp r0, #0x4e - beq _020E08F0 - b _020E0A44 -_020E0784: - mov r0, #0x0 - strh r0, [sp, #0x6] - b _020E0A44 -_020E0790: - mov r2, #0x0 - mov r0, r10 - mov r1, r8 - mov r3, r2 - bl _dls - bhs _020E0854 - cmp r6, #0x0 - sub r0, r9, #0x5 - blt _020E07BC - cmp r6, #0x80 - blt _020E07C4 -_020E07BC: - mov r1, #0x0 - b _020E07D4 -_020E07C4: - ldr r1, _020E0DF8 ; =0x0210430C - mov r2, r6, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020E07D4: - cmp r1, #0x0 - beq _020E0818 - ldr r3, _020E0DFC ; =0x02106DA8 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0818: - ldr r3, _020E0E00 ; =0x02106DB0 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0854: - cmp r6, #0x0 - sub r0, r9, #0x4 - blt _020E0868 - cmp r6, #0x80 - blt _020E0870 -_020E0868: - mov r1, #0x0 - b _020E0880 -_020E0870: - ldr r1, _020E0DF8 ; =0x0210430C - mov r2, r6, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020E0880: - cmp r1, #0x0 - beq _020E08BC - ldr r3, _020E0E04 ; =0x02106DB8 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E08BC: - ldr r3, _020E0E08 ; =0x02106DBC - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E08F0: - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - beq _020E09A8 - cmp r6, #0x0 - sub r0, r9, #0x5 - blt _020E0910 - cmp r6, #0x80 - blt _020E0918 -_020E0910: - mov r1, #0x0 - b _020E0928 -_020E0918: - ldr r1, _020E0DF8 ; =0x0210430C - mov r2, r6, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020E0928: - cmp r1, #0x0 - beq _020E096C - ldr r3, _020E0E0C ; =0x02106DC0 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E096C: - ldr r3, _020E0E10 ; =0x02106DC8 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E09A8: - cmp r6, #0x0 - sub r0, r9, #0x4 - blt _020E09BC - cmp r6, #0x80 - blt _020E09C4 -_020E09BC: - mov r1, #0x0 - b _020E09D4 -_020E09C4: - ldr r1, _020E0DF8 ; =0x0210430C - mov r2, r6, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020E09D4: - cmp r1, #0x0 - beq _020E0A10 - ldr r3, _020E0E14 ; =0x02106DD0 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0A10: - ldr r3, _020E0E18 ; =0x02106DD4 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0A44: - ldrb r0, [sp, #0x8] - ldrsh r1, [sp, #0x6] - sub r8, r9, #0x1 - sub r0, r0, #0x1 - add r0, r1, r0 - strh r0, [sp, #0x6] - mov r0, #0x0 - strb r0, [r8, #0x0] - cmp r6, #0x65 - bgt _020E0A98 - bge _020E0B24 - cmp r6, #0x47 - bgt _020E0DE0 - cmp r6, #0x45 - blt _020E0DE0 - beq _020E0B24 - cmp r6, #0x46 - beq _020E0C6C - cmp r6, #0x47 - beq _020E0AB0 - b _020E0DE0 -_020E0A98: - cmp r6, #0x66 - bgt _020E0AA8 - beq _020E0C6C - b _020E0DE0 -_020E0AA8: - cmp r6, #0x67 - bne _020E0DE0 -_020E0AB0: - ldrb r0, [sp, #0x8] - cmp r0, r7 - ble _020E0AC8 - add r0, sp, #0x4 - mov r1, r7 - bl round_decimal -_020E0AC8: - ldrsh r2, [sp, #0x6] - mvn r0, #0x3 - cmp r2, r0 - blt _020E0AE0 - cmp r2, r7 - blt _020E0B00 -_020E0AE0: - cmp r5, #0x0 - ldreqb r0, [sp, #0x8] - subne r7, r7, #0x1 - subeq r7, r0, #0x1 - cmp r6, #0x67 - moveq r6, #0x65 - movne r6, #0x45 - b _020E0B24 -_020E0B00: - cmp r5, #0x0 - addne r0, r2, #0x1 - subne r7, r7, r0 - bne _020E0C6C - ldrb r1, [sp, #0x8] - add r0, r2, #0x1 - subs r7, r1, r0 - movmi r7, #0x0 - b _020E0C6C -_020E0B24: - ldrb r0, [sp, #0x8] - add r1, r7, #0x1 - cmp r0, r1 - ble _020E0B3C - add r0, sp, #0x4 - bl round_decimal -_020E0B3C: - ldrsh lr, [sp, #0x6] - mov r11, #0x2b - mov r10, #0x0 - cmp lr, #0x0 - rsblt lr, lr, #0x0 - movlt r11, #0x2d - ldr r3, _020E0E1C ; =0x66666667 - mov r0, #0xa - b _020E0B90 -_020E0B60: - mov r1, lr, lsr #0x1f - smull r2, r12, r3, lr - add r12, r1, r12, asr #0x2 - smull r1, r2, r0, r12 - sub r12, lr, r1 - add r1, r12, #0x30 - strb r1, [r8, #-0x1]! - mov r2, lr - smull r1, lr, r3, r2 - mov r1, r2, lsr #0x1f - add lr, r1, lr, asr #0x2 - add r10, r10, #0x1 -_020E0B90: - cmp lr, #0x0 - bne _020E0B60 - cmp r10, #0x2 - blt _020E0B60 - strb r11, [r8, #-0x1] - strb r6, [r8, #-0x2]! - sub r1, r9, r8 - ldr r0, _020E0DF4 ; =0x000001FD - add r1, r7, r1 - cmp r1, r0 - addgt sp, sp, #0x2c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - ldrb r1, [sp, #0x8] - add r0, r7, #0x1 - cmp r1, r0 - bge _020E0BFC - add r0, r7, #0x2 - sub r0, r0, r1 - subs r1, r0, #0x1 - beq _020E0BFC - mov r0, #0x30 -_020E0BF0: - strb r0, [r8, #-0x1]! - subs r1, r1, #0x1 - bne _020E0BF0 -_020E0BFC: - ldrb r1, [sp, #0x8] - add r0, sp, #0x9 - add r2, r0, r1 - subs r1, r1, #0x1 - beq _020E0C20 -_020E0C10: - ldrsb r0, [r2, #-0x1]! - subs r1, r1, #0x1 - strb r0, [r8, #-0x1]! - bne _020E0C10 -_020E0C20: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r0, #0x2e - strneb r0, [r8, #-0x1]! - ldrb r0, [sp, #0x9] - strb r0, [r8, #-0x1]! - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r8, #-0x1]! - bne _020E0DE0 - cmp r4, #0x1 - moveq r0, #0x2b - streqb r0, [r8, #-0x1]! - beq _020E0DE0 - cmp r4, #0x2 - moveq r0, #0x20 - streqb r0, [r8, #-0x1]! - b _020E0DE0 -_020E0C6C: - ldrsh r3, [sp, #0x6] - ldrb r2, [sp, #0x8] - sub r0, r2, r3 - subs r1, r0, #0x1 - movmi r1, #0x0 - cmp r1, r7 - ble _020E0CAC - sub r1, r1, r7 - add r0, sp, #0x4 - sub r1, r2, r1 - bl round_decimal - ldrsh r3, [sp, #0x6] - ldrb r2, [sp, #0x8] - sub r0, r2, r3 - subs r1, r0, #0x1 - movmi r1, #0x0 -_020E0CAC: - adds r0, r3, #0x1 - movmi r0, #0x0 - ldr r3, _020E0DF4 ; =0x000001FD - add r6, r0, r1 - cmp r6, r3 - addgt sp, sp, #0x2c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - add r3, sp, #0x9 - sub r6, r7, r1 - cmp r6, #0x0 - add r2, r3, r2 - mov r9, #0x0 - ble _020E0D00 - mov r3, #0x30 -_020E0CF0: - add r9, r9, #0x1 - cmp r9, r6 - strb r3, [r8, #-0x1]! - blt _020E0CF0 -_020E0D00: - mov r6, #0x0 - b _020E0D14 -_020E0D08: - ldrsb r3, [r2, #-0x1]! - add r6, r6, #0x1 - strb r3, [r8, #-0x1]! -_020E0D14: - cmp r6, r1 - ldrltb r3, [sp, #0x8] - cmplt r6, r3 - blt _020E0D08 - cmp r6, r1 - bge _020E0D40 - mov r3, #0x30 -_020E0D30: - add r6, r6, #0x1 - cmp r6, r1 - strb r3, [r8, #-0x1]! - blt _020E0D30 -_020E0D40: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r1, #0x2e - strneb r1, [r8, #-0x1]! - cmp r0, #0x0 - beq _020E0DA8 - ldrb r1, [sp, #0x8] - mov r5, #0x0 - sub r1, r0, r1 - cmp r1, #0x0 - ble _020E0D88 - mov r3, #0x30 -_020E0D70: - strb r3, [r8, #-0x1]! - ldrb r1, [sp, #0x8] - add r5, r5, #0x1 - sub r1, r0, r1 - cmp r5, r1 - blt _020E0D70 -_020E0D88: - cmp r5, r0 - bge _020E0DB0 -_020E0D90: - ldrsb r1, [r2, #-0x1]! - add r5, r5, #0x1 - cmp r5, r0 - strb r1, [r8, #-0x1]! - blt _020E0D90 - b _020E0DB0 -_020E0DA8: - mov r0, #0x30 - strb r0, [r8, #-0x1]! -_020E0DB0: - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r8, #-0x1]! - bne _020E0DE0 - cmp r4, #0x1 - moveq r0, #0x2b - streqb r0, [r8, #-0x1]! - beq _020E0DE0 - cmp r4, #0x2 - moveq r0, #0x20 - streqb r0, [r8, #-0x1]! -_020E0DE0: - mov r0, r8 - add sp, sp, #0x2c - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E0DF4: .word 0x000001FD -_020E0DF8: .word 0x0210430C -_020E0DFC: .word 0x02106DA8 -_020E0E00: .word 0x02106DB0 -_020E0E04: .word 0x02106DB8 -_020E0E08: .word 0x02106DBC -_020E0E0C: .word 0x02106DC0 -_020E0E10: .word 0x02106DC8 -_020E0E14: .word 0x02106DD0 -_020E0E18: .word 0x02106DD4 -_020E0E1C: .word 0x66666667 -__pformatter: - stmdb sp!, {r0-r3} - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x22c - mov r3, #0x20 - mov r11, r2 - strb r3, [sp, #0x19] - ldrsb r2, [r11, #0x0] - mov r9, r0 - mov r8, r1 - cmp r2, #0x0 - mov r10, #0x0 - beq _020E1628 -_020E0E50: - mov r0, r11 - mov r1, #0x25 - bl strchr - str r0, [sp, #0xc] - cmp r0, #0x0 - bne _020E0EA4 - mov r0, r11 - bl strlen - movs r2, r0 - add r10, r10, r2 - beq _020E1628 - mov r0, r8 - mov r1, r11 - blx r9 - cmp r0, #0x0 - bne _020E1628 - add sp, sp, #0x22c - mvn r0, #0x0 - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0EA4: - subs r2, r0, r11 - add r10, r10, r2 - beq _020E0ED4 - mov r0, r8 - mov r1, r11 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E0ED4: - ldr r0, [sp, #0xc] - add r1, sp, #0x25c - add r2, sp, #0x1c - bl parse_format_printf - ldrb r1, [sp, #0x21] - mov r11, r0 - cmp r1, #0x61 - bgt _020E0F40 - bge _020E12A4 - cmp r1, #0x47 - bgt _020E0F34 - subs r0, r1, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020E0F28 -_020E0F0C: - .byte 0xE4, 0x00, 0x00, 0xEA - .byte 0x5D, 0x01, 0x00, 0xEA, 0x5C, 0x01, 0x00, 0xEA, 0x5B, 0x01, 0x00, 0xEA, 0xC6, 0x00, 0x00, 0xEA - .byte 0xC5, 0x00, 0x00, 0xEA, 0xC4, 0x00, 0x00, 0xEA -_020E0F28: - cmp r1, #0x25 - beq _020E1478 - b _020E148C -_020E0F34: - cmp r1, #0x58 - beq _020E1100 - b _020E148C -_020E0F40: - cmp r1, #0x75 - bgt _020E0FA8 - subs r0, r1, #0x64 - addpl pc, pc, r0, lsl #0x2 - b _020E0F9C -_020E0F54: - .byte 0x19, 0x00, 0x00, 0xEA, 0xB7, 0x00, 0x00, 0xEA, 0xB6, 0x00, 0x00, 0xEA - .byte 0xB5, 0x00, 0x00, 0xEA, 0x48, 0x01, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x46, 0x01, 0x00, 0xEA - .byte 0x45, 0x01, 0x00, 0xEA, 0x44, 0x01, 0x00, 0xEA, 0x43, 0x01, 0x00, 0xEA, 0x12, 0x01, 0x00, 0xEA - .byte 0x5E, 0x00, 0x00, 0xEA, 0x40, 0x01, 0x00, 0xEA, 0x3F, 0x01, 0x00, 0xEA, 0x3E, 0x01, 0x00, 0xEA - .byte 0xDD, 0x00, 0x00, 0xEA, 0x3C, 0x01, 0x00, 0xEA, 0x58, 0x00, 0x00, 0xEA -_020E0F9C: - cmp r1, #0x63 - beq _020E1458 - b _020E148C -_020E0FA8: - cmp r1, #0x78 - bgt _020E0FB8 - beq _020E1100 - b _020E148C -_020E0FB8: - cmp r1, #0xff - b _020E148C -_020E0FC0: - .byte 0x20, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5 - .byte 0x04, 0x10, 0x81, 0xE2, 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x50, 0x11, 0xE5, 0x25, 0x00, 0x00, 0xEA - .byte 0x04, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5, 0x08, 0x20, 0x81, 0xE2 - .byte 0x5C, 0x22, 0x8D, 0xE5, 0x08, 0x10, 0x12, 0xE5, 0x10, 0x10, 0x8D, 0xE5, 0x04, 0x10, 0x12, 0xE5 - .byte 0x14, 0x10, 0x8D, 0xE5, 0x1B, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A - .byte 0x5C, 0x12, 0x9D, 0xE5, 0x08, 0x20, 0x81, 0xE2, 0x5C, 0x22, 0x8D, 0xE5, 0x08, 0x10, 0x12, 0xE5 - .byte 0x10, 0x10, 0x8D, 0xE5, 0x04, 0x10, 0x12, 0xE5, 0x14, 0x10, 0x8D, 0xE5, 0x11, 0x00, 0x00, 0xEA - .byte 0x07, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2 - .byte 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x50, 0x11, 0xE5, 0x0A, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x50, 0xE3 - .byte 0x04, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2, 0x5C, 0x12, 0x8D, 0xE5 - .byte 0x04, 0x50, 0x11, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x5C, 0x12, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2 - .byte 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x50, 0x11, 0xE5, 0x02, 0x00, 0x50, 0xE3, 0x05, 0x18, 0xA0, 0x01 - .byte 0x41, 0x58, 0xA0, 0x01, 0x01, 0x00, 0x50, 0xE3, 0x05, 0x1C, 0xA0, 0x01, 0x41, 0x5C, 0xA0, 0x01 - .byte 0x04, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13, 0x1C, 0x00, 0x8D, 0xE2, 0x0A, 0x00, 0x00, 0x1A - .byte 0x04, 0x40, 0x4D, 0xE2, 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x84, 0xE8, 0x00, 0x30, 0x94, 0xE5 - .byte 0x10, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x9D, 0xE5, 0x8B, 0x2F, 0x8D, 0xE2, 0x46, 0xFB, 0xFF, 0xEB - .byte 0x00, 0x70, 0xB0, 0xE1, 0xF0, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x00, 0xEA, 0x08, 0x40, 0x4D, 0xE2 - .byte 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x84, 0xE8, 0x8B, 0x1F, 0x8D, 0xE2, 0x05, 0x00, 0xA0, 0xE1 - .byte 0x0C, 0x00, 0x94, 0xE8, 0xA9, 0xFA, 0xFF, 0xEB, 0x00, 0x70, 0xB0, 0xE1, 0xE6, 0x00, 0x00, 0x0A - .byte 0x02, 0x0C, 0x8D, 0xE2, 0x2B, 0x00, 0x80, 0xE2, 0x07, 0x60, 0x40, 0xE0, 0xF5, 0x00, 0x00, 0xEA -_020E1100: - ldrb r0, [sp, #0x20] - cmp r0, #0x3 - bne _020E1120 - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] - b _020E11B8 -_020E1120: - cmp r0, #0x4 - bne _020E1148 - ldr r1, [sp, #0x25c] - add r2, r1, #0x8 - str r2, [sp, #0x25c] - ldr r1, [r2, #-0x8] - str r1, [sp, #0x10] - ldr r1, [r2, #-0x4] - str r1, [sp, #0x14] - b _020E11B8 -_020E1148: - cmp r0, #0x6 - bne _020E1170 - ldr r1, [sp, #0x25c] - add r2, r1, #0x8 - str r2, [sp, #0x25c] - ldr r1, [r2, #-0x8] - str r1, [sp, #0x10] - ldr r1, [r2, #-0x4] - str r1, [sp, #0x14] - b _020E11B8 -_020E1170: - cmp r0, #0x7 - bne _020E118C - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] - b _020E11B8 -_020E118C: - cmp r0, #0x8 - bne _020E11A8 - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] - b _020E11B8 -_020E11A8: - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] -_020E11B8: - cmp r0, #0x2 - moveq r1, r5, lsl #0x10 - moveq r5, r1, lsr #0x10 - cmp r0, #0x1 - andeq r5, r5, #0xff - cmp r0, #0x4 - cmpne r0, #0x6 - add r0, sp, #0x1c - bne _020E1208 - sub r4, sp, #0x4 - ldmia r0, {r0-r3} - stmia r4, {r0-r3} - ldr r3, [r4, #0x0] - ldr r0, [sp, #0x10] - ldr r1, [sp, #0x14] - add r2, sp, #0x22c - bl longlong2str - movs r7, r0 - beq _020E148C - b _020E122C -_020E1208: - sub r4, sp, #0x8 - ldmia r0, {r0-r3} - stmia r4, {r0-r3} - add r1, sp, #0x22c - mov r0, r5 - ldmia r4, {r2-r3} - bl long2str - movs r7, r0 - beq _020E148C -_020E122C: - add r0, sp, #0x200 - add r0, r0, #0x2b - sub r6, r0, r7 - b _020E14D8 -_020E123C: - .byte 0x20, 0x00, 0xDD, 0xE5 - .byte 0x09, 0x00, 0x50, 0xE3, 0x5C, 0x02, 0x9D, 0x15, 0x08, 0x00, 0x80, 0x12, 0x5C, 0x02, 0x8D, 0x15 - .byte 0x02, 0x00, 0x00, 0x1A, 0x5C, 0x02, 0x9D, 0xE5, 0x08, 0x00, 0x80, 0xE2, 0x5C, 0x02, 0x8D, 0xE5 - .byte 0x08, 0x70, 0x10, 0xE5, 0x04, 0x60, 0x10, 0xE5, 0x1C, 0x00, 0x8D, 0xE2, 0x04, 0x40, 0x4D, 0xE2 - .byte 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x84, 0xE8, 0x00, 0x30, 0x94, 0xE5, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x06, 0x10, 0xA0, 0xE1, 0x8B, 0x2F, 0x8D, 0xE2, 0x0B, 0xFD, 0xFF, 0xEB, 0x00, 0x70, 0xB0, 0xE1 - .byte 0x7D, 0x00, 0x00, 0x0A, 0x02, 0x0C, 0x8D, 0xE2, 0x2B, 0x00, 0x80, 0xE2, 0x07, 0x60, 0x40, 0xE0 - .byte 0x8C, 0x00, 0x00, 0xEA -_020E12A4: - ldrb r0, [sp, #0x20] - cmp r0, #0x9 - ldrne r0, [sp, #0x25c] - addne r0, r0, #0x8 - strne r0, [sp, #0x25c] - bne _020E12C8 - ldr r0, [sp, #0x25c] - add r0, r0, #0x8 - str r0, [sp, #0x25c] -_020E12C8: - ldr r7, [r0, #-0x8] - ldr r6, [r0, #-0x4] - add r0, sp, #0x1c - sub r4, sp, #0x4 - ldmia r0, {r0-r3} - stmia r4, {r0-r3} - ldr r3, [r4, #0x0] - mov r0, r7 - mov r1, r6 - add r2, sp, #0x22c - bl double2hex - movs r7, r0 - beq _020E148C - add r0, sp, #0x200 - add r0, r0, #0x2b - sub r6, r0, r7 - b _020E14D8 -_020E130C: - .byte 0x20, 0x00, 0xDD, 0xE5 - .byte 0x05, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x00, 0x1A, 0x5C, 0x02, 0x9D, 0xE5, 0x02, 0x2C, 0xA0, 0xE3 - .byte 0x04, 0x00, 0x80, 0xE2, 0x5C, 0x02, 0x8D, 0xE5, 0x04, 0x10, 0x10, 0xE5, 0x2C, 0x00, 0x8D, 0xE2 - .byte 0x00, 0x00, 0x51, 0xE3, 0x00, 0x13, 0x9F, 0x05, 0x20, 0xF8, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x51, 0x00, 0x00, 0xBA, 0x2C, 0x70, 0x8D, 0xE2, 0x03, 0x00, 0x00, 0xEA, 0x5C, 0x02, 0x9D, 0xE5 - .byte 0x04, 0x00, 0x80, 0xE2, 0x5C, 0x02, 0x8D, 0xE5, 0x04, 0x70, 0x10, 0xE5, 0x1F, 0x00, 0xDD, 0xE5 - .byte 0x00, 0x00, 0x57, 0xE3, 0xD4, 0x72, 0x9F, 0x05, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A - .byte 0x1E, 0x00, 0xDD, 0xE5, 0x01, 0x60, 0xD7, 0xE4, 0x00, 0x00, 0x50, 0xE3, 0x55, 0x00, 0x00, 0x0A - .byte 0x28, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x56, 0xE1, 0x00, 0x60, 0xA0, 0xC1, 0x51, 0x00, 0x00, 0xEA - .byte 0x1E, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0x28, 0x60, 0x9D, 0xE5 - .byte 0x07, 0x00, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x41, 0xF8, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x07, 0x60, 0x40, 0x10, 0x46, 0x00, 0x00, 0xEA, 0x07, 0x00, 0xA0, 0xE1 - .byte 0xB9, 0x06, 0x00, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x42, 0x00, 0x00, 0xEA, 0x5C, 0x12, 0x9D, 0xE5 - .byte 0x20, 0x00, 0xDD, 0xE5, 0x04, 0x10, 0x81, 0xE2, 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x10, 0x11, 0xE5 - .byte 0x08, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x8B, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA - .byte 0x89, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x11, 0x00, 0x00, 0xEA - .byte 0x85, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA - .byte 0x00, 0xA0, 0x81, 0xE5, 0x80, 0x00, 0x00, 0xEA, 0xB0, 0xA0, 0xC1, 0xE1, 0x7E, 0x00, 0x00, 0xEA - .byte 0x00, 0xA0, 0x81, 0xE5, 0x7C, 0x00, 0x00, 0xEA, 0x00, 0xA0, 0x81, 0xE5, 0xCA, 0x0F, 0xA0, 0xE1 - .byte 0x04, 0x00, 0x81, 0xE5, 0x78, 0x00, 0x00, 0xEA, 0x00, 0xA0, 0x81, 0xE5, 0x76, 0x00, 0x00, 0xEA - .byte 0x00, 0xA0, 0x81, 0xE5, 0x74, 0x00, 0x00, 0xEA, 0x00, 0xA0, 0x81, 0xE5, 0xCA, 0x0F, 0xA0, 0xE1 - .byte 0x04, 0x00, 0x81, 0xE5, 0x70, 0x00, 0x00, 0xEA -_020E1458: - ldr r0, [sp, #0x25c] - add r7, sp, #0x2c - add r0, r0, #0x4 - str r0, [sp, #0x25c] - ldr r0, [r0, #-0x4] - mov r6, #0x1 - strb r0, [sp, #0x2c] - b _020E14D8 -_020E1478: - mov r0, #0x25 - strb r0, [sp, #0x2c] - add r7, sp, #0x2c - mov r6, #0x1 - b _020E14D8 -_020E148C: - ldr r0, [sp, #0xc] - bl strlen - movs r4, r0 - beq _020E14C4 - ldr r1, [sp, #0xc] - mov r0, r8 - mov r2, r4 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E14C4: - add sp, sp, #0x22c - add r0, r10, r4 - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E14D8: - ldrb r0, [sp, #0x1c] - mov r4, r6 - cmp r0, #0x0 - beq _020E158C - cmp r0, #0x2 - moveq r0, #0x30 - movne r0, #0x20 - strb r0, [sp, #0x19] - ldrsb r0, [r7, #0x0] - cmp r0, #0x2b - cmpne r0, #0x2d - cmpne r0, #0x20 - bne _020E1548 - ldrsb r0, [sp, #0x19] - cmp r0, #0x30 - bne _020E1548 - mov r0, r8 - mov r1, r7 - mov r2, #0x1 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - add r7, r7, #0x1 - sub r6, r6, #0x1 -_020E1548: - ldr r0, [sp, #0x24] - cmp r4, r0 - bge _020E158C -_020E1554: - mov r0, r8 - add r1, sp, #0x19 - mov r2, #0x1 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x24] - add r4, r4, #0x1 - cmp r4, r0 - blt _020E1554 -_020E158C: - cmp r6, #0x0 - beq _020E15BC - mov r0, r8 - mov r1, r7 - mov r2, r6 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E15BC: - ldrb r0, [sp, #0x1c] - cmp r0, #0x0 - bne _020E1618 - ldr r0, [sp, #0x24] - cmp r4, r0 - bge _020E1618 - mov r6, #0x20 - add r7, sp, #0x18 -_020E15DC: - mov r0, r8 - mov r1, r7 - mov r2, #0x1 - strb r6, [sp, #0x18] - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x24] - add r4, r4, #0x1 - cmp r4, r0 - blt _020E15DC -_020E1618: - add r10, r10, r4 - ldrsb r0, [r11, #0x0] - cmp r0, #0x0 - bne _020E0E50 -_020E1628: - mov r0, r10 - add sp, sp, #0x22c - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E163C: - .byte 0xD8, 0x6D, 0x10, 0x02 - .byte 0xDC, 0x6D, 0x10, 0x02 - - arm_func_start __FileWrite -__FileWrite: ; 0x020E1644 - stmdb sp!, {r3-r5,lr} - mov r5, r0 - mov r0, r1 - mov r3, r5 - mov r1, #0x1 - mov r4, r2 - bl __fwrite -_020E1660: - .byte 0x00, 0x00, 0x54, 0xE1, 0x00, 0x50, 0xA0, 0x13, 0x05, 0x00, 0xA0, 0xE1, 0x38, 0x80, 0xBD, 0xE8 - - arm_func_start __StringWrite -__StringWrite: ; 0x020E1670 - stmdb sp!, {r3-r5,lr} - mov r4, r0 - ldr r3, [r4, #0x8] - mov r5, r2 - ldr r2, [r4, #0x4] - add r0, r3, r5 - cmp r0, r2 - ldr r0, [r4, #0x0] - subhi r5, r2, r3 - mov r2, r5 - add r0, r0, r3 - bl memcpy - ldr r1, [r4, #0x8] - mov r0, #0x1 - add r1, r1, r5 - str r1, [r4, #0x8] - ldmia sp!, {r3-r5,pc} - - arm_func_start printf -printf: ; 0x020E16B4 - stmdb sp!, {r0-r3} - stmdb sp!, {r4,lr} - ldr r0, _020E17B4 ; =0x02106AA4 - mvn r1, #0x0 - bl fwide -_020E16C8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xE0, 0xA3 - .byte 0x10, 0x40, 0xBD, 0xA8, 0x10, 0xD0, 0x8D, 0xA2, 0x1E, 0xFF, 0x2F, 0xA1, 0xD4, 0x00, 0x9F, 0xE5 - .byte 0xFF, 0xA9, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A, 0xC8, 0x00, 0x9F, 0xE5 - .byte 0xC8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0xC4, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x0C, 0x30, 0x81, 0xE5, 0x0C, 0x20, 0x80, 0xE5, 0x15, 0x00, 0x00, 0xEA - .byte 0xA4, 0x00, 0x9F, 0xE5, 0xA4, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5, 0x0C, 0x10, 0x91, 0xE5 - .byte 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A, 0x90, 0x00, 0x9F, 0xE5 - .byte 0x0C, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2, 0x0C, 0x10, 0x80, 0xE5, 0x09, 0x00, 0x00, 0xEA - .byte 0x70, 0x00, 0x9F, 0xE5, 0x31, 0xAA, 0xFF, 0xEB, 0x6C, 0x00, 0x9F, 0xE5, 0x6C, 0x10, 0x9F, 0xE5 - .byte 0x04, 0x20, 0x90, 0xE5, 0x68, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x0C, 0x30, 0x81, 0xE5, 0x0C, 0x20, 0x80, 0xE5, 0x08, 0x00, 0x8D, 0xE2, 0x03, 0x30, 0xC0, 0xE3 - .byte 0x08, 0x20, 0x9D, 0xE5, 0x4C, 0x00, 0x9F, 0xE5, 0x34, 0x10, 0x9F, 0xE5, 0x04, 0x30, 0x83, 0xE2 - .byte 0xA6, 0xFD, 0xFF, 0xEB, 0x38, 0x10, 0x9F, 0xE5, 0x00, 0x40, 0xA0, 0xE1, 0x0C, 0x00, 0x91, 0xE5 - .byte 0x01, 0x00, 0x50, 0xE2, 0x0C, 0x00, 0x81, 0xE5, 0x01, 0x00, 0x00, 0x1A, 0x14, 0x00, 0x9F, 0xE5 - .byte 0xFE, 0xA9, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x10, 0xD0, 0x8D, 0xE2 - .byte 0x1E, 0xFF, 0x2F, 0xE1 -_020E17B4: .word 0x02106AA4 -_020E17B8: - .byte 0x18, 0x71, 0x1D, 0x02, 0x98, 0x34, 0x1D, 0x02 - .byte 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0x44, 0x16, 0x0E, 0x02 - - arm_func_start vsnprintf -vsnprintf: ; 0x020E17CC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - mov r5, r0 - mov r4, r1 - mov r12, #0x0 - ldr r0, _020E1830 ; =__StringWrite - add r1, sp, #0x0 - str r5, [sp, #0x0] - str r4, [sp, #0x4] - str r12, [sp, #0x8] - bl __pformatter -_020E17F8: - .byte 0x00, 0x00, 0x55, 0xE3, 0x0C, 0xD0, 0x8D, 0x02 - .byte 0x30, 0x80, 0xBD, 0x08, 0x04, 0x00, 0x50, 0xE1, 0x00, 0x10, 0xA0, 0x33, 0x0C, 0xD0, 0x8D, 0x32 - .byte 0x00, 0x10, 0xC5, 0x37, 0x30, 0x80, 0xBD, 0x38, 0x00, 0x00, 0x54, 0xE3, 0x04, 0x10, 0x85, 0x10 - .byte 0x00, 0x20, 0xA0, 0x13, 0x01, 0x20, 0x41, 0x15, 0x0C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 -_020E1830: .word __StringWrite - - arm_func_start snprintf -snprintf: ; 0x020E1834 - stmdb sp!, {r0-r3} - stmdb sp!, {r3,lr} - add r3, sp, #0x10 - bic r3, r3, #0x3 - ldr r2, [sp, #0x10] - add r3, r3, #0x4 - bl vsnprintf - ldmia sp!, {r3,lr} - add sp, sp, #0x10 - bx lr - - arm_func_start sprintf -sprintf: ; 0x020E185C - stmdb sp!, {r0-r3} - stmdb sp!, {r3,lr} - add r1, sp, #0xc - bic r1, r1, #0x3 - add r3, r1, #0x4 - ldr r2, [sp, #0xc] - mvn r1, #0x0 - bl vsnprintf - ldmia sp!, {r3,lr} - add sp, sp, #0x10 - bx lr - - arm_func_start qsort -qsort: ; 0x020E1888 - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x10 - mov r9, r1 - cmp r9, #0x2 - mov r10, r0 - mov r8, r2 - mov r7, r3 - addcc sp, sp, #0x10 - ldmccia sp!, {r3-r11,pc} -_020E18AC: - .byte 0xA9, 0x00, 0xA0, 0xE1 - .byte 0x01, 0xB0, 0x80, 0xE2, 0x01, 0x00, 0x4B, 0xE2, 0x98, 0xA0, 0x20, 0xE0, 0x01, 0x20, 0x49, 0xE2 - .byte 0x0C, 0x00, 0x8D, 0xE5, 0x98, 0xA2, 0x20, 0xE0, 0x08, 0x00, 0x8D, 0xE5, 0x9B, 0x08, 0x00, 0xE0 - .byte 0x00, 0x10, 0xE0, 0xE3, 0x04, 0x00, 0x8D, 0xE5, 0x98, 0x01, 0x00, 0xE0, 0x00, 0x00, 0x8D, 0xE5 - .byte 0x01, 0x00, 0x5B, 0xE3, 0x07, 0x00, 0x00, 0x9A, 0x04, 0x00, 0x9D, 0xE5, 0x01, 0xB0, 0x4B, 0xE2 - .byte 0x08, 0x00, 0x40, 0xE0, 0x04, 0x00, 0x8D, 0xE5, 0x0C, 0x00, 0x9D, 0xE5, 0x08, 0x00, 0x40, 0xE0 - .byte 0x0C, 0x00, 0x8D, 0xE5, 0x11, 0x00, 0x00, 0xEA, 0x08, 0x20, 0xA0, 0xE1, 0x08, 0x40, 0x9D, 0xE5 - .byte 0x0C, 0x30, 0x9D, 0xE5, 0x00, 0x00, 0x58, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0xD0, 0x00, 0xD4, 0xE1 - .byte 0xD0, 0x10, 0xD3, 0xE1, 0x01, 0x20, 0x52, 0xE2, 0x01, 0x00, 0xC3, 0xE4, 0x01, 0x10, 0xC4, 0xE4 - .byte 0xF9, 0xFF, 0xFF, 0x1A, 0x01, 0x90, 0x49, 0xE2, 0x01, 0x00, 0x59, 0xE3, 0x10, 0xD0, 0x8D, 0x02 - .byte 0xF8, 0x8F, 0xBD, 0x08, 0x08, 0x00, 0x9D, 0xE5, 0x08, 0x00, 0x40, 0xE0, 0x08, 0x00, 0x8D, 0xE5 - .byte 0x04, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x9D, 0xE5, 0x0B, 0x40, 0xA0, 0xE1, 0x00, 0x00, 0x81, 0xE0 - .byte 0x8B, 0x00, 0x59, 0xE1, 0x00, 0x50, 0x8A, 0xE0, 0xDC, 0xFF, 0xFF, 0x3A, 0x84, 0x40, 0xA0, 0xE1 - .byte 0x01, 0x00, 0x44, 0xE2, 0x05, 0x60, 0xA0, 0xE1, 0x98, 0xA0, 0x25, 0xE0, 0x04, 0x00, 0x59, 0xE1 - .byte 0x05, 0x00, 0x00, 0x9A, 0x05, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0x85, 0xE0, 0x37, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x40, 0x84, 0xB2, 0x08, 0x50, 0x85, 0xB0, 0x06, 0x00, 0xA0, 0xE1 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x37, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0xCB, 0xFF, 0xFF, 0xAA - .byte 0x08, 0x20, 0xA0, 0xE1, 0x05, 0x30, 0xA0, 0xE1, 0x00, 0x00, 0x58, 0xE3, 0x05, 0x00, 0x00, 0x0A - .byte 0xD0, 0x10, 0xD6, 0xE1, 0xD0, 0x00, 0xD3, 0xE1, 0x01, 0x20, 0x52, 0xE2, 0x01, 0x00, 0xC6, 0xE4 - .byte 0x01, 0x10, 0xC3, 0xE4, 0xF9, 0xFF, 0xFF, 0x1A, 0x84, 0x00, 0x59, 0xE1, 0xE2, 0xFF, 0xFF, 0x2A - .byte 0xBE, 0xFF, 0xFF, 0xEA, 0x10, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 - - arm_func_start rand -rand: ; 0x020E19EC - ldr r2, _020E1A14 ; =0x02106DE0 - ldr r0, _020E1A18 ; =0x41C64E6D - ldr r3, [r2, #0x0] - ldr r1, _020E1A1C ; =0x00007FFF - mul r0, r3, r0 - add r0, r0, #0x39 - add r0, r0, #0x3000 - str r0, [r2, #0x0] - and r0, r1, r0, lsr #0x10 - bx lr - .balign 4 -_020E1A14: .word 0x02106DE0 -_020E1A18: .word 0x41C64E6D -_020E1A1C: .word 0x00007FFF - - arm_func_start srand -srand: ; 0x020E1A20 - ldr r1, _020E1A2C ; =0x02106DE0 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020E1A2C: .word 0x02106DE0 - - arm_func_start parse_format_scanf -parse_format_scanf: ; 0x020E1A30 - stmdb sp!, {r3-r7,lr} - sub sp, sp, #0x28 - ldr r6, _020E1F20 ; =0x0210440C - add r5, sp, #0x0 - mov r7, r0 - mov lr, r1 - mov r4, r5 - ldmia r6!, {r0-r3} - stmia r5!, {r0-r3} - ldmia r6!, {r0-r3} - stmia r5!, {r0-r3} - ldmia r6, {r0-r1} - stmia r5, {r0-r1} - ldrsb r0, [r7, #0x1] - add r12, r7, #0x1 - cmp r0, #0x25 - bne _020E1A9C - strb r0, [sp, #0x3] - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4, {r0-r1} - stmia lr, {r0-r1} - add sp, sp, #0x28 - add r0, r12, #0x1 - ldmia sp!, {r3-r7,pc} -_020E1A9C: - cmp r0, #0x2a - moveq r0, #0x1 - streqb r0, [sp, #0x0] - ldreqsb r0, [r12, #0x1]! - cmp r0, #0x0 - blt _020E1ABC - cmp r0, #0x80 - blt _020E1AC4 -_020E1ABC: - mov r1, #0x0 - b _020E1AD4 -_020E1AC4: - ldr r1, _020E1F24 ; =0x0210430C - mov r2, r0, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x8 -_020E1AD4: - cmp r1, #0x0 - beq _020E1B74 - mov r1, #0x0 - ldr r3, _020E1F24 ; =0x0210430C - str r1, [sp, #0x4] - mov r4, r1 - mov r1, #0xa -_020E1AF0: - ldr r2, [sp, #0x4] - sub r0, r0, #0x30 - mla r0, r2, r1, r0 - str r0, [sp, #0x4] - ldrsb r0, [r12, #0x1]! - cmp r0, #0x0 - blt _020E1B14 - cmp r0, #0x80 - blt _020E1B1C -_020E1B14: - mov r2, r4 - b _020E1B28 -_020E1B1C: - mov r2, r0, lsl #0x1 - ldrh r2, [r3, r2] - and r2, r2, #0x8 -_020E1B28: - cmp r2, #0x0 - bne _020E1AF0 - ldr r1, [sp, #0x4] - cmp r1, #0x0 - bne _020E1B6C - mov r0, #0xff - add r4, sp, #0x0 - strb r0, [sp, #0x3] - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4, {r0-r1} - stmia lr, {r0-r1} - add sp, sp, #0x28 - add r0, r12, #0x1 - ldmia sp!, {r3-r7,pc} -_020E1B6C: - mov r1, #0x1 - strb r1, [sp, #0x1] -_020E1B74: - cmp r0, #0x6c - mov r1, #0x1 - bgt _020E1BAC - cmp r0, #0x68 - blt _020E1BA0 - beq _020E1BC8 - cmp r0, #0x6a - beq _020E1C14 - cmp r0, #0x6c - beq _020E1BE4 - b _020E1C38 -_020E1BA0: - cmp r0, #0x4c - beq _020E1C08 - b _020E1C38 -_020E1BAC: - cmp r0, #0x74 - bgt _020E1BBC - beq _020E1C2C - b _020E1C38 -_020E1BBC: - cmp r0, #0x7a - beq _020E1C20 - b _020E1C38 -_020E1BC8: - mov r2, #0x2 - strb r2, [sp, #0x2] - ldrsb r2, [r12, #0x1] - cmp r2, #0x68 - streqb r1, [sp, #0x2] - ldreqsb r0, [r12, #0x1]! - b _020E1C3C -_020E1BE4: - mov r2, #0x3 - strb r2, [sp, #0x2] - ldrsb r2, [r12, #0x1] - cmp r2, #0x6c - bne _020E1C3C - mov r0, #0x7 - strb r0, [sp, #0x2] - ldrsb r0, [r12, #0x1]! - b _020E1C3C -_020E1C08: - mov r2, #0x9 - strb r2, [sp, #0x2] - b _020E1C3C -_020E1C14: - mov r2, #0x4 - strb r2, [sp, #0x2] - b _020E1C3C -_020E1C20: - mov r2, #0x5 - strb r2, [sp, #0x2] - b _020E1C3C -_020E1C2C: - mov r2, #0x6 - strb r2, [sp, #0x2] - b _020E1C3C -_020E1C38: - mov r1, #0x0 -_020E1C3C: - cmp r1, #0x0 - ldrnesb r0, [r12, #0x1]! - strb r0, [sp, #0x3] - cmp r0, #0x5b - bgt _020E1C90 - bge _020E1DE0 - cmp r0, #0x47 - bgt _020E1C84 - subs r1, r0, #0x41 - addpl pc, pc, r1, lsl #0x2 - b _020E1EF0 -_020E1C68: - .byte 0x2B, 0x00, 0x00, 0xEA, 0x9F, 0x00, 0x00, 0xEA - .byte 0x9E, 0x00, 0x00, 0xEA, 0x9D, 0x00, 0x00, 0xEA, 0x27, 0x00, 0x00, 0xEA, 0x26, 0x00, 0x00, 0xEA - .byte 0x25, 0x00, 0x00, 0xEA -_020E1C84: - cmp r0, #0x58 - beq _020E1D08 - b _020E1EF0 -_020E1C90: - cmp r0, #0x61 - bgt _020E1CA0 - beq _020E1D1C - b _020E1EF0 -_020E1CA0: - sub r0, r0, #0x63 - cmp r0, #0x15 - addls pc, pc, r0, lsl #0x2 - b _020E1EF0 -_020E1CB0: - .byte 0x2D, 0x00, 0x00, 0xEA, 0x13, 0x00, 0x00, 0xEA, 0x17, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA - .byte 0x15, 0x00, 0x00, 0xEA, 0x89, 0x00, 0x00, 0xEA, 0x0E, 0x00, 0x00, 0xEA, 0x87, 0x00, 0x00, 0xEA - .byte 0x86, 0x00, 0x00, 0xEA, 0x85, 0x00, 0x00, 0xEA, 0x84, 0x00, 0x00, 0xEA, 0x85, 0x00, 0x00, 0xEA - .byte 0x08, 0x00, 0x00, 0xEA, 0x1B, 0x00, 0x00, 0xEA, 0x80, 0x00, 0x00, 0xEA, 0x7F, 0x00, 0x00, 0xEA - .byte 0x26, 0x00, 0x00, 0xEA, 0x7D, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA, 0x7B, 0x00, 0x00, 0xEA - .byte 0x7A, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA -_020E1D08: - ldrb r0, [sp, #0x2] - cmp r0, #0x9 - moveq r0, #0xff - streqb r0, [sp, #0x3] - b _020E1EF8 -_020E1D1C: - ldrb r1, [sp, #0x2] - cmp r1, #0x1 - cmpne r1, #0x2 - beq _020E1D3C - add r0, r1, #0xfc - and r0, r0, #0xff - cmp r0, #0x3 - bhi _020E1D48 -_020E1D3C: - mov r0, #0xff - strb r0, [sp, #0x3] - b _020E1EF8 -_020E1D48: - cmp r1, #0x3 - moveq r0, #0x8 - streqb r0, [sp, #0x2] - b _020E1EF8 -_020E1D58: - .byte 0x03, 0x10, 0xA0, 0xE3, 0x78, 0x00, 0xA0, 0xE3 - .byte 0x02, 0x10, 0xCD, 0xE5, 0x03, 0x00, 0xCD, 0xE5, 0x62, 0x00, 0x00, 0xEA, 0x02, 0x00, 0xDD, 0xE5 - .byte 0x03, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0xA0, 0x03, 0x02, 0x00, 0xCD, 0x05, 0x5D, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x13, 0x03, 0x00, 0xCD, 0x15, 0x59, 0x00, 0x00, 0xEA - .byte 0x02, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0xA0, 0x03, 0x02, 0x00, 0xCD, 0x05 - .byte 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x13, 0x03, 0x00, 0xCD, 0x15 - .byte 0x08, 0x20, 0x8D, 0xE2, 0x20, 0x10, 0xA0, 0xE3, 0xFF, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0x41, 0xE2 - .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0xC2, 0xE4, 0xFB, 0xFF, 0xFF, 0xCA, 0xC1, 0x10, 0xA0, 0xE3 - .byte 0xFE, 0x00, 0xA0, 0xE3, 0x09, 0x10, 0xCD, 0xE5, 0x0C, 0x00, 0xCD, 0xE5, 0x45, 0x00, 0x00, 0xEA -_020E1DE0: - ldrb r0, [sp, #0x2] - cmp r0, #0x3 - moveq r0, #0xa - streqb r0, [sp, #0x2] - beq _020E1E00 - cmp r0, #0x0 - movne r0, #0xff - strneb r0, [sp, #0x3] -_020E1E00: - ldrsb r2, [r12, #0x1]! - mov r1, #0x0 - cmp r2, #0x5e - ldreqsb r2, [r12, #0x1]! - moveq r1, #0x1 - cmp r2, #0x5d - bne _020E1EA8 - ldrb r0, [sp, #0x13] - orr r0, r0, #0x20 - strb r0, [sp, #0x13] - ldrsb r2, [r12, #0x1]! - b _020E1EA8 -_020E1E30: - add r0, sp, #0x0 - and r3, r2, #0xff - add r6, r0, r3, asr #0x3 - ldrb r5, [r6, #0x8] - and r3, r2, #0x7 - mov r4, #0x1 - orr r3, r5, r4, lsl r3 - strb r3, [r6, #0x8] - ldrsb r3, [r12, #0x1] - cmp r3, #0x2d - bne _020E1EA4 - ldrsb r7, [r12, #0x2] - cmp r7, #0x0 - cmpne r7, #0x5d - beq _020E1EA4 - add r2, r2, #0x1 - cmp r2, r7 - bgt _020E1E9C -_020E1E78: - and r3, r2, #0xff - add r6, r0, r3, asr #0x3 - ldrb r5, [r6, #0x8] - and r3, r2, #0x7 - add r2, r2, #0x1 - orr r3, r5, r4, lsl r3 - strb r3, [r6, #0x8] - cmp r2, r7 - ble _020E1E78 -_020E1E9C: - ldrsb r2, [r12, #0x3]! - b _020E1EA8 -_020E1EA4: - ldrsb r2, [r12, #0x1]! -_020E1EA8: - cmp r2, #0x0 - cmpne r2, #0x5d - bne _020E1E30 - cmp r2, #0x0 - moveq r0, #0xff - streqb r0, [sp, #0x3] - beq _020E1EF8 - cmp r1, #0x0 - beq _020E1EF8 - add r2, sp, #0x8 - mov r1, #0x20 -_020E1ED4: - ldrb r0, [r2, #0x0] - sub r1, r1, #0x1 - cmp r1, #0x0 - mvn r0, r0 - strb r0, [r2], #0x1 - bgt _020E1ED4 - b _020E1EF8 -_020E1EF0: - mov r0, #0xff - strb r0, [sp, #0x3] -_020E1EF8: - add r4, sp, #0x0 - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4, {r0-r1} - stmia lr, {r0-r1} - add r0, r12, #0x1 - add sp, sp, #0x28 - ldmia sp!, {r3-r7,pc} - .balign 4 -_020E1F20: .word 0x0210440C -_020E1F24: .word 0x0210430C - - arm_func_start __sformatter -__sformatter: ; 0x020E1F28 - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x88 - ldrsb r5, [r2, #0x0] - str r2, [sp, #0xc] - mov r2, #0x0 - mov r9, r0 - mov r0, r2 - str r2, [sp, #0x20] - mov r8, r1 - str r3, [sp, #0x10] - str r0, [sp, #0x24] - cmp r5, #0x0 - ldr r10, [sp, #0xb0] - str r0, [sp, #0x30] - mov r4, r2 - str r0, [sp, #0x44] - str r0, [sp, #0x40] - beq _020E2C3C -_020E1F70: - cmp r5, #0x0 - mov r0, #0x1 - blt _020E1F84 - cmp r5, #0x80 - movlt r0, #0x0 -_020E1F84: - cmp r0, #0x0 - movne r0, #0x0 - bne _020E1FA0 - mov r1, r5, lsl #0x1 - ldr r0, _020E2C74 ; =0x0210430C - ldrh r0, [r0, r1] - and r0, r0, #0x100 -_020E1FA0: - cmp r0, #0x0 - beq _020E2060 - mov r2, #0x0 - ldr r1, _020E2C74 ; =0x0210430C - mov r12, r2 - mov r3, #0x1 -_020E1FB8: - ldr r0, [sp, #0xc] - ldrsb r5, [r0, #0x1]! - str r0, [sp, #0xc] - mov r0, r3 - cmp r5, #0x0 - blt _020E1FD8 - cmp r5, #0x80 - movlt r0, r2 -_020E1FD8: - cmp r0, #0x0 - movne r0, r12 - moveq r0, r5, lsl #0x1 - ldreqh r0, [r1, r0] - andeq r0, r0, #0x100 - cmp r0, #0x0 - bne _020E1FB8 - ldr r0, [sp, #0x30] - cmp r0, #0x0 - bne _020E2C2C - ldr r5, _020E2C74 ; =0x0210430C - b _020E200C -_020E2008: - add r4, r4, #0x1 -_020E200C: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - strb r0, [sp, #0x50] - ldrsb r1, [sp, #0x50] - cmp r1, #0x0 - blt _020E2034 - cmp r1, #0x80 - blt _020E203C -_020E2034: - mov r0, #0x0 - b _020E2048 -_020E203C: - mov r0, r1, lsl #0x1 - ldrh r0, [r5, r0] - and r0, r0, #0x100 -_020E2048: - cmp r0, #0x0 - bne _020E2008 - mov r0, r8 - mov r2, #0x1 - blx r9 - b _020E2C2C -_020E2060: - cmp r5, #0x25 - beq _020E20D8 - ldr r0, [sp, #0x30] - cmp r0, #0x0 - bne _020E20D8 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - strb r0, [sp, #0x50] - and r0, r5, #0xff - ldrsb r1, [sp, #0x50] - cmp r0, r1 - beq _020E20C4 - mov r0, r8 - mov r2, #0x1 - blx r9 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - ldr r0, [sp, #0xc] - add r0, r0, #0x1 - str r0, [sp, #0xc] - b _020E2C2C -_020E20C4: - ldr r0, [sp, #0xc] - add r4, r4, #0x1 - add r0, r0, #0x1 - str r0, [sp, #0xc] - b _020E2C2C -_020E20D8: - ldr r0, [sp, #0xc] - add r1, sp, #0x60 - bl parse_format_scanf - str r0, [sp, #0xc] - ldrb r0, [sp, #0x60] - cmp r0, #0x0 - bne _020E2114 - ldrb r0, [sp, #0x63] - cmp r0, #0x25 - beq _020E2114 - ldr r0, [sp, #0x10] - add r0, r0, #0x4 - str r0, [sp, #0x10] - ldr r5, [r0, #-0x4] - b _020E2118 -_020E2114: - mov r5, #0x0 -_020E2118: - ldrb r0, [sp, #0x63] - cmp r0, #0x6e - beq _020E2158 - ldr r0, [sp, #0x30] - cmp r0, #0x0 - bne _020E2158 - mov r0, r8 - mov r1, #0x0 - mov r2, #0x2 - blx r9 - cmp r0, #0x0 - beq _020E2158 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] -_020E2158: - ldrb r1, [sp, #0x63] - cmp r1, #0x5b - bgt _020E21B0 - bge _020E2984 - cmp r1, #0x47 - bgt _020E21A4 - subs r0, r1, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020E2198 -_020E217C: - .byte 0x1F, 0x01, 0x00, 0xEA - .byte 0xAD, 0x02, 0x00, 0xEA, 0xAC, 0x02, 0x00, 0xEA, 0xAB, 0x02, 0x00, 0xEA, 0x1B, 0x01, 0x00, 0xEA - .byte 0x1A, 0x01, 0x00, 0xEA, 0x19, 0x01, 0x00, 0xEA -_020E2198: - cmp r1, #0x25 - beq _020E287C - b _020E2C3C -_020E21A4: - cmp r1, #0x58 - beq _020E243C - b _020E2C3C -_020E21B0: - cmp r1, #0x78 - bgt _020E2228 - subs r0, r1, #0x63 - addpl pc, pc, r0, lsl #0x2 - b _020E221C -_020E21C4: - .byte 0x3E, 0x01, 0x00, 0xEA, 0x18, 0x00, 0x00, 0xEA, 0x0B, 0x01, 0x00, 0xEA - .byte 0x0A, 0x01, 0x00, 0xEA, 0x09, 0x01, 0x00, 0xEA, 0x97, 0x02, 0x00, 0xEA, 0x15, 0x00, 0x00, 0xEA - .byte 0x95, 0x02, 0x00, 0xEA, 0x94, 0x02, 0x00, 0xEA, 0x93, 0x02, 0x00, 0xEA, 0x92, 0x02, 0x00, 0xEA - .byte 0x74, 0x02, 0x00, 0xEA, 0x8C, 0x00, 0x00, 0xEA, 0x8F, 0x02, 0x00, 0xEA, 0x8E, 0x02, 0x00, 0xEA - .byte 0x8D, 0x02, 0x00, 0xEA, 0xBF, 0x01, 0x00, 0xEA, 0x8B, 0x02, 0x00, 0xEA, 0x88, 0x00, 0x00, 0xEA - .byte 0x89, 0x02, 0x00, 0xEA, 0x88, 0x02, 0x00, 0xEA, 0x87, 0x00, 0x00, 0xEA -_020E221C: - cmp r1, #0x61 - beq _020E2600 - b _020E2C3C -_020E2228: - cmp r1, #0xff - b _020E2C3C -_020E2230: - .byte 0x0A, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x00, 0xEA, 0x00, 0x00, 0xA0, 0xE3, 0x30, 0x10, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x51, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x00, 0x00, 0xA0, 0xE3, 0x1C, 0x00, 0x8D, 0xE5 - .byte 0x20, 0x00, 0x8D, 0xE5, 0x24, 0x00, 0x8D, 0xE5, 0x41, 0x00, 0x00, 0xEA, 0x62, 0x10, 0xDD, 0xE5 - .byte 0x5C, 0x20, 0x8D, 0xE2, 0x07, 0x00, 0x51, 0xE3, 0x04, 0x00, 0x51, 0x13, 0x58, 0x10, 0x8D, 0xE2 - .byte 0x0A, 0x00, 0x00, 0x1A, 0x00, 0x20, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5, 0x54, 0x10, 0x8D, 0xE2 - .byte 0x08, 0x10, 0x8D, 0xE5, 0x64, 0x10, 0x9D, 0xE5, 0x09, 0x20, 0xA0, 0xE1, 0x08, 0x30, 0xA0, 0xE1 - .byte 0xE7, 0x09, 0x00, 0xEB, 0x34, 0x00, 0x8D, 0xE5, 0x18, 0x10, 0x8D, 0xE5, 0x08, 0x00, 0x00, 0xEA - .byte 0x00, 0x20, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5, 0x54, 0x10, 0x8D, 0xE2, 0x08, 0x10, 0x8D, 0xE5 - .byte 0x64, 0x10, 0x9D, 0xE5, 0x09, 0x20, 0xA0, 0xE1, 0x08, 0x30, 0xA0, 0xE1, 0xE2, 0x08, 0x00, 0xEB - .byte 0x3C, 0x00, 0x8D, 0xE5, 0x5C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0x5A, 0xE3, 0x58, 0x02, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x30, 0x00, 0x8D, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x1C, 0x00, 0x8D, 0xE5, 0x20, 0x00, 0x8D, 0xE5, 0x24, 0x00, 0x8D, 0xE5 - .byte 0x1B, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x84, 0xE0, 0x62, 0x00, 0xDD, 0xE5, 0x07, 0x00, 0x50, 0xE3 - .byte 0x04, 0x00, 0x50, 0x13, 0x0E, 0x00, 0x00, 0x1A, 0x58, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0x00, 0x0A, 0x34, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x70, 0xE2, 0x20, 0x00, 0x8D, 0xE5 - .byte 0x18, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0xE0, 0xE2, 0x24, 0x00, 0x8D, 0xE5, 0x0C, 0x00, 0x00, 0xEA - .byte 0x34, 0x00, 0x9D, 0xE5, 0x20, 0x00, 0x8D, 0xE5, 0x18, 0x00, 0x9D, 0xE5, 0x24, 0x00, 0x8D, 0xE5 - .byte 0x07, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x3C, 0x00, 0x9D, 0x05 - .byte 0x1C, 0x00, 0x8D, 0x05, 0x02, 0x00, 0x00, 0x0A, 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x60, 0xE2 - .byte 0x1C, 0x00, 0x8D, 0xE5, 0x00, 0x00, 0x55, 0xE3, 0x2B, 0x00, 0x00, 0x0A, 0x62, 0x00, 0xDD, 0xE5 - .byte 0x07, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x22, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x00, 0xEA - .byte 0x08, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA, 0x0E, 0x00, 0x00, 0xEA - .byte 0x12, 0x00, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x85, 0xE5, 0x17, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0xC5, 0xE5 - .byte 0x14, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5, 0xB0, 0x00, 0xC5, 0xE1, 0x11, 0x00, 0x00, 0xEA - .byte 0x1C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x0E, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x85, 0xE5, 0x24, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5, 0x09, 0x00, 0x00, 0xEA - .byte 0x1C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x06, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x85, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5 - .byte 0x24, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5, 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x44, 0x00, 0x9D, 0x05, 0x01, 0x00, 0x80, 0x02, 0x44, 0x00, 0x8D, 0x05, 0x40, 0x00, 0x9D, 0xE5 - .byte 0x01, 0x00, 0x80, 0xE2, 0x40, 0x00, 0x8D, 0xE5, 0xFF, 0x01, 0x00, 0xEA, 0x08, 0x00, 0xA0, 0xE3 - .byte 0x02, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x00, 0xEA -_020E243C: - mov r0, #0x10 - ldr r1, [sp, #0x30] - cmp r1, #0x0 - beq _020E2460 - mov r0, #0x0 - str r0, [sp, #0x3c] - str r0, [sp, #0x34] - str r0, [sp, #0x18] - b _020E2538 -_020E2460: - ldrb r1, [sp, #0x62] - add r2, sp, #0x5c - cmp r1, #0x7 - cmpne r1, #0x4 - add r1, sp, #0x58 - bne _020E24A4 - str r2, [sp, #0x0] - str r1, [sp, #0x4] - add r1, sp, #0x54 - str r1, [sp, #0x8] - ldr r1, [sp, #0x64] - mov r2, r9 - mov r3, r8 - bl __strtoull - str r0, [sp, #0x34] - str r1, [sp, #0x18] - b _020E24C8 -_020E24A4: - str r2, [sp, #0x0] - str r1, [sp, #0x4] - add r1, sp, #0x54 - str r1, [sp, #0x8] - ldr r1, [sp, #0x64] - mov r2, r9 - mov r3, r8 - bl __strtoul - str r0, [sp, #0x3c] -_020E24C8: - ldr r0, [sp, #0x5c] - cmp r0, #0x0 - bne _020E24F8 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - mov r0, #0x0 - str r0, [sp, #0x3c] - str r0, [sp, #0x34] - str r0, [sp, #0x18] - b _020E2538 -_020E24F8: - add r4, r4, r0 - ldr r0, [sp, #0x58] - cmp r0, #0x0 - beq _020E2538 - ldrb r0, [sp, #0x62] - cmp r0, #0x7 - ldrne r0, [sp, #0x3c] - rsbne r0, r0, #0x0 - strne r0, [sp, #0x3c] - bne _020E2538 - ldr r0, [sp, #0x34] - rsbs r0, r0, #0x0 - str r0, [sp, #0x34] - ldr r0, [sp, #0x18] - rsc r0, r0, #0x0 - str r0, [sp, #0x18] -_020E2538: - cmp r5, #0x0 - beq _020E25F0 - ldrb r0, [sp, #0x62] - cmp r0, #0x7 - addls pc, pc, r0, lsl #0x2 - b _020E25DC -_020E2550: - .byte 0x06, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA - .byte 0x0E, 0x00, 0x00, 0xEA, 0x12, 0x00, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA - .byte 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x17, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0xC5, 0xE5, 0x14, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5, 0xB0, 0x00, 0xC5, 0xE1 - .byte 0x11, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x0E, 0x00, 0x00, 0xEA - .byte 0x34, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x18, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5 - .byte 0x09, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x06, 0x00, 0x00, 0xEA - .byte 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x34, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x85, 0xE5, 0x18, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5 -_020E25DC: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - ldreq r0, [sp, #0x44] - addeq r0, r0, #0x1 - streq r0, [sp, #0x44] -_020E25F0: - ldr r0, [sp, #0x40] - add r0, r0, #0x1 - str r0, [sp, #0x40] - b _020E2C2C -_020E2600: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - beq _020E261C - ldr r0, _020E2C78 ; =0x02106B78 - ldr r0, [r0, #0x0] - bl _f2d - b _020E2668 -_020E261C: - add r0, sp, #0x54 - str r0, [sp, #0x0] - ldr r0, [sp, #0x64] - mov r1, r9 - mov r2, r8 - add r3, sp, #0x5c - bl __strtold - ldr r2, [sp, #0x5c] - cmp r2, #0x0 - bne _020E2664 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - ldr r0, _020E2C78 ; =0x02106B78 - ldr r0, [r0, #0x0] - bl _f2d -_020E2660: - .byte 0x00, 0x00, 0x00, 0xEA -_020E2664: - add r4, r4, r2 -_020E2668: - cmp r5, #0x0 - beq _020E26B4 - ldrb r2, [sp, #0x62] - cmp r2, #0x0 - beq _020E2690 - cmp r2, #0x8 - beq _020E269C - cmp r2, #0x9 - stmeqia r5, {r0-r1} - b _020E26A0 -_020E2690: - bl _d2f -_020E2694: - .byte 0x00, 0x00, 0x85, 0xE5, 0x00, 0x00, 0x00, 0xEA -_020E269C: - stmia r5, {r0-r1} -_020E26A0: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - ldreq r0, [sp, #0x44] - addeq r0, r0, #0x1 - streq r0, [sp, #0x44] -_020E26B4: - ldr r0, [sp, #0x40] - add r0, r0, #0x1 - str r0, [sp, #0x40] - b _020E2C2C -_020E26C4: - .byte 0x61, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 - .byte 0x64, 0x00, 0x8D, 0x05, 0x00, 0x00, 0x55, 0xE3, 0x4B, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x5A, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x10, 0x00, 0x9D, 0xE5, 0x01, 0x70, 0xA0, 0xE3, 0x04, 0x00, 0x80, 0xE2 - .byte 0x04, 0xB0, 0x10, 0xE5, 0x10, 0x00, 0x8D, 0xE5, 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x50, 0xE3, 0x5C, 0x10, 0x8D, 0xE5, 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x5B, 0xE3 - .byte 0x00, 0x10, 0xC5, 0x15, 0x44, 0x01, 0x00, 0xEA, 0x00, 0x00, 0xE0, 0xE3, 0x2C, 0x50, 0x8D, 0xE5 - .byte 0x48, 0x00, 0x8D, 0xE5, 0x0D, 0x00, 0x00, 0xEA, 0x62, 0x00, 0xDD, 0xE5, 0x50, 0x60, 0xCD, 0xE5 - .byte 0x0A, 0x00, 0x50, 0xE3, 0xD0, 0x05, 0xDD, 0x11, 0x01, 0x00, 0xC5, 0x14, 0x04, 0x00, 0x00, 0x1A - .byte 0x05, 0x00, 0xA0, 0xE1, 0x50, 0x10, 0x8D, 0xE2, 0x01, 0x20, 0xA0, 0xE3, 0xD8, 0xF2, 0xFF, 0xEB - .byte 0x01, 0x50, 0x85, 0xE2, 0x5C, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0x80, 0xE2, 0x5C, 0x10, 0x8D, 0xE5 - .byte 0x64, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x40, 0xE2, 0x64, 0x00, 0x8D, 0xE5 - .byte 0x0E, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x5A, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x5B, 0xE1 - .byte 0x01, 0x70, 0xA0, 0x83, 0x00, 0x70, 0xA0, 0x93, 0x00, 0x00, 0x57, 0xE3, 0x07, 0x00, 0x00, 0x0A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE1, 0x48, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x56, 0xE1, 0xDD, 0xFF, 0xFF, 0x1A - .byte 0x50, 0x60, 0xCD, 0xE5, 0x5C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x5A, 0xE3, 0x0B, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x57, 0xE3, 0x09, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0x5A, 0xE3, 0x18, 0x01, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x5B, 0xE3 - .byte 0x30, 0x00, 0x8D, 0xE5, 0x10, 0x01, 0x00, 0x0A, 0x2C, 0x00, 0x9D, 0xE5, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x10, 0xC0, 0xE5, 0x0C, 0x01, 0x00, 0xEA, 0x00, 0x40, 0x84, 0xE0, 0x44, 0x00, 0x9D, 0xE5 - .byte 0x01, 0x00, 0x80, 0xE2, 0x44, 0x00, 0x8D, 0xE5, 0x17, 0x00, 0x00, 0xEA, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x5C, 0x00, 0x8D, 0xE5, 0x00, 0x50, 0xE0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x50, 0x60, 0xCD, 0xE5 - .byte 0x5C, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2, 0x5C, 0x00, 0x8D, 0xE5, 0x64, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x40, 0xE2, 0x64, 0x00, 0x8D, 0xE5, 0x06, 0x00, 0x00, 0x0A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE1, 0x05, 0x00, 0x56, 0xE1, 0xEF, 0xFF, 0xFF, 0x1A, 0x50, 0x60, 0xCD, 0xE5 - .byte 0x5C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0xF3, 0x00, 0x00, 0x0A, 0x40, 0x00, 0x9D, 0xE5 - .byte 0x01, 0x00, 0x80, 0xE2, 0x40, 0x00, 0x8D, 0xE5, 0xEB, 0x00, 0x00, 0xEA -_020E287C: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - bne _020E2C2C - ldr r5, _020E2C74 ; =0x0210430C - b _020E2894 -_020E2890: - add r4, r4, #0x1 -_020E2894: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - strb r0, [sp, #0x50] - ldrsb r1, [sp, #0x50] - cmp r1, #0x0 - blt _020E28BC - cmp r1, #0x80 - blt _020E28C4 -_020E28BC: - mov r0, #0x0 - b _020E28D0 -_020E28C4: - mov r0, r1, lsl #0x1 - ldrh r0, [r5, r0] - and r0, r0, #0x100 -_020E28D0: - cmp r0, #0x0 - bne _020E2890 - cmp r1, #0x25 - beq _020E2900 - mov r0, r8 - mov r2, #0x1 - blx r9 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - b _020E2C2C -_020E2900: - add r4, r4, #0x1 - b _020E2C2C -_020E2908: - .byte 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x1B, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x39, 0xFF, 0x2F, 0xE1, 0x50, 0x00, 0xCD, 0xE5, 0x05, 0x00, 0x00, 0xEA, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x50, 0x00, 0xCD, 0xE5, 0xD0, 0x15, 0xDD, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA - .byte 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA - .byte 0x0C, 0x03, 0x9F, 0xE5, 0x81, 0x20, 0xA0, 0xE1, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2 - .byte 0x00, 0x00, 0x50, 0xE3, 0xEC, 0xFF, 0xFF, 0x1A, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x39, 0xFF, 0x2F, 0xE1 -_020E2984: - cmp r5, #0x0 - beq _020E2B00 - cmp r10, #0x0 - beq _020E29AC - ldr r0, [sp, #0x10] - mov r7, #0x1 - add r0, r0, #0x4 - str r0, [sp, #0x10] - ldr r0, [r0, #-0x4] - sub r11, r0, #0x1 -_020E29AC: - ldr r0, [sp, #0x30] - mov r1, #0x0 - cmp r0, #0x0 - str r1, [sp, #0x5c] - beq _020E29CC - cmp r11, #0x0 - strneb r1, [r5, #0x0] - b _020E2C2C -_020E29CC: - mvn r0, #0x0 - str r5, [sp, #0x28] - str r0, [sp, #0x4c] - b _020E2A30 -_020E29DC: - strb r6, [sp, #0x50] - ldrsb r1, [sp, #0x50] - add r2, sp, #0x60 - and r3, r1, #0xff - add r2, r2, r3, asr #0x3 - ldrb r3, [r2, #0x8] - and r0, r1, #0x7 - mov r2, #0x1 - tst r3, r2, lsl r0 - beq _020E2A80 - ldrb r0, [sp, #0x62] - cmp r0, #0xa - strneb r1, [r5], #0x1 - bne _020E2A24 - mov r0, r5 - add r1, sp, #0x50 - bl mbtowc - add r5, r5, #0x2 -_020E2A24: - ldr r0, [sp, #0x5c] - add r1, r0, #0x1 - str r1, [sp, #0x5c] -_020E2A30: - ldr r0, [sp, #0x64] - cmp r0, #0x0 - sub r0, r0, #0x1 - str r0, [sp, #0x64] - beq _020E2A80 - cmp r10, #0x0 - beq _020E2A60 - cmp r11, r1 - movcs r7, #0x1 - movcc r7, #0x0 - cmp r7, #0x0 - beq _020E2A80 -_020E2A60: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - mov r6, r0 - ldr r0, [sp, #0x4c] - cmp r6, r0 - bne _020E29DC -_020E2A80: - strb r6, [sp, #0x50] - ldr r0, [sp, #0x5c] - cmp r0, #0x0 - beq _020E2AA0 - cmp r10, #0x0 - beq _020E2AD8 - cmp r7, #0x0 - bne _020E2AD8 -_020E2AA0: - mov r0, r8 - ldrsb r1, [sp, #0x50] - mov r2, #0x1 - blx r9 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - cmp r11, #0x0 - str r0, [sp, #0x30] - beq _020E2C2C - ldr r0, [sp, #0x28] - mov r1, #0x0 - strb r1, [r0, #0x0] - b _020E2C2C -_020E2AD8: - add r4, r4, r0 - ldrb r0, [sp, #0x62] - cmp r0, #0xa - mov r0, #0x0 - streqh r0, [r5, #0x0] - strneb r0, [r5, #0x0] - ldr r0, [sp, #0x44] - add r0, r0, #0x1 - str r0, [sp, #0x44] - b _020E2B9C -_020E2B00: - mov r0, #0x0 - str r0, [sp, #0x5c] - mvn r5, #0x0 - b _020E2B44 -_020E2B10: - strb r6, [sp, #0x50] - ldrsb r1, [sp, #0x50] - and r0, r1, #0x7 - and r2, r1, #0xff - add r1, sp, #0x60 - add r1, r1, r2, asr #0x3 - ldrb r2, [r1, #0x8] - mov r1, #0x1 - tst r2, r1, lsl r0 - beq _020E2B74 - ldr r0, [sp, #0x5c] - add r0, r0, #0x1 - str r0, [sp, #0x5c] -_020E2B44: - ldr r0, [sp, #0x64] - cmp r0, #0x0 - sub r0, r0, #0x1 - str r0, [sp, #0x64] - beq _020E2B74 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - mov r6, r0 - cmp r6, r5 - bne _020E2B10 -_020E2B74: - strb r6, [sp, #0x50] - ldr r0, [sp, #0x5c] - cmp r0, #0x0 - bne _020E2B98 - mov r0, r8 - ldrsb r1, [sp, #0x50] - mov r2, #0x1 - blx r9 - b _020E2C2C -_020E2B98: - add r4, r4, r0 -_020E2B9C: - ldr r0, [sp, #0x64] - cmp r0, #0x0 - blt _020E2BB8 - mov r0, r8 - ldrsb r1, [sp, #0x50] - mov r2, #0x1 - blx r9 -_020E2BB8: - ldr r0, [sp, #0x40] - add r0, r0, #0x1 - str r0, [sp, #0x40] - b _020E2C2C -_020E2BC8: - .byte 0x00, 0x00, 0x55, 0xE3, 0x16, 0x00, 0x00, 0x0A - .byte 0x62, 0x00, 0xDD, 0xE5, 0x07, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x12, 0x00, 0x00, 0xEA - .byte 0x06, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA - .byte 0x0D, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA - .byte 0x00, 0x40, 0x85, 0xE5, 0x08, 0x00, 0x00, 0xEA, 0xB0, 0x40, 0xC5, 0xE1, 0x06, 0x00, 0x00, 0xEA - .byte 0x00, 0x40, 0x85, 0xE5, 0x04, 0x00, 0x00, 0xEA, 0x00, 0x40, 0xC5, 0xE5, 0x02, 0x00, 0x00, 0xEA - .byte 0x00, 0x40, 0x85, 0xE5, 0xC4, 0x0F, 0xA0, 0xE1, 0x04, 0x00, 0x85, 0xE5 -_020E2C2C: - ldr r0, [sp, #0xc] - ldrsb r5, [r0, #0x0] - cmp r5, #0x0 - bne _020E1F70 -_020E2C3C: - mov r0, r8 - mov r1, #0x0 - mov r2, #0x2 - blx r9 - cmp r0, #0x0 - beq _020E2C68 - ldr r0, [sp, #0x40] - cmp r0, #0x0 - addeq sp, sp, #0x88 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,pc} -_020E2C68: - ldr r0, [sp, #0x44] - add sp, sp, #0x88 - ldmia sp!, {r3-r11,pc} - .balign 4 -_020E2C74: .word 0x0210430C -_020E2C78: .word 0x02106B78 - - arm_func_start __StringRead -__StringRead: ; 0x020E2C7C - cmp r2, #0x0 - beq _020E2C98 - cmp r2, #0x1 - beq _020E2CC8 - cmp r2, #0x2 - beq _020E2CF0 - b _020E2CF8 -_020E2C98: - ldr r1, [r0, #0x0] - ldrsb r2, [r1, #0x0] - cmp r2, #0x0 - bne _020E2CB8 - mov r1, #0x1 - str r1, [r0, #0x4] - sub r0, r1, #0x2 - bx lr -_020E2CB8: - add r1, r1, #0x1 - str r1, [r0, #0x0] - and r0, r2, #0xff - bx lr -_020E2CC8: - ldr r2, [r0, #0x4] - cmp r2, #0x0 - movne r2, #0x0 - strne r2, [r0, #0x4] - bne _020E2CE8 - ldr r2, [r0, #0x0] - sub r2, r2, #0x1 - str r2, [r0, #0x0] -_020E2CE8: - mov r0, r1 - bx lr -_020E2CF0: - ldr r0, [r0, #0x4] - bx lr -_020E2CF8: - mov r0, #0x0 - bx lr - - arm_func_start vsscanf -vsscanf: ; 0x020E2D00 - stmdb sp!, {lr} - sub sp, sp, #0xc - str r0, [sp, #0x4] - cmp r0, #0x0 - ldrnesb r0, [r0, #0x0] - mov lr, r1 - mov r3, r2 - cmpne r0, #0x0 - addeq sp, sp, #0xc - mvneq r0, #0x0 - ldmeqia sp!, {pc} - mov r12, #0x0 - str r12, [sp, #0x8] - ldr r0, _020E2D50 ; =__StringRead - add r1, sp, #0x4 - mov r2, lr - str r12, [sp, #0x0] - bl __sformatter - add sp, sp, #0xc - ldmia sp!, {pc} - .balign 4 -_020E2D50: .word __StringRead - - arm_func_start sscanf -sscanf: ; 0x020E2D54 - stmdb sp!, {r0-r3} - stmdb sp!, {r3,lr} - add r2, sp, #0xc - bic r2, r2, #0x3 - ldr r1, [sp, #0xc] - add r2, r2, #0x4 - bl vsscanf - ldmia sp!, {r3,lr} - add sp, sp, #0x10 - bx lr - - arm_func_start raise -raise: ; 0x020E2D7C - stmdb sp!, {r3-r5,lr} - mov r5, r0 - cmp r5, #0x1 - blt _020E2D94 - cmp r5, #0x7 - ble _020E2D9C -_020E2D94: - mvn r0, #0x0 - ldmia sp!, {r3-r5,pc} -_020E2D9C: - ldr r0, _020E2E98 ; =0x021D7178 - bl OS_TryLockMutex -_020E2DA4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A, 0xE8, 0x00, 0x9F, 0xE5 - .byte 0xE8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0xE4, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x1C, 0x30, 0x81, 0xE5, 0x1C, 0x20, 0x80, 0xE5, 0x15, 0x00, 0x00, 0xEA - .byte 0xC4, 0x00, 0x9F, 0xE5, 0xC4, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5, 0x1C, 0x10, 0x91, 0xE5 - .byte 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A, 0xB0, 0x00, 0x9F, 0xE5 - .byte 0x1C, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2, 0x1C, 0x10, 0x80, 0xE5, 0x09, 0x00, 0x00, 0xEA - .byte 0x90, 0x00, 0x9F, 0xE5, 0x81, 0xA4, 0xFF, 0xEB, 0x8C, 0x00, 0x9F, 0xE5, 0x8C, 0x10, 0x9F, 0xE5 - .byte 0x04, 0x20, 0x90, 0xE5, 0x88, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x1C, 0x30, 0x81, 0xE5, 0x1C, 0x20, 0x80, 0xE5, 0x78, 0x10, 0x9F, 0xE5, 0x01, 0x20, 0x45, 0xE2 - .byte 0x02, 0x41, 0x91, 0xE7, 0x01, 0x00, 0x54, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x02, 0x01, 0x81, 0x17 - .byte 0x5C, 0x00, 0x9F, 0xE5, 0x1C, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x51, 0xE2, 0x1C, 0x10, 0x80, 0xE5 - .byte 0x01, 0x00, 0x00, 0x1A, 0x3C, 0x00, 0x9F, 0xE5, 0x50, 0xA4, 0xFF, 0xEB, 0x01, 0x00, 0x54, 0xE3 - .byte 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x55, 0x03, 0x01, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0xA0, 0xE3, 0x38, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0xA0, 0xE3, 0xB9, 0xEC, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1, 0x34, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x38, 0x80, 0xBD, 0xE8 -_020E2E98: .word 0x021D7178 -_020E2E9C: - .byte 0x98, 0x34, 0x1D, 0x02 - .byte 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0xAC, 0x74, 0x1D, 0x02 - - arm_func_start strlen -strlen: ; 0x020E2EAC - mvn r2, #0x0 -_020E2EB0: - ldrsb r1, [r0], #0x1 - add r2, r2, #0x1 - cmp r1, #0x0 - bne _020E2EB0 - mov r0, r2 - bx lr - - arm_func_start strcpy -strcpy: ; 0x020E2EC8 - stmdb sp!, {r3-r5,lr} - and r4, r1, #0x3 - and r3, r0, #0x3 - mov r2, r0 - cmp r3, r4 - bne _020E2F64 - cmp r4, #0x0 - beq _020E2F20 - ldrb r3, [r1, #0x0] - strb r3, [r0, #0x0] - cmp r3, #0x0 - ldmeqia sp!, {r3-r5,pc} -_020E2EF8: - .byte 0x03, 0x40, 0x74, 0xE2, 0x05, 0x00, 0x00, 0x0A - .byte 0x01, 0x30, 0xF1, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x01, 0x30, 0xE2, 0xE5, 0x38, 0x80, 0xBD, 0x08 - .byte 0x01, 0x40, 0x54, 0xE2, 0xF9, 0xFF, 0xFF, 0x1A, 0x01, 0x20, 0x82, 0xE2, 0x01, 0x10, 0x81, 0xE2 -_020E2F20: - ldr r5, [r1, #0x0] - ldr r3, _020E2F88 ; =0xFEFEFEFF - mvn r4, r5 - add lr, r5, r3 - ldr ip, _020E2F8C ; =0x80808080 - and r4, lr, r4 - tst r4, r12 - bne _020E2F64 - sub r2, r2, #0x4 -_020E2F44: - str r5, [r2, #0x4]! - ldr r5, [r1, #0x4]! - add r4, r5, r3 - mvn lr, r5 - and lr, r4, lr - tst lr, r12 - beq _020E2F44 - add r2, r2, #0x4 -_020E2F64: - ldrb r3, [r1, #0x0] - strb r3, [r2, #0x0] - cmp r3, #0x0 - ldmeqia sp!, {r3-r5,pc} -_020E2F74: - .byte 0x01, 0x30, 0xF1, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x01, 0x30, 0xE2, 0xE5 - .byte 0xFB, 0xFF, 0xFF, 0x1A, 0x38, 0x80, 0xBD, 0xE8 -_020E2F88: .word 0xFEFEFEFF -_020E2F8C: .word 0x80808080 - - arm_func_start strncpy -strncpy: ; 0x020E2F90 - stmdb sp!, {r3,lr} - mov lr, r0 - cmp r2, #0x0 - ldmeqia sp!, {r3,pc} -_020E2FA0: - .byte 0xD1, 0x30, 0xD1, 0xE0, 0x0E, 0xC0, 0xA0, 0xE1, 0x01, 0x30, 0xCE, 0xE4, 0xD0, 0x30, 0xDC, 0xE1 - .byte 0x00, 0x00, 0x53, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x01, 0x20, 0x52, 0xE2, 0x08, 0x80, 0xBD, 0x08 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x10, 0xCE, 0xE4, 0x01, 0x20, 0x52, 0xE2, 0xFC, 0xFF, 0xFF, 0x1A - .byte 0x08, 0x80, 0xBD, 0xE8, 0x01, 0x20, 0x52, 0xE2, 0xF0, 0xFF, 0xFF, 0x1A, 0x08, 0x80, 0xBD, 0xE8 - - arm_func_start strcat -strcat: ; 0x020E2FE0 - mov r3, r0 -_020E2FE4: - ldrsb r2, [r3], #0x1 - cmp r2, #0x0 - bne _020E2FE4 - sub r3, r3, #0x1 -_020E2FF4: - ldrsb r2, [r1], #0x1 - mov r12, r3 - strb r2, [r3], #0x1 - ldrsb r2, [r12, #0x0] - cmp r2, #0x0 - bne _020E2FF4 - bx lr - - arm_func_start strncat -strncat: ; 0x020E3010 - stmdb sp!, {r3,lr} - mov r12, r0 -_020E3018: - ldrsb r3, [r12], #0x1 - cmp r3, #0x0 - bne _020E3018 - cmp r2, #0x0 - sub r12, r12, #0x1 - beq _020E3054 -_020E3030: - ldrsb r3, [r1], #0x1 - mov lr, r12 - strb r3, [r12], #0x1 - ldrsb r3, [lr, #0x0] - cmp r3, #0x0 - subeq r12, r12, #0x1 - beq _020E3054 - subs r2, r2, #0x1 - bne _020E3030 -_020E3054: - mov r1, #0x0 - strb r1, [r12, #0x0] - ldmia sp!, {r3,pc} - - arm_func_start strcmp -strcmp: ; 0x020E3060 - stmdb sp!, {r4,lr} - ldrb r2, [r0, #0x0] - ldrb r3, [r1, #0x0] - subs r3, r2, r3 - movne r0, r3 - ldmneia sp!, {r4,pc} -_020E3078: - .byte 0x03, 0x40, 0x00, 0xE2, 0x03, 0x30, 0x01, 0xE2 - .byte 0x04, 0x00, 0x53, 0xE1, 0x2C, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x54, 0xE3, 0x10, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x52, 0xE3, 0x00, 0x00, 0xA0, 0x03, 0x10, 0x80, 0xBD, 0x08, 0x03, 0x40, 0x74, 0xE2 - .byte 0x09, 0x00, 0x00, 0x0A, 0x01, 0x30, 0xF0, 0xE5, 0x01, 0x20, 0xF1, 0xE5, 0x02, 0x20, 0x53, 0xE0 - .byte 0x02, 0x00, 0xA0, 0x11, 0x10, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x53, 0xE3, 0x00, 0x00, 0xA0, 0x03 - .byte 0x10, 0x80, 0xBD, 0x08, 0x01, 0x40, 0x54, 0xE2, 0xF5, 0xFF, 0xFF, 0x1A, 0x01, 0x00, 0x80, 0xE2 - .byte 0x01, 0x10, 0x81, 0xE2, 0x00, 0x20, 0x90, 0xE5, 0x8C, 0x30, 0x9F, 0xE5, 0x02, 0x40, 0xE0, 0xE1 - .byte 0x03, 0xE0, 0x82, 0xE0, 0x84, 0xC0, 0x9F, 0xE5, 0x04, 0x40, 0x0E, 0xE0, 0x0C, 0x00, 0x14, 0xE1 - .byte 0x00, 0x40, 0x91, 0xE5, 0x0B, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x52, 0xE1, 0x06, 0x00, 0x00, 0x1A - .byte 0x04, 0x20, 0xB0, 0xE5, 0x04, 0x40, 0xB1, 0xE5, 0x03, 0xE0, 0x82, 0xE0, 0x0C, 0x00, 0x1E, 0xE1 - .byte 0x04, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x52, 0xE1, 0xF8, 0xFF, 0xFF, 0x0A, 0x01, 0x00, 0x40, 0xE2 - .byte 0x01, 0x10, 0x41, 0xE2, 0x04, 0x00, 0x00, 0xEA, 0x00, 0x20, 0xD0, 0xE5, 0x00, 0x30, 0xD1, 0xE5 - .byte 0x03, 0x30, 0x52, 0xE0, 0x03, 0x00, 0xA0, 0x11, 0x10, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x52, 0xE3 - .byte 0x00, 0x00, 0xA0, 0x03, 0x10, 0x80, 0xBD, 0x08, 0x01, 0x30, 0xF0, 0xE5, 0x01, 0x20, 0xF1, 0xE5 - .byte 0x02, 0x20, 0x53, 0xE0, 0x02, 0x00, 0xA0, 0x11, 0x10, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x53, 0xE3 - .byte 0xF8, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x80, 0xBD, 0xE8, 0xFF, 0xFE, 0xFE, 0xFE - .byte 0x80, 0x80, 0x80, 0x80 - - arm_func_start strncmp -strncmp: ; 0x020E3174 - cmp r2, #0x0 - beq _020E31A0 -_020E317C: - ldrb r12, [r1], #0x1 - ldrb r3, [r0], #0x1 - cmp r3, r12 - subne r0, r3, r12 - bxne lr - cmp r3, #0x0 - beq _020E31A0 - subs r2, r2, #0x1 - bne _020E317C -_020E31A0: - mov r0, #0x0 - bx lr - - arm_func_start strchr -strchr: ; 0x020E31A8 - ldrsb r2, [r0], #0x1 - mov r1, r1, lsl #0x18 - mov r1, r1, asr #0x18 - cmp r2, #0x0 - beq _020E31D4 -_020E31BC: - cmp r2, r1 - subeq r0, r0, #0x1 - bxeq lr - ldrsb r2, [r0], #0x1 - cmp r2, #0x0 - bne _020E31BC -_020E31D4: - cmp r1, #0x0 - movne r0, #0x0 - subeq r0, r0, #0x1 - bx lr - - arm_func_start strspn -strspn: ; 0x020E31E4 - stmdb sp!, {r4,lr} - sub sp, sp, #0x20 - add r12, sp, #0x0 - mov r3, #0x8 - mov r2, #0x0 -_020E31F8: - strb r2, [r12, #0x0] - strb r2, [r12, #0x1] - strb r2, [r12, #0x2] - strb r2, [r12, #0x3] - add r12, r12, #0x4 - subs r3, r3, #0x1 - bne _020E31F8 - ldrb r3, [r1, #0x0] - add r4, r1, #0x1 - cmp r3, #0x0 - beq _020E3254 - add lr, sp, #0x0 - mov r2, #0x1 -_020E322C: - and r12, r3, #0xff - and r1, r3, #0x7 - mov r1, r2, lsl r1 - ldrb r3, [lr, r12, asr #0x3] - and r1, r1, #0xff - orr r1, r3, r1 - strb r1, [lr, r12, asr #0x3] - ldrb r3, [r4], #0x1 - cmp r3, #0x0 - bne _020E322C -_020E3254: - ldrb r1, [r0, #0x0] - add r4, r0, #0x1 - cmp r1, #0x0 - beq _020E3294 - add r12, sp, #0x0 - mov r2, #0x1 -_020E326C: - and r3, r1, #0xff - and r1, r1, #0x7 - mov r1, r2, lsl r1 - ldrb r3, [r12, r3, asr #0x3] - and r1, r1, #0xff - tst r3, r1 - bne _020E3294 - ldrb r1, [r4], #0x1 - cmp r1, #0x0 - bne _020E326C -_020E3294: - sub r0, r4, r0 - sub r0, r0, #0x1 - add sp, sp, #0x20 - ldmia sp!, {r4,pc} - - arm_func_start strstr -strstr: ; 0x020E32A4 - stmdb sp!, {r4,lr} - cmp r1, #0x0 - ldrneb r2, [r1, #0x0] - cmpne r2, #0x0 - ldmeqia sp!, {r4,pc} -_020E32B8: - .byte 0x00, 0x30, 0xD0, 0xE5, 0x01, 0x40, 0x80, 0xE2 - .byte 0x00, 0x00, 0x53, 0xE3, 0x0F, 0x00, 0x00, 0x0A, 0x02, 0x00, 0x53, 0xE1, 0x0A, 0x00, 0x00, 0x1A - .byte 0x04, 0xE0, 0xA0, 0xE1, 0x01, 0xC0, 0x81, 0xE2, 0x01, 0x30, 0xDC, 0xE4, 0x01, 0x00, 0xDE, 0xE4 - .byte 0x03, 0x00, 0x50, 0xE1, 0x01, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x50, 0xE3, 0xF9, 0xFF, 0xFF, 0x1A - .byte 0x00, 0x00, 0x53, 0xE3, 0x01, 0x00, 0x44, 0x02, 0x10, 0x80, 0xBD, 0x08, 0x01, 0x30, 0xD4, 0xE4 - .byte 0x00, 0x00, 0x53, 0xE3, 0xEF, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x80, 0xBD, 0xE8 - - arm_func_start __strtold -__strtold: ; 0x020E3310 - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0xa8 - ldr r4, [sp, #0xd0] - mov r10, #0x0 - str r4, [sp, #0xd0] - str r0, [sp, #0x0] - add r6, sp, #0x80 - mov r9, r1 - mov r8, r2 - str r3, [sp, #0x4] - mov r4, r10 - str r10, [sp, #0x2c] - mov r5, #0x1 - mov r0, #0x4 -_020E3348: - strh r10, [r6, #0x0] - strh r10, [r6, #0x2] - strh r10, [r6, #0x4] - strh r10, [r6, #0x6] - add r6, r6, #0x8 - subs r0, r0, #0x1 - bne _020E3348 - mov r0, #0x0 - str r0, [sp, #0x28] - strh r10, [r6, #0x0] - strh r10, [r6, #0x2] - ldr r2, [sp, #0x28] - ldr r1, [sp, #0xd0] - strh r10, [r6, #0x4] - str r2, [r1, #0x0] - mov r1, r2 - mov r0, r8 - str r1, [sp, #0x24] - str r1, [sp, #0x20] - str r1, [sp, #0x1c] - str r1, [sp, #0x18] - str r1, [sp, #0x10] - str r1, [sp, #0xc] - str r1, [sp, #0x8] - add r4, r4, #0x1 - blx r9 - mov r1, r0 - ldr r7, _020E42F0 ; =0x02104439 - add r0, sp, #0x4d - mov r6, #0x4 -_020E33C0: - ldrb r3, [r7, #0x0] - ldrb r2, [r7, #0x1] - add r7, r7, #0x2 - strb r3, [r0, #0x0] - strb r2, [r0, #0x1] - add r0, r0, #0x2 - subs r6, r6, #0x1 - bne _020E33C0 - ldrb r3, [r7, #0x0] - ldr r2, _020E42F4 ; =0x02104434 - strb r3, [r0, #0x0] - ldrb r3, [r2, #0x1] - ldrb r0, [r2, #0x2] - ldrb r6, [r2, #0x0] - strb r3, [sp, #0x31] - strb r0, [sp, #0x32] - ldrb r3, [r2, #0x3] - ldrb r0, [r2, #0x4] - strb r6, [sp, #0x30] - strb r3, [sp, #0x33] - strb r0, [sp, #0x34] - b _020E4104 -_020E3418: - cmp r5, #0x100 - bgt _020E3490 - bge _020E3B98 - cmp r5, #0x20 - bgt _020E3474 - bge _020E3A6C - cmp r5, #0x8 - bgt _020E3468 - cmp r5, #0x0 - addge pc, pc, r5, lsl #0x2 - b _020E4104 -_020E3444: - .byte 0x2E, 0x03, 0x00, 0xEA, 0x21, 0x00, 0x00, 0xEA, 0x19, 0x01, 0x00, 0xEA - .byte 0x2B, 0x03, 0x00, 0xEA, 0x43, 0x01, 0x00, 0xEA, 0x29, 0x03, 0x00, 0xEA, 0x28, 0x03, 0x00, 0xEA - .byte 0x27, 0x03, 0x00, 0xEA, 0x49, 0x01, 0x00, 0xEA -_020E3468: - cmp r5, #0x10 - beq _020E3A34 - b _020E4104 -_020E3474: - cmp r5, #0x40 - bgt _020E3484 - beq _020E3AF8 - b _020E4104 -_020E3484: - cmp r5, #0x80 - beq _020E3B44 - b _020E4104 -_020E3490: - cmp r5, #0x2000 - bgt _020E34B8 - bge _020E36EC - cmp r5, #0x200 - bgt _020E34AC - beq _020E3BF8 - b _020E4104 -_020E34AC: - cmp r5, #0x400 - beq _020E3C20 - b _020E4104 -_020E34B8: - cmp r5, #0x4000 - bgt _020E34C8 - beq _020E35F4 - b _020E4104 -_020E34C8: - cmp r5, #0x8000 - beq _020E3C98 - b _020E4104 -_020E34D4: - .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 - .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1 - .byte 0x00, 0x0E, 0x9F, 0xE5, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x2C, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2 - .byte 0x2C, 0x00, 0x8D, 0xE5, 0xF6, 0x02, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA - .byte 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x01, 0x00, 0xA0, 0xE1, 0x01, 0x00, 0x00, 0xEA - .byte 0xB4, 0x0D, 0x9F, 0xE5, 0x01, 0x00, 0xD0, 0xE7, 0x49, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0xCA - .byte 0x15, 0x00, 0x00, 0xAA, 0x2D, 0x00, 0x50, 0xE3, 0x23, 0x00, 0x00, 0xCA, 0x2B, 0x00, 0x50, 0xE3 - .byte 0x21, 0x00, 0x00, 0xBA, 0x07, 0x00, 0x00, 0x0A, 0x2D, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A - .byte 0x1D, 0x00, 0x00, 0xEA, 0x4E, 0x00, 0x50, 0xE3, 0x13, 0x00, 0x00, 0x0A, 0x1A, 0x00, 0x00, 0xEA - .byte 0x01, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x8D, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x01, 0x00, 0xA0, 0xE3, 0x18, 0x00, 0x8D, 0xE5, 0xD5, 0x02, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE1, 0x01, 0x59, 0xA0, 0xE3, 0xCD, 0x02, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE1, 0x02, 0x5A, 0xA0, 0xE3, 0xC5, 0x02, 0x00, 0xEA, 0x02, 0x50, 0xA0, 0xE3 - .byte 0xC3, 0x02, 0x00, 0xEA -_020E35F4: - mov r5, #0x1 - add r7, sp, #0x4d - add r0, sp, #0x76 - mov r6, #0x4 -_020E3604: - ldrb r3, [r7, #0x0] - ldrb r2, [r7, #0x1] - add r7, r7, #0x2 - strb r3, [r0, #0x0] - strb r2, [r0, #0x1] - add r0, r0, #0x2 - subs r6, r6, #0x1 - bne _020E3604 - ldrb r2, [r7, #0x0] - add r6, sp, #0x77 - ldr r7, _020E42FC ; =0x0210428C - strb r2, [r0, #0x0] - b _020E3658 -_020E3638: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r6, r6, #0x1 - add r5, r5, #0x1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 -_020E3658: - cmp r5, #0x8 - bge _020E3688 - cmp r1, #0x0 - blt _020E3670 - cmp r1, #0x80 - blt _020E3678 -_020E3670: - mov r2, r1 - b _020E367C -_020E3678: - ldrb r2, [r7, r1] -_020E367C: - ldrsb r0, [r6, #0x0] - cmp r0, r2 - beq _020E3638 -_020E3688: - cmp r5, #0x3 - cmpne r5, #0x8 - bne _020E36E4 - ldr r0, [sp, #0x28] - cmp r0, #0x0 - beq _020E36B8 - ldr r1, _020E4300 ; =0x02106B74 - mov r0, #0x0 - ldr r1, [r1, #0x0] - bl _fsub - bl _f2d - b _020E36C4 -_020E36B8: - ldr r0, _020E4300 ; =0x02106B74 - ldr r0, [r0, #0x0] - bl _f2d -_020E36C4: - ldr r2, [sp, #0x2c] - add r3, r2, r5 - ldr r2, [sp, #0x18] - add r3, r2, r3 - ldr r2, [sp, #0x4] - add sp, sp, #0xa8 - str r3, [r2, #0x0] - ldmia sp!, {r3-r11,pc} -_020E36E4: - mov r5, #0x1000 - b _020E4104 -_020E36EC: - ldrb r3, [sp, #0x30] - ldrb r0, [sp, #0x32] - ldrb r2, [sp, #0x31] - strb r3, [sp, #0x40] - strb r0, [sp, #0x42] - ldrb r3, [sp, #0x33] - ldrb r0, [sp, #0x34] - strb r2, [sp, #0x41] - mov r5, #0x1 - strb r0, [sp, #0x44] - mov r6, #0x0 - add r2, sp, #0x56 - strb r3, [sp, #0x43] - mov r0, #0x8 -_020E3724: - strb r6, [r2, #0x0] - strb r6, [r2, #0x1] - strb r6, [r2, #0x2] - strb r6, [r2, #0x3] - add r2, r2, #0x4 - subs r0, r0, #0x1 - bne _020E3724 - add r7, sp, #0x41 - b _020E3768 -_020E3748: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r7, r7, #0x1 - add r5, r5, #0x1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 -_020E3768: - cmp r5, #0x4 - bge _020E379C - cmp r1, #0x0 - blt _020E3780 - cmp r1, #0x80 - blt _020E3788 -_020E3780: - mov r2, r1 - b _020E3790 -_020E3788: - ldr r0, _020E42FC ; =0x0210428C - ldrb r2, [r0, r1] -_020E3790: - ldrsb r0, [r7, #0x0] - cmp r0, r2 - beq _020E3748 -_020E379C: - sub r0, r5, #0x3 - cmp r0, #0x1 - bhi _020E38B0 - cmp r5, #0x4 - bne _020E3854 - ldr r7, _020E42F8 ; =0x0210430C - b _020E37DC -_020E37B8: - add r0, sp, #0x56 - strb r1, [r0, r6] - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r6, r6, #0x1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 -_020E37DC: - cmp r6, #0x20 - bge _020E3844 - cmp r1, #0x0 - blt _020E37F4 - cmp r1, #0x80 - blt _020E37FC -_020E37F4: - mov r0, #0x0 - b _020E3808 -_020E37FC: - mov r0, r1, lsl #0x1 - ldrh r0, [r7, r0] - and r0, r0, #0x8 -_020E3808: - cmp r0, #0x0 - bne _020E37B8 - cmp r1, #0x0 - blt _020E3820 - cmp r1, #0x80 - blt _020E3828 -_020E3820: - mov r0, #0x0 - b _020E3834 -_020E3828: - mov r0, r1, lsl #0x1 - ldrh r0, [r7, r0] - and r0, r0, #0x1 -_020E3834: - cmp r0, #0x0 - bne _020E37B8 - cmp r1, #0x2e - beq _020E37B8 -_020E3844: - cmp r1, #0x29 - movne r5, #0x1000 - bne _020E4104 - add r6, r6, #0x1 -_020E3854: - add r0, sp, #0x56 - mov r1, #0x0 - strb r1, [r0, r6] - ldr r1, [sp, #0x28] - cmp r1, #0x0 - beq _020E3888 - bl nan - mov r2, r0 - mov r0, #0x0 - mov r3, r1 - mov r1, r0 - bl _dsub -_020E3884: - .byte 0x00, 0x00, 0x00, 0xEA -_020E3888: - bl nan - ldr r2, [sp, #0x2c] - add r2, r2, r5 - add r3, r6, r2 - ldr r2, [sp, #0x18] - add r3, r2, r3 - ldr r2, [sp, #0x4] - add sp, sp, #0xa8 - str r3, [r2, #0x0] - ldmia sp!, {r3-r11,pc} -_020E38B0: - mov r5, #0x1000 - b _020E4104 -_020E38B8: - .byte 0x2E, 0x00, 0x51, 0xE3, 0x07, 0x00, 0x00, 0x1A - .byte 0x10, 0x50, 0xA0, 0xE3, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x08, 0x02, 0x00, 0xEA - .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA - .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1, 0xF4, 0x09, 0x9F, 0xE5 - .byte 0xB2, 0x00, 0x90, 0xE1, 0x08, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x5A, 0xA0, 0x03 - .byte 0xFB, 0x01, 0x00, 0x0A, 0x30, 0x00, 0x51, 0xE3, 0x10, 0x00, 0x00, 0x1A, 0x01, 0x40, 0x84, 0xE2 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x03, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0x00, 0xAA, 0xB0, 0x29, 0x9F, 0xE5, 0x00, 0x00, 0xD2, 0xE7, 0x58, 0x00, 0x50, 0xE3 - .byte 0x02, 0x59, 0xA0, 0x03, 0x01, 0xA0, 0xA0, 0x03, 0x04, 0x50, 0xA0, 0x13, 0xE8, 0x01, 0x00, 0xEA - .byte 0x08, 0x50, 0xA0, 0xE3, 0xE6, 0x01, 0x00, 0xEA, 0x30, 0x00, 0x51, 0xE3, 0x08, 0x50, 0xA0, 0x13 - .byte 0xE3, 0x01, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xDC, 0x01, 0x00, 0xEA - .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA - .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1, 0x44, 0x09, 0x9F, 0xE5 - .byte 0xB2, 0x00, 0x90, 0xE1, 0x08, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x1A - .byte 0x2E, 0x00, 0x51, 0xE3, 0x40, 0x50, 0xA0, 0x13, 0xCD, 0x01, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x20, 0x50, 0xA0, 0xE3, 0x01, 0x40, 0x84, 0xE2 - .byte 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xC5, 0x01, 0x00, 0xEA, 0x84, 0x20, 0xDD, 0xE5 - .byte 0x14, 0x00, 0x52, 0xE3, 0x1C, 0x00, 0x9D, 0x25, 0x01, 0x00, 0x80, 0x22, 0x1C, 0x00, 0x8D, 0x25 - .byte 0x04, 0x00, 0x00, 0x2A, 0x01, 0x00, 0x82, 0xE2, 0x84, 0x00, 0xCD, 0xE5, 0x80, 0x00, 0x8D, 0xE2 - .byte 0x02, 0x00, 0x80, 0xE0, 0x05, 0x10, 0xC0, 0xE5, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0xB3, 0x01, 0x00, 0xEA -_020E3A34: - cmp r1, #0x0 - blt _020E3A44 - cmp r1, #0x80 - blt _020E3A4C -_020E3A44: - mov r0, #0x0 - b _020E3A5C -_020E3A4C: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =0x0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3A5C: - cmp r0, #0x0 - moveq r5, #0x1000 - movne r5, #0x20 - b _020E4104 -_020E3A6C: - cmp r1, #0x0 - blt _020E3A7C - cmp r1, #0x80 - blt _020E3A84 -_020E3A7C: - mov r0, #0x0 - b _020E3A94 -_020E3A84: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =0x0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3A94: - cmp r0, #0x0 - moveq r5, #0x40 - beq _020E4104 - ldrb r3, [sp, #0x84] - cmp r3, #0x14 - bhs _020E3ADC - cmp r1, #0x30 - cmpeq r3, #0x0 - beq _020E3AD0 - ldrb r2, [sp, #0x84] - add r0, sp, #0x80 - add r0, r0, r3 - add r2, r2, #0x1 - strb r2, [sp, #0x84] - strb r1, [r0, #0x5] -_020E3AD0: - ldr r0, [sp, #0x1c] - sub r0, r0, #0x1 - str r0, [sp, #0x1c] -_020E3ADC: - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3AF8: - cmp r1, #0x0 - blt _020E3B08 - cmp r1, #0x80 - blt _020E3B10 -_020E3B08: - mov r0, r1 - b _020E3B18 -_020E3B10: - ldr r0, _020E42FC ; =0x0210428C - ldrb r0, [r0, r1] -_020E3B18: - cmp r0, #0x45 - movne r5, #0x800 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r5, #0x80 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3B44: - cmp r1, #0x2b - bne _020E3B68 - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - b _020E3B90 -_020E3B68: - cmp r1, #0x2d - bne _020E3B90 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - mov r0, #0x1 - str r0, [sp, #0x24] -_020E3B90: - mov r5, #0x100 - b _020E4104 -_020E3B98: - cmp r1, #0x0 - blt _020E3BA8 - cmp r1, #0x80 - blt _020E3BB0 -_020E3BA8: - mov r0, #0x0 - b _020E3BC0 -_020E3BB0: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =0x0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3BC0: - cmp r0, #0x0 - moveq r5, #0x1000 - beq _020E4104 - cmp r1, #0x30 - movne r5, #0x400 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r5, #0x200 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3BF8: - cmp r1, #0x30 - movne r5, #0x400 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3C20: - cmp r1, #0x0 - blt _020E3C30 - cmp r1, #0x80 - blt _020E3C38 -_020E3C30: - mov r0, #0x0 - b _020E3C48 -_020E3C38: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =0x0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3C48: - cmp r0, #0x0 - moveq r5, #0x800 - beq _020E4104 - ldr r0, [sp, #0x20] - sub r2, r1, #0x30 - mov r1, #0xa - mla r0, r1, r0, r2 - ldr r1, _020E4304 ; =0x00007FFF - str r0, [sp, #0x20] - cmp r0, r1 - ldrgt r0, [sp, #0xd0] - movgt r1, #0x1 - strgt r1, [r0, #0x0] - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3C98: - cmp r10, #0x20 - bgt _020E3CE8 - bge _020E3FBC - cmp r10, #0x8 - bgt _020E3CDC - cmp r10, #0x0 - addge pc, pc, r10, lsl #0x2 - b _020E4104 -_020E3CB8: - .byte 0x11, 0x01, 0x00, 0xEA, 0x12, 0x00, 0x00, 0xEA - .byte 0x25, 0x00, 0x00, 0xEA, 0x0E, 0x01, 0x00, 0xEA, 0x2D, 0x00, 0x00, 0xEA, 0x0C, 0x01, 0x00, 0xEA - .byte 0x0B, 0x01, 0x00, 0xEA, 0x0A, 0x01, 0x00, 0xEA, 0x6D, 0x00, 0x00, 0xEA -_020E3CDC: - cmp r10, #0x10 - beq _020E3F70 - b _020E4104 -_020E3CE8: - cmp r10, #0x80 - bgt _020E3D00 - bge _020E4064 - cmp r10, #0x40 - beq _020E4004 - b _020E4104 -_020E3D00: - cmp r10, #0x100 - beq _020E408C - b _020E4104 -_020E3D0C: - .byte 0x00, 0x10, 0xA0, 0xE3 - .byte 0x45, 0x00, 0x8D, 0xE2, 0x14, 0x00, 0x8D, 0xE5, 0x00, 0x10, 0xC0, 0xE5, 0x01, 0x10, 0xC0, 0xE5 - .byte 0x02, 0x10, 0xC0, 0xE5, 0x03, 0x10, 0xC0, 0xE5, 0x04, 0x10, 0xC0, 0xE5, 0x05, 0x10, 0xC0, 0xE5 - .byte 0x06, 0x10, 0xC0, 0xE5, 0x07, 0x10, 0xC0, 0xE5, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x08, 0x10, 0x8D, 0xE5, 0x01, 0xB0, 0xA0, 0xE1, 0x02, 0xA0, 0xA0, 0xE3, 0x01, 0x40, 0x84, 0xE2 - .byte 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xE9, 0x00, 0x00, 0xEA, 0x30, 0x00, 0x51, 0xE3 - .byte 0x04, 0xA0, 0xA0, 0x13, 0xE6, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0xDF, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 - .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1 - .byte 0x50, 0x05, 0x9F, 0xE5, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0B, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 - .byte 0x0A, 0x00, 0x00, 0x1A, 0x2E, 0x00, 0x51, 0xE3, 0x10, 0xA0, 0xA0, 0x13, 0xD0, 0x00, 0x00, 0x1A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x08, 0xA0, 0xA0, 0xE3 - .byte 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xC8, 0x00, 0x00, 0xEA - .byte 0x08, 0x20, 0x9D, 0xE5, 0x0E, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x52, 0xE1, 0x21, 0x00, 0x00, 0x2A - .byte 0x02, 0x00, 0xA0, 0xE1, 0x01, 0x00, 0x80, 0xE2, 0x08, 0x00, 0x8D, 0xE5, 0x14, 0x00, 0x9D, 0xE5 - .byte 0xAB, 0x2F, 0x8B, 0xE0, 0x00, 0x00, 0x51, 0xE3, 0xC2, 0x00, 0xD0, 0xE7, 0x03, 0x00, 0x00, 0xBA - .byte 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xAA, 0xDC, 0x24, 0x9F, 0xE5, 0x01, 0x10, 0xD2, 0xE7 - .byte 0x41, 0x00, 0x51, 0xE3, 0x37, 0x10, 0x41, 0xA2, 0x30, 0x10, 0x41, 0xB2, 0xAB, 0x2F, 0xA0, 0xE1 - .byte 0xFF, 0x30, 0x01, 0xE2, 0x8B, 0x1F, 0x62, 0xE0, 0xE1, 0x1F, 0x92, 0xE0, 0x03, 0x12, 0xA0, 0x01 - .byte 0xAB, 0x2F, 0x8B, 0xE0, 0x03, 0x00, 0x80, 0x11, 0xFF, 0x10, 0x01, 0x02, 0x01, 0x00, 0x80, 0x01 - .byte 0x14, 0x10, 0x9D, 0xE5, 0x01, 0xB0, 0x8B, 0xE2, 0xC2, 0x00, 0xC1, 0xE7, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE1, 0xA2, 0x00, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x9B, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 - .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1 - .byte 0x40, 0x04, 0x9F, 0xE5, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0B, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 - .byte 0x10, 0xA0, 0xA0, 0x03, 0x8E, 0x00, 0x00, 0x0A, 0x08, 0x20, 0x9D, 0xE5, 0x0E, 0x00, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x52, 0xE1, 0x1E, 0x00, 0x00, 0x2A, 0x14, 0x00, 0x9D, 0xE5, 0xAB, 0x2F, 0x8B, 0xE0 - .byte 0x00, 0x00, 0x51, 0xE3, 0xC2, 0x00, 0xD0, 0xE7, 0x03, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 - .byte 0x01, 0x00, 0x00, 0xAA, 0x00, 0x24, 0x9F, 0xE5, 0x01, 0x10, 0xD2, 0xE7, 0x41, 0x00, 0x51, 0xE3 - .byte 0x37, 0x10, 0x41, 0xA2, 0x30, 0x10, 0x41, 0xB2, 0xAB, 0x2F, 0xA0, 0xE1, 0xFF, 0x30, 0x01, 0xE2 - .byte 0x8B, 0x1F, 0x62, 0xE0, 0xE1, 0x1F, 0x92, 0xE0, 0x03, 0x12, 0xA0, 0x01, 0xAB, 0x2F, 0x8B, 0xE0 - .byte 0x03, 0x00, 0x80, 0x11, 0xFF, 0x10, 0x01, 0x02, 0x01, 0x00, 0x80, 0x01, 0x14, 0x10, 0x9D, 0xE5 - .byte 0x01, 0xB0, 0x8B, 0xE2, 0xC2, 0x00, 0xC1, 0xE7, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x6B, 0x00, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x64, 0x00, 0x00, 0xEA -_020E3F70: - cmp r1, #0x0 - blt _020E3F80 - cmp r1, #0x80 - blt _020E3F88 -_020E3F80: - mov r0, r1 - b _020E3F90 -_020E3F88: - ldr r0, _020E42FC ; =0x0210428C - ldrb r0, [r0, r1] -_020E3F90: - cmp r0, #0x50 - movne r5, #0x800 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r10, #0x20 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3FBC: - cmp r1, #0x2d - moveq r0, #0x1 - streq r0, [sp, #0xc] - beq _020E3FE4 - cmp r1, #0x2b - beq _020E3FE4 - mov r0, r8 - mov r2, #0x1 - blx r9 - sub r4, r4, #0x1 -_020E3FE4: - mov r10, #0x40 - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - b _020E4104 -_020E4004: - cmp r1, #0x0 - blt _020E4014 - cmp r1, #0x80 - blt _020E401C -_020E4014: - mov r0, #0x0 - b _020E402C -_020E401C: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =0x0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E402C: - cmp r0, #0x0 - moveq r5, #0x1000 - beq _020E4104 - cmp r1, #0x30 - movne r10, #0x100 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r10, #0x80 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E4064: - cmp r1, #0x30 - movne r10, #0x100 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E408C: - cmp r1, #0x0 - blt _020E409C - cmp r1, #0x80 - blt _020E40A4 -_020E409C: - mov r0, #0x0 - b _020E40B4 -_020E40A4: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =0x0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E40B4: - cmp r0, #0x0 - moveq r5, #0x800 - beq _020E4104 - ldr r0, [sp, #0x10] - sub r2, r1, #0x30 - mov r1, #0xa - mla r0, r1, r0, r2 - str r0, [sp, #0x10] - ldr r1, _020E4304 ; =0x00007FFF - ldr r0, [sp, #0x20] - add r4, r4, #0x1 - cmp r0, r1 - ldrgt r0, [sp, #0xd0] - movgt r1, #0x1 - strgt r1, [r0, #0x0] - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - mov r1, r0 -_020E4104: - ldr r0, [sp, #0x0] - cmp r4, r0 - bgt _020E4124 - mvn r0, #0x0 - cmp r1, r0 - beq _020E4124 - tst r5, #0x1800 - beq _020E3418 -_020E4124: - cmp r5, #0x8000 - beq _020E4140 - ldr r0, _020E4308 ; =0x00000E2C - tst r5, r0 - moveq r0, #0x1 - movne r0, #0x0 - b _020E4164 -_020E4140: - sub r0, r4, #0x1 - cmp r0, #0x2 - ble _020E4158 - ldr r0, _020E430C ; =0x0000018E - tst r10, r0 - bne _020E4160 -_020E4158: - mov r0, #0x1 - b _020E4164 -_020E4160: - mov r0, #0x0 -_020E4164: - cmp r0, #0x0 - movne r2, #0x0 - ldrne r0, [sp, #0x4] - bne _020E4184 - ldr r0, [sp, #0x2c] - sub r2, r4, #0x1 - add r2, r2, r0 - ldr r0, [sp, #0x4] -_020E4184: - str r2, [r0, #0x0] - mov r0, r8 - mov r2, #0x1 - blx r9 - cmp r10, #0x0 - bne _020E4388 - ldr r0, [sp, #0x24] - ldrb r2, [sp, #0x84] - cmp r0, #0x0 - ldrne r0, [sp, #0x20] - rsbne r0, r0, #0x0 - strne r0, [sp, #0x20] - add r0, sp, #0x85 - add r1, r0, r2 - b _020E41CC -_020E41C0: - ldr r0, [sp, #0x1c] - add r0, r0, #0x1 - str r0, [sp, #0x1c] -_020E41CC: - cmp r2, #0x0 - sub r2, r2, #0x1 - beq _020E41E4 - ldrb r0, [r1, #-0x1]! - cmp r0, #0x30 - beq _020E41C0 -_020E41E4: - add r0, r2, #0x1 - strb r0, [sp, #0x84] - ands r2, r0, #0xff - bne _020E4208 - add r1, r2, #0x1 - strb r1, [sp, #0x84] - add r0, sp, #0x85 - mov r1, #0x30 - strb r1, [r0, r2] -_020E4208: - ldr r1, [sp, #0x20] - ldr r0, [sp, #0x1c] - mov r2, #0x8000 - add r0, r1, r0 - rsb r2, r2, #0x0 - str r0, [sp, #0x20] - cmp r0, r2 - blt _020E4230 - cmp r0, r2, lsr #0x11 - ble _020E423C -_020E4230: - ldr r0, [sp, #0xd0] - mov r1, #0x1 - str r1, [r0, #0x0] -_020E423C: - ldr r0, [sp, #0xd0] - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _020E4298 - ldr r0, [sp, #0x24] - cmp r0, #0x0 - movne r0, #0x0 - addne sp, sp, #0xa8 - movne r1, r0 - ldmneia sp!, {r3-r11,pc} -_020E4264: - .byte 0x28, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x9C, 0x10, 0x9F, 0x05 - .byte 0xA8, 0xD0, 0x8D, 0x02, 0x03, 0x00, 0x91, 0x08, 0xF8, 0x8F, 0xBD, 0x08, 0x8C, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x0C, 0x00, 0x91, 0xE8, 0x00, 0x10, 0xA0, 0xE1, 0xCE, 0x18, 0x00, 0xEB - .byte 0xA8, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 -_020E4298: - ldr r1, [sp, #0x20] - add r0, sp, #0x80 - strh r1, [sp, #0x82] - bl __dec2num - mov r4, r0 - mov r6, r1 - mov r0, #0x0 - mov r1, r0 - mov r2, r4 - mov r3, r6 - bl _dneq - beq _020E4318 - mov r0, r4 - mov r1, r6 - mov r2, #0x0 - mov r3, #0x100000 - bl _dls - bhs _020E4318 - ldr r0, [sp, #0xd0] - mov r1, #0x1 - str r1, [r0, #0x0] - b _020E4344 - .balign 4 -_020E42F0: .word 0x02104439 -_020E42F4: .word 0x02104434 -_020E42F8: .word 0x0210430C -_020E42FC: .word 0x0210428C -_020E4300: .word 0x02106B74 -_020E4304: .word 0x00007FFF -_020E4308: .word 0x00000E2C -_020E430C: .word 0x0000018E -_020E4310: .word 0x02106B7C -_020E4314: .word 0x7FEFFFFF -_020E4318: - ldr r3, _020E4314 ; =0x7FEFFFFF - mov r0, r4 - mov r1, r6 - mvn r2, #0x0 - bl _dgr - bls _020E4344 - ldr r0, [sp, #0xd0] - mov r2, #0x1 - ldr r1, _020E4310 ; =0x02106B7C - str r2, [r0, #0x0] - ldmia r1, {r4,r6} -_020E4344: - ldr r0, [sp, #0x28] - cmp r0, #0x0 - beq _020E4378 - ldr r0, _020E4308 ; =0x00000E2C - tst r5, r0 - beq _020E4378 - mov r0, #0x0 - mov r1, r0 - mov r2, r4 - mov r3, r6 - bl _dsub - mov r4, r0 - mov r6, r1 -_020E4378: - add sp, sp, #0xa8 - mov r0, r4 - mov r1, r6 - ldmia sp!, {r3-r11,pc} -_020E4388: - ldr r0, [sp, #0xc] - add r4, sp, #0x38 - cmp r0, #0x0 - ldrne r0, [sp, #0x10] - ldrb r3, [sp, #0x45] - rsbne r0, r0, #0x0 - strne r0, [sp, #0x10] - ldr r1, [sp, #0x10] - ldr r0, [sp, #0x8] - mov r2, #0x0 - add r0, r1, r0, lsl #0x2 - str r0, [sp, #0x10] - mov r1, #0x80 - b _020E43D0 -_020E43C0: - ldr r0, [sp, #0x10] - add r2, r2, #0x1 - sub r0, r0, #0x1 - str r0, [sp, #0x10] -_020E43D0: - cmp r2, #0x4 - bhs _020E43E0 - tst r3, r1, asr r2 - beq _020E43C0 -_020E43E0: - adds r5, r2, #0x1 - beq _020E442C - add r0, sp, #0x4c - add r3, sp, #0x45 - str r0, [sp, #0x14] - mov r1, #0x0 - cmp r0, r3 - blo _020E442C - rsb r6, r5, #0x8 -_020E4404: - ldr r0, [sp, #0x14] - ldrb r0, [r0, #0x0] - orr r2, r1, r0, lsl r5 - mov r1, r0, asr r6 - ldr r0, [sp, #0x14] - and r1, r1, #0xff - strb r2, [r0], #-0x1 - str r0, [sp, #0x14] - cmp r0, r3 - bhs _020E4404 -_020E442C: - mov r2, #0x0 - mov r6, r2 - strb r2, [r4, #0x0] - strb r2, [r4, #0x1] - strb r2, [r4, #0x2] - strb r2, [r4, #0x3] - strb r2, [r4, #0x4] - strb r2, [r4, #0x5] - strb r2, [r4, #0x6] - strb r2, [r4, #0x7] - mov r3, #0xc - mov r7, #0x1 - mov r0, #0xff - add r1, sp, #0x45 -_020E4464: - add r5, r2, #0x8 - cmp r5, #0x34 - ldrb r5, [r1, r6] - rsbhi r8, r2, #0x34 - and r11, r3, #0x7 - andhi r5, r5, r0, lsl r8 - andhi r5, r5, #0xff - mov r8, r5, asr r11 - and r9, r8, #0xff - ldrb r10, [r4, r7] - rsb r8, r11, #0x8 - mov r5, r5, lsl r8 - orr r9, r10, r9 - strb r9, [r4, r7] - add r7, r7, #0x1 - add r2, r2, #0x8 - ldrb r8, [r4, r7] - and r5, r5, #0xff - cmp r2, #0x34 - orr r5, r8, r5 - strb r5, [r4, r7] - add r3, r3, #0x8 - add r6, r6, #0x1 - blo _020E4464 - ldr r0, [sp, #0x10] - mov r1, #0x800 - add r0, r0, #0xfe - add r2, r0, #0x300 - rsb r1, r1, #0x0 - tst r2, r1 - beq _020E44FC - ldr r2, [sp, #0xd0] - mov r3, #0x1 - mov r0, #0x0 - add sp, sp, #0xa8 - mov r1, r0 - str r3, [r2, #0x0] - ldmia sp!, {r3-r11,pc} -_020E44FC: - ldrb r0, [r4, #0x1] - mov r2, r2, lsl #0x15 - ldrb r1, [r4, #0x0] - orr r0, r0, r2, lsr #0x11 - strb r0, [r4, #0x1] - ldr r0, [sp, #0x28] - orr r1, r1, r2, lsr #0x19 - cmp r0, #0x0 - andne r0, r1, #0xff - strb r1, [r4, #0x0] - orrne r0, r0, #0x80 - strneb r0, [r4, #0x0] - mov r3, #0x0 -_020E4530: - rsb r1, r3, #0x7 - ldrb r2, [r4, r3] - ldrb r0, [r4, r1] - strb r0, [r4, r3] - add r3, r3, #0x1 - strb r2, [r4, r1] - cmp r3, #0x4 - blt _020E4530 - ldmia r4, {r0-r1} - add sp, sp, #0xa8 - ldmia sp!, {r3-r11,pc} - - arm_func_start strtold -strtold: ; 0x020E455C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x14 - mov r7, r0 - mov r0, #0x0 - mov r6, r1 - str r0, [sp, #0x8] - add r4, sp, #0xc - str r7, [sp, #0x4] - ldr r1, _020E4630 ; =__StringRead - add r2, sp, #0x4 - add r3, sp, #0x10 - sub r0, r0, #0x80000001 - str r4, [sp, #0x0] - bl __strtold - mov r5, r1 - mov r4, r0 - cmp r6, #0x0 - ldrne r0, [sp, #0x10] - mov r1, r5 - addne r0, r7, r0 - strne r0, [r6, #0x0] - mov r0, r4 - bl fabs - ldr r2, [sp, #0xc] - mov r6, r0 - mov r7, r1 - cmp r2, #0x0 - bne _020E4614 - mov r0, #0x0 - mov r1, r0 - mov r2, r4 - mov r3, r5 - bl _dneq - beq _020E4620 - mov r0, r6 - mov r1, r7 - mov r2, #0x0 - mov r3, #0x100000 - bl _dls - blo _020E4614 - ldr r3, _020E4634 ; =0x7FEFFFFF - mov r0, r6 - mov r1, r7 - mvn r2, #0x0 - bl _dgr - bls _020E4620 -_020E4614: - ldr r0, _020E4638 ; =0x021D74A8 - mov r1, #0x22 - str r1, [r0, #0x0] -_020E4620: - mov r0, r4 - mov r1, r5 - add sp, sp, #0x14 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020E4630: .word __StringRead -_020E4634: .word 0x7FEFFFFF -_020E4638: .word 0x021D74A8 - - arm_func_start atod -atod: ; 0x020E463C - ldr ip, _020E4648 ; =strtold - mov r1, #0x0 - bx r12 - .balign 4 -_020E4648: .word strtold - - arm_func_start __strtoul -__strtoul: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - ldr r4, [sp, #0x38] - movs r9, r0 - ldr r0, [sp, #0x34] - str r4, [sp, #0x38] - mov r4, #0x0 - str r0, [sp, #0x34] - ldr r0, [sp, #0x38] - str r1, [sp, #0x0] - str r4, [r0, #0x0] - mov r0, r4 - str r0, [sp, #0x4] - ldr r0, [sp, #0x34] - mov r1, r4 - str r1, [r0, #0x0] - ldr r0, [sp, #0x30] - str r4, [sp, #0x8] - mov r8, r2 - mov r7, r3 - mov r5, r4 - mov r10, r4 - str r0, [sp, #0x30] - mov r4, #0x1 - bmi _020E46CC - cmp r9, #0x1 - beq _020E46CC - cmp r9, #0x24 - bgt _020E46CC - ldr r0, [sp, #0x0] - cmp r0, #0x1 - bge _020E46D4 -_020E46CC: - mov r4, #0x40 - b _020E46F0 -_020E46D4: - ldr r1, [sp, #0x8] - mov r0, r7 - mov r3, r1 - mov r2, r1 - add r5, r3, #0x1 - blx r8 - mov r6, r0 -_020E46F0: - cmp r9, #0x0 - beq _020E4708 - mov r1, r9 - mvn r0, #0x0 - bl _u32_div_f - str r0, [sp, #0x4] -_020E4708: - mvn r11, #0x0 - b _020E49C8 -_020E4710: - cmp r4, #0x8 - bgt _020E4748 - cmp r4, #0x0 - addge pc, pc, r4, lsl #0x2 - b _020E49C8 -_020E4724: - .byte 0xA7, 0x00, 0x00, 0xEA, 0x09, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0xEA - .byte 0xA4, 0x00, 0x00, 0xEA, 0x40, 0x00, 0x00, 0xEA, 0xA2, 0x00, 0x00, 0xEA, 0xA1, 0x00, 0x00, 0xEA - .byte 0xA0, 0x00, 0x00, 0xEA, 0x4C, 0x00, 0x00, 0xEA -_020E4748: - cmp r4, #0x10 - beq _020E487C - b _020E49C8 -_020E4754: - .byte 0x00, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x56, 0xE3 - .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0xB8, 0x02, 0x9F, 0xE5 - .byte 0x86, 0x10, 0xA0, 0xE1, 0xB1, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x08, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2 - .byte 0x08, 0x00, 0x8D, 0xE5, 0x87, 0x00, 0x00, 0xEA, 0x2B, 0x00, 0x56, 0xE3, 0x06, 0x00, 0x00, 0x1A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2 - .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x0A, 0x00, 0x00, 0xEA, 0x2D, 0x00, 0x56, 0xE3 - .byte 0x08, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x34, 0x00, 0x9D, 0xE5 - .byte 0x01, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5, 0x02, 0x40, 0xA0, 0xE3, 0x71, 0x00, 0x00, 0xEA - .byte 0x00, 0x00, 0x59, 0xE3, 0x10, 0x00, 0x59, 0x13, 0x09, 0x00, 0x00, 0x1A, 0x30, 0x00, 0x56, 0xE3 - .byte 0x07, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x04, 0x40, 0xA0, 0xE3, 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1 - .byte 0x64, 0x00, 0x00, 0xEA, 0x08, 0x40, 0xA0, 0xE3, 0x62, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x56, 0xE3 - .byte 0x78, 0x00, 0x56, 0x13, 0x08, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x10, 0x90, 0xA0, 0xE3, 0x08, 0x40, 0xA0, 0xE3, 0x01, 0x50, 0x85, 0xE2 - .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x56, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x59, 0xE3 - .byte 0x08, 0x90, 0xA0, 0x03, 0x10, 0x40, 0xA0, 0xE3, 0x52, 0x00, 0x00, 0xEA -_020E487C: - ldr r0, [sp, #0x4] - cmp r9, #0x0 - moveq r9, #0xa - cmp r0, #0x0 - bne _020E48A0 - mov r0, r11 - mov r1, r9 - bl _u32_div_f - str r0, [sp, #0x4] -_020E48A0: - cmp r6, #0x0 - blt _020E48B0 - cmp r6, #0x80 - blt _020E48B8 -_020E48B0: - mov r0, #0x0 - b _020E48C8 -_020E48B8: - ldr r0, _020E4A2C ; =0x0210430C - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x8 -_020E48C8: - cmp r0, #0x0 - beq _020E48F0 - sub r6, r6, #0x30 - cmp r6, r9 - blt _020E4978 - cmp r4, #0x10 - moveq r4, #0x20 - movne r4, #0x40 - add r6, r6, #0x30 - b _020E49C8 -_020E48F0: - cmp r6, #0x0 - blt _020E4900 - cmp r6, #0x80 - blt _020E4908 -_020E4900: - mov r0, #0x0 - b _020E4918 -_020E4908: - ldr r0, _020E4A2C ; =0x0210430C - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x1 -_020E4918: - cmp r0, #0x0 - beq _020E494C - cmp r6, #0x0 - blt _020E4930 - cmp r6, #0x80 - blt _020E4938 -_020E4930: - mov r0, r6 - b _020E4940 -_020E4938: - ldr r0, _020E4A30 ; =0x0210428C - ldrb r0, [r0, r6] -_020E4940: - sub r0, r0, #0x37 - cmp r0, r9 - blt _020E495C -_020E494C: - cmp r4, #0x10 - moveq r4, #0x20 - movne r4, #0x40 - b _020E49C8 -_020E495C: - cmp r6, #0x0 - blt _020E4974 - cmp r6, #0x80 - bge _020E4974 - ldr r0, _020E4A30 ; =0x0210428C - ldrb r6, [r0, r6] -_020E4974: - sub r6, r6, #0x37 -_020E4978: - ldr r0, [sp, #0x4] - mov r4, #0x10 - cmp r10, r0 - ldrhi r0, [sp, #0x38] - movhi r1, #0x1 - strhi r1, [r0, #0x0] - mul r0, r10, r9 - mov r10, r0 - sub r0, r11, r0 - cmp r6, r0 - ldrhi r0, [sp, #0x38] - movhi r1, #0x1 - strhi r1, [r0, #0x0] - mov r1, #0x0 - mov r0, r7 - mov r2, r1 - add r10, r10, r6 - add r5, r5, #0x1 - blx r8 - mov r6, r0 -_020E49C8: - ldr r0, [sp, #0x0] - cmp r5, r0 - bgt _020E49E4 - cmp r6, r11 - beq _020E49E4 - tst r4, #0x60 - beq _020E4710 -_020E49E4: - tst r4, #0x34 - bne _020E49FC - ldr r0, [sp, #0x30] - mov r10, #0x0 - str r10, [r0, #0x0] - b _020E4A10 -_020E49FC: - ldr r0, [sp, #0x8] - sub r1, r5, #0x1 - add r1, r1, r0 - ldr r0, [sp, #0x30] - str r1, [r0, #0x0] -_020E4A10: - mov r0, r7 - mov r1, r6 - mov r2, #0x1 - blx r8 - mov r0, r10 - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} - .balign 4 -_020E4A2C: .word 0x0210430C -_020E4A30: .word 0x0210428C - - arm_func_start __strtoull -__strtoull: ; 0x020E4A34 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x1c - ldr r4, [sp, #0x48] - movs r9, r0 - ldr r0, [sp, #0x44] - str r4, [sp, #0x48] - mov r4, #0x0 - str r0, [sp, #0x44] - ldr r0, [sp, #0x48] - str r1, [sp, #0x0] - str r4, [r0, #0x0] - mov r0, r4 - str r0, [sp, #0xc] - str r0, [sp, #0x8] - ldr r0, [sp, #0x44] - mov r1, r4 - str r1, [r0, #0x0] - ldr r0, [sp, #0x40] - str r4, [sp, #0x14] - mov r8, r2 - mov r7, r3 - mov r5, r4 - mov r10, r4 - mov r11, r4 - str r0, [sp, #0x40] - mov r4, #0x1 - bmi _020E4ABC - cmp r9, #0x1 - beq _020E4ABC - cmp r9, #0x24 - bgt _020E4ABC - ldr r0, [sp, #0x0] - cmp r0, #0x1 - bge _020E4AC4 -_020E4ABC: - mov r4, #0x40 - b _020E4ADC -_020E4AC4: - ldr r1, [sp, #0x14] - mov r0, r7 - mov r2, r1 - add r5, r1, #0x1 - blx r8 - mov r6, r0 -_020E4ADC: - cmp r9, #0x0 - beq _020E4B00 - mvn r0, #0x0 - mov r1, r0 - mov r3, r9, asr #0x1f - mov r2, r9 - bl _ll_udiv - str r0, [sp, #0xc] - str r1, [sp, #0x8] -_020E4B00: - mvn r0, #0x0 - str r0, [sp, #0x18] - b _020E4E08 -_020E4B0C: - cmp r4, #0x8 - bgt _020E4B44 - cmp r4, #0x0 - addge pc, pc, r4, lsl #0x2 - b _020E4E08 -_020E4B20: - .byte 0xB8, 0x00, 0x00, 0xEA, 0x09, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0xEA, 0xB5, 0x00, 0x00, 0xEA - .byte 0x40, 0x00, 0x00, 0xEA, 0xB3, 0x00, 0x00, 0xEA, 0xB2, 0x00, 0x00, 0xEA, 0xB1, 0x00, 0x00, 0xEA - .byte 0x4C, 0x00, 0x00, 0xEA -_020E4B44: - cmp r4, #0x10 - beq _020E4C78 - b _020E4E08 -_020E4B50: - .byte 0x00, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xBA - .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x08, 0x03, 0x9F, 0xE5, 0x86, 0x10, 0xA0, 0xE1 - .byte 0xB1, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x38, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE1, 0x14, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2, 0x14, 0x00, 0x8D, 0xE5 - .byte 0x98, 0x00, 0x00, 0xEA, 0x2B, 0x00, 0x56, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE1, 0x0A, 0x00, 0x00, 0xEA, 0x2D, 0x00, 0x56, 0xE3, 0x08, 0x00, 0x00, 0x1A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2 - .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x44, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x10, 0x80, 0xE5, 0x02, 0x40, 0xA0, 0xE3, 0x82, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x59, 0xE3 - .byte 0x10, 0x00, 0x59, 0x13, 0x09, 0x00, 0x00, 0x1A, 0x30, 0x00, 0x56, 0xE3, 0x07, 0x00, 0x00, 0x1A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x04, 0x40, 0xA0, 0xE3 - .byte 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x75, 0x00, 0x00, 0xEA - .byte 0x08, 0x40, 0xA0, 0xE3, 0x73, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x56, 0xE3, 0x78, 0x00, 0x56, 0x13 - .byte 0x08, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x10, 0x90, 0xA0, 0xE3, 0x08, 0x40, 0xA0, 0xE3, 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE1, 0x67, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x59, 0xE3, 0x08, 0x90, 0xA0, 0x03 - .byte 0x10, 0x40, 0xA0, 0xE3, 0x63, 0x00, 0x00, 0xEA -_020E4C78: - ldr r1, [sp, #0x8] - mov r0, #0x0 - cmp r9, #0x0 - moveq r9, #0xa - cmp r1, r0 - ldr r1, [sp, #0xc] - cmpeq r1, r0 - bne _020E4CB4 - ldr r0, [sp, #0x18] - mov r3, r9, asr #0x1f - mov r1, r0 - mov r2, r9 - bl _ll_udiv - str r0, [sp, #0xc] - str r1, [sp, #0x8] -_020E4CB4: - cmp r6, #0x0 - blt _020E4CC4 - cmp r6, #0x80 - blt _020E4CCC -_020E4CC4: - mov r0, #0x0 - b _020E4CDC -_020E4CCC: - ldr r0, _020E4E78 ; =0x0210430C - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x8 -_020E4CDC: - cmp r0, #0x0 - beq _020E4D04 - sub r6, r6, #0x30 - cmp r6, r9 - blt _020E4D8C - cmp r4, #0x10 - moveq r4, #0x20 - movne r4, #0x40 - add r6, r6, #0x30 - b _020E4E08 -_020E4D04: - cmp r6, #0x0 - blt _020E4D14 - cmp r6, #0x80 - blt _020E4D1C -_020E4D14: - mov r0, #0x0 - b _020E4D2C -_020E4D1C: - ldr r0, _020E4E78 ; =0x0210430C - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x1 -_020E4D2C: - cmp r0, #0x0 - beq _020E4D60 - cmp r6, #0x0 - blt _020E4D44 - cmp r6, #0x80 - blt _020E4D4C -_020E4D44: - mov r0, r6 - b _020E4D54 -_020E4D4C: - ldr r0, _020E4E7C ; =0x0210428C - ldrb r0, [r0, r6] -_020E4D54: - sub r0, r0, #0x37 - cmp r0, r9 - blt _020E4D70 -_020E4D60: - cmp r4, #0x10 - moveq r4, #0x20 - movne r4, #0x40 - b _020E4E08 -_020E4D70: - cmp r6, #0x0 - blt _020E4D88 - cmp r6, #0x80 - bge _020E4D88 - ldr r0, _020E4E7C ; =0x0210428C - ldrb r6, [r0, r6] -_020E4D88: - sub r6, r6, #0x37 -_020E4D8C: - ldr r0, [sp, #0x8] - umull r2, r3, r10, r9 - cmp r11, r0 - ldr r0, [sp, #0xc] - mov r4, #0x10 - cmpeq r10, r0 - ldrhi r0, [sp, #0x48] - movhi r1, #0x1 - strhi r1, [r0, #0x0] - mov r1, r9, asr #0x1f - mla r3, r10, r1, r3 - mla r3, r11, r9, r3 - ldr r1, [sp, #0x18] - mov r10, r2 - subs r2, r1, r2 - mov r0, r6, asr #0x1f - sbc r1, r1, r3 - cmp r0, r1 - cmpeq r6, r2 - ldrhi r1, [sp, #0x48] - movhi r2, #0x1 - strhi r2, [r1, #0x0] - mov r1, #0x0 - mov r11, r3 - adds r10, r10, r6 - adc r11, r11, r0 - mov r0, r7 - mov r2, r1 - add r5, r5, #0x1 - blx r8 - mov r6, r0 -_020E4E08: - ldr r0, [sp, #0x0] - cmp r5, r0 - bgt _020E4E28 - ldr r0, [sp, #0x18] - cmp r6, r0 - beq _020E4E28 - tst r4, #0x60 - beq _020E4B0C -_020E4E28: - tst r4, #0x34 - bne _020E4E44 - ldr r0, [sp, #0x40] - mov r10, #0x0 - mov r11, r10 - str r10, [r0, #0x0] - b _020E4E58 -_020E4E44: - ldr r0, [sp, #0x14] - sub r1, r5, #0x1 - add r1, r1, r0 - ldr r0, [sp, #0x40] - str r1, [r0, #0x0] -_020E4E58: - mov r0, r7 - mov r1, r6 - mov r2, #0x1 - blx r8 - mov r0, r10 - mov r1, r11 - add sp, sp, #0x1c - ldmia sp!, {r4-r11,pc} - .balign 4 -_020E4E78: .word 0x0210430C -_020E4E7C: .word 0x0210428C - - arm_func_start strtoul -strtoul: ; 0x020E4E80 - stmdb sp!, {r3-r5,lr} - sub sp, sp, #0x20 - mov r5, r0 - mov lr, #0x0 - mov r0, r2 - mov r4, r1 - add r2, sp, #0x1c - str r5, [sp, #0xc] - str lr, [sp, #0x10] - str r2, [sp, #0x0] - add r1, sp, #0x18 - str r1, [sp, #0x4] - add r12, sp, #0x14 - ldr r2, _020E4F10 ; =__StringRead - add r3, sp, #0xc - sub r1, lr, #0x80000001 - str r12, [sp, #0x8] - bl __strtoul -_020E4EC8: - .byte 0x00, 0x00, 0x54, 0xE3, 0x1C, 0x10, 0x9D, 0x15 - .byte 0x01, 0x10, 0x85, 0x10, 0x00, 0x10, 0x84, 0x15, 0x14, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x51, 0xE3 - .byte 0x05, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x9F, 0xE5, 0x22, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5 - .byte 0x20, 0xD0, 0x8D, 0xE2, 0x00, 0x00, 0xE0, 0xE3, 0x38, 0x80, 0xBD, 0xE8, 0x18, 0x10, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x51, 0xE3, 0x00, 0x00, 0x60, 0x12, 0x20, 0xD0, 0x8D, 0xE2, 0x38, 0x80, 0xBD, 0xE8 -_020E4F10: .word __StringRead -_020E4F14: - .byte 0xA8, 0x74, 0x1D, 0x02 - - arm_func_start strtold2 -strtold2: ; 0x020E4F18 - stmdb sp!, {r3-r5,lr} - sub sp, sp, #0x20 - mov r5, r0 - mov lr, #0x0 - mov r0, r2 - mov r4, r1 - add r2, sp, #0x1c - str r5, [sp, #0xc] - str lr, [sp, #0x10] - str r2, [sp, #0x0] - add r1, sp, #0x18 - str r1, [sp, #0x4] - add r12, sp, #0x14 - ldr r2, _020E4FD8 ; =__StringRead - add r3, sp, #0xc - sub r1, lr, #0x80000001 - str r12, [sp, #0x8] - bl __strtoul -_020E4F60: - .byte 0x00, 0x00, 0x54, 0xE3, 0x1C, 0x10, 0x9D, 0x15, 0x01, 0x10, 0x85, 0x10, 0x00, 0x10, 0x84, 0x15 - .byte 0x14, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x09, 0x00, 0x00, 0x1A, 0x18, 0x20, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x52, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x02, 0x11, 0xE0, 0xE3, 0x01, 0x00, 0x50, 0xE1 - .byte 0x03, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x52, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x02, 0x01, 0x50, 0xE3 - .byte 0x08, 0x00, 0x00, 0x9A, 0x18, 0x00, 0x9D, 0xE5, 0x2C, 0x10, 0x9F, 0xE5, 0x22, 0x20, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x01, 0xA0, 0x13, 0x00, 0x20, 0x81, 0xE5, 0x20, 0xD0, 0x8D, 0xE2 - .byte 0x02, 0x01, 0xE0, 0x03, 0x38, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x52, 0xE3, 0x00, 0x00, 0x60, 0x12 - .byte 0x20, 0xD0, 0x8D, 0xE2, 0x38, 0x80, 0xBD, 0xE8 -_020E4FD8: .word __StringRead -_020E4FDC: - .byte 0xA8, 0x74, 0x1D, 0x02 - - arm_func_start atol -atol: ; 0x020E4FE0 - ldr ip, _020E4FF0 ; =strtold - mov r1, #0x0 - mov r2, #0xa - bx r12 - .balign 4 -_020E4FF0: .word strtold2 - - arm_func_start fwide -fwide: - cmp r0, #0x0 - beq _020E500C - ldr r3, [r0, #0x4] - mov r2, r3, lsl #0x16 - movs r2, r2, lsr #0x1d - bne _020E5014 -_020E500C: - mov r0, #0x0 - bx lr -_020E5014: - mov r2, r3, lsl #0x14 - movs r2, r2, lsr #0x1e - beq _020E5034 - cmp r2, #0x1 - beq _020E505C - cmp r2, #0x2 - moveq r1, #0x1 - b _020E5060 -_020E5034: - cmp r1, #0x0 - ble _020E504C - bic r2, r3, #0xc00 - orr r2, r2, #0x800 - str r2, [r0, #0x4] - b _020E5060 -_020E504C: - biclt r2, r3, #0xc00 - orrlt r2, r2, #0x400 - strlt r2, [r0, #0x4] - b _020E5060 -_020E505C: - mvn r1, #0x0 -_020E5060: - mov r0, r1 - bx lr - - arm_func_start wmemcpy -wmemcpy: ; 0x020E5068 - ldr ip, _020E5074 ; =memcpy - mov r2, r2, lsl #0x1 - bx r12 - .balign 4 -_020E5074: .word memcpy - - arm_func_start wmemchr -wmemchr: ; 0x020E5078 - cmp r2, #0x0 - beq _020E5098 -_020E5080: - ldrh r3, [r0, #0x0] - cmp r3, r1 - bxeq lr - add r0, r0, #0x2 - subs r2, r2, #0x1 - bne _020E5080 -_020E5098: - mov r0, #0x0 - bx lr - - arm_func_start parse_format_wprintf -parse_format_wprintf: ; 0x020E50A0 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x10 - ldrh r3, [r0, #0x2] - mov r4, #0x0 - mov r5, #0x1 - mov lr, r2 - strb r5, [sp, #0x0] - strb r4, [sp, #0x1] - strb r4, [sp, #0x2] - strb r4, [sp, #0x3] - strb r4, [sp, #0x4] - str r4, [sp, #0x8] - str r4, [sp, #0xc] - cmp r3, #0x25 - add r12, r0, #0x2 - bne _020E50FC - add r0, sp, #0x0 - strh r3, [sp, #0x6] - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add sp, sp, #0x10 - add r0, r12, #0x2 - ldmia sp!, {r4-r8,pc} -_020E50FC: - mov r2, #0x2 - mov r0, r4 - mov r5, r2 - mov r6, r4 - mov r7, #0x1 -_020E5110: - mov r8, r7 - cmp r3, #0x2b - bgt _020E5140 - bge _020E5168 - cmp r3, #0x23 - bgt _020E5198 - cmp r3, #0x20 - blt _020E5198 - beq _020E5170 - cmp r3, #0x23 - beq _020E5180 - b _020E5198 -_020E5140: - cmp r3, #0x30 - bgt _020E5198 - cmp r3, #0x2d - blt _020E5198 - beq _020E5160 - cmp r3, #0x30 - beq _020E5188 - b _020E5198 -_020E5160: - strb r6, [sp, #0x0] - b _020E519C -_020E5168: - strb r7, [sp, #0x1] - b _020E519C -_020E5170: - ldrb r4, [sp, #0x1] - cmp r4, #0x1 - strneb r5, [sp, #0x1] - b _020E519C -_020E5180: - strb r7, [sp, #0x3] - b _020E519C -_020E5188: - ldrb r4, [sp, #0x0] - cmp r4, #0x0 - strneb r2, [sp, #0x0] - b _020E519C -_020E5198: - mov r8, r0 -_020E519C: - cmp r8, #0x0 - ldrneh r3, [r12, #0x2]! - bne _020E5110 - cmp r3, #0x2a - bne _020E51E4 - ldr r0, [r1, #0x0] - add r0, r0, #0x4 - str r0, [r1, #0x0] - ldr r0, [r0, #-0x4] - str r0, [sp, #0x8] - cmp r0, #0x0 - bge _020E51DC - rsb r0, r0, #0x0 - mov r2, #0x0 - strb r2, [sp, #0x0] - str r0, [sp, #0x8] -_020E51DC: - ldrh r3, [r12, #0x2]! - b _020E5228 -_020E51E4: - mov r2, #0x0 - ldr r5, _020E560C ; =0x02104544 - mov r0, #0xa - b _020E5208 -_020E51F4: - ldr r4, [sp, #0x8] - sub r3, r3, #0x30 - mla r6, r4, r0, r3 - ldrh r3, [r12, #0x2]! - str r6, [sp, #0x8] -_020E5208: - cmp r3, #0x80 - movcs r4, r2 - bhs _020E5220 - mov r4, r3, lsl #0x1 - ldrh r4, [r5, r4] - and r4, r4, #0x8 -_020E5220: - cmp r4, #0x0 - bne _020E51F4 -_020E5228: - ldr r2, [sp, #0x8] - ldr r0, _020E5610 ; =0x000001FD - cmp r2, r0 - ble _020E5258 - ldr r1, _020E5614 ; =0x0000FFFF - add r0, sp, #0x0 - strh r1, [sp, #0x6] - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add sp, sp, #0x10 - add r0, r12, #0x2 - ldmia sp!, {r4-r8,pc} -_020E5258: - cmp r3, #0x2e - bne _020E52E0 - ldrh r3, [r12, #0x2]! - mov r0, #0x1 - strb r0, [sp, #0x2] - cmp r3, #0x2a - bne _020E529C - ldr r0, [r1, #0x0] - add r0, r0, #0x4 - str r0, [r1, #0x0] - ldr r0, [r0, #-0x4] - ldrh r3, [r12, #0x2]! - str r0, [sp, #0xc] - cmp r0, #0x0 - movlt r0, #0x0 - strltb r0, [sp, #0x2] - b _020E52E0 -_020E529C: - mov r1, #0x0 - ldr r4, _020E560C ; =0x02104544 - mov r0, #0xa - b _020E52C0 -_020E52AC: - ldr r2, [sp, #0xc] - sub r3, r3, #0x30 - mla r5, r2, r0, r3 - ldrh r3, [r12, #0x2]! - str r5, [sp, #0xc] -_020E52C0: - cmp r3, #0x80 - movcs r2, r1 - bhs _020E52D8 - mov r2, r3, lsl #0x1 - ldrh r2, [r4, r2] - and r2, r2, #0x8 -_020E52D8: - cmp r2, #0x0 - bne _020E52AC -_020E52E0: - cmp r3, #0x6c - mov r0, #0x1 - bgt _020E5318 - cmp r3, #0x68 - blt _020E530C - beq _020E5334 - cmp r3, #0x6a - beq _020E5380 - cmp r3, #0x6c - beq _020E5350 - b _020E53A4 -_020E530C: - cmp r3, #0x4c - beq _020E5374 - b _020E53A4 -_020E5318: - cmp r3, #0x74 - bgt _020E5328 - beq _020E538C - b _020E53A4 -_020E5328: - cmp r3, #0x7a - beq _020E5398 - b _020E53A4 -_020E5334: - ldrh r1, [r12, #0x2] - mov r2, #0x2 - strb r2, [sp, #0x4] - cmp r1, #0x68 - streqb r0, [sp, #0x4] - ldreqh r3, [r12, #0x2]! - b _020E53A8 -_020E5350: - ldrh r1, [r12, #0x2] - mov r2, #0x3 - strb r2, [sp, #0x4] - cmp r1, #0x6c - bne _020E53A8 - mov r1, #0x4 - strb r1, [sp, #0x4] - ldrh r3, [r12, #0x2]! - b _020E53A8 -_020E5374: - mov r1, #0x9 - strb r1, [sp, #0x4] - b _020E53A8 -_020E5380: - mov r1, #0x6 - strb r1, [sp, #0x4] - b _020E53A8 -_020E538C: - mov r1, #0x8 - strb r1, [sp, #0x4] - b _020E53A8 -_020E5398: - mov r1, #0x7 - strb r1, [sp, #0x4] - b _020E53A8 -_020E53A4: - mov r0, #0x0 -_020E53A8: - cmp r0, #0x0 - ldrneh r3, [r12, #0x2]! - strh r3, [sp, #0x6] - cmp r3, #0x61 - bgt _020E53FC - bge _020E54E0 - cmp r3, #0x47 - bgt _020E53F0 - subs r0, r3, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020E55EC -_020E53D4: - .byte 0x41, 0x00, 0x00, 0xEA, 0x83, 0x00, 0x00, 0xEA, 0x82, 0x00, 0x00, 0xEA - .byte 0x81, 0x00, 0x00, 0xEA, 0x4F, 0x00, 0x00, 0xEA, 0x2E, 0x00, 0x00, 0xEA, 0x49, 0x00, 0x00, 0xEA -_020E53F0: - cmp r3, #0x58 - beq _020E5470 - b _020E55EC -_020E53FC: - cmp r3, #0x63 - bgt _020E540C - beq _020E5588 - b _020E55EC -_020E540C: - sub r0, r3, #0x64 - cmp r0, #0x14 - addls pc, pc, r0, lsl #0x2 - b _020E55EC -_020E541C: - .byte 0x13, 0x00, 0x00, 0xEA - .byte 0x40, 0x00, 0x00, 0xEA, 0x1F, 0x00, 0x00, 0xEA, 0x3A, 0x00, 0x00, 0xEA, 0x6E, 0x00, 0x00, 0xEA - .byte 0x0E, 0x00, 0x00, 0xEA, 0x6C, 0x00, 0x00, 0xEA, 0x6B, 0x00, 0x00, 0xEA, 0x6A, 0x00, 0x00, 0xEA - .byte 0x69, 0x00, 0x00, 0xEA, 0x63, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x44, 0x00, 0x00, 0xEA - .byte 0x65, 0x00, 0x00, 0xEA, 0x64, 0x00, 0x00, 0xEA, 0x55, 0x00, 0x00, 0xEA, 0x62, 0x00, 0x00, 0xEA - .byte 0x02, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, 0xEA, 0x5F, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA -_020E5470: - ldrb r0, [sp, #0x4] - cmp r0, #0x9 - moveq r0, #0x4 - streqb r0, [sp, #0x4] - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0x1 - streq r0, [sp, #0xc] - beq _020E55F4 - ldrb r0, [sp, #0x0] - cmp r0, #0x2 - moveq r0, #0x1 - streqb r0, [sp, #0x0] - b _020E55F4 -_020E54A8: - .byte 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0x50, 0x13, 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13 - .byte 0x4C, 0x01, 0x9F, 0x05, 0xB6, 0x00, 0xCD, 0x01, 0x49, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xDD, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x44, 0x00, 0x00, 0xEA -_020E54E0: - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0xd - streq r0, [sp, #0xc] - ldrb r0, [sp, #0x4] - cmp r0, #0x2 - cmpne r0, #0x6 - cmpne r0, #0x7 - cmpne r0, #0x8 - cmpne r0, #0x4 - cmpne r0, #0x1 - ldreq r0, _020E5614 ; =0x0000FFFF - streqh r0, [sp, #0x6] - b _020E55F4 -_020E5518: - .byte 0x0C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0x50, 0x13, 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13 - .byte 0x01, 0x00, 0x50, 0x13, 0xC8, 0x00, 0x9F, 0x05, 0xB6, 0x00, 0xCD, 0x01, 0x28, 0x00, 0x00, 0x0A - .byte 0x02, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05 - .byte 0x23, 0x00, 0x00, 0xEA, 0x03, 0x30, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3, 0x78, 0x10, 0xA0, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xE3, 0x04, 0x30, 0xCD, 0xE5, 0x03, 0x20, 0xCD, 0xE5, 0xB6, 0x10, 0xCD, 0xE1 - .byte 0x0C, 0x00, 0x8D, 0xE5, 0x1A, 0x00, 0x00, 0xEA -_020E5588: - ldrb r1, [sp, #0x4] - cmp r1, #0x3 - moveq r0, #0x5 - streqb r0, [sp, #0x4] - beq _020E55F4 - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - cmpeq r1, #0x0 - ldrne r0, _020E5614 ; =0x0000FFFF - strneh r0, [sp, #0x6] - b _020E55F4 -_020E55B4: - .byte 0x04, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x03 - .byte 0x04, 0x00, 0xCD, 0x05, 0x0A, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0x40, 0x00, 0x9F, 0x15 - .byte 0xB6, 0x00, 0xCD, 0x11, 0x06, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xDD, 0xE5, 0x09, 0x00, 0x50, 0xE3 - .byte 0x04, 0x00, 0xA0, 0x03, 0x04, 0x00, 0xCD, 0x05, 0x01, 0x00, 0x00, 0xEA -_020E55EC: - ldr r0, _020E5614 ; =0x0000FFFF - strh r0, [sp, #0x6] -_020E55F4: - add r0, sp, #0x0 - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add r0, r12, #0x2 - add sp, sp, #0x10 - ldmia sp!, {r4-r8,pc} - .balign 4 -_020E560C: .word 0x02104544 -_020E5610: .word 0x000001FD -_020E5614: .word 0x0000FFFF - - arm_func_start long2str_wide -long2str_wide: ; 0x020E5618 - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x10 - movs r10, r0 - mov r0, #0x0 - mov r5, r1 - str r0, [sp, #0xc] - ldr r7, [sp, #0x4c] - mov r6, r0 - strh r0, [r5, #-0x2]! - ldrb r0, [sp, #0x43] - str r1, [sp, #0x0] - ldrh r8, [sp, #0x46] - str r0, [sp, #0x4] - ldr r0, [sp, #0x48] - ldrb r11, [sp, #0x41] - str r0, [sp, #0x8] - cmpeq r7, #0x0 - bne _020E568C - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _020E5678 - cmp r8, #0x6f - beq _020E568C -_020E5678: - add sp, sp, #0x10 - mov r0, r5 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E568C: - cmp r8, #0x69 - bgt _020E56B4 - bge _020E56E8 - cmp r8, #0x58 - bgt _020E56A8 - beq _020E5714 - b _020E571C -_020E56A8: - cmp r8, #0x64 - beq _020E56E8 - b _020E571C -_020E56B4: - cmp r8, #0x6f - bgt _020E56C8 - moveq r4, #0x8 - moveq r11, #0x0 - b _020E571C -_020E56C8: - cmp r8, #0x78 - bgt _020E571C - cmp r8, #0x75 - blt _020E571C - beq _020E5708 - cmp r8, #0x78 - beq _020E5714 - b _020E571C -_020E56E8: - cmp r10, #0x0 - mov r4, #0xa - bge _020E571C - mov r0, #0x1 - cmp r10, #0x80000000 - rsbne r10, r10, #0x0 - str r0, [sp, #0xc] - b _020E571C -_020E5708: - mov r4, #0xa - mov r11, #0x0 - b _020E571C -_020E5714: - mov r4, #0x10 - mov r11, #0x0 -_020E571C: - mov r0, r10 - mov r1, r4 - bl _u32_div_f - mov r9, r1 - mov r0, r10 - mov r1, r4 - bl _u32_div_f - cmp r9, #0xa - mov r10, r0 - addlt r9, r9, #0x30 - blt _020E5754 - cmp r8, #0x78 - addeq r9, r9, #0x57 - addne r9, r9, #0x37 -_020E5754: - cmp r10, #0x0 - strh r9, [r5, #-0x2]! - add r6, r6, #0x1 - bne _020E571C - cmp r4, #0x8 - bne _020E5788 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrneh r0, [r5, #0x0] - cmpne r0, #0x30 - movne r0, #0x30 - strneh r0, [r5, #-0x2]! - addne r6, r6, #0x1 -_020E5788: - ldrb r0, [sp, #0x40] - cmp r0, #0x2 - bne _020E57BC - ldr r0, [sp, #0xc] - ldr r7, [sp, #0x8] - cmp r0, #0x0 - cmpeq r11, #0x0 - subne r7, r7, #0x1 - cmp r4, #0x10 - bne _020E57BC - ldr r0, [sp, #0x4] - cmp r0, #0x0 - subne r7, r7, #0x2 -_020E57BC: - ldr r0, [sp, #0x0] - ldr r1, _020E5864 ; =0x000001FD - sub r0, r0, r5 - add r0, r0, r0, lsr #0x1f - add r0, r7, r0, asr #0x1 - cmp r0, r1 - addgt sp, sp, #0x10 - movgt r0, #0x0 - ldmgtia sp!, {r3-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - cmp r6, r7 - bge _020E5804 - mov r0, #0x30 -_020E57F4: - add r6, r6, #0x1 - cmp r6, r7 - strh r0, [r5, #-0x2]! - blt _020E57F4 -_020E5804: - cmp r4, #0x10 - bne _020E5820 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x30 - strneh r8, [r5, #-0x2] - strneh r0, [r5, #-0x4]! -_020E5820: - ldr r0, [sp, #0xc] - cmp r0, #0x0 - movne r0, #0x2d - strneh r0, [r5, #-0x2]! - bne _020E5850 - cmp r11, #0x1 - moveq r0, #0x2b - streqh r0, [r5, #-0x2]! - beq _020E5850 - cmp r11, #0x2 - moveq r0, #0x20 - streqh r0, [r5, #-0x2]! -_020E5850: - mov r0, r5 - add sp, sp, #0x10 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E5864: .word 0x000001FD - - arm_func_start longlong2str_wide -longlong2str_wide: ; 0x020E5868 - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x18 - mov r9, r1 - mov r1, #0x0 - mov r10, r0 - mov r6, r2 - mov r0, r1 - strh r0, [r6, #-0x2]! - ldr r0, [sp, #0x58] - cmp r9, #0x0 - str r0, [sp, #0x10] - ldrb r0, [sp, #0x4f] - cmpeq r10, #0x0 - str r2, [sp, #0x0] - str r0, [sp, #0x4] - ldr r0, [sp, #0x54] - str r1, [sp, #0x14] - str r0, [sp, #0x8] - ldrb r0, [sp, #0x4d] - mov r7, r1 - ldrh r8, [sp, #0x52] - str r0, [sp, #0xc] - ldreq r0, [sp, #0x10] - cmpeq r0, #0x0 - bne _020E58F8 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _020E58E4 - cmp r8, #0x6f - beq _020E58F8 -_020E58E4: - add sp, sp, #0x18 - mov r0, r6 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E58F8: - cmp r8, #0x69 - bgt _020E5920 - bge _020E5950 - cmp r8, #0x58 - bgt _020E5914 - beq _020E59A4 - b _020E59B0 -_020E5914: - cmp r8, #0x64 - beq _020E5950 - b _020E59B0 -_020E5920: - cmp r8, #0x6f - bgt _020E5930 - beq _020E5984 - b _020E59B0 -_020E5930: - cmp r8, #0x78 - bgt _020E59B0 - cmp r8, #0x75 - blt _020E59B0 - beq _020E5994 - cmp r8, #0x78 - beq _020E59A4 - b _020E59B0 -_020E5950: - subs r0, r10, #0x0 - sbcs r0, r9, #0x0 - mov r11, #0xa - mov r5, #0x0 - bge _020E59B0 - cmp r9, #0x80000000 - cmpeq r10, r5 - beq _020E5978 - rsbs r10, r10, #0x0 - rsc r9, r9, #0x0 -_020E5978: - mov r0, #0x1 - str r0, [sp, #0x14] - b _020E59B0 -_020E5984: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0x8 - b _020E59B0 -_020E5994: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0xa - b _020E59B0 -_020E59A4: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0x10 -_020E59B0: - mov r0, r10 - mov r1, r9 - mov r2, r11 - mov r3, r5 - bl _ull_mod - mov r4, r0 - mov r0, r10 - mov r1, r9 - mov r2, r11 - mov r3, r5 - bl _ll_udiv - mov r10, r0 - cmp r4, #0xa - mov r9, r1 - addlt r0, r4, #0x30 - blt _020E59FC - cmp r8, #0x78 - addeq r0, r4, #0x57 - addne r0, r4, #0x37 -_020E59FC: - strh r0, [r6, #-0x2]! - mov r0, #0x0 - cmp r9, r0 - cmpeq r10, r0 - add r7, r7, #0x1 - bne _020E59B0 - cmp r5, #0x0 - cmpeq r11, #0x8 - bne _020E5A3C - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrneh r0, [r6, #0x0] - cmpne r0, #0x30 - movne r0, #0x30 - strneh r0, [r6, #-0x2]! - addne r7, r7, #0x1 -_020E5A3C: - ldrb r0, [sp, #0x4c] - cmp r0, #0x2 - bne _020E5A8C - ldr r0, [sp, #0x8] - str r0, [sp, #0x10] - ldr r0, [sp, #0x14] - cmp r0, #0x0 - ldreq r0, [sp, #0xc] - cmpeq r0, #0x0 - ldrne r0, [sp, #0x10] - subne r0, r0, #0x1 - strne r0, [sp, #0x10] - cmp r5, #0x0 - cmpeq r11, #0x10 - bne _020E5A8C - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrne r0, [sp, #0x10] - subne r0, r0, #0x2 - strne r0, [sp, #0x10] -_020E5A8C: - ldr r0, [sp, #0x0] - ldr r2, _020E5B48 ; =0x000001FD - sub r0, r0, r6 - add r1, r0, r0, lsr #0x1f - ldr r0, [sp, #0x10] - add r0, r0, r1, asr #0x1 - cmp r0, r2 - addgt sp, sp, #0x18 - movgt r0, #0x0 - ldmgtia sp!, {r3-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - ldr r0, [sp, #0x10] - cmp r7, r0 - bge _020E5AE0 - mov r1, #0x30 -_020E5ACC: - ldr r0, [sp, #0x10] - add r7, r7, #0x1 - cmp r7, r0 - strh r1, [r6, #-0x2]! - blt _020E5ACC -_020E5AE0: - cmp r5, #0x0 - cmpeq r11, #0x10 - bne _020E5B00 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x30 - strneh r8, [r6, #-0x2] - strneh r0, [r6, #-0x4]! -_020E5B00: - ldr r0, [sp, #0x14] - cmp r0, #0x0 - movne r0, #0x2d - strneh r0, [r6, #-0x2]! - bne _020E5B34 - ldr r0, [sp, #0xc] - cmp r0, #0x1 - moveq r0, #0x2b - streqh r0, [r6, #-0x2]! - beq _020E5B34 - cmp r0, #0x2 - moveq r0, #0x20 - streqh r0, [r6, #-0x2]! -_020E5B34: - mov r0, r6 - add sp, sp, #0x18 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E5B48: .word 0x000001FD - - arm_func_start double2hex_wide -double2hex_wide: ; 0x020E5B4C - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r10,lr} - sub sp, sp, #0x44 - ldr r7, [sp, #0x80] - ldr r0, _020E5EB8 ; =0x000001FD - mov r8, r2 - cmp r7, r0 - ldrh r6, [sp, #0x7a] - ldrb r5, [sp, #0x77] - ldrb r4, [sp, #0x75] - ldr r1, [sp, #0x68] - ldr r2, [sp, #0x6c] - addgt sp, sp, #0x44 - movgt r0, #0x0 - ldmgtia sp!, {r3-r10,lr} - addgt sp, sp, #0x10 - bxgt lr - mov r10, #0x0 - mov r9, #0x20 - add r0, sp, #0x8 - add r3, sp, #0xc - strb r10, [sp, #0x8] - strh r9, [sp, #0xa] - bl __num2dec_internal2 - ldr r0, [sp, #0x68] - ldr r1, [sp, #0x6c] - bl fabs - mov r2, r0 - mov r0, r10 - mov r3, r1 - mov r1, r0 - bl _deq - bne _020E5BF4 - sub r4, r8, #0xc - ldr r1, _020E5EBC ; =0x02106DE4 - mov r0, r4 - bl wcscpy - add sp, sp, #0x44 - mov r0, r4 - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E5BF4: - ldrb r0, [sp, #0x11] - cmp r0, #0x49 - bne _020E5C74 - ldrsb r0, [sp, #0xc] - cmp r0, #0x0 - beq _020E5C38 - cmp r6, #0x41 - sub r4, r8, #0xa - bne _020E5C28 - ldr r1, _020E5EC0 ; =0x02106DF0 - mov r0, r4 - bl wcscpy - b _020E5C60 -_020E5C28: - ldr r1, _020E5EC4 ; =0x02106DFC - mov r0, r4 - bl wcscpy - b _020E5C60 -_020E5C38: - cmp r6, #0x41 - sub r4, r8, #0x8 - bne _020E5C54 - ldr r1, _020E5EC8 ; =0x02106E08 - mov r0, r4 - bl wcscpy - b _020E5C60 -_020E5C54: - ldr r1, _020E5ECC ; =0x02106E10 - mov r0, r4 - bl wcscpy -_020E5C60: - add sp, sp, #0x44 - mov r0, r4 - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E5C74: - cmp r0, #0x4e - bne _020E5CF0 - ldrsb r0, [sp, #0xc] - cmp r0, #0x0 - beq _020E5CB4 - cmp r6, #0x41 - sub r4, r8, #0xa - bne _020E5CA4 - ldr r1, _020E5ED0 ; =0x02106E18 - mov r0, r4 - bl wcscpy - b _020E5CDC -_020E5CA4: - ldr r1, _020E5ED4 ; =0x02106E24 - mov r0, r4 - bl wcscpy - b _020E5CDC -_020E5CB4: - cmp r6, #0x41 - sub r4, r8, #0x8 - bne _020E5CD0 - ldr r1, _020E5ED8 ; =0x02106E30 - mov r0, r4 - bl wcscpy - b _020E5CDC -_020E5CD0: - ldr r1, _020E5EDC ; =0x02106E38 - mov r0, r4 - bl wcscpy -_020E5CDC: - add sp, sp, #0x44 - mov r0, r4 - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E5CF0: - mov r3, r10 - mov r1, #0x1 - mov r0, #0x64 - add r9, sp, #0x68 - strb r1, [sp, #0x34] - strb r1, [sp, #0x35] - strb r3, [sp, #0x36] - strb r3, [sp, #0x37] - strb r3, [sp, #0x38] - str r3, [sp, #0x3c] - str r1, [sp, #0x40] - strh r0, [sp, #0x3a] -_020E5D20: - rsb r1, r3, #0x7 - ldrsb r2, [r9, r3] - ldrsb r0, [r9, r1] - strb r0, [r9, r3] - add r3, r3, #0x1 - strb r2, [r9, r1] - cmp r3, #0x4 - blt _020E5D20 - ldrb r0, [sp, #0x69] - ldrb r1, [sp, #0x68] - ldr sb, _020E5EE0 ; =0x000007FF - mov r0, r0, lsl #0x11 - orr r1, r0, r1, lsl #0x19 - add r0, sp, #0x34 - and lr, r9, r1, lsr #0x15 - sub r12, sp, #0x8 - ldmia r0, {r0-r3} - stmia r12, {r0-r3} - rsb r0, r9, #0x400 - mov r1, r8 - add r0, lr, r0 - ldmia r12, {r2-r3} - bl long2str_wide - cmp r6, #0x61 - moveq r1, #0x70 - movne r1, #0x50 - strh r1, [r0, #-0x2]! - mov r1, r7, lsl #0x2 - mov lr, r7 - cmp r7, #0x1 - add r8, r1, #0xb - add r12, sp, #0x68 - blt _020E5E30 - mov r9, #0x30 -_020E5DA8: - cmp r8, #0x40 - bge _020E5E18 - ldrb r1, [r12, r8, asr #0x3] - and r2, r8, #0x7 - rsb r3, r2, #0x7 - mov r2, r1, asr r3 - sub r10, r8, #0x4 - bic r1, r8, #0x7 - bic r10, r10, #0x7 - cmp r1, r10 - add r10, r12, r8, asr #0x3 - and r1, r2, #0xff - beq _020E5DEC - ldrb r2, [r10, #-0x1] - mov r2, r2, lsl #0x8 - orr r1, r1, r2, asr r3 - and r1, r1, #0xff -_020E5DEC: - and r1, r1, #0xf - cmp r1, #0xa - addcc r1, r1, #0x30 - andcc r1, r1, #0xff - blo _020E5E1C - cmp r6, #0x61 - addeq r1, r1, #0x57 - andeq r1, r1, #0xff - addne r1, r1, #0x37 - andne r1, r1, #0xff - b _020E5E1C -_020E5E18: - mov r1, r9 -_020E5E1C: - sub lr, lr, #0x1 - cmp lr, #0x1 - strh r1, [r0, #-0x2]! - sub r8, r8, #0x4 - bge _020E5DA8 -_020E5E30: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r1, #0x2e - strneh r1, [r0, #-0x2]! - mov r1, #0x31 - strh r1, [r0, #-0x2] - cmp r6, #0x61 - moveq r1, #0x78 - movne r1, #0x58 - strh r1, [r0, #-0x4]! - mov r1, #0x30 - strh r1, [r0, #-0x2]! - ldrsb r1, [sp, #0xc] - cmp r1, #0x0 - movne r1, #0x2d - strneh r1, [r0, #-0x2]! - addne sp, sp, #0x44 - ldmneia sp!, {r3-r10,lr} - addne sp, sp, #0x10 - bxne lr - cmp r4, #0x1 - moveq r1, #0x2b - streqh r1, [r0, #-0x2]! - addeq sp, sp, #0x44 - ldmeqia sp!, {r3-r10,lr} - addeq sp, sp, #0x10 - bxeq lr - cmp r4, #0x2 - moveq r1, #0x20 - streqh r1, [r0, #-0x2]! - add sp, sp, #0x44 - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E5EB8: .word 0x000001FD -_020E5EBC: .word 0x02106DE4 -_020E5EC0: .word 0x02106DF0 -_020E5EC4: .word 0x02106DFC -_020E5EC8: .word 0x02106E08 -_020E5ECC: .word 0x02106E10 -_020E5ED0: .word 0x02106E18 -_020E5ED4: .word 0x02106E24 -_020E5ED8: .word 0x02106E30 -_020E5EDC: .word 0x02106E38 -_020E5EE0: .word 0x000007FF - - arm_func_start round_decimal_wide -round_decimal_wide: ; 0x020E5EE4 - stmdb sp!, {r4,lr} - cmp r1, #0x0 - bge _020E5F0C - mov r1, #0x0 - strh r1, [r0, #0x2] - mov r1, #0x1 - strb r1, [r0, #0x4] - mov r1, #0x30 - strb r1, [r0, #0x5] - ldmia sp!, {r4,pc} -_020E5F0C: - ldrb lr, [r0, #0x4] - cmp r1, lr - ldmgeia sp!, {r4,pc} -_020E5F18: - .byte 0x05, 0xC0, 0x80, 0xE2, 0x01, 0x20, 0x8C, 0xE0 - .byte 0x01, 0x20, 0x82, 0xE2, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2, 0x03, 0x3C, 0xA0, 0xE1 - .byte 0x43, 0x3C, 0xA0, 0xE1, 0x05, 0x00, 0x53, 0xE3, 0x0B, 0x00, 0x00, 0x1A, 0x0E, 0xC0, 0x8C, 0xE0 - .byte 0x01, 0xC0, 0x4C, 0xE2, 0x02, 0x00, 0x5C, 0xE1, 0x02, 0x00, 0x00, 0x9A, 0xD0, 0x30, 0xDC, 0xE1 - .byte 0x30, 0x00, 0x53, 0xE3, 0xF9, 0xFF, 0xFF, 0x0A, 0x02, 0x00, 0x5C, 0xE1, 0xD1, 0x30, 0x52, 0x01 - .byte 0x01, 0x40, 0x03, 0x02, 0x01, 0x40, 0xA0, 0x13, 0x01, 0x00, 0x00, 0xEA, 0x01, 0x40, 0xA0, 0xC3 - .byte 0x00, 0x40, 0xA0, 0xD3, 0x00, 0x00, 0x51, 0xE3, 0x14, 0x00, 0x00, 0x0A, 0x00, 0xC0, 0xA0, 0xE3 - .byte 0x01, 0xE0, 0xA0, 0xE3, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2, 0x04, 0x30, 0x83, 0xE0 - .byte 0x03, 0x3C, 0xA0, 0xE1, 0x43, 0x3C, 0xA0, 0xE1, 0x09, 0x00, 0x53, 0xE3, 0x0E, 0x40, 0xA0, 0xC1 - .byte 0x0C, 0x40, 0xA0, 0xD1, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x53, 0xE3 - .byte 0x01, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x41, 0xE2, 0x02, 0x00, 0x00, 0xEA, 0x30, 0x30, 0x83, 0xE2 - .byte 0x00, 0x30, 0xC2, 0xE5, 0x01, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0xEC, 0xFF, 0xFF, 0x1A - .byte 0x00, 0x00, 0x54, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0xF2, 0x30, 0xD0, 0xE1, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x31, 0x10, 0xA0, 0xE3, 0x01, 0x30, 0x83, 0xE2, 0xB2, 0x30, 0xC0, 0xE1, 0x04, 0x20, 0xC0, 0xE5 - .byte 0x05, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x51, 0xE3, 0xBB, 0xFF, 0xFF, 0x0A - .byte 0x04, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8 - - arm_func_start float2str_wide -float2str_wide: ; 0x020E6008 - stmdb sp!, {r0-r3} - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x22c - mov r10, r0 - add r0, sp, #0x250 - ldr r7, [sp, #0x268] - ldr r3, _020E6628 ; =0x000001FD - ldrh r6, [r0, #0x12] - cmp r7, r3 - ldrb r5, [sp, #0x25f] - ldrb r4, [sp, #0x25d] - mov r8, r1 - mov r9, r2 - addgt sp, sp, #0x22c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - mov r12, #0x0 - mov r11, #0x20 - add r0, sp, #0x0 - add r3, sp, #0x4 - mov r1, r10 - mov r2, r8 - strb r12, [sp, #0x0] - strh r11, [sp, #0x2] - bl __num2dec_internal2 - ldrb r0, [sp, #0x8] - add r1, sp, #0x9 - add r0, r1, r0 - b _020E609C -_020E6084: - ldrb r2, [sp, #0x8] - ldrsh r1, [sp, #0x6] - sub r2, r2, #0x1 - add r1, r1, #0x1 - strb r2, [sp, #0x8] - strh r1, [sp, #0x6] -_020E609C: - ldrb r1, [sp, #0x8] - cmp r1, #0x1 - bls _020E60B4 - ldrsb r1, [r0, #-0x1]! - cmp r1, #0x30 - beq _020E6084 -_020E60B4: - ldrb r0, [sp, #0x9] - cmp r0, #0x30 - beq _020E60D4 - cmp r0, #0x49 - beq _020E60E0 - cmp r0, #0x4e - beq _020E6198 - b _020E6244 -_020E60D4: - mov r0, #0x0 - strh r0, [sp, #0x6] - b _020E6244 -_020E60E0: - mov r2, #0x0 - mov r0, r10 - mov r1, r8 - mov r3, r2 - bl _dls - bhs _020E6140 - cmp r6, #0x80 - sub r4, r9, #0xa - movcs r0, #0x0 - bhs _020E6118 - ldr r0, _020E662C ; =0x02104544 - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x200 -_020E6118: - cmp r0, #0x0 - beq _020E6130 - ldr r1, _020E6630 ; =0x02106DF0 - mov r0, r4 - bl wcscpy - b _020E6184 -_020E6130: - ldr r1, _020E6634 ; =0x02106DFC - mov r0, r4 - bl wcscpy - b _020E6184 -_020E6140: - cmp r6, #0x80 - sub r4, r9, #0x8 - movcs r0, #0x0 - bhs _020E6160 - ldr r0, _020E662C ; =0x02104544 - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x200 -_020E6160: - cmp r0, #0x0 - beq _020E6178 - ldr r1, _020E6638 ; =0x02106E08 - mov r0, r4 - bl wcscpy - b _020E6184 -_020E6178: - ldr r1, _020E663C ; =0x02106E10 - mov r0, r4 - bl wcscpy -_020E6184: - add sp, sp, #0x22c - mov r0, r4 - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E6198: - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - beq _020E61EC - cmp r6, #0x80 - sub r4, r9, #0xa - movcs r0, #0x0 - bhs _020E61C4 - ldr r0, _020E662C ; =0x02104544 - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x200 -_020E61C4: - cmp r0, #0x0 - beq _020E61DC - ldr r1, _020E6640 ; =0x02106E18 - mov r0, r4 - bl wcscpy - b _020E6230 -_020E61DC: - ldr r1, _020E6644 ; =0x02106E24 - mov r0, r4 - bl wcscpy - b _020E6230 -_020E61EC: - cmp r6, #0x80 - sub r4, r9, #0x8 - movcs r0, #0x0 - bhs _020E620C - ldr r0, _020E662C ; =0x02104544 - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x200 -_020E620C: - cmp r0, #0x0 - beq _020E6224 - ldr r1, _020E6648 ; =0x02106E30 - mov r0, r4 - bl wcscpy - b _020E6230 -_020E6224: - ldr r1, _020E664C ; =0x02106E38 - mov r0, r4 - bl wcscpy -_020E6230: - add sp, sp, #0x22c - mov r0, r4 - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E6244: - ldrb r1, [sp, #0x8] - ldrsh r2, [sp, #0x6] - add r0, sp, #0x200 - sub r1, r1, #0x1 - add r0, r0, #0x2a - add r1, r2, r1 - sub r8, r0, #0x1 - strh r1, [sp, #0x6] - mov r0, #0x0 - strb r0, [r8, #0x0] - cmp r6, #0x65 - bgt _020E62A0 - bge _020E632C - cmp r6, #0x47 - bgt _020E65EC - cmp r6, #0x45 - blt _020E65EC - beq _020E632C - cmp r6, #0x46 - beq _020E6478 - cmp r6, #0x47 - beq _020E62B8 - b _020E65EC -_020E62A0: - cmp r6, #0x66 - bgt _020E62B0 - beq _020E6478 - b _020E65EC -_020E62B0: - cmp r6, #0x67 - bne _020E65EC -_020E62B8: - ldrb r0, [sp, #0x8] - cmp r0, r7 - ble _020E62D0 - add r0, sp, #0x4 - mov r1, r7 - bl round_decimal_wide -_020E62D0: - ldrsh r2, [sp, #0x6] - mvn r0, #0x3 - cmp r2, r0 - blt _020E62E8 - cmp r2, r7 - blt _020E6308 -_020E62E8: - cmp r5, #0x0 - ldreqb r0, [sp, #0x8] - subne r7, r7, #0x1 - subeq r7, r0, #0x1 - cmp r6, #0x67 - moveq r6, #0x65 - movne r6, #0x45 - b _020E632C -_020E6308: - cmp r5, #0x0 - addne r0, r2, #0x1 - subne r7, r7, r0 - bne _020E6478 - ldrb r1, [sp, #0x8] - add r0, r2, #0x1 - subs r7, r1, r0 - movmi r7, #0x0 - b _020E6478 -_020E632C: - ldrb r0, [sp, #0x8] - add r1, r7, #0x1 - cmp r0, r1 - ble _020E6344 - add r0, sp, #0x4 - bl round_decimal_wide -_020E6344: - ldrsh lr, [sp, #0x6] - mov r11, #0x2b - mov r10, #0x0 - cmp lr, #0x0 - rsblt lr, lr, #0x0 - movlt r11, #0x2d - ldr r3, _020E6650 ; =0x66666667 - mov r0, #0xa - b _020E6398 -_020E6368: - mov r1, lr, lsr #0x1f - smull r2, r12, r3, lr - add r12, r1, r12, asr #0x2 - smull r1, r2, r0, r12 - sub r12, lr, r1 - add r1, r12, #0x30 - strb r1, [r8, #-0x1]! - mov r2, lr - smull r1, lr, r3, r2 - mov r1, r2, lsr #0x1f - add lr, r1, lr, asr #0x2 - add r10, r10, #0x1 -_020E6398: - cmp lr, #0x0 - bne _020E6368 - cmp r10, #0x2 - blt _020E6368 - add r0, sp, #0x2a - strb r11, [r8, #-0x1] - strb r6, [r8, #-0x2]! - sub r1, r0, r8 - ldr r0, _020E6628 ; =0x000001FD - add r1, r1, r7 - cmp r1, r0 - addgt sp, sp, #0x22c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - ldrb r1, [sp, #0x8] - add r0, r7, #0x1 - cmp r1, r0 - bge _020E6408 - add r0, r7, #0x2 - sub r0, r0, r1 - subs r1, r0, #0x1 - beq _020E6408 - mov r0, #0x30 -_020E63FC: - strb r0, [r8, #-0x1]! - subs r1, r1, #0x1 - bne _020E63FC -_020E6408: - ldrb r1, [sp, #0x8] - add r0, sp, #0x9 - add r2, r0, r1 - subs r1, r1, #0x1 - beq _020E642C -_020E641C: - ldrsb r0, [r2, #-0x1]! - subs r1, r1, #0x1 - strb r0, [r8, #-0x1]! - bne _020E641C -_020E642C: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r0, #0x2e - strneb r0, [r8, #-0x1]! - ldrb r0, [sp, #0x9] - strb r0, [r8, #-0x1]! - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r8, #-0x1]! - bne _020E65EC - cmp r4, #0x1 - moveq r0, #0x2b - streqb r0, [r8, #-0x1]! - beq _020E65EC - cmp r4, #0x2 - moveq r0, #0x20 - streqb r0, [r8, #-0x1]! - b _020E65EC -_020E6478: - ldrsh r3, [sp, #0x6] - ldrb r2, [sp, #0x8] - sub r0, r2, r3 - subs r1, r0, #0x1 - movmi r1, #0x0 - cmp r1, r7 - ble _020E64B8 - sub r1, r1, r7 - add r0, sp, #0x4 - sub r1, r2, r1 - bl round_decimal_wide - ldrsh r3, [sp, #0x6] - ldrb r2, [sp, #0x8] - sub r0, r2, r3 - subs r1, r0, #0x1 - movmi r1, #0x0 -_020E64B8: - adds r0, r3, #0x1 - movmi r0, #0x0 - ldr r3, _020E6628 ; =0x000001FD - add r6, r0, r1 - cmp r6, r3 - addgt sp, sp, #0x22c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - add r3, sp, #0x9 - sub r6, r7, r1 - cmp r6, #0x0 - add r2, r3, r2 - mov r10, #0x0 - ble _020E650C - mov r3, #0x30 -_020E64FC: - add r10, r10, #0x1 - cmp r10, r6 - strb r3, [r8, #-0x1]! - blt _020E64FC -_020E650C: - mov r6, #0x0 - b _020E6520 -_020E6514: - ldrsb r3, [r2, #-0x1]! - add r6, r6, #0x1 - strb r3, [r8, #-0x1]! -_020E6520: - cmp r6, r1 - ldrltb r3, [sp, #0x8] - cmplt r6, r3 - blt _020E6514 - cmp r6, r1 - bge _020E654C - mov r3, #0x30 -_020E653C: - add r6, r6, #0x1 - cmp r6, r1 - strb r3, [r8, #-0x1]! - blt _020E653C -_020E654C: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r1, #0x2e - strneb r1, [r8, #-0x1]! - cmp r0, #0x0 - beq _020E65B4 - ldrb r1, [sp, #0x8] - mov r5, #0x0 - sub r1, r0, r1 - cmp r1, #0x0 - ble _020E6594 - mov r3, #0x30 -_020E657C: - strb r3, [r8, #-0x1]! - ldrb r1, [sp, #0x8] - add r5, r5, #0x1 - sub r1, r0, r1 - cmp r5, r1 - blt _020E657C -_020E6594: - cmp r5, r0 - bge _020E65BC -_020E659C: - ldrsb r1, [r2, #-0x1]! - add r5, r5, #0x1 - cmp r5, r0 - strb r1, [r8, #-0x1]! - blt _020E659C - b _020E65BC -_020E65B4: - mov r0, #0x30 - strb r0, [r8, #-0x1]! -_020E65BC: - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r8, #-0x1]! - bne _020E65EC - cmp r4, #0x1 - moveq r0, #0x2b - streqb r0, [r8, #-0x1]! - beq _020E65EC - cmp r4, #0x2 - moveq r0, #0x20 - streqb r0, [r8, #-0x1]! -_020E65EC: - mov r0, r8 - bl strlen - sub r1, r9, r0, lsl #0x1 - mov r0, r8 - sub r4, r1, #0x2 - bl strlen - mov r2, r0 - mov r0, r4 - mov r1, r8 - bl mbstowcs - mov r0, r4 - add sp, sp, #0x22c - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E6628: .word 0x000001FD -_020E662C: .word 0x02104544 -_020E6630: .word 0x02106DF0 -_020E6634: .word 0x02106DFC -_020E6638: .word 0x02106E08 -_020E663C: .word 0x02106E10 -_020E6640: .word 0x02106E18 -_020E6644: .word 0x02106E24 -_020E6648: .word 0x02106E30 -_020E664C: .word 0x02106E38 -_020E6650: .word 0x66666667 -__wpformatter: - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x430 - mov r3, #0x20 - mov r11, r2 - strh r3, [sp, #0x1c] - ldrh r2, [r11, #0x0] - mov r9, r0 - mov r8, r1 - cmp r2, #0x0 - mov r4, #0x0 - beq _020E6F24 -_020E6684: - mov r0, r11 - mov r1, #0x25 - bl wcschr - str r0, [sp, #0xc] - cmp r0, #0x0 - bne _020E66D8 - mov r0, r11 - bl wcslen - movs r2, r0 - add r4, r4, r2 - beq _020E6F24 - mov r0, r8 - mov r1, r11 - blx r9 - cmp r0, #0x0 - bne _020E6F24 - add sp, sp, #0x430 - mvn r0, #0x0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E66D8: - sub r0, r0, r11 - add r0, r0, r0, lsr #0x1f - movs r2, r0, asr #0x1 - add r4, r4, r2 - beq _020E6710 - mov r0, r8 - mov r1, r11 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E6710: - add r1, sp, #0x400 - ldr r0, [sp, #0xc] - add r1, r1, #0x64 - add r2, sp, #0x20 - bl parse_format_wprintf - ldrh r1, [sp, #0x26] - mov r11, r0 - cmp r1, #0x61 - bgt _020E6780 - bge _020E6AEC - cmp r1, #0x47 - bgt _020E6774 - subs r0, r1, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020E6768 -_020E674C: - .byte 0xE6, 0x00, 0x00, 0xEA - .byte 0x8E, 0x01, 0x00, 0xEA, 0x8D, 0x01, 0x00, 0xEA, 0x8C, 0x01, 0x00, 0xEA, 0xC6, 0x00, 0x00, 0xEA - .byte 0xC5, 0x00, 0x00, 0xEA, 0xC4, 0x00, 0x00, 0xEA -_020E6768: - cmp r1, #0x25 - beq _020E6D7C - b _020E6D90 -_020E6774: - cmp r1, #0x58 - beq _020E6940 - b _020E6D90 -_020E6780: - cmp r1, #0x75 - bgt _020E67E8 - subs r0, r1, #0x64 - addpl pc, pc, r0, lsl #0x2 - b _020E67DC -_020E6794: - .byte 0x1A, 0x00, 0x00, 0xEA, 0xB7, 0x00, 0x00, 0xEA, 0xB6, 0x00, 0x00, 0xEA - .byte 0xB5, 0x00, 0x00, 0xEA, 0x79, 0x01, 0x00, 0xEA, 0x15, 0x00, 0x00, 0xEA, 0x77, 0x01, 0x00, 0xEA - .byte 0x76, 0x01, 0x00, 0xEA, 0x75, 0x01, 0x00, 0xEA, 0x74, 0x01, 0x00, 0xEA, 0x35, 0x01, 0x00, 0xEA - .byte 0x5E, 0x00, 0x00, 0xEA, 0x71, 0x01, 0x00, 0xEA, 0x70, 0x01, 0x00, 0xEA, 0x6F, 0x01, 0x00, 0xEA - .byte 0xE1, 0x00, 0x00, 0xEA, 0x6D, 0x01, 0x00, 0xEA, 0x58, 0x00, 0x00, 0xEA -_020E67DC: - cmp r1, #0x63 - beq _020E6D24 - b _020E6D90 -_020E67E8: - cmp r1, #0x78 - bgt _020E67F8 - beq _020E6940 - b _020E6D90 -_020E67F8: - ldr r0, _020E6F38 ; =0x0000FFFF - cmp r1, r0 - b _020E6D90 -_020E6804: - .byte 0x24, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A - .byte 0x64, 0x14, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5 - .byte 0x25, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5 - .byte 0x08, 0x20, 0x81, 0xE2, 0x64, 0x24, 0x8D, 0xE5, 0x08, 0x10, 0x12, 0xE5, 0x10, 0x10, 0x8D, 0xE5 - .byte 0x04, 0x10, 0x12, 0xE5, 0x14, 0x10, 0x8D, 0xE5, 0x1B, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x50, 0xE3 - .byte 0x07, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5, 0x08, 0x20, 0x81, 0xE2, 0x64, 0x24, 0x8D, 0xE5 - .byte 0x08, 0x10, 0x12, 0xE5, 0x10, 0x10, 0x8D, 0xE5, 0x04, 0x10, 0x12, 0xE5, 0x14, 0x10, 0x8D, 0xE5 - .byte 0x11, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5 - .byte 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5, 0x0A, 0x00, 0x00, 0xEA - .byte 0x08, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2 - .byte 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x64, 0x14, 0x9D, 0xE5 - .byte 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5, 0x02, 0x00, 0x50, 0xE3 - .byte 0x0A, 0x18, 0xA0, 0x01, 0x41, 0xA8, 0xA0, 0x01, 0x04, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13 - .byte 0x20, 0x00, 0x8D, 0xE2, 0x0A, 0x00, 0x00, 0x1A, 0x04, 0x50, 0x4D, 0xE2, 0x0F, 0x00, 0x90, 0xE8 - .byte 0x0F, 0x00, 0x85, 0xE8, 0x00, 0x30, 0x95, 0xE5, 0x10, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x9D, 0xE5 - .byte 0x43, 0x2E, 0x8D, 0xE2, 0xDB, 0xFB, 0xFF, 0xEB, 0x00, 0x60, 0xB0, 0xE1, 0x23, 0x01, 0x00, 0x0A - .byte 0x08, 0x00, 0x00, 0xEA, 0x08, 0x50, 0x4D, 0xE2, 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x85, 0xE8 - .byte 0x43, 0x1E, 0x8D, 0xE2, 0x0A, 0x00, 0xA0, 0xE1, 0x0C, 0x00, 0x95, 0xE8, 0x3D, 0xFB, 0xFF, 0xEB - .byte 0x00, 0x60, 0xB0, 0xE1, 0x19, 0x01, 0x00, 0x0A, 0x01, 0x0B, 0x8D, 0xE2, 0x2E, 0x00, 0x80, 0xE2 - .byte 0x06, 0x00, 0x40, 0xE0, 0xA0, 0x0F, 0x80, 0xE0, 0xC0, 0x70, 0xA0, 0xE1, 0x26, 0x01, 0x00, 0xEA -_020E6940: - ldrb r0, [sp, #0x24] - cmp r0, #0x3 - bne _020E6960 - ldr r1, [sp, #0x464] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r10, [r1, #-0x4] - b _020E69F8 -_020E6960: - cmp r0, #0x4 - bne _020E6988 - ldr r1, [sp, #0x464] - add r2, r1, #0x8 - str r2, [sp, #0x464] - ldr r1, [r2, #-0x8] - str r1, [sp, #0x10] - ldr r1, [r2, #-0x4] - str r1, [sp, #0x14] - b _020E69F8 -_020E6988: - cmp r0, #0x6 - bne _020E69B0 - ldr r1, [sp, #0x464] - add r2, r1, #0x8 - str r2, [sp, #0x464] - ldr r1, [r2, #-0x8] - str r1, [sp, #0x10] - ldr r1, [r2, #-0x4] - str r1, [sp, #0x14] - b _020E69F8 -_020E69B0: - cmp r0, #0x7 - bne _020E69CC - ldr r1, [sp, #0x464] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r10, [r1, #-0x4] - b _020E69F8 -_020E69CC: - cmp r0, #0x8 - bne _020E69E8 - ldr r1, [sp, #0x464] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r10, [r1, #-0x4] - b _020E69F8 -_020E69E8: - ldr r1, [sp, #0x464] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r10, [r1, #-0x4] -_020E69F8: - cmp r0, #0x2 - moveq r1, r10, lsl #0x10 - moveq r10, r1, lsr #0x10 - cmp r0, #0x4 - cmpne r0, #0x6 - add r0, sp, #0x20 - bne _020E6A40 - sub r5, sp, #0x4 - ldmia r0, {r0-r3} - stmia r5, {r0-r3} - ldr r3, [r5, #0x0] - ldr r0, [sp, #0x10] - ldr r1, [sp, #0x14] - add r2, sp, #0x430 - bl longlong2str_wide - movs r6, r0 - beq _020E6D90 - b _020E6A64 -_020E6A40: - sub r5, sp, #0x8 - ldmia r0, {r0-r3} - stmia r5, {r0-r3} - add r1, sp, #0x430 - mov r0, r10 - ldmia r5, {r2-r3} - bl long2str_wide - movs r6, r0 - beq _020E6D90 -_020E6A64: - add r0, sp, #0x400 - add r0, r0, #0x2e - sub r0, r0, r6 - add r0, r0, r0, lsr #0x1f - mov r7, r0, asr #0x1 - b _020E6DDC -_020E6A7C: - .byte 0x24, 0x00, 0xDD, 0xE5 - .byte 0x09, 0x00, 0x50, 0xE3, 0x64, 0x04, 0x9D, 0x15, 0x08, 0x00, 0x80, 0x12, 0x64, 0x04, 0x8D, 0x15 - .byte 0x02, 0x00, 0x00, 0x1A, 0x64, 0x04, 0x9D, 0xE5, 0x08, 0x00, 0x80, 0xE2, 0x64, 0x04, 0x8D, 0xE5 - .byte 0x08, 0x70, 0x10, 0xE5, 0x04, 0x60, 0x10, 0xE5, 0x20, 0x00, 0x8D, 0xE2, 0x04, 0x50, 0x4D, 0xE2 - .byte 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x85, 0xE8, 0x00, 0x30, 0x95, 0xE5, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x06, 0x10, 0xA0, 0xE1, 0x43, 0x2E, 0x8D, 0xE2, 0x4E, 0xFD, 0xFF, 0xEB, 0x00, 0x60, 0xB0, 0xE1 - .byte 0xAE, 0x00, 0x00, 0x0A, 0x01, 0x0B, 0x8D, 0xE2, 0x2E, 0x00, 0x80, 0xE2, 0x06, 0x00, 0x40, 0xE0 - .byte 0xA0, 0x0F, 0x80, 0xE0, 0xC0, 0x70, 0xA0, 0xE1, 0xBB, 0x00, 0x00, 0xEA -_020E6AEC: - ldrb r0, [sp, #0x24] - cmp r0, #0x9 - ldrne r0, [sp, #0x464] - addne r0, r0, #0x8 - strne r0, [sp, #0x464] - bne _020E6B10 - ldr r0, [sp, #0x464] - add r0, r0, #0x8 - str r0, [sp, #0x464] -_020E6B10: - ldr r7, [r0, #-0x8] - ldr r6, [r0, #-0x4] - add r0, sp, #0x20 - sub r5, sp, #0x4 - ldmia r0, {r0-r3} - stmia r5, {r0-r3} - ldr r3, [r5, #0x0] - mov r0, r7 - mov r1, r6 - add r2, sp, #0x430 - bl double2hex_wide - movs r6, r0 - beq _020E6D90 - add r0, sp, #0x400 - add r0, r0, #0x2e - sub r0, r0, r6 - add r0, r0, r0, lsr #0x1f - mov r7, r0, asr #0x1 - b _020E6DDC -_020E6B5C: - .byte 0x24, 0x00, 0xDD, 0xE5 - .byte 0x05, 0x00, 0x50, 0xE3, 0x23, 0x00, 0x00, 0x1A, 0x64, 0x04, 0x9D, 0xE5, 0x04, 0x00, 0x80, 0xE2 - .byte 0x64, 0x04, 0x8D, 0xE5, 0x04, 0x60, 0x10, 0xE5, 0x23, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x56, 0xE3 - .byte 0xB4, 0x63, 0x9F, 0x05, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0xB2, 0x10, 0xD6, 0xE0 - .byte 0x22, 0x00, 0xDD, 0xE5, 0xFF, 0x70, 0x01, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x8E, 0x00, 0x00, 0x0A - .byte 0x2C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x57, 0xE1, 0x00, 0x70, 0xA0, 0xC1, 0x8A, 0x00, 0x00, 0xEA - .byte 0x22, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x2C, 0x70, 0x9D, 0xE5 - .byte 0x06, 0x00, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x29, 0xF9, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x80, 0x00, 0x00, 0x0A, 0x06, 0x00, 0x40, 0xE0, 0xA0, 0x0F, 0x80, 0xE0 - .byte 0xC0, 0x70, 0xA0, 0xE1, 0x7C, 0x00, 0x00, 0xEA, 0x06, 0x00, 0xA0, 0xE1, 0x0A, 0x01, 0x00, 0xEB - .byte 0x00, 0x70, 0xA0, 0xE1, 0x78, 0x00, 0x00, 0xEA, 0x64, 0x04, 0x9D, 0xE5, 0x04, 0x00, 0x80, 0xE2 - .byte 0x64, 0x04, 0x8D, 0xE5, 0x04, 0x50, 0x10, 0xE5, 0x23, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x55, 0xE3 - .byte 0x28, 0x53, 0x9F, 0x05, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0xB0, 0x10, 0xD6, 0xE1 - .byte 0x22, 0x00, 0xDD, 0xE5, 0xFF, 0x60, 0x01, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x11, 0x00, 0x00, 0x0A - .byte 0x2C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x56, 0xE1, 0x00, 0x60, 0xA0, 0xC1, 0x0D, 0x00, 0x00, 0xEA - .byte 0x22, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0x2C, 0x60, 0x9D, 0xE5 - .byte 0x05, 0x00, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x15, 0xE2, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x60, 0x40, 0x10, 0x02, 0x00, 0x00, 0xEA, 0x05, 0x00, 0xA0, 0xE1 - .byte 0x8D, 0xF0, 0xFF, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x30, 0x00, 0x8D, 0xE2, 0x05, 0x10, 0xA0, 0xE1 - .byte 0x06, 0x20, 0xA0, 0xE1, 0xAB, 0xE1, 0xFF, 0xEB, 0x00, 0x70, 0xB0, 0xE1, 0x3F, 0x00, 0x00, 0x4A - .byte 0x30, 0x60, 0x8D, 0xE2, 0x50, 0x00, 0x00, 0xEA, 0x64, 0x14, 0x9D, 0xE5, 0x24, 0x00, 0xDD, 0xE5 - .byte 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0x60, 0x11, 0xE5, 0x08, 0x00, 0x50, 0xE3 - .byte 0x00, 0xF1, 0x8F, 0x90, 0x97, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0x95, 0x00, 0x00, 0xEA - .byte 0x07, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x11, 0x00, 0x00, 0xEA, 0x91, 0x00, 0x00, 0xEA - .byte 0x07, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5 - .byte 0x8C, 0x00, 0x00, 0xEA, 0xB0, 0x40, 0xC6, 0xE1, 0x8A, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5 - .byte 0x88, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5, 0xC4, 0x0F, 0xA0, 0xE1, 0x04, 0x00, 0x86, 0xE5 - .byte 0x84, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5, 0x82, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5 - .byte 0x80, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5, 0xC4, 0x0F, 0xA0, 0xE1, 0x04, 0x00, 0x86, 0xE5 - .byte 0x7C, 0x00, 0x00, 0xEA -_020E6D24: - ldrb r0, [sp, #0x24] - add r6, sp, #0x30 - cmp r0, #0x5 - bne _020E6D50 - ldr r0, [sp, #0x464] - mov r7, #0x1 - add r0, r0, #0x4 - str r0, [sp, #0x464] - ldr r0, [r0, #-0x4] - strh r0, [r6, #0x0] - b _020E6DDC -_020E6D50: - ldr r0, [sp, #0x464] - add r1, sp, #0x18 - add r0, r0, #0x4 - str r0, [sp, #0x464] - ldr r3, [r0, #-0x4] - mov r0, r6 - mov r2, #0x1 - strb r3, [sp, #0x18] - bl mbtowc - mov r7, r0 - b _020E6DDC -_020E6D7C: - mov r0, #0x25 - strh r0, [sp, #0x30] - add r6, sp, #0x30 - mov r7, #0x1 - b _020E6DDC -_020E6D90: - ldr r0, [sp, #0xc] - bl wcslen - movs r5, r0 - beq _020E6DC8 - ldr r1, [sp, #0xc] - mov r0, r8 - mov r2, r5 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E6DC8: - add sp, sp, #0x430 - add r0, r4, r5 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E6DDC: - ldrb r0, [sp, #0x20] - mov r5, r7 - cmp r0, #0x0 - beq _020E6E8C - cmp r0, #0x2 - moveq r1, #0x30 - movne r1, #0x20 - strh r1, [sp, #0x1c] - ldrh r0, [r6, #0x0] - cmp r0, #0x2b - cmpne r0, #0x2d - cmpne r0, #0x20 - bne _020E6E48 - cmp r1, #0x30 - bne _020E6E48 - mov r0, r8 - mov r1, r6 - mov r2, #0x1 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - add r6, r6, #0x2 - sub r7, r7, #0x1 -_020E6E48: - ldr r0, [sp, #0x28] - cmp r5, r0 - bge _020E6E8C -_020E6E54: - mov r0, r8 - add r1, sp, #0x1c - mov r2, #0x1 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x28] - add r5, r5, #0x1 - cmp r5, r0 - blt _020E6E54 -_020E6E8C: - cmp r7, #0x0 - beq _020E6EBC - mov r0, r8 - mov r1, r6 - mov r2, r7 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E6EBC: - ldrb r0, [sp, #0x20] - cmp r0, #0x0 - bne _020E6F14 - ldr r0, [sp, #0x28] - cmp r5, r0 - bge _020E6F14 - mov r7, #0x20 -_020E6ED8: - mov r0, r8 - add r1, sp, #0x1a - mov r2, #0x1 - strh r7, [sp, #0x1a] - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x28] - add r5, r5, #0x1 - cmp r5, r0 - blt _020E6ED8 -_020E6F14: - add r4, r4, r5 - ldrh r0, [r11, #0x0] - cmp r0, #0x0 - bne _020E6684 -_020E6F24: - mov r0, r4 - add sp, sp, #0x430 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E6F38: .word 0x0000FFFF -_020E6F3C: - .byte 0x40, 0x6E, 0x10, 0x02 - .byte 0x44, 0x6E, 0x10, 0x02 - - arm_func_start __wStringWrite -__wStringWrite: ; 0x020E6F44 - stmdb sp!, {r3-r5,lr} - mov r4, r0 - ldr r3, [r4, #0x8] - mov r5, r2 - ldr r2, [r4, #0x4] - add r0, r3, r5 - cmp r0, r2 - ldr r0, [r4, #0x0] - subhi r5, r2, r3 - mov r2, r5 - add r0, r0, r3, lsl #0x1 - bl wmemcpy - ldr r1, [r4, #0x8] - add r1, r1, r5 - str r1, [r4, #0x8] - ldmia sp!, {r3-r5,pc} - - arm_func_start swprintf -swprintf: ; 0x020E6F84 - stmdb sp!, {r0-r3} - stmdb sp!, {r3,lr} - add r3, sp, #0x10 - bic r3, r3, #0x3 - ldr r2, [sp, #0x10] - add r3, r3, #0x4 - bl vswprintf - ldmia sp!, {r3,lr} - add sp, sp, #0x10 - bx lr - - arm_func_start vswprintf -vswprintf: ; 0x020E6FAC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - mov r5, r0 - mov r4, r1 - mov r12, #0x0 - ldr r0, _020E7018 ; =__wStringWrite - add r1, sp, #0x0 - str r5, [sp, #0x0] - str r4, [sp, #0x4] - str r12, [sp, #0x8] - bl __wpformatter -_020E6FD8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0xB2 - .byte 0x30, 0x80, 0xBD, 0xB8, 0x04, 0x00, 0x50, 0xE1, 0x04, 0x00, 0x00, 0x2A, 0x80, 0x10, 0xA0, 0xE1 - .byte 0x00, 0x20, 0xA0, 0xE3, 0x0C, 0xD0, 0x8D, 0xE2, 0xB1, 0x20, 0x85, 0xE1, 0x30, 0x80, 0xBD, 0xE8 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x84, 0x00, 0x85, 0xE0, 0xB2, 0x10, 0x40, 0xE1, 0x01, 0x00, 0x41, 0xE2 - .byte 0x0C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 -_020E7018: .word __wStringWrite - - arm_func_start wcslen -wcslen: ; 0x020E701C - mvn r2, #0x0 -_020E7020: - ldrh r1, [r0], #0x2 - add r2, r2, #0x1 - cmp r1, #0x0 - bne _020E7020 - mov r0, r2 - bx lr - - arm_func_start wcscpy -wcscpy: ; 0x020E7038 - mov r3, r0 -_020E703C: - ldrh r2, [r1], #0x2 - mov r12, r3 - strh r2, [r3], #0x2 - ldrh r2, [r12, #0x0] - cmp r2, #0x0 - bne _020E703C - bx lr - - arm_func_start wcschr -wcschr: ; 0x020E7058 - ldrh r2, [r0], #0x2 - cmp r2, #0x0 - beq _020E707C -_020E7064: - cmp r2, r1 - subeq r0, r0, #0x2 - bxeq lr - ldrh r2, [r0], #0x2 - cmp r2, #0x0 - bne _020E7064 -_020E707C: - cmp r1, #0x0 - movne r0, #0x0 - subeq r0, r0, #0x2 - bx lr - - arm_func_start __ieee754_pow -__ieee754_pow: ; 0x020E708C - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x80 - ldr r8, [sp, #0xb4] - ldr r6, [sp, #0xac] - ldr r0, [sp, #0xb0] - bic r9, r8, #0x80000000 - orrs r1, r9, r0 - ldr r7, [sp, #0xa8] - bic r4, r6, #0x80000000 - addeq sp, sp, #0x80 - moveq r0, #0x0 - ldreq r1, _020E7638 ; =0x3FF00000 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r1, _020E763C ; =0x7FF00000 - cmp r4, r1 - bgt _020E70FC - bne _020E70E4 - cmp r7, #0x0 - bne _020E70FC -_020E70E4: - ldr r1, _020E763C ; =0x7FF00000 - cmp r9, r1 - bgt _020E70FC - bne _020E7120 - cmp r0, #0x0 - beq _020E7120 -_020E70FC: - ldr r0, [sp, #0xa8] - ldr r1, [sp, #0xac] - ldr r2, [sp, #0xb0] - ldr r3, [sp, #0xb4] - bl _dadd - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7120: - cmp r6, #0x0 - mov r5, #0x0 - bge _020E7188 - ldr r1, _020E7640 ; =0x43400000 - cmp r9, r1 - movge r5, #0x2 - bge _020E7188 - sub r1, r1, #0x3500000 - cmp r9, r1 - blt _020E7188 - ldr r1, _020E7644 ; =0xFFFFFC01 - add r1, r1, r9, asr #0x14 - cmp r1, #0x14 - ble _020E7170 - rsb r2, r1, #0x34 - mov r1, r0, lsr r2 - cmp r0, r1, lsl r2 - andeq r1, r1, #0x1 - rsbeq r5, r1, #0x2 - b _020E7188 -_020E7170: - cmp r0, #0x0 - rsbeq r2, r1, #0x14 - moveq r1, r9, asr r2 - cmpeq r9, r1, lsl r2 - andeq r1, r1, #0x1 - rsbeq r5, r1, #0x2 -_020E7188: - cmp r0, #0x0 - bne _020E72E4 - ldr r1, _020E763C ; =0x7FF00000 - cmp r9, r1 - bne _020E723C - add r0, r4, #0x100000 - add r0, r0, #0xc0000000 - orrs r0, r0, r7 - bne _020E71D0 - ldr r0, [sp, #0xb0] - ldr r1, [sp, #0xb4] - mov r2, r0 - mov r3, r1 - bl _dsub - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E71D0: - sub r0, r1, #0x40000000 - cmp r4, r0 - blt _020E7200 - cmp r8, #0x0 - ldrge r0, [sp, #0xb0] - ldrge r1, [sp, #0xb4] - movlt r0, #0x0 - add sp, sp, #0x80 - movlt r1, r0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7200: - cmp r8, #0x0 - mov r0, #0x0 - addge sp, sp, #0x80 - movge r1, r0 - ldmgeia sp!, {r3-r11,lr} - addge sp, sp, #0x10 - bxge lr - ldr r2, [sp, #0xb0] - ldr r3, [sp, #0xb4] - mov r1, r0 - bl _dsub - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E723C: - sub r0, r1, #0x40000000 - cmp r9, r0 - bne _020E7288 - cmp r8, #0x0 - ldrge r0, [sp, #0xa8] - ldrge r1, [sp, #0xac] - addge sp, sp, #0x80 - ldmgeia sp!, {r3-r11,lr} - addge sp, sp, #0x10 - bxge lr - ldr r2, [sp, #0xa8] - ldr r3, [sp, #0xac] - sub r1, r1, #0x40000000 - mov r0, #0x0 - bl _ddiv - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7288: - cmp r8, #0x40000000 - bne _020E72B4 - ldr r0, [sp, #0xa8] - ldr r1, [sp, #0xac] - mov r2, r0 - mov r3, r1 - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E72B4: - ldr r0, _020E7648 ; =0x3FE00000 - cmp r8, r0 - bne _020E72E4 - cmp r6, #0x0 - blt _020E72E4 - ldr r0, [sp, #0xa8] - ldr r1, [sp, #0xac] - bl _dsqrt - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E72E4: - ldr r0, [sp, #0xa8] - ldr r1, [sp, #0xac] - bl fabs - str r0, [sp, #0x70] - str r1, [sp, #0x74] - cmp r7, #0x0 - bne _020E73E8 - ldr r0, _020E763C ; =0x7FF00000 - cmp r4, r0 - cmpne r4, #0x0 - subne r0, r0, #0x40000000 - cmpne r4, r0 - bne _020E73E8 - ldr r2, [sp, #0x70] - ldr r3, [sp, #0x74] - str r2, [sp, #0x78] - str r3, [sp, #0x7c] - cmp r8, #0x0 - bge _020E7344 - ldr r1, _020E7638 ; =0x3FF00000 - mov r0, #0x0 - bl _ddiv - str r0, [sp, #0x78] - str r1, [sp, #0x7c] -_020E7344: - cmp r6, #0x0 - bge _020E73D0 - add r0, r4, #0x100000 - add r0, r0, #0xc0000000 - orrs r0, r0, r5 - bne _020E73AC - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - mov r2, r0 - mov r3, r1 - bl _dsub - mov r4, r0 - mov r5, r1 - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - mov r2, r0 - mov r3, r1 - bl _dsub - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r5 - bl _ddiv - str r0, [sp, #0x78] - str r1, [sp, #0x7c] - b _020E73D0 -_020E73AC: - cmp r5, #0x1 - bne _020E73D0 - mov r0, #0x0 - ldr r2, [sp, #0x78] - ldr r3, [sp, #0x7c] - mov r1, r0 - bl _dsub - str r0, [sp, #0x78] - str r1, [sp, #0x7c] -_020E73D0: - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E73E8: - mov r0, r6, asr #0x1f - add r7, r0, #0x1 - orrs r0, r7, r5 - bne _020E7420 - ldr r0, _020E764C ; =0x02106B78 - ldr r1, _020E7650 ; =0x021D74A8 - ldr r0, [r0, #0x0] - mov r2, #0x21 - str r2, [r1, #0x0] - bl _f2d - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7420: - ldr r3, _020E7654 ; =0x41E00000 - cmp r9, r3 - ble _020E7724 - add r0, r3, #0x2100000 - cmp r9, r0 - ble _020E7490 - ldr r1, _020E7658 ; =0x3FEFFFFF - cmp r4, r1 - bgt _020E7464 - cmp r8, #0x0 - mov r0, #0x0 - addlt r1, r1, #0x40000001 - add sp, sp, #0x80 - movge r1, r0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7464: - add r0, r1, #0x1 - cmp r4, r0 - blt _020E7490 - cmp r8, #0x0 - mov r0, #0x0 - addgt r1, r1, #0x40000001 - add sp, sp, #0x80 - movle r1, r0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7490: - ldr r2, _020E7658 ; =0x3FEFFFFF - cmp r4, r2 - bge _020E74BC - cmp r8, #0x0 - mov r0, #0x0 - addlt r1, r2, #0x40000001 - add sp, sp, #0x80 - movge r1, r0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E74BC: - add r0, r2, #0x1 - cmp r4, r0 - ble _020E74E8 - cmp r8, #0x0 - mov r0, #0x0 - addgt r1, r2, #0x40000001 - add sp, sp, #0x80 - movle r1, r0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E74E8: - ldr r0, [sp, #0xa8] - ldr r1, [sp, #0xac] - add r3, r2, #0x1 - mov r2, #0x0 - bl _dsub - mov r2, r0 - mov r3, r1 - str r0, [sp, #0x50] - str r1, [sp, #0x54] - bl _dmul - mov r6, r1 - mov r4, r0 - ldr r2, [sp, #0x50] - ldr r3, [sp, #0x54] - ldr r1, _020E765C ; =0x3FD00000 - mov r0, #0x0 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7660 ; =0x55555555 - sub r1, r0, #0x15800000 - bl _dsub - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, #0x0 - ldr r1, _020E7648 ; =0x3FE00000 - bl _dsub - mov r2, r0 - mov r0, r4 - mov r3, r1 - mov r1, r6 - bl _dmul - mov r6, r0 - mov r8, r1 - mov r0, #0x60000000 - ldr r1, _020E7664 ; =0x3FF71547 - ldr r2, [sp, #0x50] - ldr r3, [sp, #0x54] - bl _dmul - mov r4, r0 - mov r9, r1 - ldr r0, _020E7668 ; =0xF85DDF44 - ldr r1, _020E766C ; =0x3E54AE0B - ldr r2, [sp, #0x50] - ldr r3, [sp, #0x54] - bl _dmul - mov r11, r0 - mov r10, r1 - ldr r0, _020E7670 ; =0x652B82FE - ldr r1, _020E7664 ; =0x3FF71547 - mov r2, r6 - mov r3, r8 - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r11 - mov r1, r10 - bl _dsub - mov r6, r0 - mov r8, r1 - mov r0, r4 - mov r1, r9 - mov r2, r6 - mov r3, r8 - bl _dadd - mov r2, r4 - mov r3, r9 - str r1, [sp, #0x5c] - mov r0, #0x0 - str r0, [sp, #0x58] - bl _dsub - mov r2, r0 - mov r0, r6 - mov r3, r1 - mov r1, r8 - bl _dsub - mov r4, r0 - mov r8, r1 - b _020E7C80 - .balign 4 -_020E7638: .word 0x3FF00000 -_020E763C: .word 0x7FF00000 -_020E7640: .word 0x43400000 -_020E7644: .word 0xFFFFFC01 -_020E7648: .word 0x3FE00000 -_020E764C: .word 0x02106B78 -_020E7650: .word 0x021D74A8 -_020E7654: .word 0x41E00000 -_020E7658: .word 0x3FEFFFFF -_020E765C: .word 0x3FD00000 -_020E7660: .word 0x55555555 -_020E7664: .word 0x3FF71547 -_020E7668: .word 0xF85DDF44 -_020E766C: .word 0x3E54AE0B -_020E7670: .word 0x652B82FE -_020E7674: .word 0x0003988E -_020E7678: .word 0x000BB67A -_020E767C: .word 0x02104754 -_020E7680: .word 0x4A454EEF -_020E7684: .word 0x3FCA7E28 -_020E7688: .word 0x93C9DB65 -_020E768C: .word 0x3FCD864A -_020E7690: .word 0xA91D4101 -_020E7694: .word 0x3FD17460 -_020E7698: .word 0x518F264D -_020E769C: .word 0x3FD55555 -_020E76A0: .word 0xDB6FABFF -_020E76A4: .word 0x3FDB6DB6 -_020E76A8: .word 0x33333303 -_020E76AC: .word 0x3FE33333 -_020E76B0: .word 0x40080000 -_020E76B4: - .byte 0x09, 0xC7, 0xEE, 0x3F, 0xF5, 0x01, 0x5B, 0x14, 0xE0, 0x2F, 0x3E, 0xBE - .byte 0xFD, 0x03, 0x3A, 0xDC, 0x64, 0x47, 0x10, 0x02, 0x44, 0x47, 0x10, 0x02 -_020E76CC: .word 0x40900000 -_020E76D0: .word 0x8800759C -_020E76D4: .word 0x7E37E43C -_020E76D8: .word 0x3C971547 -_020E76DC: .word 0x3F6F3400 -_020E76E0: .word 0xC2F8F359 -_020E76E4: .word 0x01A56E1F -_020E76E8: .word 0x3FE62E43 -_020E76EC: .word 0xFEFA39EF -_020E76F0: .word 0x3FE62E42 -_020E76F4: .word 0x0CA86C39 -_020E76F8: .word 0xBE205C61 -_020E76FC: .word 0x72BEA4D0 -_020E7700: .word 0x3E663769 -_020E7704: .word 0xC5D26BF1 -_020E7708: .word 0xBEBBBD41 -_020E770C: .word 0xAF25DE2C -_020E7710: .word 0x3F11566A -_020E7714: .word 0x16BEBD93 -_020E7718: .word 0xBF66C16C -_020E771C: .word 0x5555553E -_020E7720: .word 0x3FC55555 -_020E7724: - cmp r4, #0x100000 - mov r6, #0x0 - bge _020E7754 - ldr r0, [sp, #0x70] - ldr r1, [sp, #0x74] - mov r2, r6 - add r3, r3, #0x1600000 - bl _dmul - mov r4, r1 - str r0, [sp, #0x70] - str r4, [sp, #0x74] - sub r6, r6, #0x35 -_020E7754: - ldr r0, _020E7644 ; =0xFFFFFC01 - ldr r1, _020E7674 ; =0x0003988E - and r2, r4, r0, lsr #0xc - add r0, r0, r4, asr #0x14 - orr r9, r2, #0xff00000 - cmp r2, r1 - add r6, r6, r0 - orr r9, r9, #0x30000000 - movle r8, #0x0 - ble _020E7794 - ldr r0, _020E7678 ; =0x000BB67A - cmp r2, r0 - movlt r8, #0x1 - addge r6, r6, #0x1 - subge r9, r9, #0x100000 - movge r8, #0x0 -_020E7794: - ldr r2, _020E767C ; =0x02104754 - ldr r0, [sp, #0x70] - add r1, r2, r8, lsl #0x3 - ldr r3, [r1, #0x4] - ldr r2, [r2, r8, lsl #0x3] - mov r1, r9 - str r9, [sp, #0x74] - bl _dsub - ldr r2, _020E767C ; =0x02104754 - mov r10, r0 - add r3, r2, r8, lsl #0x3 - mov r4, r1 - ldr r0, [sp, #0x70] - ldr r2, [r2, r8, lsl #0x3] - ldr r3, [r3, #0x4] - mov r1, r9 - bl _dadd - mov r3, r1 - mov r2, r0 - ldr r1, _020E7638 ; =0x3FF00000 - mov r0, #0x0 - bl _ddiv - str r1, [sp, #0x24] - mov r11, r0 - ldr r3, [sp, #0x24] - mov r0, r10 - mov r1, r4 - mov r2, r11 - bl _dmul - mov r2, r9, asr #0x1 - orr r2, r2, #0x20000000 - mov r9, r1 - add r2, r2, #0x80000 - add r1, r2, r8, lsl #0x12 - ldr r2, _020E767C ; =0x02104754 - str r0, [sp, #0x28] - add r3, r2, r8, lsl #0x3 - mov r0, #0x0 - ldr r2, [r2, r8, lsl #0x3] - ldr r3, [r3, #0x4] - str r9, [sp, #0x4c] - str r1, [sp, #0x44] - str r0, [sp, #0x48] - str r0, [sp, #0x40] - bl _dsub - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x70] - ldr r1, [sp, #0x74] - bl _dsub - str r0, [sp, #0x2c] - str r1, [sp, #0x1c] - ldr r0, [sp, #0x48] - ldr r2, [sp, #0x40] - ldr r3, [sp, #0x44] - mov r1, r9 - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r10 - mov r1, r4 - bl _dsub - mov r10, r0 - mov r4, r1 - ldr r2, [sp, #0x2c] - ldr r3, [sp, #0x1c] - ldr r0, [sp, #0x48] - mov r1, r9 - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r10 - mov r1, r4 - bl _dsub - mov r3, r1 - mov r2, r0 - ldr r1, [sp, #0x24] - mov r0, r11 - bl _dmul - str r0, [sp, #0x30] - ldr r0, [sp, #0x28] - str r1, [sp, #0x14] - mov r1, r9 - mov r2, r0 - mov r3, r9 - bl _dmul - mov r4, r0 - mov r10, r1 - mov r2, r4 - mov r3, r10 - bl _dmul - str r0, [sp, #0x34] - mov r11, r1 - ldr r0, _020E7680 ; =0x4A454EEF - ldr r1, _020E7684 ; =0x3FCA7E28 - mov r2, r4 - mov r3, r10 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7688 ; =0x93C9DB65 - ldr r1, _020E768C ; =0x3FCD864A - bl _dadd - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7690 ; =0xA91D4101 - ldr r1, _020E7694 ; =0x3FD17460 - bl _dadd - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7698 ; =0x518F264D - ldr r1, _020E769C ; =0x3FD55555 - bl _dadd - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76A0 ; =0xDB6FABFF - ldr r1, _020E76A4 ; =0x3FDB6DB6 - bl _dadd - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76A8 ; =0x33333303 - ldr r1, _020E76AC ; =0x3FE33333 - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x34] - mov r1, r11 - bl _dmul - mov r4, r0 - mov r10, r1 - ldr r0, [sp, #0x48] - ldr r2, [sp, #0x28] - mov r1, r9 - mov r3, r9 - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x30] - ldr r1, [sp, #0x14] - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dadd - mov r4, r0 - ldr r0, [sp, #0x48] - mov r10, r1 - mov r1, r9 - mov r2, r0 - mov r3, r1 - bl _dmul - str r1, [sp, #0xc] - mov r11, r0 - ldr r1, _020E76B0 ; =0x40080000 - ldr r3, [sp, #0xc] - mov r0, #0x0 - mov r2, r11 - bl _dadd - mov r2, r4 - mov r3, r10 - bl _dadd -_020E7A6C: - .byte 0x00, 0x00, 0xA0, 0xE3 - .byte 0xC8, 0x33, 0x1F, 0xE5, 0x00, 0x20, 0xA0, 0xE1, 0x44, 0x10, 0x8D, 0xE5, 0x40, 0x00, 0x8D, 0xE5 - .byte 0xD1, 0x0A, 0x00, 0xEB, 0x0C, 0x30, 0x9D, 0xE5, 0x0B, 0x20, 0xA0, 0xE1, 0xCE, 0x0A, 0x00, 0xEB - .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 - .byte 0xC9, 0x0A, 0x00, 0xEB, 0x38, 0x00, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5, 0x48, 0x00, 0x9D, 0xE5 - .byte 0x40, 0x20, 0x9D, 0xE5, 0x44, 0x30, 0x9D, 0xE5, 0x09, 0x10, 0xA0, 0xE1, 0x7C, 0x09, 0x00, 0xEB - .byte 0x00, 0x40, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1, 0x30, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x9D, 0xE5 - .byte 0x40, 0x20, 0x9D, 0xE5, 0x44, 0x30, 0x9D, 0xE5, 0x75, 0x09, 0x00, 0xEB, 0x3C, 0x00, 0x8D, 0xE5 - .byte 0x01, 0xB0, 0xA0, 0xE1, 0x38, 0x00, 0x9D, 0xE5, 0x04, 0x10, 0x9D, 0xE5, 0x28, 0x20, 0x9D, 0xE5 - .byte 0x09, 0x30, 0xA0, 0xE1, 0x6E, 0x09, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 - .byte 0x3C, 0x00, 0x9D, 0xE5, 0x0B, 0x10, 0xA0, 0xE1, 0x0D, 0x08, 0x00, 0xEB, 0x00, 0x90, 0xA0, 0xE1 - .byte 0x01, 0xB0, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0x09, 0x20, 0xA0, 0xE1 - .byte 0x0B, 0x30, 0xA0, 0xE1, 0x06, 0x08, 0x00, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0x20, 0xA0, 0xE1 - .byte 0x0A, 0x30, 0xA0, 0xE1, 0x6C, 0x10, 0x8D, 0xE5, 0x68, 0x00, 0x8D, 0xE5, 0xA2, 0x0A, 0x00, 0xEB - .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x09, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1 - .byte 0x9D, 0x0A, 0x00, 0xEB, 0x01, 0xA0, 0xA0, 0xE1, 0x00, 0xB0, 0xA0, 0xE1, 0xB0, 0x14, 0x1F, 0xE5 - .byte 0x68, 0x20, 0x9D, 0xE5, 0x6C, 0x30, 0x9D, 0xE5, 0x0E, 0x02, 0xA0, 0xE3, 0x50, 0x09, 0x00, 0xEB - .byte 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x90, 0xA0, 0xE1, 0xC8, 0x04, 0x1F, 0xE5, 0xC8, 0x14, 0x1F, 0xE5 - .byte 0x68, 0x20, 0x9D, 0xE5, 0x6C, 0x30, 0x9D, 0xE5, 0x49, 0x09, 0x00, 0xEB, 0x0B, 0x20, 0xA0, 0xE1 - .byte 0x0A, 0x30, 0xA0, 0xE1, 0x00, 0xB0, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1, 0xE4, 0x04, 0x1F, 0xE5 - .byte 0xF4, 0x14, 0x1F, 0xE5, 0x42, 0x09, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 - .byte 0x0B, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0xE1, 0x07, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1 - .byte 0x01, 0x30, 0xA0, 0xE1, 0x08, 0x05, 0x1F, 0xE5, 0x88, 0x11, 0x80, 0xE0, 0x88, 0x01, 0x90, 0xE7 - .byte 0x04, 0x10, 0x91, 0xE5, 0xDA, 0x07, 0x00, 0xEB, 0x00, 0xB0, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1 - .byte 0x06, 0x00, 0xA0, 0xE1, 0x13, 0x09, 0x00, 0xEB, 0x50, 0x00, 0x8D, 0xE5, 0x54, 0x10, 0x8D, 0xE5 - .byte 0x04, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x0B, 0x20, 0xA0, 0xE1, 0x0A, 0x30, 0xA0, 0xE1 - .byte 0xCF, 0x07, 0x00, 0xEB, 0x44, 0x25, 0x1F, 0xE5, 0x88, 0x31, 0x82, 0xE0, 0x88, 0x21, 0x92, 0xE7 - .byte 0x04, 0x30, 0x93, 0xE5, 0xCA, 0x07, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 - .byte 0x50, 0x00, 0x9D, 0xE5, 0x54, 0x10, 0x9D, 0xE5, 0xC5, 0x07, 0x00, 0xEB, 0x5C, 0x10, 0x8D, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x58, 0x00, 0x8D, 0xE5, 0x50, 0x20, 0x9D, 0xE5, 0x54, 0x30, 0x9D, 0xE5 - .byte 0x61, 0x0A, 0x00, 0xEB, 0x84, 0x25, 0x1F, 0xE5, 0x88, 0x31, 0x82, 0xE0, 0x88, 0x21, 0x92, 0xE7 - .byte 0x04, 0x30, 0x93, 0xE5, 0x5C, 0x0A, 0x00, 0xEB, 0x04, 0x20, 0xA0, 0xE1, 0x09, 0x30, 0xA0, 0xE1 - .byte 0x59, 0x0A, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x0B, 0x00, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 - .byte 0x0A, 0x10, 0xA0, 0xE1, 0x54, 0x0A, 0x00, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x80, 0xA0, 0xE1 -_020E7C80: - sub r0, r5, #0x1 - ldr r1, [sp, #0xb4] - orrs r0, r7, r0 - ldr r5, _020E7638 ; =0x3FF00000 - mov r2, #0x0 - ldr r0, [sp, #0xb0] - mov r3, r1 - mov r6, #0x0 - subeq r5, r5, #0x80000000 - str r1, [sp, #0x64] - str r2, [sp, #0x60] - bl _dsub - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x58] - ldr r1, [sp, #0x5c] - bl _dmul - mov r7, r0 - mov r9, r1 - ldr r0, [sp, #0xb0] - ldr r1, [sp, #0xb4] - mov r2, r4 - mov r3, r8 - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r7 - mov r1, r9 - bl _dadd - mov r7, r0 - mov r8, r1 - ldr r0, [sp, #0x60] - ldr r1, [sp, #0x64] - ldr r2, [sp, #0x58] - ldr r3, [sp, #0x5c] - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r7 - mov r1, r8 - str r2, [sp, #0x68] - str r3, [sp, #0x6c] - bl _dadd - mov r9, r1 - ldr r2, _020E76CC ; =0x40900000 - str r0, [sp, #0x78] - str r9, [sp, #0x7c] - cmp r9, r2 - blt _020E7E0C - add r1, r9, #0xf700000 - add r1, r1, #0xb0000000 - orrs r0, r1, r0 - beq _020E7D8C - ldr r0, _020E76D0 ; =0x8800759C - ldr r1, _020E76D4 ; =0x7E37E43C - mov r2, r6 - mov r3, r5 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76D0 ; =0x8800759C - ldr r1, _020E76D4 ; =0x7E37E43C - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7D8C: - ldr r0, _020E7670 ; =0x652B82FE - ldr r1, _020E76D8 ; =0x3C971547 - mov r2, r7 - mov r3, r8 - bl _dadd - mov r4, r0 - mov r10, r1 - ldr r0, [sp, #0x78] - ldr r2, [sp, #0x68] - ldr r3, [sp, #0x6c] - mov r1, r9 - bl _dsub - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dgr - bls _020E7EC0 - ldr r0, _020E76D0 ; =0x8800759C - ldr r1, _020E76D4 ; =0x7E37E43C - mov r2, r6 - mov r3, r5 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76D0 ; =0x8800759C - ldr r1, _020E76D4 ; =0x7E37E43C - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7E0C: - bic r3, r9, #0x80000000 - add r2, r2, #0xcc00 - cmp r3, r2 - blt _020E7EC0 - ldr r2, _020E76DC ; =0x3F6F3400 - add r2, r9, r2 - orrs r2, r2, r0 - beq _020E7E64 - ldr r0, _020E76E0 ; =0xC2F8F359 - ldr r1, _020E76E4 ; =0x01A56E1F - mov r2, r6 - mov r3, r5 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76E0 ; =0xC2F8F359 - ldr r1, _020E76E4 ; =0x01A56E1F - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7E64: - ldr r2, [sp, #0x68] - ldr r3, [sp, #0x6c] - bl _dsub - mov r2, r0 - mov r3, r1 - mov r0, r7 - mov r1, r8 - bl _dleq - bhi _020E7EC0 - ldr r0, _020E76E0 ; =0xC2F8F359 - ldr r1, _020E76E4 ; =0x01A56E1F - mov r2, r6 - mov r3, r5 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76E0 ; =0xC2F8F359 - ldr r1, _020E76E4 ; =0x01A56E1F - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7EC0: - ldr r0, _020E7644 ; =0xFFFFFC01 - bic r3, r9, #0x80000000 - ldr r1, _020E7648 ; =0x3FE00000 - add r2, r0, r3, asr #0x14 - cmp r3, r1 - mov r4, #0x0 - ble _020E7F3C - mov r1, #0x100000 - add r2, r2, #0x1 - add r2, r9, r1, asr r2 - bic r3, r2, #0x80000000 - add r0, r0, r3, asr #0x14 - sub r3, r1, #0x1 - mvn r3, r3, asr r0 - sub r1, r1, #0x1 - and r1, r2, r1 - and r2, r2, r3 - str r2, [sp, #0x54] - str r4, [sp, #0x50] - orr r1, r1, #0x100000 - rsb r0, r0, #0x14 - mov r4, r1, asr r0 - cmp r9, #0x0 - ldr r0, [sp, #0x68] - ldr r1, [sp, #0x6c] - ldr r2, [sp, #0x50] - ldr r3, [sp, #0x54] - rsblt r4, r4, #0x0 - bl _dsub - str r0, [sp, #0x68] - str r1, [sp, #0x6c] -_020E7F3C: - ldr r2, [sp, #0x68] - ldr r3, [sp, #0x6c] - mov r0, r7 - mov r1, r8 - bl _dadd - mov r3, r1 - mov r0, #0x0 - ldr r1, _020E76E8 ; =0x3FE62E43 - mov r2, r0 - str r3, [sp, #0x54] - str r0, [sp, #0x50] - bl _dmul - mov r9, r0 - mov r10, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - ldr r2, [sp, #0x68] - ldr r3, [sp, #0x6c] - bl _dsub - mov r2, r0 - mov r0, r7 - mov r3, r1 - mov r1, r8 - bl _dsub - mov r2, r0 - mov r3, r1 - ldr r0, _020E76EC ; =0xFEFA39EF - ldr r1, _020E76F0 ; =0x3FE62E42 - bl _dmul - mov r7, r0 - mov r8, r1 - ldr r0, _020E76F4 ; =0x0CA86C39 - ldr r1, _020E76F8 ; =0xBE205C61 - ldr r2, [sp, #0x50] - ldr r3, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r0, r7 - mov r3, r1 - mov r1, r8 - bl _dadd - mov r7, r0 - mov r8, r1 - mov r0, r9 - mov r1, r10 - mov r2, r7 - mov r3, r8 - bl _dadd - mov r2, r9 - mov r3, r10 - str r0, [sp, #0x78] - str r1, [sp, #0x7c] - bl _dsub - mov r2, r0 - mov r3, r1 - mov r0, r7 - mov r1, r8 - bl _dsub - mov r8, r0 - mov r9, r1 - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - mov r2, r0 - mov r3, r1 - bl _dmul - mov r2, r0 - str r2, [sp, #0x50] - mov r3, r1 - str r3, [sp, #0x54] - ldr r0, _020E76FC ; =0x72BEA4D0 - ldr r1, _020E7700 ; =0x3E663769 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7704 ; =0xC5D26BF1 - ldr r1, _020E7708 ; =0xBEBBBD41 - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E770C ; =0xAF25DE2C - ldr r1, _020E7710 ; =0x3F11566A - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7714 ; =0x16BEBD93 - ldr r1, _020E7718 ; =0xBF66C16C - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E771C ; =0x5555553E - ldr r1, _020E7720 ; =0x3FC55555 - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - bl _dsub - mov r2, r0 - str r2, [sp, #0x58] - mov r3, r1 - str r3, [sp, #0x5c] - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - bl _dmul - mov r7, r0 - mov r10, r1 - ldr r0, [sp, #0x58] - ldr r1, [sp, #0x5c] - mov r2, #0x0 - mov r3, #0x40000000 - bl _dsub - mov r2, r0 - mov r0, r7 - mov r3, r1 - mov r1, r10 - bl _ddiv - mov r7, r0 - mov r10, r1 - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - mov r2, r8 - mov r3, r9 - bl _dmul - mov r2, r0 - mov r0, r8 - mov r3, r1 - mov r1, r9 - bl _dadd - mov r2, r0 - mov r0, r7 - mov r3, r1 - mov r1, r10 - bl _dsub - ldr r2, [sp, #0x78] - ldr r3, [sp, #0x7c] - bl _dsub - mov r3, r1 - mov r2, r0 - ldr r1, _020E7638 ; =0x3FF00000 - mov r0, #0x0 - bl _dsub - add r3, r1, r4, lsl #0x14 - mov r2, r3, asr #0x14 - str r0, [sp, #0x78] - cmp r2, #0x0 - str r1, [sp, #0x7c] - addgt r0, sp, #0x78 - strgt r3, [r0, #0x4] - bgt _020E81F0 - mov r2, r4 - bl scalbn - str r0, [sp, #0x78] - str r1, [sp, #0x7c] -_020E81F0: - ldr r2, [sp, #0x78] - ldr r3, [sp, #0x7c] - mov r0, r6 - mov r1, r5 - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - - arm_func_start copysign -copysign: ; 0x020E8214 - stmdb sp!, {r0-r3} - ldr r1, [sp, #0x4] - ldr r0, [sp, #0xc] - bic r1, r1, #0x80000000 - and r0, r0, #0x80000000 - orr r1, r1, r0 - ldr r0, [sp, #0x0] - str r1, [sp, #0x4] - add sp, sp, #0x10 - bx lr - - arm_func_start fabs -fabs: ; 0x020E823C - stmdb sp!, {r0-r3} - add r2, sp, #0x0 - ldr r1, [r2, #0x4] - ldr r0, [sp, #0x0] - bic r1, r1, #0x80000000 - str r1, [r2, #0x4] - add sp, sp, #0x10 - bx lr - - arm_func_start frexp -frexp: ; 0x020E825C - stmdb sp!, {r0-r3} - stmdb sp!, {r4,lr} - ldr r1, [sp, #0xc] - ldr r0, _020E8308 ; =0x7FF00000 - mov r4, r2 - bic r3, r1, #0x80000000 - mov r2, #0x0 - str r2, [r4, #0x0] - cmp r3, r0 - ldr r0, [sp, #0x8] - bge _020E8290 - orrs r0, r3, r0 - bne _020E82A4 -_020E8290: - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E82A4: - cmp r3, #0x100000 - bge _020E82D0 - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - ldr r3, _020E830C ; =0x43500000 - bl _dmul - mvn r2, #0x35 - str r0, [sp, #0x8] - str r1, [sp, #0xc] - str r2, [r4, #0x0] - bic r3, r1, #0x80000000 -_020E82D0: - ldr r2, _020E8310 ; =0x800FFFFF - ldr r0, _020E8314 ; =0xFFFFFC02 - and r1, r1, r2 - orr r1, r1, #0xfe00000 - orr r1, r1, #0x30000000 - ldr r2, [r4, #0x0] - add r0, r0, r3, asr #0x14 - add r2, r2, r0 - ldr r0, [sp, #0x8] - str r2, [r4, #0x0] - str r1, [sp, #0xc] - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E8308: .word 0x7FF00000 -_020E830C: .word 0x43500000 -_020E8310: .word 0x800FFFFF -_020E8314: .word 0xFFFFFC02 - - arm_func_start ldexp -ldexp: ; 0x020E8318 - stmdb sp!, {r0-r3} - stmdb sp!, {r4,lr} - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - mov r4, r2 - bl __fpclassifyf - cmp r0, #0x2 - ble _020E8350 - mov r0, #0x0 - ldr r2, [sp, #0x8] - ldr r3, [sp, #0xc] - mov r1, r0 - bl _deq - bne _020E8364 -_020E8350: - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E8364: - ldr r3, [sp, #0xc] - ldr r0, _020E8538 ; =0x7FF00000 - ldr r1, [sp, #0x8] - and r0, r3, r0 - movs r12, r0, asr #0x14 - bne _020E83F0 - bic r0, r3, #0x80000000 - orrs r0, r1, r0 - ldreq r0, [sp, #0x8] - ldreq r1, [sp, #0xc] - ldmeqia sp!, {r4,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - ldr r3, _020E853C ; =0x43500000 - mov r2, #0x0 - bl _dmul - mov r3, r1 - ldr r1, _020E8538 ; =0x7FF00000 - ldr ip, _020E8540 ; =0xFFFF3CB0 - and r1, r3, r1 - mov r2, r0 - mov r0, r1, asr #0x14 - str r2, [sp, #0x8] - str r3, [sp, #0xc] - cmp r4, r12 - sub r12, r0, #0x36 - bge _020E83F0 - ldr r0, _020E8544 ; =0xC2F8F359 - ldr r1, _020E8548 ; =0x01A56E1F - bl _dmul - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E83F0: - ldr r0, _020E854C ; =0x000007FF - cmp r12, r0 - bne _020E841C - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - mov r2, r0 - mov r3, r1 - bl _dadd - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E841C: - add r2, r12, r4 - sub r0, r0, #0x1 - cmp r2, r0 - ble _020E8460 - ldr r2, [sp, #0x8] - ldr r3, [sp, #0xc] - ldr r0, _020E8550 ; =0x8800759C - ldr r1, _020E8554 ; =0x7E37E43C - bl copysign - mov r2, r0 - mov r3, r1 - ldr r0, _020E8550 ; =0x8800759C - ldr r1, _020E8554 ; =0x7E37E43C - bl _dmul - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E8460: - cmp r2, #0x0 - ble _020E8488 - ldr r1, _020E8558 ; =0x800FFFFF - ldr r0, [sp, #0x8] - and r1, r3, r1 - orr r1, r1, r2, lsl #0x14 - str r1, [sp, #0xc] - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E8488: - mvn r0, #0x35 - cmp r2, r0 - bgt _020E8508 - ldr r0, _020E855C ; =0x0000C350 - cmp r4, r0 - ble _020E84D4 - ldr r2, [sp, #0x8] - ldr r3, [sp, #0xc] - ldr r0, _020E8550 ; =0x8800759C - ldr r1, _020E8554 ; =0x7E37E43C - bl copysign - mov r2, r0 - mov r3, r1 - ldr r0, _020E8550 ; =0x8800759C - ldr r1, _020E8554 ; =0x7E37E43C - bl _dmul - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E84D4: - ldr r2, [sp, #0x8] - ldr r3, [sp, #0xc] - ldr r0, _020E8544 ; =0xC2F8F359 - ldr r1, _020E8548 ; =0x01A56E1F - bl copysign - mov r2, r0 - mov r3, r1 - ldr r0, _020E8544 ; =0xC2F8F359 - ldr r1, _020E8548 ; =0x01A56E1F - bl _dmul - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E8508: - ldr r0, _020E8558 ; =0x800FFFFF - add r1, r2, #0x36 - and r0, r3, r0 - orr r3, r0, r1, lsl #0x14 - ldr r2, [sp, #0x8] - ldr r1, _020E8560 ; =0x3C900000 - mov r0, #0x0 - str r3, [sp, #0xc] - bl _dmul - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E8538: .word 0x7FF00000 -_020E853C: .word 0x43500000 -_020E8540: .word 0xFFFF3CB0 -_020E8544: .word 0xC2F8F359 -_020E8548: .word 0x01A56E1F -_020E854C: .word 0x000007FF -_020E8550: .word 0x8800759C -_020E8554: .word 0x7E37E43C -_020E8558: .word 0x800FFFFF -_020E855C: .word 0x0000C350 -_020E8560: .word 0x3C900000 - - arm_func_start pow -pow: ; 0x020E8564 - ldr ip, _020E856C ; =__ieee754_pow - bx r12 - .balign 4 -_020E856C: .word __ieee754_pow - - arm_func_start __must_round -__must_round: ; 0x020E8570 - add r3, r0, #0x5 - ldrb r2, [r3, r1] - add r12, r3, r1 - cmp r2, #0x5 - movhi r0, #0x1 - bxhi lr - mvncc r0, #0x0 - bxcc lr - ldrb r2, [r0, #0x4] - add r12, r12, #0x1 - add r3, r3, r2 - cmp r12, r3 - bhs _020E85C0 -_020E85A4: - ldrb r2, [r12, #0x0] - cmp r2, #0x0 - movne r0, #0x1 - bxne lr - add r12, r12, #0x1 - cmp r12, r3 - blo _020E85A4 -_020E85C0: - sub r1, r1, #0x1 - add r0, r0, r1 - ldrb r0, [r0, #0x5] - tst r0, #0x1 - movne r0, #0x1 - mvneq r0, #0x0 - bx lr - - arm_func_start __dorounddecup -__dorounddecup: ; 0x020E85DC - add r3, r0, #0x5 - add r1, r3, r1 - sub r12, r1, #0x1 - mov r1, #0x0 -_020E85EC: - ldrb r2, [r12, #0x0] - cmp r2, #0x9 - addcc r0, r2, #0x1 - strccb r0, [r12, #0x0] - bxcc lr - cmp r12, r3 - bne _020E8620 - mov r1, #0x1 - strb r1, [r12, #0x0] - ldrsh r1, [r0, #0x2] - add r1, r1, #0x1 - strh r1, [r0, #0x2] - bx lr -_020E8620: - strb r1, [r12], #-0x1 - b _020E85EC -_020E8628: - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start __rounddec -__rounddec: ; 0x020E862C - stmdb sp!, {r3-r5,lr} - mov r4, r1 - mov r5, r0 - cmp r4, #0x0 - ldmleia sp!, {r3-r5,pc} -_020E8640: - .byte 0x04, 0x20, 0xD5, 0xE5, 0x02, 0x00, 0x54, 0xE1, 0x38, 0x80, 0xBD, 0xA8, 0xC7, 0xFF, 0xFF, 0xEB - .byte 0x04, 0x40, 0xC5, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x38, 0x80, 0xBD, 0xB8, 0x05, 0x00, 0xA0, 0xE1 - .byte 0x04, 0x10, 0xA0, 0xE1, 0xDC, 0xFF, 0xFF, 0xEB, 0x38, 0x80, 0xBD, 0xE8 - - arm_func_start __ull2dec -__ull2dec: ; 0x020E866C - stmdb sp!, {r3-r11,lr} - mov r10, r0 - mov r0, #0x0 - mov r8, r2 - strb r0, [r10, #0x0] - mov r9, r1 - cmp r8, #0x0 - strb r0, [r10, #0x4] - cmpeq r9, #0x0 - beq _020E86F8 - mov r6, #0xa - mov r11, r0 - mov r5, r0 - mov r4, r0 -_020E86A4: - ldrb r1, [r10, #0x4] - mov r0, r9 - mov r2, r6 - add r3, r1, #0x1 - mov r7, r1 - strb r3, [r10, #0x4] - mov r1, r8 - mov r3, r11 - bl _ull_mod - add r1, r10, r7 - strb r0, [r1, #0x5] - mov r0, r9 - mov r1, r8 - mov r2, #0xa - mov r3, #0x0 - bl _ll_udiv - mov r8, r1 - mov r9, r0 - cmp r8, r5 - cmpeq r9, r4 - bne _020E86A4 -_020E86F8: - ldrb r0, [r10, #0x4] - add r2, r10, #0x5 - add r0, r2, r0 - sub r3, r0, #0x1 - cmp r2, r3 - bhs _020E8728 -_020E8710: - ldrb r0, [r3, #0x0] - ldrb r1, [r2, #0x0] - strb r0, [r2], #0x1 - strb r1, [r3], #-0x1 - cmp r2, r3 - blo _020E8710 -_020E8728: - ldrb r0, [r10, #0x4] - sub r0, r0, #0x1 - strh r0, [r10, #0x2] - ldmia sp!, {r3-r11,pc} - - arm_func_start __timesdec -__timesdec: ; 0x020E8738 - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x40 - ldrb r6, [r1, #0x4] - ldrb r5, [r2, #0x4] - mov r4, #0x0 - add r3, sp, #0x0 - add r5, r6, r5 - sub r5, r5, #0x1 - add r3, r3, r5 - add r6, r3, #0x1 - mov r7, r6 - strb r4, [r0, #0x0] - cmp r5, #0x0 - ble _020E8800 - add lr, r1, #0x5 - add r11, r2, #0x5 -_020E8778: - ldrb r3, [r2, #0x4] - sub r10, r3, #0x1 - sub r3, r5, r10 - subs r9, r3, #0x1 - ldrb r3, [r1, #0x4] - movmi r9, #0x0 - submi r10, r5, #0x1 - add r8, r10, #0x1 - sub r3, r3, r9 - cmp r8, r3 - movgt r8, r3 - add r10, r11, r10 - add r9, lr, r9 - cmp r8, #0x0 - ble _020E87CC -_020E87B4: - ldrb r12, [r9], #0x1 - ldrb r3, [r10], #-0x1 - sub r8, r8, #0x1 - cmp r8, #0x0 - mla r4, r12, r3, r4 - bgt _020E87B4 -_020E87CC: - ldr r3, _020E88B8 ; =0xCCCCCCCD - sub r5, r5, #0x1 - umull r8, r9, r4, r3 - mov r9, r9, lsr #0x3 - cmp r5, #0x0 - mov r10, #0xa - umull r8, r9, r10, r9 - sub r9, r4, r8 - strb r9, [r6, #-0x1]! - mov r8, r4 - umull r3, r4, r8, r3 - mov r4, r4, lsr #0x3 - bgt _020E8778 -_020E8800: - ldrsh r3, [r1, #0x2] - ldrsh r1, [r2, #0x2] - cmp r4, #0x0 - add r1, r3, r1 - strh r1, [r0, #0x2] - beq _020E8828 - strb r4, [r6, #-0x1]! - ldrsh r1, [r0, #0x2] - add r1, r1, #0x1 - strh r1, [r0, #0x2] -_020E8828: - mov r3, #0x0 - b _020E8840 -_020E8830: - ldrb r2, [r6], #0x1 - add r1, r0, r3 - add r3, r3, #0x1 - strb r2, [r1, #0x5] -_020E8840: - cmp r3, #0x20 - bge _020E8850 - cmp r6, r7 - blo _020E8830 -_020E8850: - cmp r6, r7 - addcs sp, sp, #0x40 - strb r3, [r0, #0x4] - ldmcsia sp!, {r3-r11,pc} -_020E8860: - .byte 0x00, 0x10, 0xD6, 0xE5, 0x05, 0x00, 0x51, 0xE3, 0x40, 0xD0, 0x8D, 0x32, 0xF8, 0x8F, 0xBD, 0x38 - .byte 0x0C, 0x00, 0x00, 0x1A, 0x01, 0x20, 0x86, 0xE2, 0x07, 0x00, 0x52, 0xE1, 0x05, 0x00, 0x00, 0x2A - .byte 0x00, 0x10, 0xD2, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x01, 0x20, 0x82, 0xE2 - .byte 0x07, 0x00, 0x52, 0xE1, 0xF9, 0xFF, 0xFF, 0x3A, 0x01, 0x10, 0x56, 0xE5, 0x01, 0x00, 0x11, 0xE3 - .byte 0x40, 0xD0, 0x8D, 0x02, 0xF8, 0x8F, 0xBD, 0x08, 0x04, 0x10, 0xD0, 0xE5, 0x4A, 0xFF, 0xFF, 0xEB - .byte 0x40, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 -_020E88B8: .word 0xCCCCCCCD - - arm_func_start __str2dec -__str2dec: ; 0x020E88BC - stmdb sp!, {r3,lr} - strh r2, [r0, #0x2] - mov r12, #0x0 - strb r12, [r0, #0x0] - b _020E88E4 -_020E88D0: - ldrsb r3, [r1], #0x1 - add r2, r0, r12 - add r12, r12, #0x1 - sub r3, r3, #0x30 - strb r3, [r2, #0x5] -_020E88E4: - cmp r12, #0x20 - bge _020E88F8 - ldrsb r2, [r1, #0x0] - cmp r2, #0x0 - bne _020E88D0 -_020E88F8: - strb r12, [r0, #0x4] - ldrsb r2, [r1, #0x0] - cmp r2, #0x0 - ldmeqia sp!, {r3,pc} -_020E8908: - .byte 0x05, 0x00, 0x52, 0xE3, 0x08, 0x80, 0xBD, 0xB8 - .byte 0x0D, 0x00, 0x00, 0xCA, 0xD1, 0x20, 0xD1, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x00, 0x00, 0x52, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x30, 0x00, 0x52, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0xD1, 0x20, 0xF1, 0xE1 - .byte 0x00, 0x00, 0x52, 0xE3, 0xFA, 0xFF, 0xFF, 0x1A, 0x01, 0x10, 0x4C, 0xE2, 0x01, 0x10, 0x80, 0xE0 - .byte 0x05, 0x10, 0xD1, 0xE5, 0x01, 0x00, 0x11, 0xE3, 0x08, 0x80, 0xBD, 0x08, 0x04, 0x10, 0xD0, 0xE5 - .byte 0x21, 0xFF, 0xFF, 0xEB, 0x08, 0x80, 0xBD, 0xE8 - - arm_func_start __two_exp -__two_exp: ; 0x020E8958 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4c - mov r4, r1 - mvn r2, #0x34 - mov r5, r0 - cmp r4, r2 - bgt _020E8988 - bge _020E8A54 - sub r0, r2, #0xb - cmp r4, r0 - beq _020E8A3C - b _020E8BE4 -_020E8988: - add r1, r4, #0x20 - cmp r1, #0x28 - addls pc, pc, r1, lsl #0x2 - b _020E8BE4 -_020E8998: - .byte 0x32, 0x00, 0x00, 0xEA, 0x90, 0x00, 0x00, 0xEA - .byte 0x8F, 0x00, 0x00, 0xEA, 0x8E, 0x00, 0x00, 0xEA, 0x8D, 0x00, 0x00, 0xEA, 0x8C, 0x00, 0x00, 0xEA - .byte 0x8B, 0x00, 0x00, 0xEA, 0x8A, 0x00, 0x00, 0xEA, 0x89, 0x00, 0x00, 0xEA, 0x88, 0x00, 0x00, 0xEA - .byte 0x87, 0x00, 0x00, 0xEA, 0x86, 0x00, 0x00, 0xEA, 0x85, 0x00, 0x00, 0xEA, 0x84, 0x00, 0x00, 0xEA - .byte 0x83, 0x00, 0x00, 0xEA, 0x82, 0x00, 0x00, 0xEA, 0x27, 0x00, 0x00, 0xEA, 0x80, 0x00, 0x00, 0xEA - .byte 0x7F, 0x00, 0x00, 0xEA, 0x7E, 0x00, 0x00, 0xEA, 0x7D, 0x00, 0x00, 0xEA, 0x7C, 0x00, 0x00, 0xEA - .byte 0x7B, 0x00, 0x00, 0xEA, 0x7A, 0x00, 0x00, 0xEA, 0x24, 0x00, 0x00, 0xEA, 0x28, 0x00, 0x00, 0xEA - .byte 0x2C, 0x00, 0x00, 0xEA, 0x30, 0x00, 0x00, 0xEA, 0x34, 0x00, 0x00, 0xEA, 0x38, 0x00, 0x00, 0xEA - .byte 0x3C, 0x00, 0x00, 0xEA, 0x40, 0x00, 0x00, 0xEA, 0x44, 0x00, 0x00, 0xEA, 0x48, 0x00, 0x00, 0xEA - .byte 0x4C, 0x00, 0x00, 0xEA, 0x50, 0x00, 0x00, 0xEA, 0x54, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x00, 0xEA - .byte 0x5C, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, 0xEA, 0x64, 0x00, 0x00, 0xEA -_020E8A3C: - ldr r1, _020E8C88 ; =0x02106E88 - mov r0, r5 - mvn r2, #0x13 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8A54: - ldr r1, _020E8C8C ; =0x02106EB8 - add r2, r2, #0x25 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8A68: - .byte 0x20, 0x12, 0x9F, 0xE5, 0x2B, 0x20, 0x82, 0xE2 - .byte 0x91, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x10, 0x12, 0x9F, 0xE5 - .byte 0x30, 0x20, 0x82, 0xE2, 0x8C, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 - .byte 0x00, 0x12, 0x9F, 0xE5, 0x32, 0x20, 0x82, 0xE2, 0x87, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x80, 0xBD, 0xE8, 0xF0, 0x11, 0x9F, 0xE5, 0x32, 0x20, 0x82, 0xE2, 0x82, 0xFF, 0xFF, 0xEB - .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0xE0, 0x11, 0x9F, 0xE5, 0x33, 0x20, 0x82, 0xE2 - .byte 0x7D, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0xD0, 0x11, 0x9F, 0xE5 - .byte 0x33, 0x20, 0x82, 0xE2, 0x78, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 - .byte 0xC0, 0x11, 0x9F, 0xE5, 0x33, 0x20, 0x82, 0xE2, 0x73, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x80, 0xBD, 0xE8, 0xB0, 0x11, 0x9F, 0xE5, 0x34, 0x20, 0x82, 0xE2, 0x6E, 0xFF, 0xFF, 0xEB - .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0xA0, 0x11, 0x9F, 0xE5, 0x34, 0x20, 0x82, 0xE2 - .byte 0x69, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x90, 0x11, 0x9F, 0xE5 - .byte 0x34, 0x20, 0x82, 0xE2, 0x64, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 - .byte 0x80, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x5F, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x80, 0xBD, 0xE8, 0x70, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x5A, 0xFF, 0xFF, 0xEB - .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x60, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3 - .byte 0x55, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x50, 0x11, 0x9F, 0xE5 - .byte 0x00, 0x20, 0xA0, 0xE3, 0x50, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 - .byte 0x40, 0x11, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x4B, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x80, 0xBD, 0xE8, 0x30, 0x11, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x46, 0xFF, 0xFF, 0xEB - .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x20, 0x11, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x41, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x10, 0x11, 0x9F, 0xE5 - .byte 0x02, 0x20, 0xA0, 0xE3, 0x3C, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 - .byte 0x00, 0x11, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3, 0x37, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x80, 0xBD, 0xE8 -_020E8BE4: - and r0, r4, #0x80000000 - add r1, r4, r0, lsr #0x1f - add r0, sp, #0x26 - mov r1, r1, asr #0x1 - bl __two_exp - add r1, sp, #0x26 - mov r0, r5 - mov r2, r1 - bl __timesdec - tst r4, #0x1 - addeq sp, sp, #0x4c - ldmeqia sp!, {r4-r5,pc} -_020E8C14: - .byte 0x00, 0x30, 0x8D, 0xE2, 0x05, 0xC0, 0xA0, 0xE1, 0x09, 0x20, 0xA0, 0xE3 - .byte 0xB0, 0x10, 0xDC, 0xE1, 0xB2, 0x00, 0xDC, 0xE1, 0x04, 0xC0, 0x8C, 0xE2, 0x01, 0x20, 0x52, 0xE2 - .byte 0xB0, 0x10, 0xC3, 0xE1, 0xB2, 0x00, 0xC3, 0xE1, 0x04, 0x30, 0x83, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A - .byte 0xB0, 0x00, 0xDC, 0xE1, 0x00, 0x00, 0x54, 0xE3, 0xB0, 0x00, 0xC3, 0xE1, 0x26, 0x00, 0x8D, 0xE2 - .byte 0x03, 0x00, 0x00, 0xDA, 0x60, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x16, 0xFF, 0xFF, 0xEB - .byte 0x02, 0x00, 0x00, 0xEA, 0x48, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xE0, 0xE3, 0x12, 0xFF, 0xFF, 0xEB - .byte 0x00, 0x10, 0x8D, 0xE2, 0x26, 0x20, 0x8D, 0xE2, 0x05, 0x00, 0xA0, 0xE1, 0xAD, 0xFE, 0xFF, 0xEB - .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 -_020E8C88: .word 0x02106E88 -_020E8C8C: .word 0x02106EB8 -_020E8C90: - .byte 0xE0, 0x6E, 0x10, 0x02, 0xF8, 0x6E, 0x10, 0x02, 0x08, 0x6F, 0x10, 0x02, 0x10, 0x6F, 0x10, 0x02 - .byte 0x18, 0x6F, 0x10, 0x02, 0x20, 0x6F, 0x10, 0x02, 0x28, 0x6F, 0x10, 0x02, 0x2C, 0x6F, 0x10, 0x02 - .byte 0x30, 0x6F, 0x10, 0x02, 0x34, 0x6F, 0x10, 0x02, 0x38, 0x6F, 0x10, 0x02, 0x3C, 0x6F, 0x10, 0x02 - .byte 0x40, 0x6F, 0x10, 0x02, 0x44, 0x6F, 0x10, 0x02, 0x48, 0x6F, 0x10, 0x02, 0x4C, 0x6F, 0x10, 0x02 - .byte 0x50, 0x6F, 0x10, 0x02, 0x54, 0x6F, 0x10, 0x02, 0x58, 0x6F, 0x10, 0x02 - - arm_func_start __equals_dec -__equals_dec: ; 0x020E8CDC - stmdb sp!, {r4,lr} - ldrb r3, [r0, #0x5] - cmp r3, #0x0 - bne _020E8D00 - ldrb r0, [r1, #0x5] - cmp r0, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - ldmia sp!, {r4,pc} -_020E8D00: - ldrb r2, [r1, #0x5] - cmp r2, #0x0 - bne _020E8D1C - cmp r3, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - ldmia sp!, {r4,pc} -_020E8D1C: - ldrsh r3, [r0, #0x2] - ldrsh r2, [r1, #0x2] - cmp r3, r2 - bne _020E8DB4 - ldrb r4, [r0, #0x4] - ldrb r2, [r1, #0x4] - mov r12, #0x0 - mov lr, r4 - cmp r4, r2 - movgt lr, r2 - cmp lr, #0x0 - ble _020E8D74 - add r3, r0, r12 - add r2, r1, r12 - ldrb r3, [r3, #0x5] - ldrb r2, [r2, #0x5] - cmp r3, r2 - movne r0, #0x0 - ldmneia sp!, {r4,pc} -_020E8D68: - .byte 0x01, 0xC0, 0x8C, 0xE2, 0x0E, 0x00, 0x5C, 0xE1 - .byte 0xF5, 0xFF, 0xFF, 0xBA -_020E8D74: - cmp lr, r4 - moveq r0, r1 - ldrb r1, [r0, #0x4] - cmp r12, r1 - bge _020E8DAC - add r1, r0, r12 - ldrb r1, [r1, #0x5] - cmp r1, #0x0 - movne r0, #0x0 - ldmneia sp!, {r4,pc} -_020E8D9C: - .byte 0x04, 0x10, 0xD0, 0xE5 - .byte 0x01, 0xC0, 0x8C, 0xE2, 0x01, 0x00, 0x5C, 0xE1, 0xF6, 0xFF, 0xFF, 0xBA -_020E8DAC: - mov r0, #0x1 - ldmia sp!, {r4,pc} -_020E8DB4: - mov r0, #0x0 - ldmia sp!, {r4,pc} -__less_dec: - stmdb sp!, {r3-r5,lr} - ldrb r2, [r0, #0x5] - cmp r2, #0x0 - bne _020E8DE0 - ldrb r0, [r1, #0x5] - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - ldmia sp!, {r3-r5,pc} -_020E8DE0: - ldrb r2, [r1, #0x5] - cmp r2, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r3-r5,pc} -_020E8DF0: - .byte 0xF2, 0x30, 0xD1, 0xE1, 0xF2, 0x20, 0xD0, 0xE1, 0x03, 0x00, 0x52, 0xE1, 0x23, 0x00, 0x00, 0x1A - .byte 0x04, 0x50, 0xD0, 0xE5, 0x04, 0x40, 0xD1, 0xE5, 0x00, 0xC0, 0xA0, 0xE3, 0x05, 0xE0, 0xA0, 0xE1 - .byte 0x04, 0x00, 0x55, 0xE1, 0x04, 0xE0, 0xA0, 0xC1, 0x00, 0x00, 0x5E, 0xE3, 0x0C, 0x00, 0x00, 0xDA - .byte 0x0C, 0x30, 0x81, 0xE0, 0x0C, 0x20, 0x80, 0xE0, 0x05, 0x30, 0xD3, 0xE5, 0x05, 0x20, 0xD2, 0xE5 - .byte 0x03, 0x00, 0x52, 0xE1, 0x01, 0x00, 0xA0, 0x33, 0x38, 0x80, 0xBD, 0x38, 0x02, 0x00, 0x53, 0xE1 - .byte 0x00, 0x00, 0xA0, 0x33, 0x38, 0x80, 0xBD, 0x38, 0x01, 0xC0, 0x8C, 0xE2, 0x0E, 0x00, 0x5C, 0xE1 - .byte 0xF2, 0xFF, 0xFF, 0xBA, 0x05, 0x00, 0x5E, 0xE1, 0x0A, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x5C, 0xE1 - .byte 0x08, 0x00, 0x00, 0xAA, 0x0C, 0x00, 0x81, 0xE0, 0x05, 0x00, 0xD0, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0xA0, 0x13, 0x38, 0x80, 0xBD, 0x18, 0x04, 0x00, 0xD1, 0xE5, 0x01, 0xC0, 0x8C, 0xE2 - .byte 0x00, 0x00, 0x5C, 0xE1, 0xF6, 0xFF, 0xFF, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x38, 0x80, 0xBD, 0xE8 - .byte 0x01, 0x00, 0xA0, 0xB3, 0x00, 0x00, 0xA0, 0xA3, 0x38, 0x80, 0xBD, 0xE8 - - arm_func_start __minus_dec -__minus_dec: ; 0x020E8E9C - stmdb sp!, {r3-r7,lr} - mov r6, r0 - mov r5, #0x9 -_020E8EA8: - ldrh r4, [r1, #0x0] - ldrh r3, [r1, #0x2] - add r1, r1, #0x4 - subs r5, r5, #0x1 - strh r4, [r6, #0x0] - strh r3, [r6, #0x2] - add r6, r6, #0x4 - bne _020E8EA8 - ldrh r1, [r1, #0x0] - strh r1, [r6, #0x0] - ldrb r1, [r2, #0x5] - cmp r1, #0x0 - ldmeqia sp!, {r3-r7,pc} -_020E8EDC: - .byte 0x04, 0x70, 0xD0, 0xE5 - .byte 0x04, 0x30, 0xD2, 0xE5, 0xF2, 0x40, 0xD0, 0xE1, 0x07, 0x10, 0xA0, 0xE1, 0x03, 0x00, 0x57, 0xE1 - .byte 0x03, 0x10, 0xA0, 0xB1, 0xF2, 0x30, 0xD2, 0xE1, 0x03, 0x60, 0x44, 0xE0, 0x06, 0x10, 0x81, 0xE0 - .byte 0x20, 0x00, 0x51, 0xE3, 0x20, 0x10, 0xA0, 0xC3, 0x01, 0x00, 0x57, 0xE1, 0x08, 0x00, 0x00, 0xAA - .byte 0x00, 0x40, 0xA0, 0xE3, 0x04, 0x50, 0xD0, 0xE5, 0x07, 0x30, 0x80, 0xE0, 0x01, 0x50, 0x85, 0xE2 - .byte 0x04, 0x50, 0xC0, 0xE5, 0x05, 0x40, 0xC3, 0xE5, 0x04, 0x70, 0xD0, 0xE5, 0x01, 0x00, 0x57, 0xE1 - .byte 0xF7, 0xFF, 0xFF, 0xBA, 0x04, 0x40, 0xD2, 0xE5, 0x05, 0x30, 0x80, 0xE2, 0x01, 0xC0, 0x83, 0xE0 - .byte 0x06, 0x40, 0x84, 0xE0, 0x01, 0x00, 0x54, 0xE1, 0x04, 0xC0, 0x83, 0xB0, 0x03, 0x40, 0x4C, 0xE0 - .byte 0x05, 0x10, 0x82, 0xE2, 0x06, 0x40, 0x44, 0xE0, 0x04, 0xE0, 0x81, 0xE0, 0x0E, 0x40, 0xA0, 0xE1 - .byte 0x18, 0x00, 0x00, 0xEA, 0x01, 0x70, 0x7C, 0xE5, 0x01, 0x50, 0x7E, 0xE5, 0x05, 0x00, 0x57, 0xE1 - .byte 0x10, 0x00, 0x00, 0x2A, 0x01, 0x70, 0x5C, 0xE5, 0x01, 0x50, 0x4C, 0xE2, 0x00, 0x00, 0x57, 0xE3 - .byte 0x02, 0x00, 0x00, 0x1A, 0x01, 0x70, 0x75, 0xE5, 0x00, 0x00, 0x57, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A - .byte 0x0C, 0x00, 0x55, 0xE1, 0x07, 0x00, 0x00, 0x0A, 0x00, 0x70, 0xD5, 0xE5, 0x01, 0x70, 0x47, 0xE2 - .byte 0x00, 0x70, 0xC5, 0xE5, 0x01, 0x70, 0xF5, 0xE5, 0x0C, 0x00, 0x55, 0xE1, 0x0A, 0x70, 0x87, 0xE2 - .byte 0x00, 0x70, 0xC5, 0xE5, 0xF7, 0xFF, 0xFF, 0x1A, 0x00, 0x70, 0xDC, 0xE5, 0x00, 0x50, 0xDE, 0xE5 - .byte 0x05, 0x50, 0x47, 0xE0, 0x00, 0x50, 0xCC, 0xE5, 0x03, 0x00, 0x5C, 0xE1, 0x01, 0x00, 0x5E, 0x81 - .byte 0xE3, 0xFF, 0xFF, 0x8A, 0x04, 0x50, 0xD2, 0xE5, 0x01, 0xE0, 0x44, 0xE0, 0x05, 0x00, 0x5E, 0xE1 - .byte 0x2F, 0x00, 0x00, 0xAA, 0x00, 0x10, 0xD4, 0xE5, 0x00, 0x70, 0xA0, 0xE3, 0x05, 0x00, 0x51, 0xE3 - .byte 0x01, 0x70, 0xA0, 0x33, 0x11, 0x00, 0x00, 0x3A, 0x10, 0x00, 0x00, 0x1A, 0x05, 0x10, 0x82, 0xE2 - .byte 0x05, 0x20, 0x81, 0xE0, 0x01, 0x40, 0x84, 0xE2, 0x02, 0x00, 0x54, 0xE1, 0x05, 0x00, 0x00, 0x2A - .byte 0x00, 0x10, 0xD4, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x21, 0x00, 0x00, 0x1A, 0x01, 0x40, 0x84, 0xE2 - .byte 0x02, 0x00, 0x54, 0xE1, 0xF9, 0xFF, 0xFF, 0x3A, 0x0E, 0x10, 0x83, 0xE0, 0x06, 0x20, 0x81, 0xE0 - .byte 0x01, 0x10, 0x52, 0xE5, 0x01, 0xC0, 0x42, 0xE2, 0x01, 0x00, 0x11, 0xE3, 0x01, 0x70, 0xA0, 0x13 - .byte 0x00, 0x00, 0x57, 0xE3, 0x16, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xDC, 0xE5, 0x01, 0x00, 0x51, 0xE3 - .byte 0x10, 0x00, 0x00, 0x2A, 0x01, 0x10, 0x5C, 0xE5, 0x01, 0x20, 0x4C, 0xE2, 0x00, 0x00, 0x51, 0xE3 - .byte 0x02, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x72, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A - .byte 0x0C, 0x00, 0x52, 0xE1, 0x07, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xD2, 0xE5, 0x01, 0x10, 0x41, 0xE2 - .byte 0x00, 0x10, 0xC2, 0xE5, 0x01, 0x10, 0xF2, 0xE5, 0x0C, 0x00, 0x52, 0xE1, 0x0A, 0x10, 0x81, 0xE2 - .byte 0x00, 0x10, 0xC2, 0xE5, 0xF7, 0xFF, 0xFF, 0x1A, 0x00, 0x10, 0xDC, 0xE5, 0x01, 0x10, 0x41, 0xE2 - .byte 0x00, 0x10, 0xCC, 0xE5, 0x00, 0x10, 0xD3, 0xE5, 0x03, 0x50, 0xA0, 0xE1, 0x00, 0x00, 0x51, 0xE3 - .byte 0x02, 0x00, 0x00, 0x1A, 0x01, 0x10, 0xF5, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A - .byte 0x03, 0x00, 0x55, 0xE1, 0x0F, 0x00, 0x00, 0x9A, 0xF2, 0x10, 0xD0, 0xE1, 0x03, 0x20, 0x45, 0xE0 - .byte 0xFF, 0x40, 0x02, 0xE2, 0x04, 0x10, 0x41, 0xE0, 0xB2, 0x10, 0xC0, 0xE1, 0x04, 0x10, 0xD0, 0xE5 - .byte 0x01, 0x20, 0x83, 0xE0, 0x02, 0x00, 0x55, 0xE1, 0x03, 0x00, 0x00, 0x2A, 0x01, 0x10, 0xD5, 0xE4 - .byte 0x02, 0x00, 0x55, 0xE1, 0x01, 0x10, 0xC3, 0xE4, 0xFB, 0xFF, 0xFF, 0x3A, 0x04, 0x10, 0xD0, 0xE5 - .byte 0x04, 0x10, 0x41, 0xE0, 0x04, 0x10, 0xC0, 0xE5, 0x04, 0x10, 0xD0, 0xE5, 0x05, 0x20, 0x80, 0xE2 - .byte 0x01, 0x30, 0x82, 0xE0, 0x02, 0x00, 0x53, 0xE1, 0x04, 0x00, 0x00, 0x9A, 0x01, 0x10, 0x73, 0xE5 - .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x02, 0x00, 0x53, 0xE1, 0xFA, 0xFF, 0xFF, 0x8A - .byte 0x02, 0x10, 0x43, 0xE0, 0x01, 0x10, 0x81, 0xE2, 0x04, 0x10, 0xC0, 0xE5, 0xF8, 0x80, 0xBD, 0xE8 - - arm_func_start __num2dec_internal -__num2dec_internal: ; 0x020E9140 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x58 - mov r8, r1 - mov r6, r2 - mov r7, r0 - mov r0, r8 - mov r1, r6 - bl __signbitf -_020E9160: - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x10, 0xA0, 0x13, 0x00, 0x10, 0xA0, 0x03, 0x01, 0x4C, 0xA0, 0xE1 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x06, 0x30, 0xA0, 0xE1 - .byte 0x44, 0x5C, 0xA0, 0xE1, 0xFC, 0x06, 0x00, 0xEB, 0x07, 0x00, 0x00, 0x1A, 0x00, 0x50, 0xC7, 0xE5 - .byte 0x00, 0x10, 0xA0, 0xE3, 0xB2, 0x10, 0xC7, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x04, 0x00, 0xC7, 0xE5 - .byte 0x58, 0xD0, 0x8D, 0xE2, 0x05, 0x10, 0xC7, 0xE5, 0xF0, 0x81, 0xBD, 0xE8, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x06, 0x10, 0xA0, 0xE1, 0x1E, 0x02, 0x00, 0xEB, 0x02, 0x00, 0x50, 0xE3, 0x0D, 0x00, 0x00, 0xCA - .byte 0x00, 0x50, 0xC7, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC7, 0xE1, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xC7, 0xE5, 0x14, 0x02, 0x00, 0xEB - .byte 0x01, 0x00, 0x50, 0xE3, 0x4E, 0x00, 0xA0, 0x03, 0x49, 0x00, 0xA0, 0x13, 0x58, 0xD0, 0x8D, 0xE2 - .byte 0x05, 0x00, 0xC7, 0xE5, 0xF0, 0x81, 0xBD, 0xE8, 0x00, 0x00, 0x55, 0xE3, 0x06, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x06, 0x30, 0xA0, 0xE1 - .byte 0xED, 0x04, 0x00, 0xEB, 0x00, 0x80, 0xA0, 0xE1, 0x01, 0x60, 0xA0, 0xE1, 0x08, 0x20, 0x8D, 0xE2 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x0B, 0xFC, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1 - .byte 0x01, 0x60, 0xA0, 0xE1, 0x00, 0xC0, 0x84, 0xE3, 0x00, 0x20, 0x7C, 0xE2, 0x01, 0x36, 0x86, 0xE3 - .byte 0x00, 0x10, 0xE3, 0xE2, 0x00, 0x00, 0xA0, 0xE3, 0x01, 0x30, 0x03, 0xE0, 0x01, 0x10, 0x40, 0xE2 - .byte 0x02, 0xC0, 0x0C, 0xE0, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x00, 0x9C, 0xE0, 0x02, 0x10, 0xA3, 0xE0 - .byte 0x00, 0x40, 0x8D, 0xE5, 0x04, 0x60, 0x8D, 0xE5, 0xC7, 0x01, 0x00, 0xEB, 0x35, 0x80, 0x60, 0xE2 - .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x8D, 0xE2, 0x08, 0x10, 0x41, 0xE0, 0xB5, 0xFD, 0xFF, 0xEB - .byte 0x04, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x21, 0xFC, 0xFF, 0xEB - .byte 0x45, 0x03, 0x00, 0xEB, 0x01, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x32, 0x00, 0x8D, 0xE2 - .byte 0xF1, 0xFC, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1, 0x32, 0x10, 0x8D, 0xE2, 0x0C, 0x20, 0x8D, 0xE2 - .byte 0x20, 0xFD, 0xFF, 0xEB, 0x00, 0x50, 0xC7, 0xE5, 0x58, 0xD0, 0x8D, 0xE2, 0xF0, 0x81, 0xBD, 0xE8 - - arm_func_start __num2dec_internal2 -__num2dec_internal2: ; 0x020E92C0 - stmdb sp!, {r3-r5,lr} - mov r4, r3 - ldrsh r5, [r0, #0x2] - mov r0, r4 - bl __num2dec_internal - ldrb r0, [r4, #0x5] - cmp r0, #0x9 - ldmhiia sp!, {r3-r5,pc} -_020E92E0: - .byte 0x20, 0x00, 0x55, 0xE3, 0x20, 0x50, 0xA0, 0xC3, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1 - .byte 0xCD, 0xFC, 0xFF, 0xEB, 0x04, 0x00, 0xD4, 0xE5, 0x05, 0x00, 0x50, 0xE1, 0x08, 0x00, 0x00, 0xAA - .byte 0x00, 0x10, 0xA0, 0xE3, 0x04, 0x20, 0xD4, 0xE5, 0x00, 0x00, 0x84, 0xE0, 0x01, 0x20, 0x82, 0xE2 - .byte 0x04, 0x20, 0xC4, 0xE5, 0x05, 0x10, 0xC0, 0xE5, 0x04, 0x00, 0xD4, 0xE5, 0x05, 0x00, 0x50, 0xE1 - .byte 0xF7, 0xFF, 0xFF, 0xBA, 0xF2, 0x10, 0xD4, 0xE1, 0x01, 0x00, 0x40, 0xE2, 0x00, 0x20, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x41, 0xE0, 0xB2, 0x00, 0xC4, 0xE1, 0x04, 0x00, 0xD4, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x38, 0x80, 0xBD, 0xD8, 0x02, 0x10, 0x84, 0xE0, 0x05, 0x00, 0xD1, 0xE5, 0x01, 0x20, 0x82, 0xE2 - .byte 0x30, 0x00, 0x80, 0xE2, 0x05, 0x00, 0xC1, 0xE5, 0x04, 0x00, 0xD4, 0xE5, 0x00, 0x00, 0x52, 0xE1 - .byte 0xF7, 0xFF, 0xFF, 0xBA, 0x38, 0x80, 0xBD, 0xE8 - - arm_func_start __dec2num -__dec2num: ; 0x020E9368 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xfc - mov r4, r0 - ldrb r0, [r4, #0x4] - cmp r0, #0x0 - bne _020E93A8 - ldrsb r0, [r4, #0x0] - mov r2, #0x0 - cmp r0, #0x0 - ldreq r3, _020E996C ; =0x3FF00000 - mov r0, #0x0 - ldrne r3, _020E9970 ; =0xBFF00000 - mov r1, r0 - bl copysign - add sp, sp, #0xfc - ldmia sp!, {r4-r11,pc} -_020E93A8: - ldrb r0, [r4, #0x5] - cmp r0, #0x30 - beq _020E93C8 - cmp r0, #0x49 - beq _020E93F0 - cmp r0, #0x4e - beq _020E9424 - b _020E946C -_020E93C8: - ldrsb r0, [r4, #0x0] - mov r2, #0x0 - cmp r0, #0x0 - ldreq r3, _020E996C ; =0x3FF00000 - mov r0, #0x0 - ldrne r3, _020E9970 ; =0xBFF00000 - mov r1, r0 - bl copysign - add sp, sp, #0xfc - ldmia sp!, {r4-r11,pc} -_020E93F0: - ldrsb r0, [r4, #0x0] - mov r5, #0x0 - cmp r0, #0x0 - ldreq r4, _020E996C ; =0x3FF00000 - ldr r0, _020E9974 ; =0x02106B74 - ldrne r4, _020E9970 ; =0xBFF00000 - ldr r0, [r0, #0x0] - bl _f2d - mov r2, r5 - mov r3, r4 - bl copysign - add sp, sp, #0xfc - ldmia sp!, {r4-r11,pc} -_020E9424: - ldr r1, _020E9978 ; =0x7FF00000 - add r3, sp, #0x10 - mov r2, #0x0 - str r2, [r3, #0x0] - str r1, [r3, #0x4] - ldrsb r0, [r4, #0x0] - cmp r0, #0x0 - beq _020E9454 - orr r0, r1, #0x80000000 - orr r1, r2, r2 - str r1, [r3, #0x0] - str r0, [r3, #0x4] -_020E9454: - ldmia r3, {r0-r1} - orr r0, r0, #0x0 - orr r1, r1, #0x80000 - stmia r3, {r0-r1} - add sp, sp, #0xfc - ldmia sp!, {r4-r11,pc} -_020E946C: - add r3, sp, #0xd6 - mov r5, r4 - mov r2, #0x9 -_020E9478: - ldrh r1, [r5, #0x0] - ldrh r0, [r5, #0x2] - add r5, r5, #0x4 - subs r2, r2, #0x1 - strh r1, [r3, #0x0] - strh r0, [r3, #0x2] - add r3, r3, #0x4 - bne _020E9478 - ldrh r0, [r5, #0x0] - add r1, sp, #0xdb - strh r0, [r3, #0x0] - ldrb r0, [sp, #0xda] - add r5, r1, r0 - cmp r1, r5 - bhs _020E94C8 -_020E94B4: - ldrb r0, [r1, #0x0] - sub r0, r0, #0x30 - strb r0, [r1], #0x1 - cmp r1, r5 - blo _020E94B4 -_020E94C8: - ldrb r1, [sp, #0xda] - ldrsh r2, [sp, #0xd8] - add r0, sp, #0xb0 - sub r1, r1, #0x1 - add r1, r2, r1 - strh r1, [sp, #0xd8] - ldr r1, _020E997C ; =0x02106F5C - mov r2, #0x134 - ldrsh r11, [sp, #0xd8] - bl __str2dec - add r0, sp, #0xb0 - add r1, sp, #0xd6 - bl __less_dec -_020E94FC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x0C, 0x00, 0x00, 0x0A, 0xD0, 0x00, 0xD4, 0xE1, 0x00, 0x50, 0xA0, 0xE3, 0x00, 0x00, 0x50, 0xE3 - .byte 0x54, 0x44, 0x9F, 0x05, 0x58, 0x04, 0x9F, 0xE5, 0x50, 0x44, 0x9F, 0x15, 0x00, 0x00, 0x90, 0xE5 - .byte 0xC5, 0x07, 0x00, 0xEB, 0x05, 0x20, 0xA0, 0xE1, 0x04, 0x30, 0xA0, 0xE1, 0x38, 0xFB, 0xFF, 0xEB - .byte 0xFC, 0xD0, 0x8D, 0xE2, 0xF0, 0x8F, 0xBD, 0xE8, 0xDB, 0x10, 0x8D, 0xE2, 0x00, 0x00, 0xD1, 0xE5 - .byte 0x01, 0x80, 0x81, 0xE2, 0xCB, 0x02, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5 - .byte 0x05, 0x00, 0x58, 0xE1, 0x2D, 0x00, 0x00, 0x2A, 0x08, 0x00, 0x45, 0xE0, 0xA0, 0x1F, 0xA0, 0xE1 - .byte 0x80, 0x0E, 0x61, 0xE0, 0xE0, 0x7E, 0x91, 0xE0, 0x08, 0x70, 0xA0, 0x03, 0x00, 0x60, 0xA0, 0xE3 - .byte 0x00, 0x20, 0xA0, 0xE3, 0x00, 0x00, 0x57, 0xE3, 0x05, 0x00, 0x00, 0xDA, 0x0A, 0x00, 0xA0, 0xE3 - .byte 0x01, 0x10, 0xD8, 0xE4, 0x01, 0x20, 0x82, 0xE2, 0x07, 0x00, 0x52, 0xE1, 0x90, 0x16, 0x26, 0xE0 - .byte 0xFA, 0xFF, 0xFF, 0xBA, 0xE4, 0x03, 0x9F, 0xE5, 0x0C, 0x10, 0x9D, 0xE5, 0x87, 0x31, 0x80, 0xE0 - .byte 0x08, 0x20, 0x13, 0xE5, 0x08, 0x00, 0x9D, 0xE5, 0x04, 0x30, 0x13, 0xE5, 0xC0, 0x02, 0x00, 0xEB - .byte 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x90, 0xA0, 0xE1, 0x06, 0x00, 0xA0, 0xE1, 0xAD, 0x02, 0x00, 0xEB - .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1 - .byte 0x5B, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x56, 0xE3, 0x00, 0x60, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1 - .byte 0x05, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1 - .byte 0x0A, 0x30, 0xA0, 0xE1, 0xE0, 0x05, 0x00, 0xEB, 0x04, 0x00, 0x00, 0x0A, 0x08, 0x60, 0x8D, 0xE5 - .byte 0x0C, 0xA0, 0x8D, 0xE5, 0x05, 0x00, 0x58, 0xE1, 0x07, 0xB0, 0x4B, 0xE0, 0xD1, 0xFF, 0xFF, 0x3A - .byte 0x00, 0x00, 0x5B, 0xE3, 0x0E, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x6B, 0xE2, 0x85, 0x02, 0x00, 0xEB - .byte 0x01, 0x30, 0xA0, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x54, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0xCB, 0xFB, 0xFF, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x08, 0x00, 0x9D, 0xE5 - .byte 0x0C, 0x10, 0x9D, 0xE5, 0x8F, 0x0A, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5 - .byte 0x0D, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0xA0, 0xE1, 0x76, 0x02, 0x00, 0xEB, 0x01, 0x30, 0xA0, 0xE1 - .byte 0x00, 0x20, 0xA0, 0xE1, 0x18, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0xBC, 0xFB, 0xFF, 0xEB - .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x08, 0x00, 0x9D, 0xE5, 0x0C, 0x10, 0x9D, 0xE5 - .byte 0x8B, 0x02, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5, 0x08, 0x00, 0x9D, 0xE5 - .byte 0x0C, 0x10, 0x9D, 0xE5, 0x0B, 0x20, 0xA0, 0xE1, 0x1E, 0xFB, 0xFF, 0xEB, 0x08, 0x00, 0x8D, 0xE5 - .byte 0x0C, 0x10, 0x8D, 0xE5, 0xE2, 0x00, 0x00, 0xEB, 0x02, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A - .byte 0xD0, 0x02, 0x9F, 0xE5, 0x00, 0x10, 0xE0, 0xE3, 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5 - .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x20, 0x9D, 0xE5, 0x8A, 0x00, 0x8D, 0xE2, 0x00, 0x40, 0x8D, 0xE2 - .byte 0x00, 0x50, 0xA0, 0xE3, 0x99, 0xFE, 0xFF, 0xEB, 0x8A, 0x00, 0x8D, 0xE2, 0xD6, 0x10, 0x8D, 0xE2 - .byte 0x7D, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x91, 0x00, 0x00, 0x1A, 0x8A, 0x00, 0x8D, 0xE2 - .byte 0xD6, 0x10, 0x8D, 0xE2, 0xB0, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x50, 0xA0, 0x13 - .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x55, 0xE3, 0x01, 0x60, 0xA0, 0x03 - .byte 0x00, 0x10, 0x8D, 0xE5, 0x04, 0x00, 0x8D, 0xE5, 0x00, 0x60, 0xA0, 0x13, 0x00, 0x00, 0x56, 0xE3 - .byte 0x07, 0x00, 0x00, 0x1A, 0x03, 0x00, 0x94, 0xE8, 0x01, 0x00, 0x90, 0xE2, 0x00, 0x10, 0xA1, 0xE2 - .byte 0x03, 0x00, 0x84, 0xE8, 0xBE, 0x00, 0x00, 0xEB, 0x02, 0x00, 0x50, 0xE3, 0x7C, 0x00, 0x00, 0x0A - .byte 0x05, 0x00, 0x00, 0xEA, 0x00, 0x10, 0x94, 0xE5, 0x04, 0x00, 0x94, 0xE5, 0x01, 0x10, 0x51, 0xE2 - .byte 0x00, 0x00, 0xC0, 0xE2, 0x00, 0x10, 0x84, 0xE5, 0x04, 0x00, 0x84, 0xE5, 0x00, 0x10, 0x9D, 0xE5 - .byte 0x04, 0x20, 0x9D, 0xE5, 0x64, 0x00, 0x8D, 0xE2, 0x74, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x55, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x64, 0x00, 0x8D, 0xE2, 0xD6, 0x10, 0x8D, 0xE2, 0x8E, 0xFD, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x48, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x55, 0xE3, 0x34, 0x00, 0x00, 0x1A - .byte 0xD6, 0x00, 0x8D, 0xE2, 0x64, 0x10, 0x8D, 0xE2, 0x87, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x2F, 0x00, 0x00, 0x1A, 0x8A, 0x30, 0x8D, 0xE2, 0x3E, 0x50, 0x8D, 0xE2, 0x09, 0x20, 0xA0, 0xE3 - .byte 0xB0, 0x10, 0xD3, 0xE1, 0xB2, 0x00, 0xD3, 0xE1, 0x04, 0x30, 0x83, 0xE2, 0xB0, 0x10, 0xC5, 0xE1 - .byte 0xB2, 0x00, 0xC5, 0xE1, 0x04, 0x50, 0x85, 0xE2, 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A - .byte 0xB0, 0x00, 0xD3, 0xE1, 0x64, 0x30, 0x8D, 0xE2, 0x8A, 0x40, 0x8D, 0xE2, 0xB0, 0x00, 0xC5, 0xE1 - .byte 0x09, 0x20, 0xA0, 0xE3, 0xB0, 0x10, 0xD3, 0xE1, 0xB2, 0x00, 0xD3, 0xE1, 0x04, 0x30, 0x83, 0xE2 - .byte 0xB0, 0x10, 0xC4, 0xE1, 0xB2, 0x00, 0xC4, 0xE1, 0x04, 0x40, 0x84, 0xE2, 0x01, 0x20, 0x52, 0xE2 - .byte 0xF7, 0xFF, 0xFF, 0x1A, 0xB0, 0x00, 0xD3, 0xE1, 0x3E, 0x30, 0x8D, 0xE2, 0x64, 0x50, 0x8D, 0xE2 - .byte 0xB0, 0x00, 0xC4, 0xE1, 0x09, 0x20, 0xA0, 0xE3, 0xB0, 0x10, 0xD3, 0xE1, 0xB2, 0x00, 0xD3, 0xE1 - .byte 0x04, 0x30, 0x83, 0xE2, 0xB0, 0x10, 0xC5, 0xE1, 0xB2, 0x00, 0xC5, 0xE1, 0x04, 0x50, 0x85, 0xE2 - .byte 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A, 0xB0, 0x40, 0xD3, 0xE1, 0x08, 0x30, 0x9D, 0xE5 - .byte 0x00, 0x10, 0x9D, 0xE5, 0x0C, 0x20, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0xB0, 0x40, 0xC5, 0xE1 - .byte 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0x8D, 0xE5, 0x04, 0x20, 0x8D, 0xE5 - .byte 0x11, 0x00, 0x00, 0xEA, 0x64, 0x70, 0x8D, 0xE2, 0x8A, 0x30, 0x8D, 0xE2, 0x09, 0x20, 0xA0, 0xE3 - .byte 0xB0, 0x10, 0xD7, 0xE1, 0xB2, 0x00, 0xD7, 0xE1, 0x04, 0x70, 0x87, 0xE2, 0xB0, 0x10, 0xC3, 0xE1 - .byte 0xB2, 0x00, 0xC3, 0xE1, 0x04, 0x30, 0x83, 0xE2, 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A - .byte 0xB0, 0x20, 0xD7, 0xE1, 0x00, 0x10, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0xB0, 0x20, 0xC3, 0xE1 - .byte 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, 0x9B, 0xFF, 0xFF, 0xEA, 0x3E, 0x00, 0x8D, 0xE2 - .byte 0xD6, 0x10, 0x8D, 0xE2, 0x8A, 0x20, 0x8D, 0xE2, 0x77, 0xFD, 0xFF, 0xEB, 0x18, 0x00, 0x8D, 0xE2 - .byte 0x64, 0x10, 0x8D, 0xE2, 0xD6, 0x20, 0x8D, 0xE2, 0x73, 0xFD, 0xFF, 0xEB, 0x3E, 0x00, 0x8D, 0xE2 - .byte 0x18, 0x10, 0x8D, 0xE2, 0x00, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x0B, 0x00, 0x00, 0x0A - .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0x01, 0xE2, 0x00, 0x00, 0x00, 0xE2 - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x51, 0x03, 0x0D, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x9D, 0xE5 - .byte 0x04, 0x00, 0x9D, 0xE5, 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, 0x08, 0x00, 0x00, 0xEA - .byte 0x3E, 0x00, 0x8D, 0xE2, 0x18, 0x10, 0x8D, 0xE2, 0x27, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x03, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0x08, 0x10, 0x8D, 0xE5 - .byte 0x0C, 0x00, 0x8D, 0xE5, 0xD6, 0x0D, 0xDD, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0xA0, 0xE3, 0x08, 0x20, 0x9D, 0xE5, 0x0C, 0x30, 0x9D, 0xE5, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x1D, 0x03, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5, 0x08, 0x00, 0x9D, 0xE5 - .byte 0x0C, 0x10, 0x9D, 0xE5, 0xFC, 0xD0, 0x8D, 0xE2, 0xF0, 0x8F, 0xBD, 0xE8 -_020E996C: .word 0x3FF00000 -_020E9970: .word 0xBFF00000 -_020E9974: .word 0x02106B74 -_020E9978: .word 0x7FF00000 -_020E997C: .word 0x02106F5C -_020E9980: - .byte 0x48, 0x6E, 0x10, 0x02, 0x00, 0x00, 0x14, 0x40, 0xFF, 0xFF, 0xEF, 0x7F - - arm_func_start __msl_generic_count_bits64 -__msl_generic_count_bits64: ; 0x020E998C - mov r3, r0, lsr #0x1 - ldr r2, _020E9A14 ; =0x55555555 - orr r3, r3, r1, lsl #0x1f - and r3, r3, r2 - subs r12, r0, r3 - and r2, r2, r1, lsr #0x1 - ldr r0, _020E9A18 ; =0x33333333 - sbc r3, r1, r2 - mov r1, r12, lsr #0x2 - orr r1, r1, r3, lsl #0x1e - and r2, r12, r0 - and r1, r1, r0 - adds r2, r2, r1 - and r1, r3, r0 - and r0, r0, r3, lsr #0x2 - adc r1, r1, r0 - mov r0, r2, lsr #0x4 - orr r0, r0, r1, lsl #0x1c - adds r2, r2, r0 - ldr r0, _020E9A1C ; =0x0F0F0F0F - adc r1, r1, r1, lsr #0x4 - and r3, r2, r0 - and r2, r1, r0 - mov r0, r3, lsr #0x8 - orr r0, r0, r2, lsl #0x18 - adds r1, r3, r0 - adc r2, r2, r2, lsr #0x8 - mov r0, r1, lsr #0x10 - orr r0, r0, r2, lsl #0x10 - adds r1, r1, r0 - adc r0, r2, r2, lsr #0x10 - adds r0, r1, r0 - and r0, r0, #0xff - bx lr - .balign 4 -_020E9A14: .word 0x55555555 -_020E9A18: .word 0x33333333 -_020E9A1C: .word 0x0F0F0F0F -__signbitf: - stmdb sp!, {r0-r3} - ldr r0, [sp, #0x4] - and r0, r0, #0x80000000 - add sp, sp, #0x10 - bx lr - - arm_func_start __fpclassifyf -__fpclassifyf: ; 0x020E9A34 - stmdb sp!, {r0-r3} - ldr r2, [sp, #0x4] - ldr r0, _020E9A9C ; =0x7FF00000 - ands r1, r2, r0 - beq _020E9A70 - cmp r1, r0 - bne _020E9A90 - ldr r0, _020E9AA0 ; =0x000FFFFF - tst r2, r0 - ldreq r0, [sp, #0x0] - add sp, sp, #0x10 - cmpeq r0, #0x0 - movne r0, #0x1 - moveq r0, #0x2 - bx lr -_020E9A70: - ldr r0, _020E9AA0 ; =0x000FFFFF - tst r2, r0 - ldreq r0, [sp, #0x0] - add sp, sp, #0x10 - cmpeq r0, #0x0 - movne r0, #0x5 - moveq r0, #0x3 - bx lr -_020E9A90: - mov r0, #0x4 - add sp, sp, #0x10 - bx lr - .balign 4 -_020E9A9C: .word 0x7FF00000 -_020E9AA0: .word 0x000FFFFF - - arm_func_start scalbn -scalbn: ; 0x020E9AA4 - stmdb sp!, {r3-r4,lr} - sub sp, sp, #0x4 - mov r4, r2 - add r2, sp, #0x0 - bl frexp - ldr r2, [sp, #0x0] - add r2, r2, r4 - str r2, [sp, #0x0] - bl ldexp - add sp, sp, #0x4 - ldmia sp!, {r3-r4,pc} - - arm_func_start stricmp -stricmp: ; 0x020E9AD0 - stmdb sp!, {r3,lr} - ldr r3, _020E9B34 ; =0x0210420C - ldrb r2, [r0], #0x1 - cmp r2, #0x0 - blt _020E9AF0 - cmp r2, #0x80 - bge _020E9AF0 - ldrb r2, [r3, r2] -_020E9AF0: - ldrb lr, [r1], #0x1 - and r12, r2, #0xff - cmp lr, #0x0 - blt _020E9B0C - cmp lr, #0x80 - bge _020E9B0C - ldrb lr, [r3, lr] -_020E9B0C: - and r2, lr, #0xff - cmp r12, r2 - mvncc r0, #0x0 - ldmccia sp!, {r3,pc} -_020E9B1C: - .byte 0x01, 0x00, 0xA0, 0x83 - .byte 0x08, 0x80, 0xBD, 0x88, 0x00, 0x00, 0x5C, 0xE3, 0xEA, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x08, 0x80, 0xBD, 0xE8 -_020E9B34: .word 0x0210420C - - arm_func_start strnicmp -strnicmp: ; 0x020E9B38 - ldr ip, _020E9B40 ; =stricmp - bx r12 - .balign 4 -_020E9B40: .word stricmp -_dadd: - stmdb sp!, {r4,lr} - eors r12, r1, r3 - eormi r3, r3, #0x80000000 - bmi _020EA5DC -_020E9B54: - subs r12, r0, r2 - sbcs lr, r1, r3 - bhs _020E9B70 - adds r2, r2, r12 - adc r3, r3, lr - subs r0, r0, r12 - sbc r1, r1, lr -_020E9B70: - mov lr, #0x80000000 - mov r12, r1, lsr #0x14 - orr r1, lr, r1, lsl #0xb - orr r1, r1, r0, lsr #0x15 - mov r0, r0, lsl #0xb - movs r4, r12, lsl #0x15 - cmnne r4, #0x200000 - beq _020E9C6C - mov r4, r3, lsr #0x14 - orr r3, lr, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs lr, r4, lsl #0x15 - beq _020E9CB4 -_020E9BA8: - subs r4, r12, r4 - beq _020E9C00 - cmp r4, #0x20 - ble _020E9BE4 - cmp r4, #0x38 - movge r4, #0x3f - sub r4, r4, #0x20 - rsb lr, r4, #0x20 - orrs lr, r2, r3, lsl lr - mov r2, r3, lsr r4 - orrne r2, r2, #0x1 - adds r0, r0, r2 - adcs r1, r1, #0x0 - blo _020E9C28 - b _020E9C0C -_020E9BE4: - rsb lr, r4, #0x20 - movs lr, r2, lsl lr - rsb lr, r4, #0x20 - mov r2, r2, lsr r4 - orr r2, r2, r3, lsl lr - mov r3, r3, lsr r4 - orrne r2, r2, #0x1 -_020E9C00: - adds r0, r0, r2 - adcs r1, r1, r3 - blo _020E9C28 -_020E9C0C: - add r12, r12, #0x1 - and r4, r0, #0x1 - movs r1, r1, rrx - orr r0, r4, r0, rrx - mov lr, r12, lsl #0x15 - cmn lr, #0x200000 - beq _020E9E38 -_020E9C28: - movs r2, r0, lsl #0x15 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - mov r1, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - tst r2, #0x80000000 - ldmeqia sp!, {r4,lr} - bxeq lr - movs r2, r2, lsl #0x1 - andeqs r2, r0, #0x1 - ldmeqia sp!, {r4,lr} - bxeq lr - adds r0, r0, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4,lr} - bx lr -_020E9C6C: - cmp r12, #0x800 - movge lr, #0x80000000 - movlt lr, #0x0 - bics r12, r12, #0x800 - beq _020E9CD8 - orrs r4, r0, r1, lsl #0x1 - bne _020E9E14 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r4, r4, lsl #0x15 - beq _020E9E00 - cmn r4, #0x200000 - bne _020E9E00 - orrs r4, r2, r3, lsl #0x1 - beq _020E9E00 - b _020E9E14 -_020E9CB4: - cmp r4, #0x800 - movge lr, #0x80000000 - movlt lr, #0x0 - bic r12, r12, #0x800 - bics r4, r4, #0x800 - beq _020E9D44 - orrs r4, r2, r3, lsl #0x1 - bne _020E9E14 - b _020E9E00 -_020E9CD8: - orrs r4, r0, r1, lsl #0x1 - beq _020E9D18 - mov r12, #0x1 - bic r1, r1, #0x80000000 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r4, r4, lsl #0x15 - cmnne r4, #0x200000 - mov r4, r4, lsr #0x15 - orr r4, r4, lr, lsr #0x14 - beq _020E9CB4 - orr r3, r3, #0x80000000 - orr r12, r12, lr, lsr #0x14 - b _020E9BA8 -_020E9D18: - mov r12, r3, lsr #0x14 - mov r1, r3, lsl #0xb - orr r1, r1, r2, lsr #0x15 - mov r0, r2, lsl #0xb - movs r4, r12, lsl #0x15 - beq _020E9DCC - cmn r4, #0x200000 - bne _020E9DCC - orrs r4, r0, r1, lsl #0x1 - beq _020E9E00 - b _020E9E18 -_020E9D44: - orrs r4, r2, r3, lsl #0x1 - beq _020E9DDC - mov r4, #0x1 - bic r3, r3, #0x80000000 - cmp r1, #0x0 - bpl _020E9D68 - orr r12, r12, lr, lsr #0x14 - orr r4, r4, lr, lsr #0x14 - b _020E9BA8 -_020E9D68: - adds r0, r0, r2 - adcs r1, r1, r3 - blo _020E9D88 - add r12, r12, #0x1 - and r4, r0, #0x1 - movs r1, r1, rrx - mov r0, r0, rrx - orr r0, r0, r4 -_020E9D88: - cmp r1, #0x0 - subges r12, r12, #0x1 - movs r2, r0, lsl #0x15 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, lr, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - ldmeqia sp!, {r4,lr} - bxeq lr - tst r2, #0x80000000 - ldmeqia sp!, {r4,lr} - bxeq lr - movs r2, r2, lsl #0x1 - andeqs r2, r0, #0x1 - ldmeqia sp!, {r4,lr} - bxeq lr -_020E9DCC: - mov r1, r3 - mov r0, r2 - ldmia sp!, {r4,lr} - bx lr -_020E9DDC: - cmp r1, #0x0 - subges r12, r12, #0x1 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, lr, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - ldmia sp!, {r4,lr} - bx lr -_020E9E00: - ldr r1, _020E9E58 ; =0x7FF00000 - orr r1, lr, r1 - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr -_020E9E14: - mov r1, r3 -_020E9E18: - mvn r0, #0x0 - bic r1, r0, #0x80000000 - ldmia sp!, {r4,lr} - bx lr -_020E9E28: - .byte 0x00, 0x00, 0xE0, 0xE3, 0x02, 0x11, 0xC0, 0xE3 - .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020E9E38: - cmp r12, #0x800 - movge lr, #0x80000000 - movlt lr, #0x0 - ldr r1, _020E9E58 ; =0x7FF00000 - orr r1, lr, r1 - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020E9E58: .word 0x7FF00000 -_d2f: - and r2, r1, #0x80000000 - mov r12, r1, lsr #0x14 - bics r12, r12, #0x800 - beq _020E9ED4 - mov r3, r12, lsl #0x15 - cmn r3, #0x200000 - bhs _020E9EB8 - subs r12, r12, #0x380 - bls _020E9EE4 - cmp r12, #0xff - bge _020E9F54 - mov r1, r1, lsl #0xc - orr r3, r2, r1, lsr #0x9 - orr r3, r3, r0, lsr #0x1d - movs r1, r0, lsl #0x3 - orr r0, r3, r12, lsl #0x17 - bxeq lr - tst r1, #0x80000000 - bxeq lr - movs r1, r1, lsl #0x1 - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020E9EB8: - orrs r3, r0, r1, lsl #0xc - bne _020E9ECC - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020E9ECC: - mvn r0, #0x80000000 - bx lr -_020E9ED4: - orrs r3, r0, r1, lsl #0xc - bne _020E9F4C - mov r0, r2 - bx lr -_020E9EE4: - cmn r12, #0x17 - beq _020E9F38 - bmi _020E9F4C - mov r1, r1, lsl #0xb - orr r1, r1, #0x80000000 - mov r3, r1, lsr #0x8 - orr r3, r3, r0, lsr #0x1d - rsb r12, r12, #0x1 - movs r1, r0, lsl #0x3 - orr r0, r2, r3, lsr r12 - rsb r12, r12, #0x20 - mov r3, r3, lsl r12 - orrne r3, r3, #0x1 - movs r1, r3 - bxeq lr - tst r1, #0x80000000 - bxeq lr - movs r1, r1, lsl #0x1 - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020E9F38: - orr r0, r0, r1, lsl #0xc - movs r1, r0 - mov r0, r2 - addne r0, r0, #0x1 - bx lr -_020E9F4C: - mov r0, r2 - bx lr -_020E9F54: - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr - - arm_func_start _dfix -_dfix: ; 0x020E9F60 - bic r3, r1, #0x80000000 - ldr r2, _020E9FA8 ; =0x0000041E - subs r2, r2, r3, lsr #0x14 - ble _020E9F9C - cmp r2, #0x20 - bge _020E9F94 - mov r3, r1, lsl #0xb - orr r3, r3, #0x80000000 - orr r3, r3, r0, lsr #0x15 - cmp r1, #0x0 - mov r0, r3, lsr r2 - rsbmi r0, r0, #0x0 - bx lr -_020E9F94: - mov r0, #0x0 - bx lr -_020E9F9C: - mvn r0, r1, asr #0x1f - add r0, r0, #0x80000000 - bx lr - .balign 4 -_020E9FA8: .word 0x0000041E - - arm_func_start _ll_ufrom_d -_ll_ufrom_d: ; 0x020E9FAC - tst r1, #0x80000000 - bne _020EA010 - ldr r2, _020EA034 ; =0x0000043E - subs r2, r2, r1, lsr #0x14 - blt _020EA028 - cmp r2, #0x40 - bge _020EA004 - mov r12, r1, lsl #0xb - orr r12, r12, #0x80000000 - orr r12, r12, r0, lsr #0x15 - cmp r2, #0x20 - ble _020E9FEC - sub r2, r2, #0x20 - mov r1, #0x0 - mov r0, r12, lsr r2 - bx lr -_020E9FEC: - mov r3, r0, lsl #0xb - mov r1, r12, lsr r2 - mov r0, r3, lsr r2 - rsb r2, r2, #0x20 - orr r0, r0, r12, lsl r2 - bx lr -_020EA004: - mov r1, #0x0 - mov r0, #0x0 - bx lr -_020EA010: - cmn r1, #0x100000 - cmpeq r0, #0x0 - bhi _020EA028 - mov r1, #0x0 - mov r0, #0x0 - bx lr -_020EA028: - mvn r1, #0x0 - mvn r0, #0x0 - bx lr - .balign 4 -_020EA034: .word 0x0000043E - - arm_func_start _dflt -_dflt: ; 0x020EA038 - ands r2, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r0, #0x0 - mov r1, #0x0 - bxeq lr - mov r3, #0x400 - add r3, r3, #0x1e - clz r12, r0 - movs r0, r0, lsl r12 - sub r3, r3, r12 - movs r1, r0 - mov r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, r2, r1, lsr #0xc - orr r1, r1, r3, lsl #0x14 - bx lr - - arm_func_start _dfltu -_dfltu: ; 0x020EA078 - cmp r0, #0x0 - mov r1, #0x0 - bxeq lr - mov r3, #0x400 - add r3, r3, #0x1e - bmi _020EA09C - clz r12, r0 - movs r0, r0, lsl r12 - sub r3, r3, r12 -_020EA09C: - mov r1, r0 - mov r0, r1, lsl #0x15 - add r1, r1, r1 - mov r1, r1, lsr #0xc - orr r1, r1, r3, lsl #0x14 - bx lr - - arm_func_start _dmul -_dmul: ; 0x020EA0B4 - stmdb sp!, {r4-r7,lr} - eor lr, r1, r3 - and lr, lr, #0x80000000 - mov r12, r1, lsr #0x14 - mov r1, r1, lsl #0xb - orr r1, r1, r0, lsr #0x15 - mov r0, r0, lsl #0xb - movs r6, r12, lsl #0x15 - cmnne r6, #0x200000 - beq _020EA1BC - orr r1, r1, #0x80000000 - bic r12, r12, #0x800 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r5, r4, lsl #0x15 - cmnne r5, #0x200000 - beq _020EA204 - orr r3, r3, #0x80000000 - bic r4, r4, #0x800 -_020EA108: - add r12, r4, r12 - umull r5, r4, r0, r2 - umull r7, r6, r0, r3 - adds r4, r7, r4 - adc r6, r6, #0x0 - umull r7, r0, r1, r2 - adds r4, r7, r4 - adcs r0, r0, r6 - umull r7, r2, r1, r3 - adc r1, r2, #0x0 - adds r0, r0, r7 - adc r1, r1, #0x0 - orrs r4, r4, r5 - orrne r0, r0, #0x1 - cmp r1, #0x0 - blt _020EA154 - sub r12, r12, #0x1 - adds r0, r0, r0 - adc r1, r1, r1 -_020EA154: - add r12, r12, #0x2 - subs r12, r12, #0x400 - bmi _020EA2F0 - beq _020EA2F0 - mov r6, r12, lsl #0x14 - cmn r6, #0x100000 - bmi _020EA3F0 - movs r2, r0, lsl #0x15 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, lr, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - tst r2, #0x80000000 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - movs r2, r2, lsl #0x1 - andeqs r2, r0, #0x1 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - adds r0, r0, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA1BC: - bics r12, r12, #0x800 - beq _020EA218 - orrs r6, r0, r1, lsl #0x1 - bne _020EA3A4 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r5, r4, lsl #0x15 - beq _020EA1F8 - cmn r5, #0x200000 - bne _020EA390 - orrs r5, r2, r3, lsl #0x1 - beq _020EA390 - b _020EA3A4 -_020EA1F8: - orrs r5, r3, r2 - beq _020EA3B8 - b _020EA390 -_020EA204: - bics r4, r4, #0x800 - beq _020EA2AC - orrs r6, r2, r3, lsl #0x1 - bne _020EA3A4 - b _020EA390 -_020EA218: - orrs r6, r0, r1, lsl #0x1 - beq _020EA280 - mov r12, #0x1 - cmp r1, #0x0 - bne _020EA23C - sub r12, r12, #0x20 - movs r1, r0 - mov r0, #0x0 - bmi _020EA258 -_020EA23C: - clz r6, r1 - movs r1, r1, lsl r6 - rsb r6, r6, #0x20 - orr r1, r1, r0, lsr r6 - rsb r6, r6, #0x20 - mov r0, r0, lsl r6 - sub r12, r12, r6 -_020EA258: - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r5, r4, lsl #0x15 - cmnne r5, #0x200000 - beq _020EA204 - orr r3, r3, #0x80000000 - bic r4, r4, #0x800 - b _020EA108 -_020EA280: - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r5, r4, lsl #0x15 - beq _020EA404 - cmn r5, #0x200000 - bne _020EA404 - orrs r6, r2, r3, lsl #0x1 - beq _020EA3B8 - b _020EA3A4 -_020EA2AC: - orrs r5, r2, r3, lsl #0x1 - beq _020EA404 - mov r4, #0x1 - cmp r3, #0x0 - bne _020EA2D0 - sub r4, r4, #0x20 - movs r3, r2 - mov r2, #0x0 - bmi _020EA108 -_020EA2D0: - clz r6, r3 - movs r3, r3, lsl r6 - rsb r6, r6, #0x20 - orr r3, r3, r2, lsr r6 - rsb r6, r6, #0x20 - mov r2, r2, lsl r6 - sub r4, r4, r6 - b _020EA108 -_020EA2F0: - cmn r12, #0x34 - beq _020EA388 - bmi _020EA3E0 - mov r2, r1 - mov r3, r0 - add r4, r12, #0x34 - cmp r4, #0x20 - movge r2, r3 - movge r3, #0x0 - subge r4, r4, #0x20 - rsb r5, r4, #0x20 - mov r2, r2, lsl r4 - orr r2, r2, r3, lsr r5 - movs r3, r3, lsl r4 - orrne r2, r2, #0x1 - rsb r12, r12, #0xc - cmp r12, #0x20 - movge r0, r1 - movge r1, #0x0 - subge r12, r12, #0x20 - rsb r4, r12, #0x20 - mov r0, r0, lsr r12 - orr r0, r0, r1, lsl r4 - orr r1, lr, r1, lsr r12 - cmp r2, #0x0 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - tst r2, #0x80000000 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - movs r2, r2, lsl #0x1 - andeqs r2, r0, #0x1 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - adds r0, r0, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA388: - orr r0, r0, r1, lsl #0x1 - b _020EA3C8 -_020EA390: - ldr r1, _020EA414 ; =0x7FF00000 - orr r1, lr, r1 - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA3A4: - mov r1, r3 - mvn r0, #0x0 - bic r1, r0, #0x80000000 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA3B8: - mvn r0, #0x0 - bic r1, r0, #0x80000000 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA3C8: - movs r2, r0 - mov r1, lr - mov r0, #0x0 - addne r0, r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA3E0: - mov r1, lr - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA3F0: - ldr r1, _020EA414 ; =0x7FF00000 - orr r1, lr, r1 - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA404: - mov r1, lr - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020EA414: .word 0x7FF00000 - - arm_func_start _dsqrt -_dsqrt: ; 0x020EA418 - stmdb sp!, {r4-r6,lr} - ldr r2, _020EA5A8 ; =0x7FF00000 - cmp r1, r2 - bhs _020EA564 - movs r12, r1, lsr #0x14 - beq _020EA510 - bic r1, r1, r2 - orr r1, r1, #0x100000 -_020EA438: - movs r12, r12, asr #0x1 - bhs _020EA44C - sub r12, r12, #0x1 - movs r0, r0, lsl #0x1 - adc r1, r1, r1 -_020EA44C: - movs r3, r0, lsl #0x1 - adc r1, r1, r1 - mov r2, #0x0 - mov r4, #0x0 - mov lr, #0x200000 -_020EA460: - add r6, r4, lr - cmp r6, r1 - addle r4, r6, lr - suble r1, r1, r6 - addle r2, r2, lr - movs r3, r3, lsl #0x1 - adc r1, r1, r1 - movs lr, lr, lsr #0x1 - bne _020EA460 - mov r0, #0x0 - mov r5, #0x0 - cmp r1, r4 - cmpeq r3, #0x80000000 - blo _020EA4A8 - subs r3, r3, #0x80000000 - sbc r1, r1, r4 - add r4, r4, #0x1 - mov r0, #0x80000000 -_020EA4A8: - movs r3, r3, lsl #0x1 - adc r1, r1, r1 - mov lr, #0x40000000 -_020EA4B4: - add r6, r5, lr - cmp r4, r1 - cmpeq r6, r3 - bhi _020EA4D4 - add r5, r6, lr - subs r3, r3, r6 - sbc r1, r1, r4 - add r0, r0, lr -_020EA4D4: - movs r3, r3, lsl #0x1 - adc r1, r1, r1 - movs lr, lr, lsr #0x1 - bne _020EA4B4 - orrs r1, r1, r3 - biceq r0, r0, #0x1 - movs r1, r2, lsr #0x1 - movs r0, r0, rrx - adcs r0, r0, #0x0 - adc r1, r1, #0x0 - add r1, r1, #0x20000000 - sub r1, r1, #0x100000 - add r1, r1, r12, lsl #0x14 - ldmia sp!, {r4-r6,lr} - bx lr -_020EA510: - cmp r1, #0x0 - bne _020EA540 - cmp r0, #0x0 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - mvn r12, #0x13 - clz r5, r0 - movs r0, r0, lsl r5 - sub r12, r12, r5 - mov r1, r0, lsr #0xb - mov r0, r0, lsl #0x15 - b _020EA438 -_020EA540: - clz r2, r1 - movs r1, r1, lsl r2 - rsb r2, r2, #0x2b - mov r1, r1, lsr #0xb - orr r1, r1, r0, lsr r2 - rsb r2, r2, #0x20 - mov r0, r0, lsl r2 - rsb r12, r2, #0x1 - b _020EA438 -_020EA564: - tst r1, #0x80000000 - beq _020EA580 - bics r3, r1, #0x80000000 - cmpeq r0, #0x0 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - b _020EA58C -_020EA580: - orrs r2, r0, r1, lsl #0xc - ldmeqia sp!, {r4-r6,lr} - bxeq lr -_020EA58C: - ldr r2, _020EA5AC ; =0x7FF80000 - orr r1, r1, r2 - ldr r3, _020EA5B0 ; =0x021D74A8 - mov r4, #0x21 - str r4, [r3, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020EA5A8: .word 0x7FF00000 -_020EA5AC: .word 0x7FF80000 -_020EA5B0: .word 0x021D74A8 - - arm_func_start _drsb -_drsb: ; 0x020EA5B4 - eor r1, r1, r3 - eor r3, r1, r3 - eor r1, r1, r3 - eor r0, r0, r2 - eor r2, r0, r2 - eor r0, r0, r2 -_dsub: - stmdb sp!, {r4,lr} - eors r12, r1, r3 - eormi r3, r3, #0x80000000 - bmi _020E9B54 -_020EA5DC: - subs r12, r0, r2 - sbcs lr, r1, r3 - bhs _020EA5FC - eor lr, lr, #0x80000000 - adds r2, r2, r12 - adc r3, r3, lr - subs r0, r0, r12 - sbc r1, r1, lr -_020EA5FC: - mov lr, #0x80000000 - mov r12, r1, lsr #0x14 - orr r1, lr, r1, lsl #0xb - orr r1, r1, r0, lsr #0x15 - mov r0, r0, lsl #0xb - movs r4, r12, lsl #0x15 - cmnne r4, #0x200000 - beq _020EA800 - mov r4, r3, lsr #0x14 - orr r3, lr, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs lr, r4, lsl #0x15 - beq _020EA848 -_020EA634: - subs r4, r12, r4 - beq _020EA6DC - cmp r4, #0x20 - ble _020EA670 - cmp r4, #0x38 - movge r4, #0x3f - sub r4, r4, #0x20 - rsb lr, r4, #0x20 - orrs lr, r2, r3, lsl lr - mov r2, r3, lsr r4 - orrne r2, r2, #0x1 - subs r0, r0, r2 - sbcs r1, r1, #0x0 - bmi _020EA698 - b _020EA788 -_020EA670: - rsb lr, r4, #0x20 - movs lr, r2, lsl lr - rsb lr, r4, #0x20 - mov r2, r2, lsr r4 - orr r2, r2, r3, lsl lr - mov r3, r3, lsr r4 - orrne r2, r2, #0x1 - subs r0, r0, r2 - sbcs r1, r1, r3 - bpl _020EA788 -_020EA698: - movs r2, r0, lsl #0x15 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - mov r1, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - tst r2, #0x80000000 - ldmeqia sp!, {r4,lr} - bxeq lr - movs r2, r2, lsl #0x1 - andeqs r2, r0, #0x1 - ldmeqia sp!, {r4,lr} - bxeq lr - adds r0, r0, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4,lr} - bx lr -_020EA6DC: - subs r0, r0, r2 - sbc r1, r1, r3 - orrs lr, r1, r0 - beq _020EA96C - mov lr, r12, lsl #0x14 - and lr, lr, #0x80000000 - bic r12, r12, #0x800 - cmp r1, #0x0 - bmi _020EA764 - bne _020EA714 - sub r12, r12, #0x20 - movs r1, r0 - mov r0, #0x0 - bmi _020EA730 -_020EA714: - clz r4, r1 - movs r1, r1, lsl r4 - rsb r4, r4, #0x20 - orr r1, r1, r0, lsr r4 - rsb r4, r4, #0x20 - mov r0, r0, lsl r4 - sub r12, r12, r4 -_020EA730: - cmp r12, #0x0 - bgt _020EA76C - rsb r12, r12, #0xc - cmp r12, #0x20 - movge r0, r1 - movge r1, #0x0 - subge r12, r12, #0x20 - rsb r4, r12, #0x20 - mov r0, r0, lsr r12 - orr r0, r0, r1, lsl r4 - orr r1, lr, r1, lsr r12 - ldmia sp!, {r4,lr} - bx lr -_020EA764: - cmp r1, #0x0 - subges r12, r12, #0x1 -_020EA76C: - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, lr, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - ldmia sp!, {r4,lr} - bx lr -_020EA788: - mov lr, r12, lsl #0x14 - and lr, lr, #0x80000000 - bic r12, r12, #0x800 - cmp r1, #0x0 - bne _020EA7AC - sub r12, r12, #0x20 - movs r1, r0 - mov r0, #0x0 - bmi _020EA7C8 -_020EA7AC: - clz r4, r1 - movs r1, r1, lsl r4 - rsb r4, r4, #0x20 - orr r1, r1, r0, lsr r4 - rsb r4, r4, #0x20 - mov r0, r0, lsl r4 - sub r12, r12, r4 -_020EA7C8: - cmp r12, #0x0 - orrgt r12, r12, lr, lsr #0x14 - bgt _020EA698 - rsb r12, r12, #0xc - cmp r12, #0x20 - movge r0, r1 - movge r1, #0x0 - subge r12, r12, #0x20 - rsb r4, r12, #0x20 - mov r0, r0, lsr r12 - orr r0, r0, r1, lsl r4 - orr r1, lr, r1, lsr r12 - ldmia sp!, {r4,lr} - bx lr -_020EA800: - cmp r12, #0x800 - movge lr, #0x80000000 - movlt lr, #0x0 - bics r12, r12, #0x800 - beq _020EA86C - orrs r4, r0, r1, lsl #0x1 - bne _020EA948 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r4, r4, lsl #0x15 - beq _020EA934 - cmn r4, #0x200000 - bne _020EA934 - orrs r4, r2, r3, lsl #0x1 - beq _020EA95C - b _020EA948 -_020EA848: - cmp r4, #0x800 - movge lr, #0x80000000 - movlt lr, #0x0 - bic r12, r12, #0x800 - bics r4, r4, #0x800 - beq _020EA8E4 - orrs r4, r2, r3, lsl #0x1 - bne _020EA948 - b _020EA934 -_020EA86C: - orrs r4, r0, r1, lsl #0x1 - beq _020EA8AC - mov r12, #0x1 - bic r1, r1, #0x80000000 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r4, r4, lsl #0x15 - cmnne r4, #0x200000 - mov r4, r4, lsr #0x15 - orr r4, r4, lr, lsr #0x14 - beq _020EA848 - orr r3, r3, #0x80000000 - orr r12, r12, lr, lsr #0x14 - b _020EA634 -_020EA8AC: - mov r12, r3, lsr #0x14 - mov r1, r3, lsl #0xb - orr r1, r1, r2, lsr #0x15 - mov r0, r2, lsl #0xb - movs r4, r12, lsl #0x15 - beq _020EA8D8 - cmn r4, #0x200000 - bne _020EA900 - orrs r4, r0, r1, lsl #0x1 - bne _020EA94C - b _020EA934 -_020EA8D8: - orrs r4, r0, r1, lsl #0x1 - beq _020EA96C - b _020EA900 -_020EA8E4: - orrs r4, r2, r3, lsl #0x1 - beq _020EA910 - mov r4, #0x1 - bic r3, r3, #0x80000000 - orr r12, r12, lr, lsr #0x14 - orr r4, r4, lr, lsr #0x14 - b _020EA634 -_020EA900: - mov r1, r3 - mov r0, r2 - ldmia sp!, {r4,lr} - bx lr -_020EA910: - cmp r1, #0x0 - subges r12, r12, #0x1 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, lr, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - ldmia sp!, {r4,lr} - bx lr -_020EA934: - ldr r1, _020EA97C ; =0x7FF00000 - orr r1, lr, r1 - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr -_020EA948: - mov r1, r3 -_020EA94C: - mvn r0, #0x0 - bic r1, r0, #0x80000000 - ldmia sp!, {r4,lr} - bx lr -_020EA95C: - mvn r0, #0x0 - bic r1, r0, #0x80000000 - ldmia sp!, {r4,lr} - bx lr -_020EA96C: - mov r1, #0x0 - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020EA97C: .word 0x7FF00000 - - arm_func_start _fadd -_fadd: ; 0x020EA980 - eors r2, r0, r1 - eormi r1, r1, #0x80000000 - bmi _020EB7BC -_020EA98C: - subs r12, r0, r1 - subcc r0, r0, r12 - addcc r1, r1, r12 - mov r2, #0x80000000 - mov r3, r0, lsr #0x17 - orr r0, r2, r0, lsl #0x8 - ands r12, r3, #0xff - cmpne r12, #0xff - beq _020EAA20 - mov r12, r1, lsr #0x17 - orr r1, r2, r1, lsl #0x8 - ands r2, r12, #0xff - beq _020EAA60 -_020EA9C0: - subs r12, r3, r12 - beq _020EA9D8 - rsb r2, r12, #0x20 - movs r2, r1, lsl r2 - mov r1, r1, lsr r12 - orrne r1, r1, #0x1 -_020EA9D8: - adds r0, r0, r1 - blo _020EA9F8 - and r1, r0, #0x1 - orr r0, r1, r0, rrx - add r3, r3, #0x1 - and r2, r3, #0xff - cmp r2, #0xff - beq _020EAB68 -_020EA9F8: - ands r1, r0, #0xff - add r0, r0, r0 - mov r0, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - tst r1, #0x80 - bxeq lr - ands r1, r1, #0x7f - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EAA20: - cmp r3, #0x100 - movge r2, #0x80000000 - movlt r2, #0x0 - ands r3, r3, #0xff - beq _020EAA84 - movs r0, r0, lsl #0x1 - bne _020EAB94 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EAB88 - cmp r12, #0xff - blt _020EAB88 - cmp r1, #0x0 - beq _020EAB88 - b _020EAB94 -_020EAA60: - cmp r3, #0x100 - movge r2, #0x80000000 - movlt r2, #0x0 - and r3, r3, #0xff - ands r12, r12, #0xff - beq _020EAAE0 -_020EAA78: - movs r1, r1, lsl #0x1 - bne _020EAB94 - b _020EAB88 -_020EAA84: - movs r0, r0, lsl #0x1 - beq _020EAABC - mov r3, #0x1 - mov r0, r0, lsr #0x1 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x8 - ands r12, r12, #0xff - beq _020EAAE0 - cmp r12, #0xff - beq _020EAA78 - orr r1, r1, #0x80000000 - orr r3, r3, r2, lsr #0x17 - orr r12, r12, r2, lsr #0x17 - b _020EA9C0 -_020EAABC: - mov r3, r1, lsr #0x17 - mov r0, r1, lsl #0x9 - ands r3, r3, #0xff - beq _020EAB48 - cmp r3, #0xff - blt _020EAB48 - cmp r0, #0x0 - beq _020EAB88 - b _020EAB80 -_020EAAE0: - movs r1, r1, lsl #0x1 - beq _020EAB50 - mov r1, r1, lsr #0x1 - mov r12, #0x1 - orr r3, r3, r2, lsr #0x17 - orr r12, r12, r2, lsr #0x17 - cmp r0, #0x0 - bmi _020EA9C0 - adds r0, r0, r1 - blo _020EAB14 - and r1, r0, #0x1 - orr r0, r1, r0, rrx - add r12, r12, #0x1 -_020EAB14: - cmp r0, #0x0 - subge r12, r12, #0x1 - ands r1, r0, #0xff - add r0, r0, r0 - mov r0, r0, lsr #0x9 - orr r0, r0, r12, lsl #0x17 - bxeq lr - tst r1, #0x80 - bxeq lr - ands r1, r1, #0x7f - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EAB48: - mov r0, r1 - bx lr -_020EAB50: - cmp r0, #0x0 - subges r3, r3, #0x1 - add r0, r0, r0 - orr r0, r2, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bx lr -_020EAB68: - cmp r3, #0x100 - movge r2, #0x80000000 - movlt r2, #0x0 - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020EAB80: - mvn r0, #0x80000000 - bx lr -_020EAB88: - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020EAB94: - mvn r0, #0x80000000 - bx lr -_020EAB9C: - .byte 0x02, 0x01, 0xE0, 0xE3 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start _dgr -_dgr: ; 0x020EABA4 - mov r12, #0x200000 - cmn r12, r1, lsl #0x1 - bhs _020EAC18 - cmn r12, r3, lsl #0x1 - bhs _020EAC2C -_020EABB8: - orrs r12, r3, r1 - bmi _020EABE8 - cmp r1, r3 - cmpeq r0, r2 - movhi r0, #0x1 - movls r0, #0x0 - bx lr -_020EABD4: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EABE8: - orr r12, r0, r12, lsl #0x1 - orrs r12, r12, r2 - moveq r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x20000000 - msr cpsr_f, r12 - bxeq lr - cmp r3, r1 - cmpeq r2, r0 - movhi r0, #0x1 - movls r0, #0x0 - bx lr -_020EAC18: - bne _020EABD4 - cmp r0, #0x0 - bhi _020EABD4 - cmn r12, r3, lsl #0x1 - blo _020EABB8 -_020EAC2C: - bne _020EABD4 - cmp r2, #0x0 - bhi _020EABD4 - b _020EABB8 - - arm_func_start _dleq -_dleq: ; 0x020EAC3C - mov r12, #0x200000 - cmn r12, r1, lsl #0x1 - bhs _020EACBC - cmn r12, r3, lsl #0x1 - bhs _020EACD0 -_020EAC50: - orrs r12, r3, r1 - bmi _020EAC84 - cmp r1, r3 - cmpeq r0, r2 - movls r0, #0x1 - movhi r0, #0x0 - bx lr -_020EAC6C: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x40000000 - orr r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EAC84: - orr r12, r0, r12, lsl #0x1 - orrs r12, r12, r2 - moveq r0, #0x1 - bne _020EACA8 - mrs r12, cpsr - bic r12, r12, #0x20000000 - orr r12, r12, #0x40000000 - msr cpsr_f, r12 - bxeq lr -_020EACA8: - cmp r3, r1 - cmpeq r2, r0 - movls r0, #0x1 - movhi r0, #0x0 - bx lr -_020EACBC: - bne _020EAC6C - cmp r0, #0x0 - bhi _020EAC6C - cmn r12, r3, lsl #0x1 - blo _020EAC50 -_020EACD0: - bne _020EAC6C - cmp r2, #0x0 - bhi _020EAC6C - b _020EAC50 - - arm_func_start _dls -_dls: ; 0x020EACE0 - mov r12, #0x200000 - cmn r12, r1, lsl #0x1 - bhs _020EAD58 - cmn r12, r3, lsl #0x1 - bhs _020EAD6C -_020EACF4: - orrs r12, r3, r1 - bmi _020EAD24 - cmp r1, r3 - cmpeq r0, r2 - movcc r0, #0x1 - movcs r0, #0x0 - bx lr -_020EAD10: - mov r0, #0x0 - mrs r12, cpsr - orr r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EAD24: - orr r12, r0, r12, lsl #0x1 - orrs r12, r12, r2 - moveq r0, #0x0 - bne _020EAD44 - mrs r12, cpsr - orr r12, r12, #0x20000000 - msr cpsr_f, r12 - bxeq lr -_020EAD44: - cmp r3, r1 - cmpeq r2, r0 - movcc r0, #0x1 - movcs r0, #0x0 - bx lr -_020EAD58: - bne _020EAD10 - cmp r0, #0x0 - bhi _020EAD10 - cmn r12, r3, lsl #0x1 - blo _020EACF4 -_020EAD6C: - bne _020EAD10 - cmp r2, #0x0 - bhi _020EAD10 - b _020EACF4 - - arm_func_start _deq -_deq: ; 0x020EAD7C - mov r12, #0x200000 - cmn r12, r1, lsl #0x1 - bhs _020EADE4 - cmn r12, r3, lsl #0x1 - bhs _020EADF8 -_020EAD90: - orrs r12, r3, r1 - bmi _020EADC0 - cmp r1, r3 - cmpeq r0, r2 - moveq r0, #0x1 - movne r0, #0x0 - bx lr -_020EADAC: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr -_020EADC0: - orr r12, r0, r12, lsl #0x1 - orrs r12, r12, r2 - moveq r0, #0x1 - bxeq lr - cmp r3, r1 - cmpeq r2, r0 - moveq r0, #0x1 - movne r0, #0x0 - bx lr -_020EADE4: - bne _020EADAC - cmp r0, #0x0 - bhi _020EADAC - cmn r12, r3, lsl #0x1 - blo _020EAD90 -_020EADF8: - bne _020EADAC - cmp r2, #0x0 - bhi _020EADAC - b _020EAD90 - - arm_func_start _dneq -_dneq: ; 0x020EAE08 - mov r12, #0x200000 - cmn r12, r1, lsl #0x1 - bhs _020EAE70 - cmn r12, r3, lsl #0x1 - bhs _020EAE84 -_020EAE1C: - orrs r12, r3, r1 - bmi _020EAE4C - cmp r1, r3 - cmpeq r0, r2 - movne r0, #0x1 - moveq r0, #0x0 - bx lr -_020EAE38: - mov r0, #0x1 - mrs r12, cpsr - bic r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr -_020EAE4C: - orr r12, r0, r12, lsl #0x1 - orrs r12, r12, r2 - moveq r0, #0x0 - bxeq lr - cmp r3, r1 - cmpeq r2, r0 - movne r0, #0x1 - moveq r0, #0x0 - bx lr -_020EAE70: - bne _020EAE38 - cmp r0, #0x0 - bhi _020EAE38 - cmn r12, r3, lsl #0x1 - blo _020EAE1C -_020EAE84: - bne _020EAE38 - cmp r2, #0x0 - bhi _020EAE38 - b _020EAE1C - - arm_func_start _fgeq -_fgeq: ; 0x020EAE94 - mov r3, #0xff000000 - cmp r3, r0, lsl #0x1 - cmpcs r3, r1, lsl #0x1 - blo _020EAEDC - cmp r0, #0x0 - bicmi r0, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r1, #0x0 - bicmi r1, r1, #0x80000000 - rsbmi r1, r1, #0x0 - cmp r0, r1 - movge r0, #0x1 - movlt r0, #0x0 - mrs r12, cpsr - biclt r12, r12, #0x20000000 - orrge r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EAEDC: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr - - arm_func_start _fgr -_fgr: ; 0x020EAEF0 - mov r3, #0xff000000 - cmp r3, r0, lsl #0x1 - cmpcs r3, r1, lsl #0x1 - blo _020EAF38 - cmp r0, #0x0 - bicmi r0, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r1, #0x0 - bicmi r1, r1, #0x80000000 - rsbmi r1, r1, #0x0 - cmp r0, r1 - movgt r0, #0x1 - movle r0, #0x0 - mrs r12, cpsr - bicle r12, r12, #0x20000000 - orrgt r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EAF38: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr - - arm_func_start _fleq -_fleq: ; 0x020EAF4C - mov r3, #0xff000000 - cmp r3, r0, lsl #0x1 - cmpcs r3, r1, lsl #0x1 - blo _020EAF9C - cmp r0, #0x0 - bicmi r0, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r1, #0x0 - bicmi r1, r1, #0x80000000 - rsbmi r1, r1, #0x0 - cmp r0, r1 - movle r0, #0x1 - movgt r0, #0x0 - mrs r12, cpsr - orrgt r12, r12, #0x20000000 - bicgt r12, r12, #0x40000000 - bicle r12, r12, #0x20000000 - orrle r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr -_020EAF9C: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x40000000 - orr r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr - - arm_func_start _fls -_fls: ; 0x020EAFB4 - mov r3, #0xff000000 - cmp r3, r0, lsl #0x1 - cmpcs r3, r1, lsl #0x1 - blo _020EAFFC - cmp r0, #0x0 - bicmi r0, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r1, #0x0 - bicmi r1, r1, #0x80000000 - rsbmi r1, r1, #0x0 - cmp r0, r1 - movlt r0, #0x1 - movge r0, #0x0 - mrs r12, cpsr - orrge r12, r12, #0x20000000 - biclt r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EAFFC: - mov r0, #0x0 - mrs r12, cpsr - orr r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr - - arm_func_start _feq -_feq: ; 0x020EB010 - mov r3, #0xff000000 - cmp r3, r0, lsl #0x1 - blo _020EB064 - cmp r3, r1, lsl #0x1 - blo _020EB064 - orr r3, r0, r1 - movs r3, r3, lsl #0x1 - moveq r0, #0x0 - bne _020EB044 - mrs r12, cpsr - orr r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr -_020EB044: - cmp r0, r1 - movne r0, #0x1 - moveq r0, #0x0 - mrs r12, cpsr - bicne r12, r12, #0x40000000 - orreq r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr -_020EB064: - mov r0, #0x1 - mrs r12, cpsr - bic r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr - - arm_func_start _frdiv -_frdiv: ; 0x020EB078 - eor r0, r0, r1 - eor r1, r0, r1 - eor r0, r0, r1 - - arm_func_start _fdiv -_fdiv: ; 0x020EB084 - stmdb sp!, {lr} - mov r12, #0xff - ands r3, r12, r0, lsr #0x17 - cmpne r3, #0xff - beq _020EB258 - ands r12, r12, r1, lsr #0x17 - cmpne r12, #0xff - beq _020EB294 - orr r1, r1, #0x800000 - orr r0, r0, #0x800000 - bic r2, r0, #0xff000000 - bic lr, r1, #0xff000000 -_020EB0B4: - cmp r2, lr - movcc r2, r2, lsl #0x1 - subcc r3, r3, #0x1 - teq r0, r1 - sub r0, pc, #0x94 - ldrb r1, [r0, lr, lsr #0xf] - rsb lr, lr, #0x0 - mov r0, lr, asr #0x1 - mul r0, r1, r0 - add r0, r0, #0x80000000 - mov r0, r0, lsr #0x6 - mul r0, r1, r0 - mov r0, r0, lsr #0xe - mul r1, lr, r0 - sub r12, r3, r12 - mov r1, r1, lsr #0xc - mul r1, r0, r1 - mov r0, r0, lsl #0xe - add r0, r0, r1, lsr #0xf - umull r1, r0, r2, r0 - mov r3, r0 - orrmi r0, r0, #0x80000000 - adds r12, r12, #0x7e - bmi _020EB35C - cmp r12, #0xfe - bge _020EB410 - add r0, r0, r12, lsl #0x17 - mov r12, r1, lsr #0x1c - cmp r12, #0x7 - beq _020EB238 - add r0, r0, r1, lsr #0x1f - ldmia sp!, {lr} - bx lr -_020EB138: - .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9 - .byte 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA - .byte 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4, 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE - .byte 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8, 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2 - .byte 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD, 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8 - .byte 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3, 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF - .byte 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA, 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6 - .byte 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2, 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF - .byte 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7 - .byte 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1 - .byte 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E, 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B - .byte 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95 - .byte 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90 - .byte 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B - .byte 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86 - .byte 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82 - .byte 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80 -_020EB238: - mov r1, r3, lsl #0x1 - add r1, r1, #0x1 - rsb lr, lr, #0x0 - mul r1, lr, r1 - cmp r1, r2, lsl #0x18 - addmi r0, r0, #0x1 - ldmia sp!, {lr} - bx lr -_020EB258: - eor lr, r0, r1 - and lr, lr, #0x80000000 - cmp r3, #0x0 - beq _020EB2B0 - movs r0, r0, lsl #0x9 - bne _020EB3F8 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EB3E8 - cmp r12, #0xff - blt _020EB3E8 - cmp r1, #0x0 - beq _020EB404 - b _020EB3E0 -_020EB294: - eor lr, r0, r1 - and lr, lr, #0x80000000 - cmp r12, #0x0 - beq _020EB314 -_020EB2A4: - movs r1, r1, lsl #0x9 - bne _020EB3E0 - b _020EB430 -_020EB2B0: - movs r2, r0, lsl #0x9 - beq _020EB2E4 - clz r3, r2 - movs r2, r2, lsl r3 - rsb r3, r3, #0x0 - mov r2, r2, lsr #0x8 - ands r12, r12, r1, lsr #0x17 - beq _020EB33C - cmp r12, #0xff - beq _020EB2A4 - orr r1, r1, #0x800000 - bic lr, r1, #0xff000000 - b _020EB0B4 -_020EB2E4: - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EB308 - cmp r12, #0xff - blt _020EB430 - cmp r1, #0x0 - beq _020EB430 - b _020EB3E0 -_020EB308: - cmp r1, #0x0 - beq _020EB404 - b _020EB430 -_020EB314: - movs r12, r1, lsl #0x9 - beq _020EB3E8 - mov lr, r12 - clz r12, lr - movs lr, lr, lsl r12 - rsb r12, r12, #0x0 - mov lr, lr, lsr #0x8 - orr r0, r0, #0x800000 - bic r2, r0, #0xff000000 - b _020EB0B4 -_020EB33C: - movs r12, r1, lsl #0x9 - beq _020EB3E8 - mov lr, r12 - clz r12, lr - movs lr, lr, lsl r12 - rsb r12, r12, #0x0 - mov lr, lr, lsr #0x8 - b _020EB0B4 -_020EB35C: - and r0, r0, #0x80000000 - cmn r12, #0x18 - beq _020EB3D0 - bmi _020EB428 - add r1, r12, #0x17 - mov r2, r2, lsl r1 - rsb r12, r12, #0x0 - mov r3, r3, lsr r12 - orr r0, r0, r3 - rsb lr, lr, #0x0 - mul r1, lr, r3 - cmp r1, r2 - ldmeqia sp!, {lr} - bxeq lr - add r1, r1, lr - cmp r1, r2 - beq _020EB3C4 - addmi r0, r0, #0x1 - subpl r1, r1, lr - add r1, lr, r1, lsl #0x1 - cmp r1, r2, lsl #0x1 - and r3, r0, #0x1 - addmi r0, r0, #0x1 - addeq r0, r0, r3 - ldmia sp!, {lr} - bx lr -_020EB3C4: - add r0, r0, #0x1 - ldmia sp!, {lr} - bx lr -_020EB3D0: - cmn r2, lr - addne r0, r0, #0x1 - ldmia sp!, {lr} - bx lr -_020EB3E0: - mov r0, r1 - b _020EB3F8 -_020EB3E8: - mov r0, #0xff000000 - orr r0, lr, r0, lsr #0x1 - ldmia sp!, {lr} - bx lr -_020EB3F8: - mvn r0, #0x80000000 - ldmia sp!, {lr} - bx lr -_020EB404: - mvn r0, #0x80000000 - ldmia sp!, {lr} - bx lr -_020EB410: - tst r0, #0x80000000 - mov r0, #0xff000000 - movne r0, r0, asr #0x1 - moveq r0, r0, lsr #0x1 - ldmia sp!, {lr} - bx lr -_020EB428: - ldmia sp!, {lr} - bx lr -_020EB430: - mov r0, lr - ldmia sp!, {lr} - bx lr -_f2d: - and r2, r0, #0x80000000 - mov r12, r0, lsr #0x17 - mov r3, r0, lsl #0x9 - ands r12, r12, #0xff - beq _020EB46C - cmp r12, #0xff - beq _020EB498 -_020EB458: - add r12, r12, #0x380 - mov r0, r3, lsl #0x14 - orr r1, r2, r3, lsr #0xc - orr r1, r1, r12, lsl #0x14 - bx lr -_020EB46C: - cmp r3, #0x0 - bne _020EB480 - mov r1, r2 - mov r0, #0x0 - bx lr -_020EB480: - mov r3, r3, lsr #0x1 - clz r12, r3 - movs r3, r3, lsl r12 - rsb r12, r12, #0x1 - add r3, r3, r3 - b _020EB458 -_020EB498: - cmp r3, #0x0 - bhi _020EB4B0 - ldr r1, _020EB4BC ; =0x7FF00000 - orr r1, r1, r2 - mov r0, #0x0 - bx lr -_020EB4B0: - mvn r0, #0x0 - bic r1, r0, #0x80000000 - bx lr - .balign 4 -_020EB4BC: .word 0x7FF00000 - - arm_func_start _ffix -_ffix: ; 0x020EB4C0 - bic r1, r0, #0x80000000 - mov r2, #0x9e - subs r2, r2, r1, lsr #0x17 - ble _020EB4E8 - mov r1, r1, lsl #0x8 - orr r1, r1, #0x80000000 - cmp r0, #0x0 - mov r0, r1, lsr r2 - rsbmi r0, r0, #0x0 - bx lr -_020EB4E8: - mvn r0, r0, asr #0x1f - add r0, r0, #0x80000000 - bx lr - - arm_func_start _ffixu -_ffixu: ; 0x020EB4F4 - tst r0, #0x80000000 - bne _020EB518 - mov r1, #0x9e - subs r1, r1, r0, lsr #0x17 - blt _020EB52C - mov r2, r0, lsl #0x8 - orr r0, r2, #0x80000000 - mov r0, r0, lsr r1 - bx lr -_020EB518: - mov r2, #0xff000000 - cmp r2, r0, lsl #0x1 - movcs r0, #0x0 - mvncc r0, #0x0 - bx lr -_020EB52C: - mvn r0, #0x0 - bx lr - - arm_func_start _fflt -_fflt: ; 0x020EB534 - ands r2, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r0, #0x0 - bxeq lr - clz r3, r0 - movs r0, r0, lsl r3 - rsb r3, r3, #0x9e - ands r1, r0, #0xff - add r0, r0, r0 - orr r0, r2, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bxeq lr - tst r1, #0x80 - bxeq lr - ands r3, r1, #0x7f - andeqs r3, r0, #0x1 - addne r0, r0, #0x1 - bx lr - - arm_func_start _ffltu -_ffltu: ; 0x020EB57C - cmp r0, #0x0 - bxeq lr - mov r3, #0x9e - bmi _020EB598 - clz r12, r0 - movs r0, r0, lsl r12 - sub r3, r3, r12 -_020EB598: - ands r2, r0, #0xff - add r0, r0, r0 - mov r0, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bxeq lr - tst r2, #0x80 - bxeq lr - ands r1, r2, #0x7f - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr - - arm_func_start _fmul -_fmul: ; 0x020EB5C4 - eor r2, r0, r1 - and r2, r2, #0x80000000 - mov r12, #0xff - ands r3, r12, r0, lsr #0x17 - mov r0, r0, lsl #0x8 - cmpne r3, #0xff - beq _020EB640 - orr r0, r0, #0x80000000 - ands r12, r12, r1, lsr #0x17 - mov r1, r1, lsl #0x8 - cmpne r12, #0xff - beq _020EB680 - orr r1, r1, #0x80000000 -_020EB5F8: - add r12, r3, r12 - umull r1, r3, r0, r1 - movs r0, r3 - addpl r0, r0, r0 - subpl r12, r12, #0x1 - subs r12, r12, #0x7f - bmi _020EB70C - cmp r12, #0xfe - bge _020EB778 - ands r3, r0, #0xff - orr r0, r2, r0, lsr #0x8 - add r0, r0, r12, lsl #0x17 - tst r3, #0x80 - bxeq lr - orrs r1, r1, r3, lsl #0x19 - andeqs r3, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EB640: - cmp r3, #0x0 - beq _020EB694 - movs r0, r0, lsl #0x1 - bne _020EB768 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EB674 - cmp r12, #0xff - blt _020EB75C - cmp r1, #0x0 - beq _020EB75C - b _020EB768 -_020EB674: - cmp r1, #0x0 - beq _020EB770 - b _020EB75C -_020EB680: - cmp r12, #0x0 - beq _020EB6F0 -_020EB688: - movs r1, r1, lsl #0x1 - bne _020EB768 - b _020EB75C -_020EB694: - movs r0, r0, lsl #0x1 - beq _020EB6CC - mov r0, r0, lsr #0x1 - clz r3, r0 - movs r0, r0, lsl r3 - rsb r3, r3, #0x1 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x8 - ands r12, r12, #0xff - beq _020EB6F0 - cmp r12, #0xff - beq _020EB688 - orr r1, r1, #0x80000000 - b _020EB5F8 -_020EB6CC: - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EB79C - cmp r12, #0xff - blt _020EB79C - cmp r1, #0x0 - beq _020EB770 - b _020EB768 -_020EB6F0: - movs r1, r1, lsl #0x1 - beq _020EB79C - mov r1, r1, lsr #0x1 - clz r12, r1 - movs r1, r1, lsl r12 - rsb r12, r12, #0x1 - b _020EB5F8 -_020EB70C: - cmn r12, #0x18 - beq _020EB754 - bmi _020EB794 - cmp r1, #0x0 - orrne r0, r0, #0x1 - mov r3, r0 - mov r0, r0, lsr #0x8 - rsb r12, r12, #0x0 - orr r0, r2, r0, lsr r12 - rsb r12, r12, #0x18 - movs r1, r3, lsl r12 - bxeq lr - tst r1, #0x80000000 - bxeq lr - movs r1, r1, lsl #0x1 - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EB754: - mov r0, r0, lsl #0x1 - b _020EB784 -_020EB75C: - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020EB768: - mvn r0, #0x80000000 - bx lr -_020EB770: - mvn r0, #0x80000000 - bx lr -_020EB778: - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020EB784: - movs r1, r0 - mov r0, r2 - addne r0, r0, #0x1 - bx lr -_020EB794: - mov r0, r2 - bx lr -_020EB79C: - mov r0, r2 - bx lr - - arm_func_start _frsb -_frsb: ; 0x020EB7A4 - eor r0, r0, r1 - eor r1, r0, r1 - eor r0, r0, r1 - - arm_func_start _fsub -_fsub: ; 0x020EB7B0 - eors r2, r0, r1 - eormi r1, r1, #0x80000000 - bmi _020EA98C -_020EB7BC: - subs r12, r0, r1 - eorcc r12, r12, #0x80000000 - subcc r0, r0, r12 - addcc r1, r1, r12 - mov r2, #0x80000000 - mov r3, r0, lsr #0x17 - orr r0, r2, r0, lsl #0x8 - ands r12, r3, #0xff - cmpne r12, #0xff - beq _020EB8D8 - mov r12, r1, lsr #0x17 - orr r1, r2, r1, lsl #0x8 - ands r2, r12, #0xff - beq _020EB918 -_020EB7F4: - subs r12, r3, r12 - beq _020EB83C - rsb r2, r12, #0x20 - movs r2, r1, lsl r2 - mov r1, r1, lsr r12 - orrne r1, r1, #0x1 - subs r0, r0, r1 - bpl _020EB880 - ands r1, r0, #0xff - add r0, r0, r0 - mov r0, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - tst r1, #0x80 - bxeq lr - ands r1, r1, #0x7f - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EB83C: - subs r0, r0, r1 - beq _020EB9E4 - mov r2, r3, lsl #0x17 - and r2, r2, #0x80000000 - bic r3, r3, #0x100 - clz r12, r0 - movs r0, r0, lsl r12 - sub r3, r3, r12 - cmp r3, #0x0 - bgt _020EB870 - rsb r3, r3, #0x9 - orr r0, r2, r0, lsr r3 - bx lr -_020EB870: - add r0, r0, r0 - orr r0, r2, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bx lr -_020EB880: - mov r2, r3, lsl #0x17 - and r2, r2, #0x80000000 - bic r3, r3, #0x100 - clz r12, r0 - movs r0, r0, lsl r12 - sub r3, r3, r12 - cmp r3, #0x0 - bgt _020EB8AC - rsb r3, r3, #0x9 - orr r0, r2, r0, lsr r3 - bx lr -_020EB8AC: - ands r1, r0, #0xff - add r0, r0, r0 - orr r0, r2, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bxeq lr - tst r1, #0x80 - bxeq lr - ands r1, r1, #0x7f - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EB8D8: - cmp r3, #0x100 - movge r2, #0x80000000 - movlt r2, #0x0 - ands r3, r3, #0xff - beq _020EB940 - movs r0, r0, lsl #0x1 - bne _020EBA18 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EBA0C - cmp r12, #0xff - blt _020EBA0C - cmp r1, #0x0 - beq _020EBA20 - b _020EBA18 -_020EB918: - cmp r12, #0x100 - movge r2, #0x80000000 - movlt r2, #0x0 - and r3, r3, #0xff - ands r12, r12, #0xff - beq _020EB9A8 -_020EB930: - eor r2, r2, #0x80000000 - movs r1, r1, lsl #0x1 - bne _020EBA18 - b _020EBA0C -_020EB940: - movs r0, r0, lsl #0x1 - beq _020EB978 - mov r0, r0, lsr #0x1 - mov r3, #0x1 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x8 - ands r12, r12, #0xff - beq _020EB9A8 - cmp r12, #0xff - beq _020EB930 - orr r1, r1, #0x80000000 - orr r3, r3, r2, lsr #0x17 - orr r12, r12, r2, lsr #0x17 - b _020EB7F4 -_020EB978: - mov r3, r1, lsr #0x17 - mov r0, r1, lsl #0x9 - ands r2, r3, #0xff - beq _020EB99C - cmp r2, #0xff - blt _020EB9C4 - cmp r0, #0x0 - bne _020EBA04 - b _020EBA0C -_020EB99C: - cmp r0, #0x0 - beq _020EB9E4 - b _020EB9C4 -_020EB9A8: - movs r1, r1, lsl #0x1 - beq _020EB9CC - mov r1, r1, lsr #0x1 - mov r12, #0x1 - orr r12, r12, r2, lsr #0x17 - orr r3, r3, r2, lsr #0x17 - b _020EB7F4 -_020EB9C4: - mov r0, r1 - bx lr -_020EB9CC: - cmp r0, #0x0 - subges r3, r3, #0x1 - add r0, r0, r0 - orr r0, r2, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bx lr -_020EB9E4: - mov r0, #0x0 - bx lr -_020EB9EC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x30, 0x53, 0xA2, 0x00, 0x00, 0x80, 0xE0, 0xA0, 0x04, 0xA0, 0xE1, 0x83, 0x0B, 0x80, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1 -_020EBA04: - mvn r0, #0x80000000 - bx lr -_020EBA0C: - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020EBA18: - mvn r0, #0x80000000 - bx lr -_020EBA20: - mvn r0, #0x80000000 - bx lr - - arm_func_start _ll_mod -_ll_mod: ; 0x020EBA28 - stmdb sp!, {r4-r7,r11-r12,lr} - mov r4, r1 - orr r4, r4, #0x1 - b _020EBA48 - - arm_func_start _ll_sdiv -_ll_sdiv: ; 0x020EBA38 - stmdb sp!, {r4-r7,r11-r12,lr} - eor r4, r1, r3 - mov r4, r4, asr #0x1 - mov r4, r4, lsl #0x1 -_020EBA48: - orrs r5, r3, r2 - bne _020EBA58 - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr -_020EBA58: - mov r5, r0, lsr #0x1f - add r5, r5, r1 - mov r6, r2, lsr #0x1f - add r6, r6, r3 - orrs r6, r5, r6 - bne _020EBA8C - mov r1, r2 - bl _s32_div_f - ands r4, r4, #0x1 - movne r0, r1 - mov r1, r0, asr #0x1f - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr -_020EBA8C: - cmp r1, #0x0 - bge _020EBA9C - rsbs r0, r0, #0x0 - rsc r1, r1, #0x0 -_020EBA9C: - cmp r3, #0x0 - bge _020EBAAC - rsbs r2, r2, #0x0 - rsc r3, r3, #0x0 -_020EBAAC: - orrs r5, r1, r0 - beq _020EBBD0 - mov r5, #0x0 - mov r6, #0x1 - cmp r3, #0x0 - bmi _020EBAD8 -_020EBAC4: - add r5, r5, #0x1 - adds r2, r2, r2 - adcs r3, r3, r3 - bpl _020EBAC4 - add r6, r6, r5 -_020EBAD8: - cmp r1, #0x0 - blt _020EBAF8 -_020EBAE0: - cmp r6, #0x1 - beq _020EBAF8 - sub r6, r6, #0x1 - adds r0, r0, r0 - adcs r1, r1, r1 - bpl _020EBAE0 -_020EBAF8: - mov r7, #0x0 - mov r12, #0x0 - mov r11, #0x0 - b _020EBB20 -_020EBB08: - orr r12, r12, #0x1 - subs r6, r6, #0x1 - beq _020EBB78 - adds r0, r0, r0 - adcs r1, r1, r1 - adcs r7, r7, r7 -_020EBB20: - subs r0, r0, r2 - sbcs r1, r1, r3 - sbcs r7, r7, #0x0 - adds r12, r12, r12 - adc r11, r11, r11 - cmp r7, #0x0 - bge _020EBB08 -_020EBB3C: - subs r6, r6, #0x1 - beq _020EBB70 - adds r0, r0, r0 - adcs r1, r1, r1 - adc r7, r7, r7 - adds r0, r0, r2 - adcs r1, r1, r3 - adc r7, r7, #0x0 - adds r12, r12, r12 - adc r11, r11, r11 - cmp r7, #0x0 - bge _020EBB08 - b _020EBB3C -_020EBB70: - adds r0, r0, r2 - adc r1, r1, r3 -_020EBB78: - ands r7, r4, #0x1 - moveq r0, r12 - moveq r1, r11 - beq _020EBBB0 - subs r7, r5, #0x20 - movge r0, r1, lsr r7 - bge _020EBBD4 - rsb r7, r5, #0x20 - mov r0, r0, lsr r5 - orr r0, r0, r1, lsl r7 - mov r1, r1, lsr r5 - b _020EBBB0 -_020EBBA8: - .byte 0x31, 0x07, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 -_020EBBB0: - cmp r4, #0x0 - blt _020EBBC0 - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr -_020EBBC0: - rsbs r0, r0, #0x0 - rsc r1, r1, #0x0 - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr -_020EBBD0: - mov r0, #0x0 -_020EBBD4: - mov r1, #0x0 - cmp r4, #0x0 - blt _020EBBC0 - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr - - arm_func_start _ll_udiv -_ll_udiv: ; 0x020EBBE8 - stmdb sp!, {r4-r7,r11-r12,lr} - mov r4, #0x0 - b _020EBBFC - - arm_func_start _ull_mod -_ull_mod: ; 0x020EBBF4 - stmdb sp!, {r4-r7,r11-r12,lr} - mov r4, #0x1 -_020EBBFC: - orrs r5, r3, r2 - bne _020EBC0C - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr -_020EBC0C: - orrs r5, r1, r3 - bne _020EBAAC - mov r1, r2 - bl _u32_div_not_0_f -_020EBC1C: - .byte 0x00, 0x00, 0x54, 0xE3 - .byte 0x01, 0x00, 0xA0, 0x11, 0x00, 0x10, 0xA0, 0xE3, 0xF0, 0x58, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start _ll_mul -_ll_mul: ; 0x020EBC30 - stmdb sp!, {r4-r5,lr} - umull r5, r4, r0, r2 - mla r4, r0, r3, r4 - mla r4, r2, r1, r4 - mov r1, r4 - mov r0, r5 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start _ll_shl -_ll_shl: ; 0x020EBC50 - ands r2, r2, #0x3f - bxeq lr - subs r3, r2, #0x20 - bge _020EBC74 - rsb r3, r2, #0x20 - mov r1, r1, lsl r2 - orr r1, r1, r0, lsr r3 - mov r0, r0, lsl r2 - bx lr -_020EBC74: - mov r1, r0, lsl r3 - mov r0, #0x0 - bx lr - - arm_func_start _s32_div_f -_s32_div_f: ; 0x20EBC80 - ; Test whether the args have different signs - eor ip, r0, r1 - and ip, ip, #0x80000000 - ; Test the sign of the numerator, and make it positive - cmp r0, #0x0 - rsblt r0, r0, #0x0 - addlt ip, ip, #1 - ; Make the denominator positive, also test for div0 - cmp r1, #0x0 - rsblt r1, r1, #0x0 - beq _020EBE78 - ; If the numerator is less than the denominator, return (0, numerator) - cmp r0, r1 - movcc r1, r0 - movcc r0, #0x0 - bcc _020EBE78 - ; Do the actual division - mov r2, #0x1c - mov r3, r0, lsr #0x4 - cmp r1, r3, lsr #0xc - suble r2, r2, #0x10 - movle r3, r3, lsr #0x10 - cmp r1, r3, lsr #0x4 - suble r2, r2, #0x8 - movle r3, r3, lsr #0x8 - cmp r1, r3 - suble r2, r2, #0x4 - movle r3, r3, lsr #0x4 - mov r0, r0, lsl r2 - rsb r1, r1, #0x0 - adds r0, r0, r0 - add r2, r2, r2, lsl #0x1 - add pc, pc, r2, lsl #0x2 - nop - .rept 32 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - .endr - mov r1, r3 -_020EBE78: - ; If the signs differed originally, negate quotient - ands r3, ip, #0x80000000 - rsbne r0, r0, #0x0 - ; If the numerator was negative, negate remainder - ands r3, ip, #0x1 - rsbne r1, r1, #0x0 - bx lr - -; required to make the linker happy : - - arm_func_start _u32_div_f -_u32_div_f: ; 0x020EBE8C - cmp r1, #0x0 - bxeq lr ; About as wrong as we can be - arm_func_start _u32_div_not_0_f -_u32_div_not_0_f: - cmp r0, r1 - movcc r1, r0 - movcc r0, #0x0 - bxcc lr - mov r2, #0x1c - mov r3, r0, lsr #0x4 - cmp r1, r3, lsr #0xc - suble r2, r2, #0x10 - movle r3, r3, lsr #0x10 - cmp r1, r3, lsr #0x4 - suble r2, r2, #0x8 - movle r3, r3, lsr #0x8 - cmp r1, r3 - suble r2, r2, #0x4 - movle r3, r3, lsr #0x4 - mov r0, r0, lsl r2 - rsb r1, r1, #0x0 - adds r0, r0, r0 - add r2, r2, r2, lsl #0x1 - add pc, pc, r2, lsl #0x2 - nop - .rept 32 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - .endr - mov r1, r3 - bx lr - - arm_func_start _drdiv -_drdiv: ; 0x020EC070 - eor r1, r1, r3 - eor r3, r1, r3 - eor r1, r1, r3 - eor r0, r0, r2 - eor r2, r0, r2 - eor r0, r0, r2 - - arm_func_start _ddiv -_ddiv: ; 0x020EC088 - stmdb sp!, {r4-r6,lr} - ldr lr, _020EC5C8 ; =0x00000FFE - eor r4, r1, r3 - ands r12, lr, r1, lsr #0x13 - cmpne r12, lr - beq _020EC434 - bic r1, r1, lr, lsl #0x14 - orr r1, r1, #0x100000 - add r12, r12, r4, lsr #0x1f -_020EC0AC: - ands r4, lr, r3, lsr #0x13 - cmpne r4, lr - beq _020EC4CC - bic r3, r3, lr, lsl #0x14 - orr r3, r3, #0x100000 -_020EC0C0: - sub r12, r12, r4 - cmp r1, r3 - cmpeq r0, r2 - bhs _020EC0DC - adds r0, r0, r0 - adc r1, r1, r1 - sub r12, r12, #0x2 -_020EC0DC: - sub r4, pc, #0x24 - ldrb lr, [r4, r3, lsr #0xc] - rsbs r2, r2, #0x0 - rsc r3, r3, #0x0 - mov r4, #0x20000000 - mla r5, lr, r3, r4 - mov r6, r3, lsl #0xa - mov r5, r5, lsr #0x7 - mul lr, r5, lr - orr r6, r6, r2, lsr #0x16 - mov lr, lr, lsr #0xd - mul r5, lr, r6 - mov r6, r1, lsl #0xa - orr r6, r6, r0, lsr #0x16 - mov r5, r5, lsr #0x10 - mul r5, lr, r5 - mov lr, lr, lsl #0xe - add lr, lr, r5, lsr #0x10 - umull r5, r6, lr, r6 - umull r4, r5, r6, r2 - mla r5, r3, r6, r5 - mov r4, r4, lsr #0x1a - orr r4, r4, r5, lsl #0x6 - add r4, r4, r0, lsl #0x2 - umull lr, r5, r4, lr - mov r4, #0x0 - adds r5, r5, r6, lsl #0x18 - adc r4, r4, r6, lsr #0x8 - cmp r12, #0x800 - bge _020EC2C0 - add r12, r12, #0x7f0 - adds r12, r12, #0xc - bmi _020EC2D8 - orr r1, r4, r12, lsl #0x1f - bic r12, r12, #0x1 - add r1, r1, r12, lsl #0x13 - tst lr, #0x80000000 - bne _020EC1B0 - rsbs r2, r2, #0x0 - mov r4, r4, lsl #0x1 - add r4, r4, r5, lsr #0x1f - mul lr, r2, r4 - mov r6, #0x0 - mov r4, r5, lsl #0x1 - orr r4, r4, #0x1 - umlal r6, lr, r4, r2 - rsc r3, r3, #0x0 - mla lr, r4, r3, lr - cmp lr, r0, lsl #0x15 - bmi _020EC1B0 - mov r0, r5 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC1B0: - adds r0, r5, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC1C0: - .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1 - .byte 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4 - .byte 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE, 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8 - .byte 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2, 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD - .byte 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8, 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3 - .byte 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF, 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA - .byte 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6, 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2 - .byte 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF, 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB - .byte 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4 - .byte 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1, 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E - .byte 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98 - .byte 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92 - .byte 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90, 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D - .byte 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89 - .byte 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84 - .byte 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80 -_020EC2C0: - movs r1, r12, lsl #0x1f - orr r1, r1, #0x7f000000 - orr r1, r1, #0xf00000 - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC2D8: - mvn r6, r12, asr #0x1 - cmp r6, #0x34 - bgt _020EC424 - beq _020EC400 - cmp r6, #0x14 - bge _020EC320 - rsb r6, r6, #0x13 - mov lr, r0, lsl r6 - rsb r6, r6, #0x14 - mov r0, r5, lsr r6 - rsb r6, r6, #0x20 - orr r0, r0, r4, lsl r6 - rsb r6, r6, #0x20 - mov r4, r4, lsr r6 - orr r1, r4, r12, lsl #0x1f - mov r12, lr - mov lr, #0x0 - b _020EC350 -_020EC320: - rsb r6, r6, #0x33 - mov lr, r1, lsl r6 - mov r1, r12, lsl #0x1f - rsb r6, r6, #0x20 - orr r12, lr, r0, lsr r6 - rsb r6, r6, #0x20 - mov lr, r0, lsl r6 - mov r5, r5, lsr #0x15 - orr r5, r5, r4, lsl #0xb - rsb r6, r6, #0x1f - mov r0, r5, lsr r6 - mov r4, #0x0 -_020EC350: - rsbs r2, r2, #0x0 - mul r4, r2, r4 - mov r5, #0x0 - umlal r5, r4, r2, r0 - rsc r3, r3, #0x0 - mla r4, r0, r3, r4 - cmp r4, r12 - cmpeq r5, lr - ldmeqia sp!, {r4-r6,lr} - bxeq lr - adds r5, r5, r2 - adc r4, r4, r3 - cmp r4, r12 - bmi _020EC3F4 - bne _020EC398 - cmp r5, lr - beq _020EC3E4 - blo _020EC3F4 -_020EC398: - subs r5, r5, r2 - sbc r4, r4, r3 -_020EC3A0: - adds r5, r5, r5 - adc r4, r4, r4 - adds r5, r5, r2 - adc r4, r4, r3 - adds lr, lr, lr - adc r12, r12, r12 - cmp r4, r12 - bmi _020EC3E4 - ldmneia sp!, {r4-r6,lr} - bxne lr - cmp r5, lr - blo _020EC3E4 - ldmneia sp!, {r4-r6,lr} - bxne lr - tst r0, #0x1 - ldmeqia sp!, {r4-r6,lr} - bxeq lr -_020EC3E4: - adds r0, r0, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC3F4: - adds r0, r0, #0x1 - adc r1, r1, #0x0 - b _020EC3A0 -_020EC400: - rsbs r2, r2, #0x0 - rsc r3, r3, #0x0 - cmp r1, r3 - cmpeq r0, r2 - mov r1, r12, lsl #0x1f - mov r0, #0x0 - movne r0, #0x1 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC424: - mov r1, r12, lsl #0x1f - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC434: - orrs r5, r0, r1, lsl #0x1 - beq _020EC558 - cmp r12, lr - beq _020EC49C - movs r1, r1, lsl #0xc - beq _020EC478 - clz r5, r1 - movs r1, r1, lsl r5 - sub r12, r12, r5 - add r5, r12, #0x1f - mov r1, r1, lsr #0xb - orr r1, r1, r0, lsr r5 - rsb r5, r5, #0x20 - mov r0, r0, lsl r5 - mov r12, r12, lsl #0x1 - orr r12, r12, r4, lsr #0x1f - b _020EC0AC -_020EC478: - mvn r12, #0x13 - clz r5, r0 - movs r0, r0, lsl r5 - sub r12, r12, r5 - mov r1, r0, lsr #0xb - mov r0, r0, lsl #0x15 - mov r12, r12, lsl #0x1 - orr r12, r12, r4, lsr #0x1f - b _020EC0AC -_020EC49C: - orrs r5, r0, r1, lsl #0xc - bne _020EC580 - bic r5, r3, #0x80000000 - cmp r5, lr, lsl #0x13 - bhs _020EC4C0 - and r5, r3, #0x80000000 - eor r1, r5, r1 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC4C0: - orrs r5, r2, r3, lsl #0xc - bne _020EC5A0 - b _020EC5B8 -_020EC4CC: - orrs r5, r2, r3, lsl #0x1 - beq _020EC544 - cmp r4, lr - beq _020EC52C - movs r3, r3, lsl #0xc - beq _020EC50C - clz r5, r3 - movs r3, r3, lsl r5 - sub r4, r4, r5 - add r5, r4, #0x1f - mov r3, r3, lsr #0xb - orr r3, r3, r2, lsr r5 - rsb r5, r5, #0x20 - mov r2, r2, lsl r5 - mov r4, r4, lsl #0x1 - b _020EC0C0 -_020EC50C: - mvn r4, #0x13 - clz r5, r2 - movs r2, r2, lsl r5 - sub r4, r4, r5 - mov r3, r2, lsr #0xb - mov r2, r2, lsl #0x15 - mov r4, r4, lsl #0x1 - b _020EC0C0 -_020EC52C: - orrs r5, r2, r3, lsl #0xc - bne _020EC5A0 - mov r1, r12, lsl #0x1f - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC544: - mov r1, r12, lsl #0x1f - orr r1, r1, lr, lsl #0x13 - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC558: - orrs r5, r2, r3, lsl #0x1 - beq _020EC5B8 - bic r5, r3, #0x80000000 - cmp r5, lr, lsl #0x13 - cmpeq r2, #0x0 - bhi _020EC5A0 - eor r1, r1, r3 - and r1, r1, #0x80000000 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC580: - tst r1, #0x80000 - beq _020EC5B8 - bic r5, r3, #0x80000000 - cmp r5, lr, lsl #0x13 - cmpeq r2, #0x0 - bhi _020EC5A0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC5A0: - tst r3, #0x80000 - beq _020EC5B8 - mov r1, r3 - mov r0, r2 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC5B8: - orr r1, r1, #0x7f000000 - orr r1, r1, #0xf80000 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020EC5C8: .word 0x00000FFE - - arm_func_start _fp_init -_fp_init: ; 0x020EC5CC - bx lr - - arm_func_start sys_writec -sys_writec: ; 0x020EC5D0 - str lr, [sp, #-0x4]! - mov r1, r0 - mov r0, #0x3 - swi 0x123456 - ldr pc, [sp], #0x4 - - arm_func_start sys_readc -sys_readc: ; 0x020EC5E4 - str lr, [sp, #-0x4]! - mov r1, #0x0 - mov r0, #0x7 - swi 0x123456 - ldr pc, [sp], #0x4 - - arm_func_start sys_exit -sys_exit: ; 0x020EC5F8 - mov r1, #0x0 - mov r0, #0x18 - swi 0x123456 - mov pc, lr - - arm_func_start __read_console -__read_console: ; 0x020EC608 - stmdb sp!, {r3-r7,lr} - mov r6, r2 - ldr r5, [r6, #0x0] - mov r7, r1 - cmp r5, #0x0 - mov r4, #0x0 - bls _020EC650 -_020EC624: - bl sys_readc - and r1, r0, #0xff - cmp r1, #0xd - strb r0, [r7, r4] - cmpne r1, #0xa - addeq r0, r4, #0x1 - streq r0, [r6, #0x0] - beq _020EC650 - add r4, r4, #0x1 - cmp r4, r5 - blo _020EC624 -_020EC650: - mov r0, #0x0 - ldmia sp!, {r3-r7,pc} - - arm_func_start __write_console -__write_console: ; 0x020EC658 - stmdb sp!, {r4-r6,lr} - ldr r5, [r2, #0x0] - mov r6, r1 - cmp r5, #0x0 - mov r4, #0x0 - bls _020EC684 -_020EC670: - add r0, r6, r4 - bl sys_writec - add r4, r4, #0x1 - cmp r4, r5 - blo _020EC670 -_020EC684: - mov r0, #0x0 - ldmia sp!, {r4-r6,pc} - - arm_func_start __close_console -__close_console: ; 0x020EC68C - mov r0, #0x0 - bx lr - - arm_func_start __call_static_initializers -__call_static_initializers: ; 0x020EC694 - stmdb sp!, {r4,lr} - ldr r4, _020EC6BC ; =0x02104774 - b _020EC6A8 -_020EC6A0: - blx r0 - add r4, r4, #0x4 -_020EC6A8: - cmp r4, #0x0 - ldrne r0, [r4, #0x0] - cmpne r0, #0x0 - bne _020EC6A0 - ldmia sp!, {r4,pc} - .balign 4 -_020EC6BC: .word 0x02104774 - - arm_func_start __destroy_global_chain -__destroy_global_chain: ; 0x020EC6C0 - stmdb sp!, {r3-r5,lr} - ldr r4, _020EC700 ; =0x021D74C8 - ldr r2, [r4, #0x0] - cmp r2, #0x0 - ldmeqia sp!, {r3-r5,pc} -_020EC6D4: - .byte 0x00, 0x50, 0xE0, 0xE3, 0x00, 0x00, 0x92, 0xE5, 0x05, 0x10, 0xA0, 0xE1 - .byte 0x00, 0x00, 0x84, 0xE5, 0x08, 0x00, 0x92, 0xE5, 0x04, 0x20, 0x92, 0xE5, 0x32, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x20, 0x94, 0xE5, 0x00, 0x00, 0x52, 0xE3, 0xF6, 0xFF, 0xFF, 0x1A, 0x38, 0x80, 0xBD, 0xE8 -_020EC700: .word 0x021D74C8 - - arm_func_start _ExitProcess -_ExitProcess: ; 0x020EC704 - ldr ip, _020EC70C ; =sys_exit - bx r12 - .balign 4 -_020EC70C: .word sys_exit diff --git a/global.inc b/global.inc index 7eb60996..33c1e83b 100644 --- a/global.inc +++ b/global.inc @@ -1052,3 +1052,6 @@ .extern MATH_SHA1GetHash .extern MATH_MD5Update .extern MATH_MD5GetHash +.extern OS_LockMutex +.extern OS_UnlockMutex + diff --git a/pokediamond.lcf b/pokediamond.lcf index 840d581c..1ff4b507 100644 --- a/pokediamond.lcf +++ b/pokediamond.lcf @@ -389,7 +389,7 @@ SECTIONS { WM_arm9.o (.text) CTRDG_arm9.o (.text) MATH_arm9.o (.text) - rom2dism.o (.text) + STD_arm9.o (.text) rom2.o (.data) string_util.o (.data) rom2_2.o (.text) -- cgit v1.2.3 From 4447e7886004975ee4e6e3af6fd7474ae8a39533 Mon Sep 17 00:00:00 2001 From: Demki Date: Thu, 23 Apr 2020 14:38:30 +0300 Subject: clean up undefined_syms.txt --- asm/PM_arm9.s | 2 +- asm/RTC_arm9.s | 2 +- asm/WM_arm9.s | 4 +- asm/scrcmd.s | 30 ++--- asm/unk_02000E0C.s | 8 +- asm/unk_020023C0.s | 8 +- asm/unk_02006864.s | 384 ++++++++++++++++++++++++++--------------------------- asm/unk_02038C78.s | 8 +- asm/unk_02046030.s | 278 +++++++++++++++++++------------------- global.inc | 120 ++++++++--------- undefined_syms.txt | 78 ----------- 11 files changed, 422 insertions(+), 500 deletions(-) diff --git a/asm/PM_arm9.s b/asm/PM_arm9.s index 0e654689..331c0fa9 100644 --- a/asm/PM_arm9.s +++ b/asm/PM_arm9.s @@ -347,7 +347,7 @@ _020D4EFC: bl PM_GetBackLight mov r0, #0x2 mov r1, #0x0 - bl FUN_020D526C + bl PM_SetBackLight ldr r2, _020D5098 ldr r0, [r2] str r0, [sp, #0x14] diff --git a/asm/RTC_arm9.s b/asm/RTC_arm9.s index e6f5b4ee..8116f8de 100644 --- a/asm/RTC_arm9.s +++ b/asm/RTC_arm9.s @@ -801,7 +801,7 @@ _020D6364: mov r0, r5 mov r1, r4 mov r3, #0x0 - bl FUN_020EBA38 + bl _ll_sdiv mov r1, r0 mov r0, r7 bl RTC_ConvertDayToDate diff --git a/asm/WM_arm9.s b/asm/WM_arm9.s index 0e5eb0c5..cc3e7998 100644 --- a/asm/WM_arm9.s +++ b/asm/WM_arm9.s @@ -2541,7 +2541,7 @@ WmGetSharedDataAddress: ; 0x020DA00C mov r5, r0 and r0, r1, r3 mov r4, r2 - bl FUN_020DDC5C + bl MATH_CountPopulation add r1, r5, #0x800 ldrh r1, [r1, #0x10] mla r0, r1, r0, r4 @@ -3336,7 +3336,7 @@ _020DAB4C: strh r2, [r1, #0x18] mov r0, r0, lsr #0x10 strh r0, [r1, #0xe] - bl FUN_020DDC5C + bl MATH_CountPopulation add r3, r10, #0x800 mul r1, r5, r0 strh r0, [r3, #0x12] diff --git a/asm/scrcmd.s b/asm/scrcmd.s index 8468f9f6..d75850de 100644 --- a/asm/scrcmd.s +++ b/asm/scrcmd.s @@ -3669,56 +3669,56 @@ FUN_0203B640: ; 0x0203B640 cmp r7, #0x0 beq _0203B696 lsl r0, r7, #0xc - blx FUN_020EB534 + blx _fflt add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 + blx _fadd b _0203B6A4 _0203B696: lsl r0, r7, #0xc - blx FUN_020EB534 + blx _fflt mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 + blx _fsub _0203B6A4: - blx FUN_020EB4C0 + blx _ffix str r0, [sp, #0x0] cmp r6, #0x0 beq _0203B6C0 lsl r0, r6, #0xc - blx FUN_020EB534 + blx _fflt add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 + blx _fadd b _0203B6CE _0203B6C0: lsl r0, r6, #0xc - blx FUN_020EB534 + blx _fflt mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 + blx _fsub _0203B6CE: - blx FUN_020EB4C0 + blx _ffix str r0, [sp, #0x4] cmp r4, #0x0 beq _0203B6EA lsl r0, r4, #0xc - blx FUN_020EB534 + blx _fflt add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 + blx _fadd b _0203B6F8 _0203B6EA: lsl r0, r4, #0xc - blx FUN_020EB534 + blx _fflt mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 + blx _fsub _0203B6F8: - blx FUN_020EB4C0 + blx _ffix str r0, [sp, #0x8] add r0, r5, #0x0 add r0, #0x80 diff --git a/asm/unk_02000E0C.s b/asm/unk_02000E0C.s index 93c07623..50b0dace 100644 --- a/asm/unk_02000E0C.s +++ b/asm/unk_02000E0C.s @@ -106,7 +106,7 @@ FUN_02000EC8: ; 0x02000EC8 bl FUN_02033678 cmp r0, #0x0 beq _02000EE2 - blx FUN_020D6DAC + blx CARD_TryWaitBackupAsync cmp r0, #0x1 bne _02000EE2 add r0, r4, #0x0 @@ -256,7 +256,7 @@ FUN_02000FE8: ; 0x02000FE8 cmp r0, #0x0 bne _02001064 bl FUN_0201CE04 - blx FUN_020DB7A8 + blx CTRDG_IsPulledOut cmp r0, #0x1 bne _02001014 ldr r0, _020010A4 ; =0x02106FA0 @@ -312,7 +312,7 @@ _02001064: bne _02001096 mov r0, #0x2 mov r1, #0x0 - blx FUN_020D526C + blx PM_SetBackLight add sp, #0x8 pop {r3-r7, pc} _0200107E: @@ -325,7 +325,7 @@ _0200107E: ldr r1, _020010A4 ; =0x02106FA0 mov r0, #0x2 ldr r1, [r1, #0x0] - blx FUN_020D526C + blx PM_SetBackLight _02001096: add sp, #0x8 pop {r3-r7, pc} diff --git a/asm/unk_020023C0.s b/asm/unk_020023C0.s index 899a8122..cd02d807 100644 --- a/asm/unk_020023C0.s +++ b/asm/unk_020023C0.s @@ -2156,7 +2156,7 @@ FUN_020033A4: ; 0x020033A4 cmp r2, #0x0 bge _020033D4 add r0, r2, #0x0 - blx FUN_020DE3F0 + blx abs add r0, r0, #0x2 ldrh r1, [r5, #0x6] mov r2, #0xf @@ -3840,7 +3840,7 @@ FUN_02004064: ; 0x02004064 ldr r2, _02004080 ; =0x000BCD60 mov r1, #0x0 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, _02004084 ; =0x000BCD1C mov r1, #0x0 _02004074: @@ -5301,7 +5301,7 @@ _02004B80: _02004B9C: mov r1, #0x0 add r2, r6, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [r7, #0x0] ldr r1, [r4, #0x0] lsl r0, r0, #0x8 @@ -8178,7 +8178,7 @@ FUN_020061E8: ; 0x020061E8 _02006202: mov r1, #0x0 add r2, r5, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue b _0200620E _0200620C: mov r4, #0x0 diff --git a/asm/unk_02006864.s b/asm/unk_02006864.s index ebb81d3f..412e3d8a 100644 --- a/asm/unk_02006864.s +++ b/asm/unk_02006864.s @@ -5127,7 +5127,7 @@ FUN_02008DEC: ; 0x02008DEC mov r1, #0x0 add r2, r7, #0x0 str r0, [r4, #0x4] - blx FUN_020DF4A4 + blx Call_FillMemWithValue str r5, [r4, #0x8] mov r0, #0x0 str r0, [r4, #0xc] @@ -6286,7 +6286,7 @@ _0200969C: mov r2, #0x18 add r1, r5, #0x4 mul r2, r3 - blx FUN_020DF438 + blx memcpy _020096B0: pop {r4-r6, pc} .balign 4 @@ -11577,20 +11577,20 @@ FUN_0200BE74: ; 0x0200BE74 cmp r3, #0x0 ble _0200BEA0 lsl r0, r3, #0xc - blx FUN_020EB534 + blx _fflt add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 + blx _fadd b _0200BEAE _0200BEA0: lsl r0, r3, #0xc - blx FUN_020EB534 + blx _fflt mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 + blx _fsub _0200BEAE: - blx FUN_020EB4C0 + blx _ffix str r0, [sp, #0x8] add r1, sp, #0x28 mov r0, #0x10 @@ -11598,20 +11598,20 @@ _0200BEAE: cmp r0, #0x0 ble _0200BED0 lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 + blx _fadd b _0200BEDE _0200BED0: lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 + blx _fsub _0200BEDE: - blx FUN_020EB4C0 + blx _ffix str r0, [sp, #0xc] add r1, sp, #0x28 mov r0, #0x14 @@ -11619,20 +11619,20 @@ _0200BEDE: cmp r0, #0x0 ble _0200BF00 lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 + blx _fadd b _0200BF0E _0200BF00: lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 + blx _fsub _0200BF0E: - blx FUN_020EB4C0 + blx _ffix str r0, [sp, #0x10] ldr r0, [sp, #0x4c] cmp r0, #0x2 @@ -12069,60 +12069,60 @@ _0200C206: cmp r0, #0x0 ble _0200C260 lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 + blx _fadd b _0200C26E _0200C260: lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 + blx _fsub _0200C26E: - blx FUN_020EB4C0 + blx _ffix str r0, [sp, #0x4c] mov r0, #0x2 ldrsh r0, [r5, r0] cmp r0, #0x0 ble _0200C28E lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 + blx _fadd b _0200C29C _0200C28E: lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 + blx _fsub _0200C29C: - blx FUN_020EB4C0 + blx _ffix str r0, [sp, #0x50] mov r0, #0x4 ldrsh r0, [r5, r0] cmp r0, #0x0 ble _0200C2BC lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 + blx _fadd b _0200C2CA _0200C2BC: lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 + blx _fsub _0200C2CA: - blx FUN_020EB4C0 + blx _ffix str r0, [sp, #0x54] ldr r0, [r5, #0x10] cmp r0, #0x2 @@ -12965,13 +12965,13 @@ FUN_0200C84C: ; 0x0200C84C add r4, r0, #0x0 ldr r0, _0200C880 ; =0x45800000 add r1, r6, #0x0 - blx FUN_020EB5C4 - blx FUN_020EB4C0 + blx _fmul + blx _ffix str r0, [r4, #0x0] ldr r0, _0200C880 ; =0x45800000 add r1, r7, #0x0 - blx FUN_020EB5C4 - blx FUN_020EB4C0 + blx _fmul + blx _ffix str r0, [r4, #0x4] add r0, r5, #0x0 add r1, r4, #0x0 @@ -14203,27 +14203,27 @@ _0200D1E0: add r0, r5, r6 add r1, r4, r1 mov r2, #0x20 - blx FUN_020DF438 + blx memcpy add r0, r6, #0x0 ldr r1, [sp, #0x38] add r0, #0x20 add r0, r5, r0 add r1, r4, r1 mov r2, #0x20 - blx FUN_020DF438 + blx memcpy add r0, r6, #0x0 ldr r1, [sp, #0x34] add r0, #0x40 add r0, r5, r0 add r1, r4, r1 mov r2, #0x20 - blx FUN_020DF438 + blx memcpy ldr r1, [sp, #0x38] add r6, #0x60 add r0, r5, r6 add r1, r4, r1 mov r2, #0x20 - blx FUN_020DF438 + blx memcpy add r0, r7, #0x1 lsl r0, r0, #0x18 lsr r7, r0, #0x18 @@ -14292,7 +14292,7 @@ FUN_0200D274: ; 0x0200D274 ldr r1, [r1, #0x14] lsl r2, r2, #0x6 add r4, r0, #0x0 - blx FUN_020DF438 + blx memcpy mov r0, #0x9 mov r3, #0x0 lsl r0, r0, #0x6 @@ -15015,7 +15015,7 @@ FUN_0200D858: ; 0x0200D858 add r0, r4, r0 add r1, r5, r1 mov r2, #0x80 - blx FUN_020DF438 + blx memcpy ldr r0, [sp, #0x28] mov r1, #0x80 bl FUN_02016998 @@ -15026,7 +15026,7 @@ FUN_0200D858: ; 0x0200D858 str r1, [sp, #0x2c] add r1, r5, r1 add r6, r0, #0x0 - blx FUN_020DF438 + blx memcpy ldr r0, [sp, #0x24] mov r2, #0x20 add r0, #0xb @@ -15034,18 +15034,18 @@ FUN_0200D858: ; 0x0200D858 add r0, r6, #0x0 add r0, #0x20 add r1, r5, r7 - blx FUN_020DF438 + blx memcpy ldr r1, [sp, #0x2c] add r0, r6, #0x0 add r0, #0x40 add r1, r5, r1 mov r2, #0x20 - blx FUN_020DF438 + blx memcpy add r0, r6, #0x0 add r0, #0x60 add r1, r5, r7 mov r2, #0x20 - blx FUN_020DF438 + blx memcpy mov r5, #0x0 add r7, r4, #0x4 _0200D8DA: @@ -15053,7 +15053,7 @@ _0200D8DA: add r0, r7, r0 add r1, r6, #0x0 mov r2, #0x80 - blx FUN_020DF438 + blx memcpy add r0, r5, #0x1 lsl r0, r0, #0x18 lsr r5, r0, #0x18 @@ -16994,12 +16994,12 @@ _0200E812: add r0, #0x14 mov r1, #0x0 mov r2, #0x30 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 add r0, #0x44 mov r1, #0x0 mov r2, #0x30 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r2, r4, #0x0 add r2, #0x74 mov r1, #0x18 @@ -17013,7 +17013,7 @@ _0200E83A: add r0, r4, #0x0 mov r1, #0x0 mov r2, #0xc0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue pop {r4, pc} thumb_func_start FUN_0200E850 @@ -18829,7 +18829,7 @@ _0200F60C: bl FUN_0200F5D8 add r1, r0, r6 add r2, r7, #0x0 - blx FUN_020DF438 + blx memcpy ldr r0, [r5, #0x4] add r4, r4, #0x1 cmp r4, r0 @@ -18952,7 +18952,7 @@ FUN_0200F6FC: ; 0x0200F6FC lsl r2, r2, #0x2 add r5, r0, #0x0 add r7, r3, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue cmp r4, #0x1 bne _0200F726 mov r0, #0x6 @@ -19028,7 +19028,7 @@ _0200F78E: add r0, #0xc0 add r1, r5, #0x0 add r2, r7, #0x0 - blx FUN_020DF438 + blx memcpy add r4, r4, #0x1 add r5, r5, r6 cmp r4, #0x2 @@ -21261,7 +21261,7 @@ FUN_02010894: ; 0x02010894 lsl r2, r2, #0x8 add r0, r0, r2 mov r1, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [r6, #0x10] sub r4, r0, #0x1 bmi _020108C6 @@ -21363,7 +21363,7 @@ FUN_02010948: ; 0x02010948 str r0, [r5, #0x14] mov r1, #0x0 mov r2, #0x38 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [r5, #0x10] add r1, r4, #0x0 str r0, [sp, #0x0] @@ -21776,7 +21776,7 @@ FUN_02010C7C: ; 0x02010C7C str r0, [r5, #0x14] mov r1, #0x0 mov r2, #0x38 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [r5, #0x10] add r1, r4, #0x0 str r0, [sp, #0x0] @@ -22121,7 +22121,7 @@ FUN_02010F2C: ; 0x02010F2C str r0, [r5, #0x14] mov r1, #0x0 lsl r2, r2, #0x2 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [r5, #0x10] add r1, r4, #0x0 str r0, [sp, #0x0] @@ -22213,23 +22213,23 @@ FUN_02010FD0: ; 0x02010FD0 add r0, r5, #0x0 mov r1, #0x1 mov r2, #0xc0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r5, #0x0 add r0, #0xc0 mov r1, #0x1 mov r2, #0xc0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue b _02011020 _0201100A: add r0, r5, #0x0 mov r1, #0x0 mov r2, #0xc0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r5, #0x0 add r0, #0xc0 mov r1, #0x0 mov r2, #0xc0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue _02011020: mov r1, #0xc3 lsl r1, r1, #0x2 @@ -22460,7 +22460,7 @@ FUN_020111AC: ; 0x020111AC mov r1, #0x0 lsl r2, r2, #0x2 str r0, [r5, #0x14] - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r1, r4, #0x0 add r1, #0x23 ldrb r1, [r1, #0x0] @@ -23257,7 +23257,7 @@ _020117A4: str r1, [r0, #0x64] ldr r0, [r0, #0x60] mov r1, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [sp, #0x8] add sp, #0xc pop {r4-r7, pc} @@ -23780,7 +23780,7 @@ _02011B60: ldr r1, [r6, #0xc] add r1, r1, r2 ldr r2, [sp, #0x8] - blx FUN_020DF438 + blx memcpy ldr r0, [sp, #0x0] add r4, r4, #0x1 add r5, r5, r7 @@ -24423,7 +24423,7 @@ _02012018: ldr r1, [sp, #0x0] add r1, r1, r2 add r2, r6, #0x0 - blx FUN_020DF438 + blx memcpy ldr r1, [r5, #0x0] ldr r0, [sp, #0x24] add r7, r7, #0x1 @@ -24842,7 +24842,7 @@ _0201233C: add r0, r0, r1 ldr r1, [sp, #0x18] add r1, r1, r4 - blx FUN_020DF438 + blx memcpy ldr r0, [r5, #0x0] add r6, r6, #0x1 add r0, #0x20 @@ -25246,7 +25246,7 @@ FUN_02012634: ; 0x02012634 add r0, #0x2c add r1, #0x3c add r3, r4, #0x0 - blx FUN_020D5F40 + blx RTC_GetDateTimeAsync str r0, [r4, #0xc] cmp r0, #0x0 beq _02012656 @@ -25345,12 +25345,12 @@ _020126F8: .word 0x021C4828 thumb_func_start FUN_020126FC FUN_020126FC: ; 0x020126FC - ldr r3, _02012704 ; =FUN_020D6578 + ldr r3, _02012704 ; =RTC_ConvertDateTimeToSecond ldr r0, _02012708 ; =0x021C4818 ldr r1, _0201270C ; =0x021C4828 bx r3 .balign 4 -_02012704: .word FUN_020D6578 +_02012704: .word RTC_ConvertDateTimeToSecond _02012708: .word 0x021C4818 _0201270C: .word 0x021C4828 @@ -25401,9 +25401,9 @@ _02012752: str r0, [sp, #0x4] str r0, [sp, #0x8] add r0, r2, #0x0 - blx FUN_020D660C + blx RTC_ConvertDateToDay add r0, r5, #0x0 - blx FUN_020D660C + blx RTC_ConvertDateToDay add r0, r4, #0x0 add sp, #0x10 pop {r4-r6, pc} @@ -25477,7 +25477,7 @@ FUN_020127C0: ; 0x020127C0 ldr r1, [sp, #0x4] str r0, [r2, #0x0] ldr r0, [sp, #0x0] - blx FUN_020D6578 + blx RTC_ConvertDateTimeToSecond add r2, r1, #0x0 add r3, r0, #0x0 mov r1, #0x0 @@ -25791,7 +25791,7 @@ FUN_02012A00: ; 0x02012A00 ldr r2, _02012A2C ; =0x0000079C mov r1, #0x0 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue mov r2, #0x3 lsl r2, r2, #0x8 add r0, r5, #0x0 @@ -25897,7 +25897,7 @@ _02012ACE: mov r2, #0x3 ldr r1, [r4, r1] lsl r2, r2, #0x8 - blx FUN_020DF4A4 + blx Call_FillMemWithValue _02012AF4: pop {r4, pc} nop @@ -26187,7 +26187,7 @@ _02012D14: add r0, r4, #0x0 mov r1, #0x0 mov r2, #0xdc - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r2, r4, #0x0 ldr r0, [sp, #0x8] str r7, [r4, #0x18] @@ -26215,7 +26215,7 @@ _02012D14: str r0, [r2, #0x0] ldr r2, [sp, #0xc] add r0, r6, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [sp, #0xc] str r6, [r4, #0xc] str r6, [r4, #0x10] @@ -28859,7 +28859,7 @@ FUN_02013F30: ; 0x02013F30 add r4, r0, #0x0 mov r1, #0x0 mov r2, #0x40 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 mov r1, #0x1f add r0, #0x3e @@ -29929,7 +29929,7 @@ FUN_020146F0: ; 0x020146F0 add r5, r0, #0x0 mov r1, #0x0 mov r2, #0x9c - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r5, #0x0 add r0, #0x9b ldrb r1, [r0, #0x0] @@ -30306,7 +30306,7 @@ _020149B4: add r0, r6, #0x0 mov r1, #0x0 mov r2, #0x38 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add sp, #0x10 pop {r4-r6, pc} @@ -33331,7 +33331,7 @@ FUN_02015FC8: ; 0x02015FC8 add r0, sp, #0x0 add r1, sp, #0x10 mov r2, #0x20 - blx FUN_020DDCE4 + blx MATH_CalcMD5 mov r3, #0x0 add r1, r3, #0x0 add r2, sp, #0x0 @@ -33601,7 +33601,7 @@ FUN_02016230: ; 0x02016230 push {r3-r7, lr} sub sp, #0x8 str r0, [sp, #0x0] - blx FUN_020E2EAC + blx strlen lsl r0, r0, #0x10 lsr r3, r0, #0x10 lsr r2, r3, #0x1f @@ -33749,12 +33749,12 @@ FUN_02016324: ; 0x02016324 add r0, sp, #0x0 bne _02016340 add r1, r2, #0x1 - blx FUN_020E2EC8 + blx strcpy mov r5, #0x1 b _02016346 _02016340: add r1, r2, #0x0 - blx FUN_020E2EC8 + blx strcpy _02016346: add r0, sp, #0x0 bl FUN_02016230 @@ -34896,7 +34896,7 @@ FUN_02016B94: ; 0x02016B94 mov r1, #0x0 lsl r2, r2, #0x2 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue str r5, [r4, #0x0] mov r0, #0x0 strh r0, [r4, #0x4] @@ -37548,7 +37548,7 @@ FUN_02017F18: ; 0x02017F18 add r4, r0, #0x0 mov r1, #0x0 add r2, r5, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r6, #0x0 add r1, r4, #0x0 add r2, r7, #0x0 @@ -40023,7 +40023,7 @@ FUN_020190EC: ; 0x020190EC lsl r1, r1, #0x18 ldr r2, [sp, #0x4] lsr r1, r1, #0x18 - blx FUN_020DF4A4 + blx Call_FillMemWithValue cmp r7, #0x0 beq _02019148 str r5, [r4, #0x0] @@ -44364,7 +44364,7 @@ _0201B096: ldr r1, [sp, #0x18] add r1, r1, r2 mov r2, #0x40 - blx FUN_020DF438 + blx memcpy ldrh r1, [r4, r6] add r0, r7, #0x0 asr r2, r1, #0xa @@ -44454,7 +44454,7 @@ _0201B142: add r0, r7, #0x0 add r1, r4, #0x0 mov r2, #0x40 - blx FUN_020DF438 + blx memcpy _0201B166: ldr r0, [sp, #0x0] mov r1, #0x2 @@ -44484,7 +44484,7 @@ _0201B17E: add r0, r7, #0x0 add r1, r4, #0x0 mov r2, #0x40 - blx FUN_020DF438 + blx memcpy _0201B19E: add r0, r4, #0x0 bl FUN_02016A18 @@ -50427,7 +50427,7 @@ FUN_0201DD00: ; 0x0201DD00 add r0, r4, #0x0 mov r1, #0x0 lsr r2, r2, #0x3 - blx FUN_020DF4A4 + blx Call_FillMemWithValue _0201DD16: pop {r4, pc} @@ -51269,7 +51269,7 @@ FUN_0201E2F8: ; 0x0201E2F8 mov r1, #0x0 mov r2, #0x30 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue mov r0, #0x0 mvn r0, r0 str r0, [r4, #0xc] @@ -55078,7 +55078,7 @@ FUN_0201FE6C: ; 0x0201FE6C mov r1, #0x0 lsl r2, r2, #0x2 str r1, [r4, #0x3c] - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 add r0, #0xb4 blx FUN_020B1A24 @@ -58016,7 +58016,7 @@ FUN_02021310: ; 0x02021310 add r1, r6, #0x0 add r2, r5, #0x0 add r4, r0, #0x0 - blx FUN_020DF438 + blx memcpy add r0, r4, #0x0 pop {r4-r6, pc} .balign 4 @@ -59038,7 +59038,7 @@ _02021AA2: add r0, #0x8 add r1, #0x8 lsl r2, r2, #0x1 - blx FUN_020DF438 + blx memcpy ldrh r0, [r4, #0x2] strh r0, [r5, #0x2] pop {r3-r5, pc} @@ -59589,7 +59589,7 @@ _02021EA8: add r0, #0x8 add r1, r7, #0x0 add r2, r6, #0x0 - blx FUN_020DF438 + blx memcpy mov r2, #0x0 cmp r4, #0x0 bls _02021ED4 @@ -59643,7 +59643,7 @@ _02021F0C: add r0, r6, #0x0 add r1, r5, #0x0 lsl r2, r2, #0x1 - blx FUN_020DF438 + blx memcpy pop {r4-r6, pc} _02021F22: bl ErrorHandling @@ -59710,7 +59710,7 @@ _02021F7A: add r2, r2, #0x1 add r1, #0x8 lsl r2, r2, #0x1 - blx FUN_020DF438 + blx memcpy ldrh r1, [r5, #0x2] ldrh r0, [r4, #0x2] add r0, r1, r0 @@ -60534,7 +60534,7 @@ FUN_0202254C: ; 0x0202254C add r0, r4, #0x0 ldr r1, _020225E8 ; =0x00001021 add r0, #0x14 - blx FUN_020DDF60 + blx MATHi_CRC16InitTable ldr r0, _020225EC ; =0x00020224 add r0, r4, r0 bl FUN_020230E4 @@ -60967,12 +60967,12 @@ FUN_0202288C: ; 0x0202288C thumb_func_start FUN_02022898 FUN_02022898: ; 0x02022898 - ldr r3, _020228A0 ; =FUN_020DDD60 + ldr r3, _020228A0 ; =MATH_CalcCRC16CCITT add r0, #0x14 sub r2, #0x14 bx r3 .balign 4 -_020228A0: .word FUN_020DDD60 +_020228A0: .word MATH_CalcCRC16CCITT thumb_func_start FUN_020228A4 FUN_020228A4: ; 0x020228A4 @@ -61984,14 +61984,14 @@ _02023006: add r0, r0, #0x4 cmp r3, #0x2 blt _02023006 - blx FUN_020D6DAC + blx CARD_TryWaitBackupAsync cmp r0, #0x0 bne _02023034 - blx FUN_020D6D7C + blx CARD_CancelBackupAsync ldr r0, [r4, #0x10] lsl r0, r0, #0x10 lsr r0, r0, #0x10 - blx FUN_020D66A0 + blx CARD_UnlockBackup ldr r0, [r4, #0x10] lsl r0, r0, #0x10 lsr r0, r0, #0x10 @@ -62290,7 +62290,7 @@ FUN_02023248: ; 0x02023248 add r3, #0xe strh r2, [r4, #0xc] add r2, r3, #0x0 - blx FUN_020DDD60 + blx MATH_CalcCRC16CCITT strh r0, [r4, #0xe] pop {r3-r5, pc} nop @@ -62323,7 +62323,7 @@ _02023298: add r3, #0xe add r0, #0x14 add r2, r3, #0x0 - blx FUN_020DDD60 + blx MATH_CalcCRC16CCITT ldrh r1, [r4, #0xe] cmp r1, r0 bne _020232AC @@ -62680,16 +62680,16 @@ FUN_02023570: ; 0x02023570 _02023584: lsl r0, r4, #0x10 lsr r0, r0, #0x10 - blx FUN_020D66B0 + blx CARD_LockBackup ldr r0, _020235C8 ; =0x00001302 - blx FUN_020D6DC4 + blx CARD_IdentifyBackup cmp r0, #0x0 beq _0202359A ldr r5, _020235C8 ; =0x00001302 b _020235AA _0202359A: ldr r0, _020235CC ; =0x00001202 - blx FUN_020D6DC4 + blx CARD_IdentifyBackup cmp r0, #0x0 beq _020235A8 ldr r5, _020235CC ; =0x00001202 @@ -62699,7 +62699,7 @@ _020235A8: _020235AA: lsl r0, r4, #0x10 lsr r0, r0, #0x10 - blx FUN_020D66A0 + blx CARD_UnlockBackup lsl r0, r4, #0x10 lsr r0, r0, #0x10 blx OS_ReleaseLockID @@ -62747,7 +62747,7 @@ FUN_020235EC: ; 0x020235EC _02023608: lsl r0, r4, #0x10 lsr r0, r0, #0x10 - blx FUN_020D66B0 + blx CARD_LockBackup mov r3, #0x0 str r3, [sp, #0x0] mov r1, #0x1 @@ -62759,12 +62759,12 @@ _02023608: add r1, r6, #0x0 add r2, r7, #0x0 str r3, [sp, #0x10] - blx FUN_020D6F20 - blx FUN_020D6DB8 + blx CARDi_RequestStreamCommand + blx CARD_WaitBackupAsync add r5, r0, #0x0 lsl r0, r4, #0x10 lsr r0, r0, #0x10 - blx FUN_020D66A0 + blx CARD_UnlockBackup lsl r0, r4, #0x10 lsr r0, r0, #0x10 blx OS_ReleaseLockID @@ -62808,7 +62808,7 @@ FUN_02023668: ; 0x02023668 _02023684: lsl r0, r4, #0x10 lsr r0, r0, #0x10 - blx FUN_020D66B0 + blx CARD_LockBackup mov r0, #0x0 str r0, [sp, #0x0] str r0, [sp, #0x4] @@ -62820,7 +62820,7 @@ _02023684: mov r2, #0x4 add r3, r0, #0x0 str r0, [sp, #0x10] - blx FUN_020D6F20 + blx CARDi_RequestStreamCommand cmp r0, #0x0 bne _020236B2 add r0, r4, #0x0 @@ -62843,7 +62843,7 @@ _020236B2: add r0, r6, #0x0 add r1, r5, #0x0 add r2, r7, #0x0 - blx FUN_020D6F20 + blx CARDi_RequestStreamCommand add r0, r4, #0x0 add sp, #0x18 pop {r3-r7, pc} @@ -62862,11 +62862,11 @@ FUN_020236E4: ; 0x020236E4 bne _02023738 lsl r0, r5, #0x10 lsr r0, r0, #0x10 - blx FUN_020D66A0 + blx CARD_UnlockBackup lsl r0, r5, #0x10 lsr r0, r0, #0x10 blx OS_ReleaseLockID - blx FUN_020D6700 + blx CARD_GetResultCode cmp r0, #0x0 beq _02023714 cmp r0, #0x4 @@ -62907,7 +62907,7 @@ FUN_02023740: ; 0x02023740 lsl r0, r5, #0x10 lsr r0, r0, #0x10 add r4, r1, #0x0 - blx FUN_020D66A0 + blx CARD_UnlockBackup lsl r0, r5, #0x10 lsr r0, r0, #0x10 blx OS_ReleaseLockID @@ -63072,12 +63072,12 @@ FUN_02023840: ; 0x02023840 add r1, #0x14 bl FUN_0201265C add r0, r4, #0x4 - blx FUN_020D660C + blx RTC_ConvertDateToDay add r1, r4, #0x0 str r0, [r4, #0x20] add r0, r4, #0x4 add r1, #0x14 - blx FUN_020D6578 + blx RTC_ConvertDateTimeToSecond str r0, [r4, #0x24] str r1, [r4, #0x28] mov r0, #0x0 @@ -63132,7 +63132,7 @@ FUN_020238A4: ; 0x020238A4 add r1, #0x14 bl FUN_0201265C add r0, r4, #0x4 - blx FUN_020D660C + blx RTC_ConvertDateToDay str r0, [r4, #0x20] pop {r4, pc} .balign 4 @@ -63224,7 +63224,7 @@ FUN_02023948: ; 0x02023948 mov r1, #0x0 mov r2, #0x20 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue mov r0, #0x2 strb r0, [r4, #0x19] pop {r4, pc} @@ -63517,12 +63517,12 @@ _02023AD4: .word MI_CpuCopy8 thumb_func_start FUN_02023AD8 FUN_02023AD8: ; 0x02023AD8 - ldr r3, _02023AE0 ; =FUN_020DF4A4 + ldr r3, _02023AE0 ; =Call_FillMemWithValue mov r1, #0x0 mov r2, #0x20 bx r3 .balign 4 -_02023AE0: .word FUN_020DF4A4 +_02023AE0: .word Call_FillMemWithValue thumb_func_start FUN_02023AE4 FUN_02023AE4: ; 0x02023AE4 @@ -63738,7 +63738,7 @@ FUN_02023C48: ; 0x02023C48 add r4, r0, #0x0 mov r1, #0x0 lsl r2, r2, #0x4 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 bl FUN_020669A0 add r0, r4, #0x0 @@ -64792,7 +64792,7 @@ FUN_02024378: ; 0x02024378 mov r1, #0x0 lsl r2, r2, #0x2 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, _020243C0 ; =0xBEEFCAFE mov r1, #0x0 str r0, [r4, #0x0] @@ -64802,7 +64802,7 @@ FUN_02024378: ; 0x02024378 sub r0, #0x2d add r0, r4, r0 mov r1, #0xff - blx FUN_020DF4A4 + blx Call_FillMemWithValue mov r1, #0xff add r0, r1, #0x0 add r0, #0x9 @@ -67248,7 +67248,7 @@ _020254D6: add r0, r5, #0x0 add r1, r7, #0x0 mov r2, #0x88 - blx FUN_020DF4A4 + blx Call_FillMemWithValue strh r6, [r5, #0x0] add r4, r4, #0x1 add r5, #0x88 @@ -67414,7 +67414,7 @@ _020255F8: ldr r0, [sp, #0x0] ldr r1, [sp, #0x10] lsl r2, r2, #0x6 - blx FUN_020DF438 + blx memcpy ldr r0, [sp, #0x10] bl FUN_02016A18 add sp, #0x2c @@ -71169,7 +71169,7 @@ _02026F6A: add r0, r5, #0x0 mov r1, #0x0 mov r2, #0x74 - blx FUN_020DF4A4 + blx Call_FillMemWithValue str r6, [r5, #0x0] add r4, r4, #0x1 add r5, #0x74 @@ -71183,7 +71183,7 @@ _02026F86: add r0, r4, #0x0 mov r1, #0x0 mov r2, #0x98 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r1, _02026FC8 ; =0x00001234 ldr r0, _02026FCC ; =0x000004FC add r6, r6, #0x1 @@ -71196,7 +71196,7 @@ _02026F86: mov r1, #0x0 add r0, r7, r0 mov r2, #0x40 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r5, _02026FD4 ; =0x0000081C mov r4, #0x0 mov r6, #0x12 @@ -71241,7 +71241,7 @@ FUN_02026FE8: ; 0x02026FE8 mov r1, #0x0 mov r2, #0x98 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, _02027004 ; =0x00001234 str r0, [r4, #0x0] add r0, r4, #0x0 @@ -71708,7 +71708,7 @@ _02027330: add r0, r4, #0x0 mov r1, #0x0 mov r2, #0x74 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, _02027340 ; =0x00001234 str r0, [r4, #0x0] pop {r4, pc} @@ -71938,7 +71938,7 @@ _020274DA: add r0, r5, #0x0 add r1, r4, #0x0 mov r2, #0x74 - blx FUN_020DF438 + blx memcpy pop {r3-r5, pc} nop _020274E8: .word 0x00001234 @@ -72316,7 +72316,7 @@ _02027760: add r0, r4, #0x0 mov r1, #0x0 mov r2, #0x98 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, _02027770 ; =0x00001234 str r0, [r4, #0x0] pop {r4, pc} @@ -72540,7 +72540,7 @@ _020278FE: add r0, r5, #0x0 add r1, r4, #0x0 mov r2, #0x98 - blx FUN_020DF438 + blx memcpy pop {r3-r5, pc} nop _0202790C: .word 0x00001234 @@ -73145,11 +73145,11 @@ FUN_02027D0C: ; 0x02027D0C bne _02027D6A ldr r1, _02027D78 ; =0xEDB88320 add r0, sp, #0x4 - blx FUN_020DDE44 + blx MATHi_CRC32InitTableRev add r0, sp, #0x4 add r1, r4, #0x0 mov r2, #0x74 - blx FUN_020DDD28 + blx MATH_CalcCRC32 add r6, r0, #0x0 mov r5, #0x0 _02027D3C: @@ -73159,11 +73159,11 @@ _02027D3C: add r4, r0, #0x0 ldr r1, _02027D78 ; =0xEDB88320 add r0, sp, #0x4 - blx FUN_020DDE44 + blx MATHi_CRC32InitTableRev add r0, sp, #0x4 add r1, r4, #0x0 mov r2, #0x74 - blx FUN_020DDD28 + blx MATH_CalcCRC32 cmp r0, r6 bne _02027D62 mov r0, #0x0 @@ -74971,22 +74971,22 @@ FUN_02028980: ; 0x02028980 thumb_func_start FUN_02028988 FUN_02028988: ; 0x02028988 - ldr r3, _02028990 ; =FUN_020DF4A4 + ldr r3, _02028990 ; =Call_FillMemWithValue mov r1, #0x0 mov r2, #0x70 bx r3 .balign 4 -_02028990: .word FUN_020DF4A4 +_02028990: .word Call_FillMemWithValue thumb_func_start FUN_02028994 FUN_02028994: ; 0x02028994 - ldr r3, _020289A0 ; =FUN_020DF4A4 + ldr r3, _020289A0 ; =Call_FillMemWithValue mov r2, #0x46 mov r1, #0x0 lsl r2, r2, #0x4 bx r3 nop -_020289A0: .word FUN_020DF4A4 +_020289A0: .word Call_FillMemWithValue thumb_func_start FUN_020289A4 FUN_020289A4: ; 0x020289A4 @@ -75445,12 +75445,12 @@ _02028CC0: add r0, #0x1c add r1, #0x46 mov r2, #0x2a - blx FUN_020DF438 + blx memcpy add r4, #0x46 add r0, r4, #0x0 mov r1, #0x0 mov r2, #0x2a - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 pop {r4, pc} .balign 4 @@ -76317,7 +76317,7 @@ FUN_020292BC: ; 0x020292BC mov r1, #0x0 mov r2, #0x3a add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 pop {r4, pc} .balign 4 @@ -76866,7 +76866,7 @@ _020296B4: add r0, r4, #0x0 mov r1, #0x0 mov r2, #0x3a - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldrb r0, [r6, #0x1c] cmp r0, #0x10 bhi _02029722 @@ -77396,7 +77396,7 @@ FUN_02029A8C: ; 0x02029A8C add r4, r0, #0x0 mov r1, #0x0 lsl r2, r2, #0x4 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 bl FUN_02029ACC add r5, r0, #0x0 @@ -79601,7 +79601,7 @@ FUN_0202A92C: ; 0x0202A92C add r4, r0, #0x0 mov r1, #0x0 lsl r2, r2, #0x2 - blx FUN_020DF4A4 + blx Call_FillMemWithValue bl FUN_0201BA60 str r0, [r4, #0x0] bl FUN_0201BA60 @@ -83178,7 +83178,7 @@ FUN_0202C1C8: ; 0x0202C1C8 ldr r1, _0202C1F0 ; =0x021C59D8 ldr r0, _0202C1F4 ; =FUN_0202C1F8 ldr r1, [r1, #0x4] - blx FUN_020D9624 + blx WM_SetParentParameter cmp r0, #0x2 beq _0202C1EC bl FUN_0202C1AC @@ -83225,7 +83225,7 @@ FUN_0202C21C: ; 0x0202C21C mov r0, #0x1 pop {r4, pc} _0202C230: - blx FUN_020D7E9C + blx WMi_GetStatusAddress add r4, r0, #0x0 mov r0, #0x66 lsl r0, r0, #0x2 @@ -83240,7 +83240,7 @@ _0202C230: mov r1, #0x4 blx DC_FlushRange ldr r0, _0202C280 ; =FUN_0202C288 - blx FUN_020D9554 + blx WM_StartParent cmp r0, #0x2 beq _0202C264 bl FUN_0202C1AC @@ -83334,13 +83334,13 @@ _0202C2DA: ldr r0, _0202C38C ; =0x02105D54 add r1, #0x15 mov r2, #0x3 - blx FUN_020DF510 + blx memcmp cmp r0, #0x0 beq _0202C330 _0202C318: ldrh r1, [r5, #0x10] mov r0, #0x0 - blx FUN_020D9060 + blx WM_Disconnect cmp r0, #0x2 beq _0202C378 bl FUN_0202C1AC @@ -83429,7 +83429,7 @@ _0202C3AC: ldr r0, _0202C400 ; =FUN_0202C404 lsr r2, r2, #0x10 add r3, r4, r3 - blx FUN_020D9B48 + blx WM_StartMP cmp r0, #0x2 beq _0202C3E8 bl FUN_0202C1AC @@ -83502,7 +83502,7 @@ FUN_0202C460: ; 0x0202C460 mov r0, #0x3 bl FUN_0202C198 ldr r0, _0202C480 ; =FUN_0202C484 - blx FUN_020D9960 + blx WM_EndMP cmp r0, #0x2 beq _0202C47A bl FUN_0202C1AC @@ -83535,7 +83535,7 @@ _0202C4A2: FUN_0202C4A4: ; 0x0202C4A4 push {r3, lr} ldr r0, _0202C4BC ; =FUN_0202C4C0 - blx FUN_020D950C + blx WM_EndParent cmp r0, #0x2 beq _0202C4B8 bl FUN_0202C1AC @@ -83691,7 +83691,7 @@ _0202C5D4: .word 0x021C59D8 thumb_func_start FUN_0202C5D8 FUN_0202C5D8: ; 0x0202C5D8 push {r3-r7, lr} - blx FUN_020D8C3C + blx WM_GetAllowedChannel add r5, r0, #0x0 mov r0, #0x2 lsl r0, r0, #0xe @@ -83751,7 +83751,7 @@ _0202C64C: sub r0, #0x28 strh r2, [r3, r0] _0202C650: - blx FUN_020D8A4C + blx WM_GetDispersionScanPeriod ldr r2, _0202C684 ; =0x021C59D8 ldr r1, _0202C690 ; =0x000012E6 ldr r3, [r2, #0x4] @@ -83766,7 +83766,7 @@ _0202C650: sub r1, r1, #0x6 ldr r0, _0202C694 ; =FUN_0202C698 add r1, r2, r1 - blx FUN_020D940C + blx WM_StartScan cmp r0, #0x2 beq _0202C680 bl FUN_0202C1AC @@ -83910,7 +83910,7 @@ _0202C790: .word 0x00001310 FUN_0202C794: ; 0x0202C794 push {r3, lr} ldr r0, _0202C7AC ; =FUN_0202C7B0 - blx FUN_020D9244 + blx WM_EndScan cmp r0, #0x2 beq _0202C7A8 bl FUN_0202C1AC @@ -83984,7 +83984,7 @@ _0202C800: mov r3, #0x1 add r1, r2, r1 add r2, sp, #0x4 - blx FUN_020D9168 + blx WM_StartConnectEx cmp r0, #0x2 beq _0202C83E bl FUN_0202C1AC @@ -84109,7 +84109,7 @@ FUN_0202C908: ; 0x0202C908 ldr r0, _0202C954 ; =FUN_0202C958 lsr r2, r2, #0x10 add r3, r4, r3 - blx FUN_020D9B48 + blx WM_StartMP cmp r0, #0x2 beq _0202C942 bl FUN_0202C1AC @@ -84185,7 +84185,7 @@ FUN_0202C9BC: ; 0x0202C9BC mov r0, #0x3 bl FUN_0202C198 ldr r0, _0202C9DC ; =FUN_0202C9E0 - blx FUN_020D9960 + blx WM_EndMP cmp r0, #0x2 beq _0202C9D6 bl FUN_0202C1AC @@ -84223,7 +84223,7 @@ FUN_0202CA04: ; 0x0202CA04 bl FUN_0202C198 ldr r0, _0202CA28 ; =FUN_0202CA2C mov r1, #0x0 - blx FUN_020D9060 + blx WM_Disconnect cmp r0, #0x2 beq _0202CA24 bl FUN_0202C1AC @@ -84256,7 +84256,7 @@ FUN_0202CA44: ; 0x0202CA44 mov r0, #0x3 bl FUN_0202C198 ldr r0, _0202CA64 ; =FUN_0202CA68 - blx FUN_020D9774 + blx WM_Reset cmp r0, #0x2 beq _0202CA5E bl FUN_0202C1AC @@ -84312,7 +84312,7 @@ FUN_0202CA88: ; 0x0202CA88 ldr r0, _0202CADC ; =FUN_0202CAE0 add r2, r5, #0x0 add r3, r6, #0x0 - blx FUN_020D99EC + blx WM_SetMPDataToPortEx cmp r0, #0x2 bne _0202CACA add sp, #0xc @@ -84566,7 +84566,7 @@ _0202CC94: .word 0x00003039 FUN_0202CC98: ; 0x0202CC98 push {r4, lr} add r4, r0, #0x0 - blx FUN_020D8C3C + blx WM_GetAllowedChannel mov r1, #0x2 lsl r1, r1, #0xe cmp r0, r1 @@ -84693,7 +84693,7 @@ FUN_0202CD90: ; 0x0202CD90 str r1, [sp, #0x0] mov r1, #0x3 mov r2, #0x11 - blx FUN_020DADD4 + blx WM_MeasureChannel pop {r3, pc} .balign 4 @@ -84900,7 +84900,7 @@ FUN_0202CF0C: ; 0x0202CF0C ldr r0, [r0, #0x4] mov r2, #0x2 add r0, #0x40 - blx FUN_020D97B4 + blx WM_Initialize cmp r0, #0x2 beq _0202CF34 bl FUN_0202C1AC @@ -84929,7 +84929,7 @@ FUN_0202CF40: ; 0x0202CF40 pop {r3, pc} _0202CF5A: ldr r0, _0202CF80 ; =FUN_0202CEF4 - blx FUN_020D9014 + blx WM_SetIndCallback cmp r0, #0x0 beq _0202CF76 bl FUN_0202C1AC @@ -85102,7 +85102,7 @@ FUN_0202D0A0: ; 0x0202D0A0 ldr r1, _0202D0CC ; =FUN_0202CB08 lsr r0, r0, #0x10 mov r2, #0x0 - blx FUN_020D8F34 + blx WM_SetPortCallback cmp r0, #0x0 beq _0202D0C2 mov r0, #0x9 @@ -85210,7 +85210,7 @@ FUN_0202D178: ; 0x0202D178 mov r0, #0x3 bl FUN_0202C198 ldr r0, _0202D198 ; =FUN_0202CB50 - blx FUN_020D972C + blx WM_End cmp r0, #0x2 beq _0202D194 mov r0, #0x9 @@ -85344,7 +85344,7 @@ FUN_0202D240: ; 0x0202D240 add r1, r6, #0x0 lsr r2, r2, #0x10 add r3, r4, #0x0 - blx FUN_020DAF30 + blx WM_SetGameInfo _0202D26E: add sp, #0x8 pop {r4-r6, pc} @@ -85383,7 +85383,7 @@ FUN_0202D298: ; 0x0202D298 cmp r0, #0x4 bne _0202D2BE ldr r0, _0202D2CC ; =FUN_0202D27C - blx FUN_020DAD74 + blx WM_SetEntry cmp r0, #0x2 bne _0202D2BE mov r0, #0x1 @@ -89240,7 +89240,7 @@ _0202EEE4: .word 0x0000FFFF FUN_0202EEE8: ; 0x0202EEE8 push {r3-r5, lr} add r5, r0, #0x0 - blx FUN_020D8AF0 + blx WM_GetDispersionBeaconPeriod add r4, r0, #0x0 cmp r5, #0x1a blo _0202EEFA @@ -95249,7 +95249,7 @@ _02031D04: bl FUN_0202EDF8 cmp r0, #0x0 beq _02031D18 - blx FUN_020D8B94 + blx WM_GetLinkLevel mov r1, #0x3 sub r0, r1, r0 bl FUN_02033EEC @@ -101482,7 +101482,7 @@ FUN_02034CB4: ; 0x02034CB4 mov r1, #0x0 lsl r2, r2, #0x2 add r5, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 bl FUN_020347D8 cmp r0, #0x0 @@ -101614,7 +101614,7 @@ FUN_02034D98: ; 0x02034D98 add r4, r0, #0x0 mov r1, #0x0 mov r2, #0xa0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 add r0, #0x6c bl FUN_0204ADE0 @@ -103792,7 +103792,7 @@ FUN_02035E50: ; 0x02035E50 ldr r1, [r4, r1] mov r2, #0x40 add r6, r0, #0x0 - blx FUN_020DF438 + blx memcpy mov r0, #0x7e lsl r0, r0, #0x2 ldr r0, [r4, r0] @@ -104326,7 +104326,7 @@ FUN_020362E4: ; 0x020362E4 add r2, r0, #0x0 ldr r0, [sp, #0x8] ldr r1, [r4, r1] - blx FUN_020DF438 + blx memcpy mov r0, #0x7e lsl r0, r0, #0x2 ldr r0, [r4, r0] @@ -104390,7 +104390,7 @@ _0203638A: mov r1, #0x0 mov r2, #0x40 add r5, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [r6, #0xc] bl FUN_0206BB1C str r0, [r5, #0x0] @@ -104490,7 +104490,7 @@ _02036474: mov r1, #0x0 mov r2, #0x40 add r5, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [sp, #0x4] str r0, [r5, #0x0] ldr r0, [r6, #0xc] @@ -104964,7 +104964,7 @@ FUN_0203684C: ; 0x0203684C ldr r1, [r4, r1] mov r2, #0x30 add r7, r0, #0x0 - blx FUN_020DF438 + blx memcpy mov r0, #0x7e lsl r0, r0, #0x2 ldr r0, [r4, r0] @@ -104982,7 +104982,7 @@ FUN_0203684C: ; 0x0203684C str r1, [sp, #0x0] mov r1, #0x0 add r5, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [r6, #0xc] bl FUN_0206BB1C str r0, [r5, #0x0] @@ -105511,7 +105511,7 @@ FUN_02036CEC: ; 0x02036CEC mov r1, #0x0 mov r2, #0x40 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [r5, #0xc] bl FUN_0206BB1C str r0, [r4, #0x0] @@ -107569,7 +107569,7 @@ FUN_02037CF0: ; 0x02037CF0 mov r1, #0x0 mov r2, #0x30 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [r5, #0xc] bl FUN_0206BB1C str r0, [r4, #0x0] @@ -107970,7 +107970,7 @@ FUN_0203800C: ; 0x0203800C mov r1, #0x0 mov r2, #0x20 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r5, #0x0 bl FUN_0206BB1C add r1, r7, #0x0 @@ -109131,7 +109131,7 @@ _02038956: bl FUN_020127C0 mov r2, #0x3c mov r3, #0x0 - blx FUN_020EBA38 + blx _ll_sdiv add r3, r0, #0x0 ldr r1, [sp, #0x8] ldr r2, [r5, #0x0] diff --git a/asm/unk_02038C78.s b/asm/unk_02038C78.s index 5b3a52bf..785e5b48 100644 --- a/asm/unk_02038C78.s +++ b/asm/unk_02038C78.s @@ -224,7 +224,7 @@ _02038E32: add r0, r4, #0x0 mov r1, #0x0 mov r2, #0xdc - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, _02038E44 ; =0x0003643F str r0, [r4, #0x0] add r0, r4, #0x0 @@ -1187,7 +1187,7 @@ FUN_02039564: ; 0x02039564 bl FUN_02046380 mov r1, #0x0 mov r2, #0x40 - blx FUN_020DF4A4 + blx Call_FillMemWithValue pop {r4, pc} .balign 4 @@ -1540,14 +1540,14 @@ _020397EC: sub r1, r0, r1 mov r0, #0x7 sub r0, r0, r1 - blx FUN_020DE3F0 + blx abs strh r0, [r5, #0x0] ldr r1, [r4, #0x8] ldr r0, [sp, #0x14] sub r1, r0, r1 mov r0, #0x7 sub r0, r0, r1 - blx FUN_020DE3F0 + blx abs strh r0, [r5, #0x2] add r5, r5, #0x6 add r6, r6, #0x1 diff --git a/asm/unk_02046030.s b/asm/unk_02046030.s index dfeeba8a..7d95c5dd 100644 --- a/asm/unk_02046030.s +++ b/asm/unk_02046030.s @@ -298,13 +298,13 @@ FUN_02046294: ; 0x02046294 thumb_func_start FUN_0204629C FUN_0204629C: ; 0x0204629C - ldr r3, _020462A8 ; =FUN_020DF4A4 + ldr r3, _020462A8 ; =Call_FillMemWithValue mov r2, #0xeb mov r1, #0x0 lsl r2, r2, #0x2 bx r3 nop -_020462A8: .word FUN_020DF4A4 +_020462A8: .word Call_FillMemWithValue thumb_func_start FUN_020462AC FUN_020462AC: ; 0x020462AC @@ -4191,7 +4191,7 @@ _0204817A: add r0, r4, #0x0 mov r1, #0x0 mov r2, #0x24 - blx FUN_020DF4A4 + blx Call_FillMemWithValue mov r0, #0x0 str r0, [r4, #0x0] str r5, [r4, #0x4] @@ -10279,7 +10279,7 @@ FUN_0204B130: ; 0x0204B130 add r6, r0, #0x0 add r5, r1, #0x0 add r0, r2, #0x0 - blx FUN_020D660C + blx RTC_ConvertDateToDay ldr r1, [r5, #0x20] add r4, r0, #0x0 cmp r4, r1 @@ -10306,13 +10306,13 @@ FUN_0204B158: ; 0x0204B158 add r5, r1, #0x0 add r0, r4, #0x0 add r1, r6, #0x0 - blx FUN_020D6578 + blx RTC_ConvertDateTimeToSecond str r1, [sp, #0x8] add r1, r5, #0x0 add r7, r0, #0x0 add r0, r5, #0x4 add r1, #0x14 - blx FUN_020D6578 + blx RTC_ConvertDateTimeToSecond add r2, r1, #0x0 sub r1, r7, r0 ldr r1, [sp, #0x8] @@ -10337,7 +10337,7 @@ _0204B19C: mov r2, #0x3c mov r3, #0x0 str r1, [sp, #0x8] - blx FUN_020EBA38 + blx _ll_sdiv add r7, r0, #0x0 cmp r7, #0x0 ble _0204B1D8 @@ -10505,7 +10505,7 @@ FUN_0204B2F0: ; 0x0204B2F0 ldr r3, [r3, #0x28] add r0, r5, #0x0 add r1, r4, #0x0 - blx FUN_020D6320 + blx RTC_ConvertSecondToDateTime pop {r3-r5, pc} thumb_func_start FUN_0204B30C @@ -10520,7 +10520,7 @@ FUN_0204B30C: ; 0x0204B30C ldr r3, [r3, #0x30] add r0, r5, #0x0 add r1, r4, #0x0 - blx FUN_020D6320 + blx RTC_ConvertSecondToDateTime pop {r3-r5, pc} thumb_func_start FUN_0204B328 @@ -16246,10 +16246,10 @@ _0204DE98: b _0204DEEC _0204DEC2: ldr r0, [sp, #0x10] - blx FUN_020DE3F0 + blx abs add r6, r0, #0x0 add r0, r7, #0x0 - blx FUN_020DE3F0 + blx abs cmp r6, r0 ble _0204DEE2 ldr r0, [sp, #0x10] @@ -16269,9 +16269,9 @@ _0204DEEA: mov r6, #0x80 _0204DEEC: add r0, r7, #0x0 - blx FUN_020DE3F0 + blx abs ldr r0, [sp, #0x10] - blx FUN_020DE3F0 + blx abs ldrb r3, [r5, #0x5] add r0, r4, #0x0 add r1, r6, #0x0 @@ -31177,40 +31177,40 @@ FUN_02054F50: ; 0x02054F50 cmp r0, #0x0 beq _02054F8A lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 + blx _fadd b _02054F98 _02054F8A: lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 + blx _fsub _02054F98: - blx FUN_020EB4C0 + blx _ffix str r0, [r4, #0x4] add r0, sp, #0x8 ldrh r0, [r0, #0x14] cmp r0, #0x0 beq _02054FB8 lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 + blx _fadd b _02054FC6 _02054FB8: lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 + blx _fsub _02054FC6: - blx FUN_020EB4C0 + blx _ffix str r0, [r4, #0x8] strh r6, [r4, #0xc] strh r7, [r4, #0x10] @@ -31430,7 +31430,7 @@ _0205518E: add r0, r4, #0x0 mov r1, #0x0 mov r2, #0x3c - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 pop {r4, pc} @@ -36030,7 +36030,7 @@ _0205745A: add r0, r5, #0x0 mov r1, #0x0 lsl r2, r2, #0x2 - blx FUN_020DF4A4 + blx Call_FillMemWithValue mov r0, #0x4a lsl r0, r0, #0x2 add r6, r4, #0x0 @@ -36045,7 +36045,7 @@ _0205747E: add r0, r4, #0x0 mov r1, #0x0 add r2, r6, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r5, #0x0 add r1, r4, #0x0 bl FUN_020583B4 @@ -36489,7 +36489,7 @@ _02057846: add r0, r5, #0x0 mov r1, #0x0 mul r2, r4 - blx FUN_020DF4A4 + blx Call_FillMemWithValue _02057856: add sp, #0x8 pop {r3-r7, pc} @@ -36889,7 +36889,7 @@ _02057BD4: ldr r2, [sp, #0x4] add r0, r6, #0x0 add r1, r4, #0x0 - blx FUN_020DF438 + blx memcpy mov r0, #0xb mov r1, #0x14 bl FUN_020169D8 @@ -37306,13 +37306,13 @@ _02057F7C: .word 0x021F9080 thumb_func_start FUN_02057F80 FUN_02057F80: ; 0x02057F80 - ldr r3, _02057F8C ; =FUN_020DF4A4 + ldr r3, _02057F8C ; =Call_FillMemWithValue mov r2, #0x4a mov r1, #0x0 lsl r2, r2, #0x2 bx r3 nop -_02057F8C: .word FUN_020DF4A4 +_02057F8C: .word Call_FillMemWithValue thumb_func_start FUN_02057F90 FUN_02057F90: ; 0x02057F90 @@ -38313,7 +38313,7 @@ _0205859A: mov r1, #0x0 add r2, r5, #0x0 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 pop {r3-r5, pc} .balign 4 @@ -38337,7 +38337,7 @@ _020585C2: mov r1, #0x0 add r2, r5, #0x0 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 pop {r3-r5, pc} .balign 4 @@ -38361,7 +38361,7 @@ _020585EA: mov r1, #0x0 add r2, r5, #0x0 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 pop {r3-r5, pc} .balign 4 @@ -38385,7 +38385,7 @@ _02058612: mov r1, #0x0 add r2, r5, #0x0 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 pop {r3-r5, pc} .balign 4 @@ -47960,7 +47960,7 @@ _0205CA9A: add r0, r4, #0x0 mov r1, #0x0 mov r2, #0x2c - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [sp, #0x0] str r7, [r4, #0x8] str r0, [r4, #0xc] @@ -48724,7 +48724,7 @@ FUN_0205D024: ; 0x0205D024 mov r1, #0x0 mov r2, #0x40 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [r5, #0xc] bl FUN_0206BB1C str r0, [r4, #0x0] @@ -49207,7 +49207,7 @@ FUN_0205D400: ; 0x0205D400 mov r1, #0x0 mov r2, #0x40 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [r5, #0xc] bl FUN_0206BB1C str r0, [r4, #0x0] @@ -49574,7 +49574,7 @@ FUN_0205D6BC: ; 0x0205D6BC ldr r2, [sp, #0x0] mov r1, #0x0 add r7, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue mov r0, #0x72 ldr r1, _0205D710 ; =0x021F57F1 lsl r0, r0, #0x2 @@ -49938,7 +49938,7 @@ FUN_0205D9A8: ; 0x0205D9A8 mov r1, #0x0 mov r2, #0x40 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [r5, #0xc] bl FUN_0206BB1C str r0, [r4, #0x0] @@ -50170,7 +50170,7 @@ _0205DB9C: add r4, r0, #0x0 mov r1, #0x0 mov r2, #0x2c - blx FUN_020DF4A4 + blx Call_FillMemWithValue str r5, [r4, #0x0] ldr r0, [sp, #0x0] add r1, r4, #0x4 @@ -53977,7 +53977,7 @@ FUN_0205F7A0: ; 0x0205F7A0 add r0, r5, #0x0 mov r1, #0x0 lsl r2, r2, #0x6 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r0, [sp, #0x0] ldr r0, [r0, #0x38] bl FUN_02055320 @@ -55975,7 +55975,7 @@ FUN_02060790: ; 0x02060790 mov r1, #0x0 mov r2, #0x2c add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue mov r0, #0x0 str r0, [r4, #0x4] str r5, [r4, #0x0] @@ -63987,7 +63987,7 @@ _02064622: add r0, r4, #0x0 mov r1, #0x0 add r2, r5, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 pop {r3-r5, pc} @@ -64007,7 +64007,7 @@ FUN_02064640: ; 0x02064640 mov r1, #0x0 mov r2, #0xc8 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r1, _02064680 ; =FUN_0206478C add r0, r4, #0x0 bl FUN_020646B8 @@ -64166,7 +64166,7 @@ FUN_0206473C: ; 0x0206473C bl FUN_02064738 mov r1, #0x0 add r2, r4, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue pop {r4, pc} .balign 4 @@ -65347,7 +65347,7 @@ FUN_02065054: ; 0x02065054 ldr r2, _0206506C ; =0x0000066C mov r1, #0x0 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 pop {r4, pc} nop @@ -79377,7 +79377,7 @@ _0206B8DA: add r0, r5, #0x0 mov r1, #0x0 lsl r2, r2, #0x4 - blx FUN_020DF4A4 + blx Call_FillMemWithValue mov r4, #0x0 str r4, [r5, #0x4] str r6, [r5, #0x0] @@ -84720,7 +84720,7 @@ FUN_0206E2F0: ; 0x0206E2F0 mov r1, #0x0 mov r2, #0x78 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 pop {r4, pc} .balign 4 @@ -88378,7 +88378,7 @@ FUN_0206FD24: ; 0x0206FD24 add r0, r5, r0 add r1, #0x60 lsl r2, r2, #0x8 - blx FUN_020DF438 + blx memcpy mov r0, #0xc add r1, r4, #0x0 bl FUN_02016A8C @@ -88490,7 +88490,7 @@ FUN_0206FE74: ; 0x0206FE74 ldr r2, _0206FF50 ; =0x00000B38 mov r1, #0x0 add r6, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 bl FUN_0200628C ldr r1, _0206FF54 ; =0x000005A4 @@ -93303,14 +93303,14 @@ _020724FE: ldr r1, [sp, #0x0] add r0, r5, #0x0 mov r2, #0x20 - blx FUN_020DF438 + blx memcpy add r1, r4, #0x6 lsl r2, r1, #0x6 ldr r1, [sp, #0x4] add r0, r6, #0x0 add r1, r1, r2 mov r2, #0x20 - blx FUN_020DF438 + blx memcpy add r1, r4, #0x0 add r1, #0xc lsl r2, r1, #0x6 @@ -93318,7 +93318,7 @@ _020724FE: add r0, r7, #0x0 add r1, r1, r2 mov r2, #0x20 - blx FUN_020DF438 + blx memcpy ldr r0, [sp, #0x0] add r4, r4, #0x1 add r0, #0x40 @@ -97348,13 +97348,13 @@ _02074638: ldr r1, [sp, #0x14] add r0, r0, r5 add r1, r1, r7 - blx FUN_020DF438 + blx memcpy ldr r0, [sp, #0x1c] ldr r1, [sp, #0x10] add r0, r0, r5 add r1, r1, r7 mov r2, #0x20 - blx FUN_020DF438 + blx memcpy ldr r0, [sp, #0x4] mov r2, #0x20 add r0, r0, r4 @@ -97366,13 +97366,13 @@ _02074638: ldr r1, [sp, #0x14] add r0, r0, r5 add r1, r1, r7 - blx FUN_020DF438 + blx memcpy ldr r0, [sp, #0x24] ldr r1, [sp, #0x10] add r0, r0, r5 add r1, r1, r7 mov r2, #0x20 - blx FUN_020DF438 + blx memcpy add r0, r4, #0x1 lsl r0, r0, #0x10 lsr r4, r0, #0x10 @@ -102727,7 +102727,7 @@ _020772FE: mov r1, #0x0 lsl r2, r2, #0x4 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue mov r0, #0x12 bl FUN_02016B94 mov r1, #0x16 @@ -107924,7 +107924,7 @@ FUN_02079C7C: ; 0x02079C7C ldr r2, _02079DAC ; =0x0000069C mov r1, #0x0 add r5, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r4, #0x0 bl FUN_0200628C mov r1, #0x93 @@ -118682,43 +118682,43 @@ FUN_0207F48C: ; 0x0207F48C add r6, r2, #0x0 sub r7, r1, r0 add r0, r7, #0x0 - blx FUN_020EB534 + blx _fflt ldr r1, _0207F600 ; =0x45800000 - blx FUN_020EB084 + blx _fdiv ldr r1, _0207F604 ; =0x40800000 - blx FUN_020EB084 + blx _fdiv mov r1, #0x0 - blx FUN_020EAEF0 + blx _fgr bls _0207F4E0 add r0, r7, #0x0 - blx FUN_020EB534 + blx _fflt ldr r1, _0207F600 ; =0x45800000 - blx FUN_020EB084 + blx _fdiv ldr r1, _0207F604 ; =0x40800000 - blx FUN_020EB084 + blx _fdiv add r1, r0, #0x0 ldr r0, _0207F600 ; =0x45800000 - blx FUN_020EB5C4 + blx _fmul add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 - blx FUN_020EB4C0 + blx _fadd + blx _ffix b _0207F506 _0207F4E0: add r0, r7, #0x0 - blx FUN_020EB534 + blx _fflt ldr r1, _0207F600 ; =0x45800000 - blx FUN_020EB084 + blx _fdiv ldr r1, _0207F604 ; =0x40800000 - blx FUN_020EB084 + blx _fdiv add r1, r0, #0x0 ldr r0, _0207F600 ; =0x45800000 - blx FUN_020EB5C4 + blx _fmul mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 - blx FUN_020EB4C0 + blx _fsub + blx _ffix _0207F506: lsl r0, r0, #0x10 asr r0, r0, #0x10 @@ -118728,43 +118728,43 @@ _0207F506: ldrsh r0, [r5, r0] sub r7, r1, r0 add r0, r7, #0x0 - blx FUN_020EB534 + blx _fflt ldr r1, _0207F600 ; =0x45800000 - blx FUN_020EB084 + blx _fdiv ldr r1, _0207F604 ; =0x40800000 - blx FUN_020EB084 + blx _fdiv mov r1, #0x0 - blx FUN_020EAEF0 + blx _fgr bls _0207F558 add r0, r7, #0x0 - blx FUN_020EB534 + blx _fflt ldr r1, _0207F600 ; =0x45800000 - blx FUN_020EB084 + blx _fdiv ldr r1, _0207F604 ; =0x40800000 - blx FUN_020EB084 + blx _fdiv add r1, r0, #0x0 ldr r0, _0207F600 ; =0x45800000 - blx FUN_020EB5C4 + blx _fmul add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 - blx FUN_020EB4C0 + blx _fadd + blx _ffix b _0207F57E _0207F558: add r0, r7, #0x0 - blx FUN_020EB534 + blx _fflt ldr r1, _0207F600 ; =0x45800000 - blx FUN_020EB084 + blx _fdiv ldr r1, _0207F604 ; =0x40800000 - blx FUN_020EB084 + blx _fdiv add r1, r0, #0x0 ldr r0, _0207F600 ; =0x45800000 - blx FUN_020EB5C4 + blx _fmul mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 - blx FUN_020EB4C0 + blx _fsub + blx _ffix _0207F57E: lsl r0, r0, #0x10 asr r0, r0, #0x10 @@ -118774,43 +118774,43 @@ _0207F57E: ldrsh r0, [r5, r0] sub r4, r1, r0 add r0, r4, #0x0 - blx FUN_020EB534 + blx _fflt ldr r1, _0207F600 ; =0x45800000 - blx FUN_020EB084 + blx _fdiv ldr r1, _0207F604 ; =0x40800000 - blx FUN_020EB084 + blx _fdiv mov r1, #0x0 - blx FUN_020EAEF0 + blx _fgr bls _0207F5D0 add r0, r4, #0x0 - blx FUN_020EB534 + blx _fflt ldr r1, _0207F600 ; =0x45800000 - blx FUN_020EB084 + blx _fdiv ldr r1, _0207F604 ; =0x40800000 - blx FUN_020EB084 + blx _fdiv add r1, r0, #0x0 ldr r0, _0207F600 ; =0x45800000 - blx FUN_020EB5C4 + blx _fmul add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 - blx FUN_020EB4C0 + blx _fadd + blx _ffix b _0207F5F6 _0207F5D0: add r0, r4, #0x0 - blx FUN_020EB534 + blx _fflt ldr r1, _0207F600 ; =0x45800000 - blx FUN_020EB084 + blx _fdiv ldr r1, _0207F604 ; =0x40800000 - blx FUN_020EB084 + blx _fdiv add r1, r0, #0x0 ldr r0, _0207F600 ; =0x45800000 - blx FUN_020EB5C4 + blx _fmul mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 - blx FUN_020EB4C0 + blx _fsub + blx _ffix _0207F5F6: lsl r0, r0, #0x10 asr r0, r0, #0x10 @@ -127939,7 +127939,7 @@ FUN_02083BAC: ; 0x02083BAC ldr r0, [r4, r0] add r1, r6, #0x0 lsl r2, r2, #0x4 - blx FUN_020DF438 + blx memcpy ldr r0, [r4, #0x58] add r0, r0, #0x1 str r0, [r4, #0x58] @@ -128388,7 +128388,7 @@ _02083ED0: cmp r1, r0 bne _02083EFE bl FUN_0202CB8C - blx FUN_020DDC5C + blx MATH_CountPopulation mov r1, #0xc6 lsl r1, r1, #0x2 ldr r1, [r4, r1] @@ -128742,7 +128742,7 @@ _0208415E: cmp r1, r0 bne _02084186 bl FUN_0202CB8C - blx FUN_020DDC5C + blx MATH_CountPopulation ldr r1, _02084208 ; =0x00004A48 ldr r2, [r4, r1] cmp r2, r0 @@ -131946,7 +131946,7 @@ FUN_020859C0: ; 0x020859C0 ldr r2, _02085BA0 ; =0x0000042C mov r1, #0x0 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue bl FUN_0222E2BC mov r1, #0x23 lsl r1, r1, #0x4 @@ -132596,7 +132596,7 @@ _02085F5E: mov r1, #0x0 mov r2, #0x30 str r0, [r4, #0x8] - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r5, #0x0 bl LoadPlayerDataAddress ldr r1, [r4, #0x8] @@ -132609,7 +132609,7 @@ _02085F5E: mov r1, #0x0 mov r2, #0x40 str r0, [r4, #0xc] - blx FUN_020DF4A4 + blx Call_FillMemWithValue ldr r1, _02085FA8 ; =FUN_02085DA4 add r0, r6, #0x0 add r2, r4, #0x0 @@ -132752,7 +132752,7 @@ FUN_02086084: ; 0x02086084 mov r1, #0x0 mov r2, #0x80 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue add r0, r5, #0x0 bl FUN_0200628C str r0, [r4, #0x0] @@ -134325,7 +134325,7 @@ _02086DB4: bl FUN_0200C82C mov r0, #0x0 add r1, r7, #0x0 - blx FUN_020EB010 + blx _feq beq _02086DD2 ldr r0, [r6, #0x6c] ldr r2, [sp, #0x0] @@ -136992,22 +136992,22 @@ _0208826A: cmp r0, #0x5 beq _020882B8 ldrb r0, [r4, r0] - blx FUN_020EB57C + blx _ffltu add r1, r0, #0x0 ldr r0, _02088318 ; =0x3F8CCCCD - blx FUN_020EB5C4 - blx FUN_020EB4F4 + blx _fmul + blx _ffixu ldr r1, [sp, #0x4] strb r0, [r4, r1] add r4, sp, #0x8 ldr r0, [sp, #0x0] add r4, #0x1 ldrb r0, [r4, r0] - blx FUN_020EB57C + blx _ffltu add r1, r0, #0x0 ldr r0, _0208831C ; =0x3F666666 - blx FUN_020EB5C4 - blx FUN_020EB4F4 + blx _fmul + blx _ffixu ldr r1, [sp, #0x0] strb r0, [r4, r1] _020882B8: @@ -137365,59 +137365,59 @@ _020884D8: str r0, [sp, #0x44] beq _02088596 lsl r0, r7, #0xc - blx FUN_020EB534 + blx _fflt add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 + blx _fadd b _020885A4 _02088596: lsl r0, r7, #0xc - blx FUN_020EB534 + blx _fflt mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 + blx _fsub _020885A4: - blx FUN_020EB4C0 + blx _ffix str r0, [sp, #0x48] ldr r0, [sp, #0x30] cmp r0, #0x0 beq _020885C2 lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 + blx _fadd b _020885D0 _020885C2: lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 + blx _fsub _020885D0: - blx FUN_020EB4C0 + blx _ffix str r0, [sp, #0x4c] add r0, sp, #0x78 ldrh r0, [r0, #0x10] cmp r0, #0x0 beq _020885F0 lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt add r1, r0, #0x0 mov r0, #0x3f lsl r0, r0, #0x18 - blx FUN_020EA980 + blx _fadd b _020885FE _020885F0: lsl r0, r0, #0xc - blx FUN_020EB534 + blx _fflt mov r1, #0x3f lsl r1, r1, #0x18 - blx FUN_020EB7B0 + blx _fsub _020885FE: - blx FUN_020EB4C0 + blx _ffix str r0, [sp, #0x50] cmp r6, #0x2 bne _02088612 @@ -138221,7 +138221,7 @@ _02088BBA: add r2, r0, #0x0 ldr r1, [r4, #0x18] add r0, r5, #0x0 - blx FUN_020DF438 + blx memcpy ldr r0, [r4, #0x18] bl FUN_02016A18 mov r0, #0x0 @@ -139455,7 +139455,7 @@ FUN_02089498: ; 0x02089498 mov r1, #0x0 mov r2, #0x38 add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue mov r0, #0x58 str r0, [r4, #0x0] mov r0, #0x0 @@ -140031,7 +140031,7 @@ FUN_02089960: ; 0x02089960 mov r1, #0x0 mov r2, #0x3c add r4, r0, #0x0 - blx FUN_020DF4A4 + blx Call_FillMemWithValue mov r0, #0x58 str r0, [r4, #0x0] mov r0, #0x0 diff --git a/global.inc b/global.inc index dff8d688..622c7c7f 100644 --- a/global.inc +++ b/global.inc @@ -399,69 +399,69 @@ .extern PM_SetAmpGain .extern PM_SetAmp .extern PM_ForceToPowerOff -.extern FUN_020D526C -.extern FUN_020D5F40 +.extern PM_SetBackLight +.extern RTC_GetDateTimeAsync .extern FUNRTC_Init -.extern FUN_020D6320 -.extern FUN_020D6578 -.extern FUN_020D660C -.extern FUN_020D66A0 -.extern FUN_020D66B0 -.extern FUN_020D6700 -.extern FUN_020D6D7C -.extern FUN_020D6DAC -.extern FUN_020D6DB8 -.extern FUN_020D6DC4 -.extern FUN_020D6F20 +.extern RTC_ConvertSecondToDateTime +.extern RTC_ConvertDateTimeToSecond +.extern RTC_ConvertDateToDay +.extern CARD_UnlockBackup +.extern CARD_LockBackup +.extern CARD_GetResultCode +.extern CARD_CancelBackupAsync +.extern CARD_TryWaitBackupAsync +.extern CARD_WaitBackupAsync +.extern CARD_IdentifyBackup +.extern CARDi_RequestStreamCommand .extern CARD_Init .extern CARD_IsPulledOut -.extern FUN_020D7E9C -.extern FUN_020D8A4C -.extern FUN_020D8AF0 -.extern FUN_020D8B94 -.extern FUN_020D8C3C -.extern FUN_020D8F34 -.extern FUN_020D9014 -.extern FUN_020D9060 -.extern FUN_020D9168 -.extern FUN_020D9244 -.extern FUN_020D940C -.extern FUN_020D950C -.extern FUN_020D9554 -.extern FUN_020D9624 -.extern FUN_020D972C -.extern FUN_020D9774 -.extern FUN_020D97B4 -.extern FUN_020D9960 -.extern FUN_020D99EC -.extern FUN_020D9B48 -.extern FUN_020DAD74 -.extern FUN_020DADD4 -.extern FUN_020DAF30 -.extern FUN_020DB7A8 -.extern FUN_020DDC5C -.extern FUN_020DDCE4 -.extern FUN_020DDD28 -.extern FUN_020DDD60 -.extern FUN_020DDE44 -.extern FUN_020DDF60 -.extern FUN_020DE3F0 -.extern FUN_020DF438 -.extern FUN_020DF4A4 -.extern FUN_020DF510 -.extern FUN_020E2EAC -.extern FUN_020E2EC8 -.extern FUN_020EA980 -.extern FUN_020EAEF0 -.extern FUN_020EB010 -.extern FUN_020EB084 -.extern FUN_020EB4C0 -.extern FUN_020EB4F4 -.extern FUN_020EB534 -.extern FUN_020EB57C -.extern FUN_020EB5C4 -.extern FUN_020EB7B0 -.extern FUN_020EBA38 +.extern WMi_GetStatusAddress +.extern WM_GetDispersionScanPeriod +.extern WM_GetDispersionBeaconPeriod +.extern WM_GetLinkLevel +.extern WM_GetAllowedChannel +.extern WM_SetPortCallback +.extern WM_SetIndCallback +.extern WM_Disconnect +.extern WM_StartConnectEx +.extern WM_EndScan +.extern WM_StartScan +.extern WM_EndParent +.extern WM_StartParent +.extern WM_SetParentParameter +.extern WM_End +.extern WM_Reset +.extern WM_Initialize +.extern WM_EndMP +.extern WM_SetMPDataToPortEx +.extern WM_StartMP +.extern WM_SetEntry +.extern WM_MeasureChannel +.extern WM_SetGameInfo +.extern CTRDG_IsPulledOut +.extern MATH_CountPopulation +.extern MATH_CalcMD5 +.extern MATH_CalcCRC32 +.extern MATH_CalcCRC16CCITT +.extern MATHi_CRC32InitTableRev +.extern MATHi_CRC16InitTable +.extern abs +.extern memcpy +.extern Call_FillMemWithValue +.extern memcmp +.extern strlen +.extern strcpy +.extern _fadd +.extern _fgr +.extern _feq +.extern _fdiv +.extern _ffix +.extern _ffixu +.extern _fflt +.extern _ffltu +.extern _fmul +.extern _fsub +.extern _ll_sdiv .extern _ll_udiv .extern _ll_mul .extern _ll_shl diff --git a/undefined_syms.txt b/undefined_syms.txt index 7aa125b8..9282ff4a 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -290,84 +290,6 @@ FUN_020C9418 = 0x020C9418; FUN_020C9480 = 0x020C9480; FUN_020C94E8 = 0x020C94E8; FUN_020C9550 = 0x020C9550; -OS_SpinWait = 0x020CD380; -PM_SetAmpGain = 0x020D5150; -FUN_020D526C = 0x020D526C; -PMi_SetLED = 0x020D5338; -PMi_SetLEDAsync = 0x020D5374; -PMi_ReadRegister = 0x020D5498; -PMi_SendSleepStart = 0x020D55C0; -PM_Init = 0x020D5764; -PMi_WaitBusy = 0x020D5884; -PMi_Lock = 0x020D58C4; -FUN_020D5F40 = 0x020D5F40; -FUNRTC_Init = 0x020D614C; -FUN_020D6320 = 0x020D6320; -FUN_020D6578 = 0x020D6578; -FUN_020D660C = 0x020D660C; -FUN_020D66A0 = 0x020D66A0; -FUN_020D66B0 = 0x020D66B0; -CARD_UnlockRom = 0x020D66C0; -CARD_LockRom = 0x020D66E0; -FUN_020D6700 = 0x020D6700; -FUN_020D6D7C = 0x020D6D7C; -FUN_020D6DAC = 0x020D6DAC; -FUN_020D6DB8 = 0x020D6DB8; -FUN_020D6DC4 = 0x020D6DC4; -FUN_020D6F20 = 0x020D6F20; -CARD_Init = 0x020D7228; -CARDi_ReadRom = 0x020D72AC; -CARD_IsPulledOut = 0x020D7D18; -FUN_020D7E9C = 0x020D7E9C; -FUN_020D8A4C = 0x020D8A4C; -FUN_020D8AF0 = 0x020D8AF0; -FUN_020D8B94 = 0x020D8B94; -FUN_020D8C3C = 0x020D8C3C; -FUN_020D8F34 = 0x020D8F34; -FUN_020D9014 = 0x020D9014; -FUN_020D9060 = 0x020D9060; -FUN_020D9168 = 0x020D9168; -FUN_020D9244 = 0x020D9244; -FUN_020D940C = 0x020D940C; -FUN_020D950C = 0x020D950C; -FUN_020D9554 = 0x020D9554; -FUN_020D9624 = 0x020D9624; -FUN_020D972C = 0x020D972C; -FUN_020D9774 = 0x020D9774; -FUN_020D97B4 = 0x020D97B4; -FUN_020D9960 = 0x020D9960; -FUN_020D99EC = 0x020D99EC; -FUN_020D9B48 = 0x020D9B48; -FUN_020DAD74 = 0x020DAD74; -FUN_020DADD4 = 0x020DADD4; -FUN_020DAF30 = 0x020DAF30; -CTRDG_IsExisting = 0x020DB68C; -FUN_020DB7A8 = 0x020DB7A8; -CTRDG_Init = 0x020DBC80; -FUN_020DDC5C = 0x020DDC5C; -FUN_020DDCE4 = 0x020DDCE4; -FUN_020DDD28 = 0x020DDD28; -FUN_020DDD60 = 0x020DDD60; -FUN_020DDE44 = 0x020DDE44; -FUN_020DDF60 = 0x020DDF60; -FUN_020DE3F0 = 0x020DE3F0; -FUN_020DF438 = 0x020DF438; -FUN_020DF4A4 = 0x020DF4A4; -FUN_020DF510 = 0x020DF510; -FUN_020E2EAC = 0x020E2EAC; -FUN_020E2EC8 = 0x020E2EC8; -FUN_020EA980 = 0x020EA980; -FUN_020EAEF0 = 0x020EAEF0; -FUN_020EB010 = 0x020EB010; -FUN_020EB084 = 0x020EB084; -FUN_020EB4C0 = 0x020EB4C0; -FUN_020EB4F4 = 0x020EB4F4; -FUN_020EB534 = 0x020EB534; -FUN_020EB57C = 0x020EB57C; -FUN_020EB5C4 = 0x020EB5C4; -FUN_020EB7B0 = 0x020EB7B0; -FUN_020EBA38 = 0x020EBA38; -_ll_udiv = 0x020EBBE8; gBacklightTop = 0x02106FA0; gBacklightTop_2 = 0x02106FA0; gUnknown2106FB8 = 0x02106FB8; -- cgit v1.2.3 From c82509b9517c9135474f2994dbb92f1da2736e49 Mon Sep 17 00:00:00 2001 From: Demki Date: Thu, 23 Apr 2020 17:19:18 +0300 Subject: indented macro invokes --- asm/STD_arm9.s | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/asm/STD_arm9.s b/asm/STD_arm9.s index e25cc0c5..b38ac8e4 100644 --- a/asm/STD_arm9.s +++ b/asm/STD_arm9.s @@ -226,7 +226,7 @@ nan: ; 0x020DE2E4 _020DE2F4: .word 0x02106B78 _020DE2F8: .word _f2d -arm_func_start __flush_line_buffered_output_files + arm_func_start __flush_line_buffered_output_files __flush_line_buffered_output_files: stmdb sp!, {r3-r9,lr} ldr r0, _020DE384 ; =0x02106A58 @@ -328,15 +328,15 @@ __msl_assertion_failed: ; 0x020DE3FC .balign 4 _020DE434: .word 0x02106B3C -arm_func_start __convert_from_newlines + arm_func_start __convert_from_newlines __convert_from_newlines: bx lr -arm_func_start __convert_to_newlines + arm_func_start __convert_to_newlines __convert_to_newlines: bx lr -arm_func_start __prep_buffer + arm_func_start __prep_buffer __prep_buffer: ldr r1, [r0, #0x1c] str r1, [r0, #0x24] @@ -351,7 +351,7 @@ __prep_buffer: str r1, [r0, #0x34] bx lr -arm_func_start __load_buffer + arm_func_start __load_buffer __load_buffer: stmdb sp!, {r4-r6,lr} mov r5, r2 @@ -391,7 +391,7 @@ _020DE4F4: mov r0, #0x0 ldmia sp!, {r4-r6,pc} -arm_func_start __flush_buffer + arm_func_start __flush_buffer __flush_buffer: stmdb sp!, {r3-r5,lr} mov r5, r0 @@ -744,7 +744,7 @@ _020DE9C4: add sp, sp, #0x4 ldmia sp!, {r3-r10,pc} -arm_func_start __fwrite + arm_func_start __fwrite __fwrite: stmdb sp!, {r3-r11,lr} sub sp, sp, #0x8 @@ -971,7 +971,7 @@ _020DECE8: ; 0x020DECE8 rsb r0, r2, #0x0 ldmia sp!, {r3-r5,pc} -arm_func_start fflush + arm_func_start fflush fflush: stmdb sp!, {r4,lr} movs r4, r0 @@ -1293,7 +1293,7 @@ _020DF150: .balign 4 _020DF160: .word 0x021D74A8 -arm_func_start fseek + arm_func_start fseek fseek: stmdb sp!, {r3-r9,lr} ldr r3, _020DF274 ; =0x02106A58 @@ -1391,7 +1391,7 @@ _020DF2A8: ; 0x020DF2A8 strb r0, [r4, #0xd] ldmia sp!, {r4,pc} -arm_func_start mbtowc + arm_func_start mbtowc mbtowc: stmdb sp!, {r3,lr} ldr r3, _020DF2CC ; =0x02106C98 @@ -1480,7 +1480,7 @@ _020DF3B8: mov r0, r4 ldmia sp!, {r4-r8,pc} -arm_func_start wcstombs + arm_func_start wcstombs wcstombs: stmdb sp!, {r3-r9,lr} movs r4, r0 @@ -1561,7 +1561,7 @@ Call_FillMemWithValue: ; 0x020DF4A4 mov r0, r4 ldmia sp!, {r4,pc} -arm_func_start memchr + arm_func_start memchr memchr: cmp r2, #0x0 and r3, r1, #0xff @@ -3432,7 +3432,7 @@ _020E0E14: .word 0x02106DD0 _020E0E18: .word 0x02106DD4 _020E0E1C: .word 0x66666667 -arm_func_start __pformatter + arm_func_start __pformatter __pformatter: stmdb sp!, {r0-r3} stmdb sp!, {r4-r11,lr} @@ -7733,7 +7733,7 @@ atod: ; 0x020E463C .balign 4 _020E4648: .word strtold -arm_func_start __strtoul + arm_func_start __strtoul __strtoul: stmdb sp!, {r4-r11,lr} sub sp, sp, #0xc @@ -8469,7 +8469,7 @@ atol: ; 0x020E4FE0 .balign 4 _020E4FF0: .word strtold2 -arm_func_start fwide + arm_func_start fwide fwide: cmp r0, #0x0 beq _020E500C @@ -8515,7 +8515,7 @@ wmemcpy: ; 0x020E5068 .balign 4 _020E5074: .word memcpy -arm_func_start wmemchr + arm_func_start wmemchr wmemchr: cmp r2, #0x0 beq _020E5098 @@ -10128,7 +10128,7 @@ _020E6648: .word 0x02106E30 _020E664C: .word 0x02106E38 _020E6650: .word 0x66666667 -arm_func_start __wpformatter + arm_func_start __wpformatter __wpformatter: stmdb sp!, {r0-r3} stmdb sp!, {r3-r11,lr} @@ -12909,7 +12909,7 @@ _020E8CD0: .word 0x02106F50 _020E8CD4: .word 0x02106F54 _020E8CD8: .word 0x02106F58 -arm_func_start __equals_dec + arm_func_start __equals_dec __equals_dec: stmdb sp!, {r4,lr} ldrb r3, [r0, #0x5] @@ -12977,7 +12977,7 @@ _020E8DB4: mov r0, #0x0 ldmia sp!, {r4,pc} -arm_func_start __less_dec + arm_func_start __less_dec __less_dec: stmdb sp!, {r3-r5,lr} ldrb r2, [r0, #0x5] @@ -13243,7 +13243,7 @@ _020E9130: strb r1, [r0, #0x4] ldmia sp!, {r3-r7,pc} -arm_func_start __num2dec_internal + arm_func_start __num2dec_internal __num2dec_internal: stmdb sp!, {r4-r8,lr} sub sp, sp, #0x58 @@ -13873,7 +13873,7 @@ _020E9A14: .word 0x55555555 _020E9A18: .word 0x33333333 _020E9A1C: .word 0x0F0F0F0F -arm_func_start __signbitf + arm_func_start __signbitf __signbitf: stmdb sp!, {r0-r3} ldr r0, [sp, #0x4] @@ -13971,7 +13971,7 @@ strnicmp: ; 0x020E9B38 .balign 4 _020E9B40: .word stricmp -arm_func_start _dadd + arm_func_start _dadd _dadd: stmdb sp!, {r4,lr} eors r12, r1, r3 @@ -14194,7 +14194,7 @@ _020E9E38: .balign 4 _020E9E58: .word 0x7FF00000 -arm_func_start _d2f + arm_func_start _d2f _d2f: and r2, r1, #0x80000000 mov r12, r1, lsr #0x14 @@ -14743,7 +14743,7 @@ _drsb: ; 0x020EA5B4 eor r2, r0, r2 eor r0, r0, r2 -arm_func_start _dsub + arm_func_start _dsub _dsub: stmdb sp!, {r4,lr} eors r12, r1, r3 @@ -15761,7 +15761,7 @@ _020EB430: ldmia sp!, {lr} bx lr -arm_func_start _f2d + arm_func_start _f2d _f2d: and r2, r0, #0x80000000 mov r12, r0, lsr #0x17 -- cgit v1.2.3