From 4462b430834cb9fc64eb118e79766e2129be7d65 Mon Sep 17 00:00:00 2001 From: Demki Date: Tue, 21 Apr 2020 18:11:57 +0300 Subject: [PATCH 01/23] initial disassembly of rom2.s --- asm/entry.s | 4 +- asm/rom2.s | 130 +- asm/secure.s | 10 +- asm/{FUN_020C9C0C.s => unk_020C9C0C.s} | 8 +- asm/unk_020D5150.s | 21374 +++++++++++++++++++++++ global.inc | 44 +- pokediamond.lcf | 5 +- undefined_syms.txt | 1 + 8 files changed, 21439 insertions(+), 137 deletions(-) rename asm/{FUN_020C9C0C.s => unk_020C9C0C.s} (99%) create mode 100644 asm/unk_020D5150.s diff --git a/asm/entry.s b/asm/entry.s index b0f1c3400..6d7e0c179 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 46e545606..d21fb89d5 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 18313c938..8bfb7ede0 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/FUN_020C9C0C.s b/asm/unk_020C9C0C.s similarity index 99% rename from asm/FUN_020C9C0C.s rename to asm/unk_020C9C0C.s index b103a702b..b5fab5650 100644 --- a/asm/FUN_020C9C0C.s +++ b/asm/unk_020C9C0C.s @@ -3,8 +3,6 @@ .text - - arm_func_start OS_WaitIrq OS_WaitIrq: stmdb sp!, {r4-r6,lr} @@ -4344,9 +4342,11 @@ OS_GetProcMode: ; 0x020CD374 mrs r0, cpsr and r0, r0, #0x1f bx lr -_020CD380: + + arm_func_start OS_SpinWait +OS_SpinWait: subs r0, r0, #0x4 - bhs _020CD380 + bhs OS_SpinWait bx lr arm_func_start OS_WaitVBlankIntr diff --git a/asm/unk_020D5150.s b/asm/unk_020D5150.s new file mode 100644 index 000000000..ed1fb8b68 --- /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 ffc62ba73..dfb91f394 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 23e82fa54..b3c98bb93 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 bffce0563..a5a51eb56 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; From 43e674c12c84bbfa97c06ee95d6d9a0ac1f5cda7 Mon Sep 17 00:00:00 2001 From: Demki Date: Thu, 23 Apr 2020 02:47:50 +0300 Subject: [PATCH 02/23] 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/{unk_020D5150.s => rom2dism.s} | 4840 ---------------------------- asm/unk_02000E0C.s | 2 +- asm/unk_020023C0.s | 4 +- asm/unk_020C9C0C.s | 503 --- global.inc | 16 +- pokediamond.lcf | 6 +- undefined_syms.txt | 4 +- 11 files changed, 7701 insertions(+), 5353 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 rename asm/{unk_020D5150.s => rom2dism.s} (72%) diff --git a/asm/CARD_arm9.s b/asm/CARD_arm9.s new file mode 100644 index 000000000..9756ce4bb --- /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 000000000..0e654689c --- /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 000000000..e6f5b4eed --- /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 000000000..0e5eb0c5f --- /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/unk_020D5150.s b/asm/rom2dism.s similarity index 72% rename from asm/unk_020D5150.s rename to asm/rom2dism.s index ed1fb8b68..051a235d5 100644 --- a/asm/unk_020D5150.s +++ b/asm/rom2dism.s @@ -5,4846 +5,6 @@ .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} diff --git a/asm/unk_02000E0C.s b/asm/unk_02000E0C.s index 506ff81a0..93c07623e 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 6bcd42adc..ab564a3f0 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 b5fab5650..c6cdac463 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/global.inc b/global.inc index dfb91f394..d20893e32 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 b3c98bb93..bfbb2669c 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 a5a51eb56..d5641e7f3 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; From 0a26578d1a34ebb557d8704b90beec7874d146f0 Mon Sep 17 00:00:00 2001 From: Demki Date: Thu, 23 Apr 2020 03:37:04 +0300 Subject: [PATCH 03/23] 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 000000000..025923883 --- /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 000000000..3b384077a --- /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 051a235d5..7994c2ed7 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 d20893e32..7eb609960 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 bfbb2669c..840d581c7 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) From 1750bfd8497b314cf7ac24d8221ac936a9cfa9c6 Mon Sep 17 00:00:00 2001 From: Demki Date: Thu, 23 Apr 2020 14:07:39 +0300 Subject: [PATCH 04/23] dism STD --- asm/{rom2dism.s => STD_arm9.s} | 6108 +++++++++++++++++++++++++------- global.inc | 3 + pokediamond.lcf | 2 +- 3 files changed, 4902 insertions(+), 1211 deletions(-) rename asm/{rom2dism.s => STD_arm9.s} (67%) diff --git a/asm/rom2dism.s b/asm/STD_arm9.s similarity index 67% rename from asm/rom2dism.s rename to asm/STD_arm9.s index 7994c2ed7..e25cc0c58 100644 --- a/asm/rom2dism.s +++ b/asm/STD_arm9.s @@ -1,8 +1,6 @@ .include "asm/macros.inc" .include "global.inc" - ; TODO: disassemble the rest of the .byte s - .text arm_func_start STD_CompareNString @@ -116,7 +114,7 @@ exit: ; 0x020DE170 ldr r0, [r1, #0xc] cmp r0, #0x0 bne _020DE1AC - bl __destroy_global_chain + bl __destroy_global_chain ldr r0, _020DE1B8 ; =0x021D6F78 ldr r0, [r0, #0x4] cmp r0, #0x0 @@ -137,28 +135,86 @@ __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 +_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: - .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0x78, 0x6F, 0x1D, 0x02 - .byte 0x88, 0x6F, 0x1D, 0x02 +_020DE2D0: .word 0x021D3498 +_020DE2D4: .word 0x021D7088 +_020DE2D8: .word 0x021D70AC +_020DE2DC: .word 0x021D6F78 +_020DE2E0: .word 0x021D6F88 arm_func_start nan nan: ; 0x020DE2E4 @@ -170,8 +226,8 @@ nan: ; 0x020DE2E4 _020DE2F4: .word 0x02106B78 _020DE2F8: .word _f2d - arm_func_start __flush_line_buffered_output_files -__flush_line_buffered_output_files: ; 0x020DE2FC +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 @@ -195,8 +251,9 @@ _020DE31C: cmp r1, #0x1 bne _020DE35C bl fflush -_020DE354: - .byte 0x00, 0x00, 0x50, 0xE3, 0x09, 0x40, 0xA0, 0x11 +_020DE354: ; 0x020DE354 + cmp r0, #0x0 + movne r4, r9 _020DE35C: cmp r5, #0x3 movge r0, r7 @@ -228,9 +285,9 @@ _020DE3A8: movs r1, r1, lsr #0x1d beq _020DE3C4 bl fflush -_020DE3BC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x09, 0x40, 0xA0, 0x11 +_020DE3BC: ; 0x020DE3BC + cmp r0, #0x0 + movne r4, r9 _020DE3C4: cmp r5, #0x3 movge r0, r7 @@ -270,12 +327,16 @@ __msl_assertion_failed: ; 0x020DE3FC 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: ; 0x020DE43C +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] @@ -290,8 +351,8 @@ __prep_buffer: str r1, [r0, #0x34] bx lr - arm_func_start __load_buffer -__load_buffer: ; 0x020DE470 +arm_func_start __load_buffer +__load_buffer: stmdb sp!, {r4-r6,lr} mov r5, r2 mov r4, r0 @@ -314,11 +375,23 @@ __load_buffer: ; 0x020DE470 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 +_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 @@ -347,15 +420,17 @@ _020DE538: 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 +_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: - .byte 0x00, 0x00, 0xA0, 0xE3 - .byte 0x38, 0x80, 0xBD, 0xE8 +_020DE57C: ; 0x020DE57C + mov r0, #0x0 + ldmia sp!, {r3-r5,pc} arm_func_start fread fread: ; 0x020DE584 @@ -373,24 +448,65 @@ fread: ; 0x020DE584 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 +_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: - .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 +_020DE684: .word 0x021D3498 +_020DE688: .word 0x021D7088 +_020DE68C: .word 0x021D70AC arm_func_start __fread __fread: ; 0x020DE690 @@ -403,58 +519,232 @@ __fread: ; 0x020DE690 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 +_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 @@ -465,49 +755,186 @@ __fwrite: 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 +_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 @@ -515,16 +942,36 @@ fclose: ; 0x020DEC88 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 +_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 +arm_func_start fflush fflush: stmdb sp!, {r4,lr} movs r4, r0 @@ -548,18 +995,49 @@ _020DED34: 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 +_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 @@ -620,25 +1098,64 @@ _020DEE98: 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 +_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: - .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 +_020DEF70: .word 0x021D3498 +_020DEF74: .word 0x021D7088 +_020DEF78: .word 0x021D70AC arm_func_start _fseek _fseek: ; 0x020DEF7C @@ -669,11 +1186,20 @@ _020DEFC8: 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 +_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 @@ -767,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 @@ -791,26 +1317,66 @@ _020DF1A4: 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 +_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: - .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 +_020DF284: .word 0x021D3498 +_020DF288: .word 0x021D7088 +_020DF28C: .word 0x021D70AC arm_func_start rewind rewind: ; 0x020DF290 @@ -820,11 +1386,12 @@ rewind: ; 0x020DF290 mov r2, r1 strb r1, [r4, #0xd] bl fseek -_020DF2A8: - .byte 0x00, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC4, 0xE5 - .byte 0x10, 0x80, 0xBD, 0xE8 +_020DF2A8: ; 0x020DF2A8 + mov r0, #0x0 + 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 @@ -885,6 +1452,7 @@ mbstowcs: ; 0x020DF338 beq _020DF3B8 cmp r6, #0x0 bls _020DF3B8 +_020DF368: ldrsb r0, [r7, #0x0] cmp r0, #0x0 beq _020DF3A0 @@ -892,22 +1460,28 @@ mbstowcs: ; 0x020DF338 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 +_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: - .byte 0x01, 0x40, 0x84, 0xE2 - .byte 0x06, 0x00, 0x54, 0xE1, 0xEB, 0xFF, 0xFF, 0x3A + add r4, r4, #0x1 + cmp r4, r6 + blo _020DF368 _020DF3B8: mov r0, r4 ldmia sp!, {r4-r8,pc} - arm_func_start wcstombs -wcstombs: ; 0x020DF3C0 +arm_func_start wcstombs +wcstombs: stmdb sp!, {r3-r9,lr} movs r4, r0 mov r9, r1 @@ -916,13 +1490,31 @@ wcstombs: ; 0x020DF3C0 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 +_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 @@ -969,8 +1561,8 @@ Call_FillMemWithValue: ; 0x020DF4A4 mov r0, r4 ldmia sp!, {r4,pc} - arm_func_start memchr -memchr: ; 0x020DF4B8 +arm_func_start memchr +memchr: cmp r2, #0x0 and r3, r1, #0xff beq _020DF4DC @@ -1329,10 +1921,20 @@ _020DF920: 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 +_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 @@ -1348,12 +1950,47 @@ _020DF984: 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 + 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 @@ -1371,10 +2008,20 @@ _020DF9E8: 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 + 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 @@ -1391,14 +2038,36 @@ _020DFA5C: 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 + 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 @@ -1412,10 +2081,21 @@ _020DFB04: 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 + 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] @@ -1508,11 +2188,11 @@ _020DFC8C: _020DFC94: mov r0, r10 mov r1, r4 - bl _u32_div_f + bl _u32_div_f mov r9, r1 mov r0, r10 mov r1, r4 - bl _u32_div_f + bl _u32_div_f cmp r9, #0xa mov r10, r0 addlt r9, r9, #0x30 @@ -2138,6 +2818,7 @@ round_decimal: ; 0x020E0598 stmdb sp!, {r4,lr} cmp r1, #0x0 bge _020E05C0 +_020E05A4: mov r1, #0x0 strh r1, [r0, #0x2] mov r1, #0x1 @@ -2149,23 +2830,77 @@ _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 +_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 @@ -2696,6 +3431,8 @@ _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} @@ -2759,10 +3496,20 @@ _020E0ED4: 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 +_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 @@ -2777,12 +3524,42 @@ _020E0F40: 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 +_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 @@ -2796,26 +3573,94 @@ _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 + 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 @@ -2905,14 +3750,33 @@ _020E122C: 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 + 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 @@ -2942,28 +3806,112 @@ _020E12C8: 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 + 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 @@ -3088,6 +4036,7 @@ _020E15DC: blt _020E15DC _020E1618: add r10, r10, r4 +_020E161C: ldrsb r0, [r11, #0x0] cmp r0, #0x0 bne _020E0E50 @@ -3097,9 +4046,9 @@ _020E1628: ldmia sp!, {r4-r11,lr} add sp, sp, #0x10 bx lr -_020E163C: - .byte 0xD8, 0x6D, 0x10, 0x02 - .byte 0xDC, 0x6D, 0x10, 0x02 + .balign 4 +_020E163C: .word 0x02106DD8 +_020E1640: .word 0x02106DDC arm_func_start __FileWrite __FileWrite: ; 0x020E1644 @@ -3110,8 +4059,11 @@ __FileWrite: ; 0x020E1644 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 +_020E1660: ; 0x020E1660 + cmp r4, r0 + movne r5, #0x0 + mov r0, r5 + ldmia sp!, {r3-r5,pc} arm_func_start __StringWrite __StringWrite: ; 0x020E1670 @@ -3140,27 +4092,78 @@ printf: ; 0x020E16B4 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 +_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: - .byte 0x18, 0x71, 0x1D, 0x02, 0x98, 0x34, 0x1D, 0x02 - .byte 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0x44, 0x16, 0x0E, 0x02 +_020E17B8: .word 0x021D7118 +_020E17BC: .word 0x021D3498 +_020E17C0: .word 0x021D7088 +_020E17C4: .word 0x021D70AC +_020E17C8: .word __FileWrite arm_func_start vsnprintf vsnprintf: ; 0x020E17CC @@ -3175,11 +4178,24 @@ vsnprintf: ; 0x020E17CC 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 +_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 @@ -3220,28 +4236,98 @@ qsort: ; 0x020E1888 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 +_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 @@ -3433,10 +4519,20 @@ _020E1C3C: 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 +_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 @@ -3452,12 +4548,49 @@ _020E1CA0: 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 + 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 @@ -3483,15 +4616,44 @@ _020E1D48: 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 + 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 @@ -3753,10 +4915,20 @@ _020E2158: 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 +_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 @@ -3771,13 +4943,50 @@ _020E21B0: 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 +_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 @@ -3786,41 +4995,169 @@ _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 + 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 @@ -3895,15 +5232,56 @@ _020E2538: 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 + 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 @@ -3941,8 +5319,8 @@ _020E261C: ldr r0, _020E2C78 ; =0x02106B78 ldr r0, [r0, #0x0] bl _f2d -_020E2660: - .byte 0x00, 0x00, 0x00, 0xEA +_020E2660: ; 0x020E2660 + b _020E2668 _020E2664: add r4, r4, r2 _020E2668: @@ -3958,8 +5336,9 @@ _020E2668: b _020E26A0 _020E2690: bl _d2f -_020E2694: - .byte 0x00, 0x00, 0x85, 0xE5, 0x00, 0x00, 0x00, 0xEA +_020E2694: ; 0x020E2694 + str r0, [r5, #0x0] + b _020E26A0 _020E269C: stmia r5, {r0-r1} _020E26A0: @@ -3974,34 +5353,130 @@ _020E26B4: 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 + 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 @@ -4045,15 +5520,42 @@ _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 + 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 @@ -4217,13 +5719,44 @@ _020E2BB8: 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 + 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] @@ -4343,27 +5876,81 @@ _020E2D94: _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 +_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: - .byte 0x98, 0x34, 0x1D, 0x02 - .byte 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0xAC, 0x74, 0x1D, 0x02 +_020E2E9C: .word 0x021D3498 +_020E2EA0: .word 0x021D7088 +_020E2EA4: .word 0x021D70AC +_020E2EA8: .word 0x021D74AC arm_func_start strlen strlen: ; 0x020E2EAC @@ -4390,10 +5977,20 @@ strcpy: ; 0x020E2EC8 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 +_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 @@ -4419,8 +6016,12 @@ _020E2F64: 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 + 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 @@ -4431,10 +6032,25 @@ strncpy: ; 0x020E2F90 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 + 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 @@ -4487,24 +6103,83 @@ strcmp: ; 0x020E3060 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 +_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 @@ -4607,13 +6282,34 @@ strstr: ; 0x020E32A4 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 +_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 @@ -4697,10 +6393,24 @@ _020E3418: 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 +_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 @@ -4736,25 +6446,91 @@ _020E34C8: 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 + 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 @@ -4948,10 +6724,11 @@ _020E3854: mov r3, r1 mov r1, r0 bl _dsub -_020E3884: - .byte 0x00, 0x00, 0x00, 0xEA +_020E3884: ; 0x020E3884 + b _020E388C _020E3888: bl nan +_020E388C: ldr r2, [sp, #0x2c] add r2, r2, r5 add r3, r6, r2 @@ -4965,31 +6742,114 @@ _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 + 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 @@ -5178,10 +7038,24 @@ _020E3C98: 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 +_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 @@ -5198,45 +7072,173 @@ _020E3D00: 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 + 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 @@ -5454,11 +7456,21 @@ _020E423C: 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 +_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 @@ -5721,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 @@ -5771,7 +7783,7 @@ _020E46F0: beq _020E4708 mov r1, r9 mvn r0, #0x0 - bl _u32_div_f + bl _u32_div_f str r0, [sp, #0x4] _020E4708: mvn r11, #0x0 @@ -5782,34 +7794,113 @@ _020E4710: 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 +_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: - .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 + 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 @@ -5818,7 +7909,7 @@ _020E487C: bne _020E48A0 mov r0, r11 mov r1, r9 - bl _u32_div_f + bl _u32_div_f str r0, [sp, #0x4] _020E48A0: cmp r6, #0x0 @@ -6008,34 +8099,113 @@ _020E4B0C: 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 +_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: - .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 + 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 @@ -6208,15 +8378,29 @@ strtoul: ; 0x020E4E80 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 +_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: - .byte 0xA8, 0x74, 0x1D, 0x02 +_020E4F14: .word 0x021D74A8 arm_func_start strtold2 strtold2: ; 0x020E4F18 @@ -6238,18 +8422,43 @@ strtold2: ; 0x020E4F18 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 +_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: - .byte 0xA8, 0x74, 0x1D, 0x02 +_020E4FDC: .word 0x021D74A8 arm_func_start atol atol: ; 0x020E4FE0 @@ -6260,7 +8469,7 @@ atol: ; 0x020E4FE0 .balign 4 _020E4FF0: .word strtold2 - arm_func_start fwide +arm_func_start fwide fwide: cmp r0, #0x0 beq _020E500C @@ -6306,8 +8515,8 @@ wmemcpy: ; 0x020E5068 .balign 4 _020E5074: .word memcpy - arm_func_start wmemchr -wmemchr: ; 0x020E5078 +arm_func_start wmemchr +wmemchr: cmp r2, #0x0 beq _020E5098 _020E5080: @@ -6561,9 +8770,20 @@ _020E53A8: 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 +_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 @@ -6579,12 +8799,47 @@ _020E540C: 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 + 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 @@ -6601,10 +8856,20 @@ _020E5470: 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 + 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 @@ -6621,14 +8886,36 @@ _020E54E0: 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 + 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 @@ -6642,10 +8929,21 @@ _020E5588: 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 + 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] @@ -6739,11 +9037,11 @@ _020E5714: _020E571C: mov r0, r10 mov r1, r4 - bl _u32_div_f + bl _u32_div_f mov r9, r1 mov r0, r10 mov r1, r4 - bl _u32_div_f + bl _u32_div_f cmp r9, #0xa mov r10, r0 addlt r9, r9, #0x30 @@ -7292,6 +9590,7 @@ round_decimal_wide: ; 0x020E5EE4 stmdb sp!, {r4,lr} cmp r1, #0x0 bge _020E5F0C +_020E5EF0: mov r1, #0x0 strh r1, [r0, #0x2] mov r1, #0x1 @@ -7303,23 +9602,77 @@ _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 +_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 @@ -7774,6 +10127,8 @@ _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} @@ -7840,10 +10195,20 @@ _020E6710: 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 +_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 @@ -7858,12 +10223,42 @@ _020E6780: 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 +_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 @@ -7878,26 +10273,93 @@ _020E67F8: 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 + 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 @@ -7987,14 +10449,35 @@ _020E6A64: 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 + 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 @@ -8026,36 +10509,145 @@ _020E6B10: 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 + 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 @@ -8193,6 +10785,7 @@ _020E6ED8: blt _020E6ED8 _020E6F14: add r4, r4, r5 +_020E6F18: ldrh r0, [r11, #0x0] cmp r0, #0x0 bne _020E6684 @@ -8204,9 +10797,8 @@ _020E6F24: bx lr .balign 4 _020E6F38: .word 0x0000FFFF -_020E6F3C: - .byte 0x40, 0x6E, 0x10, 0x02 - .byte 0x44, 0x6E, 0x10, 0x02 +_020E6F3C: .word 0x02106E40 +_020E6F40: .word 0x02106E44 arm_func_start __wStringWrite __wStringWrite: ; 0x020E6F44 @@ -8253,12 +10845,26 @@ vswprintf: ; 0x020E6FAC 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 +_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 @@ -8434,7 +11040,7 @@ _020E723C: ldr r3, [sp, #0xac] sub r1, r1, #0x40000000 mov r0, #0x0 - bl _ddiv + bl _ddiv add sp, sp, #0x80 ldmia sp!, {r3-r11,lr} add sp, sp, #0x10 @@ -8486,7 +11092,7 @@ _020E72E4: bge _020E7344 ldr r1, _020E7638 ; =0x3FF00000 mov r0, #0x0 - bl _ddiv + bl _ddiv str r0, [sp, #0x78] str r1, [sp, #0x7c] _020E7344: @@ -8512,7 +11118,7 @@ _020E7344: mov r3, r1 mov r0, r4 mov r1, r5 - bl _ddiv + bl _ddiv str r0, [sp, #0x78] str r1, [sp, #0x7c] b _020E73D0 @@ -8719,9 +11325,12 @@ _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 +_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 @@ -8796,7 +11405,7 @@ _020E7794: mov r2, r0 ldr r1, _020E7638 ; =0x3FF00000 mov r0, #0x0 - bl _ddiv + bl _ddiv str r1, [sp, #0x24] mov r11, r0 ldr r3, [sp, #0x24] @@ -8957,41 +11566,141 @@ _020E7794: 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 +_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] @@ -9308,7 +12017,7 @@ _020E7F3C: mov r0, r7 mov r3, r1 mov r1, r10 - bl _ddiv + bl _ddiv mov r7, r0 mov r10, r1 ldr r0, [sp, #0x78] @@ -9656,8 +12365,8 @@ _020E85EC: _020E8620: strb r1, [r12], #-0x1 b _020E85EC -_020E8628: - .byte 0x1E, 0xFF, 0x2F, 0xE1 +_020E8628: ; 0x020E8628 + bx lr arm_func_start __rounddec __rounddec: ; 0x020E862C @@ -9666,10 +12375,20 @@ __rounddec: ; 0x020E862C 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 +_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 @@ -9813,13 +12532,34 @@ _020E8850: 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 +_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 @@ -9846,13 +12586,31 @@ _020E88F8: 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 +_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 @@ -9874,17 +12632,87 @@ _020E8988: 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 + 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 @@ -9899,31 +12727,119 @@ _020E8A54: 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 + 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 @@ -9937,26 +12853,64 @@ _020E8BE4: 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 +_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: - .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 +_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: ; 0x020E8CDC +arm_func_start __equals_dec +__equals_dec: stmdb sp!, {r4,lr} ldrb r3, [r0, #0x5] cmp r3, #0x0 @@ -9987,6 +12941,7 @@ _020E8D1C: movgt lr, r2 cmp lr, #0x0 ble _020E8D74 +_020E8D4C: add r3, r0, r12 add r2, r1, r12 ldrb r3, [r3, #0x5] @@ -9994,29 +12949,35 @@ _020E8D1C: 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 +_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: - .byte 0x04, 0x10, 0xD0, 0xE5 - .byte 0x01, 0xC0, 0x8C, 0xE2, 0x01, 0x00, 0x5C, 0xE1, 0xF6, 0xFF, 0xFF, 0xBA +_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] @@ -10032,18 +12993,58 @@ _020E8DE0: 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 +_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 @@ -10064,49 +13065,186 @@ _020E8EA8: 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 +_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: ; 0x020E9140 +arm_func_start __num2dec_internal +__num2dec_internal: stmdb sp!, {r4-r8,lr} sub sp, sp, #0x58 mov r8, r1 @@ -10115,29 +13253,98 @@ __num2dec_internal: ; 0x020E9140 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 +_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 @@ -10149,16 +13356,44 @@ __num2dec_internal2: ; 0x020E92C0 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 +_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 @@ -10272,86 +13507,330 @@ _020E94C8: 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 +_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: - .byte 0x48, 0x6E, 0x10, 0x02, 0x00, 0x00, 0x14, 0x40, 0xFF, 0xFF, 0xEF, 0x7F +_020E9980: .word 0x02106E48 +_020E9984: .word 0x40140000 +_020E9988: .word 0x7FEFFFFF arm_func_start __msl_generic_count_bits64 __msl_generic_count_bits64: ; 0x020E998C @@ -10393,6 +13872,8 @@ __msl_generic_count_bits64: ; 0x020E998C _020E9A14: .word 0x55555555 _020E9A18: .word 0x33333333 _020E9A1C: .word 0x0F0F0F0F + +arm_func_start __signbitf __signbitf: stmdb sp!, {r0-r3} ldr r0, [sp, #0x4] @@ -10452,6 +13933,7 @@ scalbn: ; 0x020E9AA4 stricmp: ; 0x020E9AD0 stmdb sp!, {r3,lr} ldr r3, _020E9B34 ; =0x0210420C +_020E9AD8: ldrb r2, [r0], #0x1 cmp r2, #0x0 blt _020E9AF0 @@ -10471,10 +13953,15 @@ _020E9B0C: 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 +_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 @@ -10483,6 +13970,8 @@ strnicmp: ; 0x020E9B38 bx r12 .balign 4 _020E9B40: .word stricmp + +arm_func_start _dadd _dadd: stmdb sp!, {r4,lr} eors r12, r1, r3 @@ -10688,9 +14177,11 @@ _020E9E18: 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 +_020E9E28: ; 0x020E9E28 + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4,lr} + bx lr _020E9E38: cmp r12, #0x800 movge lr, #0x80000000 @@ -10702,6 +14193,8 @@ _020E9E38: bx lr .balign 4 _020E9E58: .word 0x7FF00000 + +arm_func_start _d2f _d2f: and r2, r1, #0x80000000 mov r12, r1, lsr #0x14 @@ -11249,6 +14742,8 @@ _drsb: ; 0x020EA5B4 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 @@ -11669,9 +15164,9 @@ _020EAB88: _020EAB94: mvn r0, #0x80000000 bx lr -_020EAB9C: - .byte 0x02, 0x01, 0xE0, 0xE3 - .byte 0x1E, 0xFF, 0x2F, 0xE1 +_020EAB9C: ; 0x020EAB9C + mvn r0, #0x80000000 + bx lr arm_func_start _dgr _dgr: ; 0x020EABA4 @@ -12099,7 +15594,7 @@ _020EB0B4: add r0, r0, r1, lsr #0x1f ldmia sp!, {lr} bx lr -_020EB138: +_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 @@ -12265,6 +15760,8 @@ _020EB430: mov r0, lr ldmia sp!, {lr} bx lr + +arm_func_start _f2d _f2d: and r2, r0, #0x80000000 mov r12, r0, lsr #0x17 @@ -12694,10 +16191,13 @@ _020EB9CC: _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 +_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 @@ -12738,7 +16238,7 @@ _020EBA58: orrs r6, r5, r6 bne _020EBA8C mov r1, r2 - bl _s32_div_f + bl _s32_div_f ands r4, r4, #0x1 movne r0, r1 mov r1, r0, asr #0x1f @@ -12827,8 +16327,9 @@ _020EBB78: orr r0, r0, r1, lsl r7 mov r1, r1, lsr r5 b _020EBBB0 -_020EBBA8: - .byte 0x31, 0x07, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 +_020EBBA8: ; 0x020EBBA8 + mov r0, r1, lsr r7 + mov r1, #0x0 _020EBBB0: cmp r4, #0x0 blt _020EBBC0 @@ -12867,10 +16368,13 @@ _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 + 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 @@ -12899,25 +16403,20 @@ _020EBC74: 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 + 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 ip, ip, #1 - ; Make the denominator positive, also test for div0 + addlt r12, r12, #0x1 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 + blo _020EBE78 mov r2, #0x1c mov r3, r0, lsr #0x4 cmp r1, r3, lsr #0xc @@ -12934,30 +16433,118 @@ _s32_div_f: ; 0x20EBC80 adds r0, r0, r0 add r2, r2, r2, lsl #0x1 add pc, pc, r2, lsl #0x2 - nop - .rept 32 + 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 - .endr mov r1, r3 _020EBE78: - ; If the signs differed originally, negate quotient - ands r3, ip, #0x80000000 + ands r3, r12, #0x80000000 rsbne r0, r0, #0x0 - ; If the numerator was negative, negate remainder - ands r3, ip, #0x1 + ands r3, r12, #0x1 rsbne r1, r1, #0x0 bx lr -; required to make the linker happy : - - arm_func_start _u32_div_f + arm_func_start _u32_div_f _u32_div_f: ; 0x020EBE8C cmp r1, #0x0 - bxeq lr ; About as wrong as we can be + bxeq lr + arm_func_start _u32_div_not_0_f -_u32_div_not_0_f: +_u32_div_not_0_f: cmp r0, r1 movcc r1, r0 movcc r0, #0x0 @@ -12978,16 +16565,107 @@ _u32_div_not_0_f: adds r0, r0, r0 add r2, r2, r2, lsl #0x1 add pc, pc, r2, lsl #0x2 - nop - .rept 32 + 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 - .endr mov r1, r3 bx lr - arm_func_start _drdiv + arm_func_start _drdiv _drdiv: ; 0x020EC070 eor r1, r1, r3 eor r3, r1, r3 @@ -12996,7 +16674,7 @@ _drdiv: ; 0x020EC070 eor r2, r0, r2 eor r0, r0, r2 - arm_func_start _ddiv + arm_func_start _ddiv _ddiv: ; 0x020EC088 stmdb sp!, {r4-r6,lr} ldr lr, _020EC5C8 ; =0x00000FFE @@ -13080,7 +16758,7 @@ _020EC1B0: adc r1, r1, #0x0 ldmia sp!, {r4-r6,lr} bx lr -_020EC1C0: +_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 @@ -13316,11 +16994,11 @@ _020EC5B8: .balign 4 _020EC5C8: .word 0x00000FFE - arm_func_start _fp_init + arm_func_start _fp_init _fp_init: ; 0x020EC5CC bx lr - arm_func_start sys_writec + arm_func_start sys_writec sys_writec: ; 0x020EC5D0 str lr, [sp, #-0x4]! mov r1, r0 @@ -13328,7 +17006,7 @@ sys_writec: ; 0x020EC5D0 swi 0x123456 ldr pc, [sp], #0x4 - arm_func_start sys_readc + arm_func_start sys_readc sys_readc: ; 0x020EC5E4 str lr, [sp, #-0x4]! mov r1, #0x0 @@ -13336,14 +17014,14 @@ sys_readc: ; 0x020EC5E4 swi 0x123456 ldr pc, [sp], #0x4 - arm_func_start sys_exit + arm_func_start sys_exit sys_exit: ; 0x020EC5F8 mov r1, #0x0 mov r0, #0x18 swi 0x123456 mov pc, lr - arm_func_start __read_console + arm_func_start __read_console __read_console: ; 0x020EC608 stmdb sp!, {r3-r7,lr} mov r6, r2 @@ -13353,7 +17031,7 @@ __read_console: ; 0x020EC608 mov r4, #0x0 bls _020EC650 _020EC624: - bl sys_readc + bl sys_readc and r1, r0, #0xff cmp r1, #0xd strb r0, [r7, r4] @@ -13368,7 +17046,7 @@ _020EC650: mov r0, #0x0 ldmia sp!, {r3-r7,pc} - arm_func_start __write_console + arm_func_start __write_console __write_console: ; 0x020EC658 stmdb sp!, {r4-r6,lr} ldr r5, [r2, #0x0] @@ -13378,7 +17056,7 @@ __write_console: ; 0x020EC658 bls _020EC684 _020EC670: add r0, r6, r4 - bl sys_writec + bl sys_writec add r4, r4, #0x1 cmp r4, r5 blo _020EC670 @@ -13386,12 +17064,12 @@ _020EC684: mov r0, #0x0 ldmia sp!, {r4-r6,pc} - arm_func_start __close_console + arm_func_start __close_console __close_console: ; 0x020EC68C mov r0, #0x0 bx lr - arm_func_start __call_static_initializers + arm_func_start __call_static_initializers __call_static_initializers: ; 0x020EC694 stmdb sp!, {r4,lr} ldr r4, _020EC6BC ; =0x02104774 @@ -13408,22 +17086,32 @@ _020EC6A8: .balign 4 _020EC6BC: .word 0x02104774 - arm_func_start __destroy_global_chain + 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 +_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 + arm_func_start _ExitProcess _ExitProcess: ; 0x020EC704 - ldr ip, _020EC70C ; =sys_exit + ldr ip, _020EC70C ; =sys_exit bx r12 .balign 4 -_020EC70C: .word sys_exit +_020EC70C: .word sys_exit diff --git a/global.inc b/global.inc index 7eb609960..33c1e83b0 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 840d581c7..1ff4b5078 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) From 4447e7886004975ee4e6e3af6fd7474ae8a39533 Mon Sep 17 00:00:00 2001 From: Demki Date: Thu, 23 Apr 2020 14:38:30 +0300 Subject: [PATCH 05/23] 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 0e654689c..331c0fa94 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 e6f5b4eed..8116f8deb 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 0e5eb0c5f..cc3e7998e 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 8468f9f68..d75850de3 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 93c07623e..50b0dace5 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 899a81227..cd02d807a 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 ebb81d3f0..412e3d8ab 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 5b3a52bff..785e5b48d 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 dfeeba8a1..7d95c5dd5 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 dff8d6888..622c7c7f2 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 7aa125b85..9282ff4aa 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; From c82509b9517c9135474f2994dbb92f1da2736e49 Mon Sep 17 00:00:00 2001 From: Demki Date: Thu, 23 Apr 2020 17:19:18 +0300 Subject: [PATCH 06/23] 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 e25cc0c58..b38ac8e46 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 From 8c12e857d9af7efa9e2fd2f2a9ca990cfc0a132d Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 23 Apr 2020 20:33:23 +0100 Subject: [PATCH 07/23] add libpng as a listed dependency --- INSTALL.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/INSTALL.md b/INSTALL.md index 1ffc5c59a..5820b7158 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -19,6 +19,7 @@ Building the ROM requires the following packages: * build-essentials * binutils-arm-none-eabi * wine (to run the mwcc executables) +* libpng NOTE: If you are using Arch/Manjaro or Void you will only need base-devel instead of build-essentials or make or git. You will still need wine. @@ -41,6 +42,7 @@ You will still require the following packages: * make * git * build-essentials +* libpng Install them using either the Cygwin package manager or using pacman on Msys2. From a7dd871d585d2412cd37c56c410a80b1d546deea Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 23 Apr 2020 20:40:40 +0100 Subject: [PATCH 08/23] libpng-devel --- INSTALL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 5820b7158..c4f62a60c 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -19,7 +19,7 @@ Building the ROM requires the following packages: * build-essentials * binutils-arm-none-eabi * wine (to run the mwcc executables) -* libpng +* libpng-devel NOTE: If you are using Arch/Manjaro or Void you will only need base-devel instead of build-essentials or make or git. You will still need wine. @@ -42,7 +42,7 @@ You will still require the following packages: * make * git * build-essentials -* libpng +* libpng-devel Install them using either the Cygwin package manager or using pacman on Msys2. From e938d6ee4893ee8fbebad1af4cc2b9e4bedfb306 Mon Sep 17 00:00:00 2001 From: Demki Date: Fri, 24 Apr 2020 15:09:20 +0300 Subject: [PATCH 09/23] dism unk_0208AC14.s --- asm/rom1.5.s | 10 +- asm/unk_02006864.s | 2 +- asm/unk_0208AC14.s | 42449 +++++++++++++++++++++++++++++++++++++++++++ global.inc | 130 +- pokediamond.lcf | 1 + undefined_syms.txt | 28 +- 6 files changed, 42614 insertions(+), 6 deletions(-) create mode 100644 asm/unk_0208AC14.s diff --git a/asm/rom1.5.s b/asm/rom1.5.s index fffa35a6c..bdb9fbca9 100644 --- a/asm/rom1.5.s +++ b/asm/rom1.5.s @@ -2,6 +2,10 @@ .include "asm/macros.inc" .section .text - arm_func_start FUN_0208AC14 -FUN_0208AC14: - .incbin "baserom.nds", 0x8EC14, 0x3EFF8 + arm_func_start FUN_020AF030 +FUN_020AF030: + .incbin "baserom.nds", 0xB3030, 0x1ABDC + + +; _020AF02C = 0xB302C +; should end on 0xCDC0C = 020C9C0C diff --git a/asm/unk_02006864.s b/asm/unk_02006864.s index 412e3d8ab..fc213a122 100644 --- a/asm/unk_02006864.s +++ b/asm/unk_02006864.s @@ -45943,7 +45943,7 @@ FUN_0201BBD0: ; 0x0201BBD0 blx FUN_020C5600 add r0, sp, #0x14 add r1, sp, #0x8 - blx FUN_020C5588 + blx VEC_DotProduct asr r0, r0, #0xc bpl _0201BC72 neg r0, r0 diff --git a/asm/unk_0208AC14.s b/asm/unk_0208AC14.s new file mode 100644 index 000000000..0b326bbe0 --- /dev/null +++ b/asm/unk_0208AC14.s @@ -0,0 +1,42449 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start FUN_0208AC14 +FUN_0208AC14: ; 0x0208AC14 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r1, [r5, #0x4] + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr +_0208AC34: + ldr r4, [r1, #0x0] + mov r0, r5 + bl FUN_0208AC58 + mov r1, r4 + cmp r4, #0x0 + bne _0208AC34 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_0208AC58 +FUN_0208AC58: ; 0x0208AC58 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r1 + mov r7, r0 + add r0, r6, #0x8 + bl FUN_02090A58 + movs r1, r0 + beq _0208AC98 + add r5, r7, #0x1c + add r4, r6, #0x8 +_0208AC80: + mov r0, r5 + bl FUN_02090AA4 + mov r0, r4 + bl FUN_02090A58 + movs r1, r0 + bne _0208AC80 +_0208AC98: + add r0, r6, #0x14 + bl FUN_02090A58 + movs r1, r0 + beq _0208ACC8 + add r5, r7, #0x1c + add r4, r6, #0x14 +_0208ACB0: + mov r0, r5 + bl FUN_02090AA4 + mov r0, r4 + bl FUN_02090A58 + movs r1, r0 + bne _0208ACB0 +_0208ACC8: + mov r1, r6 + add r0, r7, #0x4 + bl FUN_020909D8 + mov r1, r6 + add r0, r7, #0x10 + bl FUN_02090AA4 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_0208ACEC +FUN_0208ACEC: ; 0x0208ACEC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + ldr r0, [r7, #0x10] + mov r6, r1 + mov r5, r2 + cmp r0, #0x0 + mov r4, #0x0 + beq _0208AD70 + add r1, sp, #0x0 + str r4, [r1, #0x0] + str r4, [r1, #0x4] + add r0, r7, #0x10 + str r4, [r1, #0x8] + bl FUN_02090A58 + ldr r1, [r7, #0x28] + add r2, sp, #0x0 + add r1, r1, r6, lsl #0x5 + mov r4, r0 + bl FUN_0208C138 +_0208AD3C: ; 0x0208AD3C + cmp r5, #0x0 + beq _0208AD4C + mov r0, r4 + blx r5 +_0208AD4C: + mov r1, r4 + add r0, r7, #0x4 + bl FUN_02090AA4 + ldr r0, [r4, #0x20] + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x11 + movs r0, r0, lsr #0x1f + movne r4, #0x0 +_0208AD70: + mov r0, r4 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_0208AD80 +FUN_0208AD80: ; 0x0208AD80 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r2, _0208AE44 ; =0x04000060 + mov r4, r0 + ldrh r0, [r2, #0x0] + bic r0, r0, #0x3000 + orr r0, r0, #0x8 + strh r0, [r2, #0x0] + str r1, [r4, #0x44] + ldr r0, [r4, #0x38] + mov r0, r0, lsl #0x7 + movs r0, r0, lsr #0x1f + bne _0208ADFC + ldr r5, [r4, #0x4] + cmp r5, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr +_0208ADC8: + str r5, [r4, #0x40] + ldr r0, [r5, #0x24] + mov r0, r0, lsl #0x1c + movs r0, r0, lsr #0x1f + bne _0208ADE4 + mov r0, r4 + bl FUN_0208B6A0 +_0208ADE4: + ldr r5, [r5, #0x0] + cmp r5, #0x0 + bne _0208ADC8 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_0208ADFC: + ldr r5, [r4, #0xc] + cmp r5, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr +_0208AE10: + str r5, [r4, #0x40] + ldr r0, [r5, #0x24] + mov r0, r0, lsl #0x1c + movs r0, r0, lsr #0x1f + bne _0208AE2C + mov r0, r4 + bl FUN_0208B6A0 +_0208AE2C: + ldr r5, [r5, #0x4] + cmp r5, #0x0 + bne _0208AE10 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_0208AE44: .word 0x04000060 + + arm_func_start FUN_0208AE48 +FUN_0208AE48: ; 0x0208AE48 + stmdb sp!, {r4-r10,lr} + mov r8, r0 + ldr r7, [r8, #0x4] + cmp r7, #0x0 + beq _0208AF5C + add r10, r8, #0x4 + add r9, r8, #0x10 + mov r4, #0x0 +_0208AE68: + ldr r2, [r7, #0x24] + ldr r1, [r7, #0x20] + mov r0, r2, lsl #0x1b + movs r0, r0, lsr #0x1f + ldr r5, [r1, #0x0] + ldr r6, [r7, #0x0] + bne _0208AE9C + ldrh r1, [r7, #0x4c] + ldrh r0, [r5, #0x32] + cmp r1, r0 + orrcs r0, r2, #0x10 + strcs r0, [r7, #0x24] + strcsh r4, [r7, #0x4c] +_0208AE9C: + ldr r0, [r7, #0x24] + mov r0, r0, lsl #0x1d + movs r0, r0, lsr #0x1f + bne _0208AED8 + ldr r0, [r7, #0x80] + mov r0, r0, lsl #0xd + movs r0, r0, lsr #0x1d + beq _0208AECC + ldrh r1, [r8, #0x48] + sub r0, r0, #0x1 + cmp r1, r0 + bne _0208AED8 +_0208AECC: + mov r0, r8 + mov r1, r7 + bl FUN_0208B8F0 +_0208AED8: + ldr r0, [r5, #0x0] + mov r0, r0, lsl #0x11 + movs r0, r0, lsr #0x1f + beq _0208AF10 + ldrh r1, [r5, #0x3c] + cmp r1, #0x0 + beq _0208AF10 + ldr r0, [r7, #0x24] + mov r0, r0, lsl #0x1b + movs r0, r0, lsr #0x1f + beq _0208AF10 + ldrh r0, [r7, #0x4c] + cmp r0, r1 + bhi _0208AF20 +_0208AF10: + ldr r0, [r7, #0x24] + mov r0, r0, lsl #0x1f + movs r0, r0, lsr #0x1f + beq _0208AF50 +_0208AF20: + ldr r0, [r7, #0xc] + cmp r0, #0x0 + bne _0208AF50 + ldr r0, [r7, #0x18] + cmp r0, #0x0 + bne _0208AF50 + mov r0, r10 + mov r1, r7 + bl FUN_020909D8 + mov r1, r0 + mov r0, r9 + bl FUN_02090AA4 +_0208AF50: + mov r7, r6 + cmp r6, #0x0 + bne _0208AE68 +_0208AF5C: + ldrh r0, [r8, #0x48] + add r0, r0, #0x1 + strh r0, [r8, #0x48] + ldrh r0, [r8, #0x48] + cmp r0, #0x1 + movhi r0, #0x0 + strhih r0, [r8, #0x48] + ldmia sp!, {r4-r10,lr} + bx lr + + arm_func_start FUN_0208AF80 +FUN_0208AF80: ; 0x0208AF80 + ldr ip, _0208AF8C ; =FUN_0208AFA8 + ldr r1, _0208AF90 ; =FUN_0208B630 + bx r12 + .balign 4 +_0208AF8C: .word FUN_0208AFA8 +_0208AF90: .word FUN_0208B630 + + arm_func_start FUN_0208AF94 +FUN_0208AF94: ; 0x0208AF94 + ldr ip, _0208AFA0 ; =FUN_0208B05C + ldr r1, _0208AFA4 ; =FUN_0208B668 + bx r12 + .balign 4 +_0208AFA0: .word FUN_0208B05C +_0208AFA4: .word FUN_0208B668 + + arm_func_start FUN_0208AFA8 +FUN_0208AFA8: ; 0x0208AFA8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r10, r0 + mov r11, r1 + bl GX_BeginLoadTexPltt + ldrh r0, [r10, #0x32] + mov r9, #0x0 + cmp r0, #0x0 + ble _0208B048 + mov r0, #0x1 + mov r5, r9 + mov r4, r9 + str r0, [sp, #0x0] +_0208AFDC: + ldr r0, [r10, #0x2c] + mov r6, r4 + ldr r7, [r0, r5] + add r8, r0, r5 + ldr r0, [r7, #0x10] + cmp r0, #0x0 + beq _0208B030 + ldr r1, [r7, #0x4] + mov r1, r1, lsl #0x1c + mov r1, r1, lsr #0x1c + cmp r1, #0x2 + ldreq r1, [sp, #0x0] + movne r1, r4 + blx r11 + mov r6, r0 + ldr r1, [r8, #0x0] + ldr r0, [r7, #0xc] + ldr r2, [r7, #0x10] + add r0, r1, r0 + mov r1, r6 + bl GX_LoadTexPltt +_0208B030: + str r6, [r8, #0x8] + ldrh r0, [r10, #0x32] + add r9, r9, #0x1 + add r5, r5, #0x14 + cmp r9, r0 + blt _0208AFDC +_0208B048: + bl GX_EndLoadTexPltt + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FUN_0208B05C +FUN_0208B05C: ; 0x0208B05C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r10, r0 + mov r11, r1 + bl GX_BeginLoadTex + ldrh r0, [r10, #0x32] + mov r9, #0x0 + cmp r0, #0x0 + ble _0208B114 + mov r0, #0x1 + mov r6, r9 + str r9, [sp, #0x4] + str r0, [sp, #0x0] + mov r4, #0x14 +_0208B094: + ldr r2, [r10, #0x2c] + ldr r7, [r2, r6] + add r8, r2, r6 + ldr r0, [r7, #0x4] + mov r1, r0, lsl #0xe + movs r1, r1, lsr #0x1f + beq _0208B0C8 + mov r0, r0, lsl #0x6 + mov r1, r0, lsr #0x18 + mla r0, r1, r4, r2 + ldr r0, [r0, #0x4] + str r0, [r8, #0x4] + b _0208B100 +_0208B0C8: + mov r0, r0, lsl #0x1c + mov r0, r0, lsr #0x1c + cmp r0, #0x5 + ldreq r1, [sp, #0x0] + ldr r0, [r7, #0x8] + ldrne r1, [sp, #0x4] + blx r11 + mov r5, r0 + ldr r0, [r8, #0x0] + ldr r2, [r7, #0x8] + add r0, r0, #0x20 + mov r1, r5 + bl GX_LoadTex + str r5, [r8, #0x4] +_0208B100: + ldrh r0, [r10, #0x32] + add r9, r9, #0x1 + add r6, r6, #0x14 + cmp r9, r0 + blt _0208B094 +_0208B114: + bl GX_EndLoadTex + mov r0, #0x1 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FUN_0208B128 +FUN_0208B128: ; 0x0208B128 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x2c + mov r9, r1 + ldrh r1, [r9, #0x8] + mov r10, r0 + mov r8, #0x20 + strh r1, [r10, #0x30] + ldrh r0, [r9, #0xa] + strh r0, [r10, #0x32] + ldrh r0, [r10, #0x30] + ldr r1, [r10, #0x0] + mov r0, r0, lsl #0x5 + blx r1 + str r0, [r10, #0x28] + ldrh r2, [r10, #0x30] + ldr r0, [r10, #0x28] + mov r1, #0x0 + mov r2, r2, lsl #0x5 + bl MI_CpuFill8 + ldrh r1, [r10, #0x30] + mov r0, #0x0 + str r0, [sp, #0x0] + cmp r1, #0x0 + ble _0208B3C8 + mov r6, r0 + str r0, [sp, #0x10] + str r0, [sp, #0x14] + str r0, [sp, #0x18] + str r0, [sp, #0x1c] + str r0, [sp, #0x20] + str r0, [sp, #0x24] +_0208B1A4: + ldr r1, [r10, #0x28] + add r0, r9, r8 + str r0, [r1, r6] + ldr r0, [r1, r6] + add r8, r8, #0x58 + ldr r0, [r0, #0x0] + add r7, r1, r6 + str r0, [sp, #0x28] + mov r0, r0, lsl #0x17 + movs r0, r0, lsr #0x1f + addne r0, r9, r8 + strne r0, [r7, #0x4] + ldreq r0, [sp, #0x10] + addne r8, r8, #0xc + streq r0, [r7, #0x4] + ldr r0, [sp, #0x28] + mov r0, r0, lsl #0x16 + movs r0, r0, lsr #0x1f + addne r0, r9, r8 + strne r0, [r7, #0x8] + ldreq r0, [sp, #0x14] + addne r8, r8, #0xc + streq r0, [r7, #0x8] + ldr r0, [sp, #0x28] + mov r0, r0, lsl #0x15 + movs r0, r0, lsr #0x1f + addne r0, r9, r8 + strne r0, [r7, #0xc] + ldreq r0, [sp, #0x18] + addne r8, r8, #0x8 + streq r0, [r7, #0xc] + ldr r0, [sp, #0x28] + mov r0, r0, lsl #0x14 + movs r0, r0, lsr #0x1f + addne r0, r9, r8 + strne r0, [r7, #0x10] + ldreq r0, [sp, #0x1c] + addne r8, r8, #0xc + streq r0, [r7, #0x10] + ldr r0, [sp, #0x28] + mov r0, r0, lsl #0xf + movs r0, r0, lsr #0x1f + addne r0, r9, r8 + strne r0, [r7, #0x14] + ldreq r0, [sp, #0x20] + addne r8, r8, #0x14 + streq r0, [r7, #0x14] + ldr r0, [sp, #0x28] + mov r1, r0, lsl #0x7 + mov r2, r0, lsl #0x6 + mov r5, r1, lsr #0x1f + mov r4, r2, lsr #0x1f + add r1, r5, r2, lsr #0x1f + mov r2, r0, lsl #0x5 + add r1, r1, r2, lsr #0x1f + mov r3, r0, lsl #0x4 + mov r11, r2, lsr #0x1f + add r2, r1, r3, lsr #0x1f + mov r1, r3, lsr #0x1f + mov r12, r0, lsl #0x3 + str r1, [sp, #0x4] + mov r3, r0, lsl #0x2 + mov r0, r12, lsr #0x1f + add r1, r2, r12, lsr #0x1f + str r0, [sp, #0x8] + add r0, r1, r3, lsr #0x1f + strh r0, [r7, #0x1c] + mov r0, r3, lsr #0x1f + str r0, [sp, #0xc] + ldrh r0, [r7, #0x1c] + cmp r0, #0x0 + beq _0208B3A4 + mov r0, r0, lsl #0x3 + ldr r1, [r10, #0x0] + blx r1 + str r0, [r7, #0x18] + cmp r5, #0x0 + ldr r0, [r7, #0x18] + beq _0208B2F8 + add r1, r9, r8 + str r1, [r0, #0x4] + ldr r1, _0208B488 ; =FUN_020909A4 + add r8, r8, #0x8 + str r1, [r0, #0x0] + add r0, r0, #0x8 +_0208B2F8: + cmp r4, #0x0 + beq _0208B318 + add r1, r9, r8 + str r1, [r0, #0x4] + ldr r1, _0208B48C ; =FUN_020908DC + add r8, r8, #0x8 + str r1, [r0, #0x0] + add r0, r0, #0x8 +_0208B318: + cmp r11, #0x0 + beq _0208B338 + add r1, r9, r8 + str r1, [r0, #0x4] + ldr r1, _0208B490 ; =FUN_02090858 + add r8, r8, #0x10 + str r1, [r0, #0x0] + add r0, r0, #0x8 +_0208B338: + ldr r1, [sp, #0x4] + cmp r1, #0x0 + beq _0208B35C + add r1, r9, r8 + str r1, [r0, #0x4] + ldr r1, _0208B494 ; =FUN_02090780 + add r8, r8, #0x4 + str r1, [r0, #0x0] + add r0, r0, #0x8 +_0208B35C: + ldr r1, [sp, #0x8] + cmp r1, #0x0 + beq _0208B380 + add r1, r9, r8 + str r1, [r0, #0x4] + ldr r1, _0208B498 ; =FUN_02090664 + add r8, r8, #0x8 + str r1, [r0, #0x0] + add r0, r0, #0x8 +_0208B380: + ldr r1, [sp, #0xc] + cmp r1, #0x0 + beq _0208B3AC + add r1, r9, r8 + str r1, [r0, #0x4] + ldr r1, _0208B49C ; =FUN_020905D0 + add r8, r8, #0x10 + str r1, [r0, #0x0] + b _0208B3AC +_0208B3A4: + ldr r0, [sp, #0x24] + str r0, [r7, #0x18] +_0208B3AC: + ldr r0, [sp, #0x0] + ldrh r1, [r10, #0x30] + add r0, r0, #0x1 + add r6, r6, #0x20 + str r0, [sp, #0x0] + cmp r0, r1 + blt _0208B1A4 +_0208B3C8: + ldrh r2, [r10, #0x32] + mov r0, #0x14 + ldr r1, [r10, #0x0] + mul r0, r2, r0 + blx r1 + str r0, [r10, #0x2c] + ldrh r3, [r10, #0x32] + mov r1, #0x14 + ldr r0, [r10, #0x2c] + mul r2, r3, r1 + mov r1, #0x0 + bl MI_CpuFill8 + ldrh r0, [r10, #0x32] + mov r3, #0x0 + cmp r0, #0x0 + addle sp, sp, #0x2c + ldmleia sp!, {r4-r11,lr} + bxle lr + mov r4, r3 + mov r0, #0x1 +_0208B418: + ldr r2, [r10, #0x2c] + add r1, r9, r8 + str r1, [r2, r4] + ldr r5, [r1, #0x4] + add r2, r2, r4 + mov r5, r5, lsl #0x18 + mov r5, r5, lsr #0x1c + add r5, r5, #0x3 + mov r5, r0, lsl r5 + strh r5, [r2, #0x10] + ldr r5, [r1, #0x4] + add r3, r3, #0x1 + mov r5, r5, lsl #0x14 + mov r5, r5, lsr #0x1c + add r5, r5, #0x3 + mov r5, r0, lsl r5 + strh r5, [r2, #0x12] + ldr r5, [r1, #0x4] + add r4, r4, #0x14 + str r5, [r2, #0xc] + ldrh r2, [r10, #0x32] + ldr r1, [r1, #0x1c] + cmp r3, r2 + add r8, r8, r1 + blt _0208B418 + add sp, sp, #0x2c + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0208B488: .word FUN_020909A4 +_0208B48C: .word FUN_020908DC +_0208B490: .word FUN_02090858 +_0208B494: .word FUN_02090780 +_0208B498: .word FUN_02090664 +_0208B49C: .word FUN_020905D0 + + arm_func_start FUN_0208B4A0 +FUN_0208B4A0: ; 0x0208B4A0 + stmdb sp!, {r4-r10,lr} + mov r8, r0 + mov r0, #0x4c + mov r7, r1 + mov r6, r2 + mov r4, r3 + blx r8 + mov r5, r0 + mov r1, #0x0 + mov r2, #0x4c + bl MI_CpuFill8 + strh r7, [r5, #0x34] + strh r6, [r5, #0x36] + ldrh r0, [sp, #0x20] + and r2, r4, #0x3f + ldr r1, [r5, #0x38] + and r0, r0, #0x3f + bic r1, r1, #0x3f + orr r0, r1, r0 + str r0, [r5, #0x38] + ldrh r0, [sp, #0x24] + ldr r3, [r5, #0x38] + mov r1, #0x0 + bic r3, r3, #0xfc0 + and r0, r0, #0x3f + orr r0, r3, r0, lsl #0x6 + str r0, [r5, #0x38] + ldr r3, [r5, #0x38] + mov r0, #0x9c + mul r4, r7, r0 + bic r12, r3, #0x3f000 + mov r0, r3, lsl #0x1a + mov r0, r0, lsr #0x1a + and r0, r0, #0x3f + orr r0, r12, r0, lsl #0xc + str r0, [r5, #0x38] + ldr r3, [r5, #0x38] + mov r0, r4 + bic r3, r3, #0xfc0000 + orr r2, r3, r2, lsl #0x12 + str r2, [r5, #0x38] + ldr r2, [r5, #0x38] + bic r2, r2, #0x1000000 + str r2, [r5, #0x38] + ldr r2, [r5, #0x38] + bic r2, r2, #0xfe000000 + str r2, [r5, #0x38] + str r8, [r5, #0x0] + str r1, [r5, #0x8] + str r1, [r5, #0x14] + str r1, [r5, #0x20] + str r1, [r5, #0x4] + str r1, [r5, #0x10] + str r1, [r5, #0x1c] + str r1, [r5, #0x3c] + strh r1, [r5, #0x48] + blx r8 + mov r2, r4 + mov r9, r0 + mov r1, #0x0 + bl MI_CpuFill8 +_0208B594: ; 0x0208B594 + cmp r7, #0x0 + mov r10, #0x0 + ble _0208B5C0 + add r4, r5, #0x10 +_0208B5A4: + mov r0, r4 + mov r1, r9 + bl FUN_02090AA4 + add r10, r10, #0x1 + cmp r10, r7 + add r9, r9, #0x9c + blt _0208B5A4 +_0208B5C0: + mov r0, #0x44 + mul r4, r6, r0 + mov r0, r4 + blx r8 + mov r2, r4 + mov r1, #0x0 + mov r8, r0 + bl MI_CpuFill8 +_0208B5E0: ; 0x0208B5E0 + cmp r6, #0x0 + mov r7, #0x0 + ble _0208B60C + add r4, r5, #0x1c +_0208B5F0: + mov r0, r4 + mov r1, r8 + bl FUN_02090AA4 + add r7, r7, #0x1 + cmp r7, r6 + add r8, r8, #0x44 + blt _0208B5F0 +_0208B60C: + mov r0, #0x0 + str r0, [r5, #0x28] + str r0, [r5, #0x2c] + strh r0, [r5, #0x32] + ldrh r1, [r5, #0x32] + mov r0, r5 + strh r1, [r5, #0x30] + ldmia sp!, {r4-r10,lr} + bx lr + + arm_func_start FUN_0208B630 +FUN_0208B630: ; 0x0208B630 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, _0208B660 ; =0x021064C0 + mov r2, #0x0 + ldr r3, [r3, #0x0] + blx r3 + ldr r1, _0208B664 ; =0x0000FFFF + and r0, r0, r1 + mov r0, r0, lsl #0x3 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_0208B660: .word 0x021064C0 +_0208B664: .word 0x0000FFFF + + arm_func_start FUN_0208B668 +FUN_0208B668: ; 0x0208B668 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, _0208B698 ; =0x021064B8 + mov r2, #0x0 + ldr r3, [r3, #0x0] + blx r3 + ldr r1, _0208B69C ; =0x0000FFFF + and r0, r0, r1 + mov r0, r0, lsl #0x3 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_0208B698: .word 0x021064B8 +_0208B69C: .word 0x0000FFFF + + arm_func_start FUN_0208B6A0 +FUN_0208B6A0: ; 0x0208B6A0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + ldr r1, [r4, #0x40] + ldr r1, [r1, #0x20] + ldr r5, [r1, #0x0] + ldr r1, [r5, #0x0] + mov r2, r1, lsl #0xa + movs r2, r2, lsr #0x1f + beq _0208B6F8 + bl FUN_0208B71C +_0208B6CC: ; 0x0208B6CC + ldr r0, [r5, #0x0] + mov r0, r0, lsl #0x9 + movs r0, r0, lsr #0x1f + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + mov r0, r4 + bl FUN_0208B804 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_0208B6F8: + mov r1, r1, lsl #0x9 + movs r1, r1, lsr #0x1f + bne _0208B708 + bl FUN_0208B804 +_0208B708: + mov r0, r4 + bl FUN_0208B71C + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_0208B71C +FUN_0208B71C: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + ldr r6, [r7, #0x40] + mov r4, #0x0 + ldr r5, [r6, #0x20] + ldr r0, [r5, #0x0] + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0xf + movs r0, r0, lsr #0x1f + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldr r0, [r5, #0x14] + ldr r2, [r7, #0x2c] + ldrb r1, [r0, #0xf] + mov r0, #0x14 + mla r0, r1, r0, r2 + bl FUN_0208C408 + ldr r0, [r5, #0x14] + ldrh r0, [r0, #0x0] + mov r0, r0, lsl #0x17 + mov r0, r0, lsr #0x1e + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _0208B7BC +_0208B784: + b _0208B798 +_0208B788: + b _0208B7A0 +_0208B78C: + b _0208B7A8 +_0208B790: + b _0208B7B0 +_0208B794: + b _0208B7B8 +_0208B798: + ldr r4, _0208B7F4 ; =FUN_0208E258 + b _0208B7BC +_0208B7A0: + ldr r4, _0208B7F8 ; =FUN_0208D490 + b _0208B7BC +_0208B7A8: + ldr r4, _0208B7FC ; =FUN_0208CDF0 + b _0208B7BC +_0208B7B0: + ldr r4, _0208B800 ; =FUN_0208C4F4 + b _0208B7BC +_0208B7B8: + ldr r4, _0208B800 ; =FUN_0208C4F4 +_0208B7BC: + ldr r5, [r6, #0x14] + cmp r5, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr +_0208B7D0: + mov r0, r7 + mov r1, r5 + blx r4 + ldr r5, [r5, #0x0] + cmp r5, #0x0 + bne _0208B7D0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0208B7F4: .word FUN_0208E258 +_0208B7F8: .word FUN_0208D490 +_0208B7FC: .word FUN_0208CDF0 +_0208B800: .word FUN_0208C4F4 + + arm_func_start FUN_0208B804 +FUN_0208B804: ; 0x0208B804 + stmdb sp!, {r4-r8,lr} + mov r7, r0 + ldr r6, [r7, #0x40] + ldr r2, [r7, #0x2c] + ldr r1, [r6, #0x20] + mov r0, #0x14 + ldr r5, [r1, #0x0] + mov r4, #0x0 + ldrb r1, [r5, #0x47] + mla r0, r1, r0, r2 + bl FUN_0208C408 +_0208B830: ; 0x0208B830 + ldr r0, [r5, #0x0] + mov r0, r0, lsl #0x1a + mov r0, r0, lsr #0x1e + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _0208B880 +_0208B848: + b _0208B85C +_0208B84C: + b _0208B864 +_0208B850: + b _0208B86C +_0208B854: + b _0208B874 +_0208B858: + b _0208B87C +_0208B85C: + ldr r4, _0208B8D8 ; =FUN_0208E6AC + b _0208B880 +_0208B864: + ldr r4, _0208B8DC ; =FUN_0208DB70 + b _0208B880 +_0208B86C: + ldr r4, _0208B8E0 ; =FUN_0208D140 + b _0208B880 +_0208B874: + ldr r4, _0208B8E4 ; =FUN_0208C974 + b _0208B880 +_0208B87C: + ldr r4, _0208B8E4 ; =FUN_0208C974 +_0208B880: + ldr r0, [r5, #0x0] + ldr r8, [r6, #0x8] + mov r0, r0, lsl #0x14 + movs r0, r0, lsr #0x1f + ldrne r5, _0208B8E8 ; =FUN_0208C408 + ldreq r5, _0208B8EC ; =FUN_0208C404 + cmp r8, #0x0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + mov r6, #0x14 +_0208B8A8: + ldrb r1, [r8, #0x2c] + ldr r0, [r7, #0x2c] + mla r0, r1, r6, r0 + blx r5 + mov r0, r7 + mov r1, r8 + blx r4 + ldr r8, [r8, #0x0] + cmp r8, #0x0 + bne _0208B8A8 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0208B8D8: .word FUN_0208E6AC +_0208B8DC: .word FUN_0208DB70 +_0208B8E0: .word FUN_0208D140 +_0208B8E4: .word FUN_0208C974 +_0208B8E8: .word FUN_0208C408 +_0208B8EC: .word FUN_0208C404 + + arm_func_start FUN_0208B8F0 +FUN_0208B8F0: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x74 + mov r9, r1 + ldr r8, [r9, #0x20] + mov r10, r0 + ldr r0, [r8, #0x14] + ldr r4, [r8, #0x0] + str r0, [sp, #0x4] + ldr r0, [r4, #0x0] + mov r6, #0x0 + str r0, [sp, #0x24] + ldrb r0, [r4, #0x46] + ldr r2, [r9, #0x90] + ldrh r7, [r8, #0x1c] + add r0, r0, #0x180 + cmp r2, #0x0 + str r0, [sp, #0x8] + beq _0208B944 + mov r0, r9 + mov r1, r6 + blx r2 +_0208B944: + ldrh r1, [r4, #0x3c] + cmp r1, #0x0 + beq _0208B95C + ldrh r0, [r9, #0x4c] + cmp r0, r1 + bhs _0208B9A4 +_0208B95C: + ldrh r0, [r9, #0x4c] + ldrb r1, [r9, #0x80] + bl _s32_div_f +_0208B968: ; 0x0208B968 + cmp r1, #0x0 + bne _0208B9A4 + ldr r1, [r9, #0x24] + mov r0, r1, lsl #0x1f + movs r0, r0, lsr #0x1f + bne _0208B9A4 + mov r0, r1, lsl #0x1e + movs r0, r0, lsr #0x1f + bne _0208B9A4 + mov r0, r1, lsl #0x1b + movs r0, r0, lsr #0x1f + beq _0208B9A4 + mov r0, r9 + add r1, r10, #0x1c + bl FUN_0208F07C +_0208B9A4: + ldr r0, [sp, #0x24] + mov r0, r0, lsl #0x17 + movs r0, r0, lsr #0x1f + beq _0208B9D4 + ldr r0, _0208C120 ; =FUN_02090540 + add r6, r6, #0x1 + str r0, [sp, #0x28] + ldr r0, [r8, #0x4] + ldrh r0, [r0, #0x8] + mov r0, r0, lsl #0x1f + mov r0, r0, lsr #0x1f + str r0, [sp, #0x2c] +_0208B9D4: + ldr r0, [sp, #0x24] + mov r0, r0, lsl #0x16 + movs r0, r0, lsr #0x1f + beq _0208BA20 + ldr r3, [r8, #0x8] + ldrh r0, [r3, #0x8] + mov r0, r0, lsl #0x1f + movs r0, r0, lsr #0x1f + bne _0208BA20 + ldr r2, _0208C124 ; =FUN_02090374 + add r1, sp, #0x28 + str r2, [r1, r6, lsl #0x3] + ldrh r1, [r3, #0x8] + mov r2, r6, lsl #0x3 + add r0, sp, #0x2c + mov r1, r1, lsl #0x1e + mov r1, r1, lsr #0x1f + add r6, r6, #0x1 + str r1, [r0, r2] +_0208BA20: + ldr r0, [sp, #0x24] + mov r0, r0, lsl #0x15 + movs r0, r0, lsr #0x1f + beq _0208BA5C + ldr r2, _0208C128 ; =FUN_02090298 + add r1, sp, #0x28 + str r2, [r1, r6, lsl #0x3] + ldr r1, [r8, #0xc] + mov r2, r6, lsl #0x3 + ldrh r1, [r1, #0x2] + add r0, sp, #0x2c + add r6, r6, #0x1 + mov r1, r1, lsl #0x17 + mov r1, r1, lsr #0x1f + str r1, [r0, r2] +_0208BA5C: + ldr r0, [sp, #0x24] + mov r0, r0, lsl #0x14 + movs r0, r0, lsr #0x1f + beq _0208BAA4 + ldr r3, [r8, #0x10] + ldr r0, [r3, #0x8] + mov r0, r0, lsl #0xf + movs r0, r0, lsr #0x1f + bne _0208BAA4 + ldr r2, _0208C12C ; =FUN_02090234 + add r1, sp, #0x28 + str r2, [r1, r6, lsl #0x3] + ldr r1, [r3, #0x8] + add r0, sp, #0x2c + mov r1, r1, lsl #0xe + mov r1, r1, lsr #0x1f + str r1, [r0, r6, lsl #0x3] + add r6, r6, #0x1 +_0208BAA4: + ldr r4, [r9, #0x8] + cmp r4, #0x0 + beq _0208BDE0 + ldr r0, [sp, #0x24] + add r11, sp, #0x28 + mov r2, r0, lsl #0x10 + mov r1, r0, lsl #0xf + mov r0, r2, lsr #0x1f + str r0, [sp, #0xc] + mov r0, r1, lsr #0x1f + str r0, [sp, #0x10] + mov r0, #0x0 + str r0, [sp, #0x18] +_0208BAD8: + ldr r0, [r4, #0x0] + ldrh r1, [r4, #0x2a] + str r0, [sp, #0x0] + ldrh r0, [r4, #0x26] + cmp r6, #0x0 + ldr r5, [sp, #0x18] + mul r2, r1, r0 + mov r1, r2, asr #0x8 + strb r1, [sp, #0x20] + ldrh r1, [r4, #0x28] + ldrb r2, [r4, #0x2d] + mul r0, r1, r0 + add r0, r2, r0, asr #0x8 + strb r0, [sp, #0x21] + ble _0208BB40 +_0208BB14: + add r2, r11, r5, lsl #0x3 + ldr r12, [r2, #0x4] + add r2, sp, #0x20 + ldrb r2, [r2, r12] + ldr r3, [r11, r5, lsl #0x3] + mov r0, r4 + mov r1, r8 + blx r3 + add r5, r5, #0x1 + cmp r5, r6 + blt _0208BB14 +_0208BB40: + ldr r0, [sp, #0x18] + ldr r5, [sp, #0x18] + str r0, [sp, #0x70] + str r0, [sp, #0x6c] + str r0, [sp, #0x68] + ldr r0, [sp, #0xc] + cmp r0, #0x0 + addne r0, r9, #0x28 + addne r3, r4, #0x38 + ldmneia r0, {r0-r2} + stmneia r3, {r0-r2} + cmp r7, #0x0 + ble _0208BBA0 +_0208BB74: + ldr r2, [r8, #0x18] + mov r1, r4 + add r0, r2, r5, lsl #0x3 + ldr r12, [r2, r5, lsl #0x3] + ldr r0, [r0, #0x4] + add r2, sp, #0x68 + mov r3, r9 + blx r12 + add r5, r5, #0x1 + cmp r5, r7 + blt _0208BB74 +_0208BBA0: + ldr r0, [sp, #0x10] + ldrh r1, [r4, #0x20] + cmp r0, #0x0 + ldrsh r0, [r4, #0x22] + add r0, r1, r0 + strh r0, [r4, #0x20] + ldr r1, [r4, #0x14] + ldr r0, [sp, #0x8] + mul r0, r1, r0 + mov r0, r0, asr #0x9 + str r0, [r4, #0x14] + ldr r1, [r4, #0x18] + ldr r0, [sp, #0x8] + mul r0, r1, r0 + mov r0, r0, asr #0x9 + str r0, [r4, #0x18] + ldr r1, [r4, #0x1c] + ldr r0, [sp, #0x8] + mul r0, r1, r0 + mov r0, r0, asr #0x9 + str r0, [r4, #0x1c] + ldr r1, [r4, #0x14] + ldr r0, [sp, #0x68] + add r0, r1, r0 + str r0, [r4, #0x14] + ldr r1, [r4, #0x18] + ldr r0, [sp, #0x6c] + add r0, r1, r0 + str r0, [r4, #0x18] + ldr r1, [r4, #0x1c] + ldr r0, [sp, #0x70] + add r0, r1, r0 + str r0, [r4, #0x1c] + ldr r1, [r4, #0x14] + ldr r0, [r9, #0x34] + ldr r2, [r4, #0x8] + add r0, r1, r0 + add r0, r2, r0 + str r0, [r4, #0x8] + ldr r1, [r4, #0x18] + ldr r0, [r9, #0x38] + ldr r2, [r4, #0xc] + add r0, r1, r0 + add r0, r2, r0 + str r0, [r4, #0xc] + ldr r1, [r4, #0x1c] + ldr r0, [r9, #0x3c] + ldr r2, [r4, #0x10] + add r0, r1, r0 + add r0, r2, r0 + str r0, [r4, #0x10] + beq _0208BCD8 + ldr r0, [sp, #0x4] + ldrh r2, [r4, #0x24] + ldrb r1, [r0, #0xd] + ldrh r3, [r4, #0x26] + mov r2, r2, lsl #0xc + mov r1, r1, lsl #0xc + mov r0, r3, lsl #0xc + smull r5, r3, r2, r1 + mov r1, #0x800 + adds r2, r5, r1 + adc r1, r3, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + mov r1, r2, asr #0x8 + subs r0, r0, r1 + bmi _0208BCD8 + ldr r1, [sp, #0x4] + mov r0, r0, asr #0xc + ldrb r1, [r1, #0xe] + bl _s32_div_f +_0208BCC0: ; 0x0208BCC0 + cmp r1, #0x0 + bne _0208BCD8 + mov r0, r4 + mov r1, r9 + add r2, r10, #0x1c + bl FUN_0208ED5C +_0208BCD8: + ldr r0, [r9, #0x20] + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x1 + movs r0, r0, lsr #0x1f + beq _0208BD1C + ldrh r0, [r4, #0x2e] + ldr r1, [r10, #0x38] + bic r0, r0, #0xfc00 + mov r1, r1, lsl #0x8 + mov r1, r1, lsr #0x1a + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + and r1, r1, #0x3f + orr r0, r0, r1, lsl #0xa + strh r0, [r4, #0x2e] + b _0208BD9C +_0208BD1C: + ldrh r0, [r4, #0x2e] + ldr r2, [r10, #0x38] + add r1, r10, #0x38 + bic r0, r0, #0xfc00 + mov r2, r2, lsl #0xe + mov r2, r2, lsr #0x1a + mov r2, r2, lsl #0x10 + mov r2, r2, lsr #0x10 + and r2, r2, #0x3f + orr r0, r0, r2, lsl #0xa + strh r0, [r4, #0x2e] + ldr r2, [r10, #0x38] + bic r0, r2, #0x3f000 + mov r2, r2, lsl #0xe + mov r2, r2, lsr #0x1a + add r2, r2, #0x1 + and r2, r2, #0x3f + orr r0, r0, r2, lsl #0xc + str r0, [r10, #0x38] + ldr r2, [r10, #0x38] + mov r0, r2, lsl #0xe + mov r3, r0, lsr #0x1a + mov r0, r2, lsl #0x14 + cmp r3, r0, lsr #0x1a + bls _0208BD9C + mov r0, r2, lsl #0x1a + mov r0, r0, lsr #0x1a + and r0, r0, #0x3f + ldr r2, [r1, #0x0] + bic r2, r2, #0x3f000 + orr r0, r2, r0, lsl #0xc + str r0, [r1, #0x0] +_0208BD9C: + ldrh r0, [r4, #0x26] + add r0, r0, #0x1 + strh r0, [r4, #0x26] + ldrh r1, [r4, #0x26] + ldrh r0, [r4, #0x24] + cmp r1, r0 + bls _0208BDD0 + mov r1, r4 + add r0, r9, #0x8 + bl FUN_020909D8 + mov r1, r0 + add r0, r10, #0x1c + bl FUN_02090AA4 +_0208BDD0: + ldr r0, [sp, #0x0] + cmp r0, #0x0 + mov r4, r0 + bne _0208BAD8 +_0208BDE0: + ldr r0, [sp, #0x24] + mov r0, r0, lsl #0xf + movs r0, r0, lsr #0x1f + beq _0208C0E8 + ldr r0, [sp, #0x4] + mov r6, #0x0 + ldrh r0, [r0, #0x0] + mov r0, r0, lsl #0x1e + movs r0, r0, lsr #0x1f + ldrne r0, _0208C130 ; =FUN_020901E8 + strne r6, [sp, #0x4c] + strne r0, [sp, #0x48] + ldr r0, [sp, #0x4] + addne r6, r6, #0x1 + ldrh r0, [r0, #0x0] + mov r0, r0, lsl #0x1d + movs r0, r0, lsr #0x1f + beq _0208BE44 + ldr r2, _0208C134 ; =FUN_02090190 + add r1, sp, #0x48 + str r2, [r1, r6, lsl #0x3] + add r0, sp, #0x4c + mov r1, #0x0 + str r1, [r0, r6, lsl #0x3] + add r6, r6, #0x1 +_0208BE44: + ldr r0, [sp, #0x4] + ldr r5, [r9, #0x14] + ldrh r0, [r0, #0x0] + mov r0, r0, lsl #0x1f + movs r0, r0, lsr #0x1f + moveq r7, #0x0 + cmp r5, #0x0 + beq _0208C0E8 + mov r0, #0x0 + str r0, [sp, #0x1c] +_0208BE6C: + ldrh r2, [r5, #0x26] + ldr r0, [r5, #0x0] + ldrh r1, [r5, #0x24] + str r0, [sp, #0x14] + mov r0, r2, lsl #0x8 + bl _s32_div_f + ldr r4, [sp, #0x1c] + strb r0, [sp, #0x20] + cmp r6, #0x0 + ble _0208BEBC + ldrb r11, [sp, #0x20] +_0208BE98: + add r3, sp, #0x48 + ldr r3, [r3, r4, lsl #0x3] + mov r0, r5 + mov r1, r8 + mov r2, r11 + blx r3 + add r4, r4, #0x1 + cmp r4, r6 + blt _0208BE98 +_0208BEBC: + ldr r0, [sp, #0x1c] + ldr r4, [sp, #0x1c] + str r0, [sp, #0x70] + str r0, [sp, #0x6c] + str r0, [sp, #0x68] + ldr r0, [sp, #0x4] + ldrh r0, [r0, #0x0] + mov r0, r0, lsl #0x1a + movs r0, r0, lsr #0x1f + addne r0, r9, #0x28 + addne r3, r5, #0x38 + ldmneia r0, {r0-r2} + stmneia r3, {r0-r2} + cmp r7, #0x0 + ble _0208BF24 +_0208BEF8: + ldr r2, [r8, #0x18] + mov r1, r5 + add r0, r2, r4, lsl #0x3 + ldr r11, [r2, r4, lsl #0x3] + ldr r0, [r0, #0x4] + add r2, sp, #0x68 + mov r3, r9 + blx r11 + add r4, r4, #0x1 + cmp r4, r7 + blt _0208BEF8 +_0208BF24: + ldrh r1, [r5, #0x20] + ldrsh r0, [r5, #0x22] + add r0, r1, r0 + strh r0, [r5, #0x20] + ldr r1, [r5, #0x14] + ldr r0, [sp, #0x8] + mul r0, r1, r0 + mov r0, r0, asr #0x9 + str r0, [r5, #0x14] + ldr r1, [r5, #0x18] + ldr r0, [sp, #0x8] + mul r0, r1, r0 + mov r0, r0, asr #0x9 + str r0, [r5, #0x18] + ldr r1, [r5, #0x1c] + ldr r0, [sp, #0x8] + mul r0, r1, r0 + mov r0, r0, asr #0x9 + str r0, [r5, #0x1c] + ldr r1, [r5, #0x14] + ldr r0, [sp, #0x68] + add r0, r1, r0 + str r0, [r5, #0x14] + ldr r1, [r5, #0x18] + ldr r0, [sp, #0x6c] + add r0, r1, r0 + str r0, [r5, #0x18] + ldr r1, [r5, #0x1c] + ldr r0, [sp, #0x70] + add r0, r1, r0 + str r0, [r5, #0x1c] + ldr r1, [r5, #0x14] + ldr r0, [r9, #0x34] + ldr r2, [r5, #0x8] + add r0, r1, r0 + add r0, r2, r0 + str r0, [r5, #0x8] + ldr r1, [r5, #0x18] + ldr r0, [r9, #0x38] + ldr r2, [r5, #0xc] + add r0, r1, r0 + add r0, r2, r0 + str r0, [r5, #0xc] + ldr r1, [r5, #0x1c] + ldr r0, [r9, #0x3c] + ldr r2, [r5, #0x10] + add r0, r1, r0 + add r0, r2, r0 + str r0, [r5, #0x10] + ldr r0, [r9, #0x20] + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + movs r0, r0, lsr #0x1f + beq _0208C028 + ldr r0, [r10, #0x38] + ldrh r1, [r5, #0x2e] + mov r0, r0, lsl #0x8 + mov r0, r0, lsr #0x1a + bic r1, r1, #0xfc00 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + and r0, r0, #0x3f + orr r0, r1, r0, lsl #0xa + strh r0, [r5, #0x2e] + b _0208C0A8 +_0208C028: + ldr r0, [r10, #0x38] + ldrh r1, [r5, #0x2e] + mov r0, r0, lsl #0xe + mov r0, r0, lsr #0x1a + bic r1, r1, #0xfc00 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + and r0, r0, #0x3f + orr r0, r1, r0, lsl #0xa + strh r0, [r5, #0x2e] + ldr r1, [r10, #0x38] + add r0, r10, #0x38 + bic r2, r1, #0x3f000 + mov r1, r1, lsl #0xe + mov r1, r1, lsr #0x1a + add r1, r1, #0x1 + and r1, r1, #0x3f + orr r1, r2, r1, lsl #0xc + str r1, [r10, #0x38] + ldr r2, [r10, #0x38] + mov r1, r2, lsl #0xe + mov r3, r1, lsr #0x1a + mov r1, r2, lsl #0x14 + cmp r3, r1, lsr #0x1a + bls _0208C0A8 + mov r1, r2, lsl #0x1a + mov r1, r1, lsr #0x1a + and r1, r1, #0x3f + ldr r2, [r0, #0x0] + bic r2, r2, #0x3f000 + orr r1, r2, r1, lsl #0xc + str r1, [r0, #0x0] +_0208C0A8: + ldrh r0, [r5, #0x26] + add r0, r0, #0x1 + strh r0, [r5, #0x26] + ldrh r1, [r5, #0x26] + ldrh r0, [r5, #0x24] + cmp r1, r0 + bls _0208C0DC + mov r1, r5 + add r0, r9, #0x14 + bl FUN_020909D8 + mov r1, r0 + add r0, r10, #0x1c + bl FUN_02090AA4 +_0208C0DC: + ldr r5, [sp, #0x14] + movs r0, r5 + bne _0208BE6C +_0208C0E8: + ldrh r0, [r9, #0x4c] + add r0, r0, #0x1 + strh r0, [r9, #0x4c] + ldr r2, [r9, #0x90] + cmp r2, #0x0 + addeq sp, sp, #0x74 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + mov r0, r9 + mov r1, #0x1 + blx r2 + add sp, sp, #0x74 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0208C120: .word FUN_02090540 +_0208C124: .word FUN_02090374 +_0208C128: .word FUN_02090298 +_0208C12C: .word FUN_02090234 +_0208C130: .word FUN_020901E8 +_0208C134: .word FUN_02090190 + + arm_func_start FUN_0208C138 +FUN_0208C138: + stmdb sp!, {r4-r6,lr} + str r1, [r0, #0x20] + mov r3, #0x0 + str r3, [r0, #0x24] + ldr r1, [r0, #0x20] + ldr r5, [r2, #0x0] + ldr r1, [r1, #0x0] + ldr r4, _0208C3FC ; =0x00007FFF + ldr r1, [r1, #0x4] + ldr ip, _0208C400 ; =0x0007FFFF + add r1, r5, r1 + str r1, [r0, #0x28] + ldr r1, [r0, #0x20] + ldr r6, [r2, #0x4] + ldr r1, [r1, #0x0] + mov lr, #0x80000000 + ldr r5, [r1, #0x8] + mov r1, #0x1000 + add r5, r6, r5 + str r5, [r0, #0x2c] + ldr r5, [r0, #0x20] + ldr r6, [r2, #0x8] + ldr r2, [r5, #0x0] + ldr r2, [r2, #0xc] + add r2, r6, r2 + str r2, [r0, #0x30] + str r3, [r0, #0x40] + str r3, [r0, #0x44] + str r3, [r0, #0x48] + str r3, [r0, #0x3c] + ldr r2, [r0, #0x3c] + str r2, [r0, #0x38] + ldr r2, [r0, #0x38] + str r2, [r0, #0x34] + strh r3, [r0, #0x4c] + strh r3, [r0, #0x4e] + ldr r2, [r0, #0x20] + ldr r5, [r2, #0x0] + ldrh r3, [r5, #0x1c] + ldrh r2, [r5, #0x1e] + strh r3, [r0, #0x50] + strh r2, [r0, #0x52] + ldrh r2, [r5, #0x20] + strh r2, [r0, #0x54] + ldr r2, [r0, #0x20] + ldr r2, [r2, #0x0] + ldrh r2, [r2, #0x38] + strh r2, [r0, #0x56] + ldr r2, [r0, #0x20] + ldr r2, [r2, #0x0] + ldr r2, [r2, #0x10] + str r2, [r0, #0x58] + ldr r2, [r0, #0x20] + ldr r2, [r2, #0x0] + ldr r2, [r2, #0x14] + str r2, [r0, #0x5c] + ldr r2, [r0, #0x20] + ldr r2, [r2, #0x0] + ldr r2, [r2, #0x18] + str r2, [r0, #0x60] + ldr r2, [r0, #0x20] + ldr r2, [r2, #0x0] + ldr r2, [r2, #0x24] + str r2, [r0, #0x64] + ldr r2, [r0, #0x20] + ldr r2, [r2, #0x0] + ldr r2, [r2, #0x28] + str r2, [r0, #0x68] + ldr r2, [r0, #0x20] + ldr r2, [r2, #0x0] + ldr r2, [r2, #0x2c] + str r2, [r0, #0x6c] + ldr r2, [r0, #0x20] + ldr r2, [r2, #0x0] + ldrh r2, [r2, #0x3e] + strh r2, [r0, #0x70] + strh r4, [r0, #0x72] + ldr r2, [r0, #0x20] + ldr r2, [r2, #0x0] + ldrb r2, [r2, #0x44] + strb r2, [r0, #0x80] + ldr r2, [r0, #0x20] + ldr r2, [r2, #0x0] + ldrb r2, [r2, #0x45] + strb r2, [r0, #0x81] + ldr r2, [r0, #0x80] + bic r2, r2, #0x70000 + str r2, [r0, #0x80] + ldr r2, [r0, #0x80] + and r2, r2, r12 + str r2, [r0, #0x80] + str lr, [r0, #0x74] + ldr r2, [r0, #0x20] + ldr r2, [r2, #0x0] + ldr r2, [r2, #0x48] + mov r2, r2, lsl #0x6 + mov r2, r2, lsr #0x1e + mov r2, r1, lsl r2 + strh r2, [r0, #0x78] + ldr r2, [r0, #0x20] + ldr r2, [r2, #0x0] + ldr r2, [r2, #0x48] + mov r2, r2, lsl #0x4 + mov r2, r2, lsr #0x1e + mov r1, r1, lsl r2 + strh r1, [r0, #0x7a] + ldr r1, [r0, #0x20] + ldr r1, [r1, #0x0] + ldr r1, [r1, #0x4c] + mov r1, r1, lsl #0x1f + movs r1, r1, lsr #0x1f + ldrnesh r2, [r0, #0x78] + mvnne r1, #0x0 + smulbbne r1, r2, r1 + strneh r1, [r0, #0x78] + ldr r1, [r0, #0x20] + ldr r1, [r1, #0x0] + ldr r1, [r1, #0x4c] + mov r1, r1, lsl #0x1e + movs r1, r1, lsr #0x1f + ldrnesh r2, [r0, #0x7a] + mvnne r1, #0x0 + smulbbne r1, r2, r1 + strneh r1, [r0, #0x7a] + ldr r2, [r0, #0x20] + ldr r1, [r2, #0x0] + ldr r1, [r1, #0x0] + mov r1, r1, lsl #0xf + movs r1, r1, lsr #0x1f + beq _0208C3C0 + ldr r1, [r2, #0x14] + mov r2, #0x1000 + ldr r1, [r1, #0x10] + mov r1, r1, lsl #0x1e + mov r1, r1, lsr #0x1e + mov r1, r2, lsl r1 + strh r1, [r0, #0x7c] + ldr r1, [r0, #0x20] + ldr r1, [r1, #0x14] + ldr r1, [r1, #0x10] + mov r1, r1, lsl #0x1c + mov r1, r1, lsr #0x1e + mov r1, r2, lsl r1 + strh r1, [r0, #0x7e] + ldr r1, [r0, #0x20] + ldr r1, [r1, #0x14] + ldr r1, [r1, #0x10] + mov r1, r1, lsl #0x1b + movs r1, r1, lsr #0x1f + ldrnesh r2, [r0, #0x7c] + mvnne r1, #0x0 + smulbbne r1, r2, r1 + strneh r1, [r0, #0x7c] + ldr r1, [r0, #0x20] + ldr r1, [r1, #0x14] + ldr r1, [r1, #0x10] + mov r1, r1, lsl #0x1a + movs r1, r1, lsr #0x1f + ldrnesh r2, [r0, #0x7e] + mvnne r1, #0x0 + smulbbne r1, r2, r1 + strneh r1, [r0, #0x7e] +_0208C3C0: + mov r2, #0x0 + str r2, [r0, #0x4] + ldr r1, [r0, #0x4] + str r1, [r0, #0x0] + str r2, [r0, #0x14] + ldr r1, [r0, #0x14] + str r1, [r0, #0x8] + str r2, [r0, #0x18] + ldr r1, [r0, #0x18] + str r1, [r0, #0xc] + str r2, [r0, #0x90] + str r2, [r0, #0x94] + str r2, [r0, #0x98] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_0208C3FC: .word 0x00007FFF +_0208C400: .word 0x0007FFFF + + arm_func_start FUN_0208C404 +FUN_0208C404: ; 0x0208C404 + bx lr + + arm_func_start FUN_0208C408 +FUN_0208C408: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r7, [r0, #0xc] + ldr r3, _0208C4E0 ; =0x040004A8 + str r7, [sp, #0x0] + ldr r1, [r0, #0x4] + mov r2, r7, lsl #0x1c + mov lr, r2, lsr #0x1c + mov r1, r1, lsr #0x3 + orr r12, r1, lr, lsl #0x1a + mov r4, r7, lsl #0x18 + mov r5, r7, lsl #0x14 + mov r2, r7, lsl #0xf + mov r4, r4, lsr #0x1c + orr r12, r12, #0x40000000 + mov r6, r7, lsl #0x12 + orr r12, r12, r4, lsl #0x14 + mov r5, r5, lsr #0x1c + mov r1, r7, lsl #0x10 + orr r12, r12, r5, lsl #0x17 + mov r4, r6, lsr #0x1e + mov r5, r1, lsr #0x1e + orr r1, r12, r4, lsl #0x10 + mov r2, r2, lsr #0x1f + orr r1, r1, r5, lsl #0x12 + orr r1, r1, r2, lsl #0x1d + str r1, [r3, #0x0] + cmp lr, #0x2 + moveq r1, #0x1 + movne r1, #0x0 + ldr r2, [r0, #0x8] + rsb r1, r1, #0x4 + mov r2, r2, lsr r1 + ldr r1, _0208C4E4 ; =0x040004AC + ldr ip, _0208C4E8 ; =0x04000440 + str r2, [r1, #0x0] + mov r2, #0x3 + ldr r1, _0208C4EC ; =0x04000454 + str r2, [r12, #0x0] + mov r3, #0x0 + str r3, [r1, #0x0] + ldrh r1, [r0, #0x10] + ldrh r2, [r0, #0x12] + ldr r0, _0208C4F0 ; =0x0400046C + mov r1, r1, lsl #0xc + str r1, [r0, #0x0] + mov r1, r2, lsl #0xc + str r1, [r0, #0x0] + str r3, [r0, #0x0] + mov r0, #0x1 + str r0, [r12, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0208C4E0: .word 0x040004A8 +_0208C4E4: .word 0x040004AC +_0208C4E8: .word 0x04000440 +_0208C4EC: .word 0x04000454 +_0208C4F0: .word 0x0400046C + + arm_func_start FUN_0208C4F4 +FUN_0208C4F4: ; 0x0208C4F4 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0xf0 + mov r4, r1 + ldrh r2, [r4, #0x2e] + mov r5, r0 + ldr r0, [r5, #0x3c] + mov r1, r2, lsl #0x16 + mov r3, r2, lsl #0x1b + mov r1, r1, lsr #0x1b + mov r3, r3, lsr #0x1b + add r1, r1, #0x1 + mul r6, r3, r1 + mov r1, r2, lsl #0x10 + movs r2, r6, asr #0x5 + mov r1, r1, lsr #0x1a + orr r0, r0, #0xc0 + orr r1, r0, r1, lsl #0x18 + ldr r0, _0208C950 ; =0x040004A4 + orr r1, r1, r2, lsl #0x10 + str r1, [r0, #0x0] + addeq sp, sp, #0xf0 + ldr r0, [r0, #0x0] + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r0, [r5, #0x40] + ldrh r1, [r4, #0x20] + ldr r0, [r0, #0x20] + ldr r6, _0208C954 ; =0x020FFA38 + ldr r0, [r0, #0x14] + mov r1, r1, asr #0x4 + ldrh r0, [r0, #0x0] + mov r2, r1, lsl #0x1 + add r1, r2, #0x1 + mov r7, r2, lsl #0x1 + mov r1, r1, lsl #0x1 + mov r0, r0, lsl #0x15 + mov r3, r0, lsr #0x1e + ldr r2, _0208C958 ; =0x02106160 + ldrsh r0, [r6, r7] + ldr r3, [r2, r3, lsl #0x2] + ldrsh r1, [r6, r1] + add r2, sp, #0x30 + blx r3 + add r0, sp, #0xc0 + bl MTX_Identity43_ + ldr r0, [r5, #0x40] + ldr r0, [r0, #0x20] + ldr r0, [r0, #0x14] + ldr r0, [r0, #0x10] + mov r0, r0, lsl #0x19 + movs r0, r0, lsr #0x1f + bne _0208C5D4 + add r1, sp, #0x90 + add r0, r4, #0x14 + bl FUN_020C5288 + b _0208C604 +_0208C5D4: + add r1, sp, #0x90 + add r0, r4, #0x8 + bl FUN_020C5288 + ldr r2, [sp, #0x90] + ldr r1, [sp, #0x94] + ldr r0, [sp, #0x98] + rsb r2, r2, #0x0 + rsb r1, r1, #0x0 + rsb r0, r0, #0x0 + str r2, [sp, #0x90] + str r1, [sp, #0x94] + str r0, [sp, #0x98] +_0208C604: + mov r3, #0x0 + mov r2, #0x1000 + add r0, sp, #0x90 + add r1, sp, #0xb4 + str r3, [sp, #0xb4] + str r2, [sp, #0xb8] + str r3, [sp, #0xbc] + bl VEC_DotProduct + ldr r1, _0208C95C ; =0x00000CCD + cmp r0, r1 + bgt _0208C63C + ldr r1, _0208C960 ; =0xFFFFF333 + cmp r0, r1 + bge _0208C650 +_0208C63C: + mov r0, #0x0 + mov r1, #0x1000 + str r1, [sp, #0xb4] + str r0, [sp, #0xb8] + str r0, [sp, #0xbc] +_0208C650: + add r0, sp, #0x90 + add r1, sp, #0xb4 + add r2, sp, #0x9c + bl VEC_CrossProduct + add r0, sp, #0x90 + add r1, sp, #0x9c + add r2, sp, #0xa8 + bl VEC_CrossProduct + ldr r7, [sp, #0x9c] + ldr r6, [sp, #0xa0] + ldr r3, [sp, #0xa4] + ldr r0, [sp, #0x90] + ldr r1, [sp, #0x94] + ldr r2, [sp, #0x98] + str r7, [sp, #0xc0] + ldr r7, [sp, #0xa8] + str r6, [sp, #0xc4] + ldr r6, [sp, #0xac] + str r3, [sp, #0xc8] + ldr r3, [sp, #0xb0] + str r0, [sp, #0xcc] + str r1, [sp, #0xd0] + add r0, sp, #0x30 + str r2, [sp, #0xd4] + add r1, sp, #0xc0 + mov r2, r0 + str r7, [sp, #0xd8] + str r6, [sp, #0xdc] + str r3, [sp, #0xe0] + bl MTX_Concat43 + ldr r0, [r5, #0x40] + ldr r2, [r4, #0x30] + ldr r0, [r0, #0x20] + mov r12, #0x800 + ldr r0, [r0, #0x0] + mov r3, r2, asr #0x1f + ldrsh r1, [r0, #0x30] + ldr r0, [r0, #0x48] + mov lr, #0x0 + smull r6, r1, r2, r1 + adds r7, r6, r12 + adc r6, r1, #0x0 + mov r0, r0, lsl #0x1 + mov r1, r7, lsr #0xc + orr r1, r1, r6, lsl #0x14 + movs r0, r0, lsr #0x1d + beq _0208C720 + cmp r0, #0x1 + beq _0208C75C + cmp r0, #0x2 + beq _0208C778 + b _0208C79C +_0208C720: + ldrsh r0, [r4, #0x34] + mov r8, r0, asr #0x1f + umull r7, r6, r2, r0 + mla r6, r2, r8, r6 + smull r8, r2, r1, r0 + adds r1, r8, r12 + adc r8, r2, lr + adds r2, r7, r12 + mla r6, r3, r0, r6 + mov r1, r1, lsr #0xc + adc r0, r6, lr + mov r2, r2, lsr #0xc + orr r1, r1, r8, lsl #0x14 + orr r2, r2, r0, lsl #0x14 + b _0208C79C +_0208C75C: + ldrsh r0, [r4, #0x34] + smull r3, r0, r1, r0 + adds r1, r3, r12 + adc r0, r0, lr + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + b _0208C79C +_0208C778: + ldrsh r6, [r4, #0x34] + mov r0, r6, asr #0x1f + umull r8, r7, r2, r6 + mla r7, r2, r0, r7 + adds r2, r8, r12 + mla r7, r3, r6, r7 + adc r0, r7, lr + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 +_0208C79C: + add r0, sp, #0x60 + mov r3, r2 + blx MTX_Scale43_ + add r0, sp, #0x30 + add r1, sp, #0x60 + add r2, sp, #0x0 + bl MTX_Concat43 + ldr r0, [r5, #0x40] + ldr r0, [r0, #0x20] + ldr r3, [r0, #0x0] + ldr r0, [r3, #0x0] + mov r0, r0, lsl #0x8 + movs r0, r0, lsr #0x1f + bne _0208C818 + ldr r1, [r4, #0x8] + ldr r0, [r4, #0x38] + add r0, r1, r0 + str r0, [sp, #0x24] + ldr r1, [r4, #0xc] + ldr r0, [r4, #0x3c] + add r0, r1, r0 + str r0, [sp, #0x28] + ldr r1, [r4, #0x10] + ldr r0, [r4, #0x40] + add r0, r1, r0 + str r0, [sp, #0x2c] + ldr r0, [r5, #0x44] + bl G3_LoadMtx43 +_0208C80C: ; 0x0208C80C + add r0, sp, #0x0 + bl G3_MultMtx43 + b _0208C8BC +_0208C818: + ldr r2, [r4, #0x8] + ldr r1, [r4, #0x38] + ldr r0, [r3, #0x4] + add r1, r2, r1 + sub r0, r1, r0 + str r0, [sp, #0x24] + ldr r0, [r5, #0x40] + ldr r2, [r4, #0xc] + ldr r0, [r0, #0x20] + ldr r1, [r4, #0x3c] + ldr r0, [r0, #0x0] + add r2, r2, r1 + ldr r1, [r0, #0x8] + ldr r0, _0208C964 ; =0x04000454 + sub r1, r2, r1 + str r1, [sp, #0x28] + ldr r1, [r5, #0x40] + ldr r3, [r4, #0x10] + ldr r1, [r1, #0x20] + ldr r2, [r4, #0x40] + ldr r1, [r1, #0x0] + add r3, r3, r2 + ldr r2, [r1, #0xc] + mov r1, #0x0 + sub r2, r3, r2 + str r2, [sp, #0x2c] + str r1, [r0, #0x0] + ldr r1, [r5, #0x40] + ldr r0, _0208C968 ; =0x04000470 + ldr r1, [r1, #0x20] + ldr r1, [r1, #0x0] + ldr r3, [r1, #0xc] + ldr r2, [r1, #0x8] + ldr r1, [r1, #0x4] + str r1, [r0, #0x0] + str r2, [r0, #0x0] + str r3, [r0, #0x0] + ldr r0, [r5, #0x44] + bl G3_MultMtx43 +_0208C8B4: ; 0x0208C8B4 + add r0, sp, #0x0 + bl G3_MultMtx43 +_0208C8BC: + ldr r0, [r5, #0x40] + ldrh r4, [r4, #0x36] + ldrh r12, [r0, #0x72] + mov r2, #0x0 + and r1, r4, #0x1f + and r0, r12, #0x1f + mul r3, r1, r0 + and r1, r4, #0x3e0 + and r0, r12, #0x3e0 + mul r0, r1, r0 + and r4, r4, #0x7c00 + and r1, r12, #0x7c00 + mul r12, r4, r1 + mov r1, r3, asr #0x5 + mov r0, r0, asr #0xf + mov r3, r12, asr #0x19 + orr r0, r1, r0, lsl #0x5 + orr r0, r0, r3, lsl #0xa + mov r0, r0, lsl #0x10 + ldr r1, _0208C96C ; =0x04000480 + mov r0, r0, lsr #0x10 + str r0, [r1, #0x0] + ldr r5, [r5, #0x40] + ldr r4, _0208C970 ; =0x02106158 + ldr r1, [r5, #0x20] + ldrsh r0, [r5, #0x7c] + ldr r3, [r1, #0x14] + ldrsh r1, [r5, #0x7e] + ldrh r5, [r3, #0x0] + mov r3, r2 + mov r5, r5, lsl #0x14 + mov r5, r5, lsr #0x1f + ldr r4, [r4, r5, lsl #0x2] + blx r4 + add sp, sp, #0xf0 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0208C950: .word 0x040004A4 +_0208C954: .word 0x020FFA38 +_0208C958: .word 0x02106160 +_0208C95C: .word 0x00000CCD +_0208C960: .word 0xFFFFF333 +_0208C964: .word 0x04000454 +_0208C968: .word 0x04000470 +_0208C96C: .word 0x04000480 +_0208C970: .word 0x02106158 + + arm_func_start FUN_0208C974 +FUN_0208C974: ; 0x0208C974 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0xf0 + mov r4, r1 + ldrh r2, [r4, #0x2e] + mov r5, r0 + ldr r0, [r5, #0x3c] + mov r1, r2, lsl #0x16 + mov r3, r2, lsl #0x1b + mov r1, r1, lsr #0x1b + mov r3, r3, lsr #0x1b + add r1, r1, #0x1 + mul r6, r3, r1 + mov r1, r2, lsl #0x10 + movs r2, r6, asr #0x5 + mov r1, r1, lsr #0x1a + orr r0, r0, #0xc0 + orr r1, r0, r1, lsl #0x18 + ldr r0, _0208CDCC ; =0x040004A4 + orr r1, r1, r2, lsl #0x10 + str r1, [r0, #0x0] + addeq sp, sp, #0xf0 + ldr r0, [r0, #0x0] + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r0, [r5, #0x40] + ldrh r1, [r4, #0x20] + ldr r0, [r0, #0x20] + ldr r6, _0208CDD0 ; =0x020FFA38 + ldr r0, [r0, #0x0] + mov r1, r1, asr #0x4 + mov r2, r1, lsl #0x1 + ldr r0, [r0, #0x0] + add r1, r2, #0x1 + mov r7, r2, lsl #0x1 + mov r1, r1, lsl #0x1 + mov r0, r0, lsl #0xd + mov r3, r0, lsr #0x1e + ldr r2, _0208CDD4 ; =0x02106160 + ldrsh r0, [r6, r7] + ldr r3, [r2, r3, lsl #0x2] + ldrsh r1, [r6, r1] + add r2, sp, #0x30 + blx r3 + add r0, sp, #0xc0 + bl MTX_Identity43_ + ldr r0, [r5, #0x40] + ldr r0, [r0, #0x20] + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x48] + movs r0, r0, lsr #0x1f + bne _0208CA50 + add r1, sp, #0x90 + add r0, r4, #0x14 + bl FUN_020C5288 + b _0208CA80 +_0208CA50: + add r1, sp, #0x90 + add r0, r4, #0x8 + bl FUN_020C5288 + ldr r2, [sp, #0x90] + ldr r1, [sp, #0x94] + ldr r0, [sp, #0x98] + rsb r2, r2, #0x0 + rsb r1, r1, #0x0 + rsb r0, r0, #0x0 + str r2, [sp, #0x90] + str r1, [sp, #0x94] + str r0, [sp, #0x98] +_0208CA80: + mov r3, #0x0 + mov r2, #0x1000 + add r0, sp, #0x90 + add r1, sp, #0xb4 + str r3, [sp, #0xb4] + str r2, [sp, #0xb8] + str r3, [sp, #0xbc] + bl VEC_DotProduct + ldr r1, _0208CDD8 ; =0x00000CCD + cmp r0, r1 + bgt _0208CAB8 + ldr r1, _0208CDDC ; =0xFFFFF333 + cmp r0, r1 + bge _0208CACC +_0208CAB8: + mov r0, #0x0 + mov r1, #0x1000 + str r1, [sp, #0xb4] + str r0, [sp, #0xb8] + str r0, [sp, #0xbc] +_0208CACC: + add r0, sp, #0x90 + add r1, sp, #0xb4 + add r2, sp, #0x9c + bl VEC_CrossProduct + add r0, sp, #0x90 + add r1, sp, #0x9c + add r2, sp, #0xa8 + bl VEC_CrossProduct + ldr r7, [sp, #0x9c] + ldr r6, [sp, #0xa0] + ldr r3, [sp, #0xa4] + ldr r0, [sp, #0x90] + ldr r1, [sp, #0x94] + ldr r2, [sp, #0x98] + str r7, [sp, #0xc0] + ldr r7, [sp, #0xa8] + str r6, [sp, #0xc4] + ldr r6, [sp, #0xac] + str r3, [sp, #0xc8] + ldr r3, [sp, #0xb0] + str r0, [sp, #0xcc] + str r1, [sp, #0xd0] + add r0, sp, #0x30 + str r2, [sp, #0xd4] + add r1, sp, #0xc0 + mov r2, r0 + str r7, [sp, #0xd8] + str r6, [sp, #0xdc] + str r3, [sp, #0xe0] + bl MTX_Concat43 + ldr r0, [r5, #0x40] + ldr r2, [r4, #0x30] + ldr r0, [r0, #0x20] + mov r12, #0x800 + ldr r0, [r0, #0x0] + mov r3, r2, asr #0x1f + ldrsh r1, [r0, #0x30] + ldr r0, [r0, #0x48] + mov lr, #0x0 + smull r6, r1, r2, r1 + adds r7, r6, r12 + adc r6, r1, #0x0 + mov r0, r0, lsl #0x1 + mov r1, r7, lsr #0xc + orr r1, r1, r6, lsl #0x14 + movs r0, r0, lsr #0x1d + beq _0208CB9C + cmp r0, #0x1 + beq _0208CBD8 + cmp r0, #0x2 + beq _0208CBF4 + b _0208CC18 +_0208CB9C: + ldrsh r0, [r4, #0x34] + mov r8, r0, asr #0x1f + umull r7, r6, r2, r0 + mla r6, r2, r8, r6 + smull r8, r2, r1, r0 + adds r1, r8, r12 + adc r8, r2, lr + adds r2, r7, r12 + mla r6, r3, r0, r6 + mov r1, r1, lsr #0xc + adc r0, r6, lr + mov r2, r2, lsr #0xc + orr r1, r1, r8, lsl #0x14 + orr r2, r2, r0, lsl #0x14 + b _0208CC18 +_0208CBD8: + ldrsh r0, [r4, #0x34] + smull r3, r0, r1, r0 + adds r1, r3, r12 + adc r0, r0, lr + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + b _0208CC18 +_0208CBF4: + ldrsh r6, [r4, #0x34] + mov r0, r6, asr #0x1f + umull r8, r7, r2, r6 + mla r7, r2, r0, r7 + adds r2, r8, r12 + mla r7, r3, r6, r7 + adc r0, r7, lr + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 +_0208CC18: + add r0, sp, #0x60 + mov r3, r2 + blx MTX_Scale43_ + add r0, sp, #0x60 + add r1, sp, #0x30 + add r2, sp, #0x0 + bl MTX_Concat43 + ldr r0, [r5, #0x40] + ldr r0, [r0, #0x20] + ldr r3, [r0, #0x0] + ldr r0, [r3, #0x0] + mov r0, r0, lsl #0x8 + movs r0, r0, lsr #0x1f + bne _0208CC94 + ldr r1, [r4, #0x8] + ldr r0, [r4, #0x38] + add r0, r1, r0 + str r0, [sp, #0x24] + ldr r1, [r4, #0xc] + ldr r0, [r4, #0x3c] + add r0, r1, r0 + str r0, [sp, #0x28] + ldr r1, [r4, #0x10] + ldr r0, [r4, #0x40] + add r0, r1, r0 + str r0, [sp, #0x2c] + ldr r0, [r5, #0x44] + bl G3_LoadMtx43 +_0208CC88: ; 0x0208CC88 + add r0, sp, #0x0 + bl G3_MultMtx43 + b _0208CD38 +_0208CC94: + ldr r2, [r4, #0x8] + ldr r1, [r4, #0x38] + ldr r0, [r3, #0x4] + add r1, r2, r1 + sub r0, r1, r0 + str r0, [sp, #0x24] + ldr r0, [r5, #0x40] + ldr r2, [r4, #0xc] + ldr r0, [r0, #0x20] + ldr r1, [r4, #0x3c] + ldr r0, [r0, #0x0] + add r2, r2, r1 + ldr r1, [r0, #0x8] + ldr r0, _0208CDE0 ; =0x04000454 + sub r1, r2, r1 + str r1, [sp, #0x28] + ldr r1, [r5, #0x40] + ldr r3, [r4, #0x10] + ldr r1, [r1, #0x20] + ldr r2, [r4, #0x40] + ldr r1, [r1, #0x0] + add r3, r3, r2 + ldr r2, [r1, #0xc] + mov r1, #0x0 + sub r2, r3, r2 + str r2, [sp, #0x2c] + str r1, [r0, #0x0] + ldr r1, [r5, #0x40] + ldr r0, _0208CDE4 ; =0x04000470 + ldr r1, [r1, #0x20] + ldr r1, [r1, #0x0] + ldr r3, [r1, #0xc] + ldr r2, [r1, #0x8] + ldr r1, [r1, #0x4] + str r1, [r0, #0x0] + str r2, [r0, #0x0] + str r3, [r0, #0x0] + ldr r0, [r5, #0x44] + bl G3_MultMtx43 +_0208CD30: ; 0x0208CD30 + add r0, sp, #0x0 + bl G3_MultMtx43 +_0208CD38: + ldr r0, [r5, #0x40] + ldrh r4, [r4, #0x36] + ldrh r12, [r0, #0x72] + ldr r1, _0208CDE8 ; =0x04000480 + and r2, r4, #0x1f + and r0, r12, #0x1f + mul r3, r2, r0 + and r2, r4, #0x3e0 + and r0, r12, #0x3e0 + mul r0, r2, r0 + and r4, r4, #0x7c00 + and r2, r12, #0x7c00 + mul r12, r4, r2 + mov r2, r3, asr #0x5 + mov r0, r0, asr #0xf + mov r3, r12, asr #0x19 + orr r0, r2, r0, lsl #0x5 + orr r0, r0, r3, lsl #0xa + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + str r0, [r1, #0x0] + ldr r2, [r5, #0x40] + ldr r4, _0208CDEC ; =0x02106158 + ldr r1, [r2, #0x20] + ldrsh r0, [r2, #0x78] + ldr r12, [r1, #0x0] + ldrsh r1, [r2, #0x7a] + ldr r3, [r12, #0x0] + ldrsh r2, [r12, #0x50] + mov r3, r3, lsl #0xc + mov r5, r3, lsr #0x1f + ldrsh r3, [r12, #0x52] + ldr r4, [r4, r5, lsl #0x2] + blx r4 + add sp, sp, #0xf0 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0208CDCC: .word 0x040004A4 +_0208CDD0: .word 0x020FFA38 +_0208CDD4: .word 0x02106160 +_0208CDD8: .word 0x00000CCD +_0208CDDC: .word 0xFFFFF333 +_0208CDE0: .word 0x04000454 +_0208CDE4: .word 0x04000470 +_0208CDE8: .word 0x04000480 +_0208CDEC: .word 0x02106158 + + arm_func_start FUN_0208CDF0 +FUN_0208CDF0: ; 0x0208CDF0 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x90 + mov r4, r1 + ldrh r2, [r4, #0x2e] + mov r5, r0 + ldr r0, [r5, #0x3c] + mov r1, r2, lsl #0x16 + mov r3, r2, lsl #0x1b + mov r1, r1, lsr #0x1b + mov r3, r3, lsr #0x1b + add r1, r1, #0x1 + mul r6, r3, r1 + mov r1, r2, lsl #0x10 + movs r2, r6, asr #0x5 + mov r1, r1, lsr #0x1a + orr r0, r0, #0xc0 + orr r1, r0, r1, lsl #0x18 + ldr r0, _0208D124 ; =0x040004A4 + orr r1, r1, r2, lsl #0x10 + str r1, [r0, #0x0] + addeq sp, sp, #0x90 + ldr r0, [r0, #0x0] + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r0, [r5, #0x40] + ldrh r1, [r4, #0x20] + ldr r0, [r0, #0x20] + ldr r6, _0208D128 ; =0x020FFA38 + ldr r0, [r0, #0x14] + mov r1, r1, asr #0x4 + ldrh r0, [r0, #0x0] + mov r2, r1, lsl #0x1 + add r1, r2, #0x1 + mov r7, r2, lsl #0x1 + mov r1, r1, lsl #0x1 + mov r0, r0, lsl #0x15 + mov r3, r0, lsr #0x1e + ldr r2, _0208D12C ; =0x02106160 + ldrsh r0, [r6, r7] + ldr r3, [r2, r3, lsl #0x2] + ldrsh r1, [r6, r1] + add r2, sp, #0x30 + blx r3 + ldr r0, [r5, #0x40] + ldr r2, [r4, #0x30] + ldr r0, [r0, #0x20] + mov r12, #0x800 + ldr r0, [r0, #0x0] + mov r3, r2, asr #0x1f + ldrsh r1, [r0, #0x30] + ldr r0, [r0, #0x48] + mov lr, #0x0 + smull r6, r1, r2, r1 + adds r7, r6, r12 + adc r6, r1, #0x0 + mov r1, r7, lsr #0xc + mov r0, r0, lsl #0x1 + orr r1, r1, r6, lsl #0x14 + movs r0, r0, lsr #0x1d + beq _0208CEF4 + cmp r0, #0x1 + beq _0208CF30 + cmp r0, #0x2 + beq _0208CF4C + b _0208CF70 +_0208CEF4: + ldrsh r0, [r4, #0x34] + mov r8, r0, asr #0x1f + umull r7, r6, r2, r0 + mla r6, r2, r8, r6 + smull r8, r2, r1, r0 + adds r1, r8, r12 + adc r8, r2, lr + adds r2, r7, r12 + mla r6, r3, r0, r6 + mov r1, r1, lsr #0xc + adc r0, r6, lr + mov r2, r2, lsr #0xc + orr r1, r1, r8, lsl #0x14 + orr r2, r2, r0, lsl #0x14 + b _0208CF70 +_0208CF30: + ldrsh r0, [r4, #0x34] + smull r3, r0, r1, r0 + adds r1, r3, r12 + adc r0, r0, lr + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + b _0208CF70 +_0208CF4C: + ldrsh r6, [r4, #0x34] + mov r0, r6, asr #0x1f + umull r8, r7, r2, r6 + mla r7, r2, r0, r7 + adds r2, r8, r12 + mla r7, r3, r6, r7 + adc r0, r7, lr + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 +_0208CF70: + add r0, sp, #0x60 + mov r3, r2 + blx MTX_Scale43_ + add r0, sp, #0x30 + add r1, sp, #0x60 + add r2, sp, #0x0 + bl MTX_Concat43 + ldr r0, [r5, #0x40] + ldr r0, [r0, #0x20] + ldr r3, [r0, #0x0] + ldr r0, [r3, #0x0] + mov r0, r0, lsl #0x8 + movs r0, r0, lsr #0x1f + bne _0208CFEC + ldr r1, [r4, #0x8] + ldr r0, [r4, #0x38] + add r0, r1, r0 + str r0, [sp, #0x24] + ldr r1, [r4, #0xc] + ldr r0, [r4, #0x3c] + add r0, r1, r0 + str r0, [sp, #0x28] + ldr r1, [r4, #0x10] + ldr r0, [r4, #0x40] + add r0, r1, r0 + str r0, [sp, #0x2c] + ldr r0, [r5, #0x44] + bl G3_LoadMtx43 +_0208CFE0: ; 0x0208CFE0 + add r0, sp, #0x0 + bl G3_MultMtx43 + b _0208D090 +_0208CFEC: + ldr r2, [r4, #0x8] + ldr r1, [r4, #0x38] + ldr r0, [r3, #0x4] + add r1, r2, r1 + sub r0, r1, r0 + str r0, [sp, #0x24] + ldr r0, [r5, #0x40] + ldr r2, [r4, #0xc] + ldr r0, [r0, #0x20] + ldr r1, [r4, #0x3c] + ldr r0, [r0, #0x0] + add r2, r2, r1 + ldr r1, [r0, #0x8] + ldr r0, _0208D130 ; =0x04000454 + sub r1, r2, r1 + str r1, [sp, #0x28] + ldr r1, [r5, #0x40] + ldr r3, [r4, #0x10] + ldr r1, [r1, #0x20] + ldr r2, [r4, #0x40] + ldr r1, [r1, #0x0] + add r3, r3, r2 + ldr r2, [r1, #0xc] + mov r1, #0x0 + sub r2, r3, r2 + str r2, [sp, #0x2c] + str r1, [r0, #0x0] + ldr r1, [r5, #0x40] + ldr r0, _0208D134 ; =0x04000470 + ldr r1, [r1, #0x20] + ldr r1, [r1, #0x0] + ldr r3, [r1, #0xc] + ldr r2, [r1, #0x8] + ldr r1, [r1, #0x4] + str r1, [r0, #0x0] + str r2, [r0, #0x0] + str r3, [r0, #0x0] + ldr r0, [r5, #0x44] + bl G3_MultMtx43 +_0208D088: ; 0x0208D088 + add r0, sp, #0x0 + bl G3_MultMtx43 +_0208D090: + ldr r0, [r5, #0x40] + ldrh r4, [r4, #0x36] + ldrh r12, [r0, #0x72] + mov r2, #0x0 + and r1, r4, #0x1f + and r0, r12, #0x1f + mul r3, r1, r0 + and r1, r4, #0x3e0 + and r0, r12, #0x3e0 + mul r0, r1, r0 + and r4, r4, #0x7c00 + and r1, r12, #0x7c00 + mul r12, r4, r1 + mov r1, r3, asr #0x5 + mov r0, r0, asr #0xf + mov r3, r12, asr #0x19 + orr r0, r1, r0, lsl #0x5 + orr r0, r0, r3, lsl #0xa + mov r0, r0, lsl #0x10 + ldr r1, _0208D138 ; =0x04000480 + mov r0, r0, lsr #0x10 + str r0, [r1, #0x0] + ldr r5, [r5, #0x40] + ldr r4, _0208D13C ; =0x02106158 + ldr r1, [r5, #0x20] + ldrsh r0, [r5, #0x7c] + ldr r3, [r1, #0x14] + ldrsh r1, [r5, #0x7e] + ldrh r5, [r3, #0x0] + mov r3, r2 + mov r5, r5, lsl #0x14 + mov r5, r5, lsr #0x1f + ldr r4, [r4, r5, lsl #0x2] + blx r4 + add sp, sp, #0x90 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0208D124: .word 0x040004A4 +_0208D128: .word 0x020FFA38 +_0208D12C: .word 0x02106160 +_0208D130: .word 0x04000454 +_0208D134: .word 0x04000470 +_0208D138: .word 0x04000480 +_0208D13C: .word 0x02106158 + + arm_func_start FUN_0208D140 +FUN_0208D140: ; 0x0208D140 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x90 + mov r4, r1 + ldrh r2, [r4, #0x2e] + mov r5, r0 + ldr r0, [r5, #0x3c] + mov r1, r2, lsl #0x16 + mov r3, r2, lsl #0x1b + mov r1, r1, lsr #0x1b + mov r3, r3, lsr #0x1b + add r1, r1, #0x1 + mul r6, r3, r1 + mov r1, r2, lsl #0x10 + movs r2, r6, asr #0x5 + mov r1, r1, lsr #0x1a + orr r0, r0, #0xc0 + orr r1, r0, r1, lsl #0x18 + ldr r0, _0208D474 ; =0x040004A4 + orr r1, r1, r2, lsl #0x10 + str r1, [r0, #0x0] + addeq sp, sp, #0x90 + ldr r0, [r0, #0x0] + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r0, [r5, #0x40] + ldrh r1, [r4, #0x20] + ldr r0, [r0, #0x20] + ldr r6, _0208D478 ; =0x020FFA38 + ldr r0, [r0, #0x0] + mov r1, r1, asr #0x4 + mov r2, r1, lsl #0x1 + ldr r0, [r0, #0x0] + add r1, r2, #0x1 + mov r7, r2, lsl #0x1 + mov r1, r1, lsl #0x1 + mov r0, r0, lsl #0xd + mov r3, r0, lsr #0x1e + ldr r2, _0208D47C ; =0x02106160 + ldrsh r0, [r6, r7] + ldr r3, [r2, r3, lsl #0x2] + ldrsh r1, [r6, r1] + add r2, sp, #0x30 + blx r3 + ldr r0, [r5, #0x40] + ldr r2, [r4, #0x30] + ldr r0, [r0, #0x20] + mov r12, #0x800 + ldr r0, [r0, #0x0] + mov r3, r2, asr #0x1f + ldrsh r1, [r0, #0x30] + ldr r0, [r0, #0x48] + mov lr, #0x0 + smull r6, r1, r2, r1 + adds r7, r6, r12 + adc r6, r1, #0x0 + mov r1, r7, lsr #0xc + mov r0, r0, lsl #0x1 + orr r1, r1, r6, lsl #0x14 + movs r0, r0, lsr #0x1d + beq _0208D244 + cmp r0, #0x1 + beq _0208D280 + cmp r0, #0x2 + beq _0208D29C + b _0208D2C0 +_0208D244: + ldrsh r0, [r4, #0x34] + mov r8, r0, asr #0x1f + umull r7, r6, r2, r0 + mla r6, r2, r8, r6 + smull r8, r2, r1, r0 + adds r1, r8, r12 + adc r8, r2, lr + adds r2, r7, r12 + mla r6, r3, r0, r6 + mov r1, r1, lsr #0xc + adc r0, r6, lr + mov r2, r2, lsr #0xc + orr r1, r1, r8, lsl #0x14 + orr r2, r2, r0, lsl #0x14 + b _0208D2C0 +_0208D280: + ldrsh r0, [r4, #0x34] + smull r3, r0, r1, r0 + adds r1, r3, r12 + adc r0, r0, lr + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + b _0208D2C0 +_0208D29C: + ldrsh r6, [r4, #0x34] + mov r0, r6, asr #0x1f + umull r8, r7, r2, r6 + mla r7, r2, r0, r7 + adds r2, r8, r12 + mla r7, r3, r6, r7 + adc r0, r7, lr + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 +_0208D2C0: + add r0, sp, #0x60 + mov r3, r2 + blx MTX_Scale43_ + add r0, sp, #0x60 + add r1, sp, #0x30 + add r2, sp, #0x0 + bl MTX_Concat43 + ldr r0, [r5, #0x40] + ldr r0, [r0, #0x20] + ldr r3, [r0, #0x0] + ldr r0, [r3, #0x0] + mov r0, r0, lsl #0x8 + movs r0, r0, lsr #0x1f + bne _0208D33C + ldr r1, [r4, #0x8] + ldr r0, [r4, #0x38] + add r0, r1, r0 + str r0, [sp, #0x24] + ldr r1, [r4, #0xc] + ldr r0, [r4, #0x3c] + add r0, r1, r0 + str r0, [sp, #0x28] + ldr r1, [r4, #0x10] + ldr r0, [r4, #0x40] + add r0, r1, r0 + str r0, [sp, #0x2c] + ldr r0, [r5, #0x44] + bl G3_LoadMtx43 +_0208D330: ; 0x0208D330 + add r0, sp, #0x0 + bl G3_MultMtx43 + b _0208D3E0 +_0208D33C: + ldr r2, [r4, #0x8] + ldr r1, [r4, #0x38] + ldr r0, [r3, #0x4] + add r1, r2, r1 + sub r0, r1, r0 + str r0, [sp, #0x24] + ldr r0, [r5, #0x40] + ldr r2, [r4, #0xc] + ldr r0, [r0, #0x20] + ldr r1, [r4, #0x3c] + ldr r0, [r0, #0x0] + add r2, r2, r1 + ldr r1, [r0, #0x8] + ldr r0, _0208D480 ; =0x04000454 + sub r1, r2, r1 + str r1, [sp, #0x28] + ldr r1, [r5, #0x40] + ldr r3, [r4, #0x10] + ldr r1, [r1, #0x20] + ldr r2, [r4, #0x40] + ldr r1, [r1, #0x0] + add r3, r3, r2 + ldr r2, [r1, #0xc] + mov r1, #0x0 + sub r2, r3, r2 + str r2, [sp, #0x2c] + str r1, [r0, #0x0] + ldr r1, [r5, #0x40] + ldr r0, _0208D484 ; =0x04000470 + ldr r1, [r1, #0x20] + ldr r1, [r1, #0x0] + ldr r3, [r1, #0xc] + ldr r2, [r1, #0x8] + ldr r1, [r1, #0x4] + str r1, [r0, #0x0] + str r2, [r0, #0x0] + str r3, [r0, #0x0] + ldr r0, [r5, #0x44] + bl G3_MultMtx43 +_0208D3D8: ; 0x0208D3D8 + add r0, sp, #0x0 + bl G3_MultMtx43 +_0208D3E0: + ldr r0, [r5, #0x40] + ldrh r4, [r4, #0x36] + ldrh r12, [r0, #0x72] + ldr r1, _0208D488 ; =0x04000480 + and r2, r4, #0x1f + and r0, r12, #0x1f + mul r3, r2, r0 + and r2, r4, #0x3e0 + and r0, r12, #0x3e0 + mul r0, r2, r0 + and r4, r4, #0x7c00 + and r2, r12, #0x7c00 + mul r12, r4, r2 + mov r2, r3, asr #0x5 + mov r0, r0, asr #0xf + mov r3, r12, asr #0x19 + orr r0, r2, r0, lsl #0x5 + orr r0, r0, r3, lsl #0xa + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + str r0, [r1, #0x0] + ldr r2, [r5, #0x40] + ldr r4, _0208D48C ; =0x02106158 + ldr r1, [r2, #0x20] + ldrsh r0, [r2, #0x78] + ldr r12, [r1, #0x0] + ldrsh r1, [r2, #0x7a] + ldr r3, [r12, #0x0] + ldrsh r2, [r12, #0x50] + mov r3, r3, lsl #0xc + mov r5, r3, lsr #0x1f + ldrsh r3, [r12, #0x52] + ldr r4, [r4, r5, lsl #0x2] + blx r4 + add sp, sp, #0x90 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0208D474: .word 0x040004A4 +_0208D478: .word 0x020FFA38 +_0208D47C: .word 0x02106160 +_0208D480: .word 0x04000454 +_0208D484: .word 0x04000470 +_0208D488: .word 0x04000480 +_0208D48C: .word 0x02106158 + + arm_func_start FUN_0208D490 +FUN_0208D490: ; 0x0208D490 + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x88 + mov r6, r1 + ldrh r1, [r6, #0x2e] + mov r7, r0 + ldr r4, [r7, #0x40] + mov r0, r1, lsl #0x16 + mov r2, r1, lsl #0x1b + mov r0, r0, lsr #0x1b + mov r2, r2, lsr #0x1b + add r0, r0, #0x1 + mul r3, r2, r0 + ldr r2, [r4, #0x20] + movs r3, r3, asr #0x5 + ldr r0, [r7, #0x3c] + ldr r4, [r2, #0x0] + mov r1, r1, lsl #0x10 + mov r2, r1, lsr #0x1a + orr r1, r0, #0xc0 + orr r2, r1, r2, lsl #0x18 + ldrsh r0, [r4, #0x30] + ldr r8, [r7, #0x44] + ldr r1, _0208DB60 ; =0x040004A4 + orr r2, r2, r3, lsl #0x10 + str r2, [r1, #0x0] + addeq sp, sp, #0x88 + ldr r1, [r1, #0x0] + ldmeqia sp!, {r4-r10,lr} + bxeq lr + ldr r4, [r6, #0x30] + ldr r1, [r7, #0x40] + smull r2, r5, r4, r0 + ldr r0, [r1, #0x20] + mov r3, #0x800 + adds r1, r2, r3 + ldr r2, [r0, #0x0] + adc r9, r5, #0x0 + ldr r0, [r2, #0x48] + mov r5, r1, lsr #0xc + mov r0, r0, lsl #0x1 + mov r1, r4, asr #0x1f + orr r5, r5, r9, lsl #0x14 + movs r0, r0, lsr #0x1d + mov r9, #0x0 + beq _0208D558 + cmp r0, #0x1 + beq _0208D594 + cmp r0, #0x2 + beq _0208D5B0 + b _0208D5D4 +_0208D558: + ldrsh r0, [r6, #0x34] + mov lr, r0, asr #0x1f + umull r12, r10, r4, r0 + mla r10, r4, lr, r10 + smull lr, r4, r5, r0 + mla r10, r1, r0, r10 + adds r0, lr, r3 + adc lr, r4, r9 + adds r1, r12, r3 + mov r5, r0, lsr #0xc + adc r0, r10, r9 + mov r4, r1, lsr #0xc + orr r5, r5, lr, lsl #0x14 + orr r4, r4, r0, lsl #0x14 + b _0208D5D4 +_0208D594: + ldrsh r0, [r6, #0x34] + smull r1, r0, r5, r0 + adds r1, r1, r3 + adc r0, r0, r9 + mov r5, r1, lsr #0xc + orr r5, r5, r0, lsl #0x14 + b _0208D5D4 +_0208D5B0: + ldrsh r10, [r6, #0x34] + mov r0, r10, asr #0x1f + umull lr, r12, r4, r10 + mla r12, r4, r0, r12 + adds r3, lr, r3 + mla r12, r1, r10, r12 + adc r0, r12, r9 + mov r4, r3, lsr #0xc + orr r4, r4, r0, lsl #0x14 +_0208D5D4: + ldr r0, [r2, #0x0] + mov r0, r0, lsl #0x8 + movs r0, r0, lsr #0x1f + bne _0208D83C + ldr r1, [r6, #0x8] + ldr r0, [r6, #0x38] + add r9, sp, #0x18 + add r0, r1, r0 + str r0, [sp, #0xc] + ldr r2, [r6, #0xc] + ldr r1, [r6, #0x3c] + add r0, r6, #0x14 + add r1, r2, r1 + str r1, [sp, #0x10] + ldr r2, [r6, #0x10] + ldr r1, [r6, #0x40] + add r1, r2, r1 + str r1, [sp, #0x14] + ldmia r0, {r0-r2} + stmia r9, {r0-r2} + ldr r0, [r8, #0x8] + add r1, sp, #0x24 + str r0, [sp, #0x24] + ldr r2, [r8, #0x14] + mov r0, r9 + str r2, [sp, #0x28] + ldr r3, [r8, #0x20] + mov r2, r9 + str r3, [sp, #0x2c] + bl VEC_CrossProduct + ldr r0, [sp, #0x18] + cmp r0, #0x0 + bne _0208D678 + ldr r0, [sp, #0x1c] + cmp r0, #0x0 + bne _0208D678 + ldr r0, [sp, #0x20] + cmp r0, #0x0 + addeq sp, sp, #0x88 + ldmeqia sp!, {r4-r10,lr} + bxeq lr +_0208D678: + add r0, sp, #0x18 + mov r1, r0 + bl FUN_020C5288 + add r1, sp, #0x30 + mov r0, r8 + bl MI_Copy36B + add r0, sp, #0x18 + add r1, sp, #0x30 + mov r2, r0 + bl MTX_MultVec33 + add r0, sp, #0xc + mov r1, r8 + mov r2, r0 + bl MTX_MultVec43 + add r0, r6, #0x14 + add r3, sp, #0x0 + ldmia r0, {r0-r2} + stmia r3, {r0-r2} + mov r0, r3 + mov r1, r3 + bl FUN_020C5288 + ldr r0, [r8, #0x20] + ldr r1, [sp, #0x8] + rsb r0, r0, #0x0 + smull r3, r0, r1, r0 + mov r2, #0x800 + adds r1, r3, r2 + ldr r3, [r8, #0x14] + adc r0, r0, #0x0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + ldr r0, [r8, #0x8] + ldr r9, [sp, #0x0] + rsb r0, r0, #0x0 + smull r8, r0, r9, r0 + adds r9, r8, r2 + adc r8, r0, #0x0 + mov r0, r9, lsr #0xc + orr r0, r0, r8, lsl #0x14 + ldr r8, [sp, #0x4] + rsb r3, r3, #0x0 + smull r9, r3, r8, r3 + adds r8, r9, r2 + adc r2, r3, #0x0 + mov r3, r8, lsr #0xc + orr r3, r3, r2, lsl #0x14 + add r0, r0, r3 + adds r1, r1, r0 + ldr r0, [r7, #0x40] + rsbmi r1, r1, #0x0 + ldr r0, [r0, #0x20] + rsb r2, r1, #0x1000 + ldr r0, [r0, #0x0] + mov r9, #0x800 + ldr r0, [r0, #0x48] + ldr r12, [sp, #0x18] + mov r0, r0, lsl #0x8 + mov r0, r0, lsr #0x10 + smull r8, r0, r2, r0 + adds r2, r8, r9 + adc r0, r0, #0x0 + mov r1, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + add r0, r2, #0x1000 + smull r2, r0, r4, r0 + adds r2, r2, r9 + adc r0, r0, #0x0 + mov lr, r2, lsr #0xc + orr lr, lr, r0, lsl #0x14 + smull r0, r4, r12, r5 + adds r8, r0, r9 + ldr r3, [sp, #0x1c] + ldr r0, [sp, #0xc] + rsb r2, r3, #0x0 + str r0, [sp, #0x78] + ldr r0, [sp, #0x10] + smull r10, r5, r3, r5 + str r0, [sp, #0x7c] + smull r3, r0, r2, lr + adc r4, r4, #0x0 + mov r8, r8, lsr #0xc + orr r8, r8, r4, lsl #0x14 + adds r3, r3, r9 + smull lr, r2, r12, lr + str r8, [sp, #0x54] + adc r0, r0, #0x0 + adds r8, r10, r9 + adc r4, r5, #0x0 + adds r5, lr, r9 + mov r9, r3, lsr #0xc + orr r9, r9, r0, lsl #0x14 + mov r8, r8, lsr #0xc + orr r8, r8, r4, lsl #0x14 + ldr r3, [sp, #0x14] + adc r0, r2, #0x0 + mov r5, r5, lsr #0xc + orr r5, r5, r0, lsl #0x14 + mov r4, #0x1000 + ldr r2, _0208DB64 ; =0x04000454 + str r9, [sp, #0x60] + str r8, [sp, #0x58] + add r0, sp, #0x54 + str r5, [sp, #0x64] + str r1, [sp, #0x6c] + str r1, [sp, #0x70] + str r1, [sp, #0x5c] + str r1, [sp, #0x68] + str r4, [sp, #0x74] + str r3, [sp, #0x80] + str r1, [r2, #0x0] + bl G3_MultMtx43 + b _0208DAE8 +_0208D83C: + ldr r3, [r6, #0x8] + ldr r1, [r6, #0x38] + ldr r0, [r2, #0x4] + add r1, r3, r1 + sub r0, r1, r0 + str r0, [sp, #0xc] + ldr r0, [r7, #0x40] + ldr r2, [r6, #0xc] + ldr r0, [r0, #0x20] + ldr r1, [r6, #0x3c] + ldr r0, [r0, #0x0] + add r1, r2, r1 + ldr r0, [r0, #0x8] + add r9, sp, #0x18 + sub r0, r1, r0 + str r0, [sp, #0x10] + ldr r0, [r7, #0x40] + ldr r2, [r6, #0x10] + ldr r0, [r0, #0x20] + ldr r1, [r6, #0x40] + ldr r0, [r0, #0x0] + add r2, r2, r1 + ldr r1, [r0, #0xc] + add r0, r6, #0x14 + sub r1, r2, r1 + str r1, [sp, #0x14] + ldmia r0, {r0-r2} + stmia r9, {r0-r2} + ldr r0, [r8, #0x8] + add r1, sp, #0x24 + str r0, [sp, #0x24] + ldr r2, [r8, #0x14] + mov r0, r9 + str r2, [sp, #0x28] + ldr r3, [r8, #0x20] + mov r2, r9 + str r3, [sp, #0x2c] + bl VEC_CrossProduct + ldr r0, [sp, #0x18] + cmp r0, #0x0 + bne _0208D900 + ldr r0, [sp, #0x1c] + cmp r0, #0x0 + bne _0208D900 + ldr r0, [sp, #0x20] + cmp r0, #0x0 + addeq sp, sp, #0x88 + ldmeqia sp!, {r4-r10,lr} + bxeq lr +_0208D900: + add r0, sp, #0x18 + mov r1, r0 + bl FUN_020C5288 + add r1, sp, #0x30 + mov r0, r8 + bl MI_Copy36B + add r0, sp, #0x18 + add r1, sp, #0x30 + mov r2, r0 + bl MTX_MultVec33 + add r0, sp, #0xc + mov r1, r8 + mov r2, r0 + bl MTX_MultVec43 + add r0, r6, #0x14 + add r3, sp, #0x0 + ldmia r0, {r0-r2} + stmia r3, {r0-r2} + mov r0, r3 + mov r1, r3 + bl FUN_020C5288 + ldr r0, [r8, #0x20] + ldr r1, [sp, #0x8] + rsb r0, r0, #0x0 + smull r3, r0, r1, r0 + mov r2, #0x800 + adds r1, r3, r2 + ldr r3, [r8, #0x14] + adc r0, r0, #0x0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + ldr r0, [r8, #0x8] + ldr r9, [sp, #0x0] + rsb r0, r0, #0x0 + smull r8, r0, r9, r0 + adds r9, r8, r2 + adc r8, r0, #0x0 + mov r0, r9, lsr #0xc + orr r0, r0, r8, lsl #0x14 + ldr r8, [sp, #0x4] + rsb r3, r3, #0x0 + smull r9, r3, r8, r3 + adds r8, r9, r2 + adc r2, r3, #0x0 + mov r3, r8, lsr #0xc + orr r3, r3, r2, lsl #0x14 + add r0, r0, r3 + adds r1, r1, r0 + ldr r0, [r7, #0x40] + rsbmi r1, r1, #0x0 + ldr r0, [r0, #0x20] + rsb r2, r1, #0x1000 + ldr r0, [r0, #0x0] + mov r9, #0x800 + ldr r0, [r0, #0x48] + ldr lr, [sp, #0x18] + mov r0, r0, lsl #0x8 + mov r0, r0, lsr #0x10 + smull r8, r0, r2, r0 + adds r2, r8, r9 + adc r0, r0, #0x0 + mov r1, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + add r0, r2, #0x1000 + smull r2, r0, r4, r0 + adds r2, r2, r9 + adc r0, r0, #0x0 + mov r8, r2, lsr #0xc + orr r8, r8, r0, lsl #0x14 + smull r0, r4, lr, r5 + adds r12, r0, r9 + ldr r3, [sp, #0x1c] + ldr r0, [sp, #0xc] + rsb r2, r3, #0x0 + str r0, [sp, #0x78] + ldr r0, [sp, #0x10] + smull r10, r5, r3, r5 + str r0, [sp, #0x7c] + smull r3, r0, r2, r8 + adc r4, r4, #0x0 + mov r12, r12, lsr #0xc + adds r3, r3, r9 + orr r12, r12, r4, lsl #0x14 + adc r0, r0, #0x0 + adds r10, r10, r9 + smull r8, r2, lr, r8 + adc r4, r5, #0x0 + adds r5, r8, r9 + mov r9, r3, lsr #0xc + orr r9, r9, r0, lsl #0x14 + mov r8, r10, lsr #0xc + orr r8, r8, r4, lsl #0x14 + ldr r3, [sp, #0x14] + adc r0, r2, #0x0 + mov r2, r5, lsr #0xc + orr r2, r2, r0, lsl #0x14 + mov r4, #0x1000 + ldr r0, _0208DB64 ; =0x04000454 + str r12, [sp, #0x54] + str r9, [sp, #0x60] + str r8, [sp, #0x58] + str r1, [sp, #0x6c] + str r2, [sp, #0x64] + str r1, [sp, #0x70] + str r1, [sp, #0x5c] + str r1, [sp, #0x68] + str r4, [sp, #0x74] + str r3, [sp, #0x80] + str r1, [r0, #0x0] + ldr r0, [r7, #0x40] + ldr r1, _0208DB68 ; =0x04000470 + ldr r2, [r0, #0x20] + add r0, sp, #0x54 + ldr r2, [r2, #0x0] + ldr r4, [r2, #0xc] + ldr r3, [r2, #0x8] + ldr r2, [r2, #0x4] + str r2, [r1, #0x0] + str r3, [r1, #0x0] + str r4, [r1, #0x0] + bl G3_MultMtx43 +_0208DAE8: + ldr r0, [r7, #0x40] + ldrh r4, [r6, #0x36] + ldrh r5, [r0, #0x72] + mov r2, #0x0 + and r1, r4, #0x1f + and r0, r5, #0x1f + mul r3, r1, r0 + and r1, r4, #0x3e0 + and r0, r5, #0x3e0 + mul r0, r1, r0 + and r4, r4, #0x7c00 + and r1, r5, #0x7c00 + mul r5, r4, r1 + mov r1, r3, asr #0x5 + mov r0, r0, asr #0xf + mov r3, r5, asr #0x19 + orr r0, r1, r0, lsl #0x5 + orr r0, r0, r3, lsl #0xa + mov r0, r0, lsl #0x10 + ldr r1, _0208DB6C ; =0x04000480 + mov r0, r0, lsr #0x10 + str r0, [r1, #0x0] + ldr r1, [r7, #0x40] + mov r3, r2 + ldrsh r0, [r1, #0x7c] + ldrsh r1, [r1, #0x7e] + bl FUN_0208ECA0 + add sp, sp, #0x88 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_0208DB60: .word 0x040004A4 +_0208DB64: .word 0x04000454 +_0208DB68: .word 0x04000470 +_0208DB6C: .word 0x04000480 + + arm_func_start FUN_0208DB70 +FUN_0208DB70: ; 0x0208DB70 + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x88 + mov r6, r1 + ldrh r1, [r6, #0x2e] + mov r7, r0 + ldr r4, [r7, #0x40] + mov r0, r1, lsl #0x16 + mov r2, r1, lsl #0x1b + mov r0, r0, lsr #0x1b + mov r2, r2, lsr #0x1b + add r0, r0, #0x1 + mul r3, r2, r0 + ldr r2, [r4, #0x20] + movs r3, r3, asr #0x5 + ldr r0, [r7, #0x3c] + ldr r4, [r2, #0x0] + mov r1, r1, lsl #0x10 + mov r2, r1, lsr #0x1a + orr r1, r0, #0xc0 + orr r2, r1, r2, lsl #0x18 + ldrsh r0, [r4, #0x30] + ldr r8, [r7, #0x44] + ldr r1, _0208E248 ; =0x040004A4 + orr r2, r2, r3, lsl #0x10 + str r2, [r1, #0x0] + addeq sp, sp, #0x88 + ldr r1, [r1, #0x0] + ldmeqia sp!, {r4-r10,lr} + bxeq lr + ldr r4, [r6, #0x30] + ldr r1, [r7, #0x40] + smull r2, r5, r4, r0 + ldr r0, [r1, #0x20] + mov r3, #0x800 + adds r1, r2, r3 + ldr r2, [r0, #0x0] + adc r9, r5, #0x0 + ldr r0, [r2, #0x48] + mov r5, r1, lsr #0xc + mov r0, r0, lsl #0x1 + mov r1, r4, asr #0x1f + orr r5, r5, r9, lsl #0x14 + movs r0, r0, lsr #0x1d + mov r9, #0x0 + beq _0208DC38 + cmp r0, #0x1 + beq _0208DC74 + cmp r0, #0x2 + beq _0208DC90 + b _0208DCB4 +_0208DC38: + ldrsh r0, [r6, #0x34] + mov lr, r0, asr #0x1f + umull r12, r10, r4, r0 + mla r10, r4, lr, r10 + smull lr, r4, r5, r0 + mla r10, r1, r0, r10 + adds r0, lr, r3 + adc lr, r4, r9 + adds r1, r12, r3 + mov r5, r0, lsr #0xc + adc r0, r10, r9 + mov r4, r1, lsr #0xc + orr r5, r5, lr, lsl #0x14 + orr r4, r4, r0, lsl #0x14 + b _0208DCB4 +_0208DC74: + ldrsh r0, [r6, #0x34] + smull r1, r0, r5, r0 + adds r1, r1, r3 + adc r0, r0, r9 + mov r5, r1, lsr #0xc + orr r5, r5, r0, lsl #0x14 + b _0208DCB4 +_0208DC90: + ldrsh r10, [r6, #0x34] + mov r0, r10, asr #0x1f + umull lr, r12, r4, r10 + mla r12, r4, r0, r12 + adds r3, lr, r3 + mla r12, r1, r10, r12 + adc r0, r12, r9 + mov r4, r3, lsr #0xc + orr r4, r4, r0, lsl #0x14 +_0208DCB4: + ldr r0, [r2, #0x0] + mov r0, r0, lsl #0x8 + movs r0, r0, lsr #0x1f + bne _0208DF1C + ldr r1, [r6, #0x8] + ldr r0, [r6, #0x38] + add r9, sp, #0x18 + add r0, r1, r0 + str r0, [sp, #0xc] + ldr r2, [r6, #0xc] + ldr r1, [r6, #0x3c] + add r0, r6, #0x14 + add r1, r2, r1 + str r1, [sp, #0x10] + ldr r2, [r6, #0x10] + ldr r1, [r6, #0x40] + add r1, r2, r1 + str r1, [sp, #0x14] + ldmia r0, {r0-r2} + stmia r9, {r0-r2} + ldr r0, [r8, #0x8] + add r1, sp, #0x24 + str r0, [sp, #0x24] + ldr r2, [r8, #0x14] + mov r0, r9 + str r2, [sp, #0x28] + ldr r3, [r8, #0x20] + mov r2, r9 + str r3, [sp, #0x2c] + bl VEC_CrossProduct + ldr r0, [sp, #0x18] + cmp r0, #0x0 + bne _0208DD58 + ldr r0, [sp, #0x1c] + cmp r0, #0x0 + bne _0208DD58 + ldr r0, [sp, #0x20] + cmp r0, #0x0 + addeq sp, sp, #0x88 + ldmeqia sp!, {r4-r10,lr} + bxeq lr +_0208DD58: + add r0, sp, #0x18 + mov r1, r0 + bl FUN_020C5288 + add r1, sp, #0x30 + mov r0, r8 + bl MI_Copy36B + add r0, sp, #0x18 + add r1, sp, #0x30 + mov r2, r0 + bl MTX_MultVec33 + add r0, sp, #0xc + mov r1, r8 + mov r2, r0 + bl MTX_MultVec43 + add r0, r6, #0x14 + add r3, sp, #0x0 + ldmia r0, {r0-r2} + stmia r3, {r0-r2} + mov r0, r3 + mov r1, r3 + bl FUN_020C5288 + ldr r0, [r8, #0x20] + ldr r1, [sp, #0x8] + rsb r0, r0, #0x0 + smull r3, r0, r1, r0 + mov r2, #0x800 + adds r1, r3, r2 + ldr r3, [r8, #0x14] + adc r0, r0, #0x0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + ldr r0, [r8, #0x8] + ldr r9, [sp, #0x0] + rsb r0, r0, #0x0 + smull r8, r0, r9, r0 + adds r9, r8, r2 + adc r8, r0, #0x0 + mov r0, r9, lsr #0xc + orr r0, r0, r8, lsl #0x14 + ldr r8, [sp, #0x4] + rsb r3, r3, #0x0 + smull r9, r3, r8, r3 + adds r8, r9, r2 + adc r2, r3, #0x0 + mov r3, r8, lsr #0xc + orr r3, r3, r2, lsl #0x14 + add r0, r0, r3 + adds r1, r1, r0 + ldr r0, [r7, #0x40] + rsbmi r1, r1, #0x0 + ldr r0, [r0, #0x20] + rsb r2, r1, #0x1000 + ldr r0, [r0, #0x0] + mov r9, #0x800 + ldr r0, [r0, #0x48] + ldr r12, [sp, #0x18] + mov r0, r0, lsl #0x8 + mov r0, r0, lsr #0x10 + smull r8, r0, r2, r0 + adds r2, r8, r9 + adc r0, r0, #0x0 + mov r1, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + add r0, r2, #0x1000 + smull r2, r0, r4, r0 + adds r2, r2, r9 + adc r0, r0, #0x0 + mov lr, r2, lsr #0xc + orr lr, lr, r0, lsl #0x14 + smull r0, r4, r12, r5 + adds r8, r0, r9 + ldr r3, [sp, #0x1c] + ldr r0, [sp, #0xc] + rsb r2, r3, #0x0 + str r0, [sp, #0x78] + ldr r0, [sp, #0x10] + smull r10, r5, r3, r5 + str r0, [sp, #0x7c] + smull r3, r0, r2, lr + adc r4, r4, #0x0 + mov r8, r8, lsr #0xc + orr r8, r8, r4, lsl #0x14 + adds r3, r3, r9 + smull lr, r2, r12, lr + str r8, [sp, #0x54] + adc r0, r0, #0x0 + adds r8, r10, r9 + adc r4, r5, #0x0 + adds r5, lr, r9 + mov r9, r3, lsr #0xc + orr r9, r9, r0, lsl #0x14 + mov r8, r8, lsr #0xc + orr r8, r8, r4, lsl #0x14 + ldr r3, [sp, #0x14] + adc r0, r2, #0x0 + mov r5, r5, lsr #0xc + orr r5, r5, r0, lsl #0x14 + mov r4, #0x1000 + ldr r2, _0208E24C ; =0x04000454 + str r9, [sp, #0x60] + str r8, [sp, #0x58] + add r0, sp, #0x54 + str r5, [sp, #0x64] + str r1, [sp, #0x6c] + str r1, [sp, #0x70] + str r1, [sp, #0x5c] + str r1, [sp, #0x68] + str r4, [sp, #0x74] + str r3, [sp, #0x80] + str r1, [r2, #0x0] + bl G3_MultMtx43 + b _0208E1C8 +_0208DF1C: + ldr r3, [r6, #0x8] + ldr r1, [r6, #0x38] + ldr r0, [r2, #0x4] + add r1, r3, r1 + sub r0, r1, r0 + str r0, [sp, #0xc] + ldr r0, [r7, #0x40] + ldr r2, [r6, #0xc] + ldr r0, [r0, #0x20] + ldr r1, [r6, #0x3c] + ldr r0, [r0, #0x0] + add r1, r2, r1 + ldr r0, [r0, #0x8] + add r9, sp, #0x18 + sub r0, r1, r0 + str r0, [sp, #0x10] + ldr r0, [r7, #0x40] + ldr r2, [r6, #0x10] + ldr r0, [r0, #0x20] + ldr r1, [r6, #0x40] + ldr r0, [r0, #0x0] + add r2, r2, r1 + ldr r1, [r0, #0xc] + add r0, r6, #0x14 + sub r1, r2, r1 + str r1, [sp, #0x14] + ldmia r0, {r0-r2} + stmia r9, {r0-r2} + ldr r0, [r8, #0x8] + add r1, sp, #0x24 + str r0, [sp, #0x24] + ldr r2, [r8, #0x14] + mov r0, r9 + str r2, [sp, #0x28] + ldr r3, [r8, #0x20] + mov r2, r9 + str r3, [sp, #0x2c] + bl VEC_CrossProduct + ldr r0, [sp, #0x18] + cmp r0, #0x0 + bne _0208DFE0 + ldr r0, [sp, #0x1c] + cmp r0, #0x0 + bne _0208DFE0 + ldr r0, [sp, #0x20] + cmp r0, #0x0 + addeq sp, sp, #0x88 + ldmeqia sp!, {r4-r10,lr} + bxeq lr +_0208DFE0: + add r0, sp, #0x18 + mov r1, r0 + bl FUN_020C5288 + add r1, sp, #0x30 + mov r0, r8 + bl MI_Copy36B + add r0, sp, #0x18 + add r1, sp, #0x30 + mov r2, r0 + bl MTX_MultVec33 + add r0, sp, #0xc + mov r1, r8 + mov r2, r0 + bl MTX_MultVec43 + add r0, r6, #0x14 + add r3, sp, #0x0 + ldmia r0, {r0-r2} + stmia r3, {r0-r2} + mov r0, r3 + mov r1, r3 + bl FUN_020C5288 + ldr r0, [r8, #0x20] + ldr r1, [sp, #0x8] + rsb r0, r0, #0x0 + smull r3, r0, r1, r0 + mov r2, #0x800 + adds r1, r3, r2 + ldr r3, [r8, #0x14] + adc r0, r0, #0x0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + ldr r0, [r8, #0x8] + ldr r9, [sp, #0x0] + rsb r0, r0, #0x0 + smull r8, r0, r9, r0 + adds r9, r8, r2 + adc r8, r0, #0x0 + mov r0, r9, lsr #0xc + orr r0, r0, r8, lsl #0x14 + ldr r8, [sp, #0x4] + rsb r3, r3, #0x0 + smull r9, r3, r8, r3 + adds r8, r9, r2 + adc r2, r3, #0x0 + mov r3, r8, lsr #0xc + orr r3, r3, r2, lsl #0x14 + add r0, r0, r3 + adds r1, r1, r0 + ldr r0, [r7, #0x40] + rsbmi r1, r1, #0x0 + ldr r0, [r0, #0x20] + rsb r2, r1, #0x1000 + ldr r0, [r0, #0x0] + mov r9, #0x800 + ldr r0, [r0, #0x48] + ldr lr, [sp, #0x18] + mov r0, r0, lsl #0x8 + mov r0, r0, lsr #0x10 + smull r8, r0, r2, r0 + adds r2, r8, r9 + adc r0, r0, #0x0 + mov r1, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + add r0, r2, #0x1000 + smull r2, r0, r4, r0 + adds r2, r2, r9 + adc r0, r0, #0x0 + mov r8, r2, lsr #0xc + orr r8, r8, r0, lsl #0x14 + smull r0, r4, lr, r5 + adds r12, r0, r9 + ldr r3, [sp, #0x1c] + ldr r0, [sp, #0xc] + rsb r2, r3, #0x0 + str r0, [sp, #0x78] + ldr r0, [sp, #0x10] + smull r10, r5, r3, r5 + str r0, [sp, #0x7c] + smull r3, r0, r2, r8 + adc r4, r4, #0x0 + mov r12, r12, lsr #0xc + adds r3, r3, r9 + orr r12, r12, r4, lsl #0x14 + adc r0, r0, #0x0 + adds r10, r10, r9 + smull r8, r2, lr, r8 + adc r4, r5, #0x0 + adds r5, r8, r9 + mov r9, r3, lsr #0xc + orr r9, r9, r0, lsl #0x14 + mov r8, r10, lsr #0xc + orr r8, r8, r4, lsl #0x14 + ldr r3, [sp, #0x14] + adc r0, r2, #0x0 + mov r2, r5, lsr #0xc + orr r2, r2, r0, lsl #0x14 + mov r4, #0x1000 + ldr r0, _0208E24C ; =0x04000454 + str r12, [sp, #0x54] + str r9, [sp, #0x60] + str r8, [sp, #0x58] + str r1, [sp, #0x6c] + str r2, [sp, #0x64] + str r1, [sp, #0x70] + str r1, [sp, #0x5c] + str r1, [sp, #0x68] + str r4, [sp, #0x74] + str r3, [sp, #0x80] + str r1, [r0, #0x0] + ldr r0, [r7, #0x40] + ldr r1, _0208E250 ; =0x04000470 + ldr r2, [r0, #0x20] + add r0, sp, #0x54 + ldr r2, [r2, #0x0] + ldr r4, [r2, #0xc] + ldr r3, [r2, #0x8] + ldr r2, [r2, #0x4] + str r2, [r1, #0x0] + str r3, [r1, #0x0] + str r4, [r1, #0x0] + bl G3_MultMtx43 +_0208E1C8: + ldr r0, [r7, #0x40] + ldrh r4, [r6, #0x36] + ldrh r5, [r0, #0x72] + ldr r1, _0208E254 ; =0x04000480 + and r2, r4, #0x1f + and r0, r5, #0x1f + mul r3, r2, r0 + and r2, r4, #0x3e0 + and r0, r5, #0x3e0 + mul r0, r2, r0 + and r4, r4, #0x7c00 + and r2, r5, #0x7c00 + mul r5, r4, r2 + mov r2, r3, asr #0x5 + mov r0, r0, asr #0xf + mov r3, r5, asr #0x19 + orr r0, r2, r0, lsl #0x5 + orr r0, r0, r3, lsl #0xa + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + str r0, [r1, #0x0] + ldr r2, [r7, #0x40] + ldr r1, [r2, #0x20] + ldrsh r0, [r2, #0x78] + ldr r3, [r1, #0x0] + ldrsh r1, [r2, #0x7a] + ldrsh r2, [r3, #0x50] + ldrsh r3, [r3, #0x52] + bl FUN_0208ECA0 + add sp, sp, #0x88 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_0208E248: .word 0x040004A4 +_0208E24C: .word 0x04000454 +_0208E250: .word 0x04000470 +_0208E254: .word 0x04000480 + + arm_func_start FUN_0208E258 +FUN_0208E258: ; 0x0208E258 + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x40 + mov r6, r1 + ldrh r1, [r6, #0x2e] + mov r7, r0 + ldr r4, [r7, #0x40] + mov r0, r1, lsl #0x16 + mov r2, r1, lsl #0x1b + mov r0, r0, lsr #0x1b + mov r2, r2, lsr #0x1b + add r0, r0, #0x1 + mul r3, r2, r0 + ldr r2, [r4, #0x20] + ldr r0, [r7, #0x3c] + ldr r4, [r2, #0x0] + mov r1, r1, lsl #0x10 + mov r2, r1, lsr #0x1a + orr r1, r0, #0xc0 + ldrsh r0, [r4, #0x30] + movs r4, r3, asr #0x5 + orr r3, r1, r2, lsl #0x18 + ldr r1, [r7, #0x44] + ldr r2, _0208E698 ; =0x040004A4 + orr r3, r3, r4, lsl #0x10 + str r3, [r2, #0x0] + addeq sp, sp, #0x40 + ldr r2, [r2, #0x0] + ldmeqia sp!, {r4-r10,lr} + bxeq lr + ldr r4, [r6, #0x30] + ldr r2, [r7, #0x40] + smull r3, r5, r4, r0 + ldr r0, [r2, #0x20] + mov r8, #0x800 + adds r2, r3, r8 + ldr r3, [r0, #0x0] + adc r9, r5, #0x0 + ldr r0, [r3, #0x48] + mov r5, r2, lsr #0xc + mov r0, r0, lsl #0x1 + mov r2, r4, asr #0x1f + orr r5, r5, r9, lsl #0x14 + movs r0, r0, lsr #0x1d + mov r9, #0x0 + beq _0208E320 + cmp r0, #0x1 + beq _0208E35C + cmp r0, #0x2 + beq _0208E378 + b _0208E39C +_0208E320: + ldrsh r0, [r6, #0x34] + mov lr, r0, asr #0x1f + umull r12, r10, r4, r0 + mla r10, r4, lr, r10 + smull lr, r4, r5, r0 + mla r10, r2, r0, r10 + adds r0, lr, r8 + adc lr, r4, r9 + adds r2, r12, r8 + mov r5, r0, lsr #0xc + adc r0, r10, r9 + mov r4, r2, lsr #0xc + orr r5, r5, lr, lsl #0x14 + orr r4, r4, r0, lsl #0x14 + b _0208E39C +_0208E35C: + ldrsh r0, [r6, #0x34] + smull r2, r0, r5, r0 + adds r2, r2, r8 + adc r0, r0, r9 + mov r5, r2, lsr #0xc + orr r5, r5, r0, lsl #0x14 + b _0208E39C +_0208E378: + ldrsh r10, [r6, #0x34] + mov r0, r10, asr #0x1f + umull lr, r12, r4, r10 + mla r12, r4, r0, r12 + adds r4, lr, r8 + mla r12, r2, r10, r12 + adc r0, r12, r9 + mov r4, r4, lsr #0xc + orr r4, r4, r0, lsl #0x14 +_0208E39C: + ldr r0, [r3, #0x0] + mov r0, r0, lsl #0x8 + movs r0, r0, lsr #0x1f + bne _0208E4BC + ldr r3, [r6, #0x8] + ldr r2, [r6, #0x38] + add r0, sp, #0x0 + add r2, r3, r2 + str r2, [sp, #0x0] + ldr r8, [r6, #0xc] + ldr r3, [r6, #0x3c] + mov r2, r0 + add r3, r8, r3 + str r3, [sp, #0x4] + ldr r8, [r6, #0x10] + ldr r3, [r6, #0x40] + add r3, r8, r3 + str r3, [sp, #0x8] + bl MTX_MultVec43 + ldrh r0, [r6, #0x20] + ldr r2, _0208E69C ; =0x020FFA38 + mov r9, #0x0 + mov r0, r0, asr #0x4 + mov r3, r0, lsl #0x1 + mov r0, r3, lsl #0x1 + ldrsh r1, [r2, r0] + add r0, r3, #0x1 + mov r0, r0, lsl #0x1 + ldrsh r0, [r2, r0] + mov lr, #0x1000 + ldr r3, [sp, #0x0] + ldr r2, [sp, #0x4] + str r3, [sp, #0x30] + smull r12, r10, r1, r5 + str lr, [sp, #0x2c] + rsb r8, r1, #0x0 + ldr r1, [sp, #0x8] + smull lr, r5, r0, r5 + mov r3, #0x800 + str r2, [sp, #0x34] + adds r2, lr, r3 + adc r5, r5, #0x0 + adds r12, r12, r3 + mov lr, r2, lsr #0xc + orr lr, lr, r5, lsl #0x14 + smull r5, r2, r8, r4 + adc r10, r10, #0x0 + mov r8, r12, lsr #0xc + orr r8, r8, r10, lsl #0x14 + adds r5, r5, r3 + smull r10, r4, r0, r4 + adc r0, r2, #0x0 + adds r2, r10, r3 + mov r5, r5, lsr #0xc + orr r5, r5, r0, lsl #0x14 + mov r3, r2, lsr #0xc + adc r0, r4, #0x0 + orr r3, r3, r0, lsl #0x14 + ldr r2, _0208E6A0 ; =0x04000454 + str lr, [sp, #0xc] + add r0, sp, #0xc + str r8, [sp, #0x10] + str r9, [sp, #0x14] + str r5, [sp, #0x18] + str r3, [sp, #0x1c] + str r9, [sp, #0x20] + str r9, [sp, #0x24] + str r9, [sp, #0x28] + str r1, [sp, #0x38] + str r9, [r2, #0x0] + bl G3_MultMtx43 + b _0208E620 +_0208E4BC: + ldr r8, [r6, #0x8] + ldr r2, [r6, #0x38] + ldr r0, [r3, #0x4] + add r2, r8, r2 + sub r0, r2, r0 + str r0, [sp, #0x0] + ldr r2, [r7, #0x40] + ldr r8, [r6, #0xc] + ldr r2, [r2, #0x20] + ldr r3, [r6, #0x3c] + ldr r2, [r2, #0x0] + add r3, r8, r3 + ldr r2, [r2, #0x8] + add r0, sp, #0x0 + sub r2, r3, r2 + str r2, [sp, #0x4] + ldr r2, [r7, #0x40] + ldr r8, [r6, #0x10] + ldr r2, [r2, #0x20] + ldr r3, [r6, #0x40] + ldr r2, [r2, #0x0] + add r8, r8, r3 + ldr r3, [r2, #0xc] + mov r2, r0 + sub r3, r8, r3 + str r3, [sp, #0x8] + bl MTX_MultVec43 + ldrh r0, [r6, #0x20] + ldr r2, _0208E69C ; =0x020FFA38 + mov lr, #0x0 + mov r0, r0, asr #0x4 + mov r3, r0, lsl #0x1 + mov r0, r3, lsl #0x1 + ldrsh r1, [r2, r0] + add r0, r3, #0x1 + mov r0, r0, lsl #0x1 + ldrsh r0, [r2, r0] + mov r10, #0x1000 + ldr r3, [sp, #0x0] + ldr r2, [sp, #0x4] + str r3, [sp, #0x30] + smull r9, r8, r1, r5 + str r10, [sp, #0x2c] + rsb r12, r1, #0x0 + smull r10, r5, r0, r5 + ldr r1, [sp, #0x8] + mov r3, #0x800 + str r2, [sp, #0x34] + adds r2, r10, r3 + adc r5, r5, #0x0 + mov r10, r2, lsr #0xc + orr r10, r10, r5, lsl #0x14 + str r1, [sp, #0x38] + adds r9, r9, r3 + str r10, [sp, #0xc] + adc r10, r8, #0x0 + smull r5, r2, r12, r4 + mov r8, r9, lsr #0xc + orr r8, r8, r10, lsl #0x14 + smull r9, r4, r0, r4 + adds r5, r5, r3 + adc r0, r2, #0x0 + adds r2, r9, r3 + mov r3, r5, lsr #0xc + orr r3, r3, r0, lsl #0x14 + adc r0, r4, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + ldr r0, _0208E6A0 ; =0x04000454 + str r8, [sp, #0x10] + str lr, [sp, #0x14] + str r3, [sp, #0x18] + str r2, [sp, #0x1c] + str lr, [sp, #0x20] + str lr, [sp, #0x24] + str lr, [sp, #0x28] + str lr, [r0, #0x0] + ldr r0, [r7, #0x40] + ldr r1, _0208E6A4 ; =0x04000470 + ldr r2, [r0, #0x20] + add r0, sp, #0xc + ldr r2, [r2, #0x0] + ldr r4, [r2, #0xc] + ldr r3, [r2, #0x8] + ldr r2, [r2, #0x4] + str r2, [r1, #0x0] + str r3, [r1, #0x0] + str r4, [r1, #0x0] + bl G3_MultMtx43 +_0208E620: + ldr r0, [r7, #0x40] + ldrh r4, [r6, #0x36] + ldrh r5, [r0, #0x72] + mov r2, #0x0 + and r1, r4, #0x1f + and r0, r5, #0x1f + mul r3, r1, r0 + and r1, r4, #0x3e0 + and r0, r5, #0x3e0 + mul r0, r1, r0 + and r4, r4, #0x7c00 + and r1, r5, #0x7c00 + mul r5, r4, r1 + mov r1, r3, asr #0x5 + mov r0, r0, asr #0xf + mov r3, r5, asr #0x19 + orr r0, r1, r0, lsl #0x5 + orr r0, r0, r3, lsl #0xa + mov r0, r0, lsl #0x10 + ldr r1, _0208E6A8 ; =0x04000480 + mov r0, r0, lsr #0x10 + str r0, [r1, #0x0] + ldr r1, [r7, #0x40] + mov r3, r2 + ldrsh r0, [r1, #0x7c] + ldrsh r1, [r1, #0x7e] + bl FUN_0208ECA0 + add sp, sp, #0x40 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_0208E698: .word 0x040004A4 +_0208E69C: .word 0x020FFA38 +_0208E6A0: .word 0x04000454 +_0208E6A4: .word 0x04000470 +_0208E6A8: .word 0x04000480 + + arm_func_start FUN_0208E6AC +FUN_0208E6AC: ; 0x0208E6AC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x3c + mov r8, r1 + ldrh r3, [r8, #0x2e] + mov r9, r0 + ldr r1, [r9, #0x40] + mov r0, r3, lsl #0x16 + mov r2, r3, lsl #0x1b + mov r0, r0, lsr #0x1b + ldr r4, [r1, #0x20] + mov r2, r2, lsr #0x1b + ldr r5, [r4, #0x0] + add r0, r0, #0x1 + mul r0, r2, r0 + movs r11, r0, asr #0x5 + mov r3, r3, lsl #0x10 + ldr r2, [r9, #0x3c] + mov r6, r3, lsr #0x1a + orr r3, r2, #0xc0 + ldr r4, [r5, #0x48] + ldrsh r7, [r5, #0x30] + mov r2, r4, lsl #0x1 + ldrh r4, [r1, #0x72] + orr r3, r3, r6, lsl #0x18 + ldrsh r10, [r8, #0x34] + ldrh r5, [r8, #0x36] + ldr r1, [r9, #0x44] + ldr r0, _0208EAE4 ; =0x040004A4 + orr r3, r3, r11, lsl #0x10 + str r3, [r0, #0x0] + mov r2, r2, lsr #0x1d + addeq sp, sp, #0x3c + and r3, r2, #0xff + ldr r0, [r0, #0x0] + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldr r6, [r8, #0x30] + mov r0, #0x800 + smull r7, r2, r6, r7 + adds r7, r7, r0 + adc r2, r2, #0x0 + mov r7, r7, lsr #0xc + cmp r3, #0x0 + mov lr, r6, asr #0x1f + orr r7, r7, r2, lsl #0x14 + mov r2, #0x0 + bne _0208E7A0 + mov r12, r10, asr #0x1f + umull r11, r3, r6, r10 + mla r3, r6, r12, r3 + mla r3, lr, r10, r3 + smull r6, r10, r7, r10 + adds r6, r6, r0 + adc r10, r10, r2 + adds r11, r11, r0 + adc r0, r3, r2 + mov r7, r6, lsr #0xc + mov r6, r11, lsr #0xc + orr r7, r7, r10, lsl #0x14 + orr r6, r6, r0, lsl #0x14 + b _0208E7E0 +_0208E7A0: + cmp r3, #0x1 + bne _0208E7C0 + smull r10, r3, r7, r10 + adds r7, r10, r0 + adc r0, r3, r2 + mov r7, r7, lsr #0xc + orr r7, r7, r0, lsl #0x14 + b _0208E7E0 +_0208E7C0: + mov r12, r10, asr #0x1f + umull r11, r3, r6, r10 + adds r0, r11, r0 + mla r3, r6, r12, r3 + mla r3, lr, r10, r3 + adc r2, r3, r2 + mov r6, r0, lsr #0xc + orr r6, r6, r2, lsl #0x14 +_0208E7E0: + ldr r0, [r9, #0x40] + ldr r0, [r0, #0x20] + ldr r10, [r0, #0x0] + ldr r0, [r10, #0x0] + mov r0, r0, lsl #0x8 + movs r0, r0, lsr #0x1f + bne _0208E90C + ldr r3, [r8, #0x8] + ldr r2, [r8, #0x38] + add r0, sp, #0x0 + add r2, r3, r2 + str r2, [sp, #0x0] + ldr r10, [r8, #0xc] + ldr r3, [r8, #0x3c] + mov r2, r0 + add r3, r10, r3 + str r3, [sp, #0x4] + ldr r10, [r8, #0x10] + ldr r3, [r8, #0x40] + add r3, r10, r3 + str r3, [sp, #0x8] + bl MTX_MultVec43 + ldrh r0, [r8, #0x20] + ldr r2, _0208EAE8 ; =0x020FFA38 + ldr r12, [sp, #0x0] + mov r0, r0, asr #0x4 + mov r3, r0, lsl #0x1 + mov r0, r3, lsl #0x1 + ldrsh r1, [r2, r0] + add r0, r3, #0x1 + mov r0, r0, lsl #0x1 + ldrsh r0, [r2, r0] + str r12, [sp, #0x30] + mov r12, #0x1000 + ldr r2, [sp, #0x4] + smull r11, r10, r1, r7 + str r12, [sp, #0x2c] + rsb r3, r1, #0x0 + ldr r1, [sp, #0x8] + str r2, [sp, #0x34] + mov r8, #0x0 + smull r12, r7, r0, r7 + mov r2, #0x800 + str r1, [sp, #0x38] + adds r1, r12, r2 + adc r12, r7, #0x0 + adds r7, r11, r2 + mov r11, r1, lsr #0xc + orr r11, r11, r12, lsl #0x14 + smull r12, r1, r3, r6 + adc r10, r10, #0x0 + mov r7, r7, lsr #0xc + orr r7, r7, r10, lsl #0x14 + adds r3, r12, r2 + smull r10, r6, r0, r6 + adc r0, r1, #0x0 + adds r1, r10, r2 + mov r3, r3, lsr #0xc + orr r3, r3, r0, lsl #0x14 + mov r2, r1, lsr #0xc + adc r0, r6, #0x0 + orr r2, r2, r0, lsl #0x14 + ldr r1, _0208EAEC ; =0x04000454 + str r11, [sp, #0xc] + add r0, sp, #0xc + str r7, [sp, #0x10] + str r8, [sp, #0x14] + str r3, [sp, #0x18] + str r2, [sp, #0x1c] + str r8, [sp, #0x20] + str r8, [sp, #0x24] + str r8, [sp, #0x28] + str r8, [r1, #0x0] + bl G3_MultMtx43 + b _0208EA70 +_0208E90C: + ldr r3, [r8, #0x8] + ldr r2, [r8, #0x38] + ldr r0, [r10, #0x4] + add r2, r3, r2 + sub r0, r2, r0 + str r0, [sp, #0x0] + ldr r2, [r9, #0x40] + ldr r10, [r8, #0xc] + ldr r2, [r2, #0x20] + ldr r3, [r8, #0x3c] + ldr r2, [r2, #0x0] + add r3, r10, r3 + ldr r2, [r2, #0x8] + add r0, sp, #0x0 + sub r2, r3, r2 + str r2, [sp, #0x4] + ldr r2, [r9, #0x40] + ldr r10, [r8, #0x10] + ldr r2, [r2, #0x20] + ldr r3, [r8, #0x40] + ldr r2, [r2, #0x0] + add r10, r10, r3 + ldr r3, [r2, #0xc] + mov r2, r0 + sub r3, r10, r3 + str r3, [sp, #0x8] + bl MTX_MultVec43 + ldrh r0, [r8, #0x20] + ldr r2, _0208EAE8 ; =0x020FFA38 + mov r8, #0x0 + mov r0, r0, asr #0x4 + mov r3, r0, lsl #0x1 + mov r0, r3, lsl #0x1 + ldrsh r1, [r2, r0] + add r0, r3, #0x1 + mov r0, r0, lsl #0x1 + ldrsh r0, [r2, r0] + ldr r12, [sp, #0x0] + ldr r2, [sp, #0x4] + str r12, [sp, #0x30] + mov r12, #0x1000 + str r2, [sp, #0x34] + smull r11, r10, r1, r7 + str r12, [sp, #0x2c] + rsb r3, r1, #0x0 + ldr r1, [sp, #0x8] + smull r12, r7, r0, r7 + mov r2, #0x800 + str r1, [sp, #0x38] + adds r1, r12, r2 + adc r12, r7, #0x0 + adds r7, r11, r2 + mov r11, r1, lsr #0xc + orr r11, r11, r12, lsl #0x14 + smull r12, r1, r3, r6 + adc r10, r10, #0x0 + mov r7, r7, lsr #0xc + orr r7, r7, r10, lsl #0x14 + smull r10, r6, r0, r6 + adds r3, r12, r2 + adc r0, r1, #0x0 + adds r1, r10, r2 + mov r2, r3, lsr #0xc + orr r2, r2, r0, lsl #0x14 + adc r0, r6, #0x0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [sp, #0x1c] + ldr r0, _0208EAEC ; =0x04000454 + str r11, [sp, #0xc] + str r7, [sp, #0x10] + str r8, [sp, #0x14] + str r2, [sp, #0x18] + str r8, [sp, #0x20] + str r8, [sp, #0x24] + str r8, [sp, #0x28] + str r8, [r0, #0x0] + ldr r0, [r9, #0x40] + ldr r1, _0208EAF0 ; =0x04000470 + ldr r2, [r0, #0x20] + add r0, sp, #0xc + ldr r2, [r2, #0x0] + ldr r6, [r2, #0xc] + ldr r3, [r2, #0x8] + ldr r2, [r2, #0x4] + str r2, [r1, #0x0] + str r3, [r1, #0x0] + str r6, [r1, #0x0] + bl G3_MultMtx43 +_0208EA70: + and r1, r5, #0x1f + and r0, r4, #0x1f + mul r2, r1, r0 + and r1, r5, #0x3e0 + and r0, r4, #0x3e0 + mul r0, r1, r0 + and r3, r5, #0x7c00 + and r1, r4, #0x7c00 + mul r4, r3, r1 + mov r1, r2, asr #0x5 + mov r0, r0, asr #0xf + mov r2, r4, asr #0x19 + orr r0, r1, r0, lsl #0x5 + orr r0, r0, r2, lsl #0xa + mov r0, r0, lsl #0x10 + ldr r1, _0208EAF4 ; =0x04000480 + mov r0, r0, lsr #0x10 + str r0, [r1, #0x0] + ldr r2, [r9, #0x40] + ldr r1, [r2, #0x20] + ldrsh r0, [r2, #0x78] + ldr r3, [r1, #0x0] + ldrsh r1, [r2, #0x7a] + ldrsh r2, [r3, #0x50] + ldrsh r3, [r3, #0x52] + bl FUN_0208ECA0 + add sp, sp, #0x3c + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0208EAE4: .word 0x040004A4 +_0208EAE8: .word 0x020FFA38 +_0208EAEC: .word 0x04000454 +_0208EAF0: .word 0x04000470 +_0208EAF4: .word 0x04000480 + + arm_func_start FUN_0208EAF8 +FUN_0208EAF8: ; 0x0208EAF8 + str r1, [r2, #0x0] + mov r12, #0x0 + str r12, [r2, #0xc] + str r0, [r2, #0x18] + str r12, [r2, #0x24] + str r12, [r2, #0x4] + mov r3, #0x1000 + str r3, [r2, #0x10] + str r12, [r2, #0x1c] + str r12, [r2, #0x28] + rsb r0, r0, #0x0 + str r0, [r2, #0x8] + str r12, [r2, #0x14] + str r1, [r2, #0x20] + str r12, [r2, #0x2c] + bx lr + + arm_func_start FUN_0208EB38 +FUN_0208EB38: ; 0x0208EB38 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r3, _0208EBDC ; =0x00000555 + rsb r7, r1, #0x1000 + ldr ip, _0208EBE0 ; =0x0000093D + mov r4, #0x0 + umull r9, r8, r7, r3 + umull r6, r5, r0, r12 + mov lr, #0x800 + adds r9, r9, lr + mla r8, r7, r4, r8 + mov r7, r7, asr #0x1f + mla r8, r7, r3, r8 + adc r7, r8, #0x0 + mov r3, r9, lsr #0xc + adds r6, r6, lr + orr r3, r3, r7, lsl #0x14 + add r1, r3, r1 + mla r5, r0, r4, r5 + mov r0, r0, asr #0x1f + mla r5, r0, r12, r5 + adc r0, r5, #0x0 + mov r5, r6, lsr #0xc + orr r5, r5, r0, lsl #0x14 + str r1, [r2, #0x0] + add r12, r3, r5 + str r12, [r2, #0xc] + sub r0, r3, r5 + str r0, [r2, #0x18] + str r4, [r2, #0x24] + str r0, [r2, #0x4] + str r1, [r2, #0x10] + str r12, [r2, #0x1c] + str r4, [r2, #0x28] + str r12, [r2, #0x8] + str r0, [r2, #0x14] + str r1, [r2, #0x20] + str r4, [r2, #0x2c] + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_0208EBDC: .word 0x00000555 +_0208EBE0: .word 0x0000093D + + arm_func_start FUN_0208EBE4 +FUN_0208EBE4: ; 0x0208EBE4 + stmdb sp!, {r4-r8,lr} + sub r7, r2, #0x1000 + add r5, r3, #0x1000 + add r4, r2, #0x1000 + mov r2, r0, lsl #0x8 + mov r0, r1, lsl #0x8 + sub r3, r3, #0x1000 + mov r0, r0, lsr #0x10 + mov r1, r2, lsr #0x10 + ldr ip, _0208EC8C ; =0x04000500 + mov r8, #0x1 + ldr r6, _0208EC90 ; =0x000003FF + mov r2, r7, lsl #0x10 + mov lr, r5, lsl #0x10 + mov r4, r4, lsl #0x10 + mov r5, r3, lsl #0x10 + ldr r3, _0208EC94 ; =0x04000488 + str r8, [r12, #0x0] + mov r12, #0x0 + and r2, r6, r2, asr #0x16 + and r7, r6, lr, asr #0x16 + and lr, r6, r4, asr #0x16 + and r4, r6, r5, asr #0x16 + ldr r6, _0208EC98 ; =0x04000490 + str r12, [r3, #0x0] + orr r5, r2, r7, lsl #0x14 + str r5, [r6, #0x0] + str r1, [r3, #0x0] + orr r5, lr, r7, lsl #0x14 + str r5, [r6, #0x0] + orr r1, r1, r0, lsl #0x10 + str r1, [r3, #0x0] + orr r1, lr, r4, lsl #0x14 + str r1, [r6, #0x0] + mov r0, r0, lsl #0x10 + str r0, [r3, #0x0] + orr r1, r2, r4, lsl #0x14 + ldr r0, _0208EC9C ; =0x04000504 + str r1, [r6, #0x0] + str r12, [r0, #0x0] + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0208EC8C: .word 0x04000500 +_0208EC90: .word 0x000003FF +_0208EC94: .word 0x04000488 +_0208EC98: .word 0x04000490 +_0208EC9C: .word 0x04000504 + + arm_func_start FUN_0208ECA0 +FUN_0208ECA0: ; 0x0208ECA0 + stmdb sp!, {r4-r8,lr} + add r12, r3, #0x1000 + sub r5, r2, #0x1000 + add r4, r2, #0x1000 + mov r2, r0, lsl #0x8 + mov r0, r1, lsl #0x8 + sub r3, r3, #0x1000 + mov r0, r0, lsr #0x10 + mov r1, r2, lsr #0x10 + ldr r7, _0208ED48 ; =0x04000500 + mov r8, #0x1 + ldr r6, _0208ED4C ; =0x000003FF + mov r2, r12, lsl #0x10 + mov lr, r5, lsl #0x10 + mov r4, r4, lsl #0x10 + mov r5, r3, lsl #0x10 + ldr r3, _0208ED50 ; =0x04000488 + str r8, [r7, #0x0] + mov r12, #0x0 + and r7, r6, r2, asr #0x16 + and r2, r6, lr, asr #0x16 + and lr, r6, r4, asr #0x16 + and r4, r6, r5, asr #0x16 + ldr r6, _0208ED54 ; =0x04000490 + str r12, [r3, #0x0] + orr r5, r2, r7, lsl #0xa + str r5, [r6, #0x0] + str r1, [r3, #0x0] + orr r5, lr, r7, lsl #0xa + str r5, [r6, #0x0] + orr r1, r1, r0, lsl #0x10 + str r1, [r3, #0x0] + orr r1, lr, r4, lsl #0xa + str r1, [r6, #0x0] + mov r0, r0, lsl #0x10 + str r0, [r3, #0x0] + orr r1, r2, r4, lsl #0xa + ldr r0, _0208ED58 ; =0x04000504 + str r1, [r6, #0x0] + str r12, [r0, #0x0] + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0208ED48: .word 0x04000500 +_0208ED4C: .word 0x000003FF +_0208ED50: .word 0x04000488 +_0208ED54: .word 0x04000490 +_0208ED58: .word 0x04000504 + + arm_func_start FUN_0208ED5C +FUN_0208ED5C: ; 0x0208ED5C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x24 + ldr r3, [r1, #0x20] + str r1, [sp, #0x0] + ldr r6, [r3, #0x14] + mov r8, r0 + ldrb r3, [r6, #0x8] + ldrb r0, [r6, #0xc] + str r2, [sp, #0x4] + mov r3, r3, lsl #0xc + mov r2, r3, asr #0x1f + mov r2, r2, lsl #0x4 + mov r1, #0x800 + mov r4, r3, lsl #0x4 + adds r4, r4, r1 + orr r2, r2, r3, lsr #0x1c + adc r1, r2, #0x0 + mov r5, r4, lsr #0xc + cmp r0, #0x0 + mov r0, #0x0 + str r0, [sp, #0x8] + orr r5, r5, r1, lsl #0x14 + addle sp, sp, #0x24 + ldmleia sp!, {r4-r11,lr} + bxle lr + ldr sb, _0208F06C ; =0x021C8C5C + str r0, [sp, #0x18] + str r0, [sp, #0x14] + str r0, [sp, #0x1c] + str r0, [sp, #0x20] + mov r0, #0x1000 + mov r4, r5, asr #0x1f + str r0, [sp, #0x10] +_0208EDE0: + ldr r0, [sp, #0x4] + bl FUN_02090A58 + movs r7, r0 + addeq sp, sp, #0x24 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldr r0, [sp, #0x0] + mov r1, r7 + add r0, r0, #0x14 + bl FUN_02090AA4 + add r0, r7, #0x38 + add r1, r8, #0x8 + str r0, [sp, #0xc] + add r10, r7, #0x8 + ldmia r1, {r0-r2} + stmia r10, {r0-r2} + ldr r10, [r8, #0x14] + ldr r12, [r9, #0x0] + ldr r1, _0208F070 ; =0x5EEDF715 + ldr r0, _0208F074 ; =0x1B0CB173 + mov r2, r10, asr #0x1f + mla r0, r12, r1, r0 + str r0, [r9, #0x0] + umull lr, r12, r10, r5 + mla r12, r10, r4, r12 + ldrsh r1, [r6, #0x2] + mov r0, r0, lsr #0x17 + mla r12, r2, r5, r12 + mul r0, r1, r0 + mov r3, #0x800 + adds r2, lr, r3 + sub r0, r0, r1, lsl #0x8 + adc r10, r12, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r10, lsl #0x14 + add r0, r2, r0, asr #0x8 + str r0, [r7, #0x14] + ldr r10, [r8, #0x18] + ldr r12, [r9, #0x0] + ldr r1, _0208F070 ; =0x5EEDF715 + ldr r0, _0208F074 ; =0x1B0CB173 + mov r2, r10, asr #0x1f + mla r0, r12, r1, r0 + str r0, [r9, #0x0] + umull lr, r12, r10, r5 + mla r12, r10, r4, r12 + mla r12, r2, r5, r12 + adds r2, lr, r3 + ldrsh r1, [r6, #0x2] + mov r0, r0, lsr #0x17 + adc r10, r12, #0x0 + mul r0, r1, r0 + mov r2, r2, lsr #0xc + sub r0, r0, r1, lsl #0x8 + orr r2, r2, r10, lsl #0x14 + add r0, r2, r0, asr #0x8 + str r0, [r7, #0x18] + ldr r12, [r8, #0x1c] + ldr r10, [r9, #0x0] + ldr r1, _0208F070 ; =0x5EEDF715 + ldr r0, _0208F074 ; =0x1B0CB173 + mov r2, r12, asr #0x1f + mla r0, r10, r1, r0 + umull r10, lr, r12, r5 + str r0, [r9, #0x0] + mla lr, r12, r4, lr + adds r3, r10, r3 + mla lr, r2, r5, lr + ldrsh r1, [r6, #0x2] + mov r0, r0, lsr #0x17 + adc r2, lr, #0x0 + mul r0, r1, r0 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + sub r0, r0, r1, lsl #0x8 + add r0, r3, r0, asr #0x8 + ldr r3, [sp, #0xc] + add r11, r8, #0x38 + str r0, [r7, #0x1c] + ldmia r11, {r0-r2} + stmia r3, {r0-r2} + ldrb r0, [r6, #0x9] + ldrsh r1, [r8, #0x34] + ldr r2, [r8, #0x30] + add r0, r0, #0x1 + mul r1, r2, r1 + mov r1, r1, asr #0xc + mul r0, r1, r0 + mov r0, r0, asr #0x6 + str r0, [r7, #0x30] + ldr r0, [sp, #0x10] + strh r0, [r7, #0x34] + ldrh r0, [r6, #0x0] + mov r0, r0, lsl #0x19 + movs r0, r0, lsr #0x1f + ldrneh r0, [r6, #0xa] + strneh r0, [r7, #0x36] + ldreqh r0, [r8, #0x36] + streqh r0, [r7, #0x36] + ldrh r1, [r8, #0x2e] + ldrh r0, [r7, #0x2e] + mov r2, r1, lsl #0x1b + mov r1, r1, lsl #0x16 + mov r1, r1, lsr #0x1b + mov r2, r2, lsr #0x1b + add r1, r1, #0x1 + mul r1, r2, r1 + mov r1, r1, lsl #0xb + mov r1, r1, lsr #0x10 + bic r0, r0, #0x1f + and r1, r1, #0x1f + orr r0, r0, r1 + strh r0, [r7, #0x2e] + ldrh r0, [r7, #0x2e] + bic r0, r0, #0x3e0 + orr r0, r0, #0x3e0 + strh r0, [r7, #0x2e] + ldrh r0, [r6, #0x0] + mov r0, r0, lsl #0x1b + movs r0, r0, lsr #0x1e + beq _0208EFE4 + cmp r0, #0x1 + beq _0208EFF4 + cmp r0, #0x2 + ldreqh r0, [r8, #0x20] + streqh r0, [r7, #0x20] + ldreqsh r0, [r8, #0x22] + streqh r0, [r7, #0x22] + b _0208F004 +_0208EFE4: + ldr r0, [sp, #0x14] + strh r0, [r7, #0x20] + strh r0, [r7, #0x22] + b _0208F004 +_0208EFF4: + ldrh r0, [r8, #0x20] + strh r0, [r7, #0x20] + ldr r0, [sp, #0x18] + strh r0, [r7, #0x22] +_0208F004: + ldrh r1, [r6, #0x6] + ldr r0, _0208F078 ; =0x0000FFFF + strh r1, [r7, #0x24] + ldr r1, [sp, #0x1c] + strh r1, [r7, #0x26] + ldrb r1, [r6, #0xf] + strb r1, [r7, #0x2c] + ldrh r1, [r8, #0x24] + mov r1, r1, lsr #0x1 + bl _s32_div_f + strh r0, [r7, #0x28] + ldrh r1, [r8, #0x24] + ldr r0, _0208F078 ; =0x0000FFFF + bl _s32_div_f + strh r0, [r7, #0x2a] + ldr r0, [sp, #0x20] + strb r0, [r7, #0x2d] + ldr r0, [sp, #0x8] + ldrb r1, [r6, #0xc] + add r0, r0, #0x1 + str r0, [sp, #0x8] + cmp r0, r1 + blt _0208EDE0 + add sp, sp, #0x24 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0208F06C: .word 0x021C8C5C +_0208F070: .word 0x5EEDF715 +_0208F074: .word 0x1B0CB173 +_0208F078: .word 0x0000FFFF + + arm_func_start FUN_0208F07C +FUN_0208F07C: ; 0x0208F07C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc4 + mov r9, r0 + ldr r0, [r9, #0x20] + ldrsh r3, [r9, #0x4e] + str r0, [sp, #0x4] + ldr r0, [r9, #0x58] + ldr r2, _0208FD88 ; =0x00000FFF + add r3, r0, r3 + ldr r0, [sp, #0x4] + str r1, [sp, #0x0] + ldr r8, [r0, #0x0] + and r0, r3, r2 + strh r0, [r9, #0x4e] + ldr r0, [r8, #0x0] + mov r0, r0, lsl #0x1c + mov r1, r0, lsr #0x1c + mov r0, r3, asr #0xc + cmp r1, #0x2 + str r0, [sp, #0xc] + beq _0208F0E4 + cmp r1, #0x3 + beq _0208F0E4 + sub r0, r1, #0x5 + cmp r0, #0x4 + bhi _0208F0EC +_0208F0E4: + mov r0, r9 + bl FUN_0208FF08 +_0208F0EC: + ldr r0, [sp, #0xc] + cmp r0, #0x0 + mov r0, #0x0 + str r0, [sp, #0x8] + addle sp, sp, #0xc4 + ldmleia sp!, {r4-r11,lr} + bxle lr + str r0, [sp, #0x18] + str r0, [sp, #0x24] + str r0, [sp, #0x20] + str r0, [sp, #0x1c] + mov r0, #0x1000 + str r0, [sp, #0x34] + ldr r0, [sp, #0x8] + ldr r6, _0208FD8C ; =0x021C8C5C + ldr r4, _0208FD90 ; =0x5EEDF715 + ldr r5, _0208FD94 ; =0x1B0CB173 + str r0, [sp, #0x38] + str r0, [sp, #0x3c] + str r0, [sp, #0x40] +_0208F13C: + ldr r0, [sp, #0x0] + bl FUN_02090A58 + movs r7, r0 + addeq sp, sp, #0xc4 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + add r0, r9, #0x8 + mov r1, r7 + bl FUN_02090AA4 +_0208F160: ; 0x0208F160 + ldr r0, [r8, #0x0] + mov r0, r0, lsl #0x1c + mov r0, r0, lsr #0x1c + cmp r0, #0x9 + addls pc, pc, r0, lsl #0x2 + b _0208F87C +_0208F178: + b _0208F1A0 +_0208F17C: + b _0208F1BC +_0208F180: + b _0208F22C +_0208F184: + b _0208F294 +_0208F188: + b _0208F328 +_0208F18C: + b _0208F428 +_0208F190: + b _0208F720 +_0208F194: + b _0208F7A4 +_0208F198: + b _0208F4E4 +_0208F19C: + b _0208F5B4 +_0208F1A0: + ldr r0, [sp, #0x1c] + str r0, [r7, #0x10] + ldr r0, [r7, #0x10] + str r0, [r7, #0xc] + ldr r0, [r7, #0xc] + str r0, [r7, #0x8] + b _0208F87C +_0208F1BC: + add r0, r7, #0x8 + bl FUN_02090B50 + ldr r2, [r7, #0x8] + ldr r1, [r9, #0x5c] + mov r0, #0x800 + smull r3, r1, r2, r1 + adds r2, r3, r0 + adc r1, r1, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [r7, #0x8] + ldr r2, [r7, #0xc] + ldr r1, [r9, #0x5c] + smull r3, r1, r2, r1 + adds r2, r3, r0 + adc r1, r1, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [r7, #0xc] + ldr r2, [r7, #0x10] + ldr r1, [r9, #0x5c] + smull r3, r1, r2, r1 + adds r2, r3, r0 + adc r0, r1, #0x0 + mov r1, r2, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [r7, #0x10] + b _0208F87C +_0208F22C: + add r0, sp, #0x58 + bl FUN_02090AF4 + ldr r2, [sp, #0x58] + ldr r0, [r9, #0x5c] + mov r1, #0x800 + smull r3, r0, r2, r0 + adds r2, r3, r1 + adc r0, r0, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [sp, #0x58] + ldr r3, [sp, #0x5c] + ldr r2, [r9, #0x5c] + add r0, r7, #0x8 + smull r10, r2, r3, r2 + adds r3, r10, r1 + adc r1, r2, #0x0 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + ldr r1, [sp, #0x20] + str r2, [sp, #0x5c] + str r1, [sp, #0x60] + add r1, sp, #0x58 + mov r2, r9 + bl FUN_0208FDA8 + b _0208F87C +_0208F294: + ldr r0, [sp, #0x18] + ldr r1, [sp, #0xc] + bl _s32_div_f + ldr r1, [sp, #0x18] + mov r0, r0, asr #0x4 + add r1, r1, #0x10000 + mov r2, r0, lsl #0x1 + str r1, [sp, #0x18] + ldr r0, _0208FD98 ; =0x020FFA38 + mov r1, r2, lsl #0x1 + ldrsh r0, [r0, r1] + add r1, r2, #0x1 + mov r2, r1, lsl #0x1 + ldr r1, _0208FD98 ; =0x020FFA38 + ldrsh r3, [r1, r2] + ldr r2, [r9, #0x5c] + mov r1, #0x800 + smull r10, r2, r0, r2 + adds r10, r10, r1 + adc r0, r2, #0x0 + mov r2, r10, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [sp, #0x64] + ldr r2, [r9, #0x5c] + add r0, r7, #0x8 + smull r10, r2, r3, r2 + adds r3, r10, r1 + adc r1, r2, #0x0 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + ldr r1, [sp, #0x24] + str r2, [sp, #0x68] + str r1, [sp, #0x6c] + add r1, sp, #0x64 + mov r2, r9 + bl FUN_0208FDA8 + b _0208F87C +_0208F328: + add r0, r7, #0x8 + bl FUN_02090B50 + ldr r1, [r6, #0x0] + mov r0, #0x800 + mla r2, r1, r4, r5 + str r2, [r6, #0x0] + mov r1, r2, lsr #0x17 + mov r1, r1, lsl #0xc + sub r1, r1, #0x100000 + mov r1, r1, asr #0x8 + ldr r3, [r7, #0x8] + ldr r2, [r9, #0x5c] + smull r10, r2, r3, r2 + adds r3, r10, r0 + adc r2, r2, #0x0 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + smull r2, r1, r3, r1 + adds r2, r2, r0 + adc r1, r1, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [r7, #0x8] + ldr r1, [r6, #0x0] + mla r2, r1, r4, r5 + str r2, [r6, #0x0] + mov r1, r2, lsr #0x17 + mov r1, r1, lsl #0xc + sub r1, r1, #0x100000 + mov r1, r1, asr #0x8 + ldr r3, [r7, #0xc] + ldr r2, [r9, #0x5c] + smull r10, r2, r3, r2 + adds r3, r10, r0 + adc r2, r2, #0x0 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + smull r2, r1, r3, r1 + adds r2, r2, r0 + adc r1, r1, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [r7, #0xc] + ldr r1, [r6, #0x0] + mla r2, r1, r4, r5 + str r2, [r6, #0x0] + mov r1, r2, lsr #0x17 + mov r1, r1, lsl #0xc + sub r1, r1, #0x100000 + mov r1, r1, asr #0x8 + ldr r3, [r7, #0x10] + ldr r2, [r9, #0x5c] + smull r10, r2, r3, r2 + adds r3, r10, r0 + adc r2, r2, #0x0 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + smull r2, r1, r3, r1 + adds r2, r2, r0 + adc r0, r1, #0x0 + mov r1, r2, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [r7, #0x10] + b _0208F87C +_0208F428: + add r0, sp, #0x70 + bl FUN_02090AF4 +_0208F430: ; 0x0208F430 + ldr r0, [r6, #0x0] + ldr r3, [sp, #0x70] + mla r1, r0, r4, r5 + str r1, [r6, #0x0] + ldr r0, [r9, #0x5c] + mov r2, #0x800 + smull r10, r0, r3, r0 + adds r10, r10, r2 + adc r3, r0, #0x0 + mov r0, r10, lsr #0xc + orr r0, r0, r3, lsl #0x14 + mov r3, r1, lsr #0x17 + mov r3, r3, lsl #0xc + sub r3, r3, #0x100000 + mov r3, r3, asr #0x8 + smull r10, r3, r0, r3 + adds r10, r10, r2 + adc r0, r3, #0x0 + mov r3, r10, lsr #0xc + orr r3, r3, r0, lsl #0x14 + mla r0, r1, r4, r5 + str r0, [r6, #0x0] + str r3, [sp, #0x70] + mov r0, r0, lsr #0x17 + mov r0, r0, lsl #0xc + sub r0, r0, #0x100000 + mov r1, r0, asr #0x8 + ldr r10, [sp, #0x74] + ldr r3, [r9, #0x5c] + add r0, r7, #0x8 + smull r11, r3, r10, r3 + adds r10, r11, r2 + adc r3, r3, #0x0 + mov r10, r10, lsr #0xc + orr r10, r10, r3, lsl #0x14 + smull r3, r1, r10, r1 + adds r2, r3, r2 + adc r1, r1, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [sp, #0x74] + add r1, sp, #0x70 + mov r2, r9 + bl FUN_0208FDA8 + b _0208F87C +_0208F4E4: + add r0, r7, #0x8 + bl FUN_02090B50 + add r0, r9, #0x84 + add r1, r9, #0x8a + add r2, sp, #0x44 + bl VEC_Fx16CrossProduct + ldrsh r1, [sp, #0x46] + ldrsh r0, [sp, #0x48] + ldrsh r2, [sp, #0x44] + str r1, [sp, #0x80] + str r0, [sp, #0x84] + add r0, sp, #0x7c + add r1, r7, #0x8 + str r2, [sp, #0x7c] + bl VEC_DotProduct +_0208F520: ; 0x0208F520 + cmp r0, #0x0 + bgt _0208F54C + ldr r0, [r7, #0x8] + rsb r0, r0, #0x0 + str r0, [r7, #0x8] + ldr r0, [r7, #0xc] + rsb r0, r0, #0x0 + str r0, [r7, #0xc] + ldr r0, [r7, #0x10] + rsb r0, r0, #0x0 + str r0, [r7, #0x10] +_0208F54C: + ldr r2, [r7, #0x8] + ldr r1, [r9, #0x5c] + mov r0, #0x800 + smull r3, r1, r2, r1 + adds r2, r3, r0 + adc r1, r1, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [r7, #0x8] + ldr r2, [r7, #0xc] + ldr r1, [r9, #0x5c] + smull r3, r1, r2, r1 + adds r2, r3, r0 + adc r1, r1, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [r7, #0xc] + ldr r2, [r7, #0x10] + ldr r1, [r9, #0x5c] + smull r3, r1, r2, r1 + adds r2, r3, r0 + adc r0, r1, #0x0 + mov r1, r2, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [r7, #0x10] + b _0208F87C +_0208F5B4: + add r0, r7, #0x8 + bl FUN_02090B50 + add r0, r9, #0x84 + add r1, r9, #0x8a + add r2, sp, #0x4a + bl VEC_Fx16CrossProduct + ldrsh r1, [sp, #0x4c] + ldrsh r0, [sp, #0x4e] + ldrsh r2, [sp, #0x4a] + str r1, [sp, #0x8c] + str r0, [sp, #0x90] + add r0, sp, #0x88 + add r1, r7, #0x8 + str r2, [sp, #0x88] + bl VEC_DotProduct +_0208F5F0: ; 0x0208F5F0 + cmp r0, #0x0 + bge _0208F61C + ldr r0, [r7, #0x8] + rsb r0, r0, #0x0 + str r0, [r7, #0x8] + ldr r0, [r7, #0xc] + rsb r0, r0, #0x0 + str r0, [r7, #0xc] + ldr r0, [r7, #0x10] + rsb r0, r0, #0x0 + str r0, [r7, #0x10] +_0208F61C: + ldr r1, [r6, #0x0] + mov r0, #0x800 + mla r2, r1, r4, r5 + str r2, [r6, #0x0] + mov r1, r2, lsr #0x17 + mov r1, r1, lsl #0xc + sub r1, r1, #0x100000 + mov r1, r1, asr #0x9 + add r1, r1, #0x800 + ldr r3, [r7, #0x8] + ldr r2, [r9, #0x5c] + smull r10, r2, r3, r2 + adds r3, r10, r0 + adc r2, r2, #0x0 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + smull r2, r1, r3, r1 + adds r2, r2, r0 + adc r1, r1, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [r7, #0x8] + ldr r1, [r6, #0x0] + mla r2, r1, r4, r5 + str r2, [r6, #0x0] + mov r1, r2, lsr #0x17 + mov r1, r1, lsl #0xc + sub r1, r1, #0x100000 + mov r1, r1, asr #0x9 + add r1, r1, #0x800 + ldr r3, [r7, #0xc] + ldr r2, [r9, #0x5c] + smull r10, r2, r3, r2 + adds r3, r10, r0 + adc r2, r2, #0x0 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + smull r2, r1, r3, r1 + adds r2, r2, r0 + adc r1, r1, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [r7, #0xc] + ldr r1, [r6, #0x0] + mla r2, r1, r4, r5 + str r2, [r6, #0x0] + mov r1, r2, lsr #0x17 + mov r1, r1, lsl #0xc + sub r1, r1, #0x100000 + mov r1, r1, asr #0x9 + add r1, r1, #0x800 + ldr r3, [r7, #0x10] + ldr r2, [r9, #0x5c] + smull r10, r2, r3, r2 + adds r3, r10, r0 + adc r2, r2, #0x0 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + smull r2, r1, r3, r1 + adds r2, r2, r0 + adc r0, r1, #0x0 + mov r1, r2, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [r7, #0x10] + b _0208F87C +_0208F720: + add r0, r7, #0x14 + bl FUN_02090AF4 + ldr r2, [r7, #0x14] + ldr r1, [r9, #0x5c] + mov r0, #0x800 + smull r3, r1, r2, r1 + adds r2, r3, r0 + adc r1, r1, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [sp, #0x94] + ldr r3, [r7, #0x18] + ldr r2, [r9, #0x5c] + ldr r1, [r6, #0x0] + smull r10, r2, r3, r2 + adds r3, r10, r0 + adc r0, r2, #0x0 + mov r2, r3, lsr #0xc + orr r2, r2, r0, lsl #0x14 + mla r0, r1, r4, r5 + str r0, [r6, #0x0] + str r2, [sp, #0x98] + mov r1, r0, lsr #0x17 + ldr r2, [r9, #0x60] + add r0, r7, #0x8 + mul r1, r2, r1 + sub r1, r1, r2, lsl #0x8 + mov r1, r1, asr #0x8 + str r1, [sp, #0x9c] + add r1, sp, #0x94 + mov r2, r9 + bl FUN_0208FDA8 + b _0208F87C +_0208F7A4: + add r0, r7, #0x14 + bl FUN_02090AF4 +_0208F7AC: ; 0x0208F7AC + ldr r0, [r6, #0x0] + mov r3, #0x800 + mla r2, r0, r4, r5 + str r2, [r6, #0x0] + ldr r10, [r7, #0x14] + ldr r0, [r9, #0x5c] + mov r1, r2, lsr #0x17 + smull r11, r0, r10, r0 + adds r11, r11, r3 + mov r1, r1, lsl #0xc + adc r10, r0, #0x0 + mov r0, r11, lsr #0xc + sub r1, r1, #0x100000 + orr r0, r0, r10, lsl #0x14 + mov r1, r1, asr #0x8 + smull r10, r1, r0, r1 + adds r10, r10, r3 + adc r0, r1, #0x0 + mov r1, r10, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [sp, #0xa0] + mla r1, r2, r4, r5 + str r1, [r6, #0x0] + mov r2, r1, lsr #0x17 + mov r2, r2, lsl #0xc + sub r2, r2, #0x100000 + ldr r10, [r7, #0x18] + ldr r0, [r9, #0x5c] + mov r2, r2, asr #0x8 + smull r11, r0, r10, r0 + adds r11, r11, r3 + adc r10, r0, #0x0 + mov r0, r11, lsr #0xc + orr r0, r0, r10, lsl #0x14 + smull r10, r2, r0, r2 + adds r3, r10, r3 + adc r0, r2, #0x0 + mov r2, r3, lsr #0xc + orr r2, r2, r0, lsl #0x14 + mla r0, r1, r4, r5 + str r0, [r6, #0x0] + str r2, [sp, #0xa4] + mov r1, r0, lsr #0x17 + ldr r2, [r9, #0x60] + add r0, r7, #0x8 + mul r1, r2, r1 + sub r1, r1, r2, lsl #0x8 + mov r1, r1, asr #0x8 + str r1, [sp, #0xa8] + add r1, sp, #0xa0 + mov r2, r9 + bl FUN_0208FDA8 +_0208F87C: + ldr r1, [r6, #0x0] + mla r0, r1, r4, r5 + str r0, [r6, #0x0] + ldrb r2, [r8, #0x42] + mov r1, r0, lsr #0x18 + ldr r3, [r9, #0x64] + mul r1, r2, r1 + add r2, r2, #0xff + sub r1, r2, r1, asr #0x7 + mul r1, r3, r1 + mov r1, r1, asr #0x8 + str r1, [sp, #0x10] + mla r1, r0, r4, r5 + str r1, [r6, #0x0] + mov r0, r1, lsr #0x18 + ldrb r2, [r8, #0x42] + ldr r3, [r9, #0x68] + ldr r1, [r8, #0x0] + mul r0, r2, r0 + add r2, r2, #0xff + sub r0, r2, r0, asr #0x7 + mul r0, r3, r0 + mov r0, r0, asr #0x8 + str r0, [sp, #0x14] + mov r0, r1, lsl #0x1c + mov r0, r0, lsr #0x1c + cmp r0, #0x6 + bne _0208F9C8 + ldrsh r0, [r9, #0x84] + ldr r1, [r7, #0x14] + mov r2, #0x800 + smull r3, r0, r1, r0 + adds r1, r3, r2 + ldrsh r3, [r9, #0x8a] + ldr lr, [r7, #0x18] + mov r12, r1, lsr #0xc + smull r10, r3, lr, r3 + adc r0, r0, #0x0 + adds r10, r10, r2 + orr r12, r12, r0, lsl #0x14 + adc r3, r3, #0x0 + mov r10, r10, lsr #0xc + orr r10, r10, r3, lsl #0x14 + add r3, r12, r10 + str r3, [sp, #0xb8] + ldrsh r10, [r9, #0x86] + ldr r3, [r7, #0x14] + ldrsh lr, [r9, #0x8c] + smull r12, r10, r3, r10 + adds r12, r12, r2 + ldr r11, [r7, #0x18] + adc r10, r10, #0x0 + smull r3, lr, r11, lr + mov r12, r12, lsr #0xc + adds r3, r3, r2 + orr r12, r12, r10, lsl #0x14 + adc r10, lr, #0x0 + mov r3, r3, lsr #0xc + orr r3, r3, r10, lsl #0x14 + add r3, r12, r3 + str r3, [sp, #0xbc] + ldr r10, [r7, #0x18] + ldrsh r11, [r9, #0x88] + ldr r3, [r7, #0x14] + str r10, [sp, #0x28] + smull r12, r11, r3, r11 + ldrsh r10, [r9, #0x8e] + ldr r3, [sp, #0x28] + adds r12, r12, r2 + smull r10, lr, r3, r10 + adc r3, r11, #0x0 + adds r2, r10, r2 + mov r10, r12, lsr #0xc + orr r10, r10, r3, lsl #0x14 + adc r3, lr, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r3, lsl #0x14 + add r2, r10, r2 + add r0, sp, #0xb8 + add r1, sp, #0xac + str r2, [sp, #0xc0] + bl FUN_020C5288 + b _0208FA04 +_0208F9C8: + ldr r0, [r7, #0x8] + cmp r0, #0x0 + bne _0208F9F8 + ldr r0, [r7, #0xc] + cmp r0, #0x0 + bne _0208F9F8 + ldr r0, [r7, #0x10] + cmp r0, #0x0 + bne _0208F9F8 + add r0, sp, #0xac + bl FUN_02090B50 + b _0208FA04 +_0208F9F8: + add r0, r7, #0x8 + add r1, sp, #0xac + bl FUN_020C5288 +_0208FA04: + ldr r2, [sp, #0xac] + ldr r1, [sp, #0x10] + mov r0, #0x800 + smull r10, r1, r2, r1 + adds r2, r10, r0 + add r10, r9, #0x28 + str r10, [sp, #0x2c] + add r10, r7, #0x38 + str r10, [sp, #0x30] + adc r1, r1, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + ldrsh r1, [r9, #0x50] + ldr r10, [sp, #0x14] + ldr r3, [r9, #0x40] + smull r11, r10, r1, r10 + adds r11, r11, r0 + adc r1, r10, #0x0 + mov r10, r11, lsr #0xc + orr r10, r10, r1, lsl #0x14 + add r1, r2, r10 + add r1, r3, r1 + str r1, [r7, #0x14] + ldr r3, [sp, #0xb0] + ldr r1, [sp, #0x10] + ldrsh r10, [r9, #0x52] + smull r11, r1, r3, r1 + adds r11, r11, r0 + adc r3, r1, #0x0 + mov r1, r11, lsr #0xc + orr r1, r1, r3, lsl #0x14 + ldr r3, [sp, #0x14] + ldr r2, [r9, #0x44] + smull r11, r3, r10, r3 + adds r10, r11, r0 + adc r3, r3, #0x0 + mov r10, r10, lsr #0xc + orr r10, r10, r3, lsl #0x14 + add r1, r1, r10 + add r1, r2, r1 + str r1, [r7, #0x18] + ldr r1, [sp, #0xb4] + ldr r2, [sp, #0x10] + ldrsh lr, [r9, #0x54] + smull r10, r3, r1, r2 + ldr r1, [sp, #0x14] + adds r10, r10, r0 + smull r2, r1, lr, r1 + adc r3, r3, #0x0 + adds r0, r2, r0 + mov r2, r10, lsr #0xc + orr r2, r2, r3, lsl #0x14 + adc r1, r1, #0x0 + mov r0, r0, lsr #0xc + orr r0, r0, r1, lsl #0x14 + ldr r12, [r9, #0x48] + add r0, r2, r0 + add r0, r12, r0 + str r0, [r7, #0x1c] + ldr r0, [sp, #0x2c] + ldr r3, [sp, #0x30] + ldmia r0, {r0-r2} + stmia r3, {r0-r2} + ldr r0, [r6, #0x0] + mla r1, r0, r4, r5 + str r1, [r6, #0x0] + mov r0, r1, lsr #0x18 + ldrb r1, [r8, #0x40] + ldr r2, [r9, #0x6c] + mul r0, r1, r0 + add r1, r1, #0xff + sub r0, r1, r0, asr #0x7 + mul r0, r2, r0 + mov r0, r0, asr #0x8 + str r0, [r7, #0x30] + ldr r0, [sp, #0x34] + strh r0, [r7, #0x34] + ldr r0, [r8, #0x0] + mov r0, r0, lsl #0x16 + movs r0, r0, lsr #0x1f + beq _0208FBBC + ldr r0, [sp, #0x4] + ldr r0, [r0, #0x8] + ldrh r0, [r0, #0x8] + mov r0, r0, lsl #0x1f + movs r0, r0, lsr #0x1f + beq _0208FBBC + ldr r0, [r6, #0x0] + ldr r3, _0208FD9C ; =0x00000003 + mla r1, r0, r4, r5 + str r1, [r6, #0x0] + mov r0, r1, lsr #0x14 + ldr r1, [sp, #0x4] + ldr r2, [r1, #0x8] + ldr r1, _0208FDA0 ; =0xAAAAAAAB + umull r1, r10, r0, r1 + mov r10, r10, lsr #0x1 + umull r10, r11, r3, r10 + ldrh r1, [r2, #0x0] + sub r10, r0, r10 + strh r1, [sp, #0x50] + ldrh r0, [r8, #0x22] + mov r1, r10, lsl #0x1 + strh r0, [sp, #0x52] + ldrh r0, [r2, #0x2] + strh r0, [sp, #0x54] + add r0, sp, #0x50 + ldrh r0, [r0, r1] + strh r0, [r7, #0x36] + b _0208FBC4 +_0208FBBC: + ldrh r0, [r8, #0x22] + strh r0, [r7, #0x36] +_0208FBC4: + ldrh r1, [r7, #0x2e] + ldrb r0, [r9, #0x81] + bic r1, r1, #0x1f + and r0, r0, #0x1f + orr r0, r1, r0 + strh r0, [r7, #0x2e] + ldrh r0, [r7, #0x2e] + bic r0, r0, #0x3e0 + orr r0, r0, #0x3e0 + strh r0, [r7, #0x2e] + ldr r0, [r8, #0x0] + mov r0, r0, lsl #0x12 + movs r0, r0, lsr #0x1f + ldrne r0, [r6, #0x0] + mlane r1, r0, r4, r5 + strne r1, [r6, #0x0] + strneh r1, [r7, #0x20] + ldreqh r0, [r9, #0x56] + streqh r0, [r7, #0x20] + ldr r0, [r8, #0x0] + mov r0, r0, lsl #0x13 + movs r0, r0, lsr #0x1f + ldreq r0, [sp, #0x38] + streqh r0, [r7, #0x22] + beq _0208FC54 + ldr r0, [r6, #0x0] + mla r1, r0, r4, r5 + str r1, [r6, #0x0] + mov r0, r1, lsr #0x14 + ldrsh r2, [r8, #0x34] + ldrsh r1, [r8, #0x36] + sub r1, r1, r2 + mul r0, r1, r0 + add r0, r0, r2, lsl #0xc + mov r0, r0, lsr #0xc + strh r0, [r7, #0x22] +_0208FC54: + ldr r0, [r6, #0x0] + mla r1, r0, r4, r5 + str r1, [r6, #0x0] + mov r0, r1, lsr #0x18 + ldrb r1, [r8, #0x41] + ldrh r2, [r9, #0x70] + mul r0, r1, r0 + mov r0, r0, asr #0x8 + rsb r0, r0, #0xff + mul r0, r2, r0 + mov r0, r0, asr #0x8 + add r0, r0, #0x1 + strh r0, [r7, #0x24] + ldr r0, [sp, #0x3c] + strh r0, [r7, #0x26] + ldr r0, [r8, #0x0] + mov r0, r0, lsl #0x14 + movs r1, r0, lsr #0x1f + beq _0208FCE4 + ldr r0, [sp, #0x4] + ldr r0, [r0, #0x10] + ldr r0, [r0, #0x8] + mov r0, r0, lsl #0xf + movs r0, r0, lsr #0x1f + beq _0208FCE4 + ldr r0, [r6, #0x0] + mla r1, r0, r4, r5 + str r1, [r6, #0x0] + mov r0, r1, lsr #0x14 + ldr r1, [sp, #0x4] + ldr r10, [r1, #0x10] + ldrb r1, [r10, #0x8] + bl _u32_div_f + ldrb r0, [r10, r1] + strb r0, [r7, #0x2c] + b _0208FD14 +_0208FCE4: + cmp r1, #0x0 + beq _0208FD0C + ldr r0, [sp, #0x4] + ldr r1, [r0, #0x10] + ldr r0, [r1, #0x8] + mov r0, r0, lsl #0xf + movs r0, r0, lsr #0x1f + ldreqb r0, [r1, #0x0] + streqb r0, [r7, #0x2c] + beq _0208FD14 +_0208FD0C: + ldrb r0, [r8, #0x47] + strb r0, [r7, #0x2c] +_0208FD14: + ldr r1, [sp, #0x4] + ldr r0, _0208FDA4 ; =0x0000FFFF + ldr r1, [r1, #0x0] + ldrb r1, [r1, #0x48] + bl _s32_div_f + strh r0, [r7, #0x28] + ldrh r1, [r7, #0x24] + ldr r0, _0208FDA4 ; =0x0000FFFF + bl _s32_div_f + strh r0, [r7, #0x2a] + ldr r0, [sp, #0x40] + strb r0, [r7, #0x2d] + ldr r0, [r8, #0x0] + mov r0, r0, lsl #0xb + movs r0, r0, lsr #0x1f + ldrne r0, [r6, #0x0] + mlane r1, r0, r4, r5 + strne r1, [r6, #0x0] + movne r0, r1, lsr #0x18 + strneb r0, [r7, #0x2d] + ldr r0, [sp, #0x8] + add r1, r0, #0x1 + ldr r0, [sp, #0xc] + str r1, [sp, #0x8] + cmp r1, r0 + blt _0208F13C + add sp, sp, #0xc4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0208FD88: .word 0x00000FFF +_0208FD8C: .word 0x021C8C5C +_0208FD90: .word 0x5EEDF715 +_0208FD94: .word 0x1B0CB173 +_0208FD98: .word 0x020FFA38 +_0208FD9C: .word 0x00000003 +_0208FDA0: .word 0xAAAAAAAB +_0208FDA4: .word 0x0000FFFF + + arm_func_start FUN_0208FDA8 +FUN_0208FDA8: ; 0x0208FDA8 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + mov r4, r2 + mov r6, r0 + mov r5, r1 + add r2, sp, #0x0 + add r0, r4, #0x84 + add r1, r4, #0x8a + bl VEC_Fx16CrossProduct +_0208FDCC: ; 0x0208FDCC + add r0, sp, #0x0 + mov r1, r0 + bl VEC_Fx16Normalize + ldrsh r1, [sp, #0x0] + ldr lr, [r5, #0x8] + ldrsh r0, [r4, #0x84] + ldr r12, [r5, #0x0] + smull r3, r2, lr, r1 + smull r1, r0, r12, r0 + ldrsh r7, [r4, #0x8a] + ldr r8, [r5, #0x4] + mov r12, #0x800 + smull lr, r7, r8, r7 + adds r8, r3, r12 + adc r3, r2, #0x0 + mov r2, r8, lsr #0xc + adds r1, r1, r12 + orr r2, r2, r3, lsl #0x14 + adc r0, r0, #0x0 + mov r3, r1, lsr #0xc + adds r1, lr, r12 + orr r3, r3, r0, lsl #0x14 + adc r0, r7, #0x0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + add r0, r3, r1 + add r0, r2, r0 + str r0, [r6, #0x0] + ldrsh r0, [sp, #0x2] + ldr r1, [r5, #0x8] + ldrsh r3, [r4, #0x86] + smull r2, r0, r1, r0 + adds r2, r2, r12 + ldr lr, [r5, #0x0] + adc r1, r0, #0x0 + mov r0, r2, lsr #0xc + orr r0, r0, r1, lsl #0x14 + smull r8, r7, lr, r3 + ldrsh r1, [r4, #0x8c] + ldr r2, [r5, #0x4] + adds r8, r8, r12 + smull r3, r1, r2, r1 + adc r2, r7, #0x0 + mov r7, r8, lsr #0xc + orr r7, r7, r2, lsl #0x14 + adds r2, r3, r12 + adc r1, r1, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + add r1, r7, r2 + add r0, r0, r1 + str r0, [r6, #0x4] + ldrsh r0, [sp, #0x4] + ldr r1, [r5, #0x8] + ldr lr, [r5, #0x0] + smull r3, r0, r1, r0 + adds r3, r3, r12 + adc r1, r0, #0x0 + mov r0, r3, lsr #0xc + orr r0, r0, r1, lsl #0x14 + ldrsh r3, [r4, #0x88] + ldrsh r1, [r4, #0x8e] + ldr r2, [r5, #0x4] + smull r5, r4, lr, r3 + adds r5, r5, r12 + smull r3, r1, r2, r1 + adc r4, r4, #0x0 + adds r2, r3, r12 + mov r3, r5, lsr #0xc + adc r1, r1, #0x0 + mov r2, r2, lsr #0xc + orr r3, r3, r4, lsl #0x14 + orr r2, r2, r1, lsl #0x14 + add r1, r3, r2 + add r0, r0, r1 + str r0, [r6, #0x8] + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FUN_0208FF08 +FUN_0208FF08: ; 0x0208FF08 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x10 + ldr r1, _0209018C ; =0x02106168 + mov r4, r0 + ldrh r3, [r1, #0x0] + ldrh r2, [r1, #0x2] + ldrh r0, [r1, #0x4] + strh r3, [sp, #0x0] + strh r2, [sp, #0x2] + strh r0, [sp, #0x4] + ldr r0, [r4, #0x20] + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x18 + movs r0, r0, lsr #0x1e + beq _0208FF88 + cmp r0, #0x1 + beq _0208FF70 + cmp r0, #0x2 + bne _0208FFA0 + mov r0, #0x0 + mov r1, #0x1000 + strh r1, [sp, #0x6] + strh r0, [sp, #0x8] + strh r0, [sp, #0xa] + b _0208FFAC +_0208FF70: + mov r1, #0x0 + mov r0, #0x1000 + strh r1, [sp, #0x6] + strh r0, [sp, #0x8] + strh r1, [sp, #0xa] + b _0208FFAC +_0208FF88: + mov r1, #0x0 + mov r0, #0x1000 + strh r1, [sp, #0x6] + strh r1, [sp, #0x8] + strh r0, [sp, #0xa] + b _0208FFAC +_0208FFA0: + add r1, sp, #0x6 + add r0, r4, #0x50 + bl VEC_Fx16Normalize +_0208FFAC: + add r0, sp, #0x0 + add r1, sp, #0x6 + bl VEC_Fx16DotProduct + cmp r0, #0x1000 + beq _0208FFD0 + mov r1, #0x1000 + rsb r1, r1, #0x0 + cmp r0, r1 + bne _0208FFE4 +_0208FFD0: + mov r0, #0x0 + mov r1, #0x1000 + strh r1, [sp, #0x0] + strh r0, [sp, #0x2] + strh r0, [sp, #0x4] +_0208FFE4: + ldrsh r3, [sp, #0x8] + ldrsh r1, [sp, #0x4] + ldrsh r2, [sp, #0xa] + ldrsh r0, [sp, #0x2] + smull r6, r5, r3, r1 + mov r1, #0x800 + adds r6, r6, r1 + smull r3, r0, r2, r0 + adc r5, r5, #0x0 + adds r2, r3, r1 + mov r3, r6, lsr #0xc + adc r0, r0, #0x0 + mov r2, r2, lsr #0xc + orr r3, r3, r5, lsl #0x14 + orr r2, r2, r0, lsl #0x14 + sub r0, r3, r2 + strh r0, [r4, #0x84] + ldrsh r5, [sp, #0xa] + ldrsh r3, [sp, #0x0] + ldrsh r2, [sp, #0x6] + ldrsh r0, [sp, #0x4] + smull r3, r6, r5, r3 + adds r12, r3, r1 + smull r3, r0, r2, r0 + adc r5, r6, #0x0 + adds r2, r3, r1 + mov r3, r12, lsr #0xc + adc r0, r0, #0x0 + mov r2, r2, lsr #0xc + orr r3, r3, r5, lsl #0x14 + orr r2, r2, r0, lsl #0x14 + sub r0, r3, r2 + strh r0, [r4, #0x86] + ldrsh r5, [sp, #0x6] + ldrsh r3, [sp, #0x2] + ldrsh r2, [sp, #0x8] + ldrsh r0, [sp, #0x0] + smull r3, r6, r5, r3 + adds r12, r3, r1 + smull r3, r0, r2, r0 + adc r5, r6, #0x0 + adds r2, r3, r1 + mov r3, r12, lsr #0xc + adc r0, r0, #0x0 + mov r2, r2, lsr #0xc + orr r3, r3, r5, lsl #0x14 + orr r2, r2, r0, lsl #0x14 + sub r0, r3, r2 + strh r0, [r4, #0x88] + ldrsh r6, [sp, #0x8] + ldrsh r5, [r4, #0x88] + add r0, r4, #0x84 + ldrsh r3, [sp, #0xa] + ldrsh r2, [r4, #0x86] + smull r5, r12, r6, r5 + adds lr, r5, r1 + smull r5, r2, r3, r2 + adc r6, r12, #0x0 + adds r3, r5, r1 + mov r5, lr, lsr #0xc + adc r2, r2, #0x0 + mov r3, r3, lsr #0xc + orr r5, r5, r6, lsl #0x14 + orr r3, r3, r2, lsl #0x14 + sub r2, r5, r3 + strh r2, [r4, #0x8a] + ldrsh r6, [sp, #0xa] + ldrsh r5, [r4, #0x84] + ldrsh r3, [sp, #0x6] + ldrsh r2, [r4, #0x88] + smull lr, r12, r6, r5 + smull r5, r2, r3, r2 + adds r6, lr, r1 + adc r3, r12, #0x0 + mov r6, r6, lsr #0xc + orr r6, r6, r3, lsl #0x14 + adds r3, r5, r1 + adc r2, r2, #0x0 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + sub r2, r6, r3 + strh r2, [r4, #0x8c] + ldrsh lr, [sp, #0x6] + ldrsh r12, [r4, #0x86] + ldrsh r3, [sp, #0x8] + ldrsh r2, [r4, #0x84] + smull r6, r5, lr, r12 + smull r12, r2, r3, r2 + adds r6, r6, r1 + adc r5, r5, #0x0 + adds r3, r12, r1 + mov r6, r6, lsr #0xc + orr r6, r6, r5, lsl #0x14 + adc r1, r2, #0x0 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + sub r1, r6, r2 + strh r1, [r4, #0x8e] + mov r1, r0 + bl VEC_Fx16Normalize + add r0, r4, #0x8a + mov r1, r0 + bl VEC_Fx16Normalize + add sp, sp, #0x10 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_0209018C: .word 0x02106168 + + arm_func_start FUN_02090190 +FUN_02090190: ; 0x02090190 + stmdb sp!, {lr} + sub sp, sp, #0x4 + rsb r2, r2, #0xff + mov r1, #0x1f + mul r3, r2, r1 + ldr r2, _020901E4 ; =0x80808081 + ldrh lr, [r0, #0x2e] + smull r1, r12, r2, r3 + add r12, r3, r12 + mov r12, r12, asr #0x7 + mov r1, r3, lsr #0x1f + add r12, r1, r12 + mov r1, r12, lsl #0x10 + mov r1, r1, lsr #0x10 + bic r2, lr, #0x3e0 + and r1, r1, #0x1f + orr r1, r2, r1, lsl #0x5 + strh r1, [r0, #0x2e] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020901E4: .word 0x80808081 + + arm_func_start FUN_020901E8 +FUN_020901E8: ; 0x020901E8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, [r1, #0x14] + sub r1, r2, #0xff + ldrsh lr, [r3, #0x4] + ldr r2, _02090230 ; =0x80808081 + sub r3, lr, #0x1000 + mul r12, r3, r1 + smull r1, r3, r2, r12 + add r3, r12, r3 + mov r3, r3, asr #0x7 + mov r1, r12, lsr #0x1f + add r3, r1, r3 + add r1, lr, r3 + strh r1, [r0, #0x34] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_02090230: .word 0x80808081 + + arm_func_start FUN_02090234 +FUN_02090234: ; 0x02090234 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r5, [r1, #0x10] + mov r4, #0x0 + ldrb r3, [r5, #0x8] + cmp r3, #0x0 + addle sp, sp, #0x4 + ldmleia sp!, {r4-r5,lr} + bxle lr + ldrb r12, [r5, #0x9] + mov lr, r4 +_02090260: + add r1, lr, r12 + cmp r2, r1 + ldrltb r1, [r5, r4] + addlt sp, sp, #0x4 + strltb r1, [r0, #0x2c] + ldmltia sp!, {r4-r5,lr} + bxlt lr + add r4, r4, #0x1 + cmp r4, r3 + add lr, lr, r12 + blt _02090260 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_02090298 +FUN_02090298: ; 0x02090298 + stmdb sp!, {r4-r6,lr} + ldr r4, [r1, #0xc] + mov r5, r0 + ldrb r1, [r4, #0x4] + ldrb r3, [r4, #0x5] + cmp r2, r1 + bge _020902D8 + ldrh r3, [r4, #0x0] + mov r0, r3, lsl #0x16 + mov r6, r3, lsl #0x1b + mov r0, r0, lsr #0x1b + sub r0, r0, r6, lsr #0x1b + mul r0, r2, r0 + bl _s32_div_f + add r0, r0, r6, lsr #0x1b + b _02090314 +_020902D8: + cmp r2, r3 + ldrlth r0, [r4, #0x0] + movlt r0, r0, lsl #0x16 + movlt r0, r0, lsr #0x1b + blt _02090314 + ldrh r0, [r4, #0x0] + sub r2, r2, #0xff + rsb r1, r3, #0xff + mov r6, r0, lsl #0x11 + mov r3, r6, lsr #0x1b + mov r0, r0, lsl #0x16 + sub r0, r3, r0, lsr #0x1b + mul r0, r2, r0 + bl _s32_div_f + add r0, r0, r6, lsr #0x1b +_02090314: + ldr r3, _02090368 ; =0x021C8C5C + ldr r1, _0209036C ; =0x5EEDF715 + ldr r12, [r3, #0x0] + ldr r2, _02090370 ; =0x1B0CB173 + mla r1, r12, r1, r2 + str r1, [r3, #0x0] + ldrb r2, [r4, #0x2] + mov r1, r1, lsr #0x18 + ldrh r3, [r5, #0x2e] + mul r1, r2, r1 + mov r1, r1, asr #0x8 + rsb r1, r1, #0xff + mul r1, r0, r1 + mov r0, r1, lsl #0x8 + mov r0, r0, lsr #0x10 + bic r1, r3, #0x3e0 + and r0, r0, #0x1f + orr r0, r1, r0, lsl #0x5 + strh r0, [r5, #0x2e] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_02090368: .word 0x021C8C5C +_0209036C: .word 0x5EEDF715 +_02090370: .word 0x1B0CB173 + + arm_func_start FUN_02090374 +FUN_02090374: ; 0x02090374 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + + arm_func_start FUN_0209037C +FUN_0209037C: ; 0x0209037C + ldr r4, [r1, #0x8] + mov r10, r0 + ldrb r3, [r4, #0x4] + ldr r0, [r1, #0x0] + ldrb r1, [r4, #0x5] + cmp r2, r3 + ldrb r11, [r4, #0x6] + ldrlth r0, [r4, #0x0] + addlt sp, sp, #0x4 + strlth r0, [r10, #0x36] + ldmltia sp!, {r4-r11,lr} + bxlt lr + cmp r2, r1 + bge _0209046C + ldrh r9, [r0, #0x22] + ldrh r0, [r4, #0x8] + ldrh r8, [r4, #0x0] + mov r7, r9, asr #0x5 + mov r11, r9, asr #0xa + mov r4, r0, lsl #0x1d + mov r6, r8, asr #0x5 + mov r5, r8, asr #0xa + movs r4, r4, lsr #0x1f + and r9, r9, #0x1f + and r7, r7, #0x1f + and r0, r11, #0x1f + orreq r1, r9, r7, lsl #0x5 + orreq r0, r1, r0, lsl #0xa + and r8, r8, #0x1f + and r6, r6, #0x1f + and r5, r5, #0x1f + addeq sp, sp, #0x4 + streqh r0, [r10, #0x36] + ldmeqia sp!, {r4-r11,lr} + bxeq lr + sub r4, r2, r3 + sub r0, r0, r5 + mul r0, r4, r0 + sub r11, r1, r3 + mov r1, r11 + bl _s32_div_f + sub r1, r9, r8 + mov r9, r0 + mul r0, r4, r1 + mov r1, r11 + bl _s32_div_f + sub r1, r7, r6 + mov r7, r0 + mul r0, r4, r1 + mov r1, r11 + bl _s32_div_f + add r1, r8, r7 + add r0, r6, r0 + add r2, r5, r9 + orr r0, r1, r0, lsl #0x5 + orr r0, r0, r2, lsl #0xa + add sp, sp, #0x4 + strh r0, [r10, #0x36] + ldmia sp!, {r4-r11,lr} + bx lr +_0209046C: + cmp r2, r11 + bge _0209052C + ldrh r7, [r4, #0x2] + ldrh r8, [r0, #0x22] + ldrh r0, [r4, #0x8] + mov r5, r7, asr #0x5 + mov r4, r7, asr #0xa + mov r3, r0, lsl #0x1d + mov r6, r8, asr #0x5 + mov r9, r8, asr #0xa + movs r3, r3, lsr #0x1f + and r7, r7, #0x1f + and r5, r5, #0x1f + and r0, r4, #0x1f + orreq r1, r7, r5, lsl #0x5 + orreq r0, r1, r0, lsl #0xa + and r8, r8, #0x1f + and r6, r6, #0x1f + and r9, r9, #0x1f + addeq sp, sp, #0x4 + streqh r0, [r10, #0x36] + ldmeqia sp!, {r4-r11,lr} + bxeq lr + sub r4, r2, r1 + sub r0, r0, r9 + mul r0, r4, r0 + sub r11, r11, r1 + mov r1, r11 + bl _s32_div_f + sub r1, r7, r8 + mov r7, r0 + mul r0, r4, r1 + mov r1, r11 + bl _s32_div_f + sub r1, r5, r6 + mov r5, r0 + mul r0, r4, r1 + mov r1, r11 + bl _s32_div_f + add r1, r8, r5 + add r0, r6, r0 + add r2, r9, r7 + orr r0, r1, r0, lsl #0x5 + orr r0, r0, r2, lsl #0xa + add sp, sp, #0x4 + strh r0, [r10, #0x36] + ldmia sp!, {r4-r11,lr} + bx lr +_0209052C: + ldrh r0, [r4, #0x2] + strh r0, [r10, #0x36] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FUN_02090540 +FUN_02090540: ; 0x02090540 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r12, [r1, #0x4] + mov r4, r0 + ldrb r1, [r12, #0x6] + ldrb r3, [r12, #0x7] + cmp r2, r1 + bge _02090588 + ldrsh r5, [r12, #0x0] + ldrsh r0, [r12, #0x2] + sub r0, r0, r5 + mul r0, r2, r0 + bl _s32_div_f +_02090574: ; 0x02090574 + add r0, r5, r0 + add sp, sp, #0x4 + strh r0, [r4, #0x34] + ldmia sp!, {r4-r5,lr} + bx lr +_02090588: + cmp r2, r3 + ldrltsh r0, [r12, #0x2] + addlt sp, sp, #0x4 + strlth r0, [r4, #0x34] + ldmltia sp!, {r4-r5,lr} + bxlt lr + ldrsh r5, [r12, #0x4] + ldrsh r0, [r12, #0x2] + sub r2, r2, #0xff + rsb r1, r3, #0xff + sub r0, r5, r0 + mul r0, r2, r0 + bl _s32_div_f +_020905BC: ; 0x020905BC + add r0, r5, r0 + strh r0, [r4, #0x34] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_020905D0 +FUN_020905D0: ; 0x020905D0 + stmdb sp!, {r4,lr} + ldr lr, [r1, #0x8] + ldr r2, [r0, #0x0] + ldrsh r4, [r0, #0xc] + sub r3, r2, lr + mov r2, #0x800 + smull r12, r3, r4, r3 + adds r4, r12, r2 + adc r3, r3, #0x0 + mov r4, r4, lsr #0xc + orr r4, r4, r3, lsl #0x14 + add r3, lr, r4 + str r3, [r1, #0x8] + ldr r4, [r1, #0xc] + ldr r3, [r0, #0x4] + ldrsh r12, [r0, #0xc] + sub r3, r3, r4 + smull lr, r3, r12, r3 + adds r12, lr, r2 + adc r3, r3, #0x0 + mov r12, r12, lsr #0xc + orr r12, r12, r3, lsl #0x14 + add r3, r4, r12 + str r3, [r1, #0xc] + ldr lr, [r1, #0x10] + ldr r3, [r0, #0x8] + ldrsh r12, [r0, #0xc] + sub r0, r3, lr + smull r3, r0, r12, r0 + adds r2, r3, r2 + adc r0, r0, #0x0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + add r0, lr, r2 + str r0, [r1, #0x10] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_02090664 +FUN_02090664: ; 0x02090664 + ldr r3, [r3, #0x74] + ldr r2, [r0, #0x0] + cmp r3, #0x80000000 + movne r2, r3 + ldrh r3, [r0, #0x6] + mov r3, r3, lsl #0x1e + movs r3, r3, lsr #0x1e + beq _02090690 + cmp r3, #0x1 + beq _020906E4 + bx lr +_02090690: + ldr r3, [r1, #0x3c] + cmp r3, r2 + bge _020906BC + ldr r0, [r1, #0xc] + add r0, r3, r0 + cmp r0, r2 + subgt r0, r2, r3 + strgt r0, [r1, #0xc] + ldrgth r0, [r1, #0x24] + strgth r0, [r1, #0x26] + bxgt lr +_020906BC: + cmp r3, r2 + bxlt lr + ldr r0, [r1, #0xc] + add r0, r3, r0 + cmp r0, r2 + sublt r0, r2, r3 + strlt r0, [r1, #0xc] + ldrlth r0, [r1, #0x24] + strlth r0, [r1, #0x26] + bx lr +_020906E4: + ldr r12, [r1, #0x3c] + cmp r12, r2 + bge _02090734 + ldr r3, [r1, #0xc] + add r3, r12, r3 + cmp r3, r2 + ble _02090734 + sub r2, r2, r12 + str r2, [r1, #0xc] + ldrsh r2, [r0, #0x4] + ldr r3, [r1, #0x18] + mov r0, #0x800 + smull r12, r2, r3, r2 + adds r3, r12, r0 + adc r0, r2, #0x0 + mov r2, r3, lsr #0xc + orr r2, r2, r0, lsl #0x14 + rsb r0, r2, #0x0 + str r0, [r1, #0x18] + bx lr +_02090734: + cmp r12, r2 + bxlt lr + ldr r3, [r1, #0xc] + add r3, r12, r3 + cmp r3, r2 + bxge lr + sub r2, r2, r12 + str r2, [r1, #0xc] + ldrsh r2, [r0, #0x4] + ldr r3, [r1, #0x18] + mov r0, #0x800 + smull r12, r2, r3, r2 + adds r3, r12, r0 + adc r0, r2, #0x0 + mov r2, r3, lsr #0xc + orr r2, r2, r0, lsl #0x14 + rsb r0, r2, #0x0 + str r0, [r1, #0x18] + bx lr + + arm_func_start FUN_02090780 +FUN_02090780: ; 0x02090780 + stmdb sp!, {r4,lr} + sub sp, sp, #0x28 + ldrh r2, [r0, #0x2] + mov r4, r1 + cmp r2, #0x0 + beq _020907AC + cmp r2, #0x1 + beq _020907DC + cmp r2, #0x2 + beq _0209080C + b _02090838 +_020907AC: + ldrh r1, [r0, #0x0] + ldr r3, _02090854 ; =0x020FFA38 + add r0, sp, #0x0 + mov r1, r1, asr #0x4 + mov r2, r1, lsl #0x1 + add r1, r2, #0x1 + mov r12, r2, lsl #0x1 + mov r2, r1, lsl #0x1 + ldrsh r1, [r3, r12] + ldrsh r2, [r3, r2] + blx FUN_020C3F38 + b _02090838 +_020907DC: + ldrh r1, [r0, #0x0] + ldr r3, _02090854 ; =0x020FFA38 + add r0, sp, #0x0 + mov r1, r1, asr #0x4 + mov r2, r1, lsl #0x1 + add r1, r2, #0x1 + mov r12, r2, lsl #0x1 + mov r2, r1, lsl #0x1 + ldrsh r1, [r3, r12] + ldrsh r2, [r3, r2] + blx FUN_020C3F54 + b _02090838 +_0209080C: + ldrh r1, [r0, #0x0] + ldr r3, _02090854 ; =0x020FFA38 + add r0, sp, #0x0 + mov r1, r1, asr #0x4 + mov r2, r1, lsl #0x1 + add r1, r2, #0x1 + mov r12, r2, lsl #0x1 + mov r2, r1, lsl #0x1 + ldrsh r1, [r3, r12] + ldrsh r2, [r3, r2] + blx FUN_020C3F70 +_02090838: + add r0, r4, #0x8 + add r1, sp, #0x0 + mov r2, r0 + bl MTX_MultVec33 + add sp, sp, #0x28 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02090854: .word 0x020FFA38 + + arm_func_start FUN_02090858 +FUN_02090858: ; 0x02090858 + stmdb sp!, {r4,lr} + ldr r12, [r0, #0x0] + ldr r4, [r1, #0x8] + ldrsh lr, [r0, #0xc] + ldr r3, [r1, #0x14] + sub r4, r12, r4 + sub r3, r4, r3 + mul r3, lr, r3 + ldr r4, [r2, #0x0] + add r3, r4, r3, asr #0xc + str r3, [r2, #0x0] + ldr lr, [r0, #0x4] + ldr r12, [r1, #0xc] + ldrsh r4, [r0, #0xc] + ldr r3, [r1, #0x18] + sub r12, lr, r12 + sub r3, r12, r3 + mul r3, r4, r3 + ldr r4, [r2, #0x4] + add r3, r4, r3, asr #0xc + str r3, [r2, #0x4] + ldr r12, [r0, #0x8] + ldr r3, [r1, #0x10] + ldrsh lr, [r0, #0xc] + ldr r0, [r1, #0x1c] + sub r1, r12, r3 + sub r0, r1, r0 + mul r0, lr, r0 + ldr r1, [r2, #0x8] + add r0, r1, r0, asr #0xc + str r0, [r2, #0x8] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020908DC +FUN_020908DC: ; 0x020908DC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldrh r0, [r1, #0x26] + ldrh r1, [r5, #0x6] + mov r4, r2 + bl _s32_div_f +_020908F8: ; 0x020908F8 + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r2, _02090998 ; =0x021C8C5C + ldr r0, _0209099C ; =0x5EEDF715 + ldr r3, [r2, #0x0] + ldr r1, _020909A0 ; =0x1B0CB173 + mla r12, r3, r0, r1 + str r12, [r2, #0x0] + ldrsh lr, [r5, #0x0] + mov r3, r12, lsr #0x17 + ldr r12, [r4, #0x0] + mul r3, lr, r3 + sub r3, r3, lr, lsl #0x8 + add r3, r12, r3, asr #0x8 + str r3, [r4, #0x0] + ldr r3, [r2, #0x0] + mla r12, r3, r0, r1 + str r12, [r2, #0x0] + ldrsh lr, [r5, #0x2] + mov r3, r12, lsr #0x17 + ldr r12, [r4, #0x4] + mul r3, lr, r3 + sub r3, r3, lr, lsl #0x8 + add r3, r12, r3, asr #0x8 + str r3, [r4, #0x4] + ldr r3, [r2, #0x0] + mla r0, r3, r0, r1 + str r0, [r2, #0x0] + ldrsh r2, [r5, #0x4] + mov r0, r0, lsr #0x17 + ldr r1, [r4, #0x8] + mul r0, r2, r0 + sub r0, r0, r2, lsl #0x8 + add r0, r1, r0, asr #0x8 + str r0, [r4, #0x8] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_02090998: .word 0x021C8C5C +_0209099C: .word 0x5EEDF715 +_020909A0: .word 0x1B0CB173 + + arm_func_start FUN_020909A4 +FUN_020909A4: ; 0x020909A4 + ldrsh r1, [r0, #0x0] + ldr r3, [r2, #0x0] + add r1, r3, r1 + str r1, [r2, #0x0] + ldrsh r1, [r0, #0x2] + ldr r3, [r2, #0x4] + add r1, r3, r1 + str r1, [r2, #0x4] + ldrsh r0, [r0, #0x4] + ldr r1, [r2, #0x8] + add r0, r1, r0 + str r0, [r2, #0x8] + bx lr + + arm_func_start FUN_020909D8 +FUN_020909D8: ; 0x020909D8 + ldr r3, [r1, #0x0] + cmp r3, #0x0 + bne _02090A18 + ldr r2, [r0, #0x0] + cmp r2, r1 + moveq r2, #0x0 + streq r2, [r0, #0x0] + streq r2, [r0, #0x8] + beq _02090A44 + ldr r2, [r1, #0x4] + mov r3, #0x0 + str r3, [r2, #0x0] + ldr r2, [r0, #0x8] + ldr r2, [r2, #0x4] + str r2, [r0, #0x8] + b _02090A44 +_02090A18: + ldr r2, [r0, #0x0] + cmp r2, r1 + streq r3, [r0, #0x0] + ldreq r2, [r0, #0x0] + moveq r3, #0x0 + streq r3, [r2, #0x4] + ldrne r2, [r1, #0x4] + strne r2, [r3, #0x4] + ldrne r3, [r1, #0x0] + ldrne r2, [r1, #0x4] + strne r3, [r2, #0x0] +_02090A44: + ldr r2, [r0, #0x4] + sub r2, r2, #0x1 + str r2, [r0, #0x4] + mov r0, r1 + bx lr + + arm_func_start FUN_02090A58 +FUN_02090A58: ; 0x02090A58 + ldr r2, [r0, #0x0] + mov r3, #0x0 + mov r12, r3 + cmp r2, #0x0 + beq _02090A9C + ldr r1, [r2, #0x0] + mov r12, r2 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + cmp r1, #0x0 + ldrne r1, [r2, #0x0] + strne r3, [r1, #0x4] + streq r3, [r0, #0x0] + streq r3, [r0, #0x8] + ldr r1, [r0, #0x4] + sub r1, r1, #0x1 + str r1, [r0, #0x4] +_02090A9C: + mov r0, r12 + bx lr + + arm_func_start FUN_02090AA4 +FUN_02090AA4: + ldr r2, [r0, #0x0] + cmp r2, #0x0 + bne _02090ACC + str r1, [r0, #0x0] + str r1, [r0, #0x8] + mov r2, #0x0 + str r2, [r1, #0x0] + ldr r2, [r1, #0x0] + str r2, [r1, #0x4] + b _02090AE4 +_02090ACC: + str r2, [r1, #0x0] + mov r2, #0x0 + str r2, [r1, #0x4] + ldr r2, [r0, #0x0] + str r1, [r2, #0x4] + str r1, [r0, #0x0] +_02090AE4: + ldr r1, [r0, #0x4] + add r1, r1, #0x1 + str r1, [r0, #0x4] + bx lr + + arm_func_start FUN_02090AF4 +FUN_02090AF4: + stmdb sp!, {r4,lr} + ldr ip, _02090B44 ; =0x021C8C5C + ldr r2, _02090B48 ; =0x5EEDF715 + ldr r4, [r12, #0x0] + ldr r3, _02090B4C ; =0x1B0CB173 + mov r1, r0 + mla lr, r4, r2, r3 + str lr, [r12, #0x0] + mov r4, lr, asr #0x8 + str r4, [r0, #0x0] + ldr r4, [r12, #0x0] + mov lr, #0x0 + mla r2, r4, r2, r3 + str r2, [r12, #0x0] + mov r2, r2, asr #0x8 + str r2, [r0, #0x4] + str lr, [r0, #0x8] + bl FUN_020C5288 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02090B44: .word 0x021C8C5C +_02090B48: .word 0x5EEDF715 +_02090B4C: .word 0x1B0CB173 + + arm_func_start FUN_02090B50 +FUN_02090B50: ; 0x02090B50 + stmdb sp!, {r4,lr} + ldr ip, _02090BAC ; =0x021C8C5C + ldr r2, _02090BB0 ; =0x5EEDF715 + ldr r4, [r12, #0x0] + ldr r3, _02090BB4 ; =0x1B0CB173 + mov r1, r0 + mla lr, r4, r2, r3 + str lr, [r12, #0x0] + mov r4, lr, asr #0x8 + str r4, [r0, #0x0] + ldr lr, [r12, #0x0] + mla r4, lr, r2, r3 + str r4, [r12, #0x0] + mov lr, r4, asr #0x8 + str lr, [r0, #0x4] + ldr lr, [r12, #0x0] + mla r2, lr, r2, r3 + str r2, [r12, #0x0] + mov r2, r2, asr #0x8 + str r2, [r0, #0x8] + bl FUN_020C5288 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02090BAC: .word 0x021C8C5C +_02090BB0: .word 0x5EEDF715 +_02090BB4: .word 0x1B0CB173 + + arm_func_start FUN_02090BB8 +FUN_02090BB8: ; 0x02090BB8 + bx lr + + arm_func_start FUN_02090BBC +FUN_02090BBC: ; 0x02090BBC + stmdb sp!, {r4-r6,lr} + mov r0, #0x10000 + rsb r0, r0, #0x0 + ldr r3, _02090CB8 ; =0x021C8C6C + ldr r2, _02090CBC ; =0x021C8C68 + and r0, r1, r0 + cmp r0, #0x10000 + and r4, r1, #0xff + ldr r6, [r3, #0x0] + ldr r5, [r2, #0x0] + beq _02090BF4 + cmp r0, #0x20000 + beq _02090C38 + b _02090C84 +_02090BF4: + cmp r4, #0x7 + bne _02090C84 + ldr r0, _02090CC0 ; =0x021C8C64 + ldrh r1, [r0, #0x0] + cmp r1, #0x0 + beq _02090C84 + ldr r1, _02090CC4 ; =0x021C8C60 + ldrh r2, [r1, #0x0] + cmp r2, #0x0 + beq _02090C84 + ldrh r0, [r0, #0x0] + ldrh r1, [r1, #0x0] + bl OSi_UnlockVram + ldr r0, _02090CC0 ; =0x021C8C64 + mov r1, #0x0 + strh r1, [r0, #0x0] + b _02090C84 +_02090C38: + cmp r4, #0x0 + bne _02090C78 + ldr r0, _02090CC0 ; =0x021C8C64 + ldrh r1, [r0, #0x0] + cmp r1, #0x0 + beq _02090C78 + ldr r1, _02090CC4 ; =0x021C8C60 + ldrh r2, [r1, #0x0] + cmp r2, #0x0 + beq _02090C78 + ldrh r0, [r0, #0x0] + ldrh r1, [r1, #0x0] + bl OSi_UnlockVram + ldr r0, _02090CC0 ; =0x021C8C64 + mov r1, #0x0 + strh r1, [r0, #0x0] +_02090C78: + mov r0, #0xf + mov r1, #0x0 + bl PXI_SetFifoRecvCallback +_02090C84: + cmp r6, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r3, _02090CB8 ; =0x021C8C6C + mov r12, #0x0 + ldr r2, _02090CBC ; =0x021C8C68 + mov r0, r5 + mov r1, r4 + str r12, [r3, #0x0] + str r12, [r2, #0x0] + blx r6 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_02090CB8: .word 0x021C8C6C +_02090CBC: .word 0x021C8C68 +_02090CC0: .word 0x021C8C64 +_02090CC4: .word 0x021C8C60 + + arm_func_start FUN_02090CC8 +FUN_02090CC8: ; 0x02090CC8 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + bl PXI_Init + mov r0, #0xf + mov r1, #0x1 + bl PXI_IsCallbackReady +_02090CE4: ; 0x02090CE4 + cmp r0, #0x0 + moveq r0, #0x2 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + bl OS_DisableInterrupts + ldr r1, _02090DA8 ; =0x021C8C6C + mov r4, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + beq _02090D1C + bl OS_RestoreInterrupts + mov r0, #0x5 + ldmia sp!, {r4-r6,lr} + bx lr +_02090D1C: + mov r0, #0xf + mov r1, #0x0 + bl PXI_IsCallbackReady +_02090D28: ; 0x02090D28 + cmp r0, #0x0 + bne _02090D3C + ldr r1, _02090DAC ; =FUN_02090BBC + mov r0, #0xf + bl PXI_SetFifoRecvCallback +_02090D3C: + cmp r6, #0x0 + ldreq r1, _02090DB0 ; =FUN_02090BB8 + ldreq r0, _02090DA8 ; =0x021C8C6C + ldr r3, _02090DB4 ; =0x021C8C68 + streq r1, [r0, #0x0] + ldrne r0, _02090DA8 ; =0x021C8C6C + mov r1, #0x20000 + strne r6, [r0, #0x0] + mov r0, #0xf + mov r2, #0x0 + str r5, [r3, #0x0] + bl PXI_SendWordByFifo +_02090D6C: ; 0x02090D6C + cmp r0, #0x0 + bge _02090D94 + ldr r1, _02090DA8 ; =0x021C8C6C + mov r2, #0x0 + mov r0, r4 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + mov r0, #0x4 + ldmia sp!, {r4-r6,lr} + bx lr +_02090D94: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_02090DA8: .word 0x021C8C6C +_02090DAC: .word FUN_02090BBC +_02090DB0: .word FUN_02090BB8 +_02090DB4: .word 0x021C8C68 + + arm_func_start FUN_02090DB8 +FUN_02090DB8: ; 0x02090DB8 + stmdb sp!, {r4-r8,lr} + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl PXI_Init + mov r0, #0xf + mov r1, #0x1 + bl PXI_IsCallbackReady +_02090DD8: ; 0x02090DD8 + cmp r0, #0x0 + moveq r0, #0x2 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r8, _02091020 ; =0x021C8C60 + ldrh r0, [r8, #0x0] + cmp r0, #0x0 + bne _02090E20 + mvn r4, #0x2 +_02090DFC: + bl OS_GetLockID + cmp r0, r4 + moveq r0, #0x7 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + strh r0, [r8, #0x0] + ldrh r0, [r8, #0x0] + cmp r0, #0x0 + beq _02090DFC +_02090E20: + bl OS_DisableInterrupts + ldr r1, _02091024 ; =0x021C8C6C + mov r4, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + beq _02090E48 + bl OS_RestoreInterrupts + mov r0, #0x5 + ldmia sp!, {r4-r8,lr} + bx lr +_02090E48: + ldr r1, _02091028 ; =0x021C8C64 + ldrh r1, [r1, #0x0] + cmp r1, #0x0 + beq _02090E68 + bl OS_RestoreInterrupts + mov r0, #0x5 + ldmia sp!, {r4-r8,lr} + bx lr +_02090E68: + cmp r7, #0x4 + beq _02090E84 + cmp r7, #0x8 + beq _02090ECC + cmp r7, #0xc + beq _02090F14 + b _02090F68 +_02090E84: + ldr r1, _02091020 ; =0x021C8C60 + mov r0, #0x4 + ldrh r1, [r1, #0x0] + bl OSi_TryLockVram +_02090E94: ; 0x02090E94 + cmp r0, #0x0 + bne _02090EB0 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r8,lr} + bx lr +_02090EB0: + ldr r0, _02091028 ; =0x021C8C64 + mov r2, #0x4 + ldr r1, _0209102C ; =0x04000242 + strh r2, [r0, #0x0] + mov r0, #0x82 + strb r0, [r1, #0x0] + b _02090F78 +_02090ECC: + ldr r1, _02091020 ; =0x021C8C60 + mov r0, #0x8 + ldrh r1, [r1, #0x0] + bl OSi_TryLockVram +_02090EDC: ; 0x02090EDC + cmp r0, #0x0 + bne _02090EF8 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r8,lr} + bx lr +_02090EF8: + ldr r0, _02091028 ; =0x021C8C64 + mov r2, #0x8 + ldr r1, _02091030 ; =0x04000243 + strh r2, [r0, #0x0] + mov r0, #0x82 + strb r0, [r1, #0x0] + b _02090F78 +_02090F14: + ldr r1, _02091020 ; =0x021C8C60 + mov r0, #0xc + ldrh r1, [r1, #0x0] + bl OSi_TryLockVram +_02090F24: ; 0x02090F24 + cmp r0, #0x0 + bne _02090F40 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r8,lr} + bx lr +_02090F40: + ldr r0, _02091028 ; =0x021C8C64 + mov r2, #0xc + ldr r1, _0209102C ; =0x04000242 + strh r2, [r0, #0x0] + mov r2, #0x82 + ldr r0, _02091030 ; =0x04000243 + strb r2, [r1, #0x0] + mov r1, #0x8a + strb r1, [r0, #0x0] + b _02090F78 +_02090F68: + bl OS_RestoreInterrupts + mov r0, #0x3 + ldmia sp!, {r4-r8,lr} + bx lr +_02090F78: + mov r0, #0xf + mov r1, #0x0 + bl PXI_IsCallbackReady +_02090F84: ; 0x02090F84 + cmp r0, #0x0 + bne _02090F98 + ldr r1, _02091034 ; =FUN_02090BBC + mov r0, #0xf + bl PXI_SetFifoRecvCallback +_02090F98: + cmp r6, #0x0 + ldreq r1, _02091038 ; =FUN_02090BB8 + ldreq r0, _02091024 ; =0x021C8C6C + ldr r3, _0209103C ; =0x021C8C68 + streq r1, [r0, #0x0] + ldrne r0, _02091024 ; =0x021C8C6C + mov r1, #0x10000 + strne r6, [r0, #0x0] + mov r0, #0xf + mov r2, #0x0 + str r5, [r3, #0x0] + bl PXI_SendWordByFifo +_02090FC8: ; 0x02090FC8 + cmp r0, #0x0 + bge _0209100C + ldr r0, _02091028 ; =0x021C8C64 + ldr r1, _02091020 ; =0x021C8C60 + ldrh r0, [r0, #0x0] + ldrh r1, [r1, #0x0] + bl OSi_UnlockVram + ldr r2, _02091028 ; =0x021C8C64 + mov r3, #0x0 + ldr r1, _02091024 ; =0x021C8C6C + mov r0, r4 + strh r3, [r2, #0x0] + str r3, [r1, #0x0] + bl OS_RestoreInterrupts + mov r0, #0x4 + ldmia sp!, {r4-r8,lr} + bx lr +_0209100C: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_02091020: .word 0x021C8C60 +_02091024: .word 0x021C8C6C +_02091028: .word 0x021C8C64 +_0209102C: .word 0x04000242 +_02091030: .word 0x04000243 +_02091034: .word FUN_02090BBC +_02091038: .word FUN_02090BB8 +_0209103C: .word 0x021C8C68 + + arm_func_start FUN_02091040 +FUN_02091040: ; 0x02091040 + ldr r3, _02091054 ; =0x021C8C70 + ldr r2, _02091058 ; =0x021C8C74 + str r0, [r3, #0x0] + str r1, [r2, #0x0] + bx lr + .balign 4 +_02091054: .word 0x021C8C70 +_02091058: .word 0x021C8C74 + + arm_func_start FUN_0209105C +FUN_0209105C: ; 0x0209105C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020910A0 ; =0x021C8C74 + mov r2, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + beq _02091088 + blx r1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_02091088: + mov r0, #0x0 + mvn r1, #0x0 + bl OS_FreeToHeap + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020910A0: .word 0x021C8C74 + + arm_func_start FUN_020910A4 +FUN_020910A4: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020910E8 ; =0x021C8C70 + mov r2, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + beq _020910D0 + blx r1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020910D0: + mov r0, #0x0 + mvn r1, #0x0 + bl OS_AllocFromHeap + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020910E8: .word 0x021C8C70 + + arm_func_start FUN_020910EC +FUN_020910EC: ; 0x020910EC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x14 + mov r12, r0 + mov r4, r1 + mov r5, r2 + mov r2, r4 + add r0, sp, #0x0 + mov r1, r12 + mov r4, r3 + bl MATH_CalcSHA1 +_02091114: ; 0x02091114 + add r0, sp, #0x0 + mov r1, r5 + mov r2, r4 + bl FUN_02091130 + add sp, sp, #0x14 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_02091130 +FUN_02091130: ; 0x02091130 + stmdb sp!, {r4,lr} + sub sp, sp, #0x120 + mov r3, #0x0 + str r3, [sp, #0x10] + str r3, [sp, #0x18] + str r2, [sp, #0x0] + mov r3, #0x80 + mov r4, r0 + mov r2, r1 + ldr ip, _0209122C ; =0x00010001 + str r3, [sp, #0x4] + add r0, sp, #0x1c + mov r1, #0x100 + str r12, [sp, #0x8] + bl FUN_0209156C + mov r1, r0 + add r0, sp, #0x1c + add r2, sp, #0xc + add r3, sp, #0x10 + bl FUN_020913D4 +_02091180: ; 0x02091180 + cmp r0, #0x0 + addeq sp, sp, #0x120 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + add r1, sp, #0x14 + add r0, sp, #0x18 + str r1, [sp, #0x0] + str r0, [sp, #0x4] + mov r2, #0x0 + ldr r0, [sp, #0xc] + ldr r1, [sp, #0x10] + mov r3, r2 + bl FUN_02091230 +_020911B8: ; 0x020911B8 + cmp r0, #0x0 + addeq sp, sp, #0x120 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r0, [sp, #0x18] + cmp r0, #0x14 + addne sp, sp, #0x120 + movne r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + ldr r2, [sp, #0x14] + mov r3, #0x0 +_020911EC: + ldrb r1, [r2, #0x0] + ldrb r0, [r4, #0x0] + cmp r1, r0 + addne sp, sp, #0x120 + movne r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + add r3, r3, #0x1 + cmp r3, #0x14 + add r4, r4, #0x1 + add r2, r2, #0x1 + blt _020911EC + mov r0, #0x1 + add sp, sp, #0x120 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209122C: .word 0x00010001 + + arm_func_start FUN_02091230 +FUN_02091230: + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r2 + mov r4, r3 + add r0, sp, #0x10 + add r1, sp, #0x14 + mov r2, #0x30 + mov r3, #0x0 + bl FUN_02091498 +_02091258: ; 0x02091258 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + addeq sp, sp, #0x10 + bxeq lr + add r0, sp, #0x10 + add r1, sp, #0x14 + mov r2, #0x30 + mov r3, #0x0 + bl FUN_02091498 +_02091284: ; 0x02091284 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + addeq sp, sp, #0x10 + bxeq lr + add r0, sp, #0x10 + add r1, sp, #0x14 + add r3, sp, #0x0 + mov r2, #0x6 + bl FUN_02091498 +_020912B0: ; 0x020912B0 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + addeq sp, sp, #0x10 + bxeq lr + cmp r5, #0x0 + ldrne r0, [sp, #0x10] + strne r0, [r5, #0x0] + cmp r4, #0x0 + ldrne r0, [sp, #0x0] + strne r0, [r4, #0x0] + ldr r2, [sp, #0x0] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r0, r0, r2 + str r0, [sp, #0x10] + cmp r1, r2 + addcc sp, sp, #0x4 + movcc r0, #0x0 + ldmccia sp!, {r4-r5,lr} + addcc sp, sp, #0x10 + bxcc lr + sub r12, r1, r2 + add r0, sp, #0x10 + add r1, sp, #0x14 + add r3, sp, #0x0 + mov r2, #0x5 + str r12, [sp, #0x14] + bl FUN_02091498 +_02091328: ; 0x02091328 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r2, [sp, #0x0] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r0, r0, r2 + str r0, [sp, #0x10] + cmp r1, r2 + addcc sp, sp, #0x4 + movcc r0, #0x0 + ldmccia sp!, {r4-r5,lr} + addcc sp, sp, #0x10 + bxcc lr + sub r12, r1, r2 + add r0, sp, #0x10 + add r1, sp, #0x14 + add r3, sp, #0x0 + mov r2, #0x4 + str r12, [sp, #0x14] + bl FUN_02091498 +_02091388: ; 0x02091388 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r1, [sp, #0x20] + cmp r1, #0x0 + ldrne r0, [sp, #0x10] + strne r0, [r1, #0x0] + ldr r1, [sp, #0x24] + cmp r1, #0x0 + ldrne r0, [sp, #0x0] + strne r0, [r1, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start FUN_020913D4 +FUN_020913D4: + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r1, #0xa + addcc sp, sp, #0x4 + movcc r0, #0x0 + ldmccia sp!, {lr} + bxcc lr + ldrb r12, [r0, #0x0] + add lr, r0, r1 + cmp r12, #0x1 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {lr} + bxne lr + add r12, r0, #0x1 + mov r1, #0x0 +_02091414: + ldrb r0, [r12], #0x1 + cmp r0, #0xff + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {lr} + bxne lr + add r1, r1, #0x1 + cmp r1, #0x8 + blt _02091414 + cmp r12, lr + beq _02091458 +_02091440: + ldrb r0, [r12, #0x0] + cmp r0, #0xff + bne _02091458 + add r12, r12, #0x1 + cmp r12, lr + bne _02091440 +_02091458: + cmp r12, lr + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {lr} + bxeq lr + ldrb r0, [r12, #0x0] + cmp r0, #0x0 + movne r0, #0x0 + addeq r0, r12, #0x1 + subeq r1, lr, r0 + streq r1, [r3, #0x0] + streq r0, [r2, #0x0] + moveq r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_02091498 +FUN_02091498: + stmdb sp!, {r4-r6,lr} + ldr r5, [r0, #0x0] + mov r6, #0x0 + ldrb r4, [r5, #0x0] + add r5, r5, #0x1 + mov r12, r6 + cmp r4, r2 + ldr r2, [r1, #0x0] + movne r0, r6 + ldmneia sp!, {r4-r6,lr} + bxne lr + cmp r2, #0x1 + movcc r0, r6 + ldmccia sp!, {r4-r6,lr} + bxcc lr + ldrb lr, [r5, #0x0] + sub r4, r2, #0x1 + ands r2, lr, #0x80 + beq _02091534 + and r2, lr, #0x7f + and lr, r2, #0xff + add r2, lr, #0x1 + cmp r4, r2 + movcc r0, r6 + ldmccia sp!, {r4-r6,lr} + bxcc lr + cmp r3, #0x0 + sub r6, r4, lr + beq _0209152C + ldrb r2, [r5, #0x1] + add r5, r5, #0x1 + and r4, r2, #0x7f +_02091518: + sub r2, lr, #0x1 + add r12, r4, r12, lsl #0x7 + ands lr, r2, #0xff + bne _02091518 + b _02091550 +_0209152C: + add r5, r5, lr + b _02091550 +_02091534: + add r5, r5, #0x1 + cmp r4, #0x1 + mov r12, lr + movcc r0, r6 + ldmccia sp!, {r4-r6,lr} + bxcc lr + sub r6, r4, #0x1 +_02091550: + str r5, [r0, #0x0] + str r6, [r1, #0x0] + cmp r3, #0x0 + strne r12, [r3, #0x0] + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_0209156C +FUN_0209156C: ; 0x0209156C + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x58 + movs r6, r0 + mov r5, r1 + mov r8, r2 + mov r7, r3 + beq _0209159C + cmp r8, #0x0 + beq _0209159C + ldr r0, [sp, #0x70] + cmp r0, #0x0 + bne _020915AC +_0209159C: + add sp, sp, #0x58 + mvn r0, #0x2 + ldmia sp!, {r4-r8,lr} + bx lr +_020915AC: + bl FUN_02094FAC + mov r4, r0 + add r0, sp, #0x4 + bl FUN_0209502C + add r0, sp, #0x18 + bl FUN_0209502C + add r0, sp, #0x2c + bl FUN_0209502C + add r0, sp, #0x40 + bl FUN_0209502C +_020915D4: ; 0x020915D4 + cmp r4, #0x0 + mvneq r5, #0x1 + beq _02091688 + add r2, sp, #0x4 + mov r0, r8 + mov r1, r7 + bl FUN_02094C68 +_020915F0: ; 0x020915F0 + cmp r0, #0x0 + mvneq r5, #0x1 + beq _02091688 + ldr r1, [sp, #0x78] + add r0, sp, #0x2c + bl FUN_02094D7C +_02091608: ; 0x02091608 + cmp r0, #0x0 + mvneq r5, #0x1 + beq _02091688 + ldr r0, [sp, #0x70] + ldr r1, [sp, #0x74] + add r2, sp, #0x40 + bl FUN_02094C68 +_02091624: ; 0x02091624 + cmp r0, #0x0 + mvneq r5, #0x1 + beq _02091688 + add r0, sp, #0x18 + add r1, sp, #0x4 + add r2, sp, #0x2c + add r3, sp, #0x40 + str r4, [sp, #0x0] + bl FUN_020931B8 +_02091648: ; 0x02091648 + cmp r0, #0x0 + mvneq r5, #0x1 + beq _02091688 + add r0, sp, #0x18 + bl FUN_02095188 + add r1, r0, #0x7 + mov r0, r1, asr #0x2 + add r0, r1, r0, lsr #0x1d + mov r0, r0, asr #0x3 + cmp r0, r5 + mvngt r5, #0x0 + bgt _02091688 + add r0, sp, #0x18 + mov r1, r6 + bl FUN_02094BEC + mov r5, r0 +_02091688: + add r0, sp, #0x4 + bl FUN_0209510C + add r0, sp, #0x18 + bl FUN_0209510C + add r0, sp, #0x2c + bl FUN_0209510C + add r0, sp, #0x40 + bl FUN_0209510C +_020916A8: ; 0x020916A8 + cmp r4, #0x0 + beq _020916B8 + mov r0, r4 + bl FUN_02094F3C +_020916B8: + mov r0, r5 + add sp, sp, #0x58 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FUN_020916C8 +FUN_020916C8: ; 0x020916C8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x7c + mov r4, #0x0 + mov r5, r3 + mov r3, r4 + str r3, [sp, #0x34] + ldr r3, [r5, #0x0] + str r0, [sp, #0x4] + mov r0, r4 + ldr r3, [r3, #0x0] + str r0, [sp, #0x1c] + str r0, [sp, #0x20] + ands r0, r3, #0x1 + ldr r0, [sp, #0xa0] + str r4, [sp, #0x8] + str r0, [sp, #0xa0] + mov r7, r1 + mov r6, r2 + addeq sp, sp, #0x7c + moveq r0, r4 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldr r1, [r7, #0x4] + ldr r0, [r0, #0x0] + cmp r1, #0x0 + str r0, [sp, #0xc] + beq _0209174C + cmp r1, #0x1 + bne _02091768 + ldr r0, [r7, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _02091768 +_0209174C: + ldr r0, [sp, #0x4] + mov r1, #0x0 + bl FUN_02094D7C + add sp, sp, #0x7c + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_02091768: + ldr r1, [r6, #0x4] + cmp r1, #0x0 + beq _0209178C + cmp r1, #0x1 + bne _020917A8 + ldr r0, [r6, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020917A8 +_0209178C: + ldr r0, [sp, #0x4] + mov r1, #0x1 + bl FUN_02094D7C + add sp, sp, #0x7c + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_020917A8: + cmp r1, #0x1 + bne _020917DC + ldr r0, [r6, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x1 + bne _020917DC + ldr r0, [sp, #0x4] + mov r1, r7 + bl FUN_02094E24 + add sp, sp, #0x7c + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_020917DC: + ldr r0, [sp, #0xa4] + str r0, [sp, #0x18] + cmp r0, #0x0 + bne _02091810 + bl FUN_02092860 + str r0, [sp, #0x18] + cmp r0, #0x0 + beq _02091E6C + ldr r2, [sp, #0xa0] + mov r1, r5 + bl FUN_02092894 +_02091808: ; 0x02091808 + cmp r0, #0x0 + beq _02091E6C +_02091810: + ldr r3, [sp, #0xa0] + add r1, sp, #0x34 + mov r4, r3 + ldr r4, [r4, #0x10c] + mov r0, r6 + mov r2, #0x0 + str r4, [sp, #0x1c] + bl FUN_02092C28 +_02091830: ; 0x02091830 + cmp r0, #0x0 + beq _02091E6C + ldr r0, [sp, #0xa0] + ldr r0, [r0, #0x0] + add r1, r0, #0x1 + ldr r0, [sp, #0xa0] + str r1, [r0, #0x0] + ldr r0, [sp, #0x34] + ldrb r1, [r0, #0x2] + ldrb r0, [r0, #0x3] + str r0, [sp, #0x10] + add r0, r1, #0x3f + bl _s32_div_f + ldr r1, [sp, #0x34] + mov r4, r0 + add r0, r1, #0x4 + str r0, [sp, #0x34] + ldr r0, [sp, #0x18] + ldr r3, [r7, #0x4] + ldr r10, [r0, #0x24] + cmp r3, r10 + bne _020918A8 + ldr r1, [r7, #0x0] + sub r2, r10, #0x1 + ldr r0, [r5, #0x0] + ldr r1, [r1, r2, lsl #0x2] + ldr r0, [r0, r2, lsl #0x2] + cmp r1, r0 + strcc r7, [sp, #0x14] + blo _02091960 +_020918A8: + cmp r3, r10 + bge _0209191C + ldr r0, [sp, #0xa0] + ldr r3, [r0, #0x0] + add r1, r0, #0x4 + add r2, r3, #0x1 + str r2, [r0, #0x0] + mov r0, #0x14 + mla r0, r3, r0, r1 + ldr r2, [r7, #0x4] + mov r1, r0 + str r2, [r1, #0x4] + mov r1, r10 + str r0, [sp, #0x14] + bl FUN_0209508C + ldr r0, [r7, #0x4] + mov r2, #0x0 + cmp r0, #0x0 + ble _02091960 +_020918F4: + ldr r1, [r7, #0x0] + ldr r0, [sp, #0x14] + ldr r1, [r1, r2, lsl #0x2] + ldr r0, [r0, #0x0] + str r1, [r0, r2, lsl #0x2] + ldr r0, [r7, #0x4] + add r2, r2, #0x1 + cmp r2, r0 + blt _020918F4 + b _02091960 +_0209191C: + ldr r0, [sp, #0xa0] + mov r2, r5 + ldr r3, [r0, #0x0] + mov r1, r7 + add r5, r3, #0x1 + str r5, [r0, #0x0] + add r5, r0, #0x4 + mov r0, #0x14 + mla r0, r3, r0, r5 + ldr r3, [sp, #0xa0] + str r0, [sp, #0x14] + bl FUN_02093214 +_0209194C: ; 0x0209194C + cmp r0, #0x0 + beq _02091E6C + ldr r0, [sp, #0x14] + mov r1, r10 + bl FUN_0209508C +_02091960: + ldr r0, [sp, #0xa0] + ldr r3, [r0, #0x0] + ldr r0, [r6, #0x4] + add r1, r3, #0x1 + mul r2, r0, r4 + ldr r0, [sp, #0xa0] + mov r4, r2, lsl #0x1 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r4, r4, #0x7 + add r2, r1, #0x1 + str r2, [r0, #0x0] + ldr r2, [sp, #0x10] + ldr r0, [r0, #0x0] + mul r5, r2, r10 + mov r2, r4, asr #0x1 + add r2, r4, r2, lsr #0x1e + add r5, r5, r2, asr #0x2 + ldr r2, [sp, #0xa0] + mov r6, #0x14 + add r2, r2, #0x4 + mla r8, r1, r6, r2 + mla r4, r3, r6, r2 + ldr r1, [sp, #0xa0] + add r3, r0, #0x1 + mla r7, r0, r6, r2 + str r3, [r1, #0x0] + mov r0, r1 + ldr r0, [r0, #0x0] + mla r6, r0, r6, r2 + add r1, r0, #0x1 + ldr r0, [sp, #0xa0] + str r1, [r0, #0x0] + ldr r0, [sp, #0x4] + ldr r0, [r0, #0x8] + cmp r10, r0 + ldrle r0, [sp, #0x4] + ble _02091A04 + ldr r0, [sp, #0x4] + mov r1, r10 + bl FUN_02094EBC +_02091A04: + cmp r0, #0x0 + beq _02091E6C + ldr r0, [r8, #0x8] + mov r1, r10, lsl #0x2 + cmp r1, r0 + movle r0, r8 + ble _02091A28 + mov r0, r8 + bl FUN_02094EBC +_02091A28: + cmp r0, #0x0 + beq _02091E6C + ldr r1, [r7, #0x8] + mov r0, r10, lsl #0x1 + str r0, [sp, #0x24] + cmp r0, r1 + movle r0, r7 + ble _02091A54 + ldr r1, [sp, #0x24] + mov r0, r7 + bl FUN_02094EBC +_02091A54: + cmp r0, #0x0 + beq _02091E6C + ldr r0, [r4, #0x8] + cmp r5, r0 + movle r0, r4 + ble _02091A78 + mov r1, r5 + mov r0, r4 + bl FUN_02094EBC +_02091A78: + cmp r0, #0x0 + beq _02091E6C + ldr r1, [r6, #0x8] + ldr r0, [sp, #0x24] + cmp r0, r1 + movle r0, r6 + ble _02091AA0 + ldr r1, [sp, #0x24] + mov r0, r6 + bl FUN_02094EBC +_02091AA0: + cmp r0, #0x0 + beq _02091E6C + ldr r0, [sp, #0x18] + ldr r11, [r8, #0x0] + ldr r8, [r7, #0x0] + ldr r6, [r6, #0x0] + ldr r1, [r4, #0x0] + ldr r7, [r0, #0x48] + ldr r5, [r0, #0x20] + ldr r3, [sp, #0x18] + str r1, [sp, #0x38] + str r10, [sp, #0x0] + ldr r1, [sp, #0x14] + ldr r3, [r3, #0xc] + ldr r1, [r1, #0x0] + mov r0, r6 + mov r2, r10 + bl FUN_020937E8 + str r7, [sp, #0x0] + ldr r0, [sp, #0x38] + mov r1, r6 + mov r2, r5 + mov r3, r10 + bl FUN_02092E30 + ldr r0, [sp, #0x10] + cmp r0, #0x1 + ble _02091BA8 + ldr r1, [sp, #0x38] + mov r0, r6 + mov r2, r10 + mov r3, r11 + bl FUN_02092F70 + mov r0, r11 + mov r1, r6 + mov r2, r5 + mov r3, r10 + str r7, [sp, #0x0] + bl FUN_02092E30 + ldr r0, [sp, #0x10] + mov r4, #0x1 + cmp r0, #0x1 + ble _02091BA8 + mov r0, r10, lsl #0x2 + str r0, [sp, #0x28] + add r9, sp, #0x38 +_02091B54: + sub r3, r4, #0x1 + ldr r2, [r9, r3, lsl #0x2] + ldr r1, [sp, #0x28] + mov r0, r6 + add r1, r2, r1 + str r1, [r9, r4, lsl #0x2] + str r10, [sp, #0x0] + ldr r1, [r9, r3, lsl #0x2] + mov r2, r10 + mov r3, r11 + bl FUN_020937E8 + str r7, [sp, #0x0] + ldr r0, [r9, r4, lsl #0x2] + mov r1, r6 + mov r2, r5 + mov r3, r10 + bl FUN_02092E30 + ldr r0, [sp, #0x10] + add r4, r4, #0x1 + cmp r4, r0 + blt _02091B54 +_02091BA8: + ldr r3, [sp, #0x34] + add r0, r3, #0x1 + str r0, [sp, #0x34] + add r2, r0, #0x1 + ldrb r1, [r3, #0x0] + str r2, [sp, #0x34] + ldrb r9, [r3, #0x1] + cmp r9, #0xff + bne _02091C28 + cmp r1, #0x0 + bne _02091C28 + add r0, r2, #0x1 + str r0, [sp, #0x34] + ldrb r1, [r2, #0x0] + b _02091BF8 +_02091BE4: + add r9, r9, #0x100 + ldr r1, [sp, #0x34] + add r1, r1, #0x2 + str r1, [sp, #0x34] + ldrb r1, [r0, #0x1] +_02091BF8: + ldr r0, [sp, #0x34] + ldrb r2, [r0, #0x0] + cmp r2, #0xff + bne _02091C10 + cmp r1, #0x0 + beq _02091BE4 +_02091C10: + ldr r2, [sp, #0x34] + add r2, r2, #0x1 + str r2, [sp, #0x34] + ldrb r0, [r0, #0x0] + add r0, r0, #0x1 + add r9, r9, r0 +_02091C28: + mov r2, r1, asr #0x1 + add r0, sp, #0x38 + ldr r0, [r0, r2, lsl #0x2] + mov r1, r8 + mov r2, r10, lsl #0x2 + bl MI_CpuCopy8 +_02091C40: ; 0x02091C40 + cmp r9, #0x0 + beq _02091E00 + mov r0, #0xff + str r0, [sp, #0x2c] + mov r0, #0x0 + str r0, [sp, #0x30] +_02091C58: + ldr r0, [sp, #0x1c] + cmp r0, #0x0 + beq _02091C8C + mov r3, r0 + ldr r1, [sp, #0x2c] + ldr r2, [sp, #0x20] + ldr r3, [r3, #0x0] + blx r3 + cmp r0, #0x0 + ldr r0, [sp, #0x20] + add r0, r0, #0x1 + str r0, [sp, #0x20] + bne _02091E6C +_02091C8C: + ldr r0, [sp, #0xa0] + ldr r0, [r0, #0x108] + ands r0, r0, #0x4000 + bne _02091E6C + cmp r9, #0x0 + ldr r4, [sp, #0x30] + ble _02091CE0 +_02091CA8: + mov r0, r6 + mov r1, r8 + mov r2, r10 + mov r3, r11 + bl FUN_02092F70 + str r7, [sp, #0x0] + mov r0, r8 + mov r1, r6 + mov r2, r5 + mov r3, r10 + bl FUN_02092E30 + add r4, r4, #0x1 + cmp r4, r9 + blt _02091CA8 +_02091CE0: + ldr r2, [sp, #0x34] + add r0, r2, #0x1 + str r0, [sp, #0x34] + add r1, r0, #0x1 + ldrb r0, [r2, #0x0] + str r1, [sp, #0x34] + ldrb r9, [r2, #0x1] + cmp r9, #0xff + bne _02091D60 + cmp r0, #0x0 + bne _02091D60 + add r0, r1, #0x1 + str r0, [sp, #0x34] + ldrb r0, [r1, #0x0] + b _02091D30 +_02091D1C: + add r9, r9, #0x100 + ldr r0, [sp, #0x34] + add r0, r0, #0x2 + str r0, [sp, #0x34] + ldrb r0, [r1, #0x1] +_02091D30: + ldr r1, [sp, #0x34] + ldrb r2, [r1, #0x0] + cmp r2, #0xff + bne _02091D48 + cmp r0, #0x0 + beq _02091D1C +_02091D48: + ldr r2, [sp, #0x34] + add r2, r2, #0x1 + str r2, [sp, #0x34] + ldrb r1, [r1, #0x0] + add r1, r1, #0x1 + add r9, r9, r1 +_02091D60: + cmp r0, #0x0 + bne _02091D70 + cmp r9, #0x0 + beq _02091E00 +_02091D70: + cmp r9, #0x0 + bne _02091D80 + cmp r0, #0x1 + beq _02091DBC +_02091D80: + mov r1, r0, asr #0x1 + str r10, [sp, #0x0] + add r0, sp, #0x38 + ldr r3, [r0, r1, lsl #0x2] + mov r0, r6 + mov r1, r8 + mov r2, r10 + bl FUN_020937E8 + mov r0, r8 + mov r1, r6 + mov r2, r5 + mov r3, r10 + str r7, [sp, #0x0] + bl FUN_02092E30 + b _02091DF8 +_02091DBC: + ldr r0, [sp, #0x14] + str r10, [sp, #0x0] + ldr r3, [r0, #0x0] + mov r0, r6 + mov r1, r8 + mov r2, r10 + bl FUN_020937E8 + ldr r0, [sp, #0x4] + str r7, [sp, #0x0] + ldr r0, [r0, #0x0] + mov r1, r6 + mov r2, r5 + mov r3, r10 + bl FUN_02092E30 + b _02091E44 +_02091DF8: + cmp r9, #0x0 + bne _02091C58 +_02091E00: + ldr r0, [sp, #0x24] + mov r2, r10 + cmp r10, r0 + bge _02091E28 + mov r1, #0x0 +_02091E14: + ldr r0, [sp, #0x24] + str r1, [r8, r2, lsl #0x2] + add r2, r2, #0x1 + cmp r2, r0 + blt _02091E14 +_02091E28: + ldr r0, [sp, #0x4] + str r7, [sp, #0x0] + ldr r0, [r0, #0x0] + mov r1, r8 + mov r2, r5 + mov r3, r10 + bl FUN_02092E30 +_02091E44: + ldr r0, [sp, #0xa0] + ldr r0, [r0, #0x108] + ands r0, r0, #0x4000 + bne _02091E6C + ldr r0, [sp, #0x4] + mov r1, r0 + str r10, [r1, #0x4] + bl FUN_02095040 + mov r0, #0x1 + str r0, [sp, #0x8] +_02091E6C: + ldr r0, [sp, #0x1c] + cmp r0, #0x0 + beq _02091E94 + ldr r3, [r0, #0x0] + mov r1, #0xff + mvn r2, #0x0 + blx r3 + cmp r0, #0x0 + movne r0, #0x0 + strne r0, [sp, #0x8] +_02091E94: + ldr r0, [sp, #0xa4] + cmp r0, #0x0 + bne _02091EB0 + ldr r0, [sp, #0x18] + cmp r0, #0x0 + beq _02091EB0 + bl FUN_020927E4 +_02091EB0: + ldr r2, [sp, #0xc] + ldr r1, [sp, #0xa0] + ldr r0, [sp, #0x8] + str r2, [r1, #0x0] + add sp, sp, #0x7c + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FUN_02091ECC +FUN_02091ECC: ; 0x02091ECC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x18c + mov r10, r0 + mov r0, #0x0 + str r0, [sp, #0x8] + mov r5, r1 + ldr r1, [sp, #0x8] + mov r0, r2 + str r2, [sp, #0x4] + mov r4, r3 + str r1, [sp, #0xc] + ldr r9, [sp, #0x1b0] + bl FUN_02095188 + ldr r1, [r5, #0x4] + mov r8, r0 + cmp r1, #0x0 + beq _02091F28 + cmp r1, #0x1 + bne _02091F44 + ldr r0, [r5, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _02091F44 +_02091F28: + mov r0, r10 + mov r1, #0x0 + bl FUN_02094D7C + add sp, sp, #0x18c + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_02091F44: + ldr r0, [sp, #0x4] + ldr r1, [r0, #0x4] + cmp r1, #0x0 + beq _02091F6C + cmp r1, #0x1 + bne _02091F88 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _02091F88 +_02091F6C: + mov r0, r10 + mov r1, #0x1 + bl FUN_02094D7C + add sp, sp, #0x18c + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_02091F88: + cmp r1, #0x1 + bne _02091FC0 + ldr r0, [sp, #0x4] + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x1 + bne _02091FC0 + mov r0, r10 + mov r1, r5 + bl FUN_02094E24 + add sp, sp, #0x18c + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_02091FC0: + add r0, sp, #0x18 + bl FUN_020927BC + add r0, sp, #0x18 + mov r1, r4 + mov r2, r9 + bl FUN_02092744 +_02091FD8: ; 0x02091FD8 + cmp r0, #0x0 + ble _0209220C + add r0, sp, #0x4c + bl FUN_0209502C + ldr r2, [r9, #0x0] + add r1, r9, #0x4 + mov r0, #0x14 + mla r6, r2, r0, r1 + add r1, r2, #0x1 + str r1, [r9, #0x0] + mov r2, r4 + mov r4, #0x1 + add r0, sp, #0x4c + mov r1, r5 + mov r3, r9 + str r4, [sp, #0xc] + bl FUN_02093214 +_0209201C: ; 0x0209201C + cmp r0, #0x0 + beq _0209220C + add r1, sp, #0x4c + add r3, sp, #0x18 + mov r0, r6 + mov r2, r1 + str r9, [sp, #0x0] + bl FUN_02092698 +_0209203C: ; 0x0209203C + cmp r0, #0x0 + beq _0209220C + cmp r8, #0x11 + movle r11, r4 + ble _02092068 + cmp r8, #0x100 + movge r11, #0x5 + bge _02092068 + cmp r8, #0x80 + movge r11, #0x4 + movlt r11, #0x3 +_02092068: + sub r0, r11, #0x1 + mov r4, #0x1 + mov r7, r4, lsl r0 + cmp r7, #0x1 + ble _020920C4 + add r5, sp, #0x60 +_02092080: + mov r0, r5 + bl FUN_0209502C + sub r3, r4, #0x1 + mov r2, #0x14 + add r1, sp, #0x4c + mla r1, r3, r2, r1 + mov r0, r5 + mov r2, r6 + add r3, sp, #0x18 + str r9, [sp, #0x0] + bl FUN_02092698 +_020920AC: ; 0x020920AC + cmp r0, #0x0 + beq _0209220C + add r4, r4, #0x1 + cmp r4, r7 + add r5, r5, #0x14 + blt _02092080 +_020920C4: + mov r5, #0x1 + mov r0, r10 + mov r1, r5 + str r4, [sp, #0xc] + sub r8, r8, #0x1 + bl FUN_02094D7C +_020920DC: ; 0x020920DC + cmp r0, #0x0 + beq _0209220C + mov r0, r5 + str r0, [sp, #0x10] + mov r0, #0x0 + str r0, [sp, #0x14] +_020920F4: + ldr r0, [sp, #0x4] + mov r1, r8 + bl FUN_02094A8C +_02092100: ; 0x02092100 + cmp r0, #0x0 + bne _02092140 + cmp r5, #0x0 + bne _02092130 + mov r0, r10 + mov r1, r10 + mov r2, r10 + add r3, sp, #0x18 + str r9, [sp, #0x0] + bl FUN_02092698 +_02092128: ; 0x02092128 + cmp r0, #0x0 + beq _0209220C +_02092130: + cmp r8, #0x0 + beq _02092204 + sub r8, r8, #0x1 + b _020920F4 +_02092140: + ldr r6, [sp, #0x10] + ldr r7, [sp, #0x14] + cmp r11, #0x1 + mov r4, r6 + ble _02092184 +_02092154: + subs r1, r8, r4 + bmi _02092184 + ldr r0, [sp, #0x4] + bl FUN_02094A8C +_02092164: ; 0x02092164 + cmp r0, #0x0 + subne r0, r4, r7 + movne r0, r6, lsl r0 + movne r7, r4 + add r4, r4, #0x1 + orrne r6, r0, #0x1 + cmp r4, r11 + blt _02092154 +_02092184: + cmp r5, #0x0 + add r5, r7, #0x1 + bne _020921C8 + cmp r5, #0x0 + ldr r4, [sp, #0x14] + ble _020921C8 +_0209219C: + mov r0, r10 + mov r1, r10 + mov r2, r10 + add r3, sp, #0x18 + str r9, [sp, #0x0] + bl FUN_02092698 +_020921B4: ; 0x020921B4 + cmp r0, #0x0 + beq _0209220C + add r4, r4, #0x1 + cmp r4, r5 + blt _0209219C +_020921C8: + mov r3, r6, asr #0x1 + mov r1, #0x14 + add r0, sp, #0x4c + mla r2, r3, r1, r0 + mov r0, r10 + mov r1, r10 + add r3, sp, #0x18 + str r9, [sp, #0x0] + bl FUN_02092698 +_020921EC: ; 0x020921EC + cmp r0, #0x0 + beq _0209220C + add r0, r7, #0x1 + ldr r5, [sp, #0x14] + subs r8, r8, r0 + bpl _020920F4 +_02092204: + mov r0, #0x1 + str r0, [sp, #0x8] +_0209220C: + ldr r0, [sp, #0xc] + ldr r1, [r9, #0x0] + cmp r0, #0x0 + sub r0, r1, #0x1 + str r0, [r9, #0x0] + mov r4, #0x0 + ble _02092248 + add r5, sp, #0x4c +_0209222C: + mov r0, r5 + bl FUN_02095164 + ldr r0, [sp, #0xc] + add r4, r4, #0x1 + cmp r4, r0 + add r5, r5, #0x14 + blt _0209222C +_02092248: + add r0, sp, #0x18 + bl FUN_02092788 + ldr r0, [sp, #0x8] + add sp, sp, #0x18c + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FUN_02092260 +FUN_02092260: ; 0x02092260 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + movs r8, r2 + mov r10, r0 + mov r9, r1 + mov r11, #0x0 + mov r5, #0x2 + addeq sp, sp, #0x4 + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + mov r0, r8 + bl FUN_020951BC + cmp r0, #0x20 + beq _020922B4 + mov r1, #0x1 + cmp r10, r1, lsl r0 + addhi sp, sp, #0x4 + movhi r0, r11 + ldmhiia sp!, {r4-r11,lr} + bxhi lr +_020922B4: + cmp r10, r8 + rsb r2, r0, #0x20 + subcs r10, r10, r8 + cmp r2, #0x0 + movne r1, r10, lsl r2 + rsbne r0, r2, #0x20 + orrne r10, r1, r9, lsr r0 + movne r8, r8, lsl r2 + ldr r4, _0209239C ; =0x0000FFFF + movne r9, r9, lsl r2 + and r7, r4, r8, lsr #0x10 + and r6, r8, r4 +_020922E4: + mov r0, r10, lsr #0x10 + cmp r0, r7 + moveq r0, r4 + beq _02092300 + mov r0, r10 + mov r1, r7 + bl _u32_div_f +_02092300: + mul r12, r0, r7 + mul r3, r0, r6 + and r2, r4, r9, lsr #0x10 +_0209230C: + mov lr, #0x10000 + sub r1, r10, r12 + rsb lr, lr, #0x0 + ands lr, r1, lr + bne _02092338 + add r1, r2, r1, lsl #0x10 + cmp r3, r1 + subhi r12, r12, r7 + subhi r3, r3, r6 + subhi r0, r0, #0x1 + bhi _0209230C +_02092338: + mul r2, r0, r6 + and r1, r2, r4 + mul r3, r0, r7 + mov r1, r1, lsl #0x10 + cmp r9, r1 + add r2, r3, r2, lsr #0x10 + addcc r2, r2, #0x1 + cmp r10, r2 + addcc r10, r10, r8 + sub r9, r9, r1 + subcc r0, r0, #0x1 + sub r1, r10, r2 + subs r5, r5, #0x1 + beq _0209238C + and r2, r0, r4 + mov r1, r1, lsl #0x10 + and r0, r9, r4 + orr r10, r1, r9, lsr #0x10 + mov r11, r2, lsl #0x10 + mov r9, r0, lsl #0x10 + b _020922E4 +_0209238C: + orr r0, r11, r0 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0209239C: .word 0x0000FFFF + + arm_func_start FUN_020923A0 +FUN_020923A0: ; 0x020923A0 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x18 + mov r8, r0 + add r0, sp, #0x4 + mov r7, r1 + mov r6, r2 + mov r5, r3 + mvn r4, #0x0 + bl FUN_0209502C + add r0, sp, #0x4 + mov r1, #0x0 + bl FUN_02094D7C + add r0, sp, #0x4 + mov r1, r6 + bl FUN_02094AFC +_020923DC: ; 0x020923DC + cmp r0, #0x0 + beq _02092404 + add r2, sp, #0x4 + mov r0, r8 + mov r3, r7 + mov r1, #0x0 + str r5, [sp, #0x0] + bl FUN_02093248 +_020923FC: ; 0x020923FC + cmp r0, #0x0 + movne r4, r6 +_02092404: + add r0, sp, #0x4 + bl FUN_0209510C + mov r0, r4 + add sp, sp, #0x18 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FUN_0209241C +FUN_0209241C: ; 0x0209241C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + ldr r6, [sp, #0x30] + mov r9, r1 + ldr r11, [r6, #0x0] + movs r10, r0 + add r0, r11, #0x1 + str r0, [r6, #0x0] + ldr r7, [r6, #0x0] + add r4, r6, #0x4 + mov r0, #0x14 + mla r5, r11, r0, r4 + add r12, r7, #0x1 + mov r1, #0x0 + str r5, [sp, #0x4] + mla r5, r7, r0, r4 + str r12, [r6, #0x0] + str r1, [sp, #0x0] + ldreq r1, [r6, #0x0] + mov r8, r2 + mlaeq r10, r1, r0, r4 + addeq r0, r1, #0x1 + streq r0, [r6, #0x0] + mov r7, r3 + cmp r9, #0x0 + bne _0209249C + ldr r2, [r6, #0x0] + add r1, r6, #0x4 + mov r0, #0x14 + mla r9, r2, r0, r1 + add r0, r2, #0x1 + str r0, [r6, #0x0] +_0209249C: + mov r0, r8 + mov r1, r7 + bl FUN_02094B98 +_020924A8: ; 0x020924A8 + cmp r0, #0x0 + bge _020924DC + mov r0, r10 + mov r1, #0x0 + bl FUN_02094D7C + mov r0, r9 + mov r1, r8 + bl FUN_02094E24 + add sp, sp, #0xc + str r11, [r6, #0x0] + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_020924DC: + mov r0, r8 + bl FUN_02095188 + ldr r1, [r7, #0x28] + mov r2, r0 + mov r0, r1, lsl #0x1 + cmp r0, r2 + movgt r2, r0 + suble r0, r2, r0 + movgt r4, #0x0 + addle r0, r0, r0, lsr #0x1f + movle r4, r0, asr #0x1 + ldr r1, [r7, #0x2c] + add r0, r2, r2, lsr #0x1f + mov r0, r0, asr #0x1 + cmp r2, r1 + str r0, [sp, #0x8] + beq _02092534 + mov r1, r7 + mov r3, r6 + add r0, r7, #0x14 + bl FUN_020923A0 + str r0, [r7, #0x2c] +_02092534: + ldr r2, [sp, #0x8] + ldr r0, [sp, #0x4] + mov r1, r8 + sub r2, r2, r4 + bl FUN_02094134 +_02092548: ; 0x02092548 + cmp r0, #0x0 + beq _02092684 + ldr r1, [sp, #0x4] + mov r0, r5 + mov r3, r6 + add r2, r7, #0x14 + bl FUN_0209390C +_02092564: ; 0x02092564 + cmp r0, #0x0 + beq _02092684 + ldr r2, [sp, #0x8] + mov r0, r10 + mov r1, r5 + add r2, r2, r4 + bl FUN_02094134 +_02092580: ; 0x02092580 + cmp r0, #0x0 + beq _02092684 + mov r4, #0x0 + mov r0, r5 + mov r1, r7 + mov r2, r10 + mov r3, r6 + str r4, [r10, #0xc] + bl FUN_0209390C +_020925A4: ; 0x020925A4 + cmp r0, #0x0 + beq _02092684 + mov r0, r9 + mov r1, r8 + mov r2, r5 + bl FUN_02093B50 +_020925BC: ; 0x020925BC + cmp r0, #0x0 + beq _02092684 + mov r5, r4 + mov r0, r9 + mov r1, r7 + str r5, [r9, #0xc] + bl FUN_02094B98 +_020925D8: ; 0x020925D8 + cmp r0, #0x0 + blt _02092630 + mov r4, #0x1 +_020925E4: + cmp r5, #0x2 + add r5, r5, #0x1 + bgt _02092684 + mov r0, r9 + mov r1, r9 + mov r2, r7 + bl FUN_02093B50 +_02092600: ; 0x02092600 + cmp r0, #0x0 + beq _02092684 + mov r0, r10 + mov r1, r4 + bl FUN_0209400C +_02092614: ; 0x02092614 + cmp r0, #0x0 + beq _02092684 + mov r0, r9 + mov r1, r7 + bl FUN_02094B98 +_02092628: ; 0x02092628 + cmp r0, #0x0 + bge _020925E4 +_02092630: + ldr r0, [r9, #0x4] + mov r1, #0x1 + cmp r0, #0x0 + beq _0209265C + cmp r0, #0x1 + bne _02092658 + ldr r0, [r9, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _0209265C +_02092658: + mov r1, #0x0 +_0209265C: + cmp r1, #0x0 + movne r0, #0x0 + ldreq r0, [r8, #0xc] + str r0, [r9, #0xc] + mov r0, #0x1 + ldr r2, [r8, #0xc] + ldr r1, [r7, #0xc] + str r0, [sp, #0x0] + eor r0, r2, r1 + str r0, [r10, #0xc] +_02092684: + ldr r0, [sp, #0x0] + str r11, [r6, #0x0] + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FUN_02092698 +FUN_02092698: + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + ldr r4, [sp, #0x20] + mov r12, #0x14 + ldr r5, [r4, #0x0] + add lr, r4, #0x4 + mla r6, r5, r12, lr + add r12, r5, #0x1 + mov r8, r0 + mov r7, r3 + str r12, [r4, #0x0] + cmp r2, #0x0 + mov r5, #0x0 + beq _02092708 + cmp r1, r2 + bne _020926F0 + mov r0, r6 + mov r2, r4 + bl FUN_0209305C +_020926E4: ; 0x020926E4 + cmp r0, #0x0 + bne _0209270C + b _02092728 +_020926F0: + mov r0, r6 + mov r3, r4 + bl FUN_0209390C +_020926FC: ; 0x020926FC + cmp r0, #0x0 + bne _0209270C + b _02092728 +_02092708: + mov r6, r1 +_0209270C: + mov r1, r8 + mov r2, r6 + mov r3, r7 + mov r0, #0x0 + str r4, [sp, #0x0] + bl FUN_0209241C + mov r5, #0x1 +_02092728: + ldr r1, [r4, #0x0] + mov r0, r5 + sub r1, r1, #0x1 + str r1, [r4, #0x0] + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FUN_02092744 +FUN_02092744: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl FUN_02094E24 + add r0, r5, #0x14 + mov r1, #0x0 + bl FUN_02094D7C + mov r0, r4 + bl FUN_02095188 + str r0, [r5, #0x28] + mov r0, #0x0 + str r0, [r5, #0x2c] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_02092788 +FUN_02092788: ; 0x02092788 + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_0209510C + add r0, r4, #0x14 + bl FUN_0209510C + ldr r0, [r4, #0x30] + ands r0, r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr + mov r0, r4 + bl FUN_0209105C + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020927BC +FUN_020927BC: ; 0x020927BC + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_0209502C + add r0, r4, #0x14 + bl FUN_0209502C +_020927D0: ; 0x020927D0 + mov r0, #0x0 + str r0, [r4, #0x28] + str r0, [r4, #0x30] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020927E4 +FUN_020927E4: ; 0x020927E4 + stmdb sp!, {r4,lr} + mov r4, r0 + add r0, r4, #0xc + bl FUN_0209510C + add r0, r4, #0x20 + bl FUN_0209510C + add r0, r4, #0x34 + bl FUN_0209510C + ldr r0, [r4, #0x4c] + ands r0, r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr + mov r0, r4 + bl FUN_0209105C + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_02092824 +FUN_02092824: ; 0x02092824 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r1, #0x0 + str r1, [r4, #0x0] + add r0, r4, #0xc + str r1, [r4, #0x8] + bl FUN_0209502C + add r0, r4, #0x20 + bl FUN_0209502C + add r0, r4, #0x34 + bl FUN_0209502C +_02092850: ; 0x02092850 + mov r0, #0x0 + str r0, [r4, #0x4c] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_02092860 +FUN_02092860: ; 0x02092860 + stmdb sp!, {r4,lr} + mov r0, #0x50 + bl FUN_020910A4 + movs r4, r0 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + bl FUN_02092824 + mov r1, #0x1 + mov r0, r4 + str r1, [r4, #0x4c] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_02092894 +FUN_02092894: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x14 + mov r6, r1 + ldr r3, [r6, #0x4] + mov r7, r0 + cmp r3, #0x0 + mov r5, r2 + addeq sp, sp, #0x14 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + add r0, r7, #0x20 + add r4, r7, #0xc + bl FUN_02094E24 +_020928CC: ; 0x020928CC + cmp r0, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + add r0, sp, #0x0 + bl FUN_0209502C + mov r1, #0x1 + mov r0, r6 + str r1, [r7, #0x0] + bl FUN_02095188 + add r1, r0, #0x1f + mov r0, r1, asr #0x4 + add r0, r1, r0, lsr #0x1b + mov r2, r0, asr #0x5 + mov r0, r4 + mov r1, #0x0 + str r2, [r7, #0x8] + bl FUN_02094D7C +_02092918: ; 0x02092918 + cmp r0, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r4 + mov r1, #0x20 + bl FUN_02094AFC +_02092938: ; 0x02092938 + cmp r0, #0x0 + beq _02092A38 + ldr r0, [r6, #0x0] + ldr r4, [r0, #0x0] + mov r0, r4 + bl FUN_02092D9C + mov r1, r0 + add r0, sp, #0x0 + bl FUN_02094D7C +_0209295C: ; 0x0209295C + cmp r0, #0x0 + beq _02092A38 + add r0, sp, #0x0 + mov r2, #0x20 + mov r1, r0 + bl FUN_02094250 +_02092974: ; 0x02092974 + cmp r0, #0x0 + beq _02092A38 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020929B0 + cmp r0, #0x1 + bne _020929A0 + ldr r0, [sp, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020929B0 +_020929A0: + add r0, sp, #0x0 + mov r1, #0x1 + bl FUN_02093EAC + b _020929C4 +_020929B0: + add r0, sp, #0x0 + mvn r1, #0x0 + bl FUN_02094D7C +_020929BC: ; 0x020929BC + cmp r0, #0x0 + beq _02092A38 +_020929C4: + ldr r2, [sp, #0x4] + cmp r2, #0x1 + ldrge r0, [sp, #0x0] + ldrge r1, [r0, #0x0] + movlt r1, #0x0 + cmp r2, #0x2 + ldrge r0, [sp, #0x0] + mov r2, r4 + ldrge r0, [r0, #0x4] + movlt r0, #0x0 + bl FUN_02092260 + str r0, [r7, #0x48] + add r0, r7, #0xc + mov r1, #0x0 + bl FUN_02094D7C + ldr r1, [r7, #0x8] + add r0, r7, #0xc + mov r1, r1, lsl #0x6 + bl FUN_02094AFC +_02092A10: ; 0x02092A10 + cmp r0, #0x0 + beq _02092A38 + add r0, r7, #0xc + mov r1, r0 + mov r3, r5 + add r2, r7, #0x20 + bl FUN_02093214 + ldr r1, [r7, #0x8] + add r0, r7, #0xc + bl FUN_0209508C +_02092A38: + add r0, sp, #0x0 + bl FUN_0209510C + mov r0, #0x1 + add sp, sp, #0x14 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_02092A50 +FUN_02092A50: ; 0x02092A50 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r4, r2 + mov r7, r1 + cmp r4, #0x6 + mov r5, r0 + movgt r4, #0x6 + mov r1, #0x1 + mov r2, r1, lsl r4 + ldr r0, [r7, #0x4] + sub r2, r2, #0x1 + add r0, r4, r0, lsl #0x5 + ldr r3, _02092C24 ; =0x02106170 + str r2, [sp, #0x0] + ldr r2, [r3, r4, lsl #0x2] + mov r1, r4 + sub r0, r0, #0x1 + str r2, [sp, #0x4] + mov r6, #0x0 + bl _s32_div_f + mov r12, #0x0 + mov r0, r0, lsl #0x1 + add r0, r0, #0x2 + mov r8, r6 + add r1, r5, r0 + strb r8, [r5, r0] + strb r8, [r1, #-0x1] + ldr r0, [r7, #0x0] + ldr r2, [r7, #0x4] + ldr r7, [r0, #0x0] + add lr, r0, #0x4 + cmp r2, #0x1 + sub r9, r1, #0x2 + ldrgt r8, [lr], #0x4 + mov r10, r7 + mov r0, r12 + str r12, [sp, #0x8] + mov r1, #0xff + mov r11, r12 +_02092AEC: + ldr r3, [sp, #0x0] + and r3, r10, r3 + ldr r10, [sp, #0x4] + ldrb r10, [r10, r3] + cmp r10, #0x0 + beq _02092B4C + add r12, r12, r10 + add r6, r6, r10 + cmp r6, #0x20 + blo _02092B34 + cmp r2, #0x1 + ble _02092B4C + sub r2, r2, #0x1 + mov r7, r8 + cmp r2, #0x1 + movle r8, r11 + ldrgt r8, [lr], #0x4 + sub r6, r6, #0x20 +_02092B34: + cmp r6, #0x0 + moveq r10, r7 + movne r10, r7, lsr r6 + rsbne r3, r6, #0x20 + orrne r10, r10, r8, lsl r3 + b _02092AEC +_02092B4C: + cmp r3, #0x0 + beq _02092BD0 + strb r12, [r9, #0x0] + strb r3, [r9, #-0x1] + cmp r12, #0x100 + sub r9, r9, #0x2 + blo _02092B88 + cmp r12, #0x100 + blo _02092B88 +_02092B70: + strb r1, [r9, #0x0] + sub r12, r12, #0x100 + strb r0, [r9, #-0x1] + sub r9, r9, #0x2 + cmp r12, #0x100 + bhs _02092B70 +_02092B88: + mov r12, r4 + add r6, r6, r4 + cmp r6, #0x20 + blo _02092BB8 + cmp r2, #0x1 + ble _02092BD0 + sub r2, r2, #0x1 + mov r7, r8 + cmp r2, #0x1 + ldrle r8, [sp, #0x8] + sub r6, r6, #0x20 + ldrgt r8, [lr], #0x4 +_02092BB8: + cmp r6, #0x0 + moveq r10, r7 + movne r10, r7, lsr r6 + rsbne r3, r6, #0x20 + orrne r10, r10, r8, lsl r3 + b _02092AEC +_02092BD0: + add r9, r9, #0x1 + mov r0, #0x2 + b _02092BF4 +_02092BDC: + strb r2, [r5, #0x0] + ldrb r1, [r9, #0x1] + add r9, r9, #0x2 + add r0, r0, #0x2 + strb r1, [r5, #0x1] + add r5, r5, #0x2 +_02092BF4: + ldrb r2, [r9, #0x0] + cmp r2, #0x0 + bne _02092BDC + ldrb r1, [r9, #0x1] + cmp r1, #0x0 + bne _02092BDC + mov r1, #0x0 + strb r1, [r5, #0x0] + strb r1, [r5, #0x1] + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_02092C24: .word 0x02106170 + + arm_func_start FUN_02092C28 +FUN_02092C28: + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r5, [r3], #0x4 + mov r2, #0x14 + mla r4, r5, r2, r3 + mov r9, r0 + ldr r0, [r9, #0x4] + mov r8, r1 + cmp r0, #0x0 + mov r5, #0x0 + mov r1, r0, lsl #0x5 + addeq sp, sp, #0x4 + moveq r0, r5 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r0, #0x1 + bne _02092CC8 + cmp r0, #0x1 + bne _02092C8C + ldr r2, [r9, #0x0] + ldr r1, _02092D8C ; =0x00010001 + ldr r2, [r2, #0x0] + cmp r2, r1 + ldreq r5, _02092D90 ; =0x020FF500 + beq _02092CB8 +_02092C8C: + ldr r1, [r9, #0x0] + ldr r1, [r1, #0x0] + cmp r1, #0x11 + bne _02092CA8 + cmp r0, #0x1 + ldreq r5, _02092D94 ; =0x020FF518 + beq _02092CB8 +_02092CA8: + cmp r1, #0x3 + bne _02092CB8 + cmp r0, #0x1 + ldreq r5, _02092D98 ; =0x020FF50C +_02092CB8: + mov r7, #0x1 + mov r6, r7 + mov r1, #0x20 + b _02092CF8 +_02092CC8: + cmp r1, #0x100 + movge r7, #0x5 + movge r6, #0x10 + movge r1, #0x7 + bge _02092CF8 + cmp r1, #0x80 + movge r6, #0x8 + movge r1, r6 + movge r7, #0x4 + movlt r7, #0x3 + movlt r6, #0x4 + movlt r1, #0xb +_02092CF8: + mul r1, r0, r1 + mov r0, r1, lsl #0x1 + add r1, r0, #0x7 + mov r0, r1, asr #0x1 + add r0, r1, r0, lsr #0x1e + cmp r5, #0x0 + mov r1, r0, asr #0x2 + bne _02092D74 + ldr r0, [r4, #0x8] + cmp r1, r0 + movle r0, r4 + ble _02092D30 + mov r0, r4 + bl FUN_02094EBC +_02092D30: + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + ldr r5, [r4, #0x0] + mov r1, r9 + mov r2, r7 + add r0, r5, #0x4 + bl FUN_02092A50 + add r1, r0, #0x2 + mov r0, r1, asr #0x8 + strb r0, [r5, #0x0] + strb r1, [r5, #0x1] + strb r7, [r5, #0x2] + strb r6, [r5, #0x3] + b _02092D78 +_02092D74: + mov r1, #0x8 +_02092D78: + str r5, [r8, #0x0] + add r0, r1, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_02092D8C: .word 0x00010001 +_02092D90: .word 0x020FF500 +_02092D94: .word 0x020FF518 +_02092D98: .word 0x020FF50C + + arm_func_start FUN_02092D9C +FUN_02092D9C: ; 0x02092D9C + stmdb sp!, {r4-r10,lr} + mov r10, r0 + mov r1, r10 + rsb r0, r10, #0x0 + bl _u32_div_f + movs r8, r1 + mov r7, r10 + mov r5, #0x0 + mov r6, #0x1 + mvn r4, #0x0 + beq _02092E04 +_02092DC8: + mov r0, r7 + mov r1, r8 + bl _u32_div_f + mov r9, r1 + mov r0, r7 + mov r1, r8 + bl _u32_div_f + mla r1, r0, r6, r5 + mov r5, r6 + mov r7, r8 + mov r6, r1 + mov r8, r9 + cmp r9, #0x0 + rsb r4, r4, #0x0 + bne _02092DC8 +_02092E04: + cmp r4, #0x0 + sublt r5, r10, r5 + cmp r7, #0x1 + movne r1, #0x0 + bne _02092E24 + mov r0, r5 + mov r1, r10 + bl _u32_div_f +_02092E24: + mov r0, r1 + ldmia sp!, {r4-r10,lr} + bx lr + + arm_func_start FUN_02092E30 +FUN_02092E30: ; 0x02092E30 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r7, r3 + mov r9, r1 + mov r6, #0x0 + mov r10, r0 + mov r8, r2 + mov r4, r6 + cmp r7, #0x0 + add r5, r9, r7, lsl #0x2 + ldr r11, [sp, #0x30] + ble _02092EC0 + mov r0, #0x1 + str r6, [sp, #0x4] + str r0, [sp, #0x0] +_02092E6C: + ldr r1, [r9, #0x0] + mov r0, r9 + mul r3, r1, r11 + mov r1, r8 + mov r2, r7 + bl FUN_020948AC + add r1, r0, r6 + ldr r0, [r5, #0x0] + cmp r1, r6 + ldrcc r6, [sp, #0x0] + add r0, r0, r1 + str r0, [r5, #0x0] + ldr r0, [r5, #0x0] + ldrcs r6, [sp, #0x4] + cmp r0, r1 + add r4, r4, #0x1 + addcc r6, r6, #0x1 + cmp r4, r7 + add r9, r9, #0x4 + add r5, r5, #0x4 + blt _02092E6C +_02092EC0: + cmp r6, #0x0 + sub r2, r7, #0x1 + bne _02092F14 + ldr r1, [r9, r2, lsl #0x2] + ldr r0, [r8, r2, lsl #0x2] + cmp r1, r0 + bne _02092F00 + cmp r2, #0x0 + ble _02092F00 +_02092EE4: + ldr r1, [r9, r2, lsl #0x2] + ldr r0, [r8, r2, lsl #0x2] + cmp r1, r0 + bne _02092F00 + sub r2, r2, #0x1 + cmp r2, #0x0 + bgt _02092EE4 +_02092F00: + ldr r1, [r9, r2, lsl #0x2] + ldr r0, [r8, r2, lsl #0x2] + cmp r1, r0 + movcs r6, #0x1 + movcc r6, #0x0 +_02092F14: + cmp r6, #0x0 + beq _02092F3C + mov r0, r10 + mov r1, r9 + mov r2, r8 + mov r3, r7 + bl FUN_02094354 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr +_02092F3C: + cmp r7, #0x0 + addle sp, sp, #0xc + mov r1, #0x0 + ldmleia sp!, {r4-r11,lr} + bxle lr +_02092F50: + ldr r0, [r9, r1, lsl #0x2] + str r0, [r10, r1, lsl #0x2] + add r1, r1, #0x1 + cmp r1, r7 + blt _02092F50 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FUN_02092F70 +FUN_02092F70: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r11, r2 + mov r6, r11, lsl #0x1 + mov r10, r0 + mov r7, r11 + mov r9, r1 + sub r7, r7, #0x1 + sub r2, r6, #0x1 + mov r0, #0x0 + str r0, [r10, r2, lsl #0x2] + ldr r0, [r10, r2, lsl #0x2] + str r3, [sp, #0x0] + mov r5, r9 + str r0, [r10, #0x0] + cmp r7, #0x0 + add r4, r10, #0x4 + ble _02092FD8 + add r5, r5, #0x4 + ldr r3, [r9, #0x0] + mov r0, r4 + mov r1, r5 + mov r2, r7 + bl FUN_0209470C + str r0, [r4, r7, lsl #0x2] + add r4, r4, #0x8 +_02092FD8: + sub r8, r11, #0x2 + cmp r8, #0x0 + ble _02093018 +_02092FE4: + mov r0, r5 + sub r7, r7, #0x1 + add r5, r5, #0x4 + ldr r3, [r0, #0x0] + mov r0, r4 + mov r1, r5 + mov r2, r7 + bl FUN_020948AC + sub r8, r8, #0x1 + str r0, [r4, r7, lsl #0x2] + cmp r8, #0x0 + add r4, r4, #0x8 + bgt _02092FE4 +_02093018: + mov r0, r10 + mov r1, r10 + mov r2, r10 + mov r3, r6 + bl FUN_02094468 +_0209302C: ; 0x0209302C + ldr r0, [sp, #0x0] + mov r1, r9 + mov r2, r11 + bl FUN_020945B8 + ldr r2, [sp, #0x0] + mov r0, r10 + mov r1, r10 + mov r3, r6 + bl FUN_02094468 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FUN_0209305C +FUN_0209305C: + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x64 + ldr r5, [r2, #0x0] + mov r9, r0 + mov r8, r1 + cmp r8, r9 + add r3, r2, #0x4 + mov r2, #0x14 + movne r7, r9 + addeq r0, r5, #0x1 + mla r4, r5, r2, r3 + mlaeq r7, r0, r2, r3 + ldr r5, [r8, #0x4] + cmp r5, #0x0 + movle r0, #0x0 + strle r0, [r9, #0x4] + addle sp, sp, #0x64 + movle r0, #0x1 + ldmleia sp!, {r4-r9,lr} + bxle lr + ldr r0, [r7, #0x8] + mov r6, r5, lsl #0x1 + cmp r6, r0 + movle r0, r7 + ble _020930CC + mov r0, r7 + mov r1, r6 + bl FUN_02094EBC +_020930CC: + cmp r0, #0x0 + addeq sp, sp, #0x64 + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + str r6, [r7, #0x4] + mov r0, #0x0 + str r0, [r7, #0xc] + cmp r5, #0x4 + bne _0209310C + ldr r0, [r7, #0x0] + ldr r1, [r8, #0x0] + add r3, sp, #0x0 + mov r2, #0x4 + bl FUN_02092F70 + b _02093170 +_0209310C: + cmp r5, #0x8 + bne _0209312C + ldr r0, [r7, #0x0] + ldr r1, [r8, #0x0] + add r3, sp, #0x20 + mov r2, #0x8 + bl FUN_02092F70 + b _02093170 +_0209312C: + ldr r0, [r4, #0x8] + cmp r6, r0 + movle r0, r4 + ble _02093148 + mov r0, r4 + mov r1, r6 + bl FUN_02094EBC +_02093148: + cmp r0, #0x0 + addeq sp, sp, #0x64 + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + ldr r0, [r7, #0x0] + ldr r1, [r8, #0x0] + ldr r3, [r4, #0x0] + mov r2, r5 + bl FUN_02092F70 +_02093170: + cmp r6, #0x0 + ble _02093194 + ldr r1, [r7, #0x0] + sub r0, r6, #0x1 + ldr r0, [r1, r0, lsl #0x2] + cmp r0, #0x0 + ldreq r0, [r7, #0x4] + subeq r0, r0, #0x1 + streq r0, [r7, #0x4] +_02093194: + cmp r7, r9 + beq _020931A8 + mov r0, r9 + mov r1, r7 + bl FUN_02094E24 +_020931A8: + mov r0, #0x1 + add sp, sp, #0x64 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start FUN_020931B8 +FUN_020931B8: + stmdb sp!, {lr} + sub sp, sp, #0xc + ldr r12, [r3, #0x4] + cmp r12, #0x0 + ble _020931FC + ldr r12, [r3, #0x0] + ldr r12, [r12, #0x0] + ands r12, r12, #0x1 + beq _020931FC + ldr lr, [sp, #0x10] + mov r12, #0x0 + str lr, [sp, #0x0] + str r12, [sp, #0x4] + bl FUN_020916C8 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr +_020931FC: + ldr r12, [sp, #0x10] + str r12, [sp, #0x0] + bl FUN_02091ECC + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_02093214 +FUN_02093214: + 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, #0x0 + bl FUN_02093248 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_02093248 +FUN_02093248: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4c + mov r6, r3 + ldr r3, [r6, #0x4] + mov r8, r0 + str r1, [sp, #0x0] + str r2, [sp, #0x4] + cmp r3, #0x0 + ldr r4, [sp, #0x70] + beq _02093288 + cmp r3, #0x1 + bne _02093298 + ldr r0, [r6, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _02093298 +_02093288: + add sp, sp, #0x4c + mov r0, #0x0 + ldmia sp!, {r4-r11,lr} + bx lr +_02093298: + ldr r0, [sp, #0x4] + mov r1, r6 + bl FUN_02094B98 +_020932A4: ; 0x020932A4 + cmp r0, #0x0 + bge _020932F8 + ldr r0, [sp, #0x0] + cmp r0, #0x0 + beq _020932D4 + ldr r1, [sp, #0x4] + bl FUN_02094E24 +_020932C0: ; 0x020932C0 + cmp r0, #0x0 + addeq sp, sp, #0x4c + moveq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + bxeq lr +_020932D4: + cmp r8, #0x0 + beq _020932E8 + mov r0, r8 + mov r1, #0x0 + bl FUN_02094D7C +_020932E8: + add sp, sp, #0x4c + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_020932F8: + ldr r3, [r4, #0x0] + add r0, r4, #0x4 + mov r2, #0x14 + mla r1, r3, r2, r0 + mov r3, #0x0 + str r3, [r1, #0xc] + ldr r5, [r4, #0x0] + str r1, [sp, #0x14] + add r4, r5, #0x1 + mla r1, r4, r2, r0 + add r3, r5, #0x2 + str r1, [sp, #0x18] + mla r1, r3, r2, r0 + cmp r8, #0x0 + str r1, [sp, #0x1c] + addeq r1, r5, #0x3 + mlaeq r8, r1, r2, r0 + mov r0, r6 + bl FUN_02095188 + mov r1, r0, lsr #0x1f + rsb r0, r1, r0, lsl #0x1b + add r0, r1, r0, ror #0x1b + rsb r0, r0, #0x20 + str r0, [sp, #0x8] + ldr r0, [sp, #0x1c] + ldr r2, [sp, #0x8] + mov r1, r6 + bl FUN_02094250 +_02093368: ; 0x02093368 + cmp r0, #0x0 + addeq sp, sp, #0x4c + moveq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldr r2, [sp, #0x8] + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x4] + ldr r3, [sp, #0x1c] + mov r4, #0x0 + add r2, r2, #0x20 + str r4, [r3, #0xc] + bl FUN_02094250 +_0209339C: ; 0x0209339C + cmp r0, #0x0 + addeq sp, sp, #0x4c + moveq r0, r4 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldr r0, [sp, #0x18] + mov r1, r4 + str r1, [r0, #0xc] + ldr r0, [sp, #0x1c] + ldr r0, [r0, #0x4] + str r0, [sp, #0x28] + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x28] + ldr r4, [r0, #0x4] + add r0, sp, #0x38 + sub r1, r4, r1 + str r1, [sp, #0x10] + bl FUN_0209502C + ldr r0, [sp, #0x18] + ldr r2, [r0, #0x0] + ldr r0, [sp, #0x28] + sub r1, r0, #0x1 + ldr r0, [sp, #0x10] + add r0, r2, r0, lsl #0x2 + str r0, [sp, #0x38] + ldr r0, [sp, #0x28] + str r0, [sp, #0x3c] + ldr r0, [sp, #0x18] + ldr r2, [r0, #0x8] + ldr r0, [sp, #0x28] + cmp r0, #0x1 + add r0, r2, #0x1 + str r0, [sp, #0x40] + ldr r0, [sp, #0x1c] + moveq r5, #0x0 + ldr r2, [r0, #0x0] + ldr r0, [r2, r1, lsl #0x2] + str r0, [sp, #0x24] + ldrne r0, [sp, #0x28] + subne r0, r0, #0x2 + ldrne r5, [r2, r0, lsl #0x2] + ldr r0, [sp, #0x18] + ldr r2, [r8, #0x8] + ldr r1, [r0, #0x0] + sub r0, r4, #0x1 + add r7, r1, r0, lsl #0x2 + ldr r0, [sp, #0x10] + add r1, r0, #0x1 + cmp r1, r2 + movle r0, r8 + ble _02093470 + mov r0, r8 + bl FUN_02094EBC +_02093470: + cmp r0, #0x0 + beq _020937D4 + ldr r0, [sp, #0x4] + ldr r1, [r6, #0xc] + ldr r3, [r0, #0xc] + ldr r0, [sp, #0x10] + sub r2, r0, #0x1 + eor r0, r3, r1 + str r0, [r8, #0xc] + ldr r0, [sp, #0x10] + str r0, [r8, #0x4] + ldr r0, [sp, #0x28] + ldr r3, [r8, #0x0] + add r1, r0, #0x1 + add r0, r3, r2, lsl #0x2 + str r0, [sp, #0x20] + ldr r0, [sp, #0x14] + ldr r0, [r0, #0x8] + cmp r1, r0 + ldrle r0, [sp, #0x14] + ble _020934CC + ldr r0, [sp, #0x14] + bl FUN_02094EBC +_020934CC: + cmp r0, #0x0 + beq _020937D4 + ldr r1, [sp, #0x1c] + add r0, sp, #0x38 + bl FUN_02094B98 +_020934E0: ; 0x020934E0 + cmp r0, #0x0 + blt _02093520 + add r0, sp, #0x38 + ldr r2, [sp, #0x1c] + mov r1, r0 + bl FUN_02093B50 +_020934F8: ; 0x020934F8 + cmp r0, #0x0 + beq _020937D4 + ldr r0, [sp, #0x20] + mov r2, #0x1 + str r2, [r0, #0x0] + ldr r0, [r8, #0x4] + ldr r1, [r8, #0x0] + sub r0, r0, #0x1 + str r2, [r1, r0, lsl #0x2] + b _0209352C +_02093520: + ldr r0, [r8, #0x4] + sub r0, r0, #0x1 + str r0, [r8, #0x4] +_0209352C: + ldr r0, [sp, #0x10] + sub r1, r0, #0x1 + ldr r0, [sp, #0x20] + cmp r1, #0x0 + sub r0, r0, #0x4 + str r0, [sp, #0x20] + mov r0, #0x0 + str r0, [sp, #0xc] + ble _0209377C + ldr r8, _020937E4 ; =0x0000FFFF + cmp r1, #0x0 + and r0, r5, r8 + str r0, [sp, #0x2c] + and r0, r8, r5, lsr #0x10 + str r0, [sp, #0x30] + ldr r0, [sp, #0x24] + and r4, r0, r8 + ble _0209377C + and r9, r8, r0, lsr #0x10 + mvn r0, #0x0 + str r0, [sp, #0x34] +_02093580: + ldr r1, [sp, #0x38] + ldr r0, [sp, #0x3c] + sub r1, r1, #0x4 + add r0, r0, #0x1 + str r0, [sp, #0x3c] + str r1, [sp, #0x38] + ldr r11, [r7, #0x0] + ldr r0, [sp, #0x24] + ldr r5, [r7, #-0x4] + cmp r11, r0 + ldreq r6, [sp, #0x34] + beq _020935C4 + ldr r2, [sp, #0x24] + mov r0, r11 + mov r1, r5 + bl FUN_02092260 + mov r6, r0 +_020935C4: + ldr r0, [sp, #0x2c] + and r2, r6, r8 + mul r12, r0, r2 + ldr r0, [sp, #0x30] + and lr, r8, r6, lsr #0x10 + ldr r1, [sp, #0x30] + mul r0, r2, r0 + mul r3, r1, lr + ldr r1, [sp, #0x2c] + mul r10, r9, lr + mla r1, lr, r1, r0 + cmp r1, r0 + addcc r3, r3, #0x10000 + and r0, r8, r1, lsr #0x10 + add r3, r3, r0 + and r0, r1, r8 + add r12, r12, r0, lsl #0x10 + cmp r12, r0, lsl #0x10 + mul r0, r2, r9 + mul r1, r4, r2 + mla r2, lr, r4, r0 + addcc r3, r3, #0x1 + cmp r2, r0 + addcc r10, r10, #0x10000 + and r0, r8, r2, lsr #0x10 + add r10, r10, r0 + and r0, r2, r8 + add r1, r1, r0, lsl #0x10 + cmp r1, r0, lsl #0x10 + addcc r10, r10, #0x1 + sub r1, r5, r1 + cmp r1, r5 + addhi r10, r10, #0x1 + subs r0, r11, r10 + bne _02093674 + cmp r3, r1 + blo _02093674 + cmp r3, r1 + bne _0209366C + ldr r0, [r7, #-0x8] + cmp r12, r0 + bls _02093674 +_0209366C: + sub r6, r6, #0x1 + b _020935C4 +_02093674: + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x1c] + ldr r0, [r0, #0x0] + ldr r1, [r1, #0x0] + ldr r2, [sp, #0x28] + mov r3, r6 + bl FUN_0209470C + ldr r1, [sp, #0x14] + ldr r2, [sp, #0x28] + ldr r3, [r1, #0x0] + ldr r1, [sp, #0x28] + str r0, [r3, r2, lsl #0x2] + add r1, r1, #0x1 + cmp r1, #0x0 + ble _020936D4 + ldr r0, [sp, #0x14] + ldr r2, [r0, #0x0] +_020936B8: + sub r0, r1, #0x1 + ldr r0, [r2, r0, lsl #0x2] + cmp r0, #0x0 + bne _020936D4 + sub r1, r1, #0x1 + cmp r1, #0x0 + bgt _020936B8 +_020936D4: + ldr r0, [sp, #0x14] + ldr r2, [sp, #0x14] + str r1, [r0, #0x4] + add r0, sp, #0x38 + mov r1, r0 + ldr r5, [sp, #0x3c] + bl FUN_02093A0C + ldr r0, [sp, #0x18] + ldr r1, [r0, #0x4] + ldr r0, [sp, #0x3c] + add r0, r1, r0 + sub r1, r0, r5 + ldr r0, [sp, #0x18] + str r1, [r0, #0x4] + ldr r0, [sp, #0x44] + cmp r0, #0x0 + beq _0209374C + add r0, sp, #0x38 + ldr r2, [sp, #0x1c] + mov r1, r0 + sub r6, r6, #0x1 + ldr r5, [sp, #0x3c] + bl FUN_02093DD0 + ldr r0, [sp, #0x18] + ldr r1, [r0, #0x4] + ldr r0, [sp, #0x3c] + sub r0, r0, r5 + add r1, r1, r0 + ldr r0, [sp, #0x18] + str r1, [r0, #0x4] +_0209374C: + ldr r0, [sp, #0x20] + sub r7, r7, #0x4 + str r6, [r0], #-0x4 + str r0, [sp, #0x20] + ldr r0, [sp, #0xc] + add r0, r0, #0x1 + str r0, [sp, #0xc] + ldr r0, [sp, #0x10] + sub r1, r0, #0x1 + ldr r0, [sp, #0xc] + cmp r0, r1 + blt _02093580 +_0209377C: + ldr r0, [sp, #0x18] + bl FUN_02095040 +_02093784: ; 0x02093784 + ldr r0, [sp, #0x0] + cmp r0, #0x0 + beq _020937C4 + ldr r2, [sp, #0x8] + ldr r3, [sp, #0x4] + ldr r1, [sp, #0x18] + add r2, r2, #0x20 + ldr r4, [r3, #0xc] + bl FUN_02094134 +_020937A8: ; 0x020937A8 + cmp r0, #0x0 + addeq sp, sp, #0x4c + moveq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldr r0, [sp, #0x0] + str r4, [r0, #0xc] +_020937C4: + add sp, sp, #0x4c + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_020937D4: + mov r0, #0x0 + add sp, sp, #0x4c + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020937E4: .word 0x0000FFFF + + arm_func_start FUN_020937E8 +FUN_020937E8: ; 0x020937E8 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r5, [sp, #0x20] + mov r7, r2 + mov r9, r0 + mov r8, r1 + mov r6, r3 + cmp r7, r5 + bge _02093824 + mov r1, r7 + mov r0, r8 + mov r7, r5 + mov r8, r6 + mov r5, r1 + mov r6, r0 +_02093824: + ldr r3, [r6, #0x0] + mov r0, r9 + mov r1, r8 + mov r2, r7 + add r4, r9, r7, lsl #0x2 + bl FUN_0209470C + str r0, [r9, r7, lsl #0x2] +_02093840: + sub r0, r5, #0x1 + cmp r0, #0x0 + addle sp, sp, #0x4 + ldmleia sp!, {r4-r9,lr} + bxle lr + ldr r3, [r6, #0x4] + mov r1, r8 + mov r2, r7 + add r0, r9, #0x4 + bl FUN_020948AC + sub r1, r5, #0x2 + cmp r1, #0x0 + addle sp, sp, #0x4 + str r0, [r4, #0x4] + ldmleia sp!, {r4-r9,lr} + bxle lr + ldr r3, [r6, #0x8] + mov r1, r8 + mov r2, r7 + add r0, r9, #0x8 + bl FUN_020948AC + sub r1, r5, #0x3 + cmp r1, #0x0 + addle sp, sp, #0x4 + str r0, [r4, #0x8] + ldmleia sp!, {r4-r9,lr} + bxle lr + ldr r3, [r6, #0xc] + mov r1, r8 + mov r2, r7 + add r0, r9, #0xc + bl FUN_020948AC + sub r5, r5, #0x4 + cmp r5, #0x0 + addle sp, sp, #0x4 + str r0, [r4, #0xc] + ldmleia sp!, {r4-r9,lr} + bxle lr + ldr r3, [r6, #0x10] + mov r1, r8 + mov r2, r7 + add r0, r9, #0x10 + bl FUN_020948AC + str r0, [r4, #0x10] + add r4, r4, #0x10 + add r9, r9, #0x10 + add r6, r6, #0x10 + b _02093840 +_02093900: ; 0x02093900 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start FUN_0209390C +FUN_0209390C: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r9, r1 + ldr r6, [r9, #0x4] + mov r8, r2 + mov r10, r0 + cmp r6, #0x0 + ldr r5, [r8, #0x4] + beq _02093938 + cmp r5, #0x0 + bne _02093954 +_02093938: + mov r0, r10 + mov r1, #0x0 + bl FUN_02094D7C + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_02093954: + ldr r1, [r9, #0xc] + ldr r0, [r8, #0xc] + cmp r10, r9 + add r7, r6, r5 + eor r11, r1, r0 + beq _02093974 + cmp r10, r8 + bne _0209398C +_02093974: + ldr r0, [r3, #0x0] + add r2, r3, #0x4 + add r1, r0, #0x1 + mov r0, #0x14 + mla r4, r1, r0, r2 + b _02093990 +_0209398C: + mov r4, r10 +_02093990: + ldr r0, [r4, #0x8] + cmp r7, r0 + movle r0, r4 + ble _020939AC + mov r0, r4 + mov r1, r7 + bl FUN_02094EBC +_020939AC: + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + str r7, [r4, #0x4] + str r5, [sp, #0x0] + ldr r0, [r4, #0x0] + ldr r1, [r9, #0x0] + ldr r3, [r8, #0x0] + mov r2, r6 + bl FUN_020937E8 + mov r0, r4 + str r11, [r10, #0xc] + bl FUN_02095040 + cmp r10, r4 + beq _020939FC + mov r0, r10 + mov r1, r4 + bl FUN_02094E24 +_020939FC: + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FUN_02093A0C +FUN_02093A0C: ; 0x02093A0C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r1 + ldr r1, [r6, #0xc] + mov r3, #0x0 + mov r7, r0 + mov r5, r2 + mov r4, r3 + cmp r1, #0x0 + beq _02093A54 + ldr r0, [r5, #0xc] + cmp r0, #0x0 + movne r0, r6 + moveq r3, #0x1 + movne r6, r5 + movne r5, r0 + moveq r4, r3 + b _02093A60 +_02093A54: + ldr r0, [r5, #0xc] + cmp r0, #0x0 + movne r3, #0x1 +_02093A60: + cmp r3, #0x0 + beq _02093A94 + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl FUN_02093CB4 +_02093A78: ; 0x02093A78 + cmp r0, #0x0 + moveq r0, #0x0 + add sp, sp, #0x4 + strne r4, [r7, #0xc] + movne r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_02093A94: + ldr r0, [r5, #0x4] + ldr r1, [r6, #0x4] + cmp r1, r0 + movle r1, r0 + ldr r0, [r7, #0x8] + cmp r1, r0 + movle r0, r7 + ble _02093ABC + mov r0, r7 + bl FUN_02094EBC +_02093ABC: + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r6 + mov r1, r5 + bl FUN_02094B98 +_02093ADC: ; 0x02093ADC + cmp r0, #0x0 + bge _02093B14 + mov r0, r7 + mov r1, r5 + mov r2, r6 + bl FUN_02093B50 +_02093AF4: ; 0x02093AF4 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, #0x1 + str r0, [r7, #0xc] + b _02093B40 +_02093B14: + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl FUN_02093B50 +_02093B24: ; 0x02093B24 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, #0x0 + str r0, [r7, #0xc] +_02093B40: + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_02093B50 +FUN_02093B50: + stmdb sp!, {r4-r10,lr} + mov r8, r1 + mov r7, r2 + ldr r5, [r7, #0x4] + ldr r6, [r8, #0x4] + mov r4, r0 + cmp r6, r5 + movlt r0, #0x0 + ldmltia sp!, {r4-r10,lr} + bxlt lr + ldr r1, [r4, #0x8] + cmp r6, r1 + ble _02093B8C + mov r1, r6 + bl FUN_02094EBC +_02093B8C: + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r10,lr} + bxeq lr + mov r3, #0x0 + mov r0, r3 + cmp r5, #0x0 + ldr r2, [r8, #0x0] + ldr r9, [r7, #0x0] + ldr r1, [r4, #0x0] + ble _02093C0C + mov r12, r3 + mov r7, r3 + mov lr, #0x1 +_02093BC4: + cmp r3, #0x0 + ldr r10, [r2], #0x4 + ldr r8, [r9], #0x4 + beq _02093BEC + cmp r10, r8 + movls r3, lr + sub r8, r10, r8 + movhi r3, r12 + sub r10, r8, #0x1 + b _02093BFC +_02093BEC: + cmp r10, r8 + movcc r3, lr + movcs r3, r7 + sub r10, r10, r8 +_02093BFC: + add r0, r0, #0x1 + cmp r0, r5 + str r10, [r1], #0x4 + blt _02093BC4 +_02093C0C: + cmp r3, #0x0 + beq _02093C3C + cmp r0, r6 + bge _02093C3C +_02093C1C: + ldr r5, [r2], #0x4 + add r0, r0, #0x1 + sub r3, r5, #0x1 + cmp r5, r3 + str r3, [r1], #0x4 + bhi _02093C3C + cmp r0, r6 + blt _02093C1C +_02093C3C: + cmp r1, r2 + beq _02093C9C +_02093C44: + cmp r0, r6 + bge _02093C9C + ldr r5, [r2, #0x0] + add r3, r0, #0x1 + str r5, [r1, #0x0] + cmp r3, r6 + bge _02093C9C + ldr r5, [r2, #0x4] + add r3, r0, #0x2 + str r5, [r1, #0x4] + cmp r3, r6 + bge _02093C9C + ldr r5, [r2, #0x8] + add r3, r0, #0x3 + str r5, [r1, #0x8] + cmp r3, r6 + ldrlt r3, [r2, #0xc] + add r0, r0, #0x4 + strlt r3, [r1, #0xc] + addlt r2, r2, #0x10 + addlt r1, r1, #0x10 + blt _02093C44 +_02093C9C: + mov r0, r4 + str r6, [r4, #0x4] + bl FUN_02095040 + mov r0, #0x1 + ldmia sp!, {r4-r10,lr} + bx lr + + arm_func_start FUN_02093CB4 +FUN_02093CB4: + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r8, r2 + ldr r2, [r4, #0x4] + ldr r1, [r8, #0x4] + mov r9, r0 + cmp r2, r1 + movlt r0, r4 + movlt r4, r8 + movlt r8, r0 + ldr r6, [r4, #0x4] + ldr r0, [r9, #0x8] + add r1, r6, #0x1 + cmp r1, r0 + ldr r7, [r8, #0x4] + movle r0, r9 + ble _02093D04 + mov r0, r9 + bl FUN_02094EBC +_02093D04: + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + str r6, [r9, #0x4] + ldr r5, [r4, #0x0] + ldr r4, [r9, #0x0] + ldr r2, [r8, #0x0] + mov r0, r4 + mov r1, r5 + mov r3, r7 + bl FUN_02094468 +_02093D38: ; 0x02093D38 + cmp r0, #0x0 + add r4, r4, r7, lsl #0x2 + add r5, r5, r7, lsl #0x2 + beq _02093D9C + cmp r7, r6 + bge _02093D7C +_02093D50: + ldr r2, [r5], #0x4 + mov r3, r4 + add r1, r2, #0x1 + str r1, [r4], #0x4 + ldr r1, [r3, #0x0] + add r7, r7, #0x1 + cmp r1, r2 + movcs r0, #0x0 + bhs _02093D7C + cmp r7, r6 + blt _02093D50 +_02093D7C: + cmp r7, r6 + blt _02093D9C + cmp r0, #0x0 + movne r0, #0x1 + strne r0, [r4], #0x4 + ldrne r0, [r9, #0x4] + addne r0, r0, #0x1 + strne r0, [r9, #0x4] +_02093D9C: + cmp r4, r5 + beq _02093DC0 + cmp r7, r6 + bge _02093DC0 +_02093DAC: + ldr r0, [r5], #0x4 + add r7, r7, #0x1 + cmp r7, r6 + str r0, [r4], #0x4 + blt _02093DAC +_02093DC0: + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start FUN_02093DD0 +FUN_02093DD0: ; 0x02093DD0 + stmdb sp!, {r4-r6,lr} + mov r5, r1 + mov r4, r2 + ldr r2, [r5, #0xc] + ldr r1, [r4, #0xc] + mov r6, r0 + eors r0, r2, r1 + beq _02093E74 + cmp r2, #0x0 + movne r0, r5 + movne r5, r4 + movne r4, r0 + mov r0, r5 + mov r1, r4 + bl FUN_02094B98 +_02093E0C: ; 0x02093E0C + cmp r0, #0x0 + bge _02093E40 + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl FUN_02093B50 +_02093E24: ; 0x02093E24 + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r0, #0x1 + str r0, [r6, #0xc] + b _02093E68 +_02093E40: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_02093B50 +_02093E50: ; 0x02093E50 + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r0, #0x0 + str r0, [r6, #0xc] +_02093E68: + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_02093E74: + cmp r2, #0x0 + movne r0, #0x1 + strne r0, [r6, #0xc] + moveq r0, #0x0 + streq r0, [r6, #0xc] + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_02093CB4 +_02093E98: ; 0x02093E98 + cmp r0, #0x0 + moveq r0, #0x0 + movne r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_02093EAC +FUN_02093EAC: ; 0x02093EAC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + movs r4, r1 + mov r5, r0 + addeq sp, sp, #0x4 + moveq r0, #0x1 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r2, [r5, #0xc] + cmp r2, #0x0 + beq _02093EF8 + mov r2, #0x0 + str r2, [r5, #0xc] + bl FUN_0209400C + mov r1, #0x1 + add sp, sp, #0x4 + str r1, [r5, #0xc] + ldmia sp!, {r4-r5,lr} + bx lr +_02093EF8: + ldr r1, [r5, #0x4] + cmp r1, #0x1 + bgt _02093F9C + cmp r1, #0x0 + bne _02093F54 + ldr r1, [r5, #0x8] + cmp r1, #0x1 + bge _02093F20 + mov r1, #0x1 + bl FUN_02094EBC +_02093F20: + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r1, [r5, #0x0] + mov r0, #0x1 + str r4, [r1, #0x0] + str r0, [r5, #0xc] + add sp, sp, #0x4 + str r0, [r5, #0x4] + ldmia sp!, {r4-r5,lr} + bx lr +_02093F54: + ldr r2, [r5, #0x0] + ldr r1, [r2, #0x0] + cmp r1, r4 + moveq r0, #0x0 + streq r0, [r5, #0x4] + beq _02093F8C + cmp r1, r4 + subhi r0, r1, r4 + strhi r0, [r2, #0x0] + movls r0, #0x1 + strls r0, [r5, #0xc] + ldrls r0, [r5, #0x0] + subls r1, r4, r1 + strls r1, [r0, #0x0] +_02093F8C: + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r5,lr} + bx lr +_02093F9C: + mov r0, #0x0 + mov r1, #0x1 +_02093FA4: + ldr r12, [r5, #0x0] + mov r3, r0, lsl #0x2 + ldr r2, [r12, r0, lsl #0x2] + cmp r2, r4 + ldrcs r1, [r12, r3] + subcs r1, r1, r4 + strcs r1, [r12, r3] + bhs _02093FDC + ldr r2, [r12, r3] + add r0, r0, #0x1 + sub r2, r2, r4 + mov r4, r1 + str r2, [r12, r3] + b _02093FA4 +_02093FDC: + ldr r1, [r5, #0x0] + ldr r1, [r1, r3] + cmp r1, #0x0 + bne _02093FFC + ldr r1, [r5, #0x4] + sub r1, r1, #0x1 + cmp r0, r1 + streq r1, [r5, #0x4] +_02093FFC: + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_0209400C +FUN_0209400C: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + movs r4, r1 + mov r5, r0 + addeq sp, sp, #0x4 + moveq r0, #0x1 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r2, [r5, #0xc] + cmp r2, #0x0 + beq _020940B4 + ldr r2, [r5, #0x4] + cmp r2, #0x1 + ble _02094064 + mov r2, #0x0 + str r2, [r5, #0xc] + bl FUN_02093EAC + mov r1, #0x1 + add sp, sp, #0x4 + str r1, [r5, #0xc] + ldmia sp!, {r4-r5,lr} + bx lr +_02094064: + ldr r2, [r5, #0x0] + ldr r1, [r2, #0x0] + cmp r1, r4 + subhi r0, r1, r4 + strhi r0, [r2, #0x0] + bhi _020940A4 + cmp r1, r4 + movcs r0, #0x0 + strcs r0, [r5, #0xc] + strcs r0, [r5, #0x4] + bhs _020940A4 + mov r0, #0x0 + str r0, [r5, #0xc] + ldr r0, [r5, #0x0] + sub r1, r4, r1 + str r1, [r0, #0x0] +_020940A4: + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r5,lr} + bx lr +_020940B4: + ldr r1, [r5, #0x4] + ldr r2, [r5, #0x8] + add r1, r1, #0x1 + cmp r1, r2 + ble _020940CC + bl FUN_02094EBC +_020940CC: + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r1, [r5, #0x0] + ldr r0, [r5, #0x4] + mov r3, #0x0 + str r3, [r1, r0, lsl #0x2] + mov r0, #0x1 +_020940F4: + ldr r2, [r5, #0x0] + ldr r1, [r2, r3, lsl #0x2] + add r1, r4, r1 + cmp r4, r1 + str r1, [r2, r3, lsl #0x2] + movhi r4, r0 + addhi r3, r3, #0x1 + bhi _020940F4 + ldr r0, [r5, #0x4] + cmp r3, r0 + addge r0, r0, #0x1 + strge r0, [r5, #0x4] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_02094134 +FUN_02094134: + stmdb sp!, {r4-r8,lr} + mov r7, r1 + mov r1, r2, asr #0x4 + mov r3, r2, lsr #0x1f + add r1, r2, r1, lsr #0x1b + rsb r2, r3, r2, lsl #0x1b + add r4, r3, r2, ror #0x1b + ldr r2, [r7, #0x4] + mov r6, r1, asr #0x5 + mov r8, r0 + cmp r6, r2 + rsb r5, r4, #0x20 + ble _0209417C + mov r1, #0x0 + bl FUN_02094D7C + mov r0, #0x1 + ldmia sp!, {r4-r8,lr} + bx lr +_0209417C: + cmp r8, r7 + beq _020941B4 + sub r1, r2, r6 + ldr r2, [r8, #0x8] + add r1, r1, #0x2 + cmp r1, r2 + ble _0209419C + bl FUN_02094EBC +_0209419C: + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r0, [r7, #0xc] + str r0, [r8, #0xc] +_020941B4: + ldr r0, [r7, #0x0] + ldr r1, [r7, #0x4] + add r2, r0, r6, lsl #0x2 + ldr r0, [r8, #0x0] + sub r7, r1, r6 + mov r6, r2 + str r7, [r8, #0x4] + cmp r4, #0x0 + bne _020941FC + add r2, r7, #0x1 + cmp r2, #0x0 + ble _0209423C +_020941E4: + ldr r1, [r6], #0x4 + sub r2, r2, #0x1 + cmp r2, #0x0 + str r1, [r0], #0x4 + bgt _020941E4 + b _0209423C +_020941FC: + cmp r7, #0x1 + add r6, r2, #0x4 + ldr r3, [r2, #0x0] + mov r2, #0x1 + ble _0209422C +_02094210: + mov r1, r3, lsr r4 + ldr r3, [r6], #0x4 + add r2, r2, #0x1 + orr r1, r1, r3, lsl r5 + cmp r2, r7 + str r1, [r0], #0x4 + blt _02094210 +_0209422C: + mov r1, r3, lsr r4 + str r1, [r0, #0x0] + mov r1, #0x0 + str r1, [r0, #0x4] +_0209423C: + mov r0, r8 + bl FUN_02095040 + mov r0, #0x1 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FUN_02094250 +FUN_02094250: + stmdb sp!, {r4-r10,lr} + mov r4, r1 + mov r7, r2 + mov r1, r7, asr #0x4 + mov r5, r0 + add r2, r7, r1, lsr #0x1b + ldr r1, [r4, #0x4] + ldr r3, [r5, #0x8] + add r1, r1, r2, asr #0x5 + add r1, r1, #0x1 + cmp r1, r3 + mov r6, r2, asr #0x5 + ble _02094288 + bl FUN_02094EBC +_02094288: + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r10,lr} + bxeq lr + ldr r0, [r4, #0xc] + mov r1, r7, lsr #0x1f + str r0, [r5, #0xc] + ldr r3, [r4, #0x4] + rsb r0, r1, r7, lsl #0x1b + adds r12, r1, r0, ror #0x1b + ldr r2, [r4, #0x0] + ldr r0, [r5, #0x0] + add r1, r3, r6 + mov r3, #0x0 + str r3, [r0, r1, lsl #0x2] + rsb r3, r12, #0x20 + bne _020942F0 + ldr r1, [r4, #0x4] + subs r7, r1, #0x1 + bmi _02094324 +_020942D8: + ldr r3, [r2, r7, lsl #0x2] + add r1, r6, r7 + str r3, [r0, r1, lsl #0x2] + subs r7, r7, #0x1 + bpl _020942D8 + b _02094324 +_020942F0: + ldr r1, [r4, #0x4] + subs r1, r1, #0x1 + bmi _02094324 +_020942FC: + add r9, r6, r1 + add r8, r9, #0x1 + ldr r10, [r2, r1, lsl #0x2] + ldr lr, [r0, r8, lsl #0x2] + mov r7, r10, lsl r12 + orr lr, lr, r10, lsr r3 + str lr, [r0, r8, lsl #0x2] + str r7, [r0, r9, lsl #0x2] + subs r1, r1, #0x1 + bpl _020942FC +_02094324: + mov r2, r6, lsl #0x2 + mov r1, #0x0 + bl MI_CpuFill8 + ldr r1, [r4, #0x4] + mov r0, r5 + add r1, r1, r6 + add r1, r1, #0x1 + str r1, [r5, #0x4] + bl FUN_02095040 + mov r0, #0x1 + ldmia sp!, {r4-r10,lr} + bx lr + + arm_func_start FUN_02094354 +FUN_02094354: ; 0x02094354 + stmdb sp!, {r4-r10,lr} + cmp r3, #0x0 + movle r0, #0x0 + ldmleia sp!, {r4-r10,lr} + bxle lr + mov r6, #0x0 + mov r4, r6 + mov lr, r6 + mov r12, r6 + mov r7, r6 + mov r5, #0x1 +_02094380: + ldr r10, [r1, #0x0] + ldr r9, [r2, #0x0] + sub r8, r10, r9 + sub r8, r8, r6 + str r8, [r0, #0x0] + cmp r10, r9 + beq _020943A8 + cmp r10, r9 + movcc r6, r5 + movcs r6, r4 +_020943A8: + sub r8, r3, #0x1 + cmp r8, #0x0 + ble _0209445C + ldr r10, [r1, #0x4] + ldr r9, [r2, #0x4] + sub r8, r10, r9 + sub r8, r8, r6 + str r8, [r0, #0x4] + cmp r10, r9 + beq _020943DC + cmp r10, r9 + movcc r6, r5 + movcs r6, lr +_020943DC: + sub r8, r3, #0x2 + cmp r8, #0x0 + ble _0209445C + ldr r10, [r1, #0x8] + ldr r9, [r2, #0x8] + sub r8, r10, r9 + sub r8, r8, r6 + str r8, [r0, #0x8] + cmp r10, r9 + beq _02094410 + cmp r10, r9 + movcc r6, r5 + movcs r6, r12 +_02094410: + sub r8, r3, #0x3 + cmp r8, #0x0 + ble _0209445C + ldr r10, [r1, #0xc] + ldr r9, [r2, #0xc] + sub r8, r10, r9 + sub r8, r8, r6 + str r8, [r0, #0xc] + cmp r10, r9 + beq _02094444 + cmp r10, r9 + movcc r6, r5 + movcs r6, r7 +_02094444: + sub r3, r3, #0x4 + cmp r3, #0x0 + addgt r1, r1, #0x10 + addgt r2, r2, #0x10 + addgt r0, r0, #0x10 + bgt _02094380 +_0209445C: + mov r0, r6 + ldmia sp!, {r4-r10,lr} + bx lr + + arm_func_start FUN_02094468 +FUN_02094468: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + cmp r3, #0x0 + addle sp, sp, #0xc + movle r0, #0x0 + ldmleia sp!, {r4-r11,lr} + bxle lr + mov r12, #0x0 + mov r7, r12 + mov r6, r12 + mov r5, r12 + mov r4, r12 + mov lr, r12 + mov r11, r12 + str r12, [sp, #0x0] + str r12, [sp, #0x4] + mov r8, #0x1 +_020944AC: + ldr r9, [r1, #0x0] + add r10, r9, r12 + ldr r9, [r2, #0x0] + cmp r10, r12 + movcc r12, r8 + add r9, r10, r9 + movcs r12, r7 + cmp r9, r10 + movcc r10, r8 + movcs r10, r6 + str r9, [r0, #0x0] + sub r9, r3, #0x1 + add r12, r12, r10 + cmp r9, #0x0 + ble _020945A8 + ldr r9, [r1, #0x4] + ldr r10, [r2, #0x4] + add r9, r9, r12 + cmp r9, r12 + movcc r12, r8 + add r10, r9, r10 + movcs r12, r5 + cmp r10, r9 + movcc r9, r8 + movcs r9, r4 + add r12, r12, r9 + sub r9, r3, #0x2 + str r10, [r0, #0x4] + cmp r9, #0x0 + ble _020945A8 + ldr r9, [r1, #0x8] + ldr r10, [r2, #0x8] + add r9, r9, r12 + cmp r9, r12 + movcc r12, r8 + add r10, r9, r10 + movcs r12, lr + cmp r10, r9 + movcc r9, r8 + movcs r9, r11 + add r12, r12, r9 + sub r9, r3, #0x3 + str r10, [r0, #0x8] + cmp r9, #0x0 + ble _020945A8 + ldr r9, [r1, #0xc] + ldr r10, [r2, #0xc] + add r9, r9, r12 + cmp r9, r12 + movcc r12, r8 + add r10, r9, r10 + ldrcs r12, [sp, #0x0] + cmp r10, r9 + movcc r9, r8 + ldrcs r9, [sp, #0x4] + sub r3, r3, #0x4 + cmp r3, #0x0 + str r10, [r0, #0xc] + add r12, r12, r9 + addgt r1, r1, #0x10 + addgt r2, r2, #0x10 + addgt r0, r0, #0x10 + bgt _020944AC +_020945A8: + mov r0, r12 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FUN_020945B8 +FUN_020945B8: ; 0x020945B8 + stmdb sp!, {r4-r8,lr} + cmp r2, #0x0 + ldmleia sp!, {r4-r8,lr} + bxle lr + mov r3, #0x8000 + ldr lr, _02094708 ; =0x0000FFFF + rsb r12, r3, #0x0 +_020945D4: + ldr r5, [r1, #0x0] + mov r3, #0x8000 + and r4, r5, lr + and r7, lr, r5, lsr #0x10 + mul r6, r4, r7 + mul r5, r4, r4 + and r4, r6, lr + add r8, r5, r4, lsl #0x11 + rsb r3, r3, #0x0 + mul r5, r7, r7 + and r3, r6, r3 + add r3, r5, r3, lsr #0xf + cmp r8, r4, lsl #0x11 + addcc r3, r3, #0x1 + str r8, [r0, #0x0] + str r3, [r0, #0x4] + subs r3, r2, #0x1 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r4, [r1, #0x4] + and r7, lr, r4, lsr #0x10 + and r3, r4, lr + mul r6, r3, r7 + mul r4, r3, r3 + and r3, r6, lr + add r8, r4, r3, lsl #0x11 + mul r5, r7, r7 + and r4, r6, r12 + cmp r8, r3, lsl #0x11 + add r3, r5, r4, lsr #0xf + addcc r3, r3, #0x1 + str r8, [r0, #0x8] + str r3, [r0, #0xc] + subs r3, r2, #0x2 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r5, [r1, #0x8] + mov r3, #0x8000 + and r4, r5, lr + and r7, lr, r5, lsr #0x10 + mul r6, r4, r7 + mul r5, r4, r4 + and r4, r6, lr + add r8, r5, r4, lsl #0x11 + rsb r3, r3, #0x0 + mul r5, r7, r7 + and r3, r6, r3 + add r3, r5, r3, lsr #0xf + cmp r8, r4, lsl #0x11 + addcc r3, r3, #0x1 + str r8, [r0, #0x10] + str r3, [r0, #0x14] + subs r3, r2, #0x3 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r5, [r1, #0xc] + mov r3, #0x8000 + and r4, r5, lr + and r7, lr, r5, lsr #0x10 + mul r6, r4, r7 + mul r5, r4, r4 + and r4, r6, lr + add r8, r5, r4, lsl #0x11 + rsb r3, r3, #0x0 + mul r5, r7, r7 + and r3, r6, r3 + add r3, r5, r3, lsr #0xf + cmp r8, r4, lsl #0x11 + addcc r3, r3, #0x1 + str r8, [r0, #0x18] + subs r2, r2, #0x4 + str r3, [r0, #0x1c] + addne r1, r1, #0x10 + addne r0, r0, #0x20 + bne _020945D4 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_02094708: .word 0x0000FFFF + + arm_func_start FUN_0209470C +FUN_0209470C: ; 0x0209470C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + mov r4, #0x0 + addle sp, sp, #0x4 + movle r0, r4 + ldmleia sp!, {r4-r9,lr} + bxle lr + ldr r5, _020948A8 ; =0x0000FFFF + and lr, r3, r5 + and r12, r5, r3, lsr #0x10 +_02094738: + ldr r3, [r1, #0x0] + and r7, r5, r3, lsr #0x10 + mul r6, lr, r7 + and r3, r3, r5 + mla r9, r12, r3, r6 + mul r8, r3, lr + mul r3, r7, r12 + cmp r9, r6 + and r6, r9, r5 + addcc r3, r3, #0x10000 + and r7, r5, r9, lsr #0x10 + add r8, r8, r6, lsl #0x10 + cmp r8, r6, lsl #0x10 + add r3, r3, r7 + add r6, r8, r4 + addcc r3, r3, #0x1 + cmp r6, r4 + addcc r3, r3, #0x1 + str r6, [r0, #0x0] + mov r4, r3 + subs r6, r2, #0x1 + beq _02094898 + ldr r4, [r1, #0x4] + and r7, r5, r4, lsr #0x10 + mul r6, lr, r7 + and r4, r4, r5 + mla r9, r12, r4, r6 + mul r8, r4, lr + mul r4, r7, r12 + cmp r9, r6 + and r6, r9, r5 + addcc r4, r4, #0x10000 + and r7, r5, r9, lsr #0x10 + add r8, r8, r6, lsl #0x10 + cmp r8, r6, lsl #0x10 + add r4, r4, r7 + add r6, r8, r3 + addcc r4, r4, #0x1 + cmp r6, r3 + addcc r4, r4, #0x1 + str r6, [r0, #0x4] + subs r3, r2, #0x2 + beq _02094898 + ldr r3, [r1, #0x8] + and r7, r5, r3, lsr #0x10 + mul r6, lr, r7 + and r3, r3, r5 + mla r9, r12, r3, r6 + mul r8, r3, lr + mul r3, r7, r12 + cmp r9, r6 + and r6, r9, r5 + addcc r3, r3, #0x10000 + and r7, r5, r9, lsr #0x10 + add r8, r8, r6, lsl #0x10 + cmp r8, r6, lsl #0x10 + add r3, r3, r7 + add r6, r8, r4 + addcc r3, r3, #0x1 + cmp r6, r4 + addcc r3, r3, #0x1 + str r6, [r0, #0x8] + mov r4, r3 + subs r6, r2, #0x3 + beq _02094898 + ldr r4, [r1, #0xc] + and r7, r5, r4, lsr #0x10 + mul r6, lr, r7 + and r4, r4, r5 + mla r9, r12, r4, r6 + mul r8, r4, lr + mul r4, r7, r12 + cmp r9, r6 + and r6, r9, r5 + addcc r4, r4, #0x10000 + and r7, r5, r9, lsr #0x10 + add r8, r8, r6, lsl #0x10 + cmp r8, r6, lsl #0x10 + add r4, r4, r7 + add r6, r8, r3 + addcc r4, r4, #0x1 + cmp r6, r3 + addcc r4, r4, #0x1 + subs r2, r2, #0x4 + str r6, [r0, #0xc] + addne r1, r1, #0x10 + addne r0, r0, #0x10 + bne _02094738 +_02094898: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020948A8: .word 0x0000FFFF + + arm_func_start FUN_020948AC +FUN_020948AC: ; 0x020948AC + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + mov r12, #0x0 + addle sp, sp, #0x4 + movle r0, r12 + ldmleia sp!, {r4-r9,lr} + bxle lr + ldr r5, _02094A88 ; =0x0000FFFF + and r4, r3, r5 + and lr, r5, r3, lsr #0x10 +_020948D8: + ldr r3, [r1, #0x0] + and r7, r5, r3, lsr #0x10 + mul r6, r4, r7 + and r3, r3, r5 + mla r9, lr, r3, r6 + mul r8, r3, r4 + mul r3, r7, lr + cmp r9, r6 + and r6, r9, r5 + addcc r3, r3, #0x10000 + and r7, r5, r9, lsr #0x10 + add r8, r8, r6, lsl #0x10 + cmp r8, r6, lsl #0x10 + add r3, r3, r7 + ldr r6, [r0, #0x0] + addcc r3, r3, #0x1 + add r7, r8, r12 + cmp r7, r12 + add r7, r7, r6 + addcc r3, r3, #0x1 + cmp r7, r6 + addcc r3, r3, #0x1 + mov r12, r3 + str r7, [r0, #0x0] + subs r6, r2, #0x1 + beq _02094A78 + ldr r12, [r1, #0x4] + and r7, r5, r12, lsr #0x10 + mul r6, r4, r7 + and r12, r12, r5 + mla r9, lr, r12, r6 + mul r8, r12, r4 + mul r12, r7, lr + cmp r9, r6 + and r6, r9, r5 + addcc r12, r12, #0x10000 + and r7, r5, r9, lsr #0x10 + add r8, r8, r6, lsl #0x10 + cmp r8, r6, lsl #0x10 + add r12, r12, r7 + add r6, r8, r3 + addcc r12, r12, #0x1 + cmp r6, r3 + ldr r3, [r0, #0x4] + addcc r12, r12, #0x1 + add r6, r6, r3 + cmp r6, r3 + addcc r12, r12, #0x1 + str r6, [r0, #0x4] + subs r3, r2, #0x2 + beq _02094A78 + ldr r3, [r1, #0x8] + and r7, r5, r3, lsr #0x10 + mul r6, r4, r7 + and r3, r3, r5 + mla r9, lr, r3, r6 + mul r8, r3, r4 + mul r3, r7, lr + cmp r9, r6 + and r6, r9, r5 + addcc r3, r3, #0x10000 + and r7, r5, r9, lsr #0x10 + add r8, r8, r6, lsl #0x10 + cmp r8, r6, lsl #0x10 + add r3, r3, r7 + ldr r6, [r0, #0x8] + addcc r3, r3, #0x1 + add r7, r8, r12 + cmp r7, r12 + add r7, r7, r6 + addcc r3, r3, #0x1 + cmp r7, r6 + addcc r3, r3, #0x1 + mov r12, r3 + str r7, [r0, #0x8] + subs r6, r2, #0x3 + beq _02094A78 + ldr r12, [r1, #0xc] + and r7, r5, r12, lsr #0x10 + mul r6, r4, r7 + and r12, r12, r5 + mla r9, lr, r12, r6 + mul r8, r12, r4 + mul r12, r7, lr + cmp r9, r6 + and r6, r9, r5 + addcc r12, r12, #0x10000 + and r7, r5, r9, lsr #0x10 + add r8, r8, r6, lsl #0x10 + cmp r8, r6, lsl #0x10 + add r12, r12, r7 + add r6, r8, r3 + addcc r12, r12, #0x1 + cmp r6, r3 + ldr r3, [r0, #0xc] + addcc r12, r12, #0x1 + add r6, r6, r3 + cmp r6, r3 + addcc r12, r12, #0x1 + subs r2, r2, #0x4 + str r6, [r0, #0xc] + addne r1, r1, #0x10 + addne r0, r0, #0x10 + bne _020948D8 +_02094A78: + mov r0, r12 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_02094A88: .word 0x0000FFFF + + arm_func_start FUN_02094A8C +FUN_02094A8C: + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r1, #0x0 + addlt sp, sp, #0x4 + movlt r0, #0x0 + ldmltia sp!, {lr} + bxlt lr + mov r2, r1, asr #0x4 + add r2, r1, r2, lsr #0x1b + mov r3, r1, lsr #0x1f + ldr r12, [r0, #0x4] + mov lr, r2, asr #0x5 + cmp r12, lr + rsb r1, r3, r1, lsl #0x1b + addle sp, sp, #0x4 + add r2, r3, r1, ror #0x1b + movle r0, #0x0 + ldmleia sp!, {lr} + bxle lr + ldr r1, [r0, #0x0] + mov r0, #0x1 + mov r2, r0, lsl r2 + ldr r1, [r1, lr, lsl #0x2] + ands r1, r2, r1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_02094AFC +FUN_02094AFC: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r2, r1, asr #0x4 + add r2, r1, r2, lsr #0x1b + mov r3, r1, lsr #0x1f + rsb r1, r3, r1, lsl #0x1b + ldr r4, [r6, #0x4] + mov r5, r2, asr #0x5 + cmp r4, r5 + add r4, r3, r1, ror #0x1b + bgt _02094B7C + ldr r2, [r6, #0x8] + add r1, r5, #0x1 + cmp r1, r2 + ble _02094B3C + bl FUN_02094EBC +_02094B3C: + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r3, [r6, #0x4] + add r2, r5, #0x1 + cmp r3, r2 + bge _02094B74 + mov r1, #0x0 +_02094B60: + ldr r0, [r6, #0x0] + str r1, [r0, r3, lsl #0x2] + add r3, r3, #0x1 + cmp r3, r2 + blt _02094B60 +_02094B74: + add r0, r5, #0x1 + str r0, [r6, #0x4] +_02094B7C: + ldr r2, [r6, #0x0] + mov r0, #0x1 + ldr r1, [r2, r5, lsl #0x2] + orr r1, r1, r0, lsl r4 + str r1, [r2, r5, lsl #0x2] + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_02094B98 +FUN_02094B98: + ldr r3, [r0, #0x4] + ldr r2, [r1, #0x4] + subs r2, r3, r2 + movne r0, r2 + bxne lr + subs r2, r3, #0x1 + ldr r12, [r0, #0x0] + ldr r3, [r1, #0x0] + bmi _02094BE4 +_02094BBC: + ldr r1, [r12, r2, lsl #0x2] + ldr r0, [r3, r2, lsl #0x2] + cmp r1, r0 + beq _02094BDC + cmp r1, r0 + movhi r0, #0x1 + mvnls r0, #0x0 + bx lr +_02094BDC: + subs r2, r2, #0x1 + bpl _02094BBC +_02094BE4: + mov r0, #0x0 + bx lr + + arm_func_start FUN_02094BEC +FUN_02094BEC: ; 0x02094BEC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl FUN_02095188 + add r1, r0, #0x7 + mov r0, r1, asr #0x2 + add r0, r1, r0, lsr #0x1d + mov r0, r0, asr #0x3 + cmp r0, #0x0 + addle sp, sp, #0x4 + sub r12, r0, #0x1 + ldmleia sp!, {r4-r5,lr} + bxle lr +_02094C24: + mov r3, r12, lsr #0x1f + mov r1, r12, asr #0x1 + rsb r2, r3, r12, lsl #0x1e + add r1, r12, r1, lsr #0x1e + add r2, r3, r2, ror #0x1e + ldr r3, [r5, #0x0] + mov r1, r1, asr #0x2 + ldr r3, [r3, r1, lsl #0x2] + mov r1, r2, lsl #0x3 + mov r1, r3, lsr r1 + cmp r12, #0x0 + strb r1, [r4], #0x1 + sub r12, r12, #0x1 + bgt _02094C24 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_02094C68 +FUN_02094C68: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + movs r5, r2 + mov r7, r0 + mov r6, r1 + bne _02094C88 + bl FUN_02094FE0 + mov r5, r0 +_02094C88: + cmp r5, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + cmp r6, #0x0 + mov r4, #0x0 + addeq sp, sp, #0x4 + moveq r0, r5 + streq r4, [r5, #0x4] + ldmeqia sp!, {r4-r7,lr} + bxeq lr + add r0, r6, #0x2 + mov r2, r0, lsl #0x3 + add r1, r2, #0x1f + mov r0, r1, asr #0x4 + add r0, r1, r0, lsr #0x1b + ldr r1, [r5, #0x8] + mov r0, r0, asr #0x5 + cmp r0, r1 + movle r0, r5 + ble _02094CF8 + mov r0, r2, asr #0x4 + add r0, r2, r0, lsr #0x1b + mov r1, r0, asr #0x5 + mov r0, r5 + add r1, r1, #0x1 + bl FUN_02094EBC +_02094CF8: + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + sub r0, r6, #0x1 + mov r1, r0, lsr #0x2 + add r12, r1, #0x1 + cmp r6, #0x0 + str r12, [r5, #0x4] + and r3, r0, #0x3 + sub r6, r6, #0x1 + beq _02094D64 + mov r1, #0x0 + mov r0, #0x3 +_02094D34: + ldrb r2, [r7], #0x1 + cmp r3, #0x0 + sub r3, r3, #0x1 + orr r4, r2, r4, lsl #0x8 + ldreq r2, [r5, #0x0] + subeq r12, r12, #0x1 + streq r4, [r2, r12, lsl #0x2] + moveq r4, r1 + moveq r3, r0 + cmp r6, #0x0 + sub r6, r6, #0x1 + bne _02094D34 +_02094D64: + mov r0, r5 + bl FUN_02095040 + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_02094D7C +FUN_02094D7C: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + ldr r2, [r4, #0x8] + mov r5, r1 + cmp r2, #0x1 + bge _02094DA0 + mov r1, #0x2 + bl FUN_02094EBC +_02094DA0: + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + mov r0, #0x0 + str r0, [r4, #0xc] + str r0, [r4, #0x4] + ldr r0, [r4, #0x0] + str r5, [r0, #0x0] + ldr r0, [r4, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + movne r0, #0x1 + strne r0, [r4, #0x4] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_02094DEC +FUN_02094DEC: ; 0x02094DEC + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x0] + cmp r0, #0x0 + beq _02094E10 + ldr r2, [r4, #0x8] + mov r1, #0x0 + mov r2, r2, lsl #0x2 + bl MI_CpuFill8 +_02094E10: + mov r0, #0x0 + str r0, [r4, #0x4] + str r0, [r4, #0xc] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_02094E24 +FUN_02094E24: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + cmp r5, r4 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r1, [r4, #0x4] + ldr r2, [r5, #0x8] + cmp r1, r2 + ble _02094E58 + bl FUN_02094EBC +_02094E58: + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r2, [r4, #0x4] + ldr r0, [r4, #0x0] + ldr r1, [r5, #0x0] + mov r2, r2, lsl #0x2 + bl MI_CpuCopy8 + ldr r0, [r4, #0x4] + str r0, [r5, #0x4] + ldr r0, [r5, #0x4] + cmp r0, #0x0 + bne _02094EA4 + ldr r1, [r5, #0x0] + cmp r1, #0x0 + movne r0, #0x0 + strne r0, [r1, #0x0] +_02094EA4: + ldr r1, [r4, #0xc] + mov r0, r5 + str r1, [r5, #0xc] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_02094EBC +FUN_02094EBC: + stmdb sp!, {r4-r6,lr} + mov r5, r0 + ldr r0, [r5, #0x8] + mov r4, r1 + cmp r4, r0 + ble _02094F30 + ldr r0, [r5, #0x10] + ands r0, r0, #0x2 + movne r0, #0x0 + ldmneia sp!, {r4-r6,lr} + bxne lr + add r0, r4, #0x1 + mov r0, r0, lsl #0x2 + bl FUN_020910A4 + movs r6, r0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r0, [r5, #0x0] + cmp r0, #0x0 + beq _02094F28 + ldr r2, [r5, #0x4] + mov r1, r6 + mov r2, r2, lsl #0x2 + bl MI_CpuCopy8 +_02094F20: ; 0x02094F20 + ldr r0, [r5, #0x0] + bl FUN_0209105C +_02094F28: + str r6, [r5, #0x0] + str r4, [r5, #0x8] +_02094F30: + mov r0, r5 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_02094F3C +FUN_02094F3C: ; 0x02094F3C + stmdb sp!, {r4-r6,lr} + mov r6, r0 + add r4, r6, #0x4 + mov r5, #0x0 +_02094F4C: + mov r0, r4 + bl FUN_02095164 + add r5, r5, #0x1 + cmp r5, #0xc + add r4, r4, #0x14 + blt _02094F4C + ldr r0, [r6, #0x108] + ands r0, r0, #0x1 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r0, r6 + bl FUN_0209105C + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_02094F84 +FUN_02094F84: ; 0x02094F84 + stmdb sp!, {r4,lr} + mov r1, #0x0 + mov r2, #0x110 + mov r4, r0 + bl MI_CpuFill8 +_02094F98: ; 0x02094F98 + mov r0, #0x0 + str r0, [r4, #0x0] + str r0, [r4, #0x108] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_02094FAC +FUN_02094FAC: ; 0x02094FAC + stmdb sp!, {r4,lr} + mov r0, #0x110 + bl FUN_020910A4 + movs r4, r0 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + bl FUN_02094F84 + mov r1, #0x1 + mov r0, r4 + str r1, [r4, #0x108] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_02094FE0 +FUN_02094FE0: ; 0x02094FE0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, #0x14 + bl FUN_020910A4 +_02094FF0: ; 0x02094FF0 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {lr} + bxeq lr + mov r1, #0x1 + str r1, [r0, #0x10] + mov r1, #0x0 + str r1, [r0, #0x4] + str r1, [r0, #0xc] + str r1, [r0, #0x8] + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_0209502C +FUN_0209502C: + ldr ip, _0209503C ; =MI_CpuFill8 + mov r1, #0x0 + mov r2, #0x14 + bx r12 + .balign 4 +_0209503C: .word MI_CpuFill8 + + arm_func_start FUN_02095040 +FUN_02095040: + ldr r3, [r0, #0x4] + cmp r3, #0x0 + bxle lr + ldr r2, [r0, #0x0] + sub r1, r3, #0x1 + cmp r3, #0x0 + add r3, r2, r1, lsl #0x2 + bxle lr + add r2, r0, #0x4 +_02095064: + ldr r1, [r3], #-0x4 + cmp r1, #0x0 + bxne lr + ldr r1, [r2, #0x0] + sub r1, r1, #0x1 + str r1, [r2, #0x0] + ldr r1, [r0, #0x4] + cmp r1, #0x0 + bgt _02095064 + bx lr + + arm_func_start FUN_0209508C +FUN_0209508C: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r2, [r5, #0x4] + mov r4, r1 + cmp r2, r4 + addge sp, sp, #0x4 + ldmgeia sp!, {r4-r5,lr} + bxge lr + ldr r2, [r5, #0x8] + cmp r4, r2 + ble _020950C0 + bl FUN_02094EBC +_020950C0: + ldr r0, [r5, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r2, [r5, #0x4] + cmp r2, r4 + addge sp, sp, #0x4 + ldmgeia sp!, {r4-r5,lr} + bxge lr + mov r1, #0x0 +_020950EC: + ldr r0, [r5, #0x0] + str r1, [r0, r2, lsl #0x2] + add r2, r2, #0x1 + cmp r2, r4 + blt _020950EC + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_0209510C +FUN_0209510C: + stmdb sp!, {r4,lr} + movs r4, r0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r0, [r4, #0x0] + cmp r0, #0x0 + beq _02095138 + ldr r1, [r4, #0x10] + ands r1, r1, #0x2 + bne _02095138 + bl FUN_0209105C +_02095138: + ldr r0, [r4, #0x10] + orr r0, r0, #0x8000 + str r0, [r4, #0x10] + ldr r0, [r4, #0x10] + ands r0, r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr + mov r0, r4 + bl FUN_0209105C + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_02095164 +FUN_02095164: ; 0x02095164 + stmdb sp!, {r4,lr} + movs r4, r0 + ldmeqia sp!, {r4,lr} + bxeq lr + bl FUN_02094DEC + mov r0, r4 + bl FUN_0209510C + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_02095188 +FUN_02095188: ; 0x02095188 + stmdb sp!, {r4,lr} + ldr r1, [r0, #0x4] + cmp r1, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r0, [r0, #0x0] + sub r4, r1, #0x1 + ldr r0, [r0, r4, lsl #0x2] + bl FUN_020951BC + add r0, r0, r4, lsl #0x5 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020951BC +FUN_020951BC: ; 0x020951BC + mov r1, #0x10000 + rsb r1, r1, #0x0 + ands r1, r0, r1 + beq _020951DC + ands r1, r0, #0xff000000 + movne r2, #0x18 + moveq r2, #0x10 + b _020951E8 +_020951DC: + ands r1, r0, #0xff00 + movne r2, #0x8 + moveq r2, #0x0 +_020951E8: + mov r1, r0, lsr r2 + ands r0, r1, #0xf0 + ldreq r0, _02095218 ; =0x020FF524 + ldreqsb r0, [r0, r1] + addeq r0, r0, r2 + bxeq lr + ldr r0, _02095218 ; =0x020FF524 + mov r1, r1, lsr #0x4 + ldrsb r0, [r0, r1] + add r0, r0, r2 + add r0, r0, #0x4 + bx lr + .balign 4 +_02095218: .word 0x020FF524 + + arm_func_start FUN_0209521C +FUN_0209521C: ; 0x0209521C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r3, #0x0 + strb r3, [r0, #0x0] + cmp r2, #0x10 + strb r3, [r0, #0x1] + movhi r2, #0x10 + add r0, r0, #0x4 +_0209523C: + strb r3, [r0, r3] + add r3, r3, #0x1 + cmp r3, #0x100 + blt _0209523C + mov r6, #0x0 + mov r7, r6 + mov r4, r6 + mov r3, r6 + and r12, r2, #0xff +_02095260: + ldrb r5, [r0, r4] + ldrb lr, [r1, r7] + add r2, r7, #0x1 + and r7, r2, #0xff + add r2, r5, lr + add r2, r6, r2 + and r6, r2, #0xff + ldrb r2, [r0, r6] + add lr, r0, r4 + add r4, r4, #0x1 + strb r2, [lr, #0x0] + cmp r7, r12 + moveq r7, r3 + cmp r4, #0x100 + strb r5, [r0, r6] + blt _02095260 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_020952AC +FUN_020952AC: ; 0x020952AC + stmdb sp!, {r4-r9,lr} + ldrb r7, [r0, #0x0] + ldrb r6, [r0, #0x1] + add r0, r0, #0x4 + mov lr, #0x1000000 + add r7, lr, r7, lsl #0x18 + mov r6, r6, lsl #0x18 + ldrb r9, [r0, r7, lsr #0x18] + subs r2, r2, #0x1 + bmi _0209530C +_020952D4: + add r6, r6, r9, lsl #0x18 + subs r2, r2, #0x1 + ldrb r8, [r0, r6, lsr #0x18] + ldrb r5, [r1], #0x1 + strb r8, [r0, r7, lsr #0x18] + strb r9, [r0, r6, lsr #0x18] + add r4, r9, r8 + and r4, r4, #0xff + add r7, r7, lr + ldrb r4, [r0, r4] + ldrb r9, [r0, r7, lsr #0x18] + eor r5, r5, r4 + strb r5, [r3], #0x1 + bge _020952D4 +_0209530C: + sub r7, r7, lr + mov r7, r7, lsr #0x18 + mov r6, r6, lsr #0x18 + strb r7, [r0, #-0x4] + strb r6, [r0, #-0x3] + ldmia sp!, {r4-r9,pc} +_02095324: ; 0x02095324 + ldr r0, _0209532C ; =0x021C8C84 + bx lr + .balign 4 +_0209532C: .word 0x021C8C84 + + arm_func_start FUN_02095330 +FUN_02095330: ; 0x02095330 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + mov r4, r0 + ldr r3, [r4, #0x8] + ldr r2, [r4, #0xc] + ldr r1, _020953E4 ; =0x021C8C84 + str r2, [sp, #0x4] + str r3, [sp, #0x0] + mov r2, #0x5 + bl MI_CpuCopy8 + ldr r1, [sp, #0x0] + ldr r2, [r4, #0x4] + ldr r0, [sp, #0x4] + mov r2, r2, lsr #0x8 + mov r12, r1, lsr #0x5 + mov r3, r0, lsr #0x5 + orr r12, r12, r0, lsl #0x1b + and lr, r2, #0x7 + and r0, r1, #0x1f + orr lr, lr, r0, lsl #0x3 + ldr r2, _020953E4 ; =0x021C8C84 + ldr r1, _020953E8 ; =0x021C8C8A + strb lr, [r2, #0x5] + add r0, sp, #0x0 + str r12, [sp, #0x0] + str r3, [sp, #0x4] + mov r2, #0x4 + bl MI_CpuCopy8 + ldrh r0, [r4, #0x10] + ldr r1, [sp, #0x4] + ldr r3, _020953E4 ; =0x021C8C84 + and r1, r1, #0x3f + and r0, r0, #0x3 + orr r0, r1, r0, lsl #0x6 + strb r0, [r3, #0xa] + ldrh r2, [r4, #0x10] + add r0, r4, #0x12 + ldr r1, _020953EC ; =0x021C8C90 + mov r4, r2, asr #0x2 + mov r2, #0x2 + strb r4, [r3, #0xb] + bl MI_CpuCopy8 + ldr r0, _020953E4 ; =0x021C8C84 + add sp, sp, #0x8 + ldmia sp!, {r4,pc} + .balign 4 +_020953E4: .word 0x021C8C84 +_020953E8: .word 0x021C8C8A +_020953EC: .word 0x021C8C90 + + arm_func_start FUN_020953F0 +FUN_020953F0: ; 0x020953F0 + ldr r3, _02095420 ; =0x021C8C78 + and r12, r1, #0xff + ldr r0, _02095424 ; =0x021C8C7C + mov r1, #0x1 + strh r12, [r3, #0x0] + str r1, [r0, #0x0] + cmp r2, #0x0 + movne r0, #0xff + strneh r0, [r3, #0x0] + ldr r0, _02095420 ; =0x021C8C78 + ldrh r0, [r0, #0x0] + bx lr + .balign 4 +_02095420: .word 0x021C8C78 +_02095424: .word 0x021C8C7C + + arm_func_start FUN_02095428 +FUN_02095428: + stmdb sp!, {r4-r6,lr} + mov r5, #0x4 + mov r4, #0x1 +_02095434: + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady +_02095440: ; 0x02095440 + cmp r0, #0x0 + beq _02095434 + ldr r1, _02095490 ; =FUN_020953F0 + mov r0, #0x4 + bl PXI_SetFifoRecvCallback + mov r4, #0x40000 + mov r6, #0x7 + mov r5, #0x0 +_02095460: + mov r0, r6 + mov r1, r5 + mov r2, r5 + mov r3, r5 + bl FUN_020955F4 + cmp r0, #0x1 + beq _02095488 + mov r0, r4 + blx FUN_020005F2 + b _02095460 +_02095488: + mov r0, #0x1 + ldmia sp!, {r4-r6,pc} + .balign 4 +_02095490: .word FUN_020953F0 + + arm_func_start FUN_02095494 +FUN_02095494: + stmdb sp!, {r4-r6,lr} + mov r5, r2 + mov r4, r3 + mov r6, r0 + mov r0, r1 + mov r1, r5 + mov r2, r4 + bl FUN_0209555C +_020954B4: ; 0x020954B4 + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020954C0: ; 0x020954C0 + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl memcmp +_020954D0: ; 0x020954D0 + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020954E0 +FUN_020954E0: ; 0x020954E0 + stmdb sp!, {r4-r8,lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, #0x4 + mov r4, #0x1 +_020954F8: + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady +_02095504: ; 0x02095504 + cmp r0, #0x0 + beq _020954F8 + ldr r1, _02095558 ; =FUN_020953F0 + mov r0, #0x4 + bl PXI_SetFifoRecvCallback + mov r0, r6 + mov r1, r7 + bl DC_StoreRange + mov r4, #0x40000 + mov r5, #0x2 +_0209552C: + mov r0, r5 + mov r1, r8 + mov r2, r7 + mov r3, r6 + bl FUN_020955F4 + cmp r0, #0x1 + ldmeqia sp!, {r4-r8,pc} +_02095548: ; 0x02095548 + mov r0, r4 + blx FUN_020005F2 + b _0209552C +_02095554: ; 0x02095554 + ldmia sp!, {r4-r8,pc} + .balign 4 +_02095558: .word FUN_020953F0 + + arm_func_start FUN_0209555C +FUN_0209555C: + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r4, r2 + mov r6, r0 + mov r0, r4 + mov r5, r1 + bl DC_InvalidateRange + mov r8, #0x4 + mov r7, #0x1 +_02095580: + mov r0, r8 + mov r1, r7 + bl PXI_IsCallbackReady +_0209558C: ; 0x0209558C + cmp r0, #0x0 + beq _02095580 + ldr r1, _020955F0 ; =FUN_020953F0 + mov r0, #0x4 + bl PXI_SetFifoRecvCallback + mov r0, r5, lsl #0x10 + mov r8, r0, lsr #0x10 + mov r7, #0x40000 + mov r9, #0x1 +_020955B0: + mov r0, r9 + mov r1, r6 + mov r2, r8 + mov r3, r4 + bl FUN_020955F4 + cmp r0, #0x1 + beq _020955D8 + mov r0, r7 + blx FUN_020005F2 + b _020955B0 +_020955D8: + mov r0, r4 + mov r1, r5 + bl DC_InvalidateRange + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020955F0: .word FUN_020953F0 + + arm_func_start FUN_020955F4 +FUN_020955F4: ; 0x020955F4 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc4 + ldr ip, _02095AAC ; =0x0000FFFF + ldr sl, _02095AB0 ; =0x021C8CA0 + and r8, r2, r12 + and r7, r1, r12 + mov r5, r1, lsr #0x10 + mov r4, r3, lsr #0x10 + and r1, r3, r12 + orr r3, r8, #0x30000 + str r3, [sp, #0xc] + ldr r3, _02095AB4 ; =0x01050000 + orr r2, r2, #0x20000 + orr r3, r1, r3 + str r3, [sp, #0x14] + orr r1, r1, #0x1040000 + mov r9, r0 + and r0, r5, #0xff + str r2, [sp, #0x1c] + str r1, [sp, #0x24] + ldr r1, _02095AB8 ; =0x02002200 + mov r8, #0x0 + orr r2, r4, #0x40000 + orr r1, r1, r10, lsr #0x18 + str r1, [sp, #0x28] + and r1, r12, r10, lsr #0x8 + orr r1, r1, #0x10000 + ldr r3, _02095ABC ; =0x02002300 + str r2, [sp, #0x10] + orr r2, r0, r3 + str r2, [sp, #0x8] + orr r2, r4, #0x30000 + str r2, [sp, #0x20] + ldr r2, _02095AC0 ; =0x02002500 + mov r6, r10, lsl #0x8 + str r1, [sp, #0x2c] + and r1, r6, #0xff00 + orr r0, r0, r2 + ldr r3, _02095AC4 ; =0x01020000 + str r0, [sp, #0x18] + orr r0, r1, r3 + str r0, [sp, #0x30] + mov r0, #0x20000 + str r0, [sp, #0x40] + mov r0, #0x5 + str r0, [sp, #0xac] + mov r0, #0x3 + str r0, [sp, #0xb0] + mov r0, #0x6 + str r0, [sp, #0xb8] + mov r0, #0x4000 + orr r7, r7, #0x10000 + str r8, [sp, #0xb4] + mov r4, #0x1 + str r8, [sp, #0xa8] + mov r5, #0x4 + str r8, [sp, #0xa4] + str r8, [sp, #0xa0] + str r8, [sp, #0x90] + str r8, [sp, #0x98] + str r8, [sp, #0x9c] + str r8, [sp, #0x94] + str r8, [sp, #0x8c] + str r8, [sp, #0x6c] + str r8, [sp, #0x74] + str r8, [sp, #0x7c] + str r8, [sp, #0x84] + str r8, [sp, #0x88] + str r8, [sp, #0x80] + str r8, [sp, #0x78] + str r8, [sp, #0x70] + str r8, [sp, #0x68] + str r8, [sp, #0x64] + str r8, [sp, #0x38] + str r8, [sp, #0x44] + str r8, [sp, #0x4c] + str r8, [sp, #0x54] + str r8, [sp, #0x5c] + str r8, [sp, #0x60] + str r8, [sp, #0x58] + str r8, [sp, #0x50] + str r8, [sp, #0x48] + str r8, [sp, #0x3c] + str r8, [sp, #0x34] + mov r6, r8 + str r0, [sp, #0xbc] +_0209574C: + cmp r8, #0x0 + bne _02095988 + ldr r0, _02095AC8 ; =0x021C8C7C + cmp r9, #0x7 + str r6, [r0, #0x0] + addls pc, pc, r9, lsl #0x2 + b _0209574C +_02095768: + b _0209574C +_0209576C: + b _02095788 +_02095770: + b _02095834 +_02095774: + b _02095854 +_02095778: + b _020958F0 +_0209577C: + b _020958F0 +_02095780: + b _02095948 +_02095784: + b _02095968 +_02095788: + ldr r1, [sp, #0x8] + mov r0, r5 + mov r2, r6 + bl PXI_SendWordByFifo +_02095798: ; 0x02095798 + cmp r0, #0x0 + ldrlt r8, [sp, #0x34] + blt _0209574C + ldr r2, [sp, #0x38] + mov r0, r5 + mov r1, r7 + bl PXI_SendWordByFifo +_020957B4: ; 0x020957B4 + cmp r0, #0x0 + ldrlt r8, [sp, #0x3c] + blt _0209574C + ldr r1, [sp, #0x40] + ldr r2, [sp, #0x44] + mov r0, r5 + bl PXI_SendWordByFifo +_020957D0: ; 0x020957D0 + cmp r0, #0x0 + ldrlt r8, [sp, #0x48] + blt _0209574C + ldr r1, [sp, #0xc] + ldr r2, [sp, #0x4c] + mov r0, r5 + bl PXI_SendWordByFifo +_020957EC: ; 0x020957EC + cmp r0, #0x0 + ldrlt r8, [sp, #0x50] + blt _0209574C + ldr r1, [sp, #0x10] + ldr r2, [sp, #0x54] + mov r0, r5 + bl PXI_SendWordByFifo +_02095808: ; 0x02095808 + cmp r0, #0x0 + ldrlt r8, [sp, #0x58] + blt _0209574C + ldr r1, [sp, #0x14] + ldr r2, [sp, #0x5c] + mov r0, r5 + bl PXI_SendWordByFifo +_02095824: ; 0x02095824 + cmp r0, #0x0 + ldrlt r8, [sp, #0x60] + movge r8, r4 + b _0209574C +_02095834: + ldr r1, _02095ACC ; =0x03002000 + mov r0, r5 + mov r2, r6 + bl PXI_SendWordByFifo +_02095844: ; 0x02095844 + cmp r0, #0x0 + movge r8, r4 + ldrlt r8, [sp, #0x64] + b _0209574C +_02095854: + ldr r1, [sp, #0x18] + mov r0, r5 + mov r2, r6 + bl PXI_SendWordByFifo +_02095864: ; 0x02095864 + cmp r0, #0x0 + ldrlt r8, [sp, #0x68] + blt _020958E0 + ldr r2, [sp, #0x6c] + mov r0, r5 + mov r1, r7 + bl PXI_SendWordByFifo +_02095880: ; 0x02095880 + cmp r0, #0x0 + ldrlt r8, [sp, #0x70] + blt _020958E0 + ldr r1, [sp, #0x1c] + ldr r2, [sp, #0x74] + mov r0, r5 + bl PXI_SendWordByFifo +_0209589C: ; 0x0209589C + cmp r0, #0x0 + ldrlt r8, [sp, #0x78] + blt _020958E0 + ldr r1, [sp, #0x20] + ldr r2, [sp, #0x7c] + mov r0, r5 + bl PXI_SendWordByFifo +_020958B8: ; 0x020958B8 + cmp r0, #0x0 + ldrlt r8, [sp, #0x80] + blt _020958E0 + ldr r1, [sp, #0x24] + ldr r2, [sp, #0x84] + mov r0, r5 + bl PXI_SendWordByFifo +_020958D4: ; 0x020958D4 + cmp r0, #0x0 + ldrlt r8, [sp, #0x88] + movge r8, r4 +_020958E0: + bl OS_GetTick +_020958E4: ; 0x020958E4 + str r0, [sp, #0x0] + mov r11, r1 + b _0209574C +_020958F0: + ldr r1, [sp, #0x28] + mov r0, r5 + mov r2, r6 + bl PXI_SendWordByFifo +_02095900: ; 0x02095900 + cmp r0, #0x0 + ldrlt r8, [sp, #0x8c] + blt _0209574C + ldr r1, [sp, #0x2c] + ldr r2, [sp, #0x90] + mov r0, r5 + bl PXI_SendWordByFifo +_0209591C: ; 0x0209591C + cmp r0, #0x0 + ldrlt r8, [sp, #0x94] + blt _0209574C + ldr r1, [sp, #0x30] + ldr r2, [sp, #0x98] + mov r0, r5 + bl PXI_SendWordByFifo +_02095938: ; 0x02095938 + cmp r0, #0x0 + ldrlt r8, [sp, #0x9c] + movge r8, r4 + b _0209574C +_02095948: + ldr r1, _02095AD0 ; =0x03002D00 + mov r0, r5 + mov r2, r6 + bl PXI_SendWordByFifo +_02095958: ; 0x02095958 + cmp r0, #0x0 + movge r8, r4 + ldrlt r8, [sp, #0xa0] + b _0209574C +_02095968: + ldr r1, _02095AD4 ; =0x03002100 + mov r0, r5 + mov r2, r6 + bl PXI_SendWordByFifo +_02095978: ; 0x02095978 + cmp r0, #0x0 + movge r8, r4 + ldrlt r8, [sp, #0xa4] + b _0209574C +_02095988: + ldr r0, _02095AC8 ; =0x021C8C7C + ldr r0, [r0, #0x0] + cmp r0, #0x1 + bne _0209574C + ldr r0, _02095AD8 ; =0x021C8C78 + ldr r8, [sp, #0xa8] + ldrh r0, [r0, #0x0] + cmp r0, #0x0 + bne _02095AA0 + cmp r9, #0x7 + addls pc, pc, r9, lsl #0x2 + b _0209574C +_020959B8: ; 0x020959B8 + b _0209574C +_020959BC: ; 0x020959BC + b _020959D8 +_020959C0: ; 0x020959C0 + b _020959E4 +_020959C4: ; 0x020959C4 + b _020959EC +_020959C8: ; 0x020959C8 + b _020959F4 +_020959CC: ; 0x020959CC + b _020959F4 +_020959D0: ; 0x020959D0 + b _02095A88 +_020959D4: ; 0x020959D4 + b _02095A94 +_020959D8: + add sp, sp, #0xc4 + mov r0, #0x1 + ldmia sp!, {r4-r11,pc} +_020959E4: + mov r9, r5 + b _0209574C +_020959EC: + ldr r9, [sp, #0xac] + b _0209574C +_020959F4: + mov r0, r10 + mov r1, r4 + bl DC_InvalidateRange + cmp r9, #0x4 + bne _02095A24 + ldrb r0, [r10, #0x0] + ands r0, r0, #0x2 + ldrne r9, [sp, #0xb0] + bne _0209574C + add sp, sp, #0xc4 + mov r0, #0x0 + ldmia sp!, {r4-r11,pc} +_02095A24: + ldrb r1, [r10, #0x0] + ands r0, r1, #0x1 + addeq sp, sp, #0xc4 + moveq r0, #0x1 + ldmeqia sp!, {r4-r11,pc} +_02095A38: ; 0x02095A38 + ands r0, r1, #0x20 + bne _02095A74 + bl OS_GetTick + ldr r2, [sp, #0x0] + ldr r3, [sp, #0xb4] + subs r2, r0, r2 + sbc r0, r1, r11 + mov r1, r0, lsl #0x6 + orr r1, r1, r2, lsr #0x1a + mov r0, r2, lsl #0x6 + ldr r2, _02095ADC ; =0x000082EA + bl _ll_udiv +_02095A68: ; 0x02095A68 + cmp r1, #0x0 + cmpeq r0, #0xfa0 + bls _02095A7C +_02095A74: + ldr r9, [sp, #0xb8] + b _0209574C +_02095A7C: + ldr r0, [sp, #0xbc] + blx FUN_020005F2 + b _0209574C +_02095A88: + add sp, sp, #0xc4 + mov r0, r8 + ldmia sp!, {r4-r11,pc} +_02095A94: + add sp, sp, #0xc4 + mov r0, #0x1 + ldmia sp!, {r4-r11,pc} +_02095AA0: + mov r0, r8 + add sp, sp, #0xc4 + ldmia sp!, {r4-r11,pc} + .balign 4 +_02095AAC: .word 0x0000FFFF +_02095AB0: .word 0x021C8CA0 +_02095AB4: .word 0x01050000 +_02095AB8: .word 0x02002200 +_02095ABC: .word 0x02002300 +_02095AC0: .word 0x02002500 +_02095AC4: .word 0x01020000 +_02095AC8: .word 0x021C8C7C +_02095ACC: .word 0x03002000 +_02095AD0: .word 0x03002D00 +_02095AD4: .word 0x03002100 +_02095AD8: .word 0x021C8C78 +_02095ADC: .word 0x000082EA + + arm_func_start FUN_02095AE0 +FUN_02095AE0: + ldrb r0, [r0, #0x0] + cmp r0, #0x7f + moveq r0, #0x0 + bxeq lr + cmp r0, #0x1 + movcc r0, #0x0 + bxcc lr + cmp r0, #0xdf + movls r0, #0x1 + movhi r0, #0x0 + bx lr + + arm_func_start FUN_02095B0C +FUN_02095B0C: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + mov r4, r1 + bl FUN_02095AE0 +_02095B20: ; 0x02095B20 + cmp r0, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} +_02095B30: ; 0x02095B30 + add r1, sp, #0x0 + mov r0, r5 + mov r2, #0x4 + bl MI_CpuCopy8 + add r1, sp, #0x4 + mov r0, r4 + mov r2, #0x4 + bl MI_CpuCopy8 + ldr r3, [sp, #0x4] + ldr r2, [sp, #0x0] + mvn r0, #0x1 + orr r1, r2, r3 + cmp r1, r0 + addeq sp, sp, #0xc + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} +_02095B70: ; 0x02095B70 + mvn r0, r3 + ands r0, r2, r0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0xc + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_02095B88 +FUN_02095B88: + mov r2, #0x0 +_02095B8C: + ldrb r1, [r0, r2] + cmp r1, #0x0 + movne r0, #0x1 + bxne lr + add r2, r2, #0x1 + cmp r2, #0x20 + blt _02095B8C + mov r0, #0x0 + bx lr + + arm_func_start FUN_02095BB0 +FUN_02095BB0: ; 0x02095BB0 + mvn r2, #0x0 + mov r12, #0x0 + eor r3, r2, r2, lsr r0 + mov r2, r12 +_02095BC0: + rsb r0, r2, #0x18 + mov r0, r3, lsr r0 + strb r0, [r1, r12] + add r12, r12, #0x1 + cmp r12, #0x4 + add r2, r2, #0x8 + blt _02095BC0 + bx lr + + arm_func_start FUN_02095BE0 +FUN_02095BE0: ; 0x02095BE0 + stmdb sp!, {r4,lr} + mov lr, #0x0 + mov r4, lr + mov r2, lr +_02095BF0: + ldrb r3, [r0, lr] + mov r12, r2 +_02095BF8: + mov r1, r3, asr r12 + ands r1, r1, #0x1 + add r12, r12, #0x1 + addne r4, r4, #0x1 + cmp r12, #0x8 + blt _02095BF8 + add lr, lr, #0x1 + cmp lr, #0x4 + blt _02095BF0 + and r0, r4, #0xff + ldmia sp!, {r4,pc} + + arm_func_start FUN_02095C24 +FUN_02095C24: ; 0x02095C24 + ldr ip, _02095C34 ; =MI_CpuCopy8 + ldr r1, _02095C38 ; =0x021C8C84 + mov r2, #0xe + bx r12 + .balign 4 +_02095C34: .word MI_CpuCopy8 +_02095C38: .word 0x021C8C84 + + arm_func_start FUN_02095C3C +FUN_02095C3C: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr r1, _02095CD8 ; =0x021C8C80 + mov r10, r0 + ldr r8, [r1, #0x0] + mov r7, r10 + mov r9, #0x0 + add r4, r10, #0x400 + add r6, r10, #0x500 + mov r5, #0x100 + mov r11, #0xfe +_02095C68: + mov r0, r6 + mov r1, r7 + mov r2, r11 + bl MATH_CalcCRC16 + add r1, r10, r9, lsl #0x8 + strh r0, [r1, #0xfe] +_02095C80: + mov r0, r8 + mov r1, r5 + mov r2, r7 + bl FUN_020954E0 + mov r0, r7 + mov r1, r8 + mov r2, r5 + mov r3, r4 + bl FUN_02095494 +_02095CA4: ; 0x02095CA4 + cmp r0, #0x0 + beq _02095C80 + add r9, r9, #0x1 + cmp r9, #0x4 + add r7, r7, #0x100 + add r8, r8, #0x100 + blt _02095C68 + bl FUN_02095428 +_02095CC4: ; 0x02095CC4 + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + .balign 4 +_02095CD8: .word 0x021C8C80 + + arm_func_start FUN_02095CDC +FUN_02095CDC: ; 0x02095CDC + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r3, _02095D64 ; =0x021C8C80 + mov r4, r0 + ldr r6, [r3, #0x0] + mov r9, r1 + mov r8, r2 + mov r7, #0x0 + mov r5, #0x100 +_02095D00: + ldr r0, [r9, r7, lsl #0x2] + cmp r0, #0x0 + beq _02095D38 +_02095D0C: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_020954E0 + mov r0, r4 + mov r1, r6 + mov r2, r5 + mov r3, r8 + bl FUN_02095494 +_02095D30: ; 0x02095D30 + cmp r0, #0x0 + beq _02095D0C +_02095D38: + add r7, r7, #0x1 + cmp r7, #0x4 + add r4, r4, #0x100 + add r6, r6, #0x100 + blt _02095D00 + bl FUN_02095428 +_02095D50: ; 0x02095D50 + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_02095D64: .word 0x021C8C80 + + arm_func_start FUN_02095D68 +FUN_02095D68: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _02095D98 ; =0x021C8C80 + mov r2, r0 + ldr r0, [r1, #0x0] + mov r1, #0x400 + bl FUN_0209555C +_02095D84: ; 0x02095D84 + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_02095D98: .word 0x021C8C80 + + arm_func_start FUN_02095D9C +FUN_02095D9C: + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x20 + mov r1, r0 + mov r2, r4 + bl FUN_0209555C +_02095DB4: ; 0x02095DB4 + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_02095DC0: ; 0x02095DC0 + ldrh r2, [r4, #0x0] + ldr r1, _02095DDC ; =0x021C8C80 + mov r0, #0x1 + mov r2, r2, lsl #0x3 + sub r2, r2, #0x400 + str r2, [r1, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_02095DDC: .word 0x021C8C80 + + arm_func_start FUN_02095DE0 +FUN_02095DE0: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr r2, _02095EBC ; =0x021C8C80 + mov r10, r1 + ldr r8, [r2, #0x0] + bl FUN_02095330 + ldr r1, _02095EC0 ; =0x0000A001 + add r0, r10, #0x200 + bl MATHi_CRC16InitTableRev + mov r9, #0x0 + add r4, r10, #0x100 + add r6, r10, #0xf0 + mov r7, #0x100 + mov r5, #0xe + mov r11, #0xfe +_02095E1C: + mov r0, r8 + mov r1, r7 + mov r2, r10 + bl FUN_0209555C +_02095E2C: ; 0x02095E2C + cmp r0, #0x0 + bne _02095E44 + bl OS_Terminate + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r11,pc} +_02095E44: + ldr r0, _02095EC4 ; =0x021C8C84 + mov r1, r6 + mov r2, r5 + bl MI_CpuCopy8 + mov r1, r10 + mov r2, r11 + add r0, r10, #0x200 + bl MATH_CalcCRC16 + strh r0, [r10, #0xfe] +_02095E68: + mov r0, r8 + mov r1, r7 + mov r2, r10 + bl FUN_020954E0 + mov r0, r10 + mov r1, r8 + mov r2, r7 + mov r3, r4 + bl FUN_02095494 +_02095E8C: ; 0x02095E8C + cmp r0, #0x0 + beq _02095E68 + add r9, r9, #0x1 + cmp r9, #0x2 + add r8, r8, #0x100 + blt _02095E1C + bl FUN_02095428 +_02095EA8: ; 0x02095EA8 + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + .balign 4 +_02095EBC: .word 0x021C8C80 +_02095EC0: .word 0x0000A001 +_02095EC4: .word 0x021C8C84 + + arm_func_start FUN_02095EC8 +FUN_02095EC8: + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, _02095F90 ; =0x021C8C84 + mov r1, r4 + mov r2, #0x6 + bl MI_CpuCopy8 + ldr r3, [r4, #0x0] + mvn r0, #0x0 + ldr r2, [r4, #0x4] + ldr r1, _02095F94 ; =0x000007FF + and r0, r3, r0 + str r0, [r4, #0x0] + and r1, r2, r1 + ldr r0, _02095F98 ; =0x021C8C89 + str r1, [r4, #0x4] + add r1, r4, #0x8 + mov r2, #0x6 + bl MI_CpuCopy8 + add r12, r4, #0x8 + ldr r1, [r4, #0x8] + ldr r0, [r12, #0x4] + mov r1, r1, lsr #0x3 + orr r1, r1, r0, lsl #0x1d + str r1, [r4, #0x8] + mov r0, r0, lsr #0x3 + str r0, [r12, #0x4] + ldr r3, [r4, #0x8] + mvn r0, #0x0 + ldr r2, [r12, #0x4] + ldr r1, _02095F94 ; =0x000007FF + and r0, r3, r0 + str r0, [r4, #0x8] + and r1, r2, r1 + ldr r0, _02095F9C ; =0x021C8C8E + str r1, [r12, #0x4] + add r1, r4, #0x10 + mov r2, #0x2 + bl MI_CpuCopy8 + ldrh r1, [r4, #0x10] + ldr r3, _02095FA0 ; =0x000003FF + ldr r0, _02095FA4 ; =0x021C8C90 + mov r1, r1, asr #0x6 + strh r1, [r4, #0x10] + ldrh r12, [r4, #0x10] + add r1, r4, #0x12 + mov r2, #0x2 + and r3, r12, r3 + strh r3, [r4, #0x10] + bl MI_CpuCopy8 + ldmia sp!, {r4,pc} + .balign 4 +_02095F90: .word 0x021C8C84 +_02095F94: .word 0x000007FF +_02095F98: .word 0x021C8C89 +_02095F9C: .word 0x021C8C8E +_02095FA0: .word 0x000003FF +_02095FA4: .word 0x021C8C90 + + arm_func_start FUN_02095FA8 +FUN_02095FA8: ; 0x02095FA8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _02095FD8 ; =0x021C8C80 + mov r2, r0 + ldr r0, [r1, #0x0] + mov r1, #0x300 + bl FUN_0209555C +_02095FC4: ; 0x02095FC4 + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_02095FD8: .word 0x021C8C80 + + arm_func_start FUN_02095FDC +FUN_02095FDC: ; 0x02095FDC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + add r1, r5, r4, lsl #0x8 + mov r0, #0x0 + mov r2, #0x100 + bl MIi_CpuClear16 + add r0, r5, r4, lsl #0x8 + mov r1, #0xff + strb r1, [r0, #0xe7] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_02096010 +FUN_02096010: ; 0x02096010 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x14 + mov r7, r0 + mov r1, r7 + mov r0, #0x0 + mov r2, #0x400 + bl MIi_CpuClear16 + mov r2, #0x0 + mov r1, #0xff +_02096034: + add r0, r7, r2, lsl #0x8 + add r2, r2, #0x1 + strb r1, [r0, #0xe7] + cmp r2, #0x3 + blt _02096034 + add r0, sp, #0x0 + bl FUN_020967A4 +_02096050: ; 0x02096050 + add r0, sp, #0x0 + bl FUN_02095330 + mov r6, r0 + mov r5, #0x0 + mov r4, #0xe +_02096064: + mov r0, r6 + mov r2, r4 + add r1, r7, #0xf0 + bl MI_CpuCopy8 + add r5, r5, #0x1 + cmp r5, #0x2 + add r7, r7, #0x100 + blt _02096064 + mov r0, #0x0 + add sp, sp, #0x14 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_02096090 +FUN_02096090: + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + mov r4, r0 + ldrb r0, [r4, #0xe7] + cmp r0, #0xff + addeq sp, sp, #0x8 + moveq r0, #0x1 + ldmeqia sp!, {r4,pc} +_020960B0: ; 0x020960B0 + cmp r0, #0x2 + addhi sp, sp, #0x8 + movhi r0, #0x0 + ldmhiia sp!, {r4,pc} +_020960C0: ; 0x020960C0 + add r0, r4, #0x40 + bl FUN_02095B88 +_020960C8: ; 0x020960C8 + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020960D8: ; 0x020960D8 + ldr r1, _0209618C ; =0x020FF574 + add r0, r4, #0xc0 + mov r2, #0x4 + bl memcmp +_020960E8: ; 0x020960E8 + cmp r0, #0x0 + beq _02096140 + add r0, r4, #0xc4 + bl FUN_02095AE0 +_020960F8: ; 0x020960F8 + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_02096108: ; 0x02096108 + ldrb r0, [r4, #0xd0] + cmp r0, #0x20 + addhi sp, sp, #0x8 + movhi r0, #0x0 + ldmhiia sp!, {r4,pc} +_0209611C: ; 0x0209611C + add r1, sp, #0x0 + bl FUN_02095BB0 + add r1, sp, #0x0 + add r0, r4, #0xc0 + bl FUN_02095B0C +_02096130: ; 0x02096130 + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_02096140: + ldr r1, _0209618C ; =0x020FF574 + add r0, r4, #0xc8 + mov r2, #0x4 + bl memcmp +_02096150: ; 0x02096150 + cmp r0, #0x0 + beq _02096180 + add r0, r4, #0xc8 + bl FUN_02095AE0 +_02096160: ; 0x02096160 + cmp r0, #0x0 + bne _02096180 + add r0, r4, #0xcc + bl FUN_02095AE0 +_02096170: ; 0x02096170 + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_02096180: + mov r0, #0x1 + add sp, sp, #0x8 + ldmia sp!, {r4,pc} + .balign 4 +_0209618C: .word 0x020FF574 + + arm_func_start FUN_02096190 +FUN_02096190: ; 0x02096190 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x14 + mov r10, r0 + mov r1, #0x0 + mov r2, #0x700 + bl MI_CpuFill8 + mov r0, r10 + bl FUN_02095D9C +_020961B0: ; 0x020961B0 + cmp r0, #0x0 + addeq sp, sp, #0x14 + ldreq r0, _020964B4 ; =0xFFFFD8EF + ldmeqia sp!, {r4-r11,pc} +_020961C0: ; 0x020961C0 + ldr r1, _020964B8 ; =0x0000A001 + add r0, r10, #0x500 + bl MATHi_CRC16InitTableRev + mov r0, r10 + bl FUN_02095D68 +_020961D4: ; 0x020961D4 + cmp r0, #0x0 + addeq sp, sp, #0x14 + ldreq r0, _020964B4 ; =0xFFFFD8EF + ldmeqia sp!, {r4-r11,pc} +_020961E4: ; 0x020961E4 + add r0, sp, #0x0 + mov r1, #0x0 + mov r2, #0x10 + bl MI_CpuFill8 + mov r8, r10 + mov r7, r10 + mov r9, #0x0 + add r11, sp, #0x0 + add r6, r10, #0x500 + mov r4, #0x1 + mov r5, #0xfe +_02096210: + mov r0, r6 + mov r1, r8 + mov r2, r5 + bl MATH_CalcCRC16 + add r1, r10, r9, lsl #0x8 + ldrh r1, [r1, #0xfe] + cmp r0, r1 + bne _02096240 + mov r0, r7 + bl FUN_02096090 +_02096238: ; 0x02096238 + cmp r0, #0x0 + strne r4, [r11, r9, lsl #0x2] +_02096240: + add r9, r9, #0x1 + cmp r9, #0x3 + add r8, r8, #0x100 + add r7, r7, #0x100 + blt _02096210 + add r0, r10, #0x500 + add r1, r10, #0x300 + mov r2, #0xfe + bl MATH_CalcCRC16 + add r1, r10, #0x300 + ldrh r1, [r1, #0xfe] + cmp r0, r1 + moveq r0, #0x1 + ldr r1, [sp, #0x0] + streq r0, [sp, #0xc] + cmp r1, #0x0 + beq _020962BC + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020962BC + ldr r0, [sp, #0x8] + cmp r0, #0x0 + beq _020962BC + ldr r0, [sp, #0xc] + cmp r0, #0x0 + beq _020962BC + add r0, r10, #0xf0 + bl FUN_02095C24 + add sp, sp, #0x14 + mov r0, #0x0 + ldmia sp!, {r4-r11,pc} +_020962BC: + cmp r1, #0x0 + bne _0209630C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + bne _0209630C + ldr r0, [sp, #0x8] + cmp r0, #0x0 + bne _0209630C + ldr r0, [sp, #0xc] + cmp r0, #0x0 + bne _0209630C + mov r0, r10 + bl FUN_02096010 + mov r0, r10 + bl FUN_02095C3C +_020962F8: ; 0x020962F8 + cmp r0, #0x0 + movne r0, #0x0 + add sp, sp, #0x14 + ldreq r0, _020964BC ; =0xFFFFD8F0 + ldmia sp!, {r4-r11,pc} +_0209630C: + cmp r1, #0x0 + beq _02096320 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + bne _0209635C +_02096320: + ldr r0, [sp, #0x8] + cmp r0, #0x0 + beq _02096338 + ldr r0, [sp, #0xc] + cmp r0, #0x0 + bne _0209635C +_02096338: + mov r0, r10 + bl FUN_02096010 + mov r0, r10 + bl FUN_02095C3C +_02096348: ; 0x02096348 + cmp r0, #0x0 + movne r0, #0x0 + add sp, sp, #0x14 + ldreq r0, _020964BC ; =0xFFFFD8F0 + ldmia sp!, {r4-r11,pc} +_0209635C: + cmp r1, #0x0 + bne _02096394 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + bne _02096394 + mov r0, r10 + bl FUN_02096010 + mov r0, r10 + bl FUN_02095C3C +_02096380: ; 0x02096380 + cmp r0, #0x0 + ldrne r0, _020964C0 ; =0xFFFFD8ED + add sp, sp, #0x14 + ldreq r0, _020964BC ; =0xFFFFD8F0 + ldmia sp!, {r4-r11,pc} +_02096394: + cmp r1, #0x0 + bne _020963C4 + mov r0, r10 + mov r1, #0x0 + bl FUN_02095FDC + add r0, r10, #0x1f0 + add r1, r10, #0xf0 + mov r2, #0xe + bl MI_CpuCopy8 + ldrb r0, [r10, #0x1ef] + strb r0, [r10, #0xef] + b _020963F4 +_020963C4: + ldr r0, [sp, #0x4] + cmp r0, #0x0 + bne _020963F4 + mov r0, r10 + mov r1, #0x1 + bl FUN_02095FDC + add r0, r10, #0xf0 + add r1, r10, #0x1f0 + mov r2, #0xe + bl MI_CpuCopy8 + ldrb r0, [r10, #0xef] + strb r0, [r10, #0x1ef] +_020963F4: + add r0, r10, #0xf0 + bl FUN_02095C24 + ldr r0, [sp, #0x8] + cmp r0, #0x0 + bne _02096414 + mov r0, r10 + mov r1, #0x2 + bl FUN_02095FDC +_02096414: + ldr r0, [sp, #0xc] + cmp r0, #0x0 + bne _02096430 + add r1, r10, #0x300 + mov r0, #0x0 + mov r2, #0x100 + bl MIi_CpuClear16 +_02096430: + mov r4, #0x0 + mov r1, r4 + add r0, sp, #0x0 + add r5, r10, #0xef + mov r6, #0x1 +_02096444: + ldr r2, [r0, r1, lsl #0x2] + cmp r2, #0x0 + bne _0209647C + ldrb r2, [r10, #0xef] + mov r7, r6, lsl r1 + ands r2, r2, r7 + beq _0209647C + ldrb r3, [r5, #0x0] + mvn r2, r7 + mov r4, r6 + and r2, r3, r2 + strb r2, [r5, #0x0] + ldrb r2, [r10, #0xef] + strb r2, [r10, #0x1ef] +_0209647C: + add r1, r1, #0x1 + cmp r1, #0x3 + blt _02096444 + mov r0, r10 + bl FUN_02095C3C +_02096490: ; 0x02096490 + cmp r0, #0x0 + addeq sp, sp, #0x14 + ldreq r0, _020964BC ; =0xFFFFD8F0 + ldmeqia sp!, {r4-r11,pc} +_020964A0: ; 0x020964A0 + cmp r4, #0x0 + ldrne r0, _020964C4 ; =0xFFFFD8EE + moveq r0, #0x0 + add sp, sp, #0x14 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020964B4: .word 0xFFFFD8EF +_020964B8: .word 0x0000A001 +_020964BC: .word 0xFFFFD8F0 +_020964C0: .word 0xFFFFD8ED +_020964C4: .word 0xFFFFD8EE + + arm_func_start FUN_020964C8 +FUN_020964C8: + stmdb sp!, {lr} + sub sp, sp, #0x14 + add r0, sp, #0x0 + bl FUN_02095EC8 + ldr r2, [sp, #0x8] + ldr r1, [sp, #0xc] + mov r0, #0x0 + cmp r1, r0 + cmpeq r2, r0 + bne _0209650C + ldr r1, [sp, #0x4] + ldr r2, [sp, #0x0] + cmp r1, r0 + cmpeq r2, r0 + addeq sp, sp, #0x14 + moveq r0, #0x1 + ldmeqia sp!, {pc} +_0209650C: + mov r0, #0x0 + add sp, sp, #0x14 + ldmia sp!, {pc} + + arm_func_start FUN_02096518 +FUN_02096518: ; 0x02096518 + stmdb sp!, {r4,lr} + sub sp, sp, #0x18 + mov r4, r0 + add r0, sp, #0x0 + bl FUN_02095EC8 +_0209652C: ; 0x0209652C + add r0, sp, #0x0 + ldmia r0, {r2-r3} + stmia r4, {r2-r3} + add r1, sp, #0x8 + add r0, r4, #0x8 + ldmia r1, {r2-r3} + stmia r0, {r2-r3} + ldr r2, [sp, #0x0] + ldr r1, [sp, #0x4] + mov r0, #0x0 + cmp r1, r0 + cmpeq r2, r0 + streq r0, [r4, #0x10] + movne r0, #0x1 + strne r0, [r4, #0x10] + add sp, sp, #0x18 + ldmia sp!, {r4,pc} + + arm_func_start FUN_02096570 +FUN_02096570: ; 0x02096570 + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x28 + add r2, sp, #0x0 + mov r1, #0x0 + strb r1, [r2, #0x0] + strb r1, [r2, #0x1] + strb r1, [r2, #0x2] + strb r1, [r2, #0x3] + strb r1, [r2, #0x4] + mov r5, r0 + strb r1, [r2, #0x5] + bl FUN_02095EC8 + bl RTC_Init + add r0, sp, #0x8 + bl RTC_GetDate +_020965AC: ; 0x020965AC + cmp r0, #0x0 + addne sp, sp, #0x28 + movne r0, #0x0 + ldmneia sp!, {r4-r10,pc} +_020965BC: ; 0x020965BC + add r0, sp, #0x18 + bl RTC_GetTime +_020965C4: ; 0x020965C4 + cmp r0, #0x0 + addne sp, sp, #0x28 + movne r0, #0x0 + ldmneia sp!, {r4-r10,pc} +_020965D4: ; 0x020965D4 + add r0, sp, #0x8 + add r1, sp, #0x18 + bl RTC_ConvertDateTimeToSecond + mov r4, r0 + mov r0, #0x0 + subs r2, r4, r0 + sbcs r2, r1, r0 + addlt sp, sp, #0x28 + ldmltia sp!, {r4-r10,pc} +_020965F8: ; 0x020965F8 + bl OS_IsTickAvailable +_020965FC: ; 0x020965FC + cmp r0, #0x0 + beq _0209660C + ldr r0, _02096700 ; =OS_GetTick + adds r4, r4, r0 +_0209660C: + add r0, sp, #0x0 + bl OS_GetMacAddress + ldrb r1, [sp, #0x0] + ldr r6, _02096704 ; =0x5D588B65 + ldr r7, _02096708 ; =0x00269EC3 + ldrb r0, [sp, #0x1] + mla r9, r4, r6, r7 + mov r1, r1, lsl #0x10 + orr r1, r1, r0, lsl #0x8 + ldrb r2, [sp, #0x2] + ldr r0, _0209670C ; =0x000009BF + ldrb r8, [sp, #0x3] + orr r1, r2, r1 + cmp r1, r0 + movne r1, #0x1 + mov r2, r9, lsr #0x10 + mov r0, #0x3e8 + mul r3, r2, r0 + mov r2, r3, lsr #0x10 + mov r3, r8, lsl #0x10 + ldrb r4, [sp, #0x4] + ldrb r0, [sp, #0x5] + mov r8, #0x0 + orr r10, r3, r4, lsl #0x8 + strh r2, [r5, #0x10] + str r8, [r5, #0x8] + str r8, [r5, #0xc] + moveq r1, #0x0 + ldr r2, [r5, #0xc] + ldr r3, [r5, #0x8] + cmp r2, r8 + cmpeq r3, r8 + and r4, r1, #0xff + orr r10, r0, r10 + bne _020966F4 +_02096698: + mla r9, r6, r9, r7 + b _020966A4 +_020966A0: + mla r9, r6, r9, r7 +_020966A4: + cmp r9, #0x0 + beq _020966A0 + ldrh r1, [r5, #0x12] + mov r0, r9, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r1, r0 + beq _020966A0 + strh r0, [r5, #0x12] + ldrh r0, [r5, #0x12] + mov r1, r10 + mov r2, r4 + mov r3, r8 + bl FUN_02096988 + str r0, [r5, #0x8] + str r1, [r5, #0xc] + ldr r0, [r5, #0xc] + ldr r1, [r5, #0x8] + cmp r0, r8 + cmpeq r1, r8 + beq _02096698 +_020966F4: + mov r0, #0x1 + add sp, sp, #0x28 + ldmia sp!, {r4-r10,pc} + .balign 4 +_02096700: .word OS_GetTick +_02096704: .word 0x5D588B65 +_02096708: .word 0x00269EC3 +_0209670C: .word 0x000009BF + + arm_func_start FUN_02096710 +FUN_02096710: ; 0x02096710 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x14 + mov r5, r0 + add r0, sp, #0x0 + mov r4, r1 + bl FUN_02095EC8 + add r12, r5, #0x8 + ldmia r12, {r2-r3} + stmia r5, {r2-r3} + add r1, sp, #0x8 + ldmia r1, {r2-r3} + mov r0, r5 + mov r1, r4 + stmia r12, {r2-r3} + bl FUN_02095DE0 +_0209674C: ; 0x0209674C + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x14 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_02096760 +FUN_02096760: ; 0x02096760 + stmdb sp!, {r4,lr} + sub sp, sp, #0x18 + mov r4, r0 + add r0, sp, #0x0 + bl FUN_020967A4 +_02096774: ; 0x02096774 + cmp r0, #0x0 + addeq sp, sp, #0x18 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_02096784: ; 0x02096784 + add r0, sp, #0x0 + mov r1, r4 + bl FUN_02095DE0 +_02096790: ; 0x02096790 + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x18 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020967A4 +FUN_020967A4: + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x28 + mov r8, r0 + bl FUN_02095EC8 + bl RTC_Init + add r0, sp, #0x8 + bl RTC_GetDate +_020967C0: ; 0x020967C0 + cmp r0, #0x0 + addne sp, sp, #0x28 + movne r0, #0x0 + ldmneia sp!, {r4-r10,pc} +_020967D0: ; 0x020967D0 + add r0, sp, #0x18 + bl RTC_GetTime +_020967D8: ; 0x020967D8 + cmp r0, #0x0 + addne sp, sp, #0x28 + movne r0, #0x0 + ldmneia sp!, {r4-r10,pc} +_020967E8: ; 0x020967E8 + add r0, sp, #0x8 + add r1, sp, #0x18 + bl RTC_ConvertDateTimeToSecond + mov r4, r0 + mov r0, #0x0 + subs r2, r4, r0 + sbcs r2, r1, r0 + addlt sp, sp, #0x28 + ldmltia sp!, {r4-r10,pc} +_0209680C: ; 0x0209680C + bl OS_IsTickAvailable +_02096810: ; 0x02096810 + cmp r0, #0x0 + beq _02096820 + ldr r0, _02096978 ; =OS_GetTick + adds r4, r4, r0 +_02096820: + add r0, sp, #0x0 + bl OS_GetMacAddress + ldrb r1, [sp, #0x0] + ldr sb, _0209697C ; =0x5D588B65 + ldr sl, _02096980 ; =0x00269EC3 + ldrb r0, [sp, #0x1] + mla r5, r4, r9, r10 + mov r1, r1, lsl #0x10 + orr r1, r1, r0, lsl #0x8 + ldrb r2, [sp, #0x2] + ldr r0, _02096984 ; =0x000009BF + ldrb r6, [sp, #0x3] + orr r1, r2, r1 + cmp r1, r0 + movne r1, #0x1 + moveq r1, #0x0 + mov r2, r5, lsr #0x10 + mov r0, #0x3e8 + mul r3, r2, r0 + mov r2, r3, lsr #0x10 + ldrb r0, [sp, #0x5] + ldrb r4, [sp, #0x4] + mov r3, r6, lsl #0x10 + and r7, r1, #0xff + orr r3, r3, r4, lsl #0x8 + strh r2, [r8, #0x10] + mov r4, #0x0 + str r4, [r8, #0x0] + str r4, [r8, #0x4] + ldrh r2, [r8, #0x12] + orr r6, r0, r3 + cmp r2, #0x0 + bne _02096910 + str r4, [r8, #0x8] + str r4, [r8, #0xc] + ldr r0, [r8, #0xc] + ldr r1, [r8, #0x8] + cmp r0, r4 + cmpeq r1, r4 + bne _0209696C +_020968C0: + mul r0, r5, r9 + adds r5, r0, r10 + bne _020968D8 +_020968CC: + mul r0, r5, r9 + adds r5, r0, r10 + beq _020968CC +_020968D8: + strh r5, [r8, #0x12] + ldrh r0, [r8, #0x12] + mov r1, r6 + mov r2, r7 + mov r3, r4 + bl FUN_02096988 + str r0, [r8, #0x8] + str r1, [r8, #0xc] + ldr r0, [r8, #0xc] + ldr r1, [r8, #0x8] + cmp r0, r4 + cmpeq r1, #0x0 + beq _020968C0 + b _0209696C +_02096910: + str r4, [r8, #0x8] + str r4, [r8, #0xc] + ldr r0, [r8, #0xc] + ldr r1, [r8, #0x8] + cmp r0, r4 + cmpeq r1, r4 + bne _0209696C + add r5, r8, #0x12 +_02096930: + ldrh r0, [r5, #0x0] + mov r1, r6 + mov r2, r7 + add r0, r0, #0x1 + strh r0, [r5, #0x0] + ldrh r0, [r8, #0x12] + mov r3, r4 + bl FUN_02096988 + str r0, [r8, #0x8] + str r1, [r8, #0xc] + ldr r0, [r8, #0xc] + ldr r1, [r8, #0x8] + cmp r0, r4 + cmpeq r1, r4 + beq _02096930 +_0209696C: + mov r0, #0x1 + add sp, sp, #0x28 + ldmia sp!, {r4-r10,pc} + .balign 4 +_02096978: .word OS_GetTick +_0209697C: .word 0x5D588B65 +_02096980: .word 0x00269EC3 +_02096984: .word 0x000009BF + + arm_func_start FUN_02096988 +FUN_02096988: ; 0x02096988 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x14 + mov lr, #0x0 + and r12, lr, #0x0 + mvn r5, #0xff000000 + ldr r4, _02096B08 ; =0x0000FFFF + and r2, r2, #0x1 + mov r6, r12, lsl #0x2 + and r3, r3, #0x3 + and r5, r1, r5 + orr r1, r3, r2, lsl #0x2 + orr r6, r6, r2, lsr #0x1e + mov r7, r12, lsl #0x3 + and r2, r0, r4 + orr r0, r1, r5, lsl #0x3 + orr r1, r0, r2, lsl #0x1b + mov r3, r12, lsl #0x1b + orr r3, r3, r2, lsr #0x5 + orr r7, r7, r5, lsr #0x1d + orr r0, r12, r6 + orr r0, r7, r0 + orr r0, r3, r0 + add r2, sp, #0x0 + str r1, [sp, #0x0] + str r0, [sp, #0x4] +_020969EC: + ldrb r0, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, #0x6 + eor r0, r0, #0xd6 + strb r0, [r2], #0x1 + blt _020969EC + ldr r2, _02096B0C ; =0x020FF580 + add r5, sp, #0x0 + mov r4, #0x0 +_02096A10: + ldrb r3, [r5, #0x0] + add r4, r4, #0x1 + cmp r4, #0x5 + mov r0, r3, asr #0x4 + and r1, r0, #0xf + and r0, r3, #0xf + ldrb r1, [r2, r1] + ldrb r0, [r2, r0] + orr r0, r0, r1, lsl #0x4 + strb r0, [r5], #0x1 + blt _02096A10 + add r0, sp, #0x0 + add r1, sp, #0x8 + mov r2, #0x8 + bl MI_CpuCopy8 + ldr r4, _02096B10 ; =0x020FF578 + add r5, sp, #0x8 + mov r3, #0x0 + add r1, sp, #0x0 +_02096A5C: + ldrb r2, [r5, #0x0] + ldrb r0, [r4, #0x0] + add r3, r3, #0x1 + cmp r3, #0x5 + strb r2, [r1, r0] + add r5, r5, #0x1 + add r4, r4, #0x1 + blt _02096A5C + ldrb r2, [sp, #0x5] + mov r0, #0x0 + ldr r3, [sp, #0x0] + and r2, r2, #0x7 + strb r0, [sp, #0x7] + strb r0, [sp, #0x6] + strb r2, [sp, #0x5] + ldr r2, [sp, #0x4] + mov r4, r3, lsl #0x1 + mov r2, r2, lsl #0x1 + orr r2, r2, r3, lsr #0x1f + str r2, [sp, #0x4] + ldrb r2, [sp, #0x5] + str r4, [sp, #0x0] + ldrb r3, [sp, #0x0] + mov r2, r2, asr #0x3 + and r2, r2, #0x1 + orr r2, r3, r2 + strb r2, [sp, #0x0] +_02096AC8: + ldrb r2, [r1, #0x0] + add r0, r0, #0x1 + cmp r0, #0x6 + eor r2, r2, #0x67 + strb r2, [r1], #0x1 + blt _02096AC8 + ldrb r0, [sp, #0x5] + mov r1, #0x0 + strb r1, [sp, #0x7] + and r0, r0, #0x7 + strb r1, [sp, #0x6] + strb r0, [sp, #0x5] + ldr r0, [sp, #0x0] + ldr r1, [sp, #0x4] + add sp, sp, #0x14 + ldmia sp!, {r4-r7,pc} + .balign 4 +_02096B08: .word 0x0000FFFF +_02096B0C: .word 0x020FF580 +_02096B10: .word 0x020FF578 + + arm_func_start FUN_02096B14 +FUN_02096B14: ; 0x02096B14 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldr r0, _02096B74 ; =0x02000B8C + mov r4, #0x0 + bl FUN_02000B60 + mov r0, r6 + bl FUN_02096190 + mov r5, r0 + bl FUN_020964C8 +_02096B38: ; 0x02096B38 + cmp r0, #0x0 + beq _02096B4C + mov r0, r6 + bl FUN_02096760 + mov r4, #0x1 +_02096B4C: + cmp r5, #0x0 + bge _02096B64 + cmp r4, #0x0 + movne r0, #0x2 + moveq r0, #0x3 + ldmia sp!, {r4-r6,pc} +_02096B64: + cmp r4, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + ldmia sp!, {r4-r6,pc} + .balign 4 +_02096B74: .word 0x02000B8C + + arm_func_start FUN_02096B78 +FUN_02096B78: ; 0x02096B78 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r7, r0 + bl FUN_020974C8 + mov r5, r0 + mov r0, r4 + bl FUN_020974C8 +_02096B98: ; 0x02096B98 + cmp r5, r0 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r7,pc} +_02096BA8: ; 0x02096BA8 + cmp r5, #0x3 + bne _02096BD8 + mov r0, r7 + bl FUN_02097544 + mov r5, r0 + mov r0, r4 + bl FUN_02097544 +_02096BC4: ; 0x02096BC4 + cmp r5, r0 + moveq r0, #0x1 + add sp, sp, #0x4 + movne r0, #0x0 + ldmia sp!, {r4-r7,pc} +_02096BD8: + cmp r5, #0x1 + bne _02096C34 + mov r0, r7 + bl FUN_02097568 + mov r5, r0 + mov r6, r1 + mov r0, r4 + bl FUN_02097568 + cmp r6, r1 + cmpeq r5, r0 + bne _02096C28 + mov r0, r7 + bl FUN_02097560 + mov r5, r0 + mov r0, r4 + bl FUN_02097560 +_02096C18: ; 0x02096C18 + cmp r5, r0 + addeq sp, sp, #0x4 + moveq r0, #0x1 + ldmeqia sp!, {r4-r7,pc} +_02096C28: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,pc} +_02096C34: + cmp r5, #0x2 + bne _02096C6C + mov r0, r7 + bl FUN_0209754C + mov r5, r0 + mov r6, r1 + mov r0, r4 + bl FUN_0209754C + cmp r6, r1 + cmpeq r5, r0 + moveq r0, #0x1 + add sp, sp, #0x4 + movne r0, #0x0 + ldmia sp!, {r4-r7,pc} +_02096C6C: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} +_02096C78: ; 0x02096C78 + ldr ip, _02096C8C ; =FUN_02097218 + mov r3, r0 + mov r0, r1 + ldr r1, [r3, #0x24] + bx r12 + .balign 4 +_02096C8C: .word FUN_02097218 + + arm_func_start FUN_02096C90 +FUN_02096C90: ; 0x02096C90 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r5, r0 + mov r1, #0x0 + mov r2, #0xc + bl MI_CpuFill8 + mov r0, r5 + mov r1, r4 + bl FUN_020974F4 + mov r0, r5 + mov r1, #0x3 + bl FUN_02097440 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_02096CCC +FUN_02096CCC: ; 0x02096CCC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r5, r0 + mov r0, r4 + mov r1, #0x0 + mov r2, #0xc + bl MI_CpuFill8 + mov r0, r5 + bl FUN_0209702C +_02096CF4: ; 0x02096CF4 + cmp r0, #0x0 + addeq r0, r5, #0x4 + ldmeqia r0, {r0-r2} + addeq sp, sp, #0x4 + stmeqia r4, {r0-r2} + ldmeqia sp!, {r4-r5,pc} +_02096D0C: ; 0x02096D0C + ldr r1, [r5, #0x1c] + mov r0, r4 + bl FUN_020974F4 + mov r0, r4 + mov r1, #0x3 + bl FUN_02097440 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_02096D2C +FUN_02096D2C: ; 0x02096D2C + stmdb sp!, {r4-r6,lr} + mov r5, r1 + mov r4, r2 + mov r6, r0 + mov r1, #0x0 + mov r2, #0xc + bl MI_CpuFill8 + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_020974FC + mov r0, r6 + mov r1, #0x2 + bl FUN_02097440 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_02096D68 +FUN_02096D68: ; 0x02096D68 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r3, r0 + ldr r0, [r3, #0x1c] + mov r2, #0x0 + mov r1, r2 + cmp r0, #0x0 + beq _02096D94 + ldr r1, [r3, #0x24] + bl FUN_020973D0 + mov r2, r0 +_02096D94: + mov r0, r2 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_02096DA0 +FUN_02096DA0: ; 0x02096DA0 + stmdb sp!, {r4-r6,lr} + mov r4, r1 + mov r6, r0 + mov r0, r4 + bl FUN_020974C8 + cmp r0, #0x1 + beq _02096E14 + cmp r0, #0x2 + beq _02096DD0 + cmp r0, #0x3 + beq _02096E08 + b _02096E1C +_02096DD0: + mov r0, r4 + bl FUN_0209754C + ldr r2, [r6, #0x24] + mov r4, r0 + mov r5, r1 + bl FUN_02097344 +_02096DE8: ; 0x02096DE8 + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_02096DF4: ; 0x02096DF4 + ldr r2, [r6, #0x24] + mov r0, r4 + mov r1, r5 + bl FUN_02097324 + ldmia sp!, {r4-r6,pc} +_02096E08: + mov r0, r4 + bl FUN_02097544 + ldmia sp!, {r4-r6,pc} +_02096E14: + mvn r0, #0x0 + ldmia sp!, {r4-r6,pc} +_02096E1C: + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_02096E24 +FUN_02096E24: ; 0x02096E24 + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020974C8 + cmp r0, #0x2 + movne r0, #0x0 + movne r1, r0 + ldmneia sp!, {r4,pc} +_02096E40: ; 0x02096E40 + mov r0, r4 + bl FUN_0209754C + ldmia sp!, {r4,pc} + + arm_func_start FUN_02096E4C +FUN_02096E4C: ; 0x02096E4C + stmdb sp!, {r4,lr} + sub sp, sp, #0x400 + mov r4, r0 + ldr r1, [r4, #0x20] + add r0, sp, #0x0 + bic r2, r1, #0x1 + ldr r1, _02096E8C ; =0xEDB88320 + str r2, [r4, #0x20] + bl MATHi_CRC32InitTableRev +_02096E70: ; 0x02096E70 + add r0, sp, #0x0 + mov r1, r4 + mov r2, #0x3c + bl MATH_CalcCRC32 + str r0, [r4, #0x3c] + add sp, sp, #0x400 + ldmia sp!, {r4,pc} + .balign 4 +_02096E8C: .word 0xEDB88320 + + arm_func_start thunk_FUN_02096e4c +thunk_FUN_02096e4c: ; 0x02096E90 + ldr ip, _02096E98 ; =FUN_02096E4C + bx r12 + .balign 4 +_02096E98: .word FUN_02096E4C + + arm_func_start FUN_02096E9C +FUN_02096E9C: ; 0x02096E9C + ldr r0, [r0, #0x20] + and r0, r0, #0x1 + cmp r0, #0x1 + moveq r0, #0x1 + movne r0, #0x0 + bx lr + + arm_func_start FUN_02096EB4 +FUN_02096EB4: ; 0x02096EB4 + ldr ip, _02096EBC ; =FUN_02096E9C + bx r12 + .balign 4 +_02096EBC: .word FUN_02096E9C + + arm_func_start FUN_02096EC0 +FUN_02096EC0: ; 0x02096EC0 + stmdb sp!, {r4,lr} + sub sp, sp, #0x400 + mov r4, r0 + add r3, r4, #0x10 + mov r12, r2 + ldmia r1, {r0-r2} + stmia r3, {r0-r2} + ldr r1, _02096F14 ; =0xEDB88320 + add r0, sp, #0x0 + str r12, [r4, #0x1c] + bl MATHi_CRC32InitTableRev +_02096EEC: ; 0x02096EEC + add r0, sp, #0x0 + mov r1, r4 + mov r2, #0x3c + bl MATH_CalcCRC32 + str r0, [r4, #0x3c] + ldr r0, [r4, #0x20] + orr r0, r0, #0x1 + str r0, [r4, #0x20] + add sp, sp, #0x400 + ldmia sp!, {r4,pc} + .balign 4 +_02096F14: .word 0xEDB88320 + + arm_func_start FUN_02096F18 +FUN_02096F18: ; 0x02096F18 + stmdb sp!, {r4,lr} + sub sp, sp, #0x18 + mov r4, r0 + add r0, r4, #0x10 + bl FUN_020974C8 +_02096F2C: ; 0x02096F2C + cmp r0, #0x0 + addeq sp, sp, #0x18 + moveq r0, #0x1 + ldmeqia sp!, {r4,pc} +_02096F3C: ; 0x02096F3C + add r0, sp, #0x0 + bl FUN_02096518 + ldr r0, [sp, #0x10] + cmp r0, #0x0 + addeq sp, sp, #0x18 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_02096F58: ; 0x02096F58 + add r0, r4, #0x10 + bl FUN_02097568 + ldr r2, [sp, #0x4] + ldr r3, [sp, #0x0] + cmp r2, r1 + cmpeq r3, r0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x18 + ldmia sp!, {r4,pc} + + arm_func_start FUN_02096F80 +FUN_02096F80: ; 0x02096F80 + stmdb sp!, {r4,lr} + mov r4, r0 + add r0, r4, #0x10 + bl FUN_0209703C +_02096F90: ; 0x02096F90 + cmp r0, #0x0 + beq _02096FA8 + ldr r0, [r4, #0x1c] + cmp r0, #0x0 + movgt r0, #0x1 + ldmgtia sp!, {r4,pc} +_02096FA8: + mov r0, #0x0 + ldmia sp!, {r4,pc} + + arm_func_start FUN_02096FB0 +FUN_02096FB0: ; 0x02096FB0 + stmdb sp!, {r4,lr} + sub sp, sp, #0x400 + ldr r1, _02096FF0 ; =0xEDB88320 + mov r4, r0 + add r0, sp, #0x0 + bl MATHi_CRC32InitTableRev +_02096FC8: ; 0x02096FC8 + add r0, sp, #0x0 + mov r1, r4 + mov r2, #0x3c + bl MATH_CalcCRC32 + ldr r1, [r4, #0x3c] + cmp r0, r1 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x400 + ldmia sp!, {r4,pc} + .balign 4 +_02096FF0: .word 0xEDB88320 + + arm_func_start thunk_FUN_02097190 +thunk_FUN_02097190: ; 0x02096FF4 + ldr ip, _02096FFC ; =FUN_02097190 + bx r12 + .balign 4 +_02096FFC: .word FUN_02097190 + + arm_func_start FUN_02097000 +FUN_02097000: ; 0x02097000 + ldr ip, _02097008 ; =FUN_0209700C + bx r12 + .balign 4 +_02097008: .word FUN_0209700C + + arm_func_start FUN_0209700C +FUN_0209700C: ; 0x0209700C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FUN_020974C8 +_02097018: ; 0x02097018 + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_0209702C +FUN_0209702C: + ldr ip, _02097038 ; =FUN_0209703C + add r0, r0, #0x10 + bx r12 + .balign 4 +_02097038: .word FUN_0209703C + + arm_func_start FUN_0209703C +FUN_0209703C: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FUN_020974C8 + cmp r0, #0x1 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_0209705C +FUN_0209705C: ; 0x0209705C + stmdb sp!, {r4,lr} + sub sp, sp, #0x18 + mov r4, r0 + add r0, sp, #0x0 + bl FUN_02096518 + ldr r0, [sp, #0x10] + cmp r0, #0x0 + beq _020970A4 + mov r0, r4 + bl FUN_02097568 + ldr r2, [sp, #0x4] + ldr r3, [sp, #0x0] + cmp r2, r1 + cmpeq r3, r0 + moveq r0, #0x1 + add sp, sp, #0x18 + movne r0, #0x0 + ldmia sp!, {r4,pc} +_020970A4: + mov r0, r4 + bl FUN_02097568 + ldr r2, [sp, #0xc] + ldr r3, [sp, #0x8] + cmp r2, r1 + cmpeq r3, r0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x18 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020970CC +FUN_020970CC: ; 0x020970CC + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x38 + mov r6, r0 + add r0, sp, #0x14 + bl OS_GetLowEntropyData + mov r3, #0x1 + add r2, sp, #0x14 +_020970E8: + add r0, r2, r3, lsl #0x2 + ldr r1, [r2, r3, lsl #0x2] + ldr r0, [r0, #-0x4] + eor r0, r1, r0 + str r0, [r2, r3, lsl #0x2] + add r3, r3, #0x1 + cmp r3, #0x8 + blo _020970E8 + add r0, sp, #0x0 + ldr r5, [sp, #0x30] + mov r4, #0x0 + bl FUN_02096518 + ldr r0, [sp, #0x10] + cmp r0, #0x0 + beq _02097138 + ldr r1, [sp, #0x0] + ldr r2, [sp, #0x4] + mov r0, r6 + bl FUN_02097510 + b _02097148 +_02097138: + ldr r1, [sp, #0x8] + ldr r2, [sp, #0xc] + mov r0, r6 + bl FUN_02097510 +_02097148: + ldr r0, _02097184 ; =0x6C078965 + ldr r1, _02097188 ; =0x5D588B65 + umull r3, r2, r5, r0 + mla r2, r5, r1, r2 + ldr r1, _0209718C ; =0x00269EC3 + mla r2, r4, r0, r2 + adds r0, r3, r1 + mov r0, r6 + adc r1, r2, #0x0 + bl FUN_02097508 + mov r0, r6 + mov r1, #0x1 + bl FUN_02097440 + add sp, sp, #0x38 + ldmia sp!, {r4-r6,pc} + .balign 4 +_02097184: .word 0x6C078965 +_02097188: .word 0x5D588B65 +_0209718C: .word 0x00269EC3 + + arm_func_start FUN_02097190 +FUN_02097190: ; 0x02097190 + stmdb sp!, {r4-r5,lr} + ldr ip, _02097210 ; =0x00000404 + sub sp, sp, r12 + mov r4, r1 + mov r1, #0x0 + mov r2, #0x40 + mov r5, r0 + bl MI_CpuFill8 + mov r0, #0x40 + str r0, [r5, #0x0] + mov r0, #0x0 + str r0, [r5, #0x1c] + add r0, r5, #0x4 + str r4, [r5, #0x24] + bl FUN_020970CC + add r0, r5, #0x10 + mov r1, #0x0 + bl FUN_02097440 + ldr r1, _02097214 ; =0xEDB88320 + add r0, sp, #0x0 + bl MATHi_CRC32InitTableRev +_020971E4: ; 0x020971E4 + add r0, sp, #0x0 + mov r1, r5 + mov r2, #0x3c + bl MATH_CalcCRC32 + str r0, [r5, #0x3c] + ldr r0, [r5, #0x20] + orr r0, r0, #0x1 + str r0, [r5, #0x20] + ldr ip, _02097210 ; =0x00000404 + add sp, sp, r12 + ldmia sp!, {r4-r5,pc} + .balign 4 +_02097210: .word 0x00000404 +_02097214: .word 0xEDB88320 + + arm_func_start FUN_02097218 +FUN_02097218: ; 0x02097218 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x40 + mov r6, r0 + mov r4, r1 + mov r5, r2 + bl FUN_02097568 + add r3, sp, #0x14 + mov r2, #0x2b + bl FUN_020972A8 + mov r0, r6 + bl FUN_02097560 + mov r1, #0x0 + mov r2, #0x20 + add r3, sp, #0x29 + bl FUN_020972A8 + mov r1, r4, lsr #0x18 + and r1, r1, #0xff + str r1, [sp, #0x0] + mov r1, r4, lsr #0x10 + and r1, r1, #0xff + str r1, [sp, #0x4] + mov r1, r4, lsr #0x8 + and r1, r1, #0xff + str r1, [sp, #0x8] + and r1, r4, #0xff + str r1, [sp, #0xc] + add r2, sp, #0x29 + str r2, [sp, #0x10] + ldr r2, _020972A4 ; =0x0210618C + mov r0, r5 + mov r1, #0x15 + add r3, sp, #0x14 + bl OS_SNPrintf + add sp, sp, #0x40 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020972A4: .word 0x0210618C + + arm_func_start FUN_020972A8 +FUN_020972A8: ; 0x020972A8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr lr, _0209731C ; =0x66666667 + add r4, r2, #0x4 + smull r12, r2, lr, r4 + mov r2, r2, asr #0x1 + mov r12, r4, lsr #0x1f + add r2, r12, r2 + cmp r2, #0x0 + ldr r6, _02097320 ; =0x0210619C + mov r7, #0x0 + ble _0209730C + add r4, r3, r2 + sub r4, r4, #0x1 + mov r12, #0x1f +_020972E4: + and r5, r0, r12 + ldrsb r5, [r6, r5] + mov r0, r0, lsr #0x5 + mov lr, r1, lsr #0x5 + strb r5, [r4, -r7] + add r7, r7, #0x1 + orr r0, r0, r1, lsl #0x1b + mov r1, lr + cmp r7, r2 + blt _020972E4 +_0209730C: + mov r0, #0x0 + strb r0, [r3, r2] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_0209731C: .word 0x66666667 +_02097320: .word 0x0210619C + + arm_func_start FUN_02097324 +FUN_02097324: ; 0x02097324 + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_02097344 +_02097330: ; 0x02097330 + cmp r0, #0x0 + mvnne r0, #0x0 + andne r0, r4, r0 + moveq r0, #0x0 + ldmia sp!, {r4,pc} + + arm_func_start FUN_02097344 +FUN_02097344: + stmdb sp!, {r4,lr} + sub sp, sp, #0x108 + mov r4, r1 + and r3, r4, #0x0 + mov r1, #0x0 + and r12, r0, #0x80000000 + cmp r3, r1 + cmpeq r12, r1 + addne sp, sp, #0x108 + movne r0, r1 + ldmneia sp!, {r4,pc} +_02097370: ; 0x02097370 + str r0, [sp, #0x0] + add r0, sp, #0x8 + mov r1, #0x7 + str r2, [sp, #0x4] + bl MATHi_CRC8InitTable + add r0, sp, #0x8 + add r1, sp, #0x0 + mov r2, #0x8 + bl MATH_CalcCRC8 + and r2, r0, #0x7f + mov r1, r2, asr #0x1f + mov r0, #0x0 + cmp r1, r0 + cmpeq r2, r4 + moveq r0, #0x1 + add sp, sp, #0x108 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020973B4 +FUN_020973B4: ; 0x020973B4 + ldr ip, _020973CC ; =FUN_02097344 + mov r3, r0 + mov r0, r1 + mov r1, r2 + ldr r2, [r3, #0x24] + bx r12 + .balign 4 +_020973CC: .word FUN_02097344 + + arm_func_start FUN_020973D0 +FUN_020973D0: ; 0x020973D0 + stmdb sp!, {r4,lr} + sub sp, sp, #0x108 + mov r4, r0 + str r1, [sp, #0x4] + add r0, sp, #0x8 + mov r1, #0x7 + str r4, [sp, #0x0] + bl MATHi_CRC8InitTable + add r0, sp, #0x8 + add r1, sp, #0x0 + mov r2, #0x8 + bl MATH_CalcCRC8 + and r0, r0, #0x7f + orr r1, r0, #0x0 + orr r0, r4, #0x0 + add sp, sp, #0x108 + ldmia sp!, {r4,pc} + + arm_func_start FUN_02097414 +FUN_02097414: ; 0x02097414 + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020974C8 + cmp r0, #0x3 + ldmneia sp!, {r4,pc} +_02097428: ; 0x02097428 + mov r0, r4 + bl FUN_020974E0 + orr r1, r0, #0x4 + mov r0, r4 + bl FUN_0209746C + ldmia sp!, {r4,pc} + + arm_func_start FUN_02097440 +FUN_02097440: ; 0x02097440 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl FUN_020974E0 + bic r1, r0, #0x3 + mov r0, r5 + orr r1, r1, r4 + bl FUN_0209746C + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_0209746C +FUN_0209746C: ; 0x0209746C + ldr ip, _0209747C ; =FUN_02097588 + ldr r3, _02097480 ; =0x001FFFFF + mov r2, #0xb + bx r12 + .balign 4 +_0209747C: .word FUN_02097588 +_02097480: .word 0x001FFFFF + + arm_func_start FUN_02097484 +FUN_02097484: ; 0x02097484 + ldr ip, _0209748C ; =FUN_020974C8 + bx r12 + .balign 4 +_0209748C: .word FUN_020974C8 + + arm_func_start FUN_02097490 +FUN_02097490: ; 0x02097490 + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020974C8 + cmp r0, #0x3 + bne _020974C0 + mov r0, r4 + bl FUN_020974E0 + and r0, r0, #0x4 + cmp r0, #0x4 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4,pc} +_020974C0: + mov r0, #0x0 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020974C8 +FUN_020974C8: ; 0x020974C8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FUN_020974E0 + and r0, r0, #0x3 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020974E0 +FUN_020974E0: ; 0x020974E0 + ldr r1, [r0, #0x0] + ldr r0, _020974F0 ; =0x001FFFFF + and r0, r0, r1, lsr #0xb + bx lr + .balign 4 +_020974F0: .word 0x001FFFFF + + arm_func_start FUN_020974F4 +FUN_020974F4: ; 0x020974F4 + str r1, [r0, #0x4] + bx lr + + arm_func_start FUN_020974FC +FUN_020974FC: ; 0x020974FC + str r1, [r0, #0x4] + str r2, [r0, #0x8] + bx lr + + arm_func_start FUN_02097508 +FUN_02097508: ; 0x02097508 + str r1, [r0, #0x8] + bx lr + + arm_func_start FUN_02097510 +FUN_02097510: ; 0x02097510 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r12, #0x0 + mov r4, r1 + mov r1, r2 + ldr r3, _02097540 ; =0x000007FF + mov r2, r12 + mov r5, r0 + bl FUN_02097588 + str r4, [r5, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_02097540: .word 0x000007FF + + arm_func_start FUN_02097544 +FUN_02097544: + ldr r0, [r0, #0x4] + bx lr + + arm_func_start FUN_0209754C +FUN_0209754C: ; 0x0209754C + ldr r1, [r0, #0x8] + ldr r0, [r0, #0x4] + orr r1, r1, #0x0 + orr r0, r0, #0x0 + bx lr + + arm_func_start FUN_02097560 +FUN_02097560: + ldr r0, [r0, #0x8] + bx lr + + arm_func_start FUN_02097568 +FUN_02097568: ; 0x02097568 + ldr r2, [r0, #0x0] + ldr r1, _02097584 ; =0x000007FF + ldr r0, [r0, #0x4] + and r1, r2, r1 + orr r1, r1, #0x0 + orr r0, r0, #0x0 + bx lr + .balign 4 +_02097584: .word 0x000007FF + + arm_func_start FUN_02097588 +FUN_02097588: ; 0x02097588 + mvn r12, r3 + ands r12, r1, r12 + movne r0, #0x0 + bxne lr + mvn r3, r3, lsl r2 + ldr r12, [r0, #0x0] + and r3, r12, r3 + orr r1, r3, r1, lsl r2 + str r1, [r0, #0x0] + mov r0, #0x1 + bx lr + + arm_func_start FUN_020975B4 +FUN_020975B4: ; 0x020975B4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FUN_020A8850 +_020975C0: ; 0x020975C0 + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_020975D8 +FUN_020975D8: ; 0x020975D8 + ldr r0, _020975EC ; =0x021C8CCC + ldr r1, [r0, #0x0] + orr r1, r1, #0x2 + str r1, [r0, #0x0] + bx lr + .balign 4 +_020975EC: .word 0x021C8CCC + + arm_func_start FUN_020975F0 +FUN_020975F0: ; 0x020975F0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _02097654 ; =0x021C8CC0 + ldr r0, _02097658 ; =0x021C8CCC + ldr lr, [r1, #0x0] + ldr r3, [r0, #0x0] + ldr r12, [lr, #0x4] + ldr r2, _0209765C ; =0x021C8F04 + ldr r1, _02097660 ; =0x021C8ED0 + str r12, [r2, #0x0] + ldr r12, [lr, #0x8] + ldr r2, _02097664 ; =0x021C8EE0 + str r12, [r1, #0x0] + ldr r12, [lr, #0xc] + ldr r1, _02097668 ; =0x021C8F1C + str r12, [r2, #0x0] + ldr r12, [lr, #0x10] + orr r2, r3, #0x2 + str r12, [r1, #0x0] + ldr r3, [lr, #0x14] + str r3, [r1, #0x4] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_02097654: .word 0x021C8CC0 +_02097658: .word 0x021C8CCC +_0209765C: .word 0x021C8F04 +_02097660: .word 0x021C8ED0 +_02097664: .word 0x021C8EE0 +_02097668: .word 0x021C8F1C + + arm_func_start FUN_0209766C +FUN_0209766C: ; 0x0209766C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020977C0 ; =0x021C8CC0 + ldr r5, _020977C4 ; =0x021C8CD4 + ldr r4, [r0, #0x0] + mov r0, r5 + mov r1, #0x0 + mov r2, #0x30 + bl MI_CpuFill8 + ldr r0, _020977C8 ; =0x021C8CC4 + ldr r2, [r4, #0x18] + mov r1, r5 + str r2, [r1, #0x4] + ldr r12, [r4, #0x1c] + mov r2, #0x0 + ldr r3, _020977CC ; =FUN_020975B4 + ldr r0, [r0, #0x0] + str r12, [r1, #0x8] + str r3, [r1, #0x10] + str r2, [r1, #0x14] + str r2, [r1, #0x18] + str r0, [r1, #0x2c] + ldr r0, [r4, #0x24] + cmp r0, #0x0 + strne r0, [r5, #0x20] + moveq r0, #0x4000 + streq r0, [r5, #0x20] + ldr r0, [r4, #0x28] + cmp r0, #0x0 + strne r0, [r5, #0x1c] + bne _02097700 + ldr r1, _020977C0 ; =0x021C8CC0 + ldr r0, [r5, #0x20] + ldr r1, [r1, #0x0] + ldr r1, [r1, #0x18] + blx r1 + str r0, [r5, #0x1c] +_02097700: + ldr r0, [r4, #0x30] + ldr r12, [r4, #0x34] + cmp r0, #0x0 + moveq r0, #0x240 + cmp r12, #0x0 + sub r2, r0, #0x28 + moveq r12, #0x10c0 + add r0, r12, r12, lsr #0x1f + str r2, [r5, #0x24] + ldr r1, _020977D0 ; =0x021061DC + mov r3, r0, asr #0x1 + ldr r0, _020977D4 ; =0x021C8F04 + mov r2, #0x0 + strh r12, [r1, #0x2] + strh r3, [r1, #0x4] + str r2, [r0, #0x0] + ldr r0, [r4, #0x0] + cmp r0, #0x0 + beq _02097774 + ldr r0, _020977D8 ; =0x021C8CCC + mov r1, #0x1 + str r1, [r0, #0x0] + ldr r1, _020977DC ; =FUN_020975D8 + str r2, [r5, #0x0] + ldr r0, _020977E0 ; =0x021C8CC8 + str r1, [r5, #0xc] + ldr r0, [r0, #0x0] + str r0, [r5, #0x28] + b _0209778C +_02097774: + ldr r0, _020977D8 ; =0x021C8CCC + mov r1, #0x1 + str r2, [r0, #0x0] + ldr r0, _020977E4 ; =FUN_020975F0 + str r1, [r5, #0x0] + str r0, [r5, #0xc] +_0209778C: + ldr r0, [r4, #0x2c] + cmp r0, #0x0 + moveq r0, #0xb + bl FUN_0209FC88 + ldr r0, _020977E8 ; =FUN_0209F65C + bl FUN_020A87BC + ldr r0, _020977EC ; =FUN_020996C0 + bl FUN_0209FD24 + mov r0, r5 + bl FUN_0209FD94 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020977C0: .word 0x021C8CC0 +_020977C4: .word 0x021C8CD4 +_020977C8: .word 0x021C8CC4 +_020977CC: .word FUN_020975B4 +_020977D0: .word 0x021061DC +_020977D4: .word 0x021C8F04 +_020977D8: .word 0x021C8CCC +_020977DC: .word FUN_020975D8 +_020977E0: .word 0x021C8CC8 +_020977E4: .word FUN_020975F0 +_020977E8: .word FUN_0209F65C +_020977EC: .word FUN_020996C0 + + arm_func_start FUN_020977F0 +FUN_020977F0: ; 0x020977F0 + stmdb sp!, {r4,lr} + ldr r0, _02097828 ; =0x021C8CC0 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x20] + bl FUN_02097B78 + movs r4, r0 + bmi _0209781C + ldr r0, _0209782C ; =0x021061F4 + bl FUN_02097F70 + ldr r1, _02097830 ; =0x021C8CD0 + str r0, [r1, #0x0] +_0209781C: + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02097828: .word 0x021C8CC0 +_0209782C: .word 0x021061F4 +_02097830: .word 0x021C8CD0 + + arm_func_start FUN_02097834 +FUN_02097834: ; 0x02097834 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, _02097870 ; =0x02000BC4 + bl FUN_02000B60 + ldr r0, _02097874 ; =0x021C8CC0 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + str r4, [r0, #0x0] + bl FUN_0209766C + bl FUN_020977F0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02097870: .word 0x02000BC4 +_02097874: .word 0x021C8CC0 + + arm_func_start FUN_02097878 +FUN_02097878: ; 0x02097878 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r9, r0 + add r6, sp, #0x0 + mov r4, #0x0 + mov r5, #0x1 +_02097890: + mov r0, r9 + mov r1, r6 + mov r2, r5 + bl OS_ReadMessage +_020978A0: ; 0x020978A0 + ldr r0, [sp, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + ldr r1, [r0, #0x0] + blx r1 + mov r7, r0 + bl OS_DisableInterrupts + mov r8, r0 + bl OS_DisableScheduler + mov r0, r9 + mov r1, r4 + mov r2, r4 + bl OS_ReceiveMessage +_020978DC: ; 0x020978DC + ldr r0, [sp, #0x0] + ldr r0, [r0, #0x4] + cmp r0, #0x0 + strne r7, [r0, #0x6c] + ldr r0, [sp, #0x0] + ldr r0, [r0, #0x8] + cmp r0, #0x0 + beq _02097908 + mov r1, r7 + mov r2, r4 + bl OS_SendMessage +_02097908: + ldr r0, [sp, #0x0] + bl FUN_02097A64 + bl OS_EnableScheduler + mov r0, r8 + bl OS_RestoreInterrupts + b _02097890 +_02097920: ; 0x02097920 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start FUN_0209792C +FUN_0209792C: ; 0x0209792C + stmdb sp!, {r4,lr} + mov r4, r1 + bl FUN_02097A50 + mov r1, r4 + bl FUN_02097968 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_02097948 +FUN_02097948: + ldr ip, _02097954 ; =FUN_02097968 + ldr r0, [r0, #0x68] + bx r12 + .balign 4 +_02097954: .word FUN_02097968 + + arm_func_start FUN_02097958 +FUN_02097958: ; 0x02097958 + ldr ip, _02097964 ; =FUN_02097968 + ldr r0, [r0, #0x64] + bx r12 + .balign 4 +_02097964: .word FUN_02097968 + + arm_func_start FUN_02097968 +FUN_02097968: ; 0x02097968 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x2c + mov r4, r1 + ldrsb r2, [r4, #0xd] + mov r5, r0 + cmp r2, #0x1 + bne _020979BC + add r0, sp, #0x8 + add r1, sp, #0x4 + mov r2, #0x1 + bl OS_InitMessageQueue + add r2, sp, #0x8 + mov r0, r5 + mov r1, r4 + str r2, [r4, #0x8] + bl FUN_020979F8 + add r0, sp, #0x8 + add r1, sp, #0x0 + mov r2, #0x1 + bl OS_ReceiveMessage + b _020979CC +_020979BC: + mov r2, #0x0 + str r2, [r4, #0x8] + bl FUN_020979F8 +_020979C8: ; 0x020979C8 + str r0, [sp, #0x0] +_020979CC: + ldr r0, [sp, #0x0] + add sp, sp, #0x2c + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_020979DC +FUN_020979DC: + stmdb sp!, {r4,lr} + mov r4, r1 + bl FUN_02097A50 + mov r1, r4 + bl FUN_020979F8 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020979F8 +FUN_020979F8: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + movs r5, r1 + beq _02097A14 + ldrsb r1, [r5, #0xd] + ands r1, r1, #0x1 + beq _02097A1C +_02097A14: + mov r2, #0x1 + b _02097A20 +_02097A1C: + mov r2, #0x0 +_02097A20: + mov r1, r5 + bl OS_SendMessage + movs r4, r0 + bne _02097A38 + mov r0, r5 + bl FUN_02097A64 +_02097A38: + cmp r4, #0x0 + movne r0, #0x0 + mvneq r0, #0x29 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_02097A50 +FUN_02097A50: ; 0x02097A50 + ldr r1, [r0, #0x64] + cmp r1, #0x0 + ldreq r1, [r0, #0x68] + mov r0, r1 + bx lr + + arm_func_start FUN_02097A64 +FUN_02097A64: + stmdb sp!, {lr} + sub sp, sp, #0x4 + movs r1, r0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + ldr r0, _02097A94 ; =0x021C8D08 + mov r2, #0x0 + bl OS_SendMessage + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_02097A94: .word 0x021C8D08 + + arm_func_start FUN_02097A98 +FUN_02097A98: ; 0x02097A98 + stmdb sp!, {r4-r6,lr} + mov r4, r2 + mov r6, r0 + mov r0, r4 + mov r5, r1 + bl FUN_02097AE0 +_02097AB0: ; 0x02097AB0 + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + str r6, [r0, #0x0] + str r5, [r0, #0x4] + mov r1, #0x0 + str r1, [r0, #0x8] + ldrsb r1, [r5, #0x73] + strb r1, [r0, #0xc] + strb r4, [r0, #0xd] + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_02097AE0 +FUN_02097AE0: + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r0 + ldr r0, _02097B10 ; =0x021C8D08 + add r1, sp, #0x0 + bl OS_ReceiveMessage +_02097AF8: ; 0x02097AF8 + cmp r0, #0x0 + ldrne r0, [sp, #0x0] + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_02097B10: .word 0x021C8D08 + + arm_func_start FUN_02097B14 +FUN_02097B14: ; 0x02097B14 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _02097B6C ; =0x021C8D08 + ldr r1, [r0, #0x1c] + ldr r0, [r0, #0x14] + cmp r1, r0 + addlt sp, sp, #0x4 + mvnlt r0, #0x0 + ldmltia sp!, {lr} + bxlt lr + ldr r0, _02097B70 ; =0x021C8CC0 + ldr r1, _02097B74 ; =0x021C8D04 + ldr r2, [r0, #0x0] + ldr r0, [r1, #0x0] + ldr r1, [r2, #0x1c] + blx r1 + ldr r1, _02097B74 ; =0x021C8D04 + mov r0, #0x0 + str r0, [r1, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_02097B6C: .word 0x021C8D08 +_02097B70: .word 0x021C8CC0 +_02097B74: .word 0x021C8D04 + + arm_func_start FUN_02097B78 +FUN_02097B78: ; 0x02097B78 + stmdb sp!, {r4-r6,lr} + mov r4, r0 + mov r0, #0x2c + mul r1, r4, r0 + ldr r0, _02097C08 ; =0x021C8CC0 + mov r2, r4, lsl #0x2 + add r2, r2, #0x3 + ldr r0, [r0, #0x0] + add r1, r1, #0x3 + bic r5, r2, #0x3 + bic r2, r1, #0x3 + ldr r1, [r0, #0x18] + add r0, r2, r5 + blx r1 + movs r6, r0 + mvneq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r0, _02097C0C ; =0x021C8D08 + mov r1, r6 + mov r2, r4 + bl OS_InitMessageQueue +_02097BD0: ; 0x02097BD0 + cmp r4, #0x0 + add r5, r6, r5 + ble _02097BF4 +_02097BDC: + mov r0, r5 + bl FUN_02097A64 + sub r4, r4, #0x1 + cmp r4, #0x0 + add r5, r5, #0x2c + bgt _02097BDC +_02097BF4: + ldr r1, _02097C10 ; =0x021C8D04 + mov r0, #0x0 + str r6, [r1, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_02097C08: .word 0x021C8CC0 +_02097C0C: .word 0x021C8D08 +_02097C10: .word 0x021C8D04 + + arm_func_start FUN_02097C14 +FUN_02097C14: ; 0x02097C14 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r5, r2 + mov r7, r0 + mov r0, r5 + mov r6, r1 + bl FUN_02097DC4 + add r4, r7, r0 + ldrb r2, [r5, #0x3] + mov r0, r6 + mov r1, r7 + bl OS_InitMessageQueue + add r0, r6, #0xe0 + bl OS_InitMutex + ldrh r2, [r5, #0x0] + add r0, r6, #0x20 + ldr r1, _02097C88 ; =FUN_02097878 + str r2, [sp, #0x0] + ldrb r12, [r5, #0x2] + mov r2, r6 + mov r3, r4 + str r12, [sp, #0x4] + bl OS_CreateThread + add r0, r6, #0x20 + bl OS_WakeupThreadDirect + mov r0, r4 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_02097C88: .word FUN_02097878 + + arm_func_start FUN_02097C8C +FUN_02097C8C: ; 0x02097C8C + stmdb sp!, {r4,lr} + mov r4, r0 + cmp r2, #0x0 + moveq r0, #0x0 + str r0, [r1, #0x4] + mov r0, r2 + str r2, [r1, #0x0] + bl FUN_02099F6C +_02097CAC: ; 0x02097CAC + add r0, r4, r0 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_02097CB8 +FUN_02097CB8: ; 0x02097CB8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r1 + ldrsb r1, [r6, #0x0] + mov r7, r0 + add r4, r7, #0x80 + strb r1, [r7, #0x73] + ldrsb r0, [r6, #0x1] + strb r0, [r7, #0x72] + ldrh r0, [r6, #0x2] + cmp r0, #0x0 + beq _02097D40 + str r4, [r7, #0x64] + ldrh r2, [r6, #0x4] + mov r1, r4 + add r0, r4, #0x114 + strh r2, [r4, #0xfc] + add r2, r6, #0x10 + mov r5, r4 + bl FUN_02097C14 + ldrh r2, [r6, #0x2] + add r1, r7, #0x3c + bl FUN_02097C8C + ldrh r2, [r6, #0x8] + add r1, r7, #0x50 + bl FUN_02097C8C + ldrh r3, [r6, #0xe] + add r1, r5, #0x100 + mov r2, #0x0 + strh r3, [r1, #0xa] + str r2, [r5, #0x110] + ldr r1, [r5, #0x110] + mov r4, r0 + str r1, [r5, #0x10c] +_02097D40: + ldrh r0, [r6, #0x6] + cmp r0, #0x0 + ldreq r0, _02097DC0 ; =0x021C8CD0 + ldreq r0, [r0, #0x0] + ldreq r0, [r0, #0x68] + streq r0, [r7, #0x68] + beq _02097DB0 + str r4, [r7, #0x68] + mov r1, r4 + str r7, [r4, #0x10c] + add r0, r4, #0x110 + add r2, r6, #0x14 + mov r5, r4 + bl FUN_02097C14 + ldrh r2, [r6, #0x6] + add r1, r7, #0x48 + bl FUN_02097C8C + ldrh r2, [r6, #0xa] + add r1, r7, #0x58 + bl FUN_02097C8C + ldrh r2, [r6, #0xc] + add r1, r4, #0xf8 + bl FUN_02097C8C + mov r1, #0x0 + str r1, [r5, #0x108] + ldr r1, [r5, #0x108] + mov r4, r0 + str r1, [r5, #0x104] +_02097DB0: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_02097DC0: .word 0x021C8CD0 + + arm_func_start FUN_02097DC4 +FUN_02097DC4: ; 0x02097DC4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldrb r0, [r5, #0x3] + mov r0, r0, lsl #0x2 + bl FUN_02099F6C + mov r4, r0 + ldrh r0, [r5, #0x0] + bl FUN_02099F6C +_02097DE8: ; 0x02097DE8 + add r0, r4, r0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_02097DF8 +FUN_02097DF8: ; 0x02097DF8 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldrh r0, [r5, #0x2] + mov r4, #0x80 + cmp r0, #0x0 + beq _02097E38 + add r4, r4, #0x114 + bl FUN_02099F6C + add r4, r4, r0 + ldrh r0, [r5, #0x8] + bl FUN_02099F6C + add r4, r4, r0 + add r0, r5, #0x10 + bl FUN_02097DC4 + add r4, r4, r0 +_02097E38: + ldrh r0, [r5, #0x6] + cmp r0, #0x0 + beq _02097E74 + add r4, r4, #0x110 + bl FUN_02099F6C + add r4, r4, r0 + ldrh r0, [r5, #0xa] + bl FUN_02099F6C + add r4, r4, r0 + ldrh r0, [r5, #0xc] + bl FUN_02099F6C + add r4, r4, r0 + add r0, r5, #0x14 + bl FUN_02097DC4 + add r4, r4, r0 +_02097E74: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_02097E84 +FUN_02097E84: ; 0x02097E84 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + bl FUN_02097DF8 + mov r4, r0 + bl OS_DisableInterrupts + ldr r1, _02097EF4 ; =0x021C8CC0 + mov r5, r0 + ldr r1, [r1, #0x0] + mov r0, r4 + ldr r1, [r1, #0x18] + blx r1 + movs r6, r0 + beq _02097EDC + mov r2, r4 + mov r1, #0x0 + bl MI_CpuFill8 + mov r0, r6 + mov r1, r7 + bl FUN_02097CB8 + mov r0, r6 + bl FUN_0209A094 +_02097EDC: + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r6 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_02097EF4: .word 0x021C8CC0 + + arm_func_start FUN_02097EF8 +FUN_02097EF8: ; 0x02097EF8 + stmdb sp!, {r4,lr} + ldr r4, [r0, #0x4] + mov r0, r4 + bl FUN_0209CC28 + ldrsb r0, [r4, #0x73] + ldr r1, [r4, #0x68] + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _02097F58 +_02097F1C: + b _02097F30 +_02097F20: + b _02097F40 +_02097F24: + b _02097F54 +_02097F28: + b _02097F58 +_02097F2C: + b _02097F30 +_02097F30: + add r0, r1, #0x20 + bl FUN_0209CB0C + bl FUN_0209CB44 + b _02097F58 +_02097F40: + bl FUN_0209CB44 + bl FUN_0209CBE8 + ldr r0, _02097F6C ; =FUN_02098550 + bl FUN_0209CAA8 +_02097F50: ; 0x02097F50 + b _02097F58 +_02097F54: + bl FUN_0209CBE8 +_02097F58: + mov r0, #0x1 + strh r0, [r4, #0x70] + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02097F6C: .word FUN_02098550 + + arm_func_start FUN_02097F70 +FUN_02097F70: ; 0x02097F70 + stmdb sp!, {r4,lr} + bl FUN_02097E84 + movs r4, r0 + mvneq r0, #0x30 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r0, _02097FB0 ; =FUN_02097EF8 + mov r1, r4 + mov r2, #0x1 + bl FUN_02097A98 + mov r1, r0 + mov r0, r4 + bl FUN_0209792C + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02097FB0: .word FUN_02097EF8 + + arm_func_start FUN_02097FB4 +FUN_02097FB4: ; 0x02097FB4 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r6, r0 + ldr r4, [r6, #0x4] + ldr r5, [r4, #0x64] + add r0, r5, #0xe0 + bl OS_LockMutex + mov r1, #0x0 + ldrh r0, [r6, #0x10] + mov r2, r1 + bl FUN_0209CB78 + bl FUN_0209CA54 + mov r2, #0x0 + add r0, sp, #0x0 + add r1, sp, #0x4 + str r2, [r5, #0xf8] + bl FUN_0209C8E0 + ldrh r2, [sp, #0x0] + ldr r1, [r6, #0x14] + strh r2, [r1, #0x0] + ldr r1, [r6, #0x18] + str r0, [r1, #0x0] + ldrsh r1, [r4, #0x70] + add r0, r5, #0xe0 + orr r1, r1, #0x4 + strh r1, [r4, #0x70] + bl OS_UnlockMutex +_02098020: ; 0x02098020 + mov r0, #0x0 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_02098030 +FUN_02098030: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl FUN_02099FA8 +_02098044: ; 0x02098044 + cmp r0, #0x0 + mvnne r0, #0x1b + ldmneia sp!, {r4-r6,lr} + bxne lr + cmp r6, #0x0 + mov r1, #0x0 + beq _0209806C + ldrsh r0, [r6, #0x70] + ands r0, r0, #0x1 + movne r1, #0x1 +_0209806C: + cmp r1, #0x0 + mvneq r0, #0x26 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldrsh r0, [r6, #0x70] + ands r0, r0, #0x2 + mvnne r0, #0x1b + ldmneia sp!, {r4-r6,lr} + bxne lr + ldrsb r0, [r6, #0x73] + mov r1, #0x1 + cmp r0, #0x0 + beq _020980A8 + cmp r0, #0x4 + movne r1, #0x0 +_020980A8: + cmp r1, #0x0 + mvneq r0, #0x1b + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldrsb r2, [r6, #0x72] + cmp r2, #0x1 + mvnne r0, #0x5 + ldmneia sp!, {r4-r6,lr} + bxne lr + ldrh r0, [r6, #0x74] + cmp r0, #0x0 + mvneq r0, #0x1b + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r0, _0209811C ; =FUN_02097FB4 + mov r1, r6 + bl FUN_02097A98 + mov r1, r0 + ldrh r2, [r6, #0x74] + mov r0, r6 + strh r2, [r1, #0x10] + str r5, [r1, #0x14] + str r4, [r1, #0x18] + ldrsh r2, [r6, #0x70] + orr r2, r2, #0x2 + strh r2, [r6, #0x70] + bl FUN_02097958 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_0209811C: .word FUN_02097FB4 + + arm_func_start FUN_02098120 +FUN_02098120: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl FUN_02099FA8 +_02098138: ; 0x02098138 + cmp r0, #0x0 + addne sp, sp, #0x4 + mvnne r0, #0x1b + ldmneia sp!, {r4-r7,lr} + bxne lr + cmp r6, #0x0 + mov r1, #0x0 + beq _02098164 + ldrsh r0, [r6, #0x70] + ands r0, r0, #0x1 + movne r1, #0x1 +_02098164: + cmp r1, #0x0 + addeq sp, sp, #0x4 + mvneq r0, #0x26 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldrsh r0, [r6, #0x70] + ands r0, r0, #0x2 + addne sp, sp, #0x4 + mvnne r0, #0x1b + ldmneia sp!, {r4-r7,lr} + bxne lr + ldrsb r0, [r6, #0x73] + mov r1, #0x1 + cmp r0, #0x0 + beq _020981A8 + cmp r0, #0x4 + movne r1, #0x0 +_020981A8: + cmp r1, #0x0 + addeq sp, sp, #0x4 + mvneq r0, #0x1b + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldrsb r0, [r6, #0x72] + cmp r0, #0x1 + addne sp, sp, #0x4 + mvnne r0, #0x5 + ldmneia sp!, {r4-r7,lr} + bxne lr + ldr r0, _02098228 ; =0x021061DC + bl FUN_02097F70 + movs r7, r0 + addmi sp, sp, #0x4 + ldmmiia sp!, {r4-r7,lr} + bxmi lr + ldrh r1, [r6, #0x74] + bl FUN_020984B4 +_020981F4: ; 0x020981F4 + cmp r0, #0x0 + addlt sp, sp, #0x4 + ldmltia sp!, {r4-r7,lr} + bxlt lr + mov r0, r7 + mov r1, r5 + mov r2, r4 + bl FUN_02098030 +_02098214: ; 0x02098214 + cmp r0, #0x0 + movge r0, r7 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_02098228: .word 0x021061DC + + arm_func_start FUN_0209822C +FUN_0209822C: ; 0x0209822C + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_02099FA8 +_02098238: ; 0x02098238 + cmp r0, #0x0 + mvnne r0, #0x1b + ldmneia sp!, {r4,lr} + bxne lr + cmp r4, #0x0 + mov r1, #0x0 + beq _02098260 + ldrsh r0, [r4, #0x70] + ands r0, r0, #0x1 + movne r1, #0x1 +_02098260: + cmp r1, #0x0 + mvneq r0, #0x26 + ldmeqia sp!, {r4,lr} + bxeq lr + ldrsh r0, [r4, #0x70] + ands r0, r0, #0x2 + mvnne r0, #0x1b + ldmneia sp!, {r4,lr} + bxne lr + ldrsb r0, [r4, #0x73] + mov r1, #0x1 + cmp r0, #0x0 + beq _0209829C + cmp r0, #0x4 + movne r1, #0x0 +_0209829C: + cmp r1, #0x0 + mvneq r0, #0x1b + ldmeqia sp!, {r4,lr} + bxeq lr + ldrsb r0, [r4, #0x72] + cmp r0, #0x1 + moveq r0, #0x0 + mvnne r0, #0x5 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020982C4 +FUN_020982C4: ; 0x020982C4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + ldr r4, [r7, #0x4] + mov r5, #0x0 + ldr r6, [r4, #0x64] + add r0, r6, #0xe0 + bl OS_LockMutex + ldrh r0, [r7, #0x10] + ldrh r1, [r7, #0x12] + ldr r2, [r7, #0x14] + bl FUN_0209CB78 + mov r0, r5 + str r0, [r6, #0xf8] + ldrsb r0, [r7, #0xc] + cmp r0, #0x0 + beq _02098310 + cmp r0, #0x4 + bne _02098318 +_02098310: + bl FUN_0209C934 + mov r5, r0 +_02098318: + add r0, r6, #0xe0 + bl OS_UnlockMutex +_02098320: ; 0x02098320 + cmp r5, #0x0 + ldrnesh r1, [r4, #0x70] + mvnne r0, #0x4b + moveq r0, #0x0 + orrne r1, r1, #0x40 + strneh r1, [r4, #0x70] + ldreqsh r1, [r4, #0x70] + orreq r1, r1, #0x4 + streqh r1, [r4, #0x70] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_02098350 +FUN_02098350: ; 0x02098350 + stmdb sp!, {r4,lr} + mov r4, r0 + ldrsb r2, [r4, #0x72] + ldr r0, _020983AC ; =FUN_020982C4 + mov r1, r4 + bl FUN_02097A98 + movs r1, r0 + mvneq r0, #0x20 + ldmeqia sp!, {r4,lr} + bxeq lr + ldrh r2, [r4, #0x74] + mov r0, r4 + strh r2, [r1, #0x10] + ldrh r2, [r4, #0x76] + strh r2, [r1, #0x12] + ldr r2, [r4, #0x78] + str r2, [r1, #0x14] + ldrsh r2, [r4, #0x70] + orr r2, r2, #0x2 + strh r2, [r4, #0x70] + bl FUN_02097958 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020983AC: .word FUN_020982C4 + + arm_func_start FUN_020983B0 +FUN_020983B0: ; 0x020983B0 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl FUN_02099FA8 +_020983C4: ; 0x020983C4 + cmp r0, #0x0 + bne _020983D8 + ldrsh r0, [r6, #0x70] + ands r0, r0, #0x8 + beq _020983E4 +_020983D8: + mvn r0, #0x1b + ldmia sp!, {r4-r6,lr} + bx lr +_020983E4: + cmp r6, #0x0 + mov r1, #0x0 + beq _020983FC + ldrsh r0, [r6, #0x70] + ands r0, r0, #0x1 + movne r1, #0x1 +_020983FC: + cmp r1, #0x0 + mvneq r0, #0x26 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldrsb r0, [r6, #0x73] + mov r1, #0x1 + cmp r0, #0x0 + beq _02098424 + cmp r0, #0x4 + movne r1, #0x0 +_02098424: + cmp r1, #0x0 + beq _0209849C + ldrsh r0, [r6, #0x70] + ands r0, r0, #0x4 + beq _02098450 + ldrsb r0, [r6, #0x72] + cmp r0, #0x1 + mvneq r0, #0x1d + movne r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_02098450: + ldrsh r0, [r6, #0x70] + ands r0, r0, #0x2 + beq _02098478 + ldrsh r0, [r6, #0x70] + ands r0, r0, #0x40 + ldrne r0, [r6, #0x6c] + ldreq r0, _020984B0 ; =0x021061C0 + ldreq r0, [r0, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr +_02098478: + strh r5, [r6, #0x76] + mov r0, r6 + str r4, [r6, #0x78] + bl FUN_02098350 + ldrsb r1, [r6, #0x72] + cmp r1, #0x1 + mvnne r0, #0x19 + ldmia sp!, {r4-r6,lr} + bx lr +_0209849C: + strh r5, [r6, #0x76] + str r4, [r6, #0x78] + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020984B0: .word 0x021061C0 + + arm_func_start FUN_020984B4 +FUN_020984B4: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + mov r5, r1 + bl FUN_02099FA8 +_020984C8: ; 0x020984C8 + cmp r0, #0x0 + addne sp, sp, #0x4 + mvnne r0, #0x1b + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r4, #0x0 + mov r1, #0x0 + beq _020984F4 + ldrsh r0, [r4, #0x70] + ands r0, r0, #0x1 + movne r1, #0x1 +_020984F4: + cmp r1, #0x0 + addeq sp, sp, #0x4 + mvneq r0, #0x26 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldrsh r0, [r4, #0x70] + ands r0, r0, #0x2 + addne sp, sp, #0x4 + mvnne r0, #0x6 + ldmneia sp!, {r4-r5,lr} + bxne lr + strh r5, [r4, #0x74] + ldrsb r0, [r4, #0x73] + cmp r0, #0x1 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r5,lr} + bxne lr + mov r0, r4 + bl FUN_02098350 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_02098550 +FUN_02098550: ; 0x02098550 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r7, r2 + ldr r6, [r7, #0x64] + mov r9, r0 + mov r8, r1 + bl OS_DisableInterrupts + add r1, r6, #0x100 + ldrh r2, [r1, #0x8] + ldrh r1, [r1, #0xa] + mov r4, r0 + add r0, r2, r8 + cmp r1, r0 + blo _02098618 + ldr r1, _02098668 ; =0x021C8CC0 + add r0, r8, #0xc + ldr r1, [r1, #0x0] + ldr r1, [r1, #0x18] + blx r1 + movs r5, r0 + beq _02098604 + add r1, r6, #0x100 + ldrh r3, [r1, #0x8] + mov r2, #0x0 + mov r0, r9 + add r3, r3, r8 + strh r3, [r1, #0x8] + str r2, [r5, #0x0] + strh r8, [r5, #0x4] + ldrh r3, [r7, #0x18] + mov r2, r8 + add r1, r5, #0xc + strh r3, [r5, #0x6] + ldr r3, [r7, #0x1c] + str r3, [r5, #0x8] + bl MI_CpuCopy8 + ldr r0, [r6, #0x100] + cmp r0, #0x0 + ldrne r0, [r6, #0x100] + strne r5, [r0, #0x0] + str r5, [r6, #0x100] + ldr r0, [r6, #0x104] + cmp r0, #0x0 + streq r5, [r6, #0x104] + b _02098628 +_02098604: + ldr r0, _0209866C ; =0x021C8D28 + ldr r1, [r0, #0x0] + add r1, r1, #0x1 + str r1, [r0, #0x0] + b _02098628 +_02098618: + ldr r0, _0209866C ; =0x021C8D28 + ldr r1, [r0, #0x4] + add r1, r1, #0x1 + str r1, [r0, #0x4] +_02098628: + ldrh r0, [r7, #0x74] + cmp r0, #0x0 + ldreqh r0, [r7, #0xa] + streqh r0, [r7, #0x74] + ldrh r1, [r7, #0x1a] + add r0, r6, #0x10c + strh r1, [r7, #0x18] + ldr r1, [r7, #0x20] + str r1, [r7, #0x1c] + bl OS_WakeupThread + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_02098668: .word 0x021C8CC0 +_0209866C: .word 0x021C8D28 + + arm_func_start FUN_02098670 +FUN_02098670: ; 0x02098670 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x14 + mov r10, r0 + ldr r9, [r10, #0x64] + str r1, [sp, #0x0] + ldr r0, [r9, #0x104] + str r2, [sp, #0x4] + str r3, [sp, #0x8] + bl OS_DisableInterrupts + ldr r8, [r9, #0x104] + str r0, [sp, #0xc] + cmp r8, #0x0 + bne _02098710 + ldr r0, [sp, #0x3c] + and r7, r0, #0x1 + add r6, r9, #0x10c + mov r4, #0x1 + mov r5, #0x0 +_020986B8: + cmp r7, #0x0 + mvneq r11, #0x5 + beq _02098710 + mov r0, r6 + bl OS_SleepThread + mov r0, r10 + bl FUN_02099FA8 +_020986D4: ; 0x020986D4 + cmp r0, #0x0 + bne _020986FC + mov r1, r5 + cmp r10, #0x0 + beq _020986F4 + ldrsh r0, [r10, #0x70] + ands r0, r0, #0x1 + movne r1, r4 +_020986F4: + cmp r1, #0x0 + bne _02098704 +_020986FC: + mvn r11, #0x37 + b _02098710 +_02098704: + ldr r8, [r9, #0x104] + cmp r8, #0x0 + beq _020986B8 +_02098710: + cmp r8, #0x0 + beq _020987A4 + ldrh r1, [r8, #0x4] + ldr r0, [sp, #0x4] + cmp r0, r1 + strgt r1, [sp, #0x4] + ldr r1, [sp, #0x0] + ldr r2, [sp, #0x4] + add r0, r8, #0xc + bl MI_CpuCopy8 + ldr r0, [sp, #0x8] + cmp r0, #0x0 + ldrneh r1, [r8, #0x6] + strneh r1, [r0, #0x0] + ldr r1, [sp, #0x38] + cmp r1, #0x0 + ldrne r0, [r8, #0x8] + strne r0, [r1, #0x0] + ldrsb r0, [r9, #0xfe] + ldrh r11, [r8, #0x4] + cmp r0, #0x0 + bne _020987A4 + ldr r0, [r8, #0x0] + ldr r1, _020987BC ; =0x021C8CC0 + str r0, [r9, #0x104] + ldr r0, [r8, #0x0] + cmp r0, #0x0 + moveq r0, #0x0 + streq r0, [r9, #0x100] + ldr r1, [r1, #0x0] + mov r0, r8 + ldr r1, [r1, #0x1c] + blx r1 + add r0, r9, #0x100 + ldrh r1, [r0, #0x8] + sub r1, r1, r11 + strh r1, [r0, #0x8] +_020987A4: + ldr r0, [sp, #0xc] + bl OS_RestoreInterrupts + mov r0, r11 + add sp, sp, #0x14 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020987BC: .word 0x021C8CC0 + + arm_func_start FUN_020987C0 +FUN_020987C0: ; 0x020987C0 + stmdb sp!, {r4-r6,lr} + ldr r6, [r0, #0x64] + bl OS_DisableInterrupts + ldr r4, [r6, #0xf8] + mov r5, r0 + cmp r4, #0x0 + beq _020987EC + mov r1, #0x0 + mov r0, r4 + str r1, [r6, #0xf8] + bl FUN_0209C52C +_020987EC: + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_02098800 +FUN_02098800: ; 0x02098800 + ldr ip, _0209880C ; =FUN_020987C0 + ldr r0, [r0, #0x4] + bx r12 + .balign 4 +_0209880C: .word FUN_020987C0 + + arm_func_start FUN_02098810 +FUN_02098810: + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r1, [r4, #0x64] + ldrh r0, [r1, #0xfc] + ldr r1, [r1, #0xf8] + cmp r1, r0 + movlt r0, #0x0 + ldmltia sp!, {r4,lr} + bxlt lr + ldr r0, _02098864 ; =FUN_02098800 + mov r1, r4 + mov r2, #0x0 + bl FUN_02097A98 + movs r1, r0 + mvneq r0, #0x20 + ldmeqia sp!, {r4,lr} + bxeq lr + mov r0, r4 + bl FUN_02097958 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02098864: .word FUN_02098800 + + arm_func_start FUN_02098868 +FUN_02098868: ; 0x02098868 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x14 + ldr r9, [r0, #0x4] + ldr r1, [r0, #0x10] + ldr r8, [r9, #0x64] + str r1, [sp, #0x4] + ldr r1, [r0, #0x18] + ldr r10, [r0, #0x14] + ldr r0, [r0, #0x1c] + ldr r7, [r8, #0xf8] + str r1, [sp, #0x8] + str r0, [sp, #0xc] + add r11, sp, #0x10 + mov r5, #0x0 + mov r6, #0x1 + mov r4, #0xa +_020988A8: + mov r0, r11 + bl FUN_0209C638 +_020988B0: ; 0x020988B0 + cmp r0, #0x0 + beq _02098904 + ldr r1, [sp, #0x10] + sub r1, r1, r7 + cmp r1, #0x0 + bgt _02098904 + ldrsb r0, [r9, #0x73] + mov r1, r6 + cmp r0, #0x0 + beq _020988E0 + cmp r0, #0x4 + movne r1, r5 +_020988E0: + cmp r1, #0x0 + beq _020988F8 + ldrb r0, [r9, #0x8] + cmp r0, #0x4 + movne r0, #0x0 + bne _02098904 +_020988F8: + mov r0, r4 + bl OS_Sleep + b _020988A8 +_02098904: + ldrsb r1, [r9, #0x73] + cmp r1, #0x4 + bne _02098954 + cmp r0, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldr r1, [sp, #0x10] + cmp r10, r1 + movhi r10, r1 + ldr r1, [sp, #0x4] + mov r2, r10 + bl MI_CpuCopy8 + mov r0, r10 + bl FUN_0209C52C + add sp, sp, #0x14 + mov r0, r10 + ldmia sp!, {r4-r11,lr} + bx lr +_02098954: + cmp r0, #0x0 + moveq r4, #0x0 + beq _02098980 + ldr r4, [sp, #0xc] + ldr r1, [sp, #0x4] + ldr r3, [sp, #0x8] + mov r0, r9 + mov r2, r10 + str r4, [sp, #0x0] + bl FUN_02098AA4 + mov r4, r0 +_02098980: + cmp r4, #0x0 + addle sp, sp, #0x14 + movle r0, r4 + ldmleia sp!, {r4-r11,lr} + bxle lr + ldrh r0, [r8, #0xfc] + ldr r1, [r8, #0xf8] + cmp r1, r0 + blt _020989AC + mov r0, r9 + bl FUN_020987C0 +_020989AC: + mov r0, r4 + add sp, sp, #0x14 + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FUN_020989BC +FUN_020989BC: ; 0x020989BC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + ldr r0, _02098A10 ; =FUN_02098868 + mov r1, r7 + mov r2, #0x1 + mov r4, r3 + bl FUN_02097A98 + mov r1, r0 + str r6, [r1, #0x10] + str r5, [r1, #0x14] + ldr r2, [sp, #0x18] + str r4, [r1, #0x18] + mov r0, r7 + str r2, [r1, #0x1c] + bl FUN_02097958 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_02098A10: .word FUN_02098868 + + arm_func_start FUN_02098A14 +FUN_02098A14: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, [r0, #0x64] + ldr r5, [r0, #0xc4] + ldr r4, [r0, #0xf8] + ldr r0, [r5, #0x44] + subs lr, r0, r4 + bmi _02098A78 + ldrh r12, [r5, #0xa] + ldr r0, [sp, #0x10] + cmp lr, #0x0 + strh r12, [r2, #0x0] + ldrh r2, [r5, #0x18] + strh r2, [r3, #0x0] + ldr r2, [r5, #0x1c] + str r2, [r0, #0x0] + str lr, [r1, #0x0] + bne _02098A90 + ldrb r0, [r5, #0x8] + cmp r0, #0x4 + beq _02098A90 + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r5,lr} + bx lr +_02098A78: + mvn r0, #0x0 + str r0, [r1, #0x0] + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r5,lr} + bx lr +_02098A90: + ldr r0, [r5, #0x40] + add r0, r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_02098AA4 +FUN_02098AA4: ; 0x02098AA4 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x14 + mov r9, r0 + mov r8, r1 + mov r7, r2 + mov r6, r3 + bl OS_DisableInterrupts + add r1, sp, #0xc + mov r5, r0 + str r1, [sp, #0x0] + add r1, sp, #0x8 + mov r0, r9 + add r2, sp, #0x4 + add r3, sp, #0x6 + bl FUN_02098A14 +_02098AE0: ; 0x02098AE0 + cmp r0, #0x0 + beq _02098B48 + ldr r4, [sp, #0x8] + cmp r4, #0x0 + mvneq r4, #0x5 + beq _02098B64 + ldrsb r1, [r9, #0x73] + cmp r7, r4 + movgt r7, r4 + mov r2, #0x1 + cmp r1, #0x0 + beq _02098B18 + cmp r1, #0x4 + movne r2, #0x0 +_02098B18: + cmp r2, #0x0 + mov r1, r8 + mov r2, r7 + movne r4, r7 + bl MI_CpuCopy8 + ldr r1, [r9, #0x64] + ldrsb r0, [r1, #0xfe] + cmp r0, #0x0 + ldreq r0, [r1, #0xf8] + addeq r0, r0, r4 + streq r0, [r1, #0xf8] + b _02098B64 +_02098B48: + ldr r0, [sp, #0x8] + cmp r0, #0x0 + ldrsh r0, [r9, #0x70] + moveq r4, #0x0 + mvnne r4, #0x1b + bic r0, r0, #0x6 + strh r0, [r9, #0x70] +_02098B64: + cmp r4, #0x0 + blt _02098B9C + cmp r6, #0x0 + beq _02098B8C + ldr r1, [sp, #0x30] + cmp r1, #0x0 + ldrneh r0, [sp, #0x6] + strneh r0, [r6, #0x0] + ldrne r0, [sp, #0xc] + strne r0, [r1, #0x0] +_02098B8C: + ldrh r0, [r9, #0x74] + cmp r0, #0x0 + ldreqh r0, [sp, #0x4] + streqh r0, [r9, #0x74] +_02098B9C: + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r4 + add sp, sp, #0x14 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start FUN_02098BB4 +FUN_02098BB4: ; 0x02098BB4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + ldrsb r12, [r7, #0x73] + mov r6, r1 + mov r5, r2 + mov r4, r3 + cmp r12, #0x4 + bne _02098BF0 + ldr r4, [sp, #0x18] + str r4, [sp, #0x0] + bl FUN_020989BC + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_02098BF0: + ldr r12, [sp, #0x18] + str r12, [sp, #0x0] + bl FUN_02098AA4 + mvn r1, #0x5 + cmp r0, r1 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + ldr r1, [sp, #0x1c] + ands r1, r1, #0x1 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldr r12, [sp, #0x18] + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + str r12, [sp, #0x0] + bl FUN_020989BC + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_02098C4C +FUN_02098C4C: ; 0x02098C4C + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + ldr r5, [sp, #0x28] + mov r7, r0 + ands r0, r5, #0x2 + ldr r5, [r7, #0x64] + beq _02098C74 + cmp r5, #0x0 + movne r6, #0x1 + bne _02098C78 +_02098C74: + mov r6, #0x0 +_02098C78: + cmp r6, #0x0 + ldrnesb r4, [r5, #0xfe] + movne r0, #0x1 + strneb r0, [r5, #0xfe] + ldrsb r0, [r7, #0x73] + cmp r0, #0x1 + bne _02098CB4 + ldr r0, [sp, #0x20] + ldr r12, [sp, #0x24] + str r0, [sp, #0x0] + mov r0, r7 + str r12, [sp, #0x4] + bl FUN_02098670 + mov r8, r0 + b _02098CDC +_02098CB4: + ldr r0, [sp, #0x20] + ldr r12, [sp, #0x24] + str r0, [sp, #0x0] + mov r0, r7 + str r12, [sp, #0x4] + bl FUN_02098BB4 + movs r8, r0 + bmi _02098CDC + mov r0, r7 + bl FUN_02098810 +_02098CDC: + cmp r6, #0x0 + strneb r4, [r5, #0xfe] + mov r0, r8 + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FUN_02098CF4 +FUN_02098CF4: + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0xc + mov r9, r0 + mov r8, r1 + mov r7, r2 + mov r6, r3 + bl FUN_02099FA8 +_02098D10: ; 0x02098D10 + cmp r0, #0x0 + addne sp, sp, #0xc + mvnne r0, #0x1b + ldmneia sp!, {r4-r9,lr} + bxne lr + ldr r0, [sp, #0x2c] + ands r0, r0, #0x4 + bne _02098D3C + ldrsb r0, [r9, #0x72] + cmp r0, #0x0 + bne _02098D5C +_02098D3C: + ldrsb r0, [r9, #0x73] + cmp r0, #0x4 + addeq sp, sp, #0xc + mvneq r0, #0x1b + ldmeqia sp!, {r4-r9,lr} + bxeq lr + mov r4, #0x0 + b _02098D78 +_02098D5C: + bl OS_GetProcMode + cmp r0, #0x12 + addeq sp, sp, #0xc + mvneq r0, #0x1b + ldmeqia sp!, {r4-r9,lr} + bxeq lr + mov r4, #0x1 +_02098D78: + cmp r9, #0x0 + mov r1, #0x0 + beq _02098D90 + ldrsh r0, [r9, #0x70] + ands r0, r0, #0x1 + movne r1, #0x1 +_02098D90: + cmp r1, #0x0 + addeq sp, sp, #0xc + mvneq r0, #0x26 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + ldrsb r0, [r9, #0x73] + mov r1, #0x1 + cmp r0, #0x0 + beq _02098DBC + cmp r0, #0x4 + movne r1, #0x0 +_02098DBC: + cmp r1, #0x0 + beq _02098DEC + ldrsh r0, [r9, #0x70] + ands r0, r0, #0x4 + beq _02098DDC + ldrsh r0, [r9, #0x70] + ands r0, r0, #0x8 + beq _02098DEC +_02098DDC: + add sp, sp, #0xc + mvn r0, #0x37 + ldmia sp!, {r4-r9,lr} + bx lr +_02098DEC: + ands r0, r4, #0x1 + ldr r5, [r9, #0x64] + bne _02098E18 + add r0, r5, #0xe0 + bl OS_TryLockMutex +_02098E00: ; 0x02098E00 + cmp r0, #0x0 + bne _02098E20 + add sp, sp, #0xc + mvn r0, #0x5 + ldmia sp!, {r4-r9,lr} + bx lr +_02098E18: + add r0, r5, #0xe0 + bl OS_LockMutex +_02098E20: + ldr r0, [sp, #0x28] + ldr r12, [sp, #0x2c] + str r0, [sp, #0x0] + str r4, [sp, #0x4] + mov r0, r9 + mov r1, r8 + mov r2, r7 + mov r3, r6 + str r12, [sp, #0x8] + bl FUN_02098C4C + mov r4, r0 + add r0, r5, #0xe0 + bl OS_UnlockMutex + mov r0, r4 + add sp, sp, #0xc + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start FUN_02098E64 +FUN_02098E64: ; 0x02098E64 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r2 + ldr r5, [r6, #0x14] + ldr r4, [r6, #0x1c] + cmp r5, r1 + mov r7, r0 + movgt r5, r1 + movgt r4, #0x0 + bgt _02098E98 + sub r0, r1, r5 + cmp r4, r0 + movgt r4, r0 +_02098E98: + cmp r5, #0x0 + ble _02098EC8 + ldr r0, [r6, #0x10] + mov r1, r7 + mov r2, r5 + bl MI_CpuCopy8 + ldr r0, [r6, #0x10] + add r0, r0, r5 + str r0, [r6, #0x10] + ldr r0, [r6, #0x14] + sub r0, r0, r5 + str r0, [r6, #0x14] +_02098EC8: + cmp r4, #0x0 + ble _02098EF8 + ldr r0, [r6, #0x18] + mov r2, r4 + add r1, r7, r5 + bl MI_CpuCopy8 + ldr r0, [r6, #0x18] + add r0, r0, r4 + str r0, [r6, #0x18] + ldr r0, [r6, #0x1c] + sub r0, r0, r4 + str r0, [r6, #0x1c] +_02098EF8: + add r0, r5, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_02098F08 +FUN_02098F08: ; 0x02098F08 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _02098FBC ; =0x021D3498 + mov r4, r0 + ldr r0, [r1, #0x4] + ldr r5, [r0, #0xa4] + bl OS_DisableInterrupts +_02098F24: ; 0x02098F24 + cmp r5, #0x0 + beq _02098F74 + ldrh r3, [r5, #0x2e] + cmp r3, #0x0 + beq _02098F64 + ldrh r2, [r5, #0x2c] + cmp r2, #0x0 + beq _02098F64 + ldr r1, _02098FC0 ; =0x021C8CD4 + cmp r3, r2 + ldr r1, [r1, #0x24] + movgt r3, r2 + cmp r3, r1 + movgt r3, r1 + mov r5, r3, lsl #0x1 + b _02098F80 +_02098F64: + ldr r1, _02098FC0 ; =0x021C8CD4 + ldr r1, [r1, #0x24] + mov r5, r1, lsl #0x1 + b _02098F80 +_02098F74: + ldr r1, _02098FC0 ; =0x021C8CD4 + ldr r1, [r1, #0x24] + mov r5, r1, lsl #0x1 +_02098F80: + bl OS_RestoreInterrupts +_02098F84: ; 0x02098F84 + cmp r5, #0x0 + ble _02098FAC + mov r0, r4 + mov r1, r5 + bl _s32_div_f +_02098F98: ; 0x02098F98 + cmp r0, #0x0 + mulgt r0, r5, r0 + addgt sp, sp, #0x4 + ldmgtia sp!, {r4-r5,lr} + bxgt lr +_02098FAC: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_02098FBC: .word 0x021D3498 +_02098FC0: .word 0x021C8CD4 + + arm_func_start FUN_02098FC4 +FUN_02098FC4: ; 0x02098FC4 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r8, r0 + ldr r7, [r8, #0x4] + mov r4, #0x0 + ldrsb r0, [r7, #0x73] + ldr r6, [r7, #0x68] + mov r1, #0x1 + cmp r0, #0x0 + beq _02098FF4 + cmp r0, #0x4 + movne r1, r4 +_02098FF4: + cmp r1, #0x0 + beq _02099008 + ldrsh r0, [r7, #0x70] + ands r0, r0, #0x4 + beq _020990DC +_02099008: + ldr r2, [r8, #0x28] + cmp r2, #0x0 + beq _02099020 + ldrh r0, [r8, #0x24] + ldrh r1, [r8, #0x26] + bl FUN_0209CB78 +_02099020: + ldrsb r1, [r7, #0x73] + mov r0, #0x1 + cmp r1, #0x0 + beq _02099038 + cmp r1, #0x4 + movne r0, #0x0 +_02099038: + cmp r0, #0x0 + movne r2, #0x36 + moveq r2, #0x2a + ldr r0, [r7, #0x4c] + cmp r1, #0x0 + add r5, r0, r2 + beq _0209905C + cmp r1, #0x4 + bne _02099070 +_0209905C: + ldr r0, [r7, #0x48] + sub r0, r0, r2 + bl FUN_02098F08 + mov r9, r0 + b _02099078 +_02099070: + ldr r0, [r7, #0x48] + sub r9, r0, r2 +_02099078: + mov r0, r5 + mov r1, r9 + mov r2, r8 + bl FUN_02098E64 + mov r1, r0 + cmp r1, #0x0 + ble _020990E0 + mov r0, r5 + bl FUN_0209C030 +_0209909C: ; 0x0209909C + cmp r0, #0x0 + bgt _020990D4 + ldrsb r0, [r7, #0x73] + mov r1, #0x1 + cmp r0, #0x0 + beq _020990BC + cmp r0, #0x4 + movne r1, #0x0 +_020990BC: + cmp r1, #0x0 + ldrnesh r0, [r7, #0x70] + mvn r4, #0x4b + bicne r0, r0, #0xe + strneh r0, [r7, #0x70] + b _020990E0 +_020990D4: + add r4, r4, r0 + b _02099078 +_020990DC: + mvn r4, #0x4b +_020990E0: + ldrh r2, [r8, #0x20] + add r1, r6, #0x100 + add r0, r6, #0x104 + strh r2, [r1, #0x2] + bl OS_WakeupThread + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start FUN_02099104 +FUN_02099104: + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r9, r0 + ldr r6, [r9, #0x68] + mov r4, r1 + mov r8, r2 + ldr r1, [r6, #0x10c] + ldr r2, [sp, #0x28] + ldr r0, _0209929C ; =FUN_02098FC4 + mov r7, r3 + bl FUN_02097A98 + movs r5, r0 + addeq sp, sp, #0x4 + mvneq r0, #0x20 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + ldr r0, [sp, #0x28] + ands r0, r0, #0x1 + beq _02099164 + ldrsb r0, [r9, #0x73] + cmp r0, #0x1 + movne r0, #0x3 + strneb r0, [r5, #0xd] + bne _0209916C +_02099164: + mov r0, #0x0 + strb r0, [r5, #0xd] +_0209916C: + ldr r2, [r6, #0xf8] + add r1, r7, r8 + cmp r1, r2 + ldr r3, [r6, #0xfc] + bge _020991A0 + add r0, r3, r7 + str r0, [r5, #0x10] + str r8, [r5, #0x14] + mov r0, #0x0 + str r0, [r5, #0x18] + mov r7, r1 + str r0, [r5, #0x1c] + b _020991D8 +_020991A0: + add r0, r3, r7 + str r0, [r5, #0x10] + sub r0, r2, r7 + str r0, [r5, #0x14] + str r3, [r5, #0x18] + ldr r0, [r5, #0x14] + sub r0, r8, r0 + str r0, [r5, #0x1c] + ldr r7, [r5, #0x1c] + ldr r0, [r5, #0x14] + ldr r1, [r5, #0x18] + mov r2, r7 + add r0, r4, r0 + bl MI_CpuCopy8 +_020991D8: + ldr r1, [r5, #0x10] + ldr r2, [r5, #0x14] + mov r0, r4 + bl MI_CpuCopy8 + add r0, r6, #0x100 + ldrh r4, [r0, #0x0] + strh r7, [r5, #0x20] + ldrh r1, [r5, #0x20] + strh r1, [r0, #0x0] + ldrsb r0, [r9, #0x73] + cmp r0, #0x1 + bne _02099268 + ldrh r0, [r9, #0x74] + cmp r0, #0x0 + bne _02099224 + bl FUN_0209CC8C + strh r0, [r9, #0x74] + ldrh r0, [r9, #0x74] + strh r0, [r9, #0xa] +_02099224: + ldrh r0, [r9, #0x74] + strh r0, [r5, #0x24] + ldr r1, [r9, #0x78] + cmp r1, #0x0 + beq _02099244 + ldr r0, [sp, #0x24] + cmp r0, #0x0 + beq _02099258 +_02099244: + ldr r1, [sp, #0x24] + ldrh r0, [sp, #0x20] + str r1, [r5, #0x28] + strh r0, [r5, #0x26] + b _02099270 +_02099258: + str r1, [r5, #0x28] + ldrh r0, [r9, #0x76] + strh r0, [r5, #0x26] + b _02099270 +_02099268: + mov r0, #0x0 + str r0, [r5, #0x28] +_02099270: + ldr r0, [r6, #0x10c] + mov r1, r5 + bl FUN_02097948 +_0209927C: ; 0x0209927C + cmp r0, #0x0 + addne r0, r6, #0x100 + movne r8, #0x0 + strneh r4, [r0, #0x0] + mov r0, r8 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_0209929C: .word FUN_02098FC4 + + arm_func_start FUN_020992A0 +FUN_020992A0: + ldr r2, [r0, #0x68] + add r0, r2, #0x100 + ldrh r1, [r0, #0x0] + ldrh r0, [r0, #0x2] + ldr r2, [r2, #0xf8] + sub r0, r0, r1 + subs r0, r0, #0x1 + addmi r0, r0, r2 + bx lr + + arm_func_start FUN_020992C4 +FUN_020992C4: ; 0x020992C4 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r10, r0 + mov r9, r1 + mov r8, r2 + cmp r8, r9 + mov r11, r3 + ldr r7, [r10, #0x68] + movgt r8, r9 + bl OS_DisableInterrupts + ldr r1, [sp, #0x28] + str r0, [sp, #0x0] + and r5, r1, #0x1 + add r4, r7, #0x104 +_020992FC: + mov r0, r10 + bl FUN_020992A0 + mov r6, r0 + cmp r6, r8 + blt _02099328 + add r0, r7, #0x100 + ldrh r0, [r0, #0x0] + cmp r6, r9 + movge r6, r9 + str r0, [r11, #0x0] + b _02099340 +_02099328: + cmp r5, #0x0 + moveq r6, #0x0 + beq _02099340 + mov r0, r4 + bl OS_SleepThread + b _020992FC +_02099340: + ldr r0, [sp, #0x0] + bl OS_RestoreInterrupts + mov r0, r6 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FUN_02099358 +FUN_02099358: ; 0x02099358 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x1c + mov r10, r0 + ldr r4, [r10, #0x68] + ldrsb r0, [r10, #0x73] + ldr r4, [r4, #0x10c] + mov r9, r1 + cmp r0, #0x1 + ldr r0, [r4, #0x48] + mov r8, r2 + str r3, [sp, #0xc] + ldr r7, [sp, #0x40] + ldr r6, [sp, #0x44] + mov r4, #0x0 + bne _020993B4 + sub r0, r0, #0x2a + cmp r8, r0 + addgt sp, sp, #0x1c + mvngt r0, #0x22 + ldmgtia sp!, {r4-r11,lr} + bxgt lr + str r8, [sp, #0x10] + b _020993C4 +_020993B4: + sub r0, r0, #0x36 + str r0, [sp, #0x10] + cmp r8, r0 + strle r8, [sp, #0x10] +_020993C4: + cmp r8, #0x0 + ble _02099460 + and r11, r6, #0x1 +_020993D0: + ldr r2, [sp, #0x10] + mov r0, r10 + mov r1, r8 + add r3, sp, #0x14 + str r6, [sp, #0x0] + bl FUN_020992C4 + mov r5, r0 + cmp r5, #0x0 + ble _02099438 + ldr r0, [sp, #0xc] + mov r1, r9 + str r0, [sp, #0x0] + str r7, [sp, #0x4] + str r6, [sp, #0x8] + ldr r3, [sp, #0x14] + mov r0, r10 + mov r2, r5 + bl FUN_02099104 +_02099418: ; 0x02099418 + cmp r0, #0x0 + addle sp, sp, #0x1c + mvnle r0, #0x5 + ldmleia sp!, {r4-r11,lr} + bxle lr + add r9, r9, r5 + sub r8, r8, r5 + add r4, r4, r5 +_02099438: + cmp r11, #0x0 + bne _02099458 + cmp r5, #0x0 + bgt _02099460 + add sp, sp, #0x1c + mvn r0, #0x5 + ldmia sp!, {r4-r11,lr} + bx lr +_02099458: + cmp r8, #0x0 + bgt _020993D0 +_02099460: + mov r0, r4 + add sp, sp, #0x1c + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FUN_02099470 +FUN_02099470: ; 0x02099470 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, r3 + bl FUN_02099FA8 +_0209948C: ; 0x0209948C + cmp r0, #0x0 + addne sp, sp, #0x8 + mvnne r0, #0x1b + ldmneia sp!, {r4-r8,lr} + bxne lr + cmp r8, #0x0 + mov r1, #0x0 + beq _020994B8 + ldrsh r0, [r8, #0x70] + ands r0, r0, #0x1 + movne r1, #0x1 +_020994B8: + cmp r1, #0x0 + addeq sp, sp, #0x8 + mvneq r0, #0x26 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldrsb r0, [r8, #0x73] + mov r1, #0x1 + cmp r0, #0x0 + beq _020994E4 + cmp r0, #0x4 + movne r1, #0x0 +_020994E4: + cmp r1, #0x0 + beq _02099514 + ldrsh r0, [r8, #0x70] + ands r0, r0, #0x4 + beq _02099504 + ldrsh r0, [r8, #0x70] + ands r0, r0, #0x8 + beq _02099514 +_02099504: + add sp, sp, #0x8 + mvn r0, #0x37 + ldmia sp!, {r4-r8,lr} + bx lr +_02099514: + ldr r0, [sp, #0x24] + ldr r4, [r8, #0x68] + ands r0, r0, #0x4 + bne _02099530 + ldrsb r0, [r8, #0x72] + cmp r0, #0x0 + bne _02099554 +_02099530: + add r0, r4, #0xe0 + bl OS_TryLockMutex +_02099538: ; 0x02099538 + cmp r0, #0x0 + addeq sp, sp, #0x8 + mvneq r0, #0x5 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + mov r12, #0x0 + b _02099560 +_02099554: + add r0, r4, #0xe0 + bl OS_LockMutex + mov r12, #0x1 +_02099560: + ldr r1, [sp, #0x20] + mov r0, r8 + str r1, [sp, #0x0] + mov r1, r7 + mov r2, r6 + mov r3, r5 + str r12, [sp, #0x4] + bl FUN_02099358 + mov r5, r0 + add r0, r4, #0xe0 + bl OS_UnlockMutex + mov r0, r5 + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FUN_0209959C +FUN_0209959C: ; 0x0209959C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, [r0, #0x4] + mov r1, #0x1 + ldrsb r0, [r0, #0x73] + cmp r0, #0x0 + beq _020995C0 + cmp r0, #0x4 + movne r1, #0x0 +_020995C0: + cmp r1, #0x0 + beq _020995CC + bl FUN_0209C840 +_020995CC: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_020995DC +FUN_020995DC: ; 0x020995DC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + bl FUN_02099FA8 +_020995EC: ; 0x020995EC + cmp r0, #0x0 + addne sp, sp, #0x4 + mvnne r0, #0x1b + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r4, #0x0 + mov r1, #0x0 + beq _02099618 + ldrsh r0, [r4, #0x70] + ands r0, r0, #0x1 + movne r1, #0x1 +_02099618: + cmp r1, #0x0 + addeq sp, sp, #0x4 + mvneq r0, #0x26 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldrsh r0, [r4, #0x70] + ands r0, r0, #0x4 + beq _02099644 + ldrsh r0, [r4, #0x70] + ands r0, r0, #0x8 + beq _02099654 +_02099644: + add sp, sp, #0x4 + mvn r0, #0x37 + ldmia sp!, {r4-r5,lr} + bx lr +_02099654: + ldrsh r0, [r4, #0x70] + orr r0, r0, #0x8 + strh r0, [r4, #0x70] + ldr r5, [r4, #0x68] + cmp r5, #0x0 + beq _020996AC + ldr r1, [r5, #0x10c] + cmp r1, #0x0 + beq _020996AC + ldrsb r2, [r4, #0x72] + ldr r0, _020996BC ; =FUN_0209959C + bl FUN_02097A98 + movs r1, r0 + addeq sp, sp, #0x4 + mvneq r0, #0x20 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, [r5, #0x10c] + bl FUN_02097948 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020996AC: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020996BC: .word FUN_0209959C + + arm_func_start FUN_020996C0 +FUN_020996C0: ; 0x020996C0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r4, _02099704 ; =0x021C8D34 + mov r5, r0 + ldr r0, [r4, #0x0] + cmp r0, #0x0 + beq _020996F0 +_020996E0: + bl FUN_020997B8 +_020996E4: ; 0x020996E4 + ldr r0, [r4, #0x0] + cmp r0, #0x0 + bne _020996E0 +_020996F0: + mov r0, r5 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_02099704: .word 0x021C8D34 + + arm_func_start FUN_02099708 +FUN_02099708: ; 0x02099708 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + movs r8, r0 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + add r0, r8, #0x20 + bl OS_JoinThread + bl OS_DisableInterrupts + mov r7, r0 + bl OS_DisableScheduler + add r1, sp, #0x0 + mov r0, r8 + mov r2, #0x0 + bl OS_ReceiveMessage +_02099744: ; 0x02099744 + cmp r0, #0x0 + beq _0209979C + add r4, sp, #0x0 + mvn r6, #0xa + mov r5, #0x0 +_02099758: + ldr r0, [sp, #0x0] + cmp r0, #0x0 + beq _02099784 + ldr r0, [r0, #0x8] + cmp r0, #0x0 + beq _0209977C + mov r1, r6 + mov r2, r5 + bl OS_SendMessage +_0209977C: + ldr r0, [sp, #0x0] + bl FUN_02097A64 +_02099784: + mov r0, r8 + mov r1, r4 + mov r2, r5 + bl OS_ReceiveMessage +_02099794: ; 0x02099794 + cmp r0, #0x0 + bne _02099758 +_0209979C: + bl OS_EnableScheduler + bl OS_RescheduleThread + mov r0, r7 + bl OS_RestoreInterrupts + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FUN_020997B8 +FUN_020997B8: + stmdb sp!, {r4-r6,lr} + movs r4, r0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r0, #0x0 + strh r0, [r4, #0x70] + ldrsb r1, [r4, #0x73] + mov r2, #0x1 + cmp r1, #0x0 + beq _020997E8 + cmp r1, #0x4 + movne r2, r0 +_020997E8: + cmp r2, #0x0 + beq _02099804 + ldr r0, [r4, #0x68] + bl FUN_02099708 + ldr r0, [r4, #0x64] + bl FUN_02099708 + b _02099884 +_02099804: + cmp r1, #0x1 + bne _02099874 + ldr r0, [r4, #0x64] + ldr r0, [r0, #0x104] + cmp r0, #0x0 + beq _0209983C + ldr r5, _020998C0 ; =0x021C8CC0 +_02099820: + ldr r1, [r5, #0x0] + ldr r6, [r0, #0x0] + ldr r1, [r1, #0x1c] + blx r1 + mov r0, r6 + cmp r6, #0x0 + bne _02099820 +_0209983C: + ldr r0, [r4, #0x64] + mov r1, #0x0 + add r0, r0, #0x100 + strh r1, [r0, #0x8] + ldr r0, [r4, #0x64] + str r1, [r0, #0x100] + ldr r0, [r4, #0x64] + str r1, [r0, #0x104] + ldr r0, [r4, #0x64] + add r0, r0, #0x10c + bl OS_WakeupThread + ldr r0, [r4, #0x64] + bl FUN_02099708 + b _02099884 +_02099874: + cmp r1, #0x2 + bne _02099884 + ldr r0, [r4, #0x68] + bl FUN_02099708 +_02099884: + bl OS_DisableInterrupts + mov r5, r0 + mov r0, r4 + bl FUN_0209A054 + mov r0, r4 + bl FUN_02099FF0 + ldr r1, _020998C0 ; =0x021C8CC0 + mov r0, r4 + ldr r1, [r1, #0x0] + ldr r1, [r1, #0x1c] + blx r1 + mov r0, r5 + bl OS_RestoreInterrupts + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020998C0: .word 0x021C8CC0 + + arm_func_start FUN_020998C4 +FUN_020998C4: ; 0x020998C4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r4, [r0, #0x4] + mov r1, #0x1 + ldrsb r0, [r4, #0x73] + cmp r0, #0x0 + beq _020998E8 + cmp r0, #0x4 + movne r1, #0x0 +_020998E8: + cmp r1, #0x0 + beq _02099908 + ldr r0, [r4, #0x68] + add r0, r0, #0x20 + bl OS_JoinThread + bl FUN_0209C840 + bl FUN_0209C7AC + bl FUN_0209CB24 +_02099908: + bl FUN_0209CC10 + ldrsh r0, [r4, #0x70] + mov r1, #0x0 + bic r0, r0, #0x6 + strh r0, [r4, #0x70] + ldrsb r0, [r4, #0x73] + cmp r0, #0x2 + ldreq r0, [r4, #0x68] + ldrne r0, [r4, #0x64] + bl FUN_020979F8 + bl OS_DisableInterrupts + mov r5, r0 + mov r0, r4 + bl FUN_0209A054 + mov r0, r4 + bl FUN_0209A06C + mov r0, r5 + bl OS_RestoreInterrupts + ldrsh r1, [r4, #0x70] + mov r0, #0x0 + orr r1, r1, #0x20 + strh r1, [r4, #0x70] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_0209996C +FUN_0209996C: ; 0x0209996C + stmdb sp!, {r4,lr} + mov r4, r0 + cmp r4, #0x0 + mvnle r0, #0x1b + ldmleia sp!, {r4,lr} + bxle lr + bl FUN_02099F78 +_02099988: ; 0x02099988 + cmp r0, #0x0 + mvnne r0, #0x19 + ldmneia sp!, {r4,lr} + bxne lr + mov r0, r4 + bl FUN_02099FA8 +_020999A0: ; 0x020999A0 + cmp r0, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + cmp r4, #0x0 + mov r1, #0x0 + beq _020999C8 + ldrsh r0, [r4, #0x70] + ands r0, r0, #0x1 + movne r1, #0x1 +_020999C8: + cmp r1, #0x0 + mvneq r0, #0x26 + ldmeqia sp!, {r4,lr} + bxeq lr + ldrsh r0, [r4, #0x70] + ands r0, r0, #0x10 + mvnne r0, #0x19 + ldmneia sp!, {r4,lr} + bxne lr + ldrsh r0, [r4, #0x70] + mov r1, #0x1 + orr r0, r0, #0x18 + strh r0, [r4, #0x70] + ldrsb r0, [r4, #0x73] + cmp r0, #0x0 + beq _02099A10 + cmp r0, #0x4 + movne r1, #0x0 +_02099A10: + cmp r1, #0x0 + beq _02099A24 + ldr r0, [r4, #0x68] + mov r1, #0x0 + bl FUN_020979F8 +_02099A24: + ldr r0, _02099A54 ; =FUN_020998C4 + mov r1, r4 + mov r2, #0x1 + bl FUN_02097A98 + mov r1, r0 + mov r2, #0x0 + mov r0, r4 + str r2, [r1, #0x8] + bl FUN_020979DC +_02099A48: ; 0x02099A48 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02099A54: .word FUN_020998C4 + + arm_func_start FUN_02099A58 +FUN_02099A58: + stmdb sp!, {r4,lr} + movs r4, r0 + bmi _02099A88 + bl FUN_02099FA8 +_02099A68: ; 0x02099A68 + cmp r0, #0x0 + beq _02099A88 + mov r0, r4 + bl FUN_02099F78 +_02099A78: ; 0x02099A78 + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr +_02099A88: + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_02099A94 +FUN_02099A94: ; 0x02099A94 + stmdb sp!, {r4,lr} + ldr r0, _02099B10 ; =0x021C8CD0 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _02099AE8 + bl FUN_02099B14 + movs r4, r0 + bne _02099AE0 + ldr r0, _02099B10 ; =0x021C8CD0 + ldr r0, [r0, #0x0] + bl FUN_0209996C + ldr r0, _02099B10 ; =0x021C8CD0 + ldr r0, [r0, #0x0] + bl FUN_02099A58 +_02099ACC: ; 0x02099ACC + cmp r0, #0x0 + ldrne r0, _02099B10 ; =0x021C8CD0 + movne r1, #0x0 + strne r1, [r0, #0x0] + mvn r4, #0x19 +_02099AE0: + bl FUN_020996C0 + b _02099B04 +_02099AE8: + bl FUN_0209FD34 +_02099AEC: ; 0x02099AEC + cmp r0, #0x0 + mvneq r4, #0x19 + beq _02099B04 + mov r0, #0x0 + bl FUN_020A87BC + mov r4, #0x0 +_02099B04: + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02099B10: .word 0x021C8CD0 + + arm_func_start FUN_02099B14 +FUN_02099B14: ; 0x02099B14 + stmdb sp!, {r4-r6,lr} + ldr r4, _02099BBC ; =0x021C8CD0 + ldr r5, _02099BC0 ; =0x021C8D30 +_02099B20: + bl OS_DisableInterrupts + ldr r6, [r5, #0x0] + cmp r6, #0x0 + beq _02099B54 + ldr r2, [r4, #0x0] +_02099B34: + cmp r6, r2 + beq _02099B48 + ldrsh r1, [r6, #0x70] + ands r1, r1, #0x10 + beq _02099B54 +_02099B48: + ldr r6, [r6, #0x7c] + cmp r6, #0x0 + bne _02099B34 +_02099B54: + bl OS_RestoreInterrupts +_02099B58: ; 0x02099B58 + cmp r6, #0x0 + beq _02099B6C + mov r0, r6 + bl FUN_0209996C + b _02099B20 +_02099B6C: + ldr r0, _02099BC0 ; =0x021C8D30 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + beq _02099B98 + ldr r0, _02099BBC ; =0x021C8CD0 + ldr r0, [r0, #0x0] + cmp r1, r0 + bne _02099BB0 + ldr r0, [r1, #0x7c] + cmp r0, #0x0 + bne _02099BB0 +_02099B98: + ldr r0, _02099BC4 ; =0x021C8D34 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr +_02099BB0: + mvn r0, #0x19 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_02099BBC: .word 0x021C8CD0 +_02099BC0: .word 0x021C8D30 +_02099BC4: .word 0x021C8D34 + + arm_func_start FUN_02099BC8 +FUN_02099BC8: ; 0x02099BC8 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _02099C68 ; =0x021C8CC8 + ldr r0, [r1, #0x0] + cmp r0, #0x0 + ldreq r0, _02099C6C ; =0x021C8F04 + ldreq r0, [r0, #0x0] + streq r0, [r1, #0x0] + bl FUN_02099A94 + mvn r4, #0x19 + cmp r0, r4 + bne _02099C10 + mov r5, #0x64 +_02099BFC: + mov r0, r5 + bl OS_Sleep + bl FUN_02099A94 + cmp r0, r4 + beq _02099BFC +_02099C10: + bl FUN_02097B14 + movs r4, r0 + bmi _02099C58 + bl FUN_0209FCC4 +_02099C20: ; 0x02099C20 + mov r0, #0x0 + bl FUN_0209FD24 + ldr r0, _02099C70 ; =0x021C8CC0 + ldr r1, [r0, #0x0] + ldr r0, [r1, #0x28] + cmp r0, #0x0 + bne _02099C4C + ldr r0, _02099C74 ; =0x021C8CD4 + ldr r1, [r1, #0x1c] + ldr r0, [r0, #0x1c] + blx r1 +_02099C4C: + ldr r0, _02099C70 ; =0x021C8CC0 + mov r1, #0x0 + str r1, [r0, #0x0] +_02099C58: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_02099C68: .word 0x021C8CC8 +_02099C6C: .word 0x021C8F04 +_02099C70: .word 0x021C8CC0 +_02099C74: .word 0x021C8CD4 + + arm_func_start FUN_02099C78 +FUN_02099C78: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _02099CE0 ; =0x021C8F04 + ldr r2, [r0, #0x0] + cmp r2, #0x0 + bne _02099CBC + ldr r0, _02099CE4 ; =0x021C8CCC + ldr r0, [r0, #0x0] + and r0, r0, #0x3 + cmp r0, #0x1 + bne _02099CCC + bl OS_GetProcMode + cmp r0, #0x12 + beq _02099CCC + mov r0, #0xa + bl OS_Sleep + b _02099CCC +_02099CBC: + ldr r0, _02099CE8 ; =0x021C8CC8 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + streq r2, [r0, #0x0] +_02099CCC: + ldr r0, _02099CE0 ; =0x021C8F04 + ldr r0, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_02099CE0: .word 0x021C8F04 +_02099CE4: .word 0x021C8CCC +_02099CE8: .word 0x021C8CC8 + + arm_func_start FUN_02099CEC +FUN_02099CEC: ; 0x02099CEC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl FUN_02099C78 +_02099D00: ; 0x02099D00 + cmp r0, #0x0 + ldrne r1, _02099D24 ; =0x021C8F1C + mvneq r0, #0x26 + movne r0, #0x0 + strne r5, [r1, #0x0] + strne r4, [r1, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_02099D24: .word 0x021C8F1C + + arm_func_start FUN_02099D28 +FUN_02099D28: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r4, r0 + bl OS_DisableInterrupts + ldr r1, _02099D84 ; =0x021C8F1C + mov r5, r0 + ldr r7, [r1, #0x0] + mov r2, #0x0 + ldr r6, [r1, #0x4] + mov r0, r4 + str r2, [r1, #0x0] + str r2, [r1, #0x4] + bl FUN_0209AB80 + ldr r1, _02099D84 ; =0x021C8F1C + mov r4, r0 + mov r0, r5 + str r7, [r1, #0x0] + str r6, [r1, #0x4] + bl OS_RestoreInterrupts + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_02099D84: .word 0x021C8F1C + + arm_func_start FUN_02099D88 +FUN_02099D88: ; 0x02099D88 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x64 + movs r4, r0 + addeq sp, sp, #0x64 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r1, _02099E34 ; =0x021C8CC0 + mov r0, #0xfd0 + ldr r1, [r1, #0x0] + ldr r1, [r1, #0x18] + blx r1 + movs r5, r0 + addeq sp, sp, #0x64 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + add r0, sp, #0x0 + mov r1, #0x0 + mov r2, #0x64 + bl MI_CpuFill8 + ldr r3, _02099E38 ; =0x00000B68 + ldr r1, _02099E3C ; =0x00000466 + add r2, r5, r3 + add r0, sp, #0x0 + str r5, [sp, #0x40] + str r3, [sp, #0x3c] + str r2, [sp, #0x4c] + str r1, [sp, #0x48] + bl FUN_0209CC28 + mov r0, r4 + bl FUN_0209AB80 + mov r4, r0 + bl FUN_0209CC10 + ldr r1, _02099E34 ; =0x021C8CC0 + mov r0, r5 + ldr r1, [r1, #0x0] + ldr r1, [r1, #0x1c] + blx r1 + mov r0, r4 + add sp, sp, #0x64 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_02099E34: .word 0x021C8CC0 +_02099E38: .word 0x00000B68 +_02099E3C: .word 0x00000466 + + arm_func_start FUN_02099E40 +FUN_02099E40: + ldr r2, [r0, #0x64] + mov r3, #0x0 + cmp r2, #0x0 + beq _02099E88 + ldrsb r1, [r0, #0x73] + cmp r1, #0x1 + bne _02099E6C + ldr r0, [r2, #0x104] + cmp r0, #0x0 + ldrneh r3, [r0, #0x4] + b _02099E88 +_02099E6C: + cmp r1, #0x0 + beq _02099E7C + cmp r1, #0x4 + bne _02099E88 +_02099E7C: + ldr r1, [r0, #0x44] + ldr r0, [r2, #0xf8] + sub r3, r1, r0 +_02099E88: + mov r0, r3 + bx lr + + arm_func_start FUN_02099E90 +FUN_02099E90: + stmdb sp!, {r4-r6,lr} + mov r4, #0x0 + mov r5, r0 + bl FUN_02099FA8 +_02099EA0: ; 0x02099EA0 + cmp r0, #0x0 + orrne r4, r4, #0x80 + bne _02099F60 + ldrsh r0, [r5, #0x70] + ands r0, r0, #0x40 + ldrsb r0, [r5, #0x73] + orrne r4, r4, #0x20 + cmp r0, #0x1 + beq _02099ED0 + ldrsh r0, [r5, #0x70] + ands r0, r0, #0x4 + beq _02099F00 +_02099ED0: + bl OS_DisableInterrupts + mov r6, r0 + mov r0, r5 + bl FUN_02099E40 +_02099EE0: ; 0x02099EE0 + cmp r0, #0x0 + mov r0, r5 + orrgt r4, r4, #0x1 + bl FUN_020992A0 +_02099EF0: ; 0x02099EF0 + cmp r0, #0x0 + mov r0, r6 + orrgt r4, r4, #0x8 + bl OS_RestoreInterrupts +_02099F00: + ldrsb r0, [r5, #0x73] + mov r1, #0x1 + cmp r0, #0x0 + beq _02099F18 + cmp r0, #0x4 + movne r1, #0x0 +_02099F18: + cmp r1, #0x0 + beq _02099F60 + ldrsh r0, [r5, #0x70] + ands r0, r0, #0x4 + beq _02099F48 + ldrb r0, [r5, #0x8] + cmp r0, #0x4 + beq _02099F48 + ands r0, r4, #0x1 + ldreqsh r0, [r5, #0x70] + biceq r0, r0, #0x6 + streqh r0, [r5, #0x70] +_02099F48: + ldrsh r0, [r5, #0x70] + ands r0, r0, #0x2 + bne _02099F60 + ldrsh r0, [r5, #0x70] + ands r0, r0, #0x4 + orreq r4, r4, #0x40 +_02099F60: + mov r0, r4 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_02099F6C +FUN_02099F6C: + add r0, r0, #0x3 + bic r0, r0, #0x3 + bx lr + + arm_func_start FUN_02099F78 +FUN_02099F78: + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r1, r0 + ldr r0, _02099FA4 ; =0x021C8D34 + bl FUN_0209A008 +_02099F8C: ; 0x02099F8C + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_02099FA4: .word 0x021C8D34 + + arm_func_start FUN_02099FA8 +FUN_02099FA8: + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r1, r0 + cmp r1, #0x0 + ble _02099FCC + ldr r0, _02099FEC ; =0x021C8D30 + bl FUN_0209A008 +_02099FC4: ; 0x02099FC4 + cmp r0, #0x0 + bne _02099FDC +_02099FCC: + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {lr} + bx lr +_02099FDC: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_02099FEC: .word 0x021C8D30 + + arm_func_start FUN_02099FF0 +FUN_02099FF0: ; 0x02099FF0 + ldr ip, _0209A000 ; =FUN_0209A034 + mov r1, r0 + ldr r0, _0209A004 ; =0x021C8D34 + bx r12 + .balign 4 +_0209A000: .word FUN_0209A034 +_0209A004: .word 0x021C8D34 + + arm_func_start FUN_0209A008 +FUN_0209A008: + ldr r2, [r0, #0x0] + cmp r2, #0x0 + beq _0209A02C +_0209A014: + cmp r2, r1 + bxeq lr + add r0, r2, #0x7c + ldr r2, [r2, #0x7c] + cmp r2, #0x0 + bne _0209A014 +_0209A02C: + mov r0, #0x0 + bx lr + + arm_func_start FUN_0209A034 +FUN_0209A034: ; 0x0209A034 + stmdb sp!, {r4,lr} + mov r4, r1 + bl FUN_0209A008 +_0209A040: ; 0x0209A040 + cmp r0, #0x0 + ldrne r1, [r4, #0x7c] + strne r1, [r0, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_0209A054 +FUN_0209A054: ; 0x0209A054 + ldr ip, _0209A064 ; =FUN_0209A034 + mov r1, r0 + ldr r0, _0209A068 ; =0x021C8D30 + bx r12 + .balign 4 +_0209A064: .word FUN_0209A034 +_0209A068: .word 0x021C8D30 + + arm_func_start FUN_0209A06C +FUN_0209A06C: ; 0x0209A06C + ldr ip, _0209A07C ; =FUN_0209A084 + mov r1, r0 + ldr r0, _0209A080 ; =0x021C8D34 + bx r12 + .balign 4 +_0209A07C: .word FUN_0209A084 +_0209A080: .word 0x021C8D34 + + arm_func_start FUN_0209A084 +FUN_0209A084: ; 0x0209A084 + ldr r2, [r0, #0x0] + str r2, [r1, #0x7c] + str r1, [r0, #0x0] + bx lr + + arm_func_start FUN_0209A094 +FUN_0209A094: ; 0x0209A094 + ldr ip, _0209A0A4 ; =FUN_0209A084 + mov r1, r0 + ldr r0, _0209A0A8 ; =0x021C8D30 + bx r12 + .balign 4 +_0209A0A4: .word FUN_0209A084 +_0209A0A8: .word 0x021C8D30 + + arm_func_start FUN_0209A0AC +FUN_0209A0AC: ; 0x0209A0AC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r9, r2 + str r0, [sp, #0x0] + mov r0, #0x1 + str r0, [sp, #0x8] + mov r0, #0x0 + mov r8, r3 + mvn r2, #0x0 + cmp r8, r2 + cmpeq r9, r2 + movne r11, #0x1 + mov r10, r1 + moveq r11, #0x0 + str r0, [sp, #0x4] +_0209A0E8: + ldr r5, [sp, #0x4] + ldr r7, [sp, #0x0] + mov r6, r5 + cmp r10, #0x0 + bls _0209A128 +_0209A0FC: + ldrsh r1, [r7, #0x4] + ldr r0, [r7, #0x0] + orr r4, r1, #0xe0 + bl FUN_02099E90 +_0209A10C: ; 0x0209A10C + ands r0, r4, r0 + strh r0, [r7, #0x6] + add r6, r6, #0x1 + addne r5, r5, #0x1 + cmp r6, r10 + add r7, r7, #0x8 + blo _0209A0FC +_0209A128: + cmp r5, #0x0 + bgt _0209A160 + cmp r11, #0x0 + beq _0209A148 + mov r1, #0x0 + subs r0, r1, r9 + sbcs r0, r1, r8 + bge _0209A160 +_0209A148: + ldr r0, [sp, #0x8] + bl OS_Sleep + ldr r0, _0209A170 ; =0x0000020B + subs r9, r9, r0 + sbc r8, r8, #0x0 + b _0209A0E8 +_0209A160: + mov r0, r5 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0209A170: .word 0x0000020B + + arm_func_start FUN_0209A174 +FUN_0209A174: ; 0x0209A174 + mov r2, r0, lsr #0x18 + strb r2, [r1, #0x0] + mov r2, r0, lsr #0x10 + strb r2, [r1, #0x1] + mov r2, r0, lsr #0x8 + strb r2, [r1, #0x2] + strb r0, [r1, #0x3] + bx lr + + arm_func_start FUN_0209A194 +FUN_0209A194: ; 0x0209A194 + stmdb sp!, {r4,lr} + sub sp, sp, #0x18 + cmp r0, #0x2 + mov r4, r2 + addne sp, sp, #0x18 + movne r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + cmp r3, #0x10 + addcc sp, sp, #0x18 + movcc r0, #0x0 + ldmccia sp!, {r4,lr} + bxcc lr + mov r0, r1 + add r1, sp, #0xc + mov r2, #0x4 + bl MI_CpuCopy8 + ldr r0, [sp, #0xc] + add r1, sp, #0x10 + bl FUN_0209A174 + ldrb r1, [sp, #0x12] + ldr r2, _0209A220 ; =0x0210620C + mov r0, r4 + str r1, [sp, #0x0] + ldrb r3, [sp, #0x11] + mov r1, #0x10 + str r3, [sp, #0x4] + ldrb r3, [sp, #0x10] + str r3, [sp, #0x8] + ldrb r3, [sp, #0x13] + bl OS_SNPrintf + mov r0, r4 + add sp, sp, #0x18 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209A220: .word 0x0210620C + + arm_func_start FUN_0209A224 +FUN_0209A224: ; 0x0209A224 + stmdb sp!, {r4,lr} + mov r4, r1 + bl FUN_02099D28 +_0209A230: ; 0x0209A230 + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + mov r2, r0, lsr #0x18 + mov r1, r0, lsr #0x8 + mov r3, r0, lsl #0x8 + mov r12, r0, lsl #0x18 + and r2, r2, #0xff + and r0, r1, #0xff00 + and r1, r3, #0xff0000 + orr r0, r2, r0 + and r2, r12, #0xff000000 + orr r0, r1, r0 + orr r0, r2, r0 + str r0, [r4, #0x0] + mov r0, #0x1 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_0209A27C +FUN_0209A27C: ; 0x0209A27C + stmdb sp!, {r0-r3} + + arm_func_start FUN_0209A280 +FUN_0209A280: ; 0x0209A280 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _0209A2B0 ; =0x021C8D5C + add r1, sp, #0x8 + mov r0, #0x2 + mov r3, #0x10 + bl FUN_0209A194 + ldr r0, _0209A2B0 ; =0x021C8D5C + add sp, sp, #0x4 + ldmia sp!, {lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_0209A2B0: .word 0x021C8D5C + + arm_func_start THUNK_FUN_02099BC8 +THUNK_FUN_02099BC8: ; 0x0209A2B4 + ldr ip, _0209A2BC ; =FUN_02099BC8 + bx r12 + .balign 4 +_0209A2BC: .word FUN_02099BC8 + + arm_func_start FUN_0209A2C0 +FUN_0209A2C0: ; 0x0209A2C0 + stmdb sp!, {r4-r8,lr} + ldr r1, [r0, #0xc] + ldr ip, _0209A430 ; =0x021C8D6C + cmp r1, #0x1 + moveq r1, #0x1 + movne r1, #0x0 + str r1, [r12, #0x0] + ldr r6, [r0, #0x10] + ldr r5, _0209A434 ; =FUN_0209A484 + mov r2, r6, lsr #0x18 + mov r1, r6, lsr #0x8 + mov r3, r6, lsl #0x8 + and r2, r2, #0xff + and r1, r1, #0xff00 + mov r6, r6, lsl #0x18 + orr r1, r2, r1 + and r3, r3, #0xff0000 + orr r1, r3, r1 + and r2, r6, #0xff000000 + orr r1, r2, r1 + str r1, [r12, #0x4] + ldr r7, [r0, #0x14] + ldr r4, _0209A438 ; =FUN_0209A444 + mov r2, r7, lsr #0x18 + mov r1, r7, lsr #0x8 + mov r6, r7, lsl #0x8 + and r2, r2, #0xff + and r1, r1, #0xff00 + mov r7, r7, lsl #0x18 + orr r1, r2, r1 + and r6, r6, #0xff0000 + and r2, r7, #0xff000000 + orr r1, r6, r1 + orr r1, r2, r1 + str r1, [r12, #0x8] + ldr r1, [r0, #0x18] + ldr r3, _0209A43C ; =0x021C8D40 + mov r7, r1, lsr #0x18 + mov r6, r1, lsr #0x8 + mov r8, r1, lsl #0x8 + and r7, r7, #0xff + and r6, r6, #0xff00 + mov r1, r1, lsl #0x18 + orr r6, r7, r6 + and r8, r8, #0xff0000 + and r7, r1, #0xff000000 + orr r1, r8, r6 + orr r1, r7, r1 + str r1, [r12, #0xc] + ldr r1, [r0, #0x1c] + ldr r2, _0209A440 ; =0x021C8D3C + mov r7, r1, lsr #0x18 + mov r6, r1, lsr #0x8 + mov r8, r1, lsl #0x8 + and r7, r7, #0xff + and r6, r6, #0xff00 + mov r1, r1, lsl #0x18 + orr r6, r7, r6 + and r8, r8, #0xff0000 + and r7, r1, #0xff000000 + orr r1, r8, r6 + orr r1, r7, r1 + str r1, [r12, #0x10] + ldr r1, [r0, #0x20] + mov lr, #0x40 + mov r7, r1, lsr #0x18 + mov r6, r1, lsr #0x8 + mov r8, r1, lsl #0x8 + and r7, r7, #0xff + and r6, r6, #0xff00 + mov r1, r1, lsl #0x18 + orr r6, r7, r6 + and r8, r8, #0xff0000 + and r7, r1, #0xff000000 + orr r1, r8, r6 + orr r1, r7, r1 + str r5, [r12, #0x18] + str r4, [r12, #0x1c] + str r1, [r12, #0x14] + ldr r1, [r0, #0x4] + str r1, [r3, #0x0] + ldr r1, [r0, #0x8] + str lr, [r12, #0x20] + str r1, [r2, #0x0] + ldr r1, [r0, #0x2c] + str r1, [r12, #0x30] + ldr r1, [r0, #0x30] + mov r0, r12 + str r1, [r12, #0x34] + bl FUN_02097834 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0209A430: .word 0x021C8D6C +_0209A434: .word FUN_0209A484 +_0209A438: .word FUN_0209A444 +_0209A43C: .word 0x021C8D40 +_0209A440: .word 0x021C8D3C + + arm_func_start FUN_0209A444 +FUN_0209A444: ; 0x0209A444 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + ldr r1, _0209A480 ; =0x021C8D3C + ldr r2, [r0, #-0x4] + ldr r3, [r1, #0x0] + sub r1, r0, #0x4 + mov r0, #0x0 + blx r3 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_0209A480: .word 0x021C8D3C + + arm_func_start FUN_0209A484 +FUN_0209A484: ; 0x0209A484 + stmdb sp!, {r4,lr} + ldr r1, _0209A4B0 ; =0x021C8D40 + add r4, r0, #0x4 + ldr r2, [r1, #0x0] + mov r1, r4 + mov r0, #0x0 + blx r2 + cmp r0, #0x0 + strne r4, [r0], #0x4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209A4B0: .word 0x021C8D40 + + arm_func_start FUN_0209A4B4 +FUN_0209A4B4: ; 0x0209A4B4 + cmp r0, #0x0 + mvneq r0, #0x0 + bxeq lr + cmp r1, #0x3 + beq _0209A4D4 + cmp r1, #0x4 + beq _0209A4E8 + b _0209A4FC +_0209A4D4: + ldrsb r0, [r0, #0x72] + cmp r0, #0x1 + moveq r0, #0x0 + movne r0, #0x4 + bx lr +_0209A4E8: + ands r1, r2, #0x4 + movne r1, #0x0 + strneb r1, [r0, #0x72] + moveq r1, #0x1 + streqb r1, [r0, #0x72] +_0209A4FC: + mov r0, #0x0 + bx lr + + arm_func_start FUN_0209A504 +FUN_0209A504: ; 0x0209A504 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + mov r4, r1 + add r1, sp, #0x0 + add r2, sp, #0x4 + bl FUN_02098120 +_0209A51C: ; 0x0209A51C + cmp r0, #0x0 + addlt sp, sp, #0x8 + ldmltia sp!, {r4,lr} + bxlt lr + ldrh r1, [sp, #0x0] + mov r2, r1, asr #0x8 + mov r1, r1, lsl #0x8 + and r2, r2, #0xff + and r1, r1, #0xff00 + orr r1, r2, r1 + strh r1, [r4, #0x2] + ldr r12, [sp, #0x4] + mov r2, r12, lsr #0x18 + mov r1, r12, lsr #0x8 + mov r3, r12, lsl #0x8 + mov r12, r12, lsl #0x18 + and r2, r2, #0xff + and r1, r1, #0xff00 + and r3, r3, #0xff0000 + orr r1, r2, r1 + and r2, r12, #0xff000000 + orr r1, r3, r1 + orr r1, r2, r1 + str r1, [r4, #0x4] + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_0209A588 +FUN_0209A588: ; 0x0209A588 + ldr ip, _0209A590 ; =FUN_0209822C + bx r12 + .balign 4 +_0209A590: .word FUN_0209822C + + arm_func_start FUN_0209A594 +FUN_0209A594: ; 0x0209A594 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r12, [r1, #0x0] + ldr r0, [r0, #0x0] + mov r2, r12, lsr #0x18 + mov r4, r0, lsr #0x18 + mov lr, r0, lsr #0x8 + mov r1, r12, lsr #0x8 + mov r5, r0, lsl #0x8 + mov r3, r12, lsl #0x8 + mov r0, r0, lsl #0x18 + mov r12, r12, lsl #0x18 + and r4, r4, #0xff + and lr, lr, #0xff00 + and r2, r2, #0xff + and r1, r1, #0xff00 + and r5, r5, #0xff0000 + orr r4, r4, lr + and r3, r3, #0xff0000 + orr r1, r2, r1 + and lr, r0, #0xff000000 + orr r0, r5, r4 + and r2, r12, #0xff000000 + orr r1, r3, r1 + orr r0, lr, r0 + orr r1, r2, r1 + bl FUN_02099CEC + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_0209A60C +FUN_0209A60C: ; 0x0209A60C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FUN_02099C78 + mov r2, r0, lsr #0x18 + mov r1, r0, lsr #0x8 + mov r3, r0, lsl #0x8 + mov r12, r0, lsl #0x18 + and r2, r2, #0xff + and r0, r1, #0xff00 + and r1, r3, #0xff0000 + orr r0, r2, r0 + and r2, r12, #0xff000000 + orr r0, r1, r0 + orr r0, r2, r0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_0209A650 +FUN_0209A650: ; 0x0209A650 + stmdb sp!, {r4-r6,lr} + movs r5, r0 + mov r4, r1 + mvneq r0, #0x26 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + bl FUN_02099C78 +_0209A66C: ; 0x0209A66C + cmp r5, #0x0 + ldrneh r1, [r5, #0x74] + mov r2, r0, lsr #0x18 + mov r6, #0x8 + moveq r1, #0x0 + cmp r0, #0x0 + moveq r1, #0x0 + mov r1, r1, lsl #0x10 + mov r3, r1, lsr #0x10 + mov r5, r3, asr #0x8 + mov lr, r3, lsl #0x8 + strb r6, [r4, #0x0] + mov r6, #0x2 + mov r1, r0, lsr #0x8 + mov r3, r0, lsl #0x8 + mov r12, r0, lsl #0x18 + and r0, r1, #0xff00 + and r2, r2, #0xff + orr r0, r2, r0 + and r1, r3, #0xff0000 + and r5, r5, #0xff + and lr, lr, #0xff00 + strb r6, [r4, #0x1] + orr r3, r5, lr + and r2, r12, #0xff000000 + orr r0, r1, r0 + strh r3, [r4, #0x2] + orr r0, r2, r0 + str r0, [r4, #0x4] + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_0209A6EC +FUN_0209A6EC: ; 0x0209A6EC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl FUN_02099D88 + movs r4, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, _0209A7A4 ; =0x021C8DA4 + ldr r2, _0209A7A8 ; =0x00000101 + mov r1, #0x0 + bl MI_CpuFill8 + ldr r0, _0209A7A4 ; =0x021C8DA4 + ldr r2, _0209A7A8 ; =0x00000101 + mov r1, r5 + bl STD_CopyLString + mov r1, r4, lsr #0x18 + mov r0, r4, lsr #0x8 + mov r2, r4, lsl #0x8 + mov r3, r4, lsl #0x18 + and r1, r1, #0xff + and r0, r0, #0xff00 + and r2, r2, #0xff0000 + orr r0, r1, r0 + and r3, r3, #0xff000000 + orr r1, r2, r0 + ldr r5, _0209A7A4 ; =0x021C8DA4 + ldr r0, _0209A7AC ; =0x021C8D4C + ldr ip, _0209A7B0 ; =0x021C8D44 + mov r4, #0x0 + ldr r2, _0209A7B4 ; =0x021C8D38 + orr r1, r3, r1 + mov lr, #0x2 + mov r3, #0x4 + str r5, [r0, #0x0] + str r4, [r0, #0x4] + strh lr, [r0, #0x8] + strh r3, [r0, #0xa] + str r12, [r0, #0xc] + str r2, [r12, #0x0] + str r4, [r12, #0x4] + str r1, [r2, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_0209A7A4: .word 0x021C8DA4 +_0209A7A8: .word 0x00000101 +_0209A7AC: .word 0x021C8D4C +_0209A7B0: .word 0x021C8D44 +_0209A7B4: .word 0x021C8D38 + + arm_func_start thunk_FUN_0209996c +thunk_FUN_0209996c: ; 0x0209A7B8 + ldr ip, _0209A7C0 ; =FUN_0209996C + bx r12 + .balign 4 +_0209A7C0: .word FUN_0209996C + + arm_func_start thunk_FUN_020995dc +thunk_FUN_020995dc: ; 0x0209A7C4 + ldr ip, _0209A7CC ; =FUN_020995DC + bx r12 + .balign 4 +_0209A7CC: .word FUN_020995DC + + arm_func_start FUN_0209A7D0 +FUN_0209A7D0: ; 0x0209A7D0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + ldr r5, [sp, #0x20] + cmp r5, #0x0 + moveq r5, #0x0 + moveq r4, r5 + beq _0209A83C + ldrh r4, [r5, #0x2] + ldr r6, [r5, #0x4] + mov r7, r4, asr #0x8 + mov r12, r4, lsl #0x8 + mov r4, r6, lsr #0x18 + mov lr, r6, lsr #0x8 + mov r5, r6, lsl #0x8 + mov r6, r6, lsl #0x18 + and r7, r7, #0xff + and r12, r12, #0xff00 + orr r7, r7, r12 + and r4, r4, #0xff + and lr, lr, #0xff00 + and r5, r5, #0xff0000 + orr r4, r4, lr + mov r12, r7, lsl #0x10 + orr r4, r5, r4 + and r6, r6, #0xff000000 + mov r5, r12, lsr #0x10 + orr r4, r6, r4 +_0209A83C: + str r4, [sp, #0x0] + str r3, [sp, #0x4] + mov r3, r5 + bl FUN_02099470 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_0209A858 +FUN_0209A858: ; 0x0209A858 + stmdb sp!, {lr} + sub sp, sp, #0xc + mov r12, #0x0 + str r12, [sp, #0x0] + str r3, [sp, #0x4] + mov r3, r12 + bl FUN_02099470 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_0209A880 +FUN_0209A880: ; 0x0209A880 + stmdb sp!, {lr} + sub sp, sp, #0x14 + add r12, sp, #0xc + str r12, [sp, #0x0] + str r3, [sp, #0x4] + add r3, sp, #0x8 + bl FUN_02098CF4 +_0209A89C: ; 0x0209A89C + cmp r0, #0x0 + addlt sp, sp, #0x14 + ldmltia sp!, {lr} + bxlt lr + ldr r1, [sp, #0x18] + cmp r1, #0x0 + addeq sp, sp, #0x14 + ldmeqia sp!, {lr} + bxeq lr + ldrh r2, [sp, #0x8] + mov r3, r2, asr #0x8 + mov r2, r2, lsl #0x8 + and r3, r3, #0xff + and r2, r2, #0xff00 + orr r2, r3, r2 + strh r2, [r1, #0x2] + ldr lr, [sp, #0xc] + mov r3, lr, lsr #0x18 + mov r2, lr, lsr #0x8 + mov r12, lr, lsl #0x8 + mov lr, lr, lsl #0x18 + and r3, r3, #0xff + and r2, r2, #0xff00 + and r12, r12, #0xff0000 + orr r2, r3, r2 + and r3, lr, #0xff000000 + orr r2, r12, r2 + orr r2, r3, r2 + str r2, [r1, #0x4] + add sp, sp, #0x14 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_0209A91C +FUN_0209A91C: ; 0x0209A91C + stmdb sp!, {lr} + sub sp, sp, #0xc + mov r12, #0x0 + str r12, [sp, #0x0] + str r3, [sp, #0x4] + mov r3, r12 + bl FUN_02098CF4 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_0209A944 +FUN_0209A944: ; 0x0209A944 + stmdb sp!, {r4,lr} + ldrh r2, [r1, #0x2] + ldr lr, [r1, #0x4] + mov r4, r2, asr #0x8 + mov r1, r2, lsl #0x8 + mov r3, lr, lsr #0x18 + mov r2, lr, lsr #0x8 + mov r12, lr, lsl #0x8 + mov lr, lr, lsl #0x18 + and r4, r4, #0xff + and r1, r1, #0xff00 + orr r1, r4, r1 + mov r1, r1, lsl #0x10 + and r3, r3, #0xff + and r2, r2, #0xff00 + and r12, r12, #0xff0000 + orr r2, r3, r2 + and r3, lr, #0xff000000 + orr r2, r12, r2 + mov r1, r1, lsr #0x10 + orr r2, r3, r2 + bl FUN_020983B0 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_0209A9A4 +FUN_0209A9A4: ; 0x0209A9A4 + ldrh r1, [r1, #0x2] + ldr ip, _0209A9CC ; =FUN_020984B4 + mov r2, r1, asr #0x8 + mov r1, r1, lsl #0x8 + and r2, r2, #0xff + and r1, r1, #0xff00 + orr r1, r2, r1 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + bx r12 + .balign 4 +_0209A9CC: .word FUN_020984B4 + + arm_func_start FUN_0209A9D0 +FUN_0209A9D0: ; 0x0209A9D0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r1, #0x1 + bne _0209A9F4 + ldr r0, _0209AA08 ; =0x021061DC + bl FUN_02097F70 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_0209A9F4: + ldr r0, _0209AA0C ; =0x021061C4 + bl FUN_02097F70 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_0209AA08: .word 0x021061DC +_0209AA0C: .word 0x021061C4 + + arm_func_start FUN_0209AA10 +FUN_0209AA10: ; 0x0209AA10 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + ldr r6, [r7, #0x4] + ldr r5, [r6, #0x64] + add r0, r5, #0xe0 + ldr r4, [r5, #0xc4] + bl OS_LockMutex + ldr r1, [r7, #0x10] + cmp r1, #0x0 + beq _0209AA54 + mov r0, #0x1 + str r1, [r4, #0xc] + bl FUN_020A02EC + mov r0, #0x4 + strb r0, [r6, #0x73] + b _0209AA68 +_0209AA54: + mov r0, #0x0 + strb r0, [r6, #0x73] + bl FUN_020A02EC +_0209AA60: ; 0x0209AA60 + mov r0, #0x0 + str r0, [r4, #0xc] +_0209AA68: + add r0, r5, #0xe0 + bl OS_UnlockMutex +_0209AA70: ; 0x0209AA70 + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_0209AA80 +FUN_0209AA80: ; 0x0209AA80 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + ldr r0, _0209AACC ; =FUN_0209AA10 + mov r1, r5 + mov r2, #0x1 + bl FUN_02097A98 + movs r1, r0 + addeq sp, sp, #0x4 + mvneq r0, #0x20 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + mov r0, r5 + str r4, [r1, #0x10] + bl FUN_02097958 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_0209AACC: .word FUN_0209AA10 + + arm_func_start FUN_0209AAD0 +FUN_0209AAD0: ; 0x0209AAD0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl FUN_02099FA8 +_0209AAE4: ; 0x0209AAE4 + cmp r0, #0x0 + addne sp, sp, #0x4 + mvnne r0, #0x1b + ldmneia sp!, {r4-r5,lr} + bxne lr + ldrsb r0, [r5, #0x73] + mov r1, #0x1 + cmp r0, #0x0 + beq _0209AB10 + cmp r0, #0x4 + movne r1, #0x0 +_0209AB10: + cmp r1, #0x0 + addeq sp, sp, #0x4 + mvneq r0, #0x1b + ldmeqia sp!, {r4-r5,lr} + bxeq lr + cmp r5, #0x0 + mov r1, #0x0 + beq _0209AB3C + ldrsh r0, [r5, #0x70] + ands r0, r0, #0x1 + movne r1, #0x1 +_0209AB3C: + cmp r1, #0x0 + addeq sp, sp, #0x4 + mvneq r0, #0x26 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldrsh r0, [r5, #0x70] + ands r0, r0, #0x2 + addne sp, sp, #0x4 + mvnne r0, #0x1b + ldmneia sp!, {r4-r5,lr} + bxne lr + mov r0, r5 + mov r1, r4 + bl FUN_0209AA80 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_0209AB80 +FUN_0209AB80: ; 0x0209AB80 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + ldr r6, _0209ACC0 ; =0x021C8F24 + mov r9, #0x0 + ldr r11, [r6, #0x8] + ldr r2, [r6, #0x0] + ldr r1, [r6, #0x4] + umull r5, r4, r11, r2 + mla r4, r11, r1, r4 + ldr r10, [r6, #0xc] + ldr r3, [r6, #0x10] + mla r4, r10, r2, r4 + adds r5, r3, r5 + ldr r1, [r6, #0x14] + umull r8, r7, r11, r5 + adc r4, r1, r4 + mla r7, r11, r4, r7 + mla r7, r10, r5, r7 + mov r2, r9, lsl #0x10 + adds r8, r3, r8 + str r5, [r6, #0x0] + adc r5, r1, r7 + mov r3, r9, lsl #0x10 + orr r2, r2, r4, lsr #0x10 + str r4, [r6, #0x4] + orr r3, r3, r5, lsr #0x10 + add r1, sp, #0x4 + mov r10, r0 + strh r2, [sp, #0x8] + str r8, [r6, #0x0] + str r5, [r6, #0x4] + strh r3, [sp, #0xa] + bl FUN_0209AD34 +_0209AC04: ; 0x0209AC04 + cmp r0, #0x0 + ldrne r0, [sp, #0x4] + addne sp, sp, #0xc + ldmneia sp!, {r4-r11,lr} + bxne lr + mov r0, #0x1 + ldr r6, _0209ACC4 ; =0x021C8F1C + strb r0, [sp, #0x0] + strb r0, [sp, #0x1] + add r5, sp, #0x8 + mov r4, r9 + mov r11, r9 +_0209AC34: + mov r8, r11 + add r7, sp, #0x0 +_0209AC3C: + ldrb r0, [r7, #0x0] + cmp r0, #0x0 + beq _0209AC80 + mov r0, r8, lsl #0x1 + ldrh r2, [r5, r0] + ldr r1, [r6, r8, lsl #0x2] + mov r0, r10 + bl FUN_0209ACC8 + str r0, [sp, #0x4] + cmp r0, #0x0 + beq _0209AC74 + mvn r1, #0x0 + cmp r0, r1 + bne _0209AC9C +_0209AC74: + mvn r1, #0x0 + cmp r0, r1 + streqb r4, [r7, #0x0] +_0209AC80: + add r8, r8, #0x1 + cmp r8, #0x2 + add r7, r7, #0x1 + blt _0209AC3C + add r9, r9, #0x1 + cmp r9, #0x3 + blt _0209AC34 +_0209AC9C: + ldr r1, [sp, #0x4] + mvn r0, #0x0 + cmp r1, r0 + moveq r0, #0x0 + streq r0, [sp, #0x4] + ldr r0, [sp, #0x4] + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0209ACC0: .word 0x021C8F24 +_0209ACC4: .word 0x021C8F1C + + arm_func_start FUN_0209ACC8 +FUN_0209ACC8: ; 0x0209ACC8 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + movs r5, r1 + mov r6, r0 + mov r4, r2 + addeq sp, sp, #0x8 + mvneq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + bl FUN_0209CB44 + bl FUN_0209CBE8 + mov r2, r5 + mov r0, #0x0 + mov r1, #0x35 + bl FUN_0209CB78 + mov r0, r6 + mov r2, r4 + mov r3, #0x0 + str r3, [sp, #0x0] + mov r1, #0x1 + bl FUN_0209AE18 + mov r4, r0 + bl FUN_0209CB24 + mov r0, r4 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_0209AD34 +FUN_0209AD34: + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + mov r6, #0x0 + mov r8, r0 + mov r7, r1 + mov r5, r6 + add r4, sp, #0x0 +_0209AD50: + mov r0, r8 + mov r1, r4 + mov r6, r6, lsl #0x8 + bl FUN_0209ADE4 + ldr r2, [sp, #0x0] + cmp r8, r2 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + mov r8, r2 + cmp r0, #0xff + bhi _0209ADB0 + cmp r5, #0x3 + beq _0209AD9C + ldrb r1, [r2, #0x0] + add r8, r2, #0x1 + cmp r1, #0x2e + bne _0209ADB0 +_0209AD9C: + cmp r5, #0x3 + bne _0209ADC0 + ldrb r1, [r8, #0x0] + cmp r1, #0x0 + beq _0209ADC0 +_0209ADB0: + add sp, sp, #0x8 + mov r0, #0x0 + ldmia sp!, {r4-r8,lr} + bx lr +_0209ADC0: + add r5, r5, #0x1 + cmp r5, #0x4 + orr r6, r6, r0 + blt _0209AD50 + str r6, [r7, #0x0] + mov r0, #0x1 + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FUN_0209ADE4 +FUN_0209ADE4: ; 0x0209ADE4 + str r0, [r1, #0x0] + mov r12, #0x0 + mov r2, #0xa +_0209ADF0: + ldrb r3, [r0, #0x0] + sub r3, r3, #0x30 + and r3, r3, #0xff + cmp r3, #0x9 + mlals r12, r2, r12, r3 + addls r0, r0, #0x1 + strls r0, [r1, #0x0] + bls _0209ADF0 + mov r0, r12 + bx lr + + arm_func_start FUN_0209AE18 +FUN_0209AE18: ; 0x0209AE18 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4c + mov r9, r2 + mov r2, r9, asr #0x8 + mov r10, r1 + orr r1, r2, r9, lsl #0x8 + strh r1, [sp, #0x10] + cmp r10, #0x20 + mov r5, #0x0 + movne r1, #0x1 + strneh r1, [sp, #0x12] + ldreq r1, _0209B0C8 ; =0x00001001 + strh r5, [sp, #0x16] + streqh r1, [sp, #0x12] + mov r1, #0x100 + strh r1, [sp, #0x14] + add r1, sp, #0x1c + strh r5, [sp, #0x18] + strh r5, [sp, #0x1a] + str r5, [sp, #0xc] + ldrb r6, [r0], #0x1 + str r3, [sp, #0x0] + ldr r8, [sp, #0x70] + add r2, r1, #0x1 + cmp r6, #0x0 + beq _0209AED8 + add r4, sp, #0x10 +_0209AE84: + cmp r6, #0x2e + beq _0209AEB8 + sub r3, r2, r4 + cmp r3, #0x3c + addge sp, sp, #0x4c + mvnge r0, #0x0 + ldmgeia sp!, {r4-r11,lr} + bxge lr + strb r6, [r2], #0x1 + ldr r3, [sp, #0xc] + add r3, r3, #0x1 + str r3, [sp, #0xc] + b _0209AECC +_0209AEB8: + ldr r3, [sp, #0xc] + strb r3, [r1, #0x0] + mov r1, r2 + str r5, [sp, #0xc] + add r2, r2, #0x1 +_0209AECC: + ldrb r6, [r0], #0x1 + cmp r6, #0x0 + bne _0209AE84 +_0209AED8: + ldr r0, [sp, #0xc] + mov r3, #0x0 + strb r0, [r1, #0x0] + strb r3, [r2, #0x0] + mov r0, r10, lsr #0x8 + strb r0, [r2, #0x1] + strb r10, [r2, #0x2] + strb r3, [r2, #0x3] + mov r3, #0x1 + add r0, sp, #0x10 + add r1, r2, #0x5 + sub r1, r1, r0 + strb r3, [r2, #0x4] + bl FUN_0209C030 + mov r6, #0x0 + bl OS_GetTick + mov r5, r0, lsr #0x10 + mov r0, #0x2 + str r0, [sp, #0x8] + mov r0, #0x1 + orr r5, r5, r1, lsl #0x10 + str r0, [sp, #0x4] + mvn r11, #0x0 + b _0209B084 +_0209AF38: + bl FUN_0209BF9C +_0209AF3C: ; 0x0209AF3C + cmp r0, #0x0 + bne _0209AF4C + bl FUN_020A005C + b _0209B084 +_0209AF4C: + add r0, sp, #0xc + bl FUN_0209C638 + ldr r1, [sp, #0xc] + cmp r1, #0xc + bls _0209B07C + ldrh r3, [r0, #0x0] + mov r2, r3, asr #0x8 + orr r2, r2, r3, lsl #0x8 + mov r2, r2, lsl #0x10 + cmp r9, r2, lsr #0x10 + bne _0209B07C + ldrb r2, [r0, #0x3] + and r2, r2, #0xf + cmp r2, #0x3 + moveq r6, r11 + beq _0209B07C + cmp r2, #0x0 + bne _0209B07C + ldrb r2, [r0, #0x4] + add r4, r0, r1 + ldrb r1, [r0, #0x5] + add r0, r0, #0xc + orr r1, r1, r2, lsl #0x8 + mov r1, r1, lsl #0x10 + movs r1, r1, lsr #0x10 + sub r7, r1, #0x1 + beq _0209AFCC +_0209AFB8: + bl FUN_0209B0D0 +_0209AFBC: ; 0x0209AFBC + cmp r7, #0x0 + add r0, r0, #0x4 + sub r7, r7, #0x1 + bne _0209AFB8 +_0209AFCC: + cmp r0, r4 + bhs _0209B07C +_0209AFD4: + bl FUN_0209B0D0 + ldrb r7, [r0, #0x8] + ldrb r1, [r0, #0x9] + ldrb r3, [r0, #0x0] + ldrb r2, [r0, #0x1] + orr r1, r1, r7, lsl #0x8 + mov r1, r1, lsl #0x10 + orr r3, r2, r3, lsl #0x8 + mov r2, r1, lsr #0x10 + mov r1, r3, lsl #0x10 + cmp r10, r1, lsr #0x10 + bne _0209B06C + cmp r10, #0xc + beq _0209B04C + add r1, r0, #0x6 + add r3, r1, r2 + add r4, r0, #0x8 + ldrb r1, [r1, r2] + ldrb r0, [r3, #0x1] + add r3, r4, r2 + ldrb r2, [r4, r2] + orr r0, r0, r1, lsl #0x8 + ldrb r1, [r3, #0x1] + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + orr r0, r1, r2, lsl #0x8 + mov r1, r3, lsl #0x10 + mov r0, r0, lsl #0x10 + orr r6, r1, r0, lsr #0x10 + b _0209B07C +_0209B04C: + cmp r2, r8 + ldrhi r6, [sp, #0x8] + bhi _0209B07C + ldr r1, [sp, #0x0] + add r0, r0, #0xa + bl MI_CpuCopy8 + ldr r6, [sp, #0x4] + b _0209B07C +_0209B06C: + add r1, r2, #0xa + add r0, r0, r1 + cmp r0, r4 + blo _0209AFD4 +_0209B07C: + ldr r0, [sp, #0xc] + bl FUN_0209C52C +_0209B084: + ldr r0, _0209B0CC ; =0x021C8EFC + ldr r0, [r0, #0x0] + blx r0 + cmp r0, #0x0 + beq _0209B0B8 + cmp r6, #0x0 + bne _0209B0B8 + bl OS_GetTick + mov r0, r0, lsr #0x10 + orr r0, r0, r1, lsl #0x10 + sub r0, r0, r5 + cmp r0, #0xf + blt _0209AF38 +_0209B0B8: + mov r0, r6 + add sp, sp, #0x4c + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0209B0C8: .word 0x00001001 +_0209B0CC: .word 0x021C8EFC + + arm_func_start FUN_0209B0D0 +FUN_0209B0D0: + ldrb r2, [r0], #0x1 + cmp r2, #0x0 + bxeq lr +_0209B0DC: + and r1, r2, #0xc0 + cmp r1, #0xc0 + addeq r0, r0, #0x1 + bxeq lr + add r0, r0, r2 + ldrb r2, [r0], #0x1 + cmp r2, #0x0 + bne _0209B0DC + bx lr + + arm_func_start FUN_0209B100 +FUN_0209B100: ; 0x0209B100 + stmdb sp!, {r4,lr} + bl FUN_0209CB44 + bl FUN_0209CBE8 + ldr r1, _0209B168 ; =0x021C8ED4 + mov r0, #0x44 + ldr r2, [r1, #0x0] + mov r1, #0x43 + bl FUN_0209CB78 + ldr r4, _0209B16C ; =0x021C924A + mov r1, #0x7 + mov r0, r4 + mov r2, #0x0 + bl FUN_0209B8E0 + mov r1, #0xff + add r2, r0, #0x1 + strb r1, [r0, #0x0] + mov r0, #0x0 + mov r1, #0x12c + sub r3, r2, r4 + bl FUN_0209B8A0 + sub r1, r0, r4 + mov r0, r4 + bl FUN_0209C030 + bl FUN_0209CB24 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209B168: .word 0x021C8ED4 +_0209B16C: .word 0x021C924A + + arm_func_start FUN_0209B170 +FUN_0209B170: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r5, r0 + bl FUN_0209CB44 + bl FUN_0209CBE8 + cmp r4, #0x1 + bne _0209B1A8 + ldr r1, _0209B28C ; =0x021C8ED4 + mov r0, #0x44 + ldr r2, [r1, #0x0] + mov r1, #0x43 + bl FUN_0209CB78 + b _0209B1B8 +_0209B1A8: + mov r0, #0x44 + mov r1, #0x43 + mvn r2, #0x0 + bl FUN_0209CB78 +_0209B1B8: + mov r6, #0x0 +_0209B1BC: + mov r0, r4 + bl FUN_0209B6BC + mov r1, r6 + bl FUN_0209B2FC + movs r7, r0 + bne _0209B1E0 + add r6, r6, #0x1 + cmp r6, #0x4 + blt _0209B1BC +_0209B1E0: + bl FUN_0209CB24 + cmp r7, #0x2 + bne _0209B224 + ldr r0, _0209B290 ; =0x021C8F00 + mov r1, #0x3 + ldr r3, [r0, #0x0] + ldr r2, _0209B294 ; =0x021C8EEC + mov r3, r3, lsr #0x1 + str r3, [r5, #0x0] + ldr r3, [r0, #0x0] + add sp, sp, #0x4 + mul r1, r3, r1 + mov r1, r1, lsr #0x3 + str r1, [r2, #0x0] + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_0209B224: + ldr r1, _0209B294 ; =0x021C8EEC + cmp r4, #0x1 + ldr r0, [r1, #0x0] + mov r0, r0, lsr #0x1 + str r0, [r1, #0x0] + str r0, [r5, #0x0] + beq _0209B24C + cmp r4, #0x2 + beq _0209B270 + b _0209B27C +_0209B24C: + cmp r0, #0x3c + bhs _0209B27C + mov r2, #0x1 + ldr r0, _0209B290 ; =0x021C8F00 + str r2, [r5, #0x0] + ldr r0, [r0, #0x0] + mov r0, r0, lsr #0x3 + str r0, [r1, #0x0] + b _0209B27C +_0209B270: + cmp r0, #0x3c + movcc r0, #0x1 + strcc r0, [r5, #0x0] +_0209B27C: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0209B28C: .word 0x021C8ED4 +_0209B290: .word 0x021C8F00 +_0209B294: .word 0x021C8EEC + + arm_func_start FUN_0209B298 +FUN_0209B298: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl FUN_0209CB44 + bl FUN_0209CBE8 + mov r0, #0x44 + mov r1, #0x43 + mvn r2, #0x0 + bl FUN_0209CB78 + mov r4, #0x0 +_0209B2BC: + bl FUN_0209B7D8 + mov r1, r4 + bl FUN_0209B2FC + mov r5, r0 + cmp r5, #0x1 + beq _0209B2E0 + add r4, r4, #0x1 + cmp r4, #0x4 + blt _0209B2BC +_0209B2E0: + bl FUN_0209CB24 + cmp r5, #0x1 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_0209B2FC +FUN_0209B2FC: ; 0x0209B2FC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x14 + add r2, r1, #0x1 + mov r1, #0xf + mul r1, r2, r1 + str r1, [sp, #0x8] + str r0, [sp, #0x0] + bl OS_GetTick + mov r0, r0, lsr #0x10 + str r0, [sp, #0x4] + orr r0, r0, r1, lsl #0x10 + mov r4, #0x0 + str r0, [sp, #0x4] + mov r0, #0x3 + mov r9, r4 + ldr r5, _0209B698 ; =0x021C8F1C + mov r7, #0x2 + mov r8, #0x1 + ldr fp, _0209B69C ; =0x021C8EE0 + ldr r6, _0209B6A0 ; =0x021C8ED0 + str r0, [sp, #0xc] + b _0209B64C +_0209B354: + bl FUN_0209BF9C +_0209B358: ; 0x0209B358 + cmp r0, #0x0 + bne _0209B368 + bl FUN_020A005C + b _0209B64C +_0209B368: + add r0, sp, #0x10 + bl FUN_0209C638 + mov r10, r0 + ldr r0, [sp, #0x10] + cmp r0, #0xf0 + bls _0209B644 + ldrb r0, [r10, #0x0] + cmp r0, #0x2 + bne _0209B644 + ldrh r1, [r10, #0x6] + ldrh r2, [r10, #0x4] + mov r0, r1, asr #0x8 + orr r0, r0, r1, lsl #0x8 + mov r1, r0, lsl #0x10 + mov r0, r2, asr #0x8 + orr r0, r0, r2, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + mov r0, r0, lsl #0x10 + orr r1, r0, r1, lsr #0x10 + ldr r0, [sp, #0x0] + cmp r0, r1 + bne _0209B644 + ldr r1, _0209B6A4 ; =0x021C8F14 + add r0, r10, #0x1c + bl FUN_0209F9A0 +_0209B3D0: ; 0x0209B3D0 + cmp r0, #0x0 + bne _0209B644 + ldrb r3, [r10, #0x10] + ldrb r0, [r10, #0x11] + ldrb r2, [r10, #0x12] + ldrb r1, [r10, #0x13] + orr r0, r0, r3, lsl #0x8 + mov r0, r0, lsl #0x10 + orr r1, r1, r2, lsl #0x8 + mov r0, r0, lsr #0x10 + mov r2, r0, lsl #0x10 + mov r0, r1, lsl #0x10 + orr r0, r2, r0, lsr #0x10 + ldrb r2, [r10, #0xec] + ldr r1, [sp, #0x10] + ldr r4, [sp, #0xc] + add r1, r10, r1 + cmp r2, #0x63 + bne _0209B644 + ldrb r2, [r10, #0xed] + cmp r2, #0x82 + bne _0209B644 + ldrb r2, [r10, #0xee] + cmp r2, #0x53 + bne _0209B644 + add r2, r10, #0xf0 + ldrb r3, [r10, #0xef] + cmp r3, #0x63 + bne _0209B644 + b _0209B630 +_0209B448: + cmp r3, #0x0 + beq _0209B630 + cmp r3, #0x33 + bgt _0209B48C + cmp r3, #0x33 + bge _0209B588 + cmp r3, #0x6 + bgt _0209B624 + cmp r3, #0x1 + blt _0209B624 + cmp r3, #0x1 + beq _0209B4AC + cmp r3, #0x3 + beq _0209B4E0 + cmp r3, #0x6 + beq _0209B514 + b _0209B624 +_0209B48C: + cmp r3, #0x35 + bgt _0209B4A0 + cmp r3, #0x35 + beq _0209B5C0 + b _0209B624 +_0209B4A0: + cmp r3, #0x36 + beq _0209B5F0 + b _0209B624 +_0209B4AC: + ldrb lr, [r2, #0x1] + ldrb r12, [r2, #0x2] + ldrb r10, [r2, #0x3] + ldrb r3, [r2, #0x4] + orr r12, r12, lr, lsl #0x8 + mov r12, r12, lsl #0x10 + orr r3, r3, r10, lsl #0x8 + mov r10, r12, lsr #0x10 + mov r10, r10, lsl #0x10 + mov r3, r3, lsl #0x10 + orr r3, r10, r3, lsr #0x10 + str r3, [r6, #0x0] + b _0209B624 +_0209B4E0: + ldrb lr, [r2, #0x1] + ldrb r12, [r2, #0x2] + ldrb r10, [r2, #0x3] + ldrb r3, [r2, #0x4] + orr r12, r12, lr, lsl #0x8 + mov r12, r12, lsl #0x10 + orr r3, r3, r10, lsl #0x8 + mov r10, r12, lsr #0x10 + mov r10, r10, lsl #0x10 + mov r3, r3, lsl #0x10 + orr r3, r10, r3, lsr #0x10 + str r3, [r11, #0x0] + b _0209B624 +_0209B514: + ldrb r3, [r2, #0x0] + cmp r3, #0x8 + strcc r9, [r5, #0x4] + blo _0209B554 + ldrb lr, [r2, #0x5] + ldrb r12, [r2, #0x6] + ldrb r10, [r2, #0x7] + ldrb r3, [r2, #0x8] + orr r12, r12, lr, lsl #0x8 + mov r12, r12, lsl #0x10 + orr r3, r3, r10, lsl #0x8 + mov r10, r12, lsr #0x10 + mov r10, r10, lsl #0x10 + mov r3, r3, lsl #0x10 + orr r3, r10, r3, lsr #0x10 + str r3, [r5, #0x4] +_0209B554: + ldrb lr, [r2, #0x1] + ldrb r12, [r2, #0x2] + ldrb r10, [r2, #0x3] + ldrb r3, [r2, #0x4] + orr r12, r12, lr, lsl #0x8 + mov r12, r12, lsl #0x10 + orr r3, r3, r10, lsl #0x8 + mov r10, r12, lsr #0x10 + mov r10, r10, lsl #0x10 + mov r3, r3, lsl #0x10 + orr r3, r10, r3, lsr #0x10 + str r3, [r5, #0x0] + b _0209B624 +_0209B588: + ldrb lr, [r2, #0x1] + ldrb r12, [r2, #0x2] + ldrb r10, [r2, #0x3] + ldrb r3, [r2, #0x4] + orr r12, r12, lr, lsl #0x8 + mov r12, r12, lsl #0x10 + orr r3, r3, r10, lsl #0x8 + mov r10, r12, lsr #0x10 + mov r10, r10, lsl #0x10 + mov r3, r3, lsl #0x10 + orr r10, r10, r3, lsr #0x10 + ldr r3, _0209B6A8 ; =0x021C8F00 + str r10, [r3, #0x0] + b _0209B624 +_0209B5C0: + ldrb r3, [r2, #0x1] + cmp r3, #0x2 + beq _0209B5E0 + cmp r3, #0x5 + ldreq r3, _0209B6AC ; =0x021C8F04 + moveq r4, r7 + streq r0, [r3, #0x0] + b _0209B624 +_0209B5E0: + ldr r3, _0209B6B0 ; =0x021C8EE8 + mov r4, r8 + str r0, [r3, #0x0] + b _0209B624 +_0209B5F0: + ldrb lr, [r2, #0x1] + ldrb r12, [r2, #0x2] + ldrb r10, [r2, #0x3] + ldrb r3, [r2, #0x4] + orr r12, r12, lr, lsl #0x8 + mov r12, r12, lsl #0x10 + orr r3, r3, r10, lsl #0x8 + mov r10, r12, lsr #0x10 + mov r10, r10, lsl #0x10 + mov r3, r3, lsl #0x10 + orr r10, r10, r3, lsr #0x10 + ldr r3, _0209B6B4 ; =0x021C8ED4 + str r10, [r3, #0x0] +_0209B624: + ldrb r3, [r2, #0x0] + add r3, r3, #0x1 + add r2, r2, r3 +_0209B630: + cmp r2, r1 + bhs _0209B644 + ldrb r3, [r2], #0x1 + cmp r3, #0xff + bne _0209B448 +_0209B644: + ldr r0, [sp, #0x10] + bl FUN_0209C52C +_0209B64C: + ldr r0, _0209B6B8 ; =0x021C8EFC + ldr r0, [r0, #0x0] + blx r0 + cmp r0, #0x0 + beq _0209B688 + cmp r4, #0x0 + bne _0209B688 + bl OS_GetTick + mov r2, r0, lsr #0x10 + ldr r0, [sp, #0x4] + orr r2, r2, r1, lsl #0x10 + sub r1, r2, r0 + ldr r0, [sp, #0x8] + cmp r1, r0 + blt _0209B354 +_0209B688: + mov r0, r4 + add sp, sp, #0x14 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0209B698: .word 0x021C8F1C +_0209B69C: .word 0x021C8EE0 +_0209B6A0: .word 0x021C8ED0 +_0209B6A4: .word 0x021C8F14 +_0209B6A8: .word 0x021C8F00 +_0209B6AC: .word 0x021C8F04 +_0209B6B0: .word 0x021C8EE8 +_0209B6B4: .word 0x021C8ED4 +_0209B6B8: .word 0x021C8EFC + + arm_func_start FUN_0209B6BC +FUN_0209B6BC: ; 0x0209B6BC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r4, _0209B7CC ; =0x021C924A + mov r5, r0 + add r2, sp, #0x0 + mov r0, r4 + mov r1, #0x3 + bl FUN_0209B8E0 + mov r12, r0 + cmp r5, #0x0 + bne _0209B790 + mov r0, #0x32 + strb r0, [r12, #0x0] + mov r0, #0x4 + ldr r3, _0209B7D0 ; =0x021C8EE8 + strb r0, [r12, #0x1] + ldr r1, [r3, #0x0] + mov lr, #0x36 + mov r1, r1, lsr #0x10 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + mov r1, r1, asr #0x8 + strb r1, [r12, #0x2] + ldr r1, [r3, #0x0] + ldr r2, _0209B7D4 ; =0x021C8ED4 + mov r1, r1, lsr #0x10 + strb r1, [r12, #0x3] + ldr r1, [r3, #0x0] + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + mov r1, r1, asr #0x8 + strb r1, [r12, #0x4] + ldr r1, [r3, #0x0] + strb r1, [r12, #0x5] + strb lr, [r12, #0x6] + strb r0, [r12, #0x7] + ldr r0, [r2, #0x0] + mov r0, r0, lsr #0x10 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + mov r0, r0, asr #0x8 + strb r0, [r12, #0x8] + ldr r0, [r2, #0x0] + mov r0, r0, lsr #0x10 + strb r0, [r12, #0x9] + ldr r0, [r2, #0x0] + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + mov r0, r0, asr #0x8 + strb r0, [r12, #0xa] + ldr r0, [r2, #0x0] + strb r0, [r12, #0xb] + add r12, r12, #0xc +_0209B790: + add r2, r12, #0x1 + mov lr, #0xff + sub r3, r2, r4 + mov r0, #0x0 + mov r1, #0x12c + strb lr, [r12, #0x0] + bl FUN_0209B8A0 + mov r1, r0 + mov r0, r4 + sub r1, r1, r4 + bl FUN_0209C030 +_0209B7BC: ; 0x0209B7BC + ldr r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_0209B7CC: .word 0x021C924A +_0209B7D0: .word 0x021C8EE8 +_0209B7D4: .word 0x021C8ED4 + + arm_func_start FUN_0209B7D8 +FUN_0209B7D8: ; 0x0209B7D8 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r4, _0209B898 ; =0x021C924A + add r2, sp, #0x0 + mov r0, r4 + mov r1, #0x1 + bl FUN_0209B8E0 + ldr r1, _0209B89C ; =0x021C8EE8 + mov r12, r0 + ldr r0, [r1, #0x0] + cmp r0, #0x0 + beq _0209B85C + mov r0, #0x32 + strb r0, [r12, #0x0] + mov r0, #0x4 + strb r0, [r12, #0x1] + ldr r0, [r1, #0x0] + mov r0, r0, lsr #0x10 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + mov r0, r0, asr #0x8 + strb r0, [r12, #0x2] + ldr r0, [r1, #0x0] + mov r0, r0, lsr #0x10 + strb r0, [r12, #0x3] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + mov r0, r0, asr #0x8 + strb r0, [r12, #0x4] + ldr r0, [r1, #0x0] + strb r0, [r12, #0x5] + add r12, r12, #0x6 +_0209B85C: + add r2, r12, #0x1 + mov lr, #0xff + sub r3, r2, r4 + mov r0, #0x0 + mov r1, #0x12c + strb lr, [r12, #0x0] + bl FUN_0209B8A0 + mov r1, r0 + mov r0, r4 + sub r1, r1, r4 + bl FUN_0209C030 +_0209B888: ; 0x0209B888 + ldr r0, [sp, #0x0] + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209B898: .word 0x021C924A +_0209B89C: .word 0x021C8EE8 + + arm_func_start FUN_0209B8A0 +FUN_0209B8A0: ; 0x0209B8A0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r12, r0 + mov r5, r2 + cmp r3, r1 + bhs _0209B8D0 + sub r4, r1, r3 + mov r0, r5 + mov r1, r12 + mov r2, r4 + bl MI_CpuFill8 + add r5, r5, r4 +_0209B8D0: + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_0209B8E0 +FUN_0209B8E0: ; 0x0209B8E0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r1 + mov r4, r2 + mov r1, #0x0 + mov r2, #0xec + mov r6, r0 + bl MI_CpuFill8 + ldr r0, _0209BA5C ; =0x00000101 + mov r1, #0x6 + strh r0, [r6, #0x0] + ldr r0, _0209BA60 ; =0x021C8F24 + strb r1, [r6, #0x2] + ldr r3, [r0, #0x8] + ldr r2, [r0, #0x0] + ldr r1, [r0, #0x4] + umull lr, r12, r3, r2 + mla r12, r3, r1, r12 + ldr r1, [r0, #0xc] + ldr r7, [r0, #0x10] + mla r12, r1, r2, r12 + adds r3, r7, lr + ldr r1, [r0, #0x14] + str r3, [r0, #0x0] + adc r1, r1, r12 + str r1, [r0, #0x4] + mov r0, r1, lsr #0x10 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + cmp r4, #0x0 + mov r2, r3, asr #0x8 + mov r0, r1, lsl #0x10 + strne r1, [r4, #0x0] + mov r1, r0, lsr #0x10 + orr r2, r2, r3, lsl #0x8 + mov r0, r1, asr #0x8 + strh r2, [r6, #0x4] + orr r0, r0, r1, lsl #0x8 + strh r0, [r6, #0x6] + ldr r2, _0209BA64 ; =0x021C8F04 + ldr r0, _0209BA68 ; =0x021C8F14 + ldr r1, [r2, #0x0] + mov r1, r1, lsr #0x10 + mov r1, r1, lsl #0x10 + mov r3, r1, lsr #0x10 + mov r1, r3, asr #0x8 + orr r1, r1, r3, lsl #0x8 + strh r1, [r6, #0xc] + ldr r2, [r2, #0x0] + add r1, r6, #0x1c + mov r2, r2, lsl #0x10 + mov r3, r2, lsr #0x10 + mov r2, r3, asr #0x8 + orr r3, r2, r3, lsl #0x8 + mov r2, #0x6 + strh r3, [r6, #0xe] + bl MI_CpuCopy8 + ldr r0, _0209BA6C ; =0x00008263 + ldr r1, _0209BA70 ; =0x00006353 + strh r0, [r6, #0xec] + strh r1, [r6, #0xee] + ldr r0, _0209BA74 ; =0x00000135 + mov r1, #0x7 + strh r0, [r6, #0xf0] + strb r5, [r6, #0xf2] + mov r0, #0x3d + strb r0, [r6, #0xf3] + strb r1, [r6, #0xf4] + mov r3, #0x1 + ldr r0, _0209BA68 ; =0x021C8F14 + add r1, r6, #0xf6 + mov r2, #0x6 + strb r3, [r6, #0xf5] + bl MI_CpuCopy8 + mov r1, #0xc + strb r1, [r6, #0xfc] + mov r2, #0xa + ldr r0, _0209BA78 ; =0x02106224 + add r1, r6, #0xfe + strb r2, [r6, #0xfd] + bl MI_CpuCopy8 + mov r1, #0x37 + strb r1, [r6, #0x108] + mov r2, #0x3 + ldr r0, _0209BA7C ; =0x0000010D + strb r2, [r6, #0x109] + mov r1, #0x1 + strb r1, [r6, #0x10a] + strb r2, [r6, #0x10b] + mov r1, #0x6 + strb r1, [r6, #0x10c] + add r0, r6, r0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0209BA5C: .word 0x00000101 +_0209BA60: .word 0x021C8F24 +_0209BA64: .word 0x021C8F04 +_0209BA68: .word 0x021C8F14 +_0209BA6C: .word 0x00008263 +_0209BA70: .word 0x00006353 +_0209BA74: .word 0x00000135 +_0209BA78: .word 0x02106224 +_0209BA7C: .word 0x0000010D + + arm_func_start FUN_0209BA80 +FUN_0209BA80: ; 0x0209BA80 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x54 + ldr r3, _0209BE40 ; =0x021C8EF8 + mov r1, #0x0 + ldr r0, _0209BE44 ; =0x021C8FD8 + mov r2, #0x64 + str r1, [r3, #0x0] + bl MI_CpuFill8 + ldr r0, _0209BE44 ; =0x021C8FD8 + mov r3, #0x180 + ldr r2, _0209BE48 ; =0x021C93A0 + ldr r1, _0209BE4C ; =0x021C9220 + str r3, [r0, #0x3c] + str r2, [r0, #0x40] + str r3, [r0, #0x48] + str r1, [r0, #0x4c] + bl FUN_0209CC28 + mov r11, #0x0 + mov r0, #0x1 + str r0, [sp, #0x0] + str r0, [sp, #0x4] + str r0, [sp, #0x4c] + mov r1, r0 + ldr r0, _0209BE50 ; =0x021C8EC0 + ldr r5, [sp, #0x0] + str r1, [r0, #0x0] + mov r0, #0x2 + str r0, [sp, #0x10] + mov r0, r5 + str r0, [sp, #0x34] + str r0, [sp, #0x3c] + mov r0, #0x3 + str r0, [sp, #0x1c] + mov r0, r5 + str r0, [sp, #0x30] + str r0, [sp, #0x28] + str r0, [sp, #0x24] + str r0, [sp, #0x20] + str r0, [sp, #0xc] + mov r0, #0x69 + str r0, [sp, #0x44] + mov r0, #0x3e8 + mov r6, r11 + mov r4, r11 + mov r10, r11 + str r11, [sp, #0x14] + str r11, [sp, #0x18] + str r11, [sp, #0x38] + str r11, [sp, #0x2c] + str r11, [sp, #0x40] + str r11, [sp, #0x48] + str r0, [sp, #0x8] +_0209BB50: + ldr r0, [sp, #0x8] + bl OS_Sleep + ldr r0, _0209BE40 ; =0x021C8EF8 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _0209BE14 + bl OS_GetTick + mov r9, r0, lsr #0x10 + ldr r0, _0209BE54 ; =0x021C8EFC + orr r9, r9, r1, lsl #0x10 + ldr r0, [r0, #0x0] + blx r0 + cmp r0, #0x0 + beq _0209BC8C + ldr r0, [sp, #0x4c] + subs r0, r0, #0x1 + str r0, [sp, #0x4c] + bne _0209BCA4 + ldr r0, _0209BE58 ; =0x021C8EC4 + ldr r0, [r0, #0x0] + ands r0, r0, #0x1 + beq _0209BBBC + cmp r11, #0x0 + bne _0209BCA4 + bl FUN_0209BE78 + ldr r11, [sp, #0xc] + b _0209BCA4 +_0209BBBC: + cmp r11, #0x3 + addls pc, pc, r11, lsl #0x2 + b _0209BCA4 +_0209BBC8: + b _0209BBD8 +_0209BBCC: + b _0209BC28 +_0209BBD0: + b _0209BC4C +_0209BBD4: + b _0209BCA4 +_0209BBD8: + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrne r1, [sp, #0x10] + ldrne r0, _0209BE50 ; =0x021C8EC0 + strne r1, [r0, #0x0] + ldrne r0, [sp, #0x14] + strne r0, [sp, #0x4] + bl FUN_0209B298 +_0209BBF8: ; 0x0209BBF8 + cmp r0, #0x0 + beq _0209BC14 + ldr r1, [sp, #0x18] + add r0, sp, #0x4c + bl FUN_0209B170 +_0209BC0C: ; 0x0209BC0C + cmp r0, #0x0 + bne _0209BC20 +_0209BC14: + bl FUN_0209BE78 + ldr r11, [sp, #0x1c] + b _0209BCA4 +_0209BC20: + ldr r11, [sp, #0x20] + b _0209BCA4 +_0209BC28: + ldr r1, [sp, #0x24] + add r0, sp, #0x4c + bl FUN_0209B170 +_0209BC34: ; 0x0209BC34 + cmp r0, #0x0 + bne _0209BCA4 + ldr r0, [sp, #0x4c] + cmp r0, #0x3c + ldrcc r11, [sp, #0x10] + b _0209BCA4 +_0209BC4C: + ldr r1, [sp, #0x10] + add r0, sp, #0x4c + bl FUN_0209B170 +_0209BC58: ; 0x0209BC58 + cmp r0, #0x0 + ldrne r11, [sp, #0x28] + bne _0209BCA4 + ldr r0, [sp, #0x4c] + cmp r0, #0x3c + bhs _0209BCA4 + ldr r0, [sp, #0x1c] + bl FUN_020A0098 + ldr r0, [sp, #0x30] + ldr r11, [sp, #0x2c] + str r0, [sp, #0x4c] + str r0, [sp, #0x0] + b _0209BCA4 +_0209BC8C: + ldr r0, [sp, #0x34] + bl FUN_020A0098 + ldr r0, [sp, #0x3c] + ldr r11, [sp, #0x38] + str r0, [sp, #0x4c] + str r0, [sp, #0x0] +_0209BCA4: + ldr r1, [sp, #0x40] + ldr r0, _0209BE5C ; =0x021C8F78 +_0209BCAC: + ldr r2, [r0, #0x0] + cmp r2, #0x0 + beq _0209BCD4 + ldrh r2, [r0, #0xa] + sub r2, r9, r2 + mov r2, r2, lsl #0x10 + mov r3, r2, asr #0x10 + ldr r2, _0209BE60 ; =0x000003BD + cmp r3, r2 + strgt r6, [r0, #0x0] +_0209BCD4: + add r0, r0, #0xc + add r1, r1, #0x1 + cmp r1, #0x8 + blt _0209BCAC + ldr r0, _0209BE64 ; =0x021C8EE0 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _0209BD10 + ldr r1, [sp, #0x0] + subs r1, r1, #0x1 + str r1, [sp, #0x0] + bne _0209BD10 + bl FUN_0209F338 + ldr r0, [sp, #0x44] + str r0, [sp, #0x0] +_0209BD10: + ldr r0, _0209BE68 ; =0x021D3498 + ldr r7, [r0, #0x8] + cmp r7, #0x0 + beq _0209BDAC +_0209BD20: + ldr r0, [r7, #0xa4] + cmp r0, #0x0 + beq _0209BDA0 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + beq _0209BDA0 + ldrb r2, [r0, #0x8] + cmp r2, #0x3 + bne _0209BD6C + ldr r1, [r0, #0x10] + sub r1, r9, r1 + cmp r1, #0x27 + ble _0209BD6C + strb r5, [r0, #0x8] + ldrh r1, [r0, #0x1a] + strh r1, [r0, #0x18] + ldr r1, [r0, #0x20] + str r1, [r0, #0x1c] + b _0209BDA0 +_0209BD6C: + cmp r2, #0x2 + bne _0209BDA0 + ldr r1, [r0, #0x10] + sub r1, r9, r1 + cmp r1, #0x27 + ble _0209BDA0 + ldr r1, [r0, #0x4] + cmp r1, #0x1 + bne _0209BDA0 + strb r4, [r0, #0x8] + str r4, [r0, #0x4] + ldr r0, [r0, #0x0] + bl OS_WakeupThreadDirect +_0209BDA0: + ldr r7, [r7, #0x68] + cmp r7, #0x0 + bne _0209BD20 +_0209BDAC: + ldr r7, [sp, #0x48] + ldr r8, _0209BE6C ; =0x021C9520 +_0209BDB4: + ldrh r0, [r8, #0x4] + cmp r0, #0x0 + beq _0209BDE4 + ldr r0, [r8, #0x2c] + sub r0, r9, r0 + cmp r0, #0xef + ble _0209BDE4 + ldr r1, _0209BE70 ; =0x021C8EF4 + ldr r0, [r8, #0x34] + ldr r1, [r1, #0x0] + blx r1 + strh r10, [r8, #0x4] +_0209BDE4: + add r8, r8, #0x38 + add r7, r7, #0x1 + cmp r7, #0x8 + blt _0209BDB4 + mov r0, r9 + bl FUN_020A01FC + ldr r0, _0209BE74 ; =0x021C8EF0 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _0209BB50 + blx r0 + b _0209BB50 +_0209BE14: + ldr r0, _0209BE58 ; =0x021C8EC4 + ldr r0, [r0, #0x0] + ands r0, r0, #0x1 + bne _0209BE30 + cmp r11, #0x3 + beq _0209BE30 + bl FUN_0209B100 +_0209BE30: + bl FUN_0209CC10 + add sp, sp, #0x54 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0209BE40: .word 0x021C8EF8 +_0209BE44: .word 0x021C8FD8 +_0209BE48: .word 0x021C93A0 +_0209BE4C: .word 0x021C9220 +_0209BE50: .word 0x021C8EC0 +_0209BE54: .word 0x021C8EFC +_0209BE58: .word 0x021C8EC4 +_0209BE5C: .word 0x021C8F78 +_0209BE60: .word 0x000003BD +_0209BE64: .word 0x021C8EE0 +_0209BE68: .word 0x021D3498 +_0209BE6C: .word 0x021C9520 +_0209BE70: .word 0x021C8EF4 +_0209BE74: .word 0x021C8EF0 + + arm_func_start FUN_0209BE78 +FUN_0209BE78: ; 0x0209BE78 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r0, _0209BF3C ; =0x021C8ECC + ldr r0, [r0, #0x0] + blx r0 + ldr r0, _0209BF40 ; =0x021C8F04 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + bl FUN_0209F338 + mov r0, #0x64 + bl OS_Sleep + ldr r0, _0209BF40 ; =0x021C8F04 + ldr r0, [r0, #0x0] + bl FUN_0209F338 + bl OS_GetTick + mov r4, r0, lsr #0x10 + orr r4, r4, r1, lsl #0x10 + ldr r6, _0209BF44 ; =0x021C8EAC + mov r7, #0x64 + ldr r5, _0209BF48 ; =0x021C8EFC + b _0209BF00 +_0209BED8: + ldrb r0, [r6, #0x0] + cmp r0, #0x0 + beq _0209BEF8 + mov r0, #0x4 + bl FUN_020A0098 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_0209BEF8: + mov r0, r7 + bl OS_Sleep +_0209BF00: + ldr r0, [r5, #0x0] + blx r0 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + bl OS_GetTick + mov r0, r0, lsr #0x10 + orr r0, r0, r1, lsl #0x10 + sub r0, r0, r4 + cmp r0, #0x17 + blt _0209BED8 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0209BF3C: .word 0x021C8ECC +_0209BF40: .word 0x021C8F04 +_0209BF44: .word 0x021C8EAC +_0209BF48: .word 0x021C8EFC + + arm_func_start FUN_0209BF4C +FUN_0209BF4C: ; 0x0209BF4C + stmdb sp!, {r4,lr} + ldr r0, _0209BF98 ; =0x021D3498 + ldr r0, [r0, #0x4] + ldr r4, [r0, #0xa4] + cmp r4, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r1, [r4, #0x60] + cmp r1, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + mov r2, #0x0 + ldr r0, [r4, #0x5c] + mov r3, r2 + bl FUN_0209C0E8 +_0209BF88: ; 0x0209BF88 + mov r0, #0x0 + str r0, [r4, #0x60] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209BF98: .word 0x021D3498 + + arm_func_start FUN_0209BF9C +FUN_0209BF9C: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _0209C02C ; =0x021D3498 + ldr r0, [r0, #0x4] + ldr r0, [r0, #0xa4] + cmp r0, #0x0 + beq _0209C01C + ldrb r1, [r0, #0x9] + cmp r1, #0x0 + beq _0209BFD4 + bl FUN_020A0538 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_0209BFD4: + ldr r1, [r0, #0x44] + cmp r1, #0x0 + bne _0209BFFC + ldrb r0, [r0, #0x8] + cmp r0, #0x4 + beq _0209BFFC + add r0, r0, #0xf6 + and r0, r0, #0xff + cmp r0, #0x1 + bhi _0209C00C +_0209BFFC: + add sp, sp, #0x4 + mov r0, r1 + ldmia sp!, {lr} + bx lr +_0209C00C: + add sp, sp, #0x4 + mvn r0, #0x0 + ldmia sp!, {lr} + bx lr +_0209C01C: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_0209C02C: .word 0x021D3498 + + arm_func_start FUN_0209C030 +FUN_0209C030: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r3, _0209C0E4 ; =0x021D3498 + mov r2, r0 + ldr r4, [r3, #0x4] + mov r3, r1 + ldr r5, [r4, #0xa4] + cmp r5, #0x0 + beq _0209C0D4 + ldr r4, [r5, #0x60] + cmp r4, #0x0 + beq _0209C0BC + ldr r0, [r5, #0x5c] + mov r1, r4 + bl FUN_0209C0E8 + ldr r1, [r5, #0x60] + mov r4, r0 + cmp r4, r1 + movcs r0, #0x0 + strcs r0, [r5, #0x60] + addcs sp, sp, #0x4 + subcs r0, r4, r1 + ldmcsia sp!, {r4-r5,lr} + bxcs lr + ldr r0, [r5, #0x5c] + sub r2, r1, r4 + add r1, r0, r4 + bl memmove + ldr r1, [r5, #0x60] + add sp, sp, #0x4 + sub r1, r1, r4 + mov r0, #0x0 + str r1, [r5, #0x60] + ldmia sp!, {r4-r5,lr} + bx lr +_0209C0BC: + mov r2, #0x0 + mov r3, r2 + bl FUN_0209C0E8 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_0209C0D4: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_0209C0E4: .word 0x021D3498 + + arm_func_start FUN_0209C0E8 +FUN_0209C0E8: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr ip, _0209C1CC ; =0x021D3498 + mov r7, r1 + ldr r12, [r12, #0x4] + mov r6, r2 + ldr r4, [r12, #0xa4] + mov r5, r3 + cmp r4, #0x0 + beq _0209C1BC + ldrb r12, [r4, #0x8] + cmp r12, #0xa + bne _0209C14C + cmp r7, #0x0 + beq _0209C12C + mov r2, r4 + bl FUN_0209EB00 +_0209C12C: + cmp r5, #0x0 + beq _0209C144 + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_0209EB00 +_0209C144: + add r0, r7, r5 + b _0209C1A4 +_0209C14C: + cmp r12, #0xb + bne _0209C184 + cmp r7, #0x0 + beq _0209C164 + mov r2, r4 + bl FUN_0209EC40 +_0209C164: + cmp r5, #0x0 + beq _0209C17C + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_0209EC40 +_0209C17C: + add r0, r7, r5 + b _0209C1A4 +_0209C184: + ldrb r12, [r4, #0x9] + cmp r12, #0x0 + beq _0209C19C + str r4, [sp, #0x0] + bl FUN_020A03E0 + b _0209C1A4 +_0209C19C: + str r4, [sp, #0x0] + bl FUN_0209C1D4 +_0209C1A4: + ldr r1, _0209C1D0 ; =0x021C8EA8 + ldrb r1, [r1, #0x0] + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr +_0209C1BC: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0209C1CC: .word 0x021D3498 +_0209C1D0: .word 0x021C8EA8 + + arm_func_start FUN_0209C1D4 +FUN_0209C1D4: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x1c + mov r4, #0x0 + mov r10, r0 + ldr r8, [sp, #0x40] + mov r0, r4 + str r4, [sp, #0xc] + mov r9, r1 + mov r11, r2 + str r3, [sp, #0x8] + mov r6, r4 + str r0, [r8, #0x34] + bl OS_GetTick + mov r0, r0, lsr #0x10 + str r0, [sp, #0x10] + orr r0, r0, r1, lsl #0x10 + str r0, [sp, #0x10] + mov r0, r6 + str r0, [sp, #0x18] + mov r0, #0x1 + ldr r4, _0209C3EC ; =0x021C8EFC + str r0, [sp, #0x14] + b _0209C39C +_0209C230: + ldr r7, [r8, #0x28] + ldr r3, [sp, #0x8] + str r8, [sp, #0x0] + mov r0, r10 + mov r1, r9 + mov r2, r11 + str r6, [sp, #0x4] + bl FUN_0209C3F0 + bl OS_GetTick + mov r5, r0, lsr #0x10 + orr r5, r5, r1, lsl #0x10 +_0209C25C: + bl FUN_020A005C +_0209C260: ; 0x0209C260 + ldr r0, [r4, #0x0] + blx r0 + cmp r0, #0x0 + beq _0209C2B8 + ldrb r0, [r8, #0x8] + cmp r0, #0x4 + bne _0209C2B8 + ldr r1, [r8, #0x28] + ldr r0, [r8, #0x30] + cmp r1, r0 + beq _0209C2B8 + bl OS_GetTick + mov r0, r0, lsr #0x10 + orr r0, r0, r1, lsl #0x10 + sub r0, r0, r5 + cmp r0, #0xf + bge _0209C2B8 + cmp r6, #0x0 + beq _0209C25C + ldrh r0, [r8, #0x2c] + cmp r0, #0x0 + beq _0209C25C +_0209C2B8: + ldr r0, [r8, #0x30] + subs r7, r0, r7 + ldr r0, [sp, #0xc] + add r0, r0, r7 + str r0, [sp, #0xc] + beq _0209C2E4 + bl OS_GetTick + mov r0, r0, lsr #0x10 + str r0, [sp, #0x10] + orr r0, r0, r1, lsl #0x10 + str r0, [sp, #0x10] +_0209C2E4: + ldr r0, [r8, #0x30] + str r0, [r8, #0x28] + ldrb r0, [r8, #0x8] + cmp r0, #0x4 + bne _0209C36C + ldrh r0, [r8, #0x2c] + cmp r0, #0x0 + bne _0209C36C + cmp r7, #0x0 + bne _0209C36C + cmp r6, #0x0 + bne _0209C370 + bl OS_GetTick + mov r5, r0, lsr #0x10 + orr r5, r5, r1, lsl #0x10 + b _0209C334 +_0209C324: + bl FUN_020A005C + ldrh r0, [r8, #0x2c] + cmp r0, #0x0 + bne _0209C35C +_0209C334: + ldr r0, [r4, #0x0] + blx r0 + cmp r0, #0x0 + beq _0209C35C + bl OS_GetTick + mov r0, r0, lsr #0x10 + orr r0, r0, r1, lsl #0x10 + sub r0, r0, r5 + cmp r0, #0xf + blt _0209C324 +_0209C35C: + ldrh r0, [r8, #0x2c] + cmp r0, #0x0 + ldreq r6, [sp, #0x14] + b _0209C370 +_0209C36C: + ldr r6, [sp, #0x18] +_0209C370: + cmp r7, r9 + addcc r10, r10, r7 + subcc r9, r9, r7 + blo _0209C39C + sub r1, r7, r9 + add r10, r11, r1 + ldr r0, [sp, #0x8] + ldr r11, [sp, #0x18] + sub r9, r0, r1 + mov r0, r11 + str r0, [sp, #0x8] +_0209C39C: + ldr r0, [r4, #0x0] + blx r0 + cmp r0, #0x0 + beq _0209C3DC + cmp r9, #0x0 + beq _0209C3DC + ldrb r0, [r8, #0x8] + cmp r0, #0x4 + bne _0209C3DC + bl OS_GetTick + mov r2, r0, lsr #0x10 + ldr r0, [sp, #0x10] + orr r2, r2, r1, lsl #0x10 + sub r0, r2, r0 + cmp r0, #0x9f + blt _0209C230 +_0209C3DC: + ldr r0, [sp, #0xc] + add sp, sp, #0x1c + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0209C3EC: .word 0x021C8EFC + + arm_func_start FUN_0209C3F0 +FUN_0209C3F0: ; 0x0209C3F0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r2 + mov r4, r3 + ldr r2, [sp, #0x10] + ldr r3, [sp, #0x14] + bl FUN_0209C44C +_0209C40C: ; 0x0209C40C + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r2, [sp, #0x10] + mov r0, r5 + mov r1, r4 + mov r3, #0x0 + bl FUN_0209C44C + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_0209C44C +FUN_0209C44C: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r8, r2 + ldr r11, [r8, #0x34] + mov r10, r0 + movs r0, r3 + mov r0, r11, lsl #0x1 + movne r6, #0x1 + add r5, r0, #0x4 + mov r0, #0x18 + str r3, [sp, #0x4] + mov r9, r1 + ldreqh r6, [r8, #0x2c] + mov r4, #0x0 + str r0, [sp, #0x8] + b _0209C504 +_0209C48C: + ldr r0, _0209C528 ; =0x021C8EB0 + ldrh r7, [r8, #0x2e] + ldrh r0, [r0, #0x0] + ldr r1, [r8, #0x34] + cmp r7, r6 + movcs r7, r6 + cmp r0, r7 + movcc r7, r0 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + biceq r7, r7, #0x1 + cmp r9, r7 + sub r0, r1, r11 + movcc r7, r9 + adds r0, r5, r0 + moveq r7, r4 + mov r11, r1 + sub r5, r0, #0x1 + cmp r7, #0x0 + beq _0209C518 + ldr r3, [sp, #0x8] + mov r0, r10 + mov r1, r7 + mov r2, r8 + str r4, [sp, #0x0] + sub r6, r6, r7 + bl FUN_0209E878 + bl OS_YieldThread + add r10, r10, r7 + sub r9, r9, r7 +_0209C504: + cmp r9, #0x0 + beq _0209C518 + ldrb r0, [r8, #0x8] + cmp r0, #0x4 + beq _0209C48C +_0209C518: + mov r0, r7 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0209C528: .word 0x021C8EB0 + + arm_func_start FUN_0209C52C +FUN_0209C52C: ; 0x0209C52C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _0209C57C ; =0x021D3498 + ldr r1, [r1, #0x4] + ldr r1, [r1, #0xa4] + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + ldrb r2, [r1, #0x9] + cmp r2, #0x0 + beq _0209C56C + bl FUN_020A0738 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_0209C56C: + bl FUN_0209C580 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_0209C57C: .word 0x021D3498 + + arm_func_start FUN_0209C580 +FUN_0209C580: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r7, r0 + bl OS_DisableInterrupts + ldr r2, [r4, #0x44] + ldr r1, [r4, #0x3c] + mov r6, r0 + cmp r2, r1 + mov r5, #0x0 + bne _0209C5B4 + cmp r7, #0x0 + movne r5, #0x1 +_0209C5B4: + cmp r7, r2 + movcs r0, #0x0 + strcs r0, [r4, #0x44] + bhs _0209C5D8 + ldr r0, [r4, #0x40] + sub r2, r2, r7 + add r1, r0, r7 + str r2, [r4, #0x44] + bl memmove +_0209C5D8: + mov r0, r6 + bl OS_RestoreInterrupts + ldrb r0, [r4, #0x8] + cmp r0, #0xa + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + cmp r0, #0xb + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldr r0, [r4, #0x44] + cmp r0, #0x0 + beq _0209C620 + cmp r5, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr +_0209C620: + mov r0, r4 + mov r1, #0x1b + bl FUN_0209DF84 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_0209C638 +FUN_0209C638: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _0209C6BC ; =0x021D3498 + ldr r1, [r1, #0x4] + ldr r1, [r1, #0xa4] + cmp r1, #0x0 + beq _0209C6A4 + ldrb r2, [r1, #0x8] + add r2, r2, #0xf6 + and r2, r2, #0xff + cmp r2, #0x1 + bhi _0209C678 + bl FUN_0209C74C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_0209C678: + ldrb r2, [r1, #0x9] + cmp r2, #0x0 + beq _0209C694 + bl FUN_020A0790 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_0209C694: + bl FUN_0209C6C0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_0209C6A4: + mov r1, #0x0 + str r1, [r0, #0x0] + mov r0, r1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_0209C6BC: .word 0x021D3498 + + arm_func_start FUN_0209C6C0 +FUN_0209C6C0: ; 0x0209C6C0 + stmdb sp!, {r4-r8,lr} + mov r4, r1 + ldr r1, [r4, #0x44] + mov r5, r0 + cmp r1, #0x0 + bne _0209C728 + ldrb r0, [r4, #0x8] + cmp r0, #0x4 + bne _0209C728 + bl OS_DisableInterrupts + mov r8, r0 + mov r7, #0x2 + mov r6, #0x0 + b _0209C704 +_0209C6F8: + mov r0, r6 + str r7, [r4, #0x4] + bl OS_SleepThread +_0209C704: + ldr r0, [r4, #0x44] + cmp r0, #0x0 + bne _0209C71C + ldrb r0, [r4, #0x8] + cmp r0, #0x4 + beq _0209C6F8 +_0209C71C: + mov r0, r8 + bl OS_RestoreInterrupts +_0209C724: ; 0x0209C724 + b _0209C72C +_0209C728: + bl OS_YieldThread +_0209C72C: + ldr r0, [r4, #0x44] + str r0, [r5, #0x0] + ldr r0, [r5, #0x0] + cmp r0, #0x0 + ldrne r0, [r4, #0x40] + moveq r0, #0x0 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FUN_0209C74C +FUN_0209C74C: ; 0x0209C74C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r8, r1 + mov r9, r0 + bl OS_DisableInterrupts + ldr r7, [r8, #0x44] + mov r6, r0 + cmp r7, #0x0 + bne _0209C790 + mov r5, #0x3 + mov r4, #0x0 +_0209C778: + mov r0, r4 + str r5, [r8, #0x4] + bl OS_SleepThread + ldr r7, [r8, #0x44] + cmp r7, #0x0 + beq _0209C778 +_0209C790: + mov r0, r6 + bl OS_RestoreInterrupts + str r7, [r9, #0x0] + ldr r0, [r8, #0x40] + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start FUN_0209C7AC +FUN_0209C7AC: ; 0x0209C7AC + stmdb sp!, {r4-r6,lr} + ldr r0, _0209C838 ; =0x021D3498 + ldr r0, [r0, #0x4] + ldr r4, [r0, #0xa4] + cmp r4, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldrb r0, [r4, #0x9] + cmp r0, #0x0 + beq _0209C7DC + mov r0, r4 + bl FUN_020A0320 +_0209C7DC: + bl OS_GetTick + mov r6, r0, lsr #0x10 + orr r6, r6, r1, lsl #0x10 + ldr r5, _0209C83C ; =0x021C8EFC + b _0209C7F4 +_0209C7F0: + bl FUN_020A005C +_0209C7F4: + ldr r0, [r5, #0x0] + blx r0 + cmp r0, #0x0 + beq _0209C828 + ldrb r0, [r4, #0x8] + cmp r0, #0x0 + beq _0209C828 + bl OS_GetTick + mov r0, r0, lsr #0x10 + orr r0, r0, r1, lsl #0x10 + sub r0, r0, r6 + cmp r0, #0x27 + blt _0209C7F0 +_0209C828: + mov r0, #0x0 + strb r0, [r4, #0x8] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_0209C838: .word 0x021D3498 +_0209C83C: .word 0x021C8EFC + + arm_func_start FUN_0209C840 +FUN_0209C840: + stmdb sp!, {r4,lr} + ldr r0, _0209C880 ; =0x021D3498 + ldr r0, [r0, #0x4] + ldr r4, [r0, #0xa4] + cmp r4, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldrb r0, [r4, #0x9] + cmp r0, #0x0 + beq _0209C870 + mov r0, r4 + bl FUN_020A035C +_0209C870: + mov r0, r4 + bl FUN_0209C884 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209C880: .word 0x021D3498 + + arm_func_start FUN_0209C884 +FUN_0209C884: ; 0x0209C884 + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_YieldThread + ldrb r1, [r4, #0x8] + add r0, r1, #0xfd + and r0, r0, #0xff + cmp r0, #0x1 + bhi _0209C8C0 + mov r0, r4 + mov r1, #0x19 + bl FUN_0209DF70 + mov r0, #0x7 + strb r0, [r4, #0x8] + ldmia sp!, {r4,lr} + bx lr +_0209C8C0: + cmp r1, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + mov r0, r4 + mov r1, #0x1a + bl FUN_0209DF84 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_0209C8E0 +FUN_0209C8E0: ; 0x0209C8E0 + ldr r2, _0209C930 ; =0x021D3498 + ldr r2, [r2, #0x4] + ldr r3, [r2, #0xa4] + cmp r3, #0x0 + beq _0209C928 + ldrb r2, [r3, #0x8] + cmp r2, #0x4 + beq _0209C908 + cmp r2, #0xa + bne _0209C928 +_0209C908: + cmp r0, #0x0 + ldrneh r2, [r3, #0x18] + strneh r2, [r0, #0x0] + cmp r1, #0x0 + ldrne r0, [r3, #0x14] + strne r0, [r1, #0x0] + ldr r0, [r3, #0x1c] + bx lr +_0209C928: + mov r0, #0x0 + bx lr + .balign 4 +_0209C930: .word 0x021D3498 + + arm_func_start FUN_0209C934 +FUN_0209C934: ; 0x0209C934 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _0209C98C ; =0x021D3498 + ldr r0, [r0, #0x4] + ldr r0, [r0, #0xa4] + cmp r0, #0x0 + beq _0209C97C + ldrb r1, [r0, #0x9] + cmp r1, #0x0 + beq _0209C96C + bl FUN_020A0874 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_0209C96C: + bl FUN_0209C990 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_0209C97C: + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_0209C98C: .word 0x021D3498 + + arm_func_start FUN_0209C990 +FUN_0209C990: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r10, r0 + bl FUN_0209CC3C + mov r8, r0 + mov r9, #0x0 + mov r11, r9 + mov r4, #0x1 + mov r6, #0x2 + mov r5, #0x18 +_0209C9B8: + str r8, [r10, #0x28] + strb r6, [r10, #0x8] + bl OS_GetTick + mov r2, r0, lsr #0x10 + orr r2, r2, r1, lsl #0x10 + str r2, [r10, #0x10] + mov r0, r10 + mov r1, r6 + mov r2, r5 + bl FUN_0209DF98 + bl OS_DisableInterrupts + mov r7, r0 + ldr r0, _0209CA50 ; =0x021C8F04 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _0209CA04 + mov r0, r11 + str r4, [r10, #0x4] + bl OS_SleepThread +_0209CA04: + mov r0, r7 + bl OS_RestoreInterrupts + ldrb r0, [r10, #0x8] + cmp r0, #0x4 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldr r0, _0209CA50 ; =0x021C8F04 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _0209CA40 + add r9, r9, #0x1 + cmp r9, #0x3 + blo _0209C9B8 +_0209CA40: + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0209CA50: .word 0x021C8F04 + + arm_func_start FUN_0209CA54 +FUN_0209CA54: ; 0x0209CA54 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _0209CAA4 ; =0x021D3498 + ldr r0, [r0, #0x4] + ldr r0, [r0, #0xa4] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + ldrb r1, [r0, #0x9] + cmp r1, #0x0 + beq _0209CA94 + bl FUN_020A09CC + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_0209CA94: + bl FUN_0209CAC4 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_0209CAA4: .word 0x021D3498 + + arm_func_start FUN_0209CAA8 +FUN_0209CAA8: + ldr r1, _0209CAC0 ; =0x021D3498 + ldr r1, [r1, #0x4] + ldr r1, [r1, #0xa4] + cmp r1, #0x0 + strne r0, [r1, #0x38] + bx lr + .balign 4 +_0209CAC0: .word 0x021D3498 + + arm_func_start FUN_0209CAC4 +FUN_0209CAC4: ; 0x0209CAC4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl FUN_0209CC3C + str r0, [r5, #0x28] + mov r0, #0x1 + strb r0, [r5, #0x8] + bl OS_DisableInterrupts + mov r4, r0 + mov r1, #0x1 + mov r0, #0x0 + str r1, [r5, #0x4] + bl OS_SleepThread + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_0209CB0C +FUN_0209CB0C: ; 0x0209CB0C + ldr r1, _0209CB20 ; =0x021D3498 + ldr r1, [r1, #0x4] + ldr r1, [r1, #0xa4] + str r1, [r0, #0xa4] + bx lr + .balign 4 +_0209CB20: .word 0x021D3498 + + arm_func_start FUN_0209CB24 +FUN_0209CB24: ; 0x0209CB24 + ldr r0, _0209CB40 ; =0x021D3498 + ldr r0, [r0, #0x4] + ldr r1, [r0, #0xa4] + cmp r1, #0x0 + movne r0, #0x0 + strne r0, [r1, #0x0] + bx lr + .balign 4 +_0209CB40: .word 0x021D3498 + + arm_func_start FUN_0209CB44 +FUN_0209CB44: ; 0x0209CB44 + ldr r0, _0209CB74 ; =0x021D3498 + ldr r0, [r0, #0x4] + ldr r1, [r0, #0xa4] + cmp r1, #0x0 + bxeq lr + str r0, [r1, #0x0] + mov r0, #0x0 + strb r0, [r1, #0x8] + str r0, [r1, #0x44] + str r0, [r1, #0x60] + str r0, [r1, #0x38] + bx lr + .balign 4 +_0209CB74: .word 0x021D3498 + + arm_func_start FUN_0209CB78 +FUN_0209CB78: ; 0x0209CB78 + stmdb sp!, {r4,lr} + ldr r3, _0209CBDC ; =0x021D3498 + ldr r3, [r3, #0x4] + ldr r4, [r3, #0xa4] + cmp r4, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r3, _0209CBE0 ; =0x7F000001 + cmp r2, r3 + ldreq r2, _0209CBE4 ; =0x021C8F04 + ldreq r2, [r2, #0x0] + cmp r0, #0x0 + strh r1, [r4, #0x1a] + ldrh r1, [r4, #0x1a] + strh r1, [r4, #0x18] + str r2, [r4, #0x20] + ldr r1, [r4, #0x20] + str r1, [r4, #0x1c] + strneh r0, [r4, #0xa] + ldmneia sp!, {r4,lr} + bxne lr + bl FUN_0209CC8C + strh r0, [r4, #0xa] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209CBDC: .word 0x021D3498 +_0209CBE0: .word 0x7F000001 +_0209CBE4: .word 0x021C8F04 + + arm_func_start FUN_0209CBE8 +FUN_0209CBE8: ; 0x0209CBE8 + ldr r0, _0209CC0C ; =0x021D3498 + ldr r0, [r0, #0x4] + ldr r1, [r0, #0xa4] + cmp r1, #0x0 + movne r0, #0xa + strneb r0, [r1, #0x8] + movne r0, #0x0 + strne r0, [r1, #0x44] + bx lr + .balign 4 +_0209CC0C: .word 0x021D3498 + + arm_func_start FUN_0209CC10 +FUN_0209CC10: ; 0x0209CC10 + ldr r0, _0209CC24 ; =0x021D3498 + mov r1, #0x0 + ldr r0, [r0, #0x4] + str r1, [r0, #0xa4] + bx lr + .balign 4 +_0209CC24: .word 0x021D3498 + + arm_func_start FUN_0209CC28 +FUN_0209CC28: ; 0x0209CC28 + ldr r1, _0209CC38 ; =0x021D3498 + ldr r1, [r1, #0x4] + str r0, [r1, #0xa4] + bx lr + .balign 4 +_0209CC38: .word 0x021D3498 + + arm_func_start FUN_0209CC3C +FUN_0209CC3C: ; 0x0209CC3C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _0209CC88 ; =0x021C8F24 + ldr r3, [r1, #0x8] + ldr r2, [r1, #0x0] + ldr r0, [r1, #0x4] + umull lr, r12, r3, r2 + mla r12, r3, r0, r12 + ldr r0, [r1, #0xc] + ldr r3, [r1, #0x10] + mla r12, r0, r2, r12 + adds r2, r3, lr + ldr r0, [r1, #0x14] + str r2, [r1, #0x0] + adc r0, r0, r12 + str r0, [r1, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_0209CC88: .word 0x021C8F24 + + arm_func_start FUN_0209CC8C +FUN_0209CC8C: ; 0x0209CC8C + stmdb sp!, {r4-r8,lr} + ldr r0, _0209CD30 ; =0x021D3498 + ldr r6, [r0, #0x8] + ldr r2, _0209CD34 ; =0x021C8EBC + mov r4, #0x400 + mov r3, #0x1 + mov r5, #0x0 + ldr r1, _0209CD38 ; =0x00001388 +_0209CCAC: + ldrh r12, [r2, #0x0] + mov r0, r5 + add r12, r12, #0x1 + strh r12, [r2, #0x0] + ldrh r12, [r2, #0x0] + cmp r12, #0x400 + blo _0209CCD0 + cmp r12, r1 + blo _0209CCD4 +_0209CCD0: + strh r4, [r2, #0x0] +_0209CCD4: + mov r8, r6 + cmp r6, #0x0 + beq _0209CD18 + ldrh r7, [r2, #0x0] +_0209CCE4: + ldr lr, [r8, #0xa4] + cmp lr, #0x0 + beq _0209CD0C + ldr r12, [lr, #0x0] + cmp r12, #0x0 + beq _0209CD0C + ldrh r12, [lr, #0xa] + cmp r12, r7 + moveq r0, r3 + beq _0209CD18 +_0209CD0C: + ldr r8, [r8, #0x68] + cmp r8, #0x0 + bne _0209CCE4 +_0209CD18: + cmp r0, #0x0 + bne _0209CCAC + ldr r0, _0209CD34 ; =0x021C8EBC + ldrh r0, [r0, #0x0] + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0209CD30: .word 0x021D3498 +_0209CD34: .word 0x021C8EBC +_0209CD38: .word 0x00001388 + + arm_func_start FUN_0209CD3C +FUN_0209CD3C: ; 0x0209CD3C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r5, _0209CDAC ; =0x00000806 + add r4, sp, #0x0 +_0209CD4C: + mov r0, r4 + bl FUN_0209F57C + ldr r3, [sp, #0x0] + cmp r3, #0x22 + bls _0209CDA4 + ldrh r2, [r0, #0xc] + mov r1, r2, asr #0x8 + orr r1, r1, r2, lsl #0x8 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + cmp r1, #0x800 + beq _0209CD88 + cmp r1, r5 + beq _0209CD98 + b _0209CDA4 +_0209CD88: + add r0, r0, #0xe + sub r1, r3, #0xe + bl FUN_0209CDB0 + b _0209CDA4 +_0209CD98: + add r0, r0, #0xe + sub r1, r3, #0xe + bl FUN_0209E614 +_0209CDA4: + bl FUN_0209F51C + b _0209CD4C + .balign 4 +_0209CDAC: .word 0x00000806 + + arm_func_start FUN_0209CDB0 +FUN_0209CDB0: ; 0x0209CDB0 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r4, r0 + ldrh r12, [r4, #0xc] + ldrh r6, [r4, #0x10] + ldrh r2, [r4, #0xe] + ldrh r0, [r4, #0x12] + mov r5, r6, asr #0x8 + mov r3, r12, asr #0x8 + orr r5, r5, r6, lsl #0x8 + orr r12, r3, r12, lsl #0x8 + mov r3, r5, lsl #0x10 + mov r5, r0, asr #0x8 + mov r12, r12, lsl #0x10 + mov lr, r2, asr #0x8 + mov r6, r3, lsr #0x10 + orr r0, r5, r0, lsl #0x8 + mov r3, r12, lsr #0x10 + orr r2, lr, r2, lsl #0x8 + mov r5, r6, lsl #0x10 + mov r0, r0, lsl #0x10 + mov r3, r3, lsl #0x10 + mov r2, r2, lsl #0x10 + orr r0, r5, r0, lsr #0x10 + orr r2, r3, r2, lsr #0x10 + mov r5, r1 + cmp r0, r2 + beq _0209CEF0 + bl FUN_0209F9CC +_0209CE24: ; 0x0209CE24 + cmp r0, #0x0 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldrh r1, [r4, #0x2] + mov r0, r1, asr #0x8 + orr r0, r0, r1, lsl #0x8 + mov r0, r0, lsl #0x10 + cmp r5, r0, lsr #0x10 + addcc sp, sp, #0x8 + ldmccia sp!, {r4-r6,lr} + bxcc lr + ldrb r1, [r4, #0x0] + mov r0, r4 + and r1, r1, #0xf + mov r1, r1, lsl #0x2 + bl FUN_0209FB84 + ldr r1, _0209CFA0 ; =0x0000FFFF + cmp r0, r1 + addne sp, sp, #0x8 + ldmneia sp!, {r4-r6,lr} + bxne lr + ldrh r2, [r4, #0x10] + ldrh r12, [r4, #0x12] + ldr r1, _0209CFA4 ; =0x021C8F04 + mov r0, r2, asr #0x8 + orr r0, r0, r2, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r2, r12, asr #0x8 + mov r3, r0, lsr #0x10 + orr r0, r2, r12, lsl #0x8 + mov r2, r3, lsl #0x10 + mov r0, r0, lsl #0x10 + ldr r1, [r1, #0x0] + orr r0, r2, r0, lsr #0x10 + cmp r1, r0 + bne _0209CEF0 + ldrh r2, [r4, #0xc] + ldrh r12, [r4, #0xe] + sub r0, r4, #0x8 + mov r1, r2, asr #0x8 + orr r1, r1, r2, lsl #0x8 + mov r1, r1, lsl #0x10 + mov r2, r12, asr #0x8 + mov r3, r1, lsr #0x10 + orr r1, r2, r12, lsl #0x8 + mov r2, r3, lsl #0x10 + mov r1, r1, lsl #0x10 + orr r1, r2, r1, lsr #0x10 + mov r2, #0x1 + bl FUN_0209F12C +_0209CEF0: + add r1, sp, #0x0 + mov r0, r4 + bl FUN_0209CFAC + movs r4, r0 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldrh r2, [r4, #0x2] + ldrb r3, [r4, #0x0] + ldrb r12, [r4, #0x9] + mov r1, r2, asr #0x8 + orr r1, r1, r2, lsl #0x8 + mov r1, r1, lsl #0x10 + and r3, r3, #0xf + mov r2, r1, lsr #0x10 + cmp r12, #0x11 + add r1, r4, r3, lsl #0x2 + sub r2, r2, r3, lsl #0x2 + bne _0209CF44 + bl FUN_0209D2BC + b _0209CF70 +_0209CF44: + ldr r3, _0209CFA4 ; =0x021C8F04 + ldr r3, [r3, #0x0] + cmp r3, #0x0 + beq _0209CF70 + cmp r12, #0x1 + bne _0209CF64 + bl FUN_0209E2E0 + b _0209CF70 +_0209CF64: + cmp r12, #0x6 + bne _0209CF70 + bl FUN_0209D4D8 +_0209CF70: + ldr r0, [sp, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r1, _0209CFA8 ; =0x021C8EF4 + sub r0, r4, #0xe + ldr r1, [r1, #0x0] + blx r1 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_0209CFA0: .word 0x0000FFFF +_0209CFA4: .word 0x021C8F04 +_0209CFA8: .word 0x021C8EF4 + + arm_func_start FUN_0209CFAC +FUN_0209CFAC: ; 0x0209CFAC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x14 + mov r6, #0x0 + mov r10, r0 + str r6, [r1, #0x0] + ldrh r3, [r10, #0x6] + str r1, [sp, #0x0] + ldr r2, _0209D2A4 ; =0x00003FFF + mov r1, r3, asr #0x8 + orr r1, r1, r3, lsl #0x8 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + str r1, [sp, #0x4] + ands r1, r1, r2 + addeq sp, sp, #0x14 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldrh r1, [r10, #0xc] + ldrh r3, [r10, #0xe] + ldrb r4, [r10, #0x0] + mov r0, r1, asr #0x8 + orr r0, r0, r1, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r1, r3, asr #0x8 + mov r2, r0, lsr #0x10 + orr r0, r1, r3, lsl #0x8 + and r3, r4, #0xf + ldrh r9, [r10, #0x4] + mov r2, r2, lsl #0x10 + mov r1, r0, lsl #0x10 + ldr r5, _0209D2A8 ; =0x021C9520 + mov r0, r6 + mov r7, r3, lsl #0x2 + orr r4, r2, r1, lsr #0x10 +_0209D034: + ldrh r2, [r5, #0x4] + cmp r2, #0x0 + beq _0209D058 + ldr r1, [r5, #0x0] + cmp r1, r4 + bne _0209D058 + ldrh r1, [r5, #0x6] + cmp r1, r9 + beq _0209D078 +_0209D058: + cmp r2, #0x0 + bne _0209D068 + cmp r6, #0x0 + moveq r6, r5 +_0209D068: + add r0, r0, #0x1 + cmp r0, #0x8 + add r5, r5, #0x38 + blo _0209D034 +_0209D078: + ldrh r2, [r10, #0x2] + cmp r0, #0x8 + ldr r1, _0209D2AC ; =0x00001FFF + mov r0, r2, asr #0x8 + orr r0, r0, r2, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r2, r0, lsr #0x10 + ldr r0, [sp, #0x4] + and r8, r0, r1 + sub r0, r2, r7 + str r0, [sp, #0x8] + mov r0, r8, lsl #0x3 + str r0, [sp, #0xc] + ldr r0, [sp, #0x8] + add r11, r0, r8, lsl #0x3 + bne _0209D150 + cmp r6, #0x0 + beq _0209D0C8 + cmp r11, #0x1000 + bls _0209D0D8 +_0209D0C8: + add sp, sp, #0x14 + mov r0, #0x0 + ldmia sp!, {r4-r11,lr} + bx lr +_0209D0D8: + ldr r1, _0209D2B0 ; =0x021C8EC8 + ldr r0, _0209D2B4 ; =0x0000100E + ldr r1, [r1, #0x0] + add r0, r7, r0 + mov r5, r6 + blx r1 + str r0, [r6, #0x34] + ldr r0, [r6, #0x34] + cmp r0, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + str r4, [r6, #0x0] + strh r9, [r6, #0x6] + mov r0, #0x0 + strh r0, [r6, #0x8] + bl OS_GetTick + mov r0, r0, lsr #0x10 + orr r0, r0, r1, lsl #0x10 + str r0, [r6, #0x2c] + ldr r1, [r6, #0x34] + mov r0, r10 + add r1, r1, #0xe + add r1, r1, r7 + str r1, [r6, #0x30] + ldr r1, [r6, #0x34] + mov r2, r7 + add r1, r1, #0xe + bl MI_CpuCopy8 +_0209D150: + ldrh r0, [r5, #0x4] + cmp r0, #0x8 + beq _0209D164 + cmp r11, #0x1000 + bls _0209D18C +_0209D164: + mov r0, #0x0 + strh r0, [r5, #0x4] + ldr r1, _0209D2B8 ; =0x021C8EF4 + ldr r0, [r5, #0x34] + ldr r1, [r1, #0x0] + blx r1 + add sp, sp, #0x14 + mov r0, #0x0 + ldmia sp!, {r4-r11,lr} + bx lr +_0209D18C: + ldr r0, [sp, #0x8] + ldr r2, [sp, #0x8] + add r0, r0, #0x7 + add r1, r8, r0, lsr #0x3 + ldr r0, [sp, #0x4] + ands r0, r0, #0x2000 + streqh r11, [r5, #0xa] + streqh r1, [r5, #0x8] + ldrh r3, [r5, #0x4] + add r0, r10, r7 + add r3, r5, r3, lsl #0x1 + strh r8, [r3, #0xc] + ldrh r3, [r5, #0x4] + add r3, r5, r3, lsl #0x1 + strh r1, [r3, #0x1c] + ldrh r1, [r5, #0x4] + add r1, r1, #0x1 + strh r1, [r5, #0x4] + ldr r3, [r5, #0x30] + ldr r1, [sp, #0xc] + add r1, r3, r1 + bl MI_CpuCopy8 + ldrh r6, [r5, #0x8] + cmp r6, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldrh r7, [r5, #0x4] + mov r3, #0x0 + mov r4, r3 + cmp r7, #0x0 + bls _0209D244 + mov r0, r3 +_0209D214: + add r2, r5, r4, lsl #0x1 + ldrh r1, [r2, #0xc] + cmp r1, r3 + bhi _0209D238 + ldrh r1, [r2, #0x1c] + cmp r3, r1 + movcc r3, r1 + movcc r4, r0 + blo _0209D23C +_0209D238: + add r4, r4, #0x1 +_0209D23C: + cmp r4, r7 + blo _0209D214 +_0209D244: + cmp r3, r6 + addcc sp, sp, #0x14 + movcc r0, #0x0 + ldmccia sp!, {r4-r11,lr} + bxcc lr + ldr r0, [r5, #0x34] + ldrh r3, [r5, #0xa] + ldrb r1, [r0, #0xe] + add r0, r0, #0xe + mov r2, #0x0 + and r1, r1, #0xf + add r1, r3, r1, lsl #0x2 + mov r1, r1, lsl #0x10 + mov r3, r1, lsr #0x10 + mov r1, r3, asr #0x8 + orr r1, r1, r3, lsl #0x8 + strh r1, [r0, #0x2] + strh r2, [r5, #0x4] + ldr r1, [sp, #0x0] + mov r2, #0x1 + str r2, [r1, #0x0] + add sp, sp, #0x14 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0209D2A4: .word 0x00003FFF +_0209D2A8: .word 0x021C9520 +_0209D2AC: .word 0x00001FFF +_0209D2B0: .word 0x021C8EC8 +_0209D2B4: .word 0x0000100E +_0209D2B8: .word 0x021C8EF4 + + arm_func_start FUN_0209D2BC +FUN_0209D2BC: ; 0x0209D2BC + stmdb sp!, {r4-r8,lr} + mov r6, r1 + ldrh r1, [r6, #0x6] + mov r7, r0 + mov r5, r2 + cmp r1, #0x0 + beq _0209D2F8 + mov r0, r6 + mov r1, r5 + mov r2, r7 + mov r3, #0x11 + bl FUN_0209FB28 +_0209D2EC: ; 0x0209D2EC + cmp r0, #0x0 + ldmneia sp!, {r4-r8,lr} + bxne lr +_0209D2F8: + bl OS_DisableInterrupts + ldr r1, _0209D4D4 ; =0x021D3498 + mov r8, r0 + ldr r2, [r1, #0x8] + cmp r2, #0x0 + beq _0209D4C4 + mvn r12, #0x0 +_0209D314: + ldr r4, [r2, #0xa4] + cmp r4, #0x0 + beq _0209D4B8 + ldr r0, [r4, #0x0] + cmp r0, #0x0 + beq _0209D4B8 + ldrb r0, [r4, #0x8] + cmp r0, #0xa + bne _0209D4B8 + ldrh r3, [r6, #0x2] + ldrh r1, [r4, #0xa] + mov r0, r3, asr #0x8 + orr r0, r0, r3, lsl #0x8 + mov r0, r0, lsl #0x10 + cmp r1, r0, lsr #0x10 + bne _0209D4B8 + ldrh r3, [r4, #0x18] + cmp r3, #0x0 + beq _0209D378 + ldrh r1, [r6, #0x0] + mov r0, r1, asr #0x8 + orr r0, r0, r1, lsl #0x8 + mov r0, r0, lsl #0x10 + cmp r3, r0, lsr #0x10 + bne _0209D4B8 +_0209D378: + ldr r1, [r4, #0x1c] + cmp r1, #0x0 + beq _0209D3C0 + cmp r1, r12 + beq _0209D3C0 + ldrh lr, [r7, #0xc] + ldrh r0, [r7, #0xe] + mov r3, lr, asr #0x8 + orr r3, r3, lr, lsl #0x8 + mov r3, r3, lsl #0x10 + mov lr, r0, asr #0x8 + mov r3, r3, lsr #0x10 + orr r0, lr, r0, lsl #0x8 + mov r3, r3, lsl #0x10 + mov r0, r0, lsl #0x10 + orr r0, r3, r0, lsr #0x10 + cmp r1, r0 + bne _0209D4B8 +_0209D3C0: + ldrh r1, [r7, #0x10] + ldrh r3, [r7, #0x12] + mov r0, r1, asr #0x8 + orr r0, r0, r1, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r1, r3, asr #0x8 + mov r2, r0, lsr #0x10 + orr r0, r1, r3, lsl #0x8 + mov r1, r2, lsl #0x10 + mov r0, r0, lsl #0x10 + orr r0, r1, r0, lsr #0x10 + str r0, [r4, #0x14] + ldr r0, [r4, #0x1c] + cmp r0, #0x0 + bne _0209D43C + ldrh r1, [r7, #0xc] + ldrh r3, [r7, #0xe] + mov r0, r1, asr #0x8 + orr r0, r0, r1, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r1, r3, asr #0x8 + mov r2, r0, lsr #0x10 + orr r0, r1, r3, lsl #0x8 + mov r1, r2, lsl #0x10 + mov r0, r0, lsl #0x10 + orr r0, r1, r0, lsr #0x10 + str r0, [r4, #0x1c] + ldrh r1, [r6, #0x0] + mov r0, r1, asr #0x8 + orr r0, r0, r1, lsl #0x8 + strh r0, [r4, #0x18] +_0209D43C: + ldr r0, [r4, #0x44] + cmp r0, #0x0 + bne _0209D4C4 + ldr r1, [r4, #0x3c] + sub r0, r5, #0x8 + cmp r0, r1 + strhi r1, [r4, #0x44] + strls r0, [r4, #0x44] + ldr r1, [r4, #0x40] + ldr r2, [r4, #0x44] + add r0, r6, #0x8 + bl MI_CpuCopy8 + ldr r0, [r4, #0x4] + cmp r0, #0x3 + bne _0209D48C + mov r0, #0x0 + str r0, [r4, #0x4] + ldr r0, [r4, #0x0] + bl OS_WakeupThreadDirect + b _0209D4C4 +_0209D48C: + ldr r3, [r4, #0x38] + cmp r3, #0x0 + beq _0209D4C4 + ldr r0, [r4, #0x40] + ldr r1, [r4, #0x44] + mov r2, r4 + blx r3 + cmp r0, #0x0 + movne r0, #0x0 + strne r0, [r4, #0x44] + b _0209D4C4 +_0209D4B8: + ldr r2, [r2, #0x68] + cmp r2, #0x0 + bne _0209D314 +_0209D4C4: + mov r0, r8 + bl OS_RestoreInterrupts + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0209D4D4: .word 0x021D3498 + + arm_func_start FUN_0209D4D8 +FUN_0209D4D8: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + mov r0, r5 + mov r1, r4 + mov r2, r6 + mov r3, #0x6 + bl FUN_0209FB28 +_0209D4FC: ; 0x0209D4FC + cmp r0, #0x0 + ldmneia sp!, {r4-r6,lr} + bxne lr + ldrb r0, [r5, #0xc] + ldrb r2, [r5, #0xd] + and r1, r0, #0xf0 + mov r0, r1, asr #0x1 + add r0, r1, r0, lsr #0x1e + and r1, r2, #0x17 + cmp r1, #0x10 + sub r4, r4, r0, asr #0x2 + bgt _0209D558 + cmp r1, #0x10 + bge _0209D5C4 + cmp r1, #0x2 + bgt _0209D5F4 + cmp r1, #0x1 + blt _0209D5F4 + cmp r1, #0x1 + beq _0209D5DC + cmp r1, #0x2 + beq _0209D57C + b _0209D5F4 +_0209D558: + cmp r1, #0x12 + bgt _0209D5F4 + cmp r1, #0x11 + blt _0209D5F4 + cmp r1, #0x11 + beq _0209D5C4 + cmp r1, #0x12 + beq _0209D5A0 + b _0209D5F4 +_0209D57C: + ands r0, r2, #0x28 + ldmneia sp!, {r4-r6,lr} + bxne lr + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_0209DBB0 + ldmia sp!, {r4-r6,lr} + bx lr +_0209D5A0: + ands r0, r2, #0x28 + ldmneia sp!, {r4-r6,lr} + bxne lr + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_0209DA9C + ldmia sp!, {r4-r6,lr} + bx lr +_0209D5C4: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_0209D774 + ldmia sp!, {r4-r6,lr} + bx lr +_0209D5DC: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_0209D674 + ldmia sp!, {r4-r6,lr} + bx lr +_0209D5F4: + ands r0, r2, #0x4 + beq _0209D610 + mov r0, r6 + mov r1, r5 + bl FUN_0209D62C + ldmia sp!, {r4-r6,lr} + bx lr +_0209D610: + mov r0, r6 + mov r1, r5 + mov r2, r4 + mov r3, #0x0 + bl FUN_0209DE34 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_0209D62C +FUN_0209D62C: ; 0x0209D62C + stmdb sp!, {r4,lr} + bl FUN_0209E0C8 + movs r4, r0 + ldmeqia sp!, {r4,lr} + bxeq lr + bl OS_YieldThread + mov r1, #0x0 + strb r1, [r4, #0x8] + ldr r0, [r4, #0x4] + sub r0, r0, #0x1 + cmp r0, #0x1 + ldmhiia sp!, {r4,lr} + bxhi lr + str r1, [r4, #0x4] + ldr r0, [r4, #0x0] + bl OS_WakeupThreadDirect + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_0209D674 +FUN_0209D674: ; 0x0209D674 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl FUN_0209E0C8 + movs r4, r0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldrb r1, [r4, #0x8] + cmp r1, #0x4 + beq _0209D72C + cmp r1, #0x7 + beq _0209D6BC + cmp r1, #0x8 + beq _0209D6E4 + b _0209D754 +_0209D6BC: + ldr r2, [r4, #0x24] + mov r1, #0x0 + add r2, r2, #0x1 + str r2, [r4, #0x24] + bl FUN_0209DF84 + mov r0, #0x9 + add sp, sp, #0x4 + strb r0, [r4, #0x8] + ldmia sp!, {r4-r7,lr} + bx lr +_0209D6E4: + ldr r2, [r4, #0x24] + mov r1, #0x0 + add r2, r2, #0x1 + str r2, [r4, #0x24] + bl FUN_0209DF84 + mov r1, #0x0 + strb r1, [r4, #0x8] + ldr r0, [r4, #0x4] + cmp r0, #0x2 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + str r1, [r4, #0x4] + ldr r0, [r4, #0x0] + bl OS_WakeupThreadDirect + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_0209D72C: + ldr r2, [r4, #0x24] + mov r1, #0x0 + add r2, r2, #0x1 + str r2, [r4, #0x24] + bl FUN_0209DF70 + mov r0, #0x6 + add sp, sp, #0x4 + strb r0, [r4, #0x8] + ldmia sp!, {r4-r7,lr} + bx lr +_0209D754: + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, #0x0 + bl FUN_0209DE34 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_0209D774 +FUN_0209D774: ; 0x0209D774 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r8, r0 + mov r7, r1 + mov r6, r2 + bl FUN_0209E0C8 + movs r5, r0 + bne _0209D7B4 + mov r0, r8 + mov r1, r7 + mov r2, r6 + mov r3, #0x0 + bl FUN_0209DE34 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr +_0209D7B4: + ldrh r3, [r7, #0x8] + ldrh r1, [r7, #0xa] + ldrb r4, [r7, #0xd] + mov r2, r3, asr #0x8 + orr r2, r2, r3, lsl #0x8 + mov r2, r2, lsl #0x10 + mov r3, r1, asr #0x8 + mov r2, r2, lsr #0x10 + orr r1, r3, r1, lsl #0x8 + mov r2, r2, lsl #0x10 + mov r1, r1, lsl #0x10 + orr r1, r2, r1, lsr #0x10 + str r1, [r5, #0x30] + ldrh r9, [r7, #0x4] + ldrh r1, [r7, #0x6] + ldrb r3, [r5, #0x8] + mov r2, r9, asr #0x8 + orr r2, r2, r9, lsl #0x8 + mov r2, r2, lsl #0x10 + mov r9, r1, asr #0x8 + mov r2, r2, lsr #0x10 + orr r1, r9, r1, lsl #0x8 + mov r2, r2, lsl #0x10 + mov r1, r1, lsl #0x10 + cmp r3, #0x4 + orr r2, r2, r1, lsr #0x10 + bne _0209D840 + ldr r1, [r5, #0x24] + cmp r1, r2 + beq _0209D840 + mov r1, #0x0 + bl FUN_0209DF84 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr +_0209D840: + ldrh r1, [r7, #0xe] + mov r0, r1, asr #0x8 + orr r0, r0, r1, lsl #0x8 + strh r0, [r5, #0x2c] + ldrb r0, [r5, #0x8] + cmp r0, #0x9 + addls pc, pc, r0, lsl #0x2 + b _0209DA70 +_0209D860: + b _0209D888 +_0209D864: + b _0209DA70 +_0209D868: + b _0209D888 +_0209D86C: + b _0209D8A0 +_0209D870: + b _0209D8CC +_0209D874: + b _0209DA70 +_0209D878: + b _0209DA4C +_0209D87C: + b _0209D9D8 +_0209D880: + b _0209D9D8 +_0209D884: + b _0209DA4C +_0209D888: + mov r0, r8 + mov r1, r7 + mov r2, r6 + mov r3, #0x0 + bl FUN_0209DE34 + b _0209DA8C +_0209D8A0: + mov r0, #0x4 + strb r0, [r5, #0x8] + ldr r0, [r5, #0x4] + cmp r0, #0x1 + bne _0209D8C4 + mov r0, #0x0 + str r0, [r5, #0x4] + ldr r0, [r5, #0x0] + bl OS_WakeupThreadDirect +_0209D8C4: + cmp r6, #0x0 + beq _0209DA8C +_0209D8CC: + ldr r0, [r5, #0x34] + add r0, r0, #0x1 + str r0, [r5, #0x34] + ldr r1, [r5, #0x3c] + ldr r0, [r5, #0x44] + sub r0, r1, r0 + cmp r6, r0 + movhi r9, #0x0 + movhi r6, r0 + movls r9, #0x1 + cmp r6, #0x0 + beq _0209D968 + bl OS_DisableInterrupts + ldrb r1, [r7, #0xc] + ldr r12, [r5, #0x40] + ldr r3, [r5, #0x44] + and r2, r1, #0xf0 + mov r1, r2, asr #0x1 + add r1, r2, r1, lsr #0x1e + mov r8, r0 + mov r2, r6 + add r0, r7, r1, asr #0x2 + add r1, r12, r3 + bl MI_CpuCopy8 + ldr r1, [r5, #0x44] + mov r0, r8 + add r1, r1, r6 + str r1, [r5, #0x44] + ldr r1, [r5, #0x24] + add r1, r1, r6 + str r1, [r5, #0x24] + bl OS_RestoreInterrupts + ldr r0, [r5, #0x4] + cmp r0, #0x2 + bne _0209D968 + mov r0, #0x0 + str r0, [r5, #0x4] + ldr r0, [r5, #0x0] + bl OS_WakeupThreadDirect +_0209D968: + cmp r9, #0x0 + beq _0209D9C0 + ands r0, r4, #0x1 + beq _0209D9C0 + mov r0, #0x6 + strb r0, [r5, #0x8] + ldr r1, [r5, #0x24] + mov r0, r5 + add r2, r1, #0x1 + mov r1, #0x0 + str r2, [r5, #0x24] + bl FUN_0209DF70 +_0209D998: ; 0x0209D998 + cmp r6, #0x0 + bne _0209DA8C + ldr r0, [r5, #0x4] + cmp r0, #0x2 + bne _0209DA8C + mov r0, #0x0 + str r0, [r5, #0x4] + ldr r0, [r5, #0x0] + bl OS_WakeupThreadDirect + b _0209DA8C +_0209D9C0: + cmp r6, #0x0 + beq _0209DA8C + mov r0, r5 + mov r1, #0x0 + bl FUN_0209DF84 + b _0209DA8C +_0209D9D8: + ands r0, r4, #0x1 + beq _0209DA20 + ldr r1, [r5, #0x24] + add r0, r6, #0x1 + add r2, r1, r0 + mov r0, r5 + mov r1, #0x0 + str r2, [r5, #0x24] + bl FUN_0209DF84 + mov r1, #0x0 + strb r1, [r5, #0x8] + ldr r0, [r5, #0x4] + cmp r0, #0x2 + bne _0209DA8C + str r1, [r5, #0x4] + ldr r0, [r5, #0x0] + bl OS_WakeupThreadDirect + b _0209DA8C +_0209DA20: + cmp r6, #0x0 + beq _0209DA40 + ldr r1, [r5, #0x24] + mov r0, r5 + add r2, r1, r6 + mov r1, #0x0 + str r2, [r5, #0x24] + bl FUN_0209DF84 +_0209DA40: + mov r0, #0x8 + strb r0, [r5, #0x8] + b _0209DA8C +_0209DA4C: + mov r1, #0x0 + strb r1, [r5, #0x8] + ldr r0, [r5, #0x4] + cmp r0, #0x2 + bne _0209DA8C + str r1, [r5, #0x4] + ldr r0, [r5, #0x0] + bl OS_WakeupThreadDirect + b _0209DA8C +_0209DA70: + ands r0, r4, #0x1 + ldrne r0, [r5, #0x24] + mov r1, #0x0 + addne r0, r0, #0x1 + strne r0, [r5, #0x24] + mov r0, r5 + bl FUN_0209DF84 +_0209DA8C: + bl OS_YieldThread + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start FUN_0209DA9C +FUN_0209DA9C: ; 0x0209DA9C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r5, r1 + mov r6, r2 + bl FUN_0209E0C8 + movs r4, r0 + beq _0209DAC8 + ldrb r0, [r4, #0x8] + cmp r0, #0x2 + beq _0209DAE8 +_0209DAC8: + mov r0, r7 + mov r1, r5 + mov r2, r6 + mov r3, #0x0 + bl FUN_0209DE34 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_0209DAE8: + bl OS_YieldThread + ldrh r2, [r5, #0x4] + ldrh r12, [r5, #0x6] + mov r0, r5 + mov r1, r2, asr #0x8 + orr r1, r1, r2, lsl #0x8 + mov r1, r1, lsl #0x10 + mov r2, r12, asr #0x8 + mov r3, r1, lsr #0x10 + orr r1, r2, r12, lsl #0x8 + mov r2, r3, lsl #0x10 + mov r1, r1, lsl #0x10 + orr r1, r2, r1, lsr #0x10 + add r1, r1, #0x1 + str r1, [r4, #0x24] + ldrh r3, [r5, #0x8] + ldrh lr, [r5, #0xa] + mov r1, r4 + mov r2, r3, asr #0x8 + orr r2, r2, r3, lsl #0x8 + mov r2, r2, lsl #0x10 + mov r3, lr, asr #0x8 + mov r12, r2, lsr #0x10 + orr r2, r3, lr, lsl #0x8 + mov r3, r12, lsl #0x10 + mov r2, r2, lsl #0x10 + orr r2, r3, r2, lsr #0x10 + str r2, [r4, #0x30] + ldrh r3, [r5, #0xe] + mov r2, r3, asr #0x8 + orr r2, r2, r3, lsl #0x8 + strh r2, [r4, #0x2c] + bl FUN_0209E044 + mov r0, r4 + mov r1, #0x0 + bl FUN_0209DF84 + mov r0, #0x4 + strb r0, [r4, #0x8] + ldr r0, [r4, #0x4] + cmp r0, #0x1 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + mov r0, #0x0 + str r0, [r4, #0x4] + ldr r0, [r4, #0x0] + bl OS_WakeupThreadDirect + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_0209DBB0 +FUN_0209DBB0: ; 0x0209DBB0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r4, r0 + ldrh r12, [r4, #0x10] + ldrh r7, [r4, #0xc] + ldrh r3, [r4, #0x12] + mov r5, r12, asr #0x8 + mov r6, r7, asr #0x8 + orr r5, r5, r12, lsl #0x8 + orr r6, r6, r7, lsl #0x8 + mov r12, r6, lsl #0x10 + ldrh r0, [r4, #0xe] + mov lr, r5, lsl #0x10 + mov r5, r3, asr #0x8 + mov r6, r0, asr #0x8 + mov r7, r12, lsr #0x10 + orr r0, r6, r0, lsl #0x8 + orr r3, r5, r3, lsl #0x8 + mov r12, lr, lsr #0x10 + mov r6, r7, lsl #0x10 + mov r0, r0, lsl #0x10 + mov r5, r12, lsl #0x10 + mov r3, r3, lsl #0x10 + mov r7, r1 + orr r1, r5, r3, lsr #0x10 + orr r0, r6, r0, lsr #0x10 + mov r5, r2 + bl FUN_0209E3DC +_0209DC20: ; 0x0209DC20 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r4 + mov r1, r7 + mov r2, r5 + bl FUN_0209DCB4 +_0209DC40: ; 0x0209DC40 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + mov r0, r4 + mov r1, r7 + bl FUN_0209E200 + movs r2, r0 + beq _0209DC7C + mov r0, r4 + mov r1, r7 + bl FUN_0209DD44 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_0209DC7C: + bl OS_YieldThread + mov r0, r4 + mov r1, r7 + bl FUN_0209E200 + movs r2, r0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r4 + mov r1, r7 + bl FUN_0209DD44 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_0209DCB4 +FUN_0209DCB4: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl FUN_0209E0C8 + movs r2, r0 + beq _0209DD38 + ldrb r0, [r2, #0x8] + cmp r0, #0x1 + bne _0209DCEC + mov r0, r6 + mov r1, r5 + bl FUN_0209DD44 + b _0209DD2C +_0209DCEC: + add r0, r0, #0xfd + and r0, r0, #0xff + cmp r0, #0x1 + bhi _0209DD18 + ldr r1, [r2, #0x28] + mov r0, r6 + sub r3, r1, #0x1 + mov r1, r5 + str r3, [r2, #0x28] + bl FUN_0209DD44 + b _0209DD2C +_0209DD18: + mov r0, r6 + mov r1, r5 + mov r2, r4 + mov r3, #0x0 + bl FUN_0209DE34 +_0209DD2C: + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_0209DD38: + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_0209DD44 +FUN_0209DD44: ; 0x0209DD44 + stmdb sp!, {r4-r6,lr} + mov r4, r2 + mov r2, #0x3 + mov r6, r0 + mov r5, r1 + strb r2, [r4, #0x8] + bl OS_GetTick + mov r0, r0, lsr #0x10 + orr r0, r0, r1, lsl #0x10 + str r0, [r4, #0x10] + ldrh r2, [r6, #0x10] + ldrh r3, [r6, #0x12] + mov r0, r5 + mov r1, r2, asr #0x8 + orr r1, r1, r2, lsl #0x8 + mov r1, r1, lsl #0x10 + mov r2, r3, asr #0x8 + orr r2, r2, r3, lsl #0x8 + mov r1, r1, lsr #0x10 + mov r3, r1, lsl #0x10 + mov r1, r2, lsl #0x10 + orr r1, r3, r1, lsr #0x10 + str r1, [r4, #0x14] + ldrh r3, [r5, #0x0] + mov r1, r4 + mov r2, r3, asr #0x8 + orr r2, r2, r3, lsl #0x8 + strh r2, [r4, #0x18] + ldrh r3, [r6, #0xc] + ldrh r6, [r6, #0xe] + mov r2, r3, asr #0x8 + orr r2, r2, r3, lsl #0x8 + mov r2, r2, lsl #0x10 + mov r3, r6, asr #0x8 + orr r3, r3, r6, lsl #0x8 + mov r2, r2, lsr #0x10 + mov r6, r2, lsl #0x10 + mov r2, r3, lsl #0x10 + orr r2, r6, r2, lsr #0x10 + str r2, [r4, #0x1c] + ldrh r3, [r5, #0x4] + ldrh r6, [r5, #0x6] + mov r2, r3, asr #0x8 + orr r2, r2, r3, lsl #0x8 + mov r2, r2, lsl #0x10 + mov r3, r6, asr #0x8 + mov r5, r2, lsr #0x10 + orr r2, r3, r6, lsl #0x8 + mov r3, r5, lsl #0x10 + mov r2, r2, lsl #0x10 + orr r2, r3, r2, lsr #0x10 + add r2, r2, #0x1 + str r2, [r4, #0x24] + bl FUN_0209E044 + mov r0, r4 + mov r1, #0x12 + mov r2, #0x0 + bl FUN_0209DF98 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_0209DE34 +FUN_0209DE34: ; 0x0209DE34 + stmdb sp!, {r4-r8,lr} + ldr r4, _0209DF6C ; =0x021C903C + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r0, r4 + mov r1, #0x0 + mov r2, #0x64 + mov r5, r3 + bl MI_CpuFill8 + ldrh r2, [r7, #0x2] + mov r1, r4 + mov r0, r2, asr #0x8 + orr r0, r0, r2, lsl #0x8 + strh r0, [r1, #0xa] + ldrh r2, [r7, #0x0] + mov r0, r2, asr #0x8 + orr r0, r0, r2, lsl #0x8 + strh r0, [r1, #0x18] + ldrh r2, [r8, #0xc] + ldrh r8, [r8, #0xe] + mov r0, r2, asr #0x8 + orr r0, r0, r2, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r2, r8, asr #0x8 + mov r3, r0, lsr #0x10 + orr r0, r2, r8, lsl #0x8 + mov r2, r3, lsl #0x10 + mov r0, r0, lsl #0x10 + orr r0, r2, r0, lsr #0x10 + str r0, [r1, #0x1c] + ldrb r0, [r7, #0xd] + ands r0, r0, #0x10 + beq _0209DF04 + ldrh r2, [r7, #0x8] + ldrh r6, [r7, #0xa] + mov r0, r4 + mov r1, r2, asr #0x8 + orr r1, r1, r2, lsl #0x8 + mov r1, r1, lsl #0x10 + mov r2, r6, asr #0x8 + mov r3, r1, lsr #0x10 + orr r1, r2, r6, lsl #0x8 + mov r2, r3, lsl #0x10 + mov r1, r1, lsl #0x10 + orr r3, r2, r1, lsr #0x10 + mov r2, r5 + mov r1, #0x4 + str r3, [r4, #0x28] + bl FUN_0209DF98 + ldmia sp!, {r4-r8,lr} + bx lr +_0209DF04: + mov r0, #0x0 + str r0, [r4, #0x28] + ldrh r1, [r7, #0x4] + ldrh r3, [r7, #0x6] + mov r0, r1, asr #0x8 + orr r0, r0, r1, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r1, r3, asr #0x8 + mov r2, r0, lsr #0x10 + orr r0, r1, r3, lsl #0x8 + mov r1, r2, lsl #0x10 + mov r0, r0, lsl #0x10 + orr r0, r1, r0, lsr #0x10 + add r0, r6, r0 + str r0, [r4, #0x24] + ldrb r0, [r7, #0xd] + mov r2, r5 + mov r1, #0x14 + ands r0, r0, #0x3 + ldrne r0, [r4, #0x24] + addne r0, r0, #0x1 + strne r0, [r4, #0x24] + mov r0, r4 + bl FUN_0209DF98 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0209DF6C: .word 0x021C903C + + arm_func_start FUN_0209DF70 +FUN_0209DF70: + ldr ip, _0209DF80 ; =FUN_0209DF98 + mov r2, r1 + mov r1, #0x11 + bx r12 + .balign 4 +_0209DF80: .word FUN_0209DF98 + + arm_func_start FUN_0209DF84 +FUN_0209DF84: ; 0x0209DF84 + ldr ip, _0209DF94 ; =FUN_0209DF98 + mov r2, r1 + mov r1, #0x10 + bx r12 + .balign 4 +_0209DF94: .word FUN_0209DF98 + + arm_func_start FUN_0209DF98 +FUN_0209DF98: ; 0x0209DF98 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r6, r0 + ldr r0, [r6, #0x1c] + mov r5, r1 + mov r4, r2 + bl FUN_0209E014 +_0209DFB4: ; 0x0209DFB4 + cmp r0, #0x0 + bne _0209DFD0 + ldr r0, _0209E00C ; =0x021D3498 + ldr r1, _0209E010 ; =0x021C9160 + ldr r0, [r0, #0x4] + cmp r0, r1 + beq _0209DFF4 +_0209DFD0: + mov r0, #0x0 + mov r1, r0 + mov r2, r6 + mov r3, r5 + str r4, [sp, #0x0] + bl FUN_0209E878 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr +_0209DFF4: + ldr r0, [r6, #0x1c] + bl FUN_0209FAB0 + bl FUN_0209F338 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_0209E00C: .word 0x021D3498 +_0209E010: .word 0x021C9160 + + arm_func_start FUN_0209E014 +FUN_0209E014: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FUN_0209FAB0 +_0209E020: ; 0x0209E020 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x1 + ldmeqia sp!, {lr} + bxeq lr + bl FUN_0209F438 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_0209E044 +FUN_0209E044: ; 0x0209E044 + mov r2, #0x218 + strh r2, [r1, #0x2e] + ldrb r2, [r0, #0xc] + add r3, r0, #0x14 + and r2, r2, #0xf0 + mov r0, r2, asr #0x1 + add r0, r2, r0, lsr #0x1e + mov r0, r0, asr #0x2 + subs r0, r0, #0x14 + sub r12, r0, #0x1 + bxeq lr +_0209E070: + ldrb r0, [r3], #0x1 + cmp r0, #0x0 + bxeq lr + cmp r0, #0x1 + beq _0209E0B8 + cmp r0, #0x2 + bne _0209E0A8 + ldrb r2, [r3, #0x1] + ldrb r0, [r3, #0x2] + add r3, r3, #0x3 + sub r12, r12, #0x3 + orr r0, r0, r2, lsl #0x8 + strh r0, [r1, #0x2e] + b _0209E0B8 +_0209E0A8: + ldrb r0, [r3, #0x0] + sub r0, r0, #0x1 + sub r12, r12, r0 + add r3, r3, r0 +_0209E0B8: + cmp r12, #0x0 + sub r12, r12, #0x1 + bne _0209E070 + bx lr + + arm_func_start FUN_0209E0C8 +FUN_0209E0C8: ; 0x0209E0C8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r2, _0209E140 ; =0x021D3498 + mov r7, r0 + ldr r4, [r2, #0x8] + mov r6, r1 + cmp r4, #0x0 + beq _0209E130 +_0209E0E8: + ldr r5, [r4, #0xa4] + cmp r5, #0x0 + beq _0209E124 + ldr r0, [r5, #0x0] + cmp r0, #0x0 + beq _0209E124 + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl FUN_0209E144 +_0209E110: ; 0x0209E110 + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, r5 + ldmneia sp!, {r4-r7,lr} + bxne lr +_0209E124: + ldr r4, [r4, #0x68] + cmp r4, #0x0 + bne _0209E0E8 +_0209E130: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0209E140: .word 0x021D3498 + + arm_func_start FUN_0209E144 +FUN_0209E144: + stmdb sp!, {r4-r6,lr} + ldrb r4, [r2, #0x8] + mov r12, #0x0 + mov r3, r12 + mov r6, r12 + mov r5, r12 + cmp r4, #0xa + beq _0209E16C + cmp r4, #0xb + movne r5, #0x1 +_0209E16C: + cmp r5, #0x0 + beq _0209E190 + ldrh lr, [r1, #0x2] + ldrh r5, [r2, #0xa] + mov r4, lr, asr #0x8 + orr r4, r4, lr, lsl #0x8 + mov lr, r4, lsl #0x10 + cmp r5, lr, lsr #0x10 + moveq r6, #0x1 +_0209E190: + cmp r6, #0x0 + beq _0209E1B4 + ldrh r4, [r1, #0x0] + ldrh lr, [r2, #0x18] + mov r1, r4, asr #0x8 + orr r1, r1, r4, lsl #0x8 + mov r1, r1, lsl #0x10 + cmp lr, r1, lsr #0x10 + moveq r3, #0x1 +_0209E1B4: + cmp r3, #0x0 + beq _0209E1F4 + ldrh r1, [r0, #0xc] + ldrh lr, [r0, #0xe] + ldr r3, [r2, #0x1c] + mov r0, r1, asr #0x8 + orr r0, r0, r1, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r1, lr, asr #0x8 + mov r2, r0, lsr #0x10 + orr r0, r1, lr, lsl #0x8 + mov r1, r2, lsl #0x10 + mov r0, r0, lsl #0x10 + orr r0, r1, r0, lsr #0x10 + cmp r3, r0 + moveq r12, #0x1 +_0209E1F4: + mov r0, r12 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_0209E200 +FUN_0209E200: ; 0x0209E200 + stmdb sp!, {r4-r6,lr} + ldr r2, _0209E2DC ; =0x021D3498 + ldr r3, [r2, #0x8] + cmp r3, #0x0 + beq _0209E2D0 +_0209E214: + ldr r12, [r3, #0xa4] + cmp r12, #0x0 + beq _0209E2C4 + ldr r2, [r12, #0x0] + cmp r2, #0x0 + beq _0209E2C4 + ldrb r2, [r12, #0x8] + cmp r2, #0x1 + bne _0209E2C4 + ldrh r5, [r1, #0x2] + ldrh r4, [r12, #0xa] + mov r2, r5, asr #0x8 + orr r2, r2, r5, lsl #0x8 + mov r2, r2, lsl #0x10 + cmp r4, r2, lsr #0x10 + bne _0209E2C4 + ldrh r5, [r12, #0x18] + cmp r5, #0x0 + beq _0209E278 + ldrh r4, [r1, #0x0] + mov r2, r4, asr #0x8 + orr r2, r2, r4, lsl #0x8 + mov r2, r2, lsl #0x10 + cmp r5, r2, lsr #0x10 + bne _0209E2C4 +_0209E278: + ldr r2, [r12, #0x1c] + cmp r2, #0x0 + beq _0209E2B8 + ldrh r5, [r0, #0xc] + ldrh r6, [r0, #0xe] + mov r4, r5, asr #0x8 + orr r4, r4, r5, lsl #0x8 + mov lr, r4, lsl #0x10 + mov r4, r6, asr #0x8 + mov lr, lr, lsr #0x10 + orr r4, r4, r6, lsl #0x8 + mov r5, lr, lsl #0x10 + mov lr, r4, lsl #0x10 + orr r4, r5, lr, lsr #0x10 + cmp r2, r4 + bne _0209E2C4 +_0209E2B8: + mov r0, r12 + ldmia sp!, {r4-r6,lr} + bx lr +_0209E2C4: + ldr r3, [r3, #0x68] + cmp r3, #0x0 + bne _0209E214 +_0209E2D0: + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_0209E2DC: .word 0x021D3498 + + arm_func_start FUN_0209E2E0 +FUN_0209E2E0: ; 0x0209E2E0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r1 + mov r4, r2 + mov r6, r0 + mov r0, r5 + mov r1, r4 + bl FUN_0209FB84 + ldr r1, _0209E3D8 ; =0x0000FFFF + cmp r0, r1 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + ldrh r12, [r6, #0x10] + ldrh r7, [r6, #0xc] + ldrh r0, [r6, #0xe] + ldrh r1, [r6, #0x12] + mov r3, r7, asr #0x8 + mov lr, r0, asr #0x8 + orr r0, lr, r0, lsl #0x8 + mov r2, r12, asr #0x8 + orr r7, r3, r7, lsl #0x8 + orr r3, r2, r12, lsl #0x8 + mov r2, r7, lsl #0x10 + mov r12, r1, asr #0x8 + orr r1, r12, r1, lsl #0x8 + mov r3, r3, lsl #0x10 + mov r7, r2, lsr #0x10 + mov r2, r3, lsr #0x10 + mov r3, r7, lsl #0x10 + mov r0, r0, lsl #0x10 + mov r2, r2, lsl #0x10 + mov r1, r1, lsl #0x10 + orr r0, r3, r0, lsr #0x10 + orr r1, r2, r1, lsr #0x10 + bl FUN_0209E3DC +_0209E370: ; 0x0209E370 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldrb r0, [r5, #0x0] + cmp r0, #0x0 + beq _0209E3A0 + cmp r0, #0x8 + beq _0209E3BC + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_0209E3A0: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_0209E40C + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_0209E3BC: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_0209E524 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0209E3D8: .word 0x0000FFFF + + arm_func_start FUN_0209E3DC +FUN_0209E3DC: + cmp r0, #0x0 + beq _0209E404 + mvn r2, #0x0 + cmp r0, r2 + beq _0209E404 + cmp r1, #0x0 + beq _0209E404 + cmp r1, r2 + movne r0, #0x1 + bxne lr +_0209E404: + mov r0, #0x0 + bx lr + + arm_func_start FUN_0209E40C +FUN_0209E40C: ; 0x0209E40C + stmdb sp!, {r4-r8,lr} + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl OS_DisableInterrupts + ldr r1, _0209E520 ; =0x021D3498 + mov r8, r0 + ldr r2, [r1, #0x8] + cmp r2, #0x0 + beq _0209E510 +_0209E434: + ldr r4, [r2, #0xa4] + cmp r4, #0x0 + beq _0209E504 + ldr r3, [r4, #0x0] + cmp r3, #0x0 + beq _0209E504 + ldrb r0, [r4, #0x8] + cmp r0, #0xb + bne _0209E504 + ldrh r1, [r6, #0x4] + mov r0, r3, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, r1 + bne _0209E504 + ldrh r1, [r4, #0xa] + ldrh r0, [r6, #0x6] + cmp r1, r0 + bne _0209E504 + ldr r0, [r4, #0x44] + cmp r0, #0x0 + bne _0209E504 + ldrh r12, [r7, #0xc] + ldrh r1, [r7, #0xe] + ldr r0, [r4, #0x1c] + mov r3, r12, asr #0x8 + orr r3, r3, r12, lsl #0x8 + mov r3, r3, lsl #0x10 + mov r12, r1, asr #0x8 + mov r3, r3, lsr #0x10 + orr r1, r12, r1, lsl #0x8 + mov r3, r3, lsl #0x10 + mov r1, r1, lsl #0x10 + orr r1, r3, r1, lsr #0x10 + cmp r0, r1 + bne _0209E504 + ldr r1, [r4, #0x3c] + sub r0, r5, #0x8 + cmp r0, r1 + strhi r1, [r4, #0x44] + strls r0, [r4, #0x44] + ldr r1, [r4, #0x40] + ldr r2, [r4, #0x44] + add r0, r6, #0x8 + bl MI_CpuCopy8 + ldr r0, [r4, #0x4] + cmp r0, #0x3 + bne _0209E510 + mov r0, #0x0 + str r0, [r4, #0x4] + ldr r0, [r4, #0x0] + bl OS_WakeupThreadDirect + b _0209E510 +_0209E504: + ldr r2, [r2, #0x68] + cmp r2, #0x0 + bne _0209E434 +_0209E510: + mov r0, r8 + bl OS_RestoreInterrupts + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0209E520: .word 0x021D3498 + + arm_func_start FUN_0209E524 +FUN_0209E524: ; 0x0209E524 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r6, r0 + ldrh r3, [r6, #0xc] + ldrh r4, [r6, #0xe] + mov r5, r1 + mov r0, r3, asr #0x8 + orr r0, r0, r3, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r1, r4, asr #0x8 + mov r3, r0, lsr #0x10 + orr r0, r1, r4, lsl #0x8 + mov r1, r3, lsl #0x10 + mov r0, r0, lsl #0x10 + orr r0, r1, r0, lsr #0x10 + mov r4, r2 + bl FUN_0209FAB0 + movs r7, r0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r7,lr} + bxeq lr + bl FUN_0209F438 +_0209E57C: ; 0x0209E57C + cmp r0, #0x0 + bne _0209E598 + mov r0, r7 + bl FUN_0209F338 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr +_0209E598: + mov r2, #0x0 + strb r2, [r5, #0x0] + mov r0, r5 + mov r1, r4 + strh r2, [r5, #0x2] + bl FUN_0209FB84 + mov r1, r0, asr #0x8 + orr r0, r1, r0, lsl #0x8 + strh r0, [r5, #0x2] + ldrh r1, [r6, #0xc] + ldrh r6, [r6, #0xe] + mov r2, #0x0 + mov r0, r1, asr #0x8 + orr r0, r0, r1, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r1, r6, asr #0x8 + mov r3, r0, lsr #0x10 + orr r0, r1, r6, lsl #0x8 + mov r1, r3, lsl #0x10 + mov r0, r0, lsl #0x10 + orr r6, r1, r0, lsr #0x10 + mov r0, r5 + mov r1, r4 + mov r3, r2 + str r6, [sp, #0x0] + mov r4, #0x1 + str r4, [sp, #0x4] + bl FUN_0209ECFC + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_0209E614 +FUN_0209E614: ; 0x0209E614 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + cmp r1, #0x1c + mov r6, r0 + addcc sp, sp, #0x4 + ldmccia sp!, {r4-r7,lr} + bxcc lr + ldr r1, _0209E7BC ; =0x021C8F14 + add r0, r6, #0x8 + bl FUN_0209F9A0 +_0209E63C: ; 0x0209E63C + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldr r0, _0209E7C0 ; =0x021C8F04 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldrh r0, [r6, #0x0] + cmp r0, #0x100 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + ldrh r0, [r6, #0x2] + cmp r0, #0x8 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + ldrh r1, [r6, #0x4] + ldr r0, _0209E7C4 ; =0x00000406 + cmp r1, r0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + ldrh r1, [r6, #0x6] + mov r0, r1, asr #0x8 + orr r0, r0, r1, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + cmp r4, #0x1 + beq _0209E6D0 + cmp r4, #0x2 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr +_0209E6D0: + ldrh r1, [r6, #0xe] + ldrh r5, [r6, #0x10] + ldr r2, _0209E7C0 ; =0x021C8F04 + mov r0, r1, asr #0x8 + orr r0, r0, r1, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + mov r1, r5, asr #0x8 + orr r0, r1, r5, lsl #0x8 + mov r1, r0, lsl #0x10 + mov r3, r3, lsl #0x10 + orr r1, r3, r1, lsr #0x10 + ldr r0, [r2, #0x0] + ldrh r3, [r6, #0x18] + ldrh lr, [r6, #0x1a] + cmp r1, r0 + mov r2, r3, asr #0x8 + orr r2, r2, r3, lsl #0x8 + mov r2, r2, lsl #0x10 + moveq r5, #0x1 + mov r3, lr, asr #0x8 + mov r12, r2, lsr #0x10 + orr r2, r3, lr, lsl #0x8 + mov r3, r12, lsl #0x10 + mov r2, r2, lsl #0x10 + orr r2, r3, r2, lsr #0x10 + movne r5, #0x0 + cmp r0, r2 + moveq r7, #0x1 + movne r7, #0x0 + cmp r5, #0x0 + bne _0209E75C + mov r2, r7 + add r0, r6, #0x8 + bl FUN_0209F12C +_0209E75C: + cmp r4, #0x1 + bne _0209E780 + cmp r7, #0x0 + beq _0209E780 + mov r0, r6 + bl FUN_0209E7CC + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_0209E780: + cmp r4, #0x2 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + cmp r7, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + cmp r5, #0x0 + ldrne r0, _0209E7C8 ; =0x021C8EAC + movne r1, #0x1 + strneb r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0209E7BC: .word 0x021C8F14 +_0209E7C0: .word 0x021C8F04 +_0209E7C4: .word 0x00000406 +_0209E7C8: .word 0x021C8EAC + + arm_func_start FUN_0209E7CC +FUN_0209E7CC: ; 0x0209E7CC + stmdb sp!, {r4,lr} + mov r4, r0 + mov r3, #0x200 + add r0, r4, #0x8 + add r1, r4, #0x12 + mov r2, #0xa + strh r3, [r4, #0x6] + bl MI_CpuCopy8 + ldr r0, _0209E870 ; =0x021C8F14 + add r1, r4, #0x8 + mov r2, #0x6 + bl MI_CpuCopy8 + ldr r3, _0209E874 ; =0x021C8F04 + add r0, r4, #0x12 + ldr r2, [r3, #0x0] + sub r1, r4, #0xe + mov r2, r2, lsr #0x10 + mov r2, r2, lsl #0x10 + mov r12, r2, lsr #0x10 + mov r2, r12, asr #0x8 + orr r2, r2, r12, lsl #0x8 + strh r2, [r4, #0xe] + ldr r3, [r3, #0x0] + mov r2, #0x6 + mov r3, r3, lsl #0x10 + mov r12, r3, lsr #0x10 + mov r3, r12, asr #0x8 + orr r3, r3, r12, lsl #0x8 + strh r3, [r4, #0x10] + bl MI_CpuCopy8 + ldr r0, _0209E870 ; =0x021C8F14 + sub r1, r4, #0x8 + mov r2, #0x6 + bl MI_CpuCopy8 + sub r0, r4, #0xe + mov r1, #0x2a + mov r2, #0x0 + mov r3, r2 + bl FUN_0209F930 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209E870: .word 0x021C8F14 +_0209E874: .word 0x021C8F04 + + arm_func_start FUN_0209E878 +FUN_0209E878: ; 0x0209E878 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0xc + mov r7, r2 + ldrb r2, [r7, #0x8] + mov r9, r0 + mov r8, r1 + cmp r2, #0x0 + mov r6, r3 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r9,lr} + bxeq lr + ldr r0, _0209EAEC ; =0x021D3498 + ldr r3, _0209EAF0 ; =0x021C8F04 + ldr r1, _0209EAF4 ; =0x021C9160 + ldr r0, [r0, #0x4] + ldr r12, [r3, #0x0] + cmp r0, r1 + ldreq r4, _0209EAF8 ; =0x021C8F5E + ldrne r0, [r7, #0x4c] + addne r4, r0, #0x22 + ands r0, r6, #0x2 + movne r5, #0x18 + moveq r5, #0x14 + add r1, r5, r8 + mov r2, r1, lsl #0x10 + mov r1, r12, lsr #0x10 + mov r1, r1, lsl #0x10 + mov r12, r1, lsr #0x10 + mov r1, r12, asr #0x8 + orr r1, r1, r12, lsl #0x8 + strh r1, [r4, #-0xc] + ldr r1, [r3, #0x0] + mov r12, r2, lsr #0x10 + mov r1, r1, lsl #0x10 + mov r2, r1, lsr #0x10 + mov r1, r2, asr #0x8 + orr r1, r1, r2, lsl #0x8 + strh r1, [r4, #-0xa] + ldr r1, [r7, #0x1c] + mov r3, r12, asr #0x8 + mov r1, r1, lsr #0x10 + mov r1, r1, lsl #0x10 + mov r2, r1, lsr #0x10 + mov r1, r2, asr #0x8 + orr r1, r1, r2, lsl #0x8 + strh r1, [r4, #-0x8] + ldr r1, [r7, #0x1c] + mov r2, r5, lsr #0x2 + mov r1, r1, lsl #0x10 + mov lr, r1, lsr #0x10 + mov r1, lr, asr #0x8 + orr r1, r1, lr, lsl #0x8 + strh r1, [r4, #-0x6] + mov r1, #0x600 + strh r1, [r4, #-0x4] + orr r1, r3, r12, lsl #0x8 + strh r1, [r4, #-0x2] + ldrh r12, [r7, #0xa] + cmp r0, #0x0 + mov r2, r2, lsl #0x4 + mov r3, r12, asr #0x8 + orr r3, r3, r12, lsl #0x8 + strh r3, [r4, #0x0] + ldrh r3, [r7, #0x18] + mov r1, #0x0 + mov r0, r3, asr #0x8 + orr r0, r0, r3, lsl #0x8 + strh r0, [r4, #0x2] + ldr r0, [r7, #0x28] + mov r0, r0, lsr #0x10 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + mov r0, r3, asr #0x8 + orr r0, r0, r3, lsl #0x8 + strh r0, [r4, #0x4] + ldr r0, [r7, #0x28] + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + mov r0, r3, asr #0x8 + orr r0, r0, r3, lsl #0x8 + strh r0, [r4, #0x6] + ldr r0, [r7, #0x24] + mov r0, r0, lsr #0x10 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + mov r0, r3, asr #0x8 + orr r0, r0, r3, lsl #0x8 + strh r0, [r4, #0x8] + ldr r0, [r7, #0x24] + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + mov r0, r3, asr #0x8 + orr r0, r0, r3, lsl #0x8 + strh r0, [r4, #0xa] + strb r2, [r4, #0xc] + strb r6, [r4, #0xd] + ldr r2, [r7, #0x3c] + ldr r0, [r7, #0x44] + sub r0, r2, r0 + mov r0, r0, lsl #0x10 + mov r2, r0, lsr #0x10 + mov r0, r2, asr #0x8 + orr r0, r0, r2, lsl #0x8 + strh r0, [r4, #0xe] + strh r1, [r4, #0x10] + strh r1, [r4, #0x12] + beq _0209EA64 + ldr r1, _0209EAFC ; =0x021C8EB0 + ldrh r0, [r1, #0x0] + add r0, r0, #0x2040000 + mov r0, r0, lsr #0x10 + mov r0, r0, lsl #0x10 + mov r2, r0, lsr #0x10 + mov r0, r2, asr #0x8 + orr r0, r0, r2, lsl #0x8 + strh r0, [r4, #0x14] + ldrh r0, [r1, #0x0] + add r0, r0, #0x2040000 + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0x10 + mov r0, r1, asr #0x8 + orr r0, r0, r1, lsl #0x8 + strh r0, [r4, #0x16] +_0209EA64: + sub r0, r4, #0xc + add r1, r5, #0xc + mov r2, #0x0 + bl FUN_0209FBC8 + mov r2, r0 + mov r0, r9 + mov r1, r8 + bl FUN_0209FBC8 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl FUN_0209FBAC + mov r3, r0, asr #0x8 + orr r0, r3, r0, lsl #0x8 + strh r0, [r4, #0x10] + mov r0, r4 + ldr r4, [r7, #0x1c] + mov r3, #0x6 + str r4, [sp, #0x0] + str r3, [sp, #0x4] + mov r1, r5 + mov r2, r9 + mov r3, r8 + bl FUN_0209ECFC + ands r0, r6, #0x3 + ldr r0, [r7, #0x28] + add r1, r7, #0x28 + add r0, r0, r8 + str r0, [r7, #0x28] + ldrne r0, [r1, #0x0] + addne r0, r0, #0x1 + strne r0, [r1, #0x0] + add sp, sp, #0xc + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_0209EAEC: .word 0x021D3498 +_0209EAF0: .word 0x021C8F04 +_0209EAF4: .word 0x021C9160 +_0209EAF8: .word 0x021C8F5E +_0209EAFC: .word 0x021C8EB0 + + arm_func_start FUN_0209EB00 +FUN_0209EB00: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + ldr r7, _0209EC3C ; =0x021C8F04 + mov r5, r2 + ldr r2, [r7, #0x0] + mov r6, r1 + mov r1, r2, lsr #0x10 + mov r1, r1, lsl #0x10 + mov r2, r1, lsr #0x10 + ldr r3, [r5, #0x4c] + mov r1, r2, asr #0x8 + add r4, r3, #0x22 + orr r1, r1, r2, lsl #0x8 + strh r1, [r4, #-0xc] + ldr r1, [r7, #0x0] + add r2, r6, #0x8 + mov r1, r1, lsl #0x10 + mov r7, r1, lsr #0x10 + mov r1, r7, asr #0x8 + orr r1, r1, r7, lsl #0x8 + strh r1, [r4, #-0xa] + ldr r1, [r5, #0x1c] + mov r2, r2, lsl #0x10 + mov r1, r1, lsr #0x10 + mov r1, r1, lsl #0x10 + mov r7, r1, lsr #0x10 + mov r1, r7, asr #0x8 + orr r1, r1, r7, lsl #0x8 + strh r1, [r4, #-0x8] + ldr r1, [r5, #0x1c] + mov r2, r2, lsr #0x10 + mov r1, r1, lsl #0x10 + mov r7, r1, lsr #0x10 + mov r1, r7, asr #0x8 + orr r7, r1, r7, lsl #0x8 + mov r1, r2, asr #0x8 + strh r7, [r4, #-0x6] + mov r7, #0x1100 + strh r7, [r4, #-0x4] + orr r1, r1, r2, lsl #0x8 + strh r1, [r4, #0x4] + ldrh r1, [r4, #0x4] + mov r7, r0 + sub r0, r4, #0xc + strh r1, [r4, #-0x2] + ldrh lr, [r5, #0x18] + mov r2, #0x0 + mov r1, #0x14 + mov r12, lr, asr #0x8 + orr r12, r12, lr, lsl #0x8 + strh r12, [r4, #0x2] + ldrh lr, [r5, #0xa] + mov r12, lr, asr #0x8 + orr r12, r12, lr, lsl #0x8 + strh r12, [r3, #0x22] + strh r2, [r4, #0x6] + bl FUN_0209FBC8 + mov r2, r0 + mov r0, r7 + mov r1, r6 + bl FUN_0209FBC8 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl FUN_0209FBAC + mov r2, r7 + mov r3, r6 + mov r1, r0, asr #0x8 + orr r0, r1, r0, lsl #0x8 + strh r0, [r4, #0x6] + ldr r1, [r5, #0x1c] + mov r0, r4 + str r1, [sp, #0x0] + mov r1, #0x11 + str r1, [sp, #0x4] + mov r1, #0x8 + bl FUN_0209ECFC + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0209EC3C: .word 0x021C8F04 + + arm_func_start FUN_0209EC40 +FUN_0209EC40: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r5, r2 + ldr r3, [r5, #0x4c] + mov r6, r1 + mov r1, #0x8 + ldr r2, _0209ECF4 ; =0x021D3498 + strh r1, [r3, #0x22] + ldr r2, [r2, #0x4] + add r4, r3, #0x22 + strh r2, [r4, #0x4] + mov r2, #0x0 + ldr r3, _0209ECF8 ; =0x021C8EB4 + strh r2, [r4, #0x2] + ldrh lr, [r3, #0x0] + mov r7, r0 + mov r0, r4 + strh lr, [r5, #0xa] + ldrh r12, [r3, #0x0] + add r12, r12, #0x1 + strh r12, [r3, #0x0] + strh lr, [r4, #0x6] + bl FUN_0209FBC8 + mov r2, r0 + mov r0, r7 + mov r1, r6 + bl FUN_0209FBC8 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl FUN_0209FBAC + mov r2, r7 + mov r3, r6 + mov r1, r0, asr #0x8 + orr r0, r1, r0, lsl #0x8 + strh r0, [r4, #0x2] + ldr r1, [r5, #0x1c] + mov r0, r4 + str r1, [sp, #0x0] + mov r1, #0x1 + str r1, [sp, #0x4] + mov r1, #0x8 + bl FUN_0209ECFC + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0209ECF4: .word 0x021D3498 +_0209ECF8: .word 0x021C8EB4 + + arm_func_start FUN_0209ECFC +FUN_0209ECFC: ; 0x0209ECFC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r10, r0 + mov r0, #0x45 + strb r0, [r10, #-0x14] + mov r5, #0x0 + ldr r0, _0209EF0C ; =0x021C8EB8 + strb r5, [r10, #-0x13] + ldrh r7, [r0, #0x0] + ldr r6, [sp, #0x30] + ldrb r4, [sp, #0x34] + add r7, r7, #0x1 + strh r7, [r0, #0x0] + ldrh r9, [r0, #0x0] + mov r0, r6, lsr #0x10 + mov r7, #0x80 + mov r8, r9, asr #0x8 + orr r8, r8, r9, lsl #0x8 + strh r8, [r10, #-0x10] + strb r7, [r10, #-0xc] + ldr r7, _0209EF10 ; =0x021C8F04 + strb r4, [r10, #-0xb] + ldr r8, [r7, #0x0] + mov r4, r0, lsl #0x10 + mov r0, r8, lsr #0x10 + mov r0, r0, lsl #0x10 + mov r8, r0, lsr #0x10 + mov r0, r8, asr #0x8 + orr r0, r0, r8, lsl #0x8 + strh r0, [r10, #-0x8] + ldr r0, [r7, #0x0] + mov r8, r4, lsr #0x10 + mov r0, r0, lsl #0x10 + mov r7, r0, lsr #0x10 + mov r4, r7, asr #0x8 + mov r0, r6, lsl #0x10 + orr r9, r4, r7, lsl #0x8 + mov r7, r8, asr #0x8 + mov r4, r0, lsr #0x10 + mov r0, r4, asr #0x8 + strh r9, [r10, #-0x6] + orr r7, r7, r8, lsl #0x8 + ldr fp, _0209EF14 ; =0x000005C8 + mov r9, r1 + strh r7, [r10, #-0x4] + orr r0, r0, r4, lsl #0x8 + mov r8, r2 + mov r7, r3 + strh r0, [r10, #-0x2] + cmp r9, r11 + bls _0209EE74 + mov r4, r10 + cmp r9, r11 + bls _0209EE14 + str r5, [sp, #0x8] +_0209EDD8: + ldr r1, [sp, #0x8] + mov r0, r10 + mov r2, r4 + mov r3, r11 + str r6, [sp, #0x0] + orr r12, r5, #0x2000 + str r12, [sp, #0x4] + bl FUN_0209EF18 + add r0, r5, #0xb9 + sub r9, r9, r11 + mov r0, r0, lsl #0x10 + cmp r9, r11 + add r4, r4, r11 + mov r5, r0, lsr #0x10 + bhi _0209EDD8 +_0209EE14: + cmp r9, #0x0 + beq _0209EE74 + cmp r7, #0x0 + beq _0209EE48 + mov r0, r10 + mov r2, r4 + mov r3, r9 + str r6, [sp, #0x0] + orr r4, r5, #0x2000 + mov r1, #0x0 + str r4, [sp, #0x4] + bl FUN_0209EF18 + b _0209EE64 +_0209EE48: + str r6, [sp, #0x0] + mov r0, r10 + mov r2, r4 + mov r3, r9 + mov r1, #0x0 + str r5, [sp, #0x4] + bl FUN_0209EF18 +_0209EE64: + add r0, r5, r9, lsr #0x3 + mov r0, r0, lsl #0x10 + mov r5, r0, lsr #0x10 + mov r9, #0x0 +_0209EE74: + ldr r0, _0209EF14 ; =0x000005C8 + add r1, r9, r7 + cmp r1, r0 + bls _0209EED4 + mov r11, #0x0 +_0209EE88: + ldr r0, _0209EF14 ; =0x000005C8 + mov r1, r9 + sub r4, r0, r9 + mov r0, r10 + mov r2, r8 + mov r3, r4 + str r6, [sp, #0x0] + orr r9, r5, #0x2000 + str r9, [sp, #0x4] + bl FUN_0209EF18 + add r0, r5, #0xb9 + mov r1, r0, lsl #0x10 + ldr r0, _0209EF14 ; =0x000005C8 + sub r7, r7, r4 + mov r9, r11 + cmp r7, r0 + add r8, r8, r4 + mov r5, r1, lsr #0x10 + bhi _0209EE88 +_0209EED4: + adds r0, r9, r7 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r11,lr} + bxeq lr + str r6, [sp, #0x0] + mov r0, r10 + mov r1, r9 + mov r2, r8 + mov r3, r7 + str r5, [sp, #0x4] + bl FUN_0209EF18 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0209EF0C: .word 0x021C8EB8 +_0209EF10: .word 0x021C8F04 +_0209EF14: .word 0x000005C8 + + arm_func_start FUN_0209EF18 +FUN_0209EF18: ; 0x0209EF18 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + mov r7, r1 + mov r5, r3 + add r1, r7, #0x14 + add r1, r1, r5 + ldr r3, [sp, #0x24] + mov r1, r1, lsl #0x10 + mov r4, r1, lsr #0x10 + mov r1, r3, lsl #0x10 + mov r3, r4, asr #0x8 + mov r1, r1, lsr #0x10 + mov r8, r0 + orr r3, r3, r4, lsl #0x8 + mov r0, r1, asr #0x8 + strh r3, [r8, #-0x12] + orr r0, r0, r1, lsl #0x8 + strh r0, [r8, #-0xe] + mov r3, #0x0 + sub r0, r8, #0x14 + mov r1, #0x14 + mov r6, r2 + strh r3, [r8, #-0xa] + ldr r4, [sp, #0x20] + bl FUN_0209FB84 + mov r2, r0, asr #0x8 + ldr r1, _0209F040 ; =0x7F000001 + orr r0, r2, r0, lsl #0x8 + strh r0, [r8, #-0xa] + cmp r4, r1 + beq _0209EFC4 + ldr r0, _0209F044 ; =0x021C8F04 + ldr r0, [r0, #0x0] + cmp r4, r0 + beq _0209EFC4 + mov r2, r6 + mov r3, r5 + str r4, [sp, #0x0] + mov r12, #0x800 + sub r0, r8, #0x14 + add r1, r7, #0x14 + str r12, [sp, #0x4] + bl FUN_0209F050 +_0209EFC4: + ldr r0, _0209F040 ; =0x7F000001 + cmp r4, r0 + beq _0209EFF8 + ldr r0, _0209F044 ; =0x021C8F04 + ldr r0, [r0, #0x0] + cmp r4, r0 + beq _0209EFF8 + mov r0, r4 + bl FUN_0209FA54 +_0209EFE8: ; 0x0209EFE8 + cmp r0, #0x0 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4-r8,lr} + bxeq lr +_0209EFF8: + ldr r0, _0209F048 ; =0x02106230 + sub r1, r8, #0x1c + mov r2, #0x8 + bl MI_CpuCopy8 + bl OS_DisableInterrupts + mov r4, r0 + ldr r0, _0209F04C ; =0x021C8F14 + str r6, [sp, #0x0] + mov r1, r0 + str r5, [sp, #0x4] + sub r2, r8, #0x1c + add r3, r7, #0x1c + bl FUN_0209F6C0 + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0209F040: .word 0x7F000001 +_0209F044: .word 0x021C8F04 +_0209F048: .word 0x02106230 +_0209F04C: .word 0x021C8F14 + + arm_func_start FUN_0209F050 +FUN_0209F050: ; 0x0209F050 + stmdb sp!, {r4-r8,lr} + ldrh r5, [sp, #0x1c] + ldr r4, [sp, #0x18] + mov r8, r0 + mov r0, r5, asr #0x8 + orr r12, r0, r5, lsl #0x8 + mov r0, r4 + mov r7, r1 + mov r6, r2 + mov r5, r3 + strh r12, [r8, #-0x2] + bl FUN_0209FA54 +_0209F080: ; 0x0209F080 + cmp r0, #0x0 + bne _0209F0CC + mov r0, r4 + bl FUN_0209FAB0 + movs r4, r0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + bl FUN_0209F438 +_0209F0A0: ; 0x0209F0A0 + cmp r0, #0x0 + bne _0209F0B0 + mov r0, r4 + bl FUN_0209F2AC +_0209F0B0: + cmp r0, #0x0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + sub r1, r8, #0xe + mov r2, #0x6 + bl MI_CpuCopy8 + b _0209F0FC +_0209F0CC: + mov r0, #0x1 + strb r0, [r8, #-0xe] + mov r1, #0x0 + mov r0, r4, lsr #0x10 + strb r1, [r8, #-0xd] + mov r1, #0x5e + strb r1, [r8, #-0xc] + and r0, r0, #0x7f + strb r0, [r8, #-0xb] + mov r0, r4, lsr #0x8 + strb r0, [r8, #-0xa] + strb r4, [r8, #-0x9] +_0209F0FC: + ldr r0, _0209F128 ; =0x021C8F14 + sub r1, r8, #0x8 + mov r2, #0x6 + bl MI_CpuCopy8 + mov r2, r6 + mov r3, r5 + sub r0, r8, #0xe + add r1, r7, #0xe + bl FUN_0209F930 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0209F128: .word 0x021C8F14 + + arm_func_start FUN_0209F12C +FUN_0209F12C: ; 0x0209F12C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r3, _0209F29C ; =0x7F000001 + mov r6, r1 + cmp r6, r3 + mov r7, r0 + mov r4, r2 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldr r0, _0209F2A0 ; =0x021C8F04 + ldr r0, [r0, #0x0] + cmp r6, r0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r6 + bl FUN_0209FAD8 +_0209F174: ; 0x0209F174 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r6 + bl FUN_0209FA54 +_0209F18C: ; 0x0209F18C + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + bl OS_GetTick + mov r0, r0, lsr #0x10 + orr r0, r0, r1, lsl #0x10 + mov r0, r0, lsl #0x10 + ldr r1, _0209F2A4 ; =0x021C8F78 + mov r5, r0, lsr #0x10 + mov r2, #0x0 +_0209F1B8: + ldr r0, [r1, #0x0] + cmp r6, r0 + bne _0209F1F8 + mov r0, #0xc + mul r4, r2, r0 + ldr r0, _0209F2A4 ; =0x021C8F78 + ldr r3, _0209F2A8 ; =0x021C8F82 + add r1, r0, r4 + mov r0, r7 + add r1, r1, #0x4 + mov r2, #0x6 + strh r5, [r3, r4] + bl MI_CpuCopy8 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_0209F1F8: + add r2, r2, #0x1 + cmp r2, #0x8 + add r1, r1, #0xc + blo _0209F1B8 + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r12, #0x0 + ldr r4, _0209F2A4 ; =0x021C8F78 + mov r0, r12 + mov r3, r12 +_0209F228: + ldr r1, [r4, #0x0] + cmp r1, #0x0 + moveq r0, r3 + beq _0209F264 + ldrh r1, [r4, #0xa] + add r4, r4, #0xc + sub r1, r5, r1 + mov r1, r1, lsl #0x10 + mov r2, r1, asr #0x10 + cmp r2, r12 + movgt r0, r3 + add r3, r3, #0x1 + movgt r12, r1, lsr #0x10 + cmp r3, #0x8 + blo _0209F228 +_0209F264: + mov r1, #0xc + mul r4, r0, r1 + ldr r3, _0209F2A4 ; =0x021C8F78 + mov r0, r7 + add r1, r3, r4 + add r1, r1, #0x4 + mov r2, #0x6 + str r6, [r3, r4] + bl MI_CpuCopy8 + ldr r0, _0209F2A8 ; =0x021C8F82 + strh r5, [r0, r4] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0209F29C: .word 0x7F000001 +_0209F2A0: .word 0x021C8F04 +_0209F2A4: .word 0x021C8F78 +_0209F2A8: .word 0x021C8F82 + + arm_func_start FUN_0209F2AC +FUN_0209F2AC: + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r9, r0 + mov r8, #0x0 + ldr r4, _0209F334 ; =0x021C8F04 + mov r6, r8 + mov r5, #0x64 +_0209F2C8: + mov r0, r9 + bl FUN_0209F338 + mov r7, r6 +_0209F2D4: + ldr r0, [r4, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + mov r0, r5 + bl OS_Sleep + mov r0, r9 + bl FUN_0209F438 +_0209F2FC: ; 0x0209F2FC + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r9,lr} + bxne lr + add r7, r7, #0x1 + cmp r7, #0x14 + blo _0209F2D4 + add r8, r8, #0x1 + cmp r8, #0x8 + blo _0209F2C8 + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_0209F334: .word 0x021C8F04 + + arm_func_start FUN_0209F338 +FUN_0209F338: ; 0x0209F338 + stmdb sp!, {r4,lr} + sub sp, sp, #0x30 + mov r4, r0 + add r0, sp, #0x0 + mov r1, #0x0 + mov r2, #0x2a + bl MI_CpuFill8 +_0209F354: ; 0x0209F354 + add r0, sp, #0x0 + mov r1, #0xff + mov r2, #0x6 + bl MI_CpuFill8 + ldr r0, _0209F428 ; =0x021C8F14 + add r1, sp, #0x6 + mov r2, #0x6 + bl MI_CpuCopy8 + mov r0, #0x1 + ldr r1, _0209F42C ; =0x00000608 + strb r0, [sp, #0xf] + strh r1, [sp, #0xc] + strb r0, [sp, #0x15] + mov r0, #0x8 + ldr r1, _0209F430 ; =0x00000406 + strb r0, [sp, #0x10] + strh r1, [sp, #0x12] + ldr r0, _0209F428 ; =0x021C8F14 + add r1, sp, #0x16 + mov r2, #0x6 + bl MI_CpuCopy8 + ldr r0, _0209F434 ; =0x021C8F04 + mov r1, r4, lsr #0x10 + ldr r3, [r0, #0x0] + mov r0, r1, lsl #0x10 + mov r2, r0, lsr #0x10 + mov r0, r4, lsl #0x10 + mov r1, r0, lsr #0x10 + mov r0, r3, lsr #0x10 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + mov r0, r3, lsl #0x10 + mov r3, r0, lsr #0x10 + mov r0, r4, asr #0x8 + orr r0, r0, r4, lsl #0x8 + strh r0, [sp, #0x1c] + mov r0, r3, asr #0x8 + orr r0, r0, r3, lsl #0x8 + strh r0, [sp, #0x1e] + mov r0, r2, asr #0x8 + orr r0, r0, r2, lsl #0x8 + strh r0, [sp, #0x26] + mov r0, r1, asr #0x8 + orr r0, r0, r1, lsl #0x8 + mov r2, #0x0 + strh r0, [sp, #0x28] + add r0, sp, #0x0 + mov r1, #0x2a + mov r3, r2 + bl FUN_0209F930 + add sp, sp, #0x30 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209F428: .word 0x021C8F14 +_0209F42C: .word 0x00000608 +_0209F430: .word 0x00000406 +_0209F434: .word 0x021C8F04 + + arm_func_start FUN_0209F438 +FUN_0209F438: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + bl OS_DisableInterrupts + ldr r1, _0209F504 ; =0x7F000001 + mov r4, r0 + cmp r7, r1 + mov r5, #0x0 + beq _0209F46C + ldr r0, _0209F508 ; =0x021C8F04 + ldr r0, [r0, #0x0] + cmp r7, r0 + bne _0209F474 +_0209F46C: + ldr r5, _0209F50C ; =0x021C8F14 + b _0209F4EC +_0209F474: + mov r0, r7 + bl FUN_0209FA68 +_0209F47C: ; 0x0209F47C + cmp r0, #0x0 + bne _0209F494 + mov r0, r7 + bl FUN_0209FA54 +_0209F48C: ; 0x0209F48C + cmp r0, #0x0 + beq _0209F49C +_0209F494: + ldr r5, _0209F510 ; =0x0210621C + b _0209F4EC +_0209F49C: + ldr r1, _0209F514 ; =0x021C8F78 + mov r6, r5 +_0209F4A4: + ldr r0, [r1, #0x0] + cmp r7, r0 + bne _0209F4DC + bl OS_GetTick + mov r2, #0xc + mul r3, r6, r2 + ldr r2, _0209F514 ; =0x021C8F78 + mov r5, r0, lsr #0x10 + add r0, r2, r3 + ldr r2, _0209F518 ; =0x021C8F82 + orr r5, r5, r1, lsl #0x10 + strh r5, [r2, r3] + add r5, r0, #0x4 + b _0209F4EC +_0209F4DC: + add r6, r6, #0x1 + cmp r6, #0x8 + add r1, r1, #0xc + blo _0209F4A4 +_0209F4EC: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0209F504: .word 0x7F000001 +_0209F508: .word 0x021C8F04 +_0209F50C: .word 0x021C8F14 +_0209F510: .word 0x0210621C +_0209F514: .word 0x021C8F78 +_0209F518: .word 0x021C8F82 + + arm_func_start FUN_0209F51C +FUN_0209F51C: ; 0x0209F51C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r2, _0209F570 ; =0x021C8EE4 + ldr r1, _0209F574 ; =0x021C8F0C + ldr lr, [r2, #0x0] + ldr r12, [r1, #0x0] + ldr r3, [r2, #0x0] + ldr r1, _0209F578 ; =0x021C8F10 + ldrh r3, [r12, r3] + add r3, lr, r3 + str r3, [r2, #0x0] + ldr r3, [r2, #0x0] + ldr r1, [r1, #0x0] + cmp r3, r1 + movcs r1, #0x0 + strcs r1, [r2, #0x0] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_0209F570: .word 0x021C8EE4 +_0209F574: .word 0x021C8F0C +_0209F578: .word 0x021C8F10 + + arm_func_start FUN_0209F57C +FUN_0209F57C: ; 0x0209F57C + stmdb sp!, {r4-r10,lr} + mov r6, r0 + bl OS_DisableInterrupts + ldr sl, _0209F644 ; =0x021C8EE4 + ldr sb, _0209F648 ; =0x021C8EDC + ldr r2, [r10, #0x0] + ldr r1, [r9, #0x0] + mov r5, r0 + cmp r2, r1 + bne _0209F5D4 + ldr r8, _0209F64C ; =0x021D3498 + ldr r7, _0209F650 ; =0x021C8F08 + mov r4, #0x0 +_0209F5B0: + ldr r1, [r8, #0x4] + mov r0, r4 + str r1, [r7, #0x0] + bl OS_SleepThread + str r4, [r7, #0x0] + ldr r1, [r10, #0x0] + ldr r0, [r9, #0x0] + cmp r1, r0 + beq _0209F5B0 +_0209F5D4: + mov r0, r5 + bl OS_RestoreInterrupts + ldr r0, _0209F654 ; =0x021C8F0C + ldr r5, [r0, #0x0] + ldr r0, _0209F644 ; =0x021C8EE4 + ldr r1, _0209F658 ; =0x021C8F10 + mov r3, #0x0 +_0209F5F0: + ldr r4, [r1, #0x0] + ldr r2, [r0, #0x0] + sub r2, r4, r2 + cmp r2, #0x2 + strcc r3, [r0, #0x0] + ldr r2, [r0, #0x0] + ldrh r2, [r5, r2] + cmp r2, #0x0 + streq r3, [r0, #0x0] + cmp r2, #0x0 + beq _0209F5F0 + sub r0, r2, #0x2 + ldr r1, _0209F654 ; =0x021C8F0C + str r0, [r6, #0x0] + ldr r0, _0209F644 ; =0x021C8EE4 + ldr r1, [r1, #0x0] + ldr r0, [r0, #0x0] + add r0, r1, r0 + add r0, r0, #0x2 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_0209F644: .word 0x021C8EE4 +_0209F648: .word 0x021C8EDC +_0209F64C: .word 0x021D3498 +_0209F650: .word 0x021C8F08 +_0209F654: .word 0x021C8F0C +_0209F658: .word 0x021C8F10 + + arm_func_start FUN_0209F65C +FUN_0209F65C: ; 0x0209F65C + stmdb sp!, {lr} + sub sp, sp, #0xc + mov r12, #0x0 + str r12, [sp, #0x0] + str r12, [sp, #0x4] + bl FUN_0209F6C0 + ldr r0, _0209F6BC ; =0x021C8F08 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addeq sp, sp, #0xc + ldmeqia sp!, {lr} + bxeq lr + ldr r0, [r0, #0x0] + bl OS_IsThreadTerminated +_0209F694: ; 0x0209F694 + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {lr} + bxne lr + ldr r0, _0209F6BC ; =0x021C8F08 + ldr r0, [r0, #0x0] + bl OS_WakeupThreadDirect + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_0209F6BC: .word 0x021C8F08 + + arm_func_start FUN_0209F6C0 +FUN_0209F6C0: ; 0x0209F6C0 + stmdb sp!, {r4-r8,lr} + ldr r4, _0209F918 ; =0x021C8F0C + mov r7, r0 + ldr r0, [r4, #0x0] + mov r6, r2 + mov r5, r3 + cmp r0, #0x0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r2, _0209F91C ; =0x021C8F10 + ldr r2, [r2, #0x0] + cmp r2, #0x0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r2, [sp, #0x1c] + add r2, r5, r2 + cmp r2, #0x8 + ldmccia sp!, {r4-r8,lr} + bxcc lr + ldr r3, _0209F920 ; =0x000005E4 + cmp r2, r3 + ldmhiia sp!, {r4-r8,lr} + bxhi lr + ldr r3, _0209F924 ; =0x02106230 + ldrb r8, [r6, #0x0] + ldrb r4, [r3, #0x0] + cmp r8, r4 + ldmneia sp!, {r4-r8,lr} + bxne lr + ldrb r8, [r6, #0x1] + ldrb r4, [r3, #0x1] + cmp r8, r4 + ldmneia sp!, {r4-r8,lr} + bxne lr + ldrb r4, [r6, #0x2] + ldrb r3, [r3, #0x2] + cmp r4, r3 + ldmneia sp!, {r4-r8,lr} + bxne lr + ldrb r3, [r6, #0x6] + cmp r3, #0x8 + ldmneia sp!, {r4-r8,lr} + bxne lr + ldrb r3, [r6, #0x7] + cmp r3, #0x0 + beq _0209F784 + cmp r3, #0x6 + ldmneia sp!, {r4-r8,lr} + bxne lr +_0209F784: + ldr r4, _0209F928 ; =0x021C8EDC + add r2, r2, #0x9 + bic r2, r2, #0x1 + ldr lr, [r4, #0x0] + mov r3, r2, lsl #0x10 + ldr ip, _0209F92C ; =0x021C8EE4 + ldr r8, [r4, #0x0] + ldr r4, [r12, #0x0] + mov r2, r3, lsr #0x10 + cmp r8, r4 + add r4, lr, r3, lsr #0x10 + bhs _0209F7C4 + ldr r3, [r12, #0x0] + cmp r3, r4 + ldmlsia sp!, {r4-r8,lr} + bxls lr +_0209F7C4: + ldr r3, _0209F91C ; =0x021C8F10 + ldr r8, [r3, #0x0] + cmp r4, r8 + bne _0209F7F0 + ldr r3, _0209F92C ; =0x021C8EE4 + mov r4, #0x0 + ldr r3, [r3, #0x0] + cmp r3, #0x0 + bne _0209F814 + ldmia sp!, {r4-r8,lr} + bx lr +_0209F7F0: + ldr r3, [r3, #0x0] + cmp r4, r3 + bls _0209F814 + ldr r3, _0209F92C ; =0x021C8EE4 + mov r4, r2 + ldr r3, [r3, #0x0] + cmp r3, r2 + ldmlsia sp!, {r4-r8,lr} + bxls lr +_0209F814: + ldr ip, _0209F928 ; =0x021C8EDC + ldr r3, _0209F91C ; =0x021C8F10 + ldr lr, [r12, #0x0] + ldr r8, [r3, #0x0] + add lr, lr, r2 + cmp lr, r8 + bls _0209F858 + ldr r8, [r3, #0x0] + ldr r3, [r12, #0x0] + sub r3, r8, r3 + cmp r3, #0x2 + ldrcs r3, [r12, #0x0] + movcs r8, #0x0 + strcsh r8, [r0, r3] + ldr r0, _0209F928 ; =0x021C8EDC + mov r3, #0x0 + str r3, [r0, #0x0] +_0209F858: + ldr ip, _0209F918 ; =0x021C8F0C + ldr r3, _0209F928 ; =0x021C8EDC + ldr r8, [r12, #0x0] + ldr lr, [r3, #0x0] + mov r0, r1 + strh r2, [r8, lr] + ldr r12, [r12, #0x0] + ldr r1, [r3, #0x0] + mov r2, #0x6 + add r1, r12, r1 + add r1, r1, #0x2 + bl MI_CpuCopy8 + ldr r1, _0209F918 ; =0x021C8F0C + ldr r0, _0209F928 ; =0x021C8EDC + ldr r2, [r1, #0x0] + ldr r1, [r0, #0x0] + mov r0, r7 + add r1, r2, r1 + add r1, r1, #0x8 + mov r2, #0x6 + bl MI_CpuCopy8 + ldr r1, _0209F918 ; =0x021C8F0C + ldr r0, _0209F928 ; =0x021C8EDC + ldr r2, [r1, #0x0] + ldr r1, [r0, #0x0] + add r0, r6, #0x6 + add r1, r2, r1 + add r1, r1, #0xe + sub r2, r5, #0x6 + bl MI_CpuCopy8 + ldr r0, [sp, #0x18] + cmp r0, #0x0 + beq _0209F908 + ldr r2, [sp, #0x1c] + cmp r2, #0x0 + beq _0209F908 + ldr r3, _0209F918 ; =0x021C8F0C + ldr r1, _0209F928 ; =0x021C8EDC + ldr r3, [r3, #0x0] + ldr r1, [r1, #0x0] + add r1, r3, r1 + add r1, r1, #0x8 + add r1, r1, r5 + bl MI_CpuCopy8 +_0209F908: + ldr r0, _0209F928 ; =0x021C8EDC + str r4, [r0, #0x0] + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0209F918: .word 0x021C8F0C +_0209F91C: .word 0x021C8F10 +_0209F920: .word 0x000005E4 +_0209F924: .word 0x02106230 +_0209F928: .word 0x021C8EDC +_0209F92C: .word 0x021C8EE4 + + arm_func_start FUN_0209F930 +FUN_0209F930: ; 0x0209F930 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + add r1, r6, r5 + mov r4, r3 + cmp r1, r2 + beq _0209F958 + mov r0, r2 + mov r2, r4 + bl MI_CpuCopy8 +_0209F958: + ldr r0, _0209F998 ; =0x02106230 + add r1, r6, #0x6 + mov r2, #0x6 + bl MI_CpuCopy8 + add r2, r5, r4 + mov r0, r6 + add r1, r6, #0x6 + sub r2, r2, #0x6 + bl FUN_020A8644 +_0209F97C: ; 0x0209F97C + cmp r0, #0x0 + movlt r1, #0x1 + ldr r0, _0209F99C ; =0x021C8EA8 + movge r1, #0x0 + strb r1, [r0, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_0209F998: .word 0x02106230 +_0209F99C: .word 0x021C8EA8 + + arm_func_start FUN_0209F9A0 +FUN_0209F9A0: + mov r12, #0x0 +_0209F9A4: + ldrh r3, [r0], #0x2 + ldrh r2, [r1], #0x2 + cmp r3, r2 + movne r0, #0x1 + bxne lr + add r12, r12, #0x1 + cmp r12, #0x3 + blt _0209F9A4 + mov r0, #0x0 + bx lr + + arm_func_start FUN_0209F9CC +FUN_0209F9CC: + stmdb sp!, {r4-r6,lr} + ldr r1, _0209FA4C ; =0x021C8F04 + mov r5, #0x1 + ldr r1, [r1, #0x0] + mov r6, r0 + mov r4, r5 + mov r2, r5 + mov r0, r5 + cmp r1, #0x0 + beq _0209F9FC + cmp r6, r1 + movne r0, #0x0 +_0209F9FC: + cmp r0, #0x0 + bne _0209FA10 + ldr r0, _0209FA50 ; =0x7F000001 + cmp r6, r0 + movne r2, #0x0 +_0209FA10: + cmp r2, #0x0 + bne _0209FA28 + mov r0, r6 + bl FUN_0209FA68 +_0209FA20: ; 0x0209FA20 + cmp r0, #0x0 + moveq r4, #0x0 +_0209FA28: + cmp r4, #0x0 + bne _0209FA40 + mov r0, r6 + bl FUN_0209FA54 +_0209FA38: ; 0x0209FA38 + cmp r0, #0x0 + moveq r5, #0x0 +_0209FA40: + mov r0, r5 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_0209FA4C: .word 0x021C8F04 +_0209FA50: .word 0x7F000001 + + arm_func_start FUN_0209FA54 +FUN_0209FA54: + and r0, r0, #0xf0000000 + cmp r0, #0xe0000000 + moveq r0, #0x1 + movne r0, #0x0 + bx lr + + arm_func_start FUN_0209FA68 +FUN_0209FA68: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, #0x0 + bl FUN_0209FAD8 +_0209FA7C: ; 0x0209FA7C + cmp r0, #0x0 + beq _0209FA9C + ldr r0, _0209FAAC ; =0x021C8ED0 + ldr r0, [r0, #0x0] + mvn r1, r0 + and r0, r1, r5 + cmp r1, r0 + moveq r4, #0x1 +_0209FA9C: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_0209FAAC: .word 0x021C8ED0 + + arm_func_start FUN_0209FAB0 +FUN_0209FAB0: + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_0209FAD8 +_0209FABC: ; 0x0209FABC + cmp r0, #0x0 + ldreq r0, _0209FAD4 ; =0x021C8EE0 + ldreq r4, [r0, #0x0] + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209FAD4: .word 0x021C8EE0 + + arm_func_start FUN_0209FAD8 +FUN_0209FAD8: + mvn r1, #0x0 + cmp r0, r1 + mov r12, #0x1 + beq _0209FB14 + ldr r1, _0209FB1C ; =0x7F000001 + cmp r0, r1 + beq _0209FB14 + ldr r2, _0209FB20 ; =0x021C8ED0 + ldr r1, _0209FB24 ; =0x021C8F04 + ldr r3, [r2, #0x0] + ldr r1, [r1, #0x0] + and r2, r0, r3 + and r0, r1, r3 + cmp r2, r0 + movne r12, #0x0 +_0209FB14: + mov r0, r12 + bx lr + .balign 4 +_0209FB1C: .word 0x7F000001 +_0209FB20: .word 0x021C8ED0 +_0209FB24: .word 0x021C8F04 + + arm_func_start FUN_0209FB28 +FUN_0209FB28: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r2 + mov r2, r3 + mov r5, r1 + bl FUN_0209FBC8 + mov r2, r0 + add r0, r4, #0xc + mov r1, #0x8 + bl FUN_0209FBC8 + add r1, r0, r5 + ands r0, r1, #0x10000 + ldrne r0, _0209FB80 ; =0x0000FFFF + addne r1, r1, #0x1 + andne r1, r1, r0 + ldr r0, _0209FB80 ; =0x0000FFFF + cmp r1, r0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_0209FB80: .word 0x0000FFFF + + arm_func_start FUN_0209FB84 +FUN_0209FB84: ; 0x0209FB84 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, #0x0 + bl FUN_0209FBC8 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl FUN_0209FBAC + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_0209FBAC +FUN_0209FBAC: ; 0x0209FBAC + ldr r1, _0209FBC4 ; =0x0000FFFF + eor r0, r0, r1 + mov r0, r0, lsl #0x10 + movs r0, r0, lsr #0x10 + moveq r0, r1 + bx lr + .balign 4 +_0209FBC4: .word 0x0000FFFF + + arm_func_start FUN_0209FBC8 +FUN_0209FBC8: ; 0x0209FBC8 + ands r3, r0, #0x1 + beq _0209FC00 + cmp r1, #0x1 + bls _0209FC54 +_0209FBD8: + ldrb r12, [r0, #0x0] + ldrb r3, [r0, #0x1] + sub r1, r1, #0x2 + cmp r1, #0x1 + orr r3, r3, r12, lsl #0x8 + mov r3, r3, lsl #0x10 + add r2, r2, r3, lsr #0x10 + add r0, r0, #0x2 + bhi _0209FBD8 + b _0209FC54 +_0209FC00: + mov r2, r2, lsl #0x10 + mov r3, r2, lsr #0x10 + mov r2, r3, asr #0x8 + orr r2, r2, r3, lsl #0x8 + mov r2, r2, lsl #0x10 + cmp r1, #0x1 + mov r2, r2, lsr #0x10 + bls _0209FC38 +_0209FC20: + ldrh r3, [r0, #0x0] + sub r1, r1, #0x2 + cmp r1, #0x1 + add r2, r2, r3 + add r0, r0, #0x2 + bhi _0209FC20 +_0209FC38: + ldr r3, _0209FC7C ; =0x00FF00FF + ldr ip, _0209FC80 ; =0xFF00FF00 + and r3, r3, r2, lsr #0x8 + and r2, r12, r2, lsl #0x8 + orr r3, r3, r2 + mov r2, r3, lsr #0x10 + orr r2, r2, r3, lsl #0x10 +_0209FC54: + cmp r1, #0x0 + ldrneb r0, [r0, #0x0] + addne r2, r2, r0, lsl #0x8 + ldr r0, _0209FC84 ; =0x0000FFFF + and r0, r2, r0 + add r0, r0, r2, lsr #0x10 + add r0, r0, r0, lsr #0x10 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bx lr + .balign 4 +_0209FC7C: .word 0x00FF00FF +_0209FC80: .word 0xFF00FF00 +_0209FC84: .word 0x0000FFFF + + arm_func_start FUN_0209FC88 +FUN_0209FC88: ; 0x0209FC88 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r2, _0209FCB8 ; =0x02106218 + ldr r0, _0209FCBC ; =0x021C9160 + mov r1, r4 + str r4, [r2, #0x0] + bl OS_SetThreadPriority + ldr r0, _0209FCC0 ; =0x021C90A0 + mov r1, r4 + bl OS_SetThreadPriority + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209FCB8: .word 0x02106218 +_0209FCBC: .word 0x021C9160 +_0209FCC0: .word 0x021C90A0 + + arm_func_start FUN_0209FCC4 +FUN_0209FCC4: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FUN_0209FD34 + ldr r0, _0209FD10 ; =0x021C90A0 + bl OS_JoinThread + ldr r0, _0209FD14 ; =0x021C9160 + bl OS_DestroyThread + ldr r1, _0209FD18 ; =0x021C8F08 + mov r0, #0x0 + str r0, [r1, #0x0] + bl FUN_020A0098 + ldr r1, _0209FD1C ; =0x021C8F0C + mov r2, #0x0 + ldr r0, _0209FD20 ; =0x021C8F10 + str r2, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_0209FD10: .word 0x021C90A0 +_0209FD14: .word 0x021C9160 +_0209FD18: .word 0x021C8F08 +_0209FD1C: .word 0x021C8F0C +_0209FD20: .word 0x021C8F10 + + arm_func_start FUN_0209FD24 +FUN_0209FD24: ; 0x0209FD24 + ldr r1, _0209FD30 ; =0x021C8EF0 + str r0, [r1, #0x0] + bx lr + .balign 4 +_0209FD30: .word 0x021C8EF0 + + arm_func_start FUN_0209FD34 +FUN_0209FD34: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + mov r5, r0 + ldr r0, _0209FD8C ; =0x021C90A0 + bl OS_IsThreadTerminated + movs r4, r0 + bne _0209FD74 + ldr r1, _0209FD90 ; =0x021C8EF8 + ldr r0, [r1, #0x0] + cmp r0, #0x0 + bne _0209FD74 + ldr r0, _0209FD8C ; =0x021C90A0 + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_WakeupThreadDirect +_0209FD74: + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_0209FD8C: .word 0x021C90A0 +_0209FD90: .word 0x021C8EF8 + + arm_func_start FUN_0209FD94 +FUN_0209FD94: ; 0x0209FD94 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r4, r0 + ldr r0, _0209FFD4 ; =0x02000BEC + bl FUN_02000B60 + ldr r12, [r4, #0x14] + ldr r6, [r4, #0x18] + mov r1, #0x0 + cmp r6, r1 + cmpeq r12, r1 + beq _0209FDEC + ldr r0, _0209FFD8 ; =0x021C8F24 + ldr r5, _0209FFDC ; =0x6C078965 + ldr r3, _0209FFE0 ; =0x5D588B65 + ldr r2, _0209FFE4 ; =0x00269EC3 + str r12, [r0, #0x0] + str r6, [r0, #0x4] + str r5, [r0, #0x8] + str r3, [r0, #0xc] + str r2, [r0, #0x10] + str r1, [r0, #0x14] + b _0209FE1C +_0209FDEC: + bl OS_GetTick + ldr r2, _0209FFD8 ; =0x021C8F24 + ldr ip, _0209FFDC ; =0x6C078965 + ldr r6, _0209FFE0 ; =0x5D588B65 + ldr r5, _0209FFE4 ; =0x00269EC3 + mov r3, #0x0 + str r0, [r2, #0x0] + str r1, [r2, #0x4] + str r12, [r2, #0x8] + str r6, [r2, #0xc] + str r5, [r2, #0x10] + str r3, [r2, #0x14] +_0209FE1C: + ldr r2, [r4, #0x4] + cmp r2, #0x0 + beq _0209FE4C + ldr r0, [r4, #0x8] + cmp r0, #0x0 + beq _0209FE4C + ldr r1, _0209FFE8 ; =0x021C8EC8 + ldr r0, _0209FFEC ; =0x021C8EF4 + str r2, [r1, #0x0] + ldr r1, [r4, #0x8] + str r1, [r0, #0x0] + b _0209FE60 +_0209FE4C: + ldr r2, _0209FFF0 ; =FUN_020A0058 + ldr r1, _0209FFE8 ; =0x021C8EC8 + ldr r0, _0209FFEC ; =0x021C8EF4 + str r2, [r1, #0x0] + str r2, [r0, #0x0] +_0209FE60: + ldr r1, [r4, #0x0] + ldr r0, _0209FFF4 ; =0x021C8EC4 + ldr ip, _0209FFD8 ; =0x021C8F24 + str r1, [r0, #0x0] + ldr r1, [r4, #0x24] + ldr r3, [r12, #0x8] + cmp r1, #0x0 + ldrne r0, _0209FFF8 ; =0x021C8EB0 + strneh r1, [r0, #0x0] + ldreq r1, _0209FFFC ; =0x000005B4 + ldreq r0, _0209FFF8 ; =0x021C8EB0 + streqh r1, [r0, #0x0] + ldr r2, [r4, #0x28] + ldr r1, _020A0000 ; =0x021C8EE8 + ldr r0, _020A0004 ; =0x021C8ED8 + str r2, [r1, #0x0] + ldr r1, [r4, #0x2c] + ldr r2, [r12, #0x0] + str r1, [r0, #0x0] + ldr r1, [r4, #0xc] + umull lr, r5, r3, r2 + cmp r1, #0x0 + ldrne r0, _020A0008 ; =0x021C8ECC + strne r1, [r0, #0x0] + ldreq r1, _0209FFF0 ; =FUN_020A0058 + ldreq r0, _020A0008 ; =0x021C8ECC + streq r1, [r0, #0x0] + ldr r1, [r4, #0x10] + cmp r1, #0x0 + ldrne r0, _020A000C ; =0x021C8EFC + strne r1, [r0, #0x0] + ldreq r1, _020A0010 ; =FUN_020A0050 + ldreq r0, _020A000C ; =0x021C8EFC + streq r1, [r0, #0x0] + ldr r1, [r12, #0x4] + ldr r0, _020A0014 ; =0x00000F88 + mla r5, r3, r1, r5 + ldr r1, [r12, #0xc] + ldr r3, [r12, #0x10] + mla r5, r1, r2, r5 + adds r2, r3, lr + ldr r1, [r12, #0x14] + mov r3, #0x0 + adc r1, r1, r5 + umull lr, r5, r1, r0 + mla r5, r1, r3, r5 + mla r5, r3, r0, r5 + ldr r6, [r4, #0x1c] + ldr r0, _020A0018 ; =0x021C8F0C + ldr lr, _020A001C ; =0x021C8F10 + str r6, [r0, #0x0] + ldr r4, [r4, #0x20] + ldr r0, _020A0020 ; =0x021C8EE4 + str r4, [lr, #0x0] + str r3, [r0, #0x0] + ldr lr, _020A0024 ; =0x021C8EDC + ldr r4, _020A0028 ; =0x021C8EBC + add r5, r5, #0x400 + ldr r0, _020A002C ; =0x021C8F14 + str r3, [lr, #0x0] + str r2, [r12, #0x0] + str r1, [r12, #0x4] + strh r5, [r4, #0x0] + bl OS_GetMacAddress + ldr r0, _020A0030 ; =0x021C8EAC + mov r2, #0x0 + strb r2, [r0, #0x0] + mov r1, #0x800 + str r1, [sp, #0x0] + ldr r0, _020A0034 ; =0x02106218 + ldr r1, _020A0038 ; =FUN_0209CD3C + ldr r4, [r0, #0x0] + ldr r0, _020A003C ; =0x021C9160 + ldr r3, _020A0040 ; =0x021CA6E0 + str r4, [sp, #0x4] + bl OS_CreateThread + mov r1, #0x800 + ldr r0, _020A0034 ; =0x02106218 + str r1, [sp, #0x0] + ldr r1, [r0, #0x0] + ldr r0, _020A0044 ; =0x021C90A0 + str r1, [sp, #0x4] + ldr r1, _020A0048 ; =FUN_0209BA80 + ldr r3, _020A004C ; =0x021C9EE0 + mov r2, #0x0 + bl OS_CreateThread + ldr r0, _020A003C ; =0x021C9160 + bl OS_WakeupThreadDirect + ldr r0, _020A0044 ; =0x021C90A0 + bl OS_WakeupThreadDirect + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_0209FFD4: .word 0x02000BEC +_0209FFD8: .word 0x021C8F24 +_0209FFDC: .word 0x6C078965 +_0209FFE0: .word 0x5D588B65 +_0209FFE4: .word 0x00269EC3 +_0209FFE8: .word 0x021C8EC8 +_0209FFEC: .word 0x021C8EF4 +_0209FFF0: .word FUN_020A0058 +_0209FFF4: .word 0x021C8EC4 +_0209FFF8: .word 0x021C8EB0 +_0209FFFC: .word 0x000005B4 +_020A0000: .word 0x021C8EE8 +_020A0004: .word 0x021C8ED8 +_020A0008: .word 0x021C8ECC +_020A000C: .word 0x021C8EFC +_020A0010: .word FUN_020A0050 +_020A0014: .word 0x00000F88 +_020A0018: .word 0x021C8F0C +_020A001C: .word 0x021C8F10 +_020A0020: .word 0x021C8EE4 +_020A0024: .word 0x021C8EDC +_020A0028: .word 0x021C8EBC +_020A002C: .word 0x021C8F14 +_020A0030: .word 0x021C8EAC +_020A0034: .word 0x02106218 +_020A0038: .word FUN_0209CD3C +_020A003C: .word 0x021C9160 +_020A0040: .word 0x021CA6E0 +_020A0044: .word 0x021C90A0 +_020A0048: .word FUN_0209BA80 +_020A004C: .word 0x021C9EE0 + + arm_func_start FUN_020A0050 +FUN_020A0050: ; 0x020A0050 + mov r0, #0x1 + bx lr + + arm_func_start FUN_020A0058 +FUN_020A0058: ; 0x020A0058 + bx lr + + arm_func_start FUN_020A005C +FUN_020A005C: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020A0094 ; =0x021C8ED8 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020A0084 + bl OS_YieldThread + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A0084: + bl OS_Sleep + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A0094: .word 0x021C8ED8 + + arm_func_start FUN_020A0098 +FUN_020A0098: ; 0x020A0098 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r1, _020A01B8 ; =0x021C8F04 + ldr r5, _020A01BC ; =0x021C8EC0 + ldr r1, [r1, #0x0] + ldr r3, _020A01C0 ; =0x021C8F1C + cmp r1, #0x0 + mov r1, #0x0 + movne r6, #0x1 + ldr ip, _020A01C4 ; =0x021C8ED0 + ldr r2, _020A01C8 ; =0x021C8ED4 + moveq r6, #0x0 + ldr lr, _020A01B8 ; =0x021C8F04 + ldr r4, _020A01CC ; =0x021C8EE0 + cmp r6, #0x0 + str r1, [r12, #0x0] + str r1, [r3, #0x0] + str r1, [r3, #0x4] + str r1, [r2, #0x0] + addeq sp, sp, #0x4 + str r0, [r5, #0x0] + str r1, [lr, #0x0] + str r1, [r4, #0x0] + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldr r0, _020A01D0 ; =0x021C8F78 + mov r2, #0x60 + bl MI_CpuFill8 + ldr r0, _020A01D4 ; =0x021D3498 + ldr r5, [r0, #0x8] + cmp r5, #0x0 + beq _020A016C + mov r4, #0x0 +_020A011C: + ldr r1, [r5, #0xa4] + cmp r1, #0x0 + beq _020A0160 + ldr r0, [r1, #0x0] + cmp r0, #0x0 + beq _020A0160 + ldrb r0, [r1, #0x8] + cmp r0, #0xa + beq _020A0148 + cmp r0, #0xb + strneb r4, [r1, #0x8] +_020A0148: + ldr r0, [r1, #0x4] + cmp r0, #0x0 + beq _020A0160 + str r4, [r1, #0x4] + ldr r0, [r1, #0x0] + bl OS_WakeupThreadDirect +_020A0160: + ldr r5, [r5, #0x68] + cmp r5, #0x0 + bne _020A011C +_020A016C: + ldr r6, _020A01D8 ; =0x021C9520 + mov r7, #0x0 + ldr r4, _020A01DC ; =0x021C8EF4 + mov r5, r7 +_020A017C: + ldrh r0, [r6, #0x4] + cmp r0, #0x0 + beq _020A0198 + ldr r0, [r6, #0x34] + ldr r1, [r4, #0x0] + blx r1 + strh r5, [r6, #0x4] +_020A0198: + add r7, r7, #0x1 + cmp r7, #0x8 + add r6, r6, #0x38 + blt _020A017C + bl FUN_020A01E0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020A01B8: .word 0x021C8F04 +_020A01BC: .word 0x021C8EC0 +_020A01C0: .word 0x021C8F1C +_020A01C4: .word 0x021C8ED0 +_020A01C8: .word 0x021C8ED4 +_020A01CC: .word 0x021C8EE0 +_020A01D0: .word 0x021C8F78 +_020A01D4: .word 0x021D3498 +_020A01D8: .word 0x021C9520 +_020A01DC: .word 0x021C8EF4 + + arm_func_start FUN_020A01E0 +FUN_020A01E0: ; 0x020A01E0 + ldr ip, _020A01F4 ; =MI_CpuFill8 + ldr r0, _020A01F8 ; =0x021CA6FC + mov r1, #0x0 + mov r2, #0x170 + bx r12 + .balign 4 +_020A01F4: .word MI_CpuFill8 +_020A01F8: .word 0x021CA6FC + + arm_func_start FUN_020A01FC +FUN_020A01FC: ; 0x020A01FC + stmdb sp!, {r4-r6,lr} + mov r5, r0 + bl OS_DisableInterrupts + ldr r4, _020A02E0 ; =0x021CA6FC + mov r6, #0x0 + mov r2, r6 + ldr r1, _020A02E4 ; =0x000003BD +_020A0218: + ldrb r3, [r4, #0x5a] + cmp r3, #0x0 + beq _020A0234 + ldr r3, [r4, #0x50] + sub r3, r5, r3 + cmp r3, r1 + strgtb r2, [r4, #0x5a] +_020A0234: + add r6, r6, #0x1 + cmp r6, #0x4 + add r4, r4, #0x5c + blt _020A0218 + bl OS_RestoreInterrupts + ldr r0, _020A02E8 ; =0x021D3498 + ldr r4, [r0, #0x8] + cmp r4, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r6, #0x0 +_020A0260: + ldr r1, [r4, #0xa4] + cmp r1, #0x0 + beq _020A02CC + ldr r0, [r1, #0x0] + cmp r0, #0x0 + beq _020A02CC + ldrb r0, [r1, #0x9] + cmp r0, #0x0 + beq _020A02CC + ldrb r0, [r1, #0x8] + cmp r0, #0x4 + bne _020A02CC + ldr r0, [r1, #0xc] + ldrb r0, [r0, #0x455] + cmp r0, #0x8 + bhs _020A02CC + ldr r0, [r1, #0x10] + sub r0, r5, r0 + cmp r0, #0xef + ble _020A02CC + ldr r0, [r1, #0x4] + cmp r0, #0x2 + bne _020A02CC + strb r6, [r1, #0x8] + str r6, [r1, #0x4] + ldr r0, [r1, #0x0] + bl OS_WakeupThreadDirect +_020A02CC: + ldr r4, [r4, #0x68] + cmp r4, #0x0 + bne _020A0260 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A02E0: .word 0x021CA6FC +_020A02E4: .word 0x000003BD +_020A02E8: .word 0x021D3498 + + arm_func_start FUN_020A02EC +FUN_020A02EC: + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, _020A0318 ; =0x02000C04 + bl FUN_02000B60 + ldr r0, _020A031C ; =0x021D3498 + ldr r0, [r0, #0x4] + ldr r0, [r0, #0xa4] + cmp r0, #0x0 + strneb r4, [r0, #0x9] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A0318: .word 0x02000C04 +_020A031C: .word 0x021D3498 + + arm_func_start FUN_020A0320 +FUN_020A0320: ; 0x020A0320 + stmdb sp!, {r4,lr} + ldr r4, [r0, #0xc] + mov r0, #0x0 + strb r0, [r4, #0x455] + ldr r0, [r4, #0x824] + cmp r0, #0x0 + beq _020A0348 + ldr r1, _020A0358 ; =0x021C8EF4 + ldr r1, [r1, #0x0] + blx r1 +_020A0348: + mov r0, #0x0 + str r0, [r4, #0x824] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A0358: .word 0x021C8EF4 + + arm_func_start FUN_020A035C +FUN_020A035C: ; 0x020A035C + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x20 + mov r5, r0 + ldr r4, [r5, #0xc] + ldrb r0, [r4, #0x455] + cmp r0, #0x8 + bne _020A03CC + mov r12, #0x0 + mov r6, #0x15 + mov lr, #0x3 + mov r3, #0x2 + mov r2, #0x1 + add r1, sp, #0x4 + mov r0, r4 + strb r6, [sp, #0x4] + strb lr, [sp, #0x5] + strb r12, [sp, #0x6] + strb r12, [sp, #0x7] + strb r3, [sp, #0x8] + strb r2, [sp, #0x9] + strb r12, [sp, #0xa] + bl FUN_020A19F4 + mov r2, #0x0 + mov r1, r0 + add r0, sp, #0x4 + mov r3, r2 + str r5, [sp, #0x0] + bl FUN_0209C1D4 +_020A03CC: + mov r0, #0x0 + strb r0, [r4, #0x455] + add sp, sp, #0x20 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_020A03E0 +FUN_020A03E0: ; 0x020A03E0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x24 + ldr r4, [sp, #0x48] + mov r9, r1 + mov r1, r4 + mov r10, r0 + mov r0, #0x0 + ldr r1, [r1, #0xc] + str r0, [sp, #0x8] + str r0, [sp, #0x1c] + str r0, [sp, #0x14] + str r0, [sp, #0x18] + mov r0, #0x17 + str r0, [sp, #0xc] + mov r0, #0x3 + str r4, [sp, #0x48] + str r1, [sp, #0x4] + mov r8, r2 + add r6, r9, r3 + str r0, [sp, #0x10] +_020A0430: + ldr r0, _020A052C ; =0x00000B4F + ldr r1, _020A0530 ; =0x021C8EC8 + cmp r6, r0 + movgt r5, r0 + movle r5, r6 + ldr r1, [r1, #0x0] + add r0, r5, #0x19 + blx r1 + movs r7, r0 + beq _020A051C + cmp r9, r5 + movcs r4, r5 + movcc r4, r9 + mov r0, r10 + add r1, r7, #0x5 + mov r2, r4 + sub r11, r5, r4 + bl MI_CpuCopy8 + add r1, r7, #0x5 + mov r0, r8 + add r1, r1, r4 + mov r2, r11 + add r10, r10, r4 + sub r9, r9, r4 + bl MI_CpuCopy8 + ldr r0, [sp, #0xc] + mov r1, r7 + strb r0, [r7, #0x0] + ldr r0, [sp, #0x10] + add r8, r8, r11 + strb r0, [r7, #0x1] + ldr r0, [sp, #0x14] + strb r0, [r7, #0x2] + mov r0, r5, asr #0x8 + strb r0, [r7, #0x3] + ldr r0, [sp, #0x4] + strb r5, [r7, #0x4] + bl FUN_020A19F4 + ldr r1, [sp, #0x48] + ldr r2, [sp, #0x18] + mov r4, r0 + str r1, [sp, #0x0] + mov r0, r7 + mov r1, r4 + mov r3, r2 + bl FUN_0209C1D4 + cmp r0, r4 + ldr r1, _020A0534 ; =0x021C8EF4 + mov r0, r7 + ldr r1, [r1, #0x0] + ldrcc r5, [sp, #0x1c] + blx r1 + ldr r0, [sp, #0x8] + subs r6, r6, r5 + add r0, r0, r5 + str r0, [sp, #0x8] + beq _020A051C + cmp r5, #0x0 + bne _020A0430 +_020A051C: + ldr r0, [sp, #0x8] + add sp, sp, #0x24 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020A052C: .word 0x00000B4F +_020A0530: .word 0x021C8EC8 +_020A0534: .word 0x021C8EF4 + + arm_func_start FUN_020A0538 +FUN_020A0538: ; 0x020A0538 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r4, [r5, #0xc] + ldr r0, [r4, #0x824] + cmp r0, #0x0 + beq _020A0560 + ldrb r0, [r4, #0x456] + cmp r0, #0x0 + bne _020A0568 +_020A0560: + mov r0, r5 + bl FUN_020A05D4 +_020A0568: + ldr r1, [r4, #0x824] + cmp r1, #0x0 + beq _020A0594 + ldrb r0, [r4, #0x456] + cmp r0, #0x0 + ldrne r1, [r4, #0x828] + ldrne r0, [r4, #0x82c] + addne sp, sp, #0x4 + subne r0, r1, r0 + ldmneia sp!, {r4-r5,lr} + bxne lr +_020A0594: + cmp r1, #0x0 + bne _020A05C4 + ldrb r0, [r5, #0x8] + cmp r0, #0x4 + bne _020A05B4 + ldrb r0, [r4, #0x455] + cmp r0, #0x9 + bne _020A05C4 +_020A05B4: + add sp, sp, #0x4 + mvn r0, #0x0 + ldmia sp!, {r4-r5,lr} + bx lr +_020A05C4: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_020A05D4 +FUN_020A05D4: ; 0x020A05D4 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r5, r0 + ldr r4, [r5, #0xc] + ldr r0, [r4, #0x824] + cmp r0, #0x0 + bne _020A0684 + ldr r0, [r5, #0x44] + cmp r0, #0x5 + addcc sp, sp, #0x8 + ldmccia sp!, {r4-r6,lr} + bxcc lr + add r0, sp, #0x0 + mov r1, r5 + bl FUN_0209C6C0 + ldrb r2, [r0, #0x3] + ldrb r0, [r0, #0x4] + ldr r1, _020A0730 ; =0x00004805 + add r0, r0, r2, lsl #0x8 + add r0, r0, #0x5 + str r0, [sp, #0x0] + cmp r0, r1 + movhi r0, #0x9 + addhi sp, sp, #0x8 + strhib r0, [r4, #0x455] + ldmhiia sp!, {r4-r6,lr} + bxhi lr + ldr r1, _020A0734 ; =0x021C8EC8 + ldr r1, [r1, #0x0] + blx r1 + str r0, [r4, #0x824] + ldr r0, [r4, #0x824] + cmp r0, #0x0 + moveq r0, #0x9 + addeq sp, sp, #0x8 + streqb r0, [r4, #0x455] + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r1, [sp, #0x0] + mov r0, #0x0 + str r1, [r4, #0x828] + str r0, [r4, #0x82c] + strb r0, [r4, #0x456] + b _020A0698 +_020A0684: + ldr r0, [r5, #0x44] + cmp r0, #0x0 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4-r6,lr} + bxeq lr +_020A0698: + add r0, sp, #0x0 + mov r1, r5 + bl FUN_0209C6C0 + ldr r3, [r4, #0x828] + ldr r2, [r4, #0x82c] + ldr r1, [sp, #0x0] + sub r2, r3, r2 + cmp r1, r2 + strcs r2, [sp, #0x0] + movcs r6, #0x1 + ldr r3, [r4, #0x824] + ldr r1, [r4, #0x82c] + ldr r2, [sp, #0x0] + add r1, r3, r1 + movcc r6, #0x0 + bl MI_CpuCopy8 +_020A06D8: ; 0x020A06D8 + ldr r0, [sp, #0x0] + mov r1, r5 + bl FUN_0209C580 +_020A06E4: ; 0x020A06E4 + cmp r6, #0x0 + beq _020A0714 + ldr r1, [r4, #0x824] + mov r0, r4 + bl FUN_020A16E8 + ldrb r0, [r4, #0x456] + add sp, sp, #0x8 + cmp r0, #0x0 + moveq r0, #0x0 + streq r0, [r4, #0x824] + ldmia sp!, {r4-r6,lr} + bx lr +_020A0714: + ldr r1, [r4, #0x82c] + ldr r0, [sp, #0x0] + add r0, r1, r0 + str r0, [r4, #0x82c] + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A0730: .word 0x00004805 +_020A0734: .word 0x021C8EC8 + + arm_func_start FUN_020A0738 +FUN_020A0738: ; 0x020A0738 + stmdb sp!, {r4,lr} + ldr r4, [r1, #0xc] + ldr r2, [r4, #0x828] + ldr r1, [r4, #0x82c] + sub r2, r2, r1 + cmp r0, r2 + blo _020A077C + ldr r0, [r4, #0x824] + cmp r0, #0x0 + beq _020A076C + ldr r1, _020A078C ; =0x021C8EF4 + ldr r1, [r1, #0x0] + blx r1 +_020A076C: + mov r0, #0x0 + str r0, [r4, #0x824] + ldmia sp!, {r4,lr} + bx lr +_020A077C: + add r0, r1, r0 + str r0, [r4, #0x82c] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A078C: .word 0x021C8EF4 + + arm_func_start FUN_020A0790 +FUN_020A0790: ; 0x020A0790 + stmdb sp!, {r4-r6,lr} + mov r5, r1 + ldr r4, [r5, #0xc] + mov r6, r0 + ldr r12, [r4, #0x824] + cmp r12, #0x0 + beq _020A0818 + ldrb r0, [r4, #0x456] + cmp r0, #0x0 + bne _020A0818 + ldr r3, [r4, #0x82c] + ldr r1, [r4, #0x828] + mov r2, r5 + add r0, r12, r3 + sub r1, r1, r3 + bl FUN_020A1974 +_020A07D0: ; 0x020A07D0 + cmp r0, #0x0 + beq _020A07FC + ldr r1, _020A0870 ; =0x021C8EF4 + ldr r0, [r4, #0x824] + ldr r1, [r1, #0x0] + blx r1 + mov r0, #0x0 + str r0, [r4, #0x824] + str r0, [r6, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr +_020A07FC: + ldr r1, [r4, #0x824] + mov r0, r4 + bl FUN_020A16E8 + ldrb r0, [r4, #0x456] + cmp r0, #0x0 + moveq r0, #0x0 + streq r0, [r4, #0x824] +_020A0818: + ldr r0, [r4, #0x824] + cmp r0, #0x0 + bne _020A084C +_020A0824: + mov r0, r5 + bl FUN_020A1528 + cmp r0, #0x9 + moveq r0, #0x0 + streq r0, [r6, #0x0] + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r0, [r4, #0x824] + cmp r0, #0x0 + beq _020A0824 +_020A084C: + ldr r1, [r4, #0x828] + ldr r0, [r4, #0x82c] + sub r0, r1, r0 + str r0, [r6, #0x0] + ldr r1, [r4, #0x824] + ldr r0, [r4, #0x82c] + add r0, r1, r0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A0870: .word 0x021C8EF4 + + arm_func_start FUN_020A0874 +FUN_020A0874: ; 0x020A0874 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldrb r1, [r5, #0x8] + ldr r4, [r5, #0xc] + cmp r1, #0x4 + beq _020A08A8 + bl FUN_0209C990 +_020A0894: ; 0x020A0894 + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, #0x1 + ldmneia sp!, {r4-r5,lr} + bxne lr +_020A08A8: + mov r1, #0x0 + strb r1, [r4, #0x455] + str r1, [r4, #0x1d4] + add r0, r4, #0x2ec + strb r1, [r4, #0x454] + bl FUN_020A41CC + add r0, r4, #0x3a4 + bl FUN_020A3B8C + mov r0, r5 + bl FUN_020A08DC + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_020A08DC +FUN_020A08DC: ; 0x020A08DC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r4, [r5, #0xc] + bl FUN_020A0DE4 +_020A08F0: + mov r0, r5 + bl FUN_020A1528 + cmp r0, #0x9 + addeq sp, sp, #0x4 + moveq r0, #0x1 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + cmp r0, #0x4 + beq _020A0920 + ldrb r0, [r4, #0x31] + cmp r0, #0x0 + beq _020A08F0 +_020A0920: + ldrb r0, [r4, #0x31] + cmp r0, #0x0 + beq _020A095C + mov r0, r4 + bl FUN_020A215C + mov r0, r5 + bl FUN_020A0AF4 +_020A093C: ; 0x020A093C + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, #0x1 + ldmneia sp!, {r4-r5,lr} + bxne lr + mov r0, r5 + bl FUN_020A0F94 + b _020A09B4 +_020A095C: + mov r0, r5 + bl FUN_020A0B2C + mov r0, r4 + bl FUN_020A2364 + ldrb r0, [r4, #0x30] + cmp r0, #0x0 + beq _020A0988 + ldrh r2, [r5, #0x18] + ldr r1, [r5, #0x1c] + mov r0, r4 + bl FUN_020A3808 +_020A0988: + mov r0, r4 + bl FUN_020A215C + mov r0, r5 + bl FUN_020A0F94 + mov r0, r5 + bl FUN_020A0AF4 +_020A09A0: ; 0x020A09A0 + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, #0x1 + ldmneia sp!, {r4-r5,lr} + bxne lr +_020A09B4: + mov r0, #0x8 + strb r0, [r4, #0x455] + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_020A09CC +FUN_020A09CC: ; 0x020A09CC + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r9, r0 + ldr r8, [r9, #0xc] + add r5, r8, #0x2ec + add r4, r8, #0x3a4 + mov r7, #0x0 + mov r6, #0x1 +_020A09EC: + mov r0, r9 + bl FUN_0209CAC4 + strb r7, [r8, #0x455] + str r7, [r8, #0x1d4] + mov r0, r5 + strb r6, [r8, #0x454] + bl FUN_020A41CC + mov r0, r4 + bl FUN_020A3B8C + mov r0, r9 + bl FUN_020A0A58 +_020A0A18: ; 0x020A0A18 + cmp r0, #0x0 + moveq r0, #0x8 + addeq sp, sp, #0x4 + streqb r0, [r8, #0x455] + ldmeqia sp!, {r4-r9,lr} + bxeq lr + mov r0, r9 + bl FUN_0209C884 + ldrh r0, [r9, #0x1a] + strh r0, [r9, #0x18] + ldr r0, [r9, #0x20] + str r0, [r9, #0x1c] + b _020A09EC +_020A0A4C: ; 0x020A0A4C + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start FUN_020A0A58 +FUN_020A0A58: + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020A1528 + cmp r0, #0x1 + movne r0, #0x1 + ldmneia sp!, {r4,lr} + bxne lr + mov r0, r4 + bl FUN_020A10F4 +_020A0A7C: ; 0x020A0A7C + cmp r0, #0x0 + beq _020A0AB0 + ldr r0, [r4, #0xc] + bl FUN_020A215C + mov r0, r4 + bl FUN_020A0F94 + mov r0, r4 + bl FUN_020A0AF4 +_020A0A9C: ; 0x020A0A9C + cmp r0, #0x0 + beq _020A0AE8 + mov r0, #0x1 + ldmia sp!, {r4,lr} + bx lr +_020A0AB0: + mov r0, r4 + bl FUN_020A1528 + cmp r0, #0x5 + movne r0, #0x1 + ldmneia sp!, {r4,lr} + bxne lr + mov r0, r4 + bl FUN_020A0AF4 +_020A0AD0: ; 0x020A0AD0 + cmp r0, #0x0 + movne r0, #0x1 + ldmneia sp!, {r4,lr} + bxne lr + mov r0, r4 + bl FUN_020A0F94 +_020A0AE8: + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020A0AF4 +FUN_020A0AF4: + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020A1528 + cmp r0, #0x7 + movne r0, #0x1 + ldmneia sp!, {r4,lr} + bxne lr + mov r0, r4 + bl FUN_020A1528 + cmp r0, #0x6 + movne r0, #0x1 + moveq r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020A0B2C +FUN_020A0B2C: ; 0x020A0B2C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r11, r0 + ldr r10, [r11, #0xc] + mov r0, #0x3 + strb r0, [r10, #0x0] + mov r0, #0x0 + strb r0, [r10, #0x1] + add r0, r10, #0x2 + mov r1, #0x2e + bl FUN_020A13E0 + ldr r4, [r10, #0x594] + ldr r0, _020A0DD4 ; =0x021C8EC8 + mov r1, r4, lsl #0x1 + ldr r2, [r0, #0x0] + add r1, r1, r1, lsr #0x1f + mov r0, r4 + mov r6, r1, asr #0x1 + blx r2 + movs r5, r0 + moveq r0, #0x9 + addeq sp, sp, #0xc + streqb r0, [r10, #0x455] + ldmeqia sp!, {r4-r11,lr} + bxeq lr + mov r0, #0x0 + strb r0, [r5, #0x0] + mov r2, #0x2 + add r0, r5, #0x2 + sub r1, r4, #0x33 + strb r2, [r5, #0x1] + bl FUN_020A13E0 + add r1, r5, r4 + mov r0, r10 + sub r3, r4, #0x31 + mov r7, #0x0 + sub r1, r1, #0x30 + mov r2, #0x30 + strb r7, [r5, r3] + bl MI_CpuCopy8 + ldr r1, _020A0DD4 ; =0x021C8EC8 + mov r0, r6, lsl #0x3 + ldr r1, [r1, #0x0] + blx r1 + movs r9, r0 + bne _020A0C08 + ldr r1, _020A0DD8 ; =0x021C8EF4 + mov r0, r5 + ldr r1, [r1, #0x0] + blx r1 + mov r0, #0x9 + add sp, sp, #0xc + strb r0, [r10, #0x455] + ldmia sp!, {r4-r11,lr} + bx lr +_020A0C08: + add r0, r9, r6, lsl #0x1 + add r8, r0, r6, lsl #0x1 + mov r1, r5 + mov r2, r4 + mov r3, r6 + str r0, [sp, #0x4] + add r7, r8, r6, lsl #0x1 + bl FUN_020A4B50 + ldr r1, _020A0DDC ; =0x00000598 + ldr r2, [r10, #0x5a0] + mov r0, r8 + add r1, r10, r1 + mov r3, r6 + bl FUN_020A4B50 + ldr r1, _020A0DE0 ; =0x00000494 + mov r0, r7 + mov r2, r4 + add r1, r10, r1 + mov r3, r6 + bl FUN_020A4B50 + bl FUN_020A36EC + mov r3, r6 + mov r6, r0 + ldr r1, [sp, #0x4] + mov r2, r8 + mov r0, r9 + str r7, [sp, #0x0] + bl FUN_020A507C + mov r0, r6 + bl FUN_020A36B4 + ldr r1, _020A0DD4 ; =0x021C8EC8 + add r0, r4, #0x49 + ldr r1, [r1, #0x0] + blx r1 + movs r6, r0 + bne _020A0CCC + ldr r1, _020A0DD8 ; =0x021C8EF4 + mov r0, r5 + ldr r1, [r1, #0x0] + blx r1 + ldr r1, _020A0DD8 ; =0x021C8EF4 + mov r0, r9 + ldr r1, [r1, #0x0] + blx r1 + mov r0, #0x9 + add sp, sp, #0xc + strb r0, [r10, #0x455] + ldmia sp!, {r4-r11,lr} + bx lr +_020A0CCC: + mov r0, #0x16 + strb r0, [r6, #0x0] + mov r1, #0x3 + add r0, r4, #0x4 + strb r1, [r6, #0x1] + mov r1, #0x0 + strb r1, [r6, #0x2] + mov r1, r0, asr #0x8 + strb r1, [r6, #0x3] + add r2, r6, #0x9 + strb r0, [r6, #0x4] + mov r0, #0x10 + strb r0, [r6, #0x5] + mov r0, r4, asr #0x10 + strb r0, [r6, #0x6] + mov r0, r4, asr #0x8 + strb r0, [r6, #0x7] + mov r0, r2 + strb r4, [r6, #0x8] + ands r1, r4, #0x1 + beq _020A0D38 + add r0, r4, r4, lsr #0x1f + mov r0, r0, asr #0x1 + mov r0, r0, lsl #0x1 + ldrh r1, [r9, r0] + add r0, r2, #0x1 + strb r1, [r2, #0x0] +_020A0D38: + add r1, r4, r4, lsr #0x1f + mov r1, r1, asr #0x1 + subs r7, r1, #0x1 + bmi _020A0D70 +_020A0D48: + mov r3, r7, lsl #0x1 + ldrh r1, [r9, r3] + add r2, r0, #0x1 + subs r7, r7, #0x1 + mov r1, r1, asr #0x8 + strb r1, [r0, #0x0] + ldrh r1, [r9, r3] + add r0, r0, #0x2 + strb r1, [r2, #0x0] + bpl _020A0D48 +_020A0D70: + mov r2, #0x0 + mov r0, r6 + mov r3, r2 + add r1, r4, #0x9 + str r11, [sp, #0x0] + bl FUN_0209C1D4 + mov r0, r10 + add r1, r6, #0x5 + add r2, r4, #0x4 + bl FUN_020A1944 + ldr r1, _020A0DD8 ; =0x021C8EF4 + mov r0, r6 + ldr r1, [r1, #0x0] + blx r1 + ldr r1, _020A0DD8 ; =0x021C8EF4 + mov r0, r9 + ldr r1, [r1, #0x0] + blx r1 + ldr r1, _020A0DD8 ; =0x021C8EF4 + mov r0, r5 + ldr r1, [r1, #0x0] + blx r1 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020A0DD4: .word 0x021C8EC8 +_020A0DD8: .word 0x021C8EF4 +_020A0DDC: .word 0x00000598 +_020A0DE0: .word 0x00000494 + + arm_func_start FUN_020A0DE4 +FUN_020A0DE4: ; 0x020A0DE4 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + ldr r1, _020A0F88 ; =0x021C8EC8 + mov r8, r0 + ldr r1, [r1, #0x0] + mov r0, #0x98 + ldr r7, [r8, #0xc] + blx r1 + movs r6, r0 + moveq r0, #0x9 + addeq sp, sp, #0x8 + streqb r0, [r7, #0x455] + ldmeqia sp!, {r4-r8,lr} + bxeq lr + mov r0, #0x3 + strb r0, [r6, #0x9] + add r5, r6, #0x9 + mov r0, #0x0 + strb r0, [r5, #0x1] + bl FUN_020A375C + mov r1, r0, lsr #0x18 + strb r1, [r7, #0x34] + mov r1, r0, lsr #0x10 + strb r1, [r7, #0x35] + mov r1, r0, lsr #0x8 + strb r1, [r7, #0x36] + strb r0, [r7, #0x37] + add r0, r7, #0x38 + mov r1, #0x1c + bl FUN_020A13E0 + add r0, r7, #0x34 + add r1, r5, #0x2 + mov r2, #0x20 + bl MI_CpuCopy8 + ldrh r2, [r8, #0x18] + ldr r1, [r8, #0x1c] + mov r0, r7 + bl FUN_020A3908 + ldrb r0, [r7, #0x30] + cmp r0, #0x0 + moveq r0, #0x0 + streqb r0, [r5, #0x22] + addeq r5, r5, #0x23 + beq _020A0EAC + mov r2, #0x20 + add r0, r7, #0x74 + add r1, r5, #0x23 + strb r2, [r5, #0x22] + bl MI_CpuCopy8 + add r5, r5, #0x43 +_020A0EAC: + mov r4, #0x0 + strb r4, [r5, #0x0] + mov r0, #0x4 + strb r0, [r5, #0x1] + ldr r2, _020A0F8C ; =0x0210623C + add r5, r5, #0x2 +_020A0EC4: + mov r3, r4, lsl #0x1 + ldrh r0, [r2, r3] + add r4, r4, #0x1 + add r1, r5, #0x1 + mov r0, r0, asr #0x8 + strb r0, [r5, #0x0] + ldrh r0, [r2, r3] + cmp r4, #0x2 + add r5, r5, #0x2 + strb r0, [r1, #0x0] + blo _020A0EC4 + mov r3, #0x1 + mov r2, #0x0 + strb r3, [r5, #0x0] + add r0, r5, #0x2 + sub r0, r0, r6 + sub r4, r0, #0x5 + strb r2, [r5, #0x1] + sub r1, r4, #0x4 + mov r0, #0x16 + strb r0, [r6, #0x0] + mov r0, #0x3 + strb r0, [r6, #0x1] + strb r2, [r6, #0x2] + mov r0, r4, asr #0x8 + strb r0, [r6, #0x3] + strb r4, [r6, #0x4] + strb r3, [r6, #0x5] + mov r0, r1, asr #0x10 + strb r0, [r6, #0x6] + mov r0, r1, asr #0x8 + strb r0, [r6, #0x7] + strb r1, [r6, #0x8] + mov r0, r6 + mov r3, r2 + add r1, r4, #0x5 + str r8, [sp, #0x0] + bl FUN_0209C1D4 + mov r0, r7 + mov r2, r4 + add r1, r6, #0x5 + bl FUN_020A1944 + ldr r1, _020A0F90 ; =0x021C8EF4 + mov r0, r6 + ldr r1, [r1, #0x0] + blx r1 + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020A0F88: .word 0x021C8EC8 +_020A0F8C: .word 0x0210623C +_020A0F90: .word 0x021C8EF4 + + arm_func_start FUN_020A0F94 +FUN_020A0F94: + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + ldr r1, _020A10EC ; =0x021C8EC8 + mov r6, r0 + ldr r1, [r1, #0x0] + mov r0, #0x83 + ldr r5, [r6, #0xc] + blx r1 + movs r4, r0 + moveq r0, #0x9 + addeq sp, sp, #0x8 + streqb r0, [r5, #0x455] + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r0, #0x14 + strb r0, [r4, #0x0] + mov r0, #0x3 + strb r0, [r4, #0x1] + mov r1, #0x0 + strb r1, [r4, #0x2] + strb r1, [r4, #0x3] + mov r3, #0x1 + strb r3, [r4, #0x4] + add r0, r5, #0x1cc + mov r2, #0x8 + strb r3, [r4, #0x5] + bl MI_CpuFill8 + mov r0, #0x16 + strb r0, [r4, #0x6] + mov r0, #0x3 + strb r0, [r4, #0x7] + mov r1, #0x0 + strb r1, [r4, #0x8] + strb r1, [r4, #0x9] + mov r0, #0x28 + strb r0, [r4, #0xa] + mov r0, #0x14 + strb r0, [r4, #0xb] + strb r1, [r4, #0xc] + strb r1, [r4, #0xd] + mov r3, #0x24 + add r0, r5, #0x3a4 + add r1, r5, #0x3fc + mov r2, #0x58 + strb r3, [r4, #0xe] + bl MI_CpuCopy8 + mov r0, r5 + add r1, r4, #0xf + mov r2, #0x0 + bl FUN_020A2034 + add r0, r5, #0x3fc + add r1, r5, #0x3a4 + mov r2, #0x58 + bl MI_CpuCopy8 + add r0, r5, #0x2ec + add r1, r5, #0x348 + mov r2, #0x5c + bl MI_CpuCopy8 + mov r0, r5 + add r1, r4, #0x1f + mov r2, #0x0 + bl FUN_020A1F4C + add r0, r5, #0x348 + add r1, r5, #0x2ec + mov r2, #0x5c + bl MI_CpuCopy8 + mov r0, r5 + add r1, r4, #0xb + mov r2, #0x28 + bl FUN_020A1944 + mov r0, r5 + add r1, r4, #0x6 + bl FUN_020A19F4 + mov r2, #0x0 + add r1, r0, #0x6 + mov r0, r4 + mov r3, r2 + str r6, [sp, #0x0] + bl FUN_0209C1D4 + ldr r1, _020A10F0 ; =0x021C8EF4 + mov r0, r4 + ldr r1, [r1, #0x0] + blx r1 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A10EC: .word 0x021C8EC8 +_020A10F0: .word 0x021C8EF4 + + arm_func_start FUN_020A10F4 +FUN_020A10F4: + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r9, r0 + ldr r7, [r9, #0xc] + ldr r4, [r7, #0x820] + cmp r4, #0x0 + ldrne r8, [r4, #0x0] + moveq r8, #0x0 + bl FUN_020A375C + mov r1, r0, lsr #0x18 + strb r1, [r7, #0x54] + mov r1, r0, lsr #0x10 + strb r1, [r7, #0x55] + mov r1, r0, lsr #0x8 + strb r1, [r7, #0x56] + strb r0, [r7, #0x57] + add r0, r7, #0x58 + mov r1, #0x1c + bl FUN_020A13E0 + ldr r1, _020A1360 ; =0x021C8EC8 + add r0, r8, #0x9d + ldr r1, [r1, #0x0] + blx r1 + movs r6, r0 + moveq r0, #0x9 + streqb r0, [r7, #0x455] + addeq sp, sp, #0x4 + moveq r0, #0x1 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + mov r0, #0x2 + add r5, r6, #0x5 + strb r0, [r6, #0x5] + mov r3, #0x0 + strb r3, [r5, #0x1] + strb r3, [r5, #0x2] + mov r0, #0x46 + strb r0, [r5, #0x3] + mov r0, #0x3 + strb r0, [r5, #0x4] + add r0, r7, #0x54 + add r1, r5, #0x6 + mov r2, #0x20 + strb r3, [r5, #0x5] + bl MI_CpuCopy8 + mov r2, #0x20 + strb r2, [r5, #0x26] + ldrb r0, [r7, #0x30] + cmp r0, #0x0 + beq _020A11D8 + add r0, r7, #0x74 + add r1, r5, #0x27 + bl MI_CpuCopy8 + mov r0, #0x1 + strb r0, [r7, #0x31] + add r5, r5, #0x47 + b _020A1238 +_020A11D8: + add r0, r5, #0x27 + mov r1, #0x1c + bl FUN_020A13E0 + ldr r0, _020A1364 ; =0x021CA6E4 + add r2, r5, #0x46 + ldr r3, [r0, #0x0] + add r1, r7, #0x74 + mov r0, r3, lsr #0x18 + strb r0, [r5, #0x43] + mov r0, r3, lsr #0x10 + strb r0, [r5, #0x44] + mov r0, r3, lsr #0x8 + strb r0, [r5, #0x45] + add r5, r5, #0x47 + sub r0, r5, #0x20 + strb r3, [r2, #0x0] + mov r2, #0x20 + bl MI_CpuCopy8 + ldr r0, _020A1364 ; =0x021CA6E4 + mov r1, #0x0 + ldr r2, [r0, #0x0] + add r2, r2, #0x1 + str r2, [r0, #0x0] + strb r1, [r7, #0x31] +_020A1238: + ldrh r2, [r7, #0x32] + mov r0, #0x0 + mov r2, r2, asr #0x8 + strb r2, [r5, #0x0] + ldrh r2, [r7, #0x32] + strb r2, [r5, #0x1] + strb r0, [r5, #0x2] + ldrb r0, [r7, #0x31] + add r5, r5, #0x3 + cmp r0, #0x0 + bne _020A12EC + cmp r8, #0x0 + beq _020A12D0 + mov r0, #0xb + add r2, r8, #0x6 + strb r0, [r5, #0x0] + mov r0, r2, asr #0x10 + strb r0, [r5, #0x1] + mov r0, r2, asr #0x8 + strb r0, [r5, #0x2] + add r1, r8, #0x3 + strb r2, [r5, #0x3] + mov r0, r1, asr #0x10 + strb r0, [r5, #0x4] + mov r0, r1, asr #0x8 + strb r0, [r5, #0x5] + strb r1, [r5, #0x6] + mov r0, r8, asr #0x10 + strb r0, [r5, #0x7] + mov r0, r8, asr #0x8 + strb r0, [r5, #0x8] + strb r8, [r5, #0x9] + add r5, r5, #0xa + ldr r0, [r4, #0x4] + mov r1, r5 + mov r2, r8 + bl MI_CpuCopy8 + add r5, r5, r8 +_020A12D0: + mov r0, #0xe + strb r0, [r5, #0x0] + mov r1, #0x0 + strb r1, [r5, #0x1] + strb r1, [r5, #0x2] + strb r1, [r5, #0x3] + add r5, r5, #0x4 +_020A12EC: + mov r0, #0x16 + sub r1, r5, r6 + sub r4, r1, #0x5 + strb r0, [r6, #0x0] + mov r0, #0x3 + strb r0, [r6, #0x1] + mov r0, #0x0 + strb r0, [r6, #0x2] + mov r0, r4, asr #0x8 + strb r0, [r6, #0x3] + mov r0, r7 + mov r2, r4 + add r1, r6, #0x5 + strb r4, [r6, #0x4] + bl FUN_020A1944 + mov r2, #0x0 + mov r0, r6 + mov r3, r2 + add r1, r4, #0x5 + str r9, [sp, #0x0] + bl FUN_0209C1D4 + ldr r1, _020A1368 ; =0x021C8EF4 + mov r0, r6 + ldr r1, [r1, #0x0] + blx r1 + ldrb r0, [r7, #0x31] + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020A1360: .word 0x021C8EC8 +_020A1364: .word 0x021CA6E4 +_020A1368: .word 0x021C8EF4 + + arm_func_start FUN_020A136C +FUN_020A136C: + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x60 + mov r6, r0 + add r0, sp, #0x0 + mov r5, r1 + bl FUN_020A41CC + bl OS_DisableInterrupts + mov r4, r0 + ldr r1, _020A13D8 ; =0x021CA6E8 + add r0, sp, #0x0 + mov r2, #0x14 + bl FUN_020A410C + mov r1, r6 + mov r2, r5 + add r0, sp, #0x0 + bl FUN_020A410C + ldr r1, _020A13D8 ; =0x021CA6E8 + add r0, sp, #0x0 + bl FUN_020A4098 + mov r0, r4 + bl OS_RestoreInterrupts + ldr r0, _020A13DC ; =0x021CA6E0 + mov r1, #0x1 + strb r1, [r0, #0x0] + add sp, sp, #0x60 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A13D8: .word 0x021CA6E8 +_020A13DC: .word 0x021CA6E0 + + arm_func_start FUN_020A13E0 +FUN_020A13E0: ; 0x020A13E0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x7c + ldr r2, _020A1518 ; =0x021CA6E0 + mov r10, r0 + ldrb r0, [r2, #0x0] + mov r9, r1 + cmp r0, #0x0 + bne _020A1448 + ldr r2, _020A151C ; =0x021C8F24 + add r0, sp, #0x4 + ldr r4, [r2, #0x8] + ldr r3, [r2, #0x0] + ldr r1, [r2, #0x4] + umull r6, r5, r4, r3 + mla r5, r4, r1, r5 + ldr r1, [r2, #0xc] + ldr r4, [r2, #0x10] + mla r5, r1, r3, r5 + adds r4, r4, r6 + ldr r3, [r2, #0x14] + mov r1, #0x4 + adc r3, r3, r5 + str r4, [r2, #0x0] + str r3, [r2, #0x4] + str r3, [sp, #0x4] + bl FUN_020A136C +_020A1448: + cmp r9, #0x0 + mov r7, #0x0 + addle sp, sp, #0x7c + mov r1, #0x14 + ldmleia sp!, {r4-r11,lr} + bxle lr + add r6, sp, #0x1c + mov r11, r1 + str r7, [sp, #0x0] + mov r5, #0x1 + mov r4, #0x13 +_020A1474: + cmp r1, #0x14 + bne _020A14EC + mov r0, r6 + bl FUN_020A41CC + bl OS_DisableInterrupts + mov r8, r0 + ldr r1, _020A1520 ; =0x021CA6E8 + mov r0, r6 + mov r2, r11 + bl FUN_020A410C + mov r0, r6 + add r1, sp, #0x8 + bl FUN_020A405C + ldr r2, _020A1524 ; =0x021CA6FB + mov r12, r5 + mov lr, r4 + add r3, sp, #0x1b +_020A14B8: + ldrb r1, [r2, #0x0] + ldrb r0, [r3], #-0x1 + subs lr, lr, #0x1 + add r0, r1, r0 + add r0, r12, r0 + strb r0, [r2, #0x0] + mov r12, r0, lsr #0x8 + sub r2, r2, #0x1 + bpl _020A14B8 + str r0, [sp, #0x4] + mov r0, r8 + bl OS_RestoreInterrupts + ldr r1, [sp, #0x0] +_020A14EC: + add r0, sp, #0x8 + ldrb r0, [r0, r1] + add r1, r1, #0x1 + cmp r0, #0x0 + strneb r0, [r10, r7] + addne r7, r7, #0x1 + cmp r7, r9 + blt _020A1474 + add sp, sp, #0x7c + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020A1518: .word 0x021CA6E0 +_020A151C: .word 0x021C8F24 +_020A1520: .word 0x021CA6E8 +_020A1524: .word 0x021CA6FB + + arm_func_start FUN_020A1528 +FUN_020A1528: ; 0x020A1528 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r5, r0 + ldr r4, [r5, #0xc] + add r6, sp, #0x0 +_020A153C: + mov r0, r6 + mov r1, r5 + bl FUN_0209C6C0 + ldr r1, [sp, #0x0] + cmp r1, #0x0 + moveq r0, #0x9 + addeq sp, sp, #0x8 + streqb r0, [r4, #0x455] + ldmeqia sp!, {r4-r6,lr} + bxeq lr + cmp r1, #0x5 + blo _020A153C + ldrb r1, [r0, #0x0] + cmp r1, #0x80 + bne _020A1634 + ldrb r1, [r4, #0x454] + cmp r1, #0x0 + beq _020A1628 + ldrb r1, [r4, #0x455] + cmp r1, #0x0 + bne _020A1628 + ldrb r2, [r0, #0x1] + mov r1, r5 + mov r0, #0x2 + str r2, [sp, #0x0] + bl FUN_0209C580 + ldr r1, _020A16DC ; =0x021C8EC8 + ldr r0, [sp, #0x0] + ldr r1, [r1, #0x0] + blx r1 + movs r6, r0 + moveq r0, #0x9 + addeq sp, sp, #0x8 + streqb r0, [r4, #0x455] + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r1, [sp, #0x0] + mov r2, r5 + bl FUN_020A1974 +_020A15D8: ; 0x020A15D8 + cmp r0, #0x0 + bne _020A15FC + ldrb r0, [r6, #0x0] + cmp r0, #0x1 + bne _020A15FC + mov r0, r4 + add r1, r6, #0x1 + bl FUN_020A2774 + b _020A1604 +_020A15FC: + mov r0, #0x9 + strb r0, [r4, #0x455] +_020A1604: + ldr r2, [sp, #0x0] + mov r0, r4 + mov r1, r6 + bl FUN_020A1944 + ldr r1, _020A16E0 ; =0x021C8EF4 + mov r0, r6 + ldr r1, [r1, #0x0] + blx r1 + b _020A16CC +_020A1628: + mov r0, #0x9 + strb r0, [r4, #0x455] + b _020A16CC +_020A1634: + ldrb r2, [r0, #0x3] + ldrb r0, [r0, #0x4] + ldr r1, _020A16E4 ; =0x00004805 + add r0, r0, r2, lsl #0x8 + add r0, r0, #0x5 + str r0, [sp, #0x0] + cmp r0, r1 + movhi r0, #0x9 + addhi sp, sp, #0x8 + strhib r0, [r4, #0x455] + ldmhiia sp!, {r4-r6,lr} + bxhi lr + ldr r1, _020A16DC ; =0x021C8EC8 + ldr r1, [r1, #0x0] + blx r1 + movs r6, r0 + moveq r0, #0x9 + addeq sp, sp, #0x8 + streqb r0, [r4, #0x455] + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r1, [sp, #0x0] + mov r2, r5 + bl FUN_020A1974 +_020A1694: ; 0x020A1694 + cmp r0, #0x0 + beq _020A16C0 + ldr r1, _020A16E0 ; =0x021C8EF4 + mov r0, r6 + ldr r1, [r1, #0x0] + blx r1 + mov r0, #0x9 + add sp, sp, #0x8 + strb r0, [r4, #0x455] + ldmia sp!, {r4-r6,lr} + bx lr +_020A16C0: + mov r0, r4 + mov r1, r6 + bl FUN_020A16E8 +_020A16CC: + ldrb r0, [r4, #0x455] + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A16DC: .word 0x021C8EC8 +_020A16E0: .word 0x021C8EF4 +_020A16E4: .word 0x00004805 + + arm_func_start FUN_020A16E8 +FUN_020A16E8: ; 0x020A16E8 + stmdb sp!, {r4-r8,lr} + mov r8, r0 + ldrb r0, [r8, #0x455] + mov r7, r1 + cmp r0, #0x9 + bne _020A1718 + ldr r1, _020A1940 ; =0x021C8EF4 + mov r0, r7 + ldr r1, [r1, #0x0] + blx r1 + ldmia sp!, {r4-r8,lr} + bx lr +_020A1718: + ldrb r2, [r7, #0x3] + ldrb r1, [r7, #0x4] + add r0, r0, #0xf9 + and r0, r0, #0xff + add r1, r1, r2, lsl #0x8 + cmp r0, #0x1 + add r5, r1, #0x5 + ldrb r4, [r7, #0x0] + bhi _020A1744 + cmp r4, #0x15 + bne _020A1754 +_020A1744: + cmp r4, #0x15 + bne _020A1764 + cmp r5, #0x7 + bls _020A1764 +_020A1754: + mov r0, r8 + mov r1, r7 + bl FUN_020A1C08 + mov r5, r0 +_020A1764: + sub r0, r4, #0x14 + cmp r0, #0x3 + add r6, r7, #0x5 + sub r5, r5, #0x5 + addls pc, pc, r0, lsl #0x2 + b _020A1920 +_020A177C: ; 0x020A177C + b _020A178C +_020A1780: ; 0x020A1780 + b _020A17BC +_020A1784: ; 0x020A1784 + b _020A17D0 +_020A1788: ; 0x020A1788 + b _020A18FC +_020A178C: + ldr r0, [r8, #0x1d4] + cmp r0, #0x0 + moveq r0, #0x9 + streqb r0, [r8, #0x455] + beq _020A1928 + add r0, r8, #0x2e4 + mov r1, #0x0 + mov r2, #0x8 + bl MI_CpuFill8 + mov r0, #0x7 + strb r0, [r8, #0x455] + b _020A1928 +_020A17BC: + ldrb r0, [r6, #0x0] + cmp r0, #0x2 + moveq r0, #0x9 + streqb r0, [r8, #0x455] + b _020A1928 +_020A17D0: + ldrb r1, [r6, #0x1] + ldrb r0, [r6, #0x2] + ldrb r3, [r6, #0x0] + ldrb r2, [r6, #0x3] + mov r1, r1, lsl #0x10 + add r0, r1, r0, lsl #0x8 + cmp r3, #0xb + add r4, r2, r0 + add r6, r6, #0x4 + bgt _020A1824 + cmp r3, #0xb + bge _020A1898 + cmp r3, #0x2 + bgt _020A18C4 + cmp r3, #0x1 + blt _020A18C4 + cmp r3, #0x1 + beq _020A1850 + cmp r3, #0x2 + beq _020A1888 + b _020A18C4 +_020A1824: + cmp r3, #0x14 + bgt _020A18C4 + cmp r3, #0xe + blt _020A18C4 + cmp r3, #0xe + beq _020A18A8 + cmp r3, #0x10 + beq _020A1878 + cmp r3, #0x14 + beq _020A18B4 + b _020A18C4 +_020A1850: + ldrb r0, [r8, #0x454] + cmp r0, #0x0 + beq _020A18CC + ldrb r0, [r8, #0x455] + cmp r0, #0x0 + bne _020A18CC + mov r0, r8 + mov r1, r6 + bl FUN_020A26D0 + b _020A18CC +_020A1878: + mov r0, r8 + mov r1, r6 + bl FUN_020A211C + b _020A18CC +_020A1888: + mov r0, r8 + mov r1, r6 + bl FUN_020A2914 + b _020A18CC +_020A1898: + mov r0, r8 + mov r1, r6 + bl FUN_020A29DC + b _020A18CC +_020A18A8: + mov r0, #0x4 + strb r0, [r8, #0x455] + b _020A18CC +_020A18B4: + mov r0, r8 + mov r1, r6 + bl FUN_020A1E84 + b _020A18CC +_020A18C4: + mov r0, #0x9 + strb r0, [r8, #0x455] +_020A18CC: + mov r0, r8 + sub r1, r6, #0x4 + add r2, r4, #0x4 + bl FUN_020A1944 + add r0, r4, #0x4 + add r6, r6, r4 + subs r5, r5, r0 + beq _020A1928 + ldrb r0, [r8, #0x455] + cmp r0, #0x9 + bne _020A17D0 + b _020A1928 +_020A18FC: + str r7, [r8, #0x824] + mov r0, #0x5 + str r0, [r8, #0x82c] + add r0, r5, #0x5 + str r0, [r8, #0x828] + mov r0, #0x1 + strb r0, [r8, #0x456] + ldmia sp!, {r4-r8,lr} + bx lr +_020A1920: + mov r0, #0x9 + strb r0, [r8, #0x455] +_020A1928: + ldr r1, _020A1940 ; =0x021C8EF4 + mov r0, r7 + ldr r1, [r1, #0x0] + blx r1 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020A1940: .word 0x021C8EF4 + + arm_func_start FUN_020A1944 +FUN_020A1944: ; 0x020A1944 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + add r0, r6, #0x2ec + bl FUN_020A410C + mov r1, r5 + mov r2, r4 + add r0, r6, #0x3a4 + bl FUN_020A3ACC + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_020A1974 +FUN_020A1974: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + add r4, sp, #0x0 +_020A198C: + mov r0, r4 + mov r1, r5 + bl FUN_0209C6C0 + ldr r1, [sp, #0x0] + cmp r1, #0x0 + addeq sp, sp, #0x4 + mvneq r0, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + cmp r1, r6 + strhi r6, [sp, #0x0] + ldr r2, [sp, #0x0] + mov r1, r7 + bl MI_CpuCopy8 +_020A19C4: ; 0x020A19C4 + ldr r0, [sp, #0x0] + mov r1, r5 + bl FUN_0209C580 +_020A19D0: ; 0x020A19D0 + ldr r0, [sp, #0x0] + sub r6, r6, r0 + cmp r6, #0x0 + add r7, r7, r0 + bgt _020A198C + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_020A19F4 +FUN_020A19F4: ; 0x020A19F4 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x30 + mov r5, r1 + mov r6, r0 + ldrh r0, [r6, #0x32] + ldrb r3, [r5, #0x3] + ldrb r2, [r5, #0x4] + add r1, r5, #0x5 + cmp r0, #0x4 + add r4, r2, r3, lsl #0x8 + add r8, r1, r4 + beq _020A1A30 + cmp r0, #0x5 + beq _020A1B04 + b _020A1BD4 +_020A1A30: + add r7, r6, #0x3fc + mov r0, r7 + bl FUN_020A3B8C + ldr r1, [r6, #0xbc] + mov r0, r7 + mov r2, #0x10 + bl FUN_020A3ACC +_020A1A4C: ; 0x020A1A4C + add r0, sp, #0x0 + mov r1, #0x36 + mov r2, #0x30 + bl MI_CpuFill8 + mov r0, r7 + add r1, sp, #0x0 + mov r2, #0x30 + bl FUN_020A3ACC + mov r0, r7 + add r1, r6, #0x1cc + mov r2, #0x8 + bl FUN_020A3ACC + mov r0, r7 + mov r1, r5 + mov r2, #0x1 + bl FUN_020A3ACC + mov r0, r7 + add r1, r5, #0x3 + add r2, r4, #0x2 + bl FUN_020A3ACC + mov r0, r7 + mov r1, r8 + bl FUN_020A3A58 + mov r0, r7 + bl FUN_020A3B8C + ldr r1, [r6, #0xbc] + mov r0, r7 + mov r2, #0x10 + bl FUN_020A3ACC +_020A1AC0: ; 0x020A1AC0 + add r0, sp, #0x0 + mov r1, #0x5c + mov r2, #0x30 + bl MI_CpuFill8 + mov r0, r7 + add r1, sp, #0x0 + mov r2, #0x30 + bl FUN_020A3ACC + mov r0, r7 + mov r1, r8 + mov r2, #0x10 + bl FUN_020A3ACC + mov r0, r7 + mov r1, r8 + bl FUN_020A3A58 + add r4, r4, #0x10 + b _020A1BD4 +_020A1B04: + add r7, r6, #0x348 + mov r0, r7 + bl FUN_020A41CC + ldr r1, [r6, #0xbc] + mov r0, r7 + mov r2, #0x14 + bl FUN_020A410C +_020A1B20: ; 0x020A1B20 + add r0, sp, #0x0 + mov r1, #0x36 + mov r2, #0x28 + bl MI_CpuFill8 + mov r0, r7 + add r1, sp, #0x0 + mov r2, #0x28 + bl FUN_020A410C + mov r0, r7 + add r1, r6, #0x1cc + mov r2, #0x8 + bl FUN_020A410C + mov r0, r7 + mov r1, r5 + mov r2, #0x1 + bl FUN_020A410C + mov r0, r7 + add r1, r5, #0x3 + add r2, r4, #0x2 + bl FUN_020A410C + mov r0, r7 + mov r1, r8 + bl FUN_020A4098 + mov r0, r7 + bl FUN_020A41CC + ldr r1, [r6, #0xbc] + mov r0, r7 + mov r2, #0x14 + bl FUN_020A410C +_020A1B94: ; 0x020A1B94 + add r0, sp, #0x0 + mov r1, #0x5c + mov r2, #0x28 + bl MI_CpuFill8 + mov r0, r7 + add r1, sp, #0x0 + mov r2, #0x28 + bl FUN_020A410C + mov r0, r7 + mov r1, r8 + mov r2, #0x14 + bl FUN_020A410C + mov r0, r7 + mov r1, r8 + bl FUN_020A4098 + add r4, r4, #0x14 +_020A1BD4: + mov r0, r4, asr #0x8 + strb r0, [r5, #0x3] + mov r2, r4 + add r0, r6, #0xc8 + add r1, r5, #0x5 + strb r4, [r5, #0x4] + bl FUN_020A49CC + add r0, r6, #0x1d4 + bl FUN_020A1E60 + add r0, r4, #0x5 + add sp, sp, #0x30 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FUN_020A1C08 +FUN_020A1C08: ; 0x020A1C08 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x44 + mov r6, r1 + ldrb r3, [r6, #0x3] + ldrb r2, [r6, #0x4] + mov r7, r0 + add r1, r6, #0x5 + add r2, r2, r3, lsl #0x8 + bl FUN_020A1E44 + ldrh r1, [r7, #0x32] + mov r5, r0 + cmp r1, #0x4 + beq _020A1C48 + cmp r1, #0x5 + beq _020A1D2C + b _020A1E0C +_020A1C48: + sub r5, r5, #0x10 + mov r0, r5, asr #0x8 + strb r0, [r6, #0x3] + add r4, r7, #0x3fc + mov r0, r4 + strb r5, [r6, #0x4] + bl FUN_020A3B8C + ldr r1, [r7, #0x1d4] + mov r0, r4 + mov r2, #0x10 + bl FUN_020A3ACC + add r0, sp, #0x14 + mov r1, #0x36 + mov r2, #0x30 + bl MI_CpuFill8 + mov r0, r4 + add r1, sp, #0x14 + mov r2, #0x30 + bl FUN_020A3ACC + mov r0, r4 + add r1, r7, #0x2e4 + mov r2, #0x8 + bl FUN_020A3ACC + mov r0, r4 + mov r1, r6 + mov r2, #0x1 + bl FUN_020A3ACC + mov r0, r4 + add r1, r6, #0x3 + add r2, r5, #0x2 + bl FUN_020A3ACC + mov r0, r4 + add r1, sp, #0x0 + bl FUN_020A3A58 + mov r0, r4 + bl FUN_020A3B8C + ldr r1, [r7, #0x1d4] + mov r0, r4 + mov r2, #0x10 + bl FUN_020A3ACC + add r0, sp, #0x14 + mov r1, #0x5c + mov r2, #0x30 + bl MI_CpuFill8 + mov r0, r4 + add r1, sp, #0x14 + mov r2, #0x30 + bl FUN_020A3ACC + mov r0, r4 + add r1, sp, #0x0 + mov r2, #0x10 + bl FUN_020A3ACC + mov r0, r4 + add r1, sp, #0x0 + bl FUN_020A3A58 + mov r4, #0x10 + b _020A1E0C +_020A1D2C: + sub r5, r5, #0x14 + mov r0, r5, asr #0x8 + strb r0, [r6, #0x3] + add r4, r7, #0x348 + mov r0, r4 + strb r5, [r6, #0x4] + bl FUN_020A41CC + ldr r1, [r7, #0x1d4] + mov r0, r4 + mov r2, #0x14 + bl FUN_020A410C + add r0, sp, #0x14 + mov r1, #0x36 + mov r2, #0x28 + bl MI_CpuFill8 + mov r0, r4 + add r1, sp, #0x14 + mov r2, #0x28 + bl FUN_020A410C + mov r0, r4 + add r1, r7, #0x2e4 + mov r2, #0x8 + bl FUN_020A410C + mov r0, r4 + mov r1, r6 + mov r2, #0x1 + bl FUN_020A410C + mov r0, r4 + add r1, r6, #0x3 + add r2, r5, #0x2 + bl FUN_020A410C + mov r0, r4 + add r1, sp, #0x0 + bl FUN_020A4098 + mov r0, r4 + bl FUN_020A41CC + ldr r1, [r7, #0x1d4] + mov r0, r4 + mov r2, #0x14 + bl FUN_020A410C + add r0, sp, #0x14 + mov r1, #0x5c + mov r2, #0x28 + bl MI_CpuFill8 + mov r0, r4 + add r1, sp, #0x14 + mov r2, #0x28 + bl FUN_020A410C + mov r0, r4 + add r1, sp, #0x0 + mov r2, #0x14 + bl FUN_020A410C + mov r0, r4 + add r1, sp, #0x0 + bl FUN_020A4098 + mov r4, #0x14 +_020A1E0C: + add r0, r6, #0x5 + add r1, sp, #0x0 + mov r2, r4 + add r0, r0, r5 + bl memcmp +_020A1E20: ; 0x020A1E20 + cmp r0, #0x0 + movne r0, #0x9 + strneb r0, [r7, #0x455] + add r0, r7, #0x2ec + bl FUN_020A1E60 + add r0, r5, #0x5 + add sp, sp, #0x44 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_020A1E44 +FUN_020A1E44: ; 0x020A1E44 + stmdb sp!, {r4,lr} + add r0, r0, #0x1e0 + mov r4, r2 + bl FUN_020A49CC + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020A1E60 +FUN_020A1E60: ; 0x020A1E60 + mov r2, #0x8 +_020A1E64: + ldrb r1, [r0, #-0x1]! + add r1, r1, #0x1 + ands r1, r1, #0xff + strb r1, [r0, #0x0] + bxne lr + subs r2, r2, #0x1 + bne _020A1E64 + bx lr + + arm_func_start FUN_020A1E84 +FUN_020A1E84: ; 0x020A1E84 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x14 + mov r5, r0 + mov r4, r1 + add r0, r5, #0x3a4 + add r1, r5, #0x3fc + mov r2, #0x58 + bl MI_CpuCopy8 + add r1, sp, #0x0 + mov r0, r5 + mov r2, #0x1 + bl FUN_020A2034 + add r0, r5, #0x3fc + add r1, r5, #0x3a4 + mov r2, #0x58 + bl MI_CpuCopy8 + add r1, sp, #0x0 + mov r0, r4 + mov r2, #0x10 + bl memcmp +_020A1ED4: ; 0x020A1ED4 + cmp r0, #0x0 + movne r0, #0x9 + addne sp, sp, #0x14 + strneb r0, [r5, #0x455] + ldmneia sp!, {r4-r5,lr} + bxne lr + add r0, r5, #0x2ec + add r1, r5, #0x348 + mov r2, #0x5c + bl MI_CpuCopy8 + add r1, sp, #0x0 + mov r0, r5 + mov r2, #0x1 + bl FUN_020A1F4C + add r0, r5, #0x348 + add r1, r5, #0x2ec + mov r2, #0x5c + bl MI_CpuCopy8 + add r1, sp, #0x0 + add r0, r4, #0x10 + mov r2, #0x14 + bl memcmp +_020A1F2C: ; 0x020A1F2C + cmp r0, #0x0 + movne r0, #0x9 + strneb r0, [r5, #0x455] + moveq r0, #0x6 + streqb r0, [r5, #0x455] + add sp, sp, #0x14 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_020A1F4C +FUN_020A1F4C: ; 0x020A1F4C + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x28 + mov r6, r0 + ldrb r0, [r6, #0x454] + mov r5, r1 + add r4, r6, #0x2ec + eors r0, r0, r2 + beq _020A1F80 + ldr r1, _020A202C ; =0x02106290 + mov r0, r4 + mov r2, #0x4 + bl FUN_020A410C + b _020A1F90 +_020A1F80: + ldr r1, _020A2030 ; =0x02106298 + mov r0, r4 + mov r2, #0x4 + bl FUN_020A410C +_020A1F90: + mov r0, r4 + mov r1, r6 + mov r2, #0x30 + bl FUN_020A410C +_020A1FA0: ; 0x020A1FA0 + add r0, sp, #0x0 + mov r1, #0x36 + mov r2, #0x28 + bl MI_CpuFill8 + add r1, sp, #0x0 + mov r0, r4 + mov r2, #0x28 + bl FUN_020A410C + mov r0, r4 + mov r1, r5 + bl FUN_020A4098 + mov r0, r4 + bl FUN_020A41CC + mov r1, r6 + mov r0, r4 + mov r2, #0x30 + bl FUN_020A410C +_020A1FE4: ; 0x020A1FE4 + add r0, sp, #0x0 + mov r1, #0x5c + mov r2, #0x28 + bl MI_CpuFill8 + mov r0, r4 + add r1, sp, #0x0 + mov r2, #0x28 + bl FUN_020A410C + mov r0, r4 + mov r1, r5 + mov r2, #0x14 + bl FUN_020A410C + mov r0, r4 + mov r1, r5 + bl FUN_020A4098 + add sp, sp, #0x28 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A202C: .word 0x02106290 +_020A2030: .word 0x02106298 + + arm_func_start FUN_020A2034 +FUN_020A2034: ; 0x020A2034 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x30 + mov r6, r0 + ldrb r0, [r6, #0x454] + mov r5, r1 + add r4, r6, #0x3a4 + eors r0, r0, r2 + beq _020A2068 + ldr r1, _020A2114 ; =0x02106290 + mov r0, r4 + mov r2, #0x4 + bl FUN_020A3ACC + b _020A2078 +_020A2068: + ldr r1, _020A2118 ; =0x02106298 + mov r0, r4 + mov r2, #0x4 + bl FUN_020A3ACC +_020A2078: + mov r0, r4 + mov r1, r6 + mov r2, #0x30 + bl FUN_020A3ACC +_020A2088: ; 0x020A2088 + add r0, sp, #0x0 + mov r1, #0x36 + mov r2, #0x30 + bl MI_CpuFill8 + add r1, sp, #0x0 + mov r0, r4 + mov r2, #0x30 + bl FUN_020A3ACC + mov r0, r4 + mov r1, r5 + bl FUN_020A3A58 + mov r0, r4 + bl FUN_020A3B8C + mov r1, r6 + mov r0, r4 + mov r2, #0x30 + bl FUN_020A3ACC +_020A20CC: ; 0x020A20CC + add r0, sp, #0x0 + mov r1, #0x5c + mov r2, #0x30 + bl MI_CpuFill8 + mov r0, r4 + add r1, sp, #0x0 + mov r2, #0x30 + bl FUN_020A3ACC + mov r0, r4 + mov r1, r5 + mov r2, #0x10 + bl FUN_020A3ACC + mov r0, r4 + mov r1, r5 + bl FUN_020A3A58 + add sp, sp, #0x30 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A2114: .word 0x02106290 +_020A2118: .word 0x02106298 + + arm_func_start FUN_020A211C +FUN_020A211C: ; 0x020A211C + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r2, [r4, #0x81c] + bl FUN_020A2470 + mov r0, r4 + bl FUN_020A2364 + mov r1, #0x0 + mov r0, r4 + mov r2, r1 + bl FUN_020A3808 + mov r0, r4 + bl FUN_020A215C + mov r0, #0x5 + strb r0, [r4, #0x455] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020A215C +FUN_020A215C: ; 0x020A215C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x34 + mov r10, r0 + ldrh r0, [r10, #0x32] + cmp r0, #0x4 + beq _020A2190 + cmp r0, #0x5 + moveq r0, #0x14 + streq r0, [sp, #0x0] + moveq r0, #0x10 + streq r0, [sp, #0x4] + moveq r2, #0x0 + b _020A21A0 +_020A2190: + mov r0, #0x10 + str r0, [sp, #0x0] + str r0, [sp, #0x4] + mov r2, #0x0 +_020A21A0: + ldr r1, [sp, #0x0] + ldr r0, [sp, #0x4] + mov r9, #0x0 + add r0, r1, r0 + add r0, r2, r0 + mov r0, r0, lsl #0x1 + str r0, [sp, #0x8] + cmp r0, #0x0 + ble _020A22B8 + mov r0, #0x20 + str r0, [sp, #0x10] + mov r0, #0x14 + mov r6, r9 + add r5, sp, #0x18 + str r9, [sp, #0xc] + mov r4, #0x1 + mov r11, #0x30 + str r0, [sp, #0x14] +_020A21E8: + add r7, r10, #0x348 + mov r0, r7 + bl FUN_020A41CC + add r0, r9, #0x41 + strb r0, [sp, #0x18] + add r0, r9, #0x1 + ldr r8, [sp, #0xc] + cmp r0, #0x0 + ble _020A222C +_020A220C: + mov r0, r7 + mov r1, r5 + mov r2, r4 + bl FUN_020A410C + add r8, r8, #0x1 + add r0, r9, #0x1 + cmp r8, r0 + blt _020A220C +_020A222C: + mov r0, r7 + mov r1, r10 + mov r2, r11 + bl FUN_020A410C + ldr r2, [sp, #0x10] + mov r0, r7 + add r1, r10, #0x54 + bl FUN_020A410C + ldr r2, [sp, #0x10] + mov r0, r7 + add r1, r10, #0x34 + bl FUN_020A410C + mov r0, r7 + add r1, sp, #0x19 + bl FUN_020A4098 + add r7, r10, #0x3fc + mov r0, r7 + bl FUN_020A3B8C + mov r0, r7 + mov r1, r10 + mov r2, r11 + bl FUN_020A3ACC + ldr r2, [sp, #0x14] + mov r0, r7 + add r1, sp, #0x19 + bl FUN_020A3ACC + add r1, r10, #0x74 + mov r0, r7 + add r1, r1, r6 + bl FUN_020A3A58 + ldr r0, [sp, #0x8] + add r6, r6, #0x10 + cmp r6, r0 + add r9, r9, #0x1 + blt _020A21E8 +_020A22B8: + ldrb r0, [r10, #0x454] + cmp r0, #0x0 + beq _020A2300 + add r1, r10, #0x74 + str r1, [r10, #0x1d4] + ldr r0, [sp, #0x0] + ldr r2, [r10, #0x1d4] + add r1, r1, r0 + add r0, r2, r0, lsl #0x1 + str r0, [r10, #0x1d8] + str r1, [r10, #0xbc] + ldr r1, [r10, #0xbc] + ldr r0, [sp, #0x0] + add r1, r1, r0 + ldr r0, [sp, #0x4] + add r0, r1, r0 + str r0, [r10, #0xc0] + b _020A2338 +_020A2300: + add r1, r10, #0x74 + str r1, [r10, #0xbc] + ldr r0, [sp, #0x0] + ldr r2, [r10, #0xbc] + add r1, r1, r0 + add r0, r2, r0, lsl #0x1 + str r0, [r10, #0xc0] + str r1, [r10, #0x1d4] + ldr r1, [r10, #0x1d4] + ldr r0, [sp, #0x0] + add r1, r1, r0 + ldr r0, [sp, #0x4] + add r0, r1, r0 + str r0, [r10, #0x1d8] +_020A2338: + ldr r1, [r10, #0x1d8] + add r0, r10, #0x1e0 + mov r2, #0x10 + bl FUN_020A4A3C + ldr r1, [r10, #0xc0] + add r0, r10, #0xc8 + mov r2, #0x10 + bl FUN_020A4A3C + add sp, sp, #0x34 + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FUN_020A2364 +FUN_020A2364: ; 0x020A2364 + stmdb sp!, {r4,lr} + sub sp, sp, #0x30 + mov r4, r0 + ldr r1, _020A23BC ; =0x021062A0 + add r0, sp, #0x0 + mov r2, r4 + bl FUN_020A23C8 + ldr r1, _020A23C0 ; =0x021062A4 + add r0, sp, #0x10 + mov r2, r4 + bl FUN_020A23C8 + ldr r1, _020A23C4 ; =0x021062A8 + add r0, sp, #0x20 + mov r2, r4 + bl FUN_020A23C8 +_020A23A0: ; 0x020A23A0 + add r0, sp, #0x0 + mov r1, r4 + mov r2, #0x30 + bl MI_CpuCopy8 + add sp, sp, #0x30 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A23BC: .word 0x021062A0 +_020A23C0: .word 0x021062A4 +_020A23C4: .word 0x021062A8 + + arm_func_start FUN_020A23C8 +FUN_020A23C8: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x14 + mov r5, r2 + add r4, r5, #0x348 + mov r7, r0 + mov r6, r1 + mov r0, r4 + bl FUN_020A41CC + mov r0, r6 + bl strlen + mov r2, r0 + mov r1, r6 + mov r0, r4 + bl FUN_020A410C + mov r0, r4 + mov r1, r5 + mov r2, #0x30 + bl FUN_020A410C + mov r0, r4 + add r1, r5, #0x34 + mov r2, #0x40 + bl FUN_020A410C + mov r0, r4 + add r1, sp, #0x0 + bl FUN_020A4098 + add r4, r5, #0x3fc + mov r0, r4 + bl FUN_020A3B8C + mov r1, r5 + mov r0, r4 + mov r2, #0x30 + bl FUN_020A3ACC + mov r0, r4 + add r1, sp, #0x0 + mov r2, #0x14 + bl FUN_020A3ACC + mov r0, r4 + mov r1, r7 + bl FUN_020A3A58 + add sp, sp, #0x14 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_020A2470 +FUN_020A2470: ; 0x020A2470 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x1c + movs r10, r2 + str r0, [sp, #0x8] + mov r11, r1 + addeq sp, sp, #0x1c + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldr r0, [r10, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x1c + ldmeqia sp!, {r4-r11,lr} + bxeq lr + mov r0, r0, lsl #0x1 + add r0, r0, r0, lsr #0x1f + mov r0, r0, asr #0x1 + add r9, r0, #0x1 + mov r0, #0x14 + mul r0, r9, r0 + ldr r1, _020A26C8 ; =0x021C8EC8 + ldr r1, [r1, #0x0] + blx r1 + movs r8, r0 + addeq sp, sp, #0x1c + ldmeqia sp!, {r4-r11,lr} + bxeq lr + add r7, r8, r9, lsl #0x1 + add r6, r7, r9, lsl #0x1 + add r1, r6, r9, lsl #0x1 + str r1, [sp, #0xc] + add r1, r1, r9, lsl #0x1 + add r5, r1, r9, lsl #0x1 + str r1, [sp, #0x10] + ldr r2, [r10, #0x0] + add r4, r5, r9, lsl #0x1 + mov r1, r11 + mov r3, r9 + add r11, r4, r9, lsl #0x1 + bl FUN_020A4B50 + ldr r1, [r10, #0x1c] + ldr r2, [r10, #0x18] + mov r0, r7 + mov r3, r9 + bl FUN_020A4B50 + ldr r1, [r10, #0xc] + ldr r2, [r10, #0x8] + mov r0, r5 + mov r3, r9 + bl FUN_020A4B50 + bl FUN_020A36EC + str r0, [sp, #0x14] + ldr r0, [sp, #0xc] + str r5, [sp, #0x0] + mov r1, r8 + mov r2, r7 + mov r3, r9 + bl FUN_020A4BB0 + ldr r1, [r10, #0x24] + ldr r2, [r10, #0x20] + mov r0, r7 + mov r3, r9 + bl FUN_020A4B50 + ldr r1, [r10, #0x14] + ldr r2, [r10, #0x10] + mov r0, r5 + mov r3, r9 + bl FUN_020A4B50 + ldr r0, [sp, #0x10] + mov r1, r8 + mov r2, r7 + mov r3, r9 + str r5, [sp, #0x0] + bl FUN_020A4BB0 + ldr r0, [sp, #0x14] + bl FUN_020A36B4 + ldr r1, [sp, #0xc] + ldr r2, [sp, #0x10] + mov r0, r8 + mov r3, r9 + bl FUN_020A57BC + ldr r1, [r10, #0x2c] + ldr r2, [r10, #0x28] + mov r0, r7 + mov r3, r9 + bl FUN_020A4B50 + mov r0, r6 + mov r1, r8 + mov r2, r7 + mov r3, r9 + bl FUN_020A5608 + ldr r1, [r10, #0x14] + ldr r2, [r10, #0x10] + mov r0, r7 + mov r3, r9 + bl FUN_020A4B50 + mov r0, r8 + mov r1, r6 + mov r2, r7 + mov r3, r9 + bl FUN_020A5608 + ldr r2, [sp, #0x10] + mov r0, r6 + mov r1, r8 + mov r3, r9 + bl FUN_020A5930 + ldr r1, [r10, #0x4] + ldr r2, [r10, #0x0] + mov r0, r7 + mov r3, r9 + bl FUN_020A4B50 + mov r0, r6 + mov r1, r9 + bl FUN_020A59DC +_020A2634: ; 0x020A2634 + cmp r0, #0x0 + bge _020A267C + mov r0, r6 + mov r1, r9 + bl FUN_020A5874 + str r9, [sp, #0x0] + mov r1, r6 + mov r2, r7 + mov r3, r4 + mov r0, #0x0 + str r11, [sp, #0x4] + bl FUN_020A5240 + mov r0, r4 + mov r1, r7 + mov r2, r4 + mov r3, r9 + bl FUN_020A57BC + b _020A2698 +_020A267C: + str r9, [sp, #0x0] + mov r1, r6 + mov r2, r7 + mov r3, r4 + mov r0, #0x0 + str r11, [sp, #0x4] + bl FUN_020A5240 +_020A2698: + ldr r0, [sp, #0x8] + mov r1, r4 + mov r3, r9 + mov r2, #0x30 + bl FUN_020A4B08 + ldr r1, _020A26CC ; =0x021C8EF4 + mov r0, r8 + ldr r1, [r1, #0x0] + blx r1 + add sp, sp, #0x1c + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020A26C8: .word 0x021C8EC8 +_020A26CC: .word 0x021C8EF4 + + arm_func_start FUN_020A26D0 +FUN_020A26D0: ; 0x020A26D0 + stmdb sp!, {r4-r6,lr} + mov r6, r1 + mov r4, r0 + ldrb r0, [r6, #0x0] + ldrb r1, [r6, #0x1] + bl FUN_020A284C +_020A26E8: ; 0x020A26E8 + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + add r0, r6, #0x2 + add r1, r4, #0x34 + mov r2, #0x20 + bl MI_CpuCopy8 + ldrb r5, [r6, #0x22] + add r6, r6, #0x23 + cmp r5, #0x20 + movne r0, #0x0 + strneb r0, [r4, #0x30] + bne _020A2734 + mov r0, r6 + add r1, r4, #0x74 + mov r2, #0x20 + bl MI_CpuCopy8 + mov r0, r4 + bl FUN_020A39B0 +_020A2734: + add r0, r6, r5 + ldrb r1, [r0, #0x1] + ldrb r3, [r6, r5] + add r0, r0, #0x2 + mov r2, #0x2 + add r1, r1, r3, lsl #0x8 + add r1, r1, r1, lsr #0x1f + mov r1, r1, asr #0x1 + bl FUN_020A285C + mov r0, r0, lsl #0x10 + movs r0, r0, lsr #0x10 + strh r0, [r4, #0x32] + movne r0, #0x1 + strneb r0, [r4, #0x455] + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_020A2774 +FUN_020A2774: ; 0x020A2774 + stmdb sp!, {r4-r6,lr} + mov r5, r1 + mov r6, r0 + ldrb r0, [r5, #0x0] + ldrb r1, [r5, #0x1] + bl FUN_020A284C +_020A278C: ; 0x020A278C + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldrb r2, [r5, #0x2] + ldrb r1, [r5, #0x3] + ldr r3, _020A2848 ; =0x55555556 + add r0, r5, #0x8 + add r4, r1, r2, lsl #0x8 + smull r2, r1, r3, r4 + add r1, r1, r4, lsr #0x1f + mov r2, #0x3 + bl FUN_020A285C + mov r0, r0, lsl #0x10 + movs r0, r0, lsr #0x10 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + strh r0, [r6, #0x32] + ldrb r12, [r5, #0x4] + ldrb r0, [r5, #0x5] + ldrb r3, [r5, #0x6] + ldrb r2, [r5, #0x7] + mov r1, #0x0 + add r12, r0, r12, lsl #0x8 + add r0, r4, #0x8 + add r4, r2, r3, lsl #0x8 + add r0, r0, r12 + strb r1, [r6, #0x30] + cmp r4, #0x20 + add r5, r5, r0 + blt _020A2818 + mov r0, r5 + add r1, r6, #0x34 + mov r2, #0x20 + bl MI_CpuCopy8 + b _020A2838 +_020A2818: + add r0, r6, #0x34 + rsb r2, r4, #0x20 + bl MI_CpuFill8 + add r1, r6, #0x54 + mov r0, r5 + mov r2, r4 + sub r1, r1, r4 + bl MI_CpuCopy8 +_020A2838: + mov r0, #0x1 + strb r0, [r6, #0x455] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A2848: .word 0x55555556 + + arm_func_start FUN_020A284C +FUN_020A284C: + cmp r0, #0x3 + moveq r0, #0x1 + movne r0, #0x0 + bx lr + + arm_func_start FUN_020A285C +FUN_020A285C: ; 0x020A285C + stmdb sp!, {r4-r8,lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, #0x0 + ldr r4, _020A28BC ; =0x0210623C +_020A2874: + mov r0, r5, lsl #0x1 + ldrh r3, [r4, r0] + mov r0, r8 + mov r1, r7 + mov r2, r6 + bl FUN_020A28C0 +_020A288C: ; 0x020A288C + cmp r0, #0x0 + ldrne r0, _020A28BC ; =0x0210623C + movne r1, r5, lsl #0x1 + ldrneh r0, [r0, r1] + ldmneia sp!, {r4-r8,lr} + bxne lr + add r5, r5, #0x1 + cmp r5, #0x2 + blo _020A2874 + mov r0, #0x0 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020A28BC: .word 0x0210623C + + arm_func_start FUN_020A28C0 +FUN_020A28C0: + stmdb sp!, {r4,lr} + cmp r1, #0x0 + mov r4, #0x0 + ble _020A2908 +_020A28D0: + ldrb lr, [r0, #0x0] + ldrb r12, [r0, #0x1] + cmp r2, #0x3 + add lr, r12, lr, lsl #0x8 + ldreqb r12, [r0, #0x2] + addeq lr, r12, lr, lsl #0x8 + cmp lr, r3 + moveq r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr + add r4, r4, #0x1 + cmp r4, r1 + add r0, r0, r2 + blt _020A28D0 +_020A2908: + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020A2914 +FUN_020A2914: ; 0x020A2914 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r0 + mov r5, r1 + add r0, r5, #0x2 + add r1, r6, #0x54 + mov r2, #0x20 + bl MI_CpuCopy8 + add r0, r5, #0x22 + ldrb r7, [r6, #0x30] + add r5, r5, #0x23 + ldrb r4, [r0, #0x0] + cmp r7, #0x0 + beq _020A2974 + cmp r4, #0x20 + bne _020A2974 + mov r1, r5 + add r0, r6, #0x74 + mov r2, #0x20 + bl memcmp +_020A2964: ; 0x020A2964 + cmp r0, #0x0 + moveq r0, #0x1 + streqb r0, [r6, #0x31] + beq _020A29B4 +_020A2974: + cmp r7, #0x0 + beq _020A2984 + mov r0, r6 + bl FUN_020A3798 +_020A2984: + cmp r4, #0x0 + moveq r0, #0x0 + streqb r0, [r6, #0x30] + beq _020A29AC + mov r0, r5 + add r1, r6, #0x74 + mov r2, #0x20 + bl MI_CpuCopy8 + mov r0, #0x1 + strb r0, [r6, #0x30] +_020A29AC: + mov r0, #0x0 + strb r0, [r6, #0x31] +_020A29B4: + add r0, r5, r4 + ldrb r2, [r5, r4] + ldrb r1, [r0, #0x1] + mov r0, #0x2 + add r1, r1, r2, lsl #0x8 + strh r1, [r6, #0x32] + strb r0, [r6, #0x455] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_020A29DC +FUN_020A29DC: ; 0x020A29DC + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x24 + ldr r1, [sp, #0x4c] + mov r10, r0 + ldrb r4, [r1, #0x2] + ldrb r3, [r1, #0x0] + ldrb r2, [r1, #0x1] + add r0, r1, #0x3 + mvn r1, #0x0 + str r0, [sp, #0x4c] + add r2, r2, r3, lsl #0x8 + add r0, sp, #0x14 + str r1, [r10, #0x45c] + add r7, r4, r2, lsl #0x8 + bl RTC_GetDate + mov r8, #0x0 + ldr r0, [sp, #0x14] + ldr r2, [sp, #0x1c] + add r1, r0, #0x7d0 + ldr r0, [sp, #0x18] + mov r1, r1, lsl #0x10 + add r0, r1, r0, lsl #0x8 + add r0, r2, r0 + str r0, [r10, #0x80c] + strb r8, [r10, #0x6b0] + str r8, [r10, #0x5a0] + ldr r0, [r10, #0x5a0] + mov r6, r8 + str r0, [r10, #0x594] + add r0, r10, #0x7b0 + str r0, [sp, #0x4] + mov r0, #0x1 + str r8, [sp, #0x8] + mov r4, r8 + mov r11, #0x2 + str r0, [sp, #0xc] + mvn r5, #0x0 +_020A2A74: + ldr r1, [sp, #0x4c] + mov r0, r10 + ldrb r2, [r1, #0x2] + ldrb r12, [r1, #0x0] + ldrb r3, [r1, #0x1] + add r9, r1, #0x3 + add r1, sp, #0x4c + str r9, [sp, #0x4c] + str r5, [r10, #0x458] + strb r4, [r10, #0x5ad] + strb r4, [r10, #0x5ac] + strb r4, [r10, #0x5af] + strb r4, [r10, #0x6b0] + strb r4, [r10, #0x5b0] + strb r4, [r10, #0x7b0] + add r3, r3, r12, lsl #0x8 + ldr r9, [sp, #0x4c] + add r3, r2, r3, lsl #0x8 + add r2, r3, #0x3 + str r9, [r10, #0x804] + str r3, [r10, #0x808] + sub r7, r7, r2 + mov r2, r4 + mov r3, r4 + str r8, [sp, #0x0] + bl FUN_020A2F98 +_020A2ADC: ; 0x020A2ADC + cmp r0, #0x0 + bne _020A2AFC + ldr r0, [r10, #0x594] + cmp r0, #0x33 + blo _020A2AFC + ldr r0, [r10, #0x5a0] + cmp r0, #0x0 + bne _020A2B14 +_020A2AFC: + mov r0, #0x9 + add sp, sp, #0x24 + strb r0, [r10, #0x455] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020A2B14: + mov r0, r10 + bl FUN_020A2CBC + mov r8, r0 + cmp r6, #0x0 + bne _020A2B44 + ldr r0, [r10, #0x800] + cmp r0, #0x0 + beq _020A2B44 + ldr r1, [sp, #0x4] + bl FUN_020A2C18 +_020A2B3C: ; 0x020A2B3C + cmp r0, #0x0 + orrne r8, r8, #0x4000 +_020A2B44: + and r9, r8, #0xff + cmp r9, #0x1 + bne _020A2BB4 + cmp r7, #0x0 + beq _020A2BB4 + ldr r1, [sp, #0x4c] + ldr r2, [sp, #0x8] + add r1, r1, #0x3 + str r1, [sp, #0x10] + ldr r1, [sp, #0x8] + mov r0, r10 + strb r1, [r10, #0x5ad] + add r1, sp, #0x10 + mov r3, r2 + str r11, [sp, #0x0] + bl FUN_020A2F98 +_020A2B84: ; 0x020A2B84 + cmp r0, #0x0 + movne r0, #0x9 + addne sp, sp, #0x24 + strneb r0, [r10, #0x455] + ldmneia sp!, {r4-r11,lr} + addne sp, sp, #0x10 + bxne lr + mov r0, r10 + add r1, r10, #0x480 + bl FUN_020A2DBC + bic r1, r8, #0xff + orr r8, r1, r0 +_020A2BB4: + ldr r3, [r10, #0x810] + cmp r3, #0x0 + beq _020A2BD4 + mov r0, r8 + mov r1, r10 + mov r2, r6 + blx r3 + mov r8, r0 +_020A2BD4: + cmp r9, #0x0 + add r6, r6, #0x1 + beq _020A2BF4 + cmp r8, #0x0 + bne _020A2BF4 + cmp r7, #0x0 + ldrne r8, [sp, #0xc] + bne _020A2A74 +_020A2BF4: + cmp r8, #0x0 + moveq r0, #0x3 + streqb r0, [r10, #0x455] + movne r0, #0x9 + strneb r0, [r10, #0x455] + add sp, sp, #0x24 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr + + arm_func_start FUN_020A2C18 +FUN_020A2C18: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + b _020A2C38 +_020A2C28: + cmp r1, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr +_020A2C38: + ldrsb r0, [r5], #0x1 + ldrsb r1, [r6], #0x1 + cmp r1, r0 + beq _020A2C28 + cmp r0, #0x2a + movne r0, #0x1 + ldmneia sp!, {r4-r6,lr} + bxne lr + sub r6, r6, #0x1 + mov r0, r6 + bl FUN_020A2C94 + mov r4, r0 + mov r0, r5 + bl FUN_020A2C94 + cmp r0, r4 + movgt r0, #0x1 + ldmgtia sp!, {r4-r6,lr} + bxgt lr + sub r0, r4, r0 + add r6, r6, r0 + b _020A2C38 +_020A2C8C: ; 0x020A2C8C + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_020A2C94 +FUN_020A2C94: ; 0x020A2C94 + mov r2, r0 + b _020A2CA0 +_020A2C9C: + add r0, r0, #0x1 +_020A2CA0: + ldrsb r1, [r0, #0x0] + cmp r1, #0x2e + beq _020A2CB4 + cmp r1, #0x0 + bne _020A2C9C +_020A2CB4: + sub r0, r0, r2 + bx lr + + arm_func_start FUN_020A2CBC +FUN_020A2CBC: ; 0x020A2CBC + stmdb sp!, {r4-r6,lr} + mov r5, r0 + ldrb r0, [r5, #0x5af] + ldr r1, [r5, #0x45c] + cmp r0, #0x0 + movne r4, #0x0 + moveq r4, #0x8000 + mvn r0, #0x0 + cmp r1, r0 + orreq r0, r4, #0x4 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r0, [r5, #0x458] + cmp r0, #0x3 + beq _020A2D04 + cmp r0, #0x4 + beq _020A2D40 + b _020A2D7C +_020A2D04: + add r6, r5, #0x3fc + mov r0, r6 + bl FUN_020A3B8C + ldr r1, [r5, #0x460] + ldr r2, [r5, #0x464] + mov r0, r6 + sub r2, r2, r1 + bl FUN_020A3ACC + ldr r1, _020A2DB8 ; =0x00000468 + mov r0, r6 + add r1, r5, r1 + bl FUN_020A3A58 + mov r0, #0x10 + str r0, [r5, #0x47c] + b _020A2D88 +_020A2D40: + add r6, r5, #0x348 + mov r0, r6 + bl FUN_020A41CC + ldr r1, [r5, #0x460] + ldr r2, [r5, #0x464] + mov r0, r6 + sub r2, r2, r1 + bl FUN_020A410C + ldr r1, _020A2DB8 ; =0x00000468 + mov r0, r6 + add r1, r5, r1 + bl FUN_020A4098 + mov r0, #0x14 + str r0, [r5, #0x47c] + b _020A2D88 +_020A2D7C: + orr r0, r4, #0x3 + ldmia sp!, {r4-r6,lr} + bx lr +_020A2D88: + mov r0, r5 + add r1, r5, #0x5b0 + bl FUN_020A3628 + movs r1, r0 + orreq r0, r4, #0x1 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r0, r5 + bl FUN_020A2DBC +_020A2DAC: ; 0x020A2DAC + orr r0, r4, r0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A2DB8: .word 0x00000468 + + arm_func_start FUN_020A2DBC +FUN_020A2DBC: + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x8 + mov r8, r0 + ldr r0, [r8, #0x5a4] + mov r7, r1 + cmp r0, #0x0 + beq _020A2E14 + ldr r0, [r8, #0x5a8] + cmp r0, #0x0 + beq _020A2E14 + ldr r0, [r7, #0x10] + cmp r0, #0x0 + beq _020A2E14 + ldr r0, [r7, #0xc] + cmp r0, #0x0 + beq _020A2E14 + ldr r0, [r7, #0x8] + cmp r0, #0x0 + beq _020A2E14 + ldr r0, [r7, #0x4] + cmp r0, #0x0 + bne _020A2E24 +_020A2E14: + add sp, sp, #0x8 + mov r0, #0x2 + ldmia sp!, {r4-r10,lr} + bx lr +_020A2E24: + mov r0, r0, lsl #0x1 + ldr r1, _020A2F8C ; =0x021C8EC8 + add r0, r0, r0, lsr #0x1f + mov r4, r0, asr #0x1 + ldr r1, [r1, #0x0] + mov r0, r4, lsl #0x3 + blx r1 + movs r6, r0 + addeq sp, sp, #0x8 + moveq r0, #0x2 + ldmeqia sp!, {r4-r10,lr} + bxeq lr + add r5, r6, r4, lsl #0x1 + add r10, r5, r4, lsl #0x1 + ldr r1, [r8, #0x5a4] + ldr r2, [r8, #0x5a8] + mov r0, r5 + mov r3, r4 + add r9, r10, r4, lsl #0x1 + bl FUN_020A4B50 + ldr r1, [r7, #0x10] + ldr r2, [r7, #0xc] + mov r0, r10 + mov r3, r4 + bl FUN_020A4B50 + mov r0, r9 + ldr r1, [r7, #0x8] + ldr r2, [r7, #0x4] + mov r3, r4 + bl FUN_020A4B50 + bl FUN_020A36EC + str r9, [sp, #0x0] + mov r2, r10 + mov r9, r0 + mov r0, r6 + mov r1, r5 + mov r3, r4 + bl FUN_020A507C + mov r0, r9 + bl FUN_020A36B4 + mov r0, r5 + mov r1, r6 + ldr r2, [r7, #0x4] + mov r3, r4 + bl FUN_020A4B08 + ldrb r0, [r6, r4, lsl #0x1] + mov r4, #0x0 + cmp r0, #0x0 + bne _020A2EF4 + ldrb r0, [r5, #0x1] + cmp r0, #0x1 + beq _020A2EFC +_020A2EF4: + mov r4, #0x2 + b _020A2F6C +_020A2EFC: + ldr r3, [r7, #0x4] + mov r2, #0x2 + cmp r3, #0x2 + ble _020A2F24 +_020A2F0C: + ldrb r0, [r5, r2] + cmp r0, #0xff + bne _020A2F24 + add r2, r2, #0x1 + cmp r2, r3 + blt _020A2F0C +_020A2F24: + add r1, r2, #0x1 + cmp r1, r3 + bge _020A2F68 + ldrb r0, [r5, r2] + cmp r0, #0x0 + bne _020A2F68 + ldrb r0, [r5, r1] + cmp r0, #0x30 + bne _020A2F68 + ldr r0, _020A2F90 ; =0x00000468 + ldr r2, [r8, #0x47c] + add r1, r5, r3 + add r0, r8, r0 + sub r1, r1, r2 + bl memcmp +_020A2F60: ; 0x020A2F60 + cmp r0, #0x0 + beq _020A2F6C +_020A2F68: + mov r4, #0x2 +_020A2F6C: + ldr r1, _020A2F94 ; =0x021C8EF4 + mov r0, r6 + ldr r1, [r1, #0x0] + blx r1 + mov r0, r4 + add sp, sp, #0x8 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020A2F8C: .word 0x021C8EC8 +_020A2F90: .word 0x00000468 +_020A2F94: .word 0x021C8EF4 + + arm_func_start FUN_020A2F98 +FUN_020A2F98: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + str r1, [sp, #0x4] + ldr r1, [r1, #0x0] + mov r9, r0 + str r1, [sp, #0x8] + add r0, r1, #0x1 + str r0, [sp, #0x8] + add r0, sp, #0x8 + mov r5, r2 + mov r4, r3 + ldr r8, [sp, #0x30] + ldrb r6, [r1, #0x0] + bl FUN_020A35D8 + movs r7, r0 + bmi _020A2FE0 + cmp r7, #0x7d0 + ble _020A2FF0 +_020A2FE0: + add sp, sp, #0xc + mov r0, #0x1 + ldmia sp!, {r4-r11,lr} + bx lr +_020A2FF0: + and r1, r6, #0x1f + cmp r1, #0x18 + addls pc, pc, r1, lsl #0x2 + b _020A3430 +_020A3000: + b _020A3430 +_020A3004: + b _020A3430 +_020A3008: + b _020A3064 +_020A300C: + b _020A315C +_020A3010: + b _020A3430 +_020A3014: + b _020A3430 +_020A3018: + b _020A31DC +_020A301C: + b _020A3430 +_020A3020: + b _020A3430 +_020A3024: + b _020A3430 +_020A3028: + b _020A3430 +_020A302C: + b _020A3430 +_020A3030: + b _020A3274 +_020A3034: + b _020A3430 +_020A3038: + b _020A3430 +_020A303C: + b _020A3430 +_020A3040: + b _020A3348 +_020A3044: + b _020A33D8 +_020A3048: + b _020A3430 +_020A304C: + b _020A3274 +_020A3050: + b _020A3274 +_020A3054: + b _020A3430 +_020A3058: + b _020A3274 +_020A305C: + b _020A32F4 +_020A3060: + b _020A32F4 +_020A3064: + ldrb r0, [r9, #0x5ad] + cmp r0, #0x0 + beq _020A314C + cmp r4, #0x0 + bne _020A30E0 + ldr r0, [sp, #0x8] + ldrb r1, [r0, #0x0] + cmp r1, #0x0 + bne _020A30A4 +_020A3088: + ldr r1, [sp, #0x8] + sub r7, r7, #0x1 + add r0, r1, #0x1 + str r0, [sp, #0x8] + ldrb r1, [r1, #0x1] + cmp r1, #0x0 + beq _020A3088 +_020A30A4: + cmp r8, #0x0 + beq _020A30C0 + cmp r8, #0x2 + streq r7, [r9, #0x484] + ldreq r0, [sp, #0x8] + streq r0, [r9, #0x488] + b _020A314C +_020A30C0: + cmp r7, #0x100 + bgt _020A314C + ldr r1, _020A34B8 ; =0x00000494 + mov r2, r7 + add r1, r9, r1 + bl MI_CpuCopy8 + str r7, [r9, #0x594] + b _020A314C +_020A30E0: + cmp r4, #0x1 + bne _020A314C + ldr r0, [sp, #0x8] + ldrb r1, [r0, #0x0] + cmp r1, #0x0 + bne _020A3114 +_020A30F8: + ldr r1, [sp, #0x8] + sub r7, r7, #0x1 + add r0, r1, #0x1 + str r0, [sp, #0x8] + ldrb r1, [r1, #0x1] + cmp r1, #0x0 + beq _020A30F8 +_020A3114: + cmp r8, #0x0 + beq _020A3130 + cmp r8, #0x2 + streq r7, [r9, #0x48c] + ldreq r0, [sp, #0x8] + streq r0, [r9, #0x490] + b _020A314C +_020A3130: + cmp r7, #0x8 + bgt _020A314C + ldr r1, _020A34BC ; =0x00000598 + mov r2, r7 + add r1, r9, r1 + bl MI_CpuCopy8 + str r7, [r9, #0x5a0] +_020A314C: + ldr r0, [sp, #0x8] + add r0, r0, r7 + str r0, [sp, #0x8] + b _020A349C +_020A315C: + cmp r5, #0x1 + bne _020A317C + cmp r8, #0x2 + ldrne r1, [sp, #0x8] + subne r0, r7, #0x1 + addne r1, r1, #0x1 + strne r1, [r9, #0x5a4] + strne r0, [r9, #0x5a8] +_020A317C: + ldrb r0, [r9, #0x5ad] + cmp r0, #0x0 + beq _020A31CC + ldr r0, [sp, #0x8] + add r1, sp, #0x8 + add r0, r0, #0x1 + str r0, [sp, #0x8] + mov r0, r9 + mov r2, r5 + mov r3, #0x0 + str r8, [sp, #0x0] + bl FUN_020A2F98 +_020A31AC: ; 0x020A31AC + cmp r0, #0x0 + addne sp, sp, #0xc + movne r0, #0x1 + ldmneia sp!, {r4-r11,lr} + bxne lr + mov r0, #0x0 + strb r0, [r9, #0x5ad] + b _020A349C +_020A31CC: + ldr r0, [sp, #0x8] + add r0, r0, r7 + str r0, [sp, #0x8] + b _020A349C +_020A31DC: + ldr r5, [sp, #0x8] + mov r6, #0x0 + ldr sl, _020A34C0 ; =0x02106278 +_020A31E8: + ldr r4, [r10, r6, lsl #0x2] + mov r0, r4 + bl strlen + mov r2, r0 + mov r0, r5 + mov r1, r4 + bl memcmp +_020A3204: ; 0x020A3204 + cmp r0, #0x0 + bne _020A3258 + cmp r6, #0x5 + addls pc, pc, r6, lsl #0x2 + b _020A3264 +_020A3218: ; 0x020A3218 + b _020A3264 +_020A321C: ; 0x020A321C + b _020A3230 +_020A3220: ; 0x020A3220 + b _020A3230 +_020A3224: ; 0x020A3224 + b _020A3240 +_020A3228: ; 0x020A3228 + b _020A3240 +_020A322C: ; 0x020A322C + b _020A324C +_020A3230: + cmp r8, #0x0 + streq r6, [r9, #0x45c] + strb r6, [r9, #0x5ad] + b _020A3264 +_020A3240: + cmp r8, #0x2 + strne r6, [r9, #0x458] + b _020A3264 +_020A324C: + cmp r8, #0x2 + strneb r6, [r9, #0x5ae] + b _020A3264 +_020A3258: + add r6, r6, #0x1 + cmp r6, #0x6 + blt _020A31E8 +_020A3264: + ldr r0, [sp, #0x8] + add r0, r0, r7 + str r0, [sp, #0x8] + b _020A349C +_020A3274: + cmp r8, #0x2 + beq _020A32DC + ldrb r0, [r9, #0x5ac] + cmp r0, #0x0 + beq _020A32CC + ldr r1, [sp, #0x8] + mov r2, r7 + add r0, r9, #0x6b0 + bl FUN_020A3554 + ldrb r0, [r9, #0x5ae] + cmp r0, #0x5 + bne _020A32DC + cmp r7, #0x4f + bgt _020A32DC + ldr r0, [sp, #0x8] + mov r2, r7 + add r1, r9, #0x7b0 + bl MI_CpuCopy8 + add r0, r9, r7 + mov r1, #0x0 + strb r1, [r0, #0x7b0] + b _020A32DC +_020A32CC: + ldr r1, [sp, #0x8] + mov r2, r7 + add r0, r9, #0x5b0 + bl FUN_020A3554 +_020A32DC: + mov r0, #0x0 + strb r0, [r9, #0x5ae] + ldr r0, [sp, #0x8] + add r0, r0, r7 + str r0, [sp, #0x8] + b _020A349C +_020A32F4: + cmp r8, #0x2 + beq _020A3330 + ldr r0, [sp, #0x8] + bl FUN_020A34C4 +_020A3304: ; 0x020A3304 + cmp r4, #0x0 + bne _020A3320 + ldr r1, [r9, #0x80c] + cmp r1, r0 + movcs r0, #0x1 + strcsb r0, [r9, #0x5af] + b _020A3330 +_020A3320: + ldr r1, [r9, #0x80c] + cmp r1, r0 + movhi r0, #0x0 + strhib r0, [r9, #0x5af] +_020A3330: + ldr r1, [sp, #0x8] + mov r0, #0x1 + add r1, r1, r7 + str r1, [sp, #0x8] + strb r0, [r9, #0x5ac] + b _020A349C +_020A3348: + cmp r5, #0x0 + bne _020A3364 + cmp r4, #0x0 + bne _020A3364 + cmp r8, #0x2 + ldrne r0, [sp, #0x8] + strne r0, [r9, #0x460] +_020A3364: + ldr r0, [sp, #0x8] + mov r10, #0x0 + add r7, r0, r7 + cmp r0, r7 + bhs _020A33BC + add r11, sp, #0x8 + add r6, r5, #0x1 +_020A3380: + mov r0, r9 + mov r1, r11 + mov r2, r6 + mov r3, r10 + str r8, [sp, #0x0] + bl FUN_020A2F98 +_020A3398: ; 0x020A3398 + cmp r0, #0x0 + add r10, r10, #0x1 + addne sp, sp, #0xc + movne r0, #0x1 + ldmneia sp!, {r4-r11,lr} + bxne lr + ldr r0, [sp, #0x8] + cmp r0, r7 + blo _020A3380 +_020A33BC: + cmp r5, #0x1 + bne _020A349C + cmp r4, #0x0 + bne _020A349C + cmp r8, #0x2 + strne r0, [r9, #0x464] + b _020A349C +_020A33D8: + ldr r0, [sp, #0x8] + add r6, r0, r7 + cmp r0, r6 + bhs _020A349C + add r7, r5, #0x1 + add r4, sp, #0x8 + mov r5, #0x0 +_020A33F4: + mov r0, r9 + mov r1, r4 + mov r2, r7 + mov r3, r5 + str r8, [sp, #0x0] + bl FUN_020A2F98 +_020A340C: ; 0x020A340C + cmp r0, #0x0 + addne sp, sp, #0xc + movne r0, #0x1 + ldmneia sp!, {r4-r11,lr} + bxne lr + ldr r0, [sp, #0x8] + cmp r0, r6 + blo _020A33F4 + b _020A349C +_020A3430: + cmp r6, #0xa0 + bne _020A3490 + ldr r0, [sp, #0x8] + add r6, r0, r7 + cmp r0, r6 + bhs _020A349C + add r7, r5, #0x1 + add r4, sp, #0x8 + mov r5, #0x0 +_020A3454: + mov r0, r9 + mov r1, r4 + mov r2, r7 + mov r3, r5 + str r8, [sp, #0x0] + bl FUN_020A2F98 +_020A346C: ; 0x020A346C + cmp r0, #0x0 + addne sp, sp, #0xc + movne r0, #0x1 + ldmneia sp!, {r4-r11,lr} + bxne lr + ldr r0, [sp, #0x8] + cmp r0, r6 + blo _020A3454 + b _020A349C +_020A3490: + ldr r0, [sp, #0x8] + add r0, r0, r7 + str r0, [sp, #0x8] +_020A349C: + ldr r2, [sp, #0x8] + ldr r1, [sp, #0x4] + mov r0, #0x0 + str r2, [r1, #0x0] + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020A34B8: .word 0x00000494 +_020A34BC: .word 0x00000598 +_020A34C0: .word 0x02106278 + + arm_func_start FUN_020A34C4 +FUN_020A34C4: + stmdb sp!, {r4,lr} + ldrb r12, [r0, #0x1] + ldrb r3, [r0, #0x0] + mov r2, #0xa + cmp r1, #0x17 + mla r1, r3, r2, r12 + sub lr, r1, #0x210 + add r0, r0, #0x2 + bne _020A34FC + cmp lr, #0x32 + ldrhs r1, _020A3550 ; =0x0000076C + addcc r4, lr, #0x7d0 + addcs r4, lr, r1 + b _020A3518 +_020A34FC: + ldrb r12, [r0, #0x1] + ldrb r3, [r0, #0x0] + mov r1, #0x64 + add r0, r0, #0x2 + mla r2, r3, r2, r12 + sub r2, r2, #0x210 + mla r4, lr, r1, r2 +_020A3518: + ldrb r12, [r0, #0x1] + ldrb r3, [r0, #0x0] + mov r1, #0xa + ldrb r2, [r0, #0x3] + ldrb r0, [r0, #0x2] + mla r12, r3, r1, r12 + mla r1, r0, r1, r2 + mov r2, r4, lsl #0x10 + sub r0, r12, #0x210 + add r2, r2, r0, lsl #0x8 + sub r0, r1, #0x210 + add r0, r2, r0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A3550: .word 0x0000076C + + arm_func_start FUN_020A3554 +FUN_020A3554: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrsb r3, [r0, #0x0] + mov lr, r0 + cmp r3, #0x0 + beq _020A35AC +_020A356C: + ldrsb r3, [r0, #0x1]! + cmp r3, #0x0 + bne _020A356C + sub r3, r0, lr + cmp r3, #0xff + addge sp, sp, #0x4 + ldmgeia sp!, {lr} + bxge lr + mov r3, #0x2c + strb r3, [r0, #0x0] + mov r3, #0x20 + strb r3, [r0, #0x1] + add r0, r0, #0x2 + b _020A35AC +_020A35A4: + ldrsb r3, [r1], #0x1 + strb r3, [r0], #0x1 +_020A35AC: + cmp r2, #0x0 + sub r2, r2, #0x1 + beq _020A35C4 + sub r3, r0, lr + cmp r3, #0xff + blt _020A35A4 +_020A35C4: + mov r1, #0x0 + strb r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_020A35D8 +FUN_020A35D8: ; 0x020A35D8 + ldr r1, [r0, #0x0] + ldrb r3, [r1, #0x0] + add r12, r1, #0x1 + ands r1, r3, #0x80 + beq _020A361C + ands r1, r3, #0x7f + sub r2, r1, #0x1 + mov r3, #0x0 + beq _020A361C +_020A35FC: + ands r1, r3, #0xff000000 + mvnne r0, #0x0 + bxne lr + ldrb r1, [r12], #0x1 + cmp r2, #0x0 + sub r2, r2, #0x1 + add r3, r1, r3, lsl #0x8 + bne _020A35FC +_020A361C: + str r12, [r0, #0x0] + mov r0, r3 + bx lr + + arm_func_start FUN_020A3628 +FUN_020A3628: ; 0x020A3628 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r4, [r0, #0x818] + mov r7, r1 + cmp r4, #0x0 + mov r6, #0x0 + ble _020A3678 + ldr r5, [r0, #0x814] +_020A3648: + ldr r0, [r5, r6, lsl #0x2] + mov r1, r7 + ldr r0, [r0, #0x0] + bl strcmp +_020A3658: ; 0x020A3658 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldreq r0, [r5, r6, lsl #0x2] + ldmeqia sp!, {r4-r7,lr} + bxeq lr + add r6, r6, #0x1 + cmp r6, r4 + blt _020A3648 +_020A3678: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_020A3688 +FUN_020A3688: ; 0x020A3688 + ldr r2, _020A36B0 ; =0x021D3498 + ldr r2, [r2, #0x4] + ldr r2, [r2, #0xa4] + cmp r2, #0x0 + bxeq lr + ldr r2, [r2, #0xc] + cmp r2, #0x0 + strne r0, [r2, #0x814] + strne r1, [r2, #0x818] + bx lr + .balign 4 +_020A36B0: .word 0x021D3498 + + arm_func_start FUN_020A36B4 +FUN_020A36B4: ; 0x020A36B4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r1, r0 + cmp r1, #0x20 + addcs sp, sp, #0x4 + ldmcsia sp!, {lr} + bxcs lr + ldr r0, _020A36E8 ; =0x021D3498 + ldr r0, [r0, #0x4] + bl OS_SetThreadPriority + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A36E8: .word 0x021D3498 + + arm_func_start FUN_020A36EC +FUN_020A36EC: ; 0x020A36EC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020A3744 ; =0x02106244 + ldr r0, [r0, #0x0] + cmp r0, #0x20 + addcs sp, sp, #0x4 + mvncs r0, #0x0 + ldmcsia sp!, {r4-r5,lr} + bxcs lr + ldr r0, _020A3748 ; =0x021D3498 + ldr r5, [r0, #0x4] + mov r0, r5 + bl OS_GetThreadPriority + ldr r1, _020A3744 ; =0x02106244 + mov r4, r0 + ldr r1, [r1, #0x0] + mov r0, r5 + bl OS_SetThreadPriority + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A3744: .word 0x02106244 +_020A3748: .word 0x021D3498 + + arm_func_start FUN_020A374C +FUN_020A374C: ; 0x020A374C + ldr r1, _020A3758 ; =0x02106244 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020A3758: .word 0x02106244 + + arm_func_start FUN_020A375C +FUN_020A375C: ; 0x020A375C + stmdb sp!, {lr} + sub sp, sp, #0x1c + add r0, sp, #0x0 + bl RTC_GetDate + add r0, sp, #0x10 + bl RTC_GetTime +_020A3774: ; 0x020A3774 + add r0, sp, #0x0 + add r1, sp, #0x10 + bl RTC_ConvertDateTimeToSecond + ldr r1, _020A3794 ; =0x386D4380 + add r0, r0, r1 + add sp, sp, #0x1c + ldmia sp!, {lr} + bx lr + .balign 4 +_020A3794: .word 0x386D4380 + + arm_func_start FUN_020A3798 +FUN_020A3798: + stmdb sp!, {r4-r8,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r6, _020A3804 ; =0x021CA6FC + mov r7, r0 + mov r8, #0x0 + add r5, r4, #0x74 + mov r4, #0x20 +_020A37B8: + ldrb r0, [r6, #0x5a] + cmp r0, #0x0 + beq _020A37E4 + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl memcmp +_020A37D4: ; 0x020A37D4 + cmp r0, #0x0 + moveq r0, #0x0 + streqb r0, [r6, #0x5a] + beq _020A37F4 +_020A37E4: + add r8, r8, #0x1 + cmp r8, #0x4 + add r6, r6, #0x5c + blt _020A37B8 +_020A37F4: + mov r0, r7 + bl OS_RestoreInterrupts + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020A3804: .word 0x021CA6FC + + arm_func_start FUN_020A3808 +FUN_020A3808: ; 0x020A3808 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r9, r0 + mov r8, r1 + mov r7, r2 + bl OS_DisableInterrupts + mov r5, r0 + bl OS_GetTick + ldr r6, _020A3904 ; =0x021CA6FC + mov r4, r0, lsr #0x10 + mov r3, #0x0 + mov r12, r3 + mov r2, r6 + orr r4, r4, r1, lsl #0x10 + mvn r0, #0x0 +_020A3844: + ldrb r1, [r2, #0x5a] + cmp r1, #0x0 + beq _020A387C + cmp r8, #0x0 + beq _020A387C + ldr lr, [r2, #0x54] + cmp r8, lr + bne _020A387C + cmp r7, #0x0 + beq _020A387C + ldrh lr, [r2, #0x58] + cmp r7, lr + moveq r6, r2 + beq _020A38BC +_020A387C: + mvn lr, #0x0 + cmp r3, lr + beq _020A38AC + cmp r1, #0x0 + moveq r3, r0 + moveq r6, r2 + beq _020A38AC + ldr r1, [r2, #0x50] + sub r1, r4, r1 + cmp r1, r3 + movhi r3, r1 + movhi r6, r2 +_020A38AC: + add r12, r12, #0x1 + cmp r12, #0x4 + add r2, r2, #0x5c + blt _020A3844 +_020A38BC: + mov r1, r6 + add r0, r9, #0x74 + mov r2, #0x20 + bl MI_CpuCopy8 + mov r0, r9 + add r1, r6, #0x20 + mov r2, #0x30 + bl MI_CpuCopy8 + str r4, [r6, #0x50] + mov r0, #0x1 + strb r0, [r6, #0x5a] + str r8, [r6, #0x54] + mov r0, r5 + strh r7, [r6, #0x58] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020A3904: .word 0x021CA6FC + + arm_func_start FUN_020A3908 +FUN_020A3908: ; 0x020A3908 + stmdb sp!, {r4-r8,lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + bl OS_DisableInterrupts + mov r1, #0x0 + ldr r4, _020A39AC ; =0x021CA6FC + mov r5, r0 + strb r1, [r8, #0x30] +_020A392C: + ldrb r0, [r4, #0x5a] + cmp r0, #0x0 + beq _020A398C + ldr r0, [r4, #0x54] + cmp r0, r7 + bne _020A398C + ldrh r0, [r4, #0x58] + cmp r0, r6 + bne _020A398C + mov r0, r4 + add r1, r8, #0x74 + mov r2, #0x20 + bl MI_CpuCopy8 + mov r1, r8 + add r0, r4, #0x20 + mov r2, #0x30 + bl MI_CpuCopy8 + bl OS_GetTick + mov r0, r0, lsr #0x10 + orr r0, r0, r1, lsl #0x10 + str r0, [r4, #0x50] + mov r0, #0x1 + strb r0, [r8, #0x30] + b _020A399C +_020A398C: + add r1, r1, #0x1 + cmp r1, #0x4 + add r4, r4, #0x5c + blt _020A392C +_020A399C: + mov r0, r5 + bl OS_RestoreInterrupts + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020A39AC: .word 0x021CA6FC + + arm_func_start FUN_020A39B0 +FUN_020A39B0: ; 0x020A39B0 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r7, r0 + bl OS_DisableInterrupts + mov r6, #0x0 + ldr r4, _020A3A54 ; =0x021CA6FC + mov r5, r0 + strb r6, [r7, #0x30] + add r9, r7, #0x74 + mov r8, #0x20 +_020A39D8: + ldrb r0, [r4, #0x5a] + cmp r0, #0x0 + beq _020A3A30 + ldr r0, [r4, #0x54] + cmp r0, #0x0 + bne _020A3A30 + ldrh r0, [r4, #0x58] + cmp r0, #0x0 + bne _020A3A30 + mov r0, r4 + mov r1, r9 + mov r2, r8 + bl memcmp +_020A3A0C: ; 0x020A3A0C + cmp r0, #0x0 + bne _020A3A30 + mov r1, r7 + add r0, r4, #0x20 + mov r2, #0x30 + bl MI_CpuCopy8 + mov r0, #0x1 + strb r0, [r7, #0x30] + b _020A3A40 +_020A3A30: + add r6, r6, #0x1 + cmp r6, #0x4 + add r4, r4, #0x5c + blt _020A39D8 +_020A3A40: + mov r0, r5 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020A3A54: .word 0x021CA6FC + + arm_func_start FUN_020A3A58 +FUN_020A3A58: ; 0x020A3A58 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r0, r4 + add r1, r5, #0x10 + mov r2, #0x8 + bl FUN_020A4044 + ldr r0, [r5, #0x10] + ldr r1, _020A3AC8 ; =0x021062EC + mov r0, r0, lsr #0x3 + and r0, r0, #0x3f + cmp r0, #0x38 + rsblt r2, r0, #0x38 + rsbge r2, r0, #0x78 + mov r0, r5 + bl FUN_020A3ACC + mov r0, r5 + mov r1, r4 + mov r2, #0x8 + bl FUN_020A3ACC + mov r0, r4 + mov r1, r5 + mov r2, #0x10 + bl FUN_020A4044 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A3AC8: .word 0x021062EC + + arm_func_start FUN_020A3ACC +FUN_020A3ACC: + stmdb sp!, {r4-r8,lr} + mov r8, r0 + ldr r3, [r8, #0x10] + mov r6, r2 + add r0, r3, r6, lsl #0x3 + str r0, [r8, #0x10] + ldr r0, [r8, #0x10] + mov r2, r3, lsr #0x3 + cmp r0, r6, lsl #0x3 + ldrcc r0, [r8, #0x14] + and r4, r2, #0x3f + addcc r0, r0, #0x1 + strcc r0, [r8, #0x14] + ldr r0, [r8, #0x14] + rsb r5, r4, #0x40 + add r0, r0, r6, lsr #0x1d + mov r7, r1 + str r0, [r8, #0x14] + cmp r6, r5 + blo _020A3B6C + add r1, r8, #0x18 + mov r0, r7 + mov r2, r5 + add r1, r1, r4 + bl MI_CpuCopy8 + mov r0, r8 + add r1, r8, #0x18 + mov r4, #0x0 + bl FUN_020A3BD8 + add r0, r5, #0x3f + cmp r0, r6 + bhs _020A3B70 +_020A3B4C: + mov r0, r8 + add r1, r7, r5 + bl FUN_020A3BD8 + add r5, r5, #0x40 + add r0, r5, #0x3f + cmp r0, r6 + blo _020A3B4C + b _020A3B70 +_020A3B6C: + mov r5, #0x0 +_020A3B70: + add r1, r8, #0x18 + add r0, r7, r5 + add r1, r1, r4 + sub r2, r6, r5 + bl MI_CpuCopy8 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FUN_020A3B8C +FUN_020A3B8C: ; 0x020A3B8C + stmdb sp!, {r4,lr} + mov r1, #0x0 + mov r2, #0x58 + mov r4, r0 + bl MI_CpuFill8 + ldr r1, _020A3BC8 ; =0x67452301 + ldr r0, _020A3BCC ; =0xEFCDAB89 + str r1, [r4, #0x0] + ldr r1, _020A3BD0 ; =0x98BADCFE + str r0, [r4, #0x4] + ldr r0, _020A3BD4 ; =0x10325476 + str r1, [r4, #0x8] + str r0, [r4, #0xc] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A3BC8: .word 0x67452301 +_020A3BCC: .word 0xEFCDAB89 +_020A3BD0: .word 0x98BADCFE +_020A3BD4: .word 0x10325476 + + arm_func_start FUN_020A3BD8 +FUN_020A3BD8: ; 0x020A3BD8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x44 + str r0, [sp, #0x0] + ldr r3, [sp, #0x0] + add r0, sp, #0x4 + mov r2, #0x40 + ldr r7, [r3, #0x0] + ldr r6, [r3, #0x4] + ldr r5, [r3, #0x8] + ldr r4, [r3, #0xc] + bl FUN_020A402C + ldr r2, _020A4024 ; =0x021062AC + mov r3, #0x0 + ldr r1, _020A4028 ; =0x0210632C + mov r11, r3 + add r0, sp, #0x4 + mov r10, r2 +_020A3C1C: + ldrb r9, [r2, #0x0] + add r8, r3, #0x1 + eor r12, r5, r4 + and r12, r6, r12 + eor r12, r4, r12 + ldr r9, [r0, r9, lsl #0x2] + ldr lr, [r1, r3, lsl #0x2] + add r9, r12, r9 + add r9, lr, r9 + add r9, r7, r9 + mov r7, r9, lsl #0x7 + orr r7, r7, r9, lsr #0x19 + ldrb r9, [r10, r8] + add r7, r6, r7 + ldr r8, [r1, r8, lsl #0x2] + ldr r9, [r0, r9, lsl #0x2] + eor r12, r6, r5 + and r12, r7, r12 + eor r12, r5, r12 + add r9, r12, r9 + add r9, r8, r9 + add r8, r3, #0x2 + add r9, r4, r9 + mov r4, r9, lsl #0xc + orr r4, r4, r9, lsr #0x14 + add r4, r7, r4 + ldr r9, [r1, r8, lsl #0x2] + ldrb r12, [r10, r8] + eor r8, r7, r6 + and r8, r4, r8 + eor r8, r6, r8 + ldr lr, [r0, r12, lsl #0x2] + add r12, r3, #0x3 + add r8, r8, lr + add r8, r9, r8 + add r8, r5, r8 + mov r5, r8, lsl #0x11 + orr r5, r5, r8, lsr #0xf + add r5, r4, r5 + ldr r9, [r1, r12, lsl #0x2] + ldrb r12, [r10, r12] + eor r8, r4, r7 + and r8, r5, r8 + eor r8, r7, r8 + ldr r12, [r0, r12, lsl #0x2] + add r2, r2, #0x4 + add r8, r8, r12 + add r8, r9, r8 + add r8, r6, r8 + mov r6, r8, lsl #0x16 + orr r6, r6, r8, lsr #0xa + add r6, r5, r6 + add r3, r3, #0x4 + add r11, r11, #0x1 + cmp r11, #0x4 + blt _020A3C1C + add r8, r10, r3 + mov r2, #0x0 + ldr r1, _020A4028 ; =0x0210632C + add r0, sp, #0x4 + ldr lr, _020A4024 ; =0x021062AC +_020A3D10: + ldrb r10, [r8, #0x0] + add r9, r3, #0x1 + eor r11, r6, r5 + and r11, r4, r11 + eor r11, r5, r11 + ldr r10, [r0, r10, lsl #0x2] + ldr r12, [r1, r3, lsl #0x2] + add r10, r11, r10 + add r10, r12, r10 + add r10, r7, r10 + mov r7, r10, lsl #0x5 + orr r7, r7, r10, lsr #0x1b + ldrb r10, [lr, r9] + add r7, r6, r7 + ldr r9, [r1, r9, lsl #0x2] + ldr r10, [r0, r10, lsl #0x2] + eor r11, r7, r6 + and r11, r5, r11 + eor r11, r6, r11 + add r10, r11, r10 + add r10, r9, r10 + add r9, r3, #0x2 + add r10, r4, r10 + mov r4, r10, lsl #0x9 + orr r4, r4, r10, lsr #0x17 + add r4, r7, r4 + ldr r12, [r1, r9, lsl #0x2] + ldrb r9, [lr, r9] + eor r10, r4, r7 + and r10, r6, r10 + eor r11, r7, r10 + ldr r10, [r0, r9, lsl #0x2] + add r9, r3, #0x3 + add r10, r11, r10 + add r10, r12, r10 + add r10, r5, r10 + mov r5, r10, lsl #0xe + orr r5, r5, r10, lsr #0x12 + add r5, r4, r5 + ldr r10, [r1, r9, lsl #0x2] + ldrb r11, [lr, r9] + eor r9, r5, r4 + and r9, r7, r9 + eor r9, r4, r9 + ldr r11, [r0, r11, lsl #0x2] + add r8, r8, #0x4 + add r9, r9, r11 + add r9, r10, r9 + add r9, r6, r9 + mov r6, r9, lsl #0x14 + orr r6, r6, r9, lsr #0xc + add r6, r5, r6 + add r3, r3, #0x4 + add r2, r2, #0x1 + cmp r2, #0x4 + blt _020A3D10 + add r8, lr, r3 + mov lr, #0x0 + ldr r2, _020A4028 ; =0x0210632C + add r0, sp, #0x4 +_020A3E00: + ldrb r1, [r8, #0x0] + eor r12, r6, r5 + add lr, lr, #0x1 + ldr r11, [r0, r1, lsl #0x2] + eor r12, r4, r12 + ldr r1, [r2, r3, lsl #0x2] + add r11, r12, r11 + add r1, r1, r11 + add r7, r7, r1 + mov r1, r7, lsl #0x4 + orr r1, r1, r7, lsr #0x1c + add r7, r6, r1 + add r10, r3, #0x1 + ldr r1, _020A4024 ; =0x021062AC + ldr r12, [r2, r10, lsl #0x2] + ldrb r1, [r1, r10] + eor r10, r7, r6 + eor r11, r5, r10 + ldr r10, [r0, r1, lsl #0x2] + add r9, r3, #0x2 + add r10, r11, r10 + add r10, r12, r10 + add r4, r4, r10 + ldr sl, _020A4024 ; =0x021062AC + ldr r1, [r2, r9, lsl #0x2] + ldrb r9, [r10, r9] + mov r10, r4, lsl #0xb + orr r4, r10, r4, lsr #0x15 + add r4, r7, r4 + eor r10, r4, r7 + ldr r9, [r0, r9, lsl #0x2] + eor r10, r6, r10 + add r9, r10, r9 + add r1, r1, r9 + add r5, r5, r1 + add r10, r3, #0x3 + ldr sb, _020A4024 ; =0x021062AC + mov r1, r5, lsl #0x10 + ldrb r9, [r9, r10] + orr r1, r1, r5, lsr #0x10 + add r5, r4, r1 + ldr r1, [r2, r10, lsl #0x2] + eor r10, r5, r4 + ldr r9, [r0, r9, lsl #0x2] + eor r10, r7, r10 + add r9, r10, r9 + add r1, r1, r9 + add r6, r6, r1 + mov r1, r6, lsl #0x17 + orr r1, r1, r6, lsr #0x9 + add r8, r8, #0x4 + add r6, r5, r1 + add r3, r3, #0x4 + cmp lr, #0x4 + blt _020A3E00 + ldr r0, _020A4024 ; =0x021062AC + ldr r1, _020A4028 ; =0x0210632C + add r8, r0, r3 + ldr lr, _020A4024 ; =0x021062AC + mov r2, #0x0 + add r0, sp, #0x4 +_020A3EF4: + ldrb r10, [r8, #0x0] + add r9, r3, #0x1 + mvn r11, r4 + orr r11, r6, r11 + eor r11, r5, r11 + ldr r10, [r0, r10, lsl #0x2] + ldr r12, [r1, r3, lsl #0x2] + add r10, r11, r10 + add r10, r12, r10 + add r10, r7, r10 + mov r7, r10, lsl #0x6 + orr r7, r7, r10, lsr #0x1a + ldrb r10, [lr, r9] + add r7, r6, r7 + ldr r9, [r1, r9, lsl #0x2] + ldr r10, [r0, r10, lsl #0x2] + mvn r11, r5 + orr r11, r7, r11 + eor r11, r6, r11 + add r10, r11, r10 + add r10, r9, r10 + add r9, r3, #0x2 + add r10, r4, r10 + mov r4, r10, lsl #0xa + orr r4, r4, r10, lsr #0x16 + add r4, r7, r4 + ldr r12, [r1, r9, lsl #0x2] + ldrb r9, [lr, r9] + mvn r10, r6 + orr r10, r4, r10 + eor r11, r7, r10 + ldr r10, [r0, r9, lsl #0x2] + add r9, r3, #0x3 + add r10, r11, r10 + add r10, r12, r10 + add r10, r5, r10 + mov r5, r10, lsl #0xf + orr r5, r5, r10, lsr #0x11 + add r5, r4, r5 + ldr r10, [r1, r9, lsl #0x2] + ldrb r11, [lr, r9] + mvn r9, r7 + orr r9, r5, r9 + eor r9, r4, r9 + ldr r11, [r0, r11, lsl #0x2] + add r8, r8, #0x4 + add r9, r9, r11 + add r9, r10, r9 + add r9, r6, r9 + mov r6, r9, lsl #0x15 + orr r6, r6, r9, lsr #0xb + add r6, r5, r6 + add r3, r3, #0x4 + add r2, r2, #0x1 + cmp r2, #0x4 + blt _020A3EF4 + ldr r0, [sp, #0x0] + ldr r0, [r0, #0x0] + add r1, r0, r7 + ldr r0, [sp, #0x0] + str r1, [r0, #0x0] + ldr r0, [r0, #0x4] + add r1, r0, r6 + ldr r0, [sp, #0x0] + str r1, [r0, #0x4] + ldr r0, [r0, #0x8] + add r1, r0, r5 + ldr r0, [sp, #0x0] + str r1, [r0, #0x8] + ldr r0, [r0, #0xc] + add r1, r0, r4 + ldr r0, [sp, #0x0] + str r1, [r0, #0xc] + add sp, sp, #0x44 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020A4024: .word 0x021062AC +_020A4028: .word 0x0210632C + + arm_func_start FUN_020A402C +FUN_020A402C: ; 0x020A402C + ldr ip, _020A4040 ; =MI_CpuCopy8 + mov r3, r0 + mov r0, r1 + mov r1, r3 + bx r12 + .balign 4 +_020A4040: .word MI_CpuCopy8 + + arm_func_start FUN_020A4044 +FUN_020A4044: ; 0x020A4044 + ldr ip, _020A4058 ; =MI_CpuCopy8 + mov r3, r0 + mov r0, r1 + mov r1, r3 + bx r12 + .balign 4 +_020A4058: .word MI_CpuCopy8 + + arm_func_start FUN_020A405C +FUN_020A405C: ; 0x020A405C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + ldr r1, _020A4094 ; =0x0210642D + mov r5, r0 + mov r2, #0x2c + bl FUN_020A410C + mov r0, r4 + mov r1, r5 + mov r2, #0x14 + bl FUN_020A4930 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A4094: .word 0x0210642D + + arm_func_start FUN_020A4098 +FUN_020A4098: ; 0x020A4098 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r0, r4 + add r1, r5, #0x14 + mov r2, #0x8 + bl FUN_020A4930 + ldr r0, [r5, #0x18] + ldr r1, _020A4108 ; =0x0210642C + mov r0, r0, lsr #0x3 + and r0, r0, #0x3f + cmp r0, #0x38 + rsblt r2, r0, #0x38 + rsbge r2, r0, #0x78 + mov r0, r5 + bl FUN_020A410C + mov r0, r5 + mov r1, r4 + mov r2, #0x8 + bl FUN_020A410C + mov r0, r4 + mov r1, r5 + mov r2, #0x14 + bl FUN_020A4930 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A4108: .word 0x0210642C + + arm_func_start FUN_020A410C +FUN_020A410C: + stmdb sp!, {r4-r8,lr} + mov r8, r0 + ldr r3, [r8, #0x18] + mov r6, r2 + add r0, r3, r6, lsl #0x3 + str r0, [r8, #0x18] + ldr r0, [r8, #0x18] + mov r2, r3, lsr #0x3 + cmp r0, r6, lsl #0x3 + ldrcc r0, [r8, #0x14] + and r4, r2, #0x3f + addcc r0, r0, #0x1 + strcc r0, [r8, #0x14] + ldr r0, [r8, #0x14] + rsb r5, r4, #0x40 + add r0, r0, r6, lsr #0x1d + mov r7, r1 + str r0, [r8, #0x14] + cmp r6, r5 + blo _020A41AC + add r1, r8, #0x1c + mov r0, r7 + mov r2, r5 + add r1, r1, r4 + bl MI_CpuCopy8 + mov r0, r8 + add r1, r8, #0x1c + mov r4, #0x0 + bl FUN_020A4224 + add r0, r5, #0x3f + cmp r0, r6 + bhs _020A41B0 +_020A418C: + mov r0, r8 + add r1, r7, r5 + bl FUN_020A4224 + add r5, r5, #0x40 + add r0, r5, #0x3f + cmp r0, r6 + blo _020A418C + b _020A41B0 +_020A41AC: + mov r5, #0x0 +_020A41B0: + add r1, r8, #0x1c + add r0, r7, r5 + add r1, r1, r4 + sub r2, r6, r5 + bl MI_CpuCopy8 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FUN_020A41CC +FUN_020A41CC: ; 0x020A41CC + stmdb sp!, {r4,lr} + mov r1, #0x0 + mov r2, #0x5c + mov r4, r0 + bl MI_CpuFill8 + ldr r0, _020A4210 ; =0x67452301 + ldr r1, _020A4214 ; =0xEFCDAB89 + str r0, [r4, #0x0] + ldr r0, _020A4218 ; =0x98BADCFE + str r1, [r4, #0x4] + ldr r1, _020A421C ; =0x10325476 + str r0, [r4, #0x8] + ldr r0, _020A4220 ; =0xC3D2E1F0 + str r1, [r4, #0xc] + str r0, [r4, #0x10] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A4210: .word 0x67452301 +_020A4214: .word 0xEFCDAB89 +_020A4218: .word 0x98BADCFE +_020A421C: .word 0x10325476 +_020A4220: .word 0xC3D2E1F0 + + arm_func_start FUN_020A4224 +FUN_020A4224: ; 0x020A4224 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x54 + str r0, [sp, #0x0] + ldr r3, [sp, #0x0] + add r0, sp, #0x10 + mov r2, #0x40 + ldr r6, [r3, #0x0] + ldr r7, [r3, #0x4] + ldr r8, [r3, #0x8] + ldr r5, [r3, #0xc] + ldr r4, [r3, #0x10] + bl FUN_020A48CC + mov r2, #0x0 + ldr r3, _020A48BC ; =0x5A827999 + mov r0, r2 + add r1, sp, #0x10 +_020A4264: + eor r9, r8, r5 + mov r10, r6, lsl #0x5 + and r9, r7, r9 + orr r10, r10, r6, lsr #0x1b + eor r9, r5, r9 + mov r11, r7, lsl #0x1e + orr r7, r11, r7, lsr #0x2 + eor r11, r7, r8 + add r9, r10, r9 + ldr r12, [r1, r2, lsl #0x2] + and r10, r6, r11 + add r9, r12, r9 + add r9, r9, r3 + add r4, r4, r9 + add r9, r2, #0x1 + ldr r9, [r1, r9, lsl #0x2] + eor r10, r8, r10 + mov r11, r4, lsl #0x5 + orr r11, r11, r4, lsr #0x1b + add r10, r11, r10 + add r10, r9, r10 + mov r9, r6, lsl #0x1e + add r10, r10, r3 + add r5, r5, r10 + orr r6, r9, r6, lsr #0x2 + add r9, r2, #0x2 + ldr r10, [r1, r9, lsl #0x2] + mov r9, r5, lsl #0x5 + orr r9, r9, r5, lsr #0x1b + eor r11, r6, r7 + and r11, r4, r11 + eor r11, r7, r11 + add r9, r9, r11 + add r9, r10, r9 + add r9, r9, r3 + add r8, r8, r9 + mov r9, r4, lsl #0x1e + orr r4, r9, r4, lsr #0x2 + add r9, r2, #0x3 + ldr r10, [r1, r9, lsl #0x2] + mov r9, r8, lsl #0x5 + orr r9, r9, r8, lsr #0x1b + eor r11, r4, r6 + and r11, r5, r11 + eor r11, r6, r11 + add r9, r9, r11 + add r9, r10, r9 + add r9, r9, r3 + add r7, r7, r9 + mov r9, r5, lsl #0x1e + orr r5, r9, r5, lsr #0x2 + add r9, r2, #0x4 + ldr r10, [r1, r9, lsl #0x2] + mov r9, r7, lsl #0x5 + orr r9, r9, r7, lsr #0x1b + eor r11, r5, r4 + and r11, r8, r11 + eor r11, r4, r11 + add r9, r9, r11 + add r9, r10, r9 + add r9, r9, r3 + add r6, r6, r9 + mov r9, r8, lsl #0x1e + orr r8, r9, r8, lsr #0x2 + add r2, r2, #0x5 + add r0, r0, #0x1 + cmp r0, #0x3 + blt _020A4264 + eor r0, r8, r5 + mov r2, r6, lsl #0x5 + and r0, r7, r0 + orr r3, r2, r6, lsr #0x1b + eor r0, r5, r0 + add r3, r3, r0 + ldr r9, [sp, #0x4c] + ldr r0, _020A48BC ; =0x5A827999 + add r3, r9, r3 + add r3, r3, r0 + mov r2, r7, lsl #0x1e + orr r9, r2, r7, lsr #0x2 + mov r0, #0x0 + add r4, r4, r3 + bl FUN_020A4988 + eor r1, r9, r8 + mov r3, r4, lsl #0x5 + and r1, r6, r1 + mov r2, r6, lsl #0x1e + orr r3, r3, r4, lsr #0x1b + eor r1, r8, r1 + add r1, r3, r1 + add r3, r1, r0 + ldr r0, _020A48BC ; =0x5A827999 + add r1, sp, #0x10 + add r3, r3, r0 + orr r10, r2, r6, lsr #0x2 + mov r0, #0x1 + add r5, r5, r3 + bl FUN_020A4988 + eor r1, r10, r9 + mov r2, r5, lsl #0x5 + and r1, r4, r1 + orr r2, r2, r5, lsr #0x1b + eor r1, r9, r1 + add r1, r2, r1 + add r2, r1, r0 + ldr r0, _020A48BC ; =0x5A827999 + mov r1, r4, lsl #0x1e + add r0, r2, r0 + orr r6, r1, r4, lsr #0x2 + add r8, r8, r0 + add r1, sp, #0x10 + mov r0, #0x2 + bl FUN_020A4988 + mov r1, r8, lsl #0x5 + orr r2, r1, r8, lsr #0x1b + eor r1, r6, r10 + and r1, r5, r1 + eor r1, r10, r1 + add r1, r2, r1 + add r2, r1, r0 + ldr r0, _020A48BC ; =0x5A827999 + mov r1, r5, lsl #0x1e + add r0, r2, r0 + orr r7, r1, r5, lsr #0x2 + add r9, r9, r0 + mov r0, #0x3 + add r1, sp, #0x10 + bl FUN_020A4988 + mov r1, r9, lsl #0x5 + orr r2, r1, r9, lsr #0x1b + eor r1, r7, r6 + and r1, r8, r1 + eor r1, r6, r1 + add r1, r2, r1 + add r2, r1, r0 + ldr r0, _020A48BC ; =0x5A827999 + mov r1, r8, lsl #0x1e + add r0, r2, r0 + add r10, r10, r0 + mov r0, #0x0 + ldr r4, _020A48C0 ; =0x6ED9EBA1 + orr r8, r1, r8, lsr #0x2 + mov r5, #0x4 + str r0, [sp, #0xc] + add r11, sp, #0x10 +_020A44A8: + mov r0, r5 + mov r1, r11 + bl FUN_020A4988 + mov r2, r10, lsl #0x5 + eor r1, r9, r8 + orr r2, r2, r10, lsr #0x1b + eor r1, r7, r1 + add r1, r2, r1 + add r0, r1, r0 + add r1, r0, r4 + mov r0, r9, lsl #0x1e + add r6, r6, r1 + orr r9, r0, r9, lsr #0x2 + add r0, r5, #0x1 + mov r1, r11 + bl FUN_020A4988 + mov r1, r6, lsl #0x5 + orr r2, r1, r6, lsr #0x1b + eor r1, r10, r9 + eor r1, r8, r1 + add r1, r2, r1 + add r0, r1, r0 + add r0, r0, r4 + add r7, r7, r0 + mov r0, r10, lsl #0x1e + orr r10, r0, r10, lsr #0x2 + add r0, r5, #0x2 + and r5, r0, #0xf + mov r0, r5 + mov r1, r11 + bl FUN_020A4988 + mov r1, r7, lsl #0x5 + orr r2, r1, r7, lsr #0x1b + eor r1, r6, r10 + eor r1, r9, r1 + add r1, r2, r1 + add r0, r1, r0 + add r0, r0, r4 + add r8, r8, r0 + mov r0, r6, lsl #0x1e + orr r6, r0, r6, lsr #0x2 + add r0, r5, #0x1 + mov r1, r11 + bl FUN_020A4988 + mov r1, r8, lsl #0x5 + orr r2, r1, r8, lsr #0x1b + eor r1, r7, r6 + eor r1, r10, r1 + add r1, r2, r1 + add r0, r1, r0 + add r0, r0, r4 + add r9, r9, r0 + mov r0, r7, lsl #0x1e + orr r7, r0, r7, lsr #0x2 + add r0, r5, #0x2 + mov r1, r11 + bl FUN_020A4988 + mov r1, r9, lsl #0x5 + orr r2, r1, r9, lsr #0x1b + eor r1, r8, r7 + eor r1, r6, r1 + add r1, r2, r1 + add r0, r1, r0 + add r0, r0, r4 + add r10, r10, r0 + mov r0, r8, lsl #0x1e + orr r8, r0, r8, lsr #0x2 + ldr r0, [sp, #0xc] + add r5, r5, #0x3 + add r0, r0, #0x1 + str r0, [sp, #0xc] + cmp r0, #0x4 + blt _020A44A8 + mov r0, #0x0 + ldr r4, _020A48C4 ; =0x8F1BBCDC + str r0, [sp, #0x8] + add r11, sp, #0x10 +_020A45DC: + mov r0, r5 + mov r1, r11 + bl FUN_020A4988 + orr r2, r8, r7 + mov r1, r10, lsl #0x5 + and r3, r9, r2 + and r2, r8, r7 + orr r1, r1, r10, lsr #0x1b + orr r2, r3, r2 + add r1, r1, r2 + add r1, r1, r0 + mov r0, r9, lsl #0x1e + add r1, r1, r4 + add r6, r6, r1 + orr r9, r0, r9, lsr #0x2 + add r0, r5, #0x1 + mov r1, r11 + bl FUN_020A4988 + orr r2, r9, r8 + mov r1, r6, lsl #0x5 + and r3, r10, r2 + and r2, r9, r8 + orr r1, r1, r6, lsr #0x1b + orr r2, r3, r2 + add r1, r1, r2 + add r0, r1, r0 + add r0, r0, r4 + add r7, r7, r0 + mov r0, r10, lsl #0x1e + orr r10, r0, r10, lsr #0x2 + add r0, r5, #0x2 + mov r1, r11 + bl FUN_020A4988 + orr r2, r10, r9 + mov r1, r7, lsl #0x5 + and r3, r6, r2 + and r2, r10, r9 + orr r1, r1, r7, lsr #0x1b + orr r2, r3, r2 + add r1, r1, r2 + add r0, r1, r0 + add r0, r0, r4 + add r8, r8, r0 + mov r0, r6, lsl #0x1e + orr r6, r0, r6, lsr #0x2 + add r0, r5, #0x3 + and r5, r0, #0xf + mov r0, r5 + mov r1, r11 + bl FUN_020A4988 + orr r2, r6, r10 + mov r1, r8, lsl #0x5 + and r3, r7, r2 + and r2, r6, r10 + orr r1, r1, r8, lsr #0x1b + orr r2, r3, r2 + add r1, r1, r2 + add r0, r1, r0 + add r0, r0, r4 + add r9, r9, r0 + mov r0, r7, lsl #0x1e + orr r7, r0, r7, lsr #0x2 + add r0, r5, #0x1 + mov r1, r11 + bl FUN_020A4988 + orr r2, r7, r6 + mov r1, r9, lsl #0x5 + and r3, r8, r2 + and r2, r7, r6 + orr r1, r1, r9, lsr #0x1b + orr r2, r3, r2 + add r1, r1, r2 + add r0, r1, r0 + add r0, r0, r4 + add r10, r10, r0 + mov r0, r8, lsl #0x1e + orr r8, r0, r8, lsr #0x2 + ldr r0, [sp, #0x8] + add r5, r5, #0x2 + add r0, r0, #0x1 + str r0, [sp, #0x8] + cmp r0, #0x4 + blt _020A45DC + mov r0, #0x0 + ldr r4, _020A48C8 ; =0xCA62C1D6 + str r0, [sp, #0x4] + add r11, sp, #0x10 +_020A4738: + mov r0, r5 + mov r1, r11 + bl FUN_020A4988 + mov r2, r10, lsl #0x5 + eor r1, r9, r8 + orr r2, r2, r10, lsr #0x1b + eor r1, r7, r1 + add r1, r2, r1 + add r0, r1, r0 + add r1, r0, r4 + mov r0, r9, lsl #0x1e + add r6, r6, r1 + orr r9, r0, r9, lsr #0x2 + add r0, r5, #0x1 + mov r1, r11 + bl FUN_020A4988 + mov r1, r6, lsl #0x5 + orr r2, r1, r6, lsr #0x1b + eor r1, r10, r9 + eor r1, r8, r1 + add r1, r2, r1 + add r0, r1, r0 + add r0, r0, r4 + add r7, r7, r0 + mov r0, r10, lsl #0x1e + orr r10, r0, r10, lsr #0x2 + add r0, r5, #0x2 + mov r1, r11 + bl FUN_020A4988 + mov r1, r7, lsl #0x5 + orr r2, r1, r7, lsr #0x1b + eor r1, r6, r10 + eor r1, r9, r1 + add r1, r2, r1 + add r0, r1, r0 + add r0, r0, r4 + add r8, r8, r0 + mov r0, r6, lsl #0x1e + orr r6, r0, r6, lsr #0x2 + add r0, r5, #0x3 + mov r1, r11 + bl FUN_020A4988 + mov r1, r8, lsl #0x5 + orr r2, r1, r8, lsr #0x1b + eor r1, r7, r6 + eor r1, r10, r1 + add r1, r2, r1 + add r0, r1, r0 + add r0, r0, r4 + add r9, r9, r0 + mov r0, r7, lsl #0x1e + orr r7, r0, r7, lsr #0x2 + add r0, r5, #0x4 + and r5, r0, #0xf + mov r0, r5 + mov r1, r11 + bl FUN_020A4988 + mov r1, r9, lsl #0x5 + orr r2, r1, r9, lsr #0x1b + eor r1, r8, r7 + eor r1, r6, r1 + add r1, r2, r1 + add r0, r1, r0 + add r0, r0, r4 + add r10, r10, r0 + mov r0, r8, lsl #0x1e + orr r8, r0, r8, lsr #0x2 + ldr r0, [sp, #0x4] + add r5, r5, #0x1 + add r0, r0, #0x1 + str r0, [sp, #0x4] + cmp r0, #0x4 + blt _020A4738 + ldr r0, [sp, #0x0] + ldr r0, [r0, #0x0] + add r1, r0, r10 + ldr r0, [sp, #0x0] + str r1, [r0, #0x0] + ldr r0, [r0, #0x4] + add r1, r0, r9 + ldr r0, [sp, #0x0] + str r1, [r0, #0x4] + ldr r0, [r0, #0x8] + add r1, r0, r8 + ldr r0, [sp, #0x0] + str r1, [r0, #0x8] + ldr r0, [r0, #0xc] + add r1, r0, r7 + ldr r0, [sp, #0x0] + str r1, [r0, #0xc] + ldr r0, [r0, #0x10] + add r1, r0, r6 + ldr r0, [sp, #0x0] + str r1, [r0, #0x10] + add sp, sp, #0x54 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020A48BC: .word 0x5A827999 +_020A48C0: .word 0x6ED9EBA1 +_020A48C4: .word 0x8F1BBCDC +_020A48C8: .word 0xCA62C1D6 + + arm_func_start FUN_020A48CC +FUN_020A48CC: ; 0x020A48CC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + addls sp, sp, #0x4 + mov r3, #0x0 + ldmlsia sp!, {r4-r5,lr} + bxls lr +_020A48E8: + add r12, r3, #0x1 + ldrb lr, [r1, r3] + add r4, r3, #0x2 + add r5, r3, #0x3 + ldrb r12, [r1, r12] + mov lr, lr, lsl #0x18 + add r3, r3, #0x4 + ldrb r4, [r1, r4] + orr r12, lr, r12, lsl #0x10 + ldrb lr, [r1, r5] + orr r4, r12, r4, lsl #0x8 + cmp r3, r2 + orr r4, lr, r4 + str r4, [r0], #0x4 + blo _020A48E8 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_020A4930 +FUN_020A4930: ; 0x020A4930 + stmdb sp!, {lr} + sub sp, sp, #0x4 + movs r12, r2, lsr #0x2 + mov lr, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr +_020A494C: + ldr r3, [r1], #0x4 + add lr, lr, #0x1 + mov r2, r3, lsr #0x18 + strb r2, [r0, #0x0] + mov r2, r3, lsr #0x10 + strb r2, [r0, #0x1] + mov r2, r3, lsr #0x8 + strb r2, [r0, #0x2] + strb r3, [r0, #0x3] + cmp lr, r12 + add r0, r0, #0x4 + blo _020A494C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_020A4988 +FUN_020A4988: ; 0x020A4988 + add r2, r0, #0xd + add r12, r0, #0x2 + and r3, r2, #0xf + eor r2, r0, #0x8 + and r12, r12, #0xf + ldr r3, [r1, r3, lsl #0x2] + ldr r2, [r1, r2, lsl #0x2] + ldr r12, [r1, r12, lsl #0x2] + eor r2, r3, r2 + ldr r3, [r1, r0, lsl #0x2] + eor r2, r12, r2 + eor r3, r3, r2 + mov r2, r3, lsl #0x1 + orr r2, r2, r3, lsr #0x1f + str r2, [r1, r0, lsl #0x2] + ldr r0, [r1, r0, lsl #0x2] + bx lr + + arm_func_start FUN_020A49CC +FUN_020A49CC: ; 0x020A49CC + stmdb sp!, {r4-r6,lr} + cmp r2, #0x0 + add r3, r0, #0x2 + ldrb lr, [r0, #0x0] + ldrb r12, [r0, #0x1] + mov r4, #0x0 + ble _020A4A2C +_020A49E8: + add r5, lr, #0x1 + and lr, r5, #0xff + ldrb r6, [r3, lr] + add r5, r12, r6 + and r12, r5, #0xff + ldrb r5, [r3, r12] + strb r5, [r3, lr] + add r5, r6, r5 + strb r6, [r3, r12] + and r5, r5, #0xff + ldrb r6, [r1, r4] + ldrb r5, [r3, r5] + eor r5, r6, r5 + strb r5, [r1, r4] + add r4, r4, #0x1 + cmp r4, r2 + blt _020A49E8 +_020A4A2C: + strb lr, [r0, #0x0] + strb r12, [r0, #0x1] + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_020A4A3C +FUN_020A4A3C: ; 0x020A4A3C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r3, #0x0 + strb r3, [r0, #0x0] + strb r3, [r0, #0x1] + add r7, r0, #0x2 +_020A4A54: + strb r3, [r7, r3] + add r3, r3, #0x1 + cmp r3, #0x100 + blt _020A4A54 + mov r5, #0x0 + mov r6, r5 + mov r4, r5 + mov r0, r5 +_020A4A74: + ldrb lr, [r7, r4] + ldrb r12, [r1, r5] + add r3, r5, #0x1 + and r5, r3, #0xff + add r3, lr, r12 + add r3, r6, r3 + and r6, r3, #0xff + ldrb r3, [r7, r6] + cmp r5, r2 + movge r5, r0 + strb r3, [r7, r4] + add r4, r4, #0x1 + strb lr, [r7, r6] + cmp r4, #0x100 + blt _020A4A74 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_020A4ABC +FUN_020A4ABC: ; 0x020A4ABC + ldrh r1, [r0, #0x0] + mov r0, #0x0 + bx lr + + arm_func_start FUN_020A4AC8 +FUN_020A4AC8: ; 0x020A4AC8 + ldrh r1, [r0, #0x0] + ldrh r0, [r0, #-0x2] + mov r0, r0, lsl #0x10 + bx lr + + arm_func_start FUN_020A4AD8 +FUN_020A4AD8: ; 0x020A4AD8 + ldrh r1, [r0, #0x0] + ldrh r2, [r0, #-0x2] + ldrh r3, [r0, #-0x4] + orr r0, r3, r2, lsl #0x10 + bx lr + + arm_func_start FUN_020A4AEC +FUN_020A4AEC: ; 0x020A4AEC + ldrh r2, [r0, #0x0] + ldrh r3, [r0, #-0x2] + orr r1, r3, r2, lsl #0x10 + ldrh r2, [r0, #-0x4] + ldrh r3, [r0, #-0x6] + orr r0, r3, r2, lsl #0x10 + bx lr + + arm_func_start FUN_020A4B08 +FUN_020A4B08: ; 0x020A4B08 + sub r3, r2, #0x1 + cmp r2, #0x1 + add r0, r0, r3 + ble _020A4B40 +_020A4B18: + ldrh r3, [r1, #0x0] + sub r2, r2, #0x2 + sub r12, r0, #0x1 + strb r3, [r0, #0x0] + ldrh r3, [r1], #0x2 + cmp r2, #0x1 + sub r0, r0, #0x2 + mov r3, r3, asr #0x8 + strb r3, [r12, #0x0] + bgt _020A4B18 +_020A4B40: + cmp r2, #0x0 + ldrgth r1, [r1, #0x0] + strgtb r1, [r0, #0x0] + bx lr + + arm_func_start FUN_020A4B50 +FUN_020A4B50: ; 0x020A4B50 + stmdb sp!, {r4-r6,lr} + mov r6, r1 + mov r5, r2 + mov r2, r3, lsl #0x1 + mov r1, #0x0 + mov r4, r0 + bl MI_CpuFill8 + sub r0, r5, #0x1 + cmp r5, #0x1 + add r6, r6, r0 + ble _020A4B9C +_020A4B7C: + ldrb r1, [r6, #0x0] + ldrb r0, [r6, #-0x1] + sub r5, r5, #0x2 + cmp r5, #0x1 + add r0, r1, r0, lsl #0x8 + strh r0, [r4], #0x2 + sub r6, r6, #0x2 + bgt _020A4B7C +_020A4B9C: + cmp r5, #0x0 + ldrgtb r0, [r6, #0x0] + strgth r0, [r4, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start FUN_020A4BB0 +FUN_020A4BB0: ; 0x020A4BB0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x34 + mov r10, r3 + mov r3, #0x16 + mul r4, r10, r3 + ldr r3, _020A4DE0 ; =0x021C8EC8 + mov r11, r0 + ldr r3, [r3, #0x0] + mov r0, r4 + ldr r9, [sp, #0x58] + str r1, [sp, #0x14] + str r2, [sp, #0x18] + blx r3 + str r0, [sp, #0x1c] + cmp r0, #0x0 + addeq sp, sp, #0x34 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + mov r2, r4 + mov r1, #0x0 + bl MI_CpuFill8 + ldr r0, [sp, #0x1c] + mov r1, r10 + add r6, r0, r10, lsl #0x1 + add r0, r6, r10, lsl #0x1 + add r5, r0, r10, lsl #0x1 + add r4, r5, r10, lsl #0x1 + str r0, [sp, #0x20] + add r0, r4, r10, lsl #0x1 + str r0, [sp, #0x24] + add r7, r0, r10, lsl #0x1 + mov r0, r9 + bl thunk_FUN_020a5a28 + mov r8, r0 + ldr r0, [sp, #0x1c] + mov r2, #0x1 + mov r1, r8, lsl #0x1 + strh r2, [r0, r1] + ldr r0, [sp, #0x20] + ldr r1, [sp, #0x1c] + str r0, [sp, #0x0] + mov r0, r6 + mov r2, r9 + mov r3, r10 + bl FUN_020A4F2C + ldr r1, [sp, #0x1c] + mov r0, r5 + mov r2, r6 + mov r3, r10 + bl FUN_020A5608 + mov r0, r6 + mov r1, r5 + mov r2, #0x1 + mov r3, r10 + bl FUN_020A5748 + str r10, [sp, #0x0] + mov r0, r6 + mov r1, r6 + mov r2, r9 + mov r3, #0x0 + str r7, [sp, #0x4] + bl FUN_020A5240 + ldr r1, [sp, #0x14] + ldr r0, [sp, #0x20] + ldr r2, [sp, #0x1c] + mov r3, r10 + bl FUN_020A5608 + ldr r1, [sp, #0x20] + str r10, [sp, #0x0] + mov r0, #0x0 + mov r2, r9 + mov r3, r1 + str r7, [sp, #0x4] + bl FUN_020A5240 + str r10, [sp, #0x0] + ldr r1, [sp, #0x1c] + mov r0, #0x0 + mov r2, r9 + mov r3, r11 + str r7, [sp, #0x4] + bl FUN_020A5240 + movs r0, r8, lsl #0x4 + mov r7, #0x0 + str r0, [sp, #0x28] + beq _020A4D9C + mov r0, #0x1 + str r0, [sp, #0x2c] + mov r0, #0x8000 + str r0, [sp, #0x30] +_020A4D14: + str r8, [sp, #0x0] + str r9, [sp, #0x4] + str r6, [sp, #0x8] + str r5, [sp, #0xc] + ldr r1, [sp, #0x24] + ldr r2, [sp, #0x2c] + mov r0, r11 + mov r3, r10 + str r4, [sp, #0x10] + bl FUN_020A4DE8 + ldr r0, [sp, #0x30] + and r1, r7, #0xf + mov r0, r0, lsr r1 + sub r1, r8, r7, asr #0x4 + sub r1, r1, #0x1 + mov r2, r1, lsl #0x1 + ldr r1, [sp, #0x18] + ldrh r1, [r1, r2] + ands r0, r0, r1 + beq _020A4D8C + str r8, [sp, #0x0] + str r9, [sp, #0x4] + str r6, [sp, #0x8] + str r5, [sp, #0xc] + ldr r1, [sp, #0x24] + ldr r2, [sp, #0x20] + mov r0, r11 + mov r3, r10 + str r4, [sp, #0x10] + bl FUN_020A4DE8 +_020A4D8C: + ldr r0, [sp, #0x28] + add r7, r7, #0x1 + cmp r7, r0 + blo _020A4D14 +_020A4D9C: + str r8, [sp, #0x0] + str r9, [sp, #0x4] + str r6, [sp, #0x8] + str r5, [sp, #0xc] + ldr r1, [sp, #0x24] + mov r0, r11 + mov r3, r10 + mov r2, #0x0 + str r4, [sp, #0x10] + bl FUN_020A4DE8 + ldr r1, _020A4DE4 ; =0x021C8EF4 + ldr r0, [sp, #0x1c] + ldr r1, [r1, #0x0] + blx r1 + add sp, sp, #0x34 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020A4DE0: .word 0x021C8EC8 +_020A4DE4: .word 0x021C8EF4 + + arm_func_start FUN_020A4DE8 +FUN_020A4DE8: ; 0x020A4DE8 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r5, r3 + mov r7, r5, lsl #0x1 + mov r8, r2 + mov r2, r7 + mov r6, r0 + mov r9, r1 + ldr r4, [sp, #0x20] + bl MI_CpuCopy8 + cmp r8, #0x1 + bne _020A4E2C + mov r0, r6 + mov r1, r9 + mov r2, r5 + bl FUN_020A5438 + b _020A4E48 +_020A4E2C: + cmp r8, #0x0 + beq _020A4E48 + mov r0, r6 + mov r1, r9 + mov r2, r8 + mov r3, r5 + bl FUN_020A5608 +_020A4E48: + ldr r0, [sp, #0x2c] + ldr r2, [sp, #0x28] + mov r1, r6 + mov r3, r4 + bl FUN_020A5608 + sub r1, r5, r4 + ldr r0, [sp, #0x2c] + mov r8, r1, lsl #0x1 + mov r2, r8 + add r0, r0, r4, lsl #0x1 + mov r1, #0x0 + bl MI_CpuFill8 + ldr r0, [sp, #0x30] + ldr r1, [sp, #0x2c] + ldr r2, [sp, #0x24] + mov r3, r5 + bl FUN_020A5608 + mov r0, r6 + mov r1, r6 + ldr r2, [sp, #0x30] + mov r3, r5 + bl FUN_020A5930 + mov r2, r8 + mov r0, r6 + add r1, r6, r4, lsl #0x1 + bl memmove + add r0, r6, r5, lsl #0x1 + sub r0, r0, r4, lsl #0x1 + mov r2, r4, lsl #0x1 + mov r1, #0x0 + bl MI_CpuFill8 + mov r0, r6 + ldr r1, [sp, #0x24] + mov r2, r5 + bl FUN_020A570C +_020A4ED4: ; 0x020A4ED4 + cmp r0, #0x0 + beq _020A4EF0 + cmp r0, #0x1 + beq _020A4F0C + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr +_020A4EF0: + mov r0, r6 + mov r2, r7 + mov r1, #0x0 + bl MI_CpuFill8 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr +_020A4F0C: + ldr r2, [sp, #0x24] + mov r0, r6 + mov r1, r6 + mov r3, r5 + bl FUN_020A57BC + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start FUN_020A4F2C +FUN_020A4F2C: ; 0x020A4F2C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x14 + ldr r9, [sp, #0x38] + mov r10, r3 + add r11, r9, r10, lsl #0x1 + add r8, r11, r10, lsl #0x1 + add r7, r8, r10, lsl #0x1 + add r6, r7, r10, lsl #0x1 + add r5, r6, r10, lsl #0x1 + str r0, [sp, #0x8] + mov r0, r1 + add r1, r5, r10, lsl #0x1 + str r1, [sp, #0x10] + mov r4, r10, lsl #0x1 + str r2, [sp, #0xc] + mov r1, r9 + mov r2, r4 + bl MI_CpuCopy8 + ldr r0, [sp, #0xc] + mov r1, r8 + mov r2, r4 + bl MI_CpuCopy8 + mov r0, #0x1 + strh r0, [r8, r4] + mov r0, r9 + mov r1, r10 + bl FUN_020A59DC +_020A4F98: ; 0x020A4F98 + cmp r0, #0x0 + ble _020A503C +_020A4FA0: + ldr r3, [sp, #0x10] + str r10, [sp, #0x0] + str r3, [sp, #0x4] + mov r0, r11 + mov r1, r8 + mov r2, r9 + mov r3, r5 + bl FUN_020A5240 + mov r0, r9 + mov r1, r8 + mov r2, r4 + bl MI_CpuCopy8 + mov r0, r5 + mov r1, r9 + mov r2, r4 + bl MI_CpuCopy8 + mov r0, r5 + mov r1, r11 + mov r2, r7 + mov r3, r10 + bl FUN_020A5608 + mov r0, r5 + mov r1, r6 + mov r2, r5 + mov r3, r10 + bl FUN_020A57BC + mov r0, r7 + mov r1, r6 + mov r2, r4 + bl MI_CpuCopy8 + mov r0, r5 + mov r1, r7 + mov r2, r4 + bl MI_CpuCopy8 + mov r0, r9 + mov r1, r10 + bl FUN_020A59DC +_020A5034: ; 0x020A5034 + cmp r0, #0x0 + bgt _020A4FA0 +_020A503C: + ldr r2, [sp, #0xc] + mov r0, r6 + mov r1, r6 + mov r3, r10 + bl FUN_020A5930 + ldr r2, [sp, #0xc] + ldr r3, [sp, #0x8] + ldr r4, [sp, #0x10] + str r10, [sp, #0x0] + mov r1, r6 + mov r0, #0x0 + str r4, [sp, #0x4] + bl FUN_020A5240 + add sp, sp, #0x14 + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FUN_020A507C +FUN_020A507C: ; 0x020A507C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x1c + ldr r4, _020A5238 ; =0x021C8EC8 + mov r8, r3 + ldr r3, [r4, #0x0] + mov r10, r0 + mov r0, r8, lsl #0x3 + ldr r7, [sp, #0x40] + str r1, [sp, #0x8] + mov r9, r2 + blx r3 + movs r6, r0 + addeq sp, sp, #0x1c + ldmeqia sp!, {r4-r11,lr} + bxeq lr + sub r1, r8, #0x1 + add r0, r10, #0x2 + mov r2, r1, lsl #0x1 + mov r1, #0x0 + add r11, r6, r8, lsl #0x1 + bl MI_CpuFill8 + mov r2, #0x1 + mov r0, r9 + mov r1, r8 + strh r2, [r10, #0x0] + bl thunk_FUN_020a5a28 +_020A50E4: ; 0x020A50E4 + sub r0, r8, r0 + mov r5, r0, lsl #0x4 + mov r4, r8, lsl #0x4 + cmp r5, r4 + bhs _020A5140 + mov r0, #0x8000 +_020A50FC: + sub r1, r8, r5, asr #0x4 + sub r1, r1, #0x1 + mov r1, r1, lsl #0x1 + and r2, r5, #0xf + ldrh r1, [r9, r1] + mov r2, r0, lsr r2 + ands r1, r2, r1 + beq _020A5134 + ldr r0, [sp, #0x8] + mov r1, r10 + mov r2, r8, lsl #0x1 + bl MI_CpuCopy8 + add r5, r5, #0x1 + b _020A5140 +_020A5134: + add r5, r5, #0x1 + cmp r5, r4 + blo _020A50FC +_020A5140: + cmp r5, r4 + bhs _020A521C + mov r0, r8, lsl #0x1 + str r0, [sp, #0xc] + mov r0, #0x0 + str r0, [sp, #0x10] + mov r0, #0x8000 + str r0, [sp, #0x14] +_020A5160: + mov r0, r6 + mov r1, r10 + mov r2, r8 + bl FUN_020A5438 + ldr r2, [sp, #0xc] + mov r0, r6 + mov r1, r10 + bl MI_CpuCopy8 +_020A5180: ; 0x020A5180 + cmp r7, #0x0 + beq _020A51A4 + ldr r0, [sp, #0x10] + str r8, [sp, #0x0] + mov r1, r10 + mov r2, r7 + mov r3, r10 + str r11, [sp, #0x4] + bl FUN_020A5240 +_020A51A4: + sub r0, r8, r5, asr #0x4 + sub r0, r0, #0x1 + mov r1, r0, lsl #0x1 + ldr r0, [sp, #0x14] + and r2, r5, #0xf + mov r2, r0, lsr r2 + ldrh r0, [r9, r1] + ands r0, r2, r0 + beq _020A5210 + ldr r2, [sp, #0x8] + mov r0, r6 + mov r1, r10 + mov r3, r8 + bl FUN_020A5608 + ldr r2, [sp, #0xc] + mov r0, r6 + mov r1, r10 + bl MI_CpuCopy8 +_020A51EC: ; 0x020A51EC + cmp r7, #0x0 + beq _020A5210 + ldr r0, [sp, #0x10] + str r8, [sp, #0x0] + mov r1, r10 + mov r2, r7 + mov r3, r10 + str r11, [sp, #0x4] + bl FUN_020A5240 +_020A5210: + add r5, r5, #0x1 + cmp r5, r4 + blo _020A5160 +_020A521C: + ldr r1, _020A523C ; =0x021C8EF4 + mov r0, r6 + ldr r1, [r1, #0x0] + blx r1 + add sp, sp, #0x1c + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020A5238: .word 0x021C8EC8 +_020A523C: .word 0x021C8EF4 + + arm_func_start FUN_020A5240 +FUN_020A5240: ; 0x020A5240 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x24 + ldr r9, [sp, #0x48] + ldr r6, [sp, #0x4c] + str r1, [sp, #0x4] + add r5, r6, r9, lsl #0x1 + str r0, [sp, #0x0] + mov r10, r2 + mov r0, r5 + mov r2, r9, lsl #0x2 + mov r1, #0x0 + str r3, [sp, #0x8] + add r4, r5, r9, lsl #0x1 + bl MI_CpuFill8 + ldr r0, [sp, #0x4] + mov r1, r9 + bl thunk_FUN_020a5a28 + mov r11, r0 + mov r0, r10 + mov r1, r9 + bl thunk_FUN_020a5a28 + mov r7, r0 + cmp r11, #0x0 + ble _020A53E8 + cmp r7, #0x0 + ble _020A53E8 + sub r0, r9, r11 + add r0, r7, r0 + sub r8, r0, #0x1 + cmp r8, r9 + blt _020A52D0 + ldr r0, [sp, #0x4] + mov r1, r4 + mov r2, r9, lsl #0x1 + bl MI_CpuCopy8 + b _020A53E8 +_020A52D0: + ldr r0, [sp, #0x4] + add r1, r5, r8, lsl #0x1 + mov r2, r11, lsl #0x1 + bl MI_CpuCopy8 + cmp r7, #0x2 + ble _020A5304 + add r0, r10, r7, lsl #0x1 + sub r0, r0, #0x2 + mov r7, r7, lsl #0x1 + bl FUN_020A4AD8 + str r0, [sp, #0x14] + str r1, [sp, #0x10] + b _020A5340 +_020A5304: + cmp r7, #0x1 + ble _020A5328 + add r0, r10, r7, lsl #0x1 + sub r0, r0, #0x2 + mov r7, r7, lsl #0x1 + bl FUN_020A4AC8 + str r0, [sp, #0x14] + str r1, [sp, #0x10] + b _020A5340 +_020A5328: + add r0, r10, r7, lsl #0x1 + sub r0, r0, #0x2 + mov r7, r7, lsl #0x1 + bl FUN_020A4ABC + str r0, [sp, #0x14] + str r1, [sp, #0x10] +_020A5340: + cmp r8, r9 + bge _020A53E8 + mov r0, r9, lsl #0x1 + sub r0, r0, #0x1 + mov r11, r0, lsl #0x1 + add r0, r4, r7 + str r0, [sp, #0x1c] +_020A535C: + mov r1, r5 + add r0, r5, #0x2 + mov r2, r11 + bl memmove + ldr r0, [sp, #0x1c] + bl FUN_020A4AEC + ldr r2, [sp, #0x14] + ldr r3, [sp, #0x10] + bl _ll_udiv + mov r7, r0 + ldr r0, _020A5434 ; =0x0000FFFF + cmp r7, r0 + movhi r7, r0 +_020A5390: + mov r2, r7, lsl #0x10 + mov r0, r6 + mov r1, r10 + mov r2, r2, lsr #0x10 + mov r3, r9 + bl FUN_020A5584 + mov r0, r4 + mov r1, r6 + mov r2, r9 + bl FUN_020A570C +_020A53B8: ; 0x020A53B8 + cmp r0, #0x0 + sublt r7, r7, #0x1 + blt _020A5390 + mov r0, r4 + mov r1, r4 + mov r2, r6 + mov r3, r9 + bl FUN_020A57BC + strh r7, [r5, #0x0] + add r8, r8, #0x1 + cmp r8, r9 + blt _020A535C +_020A53E8: + ldr r0, [sp, #0x0] + cmp r0, #0x0 + beq _020A5404 + ldr r1, [sp, #0x0] + mov r0, r5 + mov r2, r9, lsl #0x1 + bl MI_CpuCopy8 +_020A5404: + ldr r0, [sp, #0x8] + cmp r0, #0x0 + addeq sp, sp, #0x24 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldr r1, [sp, #0x8] + mov r0, r4 + mov r2, r9, lsl #0x1 + bl MI_CpuCopy8 + add sp, sp, #0x24 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020A5434: .word 0x0000FFFF + + arm_func_start FUN_020A5438 +FUN_020A5438: ; 0x020A5438 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r9, r1 + mov r8, r2 + mov r10, r0 + mov r0, r9 + mov r1, r8 + bl thunk_FUN_020a5a28 + mov r11, r0 + mov r0, r11, lsl #0x1 + cmp r0, r8 + bge _020A547C + sub r1, r8, r0 + add r0, r10, r0, lsl #0x1 + mov r2, r1, lsl #0x1 + mov r1, #0x0 + bl MI_CpuFill8 +_020A547C: + cmp r11, #0x0 + mov r1, #0x0 + ble _020A54D4 + mov r0, r1 + sub r4, r8, #0x1 +_020A5490: + cmp r0, r8 + bge _020A54D4 + mov r2, r1, lsl #0x1 + ldrh r5, [r9, r2] + mov r2, r0, lsl #0x1 + cmp r0, r4 + mul r3, r5, r5 + strh r3, [r10, r2] + beq _020A54D4 + add r2, r0, #0x1 + add r1, r1, #0x1 + mov r3, r3, lsr #0x10 + mov r2, r2, lsl #0x1 + strh r3, [r10, r2] + cmp r1, r11 + add r0, r0, #0x2 + blt _020A5490 +_020A54D4: + cmp r11, #0x0 + mov r6, #0x0 + addle sp, sp, #0x4 + ldmleia sp!, {r4-r11,lr} + bxle lr +_020A54E8: + add r7, r6, #0x1 + b _020A5554 +_020A54F0: + mov r1, r7, lsl #0x1 + mov r0, r6, lsl #0x1 + ldrh r1, [r9, r1] + ldrh r0, [r9, r0] + mul r4, r1, r0 + ldr r0, _020A5580 ; =0x7FFF8000 + cmp r4, r0 + bhi _020A5528 + mov r0, r10 + mov r2, r5 + mov r3, r8 + mov r1, r4, lsl #0x1 + bl FUN_020A56C4 + b _020A5550 +_020A5528: + mov r0, r10 + mov r1, r4 + mov r2, r5 + mov r3, r8 + bl FUN_020A56C4 + mov r0, r10 + mov r1, r4 + mov r2, r5 + mov r3, r8 + bl FUN_020A56C4 +_020A5550: + add r7, r7, #0x1 +_020A5554: + cmp r7, r11 + bge _020A5568 + add r5, r6, r7 + cmp r5, r8 + blt _020A54F0 +_020A5568: + add r6, r6, #0x1 + cmp r6, r11 + blt _020A54E8 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020A5580: .word 0x7FFF8000 + + arm_func_start FUN_020A5584 +FUN_020A5584: ; 0x020A5584 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r1 + mov r4, r3 + mov r7, r0 + mov r0, r6 + mov r1, r4 + mov r5, r2 + bl thunk_FUN_020a5a28 + mov r3, #0x0 + mov r12, r3 + cmp r0, #0x0 + ble _020A55D8 +_020A55B8: + mov r2, r12, lsl #0x1 + ldrh r1, [r6, r2] + add r12, r12, #0x1 + cmp r12, r0 + mla r1, r5, r1, r3 + strh r1, [r7, r2] + mov r3, r1, lsr #0x10 + blt _020A55B8 +_020A55D8: + cmp r12, r4 + movlt r0, r12, lsl #0x1 + addlt r12, r12, #0x1 + sub r1, r4, r12 + strlth r3, [r7, r0] + mov r2, r1, lsl #0x1 + add r0, r7, r12, lsl #0x1 + mov r1, #0x0 + bl MI_CpuFill8 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_020A5608 +FUN_020A5608: ; 0x020A5608 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r8, r3 + mov r10, r1 + mov r9, r2 + mov r2, r8, lsl #0x1 + mov r1, #0x0 + mov r11, r0 + bl MI_CpuFill8 + mov r0, r10 + mov r1, r8 + bl thunk_FUN_020a5a28 + mov r5, r0 + mov r0, r9 + mov r1, r8 + bl thunk_FUN_020a5a28 +_020A5648: ; 0x020A5648 + str r0, [sp, #0x0] + cmp r0, #0x0 + mov r7, #0x0 + addle sp, sp, #0xc + ldmleia sp!, {r4-r11,lr} + bxle lr + str r7, [sp, #0x4] +_020A5664: + ldr r6, [sp, #0x4] + sub r4, r8, r7 + b _020A5698 +_020A5670: + mov r1, r6, lsl #0x1 + mov r0, r7, lsl #0x1 + ldrh r2, [r10, r1] + ldrh r1, [r9, r0] + mov r0, r11 + mov r3, r8 + mul r1, r2, r1 + add r2, r7, r6 + bl FUN_020A56C4 + add r6, r6, #0x1 +_020A5698: + cmp r6, r5 + bge _020A56A8 + cmp r6, r4 + blt _020A5670 +_020A56A8: + ldr r0, [sp, #0x0] + add r7, r7, #0x1 + cmp r7, r0 + blt _020A5664 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start FUN_020A56C4 +FUN_020A56C4: ; 0x020A56C4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + b _020A56E8 +_020A56D0: + mov lr, r2, lsl #0x1 + ldrh r12, [r0, lr] + add r2, r2, #0x1 + add r1, r1, r12 + strh r1, [r0, lr] + mov r1, r1, lsr #0x10 +_020A56E8: + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + cmp r2, r3 + blt _020A56D0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_020A570C +FUN_020A570C: + subs r12, r2, #0x1 + bmi _020A5740 +_020A5714: + mov r2, r12, lsl #0x1 + ldrh r3, [r1, r2] + ldrh r2, [r0, r2] + cmp r2, r3 + movhi r0, #0x1 + bxhi lr + cmp r2, r3 + mvncc r0, #0x0 + bxcc lr + subs r12, r12, #0x1 + bpl _020A5714 +_020A5740: + mov r0, #0x0 + bx lr + + arm_func_start FUN_020A5748 +FUN_020A5748: ; 0x020A5748 + stmdb sp!, {r4,lr} + cmp r3, #0x0 + mov r4, #0x0 + ble _020A5780 +_020A5758: + mov lr, r4, lsl #0x1 + ldrh r12, [r1, lr] + sub r12, r12, r2 + mov r2, r12, lsr #0x10 + strh r12, [r0, lr] + ands r2, r2, #0x1 + beq _020A5780 + add r4, r4, #0x1 + cmp r4, r3 + blt _020A5758 +_020A5780: + cmp r0, r1 + ldmeqia sp!, {r4,lr} + bxeq lr + add r4, r4, #0x1 + cmp r4, r3 + ldmgeia sp!, {r4,lr} + bxge lr +_020A579C: + mov r12, r4, lsl #0x1 + ldrh r2, [r1, r12] + add r4, r4, #0x1 + cmp r4, r3 + strh r2, [r0, r12] + blt _020A579C + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020A57BC +FUN_020A57BC: ; 0x020A57BC + stmdb sp!, {r4-r8,lr} + mov r7, r1 + mov r5, r3 + mov r8, r0 + mov r6, r2 + mov r0, r7 + mov r1, r5 + bl thunk_FUN_020a5a28 + mov r4, r0 + mov r0, r6 + mov r1, r5 + bl thunk_FUN_020a5a28 +_020A57EC: ; 0x020A57EC + cmp r4, r0 + movlt r4, r0 + mov r3, #0x0 + cmp r4, r5 + addne r4, r4, #0x1 + mov r12, r3 + b _020A5828 +_020A5808: + mov r2, r12, lsl #0x1 + ldrh r1, [r7, r2] + ldrh r0, [r6, r2] + add r12, r12, #0x1 + sub r0, r1, r0 + add r0, r3, r0 + strh r0, [r8, r2] + mov r3, r0, asr #0x10 +_020A5828: + cmp r12, r4 + blt _020A5808 + cmp r12, r5 + bge _020A5840 + cmp r3, #0x0 + bne _020A5808 +_020A5840: + cmp r8, r7 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + cmp r8, r6 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + sub r1, r5, r12 + add r0, r8, r12, lsl #0x1 + mov r2, r1, lsl #0x1 + mov r1, #0x0 + bl MI_CpuFill8 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FUN_020A5874 +FUN_020A5874: ; 0x020A5874 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r3, r1 + cmp r3, #0x0 + mov r12, #0x0 + ble _020A58A8 +_020A588C: + mov r2, r12, lsl #0x1 + ldrh r1, [r0, r2] + add r12, r12, #0x1 + cmp r12, r3 + mvn r1, r1 + strh r1, [r0, r2] + blt _020A588C +_020A58A8: + mov r1, r0 + mov r2, #0x1 + bl FUN_020A58C0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_020A58C0 +FUN_020A58C0: ; 0x020A58C0 + stmdb sp!, {r4,lr} + cmp r3, #0x0 + mov r4, #0x0 + ble _020A58F4 +_020A58D0: + mov lr, r4, lsl #0x1 + ldrh r12, [r1, lr] + add r2, r2, r12 + strh r2, [r0, lr] + movs r2, r2, lsr #0x10 + beq _020A58F4 + add r4, r4, #0x1 + cmp r4, r3 + blt _020A58D0 +_020A58F4: + cmp r0, r1 + ldmeqia sp!, {r4,lr} + bxeq lr + add r4, r4, #0x1 + cmp r4, r3 + ldmgeia sp!, {r4,lr} + bxge lr +_020A5910: + mov r12, r4, lsl #0x1 + ldrh r2, [r1, r12] + add r4, r4, #0x1 + cmp r4, r3 + strh r2, [r0, r12] + blt _020A5910 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020A5930 +FUN_020A5930: ; 0x020A5930 + stmdb sp!, {r4-r8,lr} + mov r7, r1 + mov r5, r3 + mov r8, r0 + mov r6, r2 + mov r0, r7 + mov r1, r5 + bl thunk_FUN_020a5a28 + mov r4, r0 + mov r0, r6 + mov r1, r5 + bl thunk_FUN_020a5a28 +_020A5960: ; 0x020A5960 + cmp r4, r0 + movlt r4, r0 + cmp r4, r5 + addne r4, r4, #0x1 + mov r3, #0x0 + mov r12, r3 + cmp r4, #0x0 + ble _020A59A8 +_020A5980: + mov r2, r12, lsl #0x1 + ldrh r1, [r7, r2] + ldrh r0, [r6, r2] + add r12, r12, #0x1 + cmp r12, r4 + add r0, r1, r0 + add r0, r3, r0 + strh r0, [r8, r2] + mov r3, r0, lsr #0x10 + blt _020A5980 +_020A59A8: + cmp r8, r7 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + cmp r8, r6 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + sub r1, r5, r12 + add r0, r8, r12, lsl #0x1 + mov r2, r1, lsl #0x1 + mov r1, #0x0 + bl MI_CpuFill8 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start FUN_020A59DC +FUN_020A59DC: + stmdb sp!, {lr} + sub sp, sp, #0x4 + sub r2, r1, #0x1 + mov r2, r2, lsl #0x1 + ldrh r2, [r0, r2] + ands r2, r2, #0x8000 + addne sp, sp, #0x4 + mvnne r0, #0x0 + ldmneia sp!, {lr} + bxne lr + bl thunk_FUN_020a5a28 +_020A5A08: ; 0x020A5A08 + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start thunk_FUN_020a5a28 +thunk_FUN_020a5a28: + b _020A5A28 +_020A5A24: + sub r1, r1, #0x1 +_020A5A28: + cmp r1, #0x0 + beq _020A5A44 + sub r2, r1, #0x1 + mov r2, r2, lsl #0x1 + ldrh r2, [r0, r2] + cmp r2, #0x0 + beq _020A5A24 +_020A5A44: + mov r0, r1 + bx lr + + arm_func_start FUN_020A5A4C +FUN_020A5A4C: ; 0x020A5A4C + mov r1, r0 + mov r0, #0x0 + mov r3, #0x1 +_020A5A58: + clz r2, r1 + rsbs r2, r2, #0x1f + bxcc lr + bic r1, r1, r3, lsl r2 + add r0, r0, #0x1 + b _020A5A58 + + arm_func_start FUN_020A5A70 +FUN_020A5A70: ; 0x020A5A70 + clz r0, r0 + bx lr + + arm_func_start FUN_020A5A78 +FUN_020A5A78: ; 0x020A5A78 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldrh r0, [r0, #0x2] + cmp r0, #0x0 + bne _020A5D80 + ldr r2, _020A5DA8 ; =0x021CA86C + mov r0, #0x0 + ldr r1, [r2, #0x0] + add r1, r1, #0x2000 + strb r0, [r1, #0x26b] + ldr r1, [r2, #0x0] + add r1, r1, #0x2200 + strh r0, [r1, #0x82] + ldr r3, [r2, #0x0] + add r1, r3, #0x2000 + ldr r1, [r1, #0x260] + cmp r1, #0xd + addls pc, pc, r1, lsl #0x2 + b _020A5D4C +_020A5AC4: + b _020A5D4C +_020A5AC8: + b _020A5D4C +_020A5ACC: + b _020A5D4C +_020A5AD0: + b _020A5D4C +_020A5AD4: + b _020A5D4C +_020A5AD8: + b _020A5AFC +_020A5ADC: + b _020A5AFC +_020A5AE0: + b _020A5B24 +_020A5AE4: + b _020A5B4C +_020A5AE8: + b _020A5C74 +_020A5AEC: + b _020A5CA4 +_020A5AF0: + b _020A5D4C +_020A5AF4: + b _020A5C74 +_020A5AF8: + b _020A5CD4 +_020A5AFC: + mov r0, #0x3 + bl FUN_020A6C38 + mov r1, #0x0 + ldr r3, _020A5DAC ; =0x000008F5 + mov r2, r1 + mov r0, #0x1 + bl FUN_020A6D3C + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5B24: + mov r0, #0x3 + bl FUN_020A6C38 +_020A5B2C: ; 0x020A5B2C + mov r0, #0x0 + ldr r3, _020A5DB0 ; =0x000008FB + mov r1, r0 + mov r2, r0 + bl FUN_020A6D3C + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5B4C: + add r1, r3, #0x2200 + ldrh r4, [r1, #0xf8] + strh r0, [r1, #0xf8] + cmp r4, #0x12 + bne _020A5C44 + ldr r1, [r2, #0x0] + add r1, r1, #0x2100 + ldrh r3, [r1, #0x70] + and r12, r3, #0x24 + cmp r12, #0x24 + beq _020A5C44 + orr r3, r3, #0x24 + strh r3, [r1, #0x70] + ldr r2, [r2, #0x0] + add r1, r2, #0x2000 + ldr r3, [r1, #0x264] + and r1, r3, #0xc0000 + cmp r1, #0xc0000 + moveq r0, #0x1 + mov r0, r0, lsl #0x10 + mov r12, r0, lsr #0x10 + and r1, r3, #0x30000 + cmp r1, #0x30000 + movne r3, #0x1 + add r1, r2, #0x2140 + ldr r0, _020A5DB4 ; =FUN_020A6144 + moveq r3, #0x0 + mov r2, #0x0 + str r12, [sp, #0x0] + bl WM_StartConnectEx + cmp r0, #0x2 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4,lr} + bxeq lr + cmp r0, #0x3 + beq _020A5C14 + cmp r0, #0x8 + bne _020A5C14 + mov r0, #0xc + bl FUN_020A6C38 + ldr r0, _020A5DA8 ; =0x021CA86C + ldr r3, _020A5DB8 ; =0x0000091C + ldr r0, [r0, #0x0] + mov r2, r4 + add r1, r0, #0x2140 + mov r0, #0x1 + bl FUN_020A6D3C + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5C14: + mov r0, #0xb + bl FUN_020A6C38 + ldr r0, _020A5DA8 ; =0x021CA86C + ldr r3, _020A5DBC ; =0x00000925 + ldr r0, [r0, #0x0] + mov r2, r4 + add r1, r0, #0x2140 + mov r0, #0x7 + bl FUN_020A6D3C + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5C44: + mov r0, #0x3 + bl FUN_020A6C38 + ldr r0, _020A5DA8 ; =0x021CA86C + ldr r3, _020A5DC0 ; =0x0000092D + ldr r0, [r0, #0x0] + mov r2, r4 + add r1, r0, #0x2140 + mov r0, #0x1 + bl FUN_020A6D3C + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5C74: + mov r0, #0x3 + bl FUN_020A6C38 + ldr r0, _020A5DA8 ; =0x021CA86C + ldr r3, _020A5DC4 ; =0x00000935 + ldr r1, [r0, #0x0] + mov r0, #0x0 + add r1, r1, #0x2140 + mov r2, #0x1 + bl FUN_020A6D3C + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5CA4: + mov r0, #0x3 + bl FUN_020A6C38 + ldr r1, _020A5DA8 ; =0x021CA86C + mov r0, #0x0 + ldr r1, [r1, #0x0] + ldr r3, _020A5DC8 ; =0x0000093C + mov r2, r0 + add r1, r1, #0x2140 + bl FUN_020A6D3C + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5CD4: + ldr r0, _020A5DCC ; =FUN_020A6768 + bl WM_PowerOff + cmp r0, #0x2 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4,lr} + bxeq lr + cmp r0, #0x3 + beq _020A5D24 + cmp r0, #0x8 + bne _020A5D24 + mov r0, #0xc + bl FUN_020A6C38 + mov r1, #0x0 + ldr r3, _020A5DD0 ; =0x0000094A + mov r2, r1 + mov r0, #0x1 + bl FUN_020A6D3C + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5D24: + mov r0, #0xb + bl FUN_020A6C38 + mov r1, #0x0 + ldr r3, _020A5DD4 ; =0x00000953 + mov r2, r1 + mov r0, #0x7 + bl FUN_020A6D3C + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5D4C: + mov r0, #0xb + bl FUN_020A6C38 + ldr r0, _020A5DA8 ; =0x021CA86C + ldr r3, _020A5DD8 ; =0x00000959 + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2000 + ldr r2, [r1, #0x260] + mov r1, #0x0 + bl FUN_020A6D3C + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5D80: + mov r0, #0xb + bl FUN_020A6C38 + mov r1, #0x0 + mov r2, r1 + mov r0, #0x7 + mov r3, #0x960 + bl FUN_020A6D3C + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A5DA8: .word 0x021CA86C +_020A5DAC: .word 0x000008F5 +_020A5DB0: .word 0x000008FB +_020A5DB4: .word FUN_020A6144 +_020A5DB8: .word 0x0000091C +_020A5DBC: .word 0x00000925 +_020A5DC0: .word 0x0000092D +_020A5DC4: .word 0x00000935 +_020A5DC8: .word 0x0000093C +_020A5DCC: .word FUN_020A6768 +_020A5DD0: .word 0x0000094A +_020A5DD4: .word 0x00000953 +_020A5DD8: .word 0x00000959 + + arm_func_start FUN_020A5DDC +FUN_020A5DDC: ; 0x020A5DDC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r0, [r0, #0x2] + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _020A5EF4 +_020A5DF4: + b _020A5E08 +_020A5DF8: + b _020A5EDC +_020A5DFC: + b _020A5EF4 +_020A5E00: + b _020A5EDC +_020A5E04: + b _020A5EF4 +_020A5E08: + ldr r0, _020A5F24 ; =0x021CA86C + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0xc + bne _020A5E38 + mov r0, #0xa + bl FUN_020A6C38 + bl FUN_020A6B28 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A5E38: + ldr r0, _020A5F28 ; =FUN_020A6058 + mov r1, #0x0 + bl WM_Disconnect + cmp r0, #0x2 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + cmp r0, #0x3 + beq _020A5E94 + cmp r0, #0x8 + bne _020A5EAC + mov r0, #0xc + bl FUN_020A6C38 + ldr r0, _020A5F24 ; =0x021CA86C + ldr r3, _020A5F2C ; =0x000008B4 + ldr r1, [r0, #0x0] + mov r0, #0x1 + add r1, r1, #0x2140 + mov r2, #0x0 + bl FUN_020A6D3C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A5E94: + mov r0, #0xa + bl FUN_020A6C38 + bl FUN_020A6B28 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A5EAC: + mov r0, #0xb + bl FUN_020A6C38 + ldr r1, _020A5F24 ; =0x021CA86C + mov r0, #0x7 + ldr r1, [r1, #0x0] + mov r2, #0x0 + add r1, r1, #0x2140 + mov r3, #0x8c0 + bl FUN_020A6D3C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A5EDC: + mov r0, #0xa + bl FUN_020A6C38 + bl FUN_020A6B28 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A5EF4: + mov r0, #0xb + bl FUN_020A6C38 + ldr r0, _020A5F24 ; =0x021CA86C + ldr r3, _020A5F30 ; =0x000008D3 + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2140 + mov r2, #0x0 + bl FUN_020A6D3C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A5F24: .word 0x021CA86C +_020A5F28: .word FUN_020A6058 +_020A5F2C: .word 0x000008B4 +_020A5F30: .word 0x000008D3 + + arm_func_start FUN_020A5F34 +FUN_020A5F34: ; 0x020A5F34 + stmdb sp!, {r4,lr} + mov r4, r0 + ldrh r0, [r4, #0x2] + cmp r0, #0x0 + beq _020A5F50 + cmp r0, #0x4 + b _020A601C +_020A5F50: + ldrh r0, [r4, #0x4] + cmp r0, #0xe + beq _020A5F68 + cmp r0, #0xf + beq _020A5FC0 + b _020A5FF0 +_020A5F68: + ldr r0, _020A6048 ; =0x021CA86C + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0xc + bne _020A5F94 + mov r0, #0x8 + bl FUN_020A6C38 + bl FUN_020A6B28 + ldmia sp!, {r4,lr} + bx lr +_020A5F94: + mov r0, #0x9 + bl FUN_020A6C38 + ldr r1, _020A6048 ; =0x021CA86C + mov r0, #0x0 + ldr r1, [r1, #0x0] + ldr r3, _020A604C ; =0x00000872 + mov r2, r0 + add r1, r1, #0x2140 + bl FUN_020A6D3C + ldmia sp!, {r4,lr} + bx lr +_020A5FC0: + ldr r0, [r4, #0x8] + ldrh r0, [r0, #0xe] + mov r0, r0, asr #0x8 + and r0, r0, #0xff + bl FUN_020A89D0 + ldr r0, [r4, #0x8] + mov r1, #0x620 + bl DC_InvalidateRange + ldr r0, [r4, #0x8] + bl FUN_020A8934 + ldmia sp!, {r4,lr} + bx lr +_020A5FF0: + mov r0, #0xb + bl FUN_020A6C38 + ldr r0, _020A6048 ; =0x021CA86C + ldrh r2, [r4, #0x4] + ldr r0, [r0, #0x0] + ldr r3, _020A6050 ; =0x00000881 + add r1, r0, #0x2140 + mov r0, #0x7 + bl FUN_020A6D3C + ldmia sp!, {r4,lr} + bx lr +_020A601C: + mov r0, #0xb + bl FUN_020A6C38 + ldr r0, _020A6048 ; =0x021CA86C + ldr r3, _020A6054 ; =0x0000088C + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2140 + mov r2, #0x0 + bl FUN_020A6D3C + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A6048: .word 0x021CA86C +_020A604C: .word 0x00000872 +_020A6050: .word 0x00000881 +_020A6054: .word 0x0000088C + + arm_func_start FUN_020A6058 +FUN_020A6058: ; 0x020A6058 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r0, [r0, #0x2] + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _020A6108 +_020A6070: + b _020A6084 +_020A6074: + b _020A60F0 +_020A6078: + b _020A6108 +_020A607C: + b _020A60F0 +_020A6080: + b _020A6108 +_020A6084: + ldr r0, _020A6138 ; =0x021CA86C + ldr r1, [r0, #0x0] + add r0, r1, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0xc + bne _020A60B4 + mov r0, #0xa + bl FUN_020A6C38 + bl FUN_020A6B28 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A60B4: + add r1, r1, #0x2200 + mov r2, #0x0 + mov r0, #0x3 + strh r2, [r1, #0x82] + bl FUN_020A6C38 + ldr r1, _020A6138 ; =0x021CA86C + mov r0, #0x0 + ldr r1, [r1, #0x0] + ldr r3, _020A613C ; =0x0000083D + mov r2, r0 + add r1, r1, #0x2140 + bl FUN_020A6D3C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A60F0: + mov r0, #0xa + bl FUN_020A6C38 + bl FUN_020A6B28 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6108: + mov r0, #0xb + bl FUN_020A6C38 + ldr r0, _020A6138 ; =0x021CA86C + ldr r3, _020A6140 ; =0x0000084F + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2140 + mov r2, #0x0 + bl FUN_020A6D3C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6138: .word 0x021CA86C +_020A613C: .word 0x0000083D +_020A6140: .word 0x0000084F + + arm_func_start FUN_020A6144 +FUN_020A6144: ; 0x020A6144 + stmdb sp!, {r4,lr} + mov r4, r0 + ldrh r0, [r4, #0x2] + cmp r0, #0xc + addls pc, pc, r0, lsl #0x2 + b _020A638C +_020A615C: + b _020A6190 +_020A6160: + b _020A6364 +_020A6164: + b _020A638C +_020A6168: + b _020A638C +_020A616C: + b _020A638C +_020A6170: + b _020A638C +_020A6174: + b _020A6378 +_020A6178: + b _020A638C +_020A617C: + b _020A638C +_020A6180: + b _020A638C +_020A6184: + b _020A638C +_020A6188: + b _020A6378 +_020A618C: + b _020A6378 +_020A6190: + ldrh r0, [r4, #0x8] + cmp r0, #0x9 + bgt _020A61D0 + cmp r0, #0x0 + addge pc, pc, r0, lsl #0x2 + b _020A6338 +_020A61A8: ; 0x020A61A8 + b _020A6338 +_020A61AC: ; 0x020A61AC + b _020A6338 +_020A61B0: ; 0x020A61B0 + b _020A6338 +_020A61B4: ; 0x020A61B4 + b _020A6338 +_020A61B8: ; 0x020A61B8 + b _020A6338 +_020A61BC: ; 0x020A61BC + b _020A6338 +_020A61C0: ; 0x020A61C0 + b _020A63B0 +_020A61C4: ; 0x020A61C4 + b _020A6258 +_020A61C8: ; 0x020A61C8 + b _020A61E0 +_020A61CC: ; 0x020A61CC + b _020A61E0 +_020A61D0: + cmp r0, #0x1a + ldmeqia sp!, {r4,lr} + bxeq lr + b _020A6338 +_020A61E0: + ldr r1, _020A63B8 ; =0x021CA86C + ldr r2, [r1, #0x0] + add r0, r2, #0x2000 + ldr r0, [r0, #0x260] + sub r0, r0, #0x8 + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _020A63B0 +_020A6200: + b _020A6220 +_020A6204: + b _020A6230 +_020A6208: + b _020A6214 +_020A620C: + b _020A63B0 +_020A6210: + b _020A624C +_020A6214: + add r0, r2, #0x2200 + mov r1, #0x0 + strh r1, [r0, #0x82] +_020A6220: + mov r0, #0xc + bl FUN_020A6C38 + ldmia sp!, {r4,lr} + bx lr +_020A6230: + add r0, r2, #0x2200 + mov r2, #0x0 + strh r2, [r0, #0x82] + ldr r0, [r1, #0x0] + mov r1, #0x6 + add r0, r0, #0x2200 + strh r1, [r0, #0x80] +_020A624C: + bl FUN_020A6B28 + ldmia sp!, {r4,lr} + bx lr +_020A6258: + ldr r1, _020A63B8 ; =0x021CA86C + ldr r3, [r1, #0x0] + add r0, r3, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0xc + bne _020A6284 + mov r0, #0x8 + bl FUN_020A6C38 + bl FUN_020A6B28 + ldmia sp!, {r4,lr} + bx lr +_020A6284: + ldrh r2, [r4, #0xa] + cmp r2, #0x1 + blo _020A632C + ldr r0, _020A63BC ; =0x000007D7 + cmp r2, r0 + bhi _020A632C + add r0, r3, #0x2200 + strh r2, [r0, #0x82] + ldr r1, [r1, #0x0] + ldr r0, _020A63C0 ; =FUN_020A5F34 + add r1, r1, #0x1500 + mov r2, #0x620 + bl WM_StartDCF + cmp r0, #0x2 + ldmeqia sp!, {r4,lr} + bxeq lr + cmp r0, #0x3 + beq _020A6300 + cmp r0, #0x8 + bne _020A6300 + mov r0, #0xc + bl FUN_020A6C38 + ldr r0, _020A63B8 ; =0x021CA86C + ldr r3, _020A63C4 ; =0x000007ED + ldr r1, [r0, #0x0] + mov r0, #0x1 + add r1, r1, #0x2140 + mov r2, #0x0 + bl FUN_020A6D3C + ldmia sp!, {r4,lr} + bx lr +_020A6300: + mov r0, #0xb + bl FUN_020A6C38 + ldr r0, _020A63B8 ; =0x021CA86C + ldr r3, _020A63C8 ; =0x000007F6 + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2140 + mov r2, #0x0 + bl FUN_020A6D3C + ldmia sp!, {r4,lr} + bx lr +_020A632C: + bl FUN_020A6B28 + ldmia sp!, {r4,lr} + bx lr +_020A6338: + mov r0, #0xb + bl FUN_020A6C38 + ldr r0, _020A63B8 ; =0x021CA86C + ldrh r2, [r4, #0x8] + ldr r0, [r0, #0x0] + ldr r3, _020A63CC ; =0x00000804 + add r1, r0, #0x2140 + mov r0, #0x7 + bl FUN_020A6D3C + ldmia sp!, {r4,lr} + bx lr +_020A6364: + ldr r0, _020A63B8 ; =0x021CA86C + ldrh r1, [r4, #0xe] + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0xf8] +_020A6378: + mov r0, #0x8 + bl FUN_020A6C38 + bl FUN_020A6B28 + ldmia sp!, {r4,lr} + bx lr +_020A638C: + mov r0, #0xb + bl FUN_020A6C38 + ldr r0, _020A63B8 ; =0x021CA86C + ldr r3, _020A63D0 ; =0x0000081B + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2140 + mov r2, #0x0 + bl FUN_020A6D3C +_020A63B0: + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A63B8: .word 0x021CA86C +_020A63BC: .word 0x000007D7 +_020A63C0: .word FUN_020A5F34 +_020A63C4: .word 0x000007ED +_020A63C8: .word 0x000007F6 +_020A63CC: .word 0x00000804 +_020A63D0: .word 0x0000081B + + arm_func_start FUN_020A63D4 +FUN_020A63D4: ; 0x020A63D4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r0, [r0, #0x2] + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _020A6438 +_020A63EC: + b _020A6400 +_020A63F0: + b _020A6428 +_020A63F4: + b _020A6438 +_020A63F8: + b _020A6438 +_020A63FC: + b _020A6438 +_020A6400: + mov r0, #0x3 + bl FUN_020A6C38 +_020A6408: ; 0x020A6408 + mov r0, #0x0 + ldr r3, _020A6460 ; =0x00000783 + mov r1, r0 + mov r2, r0 + bl FUN_020A6D3C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6428: + bl FUN_020A6B28 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6438: + mov r0, #0xb + bl FUN_020A6C38 + mov r1, #0x0 + ldr r3, _020A6464 ; =0x00000793 + mov r2, r1 + mov r0, #0x7 + bl FUN_020A6D3C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6460: .word 0x00000783 +_020A6464: .word 0x00000793 + + arm_func_start FUN_020A6468 +FUN_020A6468: ; 0x020A6468 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + mov r5, r0 + ldrh r0, [r5, #0x2] + mov r4, #0x14 + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _020A6714 +_020A6488: + b _020A649C +_020A648C: + b _020A6704 +_020A6490: + b _020A6714 +_020A6494: + b _020A6714 +_020A6498: + b _020A6714 +_020A649C: + ldr r0, _020A673C ; =0x021CA86C + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0x5 + bne _020A64D0 + mov r0, #0x6 + bl FUN_020A6C38 +_020A64BC: ; 0x020A64BC + mov r0, #0x0 + ldr r3, _020A6740 ; =0x00000704 + mov r1, r0 + mov r2, r0 + bl FUN_020A6D3C +_020A64D0: + ldr r1, _020A673C ; =0x021CA86C + ldr r2, [r1, #0x0] + add r0, r2, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0x6 + beq _020A64FC + cmp r0, #0x7 + beq _020A6674 + cmp r0, #0xd + beq _020A6684 + b _020A6694 +_020A64FC: + add r0, r2, #0x2200 + mov r2, #0x7 + strh r2, [r0, #0x80] + ldrh r0, [r5, #0x8] + cmp r0, #0x5 + bne _020A6588 + ldr r0, [r1, #0x0] + add r1, r0, #0x2200 + add r0, r0, #0x2000 + ldrh r1, [r1, #0x8c] + ldr r0, [r0, #0x288] + bl DC_InvalidateRange + ldrh r0, [r5, #0xe] + mov r4, #0x0 + cmp r0, #0x0 + ble _020A6588 + ldr r8, _020A6744 ; =0x0000071A + mov r6, r4 + mov r7, #0x7 +_020A6548: + add r0, r5, r4, lsl #0x1 + add r2, r5, r4, lsl #0x2 + ldrh r1, [r0, #0x50] + ldr r0, [r2, #0x10] + bl FUN_020A8298 + str r8, [sp, #0x0] + add r0, r5, r4, lsl #0x2 + ldr r2, [r0, #0x10] + mov r0, r7 + mov r1, r6 + mov r3, r5 + bl FUN_020A6CE0 + ldrh r0, [r5, #0xe] + add r4, r4, #0x1 + cmp r4, r0 + blt _020A6548 +_020A6588: + ldr r0, _020A673C ; =0x021CA86C + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r1, [r0, #0x264] + and r0, r1, #0xc00000 + cmp r0, #0xc00000 + bne _020A65F4 + ldr r0, _020A6748 ; =0x00003FFE + and r0, r1, r0 + bl FUN_020A5A4C + movs r1, r0 + beq _020A65F4 + ldr r0, _020A673C ; =0x021CA86C + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r6, [r0, #0x284] + mov r0, r6 + bl _u32_div_f +_020A65D0: ; 0x020A65D0 + cmp r1, #0x0 + bne _020A65F4 + ldr r4, _020A674C ; =0x00000728 + mov r1, #0x0 + mov r2, r6 + mov r3, r1 + mov r0, #0x8 + str r4, [sp, #0x0] + bl FUN_020A6CE0 +_020A65F4: + ldrh r0, [r5, #0xa] + bl FUN_020A5A70 + rsb r0, r0, #0x20 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl FUN_020A6D8C + ldr r1, _020A673C ; =0x021CA86C + mov r2, #0x1 + mov r2, r2, lsl r0 + ldr r0, [r1, #0x0] + mov r2, r2, asr #0x1 + add r0, r0, #0x2200 + strh r2, [r0, #0x8e] + ldr r0, [r1, #0x0] + add r1, r0, #0x2200 + add r0, r0, #0x2000 + ldrh r1, [r1, #0x8c] + ldr r0, [r0, #0x288] + bl DC_InvalidateRange + ldr r3, _020A673C ; =0x021CA86C + ldr r2, _020A6750 ; =0x00002288 + ldr r1, [r3, #0x0] + ldr r0, _020A6754 ; =FUN_020A6468 + add r1, r1, #0x2000 + ldr r4, [r1, #0x284] + add r4, r4, #0x1 + str r4, [r1, #0x284] + ldr r1, [r3, #0x0] + add r1, r1, r2 + bl WM_StartScanEx + mov r4, r0 + b _020A6694 +_020A6674: + ldr r0, _020A6758 ; =FUN_020A63D4 + bl WM_EndScan + mov r4, r0 + b _020A6694 +_020A6684: + bl FUN_020A6B28 + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr +_020A6694: + cmp r4, #0x2 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + cmp r4, #0x3 + beq _020A66DC + cmp r4, #0x8 + bne _020A66DC + mov r0, #0xc + bl FUN_020A6C38 + mov r1, #0x0 + ldr r3, _020A675C ; =0x00000753 + mov r2, r1 + mov r0, #0x1 + bl FUN_020A6D3C + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr +_020A66DC: + mov r0, #0xb + bl FUN_020A6C38 + mov r1, #0x0 + ldr r3, _020A6760 ; =0x0000075C + mov r2, r1 + mov r0, #0x7 + bl FUN_020A6D3C + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr +_020A6704: + bl FUN_020A6B28 + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr +_020A6714: + mov r0, #0xb + bl FUN_020A6C38 + mov r1, #0x0 + ldr r3, _020A6764 ; =0x0000076D + mov r2, r1 + mov r0, #0x7 + bl FUN_020A6D3C + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020A673C: .word 0x021CA86C +_020A6740: .word 0x00000704 +_020A6744: .word 0x0000071A +_020A6748: .word 0x00003FFE +_020A674C: .word 0x00000728 +_020A6750: .word 0x00002288 +_020A6754: .word FUN_020A6468 +_020A6758: .word FUN_020A63D4 +_020A675C: .word 0x00000753 +_020A6760: .word 0x0000075C +_020A6764: .word 0x0000076D + + arm_func_start FUN_020A6768 +FUN_020A6768: ; 0x020A6768 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r1, [r0, #0x2] + mov r2, #0x14 + cmp r1, #0x4 + addls pc, pc, r1, lsl #0x2 + b _020A6A0C +_020A6784: + b _020A6798 +_020A6788: + b _020A69CC +_020A678C: + b _020A6A0C +_020A6790: + b _020A6A0C +_020A6794: + b _020A6A0C +_020A6798: + ldrh r0, [r0, #0x0] + cmp r0, #0x19 + bgt _020A67D4 + cmp r0, #0x19 + bge _020A68B4 + cmp r0, #0x6 + addls pc, pc, r0, lsl #0x2 + b _020A692C +_020A67B8: + b _020A692C +_020A67BC: + b _020A692C +_020A67C0: + b _020A692C +_020A67C4: + b _020A67F4 +_020A67C8: + b _020A6804 +_020A67CC: + b _020A6868 +_020A67D0: + b _020A6890 +_020A67D4: + cmp r0, #0x1d + bgt _020A67E8 + cmp r0, #0x1d + beq _020A68A0 + b _020A692C +_020A67E8: + cmp r0, #0x27 + beq _020A68DC + b _020A692C +_020A67F4: + ldr r0, _020A6A4C ; =FUN_020A6768 + bl WM_PowerOn + mov r2, r0 + b _020A692C +_020A6804: + bl WM_Finish +_020A6808: ; 0x020A6808 + cmp r0, #0x0 + beq _020A6818 + cmp r0, #0x4 + b _020A6840 +_020A6818: + mov r0, #0x1 + bl FUN_020A6C38 +_020A6820: ; 0x020A6820 + mov r0, #0x0 + ldr r3, _020A6A50 ; =0x00000663 + mov r1, r0 + mov r2, r0 + bl FUN_020A6D3C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6840: + mov r0, #0xb + bl FUN_020A6C38 + mov r1, #0x0 + ldr r3, _020A6A54 ; =0x0000066C + mov r2, r1 + mov r0, #0x7 + bl FUN_020A6D3C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6868: + mov r0, #0x3 + bl FUN_020A6C38 +_020A6870: ; 0x020A6870 + mov r0, #0x0 + ldr r3, _020A6A58 ; =0x00000673 + mov r1, r0 + mov r2, r0 + bl FUN_020A6D3C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6890: + ldr r0, _020A6A4C ; =FUN_020A6768 + bl WM_Disable + mov r2, r0 + b _020A692C +_020A68A0: + ldr r0, _020A6A4C ; =FUN_020A6768 + mov r1, #0x0 + bl WM_SetBeaconIndication + mov r2, r0 + b _020A692C +_020A68B4: + ldr r1, _020A6A5C ; =0x021CA86C + ldr r0, _020A6A4C ; =FUN_020A6768 + ldr r3, [r1, #0x0] + add r2, r3, #0x2000 + ldrb r1, [r2, #0x250] + ldrb r2, [r2, #0x251] + add r3, r3, #0x2200 + bl WM_SetWEPKeyEx + mov r2, r0 + b _020A692C +_020A68DC: + ldr r0, _020A6A5C ; =0x021CA86C + ldr r2, [r0, #0x0] + add r0, r2, #0x2000 + ldr r1, [r0, #0x264] + and r0, r1, #0xc0000 + cmp r0, #0xc0000 + moveq r0, #0x1 + movne r0, #0x0 + mov r0, r0, lsl #0x10 + mov r12, r0, lsr #0x10 + and r1, r1, #0x30000 + cmp r1, #0x30000 + movne r3, #0x1 + add r1, r2, #0x2140 + ldr r0, _020A6A60 ; =FUN_020A6144 + moveq r3, #0x0 + mov r2, #0x0 + str r12, [sp, #0x0] + bl WM_StartConnectEx + mov r2, r0 +_020A692C: + cmp r2, #0x2 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + cmp r2, #0x3 + beq _020A698C + cmp r2, #0x8 + bne _020A698C + mov r0, #0xc + bl FUN_020A6C38 + ldr r0, _020A6A5C ; =0x021CA86C + ldr r3, _020A6A64 ; =0x000006AF + ldr r1, [r0, #0x0] + mov r2, #0x0 + add r0, r1, #0x2200 + ldrsh r0, [r0, #0x80] + cmp r0, #0x5 + addeq r1, r1, #0x2140 + movne r1, #0x0 + mov r0, #0x1 + bl FUN_020A6D3C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A698C: + mov r0, #0xb + bl FUN_020A6C38 + ldr r0, _020A6A5C ; =0x021CA86C + ldr r3, _020A6A68 ; =0x000006B8 + ldr r1, [r0, #0x0] + mov r2, #0x0 + add r0, r1, #0x2200 + ldrsh r0, [r0, #0x80] + cmp r0, #0x5 + addeq r1, r1, #0x2140 + movne r1, #0x0 + mov r0, #0x7 + bl FUN_020A6D3C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A69CC: + mov r0, #0xc + bl FUN_020A6C38 + ldr r0, _020A6A5C ; =0x021CA86C + ldr r3, _020A6A6C ; =0x000006DE + ldr r1, [r0, #0x0] + mov r2, #0x0 + add r0, r1, #0x2200 + ldrsh r0, [r0, #0x80] + cmp r0, #0x5 + addeq r1, r1, #0x2140 + movne r1, #0x0 + mov r0, #0x1 + bl FUN_020A6D3C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6A0C: + mov r0, #0xb + bl FUN_020A6C38 + ldr r0, _020A6A5C ; =0x021CA86C + ldr r3, _020A6A70 ; =0x000006E8 + ldr r1, [r0, #0x0] + mov r2, #0x0 + add r0, r1, #0x2200 + ldrsh r0, [r0, #0x80] + cmp r0, #0x5 + addeq r1, r1, #0x2140 + movne r1, #0x0 + mov r0, #0x7 + bl FUN_020A6D3C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6A4C: .word FUN_020A6768 +_020A6A50: .word 0x00000663 +_020A6A54: .word 0x0000066C +_020A6A58: .word 0x00000673 +_020A6A5C: .word 0x021CA86C +_020A6A60: .word FUN_020A6144 +_020A6A64: .word 0x000006AF +_020A6A68: .word 0x000006B8 +_020A6A6C: .word 0x000006DE +_020A6A70: .word 0x000006E8 + + arm_func_start FUN_020A6A74 +FUN_020A6A74: ; 0x020A6A74 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r1, [r0, #0x2] + cmp r1, #0x8 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldrh r1, [r0, #0x4] + cmp r1, #0x16 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldrh r0, [r0, #0x6] + cmp r0, #0x25 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020A6B24 ; =0x021CA86C + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r0, [r0, #0x260] + sub r0, r0, #0x8 + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _020A6B18 +_020A6AD8: + b _020A6AEC +_020A6ADC: + b _020A6B00 +_020A6AE0: + b _020A6B10 +_020A6AE4: + b _020A6B18 +_020A6AE8: + b _020A6B00 +_020A6AEC: + mov r0, #0xc + bl FUN_020A6C38 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6B00: + bl FUN_020A6B28 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6B10: + mov r0, #0xc + bl FUN_020A6C38 +_020A6B18: + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6B24: .word 0x021CA86C + + arm_func_start FUN_020A6B28 +FUN_020A6B28: ; 0x020A6B28 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020A6B98 ; =0x021CA86C + ldr r0, [r0, #0x0] + add r1, r0, #0x2000 + ldrb r0, [r1, #0x26b] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020A6B9C ; =FUN_020A5A78 + mov r2, #0x1 + strb r2, [r1, #0x26b] + bl WM_Reset + cmp r0, #0x2 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + mov r0, #0xb + bl FUN_020A6C38 + mov r1, #0x0 + mov r2, r1 + mov r0, #0x7 + mov r3, #0x610 + bl FUN_020A6D3C + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6B98: .word 0x021CA86C +_020A6B9C: .word FUN_020A5A78 + + arm_func_start FUN_020A6BA0 +FUN_020A6BA0: ; 0x020A6BA0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FUN_020A88A8 + bl FUN_020A6BBC + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_020A6BBC +FUN_020A6BBC: ; 0x020A6BBC + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + bl OS_DisableInterrupts + ldr r2, _020A6C28 ; =0x021CA86C + ldr r1, _020A6C2C ; =0x000022CC + ldr r2, [r2, #0x0] + mov r4, r0 + add r0, r2, r1 + bl OS_CancelAlarm + ldr r0, _020A6C28 ; =0x021CA86C + ldr r12, [r0, #0x0] + add r0, r12, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0x9 + bne _020A6C14 + ldr r0, _020A6C2C ; =0x000022CC + ldr r1, _020A6C30 ; =0x022F5341 + mov r2, #0x0 + ldr r3, _020A6C34 ; =FUN_020A6BA0 + add r0, r12, r0 + str r2, [sp, #0x0] + bl OS_SetAlarm +_020A6C14: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A6C28: .word 0x021CA86C +_020A6C2C: .word 0x000022CC +_020A6C30: .word 0x022F5341 +_020A6C34: .word FUN_020A6BA0 + + arm_func_start FUN_020A6C38 +FUN_020A6C38: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020A6CD0 ; =0x021CA86C + mov r4, r0 + ldr r1, [r1, #0x0] + add r0, r1, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0x9 + bne _020A6C78 + cmp r5, #0x9 + beq _020A6C78 + ldr r0, _020A6CD4 ; =0x000022CC + add r0, r1, r0 + bl OS_CancelAlarm +_020A6C78: + ldr r0, _020A6CD0 ; =0x021CA86C + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r1, [r0, #0x260] + cmp r1, #0xb + strne r5, [r0, #0x260] + cmp r5, #0x9 + bne _020A6CBC + mov r2, #0x0 + ldr r0, _020A6CD0 ; =0x021CA86C + str r2, [sp, #0x0] + ldr r5, [r0, #0x0] + ldr r0, _020A6CD4 ; =0x000022CC + ldr r1, _020A6CD8 ; =0x022F5341 + ldr r3, _020A6CDC ; =FUN_020A6BA0 + add r0, r5, r0 + bl OS_SetAlarm +_020A6CBC: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A6CD0: .word 0x021CA86C +_020A6CD4: .word 0x000022CC +_020A6CD8: .word 0x022F5341 +_020A6CDC: .word FUN_020A6BA0 + + arm_func_start FUN_020A6CE0 +FUN_020A6CE0: ; 0x020A6CE0 + stmdb sp!, {lr} + sub sp, sp, #0x14 + ldr ip, _020A6D38 ; =0x021CA86C + ldr r12, [r12, #0x0] + add r12, r12, #0x2000 + ldr lr, [r12, #0x27c] + cmp lr, #0x0 + addeq sp, sp, #0x14 + ldmeqia sp!, {lr} + bxeq lr + ldr lr, [sp, #0x18] + strh r0, [sp, #0x0] + str r2, [sp, #0x4] + str r3, [sp, #0x8] + str lr, [sp, #0xc] + strh r1, [sp, #0x2] + ldr r1, [r12, #0x27c] + add r0, sp, #0x0 + blx r1 + add sp, sp, #0x14 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6D38: .word 0x021CA86C + + arm_func_start FUN_020A6D3C +FUN_020A6D3C: ; 0x020A6D3C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr ip, _020A6D88 ; =0x021CA86C + mov r5, r0 + ldr r0, [r12, #0x0] + mov r4, r1 + add r1, r0, #0x2200 + ldrsh r0, [r1, #0x80] + mov r12, #0x0 + mov lr, r2 + strh r12, [r1, #0x80] + str r3, [sp, #0x0] + mov r1, r5 + mov r2, r4 + mov r3, lr + bl FUN_020A6CE0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A6D88: .word 0x021CA86C + + arm_func_start FUN_020A6D8C +FUN_020A6D8C: ; 0x020A6D8C + stmdb sp!, {r4-r6,lr} + ldr r1, _020A6E24 ; =0x021CA86C + mov r2, r0 + ldr r1, [r1, #0x0] + mov r3, #0x0 + add r1, r1, #0x2000 + ldr r1, [r1, #0x264] + mov r6, #0x1 + ldr r5, _020A6E28 ; =0x4EC4EC4F + ldr r4, _020A6E2C ; =0x0000000D +_020A6DB4: + smull r12, lr, r5, r2 + mov lr, lr, asr #0x2 + mov r12, r2, lsr #0x1f + add lr, r12, lr + smull r12, lr, r4, lr + sub lr, r2, r12 + add r12, lr, #0x1 + mov r12, r6, lsl r12 + ands r12, r1, r12 + bne _020A6DEC + add r3, r3, #0x1 + cmp r3, #0xd + add r2, r2, #0x1 + blt _020A6DB4 +_020A6DEC: + ldr r1, _020A6E28 ; =0x4EC4EC4F + add r3, r0, r3 + smull r0, r4, r1, r3 + mov r4, r4, asr #0x2 + mov r0, r3, lsr #0x1f + ldr r2, _020A6E2C ; =0x0000000D + add r4, r0, r4 + smull r0, r1, r2, r4 + sub r4, r3, r0 + add r0, r4, #0x1 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A6E24: .word 0x021CA86C +_020A6E28: .word 0x4EC4EC4F +_020A6E2C: .word 0x0000000D + + arm_func_start FUN_020A6E30 +FUN_020A6E30: ; 0x020A6E30 + ldr r0, _020A6E48 ; =0x021CA86C + ldr r1, _020A6E4C ; =0x00AAA082 + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + str r1, [r0, #0x264] + bx lr + .balign 4 +_020A6E48: .word 0x021CA86C +_020A6E4C: .word 0x00AAA082 + + arm_func_start FUN_020A6E50 +FUN_020A6E50: ; 0x020A6E50 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r0, r2 + mov r4, r1 + bl FUN_020A7148 + ldr r2, _020A6FF4 ; =0x021CA86C + mov r3, #0x400 + ldr r1, [r2, #0x0] + mov r0, #0x0 + add r12, r1, #0x1500 + add r1, r1, #0x2000 + str r12, [r1, #0x288] + ldr r1, [r2, #0x0] + add r1, r1, #0x2200 + strh r3, [r1, #0x8c] + bl FUN_020A6D8C + ldr r1, _020A6FF4 ; =0x021CA86C + mov r2, #0x1 + mov r2, r2, lsl r0 + ldr r0, [r1, #0x0] + mov r2, r2, asr #0x1 + add r0, r0, #0x2200 + strh r2, [r0, #0x8e] + ldr r0, [r1, #0x0] + add r0, r0, #0x2200 + ldrh r0, [r0, #0x68] + cmp r0, #0x0 + bne _020A6EC8 + bl WM_GetDispersionScanPeriod +_020A6EC8: + ldr r2, _020A6FF4 ; =0x021CA86C + ldr r1, [r2, #0x0] + add r1, r1, #0x2200 + strh r0, [r1, #0x90] + ldr r1, [r2, #0x0] + add r0, r1, #0x2000 + ldr r0, [r0, #0x264] + and r0, r0, #0x300000 + cmp r0, #0x300000 + movne r2, #0x1 + moveq r2, #0x0 + add r0, r1, #0x2200 + strh r2, [r0, #0x98] + cmp r5, #0x0 + bne _020A6F24 + ldr r0, _020A6FF4 ; =0x021CA86C + ldr r1, _020A6FF8 ; =0x00002292 + ldr r2, [r0, #0x0] + ldr r0, _020A6FFC ; =0x020FF590 + add r1, r2, r1 + mov r2, #0x6 + bl MI_CpuCopy8 + b _020A6F40 +_020A6F24: + ldr r0, _020A6FF4 ; =0x021CA86C + ldr r1, _020A6FF8 ; =0x00002292 + ldr r2, [r0, #0x0] + mov r0, r5 + add r1, r2, r1 + mov r2, #0x6 + bl MI_CpuCopy8 +_020A6F40: + cmp r4, #0x0 + beq _020A6F54 + ldr r0, _020A7000 ; =0x020FF598 + cmp r4, r0 + bne _020A6F88 +_020A6F54: + ldr r0, _020A6FF4 ; =0x021CA86C + ldr r1, _020A7004 ; =0x0000229C + ldr r2, [r0, #0x0] + ldr r0, _020A7000 ; =0x020FF598 + add r1, r2, r1 + mov r2, #0x20 + bl MI_CpuCopy8 + ldr r0, _020A6FF4 ; =0x021CA86C + mov r1, #0x0 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x9a] + b _020A6FD4 +_020A6F88: + ldr r0, _020A6FF4 ; =0x021CA86C + ldr r1, _020A7004 ; =0x0000229C + ldr r2, [r0, #0x0] + mov r0, r4 + add r1, r2, r1 + mov r2, #0x20 + bl MI_CpuCopy8 + mov r1, #0x0 +_020A6FA8: + ldrb r0, [r4, #0x0] + cmp r0, #0x0 + beq _020A6FC4 + add r1, r1, #0x1 + cmp r1, #0x20 + add r4, r4, #0x1 + blt _020A6FA8 +_020A6FC4: + ldr r0, _020A6FF4 ; =0x021CA86C + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x9a] +_020A6FD4: + ldr r0, _020A6FF4 ; =0x021CA86C + mov r1, #0x0 + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + str r1, [r0, #0x284] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A6FF4: .word 0x021CA86C +_020A6FF8: .word 0x00002292 +_020A6FFC: .word 0x020FF590 +_020A7000: .word 0x020FF598 +_020A7004: .word 0x0000229C + + arm_func_start FUN_020A7008 +FUN_020A7008: ; 0x020A7008 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + movs r5, r0 + mov r4, r1 + bne _020A705C + ldr r1, _020A7134 ; =0x021CA86C + mov r3, #0x3 + ldr r0, [r1, #0x0] + mov r2, #0x0 + add r0, r0, #0x2000 + str r3, [r0, #0x26c] + ldr r0, [r1, #0x0] + add r0, r0, #0x2000 + str r2, [r0, #0x270] + ldr r0, [r1, #0x0] + add r0, r0, #0x2000 + str r2, [r0, #0x274] + ldr r0, [r1, #0x0] + add r0, r0, #0x2000 + str r2, [r0, #0x278] + b _020A7118 +_020A705C: + ldr r1, _020A7134 ; =0x021CA86C + ldr r2, [r5, #0x0] + ldr r0, [r1, #0x0] + and r2, r2, #0x3 + add r0, r0, #0x2000 + str r2, [r0, #0x26c] + ldr r3, [r5, #0x4] + ldr r0, [r5, #0x8] + and r2, r3, #0x3 + rsb r2, r2, #0x4 + and r2, r2, #0x3 + add r2, r2, #0xc + cmp r2, r0 + bls _020A70B4 + ldr r0, [r1, #0x0] + mov r2, #0x0 + add r0, r0, #0x2000 + str r2, [r0, #0x270] + ldr r0, [r1, #0x0] + add r0, r0, #0x2000 + str r2, [r0, #0x274] + b _020A7104 +_020A70B4: + ldr r0, [r1, #0x0] + add r2, r3, #0x3 + bic r2, r2, #0x3 + add r0, r0, #0x2000 + str r2, [r0, #0x270] + ldr r2, [r5, #0x4] + ldr r0, [r1, #0x0] + and r2, r2, #0x3 + rsb r2, r2, #0x4 + ldr r3, [r5, #0x8] + and r2, r2, #0x3 + sub r2, r3, r2 + add r0, r0, #0x2000 + str r2, [r0, #0x274] + ldr r0, [r1, #0x0] + mov r1, #0x0 + add r2, r0, #0x2000 + ldr r0, [r2, #0x270] + ldr r2, [r2, #0x274] + bl MI_CpuFill8 +_020A7104: + ldr r0, _020A7134 ; =0x021CA86C + ldr r1, [r5, #0xc] + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + str r1, [r0, #0x278] +_020A7118: + ldr r0, _020A7134 ; =0x021CA86C + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + str r4, [r0, #0x27c] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A7134: .word 0x021CA86C + + arm_func_start FUN_020A7138 +FUN_020A7138: + ldr r0, _020A7144 ; =0x021CA86C + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020A7144: .word 0x021CA86C + + arm_func_start FUN_020A7148 +FUN_020A7148: ; 0x020A7148 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020A71EC ; =0x021CA86C + mov r2, #0x0 + ldr r1, [r1, #0x0] + add r3, r1, #0x2000 + cmp r1, #0x0 + ldr r4, [r3, #0x264] + bne _020A7188 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r5,lr} + bx lr +_020A7188: + ands r3, r5, #0x8000 + beq _020A71A4 + ldr r3, _020A71F0 ; =0x00003FFE + orr r2, r2, r3 + ands r3, r5, r3 + ldreq r3, _020A71F4 ; =0x0000A082 + orreq r5, r5, r3 +_020A71A4: + ands r3, r5, #0x20000 + orrne r2, r2, #0x10000 + ands r3, r5, #0x80000 + orrne r2, r2, #0x40000 + ands r3, r5, #0x200000 + orrne r2, r2, #0x100000 + ands r3, r5, #0x800000 + orrne r2, r2, #0x400000 + mvn r2, r2 + and r2, r4, r2 + orr r2, r5, r2 + add r1, r1, #0x2000 + str r2, [r1, #0x264] + bl OS_RestoreInterrupts + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A71EC: .word 0x021CA86C +_020A71F0: .word 0x00003FFE +_020A71F4: .word 0x0000A082 + + arm_func_start FUN_020A71F8 +FUN_020A71F8: ; 0x020A71F8 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020A7228 ; =0x021CA86C + mov r4, #0x0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + addne r1, r1, #0x2000 + ldrne r4, [r1, #0x260] + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A7228: .word 0x021CA86C + + arm_func_start FUN_020A722C +FUN_020A722C: ; 0x020A722C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r1, _020A747C ; =0x021CA86C + mov r4, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + bne _020A7260 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r5,lr} + bx lr +_020A7260: + add r1, r1, #0x2000 + ldr r2, [r1, #0x260] + cmp r2, #0xd + addls pc, pc, r2, lsl #0x2 + b _020A7308 +_020A7274: + b _020A7308 +_020A7278: + b _020A72C0 +_020A727C: + b _020A7308 +_020A7280: + b _020A7320 +_020A7284: + b _020A7308 +_020A7288: + b _020A7308 +_020A728C: + b _020A72D4 +_020A7290: + b _020A7308 +_020A7294: + b _020A7308 +_020A7298: + b _020A7320 +_020A729C: + b _020A7308 +_020A72A0: + b _020A7308 +_020A72A4: + b _020A7320 +_020A72A8: + b _020A72AC +_020A72AC: + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x2 + ldmia sp!, {r4-r5,lr} + bx lr +_020A72C0: + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r5,lr} + bx lr +_020A72D4: + mov r0, #0xd + bl FUN_020A6C38 + ldr r1, _020A747C ; =0x021CA86C + mov r0, r4 + ldr r1, [r1, #0x0] + mov r2, #0x9 + add r1, r1, #0x2200 + strh r2, [r1, #0x80] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x3 + ldmia sp!, {r4-r5,lr} + bx lr +_020A7308: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r5,lr} + bx lr +_020A7320: + ldrb r0, [r1, #0x26b] + cmp r0, #0x1 + bne _020A734C + mov r0, #0xd + bl FUN_020A6C38 + ldr r0, _020A747C ; =0x021CA86C + mov r1, #0x9 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A7464 +_020A734C: + bl WMi_GetStatusAddress + mov r5, r0 + mov r1, #0x2 + bl DC_InvalidateRange + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + beq _020A737C + cmp r0, #0x1 + beq _020A73BC + cmp r0, #0x2 + beq _020A73C8 + b _020A73D4 +_020A737C: + bl WM_Finish +_020A7380: ; 0x020A7380 + cmp r0, #0x0 + bne _020A73F0 + mov r0, #0x1 + bl FUN_020A6C38 + ldr r1, _020A747C ; =0x021CA86C + mov r0, r4 + ldr r1, [r1, #0x0] + mov r2, #0x0 + add r1, r1, #0x2200 + strh r2, [r1, #0x80] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r5,lr} + bx lr +_020A73BC: + ldr r0, _020A7480 ; =FUN_020A6768 + bl WM_Disable + b _020A73F0 +_020A73C8: + ldr r0, _020A7480 ; =FUN_020A6768 + bl WM_PowerOff + b _020A73F0 +_020A73D4: + ldr r1, _020A747C ; =0x021CA86C + ldr r0, _020A7484 ; =FUN_020A5A78 + ldr r1, [r1, #0x0] + mov r2, #0x1 + add r1, r1, #0x2000 + strb r2, [r1, #0x26b] + bl WM_Reset +_020A73F0: + cmp r0, #0x2 + beq _020A740C + cmp r0, #0x3 + beq _020A7444 + cmp r0, #0x8 + beq _020A742C + b _020A7444 +_020A740C: + mov r0, #0xd + bl FUN_020A6C38 + ldr r0, _020A747C ; =0x021CA86C + mov r1, #0x9 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A7464 +_020A742C: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020A7444: + mov r0, #0xb + bl FUN_020A6C38 + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x7 + ldmia sp!, {r4-r5,lr} + bx lr +_020A7464: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A747C: .word 0x021CA86C +_020A7480: .word FUN_020A6768 +_020A7484: .word FUN_020A5A78 + + arm_func_start FUN_020A7488 +FUN_020A7488: ; 0x020A7488 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020A75B8 ; =0x021CA86C + mov r4, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + bne _020A74B4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4,lr} + bx lr +_020A74B4: + add r1, r1, #0x2000 + ldr r2, [r1, #0x260] + cmp r2, #0x3 + beq _020A74E4 + cmp r2, #0x9 + beq _020A7504 + cmp r2, #0xa + bne _020A74F4 + bl OS_RestoreInterrupts + mov r0, #0x2 + ldmia sp!, {r4,lr} + bx lr +_020A74E4: + bl OS_RestoreInterrupts +_020A74E8: ; 0x020A74E8 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020A74F4: + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4,lr} + bx lr +_020A7504: + ldrb r0, [r1, #0x26b] + cmp r0, #0x1 + bne _020A7530 + mov r0, #0xa + bl FUN_020A6C38 + ldr r0, _020A75B8 ; =0x021CA86C + mov r1, #0x6 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A75A4 +_020A7530: + ldr r0, _020A75BC ; =FUN_020A5DDC + bl WM_EndDCF + cmp r0, #0x2 + beq _020A7554 + cmp r0, #0x3 + beq _020A7588 + cmp r0, #0x8 + beq _020A7574 + b _020A7588 +_020A7554: + mov r0, #0xa + bl FUN_020A6C38 + ldr r0, _020A75B8 ; =0x021CA86C + mov r1, #0x6 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A75A4 +_020A7574: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x4 + ldmia sp!, {r4,lr} + bx lr +_020A7588: + mov r0, #0xb + bl FUN_020A6C38 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x7 + ldmia sp!, {r4,lr} + bx lr +_020A75A4: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A75B8: .word 0x021CA86C +_020A75BC: .word FUN_020A5DDC + + arm_func_start FUN_020A75C0 +FUN_020A75C0: ; 0x020A75C0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl OS_DisableInterrupts + ldr r2, _020A7814 ; =0x021CA86C + mov r4, r0 + ldr r12, [r2, #0x0] + cmp r12, #0x0 + bne _020A7600 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7600: + add r1, r12, #0x2000 + ldr r3, [r1, #0x260] + cmp r3, #0x3 + beq _020A7624 + cmp r3, #0x8 + beq _020A7734 + cmp r3, #0x9 + beq _020A7748 + b _020A775C +_020A7624: + cmp r7, #0x0 + bne _020A7640 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7640: + ldrh r3, [r7, #0x3c] + cmp r3, #0x0 + beq _020A7660 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7660: + cmp r6, #0x0 + beq _020A76E8 + ldrb r3, [r6, #0x0] + cmp r3, #0x4 + bhs _020A7680 + ldrb r0, [r6, #0x1] + cmp r0, #0x4 + blo _020A7698 +_020A7680: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7698: + strb r3, [r1, #0x250] + ldr r0, [r2, #0x0] + ldrb r1, [r6, #0x1] + add r0, r0, #0x2000 + strb r1, [r0, #0x251] + ldr r1, [r2, #0x0] + add r0, r1, #0x2000 + ldrb r0, [r0, #0x250] + cmp r0, #0x0 + bne _020A76D4 + add r0, r1, #0x2200 + mov r1, #0x0 + mov r2, #0x50 + bl MI_CpuFill8 + b _020A76F8 +_020A76D4: + add r0, r6, #0x2 + add r1, r1, #0x2200 + mov r2, #0x50 + bl MI_CpuCopy8 + b _020A76F8 +_020A76E8: + add r0, r12, #0x2200 + mov r1, #0x0 + mov r2, #0x52 + bl MI_CpuFill8 +_020A76F8: + ldr r1, _020A7814 ; =0x021CA86C + mov r0, r7 + ldr r1, [r1, #0x0] + mov r2, #0xc0 + add r1, r1, #0x2140 + bl MI_CpuCopy8 + ldr r1, _020A7814 ; =0x021CA86C + mov r0, r5 + ldr r1, [r1, #0x0] + add r1, r1, #0x2100 + ldrh r2, [r1, #0x6e] + orr r2, r2, #0x3 + strh r2, [r1, #0x70] + bl FUN_020A7148 + b _020A7770 +_020A7734: + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x2 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7748: + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020A775C: + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7770: + ldr r1, _020A7818 ; =0x0000FFFF + ldr r0, _020A781C ; =FUN_020A6768 + mov r3, r1 + mov r2, #0x50 + str r1, [sp, #0x0] + bl WM_SetLifeTime + cmp r0, #0x2 + beq _020A77A4 + cmp r0, #0x3 + beq _020A77DC + cmp r0, #0x8 + beq _020A77C4 + b _020A77DC +_020A77A4: + mov r0, #0x8 + bl FUN_020A6C38 + ldr r0, _020A7814 ; =0x021CA86C + mov r1, #0x5 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A77FC +_020A77C4: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_020A77DC: + mov r0, #0xb + bl FUN_020A6C38 + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x7 + ldmia sp!, {r4-r7,lr} + bx lr +_020A77FC: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020A7814: .word 0x021CA86C +_020A7818: .word 0x0000FFFF +_020A781C: .word FUN_020A6768 + + arm_func_start FUN_020A7820 +FUN_020A7820: ; 0x020A7820 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020A78D4 ; =0x021CA86C + mov r4, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + bne _020A784C + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4,lr} + bx lr +_020A784C: + add r1, r1, #0x2000 + ldr r1, [r1, #0x260] + cmp r1, #0x3 + beq _020A78A0 + cmp r1, #0x6 + beq _020A7870 + cmp r1, #0x7 + beq _020A7890 + b _020A78B0 +_020A7870: + mov r0, #0x7 + bl FUN_020A6C38 + ldr r0, _020A78D4 ; =0x021CA86C + mov r1, #0x4 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A78C0 +_020A7890: + bl OS_RestoreInterrupts + mov r0, #0x2 + ldmia sp!, {r4,lr} + bx lr +_020A78A0: + bl OS_RestoreInterrupts +_020A78A4: ; 0x020A78A4 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020A78B0: + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4,lr} + bx lr +_020A78C0: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A78D4: .word 0x021CA86C + + arm_func_start FUN_020A78D8 +FUN_020A78D8: ; 0x020A78D8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl OS_DisableInterrupts + ldr r1, _020A7A84 ; =0x021CA86C + mov r4, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + bne _020A7918 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7918: + add r1, r1, #0x2000 + ldr r1, [r1, #0x260] + cmp r1, #0x3 + beq _020A79A0 + cmp r1, #0x5 + beq _020A793C + cmp r1, #0x6 + beq _020A7964 + b _020A798C +_020A793C: + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl FUN_020A6E50 + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x2 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7964: + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl FUN_020A6E50 + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020A798C: + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020A79A0: + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl FUN_020A6E50 + ldr r0, _020A7A84 ; =0x021CA86C + ldr r0, [r0, #0x0] + add r1, r0, #0x2200 + add r0, r0, #0x2000 + ldrh r1, [r1, #0x8c] + ldr r0, [r0, #0x288] + bl DC_InvalidateRange + ldr r3, _020A7A84 ; =0x021CA86C + ldr r2, _020A7A88 ; =0x00002288 + ldr r1, [r3, #0x0] + ldr r0, _020A7A8C ; =FUN_020A6468 + add r1, r1, #0x2000 + ldr r5, [r1, #0x284] + add r5, r5, #0x1 + str r5, [r1, #0x284] + ldr r1, [r3, #0x0] + add r1, r1, r2 + bl WM_StartScanEx + cmp r0, #0x2 + beq _020A7A14 + cmp r0, #0x3 + beq _020A7A4C + cmp r0, #0x8 + beq _020A7A34 + b _020A7A4C +_020A7A14: + mov r0, #0x5 + bl FUN_020A6C38 + ldr r0, _020A7A84 ; =0x021CA86C + mov r1, #0x3 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A7A6C +_020A7A34: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7A4C: + mov r0, #0xb + bl FUN_020A6C38 + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x7 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7A6C: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020A7A84: .word 0x021CA86C +_020A7A88: .word 0x00002288 +_020A7A8C: .word FUN_020A6468 + + arm_func_start FUN_020A7A90 +FUN_020A7A90: ; 0x020A7A90 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + beq _020A7AA8 + cmp r1, #0x0 + bne _020A7AB8 +_020A7AA8: + bl FUN_020A7820 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A7AB8: + bl FUN_020A78D8 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_020A7AC8 +FUN_020A7AC8: ; 0x020A7AC8 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020A7BCC ; =0x021CA86C + mov r4, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + bne _020A7AF4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4,lr} + bx lr +_020A7AF4: + add r1, r1, #0x2000 + ldr r1, [r1, #0x260] + cmp r1, #0x1 + beq _020A7B24 + cmp r1, #0x3 + beq _020A7B44 + cmp r1, #0x4 + bne _020A7B34 + bl OS_RestoreInterrupts + mov r0, #0x2 + ldmia sp!, {r4,lr} + bx lr +_020A7B24: + bl OS_RestoreInterrupts +_020A7B28: ; 0x020A7B28 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020A7B34: + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4,lr} + bx lr +_020A7B44: + ldr r0, _020A7BD0 ; =FUN_020A6768 + bl WM_PowerOff + cmp r0, #0x2 + beq _020A7B68 + cmp r0, #0x3 + beq _020A7B9C + cmp r0, #0x8 + beq _020A7B88 + b _020A7B9C +_020A7B68: + mov r0, #0x4 + bl FUN_020A6C38 + ldr r0, _020A7BCC ; =0x021CA86C + mov r1, #0x2 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A7BB8 +_020A7B88: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x4 + ldmia sp!, {r4,lr} + bx lr +_020A7B9C: + mov r0, #0xb + bl FUN_020A6C38 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x7 + ldmia sp!, {r4,lr} + bx lr +_020A7BB8: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A7BCC: .word 0x021CA86C +_020A7BD0: .word FUN_020A6768 + + arm_func_start FUN_020A7BD4 +FUN_020A7BD4: ; 0x020A7BD4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + bl OS_DisableInterrupts + ldr r1, _020A7E00 ; =0x021CA86C + mov r4, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + bne _020A7C08 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7C08: + add r1, r1, #0x2000 + ldr r1, [r1, #0x260] + cmp r1, #0x1 + beq _020A7C2C + cmp r1, #0x2 + beq _020A7C3C + cmp r1, #0x3 + beq _020A7C4C + b _020A7C5C +_020A7C2C: + mov r0, r6 + mov r1, r5 + bl FUN_020A7008 + b _020A7C6C +_020A7C3C: + bl OS_RestoreInterrupts + mov r0, #0x2 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7C4C: + bl OS_RestoreInterrupts +_020A7C50: ; 0x020A7C50 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7C5C: + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7C6C: + ldr r0, _020A7E00 ; =0x021CA86C + ldr r0, [r0, #0x0] + add r1, r0, #0x2000 + ldr r1, [r1, #0x26c] + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + bl WM_Init + cmp r0, #0x6 + addls pc, pc, r0, lsl #0x2 + b _020A7CE0 +_020A7C94: + b _020A7CFC +_020A7C98: + b _020A7CE0 +_020A7C9C: + b _020A7CE0 +_020A7CA0: + b _020A7CB0 +_020A7CA4: + b _020A7CCC +_020A7CA8: + b _020A7CE0 +_020A7CAC: + b _020A7CE0 +_020A7CB0: + mov r0, #0xb + bl FUN_020A6C38 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x7 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7CCC: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x5 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7CE0: + mov r0, #0xb + bl FUN_020A6C38 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x7 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7CFC: + bl WM_GetAllowedChannel +_020A7D00: ; 0x020A7D00 + cmp r0, #0x0 + bne _020A7D44 + bl WM_Finish +_020A7D0C: ; 0x020A7D0C + cmp r0, #0x0 + beq _020A7D30 + mov r0, #0xb + bl FUN_020A6C38 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x7 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7D30: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x5 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7D44: + ldr r0, _020A7E04 ; =FUN_020A6A74 + bl WM_SetIndCallback +_020A7D4C: ; 0x020A7D4C + cmp r0, #0x0 + beq _020A7D70 + mov r0, #0xb + bl FUN_020A6C38 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x7 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7D70: + ldr r0, _020A7E08 ; =FUN_020A6768 + bl WM_Enable + cmp r0, #0x2 + beq _020A7D94 + cmp r0, #0x3 + beq _020A7DD0 + cmp r0, #0x8 + beq _020A7DB4 + b _020A7DD0 +_020A7D94: + mov r0, #0x2 + bl FUN_020A6C38 + ldr r0, _020A7E00 ; =0x021CA86C + mov r1, #0x1 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A7DEC +_020A7DB4: + mov r0, #0xc + bl FUN_020A6C38 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7DD0: + mov r0, #0xb + bl FUN_020A6C38 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x7 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7DEC: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A7E00: .word 0x021CA86C +_020A7E04: .word FUN_020A6A74 +_020A7E08: .word FUN_020A6768 + + arm_func_start FUN_020A7E0C +FUN_020A7E0C: ; 0x020A7E0C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r2, _020A7E7C ; =0x021CA86C + ldr r1, [r2, #0x0] + cmp r1, #0x0 + bne _020A7E3C + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {lr} + bx lr +_020A7E3C: + add r1, r1, #0x2000 + ldr r1, [r1, #0x260] + cmp r1, #0x1 + beq _020A7E60 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {lr} + bx lr +_020A7E60: + mov r1, #0x0 + str r1, [r2, #0x0] + bl OS_RestoreInterrupts +_020A7E6C: ; 0x020A7E6C + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A7E7C: .word 0x021CA86C + + arm_func_start FUN_020A7E80 +FUN_020A7E80: ; 0x020A7E80 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + bl OS_DisableInterrupts + ldr r2, _020A7FA8 ; =0x021CA86C + mov r4, r0 + ldr r1, [r2, #0x0] + cmp r1, #0x0 + beq _020A7EB4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7EB4: + cmp r6, #0x0 + bne _020A7ECC + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7ECC: + ands r1, r6, #0x1f + beq _020A7EE4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7EE4: + cmp r5, #0x2300 + bhs _020A7EFC + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7EFC: + str r6, [r2, #0x0] + add r0, r6, #0x2000 + mov r1, #0x1 + str r1, [r0, #0x260] + ldr r1, [r2, #0x0] + mov r0, #0x0 + add r1, r1, #0x2200 + strh r0, [r1, #0x80] + ldr r1, [r2, #0x0] + add r1, r1, #0x2200 + strh r0, [r1, #0x68] + ldr r1, [r2, #0x0] + add r1, r1, #0x2000 + strb r0, [r1, #0x26a] + ldr r1, [r2, #0x0] + add r1, r1, #0x2000 + strb r0, [r1, #0x26b] + ldr r1, [r2, #0x0] + add r1, r1, #0x2200 + strh r0, [r1, #0x82] + ldr r1, [r2, #0x0] + add r1, r1, #0x2200 + strh r0, [r1, #0xf8] + bl FUN_020A6E30 + bl FUN_020A897C + bl OS_IsTickAvailable +_020A7F64: ; 0x020A7F64 + cmp r0, #0x0 + bne _020A7F70 + bl OS_InitTick +_020A7F70: + bl OS_IsAlarmAvailable +_020A7F74: ; 0x020A7F74 + cmp r0, #0x0 + bne _020A7F80 + bl OS_InitAlarm +_020A7F80: + ldr r1, _020A7FA8 ; =0x021CA86C + ldr r0, _020A7FAC ; =0x000022CC + ldr r1, [r1, #0x0] + add r0, r1, r0 + bl OS_CreateAlarm + mov r0, r4 + bl OS_RestoreInterrupts +_020A7F9C: ; 0x020A7F9C + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A7FA8: .word 0x021CA86C +_020A7FAC: .word 0x000022CC + + arm_func_start FUN_020A7FB0 +FUN_020A7FB0: ; 0x020A7FB0 + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020A7138 + add r1, r0, #0x2000 + cmp r4, #0x0 + ldr r0, [r1, #0x270] + ldmeqia sp!, {r4,lr} + bxeq lr + cmp r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r1, [r1, #0x274] + cmp r1, #0xc + ldmlsia sp!, {r4,lr} + bxls lr + ldr r3, [r0, #0x4] + cmp r3, #0x0 + beq _020A8040 +_020A7FF8: + cmp r3, r4 + bne _020A8034 + ldr r2, [r3, #0x8] + cmp r2, #0x0 + ldrne r1, [r3, #0xc] + strne r1, [r2, #0xc] + ldreq r1, [r3, #0xc] + streq r1, [r0, #0x4] + ldr r2, [r3, #0xc] + cmp r2, #0x0 + ldrne r1, [r3, #0x8] + strne r1, [r2, #0x8] + ldreq r1, [r3, #0x8] + streq r1, [r0, #0x8] + b _020A8040 +_020A8034: + ldr r3, [r3, #0xc] + cmp r3, #0x0 + bne _020A7FF8 +_020A8040: + mov r1, #0x0 + str r1, [r4, #0xc] + ldr r1, [r0, #0x8] + str r1, [r4, #0x8] + str r4, [r0, #0x8] + ldr r1, [r4, #0x8] + cmp r1, #0x0 + strne r4, [r1, #0xc] + streq r4, [r0, #0x4] + cmp r3, #0x0 + ldreq r1, [r0, #0x0] + streq r1, [r4, #0x4] + ldreq r1, [r0, #0x0] + addeq r1, r1, #0x1 + streq r1, [r0, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020A8084 +FUN_020A8084: ; 0x020A8084 + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020A7138 + add r1, r0, #0x2000 + ldr r2, [r1, #0x270] + mov r0, #0x0 + cmp r2, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r1, [r1, #0x274] + cmp r1, #0xc + ldmlsia sp!, {r4,lr} + bxls lr + ldr r0, [r2, #0x4] + cmp r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr +_020A80C8: + ldr r1, [r0, #0x4] + cmp r1, r4 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r0, [r0, #0xc] + cmp r0, #0x0 + bne _020A80C8 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020A80EC +FUN_020A80EC: ; 0x020A80EC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl FUN_020A7138 + add r0, r0, #0x2000 + cmp r5, #0x0 + mov r4, #0x0 + ldr r1, [r0, #0x270] + addeq sp, sp, #0x4 + moveq r0, r4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + cmp r1, #0x0 + beq _020A8160 + ldr r0, [r0, #0x274] + cmp r0, #0xc + bls _020A8160 + ldr r4, [r1, #0x4] + cmp r4, #0x0 + beq _020A8160 +_020A813C: + add r0, r4, #0x10 + mov r1, r5 + add r0, r0, #0x4 + bl FUN_020A8B78 +_020A814C: ; 0x020A814C + cmp r0, #0x0 + bne _020A8160 + ldr r4, [r4, #0xc] + cmp r4, #0x0 + bne _020A813C +_020A8160: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_020A8170 +FUN_020A8170: ; 0x020A8170 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FUN_020A7138 + add r0, r0, #0x2000 + ldr r1, [r0, #0x270] + cmp r1, #0x0 + beq _020A81A4 + ldr r0, [r0, #0x274] + cmp r0, #0xc + addhi sp, sp, #0x4 + ldrhi r0, [r1, #0x4] + ldmhiia sp!, {lr} + bxhi lr +_020A81A4: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_020A81B4 +FUN_020A81B4: ; 0x020A81B4 + stmdb sp!, {r4,lr} + bl FUN_020A7138 + add r2, r0, #0x2000 + ldr r1, [r2, #0x270] + mov r0, #0x0 + cmp r1, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r3, [r2, #0x274] + cmp r3, #0xc + ldmlsia sp!, {r4,lr} + bxls lr + ldr r2, _020A8294 ; =0x4EC4EC4F + sub r3, r3, #0xc + umull r2, r4, r3, r2 + movs r4, r4, lsr #0x6 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r2, [r1, #0x0] + cmp r4, r2 + ldmlsia sp!, {r4,lr} + bxls lr + mov lr, r0 + cmp r4, #0x0 + bls _020A8240 + add r12, r1, #0xc + mov r2, #0xd0 +_020A8220: + mul r0, lr, r2 + ldrb r3, [r12, r0] + add r0, r12, r0 + cmp r3, #0x0 + beq _020A8240 + add lr, lr, #0x1 + cmp lr, r4 + blo _020A8220 +_020A8240: + cmp lr, r4 + ldmcsia sp!, {r4,lr} + bxcs lr + mov r2, #0x1 + strb r2, [r0, #0x0] + ldr r3, [r1, #0x0] + mov r2, #0x0 + str r3, [r0, #0x4] + str r2, [r0, #0xc] + ldr r2, [r1, #0x8] + str r2, [r0, #0x8] + str r0, [r1, #0x8] + ldr r2, [r0, #0x8] + cmp r2, #0x0 + strne r0, [r2, #0xc] + streq r0, [r1, #0x4] + ldr r2, [r1, #0x0] + add r2, r2, #0x1 + str r2, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A8294: .word 0x4EC4EC4F + + arm_func_start FUN_020A8298 +FUN_020A8298: ; 0x020A8298 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl FUN_020A7138 + movs r7, r0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + add r0, r7, #0x2000 + ldrb r0, [r0, #0x26a] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + ldrh r0, [r5, #0x3c] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + add r0, r5, #0x4 + bl FUN_020A80EC + movs r6, r0 + bne _020A8300 + bl FUN_020A81B4 + mov r6, r0 +_020A8300: + cmp r6, #0x0 + bne _020A8320 + add r0, r7, #0x2000 + ldr r0, [r0, #0x278] + cmp r0, #0x1 + bne _020A8320 + bl FUN_020A8170 + mov r6, r0 +_020A8320: + cmp r6, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r5 + add r1, r6, #0x10 + mov r2, #0xc0 + strh r4, [r6, #0x2] + bl MIi_CpuCopyFast + mov r0, r6 + bl FUN_020A7FB0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FUN_020A8358 +FUN_020A8358: ; 0x020A8358 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + bl OS_DisableInterrupts + mov r5, r0 + bl FUN_020A7138 +_020A8370: ; 0x020A8370 + cmp r0, #0x0 + bne _020A8390 + mov r0, r5 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r5,lr} + bx lr +_020A8390: + mov r0, r4 + bl FUN_020A8084 + movs r4, r0 + bne _020A83B8 + mov r0, r5 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r5,lr} + bx lr +_020A83B8: + mov r0, r5 + bl OS_RestoreInterrupts + add r0, r4, #0x10 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_020A83D0 +FUN_020A83D0: ; 0x020A83D0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + mov r4, r0 + bl FUN_020A7138 +_020A83E8: ; 0x020A83E8 + cmp r0, #0x0 + bne _020A8408 + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r5,lr} + bx lr +_020A8408: + cmp r5, #0x0 + beq _020A8434 + add r1, r0, #0x2000 + ldrb r1, [r1, #0x26a] + add r0, r0, #0x2000 + cmp r1, #0x0 + movne r5, #0x1 + mov r1, #0x1 + moveq r5, #0x0 + strb r1, [r0, #0x26a] + b _020A8454 +_020A8434: + add r1, r0, #0x2000 + ldrb r1, [r1, #0x26a] + add r0, r0, #0x2000 + cmp r1, #0x0 + movne r5, #0x1 + mov r1, #0x0 + moveq r5, #0x0 + strb r1, [r0, #0x26a] +_020A8454: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_020A846C +FUN_020A846C: ; 0x020A846C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + mov r5, r0 + bl FUN_020A7138 +_020A8480: ; 0x020A8480 + cmp r0, #0x0 + mov r4, #0x0 + bne _020A84A4 + mov r0, r5 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, r4 + ldmia sp!, {r4-r5,lr} + bx lr +_020A84A4: + add r0, r0, #0x2000 + ldr r1, [r0, #0x270] + cmp r1, #0x0 + beq _020A84C0 + ldr r0, [r0, #0x274] + cmp r0, #0xc + ldrhi r4, [r1, #0x0] +_020A84C0: + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_020A84D8 +FUN_020A84D8: ; 0x020A84D8 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + mov r4, r0 + bl FUN_020A7138 +_020A84E8: ; 0x020A84E8 + cmp r0, #0x0 + bne _020A8500 + mov r0, r4 + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr +_020A8500: + add r1, r0, #0x2000 + ldr r0, [r1, #0x270] + cmp r0, #0x0 + beq _020A8524 + ldr r2, [r1, #0x274] + cmp r2, #0x0 + ble _020A8524 + mov r1, #0x0 + bl MI_CpuFill8 +_020A8524: + mov r0, r4 + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020A8534 +FUN_020A8534: ; 0x020A8534 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x8] + ldr r1, _020A858C ; =0x01FF8000 + cmp r2, r1 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r1, [r0, #0xc] + sub r1, r1, #0x1 + str r1, [r0, #0xc] + ldr r1, [r0, #0xc] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + mov r1, #0x0 + str r1, [r0, #0x8] + bl OS_WakeupThread + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A858C: .word 0x01FF8000 + + arm_func_start FUN_020A8590 +FUN_020A8590: + ldr r2, [r0, #0x8] + cmp r2, #0x0 + bne _020A85B8 + ldr r1, _020A85D8 ; =0x01FF8000 + str r1, [r0, #0x8] + ldr r1, [r0, #0xc] + add r1, r1, #0x1 + str r1, [r0, #0xc] + mov r0, #0x1 + bx lr +_020A85B8: + ldr r1, _020A85D8 ; =0x01FF8000 + cmp r2, r1 + ldreq r1, [r0, #0xc] + addeq r1, r1, #0x1 + streq r1, [r0, #0xc] + moveq r0, #0x1 + movne r0, #0x0 + bx lr + .balign 4 +_020A85D8: .word 0x01FF8000 + + arm_func_start FUN_020A85DC +FUN_020A85DC: ; 0x020A85DC + ldr ip, _020A85E8 ; =FUN_020A8534 + ldr r0, _020A85EC ; =0x021CA87C + bx r12 + .balign 4 +_020A85E8: .word FUN_020A8534 +_020A85EC: .word 0x021CA87C + + arm_func_start FUN_020A85F0 +FUN_020A85F0: ; 0x020A85F0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r1, [r0, #0x0] + cmp r1, #0x12 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldrh r2, [r0, #0x2] + ldr r1, _020A863C ; =0x021CA870 + str r2, [r1, #0x24] + ldrh r0, [r0, #0x2] + cmp r0, #0x0 + bne _020A8628 + bl FUN_020A6BBC +_020A8628: + ldr r0, _020A8640 ; =0x021CA874 + bl OS_WakeupThread + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A863C: .word 0x021CA870 +_020A8640: .word 0x021CA874 + + arm_func_start FUN_020A8644 +FUN_020A8644: + stmdb sp!, {r4-r8,lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + bl OS_DisableInterrupts + mov r5, r0 + bl FUN_020A7138 +_020A8660: ; 0x020A8660 + cmp r0, #0x0 + bne _020A867C + mov r0, r5 + bl OS_RestoreInterrupts +_020A8670: ; 0x020A8670 + mvn r0, #0x0 + ldmia sp!, {r4-r8,lr} + bx lr +_020A867C: + ldr r0, _020A87AC ; =0x021CA87C + bl OS_LockMutex + bl FUN_020A7138 + movs r4, r0 + bne _020A86AC + ldr r0, _020A87AC ; =0x021CA87C + bl OS_UnlockMutex + mov r0, r5 + bl OS_RestoreInterrupts +_020A86A0: ; 0x020A86A0 + mvn r0, #0x0 + ldmia sp!, {r4-r8,lr} + bx lr +_020A86AC: + add r0, r4, #0x2000 + ldr r1, [r0, #0x260] + cmp r1, #0x9 + bne _020A86C8 + ldrb r0, [r0, #0x26b] + cmp r0, #0x1 + bne _020A86E4 +_020A86C8: + ldr r0, _020A87AC ; =0x021CA87C + bl OS_UnlockMutex + mov r0, r5 + bl OS_RestoreInterrupts + mvn r0, #0x3 + ldmia sp!, {r4-r8,lr} + bx lr +_020A86E4: + mov r0, r7 + mov r2, r6 + add r1, r4, #0xf00 + bl MI_CpuCopy8 + mov r3, r6, lsl #0x10 + ldr r0, _020A87B0 ; =FUN_020A85F0 + mov r1, r8 + add r2, r4, #0xf00 + mov r3, r3, lsr #0x10 + bl WM_SetDCFData + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020A873C +_020A8718: + b _020A873C +_020A871C: + b _020A873C +_020A8720: + b _020A8758 +_020A8724: + b _020A873C +_020A8728: + b _020A873C +_020A872C: + b _020A873C +_020A8730: + b _020A873C +_020A8734: + b _020A873C +_020A8738: + b _020A873C +_020A873C: + ldr r0, _020A87AC ; =0x021CA87C + bl OS_UnlockMutex + mov r0, r5 + bl OS_RestoreInterrupts + mvn r0, #0x4 + ldmia sp!, {r4-r8,lr} + bx lr +_020A8758: + ldr r0, _020A87B4 ; =0x021CA874 + bl OS_SleepThread + ldr r0, _020A87B8 ; =0x021CA870 + ldr r0, [r0, #0x24] + cmp r0, #0x0 + beq _020A8790 + cmp r0, #0x1 + ldr r0, _020A87AC ; =0x021CA87C + bl OS_UnlockMutex + mov r0, r5 + bl OS_RestoreInterrupts + mvn r0, #0x4 + ldmia sp!, {r4-r8,lr} + bx lr +_020A8790: + ldr r0, _020A87AC ; =0x021CA87C + bl OS_UnlockMutex + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r6 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020A87AC: .word 0x021CA87C +_020A87B0: .word FUN_020A85F0 +_020A87B4: .word 0x021CA874 +_020A87B8: .word 0x021CA870 + + arm_func_start FUN_020A87BC +FUN_020A87BC: ; 0x020A87BC + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r1, _020A87DC ; =0x021CA870 + str r4, [r1, #0x28] + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A87DC: .word 0x021CA870 + + arm_func_start FUN_020A87E0 +FUN_020A87E0: ; 0x020A87E0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, #0x0 + mov r4, r0 + mov r6, r7 + bl FUN_020A7138 + mov r5, r0 + bl OS_DisableInterrupts +_020A8800: ; 0x020A8800 + cmp r5, #0x0 + beq _020A8830 + add r1, r5, #0x2000 + ldr r2, [r1, #0x260] + cmp r2, #0x9 + bne _020A8830 + ldrb r1, [r1, #0x26b] + cmp r1, #0x0 + addeq r2, r5, #0x2100 + ldreq r1, _020A884C ; =0x0000214C + ldreqh r6, [r2, #0x4a] + addeq r7, r5, r1 +_020A8830: + bl OS_RestoreInterrupts +_020A8834: ; 0x020A8834 + cmp r4, #0x0 + strneh r6, [r4, #0x0] + mov r0, r7 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020A884C: .word 0x0000214C + + arm_func_start FUN_020A8850 +FUN_020A8850: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, #0x0 + bl FUN_020A7138 + mov r4, r0 + bl OS_DisableInterrupts +_020A8868: ; 0x020A8868 + cmp r4, #0x0 + beq _020A8890 + add r1, r4, #0x2000 + ldr r2, [r1, #0x260] + cmp r2, #0x9 + bne _020A8890 + ldrb r1, [r1, #0x26b] + cmp r1, #0x0 + ldreq r1, _020A88A4 ; =0x00002144 + addeq r5, r4, r1 +_020A8890: + bl OS_RestoreInterrupts + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A88A4: .word 0x00002144 + + arm_func_start FUN_020A88A8 +FUN_020A88A8: ; 0x020A88A8 + stmdb sp!, {r4,lr} + bl FUN_020A7138 + movs r4, r0 + ldmeqia sp!, {r4,lr} + bxeq lr + add r0, r4, #0x2000 + ldr r1, [r0, #0x260] + cmp r1, #0x9 + ldmneia sp!, {r4,lr} + bxne lr + ldrb r0, [r0, #0x26b] + cmp r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r0, _020A8928 ; =0x021CA87C + bl FUN_020A8590 +_020A88E8: ; 0x020A88E8 + cmp r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r1, _020A892C ; =0x00002144 + ldr r0, _020A8930 ; =FUN_020A85DC + add r1, r4, r1 + add r2, r4, #0xf00 + mov r3, #0x0 + bl WM_SetDCFData + cmp r0, #0x2 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r0, _020A8928 ; =0x021CA87C + bl FUN_020A8534 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A8928: .word 0x021CA87C +_020A892C: .word 0x00002144 +_020A8930: .word FUN_020A85DC + + arm_func_start FUN_020A8934 +FUN_020A8934: ; 0x020A8934 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020A8978 ; =0x021CA870 + mov r2, r0 + ldr r12, [r1, #0x28] + cmp r12, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + ldrh r3, [r2, #0x6] + add r0, r2, #0x1e + add r1, r2, #0x18 + add r2, r2, #0x2c + blx r12 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A8978: .word 0x021CA870 + + arm_func_start FUN_020A897C +FUN_020A897C: ; 0x020A897C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020A89C8 ; =0x021CA870 + ldrb r0, [r1, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020A89CC ; =0x021CA87C + mov r2, #0x0 + mov r3, #0x1 + strb r3, [r1, #0x0] + str r2, [r1, #0x24] + str r2, [r1, #0x8] + str r2, [r1, #0x4] + bl OS_InitMutex + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A89C8: .word 0x021CA870 +_020A89CC: .word 0x021CA87C + + arm_func_start FUN_020A89D0 +FUN_020A89D0: ; 0x020A89D0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020A8A48 ; =0x021CA89C + ands r1, r0, #0x2 + ldrb r12, [r2, #0x0] + movne r0, r0, asr #0x2 + andne lr, r0, #0xff + moveq r0, r0, asr #0x2 + addeq r0, r0, #0x19 + andeq lr, r0, #0xff + mov r1, r12, lsr #0x1f + rsb r0, r1, r12, lsl #0x1c + cmp r12, #0x10 + ldr r3, _020A8A4C ; =0x021CA8A0 + add r0, r1, r0, ror #0x1c + strb lr, [r3, r0] + addcc r0, r12, #0x1 + strccb r0, [r2, #0x0] + addcc sp, sp, #0x4 + ldmccia sp!, {lr} + bxcc lr + add r0, r12, #0x1 + mov r1, r0, lsr #0x1f + rsb r0, r1, r0, lsl #0x1c + add r0, r1, r0, ror #0x1c + add r0, r0, #0x10 + strb r0, [r2, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A8A48: .word 0x021CA89C +_020A8A4C: .word 0x021CA8A0 + + arm_func_start FUN_020A8A50 +FUN_020A8A50: ; 0x020A8A50 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FUN_020A8A90 + mov r1, #0x0 + cmp r0, #0x1c + movcs r1, #0x3 + bhs _020A8A80 + cmp r0, #0x16 + movcs r1, #0x2 + bhs _020A8A80 + cmp r0, #0x10 + movcs r1, #0x1 +_020A8A80: + mov r0, r1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_020A8A90 +FUN_020A8A90: ; 0x020A8A90 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020A8B20 ; =0x021CA89C + mov r0, #0x0 + ldrb r1, [r1, #0x0] + cmp r1, #0x10 + bls _020A8ADC + ldr r2, _020A8B24 ; =0x021CA8A0 + mov r3, r0 +_020A8AB4: + ldrb r1, [r2, #0x0] + add r3, r3, #0x1 + cmp r3, #0x10 + add r0, r0, r1 + add r2, r2, #0x1 + blt _020A8AB4 + mov r1, r0, asr #0x3 + add r0, r0, r1, lsr #0x1c + mov r0, r0, asr #0x4 + b _020A8B10 +_020A8ADC: + cmp r1, #0x0 + beq _020A8B10 + mov r3, r0 + cmp r1, #0x0 + ble _020A8B0C + ldr ip, _020A8B24 ; =0x021CA8A0 +_020A8AF4: + ldrb r2, [r12, #0x0] + add r3, r3, #0x1 + cmp r3, r1 + add r0, r0, r2 + add r12, r12, #0x1 + blt _020A8AF4 +_020A8B0C: + bl _s32_div_f +_020A8B10: + and r0, r0, #0xff + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A8B20: .word 0x021CA89C +_020A8B24: .word 0x021CA8A0 + + arm_func_start FUN_020A8B28 +FUN_020A8B28: ; 0x020A8B28 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + mov r5, r0 + bl FUN_020A7138 +_020A8B3C: ; 0x020A8B3C + cmp r0, #0x0 + mov r4, #0x0 + beq _020A8B60 + add r0, r0, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0x9 + bne _020A8B60 + bl FUN_020A8A50 + mov r4, r0 +_020A8B60: + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start FUN_020A8B78 +FUN_020A8B78: + mov r12, #0x0 +_020A8B7C: + ldrb r3, [r0, r12] + ldrb r2, [r1, r12] + cmp r3, r2 + movne r0, #0x0 + bxne lr + add r12, r12, #0x1 + cmp r12, #0x6 + blt _020A8B7C + mov r0, #0x1 + bx lr + + arm_func_start FUN_020A8BA4 +FUN_020A8BA4: ; 0x020A8BA4 + ldr ip, _020A8BAC ; =MATH_MD5GetHash + bx r12 + .balign 4 +_020A8BAC: .word MATH_MD5GetHash + + arm_func_start FUN_020A8BB0 +FUN_020A8BB0: ; 0x020A8BB0 + ldr ip, _020A8BB8 ; =MATH_MD5Update + bx r12 + .balign 4 +_020A8BB8: .word MATH_MD5Update + + arm_func_start FUN_020A8BBC +FUN_020A8BBC: ; 0x020A8BBC + ldr ip, _020A8BC4 ; =MATH_MD5Init + bx r12 + .balign 4 +_020A8BC4: .word MATH_MD5Init + + arm_func_start FUN_020A8BC8 +FUN_020A8BC8: ; 0x020A8BC8 + stmdb sp!, {r4,lr} + ldrsh r4, [r3, #0x0] + ldr r12, [sp, #0x8] + mov lr, #0x0 + strh r4, [r0, #0x0] + ldrb r4, [r3, #0x2] + cmp r12, #0x2 + strb r4, [r0, #0x2] + strb lr, [r0, #0x3] + beq _020A8C04 + cmp r12, #0x3 + beq _020A8C10 + cmp r12, #0x4 + beq _020A8C1C + ldmia sp!, {r4,pc} +_020A8C04: + add r0, r0, #0x4 + bl FUN_020A8CA8 + ldmia sp!, {r4,pc} +_020A8C10: + add r0, r0, #0x4 + bl FUN_020A91D8 + ldmia sp!, {r4,pc} +_020A8C1C: + add r0, r0, #0x4 + bl FUN_020A9D18 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020A8C28 +FUN_020A8C28: ; 0x020A8C28 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrsh r12, [r0, #0x0] + cmp r3, #0x2 + strh r12, [sp, #0x0] + ldrb r12, [r0, #0x2] + strb r12, [sp, #0x2] + beq _020A8C60 + cmp r3, #0x3 + beq _020A8C78 + cmp r3, #0x4 + beq _020A8C90 + add sp, sp, #0x4 + ldmia sp!, {pc} +_020A8C60: + add r3, sp, #0x0 + add r0, r0, #0x4 + sub r2, r2, #0x4 + bl FUN_020A8F58 + add sp, sp, #0x4 + ldmia sp!, {pc} +_020A8C78: + add r3, sp, #0x0 + add r0, r0, #0x4 + sub r2, r2, #0x4 + bl FUN_020A97DC + add sp, sp, #0x4 + ldmia sp!, {pc} +_020A8C90: + add r3, sp, #0x0 + add r0, r0, #0x4 + sub r2, r2, #0x4 + bl FUN_020A9F10 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020A8CA8 +FUN_020A8CA8: ; 0x020A8CA8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x3c + movs r2, r2, lsr #0x2 + str r2, [sp, #0x4] + mov r2, #0x0 + str r2, [sp, #0x0] + addeq sp, sp, #0x3c + ldmeqia sp!, {r4-r11,pc} +_020A8CC8: ; 0x020A8CC8 + mov r5, #0x8000 + ldr fp, _020A8F4C ; =0x020FF5D4 + ldr r4, _020A8F50 ; =0x00007FFF + str r2, [sp, #0x8] + str r2, [sp, #0xc] + str r2, [sp, #0x10] + str r2, [sp, #0x14] + str r2, [sp, #0x18] + rsb r5, r5, #0x0 + mov r6, #0x2 + mov lr, #0x58 + str r2, [sp, #0x1c] + str r2, [sp, #0x20] + str r2, [sp, #0x24] + str r2, [sp, #0x28] + str r2, [sp, #0x2c] + str r2, [sp, #0x30] + str r2, [sp, #0x34] +_020A8D10: + ldrb r9, [r3, #0x2] + ldrsh r2, [r3, #0x0] + ldrsh r7, [r1, #0x0] + mov r10, r9, lsl #0x1 + ldrsh r10, [r11, r10] + subs r8, r7, r2 + movmi r7, r6 + ldrpl r7, [sp, #0x8] + rsbmi r8, r8, #0x0 + cmp r8, r10 + orrge r7, r7, #0x1 + ands r8, r7, #0x1 + ldreq r10, [sp, #0xc] + ands r8, r7, #0x2 + rsbne r10, r10, #0x0 + mov r8, #0x8000 + add r2, r2, r10 + rsb r8, r8, #0x0 + cmp r2, r8 + ldr r8, _020A8F54 ; =0x020FF5B8 + movlt r2, r5 + cmp r2, r4 + ldrsb r8, [r8, r7] + movgt r2, r4 + adds r9, r9, r8 + ldrmi r9, [sp, #0x10] + bmi _020A8D84 + cmp r9, #0x58 + movgt r9, lr +_020A8D84: + strh r2, [r3, #0x0] + strb r9, [r3, #0x2] + ldrb r10, [r3, #0x2] + and r2, r7, #0xff + ldrsh r7, [r3, #0x0] + ldrsh r8, [r1, #0x2] + mov r12, r10, lsl #0x1 + ldrsh r12, [r11, r12] + subs r9, r8, r7 + movmi r8, r6 + ldrpl r8, [sp, #0x14] + rsbmi r9, r9, #0x0 + cmp r9, r12 + orrge r8, r8, #0x1 + ands r9, r8, #0x1 + ldreq r12, [sp, #0x18] + ands r9, r8, #0x2 + rsbne r12, r12, #0x0 + mov r9, #0x8000 + add r7, r7, r12 + rsb r9, r9, #0x0 + cmp r7, r9 + ldr sb, _020A8F54 ; =0x020FF5B8 + movlt r7, r5 + cmp r7, r4 + ldrsb r9, [r9, r8] + movgt r7, r4 + adds r10, r10, r9 + ldrmi r10, [sp, #0x1c] + bmi _020A8E04 + cmp r10, #0x58 + movgt r10, lr +_020A8E04: + strh r7, [r3, #0x0] + strb r10, [r3, #0x2] + and r7, r8, #0xff + orr r2, r2, r7, lsl #0x2 + ldrb r10, [r3, #0x2] + ldrsh r7, [r3, #0x0] + ldrsh r8, [r1, #0x4] + mov r12, r10, lsl #0x1 + ldrsh r12, [r11, r12] + subs r9, r8, r7 + movmi r8, r6 + ldrpl r8, [sp, #0x20] + rsbmi r9, r9, #0x0 + cmp r9, r12 + orrge r8, r8, #0x1 + ands r9, r8, #0x1 + ldreq r12, [sp, #0x24] + ands r9, r8, #0x2 + rsbne r12, r12, #0x0 + mov r9, #0x8000 + add r7, r7, r12 + rsb r9, r9, #0x0 + cmp r7, r9 + ldr sb, _020A8F54 ; =0x020FF5B8 + movlt r7, r5 + cmp r7, r4 + ldrsb r9, [r9, r8] + movgt r7, r4 + and r2, r2, #0xff + adds r10, r10, r9 + ldrmi r10, [sp, #0x28] + bmi _020A8E8C + cmp r10, #0x58 + movgt r10, lr +_020A8E8C: + strh r7, [r3, #0x0] + strb r10, [r3, #0x2] + and r7, r8, #0xff + orr r2, r2, r7, lsl #0x4 + ldrb r10, [r3, #0x2] + ldrsh r8, [r1, #0x6] + ldrsh r7, [r3, #0x0] + mov r12, r10, lsl #0x1 + ldrsh r12, [r11, r12] + subs r9, r8, r7 + movmi r8, r6 + ldrpl r8, [sp, #0x2c] + rsbmi r9, r9, #0x0 + cmp r9, r12 + orrge r8, r8, #0x1 + ands r9, r8, #0x1 + ldreq r12, [sp, #0x30] + ands r9, r8, #0x2 + rsbne r12, r12, #0x0 + mov r9, #0x8000 + add r7, r7, r12 + rsb r9, r9, #0x0 + cmp r7, r9 + ldr sb, _020A8F54 ; =0x020FF5B8 + movlt r7, r5 + cmp r7, r4 + ldrsb r9, [r9, r8] + movgt r7, r4 + and r2, r2, #0xff + adds r10, r10, r9 + add r1, r1, #0x8 + ldrmi r10, [sp, #0x34] + bmi _020A8F18 + cmp r10, #0x58 + movgt r10, lr +_020A8F18: + strh r7, [r3, #0x0] + and r7, r8, #0xff + strb r10, [r3, #0x2] + orr r2, r2, r7, lsl #0x6 + strb r2, [r0], #0x1 + ldr r2, [sp, #0x0] + add r7, r2, #0x1 + ldr r2, [sp, #0x4] + str r7, [sp, #0x0] + cmp r7, r2 + blo _020A8D10 + add sp, sp, #0x3c + ldmia sp!, {r4-r11,pc} + .balign 4 +_020A8F4C: .word 0x020FF5D4 +_020A8F50: .word 0x00007FFF +_020A8F54: .word 0x020FF5B8 + + arm_func_start FUN_020A8F58 +FUN_020A8F58: ; 0x020A8F58 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x34 + cmp r2, #0x0 + addls sp, sp, #0x34 + mov r12, #0x0 + ldmlsia sp!, {r4-r11,pc} +_020A8F70: ; 0x020A8F70 + mov r4, #0x8000 + rsb r6, r4, #0x0 + ldr r5, _020A91CC ; =0x00007FFF + ldr fp, _020A91D0 ; =0x020FF5D4 + str r12, [sp, #0x0] + str r12, [sp, #0x8] + str r12, [sp, #0xc] + str r12, [sp, #0x14] + str r12, [sp, #0x18] + mov r4, #0x58 + str r12, [sp, #0x20] + str r12, [sp, #0x24] + str r12, [sp, #0x2c] +_020A8FA4: + ldrb r7, [r0, #0x0] + ldrb r8, [r3, #0x2] + ldrsh r9, [r3, #0x0] + and r10, r7, #0x3 + ands r7, r10, #0x1 + mov r7, r8, lsl #0x1 + ldrsh r7, [r11, r7] + ldreq r7, [sp, #0x0] + ands lr, r10, #0x2 + str lr, [sp, #0x4] + beq _020A8FE8 + sub r9, r9, r7 + mov r7, #0x8000 + rsb r7, r7, #0x0 + cmp r9, r7 + movlt r9, r6 + b _020A8FF4 +_020A8FE8: + add r9, r9, r7 + cmp r9, r5 + movgt r9, r5 +_020A8FF4: + ldr r7, _020A91D4 ; =0x020FF5B8 + ldrsb r7, [r7, r10] + adds r8, r8, r7 + ldrmi r8, [sp, #0x8] + bmi _020A9010 + cmp r8, #0x58 + movgt r8, r4 +_020A9010: + mov r7, r9, lsl #0x10 + mov r7, r7, asr #0x10 + strh r7, [r3, #0x0] + strb r8, [r3, #0x2] + strh r7, [r1, #0x0] + ldrb r7, [r0, #0x0] + ldrb r8, [r3, #0x2] + ldrsh r9, [r3, #0x0] + mov r7, r7, asr #0x2 + and r10, r7, #0x3 + ands r7, r10, #0x1 + mov r7, r8, lsl #0x1 + ldrsh r7, [r11, r7] + ldreq r7, [sp, #0xc] + ands lr, r10, #0x2 + str lr, [sp, #0x10] + beq _020A906C + sub r9, r9, r7 + mov r7, #0x8000 + rsb r7, r7, #0x0 + cmp r9, r7 + movlt r9, r6 + b _020A9078 +_020A906C: + add r9, r9, r7 + cmp r9, r5 + movgt r9, r5 +_020A9078: + ldr r7, _020A91D4 ; =0x020FF5B8 + ldrsb r7, [r7, r10] + adds r8, r8, r7 + ldrmi r8, [sp, #0x14] + bmi _020A9094 + cmp r8, #0x58 + movgt r8, r4 +_020A9094: + mov r7, r9, lsl #0x10 + mov r7, r7, asr #0x10 + strh r7, [r3, #0x0] + strb r8, [r3, #0x2] + strh r7, [r1, #0x2] + ldrb r7, [r0, #0x0] + ldrb r8, [r3, #0x2] + ldrsh r9, [r3, #0x0] + mov r7, r7, asr #0x4 + and r10, r7, #0x3 + ands r7, r10, #0x1 + mov r7, r8, lsl #0x1 + ldrsh r7, [r11, r7] + ldreq r7, [sp, #0x18] + ands lr, r10, #0x2 + str lr, [sp, #0x1c] + beq _020A90F0 + sub r9, r9, r7 + mov r7, #0x8000 + rsb r7, r7, #0x0 + cmp r9, r7 + movlt r9, r6 + b _020A90FC +_020A90F0: + add r9, r9, r7 + cmp r9, r5 + movgt r9, r5 +_020A90FC: + ldr r7, _020A91D4 ; =0x020FF5B8 + ldrsb r7, [r7, r10] + adds r8, r8, r7 + ldrmi r8, [sp, #0x20] + bmi _020A9118 + cmp r8, #0x58 + movgt r8, r4 +_020A9118: + mov r7, r9, lsl #0x10 + mov r7, r7, asr #0x10 + strh r7, [r3, #0x0] + strb r8, [r3, #0x2] + strh r7, [r1, #0x4] + ldrb r7, [r0, #0x0] + ldrb r8, [r3, #0x2] + ldrsh r9, [r3, #0x0] + mov r7, r7, asr #0x6 + and r10, r7, #0x3 + ands r7, r10, #0x1 + mov r7, r8, lsl #0x1 + ldrsh r7, [r11, r7] + ldreq r7, [sp, #0x24] + ands lr, r10, #0x2 + str lr, [sp, #0x28] + beq _020A9174 + sub r9, r9, r7 + mov r7, #0x8000 + rsb r7, r7, #0x0 + cmp r9, r7 + movlt r9, r6 + b _020A9180 +_020A9174: + add r9, r9, r7 + cmp r9, r5 + movgt r9, r5 +_020A9180: + ldr r7, _020A91D4 ; =0x020FF5B8 + ldrsb r7, [r7, r10] + adds r8, r8, r7 + ldrmi r8, [sp, #0x2c] + bmi _020A919C + cmp r8, #0x58 + movgt r8, r4 +_020A919C: + mov r7, r9, lsl #0x10 + mov r9, r7, asr #0x10 + strh r9, [r3, #0x0] + strb r8, [r3, #0x2] + add r12, r12, #0x1 + strh r9, [r1, #0x6] + add r1, r1, #0x8 + add r0, r0, #0x1 + cmp r12, r2 + blo _020A8FA4 + add sp, sp, #0x34 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020A91CC: .word 0x00007FFF +_020A91D0: .word 0x020FF5D4 +_020A91D4: .word 0x020FF5B8 + + arm_func_start FUN_020A91D8 +FUN_020A91D8: ; 0x020A91D8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x54 + movs r2, r2, lsr #0x3 + str r2, [sp, #0x4] + mov r2, #0x0 + str r2, [sp, #0x0] + addeq sp, sp, #0x54 + ldmeqia sp!, {r4-r11,pc} +_020A91F8: ; 0x020A91F8 + ldr r5, [sp, #0x0] + mov r4, #0x8000 + rsb lr, r4, #0x0 + ldr ip, _020A97D0 ; =0x00007FFF + str r2, [sp, #0x10] + str r2, [sp, #0x14] + str r2, [sp, #0x18] + str r2, [sp, #0x1c] + str r2, [sp, #0x20] + mov r4, #0x4 + mov r2, #0x58 + str r5, [sp, #0x24] + str r5, [sp, #0x28] + str r5, [sp, #0x2c] + str r5, [sp, #0x30] + str r5, [sp, #0x34] + str r5, [sp, #0x38] + str r5, [sp, #0x3c] + str r5, [sp, #0x40] + str r5, [sp, #0x44] + str r5, [sp, #0x48] + str r5, [sp, #0x4c] +_020A9250: + ldrsh r8, [r3, #0x0] + ldrsh r6, [r1, #0x0] + ldrb r5, [r3, #0x2] + subs r7, r6, r8 + movmi r10, r4 + ldr r6, _020A97D4 ; =0x020FF5D4 + mov r9, r5, lsl #0x1 + ldrsh r6, [r6, r9] + ldrpl r10, [sp, #0x10] + rsbmi r7, r7, #0x0 + cmp r7, r6 + orrge r10, r10, #0x2 + subge r7, r7, r6 + mov r9, r6, asr #0x1 + cmp r7, r9 + orrge r10, r10, #0x1 + ands r7, r10, #0x2 + mov r7, r6, asr #0x2 + addne r7, r7, r6 + ands r6, r10, #0x1 + addne r7, r7, r9 + ands r6, r10, #0x4 + rsbne r7, r7, #0x0 + add r6, r8, r7 + mov r7, #0x8000 + rsb r7, r7, #0x0 + cmp r6, r7 + ldr r7, _020A97D8 ; =0x020FF5BC + movlt r6, lr + cmp r6, r12 + ldrsb r7, [r7, r10] + movgt r6, r12 + adds r5, r5, r7 + ldrmi r5, [sp, #0x14] + bmi _020A92E4 + cmp r5, #0x58 + movgt r5, r2 +_020A92E4: + strh r6, [r3, #0x0] + strb r5, [r3, #0x2] + and r5, r10, #0xff + mov r5, r5, lsl #0x5 + and r10, r5, #0xff + ldrb r8, [r3, #0x2] + ldrsh r11, [r3, #0x0] + ldrsh r5, [r1, #0x2] + mov r9, r8, lsl #0x1 + subs r7, r5, r11 + ldr r5, _020A97D4 ; =0x020FF5D4 + movmi r6, r4 + ldrsh r9, [r5, r9] + ldrpl r6, [sp, #0x18] + rsbmi r7, r7, #0x0 + cmp r7, r9 + orrge r6, r6, #0x2 + subge r7, r7, r9 + mov r5, r9, asr #0x1 + cmp r7, r5 + orrge r6, r6, #0x1 + ands r7, r6, #0x2 + mov r7, r9, asr #0x2 + addne r7, r7, r9 + ands r9, r6, #0x1 + addne r7, r7, r5 + ands r5, r6, #0x4 + rsbne r7, r7, #0x0 + add r5, r11, r7 + mov r7, #0x8000 + rsb r7, r7, #0x0 + cmp r5, r7 + ldr r7, _020A97D8 ; =0x020FF5BC + movlt r5, lr + cmp r5, r12 + ldrsb r7, [r7, r6] + movgt r5, r12 + adds r8, r8, r7 + ldrmi r8, [sp, #0x1c] + bmi _020A938C + cmp r8, #0x58 + movgt r8, r2 +_020A938C: + strh r5, [r3, #0x0] + strb r8, [r3, #0x2] + and r5, r6, #0xff + orr r5, r10, r5, lsl #0x2 + and r10, r5, #0xff + ldrb r8, [r3, #0x2] + ldrsh r11, [r3, #0x0] + ldrsh r5, [r1, #0x4] + mov r9, r8, lsl #0x1 + subs r7, r5, r11 + ldr r5, _020A97D4 ; =0x020FF5D4 + movmi r6, r4 + ldrsh r9, [r5, r9] + ldrpl r6, [sp, #0x20] + rsbmi r7, r7, #0x0 + cmp r7, r9 + orrge r6, r6, #0x2 + subge r7, r7, r9 + mov r5, r9, asr #0x1 + cmp r7, r5 + orrge r6, r6, #0x1 + ands r7, r6, #0x2 + mov r7, r9, asr #0x2 + addne r7, r7, r9 + ands r9, r6, #0x1 + addne r7, r7, r5 + ands r5, r6, #0x4 + rsbne r7, r7, #0x0 + add r5, r11, r7 + mov r7, #0x8000 + rsb r7, r7, #0x0 + cmp r5, r7 + ldr r7, _020A97D8 ; =0x020FF5BC + movlt r5, lr + cmp r5, r12 + ldrsb r7, [r7, r6] + movgt r5, r12 + adds r8, r8, r7 + ldrmi r8, [sp, #0x24] + bmi _020A9434 + cmp r8, #0x58 + movgt r8, r2 +_020A9434: + strh r5, [r3, #0x0] + and r5, r6, #0xff + str r5, [sp, #0x8] + strb r8, [r3, #0x2] + orr r5, r10, r5, asr #0x1 + strb r5, [r0, #0x0] + ldrb r5, [r3, #0x2] + ldrsh r8, [r3, #0x0] + ldrsh r6, [r1, #0x6] + mov r9, r5, lsl #0x1 + subs r7, r6, r8 + ldr r6, _020A97D4 ; =0x020FF5D4 + movmi r10, r4 + ldrsh r6, [r6, r9] + ldrpl r10, [sp, #0x28] + rsbmi r7, r7, #0x0 + cmp r7, r6 + orrge r10, r10, #0x2 + subge r7, r7, r6 + mov r9, r6, asr #0x1 + cmp r7, r9 + orrge r10, r10, #0x1 + ands r7, r10, #0x2 + mov r7, r6, asr #0x2 + addne r7, r7, r6 + ands r6, r10, #0x1 + addne r7, r7, r9 + ands r6, r10, #0x4 + rsbne r7, r7, #0x0 + add r6, r8, r7 + mov r7, #0x8000 + rsb r7, r7, #0x0 + cmp r6, r7 + ldr r7, _020A97D8 ; =0x020FF5BC + movlt r6, lr + cmp r6, r12 + ldrsb r7, [r7, r10] + movgt r6, r12 + adds r5, r5, r7 + ldrmi r5, [sp, #0x2c] + bmi _020A94E0 + cmp r5, #0x58 + movgt r5, r2 +_020A94E0: + strh r6, [r3, #0x0] + strb r5, [r3, #0x2] + ldrsh r11, [r3, #0x0] + ldrsh r6, [r1, #0x8] + ldrb r9, [r3, #0x2] + and r5, r10, #0xff + subs r8, r6, r11 + movmi r7, r4 + ldr r6, _020A97D4 ; =0x020FF5D4 + mov r10, r9, lsl #0x1 + ldrsh r10, [r6, r10] + ldrpl r7, [sp, #0x30] + rsbmi r8, r8, #0x0 + cmp r8, r10 + orrge r7, r7, #0x2 + subge r8, r8, r10 + mov r6, r10, asr #0x1 + cmp r8, r6 + orrge r7, r7, #0x1 + ands r8, r7, #0x2 + mov r8, r10, asr #0x2 + addne r8, r8, r10 + ands r10, r7, #0x1 + addne r8, r8, r6 + ands r6, r7, #0x4 + rsbne r8, r8, #0x0 + add r6, r11, r8 + mov r8, #0x8000 + rsb r8, r8, #0x0 + cmp r6, r8 + ldr r8, _020A97D8 ; =0x020FF5BC + movlt r6, lr + mov r5, r5, lsl #0x4 + cmp r6, r12 + ldrsb r8, [r8, r7] + movgt r6, r12 + and r5, r5, #0xff + adds r9, r9, r8 + ldrmi r9, [sp, #0x34] + bmi _020A9588 + cmp r9, #0x58 + movgt r9, r2 +_020A9588: + strh r6, [r3, #0x0] + strb r9, [r3, #0x2] + and r6, r7, #0xff + orr r5, r5, r6, lsl #0x1 + ldrb r9, [r3, #0x2] + ldrsh r11, [r3, #0x0] + ldrsh r6, [r1, #0xa] + mov r10, r9, lsl #0x1 + and r5, r5, #0xff + subs r8, r6, r11 + ldr r6, _020A97D4 ; =0x020FF5D4 + movmi r7, r4 + ldrsh r10, [r6, r10] + ldrpl r7, [sp, #0x38] + rsbmi r8, r8, #0x0 + cmp r8, r10 + orrge r7, r7, #0x2 + subge r8, r8, r10 + mov r6, r10, asr #0x1 + cmp r8, r6 + orrge r7, r7, #0x1 + ands r8, r7, #0x2 + mov r8, r10, asr #0x2 + addne r8, r8, r10 + ands r10, r7, #0x1 + addne r8, r8, r6 + ands r6, r7, #0x4 + rsbne r8, r8, #0x0 + add r6, r11, r8 + mov r8, #0x8000 + rsb r8, r8, #0x0 + cmp r6, r8 + ldr r8, _020A97D8 ; =0x020FF5BC + movlt r6, lr + cmp r6, r12 + ldrsb r8, [r8, r7] + movgt r6, r12 + adds r9, r9, r8 + ldrmi r9, [sp, #0x3c] + bmi _020A9630 + cmp r9, #0x58 + movgt r9, r2 +_020A9630: + ldr r8, [sp, #0x8] + strh r6, [r3, #0x0] + orr r8, r5, r8, lsl #0x7 + and r5, r7, #0xff + str r5, [sp, #0xc] + strb r9, [r3, #0x2] + orr r5, r8, r5, asr #0x2 + strb r5, [r0, #0x1] + ldrb r5, [r3, #0x2] + ldrsh r8, [r3, #0x0] + ldrsh r6, [r1, #0xc] + mov r9, r5, lsl #0x1 + subs r7, r6, r8 + ldr r6, _020A97D4 ; =0x020FF5D4 + movmi r10, r4 + ldrsh r6, [r6, r9] + ldrpl r10, [sp, #0x40] + rsbmi r7, r7, #0x0 + cmp r7, r6 + orrge r10, r10, #0x2 + subge r7, r7, r6 + mov r9, r6, asr #0x1 + cmp r7, r9 + orrge r10, r10, #0x1 + ands r7, r10, #0x2 + mov r7, r6, asr #0x2 + addne r7, r7, r6 + ands r6, r10, #0x1 + addne r7, r7, r9 + ands r6, r10, #0x4 + rsbne r7, r7, #0x0 + add r6, r8, r7 + mov r7, #0x8000 + rsb r7, r7, #0x0 + cmp r6, r7 + ldr r7, _020A97D8 ; =0x020FF5BC + movlt r6, lr + cmp r6, r12 + ldrsb r7, [r7, r10] + movgt r6, r12 + adds r5, r5, r7 + ldrmi r5, [sp, #0x44] + bmi _020A96E4 + cmp r5, #0x58 + movgt r5, r2 +_020A96E4: + strh r6, [r3, #0x0] + strb r5, [r3, #0x2] + and r5, r10, #0xff + mov r5, r5, lsl #0x3 + and r11, r5, #0xff + ldrsh r6, [r1, #0xe] + ldrsh r5, [r3, #0x0] + ldrb r9, [r3, #0x2] + add r1, r1, #0x10 + subs r8, r6, r5 + movmi r7, r4 + ldr r6, _020A97D4 ; =0x020FF5D4 + mov r10, r9, lsl #0x1 + ldrsh r10, [r6, r10] + ldrpl r7, [sp, #0x48] + rsbmi r8, r8, #0x0 + cmp r8, r10 + orrge r7, r7, #0x2 + subge r8, r8, r10 + mov r6, r10, asr #0x1 + cmp r8, r6 + orrge r7, r7, #0x1 + ands r8, r7, #0x2 + mov r8, r10, asr #0x2 + addne r8, r8, r10 + ands r10, r7, #0x1 + addne r8, r8, r6 + ands r6, r7, #0x4 + rsbne r8, r8, #0x0 + mov r6, #0x8000 + add r5, r5, r8 + rsb r6, r6, #0x0 + cmp r5, r6 + ldr r6, _020A97D8 ; =0x020FF5BC + movlt r5, lr + cmp r5, r12 + ldrsb r6, [r6, r7] + movgt r5, r12 + adds r9, r9, r6 + ldrmi r9, [sp, #0x4c] + bmi _020A9790 + cmp r9, #0x58 + movgt r9, r2 +_020A9790: + strh r5, [r3, #0x0] + and r5, r7, #0xff + orr r6, r11, r5 + ldr r5, [sp, #0xc] + strb r9, [r3, #0x2] + orr r5, r6, r5, lsl #0x6 + strb r5, [r0, #0x2] + ldr r5, [sp, #0x0] + add r0, r0, #0x3 + add r6, r5, #0x1 + ldr r5, [sp, #0x4] + str r6, [sp, #0x0] + cmp r6, r5 + blo _020A9250 + add sp, sp, #0x54 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020A97D0: .word 0x00007FFF +_020A97D4: .word 0x020FF5D4 +_020A97D8: .word 0x020FF5BC + + arm_func_start FUN_020A97DC +FUN_020A97DC: ; 0x020A97DC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4c + ldr r5, _020A9D08 ; =0xAAAAAAAB + mov r4, #0x0 + str r4, [sp, #0x0] + umull r5, r4, r2, r5 + str r4, [sp, #0xc] + movs r2, r4, lsr #0x1 + str r2, [sp, #0xc] + addeq sp, sp, #0x4c + ldmeqia sp!, {r4-r11,pc} +_020A9808: ; 0x020A9808 + ldr r2, [sp, #0x0] + mov r4, #0x8000 + ldr lr, _020A9D0C ; =0x00007FFF + str r2, [sp, #0x18] + str r2, [sp, #0x24] + str r2, [sp, #0x2c] + str r2, [sp, #0x34] + str r2, [sp, #0x3c] + rsb r4, r4, #0x0 + mov r12, #0x58 + str r2, [sp, #0x40] + str r2, [sp, #0x44] + str r2, [sp, #0x48] +_020A983C: + ldrb r8, [r3, #0x2] + ldr r5, _020A9D10 ; =0x020FF5D4 + ldrb r6, [r0, #0x0] + mov r7, r8, lsl #0x1 + ldrsh r5, [r5, r7] + ldrb r11, [r0, #0x1] + ldrb r2, [r0, #0x2] + str r5, [sp, #0x4] + mov r5, r6, asr #0x5 + ands r7, r5, #0x2 + ldr r7, [sp, #0x4] + ldrne r10, [sp, #0x4] + mov r7, r7, asr #0x2 + addne r7, r7, r10 + ands r10, r5, #0x1 + str r10, [sp, #0x10] + ldrne r10, [sp, #0x4] + ldrsh r9, [r3, #0x0] + addne r7, r7, r10, asr #0x1 + ands r10, r5, #0x4 + str r10, [sp, #0x14] + beq _020A98AC + sub r9, r9, r7 + mov r7, #0x8000 + rsb r7, r7, #0x0 + cmp r9, r7 + movlt r9, r4 + b _020A98B8 +_020A98AC: + add r9, r9, r7 + cmp r9, lr + movgt r9, lr +_020A98B8: + ldr r7, _020A9D14 ; =0x020FF5BC + ldrsb r5, [r7, r5] + adds r8, r8, r5 + ldrmi r8, [sp, #0x18] + bmi _020A98D4 + cmp r8, #0x58 + movgt r8, r12 +_020A98D4: + mov r5, r9, lsl #0x10 + mov r5, r5, asr #0x10 + strh r5, [r3, #0x0] + strb r8, [r3, #0x2] + strh r5, [r1, #0x0] + ldrb r8, [r3, #0x2] + mov r5, r6, asr #0x2 + ands r7, r5, #0x2 + ldr r7, _020A9D10 ; =0x020FF5D4 + mov r10, r8, lsl #0x1 + ldrsh r7, [r7, r10] + ldrsh r9, [r3, #0x0] + str r7, [sp, #0x8] + ldrne r10, [sp, #0x8] + mov r7, r7, asr #0x2 + addne r7, r7, r10 + ands r10, r5, #0x1 + str r10, [sp, #0x1c] + ldrne r10, [sp, #0x8] + addne r7, r7, r10, asr #0x1 + ands r10, r5, #0x4 + str r10, [sp, #0x20] + beq _020A9948 + sub r9, r9, r7 + mov r7, #0x8000 + rsb r7, r7, #0x0 + cmp r9, r7 + movlt r9, r4 + b _020A9954 +_020A9948: + add r9, r9, r7 + cmp r9, lr + movgt r9, lr +_020A9954: + and r7, r5, #0x7 + ldr r5, _020A9D14 ; =0x020FF5BC + ldrsb r5, [r5, r7] + adds r8, r8, r5 + ldrmi r8, [sp, #0x24] + bmi _020A9974 + cmp r8, #0x58 + movgt r8, r12 +_020A9974: + mov r5, r9, lsl #0x10 + mov r5, r5, asr #0x10 + strh r5, [r3, #0x0] + mov r6, r6, lsl #0x1 + strb r8, [r3, #0x2] + strh r5, [r1, #0x2] + and r6, r6, #0x7 + orr r6, r6, r11, asr #0x7 + ldrb r8, [r3, #0x2] + ands r5, r6, #0x2 + ldr r5, _020A9D10 ; =0x020FF5D4 + mov r7, r8, lsl #0x1 + ldrsh r10, [r5, r7] + ldrsh r9, [r3, #0x0] + mov r7, r10, asr #0x2 + addne r7, r7, r10 + ands r5, r6, #0x1 + str r5, [sp, #0x28] + addne r7, r7, r10, asr #0x1 + ands r5, r6, #0x4 + beq _020A99E0 + mov r5, #0x8000 + sub r9, r9, r7 + rsb r5, r5, #0x0 + cmp r9, r5 + movlt r9, r4 + b _020A99EC +_020A99E0: + add r9, r9, r7 + cmp r9, lr + movgt r9, lr +_020A99EC: + ldr r5, _020A9D14 ; =0x020FF5BC + ldrsb r5, [r5, r6] + adds r8, r8, r5 + ldrmi r8, [sp, #0x2c] + bmi _020A9A08 + cmp r8, #0x58 + movgt r8, r12 +_020A9A08: + mov r5, r9, lsl #0x10 + mov r5, r5, asr #0x10 + strh r5, [r3, #0x0] + strb r8, [r3, #0x2] + strh r5, [r1, #0x4] + ldrb r8, [r3, #0x2] + mov r6, r11, asr #0x4 + ands r5, r6, #0x2 + ldr r5, _020A9D10 ; =0x020FF5D4 + mov r7, r8, lsl #0x1 + ldrsh r10, [r5, r7] + ldrsh r9, [r3, #0x0] + mov r7, r10, asr #0x2 + addne r7, r7, r10 + ands r5, r6, #0x1 + str r5, [sp, #0x30] + addne r7, r7, r10, asr #0x1 + ands r5, r6, #0x4 + beq _020A9A6C + mov r5, #0x8000 + sub r9, r9, r7 + rsb r5, r5, #0x0 + cmp r9, r5 + movlt r9, r4 + b _020A9A78 +_020A9A6C: + add r9, r9, r7 + cmp r9, lr + movgt r9, lr +_020A9A78: + ldr r5, _020A9D14 ; =0x020FF5BC + and r6, r6, #0x7 + ldrsb r5, [r5, r6] + adds r8, r8, r5 + ldrmi r8, [sp, #0x34] + bmi _020A9A98 + cmp r8, #0x58 + movgt r8, r12 +_020A9A98: + mov r5, r9, lsl #0x10 + mov r5, r5, asr #0x10 + strh r5, [r3, #0x0] + strb r8, [r3, #0x2] + strh r5, [r1, #0x6] + ldrb r8, [r3, #0x2] + mov r6, r11, asr #0x1 + ands r5, r6, #0x2 + ldr r5, _020A9D10 ; =0x020FF5D4 + mov r7, r8, lsl #0x1 + ldrsh r10, [r5, r7] + ldrsh r9, [r3, #0x0] + mov r7, r10, asr #0x2 + addne r7, r7, r10 + ands r5, r6, #0x1 + str r5, [sp, #0x38] + addne r7, r7, r10, asr #0x1 + ands r5, r6, #0x4 + beq _020A9AFC + mov r5, #0x8000 + sub r9, r9, r7 + rsb r5, r5, #0x0 + cmp r9, r5 + movlt r9, r4 + b _020A9B08 +_020A9AFC: + add r9, r9, r7 + cmp r9, lr + movgt r9, lr +_020A9B08: + ldr r5, _020A9D14 ; =0x020FF5BC + and r6, r6, #0x7 + ldrsb r5, [r5, r6] + adds r8, r8, r5 + ldrmi r8, [sp, #0x3c] + bmi _020A9B28 + cmp r8, #0x58 + movgt r8, r12 +_020A9B28: + mov r5, r9, lsl #0x10 + mov r6, r5, asr #0x10 + mov r5, r11, lsl #0x2 + and r5, r5, #0x7 + strh r6, [r3, #0x0] + strb r8, [r3, #0x2] + strh r6, [r1, #0x8] + orr r5, r5, r2, asr #0x6 + ands r6, r5, #0x2 + ldrb r6, [r3, #0x2] + ldr r8, _020A9D10 ; =0x020FF5D4 + ldrsh r7, [r3, #0x0] + mov r9, r6, lsl #0x1 + ldrsh r10, [r8, r9] + mov r9, r10, asr #0x2 + addne r9, r9, r10 + ands r8, r5, #0x1 + addne r9, r9, r10, asr #0x1 + ands r8, r5, #0x4 + beq _020A9B90 + mov r8, #0x8000 + sub r7, r7, r9 + rsb r8, r8, #0x0 + cmp r7, r8 + movlt r7, r4 + b _020A9B9C +_020A9B90: + add r7, r7, r9 + cmp r7, lr + movgt r7, lr +_020A9B9C: + ldr r8, _020A9D14 ; =0x020FF5BC + ldrsb r5, [r8, r5] + adds r6, r6, r5 + ldrmi r6, [sp, #0x40] + bmi _020A9BB8 + cmp r6, #0x58 + movgt r6, r12 +_020A9BB8: + mov r5, r7, lsl #0x10 + mov r5, r5, asr #0x10 + strh r5, [r3, #0x0] + strb r6, [r3, #0x2] + strh r5, [r1, #0xa] + ldrb r6, [r3, #0x2] + mov r5, r2, asr #0x3 + ands r8, r5, #0x2 + ldr r8, _020A9D10 ; =0x020FF5D4 + mov r9, r6, lsl #0x1 + ldrsh r10, [r8, r9] + ldrsh r7, [r3, #0x0] + mov r9, r10, asr #0x2 + addne r9, r9, r10 + ands r8, r5, #0x1 + addne r9, r9, r10, asr #0x1 + ands r8, r5, #0x4 + beq _020A9C18 + mov r8, #0x8000 + sub r7, r7, r9 + rsb r8, r8, #0x0 + cmp r7, r8 + movlt r7, r4 + b _020A9C24 +_020A9C18: + add r7, r7, r9 + cmp r7, lr + movgt r7, lr +_020A9C24: + and r8, r5, #0x7 + ldr r5, _020A9D14 ; =0x020FF5BC + ldrsb r5, [r5, r8] + adds r6, r6, r5 + ldrmi r6, [sp, #0x44] + bmi _020A9C44 + cmp r6, #0x58 + movgt r6, r12 +_020A9C44: + mov r5, r7, lsl #0x10 + mov r5, r5, asr #0x10 + strh r5, [r3, #0x0] + strb r6, [r3, #0x2] + strh r5, [r1, #0xc] + ands r5, r2, #0x2 + ldrb r5, [r3, #0x2] + ldr r7, _020A9D10 ; =0x020FF5D4 + ldrsh r6, [r3, #0x0] + mov r8, r5, lsl #0x1 + ldrsh r9, [r7, r8] + mov r8, r9, asr #0x2 + addne r8, r8, r9 + ands r7, r2, #0x1 + addne r8, r8, r9, asr #0x1 + ands r7, r2, #0x4 + beq _020A9CA0 + mov r7, #0x8000 + sub r6, r6, r8 + rsb r7, r7, #0x0 + cmp r6, r7 + movlt r6, r4 + b _020A9CAC +_020A9CA0: + add r6, r6, r8 + cmp r6, lr + movgt r6, lr +_020A9CAC: + and r7, r2, #0x7 + ldr r2, _020A9D14 ; =0x020FF5BC + ldrsb r2, [r2, r7] + adds r5, r5, r2 + ldrmi r5, [sp, #0x48] + bmi _020A9CCC + cmp r5, #0x58 + movgt r5, r12 +_020A9CCC: + mov r2, r6, lsl #0x10 + mov r2, r2, asr #0x10 + strh r2, [r3, #0x0] + strb r5, [r3, #0x2] + strh r2, [r1, #0xe] + ldr r2, [sp, #0x0] + add r0, r0, #0x3 + add r5, r2, #0x1 + ldr r2, [sp, #0xc] + add r1, r1, #0x10 + str r5, [sp, #0x0] + cmp r5, r2 + blo _020A983C + add sp, sp, #0x4c + ldmia sp!, {r4-r11,pc} + .balign 4 +_020A9D08: .word 0xAAAAAAAB +_020A9D0C: .word 0x00007FFF +_020A9D10: .word 0x020FF5D4 +_020A9D14: .word 0x020FF5BC + + arm_func_start FUN_020A9D18 +FUN_020A9D18: ; 0x020A9D18 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x1c + movs r2, r2, lsr #0x1 + str r2, [sp, #0x4] + mov r2, #0x0 + str r2, [sp, #0x0] + addeq sp, sp, #0x1c + ldmeqia sp!, {r4-r11,pc} +_020A9D38: ; 0x020A9D38 + mov r4, #0x8000 + rsb r5, r4, #0x0 + ldr fp, _020A9F04 ; =0x00007FFF + str r2, [sp, #0xc] + str r2, [sp, #0x10] + str r2, [sp, #0x14] + str r2, [sp, #0x18] + mov r6, #0x8 + mov r4, #0x58 +_020A9D5C: + ldrb r2, [r3, #0x2] + ldrsh r8, [r3, #0x0] + ldrsh r7, [r1, #0x0] + ldr sb, _020A9F08 ; =0x020FF5D4 + mov r12, r2, lsl #0x1 + subs r7, r7, r8 + ldrsh r12, [r9, r12] + movmi r10, r6 + ldrpl r10, [sp, #0xc] + rsbmi r7, r7, #0x0 + cmp r7, r12 + orrge r10, r10, #0x4 + subge r7, r7, r12 + mov lr, r12, asr #0x1 + cmp r7, lr + orrge r10, r10, #0x2 + subge r7, r7, lr + mov r9, r12, asr #0x2 + cmp r7, r9 + orrge r10, r10, #0x1 + ands r7, r10, #0x4 + mov r7, r12, asr #0x3 + addne r7, r7, r12 + ands r12, r10, #0x2 + addne r7, r7, lr + ands r12, r10, #0x1 + addne r7, r7, r9 + ands r9, r10, #0x8 + rsbne r7, r7, #0x0 + add r7, r8, r7 + mov r8, #0x8000 + rsb r8, r8, #0x0 + cmp r7, r8 + ldr r8, _020A9F0C ; =0x020FF5C4 + movlt r7, r5 + cmp r7, r11 + ldrsb r8, [r8, r10] + movgt r7, r11 + adds r2, r2, r8 + ldrmi r2, [sp, #0x10] + bmi _020A9E08 + cmp r2, #0x58 + movgt r2, r4 +_020A9E08: + strh r7, [r3, #0x0] + strb r2, [r3, #0x2] + ldrsh r2, [r3, #0x0] + ldrsh r8, [r1, #0x2] + and lr, r10, #0xff + str r2, [sp, #0x8] + ldrb r2, [r3, #0x2] + ldr r7, [sp, #0x8] + add r1, r1, #0x4 + subs r7, r8, r7 + movmi r10, r6 + ldr r8, _020A9F08 ; =0x020FF5D4 + mov r9, r2, lsl #0x1 + ldrsh r12, [r8, r9] + ldrpl r10, [sp, #0x14] + rsbmi r7, r7, #0x0 + cmp r7, r12 + orrge r10, r10, #0x4 + subge r7, r7, r12 + mov r9, r12, asr #0x1 + cmp r7, r9 + orrge r10, r10, #0x2 + subge r7, r7, r9 + mov r8, r12, asr #0x2 + cmp r7, r8 + orrge r10, r10, #0x1 + ands r7, r10, #0x4 + mov r7, r12, asr #0x3 + addne r7, r7, r12 + ands r12, r10, #0x2 + addne r7, r7, r9 + ands r9, r10, #0x1 + addne r7, r7, r8 + ands r8, r10, #0x8 + ldr r8, [sp, #0x8] + rsbne r7, r7, #0x0 + add r7, r8, r7 + mov r8, #0x8000 + rsb r8, r8, #0x0 + cmp r7, r8 + ldr r8, _020A9F0C ; =0x020FF5C4 + movlt r7, r5 + cmp r7, r11 + ldrsb r8, [r8, r10] + movgt r7, r11 + adds r2, r2, r8 + ldrmi r2, [sp, #0x18] + bmi _020A9ED0 + cmp r2, #0x58 + movgt r2, r4 +_020A9ED0: + strh r7, [r3, #0x0] + strb r2, [r3, #0x2] + and r2, r10, #0xff + orr r2, lr, r2, lsl #0x4 + strb r2, [r0], #0x1 + ldr r2, [sp, #0x0] + add r7, r2, #0x1 + ldr r2, [sp, #0x4] + str r7, [sp, #0x0] + cmp r7, r2 + blo _020A9D5C + add sp, sp, #0x1c + ldmia sp!, {r4-r11,pc} + .balign 4 +_020A9F04: .word 0x00007FFF +_020A9F08: .word 0x020FF5D4 +_020A9F0C: .word 0x020FF5C4 + + arm_func_start FUN_020A9F10 +FUN_020A9F10: ; 0x020A9F10 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x1c + cmp r2, #0x0 + addls sp, sp, #0x1c + mov r12, #0x0 + ldmlsia sp!, {r4-r11,pc} +_020A9F28: ; 0x020A9F28 + mov r4, #0x8000 + ldr fp, _020AA098 ; =0x00007FFF + str r12, [sp, #0x8] + str r12, [sp, #0x14] + rsb r4, r4, #0x0 + mov lr, #0x58 +_020A9F40: + ldrb r5, [r0, #0x0] + ldrb r6, [r3, #0x2] + ldrsh r7, [r3, #0x0] + and r9, r5, #0xf + ldr r5, _020AA09C ; =0x020FF5D4 + mov r8, r6, lsl #0x1 + ldrsh r8, [r5, r8] + ands r5, r9, #0x4 + mov r5, r8, asr #0x3 + addne r5, r5, r8 + ands r10, r9, #0x2 + str r10, [sp, #0x0] + addne r5, r5, r8, asr #0x1 + ands r10, r9, #0x1 + addne r5, r5, r8, asr #0x2 + str r10, [sp, #0x4] + ands r8, r9, #0x8 + beq _020A9FA0 + sub r7, r7, r5 + mov r5, #0x8000 + rsb r5, r5, #0x0 + cmp r7, r5 + movlt r7, r4 + b _020A9FAC +_020A9FA0: + add r7, r7, r5 + cmp r7, r11 + movgt r7, r11 +_020A9FAC: + ldr r5, _020AA0A0 ; =0x020FF5C4 + ldrsb r5, [r5, r9] + adds r6, r6, r5 + ldrmi r6, [sp, #0x8] + bmi _020A9FC8 + cmp r6, #0x58 + movgt r6, lr +_020A9FC8: + mov r5, r7, lsl #0x10 + mov r5, r5, asr #0x10 + strh r5, [r3, #0x0] + strb r6, [r3, #0x2] + strh r5, [r1, #0x0] + ldrb r5, [r0, #0x0] + ldrb r6, [r3, #0x2] + ldrsh r7, [r3, #0x0] + mov r5, r5, asr #0x4 + and r9, r5, #0xf + ldr r5, _020AA09C ; =0x020FF5D4 + mov r8, r6, lsl #0x1 + ldrsh r8, [r5, r8] + ands r5, r9, #0x4 + mov r5, r8, asr #0x3 + addne r5, r5, r8 + ands r10, r9, #0x2 + str r10, [sp, #0xc] + addne r5, r5, r8, asr #0x1 + ands r10, r9, #0x1 + addne r5, r5, r8, asr #0x2 + str r10, [sp, #0x10] + ands r8, r9, #0x8 + beq _020AA040 + sub r7, r7, r5 + mov r5, #0x8000 + rsb r5, r5, #0x0 + cmp r7, r5 + movlt r7, r4 + b _020AA04C +_020AA040: + add r7, r7, r5 + cmp r7, r11 + movgt r7, r11 +_020AA04C: + ldr r5, _020AA0A0 ; =0x020FF5C4 + ldrsb r5, [r5, r9] + adds r6, r6, r5 + ldrmi r6, [sp, #0x14] + bmi _020AA068 + cmp r6, #0x58 + movgt r6, lr +_020AA068: + mov r5, r7, lsl #0x10 + mov r7, r5, asr #0x10 + strh r7, [r3, #0x0] + strb r6, [r3, #0x2] + add r12, r12, #0x1 + strh r7, [r1, #0x2] + cmp r12, r2 + add r1, r1, #0x4 + add r0, r0, #0x1 + blo _020A9F40 + add sp, sp, #0x1c + ldmia sp!, {r4-r11,pc} + .balign 4 +_020AA098: .word 0x00007FFF +_020AA09C: .word 0x020FF5D4 +_020AA0A0: .word 0x020FF5C4 + + arm_func_start FUN_020AA0A4 +FUN_020AA0A4: + stmdb sp!, {r4-r8,lr} + ldr r0, _020AA1B4 ; =0x021CA8D0 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4-r8,pc} +_020AA0BC: ; 0x020AA0BC + ldr r1, _020AA1B8 ; =0x021CAF00 + ldr r0, [r1, #0x8c8] + cmp r0, #0x0 + bne _020AA0FC + bl FUN_020AA4C0 + ldr r1, _020AA1B8 ; =0x021CAF00 + cmp r0, #0x0 + str r0, [r1, #0x8c8] + beq _020AA0F4 + ldr r0, _020AA1BC ; =0x021CA8C8 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4-r8,pc} +_020AA0F4: + mov r0, #0x1 + ldmia sp!, {r4-r8,pc} +_020AA0FC: + ldr r0, _020AA1C0 ; =0x021CCD20 + mov r5, #0x1 + ldr r0, [r0, #0x10] + cmp r0, #0x2 + bne _020AA130 + ldr r3, [r1, #0x8d4] + ldr r2, _020AA1C4 ; =0x020FF694 + mov r0, #0x3 + mla r0, r3, r0, r2 + ldr r3, [r1, #0x8d0] + add r2, r3, #0x1 + ldrb r5, [r3, r0] + str r2, [r1, #0x8d0] +_020AA130: + mov r4, #0x0 + ldr r7, _020AA1B8 ; =0x021CAF00 + mov r8, #0x80000000 + ldr r6, _020AA1C8 ; =0x021CA8BC + b _020AA1A4 +_020AA144: + ldr r1, [r7, #0x8cc] + mov r2, r1 + clz r2, r2 + cmp r2, #0x20 + beq _020AA1AC + mvn r0, r8, lsr r2 + and r3, r1, r0 + rsb r0, r2, #0x1f + ldr r1, [r7, #0x8c8] + ldr r2, [r6, #0x0] + str r3, [r7, #0x8cc] + and r0, r0, #0xff + bl FUN_021EAE90 + ldr r0, [r7, #0x8cc] + cmp r0, #0x0 + bne _020AA1A0 + ldr r1, [r7, #0x8c0] + mov r0, #0x0 + add r1, r1, #0x1 + str r1, [r7, #0x8c0] + str r0, [r7, #0x8c8] + str r0, [r7, #0x8cc] + b _020AA1AC +_020AA1A0: + add r4, r4, #0x1 +_020AA1A4: + cmp r4, r5 + blt _020AA144 +_020AA1AC: + mov r0, #0x1 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020AA1B4: .word 0x021CA8D0 +_020AA1B8: .word 0x021CAF00 +_020AA1BC: .word 0x021CA8C8 +_020AA1C0: .word 0x021CCD20 +_020AA1C4: .word 0x020FF694 +_020AA1C8: .word 0x021CA8BC + + arm_func_start FUN_020AA1CC +FUN_020AA1CC: ; 0x020AA1CC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + bl FUN_020AB154 +_020AA1D8: ; 0x020AA1D8 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,pc} +_020AA1E8: ; 0x020AA1E8 + ldrb r5, [r0, #0x11] + mov r0, r5 + bl FUN_020AB144 + mov r6, r0 + cmp r6, #0x0 + mov r7, #0x0 + ble _020AA294 +_020AA204: + mov r0, r5 + bl FUN_020AB10C + mov r4, r0 + ldr r3, [r4, #0xc] + cmp r3, #0x2 + blt _020AA230 + ldr r0, [r4, #0x474] + ldr r2, [r4, #0x14] + add r1, r4, #0x1c + bl FUN_020A8C28 + b _020AA25C +_020AA230: + cmp r3, #0x1 + bne _020AA24C + ldr r0, [r4, #0x474] + ldr r2, [r4, #0x14] + add r1, r4, #0x1c + bl FUN_020AB328 + b _020AA25C +_020AA24C: + ldr r0, [r4, #0x474] + ldr r2, [r4, #0x14] + add r1, r4, #0x1c + bl FUN_020AB2C0 +_020AA25C: + add r1, r4, #0x1c + mov r0, r4 + str r1, [r4, #0x474] + bl FUN_020AB088 + ldrb r1, [r4, #0x11] + mov r0, r4 + bl FUN_020AB500 +_020AA278: ; 0x020AA278 + cmp r0, #0x0 + bge _020AA288 + mov r0, r4 + bl FUN_020ACD90 +_020AA288: + add r7, r7, #0x1 + cmp r7, r6 + blt _020AA204 +_020AA294: + mov r0, r6 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020AA2A0 +FUN_020AA2A0: ; 0x020AA2A0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr r4, _020AA4A8 ; =0x021CA8D0 + mov r10, r0 + ldr r0, [r4, #0x0] + ldr r7, [sp, #0x28] + cmp r0, #0x0 + mov r5, #0x0 + mov r9, r1 + mov r8, r2 + mov r11, r3 + addeq sp, sp, #0x4 + moveq r0, r5 + ldmeqia sp!, {r4-r11,pc} +_020AA2D8: ; 0x020AA2D8 + ldr r1, _020AA4AC ; =0x021CA8E8 + mov r2, r5 +_020AA2E0: + ldr r0, [r1, #0x38] + cmp r10, r0 + ldreq r1, _020AA4AC ; =0x021CA8E8 + moveq r0, #0x94 + mlaeq r5, r2, r0, r1 + beq _020AA308 + add r2, r2, #0x1 + cmp r2, #0x3 + add r1, r1, #0x94 + blo _020AA2E0 +_020AA308: + cmp r5, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r11,pc} +_020AA318: ; 0x020AA318 + ldrb r0, [r9, #0x4] + cmp r0, #0x41 + bne _020AA344 + ldrh r2, [r9, #0x6] + mov r0, #0x0 + mov r1, #0x1 + str r2, [r5, #0x30] + str r0, [r5, #0x4c] + add sp, sp, #0x4 + str r1, [r5, #0x6c] + ldmia sp!, {r4-r11,pc} +_020AA344: + cmp r0, #0x40 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r11,pc} +_020AA354: ; 0x020AA354 + ldrb r0, [r9, #0x5] + and r4, r0, #0x7f + cmp r4, #0x5 + addge sp, sp, #0x4 + str r4, [r5, #0x24] + movge r0, #0x0 + ldmgeia sp!, {r4-r11,pc} +_020AA370: ; 0x020AA370 + ldr r1, _020AA4B0 ; =0x020FF689 + ldr r0, _020AA4B4 ; =0x020FF688 + ldrb r2, [r1, r4, lsl #0x1] + ldrb r1, [r0, r4, lsl #0x1] + mov r0, #0x44 + mla r0, r1, r0, r2 + add r0, r0, #0xc + cmp r8, r0 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r11,pc} +_020AA39C: ; 0x020AA39C + cmp r10, #0x0 + movne r0, #0x1 + movne r1, r0, lsl r10 + ldr r0, _020AA4B8 ; =0x021CA8B4 + moveq r1, #0x1 + ldr r0, [r0, #0x0] + ands r0, r0, r1 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r11,pc} +_020AA3C4: ; 0x020AA3C4 + bl FUN_020ACDC8 + movs r6, r0 + bne _020AA40C + ldr r0, [r5, #0x34] + bl FUN_020AB6C4 + ldr r0, [r5, #0x34] + bl FUN_020AB234 + bl FUN_020ACDC8 + movs r6, r0 + bne _020AA3FC + bl FUN_020AB630 + bl FUN_020AB1E4 + bl FUN_020ACDC8 + mov r6, r0 +_020AA3FC: + cmp r6, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r11,pc} +_020AA40C: + ldr r0, _020AA4BC ; =0x0000045C + sub r2, r8, #0xc + add r0, r6, r0 + sub r1, r0, r2 + add r0, r9, #0xc + str r1, [sp, #0x0] + bl MI_CpuCopy8 + ldr r0, [r5, #0x34] + sub r1, r8, #0xc + strb r0, [r6, #0x11] + ldr r0, [sp, #0x0] + str r4, [r6, #0xc] + str r0, [r6, #0x474] + str r1, [r6, #0x14] + str r11, [r6, #0x464] + str r7, [r6, #0x468] + strb r10, [r6, #0x10] + ldrb r2, [r9, #0x5] + mov r0, r5 + mov r1, r6 + and r2, r2, #0x80 + str r2, [r6, #0x45c] + ldr r2, [r9, #0x8] + str r2, [r6, #0x460] + ldrh r2, [r9, #0x6] + str r2, [r6, #0x18] + bl FUN_020AB760 +_020AA478: ; 0x020AA478 + cmp r0, #0x0 + bne _020AA494 + mov r0, r6 + bl FUN_020ACD90 + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r11,pc} +_020AA494: + mov r0, r6 + bl FUN_020AB164 + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020AA4A8: .word 0x021CA8D0 +_020AA4AC: .word 0x021CA8E8 +_020AA4B0: .word 0x020FF689 +_020AA4B4: .word 0x020FF688 +_020AA4B8: .word 0x021CA8B4 +_020AA4BC: .word 0x0000045C + + arm_func_start FUN_020AA4C0 +FUN_020AA4C0: ; 0x020AA4C0 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + ldr r0, _020AA728 ; =0x021CAF00 + ldr r1, _020AA72C ; =0x021CA8CC + ldr r3, [r0, #0x8c4] + ldr r2, [r0, #0x8c0] + ldr r5, [r1, #0x0] + sub r1, r3, r2 + cmp r1, #0x1 + subhi r1, r3, #0x1 + strhi r1, [r0, #0x8c0] + movhi r1, #0x1 + cmp r1, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,pc} +_020AA500: ; 0x020AA500 + ldr r0, _020AA728 ; =0x021CAF00 + ldr r0, [r0, #0x8c0] + ands r0, r0, #0x1 + movne r1, #0x0 + moveq r1, #0x460 + ldr r0, _020AA728 ; =0x021CAF00 + cmp r5, #0x2 + add r8, r0, r1 + ldr r1, _020AA730 ; =0x021CA8D4 + add r7, r8, #0xc + addge r7, r7, #0x4 + ldr r1, [r1, #0x0] + mov r0, r7 + bl FUN_020AD500 + ldr r2, _020AA734 ; =0x040002B0 + mov r3, #0x0 + ldr r1, _020AA738 ; =0x040002B8 + mov r6, r0 + strh r3, [r2, #0x0] + str r6, [r1, #0x0] +_020AA550: + ldrh r0, [r2, #0x0] + ands r0, r0, #0x8000 + bne _020AA550 + ldr r0, _020AA73C ; =0x021CA8C8 + ldr r1, _020AA740 ; =0x040002B4 + ldr r0, [r0, #0x0] + ldr r4, [r1, #0x0] + cmp r0, #0x0 + beq _020AA588 + ldr r1, _020AA730 ; =0x021CA8D4 + mov r0, r7 + ldr r1, [r1, #0x0] + mov r2, r4 + bl FUN_020AD1CC +_020AA588: + ldr r0, _020AA744 ; =0x0210646C + strb r5, [r8, #0x5] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020AA5FC + mov r0, r6 + mov r1, r4 + mov r2, #0x0 + bl FUN_020ACF38 + ldr r1, _020AA748 ; =0x021CA8D8 + cmp r0, #0x0 + str r0, [r1, #0x0] + beq _020AA5D4 + cmp r0, #0x1 + beq _020AA5F0 + cmp r0, #0x3 + moveq r0, #0x41 + streqb r0, [r8, #0x4] + b _020AA5FC +_020AA5D4: + ldr r1, _020AA728 ; =0x021CAF00 + add sp, sp, #0x8 + ldr r2, [r1, #0x8c0] + mov r0, #0x0 + add r2, r2, #0x1 + str r2, [r1, #0x8c0] + ldmia sp!, {r4-r8,pc} +_020AA5F0: + ldrb r0, [r8, #0x5] + orr r0, r0, #0x80 + strb r0, [r8, #0x5] +_020AA5FC: + ldr r0, _020AA744 ; =0x0210646C + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020AA62C + ldr r0, _020AA74C ; =0x021CA8B8 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + ldrneb r2, [r8, #0x5] + movne r1, #0x0 + orrne r2, r2, #0x80 + strneb r2, [r8, #0x5] + strne r1, [r0, #0x0] +_020AA62C: + ldr r0, _020AA750 ; =0x021CA8C4 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + ldrneb r2, [r8, #0x5] + movne r1, #0x0 + orrne r2, r2, #0x80 + strneb r2, [r8, #0x5] + strne r1, [r0, #0x0] + cmp r5, #0x2 + blt _020AA690 + ldrb r0, [r8, #0x5] + ldr r3, _020AA754 ; =0x021CA8C0 + ands r0, r0, #0x80 + ldrne r0, _020AA754 ; =0x021CA8C0 + movne r1, #0x0 + strneh r1, [r0, #0x0] + strneb r1, [r0, #0x2] + ldr r0, _020AA730 ; =0x021CA8D4 + str r5, [sp, #0x0] + ldr r2, [r0, #0x0] + mov r1, r7 + sub r0, r7, #0x4 + mov r2, r2, lsr #0x1 + bl FUN_020A8BC8 + b _020AA6D4 +_020AA690: + cmp r5, #0x1 + bne _020AA6B4 + ldr r1, _020AA730 ; =0x021CA8D4 + mov r0, r7 + ldr r2, [r1, #0x0] + mov r1, r7 + mov r2, r2, lsr #0x1 + bl FUN_020AB37C + b _020AA6D4 +_020AA6B4: + cmp r5, #0x0 + bne _020AA6D4 + ldr r1, _020AA730 ; =0x021CA8D4 + mov r0, r7 + ldr r2, [r1, #0x0] + mov r1, r7 + mov r2, r2, lsr #0x1 + bl FUN_020AB2FC +_020AA6D4: + ldr r0, _020AA758 ; =0x021CCD20 + ldr r1, _020AA75C ; =0x021CA8B4 + ldrb r0, [r0, #0x0] + mov r2, #0x1 + ldr r3, [r1, #0x0] + mvn r0, r2, lsl r0 + ldr r1, _020AA728 ; =0x021CAF00 + and r0, r3, r0 + str r3, [r1, #0x8cc] + str r0, [r1, #0x8cc] + bl MATH_CountPopulation + sub r0, r0, #0x1 + ldr r1, _020AA728 ; =0x021CAF00 + cmp r0, #0x7 + str r0, [r1, #0x8d4] + movgt r0, #0x0 + movle r2, #0x0 + movle r0, r8 + strle r2, [r1, #0x8d0] + add sp, sp, #0x8 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020AA728: .word 0x021CAF00 +_020AA72C: .word 0x021CA8CC +_020AA730: .word 0x021CA8D4 +_020AA734: .word 0x040002B0 +_020AA738: .word 0x040002B8 +_020AA73C: .word 0x021CA8C8 +_020AA740: .word 0x040002B4 +_020AA744: .word 0x0210646C +_020AA748: .word 0x021CA8D8 +_020AA74C: .word 0x021CA8B8 +_020AA750: .word 0x021CA8C4 +_020AA754: .word 0x021CA8C0 +_020AA758: .word 0x021CCD20 +_020AA75C: .word 0x021CA8B4 + + arm_func_start FUN_020AA760 +FUN_020AA760: ; 0x020AA760 + ldr r1, _020AA76C ; =0x021CA8C8 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020AA76C: .word 0x021CA8C8 + + arm_func_start FUN_020AA770 +FUN_020AA770: ; 0x020AA770 + stmdb sp!, {r4,lr} + ldr r1, _020AA798 ; =0x0210646C + mov r4, r0 + str r4, [r1, #0x0] + bl FUN_020AD170 +_020AA784: ; 0x020AA784 + cmp r4, #0x0 + ldreq r0, _020AA79C ; =0x021CA8B8 + moveq r1, #0x1 + streq r1, [r0, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_020AA798: .word 0x0210646C +_020AA79C: .word 0x021CA8B8 + + arm_func_start FUN_020AA7A0 +FUN_020AA7A0: ; 0x020AA7A0 + cmp r0, #0x5 + movge r0, #0x0 + bxge lr + ldr r1, _020AA80C ; =0x021CCD20 + ldr r1, [r1, #0x10] + cmp r1, #0x1 + beq _020AA7C8 + cmp r0, #0x1 + movls r0, #0x0 + bxls lr +_020AA7C8: + ldr r2, _020AA810 ; =0x020FF689 + ldr r1, _020AA814 ; =0x020FF688 + ldrb r12, [r2, r0, lsl #0x1] + ldrb r3, [r1, r0, lsl #0x1] + mov r1, #0x44 + ldr r2, _020AA818 ; =0x021CA8CC + mla r12, r3, r1, r12 + str r0, [r2, #0x0] + ldr r1, _020AA81C ; =0x021CA8BC + add r3, r12, #0xc + ldr r0, _020AA820 ; =0x021CA8C0 + mov r2, #0x0 + str r3, [r1, #0x0] + strh r2, [r0, #0x0] + strb r2, [r0, #0x2] + mov r0, #0x1 + bx lr + .balign 4 +_020AA80C: .word 0x021CCD20 +_020AA810: .word 0x020FF689 +_020AA814: .word 0x020FF688 +_020AA818: .word 0x021CA8CC +_020AA81C: .word 0x021CA8BC +_020AA820: .word 0x021CA8C0 + + arm_func_start FUN_020AA824 +FUN_020AA824: ; 0x020AA824 + stmdb sp!, {r4-r10,lr} + movs r5, r2 + mov r7, r0 + movne r0, #0x0 + strne r0, [r5, #0x0] + ldr r0, _020AA958 ; =0x021CA8D4 + mov r6, r1 + ldr r0, [r0, #0x0] + mov r4, #0x0 + cmp r6, r0 + bne _020AA920 + ldr r8, _020AA95C ; =0x021CA8D0 + ldr r0, [r8, #0x0] + cmp r0, #0x0 + beq _020AA920 + mov r9, r4 + cmp r0, #0x0 + bls _020AA89C +_020AA86C: + mov r0, r7 + mov r1, r6 + mov r2, r9 + mov r3, r5 + bl FUN_020AA968 + cmp r0, #0x1 + moveq r4, #0x1 + beq _020AA89C + ldr r0, [r8, #0x0] + add r9, r9, #0x1 + cmp r9, r0 + blo _020AA86C +_020AA89C: + cmp r4, #0x0 + beq _020AA90C + ldr r8, _020AA95C ; =0x021CA8D0 + add r10, r9, #0x1 + ldr r0, [r8, #0x0] + cmp r10, r0 + moveq r4, #0x1 + beq _020AA934 + cmp r10, r0 + bhs _020AA934 + ldr sb, _020AA960 ; =0x021CAAA4 +_020AA8C8: + mov r0, r9 + mov r1, r6 + mov r2, r10 + mov r3, r5 + bl FUN_020AA968 + cmp r0, #0x1 + bne _020AA8F8 + mov r0, r7 + mov r1, r9 + mov r2, r7 + mov r3, r6 + bl FUN_020AD61C +_020AA8F8: + ldr r0, [r8, #0x0] + add r10, r10, #0x1 + cmp r10, r0 + blo _020AA8C8 + b _020AA934 +_020AA90C: + mov r1, r7 + mov r2, r6 + mov r0, #0x0 + bl MIi_CpuClearFast + b _020AA934 +_020AA920: + mov r1, r7 + mov r2, r6 + mov r0, #0x0 + bl MIi_CpuClearFast + mov r4, #0x0 +_020AA934: + ldr r0, _020AA964 ; =0x021CA8C8 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020AA950 + mov r0, r7 + mov r1, r6 + bl FUN_020AD45C +_020AA950: + mov r0, r4 + ldmia sp!, {r4-r10,pc} + .balign 4 +_020AA958: .word 0x021CA8D4 +_020AA95C: .word 0x021CA8D0 +_020AA960: .word 0x021CAAA4 +_020AA964: .word 0x021CA8C8 + + arm_func_start FUN_020AA968 +FUN_020AA968: ; 0x020AA968 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + ldr r4, _020AABD4 ; =0x021CA8E8 + mov r10, r2 + mov r2, #0x94 + mla r6, r10, r2, r4 + str r0, [sp, #0x0] + mov r0, r10 + str r1, [sp, #0x4] + str r3, [sp, #0x8] + mov r5, #0x1 + bl FUN_020AB434 + movs r8, r0 + beq _020AABB0 + mov r11, #0x0 +_020AA9A4: + bl OS_GetTick + mov r4, r0 + mov r0, r10 + mov r9, r1 + bl FUN_020AB4B8 + movs r7, r0 + beq _020AAB98 + mov r0, #0x34 + adds r2, r4, r0 + ldr r8, [r7, #0x46c] + ldr r3, [r7, #0x470] + mov r1, #0x0 + adc r0, r9, #0x0 + cmp r3, r0 + cmpeq r8, r2 + bls _020AAA68 + ldr r0, [r7, #0x45c] + cmp r0, #0x0 + bne _020AAA5C + ldr r0, [r6, #0x3c] + cmp r0, #0x0 + beq _020AAA5C + ldr r0, [r6, #0x20] + ldr r1, [sp, #0x0] + add r0, r0, #0x1 + str r0, [r6, #0x20] + ldr r0, [r6, #0x3c] + ldr r2, [sp, #0x4] + ldr r0, [r0, #0x474] + bl MIi_CpuCopyFast + ldr r0, [r6, #0x3c] + bl FUN_020ACD90 +_020AAA24: ; 0x020AAA24 + mov r0, #0x0 + str r0, [r6, #0x3c] + ldr r0, [sp, #0x8] + cmp r0, #0x0 + beq _020AAA50 + ldrb r1, [r7, #0x10] + ldr r2, [r0, #0x0] + mov r0, #0x1 + orr r1, r2, r0, lsl r1 + ldr r0, [sp, #0x8] + str r1, [r0, #0x0] +_020AAA50: + add sp, sp, #0xc + mov r0, #0x1 + ldmia sp!, {r4-r11,pc} +_020AAA5C: + add sp, sp, #0xc + mov r0, #0x0 + ldmia sp!, {r4-r11,pc} +_020AAA68: + ldr r0, _020AABD8 ; =0x00008B4C + adds r2, r8, r0 + adc r0, r3, r1 + cmp r9, r0 + cmpeq r4, r2 + bls _020AAAA8 + ldr r2, [r7, #0x18] + mov r0, r6 + mov r1, r7 + str r2, [r6, #0x58] + bl FUN_020ABC0C + mov r8, r0 + mov r0, r10 + bl FUN_020AB4B8 + mov r5, r11 + b _020AABA8 +_020AAAA8: + ldr r1, [r6, #0x58] + ldr r2, [r7, #0x18] + add r0, r1, #0x1 + cmp r0, r2 + beq _020AAAE0 + cmp r1, #0x0 + beq _020AAAE0 + cmp r1, r2 + bhi _020AAAE0 + ldr r0, [r7, #0x45c] + cmp r0, #0x0 + ldreq r0, [r6, #0x14] + addeq r0, r0, #0x1 + streq r0, [r6, #0x14] +_020AAAE0: + ldr r0, [r7, #0x18] + cmp r5, #0x0 + str r0, [r6, #0x58] + beq _020AAB24 + ldr r0, [r6, #0x70] + cmp r0, #0x0 + beq _020AAB24 + mov r0, r6 + mov r1, r7 + bl FUN_020ABC0C + mov r8, r0 + mov r0, r10 + bl FUN_020AB4B8 + ldr r0, [r6, #0x70] + sub r0, r0, #0x1 + str r0, [r6, #0x70] + b _020AABA8 +_020AAB24: + ldr r1, [r7, #0x464] + ldr r0, [r6, #0x28] + subs r2, r4, r1 + str r2, [r6, #0x28] + ldr r1, [r6, #0x28] + sub r0, r2, r0 + sub r0, r0, r1 + add r0, r1, r0, lsr #0x4 + str r0, [r6, #0x2c] + str r0, [r6, #0x0] + ldr r0, [r7, #0x474] + ldr r1, [sp, #0x0] + ldr r2, [sp, #0x4] + bl MIi_CpuCopyFast + mov r0, r6 + mov r1, r7 + bl FUN_020ABC0C + ldr r0, [sp, #0x8] + cmp r0, #0x0 + beq _020AAB8C + ldrb r1, [r7, #0x10] + ldr r2, [r0, #0x0] + mov r0, #0x1 + orr r1, r2, r0, lsl r1 + ldr r0, [sp, #0x8] + str r1, [r0, #0x0] +_020AAB8C: + add sp, sp, #0xc + mov r0, #0x1 + ldmia sp!, {r4-r11,pc} +_020AAB98: + add sp, sp, #0xc + str r8, [r6, #0x8] + mov r0, #0x0 + ldmia sp!, {r4-r11,pc} +_020AABA8: + cmp r8, #0x0 + bne _020AA9A4 +_020AABB0: + ldr r0, [r6, #0x3c] + cmp r0, #0x0 + beq _020AABC8 + bl FUN_020ACD90 +_020AABC0: ; 0x020AABC0 + mov r0, #0x0 + str r0, [r6, #0x3c] +_020AABC8: + mov r0, #0x0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020AABD4: .word 0x021CA8E8 +_020AABD8: .word 0x00008B4C + + arm_func_start FUN_020AABDC +FUN_020AABDC: ; 0x020AABDC + stmdb sp!, {r4,lr} + ldr r3, _020AACE0 ; =0x021CA8D4 + mov r2, r1 + ldr r1, [r3, #0x0] + mov r12, #0x0 + cmp r2, r1 + movne r0, r12 + ldmneia sp!, {r4,pc} +_020AABFC: ; 0x020AABFC + ldr r1, _020AACE4 ; =0x021CA8D0 + ldr r4, [r1, #0x0] + cmp r4, #0x0 + moveq r0, r12 + ldmeqia sp!, {r4,pc} +_020AAC10: ; 0x020AAC10 + mov lr, r12 + cmp r4, #0x0 + bls _020AAC48 + ldr r3, _020AACE8 ; =0x021CA8DC +_020AAC20: + ldr r1, [r3, lr, lsl #0x2] + cmp r1, #0x0 + beq _020AAC3C + ldr r1, [r1, #0xc] + cmp r1, #0x2 + moveq r12, #0x1 + beq _020AAC48 +_020AAC3C: + add lr, lr, #0x1 + cmp lr, r4 + blo _020AAC20 +_020AAC48: + cmp r12, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020AAC54: ; 0x020AAC54 + ldr r1, _020AACEC ; =0x021CAF00 + ldr r4, _020AACEC ; =0x021CAF00 + ldr r1, [r1, #0x8c4] + ldr r3, _020AACF0 ; =0x5F564354 + ands r1, r1, #0x1 + movne r12, #0x0 + moveq r12, #0x460 + str r3, [r4, r12] + ldr r1, _020AACF4 ; =0x021CA8CC + add r4, r4, r12 + ldr r1, [r1, #0x0] + cmp r1, #0x2 + blt _020AAC94 + add r1, r4, #0x10 + bl MIi_CpuCopyFast + b _020AAC9C +_020AAC94: + add r1, r4, #0xc + bl MIi_CpuCopyFast +_020AAC9C: + mov r1, #0x40 + ldr r0, _020AACF8 ; =0x021CA8B0 + strb r1, [r4, #0x4] + ldrh r2, [r0, #0x0] + add r1, r2, #0x1 + strh r1, [r0, #0x0] + strh r2, [r4, #0x6] + bl OS_GetTick + mov r0, r0, lsr #0x6 + orr r0, r0, r1, lsl #0x1a + ldr r1, _020AACEC ; =0x021CAF00 + str r0, [r4, #0x8] + ldr r2, [r1, #0x8c4] + mov r0, #0x1 + add r2, r2, #0x1 + str r2, [r1, #0x8c4] + ldmia sp!, {r4,pc} + .balign 4 +_020AACE0: .word 0x021CA8D4 +_020AACE4: .word 0x021CA8D0 +_020AACE8: .word 0x021CA8DC +_020AACEC: .word 0x021CAF00 +_020AACF0: .word 0x5F564354 +_020AACF4: .word 0x021CA8CC +_020AACF8: .word 0x021CA8B0 + + arm_func_start FUN_020AACFC +FUN_020AACFC: ; 0x020AACFC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, #0x0 + ldr ip, _020AADB8 ; =0x021CA8DC +_020AAD10: + ldr r0, [r12, r4, lsl #0x2] + mov lr, r4, lsl #0x2 + cmp r0, r5 + bne _020AAD74 + ldr r1, _020AADBC ; =0x021CA8E8 + mov r0, #0x94 + mla r0, r4, r0, r1 + ldr r1, _020AADC0 ; =0x021CA8D0 + mov r3, #0x0 + ldr r2, [r1, #0x0] + str r3, [r12, lr] + sub r2, r2, #0x1 + str r2, [r1, #0x0] + bl FUN_020ABC40 + mov r0, r4 + bl FUN_020AB6C4 + mov r0, r4 + bl FUN_020AB234 + ldr r0, _020AADC4 ; =0x021CA8B4 + ldr r1, [r5, #0x8] + ldr r2, [r0, #0x0] + mvn r1, r1 + and r1, r2, r1 + str r1, [r0, #0x0] + b _020AAD80 +_020AAD74: + add r4, r4, #0x1 + cmp r4, #0x3 + blo _020AAD10 +_020AAD80: + ldr r0, _020AADC0 ; =0x021CA8D0 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,pc} +_020AAD94: ; 0x020AAD94 + ldr r0, _020AADC8 ; =0x021CA8C4 + mov r1, #0x1 + str r1, [r0, #0x0] + bl FUN_020AD170 + ldr r0, _020AADC4 ; =0x021CA8B4 + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AADB8: .word 0x021CA8DC +_020AADBC: .word 0x021CA8E8 +_020AADC0: .word 0x021CA8D0 +_020AADC4: .word 0x021CA8B4 +_020AADC8: .word 0x021CA8C4 + + arm_func_start FUN_020AADCC +FUN_020AADCC: ; 0x020AADCC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + movs r5, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} +_020AADE4: ; 0x020AADE4 + ldr r0, _020AAF24 ; =0x021CA8D0 + ldr r0, [r0, #0x0] + cmp r0, #0x3 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} +_020AADFC: ; 0x020AADFC + ldr r0, [r5, #0xc] + cmp r0, #0x2 + beq _020AAE18 + cmp r0, #0x3 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r5,pc} +_020AAE18: + ldr r1, _020AAF28 ; =0x021CA8DC + mov r2, #0x0 +_020AAE20: + ldr r0, [r1, r2, lsl #0x2] + cmp r0, r5 + addeq sp, sp, #0x4 + moveq r0, #0x1 + ldmeqia sp!, {r4-r5,pc} +_020AAE34: ; 0x020AAE34 + add r2, r2, #0x1 + cmp r2, #0x3 + blo _020AAE20 + ldr r1, _020AAF28 ; =0x021CA8DC + mov r4, #0x0 +_020AAE48: + ldr r0, [r1, r4, lsl #0x2] + mov r2, r4, lsl #0x2 + cmp r0, #0x0 + streq r5, [r1, r2] + beq _020AAE68 + add r4, r4, #0x1 + cmp r4, #0x3 + blo _020AAE48 +_020AAE68: + ldr r0, _020AAF24 ; =0x021CA8D0 + ldr r1, _020AAF2C ; =0x021CA8B4 + ldr r3, [r0, #0x0] + ldr r2, _020AAF30 ; =0x021CA8E8 + add r3, r3, #0x1 + str r3, [r0, #0x0] + mov r0, #0x94 + ldr r12, [r1, #0x0] + ldr r3, [r5, #0x8] + mla r0, r4, r0, r2 + orr r2, r12, r3 + str r2, [r1, #0x0] + ldrb r2, [r5, #0x5] + mov r1, r4 + bl FUN_020ABC6C + mov r0, r4 + bl FUN_020AB714 + ldr r0, [r5, #0xc] + cmp r0, #0x2 + addne sp, sp, #0x4 + movne r0, #0x1 + ldmneia sp!, {r4-r5,pc} +_020AAEC0: ; 0x020AAEC0 + ldr r0, _020AAF24 ; =0x021CA8D0 + ldr r0, [r0, #0x0] + cmp r0, #0x1 + bne _020AAF18 + bl FUN_020AD170 + bl OS_GetTickLo + ldr r4, _020AAF34 ; =0x021CA8B0 + ldr r3, _020AAF38 ; =0x021CA8C0 + mov r12, #0x0 + ldr r1, _020AAF3C ; =0x021CAF00 + ldr r2, _020AAF40 ; =0x021CA8C4 + mov r5, #0x1 + strh r0, [r4, #0x0] + strh r12, [r3, #0x0] + strb r12, [r3, #0x2] + str r5, [r2, #0x0] + str r12, [r1, #0x8c0] + str r12, [r1, #0x8c4] + str r12, [r1, #0x8cc] + str r12, [r1, #0x8c8] + str r12, [r1, #0x8d0] + str r12, [r1, #0x8d4] +_020AAF18: + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AAF24: .word 0x021CA8D0 +_020AAF28: .word 0x021CA8DC +_020AAF2C: .word 0x021CA8B4 +_020AAF30: .word 0x021CA8E8 +_020AAF34: .word 0x021CA8B0 +_020AAF38: .word 0x021CA8C0 +_020AAF3C: .word 0x021CAF00 +_020AAF40: .word 0x021CA8C4 + + arm_func_start FUN_020AAF44 +FUN_020AAF44: ; 0x020AAF44 + ldr r0, _020AAF54 ; =0x021CA8D0 + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + .balign 4 +_020AAF54: .word 0x021CA8D0 + + arm_func_start FUN_020AAF58 +FUN_020AAF58: + stmdb sp!, {r4-r8,lr} + bl OS_GetTickLo + ldr r1, _020AB054 ; =0x021CCD20 + ldr ip, _020AB058 ; =0x021CA8B0 + ldr r4, [r1, #0x10] + strh r0, [r12, #0x0] + cmp r4, #0x1 + ldreq r0, _020AB05C ; =0x021CA8CC + mov r5, #0x0 + ldr r1, _020AB060 ; =0x021CA8B4 + streq r5, [r0, #0x0] + str r5, [r1, #0x0] + ldr r2, _020AB064 ; =0x021CA8D0 + ldrne r0, _020AB05C ; =0x021CA8CC + movne r1, #0x4 + strne r1, [r0, #0x0] + str r5, [r2, #0x0] + ldr r0, _020AB05C ; =0x021CA8CC + ldr r3, _020AB068 ; =0x0210646C + ldr r2, [r0, #0x0] + mov r6, #0x1 + ldr r1, _020AB06C ; =0x020FF689 + str r6, [r3, #0x0] + ldr r0, _020AB070 ; =0x020FF688 + ldrb r3, [r1, r2, lsl #0x1] + ldrb r1, [r0, r2, lsl #0x1] + mov r0, #0x44 + ldr r2, _020AB074 ; =0x021CA8D4 + mla r0, r1, r0, r3 + add r4, r0, #0xc + ldr r1, _020AB078 ; =0x021CA8BC + mov r5, #0x440 + ldr r0, _020AB07C ; =0x021CAF00 + mov r3, #0x0 + str r5, [r2, #0x0] + str r4, [r1, #0x0] + str r3, [r0, #0x8c0] + str r3, [r0, #0x8c4] + str r3, [r0, #0x8cc] + str r3, [r0, #0x8c8] + str r3, [r0, #0x8d0] + str r3, [r0, #0x8d4] + bl FUN_020ACF10 + mov r8, #0x0 + ldr r7, _020AB080 ; =0x021CA8E8 + ldr r5, _020AB084 ; =0x021CA8DC + mov r6, r8 + mvn r4, #0x0 +_020AB018: + mov r0, r8 + str r6, [r5, r8, lsl #0x2] + bl FUN_020AB714 + mov r0, r7 + mov r1, r8 + mov r2, r4 + bl FUN_020ABC6C + add r8, r8, #0x1 + cmp r8, #0x3 + add r7, r7, #0x94 + blo _020AB018 + bl FUN_020AB284 + bl FUN_020AD474 + mov r0, #0x1 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020AB054: .word 0x021CCD20 +_020AB058: .word 0x021CA8B0 +_020AB05C: .word 0x021CA8CC +_020AB060: .word 0x021CA8B4 +_020AB064: .word 0x021CA8D0 +_020AB068: .word 0x0210646C +_020AB06C: .word 0x020FF689 +_020AB070: .word 0x020FF688 +_020AB074: .word 0x021CA8D4 +_020AB078: .word 0x021CA8BC +_020AB07C: .word 0x021CAF00 +_020AB080: .word 0x021CA8E8 +_020AB084: .word 0x021CA8DC + + arm_func_start FUN_020AB088 +FUN_020AB088: ; 0x020AB088 + ldr r2, [r0, #0x4] + cmp r2, #0x0 + ldrne r1, [r0, #0x8] + strne r1, [r2, #0x8] + bne _020AB0B4 + ldr r2, [r0, #0x8] + ldr r1, _020AB100 ; =0x021CB7D8 + cmp r2, #0x0 + str r2, [r1, #0x0] + movne r1, #0x0 + strne r1, [r2, #0x4] +_020AB0B4: + ldr r2, [r0, #0x8] + cmp r2, #0x0 + ldrne r1, [r0, #0x4] + strne r1, [r2, #0x4] + bne _020AB0E0 + ldr r2, [r0, #0x4] + ldr r1, _020AB104 ; =0x021CB7DC + cmp r2, #0x0 + str r2, [r1, #0x0] + movne r1, #0x0 + strne r1, [r2, #0x8] +_020AB0E0: + ldrb r2, [r0, #0x11] + ldr r3, _020AB108 ; =0x021CB7E0 + ldr r1, [r3, r2, lsl #0x2] + sub r1, r1, #0x1 + str r1, [r3, r2, lsl #0x2] + ldrb r0, [r0, #0x11] + ldr r0, [r3, r0, lsl #0x2] + bx lr + .balign 4 +_020AB100: .word 0x021CB7D8 +_020AB104: .word 0x021CB7DC +_020AB108: .word 0x021CB7E0 + + arm_func_start FUN_020AB10C +FUN_020AB10C: ; 0x020AB10C + ldr r1, _020AB140 ; =0x021CB7D8 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020AB138 +_020AB11C: + ldrb r1, [r2, #0x11] + cmp r1, r0 + moveq r0, r2 + bxeq lr + ldr r2, [r2, #0x8] + cmp r2, #0x0 + bne _020AB11C +_020AB138: + mov r0, #0x0 + bx lr + .balign 4 +_020AB140: .word 0x021CB7D8 + + arm_func_start FUN_020AB144 +FUN_020AB144: ; 0x020AB144 + ldr r1, _020AB150 ; =0x021CB7E0 + ldr r0, [r1, r0, lsl #0x2] + bx lr + .balign 4 +_020AB150: .word 0x021CB7E0 + + arm_func_start FUN_020AB154 +FUN_020AB154: + ldr r0, _020AB160 ; =0x021CB7D8 + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020AB160: .word 0x021CB7D8 + + arm_func_start FUN_020AB164 +FUN_020AB164: ; 0x020AB164 + ldr r2, _020AB1D8 ; =0x021CB7D8 + ldr r1, [r2, #0x0] + cmp r1, #0x0 + bne _020AB198 + str r0, [r2, #0x0] + mov r12, #0x0 + str r12, [r0, #0x4] + ldr r3, [r2, #0x0] + ldr r1, _020AB1DC ; =0x021CB7DC + str r12, [r3, #0x8] + ldr r2, [r2, #0x0] + str r2, [r1, #0x0] + b _020AB1B8 +_020AB198: + ldr r1, _020AB1DC ; =0x021CB7DC + mov r2, #0x0 + ldr r3, [r1, #0x0] + str r3, [r0, #0x4] + str r2, [r0, #0x8] + ldr r2, [r1, #0x0] + str r0, [r2, #0x8] + str r0, [r1, #0x0] +_020AB1B8: + ldrb r2, [r0, #0x11] + ldr r3, _020AB1E0 ; =0x021CB7E0 + ldr r1, [r3, r2, lsl #0x2] + add r1, r1, #0x1 + str r1, [r3, r2, lsl #0x2] + ldrb r0, [r0, #0x11] + ldr r0, [r3, r0, lsl #0x2] + bx lr + .balign 4 +_020AB1D8: .word 0x021CB7D8 +_020AB1DC: .word 0x021CB7DC +_020AB1E0: .word 0x021CB7E0 + + arm_func_start FUN_020AB1E4 +FUN_020AB1E4: ; 0x020AB1E4 + stmdb sp!, {r4,lr} + ldr r0, _020AB22C ; =0x021CB7D8 + ldr r4, [r0, #0x0] + cmp r4, #0x0 + beq _020AB20C +_020AB1F8: + mov r0, r4 + ldr r4, [r4, #0x8] + bl FUN_020ACD90 +_020AB204: ; 0x020AB204 + cmp r4, #0x0 + bne _020AB1F8 +_020AB20C: + mov r2, #0x0 + ldr r0, _020AB230 ; =0x021CB7E0 + mov r1, r2 +_020AB218: + str r1, [r0, r2, lsl #0x2] + add r2, r2, #0x1 + cmp r2, #0x3 + blt _020AB218 + ldmia sp!, {r4,pc} + .balign 4 +_020AB22C: .word 0x021CB7D8 +_020AB230: .word 0x021CB7E0 + + arm_func_start FUN_020AB234 +FUN_020AB234: ; 0x020AB234 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl FUN_020AB10C + movs r4, r0 + beq _020AB26C +_020AB24C: + mov r0, r4 + bl FUN_020AB088 + mov r0, r4 + bl FUN_020ACD90 + mov r0, r5 + bl FUN_020AB10C + movs r4, r0 + bne _020AB24C +_020AB26C: + ldr r0, _020AB280 ; =0x021CB7E0 + mov r1, #0x0 + str r1, [r0, r5, lsl #0x2] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AB280: .word 0x021CB7E0 + + arm_func_start FUN_020AB284 +FUN_020AB284: ; 0x020AB284 + ldr r1, _020AB2B4 ; =0x021CB7DC + mov r2, #0x0 + ldr r0, _020AB2B8 ; =0x021CB7D8 + str r2, [r1, #0x0] + str r2, [r0, #0x0] + ldr r0, _020AB2BC ; =0x021CB7E0 + mov r1, r2 +_020AB2A0: + str r1, [r0, r2, lsl #0x2] + add r2, r2, #0x1 + cmp r2, #0x3 + blt _020AB2A0 + bx lr + .balign 4 +_020AB2B4: .word 0x021CB7DC +_020AB2B8: .word 0x021CB7D8 +_020AB2BC: .word 0x021CB7E0 + + arm_func_start FUN_020AB2C0 +FUN_020AB2C0: ; 0x020AB2C0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + addls sp, sp, #0x4 + mov lr, #0x0 + ldmlsia sp!, {pc} +_020AB2D8: + ldrsb r12, [r0, lr] + mov r3, lr, lsl #0x1 + add lr, lr, #0x1 + mov r12, r12, lsl #0x8 + strh r12, [r1, r3] + cmp lr, r2 + blo _020AB2D8 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020AB2FC +FUN_020AB2FC: ; 0x020AB2FC + cmp r2, #0x0 + mov r12, #0x0 + bxls lr +_020AB308: + mov r3, r12, lsl #0x1 + ldrsh r3, [r1, r3] + mov r3, r3, asr #0x8 + strb r3, [r0, r12] + add r12, r12, #0x1 + cmp r12, r2 + blo _020AB308 + bx lr + + arm_func_start FUN_020AB328 +FUN_020AB328: ; 0x020AB328 + stmdb sp!, {r4,lr} + mov r4, #0x0 + cmp r2, #0x0 + ldmlsia sp!, {r4,pc} +_020AB338: + ldrb r3, [r0, r4] + mvn lr, r3 + and r3, lr, #0xf + mov r12, r3, lsl #0x3 + and r3, lr, #0x70 + add r12, r12, #0x84 + mov r3, r3, asr #0x4 + mov r12, r12, lsl r3 + ands r3, lr, #0x80 + rsbne r12, r12, #0x84 + mov r3, r4, lsl #0x1 + subeq r12, r12, #0x84 + add r4, r4, #0x1 + strh r12, [r1, r3] + cmp r4, r2 + blo _020AB338 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020AB37C +FUN_020AB37C: ; 0x020AB37C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + mov r8, #0x0 + addls sp, sp, #0x4 + ldmlsia sp!, {r4-r11,pc} +_020AB394: ; 0x020AB394 + mov r12, r8 + mov lr, #0xff + mov r4, #0x7f + mov r3, #0x8 +_020AB3A4: + mov r5, r8, lsl #0x1 + ldrsh r5, [r1, r5] + ldr fp, _020AB42C ; =0x02106470 + movs r7, r5, asr #0x2 + movmi r6, r4 + ldr r5, _020AB430 ; =0x00001FDF + rsbmi r7, r7, #0x0 + movpl r6, lr + cmp r7, r5 + movgt r7, r5 + mov r5, r12 + add r10, r7, #0x21 +_020AB3D4: + ldr r9, [r11], #0x4 + cmp r10, r9 + ble _020AB3F0 + add r5, r5, #0x1 + cmp r5, #0x8 + blt _020AB3D4 + mov r5, r3 +_020AB3F0: + cmp r5, #0x8 + eorge r5, r6, #0x7f + bge _020AB414 + add r9, r7, #0x21 + add r7, r5, #0x1 + mov r7, r9, asr r7 + and r7, r7, #0xf + orr r5, r7, r5, lsl #0x4 + eor r5, r5, r6 +_020AB414: + strb r5, [r0, r8] + add r8, r8, #0x1 + cmp r8, r2 + blo _020AB3A4 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020AB42C: .word 0x02106470 +_020AB430: .word 0x00001FDF + + arm_func_start FUN_020AB434 +FUN_020AB434: ; 0x020AB434 + ldr r1, _020AB440 ; =0x021CB7FC + ldr r0, [r1, r0, lsl #0x2] + bx lr + .balign 4 +_020AB440: .word 0x021CB7FC + + arm_func_start FUN_020AB444 +FUN_020AB444: ; 0x020AB444 + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r3, _020AB4AC ; =0x021CB7F0 + ldr r1, _020AB4B0 ; =0x021CB7EC + ldr r2, [r3, r4, lsl #0x2] + str r0, [r1, #0x0] + cmp r2, #0x0 + mov r12, r4, lsl #0x2 + beq _020AB494 + ldr r1, _020AB4B4 ; =0x021CB7FC + ldr r2, [r2, #0x8] + ldr r0, [r1, r12] + sub r0, r0, #0x1 + str r0, [r1, r12] + str r2, [r3, r12] + ldr r1, [r3, r12] + cmp r1, #0x0 + movne r0, #0x0 + strne r0, [r1, #0x4] +_020AB494: + ldr r0, _020AB4B0 ; =0x021CB7EC + ldr r0, [r0, #0x0] + bl OS_RestoreInterrupts + ldr r0, _020AB4B4 ; =0x021CB7FC + ldr r0, [r0, r4, lsl #0x2] + ldmia sp!, {r4,pc} + .balign 4 +_020AB4AC: .word 0x021CB7F0 +_020AB4B0: .word 0x021CB7EC +_020AB4B4: .word 0x021CB7FC + + arm_func_start FUN_020AB4B8 +FUN_020AB4B8: ; 0x020AB4B8 + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r2, _020AB4F8 ; =0x021CB7F0 + ldr r1, _020AB4FC ; =0x021CB7EC + ldr r2, [r2, r4, lsl #0x2] + str r0, [r1, #0x0] + cmp r2, #0x0 + beq _020AB4EC + bl OS_RestoreInterrupts + ldr r0, _020AB4F8 ; =0x021CB7F0 + ldr r0, [r0, r4, lsl #0x2] + ldmia sp!, {r4,pc} +_020AB4EC: + bl OS_RestoreInterrupts +_020AB4F0: ; 0x020AB4F0 + mov r0, #0x0 + ldmia sp!, {r4,pc} + .balign 4 +_020AB4F8: .word 0x021CB7F0 +_020AB4FC: .word 0x021CB7EC + + arm_func_start FUN_020AB500 +FUN_020AB500: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + movs r5, r0 + mov r4, r1 + addeq sp, sp, #0x4 + mvneq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} +_020AB51C: ; 0x020AB51C + cmp r4, #0x3 + addcs sp, sp, #0x4 + mvncs r0, #0x0 + ldmcsia sp!, {r4-r5,pc} +_020AB52C: ; 0x020AB52C + bl OS_DisableInterrupts + ldr r3, _020AB620 ; =0x021CB7F0 + ldr r1, _020AB624 ; =0x021CB7EC + ldr r2, [r3, r4, lsl #0x2] + str r0, [r1, #0x0] + cmp r2, #0x0 + mov r12, r4, lsl #0x2 + bne _020AB574 + str r5, [r3, r12] + ldr r0, [r3, r12] + mov r2, #0x0 + str r2, [r0, #0x4] + ldr r1, [r3, r12] + ldr r0, _020AB628 ; =0x021CB808 + str r2, [r1, #0x8] + ldr r1, [r3, r12] + str r1, [r0, r12] + b _020AB5F4 +_020AB574: + ldr r0, _020AB628 ; =0x021CB808 + ldr r3, [r0, r12] + cmp r3, #0x0 + beq _020AB5D4 + ldr r1, [r5, #0x18] +_020AB588: + ldr r0, [r3, #0x18] + cmp r0, r1 + bhs _020AB5C8 + str r3, [r5, #0x4] + ldr r0, [r3, #0x8] + ldr r1, _020AB628 ; =0x021CB808 + str r0, [r5, #0x8] + str r5, [r3, #0x8] + ldr r0, [r5, #0x8] + mov r2, r4, lsl #0x2 + cmp r0, #0x0 + strne r5, [r0, #0x4] + ldr r0, [r1, r4, lsl #0x2] + cmp r3, r0 + streq r5, [r1, r2] + b _020AB5F4 +_020AB5C8: + ldr r3, [r3, #0x4] + cmp r3, #0x0 + bne _020AB588 +_020AB5D4: + mov r0, #0x0 + ldr r1, _020AB620 ; =0x021CB7F0 + str r0, [r5, #0x4] + ldr r0, [r1, r4, lsl #0x2] + str r0, [r5, #0x8] + ldr r0, [r1, r4, lsl #0x2] + str r5, [r0, #0x4] + str r5, [r1, r4, lsl #0x2] +_020AB5F4: + ldr r2, _020AB62C ; =0x021CB7FC + ldr r0, _020AB624 ; =0x021CB7EC + ldr r1, [r2, r4, lsl #0x2] + add r1, r1, #0x1 + str r1, [r2, r4, lsl #0x2] + ldr r0, [r0, #0x0] + bl OS_RestoreInterrupts + ldr r0, _020AB62C ; =0x021CB7FC + ldr r0, [r0, r4, lsl #0x2] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AB620: .word 0x021CB7F0 +_020AB624: .word 0x021CB7EC +_020AB628: .word 0x021CB808 +_020AB62C: .word 0x021CB7FC + + arm_func_start FUN_020AB630 +FUN_020AB630: ; 0x020AB630 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + mov r7, #0x0 + ldr r1, _020AB6B8 ; =0x021CB7EC + mov r4, r7 + mov r9, r7 + str r0, [r1, #0x0] + ldr r5, _020AB6BC ; =0x021CB7F0 + ldr r8, _020AB6C0 ; =0x021CB7FC + b _020AB69C +_020AB65C: + ldr r0, [r5, r7, lsl #0x2] + mov r6, r7, lsl #0x2 + cmp r0, #0x0 + beq _020AB694 +_020AB66C: + ldr r0, [r5, r6] + ldr r1, [r0, #0x8] + str r1, [r5, r6] + ldr r1, [r5, r6] + cmp r1, #0x0 + strne r4, [r1, #0x4] + bl FUN_020ACD90 + ldr r0, [r5, r6] + cmp r0, #0x0 + bne _020AB66C +_020AB694: + str r9, [r8, r7, lsl #0x2] + add r7, r7, #0x1 +_020AB69C: + cmp r7, #0x3 + blt _020AB65C + ldr r0, _020AB6B8 ; =0x021CB7EC + ldr r0, [r0, #0x0] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020AB6B8: .word 0x021CB7EC +_020AB6BC: .word 0x021CB7F0 +_020AB6C0: .word 0x021CB7FC + + arm_func_start FUN_020AB6C4 +FUN_020AB6C4: ; 0x020AB6C4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl FUN_020AB4B8 + movs r4, r0 + beq _020AB6FC +_020AB6DC: + mov r0, r5 + bl FUN_020AB444 + mov r0, r4 + bl FUN_020ACD90 + mov r0, r5 + bl FUN_020AB4B8 + movs r4, r0 + bne _020AB6DC +_020AB6FC: + ldr r0, _020AB710 ; =0x021CB7FC + mov r1, #0x0 + str r1, [r0, r5, lsl #0x2] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AB710: .word 0x021CB7FC + + arm_func_start FUN_020AB714 +FUN_020AB714: ; 0x020AB714 + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r1, _020AB750 ; =0x021CB7EC + ldr r3, _020AB754 ; =0x021CB808 + mov lr, #0x0 + str lr, [r3, r4, lsl #0x2] + ldr r2, _020AB758 ; =0x021CB7FC + ldr r12, [r3, r4, lsl #0x2] + ldr r3, _020AB75C ; =0x021CB7F0 + str r0, [r1, #0x0] + str r12, [r3, r4, lsl #0x2] + str lr, [r2, r4, lsl #0x2] + bl OS_RestoreInterrupts + ldmia sp!, {r4,pc} + .balign 4 +_020AB750: .word 0x021CB7EC +_020AB754: .word 0x021CB808 +_020AB758: .word 0x021CB7FC +_020AB75C: .word 0x021CB7F0 + + arm_func_start FUN_020AB760 +FUN_020AB760: + stmdb sp!, {r4-r8,lr} + mov r7, r0 + ldr r2, [r7, #0x5c] + mov r6, r1 + cmp r2, #0x0 + mov r4, #0x0 + beq _020AB790 + ldr r1, [r6, #0x18] + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + bl FUN_020ABBEC + b _020AB820 +_020AB790: + ldr r2, [r6, #0x18] + mov r2, r2, lsl #0x10 + mov r2, r2, lsr #0x10 + bl FUN_020ABB1C +_020AB7A0: ; 0x020AB7A0 + cmp r0, #0x0 + ldreq r1, [r7, #0x14] + moveq r0, r4 + addeq r1, r1, #0x1 + streq r1, [r7, #0x14] + ldmeqia sp!, {r4-r8,pc} +_020AB7B8: ; 0x020AB7B8 + ldr r0, [r6, #0x18] + str r0, [r7, #0x10] + ldr r2, [r6, #0x18] + ldr r1, [r7, #0x54] + cmp r1, r2 + ldreq r1, [r7, #0x14] + moveq r0, r4 + addeq r1, r1, #0x1 + streq r1, [r7, #0x14] + ldmeqia sp!, {r4-r8,pc} +_020AB7E0: ; 0x020AB7E0 + add r0, r1, #0x1 + cmp r0, r2 + beq _020AB820 + ldr r0, [r6, #0x45c] + cmp r0, #0x0 + bne _020AB820 + subs r0, r2, r1 + rsbmi r0, r0, #0x0 + cmp r0, #0x64 + strgt r2, [r7, #0x54] + movgt r0, #0x0 + ldmgtia sp!, {r4-r8,pc} +_020AB810: ; 0x020AB810 + cmp r1, r2 + ldrhi r0, [r7, #0x1c] + addhi r0, r0, #0x1 + strhi r0, [r7, #0x1c] +_020AB820: + ldr r0, [r6, #0x18] + str r0, [r7, #0x54] + ldr r0, [r7, #0x4c] + cmp r0, #0x0 + bne _020AB858 + ldr r1, [r6, #0x460] + ldr r0, _020ABAF4 ; =0x00000464 + str r1, [r7, #0x4c] + add r1, r6, r0 + add r0, r7, #0x44 + ldmia r1, {r2-r3} + stmia r0, {r2-r3} + mov r0, #0x0 + str r0, [r7, #0x6c] +_020AB858: + ldr r3, [r6, #0x460] + ldr r1, [r7, #0x4c] + ldr r2, [r6, #0x464] + ldr r0, [r7, #0x44] + sub r1, r3, r1 + ldr r3, [r7, #0x80] + mov r1, r1, lsl #0x6 + subs r0, r2, r0 + subs r5, r1, r0 + cmp r3, #0x0 + mov r0, #0x0 + beq _020AB894 + ldr r2, [r6, #0x45c] + cmp r2, #0x0 + beq _020AB89C +_020AB894: + str r5, [r7, #0x80] + b _020AB918 +_020AB89C: + str r5, [r7, #0x80] + subs r2, r5, r3 + ldr r8, [r7, #0x7c] + ldr r3, _020ABAF8 ; =0x00008B18 + ldr ip, _020ABAFC ; =0x0000CC8D + add r3, r8, r3 + mov r8, r3, lsl #0x1 + rsbmi r2, r2, #0x0 + mov r3, r8, asr #0x1f + adds r8, r8, r12 + mov r12, r2, asr #0x1f + adc r3, r3, #0x0 + cmp r12, r3 + cmpeq r2, r8 + bls _020AB8F4 + ldr lr, _020ABB00 ; =0x75CA82CB + mov r3, r2, lsr #0x1f + smull r12, r8, lr, r2 + mov r8, r8, asr #0xe + add r8, r3, r8 + add r3, r8, #0x2 + str r3, [r7, #0x84] +_020AB8F4: + ldr r3, [r7, #0x84] + cmp r3, #0x0 + bgt _020AB918 + ldr r3, [r7, #0x7c] + sub r2, r2, r3 + add r2, r3, r2, asr #0x4 + str r2, [r7, #0x7c] + ldr r2, [r7, #0x7c] + str r2, [r7, #0x18] +_020AB918: + ldr r3, [r7, #0x44] + ldr r12, [r7, #0x4] + ldr r2, [r7, #0x48] + adds r1, r1, r3 + adc r0, r0, r2 + adds r1, r12, r1 + str r1, [r6, #0x46c] + adc r0, r0, #0x0 + str r0, [r6, #0x470] + bl OS_GetTick + ldr r12, [r6, #0x46c] + ldr r2, _020ABAF8 ; =0x00008B18 + ldr lr, [r6, #0x470] + adds r6, r12, r2 + adc r3, lr, #0x0 + cmp r3, r1 + mov r3, #0x0 + cmpeq r6, r0 + movcc r0, r3 + ldmccia sp!, {r4-r8,pc} +_020AB968: ; 0x020AB968 + ldr r6, _020ABB04 ; =0x0007FD88 + adds r6, r0, r6 + adc r0, r1, r3 + cmp lr, r0 + cmpeq r12, r6 + movhi r0, r3 + ldmhiia sp!, {r4-r8,pc} +_020AB984: ; 0x020AB984 + ldr r0, [r7, #0x84] + cmp r0, #0x0 + bgt _020ABAE0 + ldr r1, [r7, #0x7c] + mov r0, #0x3 + mul lr, r1, r0 + ldr r6, _020ABB00 ; =0x75CA82CB + ldr r12, [r7, #0x8c] + smull r1, r0, r6, lr + mov r0, r0, asr #0xe + mov r1, lr, lsr #0x1f + cmp lr, r12 + add r0, r1, r0 + bls _020AB9EC + ldr r1, _020ABB08 ; =0x000134DF + add r6, r0, #0x1 + mla r12, r6, r2, r1 + str r12, [r7, #0x8c] + mla r1, r0, r2, r1 + ldr r2, [r7, #0x8c] + ldr r0, _020ABB0C ; =0xFFFF2F5C + add r0, r2, r0 + str r0, [r7, #0x88] + str r1, [r7, #0x4] + str r3, [r7, #0x90] + b _020ABA50 +_020AB9EC: + ldr r1, [r7, #0x88] + cmp lr, r1 + bge _020ABA50 + ldr r1, [r7, #0x90] + add r1, r1, #0x1 + str r1, [r7, #0x90] + ldr r1, [r7, #0x90] + cmp r1, #0x46 + bls _020ABA50 + ldr r1, _020ABB08 ; =0x000134DF + add r12, r0, #0x1 + mla lr, r12, r2, r1 + ldr r6, _020ABB10 ; =0xFFFFBA74 + str lr, [r7, #0x8c] + mla r1, r0, r2, r6 + str r1, [r7, #0x88] + ldr r1, [r7, #0x88] + ldr r2, _020ABB08 ; =0x000134DF + cmp r1, #0x0 + ldr r1, _020ABAF8 ; =0x00008B18 + strlt r3, [r7, #0x88] + mla r1, r0, r1, r2 + mov r3, #0x0 + str r1, [r7, #0x4] + str r3, [r7, #0x90] +_020ABA50: + ldr r1, [r7, #0x4] + ldr r0, _020ABB14 ; =0x00068520 + cmp r1, r0 + strhi r0, [r7, #0x4] + ldr r0, [r7, #0x6c] + cmp r0, #0x10 + addcc r0, r0, #0x1 + strcc r0, [r7, #0x6c] + strcc r5, [r7, #0x74] + strcc r5, [r7, #0x78] + blo _020ABA98 + ldr r1, [r7, #0x74] + mov r0, #0x1f + mla r2, r1, r0, r5 + mov r0, r2, asr #0x4 + add r0, r2, r0, lsr #0x1b + mov r0, r0, asr #0x5 + str r0, [r7, #0x74] +_020ABA98: + ldr r2, [r7, #0x78] + ldr r1, [r7, #0x74] + ldr r0, _020ABB18 ; =0x00008701 + sub r1, r2, r1 + str r1, [r7, #0xc] + ldr r1, [r7, #0xc] + cmp r1, r0 + mvn r0, #0x8700 + movgt r4, #0x1 + cmp r1, r0 + ldrlt r0, [r7, #0x70] + mvnlt r4, #0x0 + addlt r0, r0, #0x1 + strlt r0, [r7, #0x70] + cmp r4, #0x0 + movne r0, #0x0 + strne r0, [r7, #0x6c] + strne r0, [r7, #0x4c] +_020ABAE0: + ldr r1, [r7, #0x84] + mov r0, #0x1 + sub r1, r1, #0x1 + str r1, [r7, #0x84] + ldmia sp!, {r4-r8,pc} + .balign 4 +_020ABAF4: .word 0x00000464 +_020ABAF8: .word 0x00008B18 +_020ABAFC: .word 0x0000CC8D +_020ABB00: .word 0x75CA82CB +_020ABB04: .word 0x0007FD88 +_020ABB08: .word 0x000134DF +_020ABB0C: .word 0xFFFF2F5C +_020ABB10: .word 0xFFFFBA74 +_020ABB14: .word 0x00068520 +_020ABB18: .word 0x00008701 + + arm_func_start FUN_020ABB1C +FUN_020ABB1C: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrh r12, [r6, #0x68] + mov r4, r2 + ldr r3, _020ABBE4 ; =0x00000BB8 + sub r2, r4, r12 + mov r2, r2, lsl #0x10 + mov r2, r2, lsr #0x10 + mov r5, r1 + cmp r2, r3 + bhs _020ABB60 + cmp r4, r12 + ldrcc r0, [r6, #0x60] + addcc r0, r0, #0x10000 + strcc r0, [r6, #0x60] + strh r4, [r6, #0x68] + b _020ABBD0 +_020ABB60: + ldr r1, _020ABBE8 ; =0x0000FF9C + cmp r2, r1 + bhi _020ABBAC + ldr r1, [r6, #0x64] + cmp r4, r1 + bne _020ABB94 + mov r1, r4 + bl FUN_020ABBEC + sub r0, r4, #0x1 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + str r0, [r6, #0x54] + b _020ABBD0 +_020ABB94: + add r0, r4, #0x1 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + str r0, [r6, #0x64] + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} +_020ABBAC: + ldr r2, [r6, #0x60] + ldr r0, [r6, #0x54] + add r2, r4, r2 + add r0, r0, r1 + cmp r2, r0 + subhi r0, r2, #0x10000 + strhi r0, [r5, #0x18] + movhi r0, #0x1 + ldmhiia sp!, {r4-r6,pc} +_020ABBD0: + ldr r1, [r6, #0x60] + mov r0, #0x1 + add r1, r4, r1 + str r1, [r5, #0x18] + ldmia sp!, {r4-r6,pc} + .balign 4 +_020ABBE4: .word 0x00000BB8 +_020ABBE8: .word 0x0000FF9C + + arm_func_start FUN_020ABBEC +FUN_020ABBEC: ; 0x020ABBEC + ldr r2, _020ABC08 ; =0x00010001 + strh r1, [r0, #0x68] + str r2, [r0, #0x64] + mov r1, #0x0 + str r1, [r0, #0x60] + str r1, [r0, #0x5c] + bx lr + .balign 4 +_020ABC08: .word 0x00010001 + + arm_func_start FUN_020ABC0C +FUN_020ABC0C: ; 0x020ABC0C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r0, [r5, #0x3c] + mov r4, r1 + cmp r0, #0x0 + beq _020ABC2C + bl FUN_020ACD90 +_020ABC2C: + str r4, [r5, #0x3c] + ldr r0, [r5, #0x34] + bl FUN_020AB444 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020ABC40 +FUN_020ABC40: ; 0x020ABC40 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x3c] + cmp r0, #0x0 + beq _020ABC60 + bl FUN_020ACD90 +_020ABC58: ; 0x020ABC58 + mov r0, #0x0 + str r0, [r4, #0x3c] +_020ABC60: + mvn r0, #0x0 + str r0, [r4, #0x38] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020ABC6C +FUN_020ABC6C: ; 0x020ABC6C + stmdb sp!, {r4-r6,lr} + mov r5, r1 + mov r4, r2 + mov r1, #0x0 + mov r2, #0x28 + mov r6, r0 + bl MI_CpuFill8 + ldr r0, _020ABCF4 ; =0x000134DF + mov r1, #0x0 + str r0, [r6, #0x4] + str r1, [r6, #0x28] + str r1, [r6, #0x2c] + str r5, [r6, #0x34] + str r4, [r6, #0x38] + str r1, [r6, #0x7c] + str r1, [r6, #0x80] + str r1, [r6, #0x84] + str r1, [r6, #0x88] + str r0, [r6, #0x8c] + str r1, [r6, #0x90] + str r1, [r6, #0x4c] + str r1, [r6, #0x44] + str r1, [r6, #0x48] + str r1, [r6, #0x6c] + str r1, [r6, #0x70] + str r1, [r6, #0x50] + str r1, [r6, #0x54] + str r1, [r6, #0x58] + mov r0, #0x1 + str r0, [r6, #0x5c] + str r1, [r6, #0x3c] + str r1, [r6, #0x40] + str r1, [r6, #0x30] + ldmia sp!, {r4-r6,pc} + .balign 4 +_020ABCF4: .word 0x000134DF + + arm_func_start FUN_020ABCF8 +FUN_020ABCF8: ; 0x020ABCF8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, _020ABE34 ; =0x021CCD20 + ldr r2, [r3, #0x10] + cmp r2, #0x2 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {pc} + ldrb r12, [r3, #0x1] + ldrb r2, [r0, #0x8] + cmp r12, r2 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {pc} + ldrb r2, [r0, #0xa] + cmp r2, #0x0 + beq _020ABD48 + cmp r2, #0x1 + beq _020ABDA4 + b _020ABE1C +_020ABD48: + ldr r0, _020ABE38 ; =0x021CB824 + ldr r2, [r0, #0x2c] + cmp r2, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {pc} + ldr r0, [r0, #0x38] + cmp r0, #0x5 + beq _020ABD74 + cmp r0, #0x2 + bne _020ABD80 +_020ABD74: + mov r0, #0x9 + str r0, [r1, #0x0] + b _020ABD88 +_020ABD80: + mov r0, #0x5 + str r0, [r1, #0x0] +_020ABD88: + ldr r0, _020ABE38 ; =0x021CB824 + mov r3, #0x0 + ldr r2, _020ABE3C ; =0x021CB850 + str r3, [r0, #0x2c] + str r3, [r0, #0x38] + str r2, [r1, #0x4] + b _020ABE28 +_020ABDA4: + ldr r2, _020ABE38 ; =0x021CB824 + mov lr, #0x2 + str lr, [r2, #0x2c] + ldrb r12, [r0, #0xb] + ldrb r3, [r3, #0x0] + cmp r12, r3 + bne _020ABDD8 + str lr, [r2, #0x38] + mov r3, #0x7 + str r3, [r1, #0x0] + ldr r3, [r0, #0xc] + str r3, [r2, #0x34] + b _020ABE04 +_020ABDD8: + mov r3, #0x3 + str r3, [r2, #0x38] + mov r2, #0x6 + str r2, [r1, #0x0] + ldrb r3, [r0, #0xb] + cmp r3, #0x0 + movne r2, #0x1 + movne r3, r2, lsl r3 + ldr r2, _020ABE38 ; =0x021CB824 + moveq r3, #0x1 + str r3, [r2, #0x34] +_020ABE04: + ldrb r3, [r0, #0xb] + ldr r0, _020ABE38 ; =0x021CB824 + ldr r2, _020ABE3C ; =0x021CB850 + strb r3, [r0, #0x31] + str r2, [r1, #0x4] + b _020ABE28 +_020ABE1C: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {pc} +_020ABE28: + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020ABE34: .word 0x021CCD20 +_020ABE38: .word 0x021CB824 +_020ABE3C: .word 0x021CB850 + + arm_func_start FUN_020ABE40 +FUN_020ABE40: ; 0x020ABE40 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldrb r0, [r5, #0x4] + mov r4, r1 + cmp r0, #0xff + bne _020ABE70 + ldrb r0, [r5, #0x6] + cmp r0, #0x4 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} +_020ABE70: + ldrb r0, [r5, #0x8] + bl FUN_020AC1E8 +_020ABE78: ; 0x020ABE78 + cmp r0, #0x0 + beq _020ABEA4 + mov r1, #0x2 + str r1, [r4, #0x0] + str r0, [r4, #0x4] + mov r2, #0x0 + str r2, [r0, #0x0] + bl FUN_020AC708 + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r5,pc} +_020ABEA4: + ldrb r1, [r5, #0x8] + ldr r0, _020ABEC8 ; =0x021CB838 + bl FUN_020AC5A4 + ldr r0, _020ABEC8 ; =0x021CB838 + mov r1, #0x2 + bl FUN_020AC708 +_020ABEBC: ; 0x020ABEBC + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020ABEC8: .word 0x021CB838 + + arm_func_start FUN_020ABECC +FUN_020ABECC: ; 0x020ABECC + stmdb sp!, {r4-r6,lr} + ldr r2, _020AC070 ; =0x021CB824 + mov r6, r0 + ldr r0, [r2, #0x2c] + mov r5, r1 + cmp r0, #0x2 + bne _020ABF84 + ldrb r1, [r2, #0x30] + ldrb r0, [r6, #0x8] + cmp r1, r0 + bne _020ABF74 + ldr r0, _020AC074 ; =0x021CB850 + mov r1, r6 + bl FUN_020AC350 + mov r4, r0 + mvn r0, #0x2 + cmp r4, r0 + beq _020ABF48 + mvn r0, #0x1 + cmp r4, r0 + beq _020ABF30 + mvn r0, #0x0 + cmp r4, r0 + beq _020ABF48 + b _020ABF50 +_020ABF30: + mov r0, #0xc + str r0, [r5, #0x0] + mov r0, #0x0 + str r0, [r5, #0x4] + mov r0, #0x1 + ldmia sp!, {r4-r6,pc} +_020ABF48: + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} +_020ABF50: + ldr r1, _020AC074 ; =0x021CB850 + mov r0, r6 + bl FUN_020AC4A0 + ldr r1, _020AC074 ; =0x021CB850 + str r0, [r5, #0x0] + str r1, [r5, #0x4] + ldr r0, [r5, #0x4] + str r4, [r0, #0xc] + b _020AC028 +_020ABF74: + mov r0, #0x1 + bl FUN_020AC5E8 +_020ABF7C: ; 0x020ABF7C + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} +_020ABF84: + ldrb r12, [r6, #0x8] + cmp r12, #0x0 + movne r0, #0x1 + movne r1, r0, lsl r12 + ldr r0, _020AC078 ; =0x021CB818 + moveq r1, #0x1 + ldr r0, [r0, #0x0] + ands r0, r0, r1 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020ABFAC: ; 0x020ABFAC + ldr r2, _020AC070 ; =0x021CB824 + mov r4, #0x2 + mov r3, #0x0 + ldr r0, _020AC074 ; =0x021CB850 + mov r1, r6 + strb r12, [r2, #0x30] + str r4, [r2, #0x2c] + str r3, [r2, #0x38] + bl FUN_020AC350 + mov r4, r0 + mvn r0, #0x2 + cmp r4, r0 + beq _020ABFF8 + mvn r0, #0x1 + cmp r4, r0 + beq _020ABFF8 + mvn r0, #0x0 + cmp r4, r0 + bne _020AC008 +_020ABFF8: + ldr r1, _020AC070 ; =0x021CB824 + mov r0, #0x0 + str r0, [r1, #0x2c] + ldmia sp!, {r4-r6,pc} +_020AC008: + ldr r1, _020AC074 ; =0x021CB850 + mov r0, r6 + bl FUN_020AC4A0 + ldr r1, _020AC074 ; =0x021CB850 + str r0, [r5, #0x0] + str r1, [r5, #0x4] + ldr r0, [r5, #0x4] + str r4, [r0, #0xc] +_020AC028: + ldr r0, [r5, #0x0] + cmp r0, #0xa + bne _020AC050 + mov r0, #0x1 + bl FUN_020AC5E8 + bl OS_GetTick + ldr r2, _020AC07C ; =0x021CB81C + str r0, [r2, #0x0] + str r1, [r2, #0x4] + b _020AC068 +_020AC050: + mov r0, #0x0 + bl FUN_020AC5E8 + ldr r0, _020AC07C ; =0x021CB81C + mov r1, #0x0 + str r1, [r0, #0x0] + str r1, [r0, #0x4] +_020AC068: + mov r0, #0x1 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020AC070: .word 0x021CB824 +_020AC074: .word 0x021CB850 +_020AC078: .word 0x021CB818 +_020AC07C: .word 0x021CB81C + + arm_func_start FUN_020AC080 +FUN_020AC080: ; 0x020AC080 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r0 + ldrb r2, [r6, #0x4] + mov r5, r1 + cmp r2, #0xff + bne _020AC0C4 + ldrb r2, [r6, #0x6] + cmp r2, #0x4 + bne _020AC0B4 + bl FUN_020ABCF8 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} +_020AC0B4: + cmp r2, #0x3 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,pc} +_020AC0C4: + ldrb r0, [r6, #0x8] + bl FUN_020AC1E8 + movs r4, r0 + beq _020AC154 + mov r1, r6 + bl FUN_020AC350 + mov r7, r0 + mvn r0, #0x1 + cmp r7, r0 + beq _020AC104 + mvn r0, #0x0 + cmp r7, r0 + bne _020AC124 + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,pc} +_020AC104: + mov r0, #0xc + str r0, [r5, #0x0] + mov r0, #0x0 + str r0, [r4, #0x0] + add sp, sp, #0x4 + str r4, [r5, #0x4] + mov r0, #0x1 + ldmia sp!, {r4-r7,pc} +_020AC124: + mov r0, r6 + mov r1, r4 + bl FUN_020AC4A0 +_020AC130: ; 0x020AC130 + str r0, [r5, #0x0] + str r4, [r5, #0x4] + str r7, [r4, #0xc] + ldr r0, [r5, #0x0] + add sp, sp, #0x4 + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + ldmia sp!, {r4-r7,pc} +_020AC154: + ldrb r0, [r6, #0x8] + bl FUN_020AC790 + movs r7, r0 + bne _020AC188 + ldrb r1, [r6, #0x8] + ldr r0, _020AC1E4 ; =0x021CB838 + bl FUN_020AC5A4 + ldr r0, _020AC1E4 ; =0x021CB838 + mov r1, #0x3 + bl FUN_020AC708 + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,pc} +_020AC188: + mov r1, r6 + bl FUN_020AC350 + mov r4, r0 + add r0, r4, #0x2 + cmp r0, #0x1 + bhi _020AC1B4 + mov r0, r7 + bl FUN_020ACC84 + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,pc} +_020AC1B4: + mov r0, r6 + mov r1, r7 + bl FUN_020AC4A0 +_020AC1C0: ; 0x020AC1C0 + str r0, [r5, #0x0] + str r7, [r5, #0x4] + str r4, [r7, #0xc] + ldr r0, [r5, #0x0] + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020AC1E4: .word 0x021CB838 + + arm_func_start FUN_020AC1E8 +FUN_020AC1E8: + ldr r1, _020AC25C ; =0x021CCD20 + ldr r2, _020AC260 ; =0x021CB824 + ldr r1, [r1, #0x10] + ldr r3, [r2, #0x4] + cmp r1, #0x2 + bne _020AC224 + ldr r1, [r2, #0x2c] + cmp r1, #0x0 + beq _020AC21C + ldrb r1, [r2, #0x30] + cmp r1, r0 + ldreq r0, _020AC264 ; =0x021CB850 + bxeq lr +_020AC21C: + mov r0, #0x0 + bx lr +_020AC224: + cmp r3, #0x0 + beq _020AC254 +_020AC22C: + ldr r1, [r3, #0x0] + cmp r1, #0x0 + beq _020AC248 + ldrb r1, [r3, #0x4] + cmp r1, r0 + moveq r0, r3 + bxeq lr +_020AC248: + ldr r3, [r3, #0x14] + cmp r3, #0x0 + bne _020AC22C +_020AC254: + mov r0, #0x0 + bx lr + .balign 4 +_020AC25C: .word 0x021CCD20 +_020AC260: .word 0x021CB824 +_020AC264: .word 0x021CB850 + + arm_func_start FUN_020AC268 +FUN_020AC268: + ldrb r2, [r1, #0x4] + ldrb r12, [r1, #0x6] + cmp r2, #0x0 + addeq r12, r12, #0x5 + cmp r12, #0x0 + blt _020AC288 + cmp r12, #0xb + blt _020AC28C +_020AC288: + mvn r12, #0x0 +_020AC28C: + cmp r12, #0x0 + mvnlt r0, #0x0 + bxlt lr + ldr r1, _020AC2F8 ; =0x021CCD20 + ldr r1, [r1, #0x10] + cmp r1, #0x1 + ldrne r3, [r0, #0xc] + ldrne r2, _020AC2FC ; =0x020FF788 + movne r1, #0xb + mlane r1, r3, r1, r2 + ldrnesb r2, [r12, r1] + bne _020AC2D0 + ldr r3, [r0, #0xc] + ldr r2, _020AC300 ; =0x020FF744 + mov r1, #0xb + mla r1, r3, r1, r2 + ldrsb r2, [r12, r1] +_020AC2D0: + mvn r1, #0x0 + cmp r2, r1 + moveq r0, #0x1 + bxeq lr + mvn r1, #0x1 + cmp r2, r1 + moveq r0, #0x0 + strne r2, [r0, #0xc] + movne r0, #0x1 + bx lr + .balign 4 +_020AC2F8: .word 0x021CCD20 +_020AC2FC: .word 0x020FF788 +_020AC300: .word 0x020FF744 + + arm_func_start FUN_020AC304 +FUN_020AC304: + ldr r1, _020AC34C ; =0x021CB824 + ldr r2, [r1, #0x4] + cmp r2, #0x0 + beq _020AC344 +_020AC314: + ldr r1, [r2, #0x0] + cmp r1, #0x0 + beq _020AC338 + ldr r1, [r2, #0xc] + cmp r1, #0x2 + bne _020AC338 + cmp r0, r2 + movne r0, #0x0 + bxne lr +_020AC338: + ldr r2, [r2, #0x14] + cmp r2, #0x0 + bne _020AC314 +_020AC344: + mov r0, #0x1 + bx lr + .balign 4 +_020AC34C: .word 0x021CB824 + + arm_func_start FUN_020AC350 +FUN_020AC350: ; 0x020AC350 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldrb r2, [r1, #0x4] + ldrb r3, [r1, #0x6] + mov r4, r0 + cmp r2, #0x0 + addeq r3, r3, #0x5 + cmp r3, #0x0 + blt _020AC37C + cmp r3, #0xb + blt _020AC380 +_020AC37C: + mvn r3, #0x0 +_020AC380: + cmp r3, #0x0 + addlt sp, sp, #0x4 + mvnlt r0, #0x0 + ldmltia sp!, {r4-r5,pc} +_020AC390: ; 0x020AC390 + ldr r0, _020AC44C ; =0x021CCD20 + ldr r0, [r0, #0x10] + cmp r0, #0x1 + ldrne r2, [r4, #0xc] + ldrne r1, _020AC450 ; =0x020FF700 + movne r0, #0xb + mlane r0, r2, r0, r1 + ldrnesb r5, [r3, r0] + bne _020AC3C8 + ldr r2, [r4, #0xc] + ldr r1, _020AC454 ; =0x020FF6BC + mov r0, #0xb + mla r0, r2, r0, r1 + ldrsb r5, [r3, r0] +_020AC3C8: + mvn r0, #0x2 + cmp r5, r0 + beq _020AC41C + mvn r0, #0x1 + cmp r5, r0 + beq _020AC3F8 + mvn r0, #0x0 + cmp r5, r0 + bne _020AC440 + add sp, sp, #0x4 + mov r0, r5 + ldmia sp!, {r4-r5,pc} +_020AC3F8: + mov r0, r4 + mov r1, #0x1 + bl FUN_020AC708 + mov r1, #0x0 + str r1, [r4, #0xc] + add sp, sp, #0x4 + mov r0, r5 + str r1, [r4, #0x0] + ldmia sp!, {r4-r5,pc} +_020AC41C: + mov r0, r4 + mov r1, #0x3 + bl FUN_020AC708 + mov r1, #0x0 + str r1, [r4, #0xc] + add sp, sp, #0x4 + mov r0, r5 + str r1, [r4, #0x0] + ldmia sp!, {r4-r5,pc} +_020AC440: + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AC44C: .word 0x021CCD20 +_020AC450: .word 0x020FF700 +_020AC454: .word 0x020FF6BC + + arm_func_start FUN_020AC458 +FUN_020AC458: + ldr ip, _020AC498 ; =0x5F564354 + mov r3, #0x10 + str r12, [r1, #0x0] + strb r3, [r1, #0x5] + ldr r3, _020AC49C ; =0x021CCD20 + strb r2, [r1, #0x6] + ldrb r2, [r3, #0x0] + strb r2, [r1, #0x8] + ldrb r2, [r0, #0x4] + mov r0, #0x0 + strb r2, [r1, #0x9] + strb r0, [r1, #0xa] + ldrb r2, [r3, #0x0] + strb r2, [r1, #0xb] + str r0, [r1, #0xc] + bx lr + .balign 4 +_020AC498: .word 0x5F564354 +_020AC49C: .word 0x021CCD20 + + arm_func_start FUN_020AC4A0 +FUN_020AC4A0: + ldrb r2, [r0, #0xb] + strb r2, [r1, #0x5] + ldrb r2, [r0, #0x4] + cmp r2, #0xff + bne _020AC4E8 + ldrb r2, [r0, #0x6] + cmp r2, #0x0 + bne _020AC4D8 + ldrb r3, [r1, #0x4] + cmp r3, #0x0 + movne r2, #0x1 + movne r2, r2, lsl r3 + moveq r2, #0x1 + str r2, [r1, #0x8] +_020AC4D8: + ldrb r1, [r0, #0x6] + ldr r0, _020AC54C ; =0x020FF6AC + ldrb r0, [r0, r1] + bx lr +_020AC4E8: + cmp r2, #0x0 + bne _020AC544 + ldrb r2, [r0, #0x6] + cmp r2, #0x0 + bne _020AC538 + ldr r0, [r1, #0xc] + cmp r0, #0x1 + bne _020AC528 + ldrb r2, [r1, #0x4] + cmp r2, #0x0 + movne r0, #0x1 + movne r0, r0, lsl r2 + moveq r0, #0x1 + str r0, [r1, #0x8] + mov r0, #0x7 + bx lr +_020AC528: + cmp r0, #0x5 + moveq r0, #0x9 + movne r0, #0xc + bx lr +_020AC538: + ldr r0, _020AC550 ; =0x020FF6B4 + ldrb r0, [r0, r2] + bx lr +_020AC544: + mov r0, #0xc + bx lr + .balign 4 +_020AC54C: .word 0x020FF6AC +_020AC550: .word 0x020FF6B4 + + arm_func_start FUN_020AC554 +FUN_020AC554: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrb r2, [r1, #0x4] + cmp r2, #0xff + bne _020AC57C + ldrb r2, [r1, #0x6] + cmp r2, #0x4 + bne _020AC57C + bl FUN_020AC628 + b _020AC598 +_020AC57C: + ldrb r0, [r0, #0x4] + mov r2, #0x10 + bl FUN_021EB044 +_020AC588: ; 0x020AC588 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {pc} +_020AC598: + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020AC5A4 +FUN_020AC5A4: ; 0x020AC5A4 + mov r12, r0 + mov r3, #0x6 + mov r2, #0x0 +_020AC5B0: + strb r2, [r12], #0x1 + strb r2, [r12], #0x1 + strb r2, [r12], #0x1 + strb r2, [r12], #0x1 + subs r3, r3, #0x1 + bne _020AC5B0 + ldr r2, _020AC5E4 ; =0x021CCD20 + mov r3, #0x0 + ldr r2, [r2, #0x10] + str r2, [r0, #0x0] + str r3, [r0, #0xc] + strb r1, [r0, #0x4] + bx lr + .balign 4 +_020AC5E4: .word 0x021CCD20 + + arm_func_start FUN_020AC5E8 +FUN_020AC5E8: + stmdb sp!, {r4,lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r3, #0xff + ldr r0, _020AC624 ; =0x021CB850 + add r1, sp, #0x0 + mov r2, #0x4 + strb r3, [sp, #0x4] + bl FUN_020AC458 + ldr r0, _020AC624 ; =0x021CB850 + add r1, sp, #0x0 + strb r4, [sp, #0xa] + bl FUN_020AC628 + add sp, sp, #0x10 + ldmia sp!, {r4,pc} + .balign 4 +_020AC624: .word 0x021CB850 + + arm_func_start FUN_020AC628 +FUN_020AC628: ; 0x020AC628 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r11, r0 + mov r10, r1 + mov r9, #0x0 + bl FUN_020AC6E4 + ldr r4, _020AC6DC ; =0x021CCD20 + ldr r5, _020AC6E0 ; =0x021CB818 + mov r8, r9 + mov r7, #0x1 + mov r6, #0x10 +_020AC654: + cmp r8, #0x0 + movne r1, r7, lsl r8 + ldr r0, [r5, #0x0] + moveq r1, r7 + ands r0, r0, r1 + beq _020AC694 + ldrb r0, [r4, #0x0] + cmp r8, r0 + beq _020AC694 + mov r0, r8 + mov r1, r10 + mov r2, r6 + strb r8, [r10, #0x9] + bl FUN_021EB044 +_020AC68C: ; 0x020AC68C + cmp r0, #0x0 + addne r9, r9, #0x1 +_020AC694: + add r0, r8, #0x1 + and r8, r0, #0xff + cmp r8, #0x20 + blo _020AC654 + ldrb r0, [r10, #0xa] + cmp r0, #0x1 + ldreq r0, _020AC6E0 ; =0x021CB818 + ldreq r0, [r0, #0x0] + streq r0, [r11, #0x8] + beq _020AC6C8 + cmp r0, #0x0 + moveq r0, #0x0 + streq r0, [r11, #0x8] +_020AC6C8: + cmp r9, #0x0 + mvneq r0, #0x3 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020AC6DC: .word 0x021CCD20 +_020AC6E0: .word 0x021CB818 + + arm_func_start FUN_020AC6E4 +FUN_020AC6E4: ; 0x020AC6E4 + ldrb r2, [r1, #0xa] + cmp r2, #0x1 + ldreqb r2, [r0, #0x4] + ldreq r0, _020AC704 ; =0x021CB818 + streqb r2, [r1, #0xb] + ldreq r0, [r0, #0x0] + streq r0, [r1, #0xc] + bx lr + .balign 4 +_020AC704: .word 0x021CB818 + + arm_func_start FUN_020AC708 +FUN_020AC708: + stmdb sp!, {r4,lr} + sub sp, sp, #0x10 + add r2, sp, #0x0 + mov r3, #0x10 + mov r4, r0 + bl FUN_020ACAE0 +_020AC720: ; 0x020AC720 + cmp r0, #0x0 + addne sp, sp, #0x10 + ldmneia sp!, {r4,pc} +_020AC72C: ; 0x020AC72C + add r1, sp, #0x0 + mov r0, r4 + bl FUN_020AC554 +_020AC738: ; 0x020AC738 + cmp r0, #0x0 + movne r0, #0x0 + mvneq r0, #0x3 + add sp, sp, #0x10 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020AC74C +FUN_020AC74C: ; 0x020AC74C + stmdb sp!, {r4,lr} + sub sp, sp, #0x10 + add r2, sp, #0x0 + mov r3, #0x10 + mov r4, r0 + bl FUN_020ACBD0 +_020AC764: ; 0x020AC764 + cmp r0, #0x0 + addne sp, sp, #0x10 + ldmneia sp!, {r4,pc} +_020AC770: ; 0x020AC770 + add r1, sp, #0x0 + mov r0, r4 + bl FUN_020AC554 +_020AC77C: ; 0x020AC77C + cmp r0, #0x0 + movne r0, #0x0 + mvneq r0, #0x3 + add sp, sp, #0x10 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020AC790 +FUN_020AC790: ; 0x020AC790 + stmdb sp!, {r4,lr} + mov r1, r0 + cmp r1, #0x20 + movcs r0, #0x0 + ldmcsia sp!, {r4,pc} +_020AC7A4: ; 0x020AC7A4 + ldr r0, _020AC7F4 ; =0x021CCD20 + ldrb r0, [r0, #0x0] + cmp r1, r0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020AC7B8: ; 0x020AC7B8 + ldr r2, _020AC7F8 ; =0x021CB824 + ldr r4, [r2, #0x0] + cmp r4, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020AC7CC: ; 0x020AC7CC + ldr r3, [r4, #0x14] + mov r0, r4 + str r3, [r2, #0x0] + bl FUN_020AC5A4 + ldr r1, _020AC7F8 ; =0x021CB824 + mov r0, r4 + ldr r2, [r1, #0x4] + str r2, [r4, #0x14] + str r4, [r1, #0x4] + ldmia sp!, {r4,pc} + .balign 4 +_020AC7F4: .word 0x021CCD20 +_020AC7F8: .word 0x021CB824 + + arm_func_start FUN_020AC7FC +FUN_020AC7FC: + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r2, #0x10 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {pc} + ldrb r2, [r1, #0x8] + cmp r2, r0 + bne _020AC834 + ldr r0, _020AC894 ; =0x021CCD20 + ldrb r12, [r1, #0x9] + ldrb r2, [r0, #0x0] + cmp r12, r2 + beq _020AC840 +_020AC834: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {pc} +_020AC840: + ldrb r2, [r1, #0x5] + cmp r2, #0x10 + beq _020AC860 + mov r0, r1 + mov r1, r3 + bl FUN_020ABE40 + add sp, sp, #0x4 + ldmia sp!, {pc} +_020AC860: + ldr r0, [r0, #0xc] + cmp r0, #0x0 + bne _020AC880 + mov r0, r1 + mov r1, r3 + bl FUN_020AC080 + add sp, sp, #0x4 + ldmia sp!, {pc} +_020AC880: + mov r0, r1 + mov r1, r3 + bl FUN_020ABECC + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AC894: .word 0x021CCD20 + + arm_func_start FUN_020AC898 +FUN_020AC898: ; 0x020AC898 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_GetTick + ldr r2, _020AC950 ; =0x021CCD20 + ldr r3, [r2, #0x10] + cmp r3, #0x2 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,pc} +_020AC8B8: ; 0x020AC8B8 + ldr r2, [r2, #0xc] + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} +_020AC8C8: ; 0x020AC8C8 + ldr r3, _020AC954 ; =0x021CB81C + mov r12, #0x0 + ldr r5, [r3, #0x4] + ldr r4, [r3, #0x0] + cmp r5, r12 + cmpeq r4, r12 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} +_020AC8E8: ; 0x020AC8E8 + ldr r2, _020AC958 ; =0x02106490 + subs r4, r0, r4 + ldr lr, [r2, #0x0] + ldr r0, [r2, #0x4] + sbc r1, r1, r5 + cmp r1, r0 + cmpeq r4, lr + addls sp, sp, #0x4 + ldmlsia sp!, {r4-r5,pc} +_020AC90C: ; 0x020AC90C + ldr r1, _020AC95C ; =0x021CB824 + mov r0, r12 + str r12, [r3, #0x0] + str r12, [r3, #0x4] + str r12, [r1, #0x2c] + str r12, [r1, #0x38] + bl FUN_020AC5E8 + ldr r1, _020AC950 ; =0x021CCD20 + ldr r0, _020AC95C ; =0x021CB824 + ldr r3, [r1, #0x8] + ldrb r0, [r0, #0x30] + ldr r12, [r1, #0x4] + ldr r2, _020AC960 ; =0x021CB850 + mov r1, #0x9 + blx r12 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AC950: .word 0x021CCD20 +_020AC954: .word 0x021CB81C +_020AC958: .word 0x02106490 +_020AC95C: .word 0x021CB824 +_020AC960: .word 0x021CB850 + + arm_func_start FUN_020AC964 +FUN_020AC964: ; 0x020AC964 + ldr r0, _020AC978 ; =0x021CB824 + mov r1, #0x0 + str r1, [r0, #0x4] + str r1, [r0, #0x0] + bx lr + .balign 4 +_020AC978: .word 0x021CB824 + + arm_func_start FUN_020AC97C +FUN_020AC97C: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + ldr r0, [r4, #0x0] + cmp r0, #0x0 + beq _020AC9A8 + ldr r1, [r4, #0x4] + cmp r1, #0x0 + beq _020AC9A8 + cmp r1, #0x8 + bls _020AC9B4 +_020AC9A8: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r5,pc} +_020AC9B4: + ldr r1, _020ACA8C ; =0x021CB824 + mov r2, #0x18 + str r0, [r1, #0x0] + ldr r3, [r4, #0x4] + mov r1, #0x0 + mul r2, r3, r2 + bl MI_CpuFill8 + ldr r0, _020ACA90 ; =0x021CB850 + mov r1, #0x0 + mov r2, #0x18 + bl MI_CpuFill8 + ldr r0, _020ACA94 ; =0x021CB838 + mov r1, #0x0 + mov r2, #0x18 + bl MI_CpuFill8 + ldr r12, [r4, #0x4] + mov lr, #0x0 + subs r0, r12, #0x1 + beq _020ACA34 + ldr r1, _020ACA8C ; =0x021CB824 + mov r5, lr + mov r0, #0x18 +_020ACA0C: + ldr r2, [r1, #0x0] + add lr, lr, #0x1 + mla r3, lr, r0, r2 + add r2, r2, r5 + str r3, [r2, #0x14] + ldr r12, [r4, #0x4] + add r5, r5, #0x18 + sub r2, r12, #0x1 + cmp lr, r2 + blo _020ACA0C +_020ACA34: + ldr r3, _020ACA8C ; =0x021CB824 + mov r0, #0x18 + ldr r1, [r3, #0x0] + mov r5, #0x0 + mla r0, r12, r0, r1 + str r5, [r0, #-0x4] + ldr r2, _020ACA98 ; =0x021CB818 + ldr r1, _020ACA9C ; =0x021CB814 + ldr r0, _020ACAA0 ; =0x021CCD20 + ldr lr, _020ACAA4 ; =OS_GetTick + ldr ip, _020ACAA8 ; =0x5D588B65 + ldr r4, _020ACAAC ; =0x00269EC3 + str r5, [r3, #0x4] + str r5, [r2, #0x0] + str r5, [r1, #0x0] + str r5, [r0, #0x14] + str lr, [r3, #0x8] + str r12, [r3, #0xc] + str r4, [r3, #0x10] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020ACA8C: .word 0x021CB824 +_020ACA90: .word 0x021CB850 +_020ACA94: .word 0x021CB838 +_020ACA98: .word 0x021CB818 +_020ACA9C: .word 0x021CB814 +_020ACAA0: .word 0x021CCD20 +_020ACAA4: .word OS_GetTick +_020ACAA8: .word 0x5D588B65 +_020ACAAC: .word 0x00269EC3 + + arm_func_start FUN_020ACAB0 +FUN_020ACAB0: ; 0x020ACAB0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020ACADC ; =0x021CCD20 + ldr r2, [r2, #0x10] + cmp r2, #0x2 + addeq sp, sp, #0x4 + mvneq r0, #0x2 + ldmeqia sp!, {pc} + bl FUN_020AC708 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020ACADC: .word 0x021CCD20 + + arm_func_start FUN_020ACAE0 +FUN_020ACAE0: + stmdb sp!, {r4-r6,lr} + movs r5, r0 + mov r6, r1 + mov r4, r2 + mvneq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020ACAF8: ; 0x020ACAF8 + cmp r3, #0x10 + mvncc r0, #0x0 + ldmccia sp!, {r4-r6,pc} +_020ACB04: ; 0x020ACB04 + cmp r6, #0x0 + blt _020ACB14 + cmp r6, #0x6 + blt _020ACB1C +_020ACB14: + mvn r0, #0x2 + ldmia sp!, {r4-r6,pc} +_020ACB1C: + mov r3, #0x0 + mov r1, r4 + and r2, r6, #0xff + strb r3, [r4, #0x4] + bl FUN_020AC458 +_020ACB30: ; 0x020ACB30 + cmp r6, #0x0 + bne _020ACB80 + ldr r0, _020ACB9C ; =0x021CCD20 + ldr r0, [r0, #0x10] + cmp r0, #0x1 + bne _020ACB68 + ldr r0, [r5, #0xc] + cmp r0, #0x4 + bne _020ACB68 + mov r0, r5 + bl FUN_020AC304 +_020ACB5C: ; 0x020ACB5C + cmp r0, #0x0 + mvneq r0, #0x2 + ldmeqia sp!, {r4-r6,pc} +_020ACB68: + ldrb r1, [r5, #0x4] + cmp r1, #0x0 + movne r0, #0x1 + movne r0, r0, lsl r1 + moveq r0, #0x1 + str r0, [r5, #0x8] +_020ACB80: + mov r0, r5 + mov r1, r4 + bl FUN_020AC268 +_020ACB8C: ; 0x020ACB8C + cmp r0, #0x0 + mvneq r0, #0x2 + movne r0, #0x0 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020ACB9C: .word 0x021CCD20 + + arm_func_start FUN_020ACBA0 +FUN_020ACBA0: ; 0x020ACBA0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020ACBCC ; =0x021CCD20 + ldr r2, [r2, #0x10] + cmp r2, #0x2 + addeq sp, sp, #0x4 + mvneq r0, #0x2 + ldmeqia sp!, {pc} + bl FUN_020AC74C + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020ACBCC: .word 0x021CCD20 + + arm_func_start FUN_020ACBD0 +FUN_020ACBD0: + stmdb sp!, {r4-r6,lr} + movs r5, r0 + mov r4, r1 + mov r6, r2 + mvneq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020ACBE8: ; 0x020ACBE8 + cmp r3, #0x10 + mvncc r0, #0x0 + ldmccia sp!, {r4-r6,pc} +_020ACBF4: ; 0x020ACBF4 + ldr r1, _020ACC80 ; =0x021CCD20 + ldr r1, [r1, #0xc] + cmp r1, #0x1 + mvneq r0, #0x2 + ldmeqia sp!, {r4-r6,pc} +_020ACC08: ; 0x020ACC08 + cmp r4, #0x0 + blt _020ACC18 + cmp r4, #0x5 + blt _020ACC20 +_020ACC18: + mvn r0, #0x2 + ldmia sp!, {r4-r6,pc} +_020ACC20: + mov r3, #0xff + mov r1, r6 + and r2, r4, #0xff + strb r3, [r6, #0x4] + bl FUN_020AC458 + mov r0, r5 + mov r1, r6 + bl FUN_020AC268 +_020ACC40: ; 0x020ACC40 + cmp r0, #0x0 + mvneq r0, #0x2 + ldmeqia sp!, {r4-r6,pc} +_020ACC4C: ; 0x020ACC4C + ldr r0, _020ACC80 ; =0x021CCD20 + ldr r0, [r0, #0x10] + cmp r0, #0x1 + bne _020ACC78 + cmp r4, #0x0 + bne _020ACC78 + mov r0, r5 + bl FUN_020AC304 +_020ACC6C: ; 0x020ACC6C + cmp r0, #0x0 + mvneq r0, #0x2 + ldmeqia sp!, {r4-r6,pc} +_020ACC78: + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020ACC80: .word 0x021CCD20 + + arm_func_start FUN_020ACC84 +FUN_020ACC84: ; 0x020ACC84 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020ACD48 ; =0x021CB824 + cmp r0, #0x0 + mov lr, #0x0 + addeq sp, sp, #0x4 + ldr r12, [r2, #0x4] + moveq r0, lr + ldmeqia sp!, {pc} + ldr r1, _020ACD4C ; =0x021CCD20 + ldr r1, [r1, #0x10] + cmp r1, #0x2 + bne _020ACCD0 + ldr r1, _020ACD50 ; =0x021CB850 + add sp, sp, #0x4 + cmp r0, r1 + streq lr, [r2, #0x2c] + mov r0, #0x1 + ldmia sp!, {pc} +_020ACCD0: + cmp r12, #0x0 + beq _020ACD3C +_020ACCD8: + cmp r12, r0 + bne _020ACD2C + mov r3, #0x0 + str r3, [r0, #0x0] + cmp lr, #0x0 + ldrne r1, [r0, #0x14] + strne r1, [lr, #0x14] + bne _020ACD10 + ldr r2, [r12, #0x14] + cmp r2, #0x0 + ldrne r1, _020ACD48 ; =0x021CB824 + strne r2, [r1, #0x4] + ldreq r1, _020ACD48 ; =0x021CB824 + streq r3, [r1, #0x4] +_020ACD10: + ldr r1, _020ACD48 ; =0x021CB824 + add sp, sp, #0x4 + ldr r2, [r1, #0x0] + str r2, [r0, #0x14] + str r0, [r1, #0x0] + mov r0, #0x1 + ldmia sp!, {pc} +_020ACD2C: + mov lr, r12 + ldr r12, [r12, #0x14] + cmp r12, #0x0 + bne _020ACCD8 +_020ACD3C: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020ACD48: .word 0x021CB824 +_020ACD4C: .word 0x021CCD20 +_020ACD50: .word 0x021CB850 + + arm_func_start FUN_020ACD54 +FUN_020ACD54: ; 0x020ACD54 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020ACD8C ; =0x021CCD20 + ldr r1, [r1, #0x10] + cmp r1, #0x0 + beq _020ACD74 + cmp r1, #0x2 + bne _020ACD80 +_020ACD74: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {pc} +_020ACD80: + bl FUN_020AC790 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020ACD8C: .word 0x021CCD20 + + arm_func_start FUN_020ACD90 +FUN_020ACD90: + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r1, _020ACDC0 ; =0x021CB86C + ldr r2, _020ACDC4 ; =0x021CB868 + ldr r3, [r1, #0x0] + str r0, [r2, #0x0] + str r3, [r4, #0x0] + ldr r0, [r2, #0x0] + str r4, [r1, #0x0] + bl OS_RestoreInterrupts + ldmia sp!, {r4,pc} + .balign 4 +_020ACDC0: .word 0x021CB86C +_020ACDC4: .word 0x021CB868 + + arm_func_start FUN_020ACDC8 +FUN_020ACDC8: ; 0x020ACDC8 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl OS_DisableInterrupts + ldr r1, _020ACE08 ; =0x021CB86C + ldr r2, _020ACE0C ; =0x021CB868 + ldr r3, [r1, #0x0] + str r0, [r2, #0x0] + cmp r3, #0x0 + ldrne r0, [r3, #0x0] + movne r4, r3 + strne r0, [r1, #0x0] + ldr r0, _020ACE0C ; =0x021CB868 + ldr r0, [r0, #0x0] + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,pc} + .balign 4 +_020ACE08: .word 0x021CB86C +_020ACE0C: .word 0x021CB868 + + arm_func_start FUN_020ACE10 +FUN_020ACE10: + ldr r1, _020ACE28 ; =0x021CB86C + mov r2, #0x0 + ldr r0, _020ACE2C ; =0x021CB870 + str r2, [r1, #0x0] + str r2, [r0, #0x0] + bx lr + .balign 4 +_020ACE28: .word 0x021CB86C +_020ACE2C: .word 0x021CB870 + + arm_func_start FUN_020ACE30 +FUN_020ACE30: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r3, _020ACF00 ; =0xE525982B + mov r2, r1 + umull r1, r4, r2, r3 + ldr r1, _020ACF04 ; =0x021CB870 + mov r4, r4, lsr #0xa + str r0, [r1, #0x0] + cmp r4, #0x4 + blo _020ACE60 + cmp r4, #0x48 + bls _020ACE6C +_020ACE60: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r5,pc} +_020ACE6C: + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} +_020ACE7C: ; 0x020ACE7C + ands r3, r0, #0x1f + movne r0, #0x0 + strne r0, [r1, #0x0] + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,pc} +_020ACE90: ; 0x020ACE90 + mov r1, r0 + mov r0, #0x0 + bl MIi_CpuClearFast + subs r12, r4, #0x1 + mov r5, #0x0 + beq _020ACED0 + ldr r1, _020ACF04 ; =0x021CB870 + ldr r0, _020ACF08 ; =0x00000478 + mov lr, r5 +_020ACEB4: + ldr r3, [r1, #0x0] + add r5, r5, #0x1 + mla r2, r5, r0, r3 + str r2, [r3, lr] + cmp r5, r12 + add lr, lr, r0 + blo _020ACEB4 +_020ACED0: + ldr r1, _020ACF04 ; =0x021CB870 + ldr r0, _020ACF08 ; =0x00000478 + ldr r2, [r1, #0x0] + mov r3, #0x0 + mla r0, r4, r0, r2 + str r3, [r0, #-0x478] + ldr r2, [r1, #0x0] + ldr r1, _020ACF0C ; =0x021CB86C + mov r0, #0x1 + str r2, [r1, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020ACF00: .word 0xE525982B +_020ACF04: .word 0x021CB870 +_020ACF08: .word 0x00000478 +_020ACF0C: .word 0x021CB86C + + arm_func_start FUN_020ACF10 +FUN_020ACF10: ; 0x020ACF10 + mov r2, #0xf + mov r0, #0x44 + mul r1, r2, r0 + ldr r0, _020ACF30 ; =0x02106498 + ldr ip, _020ACF34 ; =FUN_020AD170 + str r2, [r0, #0x8] + str r1, [r0, #0xc] + bx r12 + .balign 4 +_020ACF30: .word 0x02106498 +_020ACF34: .word FUN_020AD170 + + arm_func_start FUN_020ACF38 +FUN_020ACF38: ; 0x020ACF38 + stmdb sp!, {r4,lr} + ldr r3, _020AD124 ; =0x02106498 + mov r12, r1, lsr #0x8 + str r12, [r3, #0x4] + cmp r2, #0x0 + strneb r12, [r2, #0x0] + ldr r2, _020AD124 ; =0x02106498 + ldr r2, [r2, #0x0] + cmp r2, #0x0 + bne _020AD05C + mov r4, #0x0 + mov r12, r4 + ldr r3, _020AD128 ; =0x021CB880 +_020ACF6C: + ldr r2, [r3, r12, lsl #0x2] + add r12, r12, #0x1 + cmp r12, #0x4 + add r4, r4, r2 + blt _020ACF6C + ldr ip, _020AD12C ; =0x040002B0 + mov r3, #0x0 + ldr r2, _020AD130 ; =0x040002B8 + strh r3, [r12, #0x0] + mov r3, r4, lsr #0x2 + str r3, [r2, #0x0] +_020ACF98: + ldrh r2, [r12, #0x0] + ands r2, r2, #0x8000 + bne _020ACF98 + ldr r2, _020AD134 ; =0x040002B4 + cmp r1, #0x0 + ldr r2, [r2, #0x0] + beq _020AD038 + cmp r1, r2, lsl #0x1 + blo _020AD038 + mov r4, #0x0 + mov r3, r4 + ldr r2, _020AD128 ; =0x021CB880 +_020ACFC8: + ldr r1, [r2, r3, lsl #0x2] + add r3, r3, #0x1 + cmp r3, #0x4 + add r4, r4, r1 + blo _020ACFC8 + ldr r3, _020AD12C ; =0x040002B0 + mov r2, #0x0 + ldr r1, _020AD130 ; =0x040002B8 + strh r2, [r3, #0x0] + mov r2, r4, lsr #0x2 + str r2, [r1, #0x0] +_020ACFF4: + ldrh r1, [r3, #0x0] + ands r1, r1, #0x8000 + bne _020ACFF4 + ldr r2, _020AD134 ; =0x040002B4 + mov r1, #0x3 + ldr r2, [r2, #0x0] + ldr r3, _020AD138 ; =0x021CB874 + mul r1, r2, r1 + mov lr, r1, lsr #0x1 + ldr r2, _020AD13C ; =0x021CB878 + mov r12, #0x0 + ldr r1, _020AD124 ; =0x02106498 + mov r4, #0x1 + str lr, [r3, #0x0] + str r12, [r2, #0x0] + str r4, [r1, #0x0] + b _020AD03C +_020AD038: + mov r4, #0x0 +_020AD03C: + ldr r1, _020AD13C ; =0x021CB878 + ldr r3, _020AD128 ; =0x021CB880 + ldr r12, [r1, #0x0] + add r2, r12, #0x1 + and r2, r2, #0x3 + str r0, [r3, r12, lsl #0x2] + str r2, [r1, #0x0] + b _020AD11C +_020AD05C: + ldr r1, _020AD13C ; =0x021CB878 + mov lr, #0x0 + ldr r12, [r1, #0x0] + ldr r3, _020AD128 ; =0x021CB880 + add r2, r12, #0x1 + and r2, r2, #0x3 + mov r4, lr + str r0, [r3, r12, lsl #0x2] + str r2, [r1, #0x0] +_020AD080: + ldr r0, [r3, r4, lsl #0x2] + add r4, r4, #0x1 + cmp r4, #0x4 + add lr, lr, r0 + blt _020AD080 + ldr r2, _020AD12C ; =0x040002B0 + mov r1, #0x0 + ldr r0, _020AD130 ; =0x040002B8 + strh r1, [r2, #0x0] + mov r1, lr, lsr #0x2 + str r1, [r0, #0x0] +_020AD0AC: + ldrh r0, [r2, #0x0] + ands r0, r0, #0x8000 + bne _020AD0AC + ldr r1, _020AD134 ; =0x040002B4 + ldr r0, _020AD138 ; =0x021CB874 + ldr r1, [r1, #0x0] + ldr r0, [r0, #0x0] + cmp r1, r0 + bhi _020AD10C + ldr r2, _020AD140 ; =0x021CB87C + ldr r1, _020AD124 ; =0x02106498 + ldr r3, [r2, #0x0] + ldr r0, [r1, #0x8] + add r3, r3, #0x1 + str r3, [r2, #0x0] + cmp r3, r0 + ble _020AD118 + ldr r0, _020AD13C ; =0x021CB878 + mov r3, #0x0 + str r3, [r0, #0x0] + str r3, [r1, #0x0] + str r3, [r2, #0x0] + mov r0, #0x3 + ldmia sp!, {r4,pc} +_020AD10C: + ldr r0, _020AD140 ; =0x021CB87C + mov r1, #0x0 + str r1, [r0, #0x0] +_020AD118: + mov r4, #0x2 +_020AD11C: + mov r0, r4 + ldmia sp!, {r4,pc} + .balign 4 +_020AD124: .word 0x02106498 +_020AD128: .word 0x021CB880 +_020AD12C: .word 0x040002B0 +_020AD130: .word 0x040002B8 +_020AD134: .word 0x040002B4 +_020AD138: .word 0x021CB874 +_020AD13C: .word 0x021CB878 +_020AD140: .word 0x021CB87C + + arm_func_start FUN_020AD144 +FUN_020AD144: ; 0x020AD144 + stmdb sp!, {lr} + sub sp, sp, #0x4 + movs r1, r0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r0, _020AD16C ; =0x02106498 + mov r2, #0x10 + bl MI_CpuCopy8 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AD16C: .word 0x02106498 + + arm_func_start FUN_020AD170 +FUN_020AD170: + ldr r0, _020AD1B8 ; =0x021CB880 + mov r2, #0x0 + mov r1, #0x1000000 +_020AD17C: + str r1, [r0, r2, lsl #0x2] + add r2, r2, #0x1 + cmp r2, #0x4 + blt _020AD17C + ldr r3, _020AD1BC ; =0x021CB878 + mov r12, #0x0 + ldr r1, _020AD1C0 ; =0x02106498 + ldr r2, _020AD1C4 ; =0x021CB874 + ldr r0, _020AD1C8 ; =0x021CB87C + str r12, [r3, #0x0] + str r12, [r2, #0x0] + str r12, [r1, #0x0] + str r12, [r1, #0x4] + str r12, [r0, #0x0] + bx lr + .balign 4 +_020AD1B8: .word 0x021CB880 +_020AD1BC: .word 0x021CB878 +_020AD1C0: .word 0x02106498 +_020AD1C4: .word 0x021CB874 +_020AD1C8: .word 0x021CB87C + + arm_func_start FUN_020AD1CC +FUN_020AD1CC: ; 0x020AD1CC + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r12, r1 + mov r3, r2 + ldr r1, _020AD1F0 ; =0x021CB8D4 + mov r2, r12 + bl FUN_020AD1F4 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AD1F0: .word 0x021CB8D4 + + arm_func_start FUN_020AD1F4 +FUN_020AD1F4: ; 0x020AD1F4 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x14 + mov r4, #0x0 + str r4, [sp, #0x0] + str r4, [sp, #0x4] + mov r9, r4 + movs r8, r2, lsr #0x1 + beq _020AD330 + mov r4, #0xc0000000 + ldr ip, _020AD420 ; =0x021CB8BC + ldr r2, _020AD424 ; =0x021CB8A4 + str r4, [sp, #0xc] +_020AD224: + ldr r4, _020AD428 ; =0x021CB894 + ldr lr, [r2, #0x10] + ldr r7, [r4, #0x0] + mov r4, r9, lsl #0x1 + ldrsh r10, [r1, r4] + ldr r4, _020AD42C ; =0x021CB898 + mov r5, r7, lsl #0x1 + ldr r6, [r4, #0x0] + ldr r4, _020AD430 ; =0x021CBD14 + ldr r11, [r2, #0x14] + strh r10, [r4, r5] + ldr r10, [r12, #0x10] + mov r5, r6, lsl #0x1 + ldrsh r5, [r4, r5] + ldr r4, [r12, #0x14] + mul lr, r10, lr + str r10, [sp, #0x8] + str r10, [r12, #0x14] + mla r10, r4, r11, lr + ldr r4, [r12, #0xc] + ldr r11, [r2, #0xc] + str r4, [r12, #0x10] + mla r10, r4, r11, r10 + ldr r4, [r12, #0x8] + ldr r11, [r2, #0x8] + str r4, [r12, #0xc] + mla r10, r4, r11, r10 + ldr r4, [r12, #0x4] + ldr r11, [r2, #0x4] + str r4, [r12, #0x8] + mla r10, r4, r11, r10 + ldr r4, [r2, #0x0] + str r5, [r12, #0x0] + mla r4, r5, r4, r10 + str r5, [r12, #0x4] + ldr r5, _020AD434 ; =0x3FFF8000 + cmp r4, r5 + movgt r4, r5 + bgt _020AD2C8 + cmp r4, #0xc0000000 + ldrlt r4, [sp, #0xc] +_020AD2C8: + ldr r5, _020AD438 ; =0x000007FF + add r7, r7, #0x1 + and r7, r7, r5 + ldr r5, _020AD428 ; =0x021CB894 + add r6, r6, #0x1 + str r7, [r5, #0x0] + ldr r5, _020AD438 ; =0x000007FF + mov r7, r9, lsl #0x1 + and r6, r6, r5 + ldr r5, _020AD42C ; =0x021CB898 + mov r4, r4, asr #0xf + str r6, [r5, #0x0] + strh r4, [r1, r7] + ldrsh r6, [r1, r7] + ldrsh r4, [r0, r7] + add r9, r9, #0x1 + mul r5, r6, r6 + strh r4, [r1, r7] + ldr r4, [sp, #0x0] + adds r4, r4, r5 + str r4, [sp, #0x0] + ldr r4, [sp, #0x4] + adc r4, r4, r5, asr #0x1f + str r4, [sp, #0x4] + cmp r9, r8 + blo _020AD224 +_020AD330: + ldr r5, _020AD43C ; =0x04000280 + mov r1, #0x1 + strh r1, [r5, #0x0] + ldr r4, _020AD440 ; =0x04000290 + ldr r1, [sp, #0x0] + ldr r2, _020AD444 ; =0x04000298 + str r1, [r4, #0x0] + ldr r1, [sp, #0x4] + str r1, [r4, #0x4] + str r8, [r2, #0x0] + mov r1, #0x0 + str r1, [r2, #0x4] +_020AD360: + ldrh r1, [r5, #0x0] + ands r1, r1, #0x8000 + bne _020AD360 + ldr r1, _020AD448 ; =0x040002A0 + ldr r2, _020AD44C ; =0x040002B0 + ldr r5, [r1, #0x0] + mov r4, #0x0 + ldr r1, _020AD450 ; =0x040002B8 + strh r4, [r2, #0x0] + str r5, [r1, #0x0] +_020AD388: + ldrh r1, [r2, #0x0] + ands r1, r1, #0x8000 + bne _020AD388 + ldr r2, _020AD454 ; =0x040002B4 + mov r1, #0x3 + ldr r4, [r2, #0x0] + mov r2, r3, lsl #0x1 + mul r1, r4, r1 + cmp r2, r1 + ldrhi r0, _020AD458 ; =0x021CB890 + movhi r1, #0x0 + strhih r1, [r0, #0x0] + addhi sp, sp, #0x14 + ldmhiia sp!, {r4-r11,pc} +_020AD3C0: ; 0x020AD3C0 + cmp r3, r4 + ldrlo r1, _020AD458 ; =0x021CB890 + movcc r2, #0x4 + strcch r2, [r1, #0x0] + ldr r1, _020AD458 ; =0x021CB890 + mov r3, #0x0 + ldrsh r2, [r1, #0x0] + cmp r2, #0x4 + addlt r2, r2, #0x1 + strlth r2, [r1, #0x0] + cmp r8, #0x0 + addls sp, sp, #0x14 + ldmlsia sp!, {r4-r11,pc} +_020AD3F4: ; 0x020AD3F4 + ldr r1, _020AD458 ; =0x021CB890 + ldrsh r4, [r1, #0x0] +_020AD3FC: + mov r2, r3, lsl #0x1 + ldrsh r1, [r0, r2] + add r3, r3, #0x1 + cmp r3, r8 + mov r1, r1, asr r4 + strh r1, [r0, r2] + blo _020AD3FC + add sp, sp, #0x14 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020AD420: .word 0x021CB8BC +_020AD424: .word 0x021CB8A4 +_020AD428: .word 0x021CB894 +_020AD42C: .word 0x021CB898 +_020AD430: .word 0x021CBD14 +_020AD434: .word 0x3FFF8000 +_020AD438: .word 0x000007FF +_020AD43C: .word 0x04000280 +_020AD440: .word 0x04000290 +_020AD444: .word 0x04000298 +_020AD448: .word 0x040002A0 +_020AD44C: .word 0x040002B0 +_020AD450: .word 0x040002B8 +_020AD454: .word 0x040002B4 +_020AD458: .word 0x021CB890 + + arm_func_start FUN_020AD45C +FUN_020AD45C: ; 0x020AD45C + ldr ip, _020AD46C ; =MIi_CpuCopyFast + mov r2, r1 + ldr r1, _020AD470 ; =0x021CB8D4 + bx r12 + .balign 4 +_020AD46C: .word MIi_CpuCopyFast +_020AD470: .word 0x021CB8D4 + + arm_func_start FUN_020AD474 +FUN_020AD474: ; 0x020AD474 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020AD4E4 ; =0x021CB894 + mov r3, #0x0 + ldr r2, _020AD4E8 ; =0x0000019D + ldr r0, _020AD4EC ; =0x021CB898 + ldr lr, _020AD4F0 ; =0x021064A8 + str r3, [r1, #0x0] + str r2, [r0, #0x0] + ldr r0, _020AD4F4 ; =0x021CBD14 + mov r12, r3 +_020AD4A0: + mov r1, r3, lsl #0x1 + add r3, r3, #0x1 + strh r12, [r0, r1] + cmp r3, #0x800 + blt _020AD4A0 + ldr r2, _020AD4F8 ; =0x021CB8BC + ldr r0, _020AD4FC ; =0x021CB8A4 + mov r3, #0x0 +_020AD4C0: + str r3, [r2, r12, lsl #0x2] + mov r1, r12, lsl #0x1 + ldrsh r1, [lr, r1] + str r1, [r0, r12, lsl #0x2] + add r12, r12, #0x1 + cmp r12, #0x6 + blt _020AD4C0 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AD4E4: .word 0x021CB894 +_020AD4E8: .word 0x0000019D +_020AD4EC: .word 0x021CB898 +_020AD4F0: .word 0x021064A8 +_020AD4F4: .word 0x021CBD14 +_020AD4F8: .word 0x021CB8BC +_020AD4FC: .word 0x021CB8A4 + + arm_func_start FUN_020AD500 +FUN_020AD500: ; 0x020AD500 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldrsh r2, [r0, #0x0] + ldr r6, _020AD5FC ; =0x00000E9F + ldr sb, _020AD600 ; =0x021CB89C + ldr r8, _020AD604 ; =0x021CB8A0 + smulbb r10, r2, r6 + ldr r3, [r9, #0x0] + ldr r2, [r8, #0x0] + ldr r7, _020AD608 ; =0x00000D3E + add r3, r10, r3 + mla r5, r2, r7, r3 + mov r3, r5, asr #0xc + mul r4, r3, r3 + str r5, [r8, #0x0] + rsb r2, r10, #0x0 + mov r12, r1, lsr #0x1 + str r3, [r8, #0x0] + str r2, [r9, #0x0] + cmp r12, #0x1 + mov lr, r4, asr #0x1f + mov r5, #0x1 + bls _020AD5AC +_020AD55C: + mov r2, r5, lsl #0x1 + ldrsh r10, [r0, r2] + ldr r3, [r8, #0x0] + add r2, r0, r5, lsl #0x1 + strh r3, [r2, #-0x2] + smulbb r11, r10, r6 + ldr r2, [r9, #0x0] + rsb r10, r11, #0x0 + add r2, r11, r2 + mla r2, r3, r7, r2 + mov r3, r2, asr #0xc + mul r11, r3, r3 + str r2, [r8, #0x0] + adds r4, r4, r11 + str r10, [r9, #0x0] + add r5, r5, #0x1 + adc lr, lr, r11, asr #0x1f + str r3, [r8, #0x0] + cmp r5, r12 + blo _020AD55C +_020AD5AC: + bic r1, r1, #0x1 + add r0, r0, r1 + ldr r2, _020AD60C ; =0x04000280 + strh r3, [r0, #-0x2] + mov r0, #0x1 + ldr r1, _020AD610 ; =0x04000290 + strh r0, [r2, #0x0] + str r4, [r1, #0x0] + ldr r0, _020AD614 ; =0x04000298 + str lr, [r1, #0x4] + str r12, [r0, #0x0] + mov r1, #0x0 + str r1, [r0, #0x4] +_020AD5E0: + ldrh r0, [r2, #0x0] + ands r0, r0, #0x8000 + bne _020AD5E0 + ldr r0, _020AD618 ; =0x040002A0 + ldr r0, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020AD5FC: .word 0x00000E9F +_020AD600: .word 0x021CB89C +_020AD604: .word 0x021CB8A0 +_020AD608: .word 0x00000D3E +_020AD60C: .word 0x04000280 +_020AD610: .word 0x04000290 +_020AD614: .word 0x04000298 +_020AD618: .word 0x040002A0 + + arm_func_start FUN_020AD61C +FUN_020AD61C: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + movs lr, r3, lsr #0x1 + mov r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} +_020AD634: ; 0x020AD634 + mov r3, #0x8000 + ldr ip, _020AD720 ; =0x00007FFF + rsb r3, r3, #0x0 +_020AD640: + mov r5, r4, lsl #0x1 + ldrsh r6, [r0, r5] + ldrsh r5, [r1, r5] + add r6, r6, r5 + cmp r6, r12 + movgt r6, r12 + bgt _020AD664 + cmp r6, r3 + movlt r6, r3 +_020AD664: + mov r5, r4, lsl #0x1 + add r7, r4, #0x1 + strh r6, [r2, r5] + mov r5, r7, lsl #0x1 + ldrsh r6, [r0, r5] + ldrsh r5, [r1, r5] + add r6, r6, r5 + cmp r6, r12 + movgt r6, r12 + bgt _020AD694 + cmp r6, r3 + movlt r6, r3 +_020AD694: + mov r5, r7, lsl #0x1 + add r7, r4, #0x2 + strh r6, [r2, r5] + mov r5, r7, lsl #0x1 + ldrsh r6, [r0, r5] + ldrsh r5, [r1, r5] + add r6, r6, r5 + cmp r6, r12 + movgt r6, r12 + bgt _020AD6CC + mov r5, #0x8000 + rsb r5, r5, #0x0 + cmp r6, r5 + movlt r6, r3 +_020AD6CC: + mov r5, r7, lsl #0x1 + add r7, r4, #0x3 + strh r6, [r2, r5] + mov r5, r7, lsl #0x1 + ldrsh r6, [r0, r5] + ldrsh r5, [r1, r5] + add r6, r6, r5 + cmp r6, r12 + movgt r6, r12 + bgt _020AD704 + mov r5, #0x8000 + rsb r5, r5, #0x0 + cmp r6, r5 + movlt r6, r3 +_020AD704: + mov r5, r7, lsl #0x1 + add r4, r4, #0x4 + strh r6, [r2, r5] + cmp r4, lr + blo _020AD640 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020AD720: .word 0x00007FFF + + arm_func_start FUN_020AD724 +FUN_020AD724: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + movs r6, r1 + mov r7, r0 + mov r5, r2 + mov r4, r3 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,pc} +_020AD748: ; 0x020AD748 + ldr r1, [r6, #0x0] + ldr r0, _020AD824 ; =0x5F564354 + cmp r1, r0 + addne sp, sp, #0x4 + movne r0, #0x2 + ldmneia sp!, {r4-r7,pc} +_020AD760: ; 0x020AD760 + ldr r0, _020AD828 ; =0x021CCD20 + ldr r0, [r0, #0x10] + cmp r0, #0x0 + beq _020AD780 + ldr r0, _020AD82C ; =0x021CCD1C + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020AD78C +_020AD780: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,pc} +_020AD78C: + mov r0, #0x0 + str r0, [r4, #0x0] + str r0, [r4, #0x4] + bl OS_GetTick + ldrb r3, [r6, #0x4] + and r2, r3, #0xf0 + cmp r2, #0x40 + bne _020AD7E0 + ldr r2, _020AD830 ; =0x021CCD18 + mov r3, r0 + ldr r4, [r2, #0x0] + mov r0, r7 + add r4, r4, #0x1 + str r4, [r2, #0x0] + str r1, [sp, #0x0] + mov r1, r6 + mov r2, r5 + bl FUN_020AA2A0 + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,pc} +_020AD7E0: + cmp r3, #0x0 + beq _020AD7F0 + cmp r3, #0xff + bne _020AD818 +_020AD7F0: + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + bl FUN_020AC7FC +_020AD804: ; 0x020AD804 + cmp r0, #0x0 + movne r0, #0x1 + add sp, sp, #0x4 + moveq r0, #0x0 + ldmia sp!, {r4-r7,pc} +_020AD818: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020AD824: .word 0x5F564354 +_020AD828: .word 0x021CCD20 +_020AD82C: .word 0x021CCD1C +_020AD830: .word 0x021CCD18 + + arm_func_start FUN_020AD834 +FUN_020AD834: ; 0x020AD834 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + add r3, sp, #0x0 + mov r4, r0 + bl FUN_020AD724 +_020AD848: ; 0x020AD848 + cmp r0, #0x0 + beq _020AD898 + cmp r0, #0x1 + beq _020AD864 + cmp r0, #0x2 + beq _020AD88C + b _020AD898 +_020AD864: + ldr r0, _020AD8A4 ; =0x021CCD20 + ldr r1, [sp, #0x0] + ldr r2, [sp, #0x4] + ldr r3, [r0, #0x8] + ldr r12, [r0, #0x4] + mov r0, r4 + blx r12 + add sp, sp, #0x8 + mov r0, #0x1 + ldmia sp!, {r4,pc} +_020AD88C: + add sp, sp, #0x8 + mov r0, #0x0 + ldmia sp!, {r4,pc} +_020AD898: + mov r0, #0x1 + add sp, sp, #0x8 + ldmia sp!, {r4,pc} + .balign 4 +_020AD8A4: .word 0x021CCD20 + + arm_func_start FUN_020AD8A8 +FUN_020AD8A8: ; 0x020AD8A8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020AD8FC ; =0x021CCD1C + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r0, _020AD900 ; =0x021CCD14 + ldr r1, [r0, #0x0] + add r1, r1, #0x1 + str r1, [r0, #0x0] + ands r0, r1, #0xf + bne _020AD8E0 + bl FUN_020AC898 +_020AD8E0: + bl FUN_020AA0A4 +_020AD8E4: ; 0x020AD8E4 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + bl FUN_020AA1CC + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AD8FC: .word 0x021CCD1C +_020AD900: .word 0x021CCD14 + + arm_func_start FUN_020AD904 +FUN_020AD904: ; 0x020AD904 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FUN_020AAF44 + bl FUN_020AC964 + bl FUN_020ACE10 + ldr r1, _020AD934 ; =0x021CCD20 + mov r2, #0x0 + ldr r0, _020AD938 ; =0x021CCD1C + str r2, [r1, #0x10] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AD934: .word 0x021CCD20 +_020AD938: .word 0x021CCD1C + + arm_func_start FUN_020AD93C +FUN_020AD93C: ; 0x020AD93C + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, _020ADA78 ; =0x02000C1C + bl FUN_02000B60 +_020AD94C: ; 0x020AD94C + cmp r4, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020AD958: ; 0x020AD958 + ldr r0, _020ADA7C ; =0x021CCD1C + ldr r0, [r0, #0x0] + cmp r0, #0x0 + movne r0, #0x1 + ldmneia sp!, {r4,pc} +_020AD96C: ; 0x020AD96C + ldr r0, [r4, #0x8] + cmp r0, #0x1 + beq _020AD98C + cmp r0, #0x2 + beq _020AD98C + cmp r0, #0x3 + movne r0, #0x0 + ldmneia sp!, {r4,pc} +_020AD98C: + ldr r0, [r4, #0x18] + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020AD99C: ; 0x020AD99C + ldr r2, [r4, #0x10] + cmp r2, #0x0 + beq _020AD9B4 + ldr r0, [r4, #0x14] + cmp r0, #0x0 + bne _020AD9BC +_020AD9B4: + mov r0, #0x0 + ldmia sp!, {r4,pc} +_020AD9BC: + mov r1, r2, lsr #0x1f + rsb r0, r1, r2, lsl #0x1b + adds r0, r1, r0, ror #0x1b + movne r0, #0x0 + ldmneia sp!, {r4,pc} +_020AD9D0: ; 0x020AD9D0 + ldr r0, _020ADA80 ; =0x021CCD20 + mov r1, #0x0 + mov r2, #0x18 + bl MI_CpuFill8 + ldr r2, [r4, #0x18] + ldr r1, _020ADA80 ; =0x021CCD20 + mov r0, #0x0 + str r2, [r1, #0x4] + ldr r2, [r4, #0x1c] + str r2, [r1, #0x8] + ldr r2, [r4, #0x8] + str r0, [r1, #0xc] + str r2, [r1, #0x10] + ldrb r2, [r4, #0xc] + cmp r2, #0x20 + ldmcsia sp!, {r4,pc} +_020ADA10: ; 0x020ADA10 + strb r2, [r1, #0x0] + ldr r0, [r4, #0x10] + ldr r1, [r4, #0x14] + bl FUN_020ACE30 +_020ADA20: ; 0x020ADA20 + cmp r0, #0x0 + bne _020ADA34 + bl FUN_020ACE10 +_020ADA2C: ; 0x020ADA2C + mov r0, #0x0 + ldmia sp!, {r4,pc} +_020ADA34: + mov r0, r4 + bl FUN_020AC97C +_020ADA3C: ; 0x020ADA3C + cmp r0, #0x0 + bne _020ADA50 + bl FUN_020ACE10 +_020ADA48: ; 0x020ADA48 + mov r0, #0x0 + ldmia sp!, {r4,pc} +_020ADA50: + bl FUN_020AAF58 +_020ADA54: ; 0x020ADA54 + cmp r0, #0x0 + ldrne r1, _020ADA7C ; =0x021CCD1C + movne r0, #0x1 + strne r0, [r1, #0x0] + ldmneia sp!, {r4,pc} +_020ADA68: ; 0x020ADA68 + bl FUN_020AC964 + bl FUN_020ACE10 +_020ADA70: ; 0x020ADA70 + mov r0, #0x0 + ldmia sp!, {r4,pc} + .balign 4 +_020ADA78: .word 0x02000C1C +_020ADA7C: .word 0x021CCD1C +_020ADA80: .word 0x021CCD20 + + arm_func_start FUN_020ADA84 +FUN_020ADA84: ; 0x020ADA84 + cmp r1, #0x0 + ldreq r0, [r0, #0x4] + ldrneh r0, [r0, #0xa] + ldrne r0, [r1, r0] + bx lr + + arm_func_start FUN_020ADA98 +FUN_020ADA98: ; 0x020ADA98 + cmp r1, #0x0 + ldreq r0, [r0, #0x0] + ldrneh r0, [r0, #0xa] + addne r0, r1, r0 + ldrne r0, [r0, #0x4] + bx lr + + arm_func_start FUN_020ADAB0 +FUN_020ADAB0: ; 0x020ADAB0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r12, [r0, #0xa] + ldr r3, [r1, r12] + add lr, r1, r12 + cmp r3, #0x0 + ldreq r1, [lr, #0x4] + streq r1, [r0, #0x0] + ldrne r2, [lr, #0x4] + addne r1, r3, r12 + strne r2, [r1, #0x4] + ldr r3, [lr, #0x4] + cmp r3, #0x0 + ldreq r1, [lr, #0x0] + streq r1, [r0, #0x4] + ldrneh r1, [r0, #0xa] + ldrne r2, [lr, #0x0] + strne r2, [r3, r1] + mov r1, #0x0 + str r1, [lr, #0x0] + str r1, [lr, #0x4] + ldrh r1, [r0, #0x8] + sub r1, r1, #0x1 + strh r1, [r0, #0x8] + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020ADB18 +FUN_020ADB18: ; 0x020ADB18 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r1, #0x0 + bne _020ADB38 + mov r1, r2 + bl FUN_020ADBE8 + add sp, sp, #0x4 + ldmia sp!, {pc} +_020ADB38: + ldr r3, [r0, #0x0] + cmp r1, r3 + bne _020ADB54 + mov r1, r2 + bl FUN_020ADB8C + add sp, sp, #0x4 + ldmia sp!, {pc} +_020ADB54: + ldrh lr, [r0, #0xa] + ldr r3, [r1, lr] + add r12, r2, lr + str r3, [r2, lr] + str r1, [r12, #0x4] + add r3, r3, lr + str r2, [r3, #0x4] + ldrh r3, [r0, #0xa] + str r2, [r1, r3] + ldrh r1, [r0, #0x8] + add r1, r1, #0x1 + strh r1, [r0, #0x8] + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020ADB8C +FUN_020ADB8C: ; 0x020ADB8C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x0] + cmp r2, #0x0 + bne _020ADBAC + bl FUN_020ADC48 + add sp, sp, #0x4 + ldmia sp!, {pc} +_020ADBAC: + ldrh r3, [r0, #0xa] + mov r2, #0x0 + str r2, [r1, r3] + ldr r2, [r0, #0x0] + add r3, r1, r3 + str r2, [r3, #0x4] + ldrh r2, [r0, #0xa] + ldr r3, [r0, #0x0] + str r1, [r3, r2] + str r1, [r0, #0x0] + ldrh r1, [r0, #0x8] + add r1, r1, #0x1 + strh r1, [r0, #0x8] + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020ADBE8 +FUN_020ADBE8: ; 0x020ADBE8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x0] + cmp r2, #0x0 + bne _020ADC08 + bl FUN_020ADC48 + add sp, sp, #0x4 + ldmia sp!, {pc} +_020ADC08: + ldrh r12, [r0, #0xa] + ldr r3, [r0, #0x4] + mov r2, #0x0 + str r3, [r1, r12] + add r3, r1, r12 + str r2, [r3, #0x4] + ldrh r2, [r0, #0xa] + ldr r3, [r0, #0x4] + add r2, r3, r2 + str r1, [r2, #0x4] + str r1, [r0, #0x4] + ldrh r1, [r0, #0x8] + add r1, r1, #0x1 + strh r1, [r0, #0x8] + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020ADC48 +FUN_020ADC48: ; 0x020ADC48 + ldrh r3, [r0, #0xa] + mov r2, #0x0 + add r12, r1, r3 + str r2, [r12, #0x4] + str r2, [r1, r3] + str r1, [r0, #0x0] + str r1, [r0, #0x4] + ldrh r1, [r0, #0x8] + add r1, r1, #0x1 + strh r1, [r0, #0x8] + bx lr + + arm_func_start FUN_020ADC74 +FUN_020ADC74: ; 0x020ADC74 + mov r2, #0x0 + str r2, [r0, #0x0] + str r2, [r0, #0x4] + strh r2, [r0, #0x8] + strh r1, [r0, #0xa] + bx lr + + arm_func_start FUN_020ADC8C +FUN_020ADC8C: ; 0x020ADC8C + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020ADD30 + mov r1, r4 + bl FUN_020ADAB0 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020ADCA4 +FUN_020ADCA4: + stmdb sp!, {r4,lr} + mov r4, r0 + str r1, [r4, #0x0] + str r2, [r4, #0x18] + str r3, [r4, #0x1c] + mov r0, #0x0 + str r0, [r4, #0x20] + ldr r1, [r4, #0x20] + ldrh r0, [sp, #0x8] + bic r1, r1, #0xff + str r1, [r4, #0x20] + ldr r1, [r4, #0x20] + and r0, r0, #0xff + orr r2, r1, r0 + add r0, r4, #0xc + mov r1, #0x4 + str r2, [r4, #0x20] + bl FUN_020ADC74 + ldr r0, _020ADD28 ; =0x021CCD38 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020ADD14 + ldr r0, _020ADD2C ; =0x021CCD3C + mov r1, #0x4 + bl FUN_020ADC74 + ldr r0, _020ADD28 ; =0x021CCD38 + mov r1, #0x1 + str r1, [r0, #0x0] +_020ADD14: + mov r0, r4 + bl FUN_020ADD30 + mov r1, r4 + bl FUN_020ADBE8 + ldmia sp!, {r4,pc} + .balign 4 +_020ADD28: .word 0x021CCD38 +_020ADD2C: .word 0x021CCD3C + + arm_func_start FUN_020ADD30 +FUN_020ADD30: ; 0x020ADD30 + stmdb sp!, {r4,lr} + ldr r4, _020ADD54 ; =0x021CCD3C + mov r1, r0 + mov r0, r4 + bl FUN_020ADD58 +_020ADD44: ; 0x020ADD44 + cmp r0, #0x0 + addne r4, r0, #0xc + mov r0, r4 + ldmia sp!, {r4,pc} + .balign 4 +_020ADD54: .word 0x021CCD3C + + arm_func_start FUN_020ADD58 +FUN_020ADD58: + stmdb sp!, {r4-r6,lr} + mov r5, r1 + mov r1, #0x0 + mov r6, r0 + bl FUN_020ADA98 + movs r4, r0 + beq _020ADDB8 +_020ADD74: + ldr r0, [r4, #0x18] + cmp r0, r5 + bhi _020ADDA4 + ldr r0, [r4, #0x1c] + cmp r5, r0 + bhs _020ADDA4 + mov r1, r5 + add r0, r4, #0xc + bl FUN_020ADD58 +_020ADD98: ; 0x020ADD98 + cmp r0, #0x0 + moveq r0, r4 + ldmia sp!, {r4-r6,pc} +_020ADDA4: + mov r0, r6 + mov r1, r4 + bl FUN_020ADA98 + movs r4, r0 + bne _020ADD74 +_020ADDB8: + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020ADDC0 +FUN_020ADDC0: ; 0x020ADDC0 + ldr r0, [r0, #-0xc] + bx lr + + arm_func_start FUN_020ADDC8 +FUN_020ADDC8: ; 0x020ADDC8 + ldr r2, [r0, #0x24] + mov r0, #0x0 + cmp r2, #0x0 + bxeq lr +_020ADDD8: + ldr r1, [r2, #0x4] + ldr r2, [r2, #0xc] + add r0, r0, r1 + cmp r2, #0x0 + bne _020ADDD8 + bx lr + + arm_func_start FUN_020ADDF0 +FUN_020ADDF0: ; 0x020ADDF0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + sub r4, r1, #0x10 + add r5, r0, #0x24 + add r0, sp, #0x0 + mov r1, r4 + bl FUN_020AE528 + mov r1, r4 + add r0, r5, #0x8 + bl FUN_020AE500 + add r1, sp, #0x0 + mov r0, r5 + bl FUN_020AE02C + add sp, sp, #0xc + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020ADE2C +FUN_020ADE2C: ; 0x020ADE2C + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x10 + mov r4, r1 + mov r10, r2 + sub r6, r4, #0x10 + add r1, r10, #0x3 + mov r5, r0 + ldr r8, [r6, #0x4] + bic r10, r1, #0x3 + cmp r10, r8 + add r7, r5, #0x24 + addeq sp, sp, #0x10 + moveq r0, r10 + ldmeqia sp!, {r4-r10,pc} +_020ADE64: ; 0x020ADE64 + cmp r10, r8 + bls _020ADF60 + ldr r9, [r7, #0x0] + add r0, r6, #0x10 + cmp r9, #0x0 + add r0, r8, r0 + beq _020ADE94 +_020ADE80: + cmp r9, r0 + beq _020ADE94 + ldr r9, [r9, #0xc] + cmp r9, #0x0 + bne _020ADE80 +_020ADE94: + cmp r9, #0x0 + beq _020ADEB0 + ldr r0, [r9, #0x4] + add r1, r8, #0x10 + add r0, r1, r0 + cmp r10, r0 + bls _020ADEBC +_020ADEB0: + add sp, sp, #0x10 + mov r0, #0x0 + ldmia sp!, {r4-r10,pc} +_020ADEBC: + add r0, sp, #0x0 + mov r1, r9 + bl FUN_020AE528 + mov r0, r7 + mov r1, r9 + bl FUN_020AE500 + ldr r2, [sp, #0x4] + add r3, r10, r4 + ldr r9, [sp, #0x0] + sub r1, r2, r3 + str r3, [sp, #0x0] + cmp r1, #0x10 + strcc r2, [sp, #0x0] + mov r8, r0 + ldr r0, [sp, #0x0] + sub r0, r0, r4 + str r0, [r6, #0x4] + ldr r1, [sp, #0x4] + ldr r0, [sp, #0x0] + sub r0, r1, r0 + cmp r0, #0x10 + blo _020ADF30 + ldr r1, _020ADF9C ; =0x00004652 + add r0, sp, #0x0 + bl FUN_020AE4A0 + mov r1, r0 + mov r0, r7 + mov r2, r8 + bl FUN_020AE4D0 +_020ADF30: + ldr r0, [r5, #0x20] + ldr r1, [sp, #0x0] + and r0, r0, #0xff + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + sub r2, r1, r9 + ands r0, r0, #0x1 + beq _020ADF90 + mov r1, r9 + mov r0, #0x0 + bl MIi_CpuClear32 + b _020ADF90 +_020ADF60: + add r0, r10, r4 + str r0, [sp, #0x8] + ldr r1, [r6, #0x4] + add r0, r6, #0x10 + add r0, r1, r0 + str r0, [sp, #0xc] + add r1, sp, #0x8 + mov r0, r7 + str r10, [r6, #0x4] + bl FUN_020AE02C +_020ADF88: ; 0x020ADF88 + cmp r0, #0x0 + streq r8, [r6, #0x4] +_020ADF90: + ldr r0, [r6, #0x4] + add sp, sp, #0x10 + ldmia sp!, {r4-r10,pc} + .balign 4 +_020ADF9C: .word 0x00004652 + + arm_func_start tempName_NNS_FndAllocFromExpHeapEx +tempName_NNS_FndAllocFromExpHeapEx: ; 0x020ADFA0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r1, #0x0 + moveq r1, #0x1 + add r1, r1, #0x3 + cmp r2, #0x0 + bic r1, r1, #0x3 + blt _020ADFCC + bl FUN_020AE1D8 + add sp, sp, #0x4 + ldmia sp!, {pc} +_020ADFCC: + rsb r2, r2, #0x0 + bl FUN_020AE11C + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start thunk_FUN_020adc8c +thunk_FUN_020adc8c: ; 0x020ADFDC + ldr ip, _020ADFE4 ; =FUN_020ADC8C + bx r12 + .balign 4 +_020ADFE4: .word FUN_020ADC8C + + arm_func_start tempName_NNS_FndCreateExpHeapEx +tempName_NNS_FndCreateExpHeapEx: ; 0x020ADFE8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + add r1, r1, r0 + add r0, r0, #0x3 + bic r1, r1, #0x3 + bic r0, r0, #0x3 + cmp r0, r1 + bhi _020AE014 + sub r3, r1, r0 + cmp r3, #0x4c + bhs _020AE020 +_020AE014: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {pc} +_020AE020: + bl FUN_020AE420 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020AE02C +FUN_020AE02C: + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r5, r1 + ldr r2, [r5, #0x0] + ldr r1, [r5, #0x4] + mov r6, r0 + str r2, [sp, #0x0] + str r1, [sp, #0x4] + ldr r1, [r6, #0x0] + mov r4, #0x0 + cmp r1, #0x0 + beq _020AE0A0 + ldr r0, [r5, #0x0] +_020AE060: + cmp r1, r0 + movcc r4, r1 + blo _020AE094 + ldr r0, [r5, #0x4] + cmp r1, r0 + bne _020AE0A0 + ldr r2, [r1, #0x4] + add r0, r1, #0x10 + add r2, r2, r0 + mov r0, r6 + str r2, [sp, #0x4] + bl FUN_020AE500 + b _020AE0A0 +_020AE094: + ldr r1, [r1, #0xc] + cmp r1, #0x0 + bne _020AE060 +_020AE0A0: + cmp r4, #0x0 + beq _020AE0D4 + ldr r2, [r4, #0x4] + add r1, r4, #0x10 + ldr r0, [r5, #0x0] + add r1, r2, r1 + cmp r1, r0 + bne _020AE0D4 + mov r0, r6 + mov r1, r4 + str r4, [sp, #0x0] + bl FUN_020AE500 + mov r4, r0 +_020AE0D4: + ldr r1, [sp, #0x4] + ldr r0, [sp, #0x0] + sub r0, r1, r0 + cmp r0, #0x10 + addcc sp, sp, #0x8 + movcc r0, #0x0 + ldmccia sp!, {r4-r6,pc} +_020AE0F0: ; 0x020AE0F0 + ldr r1, _020AE118 ; =0x00004652 + add r0, sp, #0x0 + bl FUN_020AE4A0 + mov r1, r0 + mov r0, r6 + mov r2, r4 + bl FUN_020AE4D0 + mov r0, #0x1 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020AE118: .word 0x00004652 + + arm_func_start FUN_020AE11C +FUN_020AE11C: ; 0x020AE11C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + add r0, r0, #0x24 + ldrh r4, [r0, #0x12] + mov r3, r1 + mvn lr, #0x0 + and r1, r4, #0x1 + mov r1, r1, lsl #0x10 + movs r1, r1, lsr #0x10 + moveq r5, #0x1 + mov r1, #0x0 + ldr r4, [r0, #0x4] + movne r5, #0x0 + mov r12, r1 + cmp r4, #0x0 + beq _020AE1B0 + sub r2, r2, #0x1 + mvn r2, r2 +_020AE164: + ldr r8, [r4, #0x4] + add r9, r4, #0x10 + add r6, r8, r9 + sub r6, r6, r3 + and r7, r2, r6 + subs r6, r7, r9 + bmi _020AE1A4 + cmp lr, r8 + bls _020AE1A4 + mov r1, r4 + mov lr, r8 + mov r12, r7 + cmp r5, #0x0 + bne _020AE1B0 + cmp r8, r3 + beq _020AE1B0 +_020AE1A4: + ldr r4, [r4, #0x8] + cmp r4, #0x0 + bne _020AE164 +_020AE1B0: + cmp r1, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,pc} +_020AE1C0: ; 0x020AE1C0 + mov r4, #0x1 + mov r2, r12 + str r4, [sp, #0x0] + bl FUN_020AE298 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + + arm_func_start FUN_020AE1D8 +FUN_020AE1D8: ; 0x020AE1D8 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + add r0, r0, #0x24 + ldrh r4, [r0, #0x12] + mov r3, r1 + ldr r5, [r0, #0x0] + and r1, r4, #0x1 + mov r1, r1, lsl #0x10 + movs r1, r1, lsr #0x10 + moveq r6, #0x1 + mov r1, #0x0 + movne r6, #0x0 + mov lr, r1 + cmp r5, #0x0 + mvn r4, #0x0 + beq _020AE270 + sub r12, r2, #0x1 + mvn r2, r12 +_020AE220: + add r8, r5, #0x10 + add r7, r12, r8 + and r9, r2, r7 + sub r7, r9, r8 + ldr r8, [r5, #0x4] + add r7, r3, r7 + cmp r8, r7 + blo _020AE264 + cmp r4, r8 + bls _020AE264 + mov r1, r5 + mov r4, r8 + mov lr, r9 + cmp r6, #0x0 + bne _020AE270 + cmp r8, r3 + beq _020AE270 +_020AE264: + ldr r5, [r5, #0xc] + cmp r5, #0x0 + bne _020AE220 +_020AE270: + cmp r1, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,pc} +_020AE280: ; 0x020AE280 + mov r4, #0x0 + mov r2, lr + str r4, [sp, #0x0] + bl FUN_020AE298 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + + arm_func_start FUN_020AE298 +FUN_020AE298: ; 0x020AE298 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x18 + mov r7, r0 + add r0, sp, #0x0 + mov r8, r1 + mov r6, r2 + mov r5, r3 + bl FUN_020AE528 + ldr r3, [sp, #0x4] + sub r4, r6, #0x10 + add r2, r5, r6 + mov r0, r7 + mov r1, r8 + str r4, [sp, #0x4] + str r3, [sp, #0xc] + str r2, [sp, #0x8] + bl FUN_020AE500 + ldr r2, [sp, #0x0] + ldr r1, [sp, #0x4] + mov r5, r0 + sub r0, r1, r2 + cmp r0, #0x10 + strcc r2, [sp, #0x4] + blo _020AE318 + ldr r1, _020AE418 ; =0x00004652 + add r0, sp, #0x0 + bl FUN_020AE4A0 + mov r1, r0 + mov r0, r7 + mov r2, r5 + bl FUN_020AE4D0 + mov r5, r0 +_020AE318: + ldr r1, [sp, #0xc] + ldr r0, [sp, #0x8] + sub r0, r1, r0 + cmp r0, #0x10 + strcc r1, [sp, #0x8] + blo _020AE34C + ldr r1, _020AE418 ; =0x00004652 + add r0, sp, #0x8 + bl FUN_020AE4A0 + mov r1, r0 + mov r0, r7 + mov r2, r5 + bl FUN_020AE4D0 +_020AE34C: + ldr r0, [r7, #-0x4] + ldr r1, [sp, #0x4] + and r0, r0, #0xff + mov r0, r0, lsl #0x10 + ldr r2, [sp, #0x8] + mov r0, r0, lsr #0x10 + sub r2, r2, r1 + ands r0, r0, #0x1 + beq _020AE378 + mov r0, #0x0 + bl MIi_CpuClear32 +_020AE378: + ldr r2, [sp, #0x8] + ldr r1, _020AE41C ; =0x00005544 + add r0, sp, #0x10 + str r4, [sp, #0x10] + str r2, [sp, #0x14] + bl FUN_020AE4A0 + mov r1, r0 + ldrh r3, [r1, #0x2] + ldrh r2, [sp, #0x30] + add r0, r7, #0x8 + bic r3, r3, #0x8000 + strh r3, [r1, #0x2] + ldrh r3, [r1, #0x2] + and r2, r2, #0x1 + orr r2, r3, r2, lsl #0xf + strh r2, [r1, #0x2] + ldrh r2, [r1, #0x2] + ldr r3, [sp, #0x4] + bic r2, r2, #0x7f00 + strh r2, [r1, #0x2] + sub r2, r1, r3 + mov r2, r2, lsl #0x10 + mov r2, r2, lsr #0x10 + ldrh r3, [r1, #0x2] + and r2, r2, #0x7f + orr r2, r3, r2, lsl #0x8 + strh r2, [r1, #0x2] + ldrh r2, [r1, #0x2] + ldrh r3, [r7, #0x10] + bic r2, r2, #0xff + strh r2, [r1, #0x2] + ldrh r2, [r1, #0x2] + and r3, r3, #0xff + orr r2, r2, r3 + strh r2, [r1, #0x2] + ldr r2, [r7, #0xc] + bl FUN_020AE4D0 + mov r0, r6 + add sp, sp, #0x18 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020AE418: .word 0x00004652 +_020AE41C: .word 0x00005544 + + arm_func_start FUN_020AE420 +FUN_020AE420: ; 0x020AE420 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + mov r3, r1 + add r4, r5, #0x24 + str r2, [sp, #0x0] + ldr r1, _020AE498 ; =0x45585048 + add r2, r4, #0x14 + bl FUN_020ADCA4 +_020AE444: ; 0x020AE444 + mov r0, #0x0 + strh r0, [r4, #0x10] + strh r0, [r4, #0x12] + ldrh r2, [r4, #0x12] + ldr r1, _020AE49C ; =0x00004652 + add r0, sp, #0x4 + bic r2, r2, #0x1 + strh r2, [r4, #0x12] + ldr r2, [r5, #0x18] + str r2, [sp, #0x4] + ldr r2, [r5, #0x1c] + str r2, [sp, #0x8] + bl FUN_020AE4A0 + str r0, [r5, #0x24] + str r0, [r4, #0x4] + mov r1, #0x0 + str r1, [r4, #0x8] + mov r0, r5 + str r1, [r4, #0xc] + add sp, sp, #0xc + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AE498: .word 0x45585048 +_020AE49C: .word 0x00004652 + + arm_func_start FUN_020AE4A0 +FUN_020AE4A0: ; 0x020AE4A0 + ldr r3, [r0, #0x0] + mov r2, #0x0 + strh r1, [r3, #0x0] + strh r2, [r3, #0x2] + ldr r1, [r0, #0x4] + add r0, r3, #0x10 + sub r0, r1, r0 + str r0, [r3, #0x4] + str r2, [r3, #0x8] + mov r0, r3 + str r2, [r3, #0xc] + bx lr + + arm_func_start FUN_020AE4D0 +FUN_020AE4D0: ; 0x020AE4D0 + str r2, [r1, #0x8] + cmp r2, #0x0 + ldrne r3, [r2, #0xc] + strne r1, [r2, #0xc] + ldreq r3, [r0, #0x0] + streq r1, [r0, #0x0] + str r3, [r1, #0xc] + cmp r3, #0x0 + strne r1, [r3, #0x8] + streq r1, [r0, #0x4] + mov r0, r1 + bx lr + + arm_func_start FUN_020AE500 +FUN_020AE500: ; 0x020AE500 + ldr r2, [r1, #0x8] + ldr r1, [r1, #0xc] + cmp r2, #0x0 + strne r1, [r2, #0xc] + streq r1, [r0, #0x0] + cmp r1, #0x0 + strne r2, [r1, #0x8] + streq r2, [r0, #0x4] + mov r0, r2 + bx lr + + arm_func_start FUN_020AE528 +FUN_020AE528: ; 0x020AE528 + ldrh r2, [r1, #0x2] + add r3, r1, #0x10 + mov r2, r2, asr #0x8 + and r2, r2, #0x7f + mov r2, r2, lsl #0x10 + sub r2, r1, r2, lsr #0x10 + str r2, [r0, #0x0] + ldr r1, [r1, #0x4] + add r1, r1, r3 + str r1, [r0, #0x4] + bx lr + + arm_func_start FUN_020AE554 +FUN_020AE554: ; 0x020AE554 + add r2, r0, #0x24 + cmp r1, #0x0 + ldr r3, [r2, #0x8] + beq _020AE584 + cmp r3, #0x0 + beq _020AE584 +_020AE56C: + ldr r0, [r3, #0x0] + cmp r0, r1 + beq _020AE584 + ldr r3, [r3, #0xc] + cmp r3, #0x0 + bne _020AE56C +_020AE584: + cmp r3, #0x0 + moveq r0, #0x0 + bxeq lr + ldr r1, [r3, #0x4] + mov r0, #0x1 + str r1, [r2, #0x0] + ldr r1, [r3, #0x8] + str r1, [r2, #0x4] + ldr r1, [r3, #0xc] + str r1, [r2, #0x8] + bx lr + + arm_func_start FUN_020AE5B0 +FUN_020AE5B0: ; 0x020AE5B0 + stmdb sp!, {r4-r6,lr} + add r4, r0, #0x24 + ldr r5, [r0, #0x24] + mov r6, r1 + mov r0, r4 + mov r1, #0x10 + mov r2, #0x4 + bl FUN_020AE77C +_020AE5D0: ; 0x020AE5D0 + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020AE5DC: ; 0x020AE5DC + str r6, [r0, #0x0] + str r5, [r0, #0x4] + ldr r1, [r4, #0x4] + str r1, [r0, #0x8] + ldr r1, [r4, #0x8] + str r1, [r0, #0xc] + str r0, [r4, #0x8] + mov r0, #0x1 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020AE600 +FUN_020AE600: ; 0x020AE600 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r5, r0 + ands r1, r4, #0x1 + beq _020AE61C + bl FUN_020AE6F8 +_020AE61C: + ands r0, r4, #0x2 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} +_020AE628: ; 0x020AE628 + mov r0, r5 + bl FUN_020AE6C8 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020AE638 +FUN_020AE638: ; 0x020AE638 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r1, #0x0 + moveq r1, #0x1 + add r1, r1, #0x3 + add r0, r0, #0x24 + cmp r2, #0x0 + bic r1, r1, #0x3 + blt _020AE668 + bl FUN_020AE77C + add sp, sp, #0x4 + ldmia sp!, {pc} +_020AE668: + rsb r2, r2, #0x0 + bl FUN_020AE710 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start thunk_FUN_020adc8c_2 +thunk_FUN_020adc8c_2: ; 0x020AE678 + ldr ip, _020AE680 ; =FUN_020ADC8C + bx r12 + .balign 4 +_020AE680: .word FUN_020ADC8C + + arm_func_start FUN_020AE684 +FUN_020AE684: ; 0x020AE684 + stmdb sp!, {lr} + sub sp, sp, #0x4 + add r1, r1, r0 + add r0, r0, #0x3 + bic r1, r1, #0x3 + bic r0, r0, #0x3 + cmp r0, r1 + bhi _020AE6B0 + sub r3, r1, r0 + cmp r3, #0x30 + bhs _020AE6BC +_020AE6B0: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {pc} +_020AE6BC: + bl FUN_020AE7E0 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020AE6C8 +FUN_020AE6C8: ; 0x020AE6C8 + add r2, r0, #0x24 + ldr r3, [r2, #0x8] + cmp r3, #0x0 + beq _020AE6EC +_020AE6D8: + ldr r1, [r0, #0x1c] + str r1, [r3, #0x8] + ldr r3, [r3, #0xc] + cmp r3, #0x0 + bne _020AE6D8 +_020AE6EC: + ldr r0, [r0, #0x1c] + str r0, [r2, #0x4] + bx lr + + arm_func_start FUN_020AE6F8 +FUN_020AE6F8: ; 0x020AE6F8 + ldr r1, [r0, #0x18] + add r2, r0, #0x24 + str r1, [r0, #0x24] + mov r0, #0x0 + str r0, [r2, #0x8] + bx lr + + arm_func_start FUN_020AE710 +FUN_020AE710: ; 0x020AE710 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r3, [r5, #0x4] + sub r0, r2, #0x1 + mvn r2, r0 + sub r1, r3, r1 + ldr r0, [r5, #0x0] + and r4, r2, r1 + cmp r4, r0 + addcc sp, sp, #0x4 + movcc r0, #0x0 + ldmccia sp!, {r4-r5,pc} +_020AE744: ; 0x020AE744 + ldr r0, [r5, #-0x4] + sub r2, r3, r4 + and r0, r0, #0xff + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + ands r0, r0, #0x1 + beq _020AE76C + mov r1, r4 + mov r0, #0x0 + bl MIi_CpuClear32 +_020AE76C: + mov r0, r4 + str r4, [r5, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020AE77C +FUN_020AE77C: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldr r0, [r6, #0x0] + sub r2, r2, #0x1 + mvn r3, r2 + add r2, r2, r0 + and r5, r3, r2 + ldr r2, [r6, #0x4] + add r4, r1, r5 + cmp r4, r2 + movhi r0, #0x0 + ldmhiia sp!, {r4-r6,pc} +_020AE7AC: ; 0x020AE7AC + ldr r1, [r6, #-0x4] + sub r2, r4, r0 + and r1, r1, #0xff + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + ands r1, r1, #0x1 + beq _020AE7D4 + mov r1, r0 + mov r0, #0x0 + bl MIi_CpuClear32 +_020AE7D4: + mov r0, r5 + str r4, [r6, #0x0] + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020AE7E0 +FUN_020AE7E0: ; 0x020AE7E0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r3, r1 + add r4, r5, #0x24 + str r2, [sp, #0x0] + ldr r1, _020AE828 ; =0x46524D48 + add r2, r4, #0xc + bl FUN_020ADCA4 + ldr r0, [r5, #0x18] + mov r1, #0x0 + str r0, [r5, #0x24] + ldr r2, [r5, #0x1c] + mov r0, r5 + str r2, [r4, #0x4] + str r1, [r4, #0x8] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AE828: .word 0x46524D48 + + arm_func_start FUN_020AE82C +FUN_020AE82C: ; 0x020AE82C + ldr ip, _020AE848 ; =0x020FF7CC + mov r3, #0x0 + str r12, [r0, #0x0] + str r1, [r0, #0x4] + str r2, [r0, #0x8] + str r3, [r0, #0xc] + bx lr + .balign 4 +_020AE848: .word 0x020FF7CC + + arm_func_start FUN_020AE84C +FUN_020AE84C: ; 0x020AE84C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x0] + ldr r2, [r2, #0x4] + blx r2 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020AE868 +FUN_020AE868: ; 0x020AE868 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x0] + ldr r2, [r2, #0x0] + blx r2 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020AE884 +FUN_020AE884: ; 0x020AE884 + ldr ip, _020AE890 ; =FUN_020ADDF0 + ldr r0, [r0, #0x4] + bx r12 + .balign 4 +_020AE890: .word FUN_020ADDF0 + + arm_func_start FUN_020AE894 +FUN_020AE894: ; 0x020AE894 + ldr ip, _020AE8A8 ; =tempName_NNS_FndAllocFromExpHeapEx + mov r2, r0 + ldr r0, [r2, #0x4] + ldr r2, [r2, #0x8] + bx r12 + .balign 4 +_020AE8A8: .word tempName_NNS_FndAllocFromExpHeapEx + + arm_func_start FUN_020AE8AC +FUN_020AE8AC: ; 0x020AE8AC + mvn r0, #0x0 + bx lr + + arm_func_start FUN_020AE8B4 +FUN_020AE8B4: ; 0x020AE8B4 + mov r0, #0x0 + bx lr + + arm_func_start FUN_020AE8BC +FUN_020AE8BC: ; 0x020AE8BC + mvn r0, #0x0 + bx lr + + arm_func_start FUN_020AE8C4 +FUN_020AE8C4: ; 0x020AE8C4 + mov r0, #0x0 + bx lr + + arm_func_start FUN_020AE8CC +FUN_020AE8CC: ; 0x020AE8CC + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, #0x0 + ldr r3, _020AE914 ; =0x021064E4 + mov r12, lr + mov r2, #0x1 +_020AE8E4: + ldr r1, [r0, r12, lsl #0x2] + add lr, lr, #0x1 + str r1, [r3, #0x0] + ldr r1, [r0, r2, lsl #0x2] + cmp lr, #0x5 + str r1, [r3, #0x4] + add r12, r12, #0x2 + add r3, r3, #0x18 + add r2, r2, #0x2 + blt _020AE8E4 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AE914: .word 0x021064E4 + + arm_func_start FUN_020AE918 +FUN_020AE918: ; 0x020AE918 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, #0x0 + ldr ip, _020AE960 ; =0x021064E4 + mov r3, lr + mov r2, #0x1 +_020AE930: + ldr r1, [r12, #0x0] + add lr, lr, #0x1 + str r1, [r0, r3, lsl #0x2] + ldr r1, [r12, #0x4] + cmp lr, #0x5 + str r1, [r0, r2, lsl #0x2] + add r12, r12, #0x18 + add r3, r3, #0x2 + add r2, r2, #0x2 + blt _020AE930 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AE960: .word 0x021064E4 + + arm_func_start FUN_020AE964 +FUN_020AE964: ; 0x020AE964 + mov r0, #0x0 + bx lr + + arm_func_start FUN_020AE96C +FUN_020AE96C: ; 0x020AE96C + stmdb sp!, {r4-r10,lr} + cmp r0, #0x0 + moveq r7, #0x10 + addne r0, r0, #0xf + bicne r7, r0, #0xf + ldr r0, _020AEADC ; =0x0007FFF0 + cmp r7, r0 + movcs r0, #0x0 + ldmcsia sp!, {r4-r10,pc} +_020AE990: ; 0x020AE990 + cmp r1, #0x0 + beq _020AEA5C + mov lr, r7, lsr #0x1 + mov r6, #0x0 + ldr r2, _020AEAE0 ; =0x02106514 + ldr r3, _020AEAE4 ; =0x021064FC + ldr ip, _020AEAE8 ; =0x021064C8 + mov r0, r6 +_020AE9B0: + ldr r5, [r12, r6, lsl #0x2] + ldr r4, [r5, #0x8] + cmp r4, #0x0 + beq _020AEA48 + ldr r9, [r5, #0x4] + ldr r4, [r5, #0x0] + sub r4, r9, r4 + cmp r4, r7 + blo _020AEA48 + ldrh r4, [r5, #0x10] + cmp r4, #0x0 + beq _020AE9EC + cmp r4, #0x3 + beq _020AE9F4 + b _020AE9FC +_020AE9EC: + mov r4, r3 + b _020AEA00 +_020AE9F4: + mov r4, r2 + b _020AEA00 +_020AE9FC: + mov r4, r0 +_020AEA00: + ldr r9, [r4, #0x8] + cmp r9, #0x0 + beq _020AEA48 + ldr r10, [r4, #0x4] + ldr r9, [r4, #0x0] + sub r9, r10, r9 + cmp r9, lr + blo _020AEA48 + ldr r3, [r5, #0x0] + mov r0, #0x1 + add r2, r3, r7 + str r2, [r5, #0x0] + ldr r2, [r4, #0x0] + add r2, r2, lr + str r2, [r4, #0x0] + ldr r2, [r5, #0x14] + add r8, r3, r2 + b _020AEAB8 +_020AEA48: + add r6, r6, #0x1 + cmp r6, #0x2 + blt _020AE9B0 + mov r0, #0x0 + b _020AEAB8 +_020AEA5C: + ldr r3, _020AEAEC ; =0x021064D0 + mov r5, #0x0 +_020AEA64: + ldr r4, [r3, r5, lsl #0x2] + ldr r0, [r4, #0x8] + cmp r0, #0x0 + beq _020AEAA8 + ldr r2, [r4, #0x4] + ldr r0, [r4, #0x0] + sub r0, r2, r0 + cmp r0, r7 + blo _020AEAA8 + ldr r2, [r4, #0x4] + mov r0, #0x1 + sub r2, r2, r7 + str r2, [r4, #0x4] + ldr r3, [r4, #0x4] + ldr r2, [r4, #0x14] + add r8, r3, r2 + b _020AEAB8 +_020AEAA8: + add r5, r5, #0x1 + cmp r5, #0x5 + blt _020AEA64 + mov r0, #0x0 +_020AEAB8: + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r10,pc} +_020AEAC4: ; 0x020AEAC4 + ldr r0, _020AEAF0 ; =0x0000FFFF + mov r2, r7, lsr #0x4 + and r0, r0, r8, lsr #0x3 + orr r0, r0, r2, lsl #0x10 + orr r0, r0, r1, lsl #0x1f + ldmia sp!, {r4-r10,pc} + .balign 4 +_020AEADC: .word 0x0007FFF0 +_020AEAE0: .word 0x02106514 +_020AEAE4: .word 0x021064FC +_020AEAE8: .word 0x021064C8 +_020AEAEC: .word 0x021064D0 +_020AEAF0: .word 0x0000FFFF + + arm_func_start FUN_020AEAF4 +FUN_020AEAF4: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r0, _020AEB68 ; =0x021CCD48 + mov r6, #0x0 + ldrh r7, [r0, #0x0] + ldr r5, _020AEB6C ; =0x021064E4 + mov lr, r6 + cmp r7, #0x1 + addhi r7, r7, #0x1 + mov r1, r6 + mov r3, r6 + mov r4, #0x1 + mov r0, #0x20000 + mov r2, #0x10000 +_020AEB2C: + cmp r6, r7 + strlt r4, [r5, #0x8] + strge lr, [r5, #0x8] + ldr r12, [r5, #0xc] + add r6, r6, #0x1 + cmp r12, #0x0 + strne r3, [r5, #0x0] + strne r2, [r5, #0x4] + streq r1, [r5, #0x0] + streq r0, [r5, #0x4] + cmp r6, #0x5 + add r5, r5, #0x18 + blt _020AEB2C + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020AEB68: .word 0x021CCD48 +_020AEB6C: .word 0x021064E4 + + arm_func_start FUN_020AEB70 +FUN_020AEB70: ; 0x020AEB70 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + cmp r5, #0x2 + bhi _020AEBA8 + mov r12, #0x1 + mov r0, #0x4 + mov r1, #0x3 + mov r2, #0x2 + mov r3, #0x0 + str r12, [sp, #0x0] + bl FUN_020AEC10 + b _020AEBC4 +_020AEBA8: + mov r12, #0x1 + mov r0, #0x4 + mov r1, #0x3 + mov r2, #0x0 + mov r3, #0x2 + str r12, [sp, #0x0] + bl FUN_020AEC10 +_020AEBC4: + ldr r0, _020AEBFC ; =0x021CCD48 + strh r5, [r0, #0x0] + bl FUN_020AEAF4 +_020AEBD0: ; 0x020AEBD0 + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} +_020AEBDC: ; 0x020AEBDC + ldr r3, _020AEC00 ; =FUN_020AE96C + ldr r1, _020AEC04 ; =0x021064B8 + ldr r2, _020AEC08 ; =FUN_020AE964 + ldr r0, _020AEC0C ; =0x021064BC + str r3, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AEBFC: .word 0x021CCD48 +_020AEC00: .word FUN_020AE96C +_020AEC04: .word 0x021064B8 +_020AEC08: .word FUN_020AE964 +_020AEC0C: .word 0x021064BC + + arm_func_start FUN_020AEC10 +FUN_020AEC10: ; 0x020AEC10 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr lr, [sp, #0x18] + ldr r6, _020AEC58 ; =0x021064E4 + mov r12, #0x18 + mla r7, r0, r12, r6 + ldr r0, _020AEC5C ; =0x021064D0 + mla r5, r1, r12, r6 + mla r4, r2, r12, r6 + mla r2, r3, r12, r6 + mla r1, lr, r12, r6 + str r7, [r0, #0x0] + str r5, [r0, #0x4] + str r4, [r0, #0x8] + str r2, [r0, #0xc] + str r1, [r0, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020AEC58: .word 0x021064E4 +_020AEC5C: .word 0x021064D0 + + arm_func_start FUN_020AEC60 +FUN_020AEC60: + ldr r0, _020AEC78 ; =0x021CCD4C + mov r2, #0x0 + ldr r1, [r0, #0x8] + str r2, [r0, #0x0] + str r1, [r0, #0x4] + bx lr + .balign 4 +_020AEC78: .word 0x021CCD4C + + arm_func_start FUN_020AEC7C +FUN_020AEC7C: ; 0x020AEC7C + ldr r2, [r0, #0x0] + ldr r1, _020AEC94 ; =0x021CCD4C + str r2, [r1, #0x0] + ldr r0, [r0, #0x4] + str r0, [r1, #0x4] + bx lr + .balign 4 +_020AEC94: .word 0x021CCD4C + + arm_func_start FUN_020AEC98 +FUN_020AEC98: ; 0x020AEC98 + ldr r1, _020AECB0 ; =0x021CCD4C + ldr r2, [r1, #0x0] + str r2, [r0, #0x0] + ldr r1, [r1, #0x4] + str r1, [r0, #0x4] + bx lr + .balign 4 +_020AECB0: .word 0x021CCD4C + + arm_func_start FUN_020AECB4 +FUN_020AECB4: ; 0x020AECB4 + mov r0, #0x0 + bx lr + + arm_func_start FUN_020AECBC +FUN_020AECBC: ; 0x020AECBC + stmdb sp!, {r4,lr} + cmp r0, #0x0 + moveq r0, #0x8 + addne r0, r0, #0x7 + ldr ip, _020AEDE8 ; =0x0007FFF8 + bicne r0, r0, #0x7 + cmp r0, r12 + mov r3, #0x0 + movcs r0, #0x0 + ldmcsia sp!, {r4,pc} +_020AECE4: ; 0x020AECE4 + cmp r2, #0x1 + bne _020AED64 + ldr r2, _020AEDEC ; =0x021CCD4C + cmp r1, #0x0 + ldr r12, [r2, #0x0] + andne r2, r12, #0x7 + rsbne r2, r2, #0x8 + andne r4, r2, #0x7 + andeq r2, r12, #0xf + rsbeq r2, r2, #0x10 + andeq r4, r2, #0xf + ldr r2, _020AEDEC ; =0x021CCD4C + add lr, r0, r4 + ldr r2, [r2, #0x4] + sub r2, r2, r12 + cmp r2, lr + blo _020AED5C + cmp r1, #0x0 + add r1, r12, lr + beq _020AED40 + cmp r1, #0x10000 + movhi r12, #0x0 + bhi _020AEDCC +_020AED40: + ldr r1, _020AEDEC ; =0x021CCD4C + add r3, r12, r4 + ldr r2, [r1, #0x0] + mov r12, #0x1 + add r2, r2, lr + str r2, [r1, #0x0] + b _020AEDCC +_020AED5C: + mov r12, #0x0 + b _020AEDCC +_020AED64: + ldr r2, _020AEDEC ; =0x021CCD4C + ldr r12, [r2, #0x4] + cmp r12, r0 + blo _020AEDC8 + sub r2, r12, r0 + cmp r1, #0x0 + andne r4, r2, #0x7 + andeq r4, r2, #0xf + ldr r2, _020AEDEC ; =0x021CCD4C + add lr, r0, r4 + ldr r2, [r2, #0x0] + sub r2, r12, r2 + cmp r2, lr + blo _020AEDC8 + cmp r1, #0x0 + beq _020AEDB0 + cmp r12, #0x10000 + movhi r12, #0x0 + bhi _020AEDCC +_020AEDB0: + ldr r1, _020AEDEC ; =0x021CCD4C + mov r12, #0x1 + ldr r2, [r1, #0x4] + sub r3, r2, lr + str r3, [r1, #0x4] + b _020AEDCC +_020AEDC8: + mov r12, #0x0 +_020AEDCC: + cmp r12, #0x0 + ldrne r1, _020AEDF0 ; =0x0000FFFF + movne r2, r0, lsr #0x3 + andne r0, r1, r3, lsr #0x3 + orrne r0, r0, r2, lsl #0x10 + moveq r0, #0x0 + ldmia sp!, {r4,pc} + .balign 4 +_020AEDE8: .word 0x0007FFF8 +_020AEDEC: .word 0x021CCD4C +_020AEDF0: .word 0x0000FFFF + + arm_func_start FUN_020AEDF4 +FUN_020AEDF4: ; 0x020AEDF4 + stmdb sp!, {r4,lr} + ldr r2, _020AEE2C ; =0x021CCD4C + mov r4, r1 + str r0, [r2, #0x8] + bl FUN_020AEC60 +_020AEE08: ; 0x020AEE08 + cmp r4, #0x0 + ldmeqia sp!, {r4,pc} +_020AEE10: ; 0x020AEE10 + ldr r3, _020AEE30 ; =FUN_020AECBC + ldr r1, _020AEE34 ; =0x021064C0 + ldr r2, _020AEE38 ; =FUN_020AECB4 + ldr r0, _020AEE3C ; =0x021064C4 + str r3, [r1, #0x0] + str r2, [r0, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_020AEE2C: .word 0x021CCD4C +_020AEE30: .word FUN_020AECBC +_020AEE34: .word 0x021064C0 +_020AEE38: .word FUN_020AECB4 +_020AEE3C: .word 0x021064C4 + + arm_func_start FUN_020AEE40 +FUN_020AEE40: ; 0x020AEE40 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r5, _020AEEB4 ; =0x021CCD58 + mov r9, r0 + mov r0, r5 + mov r8, r1 + mov r7, r2 + mov r6, r3 + bl FUN_020AF2F4 +_020AEE64: ; 0x020AEE64 + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r9,pc} +_020AEE74: ; 0x020AEE74 + mov r0, r5 + bl FUN_020AEF78 + mov r4, r0 + str r9, [r4, #0x0] + str r7, [r4, #0x4] + str r8, [r4, #0x8] + mov r0, r5 + str r6, [r4, #0xc] + bl FUN_020AEF98 + ldr r2, [r5, #0x10] + ldr r1, [r4, #0xc] + mov r0, #0x1 + add r1, r2, r1 + str r1, [r5, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020AEEB4: .word 0x021CCD58 + + arm_func_start FUN_020AEEB8 +FUN_020AEEB8: ; 0x020AEEB8 + stmdb sp!, {r4-r6,lr} + ldr r6, _020AEF18 ; =0x021CCD58 + mov r0, r6 + bl FUN_020AEF88 + mov r5, r0 + mov r0, r6 + bl FUN_020AEF3C +_020AEED4: ; 0x020AEED4 + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020AEEDC: ; 0x020AEEDC + add r4, r6, #0x10 +_020AEEE0: + mov r0, r5 + bl FUN_020AEFF0 + ldr r2, [r4, #0x0] + ldr r1, [r5, #0xc] + mov r0, r6 + sub r1, r2, r1 + str r1, [r4, #0x0] + bl FUN_020AEF88 + mov r5, r0 + mov r0, r6 + bl FUN_020AEF3C +_020AEF0C: ; 0x020AEF0C + cmp r0, #0x0 + bne _020AEEE0 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020AEF18: .word 0x021CCD58 + + arm_func_start FUN_020AEF1C +FUN_020AEF1C: ; 0x020AEF1C + ldr r2, _020AEF34 ; =0x021CCD58 + ldr ip, _020AEF38 ; =FUN_020AEFD4 + str r0, [r2, #0x0] + mov r0, r2 + str r1, [r2, #0x4] + bx r12 + .balign 4 +_020AEF34: .word 0x021CCD58 +_020AEF38: .word FUN_020AEFD4 + + arm_func_start FUN_020AEF3C +FUN_020AEF3C: + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020AF2E0 +_020AEF48: ; 0x020AEF48 + cmp r0, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,pc} +_020AEF54: ; 0x020AEF54 + ldrh r1, [r4, #0x8] + mov r0, r4 + bl FUN_020AF30C + strh r0, [r4, #0x8] + ldrh r1, [r4, #0xc] + mov r0, #0x1 + sub r1, r1, #0x1 + strh r1, [r4, #0xc] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020AEF78 +FUN_020AEF78: ; 0x020AEF78 + ldrh r1, [r0, #0xa] + ldr r0, [r0, #0x0] + add r0, r0, r1, lsl #0x4 + bx lr + + arm_func_start FUN_020AEF88 +FUN_020AEF88: ; 0x020AEF88 + ldrh r1, [r0, #0x8] + ldr r0, [r0, #0x0] + add r0, r0, r1, lsl #0x4 + bx lr + + arm_func_start FUN_020AEF98 +FUN_020AEF98: ; 0x020AEF98 + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020AF2F4 +_020AEFA4: ; 0x020AEFA4 + cmp r0, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,pc} +_020AEFB0: ; 0x020AEFB0 + ldrh r1, [r4, #0xa] + mov r0, r4 + bl FUN_020AF30C + strh r0, [r4, #0xa] + ldrh r1, [r4, #0xc] + mov r0, #0x1 + add r1, r1, #0x1 + strh r1, [r4, #0xc] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020AEFD4 +FUN_020AEFD4: ; 0x020AEFD4 + mov r2, #0x0 + strh r2, [r0, #0xa] + ldrh r1, [r0, #0xa] + strh r1, [r0, #0x8] + strh r2, [r0, #0xc] + str r2, [r0, #0x10] + bx lr + + arm_func_start FUN_020AEFF0 +FUN_020AEFF0: ; 0x020AEFF0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r3, [r5, #0x0] + ldr r2, _020AF02C ; =0x020FF7D4 + ldr r0, [r5, #0x4] + ldr r1, [r5, #0xc] + ldr r4, [r2, r3, lsl #0x2] + bl DC_FlushRange + ldr r0, [r5, #0x4] + ldr r1, [r5, #0x8] + ldr r2, [r5, #0xc] + blx r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AF02C: .word 0x020FF7D4 diff --git a/global.inc b/global.inc index 622c7c7f2..cd19b8ed9 100644 --- a/global.inc +++ b/global.inc @@ -221,7 +221,7 @@ .extern FUN_020C50B8 .extern FUN_020C5288 .extern FUN_020C53C8 -.extern FUN_020C5588 +.extern VEC_DotProduct .extern FUN_020C5600 .extern FUN_020C5634 .extern FUN_020C5668 @@ -3302,3 +3302,131 @@ .extern SDK_STATIC_BSS_START .extern SDK_STATIC_BSS_END .extern OS_IrqHandler + +.extern GX_BeginLoadTexPltt +.extern GX_LoadTexPltt +.extern GX_EndLoadTexPltt +.extern GX_BeginLoadTex +.extern GX_LoadTex +.extern GX_EndLoadTex +.extern MI_CpuFill8 +.extern _s32_div_f +.extern MTX_Identity43_ +.extern VEC_DotProduct +.extern VEC_CrossProduct +.extern MTX_Concat43 +.extern MTX_Scale43_ +.extern G3_LoadMtx43 +.extern G3_MultMtx43 +.extern MI_Copy36B +.extern MTX_MultVec33 +.extern MTX_MultVec43 +.extern VEC_Fx16CrossProduct +.extern _u32_div_f +.extern VEC_Fx16Normalize +.extern VEC_Fx16DotProduct +.extern OSi_UnlockVram +.extern PXI_SetFifoRecvCallback +.extern PXI_Init +.extern PXI_IsCallbackReady +.extern OS_DisableInterrupts +.extern OS_RestoreInterrupts +.extern PXI_SendWordByFifo +.extern OS_GetLockID +.extern OSi_TryLockVram +.extern OS_FreeToHeap +.extern OS_AllocFromHeap +.extern MATH_CalcSHA1 +.extern MI_CpuCopy8 +.extern memcmp +.extern DC_StoreRange +.extern DC_InvalidateRange +.extern OS_GetTick +.extern _ll_udiv +.extern MATH_CalcCRC16 +.extern MATHi_CRC16InitTableRev +.extern OS_Terminate +.extern MIi_CpuClear16 +.extern RTC_Init +.extern RTC_GetDate +.extern RTC_GetTime +.extern RTC_ConvertDateTimeToSecond +.extern OS_IsTickAvailable +.extern OS_GetMacAddress +.extern MATHi_CRC32InitTableRev +.extern MATH_CalcCRC32 +.extern OS_GetLowEntropyData +.extern OS_SNPrintf +.extern MATHi_CRC8InitTable +.extern MATH_CalcCRC8 +.extern OS_ReadMessage +.extern OS_DisableScheduler +.extern OS_ReceiveMessage +.extern OS_SendMessage +.extern OS_EnableScheduler +.extern OS_InitMessageQueue +.extern OS_InitMutex +.extern OS_CreateThread +.extern OS_WakeupThreadDirect +.extern OS_LockMutex +.extern OS_UnlockMutex +.extern OS_WakeupThread +.extern OS_SleepThread +.extern OS_Sleep +.extern OS_GetProcMode +.extern OS_TryLockMutex +.extern OS_JoinThread +.extern OS_RescheduleThread +.extern STD_CopyLString +.extern memmove +.extern OS_YieldThread +.extern OS_IsThreadTerminated +.extern OS_SetThreadPriority +.extern OS_DestroyThread +.extern strlen +.extern strcmp +.extern OS_GetThreadPriority +.extern WM_StartConnectEx +.extern WM_PowerOff +.extern WM_Disconnect +.extern WM_StartDCF +.extern WM_StartScanEx +.extern WM_EndScan +.extern WM_PowerOn +.extern WM_Finish +.extern WM_Disable +.extern WM_SetBeaconIndication +.extern WM_SetWEPKeyEx +.extern WM_Reset +.extern OS_CancelAlarm +.extern OS_SetAlarm +.extern WM_GetDispersionScanPeriod +.extern WMi_GetStatusAddress +.extern WM_EndDCF +.extern WM_SetLifeTime +.extern WM_Init +.extern WM_GetAllowedChannel +.extern WM_SetIndCallback +.extern WM_Enable +.extern OS_InitTick +.extern OS_IsAlarmAvailable +.extern OS_InitAlarm +.extern OS_CreateAlarm +.extern MIi_CpuCopyFast +.extern WM_SetDCFData +.extern MATH_MD5GetHash +.extern MATH_MD5Update +.extern MATH_MD5Init + +.extern FUN_021EAE90 + +.extern MATH_CountPopulation +.extern MIi_CpuClearFast +.extern OS_GetTickLo +.extern OS_GetTick +.extern FUN_021EB044 +.extern MIi_CpuClear32 +.extern FUN_020AF2F4 +.extern FUN_020AF2E0 +.extern FUN_020AF30C +.extern DC_FlushRange diff --git a/pokediamond.lcf b/pokediamond.lcf index 19b80331e..994c7d142 100644 --- a/pokediamond.lcf +++ b/pokediamond.lcf @@ -387,6 +387,7 @@ SECTIONS { unk_02038C78.o (.text) scrcmd.o (.text) unk_02046030.o (.text) + unk_0208AC14.o (.text) rom1.5.o (.text) unk_020C9C0C.o (.text) PM_arm9.o (.text) diff --git a/undefined_syms.txt b/undefined_syms.txt index 9282ff4aa..723142167 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -192,7 +192,7 @@ FUN_020C504C = 0x020C504C; FUN_020C50B8 = 0x020C50B8; FUN_020C5288 = 0x020C5288; FUN_020C53C8 = 0x020C53C8; -FUN_020C5588 = 0x020C5588; +VEC_DotProduct = 0x020C5588; FUN_020C5600 = 0x020C5600; FUN_020C5634 = 0x020C5634; FUN_020C5668 = 0x020C5668; @@ -737,3 +737,29 @@ SDK_AUTOLOAD_DTCM_START = 0x027E0000; SDK_STATIC_BSS_END = 0x021D74E0; gUnk027FFC20 = 0x027FFC20; FUN_02000B60 = 0x02000B60; + +FUN_021EAE90 = 0x021EAE90; +FUN_021EB044 = 0x021EB044; + +FUN_020AF2E0 = 0x020AF2E0; +FUN_020AF2F4 = 0x020AF2F4; +FUN_020AF30C = 0x020AF30C; + +G3_LoadMtx43 = 0x020c7954; +G3_MultMtx43 = 0x020c7938; +MTX_Concat43 = 0x020c43d0; +MTX_MultVec33 = 0x020c3f88; +MTX_MultVec43 = 0x020c431c; +MTX_Scale43_ = 0x020c42c8; +VEC_CrossProduct = 0x020c549c; +VEC_Fx16CrossProduct = 0x020c5430; +VEC_Fx16DotProduct = 0x020c5538; +VEC_Fx16Normalize = 0x020c5134; + +GX_BeginLoadTex = 0x020c9a98; +GX_BeginLoadTexPltt = 0x020c987c; +GX_EndLoadTex = 0x020c98c4; +GX_EndLoadTexPltt = 0x020c97b0; +GX_LoadTex = 0x020c9934; +GX_LoadTexPltt = 0x020c9808; +MTX_Identity43_ = 0x020c426c; From 4602fa7d806118f124a4ff5b56f4a5190b30d08c Mon Sep 17 00:00:00 2001 From: Demki Date: Fri, 24 Apr 2020 18:51:17 +0300 Subject: [PATCH 10/23] finish dism of rom1.5.s --- asm/rom1.5.s | 11 - asm/unk_020AF030.s | 32087 +++++++++++++++++++++++++++++++++++++++++++ global.inc | 104 + pokediamond.lcf | 2 +- 4 files changed, 32192 insertions(+), 12 deletions(-) delete mode 100644 asm/rom1.5.s create mode 100644 asm/unk_020AF030.s diff --git a/asm/rom1.5.s b/asm/rom1.5.s deleted file mode 100644 index bdb9fbca9..000000000 --- a/asm/rom1.5.s +++ /dev/null @@ -1,11 +0,0 @@ -/* rom1.5.s TODO: Disassemble */ - .include "asm/macros.inc" - .section .text - - arm_func_start FUN_020AF030 -FUN_020AF030: - .incbin "baserom.nds", 0xB3030, 0x1ABDC - - -; _020AF02C = 0xB302C -; should end on 0xCDC0C = 020C9C0C diff --git a/asm/unk_020AF030.s b/asm/unk_020AF030.s new file mode 100644 index 000000000..10c6ffd82 --- /dev/null +++ b/asm/unk_020AF030.s @@ -0,0 +1,32087 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start GXS_LoadOBJ +GXS_LoadOBJ: + ldr ip, _020AF038 ; =GXS_LoadOBJ2 + bx r12 + .balign 4 +_020AF038: .word GXS_LoadOBJ2 + + arm_func_start GXS_LoadOAM +GXS_LoadOAM: ; 0x020AF03C + ldr ip, _020AF044 ; =GXS_LoadOAM_2 + bx r12 + .balign 4 +_020AF044: .word GXS_LoadOAM_2 + + arm_func_start FUN_020AF048 +FUN_020AF048: ; 0x020AF048 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl GXS_BeginLoadBGExtPltt + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl GXS_LoadBGExtPltt + bl GXS_EndLoadBGExtPltt + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020AF074 +FUN_020AF074: ; 0x020AF074 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl GXS_BeginLoadOBJExtPltt + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl GXS_LoadOBJExtPltt + bl GXS_EndLoadOBJExtPltt + ldmia sp!, {r4-r6,pc} + + arm_func_start GXS_LoadBGPltt +GXS_LoadBGPltt: ; 0x020AF0A0 + ldr ip, _020AF0A8 ; =GXS_LoadBGPltt_2 + bx r12 + .balign 4 +_020AF0A8: .word GXS_LoadBGPltt_2 + + arm_func_start GXS_LoadOBJPltt +GXS_LoadOBJPltt: ; 0x020AF0AC + ldr ip, _020AF0B4 ; =GXS_LoadOBJPltt_2 + bx r12 + .balign 4 +_020AF0B4: .word GXS_LoadOBJPltt_2 + + arm_func_start GXS_LoadBG3Scr +GXS_LoadBG3Scr: ; 0x020AF0B8 + ldr ip, _020AF0C0 ; =GXS_LoadBG3Scr_3 + bx r12 + .balign 4 +_020AF0C0: .word GXS_LoadBG3Scr_3 + + arm_func_start GXS_LoadBG2Scr +GXS_LoadBG2Scr: ; 0x020AF0C4 + ldr ip, _020AF0CC ; =GXS_LoadBG2Scr_3 + bx r12 + .balign 4 +_020AF0CC: .word GXS_LoadBG2Scr_3 + + arm_func_start GXS_LoadBG3Scr_2 +GXS_LoadBG3Scr_2: ; 0x020AF0D0 + ldr ip, _020AF0D8 ; =GXS_LoadBG3Scr_3 + bx r12 + .balign 4 +_020AF0D8: .word GXS_LoadBG3Scr_3 + + arm_func_start GXS_LoadBG2Scr_2 +GXS_LoadBG2Scr_2: ; 0x020AF0DC + ldr ip, _020AF0E4 ; =GXS_LoadBG2Scr_3 + bx r12 + .balign 4 +_020AF0E4: .word GXS_LoadBG2Scr_3 + + arm_func_start GXS_LoadBG1Scr +GXS_LoadBG1Scr: ; 0x020AF0E8 + ldr ip, _020AF0F0 ; =GXS_LoadBG1Scr_2 + bx r12 + .balign 4 +_020AF0F0: .word GXS_LoadBG1Scr_2 + + arm_func_start GXS_LoadBG0Scr +GXS_LoadBG0Scr: ; 0x020AF0F4 + ldr ip, _020AF0FC ; =GXS_LoadBG0Scr_2 + bx r12 + .balign 4 +_020AF0FC: .word GXS_LoadBG0Scr_2 + + arm_func_start GXS_LoadBG3Char +GXS_LoadBG3Char: ; 0x020AF100 + ldr ip, _020AF108 ; =GXS_LoadBG3Char_2 + bx r12 + .balign 4 +_020AF108: .word GXS_LoadBG3Char_2 + + arm_func_start GXS_LoadBG2Char +GXS_LoadBG2Char: ; 0x020AF10C + ldr ip, _020AF114 ; =GXS_LoadBG2Char_2 + bx r12 + .balign 4 +_020AF114: .word GXS_LoadBG2Char_2 + + arm_func_start GXS_LoadBG1Char +GXS_LoadBG1Char: ; 0x020AF118 + ldr ip, _020AF120 ; =GXS_LoadBG1Char_2 + bx r12 + .balign 4 +_020AF120: .word GXS_LoadBG1Char_2 + + arm_func_start GXS_LoadBG0Char +GXS_LoadBG0Char: ; 0x020AF124 + ldr ip, _020AF12C ; =GXS_LoadBG0Char_2 + bx r12 + .balign 4 +_020AF12C: .word GXS_LoadBG0Char_2 + + arm_func_start GX_LoadOBJ +GX_LoadOBJ: ; 0x020AF130 + ldr ip, _020AF138 ; =GX_LoadOBJ2 + bx r12 + .balign 4 +_020AF138: .word GX_LoadOBJ2 + + arm_func_start GX_LoadOAM +GX_LoadOAM: ; 0x020AF13C + ldr ip, _020AF144 ; =GX_LoadOAM_2 + bx r12 + .balign 4 +_020AF144: .word GX_LoadOAM_2 + + arm_func_start FUN_020AF148 +FUN_020AF148: ; 0x020AF148 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl GX_BeginLoadBGExtPltt + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl GX_LoadBGExtPltt + bl GX_EndLoadBGExtPltt + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020AF174 +FUN_020AF174: ; 0x020AF174 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl GX_BeginLoadOBJExtPltt + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl GX_LoadOBJExtPltt + bl GX_EndLoadOBJExtPltt + ldmia sp!, {r4-r6,pc} + + arm_func_start GX_LoadBGPltt +GX_LoadBGPltt: ; 0x020AF1A0 + ldr ip, _020AF1A8 ; =GX_LoadBGPltt_2 + bx r12 + .balign 4 +_020AF1A8: .word GX_LoadBGPltt_2 + + arm_func_start GX_LoadOBJPltt +GX_LoadOBJPltt: ; 0x020AF1AC + ldr ip, _020AF1B4 ; =GX_LoadOBJPltt_2 + bx r12 + .balign 4 +_020AF1B4: .word GX_LoadOBJPltt_2 + + arm_func_start GX_LoadBG3Scr +GX_LoadBG3Scr: ; 0x020AF1B8 + ldr ip, _020AF1C0 ; =GX_LoadBG3Scr_3 + bx r12 + .balign 4 +_020AF1C0: .word GX_LoadBG3Scr_3 + + arm_func_start GX_LoadBG2Scr +GX_LoadBG2Scr: ; 0x020AF1C4 + ldr ip, _020AF1CC ; =GX_LoadBG2Scr_3 + bx r12 + .balign 4 +_020AF1CC: .word GX_LoadBG2Scr_3 + + arm_func_start GX_LoadBG3Scr_2 +GX_LoadBG3Scr_2: ; 0x020AF1D0 + ldr ip, _020AF1D8 ; =GX_LoadBG3Scr_3 + bx r12 + .balign 4 +_020AF1D8: .word GX_LoadBG3Scr_3 + + arm_func_start GX_LoadBG2Scr_2 +GX_LoadBG2Scr_2: ; 0x020AF1DC + ldr ip, _020AF1E4 ; =GX_LoadBG2Scr_3 + bx r12 + .balign 4 +_020AF1E4: .word GX_LoadBG2Scr_3 + + arm_func_start GX_LoadBG1Scr +GX_LoadBG1Scr: ; 0x020AF1E8 + ldr ip, _020AF1F0 ; =GX_LoadBG1Scr_2 + bx r12 + .balign 4 +_020AF1F0: .word GX_LoadBG1Scr_2 + + arm_func_start GX_LoadBG0Scr +GX_LoadBG0Scr: ; 0x020AF1F4 + ldr ip, _020AF1FC ; =GX_LoadBG0Scr_2 + bx r12 + .balign 4 +_020AF1FC: .word GX_LoadBG0Scr_2 + + arm_func_start GX_LoadBG3Char +GX_LoadBG3Char: ; 0x020AF200 + ldr ip, _020AF208 ; =GX_LoadBG3Char_2 + bx r12 + .balign 4 +_020AF208: .word GX_LoadBG3Char_2 + + arm_func_start GX_LoadBG2Char +GX_LoadBG2Char: ; 0x020AF20C + ldr ip, _020AF214 ; =GX_LoadBG2Char_2 + bx r12 + .balign 4 +_020AF214: .word GX_LoadBG2Char_2 + + arm_func_start GX_LoadBG1Char +GX_LoadBG1Char: ; 0x020AF218 + ldr ip, _020AF220 ; =GX_LoadBG1Char_2 + bx r12 + .balign 4 +_020AF220: .word GX_LoadBG1Char_2 + + arm_func_start GX_LoadBG0Char +GX_LoadBG0Char: ; 0x020AF224 + ldr ip, _020AF22C ; =GX_LoadBG0Char_2 + bx r12 + .balign 4 +_020AF22C: .word GX_LoadBG0Char_2 + + arm_func_start FUN_020AF230 +FUN_020AF230: ; 0x020AF230 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r2 + bl GX_BeginLoadClearImage + mov r0, r5 + mov r1, r4 + bl GX_LoadClearImageDepth + bl GX_EndLoadClearImage + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020AF25C +FUN_020AF25C: ; 0x020AF25C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r2 + bl GX_BeginLoadClearImage + mov r0, r5 + mov r1, r4 + bl GX_LoadClearImageColor + bl GX_EndLoadClearImage + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020AF288 +FUN_020AF288: ; 0x020AF288 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl GX_BeginLoadTexPltt + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl GX_LoadTexPltt + bl GX_EndLoadTexPltt + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020AF2B4 +FUN_020AF2B4: ; 0x020AF2B4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl GX_BeginLoadTex + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl GX_LoadTex + bl GX_EndLoadTex + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020AF2E0 +FUN_020AF2E0: ; 0x020AF2E0 + ldrh r0, [r0, #0xc] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + bx lr + + arm_func_start FUN_020AF2F4 +FUN_020AF2F4: ; 0x020AF2F4 + ldrh r1, [r0, #0xc] + ldr r0, [r0, #0x4] + cmp r1, r0 + moveq r0, #0x1 + movne r0, #0x0 + bx lr + + arm_func_start FUN_020AF30C +FUN_020AF30C: ; 0x020AF30C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r0 + add r0, r1, #0x1 + ldr r1, [r2, #0x4] + bl _u32_div_f + mov r0, r1, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020AF334 +FUN_020AF334: + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x10 + add r3, r2, r3 + str r2, [sp, #0x0] + str r2, [sp, #0x8] + str r3, [sp, #0x4] + str r3, [sp, #0xc] + ldr r3, [r0, #0x0] + add r12, sp, #0x0 + cmp r3, #0x0 + beq _020AF418 + mov r6, #0x0 +_020AF364: + ldr r5, [r3, #0x0] + ldr r4, [r12, #0x4] + ldr r2, [r3, #0xc] + cmp r5, r4 + bne _020AF3B8 + ldr r4, [r3, #0x4] + add r4, r5, r4 + str r4, [sp, #0xc] + ldr r4, [r3, #0x8] + cmp r4, #0x0 + strne r2, [r4, #0xc] + streq r2, [r0, #0x0] + cmp r2, #0x0 + strne r4, [r2, #0x8] + ldr r4, [r1, #0x0] + cmp r4, #0x0 + strne r3, [r4, #0x8] + ldr r4, [r1, #0x0] + str r4, [r3, #0xc] + str r6, [r3, #0x8] + str r3, [r1, #0x0] +_020AF3B8: + ldr r5, [r3, #0x0] + ldr lr, [r3, #0x4] + ldr r4, [r12, #0x0] + add lr, r5, lr + cmp r4, lr + bne _020AF40C + str r5, [sp, #0x8] + ldr r5, [r3, #0x8] + ldr r4, [r3, #0xc] + cmp r5, #0x0 + strne r4, [r5, #0xc] + streq r4, [r0, #0x0] + cmp r4, #0x0 + strne r5, [r4, #0x8] + ldr lr, [r1, #0x0] + cmp lr, #0x0 + strne r3, [lr, #0x8] + ldr lr, [r1, #0x0] + str lr, [r3, #0xc] + str r6, [r3, #0x8] + str r3, [r1, #0x0] +_020AF40C: + mov r3, r2 + cmp r2, #0x0 + bne _020AF364 +_020AF418: + ldr r4, [r1, #0x0] + cmp r4, #0x0 + ldrne r2, [r4, #0xc] + strne r2, [r1, #0x0] + cmp r4, #0x0 + addeq sp, sp, #0x10 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020AF438: ; 0x020AF438 + ldr r2, [sp, #0x8] + mov r1, #0x0 + str r2, [r4, #0x0] + ldr r3, [sp, #0xc] + ldr r2, [sp, #0x8] + sub r2, r3, r2 + str r2, [r4, #0x4] + str r1, [r4, #0x8] + str r1, [r4, #0xc] + ldr r1, [r0, #0x0] + cmp r1, #0x0 + strne r4, [r1, #0x8] + ldr r2, [r0, #0x0] + mov r1, #0x0 + str r2, [r4, #0xc] + str r1, [r4, #0x8] + str r4, [r0, #0x0] + mov r0, #0x1 + add sp, sp, #0x10 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020AF488 +FUN_020AF488: + stmdb sp!, {r4-r10,lr} + ldr r4, [r0, #0x0] + ldr r9, [sp, #0x20] + cmp r4, #0x0 + mov r5, #0x0 + beq _020AF4EC + sub r12, r9, #0x1 + mvn lr, r12 +_020AF4A8: + cmp r9, #0x1 + ldrls r8, [r4, #0x0] + movls r6, r5 + movls r7, r3 + bls _020AF4D0 + ldr r7, [r4, #0x0] + add r6, r7, r12 + and r8, lr, r6 + sub r6, r8, r7 + add r7, r3, r6 +_020AF4D0: + ldr r10, [r4, #0x4] + cmp r10, r7 + movcs r5, r4 + bhs _020AF4EC + ldr r4, [r4, #0xc] + cmp r4, #0x0 + bne _020AF4A8 +_020AF4EC: + cmp r5, #0x0 + beq _020AF5B8 + cmp r6, #0x0 + beq _020AF54C + ldr r9, [r1, #0x0] + cmp r9, #0x0 + ldrne r3, [r9, #0xc] + strne r3, [r1, #0x0] + cmp r9, #0x0 + beq _020AF5B8 + ldr r4, [r5, #0x0] + mov r3, #0x0 + str r4, [r9, #0x0] + str r6, [r9, #0x4] + str r3, [r9, #0x8] + str r3, [r9, #0xc] + ldr r3, [r0, #0x0] + cmp r3, #0x0 + strne r9, [r3, #0x8] + ldr r4, [r0, #0x0] + mov r3, #0x0 + str r4, [r9, #0xc] + str r3, [r9, #0x8] + str r9, [r0, #0x0] +_020AF54C: + ldr r3, [r5, #0x4] + sub r3, r3, r7 + str r3, [r5, #0x4] + ldr r3, [r5, #0x0] + add r3, r3, r7 + str r3, [r5, #0x0] + ldr r3, [r5, #0x4] + cmp r3, #0x0 + bne _020AF5AC + ldr r4, [r5, #0x8] + ldr r3, [r5, #0xc] + cmp r4, #0x0 + strne r3, [r4, #0xc] + streq r3, [r0, #0x0] + cmp r3, #0x0 + strne r4, [r3, #0x8] + ldr r0, [r1, #0x0] + cmp r0, #0x0 + strne r5, [r0, #0x8] + ldr r3, [r1, #0x0] + mov r0, #0x0 + str r3, [r5, #0xc] + str r0, [r5, #0x8] + str r5, [r1, #0x0] +_020AF5AC: + str r8, [r2, #0x0] + mov r0, #0x1 + ldmia sp!, {r4-r10,pc} +_020AF5B8: + mov r0, #0x0 + str r0, [r2, #0x0] + ldmia sp!, {r4-r10,pc} + + arm_func_start FUN_020AF5C4 +FUN_020AF5C4: + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r12, #0x0 + str r12, [sp, #0x0] + bl FUN_020AF488 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020AF5E0 +FUN_020AF5E0: ; 0x020AF5E0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr lr, [r1, #0x0] + cmp lr, #0x0 + ldrne r12, [lr, #0xc] + strne r12, [r1, #0x0] + cmp lr, #0x0 + beq _020AF640 + str r2, [lr, #0x0] + str r3, [lr, #0x4] + mov r1, #0x0 + str r1, [lr, #0x8] + str r1, [lr, #0xc] + ldr r1, [r0, #0x0] + add sp, sp, #0x4 + cmp r1, #0x0 + strne lr, [r1, #0x8] + ldr r2, [r0, #0x0] + mov r1, #0x0 + str r2, [lr, #0xc] + str r1, [lr, #0x8] + str lr, [r0, #0x0] + mov r0, #0x1 + ldmia sp!, {pc} +_020AF640: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020AF64C +FUN_020AF64C: ; 0x020AF64C + stmdb sp!, {r4,lr} + subs lr, r1, #0x1 + mov r2, #0x0 + beq _020AF684 + mov r4, r0 +_020AF660: + add r12, r2, #0x1 + add r2, r0, r2, lsl #0x4 + add r3, r0, r12, lsl #0x4 + str r3, [r2, #0xc] + str r4, [r3, #0x8] + mov r2, r12 + cmp r12, lr + add r4, r4, #0x10 + blo _020AF660 +_020AF684: + mov r2, #0x0 + str r2, [r0, #0x8] + add r1, r0, r1, lsl #0x4 + str r2, [r1, #-0x4] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020AF698 +FUN_020AF698: ; 0x020AF698 + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + + arm_func_start FUN_020AF6A4 +FUN_020AF6A4: ; 0x020AF6A4 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x30 + ldr r6, _020AF884 ; =0x020FF864 + add r5, sp, #0x0 + ldmia r6!, {r0-r3} + mov r12, r5 + stmia r5!, {r0-r3} + ldmia r6!, {r0-r3} + stmia r5!, {r0-r3} + ldr r4, _020AF888 ; =0x021CCD6C + ldmia r6, {r0-r3} + stmia r5, {r0-r3} + ldr lr, [r4, #0x10] + ldr r1, [r4, #0xc] + add r0, lr, lr, lsr #0x1 + mov r4, lr, lsr #0x1 + sub r0, r1, r0 + mov r3, #0x0 +_020AF6EC: + cmp r3, #0x0 + beq _020AF6FC + cmp r3, #0x2 + bne _020AF734 +_020AF6FC: + ldr r2, [r12, #0x0] + cmp r2, #0x0 + beq _020AF734 + cmp lr, #0x0 + beq _020AF734 + ldr r1, [r12, #0x8] + cmp r2, lr + movhi r2, lr + add r1, r1, r2 + str r1, [r12, #0x8] + ldr r1, [r12, #0x0] + sub lr, lr, r2 + sub r1, r1, r2 + str r1, [r12, #0x0] +_020AF734: + add r3, r3, #0x1 + cmp r3, #0x4 + add r12, r12, #0xc + blo _020AF6EC + ldr r1, [sp, #0xc] + add r5, sp, #0x0 + sub r1, r1, r4 + str r1, [sp, #0xc] + mov r3, #0x0 +_020AF758: + ldr r2, [r5, #0x0] + cmp r2, #0x0 + beq _020AF790 + cmp r0, #0x0 + beq _020AF790 + ldr r1, [r5, #0x4] + cmp r2, r0 + movhi r2, r0 + add r1, r1, r2 + str r1, [r5, #0x4] + ldr r1, [r5, #0x0] + sub r0, r0, r2 + sub r1, r1, r2 + str r1, [r5, #0x0] +_020AF790: + add r3, r3, #0x1 + cmp r3, #0x4 + add r5, r5, #0xc + blo _020AF758 + ldr r0, _020AF888 ; =0x021CCD6C + bl FUN_020AF698 + ldr r0, _020AF88C ; =0x021CCD70 + bl FUN_020AF698 + ldr r0, _020AF888 ; =0x021CCD6C + ldr r1, [r0, #0x18] + ldr r0, [r0, #0x14] + mov r1, r1, lsr #0x4 + bl FUN_020AF64C + ldr r3, [sp, #0x8] + ldr r1, _020AF888 ; =0x021CCD6C + cmp r3, #0x0 + str r0, [r1, #0x8] + beq _020AF7E8 + ldr r0, _020AF88C ; =0x021CCD70 + ldr r1, _020AF890 ; =0x021CCD74 + mov r2, #0x0 + bl FUN_020AF5E0 +_020AF7E8: + ldr r3, [sp, #0x4] + ldr r2, [sp, #0x8] + cmp r3, #0x0 + beq _020AF804 + ldr r0, _020AF888 ; =0x021CCD6C + ldr r1, _020AF890 ; =0x021CCD74 + bl FUN_020AF5E0 +_020AF804: + ldr r3, [sp, #0x20] + cmp r3, #0x0 + beq _020AF820 + ldr r0, _020AF88C ; =0x021CCD70 + ldr r1, _020AF890 ; =0x021CCD74 + mov r2, #0x40000 + bl FUN_020AF5E0 +_020AF820: + ldr r3, [sp, #0x1c] + ldr r0, [sp, #0x20] + cmp r3, #0x0 + add r2, r0, #0x40000 + beq _020AF840 + ldr r0, _020AF888 ; =0x021CCD6C + ldr r1, _020AF890 ; =0x021CCD74 + bl FUN_020AF5E0 +_020AF840: + ldr r3, [sp, #0x28] + cmp r3, #0x0 + beq _020AF85C + ldr r0, _020AF888 ; =0x021CCD6C + ldr r1, _020AF890 ; =0x021CCD74 + mov r2, #0x60000 + bl FUN_020AF5E0 +_020AF85C: + ldr r3, [sp, #0x10] + cmp r3, #0x0 + addeq sp, sp, #0x30 + ldmeqia sp!, {r4-r6,pc} +_020AF86C: ; 0x020AF86C + ldr r0, _020AF888 ; =0x021CCD6C + ldr r1, _020AF890 ; =0x021CCD74 + add r2, r4, #0x20000 + bl FUN_020AF5E0 + add sp, sp, #0x30 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020AF884: .word 0x020FF864 +_020AF888: .word 0x021CCD6C +_020AF88C: .word 0x021CCD70 +_020AF890: .word 0x021CCD74 + + arm_func_start FUN_020AF894 +FUN_020AF894: ; 0x020AF894 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020AF908 ; =0x7FFF0000 + ldr r1, _020AF90C ; =0x0000FFFF + and r2, r0, r2 + and r3, r0, r1 + mov r1, r2, lsr #0x10 + and r0, r0, #0x80000000 + mov r2, r3, lsl #0x3 + movs r3, r1, lsl #0x4 + mov r0, r0, lsr #0x1f + beq _020AF8FC + cmp r0, #0x0 + beq _020AF8DC + ldr r0, _020AF910 ; =0x021CCD70 + ldr r1, _020AF914 ; =0x021CCD74 + bl FUN_020AF334 + b _020AF8E8 +_020AF8DC: + ldr r0, _020AF918 ; =0x021CCD6C + ldr r1, _020AF914 ; =0x021CCD74 + bl FUN_020AF334 +_020AF8E8: + cmp r0, #0x0 + movne r0, #0x0 + add sp, sp, #0x4 + moveq r0, #0x1 + ldmia sp!, {pc} +_020AF8FC: + mov r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AF908: .word 0x7FFF0000 +_020AF90C: .word 0x0000FFFF +_020AF910: .word 0x021CCD70 +_020AF914: .word 0x021CCD74 +_020AF918: .word 0x021CCD6C + + arm_func_start FUN_020AF91C +FUN_020AF91C: ; 0x020AF91C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + moveq r5, #0x10 + addne r0, r0, #0xf + bicne r5, r0, #0xf + ldr r0, _020AF9B0 ; =0x0007FFF0 + mov r4, r1 + cmp r5, r0 + addcs sp, sp, #0x4 + movcs r0, #0x0 + ldmcsia sp!, {r4-r5,pc} +_020AF94C: ; 0x020AF94C + cmp r4, #0x0 + beq _020AF96C + ldr r0, _020AF9B4 ; =0x021CCD70 + ldr r1, _020AF9B8 ; =0x021CCD74 + add r2, sp, #0x0 + mov r3, r5 + bl FUN_020AF5C4 + b _020AF980 +_020AF96C: + ldr r0, _020AF9BC ; =0x021CCD6C + ldr r1, _020AF9B8 ; =0x021CCD74 + add r2, sp, #0x0 + mov r3, r5 + bl FUN_020AF5C4 +_020AF980: + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} +_020AF990: ; 0x020AF990 + ldr r1, [sp, #0x0] + ldr r0, _020AF9C0 ; =0x0000FFFF + mov r2, r5, lsr #0x4 + and r0, r0, r1, lsr #0x3 + orr r0, r0, r2, lsl #0x10 + orr r0, r0, r4, lsl #0x1f + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AF9B0: .word 0x0007FFF0 +_020AF9B4: .word 0x021CCD70 +_020AF9B8: .word 0x021CCD74 +_020AF9BC: .word 0x021CCD6C +_020AF9C0: .word 0x0000FFFF + + arm_func_start FUN_020AF9C4 +FUN_020AF9C4: ; 0x020AF9C4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020AFA14 ; =0x021CCD6C + str r0, [r12, #0xc] + str r1, [r12, #0x10] + str r2, [r12, #0x14] + str r3, [r12, #0x18] + bl FUN_020AF6A4 + ldr r0, [sp, #0x8] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r3, _020AFA18 ; =FUN_020AF91C + ldr r1, _020AFA1C ; =0x021064B8 + ldr r2, _020AFA20 ; =FUN_020AF894 + ldr r0, _020AFA24 ; =0x021064BC + str r3, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AFA14: .word 0x021CCD6C +_020AFA18: .word FUN_020AF91C +_020AFA1C: .word 0x021064B8 +_020AFA20: .word FUN_020AF894 +_020AFA24: .word 0x021064BC + + arm_func_start FUN_020AFA28 +FUN_020AFA28: ; 0x020AFA28 + mov r0, r0, lsl #0x4 + bx lr + + arm_func_start FUN_020AFA30 +FUN_020AFA30: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020AFA78 ; =0x021CCD88 + ldr r1, [r0, #0x10] + ldr r0, [r0, #0xc] + mov r1, r1, lsr #0x4 + bl FUN_020AF64C + ldr r1, _020AFA78 ; =0x021CCD88 + str r0, [r1, #0x4] + mov r0, r1 + bl FUN_020AF698 + ldr r0, _020AFA78 ; =0x021CCD88 + ldr r1, _020AFA7C ; =0x021CCD8C + ldr r3, [r0, #0x8] + mov r2, #0x0 + bl FUN_020AF5E0 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AFA78: .word 0x021CCD88 +_020AFA7C: .word 0x021CCD8C + + arm_func_start FUN_020AFA80 +FUN_020AFA80: ; 0x020AFA80 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r1, #0x10000 + rsb r2, r1, #0x0 + ldr r1, _020AFAC8 ; =0x0000FFFF + and r2, r0, r2 + and r12, r0, r1 + mov r3, r2, lsr #0x10 + ldr r0, _020AFACC ; =0x021CCD88 + ldr r1, _020AFAD0 ; =0x021CCD8C + mov r2, r12, lsl #0x3 + mov r3, r3, lsl #0x3 + bl FUN_020AF334 +_020AFAB4: ; 0x020AFAB4 + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AFAC8: .word 0x0000FFFF +_020AFACC: .word 0x021CCD88 +_020AFAD0: .word 0x021CCD8C + + arm_func_start FUN_020AFAD4 +FUN_020AFAD4: ; 0x020AFAD4 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + cmp r0, #0x0 + moveq r4, #0x8 + addne r0, r0, #0x7 + bicne r4, r0, #0x7 + ldr r0, _020AFB98 ; =0x0007FFF8 + cmp r4, r0 + addcs sp, sp, #0x8 + movcs r0, #0x0 + ldmcsia sp!, {r4,pc} +_020AFB00: ; 0x020AFB00 + cmp r1, #0x0 + beq _020AFB50 + mov r12, #0x8 + ldr r0, _020AFB9C ; =0x021CCD88 + ldr r1, _020AFBA0 ; =0x021CCD8C + add r2, sp, #0x4 + mov r3, r4 + str r12, [sp, #0x0] + bl FUN_020AF488 + ldr r2, [sp, #0x4] + add r1, r2, r4 + cmp r1, #0x10000 + bls _020AFB6C + ldr r0, _020AFB9C ; =0x021CCD88 + ldr r1, _020AFBA0 ; =0x021CCD8C + mov r3, r4 + bl FUN_020AF334 + add sp, sp, #0x8 + mov r0, #0x0 + ldmia sp!, {r4,pc} +_020AFB50: + ldr r0, _020AFB9C ; =0x021CCD88 + mov r12, #0x10 + ldr r1, _020AFBA0 ; =0x021CCD8C + add r2, sp, #0x4 + mov r3, r4 + str r12, [sp, #0x0] + bl FUN_020AF488 +_020AFB6C: + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020AFB7C: ; 0x020AFB7C + ldr r1, [sp, #0x4] + ldr r0, _020AFBA4 ; =0x0000FFFF + mov r2, r4, lsr #0x3 + and r0, r0, r1, lsr #0x3 + orr r0, r0, r2, lsl #0x10 + add sp, sp, #0x8 + ldmia sp!, {r4,pc} + .balign 4 +_020AFB98: .word 0x0007FFF8 +_020AFB9C: .word 0x021CCD88 +_020AFBA0: .word 0x021CCD8C +_020AFBA4: .word 0x0000FFFF + + arm_func_start FUN_020AFBA8 +FUN_020AFBA8: ; 0x020AFBA8 + stmdb sp!, {r4,lr} + ldr ip, _020AFBE8 ; =0x021CCD88 + mov r4, r3 + str r0, [r12, #0x8] + str r1, [r12, #0xc] + str r2, [r12, #0x10] + bl FUN_020AFA30 +_020AFBC4: ; 0x020AFBC4 + cmp r4, #0x0 + ldmeqia sp!, {r4,pc} +_020AFBCC: ; 0x020AFBCC + ldr r3, _020AFBEC ; =FUN_020AFAD4 + ldr r1, _020AFBF0 ; =0x021064C0 + ldr r2, _020AFBF4 ; =FUN_020AFA80 + ldr r0, _020AFBF8 ; =0x021064C4 + str r3, [r1, #0x0] + str r2, [r0, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_020AFBE8: .word 0x021CCD88 +_020AFBEC: .word FUN_020AFAD4 +_020AFBF0: .word 0x021064C0 +_020AFBF4: .word FUN_020AFA80 +_020AFBF8: .word 0x021064C4 + + arm_func_start FUN_020AFBFC +FUN_020AFBFC: ; 0x020AFBFC + mov r0, r0, lsl #0x4 + bx lr + + arm_func_start FUN_020AFC04 +FUN_020AFC04: ; 0x020AFC04 + ldrh r2, [r0, #0x0] + cmp r2, r1 + ldrhi r0, [r0, #0x4] + addhi r0, r0, r1, lsl #0x4 + movls r0, #0x0 + bx lr + + arm_func_start FUN_020AFC1C +FUN_020AFC1C: ; 0x020AFC1C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r1, [r0, #0x4] + mov r6, #0x0 + add r1, r1, r0 + str r1, [r0, #0x4] + ldr r1, [r0, #0x8] + add r1, r1, r0 + str r1, [r0, #0x8] + ldr r1, [r0, #0xc] + add r1, r1, r0 + str r1, [r0, #0xc] + ldrh r1, [r0, #0x0] + ldr r4, [r0, #0x4] + ldr lr, [r0, #0x8] + cmp r1, #0x0 + ldr r12, [r0, #0xc] + bls _020AFCCC + mov r1, r6 +_020AFC68: + add r2, r4, r6, lsl #0x4 + ldr r5, [r2, #0xc] + mov r3, r6, lsl #0x4 + add r5, lr, r5 + str r5, [r2, #0xc] + ldrh r7, [r4, r3] + mov r5, r1 + cmp r7, #0x0 + bls _020AFCB4 +_020AFC8C: + ldr r9, [r2, #0xc] + add r7, r5, #0x1 + ldr r8, [r9, r5, lsl #0x3] + mov r7, r7, lsl #0x10 + add r8, r12, r8 + str r8, [r9, r5, lsl #0x3] + ldrh r8, [r4, r3] + mov r5, r7, lsr #0x10 + cmp r5, r8 + blo _020AFC8C +_020AFCB4: + add r2, r6, #0x1 + mov r2, r2, lsl #0x10 + ldrh r3, [r0, #0x0] + mov r6, r2, lsr #0x10 + cmp r6, r3 + blo _020AFC68 +_020AFCCC: + ldr r1, [r0, #0x14] + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r9,pc} +_020AFCDC: ; 0x020AFCDC + add r1, r1, r0 + str r1, [r0, #0x14] + ldr r1, [r0, #0x14] + mov r12, #0x0 + add r2, r1, #0x8 + ldr r0, [r2, #0x4] + add r0, r0, r2 + str r0, [r2, #0x4] + ldrh r0, [r1, #0x8] + cmp r0, #0x0 + addls sp, sp, #0x4 + ldmlsia sp!, {r4-r9,pc} +_020AFD0C: ; 0x020AFD0C + mov r0, r12 + mov r6, r12 +_020AFD14: + ldr r5, [r2, #0x4] + mov r3, r6 + add r1, r5, r0 + ldr r4, [r1, #0x4] + add r4, r4, r2 + str r4, [r1, #0x4] + ldr r4, [r1, #0x8] + add r4, r4, r2 + str r4, [r1, #0x8] + ldrh r4, [r5, r0] + cmp r4, #0x0 + bls _020AFD6C + mov r7, r6 +_020AFD48: + ldr r5, [r1, #0x8] + add r3, r3, #0x1 + ldr r4, [r5, r7] + add r4, r4, r2 + str r4, [r5, r7] + ldrh r4, [r1, #0x0] + add r7, r7, #0x4 + cmp r3, r4 + blo _020AFD48 +_020AFD6C: + ldrh r1, [r2, #0x0] + add r12, r12, #0x1 + add r0, r0, #0xc + cmp r12, r1 + blo _020AFD14 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + + arm_func_start thunk_FUN_020afda0 +thunk_FUN_020afda0: ; 0x020AFD88 + ldr ip, _020AFD90 ; =FUN_020AFDA0 + bx r12 + .balign 4 +_020AFD90: .word FUN_020AFDA0 + + arm_func_start thunk_FUN_020afda0_2 +thunk_FUN_020afda0_2: ; 0x020AFD94 + ldr ip, _020AFD9C ; =FUN_020AFDA0 + bx r12 + .balign 4 +_020AFD9C: .word FUN_020AFDA0 + + arm_func_start FUN_020AFDA0 +FUN_020AFDA0: ; 0x020AFDA0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldr r1, _020AFDE4 ; =0x41424E4B + bl FUN_020B01F8 + movs r4, r0 + moveq r0, #0x0 + addeq sp, sp, #0x4 + streq r0, [r5, #0x0] + ldmeqia sp!, {r4-r5,pc} +_020AFDC8: ; 0x020AFDC8 + add r0, r4, #0x8 + bl FUN_020AFC1C + add r0, r4, #0x8 + str r0, [r5, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AFDE4: .word 0x41424E4B + + arm_func_start FUN_020AFDE8 +FUN_020AFDE8: ; 0x020AFDE8 + stmdb sp!, {r4-r6,lr} + mov r5, r0 + ldr r1, [r5, #0x4] + add r1, r1, r5 + str r1, [r5, #0x4] + bl FUN_020AFF10 + ldrh r1, [r5, #0x0] + mov r4, r0 + mov r6, #0x0 + cmp r1, #0x0 + bls _020AFE44 +_020AFE14: + mov r0, r5 + mov r1, r6 + bl FUN_020AFE8C + ldr r2, [r0, #0x4] + add r1, r6, #0x1 + add r2, r2, r4 + str r2, [r0, #0x4] + mov r0, r1, lsl #0x10 + ldrh r1, [r5, #0x0] + mov r6, r0, lsr #0x10 + cmp r6, r1 + blo _020AFE14 +_020AFE44: + ldr r0, [r5, #0xc] + cmp r0, #0x0 + beq _020AFE6C + add r0, r0, r5 + str r0, [r5, #0xc] + ldr r1, [r5, #0xc] + ldr r0, [r1, #0x4] + add r0, r0, r1 + str r0, [r1, #0x4] + str r1, [r5, #0xc] +_020AFE6C: + ldr r0, [r5, #0x14] + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020AFE78: ; 0x020AFE78 + add r0, r0, r5 + str r0, [r5, #0x14] + ldr r0, [r5, #0x14] + bl FUN_020AFF00 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020AFE8C +FUN_020AFE8C: ; 0x020AFE8C + ldrh r2, [r0, #0x0] + cmp r1, r2 + movcs r0, #0x0 + bxcs lr + ldrh r2, [r0, #0x2] + ands r2, r2, #0x1 + ldrne r0, [r0, #0x4] + addne r0, r0, r1, lsl #0x4 + ldreq r0, [r0, #0x4] + addeq r0, r0, r1, lsl #0x3 + bx lr + + arm_func_start FUN_020AFEB8 +FUN_020AFEB8: ; 0x020AFEB8 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldr r1, _020AFEFC ; =0x4345424B + bl FUN_020B01F8 + movs r4, r0 + moveq r0, #0x0 + addeq sp, sp, #0x4 + streq r0, [r5, #0x0] + ldmeqia sp!, {r4-r5,pc} +_020AFEE0: ; 0x020AFEE0 + add r0, r4, #0x8 + bl FUN_020AFDE8 + add r0, r4, #0x8 + str r0, [r5, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AFEFC: .word 0x4345424B + + arm_func_start FUN_020AFF00 +FUN_020AFF00: ; 0x020AFF00 + ldr ip, _020AFF0C ; =FUN_020B01B0 + add r0, r0, #0x8 + bx r12 + .balign 4 +_020AFF0C: .word FUN_020B01B0 + + arm_func_start FUN_020AFF10 +FUN_020AFF10: ; 0x020AFF10 + ldrh r1, [r0, #0x2] + ands r1, r1, #0x1 + ldrneh r1, [r0, #0x0] + ldrne r0, [r0, #0x4] + addne r0, r0, r1, lsl #0x4 + ldreqh r1, [r0, #0x0] + ldreq r0, [r0, #0x4] + addeq r0, r0, r1, lsl #0x3 + bx lr + + arm_func_start FUN_020AFF34 +FUN_020AFF34: ; 0x020AFF34 + ldrh r2, [r0, #0x0] + cmp r1, r2 + ldrcc r0, [r0, #0x4] + addcc r0, r0, r1, lsl #0x3 + movcs r0, #0x0 + bx lr + + arm_func_start FUN_020AFF4C +FUN_020AFF4C: ; 0x020AFF4C + stmdb sp!, {r4,lr} + ldr r1, [r0, #0x4] + mov r4, #0x0 + add r1, r1, r0 + str r1, [r0, #0x4] + ldr r1, [r0, #0x8] + add r1, r1, r0 + str r1, [r0, #0x8] + ldrh r1, [r0, #0x0] + ldr lr, [r0, #0x4] + cmp r1, #0x0 + bls _020AFFA8 +_020AFF7C: + add r3, lr, r4, lsl #0x3 + ldr r12, [r0, #0x8] + ldr r2, [r3, #0x4] + add r1, r4, #0x1 + add r2, r12, r2 + str r2, [r3, #0x4] + mov r1, r1, lsl #0x10 + ldrh r2, [r0, #0x0] + mov r4, r1, lsr #0x10 + cmp r4, r2 + blo _020AFF7C +_020AFFA8: + ldr r1, [r0, #0x10] + cmp r1, #0x0 + ldmeqia sp!, {r4,pc} +_020AFFB4: ; 0x020AFFB4 + add r1, r1, r0 + str r1, [r0, #0x10] + ldr r0, [r0, #0x10] + bl FUN_020AFFC8 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020AFFC8 +FUN_020AFFC8: ; 0x020AFFC8 + ldr ip, _020AFFD4 ; =FUN_020B01B0 + add r0, r0, #0x8 + bx r12 + .balign 4 +_020AFFD4: .word FUN_020B01B0 + + arm_func_start FUN_020AFFD8 +FUN_020AFFD8: ; 0x020AFFD8 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldr r1, _020B001C ; =0x4D43424B + bl FUN_020B01F8 + movs r4, r0 + moveq r0, #0x0 + addeq sp, sp, #0x4 + streq r0, [r5, #0x0] + ldmeqia sp!, {r4-r5,pc} +_020B0000: ; 0x020B0000 + add r0, r4, #0x8 + bl FUN_020AFF4C + add r0, r4, #0x8 + str r0, [r5, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B001C: .word 0x4D43424B + + arm_func_start FUN_020B0020 +FUN_020B0020: ; 0x020B0020 + ldr r1, [r0, #0x14] + add r1, r1, r0 + str r1, [r0, #0x14] + bx lr + + arm_func_start FUN_020B0030 +FUN_020B0030: ; 0x020B0030 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldr r1, _020B0074 ; =0x43484152 + bl FUN_020B01F8 + movs r4, r0 + moveq r0, #0x0 + addeq sp, sp, #0x4 + streq r0, [r5, #0x0] + ldmeqia sp!, {r4-r5,pc} +_020B0058: ; 0x020B0058 + add r0, r4, #0x8 + bl FUN_020B0020 + add r0, r4, #0x8 + str r0, [r5, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B0074: .word 0x43484152 + + arm_func_start FUN_020B0078 +FUN_020B0078: ; 0x020B0078 + ldr r1, [r0, #0x14] + add r1, r1, r0 + str r1, [r0, #0x14] + bx lr + + arm_func_start FUN_020B0088 +FUN_020B0088: ; 0x020B0088 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldr r1, _020B00CC ; =0x43484152 + bl FUN_020B01F8 + movs r4, r0 + moveq r0, #0x0 + addeq sp, sp, #0x4 + streq r0, [r5, #0x0] + ldmeqia sp!, {r4-r5,pc} +_020B00B0: ; 0x020B00B0 + add r0, r4, #0x8 + bl FUN_020B0078 + add r0, r4, #0x8 + str r0, [r5, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B00CC: .word 0x43484152 + + arm_func_start FUN_020B00D0 +FUN_020B00D0: ; 0x020B00D0 + ldr r1, [r0, #0xc] + add r1, r1, r0 + str r1, [r0, #0xc] + bx lr + + arm_func_start FUN_020B00E0 +FUN_020B00E0: ; 0x020B00E0 + ldr r1, [r0, #0x4] + add r1, r1, r0 + str r1, [r0, #0x4] + bx lr + + arm_func_start FUN_020B00F0 +FUN_020B00F0: ; 0x020B00F0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldr r1, _020B0134 ; =0x50434D50 + bl FUN_020B01F8 + movs r4, r0 + moveq r0, #0x0 + addeq sp, sp, #0x4 + streq r0, [r5, #0x0] + ldmeqia sp!, {r4-r5,pc} +_020B0118: ; 0x020B0118 + add r0, r4, #0x8 + bl FUN_020B00E0 + add r0, r4, #0x8 + str r0, [r5, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B0134: .word 0x50434D50 + + arm_func_start FUN_020B0138 +FUN_020B0138: ; 0x020B0138 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldr r1, _020B017C ; =0x504C5454 + bl FUN_020B01F8 + movs r4, r0 + moveq r0, #0x0 + addeq sp, sp, #0x4 + streq r0, [r5, #0x0] + ldmeqia sp!, {r4-r5,pc} +_020B0160: ; 0x020B0160 + add r0, r4, #0x8 + bl FUN_020B00D0 + add r0, r4, #0x8 + str r0, [r5, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B017C: .word 0x504C5454 + + arm_func_start FUN_020B0180 +FUN_020B0180: ; 0x020B0180 + stmdb sp!, {r4,lr} + mov r4, r1 + ldr r1, _020B01AC ; =0x5343524E + bl FUN_020B01F8 +_020B0190: ; 0x020B0190 + cmp r0, #0x0 + addne r0, r0, #0x8 + strne r0, [r4, #0x0] + movne r0, #0x1 + moveq r0, #0x0 + streq r0, [r4, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_020B01AC: .word 0x5343524E + + arm_func_start FUN_020B01B0 +FUN_020B01B0: ; 0x020B01B0 + ldr r1, [r0, #0x4] + mov r12, #0x0 + add r1, r1, r0 + str r1, [r0, #0x4] + ldrh r1, [r0, #0x0] + cmp r1, #0x0 + bxls lr +_020B01CC: + ldr r3, [r0, #0x4] + add r1, r12, #0x1 + ldr r2, [r3, r12, lsl #0x2] + mov r1, r1, lsl #0x10 + add r2, r0, r2 + str r2, [r3, r12, lsl #0x2] + ldrh r2, [r0, #0x0] + mov r12, r1, lsr #0x10 + cmp r12, r2 + blo _020B01CC + bx lr + + arm_func_start FUN_020B01F8 +FUN_020B01F8: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r2, [r0, #0xc] + ldrh r12, [r0, #0xe] + mov lr, #0x0 + add r0, r0, r2 + cmp r12, #0x0 + bls _020B0244 +_020B0218: + ldr r2, [r0, #0x0] + cmp r2, r1 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + add r2, lr, #0x1 + mov r2, r2, lsl #0x10 + ldr r3, [r0, #0x4] + mov lr, r2, lsr #0x10 + cmp lr, r12 + add r0, r0, r3 + blo _020B0218 +_020B0244: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020B0250 +FUN_020B0250: ; 0x020B0250 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r5, _020B02C0 ; =0x04000470 + mov r0, r0, lsl #0xc + str r0, [r5, #0x0] + mov r4, r1, lsl #0xc + ldr r12, [sp, #0x10] + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x1c] + str r4, [r5, #0x0] + mov r4, r2, lsl #0xc + ldr r2, [sp, #0x18] + ldr lr, _020B02C4 ; =0x0400046C + str r4, [r5, #0x0] + mov r4, r3, lsl #0xc + ldr r3, [sp, #0x20] + str r4, [lr, #0x0] + mov r12, r12, lsl #0xc + str r12, [lr, #0x0] + mov r12, #0x1000 + mov r0, r0, lsl #0xc + mov r1, r1, lsl #0xc + mov r2, r2, lsl #0xc + mov r3, r3, lsl #0xc + str r12, [lr, #0x0] + bl FUN_020B0340 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B02C0: .word 0x04000470 +_020B02C4: .word 0x0400046C + + arm_func_start FUN_020B02C8 +FUN_020B02C8: ; 0x020B02C8 + stmdb sp!, {lr} + sub sp, sp, #0x14 + ldr r2, _020B0330 ; =0xBFFF0000 + ldr r0, _020B0334 ; =0x04000580 + mov r1, #0x400000 + str r2, [r0, #0x0] + rsb r0, r1, #0x0 + str r0, [sp, #0x0] + str r1, [sp, #0x4] + mov r0, #0x0 + str r1, [sp, #0x8] + mov r1, #0x1 + str r1, [sp, #0xc] + mov r2, r0 + mov r1, #0xc0000 + mov r3, #0x100000 + str r0, [sp, #0x10] + bl G3i_OrthoW_ + ldr r1, _020B0338 ; =0x0400044C + mov r2, #0x0 + ldr r0, _020B033C ; =0x04000440 + str r2, [r1, #0x0] + mov r1, #0x1 + str r1, [r0, #0x0] + add sp, sp, #0x14 + ldmia sp!, {pc} + .balign 4 +_020B0330: .word 0xBFFF0000 +_020B0334: .word 0x04000580 +_020B0338: .word 0x0400044C +_020B033C: .word 0x04000440 + + arm_func_start FUN_020B0340 +FUN_020B0340: ; 0x020B0340 + stmdb sp!, {r4-r6,lr} + mov r3, r3, lsl #0x8 + mov r0, r0, lsl #0x8 + mov r4, r3, asr #0x10 + mov r3, r0, asr #0x10 + mov r0, r4, lsl #0x10 + mov r3, r3, lsl #0x10 + mov r1, r1, lsl #0x8 + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + mov r2, r2, lsl #0x8 + mov r2, r2, asr #0x10 + mov r2, r2, lsl #0x10 + ldr ip, _020B03F4 ; =0x04000500 + mov lr, #0x1 + mov r6, r0, lsr #0x10 + mov r5, r3, lsr #0x10 + mov r3, r1, lsr #0x10 + mov r1, r2, lsr #0x10 + ldr r4, _020B03F8 ; =0x04000488 + str lr, [r12, #0x0] + orr r0, r5, r6, lsl #0x10 + ldr lr, _020B03FC ; =0x0400048C + str r0, [r4, #0x0] + mov r0, #0x10000000 + str r0, [lr, #0x0] + mov r12, #0x0 + str r12, [lr, #0x0] + orr r2, r3, r6, lsl #0x10 + ldr r0, _020B0400 ; =0x10001000 + str r2, [r4, #0x0] + str r0, [lr, #0x0] + str r12, [lr, #0x0] + orr r0, r3, r1, lsl #0x10 + str r0, [r4, #0x0] + mov r0, #0x1000 + str r0, [lr, #0x0] + str r12, [lr, #0x0] + orr r0, r5, r1, lsl #0x10 + str r0, [r4, #0x0] + str r12, [lr, #0x0] + ldr r0, _020B0404 ; =0x04000504 + str r12, [lr, #0x0] + str r12, [r0, #0x0] + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B03F4: .word 0x04000500 +_020B03F8: .word 0x04000488 +_020B03FC: .word 0x0400048C +_020B0400: .word 0x10001000 +_020B0404: .word 0x04000504 + + arm_func_start FUN_020B0408 +FUN_020B0408: + ldr r1, [r0, #0x14] + cmp r1, #0x0 + ldreq r0, [r0, #0x18] + ldreq r1, [r0, #0x8] + cmp r1, #0x2 + beq _020B0428 + cmp r1, #0x4 + bne _020B0430 +_020B0428: + mov r0, #0x1 + bx lr +_020B0430: + mov r0, #0x0 + bx lr + + arm_func_start FUN_020B0438 +FUN_020B0438: ; 0x020B0438 + ldr ip, _020B0444 ; =FUN_020B0448 + str r1, [r0, #0x18] + bx r12 + .balign 4 +_020B0444: .word FUN_020B0448 + + arm_func_start FUN_020B0448 +FUN_020B0448: ; 0x020B0448 + ldr r1, [r0, #0x10] + cmp r1, #0x0 + movgt r2, #0x1 + ldr r1, [r0, #0x4] + movle r2, #0x0 + eors r1, r2, r1 + beq _020B047C + ldr r2, [r0, #0x18] + ldrh r1, [r2, #0x2] + ldr r2, [r2, #0xc] + add r1, r2, r1, lsl #0x3 + str r1, [r0, #0x0] + b _020B0494 +_020B047C: + ldr r2, [r0, #0x18] + ldrh r1, [r2, #0x0] + ldr r2, [r2, #0xc] + add r1, r2, r1, lsl #0x3 + sub r1, r1, #0x8 + str r1, [r0, #0x0] +_020B0494: + ldr ip, _020B04A4 ; =FUN_020B0534 + mov r1, #0x0 + str r1, [r0, #0xc] + bx r12 + .balign 4 +_020B04A4: .word FUN_020B0534 + + arm_func_start FUN_020B04A8 +FUN_020B04A8: ; 0x020B04A8 + mov r1, #0x0 + str r1, [r0, #0x0] + str r1, [r0, #0x4] + str r1, [r0, #0x8] + strh r1, [r0, #0xc] + bx lr + + arm_func_start FUN_020B04C0 +FUN_020B04C0: + stmdb sp!, {r4,lr} + mov r4, r0 + add r0, r4, #0x1c + bl FUN_020B04A8 + mov r1, #0x0 + str r1, [r4, #0x0] + str r1, [r4, #0x4] + mov r0, #0x1 + str r0, [r4, #0x8] + str r1, [r4, #0xc] + mov r0, #0x1000 + str r0, [r4, #0x10] + str r1, [r4, #0x14] + str r1, [r4, #0x18] + ldmia sp!, {r4,pc} +_020B04FC: ; 0x020B04FC + ldr r1, [r0, #0x18] + ldr r2, [r0, #0x0] + ldr r0, [r1, #0xc] + sub r0, r2, r0 + mov r0, r0, lsl #0xd + mov r0, r0, lsr #0x10 + bx lr + + arm_func_start FUN_020B0518 +FUN_020B0518: + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020B06EC +_020B0524: ; 0x020B0524 + cmp r0, #0x0 + movne r1, #0x0 + strne r1, [r4, #0xc] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020B0534 +FUN_020B0534: + stmdb sp!, {r4-r8,lr} + mov r8, r0 + ldr r0, [r8, #0x8] + mov r7, #0x0 + cmp r0, #0x1 + movne r0, r7 + ldmneia sp!, {r4-r8,pc} +_020B0550: ; 0x020B0550 + ldr r2, [r8, #0x10] + mov r0, #0x800 + smull r3, r1, r2, r1 + adds r0, r3, r0 + adc r1, r1, r7 + mov r0, r0, lsr #0xc + orr r0, r0, r1, lsl #0x14 + bl abs + ldr r1, [r8, #0xc] + add r6, r8, #0xc + add r0, r1, r0 + str r0, [r8, #0xc] + mov r4, r7 + mov r5, #0x1 + b _020B06A8 +_020B058C: + ldr r0, [r8, #0x0] + ldr r1, [r6, #0x0] + ldrh r0, [r0, #0x4] + mov r7, r5 + sub r0, r1, r0, lsl #0xc + str r0, [r6, #0x0] + ldr r0, [r8, #0x10] + cmp r0, #0x0 + movgt r1, r5 + ldr r0, [r8, #0x4] + movle r1, r4 + eors r0, r1, r0 + ldrne r0, [r8, #0x0] + addne r0, r0, #0x8 + strne r0, [r8, #0x0] + ldreq r0, [r8, #0x0] + subeq r0, r0, #0x8 + streq r0, [r8, #0x0] + ldr r1, [r8, #0x10] + ldr r0, [r8, #0x0] + cmp r1, #0x0 + movgt r2, r5 + ldr r1, [r8, #0x4] + movle r2, r4 + eors r1, r2, r1 + beq _020B0614 + ldr r2, [r8, #0x18] + ldrh r1, [r2, #0x0] + ldr r2, [r2, #0xc] + add r1, r2, r1, lsl #0x3 + cmp r0, r1 + movcs r0, r5 + movcc r0, r4 + b _020B0634 +_020B0614: + ldr r2, [r8, #0x18] + ldrh r1, [r2, #0x2] + ldr r2, [r2, #0xc] + add r1, r2, r1, lsl #0x3 + sub r1, r1, #0x8 + cmp r0, r1 + movls r0, r5 + movhi r0, r4 +_020B0634: + cmp r0, #0x0 + beq _020B0644 + mov r0, r8 + bl FUN_020B0710 +_020B0644: + ldr r0, [r8, #0x1c] + cmp r0, #0x0 + beq _020B06A8 + ldr r0, [r8, #0x18] + ldr r2, [r8, #0x1c] + ldr r1, [r8, #0x0] + ldr r0, [r0, #0xc] + cmp r2, #0x2 + sub r0, r1, r0 + mov r0, r0, lsl #0xd + mov r1, r0, lsr #0x10 + beq _020B0680 + cmp r2, #0x3 + beq _020B069C + b _020B06A8 +_020B0680: + ldrh r0, [r8, #0x28] + cmp r1, r0 + bne _020B06A8 + ldr r0, [r8, #0x20] + ldr r2, [r8, #0x24] + blx r2 + b _020B06A8 +_020B069C: + ldr r0, [r8, #0x20] + ldr r2, [r8, #0x24] + blx r2 +_020B06A8: + ldr r0, [r8, #0x8] + cmp r0, #0x0 + beq _020B06CC + ldr r0, [r8, #0x0] + ldr r1, [r8, #0xc] + ldrh r0, [r0, #0x4] + cmp r1, r0, lsl #0xc + movge r0, r5 + bge _020B06D0 +_020B06CC: + mov r0, r4 +_020B06D0: + cmp r0, #0x0 + bne _020B058C + mov r0, r7 + ldmia sp!, {r4-r8,pc} + + arm_func_start FUN_020B06E0 +FUN_020B06E0: ; 0x020B06E0 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + bx lr + + arm_func_start FUN_020B06EC +FUN_020B06EC: + ldr r3, [r0, #0x18] + ldrh r2, [r3, #0x0] + cmp r1, r2 + ldrcc r2, [r3, #0xc] + addcc r1, r2, r1, lsl #0x3 + strcc r1, [r0, #0x0] + movcc r0, #0x1 + movcs r0, #0x0 + bx lr + + arm_func_start FUN_020B0710 +FUN_020B0710: ; 0x020B0710 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x14] + cmp r0, #0x0 + ldreq r0, [r4, #0x18] + ldreq r0, [r0, #0x8] + cmp r0, #0x3 + beq _020B0738 + cmp r0, #0x4 + bne _020B07B4 +_020B0738: + ldr r0, [r4, #0x4] + eor r0, r0, #0x1 + str r0, [r4, #0x4] + ldr r1, [r4, #0x18] + ldr r2, [r4, #0x0] + ldrh r0, [r1, #0x2] + ldr r1, [r1, #0xc] + add r0, r1, r0, lsl #0x3 + sub r0, r0, #0x8 + cmp r2, r0 + bhi _020B0800 + ldr r0, [r4, #0x1c] + cmp r0, #0x1 + bne _020B0780 + ldr r0, [r4, #0x20] + ldr r1, [r4, #0xc] + ldr r2, [r4, #0x24] + blx r2 +_020B0780: + ldr r0, [r4, #0x14] + cmp r0, #0x0 + ldreq r0, [r4, #0x18] + ldreq r0, [r0, #0x8] + cmp r0, #0x2 + beq _020B07A8 + cmp r0, #0x4 + movne r0, #0x0 + strne r0, [r4, #0x8] + bne _020B0800 +_020B07A8: + mov r0, r4 + bl FUN_020B0448 + b _020B0800 +_020B07B4: + ldr r0, [r4, #0x1c] + cmp r0, #0x1 + bne _020B07D0 + ldr r0, [r4, #0x20] + ldr r1, [r4, #0xc] + ldr r2, [r4, #0x24] + blx r2 +_020B07D0: + ldr r0, [r4, #0x14] + cmp r0, #0x0 + ldreq r0, [r4, #0x18] + ldreq r0, [r0, #0x8] + cmp r0, #0x2 + beq _020B07F8 + cmp r0, #0x4 + movne r0, #0x0 + strne r0, [r4, #0x8] + bne _020B0800 +_020B07F8: + mov r0, r4 + bl FUN_020B0448 +_020B0800: + ldr r1, [r4, #0x18] + ldr r2, [r4, #0x0] + ldrh r0, [r1, #0x0] + ldr r1, [r1, #0xc] + add r0, r1, r0, lsl #0x3 + sub r0, r0, #0x8 + cmp r2, r0 + strhi r0, [r4, #0x0] + ldmhiia sp!, {r4,pc} +_020B0824: ; 0x020B0824 + cmp r2, r1 + strcc r1, [r4, #0x0] + ldmia sp!, {r4,pc} +_020B0830: ; 0x020B0830 + ldrh r3, [r0, #0x6] + ldrh r2, [r0, #0x8] + mov r12, #0x0 + add r1, r3, #0x1 + cmp r2, r1 + bgt _020B0854 + ldrh r0, [r0, #0x4] + cmp r0, r3 + movls r12, #0x1 +_020B0854: + cmp r12, #0x0 + subne r0, r3, r2 + addne r0, r0, #0x1 + movne r0, r0, lsl #0x10 + movne r0, r0, lsr #0x10 + moveq r0, #0x0 + bx lr + + arm_func_start FUN_020B0870 +FUN_020B0870: ; 0x020B0870 + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020B09B4 + mov r0, r4 + bl FUN_020B0888 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020B0888 +FUN_020B0888: ; 0x020B0888 + stmdb sp!, {r4-r6,lr} + mov r5, r0 + ldr r0, [r5, #0x14] + cmp r0, #0x0 + beq _020B0944 + ldrh r2, [r5, #0x6] + ldrh r1, [r5, #0x8] + mov r3, #0x0 + add r0, r2, #0x1 + cmp r1, r0 + bgt _020B08C0 + ldrh r0, [r5, #0x4] + cmp r0, r2 + movls r3, #0x1 +_020B08C0: + cmp r3, #0x0 + moveq r4, #0x0 + beq _020B08E0 + ldrh r0, [r5, #0x4] + sub r0, r2, r0 + add r0, r0, #0x1 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0xd +_020B08E0: + ldr r2, [r5, #0x0] + ldr r1, _020B09AC ; =0x021CCDA0 + mov r0, #0x540 + mla r1, r2, r0, r1 + ldrh r0, [r5, #0x4] + add r2, r1, #0x100 + mov r1, r4 + add r6, r2, r0, lsl #0x3 + mov r0, r6 + bl DC_InvalidateRange + ldr r0, _020B09B0 ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020B0930 + mov r1, r6 + mov r3, r4 + mov r2, #0xc0 + bl MI_DmaFill32 + b _020B0998 +_020B0930: + mov r1, r6 + mov r2, r4 + mov r0, #0xc0 + bl MIi_CpuClear32 + b _020B0998 +_020B0944: + ldr r2, [r5, #0x0] + ldr r1, _020B09AC ; =0x021CCDA0 + mov r0, #0x540 + mla r1, r2, r0, r1 + ldrh r2, [r5, #0x4] + ldrh r0, [r5, #0x6] + add r1, r1, #0x100 + add r3, r1, r2, lsl #0x3 + sub r0, r0, r2 + add r0, r0, #0x1 + mov r0, r0, lsl #0x10 + movs r2, r0, lsr #0x10 + mov r0, #0x0 + beq _020B0998 + mov r1, #0xc0 +_020B0980: + add r0, r0, #0x1 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, r2 + strh r1, [r3], #0x8 + blo _020B0980 +_020B0998: + ldrh r0, [r5, #0x4] + strh r0, [r5, #0x8] + ldrh r0, [r5, #0xa] + strh r0, [r5, #0xe] + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B09AC: .word 0x021CCDA0 +_020B09B0: .word 0x02106814 + + arm_func_start FUN_020B09B4 +FUN_020B09B4: ; 0x020B09B4 + stmdb sp!, {r4-r10,lr} + mov r7, r0 + ldr r0, [r7, #0x14] + cmp r0, #0x0 + beq _020B0A48 + ldr r5, [r7, #0x0] + ldr r1, _020B0BA8 ; =0x021CCDA0 + mov r0, #0x540 + mla r1, r5, r0, r1 + ldrh r2, [r7, #0x4] + ldrh r0, [r7, #0x6] + add r1, r1, #0x100 + add r4, r1, r2, lsl #0x3 + sub r0, r0, r2 + add r0, r0, #0x1 + mov r0, r0, lsl #0x13 + mov r6, r0, lsr #0x10 + mov r2, r2, lsl #0x13 + mov r0, r4 + mov r1, r6 + mov r7, r2, lsr #0x10 + bl DC_FlushRange +_020B0A0C: ; 0x020B0A0C + cmp r5, #0x0 + beq _020B0A20 + cmp r5, #0x1 + beq _020B0A34 + ldmia sp!, {r4-r10,pc} +_020B0A20: + mov r0, r4 + mov r1, r7 + mov r2, r6 + bl GX_LoadOAM_2 + ldmia sp!, {r4-r10,pc} +_020B0A34: + mov r0, r4 + mov r1, r7 + mov r2, r6 + bl GXS_LoadOAM_2 + ldmia sp!, {r4-r10,pc} +_020B0A48: + ldr r0, [r7, #0x0] + ldr r2, _020B0BA8 ; =0x021CCDA0 + mov r1, #0x540 + mla r2, r0, r1, r2 + ldrh r5, [r7, #0x4] + ldrh r1, [r7, #0x6] + ldr r3, _020B0BAC ; =0x0210655C + add r4, r2, #0x100 + sub r1, r1, r5 + add r1, r1, #0x1 + mov r1, r1, lsl #0x10 + mov r2, r5, lsl #0x13 + add r6, r4, r5, lsl #0x3 + movs r5, r1, lsr #0x10 + mov r4, r2, lsr #0x10 + ldr r9, [r3, r0, lsl #0x2] + mov r10, #0x0 + beq _020B0AC8 + mov r8, #0x6 +_020B0A94: + mov r0, r6 + mov r1, r4 + mov r2, r8 + blx r9 + add r0, r10, #0x1 + add r2, r4, #0x8 + mov r1, r0, lsl #0x10 + mov r0, r2, lsl #0x10 + mov r10, r1, lsr #0x10 + cmp r10, r5 + mov r4, r0, lsr #0x10 + add r6, r6, #0x8 + blo _020B0A94 +_020B0AC8: + ldrh r2, [r7, #0xc] + ldrh r1, [r7, #0xe] + mov r3, #0x0 + add r0, r2, #0x1 + cmp r1, r0 + bgt _020B0AEC + ldrh r0, [r7, #0xa] + cmp r0, r2 + movls r3, #0x1 +_020B0AEC: + cmp r3, #0x0 + ldmeqia sp!, {r4-r10,pc} +_020B0AF4: ; 0x020B0AF4 + ldr r0, [r7, #0x0] + ldr r2, _020B0BA8 ; =0x021CCDA0 + mov r1, #0x540 + mla r2, r0, r1, r2 + ldrh r5, [r7, #0xa] + add r4, r2, #0x100 + ldrh r1, [r7, #0xc] + mov r2, r5, lsl #0x15 + ldr r3, _020B0BAC ; =0x0210655C + sub r1, r1, r5 + add r1, r1, #0x1 + mov r1, r1, lsl #0x10 + add r9, r4, r5, lsl #0x5 + ldr r5, [r3, r0, lsl #0x2] + movs r8, r1, lsr #0x10 + mov r7, r2, lsr #0x10 + mov r6, #0x0 + ldmeqia sp!, {r4-r10,pc} +_020B0B3C: ; 0x020B0B3C + mov r4, #0x2 +_020B0B40: + mov r2, r4 + add r0, r9, #0x6 + add r1, r7, #0x6 + blx r5 + mov r2, r4 + add r0, r9, #0xe + add r1, r7, #0xe + blx r5 + mov r2, r4 + add r0, r9, #0x16 + add r1, r7, #0x16 + blx r5 + add r0, r9, #0x1e + add r1, r7, #0x1e + mov r2, r4 + blx r5 + add r0, r7, #0x20 + mov r0, r0, lsl #0x10 + mov r7, r0, lsr #0x10 + add r9, r9, #0x20 + add r0, r6, #0x1 + mov r0, r0, lsl #0x10 + mov r6, r0, lsr #0x10 + cmp r6, r8 + blo _020B0B40 + ldmia sp!, {r4-r10,pc} + .balign 4 +_020B0BA8: .word 0x021CCDA0 +_020B0BAC: .word 0x0210655C + + arm_func_start FUN_020B0BB0 +FUN_020B0BB0: ; 0x020B0BB0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r12, [r0, #0xc] + ldrh r3, [r0, #0xe] + mov lr, #0x0 + add r2, r12, #0x1 + cmp r3, r2 + bgt _020B0BDC + ldrh r2, [r0, #0xa] + cmp r2, r12 + movls lr, #0x1 +_020B0BDC: + cmp lr, #0x0 + subne r2, r12, r3 + addne r2, r2, #0x1 + movne r2, r2, lsl #0x10 + movne r2, r2, lsr #0x10 + moveq r2, #0x0 + cmp r2, #0x1 + movcs r2, #0x1 + movcc r2, #0x0 + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldreq r0, _020B0C74 ; =0x0000FFFE + ldmeqia sp!, {pc} + ldr lr, [r0, #0x0] + ldr r3, _020B0C78 ; =0x021CCDA0 + mov r2, #0x540 + mla r12, lr, r2, r3 + ldr r3, [r1, #0x0] + ldrh r2, [r0, #0xe] + add r12, r12, #0x100 + mov r3, r3, asr #0x4 + add r12, r12, r2, lsl #0x5 + strh r3, [r12, #0x6] + ldr r3, [r1, #0x4] + mov r3, r3, asr #0x4 + strh r3, [r12, #0xe] + ldr r3, [r1, #0x8] + mov r3, r3, asr #0x4 + strh r3, [r12, #0x16] + ldr r1, [r1, #0xc] + mov r1, r1, asr #0x4 + strh r1, [r12, #0x1e] + ldrh r1, [r0, #0xe] + add r1, r1, #0x1 + strh r1, [r0, #0xe] + mov r0, r2 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B0C74: .word 0x0000FFFE +_020B0C78: .word 0x021CCDA0 + + arm_func_start FUN_020B0C7C +FUN_020B0C7C: ; 0x020B0C7C + stmdb sp!, {r4,lr} + ldrh r12, [r0, #0x6] + ldrh r4, [r0, #0x8] + mov lr, #0x0 + add r3, r12, #0x1 + cmp r4, r3 + bgt _020B0CA4 + ldrh r3, [r0, #0x4] + cmp r3, r12 + movls lr, #0x1 +_020B0CA4: + cmp lr, #0x0 + subne r3, r12, r4 + addne r3, r3, #0x1 + movne r3, r3, lsl #0x10 + movne r3, r3, lsr #0x10 + moveq r3, #0x0 + cmp r3, #0x1 + movcs r3, #0x1 + movcc r3, #0x0 + cmp r3, #0x0 + beq _020B0D48 + ldr r4, [r0, #0x0] + ldr ip, _020B0D50 ; =0x021CCDA0 + mov r3, #0x540 + mla r12, r4, r3, r12 + ldrh r3, [r0, #0x8] + add r4, r12, #0x100 + ldrh r12, [r1, #0x0] + mov lr, r3, lsl #0x3 + add r3, r4, r3, lsl #0x3 + strh r12, [r4, lr] + ldrh lr, [r1, #0x2] + ldr ip, _020B0D54 ; =0x0000FFFE + strh lr, [r3, #0x2] + ldrh r1, [r1, #0x4] + cmp r2, r12 + strh r1, [r3, #0x4] + beq _020B0D34 + ldr r1, [r3, #0x0] + mov r12, r1, lsl #0x16 + mov r12, r12, lsr #0x1e + ands r12, r12, #0x1 + bicne r12, r1, #0x3e000000 + andne r1, r2, #0x1f + orrne r1, r12, r1, lsl #0x19 + strne r1, [r3, #0x0] +_020B0D34: + ldrh r1, [r0, #0x8] + add r1, r1, #0x1 + strh r1, [r0, #0x8] + mov r0, #0x1 + ldmia sp!, {r4,pc} +_020B0D48: + mov r0, #0x0 + ldmia sp!, {r4,pc} + .balign 4 +_020B0D50: .word 0x021CCDA0 +_020B0D54: .word 0x0000FFFE + + arm_func_start FUN_020B0D58 +FUN_020B0D58: ; 0x020B0D58 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldrh lr, [r0, #0x6] + ldrh r12, [r0, #0x8] + mov r4, #0x0 + add r3, lr, #0x1 + cmp r12, r3 + bgt _020B0D84 + ldrh r3, [r0, #0x4] + cmp r3, lr + movls r4, #0x1 +_020B0D84: + cmp r4, #0x0 + subne r3, lr, r12 + addne r3, r3, #0x1 + movne r3, r3, lsl #0x10 + movne r3, r3, lsr #0x10 + moveq r3, #0x0 + cmp r3, r2 + movcs r3, #0x1 + movcc r3, #0x0 + cmp r3, #0x0 + beq _020B0E24 + ldr lr, [r0, #0x0] + ldr ip, _020B0E30 ; =0x021CCDA0 + mov r3, #0x540 + mla r12, lr, r3, r12 + ldrh r3, [r0, #0x8] + add r12, r12, #0x100 + cmp r2, #0x0 + add r4, r12, r3, lsl #0x3 + mov r5, #0x0 + ble _020B0E18 + add r3, r0, #0x8 +_020B0DDC: + ldrh lr, [r1, #0x0] + mov r0, r5, lsl #0x3 + add r12, r4, r5, lsl #0x3 + strh lr, [r4, r0] + ldrh r0, [r1, #0x2] + add r5, r5, #0x1 + cmp r5, r2 + strh r0, [r12, #0x2] + ldrh r0, [r1, #0x4] + add r1, r1, #0x8 + strh r0, [r12, #0x4] + ldrh r0, [r3, #0x0] + add r0, r0, #0x1 + strh r0, [r3, #0x0] + blt _020B0DDC +_020B0E18: + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r5,pc} +_020B0E24: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B0E30: .word 0x021CCDA0 + + arm_func_start FUN_020B0E34 +FUN_020B0E34: ; 0x020B0E34 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r5, [sp, #0x1c] + ldr r6, _020B0FB4 ; =0x021CCDA0 + mov r4, #0x540 + mla r4, r5, r4, r6 + mov lr, r1 + sub r1, r2, #0x1 + add r1, lr, r1 + mov r1, r1, lsl #0x10 + mov r12, r1, lsr #0x10 + add r7, r4, lr, lsl #0x1 + add r2, r4, r12, lsl #0x1 + mov r6, r0 + mov r5, r3 + cmp r7, r2 + mov r3, lr, lsl #0x1 + bhi _020B0E9C + ldr r0, _020B0FB8 ; =0x0000FFFF +_020B0E80: + ldrh r1, [r7, #0x0] + cmp r1, r0 + movne r0, #0x0 + bne _020B0EA0 + add r7, r7, #0x2 + cmp r7, r2 + bls _020B0E80 +_020B0E9C: + mov r0, #0x1 +_020B0EA0: + cmp r0, #0x0 + beq _020B0EE0 + ldr r0, _020B0FBC ; =0x021CCD9C + sub r2, r12, lr + ldrh r7, [r0, #0x0] + add r1, r4, r3 + mov r2, r2, lsl #0x1 + add r3, r7, #0x1 + strh r3, [r0, #0x0] + strh r7, [r6, #0x10] + strh lr, [r6, #0x4] + strh r12, [r6, #0x6] + strh lr, [r6, #0x8] + ldrh r0, [r6, #0x10] + bl MIi_CpuClear16 + b _020B0EEC +_020B0EE0: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,pc} +_020B0EEC: + ldrh r0, [sp, #0x18] + add r4, r4, #0x500 + cmp r0, #0x0 + bne _020B0F18 + mov r0, #0x20 + strh r0, [r6, #0xa] + mov r0, #0x0 + strh r0, [r6, #0xc] + ldrh r0, [r6, #0xa] + strh r0, [r6, #0xe] + b _020B0F98 +_020B0F18: + sub r0, r0, #0x1 + add r0, r5, r0 + mov r0, r0, lsl #0x10 + mov r12, r0, lsr #0x10 + add r7, r4, r5, lsl #0x1 + add r2, r4, r12, lsl #0x1 + cmp r7, r2 + mov r3, r5, lsl #0x1 + bhi _020B0F5C + ldr r0, _020B0FB8 ; =0x0000FFFF +_020B0F40: + ldrh r1, [r7, #0x0] + cmp r1, r0 + movne r0, #0x0 + bne _020B0F60 + add r7, r7, #0x2 + cmp r7, r2 + bls _020B0F40 +_020B0F5C: + mov r0, #0x1 +_020B0F60: + cmp r0, #0x0 + beq _020B0F8C + strh r5, [r6, #0xa] + strh r12, [r6, #0xc] + strh r5, [r6, #0xe] + ldrh r0, [r6, #0x10] + sub r2, r12, r5 + add r1, r4, r3 + mov r2, r2, lsl #0x1 + bl MIi_CpuClear16 + b _020B0F98 +_020B0F8C: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,pc} +_020B0F98: + mov r1, #0x0 + ldr r0, [sp, #0x1c] + str r1, [r6, #0x14] + str r0, [r6, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B0FB4: .word 0x021CCDA0 +_020B0FB8: .word 0x0000FFFF +_020B0FBC: .word 0x021CCD9C + + arm_func_start FUN_020B0FC0 +FUN_020B0FC0: ; 0x020B0FC0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020B1060 ; =0x021CCEA0 + mov r0, #0xc0 + mov r2, #0x400 + bl MIi_CpuClear16 + ldr r1, _020B1064 ; =0x021CD3E0 + mov r0, #0xc0 + mov r2, #0x400 + bl MIi_CpuClear16 + ldr r1, _020B1068 ; =0x021CD920 + mov r0, #0xc0 + mov r2, #0x400 + bl MIi_CpuClear16 + ldr r0, _020B106C ; =0x0000FFFF + ldr r1, _020B1070 ; =0x021CCDA0 + mov r2, #0x100 + bl MIi_CpuClear16 + ldr r0, _020B106C ; =0x0000FFFF + ldr r1, _020B1074 ; =0x021CD2E0 + mov r2, #0x100 + bl MIi_CpuClear16 + ldr r0, _020B106C ; =0x0000FFFF + ldr r1, _020B1078 ; =0x021CD820 + mov r2, #0x100 + bl MIi_CpuClear16 + ldr r0, _020B106C ; =0x0000FFFF + ldr r1, _020B107C ; =0x021CD2A0 + mov r2, #0x40 + bl MIi_CpuClear16 + ldr r0, _020B106C ; =0x0000FFFF + ldr r1, _020B1080 ; =0x021CD7E0 + mov r2, #0x40 + bl MIi_CpuClear16 + ldr r0, _020B106C ; =0x0000FFFF + ldr r1, _020B1084 ; =0x021CDD20 + mov r2, #0x40 + bl MIi_CpuClear16 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B1060: .word 0x021CCEA0 +_020B1064: .word 0x021CD3E0 +_020B1068: .word 0x021CD920 +_020B106C: .word 0x0000FFFF +_020B1070: .word 0x021CCDA0 +_020B1074: .word 0x021CD2E0 +_020B1078: .word 0x021CD820 +_020B107C: .word 0x021CD2A0 +_020B1080: .word 0x021CD7E0 +_020B1084: .word 0x021CDD20 + + arm_func_start FUN_020B1088 +FUN_020B1088: ; 0x020B1088 + ldr ip, _020B1094 ; =MIi_CpuCopy16 + add r1, r1, #0x7000000 + bx r12 + .balign 4 +_020B1094: .word MIi_CpuCopy16 + + arm_func_start FUN_020B1098 +FUN_020B1098: ; 0x020B1098 + ldr r3, _020B10A8 ; =0x07000400 + ldr ip, _020B10AC ; =MIi_CpuCopy16 + add r1, r1, r3 + bx r12 + .balign 4 +_020B10A8: .word 0x07000400 +_020B10AC: .word MIi_CpuCopy16 + + arm_func_start FUN_020B10B0 +FUN_020B10B0: ; 0x020B10B0 + mov r1, r1, lsl #0x1 + ldrh r0, [r0, r1] + bx lr + + arm_func_start FUN_020B10BC +FUN_020B10BC: ; 0x020B10BC + ldr r0, [r0, r1, lsl #0x2] + bx lr + + arm_func_start FUN_020B10C4 +FUN_020B10C4: + str r2, [r0, r1, lsl #0x2] + bx lr + + arm_func_start FUN_020B10CC +FUN_020B10CC: + mov r2, #0x0 + mvn r1, #0x0 +_020B10D4: + str r1, [r0, r2, lsl #0x2] + add r2, r2, #0x1 + cmp r2, #0x3 + blt _020B10D4 + bx lr + + arm_func_start FUN_020B10E8 +FUN_020B10E8: ; 0x020B10E8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r10, r0 + ldr r0, [r10, #0x0] + mov r9, r1 + cmp r0, #0x3 + ldr r0, [sp, #0x28] + moveq r7, #0x20 + str r0, [sp, #0x28] + ldrh r0, [r9, #0x0] + movne r7, #0x200 + mov r11, r2 + mov r8, r3 + str r0, [sp, #0x0] + mov r6, #0x0 + cmp r0, #0x0 + bls _020B1210 +_020B112C: + ldr r1, [r9, #0x4] + mov r0, r6, lsl #0x1 + ldrh r2, [r1, r0] + ldr r0, [r10, #0xc] + ldr r1, [r10, #0x8] + mla r5, r7, r2, r11 + mla r4, r7, r6, r0 + bl DC_FlushRange +_020B114C: ; 0x020B114C + cmp r8, #0x0 + beq _020B11E0 + cmp r8, #0x1 + beq _020B1168 + cmp r8, #0x2 + beq _020B11A4 + b _020B11F8 +_020B1168: + ldr r0, [r10, #0x4] + cmp r0, #0x0 + beq _020B1190 + bl GX_BeginLoadOBJExtPltt + mov r0, r4 + mov r1, r5 + mov r2, r7 + bl GX_LoadOBJExtPltt + bl GX_EndLoadOBJExtPltt + b _020B11F8 +_020B1190: + mov r0, r4 + mov r1, r5 + mov r2, r7 + bl GX_LoadOBJPltt_2 + b _020B11F8 +_020B11A4: + ldr r0, [r10, #0x4] + cmp r0, #0x0 + beq _020B11CC + bl GXS_BeginLoadOBJExtPltt + mov r0, r4 + mov r1, r5 + mov r2, r7 + bl GXS_LoadOBJExtPltt + bl GXS_EndLoadOBJExtPltt + b _020B11F8 +_020B11CC: + mov r0, r4 + mov r1, r5 + mov r2, r7 + bl GXS_LoadOBJPltt_2 + b _020B11F8 +_020B11E0: + bl GX_BeginLoadTexPltt + mov r0, r4 + mov r1, r5 + mov r2, r7 + bl GX_LoadTexPltt + bl GX_EndLoadTexPltt +_020B11F8: + add r0, r6, #0x1 + mov r0, r0, lsl #0x10 + mov r6, r0, lsr #0x10 + ldr r0, [sp, #0x0] + cmp r6, r0 + blo _020B112C +_020B1210: + ldr r0, [sp, #0x28] + ldr r2, [r10, #0x0] + mov r1, r0 + str r2, [r1, #0x0] + ldr r4, [r10, #0x4] + mov r3, r0 + mov r1, r8 + mov r2, r11 + str r4, [r3, #0x4] + bl FUN_020B19D0 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020B1240 +FUN_020B1240: ; 0x020B1240 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r9, r0 + ldr r5, [r9, #0xc] + ldr r4, [r9, #0x8] + mov r8, r1 + mov r7, r2 + mov r0, r5 + mov r1, r4 + mov r6, r3 + bl DC_FlushRange +_020B126C: ; 0x020B126C + cmp r7, #0x0 + beq _020B1300 + cmp r7, #0x1 + beq _020B1288 + cmp r7, #0x2 + beq _020B12C4 + b _020B1318 +_020B1288: + ldr r0, [r9, #0x4] + cmp r0, #0x0 + beq _020B12B0 + bl GX_BeginLoadOBJExtPltt + mov r0, r5 + mov r1, r8 + mov r2, r4 + bl GX_LoadOBJExtPltt + bl GX_EndLoadOBJExtPltt + b _020B1318 +_020B12B0: + mov r0, r5 + mov r1, r8 + mov r2, r4 + bl GX_LoadOBJPltt_2 + b _020B1318 +_020B12C4: + ldr r0, [r9, #0x4] + cmp r0, #0x0 + beq _020B12EC + bl GXS_BeginLoadOBJExtPltt + mov r0, r5 + mov r1, r8 + mov r2, r4 + bl GXS_LoadOBJExtPltt + bl GXS_EndLoadOBJExtPltt + b _020B1318 +_020B12EC: + mov r0, r5 + mov r1, r8 + mov r2, r4 + bl GXS_LoadOBJPltt_2 + b _020B1318 +_020B1300: + bl GX_BeginLoadTexPltt + mov r0, r5 + mov r1, r8 + mov r2, r4 + bl GX_LoadTexPltt + bl GX_EndLoadTexPltt +_020B1318: + ldr r1, [r9, #0x0] + mov r0, r6 + str r1, [r6, #0x0] + ldr r3, [r9, #0x4] + mov r1, r7 + mov r2, r8 + str r3, [r6, #0x4] + bl FUN_020B19D0 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + + arm_func_start FUN_020B1340 +FUN_020B1340: ; 0x020B1340 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + ldr r0, [r7, #0x14] + ldr r1, [r7, #0x10] + mov r5, r2 + mov r4, r3 + bl DC_FlushRange +_020B1364: ; 0x020B1364 + cmp r5, #0x0 + ldr r0, [r7, #0x8] + beq _020B13B8 + cmp r5, #0x1 + beq _020B1384 + cmp r5, #0x2 + beq _020B13A0 + b _020B13B8 +_020B1384: + mov r3, #0x4000000 + ldr r2, [r3, #0x0] + ldr r1, _020B1520 ; =0xFFCFFFEF + and r1, r2, r1 + orr r0, r1, r0 + str r0, [r3, #0x0] + b _020B13B8 +_020B13A0: + ldr r3, _020B1524 ; =0x04001000 + ldr r1, _020B1520 ; =0xFFCFFFEF + ldr r2, [r3, #0x0] + and r1, r2, r1 + orr r0, r1, r0 + str r0, [r3, #0x0] +_020B13B8: + ldr r0, [r7, #0x8] + cmp r0, #0x0 + bne _020B14D8 + ldrh r0, [r7, #0x2] + cmp r0, #0x10 + bgt _020B1408 + cmp r0, #0x10 + bge _020B1434 + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020B1444 +_020B13E4: + b _020B1444 +_020B13E8: + b _020B1414 +_020B13EC: + b _020B141C +_020B13F0: + b _020B1444 +_020B13F4: + b _020B1424 +_020B13F8: + b _020B1444 +_020B13FC: + b _020B1444 +_020B1400: + b _020B1444 +_020B1404: + b _020B142C +_020B1408: + cmp r0, #0x20 + beq _020B143C + b _020B1444 +_020B1414: + mov r0, #0x0 + b _020B1448 +_020B141C: + mov r0, #0x1 + b _020B1448 +_020B1424: + mov r0, #0x2 + b _020B1448 +_020B142C: + mov r0, #0x3 + b _020B1448 +_020B1434: + mov r0, #0x4 + b _020B1448 +_020B143C: + mov r0, #0x5 + b _020B1448 +_020B1444: + mov r0, #0x0 +_020B1448: + str r0, [r4, #0xc] + ldrh r0, [r7, #0x0] + cmp r0, #0x10 + bgt _020B1490 + cmp r0, #0x10 + bge _020B14BC + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020B14CC +_020B146C: + b _020B14CC +_020B1470: + b _020B149C +_020B1474: + b _020B14A4 +_020B1478: + b _020B14CC +_020B147C: + b _020B14AC +_020B1480: + b _020B14CC +_020B1484: + b _020B14CC +_020B1488: + b _020B14CC +_020B148C: + b _020B14B4 +_020B1490: + cmp r0, #0x20 + beq _020B14C4 + b _020B14CC +_020B149C: + mov r0, #0x0 + b _020B14D0 +_020B14A4: + mov r0, #0x1 + b _020B14D0 +_020B14AC: + mov r0, #0x2 + b _020B14D0 +_020B14B4: + mov r0, #0x3 + b _020B14D0 +_020B14BC: + mov r0, #0x4 + b _020B14D0 +_020B14C4: + mov r0, #0x5 + b _020B14D0 +_020B14CC: + mov r0, #0x0 +_020B14D0: + str r0, [r4, #0x10] + b _020B14E8 +_020B14D8: + ldrh r0, [r7, #0x2] + str r0, [r4, #0xc] + ldrh r0, [r7, #0x0] + str r0, [r4, #0x10] +_020B14E8: + ldr r1, [r7, #0x4] + mov r0, #0x0 + str r1, [r4, #0x14] + str r0, [r4, #0x18] + mov r0, #0x1 + str r0, [r4, #0x1c] + ldr r3, [r7, #0x8] + mov r0, r4 + mov r1, r5 + mov r2, r6 + str r3, [r4, #0x20] + bl FUN_020B1A1C + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B1520: .word 0xFFCFFFEF +_020B1524: .word 0x04001000 + + arm_func_start FUN_020B1528 +FUN_020B1528: ; 0x020B1528 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + movs r5, r2 + mov r6, r1 + mov r4, r3 + ldr r0, [r7, #0x8] + beq _020B1590 + cmp r5, #0x1 + beq _020B155C + cmp r5, #0x2 + beq _020B1578 + b _020B1590 +_020B155C: + mov r3, #0x4000000 + ldr r2, [r3, #0x0] + ldr r1, _020B1760 ; =0xFFCFFFEF + and r1, r2, r1 + orr r0, r1, r0 + str r0, [r3, #0x0] + b _020B1590 +_020B1578: + ldr r3, _020B1764 ; =0x04001000 + ldr r1, _020B1760 ; =0xFFCFFFEF + ldr r2, [r3, #0x0] + and r1, r2, r1 + orr r0, r1, r0 + str r0, [r3, #0x0] +_020B1590: + ldr r0, [r7, #0x14] + ldr r1, [r7, #0x10] + bl DC_FlushRange +_020B159C: ; 0x020B159C + cmp r5, #0x0 + beq _020B15B8 + cmp r5, #0x1 + beq _020B15D4 + cmp r5, #0x2 + beq _020B15E8 + b _020B15F8 +_020B15B8: + bl GX_BeginLoadTex + ldr r0, [r7, #0x14] + ldr r2, [r7, #0x10] + mov r1, r6 + bl GX_LoadTex + bl GX_EndLoadTex + b _020B15F8 +_020B15D4: + ldr r0, [r7, #0x14] + ldr r2, [r7, #0x10] + mov r1, r6 + bl GX_LoadOBJ2 + b _020B15F8 +_020B15E8: + ldr r0, [r7, #0x14] + ldr r2, [r7, #0x10] + mov r1, r6 + bl GXS_LoadOBJ2 +_020B15F8: + ldr r0, [r7, #0x8] + cmp r0, #0x0 + bne _020B1718 + ldrh r0, [r7, #0x2] + cmp r0, #0x10 + bgt _020B1648 + cmp r0, #0x10 + bge _020B1674 + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020B1684 +_020B1624: + b _020B1684 +_020B1628: + b _020B1654 +_020B162C: + b _020B165C +_020B1630: + b _020B1684 +_020B1634: + b _020B1664 +_020B1638: + b _020B1684 +_020B163C: + b _020B1684 +_020B1640: + b _020B1684 +_020B1644: + b _020B166C +_020B1648: + cmp r0, #0x20 + beq _020B167C + b _020B1684 +_020B1654: + mov r0, #0x0 + b _020B1688 +_020B165C: + mov r0, #0x1 + b _020B1688 +_020B1664: + mov r0, #0x2 + b _020B1688 +_020B166C: + mov r0, #0x3 + b _020B1688 +_020B1674: + mov r0, #0x4 + b _020B1688 +_020B167C: + mov r0, #0x5 + b _020B1688 +_020B1684: + mov r0, #0x0 +_020B1688: + str r0, [r4, #0xc] + ldrh r0, [r7, #0x0] + cmp r0, #0x10 + bgt _020B16D0 + cmp r0, #0x10 + bge _020B16FC + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020B170C +_020B16AC: + b _020B170C +_020B16B0: + b _020B16DC +_020B16B4: + b _020B16E4 +_020B16B8: + b _020B170C +_020B16BC: + b _020B16EC +_020B16C0: + b _020B170C +_020B16C4: + b _020B170C +_020B16C8: + b _020B170C +_020B16CC: + b _020B16F4 +_020B16D0: + cmp r0, #0x20 + beq _020B1704 + b _020B170C +_020B16DC: + mov r0, #0x0 + b _020B1710 +_020B16E4: + mov r0, #0x1 + b _020B1710 +_020B16EC: + mov r0, #0x2 + b _020B1710 +_020B16F4: + mov r0, #0x3 + b _020B1710 +_020B16FC: + mov r0, #0x4 + b _020B1710 +_020B1704: + mov r0, #0x5 + b _020B1710 +_020B170C: + mov r0, #0x0 +_020B1710: + str r0, [r4, #0x10] + b _020B1728 +_020B1718: + ldrh r0, [r7, #0x2] + str r0, [r4, #0xc] + ldrh r0, [r7, #0x0] + str r0, [r4, #0x10] +_020B1728: + ldr r1, [r7, #0x4] + mov r0, #0x0 + str r1, [r4, #0x14] + str r0, [r4, #0x18] + mov r0, #0x1 + str r0, [r4, #0x1c] + ldr r3, [r7, #0x8] + mov r0, r4 + mov r1, r5 + mov r2, r6 + str r3, [r4, #0x20] + bl FUN_020B1A1C + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B1760: .word 0xFFCFFFEF +_020B1764: .word 0x04001000 + + arm_func_start FUN_020B1768 +FUN_020B1768: ; 0x020B1768 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + movs r5, r2 + mov r6, r1 + mov r4, r3 + ldr r0, [r7, #0x8] + beq _020B17D0 + cmp r5, #0x1 + beq _020B179C + cmp r5, #0x2 + beq _020B17B8 + b _020B17D0 +_020B179C: + mov r3, #0x4000000 + ldr r2, [r3, #0x0] + ldr r1, _020B19A0 ; =0xFFCFFFEF + and r1, r2, r1 + orr r0, r1, r0 + str r0, [r3, #0x0] + b _020B17D0 +_020B17B8: + ldr r3, _020B19A4 ; =0x04001000 + ldr r1, _020B19A0 ; =0xFFCFFFEF + ldr r2, [r3, #0x0] + and r1, r2, r1 + orr r0, r1, r0 + str r0, [r3, #0x0] +_020B17D0: + ldr r0, [r7, #0x14] + ldr r1, [r7, #0x10] + bl DC_FlushRange +_020B17DC: ; 0x020B17DC + cmp r5, #0x0 + beq _020B17F8 + cmp r5, #0x1 + beq _020B1814 + cmp r5, #0x2 + beq _020B1828 + b _020B1838 +_020B17F8: + bl GX_BeginLoadTex + ldr r0, [r7, #0x14] + ldr r2, [r7, #0x10] + mov r1, r6 + bl GX_LoadTex + bl GX_EndLoadTex + b _020B1838 +_020B1814: + ldr r0, [r7, #0x14] + ldr r2, [r7, #0x10] + mov r1, r6 + bl GX_LoadOBJ2 + b _020B1838 +_020B1828: + ldr r0, [r7, #0x14] + ldr r2, [r7, #0x10] + mov r1, r6 + bl GXS_LoadOBJ2 +_020B1838: + ldr r0, [r7, #0x8] + cmp r0, #0x0 + bne _020B1958 + ldrh r0, [r7, #0x2] + cmp r0, #0x10 + bgt _020B1888 + cmp r0, #0x10 + bge _020B18B4 + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020B18C4 +_020B1864: + b _020B18C4 +_020B1868: + b _020B1894 +_020B186C: + b _020B189C +_020B1870: + b _020B18C4 +_020B1874: + b _020B18A4 +_020B1878: + b _020B18C4 +_020B187C: + b _020B18C4 +_020B1880: + b _020B18C4 +_020B1884: + b _020B18AC +_020B1888: + cmp r0, #0x20 + beq _020B18BC + b _020B18C4 +_020B1894: + mov r0, #0x0 + b _020B18C8 +_020B189C: + mov r0, #0x1 + b _020B18C8 +_020B18A4: + mov r0, #0x2 + b _020B18C8 +_020B18AC: + mov r0, #0x3 + b _020B18C8 +_020B18B4: + mov r0, #0x4 + b _020B18C8 +_020B18BC: + mov r0, #0x5 + b _020B18C8 +_020B18C4: + mov r0, #0x0 +_020B18C8: + str r0, [r4, #0xc] + ldrh r0, [r7, #0x0] + cmp r0, #0x10 + bgt _020B1910 + cmp r0, #0x10 + bge _020B193C + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020B194C +_020B18EC: + b _020B194C +_020B18F0: + b _020B191C +_020B18F4: + b _020B1924 +_020B18F8: + b _020B194C +_020B18FC: + b _020B192C +_020B1900: + b _020B194C +_020B1904: + b _020B194C +_020B1908: + b _020B194C +_020B190C: + b _020B1934 +_020B1910: + cmp r0, #0x20 + beq _020B1944 + b _020B194C +_020B191C: + mov r0, #0x0 + b _020B1950 +_020B1924: + mov r0, #0x1 + b _020B1950 +_020B192C: + mov r0, #0x2 + b _020B1950 +_020B1934: + mov r0, #0x3 + b _020B1950 +_020B193C: + mov r0, #0x4 + b _020B1950 +_020B1944: + mov r0, #0x5 + b _020B1950 +_020B194C: + mov r0, #0x0 +_020B1950: + str r0, [r4, #0x10] + b _020B1968 +_020B1958: + ldrh r0, [r7, #0x2] + str r0, [r4, #0xc] + ldrh r0, [r7, #0x0] + str r0, [r4, #0x10] +_020B1968: + ldr r1, [r7, #0x4] + mov r0, #0x0 + str r1, [r4, #0x14] + str r0, [r4, #0x18] + mov r0, #0x1 + str r0, [r4, #0x1c] + ldr r3, [r7, #0x8] + mov r0, r4 + mov r1, r5 + mov r2, r6 + str r3, [r4, #0x20] + bl FUN_020B1A1C + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B19A0: .word 0xFFCFFFEF +_020B19A4: .word 0x04001000 + + arm_func_start FUN_020B19A8 +FUN_020B19A8: + add r0, r0, r1, lsl #0x2 + ldr r1, [r0, #0x8] + mvn r0, #0x0 + cmp r1, r0 + movne r0, #0x1 + moveq r0, #0x0 + bx lr + + arm_func_start FUN_020B19C4 +FUN_020B19C4: ; 0x020B19C4 + add r0, r0, r1, lsl #0x2 + ldr r0, [r0, #0x8] + bx lr + + arm_func_start FUN_020B19D0 +FUN_020B19D0: ; 0x020B19D0 + add r0, r0, r1, lsl #0x2 + str r2, [r0, #0x8] + bx lr + + arm_func_start FUN_020B19DC +FUN_020B19DC: ; 0x020B19DC + mov r3, #0x0 + mvn r2, #0x0 +_020B19E4: + add r1, r0, r3, lsl #0x2 + add r3, r3, #0x1 + str r2, [r1, #0x8] + cmp r3, #0x3 + blt _020B19E4 + bx lr + + arm_func_start FUN_020B19FC +FUN_020B19FC: + ldr r1, [r0, r1, lsl #0x2] + mvn r0, #0x0 + cmp r1, r0 + movne r0, #0x1 + moveq r0, #0x0 + bx lr + + arm_func_start FUN_020B1A14 +FUN_020B1A14: ; 0x020B1A14 + ldr r0, [r0, r1, lsl #0x2] + bx lr + + arm_func_start FUN_020B1A1C +FUN_020B1A1C: ; 0x020B1A1C + str r2, [r0, r1, lsl #0x2] + bx lr + + arm_func_start FUN_020B1A24 +FUN_020B1A24: ; 0x020B1A24 + mov r2, #0x0 + mvn r1, #0x0 +_020B1A2C: + str r1, [r0, r2, lsl #0x2] + add r2, r2, #0x1 + cmp r2, #0x3 + blt _020B1A2C + bx lr + + arm_func_start FUN_020B1A40 +FUN_020B1A40: ; 0x020B1A40 + stmdb sp!, {r4,lr} + mov r4, r0 + add r1, r4, #0x4 + mov r0, #0x0 + mov r2, #0x18 + bl MIi_CpuClear16 + mov r0, #0x1000 + str r0, [r4, #0x4] + str r0, [r4, #0x8] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020B1A68 +FUN_020B1A68: + ldr ip, _020B1A74 ; =FUN_020B1A40 + str r1, [r0, #0x0] + bx r12 + .balign 4 +_020B1A74: .word FUN_020B1A40 + + arm_func_start FUN_020B1A78 +FUN_020B1A78: ; 0x020B1A78 + ldr r3, [r0, #0x0] + cmp r3, #0x1 + ldreqh r3, [r0, #0x12] + orreq r3, r3, #0x2 + streqh r3, [r0, #0x12] + streq r1, [r0, #0x4] + streq r2, [r0, #0x8] + bx lr + + arm_func_start FUN_020B1A98 +FUN_020B1A98: ; 0x020B1A98 + ldr r2, [r0, #0x0] + cmp r2, #0x1 + ldreqh r2, [r0, #0x12] + orreq r2, r2, #0x4 + streqh r2, [r0, #0x12] + streqh r1, [r0, #0x10] + bx lr + + arm_func_start FUN_020B1AB4 +FUN_020B1AB4: ; 0x020B1AB4 + ldr r3, [r0, #0x0] + cmp r3, #0x1 + ldreqh r3, [r0, #0x12] + orreq r3, r3, #0x8 + streqh r3, [r0, #0x12] + streqh r1, [r0, #0xc] + streqh r2, [r0, #0xe] + bx lr + + arm_func_start FUN_020B1AD4 +FUN_020B1AD4: ; 0x020B1AD4 + mov r2, #0x0 + str r2, [r0, #0x0] + str r1, [r0, #0x4] + mov r1, #0x1 + str r1, [r0, #0x8] + ldr ip, _020B1AF4 ; =FUN_020B1A68 + add r0, r0, #0xc + bx r12 + .balign 4 +_020B1AF4: .word FUN_020B1A68 + + arm_func_start FUN_020B1AF8 +FUN_020B1AF8: ; 0x020B1AF8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x34 + ldrh r5, [r2, #0x0] + ldr r4, [sp, #0x60] + ldr r10, [sp, #0x58] + str r4, [sp, #0x60] + cmp r1, r5 + movcs r1, r5 + mov r4, #0x0 + cmp r1, #0x0 + str r4, [sp, #0x0] + bls _020B1E7C + ldrh r4, [sp, #0x5c] + mov r4, r4, lsl #0x19 + str r4, [sp, #0x4] + ldr r4, [sp, #0x0] + str r4, [sp, #0x14] + mov r4, #0x100 + str r4, [sp, #0xc] + mov r4, #0x300 + str r4, [sp, #0x8] + mov r4, #0x1 + str r4, [sp, #0x10] +_020B1B54: + ldr r5, [sp, #0x0] + mov r6, #0x6 + mul r6, r5, r6 + ldr r8, [r2, #0x4] + ldr r4, [sp, #0x0] + add r7, r0, r5, lsl #0x3 + ldrh r5, [r8, r6] + mov r4, r4, lsl #0x3 + add r9, r8, r6 + strh r5, [r0, r4] + ldrh r4, [r9, #0x2] + cmp r3, #0x0 + strh r4, [r7, #0x2] + ldrh r4, [r9, #0x4] + strh r4, [r7, #0x4] + bne _020B1B9C + cmp r10, #0x0 + beq _020B1E60 +_020B1B9C: + ldr r5, [r7, #0x0] + ldr r4, _020B1E88 ; =0x01FF0000 + and r4, r5, r4 + mov r4, r4, lsr #0x10 + mov r4, r4, lsl #0x10 + mov r4, r4, asr #0x10 + cmp r4, #0xff + orrgt r4, r4, #0xff00 + movgt r4, r4, lsl #0x10 + movgt r4, r4, asr #0x10 + mov r4, r4, lsl #0xc + str r4, [sp, #0x20] + ldr r4, [r7, #0x0] + and r4, r4, #0xff + mov r4, r4, lsl #0x10 + mov r4, r4, asr #0x10 + cmp r4, #0x7f + orrgt r4, r4, #0xff00 + movgt r4, r4, lsl #0x10 + movgt r4, r4, asr #0x10 + mov r4, r4, lsl #0xc + str r4, [sp, #0x24] + cmp r3, #0x0 + beq _020B1E00 + ldr r5, [r7, #0x0] + and r6, r5, #0x300 + cmp r6, #0x100 + beq _020B1C1C + cmp r6, #0x300 + beq _020B1C1C + and r4, r5, #0x30000000 + orr r6, r6, r4 +_020B1C1C: + cmp r6, #0x300 + bne _020B1C70 + ldr r4, _020B1E8C ; =0xC000C000 + ldr r8, _020B1E90 ; =0x020FF8AC + and r5, r5, r4 + and r4, r5, #0xc000 + mov r6, r4, asr #0xe + and r4, r5, #0xc0000000 + mov r4, r4, lsr #0x1e + mov r4, r4, lsl #0x1 + add r8, r8, r6, lsl #0x3 + ldrh r9, [r4, r8] + ldr r8, _020B1E94 ; =0x020FF894 + ldr r5, [sp, #0x20] + add r6, r8, r6, lsl #0x3 + add r5, r5, r9, lsl #0xb + str r5, [sp, #0x20] + ldrh r4, [r4, r6] + ldr r5, [sp, #0x24] + add r4, r5, r4, lsl #0xb + str r4, [sp, #0x24] +_020B1C70: + ldr r4, [sp, #0x60] + ldr r5, [r3, #0x8] + cmp r4, #0x0 + ldrne r8, [sp, #0x8] + add r4, sp, #0x20 + ldreq r8, [sp, #0xc] + mov r6, r4 + cmp r8, #0x300 + ldreq r9, [sp, #0x10] + mov r12, #0x1000 + ldrne r9, [sp, #0x14] + cmp r4, r4 + ldr r4, [sp, #0x24] + addeq r6, sp, #0x28 + smull r11, r4, r5, r4 + adds r5, r11, r12 + adc r11, r4, #0x0 + ldr r4, [r3, #0x0] + ldr lr, [sp, #0x20] + smlal r5, r11, r4, lr + mov r4, r5, lsr #0xc + orr r4, r4, r11, lsl #0x14 + str r4, [r6, #0x0] + ldr r4, [r3, #0xc] + ldr r5, [sp, #0x24] + ldr lr, [r3, #0x4] + smull r11, r5, r4, r5 + adds r11, r11, r12 + adc r4, r5, #0x0 + add r5, sp, #0x28 + cmp r6, r5 + ldr r5, [sp, #0x20] + smlal r11, r4, lr, r5 + mov r5, r11, lsr #0xc + orr r5, r5, r4, lsl #0x14 + str r5, [r6, #0x4] + ldreq r5, [sp, #0x28] + ldreq r4, [sp, #0x2c] + streq r5, [sp, #0x20] + streq r4, [sp, #0x24] + cmp r8, #0x100 + beq _020B1D38 + cmp r8, #0x300 + beq _020B1D38 + ldr r5, [r7, #0x0] + ldr r4, _020B1E98 ; =0xC1FFFCFF + and r4, r5, r4 + orr r4, r4, r8 + str r4, [r7, #0x0] + b _020B1D54 +_020B1D38: + ldr r5, [r7, #0x0] + ldr r4, _020B1E98 ; =0xC1FFFCFF + and r4, r5, r4 + orr r5, r4, r8 + ldr r4, [sp, #0x4] + orr r4, r4, r5 + str r4, [r7, #0x0] +_020B1D54: + ldr r6, [r7, #0x0] + ldr r5, _020B1E8C ; =0xC000C000 + cmp r9, #0x0 + and r8, r6, r5 + and r5, r8, #0xc000 + mov r6, r5, asr #0xe + and r5, r8, #0xc0000000 + ldr r8, _020B1E90 ; =0x020FF8AC + mov r5, r5, lsr #0x1e + mov r5, r5, lsl #0x1 + add r8, r8, r6, lsl #0x3 + ldrh r9, [r5, r8] + ldr r8, _020B1E94 ; =0x020FF894 + ldr r4, [sp, #0x20] + add r6, r8, r6, lsl #0x3 + mov r11, r9, asr #0x1 + ldrh r5, [r5, r6] + mov r8, r11, lsl #0xc + ldr r6, [r3, #0x0] + rsb r12, r8, #0x0 + mov r9, r5, asr #0x1 + mla r12, r6, r11, r12 + ldr r5, [r3, #0x8] + mla r6, r5, r9, r12 + add r6, r4, r6 + str r6, [sp, #0x20] + ldr r12, [r3, #0x4] + mov r5, r9, lsl #0xc + str r12, [sp, #0x1c] + ldr r12, [r3, #0xc] + rsb lr, r5, #0x0 + str r12, [sp, #0x18] + ldr r12, [sp, #0x1c] + ldr r4, [sp, #0x24] + mla r11, r12, r11, lr + ldr r12, [sp, #0x18] + subne r6, r6, r8 + mla r9, r12, r9, r11 + add r4, r4, r9 + str r4, [sp, #0x24] + subne r4, r4, r5 + strne r6, [sp, #0x20] + strne r4, [sp, #0x24] +_020B1E00: + cmp r10, #0x0 + beq _020B1E28 + ldr r6, [sp, #0x20] + ldr r4, [r10, #0x0] + ldr r5, [sp, #0x24] + add r4, r6, r4 + str r4, [sp, #0x20] + ldr r4, [r10, #0x4] + add r4, r5, r4 + str r4, [sp, #0x24] +_020B1E28: + ldr r4, [sp, #0x20] + ldr r6, [r7, #0x0] + add r5, r4, #0x800 + ldr r4, _020B1E9C ; =0x000001FF + and r4, r4, r5, asr #0xc + ldr r5, _020B1EA0 ; =0xFE00FF00 + and r6, r6, r5 + ldr r5, [sp, #0x24] + add r5, r5, #0x800 + mov r5, r5, asr #0xc + and r5, r5, #0xff + orr r5, r6, r5 + orr r4, r5, r4, lsl #0x10 + str r4, [r7, #0x0] +_020B1E60: + ldr r4, [sp, #0x0] + add r4, r4, #0x1 + mov r4, r4, lsl #0x10 + mov r4, r4, lsr #0x10 + str r4, [sp, #0x0] + cmp r4, r1 + blo _020B1B54 +_020B1E7C: + mov r0, r1 + add sp, sp, #0x34 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B1E88: .word 0x01FF0000 +_020B1E8C: .word 0xC000C000 +_020B1E90: .word 0x020FF8AC +_020B1E94: .word 0x020FF894 +_020B1E98: .word 0xC1FFFCFF +_020B1E9C: .word 0x000001FF +_020B1EA0: .word 0xFE00FF00 + + arm_func_start FUN_020B1EA4 +FUN_020B1EA4: ; 0x020B1EA4 + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020B0518 +_020B1EB0: ; 0x020B1EB0 + cmp r0, #0x0 + ldmeqia sp!, {r4,pc} +_020B1EB8: ; 0x020B1EB8 + mov r0, r4 + bl FUN_020B1FC4 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020B1EC4 +FUN_020B1EC4: ; 0x020B1EC4 + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020B0534 +_020B1ED0: ; 0x020B1ED0 + cmp r0, #0x0 + ldmeqia sp!, {r4,pc} +_020B1ED8: ; 0x020B1ED8 + mov r0, r4 + bl FUN_020B1FC4 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020B1EE4 +FUN_020B1EE4: ; 0x020B1EE4 + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020B0438 + mov r0, r4 + bl FUN_020B1FC4 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020B1EFC +FUN_020B1EFC: ; 0x020B1EFC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x14 + mov r4, r2 + ldr r2, [r4, #0xc] + mov r5, r1 + ldr r1, [r2, #0x0] + ldr r2, [sp, #0x34] + str r1, [sp, #0x0] + ldr r1, [sp, #0x38] + str r2, [sp, #0x4] + mov r6, r3 + mov r7, r0 + ldr r12, [sp, #0x3c] + str r1, [sp, #0x8] + ldr r1, [sp, #0x28] + ldr r2, [sp, #0x2c] + ldr r3, [sp, #0x30] + mov r0, r6 + str r12, [sp, #0xc] + bl FUN_020B45F0 + str r6, [r7, #0x34] + str r4, [r7, #0x30] + add r0, r7, #0x38 + mov r1, #0x1 + str r6, [r7, #0x34] + bl FUN_020B1A68 + mov r0, r7 + bl FUN_020B04C0 + mov r0, r7 + mov r1, r5 + bl FUN_020B1EE4 + add sp, sp, #0x14 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020B1F80 +FUN_020B1F80: ; 0x020B1F80 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + str r2, [r5, #0x30] + mvn r2, #0x0 + add r0, r5, #0x38 + mov r1, #0x1 + str r2, [r5, #0x34] + bl FUN_020B1A68 + mov r0, r5 + bl FUN_020B04C0 + mov r0, r5 + mov r1, r4 + bl FUN_020B1EE4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020B1FC4 +FUN_020B1FC4: ; 0x020B1FC4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r1, [r5, #0x0] + ldrh r1, [r1, #0x4] + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} +_020B1FE4: ; 0x020B1FE4 + bl FUN_020B06E0 + mov r4, r0 + ldr r7, [r5, #0x30] + ldrh r1, [r4, #0x0] + mov r0, r7 + bl FUN_020AFE8C + str r0, [r5, #0x2c] + ldr r1, [r5, #0x18] + add r0, r5, #0x38 + ldr r2, [r1, #0x4] + mov r1, #0x1 + and r6, r2, #0xff + bl FUN_020B1A68 +_020B2018: ; 0x020B2018 + cmp r6, #0x0 + beq _020B2068 + cmp r6, #0x2 + bne _020B203C + ldrsh r1, [r4, #0x4] + ldrsh r2, [r4, #0x6] + add r0, r5, #0x38 + bl FUN_020B1AB4 + b _020B2068 +_020B203C: + ldr r1, [r4, #0x4] + ldr r2, [r4, #0x8] + add r0, r5, #0x38 + bl FUN_020B1A78 + ldrh r1, [r4, #0x2] + add r0, r5, #0x38 + bl FUN_020B1A98 + ldrsh r1, [r4, #0xc] + ldrsh r2, [r4, #0xe] + add r0, r5, #0x38 + bl FUN_020B1AB4 +_020B2068: + ldr r2, [r7, #0xc] + cmp r2, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} +_020B2084: ; 0x020B2084 + ldr r1, [r5, #0x34] + mvn r0, #0x0 + cmp r1, r0 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} +_020B20A4: ; 0x020B20A4 + ldrh r1, [r4, #0x0] + ldr r2, [r2, #0x4] + ldr r0, [r5, #0x34] + add r3, r2, r1, lsl #0x3 + ldr r1, [r2, r1, lsl #0x3] + ldr r2, [r3, #0x4] + bl FUN_020B4400 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020B20C8 +FUN_020B20C8: ; 0x020B20C8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r6, #0x0 + str r6, [r0, #0x38] + ldr r7, [sp, #0x30] + str r6, [r0, #0x30] + mov r10, r1 + str r7, [r0, #0x34] + str r0, [sp, #0x0] + movs r8, r3 + mov r9, r2 + str r10, [r0, #0x3c] + ldr r11, [sp, #0x34] + beq _020B215C + mov r0, #0x1 + str r6, [sp, #0x8] + str r0, [sp, #0x4] +_020B210C: + mov r0, #0x28 + mul r4, r6, r0 + ldr r1, [sp, #0x4] + add r0, r10, r4 + bl FUN_020B1AD4 + mov r0, #0x54 + mla r5, r6, r0, r9 + ldr r1, [sp, #0x8] + mov r0, r7 + str r5, [r10, r4] + bl FUN_020AFC04 + mov r1, r0 + mov r0, r5 + mov r2, r11 + bl FUN_020B1F80 + add r0, r6, #0x1 + mov r0, r0, lsl #0x10 + mov r6, r0, lsr #0x10 + cmp r6, r8 + blo _020B210C +_020B215C: + ldr r0, [sp, #0x0] + bl FUN_020B04C0 +_020B2164: ; 0x020B2164 + ldr r0, [sp, #0x0] + ldr r3, [sp, #0x38] + ldr r2, [sp, #0x0] + add r0, r0, #0x44 + mov r1, #0x1 + str r3, [r2, #0x40] + bl FUN_020B1A68 +_020B2180: ; 0x020B2180 + ldr r0, [sp, #0x0] + mov r1, #0x0 + strh r1, [r0, #0x2c] + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020B2194 +FUN_020B2194: ; 0x020B2194 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + bl FUN_020B0518 +_020B21A4: ; 0x020B21A4 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} +_020B21B0: ; 0x020B21B0 + mov r0, r7 + bl FUN_020B06E0 + mov r4, r0 + ldrh r1, [r4, #0x0] + ldr r0, [r7, #0x40] + bl FUN_020AFF34 + ldr r1, [r7, #0x18] + mov r6, r0 + ldr r1, [r1, #0x4] + add r0, r7, #0x44 + and r5, r1, #0xff + mov r1, #0x1 + bl FUN_020B1A68 +_020B21E4: ; 0x020B21E4 + cmp r5, #0x0 + beq _020B2234 + cmp r5, #0x2 + bne _020B2208 + ldrsh r1, [r4, #0x4] + ldrsh r2, [r4, #0x6] + add r0, r7, #0x44 + bl FUN_020B1AB4 + b _020B2234 +_020B2208: + ldr r1, [r4, #0x4] + ldr r2, [r4, #0x8] + add r0, r7, #0x44 + bl FUN_020B1A78 + ldrh r1, [r4, #0x2] + add r0, r7, #0x44 + bl FUN_020B1A98 + ldrsh r1, [r4, #0xc] + ldrsh r2, [r4, #0xe] + add r0, r7, #0x44 + bl FUN_020B1AB4 +_020B2234: + ldrh r2, [r7, #0x2c] + mov r1, r6 + add r0, r7, #0x30 + bl FUN_020B24E0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020B224C +FUN_020B224C: ; 0x020B224C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r4, r0 + ldr r2, [r4, #0x0] + mov r6, r1 + ldrh r5, [r2, #0x4] + bl FUN_020B0534 +_020B2268: ; 0x020B2268 + cmp r0, #0x0 + beq _020B2318 + ldrh r1, [r4, #0x2c] + mov r0, r4 + add r1, r1, r5 + strh r1, [r4, #0x2c] + bl FUN_020B06E0 + mov r5, r0 + ldrh r1, [r5, #0x0] + ldr r0, [r4, #0x40] + bl FUN_020AFF34 + ldr r1, [r4, #0x18] + mov r7, r0 + ldr r1, [r1, #0x4] + add r0, r4, #0x44 + and r6, r1, #0xff + mov r1, #0x1 + bl FUN_020B1A68 +_020B22B0: ; 0x020B22B0 + cmp r6, #0x0 + beq _020B2300 + cmp r6, #0x2 + bne _020B22D4 + ldrsh r1, [r5, #0x4] + ldrsh r2, [r5, #0x6] + add r0, r4, #0x44 + bl FUN_020B1AB4 + b _020B2300 +_020B22D4: + ldr r1, [r5, #0x4] + ldr r2, [r5, #0x8] + add r0, r4, #0x44 + bl FUN_020B1A78 + ldrh r1, [r5, #0x2] + add r0, r4, #0x44 + bl FUN_020B1A98 + ldrsh r1, [r5, #0xc] + ldrsh r2, [r5, #0xe] + add r0, r4, #0x44 + bl FUN_020B1AB4 +_020B2300: + ldrh r2, [r4, #0x2c] + mov r1, r7 + add r0, r4, #0x30 + bl FUN_020B24E0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} +_020B2318: + mov r1, r6 + add r0, r4, #0x30 + bl FUN_020B232C + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020B232C +FUN_020B232C: ; 0x020B232C + stmdb sp!, {r4-r8,lr} + mov r7, r0 + ldr r0, [r7, #0x8] + mov r6, r1 + cmp r0, #0x1 + bne _020B238C + ldr r0, [r7, #0x0] + ldr r4, [r7, #0xc] + ldrh r0, [r0, #0x2] + mov r5, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r8,pc} +_020B235C: ; 0x020B235C + mov r8, #0x58 +_020B2360: + mla r0, r5, r8, r4 + mov r1, r6 + bl FUN_020B1EC4 + ldr r1, [r7, #0x0] + add r0, r5, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r1, #0x2] + mov r5, r0, lsr #0x10 + cmp r5, r1 + blo _020B2360 + ldmia sp!, {r4-r8,pc} +_020B238C: + ldr r0, [r7, #0x0] + ldr r4, [r7, #0xc] + ldrh r0, [r0, #0x0] + mov r5, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r8,pc} +_020B23A4: ; 0x020B23A4 + mov r8, #0x28 +_020B23A8: + mul r0, r5, r8 + ldr r0, [r4, r0] + mov r1, r6 + bl FUN_020B1EC4 + ldr r1, [r7, #0x0] + add r0, r5, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r1, #0x0] + mov r5, r0, lsr #0x10 + cmp r5, r1 + blo _020B23A8 + ldmia sp!, {r4-r8,pc} + + arm_func_start FUN_020B23D8 +FUN_020B23D8: ; 0x020B23D8 + stmdb sp!, {r4-r6,lr} + mov r5, r0 + ldrh r0, [r5, #0x0] + mov r4, #0x0 + mov r6, r4 + cmp r0, #0x0 + bls _020B2424 +_020B23F4: + mov r0, r5 + mov r1, r6 + bl FUN_020AFF34 + ldrh r0, [r0, #0x0] + ldrh r1, [r5, #0x0] + cmp r0, r4 + movhi r4, r0 + add r0, r6, #0x1 + mov r0, r0, lsl #0x10 + mov r6, r0, lsr #0x10 + cmp r6, r1 + blo _020B23F4 +_020B2424: + mov r0, r4 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020B242C +FUN_020B242C: ; 0x020B242C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + bl FUN_020B0438 + mov r1, #0x0 + mov r0, r7 + strh r1, [r7, #0x2c] + bl FUN_020B06E0 + mov r4, r0 + ldrh r1, [r4, #0x0] + ldr r0, [r7, #0x40] + bl FUN_020AFF34 + ldr r1, [r7, #0x18] + mov r6, r0 + ldr r1, [r1, #0x4] + add r0, r7, #0x44 + and r5, r1, #0xff + mov r1, #0x1 + bl FUN_020B1A68 +_020B2478: ; 0x020B2478 + cmp r5, #0x0 + beq _020B24C8 + cmp r5, #0x2 + bne _020B249C + ldrsh r1, [r4, #0x4] + ldrsh r2, [r4, #0x6] + add r0, r7, #0x44 + bl FUN_020B1AB4 + b _020B24C8 +_020B249C: + ldr r1, [r4, #0x4] + ldr r2, [r4, #0x8] + add r0, r7, #0x44 + bl FUN_020B1A78 + ldrh r1, [r4, #0x2] + add r0, r7, #0x44 + bl FUN_020B1A98 + ldrsh r1, [r4, #0xc] + ldrsh r2, [r4, #0xe] + add r0, r7, #0x44 + bl FUN_020B1AB4 +_020B24C8: + ldrh r2, [r7, #0x2c] + mov r1, r6 + add r0, r7, #0x30 + bl FUN_020B24E0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020B24E0 +FUN_020B24E0: ; 0x020B24E0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x14 + mov r10, r1 + str r0, [sp, #0x0] + str r10, [r0, #0x0] + ldr r0, [r0, #0x8] + mov r9, r2 + cmp r0, #0x1 + bne _020B2654 + ldrh r1, [r10, #0x2] + ldr r0, [sp, #0x0] + mov r4, #0x0 + ldr r8, [r0, #0xc] + cmp r1, #0x0 + bls _020B2544 + mov r3, r4 + mov r0, #0x58 +_020B2524: + mla r1, r4, r0, r8 + str r3, [r1, #0x54] + add r1, r4, #0x1 + mov r1, r1, lsl #0x10 + ldrh r2, [r10, #0x2] + mov r4, r1, lsr #0x10 + cmp r4, r2 + blo _020B2524 +_020B2544: + ldrh r0, [r10, #0x0] + mov r5, #0x0 + cmp r0, #0x0 + addls sp, sp, #0x14 + ldmlsia sp!, {r4-r11,pc} +_020B2558: ; 0x020B2558 + str r5, [sp, #0x4] + mov r11, #0x1 +_020B2560: + ldr r0, [r10, #0x4] + mov r1, #0x58 + add r7, r0, r5, lsl #0x3 + ldrh r0, [r7, #0x6] + and r0, r0, #0xff00 + mov r0, r0, lsl #0x8 + mov r0, r0, lsr #0x10 + mla r6, r0, r1, r8 + ldr r0, [r6, #0x54] + cmp r0, #0x0 + bne _020B2634 + ldr r0, [sp, #0x0] + ldrh r1, [r7, #0x0] + ldr r0, [r0, #0x4] + bl FUN_020AFC04 + mov r4, r0 + mov r0, r6 + mov r1, r4 + bl FUN_020B1EE4 + str r11, [r6, #0x8] + ldrh r0, [r7, #0x6] + and r0, r0, #0xf + cmp r0, #0x1 + bne _020B2630 + ldrh r1, [r4, #0x0] + ldr r7, [sp, #0x4] + mov r3, r7 + cmp r1, #0x0 + bls _020B25F0 + ldr r2, [r4, #0xc] +_020B25D8: + add r0, r2, r3, lsl #0x3 + ldrh r0, [r0, #0x4] + add r3, r3, #0x1 + cmp r3, r1 + add r7, r7, r0 + blo _020B25D8 +_020B25F0: + mov r0, r6 + bl FUN_020B0408 +_020B25F8: ; 0x020B25F8 + cmp r0, #0x0 + beq _020B261C + mov r0, r9 + mov r1, r7 + bl _u32_div_f + mov r0, r6 + mov r1, r1, lsl #0xc + bl FUN_020B1EC4 + b _020B2630 +_020B261C: + cmp r9, r7 + movcc r7, r9 + mov r0, r6 + mov r1, r7, lsl #0xc + bl FUN_020B1EC4 +_020B2630: + str r11, [r6, #0x54] +_020B2634: + add r0, r5, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r10, #0x0] + mov r5, r0, lsr #0x10 + cmp r5, r1 + blo _020B2560 + add sp, sp, #0x14 + ldmia sp!, {r4-r11,pc} +_020B2654: + ldrh r1, [r10, #0x0] + ldr r0, [sp, #0x0] + mov r4, #0x0 + cmp r1, #0x0 + ldr r11, [r0, #0xc] + addls sp, sp, #0x14 + ldmlsia sp!, {r4-r11,pc} +_020B2670: ; 0x020B2670 + mov r0, #0x1 + str r4, [sp, #0xc] + str r0, [sp, #0x8] +_020B267C: + mov r0, #0x28 + mul r2, r4, r0 + ldr r3, [r10, #0x4] + mov r0, r4, lsl #0x3 + ldrh r1, [r3, r0] + ldr r0, [sp, #0x0] + ldr r6, [r11, r2] + ldr r0, [r0, #0x4] + add r7, r3, r4, lsl #0x3 + bl FUN_020AFC04 + mov r5, r0 + mov r0, r6 + mov r1, r5 + bl FUN_020B1EE4 + ldr r0, [sp, #0x8] + str r0, [r6, #0x8] + ldrh r0, [r7, #0x6] + and r0, r0, #0xf + cmp r0, #0x1 + bne _020B2740 + ldrh r1, [r5, #0x0] + ldr r8, [sp, #0xc] + mov r0, r8 + cmp r1, #0x0 + bls _020B2700 + ldr r3, [r5, #0xc] +_020B26E4: + add r1, r3, r0, lsl #0x3 + ldrh r2, [r1, #0x4] + add r0, r0, #0x1 + ldrh r1, [r5, #0x0] + add r8, r8, r2 + cmp r0, r1 + blo _020B26E4 +_020B2700: + mov r0, r6 + bl FUN_020B0408 +_020B2708: ; 0x020B2708 + cmp r0, #0x0 + beq _020B272C + mov r0, r9 + mov r1, r8 + bl _u32_div_f + mov r0, r6 + mov r1, r1, lsl #0xc + bl FUN_020B1EC4 + b _020B2740 +_020B272C: + cmp r9, r8 + movcc r8, r9 + mov r0, r6 + mov r1, r8, lsl #0xc + bl FUN_020B1EC4 +_020B2740: + mov r0, #0x28 + mla r3, r4, r0, r11 + ldr r0, [sp, #0x8] + str r0, [r3, #0x8] + ldrsh r1, [r7, #0x2] + ldrsh r2, [r7, #0x4] + add r0, r3, #0xc + bl FUN_020B1AB4 + add r0, r4, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r10, #0x0] + mov r4, r0, lsr #0x10 + cmp r4, r1 + blo _020B267C + add sp, sp, #0x14 + ldmia sp!, {r4-r11,pc} + + arm_func_start thunk_FUN_020b5040 +thunk_FUN_020b5040: ; 0x020B2780 + ldr ip, _020B2788 ; =FUN_020B5040 + bx r12 + .balign 4 +_020B2788: .word FUN_020B5040 + + arm_func_start FUN_020B278C +FUN_020B278C: + ldr r0, [r0, #0x78] + bx lr + + arm_func_start FUN_020B2794 +FUN_020B2794: ; 0x020B2794 + stmdb sp!, {lr} + sub sp, sp, #0x1c + ldr r2, _020B2894 ; =0x021CDD70 + mov lr, #0x0 + ldr r12, [r2, #0x0] + ldr r3, _020B2898 ; =0x021CDEF4 + mov r2, #0x18 + str r1, [sp, #0x0] + str r1, [sp, #0xc] + mla r1, r12, r2, r3 + rsb r3, r0, #0x0 + str r0, [sp, #0x4] + add r0, sp, #0x0 + mov r2, r1 + str r3, [sp, #0x8] + str lr, [sp, #0x10] + str lr, [sp, #0x14] + bl FUN_020B423C + ldr r0, _020B2894 ; =0x021CDD70 + ldr r1, _020B289C ; =0x021CE1F4 + ldr r2, [r0, #0x0] + mov r0, #0x18 + mla r1, r2, r0, r1 + add r0, sp, #0x0 + mov r2, r1 + bl FUN_020B423C + ldr r0, _020B28A0 ; =0x021CDD68 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020B2824 + ldr r1, _020B28A4 ; =0x02106570 + ldr r0, _020B28A8 ; =0x0000FFFE + ldrh r1, [r1, #0x0] + cmp r1, r0 + movne r0, #0x1 + bne _020B2828 +_020B2824: + mov r0, #0x0 +_020B2828: + cmp r0, #0x0 + ldreq r1, _020B2894 ; =0x021CDD70 + ldreq r0, _020B28A4 ; =0x02106570 + ldreq r1, [r1, #0x0] + streqh r1, [r0, #0x0] + ldr r0, _020B2894 ; =0x021CDD70 + ldr r1, _020B28AC ; =0x021CDDF4 + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x10 + add r12, r1, r0, lsr #0xd + ldrh r0, [r12, #0x4] + cmp r0, #0x3 + addls pc, pc, r0, lsl #0x2 + b _020B288C +_020B2860: + b _020B2870 +_020B2864: + b _020B288C +_020B2868: + b _020B2870 +_020B286C: + b _020B2870 +_020B2870: + ldr r0, _020B28B0 ; =0x021CDD64 + mov r1, #0x1 + ldrh r3, [r0, #0x0] + add r2, r3, #0x1 + strh r2, [r0, #0x0] + strh r3, [r12, #0x2] + strh r1, [r12, #0x4] +_020B288C: + add sp, sp, #0x1c + ldmia sp!, {pc} + .balign 4 +_020B2894: .word 0x021CDD70 +_020B2898: .word 0x021CDEF4 +_020B289C: .word 0x021CE1F4 +_020B28A0: .word 0x021CDD68 +_020B28A4: .word 0x02106570 +_020B28A8: .word 0x0000FFFE +_020B28AC: .word 0x021CDDF4 +_020B28B0: .word 0x021CDD64 + + arm_func_start FUN_020B28B4 +FUN_020B28B4: ; 0x020B28B4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x1c + ldr r2, _020B29E8 ; =0x021CDD70 + mov r12, #0x0 + ldr r3, [r2, #0x0] + mov r4, r1 + ldr r2, _020B29EC ; =0x021CDEF4 + mov r1, #0x18 + mla r1, r3, r1, r2 + mov r5, r0 + add r0, sp, #0x0 + mov r2, r1 + str r5, [sp, #0x0] + str r12, [sp, #0x4] + str r12, [sp, #0x8] + str r4, [sp, #0xc] + str r12, [sp, #0x10] + str r12, [sp, #0x14] + bl FUN_020B423C + mov r0, r5 + bl FX_Inv + mov r1, #0x0 + str r0, [sp, #0x0] + mov r0, r4 + str r1, [sp, #0x4] + str r1, [sp, #0x8] + bl FX_Inv + mov r3, #0x0 + ldr r1, _020B29E8 ; =0x021CDD70 + str r0, [sp, #0xc] + ldr r2, [r1, #0x0] + ldr r1, _020B29F0 ; =0x021CE1F4 + mov r0, #0x18 + mla r1, r2, r0, r1 + add r0, sp, #0x0 + mov r2, r1 + str r3, [sp, #0x10] + str r3, [sp, #0x14] + bl FUN_020B423C + ldr r0, _020B29F4 ; =0x021CDD68 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020B2978 + ldr r1, _020B29F8 ; =0x02106570 + ldr r0, _020B29FC ; =0x0000FFFE + ldrh r1, [r1, #0x0] + cmp r1, r0 + movne r0, #0x1 + bne _020B297C +_020B2978: + mov r0, #0x0 +_020B297C: + cmp r0, #0x0 + ldreq r1, _020B29E8 ; =0x021CDD70 + ldreq r0, _020B29F8 ; =0x02106570 + ldreq r1, [r1, #0x0] + streqh r1, [r0, #0x0] + ldr r0, _020B29E8 ; =0x021CDD70 + ldr r1, _020B2A00 ; =0x021CDDF4 + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x10 + add r12, r1, r0, lsr #0xd + ldrh r0, [r12, #0x4] + cmp r0, #0x3 + addls pc, pc, r0, lsl #0x2 + b _020B29E0 +_020B29B4: + b _020B29C4 +_020B29B8: + b _020B29E0 +_020B29BC: + b _020B29C4 +_020B29C0: + b _020B29C4 +_020B29C4: + ldr r0, _020B2A04 ; =0x021CDD64 + mov r1, #0x1 + ldrh r3, [r0, #0x0] + add r2, r3, #0x1 + strh r2, [r0, #0x0] + strh r3, [r12, #0x2] + strh r1, [r12, #0x4] +_020B29E0: + add sp, sp, #0x1c + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B29E8: .word 0x021CDD70 +_020B29EC: .word 0x021CDEF4 +_020B29F0: .word 0x021CE1F4 +_020B29F4: .word 0x021CDD68 +_020B29F8: .word 0x02106570 +_020B29FC: .word 0x0000FFFE +_020B2A00: .word 0x021CDDF4 +_020B2A04: .word 0x021CDD64 + + arm_func_start FUN_020B2A08 +FUN_020B2A08: ; 0x020B2A08 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x1c + ldr r3, _020B2AEC ; =0x021CDD68 + mov r4, r2 + ldr r2, [r3, #0x0] + cmp r2, #0x0 + beq _020B2A6C + ldr r2, _020B2AF0 ; =0x021CDD70 + mov r3, #0x18 + ldr r2, [r2, #0x0] + ldr lr, _020B2AF4 ; =0x021CDF04 + mul r5, r2, r3 + ldr r3, [lr, r5] + ldr ip, _020B2AF8 ; =0x021CDF08 + add r0, r3, r0 + str r0, [lr, r5] + ldr r0, [r12, r5] + ldr r3, _020B2AFC ; =0x021CDD74 + add r0, r0, r1 + str r0, [r12, r5] + ldr r0, [r3, r2, lsl #0x2] + add sp, sp, #0x1c + add r0, r0, r4 + str r0, [r3, r2, lsl #0x2] + ldmia sp!, {r4-r5,pc} +_020B2A6C: + ldr r2, _020B2AF0 ; =0x021CDD70 + mov lr, #0x1000 + ldr r12, [r2, #0x0] + ldr r3, _020B2B00 ; =0x021CDEF4 + mov r2, #0x18 + str r1, [sp, #0x14] + mla r1, r12, r2, r3 + mov r3, #0x0 + str r0, [sp, #0x10] + add r0, sp, #0x0 + mov r2, r1 + str lr, [sp, #0x0] + str r3, [sp, #0x4] + str r3, [sp, #0x8] + str lr, [sp, #0xc] + bl FUN_020B423C + ldr r0, _020B2AF0 ; =0x021CDD70 + ldr r1, _020B2B04 ; =0x021CE1F4 + ldr r2, [r0, #0x0] + mov r0, #0x18 + mla r1, r2, r0, r1 + add r0, sp, #0x0 + mov r2, r1 + bl FUN_020B423C + ldr r0, _020B2AF0 ; =0x021CDD70 + ldr r2, _020B2AFC ; =0x021CDD74 + ldr r1, [r0, #0x0] + ldr r0, [r2, r1, lsl #0x2] + add r0, r0, r4 + str r0, [r2, r1, lsl #0x2] + add sp, sp, #0x1c + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B2AEC: .word 0x021CDD68 +_020B2AF0: .word 0x021CDD70 +_020B2AF4: .word 0x021CDF04 +_020B2AF8: .word 0x021CDF08 +_020B2AFC: .word 0x021CDD74 +_020B2B00: .word 0x021CDEF4 +_020B2B04: .word 0x021CE1F4 + + arm_func_start FUN_020B2B08 +FUN_020B2B08: ; 0x020B2B08 + ldr r0, _020B2B4C ; =0x021CDD70 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + movle r0, #0x1 + movgt r0, #0x0 + cmp r0, #0x0 + bxne lr + ldr r1, _020B2B4C ; =0x021CDD70 + ldr r0, _020B2B50 ; =0x02106570 + ldr r3, [r1, #0x0] + ldrh r2, [r0, #0x0] + sub r3, r3, #0x1 + str r3, [r1, #0x0] + cmp r2, r3 + ldrgt r1, _020B2B54 ; =0x0000FFFE + strgth r1, [r0, #0x0] + bx lr + .balign 4 +_020B2B4C: .word 0x021CDD70 +_020B2B50: .word 0x02106570 +_020B2B54: .word 0x0000FFFE + + arm_func_start FUN_020B2B58 +FUN_020B2B58: ; 0x020B2B58 + stmdb sp!, {r4-r10,lr} + ldr r0, _020B2D74 ; =0x021CDD6C + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x7c] + ands r0, r0, #0x1 + bne _020B2CA4 + ldr r0, _020B2D78 ; =0x021CDD70 + ldr r1, [r0, #0x0] + mov r0, r1, lsl #0x10 + add r5, r1, #0x1 + cmp r5, #0x20 + mov r4, r0, lsr #0x10 + movlt r0, #0x1 + movge r0, #0x0 + cmp r0, #0x0 + beq _020B2C44 + ldr r0, _020B2D7C ; =0x021CDD68 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020B2BE4 + ldr r1, _020B2D78 ; =0x021CDD70 + mov r0, #0x18 + ldr r3, [r1, #0x0] + ldr r1, _020B2D80 ; =0x021CDD74 + mul r8, r3, r0 + ldr r6, _020B2D84 ; =0x021CDF04 + mul r7, r5, r0 + ldr r2, [r6, r8] + ldr r0, [r1, r3, lsl #0x2] + ldr r3, _020B2D88 ; =0x021CDF08 + str r2, [r6, r7] + ldr r2, [r3, r8] + str r0, [r1, r5, lsl #0x2] + str r2, [r3, r7] + b _020B2C3C +_020B2BE4: + ldr r1, _020B2D78 ; =0x021CDD70 + mov r0, #0x18 + ldr r2, [r1, #0x0] + ldr r7, _020B2D80 ; =0x021CDD74 + mul lr, r2, r0 + ldr r1, _020B2D8C ; =0x021CDEF4 + mul r12, r5, r0 + ldr r8, _020B2D90 ; =0x021CE1F4 + add r10, r1, lr + ldr r6, [r7, r2, lsl #0x2] + add r9, r1, r12 + ldmia r10!, {r0-r3} + stmia r9!, {r0-r3} + ldmia r10, {r0-r1} + str r6, [r7, r5, lsl #0x2] + add r7, r8, lr + stmia r9, {r0-r1} + add r6, r8, r12 + ldmia r7!, {r0-r3} + stmia r6!, {r0-r3} + ldmia r7, {r0-r1} + stmia r6, {r0-r1} +_020B2C3C: + ldr r0, _020B2D78 ; =0x021CDD70 + str r5, [r0, #0x0] +_020B2C44: + ldr r0, _020B2D78 ; =0x021CDD70 + ldr r2, _020B2D94 ; =0x021CDDF4 + ldr r0, [r0, #0x0] + mov r5, r4, lsl #0x3 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + add r4, r2, r4, lsl #0x3 + mov r6, r3, lsl #0x3 + ldrh r1, [r2, r5] + ldrh r0, [r4, #0x2] + add r3, r2, r3, lsl #0x3 + strh r1, [r2, r6] + strh r0, [r3, #0x2] + ldrh r2, [r4, #0x4] + ldrh r0, [r4, #0x6] + ldr r1, _020B2D98 ; =0x021CDDF8 + strh r2, [r3, #0x4] + strh r0, [r3, #0x6] + ldrh r0, [r1, r5] + cmp r0, #0x1 + moveq r0, #0x2 + streqh r0, [r1, r6] + strneh r0, [r1, r6] + ldmia sp!, {r4-r10,pc} +_020B2CA4: + ldr r0, _020B2D78 ; =0x021CDD70 + ldr r0, [r0, #0x0] + add r4, r0, #0x1 + cmp r4, #0x20 + movlt r0, #0x1 + movge r0, #0x0 + cmp r0, #0x0 + ldmeqia sp!, {r4-r10,pc} +_020B2CC4: ; 0x020B2CC4 + ldr r0, _020B2D7C ; =0x021CDD68 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020B2D10 + ldr r1, _020B2D78 ; =0x021CDD70 + mov r0, #0x18 + ldr r3, [r1, #0x0] + ldr r1, _020B2D80 ; =0x021CDD74 + mul r7, r3, r0 + ldr r5, _020B2D84 ; =0x021CDF04 + mul r6, r4, r0 + ldr r2, [r5, r7] + ldr r0, [r1, r3, lsl #0x2] + ldr r3, _020B2D88 ; =0x021CDF08 + str r2, [r5, r6] + ldr r2, [r3, r7] + str r0, [r1, r4, lsl #0x2] + str r2, [r3, r6] + b _020B2D68 +_020B2D10: + ldr r1, _020B2D78 ; =0x021CDD70 + mov r0, #0x18 + ldr r2, [r1, #0x0] + ldr ip, _020B2D80 ; =0x021CDD74 + mul r9, r2, r0 + ldr r1, _020B2D8C ; =0x021CDEF4 + mul r8, r4, r0 + ldr lr, _020B2D90 ; =0x021CE1F4 + add r6, r1, r9 + ldr r5, [r12, r2, lsl #0x2] + add r7, r1, r8 + ldmia r6!, {r0-r3} + stmia r7!, {r0-r3} + ldmia r6, {r0-r1} + add r6, lr, r9 + stmia r7, {r0-r1} + add lr, lr, r8 + ldmia r6!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r6, {r0-r1} + stmia lr, {r0-r1} + str r5, [r12, r4, lsl #0x2] +_020B2D68: + ldr r0, _020B2D78 ; =0x021CDD70 + str r4, [r0, #0x0] + ldmia sp!, {r4-r10,pc} + .balign 4 +_020B2D74: .word 0x021CDD6C +_020B2D78: .word 0x021CDD70 +_020B2D7C: .word 0x021CDD68 +_020B2D80: .word 0x021CDD74 +_020B2D84: .word 0x021CDF04 +_020B2D88: .word 0x021CDF08 +_020B2D8C: .word 0x021CDEF4 +_020B2D90: .word 0x021CE1F4 +_020B2D94: .word 0x021CDDF4 +_020B2D98: .word 0x021CDDF8 + + arm_func_start FUN_020B2D9C +FUN_020B2D9C: ; 0x020B2D9C + stmdb sp!, {r4-r6,lr} + mov r4, r0 + ldrh r0, [r4, #0x56] + cmp r0, #0x0 + bne _020B2DBC + add r0, r4, #0x30 + bl FUN_020B2E78 + ldmia sp!, {r4-r6,pc} +_020B2DBC: + bl FUN_020B2B58 + ldrh r0, [r4, #0x56] + ands r0, r0, #0x8 + beq _020B2E0C + ldr r0, _020B2E70 ; =0x021CDD6C + ldrsh r6, [r4, #0x52] + ldr r0, [r0, #0x0] + ldrsh r5, [r4, #0x50] + bl FUN_020B4F88 +_020B2DE0: ; 0x020B2DE0 + cmp r0, #0x0 + ldr r0, _020B2E70 ; =0x021CDD6C + rsbne r5, r5, #0x0 + ldr r0, [r0, #0x0] + bl FUN_020B4F74 +_020B2DF4: ; 0x020B2DF4 + cmp r0, #0x0 + rsbne r6, r6, #0x0 + mov r0, r5, lsl #0xc + mov r1, r6, lsl #0xc + mov r2, #0x0 + bl FUN_020B2A08 +_020B2E0C: + ldrh r0, [r4, #0x56] + ands r0, r0, #0x4 + beq _020B2E40 + ldrh r0, [r4, #0x54] + ldr r2, _020B2E74 ; =0x020FFA38 + mov r0, r0, asr #0x4 + mov r1, r0, lsl #0x1 + add r0, r1, #0x1 + mov r3, r1, lsl #0x1 + mov r1, r0, lsl #0x1 + ldrsh r0, [r2, r3] + ldrsh r1, [r2, r1] + bl FUN_020B2794 +_020B2E40: + ldrh r0, [r4, #0x56] + ands r0, r0, #0x2 + beq _020B2E5C + ldr r0, [r4, #0x48] + ldr r1, [r4, #0x4c] + mov r2, #0x1000 + bl FUN_020B28B4 +_020B2E5C: + add r0, r4, #0x30 + bl FUN_020B2E78 + mov r0, #0x1 + bl FUN_020B2B08 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B2E70: .word 0x021CDD6C +_020B2E74: .word 0x020FFA38 + + arm_func_start FUN_020B2E78 +FUN_020B2E78: ; 0x020B2E78 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r5, r0 + ldr r0, [r5, #0x8] + cmp r0, #0x1 + bne _020B309C + ldr r0, [r5, #0x0] + mov r2, #0x0 + ldrh r0, [r0, #0x2] + cmp r0, #0x0 + bls _020B2ED0 + ldr r3, _020B3174 ; =0x021CE8F4 + mov r4, r2 +_020B2EAC: + add r0, r3, r2, lsl #0x2 + str r4, [r0, #0x4] + ldr r0, [r5, #0x0] + add r2, r2, #0x1 + ldrh r1, [r0, #0x2] + mov r0, r2, lsl #0x10 + mov r2, r0, lsr #0x10 + cmp r2, r1 + blo _020B2EAC +_020B2ED0: + ldr r0, _020B3178 ; =0x021CDD6C + mov r6, #0x1 + ldr r1, [r0, #0x0] + ldr r0, _020B3174 ; =0x021CE8F4 + str r6, [r0, #0x404] + ldr r0, [r1, #0x80] + cmp r0, #0x0 + beq _020B2FD8 + bl FUN_020B4948 +_020B2EF4: ; 0x020B2EF4 + str r0, [sp, #0x0] + mov r0, r6 + bl FUN_020B497C + ldr r0, _020B3178 ; =0x021CDD6C + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x80] + bl FUN_020B4958 + ldr r2, [r5, #0x0] + mov r7, #0x0 + ldrh r0, [r2, #0x0] + cmp r0, #0x0 + bls _020B2FC0 + mov r11, r7 +_020B2F28: + ldr r0, [r2, #0x4] + ldr r9, [r5, #0xc] + add r10, r0, r7, lsl #0x3 + ldrh r0, [r10, #0x6] + and r0, r0, #0xff00 + mov r0, r0, lsl #0x8 + mov r8, r0, lsr #0x10 + ldr r0, _020B3174 ; =0x021CE8F4 + strh r8, [r0, #0x0] + bl FUN_020B2B58 + ldr r0, _020B3178 ; =0x021CDD6C + ldrsh r4, [r10, #0x4] + ldr r0, [r0, #0x0] + ldrsh r10, [r10, #0x2] + bl FUN_020B4F88 +_020B2F64: ; 0x020B2F64 + cmp r0, #0x0 + ldr r0, _020B3178 ; =0x021CDD6C + rsbne r10, r10, #0x0 + ldr r0, [r0, #0x0] + bl FUN_020B4F74 +_020B2F78: ; 0x020B2F78 + cmp r0, #0x0 + rsbne r4, r4, #0x0 + mov r2, r11 + mov r0, r10, lsl #0xc + mov r1, r4, lsl #0xc + bl FUN_020B2A08 + mov r0, #0x58 + mla r0, r8, r0, r9 + bl FUN_020B3554 + mov r0, r6 + bl FUN_020B2B08 + ldr r2, [r5, #0x0] + add r0, r7, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r2, #0x0] + mov r7, r0, lsr #0x10 + cmp r7, r1 + blo _020B2F28 +_020B2FC0: + mov r0, #0x0 + bl FUN_020B497C +_020B2FC8: ; 0x020B2FC8 + ldr r0, [sp, #0x0] + bl FUN_020B4958 + bl FUN_020B4968 + b _020B3088 +_020B2FD8: + ldr r2, [r5, #0x0] + mov r7, #0x0 + ldrh r0, [r2, #0x0] + cmp r0, #0x0 + bls _020B3088 + str r7, [sp, #0x4] + mov r11, #0x58 +_020B2FF4: + ldr r0, [r2, #0x4] + ldr r9, [r5, #0xc] + add r10, r0, r7, lsl #0x3 + ldrh r0, [r10, #0x6] + and r0, r0, #0xff00 + mov r0, r0, lsl #0x8 + mov r8, r0, lsr #0x10 + ldr r0, _020B3174 ; =0x021CE8F4 + strh r8, [r0, #0x0] + bl FUN_020B2B58 + ldr r0, _020B3178 ; =0x021CDD6C + ldrsh r4, [r10, #0x4] + ldr r0, [r0, #0x0] + ldrsh r10, [r10, #0x2] + bl FUN_020B4F88 +_020B3030: ; 0x020B3030 + cmp r0, #0x0 + ldr r0, _020B3178 ; =0x021CDD6C + rsbne r10, r10, #0x0 + ldr r0, [r0, #0x0] + bl FUN_020B4F74 +_020B3044: ; 0x020B3044 + cmp r0, #0x0 + rsbne r4, r4, #0x0 + ldr r2, [sp, #0x4] + mov r0, r10, lsl #0xc + mov r1, r4, lsl #0xc + bl FUN_020B2A08 + mla r0, r8, r11, r9 + bl FUN_020B3554 + mov r0, r6 + bl FUN_020B2B08 + ldr r2, [r5, #0x0] + add r0, r7, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r2, #0x0] + mov r7, r0, lsr #0x10 + cmp r7, r1 + blo _020B2FF4 +_020B3088: + ldr r0, _020B3174 ; =0x021CE8F4 + mov r1, #0x0 + str r1, [r0, #0x404] + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} +_020B309C: + ldr r0, _020B3178 ; =0x021CDD6C + ldr r7, [r5, #0xc] + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x80] + cmp r0, #0x0 + beq _020B312C + bl FUN_020B4948 + mov r6, r0 + mov r0, #0x1 + bl FUN_020B497C + ldr r0, _020B3178 ; =0x021CDD6C + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x80] + bl FUN_020B4958 +_020B30D4: ; 0x020B30D4 + ldr r0, [r5, #0x0] + mov r4, #0x0 + ldrh r0, [r0, #0x0] + cmp r0, #0x0 + bls _020B3110 + mov r8, #0x28 +_020B30EC: + mla r0, r4, r8, r7 + bl FUN_020B3474 + ldr r1, [r5, #0x0] + add r0, r4, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r1, #0x0] + mov r4, r0, lsr #0x10 + cmp r4, r1 + blo _020B30EC +_020B3110: + mov r0, #0x0 + bl FUN_020B497C + mov r0, r6 + bl FUN_020B4958 + bl FUN_020B4968 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} +_020B312C: + ldr r0, [r5, #0x0] + mov r4, #0x0 + ldrh r0, [r0, #0x0] + cmp r0, #0x0 + addls sp, sp, #0xc + ldmlsia sp!, {r4-r11,pc} +_020B3144: ; 0x020B3144 + mov r6, #0x28 +_020B3148: + mla r0, r4, r6, r7 + bl FUN_020B3474 + ldr r1, [r5, #0x0] + add r0, r4, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r1, #0x0] + mov r4, r0, lsr #0x10 + cmp r4, r1 + blo _020B3148 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B3174: .word 0x021CE8F4 +_020B3178: .word 0x021CDD6C + + arm_func_start FUN_020B317C +FUN_020B317C: ; 0x020B317C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020B31EC ; =0x021CDD6C + mov r5, r0 + ldr r1, [r1, #0x0] + ldr r1, [r1, #0x80] + cmp r1, #0x0 + beq _020B31E0 + bl FUN_020B4948 + mov r4, r0 + mov r0, #0x1 + bl FUN_020B497C + ldr r0, _020B31EC ; =0x021CDD6C + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x80] + bl FUN_020B4958 + mov r0, r5 + bl FUN_020B3554 +_020B31C4: ; 0x020B31C4 + mov r0, #0x0 + bl FUN_020B497C + mov r0, r4 + bl FUN_020B4958 + bl FUN_020B4968 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} +_020B31E0: + bl FUN_020B3554 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B31EC: .word 0x021CDD6C + + arm_func_start FUN_020B31F0 +FUN_020B31F0: ; 0x020B31F0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020B3260 ; =0x04000448 + mov r2, #0x1 + ldr r0, _020B3264 ; =0x021CDD6C + str r2, [r1, #0x0] + ldr r2, [r0, #0x0] + ldr r3, [r2, #0x7c] + cmp r3, #0x0 + beq _020B324C + ands r0, r3, #0x1 + ldrne r0, _020B3268 ; =0x021CDD68 + movne r1, #0x0 + strne r1, [r0, #0x0] + ands r0, r3, #0x2 + beq _020B323C + mov r0, #0x0 + str r0, [r2, #0x74] + bl FUN_020B4DA0 +_020B323C: + ldr r0, _020B3264 ; =0x021CDD6C + mov r1, #0x0 + ldr r0, [r0, #0x0] + str r1, [r0, #0x7c] +_020B324C: + ldr r0, _020B3264 ; =0x021CDD6C + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B3260: .word 0x04000448 +_020B3264: .word 0x021CDD6C +_020B3268: .word 0x021CDD68 + + arm_func_start FUN_020B326C +FUN_020B326C: ; 0x020B326C + stmdb sp!, {r4-r8,lr} + ldr r5, _020B330C ; =0x021CDD60 + ldr r3, _020B3310 ; =0x021CDD6C + ldrh r6, [r5, #0x0] + ldr r2, _020B3314 ; =0x021CDD70 + mov r4, #0x0 + ldr r7, _020B3318 ; =0x0000FFFE + ldr r1, _020B331C ; =0x02106570 + str r0, [r3, #0x0] + str r4, [r2, #0x0] + strh r7, [r1, #0x0] + cmp r6, #0x0 + ble _020B32D0 + ldr r8, _020B3320 ; =0x021CE4F4 + mvn r7, #0x0 + mov r6, #0x10 +_020B32AC: + mov r0, r7 + mov r2, r6 + add r1, r8, #0x10 + bl MIi_CpuClearFast + ldrh r0, [r5, #0x0] + add r4, r4, #0x1 + add r8, r8, #0x20 + cmp r4, r0 + blt _020B32AC +_020B32D0: + ldr r4, _020B330C ; =0x021CDD60 + mov r0, #0x0 + ldr r3, _020B3324 ; =0x021CDD64 + ldr r1, _020B3328 ; =0x021CDDF4 + mov r2, #0x100 + strh r0, [r4, #0x0] + strh r0, [r3, #0x0] + bl MIi_CpuClearFast + ldr r1, _020B332C ; =0x04000444 + mov r2, #0x0 + ldr r0, _020B3330 ; =0x04000454 + str r2, [r1, #0x0] + str r2, [r0, #0x0] + bl FUN_020B4178 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020B330C: .word 0x021CDD60 +_020B3310: .word 0x021CDD6C +_020B3314: .word 0x021CDD70 +_020B3318: .word 0x0000FFFE +_020B331C: .word 0x02106570 +_020B3320: .word 0x021CE4F4 +_020B3324: .word 0x021CDD64 +_020B3328: .word 0x021CDDF4 +_020B332C: .word 0x04000444 +_020B3330: .word 0x04000454 + + arm_func_start FUN_020B3334 +FUN_020B3334: ; 0x020B3334 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r1, r4 + mov r0, #0x0 + mov r2, #0x48 + bl MIi_CpuClear16 + mov r0, #0x1 + str r0, [r4, #0x10] + mov r0, #0x3 + ldr r1, _020B3380 ; =FUN_020B3EE0 + str r0, [r4, #0x14] + ldr r0, _020B3384 ; =FUN_020B3E48 + str r1, [r4, #0x18] + ldr r1, _020B3388 ; =FUN_020B3C40 + str r0, [r4, #0x1c] + ldr r0, _020B338C ; =FUN_020B3B90 + str r1, [r4, #0x20] + str r0, [r4, #0x24] + ldmia sp!, {r4,pc} + .balign 4 +_020B3380: .word FUN_020B3EE0 +_020B3384: .word FUN_020B3E48 +_020B3388: .word FUN_020B3C40 +_020B338C: .word FUN_020B3B90 + + arm_func_start FUN_020B3390 +FUN_020B3390: ; 0x020B3390 + ldr r2, [r0, #0x70] + str r2, [r1, #0x30] + str r1, [r0, #0x70] + bx lr + + arm_func_start FUN_020B33A0 +FUN_020B33A0: ; 0x020B33A0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r4, r0 + bl FUN_020B504C + mov r7, #0x0 + str r7, [r4, #0x70] + str r7, [r4, #0x74] + str r7, [r4, #0x78] + str r7, [r4, #0x7c] + str r7, [r4, #0x80] + str r7, [r4, #0x84] + strh r7, [r4, #0x88] + strh r7, [r4, #0x8a] + str r7, [r4, #0x8c] + str r7, [r4, #0x90] + ldr r1, _020B3454 ; =0x021CDD70 + strh r7, [r4, #0x94] + ldr r2, _020B3458 ; =0x0000FFFE + ldr r0, _020B345C ; =0x02106570 + ldr r6, _020B3460 ; =0x021CE4F4 + str r7, [r1, #0x0] + strh r2, [r0, #0x0] + mvn r5, #0x0 + mov r4, #0x10 +_020B3400: + mov r0, r5 + mov r2, r4 + add r1, r6, #0x10 + bl MIi_CpuClearFast + add r7, r7, #0x1 + cmp r7, #0x20 + add r6, r6, #0x20 + blt _020B3400 + ldr ip, _020B3464 ; =0x021CDD60 + mov r0, #0x0 + ldr r3, _020B3468 ; =0x021CDD64 + ldr r1, _020B346C ; =0x021CDDF4 + mov r2, #0x100 + strh r0, [r12, #0x0] + strh r0, [r3, #0x0] + bl MIi_CpuClearFast + ldr r0, _020B3470 ; =0x021CDD68 + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B3454: .word 0x021CDD70 +_020B3458: .word 0x0000FFFE +_020B345C: .word 0x02106570 +_020B3460: .word 0x021CE4F4 +_020B3464: .word 0x021CDD60 +_020B3468: .word 0x021CDD64 +_020B346C: .word 0x021CDDF4 +_020B3470: .word 0x021CDD68 + + arm_func_start FUN_020B3474 +FUN_020B3474: ; 0x020B3474 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r0, [r5, #0x8] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} +_020B3490: ; 0x020B3490 + ldr r4, [r5, #0x0] + bl FUN_020B2B58 + ldrh r0, [r5, #0x1e] + ands r0, r0, #0x8 + beq _020B34E4 + ldr r0, _020B354C ; =0x021CDD6C + ldrsh r7, [r5, #0x1a] + ldr r0, [r0, #0x0] + ldrsh r6, [r5, #0x18] + bl FUN_020B4F88 +_020B34B8: ; 0x020B34B8 + cmp r0, #0x0 + ldr r0, _020B354C ; =0x021CDD6C + rsbne r6, r6, #0x0 + ldr r0, [r0, #0x0] + bl FUN_020B4F74 +_020B34CC: ; 0x020B34CC + cmp r0, #0x0 + rsbne r7, r7, #0x0 + mov r0, r6, lsl #0xc + mov r1, r7, lsl #0xc + mov r2, #0x0 + bl FUN_020B2A08 +_020B34E4: + ldrh r0, [r5, #0x1e] + ands r0, r0, #0x4 + beq _020B3518 + ldrh r0, [r5, #0x1c] + ldr r2, _020B3550 ; =0x020FFA38 + mov r0, r0, asr #0x4 + mov r1, r0, lsl #0x1 + add r0, r1, #0x1 + mov r3, r1, lsl #0x1 + mov r1, r0, lsl #0x1 + ldrsh r0, [r2, r3] + ldrsh r1, [r2, r1] + bl FUN_020B2794 +_020B3518: + ldrh r0, [r5, #0x1e] + ands r0, r0, #0x2 + beq _020B3534 + ldr r0, [r5, #0x10] + ldr r1, [r5, #0x14] + mov r2, #0x1000 + bl FUN_020B28B4 +_020B3534: + mov r0, r4 + bl FUN_020B3554 + mov r0, #0x1 + bl FUN_020B2B08 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B354C: .word 0x021CDD6C +_020B3550: .word 0x020FFA38 + + arm_func_start FUN_020B3554 +FUN_020B3554: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldrh r0, [r5, #0x4a] + ldr r4, [r5, #0x2c] + cmp r0, #0x0 + bne _020B35C0 + ldr r2, [r5, #0x34] + mvn r0, #0x0 + cmp r2, r0 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + beq _020B35B0 + ldr r1, _020B36B4 ; =0x02106574 + mov r0, r4 + str r2, [r1, #0x0] + bl FUN_020B36C0 + ldr r0, _020B36B4 ; =0x02106574 + mvn r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} +_020B35B0: + mov r0, r4 + bl FUN_020B36C0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} +_020B35C0: + bl FUN_020B2B58 + ldrh r0, [r5, #0x4a] + ands r0, r0, #0x8 + beq _020B3610 + ldr r0, _020B36B8 ; =0x021CDD6C + ldrsh r7, [r5, #0x46] + ldr r0, [r0, #0x0] + ldrsh r6, [r5, #0x44] + bl FUN_020B4F88 +_020B35E4: ; 0x020B35E4 + cmp r0, #0x0 + ldr r0, _020B36B8 ; =0x021CDD6C + rsbne r6, r6, #0x0 + ldr r0, [r0, #0x0] + bl FUN_020B4F74 +_020B35F8: ; 0x020B35F8 + cmp r0, #0x0 + rsbne r7, r7, #0x0 + mov r0, r6, lsl #0xc + mov r1, r7, lsl #0xc + mov r2, #0x0 + bl FUN_020B2A08 +_020B3610: + ldrh r0, [r5, #0x4a] + ands r0, r0, #0x4 + beq _020B3644 + ldrh r0, [r5, #0x48] + ldr r2, _020B36BC ; =0x020FFA38 + mov r0, r0, asr #0x4 + mov r1, r0, lsl #0x1 + add r0, r1, #0x1 + mov r3, r1, lsl #0x1 + mov r1, r0, lsl #0x1 + ldrsh r0, [r2, r3] + ldrsh r1, [r2, r1] + bl FUN_020B2794 +_020B3644: + ldrh r0, [r5, #0x4a] + ands r0, r0, #0x2 + beq _020B3660 + ldr r0, [r5, #0x3c] + ldr r1, [r5, #0x40] + mov r2, #0x1000 + bl FUN_020B28B4 +_020B3660: + ldr r2, [r5, #0x34] + mvn r0, #0x0 + cmp r2, r0 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + beq _020B369C + ldr r1, _020B36B4 ; =0x02106574 + mov r0, r4 + str r2, [r1, #0x0] + bl FUN_020B36C0 + ldr r0, _020B36B4 ; =0x02106574 + mvn r1, #0x0 + str r1, [r0, #0x0] + b _020B36A4 +_020B369C: + mov r0, r4 + bl FUN_020B36C0 +_020B36A4: + mov r0, #0x1 + bl FUN_020B2B08 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B36B4: .word 0x02106574 +_020B36B8: .word 0x021CDD6C +_020B36BC: .word 0x020FFA38 + + arm_func_start FUN_020B36C0 +FUN_020B36C0: ; 0x020B36C0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr r5, _020B3B54 ; =0x021CDD6C + mov r10, r0 + ldr r0, [r5, #0x0] + ldr r1, [r0, #0x7c] + str r0, [sp, #0x0] + ldr r9, [r0, #0x70] + ands r0, r1, #0x2 + beq _020B38EC + ldr r0, [r9, #0x14] + cmp r0, #0x0 + beq _020B3840 + ldr r0, _020B3B58 ; =0x021CDD68 + mov r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020B3720 + ldr r2, _020B3B5C ; =0x02106570 + ldr r0, _020B3B60 ; =0x0000FFFE + ldrh r2, [r2, #0x0] + cmp r2, r0 + movne r0, #0x1 + bne _020B3724 +_020B3720: + mov r0, #0x0 +_020B3724: + cmp r0, #0x0 + beq _020B37AC + ldr r0, _020B3B64 ; =0x021CE8F4 + ldr r1, [r0, #0x404] + cmp r1, #0x0 + beq _020B3788 + ldrh r1, [r0, #0x0] + ldr r0, _020B3B68 ; =0x021CE8F8 + ldr r1, [r0, r1, lsl #0x2] + cmp r1, #0x0 + bne _020B37AC + bl FUN_020B4010 + ldr r0, _020B3B6C ; =0x021CDD70 + ldr r2, _020B3B70 ; =0x021CDDF4 + ldr r0, [r0, #0x0] + ldr r1, _020B3B64 ; =0x021CE8F4 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0xd + ldrh r3, [r2, r0] + ldr r4, _020B3B74 ; =0x021CE4F4 + ldrh r2, [r1, #0x0] + ldr r0, _020B3B68 ; =0x021CE8F8 + add r1, r4, r3, lsl #0x5 + str r1, [r0, r2, lsl #0x2] + b _020B37AC +_020B3788: + bl FUN_020B4010 + ldr r0, _020B3B6C ; =0x021CDD70 + ldr r1, _020B3B70 ; =0x021CDDF4 + ldr r0, [r0, #0x0] + ldr r2, _020B3B74 ; =0x021CE4F4 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0xd + ldrh r0, [r1, r0] + add r1, r2, r0, lsl #0x5 +_020B37AC: + ldr r0, _020B3B58 ; =0x021CDD68 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldreq r0, _020B3B6C ; =0x021CDD70 + ldreq r3, _020B3B78 ; =0x021CDEF4 + ldreq r2, [r0, #0x0] + moveq r0, #0x18 + mlaeq r0, r2, r0, r3 + beq _020B37FC + ldr r2, _020B3B6C ; =0x021CDD70 + mov r0, #0x18 + ldr r2, [r2, #0x0] + ldr r3, _020B3B7C ; =0x021CDF04 + mul r4, r2, r0 + ldr r2, _020B3B80 ; =0x021CDF08 + ldr r3, [r3, r4] + ldr r0, _020B3B84 ; =0x02106578 + ldr r2, [r2, r4] + str r3, [r0, #0x10] + str r2, [r0, #0x14] +_020B37FC: + bl FUN_020B4FAC + ldr r1, _020B3B88 ; =0x02106574 + mvn r0, #0x0 + ldr r1, [r1, #0x0] + cmp r1, r0 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + beq _020B3830 + mov r0, r10 + bl FUN_020B4BF4 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} +_020B3830: + mov r0, r10 + bl FUN_020B4CDC + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} +_020B3840: + ldr r0, _020B3B6C ; =0x021CDD70 + ldr r1, _020B3B8C ; =0x021CDD74 + ldr r2, [r0, #0x0] + ldr r0, [sp, #0x0] + ldr r1, [r1, r2, lsl #0x2] + bl FUN_020B4FA4 + ldr r0, _020B3B58 ; =0x021CDD68 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldreq r0, _020B3B6C ; =0x021CDD70 + ldreq r2, _020B3B78 ; =0x021CDEF4 + ldreq r1, [r0, #0x0] + moveq r0, #0x18 + mlaeq r0, r1, r0, r2 + beq _020B38A8 + ldr r1, _020B3B6C ; =0x021CDD70 + mov r0, #0x18 + ldr r1, [r1, #0x0] + ldr r2, _020B3B7C ; =0x021CDF04 + mul r3, r1, r0 + ldr r1, _020B3B80 ; =0x021CDF08 + ldr r2, [r2, r3] + ldr r0, _020B3B84 ; =0x02106578 + ldr r1, [r1, r3] + str r2, [r0, #0x10] + str r1, [r0, #0x14] +_020B38A8: + bl FUN_020B4FC4 + ldr r1, _020B3B88 ; =0x02106574 + mvn r0, #0x0 + ldr r1, [r1, #0x0] + cmp r1, r0 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + beq _020B38DC + mov r0, r10 + bl FUN_020B4BF4 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} +_020B38DC: + mov r0, r10 + bl FUN_020B4CDC + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} +_020B38EC: + cmp r9, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r11,pc} +_020B38F8: ; 0x020B38F8 + ldr r4, _020B3B6C ; =0x021CDD70 + ldr fp, _020B3B78 ; =0x021CDEF4 + mov r7, #0x0 + mov r6, #0x1 +_020B3908: + ldr r0, [r9, #0x10] + cmp r0, #0x0 + beq _020B3B40 + ldr r0, [r9, #0x14] + cmp r0, #0x0 + beq _020B3A8C + ldr r8, [r5, #0x0] + mov r1, r9 + str r9, [r8, #0x74] + mov r0, r8 + bl FUN_020B4F9C + ldr r1, [r9, #0x28] + ldr r2, [r9, #0x2c] + mov r0, r8 + bl FUN_020B5034 + mov r0, r8 + bl FUN_020B4E0C + ldr r0, _020B3B58 ; =0x021CDD68 + mov r1, r7 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020B3978 + ldr r0, _020B3B5C ; =0x02106570 + ldrh r2, [r0, #0x0] + ldr r0, _020B3B60 ; =0x0000FFFE + cmp r2, r0 + movne r0, r6 + bne _020B397C +_020B3978: + mov r0, r7 +_020B397C: + cmp r0, #0x0 + beq _020B3A04 + ldr r0, _020B3B64 ; =0x021CE8F4 + ldr r0, [r0, #0x404] + cmp r0, #0x0 + beq _020B39E4 + ldr r0, _020B3B64 ; =0x021CE8F4 + ldrh r1, [r0, #0x0] + add r0, r0, r1, lsl #0x2 + ldr r1, [r0, #0x4] + cmp r1, #0x0 + bne _020B3A04 + bl FUN_020B4010 + ldr r0, _020B3B64 ; =0x021CE8F4 + ldr r2, [r4, #0x0] + ldrh r1, [r0, #0x0] + mov r0, r2, lsl #0x10 + mov r2, r0, lsr #0xd + ldr r0, _020B3B70 ; =0x021CDDF4 + ldrh r3, [r0, r2] + ldr r0, _020B3B64 ; =0x021CE8F4 + add r2, r0, r1, lsl #0x2 + ldr r0, _020B3B74 ; =0x021CE4F4 + add r1, r0, r3, lsl #0x5 + str r1, [r2, #0x4] + b _020B3A04 +_020B39E4: + bl FUN_020B4010 +_020B39E8: ; 0x020B39E8 + ldr r0, [r4, #0x0] + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0xd + ldr r0, _020B3B70 ; =0x021CDDF4 + ldrh r1, [r0, r1] + ldr r0, _020B3B74 ; =0x021CE4F4 + add r1, r0, r1, lsl #0x5 +_020B3A04: + ldr r0, _020B3B58 ; =0x021CDD68 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldreq r2, [r4, #0x0] + moveq r0, #0x18 + mlaeq r0, r2, r0, r11 + beq _020B3A44 + ldr r2, [r4, #0x0] + mov r0, #0x18 + mla r8, r2, r0, r11 + ldr r0, _020B3B84 ; =0x02106578 + ldr r3, [r8, #0x10] + mov r2, r0 + str r3, [r2, #0x10] + ldr r3, [r8, #0x14] + str r3, [r2, #0x14] +_020B3A44: + bl FUN_020B4FAC + ldr r0, _020B3B88 ; =0x02106574 + ldr r1, [r0, #0x0] + mvn r0, #0x0 + cmp r1, r0 + movne r0, r6 + moveq r0, r7 + cmp r0, #0x0 + beq _020B3A74 + mov r0, r10 + bl FUN_020B4BF4 + b _020B3A7C +_020B3A74: + mov r0, r10 + bl FUN_020B4CDC +_020B3A7C: + ldr r0, [r5, #0x0] + str r7, [r0, #0x74] + bl FUN_020B4DA0 + b _020B3B40 +_020B3A8C: + ldr r8, [r5, #0x0] + mov r1, r9 + mov r0, r8 + str r9, [r8, #0x74] + bl FUN_020B4F9C + mov r0, r8 + bl FUN_020B4E0C + ldr r2, [r4, #0x0] + ldr r1, _020B3B8C ; =0x021CDD74 + ldr r0, [sp, #0x0] + ldr r1, [r1, r2, lsl #0x2] + bl FUN_020B4FA4 + ldr r0, _020B3B58 ; =0x021CDD68 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldreq r1, [r4, #0x0] + moveq r0, #0x18 + mlaeq r0, r1, r0, r11 + beq _020B3AFC + ldr r1, [r4, #0x0] + mov r0, #0x18 + mla r3, r1, r0, r11 + ldr r0, _020B3B84 ; =0x02106578 + ldr r2, [r3, #0x10] + mov r1, r0 + str r2, [r1, #0x10] + ldr r2, [r3, #0x14] + str r2, [r1, #0x14] +_020B3AFC: + bl FUN_020B4FC4 + ldr r0, _020B3B88 ; =0x02106574 + ldr r1, [r0, #0x0] + mvn r0, #0x0 + cmp r1, r0 + movne r0, r6 + moveq r0, r7 + cmp r0, #0x0 + beq _020B3B2C + mov r0, r10 + bl FUN_020B4BF4 + b _020B3B34 +_020B3B2C: + mov r0, r10 + bl FUN_020B4CDC +_020B3B34: + ldr r0, [r5, #0x0] + str r7, [r0, #0x74] + bl FUN_020B4DA0 +_020B3B40: + ldr r9, [r9, #0x30] + cmp r9, #0x0 + bne _020B3908 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B3B54: .word 0x021CDD6C +_020B3B58: .word 0x021CDD68 +_020B3B5C: .word 0x02106570 +_020B3B60: .word 0x0000FFFE +_020B3B64: .word 0x021CE8F4 +_020B3B68: .word 0x021CE8F8 +_020B3B6C: .word 0x021CDD70 +_020B3B70: .word 0x021CDDF4 +_020B3B74: .word 0x021CE4F4 +_020B3B78: .word 0x021CDEF4 +_020B3B7C: .word 0x021CDF04 +_020B3B80: .word 0x021CDF08 +_020B3B84: .word 0x02106578 +_020B3B88: .word 0x02106574 +_020B3B8C: .word 0x021CDD74 + + arm_func_start FUN_020B3B90 +FUN_020B3B90: ; 0x020B3B90 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + ldr r0, _020B3C24 ; =0x021CDD6C + mov r12, r1 + ldr r0, [r0, #0x0] + mov r3, r2 + ldr r1, [r0, #0x74] + ldr r2, [r1, #0x44] + cmp r2, #0x0 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4-r6,pc} +_020B3BBC: ; 0x020B3BBC + ldr r2, _020B3C28 ; =0x021CDD68 + ldr r2, [r2, #0x0] + cmp r2, #0x0 + ldreq r2, _020B3C2C ; =0x021CDD70 + ldreq r4, _020B3C30 ; =0x021CDEF4 + ldreq lr, [r2, #0x0] + moveq r2, #0x18 + mlaeq r6, lr, r2, r4 + beq _020B3C0C + ldr lr, _020B3C2C ; =0x021CDD70 + mov r2, #0x18 + ldr lr, [lr, #0x0] + ldr r4, _020B3C34 ; =0x021CDF04 + mul r5, lr, r2 + ldr r2, _020B3C38 ; =0x021CDF08 + ldr r4, [r4, r5] + ldr r6, _020B3C3C ; =0x02106578 + ldr r2, [r2, r5] + str r4, [r6, #0x10] + str r2, [r6, #0x14] +_020B3C0C: + str r6, [sp, #0x0] + ldr lr, [r1, #0x44] + mov r2, r12 + blx lr + add sp, sp, #0x8 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B3C24: .word 0x021CDD6C +_020B3C28: .word 0x021CDD68 +_020B3C2C: .word 0x021CDD70 +_020B3C30: .word 0x021CDEF4 +_020B3C34: .word 0x021CDF04 +_020B3C38: .word 0x021CDF08 +_020B3C3C: .word 0x02106578 + + arm_func_start FUN_020B3C40 +FUN_020B3C40: ; 0x020B3C40 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + ldr r3, _020B3E2C ; =0x021CDD6C + add r4, r0, #0x38 + ldr r0, [r3, #0x0] + mov r6, r1 + mov r5, r2 + bl FUN_020B278C +_020B3C60: ; 0x020B3C60 + cmp r0, #0x0 + beq _020B3C90 + ldrh r1, [r4, #0x4] + and r1, r1, #0xf000 + mov r1, r1, lsl #0x4 + mov r1, r1, lsr #0x10 + bl FUN_020B10B0 + ldr r1, [r4, #0x4] + and r0, r0, #0xf + bic r1, r1, #0xf000 + orr r0, r1, r0, lsl #0xc + str r0, [r4, #0x4] +_020B3C90: + ldr r0, _020B3E2C ; =0x021CDD6C + ldr r1, [r0, #0x0] + ldr r0, [r1, #0x84] + cmp r0, #0x0 + beq _020B3DA4 + ldr r0, [r1, #0x84] + ands r0, r0, #0x1 + beq _020B3CC8 + ldrh r0, [r1, #0x88] + ldr r1, [r4, #0x4] + bic r1, r1, #0xc00 + and r0, r0, #0x3 + orr r0, r1, r0, lsl #0xa + str r0, [r4, #0x4] +_020B3CC8: + ldr r0, _020B3E2C ; =0x021CDD6C + ldr r1, [r0, #0x0] + ldr r0, [r1, #0x84] + ands r0, r0, #0x2 + beq _020B3CF4 + ldrh r0, [r1, #0x8a] + ldr r1, [r4, #0x4] + bic r1, r1, #0xf000 + and r0, r0, #0xf + orr r0, r1, r0, lsl #0xc + str r0, [r4, #0x4] +_020B3CF4: + ldr r0, _020B3E2C ; =0x021CDD6C + ldr r1, [r0, #0x0] + ldr r0, [r1, #0x84] + ands r0, r0, #0x10 + beq _020B3D2C + ldr r2, [r4, #0x4] + ldrh r0, [r1, #0x94] + mov r1, r2, lsl #0x10 + bic r2, r2, #0xf000 + add r0, r0, r1, lsr #0x1c + and r0, r0, #0xf + and r0, r0, #0xf + orr r0, r2, r0, lsl #0xc + str r0, [r4, #0x4] +_020B3D2C: + ldr r0, _020B3E2C ; =0x021CDD6C + ldr r1, [r0, #0x0] + ldr r0, [r1, #0x84] + ands r0, r0, #0x4 + beq _020B3D60 + ldr r0, [r1, #0x90] + cmp r0, #0x0 + ldrne r0, [r4, #0x0] + orrne r0, r0, #0x1000 + strne r0, [r4, #0x0] + ldreq r0, [r4, #0x0] + biceq r0, r0, #0x1000 + streq r0, [r4, #0x0] +_020B3D60: + ldr r0, _020B3E2C ; =0x021CDD6C + ldr r1, [r0, #0x0] + ldr r0, [r1, #0x84] + ands r0, r0, #0x8 + beq _020B3DA4 + ldr r0, [r4, #0x0] + ldrh r2, [r4, #0x4] + ldr r1, [r1, #0x8c] + bic r0, r0, #0xc00 + orr r0, r0, r1, lsl #0xa + str r0, [r4, #0x0] + ldrh r0, [r4, #0x4] + and r1, r2, #0xf000 + mov r1, r1, asr #0xc + bic r0, r0, #0xf000 + orr r0, r0, r1, lsl #0xc + strh r0, [r4, #0x4] +_020B3DA4: + ldr r0, _020B3E2C ; =0x021CDD6C + ldr r0, [r0, #0x0] + ldr r1, [r0, #0x74] + ldr r2, [r1, #0x40] + cmp r2, #0x0 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4-r6,pc} +_020B3DC0: ; 0x020B3DC0 + ldr r2, _020B3E30 ; =0x021CDD68 + ldr r2, [r2, #0x0] + cmp r2, #0x0 + ldreq r2, _020B3E34 ; =0x021CDD70 + ldreq r4, _020B3E38 ; =0x021CDEF4 + ldreq r3, [r2, #0x0] + moveq r2, #0x18 + mlaeq r4, r3, r2, r4 + beq _020B3E10 + ldr r3, _020B3E34 ; =0x021CDD70 + mov r2, #0x18 + ldr r4, [r3, #0x0] + ldr r3, _020B3E3C ; =0x021CDF04 + mul r12, r4, r2 + ldr r2, _020B3E40 ; =0x021CDF08 + ldr r3, [r3, r12] + ldr r4, _020B3E44 ; =0x02106578 + ldr r2, [r2, r12] + str r3, [r4, #0x10] + str r2, [r4, #0x14] +_020B3E10: + str r4, [sp, #0x0] + ldr r4, [r1, #0x40] + mov r2, r6 + mov r3, r5 + blx r4 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B3E2C: .word 0x021CDD6C +_020B3E30: .word 0x021CDD68 +_020B3E34: .word 0x021CDD70 +_020B3E38: .word 0x021CDEF4 +_020B3E3C: .word 0x021CDF04 +_020B3E40: .word 0x021CDF08 +_020B3E44: .word 0x02106578 + + arm_func_start FUN_020B3E48 +FUN_020B3E48: ; 0x020B3E48 + stmdb sp!, {r4,lr} + ldr r0, _020B3EC4 ; =0x021CDD6C + mov r2, r1 + ldr r0, [r0, #0x0] + ldr r1, [r0, #0x74] + ldr r3, [r1, #0x3c] + cmp r3, #0x0 + ldmeqia sp!, {r4,pc} +_020B3E68: ; 0x020B3E68 + ldr r3, _020B3EC8 ; =0x021CDD68 + ldr r3, [r3, #0x0] + cmp r3, #0x0 + ldreq r3, _020B3ECC ; =0x021CDD70 + ldreq lr, _020B3ED0 ; =0x021CDEF4 + ldreq r12, [r3, #0x0] + moveq r3, #0x18 + mlaeq r3, r12, r3, lr + beq _020B3EB8 + ldr ip, _020B3ECC ; =0x021CDD70 + mov r3, #0x18 + ldr r12, [r12, #0x0] + ldr lr, _020B3ED4 ; =0x021CDF04 + mul r4, r12, r3 + ldr ip, _020B3ED8 ; =0x021CDF08 + ldr lr, [lr, r4] + ldr r3, _020B3EDC ; =0x02106578 + ldr r12, [r12, r4] + str lr, [r3, #0x10] + str r12, [r3, #0x14] +_020B3EB8: + ldr r12, [r1, #0x3c] + blx r12 + ldmia sp!, {r4,pc} + .balign 4 +_020B3EC4: .word 0x021CDD6C +_020B3EC8: .word 0x021CDD68 +_020B3ECC: .word 0x021CDD70 +_020B3ED0: .word 0x021CDEF4 +_020B3ED4: .word 0x021CDF04 +_020B3ED8: .word 0x021CDF08 +_020B3EDC: .word 0x02106578 + + arm_func_start FUN_020B3EE0 +FUN_020B3EE0: ; 0x020B3EE0 + stmdb sp!, {r4-r6,lr} + ldr r2, _020B3FF4 ; =0x021CDD6C + mov r6, r0 + ldr r0, [r2, #0x0] + mov r5, r1 + ldr r4, [r0, #0x74] + ldr r0, [r4, #0x34] + cmp r0, #0x0 + beq _020B3F7C + ldr r0, _020B3FF8 ; =0x021CDD68 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldreq r0, _020B3FFC ; =0x021CDD70 + ldreq r1, _020B4000 ; =0x021CDEF4 + ldreq r2, [r0, #0x0] + moveq r0, #0x18 + mlaeq r1, r2, r0, r1 + beq _020B3F54 + ldr r1, _020B3FFC ; =0x021CDD70 + mov r0, #0x18 + ldr r2, [r1, #0x0] + ldr r1, _020B4004 ; =0x021CDF04 + mul r3, r2, r0 + ldr r0, _020B4008 ; =0x021CDF08 + ldr r2, [r1, r3] + ldr r1, _020B400C ; =0x02106578 + ldr r0, [r0, r3] + str r2, [r1, #0x10] + str r0, [r1, #0x14] +_020B3F54: + ldr r3, [r4, #0x34] + mov r0, r5 + mov r2, r4 + blx r3 + cmp r0, #0x0 + moveq r0, #0x0 + streq r0, [r6, #0x30] + ldmeqia sp!, {r4-r6,pc} +_020B3F74: ; 0x020B3F74 + mov r0, #0x1 + str r0, [r6, #0x30] +_020B3F7C: + ldr r0, [r4, #0x38] + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020B3F88: ; 0x020B3F88 + ldr r0, _020B3FF8 ; =0x021CDD68 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldreq r0, _020B3FFC ; =0x021CDD70 + ldreq r2, _020B4000 ; =0x021CDEF4 + ldreq r1, [r0, #0x0] + moveq r0, #0x18 + mlaeq r3, r1, r0, r2 + beq _020B3FD8 + ldr r1, _020B3FFC ; =0x021CDD70 + mov r0, #0x18 + ldr r2, [r1, #0x0] + ldr r1, _020B4004 ; =0x021CDF04 + mul r6, r2, r0 + ldr r0, _020B4008 ; =0x021CDF08 + ldr r1, [r1, r6] + ldr r3, _020B400C ; =0x02106578 + ldr r0, [r0, r6] + str r1, [r3, #0x10] + str r0, [r3, #0x14] +_020B3FD8: + ldr r0, _020B3FF4 ; =0x021CDD6C + ldr r6, [r4, #0x38] + ldr r0, [r0, #0x0] + mov r1, r4 + mov r2, r5 + blx r6 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B3FF4: .word 0x021CDD6C +_020B3FF8: .word 0x021CDD68 +_020B3FFC: .word 0x021CDD70 +_020B4000: .word 0x021CDEF4 +_020B4004: .word 0x021CDF04 +_020B4008: .word 0x021CDF08 +_020B400C: .word 0x02106578 + + arm_func_start FUN_020B4010 +FUN_020B4010: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020B4154 ; =0x021CDD70 + ldr r1, _020B4158 ; =0x021CDDF4 + ldr r0, [r0, #0x0] + mov r2, #0x1 + mov r0, r0, lsl #0x10 + add r3, r1, r0, lsr #0xd + ldrh r0, [r3, #0x4] + cmp r0, #0x1 + beq _020B4044 + cmp r0, #0x2 + movne r2, #0x0 +_020B4044: + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} +_020B4050: ; 0x020B4050 + ldr r0, _020B415C ; =0x021CDD60 + mov r2, #0x10 + ldrh r4, [r0, #0x0] + cmp r4, #0x1f + addcc r1, r4, #0x1 + strcch r1, [r0, #0x0] + ldr r0, _020B4160 ; =0x021CE4F4 + ldrh r5, [r3, #0x2] + add r0, r0, r4, lsl #0x5 + add r1, r0, #0x10 + mvn r0, #0x0 + strh r4, [r3, #0x0] + bl MIi_CpuClearFast + ldr r0, _020B4154 ; =0x021CDD70 + ldr r1, _020B4164 ; =0x021CDD68 + ldr r0, [r0, #0x0] + ldr r2, [r1, #0x0] + mov r1, r0, lsl #0x10 + cmp r2, #0x0 + ldr r3, _020B4158 ; =0x021CDDF4 + mov r1, r1, lsr #0xd + ldrh r1, [r3, r1] + ldr r3, _020B4160 ; =0x021CE4F4 + moveq r2, #0x18 + add r1, r3, r1, lsl #0x5 + ldreq r3, _020B4168 ; =0x021CE1F4 + mlaeq r12, r0, r2, r3 + beq _020B40E4 + mov r2, #0x18 + mul r3, r0, r2 + ldr r2, _020B416C ; =0x021CDF04 + ldr r0, _020B4170 ; =0x021CDF08 + ldr r2, [r2, r3] + ldr ip, _020B4174 ; =0x02106578 + ldr r0, [r0, r3] + str r2, [r12, #0x10] + str r0, [r12, #0x14] +_020B40E4: + ldr r2, [r12, #0x0] + ldr r0, _020B4154 ; =0x021CDD70 + str r2, [r1, #0x0] + ldr r2, [r12, #0x4] + str r2, [r1, #0x4] + ldr r2, [r12, #0x8] + str r2, [r1, #0x8] + ldr r2, [r12, #0xc] + str r2, [r1, #0xc] + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x10 + movs lr, r0, lsr #0x10 + addmi sp, sp, #0x4 + ldmmiia sp!, {r4-r5,pc} +_020B411C: ; 0x020B411C + ldr r3, _020B4158 ; =0x021CDDF4 + mov r0, #0x3 +_020B4124: + add r2, r3, lr, lsl #0x3 + ldrh r1, [r2, #0x2] + mov r12, lr, lsl #0x3 + cmp r5, r1 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,pc} +_020B413C: ; 0x020B413C + strh r0, [r2, #0x4] + strh r4, [r3, r12] + subs lr, lr, #0x1 + bpl _020B4124 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B4154: .word 0x021CDD70 +_020B4158: .word 0x021CDDF4 +_020B415C: .word 0x021CDD60 +_020B4160: .word 0x021CE4F4 +_020B4164: .word 0x021CDD68 +_020B4168: .word 0x021CE1F4 +_020B416C: .word 0x021CDF04 +_020B4170: .word 0x021CDF08 +_020B4174: .word 0x02106578 + + arm_func_start FUN_020B4178 +FUN_020B4178: ; 0x020B4178 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020B4220 ; =0x021CDD68 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020B41B8 + ldr r1, _020B4224 ; =0x021CDD70 + mov r0, #0x18 + ldr r12, [r1, #0x0] + ldr r1, _020B4228 ; =0x021CDF04 + mul r3, r12, r0 + mov r2, #0x0 + ldr r0, _020B422C ; =0x021CDF08 + str r2, [r1, r3] + str r2, [r0, r3] + b _020B420C +_020B41B8: + ldr r0, _020B4224 ; =0x021CDD70 + mov lr, #0x18 + ldr r1, [r0, #0x0] + ldr r4, _020B4230 ; =0x021CDEF4 + mul r3, r1, lr + mov r2, #0x1000 + str r2, [r4, r3] + add r5, r4, r3 + mov r1, #0x0 + str r1, [r5, #0x4] + str r1, [r5, #0x8] + str r2, [r5, #0xc] + str r1, [r5, #0x10] + str r1, [r5, #0x14] + ldr r12, [r0, #0x0] + ldr r4, _020B4234 ; =0x021CE1F4 + ldmia r5!, {r0-r3} + mla lr, r12, lr, r4 + stmia lr!, {r0-r3} + ldmia r5, {r0-r1} + stmia lr, {r0-r1} +_020B420C: + ldr r0, _020B4238 ; =0x021CDD74 + mov r1, #0x0 + str r1, [r0, r12, lsl #0x2] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B4220: .word 0x021CDD68 +_020B4224: .word 0x021CDD70 +_020B4228: .word 0x021CDF04 +_020B422C: .word 0x021CDF08 +_020B4230: .word 0x021CDEF4 +_020B4234: .word 0x021CE1F4 +_020B4238: .word 0x021CDD74 + + arm_func_start FUN_020B423C +FUN_020B423C: ; 0x020B423C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x1c + ldr r4, [r0, #0x4] + ldr r3, [r1, #0x8] + mov r12, r2 + smull r6, r5, r4, r3 + ldr r4, [r0, #0x0] + ldr r3, [r1, #0x0] + cmp r12, r1 + smlal r6, r5, r4, r3 + mov r3, r6, lsr #0xc + addeq r2, sp, #0x0 + orr r3, r3, r5, lsl #0x14 + str r3, [r2, #0x0] + ldr r4, [r0, #0x4] + ldr r3, [r1, #0xc] + ldr r5, [r0, #0x0] + smull r7, r6, r4, r3 + ldr r3, [r1, #0x4] + add lr, sp, #0x0 + smlal r7, r6, r5, r3 + mov r3, r7, lsr #0xc + orr r3, r3, r6, lsl #0x14 + str r3, [r2, #0x4] + ldr r4, [r0, #0xc] + ldr r3, [r1, #0x8] + ldr r5, [r0, #0x8] + smull r7, r6, r4, r3 + ldr r3, [r1, #0x0] + cmp r2, lr + smlal r7, r6, r5, r3 + mov r3, r7, lsr #0xc + orr r3, r3, r6, lsl #0x14 + str r3, [r2, #0x8] + ldr r4, [r0, #0xc] + ldr r3, [r1, #0xc] + ldr r5, [r0, #0x8] + smull r7, r6, r4, r3 + ldr r3, [r1, #0x4] + smlal r7, r6, r5, r3 + mov r3, r7, lsr #0xc + orr r3, r3, r6, lsl #0x14 + str r3, [r2, #0xc] + ldr r4, [r0, #0x14] + ldr r3, [r1, #0x8] + ldr r5, [r0, #0x10] + smull r7, r6, r4, r3 + ldr r3, [r1, #0x0] + ldr r4, [r1, #0x10] + smlal r7, r6, r5, r3 + mov r3, r7, lsr #0xc + orr r3, r3, r6, lsl #0x14 + add r3, r4, r3 + str r3, [r2, #0x10] + ldr r4, [r0, #0x14] + ldr r3, [r1, #0xc] + ldr r5, [r0, #0x10] + ldr r0, [r1, #0x4] + smull r6, r3, r4, r3 + smlal r6, r3, r5, r0 + mov r0, r6, lsr #0xc + ldr r1, [r1, #0x14] + orr r0, r0, r3, lsl #0x14 + add r0, r1, r0 + str r0, [r2, #0x14] + ldmeqia lr!, {r0-r3} + stmeqia r12!, {r0-r3} + ldmeqia lr, {r0-r1} + stmeqia r12, {r0-r1} + add sp, sp, #0x1c + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020B4358 +FUN_020B4358: ; 0x020B4358 + stmdb sp!, {r4,lr} + ldr r2, _020B43A0 ; =0x021CED04 + mov r1, #0x30 + ldr r2, [r2, #0x0] + mla r4, r0, r1, r2 + mov r0, r4 + bl FUN_020B10CC +_020B4374: ; 0x020B4374 + mov r0, #0x0 + str r0, [r4, #0xc] + str r0, [r4, #0x10] + str r0, [r4, #0x14] + str r0, [r4, #0x18] + str r0, [r4, #0x1c] + str r0, [r4, #0x20] + str r0, [r4, #0x24] + str r0, [r4, #0x28] + str r0, [r4, #0x2c] + ldmia sp!, {r4,pc} + .balign 4 +_020B43A0: .word 0x021CED04 + + arm_func_start FUN_020B43A4 +FUN_020B43A4: ; 0x020B43A4 + ldr r1, _020B43F8 ; =0x021CED00 + mov r0, #0x0 + ldr r3, [r1, #0x0] + cmp r3, #0x0 + bls _020B43F0 + ldr r1, _020B43FC ; =0x021CED04 + ldr r2, [r1, #0x0] + mov r12, r2 +_020B43C4: + ldr r1, [r12, #0x1c] + cmp r1, #0x1 + movne r1, #0x30 + mlane r1, r0, r1, r2 + movne r2, #0x1 + strne r2, [r1, #0x1c] + bxne lr + add r0, r0, #0x1 + cmp r0, r3 + add r12, r12, #0x30 + blo _020B43C4 +_020B43F0: + mvn r0, #0x0 + bx lr + .balign 4 +_020B43F8: .word 0x021CED00 +_020B43FC: .word 0x021CED04 + + arm_func_start FUN_020B4400 +FUN_020B4400: ; 0x020B4400 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + mov r4, r2 + bl FUN_020B469C + mvn r1, #0x0 + str r1, [r0, #0x24] + str r5, [r0, #0x28] + str r4, [r0, #0x2c] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020B442C +FUN_020B442C: ; 0x020B442C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x14 + mov r0, #0x0 + str r0, [sp, #0x0] + ldr r0, _020B4558 ; =0x021CED00 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addls sp, sp, #0x14 + ldmlsia sp!, {r4-r11,pc} +_020B4450: ; 0x020B4450 + ldr r0, [sp, #0x0] + mov r5, #0x1 + str r0, [sp, #0x4] + mov r11, r0 + str r0, [sp, #0x8] + str r0, [sp, #0xc] +_020B4468: + ldr r0, _020B455C ; =0x021CED04 + ldr r1, [r0, #0x0] + ldr r0, [sp, #0x4] + add r8, r1, r0 + ldr r0, [r8, #0x1c] + cmp r0, #0x0 + beq _020B4528 + ldr r9, [sp, #0x8] + mov r0, r9 + cmp r0, #0x3 + bge _020B4520 + add r4, r8, #0x24 +_020B4498: + mov r6, r5, lsl r9 + mov r1, r11 + ldr r0, [r8, #0x24] + ands r0, r0, r6 + beq _020B44B8 + ldr r0, [r8, #0x20] + ands r0, r0, r6 + movne r1, r5 +_020B44B8: + cmp r1, #0x0 + beq _020B4514 + ldr r0, _020B4560 ; =0x020FF8C4 + cmp r9, #0x0 + ldr r7, [r0, r9, lsl #0x2] + ldreq r10, [r8, #0x14] + mov r0, r8 + mov r1, r9 + ldrne r10, [r8, #0x10] + bl FUN_020B10BC + mov r1, r0 + mov r0, r7 + ldr r7, _020B4564 ; =0x021CECFC + ldr r2, [r8, #0x28] + ldr r3, [r8, #0x2c] + ldr r7, [r7, #0x0] + add r2, r10, r2 + blx r7 + cmp r0, #0x0 + ldrne r1, [r4, #0x0] + mvnne r0, r6 + andne r0, r1, r0 + strne r0, [r4, #0x0] +_020B4514: + add r9, r9, #0x1 + cmp r9, #0x3 + blt _020B4498 +_020B4520: + ldr r0, [sp, #0xc] + str r0, [r8, #0x20] +_020B4528: + ldr r0, _020B4558 ; =0x021CED00 + ldr r1, [r0, #0x0] + ldr r0, [sp, #0x0] + add r0, r0, #0x1 + str r0, [sp, #0x0] + cmp r0, r1 + ldr r0, [sp, #0x4] + add r0, r0, #0x30 + str r0, [sp, #0x4] + blo _020B4468 + add sp, sp, #0x14 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B4558: .word 0x021CED00 +_020B455C: .word 0x021CED04 +_020B4560: .word 0x020FF8C4 +_020B4564: .word 0x021CECFC + + arm_func_start FUN_020B4568 +FUN_020B4568: ; 0x020B4568 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr ip, _020B45E4 ; =0x021CECFC + movs r6, r1 + ldr r1, _020B45E8 ; =0x021CED00 + ldr r3, _020B45EC ; =0x021CED04 + mov r7, r0 + str r2, [r12, #0x0] + mov r5, #0x0 + addeq sp, sp, #0x4 + str r7, [r3, #0x0] + str r6, [r1, #0x0] + ldmeqia sp!, {r4-r7,pc} +_020B459C: ; 0x020B459C + mov r4, r5 +_020B45A0: + mov r0, r7 + bl FUN_020B10CC + str r4, [r7, #0xc] + str r4, [r7, #0x10] + str r4, [r7, #0x14] + str r4, [r7, #0x18] + str r4, [r7, #0x1c] + str r4, [r7, #0x20] + str r4, [r7, #0x24] + str r4, [r7, #0x28] + add r5, r5, #0x1 + str r4, [r7, #0x2c] + cmp r5, r6 + add r7, r7, #0x30 + blo _020B45A0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B45E4: .word 0x021CECFC +_020B45E8: .word 0x021CED00 +_020B45EC: .word 0x021CED04 + + arm_func_start FUN_020B45F0 +FUN_020B45F0: ; 0x020B45F0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr ip, _020B4698 ; =0x021CED04 + mov r4, #0x30 + ldr r12, [r12, #0x0] + mov r7, r1 + mla r4, r0, r4, r12 + mov r0, r4 + mov r6, r2 + mov r5, r3 + bl FUN_020B10CC +_020B461C: ; 0x020B461C + mvn r0, #0x0 + cmp r7, r0 + beq _020B4638 + mov r0, r4 + mov r2, r7 + mov r1, #0x0 + bl FUN_020B10C4 +_020B4638: + mvn r0, #0x0 + cmp r6, r0 + beq _020B4654 + mov r0, r4 + mov r2, r6 + mov r1, #0x1 + bl FUN_020B10C4 +_020B4654: + mvn r0, #0x0 + cmp r5, r0 + beq _020B4670 + mov r0, r4 + mov r2, r5 + mov r1, #0x2 + bl FUN_020B10C4 +_020B4670: + ldr r1, [sp, #0x18] + ldr r0, [sp, #0x1c] + str r1, [r4, #0xc] + ldr r1, [sp, #0x20] + str r0, [r4, #0x10] + ldr r0, [sp, #0x24] + str r1, [r4, #0x14] + str r0, [r4, #0x18] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B4698: .word 0x021CED04 + + arm_func_start FUN_020B469C +FUN_020B469C: ; 0x020B469C + ldr r2, _020B46B0 ; =0x021CED04 + mov r1, #0x30 + ldr r2, [r2, #0x0] + mla r0, r1, r0, r2 + bx lr + .balign 4 +_020B46B0: .word 0x021CED04 + + arm_func_start FUN_020B46B4 +FUN_020B46B4: ; 0x020B46B4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x1c + add r12, sp, #0x4 + mov r5, r1 + mov r4, r2 + mov r7, r3 + mov r6, r0 + ldr r1, [sp, #0x30] + ldr r2, [sp, #0x34] + ldr r3, [sp, #0x38] + mov r0, r7 + str r12, [sp, #0x0] + bl FUN_020B498C + ldr r2, [r7, #0x0] + and r1, r2, #0x300 + cmp r1, #0x100 + beq _020B4708 + cmp r1, #0x300 + beq _020B4708 + and r0, r2, #0x30000000 + orr r1, r1, r0 +_020B4708: + cmp r1, #0x300 + bne _020B478C + ldr r0, _020B4914 ; =0xC000C000 + ldr r1, _020B4918 ; =0x021CED08 + and r0, r2, r0 + and r2, r0, #0xc0000000 + mov r12, r2, lsr #0x1e + and r0, r0, #0xc000 + mov lr, r0, asr #0xe + ldr r3, _020B491C ; =0x020FF8AC + ldr r0, [r1, #0x0] + ldr r2, _020B4920 ; =0x020FF894 + cmp r0, #0x0 + ldrne r0, _020B4924 ; =0x021CED10 + mov r12, r12, lsl #0x1 + add r1, r2, lr, lsl #0x3 + add r3, r3, lr, lsl #0x3 + ldrh r2, [r12, r3] + ldrh r1, [r12, r1] + ldrne r0, [r0, #0x0] + mov r2, r2, asr #0x1 + addne r3, r0, r4, lsl #0xc + mov r1, r1, asr #0x1 + add r0, r5, r1 + add r2, r6, r2 + ldr r1, _020B4928 ; =0x04000470 + mov r2, r2, lsl #0xc + str r2, [r1, #0x0] + mov r0, r0, lsl #0xc + moveq r3, r4, lsl #0xc + str r0, [r1, #0x0] + str r3, [r1, #0x0] + b _020B47C0 +_020B478C: + ldr r0, _020B4918 ; =0x021CED08 + ldr r1, _020B4928 ; =0x04000470 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldrne r0, _020B4924 ; =0x021CED10 + ldrne r0, [r0, #0x0] + addne r2, r0, r4, lsl #0xc + mov r0, r6, lsl #0xc + str r0, [r1, #0x0] + mov r0, r5, lsl #0xc + moveq r2, r4, lsl #0xc + str r0, [r1, #0x0] + str r2, [r1, #0x0] +_020B47C0: + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x18] + ldr r2, _020B492C ; =0x0400046C + mov r0, r0, lsl #0xc + str r0, [r2, #0x0] + mov r0, r1, lsl #0xc + str r0, [r2, #0x0] + mov r1, #0x1000 + str r1, [r2, #0x0] + ldr r0, _020B4930 ; =0x04000500 + mov r1, #0x1 + str r1, [r0, #0x0] + ldr r0, [sp, #0x4] + ldr r1, [sp, #0x10] + mov r0, r0, lsl #0x8 + mov r1, r1, lsl #0x8 + mov r0, r0, asr #0x10 + mov r1, r1, asr #0x10 + mov r0, r0, lsl #0x10 + mov r1, r1, lsl #0x10 + mov r2, r0, lsr #0x10 + mov r0, r1, lsr #0x10 + orr r2, r2, r0, lsl #0x10 + ldr r1, _020B4934 ; =0x04000488 + ldr r0, _020B4938 ; =0x04000490 + str r2, [r1, #0x0] + mov r2, #0x10000 + str r2, [r0, #0x0] + ldr r2, [sp, #0xc] + ldr r3, [sp, #0x10] + mov r2, r2, lsl #0x8 + mov r3, r3, lsl #0x8 + mov r2, r2, asr #0x10 + mov r3, r3, asr #0x10 + mov r2, r2, lsl #0x10 + mov r3, r3, lsl #0x10 + mov r4, r2, lsr #0x10 + mov r2, r3, lsr #0x10 + orr r3, r4, r2, lsl #0x10 + ldr r2, _020B493C ; =0x00010040 + str r3, [r1, #0x0] + str r2, [r0, #0x0] + ldr r2, [sp, #0xc] + ldr r3, [sp, #0x8] + mov r2, r2, lsl #0x8 + mov r3, r3, lsl #0x8 + mov r2, r2, asr #0x10 + mov r3, r3, asr #0x10 + mov r2, r2, lsl #0x10 + mov r3, r3, lsl #0x10 + mov r4, r2, lsr #0x10 + mov r2, r3, lsr #0x10 + orr r2, r4, r2, lsl #0x10 + str r2, [r1, #0x0] + mov r2, #0x40 + str r2, [r0, #0x0] + ldr r2, [sp, #0x4] + ldr r3, [sp, #0x8] + mov r2, r2, lsl #0x8 + mov r3, r3, lsl #0x8 + mov r2, r2, asr #0x10 + mov r3, r3, asr #0x10 + mov r2, r2, lsl #0x10 + mov r3, r3, lsl #0x10 + mov r4, r2, lsr #0x10 + mov r2, r3, lsr #0x10 + orr r2, r4, r2, lsl #0x10 + str r2, [r1, #0x0] + mov r2, #0x0 + str r2, [r0, #0x0] + ldr r1, _020B4940 ; =0x04000504 + ldr r0, _020B4918 ; =0x021CED08 + str r2, [r1, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x1c + ldmeqia sp!, {r4-r7,pc} +_020B48F4: ; 0x020B48F4 + ldr r1, _020B4924 ; =0x021CED10 + ldr r0, _020B4944 ; =0x02106590 + ldr r2, [r1, #0x0] + ldr r0, [r0, #0x0] + add r0, r2, r0 + str r0, [r1, #0x0] + add sp, sp, #0x1c + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B4914: .word 0xC000C000 +_020B4918: .word 0x021CED08 +_020B491C: .word 0x020FF8AC +_020B4920: .word 0x020FF894 +_020B4924: .word 0x021CED10 +_020B4928: .word 0x04000470 +_020B492C: .word 0x0400046C +_020B4930: .word 0x04000500 +_020B4934: .word 0x04000488 +_020B4938: .word 0x04000490 +_020B493C: .word 0x00010040 +_020B4940: .word 0x04000504 +_020B4944: .word 0x02106590 + + arm_func_start FUN_020B4948 +FUN_020B4948: + ldr r0, _020B4954 ; =0x02106590 + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020B4954: .word 0x02106590 + + arm_func_start FUN_020B4958 +FUN_020B4958: + ldr r1, _020B4964 ; =0x02106590 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020B4964: .word 0x02106590 + + arm_func_start FUN_020B4968 +FUN_020B4968: ; 0x020B4968 + ldr r0, _020B4978 ; =0x021CED10 + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + .balign 4 +_020B4978: .word 0x021CED10 + + arm_func_start FUN_020B497C +FUN_020B497C: + ldr r1, _020B4988 ; =0x021CED08 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020B4988: .word 0x021CED08 + + arm_func_start FUN_020B498C +FUN_020B498C: ; 0x020B498C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0xc + mov r6, r0 + ldr r4, [r6, #0x0] + ldr r0, _020B4BCC ; =0xC000C000 + ldr r5, [r6, #0x4] + and r4, r4, r0 + and r0, r4, #0xc0000000 + and r4, r4, #0xc000 + mov lr, r0, lsr #0x1e + ldr r0, _020B4BD0 ; =0x020FF8AC + mov r12, r4, asr #0xe + ldr r8, _020B4BD4 ; =0x020FF894 + mov r4, lr, lsl #0x1 + add r0, r0, r12, lsl #0x3 + ldrh r9, [r4, r0] + ldr r0, [sp, #0x28] + mov r5, r5, lsl #0x16 + mov r5, r5, lsr #0x16 + mov r7, r5, lsl #0x10 + str r9, [r0, #0x10] + add r5, r8, r12, lsl #0x3 + ldrh r8, [r4, r5] + mov r5, r1 + mov r4, r3 + str r8, [r0, #0x14] + ldr r1, [r5, #0x14] + mov r7, r7, lsr #0x10 + cmp r1, #0x0 + bne _020B4A74 + ldr r1, [r5, #0x8] + mov r2, r2, lsr #0x3 + orr r1, r2, r1, lsl #0x1a + ldr r2, [r5, #0x0] + orr r1, r1, #0x40000000 + ldr r3, [r5, #0x4] + orr r1, r1, r2, lsl #0x14 + orr r2, r1, r3, lsl #0x17 + ldr r8, [r5, #0x10] + ldr r1, _020B4BD8 ; =0x040004A8 + orr r2, r2, r8, lsl #0x1d + str r2, [r1, #0x0] + ldr r1, [r5, #0x8] + ldr r2, [r5, #0x0] + cmp r1, #0x4 + moveq r1, r7, lsl #0xf + moveq r7, r1, lsr #0x10 + ldr r1, _020B4BDC ; =0x020FF8D8 + ldr r1, [r1, r2, lsl #0x2] + sub r1, r1, #0x1 + and r1, r7, r1 + mov r1, r1, lsl #0xf + str r1, [r0, #0x0] + ldr r1, [r5, #0x0] + mov r1, r7, asr r1 + mov r1, r1, lsl #0xf + str r1, [r0, #0x4] + b _020B4AE0 +_020B4A74: + and r1, r1, #0x700000 + mov r1, r1, asr #0x14 + mov r12, r12, lsl #0x10 + add r1, r1, #0x5 + ldr r3, [r5, #0x8] + mov lr, lr, lsl #0x10 + ldr sb, _020B4BE0 ; =0x020FF8F8 + mov r12, r12, lsr #0x10 + ldr r8, _020B4BE4 ; =0x020FF928 + add r1, r2, r7, lsl r1 + mov r2, r3, lsl #0x1a + orr r3, r2, r1, lsr #0x3 + mov r7, lr, lsr #0x10 + add r2, r9, r12, lsl #0x4 + add r1, r8, r12, lsl #0x4 + ldr r2, [r2, r7, lsl #0x2] + orr r3, r3, #0x40000000 + ldr r1, [r1, r7, lsl #0x2] + orr r2, r3, r2, lsl #0x14 + ldr r3, [r5, #0x10] + orr r2, r2, r1, lsl #0x17 + ldr r1, _020B4BD8 ; =0x040004A8 + orr r2, r2, r3, lsl #0x1d + str r2, [r1, #0x0] + mov r1, #0x0 + str r1, [r0, #0x0] + str r1, [r0, #0x4] +_020B4AE0: + ldr r2, [r0, #0x0] + ldr r1, [r0, #0x10] + add r1, r2, r1, lsl #0xc + str r1, [r0, #0x8] + ldr r2, [r0, #0x4] + ldr r1, [r0, #0x14] + add r1, r2, r1, lsl #0xc + str r1, [r0, #0xc] + ldr r1, [r6, #0x0] + mov r2, r1, lsl #0x2 + mov r1, r1, lsl #0x3 + movs r3, r1, lsr #0x1f + mov r12, r2, lsr #0x1f + ldrne r2, [r0, #0x0] + ldrne r1, [r0, #0x8] + strne r1, [r0, #0x0] + strne r2, [r0, #0x8] + cmp r12, #0x0 + ldrne r2, [r0, #0x4] + ldrne r1, [r0, #0xc] + strne r1, [r0, #0x4] + ldr r1, _020B4BE8 ; =0x021CED0C + strne r2, [r0, #0xc] + ldr r7, [r1, #0x0] + cmp r7, #0x0 + beq _020B4B60 + str r3, [sp, #0x0] + add r1, r0, #0x4 + add r2, r0, #0x8 + add r3, r0, #0xc + str r12, [sp, #0x4] + blx r7 +_020B4B60: + ldr r0, [r6, #0x4] + ldr r1, [r6, #0x0] + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x1c + mov r3, r1, lsl #0x12 + ldr r1, [r5, #0xc] + mov r0, r0, lsl #0x10 + ldr r2, _020B4BEC ; =0x020FF8D0 + mov r3, r3, lsr #0x1f + cmp r1, #0x0 + mov r0, r0, lsr #0x10 + ldr r1, [r2, r3, lsl #0x2] + movne r0, r0, lsl #0x9 + bne _020B4BA4 + cmp r1, #0x4 + moveq r0, #0x0 + movne r0, r0, lsl #0x5 +_020B4BA4: + cmp r1, #0x2 + moveq r2, #0x1 + movne r2, #0x0 + add r1, r4, r0 + rsb r0, r2, #0x4 + mov r1, r1, lsr r0 + ldr r0, _020B4BF0 ; =0x040004AC + str r1, [r0, #0x0] + add sp, sp, #0xc + ldmia sp!, {r4-r9,pc} + .balign 4 +_020B4BCC: .word 0xC000C000 +_020B4BD0: .word 0x020FF8AC +_020B4BD4: .word 0x020FF894 +_020B4BD8: .word 0x040004A8 +_020B4BDC: .word 0x020FF8D8 +_020B4BE0: .word 0x020FF8F8 +_020B4BE4: .word 0x020FF928 +_020B4BE8: .word 0x021CED0C +_020B4BEC: .word 0x020FF8D0 +_020B4BF0: .word 0x040004AC + + arm_func_start FUN_020B4BF4 +FUN_020B4BF4: ; 0x020B4BF4 + stmdb sp!, {r4-r6,lr} + ldr r2, _020B4CD8 ; =0x021CED14 + mov r6, r0 + ldr r3, [r2, #0x0] + mov r4, r1 + ldr r5, [r3, #0x0] + ldr r0, [r5, #0x10] + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020B4C18: ; 0x020B4C18 + mov r0, #0x1 + str r0, [r3, #0x30] + ldr r3, [r5, #0x18] + cmp r3, #0x0 + beq _020B4C38 + ldr r0, [r2, #0x0] + mov r1, r6 + blx r3 +_020B4C38: + ldr r0, _020B4CD8 ; =0x021CED14 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x30] + cmp r0, #0x0 + beq _020B4CB8 + mvn r0, #0x0 + cmp r4, r0 + beq _020B4C7C + mov r0, r4 + ldr r4, [r5, #0x14] + bl FUN_020B469C + mov r3, #0x1 + mvn r1, r3, lsl r4 + ldr r2, [r0, #0x20] + and r1, r2, r1 + orr r1, r1, r3, lsl r4 + str r1, [r0, #0x20] +_020B4C7C: + ldr r0, [r5, #0x14] + cmp r0, #0x3 + addls pc, pc, r0, lsl #0x2 + b _020B4CB8 +_020B4C8C: + b _020B4C9C +_020B4C90: + b _020B4CAC +_020B4C94: + b _020B4CAC +_020B4C98: + b _020B4CB8 +_020B4C9C: + mov r0, r5 + mov r1, r6 + bl FUN_020B5090 + b _020B4CB8 +_020B4CAC: + mov r0, r5 + mov r1, r6 + bl FUN_020B53B4 +_020B4CB8: + ldr r2, [r5, #0x1c] + cmp r2, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020B4CC4: ; 0x020B4CC4 + ldr r0, _020B4CD8 ; =0x021CED14 + mov r1, r6 + ldr r0, [r0, #0x0] + blx r2 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B4CD8: .word 0x021CED14 + + arm_func_start FUN_020B4CDC +FUN_020B4CDC: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020B4D9C ; =0x021CED14 + mov r5, r0 + ldr r2, [r1, #0x0] + ldr r4, [r2, #0x0] + ldr r0, [r4, #0x10] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} +_020B4D04: ; 0x020B4D04 + mov r0, #0x1 + str r0, [r2, #0x30] + ldr r2, [r4, #0x18] + cmp r2, #0x0 + beq _020B4D24 + ldr r0, [r1, #0x0] + mov r1, r5 + blx r2 +_020B4D24: + ldr r0, _020B4D9C ; =0x021CED14 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x30] + cmp r0, #0x0 + beq _020B4D74 + ldr r0, [r4, #0x14] + cmp r0, #0x3 + addls pc, pc, r0, lsl #0x2 + b _020B4D74 +_020B4D48: + b _020B4D58 +_020B4D4C: + b _020B4D68 +_020B4D50: + b _020B4D68 +_020B4D54: + b _020B4D74 +_020B4D58: + mov r0, r4 + mov r1, r5 + bl FUN_020B5090 + b _020B4D74 +_020B4D68: + mov r0, r4 + mov r1, r5 + bl FUN_020B53B4 +_020B4D74: + ldr r2, [r4, #0x1c] + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} +_020B4D84: ; 0x020B4D84 + ldr r0, _020B4D9C ; =0x021CED14 + mov r1, r5 + ldr r0, [r0, #0x0] + blx r2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B4D9C: .word 0x021CED14 + + arm_func_start FUN_020B4DA0 +FUN_020B4DA0: ; 0x020B4DA0 + ldr r0, _020B4E00 ; =0x021CED14 + ldr r3, [r0, #0x0] + ldr r1, [r3, #0x0] + ldr r1, [r1, #0x14] + cmp r1, #0x0 + bne _020B4DD8 + ldr r2, _020B4E04 ; =0x04000440 + mov r1, #0x0 + ldr r0, _020B4E08 ; =0x04000448 + str r1, [r2, #0x0] + mov r1, #0x1 + str r1, [r0, #0x0] + str r1, [r2, #0x0] + b _020B4DF0 +_020B4DD8: + mov r2, #0x0 + str r2, [r3, #0x10] + ldr r1, [r0, #0x0] + str r2, [r1, #0x2c] + ldr r0, [r0, #0x0] + str r2, [r0, #0x28] +_020B4DF0: + ldr r0, _020B4E00 ; =0x021CED14 + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + .balign 4 +_020B4E00: .word 0x021CED14 +_020B4E04: .word 0x04000440 +_020B4E08: .word 0x04000448 + + arm_func_start FUN_020B4E0C +FUN_020B4E0C: ; 0x020B4E0C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r2, _020B4F28 ; =0x021CED14 + mov r4, r0 + str r4, [r2, #0x0] + ldr r0, [r4, #0x0] + ldr r5, [r0, #0x14] + cmp r5, #0x0 + bne _020B4ED8 + ldr lr, _020B4F2C ; =0x04000440 + mov r1, #0x0 + ldr r0, _020B4F30 ; =0x04000444 + str r1, [lr, #0x0] + str r1, [r0, #0x0] + ldr r12, [r4, #0x0] + ldr r0, _020B4F34 ; =0x04000470 + ldr r3, [r12, #0x0] + ldr r12, [r12, #0x4] + rsb r3, r3, #0x0 + str r3, [r0, #0x0] + rsb r3, r12, #0x0 + str r3, [r0, #0x0] + str r1, [r0, #0x0] + mov r0, #0x1 + str r0, [lr, #0x0] + ldr r0, [r2, #0x0] + ldr r5, [r0, #0x8] + mov r0, r5 + bl FUN_020B19FC +_020B4E80: ; 0x020B4E80 + cmp r0, #0x0 + moveq r0, #0x0 + beq _020B4E98 + mov r0, r5 + mov r1, #0x0 + bl FUN_020B1A14 +_020B4E98: + ldr r1, _020B4F28 ; =0x021CED14 + str r0, [r4, #0x14] + ldr r0, [r1, #0x0] + mov r1, #0x0 + ldr r5, [r0, #0xc] + mov r0, r5 + bl FUN_020B19A8 +_020B4EB4: ; 0x020B4EB4 + cmp r0, #0x0 + moveq r0, #0x0 + beq _020B4ECC + mov r0, r5 + mov r1, #0x0 + bl FUN_020B19C4 +_020B4ECC: + add sp, sp, #0x4 + str r0, [r4, #0x18] + ldmia sp!, {r4-r5,pc} +_020B4ED8: + ldr r4, [r4, #0x8] + mov r1, r5 + mov r0, r4 + bl FUN_020B19FC +_020B4EE8: ; 0x020B4EE8 + cmp r0, #0x0 + moveq r1, #0x0 + beq _020B4F14 + mov r0, r4 + mov r1, r5 + bl FUN_020B1A14 + ldr r1, [r4, #0x20] + and r1, r1, #0x700000 + mov r1, r1, asr #0x14 + add r1, r1, #0x5 + mov r1, r0, lsr r1 +_020B4F14: + ldr r0, _020B4F28 ; =0x021CED14 + ldr r0, [r0, #0x0] + str r1, [r0, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B4F28: .word 0x021CED14 +_020B4F2C: .word 0x04000440 +_020B4F30: .word 0x04000444 +_020B4F34: .word 0x04000470 + + arm_func_start FUN_020B4F38 +FUN_020B4F38: ; 0x020B4F38 + cmp r1, #0x0 + ldrne r1, [r0, #0x24] + orrne r1, r1, #0x1 + strne r1, [r0, #0x24] + ldreq r1, [r0, #0x24] + biceq r1, r1, #0x1 + streq r1, [r0, #0x24] + cmp r2, #0x0 + ldrne r1, [r0, #0x24] + orrne r1, r1, #0x2 + strne r1, [r0, #0x24] + ldreq r1, [r0, #0x24] + biceq r1, r1, #0x2 + streq r1, [r0, #0x24] + bx lr + + arm_func_start FUN_020B4F74 +FUN_020B4F74: + ldr r0, [r0, #0x24] + ands r0, r0, #0x2 + movne r0, #0x1 + moveq r0, #0x0 + bx lr + + arm_func_start FUN_020B4F88 +FUN_020B4F88: + ldr r0, [r0, #0x24] + ands r0, r0, #0x1 + movne r0, #0x1 + moveq r0, #0x0 + bx lr + + arm_func_start FUN_020B4F9C +FUN_020B4F9C: ; 0x020B4F9C + str r1, [r0, #0x0] + bx lr + + arm_func_start FUN_020B4FA4 +FUN_020B4FA4: ; 0x020B4FA4 + str r1, [r0, #0x34] + bx lr + + arm_func_start FUN_020B4FAC +FUN_020B4FAC: ; 0x020B4FAC + ldr r2, _020B4FC0 ; =0x021CED14 + ldr r2, [r2, #0x0] + str r0, [r2, #0x2c] + str r1, [r2, #0x28] + bx lr + .balign 4 +_020B4FC0: .word 0x021CED14 + + arm_func_start FUN_020B4FC4 +FUN_020B4FC4: ; 0x020B4FC4 + ldr r1, _020B5028 ; =0x021CED14 + mov r3, #0x0 + ldr r12, [r1, #0x0] + mov r1, #0x1000 + str r0, [r12, #0x2c] + ldr r2, [r0, #0x0] + str r2, [r12, #0x40] + ldr r2, [r0, #0x4] + str r2, [r12, #0x44] + str r3, [r12, #0x48] + ldr r2, [r0, #0x8] + str r2, [r12, #0x4c] + ldr r2, [r0, #0xc] + str r2, [r12, #0x50] + str r3, [r12, #0x54] + str r3, [r12, #0x58] + str r3, [r12, #0x5c] + str r1, [r12, #0x60] + ldr r1, [r0, #0x10] + str r1, [r12, #0x64] + ldr r0, [r0, #0x14] + str r0, [r12, #0x68] + ldr r0, [r12, #0x34] + str r0, [r12, #0x6c] + bx lr + .balign 4 +_020B5028: .word 0x021CED14 + + arm_func_start FUN_020B502C +FUN_020B502C: ; 0x020B502C + str r1, [r0, #0x4] + bx lr + + arm_func_start FUN_020B5034 +FUN_020B5034: ; 0x020B5034 + str r1, [r0, #0x1c] + str r2, [r0, #0x20] + bx lr + + arm_func_start FUN_020B5040 +FUN_020B5040: ; 0x020B5040 + str r1, [r0, #0x8] + str r2, [r0, #0xc] + bx lr + + arm_func_start FUN_020B504C +FUN_020B504C: ; 0x020B504C + stmdb sp!, {r4,lr} + mov r4, r0 + mov r1, r4 + mov r0, #0x0 + mov r2, #0x70 + bl MIi_CpuClear16 + mov r1, #0x0 + str r1, [r4, #0x0] + mov r0, #0x2 + str r0, [r4, #0x4] + str r1, [r4, #0x8] + str r1, [r4, #0xc] + str r1, [r4, #0x24] + mov r0, #0x1 + str r0, [r4, #0x30] + str r1, [r4, #0x28] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020B5090 +FUN_020B5090: ; 0x020B5090 + stmdb sp!, {r4-r10,lr} + ldr r5, _020B5158 ; =0x021CED14 + mov r9, r1 + ldrh r1, [r9, #0x0] + ldr r2, [r5, #0x0] + mov r10, r0 + add r7, r2, #0x38 + mov r8, #0x0 + cmp r1, #0x0 + ldmlsia sp!, {r4-r10,pc} +_020B50B8: ; 0x020B50B8 + mov r6, #0x1 + mov r4, #0x6 +_020B50C0: + mul r1, r8, r4 + ldr r0, [r5, #0x0] + str r6, [r0, #0x30] + ldr r2, [r9, #0x4] + ldrh r0, [r2, r1] + add r1, r2, r1 + strh r0, [r7, #0x0] + ldrh r0, [r1, #0x2] + strh r0, [r7, #0x2] + ldrh r0, [r1, #0x4] + strh r0, [r7, #0x4] + ldr r3, [r10, #0x20] + cmp r3, #0x0 + beq _020B5108 + ldr r0, [r5, #0x0] + mov r1, r9 + mov r2, r8 + blx r3 +_020B5108: + ldr r0, [r5, #0x0] + ldr r0, [r0, #0x30] + cmp r0, #0x0 + beq _020B5120 + mov r0, r7 + bl FUN_020B515C +_020B5120: + ldr r3, [r10, #0x24] + cmp r3, #0x0 + beq _020B513C + ldr r0, [r5, #0x0] + mov r1, r9 + mov r2, r8 + blx r3 +_020B513C: + add r0, r8, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r9, #0x0] + mov r8, r0, lsr #0x10 + cmp r8, r1 + blo _020B50C0 + ldmia sp!, {r4-r10,pc} + .balign 4 +_020B5158: .word 0x021CED14 + + arm_func_start FUN_020B515C +FUN_020B515C: ; 0x020B515C + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + ldr r1, _020B53A4 ; =0x021CED14 + mov r7, r0 + ldr r0, [r1, #0x0] + add r0, r0, #0x40 + bl G3_LoadMtx43 + ldr r0, _020B53A4 ; =0x021CED14 + ldr r0, [r0, #0x0] + ldr r1, [r0, #0x24] + cmp r1, #0x0 + beq _020B533C + ldr r2, [r7, #0x0] + ldr r1, _020B53A8 ; =0xC000C000 + and r4, r2, r1 + bl FUN_020B4F88 +_020B519C: ; 0x020B519C + cmp r0, #0x0 + beq _020B51F4 + ldr r0, [r7, #0x0] + and r2, r4, #0xc000 + mov r0, r0, lsl #0x7 + mov r3, r0, lsr #0x17 + and r1, r4, #0xc0000000 + mov r1, r1, lsr #0x1e + ldr r0, _020B53AC ; =0x020FF8AC + mov r2, r2, asr #0xe + mov r1, r1, lsl #0x1 + add r0, r0, r2, lsl #0x3 + cmp r3, #0xff + ldrh r1, [r1, r0] + orrgt r0, r3, #0xff00 + movgt r0, r0, lsl #0x10 + movgt r3, r0, asr #0x10 + add r0, r3, r1 + rsb r0, r0, #0x0 + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0x10 + b _020B5218 +_020B51F4: + ldr r0, [r7, #0x0] + mov r0, r0, lsl #0x7 + mov r0, r0, lsr #0x17 + cmp r0, #0xff + orrgt r0, r0, #0xff00 + movgt r0, r0, lsl #0x10 + movgt r0, r0, asr #0x10 + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0x10 +_020B5218: + ldr r0, _020B53A4 ; =0x021CED14 + mov r1, r1, lsl #0x10 + ldr r0, [r0, #0x0] + mov r6, r1, asr #0x10 + bl FUN_020B4F74 +_020B522C: ; 0x020B522C + cmp r0, #0x0 + beq _020B527C + and r1, r4, #0xc000 + and r0, r4, #0xc0000000 + ldrb r4, [r7, #0x0] + ldr r2, _020B53B0 ; =0x020FF894 + mov r0, r0, lsr #0x1e + mov r3, r1, asr #0xe + mov r1, r0, lsl #0x1 + add r0, r2, r3, lsl #0x3 + cmp r4, #0x7f + ldrh r1, [r1, r0] + orrgt r0, r4, #0xff00 + movgt r0, r0, lsl #0x10 + movgt r4, r0, asr #0x10 + add r0, r4, r1 + rsb r0, r0, #0x0 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + b _020B5298 +_020B527C: + ldrb r0, [r7, #0x0] + cmp r0, #0x7f + orrgt r0, r0, #0xff00 + movgt r0, r0, lsl #0x10 + movgt r0, r0, asr #0x10 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 +_020B5298: + ldr r0, _020B53A4 ; =0x021CED14 + ldr r1, [r7, #0x0] + ldr r0, [r0, #0x0] + mov r5, r1, lsl #0x3 + bl FUN_020B4F88 + ldr r2, [r7, #0x0] + ldr r1, _020B53A4 ; =0x021CED14 + eor r5, r0, r5, lsr #0x1f + ldr r0, [r1, #0x0] + mov r8, r2, lsl #0x2 + bl FUN_020B4F74 + ldr r2, [r7, #0x0] + eor r1, r0, r8, lsr #0x1f + bic r0, r2, #0x10000000 + str r0, [r7, #0x0] + ldr r2, [r7, #0x0] + ldr r3, _020B53A4 ; =0x021CED14 + orr r2, r2, r5, lsl #0x1c + str r2, [r7, #0x0] + ldr r2, [r7, #0x0] + mov r0, r6 + bic r2, r2, #0x20000000 + str r2, [r7, #0x0] + ldr r5, [r7, #0x0] + mov r2, r4, lsl #0x10 + orr r1, r5, r1, lsl #0x1d + str r1, [r7, #0x0] + ldr r5, [r3, #0x0] + mov r1, r2, asr #0x10 + ldr r4, [r5, #0x8] + mov r3, r7 + add r2, r4, #0xc + str r2, [sp, #0x0] + ldr r4, [r5, #0x14] + mvn r2, #0x0 + str r4, [sp, #0x4] + ldr r4, [r5, #0x18] + str r4, [sp, #0x8] + bl FUN_020B46B4 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} +_020B533C: + ldr r2, _020B53A4 ; =0x021CED14 + ldr r0, [r7, #0x0] + ldr r5, [r2, #0x0] + mov r0, r0, lsl #0x7 + ldr r4, [r5, #0x8] + mov r0, r0, lsr #0x17 + cmp r0, #0xff + orrgt r0, r0, #0xff00 + movgt r0, r0, lsl #0x10 + ldrb r1, [r7, #0x0] + add r4, r4, #0xc + movgt r0, r0, asr #0x10 + str r4, [sp, #0x0] + ldr r4, [r5, #0x14] + cmp r1, #0x7f + orrgt r1, r1, #0xff00 + movgt r1, r1, lsl #0x10 + str r4, [sp, #0x4] + ldr r4, [r5, #0x18] + movgt r1, r1, asr #0x10 + mov r3, r7 + mvn r2, #0x0 + str r4, [sp, #0x8] + bl FUN_020B46B4 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020B53A4: .word 0x021CED14 +_020B53A8: .word 0xC000C000 +_020B53AC: .word 0x020FF8AC +_020B53B0: .word 0x020FF894 + + arm_func_start FUN_020B53B4 +FUN_020B53B4: ; 0x020B53B4 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x44 + ldr r2, _020B57B0 ; =0x021CED14 + mov r10, r0 + ldr r0, [r2, #0x0] + mov r11, r1 + ldr r9, [r0, #0x2c] + ldr r1, _020B57B0 ; =0x021CED14 + cmp r9, #0x0 + ldreq sb, _020B57B4 ; =0x020FF958 + ldr r3, [r1, #0x0] + ldr r4, [r9, #0x10] + str r4, [sp, #0x18] + ldr r2, [r9, #0x14] + str r2, [sp, #0x1c] + ldr r1, [r10, #0x0] + sub r1, r4, r1 + str r1, [sp, #0x18] + ldr r1, [r10, #0x4] + sub r1, r2, r1 + str r1, [sp, #0x1c] + ldr r2, [r3, #0x24] + ldr r1, [r3, #0x10] + cmp r2, #0x0 + str r1, [sp, #0x4] + bne _020B5430 + ldr r1, [r3, #0x28] + cmp r1, #0x0 + movne r1, #0x1 + strne r1, [sp, #0x0] + bne _020B5438 +_020B5430: + mov r1, #0x0 + str r1, [sp, #0x0] +_020B5438: + ldrh r1, [r11, #0x0] + add r7, r0, #0x38 + mov r8, #0x0 + cmp r1, #0x0 + addls sp, sp, #0x44 + ldmlsia sp!, {r4-r11,pc} +_020B5450: ; 0x020B5450 + mov r0, #0x1 + ldr r4, _020B57B0 ; =0x021CED14 + str r8, [sp, #0x14] + str r0, [sp, #0xc] +_020B5460: + ldr r2, [r4, #0x0] + ldr r0, [sp, #0xc] + mov r1, #0x6 + str r0, [r2, #0x30] + mul r0, r8, r1 + ldr r1, [r11, #0x4] + add r2, r1, r0 + ldrh r0, [r1, r0] + strh r0, [r7, #0x0] + ldrh r0, [r2, #0x2] + strh r0, [r7, #0x2] + ldrh r0, [r2, #0x4] + strh r0, [r7, #0x4] + ldr r3, [r10, #0x20] + cmp r3, #0x0 + beq _020B54B0 + ldr r0, [r4, #0x0] + mov r1, r11 + mov r2, r8 + blx r3 +_020B54B0: + ldr r0, [r4, #0x0] + ldr r0, [r0, #0x30] + cmp r0, #0x0 + beq _020B5790 + ldr r0, [sp, #0x0] + ldr r1, [r7, #0x4] + cmp r0, #0x0 + mov r0, #0x400 + rsb r0, r0, #0x0 + and r2, r1, r0 + ldr r0, [sp, #0x4] + mov r1, r1, lsl #0x16 + add r1, r0, r1, lsr #0x16 + ldr r0, _020B57B8 ; =0x000003FF + and r0, r1, r0 + orr r0, r2, r0 + str r0, [r7, #0x4] + beq _020B5600 + ldr r0, [r10, #0x14] + ldr lr, [r4, #0x0] + sub r1, r0, #0x1 + ldr r0, [r7, #0x0] + ldr r6, [lr, #0x28] + mov r2, r0, lsl #0x2 + mov r2, r2, lsr #0x1f + mov r2, r2, lsl #0x1 + mov r0, r0, lsl #0x3 + orr r5, r2, r0, lsr #0x1f + add r0, r6, r5, lsl #0x2 + add r0, r0, r1, lsl #0x1 + ldrh r1, [r0, #0x10] + ldr r0, _020B57BC ; =0x0000FFFF + str r1, [sp, #0x8] + cmp r1, r0 + bne _020B55CC + cmp r5, #0x0 + bne _020B5558 + ldr r1, [lr, #0x20] + mov r0, r6 + blx r1 + str r0, [sp, #0x8] + b _020B55B4 +_020B5558: + ands r0, r5, #0x1 + add r12, sp, #0x30 + ldmia r6, {r0-r3} + stmia r12, {r0-r3} + beq _020B5584 + ldr r1, [sp, #0x30] + ldr r0, [sp, #0x34] + rsb r1, r1, #0x0 + str r1, [sp, #0x30] + rsb r0, r0, #0x0 + str r0, [sp, #0x34] +_020B5584: + ands r0, r5, #0x2 + beq _020B55A4 + ldr r1, [sp, #0x38] + ldr r0, [sp, #0x3c] + rsb r1, r1, #0x0 + str r1, [sp, #0x38] + rsb r0, r0, #0x0 + str r0, [sp, #0x3c] +_020B55A4: + ldr r1, [lr, #0x20] + add r0, sp, #0x30 + blx r1 + str r0, [sp, #0x8] +_020B55B4: + ldr r1, [r10, #0x14] + add r0, r6, r5, lsl #0x2 + sub r1, r1, #0x1 + add r1, r0, r1, lsl #0x1 + ldr r0, [sp, #0x8] + strh r0, [r1, #0x10] +_020B55CC: + ldr r1, [r9, #0x0] + add r0, sp, #0x20 + str r1, [sp, #0x20] + ldr r2, [r9, #0x4] + mov r1, r7 + str r2, [sp, #0x24] + ldr r3, [r9, #0x8] + add r2, sp, #0x18 + str r3, [sp, #0x28] + ldr r3, [r9, #0xc] + str r3, [sp, #0x2c] + bl FUN_020B57D8 + b _020B5750 +_020B5600: + ldr r0, _020B57C0 ; =0x0000FFFE + str r0, [sp, #0x8] + ldr r0, [r4, #0x0] + ldr r1, [r0, #0x24] + cmp r1, #0x0 + beq _020B5714 + ldr r2, [r7, #0x0] + ldr r1, _020B57C4 ; =0xC000C000 + mov r6, r2, lsl #0x3 + and r5, r2, r1 + bl FUN_020B4F88 + ldr r1, [r7, #0x0] + eor r6, r0, r6, lsr #0x1f + mov r1, r1, lsl #0x2 + ldr r0, [r4, #0x0] + str r1, [sp, #0x10] + bl FUN_020B4F74 + ldr r1, [sp, #0x10] + eor r0, r0, r1, lsr #0x1f + ldr r1, [r7, #0x0] + bic r1, r1, #0x10000000 + str r1, [r7, #0x0] + ldr r1, [r7, #0x0] + orr r1, r1, r6, lsl #0x1c + str r1, [r7, #0x0] + ldr r1, [r7, #0x0] + bic r1, r1, #0x20000000 + str r1, [r7, #0x0] + ldr r1, [r7, #0x0] + orr r0, r1, r0, lsl #0x1d + str r0, [r7, #0x0] + ldr r0, [r4, #0x0] + bl FUN_020B4F88 +_020B5684: ; 0x020B5684 + cmp r0, #0x0 + beq _020B56D4 + and r1, r5, #0xc000 + mov r2, r1, asr #0xe + ldr r1, _020B57C8 ; =0x020FF8AC + and r3, r5, #0xc0000000 + mov r3, r3, lsr #0x1e + add r2, r1, r2, lsl #0x3 + mov r3, r3, lsl #0x1 + ldr r0, [r7, #0x0] + ldr r1, _020B57CC ; =0xFE00FFFF + ldrh r2, [r3, r2] + and r1, r0, r1 + mov r0, r0, lsl #0x7 + add r0, r2, r0, lsr #0x17 + rsb r2, r0, #0x0 + ldr r0, _020B57D0 ; =0x000001FF + and r0, r2, r0 + orr r0, r1, r0, lsl #0x10 + str r0, [r7, #0x0] +_020B56D4: + ldr r0, [r4, #0x0] + bl FUN_020B4F74 +_020B56DC: ; 0x020B56DC + cmp r0, #0x0 + beq _020B5714 + and r1, r5, #0xc000 + mov r3, r1, asr #0xe + and r1, r5, #0xc0000000 + mov r1, r1, lsr #0x1e + mov r2, r1, lsl #0x1 + ldr r1, _020B57D4 ; =0x020FF894 + ldrb r0, [r7, #0x0] + add r1, r1, r3, lsl #0x3 + ldrh r1, [r2, r1] + add r0, r0, r1 + rsb r0, r0, #0x0 + strb r0, [r7, #0x0] +_020B5714: + ldr r2, [r7, #0x0] + ldr r0, _020B57CC ; =0xFE00FFFF + ldr r1, [sp, #0x18] + and r0, r2, r0 + mov r2, r2, lsl #0x7 + mov r2, r2, lsr #0x17 + add r2, r2, r1, asr #0xc + ldr r1, _020B57D0 ; =0x000001FF + and r1, r2, r1 + orr r0, r0, r1, lsl #0x10 + str r0, [r7, #0x0] + ldrb r1, [r7, #0x0] + ldr r0, [sp, #0x1c] + add r0, r1, r0, asr #0xc + strb r0, [r7, #0x0] +_020B5750: + ldr r3, [r4, #0x0] + ldr r1, [sp, #0x8] + ldr r2, [sp, #0x14] + ldr r3, [r3, #0x1c] + mov r0, r7 + blx r3 + cmp r0, #0x1 + addne sp, sp, #0x44 + ldmneia sp!, {r4-r11,pc} +_020B5774: ; 0x020B5774 + ldr r3, [r10, #0x24] + cmp r3, #0x0 + beq _020B5790 + ldr r0, [r4, #0x0] + mov r1, r11 + mov r2, r8 + blx r3 +_020B5790: + add r0, r8, #0x1 + mov r0, r0, lsl #0x10 + mov r8, r0, lsr #0x10 + ldrh r0, [r11, #0x0] + cmp r8, r0 + blo _020B5460 + add sp, sp, #0x44 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B57B0: .word 0x021CED14 +_020B57B4: .word 0x020FF958 +_020B57B8: .word 0x000003FF +_020B57BC: .word 0x0000FFFF +_020B57C0: .word 0x0000FFFE +_020B57C4: .word 0xC000C000 +_020B57C8: .word 0x020FF8AC +_020B57CC: .word 0xFE00FFFF +_020B57D0: .word 0x000001FF +_020B57D4: .word 0x020FF894 + + arm_func_start FUN_020B57D8 +FUN_020B57D8: ; 0x020B57D8 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + ldr r4, [r1, #0x0] + ldr r3, _020B5A9C ; =0x01FF0000 + and r3, r4, r3 + mov r3, r3, lsr #0x10 + mov r3, r3, lsl #0x10 + mov r3, r3, asr #0x10 + cmp r3, #0xff + orrgt r3, r3, #0xff00 + movgt r3, r3, lsl #0x10 + movgt r3, r3, asr #0x10 + mov r3, r3, lsl #0xc + str r3, [sp, #0x0] + ldr r3, [r1, #0x0] + and r3, r3, #0xff + mov r3, r3, lsl #0x10 + mov r3, r3, asr #0x10 + cmp r3, #0x7f + orrgt r3, r3, #0xff00 + movgt r3, r3, lsl #0x10 + movgt r3, r3, asr #0x10 + mov r3, r3, lsl #0xc + str r3, [sp, #0x4] + ldr r5, [r1, #0x0] + and r4, r5, #0x300 + cmp r4, #0x100 + beq _020B5858 + cmp r4, #0x300 + beq _020B5858 + and r3, r5, #0x30000000 + orr r4, r4, r3 +_020B5858: + cmp r4, #0x300 + bne _020B58AC + ldr r3, _020B5AA0 ; =0xC000C000 + ldr r4, _020B5AA4 ; =0x020FF8AC + and r3, r5, r3 + and r5, r3, #0xc0000000 + and r3, r3, #0xc000 + mov r6, r5, lsr #0x1e + mov r5, r3, asr #0xe + ldr r3, _020B5AA8 ; =0x020FF894 + mov r6, r6, lsl #0x1 + add r4, r4, r5, lsl #0x3 + add r3, r3, r5, lsl #0x3 + ldrh r5, [r6, r4] + ldr r7, [sp, #0x0] + ldrh r3, [r6, r3] + ldr r4, [sp, #0x4] + add r5, r7, r5, lsl #0xb + add r3, r4, r3, lsl #0xb + str r5, [sp, #0x0] + str r3, [sp, #0x4] +_020B58AC: + ldr r5, [r0, #0x8] + ldr r4, [sp, #0x4] + add r3, sp, #0x0 + smull r8, r7, r5, r4 + cmp r3, r3 + ldr r6, [r0, #0x0] + mov r4, #0x1000 + addeq r3, sp, #0x8 + adds r8, r8, r4 + ldr r5, [sp, #0x0] + adc r7, r7, #0x0 + smlal r8, r7, r6, r5 + mov r5, r8, lsr #0xc + orr r5, r5, r7, lsl #0x14 + str r5, [r3, #0x0] + ldr r7, [r0, #0xc] + ldr r6, [sp, #0x4] + ldr r5, [r0, #0x4] + smull r8, r6, r7, r6 + adds r7, r8, r4 + ldr r4, [sp, #0x0] + adc r6, r6, #0x0 + smlal r7, r6, r5, r4 + mov r5, r7, lsr #0xc + add r4, sp, #0x8 + orr r5, r5, r6, lsl #0x14 + str r5, [r3, #0x4] + cmp r3, r4 + ldreq r3, [sp, #0xc] + ldreq r4, [sp, #0x8] + streq r3, [sp, #0x4] + ldr r3, _020B5AAC ; =0x021CED14 + streq r4, [sp, #0x0] + ldr r3, [r3, #0x0] + ldr r3, [r3, #0x4] + cmp r3, #0x0 + beq _020B597C + cmp r3, #0x2 + moveq r5, #0x300 + movne r5, #0x100 + cmp r5, #0x100 + ldreq r4, [r1, #0x0] + ldreq r3, _020B5AB0 ; =0xC1FFFCFF + andeq r3, r4, r3 + orreq r3, r3, r5 + streq r3, [r1, #0x0] + beq _020B597C + ldr r4, [r1, #0x0] + ldr r3, _020B5AB0 ; =0xC1FFFCFF + and r3, r4, r3 + orr r3, r3, r5 + str r3, [r1, #0x0] +_020B597C: + ldr r6, [r1, #0x0] + and r5, r6, #0x300 + cmp r5, #0x100 + beq _020B599C + cmp r5, #0x300 + beq _020B599C + and r3, r6, #0x30000000 + orr r5, r5, r3 +_020B599C: + ldr r3, _020B5AA0 ; =0xC000C000 + ldr r4, _020B5AA4 ; =0x020FF8AC + and r3, r6, r3 + and r6, r3, #0xc0000000 + and r3, r3, #0xc000 + mov lr, r3, asr #0xe + mov r6, r6, lsr #0x1e + mov r3, r6, lsl #0x1 + add r4, r4, lr, lsl #0x3 + ldrh r4, [r3, r4] + ldr r6, [r0, #0x0] + ldr r8, _020B5AA8 ; =0x020FF894 + mov r12, r4, asr #0x1 + mov r4, r12, lsl #0xc + rsb r7, r4, #0x0 + mla r7, r6, r12, r7 + add lr, r8, lr, lsl #0x3 + ldrh r3, [r3, lr] + ldr r6, [r0, #0x8] + ldr lr, [sp, #0x0] + mov r3, r3, asr #0x1 + mla r7, r6, r3, r7 + add r6, lr, r7 + str r6, [sp, #0x0] + mov lr, r3, lsl #0xc + ldr r6, [r0, #0x4] + rsb r7, lr, #0x0 + mla r7, r6, r12, r7 + ldr r0, [r0, #0xc] + ldr r6, [sp, #0x4] + mla r3, r0, r3, r7 + add r0, r6, r3 + str r0, [sp, #0x4] + cmp r5, #0x300 + moveq r0, #0x1 + movne r0, #0x0 + cmp r0, #0x0 + beq _020B5A4C + ldr r3, [sp, #0x0] + ldr r0, [sp, #0x4] + sub r3, r3, r4 + sub r0, r0, lr + str r3, [sp, #0x0] + str r0, [sp, #0x4] +_020B5A4C: + ldr r4, [sp, #0x0] + ldr r0, [r2, #0x0] + ldr r3, [sp, #0x4] + add r5, r4, r0 + str r5, [sp, #0x0] + ldr r2, [r2, #0x4] + ldr r0, _020B5AB4 ; =0x000001FF + add r2, r3, r2 + str r2, [sp, #0x4] + mov r3, r2, asr #0xc + ldr r4, [r1, #0x0] + ldr r2, _020B5AB8 ; =0xFE00FF00 + and r3, r3, #0xff + and r2, r4, r2 + and r4, r0, r5, asr #0xc + orr r0, r2, r3 + orr r0, r0, r4, lsl #0x10 + str r0, [r1, #0x0] + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020B5A9C: .word 0x01FF0000 +_020B5AA0: .word 0xC000C000 +_020B5AA4: .word 0x020FF8AC +_020B5AA8: .word 0x020FF894 +_020B5AAC: .word 0x021CED14 +_020B5AB0: .word 0xC1FFFCFF +_020B5AB4: .word 0x000001FF +_020B5AB8: .word 0xFE00FF00 + + arm_func_start FUN_020B5ABC +FUN_020B5ABC: ; 0x020B5ABC + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0xc + add r5, sp, #0x0 + mov r4, #0x0 + str r4, [r5, #0x0] + str r4, [r5, #0x4] + mov r8, r2 + ldr r2, [sp, #0x28] + mov r5, r0 + mov r9, r1 + mov r4, r3 + cmp r2, #0x0 + mov r7, #0x1 + beq _020B5B24 + add r6, sp, #0x28 +_020B5AF8: + mov r0, r9 + mov r1, r8 + mov r3, r6 + bl FUN_020B5BC8 + ldr r1, [sp, #0x0] + ldr r2, [sp, #0x28] + cmp r0, r1 + strgt r0, [sp, #0x0] + add r7, r7, #0x1 + cmp r2, #0x0 + bne _020B5AF8 +_020B5B24: + ldr r0, [r9, #0x0] + sub r2, r7, #0x1 + ldrsb r1, [r0, #0x1] + ldr r0, [sp, #0x0] + add r1, r4, r1 + mul r1, r2, r1 + sub r1, r1, r4 + str r1, [sp, #0x4] + str r0, [r5, #0x0] + str r1, [r5, #0x4] + add sp, sp, #0xc + ldmia sp!, {r4-r9,pc} + + arm_func_start FUN_020B5B54 +FUN_020B5B54: ; 0x020B5B54 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + str r2, [sp, #0x0] + add r3, sp, #0x4 + mov r2, #0x0 + str r2, [r3, #0x0] + mov r8, r0 + str r2, [r3, #0x4] + ldr r7, [r8, #0x4] + add r0, sp, #0x0 + mov r5, r1 + mov r4, #0x1 + blx r7 + cmp r0, #0x0 + beq _020B5BAC + add r6, sp, #0x0 +_020B5B94: + cmp r0, #0xa + mov r0, r6 + addeq r4, r4, #0x1 + blx r7 + cmp r0, #0x0 + bne _020B5B94 +_020B5BAC: + ldr r0, [r8, #0x0] + ldrsb r0, [r0, #0x1] + add r0, r5, r0 + mul r0, r4, r0 + sub r0, r0, r5 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + + arm_func_start FUN_020B5BC8 +FUN_020B5BC8: + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x8 + mov r8, r0 + str r2, [sp, #0x0] + ldr r4, [r8, #0x4] + add r0, sp, #0x0 + mov r7, r1 + mov r6, r3 + mov r5, #0x0 + blx r4 + movs r1, r0 + beq _020B5C58 + ldr sb, _020B5C84 ; =0x0000FFFF + add r10, sp, #0x0 +_020B5C00: + cmp r1, #0xa + beq _020B5C58 + mov r0, r8 + bl FUN_020B5CE4 + mov r1, r0 + cmp r1, r9 + ldreq r0, [r8, #0x0] + ldreqh r1, [r0, #0x2] + mov r0, r8 + bl FUN_020B5C88 + ldrh r1, [r8, #0x8] + cmp r1, #0x0 + ldrnesb r1, [r0, #0x0] + ldrneb r0, [r0, #0x1] + addne r0, r1, r0 + ldreqsb r0, [r0, #0x2] + add r1, r7, r0 + mov r0, r10 + add r5, r5, r1 + blx r4 + movs r1, r0 + bne _020B5C00 +_020B5C58: + cmp r6, #0x0 + beq _020B5C70 + cmp r1, #0xa + ldreq r0, [sp, #0x0] + movne r0, #0x0 + str r0, [r6, #0x0] +_020B5C70: + cmp r5, #0x0 + subgt r5, r5, r7 + mov r0, r5 + add sp, sp, #0x8 + ldmia sp!, {r4-r10,pc} + .balign 4 +_020B5C84: .word 0x0000FFFF + + arm_func_start FUN_020B5C88 +FUN_020B5C88: ; 0x020B5C88 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, [r0, #0x0] + ldr lr, [r3, #0xc] + cmp lr, #0x0 + beq _020B5CD8 +_020B5CA0: + ldrh r12, [lr, #0x0] + cmp r12, r1 + bhi _020B5CCC + ldrh r2, [lr, #0x2] + cmp r1, r2 + ldrlsh r2, [r0, #0xa] + addls r3, lr, #0x8 + subls r0, r1, r12 + mlals r0, r2, r0, r3 + addls sp, sp, #0x4 + ldmlsia sp!, {pc} +_020B5CCC: + ldr lr, [lr, #0x4] + cmp lr, #0x0 + bne _020B5CA0 +_020B5CD8: + add r0, r3, #0x4 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020B5CE4 +FUN_020B5CE4: ; 0x020B5CE4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x10] + cmp r0, #0x0 + beq _020B5D2C +_020B5CFC: + ldrh r2, [r0, #0x0] + cmp r2, r1 + bhi _020B5D20 + ldrh r2, [r0, #0x2] + cmp r1, r2 + bhi _020B5D20 + bl FUN_020B5D7C + add sp, sp, #0x4 + ldmia sp!, {pc} +_020B5D20: + ldr r0, [r0, #0x8] + cmp r0, #0x0 + bne _020B5CFC +_020B5D2C: + ldr r0, _020B5D38 ; =0x0000FFFF + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B5D38: .word 0x0000FFFF + + arm_func_start FUN_020B5D3C +FUN_020B5D3C: ; 0x020B5D3C + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, r1 + mov r1, r4 + bl FUN_020B7558 + sub r0, r0, #0x1 + strh r0, [r4, #0x8] + ldrh r0, [r4, #0x8] + cmp r0, #0x0 + movne r1, #0x2 + moveq r1, #0x3 + ldr r0, _020B5D78 ; =FUN_020B7718 + strh r1, [r4, #0xa] + str r0, [r4, #0x4] + ldmia sp!, {r4,pc} + .balign 4 +_020B5D78: .word FUN_020B7718 + + arm_func_start FUN_020B5D7C +FUN_020B5D7C: ; 0x020B5D7C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r3, [r0, #0x4] + ldr r2, _020B5E4C ; =0x0000FFFF + cmp r3, #0x0 + beq _020B5DA8 + cmp r3, #0x1 + beq _020B5DC4 + cmp r3, #0x2 + beq _020B5DD8 + b _020B5E40 +_020B5DA8: + ldrh r2, [r0, #0x0] + ldrh r3, [r0, #0xc] + sub r0, r1, r2 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r2, r0, lsr #0x10 + b _020B5E40 +_020B5DC4: + ldrh r2, [r0, #0x0] + sub r1, r1, r2 + add r0, r0, r1, lsl #0x1 + ldrh r2, [r0, #0xc] + b _020B5E40 +_020B5DD8: + ldrh r3, [r0, #0xc] + add r0, r0, #0xc + add r0, r0, #0x2 + sub r3, r3, #0x1 + add lr, r0, r3, lsl #0x2 + cmp r0, lr + bhi _020B5E40 +_020B5DF4: + sub r12, lr, r0 + mov r3, r12, asr #0x1 + add r3, r12, r3, lsr #0x1e + mov r3, r3, asr #0x2 + add r3, r3, r3, lsr #0x1f + mov r12, r3, asr #0x1 + mov r3, r12, lsl #0x2 + ldrh r3, [r0, r3] + add r12, r0, r12, lsl #0x2 + cmp r3, r1 + addcc r0, r12, #0x4 + blo _020B5E38 + cmp r1, r3 + subcc lr, r12, #0x4 + blo _020B5E38 + ldrh r2, [r12, #0x2] + b _020B5E40 +_020B5E38: + cmp r0, lr + bls _020B5DF4 +_020B5E40: + mov r0, r2 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B5E4C: .word 0x0000FFFF + + arm_func_start FUN_020B5E50 +FUN_020B5E50: ; 0x020B5E50 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x3c + mov r7, r0 + mov r0, r1 + cmp r0, #0x8 + ldr r0, [sp, #0x60] + str r1, [sp, #0x10] + str r0, [sp, #0x60] + ldr r0, [sp, #0x6c] + str r2, [sp, #0x14] + str r0, [sp, #0x6c] + ldrlt r0, [sp, #0x10] + mov r11, r3 + ldr r6, [sp, #0x64] + ldr r5, [sp, #0x68] + movge r2, #0x3 + clzlt r0, r0 + rsblt r2, r0, #0x1f + ldr r0, [sp, #0x14] + cmp r0, #0x8 + ldrlt r0, [sp, #0x14] + movge r1, #0x3 + clzlt r0, r0 + rsblt r1, r0, #0x1f + ldr r0, _020B6170 ; =0x020FF970 + mvn r3, #0x0 + add r1, r0, r1, lsl #0x3 + add r0, r1, r2, lsl #0x1 + ldrb r4, [r1, r2, lsl #0x1] + ldrb r1, [r0, #0x1] + ldr r2, [sp, #0x14] + cmp r6, #0x0 + str r1, [sp, #0x18] + ldr r1, [sp, #0x10] + and r1, r1, r3, lsl r4 + str r1, [sp, #0x1c] + ldr r1, [sp, #0x18] + and r1, r2, r3, lsl r1 + str r1, [sp, #0x20] + moveq r1, #0x1 + streq r1, [sp, #0x24] + movne r1, #0x2 + strne r1, [sp, #0x24] + mov r1, #0x0 + str r1, [sp, #0x28] + bl FUN_020B704C + ldr r1, [sp, #0x10] + ldr r2, [sp, #0x14] + mov r10, r1, asr r4 + ldr r1, [sp, #0x18] + mov r1, r2, asr r1 + str r1, [sp, #0x2c] + ldr r1, [sp, #0x24] + mov r2, r1, lsl r4 + ldr r1, [sp, #0x18] + mov r2, r2, lsl r1 + ldr r1, [sp, #0x6c] + mov r9, r2, asr r1 + mov r1, #0x0 + str r1, [sp, #0x30] + str r1, [sp, #0x34] + b _020B5FE8 +_020B5F48: + ldr r2, [sp, #0x30] + ldr r1, [sp, #0x18] + ldr r8, [sp, #0x34] + mov r2, r2, lsl r1 + ldr r1, [sp, #0x60] + add lr, r1, r2, lsl #0x3 + b _020B5FD4 +_020B5F64: + mov r1, r8, lsl r4 + add r2, r11, r1, lsl #0x3 + ldr r1, _020B6174 ; =0x000001FF + ldr r3, [r7, #0x0] + and r12, r2, r1 + ldr r1, _020B6178 ; =0xFE00FF00 + and r2, lr, #0xff + and r1, r3, r1 + orr r1, r1, r2 + orr r1, r1, r12, lsl #0x10 + str r1, [r7, #0x0] + ldr r3, [r7, #0x0] + ldr r1, _020B617C ; =0x3FFF3FFF + mov r2, #0x400 + and r1, r3, r1 + orr r1, r1, r0 + str r1, [r7, #0x0] + rsb r1, r2, #0x0 + ldrh r2, [r7, #0x4] + add r8, r8, #0x1 + and r1, r2, r1 + orr r1, r1, r5 + strh r1, [r7, #0x4] + ldr r1, [r7, #0x0] + add r5, r5, r9 + bic r1, r1, #0x2000 + orr r1, r1, r6, lsl #0xd + str r1, [r7], #0x8 +_020B5FD4: + cmp r8, r10 + blt _020B5F64 + ldr r1, [sp, #0x30] + add r1, r1, #0x1 + str r1, [sp, #0x30] +_020B5FE8: + ldr r2, [sp, #0x30] + ldr r1, [sp, #0x2c] + cmp r2, r1 + blt _020B5F48 + ldr r0, [sp, #0x28] + mla r0, r10, r1, r0 + str r0, [sp, #0x28] + ldr r1, [sp, #0x1c] + ldr r0, [sp, #0x10] + cmp r1, r0 + bhs _020B6078 + ldr r0, [sp, #0x60] + ldr r1, [sp, #0x10] + str r0, [sp, #0x0] + ldr r0, [sp, #0x1c] + str r6, [sp, #0x4] + sub r4, r1, r0 + ldr r1, [sp, #0x6c] + str r5, [sp, #0x8] + str r1, [sp, #0xc] + ldr r1, [sp, #0x1c] + ldr r2, [sp, #0x20] + add r3, r11, r1, lsl #0x3 + mov r0, r7 + mov r1, r4 + bl FUN_020B5E50 + ldr r1, [sp, #0x24] + add r7, r7, r0, lsl #0x3 + mul r2, r1, r4 + ldr r1, [sp, #0x20] + mul r2, r1, r2 + ldr r1, [sp, #0x6c] + add r5, r5, r2, lsr r1 + ldr r1, [sp, #0x28] + add r0, r1, r0 + str r0, [sp, #0x28] +_020B6078: + ldr r1, [sp, #0x20] + ldr r0, [sp, #0x14] + cmp r1, r0 + bhs _020B60F0 + ldr r1, [sp, #0x60] + ldr r0, [sp, #0x20] + mov r3, r11 + add r0, r1, r0, lsl #0x3 + str r0, [sp, #0x0] + str r6, [sp, #0x4] + ldr r1, [sp, #0x14] + ldr r0, [sp, #0x20] + str r5, [sp, #0x8] + sub r4, r1, r0 + ldr r1, [sp, #0x6c] + mov r0, r7 + str r1, [sp, #0xc] + ldr r1, [sp, #0x1c] + mov r2, r4 + bl FUN_020B5E50 + ldr r2, [sp, #0x24] + ldr r1, [sp, #0x1c] + add r7, r7, r0, lsl #0x3 + mul r1, r2, r1 + mul r2, r4, r1 + ldr r1, [sp, #0x6c] + add r5, r5, r2, lsr r1 + ldr r1, [sp, #0x28] + add r0, r1, r0 + str r0, [sp, #0x28] +_020B60F0: + ldr r1, [sp, #0x1c] + ldr r0, [sp, #0x10] + cmp r1, r0 + bhs _020B6164 + ldr r1, [sp, #0x20] + ldr r0, [sp, #0x14] + cmp r1, r0 + bhs _020B6164 + ldr r1, [sp, #0x60] + ldr r0, [sp, #0x20] + ldr r2, [sp, #0x10] + add r0, r1, r0, lsl #0x3 + ldr r1, [sp, #0x1c] + ldr r3, [sp, #0x14] + str r0, [sp, #0x0] + sub r1, r2, r1 + ldr r2, [sp, #0x20] + str r6, [sp, #0x4] + sub r2, r3, r2 + ldr r3, [sp, #0x1c] + ldr r4, [sp, #0x6c] + str r5, [sp, #0x8] + mov r0, r7 + add r3, r11, r3, lsl #0x3 + str r4, [sp, #0xc] + bl FUN_020B5E50 + ldr r1, [sp, #0x28] + add r0, r1, r0 + str r0, [sp, #0x28] +_020B6164: + ldr r0, [sp, #0x28] + add sp, sp, #0x3c + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B6170: .word 0x020FF970 +_020B6174: .word 0x000001FF +_020B6178: .word 0xFE00FF00 +_020B617C: .word 0x3FFF3FFF + + arm_func_start FUN_020B6180 +FUN_020B6180: ; 0x020B6180 + stmdb sp!, {r4-r6,lr} + mov r3, r0, lsr #0x3 + mov r6, r1, lsr #0x3 + mul r12, r3, r6 + and r2, r0, #0x4 + and lr, r0, #0x2 + and r0, r0, #0x1 + add r4, r0, lr, lsr #0x1 + mov r5, r2, lsr #0x2 + and r0, r1, #0x4 + add lr, r12, #0x0 + add r12, r5, r4, lsl #0x1 + mla r12, r6, r12, lr + and lr, r1, #0x2 + and r1, r1, #0x1 + add lr, r1, lr, lsr #0x1 + mov r1, r0, lsr #0x2 + add r1, r1, lr, lsl #0x1 + mla r12, r3, r1, r12 + add r1, r4, r2, lsr #0x2 + add r0, lr, r0, lsr #0x2 + mla r0, r1, r0, r12 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020B61DC +FUN_020B61DC: ; 0x020B61DC + stmdb sp!, {r4-r8,lr} + ldr r12, [sp, #0x1c] + ldr r8, [sp, #0x18] + mov r12, r12, lsl #0x1c + mov r4, r12, lsr #0x10 + mov r6, #0x0 + cmp r2, #0x0 + ldmleia sp!, {r4-r8,pc} +_020B61FC: ; 0x020B61FC + mov lr, r3, lsl #0x1 + mov r12, r6 +_020B6204: + mov r5, r0 + mov r7, r12 + cmp r1, #0x0 + ble _020B622C +_020B6214: + orr r3, r4, r8 + add r7, r7, #0x1 + cmp r7, r1 + add r8, r8, #0x1 + strh r3, [r5], #0x2 + blt _020B6214 +_020B622C: + add r6, r6, #0x1 + cmp r6, r2 + add r0, r0, lr + blt _020B6204 + ldmia sp!, {r4-r8,pc} + + arm_func_start FUN_020B6240 +FUN_020B6240: ; 0x020B6240 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + ldr r5, [sp, #0x24] + ldr lr, [sp, #0x20] + cmp r5, #0x20 + ldr r12, [sp, #0x28] + bgt _020B6280 + mla r4, r5, lr, r3 + ldr lr, [sp, #0x2c] + str r12, [sp, #0x0] + mov r3, r5 + add r0, r0, r4, lsl #0x1 + str lr, [sp, #0x4] + bl FUN_020B61DC + add sp, sp, #0x8 + ldmia sp!, {r4-r8,pc} +_020B6280: + ldr r4, [sp, #0x2c] + add r7, lr, r2 + mov r2, r4, lsl #0x1c + cmp lr, r7 + add r8, r3, r1 + mov r4, r2, lsr #0x10 + addge sp, sp, #0x8 + ldmgeia sp!, {r4-r8,pc} +_020B62A0: + cmp lr, #0x20 + movlt r1, lr + addge r1, lr, #0x20 + mov r6, r3 + cmp r3, r8 + add r5, r0, r1, lsl #0x6 + bge _020B62E4 +_020B62BC: + cmp r6, #0x20 + movlt r1, r6 + addge r1, r6, #0x3e0 + orr r2, r4, r12 + mov r1, r1, lsl #0x1 + add r6, r6, #0x1 + strh r2, [r5, r1] + cmp r6, r8 + add r12, r12, #0x1 + blt _020B62BC +_020B62E4: + add lr, lr, #0x1 + cmp lr, r7 + blt _020B62A0 + add sp, sp, #0x8 + ldmia sp!, {r4-r8,pc} + + arm_func_start FUN_020B62F8 +FUN_020B62F8: ; 0x020B62F8 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x18 + cmp r2, #0x8 + movlt r4, r2 + movge r12, #0x3 + clzlt r4, r4 + rsblt r12, r4, #0x1f + cmp r3, #0x8 + movlt r4, r3 + movge r6, #0x3 + clzlt r4, r4 + rsblt r6, r4, #0x1f + ldr r4, _020B6378 ; =0x020FF970 + ldr r5, [sp, #0x28] + add r4, r4, r6, lsl #0x3 + ldrb r6, [r4, r12, lsl #0x1] + add r12, r4, r12, lsl #0x1 + ldr r4, _020B637C ; =FUN_020B6908 + strb r6, [sp, #0x14] + ldrb r6, [r12, #0x1] + ldr lr, _020B6380 ; =FUN_020B68AC + ldr ip, _020B6384 ; =FUN_020B64C0 + strb r6, [sp, #0x15] + str r5, [sp, #0x0] + str r4, [sp, #0x4] + str lr, [sp, #0x8] + str r12, [sp, #0xc] + ldr r12, [sp, #0x14] + str r12, [sp, #0x10] + bl FUN_020B6488 + add sp, sp, #0x18 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B6378: .word 0x020FF970 +_020B637C: .word FUN_020B6908 +_020B6380: .word FUN_020B68AC +_020B6384: .word FUN_020B64C0 + + arm_func_start FUN_020B6388 +FUN_020B6388: ; 0x020B6388 + stmdb sp!, {lr} + sub sp, sp, #0x14 + ldr lr, [sp, #0x18] + ldr ip, _020B63C0 ; =FUN_020B6B10 + str lr, [sp, #0x0] + ldr lr, _020B63C4 ; =FUN_020B68AC + str r12, [sp, #0x4] + ldr ip, _020B63C8 ; =FUN_020B66D4 + str lr, [sp, #0x8] + str r12, [sp, #0xc] + str r2, [sp, #0x10] + bl FUN_020B6488 + add sp, sp, #0x14 + ldmia sp!, {pc} + .balign 4 +_020B63C0: .word FUN_020B6B10 +_020B63C4: .word FUN_020B68AC +_020B63C8: .word FUN_020B66D4 + + arm_func_start FUN_020B63CC +FUN_020B63CC: ; 0x020B63CC + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + mov r7, r1 + ldrh r1, [sp, #0x2c] + mov r8, r0 + mov r0, r7 + mov r6, r2 + mov r5, r3 + bl FUN_020B5CE4 + ldr r1, _020B6484 ; =0x0000FFFF + mov r4, r0 + cmp r4, r1 + ldreq r0, [r7, #0x0] + ldreqh r4, [r0, #0x2] + mov r0, r7 + mov r1, r4 + bl FUN_020B5C88 + str r0, [sp, #0x8] + ldr r0, [r7, #0x0] + ldr r2, [sp, #0x28] + ldr r0, [r0, #0x8] + add r1, sp, #0x8 + ldrh r3, [r0, #0x2] + add r12, r0, #0x8 + mov r0, r8 + mla r3, r4, r3, r12 + str r3, [sp, #0xc] + str r2, [sp, #0x0] + str r1, [sp, #0x4] + ldr r1, [sp, #0x8] + ldr r4, [r8, #0x14] + ldrsb r2, [r1, #0x0] + mov r1, r7 + mov r3, r5 + add r2, r6, r2 + blx r4 + ldrh r0, [r7, #0x8] + cmp r0, #0x0 + ldrne r0, [sp, #0x8] + ldrnesb r1, [r0, #0x0] + ldrneb r0, [r0, #0x1] + addne r0, r1, r0 + ldreq r0, [sp, #0x8] + ldreqsb r0, [r0, #0x2] + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020B6484: .word 0x0000FFFF + + arm_func_start FUN_020B6488 +FUN_020B6488: ; 0x020B6488 + str r2, [r0, #0x4] + ldr r2, [sp, #0x0] + str r3, [r0, #0x8] + strb r2, [r0, #0xc] + ldr r2, [sp, #0x4] + str r1, [r0, #0x0] + ldr r1, [sp, #0x8] + str r2, [r0, #0x14] + ldr r2, [sp, #0xc] + str r1, [r0, #0x18] + ldr r1, [sp, #0x10] + str r2, [r0, #0x1c] + str r1, [r0, #0x10] + bx lr + + arm_func_start FUN_020B64C0 +FUN_020B64C0: ; 0x020B64C0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x54 + ldrb r4, [r0, #0xc] + mov r10, r2 + str r1, [sp, #0xc] + str r4, [sp, #0x44] + ldr r1, [sp, #0x44] + ldr r4, [sp, #0x78] + cmp r1, #0x4 + add r1, r10, r4 + str r1, [sp, #0x1c] + ldr r2, [sp, #0x7c] + mov r1, r3 + add r1, r1, r2 + str r1, [sp, #0x20] + ldrne r1, [sp, #0xc] + str r3, [sp, #0x10] + orrne r1, r1, r1, lsl #0x8 + orrne r1, r1, r1, lsl #0x10 + strne r1, [sp, #0xc] + bne _020B6528 + ldr r1, [sp, #0xc] + orr r1, r1, r1, lsl #0x4 + orr r1, r1, r1, lsl #0x8 + orr r1, r1, r1, lsl #0x10 + str r1, [sp, #0xc] +_020B6528: + bic r1, r10, #0x7 + str r1, [sp, #0x30] + ldr r1, [sp, #0x10] + ldr r2, [r0, #0x10] + bic r1, r1, #0x7 + str r1, [sp, #0x14] + ldr r1, [sp, #0x44] + str r2, [sp, #0x4c] + mov r3, r1, lsl #0x6 + mov r2, r3, asr #0x2 + ldr r1, [sp, #0x20] + add r3, r3, r2, lsr #0x1d + ldr r2, [sp, #0x1c] + add r6, r1, #0x7 + add r2, r2, #0x7 + bic r5, r2, #0x7 + bic r2, r6, #0x7 + ldr r1, [sp, #0x30] + str r2, [sp, #0x24] + mov r2, r3, asr #0x3 + str r2, [sp, #0x48] + mov r4, r1, asr #0x2 + ldr r2, [sp, #0x30] + ldr r1, [sp, #0x14] + add r2, r2, r4, lsr #0x1d + mov r2, r2, asr #0x3 + str r2, [sp, #0x2c] + ldr r2, [sp, #0x14] + mov r1, r1, asr #0x2 + add r1, r2, r1, lsr #0x1d + mov r6, r1, asr #0x3 + ldr r1, [sp, #0x24] + cmp r2, r1 + ldr r1, [r0, #0x4] + str r1, [sp, #0x40] + ldr r1, [r0, #0x8] + ldr r0, [r0, #0x0] + str r1, [sp, #0x3c] + str r0, [sp, #0x28] + ldrb r0, [sp, #0x4c] + str r0, [sp, #0x38] + ldrb r0, [sp, #0x4d] + str r0, [sp, #0x34] + addge sp, sp, #0x54 + ldmgeia sp!, {r4-r11,pc} +_020B65DC: ; 0x020B65DC + mov r4, #0x0 + mov r11, #0x8 +_020B65E4: + ldr r1, [sp, #0x14] + ldr r0, [sp, #0x10] + ldr r7, [sp, #0x2c] + cmp r1, r0 + movlt r1, r0 + ldrlt r0, [sp, #0x14] + sublt r9, r1, r0 + ldr r1, [sp, #0x20] + ldr r0, [sp, #0x14] + movge r9, r4 + sub r0, r1, r0 + cmp r0, #0x8 + movgt r0, r11 + sub r0, r0, r9 + str r0, [sp, #0x18] + ldr r0, [sp, #0x30] + cmp r0, r5 + mov r8, r0 + bge _020B66B0 +_020B6630: + ldr r0, [sp, #0x38] + ldr r2, [sp, #0x40] + str r0, [sp, #0x0] + ldr r0, [sp, #0x34] + ldr r3, [sp, #0x3c] + str r0, [sp, #0x4] + mov r0, r7 + mov r1, r6 + bl FUN_020B7068 + ldr r2, [sp, #0x1c] + cmp r8, r10 + sublt r1, r10, r8 + sub r2, r2, r8 + movge r1, r4 + cmp r2, #0x8 + movgt r2, r11 + sub r3, r2, r1 + ldr r2, [sp, #0x18] + ldr r12, [sp, #0x48] + str r2, [sp, #0x0] + ldr r2, [sp, #0xc] + str r2, [sp, #0x4] + ldr r2, [sp, #0x44] + str r2, [sp, #0x8] + ldr r2, [sp, #0x28] + mla r0, r12, r0, r2 + mov r2, r9 + bl FUN_020B6F18 + add r8, r8, #0x8 + add r7, r7, #0x1 + cmp r8, r5 + blt _020B6630 +_020B66B0: + ldr r0, [sp, #0x14] + add r6, r6, #0x1 + add r1, r0, #0x8 + ldr r0, [sp, #0x24] + str r1, [sp, #0x14] + cmp r1, r0 + blt _020B65E4 + add sp, sp, #0x54 + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020B66D4 +FUN_020B66D4: ; 0x020B66D4 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x3c + ldrb r4, [r0, #0xc] + mov r10, r2 + str r1, [sp, #0xc] + str r4, [sp, #0x2c] + ldr r1, [sp, #0x2c] + ldr r4, [sp, #0x60] + cmp r1, #0x4 + add r1, r10, r4 + str r1, [sp, #0x18] + ldr r2, [sp, #0x64] + mov r1, r3 + add r1, r1, r2 + str r1, [sp, #0x1c] + ldrne r1, [sp, #0xc] + str r3, [sp, #0x10] + orrne r1, r1, r1, lsl #0x8 + orrne r1, r1, r1, lsl #0x10 + strne r1, [sp, #0xc] + bne _020B673C + ldr r1, [sp, #0xc] + orr r1, r1, r1, lsl #0x4 + orr r1, r1, r1, lsl #0x8 + orr r1, r1, r1, lsl #0x10 + str r1, [sp, #0xc] +_020B673C: + ldr r1, [sp, #0x10] + bic r1, r1, #0x7 + mov r2, r1, asr #0x2 + str r1, [sp, #0x14] + add r1, r1, r2, lsr #0x1d + ldr r2, [r0, #0x10] + mov r3, r1, asr #0x3 + mul r1, r3, r2 + bic r3, r10, #0x7 + str r3, [sp, #0x28] + ldr r3, [sp, #0x2c] + mov r6, r3, lsl #0x6 + ldr r3, [sp, #0x28] + mov r4, r6, asr #0x2 + mov r5, r3, asr #0x2 + add r5, r3, r5, lsr #0x1d + add r4, r6, r4, lsr #0x1d + mov r3, r4, asr #0x3 + str r3, [sp, #0x30] + ldr r3, [sp, #0x1c] + add r1, r1, r5, asr #0x3 + add r4, r3, #0x7 + ldr r3, [r0, #0x0] + ldr r0, [sp, #0x18] + add r5, r0, #0x7 + ldr r0, [sp, #0x30] + bic r7, r5, #0x7 + mla r1, r0, r1, r3 + bic r0, r4, #0x7 + str r0, [sp, #0x20] + ldr r0, [sp, #0x30] + str r1, [sp, #0x24] + mul r0, r2, r0 + str r0, [sp, #0x34] + ldr r1, [sp, #0x14] + ldr r0, [sp, #0x20] + cmp r1, r0 + addge sp, sp, #0x3c + ldmgeia sp!, {r4-r11,pc} +_020B67D8: ; 0x020B67D8 + mov r5, #0x0 + mov r4, #0x8 +_020B67E0: + ldr r1, [sp, #0x14] + ldr r0, [sp, #0x10] + ldr r6, [sp, #0x24] + cmp r1, r0 + movlt r1, r0 + ldrlt r0, [sp, #0x14] + sublt r9, r1, r0 + ldr r1, [sp, #0x1c] + ldr r0, [sp, #0x14] + movge r9, r5 + sub r0, r1, r0 + cmp r0, #0x8 + movgt r0, r4 + sub r11, r0, r9 + ldr r0, [sp, #0x28] + cmp r0, r7 + mov r8, r0 + bge _020B687C +_020B6828: + ldr r0, [sp, #0x18] + cmp r8, r10 + sublt r1, r10, r8 + sub r0, r0, r8 + movge r1, r5 + cmp r0, #0x8 + movgt r0, r4 + sub r3, r0, r1 + ldr r0, [sp, #0xc] + str r11, [sp, #0x0] + str r0, [sp, #0x4] + ldr r0, [sp, #0x2c] + mov r2, r9 + str r0, [sp, #0x8] + mov r0, r6 + bl FUN_020B6F18 + ldr r0, [sp, #0x30] + add r8, r8, #0x8 + add r6, r6, r0 + cmp r8, r7 + blt _020B6828 +_020B687C: + ldr r1, [sp, #0x24] + ldr r0, [sp, #0x34] + add r0, r1, r0 + str r0, [sp, #0x24] + ldr r0, [sp, #0x14] + add r1, r0, #0x8 + ldr r0, [sp, #0x20] + str r1, [sp, #0x14] + cmp r1, r0 + blt _020B67E0 + add sp, sp, #0x3c + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020B68AC +FUN_020B68AC: ; 0x020B68AC + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r3, r0 + ldrb r2, [r3, #0xc] + ldr r12, [r3, #0x4] + cmp r2, #0x4 + orreq r0, r1, r1, lsl #0x4 + orreq r0, r0, r0, lsl #0x8 + orreq r1, r0, r0, lsl #0x10 + orrne r0, r1, r1, lsl #0x8 + orrne r1, r0, r0, lsl #0x10 + ldr r0, [r3, #0x8] + mov r2, r2, lsl #0x6 + mul lr, r12, r0 + mov r0, r2, asr #0x2 + add r0, r2, r0, lsr #0x1d + mov r2, r0, asr #0x3 + mov r0, r1 + mul r2, lr, r2 + ldr r1, [r3, #0x0] + bl MIi_CpuClearFast + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020B6908 +FUN_020B6908: ; 0x020B6908 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4c + ldr r7, [sp, #0x74] + ldrb r5, [r0, #0xc] + ldr r6, [r1, #0x0] + ldr r4, [r7, #0x0] + ldr r9, [r6, #0x8] + mov r8, r5, lsl #0x6 + ldrb r4, [r4, #0x1] + mov r5, r8, asr #0x2 + add r5, r8, r5, lsr #0x1d + ldrb r9, [r9, #0x1] + ldr r8, [r0, #0x4] + ldr r6, [r0, #0x8] + str r2, [sp, #0x8] + str r3, [sp, #0xc] + cmp r4, #0x0 + mov r5, r5, asr #0x3 + addeq sp, sp, #0x4c + ldmeqia sp!, {r4-r11,pc} +_020B6958: ; 0x020B6958 + adds r3, r2, r4 + addmi sp, sp, #0x4c + ldmmiia sp!, {r4-r11,pc} +_020B6964: ; 0x020B6964 + ldr r2, [sp, #0xc] + adds r2, r2, r9 + addmi sp, sp, #0x4c + ldmmiia sp!, {r4-r11,pc} +_020B6974: ; 0x020B6974 + ldr r10, [sp, #0x8] + add r3, r3, #0x7 + cmp r10, #0x0 + movle r10, #0x0 + strle r10, [sp, #0x10] + movgt r10, r10, lsr #0x3 + strgt r10, [sp, #0x10] + ldr r10, [sp, #0xc] + add r2, r2, #0x7 + cmp r10, #0x0 + movle r10, #0x0 + mov r11, r2, lsr #0x3 + mov r3, r3, lsr #0x3 + movgt r10, r10, lsr #0x3 + cmp r3, r8 + movcs r3, r8 + cmp r11, r6 + ldr r2, [sp, #0x10] + movcs r11, r6 + subs r8, r3, r2 + addmi sp, sp, #0x4c + sub r3, r11, r10 + ldmmiia sp!, {r4-r11,pc} +_020B69D0: ; 0x020B69D0 + cmp r3, #0x0 + addlt sp, sp, #0x4c + ldmltia sp!, {r4-r11,pc} +_020B69DC: ; 0x020B69DC + ldr r2, [sp, #0x8] + ldr r6, [r0, #0x0] + cmp r2, #0x0 + andge r2, r2, #0x7 + strge r2, [sp, #0x8] + ldr r2, [sp, #0xc] + ldr r11, [sp, #0x8] + cmp r2, #0x0 + andge r2, r2, #0x7 + strge r2, [sp, #0xc] + sub r8, r11, r8, lsl #0x3 + ldr r11, [sp, #0xc] + ldr r2, [sp, #0x70] + sub r3, r11, r3, lsl #0x3 + str r3, [sp, #0x14] + ldr r3, [r7, #0x4] + sub r2, r2, #0x1 + str r3, [sp, #0x28] + str r2, [sp, #0x48] + str r9, [sp, #0x38] + str r4, [sp, #0x34] + ldr r4, [r1, #0x0] + ldr r2, [sp, #0x14] + mov r3, r11 + cmp r3, r2 + ldr r2, [r4, #0x8] + ldrb r3, [r2, #0x6] + str r3, [sp, #0x40] + ldrb r2, [r0, #0xc] + str r2, [sp, #0x44] + ldr r1, [r1, #0x0] + ldr r1, [r1, #0x8] + ldrb r1, [r1, #0x0] + mul r1, r3, r1 + str r1, [sp, #0x3c] + ldr r1, [r0, #0x10] + str r1, [sp, #0x20] + ldr r1, [r0, #0x4] + ldr r0, [r0, #0x8] + ldrb r11, [sp, #0x20] + ldrb r4, [sp, #0x21] + str r1, [sp, #0x1c] + str r0, [sp, #0x18] + addle sp, sp, #0x4c + ldmleia sp!, {r4-r11,pc} +_020B6A90: + ldr r0, [sp, #0xc] + ldr r7, [sp, #0x10] + str r0, [sp, #0x30] + ldr r0, [sp, #0x8] + cmp r0, r8 + mov r9, r0 + ble _020B6AEC +_020B6AAC: + ldr r2, [sp, #0x1c] + str r11, [sp, #0x0] + ldr r3, [sp, #0x18] + mov r0, r7 + mov r1, r10 + str r4, [sp, #0x4] + bl FUN_020B7068 + mla r1, r0, r5, r6 + add r0, sp, #0x24 + str r9, [sp, #0x2c] + str r1, [sp, #0x24] + bl FUN_020B6CAC + sub r9, r9, #0x8 + add r7, r7, #0x1 + cmp r9, r8 + bgt _020B6AAC +_020B6AEC: + ldr r0, [sp, #0xc] + add r10, r10, #0x1 + sub r1, r0, #0x8 + ldr r0, [sp, #0x14] + str r1, [sp, #0xc] + cmp r1, r0 + bgt _020B6A90 + add sp, sp, #0x4c + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020B6B10 +FUN_020B6B10: ; 0x020B6B10 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x2c + ldr r4, [sp, #0x54] + ldrb r5, [r0, #0xc] + str r4, [sp, #0x54] + ldr r4, [r4, #0x0] + ldr r6, [r1, #0x0] + mov r7, r5, lsl #0x6 + ldrb r4, [r4, #0x1] + mov r5, r7, asr #0x2 + add r5, r7, r5, lsr #0x1d + cmp r4, #0x0 + ldr r6, [r6, #0x8] + mov r9, r3 + ldr r8, [r0, #0x4] + ldr r7, [r0, #0x8] + mov r10, r2 + mov r5, r5, asr #0x3 + addeq sp, sp, #0x2c + ldr lr, [r0, #0x0] + ldrb r3, [r6, #0x1] + ldmeqia sp!, {r4-r11,pc} +_020B6B68: ; 0x020B6B68 + adds r6, r10, r4 + addmi sp, sp, #0x2c + ldmmiia sp!, {r4-r11,pc} +_020B6B74: ; 0x020B6B74 + adds r2, r9, r3 + addmi sp, sp, #0x2c + ldmmiia sp!, {r4-r11,pc} +_020B6B80: ; 0x020B6B80 + cmp r10, #0x0 + movle r11, #0x0 + add r6, r6, #0x7 + movgt r11, r10, lsr #0x3 + cmp r9, #0x0 + movle r12, #0x0 + add r2, r2, #0x7 + mov r6, r6, lsr #0x3 + movgt r12, r9, lsr #0x3 + cmp r6, r8 + movcs r6, r8 + mov r2, r2, lsr #0x3 + cmp r2, r7 + movcs r2, r7 + subs r7, r6, r11 + addmi sp, sp, #0x2c + sub r2, r2, r12 + ldmmiia sp!, {r4-r11,pc} +_020B6BC8: ; 0x020B6BC8 + cmp r2, #0x0 + addlt sp, sp, #0x2c + ldmltia sp!, {r4-r11,pc} +_020B6BD4: ; 0x020B6BD4 + ldr r6, [r0, #0x10] + cmp r10, #0x0 + sub r8, r6, r7 + mul r8, r5, r8 + mla r11, r6, r12, r11 + andge r10, r10, #0x7 + str r8, [sp, #0x0] + ldr r8, [sp, #0x54] + mla r6, r5, r11, lr + ldr r12, [r8, #0x4] + ldr r11, [sp, #0x50] + cmp r9, #0x0 + sub r8, r11, #0x1 + andge r9, r9, #0x7 + sub r11, r9, r2, lsl #0x3 + str r12, [sp, #0x8] + str r4, [sp, #0x14] + str r8, [sp, #0x28] + str r3, [sp, #0x18] + ldr r3, [r1, #0x0] + cmp r9, r11 + ldr r2, [r3, #0x8] + sub r7, r10, r7, lsl #0x3 + ldrb r2, [r2, #0x6] + str r2, [sp, #0x20] + ldrb r0, [r0, #0xc] + str r0, [sp, #0x24] + ldr r0, [r1, #0x0] + ldr r0, [r0, #0x8] + ldrb r0, [r0, #0x0] + mul r0, r2, r0 + str r0, [sp, #0x1c] + addle sp, sp, #0x2c + ldmleia sp!, {r4-r11,pc} +_020B6C5C: ; 0x020B6C5C + add r4, sp, #0x4 +_020B6C60: + mov r8, r10 + str r9, [sp, #0x10] + cmp r10, r7 + ble _020B6C90 +_020B6C70: + mov r0, r4 + str r6, [sp, #0x4] + str r8, [sp, #0xc] + bl FUN_020B6CAC + sub r8, r8, #0x8 + cmp r8, r7 + add r6, r6, r5 + bgt _020B6C70 +_020B6C90: + ldr r0, [sp, #0x0] + sub r9, r9, #0x8 + cmp r9, r11 + add r6, r6, r0 + bgt _020B6C60 + add sp, sp, #0x2c + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020B6CAC +FUN_020B6CAC: ; 0x020B6CAC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x34 + ldr r5, [r0, #0x8] + ldr r4, [r0, #0xc] + cmp r5, #0x0 + strge r5, [sp, #0x0] + movlt r1, #0x0 + strlt r1, [sp, #0x0] + ldr r1, [r0, #0x10] + cmp r4, #0x0 + add r10, r5, r1 + ldr r1, [r0, #0x14] + movge r2, r4 + movlt r2, #0x0 + cmp r10, #0x8 + add r3, r4, r1 + movge r10, #0x8 + cmp r3, #0x8 + movge r3, #0x8 + cmp r4, #0x0 + movgt r4, #0x0 + cmp r5, #0x0 + ldr r8, [r0, #0x20] + movgt r5, #0x0 + rsb r1, r4, #0x0 + mul r7, r10, r8 + ldr r6, [r0, #0x1c] + rsb r4, r5, #0x0 + mul r9, r6, r4 + ldr r4, [r0, #0x18] + mov r10, r7 + str r4, [sp, #0x8] + ldr r4, [sp, #0x0] + cmp r8, #0x4 + mul r5, r4, r8 + ldr r4, [sp, #0x8] + str r5, [sp, #0x0] + mla r11, r1, r4, r9 + ldr r1, [r0, #0x4] + str r1, [sp, #0x4] + bne _020B6E24 + ldr r1, [r0, #0x0] + ldr r7, [r0, #0x24] + add r0, r1, r2, lsl #0x2 + str r0, [sp, #0xc] + add r0, r1, r3, lsl #0x2 + ldr r1, [sp, #0xc] + str r0, [sp, #0x10] + cmp r1, r0 + addcs sp, sp, #0x34 + ldmcsia sp!, {r4-r11,pc} +_020B6D78: ; 0x020B6D78 + mov r0, #0x0 + add r9, sp, #0x24 + mov r4, #0xf + str r0, [sp, #0x1c] +_020B6D88: + ldr r0, [sp, #0xc] + mov r1, r11, lsr #0x1f + ldr r5, [r0, #0x0] + ldr r0, [sp, #0x4] + rsb r2, r1, r11, lsl #0x1d + add r0, r0, r11, lsr #0x3 + str r0, [sp, #0x24] + ldr r0, [sp, #0x1c] + add r1, r1, r2, ror #0x1d + strb r0, [sp, #0x28] + strb r0, [sp, #0x29] + mov r0, r9 + bl FUN_020B76B0 + ldr r8, [sp, #0x0] + mov r0, r8 + cmp r0, r10 + bhs _020B6DF8 +_020B6DCC: + mov r0, r9 + mov r1, r6 + bl FUN_020B76B0 +_020B6DD8: ; 0x020B6DD8 + cmp r0, #0x0 + mvnne r1, r4, lsl r8 + addne r0, r7, r0 + andne r1, r5, r1 + orrne r5, r1, r0, lsl r8 + add r8, r8, #0x4 + cmp r8, r10 + blo _020B6DCC +_020B6DF8: + ldr r0, [sp, #0xc] + add r1, r0, #0x4 + str r5, [r0, #0x0] + ldr r0, [sp, #0x10] + str r1, [sp, #0xc] + cmp r1, r0 + ldr r0, [sp, #0x8] + add r11, r11, r0 + blo _020B6D88 + add sp, sp, #0x34 + ldmia sp!, {r4-r11,pc} +_020B6E24: + ldr r1, [r0, #0x0] + ldr r9, [r0, #0x24] + add r0, r1, r2, lsl #0x3 + str r0, [sp, #0x14] + add r0, r1, r3, lsl #0x3 + ldr r1, [sp, #0x14] + str r0, [sp, #0x18] + cmp r1, r0 + addcs sp, sp, #0x34 + ldmcsia sp!, {r4-r11,pc} +_020B6E4C: ; 0x020B6E4C + mov r0, #0x0 + mov r4, #0xff + str r0, [sp, #0x20] +_020B6E58: + mov r1, r11, lsr #0x1f + rsb r0, r1, r11, lsl #0x1d + add r1, r1, r0, ror #0x1d + ldr r0, [sp, #0x14] + ldr r8, [r0, #0x0] + ldr r7, [r0, #0x4] + ldr r0, [sp, #0x4] + add r0, r0, r11, lsr #0x3 + str r0, [sp, #0x2c] + ldr r0, [sp, #0x20] + strb r0, [sp, #0x30] + strb r0, [sp, #0x31] + add r0, sp, #0x2c + bl FUN_020B76B0 +_020B6E90: ; 0x020B6E90 + ldr r0, [sp, #0x0] + cmp r0, r10 + mov r5, r0 + bhs _020B6EE8 +_020B6EA0: + add r0, sp, #0x2c + mov r1, r6 + bl FUN_020B76B0 +_020B6EAC: ; 0x020B6EAC + cmp r0, #0x0 + beq _020B6EDC + cmp r5, #0x20 + mvncc r1, r4, lsl r5 + addcc r0, r9, r0 + andcc r1, r8, r1 + orrcc r8, r1, r0, lsl r5 + subcs r2, r5, #0x20 + mvncs r1, r4, lsl r2 + addcs r0, r9, r0 + andcs r1, r7, r1 + orrcs r7, r1, r0, lsl r2 +_020B6EDC: + add r5, r5, #0x8 + cmp r5, r10 + blo _020B6EA0 +_020B6EE8: + ldr r0, [sp, #0x14] + str r8, [r0, #0x0] + add r1, r0, #0x8 + str r7, [r0, #0x4] + ldr r0, [sp, #0x18] + str r1, [sp, #0x14] + cmp r1, r0 + ldr r0, [sp, #0x8] + add r11, r11, r0 + blo _020B6E58 + add sp, sp, #0x34 + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020B6F18 +FUN_020B6F18: ; 0x020B6F18 + stmdb sp!, {r4-r6,lr} + mov lr, r0 + cmp r3, #0x8 + ldr r0, [sp, #0x14] + bne _020B6F4C + ldr r4, [sp, #0x10] + cmp r4, #0x8 + bne _020B6F4C + ldr r2, [sp, #0x18] + mov r1, lr + mov r2, r2, lsl #0x3 + bl MIi_CpuClearFast + ldmia sp!, {r4-r6,pc} +_020B6F4C: + ldr r4, [sp, #0x18] + cmp r4, #0x4 + bne _020B6FAC + mov r5, r1, lsl #0x2 + add r4, r5, r3, lsl #0x2 + mvn r3, #0x0 + rsb r4, r4, #0x20 + mov r3, r3, lsr r5 + add r1, r4, r1, lsl #0x2 + mov r3, r3, lsl r1 + ldr r1, [sp, #0x10] + add r5, lr, r2, lsl #0x2 + add r2, r5, r1, lsl #0x2 + and r6, r0, r3, lsr r4 + cmp r5, r2 + mvn r1, r3, lsr r4 + ldmcsia sp!, {r4-r6,pc} +_020B6F90: + ldr r0, [r5, #0x0] + and r0, r0, r1 + orr r0, r6, r0 + str r0, [r5], #0x4 + cmp r5, r2 + blo _020B6F90 + ldmia sp!, {r4-r6,pc} +_020B6FAC: + mov r12, r1, lsl #0x3 + add r1, r12, r3, lsl #0x3 + rsb r1, r1, #0x40 + mvn r3, #0x0 + cmp r1, #0x20 + mov r5, r3, lsr r12 + subcs r4, r1, #0x20 + addcs r3, r12, r4 + movcs r3, r5, lsl r3 + movcs r3, r3, lsr r4 + movcc r3, r5, lsl r12 + mvn r4, #0x0 + add r5, lr, r2, lsl #0x3 + cmp r12, #0x20 + mov r4, r4, lsl r1 + subcs r12, r12, #0x20 + addcs r1, r12, r1 + movcs r1, r4, lsr r1 + movcs r6, r1, lsl r12 + movcc r6, r4, lsr r1 + ldr r1, [sp, #0x10] + and lr, r0, r3 + add r4, r5, r1, lsl #0x3 + cmp r5, r4 + and r12, r0, r6 + mvn r2, r3 + mvn r1, r6 + ldmcsia sp!, {r4-r6,pc} +_020B701C: + ldr r0, [r5, #0x0] + and r0, r0, r2 + orr r0, lr, r0 + str r0, [r5, #0x0] + ldr r0, [r5, #0x4] + and r0, r0, r1 + orr r0, r12, r0 + str r0, [r5, #0x4] + add r5, r5, #0x8 + cmp r5, r4 + blo _020B701C + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020B704C +FUN_020B704C: ; 0x020B704C + ldrb r3, [r0, #0x1] + ldr r2, _020B7064 ; =0x020FF990 + ldrb r1, [r0, #0x0] + add r0, r2, r3, lsl #0x4 + ldr r0, [r0, r1, lsl #0x2] + bx lr + .balign 4 +_020B7064: .word 0x020FF990 + + arm_func_start FUN_020B7068 +FUN_020B7068: ; 0x020B7068 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr fp, _020B7164 ; =0x020FF970 + mov r9, #0x0 + mov r10, #0x3 + mvn r7, #0x0 +_020B7080: + ldr r4, [sp, #0x2c] + ldr r6, [sp, #0x28] + and r12, r3, r7, lsl r4 + cmp r12, r1 + mov r8, r7, lsl r6 + mov r5, r7, lsl r4 + and lr, r2, r7, lsl r6 + bhi _020B70D0 + mla r9, r2, r12, r9 + cmp lr, r0 + movhi r2, lr + subhi r1, r1, r12 + subhi r3, r3, r12 + bhi _020B7118 + sub r3, r3, r12 + mla r9, lr, r3, r9 + sub r0, r0, lr + sub r1, r1, r12 + sub r2, r2, lr + b _020B7118 +_020B70D0: + cmp lr, r0 + mlals r9, lr, r12, r9 + mvn r3, r5 + movls r3, r12 + subls r0, r0, lr + subls r2, r2, lr + bls _020B7118 + and r2, r1, r5 + mla r5, lr, r2, r9 + and r2, r0, r8 + and r1, r1, r3 + add r2, r5, r2, lsl r4 + mvn r3, r8 + add r1, r2, r1, lsl r6 + and r0, r0, r3 + add sp, sp, #0x4 + add r0, r1, r0 + ldmia sp!, {r4-r11,pc} +_020B7118: + cmp r2, #0x8 + movlt r4, r2 + movge r5, r10 + clzlt r4, r4 + rsblt r5, r4, #0x1f + cmp r3, #0x8 + movge r4, r10 + movlt r4, r3 + clzlt r4, r4 + rsblt r4, r4, #0x1f + add r4, r11, r4, lsl #0x3 + add r6, r4, r5, lsl #0x1 + ldrb r5, [r4, r5, lsl #0x1] + ldrb r4, [r6, #0x1] + str r5, [sp, #0x28] + str r4, [sp, #0x2c] + b _020B7080 +_020B715C: ; 0x020B715C + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B7164: .word 0x020FF970 + + arm_func_start FUN_020B7168 +FUN_020B7168: ; 0x020B7168 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + ldr r12, [sp, #0x28] + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + ands r0, r12, #0x100 + beq _020B71AC + ldr r0, [r7, #0x4] + ldr r1, [r7, #0xc] + ldr r2, [sp, #0x2c] + bl FUN_020B5B54 + ldr r1, [sp, #0x20] + sub r0, r1, r0 + add r5, r5, r0 + b _020B71E4 +_020B71AC: + ands r0, r12, #0x80 + beq _020B71E4 + ldr r0, [r7, #0x4] + ldr r1, [r7, #0xc] + ldr r2, [sp, #0x2c] + bl FUN_020B5B54 + ldr r2, [sp, #0x20] + add r1, r0, #0x1 + add r0, r2, #0x1 + add r0, r0, r0, lsr #0x1f + mov r2, r0, asr #0x1 + add r0, r1, r1, lsr #0x1f + sub r0, r2, r0, asr #0x1 + add r5, r5, r0 +_020B71E4: + ldr r1, [sp, #0x24] + ldr r0, [sp, #0x28] + str r1, [sp, #0x0] + ldr r12, [sp, #0x2c] + str r0, [sp, #0x4] + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + str r12, [sp, #0x8] + bl FUN_020B72C4 + add sp, sp, #0xc + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020B7218 +FUN_020B7218: ; 0x020B7218 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x18 + ldr r4, [sp, #0x34] + mov r8, r0 + str r4, [sp, #0x0] + mov r7, r1 + mov r6, r2 + mov r5, r3 + ldr r4, [sp, #0x30] + ldr r1, [r8, #0x4] + ldr r2, [r8, #0x8] + ldr r3, [r8, #0xc] + add r0, sp, #0xc + bl FUN_020B5ABC + ands r0, r4, #0x10 + ldrne r0, [sp, #0xc] + addne r0, r0, #0x1 + addne r0, r0, r0, lsr #0x1f + subne r7, r7, r0, asr #0x1 + bne _020B7274 + ands r0, r4, #0x20 + ldrne r0, [sp, #0xc] + subne r7, r7, r0 +_020B7274: + ands r0, r4, #0x2 + ldrne r0, [sp, #0x10] + addne r0, r0, #0x1 + addne r0, r0, r0, lsr #0x1f + subne r6, r6, r0, asr #0x1 + bne _020B7298 + ands r0, r4, #0x4 + ldrne r0, [sp, #0x10] + subne r6, r6, r0 +_020B7298: + str r5, [sp, #0x0] + ldr r0, [sp, #0x34] + str r4, [sp, #0x4] + str r0, [sp, #0x8] + ldr r3, [sp, #0xc] + mov r0, r8 + mov r1, r7 + mov r2, r6 + bl FUN_020B72C4 + add sp, sp, #0x18 + ldmia sp!, {r4-r8,pc} + + arm_func_start FUN_020B72C4 +FUN_020B72C4: ; 0x020B72C4 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x14 + mov r10, r0 + ldr r4, [r10, #0x4] + ldr r0, [sp, #0x40] + ldr r4, [r4, #0x0] + ldr r5, [r10, #0xc] + ldrsb r4, [r4, #0x1] + cmp r0, #0x0 + mov r9, r1 + str r0, [sp, #0xc] + ldr r0, [sp, #0x38] + mov r8, r2 + str r0, [sp, #0x38] + mov r7, r3 + add r6, r5, r4 + addeq sp, sp, #0x14 + ldmeqia sp!, {r4-r11,pc} +_020B730C: ; 0x020B730C + add r0, r7, #0x1 + ldr r1, [sp, #0x3c] + add r0, r0, r0, lsr #0x1f + mov r0, r0, asr #0x1 + and r5, r1, #0x800 + and r11, r1, #0x400 + str r0, [sp, #0x8] + mov r4, #0x0 +_020B732C: + mov r1, r9 + cmp r5, #0x0 + beq _020B7358 + ldr r0, [r10, #0x4] + ldr r1, [r10, #0x8] + ldr r2, [sp, #0xc] + mov r3, r4 + bl FUN_020B5BC8 +_020B734C: ; 0x020B734C + sub r0, r7, r0 + add r1, r9, r0 + b _020B7388 +_020B7358: + cmp r11, #0x0 + beq _020B7388 + ldr r0, [r10, #0x4] + ldr r1, [r10, #0x8] + ldr r2, [sp, #0xc] + mov r3, r4 + bl FUN_020B5BC8 + add r0, r0, #0x1 + add r1, r0, r0, lsr #0x1f + ldr r0, [sp, #0x8] + sub r0, r0, r1, asr #0x1 + add r1, r9, r0 +_020B7388: + ldr r2, [sp, #0xc] + add r3, sp, #0xc + str r2, [sp, #0x0] + str r3, [sp, #0x4] + ldr r3, [sp, #0x38] + mov r0, r10 + mov r2, r8 + bl FUN_020B73C0 + ldr r0, [sp, #0xc] + add r8, r8, r6 + cmp r0, #0x0 + bne _020B732C + add sp, sp, #0x14 + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020B73C0 +FUN_020B73C0: ; 0x020B73C0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r10, r0 + ldr r6, [r10, #0x8] + ldr r5, [r10, #0x4] + ldr r4, [sp, #0x30] + add r0, sp, #0x8 + str r4, [sp, #0x8] + ldr r4, [r5, #0x4] + mov r9, r1 + mov r8, r2 + mov r7, r3 + blx r4 + cmp r0, #0x0 + beq _020B743C + add r11, sp, #0x8 +_020B7400: + cmp r0, #0xa + beq _020B743C + str r7, [sp, #0x0] + str r0, [sp, #0x4] + ldr r0, [r10, #0x0] + mov r1, r5 + mov r2, r9 + mov r3, r8 + bl FUN_020B63CC + add r1, r9, r0 + mov r0, r11 + add r9, r1, r6 + blx r4 + cmp r0, #0x0 + bne _020B7400 +_020B743C: + ldr r1, [sp, #0x34] + cmp r1, #0x0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r11,pc} +_020B744C: ; 0x020B744C + cmp r0, #0xa + ldreq r1, [sp, #0x8] + ldr r0, [sp, #0x34] + movne r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020B7468 +FUN_020B7468: ; 0x020B7468 + stmdb sp!, {r4-r6,lr} + ldrh r2, [r0, #0xc] + ldrh r3, [r0, #0xe] + mov r1, #0x0 + add r2, r0, r2 + cmp r3, #0x0 + ldmleia sp!, {r4-r6,pc} +_020B7484: ; 0x020B7484 + ldr r3, _020B7548 ; =0x46494E46 + ldr ip, _020B754C ; =0x43574448 + ldr r4, _020B7550 ; =0x434D4150 + ldr lr, _020B7554 ; =0x43474C50 +_020B7494: + ldr r5, [r2, #0x0] + cmp r5, r4 + bhi _020B74B0 + cmp r5, r4 + bhs _020B7518 + cmp r5, lr + b _020B752C +_020B74B0: + cmp r5, r12 + bhi _020B74C4 + cmp r5, r12 + beq _020B7500 + b _020B752C +_020B74C4: + cmp r5, r3 + bne _020B752C + add r6, r2, #0x8 + ldr r5, [r6, #0x8] + add r5, r5, r0 + str r5, [r6, #0x8] + ldr r5, [r6, #0xc] + cmp r5, #0x0 + addne r5, r5, r0 + strne r5, [r6, #0xc] + ldr r5, [r6, #0x10] + cmp r5, #0x0 + addne r5, r5, r0 + strne r5, [r6, #0x10] + b _020B752C +_020B7500: + add r6, r2, #0x8 + ldr r5, [r6, #0x4] + cmp r5, #0x0 + addne r5, r5, r0 + strne r5, [r6, #0x4] + b _020B752C +_020B7518: + add r6, r2, #0x8 + ldr r5, [r6, #0x8] + cmp r5, #0x0 + addne r5, r5, r0 + strne r5, [r6, #0x8] +_020B752C: + ldrh r5, [r0, #0xe] + ldr r6, [r2, #0x4] + add r1, r1, #0x1 + cmp r1, r5 + add r2, r2, r6 + blt _020B7494 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B7548: .word 0x46494E46 +_020B754C: .word 0x43574448 +_020B7550: .word 0x434D4150 +_020B7554: .word 0x43474C50 + + arm_func_start FUN_020B7558 +FUN_020B7558: ; 0x020B7558 + stmdb sp!, {r4-r6,lr} + movs r6, r0 + mov r5, r1 + beq _020B75C8 + cmp r6, #0x0 + beq _020B7584 + ldr r1, [r6, #0x0] + ldr r0, _020B76A8 ; =0x4E465452 + cmp r1, r0 + moveq r0, #0x1 + beq _020B7588 +_020B7584: + mov r0, #0x0 +_020B7588: + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + beq _020B75CC + cmp r6, #0x0 + beq _020B75B4 + ldrh r0, [r6, #0x6] + cmp r0, #0x100 + movcs r0, #0x1 + bhs _020B75B8 +_020B75B4: + mov r0, #0x0 +_020B75B8: + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + b _020B75CC +_020B75C8: + mov r0, #0x0 +_020B75CC: + cmp r0, #0x0 + movne r4, #0x0 + bne _020B7654 + cmp r6, #0x0 + beq _020B7640 + cmp r6, #0x0 + beq _020B75FC + ldr r1, [r6, #0x0] + ldr r0, _020B76A8 ; =0x4E465452 + cmp r1, r0 + moveq r0, #0x1 + beq _020B7600 +_020B75FC: + mov r0, #0x0 +_020B7600: + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + beq _020B7644 + cmp r6, #0x0 + beq _020B762C + ldrh r0, [r6, #0x6] + cmp r0, #0x1 + movcs r0, #0x1 + bhs _020B7630 +_020B762C: + mov r0, #0x0 +_020B7630: + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + b _020B7644 +_020B7640: + mov r0, #0x0 +_020B7644: + cmp r0, #0x0 + movne r4, #0x1 + bne _020B7654 + bl OS_Terminate +_020B7654: + mov r0, r6 + bl FUN_020B7468 + ldr r1, _020B76AC ; =0x46494E46 + mov r0, r6 + bl FUN_020B01F8 +_020B7668: ; 0x020B7668 + cmp r0, #0x0 + moveq r0, #0x0 + streq r0, [r5, #0x0] + ldmeqia sp!, {r4-r6,pc} +_020B7678: ; 0x020B7678 + add r0, r0, #0x8 + str r0, [r5, #0x0] + cmp r4, #0x0 + beq _020B76A0 + ldr r2, [r5, #0x0] + mov r1, #0x0 + ldrsb r0, [r2, #0x6] + strb r0, [r2, #0x7] + ldr r0, [r5, #0x0] + strb r1, [r0, #0x6] +_020B76A0: + add r0, r4, #0x1 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B76A8: .word 0x4E465452 +_020B76AC: .word 0x46494E46 + + arm_func_start FUN_020B76B0 +FUN_020B76B0: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldrsb r2, [r0, #0x4] + ldrb r12, [r0, #0x5] + mov r4, r1 + cmp r2, r4 + subge r1, r2, r4 + movge r5, r12, lsr r1 + strgeb r1, [r0, #0x4] + bge _020B7704 + ldr r3, [r0, #0x0] + sub r1, r4, r2 + add r2, r3, #0x1 + str r2, [r0, #0x0] + ldrb r2, [r3, #0x0] + mov r5, r12, lsl r1 + strb r2, [r0, #0x5] + mov r2, #0x8 + strb r2, [r0, #0x4] + bl FUN_020B76B0 + orr r5, r0, r5 +_020B7704: + rsb r0, r4, #0x8 + mov r1, #0xff + and r0, r5, r1, asr r0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020B7718 +FUN_020B7718: ; 0x020B7718 + ldr r1, [r0, #0x0] + ldrh r2, [r1], #0x2 + str r1, [r0, #0x0] + mov r0, r2 + bx lr + + arm_func_start FUN_020B772C +FUN_020B772C: ; 0x020B772C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r0 + ldrb r0, [r6, #0x9] + mov r5, #0x0 + cmp r0, #0x0 + addls sp, sp, #0x4 + ldmlsia sp!, {r4-r7,pc} +_020B774C: ; 0x020B774C + add r4, r6, #0x8 +_020B7750: + ldrh r0, [r6, #0xe] + ldrh r1, [r4, r0] + add r0, r4, r0 + mla r0, r1, r5, r0 + ldr r0, [r0, #0x4] + add r7, r6, r0 + mov r0, r7 + bl FUN_020B79A4 + mov r0, r7 + bl FUN_020B780C + ldrb r0, [r6, #0x9] + add r5, r5, #0x1 + cmp r5, r0 + blo _020B7750 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020B7790 +FUN_020B7790: ; 0x020B7790 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r8, r0 + ldrb r0, [r8, #0x9] + mov r7, r1 + mov r5, #0x1 + cmp r0, #0x0 + mov r6, #0x0 + bls _020B7800 + add r4, r8, #0x8 +_020B77B8: + ldrh r0, [r8, #0xe] + mov r1, r7 + ldrh r2, [r4, r0] + add r0, r4, r0 + mla r0, r2, r6, r0 + ldr r0, [r0, #0x4] + add r9, r8, r0 + mov r0, r9 + bl FUN_020B7A04 + and r5, r5, r0 + mov r0, r9 + mov r1, r7 + bl FUN_020B7864 + ldrb r1, [r8, #0x9] + add r6, r6, #0x1 + and r5, r5, r0 + cmp r6, r1 + blo _020B77B8 +_020B7800: + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + + arm_func_start FUN_020B780C +FUN_020B780C: ; 0x020B780C + ldr r2, [r0, #0x8] + mov r1, #0x0 + add r2, r0, r2 + ldrh r0, [r2, #0x2] + add r12, r2, r0 + ldrb r0, [r12, #0x1] + cmp r0, #0x0 + bxls lr +_020B782C: + ldrh r2, [r12, #0x6] + ldrh r0, [r12, r2] + add r2, r12, r2 + add r2, r2, #0x4 + mla r3, r0, r1, r2 + ldrb r0, [r3, #0x3] + add r1, r1, #0x1 + ands r2, r0, #0x1 + bicne r0, r0, #0x1 + strneb r0, [r3, #0x3] + ldrb r0, [r12, #0x1] + cmp r1, r0 + blo _020B782C + bx lr + + arm_func_start FUN_020B7864 +FUN_020B7864: ; 0x020B7864 + stmdb sp!, {r4-r10,lr} + ldr r2, [r0, #0x8] + mov r10, r1 + add r9, r0, r2 + ldrh r0, [r9, #0x2] + mov r6, #0x1 + mov r7, #0x0 + add r8, r9, r0 + ldrb r0, [r8, #0x1] + cmp r0, #0x0 + bls _020B7908 + mov r5, r7 + mov r4, r7 +_020B7898: + ldrh r1, [r8, #0x6] + ldrh r0, [r10, #0x34] + add r2, r8, r1 + ldrh r1, [r2, #0x2] + add r0, r10, r0 + add r1, r2, r1 + add r1, r1, r5 + bl FUN_020BC2A0 + movs r3, r0 + beq _020B78F0 + ldrh r1, [r8, #0x6] + ldrh r0, [r8, r1] + add r1, r8, r1 + add r1, r1, #0x4 + mla r1, r0, r7, r1 + ldrb r0, [r1, #0x3] + ands r0, r0, #0x1 + bne _020B78F4 + mov r0, r9 + mov r2, r10 + bl FUN_020B7910 +_020B78EC: ; 0x020B78EC + b _020B78F4 +_020B78F0: + mov r6, r4 +_020B78F4: + ldrb r0, [r8, #0x1] + add r7, r7, #0x1 + add r5, r5, #0x10 + cmp r7, r0 + blo _020B7898 +_020B7908: + mov r0, r6 + ldmia sp!, {r4-r10,pc} + + arm_func_start FUN_020B7910 +FUN_020B7910: + stmdb sp!, {r4-r6,lr} + ldrh r5, [r1, #0x0] + ldr r2, [r2, #0x2c] + ldrh r4, [r3, #0x2] + mov r2, r2, lsl #0x10 + add r12, r0, r5 + mov r5, r2, lsr #0x10 + ands r2, r4, #0x1 + ldrh r4, [r3, #0x0] + moveq r3, r5, lsl #0xf + moveq r5, r3, lsr #0x10 + moveq r2, r4, lsl #0xf + moveq r4, r2, lsr #0x10 + ldrb r3, [r1, #0x2] + mov r2, #0x0 + cmp r3, #0x0 + bls _020B7994 + add r3, r4, r5 + mov r3, r3, lsl #0x10 + add r6, r0, #0x4 + mov r4, r3, lsr #0x10 +_020B7964: + ldrh r5, [r0, #0xa] + ldrb r3, [r12, r2] + add r2, r2, #0x1 + ldrh lr, [r6, r5] + add r5, r6, r5 + mla r3, lr, r3, r5 + ldr r3, [r3, #0x4] + add r3, r0, r3 + strh r4, [r3, #0x1c] + ldrb r3, [r1, #0x2] + cmp r2, r3 + blo _020B7964 +_020B7994: + ldrb r0, [r1, #0x3] + orr r0, r0, #0x1 + strb r0, [r1, #0x3] + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020B79A4 +FUN_020B79A4: ; 0x020B79A4 + stmdb sp!, {r4-r6,lr} + ldr r2, [r0, #0x8] + mov r4, #0x0 + ldrh r1, [r0, r2] + add r6, r0, r2 + add r5, r6, r1 + ldrb r0, [r5, #0x1] + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020B79C8: + ldrh r1, [r5, #0x6] + ldrh r0, [r5, r1] + add r1, r5, r1 + add r1, r1, #0x4 + mla r1, r0, r4, r1 + ldrb r0, [r1, #0x3] + ands r0, r0, #0x1 + beq _020B79F0 + mov r0, r6 + bl FUN_020B7AB8 +_020B79F0: + ldrb r0, [r5, #0x1] + add r4, r4, #0x1 + cmp r4, r0 + blo _020B79C8 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020B7A04 +FUN_020B7A04: ; 0x020B7A04 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x8] + mov r10, r1 + ldrh r1, [r0, r2] + add r9, r0, r2 + mov r11, #0x1 + add r8, r9, r1 + ldrb r0, [r8, #0x1] + mov r7, #0x0 + cmp r0, #0x0 + bls _020B7AAC + mov r6, r7 + mov r4, r7 + add r5, r10, #0x3c +_020B7A40: + ldrh r1, [r8, #0x6] + mov r0, r5 + add r2, r8, r1 + ldrh r1, [r2, #0x2] + add r1, r2, r1 + add r1, r1, r6 + bl FUN_020BC2A0 + movs r3, r0 + beq _020B7A94 + ldrh r1, [r8, #0x6] + ldrh r0, [r8, r1] + add r1, r8, r1 + add r1, r1, #0x4 + mla r1, r0, r7, r1 + ldrb r0, [r1, #0x3] + ands r0, r0, #0x1 + bne _020B7A98 + mov r0, r9 + mov r2, r10 + bl FUN_020B7B40 +_020B7A90: ; 0x020B7A90 + b _020B7A98 +_020B7A94: + mov r11, r4 +_020B7A98: + ldrb r0, [r8, #0x1] + add r7, r7, #0x1 + add r6, r6, #0x10 + cmp r7, r0 + blo _020B7A40 +_020B7AAC: + mov r0, r11 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020B7AB8 +FUN_020B7AB8: ; 0x020B7AB8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldrh r4, [r1, #0x0] + ldrb r2, [r1, #0x2] + mov r3, #0x0 + add r12, r0, r4 + cmp r2, #0x0 + bls _020B7B28 + add r2, r0, #0x4 + mov r5, #0x1000 + ldr lr, _020B7B3C ; =0xC00F0000 +_020B7AE4: + ldrh r7, [r0, #0xa] + ldrb r4, [r12, r3] + add r3, r3, #0x1 + ldrh r6, [r2, r7] + add r7, r2, r7 + mla r4, r6, r4, r7 + ldr r4, [r4, #0x4] + add r6, r0, r4 + ldr r4, [r6, #0x14] + and r4, r4, lr + str r4, [r6, #0x14] + str r5, [r6, #0x24] + ldr r4, [r6, #0x24] + str r4, [r6, #0x28] + ldrb r4, [r1, #0x2] + cmp r3, r4 + blo _020B7AE4 +_020B7B28: + ldrb r0, [r1, #0x3] + bic r0, r0, #0x1 + strb r0, [r1, #0x3] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B7B3C: .word 0xC00F0000 + + arm_func_start FUN_020B7B40 +FUN_020B7B40: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r11, r1 + mov r9, r3 + ldr r1, [r9, #0x0] + mov r10, r0 + and r0, r1, #0x1c000000 + cmp r0, #0x14000000 + ldrh r3, [r11, #0x0] + ldrne r1, [r2, #0x8] + mov r8, #0x0 + add r0, r10, r3 + str r0, [sp, #0x4] + ldrne r0, _020B7C50 ; =0x0000FFFF + andne r0, r1, r0 + strne r0, [sp, #0x0] + ldreq r1, [r2, #0x18] + ldreq r0, _020B7C50 ; =0x0000FFFF + andeq r0, r1, r0 + streq r0, [sp, #0x0] + ldrb r0, [r11, #0x2] + cmp r0, #0x0 + bls _020B7C3C + mov r4, #0x1000 + add r5, r10, #0x4 +_020B7BA4: + ldrh r6, [r10, #0xa] + ldr r0, [sp, #0x4] + ldr r1, [r9, #0x0] + ldrb r2, [r0, r8] + ldrh r3, [r5, r6] + ldr r0, [sp, #0x0] + add r6, r5, r6 + add r0, r1, r0 + mla r1, r3, r2, r6 + ldr r1, [r1, #0x4] + add r6, r10, r1 + ldr r1, [r6, #0x14] + orr r0, r1, r0 + str r0, [r6, #0x14] + ldr r3, [r9, #0x4] + ldr r0, _020B7C54 ; =0x000007FF + ldrh r1, [r6, #0x20] + and r2, r3, r0 + and r7, r0, r3, lsr #0xb + cmp r2, r1 + moveq r0, r4 + beq _020B7C08 + mov r0, r2, lsl #0xc + mov r1, r1, lsl #0xc + bl FX_Div +_020B7C08: + str r0, [r6, #0x24] + ldrh r1, [r6, #0x22] + cmp r7, r1 + moveq r0, r4 + beq _020B7C28 + mov r0, r7, lsl #0xc + mov r1, r1, lsl #0xc + bl FX_Div +_020B7C28: + str r0, [r6, #0x28] + ldrb r0, [r11, #0x2] + add r8, r8, #0x1 + cmp r8, r0 + blo _020B7BA4 +_020B7C3C: + ldrb r0, [r11, #0x3] + orr r0, r0, #0x1 + strb r0, [r11, #0x3] + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B7C50: .word 0x0000FFFF +_020B7C54: .word 0x000007FF + + arm_func_start FUN_020B7C58 +FUN_020B7C58: ; 0x020B7C58 + ldrh r2, [r0, #0x32] + mov r1, #0x0 + bic r2, r2, #0x1 + strh r2, [r0, #0x32] + ldr r2, [r0, #0x2c] + str r1, [r0, #0x2c] + mov r0, r2 + bx lr + + arm_func_start FUN_020B7C78 +FUN_020B7C78: ; 0x020B7C78 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + movs r4, r1 + mov r5, r0 + beq _020B7C90 + bl GX_BeginLoadTexPltt +_020B7C90: + ldrh r2, [r5, #0x30] + ldr r0, [r5, #0x38] + ldr r3, [r5, #0x2c] + ldr r1, _020B7CD8 ; =0x0000FFFF + add r0, r5, r0 + and r1, r3, r1 + mov r1, r1, lsl #0x3 + mov r2, r2, lsl #0x3 + bl GX_LoadTexPltt + ldrh r0, [r5, #0x32] + cmp r4, #0x0 + addeq sp, sp, #0x4 + orr r0, r0, #0x1 + strh r0, [r5, #0x32] + ldmeqia sp!, {r4-r5,pc} +_020B7CCC: ; 0x020B7CCC + bl GX_EndLoadTexPltt + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B7CD8: .word 0x0000FFFF + + arm_func_start FUN_020B7CDC +FUN_020B7CDC: ; 0x020B7CDC + str r1, [r0, #0x2c] + bx lr + + arm_func_start FUN_020B7CE4 +FUN_020B7CE4: ; 0x020B7CE4 + ldrh r0, [r0, #0x30] + mov r0, r0, lsl #0x3 + bx lr + + arm_func_start FUN_020B7CF0 +FUN_020B7CF0: ; 0x020B7CF0 + ldrh r12, [r0, #0x10] + mov r3, #0x0 + bic r12, r12, #0x1 + strh r12, [r0, #0x10] + ldrh r12, [r0, #0x20] + bic r12, r12, #0x1 + strh r12, [r0, #0x20] + ldr r12, [r0, #0x8] + str r12, [r1, #0x0] + str r3, [r0, #0x8] + ldr r1, [r0, #0x18] + str r1, [r2, #0x0] + str r3, [r0, #0x18] + bx lr + + arm_func_start FUN_020B7D28 +FUN_020B7D28: ; 0x020B7D28 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + movs r8, r1 + mov r9, r0 + beq _020B7D40 + bl GX_BeginLoadTex +_020B7D40: + ldrh r0, [r9, #0xc] + movs r2, r0, lsl #0x3 + beq _020B7D74 + ldr r1, [r9, #0x8] + ldr r0, _020B7DF4 ; =0x0000FFFF + ldr r3, [r9, #0x14] + and r1, r1, r0 + add r0, r9, r3 + mov r1, r1, lsl #0x3 + bl GX_LoadTex + ldrh r0, [r9, #0x10] + orr r0, r0, #0x1 + strh r0, [r9, #0x10] +_020B7D74: + ldrh r0, [r9, #0x1c] + movs r7, r0, lsl #0x3 + beq _020B7DDC + ldr r1, [r9, #0x18] + ldr r0, _020B7DF4 ; =0x0000FFFF + ldr r3, [r9, #0x24] + and r4, r1, r0 + mov r5, r4, lsl #0x3 + ldr r6, [r9, #0x28] + mov r1, r5 + mov r2, r7 + add r0, r9, r3 + add r6, r9, r6 + bl GX_LoadTex + ldr r0, _020B7DF8 ; =0x0001FFFF + and r1, r5, #0x40000 + and r0, r0, r4, lsl #0x3 + mov r0, r0, lsr #0x1 + add r2, r0, #0x20000 + mov r0, r6 + add r1, r2, r1, lsr #0x2 + mov r2, r7, lsr #0x1 + bl GX_LoadTex + ldrh r0, [r9, #0x20] + orr r0, r0, #0x1 + strh r0, [r9, #0x20] +_020B7DDC: + cmp r8, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r9,pc} +_020B7DE8: ; 0x020B7DE8 + bl GX_EndLoadTex + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020B7DF4: .word 0x0000FFFF +_020B7DF8: .word 0x0001FFFF + + arm_func_start FUN_020B7DFC +FUN_020B7DFC: ; 0x020B7DFC + cmp r1, #0x0 + strne r1, [r0, #0x8] + cmp r2, #0x0 + strne r2, [r0, #0x18] + bx lr + + arm_func_start FUN_020B7E10 +FUN_020B7E10: ; 0x020B7E10 + ldrh r0, [r0, #0x1c] + mov r0, r0, lsl #0x3 + bx lr + + arm_func_start FUN_020B7E1C +FUN_020B7E1C: ; 0x020B7E1C + ldrh r0, [r0, #0xc] + mov r0, r0, lsl #0x3 + bx lr + + arm_func_start FUN_020B7E28 +FUN_020B7E28: ; 0x020B7E28 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + add r0, r5, #0x8 + mov r4, r1 + bl FUN_020B7E88 +_020B7E40: ; 0x020B7E40 + cmp r0, #0x0 + bne _020B7E74 + mov r1, r4 + add r0, r5, #0x10 + bl FUN_020B7E88 +_020B7E54: ; 0x020B7E54 + cmp r0, #0x0 + bne _020B7E74 + mov r1, r4 + add r0, r5, #0x18 + bl FUN_020B7E88 +_020B7E68: ; 0x020B7E68 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} +_020B7E74: + ldr r0, [r5, #0x0] + orr r0, r0, #0x10 + str r0, [r5, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020B7E88 +FUN_020B7E88: + ldr r2, [r0, #0x0] + cmp r2, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r2, r1 + bne _020B7EB8 + ldr r3, [r2, #0x10] + mov r2, #0x0 + str r3, [r0, #0x0] + str r2, [r1, #0x10] + mov r0, #0x1 + bx lr +_020B7EB8: + ldr r3, [r2, #0x10] + cmp r3, #0x0 + beq _020B7EF4 +_020B7EC4: + cmp r3, r1 + bne _020B7EE4 + ldr r1, [r3, #0x10] + mov r0, #0x0 + str r1, [r2, #0x10] + str r0, [r3, #0x10] + mov r0, #0x1 + bx lr +_020B7EE4: + mov r2, r3 + ldr r3, [r3, #0x10] + cmp r3, #0x0 + bne _020B7EC4 +_020B7EF4: + mov r0, #0x0 + bx lr + + arm_func_start FUN_020B7EFC +FUN_020B7EFC: ; 0x020B7EFC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + ldr r2, [r4, #0x8] + mov r5, r0 + ldrb r0, [r2, #0x0] + cmp r0, #0x4a + beq _020B7F50 + cmp r0, #0x4d + beq _020B7F34 + cmp r0, #0x56 + beq _020B7F6C + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} +_020B7F34: + add r0, r5, #0x3c + bl FUN_020B7F88 + mov r1, r4 + add r0, r5, #0x8 + bl FUN_020B7FF8 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} +_020B7F50: + add r0, r5, #0x44 + bl FUN_020B7F88 + mov r1, r4 + add r0, r5, #0x10 + bl FUN_020B7FF8 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} +_020B7F6C: + add r0, r5, #0x4c + bl FUN_020B7F88 + mov r1, r4 + add r0, r5, #0x18 + bl FUN_020B7FF8 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020B7F88 +FUN_020B7F88: ; 0x020B7F88 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} +_020B7F9C: ; 0x020B7F9C + mov r3, #0x1 + mov r4, #0x0 +_020B7FA4: + ldrb r2, [r1, #0x19] + mov r5, r4 + cmp r2, #0x0 + ble _020B7FE4 +_020B7FB4: + add r2, r1, r5, lsl #0x1 + ldrh r2, [r2, #0x1a] + ands r2, r2, #0x100 + movne lr, r5, asr #0x5 + andne r2, r5, #0x1f + ldrne r12, [r0, lr, lsl #0x2] + add r5, r5, #0x1 + orrne r2, r12, r3, lsl r2 + strne r2, [r0, lr, lsl #0x2] + ldrb r2, [r1, #0x19] + cmp r5, r2 + blt _020B7FB4 +_020B7FE4: + ldr r1, [r1, #0x10] + cmp r1, #0x0 + bne _020B7FA4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020B7FF8 +FUN_020B7FF8: ; 0x020B7FF8 + ldr r12, [r0, #0x0] + cmp r12, #0x0 + streq r1, [r0, #0x0] + bxeq lr + ldr r3, [r12, #0x10] + cmp r3, #0x0 + bne _020B8058 + ldrb r3, [r12, #0x18] + ldrb r2, [r1, #0x18] + cmp r3, r2 + bls _020B8050 + ldr r2, [r1, #0x10] + mov r3, r1 + cmp r2, #0x0 + beq _020B8044 +_020B8034: + ldr r3, [r3, #0x10] + ldr r2, [r3, #0x10] + cmp r2, #0x0 + bne _020B8034 +_020B8044: + str r12, [r3, #0x10] + str r1, [r0, #0x0] + bx lr +_020B8050: + str r1, [r12, #0x10] + bx lr +_020B8058: + cmp r3, #0x0 + beq _020B80AC + ldrb r2, [r1, #0x18] +_020B8064: + ldrb r0, [r3, #0x18] + cmp r0, r2 + blo _020B809C + ldr r0, [r1, #0x10] + mov r2, r1 + cmp r0, #0x0 + beq _020B8090 +_020B8080: + ldr r2, [r2, #0x10] + ldr r0, [r2, #0x10] + cmp r0, #0x0 + bne _020B8080 +_020B8090: + str r1, [r12, #0x10] + str r3, [r2, #0x10] + bx lr +_020B809C: + mov r12, r3 + ldr r3, [r3, #0x10] + cmp r3, #0x0 + bne _020B8064 +_020B80AC: + str r1, [r12, #0x10] + bx lr + + arm_func_start FUN_020B80B4 +FUN_020B80B4: ; 0x020B80B4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r1, r5 + mov r0, #0x0 + mov r2, #0x54 + bl MIi_CpuClear32 + ldr r0, _020B8104 ; =0x021065B4 + ldr r1, _020B8108 ; =0x021065B0 + ldr r2, [r0, #0x0] + ldr r0, _020B810C ; =0x021065AC + str r2, [r5, #0xc] + ldr r1, [r1, #0x0] + str r1, [r5, #0x14] + ldr r0, [r0, #0x0] + str r0, [r5, #0x1c] + str r4, [r5, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B8104: .word 0x021065B4 +_020B8108: .word 0x021065B0 +_020B810C: .word 0x021065AC + + arm_func_start FUN_020B8110 +FUN_020B8110: ; 0x020B8110 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r12, #0x0 + str r12, [r0, #0x0] + str r1, [r0, #0x8] + str r12, [r0, #0x10] + mov r4, #0x7f + strb r4, [r0, #0x18] + mov r4, #0x1000 + str r4, [r0, #0x4] + ldr lr, _020B81A4 ; =0x02106594 + str r3, [r0, #0x14] + ldr r6, [lr, #0x0] + cmp r6, #0x0 + addls sp, sp, #0x4 + ldmlsia sp!, {r4-r7,pc} +_020B8150: ; 0x020B8150 + ldrb r7, [r1, #0x0] + ldr r4, _020B81A8 ; =0x021065B8 +_020B8158: + ldrb r3, [r4, r12, lsl #0x3] + mov r5, r12, lsl #0x3 + cmp r7, r3 + bne _020B8190 + add r3, r4, r5 + ldrh lr, [r1, #0x2] + ldrh r3, [r3, #0x2] + cmp lr, r3 + bne _020B8190 + ldr r3, _020B81AC ; =0x021065BC + ldr r3, [r3, r5] + blx r3 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} +_020B8190: + add r12, r12, #0x1 + cmp r12, r6 + blo _020B8158 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B81A4: .word 0x02106594 +_020B81A8: .word 0x021065B8 +_020B81AC: .word 0x021065BC + + arm_func_start FUN_020B81B0 +FUN_020B81B0: ; 0x020B81B0 + ldrb r0, [r0, #0x0] + cmp r0, #0x4a + beq _020B81E4 + cmp r0, #0x4d + beq _020B81D0 + cmp r0, #0x56 + beq _020B81E4 + b _020B81F8 +_020B81D0: + ldrb r0, [r1, #0x18] + mov r0, r0, lsl #0x1 + add r0, r0, #0x1c + bic r0, r0, #0x3 + bx lr +_020B81E4: + ldrb r0, [r1, #0x17] + mov r0, r0, lsl #0x1 + add r0, r0, #0x1c + bic r0, r0, #0x3 + bx lr +_020B81F8: + mov r0, #0x0 + bx lr + + arm_func_start FUN_020B8200 +FUN_020B8200: ; 0x020B8200 + cmp r0, #0x0 + ldrne ip, _020B8260 ; =0x021CED18 + ldrne r12, [r12, #0xa0] + andne r12, r12, #0xff + strne r12, [r0, #0x0] + cmp r1, #0x0 + ldrne r0, _020B8260 ; =0x021CED18 + ldrne r0, [r0, #0xa0] + movne r0, r0, lsr #0x8 + andne r0, r0, #0xff + strne r0, [r1, #0x0] + cmp r2, #0x0 + ldrne r0, _020B8260 ; =0x021CED18 + ldrne r0, [r0, #0xa0] + movne r0, r0, lsr #0x10 + andne r0, r0, #0xff + strne r0, [r2, #0x0] + cmp r3, #0x0 + ldrne r0, _020B8260 ; =0x021CED18 + ldrne r0, [r0, #0xa0] + movne r0, r0, lsr #0x18 + andne r0, r0, #0xff + strne r0, [r3, #0x0] + bx lr + .balign 4 +_020B8260: .word 0x021CED18 + + arm_func_start FUN_020B8264 +FUN_020B8264: ; 0x020B8264 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020B829C ; =0x021CED18 + ldr r0, [r0, #0xfc] + ands r0, r0, #0x80 + bne _020B8290 + bl FUN_020B82E4 + ldr r0, _020B829C ; =0x021CED18 + ldr r1, [r0, #0xfc] + orr r1, r1, #0x80 + str r1, [r0, #0xfc] +_020B8290: + ldr r0, _020B82A0 ; =0x021CEE78 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B829C: .word 0x021CED18 +_020B82A0: .word 0x021CEE78 + + arm_func_start FUN_020B82A4 +FUN_020B82A4: ; 0x020B82A4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020B82DC ; =0x021CED18 + ldr r0, [r0, #0xfc] + ands r0, r0, #0x80 + bne _020B82D0 + bl FUN_020B82E4 + ldr r0, _020B82DC ; =0x021CED18 + ldr r1, [r0, #0xfc] + orr r1, r1, #0x80 + str r1, [r0, #0xfc] +_020B82D0: + ldr r0, _020B82E0 ; =0x021CEE48 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B82DC: .word 0x021CED18 +_020B82E0: .word 0x021CEE48 + + arm_func_start FUN_020B82E4 +FUN_020B82E4: ; 0x020B82E4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020B8330 ; =0x021CEDD4 + ldr r1, _020B8334 ; =0x021CED64 + ldr r2, _020B8338 ; =0x021CEE48 + bl MTX_Concat43 + ldr r3, _020B833C ; =0x021CED18 + ldr r0, _020B8338 ; =0x021CEE48 + ldr r2, [r3, #0xf4] + mov r1, r0 + str r2, [sp, #0x0] + ldr r2, [r3, #0xec] + ldr r3, [r3, #0xf0] + bl MTX_ScaleApply43 + ldr r0, _020B8338 ; =0x021CEE48 + ldr r1, _020B8340 ; =0x021CEE78 + bl MTX_Inverse43 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B8330: .word 0x021CEDD4 +_020B8334: .word 0x021CED64 +_020B8338: .word 0x021CEE48 +_020B833C: .word 0x021CED18 +_020B8340: .word 0x021CEE78 + + arm_func_start FUN_020B8344 +FUN_020B8344: ; 0x020B8344 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020B8384 ; =0x021CED18 + ldr r0, [r0, #0xfc] + ands r0, r0, #0x8 + bne _020B8378 + ldr r0, _020B8388 ; =0x021CED64 + ldr r1, _020B838C ; =0x021CEE18 + bl MTX_Inverse43 + ldr r0, _020B8384 ; =0x021CED18 + ldr r1, [r0, #0xfc] + orr r1, r1, #0x8 + str r1, [r0, #0xfc] +_020B8378: + ldr r0, _020B838C ; =0x021CEE18 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B8384: .word 0x021CED18 +_020B8388: .word 0x021CED64 +_020B838C: .word 0x021CEE18 + + arm_func_start FUN_020B8390 +FUN_020B8390: ; 0x020B8390 + orr r0, r0, r1, lsl #0x4 + + arm_func_start FUN_020B8394 +FUN_020B8394: ; 0x020B8394 + ldr r1, [sp, #0x4] + orr r0, r0, r2, lsl #0x6 + orr r0, r1, r0 + ldr r2, [sp, #0x0] + orr r1, r0, r3, lsl #0x18 + ldr r0, _020B83B8 ; =0x021CED18 + orr r1, r1, r2, lsl #0x10 + str r1, [r0, #0x9c] + bx lr + .balign 4 +_020B83B8: .word 0x021CED18 + + arm_func_start FUN_020B83BC +FUN_020B83BC: ; 0x020B83BC + cmp r2, #0x0 + movne r2, #0x1 + orr r1, r0, r1, lsl #0x10 + moveq r2, #0x0 + ldr r0, _020B83DC ; =0x021CED18 + orr r1, r1, r2, lsl #0xf + str r1, [r0, #0x98] + bx lr + .balign 4 +_020B83DC: .word 0x021CED18 + + arm_func_start FUN_020B83E0 +FUN_020B83E0: ; 0x020B83E0 + cmp r2, #0x0 + movne r2, #0x1 + orr r1, r0, r1, lsl #0x10 + moveq r2, #0x0 + ldr r0, _020B8400 ; =0x021CED18 + orr r1, r1, r2, lsl #0xf + str r1, [r0, #0x94] + bx lr + .balign 4 +_020B8400: .word 0x021CED18 + + arm_func_start FUN_020B8404 +FUN_020B8404: ; 0x020B8404 + ldr r2, _020B8414 ; =0x021CEDC0 + orr r1, r1, r0, lsl #0x1e + str r1, [r2, r0, lsl #0x2] + bx lr + .balign 4 +_020B8414: .word 0x021CEDC0 + + arm_func_start FUN_020B8418 +FUN_020B8418: ; 0x020B8418 + stmdb sp!, {r4,lr} + ldr ip, _020B8444 ; =0x000003FF + ldr lr, _020B8448 ; =0x021CED98 + and r4, r12, r1, asr #0x3 + and r1, r12, r2, asr #0x3 + and r2, r12, r3, asr #0x3 + orr r1, r4, r1, lsl #0xa + orr r1, r1, r2, lsl #0x14 + orr r1, r1, r0, lsl #0x1e + str r1, [lr, r0, lsl #0x2] + ldmia sp!, {r4,pc} + .balign 4 +_020B8444: .word 0x000003FF +_020B8448: .word 0x021CED98 + + arm_func_start FUN_020B844C +FUN_020B844C: ; 0x020B844C + ldr r3, _020B846C ; =0x021CEE04 + ldmia r0, {r0-r2} + stmia r3, {r0-r2} + ldr r0, _020B8470 ; =0x021CED18 + ldr r1, [r0, #0xfc] + bic r1, r1, #0xa4 + str r1, [r0, #0xfc] + bx lr + .balign 4 +_020B846C: .word 0x021CEE04 +_020B8470: .word 0x021CED18 + + arm_func_start FUN_020B8474 +FUN_020B8474: ; 0x020B8474 + ldr r3, _020B8494 ; =0x021CEDF8 + ldmia r0, {r0-r2} + stmia r3, {r0-r2} + ldr r0, _020B8498 ; =0x021CED18 + ldr r1, [r0, #0xfc] + bic r1, r1, #0xa4 + str r1, [r0, #0xfc] + bx lr + .balign 4 +_020B8494: .word 0x021CEDF8 +_020B8498: .word 0x021CED18 + + arm_func_start FUN_020B849C +FUN_020B849C: ; 0x020B849C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020B84D4 ; =0x021CED18 + mov r2, #0x3e + ldr r0, [r1], #0x4 + bl FUN_020BB1C0 + ldr r0, _020B84D4 ; =0x021CED18 + ldr r1, [r0, #0xfc] + bic r1, r1, #0x1 + str r1, [r0, #0xfc] + bic r1, r1, #0x2 + str r1, [r0, #0xfc] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B84D4: .word 0x021CED18 + + arm_func_start FUN_020B84D8 +FUN_020B84D8: ; 0x020B84D8 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r8, _020B85F4 ; =0x17101610 + ldr r1, _020B85F8 ; =0x021CED18 + ldr r5, _020B85FC ; =0x32323232 + ldr r4, _020B8600 ; =0x60293130 + ldr r3, _020B8604 ; =0x33333333 + ldr r2, _020B8608 ; =0x002A1B19 + mov r7, #0x0 + mov r6, #0x2 + ldr r0, _020B860C ; =0x021CED64 + str r8, [r1, #0x0] + str r7, [r1, #0x4] + str r6, [r1, #0x48] + str r5, [r1, #0x7c] + str r4, [r1, #0x90] + str r3, [r1, #0xa4] + str r2, [r1, #0xb8] + bl MTX_Identity43_ + ldr r0, _020B8610 ; =0x021CED20 + bl MTX_Identity44_ + mov r2, r7 + ldr r1, _020B85F8 ; =0x021CED18 + ldr r7, _020B8614 ; =0x4210C210 + ldr r0, _020B8618 ; =0x40000200 + ldr lr, _020B861C ; =0x2D8B62D8 + ldr sb, _020B8620 ; =0x800001FF + ldr r8, _020B8624 ; =0xC0080000 + ldr r6, _020B8628 ; =0x001F008F + ldr r5, _020B862C ; =0xBFFF0000 + ldr r4, _020B8630 ; =0x00007FFF + ldr ip, _020B8634 ; =0x800003E0 + ldr r3, _020B8638 ; =0xC0007C00 + str r0, [r1, #0x84] + str lr, [r1, #0x80] + mov lr, #0x4000001f + ldr r0, _020B863C ; =0x021CEDD4 + str r9, [r1, #0x88] + str r8, [r1, #0x8c] + str r7, [r1, #0x94] + str r7, [r1, #0x98] + str r6, [r1, #0x9c] + str r5, [r1, #0xa0] + str r4, [r1, #0xa8] + str lr, [r1, #0xac] + str r12, [r1, #0xb0] + str r3, [r1, #0xb4] + str r2, [r1, #0xe0] + str r2, [r1, #0xe4] + str r2, [r1, #0xe8] + bl MTX_Identity33_ + mov r3, #0x1000 + ldr r0, _020B85F8 ; =0x021CED18 + mov r2, #0x0 + rsb r1, r3, #0x0 + str r3, [r0, #0xec] + str r3, [r0, #0xf0] + str r3, [r0, #0xf4] + str r2, [r0, #0xf8] + str r2, [r0, #0xfc] + str r2, [r0, #0x248] + str r2, [r0, #0x244] + str r2, [r0, #0x240] + str r2, [r0, #0x254] + str r2, [r0, #0x24c] + str r3, [r0, #0x250] + str r2, [r0, #0x25c] + str r2, [r0, #0x258] + str r1, [r0, #0x260] + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020B85F4: .word 0x17101610 +_020B85F8: .word 0x021CED18 +_020B85FC: .word 0x32323232 +_020B8600: .word 0x60293130 +_020B8604: .word 0x33333333 +_020B8608: .word 0x002A1B19 +_020B860C: .word 0x021CED64 +_020B8610: .word 0x021CED20 +_020B8614: .word 0x4210C210 +_020B8618: .word 0x40000200 +_020B861C: .word 0x2D8B62D8 +_020B8620: .word 0x800001FF +_020B8624: .word 0xC0080000 +_020B8628: .word 0x001F008F +_020B862C: .word 0xBFFF0000 +_020B8630: .word 0x00007FFF +_020B8634: .word 0x800003E0 +_020B8638: .word 0xC0007C00 +_020B863C: .word 0x021CEDD4 + + arm_func_start FUN_020B8640 +FUN_020B8640: ; 0x020B8640 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + mov r7, r0 + mov r0, #0x0 + mov r6, r1 + str r0, [r7, #0x0] + add r4, sp, #0x0 + mov r5, r2, lsl #0x1 + mov r8, #0x1 +_020B8664: + add r1, r5, r6 + ldrh r2, [r1, #0x1a] + ands r1, r2, #0x100 + beq _020B869C + ldr r3, [r6, #0xc] + mov r0, r4 + mov r1, r6 + and r2, r2, #0xff + blx r3 + ldr r2, [r7, #0x0] + ldr r1, [sp, #0x0] + mov r0, r8 + orr r1, r2, r1 + str r1, [r7, #0x0] +_020B869C: + ldr r6, [r6, #0x10] + cmp r6, #0x0 + bne _020B8664 + add sp, sp, #0x8 + ldmia sp!, {r4-r8,pc} + + arm_func_start FUN_020B86B0 +FUN_020B86B0: ; 0x020B86B0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x5c + mov r9, r1 + ldr r3, [r9, #0x10] + mov r10, r0 + mov r8, r2 + cmp r3, #0x0 + bne _020B8704 + add r2, r9, r8, lsl #0x1 + ldrh r4, [r2, #0x1a] + and r2, r4, #0x300 + cmp r2, #0x100 + addne sp, sp, #0x5c + movne r0, #0x0 + ldmneia sp!, {r4-r11,pc} +_020B86EC: ; 0x020B86EC + ldr r3, [r9, #0xc] + and r2, r4, #0xff + blx r3 + add sp, sp, #0x5c + mov r0, #0x1 + ldmia sp!, {r4-r11,pc} +_020B8704: + mov r7, #0x0 + mov r3, r7 + mov r4, r9 + mov r2, r8, lsl #0x1 +_020B8714: + add r0, r2, r4 + ldrh r0, [r0, #0x1a] + and r0, r0, #0x300 + cmp r0, #0x100 + ldreq r0, [r4, #0x4] + moveq r1, r4 + ldr r4, [r4, #0x10] + addeq r7, r7, r0 + addeq r3, r3, #0x1 + cmp r4, #0x0 + bne _020B8714 + cmp r7, #0x0 + addeq sp, sp, #0x5c + moveq r0, #0x0 + ldmeqia sp!, {r4-r11,pc} +_020B8750: ; 0x020B8750 + cmp r3, #0x1 + bne _020B877C + add r0, r1, r8, lsl #0x1 + ldrh r2, [r0, #0x1a] + ldr r3, [r1, #0xc] + mov r0, r10 + and r2, r2, #0xff + blx r3 + add sp, sp, #0x5c + mov r0, #0x1 + ldmia sp!, {r4-r11,pc} +_020B877C: + mov r1, r10 + mov r0, #0x0 + mov r2, #0x58 + bl MIi_CpuClearFast +_020B878C: ; 0x020B878C + mvn r0, #0x0 + str r0, [r10, #0x0] + add r5, sp, #0x0 + add r4, sp, #0x4 + add r11, sp, #0x10 +_020B87A0: + add r0, r9, r8, lsl #0x1 + ldrh r2, [r0, #0x1a] + and r0, r2, #0x300 + cmp r0, #0x100 + bne _020B8948 + ldr r0, [r9, #0x4] + cmp r0, #0x0 + ble _020B8948 + ldr r3, [r9, #0xc] + mov r0, r5 + mov r1, r9 + and r2, r2, #0xff + blx r3 + cmp r7, #0x1000 + ldreq r6, [r9, #0x4] + beq _020B87F0 + ldr r0, [r9, #0x4] + mov r1, r7 + bl FX_Div + mov r6, r0 +_020B87F0: + ldr r3, [sp, #0x0] + mov r1, r4 + mov r2, r6 + add r0, r10, #0x4 + and r3, r3, #0x1 + bl FUN_020B8998 + ldr r1, [sp, #0x0] + add r0, r10, #0x10 + and r3, r1, #0x8 + mov r1, r11 + mov r2, r6 + bl FUN_020B8998 + ldr r3, [sp, #0x0] + add r0, r10, #0x1c + add r1, sp, #0x1c + mov r2, r6 + and r3, r3, #0x10 + bl FUN_020B8998 +_020B8838: ; 0x020B8838 + ldr r0, [sp, #0x0] + ands r0, r0, #0x4 + bne _020B8898 + ldr r0, [sp, #0x4c] + ldr r2, [r10, #0x4c] + smull r1, r0, r6, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + add r0, r2, r1 + str r0, [r10, #0x4c] + ldr r0, [sp, #0x50] + ldr r2, [r10, #0x50] + smull r1, r0, r6, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + add r0, r2, r1 + str r0, [r10, #0x50] + ldr r0, [sp, #0x54] + ldr r2, [r10, #0x54] + smull r1, r0, r6, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + add r0, r2, r1 + str r0, [r10, #0x54] +_020B8898: + ldr r0, [sp, #0x0] + ands r0, r0, #0x2 + bne _020B8920 + ldr r0, [sp, #0x28] + ldr r1, [r10, #0x28] + mul r0, r6, r0 + add r0, r1, r0, asr #0xc + str r0, [r10, #0x28] + ldr r0, [sp, #0x2c] + ldr r1, [r10, #0x2c] + mul r0, r6, r0 + add r0, r1, r0, asr #0xc + str r0, [r10, #0x2c] + ldr r0, [sp, #0x30] + ldr r1, [r10, #0x30] + mul r0, r6, r0 + add r0, r1, r0, asr #0xc + str r0, [r10, #0x30] + ldr r0, [sp, #0x34] + ldr r1, [r10, #0x34] + mul r0, r6, r0 + add r0, r1, r0, asr #0xc + str r0, [r10, #0x34] + ldr r0, [sp, #0x38] + ldr r1, [r10, #0x38] + mul r0, r6, r0 + add r0, r1, r0, asr #0xc + str r0, [r10, #0x38] + ldr r0, [sp, #0x3c] + ldr r1, [r10, #0x3c] + mul r0, r6, r0 + add r0, r1, r0, asr #0xc + str r0, [r10, #0x3c] + b _020B8938 +_020B8920: + ldr r0, [r10, #0x28] + add r0, r0, r6 + str r0, [r10, #0x28] + ldr r0, [r10, #0x38] + add r0, r0, r6 + str r0, [r10, #0x38] +_020B8938: + ldr r1, [r10, #0x0] + ldr r0, [sp, #0x0] + and r0, r1, r0 + str r0, [r10, #0x0] +_020B8948: + ldr r9, [r9, #0x10] + cmp r9, #0x0 + bne _020B87A0 + add r0, r10, #0x28 + add r1, r10, #0x34 + add r2, r10, #0x40 + bl VEC_CrossProduct + add r0, r10, #0x28 + mov r1, r0 + bl VEC_Normalize + add r0, r10, #0x40 + mov r1, r0 + bl VEC_Normalize + add r0, r10, #0x40 + add r1, r10, #0x28 + add r2, r10, #0x34 + bl VEC_CrossProduct + mov r0, #0x1 + add sp, sp, #0x5c + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020B8998 +FUN_020B8998: + cmp r3, #0x0 + beq _020B89C8 + ldr r1, [r0, #0x0] + add r1, r1, r2 + str r1, [r0, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, r2 + str r1, [r0, #0x4] + ldr r1, [r0, #0x8] + add r1, r1, r2 + str r1, [r0, #0x8] + bx lr +_020B89C8: + ldr r3, [r1, #0x0] + ldr r12, [r0, #0x0] + mul r3, r2, r3 + add r3, r12, r3, asr #0xc + str r3, [r0, #0x0] + ldr r3, [r1, #0x4] + ldr r12, [r0, #0x4] + mul r3, r2, r3 + add r3, r12, r3, asr #0xc + str r3, [r0, #0x4] + ldr r1, [r1, #0x8] + ldr r3, [r0, #0x8] + mul r1, r2, r1 + add r1, r3, r1, asr #0xc + str r1, [r0, #0x8] + bx lr + + arm_func_start FUN_020B8A08 +FUN_020B8A08: ; 0x020B8A08 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r0 + mov r5, r1 + mov r0, #0x0 + mov r4, r2, lsl #0x1 + mov r7, #0x1 +_020B8A24: + add r1, r4, r5 + ldrh r2, [r1, #0x1a] + ands r1, r2, #0x100 + beq _020B8A4C + ldr r3, [r5, #0xc] + mov r0, r6 + mov r1, r5 + and r2, r2, #0xff + blx r3 + mov r0, r7 +_020B8A4C: + ldr r5, [r5, #0x10] + cmp r5, #0x0 + bne _020B8A24 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020B8A60 +FUN_020B8A60: ; 0x020B8A60 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x80 + mov r5, r0 + ldr r1, [r5, #0x8] + ands r0, r1, #0x200 + bne _020B8DB4 + ands r0, r1, #0x1 + beq _020B8DB4 + add r0, sp, #0x10 + mov r1, #0x0 + bl FUN_020BB824 + mov r0, #0x1e + str r0, [sp, #0x0] + add r1, sp, #0x0 + mov r0, #0x13 + mov r2, #0x1 + bl FUN_020BB1C0 + ldr r2, [r5, #0xb0] + ldr r0, [r2, #0x10] + and r1, r0, #0xc0000000 + cmp r1, #0xc0000000 + beq _020B8AF0 + bic r0, r0, #0xc0000000 + str r0, [r2, #0x10] + ldr r2, [r5, #0xb0] + ldr r3, _020B8DC8 ; =0x02106630 + ldr r0, [r2, #0x10] + ldr r1, _020B8DCC ; =0x02106634 + orr r0, r0, #0xc0000000 + str r0, [r2, #0x10] + ldr r2, [r5, #0xb0] + ldr r0, [r3, #0x0] + ldr r4, [r2, #0x10] + mov r2, #0x1 + str r4, [r3, #0x4] + bl FUN_020BB1C0 +_020B8AF0: + ldr r0, [r5, #0x40] + cmp r0, #0x0 + ldrneb r4, [r5, #0x99] + moveq r4, #0x0 + cmp r4, #0x1 + bne _020B8B3C + ldr r1, [r5, #0x8] + mov r0, r5 + bic r1, r1, #0x40 + str r1, [r5, #0x8] + ldr r1, [r5, #0x40] + blx r1 + ldr r0, [r5, #0x40] + cmp r0, #0x0 + ldrneb r4, [r5, #0x99] + ldr r0, [r5, #0x8] + moveq r4, #0x0 + and r0, r0, #0x40 + b _020B8B40 +_020B8B3C: + mov r0, #0x0 +_020B8B40: + cmp r0, #0x0 + bne _020B8B84 + ldr r0, [r5, #0xb0] + ldr r1, _020B8DD0 ; =0x02106660 + ldrh r6, [r0, #0x2e] + ldrh r3, [r0, #0x2c] + mov r0, #0x16 + rsb r2, r6, #0x0 + mov lr, r3, lsl #0xf + mov r12, r2, lsl #0xf + mov r3, r6, lsl #0xf + mov r2, #0x10 + str lr, [r1, #0x0] + str r12, [r1, #0x14] + str lr, [r1, #0x30] + str r3, [r1, #0x34] + bl FUN_020BB1C0 +_020B8B84: + cmp r4, #0x2 + bne _020B8BC0 + ldr r1, [r5, #0x8] + mov r0, r5 + bic r1, r1, #0x40 + str r1, [r5, #0x8] + ldr r1, [r5, #0x40] + blx r1 + ldr r0, [r5, #0x40] + cmp r0, #0x0 + ldrneb r4, [r5, #0x99] + ldr r0, [r5, #0x8] + moveq r4, #0x0 + and r0, r0, #0x40 + b _020B8BC4 +_020B8BC0: + mov r0, #0x0 +_020B8BC4: + cmp r0, #0x0 + bne _020B8C28 + ldr r12, [r5, #0xd8] + ldr r0, [r5, #0x0] + ldrh r2, [r12, #0xa] + add r3, r12, #0x4 + ldrb r0, [r0, #0x1] + ldrh r1, [r3, r2] + add r2, r3, r2 + mla r0, r1, r0, r2 + ldr r0, [r0, #0x4] + add r1, r12, r0 + ldrh r2, [r1, #0x1e] + ands r0, r2, #0x2000 + beq _020B8C28 + add r1, r1, #0x2c + ands r0, r2, #0x2 + addeq r1, r1, #0x8 + ands r0, r2, #0x4 + addeq r1, r1, #0x4 + ands r0, r2, #0x8 + addeq r1, r1, #0x8 + mov r0, #0x18 + mov r2, #0x10 + bl FUN_020BB1C0 +_020B8C28: + cmp r4, #0x3 + movne r0, #0x0 + bne _020B8C54 + ldr r1, [r5, #0x8] + mov r0, r5 + bic r1, r1, #0x40 + str r1, [r5, #0x8] + ldr r1, [r5, #0x40] + blx r1 + ldr r0, [r5, #0x8] + and r0, r0, #0x40 +_020B8C54: + cmp r0, #0x0 + bne _020B8D84 + ldr r0, _020B8DD4 ; =0x021CED18 + ldr r1, [r0, #0xfc] + ands r0, r1, #0x1 + beq _020B8CA0 + ldr r1, _020B8DD8 ; =0x021CEDF8 + mov r0, #0x1c + mov r2, #0x3 + bl FUN_020BB1C0 + ldr r1, _020B8DDC ; =0x021CEDD4 + mov r0, #0x1a + mov r2, #0x9 + bl FUN_020BB1C0 + add r1, sp, #0x10 + mov r0, #0x19 + mov r2, #0xc + bl FUN_020BB1C0 + b _020B8CE0 +_020B8CA0: + ands r0, r1, #0x2 + beq _020B8CBC + add r1, sp, #0x10 + mov r0, #0x19 + mov r2, #0xc + bl FUN_020BB1C0 + b _020B8CE0 +_020B8CBC: + bl FUN_020B8344 + mov r1, r0 + mov r0, #0x19 + mov r2, #0xc + bl FUN_020BB1C0 + add r1, sp, #0x10 + mov r0, #0x19 + mov r2, #0xc + bl FUN_020BB1C0 +_020B8CE0: + bl FUN_020BB394 + ldr r0, _020B8DE0 ; =0x04000440 + mov r2, #0x0 + ldr r1, _020B8DE4 ; =0x04000444 + str r2, [r0, #0x0] + ldr r0, _020B8DE8 ; =0x04000454 + str r2, [r1, #0x0] + str r2, [r0, #0x0] + add r4, sp, #0x40 +_020B8D04: + mov r0, r4 + bl G3X_GetClipMtx +_020B8D0C: ; 0x020B8D0C + cmp r0, #0x0 + bne _020B8D04 + ldr r1, _020B8DEC ; =0x04000448 + mov r2, #0x1 + str r2, [r1, #0x0] + ldr r0, _020B8DE0 ; =0x04000440 + mov r2, #0x3 + str r2, [r0, #0x0] + add r1, sp, #0x40 + mov r0, #0x16 + mov r2, #0x10 + bl FUN_020BB1C0 + ldr r1, [sp, #0x70] + ldr r0, [sp, #0x74] + mov r2, r1, asr #0x4 + mov r1, r0, asr #0x4 + mov r0, r2, lsl #0x8 + mov r1, r1, lsl #0x8 + mov r0, r0, asr #0x10 + mov r1, r1, asr #0x10 + mov r0, r0, lsl #0x10 + mov r1, r1, lsl #0x10 + mov r2, r0, lsr #0x10 + mov r0, r1, lsr #0x10 + orr r3, r2, r0, lsl #0x10 + add r1, sp, #0x4 + mov r0, #0x22 + mov r2, #0x1 + str r3, [sp, #0x4] + bl FUN_020BB1C0 +_020B8D84: + mov r3, #0x2 + add r1, sp, #0x8 + mov r0, #0x10 + mov r2, #0x1 + str r3, [sp, #0x8] + bl FUN_020BB1C0 + mov r3, #0x1e + add r1, sp, #0xc + mov r0, #0x14 + mov r2, #0x1 + str r3, [sp, #0xc] + bl FUN_020BB1C0 +_020B8DB4: + ldr r0, [r5, #0x0] + add r0, r0, #0x3 + str r0, [r5, #0x0] + add sp, sp, #0x80 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B8DC8: .word 0x02106630 +_020B8DCC: .word 0x02106634 +_020B8DD0: .word 0x02106660 +_020B8DD4: .word 0x021CED18 +_020B8DD8: .word 0x021CEDF8 +_020B8DDC: .word 0x021CEDD4 +_020B8DE0: .word 0x04000440 +_020B8DE4: .word 0x04000444 +_020B8DE8: .word 0x04000454 +_020B8DEC: .word 0x04000448 + + arm_func_start FUN_020B8DF0 +FUN_020B8DF0: ; 0x020B8DF0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x44 + mov r7, r0 + ldr r1, [r7, #0x8] + ands r0, r1, #0x200 + bne _020B90E8 + ands r0, r1, #0x1 + beq _020B90E8 + ldr r2, [r7, #0xb0] + ldr r0, [r2, #0x10] + and r1, r0, #0xc0000000 + cmp r1, #0x80000000 + beq _020B8E5C + bic r0, r0, #0xc0000000 + str r0, [r2, #0x10] + ldr r2, [r7, #0xb0] + ldr r3, _020B90FC ; =0x02106638 + ldr r0, [r2, #0x10] + ldr r1, _020B9100 ; =0x0210663C + orr r0, r0, #0x80000000 + str r0, [r2, #0x10] + ldr r2, [r7, #0xb0] + ldr r0, [r3, #0x0] + ldr r4, [r2, #0x10] + mov r2, #0x1 + str r4, [r3, #0x4] + bl FUN_020BB1C0 +_020B8E5C: + mov r0, #0x3 + str r0, [sp, #0x0] + add r1, sp, #0x0 + mov r0, #0x10 + mov r2, #0x1 + bl FUN_020BB1C0 + ldr r0, [r7, #0x3c] + cmp r0, #0x0 + ldrneb r6, [r7, #0x98] + moveq r6, #0x0 + cmp r6, #0x1 + bne _020B8EC0 + ldr r1, [r7, #0x8] + mov r0, r7 + bic r1, r1, #0x40 + str r1, [r7, #0x8] + ldr r1, [r7, #0x3c] + blx r1 + ldr r0, [r7, #0x3c] + cmp r0, #0x0 + ldrneb r6, [r7, #0x98] + ldr r0, [r7, #0x8] + moveq r6, #0x0 + and r0, r0, #0x40 + b _020B8EC4 +_020B8EC0: + mov r0, #0x0 +_020B8EC4: + cmp r0, #0x0 + bne _020B8F3C + ldr r0, [r7, #0xb0] + add r1, sp, #0x38 + ldrh r4, [r0, #0x2e] + ldrh r5, [r0, #0x2c] + mov r3, #0x10000 + rsb r0, r4, #0x0 + mov r12, r0, lsl #0xf + mov lr, r5, lsl #0xf + mov r0, #0x1b + mov r2, #0x3 + str lr, [sp, #0x38] + str r12, [sp, #0x3c] + str r3, [sp, #0x40] + bl FUN_020BB1C0 + mov r0, r5, lsl #0x13 + mov r1, r4, lsl #0x13 + mov r0, r0, asr #0x10 + mov r1, r1, asr #0x10 + mov r0, r0, lsl #0x10 + mov r1, r1, lsl #0x10 + mov r2, r0, lsr #0x10 + mov r0, r1, lsr #0x10 + orr r3, r2, r0, lsl #0x10 + add r1, sp, #0x4 + mov r0, #0x22 + mov r2, #0x1 + str r3, [sp, #0x4] + bl FUN_020BB1C0 +_020B8F3C: + cmp r6, #0x2 + bne _020B8F78 + ldr r1, [r7, #0x8] + mov r0, r7 + bic r1, r1, #0x40 + str r1, [r7, #0x8] + ldr r1, [r7, #0x3c] + blx r1 + ldr r0, [r7, #0x3c] + cmp r0, #0x0 + ldrneb r6, [r7, #0x98] + ldr r0, [r7, #0x8] + moveq r6, #0x0 + and r0, r0, #0x40 + b _020B8F7C +_020B8F78: + mov r0, #0x0 +_020B8F7C: + cmp r0, #0x0 + bne _020B8FE0 + ldr r4, [r7, #0xd8] + ldr r0, [r7, #0x0] + ldrh r2, [r4, #0xa] + add r3, r4, #0x4 + ldrb r0, [r0, #0x1] + ldrh r1, [r3, r2] + add r2, r3, r2 + mla r0, r1, r0, r2 + ldr r0, [r0, #0x4] + add r1, r4, r0 + ldrh r2, [r1, #0x1e] + ands r0, r2, #0x2000 + beq _020B8FE0 + add r1, r1, #0x2c + ands r0, r2, #0x2 + addeq r1, r1, #0x8 + ands r0, r2, #0x4 + addeq r1, r1, #0x4 + ands r0, r2, #0x8 + addeq r1, r1, #0x8 + mov r0, #0x18 + mov r2, #0x10 + bl FUN_020BB1C0 +_020B8FE0: + cmp r6, #0x3 + movne r0, #0x0 + bne _020B900C + ldr r1, [r7, #0x8] + mov r0, r7 + bic r1, r1, #0x40 + str r1, [r7, #0x8] + ldr r1, [r7, #0x3c] + blx r1 + ldr r0, [r7, #0x8] + and r0, r0, #0x40 +_020B900C: + cmp r0, #0x0 + bne _020B90D0 + mov r3, #0x2 + add r1, sp, #0x8 + mov r0, #0x10 + mov r2, #0x1 + str r3, [sp, #0x8] + bl FUN_020BB1C0 + add r1, sp, #0x14 + mov r0, #0x0 + bl FUN_020BB824 + mov r3, #0x3 + add r1, sp, #0xc + mov r0, #0x10 + mov r2, #0x1 + str r3, [sp, #0xc] + bl FUN_020BB1C0 + ldr r0, _020B9104 ; =0x021CED18 + ldr r1, [r0, #0xfc] + ands r0, r1, #0x1 + beq _020B9094 + ldr r1, _020B9108 ; =0x021CED64 + mov r0, #0x1a + mov r2, #0x9 + bl FUN_020BB1C0 + ldr r1, _020B910C ; =0x021CEDD4 + mov r0, #0x1a + mov r2, #0x9 + bl FUN_020BB1C0 + add r1, sp, #0x14 + mov r0, #0x1a + mov r2, #0x9 + bl FUN_020BB1C0 + b _020B90D0 +_020B9094: + ands r0, r1, #0x2 + beq _020B90C0 + ldr r1, _020B9108 ; =0x021CED64 + mov r0, #0x1a + mov r2, #0x9 + bl FUN_020BB1C0 + add r1, sp, #0x14 + mov r0, #0x1a + mov r2, #0x9 + bl FUN_020BB1C0 + b _020B90D0 +_020B90C0: + add r1, sp, #0x14 + mov r0, #0x1a + mov r2, #0x9 + bl FUN_020BB1C0 +_020B90D0: + mov r3, #0x2 + add r1, sp, #0x10 + mov r0, #0x10 + mov r2, #0x1 + str r3, [sp, #0x10] + bl FUN_020BB1C0 +_020B90E8: + ldr r0, [r7, #0x0] + add r0, r0, #0x3 + str r0, [r7, #0x0] + add sp, sp, #0x44 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B90FC: .word 0x02106638 +_020B9100: .word 0x0210663C +_020B9104: .word 0x021CED18 +_020B9108: .word 0x021CED64 +_020B910C: .word 0x021CEDD4 + + arm_func_start FUN_020B9110 +FUN_020B9110: ; 0x020B9110 + stmdb sp!, {r4,lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r2, [r4, #0x8] + ands r0, r2, #0x100 + bne _020B9164 + ands r0, r2, #0x200 + bne _020B9164 + cmp r1, #0x0 + ldreq r0, [r4, #0xe0] + add r1, sp, #0x0 + streq r0, [sp, #0x8] + streq r0, [sp, #0x4] + streq r0, [sp, #0x0] + ldrne r0, [r4, #0xe4] + mov r2, #0x3 + strne r0, [sp, #0x8] + strne r0, [sp, #0x4] + strne r0, [sp, #0x0] + mov r0, #0x1b + bl FUN_020BB1C0 +_020B9164: + ldr r0, [r4, #0x0] + add r0, r0, #0x1 + str r0, [r4, #0x0] + add sp, sp, #0x10 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020B9178 +FUN_020B9178: ; 0x020B9178 + stmdb sp!, {r4-r6,lr} + mov r5, r0 + ldr r0, [r5, #0x34] + cmp r0, #0x0 + ldrneb r4, [r5, #0x96] + moveq r4, #0x0 + cmp r4, #0x1 + bne _020B91CC + ldr r1, [r5, #0x8] + mov r0, r5 + bic r1, r1, #0x40 + str r1, [r5, #0x8] + ldr r1, [r5, #0x34] + blx r1 + ldr r0, [r5, #0x34] + cmp r0, #0x0 + ldrneb r4, [r5, #0x96] + ldr r0, [r5, #0x8] + moveq r4, #0x0 + and r1, r0, #0x40 + b _020B91D0 +_020B91CC: + mov r1, #0x0 +_020B91D0: + ldr r0, [r5, #0x8] + ands r0, r0, #0x100 + bne _020B9228 + cmp r1, #0x0 + bne _020B9228 + ldr r0, [r5, #0x0] + ldrb r12, [r0, #0x1] + ldrb r3, [r0, #0x2] + ldrb lr, [r0, #0x3] + ldrb r2, [r0, #0x5] + ldrb r1, [r0, #0x6] + orr r3, r12, r3, lsl #0x8 + ldrb r6, [r0, #0x4] + orr r12, r3, lr, lsl #0x10 + ldrb r3, [r0, #0x7] + orr r1, r2, r1, lsl #0x8 + orr r6, r12, r6, lsl #0x18 + ldrb r2, [r0, #0x8] + orr r1, r1, r3, lsl #0x10 + add r0, r0, r6 + orr r1, r1, r2, lsl #0x18 + bl FUN_020BB2B0 +_020B9228: + cmp r4, #0x3 + bne _020B9248 + ldr r1, [r5, #0x8] + mov r0, r5 + bic r1, r1, #0x40 + str r1, [r5, #0x8] + ldr r1, [r5, #0x34] + blx r1 +_020B9248: + ldr r0, [r5, #0x0] + add r0, r0, #0x9 + str r0, [r5, #0x0] + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020B9258 +FUN_020B9258: ; 0x020B9258 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x8c + ldr r1, [r0, #0x4] + ldr r4, [r0, #0x0] + ldr r6, [r1, #0x4] + ldrb r2, [r4, #0x2] + ldr r3, [r6, #0x10] + mov r10, #0x0 + str r0, [sp, #0x0] + str r2, [sp, #0x8] + add r3, r6, r3 + add r1, sp, #0x34 + mov r0, r10 + mov r2, #0x54 + mov r9, r10 + str r3, [sp, #0x4] + add r8, r4, #0x3 + bl MIi_CpuClearFast + bl FUN_020BB394 + ldr r0, _020B98AC ; =0x04000440 + mov r7, r10 + str r7, [r0, #0x0] + mov r0, #0x1 + ldr r2, _020B98B0 ; =0x0400044C + ldr r1, _020B98B4 ; =0x04000454 + str r0, [r2, #0x0] + str r0, [sp, #0x10] + str r7, [r1, #0x0] + mov r1, #0x2 + ldr r0, _020B98AC ; =0x04000440 + str r1, [sp, #0x14] + str r1, [r0, #0x0] + ldr r0, [sp, #0x8] + cmp r0, #0x0 + bls _020B96CC +_020B92E4: + ldrb r4, [r8, #0x1] + mov r0, #0x64 + ldr r3, _020B98B8 ; =0x021D0380 + mul r0, r4, r0 + str r0, [sp, #0xc] + ldr r0, [sp, #0x0] + mov r1, r4, lsr #0x5 + add r0, r0, r1, lsl #0x2 + ldr r1, [sp, #0x10] + and r2, r4, #0x1f + mov r1, r1, lsl r2 + ldr r11, [r0, #0xcc] + ldr r2, [sp, #0xc] + ands r11, r1, r11 + add r6, r3, r2 + bne _020B9358 + ldr r3, [r0, #0xcc] + mov r2, #0x54 + orr r1, r3, r1 + str r1, [r0, #0xcc] + ldr r0, [sp, #0x4] + ldr r1, _020B98BC ; =0x04000450 + mla r0, r4, r2, r0 + ldrb r2, [r8, #0x0] + str r2, [r1, #0x0] + ldr r2, [sp, #0x10] + ldr r1, _020B98AC ; =0x04000440 + str r2, [r1, #0x0] + bl G3_MultMtx43 +_020B9358: + cmp r7, #0x0 + beq _020B9500 + ldr r2, [sp, #0x6c] + ldr r1, [r5, #0x0] + str r2, [sp, #0x18] + ldr r2, [sp, #0x70] + mov r0, r1, asr #0x1f + str r2, [sp, #0x1c] + ldr r2, [sp, #0x74] + ldr r12, [sp, #0x64] + str r2, [sp, #0x20] + ldr r2, [sp, #0x78] + ldr lr, [sp, #0x68] + str r2, [sp, #0x24] + ldr r2, [sp, #0x7c] + str r2, [sp, #0x28] + ldr r2, [sp, #0x80] + str r2, [sp, #0x2c] + ldr r2, [sp, #0x84] + str r2, [sp, #0x30] + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r0, r3, lsr #0xc + orr r0, r0, r2, lsl #0x14 + adds r0, r12, r0 + str r0, [sp, #0x64] + ldr r1, [r5, #0x4] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r0, r3, lsr #0xc + orr r0, r0, r2, lsl #0x14 + adds r0, lr, r0 + str r0, [sp, #0x68] + ldr r1, [r5, #0x8] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r1, r3, lsr #0xc + ldr r0, [sp, #0x18] + orr r1, r1, r2, lsl #0x14 + adds r0, r0, r1 + str r0, [sp, #0x6c] + ldr r1, [r5, #0xc] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r1, r3, lsr #0xc + ldr r0, [sp, #0x1c] + orr r1, r1, r2, lsl #0x14 + adds r0, r0, r1 + str r0, [sp, #0x70] + ldr r1, [r5, #0x10] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r1, r3, lsr #0xc + ldr r0, [sp, #0x20] + orr r1, r1, r2, lsl #0x14 + adds r0, r0, r1 + str r0, [sp, #0x74] + ldr r1, [r5, #0x14] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r1, r3, lsr #0xc + ldr r0, [sp, #0x24] + orr r1, r1, r2, lsl #0x14 + adds r0, r0, r1 + str r0, [sp, #0x78] + ldr r1, [r5, #0x18] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r1, r3, lsr #0xc + ldr r0, [sp, #0x28] + orr r1, r1, r2, lsl #0x14 + adds r0, r0, r1 + str r0, [sp, #0x7c] + ldr r1, [r5, #0x1c] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r1, r3, lsr #0xc + ldr r0, [sp, #0x2c] + orr r1, r1, r2, lsl #0x14 + adds r0, r0, r1 + str r0, [sp, #0x80] + ldr r1, [r5, #0x20] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r1, r3, lsr #0xc + ldr r0, [sp, #0x30] + orr r1, r1, r2, lsl #0x14 + adds r0, r0, r1 + str r0, [sp, #0x84] +_020B9500: + cmp r11, #0x0 + bne _020B9538 +_020B9508: + mov r0, r6 + bl G3X_GetClipMtx +_020B9510: ; 0x020B9510 + cmp r0, #0x0 + bne _020B9508 + ldr r1, [sp, #0x14] + ldr r0, _020B98AC ; =0x04000440 + str r1, [r0, #0x0] + ldr r0, [sp, #0x4] + mov r1, #0x54 + mla r0, r4, r1, r0 + add r0, r0, #0x30 + bl G3_MultMtx33 +_020B9538: + ldrb r1, [r8, #0x2] + ldr r2, [sp, #0x34] + ldr r0, [r6, #0x0] + mov r10, r1, lsl #0x4 + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r2, r1 + str r0, [sp, #0x34] + mov r9, r10, asr #0x1f + ldr r2, [sp, #0x38] + ldr r0, [r6, #0x4] + ldr r3, [sp, #0x3c] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r2, r1 + str r0, [sp, #0x38] + ldr r0, [r6, #0x8] + ldr r2, [sp, #0x40] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r3, r1 + str r0, [sp, #0x3c] + ldr r0, [r6, #0x10] + ldr r3, [sp, #0x44] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r2, r1 + str r0, [sp, #0x40] + ldr r0, [r6, #0x14] + ldr r2, [sp, #0x48] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r3, r1 + str r0, [sp, #0x44] + ldr r0, [r6, #0x18] + ldr r3, [sp, #0x4c] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r2, r1 + str r0, [sp, #0x48] + ldr r0, [r6, #0x20] + ldr r2, [sp, #0x50] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r3, r1 + str r0, [sp, #0x4c] + ldr r0, [r6, #0x24] + ldr r3, [sp, #0x54] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r2, r1 + str r0, [sp, #0x50] + ldr r0, [r6, #0x28] + ldr r2, [sp, #0x58] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r3, r1 + str r0, [sp, #0x54] + ldr r0, [r6, #0x30] + ldr r3, [sp, #0x5c] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r2, r1 + str r0, [sp, #0x58] + ldr r0, [r6, #0x34] + ldr r2, [sp, #0x60] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r3, r1 + str r0, [sp, #0x5c] + ldr r0, [r6, #0x38] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r2, r1 + str r0, [sp, #0x60] + cmp r11, #0x0 + ldr r1, _020B98C0 ; =0x021D03C0 + ldr r0, [sp, #0xc] + add r5, r1, r0 + add r8, r8, #0x3 + bne _020B96BC +_020B96AC: + mov r0, r5 + bl G3X_GetVectorMtx +_020B96B4: ; 0x020B96B4 + cmp r0, #0x0 + bne _020B96AC +_020B96BC: + ldr r0, [sp, #0x8] + add r7, r7, #0x1 + cmp r7, r0 + blo _020B92E4 +_020B96CC: + ldr r1, [r5, #0x0] + ldr r4, [sp, #0x64] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r0, r3, lsr #0xc + orr r0, r0, r2, lsl #0x14 + adds r0, r4, r0 + str r0, [sp, #0x64] + ldr r1, [r5, #0x4] + ldr r4, [sp, #0x68] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r0, r3, lsr #0xc + orr r0, r0, r2, lsl #0x14 + adds r0, r4, r0 + str r0, [sp, #0x68] + ldr r1, [r5, #0x8] + ldr r4, [sp, #0x6c] + umull r0, r2, r10, r1 + mov r3, r0, lsr #0xc + mov r0, r1, asr #0x1f + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + orr r3, r3, r2, lsl #0x14 + adds r0, r4, r3 + str r0, [sp, #0x6c] + ldr r7, [r5, #0xc] + ldr r12, [sp, #0x70] + mov r6, r7, asr #0x1f + umull r11, r8, r10, r7 + mla r8, r10, r6, r8 + mla r8, r9, r7, r8 + mov r6, r11, lsr #0xc + orr r6, r6, r8, lsl #0x14 + adds r6, r12, r6 + str r6, [sp, #0x70] + ldr r7, [r5, #0x10] + ldr r4, [sp, #0x74] + mov r6, r7, asr #0x1f + umull r11, r8, r10, r7 + mla r8, r10, r6, r8 + mla r8, r9, r7, r8 + mov r6, r11, lsr #0xc + orr r6, r6, r8, lsl #0x14 + adds r4, r4, r6 + str r4, [sp, #0x74] + ldr r6, [r5, #0x14] + ldr r3, [sp, #0x78] + mov r4, r6, asr #0x1f + umull r8, r7, r10, r6 + mla r7, r10, r4, r7 + mla r7, r9, r6, r7 + mov r4, r8, lsr #0xc + orr r4, r4, r7, lsl #0x14 + adds r3, r3, r4 + str r3, [sp, #0x78] + ldr r4, [r5, #0x18] + ldr r2, [sp, #0x7c] + mov r3, r4, asr #0x1f + umull r7, r6, r10, r4 + mla r6, r10, r3, r6 + mla r6, r9, r4, r6 + mov r3, r7, lsr #0xc + orr r3, r3, r6, lsl #0x14 + adds r2, r2, r3 + str r2, [sp, #0x7c] + ldr r3, [r5, #0x1c] + ldr r1, [sp, #0x80] + mov r2, r3, asr #0x1f + umull r6, r4, r10, r3 + mla r4, r10, r2, r4 + mla r4, r9, r3, r4 + mov r2, r6, lsr #0xc + orr r2, r2, r4, lsl #0x14 + adds r1, r1, r2 + str r1, [sp, #0x80] + ldr r2, [r5, #0x20] + ldr lr, [sp, #0x84] + mov r1, r2, asr #0x1f + umull r4, r3, r10, r2 + mla r3, r10, r1, r3 + mla r3, r9, r2, r3 + mov r1, r4, lsr #0xc + orr r1, r1, r3, lsl #0x14 + adds r1, lr, r1 + add r0, sp, #0x64 + str r1, [sp, #0x84] + bl G3_LoadMtx43 + ldr r1, _020B98AC ; =0x04000440 + mov r2, #0x1 + add r0, sp, #0x34 + str r2, [r1, #0x0] + bl G3_LoadMtx43 + ldr r3, _020B98AC ; =0x04000440 + mov r0, #0x0 + str r0, [r3, #0x0] + ldr r1, _020B98BC ; =0x04000450 + mov r2, #0x1 + mov r0, #0x2 + str r2, [r1, #0x0] + str r0, [r3, #0x0] + ldr r0, [sp, #0x0] + ldr r1, [r0, #0x0] + ldr r0, _020B98B0 ; =0x0400044C + ldrb r2, [r1, #0x1] + mov r1, #0x3 + str r2, [r0, #0x0] + ldr r0, [sp, #0x0] + ldr r2, [r0, #0x0] + ldrb r0, [r2, #0x2] + add r0, r0, #0x1 + mla r1, r0, r1, r2 + ldr r0, [sp, #0x0] + str r1, [r0, #0x0] + add sp, sp, #0x8c + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B98AC: .word 0x04000440 +_020B98B0: .word 0x0400044C +_020B98B4: .word 0x04000454 +_020B98B8: .word 0x021D0380 +_020B98BC: .word 0x04000450 +_020B98C0: .word 0x021D03C0 + + arm_func_start FUN_020B98C4 +FUN_020B98C4: ; 0x020B98C4 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xcc + mov r10, r0 + ldr r2, [r10, #0x8] + mov r9, r1 + ands r0, r2, #0x200 + mov r7, #0x2 + ldr r6, _020B9C28 ; =0x02106718 + ldr fp, _020B9C2C ; =0x02106724 + ldr r5, _020B9C30 ; =0x021066F4 + beq _020B992C + cmp r9, #0x40 + beq _020B9900 + cmp r9, #0x60 + bne _020B9904 +_020B9900: + add r7, r7, #0x1 +_020B9904: + cmp r9, #0x20 + beq _020B9914 + cmp r9, #0x60 + bne _020B9918 +_020B9914: + add r7, r7, #0x1 +_020B9918: + ldr r0, [r10, #0x0] + add sp, sp, #0xcc + add r0, r0, r7 + str r0, [r10, #0x0] + ldmia sp!, {r4-r11,pc} +_020B992C: + cmp r9, #0x40 + beq _020B993C + cmp r9, #0x60 + bne _020B9974 +_020B993C: + add r7, r7, #0x1 + ands r0, r2, #0x100 + bne _020B9974 + cmp r9, #0x40 + ldreq r0, [r10, #0x0] + add r1, sp, #0x0 + ldreqb r0, [r0, #0x2] + mov r2, #0x1 + streq r0, [sp, #0x0] + ldrne r0, [r10, #0x0] + ldrneb r0, [r0, #0x3] + strne r0, [sp, #0x0] + mov r0, #0x14 + bl FUN_020BB1C0 +_020B9974: + ldr r0, [r10, #0x2c] + cmp r0, #0x0 + ldrneb r8, [r10, #0x94] + moveq r8, #0x0 + cmp r8, #0x1 + bne _020B99C0 + ldr r1, [r10, #0x8] + mov r0, r10 + bic r1, r1, #0x40 + str r1, [r10, #0x8] + ldr r1, [r10, #0x2c] + blx r1 + ldr r0, [r10, #0x2c] + cmp r0, #0x0 + ldrneb r8, [r10, #0x94] + ldr r0, [r10, #0x8] + moveq r8, #0x0 + and r1, r0, #0x40 + b _020B99C4 +_020B99C0: + mov r1, #0x0 +_020B99C4: + ldr r0, [r10, #0x8] + ands r0, r0, #0x100 + bne _020B9BA4 + cmp r1, #0x0 + bne _020B9BA4 + bl FUN_020BB394 + ldr r2, _020B9C34 ; =0x00151110 + ldr r1, _020B9C38 ; =0x04000400 + mov r0, #0x0 + str r2, [r1, #0x0] + str r0, [r1, #0x0] + str r0, [r1, #0x0] + add r4, sp, #0x8 +_020B99F8: + mov r0, r4 + bl G3X_GetClipMtx +_020B9A00: ; 0x020B9A00 + cmp r0, #0x0 + bne _020B99F8 + ldr r0, _020B9C3C ; =0x021CED18 + ldr r1, [r0, #0xfc] + ands r0, r1, #0x1 + beq _020B9A38 + bl FUN_020B82A4 + add r1, sp, #0x48 + bl MTX_Copy43To44_ + add r0, sp, #0x8 + add r1, sp, #0x48 + mov r2, r0 + bl MTX_Concat44 + b _020B9A5C +_020B9A38: + ands r0, r1, #0x2 + beq _020B9A5C + ldr r0, _020B9C40 ; =0x021CED64 + add r1, sp, #0x88 + bl MTX_Copy43To44_ + add r0, sp, #0x8 + add r1, sp, #0x88 + mov r2, r0 + bl MTX_Concat44 +_020B9A5C: + ldr r1, [sp, #0x38] + add r0, sp, #0x8 + str r1, [r6, #0x0] + ldr r1, [sp, #0x3c] + str r1, [r6, #0x4] + ldr r1, [sp, #0x40] + str r1, [r6, #0x8] + bl VEC_Mag +_020B9A7C: ; 0x020B9A7C + str r0, [r11, #0x0] + add r0, sp, #0x18 + bl VEC_Mag + str r0, [r11, #0x4] + add r0, sp, #0x28 + bl VEC_Mag + str r0, [r11, #0x8] + ldr r0, [sp, #0x1c] + cmp r0, #0x0 + bne _020B9AB0 + ldr r0, [sp, #0x20] + cmp r0, #0x0 + beq _020B9AD4 +_020B9AB0: + add r0, sp, #0x18 + add r1, r5, #0xc + bl VEC_Normalize + ldr r0, [r5, #0x14] + rsb r0, r0, #0x0 + str r0, [r5, #0x1c] + ldr r0, [r5, #0x10] + str r0, [r5, #0x20] + b _020B9AF4 +_020B9AD4: + add r0, sp, #0x28 + add r1, r5, #0x18 + bl VEC_Normalize + ldr r0, [r5, #0x1c] + rsb r0, r0, #0x0 + str r0, [r5, #0x14] + ldr r0, [r5, #0x20] + str r0, [r5, #0x10] +_020B9AF4: + ldr r0, _020B9C3C ; =0x021CED18 + ldr r1, [r0, #0xfc] + ands r0, r1, #0x1 + beq _020B9B48 + ldr r3, _020B9C44 ; =0x00171012 + ldr r1, _020B9C38 ; =0x04000400 + ldr r0, _020B9C48 ; =0x021066EC + mov r2, #0x8 + str r3, [r1, #0x0] + bl MIi_CpuSend32 + bl FUN_020B8264 + ldr r1, _020B9C38 ; =0x04000400 + mov r2, #0x30 + bl MIi_CpuSend32 + ldr r2, _020B9C4C ; =0x00001B19 + ldr r1, _020B9C38 ; =0x04000400 + ldr r0, _020B9C30 ; =0x021066F4 + str r2, [r1, #0x0] + mov r2, #0x3c + bl MIi_CpuSend32 + b _020B9BA4 +_020B9B48: + ands r0, r1, #0x2 + beq _020B9B94 + ldr r3, _020B9C44 ; =0x00171012 + ldr r1, _020B9C38 ; =0x04000400 + ldr r0, _020B9C48 ; =0x021066EC + mov r2, #0x8 + str r3, [r1, #0x0] + bl MIi_CpuSend32 + bl FUN_020B8344 + ldr r1, _020B9C38 ; =0x04000400 + mov r2, #0x30 + bl MIi_CpuSend32 + ldr r2, _020B9C4C ; =0x00001B19 + ldr r1, _020B9C38 ; =0x04000400 + ldr r0, _020B9C30 ; =0x021066F4 + str r2, [r1, #0x0] + mov r2, #0x3c + bl MIi_CpuSend32 + b _020B9BA4 +_020B9B94: + ldr r0, _020B9C50 ; =0x021066E8 + ldr r1, _020B9C38 ; =0x04000400 + mov r2, #0x48 + bl MIi_CpuSend32 +_020B9BA4: + cmp r8, #0x3 + movne r0, #0x0 + bne _020B9BD0 + ldr r1, [r10, #0x8] + mov r0, r10 + bic r1, r1, #0x40 + str r1, [r10, #0x8] + ldr r1, [r10, #0x2c] + blx r1 + ldr r0, [r10, #0x8] + and r0, r0, #0x40 +_020B9BD0: + cmp r9, #0x20 + beq _020B9BE0 + cmp r9, #0x60 + bne _020B9C14 +_020B9BE0: + cmp r0, #0x0 + add r7, r7, #0x1 + bne _020B9C14 + ldr r0, [r10, #0x8] + ands r0, r0, #0x100 + bne _020B9C14 + ldr r0, [r10, #0x0] + add r1, sp, #0x4 + ldrb r3, [r0, #0x2] + mov r0, #0x13 + mov r2, #0x1 + str r3, [sp, #0x4] + bl FUN_020BB1C0 +_020B9C14: + ldr r0, [r10, #0x0] + add r0, r0, r7 + str r0, [r10, #0x0] + add sp, sp, #0xcc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B9C28: .word 0x02106718 +_020B9C2C: .word 0x02106724 +_020B9C30: .word 0x021066F4 +_020B9C34: .word 0x00151110 +_020B9C38: .word 0x04000400 +_020B9C3C: .word 0x021CED18 +_020B9C40: .word 0x021CED64 +_020B9C44: .word 0x00171012 +_020B9C48: .word 0x021066EC +_020B9C4C: .word 0x00001B19 +_020B9C50: .word 0x021066E8 + + arm_func_start FUN_020B9C54 +FUN_020B9C54: ; 0x020B9C54 + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0xc8 + mov r9, r0 + ldr r2, [r9, #0x8] + mov r8, r1 + ands r0, r2, #0x200 + mov r6, #0x2 + ldr r5, _020B9F58 ; =0x021066D0 + ldr r4, _020B9F5C ; =0x021066DC + beq _020B9CB8 + cmp r8, #0x40 + beq _020B9C8C + cmp r8, #0x60 + bne _020B9C90 +_020B9C8C: + add r6, r6, #0x1 +_020B9C90: + cmp r8, #0x20 + beq _020B9CA0 + cmp r8, #0x60 + bne _020B9CA4 +_020B9CA0: + add r6, r6, #0x1 +_020B9CA4: + ldr r0, [r9, #0x0] + add sp, sp, #0xc8 + add r0, r0, r6 + str r0, [r9, #0x0] + ldmia sp!, {r4-r10,pc} +_020B9CB8: + cmp r8, #0x40 + beq _020B9CC8 + cmp r8, #0x60 + bne _020B9D00 +_020B9CC8: + add r6, r6, #0x1 + ands r0, r2, #0x100 + bne _020B9D00 + cmp r8, #0x40 + ldreq r0, [r9, #0x0] + add r1, sp, #0x0 + ldreqb r0, [r0, #0x2] + mov r2, #0x1 + streq r0, [sp, #0x0] + ldrne r0, [r9, #0x0] + ldrneb r0, [r0, #0x3] + strne r0, [sp, #0x0] + mov r0, #0x14 + bl FUN_020BB1C0 +_020B9D00: + ldr r0, [r9, #0x28] + cmp r0, #0x0 + ldrneb r7, [r9, #0x93] + moveq r7, #0x0 + cmp r7, #0x1 + bne _020B9D4C + ldr r1, [r9, #0x8] + mov r0, r9 + bic r1, r1, #0x40 + str r1, [r9, #0x8] + ldr r1, [r9, #0x28] + blx r1 + ldr r0, [r9, #0x28] + cmp r0, #0x0 + ldrneb r7, [r9, #0x93] + ldr r0, [r9, #0x8] + moveq r7, #0x0 + and r1, r0, #0x40 + b _020B9D50 +_020B9D4C: + mov r1, #0x0 +_020B9D50: + ldr r0, [r9, #0x8] + ands r0, r0, #0x100 + bne _020B9ED4 + cmp r1, #0x0 + bne _020B9ED4 + bl FUN_020BB394 + ldr r2, _020B9F60 ; =0x00151110 + ldr r1, _020B9F64 ; =0x04000400 + mov r0, #0x0 + str r2, [r1, #0x0] + str r0, [r1, #0x0] + str r0, [r1, #0x0] + add r10, sp, #0x8 +_020B9D84: + mov r0, r10 + bl G3X_GetClipMtx +_020B9D8C: ; 0x020B9D8C + cmp r0, #0x0 + bne _020B9D84 + ldr r0, _020B9F68 ; =0x021CED18 + ldr r1, [r0, #0xfc] + ands r0, r1, #0x1 + beq _020B9DC4 + bl FUN_020B82A4 + add r1, sp, #0x48 + bl MTX_Copy43To44_ + add r0, sp, #0x8 + add r1, sp, #0x48 + mov r2, r0 + bl MTX_Concat44 + b _020B9DE8 +_020B9DC4: + ands r0, r1, #0x2 + beq _020B9DE8 + ldr r0, _020B9F6C ; =0x021CED64 + add r1, sp, #0x88 + bl MTX_Copy43To44_ + add r0, sp, #0x8 + add r1, sp, #0x88 + mov r2, r0 + bl MTX_Concat44 +_020B9DE8: + ldr r1, [sp, #0x38] + add r0, sp, #0x8 + str r1, [r5, #0x0] + ldr r1, [sp, #0x3c] + str r1, [r5, #0x4] + ldr r1, [sp, #0x40] + str r1, [r5, #0x8] + bl VEC_Mag +_020B9E08: ; 0x020B9E08 + str r0, [r4, #0x0] + add r0, sp, #0x18 + bl VEC_Mag + str r0, [r4, #0x4] + add r0, sp, #0x28 + bl VEC_Mag + ldr r1, _020B9F68 ; =0x021CED18 + str r0, [r4, #0x8] + ldr r1, [r1, #0xfc] + ands r0, r1, #0x1 + beq _020B9E78 + ldr r3, _020B9F70 ; =0x00171012 + ldr r1, _020B9F64 ; =0x04000400 + ldr r0, _020B9F74 ; =0x021066A4 + mov r2, #0x8 + str r3, [r1, #0x0] + bl MIi_CpuSend32 + bl FUN_020B8264 + ldr r1, _020B9F64 ; =0x04000400 + mov r2, #0x30 + bl MIi_CpuSend32 + ldr r2, _020B9F78 ; =0x00001B19 + ldr r1, _020B9F64 ; =0x04000400 + ldr r0, _020B9F7C ; =0x021066AC + str r2, [r1, #0x0] + mov r2, #0x3c + bl MIi_CpuSend32 + b _020B9ED4 +_020B9E78: + ands r0, r1, #0x2 + beq _020B9EC4 + ldr r3, _020B9F70 ; =0x00171012 + ldr r1, _020B9F64 ; =0x04000400 + ldr r0, _020B9F74 ; =0x021066A4 + mov r2, #0x8 + str r3, [r1, #0x0] + bl MIi_CpuSend32 + bl FUN_020B8344 + ldr r1, _020B9F64 ; =0x04000400 + mov r2, #0x30 + bl MIi_CpuSend32 + ldr r2, _020B9F78 ; =0x00001B19 + ldr r1, _020B9F64 ; =0x04000400 + ldr r0, _020B9F7C ; =0x021066AC + str r2, [r1, #0x0] + mov r2, #0x3c + bl MIi_CpuSend32 + b _020B9ED4 +_020B9EC4: + ldr r0, _020B9F80 ; =0x021066A0 + ldr r1, _020B9F64 ; =0x04000400 + mov r2, #0x48 + bl MIi_CpuSend32 +_020B9ED4: + cmp r7, #0x3 + movne r0, #0x0 + bne _020B9F00 + ldr r1, [r9, #0x8] + mov r0, r9 + bic r1, r1, #0x40 + str r1, [r9, #0x8] + ldr r1, [r9, #0x28] + blx r1 + ldr r0, [r9, #0x8] + and r0, r0, #0x40 +_020B9F00: + cmp r8, #0x20 + beq _020B9F10 + cmp r8, #0x60 + bne _020B9F44 +_020B9F10: + cmp r0, #0x0 + add r6, r6, #0x1 + bne _020B9F44 + ldr r0, [r9, #0x8] + ands r0, r0, #0x100 + bne _020B9F44 + ldr r0, [r9, #0x0] + add r1, sp, #0x4 + ldrb r3, [r0, #0x2] + mov r0, #0x13 + mov r2, #0x1 + str r3, [sp, #0x4] + bl FUN_020BB1C0 +_020B9F44: + ldr r0, [r9, #0x0] + add r0, r0, r6 + str r0, [r9, #0x0] + add sp, sp, #0xc8 + ldmia sp!, {r4-r10,pc} + .balign 4 +_020B9F58: .word 0x021066D0 +_020B9F5C: .word 0x021066DC +_020B9F60: .word 0x00151110 +_020B9F64: .word 0x04000400 +_020B9F68: .word 0x021CED18 +_020B9F6C: .word 0x021CED64 +_020B9F70: .word 0x00171012 +_020B9F74: .word 0x021066A4 +_020B9F78: .word 0x00001B19 +_020B9F7C: .word 0x021066AC +_020B9F80: .word 0x021066A0 + + arm_func_start FUN_020B9F84 +FUN_020B9F84: ; 0x020B9F84 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x14 + mov r10, r0 + ldr r0, [r10, #0x0] + mov r9, r1 + ldrb r4, [r0, #0x1] + mov r7, #0x4 + strb r4, [r10, #0xae] + ldr r0, [r10, #0x8] + orr r0, r0, #0x10 + str r0, [r10, #0x8] + ldr r1, [r10, #0x8] + ands r0, r1, #0x400 + beq _020BA01C + cmp r9, #0x40 + beq _020B9FCC + cmp r9, #0x60 + bne _020B9FD0 +_020B9FCC: + add r7, r7, #0x1 +_020B9FD0: + cmp r9, #0x20 + beq _020B9FE0 + cmp r9, #0x60 + bne _020BA008 +_020B9FE0: + add r7, r7, #0x1 + ands r0, r1, #0x100 + bne _020BA008 + ldr r0, [r10, #0x0] + add r1, sp, #0x8 + ldrb r3, [r0, #0x4] + mov r0, #0x14 + mov r2, #0x1 + str r3, [sp, #0x8] + bl FUN_020BB1C0 +_020BA008: + ldr r0, [r10, #0x0] + add sp, sp, #0x14 + add r0, r0, r7 + str r0, [r10, #0x0] + ldmia sp!, {r4-r11,pc} +_020BA01C: + cmp r9, #0x40 + beq _020BA02C + cmp r9, #0x60 + bne _020BA068 +_020BA02C: + cmp r9, #0x40 + ldreq r0, [r10, #0x0] + add r7, r7, #0x1 + ldreqb r0, [r0, #0x4] + streq r0, [sp, #0xc] + ldrne r0, [r10, #0x0] + ldrneb r0, [r0, #0x5] + strne r0, [sp, #0xc] + ldr r0, [r10, #0x8] + ands r0, r0, #0x100 + bne _020BA068 + add r1, sp, #0xc + mov r0, #0x14 + mov r2, #0x1 + bl FUN_020BB1C0 +_020BA068: + add r0, r10, #0x12c + str r0, [r10, #0xb4] + ldr r0, [r10, #0x24] + cmp r0, #0x0 + ldrneb r8, [r10, #0x92] + moveq r8, #0x0 + cmp r8, #0x1 + bne _020BA0BC + ldr r1, [r10, #0x8] + mov r0, r10 + bic r1, r1, #0x40 + str r1, [r10, #0x8] + ldr r1, [r10, #0x24] + blx r1 + ldr r0, [r10, #0x24] + cmp r0, #0x0 + ldrneb r8, [r10, #0x92] + ldr r0, [r10, #0x8] + moveq r8, #0x0 + and r0, r0, #0x40 + b _020BA0C0 +_020BA0BC: + mov r0, #0x0 +_020BA0C0: + cmp r0, #0x0 + bne _020BA2CC + ldr r0, [r10, #0x4] + ldr r1, [r0, #0x34] + cmp r1, #0x0 + beq _020BA0F4 + mov r0, #0x58 + mla r6, r4, r0, r1 + ldr r0, [r10, #0x8] + ands r0, r0, #0x80 + moveq r0, #0x1 + movne r0, #0x0 + b _020BA0FC +_020BA0F4: + add r6, r10, #0x12c + mov r0, #0x0 +_020BA0FC: + cmp r0, #0x0 + bne _020BA2C8 + mov r0, #0x0 + str r0, [r6, #0x0] + ldr r0, [r10, #0x4] + ldr r1, [r0, #0x10] + cmp r1, #0x0 + beq _020BA134 + ldr r3, [r0, #0x14] + mov r0, r6 + mov r2, r4 + blx r3 + cmp r0, #0x0 + bne _020BA2C8 +_020BA134: + ldr r2, [r10, #0xd4] + ldrh r0, [r2, #0x6] + ldrh r1, [r2, r0] + add r0, r2, r0 + mla r0, r1, r4, r0 + ldr r1, [r0, #0x4] + ldrh r0, [r2, r1] + add r4, r2, r1 + add r5, r4, #0x4 + ands r0, r0, #0x1 + ldrne r0, [r6, #0x0] + orrne r0, r0, #0x4 + strne r0, [r6, #0x0] + bne _020BA188 + ldr r0, [r5, #0x0] + str r0, [r6, #0x4c] + ldr r0, [r5, #0x4] + str r0, [r6, #0x50] + ldr r0, [r5, #0x8] + add r5, r5, #0xc + str r0, [r6, #0x54] +_020BA188: + ldrh r1, [r4, #0x0] + ands r0, r1, #0x2 + ldrne r0, [r6, #0x0] + orrne r0, r0, #0x2 + strne r0, [r6, #0x0] + bne _020BA2B0 + ands r0, r1, #0x8 + beq _020BA264 + and r1, r1, #0xf0 + mov r11, r1, asr #0x4 + ldrsh r1, [r5, #0x0] + add r0, r6, #0x28 + str r1, [sp, #0x0] + ldrsh r1, [r5, #0x2] + str r1, [sp, #0x4] + blx MI_Zero36B + ldrh r0, [r4, #0x0] + add r1, r6, r11, lsl #0x2 + add r5, r5, #0x4 + ands r0, r0, #0x100 + movne r0, #0x1000 + rsbne r2, r0, #0x0 + moveq r2, #0x1000 + str r2, [r1, #0x28] + ldr r0, _020BA3B4 ; =0x020FF9F0 + ldr r1, _020BA3B8 ; =0x020FF9F1 + ldrb r0, [r0, r11, lsl #0x2] + add r2, r6, r0, lsl #0x2 + ldr r0, [sp, #0x0] + str r0, [r2, #0x28] + ldrb r0, [r1, r11, lsl #0x2] + add r1, r6, r0, lsl #0x2 + ldr r0, [sp, #0x4] + str r0, [r1, #0x28] + ldrh r0, [r4, #0x0] + ands r0, r0, #0x200 + ldrne r0, [sp, #0x4] + rsbne r0, r0, #0x0 + strne r0, [sp, #0x4] + ldr r0, _020BA3BC ; =0x020FF9F2 + ldrb r0, [r0, r11, lsl #0x2] + add r1, r6, r0, lsl #0x2 + ldr r0, [sp, #0x4] + str r0, [r1, #0x28] + ldrh r0, [r4, #0x0] + ands r0, r0, #0x400 + ldrne r0, [sp, #0x0] + rsbne r0, r0, #0x0 + strne r0, [sp, #0x0] + ldr r0, _020BA3C0 ; =0x020FF9F3 + ldrb r0, [r0, r11, lsl #0x2] + add r1, r6, r0, lsl #0x2 + ldr r0, [sp, #0x0] + str r0, [r1, #0x28] + b _020BA2B0 +_020BA264: + ldrsh r0, [r4, #0x2] + str r0, [r6, #0x28] + ldrsh r0, [r5, #0x0] + str r0, [r6, #0x2c] + ldrsh r0, [r5, #0x2] + str r0, [r6, #0x30] + ldrsh r0, [r5, #0x4] + str r0, [r6, #0x34] + ldrsh r0, [r5, #0x6] + str r0, [r6, #0x38] + ldrsh r0, [r5, #0x8] + str r0, [r6, #0x3c] + ldrsh r0, [r5, #0xa] + str r0, [r6, #0x40] + ldrsh r0, [r5, #0xc] + str r0, [r6, #0x44] + ldrsh r0, [r5, #0xe] + add r5, r5, #0x10 + str r0, [r6, #0x48] +_020BA2B0: + ldrh r3, [r4, #0x0] + ldr r2, [r10, #0x0] + ldr r4, [r10, #0xe8] + mov r0, r6 + mov r1, r5 + blx r4 +_020BA2C8: + str r6, [r10, #0xb4] +_020BA2CC: + cmp r8, #0x2 + bne _020BA308 + ldr r1, [r10, #0x8] + mov r0, r10 + bic r1, r1, #0x40 + str r1, [r10, #0x8] + ldr r1, [r10, #0x24] + blx r1 + ldr r0, [r10, #0x24] + cmp r0, #0x0 + ldrneb r8, [r10, #0x92] + ldr r0, [r10, #0x8] + moveq r8, #0x0 + and r0, r0, #0x40 + b _020BA30C +_020BA308: + mov r0, #0x0 +_020BA30C: + cmp r0, #0x0 + bne _020BA32C + ldr r0, [r10, #0x8] + ands r0, r0, #0x100 + bne _020BA32C + ldr r0, [r10, #0xb4] + ldr r1, [r10, #0xec] + blx r1 +_020BA32C: + mov r0, #0x0 + str r0, [r10, #0xb4] + cmp r8, #0x3 + bne _020BA35C + ldr r1, [r10, #0x8] + mov r0, r10 + bic r1, r1, #0x40 + str r1, [r10, #0x8] + ldr r1, [r10, #0x24] + blx r1 + ldr r0, [r10, #0x8] + and r0, r0, #0x40 +_020BA35C: + cmp r9, #0x20 + beq _020BA36C + cmp r9, #0x60 + bne _020BA3A0 +_020BA36C: + cmp r0, #0x0 + add r7, r7, #0x1 + bne _020BA3A0 + ldr r0, [r10, #0x8] + ands r0, r0, #0x100 + bne _020BA3A0 + ldr r0, [r10, #0x0] + add r1, sp, #0x10 + ldrb r3, [r0, #0x4] + mov r0, #0x13 + mov r2, #0x1 + str r3, [sp, #0x10] + bl FUN_020BB1C0 +_020BA3A0: + ldr r0, [r10, #0x0] + add r0, r0, r7 + str r0, [r10, #0x0] + add sp, sp, #0x14 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020BA3B4: .word 0x020FF9F0 +_020BA3B8: .word 0x020FF9F1 +_020BA3BC: .word 0x020FF9F2 +_020BA3C0: .word 0x020FF9F3 + + arm_func_start FUN_020BA3C4 +FUN_020BA3C4: ; 0x020BA3C4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + ldr r3, [r4, #0x8] + ands r2, r3, #0x200 + bne _020BA420 + ands r2, r3, #0x1 + beq _020BA420 + ands r2, r3, #0x2 + bne _020BA420 + ldr r5, [r4, #0xdc] + ldr r3, [r4, #0x0] + ldrh r2, [r5, #0x6] + ldrb r3, [r3, #0x1] + ldr ip, _020BA434 ; =0x02106650 + ldrh lr, [r5, r2] + add r2, r5, r2 + mla r2, lr, r3, r2 + ldr r2, [r2, #0x4] + ldrh lr, [r5, r2] + add r2, r5, r2 + ldr r12, [r12, lr, lsl #0x2] + blx r12 +_020BA420: + ldr r0, [r4, #0x0] + add r0, r0, #0x2 + str r0, [r4, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020BA434: .word 0x02106650 + + arm_func_start FUN_020BA438 +FUN_020BA438: ; 0x020BA438 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldr r0, [r6, #0x20] + mov r5, r2 + cmp r0, #0x0 + ldrneb r4, [r6, #0x91] + moveq r4, #0x0 + cmp r4, #0x1 + bne _020BA490 + ldr r1, [r6, #0x8] + mov r0, r6 + bic r1, r1, #0x40 + str r1, [r6, #0x8] + ldr r1, [r6, #0x20] + blx r1 + ldr r0, [r6, #0x20] + cmp r0, #0x0 + ldrneb r4, [r6, #0x91] + ldr r0, [r6, #0x8] + moveq r4, #0x0 + and r0, r0, #0x40 + b _020BA494 +_020BA490: + mov r0, #0x0 +_020BA494: + cmp r0, #0x0 + bne _020BA4B8 + ldr r0, [r6, #0x8] + ands r0, r0, #0x100 + bne _020BA4B8 + ldr r0, [r5, #0x8] + ldr r1, [r5, #0xc] + add r0, r5, r0 + bl FUN_020BB2B0 +_020BA4B8: + cmp r4, #0x2 + bne _020BA4E8 + ldr r1, [r6, #0x8] + mov r0, r6 + bic r1, r1, #0x40 + str r1, [r6, #0x8] + ldr r1, [r6, #0x20] + blx r1 + ldr r0, [r6, #0x20] + cmp r0, #0x0 + ldrneb r4, [r6, #0x91] + moveq r4, #0x0 +_020BA4E8: + cmp r4, #0x3 + ldmneia sp!, {r4-r6,pc} +_020BA4F0: ; 0x020BA4F0 + ldr r1, [r6, #0x8] + mov r0, r6 + bic r1, r1, #0x40 + str r1, [r6, #0x8] + ldr r1, [r6, #0x20] + blx r1 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BA50C +FUN_020BA50C: ; 0x020BA50C + stmdb sp!, {r4-r6,lr} + mov r4, r0 + ldr r5, [r4, #0x8] + ands r0, r5, #0x200 + bne _020BA578 + ldr r2, [r4, #0x0] + ands r0, r5, #0x1 + ldrb r3, [r2, #0x1] + bne _020BA544 + ands r0, r5, #0x8 + beq _020BA544 + ldrb r0, [r4, #0xad] + cmp r3, r0 + beq _020BA578 +_020BA544: + ldr r6, [r4, #0xd8] + ldr ip, _020BA588 ; =0x02106640 + ldrh r2, [r6, #0xa] + add r5, r6, #0x4 + mov r0, r4 + ldrh lr, [r5, r2] + add r2, r5, r2 + mla r2, lr, r3, r2 + ldr r2, [r2, #0x4] + ldrh lr, [r6, r2] + add r2, r6, r2 + ldr r12, [r12, lr, lsl #0x2] + blx r12 +_020BA578: + ldr r0, [r4, #0x0] + add r0, r0, #0x2 + str r0, [r4, #0x0] + ldmia sp!, {r4-r6,pc} + .balign 4 +_020BA588: .word 0x02106640 + + arm_func_start FUN_020BA58C +FUN_020BA58C: ; 0x020BA58C + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x20 + mov r8, r0 + mov r6, r3 + strb r6, [r8, #0xad] + ldr r3, [r8, #0x8] + add r0, r8, #0xf4 + orr r3, r3, #0x8 + str r3, [r8, #0x8] + str r0, [r8, #0xb0] + ldr r0, [r8, #0x1c] + mov r4, r1 + cmp r0, #0x0 + ldrneb r5, [r8, #0x90] + mov r7, r2 + moveq r5, #0x0 + cmp r5, #0x1 + bne _020BA608 + ldr r1, [r8, #0x8] + mov r0, r8 + bic r1, r1, #0x40 + str r1, [r8, #0x8] + ldr r1, [r8, #0x1c] + blx r1 + ldr r0, [r8, #0x1c] + cmp r0, #0x0 + ldrneb r5, [r8, #0x90] + ldr r0, [r8, #0x8] + moveq r5, #0x0 + and r0, r0, #0x40 + b _020BA60C +_020BA608: + mov r0, #0x0 +_020BA60C: + cmp r0, #0x0 + bne _020BA8C0 + ldr r0, [r8, #0x4] + ldr r0, [r0, #0x38] + cmp r0, #0x0 + beq _020BA638 + ldr r1, [r8, #0x8] + ands r1, r1, #0x80 + moveq r1, #0x38 + mlaeq r4, r6, r1, r0 + beq _020BA8BC +_020BA638: + cmp r4, #0x20 + beq _020BA648 + cmp r4, #0x40 + bne _020BA684 +_020BA648: + mov r1, r6, lsr #0x5 + add r1, r8, r1, lsl #0x2 + and r2, r6, #0x1f + mov r3, #0x1 + mov r2, r3, lsl r2 + ldr r1, [r1, #0xbc] + ands r1, r2, r1 + beq _020BA684 + cmp r0, #0x0 + movne r1, #0x38 + mlane r4, r6, r1, r0 + ldreq r1, _020BA9D8 ; =0x021CEF80 + moveq r0, #0x38 + mlaeq r4, r6, r0, r1 + b _020BA8BC +_020BA684: + cmp r0, #0x0 + beq _020BA6BC + add r4, r8, #0xbc + mov r3, r6, lsr #0x5 + ldr r2, [r4, r3, lsl #0x2] + and r0, r6, #0x1f + mov r1, #0x1 + orr r0, r2, r1, lsl r0 + str r0, [r4, r3, lsl #0x2] + ldr r1, [r8, #0x4] + mov r0, #0x38 + ldr r1, [r1, #0x38] + mla r4, r6, r0, r1 + b _020BA6F0 +_020BA6BC: + cmp r4, #0x40 + addne r4, r8, #0xf4 + bne _020BA6F0 + add lr, r8, #0xbc + mov r12, r6, lsr #0x5 + ldr r1, _020BA9D8 ; =0x021CEF80 + ldr r4, [lr, r12, lsl #0x2] + mov r0, #0x38 + and r2, r6, #0x1f + mov r3, #0x1 + orr r2, r4, r3, lsl r2 + mla r4, r6, r0, r1 + str r2, [lr, r12, lsl #0x2] +_020BA6F0: + mov r0, #0x0 + str r0, [r4, #0x0] + ldr r3, [r8, #0xd8] + ldrh r0, [r3, #0xa] + add r2, r3, #0x4 + ldrh r1, [r2, r0] + add r0, r2, r0 + mla r0, r1, r6, r0 + ldr r0, [r0, #0x4] + ldr r1, _020BA9DC ; =0x021CED18 + add r0, r3, r0 + ldrh r0, [r0, #0x1e] + ands r0, r0, #0x20 + ldrne r0, [r4, #0x0] + orrne r0, r0, #0x20 + strne r0, [r4, #0x0] + ldrh r2, [r7, #0x1e] + ldr r0, _020BA9E0 ; =0x020FF9D0 + ldr r12, [r1, #0x94] + mov r2, r2, asr #0x6 + and r2, r2, #0x7 + ldr lr, [r0, r2, lsl #0x2] + ldr r2, [r7, #0x4] + mvn r3, lr + and r3, r12, r3 + and r2, r2, lr + orr r2, r3, r2 + str r2, [r4, #0x4] + ldrh r12, [r7, #0x1e] + ldr r3, [r1, #0x98] + ldr r2, [r7, #0x8] + mov r12, r12, asr #0x9 + and r12, r12, #0x7 + ldr r12, [r0, r12, lsl #0x2] + mvn r0, r12 + and r3, r3, r0 + and r0, r2, r12 + orr r0, r3, r0 + str r0, [r4, #0x8] + ldr r3, [r7, #0x10] + ldr r0, [r7, #0xc] + ldr r2, [r1, #0x9c] + mvn r1, r3 + and r1, r2, r1 + and r0, r0, r3 + orr r0, r1, r0 + str r0, [r4, #0xc] + ldr r0, [r7, #0x14] + str r0, [r4, #0x10] + ldrh r0, [r7, #0x1c] + str r0, [r4, #0x14] + ldrh r1, [r7, #0x1e] + ands r0, r1, #0x1 + beq _020BA850 + ands r1, r1, #0x2 + ldrne r1, [r4, #0x0] + add r0, r7, #0x2c + orrne r1, r1, #0x1 + strne r1, [r4, #0x0] + bne _020BA7F4 + ldr r1, [r0, #0x0] + str r1, [r4, #0x18] + ldr r1, [r0, #0x4] + add r0, r0, #0x8 + str r1, [r4, #0x1c] +_020BA7F4: + ldrh r1, [r7, #0x1e] + ands r1, r1, #0x4 + ldrne r1, [r4, #0x0] + orrne r1, r1, #0x2 + strne r1, [r4, #0x0] + bne _020BA820 + ldrsh r1, [r0, #0x0] + strh r1, [r4, #0x20] + ldrsh r1, [r0, #0x2] + add r0, r0, #0x4 + strh r1, [r4, #0x22] +_020BA820: + ldrh r1, [r7, #0x1e] + ands r1, r1, #0x8 + ldreq r1, [r0, #0x0] + streq r1, [r4, #0x24] + ldreq r0, [r0, #0x4] + streq r0, [r4, #0x28] + ldrne r0, [r4, #0x0] + orrne r0, r0, #0x4 + strne r0, [r4, #0x0] + ldr r0, [r4, #0x0] + orr r0, r0, #0x8 + str r0, [r4, #0x0] +_020BA850: + ldr r0, [r8, #0x4] + ldr r1, [r0, #0x8] + cmp r1, #0x0 + beq _020BA890 + mov r2, r6, lsr #0x5 + add r2, r0, r2, lsl #0x2 + and r3, r6, #0x1f + mov r12, #0x1 + mov r3, r12, lsl r3 + ldr r2, [r2, #0x3c] + ands r2, r3, r2 + beq _020BA890 + ldr r3, [r0, #0xc] + mov r0, r4 + mov r2, r6 + blx r3 +_020BA890: + ldr r0, [r4, #0x0] + ands r0, r0, #0x18 + beq _020BA8BC + ldrh r0, [r7, #0x20] + strh r0, [r4, #0x2c] + ldrh r0, [r7, #0x22] + strh r0, [r4, #0x2e] + ldr r0, [r7, #0x24] + str r0, [r4, #0x30] + ldr r0, [r7, #0x28] + str r0, [r4, #0x34] +_020BA8BC: + str r4, [r8, #0xb0] +_020BA8C0: + cmp r5, #0x2 + bne _020BA8FC + ldr r1, [r8, #0x8] + mov r0, r8 + bic r1, r1, #0x40 + str r1, [r8, #0x8] + ldr r1, [r8, #0x1c] + blx r1 + ldr r0, [r8, #0x1c] + cmp r0, #0x0 + ldrneb r5, [r8, #0x90] + ldr r0, [r8, #0x8] + moveq r5, #0x0 + and r0, r0, #0x40 + b _020BA900 +_020BA8FC: + mov r0, #0x0 +_020BA900: + cmp r0, #0x0 + bne _020BA9AC + ldr r4, [r8, #0xb0] + ldr r1, [r4, #0xc] + ands r0, r1, #0x1f0000 + beq _020BA9A0 + ldr r0, [r4, #0x0] + ands r0, r0, #0x20 + bicne r0, r1, #0x1f0000 + strne r0, [r4, #0xc] + ldr r0, [r8, #0x8] + bic r0, r0, #0x2 + str r0, [r8, #0x8] + ldr r0, [r8, #0x8] + ands r0, r0, #0x100 + bne _020BA9AC + ldr r0, _020BA9E4 ; =0x00293130 + ldr r3, _020BA9E8 ; =0x00002B2A + str r0, [sp, #0x0] + ldr r2, [r4, #0x4] + add r1, sp, #0x4 + str r2, [sp, #0x4] + ldr r6, [r4, #0x8] + mov r2, #0x6 + str r6, [sp, #0x8] + ldr r6, [r4, #0xc] + str r6, [sp, #0xc] + str r3, [sp, #0x10] + ldr r3, [r4, #0x10] + str r3, [sp, #0x14] + ldr r3, [r4, #0x14] + str r3, [sp, #0x18] + bl FUN_020BB1C0 +_020BA984: ; 0x020BA984 + ldr r0, [r4, #0x0] + ands r0, r0, #0x18 + beq _020BA9AC + ldr r1, [r8, #0xf0] + mov r0, r4 + blx r1 + b _020BA9AC +_020BA9A0: + ldr r0, [r8, #0x8] + orr r0, r0, #0x2 + str r0, [r8, #0x8] +_020BA9AC: + cmp r5, #0x3 + addne sp, sp, #0x20 + ldmneia sp!, {r4-r8,pc} +_020BA9B8: ; 0x020BA9B8 + ldr r1, [r8, #0x8] + mov r0, r8 + bic r1, r1, #0x40 + str r1, [r8, #0x8] + ldr r1, [r8, #0x1c] + blx r1 + add sp, sp, #0x20 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020BA9D8: .word 0x021CEF80 +_020BA9DC: .word 0x021CED18 +_020BA9E0: .word 0x020FF9D0 +_020BA9E4: .word 0x00293130 +_020BA9E8: .word 0x00002B2A + + arm_func_start FUN_020BA9EC +FUN_020BA9EC: ; 0x020BA9EC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r1, [r5, #0x8] + ands r0, r1, #0x200 + bne _020BAAAC + ands r0, r1, #0x1 + beq _020BAAAC + ldr r0, [r5, #0x18] + cmp r0, #0x0 + ldrneb r4, [r5, #0x8f] + moveq r4, #0x0 + cmp r4, #0x1 + bne _020BAA58 + ldr r1, [r5, #0x8] + mov r0, r5 + bic r1, r1, #0x40 + str r1, [r5, #0x8] + ldr r1, [r5, #0x18] + blx r1 + ldr r0, [r5, #0x18] + cmp r0, #0x0 + ldrneb r4, [r5, #0x8f] + ldr r0, [r5, #0x8] + moveq r4, #0x0 + and r0, r0, #0x40 + b _020BAA5C +_020BAA58: + mov r0, #0x0 +_020BAA5C: + cmp r0, #0x0 + bne _020BAA8C + ldr r0, [r5, #0x0] + ldrb r0, [r0, #0x1] + str r0, [sp, #0x0] + ldr r0, [r5, #0x8] + ands r0, r0, #0x100 + bne _020BAA8C + add r1, sp, #0x0 + mov r0, #0x14 + mov r2, #0x1 + bl FUN_020BB1C0 +_020BAA8C: + cmp r4, #0x3 + bne _020BAAAC + ldr r1, [r5, #0x8] + mov r0, r5 + bic r1, r1, #0x40 + str r1, [r5, #0x8] + ldr r1, [r5, #0x18] + blx r1 +_020BAAAC: + ldr r0, [r5, #0x0] + add r0, r0, #0x2 + str r0, [r5, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020BAAC0 +FUN_020BAAC0: ; 0x020BAAC0 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldr r0, [r6, #0x8] + ands r0, r0, #0x200 + bne _020BAC38 + ldr r1, [r6, #0x0] + add r0, r6, #0x184 + ldrb r1, [r1, #0x1] + strb r1, [r6, #0xac] + ldr r1, [r6, #0x8] + ldrb r4, [r6, #0xac] + orr r1, r1, #0x4 + str r1, [r6, #0x8] + str r0, [r6, #0xb8] + ldr r0, [r6, #0x14] + cmp r0, #0x0 + ldrneb r5, [r6, #0x8e] + moveq r5, #0x0 + cmp r5, #0x1 + bne _020BAB44 + ldr r1, [r6, #0x8] + mov r0, r6 + bic r1, r1, #0x40 + str r1, [r6, #0x8] + ldr r1, [r6, #0x14] + blx r1 + ldr r0, [r6, #0x14] + cmp r0, #0x0 + ldrneb r5, [r6, #0x8e] + ldr r0, [r6, #0x8] + moveq r5, #0x0 + and r0, r0, #0x40 + b _020BAB48 +_020BAB44: + mov r0, #0x0 +_020BAB48: + cmp r0, #0x0 + bne _020BABAC + ldr r12, [r6, #0x4] + ldr r1, [r12, #0x18] + cmp r1, #0x0 + beq _020BAB98 + mov r0, r4, lsr #0x5 + add r0, r12, r0, lsl #0x2 + and r2, r4, #0x1f + mov r3, #0x1 + mov r2, r3, lsl r2 + ldr r0, [r0, #0x4c] + ands r0, r2, r0 + beq _020BAB98 + ldr r0, [r6, #0xb8] + ldr r3, [r12, #0x1c] + mov r2, r4 + blx r3 + cmp r0, #0x0 + bne _020BABAC +_020BAB98: + ldr r1, [r6, #0x0] + ldr r0, [r6, #0xb8] + ldrb r1, [r1, #0x2] + and r1, r1, #0x1 + str r1, [r0, #0x0] +_020BABAC: + cmp r5, #0x2 + bne _020BABE8 + ldr r1, [r6, #0x8] + mov r0, r6 + bic r1, r1, #0x40 + str r1, [r6, #0x8] + ldr r1, [r6, #0x14] + blx r1 + ldr r0, [r6, #0x14] + cmp r0, #0x0 + ldrneb r5, [r6, #0x8e] + ldr r0, [r6, #0x8] + moveq r5, #0x0 + and r0, r0, #0x40 + b _020BABEC +_020BABE8: + mov r0, #0x0 +_020BABEC: + cmp r0, #0x0 + bne _020BAC18 + ldr r0, [r6, #0xb8] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldrne r0, [r6, #0x8] + orrne r0, r0, #0x1 + strne r0, [r6, #0x8] + ldreq r0, [r6, #0x8] + biceq r0, r0, #0x1 + streq r0, [r6, #0x8] +_020BAC18: + cmp r5, #0x3 + bne _020BAC38 + ldr r1, [r6, #0x8] + mov r0, r6 + bic r1, r1, #0x40 + str r1, [r6, #0x8] + ldr r1, [r6, #0x14] + blx r1 +_020BAC38: + ldr r0, [r6, #0x0] + add r0, r0, #0x3 + str r0, [r6, #0x0] + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BAC48 +FUN_020BAC48: ; 0x020BAC48 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r1, [r4, #0x10] + cmp r1, #0x0 + beq _020BAC60 + blx r1 +_020BAC60: + ldr r0, [r4, #0x8] + orr r0, r0, #0x20 + str r0, [r4, #0x8] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020BAC70 +FUN_020BAC70: ; 0x020BAC70 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r1, [r4, #0xc] + cmp r1, #0x0 + beq _020BAC88 + blx r1 +_020BAC88: + ldr r0, [r4, #0x0] + add r0, r0, #0x1 + str r0, [r4, #0x0] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020BAC98 +FUN_020BAC98: ; 0x020BAC98 + stmdb sp!, {r4,lr} + sub sp, sp, #0x188 + mov r4, r0 + ldr r0, [r4, #0x0] + and r0, r0, #0x10 + cmp r0, #0x10 + bne _020BAD2C + add r1, r4, #0x3c + mov r0, #0x0 + mov r2, #0x8 + bl MIi_CpuClear32 + add r1, r4, #0x44 + mov r0, #0x0 + mov r2, #0x8 + bl MIi_CpuClear32 + add r1, r4, #0x4c + mov r0, #0x0 + mov r2, #0x8 + bl MIi_CpuClear32 + ldr r1, [r4, #0x8] + cmp r1, #0x0 + beq _020BACF8 + add r0, r4, #0x3c + bl FUN_020BAD74 +_020BACF8: + ldr r1, [r4, #0x10] + cmp r1, #0x0 + beq _020BAD0C + add r0, r4, #0x44 + bl FUN_020BAD74 +_020BAD0C: + ldr r1, [r4, #0x18] + cmp r1, #0x0 + beq _020BAD20 + add r0, r4, #0x4c + bl FUN_020BAD74 +_020BAD20: + ldr r0, [r4, #0x0] + bic r0, r0, #0x10 + str r0, [r4, #0x0] +_020BAD2C: + ldr r2, _020BAD70 ; =0x021CEF7C + ldr r0, [r2, #0x0] + cmp r0, #0x0 + beq _020BAD4C + mov r1, r4 + bl FUN_020BADE4 + add sp, sp, #0x188 + ldmia sp!, {r4,pc} +_020BAD4C: + add r0, sp, #0x0 + mov r1, r4 + str r0, [r2, #0x0] + bl FUN_020BADE4 + ldr r0, _020BAD70 ; =0x021CEF7C + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x188 + ldmia sp!, {r4,pc} + .balign 4 +_020BAD70: .word 0x021CEF7C + + arm_func_start FUN_020BAD74 +FUN_020BAD74: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} +_020BAD88: ; 0x020BAD88 + mov r3, #0x1 + mov r4, #0x0 +_020BAD90: + ldrb r2, [r1, #0x19] + mov r5, r4 + cmp r2, #0x0 + ble _020BADD0 +_020BADA0: + add r2, r1, r5, lsl #0x1 + ldrh r2, [r2, #0x1a] + ands r2, r2, #0x100 + movne lr, r5, asr #0x5 + andne r2, r5, #0x1f + ldrne r12, [r0, lr, lsl #0x2] + add r5, r5, #0x1 + orrne r2, r12, r3, lsl r2 + strne r2, [r0, lr, lsl #0x2] + ldrb r2, [r1, #0x19] + cmp r5, r2 + blt _020BADA0 +_020BADD0: + ldr r1, [r1, #0x10] + cmp r1, #0x0 + bne _020BAD90 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020BADE4 +FUN_020BADE4: ; 0x020BADE4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r1, r5 + mov r0, #0x0 + mov r2, #0x188 + bl MIi_CpuClearFast + mov r0, #0x1 + str r0, [r5, #0xc4] + str r0, [r5, #0x8] + ldr r0, [r4, #0x30] + ldr r2, _020BAF60 ; =0x02106614 + cmp r0, #0x0 + strne r0, [r5, #0x0] + ldreq r1, [r4, #0x4] + ldreq r0, [r1, #0x4] + addeq r0, r1, r0 + streq r0, [r5, #0x0] + str r4, [r5, #0x4] + ldr r0, [r4, #0x4] + ldr r1, _020BAF64 ; =0x02106608 + add r0, r0, #0x40 + str r0, [r5, #0xd4] + ldr r12, [r4, #0x4] + ldr r0, _020BAF68 ; =0x02106620 + ldr r3, [r12, #0x8] + add r3, r12, r3 + str r3, [r5, #0xd8] + ldr r12, [r4, #0x4] + ldr r3, [r12, #0xc] + add r3, r12, r3 + str r3, [r5, #0xdc] + ldr r3, [r4, #0x4] + ldrb r3, [r3, #0x15] + ldr r2, [r2, r3, lsl #0x2] + str r2, [r5, #0xe8] + ldr r2, [r4, #0x4] + ldrb r2, [r2, #0x15] + ldr r1, [r1, r2, lsl #0x2] + str r1, [r5, #0xec] + ldr r1, [r4, #0x4] + ldrb r1, [r1, #0x16] + ldr r0, [r0, r1, lsl #0x2] + str r0, [r5, #0xf0] + ldr r0, [r4, #0x4] + ldr r0, [r0, #0x1c] + str r0, [r5, #0xe0] + ldr r0, [r4, #0x4] + ldr r0, [r0, #0x20] + str r0, [r5, #0xe4] + ldr r1, [r4, #0x20] + cmp r1, #0x0 + beq _020BAEE0 + ldrb r0, [r4, #0x24] + cmp r0, #0x20 + bhs _020BAEE0 + add r0, r5, r0, lsl #0x2 + str r1, [r0, #0xc] + ldrb r0, [r4, #0x24] + ldrb r1, [r4, #0x25] + add r0, r5, r0 + strb r1, [r0, #0x8c] +_020BAEE0: + ldr r0, [r4, #0x0] + ands r0, r0, #0x1 + ldrne r0, [r5, #0x8] + orrne r0, r0, #0x80 + strne r0, [r5, #0x8] + ldr r0, [r4, #0x0] + ands r0, r0, #0x2 + ldrne r0, [r5, #0x8] + orrne r0, r0, #0x100 + strne r0, [r5, #0x8] + ldr r0, [r4, #0x0] + ands r0, r0, #0x4 + ldrne r0, [r5, #0x8] + orrne r0, r0, #0x200 + strne r0, [r5, #0x8] + ldr r0, [r4, #0x0] + ands r0, r0, #0x8 + ldrne r0, [r5, #0x8] + orrne r0, r0, #0x400 + strne r0, [r5, #0x8] + ldr r1, [r4, #0x28] + cmp r1, #0x0 + beq _020BAF44 + mov r0, r5 + blx r1 +_020BAF44: + mov r0, r5 + bl FUN_020BAF6C +_020BAF4C: ; 0x020BAF4C + ldr r0, [r4, #0x0] + bic r0, r0, #0x1 + str r0, [r4, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020BAF60: .word 0x02106614 +_020BAF64: .word 0x02106608 +_020BAF68: .word 0x02106620 + + arm_func_start FUN_020BAF6C +FUN_020BAF6C: + stmdb sp!, {r4-r6,lr} + mov r5, r0 + ldr r6, _020BAFB4 ; =0x02106730 + add r4, r5, #0x8 +_020BAF7C: + ldr r1, [r4, #0x0] + mov r0, r5 + bic r1, r1, #0x40 + str r1, [r4, #0x0] + ldr r1, [r5, #0x0] + ldrb r3, [r1, #0x0] + and r1, r3, #0x1f + ldr r2, [r6, r1, lsl #0x2] + and r1, r3, #0xe0 + blx r2 + ldr r0, [r5, #0x8] + ands r0, r0, #0x20 + beq _020BAF7C + ldmia sp!, {r4-r6,pc} + .balign 4 +_020BAFB4: .word 0x02106730 + + arm_func_start FUN_020BAFB8 +FUN_020BAFB8: ; 0x020BAFB8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x6c + mov r6, r0 + ldr r12, [r6, #0x1c] + mov r4, r1 + mov r5, r2 + mov r7, r3 + cmp r12, #0x1000 + beq _020BAFF8 + add r1, sp, #0x54 + mov r0, #0x1b + mov r2, #0x3 + str r12, [sp, #0x54] + str r12, [sp, #0x58] + str r12, [sp, #0x5c] + bl FUN_020BB1C0 +_020BAFF8: + cmp r7, #0x0 + beq _020BB150 + ldr r0, [r6, #0x8] + add r3, r6, r0 + ldrh r0, [r3, #0xa] + add r2, r3, #0x4 + ldrh r1, [r2, r0] + add r0, r2, r0 + mla r0, r1, r4, r0 + ldr r0, [r0, #0x4] + add r4, r3, r0 + ldr r0, [r4, #0xc] + ands r0, r0, #0x1f0000 + addeq sp, sp, #0x6c + ldmeqia sp!, {r4-r7,pc} +_020BB034: ; 0x020BB034 + ldr r0, _020BB1B4 ; =0x00293130 + str r0, [sp, #0x0] + ldr r0, [r4, #0x4] + str r0, [sp, #0x4] + ldr r0, [r4, #0x8] + str r0, [sp, #0x8] + ldr r1, [r4, #0xc] + str r1, [sp, #0xc] + ldrh r0, [r4, #0x1e] + ands r0, r0, #0x20 + bicne r0, r1, #0x1f0000 + ldr r1, _020BB1B8 ; =0x00002B2A + strne r0, [sp, #0xc] + str r1, [sp, #0x10] + ldr r2, [r4, #0x14] + ldr r0, [sp, #0x0] + str r2, [sp, #0x14] + ldrh r3, [r4, #0x1c] + add r1, sp, #0x4 + mov r2, #0x6 + str r3, [sp, #0x18] + bl FUN_020BB1C0 + ldrh r0, [r4, #0x1e] + ands r0, r0, #0x1 + beq _020BB150 + ldrb r12, [r6, #0x16] + mov r3, #0x8 + ldr r1, _020BB1BC ; =0x02106620 + str r3, [sp, #0x1c] + ldrh r2, [r4, #0x20] + add r0, r4, #0x2c + ldr r1, [r1, r12, lsl #0x2] + strh r2, [sp, #0x48] + ldrh r2, [r4, #0x22] + strh r2, [sp, #0x4a] + ldr r2, [r4, #0x24] + str r2, [sp, #0x4c] + ldr r2, [r4, #0x28] + str r2, [sp, #0x50] + ldrh r2, [r4, #0x1e] + ands r2, r2, #0x2 + orrne r2, r3, #0x1 + strne r2, [sp, #0x1c] + bne _020BB0F8 + ldr r2, [r0, #0x0] + str r2, [sp, #0x34] + ldr r2, [r0, #0x4] + add r0, r0, #0x8 + str r2, [sp, #0x38] +_020BB0F8: + ldrh r2, [r4, #0x1e] + ands r2, r2, #0x4 + ldrne r2, [sp, #0x1c] + orrne r2, r2, #0x2 + strne r2, [sp, #0x1c] + bne _020BB124 + ldrsh r2, [r0, #0x0] + strh r2, [sp, #0x3c] + ldrsh r2, [r0, #0x2] + add r0, r0, #0x4 + strh r2, [sp, #0x3e] +_020BB124: + ldrh r2, [r4, #0x1e] + ands r2, r2, #0x8 + ldreq r2, [r0, #0x0] + streq r2, [sp, #0x40] + ldreq r0, [r0, #0x4] + streq r0, [sp, #0x44] + ldrne r0, [sp, #0x1c] + orrne r0, r0, #0x4 + strne r0, [sp, #0x1c] + add r0, sp, #0x1c + blx r1 +_020BB150: + ldr r0, [r6, #0xc] + add r2, r6, r0 + ldrh r0, [r2, #0x6] + ldrh r1, [r2, r0] + add r0, r2, r0 + mla r0, r1, r5, r0 + ldr r0, [r0, #0x4] + add r2, r2, r0 + ldr r0, [r2, #0x8] + ldr r1, [r2, #0xc] + add r0, r2, r0 + bl FUN_020BB2B0 + ldr r3, [r6, #0x20] + cmp r3, #0x1000 + addeq sp, sp, #0x6c + ldmeqia sp!, {r4-r7,pc} +_020BB190: ; 0x020BB190 + add r1, sp, #0x60 + mov r0, #0x1b + mov r2, #0x3 + str r3, [sp, #0x60] + str r3, [sp, #0x64] + str r3, [sp, #0x68] + bl FUN_020BB1C0 + add sp, sp, #0x6c + ldmia sp!, {r4-r7,pc} + .balign 4 +_020BB1B4: .word 0x00293130 +_020BB1B8: .word 0x00002B2A +_020BB1BC: .word 0x02106620 + + arm_func_start FUN_020BB1C0 +FUN_020BB1C0: + stmdb sp!, {r4-r6,lr} + ldr r3, _020BB2A4 ; =0x021D1C80 + mov r6, r0 + ldr r12, [r3, #0x0] + mov r5, r1 + mov r4, r2 + cmp r12, #0x0 + beq _020BB278 + ldr r0, _020BB2A8 ; =0x021D1C84 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020BB24C + ldr r2, [r12, #0x0] + add r0, r2, #0x1 + add r1, r0, r4 + cmp r1, #0xc0 + bhi _020BB24C + str r0, [r12, #0x0] + ldr r0, [r3, #0x0] + cmp r4, #0x0 + add r0, r0, r2, lsl #0x2 + str r6, [r0, #0x4] + ldmeqia sp!, {r4-r6,pc} +_020BB21C: ; 0x020BB21C + ldr r2, [r3, #0x0] + mov r0, r5 + ldr r1, [r2], #0x4 + add r1, r2, r1, lsl #0x2 + mov r2, r4, lsl #0x2 + bl MIi_CpuCopyFast + ldr r0, _020BB2A4 ; =0x021D1C80 + ldr r1, [r0, #0x0] + ldr r0, [r1, #0x0] + add r0, r0, r4 + str r0, [r1, #0x0] + ldmia sp!, {r4-r6,pc} +_020BB24C: + ldr r0, [r12, #0x0] + cmp r0, #0x0 + beq _020BB260 + bl FUN_020BB394 + b _020BB28C +_020BB260: + ldr r0, _020BB2A8 ; =0x021D1C84 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020BB28C + bl FUN_020BB37C + b _020BB28C +_020BB278: + ldr r0, _020BB2A8 ; =0x021D1C84 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020BB28C + bl FUN_020BB37C +_020BB28C: + ldr r1, _020BB2AC ; =0x04000400 + mov r0, r5 + mov r2, r4, lsl #0x2 + str r6, [r1, #0x0] + bl MIi_CpuSend32 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020BB2A4: .word 0x021D1C80 +_020BB2A8: .word 0x021D1C84 +_020BB2AC: .word 0x04000400 + + arm_func_start FUN_020BB2B0 +FUN_020BB2B0: ; 0x020BB2B0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r5, r0 + cmp r4, #0x100 + blo _020BB2DC + ldr r1, _020BB360 ; =0x02106814 + mvn r0, #0x0 + ldr r1, [r1, #0x0] + cmp r1, r0 + bne _020BB2F8 +_020BB2DC: + mov r2, r4, lsr #0x2 + ldr r0, [r5, #0x0] + add r1, r5, #0x4 + sub r2, r2, #0x1 + bl FUN_020BB1C0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} +_020BB2F8: + bl FUN_020BB394 + ldr r0, _020BB364 ; =0x021D1C88 + ldr r1, _020BB368 ; =0x021D1C84 + ldr r0, [r0, #0x0] + mov r2, #0x1 + str r2, [r1, #0x0] + cmp r0, #0x0 + beq _020BB33C + ldr r0, _020BB360 ; =0x02106814 + str r1, [sp, #0x0] + ldr r0, [r0, #0x0] + ldr r3, _020BB36C ; =FUN_020BB370 + mov r1, r5 + mov r2, r4 + bl MI_SendGXCommandAsyncFast + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} +_020BB33C: + ldr r0, _020BB360 ; =0x02106814 + str r1, [sp, #0x0] + ldr r0, [r0, #0x0] + ldr r3, _020BB36C ; =FUN_020BB370 + mov r1, r5 + mov r2, r4 + bl MI_SendGXCommandAsync + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020BB360: .word 0x02106814 +_020BB364: .word 0x021D1C88 +_020BB368: .word 0x021D1C84 +_020BB36C: .word FUN_020BB370 + + arm_func_start FUN_020BB370 +FUN_020BB370: ; 0x020BB370 + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + + arm_func_start FUN_020BB37C +FUN_020BB37C: ; 0x020BB37C + ldr r0, _020BB390 ; =0x021D1C84 +_020BB380: + ldr r1, [r0, #0x0] + cmp r1, #0x0 + bne _020BB380 + bx lr + .balign 4 +_020BB390: .word 0x021D1C84 + + arm_func_start FUN_020BB394 +FUN_020BB394: ; 0x020BB394 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020BB3FC ; =0x021D1C84 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020BB3B0 + bl FUN_020BB37C +_020BB3B0: + ldr r0, _020BB400 ; =0x021D1C80 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r2, [r0, #0x0] + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r1, _020BB404 ; =0x04000400 + add r0, r0, #0x4 + mov r2, r2, lsl #0x2 + bl MIi_CpuSend32 + ldr r0, _020BB400 ; =0x021D1C80 + mov r1, #0x0 + ldr r0, [r0, #0x0] + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020BB3FC: .word 0x021D1C84 +_020BB400: .word 0x021D1C80 +_020BB404: .word 0x04000400 + + arm_func_start FUN_020BB408 +FUN_020BB408: ; 0x020BB408 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x1c + mov r5, r1 + mov r4, r2 + ldr r6, _020BB594 ; =0x021CED20 + ldr r1, _020BB598 ; =0x021CED64 + add r2, sp, #0x10 + bl MTX_MultVec43 + ldr r1, [sp, #0x14] + ldr r0, [r6, #0x1c] + ldr r2, [sp, #0x10] + smull r8, r7, r1, r0 + ldr r0, [r6, #0xc] + ldr r3, [sp, #0x18] + smlal r8, r7, r2, r0 + ldr r1, [r6, #0x2c] + ldr r0, [r6, #0x3c] + smlal r8, r7, r3, r1 + mov r1, r8, lsr #0xc + orr r1, r1, r7, lsl #0x14 + add r0, r1, r0 + bl FX_InvAsync + ldr r2, [sp, #0x14] + ldr r1, [r6, #0x10] + ldr r0, [r6, #0x14] + smull lr, r8, r2, r1 + smull r12, r9, r2, r0 + ldr r1, [sp, #0x10] + ldr r3, [r6, #0x0] + ldr r0, [sp, #0x18] + smlal lr, r8, r1, r3 + ldr r7, [r6, #0x20] + ldr r2, [r6, #0x30] + smlal lr, r8, r0, r7 + mov r3, lr, lsr #0xc + orr r3, r3, r8, lsl #0x14 + add r7, r3, r2 + ldr r3, [r6, #0x4] + ldr r8, [r6, #0x24] + smlal r12, r9, r1, r3 + smlal r12, r9, r0, r8 + mov r0, r12, lsr #0xc + ldr r2, [r6, #0x34] + orr r0, r0, r9, lsl #0x14 + add r6, r0, r2 + bl FX_GetDivResultFx64c + mov r2, r7, asr #0x1f + umull r9, lr, r0, r7 + mla lr, r0, r2, lr + mov r3, #0x80000000 + mla lr, r1, r7, lr + adds r9, r9, r3 + adc r2, lr, #0x0 + add r2, r2, #0x1000 + add r2, r2, r2, lsr #0x1f + mov r7, r2, asr #0x1 + umull lr, r2, r0, r6 + mov r12, r6, asr #0x1f + mla r2, r0, r12, r2 + mla r2, r1, r6, r2 + adds r3, lr, r3 + adc r0, r2, #0x0 + add r0, r0, #0x1000 + add r0, r0, r0, lsr #0x1f + mov r8, #0x0 + mov r6, r0, asr #0x1 + cmp r7, #0x0 + blt _020BB530 + cmp r6, #0x0 + blt _020BB530 + cmp r7, #0x1000 + bgt _020BB530 + cmp r6, #0x1000 + ble _020BB534 +_020BB530: + mvn r8, #0x0 +_020BB534: + add r0, sp, #0x0 + add r1, sp, #0x4 + add r2, sp, #0x8 + add r3, sp, #0xc + bl FUN_020B8200 + ldr r2, [sp, #0x0] + ldr r0, [sp, #0x8] + ldr r12, [sp, #0xc] + sub r0, r0, r2 + mul r0, r7, r0 + add r1, r0, #0x800 + ldr r3, [sp, #0x4] + add r1, r2, r1, asr #0xc + sub r0, r12, r3 + mul r0, r6, r0 + str r1, [r5, #0x0] + ldr r1, [sp, #0x4] + add r0, r0, #0x800 + rsb r1, r1, #0xbf + sub r1, r1, r0, asr #0xc + mov r0, r8 + str r1, [r4, #0x0] + add sp, sp, #0x1c + ldmia sp!, {r4-r9,pc} + .balign 4 +_020BB594: .word 0x021CED20 +_020BB598: .word 0x021CED64 + + arm_func_start FUN_020BB59C +FUN_020BB59C: ; 0x020BB59C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r1, [r5, #0x0] + ldr r0, _020BB7C8 ; =0x30415642 + cmp r1, r0 + bhi _020BB5F4 + cmp r1, r0 + bhs _020BB7B0 + ldr r0, _020BB7CC ; =0x30414D42 + cmp r1, r0 + bhi _020BB5E4 + cmp r1, r0 + bhs _020BB7B0 + ldr r0, _020BB7D0 ; =0x30414342 + cmp r1, r0 + beq _020BB7B0 + b _020BB7BC +_020BB5E4: + ldr r0, _020BB7D4 ; =0x30415442 + cmp r1, r0 + beq _020BB7B0 + b _020BB7BC +_020BB5F4: + ldr r0, _020BB7D8 ; =0x30505442 + cmp r1, r0 + bhi _020BB618 + cmp r1, r0 + bhs _020BB7B0 + ldr r0, _020BB7DC ; =0x30444D42 + cmp r1, r0 + beq _020BB624 + b _020BB7BC +_020BB618: + ldr r0, _020BB7E0 ; =0x30585442 + cmp r1, r0 + bne _020BB7BC +_020BB624: + mov r11, #0x1 + mov r0, r5 + mov r9, r11 + mov r8, r11 + bl FUN_020BC0FC + movs r4, r0 + beq _020BB77C + bl FUN_020B7E1C + mov r7, r0 + mov r0, r4 + bl FUN_020B7E10 + mov r6, r0 + mov r0, r4 + bl FUN_020B7CE4 + mov r10, r0 + cmp r7, #0x0 + beq _020BB68C + ldr r0, _020BB7E4 ; =0x021064B8 + mov r1, #0x0 + ldr r3, [r0, #0x0] + mov r0, r7 + mov r2, r1 + blx r3 + movs r7, r0 + moveq r11, #0x0 + b _020BB690 +_020BB68C: + mov r7, #0x0 +_020BB690: + cmp r6, #0x0 + beq _020BB6BC + ldr r1, _020BB7E4 ; =0x021064B8 + mov r0, r6 + ldr r3, [r1, #0x0] + mov r1, #0x1 + mov r2, #0x0 + blx r3 + movs r6, r0 + moveq r9, #0x0 + b _020BB6C0 +_020BB6BC: + mov r6, #0x0 +_020BB6C0: + cmp r10, #0x0 + beq _020BB6F0 + ldr r1, _020BB7E8 ; =0x021064C0 + ldrh r2, [r4, #0x20] + ldr r3, [r1, #0x0] + mov r0, r10 + and r1, r2, #0x8000 + mov r2, #0x0 + blx r3 + movs r10, r0 + moveq r8, #0x0 + b _020BB6F4 +_020BB6F0: + mov r10, #0x0 +_020BB6F4: + cmp r11, #0x0 + beq _020BB70C + cmp r9, #0x0 + beq _020BB70C + cmp r8, #0x0 + bne _020BB748 +_020BB70C: + ldr r1, _020BB7EC ; =0x021064C4 + mov r0, r10 + ldr r1, [r1, #0x0] + blx r1 + ldr r1, _020BB7F0 ; =0x021064BC + mov r0, r6 + ldr r1, [r1, #0x0] + blx r1 + ldr r1, _020BB7F0 ; =0x021064BC + mov r0, r7 + ldr r1, [r1, #0x0] + blx r1 + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r11,pc} +_020BB748: + mov r0, r4 + mov r1, r7 + mov r2, r6 + bl FUN_020B7DFC + mov r0, r4 + mov r1, r10 + bl FUN_020B7CDC + mov r0, r4 + mov r1, #0x1 + bl FUN_020B7D28 + mov r0, r4 + mov r1, #0x1 + bl FUN_020B7C78 +_020BB77C: + ldr r1, [r5, #0x0] + ldr r0, _020BB7DC ; =0x30444D42 + cmp r1, r0 + bne _020BB7A4 + mov r0, r5 + bl FUN_020BC13C +_020BB794: ; 0x020BB794 + cmp r4, #0x0 + beq _020BB7A4 + mov r1, r4 + bl FUN_020B7790 +_020BB7A4: + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r11,pc} +_020BB7B0: + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r11,pc} +_020BB7BC: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020BB7C8: .word 0x30415642 +_020BB7CC: .word 0x30414D42 +_020BB7D0: .word 0x30414342 +_020BB7D4: .word 0x30415442 +_020BB7D8: .word 0x30505442 +_020BB7DC: .word 0x30444D42 +_020BB7E0: .word 0x30585442 +_020BB7E4: .word 0x021064B8 +_020BB7E8: .word 0x021064C0 +_020BB7EC: .word 0x021064C4 +_020BB7F0: .word 0x021064BC + + arm_func_start FUN_020BB7F4 +FUN_020BB7F4: ; 0x020BB7F4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl G3X_Init + bl FUN_020B84D8 + ldr r1, _020BB820 ; =0x04000600 + ldr r0, [r1, #0x0] + bic r0, r0, #0xc0000000 + orr r0, r0, #0x80000000 + str r0, [r1, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020BB820: .word 0x04000600 + + arm_func_start FUN_020BB824 +FUN_020BB824: ; 0x020BB824 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x40 + mov r6, r0 + mov r5, r1 + bl FUN_020BB394 + ldr r0, _020BB8B4 ; =0x04000440 + mov r2, #0x0 + ldr r1, _020BB8B8 ; =0x04000444 + str r2, [r0, #0x0] + ldr r0, _020BB8BC ; =0x04000454 + str r2, [r1, #0x0] + str r2, [r0, #0x0] + cmp r6, #0x0 + beq _020BB87C + add r4, sp, #0x0 +_020BB860: + mov r0, r4 + bl G3X_GetClipMtx +_020BB868: ; 0x020BB868 + cmp r0, #0x0 + bne _020BB860 + add r0, sp, #0x0 + mov r1, r6 + bl MTX_Copy44To43_ +_020BB87C: + cmp r5, #0x0 + beq _020BB894 +_020BB884: + mov r0, r5 + bl G3X_GetVectorMtx +_020BB88C: ; 0x020BB88C + cmp r0, #0x0 + bne _020BB884 +_020BB894: + ldr r1, _020BB8C0 ; =0x04000448 + mov r2, #0x1 + ldr r0, _020BB8B4 ; =0x04000440 + str r2, [r1, #0x0] + mov r1, #0x2 + str r1, [r0, #0x0] + add sp, sp, #0x40 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020BB8B4: .word 0x04000440 +_020BB8B8: .word 0x04000444 +_020BB8BC: .word 0x04000454 +_020BB8C0: .word 0x04000448 + + arm_func_start thunk_FUN_020ae84c +thunk_FUN_020ae84c: ; 0x020BB8C4 + ldr ip, _020BB8CC ; =FUN_020AE84C + bx r12 + .balign 4 +_020BB8CC: .word FUN_020AE84C + + arm_func_start FUN_020BB8D0 +FUN_020BB8D0: ; 0x020BB8D0 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, r1 + mov r1, r2 + bl FUN_020B81B0 + mov r1, r0 + mov r0, r4 + bl FUN_020AE868 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020BB8F4 +FUN_020BB8F4: ; 0x020BB8F4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BB910: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl FUN_020BBC74 + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BB910 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BB934 +FUN_020BB934: ; 0x020BB934 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BB950: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl FUN_020BBCB8 + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BB950 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BB974 +FUN_020BB974: ; 0x020BB974 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BB990: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl FUN_020BBCFC + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BB990 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BB9B4 +FUN_020BB9B4: ; 0x020BB9B4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BB9D0: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl FUN_020BBD40 + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BB9D0 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BB9F4 +FUN_020BB9F4: ; 0x020BB9F4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBA10: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl FUN_020BBD84 + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBA10 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BBA34 +FUN_020BBA34: ; 0x020BBA34 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBA50: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl FUN_020BBDC8 + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBA50 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BBA74 +FUN_020BBA74: ; 0x020BBA74 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBA90: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl FUN_020BBE0C + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBA90 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BBAB4 +FUN_020BBAB4: ; 0x020BBAB4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBAD0: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl FUN_020BBE50 + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBAD0 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BBAF4 +FUN_020BBAF4: ; 0x020BBAF4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBB10: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl FUN_020BBE94 + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBB10 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BBB34 +FUN_020BBB34: ; 0x020BBB34 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBB50: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl FUN_020BBED8 + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBB50 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BBB74 +FUN_020BBB74: ; 0x020BBB74 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBB90: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl FUN_020BBF1C + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBB90 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BBBB4 +FUN_020BBBB4: ; 0x020BBBB4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBBD0: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl FUN_020BBF60 + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBBD0 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BBBF4 +FUN_020BBBF4: ; 0x020BBBF4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBC10: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl FUN_020BBFA4 + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBC10 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BBC34 +FUN_020BBC34: ; 0x020BBC34 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBC50: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl FUN_020BBFE8 + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBC50 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BBC74 +FUN_020BBC74: ; 0x020BBC74 + ldr r3, [r0, #0x8] + cmp r2, #0x0 + add r12, r0, r3 + ldrh r0, [r12, #0xa] + add r3, r12, #0x4 + ldrh r2, [r3, r0] + add r0, r3, r0 + mla r0, r2, r1, r0 + ldr r0, [r0, #0x4] + add r1, r12, r0 + ldrne r0, [r1, #0xc] + orrne r0, r0, #0x800 + strne r0, [r1, #0xc] + ldreq r0, [r1, #0xc] + biceq r0, r0, #0x800 + streq r0, [r1, #0xc] + bx lr + + arm_func_start FUN_020BBCB8 +FUN_020BBCB8: ; 0x020BBCB8 + ldr r3, [r0, #0x8] + cmp r2, #0x0 + add r12, r0, r3 + ldrh r0, [r12, #0xa] + add r3, r12, #0x4 + ldrh r2, [r3, r0] + add r0, r3, r0 + mla r0, r2, r1, r0 + ldr r0, [r0, #0x4] + add r1, r12, r0 + ldrne r0, [r1, #0xc] + orrne r0, r0, #0x1000 + strne r0, [r1, #0xc] + ldreq r0, [r1, #0xc] + biceq r0, r0, #0x1000 + streq r0, [r1, #0xc] + bx lr + + arm_func_start FUN_020BBCFC +FUN_020BBCFC: ; 0x020BBCFC + ldr r3, [r0, #0x8] + cmp r2, #0x0 + add r12, r0, r3 + ldrh r0, [r12, #0xa] + add r3, r12, #0x4 + ldrh r2, [r3, r0] + add r0, r3, r0 + mla r0, r2, r1, r0 + ldr r0, [r0, #0x4] + add r1, r12, r0 + ldrne r0, [r1, #0xc] + orrne r0, r0, #0x2000 + strne r0, [r1, #0xc] + ldreq r0, [r1, #0xc] + biceq r0, r0, #0x2000 + streq r0, [r1, #0xc] + bx lr + + arm_func_start FUN_020BBD40 +FUN_020BBD40: ; 0x020BBD40 + ldr r3, [r0, #0x8] + cmp r2, #0x0 + add r12, r0, r3 + ldrh r0, [r12, #0xa] + add r3, r12, #0x4 + ldrh r2, [r3, r0] + add r0, r3, r0 + mla r0, r2, r1, r0 + ldr r0, [r0, #0x4] + add r1, r12, r0 + ldrne r0, [r1, #0xc] + orrne r0, r0, #0x4000 + strne r0, [r1, #0xc] + ldreq r0, [r1, #0xc] + biceq r0, r0, #0x4000 + streq r0, [r1, #0xc] + bx lr + + arm_func_start FUN_020BBD84 +FUN_020BBD84: ; 0x020BBD84 + ldr r3, [r0, #0x8] + cmp r2, #0x0 + add r12, r0, r3 + ldrh r0, [r12, #0xa] + add r3, r12, #0x4 + ldrh r2, [r3, r0] + add r0, r3, r0 + mla r0, r2, r1, r0 + ldr r0, [r0, #0x4] + add r1, r12, r0 + ldrne r0, [r1, #0xc] + orrne r0, r0, #0x8000 + strne r0, [r1, #0xc] + ldreq r0, [r1, #0xc] + biceq r0, r0, #0x8000 + streq r0, [r1, #0xc] + bx lr + + arm_func_start FUN_020BBDC8 +FUN_020BBDC8: ; 0x020BBDC8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, [r0, #0x8] + add lr, r0, r3 + ldrh r0, [lr, #0xa] + add r12, lr, #0x4 + ldrh r3, [r12, r0] + add r0, r12, r0 + mla r0, r3, r1, r0 + ldr r0, [r0, #0x4] + add r1, lr, r0 + ldr r0, [r1, #0xc] + bic r0, r0, #0x1f0000 + orr r0, r0, r2, lsl #0x10 + str r0, [r1, #0xc] + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020BBE0C +FUN_020BBE0C: ; 0x020BBE0C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, [r0, #0x8] + add lr, r0, r3 + ldrh r0, [lr, #0xa] + add r12, lr, #0x4 + ldrh r3, [r12, r0] + add r0, r12, r0 + mla r0, r3, r1, r0 + ldr r0, [r0, #0x4] + add r1, lr, r0 + ldr r0, [r1, #0xc] + bic r0, r0, #0x3f000000 + orr r0, r0, r2, lsl #0x18 + str r0, [r1, #0xc] + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020BBE50 +FUN_020BBE50: ; 0x020BBE50 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, [r0, #0x8] + add lr, r0, r3 + ldrh r0, [lr, #0xa] + add r12, lr, #0x4 + ldrh r3, [r12, r0] + add r0, r12, r0 + mla r0, r3, r1, r0 + ldr r0, [r0, #0x4] + add r1, lr, r0 + ldr r0, [r1, #0xc] + bic r0, r0, #0xc0 + orr r0, r0, r2, lsl #0x6 + str r0, [r1, #0xc] + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020BBE94 +FUN_020BBE94: ; 0x020BBE94 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, [r0, #0x8] + add lr, r0, r3 + ldrh r0, [lr, #0xa] + add r12, lr, #0x4 + ldrh r3, [r12, r0] + add r0, r12, r0 + mla r0, r3, r1, r0 + ldr r0, [r0, #0x4] + add r1, lr, r0 + ldr r0, [r1, #0xc] + bic r0, r0, #0x30 + orr r0, r0, r2, lsl #0x4 + str r0, [r1, #0xc] + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020BBED8 +FUN_020BBED8: ; 0x020BBED8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, [r0, #0x8] + add lr, r0, r3 + ldrh r0, [lr, #0xa] + add r12, lr, #0x4 + ldrh r3, [r12, r0] + add r0, r12, r0 + mla r0, r3, r1, r0 + ldr r0, [r0, #0x4] + add r1, lr, r0 + ldr r0, [r1, #0xc] + bic r0, r0, #0xf + orr r0, r0, r2 + str r0, [r1, #0xc] + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020BBF1C +FUN_020BBF1C: ; 0x020BBF1C + stmdb sp!, {r4,lr} + ldr r12, [r0, #0x8] + ldr r3, _020BBF5C ; =0x8000FFFF + add r4, r0, r12 + ldrh r0, [r4, #0xa] + add lr, r4, #0x4 + ldrh r12, [lr, r0] + add r0, lr, r0 + mla r0, r12, r1, r0 + ldr r0, [r0, #0x4] + add r1, r4, r0 + ldr r0, [r1, #0x8] + and r0, r0, r3 + orr r0, r0, r2, lsl #0x10 + str r0, [r1, #0x8] + ldmia sp!, {r4,pc} + .balign 4 +_020BBF5C: .word 0x8000FFFF + + arm_func_start FUN_020BBF60 +FUN_020BBF60: ; 0x020BBF60 + stmdb sp!, {r4,lr} + ldr r12, [r0, #0x8] + mov r3, #0x8000 + add r4, r0, r12 + ldrh r12, [r4, #0xa] + add lr, r4, #0x4 + rsb r0, r3, #0x0 + ldrh r3, [lr, r12] + add r12, lr, r12 + mla r1, r3, r1, r12 + ldr r1, [r1, #0x4] + add r3, r4, r1 + ldr r1, [r3, #0x8] + and r0, r1, r0 + orr r0, r0, r2 + str r0, [r3, #0x8] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020BBFA4 +FUN_020BBFA4: ; 0x020BBFA4 + stmdb sp!, {r4,lr} + ldr r12, [r0, #0x8] + ldr r3, _020BBFE4 ; =0x8000FFFF + add r4, r0, r12 + ldrh r0, [r4, #0xa] + add lr, r4, #0x4 + ldrh r12, [lr, r0] + add r0, lr, r0 + mla r0, r12, r1, r0 + ldr r0, [r0, #0x4] + add r1, r4, r0 + ldr r0, [r1, #0x4] + and r0, r0, r3 + orr r0, r0, r2, lsl #0x10 + str r0, [r1, #0x4] + ldmia sp!, {r4,pc} + .balign 4 +_020BBFE4: .word 0x8000FFFF + + arm_func_start FUN_020BBFE8 +FUN_020BBFE8: ; 0x020BBFE8 + stmdb sp!, {r4,lr} + ldr r12, [r0, #0x8] + mov r3, #0x8000 + add r4, r0, r12 + ldrh r12, [r4, #0xa] + add lr, r4, #0x4 + rsb r0, r3, #0x0 + ldrh r3, [lr, r12] + add r12, lr, r12 + mla r1, r3, r1, r12 + ldr r1, [r1, #0x4] + add r3, r4, r1 + ldr r1, [r3, #0x4] + and r0, r1, r0 + orr r0, r0, r2 + str r0, [r3, #0x4] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020BC02C +FUN_020BC02C: ; 0x020BC02C + stmdb sp!, {r4-r6,lr} + ldrb r4, [r0, #0x18] + ldr r3, [r0, #0x8] + mov lr, #0x0 + cmp r4, #0x0 + add r12, r0, r3 + ldmlsia sp!, {r4-r6,pc} +_020BC048: ; 0x020BC048 + mvn r3, r2 + add r0, r12, #0x4 +_020BC050: + ldrh r5, [r12, #0xa] + cmp r1, #0x0 + ldrh r6, [r0, r5] + add r5, r0, r5 + mla r5, r6, lr, r5 + ldr r5, [r5, #0x4] + add lr, lr, #0x1 + add r6, r12, r5 + ldrne r5, [r6, #0x10] + orrne r5, r5, r2 + strne r5, [r6, #0x10] + ldreq r5, [r6, #0x10] + andeq r5, r5, r3 + streq r5, [r6, #0x10] + cmp lr, r4 + blo _020BC050 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BC094 +FUN_020BC094: ; 0x020BC094 + stmdb sp!, {r4-r6,lr} + ldrb r4, [r0, #0x18] + ldr r3, [r0, #0x8] + mov lr, #0x0 + cmp r4, #0x0 + add r12, r0, r3 + ldmlsia sp!, {r4-r6,pc} +_020BC0B0: ; 0x020BC0B0 + mvn r3, r2 + add r0, r12, #0x4 +_020BC0B8: + ldrh r5, [r12, #0xa] + cmp r1, #0x0 + ldrh r6, [r0, r5] + add r5, r0, r5 + mla r5, r6, lr, r5 + ldr r5, [r5, #0x4] + add lr, lr, #0x1 + add r6, r12, r5 + ldrneh r5, [r6, #0x1e] + orrne r5, r5, r2 + strneh r5, [r6, #0x1e] + ldreqh r5, [r6, #0x1e] + andeq r5, r5, r3 + streqh r5, [r6, #0x1e] + cmp lr, r4 + blo _020BC0B8 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BC0FC +FUN_020BC0FC: ; 0x020BC0FC + ldrh r2, [r0, #0xc] + ldrh r1, [r0, #0xe] + add r3, r0, r2 + cmp r1, #0x1 + bne _020BC12C + ldr r2, [r0, #0x0] + ldr r1, _020BC138 ; =0x30585442 + cmp r2, r1 + ldreq r1, [r3, #0x0] + addeq r0, r0, r1 + movne r0, #0x0 + bx lr +_020BC12C: + ldr r1, [r3, #0x4] + add r0, r0, r1 + bx lr + .balign 4 +_020BC138: .word 0x30585442 + + arm_func_start FUN_020BC13C +FUN_020BC13C: + ldrh r1, [r0, #0xc] + ldr r1, [r0, r1] + add r0, r0, r1 + bx lr + + arm_func_start FUN_020BC14C +FUN_020BC14C: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldrb r2, [r0, #0x1] + cmp r2, #0x10 + bhs _020BC1E4 + cmp r2, #0x0 + ldr lr, [r1, #0x0] + ldr r12, [r1, #0x4] + ldr r3, [r1, #0x8] + ldr r2, [r1, #0xc] + mov r4, #0x0 + bls _020BC294 + ldrh r5, [r0, #0x6] + mov r1, r4 + add r6, r0, r5 + ldrh r5, [r6, #0x2] + add r6, r6, r5 +_020BC190: + ldr r5, [r6, r1] + add r7, r6, r1 + cmp r5, lr + bne _020BC1CC + ldr r5, [r7, #0x4] + cmp r5, r12 + bne _020BC1CC + ldr r5, [r7, #0x8] + cmp r5, r3 + bne _020BC1CC + ldr r5, [r7, #0xc] + cmp r5, r2 + addeq sp, sp, #0x4 + moveq r0, r4 + ldmeqia sp!, {r4-r7,pc} +_020BC1CC: + ldrb r5, [r0, #0x1] + add r4, r4, #0x1 + add r1, r1, #0x10 + cmp r4, r5 + blo _020BC190 + b _020BC294 +_020BC1E4: + add r3, r0, #0x8 + ldrb r2, [r3, #0x1] + cmp r2, #0x0 + beq _020BC294 + ldrb r5, [r3, r2, lsl #0x2] + ldrb r4, [r3, #0x0] + add r2, r3, r2, lsl #0x2 + cmp r4, r5 + bls _020BC238 +_020BC208: + mov r4, r5, asr #0x5 + ldr r12, [r1, r4, lsl #0x2] + and r4, r5, #0x1f + mov r4, r12, lsr r4 + and r4, r4, #0x1 + add r4, r2, r4 + ldrb r12, [r4, #0x1] + ldrb r4, [r2, #0x0] + ldrb r5, [r3, r12, lsl #0x2] + add r2, r3, r12, lsl #0x2 + cmp r4, r5 + bhi _020BC208 +_020BC238: + ldrh r4, [r0, #0x6] + ldr r3, [r1, #0x0] + add r12, r0, r4 + ldrh r4, [r12, #0x2] + ldrb r0, [r2, #0x3] + add r4, r12, r4 + ldr r2, [r4, r0, lsl #0x4] + add r4, r4, r0, lsl #0x4 + cmp r2, r3 + bne _020BC294 + ldr r3, [r4, #0x4] + ldr r2, [r1, #0x4] + cmp r3, r2 + bne _020BC294 + ldr r3, [r4, #0x8] + ldr r2, [r1, #0x8] + cmp r3, r2 + bne _020BC294 + ldr r2, [r4, #0xc] + ldr r1, [r1, #0xc] + cmp r2, r1 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} +_020BC294: + mvn r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020BC2A0 +FUN_020BC2A0: ; 0x020BC2A0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldrb r2, [r0, #0x1] + cmp r2, #0x10 + bhs _020BC34C + cmp r2, #0x0 + ldr lr, [r1, #0x0] + ldr r12, [r1, #0x4] + ldr r3, [r1, #0x8] + ldr r2, [r1, #0xc] + mov r4, #0x0 + bls _020BC404 + ldrh r5, [r0, #0x6] + mov r1, r4 + add r6, r0, r5 + ldrh r5, [r6, #0x2] + add r6, r6, r5 +_020BC2E4: + ldr r5, [r6, r1] + add r7, r6, r1 + cmp r5, lr + bne _020BC334 + ldr r5, [r7, #0x4] + cmp r5, r12 + bne _020BC334 + ldr r5, [r7, #0x8] + cmp r5, r3 + bne _020BC334 + ldr r5, [r7, #0xc] + cmp r5, r2 + bne _020BC334 + ldrh r2, [r0, #0x6] + add sp, sp, #0x4 + ldrh r1, [r0, r2] + add r0, r0, r2 + add r0, r0, #0x4 + mla r0, r1, r4, r0 + ldmia sp!, {r4-r7,pc} +_020BC334: + ldrb r5, [r0, #0x1] + add r4, r4, #0x1 + add r1, r1, #0x10 + cmp r4, r5 + blo _020BC2E4 + b _020BC404 +_020BC34C: + add r3, r0, #0x8 + ldrb r2, [r3, #0x1] + cmp r2, #0x0 + beq _020BC404 + ldrb r5, [r3, r2, lsl #0x2] + ldrb r4, [r3, #0x0] + add r2, r3, r2, lsl #0x2 + cmp r4, r5 + bls _020BC3A0 +_020BC370: + mov r4, r5, asr #0x5 + ldr r12, [r1, r4, lsl #0x2] + and r4, r5, #0x1f + mov r4, r12, lsr r4 + and r4, r4, #0x1 + add r4, r2, r4 + ldrb r12, [r4, #0x1] + ldrb r4, [r2, #0x0] + ldrb r5, [r3, r12, lsl #0x2] + add r2, r3, r12, lsl #0x2 + cmp r4, r5 + bhi _020BC370 +_020BC3A0: + ldrh r4, [r0, #0x6] + ldrb r2, [r2, #0x3] + ldr r3, [r1, #0x0] + add r0, r0, r4 + ldrh r4, [r0, #0x2] + add r12, r0, r4 + ldr r4, [r12, r2, lsl #0x4] + add r12, r12, r2, lsl #0x4 + cmp r4, r3 + bne _020BC404 + ldr r4, [r12, #0x4] + ldr r3, [r1, #0x4] + cmp r4, r3 + bne _020BC404 + ldr r4, [r12, #0x8] + ldr r3, [r1, #0x8] + cmp r4, r3 + bne _020BC404 + ldr r3, [r12, #0xc] + ldr r1, [r1, #0xc] + cmp r3, r1 + ldreqh r1, [r0], #0x4 + addeq sp, sp, #0x4 + mlaeq r0, r1, r2, r0 + ldmeqia sp!, {r4-r7,pc} +_020BC404: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020BC410 +FUN_020BC410: ; 0x020BC410 + ldrh r3, [r0, #0x12] + add r0, r0, #0xc + ldrh r2, [r0, r3] + add r0, r0, r3 + add r0, r0, #0x4 + mla r0, r2, r1, r0 + bx lr + + arm_func_start FUN_020BC42C +FUN_020BC42C: ; 0x020BC42C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r2 + bl FUN_020BC410 + ldrsh r1, [r0, #0x4] + ldrh r3, [r0, #0x6] + mul r2, r1, r4 + add r3, r5, r3 + mov r2, r2, lsr #0xc + b _020BC45C +_020BC458: + sub r2, r2, #0x1 +_020BC45C: + cmp r2, #0x0 + beq _020BC474 + mov r1, r2, lsl #0x2 + ldrh r1, [r3, r1] + cmp r1, r4 + bhs _020BC458 +_020BC474: + ldrh r1, [r0, #0x0] + b _020BC480 +_020BC47C: + add r2, r2, #0x1 +_020BC480: + add r0, r2, #0x1 + cmp r0, r1 + bhs _020BC49C + add r0, r3, r2, lsl #0x2 + ldrh r0, [r0, #0x4] + cmp r0, r4 + bls _020BC47C +_020BC49C: + add r0, r3, r2, lsl #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020BC4A8 +FUN_020BC4A8: ; 0x020BC4A8 + ldrh r2, [r0, #0xa] + add r0, r0, r2 + add r0, r0, r1, lsl #0x4 + bx lr + + arm_func_start FUN_020BC4B8 +FUN_020BC4B8: ; 0x020BC4B8 + ldrh r2, [r0, #0x8] + add r0, r0, r2 + add r0, r0, r1, lsl #0x4 + bx lr + + arm_func_start FUN_020BC4C8 +FUN_020BC4C8: ; 0x020BC4C8 + ldrh r2, [r0, #0xc] + ldr r2, [r0, r2] + add r12, r0, r2 + ldrh r2, [r12, #0xe] + add r3, r12, #0x8 + ldrh r0, [r3, r2] + add r2, r3, r2 + add r2, r2, #0x4 + mul r1, r0, r1 + adds r0, r2, r1 + ldrne r0, [r0, #0x0] + addne r0, r12, r0 + moveq r0, #0x0 + bx lr + + arm_func_start FUN_020BC500 +FUN_020BC500: + stmdb sp!, {r4,lr} + ands r4, r3, #0x8000 + beq _020BC5E0 + mov r2, #0x0 + str r2, [r0, #0x20] + ldr r4, [r0, #0x20] + ldr r2, _020BC684 ; =0x00007FFF + str r4, [r0, #0x1c] + ldr r4, [r0, #0x1c] + and r3, r3, r2 + str r4, [r0, #0x18] + ldr r4, [r0, #0x18] + mov r2, #0x3 + str r4, [r0, #0x14] + ldr r4, [r0, #0x14] + mul r2, r3, r2 + str r4, [r0, #0x10] + ldr r4, [r0, #0x10] + mov r3, r2, lsl #0x1 + str r4, [r0, #0xc] + ldr r4, [r0, #0xc] + add r2, r1, r2, lsl #0x1 + str r4, [r0, #0x8] + ldr r4, [r0, #0x8] + str r4, [r0, #0x4] + ldr r4, [r0, #0x4] + str r4, [r0, #0x0] + ldrsh r4, [r1, r3] + ldrsh r12, [r2, #0x2] + ldrsh r3, [r2, #0x4] + and r1, r4, #0xf + ands r4, r4, #0x10 + movne lr, #0x1000 + rsbne lr, lr, #0x0 + moveq lr, #0x1000 + str lr, [r0, r1, lsl #0x2] + ldr r4, _020BC688 ; =0x020FFA14 + ldr lr, _020BC68C ; =0x020FFA15 + ldrb r4, [r4, r1, lsl #0x2] + str r12, [r0, r4, lsl #0x2] + ldrb lr, [lr, r1, lsl #0x2] + str r3, [r0, lr, lsl #0x2] + ldrsh lr, [r2, #0x0] + ands lr, lr, #0x20 + ldr lr, _020BC690 ; =0x020FFA16 + rsbne r3, r3, #0x0 + ldrb lr, [lr, r1, lsl #0x2] + str r3, [r0, lr, lsl #0x2] + ldrsh r2, [r2, #0x0] + ands r2, r2, #0x40 + ldr r2, _020BC694 ; =0x020FFA17 + rsbne r12, r12, #0x0 + ldrb r1, [r2, r1, lsl #0x2] + str r12, [r0, r1, lsl #0x2] + mov r0, #0x0 + ldmia sp!, {r4,pc} +_020BC5E0: + ldr r1, _020BC684 ; =0x00007FFF + mov r12, #0x5 + and r1, r3, r1 + mul r3, r1, r12 + add r1, r2, r3, lsl #0x1 + ldrsh lr, [r1, #0x8] + mov r12, r3, lsl #0x1 + mov r3, lr, asr #0x3 + str r3, [r0, #0x10] + ldrsh r12, [r2, r12] + and r2, lr, #0x7 + mov r2, r2, lsl #0x10 + mov r3, r12, asr #0x3 + str r3, [r0, #0x0] + ldrsh r3, [r1, #0x2] + and r12, r12, #0x7 + orr lr, r12, r2, asr #0xd + mov r2, r3, asr #0x3 + str r2, [r0, #0x4] + ldrsh r12, [r1, #0x4] + mov r2, lr, lsl #0x10 + and lr, r3, #0x7 + mov r3, r12, asr #0x3 + str r3, [r0, #0x8] + ldrsh r3, [r1, #0x6] + orr r1, lr, r2, asr #0xd + mov r1, r1, lsl #0x10 + and r2, r12, #0x7 + orr r1, r2, r1, asr #0xd + mov r1, r1, lsl #0x10 + and r2, r3, #0x7 + orr r1, r2, r1, asr #0xd + mov r1, r1, lsl #0x10 + mov r1, r1, asr #0x10 + mov r2, r3, asr #0x3 + mov r1, r1, lsl #0x13 + str r2, [r0, #0xc] + mov r1, r1, asr #0x13 + str r1, [r0, #0x14] + mov r0, #0x1 + ldmia sp!, {r4,pc} + .balign 4 +_020BC684: .word 0x00007FFF +_020BC688: .word 0x020FFA14 +_020BC68C: .word 0x020FFA15 +_020BC690: .word 0x020FFA16 +_020BC694: .word 0x020FFA17 + + arm_func_start FUN_020BC698 +FUN_020BC698: ; 0x020BC698 + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x48 + ldrh r4, [r3, #0x4] + ldr r5, [r3, #0xc] + ldr r8, [r3, #0x10] + ldr r7, [r2, #0x4] + mov r12, r1, asr #0xc + sub r4, r4, #0x1 + mov r6, r0 + cmp r12, r4 + add r5, r3, r5 + add r4, r3, r8 + add r8, r3, r7 + ldr r7, [r2, #0x0] + bne _020BC780 + ands r0, r7, #0xc0000000 + beq _020BC6F0 + ands r0, r7, #0x40000000 + andne r0, r12, #0x1 + addne r12, r0, r12, lsr #0x1 + andeq r0, r12, #0x3 + addeq r12, r0, r12, lsr #0x2 +_020BC6F0: + ldr r0, [r3, #0x8] + ands r0, r0, #0x2 + movne r7, #0x0 + bne _020BC7F4 + mov r0, r12, lsl #0x1 + ldrh r3, [r8, r0] + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_020BC500 +_020BC718: ; 0x020BC718 + cmp r0, #0x0 + addeq sp, sp, #0x48 + ldmeqia sp!, {r4-r10,pc} +_020BC724: ; 0x020BC724 + ldr r9, [r6, #0x14] + ldr r5, [r6, #0x4] + ldr r4, [r6, #0x10] + ldr r2, [r6, #0x8] + mul r1, r5, r9 + mul r0, r2, r4 + sub r0, r1, r0 + ldr r7, [r6, #0xc] + ldr r8, [r6, #0x0] + mov r3, r0, asr #0xc + mul r1, r2, r7 + mul r0, r8, r9 + sub r2, r1, r0 + mul r1, r8, r4 + mul r0, r5, r7 + sub r0, r1, r0 + str r3, [r6, #0x18] + mov r1, r2, asr #0xc + str r1, [r6, #0x1c] + mov r0, r0, asr #0xc + add sp, sp, #0x48 + str r0, [r6, #0x20] + ldmia sp!, {r4-r10,pc} +_020BC780: + ands r0, r7, #0xc0000000 + beq _020BC7F0 + ldr r0, _020BC9C4 ; =0x1FFF0000 + ands r2, r7, #0x40000000 + and r0, r7, r0 + mov r0, r0, lsr #0x10 + beq _020BC7C4 + cmp r12, r0 + movcs r12, r0, lsr #0x1 + addcs r7, r12, #0x1 + bhs _020BC7F4 + ldr r0, _020BC9C8 ; =0x00001FFF + mov r12, r12, lsr #0x1 + add r7, r12, #0x1 + and r10, r1, r0 + mov r9, #0x2 + b _020BC800 +_020BC7C4: + cmp r12, r0 + andcs r0, r12, #0x3 + addcs r12, r0, r12, lsr #0x2 + addcs r7, r12, #0x1 + bhs _020BC7F4 + ldr r0, _020BC9CC ; =0x00003FFF + mov r12, r12, lsr #0x2 + add r7, r12, #0x1 + and r10, r1, r0 + mov r9, #0x4 + b _020BC800 +_020BC7F0: + add r7, r12, #0x1 +_020BC7F4: + ldr r0, _020BC9D0 ; =0x00000FFF + mov r9, #0x1 + and r10, r1, r0 +_020BC800: + mov r0, r12, lsl #0x1 + ldrh r3, [r8, r0] + add r0, sp, #0x0 + mov r1, r5 + mov r2, r4 + bl FUN_020BC500 + mov r1, r7, lsl #0x1 + ldrh r3, [r8, r1] + orr r7, r0, #0x0 + add r0, sp, #0x24 + mov r1, r5 + mov r2, r4 + bl FUN_020BC500 + ldr r3, [sp, #0x0] + ldr r1, [sp, #0x24] + mul r2, r3, r9 + sub r1, r1, r3 + mul r1, r10, r1 + add r1, r2, r1, asr #0xc + str r1, [r6, #0x0] + ldr r3, [sp, #0x4] + ldr r1, [sp, #0x28] + mul r2, r3, r9 + sub r1, r1, r3 + mul r1, r10, r1 + add r1, r2, r1, asr #0xc + str r1, [r6, #0x4] + ldr r3, [sp, #0x8] + ldr r1, [sp, #0x2c] + mul r2, r3, r9 + sub r1, r1, r3 + mul r1, r10, r1 + add r1, r2, r1, asr #0xc + str r1, [r6, #0x8] + ldr r3, [sp, #0xc] + ldr r1, [sp, #0x30] + mul r2, r3, r9 + sub r1, r1, r3 + mul r1, r10, r1 + add r1, r2, r1, asr #0xc + str r1, [r6, #0xc] + ldr r2, [sp, #0x10] + ldr r1, [sp, #0x34] + orr r7, r7, r0 + sub r0, r1, r2 + mul r1, r2, r9 + mul r0, r10, r0 + add r0, r1, r0, asr #0xc + str r0, [r6, #0x10] + ldr r2, [sp, #0x14] + ldr r0, [sp, #0x38] + mul r1, r2, r9 + sub r0, r0, r2 + mul r0, r10, r0 + add r2, r1, r0, asr #0xc + mov r0, r6 + mov r1, r6 + str r2, [r6, #0x14] + bl VEC_Normalize + add r0, r6, #0xc + mov r1, r0 + bl VEC_Normalize +_020BC8F8: ; 0x020BC8F8 + cmp r7, #0x0 + bne _020BC968 + ldr r3, [sp, #0x18] + ldr r1, [sp, #0x3c] + mul r2, r3, r9 + sub r1, r1, r3 + mul r1, r10, r1 + add r1, r2, r1, asr #0xc + str r1, [r6, #0x18] + ldr r3, [sp, #0x1c] + ldr r1, [sp, #0x40] + mul r2, r3, r9 + sub r1, r1, r3 + mul r1, r10, r1 + add r1, r2, r1, asr #0xc + str r1, [r6, #0x1c] + ldr r3, [sp, #0x20] + ldr r1, [sp, #0x44] + mul r2, r3, r9 + sub r1, r1, r3 + mul r1, r10, r1 + add r2, r2, r1, asr #0xc + add r0, r6, #0x18 + mov r1, r0 + str r2, [r6, #0x20] + bl VEC_Normalize + add sp, sp, #0x48 + ldmia sp!, {r4-r10,pc} +_020BC968: + ldr r9, [r6, #0x14] + ldr r5, [r6, #0x4] + ldr r8, [r6, #0x0] + ldr r4, [r6, #0x10] + ldr r2, [r6, #0x8] + ldr r7, [r6, #0xc] + mul r1, r5, r9 + mul r0, r2, r4 + sub r0, r1, r0 + mov r3, r0, asr #0xc + mul r1, r2, r7 + mul r0, r8, r9 + sub r2, r1, r0 + mul r1, r8, r4 + mul r0, r5, r7 + sub r0, r1, r0 + str r3, [r6, #0x18] + mov r1, r2, asr #0xc + str r1, [r6, #0x1c] + mov r0, r0, asr #0xc + str r0, [r6, #0x20] + add sp, sp, #0x48 + ldmia sp!, {r4-r10,pc} + .balign 4 +_020BC9C4: .word 0x1FFF0000 +_020BC9C8: .word 0x00001FFF +_020BC9CC: .word 0x00003FFF +_020BC9D0: .word 0x00000FFF + + arm_func_start FUN_020BC9D4 +FUN_020BC9D4: ; 0x020BC9D4 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4c + ldr r5, [r3, #0xc] + ldr r4, [r3, #0x10] + ldr r12, [r2, #0x0] + ldr r2, [r2, #0x4] + mov r6, r0 + mov r0, r1, asr #0xc + add r5, r3, r5 + add r4, r3, r4 + add r8, r3, r2 + ands r1, r12, #0xc0000000 + beq _020BCD40 + ldr r1, _020BCDC0 ; =0x1FFF0000 + ands r2, r12, #0x40000000 + and r1, r12, r1 + mov r2, r1, lsr #0x10 + beq _020BCA44 + ands r1, r0, #0x1 + beq _020BCA3C + cmp r0, r2 + movhi r0, r2, lsr #0x1 + addhi r0, r0, #0x1 + bhi _020BCD40 + mov r7, r0, lsr #0x1 + b _020BCBE8 +_020BCA3C: + mov r0, r0, lsr #0x1 + b _020BCD40 +_020BCA44: + ands r1, r0, #0x3 + beq _020BCBE0 + cmp r0, r2 + addhi r0, r1, r2, lsr #0x2 + bhi _020BCD40 + ands r1, r0, #0x1 + beq _020BCBD8 + ands r1, r0, #0x2 + movne r9, r0, lsr #0x2 + addne r0, r9, #0x1 + moveq r0, r0, lsr #0x2 + addeq r9, r0, #0x1 + mov r0, r0, lsl #0x1 + ldrh r3, [r8, r0] + mov r0, r6 + mov r1, r5 + mov r2, r4 + mov r7, #0x0 + bl FUN_020BC500 + mov r1, r9, lsl #0x1 + ldrh r3, [r8, r1] + orr r7, r7, r0 + add r0, sp, #0x0 + mov r1, r5 + mov r2, r4 + bl FUN_020BC500 + ldr r3, [sp, #0x0] + ldr r1, [r6, #0x0] + mov r2, #0x3 + mla r3, r1, r2, r3 + str r3, [r6, #0x0] + ldr r3, [sp, #0x4] + ldr r1, [r6, #0x4] + orr r7, r7, r0 + mla r0, r1, r2, r3 + str r0, [r6, #0x4] + ldr r3, [sp, #0x8] + ldr r1, [r6, #0x8] + mov r0, r6 + mla r3, r1, r2, r3 + str r3, [r6, #0x8] + ldr r4, [sp, #0xc] + ldr r3, [r6, #0xc] + mov r1, r6 + mla r4, r3, r2, r4 + str r4, [r6, #0xc] + ldr r4, [sp, #0x10] + ldr r3, [r6, #0x10] + mla r4, r3, r2, r4 + str r4, [r6, #0x10] + ldr r4, [sp, #0x14] + ldr r3, [r6, #0x14] + mla r2, r3, r2, r4 + str r2, [r6, #0x14] + bl VEC_Normalize + add r0, r6, #0xc + mov r1, r0 + bl VEC_Normalize +_020BCB2C: ; 0x020BCB2C + cmp r7, #0x0 + bne _020BCB7C + ldr r1, [sp, #0x18] + ldr r0, [r6, #0x18] + mov r2, #0x3 + mla r1, r0, r2, r1 + str r1, [r6, #0x18] + ldr r3, [sp, #0x1c] + ldr r1, [r6, #0x1c] + add r0, r6, #0x18 + mla r3, r1, r2, r3 + str r3, [r6, #0x1c] + ldr r4, [sp, #0x20] + ldr r3, [r6, #0x20] + mov r1, r0 + mla r2, r3, r2, r4 + str r2, [r6, #0x20] + bl VEC_Normalize + add sp, sp, #0x4c + ldmia sp!, {r4-r9,pc} +_020BCB7C: + ldr r12, [r6, #0x14] + ldr r5, [r6, #0x4] + ldr r4, [r6, #0x10] + ldr r2, [r6, #0x8] + mul r1, r5, r12 + mul r0, r2, r4 + sub r0, r1, r0 + ldr r7, [r6, #0xc] + ldr r8, [r6, #0x0] + mov r3, r0, asr #0xc + mul r1, r2, r7 + mul r0, r8, r12 + sub r2, r1, r0 + mul r1, r8, r4 + mul r0, r5, r7 + sub r0, r1, r0 + str r3, [r6, #0x18] + mov r1, r2, asr #0xc + str r1, [r6, #0x1c] + mov r0, r0, asr #0xc + add sp, sp, #0x4c + str r0, [r6, #0x20] + ldmia sp!, {r4-r9,pc} +_020BCBD8: + mov r7, r0, lsr #0x2 + b _020BCBE8 +_020BCBE0: + mov r0, r0, lsr #0x2 + b _020BCD40 +_020BCBE8: + mov r0, r7, lsl #0x1 + ldrh r3, [r8, r0] + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_020BC500 + add r1, r8, r7, lsl #0x1 + ldrh r3, [r1, #0x2] + orr r7, r0, #0x0 + add r0, sp, #0x24 + mov r1, r5 + mov r2, r4 + bl FUN_020BC500 + ldr r2, [r6, #0x0] + ldr r1, [sp, #0x24] + orr r7, r7, r0 + add r0, r2, r1 + str r0, [r6, #0x0] + ldr r2, [r6, #0x4] + ldr r1, [sp, #0x28] + mov r0, r6 + add r1, r2, r1 + str r1, [r6, #0x4] + ldr r3, [r6, #0x8] + ldr r2, [sp, #0x2c] + mov r1, r6 + add r2, r3, r2 + str r2, [r6, #0x8] + ldr r3, [r6, #0xc] + ldr r2, [sp, #0x30] + add r2, r3, r2 + str r2, [r6, #0xc] + ldr r3, [r6, #0x10] + ldr r2, [sp, #0x34] + add r2, r3, r2 + str r2, [r6, #0x10] + ldr r3, [r6, #0x14] + ldr r2, [sp, #0x38] + add r2, r3, r2 + str r2, [r6, #0x14] + bl VEC_Normalize + add r0, r6, #0xc + mov r1, r0 + bl VEC_Normalize +_020BCC98: ; 0x020BCC98 + cmp r7, #0x0 + bne _020BCCE4 + ldr r2, [r6, #0x18] + ldr r1, [sp, #0x3c] + add r0, r6, #0x18 + add r1, r2, r1 + str r1, [r6, #0x18] + ldr r3, [r6, #0x1c] + ldr r2, [sp, #0x40] + mov r1, r0 + add r2, r3, r2 + str r2, [r6, #0x1c] + ldr r3, [r6, #0x20] + ldr r2, [sp, #0x44] + add r2, r3, r2 + str r2, [r6, #0x20] + bl VEC_Normalize + add sp, sp, #0x4c + ldmia sp!, {r4-r9,pc} +_020BCCE4: + ldr r12, [r6, #0x14] + ldr r5, [r6, #0x4] + ldr r4, [r6, #0x10] + ldr r2, [r6, #0x8] + mul r1, r5, r12 + mul r0, r2, r4 + sub r0, r1, r0 + ldr r7, [r6, #0xc] + ldr r8, [r6, #0x0] + mov r3, r0, asr #0xc + mul r1, r2, r7 + mul r0, r8, r12 + sub r2, r1, r0 + mul r1, r8, r4 + mul r0, r5, r7 + sub r0, r1, r0 + str r3, [r6, #0x18] + mov r1, r2, asr #0xc + str r1, [r6, #0x1c] + mov r0, r0, asr #0xc + add sp, sp, #0x4c + str r0, [r6, #0x20] + ldmia sp!, {r4-r9,pc} +_020BCD40: + mov r0, r0, lsl #0x1 + ldrh r3, [r8, r0] + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_020BC500 +_020BCD58: ; 0x020BCD58 + cmp r0, #0x0 + addeq sp, sp, #0x4c + ldmeqia sp!, {r4-r9,pc} +_020BCD64: ; 0x020BCD64 + ldr r12, [r6, #0x14] + ldr r5, [r6, #0x4] + ldr r8, [r6, #0x0] + ldr r4, [r6, #0x10] + ldr r2, [r6, #0x8] + ldr r7, [r6, #0xc] + mul r1, r5, r12 + mul r0, r2, r4 + sub r0, r1, r0 + mov r3, r0, asr #0xc + mul r1, r2, r7 + mul r0, r8, r12 + sub r2, r1, r0 + mul r1, r8, r4 + mul r0, r5, r7 + sub r0, r1, r0 + str r3, [r6, #0x18] + mov r1, r2, asr #0xc + str r1, [r6, #0x1c] + mov r0, r0, asr #0xc + str r0, [r6, #0x20] + add sp, sp, #0x4c + ldmia sp!, {r4-r9,pc} + .balign 4 +_020BCDC0: .word 0x1FFF0000 + + arm_func_start FUN_020BCDC4 +FUN_020BCDC4: ; 0x020BCDC4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldrh r4, [r3, #0x4] + ldr r6, [r2, #0x4] + mov r5, r1, asr #0xc + sub r4, r4, #0x1 + cmp r5, r4 + add r6, r3, r6 + ldr r2, [r2, #0x0] + bne _020BCE58 + ands r4, r2, #0xc0000000 + beq _020BCE08 + ands r4, r2, #0x40000000 + andne r4, r5, #0x1 + addne r5, r4, r5, lsr #0x1 + andeq r4, r5, #0x3 + addeq r5, r4, r5, lsr #0x2 +_020BCE08: + ldr r3, [r3, #0x8] + ands r3, r3, #0x2 + movne r4, #0x0 + bne _020BCED4 + ands r1, r2, #0x20000000 + ldreq r2, [r6, r5, lsl #0x3] + addeq r1, r6, r5, lsl #0x3 + streq r2, [r0, #0x0] + ldreq r1, [r1, #0x4] + addeq sp, sp, #0x4 + streq r1, [r0, #0x4] + ldmeqia sp!, {r4-r7,pc} +_020BCE38: ; 0x020BCE38 + mov r1, r5, lsl #0x2 + ldrsh r2, [r6, r1] + add r1, r6, r5, lsl #0x2 + add sp, sp, #0x4 + str r2, [r0, #0x0] + ldrsh r1, [r1, #0x2] + str r1, [r0, #0x4] + ldmia sp!, {r4-r7,pc} +_020BCE58: + ands r3, r2, #0xc0000000 + beq _020BCED0 + ldr r3, _020BCF60 ; =0x1FFF0000 + ands r4, r2, #0x40000000 + and r3, r2, r3 + mov r3, r3, lsr #0x10 + beq _020BCEA0 + cmp r5, r3 + movcs r5, r3, lsr #0x1 + addcs r4, r5, #0x1 + bhs _020BCED4 + ldr r3, _020BCF64 ; =0x00001FFF + mov r5, r5, lsr #0x1 + add r4, r5, #0x1 + and lr, r1, r3 + mov r12, #0x2 + mov r3, #0x1 + b _020BCEE4 +_020BCEA0: + cmp r5, r3 + andcs r3, r5, #0x3 + addcs r5, r3, r5, lsr #0x2 + addcs r4, r5, #0x1 + bhs _020BCED4 + ldr r3, _020BCF68 ; =0x00003FFF + mov r5, r5, lsr #0x2 + add r4, r5, #0x1 + and lr, r1, r3 + mov r12, #0x4 + mov r3, #0x2 + b _020BCEE4 +_020BCED0: + add r4, r5, #0x1 +_020BCED4: + ldr r3, _020BCF6C ; =0x00000FFF + mov r12, #0x1 + and lr, r1, r3 + mov r3, #0x0 +_020BCEE4: + ands r1, r2, #0x20000000 + beq _020BCF10 + mov r2, r5, lsl #0x2 + add r1, r6, r5, lsl #0x2 + mov r5, r4, lsl #0x2 + add r4, r6, r4, lsl #0x2 + ldrsh r2, [r6, r2] + ldrsh r1, [r1, #0x2] + ldrsh r5, [r6, r5] + ldrsh r4, [r4, #0x2] + b _020BCF28 +_020BCF10: + add r1, r6, r5, lsl #0x3 + add r7, r6, r4, lsl #0x3 + ldr r2, [r6, r5, lsl #0x3] + ldr r1, [r1, #0x4] + ldr r5, [r6, r4, lsl #0x3] + ldr r4, [r7, #0x4] +_020BCF28: + sub r5, r5, r2 + sub r4, r4, r1 + mul r6, r2, r12 + mul r2, lr, r5 + add r2, r6, r2, asr #0xc + mov r5, r2, asr r3 + mul r2, r1, r12 + mul r1, lr, r4 + add r1, r2, r1, asr #0xc + mov r1, r1, asr r3 + str r5, [r0, #0x0] + str r1, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020BCF60: .word 0x1FFF0000 +_020BCF64: .word 0x00001FFF +_020BCF68: .word 0x00003FFF +_020BCF6C: .word 0x00000FFF + + arm_func_start FUN_020BCF70 +FUN_020BCF70: ; 0x020BCF70 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r4, [r2, #0x4] + ldr r12, [r2, #0x0] + mov r1, r1, asr #0xc + add r3, r3, r4 + ands r2, r12, #0xc0000000 + beq _020BD0D0 + ldr r2, _020BD184 ; =0x1FFF0000 + ands r4, r12, #0x40000000 + and r2, r12, r2 + mov r4, r2, lsr #0x10 + beq _020BCFCC + ands r2, r1, #0x1 + beq _020BCFC4 + cmp r1, r4 + movhi r1, r4, lsr #0x1 + addhi r1, r1, #0x1 + bhi _020BD0D0 + mov r2, r1, lsr #0x1 + b _020BD110 +_020BCFC4: + mov r1, r1, lsr #0x1 + b _020BD0D0 +_020BCFCC: + ands r2, r1, #0x3 + beq _020BD0CC + cmp r1, r4 + addhi r1, r2, r4, lsr #0x2 + bhi _020BD0D0 + ands r2, r1, #0x1 + beq _020BD0C4 + ands r2, r1, #0x2 + movne r1, r1, lsr #0x2 + addne r2, r1, #0x1 + moveq r2, r1, lsr #0x2 + addeq r1, r2, #0x1 + ands r4, r12, #0x20000000 + beq _020BD04C + mov r5, r2, lsl #0x2 + mov r4, r1, lsl #0x2 + ldrsh r12, [r3, r5] + ldrsh r5, [r3, r4] + add r2, r3, r2, lsl #0x2 + add r4, r12, r12, lsl #0x1 + add r4, r5, r4 + mov r4, r4, asr #0x2 + str r4, [r0, #0x0] + add r1, r3, r1, lsl #0x2 + ldrsh r3, [r2, #0x2] + ldrsh r2, [r1, #0x2] + add sp, sp, #0x4 + add r1, r3, r3, lsl #0x1 + add r1, r2, r1 + mov r1, r1, asr #0x2 + str r1, [r0, #0x4] + ldmia sp!, {r4-r5,pc} +_020BD04C: + ldr r5, [r3, r2, lsl #0x3] + ldr r4, [r3, r1, lsl #0x3] + mov r12, r5, asr #0x1f + mov r12, r12, lsl #0x1 + mov lr, r5, lsl #0x1 + orr r12, r12, r5, lsr #0x1f + adds lr, lr, r5 + adc r12, r12, r5, asr #0x1f + adds lr, lr, r4 + adc r12, r12, r4, asr #0x1f + mov lr, lr, lsr #0x2 + orr lr, lr, r12, lsl #0x1e + str lr, [r0, #0x0] + add r2, r3, r2, lsl #0x3 + ldr r12, [r2, #0x4] + add r1, r3, r1, lsl #0x3 + mov r2, r12, asr #0x1f + mov r2, r2, lsl #0x1 + mov r3, r12, lsl #0x1 + ldr r1, [r1, #0x4] + orr r2, r2, r12, lsr #0x1f + adds r3, r3, r12 + adc r2, r2, r12, asr #0x1f + adds r3, r3, r1 + adc r1, r2, r1, asr #0x1f + mov r2, r3, lsr #0x2 + orr r2, r2, r1, lsl #0x1e + str r2, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} +_020BD0C4: + mov r2, r1, lsr #0x2 + b _020BD110 +_020BD0CC: + mov r1, r1, lsr #0x2 +_020BD0D0: + ands r2, r12, #0x20000000 + ldreq r2, [r3, r1, lsl #0x3] + addeq r1, r3, r1, lsl #0x3 + streq r2, [r0, #0x0] + ldreq r1, [r1, #0x4] + addeq sp, sp, #0x4 + streq r1, [r0, #0x4] + ldmeqia sp!, {r4-r5,pc} +_020BD0F0: ; 0x020BD0F0 + mov r2, r1, lsl #0x2 + ldrsh r2, [r3, r2] + add r1, r3, r1, lsl #0x2 + add sp, sp, #0x4 + str r2, [r0, #0x0] + ldrsh r1, [r1, #0x2] + str r1, [r0, #0x4] + ldmia sp!, {r4-r5,pc} +_020BD110: + ands r1, r12, #0x20000000 + beq _020BD150 + mov r1, r2, lsl #0x2 + add r12, r3, r2, lsl #0x2 + ldrsh r2, [r3, r1] + ldrsh r1, [r12, #0x4] + add sp, sp, #0x4 + add r1, r2, r1 + mov r1, r1, asr #0x1 + str r1, [r0, #0x0] + ldrsh r2, [r12, #0x2] + ldrsh r1, [r12, #0x6] + add r1, r2, r1 + mov r1, r1, asr #0x1 + str r1, [r0, #0x4] + ldmia sp!, {r4-r5,pc} +_020BD150: + add r12, r3, r2, lsl #0x3 + ldr r2, [r3, r2, lsl #0x3] + ldr r1, [r12, #0x8] + add r1, r2, r1 + mov r1, r1, asr #0x1 + str r1, [r0, #0x0] + ldr r2, [r12, #0x4] + ldr r1, [r12, #0xc] + add r1, r2, r1 + mov r1, r1, asr #0x1 + str r1, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020BD184: .word 0x1FFF0000 + + arm_func_start FUN_020BD188 +FUN_020BD188: ; 0x020BD188 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldrh r4, [r3, #0x4] + ldr lr, [r2, #0x4] + mov r12, r1, asr #0xc + sub r4, r4, #0x1 + cmp r12, r4 + add r4, r3, lr + ldr lr, [r2, #0x0] + bne _020BD230 + ands r2, lr, #0xc0000000 + beq _020BD1CC + ands r2, lr, #0x40000000 + andne r2, r12, #0x1 + addne r12, r2, r12, lsr #0x1 + andeq r2, r12, #0x3 + addeq r12, r2, r12, lsr #0x2 +_020BD1CC: + ldr r2, [r3, #0x8] + ands r2, r2, #0x2 + beq _020BD210 + ldr r2, _020BD2E8 ; =0x00000FFF + ands r3, lr, #0x20000000 + and r3, r1, r2 + movne r1, r12, lsl #0x1 + ldrnesh r2, [r4, r1] + ldrnesh r1, [r4, #0x0] + add sp, sp, #0x4 + ldreq r2, [r4, r12, lsl #0x2] + ldreq r1, [r4, #0x0] + sub r1, r1, r2 + mul r1, r3, r1 + add r1, r2, r1, asr #0xc + str r1, [r0, #0x0] + ldmia sp!, {r4-r5,pc} +_020BD210: + ands r1, lr, #0x20000000 + movne r1, r12, lsl #0x1 + ldrnesh r1, [r4, r1] + add sp, sp, #0x4 + strne r1, [r0, #0x0] + ldreq r1, [r4, r12, lsl #0x2] + streq r1, [r0, #0x0] + ldmia sp!, {r4-r5,pc} +_020BD230: + ands r2, lr, #0xc0000000 + beq _020BD298 + ldr r2, _020BD2EC ; =0x1FFF0000 + ands r3, lr, #0x40000000 + and r2, lr, r2 + mov r2, r2, lsr #0x10 + beq _020BD270 + cmp r12, r2 + movcs r12, r2, lsr #0x1 + bhs _020BD298 + ldr r2, _020BD2F0 ; =0x00001FFF + mov r12, r12, lsr #0x1 + and r5, r1, r2 + mov r2, #0x2 + mov r1, #0x1 + b _020BD2A8 +_020BD270: + cmp r12, r2 + andcs r2, r12, #0x3 + addcs r12, r2, r12, lsr #0x2 + bhs _020BD298 + ldr r2, _020BD2F4 ; =0x00003FFF + mov r12, r12, lsr #0x2 + and r5, r1, r2 + mov r2, #0x4 + mov r1, #0x2 + b _020BD2A8 +_020BD298: + ldr r3, _020BD2E8 ; =0x00000FFF + mov r2, #0x1 + and r5, r1, r3 + mov r1, #0x0 +_020BD2A8: + ands r3, lr, #0x20000000 + addne r3, r4, r12, lsl #0x1 + movne lr, r12, lsl #0x1 + ldrnesh r12, [r4, lr] + ldrnesh r3, [r3, #0x2] + addeq r3, r4, r12, lsl #0x2 + ldreq r12, [r4, r12, lsl #0x2] + ldreq r3, [r3, #0x4] + mul r4, r12, r2 + sub r3, r3, r12 + mul r2, r5, r3 + add r2, r4, r2, asr #0xc + mov r1, r2, asr r1 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020BD2E8: .word 0x00000FFF +_020BD2EC: .word 0x1FFF0000 +_020BD2F0: .word 0x00001FFF +_020BD2F4: .word 0x00003FFF + + arm_func_start FUN_020BD2F8 +FUN_020BD2F8: ; 0x020BD2F8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r12, [r2, #0x4] + ldr r2, [r2, #0x0] + mov r1, r1, asr #0xc + add r3, r3, r12 + ands r12, r2, #0xc0000000 + beq _020BD44C + ldr ip, _020BD46C ; =0x1FFF0000 + ands lr, r2, #0x40000000 + and r12, r2, r12 + mov lr, r12, lsr #0x10 + beq _020BD354 + ands r12, r1, #0x1 + beq _020BD34C + cmp r1, lr + movhi r1, lr, lsr #0x1 + addhi r1, r1, #0x1 + bhi _020BD44C + mov r12, r1, lsr #0x1 + b _020BD400 +_020BD34C: + mov r1, r1, lsr #0x1 + b _020BD44C +_020BD354: + ands r12, r1, #0x3 + beq _020BD3F8 + cmp r1, lr + addhi r1, r12, lr, lsr #0x2 + bhi _020BD44C + ands r12, r1, #0x1 + beq _020BD3F0 + ands r12, r1, #0x2 + movne lr, r1, lsr #0x2 + addne r12, lr, #0x1 + moveq r12, r1, lsr #0x2 + addeq lr, r12, #0x1 + ands r1, r2, #0x20000000 + beq _020BD3B4 + mov r2, r12, lsl #0x1 + mov r1, lr, lsl #0x1 + ldrsh r12, [r3, r2] + ldrsh r2, [r3, r1] + mov r1, #0x3 + add sp, sp, #0x4 + smlabb r1, r12, r1, r2 + mov r1, r1, asr #0x2 + str r1, [r0, #0x0] + ldmia sp!, {pc} +_020BD3B4: + ldr r12, [r3, r12, lsl #0x2] + ldr r1, [r3, lr, lsl #0x2] + mov r2, r12, asr #0x1f + mov r2, r2, lsl #0x1 + mov r3, r12, lsl #0x1 + orr r2, r2, r12, lsr #0x1f + adds r3, r3, r12 + adc r2, r2, r12, asr #0x1f + adds r3, r3, r1 + adc r1, r2, r1, asr #0x1f + mov r2, r3, lsr #0x2 + orr r2, r2, r1, lsl #0x1e + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} +_020BD3F0: + mov r12, r1, lsr #0x2 + b _020BD400 +_020BD3F8: + mov r1, r1, lsr #0x2 + b _020BD44C +_020BD400: + ands r1, r2, #0x20000000 + beq _020BD42C + mov r2, r12, lsl #0x1 + add r1, r3, r12, lsl #0x1 + ldrsh r2, [r3, r2] + ldrsh r1, [r1, #0x2] + add sp, sp, #0x4 + add r1, r2, r1 + mov r1, r1, asr #0x1 + str r1, [r0, #0x0] + ldmia sp!, {pc} +_020BD42C: + add r1, r3, r12, lsl #0x2 + ldr r2, [r3, r12, lsl #0x2] + ldr r1, [r1, #0x4] + mov r2, r2, asr #0x1 + add r1, r2, r1, asr #0x1 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} +_020BD44C: + ands r2, r2, #0x20000000 + movne r1, r1, lsl #0x1 + ldrnesh r1, [r3, r1] + strne r1, [r0, #0x0] + ldreq r1, [r3, r1, lsl #0x2] + streq r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020BD46C: .word 0x1FFF0000 + + arm_func_start FUN_020BD470 +FUN_020BD470: ; 0x020BD470 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x34 + mov r9, r0 + add r0, r9, r1, lsl #0x1 + ldrh r0, [r0, #0x14] + mov r7, r3 + mov r8, r2 + ldr r5, [r9, r0] + add r1, r9, r0 + ands r0, r5, #0x1 + movne r0, #0x7 + strne r0, [r7, #0x0] + bne _020BD814 + ldr r0, _020BD848 ; =0x00000FFF + add r4, r1, #0x4 + ands r0, r8, r0 + beq _020BD4C4 + ldr r0, [r9, #0x8] + ands r0, r0, #0x1 + movne r6, #0x1 + bne _020BD4C8 +_020BD4C4: + mov r6, #0x0 +_020BD4C8: + mov r0, #0x0 + str r0, [r7, #0x0] + ands r0, r5, #0x6 + bne _020BD5C0 + ands r0, r5, #0x8 + bne _020BD51C + cmp r6, #0x0 + beq _020BD500 + mov r1, r8 + mov r2, r4 + mov r3, r9 + add r0, r7, #0x4c + bl FUN_020BD188 + b _020BD514 +_020BD500: + mov r1, r8 + mov r2, r4 + mov r3, r9 + add r0, r7, #0x4c + bl FUN_020BD2F8 +_020BD514: + add r4, r4, #0x8 + b _020BD524 +_020BD51C: + ldr r0, [r4], #0x4 + str r0, [r7, #0x4c] +_020BD524: + ands r0, r5, #0x10 + bne _020BD568 + cmp r6, #0x0 + beq _020BD54C + mov r1, r8 + mov r2, r4 + mov r3, r9 + add r0, r7, #0x50 + bl FUN_020BD188 + b _020BD560 +_020BD54C: + mov r1, r8 + mov r2, r4 + mov r3, r9 + add r0, r7, #0x50 + bl FUN_020BD2F8 +_020BD560: + add r4, r4, #0x8 + b _020BD570 +_020BD568: + ldr r0, [r4], #0x4 + str r0, [r7, #0x50] +_020BD570: + ands r0, r5, #0x20 + bne _020BD5B4 + cmp r6, #0x0 + beq _020BD598 + mov r1, r8 + mov r2, r4 + mov r3, r9 + add r0, r7, #0x54 + bl FUN_020BD188 + b _020BD5AC +_020BD598: + mov r1, r8 + mov r2, r4 + mov r3, r9 + add r0, r7, #0x54 + bl FUN_020BD2F8 +_020BD5AC: + add r4, r4, #0x8 + b _020BD5DC +_020BD5B4: + ldr r0, [r4], #0x4 + str r0, [r7, #0x54] + b _020BD5DC +_020BD5C0: + ands r0, r5, #0x2 + ldrne r0, [r7, #0x0] + orrne r0, r0, #0x4 + strne r0, [r7, #0x0] + bne _020BD5DC + mov r0, r7 + bl FUN_020BDA08 +_020BD5DC: + ands r0, r5, #0xc0 + bne _020BD6A8 + ands r0, r5, #0x100 + bne _020BD628 + cmp r6, #0x0 + beq _020BD60C + mov r1, r8 + mov r2, r4 + mov r3, r9 + add r0, r7, #0x28 + bl FUN_020BC698 + b _020BD620 +_020BD60C: + mov r1, r8 + mov r2, r4 + mov r3, r9 + add r0, r7, #0x28 + bl FUN_020BC9D4 +_020BD620: + add r4, r4, #0x8 + b _020BD6C4 +_020BD628: + ldr r1, [r9, #0xc] + ldr r2, [r9, #0x10] + ldr r3, [r4, #0x0] + add r0, r7, #0x28 + add r1, r9, r1 + add r2, r9, r2 + bl FUN_020BC500 +_020BD644: ; 0x020BD644 + cmp r0, #0x0 + beq _020BD6A0 + ldr r12, [r7, #0x3c] + ldr r0, [r7, #0x2c] + ldr r3, [r7, #0x28] + ldr r11, [r7, #0x38] + ldr r1, [r7, #0x30] + ldr r2, [r7, #0x34] + mul r10, r0, r12 + mul lr, r1, r11 + sub r10, r10, lr + mov r10, r10, asr #0xc + mul lr, r1, r2 + mul r1, r3, r12 + sub r1, lr, r1 + mul r11, r3, r11 + mul r2, r0, r2 + sub r0, r11, r2 + str r10, [r7, #0x40] + mov r1, r1, asr #0xc + str r1, [r7, #0x44] + mov r0, r0, asr #0xc + str r0, [r7, #0x48] +_020BD6A0: + add r4, r4, #0x4 + b _020BD6C4 +_020BD6A8: + ands r0, r5, #0x40 + ldrne r0, [r7, #0x0] + orrne r0, r0, #0x2 + strne r0, [r7, #0x0] + bne _020BD6C4 + mov r0, r7 + bl FUN_020BD850 +_020BD6C4: + ands r0, r5, #0x600 + bne _020BD7F0 + ands r0, r5, #0x800 + bne _020BD71C + cmp r6, #0x0 + beq _020BD6F4 + add r0, sp, #0x0 + mov r1, r8 + mov r2, r4 + mov r3, r9 + bl FUN_020BCDC4 + b _020BD708 +_020BD6F4: + add r0, sp, #0x0 + mov r1, r8 + mov r2, r4 + mov r3, r9 + bl FUN_020BCF70 +_020BD708: + ldr r1, [sp, #0x0] + ldr r0, [sp, #0x4] + str r1, [sp, #0x18] + str r0, [sp, #0x24] + b _020BD72C +_020BD71C: + ldr r0, [r4, #0x0] + str r0, [sp, #0x18] + ldr r0, [r4, #0x4] + str r0, [sp, #0x24] +_020BD72C: + ands r0, r5, #0x1000 + bne _020BD77C + cmp r6, #0x0 + beq _020BD754 + add r0, sp, #0x8 + mov r1, r8 + mov r3, r9 + add r2, r4, #0x8 + bl FUN_020BCDC4 + b _020BD768 +_020BD754: + add r0, sp, #0x8 + mov r1, r8 + mov r3, r9 + add r2, r4, #0x8 + bl FUN_020BCF70 +_020BD768: + ldr r1, [sp, #0x8] + ldr r0, [sp, #0xc] + str r1, [sp, #0x1c] + str r0, [sp, #0x28] + b _020BD78C +_020BD77C: + ldr r0, [r4, #0x8] + str r0, [sp, #0x1c] + ldr r0, [r4, #0xc] + str r0, [sp, #0x28] +_020BD78C: + ands r0, r5, #0x2000 + bne _020BD7DC + cmp r6, #0x0 + beq _020BD7B4 + add r0, sp, #0x10 + mov r1, r8 + mov r3, r9 + add r2, r4, #0x10 + bl FUN_020BCDC4 + b _020BD7C8 +_020BD7B4: + add r0, sp, #0x10 + mov r1, r8 + mov r3, r9 + add r2, r4, #0x10 + bl FUN_020BCF70 +_020BD7C8: + ldr r1, [sp, #0x10] + ldr r0, [sp, #0x14] + str r1, [sp, #0x20] + str r0, [sp, #0x2c] + b _020BD814 +_020BD7DC: + ldr r0, [r4, #0x10] + str r0, [sp, #0x20] + ldr r0, [r4, #0x14] + str r0, [sp, #0x2c] + b _020BD814 +_020BD7F0: + ands r0, r5, #0x200 + ldrne r0, [r7, #0x0] + orrne r0, r0, #0x1 + strne r0, [r7, #0x0] + bne _020BD814 + mov r0, r7 + bl FUN_020BD9A4 + add sp, sp, #0x34 + ldmia sp!, {r4-r11,pc} +_020BD814: + ldr r0, [r7, #0x0] + add r1, sp, #0x18 + ands r0, r0, #0x1 + ldr r0, _020BD84C ; =0x021CEF7C + movne r3, #0x4 + ldr r4, [r0, #0x0] + moveq r3, #0x0 + ldr r2, [r4, #0x0] + ldr r4, [r4, #0xe8] + mov r0, r7 + blx r4 + add sp, sp, #0x34 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020BD848: .word 0x00000FFF +_020BD84C: .word 0x021CEF7C + + arm_func_start FUN_020BD850 +FUN_020BD850: ; 0x020BD850 + stmdb sp!, {r4-r8,lr} + ldr r1, _020BD990 ; =0x021CEF7C + mov r8, r0 + ldr r0, [r1, #0x0] + ldr r3, [r0, #0xd4] + ldr r0, [r0, #0x0] + ldrh r2, [r3, #0x6] + ldrb r0, [r0, #0x1] + ldrh r1, [r3, r2] + add r2, r3, r2 + mla r0, r1, r0, r2 + ldr r0, [r0, #0x4] + ldrh r2, [r3, r0] + add r4, r3, r0 + add r1, r4, #0x4 + ands r0, r2, #0x1 + addeq r1, r1, #0xc + ands r0, r2, #0x2 + bne _020BD980 + ands r0, r2, #0x8 + beq _020BD934 + and r2, r2, #0xf0 + add r0, r8, #0x28 + mov r5, r2, asr #0x4 + ldrsh r7, [r1, #0x0] + ldrsh r6, [r1, #0x2] + blx MI_Zero36B + ldrh r0, [r4, #0x0] + add r1, r8, r5, lsl #0x2 + ands r0, r0, #0x100 + movne r0, #0x1000 + rsbne r2, r0, #0x0 + moveq r2, #0x1000 + ldr r0, _020BD994 ; =0x020FFA14 + str r2, [r1, #0x28] + ldrb r1, [r0, r5, lsl #0x2] + ldr r0, _020BD998 ; =0x020FFA15 + add r1, r8, r1, lsl #0x2 + str r7, [r1, #0x28] + ldrb r0, [r0, r5, lsl #0x2] + add r0, r8, r0, lsl #0x2 + str r6, [r0, #0x28] + ldrh r0, [r4, #0x0] + ands r0, r0, #0x200 + ldr r0, _020BD99C ; =0x020FFA16 + rsbne r6, r6, #0x0 + ldrb r0, [r0, r5, lsl #0x2] + add r0, r8, r0, lsl #0x2 + str r6, [r0, #0x28] + ldrh r0, [r4, #0x0] + ands r0, r0, #0x400 + ldr r0, _020BD9A0 ; =0x020FFA17 + rsbne r7, r7, #0x0 + ldrb r0, [r0, r5, lsl #0x2] + add r0, r8, r0, lsl #0x2 + str r7, [r0, #0x28] + ldmia sp!, {r4-r8,pc} +_020BD934: + ldrsh r0, [r4, #0x2] + str r0, [r8, #0x28] + ldrsh r0, [r1, #0x0] + str r0, [r8, #0x2c] + ldrsh r0, [r1, #0x2] + str r0, [r8, #0x30] + ldrsh r0, [r1, #0x4] + str r0, [r8, #0x34] + ldrsh r0, [r1, #0x6] + str r0, [r8, #0x38] + ldrsh r0, [r1, #0x8] + str r0, [r8, #0x3c] + ldrsh r0, [r1, #0xa] + str r0, [r8, #0x40] + ldrsh r0, [r1, #0xc] + str r0, [r8, #0x44] + ldrsh r0, [r1, #0xe] + str r0, [r8, #0x48] + ldmia sp!, {r4-r8,pc} +_020BD980: + ldr r0, [r8, #0x0] + orr r0, r0, #0x2 + str r0, [r8, #0x0] + ldmia sp!, {r4-r8,pc} + .balign 4 +_020BD990: .word 0x021CEF7C +_020BD994: .word 0x020FFA14 +_020BD998: .word 0x020FFA15 +_020BD99C: .word 0x020FFA16 +_020BD9A0: .word 0x020FFA17 + + arm_func_start FUN_020BD9A4 +FUN_020BD9A4: ; 0x020BD9A4 + stmdb sp!, {r4,lr} + ldr r1, _020BDA04 ; =0x021CEF7C + ldr r12, [r1, #0x0] + ldr r4, [r12, #0xd4] + ldr r2, [r12, #0x0] + ldrh lr, [r4, #0x6] + ldrb r1, [r2, #0x1] + ldrh r3, [r4, lr] + add lr, r4, lr + mla r1, r3, r1, lr + ldr r1, [r1, #0x4] + ldrh r3, [r4, r1] + add r1, r4, r1 + add r1, r1, #0x4 + ands lr, r3, #0x1 + addeq r1, r1, #0xc + ands lr, r3, #0x2 + bne _020BD9F8 + ands lr, r3, #0x8 + addne r1, r1, #0x4 + addeq r1, r1, #0x10 +_020BD9F8: + ldr r12, [r12, #0xe8] + blx r12 + ldmia sp!, {r4,pc} + .balign 4 +_020BDA04: .word 0x021CEF7C + + arm_func_start FUN_020BDA08 +FUN_020BDA08: ; 0x020BDA08 + ldr r1, _020BDA6C ; =0x021CEF7C + ldr r1, [r1, #0x0] + ldr r12, [r1, #0xd4] + ldr r1, [r1, #0x0] + ldrh r3, [r12, #0x6] + ldrb r1, [r1, #0x1] + ldrh r2, [r12, r3] + add r3, r12, r3 + mla r1, r2, r1, r3 + ldr r2, [r1, #0x4] + ldrh r1, [r12, r2] + add r2, r12, r2 + ands r1, r1, #0x1 + ldrne r1, [r0, #0x0] + orrne r1, r1, #0x4 + strne r1, [r0, #0x0] + bxne lr + ldr r1, [r2, #0x4] + add r2, r2, #0x4 + str r1, [r0, #0x4c] + ldr r1, [r2, #0x4] + str r1, [r0, #0x50] + ldr r1, [r2, #0x8] + str r1, [r0, #0x54] + bx lr + .balign 4 +_020BDA6C: .word 0x021CEF7C + + arm_func_start FUN_020BDA70 +FUN_020BDA70: ; 0x020BDA70 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r3, r0 + ldr r0, [r1, #0x8] + ldr r12, [r1, #0x0] + ldrh r1, [r0, #0x4] + mov r1, r1, lsl #0xc + cmp r12, r1 + subge r12, r1, #0x1 + bge _020BDAA0 + cmp r12, #0x0 + movlt r12, #0x0 +_020BDAA0: + mov r1, r2 + mov r2, r12 + bl FUN_020BD470 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020BDAB4 +FUN_020BDAB4: ; 0x020BDAB4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + ldr r0, _020BDB3C ; =0x0210659C + str r4, [r5, #0x8] + ldr r0, [r0, #0x0] + add r1, r5, #0x1a + str r0, [r5, #0xc] + ldrb r2, [r2, #0x17] + mov r0, #0x0 + strb r2, [r5, #0x19] + ldrb r2, [r5, #0x19] + mov r2, r2, lsl #0x1 + bl MIi_CpuClear16 + ldrh r0, [r4, #0x6] + add r2, r4, #0x14 + mov r3, #0x0 + cmp r0, #0x0 + addls sp, sp, #0x4 + ldmlsia sp!, {r4-r5,pc} +_020BDB08: + mov r0, r3, lsl #0x1 + ldrh r1, [r2, r0] + add r0, r5, r3, lsl #0x1 + add r3, r3, #0x1 + ldr r1, [r4, r1] + mov r1, r1, lsr #0x18 + orr r1, r1, #0x100 + strh r1, [r0, #0x1a] + ldrh r0, [r4, #0x6] + cmp r3, r0 + blo _020BDB08 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020BDB3C: .word 0x0210659C + + arm_func_start FUN_020BDB40 +FUN_020BDB40: ; 0x020BDB40 + stmdb sp!, {r4-r8,lr} + ldr r7, [r1, #0x8] + mov r2, r2, lsl #0x10 + ldrh r4, [r7, #0xe] + add r5, r7, #0x8 + ldr r6, [r1, #0x0] + ldrh r3, [r5, r4] + mov r1, r2, lsr #0x10 + add r2, r5, r4 + mul r4, r3, r1 + add r3, r2, #0x4 + mov r6, r6, asr #0xc + mov r8, r0 + ldr r1, [r3, r4] + mov r0, r7 + mov r2, r6 + add r5, r3, r4 + bl FUN_020BDDAC + mov r4, r0 + ldr r1, [r5, #0x4] + mov r0, r7 + mov r2, r6 + bl FUN_020BDDAC + ldr r1, [r8, #0x4] + mov r2, r6 + and r1, r1, #0x8000 + orr r1, r1, r4 + orr r0, r1, r0, lsl #0x10 + str r0, [r8, #0x4] + mov r0, r7 + ldr r1, [r5, #0xc] + bl FUN_020BDDAC + mov r4, r0 + mov r0, r7 + ldr r1, [r5, #0x8] + mov r2, r6 + bl FUN_020BDDAC + mov r2, r6 + ldr r1, [r8, #0x8] + and r1, r1, #0x8000 + orr r0, r1, r0 + orr r0, r0, r4, lsl #0x10 + str r0, [r8, #0x8] + mov r0, r7 + ldr r1, [r5, #0x10] + bl FUN_020BDCB8 + ldr r1, [r8, #0xc] + bic r1, r1, #0x1f0000 + orr r0, r1, r0, lsl #0x10 + str r0, [r8, #0xc] + ldmia sp!, {r4-r8,pc} + + arm_func_start FUN_020BDC0C +FUN_020BDC0C: ; 0x020BDC0C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r3, _020BDCB4 ; =0x021065A8 + ldr r4, [r2, #0x8] + ldr r3, [r3, #0x0] + mov r9, r0 + str r3, [r9, #0xc] + ldrb r0, [r2, #0x18] + mov r8, r1 + add r4, r2, r4 + strb r0, [r9, #0x19] + ldrb r2, [r9, #0x19] + add r1, r9, #0x1a + mov r0, #0x0 + mov r2, r2, lsl #0x1 + bl MIi_CpuClear16 + ldrb r0, [r8, #0x9] + mov r7, #0x0 + cmp r0, #0x0 + addls sp, sp, #0x4 + ldmlsia sp!, {r4-r9,pc} +_020BDC60: ; 0x020BDC60 + mov r6, r7 + add r5, r8, #0x8 + add r4, r4, #0x4 +_020BDC6C: + ldrh r1, [r8, #0xe] + mov r0, r4 + add r2, r5, r1 + ldrh r1, [r2, #0x2] + add r1, r2, r1 + add r1, r1, r6 + bl FUN_020BC14C +_020BDC88: ; 0x020BDC88 + cmp r0, #0x0 + orrge r1, r7, #0x100 + addge r0, r9, r0, lsl #0x1 + strgeh r1, [r0, #0x1a] + ldrb r0, [r8, #0x9] + add r7, r7, #0x1 + add r6, r6, #0x10 + cmp r7, r0 + blo _020BDC6C + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020BDCB4: .word 0x021065A8 + + arm_func_start FUN_020BDCB8 +FUN_020BDCB8: ; 0x020BDCB8 + ands r3, r1, #0x20000000 + movne r0, r1, lsl #0x10 + movne r0, r0, lsr #0x10 + bxne lr + ldr r3, _020BDDA4 ; =0x0000FFFF + ands r12, r1, #0xc0000000 + and r3, r1, r3 + add r0, r0, r3 + ldreqb r0, [r0, r2] + bxeq lr + ldr r3, _020BDDA8 ; =0x1FFF0000 + ands r12, r1, #0x40000000 + and r1, r1, r3 + mov r3, r1, lsr #0x10 + beq _020BDD30 + ands r1, r2, #0x1 + beq _020BDD28 + cmp r2, r3 + addhi r0, r0, r3, lsr #0x1 + ldrhib r0, [r0, #0x1] + bxhi lr + add r1, r0, r2, lsr #0x1 + ldrb r2, [r0, r2, lsr #0x1] + ldrb r0, [r1, #0x1] + add r0, r2, r0 + mov r0, r0, lsl #0xf + mov r0, r0, lsr #0x10 + bx lr +_020BDD28: + ldrb r0, [r0, r2, lsr #0x1] + bx lr +_020BDD30: + ands r1, r2, #0x3 + beq _020BDD9C + cmp r2, r3 + addhi r0, r0, r3, lsr #0x2 + ldrhib r0, [r1, r0] + bxhi lr + ands r1, r2, #0x1 + beq _020BDD80 + ands r1, r2, #0x2 + movne r1, r2, lsr #0x2 + addne r2, r1, #0x1 + moveq r2, r2, lsr #0x2 + addeq r1, r2, #0x1 + ldrb r2, [r0, r2] + ldrb r1, [r0, r1] + mov r0, #0x3 + mla r0, r2, r0, r1 + mov r0, r0, lsl #0xe + mov r0, r0, lsr #0x10 + bx lr +_020BDD80: + add r1, r0, r2, lsr #0x2 + ldrb r2, [r0, r2, lsr #0x2] + ldrb r0, [r1, #0x1] + add r0, r2, r0 + mov r0, r0, lsl #0xf + mov r0, r0, lsr #0x10 + bx lr +_020BDD9C: + ldrb r0, [r0, r2, lsr #0x2] + bx lr + .balign 4 +_020BDDA4: .word 0x0000FFFF +_020BDDA8: .word 0x1FFF0000 + + arm_func_start FUN_020BDDAC +FUN_020BDDAC: ; 0x020BDDAC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ands r3, r1, #0x20000000 + movne r0, r1, lsl #0x10 + addne sp, sp, #0x4 + movne r0, r0, lsr #0x10 + ldmneia sp!, {pc} + ldr r3, _020BDF2C ; =0x0000FFFF + ands r12, r1, #0xc0000000 + and r3, r1, r3 + add r0, r0, r3 + moveq r1, r2, lsl #0x1 + addeq sp, sp, #0x4 + ldreqh r0, [r0, r1] + ldmeqia sp!, {pc} + ldr r3, _020BDF30 ; =0x1FFF0000 + ands r12, r1, #0x40000000 + and r1, r1, r3 + mov r3, r1, lsr #0x10 + beq _020BDE34 + ands r1, r2, #0x1 + beq _020BDE24 + cmp r2, r3 + bichi r1, r3, #0x1 + addhi r0, r0, r1 + addhi sp, sp, #0x4 + ldrhih r0, [r0, #0x2] + ldmhiia sp!, {pc} + mov r1, r2, lsr #0x1 + b _020BDEE0 +_020BDE24: + bic r1, r2, #0x1 + add sp, sp, #0x4 + ldrh r0, [r0, r1] + ldmia sp!, {pc} +_020BDE34: + ands r1, r2, #0x3 + beq _020BDECC + cmp r2, r3 + movhi r2, r3, lsr #0x2 + movhi r1, r1, lsl #0x1 + addhi r0, r0, r2, lsl #0x1 + addhi sp, sp, #0x4 + ldrhih r0, [r1, r0] + ldmhiia sp!, {pc} + ands r1, r2, #0x1 + beq _020BDEC4 + ands r1, r2, #0x2 + movne r1, r2, lsr #0x2 + addne r2, r1, #0x1 + moveq r2, r2, lsr #0x2 + addeq r1, r2, #0x1 + mov r2, r2, lsl #0x1 + mov r1, r1, lsl #0x1 + ldrh r12, [r0, r2] + ldrh lr, [r0, r1] + ldr r0, _020BDF34 ; =0x00007C1F + and r3, r12, #0x3e0 + and r2, lr, #0x3e0 + mov r1, #0x3 + mla r2, r3, r1, r2 + and r12, r12, r0 + and r3, lr, r0 + mla r1, r12, r1, r3 + mov r2, r2, lsr #0x2 + and r1, r0, r1, lsr #0x2 + and r0, r2, #0x3e0 + orr r0, r1, r0 + mov r0, r0, lsl #0x10 + add sp, sp, #0x4 + mov r0, r0, lsr #0x10 + ldmia sp!, {pc} +_020BDEC4: + mov r1, r2, lsr #0x2 + b _020BDEE0 +_020BDECC: + mov r1, r2, lsr #0x2 + mov r1, r1, lsl #0x1 + add sp, sp, #0x4 + ldrh r0, [r0, r1] + ldmia sp!, {pc} +_020BDEE0: + mov r2, r1, lsl #0x1 + add r1, r0, r1, lsl #0x1 + ldrh r3, [r0, r2] + ldrh r12, [r1, #0x2] + ldr r0, _020BDF34 ; =0x00007C1F + and r2, r3, #0x3e0 + and r1, r12, #0x3e0 + add r1, r2, r1 + mov r1, r1, lsr #0x1 + and r3, r3, r0 + and r2, r12, r0 + add r2, r3, r2 + and r2, r0, r2, lsr #0x1 + and r0, r1, #0x3e0 + orr r0, r2, r0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020BDF2C: .word 0x0000FFFF +_020BDF30: .word 0x1FFF0000 +_020BDF34: .word 0x00007C1F + + arm_func_start FUN_020BDF38 +FUN_020BDF38: ; 0x020BDF38 + stmdb sp!, {r4,lr} + ldr r12, [r1, #0x0] + mov r4, r0 + mov r2, r2, lsl #0x10 + ldr r0, [r1, #0x8] + mov r1, r2, lsr #0x10 + mov r3, r4 + mov r2, r12, asr #0xc + bl FUN_020BE030 + ldr r0, [r4, #0x10] + bic r0, r0, #0xc0000000 + str r0, [r4, #0x10] + ldr r0, [r4, #0x10] + orr r0, r0, #0x40000000 + str r0, [r4, #0x10] + ldr r0, [r4, #0x0] + orr r0, r0, #0x8 + str r0, [r4, #0x0] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020BDF84 +FUN_020BDF84: ; 0x020BDF84 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r3, _020BE02C ; =0x021065A0 + ldr r4, [r2, #0x8] + ldr r3, [r3, #0x0] + mov r9, r0 + str r3, [r9, #0xc] + ldrb r0, [r2, #0x18] + mov r8, r1 + add r4, r2, r4 + strb r0, [r9, #0x19] + ldrb r2, [r9, #0x19] + add r1, r9, #0x1a + mov r0, #0x0 + mov r2, r2, lsl #0x1 + bl MIi_CpuClear16 + ldrb r0, [r8, #0x9] + mov r7, #0x0 + cmp r0, #0x0 + addls sp, sp, #0x4 + ldmlsia sp!, {r4-r9,pc} +_020BDFD8: ; 0x020BDFD8 + mov r6, r7 + add r5, r8, #0x8 + add r4, r4, #0x4 +_020BDFE4: + ldrh r1, [r8, #0xe] + mov r0, r4 + add r2, r5, r1 + ldrh r1, [r2, #0x2] + add r1, r2, r1 + add r1, r1, r6 + bl FUN_020BC14C +_020BE000: ; 0x020BE000 + cmp r0, #0x0 + orrge r1, r7, #0x100 + addge r0, r9, r0, lsl #0x1 + strgeh r1, [r0, #0x1a] + ldrb r0, [r8, #0x9] + add r7, r7, #0x1 + add r6, r6, #0x10 + cmp r7, r0 + blo _020BDFE4 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020BE02C: .word 0x021065A0 + + arm_func_start FUN_020BE030 +FUN_020BE030: ; 0x020BE030 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r8, r0 + ldrh r4, [r8, #0xe] + add r5, r8, #0x8 + mov r6, r3 + ldrh r3, [r5, r4] + add r4, r5, r4 + add r4, r4, #0x4 + mla r5, r3, r1, r4 + mov r7, r2 + ldr r1, [r5, #0x18] + ldr r2, [r5, #0x1c] + mov r3, r7 + ldr r4, [r6, #0x0] + bl FUN_020BE238 + mov r9, r0 + ldr r1, [r5, #0x20] + mov r0, r8 + ldr r2, [r5, #0x24] + mov r3, r7 + bl FUN_020BE238 +_020BE088: ; 0x020BE088 + cmp r9, #0x0 + bne _020BE09C + cmp r0, #0x0 + orreq r4, r4, #0x4 + beq _020BE0A8 +_020BE09C: + str r9, [r6, #0x24] + str r0, [r6, #0x28] + bic r4, r4, #0x4 +_020BE0A8: + ldr r1, [r5, #0x10] + ldr r2, [r5, #0x14] + mov r0, r8 + mov r3, r7 + bl FUN_020BE12C + cmp r0, #0x10000000 + strneh r0, [r6, #0x20] + movne r0, r0, lsr #0x10 + strneh r0, [r6, #0x22] + orreq r4, r4, #0x2 + ldr r1, [r5, #0x0] + ldr r2, [r5, #0x4] + mov r0, r8 + mov r3, r7 + bicne r4, r4, #0x2 + bl FUN_020BE238 + mov r9, r0 + ldr r1, [r5, #0x8] + ldr r2, [r5, #0xc] + mov r0, r8 + mov r3, r7 + bl FUN_020BE238 + cmp r9, #0x1000 + bne _020BE114 + cmp r0, #0x1000 + orreq r4, r4, #0x1 + beq _020BE120 +_020BE114: + str r9, [r6, #0x18] + str r0, [r6, #0x1c] + bic r4, r4, #0x1 +_020BE120: + str r4, [r6, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + + arm_func_start FUN_020BE12C +FUN_020BE12C: ; 0x020BE12C + ands r12, r1, #0x20000000 + movne r0, r2 + bxne lr + add r0, r0, r2 + ands r2, r1, #0xc0000000 + beq _020BE1F8 + ldr r2, _020BE234 ; =0x0000FFFF + ands r12, r1, #0x40000000 + and r2, r1, r2 + beq _020BE17C + ands r1, r3, #0x1 + beq _020BE174 + cmp r3, r2 + movhi r1, r2, lsr #0x1 + addhi r3, r1, #0x1 + bhi _020BE1F8 + mov r2, r3, lsr #0x1 + b _020BE200 +_020BE174: + mov r3, r3, lsr #0x1 + b _020BE1F8 +_020BE17C: + ands r1, r3, #0x3 + beq _020BE1F4 + cmp r3, r2 + addhi r3, r1, r2, lsr #0x2 + bhi _020BE1F8 + ands r1, r3, #0x1 + beq _020BE1EC + ands r1, r3, #0x2 + movne r1, r3, lsr #0x2 + addne r2, r1, #0x1 + moveq r2, r3, lsr #0x2 + addeq r1, r2, #0x1 + mov r12, r2, lsl #0x2 + add r3, r0, r2, lsl #0x2 + mov r2, r1, lsl #0x2 + add r1, r0, r1, lsl #0x2 + ldrsh r12, [r0, r12] + ldrsh r2, [r0, r2] + mov r0, #0x3 + ldrsh r3, [r3, #0x2] + ldrsh r1, [r1, #0x2] + mla r2, r12, r0, r2 + mla r1, r3, r0, r1 + ldr r0, _020BE234 ; =0x0000FFFF + mov r1, r1, asr #0x2 + and r0, r0, r2, asr #0x2 + orr r0, r0, r1, lsl #0x10 + bx lr +_020BE1EC: + mov r2, r3, lsr #0x2 + b _020BE200 +_020BE1F4: + mov r3, r3, lsr #0x2 +_020BE1F8: + ldr r0, [r0, r3, lsl #0x2] + bx lr +_020BE200: + add r1, r0, r2, lsl #0x2 + mov r2, r2, lsl #0x2 + ldrsh r12, [r0, r2] + ldrsh r3, [r1, #0x4] + ldrsh r2, [r1, #0x2] + ldrsh r1, [r1, #0x6] + ldr r0, _020BE234 ; =0x0000FFFF + add r3, r12, r3 + add r1, r2, r1 + and r2, r0, r3, asr #0x1 + mov r0, r1, asr #0x1 + orr r0, r2, r0, lsl #0x10 + bx lr + .balign 4 +_020BE234: .word 0x0000FFFF + + arm_func_start FUN_020BE238 +FUN_020BE238: + ands r12, r1, #0x20000000 + movne r0, r2 + bxne lr + add r0, r0, r2 + ands r2, r1, #0xc0000000 + beq _020BE2F0 + ldr r2, _020BE330 ; =0x0000FFFF + ands r12, r1, #0x40000000 + and r12, r1, r2 + beq _020BE288 + ands r2, r3, #0x1 + beq _020BE280 + cmp r3, r12 + movhi r2, r12, lsr #0x1 + addhi r3, r2, #0x1 + bhi _020BE2F0 + mov r3, r3, lsr #0x1 + b _020BE304 +_020BE280: + mov r3, r3, lsr #0x1 + b _020BE2F0 +_020BE288: + ands r2, r3, #0x3 + beq _020BE2EC + cmp r3, r12 + addhi r3, r2, r12, lsr #0x2 + bhi _020BE2F0 + ands r2, r3, #0x1 + beq _020BE2E4 + ands r2, r3, #0x2 + movne r3, r3, lsr #0x2 + addne r2, r3, #0x1 + moveq r2, r3, lsr #0x2 + addeq r3, r2, #0x1 + ands r1, r1, #0x10000000 + movne r2, r2, lsl #0x1 + movne r1, r3, lsl #0x1 + ldrnesh r2, [r0, r2] + ldrnesh r1, [r0, r1] + ldreq r2, [r0, r2, lsl #0x2] + ldreq r1, [r0, r3, lsl #0x2] + mov r0, #0x3 + mla r0, r2, r0, r1 + mov r0, r0, asr #0x2 + bx lr +_020BE2E4: + mov r3, r3, lsr #0x2 + b _020BE304 +_020BE2EC: + mov r3, r3, lsr #0x2 +_020BE2F0: + ands r1, r1, #0x10000000 + movne r1, r3, lsl #0x1 + ldrnesh r0, [r0, r1] + ldreq r0, [r0, r3, lsl #0x2] + bx lr +_020BE304: + ands r1, r1, #0x10000000 + movne r2, r3, lsl #0x1 + addne r1, r0, r3, lsl #0x1 + ldrnesh r2, [r0, r2] + ldrnesh r0, [r1, #0x2] + addeq r1, r0, r3, lsl #0x2 + ldreq r2, [r0, r3, lsl #0x2] + ldreq r0, [r1, #0x4] + add r0, r2, r0 + mov r0, r0, asr #0x1 + bx lr + .balign 4 +_020BE330: .word 0x0000FFFF + + arm_func_start FUN_020BE334 +FUN_020BE334: ; 0x020BE334 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r1 + ldr r3, [r6, #0x0] + ldr r5, [r6, #0x8] + mov r1, r2, lsl #0x10 + mov r2, r3, lsl #0x4 + mov r7, r0 + mov r0, r5 + mov r1, r1, lsr #0x10 + mov r2, r2, lsr #0x10 + bl FUN_020BC42C + mov r4, r0 + ldrb r1, [r4, #0x2] + mov r0, r5 + bl FUN_020BC4B8 + mov r1, r0 + ldr r0, [r6, #0x14] + mov r2, r7 + bl FUN_020BE408 + ldrb r1, [r4, #0x3] + cmp r1, #0xff + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} +_020BE394: ; 0x020BE394 + mov r0, r5 + bl FUN_020BC4A8 + mov r1, r0 + ldr r0, [r6, #0x14] + mov r2, r7 + bl FUN_020BE3B4 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020BE3B4 +FUN_020BE3B4: ; 0x020BE3B4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldrh r0, [r5, #0x34] + mov r4, r2 + add r0, r5, r0 + bl FUN_020BC2A0 + ldr r1, [r5, #0x2c] + ldrh r2, [r0, #0x2] + mov r1, r1, lsl #0x10 + mov r3, r1, lsr #0x10 + ands r1, r2, #0x1 + ldrh r0, [r0, #0x0] + moveq r1, r3, lsl #0xf + moveq r3, r1, lsr #0x10 + moveq r0, r0, lsl #0xf + moveq r0, r0, lsr #0x10 + add r0, r0, r3 + str r0, [r4, #0x14] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020BE408 +FUN_020BE408: ; 0x020BE408 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + add r0, r5, #0x3c + mov r4, r2 + bl FUN_020BC2A0 + ldr r1, [r0, #0x0] + ldr r3, [r4, #0x10] + and r1, r1, #0x1c000000 + cmp r1, #0x14000000 + ldrne r2, [r5, #0x8] + ldrne r1, _020BE4E0 ; =0x0000FFFF + andne r5, r2, r1 + ldreq r2, [r5, #0x18] + ldreq r1, _020BE4E0 ; =0x0000FFFF + andeq r5, r2, r1 + ldr r1, _020BE4E4 ; =0xC00F0000 + ldr r2, _020BE4E8 ; =0x000007FF + and r1, r3, r1 + str r1, [r4, #0x10] + ldr r1, [r0, #0x0] + ldr r3, [r4, #0x10] + add r1, r1, r5 + orr r1, r3, r1 + str r1, [r4, #0x10] + ldr r3, [r0, #0x4] + ldr r1, _020BE4EC ; =0x003FF800 + and r3, r3, r2 + strh r3, [r4, #0x2c] + ldr r3, [r0, #0x4] + and r1, r3, r1 + mov r1, r1, lsr #0xb + strh r1, [r4, #0x2e] + ldr r3, [r0, #0x4] + ldrh r1, [r4, #0x2c] + and r0, r3, r2 + and r5, r2, r3, lsr #0xb + cmp r0, r1 + moveq r0, #0x1000 + beq _020BE4B4 + mov r0, r0, lsl #0xc + mov r1, r1, lsl #0xc + bl FX_Div +_020BE4B4: + str r0, [r4, #0x30] + ldrh r1, [r4, #0x2e] + cmp r5, r1 + moveq r0, #0x1000 + beq _020BE4D4 + mov r0, r5, lsl #0xc + mov r1, r1, lsl #0xc + bl FX_Div +_020BE4D4: + str r0, [r4, #0x34] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020BE4E0: .word 0x0000FFFF +_020BE4E4: .word 0xC00F0000 +_020BE4E8: .word 0x000007FF +_020BE4EC: .word 0x003FF800 + + arm_func_start FUN_020BE4F0 +FUN_020BE4F0: ; 0x020BE4F0 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r3, _020BE59C ; =0x021065A4 + ldr r4, [r2, #0x8] + ldr r3, [r3, #0x0] + mov r9, r0 + str r3, [r9, #0xc] + ldrb r0, [r2, #0x18] + mov r8, r1 + add r4, r2, r4 + strb r0, [r9, #0x19] + str r8, [r9, #0x8] + ldrb r2, [r9, #0x19] + add r1, r9, #0x1a + mov r0, #0x0 + mov r2, r2, lsl #0x1 + bl MIi_CpuClear16 + ldrb r0, [r8, #0xd] + mov r7, #0x0 + cmp r0, #0x0 + addls sp, sp, #0x4 + ldmlsia sp!, {r4-r9,pc} +_020BE548: ; 0x020BE548 + mov r6, r7 + add r5, r8, #0xc + add r4, r4, #0x4 +_020BE554: + ldrh r1, [r8, #0x12] + mov r0, r4 + add r2, r5, r1 + ldrh r1, [r2, #0x2] + add r1, r2, r1 + add r1, r1, r6 + bl FUN_020BC14C +_020BE570: ; 0x020BE570 + cmp r0, #0x0 + orrge r1, r7, #0x100 + addge r0, r9, r0, lsl #0x1 + strgeh r1, [r0, #0x1a] + ldrb r0, [r8, #0xd] + add r7, r7, #0x1 + add r6, r6, #0x10 + cmp r7, r0 + blo _020BE554 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020BE59C: .word 0x021065A4 + + arm_func_start FUN_020BE5A0 +FUN_020BE5A0: ; 0x020BE5A0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr lr, [r1, #0x8] + ldr r3, [r1, #0x0] + ldrh r1, [lr, #0x6] + mov r12, r3, asr #0xc + mov r3, #0x1 + mla r2, r12, r1, r2 + mov r1, r2, lsr #0x5 + add r1, lr, r1, lsl #0x2 + ldr r1, [r1, #0xc] + and r2, r2, #0x1f + and r1, r1, r3, lsl r2 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020BE5E0 +FUN_020BE5E0: ; 0x020BE5E0 + ldr r3, _020BE628 ; =0x02106598 + mov r12, #0x0 + ldr r3, [r3, #0x0] + str r3, [r0, #0xc] + ldrb r2, [r2, #0x17] + strb r2, [r0, #0x19] + str r1, [r0, #0x8] + ldrb r1, [r0, #0x19] + cmp r1, #0x0 + bxls lr +_020BE608: + orr r2, r12, #0x100 + add r1, r0, r12, lsl #0x1 + strh r2, [r1, #0x1a] + ldrb r1, [r0, #0x19] + add r12, r12, #0x1 + cmp r12, r1 + blo _020BE608 + bx lr + .balign 4 +_020BE628: .word 0x02106598 + + arm_func_start FUN_020BE62C +FUN_020BE62C: ; 0x020BE62C + ands r2, r3, #0x4 + ldrne r1, [r0, #0x0] + orrne r1, r1, #0x1 + strne r1, [r0, #0x0] + bne _020BE658 + + arm_func_start FUN_020BE640 +FUN_020BE640: ; 0x020BE640 + ldr r2, [r1, #0x0] + str r2, [r0, #0x4] + ldr r2, [r1, #0x4] + str r2, [r0, #0x8] + ldr r1, [r1, #0x8] + str r1, [r0, #0xc] +_020BE658: + ldr r1, [r0, #0x0] + orr r1, r1, #0x18 + str r1, [r0, #0x0] + bx lr + + arm_func_start FUN_020BE668 +FUN_020BE668: ; 0x020BE668 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r1, [r4, #0x0] + ands r0, r1, #0x4 + bne _020BE6AC + ands r0, r1, #0x2 + bne _020BE698 + add r1, r4, #0x28 + mov r0, #0x19 + mov r2, #0xc + bl FUN_020BB1C0 + b _020BE6C4 +_020BE698: + add r1, r4, #0x4c + mov r0, #0x1c + mov r2, #0x3 + bl FUN_020BB1C0 + b _020BE6C4 +_020BE6AC: + ands r0, r1, #0x2 + bne _020BE6C4 + add r1, r4, #0x28 + mov r0, #0x1a + mov r2, #0x9 + bl FUN_020BB1C0 +_020BE6C4: + ldr r0, [r4, #0x0] + ands r0, r0, #0x1 + ldmneia sp!, {r4,pc} +_020BE6D0: ; 0x020BE6D0 + add r1, r4, #0x4 + mov r0, #0x1b + mov r2, #0x3 + bl FUN_020BB1C0 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020BE6E4 +FUN_020BE6E4: ; 0x020BE6E4 + stmdb sp!, {r4,lr} + sub sp, sp, #0x50 + mov r4, r0 + ldr r0, [r4, #0x0] + mov r1, #0x0 + ands r0, r0, #0x8 + ldrne r0, _020BE820 ; =0x00101610 + mov r3, #0x3 + strne r0, [sp, #0x0] + ldreq r0, _020BE824 ; =0x00101810 + mov r2, #0x2 + streq r0, [sp, #0x0] + mov r0, #0x1000 + str r0, [sp, #0x44] + str r3, [sp, #0x4] + str r2, [sp, #0x48] + str r1, [sp, #0x40] + str r1, [sp, #0x34] + str r1, [sp, #0x30] + str r1, [sp, #0x2c] + str r1, [sp, #0x28] + str r1, [sp, #0x24] + str r1, [sp, #0x20] + str r1, [sp, #0x14] + str r1, [sp, #0x10] + ldr r1, [r4, #0x0] + ldr r0, _020BE828 ; =0x021067B0 + and r1, r1, #0x7 + ldr r2, [r0, r1, lsl #0x2] + add r0, sp, #0x8 + mov r1, r4 + blx r2 + ldr r3, [r4, #0x30] + cmp r3, #0x1000 + beq _020BE7B4 + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + smull r2, r0, r3, r0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [sp, #0x8] + ldr r2, [r4, #0x30] + ldr r0, [sp, #0x38] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [sp, #0xc] + ldr r1, [r4, #0x30] + smull r2, r0, r1, r0 + mov r1, r2, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [sp, #0x38] +_020BE7B4: + ldr r3, [r4, #0x34] + cmp r3, #0x1000 + beq _020BE804 + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x1c] + smull r2, r0, r3, r0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [sp, #0x18] + ldr r2, [r4, #0x34] + ldr r0, [sp, #0x3c] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [sp, #0x1c] + ldr r1, [r4, #0x34] + smull r2, r0, r1, r0 + mov r1, r2, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [sp, #0x3c] +_020BE804: + add r1, sp, #0x0 + ldr r0, [sp, #0x0] + add r1, r1, #0x4 + mov r2, #0x12 + bl FUN_020BB1C0 + add sp, sp, #0x50 + ldmia sp!, {r4,pc} + .balign 4 +_020BE820: .word 0x00101610 +_020BE824: .word 0x00101810 +_020BE828: .word 0x021067B0 + + arm_func_start FUN_020BE82C +FUN_020BE82C: ; 0x020BE82C + mov r2, #0x1000 + str r2, [r0, #0x0] + mov r1, #0x0 + str r1, [r0, #0x4] + str r1, [r0, #0x10] + str r2, [r0, #0x14] + str r1, [r0, #0x30] + str r1, [r0, #0x34] + bx lr + + arm_func_start FUN_020BE850 +FUN_020BE850: ; 0x020BE850 + ldr r2, [r1, #0x18] + mov r12, #0x0 + str r2, [r0, #0x0] + ldr r2, [r1, #0x1c] + str r2, [r0, #0x14] + str r12, [r0, #0x4] + str r12, [r0, #0x30] + ldr r2, [r1, #0x1c] + ldrh r3, [r1, #0x2e] + mov r1, r2, lsl #0x1 + rsb r1, r1, #0x0 + add r1, r1, #0x2000 + mul r1, r3, r1 + mov r1, r1, lsl #0x3 + str r1, [r0, #0x34] + str r12, [r0, #0x10] + bx lr + + arm_func_start FUN_020BE894 +FUN_020BE894: ; 0x020BE894 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldrh r2, [r5, #0x2c] + ldrh r1, [r5, #0x2e] + mov r6, r0 + mov r4, r2, lsl #0xc + mov r7, r1, lsl #0xc + mov r0, r7 + mov r1, r4 + bl FX_DivAsync + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x0] + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x14] + bl FX_GetDivResult + ldrsh r2, [r5, #0x20] + mov r1, r7 + rsb r2, r2, #0x0 + mul r0, r2, r0 + mov r2, r0, asr #0xc + mov r0, r4 + str r2, [r6, #0x4] + bl FX_DivAsync + ldrsh r1, [r5, #0x20] + ldrsh r0, [r5, #0x22] + ldrh r2, [r5, #0x2c] + add r0, r1, r0 + rsb r0, r0, #0x0 + add r0, r0, #0x1000 + mul r0, r2, r0 + mov r0, r0, lsl #0x3 + str r0, [r6, #0x30] + ldrsh r1, [r5, #0x20] + ldrsh r0, [r5, #0x22] + ldrh r2, [r5, #0x2e] + sub r0, r1, r0 + add r0, r0, #0x1000 + mul r0, r2, r0 + mov r0, r0, lsl #0x3 + str r0, [r6, #0x34] + bl FX_GetDivResult + ldrsh r1, [r5, #0x20] + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r6, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020BE954 +FUN_020BE954: ; 0x020BE954 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r9, r1 + ldrh r2, [r9, #0x2c] + ldrh r1, [r9, #0x2e] + mov r10, r0 + mov r8, r2, lsl #0xc + mov r11, r1, lsl #0xc + mov r0, r11 + mov r1, r8 + bl FX_DivAsync + ldrsh r5, [r9, #0x22] + ldr r3, [r9, #0x18] + ldrsh r0, [r9, #0x20] + ldr r4, [r9, #0x1c] + smull r2, r1, r3, r5 + mov r6, r2, lsr #0xc + orr r6, r6, r1, lsl #0x14 + smull r2, r1, r3, r0 + mov r7, r2, lsr #0xc + orr r7, r7, r1, lsl #0x14 + smull r3, r2, r4, r0 + smull r1, r0, r4, r5 + mov r5, r3, lsr #0xc + orr r5, r5, r2, lsl #0x14 + mov r4, r1, lsr #0xc + orr r4, r4, r0, lsl #0x14 + str r6, [r10, #0x0] + str r4, [r10, #0x14] + bl FX_GetDivResult + mov r1, r11 + rsb r2, r5, #0x0 + mul r0, r2, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x4] + mov r0, r8 + bl FX_DivAsync + sub r1, r5, r4 + add r0, r7, r6 + ldrh r3, [r9, #0x2c] + ldr r2, [r9, #0x18] + sub r0, r2, r0 + mul r0, r3, r0 + mov r0, r0, lsl #0x3 + str r0, [r10, #0x30] + ldrh r2, [r9, #0x2e] + ldr r0, [r9, #0x1c] + sub r0, r1, r0 + add r0, r0, #0x2000 + mul r0, r2, r0 + mov r0, r0, lsl #0x3 + str r0, [r10, #0x34] + bl FX_GetDivResult + mul r0, r7, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020BEA3C +FUN_020BEA3C: ; 0x020BEA3C + mov r2, #0x1000 + str r2, [r0, #0x0] + str r2, [r0, #0x14] + mov r12, #0x0 + str r12, [r0, #0x4] + ldrh r2, [r1, #0x2c] + ldr r3, [r1, #0x24] + mul r2, r3, r2 + rsb r2, r2, #0x0 + mov r2, r2, lsl #0x4 + str r2, [r0, #0x30] + ldrh r2, [r1, #0x2e] + ldr r1, [r1, #0x28] + mul r2, r1, r2 + mov r1, r2, lsl #0x4 + str r1, [r0, #0x34] + str r12, [r0, #0x10] + bx lr + + arm_func_start FUN_020BEA84 +FUN_020BEA84: ; 0x020BEA84 + stmdb sp!, {r4,lr} + ldr r3, [r1, #0x18] + mov r2, #0x0 + str r3, [r0, #0x0] + ldr r3, [r1, #0x1c] + str r3, [r0, #0x14] + str r2, [r0, #0x4] + ldr r4, [r1, #0x18] + ldr r3, [r1, #0x24] + ldrh lr, [r1, #0x2c] + smull r12, r3, r4, r3 + mov r4, r12, lsr #0x8 + orr r4, r4, r3, lsl #0x18 + rsb r3, r4, #0x0 + mul r3, lr, r3 + str r3, [r0, #0x30] + ldr r4, [r1, #0x1c] + ldr r12, [r1, #0x28] + mov r3, r4, lsl #0x1 + smull lr, r12, r4, r12 + rsb r4, r3, #0x0 + mov r3, lr, lsr #0x8 + ldrh lr, [r1, #0x2e] + add r1, r4, #0x2000 + orr r3, r3, r12, lsl #0x18 + mul r4, lr, r1 + mul r1, lr, r3 + add r1, r1, r4, lsl #0x3 + str r1, [r0, #0x34] + str r2, [r0, #0x10] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020BEB00 +FUN_020BEB00: ; 0x020BEB00 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldrh r2, [r5, #0x2c] + ldrh r1, [r5, #0x2e] + mov r6, r0 + mov r4, r2, lsl #0xc + mov r7, r1, lsl #0xc + mov r0, r7 + mov r1, r4 + bl FX_DivAsync + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x0] + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x14] + bl FX_GetDivResult + ldrsh r2, [r5, #0x20] + mov r1, r7 + rsb r2, r2, #0x0 + mul r0, r2, r0 + mov r2, r0, asr #0xc + mov r0, r4 + str r2, [r6, #0x4] + bl FX_DivAsync + ldrsh r2, [r5, #0x20] + ldrsh r1, [r5, #0x22] + ldrh r3, [r5, #0x2c] + ldr r0, [r5, #0x24] + add r1, r2, r1 + rsb r1, r1, #0x0 + add r1, r1, #0x1000 + mul r2, r3, r1 + mul r1, r0, r3 + mov r0, r2, lsl #0x3 + sub r0, r0, r1, lsl #0x4 + str r0, [r6, #0x30] + ldrsh r2, [r5, #0x20] + ldrsh r1, [r5, #0x22] + ldrh r3, [r5, #0x2e] + ldr r0, [r5, #0x28] + sub r1, r2, r1 + add r1, r1, #0x1000 + mul r2, r3, r1 + mul r1, r0, r3 + mov r0, r2, lsl #0x3 + add r0, r0, r1, lsl #0x4 + str r0, [r6, #0x34] + bl FX_GetDivResult + ldrsh r1, [r5, #0x20] + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r6, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020BEBD8 +FUN_020BEBD8: ; 0x020BEBD8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r9, r1 + ldrh r2, [r9, #0x2c] + ldrh r1, [r9, #0x2e] + mov r10, r0 + mov r8, r2, lsl #0xc + mov r11, r1, lsl #0xc + mov r0, r11 + mov r1, r8 + bl FX_DivAsync + ldrsh r5, [r9, #0x22] + ldr r3, [r9, #0x18] + ldrsh r0, [r9, #0x20] + ldr r4, [r9, #0x1c] + smull r2, r1, r3, r5 + mov r6, r2, lsr #0xc + orr r6, r6, r1, lsl #0x14 + smull r2, r1, r3, r0 + mov r7, r2, lsr #0xc + orr r7, r7, r1, lsl #0x14 + smull r3, r2, r4, r0 + smull r1, r0, r4, r5 + mov r5, r3, lsr #0xc + orr r5, r5, r2, lsl #0x14 + mov r4, r1, lsr #0xc + orr r4, r4, r0, lsl #0x14 + str r6, [r10, #0x0] + str r4, [r10, #0x14] + bl FX_GetDivResult + mov r1, r11 + rsb r2, r5, #0x0 + mul r0, r2, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x4] + mov r0, r8 + bl FX_DivAsync + sub r1, r5, r4 + add r2, r7, r6 + ldr r5, [r9, #0x18] + ldrh r0, [r9, #0x2c] + sub r3, r5, r2 + ldr r2, [r9, #0x24] + mul r4, r0, r3 + smull r3, r2, r5, r2 + mov r4, r4, lsl #0x3 + mov r3, r3, lsr #0x8 + orr r3, r3, r2, lsl #0x18 + mul r2, r0, r3 + sub r0, r4, r2 + str r0, [r10, #0x30] + ldr r4, [r9, #0x1c] + ldrh r3, [r9, #0x2e] + sub r0, r1, r4 + add r0, r0, #0x2000 + mul r2, r3, r0 + ldr r0, [r9, #0x28] + smull r1, r0, r4, r0 + mov r1, r1, lsr #0x8 + orr r1, r1, r0, lsl #0x18 + mul r0, r3, r1 + add r0, r0, r2, lsl #0x3 + str r0, [r10, #0x34] + bl FX_GetDivResult + mul r0, r7, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020BECEC +FUN_020BECEC: ; 0x020BECEC + stmdb sp!, {r4-r8,lr} + mov r12, r0 + ands r0, r3, #0x4 + ldrb r3, [r2, #0x3] + beq _020BED40 + ldr r1, [r12, #0x0] + ands r0, r3, #0x2 + orr r0, r1, #0x1 + str r0, [r12, #0x0] + beq _020BEDB8 + ldr r0, _020BEE2C ; =0x021CEF7C + ldrb r7, [r2, #0x1] + ldr r0, [r0, #0x0] + mov r1, #0x1 + add r6, r0, #0xc4 + mov r5, r7, lsr #0x5 + ldr r4, [r6, r5, lsl #0x2] + and r0, r7, #0x1f + orr r0, r4, r1, lsl r0 + str r0, [r6, r5, lsl #0x2] + b _020BEDB8 +_020BED40: + ldr r4, [r1, #0x0] + ands r0, r3, #0x2 + str r4, [r12, #0x4] + ldr r0, [r1, #0x4] + str r0, [r12, #0x8] + ldr r0, [r1, #0x8] + str r0, [r12, #0xc] + beq _020BEDB8 + ldr lr, _020BEE2C ; =0x021CEF7C + ldrb r0, [r2, #0x1] + ldr r4, [lr, #0x0] + mov lr, #0x18 + add r8, r4, #0xc4 + mov r7, r0, lsr #0x5 + and r4, r0, #0x1f + mov r5, #0x1 + mvn r4, r5, lsl r4 + ldr r6, [r8, r7, lsl #0x2] + mul r5, r0, lr + and r0, r6, r4 + str r0, [r8, r7, lsl #0x2] + ldr r4, [r1, #0xc] + ldr r0, _020BEE30 ; =0x021CFD8C + ldr lr, _020BEE34 ; =0x021CFD90 + str r4, [r0, r5] + ldr r4, [r1, #0x10] + ldr r0, _020BEE38 ; =0x021CFD94 + str r4, [lr, r5] + ldr r1, [r1, #0x14] + str r1, [r0, r5] +_020BEDB8: + ands r0, r3, #0x1 + beq _020BEE1C + ldrb r0, [r2, #0x2] + ldr r2, [r12, #0x0] + ldr r1, _020BEE2C ; =0x021CEF7C + orr r2, r2, #0x20 + str r2, [r12, #0x0] + ldr r2, [r1, #0x0] + mov r1, r0, lsr #0x5 + add r1, r2, r1, lsl #0x2 + and r2, r0, #0x1f + mov r3, #0x1 + mov r2, r3, lsl r2 + ldr r1, [r1, #0xc4] + ands r1, r2, r1 + ldrne r0, [r12, #0x0] + orrne r0, r0, #0x8 + strne r0, [r12, #0x0] + bne _020BEE1C + ldr r2, _020BEE30 ; =0x021CFD8C + mov r1, #0x18 + mla r1, r0, r1, r2 + add r3, r12, #0x10 + ldmia r1, {r0-r2} + stmia r3, {r0-r2} +_020BEE1C: + ldr r0, [r12, #0x0] + orr r0, r0, #0x10 + str r0, [r12, #0x0] + ldmia sp!, {r4-r8,pc} + .balign 4 +_020BEE2C: .word 0x021CEF7C +_020BEE30: .word 0x021CFD8C +_020BEE34: .word 0x021CFD90 +_020BEE38: .word 0x021CFD94 + + arm_func_start FUN_020BEE3C +FUN_020BEE3C: ; 0x020BEE3C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r1, [r5, #0x0] + mov r4, #0x0 + ands r0, r1, #0x4 + moveq r4, #0x1 + ands r0, r1, #0x20 + beq _020BEE94 + ands r0, r1, #0x8 + bne _020BEE94 + cmp r4, #0x0 + beq _020BEE84 + add r1, r5, #0x4c + mov r0, #0x1c + mov r2, #0x3 + bl FUN_020BB1C0 + mov r4, #0x0 +_020BEE84: + add r1, r5, #0x10 + mov r0, #0x1b + mov r2, #0x3 + bl FUN_020BB1C0 +_020BEE94: + ldr r0, [r5, #0x0] + ands r0, r0, #0x2 + bne _020BEED0 + cmp r4, #0x0 + beq _020BEEBC + add r1, r5, #0x28 + mov r0, #0x19 + mov r2, #0xc + bl FUN_020BB1C0 + b _020BEEE8 +_020BEEBC: + add r1, r5, #0x28 + mov r0, #0x1a + mov r2, #0x9 + bl FUN_020BB1C0 + b _020BEEE8 +_020BEED0: + cmp r4, #0x0 + beq _020BEEE8 + add r1, r5, #0x4c + mov r0, #0x1c + mov r2, #0x3 + bl FUN_020BB1C0 +_020BEEE8: + ldr r0, [r5, #0x0] + ands r0, r0, #0x1 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,pc} +_020BEEF8: ; 0x020BEEF8 + add r1, r5, #0x4 + mov r0, #0x1b + mov r2, #0x3 + bl FUN_020BB1C0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020BEF10 +FUN_020BEF10: ; 0x020BEF10 + stmdb sp!, {lr} + sub sp, sp, #0x3c + ldr r1, [r0, #0x0] + mov r3, #0x0 + ands r1, r1, #0x8 + ldrne r1, _020BF0CC ; =0x00101710 + mov r2, #0x3 + strne r1, [sp, #0x0] + ldreq r1, _020BF0D0 ; =0x00101910 + str r3, [sp, #0x34] + streq r1, [sp, #0x0] + mov r1, #0x2 + str r1, [sp, #0x38] + str r3, [sp, #0x28] + str r3, [sp, #0x24] + str r3, [sp, #0x20] + str r3, [sp, #0x1c] + str r3, [sp, #0x14] + str r3, [sp, #0x10] + str r3, [sp, #0xc] + str r2, [sp, #0x4] + ldr r2, [r0, #0x0] + ands r1, r2, #0x4 + beq _020BEFA0 + str r3, [sp, #0x2c] + str r3, [sp, #0x30] + ldr r1, [r0, #0x0] + ands r1, r1, #0x1 + movne r1, #0x1000 + strne r1, [sp, #0x8] + strne r1, [sp, #0x18] + ldreq r1, [r0, #0x18] + streq r1, [sp, #0x8] + ldreq r1, [r0, #0x1c] + streq r1, [sp, #0x18] + b _020BF040 +_020BEFA0: + ands r1, r2, #0x1 + beq _020BEFE8 + ldr r2, [r0, #0x24] + ldrh r1, [r0, #0x2c] + mov r2, r2, lsl #0x4 + rsb r2, r2, #0x0 + mul r1, r2, r1 + str r1, [sp, #0x2c] + ldr r2, [r0, #0x28] + ldrh r1, [r0, #0x2e] + mov r2, r2, lsl #0x4 + rsb r2, r2, #0x0 + mul r3, r2, r1 + mov r1, #0x1000 + str r3, [sp, #0x30] + str r1, [sp, #0x8] + str r1, [sp, #0x18] + b _020BF040 +_020BEFE8: + ldr r2, [r0, #0x18] + ldr r1, [r0, #0x24] + ldrh r12, [r0, #0x2c] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0x8 + orr r2, r2, r1, lsl #0x18 + rsb r1, r2, #0x0 + mul r1, r12, r1 + str r1, [sp, #0x2c] + ldr r2, [r0, #0x1c] + ldr r1, [r0, #0x28] + ldrh r12, [r0, #0x2e] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0x8 + orr r2, r2, r1, lsl #0x18 + rsb r1, r2, #0x0 + mul r1, r12, r1 + str r1, [sp, #0x30] + ldr r1, [r0, #0x18] + str r1, [sp, #0x8] + ldr r1, [r0, #0x1c] + str r1, [sp, #0x18] +_020BF040: + ldr r12, [r0, #0x30] + cmp r12, #0x1000 + beq _020BF078 + ldr r2, [sp, #0x8] + ldr r1, [sp, #0x2c] + smull r3, r2, r12, r2 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + str r3, [sp, #0x8] + ldr r2, [r0, #0x30] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [sp, #0x2c] +_020BF078: + ldr r12, [r0, #0x34] + cmp r12, #0x1000 + beq _020BF0B0 + ldr r2, [sp, #0x18] + ldr r1, [sp, #0x30] + smull r3, r2, r12, r2 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + str r3, [sp, #0x18] + ldr r0, [r0, #0x34] + smull r2, r1, r0, r1 + mov r0, r2, lsr #0xc + orr r0, r0, r1, lsl #0x14 + str r0, [sp, #0x30] +_020BF0B0: + add r1, sp, #0x0 + ldr r0, [sp, #0x0] + add r1, r1, #0x4 + mov r2, #0xe + bl FUN_020BB1C0 + add sp, sp, #0x3c + ldmia sp!, {pc} + .balign 4 +_020BF0CC: .word 0x00101710 +_020BF0D0: .word 0x00101910 + + arm_func_start FUN_020BF0D4 +FUN_020BF0D4: ; 0x020BF0D4 + stmdb sp!, {r4-r8,lr} + mov r5, r0 + ands r0, r3, #0x4 + ldrb r4, [r2, #0x1] + ldrb r0, [r2, #0x2] + beq _020BF174 + ldr r2, [r5, #0x0] + ldr r1, _020BF2E0 ; =0x021CEF7C + orr r2, r2, #0x1 + str r2, [r5, #0x0] + ldr r3, [r1, #0x0] + mov r1, r0, lsr #0x5 + add r1, r3, r1, lsl #0x2 + and r2, r0, #0x1f + mov r6, #0x1 + mov r2, r6, lsl r2 + ldr r1, [r1, #0xc4] + ands r1, r2, r1 + beq _020BF148 + add r3, r3, #0xc4 + mov r2, r4, lsr #0x5 + ldr r1, [r3, r2, lsl #0x2] + and r0, r4, #0x1f + orr r0, r1, r6, lsl r0 + str r0, [r3, r2, lsl #0x2] + ldr r0, [r5, #0x0] + orr r0, r0, #0x18 + str r0, [r5, #0x0] + ldmia sp!, {r4-r8,pc} +_020BF148: + ldr r1, _020BF2E4 ; =0x021CFD80 + mov r2, #0x18 + mla r6, r0, r2, r1 + mla r1, r4, r2, r1 + mov r0, r6 + bl MIi_CpuCopy32 + mov r0, r6 + add r1, r5, #0x10 + mov r2, #0x18 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r8,pc} +_020BF174: + ldr r3, [r1, #0x0] + ldr r2, _020BF2E0 ; =0x021CEF7C + str r3, [r5, #0x4] + ldr r3, [r1, #0x4] + mov r7, r0, lsr #0x5 + str r3, [r5, #0x8] + ldr r3, [r1, #0x8] + and r8, r0, #0x1f + str r3, [r5, #0xc] + ldr r6, [r2, #0x0] + mov r3, #0x1 + add r2, r6, r7, lsl #0x2 + mov r7, r3, lsl r8 + ldr r2, [r2, #0xc4] + ands r2, r7, r2 + beq _020BF200 + ldr r3, _020BF2E4 ; =0x021CFD80 + mov r2, #0x18 + mov r0, r1 + mla r1, r4, r2, r3 + bl MIi_CpuCopy32 + ldr r0, _020BF2E0 ; =0x021CEF7C + mov r2, r4, lsr #0x5 + ldr r1, [r0, #0x0] + and r0, r4, #0x1f + add r3, r1, #0xc4 + mov r1, #0x1 + mvn r0, r1, lsl r0 + ldr r1, [r3, r2, lsl #0x2] + and r0, r1, r0 + str r0, [r3, r2, lsl #0x2] + ldr r0, [r5, #0x0] + orr r0, r0, #0x18 + str r0, [r5, #0x0] + ldmia sp!, {r4-r8,pc} +_020BF200: + mov r2, #0x18 + mul r12, r0, r2 + and r7, r4, #0x1f + ldr r0, _020BF2E4 ; =0x021CFD80 + add r6, r6, #0xc4 + mov lr, r4, lsr #0x5 + mvn r7, r3, lsl r7 + ldr r8, [r6, lr, lsl #0x2] + mul r3, r4, r2 + and r4, r8, r7 + str r4, [r6, lr, lsl #0x2] + ldr r7, [r1, #0x0] + ldr r4, [r0, r12] + ldr r6, _020BF2E8 ; =0x021CFD84 + smull r8, r4, r7, r4 + mov r7, r8, lsr #0xc + orr r7, r7, r4, lsl #0x14 + str r7, [r0, r3] + ldr r8, [r1, #0x4] + ldr r4, [r6, r12] + ldr r7, _020BF2EC ; =0x021CFD88 + smull lr, r4, r8, r4 + mov r8, lr, lsr #0xc + orr r8, r8, r4, lsl #0x14 + str r8, [r6, r3] + ldr r8, [r1, #0x8] + ldr r4, [r7, r12] + ldr r6, _020BF2F0 ; =0x021CFD8C + smull lr, r4, r8, r4 + mov r8, lr, lsr #0xc + orr r8, r8, r4, lsl #0x14 + str r8, [r7, r3] + ldr r7, [r1, #0xc] + ldr r4, [r6, r12] + ldr lr, _020BF2F4 ; =0x021CFD90 + smull r8, r4, r7, r4 + mov r7, r8, lsr #0xc + orr r7, r7, r4, lsl #0x14 + str r7, [r6, r3] + ldr r7, [r1, #0x10] + ldr r4, [lr, r12] + ldr r6, _020BF2F8 ; =0x021CFD94 + smull r8, r4, r7, r4 + add r0, r0, r12 + mov r7, r8, lsr #0xc + orr r7, r7, r4, lsl #0x14 + str r7, [lr, r3] + ldr lr, [r1, #0x14] + ldr r4, [r6, r12] + add r1, r5, #0x10 + smull r5, r4, lr, r4 + mov r5, r5, lsr #0xc + orr r5, r5, r4, lsl #0x14 + str r5, [r6, r3] + bl MIi_CpuCopy32 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020BF2E0: .word 0x021CEF7C +_020BF2E4: .word 0x021CFD80 +_020BF2E8: .word 0x021CFD84 +_020BF2EC: .word 0x021CFD88 +_020BF2F0: .word 0x021CFD8C +_020BF2F4: .word 0x021CFD90 +_020BF2F8: .word 0x021CFD94 + + arm_func_start FUN_020BF2FC +FUN_020BF2FC: ; 0x020BF2FC + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x10 + mov r6, r0 + ldr r0, [r6, #0x0] + mov r5, #0x0 + ands r4, r0, #0x18 + bne _020BF328 + add r1, r6, #0x1c + mov r0, #0x1b + mov r2, #0x3 + bl FUN_020BB1C0 +_020BF328: + ldr r0, [r6, #0x0] + ands r0, r0, #0x4 + bne _020BF398 + cmp r4, #0x0 + movne r5, #0x1 + bne _020BF398 + ldr r2, [r6, #0x4c] + ldr r0, [r6, #0x10] + add r1, sp, #0x0 + smull r3, r0, r2, r0 + mov r2, r3, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [sp, #0x0] + ldr r3, [r6, #0x50] + ldr r2, [r6, #0x14] + mov r0, #0x1c + smull r12, r2, r3, r2 + mov r3, r12, lsr #0xc + orr r3, r3, r2, lsl #0x14 + str r3, [sp, #0x4] + ldr r12, [r6, #0x54] + ldr r3, [r6, #0x18] + mov r2, #0x3 + smull lr, r3, r12, r3 + mov r12, lr, lsr #0xc + orr r12, r12, r3, lsl #0x14 + str r12, [sp, #0x8] + bl FUN_020BB1C0 +_020BF398: + ldr r0, [r6, #0x0] + ands r0, r0, #0x2 + bne _020BF3D4 + cmp r5, #0x0 + beq _020BF3C0 + add r1, r6, #0x28 + mov r0, #0x19 + mov r2, #0xc + bl FUN_020BB1C0 + b _020BF3EC +_020BF3C0: + add r1, r6, #0x28 + mov r0, #0x1a + mov r2, #0x9 + bl FUN_020BB1C0 + b _020BF3EC +_020BF3D4: + cmp r5, #0x0 + beq _020BF3EC + add r1, r6, #0x4c + mov r0, #0x1c + mov r2, #0x3 + bl FUN_020BB1C0 +_020BF3EC: + cmp r4, #0x0 + bne _020BF404 + add r1, r6, #0x10 + mov r0, #0x1b + mov r2, #0x3 + bl FUN_020BB1C0 +_020BF404: + ldr r0, [r6, #0x0] + ands r0, r0, #0x1 + addne sp, sp, #0x10 + ldmneia sp!, {r4-r6,pc} +_020BF414: ; 0x020BF414 + add r1, r6, #0x4 + mov r0, #0x1b + mov r2, #0x3 + bl FUN_020BB1C0 + add sp, sp, #0x10 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BF42C +FUN_020BF42C: ; 0x020BF42C + stmdb sp!, {r4,lr} + sub sp, sp, #0x50 + mov r4, r0 + ldr r0, [r4, #0x0] + mov r1, #0x0 + ands r0, r0, #0x8 + ldrne r0, _020BF568 ; =0x00101610 + mov r3, #0x3 + strne r0, [sp, #0x0] + ldreq r0, _020BF56C ; =0x00101810 + mov r2, #0x2 + streq r0, [sp, #0x0] + mov r0, #0x1000 + str r0, [sp, #0x44] + str r3, [sp, #0x4] + str r2, [sp, #0x48] + str r1, [sp, #0x40] + str r1, [sp, #0x34] + str r1, [sp, #0x30] + str r1, [sp, #0x2c] + str r1, [sp, #0x28] + str r1, [sp, #0x24] + str r1, [sp, #0x20] + str r1, [sp, #0x14] + str r1, [sp, #0x10] + ldr r1, [r4, #0x0] + ldr r0, _020BF570 ; =0x021067D0 + and r1, r1, #0x7 + ldr r2, [r0, r1, lsl #0x2] + add r0, sp, #0x8 + mov r1, r4 + blx r2 + ldr r3, [r4, #0x30] + cmp r3, #0x1000 + beq _020BF4FC + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + smull r2, r0, r3, r0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [sp, #0x8] + ldr r2, [r4, #0x30] + ldr r0, [sp, #0x38] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [sp, #0xc] + ldr r1, [r4, #0x30] + smull r2, r0, r1, r0 + mov r1, r2, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [sp, #0x38] +_020BF4FC: + ldr r3, [r4, #0x34] + cmp r3, #0x1000 + beq _020BF54C + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x1c] + smull r2, r0, r3, r0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [sp, #0x18] + ldr r2, [r4, #0x34] + ldr r0, [sp, #0x3c] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [sp, #0x1c] + ldr r1, [r4, #0x34] + smull r2, r0, r1, r0 + mov r1, r2, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [sp, #0x3c] +_020BF54C: + add r1, sp, #0x0 + ldr r0, [sp, #0x0] + add r1, r1, #0x4 + mov r2, #0x12 + bl FUN_020BB1C0 + add sp, sp, #0x50 + ldmia sp!, {r4,pc} + .balign 4 +_020BF568: .word 0x00101610 +_020BF56C: .word 0x00101810 +_020BF570: .word 0x021067D0 + + arm_func_start FUN_020BF574 +FUN_020BF574: ; 0x020BF574 + mov r2, #0x1000 + str r2, [r0, #0x0] + mov r1, #0x0 + str r1, [r0, #0x4] + str r1, [r0, #0x10] + str r2, [r0, #0x14] + str r1, [r0, #0x30] + str r1, [r0, #0x34] + bx lr + + arm_func_start FUN_020BF598 +FUN_020BF598: ; 0x020BF598 + ldr r2, [r1, #0x18] + mov r12, #0x0 + str r2, [r0, #0x0] + ldr r2, [r1, #0x1c] + str r2, [r0, #0x14] + str r12, [r0, #0x4] + ldr r3, [r1, #0x18] + ldrh r2, [r1, #0x2c] + rsb r3, r3, #0x1000 + mul r2, r3, r2 + mov r2, r2, lsl #0x3 + str r2, [r0, #0x30] + ldr r2, [r1, #0x1c] + ldrh r1, [r1, #0x2e] + rsb r2, r2, #0x1000 + mul r1, r2, r1 + mov r1, r1, lsl #0x3 + str r1, [r0, #0x34] + str r12, [r0, #0x10] + bx lr + + arm_func_start FUN_020BF5E8 +FUN_020BF5E8: ; 0x020BF5E8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldrh r2, [r5, #0x2c] + ldrh r1, [r5, #0x2e] + mov r6, r0 + mov r4, r2, lsl #0xc + mov r7, r1, lsl #0xc + mov r0, r7 + mov r1, r4 + bl FX_DivAsync + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x0] + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x14] + bl FX_GetDivResult + ldrsh r2, [r5, #0x20] + mov r1, r7 + mul r0, r2, r0 + mov r2, r0, asr #0xc + mov r0, r4 + str r2, [r6, #0x4] + bl FX_DivAsync + ldrh r2, [r5, #0x2c] + ldrh r1, [r5, #0x2e] + ldrsh r4, [r5, #0x22] + rsb r0, r2, #0x0 + rsb r1, r1, #0x0 + mov r0, r0, lsl #0xb + ldrsh r3, [r5, #0x20] + mov r1, r1, lsl #0xb + smull r7, lr, r4, r0 + smull r12, r4, r3, r1 + subs r7, r7, r12 + sbc r3, lr, r4 + mov r4, r7, lsr #0x8 + orr r4, r4, r3, lsl #0x18 + add r2, r4, r2, lsl #0xf + str r2, [r6, #0x30] + ldrsh r2, [r5, #0x22] + ldrsh r3, [r5, #0x20] + ldrh r12, [r5, #0x2e] + smull r4, r1, r2, r1 + smlal r4, r1, r3, r0 + mov r0, r4, lsr #0x8 + orr r0, r0, r1, lsl #0x18 + add r0, r0, r12, lsl #0xf + str r0, [r6, #0x34] + bl FX_GetDivResult + ldrsh r1, [r5, #0x20] + rsb r1, r1, #0x0 + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r6, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020BF6C8 +FUN_020BF6C8: ; 0x020BF6C8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r9, r1 + ldrh r2, [r9, #0x2c] + ldrh r1, [r9, #0x2e] + mov r10, r0 + mov r8, r2, lsl #0xc + mov r11, r1, lsl #0xc + mov r0, r11 + mov r1, r8 + bl FX_DivAsync + ldrsh r0, [r9, #0x22] + ldr r3, [r9, #0x18] + ldrsh r5, [r9, #0x20] + ldr r4, [r9, #0x1c] + smull r2, r1, r3, r0 + mov r7, r2, lsr #0xc + orr r7, r7, r1, lsl #0x14 + smull r2, r1, r3, r5 + mov r6, r2, lsr #0xc + orr r6, r6, r1, lsl #0x14 + smull r3, r2, r4, r0 + smull r1, r0, r4, r5 + mov r5, r3, lsr #0xc + orr r5, r5, r2, lsl #0x14 + mov r4, r1, lsr #0xc + orr r4, r4, r0, lsl #0x14 + str r7, [r10, #0x0] + str r5, [r10, #0x14] + bl FX_GetDivResult + mov r1, r11 + mul r0, r4, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x4] + mov r0, r8 + bl FX_DivAsync + ldrh r3, [r9, #0x2c] + ldrh r1, [r9, #0x2e] + rsb r0, r3, #0x0 + rsb r1, r1, #0x0 + mov r2, r1, lsl #0xb + mov r11, r0, lsl #0xb + smull r1, r0, r7, r11 + smull r8, r7, r5, r2 + smlal r8, r7, r4, r11 + mov r4, r8, lsr #0x8 + orr r4, r4, r7, lsl #0x18 + smull r5, r2, r6, r2 + subs r1, r1, r5 + sbc r0, r0, r2 + mov r1, r1, lsr #0x8 + orr r1, r1, r0, lsl #0x18 + add r0, r1, r3, lsl #0xf + str r0, [r10, #0x30] + ldrh r0, [r9, #0x2e] + add r0, r4, r0, lsl #0xf + str r0, [r10, #0x34] + bl FX_GetDivResult + rsb r1, r6, #0x0 + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020BF7C8 +FUN_020BF7C8: ; 0x020BF7C8 + mov r2, #0x1000 + str r2, [r0, #0x0] + str r2, [r0, #0x14] + mov r12, #0x0 + str r12, [r0, #0x4] + ldr r3, [r1, #0x24] + ldrh r2, [r1, #0x2c] + rsb r3, r3, #0x0 + mul r2, r3, r2 + mov r2, r2, lsl #0x4 + str r2, [r0, #0x30] + ldrh r2, [r1, #0x2e] + ldr r1, [r1, #0x28] + mul r2, r1, r2 + mov r1, r2, lsl #0x4 + str r1, [r0, #0x34] + str r12, [r0, #0x10] + bx lr + + arm_func_start FUN_020BF810 +FUN_020BF810: ; 0x020BF810 + stmdb sp!, {r4-r6,lr} + ldr r2, [r1, #0x18] + mov r3, #0x0 + str r2, [r0, #0x0] + ldr r2, [r1, #0x1c] + str r2, [r0, #0x14] + str r3, [r0, #0x4] + ldrh r5, [r1, #0x2c] + ldr r12, [r1, #0x24] + ldrh r2, [r1, #0x2e] + mul lr, r12, r5 + rsb r12, r5, #0x0 + mov r12, r12, lsl #0xb + ldr r4, [r1, #0x18] + sub r12, r12, lr + smull lr, r12, r4, r12 + ldr r6, [r1, #0x28] + mov r4, lr, lsr #0x8 + orr r4, r4, r12, lsl #0x18 + add r4, r4, r5, lsl #0xf + str r4, [r0, #0x30] + mul r4, r6, r2 + rsb r5, r2, #0x0 + ldr r2, [r1, #0x1c] + add r4, r4, r5, lsl #0xb + smull lr, r12, r2, r4 + mov r2, lr, lsr #0x8 + ldrh r1, [r1, #0x2e] + orr r2, r2, r12, lsl #0x18 + add r1, r2, r1, lsl #0xf + str r1, [r0, #0x34] + str r3, [r0, #0x10] + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020BF894 +FUN_020BF894: ; 0x020BF894 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldrh r2, [r5, #0x2c] + ldrh r1, [r5, #0x2e] + mov r6, r0 + mov r4, r2, lsl #0xc + mov r7, r1, lsl #0xc + mov r0, r7 + mov r1, r4 + bl FX_DivAsync + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x0] + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x14] + bl FX_GetDivResult + ldrsh r2, [r5, #0x20] + mov r1, r7 + mul r0, r2, r0 + mov r2, r0, asr #0xc + mov r0, r4 + str r2, [r6, #0x4] + bl FX_DivAsync + ldrh r2, [r5, #0x2c] + ldrh r7, [r5, #0x2e] + ldr r1, [r5, #0x28] + ldr r0, [r5, #0x24] + rsb r4, r2, #0x0 + mul r3, r1, r7 + rsb r1, r7, #0x0 + add r1, r3, r1, lsl #0xb + ldrsh r3, [r5, #0x20] + mov r7, r4, lsl #0xb + mul r4, r0, r2 + sub r0, r7, r4 + ldrsh lr, [r5, #0x22] + smull r12, r4, r3, r1 + smull r7, r3, lr, r0 + subs r7, r7, r12 + sbc r3, r3, r4 + mov r4, r7, lsr #0x8 + orr r4, r4, r3, lsl #0x18 + add r2, r4, r2, lsl #0xf + str r2, [r6, #0x30] + ldrsh r2, [r5, #0x22] + ldrsh r3, [r5, #0x20] + ldrh r12, [r5, #0x2e] + smull r4, r1, r2, r1 + smlal r4, r1, r3, r0 + mov r0, r4, lsr #0x8 + orr r0, r0, r1, lsl #0x18 + add r0, r0, r12, lsl #0xf + str r0, [r6, #0x34] + bl FX_GetDivResult + ldrsh r1, [r5, #0x20] + rsb r1, r1, #0x0 + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r6, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020BF988 +FUN_020BF988: ; 0x020BF988 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r9, r1 + ldrh r2, [r9, #0x2c] + ldrh r1, [r9, #0x2e] + mov r10, r0 + mov r8, r2, lsl #0xc + mov r11, r1, lsl #0xc + mov r0, r11 + mov r1, r8 + bl FX_DivAsync + ldrsh r0, [r9, #0x22] + ldr r3, [r9, #0x18] + ldrsh r5, [r9, #0x20] + ldr r4, [r9, #0x1c] + smull r2, r1, r3, r0 + mov r7, r2, lsr #0xc + orr r7, r7, r1, lsl #0x14 + smull r2, r1, r3, r5 + mov r6, r2, lsr #0xc + orr r6, r6, r1, lsl #0x14 + smull r3, r2, r4, r0 + smull r1, r0, r4, r5 + mov r5, r3, lsr #0xc + orr r5, r5, r2, lsl #0x14 + mov r4, r1, lsr #0xc + orr r4, r4, r0, lsl #0x14 + str r7, [r10, #0x0] + str r5, [r10, #0x14] + bl FX_GetDivResult + mov r1, r11 + mul r0, r4, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x4] + mov r0, r8 + bl FX_DivAsync + ldrh r1, [r9, #0x2c] + ldrh r8, [r9, #0x2e] + ldr r2, [r9, #0x28] + rsb r0, r1, #0x0 + mul r3, r2, r8 + rsb r2, r8, #0x0 + add r8, r3, r2, lsl #0xb + mov r0, r0, lsl #0xb + smull r3, r2, r5, r8 + smull r8, r5, r6, r8 + ldr r11, [r9, #0x24] + mul r12, r11, r1 + sub r0, r0, r12 + smlal r3, r2, r4, r0 + smull r4, r0, r7, r0 + subs r4, r4, r8 + sbc r0, r0, r5 + mov r4, r4, lsr #0x8 + orr r4, r4, r0, lsl #0x18 + add r0, r4, r1, lsl #0xf + str r0, [r10, #0x30] + ldrh r1, [r9, #0x2e] + mov r0, r3, lsr #0x8 + orr r0, r0, r2, lsl #0x18 + add r0, r0, r1, lsl #0xf + str r0, [r10, #0x34] + bl FX_GetDivResult + rsb r1, r6, #0x0 + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020BFA9C +FUN_020BFA9C: ; 0x020BFA9C + stmdb sp!, {r4,lr} + sub sp, sp, #0x50 + mov r4, r0 + ldr r0, [r4, #0x0] + mov r3, #0x3 + ands r0, r0, #0x8 + ldrne r0, _020BFC1C ; =0x00101610 + mov r2, #0x2 + strne r0, [sp, #0x0] + ldreq r0, _020BFC20 ; =0x00101810 + mov r1, #0x1000 + streq r0, [sp, #0x0] + mov r0, #0x0 + str r3, [sp, #0x4] + str r2, [sp, #0x48] + str r1, [sp, #0x44] + str r0, [sp, #0x40] + str r0, [sp, #0x34] + str r0, [sp, #0x30] + str r0, [sp, #0x2c] + str r0, [sp, #0x28] + str r0, [sp, #0x24] + str r0, [sp, #0x20] + str r0, [sp, #0x14] + str r0, [sp, #0x10] + ldr r0, [r4, #0x0] + ands r0, r0, #0x1 + strne r1, [r4, #0x1c] + ldrne r0, [r4, #0x1c] + strne r0, [r4, #0x18] + ldr r0, [r4, #0x0] + ands r0, r0, #0x2 + movne r0, #0x1000 + strneh r0, [r4, #0x22] + movne r0, #0x0 + strneh r0, [r4, #0x20] + ldr r0, [r4, #0x0] + ands r0, r0, #0x4 + movne r0, #0x0 + strne r0, [r4, #0x28] + ldrne r0, [r4, #0x28] + strne r0, [r4, #0x24] + ldr r1, [r4, #0x0] + ldr r0, _020BFC24 ; =0x021067F0 + and r1, r1, #0x7 + ldr r2, [r0, r1, lsl #0x2] + add r0, sp, #0x8 + mov r1, r4 + blx r2 + ldr r3, [r4, #0x30] + cmp r3, #0x1000 + beq _020BFBB0 + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + smull r2, r0, r3, r0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [sp, #0x8] + ldr r2, [r4, #0x30] + ldr r0, [sp, #0x38] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [sp, #0xc] + ldr r1, [r4, #0x30] + smull r2, r0, r1, r0 + mov r1, r2, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [sp, #0x38] +_020BFBB0: + ldr r3, [r4, #0x34] + cmp r3, #0x1000 + beq _020BFC00 + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x1c] + smull r2, r0, r3, r0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [sp, #0x18] + ldr r2, [r4, #0x34] + ldr r0, [sp, #0x3c] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [sp, #0x1c] + ldr r1, [r4, #0x34] + smull r2, r0, r1, r0 + mov r1, r2, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [sp, #0x3c] +_020BFC00: + add r1, sp, #0x0 + ldr r0, [sp, #0x0] + add r1, r1, #0x4 + mov r2, #0x12 + bl FUN_020BB1C0 + add sp, sp, #0x50 + ldmia sp!, {r4,pc} + .balign 4 +_020BFC1C: .word 0x00101610 +_020BFC20: .word 0x00101810 +_020BFC24: .word 0x021067F0 + + arm_func_start FUN_020BFC28 +FUN_020BFC28: ; 0x020BFC28 + mov r2, #0x1000 + str r2, [r0, #0x0] + mov r1, #0x0 + str r1, [r0, #0x4] + str r1, [r0, #0x10] + str r2, [r0, #0x14] + str r1, [r0, #0x30] + str r1, [r0, #0x34] + bx lr + + arm_func_start FUN_020BFC4C +FUN_020BFC4C: ; 0x020BFC4C + ldr r2, [r1, #0x18] + mov r3, #0x0 + str r2, [r0, #0x0] + ldr r2, [r1, #0x1c] + str r2, [r0, #0x14] + str r3, [r0, #0x4] + str r3, [r0, #0x30] + ldrh r2, [r1, #0x2e] + ldr r1, [r1, #0x1c] + rsb r2, r2, #0x0 + sub r1, r1, #0x1000 + mul r1, r2, r1 + mov r1, r1, lsl #0x4 + str r1, [r0, #0x34] + str r3, [r0, #0x10] + bx lr + + arm_func_start FUN_020BFC8C +FUN_020BFC8C: ; 0x020BFC8C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldrh r2, [r5, #0x2c] + ldrh r1, [r5, #0x2e] + mov r6, r0 + mov r4, r2, lsl #0xc + mov r7, r1, lsl #0xc + mov r0, r7 + mov r1, r4 + bl FX_DivAsync + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x0] + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x14] + bl FX_GetDivResult + ldrsh r2, [r5, #0x20] + mov r1, r7 + mul r0, r2, r0 + mov r2, r0, asr #0xc + mov r0, r4 + str r2, [r6, #0x4] + bl FX_DivAsync + ldrh r1, [r5, #0x2c] + ldrsh r0, [r5, #0x20] + mul r0, r1, r0 + mov r0, r0, lsl #0x4 + str r0, [r6, #0x30] + ldrh r1, [r5, #0x2e] + ldrsh r0, [r5, #0x22] + rsb r1, r1, #0x0 + sub r0, r0, #0x1000 + mul r0, r1, r0 + mov r0, r0, lsl #0x4 + str r0, [r6, #0x34] + bl FX_GetDivResult + ldrsh r1, [r5, #0x20] + rsb r1, r1, #0x0 + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r6, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020BFD38 +FUN_020BFD38: ; 0x020BFD38 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r9, r1 + ldrh r2, [r9, #0x2c] + ldrh r1, [r9, #0x2e] + mov r10, r0 + mov r8, r2, lsl #0xc + mov r11, r1, lsl #0xc + mov r0, r11 + mov r1, r8 + bl FX_DivAsync + ldrsh r3, [r9, #0x22] + ldr r0, [r9, #0x18] + ldrsh r7, [r9, #0x20] + ldr r5, [r9, #0x1c] + smull r2, r1, r0, r3 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [r10, #0x0] + smull r2, r1, r5, r3 + mov r4, r2, lsr #0xc + orr r4, r4, r1, lsl #0x14 + smull r2, r1, r0, r7 + mov r6, r2, lsr #0xc + orr r6, r6, r1, lsl #0x14 + str r4, [r10, #0x14] + bl FX_GetDivResult + smull r2, r1, r5, r7 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + mul r0, r2, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x4] + mov r0, r8 + mov r1, r11 + bl FX_DivAsync + sub r0, r4, #0x1000 + ldrh r1, [r9, #0x2c] + mul r2, r1, r6 + mov r1, r2, lsl #0x4 + str r1, [r10, #0x30] + ldrh r1, [r9, #0x2e] + rsb r1, r1, #0x0 + mul r0, r1, r0 + mov r0, r0, lsl #0x4 + str r0, [r10, #0x34] + bl FX_GetDivResult + rsb r1, r6, #0x0 + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020BFE0C +FUN_020BFE0C: ; 0x020BFE0C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, #0x1000 + str r2, [r0, #0x0] + str r2, [r0, #0x14] + mov lr, #0x0 + str lr, [r0, #0x4] + ldr r2, [r1, #0x24] + ldrh r3, [r1, #0x2c] + rsb r2, r2, #0x0 + ldr r12, [r1, #0x28] + mul r2, r3, r2 + mov r2, r2, lsl #0x4 + str r2, [r0, #0x30] + ldrh r1, [r1, #0x2e] + rsb r2, r12, #0x0 + rsb r1, r1, #0x0 + mul r2, r1, r2 + mov r1, r2, lsl #0x4 + str r1, [r0, #0x34] + str lr, [r0, #0x10] + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020BFE68 +FUN_020BFE68: ; 0x020BFE68 + stmdb sp!, {r4,lr} + ldr r3, [r1, #0x18] + mov r2, #0x0 + str r3, [r0, #0x0] + ldr r3, [r1, #0x1c] + str r3, [r0, #0x14] + str r2, [r0, #0x4] + ldr r12, [r1, #0x24] + ldr r3, [r1, #0x18] + ldr r4, [r1, #0x28] + smull lr, r3, r12, r3 + mov r12, lr, lsr #0xc + orr r12, r12, r3, lsl #0x14 + ldrh lr, [r1, #0x2c] + rsb r3, r12, #0x0 + ldr r12, [r1, #0x1c] + rsb r4, r4, #0x0 + mul r3, lr, r3 + smull lr, r12, r4, r12 + mov r3, r3, lsl #0x4 + str r3, [r0, #0x30] + mov r4, lr, lsr #0xc + ldrh r3, [r1, #0x2e] + ldr r1, [r1, #0x1c] + orr r4, r4, r12, lsl #0x14 + add r1, r1, r4 + rsb r3, r3, #0x0 + sub r1, r1, #0x1000 + mul r1, r3, r1 + mov r1, r1, lsl #0x4 + str r1, [r0, #0x34] + str r2, [r0, #0x10] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020BFEEC +FUN_020BFEEC: ; 0x020BFEEC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldrh r2, [r5, #0x2c] + ldrh r1, [r5, #0x2e] + mov r6, r0 + mov r4, r2, lsl #0xc + mov r7, r1, lsl #0xc + mov r0, r7 + mov r1, r4 + bl FX_DivAsync + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x0] + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x14] + bl FX_GetDivResult + ldrsh r2, [r5, #0x20] + mov r1, r7 + mul r0, r2, r0 + mov r2, r0, asr #0xc + mov r0, r4 + str r2, [r6, #0x4] + bl FX_DivAsync + ldrsh lr, [r5, #0x20] + ldr r4, [r5, #0x28] + ldrsh r0, [r5, #0x22] + ldr r12, [r5, #0x24] + smull r3, r2, r4, lr + smlal r3, r2, r12, r0 + smull r1, r0, r4, r0 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + sub r4, lr, r3 + smull r3, r2, r12, lr + subs r1, r3, r1 + sbc r0, r2, r0 + ldrh r2, [r5, #0x2c] + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + mul r0, r2, r4 + mov r0, r0, lsl #0x4 + str r0, [r6, #0x30] + ldrsh r0, [r5, #0x22] + ldrh r2, [r5, #0x2e] + add r0, r0, r1 + rsb r1, r2, #0x0 + sub r0, r0, #0x1000 + mul r0, r1, r0 + mov r0, r0, lsl #0x4 + str r0, [r6, #0x34] + bl FX_GetDivResult + ldrsh r1, [r5, #0x20] + rsb r1, r1, #0x0 + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r6, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020BFFD4 +FUN_020BFFD4: ; 0x020BFFD4 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r6, r1 + ldrh r2, [r6, #0x2c] + ldrh r1, [r6, #0x2e] + mov r7, r0 + mov r10, r2, lsl #0xc + mov r11, r1, lsl #0xc + mov r0, r11 + mov r1, r10 + bl FX_DivAsync + ldrsh r3, [r6, #0x22] + ldr r0, [r6, #0x18] + ldrsh r9, [r6, #0x20] + smull r2, r1, r0, r3 + mov r2, r2, lsr #0xc + ldr r8, [r6, #0x1c] + orr r2, r2, r1, lsl #0x14 + str r2, [r7, #0x0] + smull r2, r1, r8, r3 + mov r4, r2, lsr #0xc + orr r4, r4, r1, lsl #0x14 + smull r2, r1, r0, r9 + mov r5, r2, lsr #0xc + orr r5, r5, r1, lsl #0x14 + str r4, [r7, #0x14] + bl FX_GetDivResult + smull r2, r1, r8, r9 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + mul r0, r2, r0 + mov r0, r0, asr #0xc + str r0, [r7, #0x4] + mov r0, r10 + mov r1, r11 + bl FX_DivAsync + ldr lr, [r6, #0x1c] + ldrsh r2, [r6, #0x20] + ldr r8, [r6, #0x24] + ldr r0, [r6, #0x28] + smull r10, r9, r8, r2 + ldrh r1, [r6, #0x2c] + smull r3, r2, r0, r2 + ldrsh r12, [r6, #0x22] + str r1, [sp, #0x0] + mov r11, lr, asr #0x1f + smlal r3, r2, r8, r12 + smull r8, r12, r0, r12 + subs r8, r10, r8 + sbc r0, r9, r12 + mov r9, r8, lsr #0xc + mov r12, r3, lsr #0xc + orr r9, r9, r0, lsl #0x14 + mov r3, r2, asr #0xc + orr r12, r12, r2, lsl #0x14 + umull r10, r2, r9, lr + mla r2, r9, r11, r2 + mov r8, r0, asr #0xc + mla r2, r8, lr, r2 + ldr r1, [r6, #0x18] + mov r8, r10, lsr #0xc + orr r8, r8, r2, lsl #0x14 + add r2, r4, r8 + mov r0, r1, asr #0x1f + umull r8, r4, r12, r1 + mla r4, r12, r0, r4 + mla r4, r3, r1, r4 + mov r0, r8, lsr #0xc + orr r0, r0, r4, lsl #0x14 + sub r1, r5, r0 + ldr r0, [sp, #0x0] + sub r2, r2, #0x1000 + mul r1, r0, r1 + mov r0, r1, lsl #0x4 + str r0, [r7, #0x30] + ldrh r0, [r6, #0x2e] + rsb r0, r0, #0x0 + mul r1, r0, r2 + mov r0, r1, lsl #0x4 + str r0, [r7, #0x34] + bl FX_GetDivResult + rsb r1, r5, #0x0 + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r7, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020C0130 +FUN_020C0130: ; 0x020C0130 + ldr ip, _020C0138 ; =FUN_020C187C + bx r12 + .balign 4 +_020C0138: .word FUN_020C187C + + arm_func_start FUN_020C013C +FUN_020C013C: ; 0x020C013C + stmdb sp!, {r4,lr} + bl FUN_020C18F8 +_020C0144: ; 0x020C0144 + mov r0, #0x0 + mov r1, r0 + mov r2, r0 + mov r3, r0 + bl SND_StopTimer + bl SND_GetCurrentCommandTag + mov r4, r0 + mov r0, #0x1 + bl SND_FlushCommand + mov r0, r4 + bl SND_WaitForCommandProc + ldmia sp!, {r4,pc} + + arm_func_start FUN_020C0174 +FUN_020C0174: ; 0x020C0174 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + beq _020C0194 + mov r0, #0x40 + bl SND_SetMasterPan + add sp, sp, #0x4 + ldmia sp!, {pc} +_020C0194: + bl SND_ResetMasterPan + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020C01A0 +FUN_020C01A0: ; 0x020C01A0 + stmdb sp!, {r4,lr} + mov r4, #0x0 +_020C01A8: + mov r0, r4 + bl SND_RecvCommandReply +_020C01B0: ; 0x020C01B0 + cmp r0, #0x0 + bne _020C01A8 + bl FUN_020C0BA0 + bl FUN_020C1D9C + bl FUN_020C3C88 +_020C01C4: ; 0x020C01C4 + mov r0, #0x0 + bl SND_FlushCommand + ldmia sp!, {r4,pc} + + arm_func_start FUN_020C01D0 +FUN_020C01D0: ; 0x020C01D0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C0254 ; =0x021D1C94 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {pc} + mov r1, #0x1 + str r1, [r0, #0x0] + bl SND_Init + ldr ip, _020C0258 ; =FUN_020C013C + ldr r0, _020C025C ; =0x021D1C98 + mov r3, #0x0 + ldr r1, _020C0260 ; =0x021D1CA4 + ldr r2, _020C0264 ; =FUN_020C0130 + str r12, [r0, #0x0] + str r3, [r0, #0x4] + str r2, [r1, #0x0] + str r3, [r1, #0x4] + bl PM_PrependPreSleepCallback + ldr r0, _020C0260 ; =0x021D1CA4 + bl PM_AppendPostSleepCallback + bl FUN_020C0270 + bl FUN_020C1E38 + bl FUN_020C0D20 + ldr r1, _020C0268 ; =0x021D1C8C + mvn r3, #0x0 + ldr r0, _020C026C ; =0x021D1C90 + mov r2, #0x1 + strb r3, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020C0254: .word 0x021D1C94 +_020C0258: .word FUN_020C013C +_020C025C: .word 0x021D1C98 +_020C0260: .word 0x021D1CA4 +_020C0264: .word FUN_020C0130 +_020C0268: .word 0x021D1C8C +_020C026C: .word 0x021D1C90 + + arm_func_start FUN_020C0270 +FUN_020C0270: ; 0x020C0270 + ldr r2, _020C0290 ; =0x021D1CB8 + mov r3, #0x0 + ldr r1, _020C0294 ; =0x021D1CB0 + ldr r0, _020C0298 ; =0x021D1CB4 + str r3, [r2, #0x0] + str r3, [r1, #0x0] + str r3, [r0, #0x0] + bx lr + .balign 4 +_020C0290: .word 0x021D1CB8 +_020C0294: .word 0x021D1CB0 +_020C0298: .word 0x021D1CB4 + + arm_func_start FUN_020C029C +FUN_020C029C: ; 0x020C029C + ldr r1, _020C02B8 ; =0x021D1CB4 + mov r2, #0x1 + mvn r0, r2, lsl r0 + ldr r2, [r1, #0x0] + and r0, r2, r0 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020C02B8: .word 0x021D1CB4 + + arm_func_start FUN_020C02BC +FUN_020C02BC: ; 0x020C02BC + ldr r0, _020C02FC ; =0x021D1CB4 + mov r3, #0x1 + ldr r2, [r0, #0x0] + mov r0, #0x0 +_020C02CC: + ands r1, r2, r3 + ldreq r1, _020C02FC ; =0x021D1CB4 + ldreq r2, [r1, #0x0] + orreq r2, r2, r3 + streq r2, [r1, #0x0] + bxeq lr + add r0, r0, #0x1 + cmp r0, #0x8 + mov r3, r3, lsl #0x1 + blt _020C02CC + mvn r0, #0x0 + bx lr + .balign 4 +_020C02FC: .word 0x021D1CB4 + + arm_func_start FUN_020C0300 +FUN_020C0300: ; 0x020C0300 + ldr r1, _020C0318 ; =0x021D1CB0 + mvn r0, r0 + ldr r2, [r1, #0x0] + and r0, r2, r0 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020C0318: .word 0x021D1CB0 + + arm_func_start FUN_020C031C +FUN_020C031C: + ldr r1, _020C033C ; =0x021D1CB0 + ldr r2, [r1, #0x0] + ands r3, r0, r2 + movne r0, #0x0 + orreq r0, r2, r0 + streq r0, [r1, #0x0] + moveq r0, #0x1 + bx lr + .balign 4 +_020C033C: .word 0x021D1CB0 + + arm_func_start FUN_020C0340 +FUN_020C0340: + stmdb sp!, {r4,lr} + movs r4, r0 + ldmeqia sp!, {r4,pc} +_020C034C: ; 0x020C034C + mov r1, #0x0 + bl SND_UnlockChannel + ldr r0, _020C036C ; =0x021D1CB8 + mvn r1, r4 + ldr r2, [r0, #0x0] + and r1, r2, r1 + str r1, [r0, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_020C036C: .word 0x021D1CB8 + + arm_func_start FUN_020C0370 +FUN_020C0370: + stmdb sp!, {r4,lr} + movs r4, r0 + moveq r0, #0x1 + ldmeqia sp!, {r4,pc} +_020C0380: ; 0x020C0380 + ldr r1, _020C03B4 ; =0x021D1CB8 + ldr r1, [r1, #0x0] + ands r1, r4, r1 + movne r0, #0x0 + ldmneia sp!, {r4,pc} +_020C0394: ; 0x020C0394 + mov r1, #0x0 + bl SND_LockChannel + ldr r1, _020C03B4 ; =0x021D1CB8 + mov r0, #0x1 + ldr r2, [r1, #0x0] + orr r2, r2, r4 + str r2, [r1, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_020C03B4: .word 0x021D1CB8 + + arm_func_start FUN_020C03B8 +FUN_020C03B8: ; 0x020C03B8 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x8] + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020C03D0: ; 0x020C03D0 + ldr r0, [r4, #0xc] + cmp r0, #0x0 + bne _020C03F8 + ldr r0, [r4, #0x10] + bl SND_IsFinishedCommandTag +_020C03E4: ; 0x020C03E4 + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4,pc} +_020C03F0: ; 0x020C03F0 + mov r0, #0x1 + str r0, [r4, #0xc] +_020C03F8: + bl SND_GetChannelStatus + ldr r1, [r4, #0x0] + mov r2, #0x1 + mov r1, r2, lsl r1 + ands r0, r1, r0 + movne r0, r2 + moveq r0, #0x0 + streq r0, [r4, #0x8] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020C041C +FUN_020C041C: ; 0x020C041C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x8] + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r0, [r0, #0x0] + mov r2, #0x1 + mov r0, r2, lsl r0 + bl SND_SetChannelPan + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020C044C +FUN_020C044C: ; 0x020C044C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r0, [r5, #0x8] + mov r4, r1 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} +_020C046C: ; 0x020C046C + ldr r2, [r5, #0x4] + ldr r0, _020C04D4 ; =0xD87F8000 + mov r3, r2, asr #0x1f + mov r1, #0x7f + bl _ll_udiv + mov r2, r4 + mov r3, r4, asr #0x1f + bl _ll_udiv + mov r2, #0x0 + mov r3, r0 + mov r0, #0x10 + cmp r1, r2 + cmpeq r3, r0 + movcc r3, r0 + blo _020C04B8 + ldr r0, _020C04D8 ; =0x0000FFFF + cmp r1, r2 + cmpeq r3, r0 + movhi r3, r0 +_020C04B8: + ldr r0, [r5, #0x0] + mov r1, #0x1 + mov r0, r1, lsl r0 + mov r1, r3 + bl SND_SetChannelTimer + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C04D4: .word 0xD87F8000 +_020C04D8: .word 0x0000FFFF + + arm_func_start FUN_020C04DC +FUN_020C04DC: ; 0x020C04DC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x8] + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r0, [r0, #0x0] + mov r2, #0x1 + mov r0, r2, lsl r0 + mov r2, #0x0 + bl SND_SetChannelVolume + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020C0510 +FUN_020C0510: ; 0x020C0510 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x8] + cmp r0, #0x0 + ldmeqia sp!, {r4,pc} +_020C0524: ; 0x020C0524 + ldr r0, [r4, #0x0] + mov r2, #0x1 + mov r1, #0x0 + mov r0, r2, lsl r0 + mov r2, r1 + mov r3, r1 + bl SND_StopTimer +_020C0540: ; 0x020C0540 + mov r0, #0x0 + str r0, [r4, #0x8] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020C054C +FUN_020C054C: ; 0x020C054C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x1c + movs r8, r1 + mov r9, r0 + mov r7, r2 + mov r6, r3 + beq _020C0584 + cmp r8, #0x1 + ldreq r0, [sp, #0x3c] + ldreq r1, [sp, #0x38] + moveq r0, r0, asr #0x1 + moveq r5, r1, asr #0x1 + subeq r4, r0, r1, asr #0x1 + b _020C0598 +_020C0584: + ldr r0, [sp, #0x3c] + ldr r1, [sp, #0x38] + mov r0, r0, asr #0x2 + mov r5, r1, asr #0x2 + sub r4, r0, r1, asr #0x2 +_020C0598: + ldr r2, [sp, #0x40] + ldr r0, _020C0668 ; =0xD87F8000 + mov r3, r2, asr #0x1f + mov r1, #0x7f + bl _ll_udiv + ldr r2, [sp, #0x48] + mov r3, r2, asr #0x1f + bl _ll_udiv + mov r3, #0x0 + mov r2, #0x10 + cmp r1, r3 + cmpeq r0, r2 + movcc r0, r2 + blo _020C05E0 + ldr r2, _020C066C ; =0x0000FFFF + cmp r1, r3 + cmpeq r0, r2 + movhi r0, r2 +_020C05E0: + str r5, [sp, #0x0] + ldr r1, [sp, #0x44] + str r4, [sp, #0x4] + str r1, [sp, #0x8] + mov r1, #0x0 + str r1, [sp, #0xc] + cmp r6, #0x0 + movne r3, #0x1 + ldr r1, [sp, #0x4c] + str r0, [sp, #0x10] + str r1, [sp, #0x14] + ldr r0, [r9, #0x0] + moveq r3, #0x2 + mov r1, r8 + mov r2, r7 + bl SND_SetupChannelPcm + mov r1, #0x0 + ldr r0, [r9, #0x0] + mov r2, #0x1 + mov r0, r2, lsl r0 + mov r2, r1 + mov r3, r1 + bl SND_StartTimer + mov r0, #0x1 + str r0, [r9, #0x8] + mov r0, #0x0 + str r0, [r9, #0xc] + bl SND_GetCurrentCommandTag + str r0, [r9, #0x10] + ldr r1, [sp, #0x40] + mov r0, #0x1 + str r1, [r9, #0x4] + add sp, sp, #0x1c + ldmia sp!, {r4-r9,pc} + .balign 4 +_020C0668: .word 0xD87F8000 +_020C066C: .word 0x0000FFFF + + arm_func_start FUN_020C0670 +FUN_020C0670: ; 0x020C0670 + ldr r0, [r0, #0x0] + mov r1, #0x1 + ldr ip, _020C0684 ; =FUN_020C0340 + mov r0, r1, lsl r0 + bx r12 + .balign 4 +_020C0684: .word FUN_020C0340 + + arm_func_start FUN_020C0688 +FUN_020C0688: ; 0x020C0688 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r0, r0, lsl r4 + bl FUN_020C0370 +_020C069C: ; 0x020C069C + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020C06A8: ; 0x020C06A8 + mov r0, #0x14 + mul r0, r4, r0 + ldr r2, _020C06C8 ; =0x021D1CBC + mov r1, #0x0 + str r4, [r2, r0] + add r0, r2, r0 + str r1, [r0, #0x8] + ldmia sp!, {r4,pc} + .balign 4 +_020C06C8: .word 0x021D1CBC + + arm_func_start FUN_020C06CC +FUN_020C06CC: ; 0x020C06CC + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldr r4, [r6, #0x4] + mov r5, r1 + cmp r4, #0x0 + beq _020C06F8 + mov r0, r4 + mov r1, r6 + bl FUN_020ADAB0 +_020C06F0: ; 0x020C06F0 + mov r0, #0x0 + str r0, [r6, #0x4] +_020C06F8: + ldr r0, _020C0728 ; =0x021D1E08 + mov r1, r6 + bl FUN_020ADAB0 + strb r5, [r6, #0x3d] + cmp r4, #0x0 + beq _020C071C + mov r0, r4 + mov r1, r6 + bl FUN_020C0910 +_020C071C: + mov r0, r6 + bl FUN_020C08B4 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020C0728: .word 0x021D1E08 + + arm_func_start FUN_020C072C +FUN_020C072C: ; 0x020C072C + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x8] + cmp r0, #0x0 + ldmeqia sp!, {r4,pc} +_020C0740: ; 0x020C0740 + bl FUN_020C2A7C + ldr r1, [r4, #0xc] + cmp r1, #0x0 + movne r0, #0x0 + strne r0, [r1, #0x8] + ldmneia sp!, {r4,pc} +_020C0758: ; 0x020C0758 + ldr r1, [r4, #0x10] + ldr r2, _020C0778 ; =0x021D2254 + mov r0, #0x24 + mla r0, r1, r0, r2 + mov r1, r4 + add r0, r0, #0xc + bl FUN_020ADAB0 + ldmia sp!, {r4,pc} + .balign 4 +_020C0778: .word 0x021D2254 + + arm_func_start FUN_020C077C +FUN_020C077C: ; 0x020C077C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + ldr r1, [r4, #0x0] + cmp r1, #0x0 + movne r0, #0x0 + strne r0, [r1, #0x0] + strne r0, [r4, #0x0] + ldr r5, [r4, #0x4] + mov r1, r4 + mov r0, r5 + bl FUN_020ADAB0 +_020C07AC: ; 0x020C07AC + mov r0, #0x0 + str r0, [r4, #0x4] + ldr r1, [r4, #0x8] + cmp r1, #0x0 + beq _020C07D8 + add r0, r5, #0xc + bl FUN_020ADBE8 + ldr r0, [r4, #0x8] + mov r1, #0x0 + str r1, [r0, #0xc] + str r1, [r4, #0x8] +_020C07D8: + ldr r0, _020C0800 ; =0x021D1E08 + mov r1, r4 + bl FUN_020ADAB0 + ldr r0, _020C0804 ; =0x021D1DFC + mov r1, r4 + bl FUN_020ADBE8 +_020C07F0: ; 0x020C07F0 + mov r0, #0x0 + strb r0, [r4, #0x2c] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C0800: .word 0x021D1E08 +_020C0804: .word 0x021D1DFC + + arm_func_start FUN_020C0808 +FUN_020C0808: ; 0x020C0808 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r0, _020C0874 ; =0x021D1DFC + mov r1, #0x0 + bl FUN_020ADA98 + movs r4, r0 + bne _020C0850 + ldr r0, _020C0878 ; =0x021D1E08 + mov r1, #0x0 + bl FUN_020ADA98 + mov r4, r0 + ldrb r1, [r4, #0x3d] + cmp r5, r1 + addlt sp, sp, #0x4 + movlt r0, #0x0 + ldmltia sp!, {r4-r5,pc} +_020C084C: ; 0x020C084C + bl FUN_020C087C +_020C0850: + ldr r0, _020C0874 ; =0x021D1DFC + mov r1, r4 + bl FUN_020ADAB0 + mov r0, r4 + strb r5, [r4, #0x3d] + bl FUN_020C08B4 + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C0874: .word 0x021D1DFC +_020C0878: .word 0x021D1E08 + + arm_func_start FUN_020C087C +FUN_020C087C: ; 0x020C087C + stmdb sp!, {r4,lr} + mov r4, r0 + ldrb r0, [r4, #0x2c] + cmp r0, #0x2 + bne _020C089C + ldrb r0, [r4, #0x3c] + ldr r1, _020C08B0 ; =0xFFFFFD2D + bl SND_SetPlayerVolume +_020C089C: + ldrb r0, [r4, #0x3c] + bl SND_StopSeq + mov r0, r4 + bl FUN_020C077C + ldmia sp!, {r4,pc} + .balign 4 +_020C08B0: .word 0xFFFFFD2D + + arm_func_start FUN_020C08B4 +FUN_020C08B4: ; 0x020C08B4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r0, _020C090C ; =0x021D1E08 + mov r1, #0x0 + bl FUN_020ADA98 + movs r1, r0 + beq _020C08F8 + ldr r4, _020C090C ; =0x021D1E08 +_020C08D8: + ldrb r2, [r5, #0x3d] + ldrb r0, [r1, #0x3d] + cmp r2, r0 + blo _020C08F8 + mov r0, r4 + bl FUN_020ADA98 + movs r1, r0 + bne _020C08D8 +_020C08F8: + ldr r0, _020C090C ; =0x021D1E08 + mov r2, r5 + bl FUN_020ADB18 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C090C: .word 0x021D1E08 + + arm_func_start FUN_020C0910 +FUN_020C0910: ; 0x020C0910 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r1, #0x0 + mov r5, r0 + bl FUN_020ADA98 + movs r1, r0 + beq _020C0950 +_020C0930: + ldrb r2, [r4, #0x3d] + ldrb r0, [r1, #0x3d] + cmp r2, r0 + blo _020C0950 + mov r0, r5 + bl FUN_020ADA98 + movs r1, r0 + bne _020C0930 +_020C0950: + mov r0, r5 + mov r2, r4 + bl FUN_020ADB18 + str r5, [r4, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020C0968 +FUN_020C0968: ; 0x020C0968 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x0 + strb r0, [r4, #0x2e] + strb r0, [r4, #0x2d] + strb r0, [r4, #0x2f] + strh r0, [r4, #0x34] + strh r0, [r4, #0x3e] + mov r1, #0x7f + strb r1, [r4, #0x40] + add r0, r4, #0x1c + strb r1, [r4, #0x41] + bl FUN_020C3E6C + add r0, r4, #0x1c + mov r1, #0x7f00 + mov r2, #0x1 + bl FUN_020C3E40 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020C09B0 +FUN_020C09B0: ; 0x020C09B0 + stmdb sp!, {r4-r6,lr} + ldr r3, _020C0A00 ; =0x021D2254 + mov r2, #0x24 + mla r5, r0, r2, r3 + mov r6, r1 + add r0, r5, #0xc + mov r1, #0x0 + bl FUN_020ADA98 + movs r4, r0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020C09DC: ; 0x020C09DC + mov r1, r4 + add r0, r5, #0xc + bl FUN_020ADAB0 + str r6, [r4, #0xc] + str r4, [r6, #0x8] + ldr r0, [r4, #0x8] + bl FUN_020C29C0 + ldr r0, [r4, #0x8] + ldmia sp!, {r4-r6,pc} + .balign 4 +_020C0A00: .word 0x021D2254 + + arm_func_start FUN_020C0A04 +FUN_020C0A04: ; 0x020C0A04 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + movs r5, r0 + mov r4, r1 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} +_020C0A1C: ; 0x020C0A1C + ldrb r0, [r5, #0x2e] + cmp r4, r0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} +_020C0A2C: ; 0x020C0A2C + ldrb r0, [r5, #0x3c] + bl SND_PauseSeq + strb r4, [r5, #0x2e] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020C0A40 +FUN_020C0A40: ; 0x020C0A40 + stmdb sp!, {r4,lr} + movs r4, r0 + mov r2, r1 + ldmeqia sp!, {r4,pc} +_020C0A50: ; 0x020C0A50 + ldrb r1, [r4, #0x2c] + cmp r1, #0x0 + ldmeqia sp!, {r4,pc} +_020C0A5C: ; 0x020C0A5C + cmp r2, #0x0 + bne _020C0A6C + bl FUN_020C087C + ldmia sp!, {r4,pc} +_020C0A6C: + add r0, r4, #0x1c + mov r1, #0x0 + bl FUN_020C3E40 + mov r0, r4 + mov r1, #0x0 + bl FUN_020C06CC + mov r0, #0x2 + strb r0, [r4, #0x2c] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020C0A90 +FUN_020C0A90: ; 0x020C0A90 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldrb r0, [r5, #0x3c] + ldr r4, [r5, #0x4] + bl SND_PrepareSeq + ldr r2, [r4, #0x1c] + cmp r2, #0x0 + beq _020C0AC0 + ldrb r0, [r5, #0x3c] + ldr r1, _020C0AE4 ; =0x0000FFFF + bl SND_SetTrackAllocatableChannel +_020C0AC0: + mov r0, r5 + bl FUN_020C0968 + bl SND_GetCurrentCommandTag + str r0, [r5, #0x30] + mov r0, #0x1 + strb r0, [r5, #0x2f] + strb r0, [r5, #0x2c] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C0AE4: .word 0x0000FFFF + + arm_func_start thunk_FUN_020c077c +thunk_FUN_020c077c: ; 0x020C0AE8 + ldr ip, _020C0AF0 ; =FUN_020C077C + bx r12 + .balign 4 +_020C0AF0: .word FUN_020C077C + + arm_func_start FUN_020C0AF4 +FUN_020C0AF4: ; 0x020C0AF4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr ip, _020C0B9C ; =0x021D2254 + mov r3, #0x24 + mov r4, r0 + ldr r5, [r4, #0x0] + mla r6, r1, r3, r12 + mov r7, r2 + cmp r5, #0x0 + beq _020C0B20 + bl FUN_020C0F68 +_020C0B20: + ldrh r1, [r6, #0x8] + ldr r0, [r6, #0x18] + cmp r1, r0 + blo _020C0B64 + mov r0, r6 + mov r1, #0x0 + bl FUN_020ADA98 +_020C0B3C: ; 0x020C0B3C + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,pc} +_020C0B4C: ; 0x020C0B4C + ldrb r1, [r0, #0x3d] + cmp r7, r1 + addlt sp, sp, #0x4 + movlt r0, #0x0 + ldmltia sp!, {r4-r7,pc} +_020C0B60: ; 0x020C0B60 + bl FUN_020C087C +_020C0B64: + mov r0, r7 + bl FUN_020C0808 + movs r5, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,pc} +_020C0B7C: ; 0x020C0B7C + mov r0, r6 + mov r1, r5 + bl FUN_020C0910 + str r4, [r5, #0x0] + mov r0, r5 + str r5, [r4, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C0B9C: .word 0x021D2254 + + arm_func_start FUN_020C0BA0 +FUN_020C0BA0: ; 0x020C0BA0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + bl SND_GetPlayerStatus +_020C0BAC: ; 0x020C0BAC + str r0, [sp, #0x0] + ldr r0, _020C0D14 ; =0x021D1E08 + mov r1, #0x0 + bl FUN_020ADA98 + movs r10, r0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r11,pc} +_020C0BC8: ; 0x020C0BC8 + mov r0, #0x8000 + rsb r0, r0, #0x0 + ldr r4, _020C0D18 ; =0x02103BAC + str r0, [sp, #0x4] + mov r5, #0x1 + mov r11, #0x0 +_020C0BE0: + ldr r0, _020C0D14 ; =0x021D1E08 + mov r1, r10 + bl FUN_020ADA98 + ldrb r1, [r10, #0x2d] + mov r9, r0 + cmp r1, #0x0 + bne _020C0C0C + ldr r0, [r10, #0x30] + bl SND_IsFinishedCommandTag +_020C0C04: ; 0x020C0C04 + cmp r0, #0x0 + strneb r5, [r10, #0x2d] +_020C0C0C: + ldrb r0, [r10, #0x2d] + cmp r0, #0x0 + beq _020C0C38 + ldrb r0, [r10, #0x3c] + mov r1, r5, lsl r0 + ldr r0, [sp, #0x0] + ands r0, r0, r1 + bne _020C0C38 + mov r0, r10 + bl FUN_020C077C + b _020C0D00 +_020C0C38: + add r0, r10, #0x1c + bl FUN_020C3DF4 + ldr r0, [r10, #0x4] + ldrb r2, [r10, #0x41] + ldrb r1, [r10, #0x40] + ldrb r0, [r0, #0x20] + mov r3, r2, lsl #0x1 + mov r2, r1, lsl #0x1 + mov r1, r0, lsl #0x1 + add r0, r10, #0x1c + ldrsh r8, [r4, r3] + ldrsh r7, [r4, r2] + ldrsh r6, [r4, r1] + bl FUN_020C3E0C + mov r0, r0, asr #0x8 + mov r2, r0, lsl #0x1 + add r1, r7, r8 + mov r0, #0x8000 + ldrsh r2, [r4, r2] + add r1, r6, r1 + rsb r0, r0, #0x0 + add r6, r2, r1 + cmp r6, r0 + ldrlt r6, [sp, #0x4] + blt _020C0CA8 + ldr r0, _020C0D1C ; =0x00007FFF + cmp r6, r0 + movgt r6, r0 +_020C0CA8: + ldrsh r0, [r10, #0x3e] + cmp r6, r0 + beq _020C0CC4 + ldrb r0, [r10, #0x3c] + mov r1, r6 + bl SND_SetPlayerVolume + strh r6, [r10, #0x3e] +_020C0CC4: + ldrb r0, [r10, #0x2c] + cmp r0, #0x2 + bne _020C0CE8 + add r0, r10, #0x1c + bl FUN_020C3DDC +_020C0CD8: ; 0x020C0CD8 + cmp r0, #0x0 + beq _020C0CE8 + mov r0, r10 + bl FUN_020C087C +_020C0CE8: + ldrb r0, [r10, #0x2f] + cmp r0, #0x0 + beq _020C0D00 + ldrb r0, [r10, #0x3c] + bl SND_StartPreparedSeq + strb r11, [r10, #0x2f] +_020C0D00: + mov r10, r9 + cmp r9, #0x0 + bne _020C0BE0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020C0D14: .word 0x021D1E08 +_020C0D18: .word 0x02103BAC +_020C0D1C: .word 0x00007FFF + + arm_func_start FUN_020C0D20 +FUN_020C0D20: ; 0x020C0D20 + stmdb sp!, {r4-r10,lr} + ldr r0, _020C0DC4 ; =0x021D1E08 + mov r1, #0x14 + bl FUN_020ADC74 + ldr r0, _020C0DC8 ; =0x021D1DFC + mov r1, #0x14 + bl FUN_020ADC74 + ldr r6, _020C0DCC ; =0x021D1E14 + mov r7, #0x0 + ldr r4, _020C0DC8 ; =0x021D1DFC + mov r5, r7 +_020C0D4C: + strb r5, [r6, #0x2c] + mov r0, r4 + mov r1, r6 + strb r7, [r6, #0x3c] + bl FUN_020ADBE8 + add r7, r7, #0x1 + cmp r7, #0x10 + add r6, r6, #0x44 + blt _020C0D4C + ldr sl, _020C0DD0 ; =0x021D2254 + mov r9, #0x0 + mov r7, r9 + mov r4, r9 + mov r8, #0xc + mov r6, #0x7f + mov r5, #0x1 +_020C0D8C: + mov r0, r10 + mov r1, r8 + bl FUN_020ADC74 + mov r1, r7 + add r0, r10, #0xc + bl FUN_020ADC74 + strb r6, [r10, #0x20] + str r5, [r10, #0x18] + add r9, r9, #0x1 + str r4, [r10, #0x1c] + cmp r9, #0x20 + add r10, r10, #0x24 + blt _020C0D8C + ldmia sp!, {r4-r10,pc} + .balign 4 +_020C0DC4: .word 0x021D1E08 +_020C0DC8: .word 0x021D1DFC +_020C0DCC: .word 0x021D1E14 +_020C0DD0: .word 0x021D2254 + + arm_func_start FUN_020C0DD4 +FUN_020C0DD4: ; 0x020C0DD4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {pc} + ldrb r0, [r1, #0x2d] + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {pc} + ldrb r0, [r1, #0x3c] + bl SND_GetPlayerTickCounter + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020C0E14 +FUN_020C0E14: ; 0x020C0E14 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + mvneq r0, #0x0 + bxeq lr + ldrh r0, [r1, #0x34] + cmp r0, #0x1 + mvnne r0, #0x0 + ldreqh r0, [r1, #0x38] + bx lr + + arm_func_start FUN_020C0E38 +FUN_020C0E38: ; 0x020C0E38 + ldr r12, [r0, #0x0] + cmp r12, #0x0 + bxeq lr + mov r3, #0x2 + strh r3, [r12, #0x34] + ldr r3, [r0, #0x0] + strh r1, [r3, #0x38] + ldr r0, [r0, #0x0] + strh r2, [r0, #0x3a] + bx lr + + arm_func_start FUN_020C0E60 +FUN_020C0E60: ; 0x020C0E60 + ldr r3, [r0, #0x0] + cmp r3, #0x0 + movne r2, #0x1 + strneh r2, [r3, #0x34] + ldrne r0, [r0, #0x0] + strneh r1, [r0, #0x38] + bx lr + + arm_func_start FUN_020C0E7C +FUN_020C0E7C: ; 0x020C0E7C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldrb r0, [r0, #0x3c] + bl SND_SetTrackPan + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020C0EA4 +FUN_020C0EA4: ; 0x020C0EA4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldrb r0, [r0, #0x3c] + bl SND_SetTrackPitch + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020C0ECC +FUN_020C0ECC: ; 0x020C0ECC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldrb r0, [r0, #0x3c] + bl SND_SetPlayerChannelPriority + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020C0EF4 +FUN_020C0EF4: ; 0x020C0EF4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, [r0, #0x0] + cmp r3, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldrb r0, [r3, #0x2c] + cmp r0, #0x2 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + add r0, r3, #0x1c + mov r1, r1, lsl #0x8 + bl FUN_020C3E40 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020C0F30 +FUN_020C0F30: ; 0x020C0F30 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + strneb r1, [r0, #0x40] + bx lr + + arm_func_start FUN_020C0F40 +FUN_020C0F40: ; 0x020C0F40 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + strneb r1, [r0, #0x41] + bx lr + + arm_func_start FUN_020C0F50 +FUN_020C0F50: ; 0x020C0F50 + mov r1, #0x24 + mul r1, r0, r1 + ldr r0, _020C0F64 ; =0x021D225C + ldrh r0, [r0, r1] + bx lr + .balign 4 +_020C0F64: .word 0x021D225C + + arm_func_start FUN_020C0F68 +FUN_020C0F68: ; 0x020C0F68 + ldr r2, [r0, #0x0] + cmp r2, #0x0 + movne r1, #0x0 + strne r1, [r2, #0x0] + strne r1, [r0, #0x0] + bx lr + + arm_func_start FUN_020C0F80 +FUN_020C0F80: ; 0x020C0F80 + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + + arm_func_start FUN_020C0F8C +FUN_020C0F8C: ; 0x020C0F8C + ldr ip, _020C0F98 ; =FUN_020C0A04 + ldr r0, [r0, #0x0] + bx r12 + .balign 4 +_020C0F98: .word FUN_020C0A04 + + arm_func_start FUN_020C0F9C +FUN_020C0F9C: ; 0x020C0F9C + stmdb sp!, {r4-r6,lr} + ldr r4, _020C0FD8 ; =0x021D1E14 + mov r6, r0 + mov r5, #0x0 +_020C0FAC: + ldrb r0, [r4, #0x2c] + cmp r0, #0x0 + beq _020C0FC4 + mov r0, r4 + mov r1, r6 + bl FUN_020C0A40 +_020C0FC4: + add r5, r5, #0x1 + cmp r5, #0x10 + add r4, r4, #0x44 + blt _020C0FAC + ldmia sp!, {r4-r6,pc} + .balign 4 +_020C0FD8: .word 0x021D1E14 + + arm_func_start FUN_020C0FDC +FUN_020C0FDC: ; 0x020C0FDC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r4, _020C103C ; =0x021D1E14 + mov r7, r0 + mov r6, r1 + mov r5, #0x0 +_020C0FF4: + ldrb r0, [r4, #0x2c] + cmp r0, #0x0 + beq _020C1024 + ldrh r0, [r4, #0x34] + cmp r0, #0x1 + bne _020C1024 + ldrh r0, [r4, #0x38] + cmp r0, r7 + bne _020C1024 + mov r0, r4 + mov r1, r6 + bl FUN_020C0A40 +_020C1024: + add r5, r5, #0x1 + cmp r5, #0x10 + add r4, r4, #0x44 + blt _020C0FF4 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C103C: .word 0x021D1E14 + + arm_func_start FUN_020C1040 +FUN_020C1040: ; 0x020C1040 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r3, _020C109C ; =0x021D2254 + mov r2, #0x24 + mla r4, r0, r2, r3 + ldr r5, _020C10A0 ; =0x021D1E14 + mov r7, r1 + mov r6, #0x0 +_020C1060: + ldrb r0, [r5, #0x2c] + cmp r0, #0x0 + beq _020C1084 + ldr r0, [r5, #0x4] + cmp r0, r4 + bne _020C1084 + mov r0, r5 + mov r1, r7 + bl FUN_020C0A40 +_020C1084: + add r6, r6, #0x1 + cmp r6, #0x10 + add r5, r5, #0x44 + blt _020C1060 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C109C: .word 0x021D2254 +_020C10A0: .word 0x021D1E14 + + arm_func_start FUN_020C10A4 +FUN_020C10A4: ; 0x020C10A4 + ldr ip, _020C10B0 ; =FUN_020C0A40 + ldr r0, [r0, #0x0] + bx r12 + .balign 4 +_020C10B0: .word FUN_020C0A40 + + arm_func_start FUN_020C10B4 +FUN_020C10B4: + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r5, r2 + mov r6, r0 + mov r0, r1 + mov r3, #0x0 + ldr r2, _020C1140 ; =FUN_020C072C + add r1, r5, #0x14 + str r3, [sp, #0x0] + bl FUN_020C2958 + movs r4, r0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020C10EC: ; 0x020C10EC + mov r2, #0x0 + str r2, [r4, #0xc] + str r6, [r4, #0x10] + mov r1, r5 + add r0, r4, #0x14 + str r2, [r4, #0x8] + bl FUN_020C2A94 +_020C1108: ; 0x020C1108 + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020C1118: ; 0x020C1118 + ldr r2, _020C1144 ; =0x021D2254 + mov r1, #0x24 + mla r2, r6, r1, r2 + str r0, [r4, #0x8] + mov r1, r4 + add r0, r2, #0xc + bl FUN_020ADBE8 + mov r0, #0x1 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020C1140: .word FUN_020C072C +_020C1144: .word 0x021D2254 + + arm_func_start FUN_020C1148 +FUN_020C1148: ; 0x020C1148 + mov r2, #0x24 + mul r2, r0, r2 + ldr r0, _020C115C ; =0x021D2270 + str r1, [r0, r2] + bx lr + .balign 4 +_020C115C: .word 0x021D2270 + + arm_func_start FUN_020C1160 +FUN_020C1160: ; 0x020C1160 + mov r2, #0x24 + mul r2, r0, r2 + mov r0, r1, lsl #0x10 + ldr r1, _020C117C ; =0x021D226C + mov r0, r0, lsr #0x10 + str r0, [r1, r2] + bx lr + .balign 4 +_020C117C: .word 0x021D226C + + arm_func_start FUN_020C1180 +FUN_020C1180: ; 0x020C1180 + mov r2, #0x24 + mul r2, r0, r2 + ldr r0, _020C1194 ; =0x021D2274 + strb r1, [r0, r2] + bx lr + .balign 4 +_020C1194: .word 0x021D2274 + + arm_func_start FUN_020C1198 +FUN_020C1198: ; 0x020C1198 + stmdb sp!, {r4-r6,lr} + mov r4, r0 + ldr r0, [r4, #0x24] + mov r0, r0, lsl #0x1e + movs r0, r0, asr #0x1f + ldmeqia sp!, {r4-r6,pc} +_020C11B0: ; 0x020C11B0 + ldr r0, [r4, #0x38] + cmp r0, #0x0 + beq _020C11E8 + mov r5, #0x1 +_020C11C0: + bl OS_DisableInterrupts + mov r6, r0 + mov r0, r4 + mov r1, r5 + bl FUN_020C1254 + mov r0, r6 + bl OS_RestoreInterrupts + ldr r0, [r4, #0x38] + cmp r0, #0x0 + bne _020C11C0 +_020C11E8: + ldr r0, [r4, #0x40] + mov r2, #0x1 + mov r1, #0x0 + mov r2, r2, lsl r0 + ldr r0, [r4, #0x44] + mov r3, r1 + bl SND_StartTimer + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020C1208 +FUN_020C1208: ; 0x020C1208 + stmdb sp!, {r4,lr} + ldr r1, [r0, #0x24] + mov r1, r1, lsl #0x1e + movs r1, r1, asr #0x1f + ldmeqia sp!, {r4,pc} +_020C121C: ; 0x020C121C + ldr r2, [r0, #0x40] + mov r3, #0x1 + mov r1, #0x0 + mov r2, r3, lsl r2 + ldr r0, [r0, #0x44] + mov r3, r1 + bl SND_StopTimer + bl SND_GetCurrentCommandTag + mov r4, r0 + mov r0, #0x1 + bl SND_FlushCommand + mov r0, r4 + bl SND_WaitForCommandProc + ldmia sp!, {r4,pc} + + arm_func_start FUN_020C1254 +FUN_020C1254: ; 0x020C1254 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + mov r4, r1 + ldr r0, [r5, #0x28] + ldr r1, [r5, #0x2c] + bl _u32_div_f + ldr r1, [r5, #0x48] + ldr r2, [r5, #0x38] + mov r3, r0 + mul lr, r3, r2 + cmp r1, #0x0 + mov r12, #0x0 + ble _020C12B8 + ldr r2, _020C1300 ; =0x021D2724 + ldr r0, _020C1304 ; =0x021D26E4 +_020C1294: + add r1, r5, r12 + ldrb r1, [r1, #0x4c] + ldr r1, [r2, r1, lsl #0x3] + add r1, r1, lr + str r1, [r0, r12, lsl #0x2] + ldr r1, [r5, #0x48] + add r12, r12, #0x1 + cmp r12, r1 + blt _020C1294 +_020C12B8: + ldr r0, [r5, #0x20] + ldr r2, _020C1304 ; =0x021D26E4 + str r0, [sp, #0x0] + ldr r12, [r5, #0x34] + mov r0, r4 + str r12, [sp, #0x4] + ldr r4, [r5, #0x30] + blx r4 + ldr r0, [r5, #0x38] + add r0, r0, #0x1 + str r0, [r5, #0x38] + ldr r1, [r5, #0x38] + ldr r0, [r5, #0x2c] + cmp r1, r0 + movge r0, #0x0 + strge r0, [r5, #0x38] + add sp, sp, #0xc + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C1300: .word 0x021D2724 +_020C1304: .word 0x021D26E4 + + arm_func_start FUN_020C1308 +FUN_020C1308: ; 0x020C1308 + ldr ip, _020C1314 ; =FUN_020C1254 + mov r1, #0x1 + bx r12 + .balign 4 +_020C1314: .word FUN_020C1254 + + arm_func_start FUN_020C1318 +FUN_020C1318: ; 0x020C1318 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x40] + bl FUN_020C029C + ldr r0, _020C1344 ; =0x021D26D8 + mov r1, r4 + bl FUN_020ADAB0 + ldr r0, [r4, #0x24] + bic r0, r0, #0x1 + str r0, [r4, #0x24] + ldmia sp!, {r4,pc} + .balign 4 +_020C1344: .word 0x021D26D8 + + arm_func_start FUN_020C1348 +FUN_020C1348: ; 0x020C1348 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + ldr r0, [r4, #0x24] + mov r0, r0, lsl #0x1e + movs r0, r0, asr #0x1f + beq _020C13B4 + ldr r0, [r4, #0x40] + mov r2, #0x1 + mov r1, #0x0 + mov r2, r2, lsl r0 + ldr r0, [r4, #0x44] + mov r3, r1 + bl SND_StopTimer + add r0, r4, #0x8 + bl PM_DeletePreSleepCallback + add r0, r4, #0x14 + bl PM_DeletePostSleepCallback + ldr r0, [r4, #0x24] + bic r0, r0, #0x2 + str r0, [r4, #0x24] + bl SND_GetCurrentCommandTag + mov r5, r0 + mov r0, #0x1 + bl SND_FlushCommand + mov r0, r5 + bl SND_WaitForCommandProc +_020C13B4: + mov r0, r4 + bl FUN_020C1318 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020C13C4 +FUN_020C13C4: ; 0x020C13C4 + stmdb sp!, {r4-r8,lr} + mov r7, r0 + str r1, [r7, #0x3c] + ldr r0, [r7, #0x48] + mov r5, #0x0 + cmp r0, #0x0 + ldmleia sp!, {r4-r8,pc} +_020C13E0: ; 0x020C13E0 + ldr r4, _020C142C ; =0x021D2724 + mov r8, #0x1 +_020C13E8: + add r0, r7, r5 + ldrb r6, [r0, #0x4c] + ldr r1, [r7, #0x3c] + add r0, r4, r6, lsl #0x3 + ldr r0, [r0, #0x4] + add r0, r1, r0 + bl SND_CalcChannelVolume + mov r2, r0 + mov r0, r8, lsl r6 + and r1, r2, #0xff + mov r2, r2, asr #0x8 + bl SND_SetChannelVolume + ldr r0, [r7, #0x48] + add r5, r5, #0x1 + cmp r5, r0 + blt _020C13E8 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020C142C: .word 0x021D2724 + + arm_func_start FUN_020C1430 +FUN_020C1430: ; 0x020C1430 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, [r0, #0x24] + mov r1, r1, lsl #0x1f + movs r1, r1, asr #0x1f + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + bl FUN_020C1348 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020C1458 +FUN_020C1458: ; 0x020C1458 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x40] + mov r2, #0x1 + mov r1, #0x0 + mov r2, r2, lsl r0 + ldr r0, [r4, #0x44] + mov r3, r1 + bl SND_StartTimer + ldr r0, [r4, #0x24] + mov r0, r0, lsl #0x1e + movs r0, r0, asr #0x1f + ldmneia sp!, {r4,pc} +_020C148C: ; 0x020C148C + add r0, r4, #0x8 + bl PM_PrependPreSleepCallback + add r0, r4, #0x14 + bl PM_AppendPostSleepCallback + ldr r0, [r4, #0x24] + orr r0, r0, #0x2 + str r0, [r4, #0x24] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020C14AC +FUN_020C14AC: ; 0x020C14AC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x24 + mov r10, r0 + ldr r4, [r10, #0x24] + mov r9, r1 + mov r1, r4, lsl #0x1f + movs r1, r1, asr #0x1f + ldr r1, [sp, #0x4c] + str r2, [sp, #0x18] + mov r4, r3 + str r1, [sp, #0x4c] + beq _020C14E0 + bl FUN_020C1430 +_020C14E0: + ldr r0, [sp, #0x4c] + ldr r2, [r10, #0x48] + mov r0, r0, lsl #0x5 + mul r1, r2, r0 + mov r0, r4 + bl _u32_div_f + ldr r1, [sp, #0x4c] + ldr r2, [sp, #0x48] + mul r1, r0, r1 + mov r0, r1, lsl #0x5 + str r0, [r10, #0x28] + ldr r0, [r10, #0x28] + cmp r9, #0x1 + moveq r0, r0, lsr #0x1 + mul r0, r2, r0 + ldr r1, [sp, #0x4c] + bl _u32_div_f + str r0, [sp, #0x1c] + bl FUN_020C02BC + str r0, [r10, #0x40] + ldr r0, [r10, #0x40] + cmp r0, #0x0 + addlt sp, sp, #0x24 + movlt r0, #0x0 + ldmltia sp!, {r4-r11,pc} +_020C1544: ; 0x020C1544 + ldr r0, [r10, #0x48] + mov r8, #0x0 + cmp r0, #0x0 + ble _020C15D4 + ldr r0, [sp, #0x48] + mov r7, r0, lsl #0x5 + ldr r6, _020C1668 ; =0x021D2724 + mov r5, r8 + mov r4, #0x7f + mov r11, #0x40 + mov r0, #0x1 + str r0, [sp, #0x20] +_020C1574: + ldr r2, [r10, #0x28] + ldr r1, [sp, #0x18] + add r0, r10, r8 + mla r1, r2, r8, r1 + ldrb r0, [r0, #0x4c] + ldr r3, [sp, #0x20] + str r1, [r6, r0, lsl #0x3] + add r1, r6, r0, lsl #0x3 + str r5, [r1, #0x4] + str r5, [sp, #0x0] + ldr r2, [r10, #0x28] + mov r1, r9 + mov r2, r2, lsr #0x2 + str r2, [sp, #0x4] + str r4, [sp, #0x8] + str r5, [sp, #0xc] + str r7, [sp, #0x10] + str r11, [sp, #0x14] + ldr r2, [r6, r0, lsl #0x3] + bl SND_SetupChannelPcm + ldr r0, [r10, #0x48] + add r8, r8, #0x1 + cmp r8, r0 + blt _020C1574 +_020C15D4: + str r10, [sp, #0x0] + ldr r1, [sp, #0x1c] + ldr r0, [r10, #0x40] + ldr r3, _020C166C ; =FUN_020C1308 + mov r2, r1 + bl SND_SetupAlarm + ldr r0, _020C1670 ; =0x021D26D8 + mov r1, r10 + bl FUN_020ADBE8 + ldr r0, [sp, #0x4c] + str r9, [r10, #0x20] + str r0, [r10, #0x2c] + ldr r1, [sp, #0x50] + ldr r0, [sp, #0x54] + str r1, [r10, #0x30] + str r0, [r10, #0x34] + mov r0, #0x0 + str r0, [r10, #0x38] + str r0, [r10, #0x3c] + ldr r0, [r10, #0x24] + bic r0, r0, #0x1 + orr r0, r0, #0x1 + str r0, [r10, #0x24] + bl OS_DisableInterrupts + mov r4, r0 + mov r2, #0x1 + mov r0, r10 + mov r1, #0x0 + str r2, [r10, #0x2c] + bl FUN_020C1254 + ldr r1, [sp, #0x4c] + mov r0, r4 + str r1, [r10, #0x2c] + bl OS_RestoreInterrupts + mov r0, #0x1 + add sp, sp, #0x24 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020C1668: .word 0x021D2724 +_020C166C: .word FUN_020C1308 +_020C1670: .word 0x021D26D8 + + arm_func_start FUN_020C1674 +FUN_020C1674: ; 0x020C1674 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x44] + cmp r0, #0x0 + ldmeqia sp!, {r4,pc} +_020C1688: ; 0x020C1688 + bl FUN_020C0340 +_020C168C: ; 0x020C168C + mov r0, #0x0 + str r0, [r4, #0x44] + str r0, [r4, #0x48] + ldmia sp!, {r4,pc} + + arm_func_start FUN_020C169C +FUN_020C169C: ; 0x020C169C + stmdb sp!, {r4-r6,lr} + mov r5, r1 + mov r4, #0x0 + mov r6, r0 + mov r12, r4 + cmp r5, #0x0 + ble _020C16DC + mov r1, #0x1 +_020C16BC: + ldrb r3, [r2, r12] + add r0, r6, r12 + strb r3, [r0, #0x4c] + ldrb r0, [r2, r12] + add r12, r12, #0x1 + cmp r12, r5 + orr r4, r4, r1, lsl r0 + blt _020C16BC +_020C16DC: + mov r0, r4 + bl FUN_020C0370 +_020C16E4: ; 0x020C16E4 + cmp r0, #0x0 + moveq r0, #0x0 + strne r5, [r6, #0x48] + strne r4, [r6, #0x44] + movne r0, #0x1 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020C16FC +FUN_020C16FC: ; 0x020C16FC + stmdb sp!, {r4,lr} + ldr r1, _020C176C ; =0x021D26D4 + mov r4, r0 + ldr r0, [r1, #0x0] + cmp r0, #0x0 + bne _020C172C + ldr r0, _020C1770 ; =0x021D26D8 + mov r1, #0x0 + bl FUN_020ADC74 + ldr r0, _020C176C ; =0x021D26D4 + mov r1, #0x1 + str r1, [r0, #0x0] +_020C172C: + ldr r1, _020C1774 ; =FUN_020C1208 + ldr r0, _020C1778 ; =FUN_020C1198 + str r1, [r4, #0x8] + str r4, [r4, #0xc] + str r0, [r4, #0x14] + str r4, [r4, #0x18] + mov r0, #0x0 + str r0, [r4, #0x44] + str r0, [r4, #0x48] + ldr r0, [r4, #0x24] + bic r0, r0, #0x1 + str r0, [r4, #0x24] + ldr r0, [r4, #0x24] + bic r0, r0, #0x2 + str r0, [r4, #0x24] + ldmia sp!, {r4,pc} + .balign 4 +_020C176C: .word 0x021D26D4 +_020C1770: .word 0x021D26D8 +_020C1774: .word FUN_020C1208 +_020C1778: .word FUN_020C1198 + + arm_func_start FUN_020C177C +FUN_020C177C: ; 0x020C177C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + ldr r4, [r7, #0x18] + ldr r0, [r7, #0x1c] + ldr r1, _020C186C ; =0x021D27A4 + mul r0, r4, r0 + ldr r3, [r7, #0xc] + ldr r2, [r7, #0x10] + ldr r1, [r1, #0x0] + add r6, r3, r0 + cmp r1, #0x0 + add r5, r2, r0 + beq _020C180C + ldr r2, _020C1870 ; =0x021D27A8 + mov r1, #0x14 + ldr r2, [r2, #0x0] + ldr r3, _020C1874 ; =0x021D2820 + mul r1, r2, r1 + str r7, [r3, r1] + add r1, r3, r1 + str r4, [r1, #0x4] + str r0, [r1, #0x8] + str r6, [r1, #0xc] + ldr r0, _020C1878 ; =0x021D27AC + mov r2, #0x0 + str r5, [r1, #0x10] + bl OS_SendMessage + ldr r0, _020C1870 ; =0x021D27A8 + ldr r1, [r0, #0x0] + add r1, r1, #0x1 + str r1, [r0, #0x0] + cmp r1, #0x8 + movge r1, #0x0 + strge r1, [r0, #0x0] + b _020C1844 +_020C180C: + mov r0, r6 + mov r1, r4 + bl DC_InvalidateRange + mov r0, r5 + mov r1, r4 + bl DC_InvalidateRange + ldr r1, [r7, #0x38] + mov r0, r6 + str r1, [sp, #0x0] + ldr r3, [r7, #0x8] + ldr r6, [r7, #0x34] + mov r1, r5 + mov r2, r4 + blx r6 +_020C1844: + ldr r0, [r7, #0x1c] + add r0, r0, #0x1 + str r0, [r7, #0x1c] + ldr r1, [r7, #0x1c] + ldr r0, [r7, #0x30] + cmp r1, r0 + movge r0, #0x0 + strge r0, [r7, #0x1c] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C186C: .word 0x021D27A4 +_020C1870: .word 0x021D27A8 +_020C1874: .word 0x021D2820 +_020C1878: .word 0x021D27AC + + arm_func_start FUN_020C187C +FUN_020C187C: ; 0x020C187C + stmdb sp!, {r4,lr} + ldr r4, _020C18F4 ; =0x021D27CC + ldr r0, [r4, #0x0] + cmp r0, #0x0 + ldmeqia sp!, {r4,pc} +_020C1890: ; 0x020C1890 + mov r0, #0x0 + str r0, [r4, #0x1c] + ldr r1, [r4, #0xc] + ldr r2, [r4, #0x14] + bl MIi_CpuClear32 + ldr r1, [r4, #0x10] + ldr r2, [r4, #0x14] + mov r0, #0x0 + bl MIi_CpuClear32 + ldr r0, [r4, #0xc] + ldr r1, [r4, #0x14] + bl DC_FlushRange + ldr r0, [r4, #0x10] + ldr r1, [r4, #0x14] + bl DC_FlushRange + ldr r1, [r4, #0x2c] + mov r3, #0x0 + cmp r1, #0x0 + movge r0, #0x1 + movge r2, r0, lsl r1 + ldr r0, [r4, #0x24] + ldr r1, [r4, #0x28] + movlt r2, #0x0 + bl SND_StartTimer + ldmia sp!, {r4,pc} + .balign 4 +_020C18F4: .word 0x021D27CC + + arm_func_start FUN_020C18F8 +FUN_020C18F8: + stmdb sp!, {r4,lr} + ldr r3, _020C194C ; =0x021D27CC + ldr r0, [r3, #0x0] + cmp r0, #0x0 + ldmeqia sp!, {r4,pc} +_020C190C: ; 0x020C190C + ldr r1, [r3, #0x2c] + cmp r1, #0x0 + movge r0, #0x1 + movge r2, r0, lsl r1 + ldr r0, [r3, #0x24] + ldr r1, [r3, #0x28] + movlt r2, #0x0 + mov r3, #0x0 + bl SND_StopTimer + bl SND_GetCurrentCommandTag + mov r4, r0 + mov r0, #0x1 + bl SND_FlushCommand + mov r0, r4 + bl SND_WaitForCommandProc + ldmia sp!, {r4,pc} + .balign 4 +_020C194C: .word 0x021D27CC + + arm_func_start FUN_020C1950 +FUN_020C1950: ; 0x020C1950 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r4, _020C1A3C ; =0x021D27CC + ldr r0, [r4, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} +_020C196C: ; 0x020C196C + ldr r1, [r4, #0x2c] + mov r3, #0x0 + cmp r1, #0x0 + movge r7, #0x1 + movlt r7, #0x0 + cmp r7, #0x0 + movne r0, #0x1 + movne r2, r0, lsl r1 + ldr r0, [r4, #0x24] + ldr r1, [r4, #0x28] + moveq r2, #0x0 + bl SND_StopTimer +_020C199C: ; 0x020C199C + cmp r7, #0x0 + beq _020C19DC + bl SND_GetCurrentCommandTag + mov r5, r0 + mov r0, #0x1 + bl SND_FlushCommand + mov r0, r5 + bl SND_WaitForCommandProc + ldr r6, _020C1A40 ; =0x021D27AC + mov r5, #0x0 +_020C19C4: + mov r0, r6 + mov r1, r5 + mov r2, r5 + bl OS_ReceiveMessage +_020C19D4: ; 0x020C19D4 + cmp r0, #0x0 + bne _020C19C4 +_020C19DC: + ldr r0, [r4, #0x28] + cmp r0, #0x0 + beq _020C19EC + bl FUN_020C0300 +_020C19EC: + ldr r0, [r4, #0x20] + cmp r0, #0x0 + beq _020C19FC + bl FUN_020C0340 +_020C19FC: + cmp r7, #0x0 + beq _020C1A0C + ldr r0, [r4, #0x2c] + bl FUN_020C029C +_020C1A0C: + ldr r0, [r4, #0x4] + cmp r0, #0x1 + bne _020C1A2C + mov r0, #0x0 + mov r1, r0 + mov r2, r0 + mov r3, r0 + bl SND_SetOutputSelector +_020C1A2C: + mov r0, #0x0 + str r0, [r4, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C1A3C: .word 0x021D27CC +_020C1A40: .word 0x021D27AC + + arm_func_start FUN_020C1A44 +FUN_020C1A44: ; 0x020C1A44 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x3c + mov r10, r3 + str r0, [sp, #0x18] + str r2, [sp, #0x20] + mov r2, #0x0 + str r1, [sp, #0x1c] + mov r0, r1 + mov r1, r10 + ldr r9, [sp, #0x6c] + ldr r8, [sp, #0x74] + str r2, [sp, #0x2c] + mvn r6, #0x0 + ldr r4, _020C1D90 ; =0x021D27CC + bl DC_FlushRange + ldr r0, [sp, #0x20] + mov r1, r10 + bl DC_FlushRange + ldr r0, [sp, #0x60] + ldr r1, [sp, #0x70] + cmp r0, #0x1 + moveq r7, #0x1 + ldr r0, _020C1D94 ; =0x00FFB0FF + movne r7, #0x0 + bl _s32_div_f + ldr r1, [sp, #0x84] + mov r11, r0 + cmp r1, #0x0 + beq _020C1B00 + add r1, r11, #0x10 + bic r11, r1, #0x1f + mov r2, r11, asr #0x5 + mov r0, r10 + cmp r7, #0x0 + ldr r1, [sp, #0x80] + moveq r0, r10, lsr #0x1 + str r2, [sp, #0x34] + bl _u32_div_f + ldr r1, [sp, #0x34] + mov r5, #0x20 + mul r0, r1, r0 + str r0, [sp, #0x30] + cmp r7, #0x0 + ldr r0, [sp, #0x34] + moveq r5, r5, lsr #0x1 + mul r0, r5, r0 + mov r5, r0 +_020C1B00: + cmp r7, #0x0 + movne r0, #0x0 + strne r0, [sp, #0x28] + moveq r0, #0x1 + streq r0, [sp, #0x28] + cmp r7, #0x0 + movne r0, #0x1 + strne r0, [sp, #0x24] + moveq r0, #0x0 + streq r0, [sp, #0x24] + ldr r0, [sp, #0x18] + cmp r0, #0x2 + movne r0, #0xa + strne r0, [sp, #0x2c] + ldr r0, [sp, #0x84] + cmp r0, #0x0 + beq _020C1B58 + bl FUN_020C02BC + movs r6, r0 + addmi sp, sp, #0x3c + movmi r0, #0x0 + ldmmiia sp!, {r4-r11,pc} +_020C1B58: + mov r0, #0x3 + bl FUN_020C031C +_020C1B60: ; 0x020C1B60 + cmp r0, #0x0 + bne _020C1B84 + cmp r6, #0x0 + blt _020C1B78 + mov r0, r6 + bl FUN_020C029C +_020C1B78: + add sp, sp, #0x3c + mov r0, #0x0 + ldmia sp!, {r4-r11,pc} +_020C1B84: + mov r0, #0xa + bl FUN_020C0370 +_020C1B8C: ; 0x020C1B8C + cmp r0, #0x0 + bne _020C1BB8 + cmp r6, #0x0 + blt _020C1BA4 + mov r0, r6 + bl FUN_020C029C +_020C1BA4: + mov r0, #0x3 + bl FUN_020C0300 + add sp, sp, #0x3c + mov r0, #0x0 + ldmia sp!, {r4-r11,pc} +_020C1BB8: + mov r0, #0x0 + mov r7, r10, lsr #0x2 + str r0, [sp, #0x0] + str r7, [sp, #0x4] + str r8, [sp, #0x8] + str r0, [sp, #0xc] + cmp r9, #0x0 + movne r3, #0x1 + ldr r1, [sp, #0x78] + str r11, [sp, #0x10] + str r1, [sp, #0x14] + ldr r1, [sp, #0x28] + ldr r2, [sp, #0x1c] + moveq r3, #0x2 + mov r0, #0x1 + bl SND_SetupChannelPcm + ldr r1, [sp, #0x64] + str r9, [sp, #0x0] + str r1, [sp, #0x4] + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x24] + str r0, [sp, #0x8] + ldr r2, [sp, #0x1c] + mov r0, #0x0 + mov r3, r7 + bl SND_SetupCapture +_020C1C20: ; 0x020C1C20 + mov r0, #0x0 + str r0, [sp, #0x0] + str r7, [sp, #0x4] + str r8, [sp, #0x8] + str r0, [sp, #0xc] + cmp r9, #0x0 + movne r3, #0x1 + ldr r2, [sp, #0x7c] + str r11, [sp, #0x10] + str r2, [sp, #0x14] + ldr r1, [sp, #0x28] + ldr r2, [sp, #0x20] + moveq r3, #0x2 + mov r0, #0x3 + bl SND_SetupChannelPcm + ldr r2, [sp, #0x64] + str r9, [sp, #0x0] + str r2, [sp, #0x4] + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x24] + str r0, [sp, #0x8] + ldr r2, [sp, #0x20] + mov r3, r7 + mov r0, #0x1 + bl SND_SetupCapture +_020C1C84: ; 0x020C1C84 + cmp r6, #0x0 + blt _020C1CA8 + ldr r2, [sp, #0x30] + ldr r3, _020C1D98 ; =FUN_020C177C + mov r1, r2 + mov r0, r6 + add r1, r1, r5 + str r4, [sp, #0x0] + bl SND_SetupAlarm +_020C1CA8: + ldr r0, [sp, #0x18] + cmp r0, #0x1 + bne _020C1CC8 + mov r0, #0x1 + mov r2, r0 + mov r3, r0 + mov r1, #0x2 + bl SND_SetOutputSelector +_020C1CC8: + cmp r6, #0x0 + movge r0, #0x1 + movge r2, r0, lsl r6 + ldr r0, [sp, #0x2c] + movlt r2, #0x0 + mov r1, #0x3 + mov r3, #0x0 + bl SND_StartTimer + mov r0, #0x1 + str r0, [r4, #0x0] + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x80] + str r0, [r4, #0x4] + mov r0, #0xa + str r0, [r4, #0x20] + ldr r0, [sp, #0x2c] + str r0, [r4, #0x24] + mov r0, #0x3 + str r0, [r4, #0x28] + ldr r0, [sp, #0x60] + str r6, [r4, #0x2c] + str r0, [r4, #0x8] + ldr r0, [sp, #0x1c] + str r0, [r4, #0xc] + ldr r0, [sp, #0x20] + str r0, [r4, #0x10] + mov r0, r10 + str r10, [r4, #0x14] + bl _u32_div_f + str r0, [r4, #0x18] + mov r1, #0x0 + str r1, [r4, #0x1c] + ldr r0, [sp, #0x80] + ldr r1, [sp, #0x84] + str r0, [r4, #0x30] + ldr r0, [sp, #0x88] + str r1, [r4, #0x34] + str r0, [r4, #0x38] + add r0, r4, #0x3c + str r8, [r4, #0x50] + bl FUN_020C3E6C + add r0, r4, #0x3c + mov r1, r8, lsl #0x8 + mov r2, #0x1 + bl FUN_020C3E40 +_020C1D7C: ; 0x020C1D7C + mov r0, #0x0 + str r0, [r4, #0x4c] + mov r0, #0x1 + add sp, sp, #0x3c + ldmia sp!, {r4-r11,pc} + .balign 4 +_020C1D90: .word 0x021D27CC +_020C1D94: .word 0x00FFB0FF +_020C1D98: .word FUN_020C177C + + arm_func_start FUN_020C1D9C +FUN_020C1D9C: ; 0x020C1D9C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r5, _020C1E34 ; =0x021D27CC + ldr r0, [r5, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} +_020C1DB8: ; 0x020C1DB8 + ldr r0, [r5, #0x4] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,pc} +_020C1DC8: ; 0x020C1DC8 + add r4, r5, #0x3c + mov r0, r4 + bl FUN_020C3DF4 + ldr r0, [r5, #0x4c] + cmp r0, #0x0 + beq _020C1DFC + mov r0, r4 + bl FUN_020C3DDC +_020C1DE8: ; 0x020C1DE8 + cmp r0, #0x0 + beq _020C1DFC + bl FUN_020C1950 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} +_020C1DFC: + mov r0, r4 + bl FUN_020C3E0C + ldr r1, [r5, #0x50] + mov r4, r0, asr #0x8 + cmp r4, r1 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} +_020C1E18: ; 0x020C1E18 + ldr r0, [r5, #0x24] + mov r1, r4 + mov r2, #0x0 + bl SND_SetChannelVolume + str r4, [r5, #0x50] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C1E34: .word 0x021D27CC + + arm_func_start FUN_020C1E38 +FUN_020C1E38: ; 0x020C1E38 + ldr r1, _020C1E50 ; =0x021D27A4 + mov r2, #0x0 + ldr r0, _020C1E54 ; =0x021D27CC + str r2, [r1, #0x0] + str r2, [r0, #0x0] + bx lr + .balign 4 +_020C1E50: .word 0x021D27A4 +_020C1E54: .word 0x021D27CC + + arm_func_start FUN_020C1E58 +FUN_020C1E58: ; 0x020C1E58 + ldr r0, _020C1E64 ; =0x021D27CC + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020C1E64: .word 0x021D27CC + + arm_func_start FUN_020C1E68 +FUN_020C1E68: ; 0x020C1E68 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C1EA0 ; =0x021D27CC + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r0, [r0, #0x4] + cmp r0, #0x1 + addne sp, sp, #0x4 + ldmneia sp!, {pc} + bl FUN_020C1950 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020C1EA0: .word 0x021D27CC + + arm_func_start FUN_020C1EA4 +FUN_020C1EA4: ; 0x020C1EA4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x2c + mov r5, r0 + mov r4, r1 + mov r7, r2 + mov r6, r3 + bl FUN_020C1E68 + ldr r0, _020C1F50 ; =0x021D27CC + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x2c + movne r0, #0x0 + ldmneia sp!, {r4-r7,pc} +_020C1ED8: ; 0x020C1ED8 + mov r1, r5 + mov r2, r4 + mov r0, #0x0 + bl MIi_CpuClear32 + mov r0, r5 + mov r1, r4 + bl DC_FlushRange + str r7, [sp, #0x0] + mov r2, #0x0 + str r2, [sp, #0x4] + str r2, [sp, #0x8] + mov r0, #0x1 + str r0, [sp, #0xc] + str r6, [sp, #0x10] + mov r1, #0x7f + str r1, [sp, #0x14] + str r2, [sp, #0x18] + ldr r2, [sp, #0x40] + str r1, [sp, #0x1c] + ldr r1, [sp, #0x44] + str r2, [sp, #0x20] + ldr r12, [sp, #0x48] + str r1, [sp, #0x24] + mov r1, r5 + mov r3, r4, lsr #0x1 + add r2, r5, r4, lsr #0x1 + str r12, [sp, #0x28] + bl FUN_020C1A44 + add sp, sp, #0x2c + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C1F50: .word 0x021D27CC + + arm_func_start FUN_020C1F54 +FUN_020C1F54: ; 0x020C1F54 + stmdb sp!, {r4,lr} + ldr r4, _020C1FA0 ; =0x021D27CC + mov r2, r0 + ldr r0, [r4, #0x0] + cmp r0, #0x0 + ldmeqia sp!, {r4,pc} +_020C1F6C: ; 0x020C1F6C + ldr r0, [r4, #0x4] + cmp r0, #0x0 + ldmneia sp!, {r4,pc} +_020C1F78: ; 0x020C1F78 + cmp r2, #0x0 + bne _020C1F88 + bl FUN_020C1950 + ldmia sp!, {r4,pc} +_020C1F88: + add r0, r4, #0x3c + mov r1, #0x0 + bl FUN_020C3E40 + mov r0, #0x1 + str r0, [r4, #0x4c] + ldmia sp!, {r4,pc} + .balign 4 +_020C1FA0: .word 0x021D27CC + + arm_func_start FUN_020C1FA4 +FUN_020C1FA4: ; 0x020C1FA4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, _020C1FEC ; =0x021D27CC + mov r12, r0 + ldr r0, [r3, #0x0] + mov r2, r1 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r0, [r3, #0x4] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {pc} + add r0, r3, #0x3c + mov r1, r12, lsl #0x8 + bl FUN_020C3E40 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020C1FEC: .word 0x021D27CC + + arm_func_start FUN_020C1FF0 +FUN_020C1FF0: ; 0x020C1FF0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x2c + mov r5, r0 + mov r0, #0x0 + mov r4, r1 + mov r7, r2 + mov r6, r3 + bl FUN_020C1F54 + ldr r0, _020C2098 ; =0x021D27CC + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x2c + movne r0, #0x0 + ldmneia sp!, {r4-r7,pc} +_020C2028: ; 0x020C2028 + mov r1, r5 + mov r2, r4 + mov r0, #0x0 + bl MIi_CpuClear32 + mov r0, r5 + mov r1, r4 + bl DC_FlushRange + str r7, [sp, #0x0] + mov r0, #0x0 + str r0, [sp, #0x4] + str r0, [sp, #0x8] + mov r1, #0x1 + str r1, [sp, #0xc] + ldr r1, [sp, #0x40] + str r6, [sp, #0x10] + str r1, [sp, #0x14] + str r0, [sp, #0x18] + mov r1, #0x7f + str r1, [sp, #0x1c] + str r0, [sp, #0x20] + str r0, [sp, #0x24] + mov r1, r5 + mov r3, r4, lsr #0x1 + add r2, r5, r4, lsr #0x1 + str r0, [sp, #0x28] + bl FUN_020C1A44 + add sp, sp, #0x2c + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C2098: .word 0x021D27CC + + arm_func_start FUN_020C209C +FUN_020C209C: ; 0x020C209C + mov r0, #0x0 + str r0, [r2, #0x88] + bx lr + + arm_func_start FUN_020C20A8 +FUN_020C20A8: ; 0x020C20A8 + mov r0, #0x0 + str r0, [r2, #0x84] + bx lr + + arm_func_start FUN_020C20B4 +FUN_020C20B4: ; 0x020C20B4 + mov r0, #0x0 + str r0, [r2, #0x8c] + bx lr + + arm_func_start FUN_020C20C0 +FUN_020C20C0: ; 0x020C20C0 + ldr r2, _020C20D8 ; =0x021D28C0 + ldr r2, [r2, #0x0] + ldr r2, [r2, #0x84] + add r0, r2, r0, lsl #0x4 + str r1, [r0, #0x14] + bx lr + .balign 4 +_020C20D8: .word 0x021D28C0 + + arm_func_start FUN_020C20DC +FUN_020C20DC: + ldr r1, _020C2100 ; =0x021D28C0 + ldr r1, [r1, #0x0] + ldr r2, [r1, #0x84] + ldr r1, [r2, #0x8] + cmp r0, r1 + movcs r0, #0x0 + addcc r0, r2, r0, lsl #0x4 + ldrcc r0, [r0, #0x14] + bx lr + .balign 4 +_020C2100: .word 0x021D28C0 + + arm_func_start FUN_020C2104 +FUN_020C2104: + stmdb sp!, {r4-r6,lr} + ldr r4, _020C2178 ; =0x021D28C0 + mov r5, r2 + ldr r4, [r4, #0x0] + mov r6, r1 + ldr r2, [r4, #0x84] + ldr r1, [r2, #0x8] + cmp r0, r1 + mvncs r0, #0x0 + ldmcsia sp!, {r4-r6,pc} +_020C212C: ; 0x020C212C + add r1, r2, #0xc + add r1, r1, r0, lsl #0x4 + ldr r0, [r1, #0x4] + ldr r1, [r1, #0x0] + sub r0, r0, r3 + cmp r5, r0 + movhi r5, r0 + add r0, r4, #0x34 + add r1, r1, r3 + mov r2, #0x0 + bl FS_SeekFile +_020C2158: ; 0x020C2158 + cmp r0, #0x0 + mvneq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020C2164: ; 0x020C2164 + mov r1, r6 + mov r2, r5 + add r0, r4, #0x34 + bl FS_ReadFile + ldmia sp!, {r4-r6,pc} + .balign 4 +_020C2178: .word 0x021D28C0 + + arm_func_start FUN_020C217C +FUN_020C217C: ; 0x020C217C + ldr r1, _020C21A0 ; =0x021D28C0 + ldr r1, [r1, #0x0] + ldr r2, [r1, #0x84] + ldr r1, [r2, #0x8] + cmp r0, r1 + movcs r0, #0x0 + addcc r0, r2, r0, lsl #0x4 + ldrcc r0, [r0, #0x10] + bx lr + .balign 4 +_020C21A0: .word 0x021D28C0 + + arm_func_start FUN_020C21A4 +FUN_020C21A4: ; 0x020C21A4 + ldr r1, _020C2204 ; =0x021D28C0 + ldr r3, [r1, #0x0] + ldr r2, [r3, #0x8c] + ldr r1, [r2, #0x1c] + cmp r1, #0x0 + moveq r2, #0x0 + addne r2, r2, r1 + cmp r2, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r0, #0x0 + movlt r0, #0x0 + bxlt lr + ldr r1, [r2, #0x0] + cmp r0, r1 + movcs r0, #0x0 + bxcs lr + add r0, r2, r0, lsl #0x2 + ldr r1, [r0, #0x4] + ldr r0, [r3, #0x8c] + cmp r1, #0x0 + moveq r0, #0x0 + addne r0, r0, r1 + bx lr + .balign 4 +_020C2204: .word 0x021D28C0 + + arm_func_start FUN_020C2208 +FUN_020C2208: ; 0x020C2208 + ldr r1, _020C2268 ; =0x021D28C0 + ldr r3, [r1, #0x0] + ldr r2, [r3, #0x8c] + ldr r1, [r2, #0x18] + cmp r1, #0x0 + moveq r2, #0x0 + addne r2, r2, r1 + cmp r2, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r0, #0x0 + movlt r0, #0x0 + bxlt lr + ldr r1, [r2, #0x0] + cmp r0, r1 + movcs r0, #0x0 + bxcs lr + add r0, r2, r0, lsl #0x2 + ldr r1, [r0, #0x4] + ldr r0, [r3, #0x8c] + cmp r1, #0x0 + moveq r0, #0x0 + addne r0, r0, r1 + bx lr + .balign 4 +_020C2268: .word 0x021D28C0 + + arm_func_start FUN_020C226C +FUN_020C226C: + ldr r1, _020C22CC ; =0x021D28C0 + ldr r3, [r1, #0x0] + ldr r2, [r3, #0x8c] + ldr r1, [r2, #0x14] + cmp r1, #0x0 + moveq r2, #0x0 + addne r2, r2, r1 + cmp r2, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r0, #0x0 + movlt r0, #0x0 + bxlt lr + ldr r1, [r2, #0x0] + cmp r0, r1 + movcs r0, #0x0 + bxcs lr + add r0, r2, r0, lsl #0x2 + ldr r1, [r0, #0x4] + ldr r0, [r3, #0x8c] + cmp r1, #0x0 + moveq r0, #0x0 + addne r0, r0, r1 + bx lr + .balign 4 +_020C22CC: .word 0x021D28C0 + + arm_func_start FUN_020C22D0 +FUN_020C22D0: ; 0x020C22D0 + ldr r1, _020C2330 ; =0x021D28C0 + ldr r3, [r1, #0x0] + ldr r2, [r3, #0x8c] + ldr r1, [r2, #0x10] + cmp r1, #0x0 + moveq r2, #0x0 + addne r2, r2, r1 + cmp r2, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r0, #0x0 + movlt r0, #0x0 + bxlt lr + ldr r1, [r2, #0x0] + cmp r0, r1 + movcs r0, #0x0 + bxcs lr + add r0, r2, r0, lsl #0x2 + ldr r1, [r0, #0x4] + ldr r0, [r3, #0x8c] + cmp r1, #0x0 + moveq r0, #0x0 + addne r0, r0, r1 + bx lr + .balign 4 +_020C2330: .word 0x021D28C0 + + arm_func_start FUN_020C2334 +FUN_020C2334: + ldr r1, _020C2394 ; =0x021D28C0 + ldr r3, [r1, #0x0] + ldr r2, [r3, #0x8c] + ldr r1, [r2, #0xc] + cmp r1, #0x0 + moveq r2, #0x0 + addne r2, r2, r1 + cmp r2, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r0, #0x0 + movlt r0, #0x0 + bxlt lr + ldr r1, [r2, #0x0] + cmp r0, r1 + movcs r0, #0x0 + bxcs lr + add r0, r2, r0, lsl #0x2 + ldr r1, [r0, #0x4] + ldr r0, [r3, #0x8c] + cmp r1, #0x0 + moveq r0, #0x0 + addne r0, r0, r1 + bx lr + .balign 4 +_020C2394: .word 0x021D28C0 + + arm_func_start FUN_020C2398 +FUN_020C2398: + ldr r1, _020C23F8 ; =0x021D28C0 + ldr r3, [r1, #0x0] + ldr r2, [r3, #0x8c] + ldr r1, [r2, #0x8] + cmp r1, #0x0 + moveq r2, #0x0 + addne r2, r2, r1 + cmp r2, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r0, #0x0 + movlt r0, #0x0 + bxlt lr + ldr r1, [r2, #0x0] + cmp r0, r1 + movcs r0, #0x0 + bxcs lr + add r0, r2, r0, lsl #0x2 + ldr r1, [r0, #0x4] + ldr r0, [r3, #0x8c] + cmp r1, #0x0 + moveq r0, #0x0 + addne r0, r0, r1 + bx lr + .balign 4 +_020C23F8: .word 0x021D28C0 + + arm_func_start FUN_020C23FC +FUN_020C23FC: ; 0x020C23FC + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FUN_020C2398 +_020C2408: ; 0x020C2408 + cmp r0, #0x0 + moveq r0, #0x0 + addne r0, r0, #0x4 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020C241C +FUN_020C241C: ; 0x020C241C + ldr r0, _020C2428 ; =0x021D28C0 + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020C2428: .word 0x021D28C0 + + arm_func_start FUN_020C242C +FUN_020C242C: ; 0x020C242C + ldr r1, _020C2440 ; =0x021D28C0 + ldr r2, [r1, #0x0] + str r0, [r1, #0x0] + mov r0, r2 + bx lr + .balign 4 +_020C2440: .word 0x021D28C0 + + arm_func_start FUN_020C2444 +FUN_020C2444: ; 0x020C2444 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r0, r4 + mov r1, r5 + mov r2, #0x30 + bl MIi_CpuCopy32 + ldr r0, [r5, #0x18] + mov r12, #0x0 + cmp r0, #0x0 + moveq r0, #0x0 + addne r0, r4, r0 + str r0, [r5, #0x8c] + ldr r0, [r5, #0x20] + cmp r0, #0x0 + moveq r0, #0x0 + addne r0, r4, r0 + str r0, [r5, #0x84] + ldr r0, [r5, #0x10] + cmp r0, #0x0 + moveq r0, #0x0 + addne r0, r4, r0 + str r0, [r5, #0x88] + ldr r2, [r5, #0x84] + ldr r0, [r2, #0x8] + cmp r0, #0x0 + bls _020C24F0 + mov r3, r12 + mov r1, r12 +_020C24BC: + add r2, r2, #0xc + ldr r0, [r2, r3] + add r2, r2, r3 + cmp r0, #0x0 + moveq r0, r1 + addne r0, r4, r0 + str r0, [r2, #0x8] + ldr r2, [r5, #0x84] + add r12, r12, #0x1 + ldr r0, [r2, #0x8] + add r3, r3, #0x10 + cmp r12, r0 + blo _020C24BC +_020C24F0: + mov r1, #0x0 + ldr r0, _020C2508 ; =0x021D28C0 + str r1, [r5, #0x30] + str r5, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C2508: .word 0x021D28C0 + + arm_func_start FUN_020C250C +FUN_020C250C: + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r6, r0 + mov r5, r1 + mov r1, #0x0 + mov r4, r2 + mov r2, r1 + add r0, r6, #0x34 + bl FS_SeekFile +_020C2530: ; 0x020C2530 + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020C2540: ; 0x020C2540 + mov r1, r6 + add r0, r6, #0x34 + mov r2, #0x30 + bl FS_ReadFile + cmp r0, #0x30 + addne sp, sp, #0x8 + movne r0, #0x0 + ldmneia sp!, {r4-r6,pc} +_020C2560: ; 0x020C2560 + cmp r5, #0x0 + beq _020C26E0 + mov r0, #0x0 + str r0, [sp, #0x0] + ldr r1, [r6, #0x1c] + ldr r2, _020C26EC ; =FUN_020C20B4 + mov r0, r5 + mov r3, r6 + bl FUN_020C2958 + str r0, [r6, #0x8c] + ldr r0, [r6, #0x8c] + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020C259C: ; 0x020C259C + ldr r1, [r6, #0x18] + add r0, r6, #0x34 + mov r2, #0x0 + bl FS_SeekFile +_020C25AC: ; 0x020C25AC + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020C25BC: ; 0x020C25BC + ldr r1, [r6, #0x8c] + ldr r2, [r6, #0x1c] + add r0, r6, #0x34 + bl FS_ReadFile + ldr r1, [r6, #0x1c] + cmp r0, r1 + addne sp, sp, #0x8 + movne r0, #0x0 + ldmneia sp!, {r4-r6,pc} +_020C25E0: ; 0x020C25E0 + mov r0, #0x0 + str r0, [sp, #0x0] + ldr r1, [r6, #0x24] + ldr r2, _020C26F0 ; =FUN_020C20A8 + mov r0, r5 + mov r3, r6 + bl FUN_020C2958 + str r0, [r6, #0x84] + ldr r0, [r6, #0x84] + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020C2614: ; 0x020C2614 + ldr r1, [r6, #0x20] + add r0, r6, #0x34 + mov r2, #0x0 + bl FS_SeekFile +_020C2624: ; 0x020C2624 + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020C2634: ; 0x020C2634 + ldr r1, [r6, #0x84] + ldr r2, [r6, #0x24] + add r0, r6, #0x34 + bl FS_ReadFile + ldr r1, [r6, #0x24] + cmp r0, r1 + addne sp, sp, #0x8 + movne r0, #0x0 + ldmneia sp!, {r4-r6,pc} +_020C2658: ; 0x020C2658 + cmp r4, #0x0 + beq _020C26E0 + ldr r1, [r6, #0x14] + cmp r1, #0x0 + beq _020C26E0 + mov r4, #0x0 + ldr r2, _020C26F4 ; =FUN_020C209C + mov r0, r5 + mov r3, r6 + str r4, [sp, #0x0] + bl FUN_020C2958 + str r0, [r6, #0x88] + ldr r0, [r6, #0x88] + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, r4 + ldmeqia sp!, {r4-r6,pc} +_020C269C: ; 0x020C269C + ldr r1, [r6, #0x10] + add r0, r6, #0x34 + mov r2, r4 + bl FS_SeekFile +_020C26AC: ; 0x020C26AC + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, r4 + ldmeqia sp!, {r4-r6,pc} +_020C26BC: ; 0x020C26BC + ldr r1, [r6, #0x88] + ldr r2, [r6, #0x14] + add r0, r6, #0x34 + bl FS_ReadFile + ldr r1, [r6, #0x14] + cmp r0, r1 + addne sp, sp, #0x8 + movne r0, r4 + ldmneia sp!, {r4-r6,pc} +_020C26E0: + mov r0, #0x1 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020C26EC: .word FUN_020C20B4 +_020C26F0: .word FUN_020C20A8 +_020C26F4: .word FUN_020C209C + + arm_func_start FUN_020C26F8 +FUN_020C26F8: ; 0x020C26F8 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r12, #0x0 + str r12, [r6, #0x8c] + str r12, [r6, #0x84] + add r0, r6, #0x7c + mov r5, r2 + mov r4, r3 + str r12, [r6, #0x88] + bl FS_ConvertPathToFileID +_020C2720: ; 0x020C2720 + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020C2728: ; 0x020C2728 + add r0, r6, #0x34 + bl FS_InitFile + add r1, r6, #0x7c + add r0, r6, #0x34 + ldmia r1, {r1-r2} + bl FS_OpenFileFast +_020C2740: ; 0x020C2740 + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,pc} +_020C2748: ; 0x020C2748 + mov r3, #0x1 + mov r0, r6 + mov r1, r5 + mov r2, r4 + str r3, [r6, #0x30] + bl FUN_020C250C +_020C2760: ; 0x020C2760 + cmp r0, #0x0 + ldrne r0, _020C2770 ; =0x021D28C0 + strne r6, [r0, #0x0] + ldmia sp!, {r4-r6,pc} + .balign 4 +_020C2770: .word 0x021D28C0 + + arm_func_start FUN_020C2774 +FUN_020C2774: ; 0x020C2774 + stmdb sp!, {r4,lr} + bl SND_GetCurrentCommandTag + mov r4, r0 + mov r0, #0x1 + bl SND_FlushCommand + mov r0, r4 + bl SND_WaitForCommandProc + ldmia sp!, {r4,pc} + + arm_func_start FUN_020C2794 +FUN_020C2794: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r0, [r5, #0x0] + mov r1, #0x14 + mov r2, #0x4 + bl FUN_020AE638 + movs r4, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} +_020C27C0: ; 0x020C27C0 + bl FUN_020C2818 + mov r1, r4 + add r0, r5, #0x4 + bl FUN_020ADBE8 + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020C27DC +FUN_020C27DC: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + add r0, r5, #0x4 + mov r1, #0xc + bl FUN_020ADC74 + mov r0, r5 + str r4, [r5, #0x0] + bl FUN_020C2794 +_020C2804: ; 0x020C2804 + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020C2818 +FUN_020C2818: ; 0x020C2818 + ldr ip, _020C2824 ; =FUN_020ADC74 + mov r1, #0x0 + bx r12 + .balign 4 +_020C2824: .word FUN_020ADC74 + + arm_func_start FUN_020C2828 +FUN_020C2828: ; 0x020C2828 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r7, #0x0 + movs r9, r1 + mov r10, r0 + mov r6, r7 + bne _020C2850 + bl FUN_020C29C0 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} +_020C2850: + ldrh r0, [r10, #0xc] + cmp r9, r0 + bge _020C28D8 + mov r11, r7 + add r5, r10, #0x4 + mov r4, #0x1 +_020C2868: + mov r0, r5 + mov r1, r11 + bl FUN_020ADA84 + mov r1, r7 + mov r8, r0 + bl FUN_020ADA84 + movs r7, r0 + beq _020C28C0 +_020C2888: + ldr r12, [r7, #0xc] + cmp r12, #0x0 + beq _020C28AC + ldr r1, [r7, #0x8] + ldr r2, [r7, #0x10] + ldr r3, [r7, #0x14] + add r0, r7, #0x20 + blx r12 + mov r6, r4 +_020C28AC: + mov r0, r8 + mov r1, r7 + bl FUN_020ADA84 + movs r7, r0 + bne _020C2888 +_020C28C0: + mov r0, r5 + mov r1, r8 + bl FUN_020ADAB0 + ldrh r0, [r10, #0xc] + cmp r9, r0 + blt _020C2868 +_020C28D8: + ldr r0, [r10, #0x0] + mov r1, r9 + bl FUN_020AE554 +_020C28E4: ; 0x020C28E4 + cmp r6, #0x0 + beq _020C28F0 + bl FUN_020C2774 +_020C28F0: + ldrh r1, [r10, #0xc] + ldr r0, [r10, #0x0] + bl FUN_020AE5B0 + mov r0, r10 + bl FUN_020C2794 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020C290C +FUN_020C290C: ; 0x020C290C + stmdb sp!, {r4,lr} + mov r4, r0 + ldrh r1, [r4, #0xc] + ldr r0, [r4, #0x0] + bl FUN_020AE5B0 +_020C2920: ; 0x020C2920 + cmp r0, #0x0 + mvneq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020C292C: ; 0x020C292C + mov r0, r4 + bl FUN_020C2794 +_020C2934: ; 0x020C2934 + cmp r0, #0x0 + ldrneh r0, [r4, #0xc] + subne r0, r0, #0x1 + ldmneia sp!, {r4,pc} +_020C2944: ; 0x020C2944 + ldr r0, [r4, #0x0] + mov r1, #0x0 + bl FUN_020AE554 +_020C2950: ; 0x020C2950 + mvn r0, #0x0 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020C2958 +FUN_020C2958: ; 0x020C2958 + stmdb sp!, {r4-r8,lr} + mov r7, r1 + mov r8, r0 + add r0, r7, #0x1f + bic r1, r0, #0x1f + mov r6, r2 + ldr r0, [r8, #0x0] + add r1, r1, #0x20 + mov r2, #0x20 + mov r5, r3 + bl FUN_020AE638 + movs r4, r0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,pc} +_020C2990: ; 0x020C2990 + add r0, r8, #0x4 + mov r1, #0x0 + bl FUN_020ADA84 + str r7, [r4, #0x8] + str r6, [r4, #0xc] + ldr r2, [sp, #0x18] + str r5, [r4, #0x10] + mov r1, r4 + str r2, [r4, #0x14] + bl FUN_020ADBE8 + add r0, r4, #0x20 + ldmia sp!, {r4-r8,pc} + + arm_func_start FUN_020C29C0 +FUN_020C29C0: + stmdb sp!, {r4-r10,lr} + mov r8, r0 + mov r5, #0x0 + mov r1, r5 + add r0, r8, #0x4 + bl FUN_020ADA84 + movs r7, r0 + beq _020C2A58 + add r9, r8, #0x4 + mov r10, #0x1 + mov r4, r5 +_020C29EC: + mov r0, r7 + mov r1, r4 + bl FUN_020ADA84 + movs r6, r0 + beq _020C2A38 +_020C2A00: + ldr r12, [r6, #0xc] + cmp r12, #0x0 + beq _020C2A24 + ldr r1, [r6, #0x8] + ldr r2, [r6, #0x10] + ldr r3, [r6, #0x14] + add r0, r6, #0x20 + blx r12 + mov r5, r10 +_020C2A24: + mov r0, r7 + mov r1, r6 + bl FUN_020ADA84 + movs r6, r0 + bne _020C2A00 +_020C2A38: + mov r0, r9 + mov r1, r7 + bl FUN_020ADAB0 + mov r0, r9 + mov r1, r4 + bl FUN_020ADA84 + movs r7, r0 + bne _020C29EC +_020C2A58: + ldr r0, [r8, #0x0] + mov r1, #0x3 + bl FUN_020AE600 +_020C2A64: ; 0x020C2A64 + cmp r5, #0x0 + beq _020C2A70 + bl FUN_020C2774 +_020C2A70: + mov r0, r8 + bl FUN_020C2794 + ldmia sp!, {r4-r10,pc} + + arm_func_start FUN_020C2A7C +FUN_020C2A7C: ; 0x020C2A7C + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020C29C0 +_020C2A88: ; 0x020C2A88 + ldr r0, [r4, #0x0] + bl thunk_FUN_020adc8c_2 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020C2A94 +FUN_020C2A94: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + add r2, r0, #0x3 + add r0, r0, r1 + bic r5, r2, #0x3 + cmp r5, r0 + addhi sp, sp, #0x4 + movhi r0, #0x0 + ldmhiia sp!, {r4-r5,pc} +_020C2AB8: ; 0x020C2AB8 + sub r1, r0, r5 + cmp r1, #0x10 + addcc sp, sp, #0x4 + movcc r0, #0x0 + ldmccia sp!, {r4-r5,pc} +_020C2ACC: ; 0x020C2ACC + add r0, r5, #0x10 + sub r1, r1, #0x10 + mov r2, #0x0 + bl FUN_020AE684 + movs r4, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} +_020C2AEC: ; 0x020C2AEC + mov r0, r5 + mov r1, r4 + bl FUN_020C27DC +_020C2AF8: ; 0x020C2AF8 + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, r5 + ldmneia sp!, {r4-r5,pc} +_020C2B08: ; 0x020C2B08 + mov r0, r4 + bl thunk_FUN_020adc8c_2 +_020C2B10: ; 0x020C2B10 + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020C2B1C +FUN_020C2B1C: + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x20 + mov r8, r0 + add r0, sp, #0x8 + mov r7, r1 + mov r6, r2 + mov r5, r3 + ldr r4, [sp, #0x40] + bl SND_GetFirstInstDataPos + ldr r1, [sp, #0x8] + ldr r0, [sp, #0xc] + str r1, [sp, #0x0] + str r0, [sp, #0x4] + cmp r7, #0x0 + add r2, sp, #0x0 + addeq sp, sp, #0x20 + moveq r0, #0x0 + ldmeqia sp!, {r4-r10,pc} +_020C2B64: ; 0x020C2B64 + add r1, sp, #0x10 + mov r0, r7 + bl SND_GetNextInstData +_020C2B70: ; 0x020C2B70 + cmp r0, #0x0 + beq _020C2BD4 + add r10, sp, #0x10 + add r9, sp, #0x0 +_020C2B80: + ldrb r0, [sp, #0x10] + cmp r0, #0x1 + bne _020C2BBC + ldrh r0, [sp, #0x14] + cmp r6, r0 + bne _020C2BBC + ldrh r1, [sp, #0x12] + mov r0, r8 + mov r2, r5 + mov r3, r4 + bl FUN_020C2BE0 +_020C2BAC: ; 0x020C2BAC + cmp r0, #0x0 + addeq sp, sp, #0x20 + moveq r0, #0x0 + ldmeqia sp!, {r4-r10,pc} +_020C2BBC: + mov r0, r7 + mov r1, r10 + mov r2, r9 + bl SND_GetNextInstData +_020C2BCC: ; 0x020C2BCC + cmp r0, #0x0 + bne _020C2B80 +_020C2BD4: + mov r0, #0x1 + add sp, sp, #0x20 + ldmia sp!, {r4-r10,pc} + + arm_func_start FUN_020C2BE0 +FUN_020C2BE0: + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl SND_GetWaveDataAddress +_020C2BFC: ; 0x020C2BFC + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, #0x1 + ldmneia sp!, {r4-r9,pc} +_020C2C0C: ; 0x020C2C0C + mov r0, r7 + bl SND_GetWaveDataCount + ldr r1, [r7, #0x38] + sub r0, r0, #0x1 + add r1, r1, r6 + add r1, r7, r1, lsl #0x2 + cmp r6, r0 + ldrcc r0, [r1, #0x40] + ldr r8, [r1, #0x3c] + ldrcs r0, [r7, #0x8] + cmp r4, #0x0 + sub r9, r0, r8 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,pc} +_020C2C48: ; 0x020C2C48 + ldr r2, _020C2CBC ; =FUN_020C2CC0 + mov r0, r4 + mov r3, r7 + add r1, r9, #0x20 + str r6, [sp, #0x0] + bl FUN_020C2958 + movs r4, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,pc} +_020C2C70: ; 0x020C2C70 + mov r0, r5 + mov r1, r4 + mov r2, r9 + mov r3, r8 + bl FUN_020C2104 +_020C2C84: ; 0x020C2C84 + cmp r9, r0 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r9,pc} +_020C2C94: ; 0x020C2C94 + mov r0, r4 + mov r1, r9 + bl DC_StoreRange + mov r0, r7 + mov r1, r6 + mov r2, r4 + bl SND_SetWaveDataAddress + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020C2CBC: .word FUN_020C2CC0 + + arm_func_start FUN_020C2CC0 +FUN_020C2CC0: ; 0x020C2CC0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r2 + mov r7, r0 + mov r4, r3 + mov r6, r1 + mov r0, r5 + mov r1, r4 + bl SND_GetWaveDataAddress +_020C2CE4: ; 0x020C2CE4 + cmp r7, r0 + bne _020C2CFC + mov r0, r5 + mov r1, r4 + mov r2, #0x0 + bl SND_SetWaveDataAddress +_020C2CFC: + mov r0, r7 + add r1, r7, r6 + bl SND_InvalidateWaveData + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020C2D10 +FUN_020C2D10: ; 0x020C2D10 + stmdb sp!, {r4,lr} + mov r1, r2 + mov r4, r0 + mov r2, r3 + bl FUN_020C2DD0 + mov r0, r4 + bl SND_DestroyWaveArc + ldmia sp!, {r4,pc} + + arm_func_start FUN_020C2D30 +FUN_020C2D30: ; 0x020C2D30 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r1, r2 + mov r5, r0 + mov r2, r3 + bl FUN_020C2DD0 + mov r0, r5 + add r1, r5, r4 + bl SND_InvalidateWaveData + mov r0, r5 + bl SND_DestroyWaveArc + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020C2D68 +FUN_020C2D68: ; 0x020C2D68 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r1, r2 + mov r5, r0 + mov r2, r3 + bl FUN_020C2DD0 + mov r0, r5 + add r1, r5, r4 + bl SND_InvalidateBankData + mov r0, r5 + bl SND_DestroyBank + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020C2DA0 +FUN_020C2DA0: ; 0x020C2DA0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r1, r2 + mov r5, r0 + mov r2, r3 + bl FUN_020C2DD0 + mov r0, r5 + add r1, r5, r4 + bl SND_InvalidateSeqData + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020C2DD0 +FUN_020C2DD0: ; 0x020C2DD0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + movs r5, r1 + mov r7, r0 + mov r6, r2 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} +_020C2DEC: ; 0x020C2DEC + bl OS_DisableInterrupts + mov r4, r0 + mov r0, r5 + bl FUN_020C242C + mov r5, r0 + mov r0, r6 + bl FUN_020C20DC +_020C2E08: ; 0x020C2E08 + cmp r7, r0 + bne _020C2E1C + mov r0, r6 + mov r1, #0x0 + bl FUN_020C20C0 +_020C2E1C: + mov r0, r5 + bl FUN_020C242C + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020C2E34 +FUN_020C2E34: ; 0x020C2E34 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r9, r0 + mov r8, r1 + mov r7, r2 + bl FUN_020C20DC + movs r6, r0 + bne _020C2F40 + ldr r1, _020C2F4C ; =0x021D28C4 + mov r0, r9 + mov r2, #0x3c + mov r3, #0x0 + bl FUN_020C2104 + cmp r0, #0x3c + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r9,pc} +_020C2E78: ; 0x020C2E78 + ldr r0, _020C2F4C ; =0x021D28C4 + cmp r8, #0x0 + ldr r0, [r0, #0x38] + addeq sp, sp, #0x4 + mov r4, r0, lsl #0x2 + mov r0, r4, lsl #0x1 + add r5, r0, #0x3c + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,pc} +_020C2E9C: ; 0x020C2E9C + cmp r7, #0x0 + moveq r3, #0x0 + beq _020C2EB0 + bl FUN_020C241C + mov r3, r0 +_020C2EB0: + ldr r2, _020C2F50 ; =FUN_020C2D10 + mov r0, r8 + add r1, r5, #0x20 + str r9, [sp, #0x0] + bl FUN_020C2958 + movs r6, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,pc} +_020C2ED4: ; 0x020C2ED4 + mov r0, r9 + mov r1, r6 + add r2, r4, #0x3c + mov r3, #0x0 + bl FUN_020C2104 + add r1, r4, #0x3c + cmp r0, r1 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r9,pc} +_020C2EFC: ; 0x020C2EFC + ldr r1, [r6, #0x38] + add r0, r6, #0x3c + mov r2, r4 + add r1, r0, r1, lsl #0x2 + bl MI_CpuCopy8 + mov r2, r4 + add r0, r6, #0x3c + mov r1, #0x0 + bl MI_CpuFill8 + mov r0, r6 + mov r1, r5 + bl DC_StoreRange +_020C2F2C: ; 0x020C2F2C + cmp r7, #0x0 + beq _020C2F40 + mov r0, r9 + mov r1, r6 + bl FUN_020C20C0 +_020C2F40: + mov r0, r6 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020C2F4C: .word 0x021D28C4 +_020C2F50: .word FUN_020C2D10 + + arm_func_start FUN_020C2F54 +FUN_020C2F54: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl FUN_020C20DC + movs r4, r0 + bne _020C2FBC + cmp r5, #0x0 + moveq r2, #0x0 + beq _020C2F88 + bl FUN_020C241C + mov r2, r0 +_020C2F88: + ldr r1, _020C2FC8 ; =FUN_020C2D30 + mov r0, r7 + mov r3, r7 + str r6, [sp, #0x0] + bl FUN_020C3134 + mov r4, r0 + cmp r5, #0x0 + beq _020C2FBC + cmp r4, #0x0 + beq _020C2FBC + mov r0, r7 + mov r1, r4 + bl FUN_020C20C0 +_020C2FBC: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C2FC8: .word FUN_020C2D30 + + arm_func_start FUN_020C2FCC +FUN_020C2FCC: ; 0x020C2FCC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl FUN_020C20DC + movs r4, r0 + bne _020C3034 + cmp r5, #0x0 + moveq r2, #0x0 + beq _020C3000 + bl FUN_020C241C + mov r2, r0 +_020C3000: + ldr r1, _020C3040 ; =FUN_020C2D68 + mov r0, r7 + mov r3, r7 + str r6, [sp, #0x0] + bl FUN_020C3134 + mov r4, r0 + cmp r5, #0x0 + beq _020C3034 + cmp r4, #0x0 + beq _020C3034 + mov r0, r7 + mov r1, r4 + bl FUN_020C20C0 +_020C3034: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C3040: .word FUN_020C2D68 + + arm_func_start FUN_020C3044 +FUN_020C3044: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl FUN_020C20DC + movs r4, r0 + bne _020C30AC + cmp r5, #0x0 + moveq r2, #0x0 + beq _020C3078 + bl FUN_020C241C + mov r2, r0 +_020C3078: + ldr r1, _020C30B8 ; =FUN_020C2DA0 + mov r0, r7 + mov r3, r7 + str r6, [sp, #0x0] + bl FUN_020C3134 + mov r4, r0 + cmp r5, #0x0 + beq _020C30AC + cmp r4, #0x0 + beq _020C30AC + mov r0, r7 + mov r1, r4 + bl FUN_020C20C0 +_020C30AC: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C30B8: .word FUN_020C2DA0 + + arm_func_start FUN_020C30BC +FUN_020C30BC: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl FUN_020C20DC + movs r4, r0 + bne _020C3124 + cmp r5, #0x0 + moveq r2, #0x0 + beq _020C30F0 + bl FUN_020C241C + mov r2, r0 +_020C30F0: + ldr r1, _020C3130 ; =FUN_020C2DA0 + mov r0, r7 + mov r3, r7 + str r6, [sp, #0x0] + bl FUN_020C3134 + mov r4, r0 + cmp r5, #0x0 + beq _020C3124 + cmp r4, #0x0 + beq _020C3124 + mov r0, r7 + mov r1, r4 + bl FUN_020C20C0 +_020C3124: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C3130: .word FUN_020C2DA0 + + arm_func_start FUN_020C3134 +FUN_020C3134: ; 0x020C3134 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r4, r3 + bl FUN_020C217C + movs r5, r0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,pc} +_020C3160: ; 0x020C3160 + ldr r0, [sp, #0x20] + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,pc} +_020C3174: ; 0x020C3174 + mov r2, r7 + mov r3, r6 + add r1, r5, #0x20 + str r4, [sp, #0x0] + bl FUN_020C2958 + movs r4, r0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,pc} +_020C3198: ; 0x020C3198 + mov r0, r8 + mov r1, r4 + mov r2, r5 + mov r3, #0x0 + bl FUN_020C2104 +_020C31AC: ; 0x020C31AC + cmp r5, r0 + addne sp, sp, #0x8 + movne r0, #0x0 + ldmneia sp!, {r4-r8,pc} +_020C31BC: ; 0x020C31BC + mov r0, r4 + mov r1, r5 + bl DC_StoreRange + mov r0, r4 + add sp, sp, #0x8 + ldmia sp!, {r4-r8,pc} + + arm_func_start FUN_020C31D4 +FUN_020C31D4: + stmdb sp!, {r4-r6,lr} + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl FUN_020C226C +_020C31E8: ; 0x020C31E8 + cmp r0, #0x0 + moveq r0, #0x5 + ldmeqia sp!, {r4-r6,pc} +_020C31F4: ; 0x020C31F4 + ands r1, r6, #0x4 + beq _020C324C + ldrb r1, [r0, #0x3] + ands r1, r1, #0x1 + beq _020C3224 + ldr r0, [r0, #0x0] + mov r1, r5 + mov r0, r0, lsl #0x8 + mov r2, r4 + mov r0, r0, lsr #0x8 + bl FUN_020C2E34 + b _020C323C +_020C3224: + ldr r0, [r0, #0x0] + mov r1, r5 + mov r0, r0, lsl #0x8 + mov r2, r4 + mov r0, r0, lsr #0x8 + bl FUN_020C2F54 +_020C323C: + cmp r0, #0x0 + bne _020C325C + mov r0, #0x9 + ldmia sp!, {r4-r6,pc} +_020C324C: + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x8 + mov r0, r0, lsr #0x8 + bl FUN_020C20DC +_020C325C: + ldr r1, [sp, #0x10] + cmp r1, #0x0 + strne r0, [r1, #0x0] + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020C3270 +FUN_020C3270: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r10, r1 + mov r9, r2 + mov r11, r3 + bl FUN_020C22D0 + movs r8, r0 + addeq sp, sp, #0xc + moveq r0, #0x4 + ldmeqia sp!, {r4-r11,pc} +_020C3298: ; 0x020C3298 + ands r0, r10, #0x2 + beq _020C32C4 + ldr r0, [r8, #0x0] + mov r1, r9 + mov r2, r11 + bl FUN_020C2FCC + movs r7, r0 + bne _020C32D0 + add sp, sp, #0xc + mov r0, #0x8 + ldmia sp!, {r4-r11,pc} +_020C32C4: + ldr r0, [r8, #0x0] + bl FUN_020C20DC + mov r7, r0 +_020C32D0: + and r5, r10, #0x4 + mov r6, #0x0 +_020C32D8: + add r0, r8, r6, lsl #0x1 + ldrh r0, [r0, #0x4] + ldr r1, _020C33B4 ; =0x0000FFFF + cmp r0, r1 + beq _020C3390 + bl FUN_020C226C + movs r4, r0 + addeq sp, sp, #0xc + moveq r0, #0x5 + ldmeqia sp!, {r4-r11,pc} +_020C3300: ; 0x020C3300 + add r0, sp, #0x4 + str r0, [sp, #0x0] + add r0, r8, r6, lsl #0x1 + ldrh r0, [r0, #0x4] + mov r1, r10 + mov r2, r9 + mov r3, r11 + bl FUN_020C31D4 +_020C3320: ; 0x020C3320 + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r11,pc} +_020C332C: ; 0x020C332C + ldrb r0, [r4, #0x3] + ands r0, r0, #0x1 + beq _020C3370 + cmp r5, #0x0 + beq _020C3370 + str r9, [sp, #0x0] + ldr r1, [r4, #0x0] + ldr r0, [sp, #0x4] + mov r3, r1, lsl #0x8 + mov r1, r7 + mov r2, r6 + mov r3, r3, lsr #0x8 + bl FUN_020C2B1C +_020C3360: ; 0x020C3360 + cmp r0, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x9 + ldmeqia sp!, {r4-r11,pc} +_020C3370: + cmp r7, #0x0 + beq _020C3390 + ldr r2, [sp, #0x4] + cmp r2, #0x0 + beq _020C3390 + mov r0, r7 + mov r1, r6 + bl SND_AssignWaveArc +_020C3390: + add r6, r6, #0x1 + cmp r6, #0x4 + blt _020C32D8 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + strne r7, [r0, #0x0] + mov r0, #0x0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020C33B4: .word 0x0000FFFF + + arm_func_start FUN_020C33B8 +FUN_020C33B8: + stmdb sp!, {r4-r6,lr} + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl FUN_020C2334 +_020C33CC: ; 0x020C33CC + cmp r0, #0x0 + moveq r0, #0x3 + ldmeqia sp!, {r4-r6,pc} +_020C33D8: ; 0x020C33D8 + ands r1, r6, #0x8 + beq _020C3400 + ldr r0, [r0, #0x0] + mov r1, r5 + mov r2, r4 + bl FUN_020C3044 +_020C33F0: ; 0x020C33F0 + cmp r0, #0x0 + bne _020C3408 + mov r0, #0x7 + ldmia sp!, {r4-r6,pc} +_020C3400: + ldr r0, [r0, #0x0] + bl FUN_020C20DC +_020C3408: + ldr r1, [sp, #0x10] + cmp r1, #0x0 + strne r0, [r1, #0x0] + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020C341C +FUN_020C341C: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r1 + mov r6, r2 + mov r5, r3 + bl FUN_020C2398 + movs r4, r0 + addeq sp, sp, #0x4 + moveq r0, #0x2 + ldmeqia sp!, {r4-r7,pc} +_020C3444: ; 0x020C3444 + mov r0, #0x0 + str r0, [sp, #0x0] + ldrh r0, [r4, #0x4] + mov r1, r7 + mov r2, r6 + mov r3, r5 + bl FUN_020C3270 +_020C3460: ; 0x020C3460 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,pc} +_020C346C: ; 0x020C346C + ands r0, r7, #0x1 + beq _020C3498 + ldr r0, [r4, #0x0] + mov r1, r6 + mov r2, r5 + bl FUN_020C30BC +_020C3484: ; 0x020C3484 + cmp r0, #0x0 + bne _020C34A0 + add sp, sp, #0x4 + mov r0, #0x6 + ldmia sp!, {r4-r7,pc} +_020C3498: + ldr r0, [r4, #0x0] + bl FUN_020C20DC +_020C34A0: + ldr r1, [sp, #0x18] + cmp r1, #0x0 + strne r0, [r1, #0x0] + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020C34B8 +FUN_020C34B8: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r9, r1 + bl FUN_020C21A4 + movs r8, r0 + addeq sp, sp, #0xc + moveq r0, #0x1 + ldmeqia sp!, {r4-r11,pc} +_020C34D8: ; 0x020C34D8 + ldr r0, [r8, #0x0] + mov r7, #0x0 + cmp r0, #0x0 + bls _020C35D4 + add r6, r8, #0x4 + str r7, [sp, #0x4] + mov r11, r7 + mov r10, r7 + mov r5, r7 + mov r4, #0x1 +_020C3500: + ldrb r0, [r6, #0x0] + cmp r0, #0x3 + addls pc, pc, r0, lsl #0x2 + b _020C35C0 +_020C3510: + b _020C3520 +_020C3514: + b _020C3570 +_020C3518: + b _020C3598 +_020C351C: + b _020C3548 +_020C3520: + str r5, [sp, #0x0] + ldrb r1, [r6, #0x1] + ldr r0, [r6, #0x4] + mov r2, r9 + mov r3, r4 + bl FUN_020C341C +_020C3538: ; 0x020C3538 + cmp r0, #0x0 + beq _020C35C0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} +_020C3548: + str r10, [sp, #0x0] + ldrb r1, [r6, #0x1] + ldr r0, [r6, #0x4] + mov r2, r9 + mov r3, r4 + bl FUN_020C33B8 +_020C3560: ; 0x020C3560 + cmp r0, #0x0 + beq _020C35C0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} +_020C3570: + str r11, [sp, #0x0] + ldrb r1, [r6, #0x1] + ldr r0, [r6, #0x4] + mov r2, r9 + mov r3, r4 + bl FUN_020C3270 +_020C3588: ; 0x020C3588 + cmp r0, #0x0 + beq _020C35C0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} +_020C3598: + ldr r0, [sp, #0x4] + mov r2, r9 + str r0, [sp, #0x0] + ldrb r1, [r6, #0x1] + ldr r0, [r6, #0x4] + mov r3, r4 + bl FUN_020C31D4 +_020C35B4: ; 0x020C35B4 + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r11,pc} +_020C35C0: + ldr r0, [r8, #0x0] + add r7, r7, #0x1 + cmp r7, r0 + add r6, r6, #0x8 + blo _020C3500 +_020C35D4: + mov r0, #0x0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + + arm_func_start FUN_020C35E0 +FUN_020C35E0: ; 0x020C35E0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r12, #0x0 + mov r3, #0x1 + str r12, [sp, #0x0] + bl FUN_020C341C +_020C35F8: ; 0x020C35F8 + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020C360C +FUN_020C360C: ; 0x020C360C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r12, #0x0 + mov r1, #0xff + mov r3, #0x1 + str r12, [sp, #0x0] + bl FUN_020C31D4 +_020C362C: ; 0x020C362C + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020C3640 +FUN_020C3640: ; 0x020C3640 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r12, #0x0 + mov r1, #0xff + mov r3, #0x1 + str r12, [sp, #0x0] + bl FUN_020C3270 +_020C3660: ; 0x020C3660 + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020C3674 +FUN_020C3674: ; 0x020C3674 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r12, #0x0 + mov r1, #0xff + mov r3, #0x1 + str r12, [sp, #0x0] + bl FUN_020C341C +_020C3694: ; 0x020C3694 + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020C36A8 +FUN_020C36A8: ; 0x020C36A8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FUN_020C34B8 +_020C36B4: ; 0x020C36B4 + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020C36C8 +FUN_020C36C8: ; 0x020C36C8 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + mov r7, r2 + mov r2, r3 + ldr r6, [sp, #0x20] + mov r4, r0 + mov r8, r1 + bl FUN_020C0AF4 + movs r5, r0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,pc} +_020C36F8: ; 0x020C36F8 + mov r0, r8 + mov r1, r5 + bl FUN_020C09B0 + add r12, sp, #0x4 + mov r2, r0 + mov r0, r7 + mov r1, #0x6 + mov r3, #0x0 + str r12, [sp, #0x0] + bl FUN_020C3270 +_020C3720: ; 0x020C3720 + cmp r0, #0x0 + beq _020C373C + mov r0, r5 + bl thunk_FUN_020c077c + add sp, sp, #0x8 + mov r0, #0x0 + ldmia sp!, {r4-r8,pc} +_020C373C: + ldr r12, [sp, #0x24] + ldr r2, [r6, #0x0] + ldr r1, [r12, #0x18] + ldr r3, [sp, #0x4] + mov r0, r5 + add r1, r12, r1 + bl FUN_020C0A90 + ldrb r1, [r6, #0x6] + mov r0, r4 + bl FUN_020C0F30 + ldrb r1, [r6, #0x7] + mov r0, r4 + bl FUN_020C0ECC + ldr r1, [sp, #0x28] + ldr r2, [sp, #0x2c] + mov r0, r4 + bl FUN_020C0E38 + mov r0, #0x1 + add sp, sp, #0x8 + ldmia sp!, {r4-r8,pc} + + arm_func_start FUN_020C378C +FUN_020C378C: ; 0x020C378C + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + mov r8, r2 + mov r2, r3 + ldr r5, [sp, #0x28] + mov r6, r0 + mov r7, r1 + bl FUN_020C0AF4 + movs r4, r0 + addeq sp, sp, #0x10 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,pc} +_020C37BC: ; 0x020C37BC + mov r0, r7 + mov r1, r4 + bl FUN_020C09B0 + mov r7, r0 + add r12, sp, #0x8 + mov r0, r8 + mov r2, r7 + mov r1, #0x6 + mov r3, #0x0 + str r12, [sp, #0x0] + bl FUN_020C3270 +_020C37E8: ; 0x020C37E8 + cmp r0, #0x0 + beq _020C3804 + mov r0, r4 + bl thunk_FUN_020c077c + add sp, sp, #0x10 + mov r0, #0x0 + ldmia sp!, {r4-r8,pc} +_020C3804: + ldr r0, [sp, #0x2c] + add r12, sp, #0x4 + mov r2, r7 + mov r1, #0x1 + mov r3, #0x0 + str r12, [sp, #0x0] + bl FUN_020C341C +_020C3820: ; 0x020C3820 + cmp r0, #0x0 + beq _020C383C + mov r0, r4 + bl thunk_FUN_020c077c + add sp, sp, #0x10 + mov r0, #0x0 + ldmia sp!, {r4-r8,pc} +_020C383C: + ldr r2, [sp, #0x4] + ldr r3, [sp, #0x8] + ldr r1, [r2, #0x18] + mov r0, r4 + add r1, r2, r1 + mov r2, #0x0 + bl FUN_020C0A90 + ldrb r1, [r5, #0x6] + mov r0, r6 + bl FUN_020C0F30 + ldrb r1, [r5, #0x7] + mov r0, r6 + bl FUN_020C0ECC + ldr r1, [sp, #0x2c] + mov r0, r6 + bl FUN_020C0E60 + mov r0, #0x1 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + + arm_func_start FUN_020C3888 +FUN_020C3888: ; 0x020C3888 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x14 + mov r6, r1 + mov r7, r0 + mov r0, r6 + mov r5, r2 + bl FUN_020C2334 +_020C38A4: ; 0x020C38A4 + cmp r0, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,pc} +_020C38B4: ; 0x020C38B4 + ldr r0, [r0, #0x0] + bl FUN_020C20DC + movs r4, r0 + addeq sp, sp, #0x14 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,pc} +_020C38CC: ; 0x020C38CC + mov r1, r5 + bl FUN_020C3D9C +_020C38D4: ; 0x020C38D4 + cmp r0, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,pc} +_020C38E4: ; 0x020C38E4 + str r0, [sp, #0x0] + str r4, [sp, #0x4] + str r6, [sp, #0x8] + str r5, [sp, #0xc] + ldrb r1, [r0, #0x9] + ldrh r2, [r0, #0x4] + ldrb r3, [r0, #0x8] + mov r0, r7 + bl FUN_020C36C8 + add sp, sp, #0x14 + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020C3910 +FUN_020C3910: ; 0x020C3910 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + ldr r0, [sp, #0x20] + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl FUN_020C2398 +_020C3930: ; 0x020C3930 + cmp r0, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,pc} +_020C3940: ; 0x020C3940 + cmp r4, #0x0 + ldrltb r4, [r0, #0x8] + cmp r5, #0x0 + ldrlth r5, [r0, #0x4] + cmp r6, #0x0 + ldrltb r6, [r0, #0x9] + ldr r12, [sp, #0x20] + mov r2, r5 + str r0, [sp, #0x0] + mov r0, r7 + mov r1, r6 + mov r3, r4 + str r12, [sp, #0x4] + bl FUN_020C378C + add sp, sp, #0xc + ldmia sp!, {r4-r7,pc} + + arm_func_start FUN_020C3980 +FUN_020C3980: ; 0x020C3980 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r4, r1 + mov r5, r0 + mov r0, r4 + bl FUN_020C2398 +_020C3998: ; 0x020C3998 + cmp r0, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} +_020C39A8: ; 0x020C39A8 + str r0, [sp, #0x0] + str r4, [sp, #0x4] + ldrb r1, [r0, #0x9] + ldrh r2, [r0, #0x4] + ldrb r3, [r0, #0x8] + mov r0, r5 + bl FUN_020C378C + add sp, sp, #0xc + ldmia sp!, {r4-r5,pc} + + arm_func_start FUN_020C39CC +FUN_020C39CC: ; 0x020C39CC + stmdb sp!, {r4-r8,lr} + mov r6, r0 + bl FUN_020C241C + mov r5, #0x0 + mov r7, r5 +_020C39E0: + mov r0, r5 + bl FUN_020C2208 + movs r4, r0 + beq _020C3A58 + ldrb r1, [r4, #0x0] + mov r0, r5 + bl FUN_020C1160 + ldrh r1, [r4, #0x2] + mov r0, r5 + bl FUN_020C1148 + ldr r0, [r4, #0x4] + cmp r0, #0x0 + beq _020C3A58 + cmp r6, #0x0 + beq _020C3A58 + ldrb r0, [r4, #0x0] + mov r8, r7 + cmp r0, #0x0 + ble _020C3A58 +_020C3A2C: + ldr r2, [r4, #0x4] + mov r0, r5 + mov r1, r6 + bl FUN_020C10B4 +_020C3A3C: ; 0x020C3A3C + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,pc} +_020C3A48: ; 0x020C3A48 + ldrb r0, [r4, #0x0] + add r8, r8, #0x1 + cmp r8, r0 + blt _020C3A2C +_020C3A58: + add r5, r5, #0x1 + cmp r5, #0x20 + blt _020C39E0 + mov r0, #0x1 + ldmia sp!, {r4-r8,pc} + + arm_func_start FUN_020C3A6C +FUN_020C3A6C: ; 0x020C3A6C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + mov r4, r0 + ldr r0, _020C3A9C ; =0x021D2904 + mov r1, r5 + bl FUN_020ADBE8 + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C3A9C: .word 0x021D2904 + + arm_func_start FUN_020C3AA0 +FUN_020C3AA0: ; 0x020C3AA0 + stmdb sp!, {r4-r8,lr} + mov r8, r0 + mov r7, r1 + bl OS_DisableInterrupts + mov r6, r0 + mov r0, r8 + mov r1, #0x0 + bl FUN_020ADA98 + movs r5, r0 + beq _020C3B04 +_020C3AC8: + mov r0, r8 + mov r1, r5 + bl FUN_020ADA98 + ldr r1, [r5, #0x8] + mov r4, r0 + cmp r1, r7 + bne _020C3AF8 + mov r0, r8 + mov r1, r5 + bl FUN_020ADAB0 + mov r0, r5 + bl FUN_020C3A6C +_020C3AF8: + mov r5, r4 + cmp r4, #0x0 + bne _020C3AC8 +_020C3B04: + mov r0, r6 + bl OS_RestoreInterrupts + ldmia sp!, {r4-r8,pc} + + arm_func_start FUN_020C3B10 +FUN_020C3B10: ; 0x020C3B10 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, [r0, #0x120] + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + sub r1, r1, #0x1 + str r1, [r0, #0x120] + ldr r1, [r0, #0x120] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {pc} + bl FUN_020C1674 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start FUN_020C3B4C +FUN_020C3B4C: ; 0x020C3B4C + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r1, [r4, #0x110] + mov r1, r1, lsl #0x1f + movs r1, r1, asr #0x1f + ldmeqia sp!, {r4,pc} +_020C3B64: ; 0x020C3B64 + bl FUN_020C3B10 + ldr r1, [r4, #0x164] + mov r0, r4 + blx r1 + ldr r0, _020C3BA8 ; =0x021D2DF0 + mov r1, r4 + bl FUN_020C3AA0 + ldr r0, _020C3BAC ; =0x021D2900 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020C3B9C + mov r1, r4 + add r0, r0, #0x4e0 + bl FUN_020C3AA0 +_020C3B9C: + mov r0, r4 + bl FUN_020C3C4C + ldmia sp!, {r4,pc} + .balign 4 +_020C3BA8: .word 0x021D2DF0 +_020C3BAC: .word 0x021D2900 + + arm_func_start FUN_020C3BB0 +FUN_020C3BB0: ; 0x020C3BB0 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, _020C3C40 ; =0x021D2DD8 + bl OS_LockMutex + ldr r0, _020C3C44 ; =0x021D2900 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + beq _020C3BDC + ldr r0, _020C3C48 ; =0x000004C8 + add r0, r1, r0 + bl OS_LockMutex +_020C3BDC: + ldr r0, [r4, #0x110] + mov r0, r0, lsl #0x1e + movs r0, r0, asr #0x1f + beq _020C3BF4 + mov r0, r4 + bl FUN_020C1430 +_020C3BF4: + ldr r0, [r4, #0x110] + mov r0, r0, lsl #0x1f + movs r0, r0, asr #0x1f + beq _020C3C10 + ldr r1, [r4, #0x16c] + mov r0, r4 + blx r1 +_020C3C10: + mov r0, r4 + bl FUN_020C3B4C + ldr r0, _020C3C40 ; =0x021D2DD8 + bl OS_UnlockMutex + ldr r0, _020C3C44 ; =0x021D2900 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + ldmeqia sp!, {r4,pc} +_020C3C30: ; 0x020C3C30 + ldr r0, _020C3C48 ; =0x000004C8 + add r0, r1, r0 + bl OS_UnlockMutex + ldmia sp!, {r4,pc} + .balign 4 +_020C3C40: .word 0x021D2DD8 +_020C3C44: .word 0x021D2900 +_020C3C48: .word 0x000004C8 + + arm_func_start FUN_020C3C4C +FUN_020C3C4C: ; 0x020C3C4C + ldr r2, [r0, #0x14c] + cmp r2, #0x0 + movne r1, #0x0 + strne r1, [r2, #0x0] + strne r1, [r0, #0x14c] + ldr r1, [r0, #0x110] + bic r1, r1, #0x1 + str r1, [r0, #0x110] + ldr r1, [r0, #0x110] + bic r1, r1, #0x4 + str r1, [r0, #0x110] + ldr r1, [r0, #0x110] + bic r1, r1, #0x2 + str r1, [r0, #0x110] + bx lr + + arm_func_start FUN_020C3C88 +FUN_020C3C88: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r5, _020C3D94 ; =0x021D2DFC + mov r7, #0x0 + ldr r4, _020C3D98 ; =0x02103BAC +_020C3C9C: + ldr r1, [r5, #0x110] + mov r0, r1, lsl #0x1f + movs r0, r0, asr #0x1f + beq _020C3D7C + ldr r0, [r5, #0x114] + cmp r0, #0x0 + bne _020C3CC4 + mov r0, r5 + bl FUN_020C3BB0 + b _020C3D7C +_020C3CC4: + mov r0, r1, lsl #0x1d + movs r0, r0, asr #0x1f + beq _020C3CFC + ldr r0, [r5, #0x118] + cmp r0, #0x0 + beq _020C3CFC + mov r0, r5 + bl FUN_020C1458 + ldr r0, [r5, #0x110] + orr r0, r0, #0x2 + str r0, [r5, #0x110] + ldr r0, [r5, #0x110] + bic r0, r0, #0x4 + str r0, [r5, #0x110] +_020C3CFC: + ldr r0, [r5, #0x110] + mov r0, r0, lsl #0x1e + movs r0, r0, asr #0x1f + beq _020C3D7C + add r0, r5, #0xe8 + bl FUN_020C3DF4 + ldr r1, [r5, #0x154] + add r0, r5, #0xe8 + mov r1, r1, lsl #0x1 + ldrsh r6, [r4, r1] + bl FUN_020C3E0C + mov r0, r0, asr #0x8 + mov r0, r0, lsl #0x1 + ldrsh r1, [r4, r0] + ldr r0, [r5, #0x158] + add r6, r1, r6 + cmp r6, r0 + beq _020C3D54 + mov r0, r5 + mov r1, r6 + bl FUN_020C13C4 + str r6, [r5, #0x158] +_020C3D54: + ldr r0, [r5, #0x110] + mov r0, r0, lsl #0x1c + movs r0, r0, asr #0x1f + beq _020C3D7C + add r0, r5, #0xe8 + bl FUN_020C3DDC +_020C3D6C: ; 0x020C3D6C + cmp r0, #0x0 + beq _020C3D7C + mov r0, r5 + bl FUN_020C3BB0 +_020C3D7C: + add r7, r7, #0x1 + cmp r7, #0x4 + add r5, r5, #0x170 + blt _020C3C9C + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C3D94: .word 0x021D2DFC +_020C3D98: .word 0x02103BAC + + arm_func_start FUN_020C3D9C +FUN_020C3D9C: + cmp r1, #0x0 + movlt r0, #0x0 + bxlt lr + ldr r2, [r0, #0x1c] + cmp r1, r2 + movcs r0, #0x0 + bxcs lr + mov r2, #0xc + mul r2, r1, r2 + add r3, r0, #0x20 + ldr r1, [r3, r2] + mvn r0, #0x0 + cmp r1, r0 + add r0, r3, r2 + moveq r0, #0x0 + bx lr + + arm_func_start FUN_020C3DDC +FUN_020C3DDC: + ldr r1, [r0, #0x8] + ldr r0, [r0, #0xc] + cmp r1, r0 + movge r0, #0x1 + movlt r0, #0x0 + bx lr + + arm_func_start FUN_020C3DF4 +FUN_020C3DF4: ; 0x020C3DF4 + ldr r2, [r0, #0x8] + ldr r1, [r0, #0xc] + cmp r2, r1 + addlt r1, r2, #0x1 + strlt r1, [r0, #0x8] + bx lr + + arm_func_start FUN_020C3E0C +FUN_020C3E0C: + stmdb sp!, {r4,lr} + ldr r1, [r0, #0xc] + ldr r2, [r0, #0x8] + cmp r2, r1 + ldrge r0, [r0, #0x4] + ldmgeia sp!, {r4,pc} +_020C3E24: ; 0x020C3E24 + ldr r4, [r0, #0x0] + ldr r0, [r0, #0x4] + sub r0, r0, r4 + mul r0, r2, r0 + bl _s32_div_f +_020C3E38: ; 0x020C3E38 + add r0, r4, r0 + ldmia sp!, {r4,pc} + + arm_func_start FUN_020C3E40 +FUN_020C3E40: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl FUN_020C3E0C +_020C3E54: ; 0x020C3E54 + str r0, [r6, #0x0] + str r5, [r6, #0x4] + str r4, [r6, #0xc] + mov r0, #0x0 + str r0, [r6, #0x8] + ldmia sp!, {r4-r6,pc} + + arm_func_start FUN_020C3E6C +FUN_020C3E6C: ; 0x020C3E6C + mov r2, #0x0 + str r2, [r0, #0x4] + ldr r1, [r0, #0x4] + str r1, [r0, #0x0] + str r2, [r0, #0xc] + ldr r1, [r0, #0xc] + str r1, [r0, #0x8] + bx lr + + arm_func_start FUN_020C3E8C +FUN_020C3E8C: ; 0x020C3E8C + mov r1, #0x0 + mov r2, #0x1000 + mov r3, #0x0 + stmia r0!, {r2-r3} + stmia r0!, {r1-r2} + bx lr + + thumb_func_start FUN_020C3EA4 +FUN_020C3EA4: ; 0x020C3EA4 + str r2, [r0, #0x0] + str r1, [r0, #0x4] + neg r1, r1 + str r1, [r0, #0x8] + str r2, [r0, #0xc] + bx lr + + arm_func_start FUN_020C3EB0 +FUN_020C3EB0: ; 0x020C3EB0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r12, [r0, #0x0] + smull lr, r12, r2, r12 + mov lr, lr, lsr #0xc + orr lr, lr, r12, lsl #0x14 + str lr, [r1, #0x0] + ldr r12, [r0, #0x4] + smull lr, r12, r2, r12 + mov r2, lr, lsr #0xc + orr r2, r2, r12, lsl #0x14 + str r2, [r1, #0x4] + ldr r2, [r0, #0x8] + smull r12, r2, r3, r2 + mov r12, r12, lsr #0xc + orr r12, r12, r2, lsl #0x14 + str r12, [r1, #0x8] + ldr r0, [r0, #0xc] + smull r2, r0, r3, r0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [r1, #0xc] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start MTX_Identity33_ +MTX_Identity33_: ; 0x020C3F14 + mov r2, #0x1000 + str r2, [r0, #0x20] + mov r3, #0x0 + stmia r0!, {r2-r3} + mov r1, #0x0 + stmia r0!, {r1,r3} + stmia r0!, {r2-r3} + stmia r0!, {r1,r3} + bx lr + + thumb_func_start MTX_RotX33_ +MTX_RotX33_: ; 0x020C3F38 + mov r3, #0x1 + lsl r3, r3, #0xc + str r3, [r0, #0x0] + mov r3, #0x0 + str r3, [r0, #0x4] + str r3, [r0, #0x8] + str r3, [r0, #0xc] + str r2, [r0, #0x10] + str r1, [r0, #0x14] + str r3, [r0, #0x18] + neg r1, r1 + str r1, [r0, #0x1c] + str r2, [r0, #0x20] + bx lr + + thumb_func_start MTX_RotY33_ +MTX_RotY33_: ; 0x020C3F54 + str r2, [r0, #0x0] + str r2, [r0, #0x20] + mov r3, #0x0 + str r3, [r0, #0x4] + str r3, [r0, #0xc] + str r3, [r0, #0x14] + str r3, [r0, #0x1c] + neg r2, r1 + mov r3, #0x1 + lsl r3, r3, #0xc + str r1, [r0, #0x18] + str r2, [r0, #0x8] + str r3, [r0, #0x10] + bx lr + + thumb_func_start MTX_RotZ33_ +MTX_RotZ33_: ; 0x020C3F70 + stmia r0!, {r2} + mov r3, #0x0 + stmia r0!, {r1,r3} + neg r1, r1 + stmia r0!, {r1-r2} + mov r1, #0x1 + lsl r1, r1, #0xc + str r3, [r0, #0x0] + str r3, [r0, #0x4] + str r3, [r0, #0x8] + str r1, [r0, #0xc] + bx lr + + arm_func_start MTX_MultVec33 +MTX_MultVec33: ; 0x020C3F88 + stmdb sp!, {r4-r6,lr} + ldr r12, [r0, #0x4] + ldr r4, [r1, #0xc] + ldr r3, [r0, #0x0] + smull r6, r5, r12, r4 + ldr r4, [r1, #0x0] + ldr r0, [r0, #0x8] + smlal r6, r5, r3, r4 + ldr r4, [r1, #0x18] + smlal r6, r5, r0, r4 + mov r4, r6, lsr #0xc + orr r4, r4, r5, lsl #0x14 + str r4, [r2, #0x0] + ldr r4, [r1, #0x10] + ldr r5, [r1, #0x4] + smull r6, lr, r12, r4 + smlal r6, lr, r3, r5 + ldr r4, [r1, #0x1c] + smlal r6, lr, r0, r4 + mov r4, r6, lsr #0xc + orr r4, r4, lr, lsl #0x14 + str r4, [r2, #0x4] + ldr lr, [r1, #0x14] + ldr r4, [r1, #0x8] + smull r5, lr, r12, lr + smlal r5, lr, r3, r4 + ldr r1, [r1, #0x20] + smlal r5, lr, r0, r1 + mov r0, r5, lsr #0xc + orr r0, r0, lr, lsl #0x14 + str r0, [r2, #0x8] + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start MTX_Concat33 +MTX_Concat33: ; 0x020C400C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x24 + ldr r5, [r0, #0x4] + ldr r3, [r1, #0xc] + mov r12, r2 + smull r8, r7, r5, r3 + ldr r6, [r0, #0x0] + ldr r3, [r1, #0x0] + cmp r12, r1 + smlal r8, r7, r6, r3 + ldr r4, [r0, #0x8] + ldr r3, [r1, #0x18] + addeq r2, sp, #0x0 + smlal r8, r7, r4, r3 + mov r3, r8, lsr #0xc + orr r3, r3, r7, lsl #0x14 + str r3, [r2, #0x0] + ldr r3, [r1, #0x10] + ldr r7, [r1, #0x4] + smull r9, r8, r5, r3 + smlal r9, r8, r6, r7 + ldr r3, [r1, #0x1c] + add lr, sp, #0x0 + smlal r9, r8, r4, r3 + mov r3, r9, lsr #0xc + orr r3, r3, r8, lsl #0x14 + str r3, [r2, #0x4] + ldr r3, [r1, #0x14] + ldr r7, [r1, #0x8] + smull r9, r8, r5, r3 + smlal r9, r8, r6, r7 + ldr r6, [r1, #0x20] + cmp r2, lr + smlal r9, r8, r4, r6 + mov r4, r9, lsr #0xc + orr r4, r4, r8, lsl #0x14 + str r4, [r2, #0x8] + ldr r4, [r0, #0x10] + ldr r5, [r0, #0xc] + smull r9, r8, r4, r3 + smlal r9, r8, r5, r7 + ldr r3, [r0, #0x14] + addne sp, sp, #0x24 + smlal r9, r8, r3, r6 + mov r6, r9, lsr #0xc + orr r6, r6, r8, lsl #0x14 + str r6, [r2, #0x14] + ldr r6, [r1, #0x10] + ldr r7, [r1, #0x4] + smull r9, r8, r4, r6 + smlal r9, r8, r5, r7 + ldr r6, [r1, #0x1c] + smlal r9, r8, r3, r6 + mov r6, r9, lsr #0xc + orr r6, r6, r8, lsl #0x14 + str r6, [r2, #0x10] + ldr r7, [r1, #0xc] + ldr r6, [r1, #0x0] + smull r9, r8, r4, r7 + smlal r9, r8, r5, r6 + ldr r5, [r1, #0x18] + smlal r9, r8, r3, r5 + mov r3, r9, lsr #0xc + orr r3, r3, r8, lsl #0x14 + str r3, [r2, #0xc] + ldr r4, [r0, #0x1c] + ldr r3, [r0, #0x18] + smull r8, r7, r4, r7 + smlal r8, r7, r3, r6 + ldr r0, [r0, #0x20] + smlal r8, r7, r0, r5 + mov r5, r8, lsr #0xc + orr r5, r5, r7, lsl #0x14 + str r5, [r2, #0x18] + ldr r5, [r1, #0x10] + ldr r6, [r1, #0x4] + smull r8, r5, r4, r5 + smlal r8, r5, r3, r6 + ldr r7, [r1, #0x1c] + smlal r8, r5, r0, r7 + mov r6, r8, lsr #0xc + orr r6, r6, r5, lsl #0x14 + str r6, [r2, #0x1c] + ldr r6, [r1, #0x20] + ldr r5, [r1, #0x8] + ldr r1, [r1, #0x14] + smull r7, r1, r4, r1 + smlal r7, r1, r3, r5 + smlal r7, r1, r0, r6 + mov r0, r7, lsr #0xc + orr r0, r0, r1, lsl #0x14 + str r0, [r2, #0x20] + ldmneia sp!, {r4-r9,lr} + bxne lr + ldmia lr!, {r0-r3} + stmia r12!, {r0-r3} + ldmia lr!, {r0-r3} + stmia r12!, {r0-r3} + ldr r0, [lr, #0x0] + str r0, [r12, #0x0] + add sp, sp, #0x24 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start MTX_ScaleApply33 +MTX_ScaleApply33: ; 0x020C41A8 + stmdb sp!, {r4,lr} + ldr r4, [r0, #0x0] + ldr r12, [sp, #0x8] + smull lr, r4, r2, r4 + mov lr, lr, lsr #0xc + orr lr, lr, r4, lsl #0x14 + str lr, [r1, #0x0] + ldr r4, [r0, #0x4] + smull lr, r4, r2, r4 + mov lr, lr, lsr #0xc + orr lr, lr, r4, lsl #0x14 + str lr, [r1, #0x4] + ldr lr, [r0, #0x8] + smull r4, lr, r2, lr + mov r2, r4, lsr #0xc + orr r2, r2, lr, lsl #0x14 + str r2, [r1, #0x8] + ldr r2, [r0, #0xc] + smull lr, r2, r3, r2 + mov lr, lr, lsr #0xc + orr lr, lr, r2, lsl #0x14 + str lr, [r1, #0xc] + ldr r2, [r0, #0x10] + smull lr, r2, r3, r2 + mov lr, lr, lsr #0xc + orr lr, lr, r2, lsl #0x14 + str lr, [r1, #0x10] + ldr r2, [r0, #0x14] + smull lr, r2, r3, r2 + mov r3, lr, lsr #0xc + orr r3, r3, r2, lsl #0x14 + str r3, [r1, #0x14] + ldr r2, [r0, #0x18] + smull r3, r2, r12, r2 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + str r3, [r1, #0x18] + ldr r2, [r0, #0x1c] + smull r3, r2, r12, r2 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + str r3, [r1, #0x1c] + ldr r0, [r0, #0x20] + smull r2, r0, r12, r0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [r1, #0x20] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MTX_Identity43_ +MTX_Identity43_: ; 0x020C426C + mov r2, #0x1000 + mov r3, #0x0 + stmia r0!, {r2-r3} + mov r1, #0x0 + stmia r0!, {r1,r3} + stmia r0!, {r2-r3} + stmia r0!, {r1,r3} + stmia r0!, {r2-r3} + stmia r0!, {r1,r3} + bx lr + + arm_func_start MTX_Copy43To44_ +MTX_Copy43To44_: ; 0x020C4294 + stmdb sp!, {r4} + mov r12, #0x0 + ldmia r0!, {r2-r4} + stmia r1!, {r2-r4,r12} + ldmia r0!, {r2-r4} + stmia r1!, {r2-r4,r12} + ldmia r0!, {r2-r4} + stmia r1!, {r2-r4,r12} + mov r12, #0x1000 + ldmia r0!, {r2-r4} + stmia r1!, {r2-r4,r12} + ldmia sp!, {r4} + bx lr + + thumb_func_start MTX_Scale43_ +MTX_Scale43_: ; 0x020C42C8 + stmia r0!, {r1} + mov r1, #0x0 + str r3, [r0, #0x1c] + mov r3, #0x0 + stmia r0!, {r1,r3} + stmia r0!, {r1-r3} + mov r2, #0x0 + stmia r0!, {r1,r3} + add r0, #0x4 + stmia r0!, {r1-r3} + bx lr + .balign 4 + + thumb_func_start MTX_RotX43_ +MTX_RotX43_: ; 0x020C42E0 + str r1, [r0, #0x14] + neg r1, r1 + str r1, [r0, #0x1c] + mov r1, #0x1 + lsl r1, r1, #0xc + stmia r0!, {r1} + mov r3, #0x0 + mov r1, #0x0 + stmia r0!, {r1,r3} + stmia r0!, {r1-r2} + str r1, [r0, #0x4] + add r0, #0xc + stmia r0!, {r2-r3} + stmia r0!, {r1,r3} + bx lr + .balign 4 + + thumb_func_start MTX_RotY43_ +MTX_RotY43_: ; 0x020C4300 + str r1, [r0, #0x18] + mov r3, #0x0 + stmia r0!, {r2-r3} + neg r1, r1 + stmia r0!, {r1,r3} + mov r1, #0x1 + lsl r1, r1, #0xc + stmia r0!, {r1,r3} + add r0, #0x4 + mov r1, #0x0 + stmia r0!, {r1-r3} + stmia r0!, {r1,r3} + bx lr + .balign 4 + + arm_func_start MTX_MultVec43 +MTX_MultVec43: ; 0x020C431C + stmdb sp!, {r4-r6,lr} + ldr r12, [r0, #0x4] + ldr r4, [r1, #0xc] + ldr r3, [r0, #0x0] + smull r6, r5, r12, r4 + ldr r4, [r1, #0x0] + ldr r0, [r0, #0x8] + smlal r6, r5, r3, r4 + ldr r4, [r1, #0x18] + smlal r6, r5, r0, r4 + mov r4, r6, lsr #0xc + orr r4, r4, r5, lsl #0x14 + str r4, [r2, #0x0] + ldr r5, [r2, #0x0] + ldr r4, [r1, #0x24] + add r4, r5, r4 + str r4, [r2, #0x0] + ldr r4, [r1, #0x10] + ldr r5, [r1, #0x4] + smull r6, lr, r12, r4 + smlal r6, lr, r3, r5 + ldr r4, [r1, #0x1c] + smlal r6, lr, r0, r4 + mov r4, r6, lsr #0xc + orr r4, r4, lr, lsl #0x14 + str r4, [r2, #0x4] + ldr r5, [r2, #0x4] + ldr r4, [r1, #0x28] + add r4, r5, r4 + str r4, [r2, #0x4] + ldr lr, [r1, #0x14] + ldr r4, [r1, #0x8] + smull r5, lr, r12, lr + smlal r5, lr, r3, r4 + ldr r3, [r1, #0x20] + smlal r5, lr, r0, r3 + mov r0, r5, lsr #0xc + orr r0, r0, lr, lsl #0x14 + str r0, [r2, #0x8] + ldr r3, [r2, #0x8] + ldr r0, [r1, #0x2c] + add r0, r3, r0 + str r0, [r2, #0x8] + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start MTX_Concat43 +MTX_Concat43: ; 0x020C43D0 + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x30 + ldr r5, [r0, #0x4] + ldr r3, [r1, #0xc] + mov r12, r2 + smull r8, r7, r5, r3 + ldr r6, [r0, #0x0] + ldr r3, [r1, #0x0] + cmp r12, r1 + smlal r8, r7, r6, r3 + ldr r4, [r0, #0x8] + ldr r3, [r1, #0x18] + addeq r2, sp, #0x0 + smlal r8, r7, r4, r3 + mov r3, r8, lsr #0xc + orr r3, r3, r7, lsl #0x14 + str r3, [r2, #0x0] + ldr r3, [r1, #0x10] + ldr r7, [r1, #0x4] + smull r9, r8, r5, r3 + smlal r9, r8, r6, r7 + ldr r3, [r1, #0x1c] + add lr, sp, #0x0 + smlal r9, r8, r4, r3 + mov r3, r9, lsr #0xc + orr r3, r3, r8, lsl #0x14 + str r3, [r2, #0x4] + ldr r3, [r1, #0x14] + ldr r7, [r1, #0x8] + smull r9, r8, r5, r3 + smlal r9, r8, r6, r7 + ldr r6, [r1, #0x20] + smlal r9, r8, r4, r6 + mov r4, r9, lsr #0xc + orr r4, r4, r8, lsl #0x14 + str r4, [r2, #0x8] + ldr r4, [r0, #0x10] + ldr r5, [r0, #0xc] + smull r9, r8, r4, r3 + smlal r9, r8, r5, r7 + ldr r3, [r0, #0x14] + smlal r9, r8, r3, r6 + mov r6, r9, lsr #0xc + orr r6, r6, r8, lsl #0x14 + str r6, [r2, #0x14] + ldr r6, [r1, #0x10] + ldr r7, [r1, #0x4] + smull r9, r8, r4, r6 + smlal r9, r8, r5, r7 + ldr r6, [r1, #0x1c] + smlal r9, r8, r3, r6 + mov r6, r9, lsr #0xc + orr r6, r6, r8, lsl #0x14 + str r6, [r2, #0x10] + ldr r7, [r1, #0xc] + ldr r8, [r1, #0x0] + smull r10, r9, r4, r7 + smlal r10, r9, r5, r8 + ldr r6, [r1, #0x18] + smlal r10, r9, r3, r6 + mov r3, r10, lsr #0xc + orr r3, r3, r9, lsl #0x14 + str r3, [r2, #0xc] + ldr r4, [r0, #0x1c] + ldr r5, [r0, #0x18] + smull r9, r7, r4, r7 + smlal r9, r7, r5, r8 + ldr r3, [r0, #0x20] + smlal r9, r7, r3, r6 + mov r6, r9, lsr #0xc + orr r6, r6, r7, lsl #0x14 + str r6, [r2, #0x18] + ldr r6, [r1, #0x10] + ldr r7, [r1, #0x4] + smull r9, r6, r4, r6 + smlal r9, r6, r5, r7 + ldr r8, [r1, #0x1c] + smlal r9, r6, r3, r8 + mov r7, r9, lsr #0xc + orr r7, r7, r6, lsl #0x14 + str r7, [r2, #0x1c] + ldr r7, [r1, #0x14] + ldr r6, [r1, #0x8] + smull r9, r8, r4, r7 + smlal r9, r8, r5, r6 + ldr r5, [r1, #0x20] + smlal r9, r8, r3, r5 + mov r3, r9, lsr #0xc + orr r3, r3, r8, lsl #0x14 + str r3, [r2, #0x20] + ldr r4, [r0, #0x28] + ldr r3, [r0, #0x24] + smull r8, r7, r4, r7 + smlal r8, r7, r3, r6 + ldr r0, [r0, #0x2c] + ldr r6, [r1, #0x2c] + smlal r8, r7, r0, r5 + mov r5, r8, lsr #0xc + orr r5, r5, r7, lsl #0x14 + adds r5, r6, r5 + str r5, [r2, #0x2c] + ldr r5, [r1, #0x10] + ldr r6, [r1, #0x4] + smull r8, r5, r4, r5 + smlal r8, r5, r3, r6 + ldr r7, [r1, #0x1c] + ldr r9, [r1, #0x28] + smlal r8, r5, r0, r7 + mov r6, r8, lsr #0xc + orr r6, r6, r5, lsl #0x14 + adds r5, r9, r6 + str r5, [r2, #0x28] + ldr r8, [r1, #0x24] + ldr r6, [r1, #0x18] + ldr r5, [r1, #0x0] + ldr r1, [r1, #0xc] + smull r7, r1, r4, r1 + smlal r7, r1, r3, r5 + smlal r7, r1, r0, r6 + mov r0, r7, lsr #0xc + orr r0, r0, r1, lsl #0x14 + adds r0, r8, r0 + cmp r2, lr + str r0, [r2, #0x24] + addne sp, sp, #0x30 + ldmneia sp!, {r4-r10,lr} + bxne lr + ldmia lr!, {r0-r3} + stmia r12!, {r0-r3} + ldmia lr!, {r0-r3} + stmia r12!, {r0-r3} + ldmia lr, {r0-r3} + stmia r12, {r0-r3} + add sp, sp, #0x30 + ldmia sp!, {r4-r10,lr} + bx lr + + arm_func_start MTX_Inverse43 +MTX_Inverse43: ; 0x020C45F0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x5c + mov r10, r0 + ldr r11, [r10, #0x14] + cmp r10, r1 + addeq r9, sp, #0x2c + ldr r3, [r10, #0x18] + ldr r2, [r10, #0xc] + ldr r8, [r10, #0x20] + str r1, [sp, #0x0] + movne r9, r1 + smull r7, r5, r2, r8 + smull r6, r1, r11, r3 + ldr r4, [r10, #0x1c] + subs r12, r7, r6 + ldr r0, [r10, #0x10] + smull r6, lr, r11, r4 + sbc r11, r5, r1 + smull r5, r4, r2, r4 + mov r1, #0x800 + smull r8, r7, r0, r8 + smull r3, r2, r0, r3 + adds r12, r12, r1 + adc r0, r11, #0x0 + subs r8, r8, r6 + sbc r6, r7, lr + adds r7, r8, r1 + adc r11, r6, #0x0 + mov r7, r7, lsr #0xc + mov r8, r12, lsr #0xc + orr r7, r7, r11, lsl #0x14 + orr r8, r8, r0, lsl #0x14 + subs r0, r5, r3 + sbc r12, r4, r2 + ldr r6, [r10, #0x4] + ldr r11, [r10, #0x0] + smull r3, r2, r6, r8 + adds r0, r0, r1 + smull r5, r4, r11, r7 + adc r11, r12, #0x0 + mov r6, r0, lsr #0xc + subs r3, r5, r3 + ldr r0, [r10, #0x8] + orr r6, r6, r11, lsl #0x14 + sbc r2, r4, r2 + smlal r3, r2, r0, r6 + adds r0, r3, r1 + mov r1, r8, asr #0x1f + str r1, [sp, #0x4] + mov r1, r7, asr #0x1f + str r1, [sp, #0x8] + mov r1, r6, asr #0x1f + adc r2, r2, #0x0 + mov r0, r0, lsr #0xc + orrs r0, r0, r2, lsl #0x14 + str r1, [sp, #0xc] + addeq sp, sp, #0x5c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + bl FX_InvAsync + ldr r1, [r10, #0x8] + ldr r2, [r10, #0x1c] + ldr r11, [r10, #0x10] + smull r0, r4, r2, r1 + smull r3, r2, r11, r1 + ldr r5, [r10, #0x18] + str r2, [sp, #0x18] + str r3, [sp, #0x14] + smull r3, r2, r5, r1 + str r2, [sp, #0x20] + ldr r2, [r10, #0x20] + ldr lr, [r10, #0x4] + str r2, [sp, #0x10] + ldr r5, [sp, #0x10] + str r3, [sp, #0x1c] + smull r12, r5, lr, r5 + subs r0, r12, r0 + ldr r2, [r10, #0xc] + sbc r4, r5, r4 + smull r1, r5, r2, r1 + str r5, [sp, #0x28] + mov r5, r0, lsr #0xc + ldr r11, [r10, #0x14] + orr r5, r5, r4, lsl #0x14 + smull r4, r2, lr, r11 + ldr r0, [sp, #0x14] + ldr r3, [r10, #0x0] + subs r4, r4, r0 + ldr r0, [sp, #0x18] + mov r4, r4, lsr #0xc + sbc r0, r2, r0 + orr r4, r4, r0, lsl #0x14 + ldr r0, [sp, #0x10] + ldr r2, [sp, #0x1c] + smull r12, r0, r3, r0 + subs r2, r12, r2 + ldr r12, [sp, #0x20] + sbc r0, r0, r12 + smull r12, r11, r3, r11 + ldr r3, [sp, #0x28] + subs r1, r12, r1 + sbc r3, r11, r3 + mov r11, r2, lsr #0xc + orr r11, r11, r0, lsl #0x14 + mov r0, r1, lsr #0xc + str r0, [sp, #0x24] + orr r0, r0, r3, lsl #0x14 + str r0, [sp, #0x24] + bl FX_GetDivResult + smull r2, r1, r0, r5 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + rsb lr, r2, #0x0 + smull r2, r1, r0, r4 + mov r4, r2, lsr #0xc + orr r4, r4, r1, lsl #0x14 + smull r2, r1, r0, r11 + mov r3, r2, lsr #0xc + orr r3, r3, r1, lsl #0x14 + ldr r1, [sp, #0x24] + umull r11, r5, r0, r7 + smull r2, r1, r0, r1 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + ldr r1, [sp, #0x8] + mov r12, r0, asr #0x1f + mla r5, r0, r1, r5 + mla r5, r12, r7, r5 + mov r1, r11, lsr #0xc + orr r1, r1, r5, lsl #0x14 + str r1, [r9, #0x0] + str lr, [r9, #0x4] + str r4, [r9, #0x8] + ldr r1, [sp, #0x4] + umull r5, r4, r0, r8 + mla r4, r0, r1, r4 + mla r4, r12, r8, r4 + mov r1, r5, lsr #0xc + orr r1, r1, r4, lsl #0x14 + rsb r1, r1, #0x0 + str r1, [r9, #0xc] + ldr r1, [sp, #0xc] + rsb r2, r2, #0x0 + str r3, [r9, #0x10] + str r2, [r9, #0x14] + umull r3, r2, r0, r6 + mla r2, r0, r1, r2 + mla r2, r12, r6, r2 + mov r1, r3, lsr #0xc + orr r1, r1, r2, lsl #0x14 + str r1, [r9, #0x18] + ldr r3, [r10, #0x0] + ldr r1, [r10, #0x1c] + ldr r2, [r10, #0x18] + smull r5, r4, r3, r1 + ldr r1, [r10, #0x4] + smull r3, r1, r2, r1 + subs r2, r5, r3 + sbc r1, r4, r1 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + smull r2, r1, r0, r2 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + rsb r1, r2, #0x0 + str r1, [r9, #0x1c] + ldr r3, [r10, #0x0] + ldr r1, [r10, #0x10] + ldr r2, [r10, #0xc] + smull r5, r4, r3, r1 + ldr r1, [r10, #0x4] + smull r3, r1, r2, r1 + subs r2, r5, r3 + sbc r1, r4, r1 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + smull r2, r1, r0, r2 + mov r0, r2, lsr #0xc + orr r0, r0, r1, lsl #0x14 + str r0, [r9, #0x20] + add r0, sp, #0x2c + ldr r2, [r9, #0xc] + ldr r1, [r10, #0x28] + ldr r4, [r9, #0x0] + smull r7, r1, r2, r1 + ldr r3, [r10, #0x24] + ldr r6, [r9, #0x18] + smlal r7, r1, r4, r3 + ldr r5, [r10, #0x2c] + cmp r9, r0 + smlal r7, r1, r6, r5 + mov r2, r7, lsr #0xc + orr r2, r2, r1, lsl #0x14 + rsb r1, r2, #0x0 + str r1, [r9, #0x24] + ldr r2, [r9, #0x10] + ldr r1, [r10, #0x28] + ldr r4, [r9, #0x4] + smull r7, r1, r2, r1 + ldr r3, [r10, #0x24] + ldr r6, [r9, #0x1c] + smlal r7, r1, r4, r3 + ldr r5, [r10, #0x2c] + smlal r7, r1, r6, r5 + mov r2, r7, lsr #0xc + orr r2, r2, r1, lsl #0x14 + rsb r1, r2, #0x0 + str r1, [r9, #0x28] + ldr r1, [r10, #0x28] + ldr r2, [r9, #0x14] + ldr r4, [r9, #0x8] + smull r7, r1, r2, r1 + ldr r3, [r10, #0x24] + ldr r6, [r9, #0x20] + smlal r7, r1, r4, r3 + ldr r5, [r10, #0x2c] + smlal r7, r1, r6, r5 + mov r2, r7, lsr #0xc + orr r2, r2, r1, lsl #0x14 + rsb r1, r2, #0x0 + str r1, [r9, #0x2c] + bne _020C4974 + ldr r1, [sp, #0x0] + bl MI_Copy48B +_020C4974: + mov r0, #0x0 + add sp, sp, #0x5c + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start MTX_ScaleApply43 +MTX_ScaleApply43: ; 0x020C4984 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r12, [sp, #0x10] + mov r5, r0 + str r12, [sp, #0x0] + mov r4, r1 + bl MTX_ScaleApply33 + ldr r0, [r5, #0x24] + str r0, [r4, #0x24] + ldr r0, [r5, #0x28] + str r0, [r4, #0x28] + ldr r0, [r5, #0x2c] + str r0, [r4, #0x2c] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start MTX_Identity44_ +MTX_Identity44_: ; 0x020C49C4 + mov r2, #0x1000 + mov r3, #0x0 + stmia r0!, {r2-r3} + mov r1, #0x0 + stmia r0!, {r1,r3} + stmia r0!, {r1-r3} + stmia r0!, {r1,r3} + stmia r0!, {r1-r3} + stmia r0!, {r1,r3} + stmia r0!, {r1-r2} + bx lr + + arm_func_start MTX_Copy44To43_ +MTX_Copy44To43_: + ldmia r0!, {r2-r3,r12} + add r0, r0, #0x4 + stmia r1!, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + add r0, r0, #0x4 + stmia r1!, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + add r0, r0, #0x4 + stmia r1!, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + add r0, r0, #0x4 + stmia r1!, {r2-r3,r12} + bx lr + + thumb_func_start MTX_RotX44_ +MTX_RotX44_: ; 0x020C4A24 + str r2, [r0, #0x14] + str r2, [r0, #0x28] + str r1, [r0, #0x18] + neg r1, r1 + str r1, [r0, #0x24] + mov r1, #0x1 + mov r2, #0x0 + lsl r1, r1, #0xc + mov r3, #0x0 + stmia r0!, {r1-r3} + stmia r0!, {r2-r3} + add r0, #0x8 + stmia r0!, {r2-r3} + add r0, #0x8 + stmia r0!, {r2-r3} + stmia r0!, {r2-r3} + str r1, [r0, #0x0] + bx lr + + thumb_func_start MTX_RotY44_ +MTX_RotY44_: ; 0x020C4A48 + str r2, [r0, #0x0] + str r2, [r0, #0x28] + str r1, [r0, #0x20] + neg r1, r1 + str r1, [r0, #0x8] + mov r3, #0x1 + mov r1, #0x0 + lsl r3, r3, #0xc + mov r2, #0x0 + str r2, [r0, #0x4] + add r0, #0xc + stmia r0!, {r1-r3} + stmia r0!, {r1-r2} + str r2, [r0, #0x4] + add r0, #0xc + stmia r0!, {r1-r2} + stmia r0!, {r1-r3} + bx lr + + thumb_func_start MTX_RotZ44_ +MTX_RotZ44_: ; 0x020C4A6C + str r2, [r0, #0x0] + str r2, [r0, #0x14] + str r1, [r0, #0x4] + neg r1, r1 + str r1, [r0, #0x10] + mov r3, #0x1 + mov r1, #0x0 + lsl r3, r3, #0xc + mov r2, #0x0 + add r0, #0x8 + stmia r0!, {r1-r2} + add r0, #0x8 + stmia r0!, {r1-r2} + stmia r0!, {r1-r3} + stmia r0!, {r1-r2} + stmia r0!, {r1-r3} + bx lr + .balign 4 + + arm_func_start MTX_Concat44 +MTX_Concat44: ; 0x020C4A90 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x44 + ldr r5, [r0, #0x4] + ldr r3, [r1, #0x10] + mov r12, r2 + smull r6, r4, r5, r3 + ldr r9, [r0, #0x0] + ldr r3, [r1, #0x0] + cmp r12, r1 + smlal r6, r4, r9, r3 + ldr r10, [r0, #0x8] + ldr r3, [r1, #0x20] + ldr r8, [r0, #0xc] + smlal r6, r4, r10, r3 + ldr r3, [r1, #0x30] + addeq r2, sp, #0x0 + smlal r6, r4, r8, r3 + mov r3, r6, lsr #0xc + orr r3, r3, r4, lsl #0x14 + str r3, [r2, #0x0] + ldr r3, [r1, #0x14] + ldr r4, [r1, #0x4] + smull r7, r6, r5, r3 + smlal r7, r6, r9, r4 + ldr r3, [r1, #0x24] + ldr r4, [r1, #0x34] + smlal r7, r6, r10, r3 + smlal r7, r6, r8, r4 + mov r3, r7, lsr #0xc + orr r3, r3, r6, lsl #0x14 + str r3, [r2, #0x4] + ldr r3, [r1, #0x1c] + ldr r4, [r1, #0xc] + smull r7, r6, r5, r3 + smlal r7, r6, r9, r4 + ldr r3, [r1, #0x2c] + ldr r4, [r1, #0x3c] + smlal r7, r6, r10, r3 + smlal r7, r6, r8, r4 + mov r3, r7, lsr #0xc + orr r3, r3, r6, lsl #0x14 + str r3, [r2, #0xc] + ldr r6, [r1, #0x18] + ldr r7, [r1, #0x8] + smull r4, r3, r5, r6 + smlal r4, r3, r9, r7 + ldr r9, [r1, #0x28] + ldr r5, [r1, #0x38] + smlal r4, r3, r10, r9 + smlal r4, r3, r8, r5 + mov r4, r4, lsr #0xc + orr r4, r4, r3, lsl #0x14 + str r4, [r2, #0x8] + ldr r8, [r0, #0x14] + ldr r10, [r0, #0x10] + smull r4, r3, r8, r6 + smlal r4, r3, r10, r7 + ldr r7, [r0, #0x18] + ldr r6, [r0, #0x1c] + smlal r4, r3, r7, r9 + smlal r4, r3, r6, r5 + mov r4, r4, lsr #0xc + orr r4, r4, r3, lsl #0x14 + str r4, [r2, #0x18] + ldr r3, [r1, #0x14] + ldr r4, [r1, #0x4] + smull r11, r3, r8, r3 + smlal r11, r3, r10, r4 + ldr r5, [r1, #0x24] + ldr r9, [r1, #0x34] + smlal r11, r3, r7, r5 + smlal r11, r3, r6, r9 + mov r4, r11, lsr #0xc + orr r4, r4, r3, lsl #0x14 + str r4, [r2, #0x14] + ldr r3, [r1, #0x1c] + ldr r4, [r1, #0xc] + smull r11, r3, r8, r3 + smlal r11, r3, r10, r4 + ldr r5, [r1, #0x2c] + ldr r9, [r1, #0x3c] + smlal r11, r3, r7, r5 + smlal r11, r3, r6, r9 + mov r4, r11, lsr #0xc + orr r4, r4, r3, lsl #0x14 + str r4, [r2, #0x1c] + ldr r9, [r1, #0x10] + ldr r11, [r1, #0x0] + smull r4, r3, r8, r9 + smlal r4, r3, r10, r11 + ldr r5, [r1, #0x20] + ldr r8, [r1, #0x30] + smlal r4, r3, r7, r5 + smlal r4, r3, r6, r8 + mov r4, r4, lsr #0xc + orr r4, r4, r3, lsl #0x14 + str r4, [r2, #0x10] + ldr r6, [r0, #0x24] + ldr r7, [r0, #0x20] + smull r4, r3, r6, r9 + smlal r4, r3, r7, r11 + ldr r10, [r0, #0x28] + add lr, sp, #0x0 + smlal r4, r3, r10, r5 + ldr r5, [r0, #0x2c] + cmp r2, lr + smlal r4, r3, r5, r8 + mov r4, r4, lsr #0xc + orr r4, r4, r3, lsl #0x14 + str r4, [r2, #0x20] + ldr r3, [r1, #0x14] + ldr r4, [r1, #0x4] + smull r11, r3, r6, r3 + smlal r11, r3, r7, r4 + ldr r8, [r1, #0x24] + ldr r9, [r1, #0x34] + smlal r11, r3, r10, r8 + smlal r11, r3, r5, r9 + mov r4, r11, lsr #0xc + orr r4, r4, r3, lsl #0x14 + str r4, [r2, #0x24] + ldr r3, [r1, #0x1c] + ldr r4, [r1, #0xc] + smull r11, r3, r6, r3 + smlal r11, r3, r7, r4 + ldr r8, [r1, #0x2c] + ldr r9, [r1, #0x3c] + smlal r11, r3, r10, r8 + smlal r11, r3, r5, r9 + mov r4, r11, lsr #0xc + orr r4, r4, r3, lsl #0x14 + str r4, [r2, #0x2c] + ldr r9, [r1, #0x18] + ldr r8, [r1, #0x8] + smull r4, r3, r6, r9 + smlal r4, r3, r7, r8 + ldr r7, [r1, #0x28] + ldr r6, [r1, #0x38] + smlal r4, r3, r10, r7 + smlal r4, r3, r5, r6 + mov r4, r4, lsr #0xc + orr r4, r4, r3, lsl #0x14 + str r4, [r2, #0x28] + ldr r5, [r0, #0x34] + ldr r4, [r0, #0x30] + smull r10, r9, r5, r9 + ldr r3, [r0, #0x38] + smlal r10, r9, r4, r8 + smlal r10, r9, r3, r7 + ldr r0, [r0, #0x3c] + addne sp, sp, #0x44 + smlal r10, r9, r0, r6 + mov r6, r10, lsr #0xc + orr r6, r6, r9, lsl #0x14 + str r6, [r2, #0x38] + ldr r6, [r1, #0x14] + ldr r7, [r1, #0x4] + smull r10, r6, r5, r6 + smlal r10, r6, r4, r7 + ldr r8, [r1, #0x24] + ldr r9, [r1, #0x34] + smlal r10, r6, r3, r8 + smlal r10, r6, r0, r9 + mov r7, r10, lsr #0xc + orr r7, r7, r6, lsl #0x14 + str r7, [r2, #0x34] + ldr r6, [r1, #0x10] + ldr r7, [r1, #0x0] + smull r10, r6, r5, r6 + smlal r10, r6, r4, r7 + ldr r8, [r1, #0x20] + ldr r9, [r1, #0x30] + smlal r10, r6, r3, r8 + smlal r10, r6, r0, r9 + mov r7, r10, lsr #0xc + orr r7, r7, r6, lsl #0x14 + str r7, [r2, #0x30] + ldr r8, [r1, #0x3c] + ldr r7, [r1, #0x2c] + ldr r6, [r1, #0xc] + ldr r1, [r1, #0x1c] + smull r9, r1, r5, r1 + smlal r9, r1, r4, r6 + smlal r9, r1, r3, r7 + smlal r9, r1, r0, r8 + mov r0, r9, lsr #0xc + orr r0, r0, r1, lsl #0x14 + str r0, [r2, #0x3c] + ldmneia sp!, {r4-r11,lr} + bxne lr + ldmia lr!, {r0-r3} + stmia r12!, {r0-r3} + ldmia lr!, {r0-r3} + stmia r12!, {r0-r3} + ldmia lr!, {r0-r3} + stmia r12!, {r0-r3} + ldmia lr, {r0-r3} + stmia r12, {r0-r3} + add sp, sp, #0x44 + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start MTX_TransApply44 +MTX_TransApply44: ; 0x020C4DB4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + cmp r7, r6 + beq _020C4DD8 + bl MI_Copy48B +_020C4DD8: + ldr r0, [r7, #0x10] + ldr r1, [r7, #0x0] + smull r3, r2, r4, r0 + smlal r3, r2, r5, r1 + ldr r0, [sp, #0x18] + ldr r1, [r7, #0x20] + ldr r12, [r7, #0x30] + smlal r3, r2, r0, r1 + mov r1, r3, lsr #0xc + orr r1, r1, r2, lsl #0x14 + add r1, r12, r1 + str r1, [r6, #0x30] + ldr r1, [r7, #0x14] + ldr r2, [r7, #0x4] + smull r12, r3, r4, r1 + smlal r12, r3, r5, r2 + ldr r1, [r7, #0x24] + ldr r2, [r7, #0x34] + smlal r12, r3, r0, r1 + mov r1, r12, lsr #0xc + orr r1, r1, r3, lsl #0x14 + add r1, r2, r1 + str r1, [r6, #0x34] + ldr r1, [r7, #0x18] + ldr r2, [r7, #0x8] + smull r12, r3, r4, r1 + smlal r12, r3, r5, r2 + ldr r1, [r7, #0x28] + ldr r2, [r7, #0x38] + smlal r12, r3, r0, r1 + mov r1, r12, lsr #0xc + orr r1, r1, r3, lsl #0x14 + add r1, r2, r1 + str r1, [r6, #0x38] + ldr r1, [r7, #0x1c] + ldr r2, [r7, #0xc] + smull r12, r3, r4, r1 + smlal r12, r3, r5, r2 + ldr r1, [r7, #0x2c] + ldr r2, [r7, #0x3c] + smlal r12, r3, r0, r1 + mov r0, r12, lsr #0xc + orr r0, r0, r3, lsl #0x14 + add r0, r2, r0 + str r0, [r6, #0x3c] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start FX_ModS32 +FX_ModS32: ; 0x020C4E98 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020C4EE0 ; =0x04000280 + mov lr, #0x0 + ldr r3, _020C4EE4 ; =0x04000290 + strh lr, [r12, #0x0] + ldr r2, _020C4EE8 ; =0x04000298 + str r0, [r3, #0x0] + str r1, [r2, #0x0] + str lr, [r2, #0x4] +_020C4EC0: + ldrh r0, [r12, #0x0] + ands r0, r0, #0x8000 + bne _020C4EC0 + ldr r0, _020C4EEC ; =0x040002A8 + ldr r0, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C4EE0: .word 0x04000280 +_020C4EE4: .word 0x04000290 +_020C4EE8: .word 0x04000298 +_020C4EEC: .word 0x040002A8 + + arm_func_start FX_DivS32 +FX_DivS32: ; 0x020C4EF0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020C4F38 ; =0x04000280 + mov lr, #0x0 + ldr r3, _020C4F3C ; =0x04000290 + strh lr, [r12, #0x0] + ldr r2, _020C4F40 ; =0x04000298 + str r0, [r3, #0x0] + str r1, [r2, #0x0] + str lr, [r2, #0x4] +_020C4F18: + ldrh r0, [r12, #0x0] + ands r0, r0, #0x8000 + bne _020C4F18 + ldr r0, _020C4F44 ; =0x040002A0 + ldr r0, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C4F38: .word 0x04000280 +_020C4F3C: .word 0x04000290 +_020C4F40: .word 0x04000298 +_020C4F44: .word 0x040002A0 + + arm_func_start FX_DivAsync +FX_DivAsync: ; 0x020C4F48 + ldr r2, _020C4F74 ; =0x04000280 + mov r12, #0x1 + ldr r3, _020C4F78 ; =0x04000290 + strh r12, [r2, #0x0] + mov r12, #0x0 + str r12, [r3, #0x0] + ldr r2, _020C4F7C ; =0x04000298 + str r0, [r3, #0x4] + str r1, [r2, #0x0] + str r12, [r2, #0x4] + bx lr + .balign 4 +_020C4F74: .word 0x04000280 +_020C4F78: .word 0x04000290 +_020C4F7C: .word 0x04000298 + + arm_func_start FX_GetSqerResult +FX_GetSqerResult: ; 0x020C4F80 + ldr r1, _020C4FA4 ; =0x040002B0 +_020C4F84: + ldrh r0, [r1, #0x0] + ands r0, r0, #0x8000 + bne _020C4F84 + ldr r0, _020C4FA8 ; =0x040002B4 + ldr r0, [r0, #0x0] + add r0, r0, #0x200 + mov r0, r0, lsr #0xa + bx lr + .balign 4 +_020C4FA4: .word 0x040002B0 +_020C4FA8: .word 0x040002B4 + + arm_func_start FX_InvAsync +FX_InvAsync: + ldr r1, _020C4FDC ; =0x04000280 + mov r3, #0x1 + ldr r2, _020C4FE0 ; =0x04000290 + strh r3, [r1, #0x0] + mov r12, #0x0 + str r12, [r2, #0x0] + mov r3, #0x1000 + ldr r1, _020C4FE4 ; =0x04000298 + str r3, [r2, #0x4] + str r0, [r1, #0x0] + str r12, [r1, #0x4] + bx lr + .balign 4 +_020C4FDC: .word 0x04000280 +_020C4FE0: .word 0x04000290 +_020C4FE4: .word 0x04000298 + + arm_func_start FX_GetDivResult +FX_GetDivResult: ; 0x020C4FE8 + ldr r1, _020C501C ; =0x04000280 +_020C4FEC: + ldrh r0, [r1, #0x0] + ands r0, r0, #0x8000 + bne _020C4FEC + ldr r1, _020C5020 ; =0x040002A0 + mov r0, #0x80000 + ldr r2, [r1, #0x0] + ldr r1, [r1, #0x4] + adds r0, r2, r0 + adc r1, r1, #0x0 + mov r0, r0, lsr #0x14 + orr r0, r0, r1, lsl #0xc + bx lr + .balign 4 +_020C501C: .word 0x04000280 +_020C5020: .word 0x040002A0 + + arm_func_start FX_GetDivResultFx64c +FX_GetDivResultFx64c: ; 0x020C5024 + ldr r1, _020C5044 ; =0x04000280 +_020C5028: + ldrh r0, [r1, #0x0] + ands r0, r0, #0x8000 + bne _020C5028 + ldr r1, _020C5048 ; =0x040002A0 + ldr r0, [r1, #0x0] + ldr r1, [r1, #0x4] + bx lr + .balign 4 +_020C5044: .word 0x04000280 +_020C5048: .word 0x040002A0 + + arm_func_start FX_Sqrt +FX_Sqrt: ; 0x020C504C + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + addle sp, sp, #0x4 + movle r0, #0x0 + ldmleia sp!, {lr} + bxle lr + ldr r2, _020C5094 ; =0x040002B0 + mov r3, #0x1 + strh r3, [r2, #0x0] + ldr r1, _020C5098 ; =0x040002B8 + mov r2, #0x0 + str r2, [r1, #0x0] + str r0, [r1, #0x4] + bl FX_GetSqerResult + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C5094: .word 0x040002B0 +_020C5098: .word 0x040002B8 + + arm_func_start FX_Inv +FX_Inv: ; 0x020C509C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FX_InvAsync + bl FX_GetDivResult + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FX_Div +FX_Div: ; 0x020C50B8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FX_DivAsync + bl FX_GetDivResult + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start VEC_MultAdd +VEC_MultAdd: ; 0x020C50D4 + stmdb sp!, {r4,lr} + ldr r4, [r1, #0x0] + ldr lr, [r2, #0x0] + smull r12, r4, r0, r4 + mov r12, r12, lsr #0xc + orr r12, r12, r4, lsl #0x14 + add r4, lr, r12 + str r4, [r3, #0x0] + ldr r12, [r1, #0x4] + ldr r4, [r2, #0x4] + smull lr, r12, r0, r12 + mov lr, lr, lsr #0xc + orr lr, lr, r12, lsl #0x14 + add r4, r4, lr + str r4, [r3, #0x4] + ldr r1, [r1, #0x8] + ldr r12, [r2, #0x8] + smull r2, r1, r0, r1 + mov r0, r2, lsr #0xc + orr r0, r0, r1, lsl #0x14 + add r0, r12, r0 + str r0, [r3, #0x8] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start VEC_Fx16Normalize +VEC_Fx16Normalize: ; 0x020C5134 + stmdb sp!, {r4-r8,lr} + ldrsh r4, [r0, #0x0] + ldrsh r3, [r0, #0x2] + ldrsh r2, [r0, #0x4] + mul r8, r4, r4 + mul r7, r3, r3 + mul r6, r2, r2 + ldr r2, _020C526C ; =0x04000280 + mov r3, #0x2 + ldr r4, _020C5270 ; =0x04000290 + strh r3, [r2, #0x0] + mov r2, #0x0 + str r2, [r4, #0x0] + mov r5, #0x1000000 + mov r2, r8, asr #0x1f + adds r3, r8, r7 + adc r2, r2, r7, asr #0x1f + adds r7, r3, r6 + adc r6, r2, r6, asr #0x1f + mov r3, r6, lsl #0x2 + ldr r2, _020C5274 ; =0x04000298 + str r5, [r4, #0x4] + str r7, [r2, #0x0] + ldr r5, _020C5278 ; =0x040002B0 + str r6, [r2, #0x4] + mov r4, #0x1 + ldr r2, _020C527C ; =0x040002B8 + strh r4, [r5, #0x0] + mov r4, r7, lsl #0x2 + str r4, [r2, #0x0] + orr r3, r3, r7, lsr #0x1e + str r3, [r2, #0x4] +_020C51B4: + ldrh r2, [r5, #0x0] + ands r2, r2, #0x8000 + bne _020C51B4 + ldr r2, _020C5280 ; =0x040002B4 + ldr r12, [r2, #0x0] + ldr r3, _020C526C ; =0x04000280 +_020C51CC: + ldrh r2, [r3, #0x0] + ands r2, r2, #0x8000 + bne _020C51CC + ldr r7, _020C5284 ; =0x040002A0 + ldrsh r5, [r0, #0x0] + ldr r6, [r7, #0x0] + mov r4, r12, asr #0x1f + umull r3, r2, r6, r12 + mla r2, r6, r4, r2 + ldr r8, [r7, #0x4] + mov r4, r5, asr #0x1f + umull r7, r6, r3, r5 + mov lr, #0x0 + mla r2, r8, r12, r2 + mla r6, r3, r4, r6 + mla r6, r2, r5, r6 + adds r4, r7, lr + adc r4, r6, #0x1000 + mov r4, r4, asr #0xd + strh r4, [r1, #0x0] + ldrsh r5, [r0, #0x2] + umull r6, r12, r3, r5 + mov r4, r5, asr #0x1f + mla r12, r3, r4, r12 + mla r12, r2, r5, r12 + adds r4, r6, lr + adc r4, r12, #0x1000 + mov r4, r4, asr #0xd + strh r4, [r1, #0x2] + ldrsh r12, [r0, #0x4] + umull r5, r4, r3, r12 + mov r0, r12, asr #0x1f + adds r5, r5, lr + mla r4, r3, r0, r4 + mla r4, r2, r12, r4 + adc r0, r4, #0x1000 + mov r0, r0, asr #0xd + strh r0, [r1, #0x4] + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020C526C: .word 0x04000280 +_020C5270: .word 0x04000290 +_020C5274: .word 0x04000298 +_020C5278: .word 0x040002B0 +_020C527C: .word 0x040002B8 +_020C5280: .word 0x040002B4 +_020C5284: .word 0x040002A0 + + arm_func_start VEC_Normalize +VEC_Normalize: + stmdb sp!, {r4-r8,lr} + ldr r3, [r0, #0x4] + ldr r4, [r0, #0x0] + smull r2, r7, r3, r3 + smlal r2, r7, r4, r4 + ldr r4, [r0, #0x8] + ldr r3, _020C53AC ; =0x04000280 + smlal r2, r7, r4, r4 + mov r6, #0x2 + mov r4, r7, lsl #0x2 + ldr r5, _020C53B0 ; =0x04000290 + strh r6, [r3, #0x0] + mov r3, #0x0 + str r3, [r5, #0x0] + mov r6, #0x1000000 + ldr r3, _020C53B4 ; =0x04000298 + str r6, [r5, #0x4] + str r2, [r3, #0x0] + ldr r6, _020C53B8 ; =0x040002B0 + str r7, [r3, #0x4] + mov r5, #0x1 + ldr r3, _020C53BC ; =0x040002B8 + strh r5, [r6, #0x0] + mov r5, r2, lsl #0x2 + str r5, [r3, #0x0] + orr r4, r4, r2, lsr #0x1e + str r4, [r3, #0x4] +_020C52F4: + ldrh r2, [r6, #0x0] + ands r2, r2, #0x8000 + bne _020C52F4 + ldr r2, _020C53C0 ; =0x040002B4 + ldr r12, [r2, #0x0] + ldr r3, _020C53AC ; =0x04000280 +_020C530C: + ldrh r2, [r3, #0x0] + ands r2, r2, #0x8000 + bne _020C530C + ldr r7, _020C53C4 ; =0x040002A0 + ldr r5, [r0, #0x0] + ldr r6, [r7, #0x0] + mov r4, r12, asr #0x1f + umull r3, r2, r6, r12 + mla r2, r6, r4, r2 + ldr r8, [r7, #0x4] + mov r4, r5, asr #0x1f + umull r7, r6, r3, r5 + mov lr, #0x0 + mla r2, r8, r12, r2 + mla r6, r3, r4, r6 + mla r6, r2, r5, r6 + adds r4, r7, lr + adc r4, r6, #0x1000 + mov r4, r4, asr #0xd + str r4, [r1, #0x0] + ldr r5, [r0, #0x4] + umull r6, r12, r3, r5 + mov r4, r5, asr #0x1f + mla r12, r3, r4, r12 + mla r12, r2, r5, r12 + adds r4, r6, lr + adc r4, r12, #0x1000 + mov r4, r4, asr #0xd + str r4, [r1, #0x4] + ldr r12, [r0, #0x8] + umull r5, r4, r3, r12 + mov r0, r12, asr #0x1f + adds r5, r5, lr + mla r4, r3, r0, r4 + mla r4, r2, r12, r4 + adc r0, r4, #0x1000 + mov r0, r0, asr #0xd + str r0, [r1, #0x8] + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020C53AC: .word 0x04000280 +_020C53B0: .word 0x04000290 +_020C53B4: .word 0x04000298 +_020C53B8: .word 0x040002B0 +_020C53BC: .word 0x040002B8 +_020C53C0: .word 0x040002B4 +_020C53C4: .word 0x040002A0 + + arm_func_start VEC_Mag +VEC_Mag: + ldr r2, [r0, #0x4] + ldr r3, [r0, #0x0] + smull r12, r1, r2, r2 + smlal r12, r1, r3, r3 + ldr r0, [r0, #0x8] + ldr r3, _020C5424 ; =0x040002B0 + smlal r12, r1, r0, r0 + mov r2, #0x1 + mov r1, r1, lsl #0x2 + ldr r0, _020C5428 ; =0x040002B8 + strh r2, [r3, #0x0] + mov r2, r12, lsl #0x2 + str r2, [r0, #0x0] + orr r1, r1, r12, lsr #0x1e + str r1, [r0, #0x4] +_020C5404: + ldrh r0, [r3, #0x0] + ands r0, r0, #0x8000 + bne _020C5404 + ldr r0, _020C542C ; =0x040002B4 + ldr r0, [r0, #0x0] + add r0, r0, #0x1 + mov r0, r0, asr #0x1 + bx lr + .balign 4 +_020C5424: .word 0x040002B0 +_020C5428: .word 0x040002B8 +_020C542C: .word 0x040002B4 + + arm_func_start VEC_Fx16CrossProduct +VEC_Fx16CrossProduct: ; 0x020C5430 + stmdb sp!, {r4-r6,lr} + ldrsh r4, [r1, #0x4] + ldrsh r12, [r0, #0x2] + ldrsh lr, [r0, #0x0] + ldrsh r3, [r1, #0x2] + ldrsh r6, [r0, #0x4] + ldrsh r1, [r1, #0x0] + mul r5, r12, r4 + mul r0, r6, r3 + sub r0, r5, r0 + add r0, r0, #0x800 + mov r0, r0, asr #0xc + mul r5, r6, r1 + mul r4, lr, r4 + sub r4, r5, r4 + add r4, r4, #0x800 + mul r3, lr, r3 + mul r1, r12, r1 + sub r1, r3, r1 + add r1, r1, #0x800 + strh r0, [r2, #0x0] + mov r0, r4, asr #0xc + strh r0, [r2, #0x2] + mov r0, r1, asr #0xc + strh r0, [r2, #0x4] + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start VEC_CrossProduct +VEC_CrossProduct: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr r12, [r1, #0x8] + ldr r9, [r0, #0x4] + ldr r3, [r0, #0x0] + ldr r11, [r1, #0x4] + ldr r0, [r0, #0x8] + ldr r10, [r1, #0x0] + smull r4, r7, r9, r12 + smull r1, r6, r0, r11 + subs r8, r4, r1 + smull r5, r4, r0, r10 + smull lr, r12, r3, r12 + smull r1, r0, r3, r11 + smull r10, r3, r9, r10 + sbc r6, r7, r6 + mov r9, #0x800 + adds r7, r8, r9 + adc r6, r6, #0x0 + subs r8, r5, lr + sbc r5, r4, r12 + adds r8, r8, r9 + mov r4, r7, lsr #0xc + adc r5, r5, #0x0 + subs r1, r1, r10 + orr r4, r4, r6, lsl #0x14 + mov r6, r8, lsr #0xc + sbc r0, r0, r3 + adds r1, r1, r9 + str r4, [r2, #0x0] + orr r6, r6, r5, lsl #0x14 + adc r0, r0, #0x0 + mov r1, r1, lsr #0xc + str r6, [r2, #0x4] + orr r1, r1, r0, lsl #0x14 + str r1, [r2, #0x8] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start VEC_Fx16DotProduct +VEC_Fx16DotProduct: ; 0x020C5538 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldrsh lr, [r0, #0x2] + ldrsh r12, [r1, #0x2] + ldrsh r3, [r0, #0x4] + ldrsh r2, [r1, #0x4] + ldrsh r5, [r0, #0x0] + ldrsh r4, [r1, #0x0] + smulbb r1, lr, r12 + smulbb r0, r3, r2 + smlabb r1, r5, r4, r1 + add r0, r0, #0x800 + adds r2, r1, r0 + mov r1, r1, asr #0x1f + adc r1, r1, r0, asr #0x1f + mov r0, r2, lsr #0xc + orr r0, r0, r1, lsl #0x14 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start VEC_DotProduct +VEC_DotProduct: + stmdb sp!, {r4,lr} + ldr r3, [r0, #0x4] + ldr r2, [r1, #0x4] + ldr r12, [r0, #0x0] + smull r4, lr, r3, r2 + ldr r2, [r1, #0x0] + ldr r3, [r0, #0x8] + smlal r4, lr, r12, r2 + ldr r1, [r1, #0x8] + mov r0, #0x800 + smlal r4, lr, r3, r1 + adds r0, r4, r0 + adc r1, lr, #0x0 + mov r0, r0, lsr #0xc + orr r0, r0, r1, lsl #0x14 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start VEC_Fx16Add +VEC_Fx16Add: ; 0x020C55CC + ldrsh r12, [r0, #0x0] + ldrsh r3, [r1, #0x0] + add r3, r12, r3 + strh r3, [r2, #0x0] + ldrsh r12, [r0, #0x2] + ldrsh r3, [r1, #0x2] + add r3, r12, r3 + strh r3, [r2, #0x2] + ldrsh r3, [r0, #0x4] + ldrsh r0, [r1, #0x4] + add r0, r3, r0 + strh r0, [r2, #0x4] + bx lr + + arm_func_start VEC_Subtract +VEC_Subtract: ; 0x020C5600 + ldr r12, [r0, #0x0] + ldr r3, [r1, #0x0] + sub r3, r12, r3 + str r3, [r2, #0x0] + ldr r12, [r0, #0x4] + ldr r3, [r1, #0x4] + sub r3, r12, r3 + str r3, [r2, #0x4] + ldr r3, [r0, #0x8] + ldr r0, [r1, #0x8] + sub r0, r3, r0 + str r0, [r2, #0x8] + bx lr + + arm_func_start VEC_Add +VEC_Add: ; 0x020C5634 + ldr r12, [r0, #0x0] + ldr r3, [r1, #0x0] + add r3, r12, r3 + str r3, [r2, #0x0] + ldr r12, [r0, #0x4] + ldr r3, [r1, #0x4] + add r3, r12, r3 + str r3, [r2, #0x4] + ldr r3, [r0, #0x8] + ldr r0, [r1, #0x8] + add r0, r3, r0 + str r0, [r2, #0x8] + bx lr + + arm_func_start FX_Modf +FX_Modf: ; 0x020C5668 + stmdb sp!, {r4,lr} + cmp r0, #0x0 + ble _020C5704 + cmp r1, #0x0 + ble _020C56B4 + cmp r1, r0 + movgt r3, r0 + movgt r4, #0x0 + movgt r0, #0x1 + bgt _020C57C8 + cmp r1, r0 + movlt r3, r1 + movlt r1, r0 + movlt r4, #0x4000 + movlt r0, #0x0 + blt _020C57C8 + mov r0, #0x2000 + ldmia sp!, {r4,lr} + bx lr +_020C56B4: + cmp r1, #0x0 + bge _020C56F8 + rsb r1, r1, #0x0 + cmp r1, r0 + movlt r3, r1 + movlt r1, r0 + movlt r4, #0x4000 + movlt r0, #0x1 + blt _020C57C8 + cmp r1, r0 + movgt r3, r0 + movgt r4, #0x8000 + movgt r0, #0x0 + bgt _020C57C8 + mov r0, #0x6000 + ldmia sp!, {r4,lr} + bx lr +_020C56F8: + mov r0, #0x4000 + ldmia sp!, {r4,lr} + bx lr +_020C5704: + cmp r0, #0x0 + bge _020C57B4 + cmp r1, #0x0 + rsb r2, r0, #0x0 + bge _020C5760 + rsb r1, r1, #0x0 + cmp r1, r2 + movgt r0, #0x8000 + rsbgt r4, r0, #0x0 + movgt r3, r2 + movgt r0, #0x1 + bgt _020C57C8 + cmp r1, r2 + bge _020C5754 + mov r0, #0x4000 + mov r3, r1 + mov r1, r2 + rsb r4, r0, #0x0 + mov r0, #0x0 + b _020C57C8 +_020C5754: + mov r0, #0xa000 + ldmia sp!, {r4,lr} + bx lr +_020C5760: + cmp r1, #0x0 + ble _020C57A8 + cmp r1, r2 + bge _020C5788 + mov r0, #0x4000 + mov r3, r1 + mov r1, r2 + rsb r4, r0, #0x0 + mov r0, #0x1 + b _020C57C8 +_020C5788: + cmp r1, r2 + movgt r4, #0x0 + movgt r3, r2 + movgt r0, r4 + bgt _020C57C8 + mov r0, #0xe000 + ldmia sp!, {r4,lr} + bx lr +_020C57A8: + mov r0, #0xc000 + ldmia sp!, {r4,lr} + bx lr +_020C57B4: + cmp r1, #0x0 + movge r0, #0x0 + movlt r0, #0x8000 + ldmia sp!, {r4,lr} + bx lr +_020C57C8: + cmp r1, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + cmp r0, #0x0 + beq _020C580C + mov r0, r3 + bl FX_Div + mov r1, r0, asr #0x5 + ldr r0, _020C5838 ; =0x02103A38 + mov r1, r1, lsl #0x1 + ldrsh r0, [r0, r1] + add r0, r4, r0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + ldmia sp!, {r4,lr} + bx lr +_020C580C: + mov r0, r3 + bl FX_Div + mov r1, r0, asr #0x5 + ldr r0, _020C5838 ; =0x02103A38 + mov r1, r1, lsl #0x1 + ldrsh r0, [r0, r1] + sub r0, r4, r0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C5838: .word 0x02103A38 + + arm_func_start FUN_020C583C +FUN_020C583C: ; 0x020C583C + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + blt _020C58A4 + cmp r0, #0x1000 + ble _020C5880 + bl FX_Inv + mov r1, r0, asr #0x5 + ldr r0, _020C5924 ; =0x02103A38 + mov r1, r1, lsl #0x1 + ldrsh r0, [r0, r1] + add sp, sp, #0x4 + rsb r0, r0, #0x4000 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + ldmia sp!, {lr} + bx lr +_020C5880: + cmp r0, #0x1000 + movlt r1, r0, asr #0x5 + ldrlt r0, _020C5924 ; =0x02103A38 + movlt r1, r1, lsl #0x1 + ldrlth r0, [r0, r1] + add sp, sp, #0x4 + movge r0, #0x2000 + ldmia sp!, {lr} + bx lr +_020C58A4: + mov r1, #0x1000 + rsb r1, r1, #0x0 + cmp r0, r1 + bge _020C58E4 + rsb r0, r0, #0x0 + bl FX_Inv + mov r1, r0, asr #0x5 + ldr r0, _020C5924 ; =0x02103A38 + + arm_func_start FUN_020C58C4 +FUN_020C58C4: ; 0x020C58C4 + mov r1, r1, lsl #0x1 + ldrsh r0, [r0, r1] + add sp, sp, #0x4 + sub r0, r0, #0x4000 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + ldmia sp!, {lr} + bx lr +_020C58E4: + cmp r0, r1 + addle sp, sp, #0x4 + movle r0, #0xe000 + ldmleia sp!, {lr} + bxle lr + rsb r0, r0, #0x0 + mov r1, r0, asr #0x5 + ldr r0, _020C5924 ; =0x02103A38 + mov r1, r1, lsl #0x1 + ldrsh r0, [r0, r1] + rsb r0, r0, #0x0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C5924: .word 0x02103A38 + + arm_func_start FUN_020C5928 +FUN_020C5928: ; 0x020C5928 + cmp r0, #0x0 + blt _020C5948 + ldr r2, _020C596C ; =0x7FFFF000 + ldr r3, _020C5970 ; =0x00000FFF + and r2, r0, r2 + str r2, [r1, #0x0] + and r0, r0, r3 + bx lr +_020C5948: + ldr r2, _020C596C ; =0x7FFFF000 + rsb r3, r0, #0x0 + ldr r0, _020C5970 ; =0x00000FFF + and r2, r3, r2 + rsb r2, r2, #0x0 + and r0, r3, r0 + str r2, [r1, #0x0] + rsb r0, r0, #0x0 + bx lr + .balign 4 +_020C596C: .word 0x7FFFF000 +_020C5970: .word 0x00000FFF + + arm_func_start FX_Init +FX_Init: ; 0x020C5974 + bx lr + + arm_func_start GXx_SetMasterBrightness_ +GXx_SetMasterBrightness_: ; 0x020C5978 + cmp r1, #0x0 + moveq r1, #0x0 + streqh r1, [r0, #0x0] + bxeq lr + cmp r1, #0x0 + orrgt r1, r1, #0x4000 + strgth r1, [r0, #0x0] + rsble r1, r1, #0x0 + orrle r1, r1, #0x8000 + strleh r1, [r0, #0x0] + bx lr + + arm_func_start GXS_SetGraphicsMode +GXS_SetGraphicsMode: ; 0x020C59A4 + ldr r2, _020C59BC ; =0x04001000 + ldr r1, [r2, #0x0] + bic r1, r1, #0x7 + orr r0, r1, r0 + str r0, [r2, #0x0] + bx lr + .balign 4 +_020C59BC: .word 0x04001000 + + arm_func_start GX_SetGraphicsMode +GX_SetGraphicsMode: ; 0x020C59C0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, _020C5A28 ; =0x02106810 + mov lr, #0x4000000 + ldrh r12, [r3, #0x0] + ldr lr, [lr, #0x0] + ldr r3, _020C5A2C ; =0x021D33C0 + cmp r12, #0x0 + strh r0, [r3, #0x0] + ldr r3, _020C5A30 ; =0xFFF0FFF0 + moveq r0, #0x0 + and r3, lr, r3 + orr r0, r3, r0, lsl #0x10 + orr r0, r1, r0 + orr r1, r0, r2, lsl #0x3 + mov r12, #0x4000000 + ldr r0, _020C5A2C ; =0x021D33C0 + str r1, [r12, #0x0] + ldrh r0, [r0, #0x0] + cmp r0, #0x0 + ldreq r0, _020C5A28 ; =0x02106810 + moveq r1, #0x0 + streqh r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C5A28: .word 0x02106810 +_020C5A2C: .word 0x021D33C0 +_020C5A30: .word 0xFFF0FFF0 + + arm_func_start GX_DispOn +GX_DispOn: ; 0x020C5A34 + ldr r0, _020C5A78 ; =0x021D33C0 + ldr r1, _020C5A7C ; =0x02106810 + ldrh r2, [r0, #0x0] + mov r0, #0x1 + strh r0, [r1, #0x0] + cmp r2, #0x0 + moveq r1, #0x4000000 + ldreq r0, [r1, #0x0] + orreq r0, r0, #0x10000 + streq r0, [r1, #0x0] + bxeq lr + mov r1, #0x4000000 + ldr r0, [r1, #0x0] + bic r0, r0, #0x30000 + orr r0, r0, r2, lsl #0x10 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020C5A78: .word 0x021D33C0 +_020C5A7C: .word 0x02106810 + + arm_func_start GX_DispOff +GX_DispOff: ; 0x020C5A80 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, #0x4000000 + ldr r12, [lr, #0x0] + ldr r1, _020C5AC0 ; =0x02106810 + and r2, r12, #0x30000 + mov r3, #0x0 + ldr r0, _020C5AC4 ; =0x021D33C0 + mov r2, r2, lsr #0x10 + strh r3, [r1, #0x0] + strh r2, [r0, #0x0] + bic r0, r12, #0x30000 + str r0, [lr, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C5AC0: .word 0x02106810 +_020C5AC4: .word 0x021D33C0 + + arm_func_start GX_VBlankIntr +GX_VBlankIntr: ; 0x020C5AC8 + ldr r2, _020C5AF4 ; =0x04000004 + cmp r0, #0x0 + ldrh r0, [r2, #0x0] + ldrneh r1, [r2, #0x0] + and r0, r0, #0x8 + orrne r1, r1, #0x8 + strneh r1, [r2, #0x0] + ldreqh r1, [r2, #0x0] + biceq r1, r1, #0x8 + streqh r1, [r2, #0x0] + bx lr + .balign 4 +_020C5AF4: .word 0x04000004 + + arm_func_start GX_HBlankIntr +GX_HBlankIntr: ; 0x020C5AF8 + ldr r2, _020C5B24 ; =0x04000004 + cmp r0, #0x0 + ldrh r0, [r2, #0x0] + ldrneh r1, [r2, #0x0] + and r0, r0, #0x10 + orrne r1, r1, #0x10 + strneh r1, [r2, #0x0] + ldreqh r1, [r2, #0x0] + biceq r1, r1, #0x10 + streqh r1, [r2, #0x0] + bx lr + .balign 4 +_020C5B24: .word 0x04000004 + + arm_func_start GX_Init +GX_Init: ; 0x020C5B28 + stmdb sp!, {r4-r6,lr} + ldr r3, _020C5C68 ; =0x04000304 + ldr r0, _020C5C6C ; =0xFFFFFDF1 + ldrh r2, [r3, #0x0] + ldr r1, _020C5C70 ; =0x0000020E + orr r2, r2, #0x8000 + strh r2, [r3, #0x0] + ldrh r2, [r3, #0x0] + and r0, r2, r0 + orr r0, r0, r1 + strh r0, [r3, #0x0] + ldrh r0, [r3, #0x0] + orr r0, r0, #0x1 + strh r0, [r3, #0x0] + bl GX_InitGXState + ldr r5, _020C5C74 ; =0x021D33BC + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + bne _020C5B9C + mvn r4, #0x2 +_020C5B78: + bl OS_GetLockID + mov r6, r0 + cmp r6, r4 + bne _020C5B8C + bl OS_Terminate +_020C5B8C: + strh r6, [r5, #0x0] + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + beq _020C5B78 +_020C5B9C: + ldr r0, _020C5C78 ; =0x04000004 + mov r2, #0x0 + strh r2, [r0, #0x0] + mov r1, #0x4000000 + ldr r0, _020C5C7C ; =0x02106814 + str r2, [r1, #0x0] + ldr r0, [r0, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C5BF4 + ldr r1, _020C5C80 ; =0x04000008 + mov r3, #0x60 + bl MI_DmaFill32 + ldr r1, _020C5C84 ; =0x0400006C + mov r2, #0x0 + ldr r0, _020C5C7C ; =0x02106814 + strh r2, [r1, #0x0] + ldr r0, [r0, #0x0] + ldr r1, _020C5C88 ; =0x04001000 + mov r3, #0x70 + bl MI_DmaFill32 + b _020C5C1C +_020C5BF4: + ldr r1, _020C5C80 ; =0x04000008 + mov r0, r2 + mov r2, #0x60 + bl MIi_CpuClear32 + ldr r3, _020C5C84 ; =0x0400006C + mov r0, #0x0 + ldr r1, _020C5C88 ; =0x04001000 + mov r2, #0x70 + strh r0, [r3, #0x0] + bl MIi_CpuClear32 +_020C5C1C: + ldr r1, _020C5C8C ; =0x04000020 + mov r2, #0x100 + ldr r0, _020C5C90 ; =0x04000026 + strh r2, [r1, #0x0] + ldr r1, _020C5C94 ; =0x04000030 + strh r2, [r0, #0x0] + ldr r0, _020C5C98 ; =0x04000036 + strh r2, [r1, #0x0] + ldr r1, _020C5C9C ; =0x04001020 + strh r2, [r0, #0x0] + ldr r0, _020C5CA0 ; =0x04001026 + strh r2, [r1, #0x0] + ldr r1, _020C5CA4 ; =0x04001030 + strh r2, [r0, #0x0] + ldr r0, _020C5CA8 ; =0x04001036 + strh r2, [r1, #0x0] + strh r2, [r0, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C5C68: .word 0x04000304 +_020C5C6C: .word 0xFFFFFDF1 +_020C5C70: .word 0x0000020E +_020C5C74: .word 0x021D33BC +_020C5C78: .word 0x04000004 +_020C5C7C: .word 0x02106814 +_020C5C80: .word 0x04000008 +_020C5C84: .word 0x0400006C +_020C5C88: .word 0x04001000 +_020C5C8C: .word 0x04000020 +_020C5C90: .word 0x04000026 +_020C5C94: .word 0x04000030 +_020C5C98: .word 0x04000036 +_020C5C9C: .word 0x04001020 +_020C5CA0: .word 0x04001026 +_020C5CA4: .word 0x04001030 +_020C5CA8: .word 0x04001036 + + arm_func_start GX_InitGXState +GX_InitGXState: ; 0x020C5CAC + ldr r0, _020C5D14 ; =0x021D33C4 + mov r3, #0x0 + ldr r2, _020C5D18 ; =0x04000240 + strh r3, [r0, #0x0] + strh r3, [r0, #0x2] + strh r3, [r0, #0x4] + strh r3, [r0, #0x6] + strh r3, [r0, #0x8] + strh r3, [r0, #0xa] + strh r3, [r0, #0xc] + strh r3, [r0, #0xe] + strh r3, [r0, #0x10] + strh r3, [r0, #0x12] + strh r3, [r0, #0x14] + strh r3, [r0, #0x16] + strh r3, [r0, #0x18] + ldr r1, _020C5D1C ; =0x04000244 + str r3, [r2, #0x0] + ldr r0, _020C5D20 ; =0x04000245 + strb r3, [r1, #0x0] + ldr r1, _020C5D24 ; =0x04000246 + strb r3, [r0, #0x0] + ldr r0, _020C5D28 ; =0x04000248 + strb r3, [r1, #0x0] + strh r3, [r0, #0x0] + bx lr + .balign 4 +_020C5D14: .word 0x021D33C4 +_020C5D18: .word 0x04000240 +_020C5D1C: .word 0x04000244 +_020C5D20: .word 0x04000245 +_020C5D24: .word 0x04000246 +_020C5D28: .word 0x04000248 + + arm_func_start GX_GetBankForSubOBJExtPltt +GX_GetBankForSubOBJExtPltt: ; 0x020C5D2C + ldr r0, _020C5D38 ; =0x021D33C4 + ldrh r0, [r0, #0x18] + bx lr + .balign 4 +_020C5D38: .word 0x021D33C4 + + arm_func_start GX_GetBankForSubBGExtPltt +GX_GetBankForSubBGExtPltt: ; 0x020C5D3C + ldr r0, _020C5D48 ; =0x021D33C4 + ldrh r0, [r0, #0x16] + bx lr + .balign 4 +_020C5D48: .word 0x021D33C4 + + arm_func_start GX_GetBankForSubOBJ +GX_GetBankForSubOBJ: ; 0x020C5D4C + ldr r0, _020C5D58 ; =0x021D33C4 + ldrh r0, [r0, #0x14] + bx lr + .balign 4 +_020C5D58: .word 0x021D33C4 + + arm_func_start GX_GetBankForSubBGExtPltt_2 +GX_GetBankForSubBGExtPltt_2: ; 0x020C5D5C + ldr r0, _020C5D68 ; =0x021D33C4 + ldrh r0, [r0, #0x12] + bx lr + .balign 4 +_020C5D68: .word 0x021D33C4 + + arm_func_start GX_GetBankForLCDC +GX_GetBankForLCDC: ; 0x020C5D6C + ldr r0, _020C5D78 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bx lr + .balign 4 +_020C5D78: .word 0x021D33C4 + + arm_func_start GX_GetBankForTexPltt +GX_GetBankForTexPltt: ; 0x020C5D7C + ldr r0, _020C5D88 ; =0x021D33C4 + + arm_func_start FUN_020C5D80 +FUN_020C5D80: ; 0x020C5D80 + ldrh r0, [r0, #0xa] + bx lr + .balign 4 +_020C5D88: .word 0x021D33C4 + + arm_func_start FUN_020C5D8C +FUN_020C5D8C: ; 0x020C5D8C + ldr r0, _020C5D98 ; =0x021D33C4 + ldrh r0, [r0, #0x8] + bx lr + .balign 4 +_020C5D98: .word 0x021D33C4 + + arm_func_start GX_GetBankForOBJExtPltt +GX_GetBankForOBJExtPltt: ; 0x020C5D9C + ldr r0, _020C5DA8 ; =0x021D33C4 + ldrh r0, [r0, #0x10] + bx lr + .balign 4 +_020C5DA8: .word 0x021D33C4 + + arm_func_start GX_GetBankForBGExtPltt +GX_GetBankForBGExtPltt: ; 0x020C5DAC + ldr r0, _020C5DB8 ; =0x021D33C4 + ldrh r0, [r0, #0xe] + bx lr + .balign 4 +_020C5DB8: .word 0x021D33C4 + + arm_func_start GX_GetBankForOBJ +GX_GetBankForOBJ: ; 0x020C5DBC + ldr r0, _020C5DC8 ; =0x021D33C4 + ldrh r0, [r0, #0x4] + bx lr + .balign 4 +_020C5DC8: .word 0x021D33C4 + + arm_func_start GX_GetBankForBGExtPltt_2 +GX_GetBankForBGExtPltt_2: ; 0x020C5DCC + ldr r0, _020C5DD8 ; =0x021D33C4 + ldrh r0, [r0, #0x2] + bx lr + .balign 4 +_020C5DD8: .word 0x021D33C4 + + arm_func_start GX_DisableBankForSubOBJExtPltt +GX_DisableBankForSubOBJExtPltt: ; 0x020C5DDC + ldr r2, _020C5DF8 ; =0x04001000 + ldr ip, _020C5DFC ; =FUN_020C5F28 + ldr r1, [r2, #0x0] + ldr r0, _020C5E00 ; =0x021D33DC + bic r1, r1, #0x80000000 + str r1, [r2, #0x0] + bx r12 + .balign 4 +_020C5DF8: .word 0x04001000 +_020C5DFC: .word FUN_020C5F28 +_020C5E00: .word 0x021D33DC + + arm_func_start FUN_020C5E04 +FUN_020C5E04: ; 0x020C5E04 + ldr r2, _020C5E20 ; =0x04001000 + ldr ip, _020C5E24 ; =FUN_020C5F28 + ldr r1, [r2, #0x0] + ldr r0, _020C5E28 ; =0x021D33DA + bic r1, r1, #0x40000000 + str r1, [r2, #0x0] + bx r12 + .balign 4 +_020C5E20: .word 0x04001000 +_020C5E24: .word FUN_020C5F28 +_020C5E28: .word 0x021D33DA + + arm_func_start GX_DisableBankForSubOBJExtPltt_2 +GX_DisableBankForSubOBJExtPltt_2: ; 0x020C5E2C + ldr ip, _020C5E38 ; =FUN_020C5F28 + ldr r0, _020C5E3C ; =0x021D33D8 + bx r12 + .balign 4 +_020C5E38: .word FUN_020C5F28 +_020C5E3C: .word 0x021D33D8 + + arm_func_start GX_DisableBankForSubBGExtPltt +GX_DisableBankForSubBGExtPltt: ; 0x020C5E40 + ldr ip, _020C5E4C ; =FUN_020C5F28 + ldr r0, _020C5E50 ; =0x021D33D6 + bx r12 + .balign 4 +_020C5E4C: .word FUN_020C5F28 +_020C5E50: .word 0x021D33D6 + + arm_func_start GX_DisableBankForLCDC +GX_DisableBankForLCDC: ; 0x020C5E54 + ldr ip, _020C5E60 ; =FUN_020C5F28 + ldr r0, _020C5E64 ; =0x021D33C4 + bx r12 + .balign 4 +_020C5E60: .word FUN_020C5F28 +_020C5E64: .word 0x021D33C4 + + arm_func_start GX_DisableBankForARM7 +GX_DisableBankForARM7: ; 0x020C5E68 + ldr ip, _020C5E74 ; =FUN_020C5F28 + ldr r0, _020C5E78 ; =0x021D33CA + bx r12 + .balign 4 +_020C5E74: .word FUN_020C5F28 +_020C5E78: .word 0x021D33CA + + arm_func_start GX_DisableBankForClearImage +GX_DisableBankForClearImage: ; 0x020C5E7C + ldr ip, _020C5E88 ; =FUN_020C5F28 + ldr r0, _020C5E8C ; =0x021D33D0 + bx r12 + .balign 4 +_020C5E88: .word FUN_020C5F28 +_020C5E8C: .word 0x021D33D0 + + arm_func_start GX_DisableBankForTexPltt +GX_DisableBankForTexPltt: ; 0x020C5E90 + ldr ip, _020C5E9C ; =FUN_020C5F28 + ldr r0, _020C5EA0 ; =0x021D33CE + bx r12 + .balign 4 +_020C5E9C: .word FUN_020C5F28 +_020C5EA0: .word 0x021D33CE + + arm_func_start GX_DisableBankForTexPltt_2 +GX_DisableBankForTexPltt_2: ; 0x020C5EA4 + ldr ip, _020C5EB0 ; =FUN_020C5F28 + ldr r0, _020C5EB4 ; =0x021D33CC + bx r12 + .balign 4 +_020C5EB0: .word FUN_020C5F28 +_020C5EB4: .word 0x021D33CC + + arm_func_start GX_DisableBankForOBJExtPltt +GX_DisableBankForOBJExtPltt: ; 0x020C5EB8 + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldr ip, _020C5ED4 ; =FUN_020C5F28 + bic r1, r1, #0x80000000 + ldr r0, _020C5ED8 ; =0x021D33D4 + str r1, [r2, #0x0] + bx r12 + .balign 4 +_020C5ED4: .word FUN_020C5F28 +_020C5ED8: .word 0x021D33D4 + + arm_func_start GX_DisableBankForBGExtPltt +GX_DisableBankForBGExtPltt: ; 0x020C5EDC + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldr ip, _020C5EF8 ; =FUN_020C5F28 + bic r1, r1, #0x40000000 + ldr r0, _020C5EFC ; =0x021D33D2 + str r1, [r2, #0x0] + bx r12 + .balign 4 +_020C5EF8: .word FUN_020C5F28 +_020C5EFC: .word 0x021D33D2 + + arm_func_start GX_DisableBankForOBJExtPltt_2 +GX_DisableBankForOBJExtPltt_2: ; 0x020C5F00 + ldr ip, _020C5F0C ; =FUN_020C5F28 + ldr r0, _020C5F10 ; =0x021D33C8 + bx r12 + .balign 4 +_020C5F0C: .word FUN_020C5F28 +_020C5F10: .word 0x021D33C8 + + arm_func_start disableBankForX_ +disableBankForX_: ; 0x020C5F14 + ldr ip, _020C5F20 ; =FUN_020C5F28 + ldr r0, _020C5F24 ; =0x021D33C6 + bx r12 + .balign 4 +_020C5F20: .word FUN_020C5F28 +_020C5F24: .word 0x021D33C6 + + arm_func_start FUN_020C5F28 +FUN_020C5F28: ; 0x020C5F28 + stmdb sp!, {r4,lr} + ldrh r4, [r0, #0x0] + mov r1, #0x0 + strh r1, [r0, #0x0] + ands r0, r4, #0x1 + ldrne r0, _020C5FE4 ; =0x04000240 + strneb r1, [r0, #0x0] + ands r0, r4, #0x2 + ldrne r0, _020C5FE8 ; =0x04000241 + movne r1, #0x0 + strneb r1, [r0, #0x0] + ands r0, r4, #0x4 + ldrne r0, _020C5FEC ; =0x04000242 + movne r1, #0x0 + strneb r1, [r0, #0x0] + ands r0, r4, #0x8 + ldrne r0, _020C5FF0 ; =0x04000243 + movne r1, #0x0 + strneb r1, [r0, #0x0] + ands r0, r4, #0x10 + ldrne r0, _020C5FF4 ; =0x04000244 + movne r1, #0x0 + strneb r1, [r0, #0x0] + ands r0, r4, #0x20 + ldrne r0, _020C5FF8 ; =0x04000245 + movne r1, #0x0 + strneb r1, [r0, #0x0] + ands r0, r4, #0x40 + ldrne r0, _020C5FFC ; =0x04000246 + movne r1, #0x0 + strneb r1, [r0, #0x0] + ands r0, r4, #0x80 + ldrne r0, _020C6000 ; =0x04000248 + movne r1, #0x0 + strneb r1, [r0, #0x0] + ands r0, r4, #0x100 + ldrne r0, _020C6004 ; =0x04000249 + movne r1, #0x0 + strneb r1, [r0, #0x0] + ldr r1, _020C6008 ; =0x021D33BC + mov r0, r4, lsl #0x10 + ldrh r1, [r1, #0x0] + mov r0, r0, lsr #0x10 + bl OSi_UnlockVram + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C5FE4: .word 0x04000240 +_020C5FE8: .word 0x04000241 +_020C5FEC: .word 0x04000242 +_020C5FF0: .word 0x04000243 +_020C5FF4: .word 0x04000244 +_020C5FF8: .word 0x04000245 +_020C5FFC: .word 0x04000246 +_020C6000: .word 0x04000248 +_020C6004: .word 0x04000249 +_020C6008: .word 0x021D33BC + + arm_func_start GX_ResetBankForSubOBJ +GX_ResetBankForSubOBJ: ; 0x020C600C + ldr r2, _020C6028 ; =0x04001000 + ldr ip, _020C602C ; =FUN_020C6130 + ldr r1, [r2, #0x0] + ldr r0, _020C6030 ; =0x021D33DC + bic r1, r1, #0x80000000 + str r1, [r2, #0x0] + bx r12 + .balign 4 +_020C6028: .word 0x04001000 +_020C602C: .word FUN_020C6130 +_020C6030: .word 0x021D33DC + + arm_func_start FUN_020C6034 +FUN_020C6034: ; 0x020C6034 + ldr r2, _020C6050 ; =0x04001000 + ldr ip, _020C6054 ; =FUN_020C6130 + ldr r1, [r2, #0x0] + ldr r0, _020C6058 ; =0x021D33DA + bic r1, r1, #0x40000000 + str r1, [r2, #0x0] + bx r12 + .balign 4 +_020C6050: .word 0x04001000 +_020C6054: .word FUN_020C6130 +_020C6058: .word 0x021D33DA + + arm_func_start FUN_020C605C +FUN_020C605C: ; 0x020C605C + ldr ip, _020C6068 ; =FUN_020C6130 + ldr r0, _020C606C ; =0x021D33D8 + bx r12 + .balign 4 +_020C6068: .word FUN_020C6130 +_020C606C: .word 0x021D33D8 + + arm_func_start GX_ResetBankForSubBG +GX_ResetBankForSubBG: ; 0x020C6070 + ldr ip, _020C607C ; =FUN_020C6130 + ldr r0, _020C6080 ; =0x021D33D6 + bx r12 + .balign 4 +_020C607C: .word FUN_020C6130 +_020C6080: .word 0x021D33D6 + + arm_func_start GX_ResetBankForClearImage +GX_ResetBankForClearImage: ; 0x020C6084 + ldr ip, _020C6090 ; =FUN_020C6130 + ldr r0, _020C6094 ; =0x021D33D0 + bx r12 + .balign 4 +_020C6090: .word FUN_020C6130 +_020C6094: .word 0x021D33D0 + + arm_func_start GX_ResetBankForTexPltt +GX_ResetBankForTexPltt: ; 0x020C6098 + ldr ip, _020C60A4 ; =FUN_020C6130 + ldr r0, _020C60A8 ; =0x021D33CE + bx r12 + .balign 4 +_020C60A4: .word FUN_020C6130 +_020C60A8: .word 0x021D33CE + + arm_func_start GX_ResetBankForTex +GX_ResetBankForTex: ; 0x020C60AC + ldr ip, _020C60B8 ; =FUN_020C6130 + ldr r0, _020C60BC ; =0x021D33CC + bx r12 + .balign 4 +_020C60B8: .word FUN_020C6130 +_020C60BC: .word 0x021D33CC + + arm_func_start GX_ResetBankForOBJExtPltt +GX_ResetBankForOBJExtPltt: ; 0x020C60C0 + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldr ip, _020C60DC ; =FUN_020C6130 + bic r1, r1, #0x80000000 + ldr r0, _020C60E0 ; =0x021D33D4 + str r1, [r2, #0x0] + bx r12 + .balign 4 +_020C60DC: .word FUN_020C6130 +_020C60E0: .word 0x021D33D4 + + arm_func_start GX_ResetBankForBGExtPltt +GX_ResetBankForBGExtPltt: ; 0x020C60E4 + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldr ip, _020C6100 ; =FUN_020C6130 + bic r1, r1, #0x40000000 + ldr r0, _020C6104 ; =0x021D33D2 + str r1, [r2, #0x0] + bx r12 + .balign 4 +_020C6100: .word FUN_020C6130 +_020C6104: .word 0x021D33D2 + + arm_func_start GX_ResetBankForOBJ +GX_ResetBankForOBJ: ; 0x020C6108 + ldr ip, _020C6114 ; =FUN_020C6130 + ldr r0, _020C6118 ; =0x021D33C8 + bx r12 + .balign 4 +_020C6114: .word FUN_020C6130 +_020C6118: .word 0x021D33C8 + + arm_func_start GX_ResetBankForBG +GX_ResetBankForBG: ; 0x020C611C + ldr ip, _020C6128 ; =FUN_020C6130 + ldr r0, _020C612C ; =0x021D33C6 + bx r12 + .balign 4 +_020C6128: .word FUN_020C6130 +_020C612C: .word 0x021D33C6 + + arm_func_start FUN_020C6130 +FUN_020C6130: ; 0x020C6130 + stmdb sp!, {r4,lr} + ldrh r4, [r0, #0x0] + mov r2, #0x0 + ldr r1, _020C6164 ; =0x021D33C4 + strh r2, [r0, #0x0] + ldrh r2, [r1, #0x0] + mov r0, r4 + orr r2, r2, r4 + strh r2, [r1, #0x0] + bl GX_VRAMCNT_SetLCDC_ + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C6164: .word 0x021D33C4 + + arm_func_start GX_SetBankForSubOBJExtPltt +GX_SetBankForSubOBJExtPltt: ; 0x020C6168 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C61E8 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x18] + ldrh r3, [r1, #0x0] + cmp r0, #0x0 + strh r0, [r1, #0x18] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + beq _020C61C0 + cmp r0, #0x100 + bne _020C61D0 + ldr r3, _020C61EC ; =0x04001000 + ldr r0, _020C61F0 ; =0x04000249 + ldr r2, [r3, #0x0] + mov r1, #0x83 + orr r2, r2, #0x80000000 + str r2, [r3, #0x0] + strb r1, [r0, #0x0] + b _020C61D0 +_020C61C0: + ldr r1, _020C61EC ; =0x04001000 + ldr r0, [r1, #0x0] + bic r0, r0, #0x80000000 + str r0, [r1, #0x0] +_020C61D0: + ldr r0, _020C61E8 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C61E8: .word 0x021D33C4 +_020C61EC: .word 0x04001000 +_020C61F0: .word 0x04000249 + + arm_func_start GX_SetBankForSubBGExtPltt +GX_SetBankForSubBGExtPltt: ; 0x020C61F4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C6274 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x16] + ldrh r3, [r1, #0x0] + cmp r0, #0x0 + strh r0, [r1, #0x16] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + beq _020C624C + cmp r0, #0x80 + bne _020C625C + ldr r3, _020C6278 ; =0x04001000 + ldr r0, _020C627C ; =0x04000248 + ldr r2, [r3, #0x0] + mov r1, #0x82 + orr r2, r2, #0x40000000 + str r2, [r3, #0x0] + strb r1, [r0, #0x0] + b _020C625C +_020C624C: + ldr r1, _020C6278 ; =0x04001000 + ldr r0, [r1, #0x0] + bic r0, r0, #0x40000000 + str r0, [r1, #0x0] +_020C625C: + ldr r0, _020C6274 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C6274: .word 0x021D33C4 +_020C6278: .word 0x04001000 +_020C627C: .word 0x04000248 + + arm_func_start GX_SetBankForSubOBJ +GX_SetBankForSubOBJ: ; 0x020C6280 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C62F0 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x14] + ldrh r3, [r1, #0x0] + cmp r0, #0x0 + strh r0, [r1, #0x14] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + beq _020C62D8 + cmp r0, #0x8 + beq _020C62CC + cmp r0, #0x100 + ldreq r0, _020C62F4 ; =0x04000249 + moveq r1, #0x82 + streqb r1, [r0, #0x0] + b _020C62D8 +_020C62CC: + ldr r0, _020C62F8 ; =0x04000243 + mov r1, #0x84 + strb r1, [r0, #0x0] +_020C62D8: + ldr r0, _020C62F0 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C62F0: .word 0x021D33C4 +_020C62F4: .word 0x04000249 +_020C62F8: .word 0x04000243 + + arm_func_start GX_SetBankForSubBG +GX_SetBankForSubBG: ; 0x020C62FC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C6398 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x12] + ldrh r3, [r1, #0x0] + cmp r0, #0x80 + strh r0, [r1, #0x12] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + bgt _020C6360 + cmp r0, #0x80 + bge _020C6374 + cmp r0, #0x4 + bgt _020C6380 + cmp r0, #0x0 + blt _020C6380 + cmp r0, #0x0 + beq _020C6380 + cmp r0, #0x4 + ldreq r0, _020C639C ; =0x04000242 + moveq r1, #0x84 + streqb r1, [r0, #0x0] + b _020C6380 +_020C6360: + cmp r0, #0x180 + bne _020C6380 + ldr r0, _020C63A0 ; =0x04000249 + mov r1, #0x81 + strb r1, [r0, #0x0] +_020C6374: + ldr r0, _020C63A4 ; =0x04000248 + mov r1, #0x81 + strb r1, [r0, #0x0] +_020C6380: + ldr r0, _020C6398 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C6398: .word 0x021D33C4 +_020C639C: .word 0x04000242 +_020C63A0: .word 0x04000249 +_020C63A4: .word 0x04000248 + + arm_func_start GX_SetBankForLCDC +GX_SetBankForLCDC: ; 0x020C63A8 + ldr r1, _020C63C0 ; =0x021D33C4 + ldr ip, _020C63C4 ; =GX_VRAMCNT_SetLCDC_ + ldrh r2, [r1, #0x0] + orr r2, r2, r0 + strh r2, [r1, #0x0] + bx r12 + .balign 4 +_020C63C0: .word 0x021D33C4 +_020C63C4: .word GX_VRAMCNT_SetLCDC_ + + arm_func_start GX_SetBankForARM7 +GX_SetBankForARM7: ; 0x020C63C8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C6474 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x6] + ldrh r3, [r1, #0x0] + cmp r0, #0x8 + strh r0, [r1, #0x6] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + bgt _020C642C + cmp r0, #0x8 + bge _020C6450 + cmp r0, #0x4 + bgt _020C645C + cmp r0, #0x0 + blt _020C645C + cmp r0, #0x0 + beq _020C645C + cmp r0, #0x4 + ldreq r0, _020C6478 ; =0x04000242 + moveq r1, #0x82 + streqb r1, [r0, #0x0] + b _020C645C +_020C642C: + cmp r0, #0xc + bne _020C645C + ldr r1, _020C647C ; =0x04000243 + mov r2, #0x8a + strb r2, [r1, #0x0] + ldr r0, _020C6478 ; =0x04000242 + mov r1, #0x82 + strb r1, [r0, #0x0] + b _020C645C +_020C6450: + ldr r0, _020C647C ; =0x04000243 + mov r1, #0x82 + strb r1, [r0, #0x0] +_020C645C: + ldr r0, _020C6474 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C6474: .word 0x021D33C4 +_020C6478: .word 0x04000242 +_020C647C: .word 0x04000243 + + arm_func_start GX_SetBankForClearImage +GX_SetBankForClearImage: ; 0x020C6480 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C65A8 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0xc] + ldrh r3, [r1, #0x0] + cmp r0, #0xc + strh r0, [r1, #0xc] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + addls pc, pc, r0, lsl #0x2 + b _020C6590 +_020C64B4: ; 0x020C64B4 + b _020C6540 +_020C64B8: ; 0x020C64B8 + b _020C6554 +_020C64BC: ; 0x020C64BC + b _020C64F4 +_020C64C0: ; 0x020C64C0 + b _020C64E8 +_020C64C4: ; 0x020C64C4 + b _020C6574 +_020C64C8: ; 0x020C64C8 + b _020C6590 +_020C64CC: ; 0x020C64CC + b _020C6590 +_020C64D0: ; 0x020C64D0 + b _020C6590 +_020C64D4: ; 0x020C64D4 + b _020C6520 +_020C64D8: ; 0x020C64D8 + b _020C6590 +_020C64DC: ; 0x020C64DC + b _020C6590 +_020C64E0: ; 0x020C64E0 + b _020C6590 +_020C64E4: ; 0x020C64E4 + b _020C6514 +_020C64E8: + ldr r0, _020C65AC ; =0x04000240 + mov r1, #0x93 + strb r1, [r0, #0x0] +_020C64F4: + ldr r0, _020C65B0 ; =0x04000241 + mov r2, #0x9b + ldr r1, _020C65B4 ; =0x04000060 + strb r2, [r0, #0x0] + ldrh r0, [r1, #0x0] + orr r0, r0, #0x4000 + strh r0, [r1, #0x0] + b _020C6590 +_020C6514: + ldr r0, _020C65B8 ; =0x04000242 + mov r1, #0x93 + strb r1, [r0, #0x0] +_020C6520: + ldr r0, _020C65BC ; =0x04000243 + mov r2, #0x9b + ldr r1, _020C65B4 ; =0x04000060 + strb r2, [r0, #0x0] + ldrh r0, [r1, #0x0] + orr r0, r0, #0x4000 + strh r0, [r1, #0x0] + b _020C6590 +_020C6540: + ldr r1, _020C65B4 ; =0x04000060 + ldrh r0, [r1, #0x0] + bic r0, r0, #0x4000 + strh r0, [r1, #0x0] + b _020C6590 +_020C6554: + ldr r0, _020C65AC ; =0x04000240 + mov r2, #0x9b + ldr r1, _020C65B4 ; =0x04000060 + strb r2, [r0, #0x0] + ldrh r0, [r1, #0x0] + orr r0, r0, #0x4000 + strh r0, [r1, #0x0] + b _020C6590 +_020C6574: + ldr r0, _020C65B8 ; =0x04000242 + mov r2, #0x9b + ldr r1, _020C65B4 ; =0x04000060 + strb r2, [r0, #0x0] + ldrh r0, [r1, #0x0] + orr r0, r0, #0x4000 + strh r0, [r1, #0x0] +_020C6590: + ldr r0, _020C65A8 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C65A8: .word 0x021D33C4 +_020C65AC: .word 0x04000240 +_020C65B0: .word 0x04000241 +_020C65B4: .word 0x04000060 +_020C65B8: .word 0x04000242 +_020C65BC: .word 0x04000243 + + arm_func_start GX_SetBankForTexPltt +GX_SetBankForTexPltt: ; 0x020C65C0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C66A4 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0xa] + ldrh r3, [r1, #0x0] + cmp r0, #0x30 + strh r0, [r1, #0xa] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + bgt _020C661C + cmp r0, #0x30 + bge _020C6674 + cmp r0, #0x10 + bgt _020C6610 + cmp r0, #0x10 + bge _020C6680 + cmp r0, #0x0 + b _020C668C +_020C6610: + cmp r0, #0x20 + beq _020C6658 + b _020C668C +_020C661C: + cmp r0, #0x60 + bgt _020C6640 + cmp r0, #0x60 + bge _020C664C + cmp r0, #0x40 + ldreq r0, _020C66A8 ; =0x04000246 + moveq r1, #0x83 + streqb r1, [r0, #0x0] + b _020C668C +_020C6640: + cmp r0, #0x70 + beq _020C6668 + b _020C668C +_020C664C: + ldr r0, _020C66A8 ; =0x04000246 + mov r1, #0x8b + strb r1, [r0, #0x0] +_020C6658: + ldr r0, _020C66AC ; =0x04000245 + mov r1, #0x83 + strb r1, [r0, #0x0] + b _020C668C +_020C6668: + ldr r0, _020C66A8 ; =0x04000246 + mov r1, #0x9b + strb r1, [r0, #0x0] +_020C6674: + ldr r0, _020C66AC ; =0x04000245 + mov r1, #0x93 + strb r1, [r0, #0x0] +_020C6680: + ldr r0, _020C66B0 ; =0x04000244 + mov r1, #0x83 + strb r1, [r0, #0x0] +_020C668C: + ldr r0, _020C66A4 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C66A4: .word 0x021D33C4 +_020C66A8: .word 0x04000246 +_020C66AC: .word 0x04000245 +_020C66B0: .word 0x04000244 + + arm_func_start GX_SetBankForTex +GX_SetBankForTex: ; 0x020C66B4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C689C ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x8] + ldrh r3, [r1, #0x0] + cmp r0, #0x0 + strh r0, [r1, #0x8] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + bne _020C66FC + ldr r2, _020C68A0 ; =0x04000060 + ldr r0, _020C68A4 ; =0x0000CFFE + ldrh r1, [r2, #0x0] + and r0, r1, r0 + strh r0, [r2, #0x0] + b _020C6884 +_020C66FC: + ldr r2, _020C68A0 ; =0x04000060 + cmp r0, #0xf + ldrh r1, [r2, #0x0] + bic r1, r1, #0x3000 + orr r1, r1, #0x1 + strh r1, [r2, #0x0] + addls pc, pc, r0, lsl #0x2 + b _020C6884 +_020C671C: ; 0x020C671C + b _020C6884 +_020C6720: ; 0x020C6720 + b _020C6878 +_020C6724: ; 0x020C6724 + b _020C6844 +_020C6728: ; 0x020C6728 + b _020C686C +_020C672C: ; 0x020C672C + b _020C681C +_020C6730: ; 0x020C6730 + b _020C675C +_020C6734: ; 0x020C6734 + b _020C6838 +_020C6738: ; 0x020C6738 + b _020C6860 +_020C673C: ; 0x020C673C + b _020C6800 +_020C6740: ; 0x020C6740 + b _020C6778 +_020C6744: ; 0x020C6744 + b _020C6794 +_020C6748: ; 0x020C6748 + b _020C67B0 +_020C674C: ; 0x020C674C + b _020C6810 +_020C6750: ; 0x020C6750 + b _020C67D8 +_020C6754: ; 0x020C6754 + b _020C682C +_020C6758: ; 0x020C6758 + b _020C6854 +_020C675C: + ldr r1, _020C68A8 ; =0x04000240 + mov r2, #0x83 + ldr r0, _020C68AC ; =0x04000242 + strb r2, [r1, #0x0] + mov r1, #0x8b + strb r1, [r0, #0x0] + b _020C6884 +_020C6778: + ldr r1, _020C68A8 ; =0x04000240 + mov r2, #0x83 + ldr r0, _020C68B0 ; =0x04000243 + strb r2, [r1, #0x0] + mov r1, #0x8b + strb r1, [r0, #0x0] + b _020C6884 +_020C6794: + ldr r1, _020C68B4 ; =0x04000241 + mov r2, #0x83 + ldr r0, _020C68B0 ; =0x04000243 + strb r2, [r1, #0x0] + mov r1, #0x8b + strb r1, [r0, #0x0] + b _020C6884 +_020C67B0: + ldr r0, _020C68A8 ; =0x04000240 + mov r2, #0x83 + ldr r1, _020C68B4 ; =0x04000241 + strb r2, [r0, #0x0] + mov r2, #0x8b + ldr r0, _020C68B0 ; =0x04000243 + strb r2, [r1, #0x0] + mov r1, #0x93 + strb r1, [r0, #0x0] + b _020C6884 +_020C67D8: + ldr r0, _020C68A8 ; =0x04000240 + mov r2, #0x83 + ldr r1, _020C68AC ; =0x04000242 + strb r2, [r0, #0x0] + mov r2, #0x8b + ldr r0, _020C68B0 ; =0x04000243 + strb r2, [r1, #0x0] + mov r1, #0x93 + strb r1, [r0, #0x0] + b _020C6884 +_020C6800: + ldr r0, _020C68B0 ; =0x04000243 + mov r1, #0x83 + strb r1, [r0, #0x0] + b _020C6884 +_020C6810: + ldr r0, _020C68B0 ; =0x04000243 + mov r1, #0x8b + strb r1, [r0, #0x0] +_020C681C: + ldr r0, _020C68AC ; =0x04000242 + mov r1, #0x83 + strb r1, [r0, #0x0] + b _020C6884 +_020C682C: + ldr r0, _020C68B0 ; =0x04000243 + mov r1, #0x93 + strb r1, [r0, #0x0] +_020C6838: + ldr r0, _020C68AC ; =0x04000242 + mov r1, #0x8b + strb r1, [r0, #0x0] +_020C6844: + ldr r0, _020C68B4 ; =0x04000241 + mov r1, #0x83 + strb r1, [r0, #0x0] + b _020C6884 +_020C6854: + ldr r0, _020C68B0 ; =0x04000243 + mov r1, #0x9b + strb r1, [r0, #0x0] +_020C6860: + ldr r0, _020C68AC ; =0x04000242 + mov r1, #0x93 + strb r1, [r0, #0x0] +_020C686C: + ldr r0, _020C68B4 ; =0x04000241 + mov r1, #0x8b + strb r1, [r0, #0x0] +_020C6878: + ldr r0, _020C68A8 ; =0x04000240 + mov r1, #0x83 + strb r1, [r0, #0x0] +_020C6884: + ldr r0, _020C689C ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C689C: .word 0x021D33C4 +_020C68A0: .word 0x04000060 +_020C68A4: .word 0x0000CFFE +_020C68A8: .word 0x04000240 +_020C68AC: .word 0x04000242 +_020C68B0: .word 0x04000243 +_020C68B4: .word 0x04000241 + + arm_func_start GX_SetBankForOBJExtPltt +GX_SetBankForOBJExtPltt: ; 0x020C68B8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C6964 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x10] + ldrh r3, [r1, #0x0] + cmp r0, #0x0 + strh r0, [r1, #0x10] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + beq _020C693C + cmp r0, #0x20 + beq _020C68FC + cmp r0, #0x40 + beq _020C691C + b _020C694C +_020C68FC: + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldr r0, _020C6968 ; =0x04000245 + orr r1, r1, #0x80000000 + str r1, [r2, #0x0] + mov r1, #0x85 + strb r1, [r0, #0x0] + b _020C694C +_020C691C: + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldr r0, _020C696C ; =0x04000246 + orr r1, r1, #0x80000000 + str r1, [r2, #0x0] + mov r1, #0x85 + strb r1, [r0, #0x0] + b _020C694C +_020C693C: + mov r1, #0x4000000 + ldr r0, [r1, #0x0] + bic r0, r0, #0x80000000 + str r0, [r1, #0x0] +_020C694C: + ldr r0, _020C6964 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C6964: .word 0x021D33C4 +_020C6968: .word 0x04000245 +_020C696C: .word 0x04000246 + + arm_func_start GX_SetBankForBGExtPltt +GX_SetBankForBGExtPltt: ; 0x020C6970 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C6A74 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0xe] + ldrh r3, [r1, #0x0] + cmp r0, #0x20 + strh r0, [r1, #0xe] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + bgt _020C69D4 + cmp r0, #0x20 + bge _020C6A40 + cmp r0, #0x0 + bgt _020C69C8 + cmp r0, #0x0 + moveq r1, #0x4000000 + ldreq r0, [r1, #0x0] + biceq r0, r0, #0x40000000 + streq r0, [r1, #0x0] + b _020C6A5C +_020C69C8: + cmp r0, #0x10 + beq _020C69F4 + b _020C6A5C +_020C69D4: + cmp r0, #0x40 + bgt _020C69E8 + cmp r0, #0x40 + beq _020C6A14 + b _020C6A5C +_020C69E8: + cmp r0, #0x60 + beq _020C6A34 + b _020C6A5C +_020C69F4: + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldr r0, _020C6A78 ; =0x04000244 + orr r1, r1, #0x40000000 + str r1, [r2, #0x0] + mov r1, #0x84 + strb r1, [r0, #0x0] + b _020C6A5C +_020C6A14: + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldr r0, _020C6A7C ; =0x04000246 + orr r1, r1, #0x40000000 + str r1, [r2, #0x0] + mov r1, #0x8c + strb r1, [r0, #0x0] + b _020C6A5C +_020C6A34: + ldr r0, _020C6A7C ; =0x04000246 + mov r1, #0x8c + strb r1, [r0, #0x0] +_020C6A40: + ldr r0, _020C6A80 ; =0x04000245 + mov r1, #0x84 + strb r1, [r0, #0x0] + mov r1, #0x4000000 + ldr r0, [r1, #0x0] + orr r0, r0, #0x40000000 + str r0, [r1, #0x0] +_020C6A5C: + ldr r0, _020C6A74 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C6A74: .word 0x021D33C4 +_020C6A78: .word 0x04000244 +_020C6A7C: .word 0x04000246 +_020C6A80: .word 0x04000245 + + arm_func_start GX_SetBankForOBJ +GX_SetBankForOBJ: ; 0x020C6A84 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C6BD8 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x4] + ldrh r3, [r1, #0x0] + cmp r0, #0x30 + strh r0, [r1, #0x4] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + bgt _020C6AF4 + cmp r0, #0x30 + bge _020C6B70 + cmp r0, #0x10 + bgt _020C6AE8 + cmp r0, #0x10 + bge _020C6B7C + cmp r0, #0x3 + addls pc, pc, r0, lsl #0x2 + b _020C6BC0 +_020C6AD8: ; 0x020C6AD8 + b _020C6BC0 +_020C6ADC: ; 0x020C6ADC + b _020C6B44 +_020C6AE0: ; 0x020C6AE0 + b _020C6B54 +_020C6AE4: ; 0x020C6AE4 + b _020C6B38 +_020C6AE8: + cmp r0, #0x20 + beq _020C6BB4 + b _020C6BC0 +_020C6AF4: + cmp r0, #0x50 + bgt _020C6B18 + cmp r0, #0x50 + bge _020C6B8C + cmp r0, #0x40 + ldreq r0, _020C6BDC ; =0x04000246 + moveq r1, #0x82 + streqb r1, [r0, #0x0] + b _020C6BC0 +_020C6B18: + cmp r0, #0x60 + bgt _020C6B2C + cmp r0, #0x60 + beq _020C6BA8 + b _020C6BC0 +_020C6B2C: + cmp r0, #0x70 + beq _020C6B64 + b _020C6BC0 +_020C6B38: + ldr r0, _020C6BE0 ; =0x04000241 + mov r1, #0x8a + strb r1, [r0, #0x0] +_020C6B44: + ldr r0, _020C6BE4 ; =0x04000240 + mov r1, #0x82 + strb r1, [r0, #0x0] + b _020C6BC0 +_020C6B54: + ldr r0, _020C6BE0 ; =0x04000241 + mov r1, #0x82 + strb r1, [r0, #0x0] + b _020C6BC0 +_020C6B64: + ldr r0, _020C6BDC ; =0x04000246 + mov r1, #0x9a + strb r1, [r0, #0x0] +_020C6B70: + ldr r0, _020C6BE8 ; =0x04000245 + mov r1, #0x92 + strb r1, [r0, #0x0] +_020C6B7C: + ldr r0, _020C6BEC ; =0x04000244 + mov r1, #0x82 + strb r1, [r0, #0x0] + b _020C6BC0 +_020C6B8C: + ldr r1, _020C6BDC ; =0x04000246 + mov r2, #0x92 + ldr r0, _020C6BEC ; =0x04000244 + strb r2, [r1, #0x0] + mov r1, #0x82 + strb r1, [r0, #0x0] + b _020C6BC0 +_020C6BA8: + ldr r0, _020C6BDC ; =0x04000246 + mov r1, #0x8a + strb r1, [r0, #0x0] +_020C6BB4: + ldr r0, _020C6BE8 ; =0x04000245 + mov r1, #0x82 + strb r1, [r0, #0x0] +_020C6BC0: + ldr r0, _020C6BD8 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C6BD8: .word 0x021D33C4 +_020C6BDC: .word 0x04000246 +_020C6BE0: .word 0x04000241 +_020C6BE4: .word 0x04000240 +_020C6BE8: .word 0x04000245 +_020C6BEC: .word 0x04000244 + + arm_func_start GX_SetBankForBG +GX_SetBankForBG: ; 0x020C6BF0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C6E88 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x2] + ldrh r3, [r1, #0x0] + cmp r0, #0x40 + strh r0, [r1, #0x2] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + bgt _020C6CCC + cmp r0, #0x40 + bge _020C6E64 + cmp r0, #0x20 + bgt _020C6CC0 + cmp r0, #0x0 + addge pc, pc, r0, lsl #0x2 + b _020C6E70 +_020C6C3C: ; 0x020C6C3C + b _020C6E70 +_020C6C40: ; 0x020C6C40 + b _020C6D6C +_020C6C44: ; 0x020C6C44 + b _020C6D38 +_020C6C48: ; 0x020C6C48 + b _020C6D60 +_020C6C4C: ; 0x020C6C4C + b _020C6D10 +_020C6C50: ; 0x020C6C50 + b _020C6DB0 +_020C6C54: ; 0x020C6C54 + b _020C6D2C +_020C6C58: ; 0x020C6C58 + b _020C6D54 +_020C6C5C: ; 0x020C6C5C + b _020C6CF4 +_020C6C60: ; 0x020C6C60 + b _020C6DCC +_020C6C64: ; 0x020C6C64 + b _020C6DE8 +_020C6C68: ; 0x020C6C68 + b _020C6D7C +_020C6C6C: ; 0x020C6C6C + b _020C6D04 +_020C6C70: ; 0x020C6C70 + b _020C6DA4 +_020C6C74: ; 0x020C6C74 + b _020C6D20 +_020C6C78: ; 0x020C6C78 + b _020C6D48 +_020C6C7C: ; 0x020C6C7C + b _020C6E1C +_020C6C80: ; 0x020C6C80 + b _020C6E70 +_020C6C84: ; 0x020C6C84 + b _020C6E70 +_020C6C88: ; 0x020C6C88 + b _020C6E70 +_020C6C8C: ; 0x020C6C8C + b _020C6E70 +_020C6C90: ; 0x020C6C90 + b _020C6E70 +_020C6C94: ; 0x020C6C94 + b _020C6E70 +_020C6C98: ; 0x020C6C98 + b _020C6E70 +_020C6C9C: ; 0x020C6C9C + b _020C6E70 +_020C6CA0: ; 0x020C6CA0 + b _020C6E70 +_020C6CA4: ; 0x020C6CA4 + b _020C6E70 +_020C6CA8: ; 0x020C6CA8 + b _020C6E70 +_020C6CAC: ; 0x020C6CAC + b _020C6E70 +_020C6CB0: ; 0x020C6CB0 + b _020C6E70 +_020C6CB4: ; 0x020C6CB4 + b _020C6E70 +_020C6CB8: ; 0x020C6CB8 + b _020C6E70 +_020C6CBC: ; 0x020C6CBC + b _020C6E54 +_020C6CC0: + cmp r0, #0x30 + beq _020C6E10 + b _020C6E70 +_020C6CCC: + cmp r0, #0x60 + bgt _020C6CE8 + cmp r0, #0x60 + bge _020C6E48 + cmp r0, #0x50 + beq _020C6E2C + b _020C6E70 +_020C6CE8: + cmp r0, #0x70 + beq _020C6E04 + b _020C6E70 +_020C6CF4: + ldr r0, _020C6E8C ; =0x04000243 + mov r1, #0x81 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6D04: + ldr r0, _020C6E8C ; =0x04000243 + mov r1, #0x89 + strb r1, [r0, #0x0] +_020C6D10: + ldr r0, _020C6E90 ; =0x04000242 + mov r1, #0x81 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6D20: + ldr r0, _020C6E8C ; =0x04000243 + mov r1, #0x91 + strb r1, [r0, #0x0] +_020C6D2C: + ldr r0, _020C6E90 ; =0x04000242 + mov r1, #0x89 + strb r1, [r0, #0x0] +_020C6D38: + ldr r0, _020C6E94 ; =0x04000241 + mov r1, #0x81 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6D48: + ldr r0, _020C6E8C ; =0x04000243 + mov r1, #0x99 + strb r1, [r0, #0x0] +_020C6D54: + ldr r0, _020C6E90 ; =0x04000242 + mov r1, #0x91 + strb r1, [r0, #0x0] +_020C6D60: + ldr r0, _020C6E94 ; =0x04000241 + mov r1, #0x89 + strb r1, [r0, #0x0] +_020C6D6C: + ldr r0, _020C6E98 ; =0x04000240 + mov r1, #0x81 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6D7C: + ldr r0, _020C6E98 ; =0x04000240 + mov r2, #0x81 + ldr r1, _020C6E94 ; =0x04000241 + strb r2, [r0, #0x0] + mov r2, #0x89 + ldr r0, _020C6E8C ; =0x04000243 + strb r2, [r1, #0x0] + mov r1, #0x91 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6DA4: + ldr r0, _020C6E8C ; =0x04000243 + mov r1, #0x91 + strb r1, [r0, #0x0] +_020C6DB0: + ldr r1, _020C6E98 ; =0x04000240 + mov r2, #0x81 + ldr r0, _020C6E90 ; =0x04000242 + strb r2, [r1, #0x0] + mov r1, #0x89 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6DCC: + ldr r1, _020C6E98 ; =0x04000240 + mov r2, #0x81 + ldr r0, _020C6E8C ; =0x04000243 + strb r2, [r1, #0x0] + mov r1, #0x89 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6DE8: + ldr r1, _020C6E94 ; =0x04000241 + mov r2, #0x81 + ldr r0, _020C6E8C ; =0x04000243 + strb r2, [r1, #0x0] + mov r1, #0x89 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6E04: + ldr r0, _020C6E9C ; =0x04000246 + mov r1, #0x99 + strb r1, [r0, #0x0] +_020C6E10: + ldr r0, _020C6EA0 ; =0x04000245 + mov r1, #0x91 + strb r1, [r0, #0x0] +_020C6E1C: + ldr r0, _020C6EA4 ; =0x04000244 + mov r1, #0x81 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6E2C: + ldr r1, _020C6E9C ; =0x04000246 + mov r2, #0x91 + ldr r0, _020C6EA4 ; =0x04000244 + strb r2, [r1, #0x0] + mov r1, #0x81 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6E48: + ldr r0, _020C6E9C ; =0x04000246 + mov r1, #0x89 + strb r1, [r0, #0x0] +_020C6E54: + ldr r0, _020C6EA0 ; =0x04000245 + mov r1, #0x81 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6E64: + ldr r0, _020C6E9C ; =0x04000246 + mov r1, #0x81 + strb r1, [r0, #0x0] +_020C6E70: + ldr r0, _020C6E88 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C6E88: .word 0x021D33C4 +_020C6E8C: .word 0x04000243 +_020C6E90: .word 0x04000242 +_020C6E94: .word 0x04000241 +_020C6E98: .word 0x04000240 +_020C6E9C: .word 0x04000246 +_020C6EA0: .word 0x04000245 +_020C6EA4: .word 0x04000244 + + arm_func_start GX_VRAMCNT_SetLCDC_ +GX_VRAMCNT_SetLCDC_: ; 0x020C6EA8 + ands r1, r0, #0x1 + ldrne r1, _020C6F3C ; =0x04000240 + movne r2, #0x80 + strneb r2, [r1, #0x0] + ands r1, r0, #0x2 + ldrne r1, _020C6F40 ; =0x04000241 + movne r2, #0x80 + strneb r2, [r1, #0x0] + ands r1, r0, #0x4 + ldrne r1, _020C6F44 ; =0x04000242 + movne r2, #0x80 + strneb r2, [r1, #0x0] + ands r1, r0, #0x8 + ldrne r1, _020C6F48 ; =0x04000243 + movne r2, #0x80 + strneb r2, [r1, #0x0] + ands r1, r0, #0x10 + ldrne r1, _020C6F4C ; =0x04000244 + movne r2, #0x80 + strneb r2, [r1, #0x0] + ands r1, r0, #0x20 + ldrne r1, _020C6F50 ; =0x04000245 + movne r2, #0x80 + strneb r2, [r1, #0x0] + ands r1, r0, #0x40 + ldrne r1, _020C6F54 ; =0x04000246 + movne r2, #0x80 + strneb r2, [r1, #0x0] + ands r1, r0, #0x80 + ldrne r1, _020C6F58 ; =0x04000248 + movne r2, #0x80 + strneb r2, [r1, #0x0] + ands r0, r0, #0x100 + ldrne r0, _020C6F5C ; =0x04000249 + movne r1, #0x80 + strneb r1, [r0, #0x0] + bx lr + .balign 4 +_020C6F3C: .word 0x04000240 +_020C6F40: .word 0x04000241 +_020C6F44: .word 0x04000242 +_020C6F48: .word 0x04000243 +_020C6F4C: .word 0x04000244 +_020C6F50: .word 0x04000245 +_020C6F54: .word 0x04000246 +_020C6F58: .word 0x04000248 +_020C6F5C: .word 0x04000249 + + arm_func_start G2S_GetBG3CharPtr +G2S_GetBG3CharPtr: ; 0x020C6F60 + ldr r1, _020C6FA8 ; =0x04001000 + ldr r0, _020C6FAC ; =0x0400100E + ldr r1, [r1, #0x0] + ldrh r2, [r0, #0x0] + and r0, r1, #0x7 + cmp r0, #0x3 + blt _020C6F8C + cmp r0, #0x6 + bge _020C6FA0 + ands r0, r2, #0x80 + bne _020C6FA0 +_020C6F8C: + and r0, r2, #0x3c + mov r0, r0, lsr #0x2 + mov r0, r0, lsl #0xe + add r0, r0, #0x6200000 + bx lr +_020C6FA0: + mov r0, #0x0 + bx lr + .balign 4 +_020C6FA8: .word 0x04001000 +_020C6FAC: .word 0x0400100E + + arm_func_start G2_GetBG3CharPtr +G2_GetBG3CharPtr: ; 0x020C6FB0 + mov r0, #0x4000000 + ldr r1, [r0, #0x0] + ldr r0, _020C700C ; =0x0400000E + and r1, r1, #0x7 + cmp r1, #0x3 + ldrh r2, [r0, #0x0] + blt _020C6FDC + cmp r1, #0x6 + bge _020C7004 + ands r0, r2, #0x80 + bne _020C7004 +_020C6FDC: + mov r0, #0x4000000 + ldr r1, [r0, #0x0] + and r0, r2, #0x3c + and r1, r1, #0x7000000 + mov r1, r1, lsr #0x18 + mov r1, r1, lsl #0x10 + add r1, r1, #0x6000000 + mov r0, r0, lsr #0x2 + add r0, r1, r0, lsl #0xe + bx lr +_020C7004: + mov r0, #0x0 + bx lr + .balign 4 +_020C700C: .word 0x0400000E + + arm_func_start G2S_GetBG2CharPtr +G2S_GetBG2CharPtr: ; 0x020C7010 + ldr r1, _020C7050 ; =0x04001000 + ldr r0, _020C7054 ; =0x0400100C + ldr r1, [r1, #0x0] + ldrh r2, [r0, #0x0] + and r0, r1, #0x7 + cmp r0, #0x5 + blt _020C7034 + ands r0, r2, #0x80 + bne _020C7048 +_020C7034: + and r0, r2, #0x3c + mov r0, r0, lsr #0x2 + mov r0, r0, lsl #0xe + add r0, r0, #0x6200000 + bx lr +_020C7048: + mov r0, #0x0 + bx lr + .balign 4 +_020C7050: .word 0x04001000 +_020C7054: .word 0x0400100C + + arm_func_start G2_GetBG2CharPtr +G2_GetBG2CharPtr: ; 0x020C7058 + mov r0, #0x4000000 + ldr r1, [r0, #0x0] + ldr r0, _020C70AC ; =0x0400000C + and r1, r1, #0x7 + cmp r1, #0x5 + ldrh r2, [r0, #0x0] + blt _020C707C + ands r0, r2, #0x80 + bne _020C70A4 +_020C707C: + mov r0, #0x4000000 + ldr r1, [r0, #0x0] + and r0, r2, #0x3c + and r1, r1, #0x7000000 + mov r1, r1, lsr #0x18 + mov r1, r1, lsl #0x10 + add r1, r1, #0x6000000 + mov r0, r0, lsr #0x2 + add r0, r1, r0, lsl #0xe + bx lr +_020C70A4: + mov r0, #0x0 + bx lr + .balign 4 +_020C70AC: .word 0x0400000C + + arm_func_start G2S_GetBG1CharPtr +G2S_GetBG1CharPtr: ; 0x020C70B0 + ldr r0, _020C70CC ; =0x0400100A + ldrh r0, [r0, #0x0] + and r0, r0, #0x3c + mov r0, r0, asr #0x2 + mov r0, r0, lsl #0xe + add r0, r0, #0x6200000 + bx lr + .balign 4 +_020C70CC: .word 0x0400100A + + arm_func_start G2_GetBG1CharPtr +G2_GetBG1CharPtr: ; 0x020C70D0 + ldr r1, _020C7100 ; =0x0400000A + mov r0, #0x4000000 + ldrh r1, [r1, #0x0] + ldr r0, [r0, #0x0] + and r0, r0, #0x7000000 + mov r0, r0, lsr #0x18 + and r1, r1, #0x3c + mov r0, r0, lsl #0x10 + mov r1, r1, asr #0x2 + add r0, r0, #0x6000000 + add r0, r0, r1, lsl #0xe + bx lr + .balign 4 +_020C7100: .word 0x0400000A + + arm_func_start G2S_GetBG0CharPtr +G2S_GetBG0CharPtr: ; 0x020C7104 + ldr r0, _020C7120 ; =0x04001008 + ldrh r0, [r0, #0x0] + and r0, r0, #0x3c + mov r0, r0, asr #0x2 + mov r0, r0, lsl #0xe + add r0, r0, #0x6200000 + bx lr + .balign 4 +_020C7120: .word 0x04001008 + + arm_func_start G2_GetBG0CharPtr +G2_GetBG0CharPtr: ; 0x020C7124 + ldr r1, _020C7154 ; =0x04000008 + mov r0, #0x4000000 + ldrh r1, [r1, #0x0] + ldr r0, [r0, #0x0] + and r0, r0, #0x7000000 + mov r0, r0, lsr #0x18 + and r1, r1, #0x3c + mov r0, r0, lsl #0x10 + mov r1, r1, asr #0x2 + add r0, r0, #0x6000000 + add r0, r0, r1, lsl #0xe + bx lr + .balign 4 +_020C7154: .word 0x04000008 + + arm_func_start G2S_GetBG3ScrPtr +G2S_GetBG3ScrPtr: ; 0x020C7158 + ldr r1, _020C71D0 ; =0x04001000 + ldr r0, _020C71D4 ; =0x0400100E + ldr r1, [r1, #0x0] + ldrh r2, [r0, #0x0] + and r3, r1, #0x7 + cmp r3, #0x6 + and r0, r2, #0x1f00 + mov r1, r0, lsr #0x8 + addls pc, pc, r3, lsl #0x2 + b _020C71C8 +_020C7180: ; 0x020C7180 + b _020C719C +_020C7184: ; 0x020C7184 + b _020C719C +_020C7188: ; 0x020C7188 + b _020C719C +_020C718C: ; 0x020C718C + b _020C71A8 +_020C7190: ; 0x020C7190 + b _020C71A8 +_020C7194: ; 0x020C7194 + b _020C71A8 +_020C7198: ; 0x020C7198 + b _020C71C0 +_020C719C: + mov r0, r1, lsl #0xb + add r0, r0, #0x6200000 + bx lr +_020C71A8: + ands r0, r2, #0x80 + movne r0, r1, lsl #0xe + addne r0, r0, #0x6200000 + moveq r0, r1, lsl #0xb + addeq r0, r0, #0x6200000 + bx lr +_020C71C0: + mov r0, #0x0 + bx lr +_020C71C8: + mov r0, #0x0 + bx lr + .balign 4 +_020C71D0: .word 0x04001000 +_020C71D4: .word 0x0400100E + + arm_func_start G2_GetBG3ScrPtr +G2_GetBG3ScrPtr: ; 0x020C71D8 + ldr r0, _020C7260 ; =0x0400000E + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldrh r3, [r0, #0x0] + ldr r0, [r2, #0x0] + and r12, r1, #0x7 + and r0, r0, #0x38000000 + mov r1, r0, lsr #0x1b + and r0, r3, #0x1f00 + mov r2, r1, lsl #0x10 + cmp r12, #0x6 + mov r1, r0, lsr #0x8 + addls pc, pc, r12, lsl #0x2 + b _020C7258 +_020C7210: + b _020C722C +_020C7214: + b _020C722C +_020C7218: + b _020C722C +_020C721C: + b _020C7238 +_020C7220: + b _020C7238 +_020C7224: + b _020C7238 +_020C7228: + b _020C7250 +_020C722C: + add r0, r2, #0x6000000 + add r0, r0, r1, lsl #0xb + bx lr +_020C7238: + ands r0, r3, #0x80 + movne r0, r1, lsl #0xe + addne r0, r0, #0x6000000 + addeq r0, r2, #0x6000000 + addeq r0, r0, r1, lsl #0xb + bx lr +_020C7250: + mov r0, #0x0 + bx lr +_020C7258: + mov r0, #0x0 + bx lr + .balign 4 +_020C7260: .word 0x0400000E + + arm_func_start G2S_GetBG2ScrPtr +G2S_GetBG2ScrPtr: ; 0x020C7264 + ldr r1, _020C72DC ; =0x04001000 + ldr r0, _020C72E0 ; =0x0400100C + ldr r1, [r1, #0x0] + ldrh r2, [r0, #0x0] + and r3, r1, #0x7 + cmp r3, #0x6 + and r0, r2, #0x1f00 + mov r1, r0, lsr #0x8 + addls pc, pc, r3, lsl #0x2 + b _020C72D4 +_020C728C: ; 0x020C728C + b _020C72A8 +_020C7290: ; 0x020C7290 + b _020C72A8 +_020C7294: ; 0x020C7294 + b _020C72A8 +_020C7298: ; 0x020C7298 + b _020C72A8 +_020C729C: ; 0x020C729C + b _020C72A8 +_020C72A0: ; 0x020C72A0 + b _020C72B4 +_020C72A4: ; 0x020C72A4 + b _020C72CC +_020C72A8: + mov r0, r1, lsl #0xb + add r0, r0, #0x6200000 + bx lr +_020C72B4: + ands r0, r2, #0x80 + movne r0, r1, lsl #0xe + addne r0, r0, #0x6200000 + moveq r0, r1, lsl #0xb + addeq r0, r0, #0x6200000 + bx lr +_020C72CC: + mov r0, #0x0 + bx lr +_020C72D4: + mov r0, #0x0 + bx lr + .balign 4 +_020C72DC: .word 0x04001000 +_020C72E0: .word 0x0400100C + + arm_func_start G2_GetBG2ScrPtr +G2_GetBG2ScrPtr: ; 0x020C72E4 + ldr r0, _020C736C ; =0x0400000C + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldrh r3, [r0, #0x0] + ldr r0, [r2, #0x0] + and r12, r1, #0x7 + and r0, r0, #0x38000000 + mov r1, r0, lsr #0x1b + and r0, r3, #0x1f00 + mov r2, r1, lsl #0x10 + cmp r12, #0x6 + mov r1, r0, lsr #0x8 + addls pc, pc, r12, lsl #0x2 + b _020C7364 +_020C731C: + b _020C7338 +_020C7320: + b _020C7338 +_020C7324: + b _020C7338 +_020C7328: + b _020C7338 +_020C732C: + b _020C7338 +_020C7330: + b _020C7344 +_020C7334: + b _020C735C +_020C7338: + add r0, r2, #0x6000000 + add r0, r0, r1, lsl #0xb + bx lr +_020C7344: + ands r0, r3, #0x80 + movne r0, r1, lsl #0xe + addne r0, r0, #0x6000000 + addeq r0, r2, #0x6000000 + addeq r0, r0, r1, lsl #0xb + bx lr +_020C735C: + mov r0, #0x6000000 + bx lr +_020C7364: + mov r0, #0x0 + bx lr + .balign 4 +_020C736C: .word 0x0400000C + + arm_func_start G2S_GetBG1ScrPtr +G2S_GetBG1ScrPtr: ; 0x020C7370 + ldr r0, _020C738C ; =0x0400100A + ldrh r0, [r0, #0x0] + and r0, r0, #0x1f00 + mov r0, r0, asr #0x8 + mov r0, r0, lsl #0xb + add r0, r0, #0x6200000 + bx lr + .balign 4 +_020C738C: .word 0x0400100A + + arm_func_start G2_GetBG1ScrPtr +G2_GetBG1ScrPtr: ; 0x020C7390 + ldr r1, _020C73C0 ; =0x0400000A + mov r0, #0x4000000 + ldrh r1, [r1, #0x0] + ldr r0, [r0, #0x0] + and r0, r0, #0x38000000 + mov r0, r0, lsr #0x1b + and r1, r1, #0x1f00 + mov r0, r0, lsl #0x10 + mov r1, r1, asr #0x8 + add r0, r0, #0x6000000 + add r0, r0, r1, lsl #0xb + bx lr + .balign 4 +_020C73C0: .word 0x0400000A + + arm_func_start G2S_GetBG0ScrPtr +G2S_GetBG0ScrPtr: ; 0x020C73C4 + ldr r0, _020C73E0 ; =0x04001008 + ldrh r0, [r0, #0x0] + and r0, r0, #0x1f00 + mov r0, r0, asr #0x8 + mov r0, r0, lsl #0xb + add r0, r0, #0x6200000 + bx lr + .balign 4 +_020C73E0: .word 0x04001008 + + arm_func_start G2_GetBG0ScrPtr +G2_GetBG0ScrPtr: ; 0x020C73E4 + ldr r1, _020C7414 ; =0x04000008 + mov r0, #0x4000000 + ldrh r1, [r1, #0x0] + ldr r0, [r0, #0x0] + and r0, r0, #0x38000000 + mov r0, r0, lsr #0x1b + and r1, r1, #0x1f00 + mov r0, r0, lsl #0x10 + mov r1, r1, asr #0x8 + add r0, r0, #0x6000000 + add r0, r0, r1, lsl #0xb + bx lr + .balign 4 +_020C7414: .word 0x04000008 + + arm_func_start G2x_ChangeBlendBrightness_ +G2x_ChangeBlendBrightness_: ; 0x020C7418 + cmp r1, #0x0 + ldrh r3, [r0, #0x0] + bge _020C7444 + and r2, r3, #0xc0 + cmp r2, #0x80 + biceq r2, r3, #0xc0 + orreq r2, r2, #0xc0 + streqh r2, [r0, #0x0] + rsb r1, r1, #0x0 + strh r1, [r0, #0x4] + bx lr +_020C7444: + and r2, r3, #0xc0 + cmp r2, #0xc0 + biceq r2, r3, #0xc0 + orreq r2, r2, #0x80 + streqh r2, [r0, #0x0] + strh r1, [r0, #0x4] + bx lr + + arm_func_start G2x_SetBlendBrightnessExt_ +G2x_SetBlendBrightnessExt_: ; 0x020C7460 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr lr, [sp, #0x8] + ldr r12, [sp, #0xc] + orr r3, r3, lr, lsl #0x8 + cmp r12, #0x0 + orrge r1, r1, #0x80 + strh r3, [r0, #0x2] + orrge r1, r1, r2, lsl #0x8 + strgeh r1, [r0, #0x0] + strgeh r12, [r0, #0x4] + addge sp, sp, #0x4 + ldmgeia sp!, {lr} + bxge lr + orr r1, r1, #0xc0 + orr r1, r1, r2, lsl #0x8 + strh r1, [r0, #0x0] + rsb r1, r12, #0x0 + strh r1, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start G2x_SetBlendBrightness_ +G2x_SetBlendBrightness_: ; 0x020C74B8 + cmp r2, #0x0 + orrlt r1, r1, #0xc0 + strlth r1, [r0, #0x0] + rsblt r1, r2, #0x0 + strlth r1, [r0, #0x4] + orrge r1, r1, #0x80 + strgeh r1, [r0, #0x0] + strgeh r2, [r0, #0x4] + bx lr + + arm_func_start G2x_SetBlendAlpha_ +G2x_SetBlendAlpha_: ; 0x020C74DC + ldr r12, [sp, #0x0] + orr r1, r1, #0x40 + orr r2, r1, r2, lsl #0x8 + orr r1, r3, r12, lsl #0x8 + orr r1, r2, r1, lsl #0x10 + str r1, [r0, #0x0] + bx lr + + arm_func_start G2x_SetBGyAffine_ +G2x_SetBGyAffine_: ; 0x020C74F8 + stmdb sp!, {r4-r6,lr} + ldr r5, [r1, #0x0] + ldr r4, [r1, #0x4] + mov r12, r5, lsl #0xc + mov lr, r4, lsl #0xc + mov r5, r12, asr #0x10 + mov r4, lr, asr #0x10 + mov r12, r5, lsl #0x10 + mov lr, r4, lsl #0x10 + mov r5, r12, lsr #0x10 + mov r4, lr, lsr #0x10 + orr r4, r5, r4, lsl #0x10 + str r4, [r0, #0x0] + ldr r5, [r1, #0x8] + ldr r4, [r1, #0xc] + mov r12, r5, lsl #0xc + mov lr, r4, lsl #0xc + mov r5, r12, asr #0x10 + mov r4, lr, asr #0x10 + mov r12, r5, lsl #0x10 + mov lr, r4, lsl #0x10 + ldr r4, [sp, #0x14] + ldr r6, [sp, #0x10] + mov r12, r12, lsr #0x10 + mov r5, lr, lsr #0x10 + orr r5, r12, r5, lsl #0x10 + str r5, [r0, #0x4] + ldr r12, [r1, #0x4] + sub r5, r4, r3 + ldr r4, [r1, #0xc] + mul lr, r12, r5 + mul r5, r4, r5 + ldr r12, [r1, #0x0] + sub r6, r6, r2 + ldr r4, [r1, #0x8] + mla r1, r12, r6, lr + mla r5, r4, r6, r5 + add r1, r1, r2, lsl #0xc + add r2, r5, r3, lsl #0xc + mov r1, r1, asr #0x4 + str r1, [r0, #0x8] + mov r1, r2, asr #0x4 + str r1, [r0, #0xc] + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start G3B_End +G3B_End: ; 0x020C75AC + ldr r1, [r0, #0x0] + mov r2, #0x41 + str r2, [r1, #0x0] + ldr r1, [r0, #0x4] + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + bx lr + + arm_func_start G3B_Begin +G3B_Begin: ; 0x020C75D0 + ldr r2, [r0, #0x0] + mov r3, #0x40 + str r3, [r2, #0x0] + ldr r2, [r0, #0x4] + str r1, [r2, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + bx lr + + arm_func_start G3B_LightColor +G3B_LightColor: ; 0x020C7600 + ldr r3, [r0, #0x0] + mov r12, #0x33 + str r12, [r3, #0x0] + ldr r3, [r0, #0x4] + orr r1, r2, r1, lsl #0x1e + str r1, [r3, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + bx lr + + arm_func_start G3B_LightVector +G3B_LightVector: ; 0x020C7634 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr ip, _020C7694 ; =0x000003FF + ldrsh r4, [sp, #0x10] + ldr lr, [r0, #0x0] + mov r5, #0x32 + str r5, [lr, #0x0] + and lr, r12, r2, asr #0x3 + and r2, r12, r3, asr #0x3 + and r3, r12, r4, asr #0x3 + orr r2, lr, r2, lsl #0xa + orr r3, r2, r3, lsl #0x14 + ldr r2, [r0, #0x4] + orr r1, r3, r1, lsl #0x1e + str r1, [r2, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020C7694: .word 0x000003FF + + arm_func_start G3B_MaterialColorSpecEmi +G3B_MaterialColorSpecEmi: ; 0x020C7698 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r12, [r0, #0x0] + mov lr, #0x31 + cmp r3, #0x0 + movne r3, #0x1 + str lr, [r12, #0x0] + orr r2, r1, r2, lsl #0x10 + moveq r3, #0x0 + ldr r1, [r0, #0x4] + orr r2, r2, r3, lsl #0xf + str r2, [r1, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start G3B_MaterialColorDiffAmb +G3B_MaterialColorDiffAmb: ; 0x020C76EC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r12, [r0, #0x0] + mov lr, #0x30 + cmp r3, #0x0 + movne r3, #0x1 + str lr, [r12, #0x0] + orr r2, r1, r2, lsl #0x10 + moveq r3, #0x0 + ldr r1, [r0, #0x4] + orr r2, r2, r3, lsl #0xf + str r2, [r1, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start G3B_PolygonAttr +G3B_PolygonAttr: ; 0x020C7740 + orr r1, r1, r2, lsl #0x4 + ldr r2, [r0, #0x0] + mov r12, #0x29 + str r12, [r2, #0x0] + ldr r2, [sp, #0x8] + orr r1, r1, r3, lsl #0x6 + ldr r3, [sp, #0x0] + orr r1, r2, r1 + ldr r12, [sp, #0x4] + orr r2, r1, r3, lsl #0x18 + ldr r1, [r0, #0x4] + orr r2, r2, r12, lsl #0x10 + str r2, [r1, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + bx lr + + arm_func_start G3B_Vtx +G3B_Vtx: ; 0x020C7790 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r12, [r0, #0x0] + mov lr, #0x23 + str lr, [r12, #0x0] + mov r1, r1, lsl #0x10 + mov r2, r2, lsl #0x10 + mov lr, r1, lsr #0x10 + mov r12, r2, lsr #0x10 + mov r1, r3, lsl #0x10 + ldr r2, [r0, #0x4] + orr r3, lr, r12, lsl #0x10 + str r3, [r2, #0x0] + ldr r2, [r0, #0x4] + mov r1, r1, lsr #0x10 + str r1, [r2, #0x4] + ldr r1, [r0, #0x4] + add r1, r1, #0x8 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start G3B_Normal +G3B_Normal: ; 0x020C77F4 + stmdb sp!, {r4,lr} + ldr ip, _020C7844 ; =0x000003FF + ldr lr, [r0, #0x0] + mov r4, #0x21 + str r4, [lr, #0x0] + and lr, r12, r1, asr #0x3 + and r1, r12, r2, asr #0x3 + and r3, r12, r3, asr #0x3 + orr r2, lr, r1, lsl #0xa + ldr r1, [r0, #0x4] + orr r2, r2, r3, lsl #0x14 + str r2, [r1, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C7844: .word 0x000003FF + + arm_func_start G3B_Color +G3B_Color: ; 0x020C7848 + ldr r2, [r0, #0x0] + mov r3, #0x20 + str r3, [r2, #0x0] + ldr r2, [r0, #0x4] + str r1, [r2, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + bx lr + + arm_func_start G3B_LoadMtx44 +G3B_LoadMtx44: ; 0x020C7878 + stmdb sp!, {r4,lr} + mov r4, r0 + bl G3BS_LoadMtx44 + ldr r0, [r4, #0x4] + add r0, r0, #0x40 + str r0, [r4, #0x0] + ldr r0, [r4, #0x0] + add r0, r0, #0x4 + str r0, [r4, #0x4] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start G3B_PopMtx +G3B_PopMtx: ; 0x020C78A4 + ldr r2, [r0, #0x0] + mov r3, #0x12 + str r3, [r2, #0x0] + ldr r2, [r0, #0x4] + str r1, [r2, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + bx lr + + arm_func_start G3B_PushMtx +G3B_PushMtx: ; 0x020C78D4 + ldr r1, [r0, #0x0] + mov r2, #0x11 + str r2, [r1, #0x0] + ldr r1, [r0, #0x4] + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + bx lr + + arm_func_start G3BS_LoadMtx44 +G3BS_LoadMtx44: ; 0x020C78F8 + mov r3, r0 + ldr r0, [r3, #0x0] + mov r2, #0x16 + str r2, [r0, #0x0] + mov r0, r1 + ldr ip, _020C7918 ; =MI_Copy64B + ldr r1, [r3, #0x4] + bx r12 + .balign 4 +_020C7918: .word MI_Copy64B + + arm_func_start G3_MultMtx33 +G3_MultMtx33: ; 0x020C791C + ldr r1, _020C7930 ; =0x04000400 + mov r2, #0x1a + ldr ip, _020C7934 ; =MI_Copy36B + str r2, [r1, #0x0] + bx r12 + .balign 4 +_020C7930: .word 0x04000400 +_020C7934: .word MI_Copy36B + + arm_func_start G3_MultMtx43 +G3_MultMtx43: + ldr r1, _020C794C ; =0x04000400 + mov r2, #0x19 + ldr ip, _020C7950 ; =FUN_020C9BE8 + str r2, [r1, #0x0] + bx r12 + .balign 4 +_020C794C: .word 0x04000400 +_020C7950: .word FUN_020C9BE8 + + arm_func_start G3_LoadMtx43 +G3_LoadMtx43: ; 0x020C7954 + ldr r1, _020C7968 ; =0x04000400 + mov r2, #0x17 + ldr ip, _020C796C ; =FUN_020C9BE8 + str r2, [r1, #0x0] + bx r12 + .balign 4 +_020C7968: .word 0x04000400 +_020C796C: .word FUN_020C9BE8 + + arm_func_start GXi_NopClearFifo128_ +GXi_NopClearFifo128_: ; 0x020C7970 + mov r1, #0x0 + mov r2, #0x0 + mov r3, #0x0 + mov r12, #0x0 + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + bx lr + + arm_func_start G3X_SetHOffset +G3X_SetHOffset: ; 0x020C7A04 + ldr r1, _020C7A10 ; =0x04000010 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020C7A10: .word 0x04000010 + + arm_func_start G3X_GetBoxTestResult +G3X_GetBoxTestResult: ; 0x020C7A14 + ldr r2, _020C7A38 ; =0x04000600 + ldr r1, [r2, #0x0] + ands r1, r1, #0x1 + ldreq r1, [r2, #0x0] + mvnne r0, #0x0 + andeq r1, r1, #0x2 + streq r1, [r0, #0x0] + moveq r0, #0x0 + bx lr + .balign 4 +_020C7A38: .word 0x04000600 + + arm_func_start G3X_GetMtxStackLevelPJ +G3X_GetMtxStackLevelPJ: + ldr r2, _020C7A64 ; =0x04000600 + ldr r1, [r2, #0x0] + ands r1, r1, #0x4000 + ldreq r1, [r2, #0x0] + mvnne r0, #0x0 + andeq r1, r1, #0x2000 + moveq r1, r1, lsr #0xd + streq r1, [r0, #0x0] + moveq r0, #0x0 + bx lr + .balign 4 +_020C7A64: .word 0x04000600 + + arm_func_start G3X_GetMtxStackLevelPV +G3X_GetMtxStackLevelPV: + ldr r2, _020C7A90 ; =0x04000600 + ldr r1, [r2, #0x0] + ands r1, r1, #0x4000 + ldreq r1, [r2, #0x0] + mvnne r0, #0x0 + andeq r1, r1, #0x1f00 + moveq r1, r1, lsr #0x8 + streq r1, [r0, #0x0] + moveq r0, #0x0 + bx lr + .balign 4 +_020C7A90: .word 0x04000600 + + arm_func_start G3X_InitTable +G3X_InitTable: ; 0x020C7A94 + stmdb sp!, {lr} + sub sp, sp, #0xc + ldr r0, _020C7B2C ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C7AE4 + mov r2, #0x0 + str r2, [sp, #0x0] + ldr r1, _020C7B30 ; =0x04000330 + mov r3, #0x10 + str r2, [sp, #0x4] + bl MI_DmaFill32Async + ldr r0, _020C7B2C ; =0x02106814 + ldr r1, _020C7B34 ; =0x04000360 + ldr r0, [r0, #0x0] + mov r2, #0x0 + mov r3, #0x60 + bl MI_DmaFill32 + b _020C7B04 +_020C7AE4: + ldr r1, _020C7B30 ; =0x04000330 + mov r0, #0x0 + mov r2, #0x10 + bl MIi_CpuClear32 + ldr r1, _020C7B34 ; =0x04000360 + mov r0, #0x0 + mov r2, #0x60 + bl MIi_CpuClear32 +_020C7B04: + mov r2, #0x0 + ldr r0, _020C7B38 ; =0x040004D0 + mov r1, r2 +_020C7B10: + add r2, r2, #0x1 + str r1, [r0, #0x0] + cmp r2, #0x20 + blt _020C7B10 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_020C7B2C: .word 0x02106814 +_020C7B30: .word 0x04000330 +_020C7B34: .word 0x04000360 +_020C7B38: .word 0x040004D0 + + arm_func_start G3X_SetClearColor +G3X_SetClearColor: ; 0x020C7B3C + orr r0, r0, r1, lsl #0x10 + ldr r12, [sp, #0x0] + orr r3, r0, r3, lsl #0x18 + cmp r12, #0x0 + ldr r1, _020C7B64 ; =0x04000350 + orrne r3, r3, #0x8000 + ldr r0, _020C7B68 ; =0x04000354 + str r3, [r1, #0x0] + strh r2, [r0, #0x0] + bx lr + .balign 4 +_020C7B64: .word 0x04000350 +_020C7B68: .word 0x04000354 + + arm_func_start G3X_SetFogTable +G3X_SetFogTable: ; 0x020C7B6C + ldr ip, _020C7B78 ; =0x020CE2C4 + ldr r1, _020C7B7C ; =0x04000360 + bx r12 + .balign 4 +_020C7B78: .word 0x020CE2C4 +_020C7B7C: .word 0x04000360 + + arm_func_start G3X_SetEdgeColorTable +G3X_SetEdgeColorTable: ; 0x020C7B80 + ldr ip, _020C7B90 ; =MIi_CpuCopy16 + ldr r1, _020C7B94 ; =0x04000330 + mov r2, #0x10 + bx r12 + .balign 4 +_020C7B90: .word MIi_CpuCopy16 +_020C7B94: .word 0x04000330 + + arm_func_start G3X_GetVectorMtx +G3X_GetVectorMtx: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020C7BD8 ; =0x04000600 + mov r1, r0 + ldr r0, [r2, #0x0] + ands r0, r0, #0x8000000 + addne sp, sp, #0x4 + mvnne r0, #0x0 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020C7BDC ; =0x04000680 + bl MI_Copy36B +_020C7BC8: ; 0x020C7BC8 + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C7BD8: .word 0x04000600 +_020C7BDC: .word 0x04000680 + + arm_func_start G3X_GetClipMtx +G3X_GetClipMtx: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020C7C20 ; =0x04000600 + mov r1, r0 + ldr r0, [r2, #0x0] + ands r0, r0, #0x8000000 + addne sp, sp, #0x4 + mvnne r0, #0x0 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020C7C24 ; =0x04000640 + bl MI_Copy64B +_020C7C10: ; 0x020C7C10 + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C7C20: .word 0x04000600 +_020C7C24: .word 0x04000640 + + arm_func_start G3X_SetFog +G3X_SetFog: ; 0x020C7C28 + cmp r0, #0x0 + ldreq r2, _020C7C70 ; =0x04000060 + ldreq r0, _020C7C74 ; =0x0000CF7F + ldreqh r1, [r2, #0x0] + andeq r0, r1, r0 + streqh r0, [r2, #0x0] + bxeq lr + ldr r0, _020C7C78 ; =0x0400035C + ldr ip, _020C7C70 ; =0x04000060 + strh r3, [r0, #0x0] + mov r0, r2, lsl #0x8 + orr r0, r0, r1, lsl #0x6 + ldrh r3, [r12, #0x0] + orr r0, r0, #0x80 + bic r1, r3, #0x3f40 + orr r0, r1, r0 + strh r0, [r12, #0x0] + bx lr + .balign 4 +_020C7C70: .word 0x04000060 +_020C7C74: .word 0x0000CF7F +_020C7C78: .word 0x0400035C + + arm_func_start G3X_ResetMtxStack +G3X_ResetMtxStack: ; 0x020C7C7C + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r1, _020C7D18 ; =0x04000600 + ldr r0, [r1, #0x0] + orr r0, r0, #0x8000 + str r0, [r1, #0x0] + add r4, sp, #0x0 +_020C7C98: + mov r0, r4 + bl G3X_GetMtxStackLevelPV +_020C7CA0: ; 0x020C7CA0 + cmp r0, #0x0 + bne _020C7C98 + add r4, sp, #0x4 +_020C7CAC: + mov r0, r4 + bl G3X_GetMtxStackLevelPJ +_020C7CB4: ; 0x020C7CB4 + cmp r0, #0x0 + bne _020C7CAC + ldr r2, _020C7D1C ; =0x04000440 + mov r1, #0x3 + str r1, [r2, #0x0] + ldr r0, _020C7D20 ; =0x04000454 + mov r1, #0x0 + str r1, [r0, #0x0] + str r1, [r2, #0x0] + ldr r1, [sp, #0x4] + cmp r1, #0x0 + ldrne r0, _020C7D24 ; =0x04000448 + strne r1, [r0, #0x0] + ldr r0, _020C7D1C ; =0x04000440 + mov r1, #0x2 + str r1, [r0, #0x0] + ldr r2, [sp, #0x0] + ldr r1, _020C7D24 ; =0x04000448 + ldr r0, _020C7D20 ; =0x04000454 + str r2, [r1, #0x0] + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C7D18: .word 0x04000600 +_020C7D1C: .word 0x04000440 +_020C7D20: .word 0x04000454 +_020C7D24: .word 0x04000448 + + arm_func_start G3X_InitMtxStack +G3X_InitMtxStack: ; 0x020C7D28 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r1, _020C7DC8 ; =0x04000600 + ldr r0, [r1, #0x0] + orr r0, r0, #0x8000 + str r0, [r1, #0x0] + add r4, sp, #0x0 +_020C7D44: + mov r0, r4 + bl G3X_GetMtxStackLevelPV +_020C7D4C: ; 0x020C7D4C + cmp r0, #0x0 + bne _020C7D44 + add r4, sp, #0x4 +_020C7D58: + mov r0, r4 + bl G3X_GetMtxStackLevelPJ +_020C7D60: ; 0x020C7D60 + cmp r0, #0x0 + bne _020C7D58 + ldr r2, _020C7DCC ; =0x04000440 + mov r1, #0x3 + str r1, [r2, #0x0] + ldr r0, _020C7DD0 ; =0x04000454 + mov r1, #0x0 + str r1, [r0, #0x0] + str r1, [r2, #0x0] + ldr r1, [sp, #0x4] + ldr r2, _020C7DD0 ; =0x04000454 + cmp r1, #0x0 + ldrne r0, _020C7DD4 ; =0x04000448 + mov r3, #0x0 + strne r1, [r0, #0x0] + ldr r0, _020C7DCC ; =0x04000440 + str r3, [r2, #0x0] + mov r1, #0x2 + str r1, [r0, #0x0] + ldr r1, [sp, #0x0] + ldr r0, _020C7DD4 ; =0x04000448 + str r1, [r0, #0x0] + str r3, [r2, #0x0] + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C7DC8: .word 0x04000600 +_020C7DCC: .word 0x04000440 +_020C7DD0: .word 0x04000454 +_020C7DD4: .word 0x04000448 + + arm_func_start G3X_ClearFifo +G3X_ClearFifo: ; 0x020C7DD8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C7E04 ; =0x04000400 + bl GXi_NopClearFifo128_ + ldr r1, _020C7E08 ; =0x04000600 +_020C7DEC: + ldr r0, [r1, #0x0] + ands r0, r0, #0x8000000 + bne _020C7DEC + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C7E04: .word 0x04000400 +_020C7E08: .word 0x04000600 + + arm_func_start G3X_ResetMtxStack_2 +G3X_ResetMtxStack_2: ; 0x020C7E0C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020C7E7C ; =0x04000600 +_020C7E18: + ldr r0, [r2, #0x0] + ands r0, r0, #0x8000000 + bne _020C7E18 + ldr r0, [r2, #0x0] + ldr r1, _020C7E80 ; =0x04000060 + orr r0, r0, #0x8000 + str r0, [r2, #0x0] + ldrh r0, [r1, #0x0] + orr r0, r0, #0x2000 + strh r0, [r1, #0x0] + ldrh r0, [r1, #0x0] + orr r0, r0, #0x1000 + strh r0, [r1, #0x0] + bl G3X_ResetMtxStack + ldr r2, _020C7E84 ; =0x001F0080 + ldr r0, _020C7E88 ; =0x040004A4 + ldr r1, _020C7E8C ; =0x040004A8 + str r2, [r0, #0x0] + mov r2, #0x0 + ldr r0, _020C7E90 ; =0x040004AC + str r2, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C7E7C: .word 0x04000600 +_020C7E80: .word 0x04000060 +_020C7E84: .word 0x001F0080 +_020C7E88: .word 0x040004A4 +_020C7E8C: .word 0x040004A8 +_020C7E90: .word 0x040004AC + + arm_func_start G3X_Init +G3X_Init: ; 0x020C7E94 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl G3X_ClearFifo + ldr r0, _020C7FAC ; =0x04000504 + mov r1, #0x0 + str r1, [r0, #0x0] + ldr r1, _020C7FB0 ; =0x04000600 +_020C7EB0: + ldr r0, [r1, #0x0] + ands r0, r0, #0x8000000 + bne _020C7EB0 + ldr r0, _020C7FB4 ; =0x04000060 + mov r3, #0x0 + strh r3, [r0, #0x0] + ldr r2, _020C7FB8 ; =0x04000010 + str r3, [r1, #0x0] + str r3, [r2, #0x0] + ldrh r12, [r0, #0x0] + ldr r2, _020C7FBC ; =0xFFFFCFFD + ldr r3, _020C7FC0 ; =0x0000CFFB + orr r12, r12, #0x2000 + strh r12, [r0, #0x0] + ldrh r12, [r0, #0x0] + orr r12, r12, #0x1000 + strh r12, [r0, #0x0] + ldrh r12, [r0, #0x0] + and r2, r12, r2 + strh r2, [r0, #0x0] + ldrh r2, [r0, #0x0] + bic r2, r2, #0x3000 + orr r2, r2, #0x10 + strh r2, [r0, #0x0] + ldrh r2, [r0, #0x0] + and r2, r2, r3 + strh r2, [r0, #0x0] + ldr r0, [r1, #0x0] + orr r0, r0, #0x8000 + str r0, [r1, #0x0] + ldr r0, [r1, #0x0] + bic r0, r0, #0xc0000000 + orr r0, r0, #0x80000000 + str r0, [r1, #0x0] + bl G3X_InitMtxStack + ldr r0, _020C7FC4 ; =0x04000350 + mov r3, #0x0 + ldr r2, _020C7FC8 ; =0x00007FFF + ldr r1, _020C7FCC ; =0x04000354 + str r3, [r0, #0x0] + ldr r0, _020C7FD0 ; =0x04000356 + strh r2, [r1, #0x0] + ldr r1, _020C7FD4 ; =0x04000358 + strh r3, [r0, #0x0] + ldr r0, _020C7FD8 ; =0x0400035C + str r3, [r1, #0x0] + ldr r1, _020C7FDC ; =0x04000008 + strh r3, [r0, #0x0] + ldrh r0, [r1, #0x0] + bic r0, r0, #0x3 + strh r0, [r1, #0x0] + bl G3X_InitTable + ldr r2, _020C7FE0 ; =0x001F0080 + ldr r0, _020C7FE4 ; =0x040004A4 + ldr r1, _020C7FE8 ; =0x040004A8 + str r2, [r0, #0x0] + mov r2, #0x0 + ldr r0, _020C7FEC ; =0x040004AC + str r2, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C7FAC: .word 0x04000504 +_020C7FB0: .word 0x04000600 +_020C7FB4: .word 0x04000060 +_020C7FB8: .word 0x04000010 +_020C7FBC: .word 0xFFFFCFFD +_020C7FC0: .word 0x0000CFFB +_020C7FC4: .word 0x04000350 +_020C7FC8: .word 0x00007FFF +_020C7FCC: .word 0x04000354 +_020C7FD0: .word 0x04000356 +_020C7FD4: .word 0x04000358 +_020C7FD8: .word 0x0400035C +_020C7FDC: .word 0x04000008 +_020C7FE0: .word 0x001F0080 +_020C7FE4: .word 0x040004A4 +_020C7FE8: .word 0x040004A8 +_020C7FEC: .word 0x040004AC + + arm_func_start G3_RotZ +G3_RotZ: ; 0x020C7FF0 + ldr r3, _020C8028 ; =0x04000468 + mov r2, #0x0 + str r1, [r3, #0x0] + str r0, [r3, #0x0] + str r2, [r3, #0x0] + rsb r0, r0, #0x0 + str r0, [r3, #0x0] + str r1, [r3, #0x0] + str r2, [r3, #0x0] + str r2, [r3, #0x0] + str r2, [r3, #0x0] + mov r0, #0x1000 + str r0, [r3, #0x0] + bx lr + .balign 4 +_020C8028: .word 0x04000468 + + arm_func_start G3_RotY +G3_RotY: ; 0x020C802C + ldr ip, _020C8064 ; =0x04000468 + mov r3, #0x0 + str r1, [r12, #0x0] + str r3, [r12, #0x0] + rsb r2, r0, #0x0 + str r2, [r12, #0x0] + str r3, [r12, #0x0] + mov r2, #0x1000 + str r2, [r12, #0x0] + str r3, [r12, #0x0] + str r0, [r12, #0x0] + str r3, [r12, #0x0] + str r1, [r12, #0x0] + bx lr + .balign 4 +_020C8064: .word 0x04000468 + + arm_func_start G3_RotX +G3_RotX: ; 0x020C8068 + ldr r3, _020C80A0 ; =0x04000468 + mov r2, #0x1000 + str r2, [r3, #0x0] + mov r2, #0x0 + str r2, [r3, #0x0] + str r2, [r3, #0x0] + str r2, [r3, #0x0] + str r1, [r3, #0x0] + str r0, [r3, #0x0] + str r2, [r3, #0x0] + rsb r0, r0, #0x0 + str r0, [r3, #0x0] + str r1, [r3, #0x0] + bx lr + .balign 4 +_020C80A0: .word 0x04000468 + + arm_func_start G3i_LookAt_ +G3i_LookAt_: ; 0x020C80A4 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x24 + mov r9, r0 + ldr r6, [r9, #0x0] + ldr r5, [r2, #0x0] + add r0, sp, #0x0 + sub r5, r6, r5 + str r5, [sp, #0x0] + ldr r7, [r9, #0x4] + ldr r6, [r2, #0x4] + mov r5, r1 + sub r1, r7, r6 + str r1, [sp, #0x4] + ldr r6, [r9, #0x8] + ldr r2, [r2, #0x8] + mov r1, r0 + sub r2, r6, r2 + mov r8, r3 + str r2, [sp, #0x8] + ldr r7, [sp, #0x40] + bl VEC_Normalize + add r1, sp, #0x0 + add r2, sp, #0xc + mov r0, r5 + bl VEC_CrossProduct + add r0, sp, #0xc + mov r1, r0 + bl VEC_Normalize +_020C8114: ; 0x020C8114 + add r0, sp, #0x0 + add r1, sp, #0xc + add r2, sp, #0x18 + bl VEC_CrossProduct +_020C8124: ; 0x020C8124 + cmp r8, #0x0 + beq _020C8184 + ldr r0, _020C8234 ; =0x04000440 + mov r1, #0x2 + str r1, [r0, #0x0] + ldr r0, [sp, #0xc] + ldr r4, _020C8238 ; =0x0400045C + str r0, [r4, #0x0] + ldr r0, [sp, #0x18] + str r0, [r4, #0x0] + ldr r0, [sp, #0x0] + str r0, [r4, #0x0] + ldr r0, [sp, #0x10] + str r0, [r4, #0x0] + ldr r0, [sp, #0x1c] + str r0, [r4, #0x0] + ldr r0, [sp, #0x4] + str r0, [r4, #0x0] + ldr r0, [sp, #0x14] + str r0, [r4, #0x0] + ldr r0, [sp, #0x20] + str r0, [r4, #0x0] + ldr r0, [sp, #0x8] + str r0, [r4, #0x0] +_020C8184: + add r1, sp, #0xc + mov r0, r9 + bl VEC_DotProduct + rsb r6, r0, #0x0 + add r1, sp, #0x18 + mov r0, r9 + bl VEC_DotProduct + rsb r5, r0, #0x0 + add r1, sp, #0x0 + mov r0, r9 + bl VEC_DotProduct +_020C81B0: ; 0x020C81B0 + cmp r8, #0x0 + strne r6, [r4, #0x0] + rsb r0, r0, #0x0 + strne r5, [r4, #0x0] + strne r0, [r4, #0x0] + cmp r7, #0x0 + addeq sp, sp, #0x24 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + ldr r1, [sp, #0xc] + str r1, [r7, #0x0] + ldr r1, [sp, #0x18] + str r1, [r7, #0x4] + ldr r1, [sp, #0x0] + str r1, [r7, #0x8] + ldr r1, [sp, #0x10] + str r1, [r7, #0xc] + ldr r1, [sp, #0x1c] + str r1, [r7, #0x10] + ldr r1, [sp, #0x4] + str r1, [r7, #0x14] + ldr r1, [sp, #0x14] + str r1, [r7, #0x18] + ldr r1, [sp, #0x20] + str r1, [r7, #0x1c] + ldr r1, [sp, #0x8] + str r1, [r7, #0x20] + str r6, [r7, #0x24] + str r5, [r7, #0x28] + str r0, [r7, #0x2c] + add sp, sp, #0x24 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020C8234: .word 0x04000440 +_020C8238: .word 0x0400045C + + arm_func_start G3i_OrthoW_ +G3i_OrthoW_: ; 0x020C823C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x34 + str r2, [sp, #0x8] + str r0, [sp, #0x0] + ldr r0, [sp, #0x8] + mov r2, r3 + ldr r7, [sp, #0x64] + sub r0, r2, r0 + str r3, [sp, #0xc] + str r1, [sp, #0x4] + ldr r8, [sp, #0x60] + ldr r6, [sp, #0x68] + bl FX_InvAsync +_020C8270: ; 0x020C8270 + cmp r7, #0x0 + ldrne r0, _020C8528 ; =0x04000440 + movne r1, #0x0 + ldrne r4, _020C852C ; =0x04000458 + strne r1, [r0, #0x0] + cmp r6, #0x0 + beq _020C82B8 + mov r0, #0x0 + str r0, [r6, #0x4] + str r0, [r6, #0x8] + str r0, [r6, #0xc] + str r0, [r6, #0x10] + str r0, [r6, #0x18] + str r0, [r6, #0x1c] + str r0, [r6, #0x20] + str r0, [r6, #0x24] + str r0, [r6, #0x2c] + str r8, [r6, #0x3c] +_020C82B8: + bl FX_GetDivResultFx64c + mov r5, r0 + str r1, [sp, #0x14] + ldr sb, _020C8530 ; =0x04000290 + mov r3, #0x0 + ldr r1, [sp, #0x0] + ldr r0, [sp, #0x4] + str r3, [r9, #0x0] + mov r2, #0x1000 + sub r1, r1, r0 + ldr r0, _020C8534 ; =0x04000298 + str r2, [r9, #0x4] + str r1, [r0, #0x0] + cmp r8, #0x1000 + str r3, [r0, #0x4] + beq _020C8318 + mov r9, r8, asr #0x1f + umull r0, r1, r5, r8 + mla r1, r5, r9, r1 + ldr r5, [sp, #0x14] + mla r1, r5, r8, r1 + bl _ll_sdiv + mov r5, r0 + str r1, [sp, #0x14] +_020C8318: + ldr r0, [sp, #0x14] + mov r2, r5, lsl #0xd + mov r1, r0, lsl #0xd + mov r0, #0x80000000 + adds r0, r2, r0 + orr r1, r1, r5, lsr #0x13 + adc r1, r1, #0x0 + cmp r7, #0x0 + mov r0, #0x0 + strne r1, [r4, #0x0] + strne r0, [r4, #0x0] + strne r0, [r4, #0x0] + strne r0, [r4, #0x0] + strne r0, [r4, #0x0] + cmp r6, #0x0 + strne r1, [r6, #0x0] + bl FX_GetDivResultFx64c + mov r11, r0 + str r1, [sp, #0x2c] + ldr r0, _020C8530 ; =0x04000290 + mov r3, #0x0 + mov r2, #0x1000 + str r3, [r0, #0x0] + str r2, [r0, #0x4] + ldr r9, [sp, #0x58] + ldr r1, [sp, #0x5c] + ldr r0, _020C8534 ; =0x04000298 + sub r1, r9, r1 + str r1, [r0, #0x0] + cmp r8, #0x1000 + str r3, [r0, #0x4] + beq _020C83B8 + mov r9, r8, asr #0x1f + umull r0, r1, r11, r8 + mla r1, r11, r9, r1 + ldr r9, [sp, #0x2c] + mla r1, r9, r8, r1 + bl _ll_sdiv + mov r11, r0 + str r1, [sp, #0x2c] +_020C83B8: + ldr r0, [sp, #0x2c] + mov r3, r11, lsl #0xd + mov r2, r0, lsl #0xd + mov r0, #0x80000000 + orr r2, r2, r11, lsr #0x13 + adds r0, r3, r0 + adc r0, r2, #0x0 + cmp r7, #0x0 + mov r1, #0x0 + strne r0, [r4, #0x0] + strne r1, [r4, #0x0] + strne r1, [r4, #0x0] + strne r1, [r4, #0x0] + strne r1, [r4, #0x0] + cmp r6, #0x0 + strne r0, [r6, #0x14] + bl FX_GetDivResultFx64c + cmp r8, #0x1000 + beq _020C8428 + mov r9, r8, asr #0x1f + mov r2, #0x1000 + mov r3, #0x0 + umull r12, r10, r0, r8 + mla r10, r0, r9, r10 + mov r0, r12 + mla r10, r1, r8, r10 + mov r1, r10 + bl _ll_sdiv +_020C8428: + mov r9, r1, lsl #0xd + mov r10, r0, lsl #0xd + mov r2, #0x80000000 + orr r9, r9, r0, lsr #0x13 + adds r2, r10, r2 + adc r2, r9, #0x0 + cmp r7, #0x0 + mov r3, #0x0 + strne r2, [r4, #0x0] + strne r3, [r4, #0x0] + cmp r6, #0x0 + strne r2, [r6, #0x28] + ldr r3, [sp, #0xc] + ldr r2, [sp, #0x8] + add r9, r3, r2 + rsb lr, r9, #0x0 + ldr r3, [sp, #0x0] + ldr r2, [sp, #0x4] + ldr r9, [sp, #0x5c] + add r2, r3, r2 + ldr r3, [sp, #0x58] + rsb r12, r2, #0x0 + add r3, r9, r3 + mov r9, r12, asr #0x1f + str r9, [sp, #0x20] + mov r9, r3, asr #0x1f + str r9, [sp, #0x24] + umull r10, r9, r5, lr + mov r2, lr, asr #0x1f + str r2, [sp, #0x1c] + str r10, [sp, #0x18] + ldr r10, [sp, #0x1c] + mov r2, #0x80000000 + mla r9, r5, r10, r9 + ldr r5, [sp, #0x14] + mla r9, r5, lr, r9 + ldr r5, [sp, #0x18] + adds r5, r5, r2 + adc r10, r9, #0x0 + ldr r5, [sp, #0x20] + umull lr, r9, r11, r12 + mla r9, r11, r5, r9 + ldr r5, [sp, #0x2c] + mla r9, r5, r12, r9 + adds r5, lr, r2 + adc r5, r9, #0x0 + umull r11, r9, r0, r3 + adds r2, r11, r2 + ldr r2, [sp, #0x24] + mla r9, r0, r2, r9 + mla r9, r1, r3, r9 + adc r0, r9, #0x0 + cmp r7, #0x0 + strne r10, [r4, #0x0] + strne r5, [r4, #0x0] + strne r0, [r4, #0x0] + strne r8, [r4, #0x0] + cmp r6, #0x0 + strne r10, [r6, #0x30] + strne r5, [r6, #0x34] + strne r0, [r6, #0x38] + add sp, sp, #0x34 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020C8528: .word 0x04000440 +_020C852C: .word 0x04000458 +_020C8530: .word 0x04000290 +_020C8534: .word 0x04000298 + + arm_func_start G3i_PerspectiveW_ +G3i_PerspectiveW_: ; 0x020C8538 + stmdb sp!, {r4-r10,lr} + mov r5, r0 + mov r0, r1 + mov r1, r5 + ldr r6, [sp, #0x24] + mov r9, r2 + mov r8, r3 + ldr r5, [sp, #0x2c] + bl FX_Div + mov r7, r0 + cmp r6, #0x1000 + mulne r1, r7, r6 + movne r0, r1, asr #0xb + addne r0, r1, r0, lsr #0x14 + movne r7, r0, asr #0xc + ldr r0, [sp, #0x28] + ldr r2, _020C8718 ; =0x04000290 + cmp r0, #0x0 + mov r3, #0x0 + str r3, [r2, #0x0] + ldr r1, _020C871C ; =0x04000298 + str r7, [r2, #0x4] + str r9, [r1, #0x0] + ldrne r0, _020C8720 ; =0x04000440 + str r3, [r1, #0x4] + ldrne r4, _020C8724 ; =0x04000458 + strne r3, [r0, #0x0] + cmp r5, #0x0 + beq _020C85E4 + mov r1, #0x0 + str r1, [r5, #0x4] + str r1, [r5, #0x8] + str r1, [r5, #0xc] + str r1, [r5, #0x10] + str r1, [r5, #0x18] + str r1, [r5, #0x1c] + str r1, [r5, #0x20] + str r1, [r5, #0x24] + rsb r0, r6, #0x0 + str r0, [r5, #0x2c] + str r1, [r5, #0x30] + str r1, [r5, #0x34] + str r1, [r5, #0x3c] +_020C85E4: + bl FX_GetDivResult + ldr r3, [sp, #0x20] + ldr r1, [sp, #0x28] + ldr sb, _020C8718 ; =0x04000290 + mov r12, #0x0 + str r12, [r9, #0x0] + mov r10, #0x1000 + ldr r2, _020C871C ; =0x04000298 + str r10, [r9, #0x4] + sub r3, r8, r3 + str r3, [r2, #0x0] + str r12, [r2, #0x4] + cmp r1, #0x0 + beq _020C8644 + str r0, [r4, #0x0] + str r12, [r4, #0x0] + str r12, [r4, #0x0] + str r12, [r4, #0x0] + str r12, [r4, #0x0] + str r7, [r4, #0x0] + str r12, [r4, #0x0] + str r12, [r4, #0x0] + str r12, [r4, #0x0] + str r12, [r4, #0x0] +_020C8644: + cmp r5, #0x0 + strne r0, [r5, #0x0] + strne r7, [r5, #0x14] + bl FX_GetDivResultFx64c + cmp r6, #0x1000 + beq _020C8680 + mov r2, r6, asr #0x1f + umull r7, r3, r0, r6 + mla r3, r0, r2, r3 + mla r3, r1, r6, r3 + mov r0, r7 + mov r1, r3 + mov r2, #0x1000 + mov r3, #0x0 + bl _ll_sdiv +_020C8680: + ldr r3, [sp, #0x20] + mov r10, r8, lsl #0x1 + add r12, r3, r8 + mov r2, r12, asr #0x1f + umull r7, lr, r0, r12 + mla lr, r0, r2, lr + mov r9, #0x80000000 + smull r3, r2, r10, r3 + mla lr, r1, r12, lr + adds r7, r7, r9 + mov r8, #0x800 + adc r7, lr, #0x0 + adds r3, r3, r8 + adc r2, r2, #0x0 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + umull r10, r8, r0, r3 + mov r2, r3, asr #0x1f + adds r9, r10, r9 + mla r8, r0, r2, r8 + mla r8, r1, r3, r8 + ldr r0, [sp, #0x28] + adc r2, r8, #0x0 + cmp r0, #0x0 + mov r0, #0x0 + beq _020C8704 + str r7, [r4, #0x0] + rsb r1, r6, #0x0 + str r1, [r4, #0x0] + str r0, [r4, #0x0] + str r0, [r4, #0x0] + str r2, [r4, #0x0] + str r0, [r4, #0x0] +_020C8704: + cmp r5, #0x0 + strne r7, [r5, #0x28] + strne r2, [r5, #0x38] + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020C8718: .word 0x04000290 +_020C871C: .word 0x04000298 +_020C8720: .word 0x04000440 +_020C8724: .word 0x04000458 + + arm_func_start GXS_EndLoadOBJExtPltt +GXS_EndLoadOBJExtPltt: ; 0x020C8728 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C876C ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C8748 + bl MI_WaitDma +_020C8748: + ldr r0, _020C8770 ; =0x021D33F8 + ldr r0, [r0, #0x0] + bl GX_SetBankForSubOBJExtPltt + ldr r0, _020C8770 ; =0x021D33F8 + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C876C: .word 0x02106814 +_020C8770: .word 0x021D33F8 + + arm_func_start GXS_LoadOBJExtPltt +GXS_LoadOBJExtPltt: ; 0x020C8774 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + ldr r3, _020C87E0 ; =0x02106814 + mvn r12, #0x0 + ldr lr, [r3, #0x0] + mov r5, r0 + mov r4, r1 + mov r3, r2 + cmp lr, r12 + beq _020C87C8 + ldr r2, _020C87E4 ; =0x068A0000 + mov r12, #0x0 + str r12, [sp, #0x0] + mov r0, lr + mov r1, r5 + add r2, r4, r2 + str r12, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr +_020C87C8: + ldr r1, _020C87E4 ; =0x068A0000 + add r1, r4, r1 + bl MIi_CpuCopy32 + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020C87E0: .word 0x02106814 +_020C87E4: .word 0x068A0000 + + arm_func_start GXS_BeginLoadOBJExtPltt +GXS_BeginLoadOBJExtPltt: ; 0x020C87E8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl GX_ResetBankForSubOBJ + ldr r1, _020C8808 ; =0x021D33F8 + str r0, [r1, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C8808: .word 0x021D33F8 + + arm_func_start GXS_EndLoadBGExtPltt +GXS_EndLoadBGExtPltt: ; 0x020C880C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C8850 ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C882C + bl MI_WaitDma +_020C882C: + ldr r0, _020C8854 ; =0x021D33E0 + ldr r0, [r0, #0x0] + bl GX_SetBankForSubBGExtPltt + ldr r0, _020C8854 ; =0x021D33E0 + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C8850: .word 0x02106814 +_020C8854: .word 0x021D33E0 + + arm_func_start GXS_LoadBGExtPltt +GXS_LoadBGExtPltt: ; 0x020C8858 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + ldr r3, _020C88C4 ; =0x02106814 + mvn r12, #0x0 + ldr lr, [r3, #0x0] + mov r5, r0 + mov r4, r1 + mov r3, r2 + cmp lr, r12 + beq _020C88AC + ldr r2, _020C88C8 ; =0x06898000 + mov r12, #0x0 + str r12, [sp, #0x0] + mov r0, lr + mov r1, r5 + add r2, r4, r2 + str r12, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr +_020C88AC: + ldr r1, _020C88C8 ; =0x06898000 + add r1, r4, r1 + bl MIi_CpuCopy32 + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020C88C4: .word 0x02106814 +_020C88C8: .word 0x06898000 + + arm_func_start GXS_BeginLoadBGExtPltt +GXS_BeginLoadBGExtPltt: ; 0x020C88CC + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FUN_020C6034 + ldr r1, _020C88EC ; =0x021D33E0 + str r0, [r1, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C88EC: .word 0x021D33E0 + + arm_func_start GX_EndLoadOBJExtPltt +GX_EndLoadOBJExtPltt: ; 0x020C88F0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C893C ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C8910 + bl MI_WaitDma +_020C8910: + ldr r0, _020C8940 ; =0x021D33E8 + ldr r0, [r0, #0x0] + bl GX_SetBankForOBJExtPltt + ldr r1, _020C8940 ; =0x021D33E8 + mov r2, #0x0 + ldr r0, _020C8944 ; =0x021D33E4 + str r2, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C893C: .word 0x02106814 +_020C8940: .word 0x021D33E8 +_020C8944: .word 0x021D33E4 + + arm_func_start GX_LoadOBJExtPltt +GX_LoadOBJExtPltt: ; 0x020C8948 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + ldr ip, _020C89B4 ; =0x021D33E4 + ldr r3, _020C89B8 ; =0x02106814 + ldr r4, [r12, #0x0] + ldr lr, [r3, #0x0] + mvn r12, #0x0 + mov r5, r0 + mov r3, r2 + cmp lr, r12 + add r4, r4, r1 + beq _020C89A0 + mov r12, #0x0 + str r12, [sp, #0x0] + mov r0, lr + mov r1, r5 + mov r2, r4 + str r12, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr +_020C89A0: + mov r1, r4 + bl MIi_CpuCopy32 + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020C89B4: .word 0x021D33E4 +_020C89B8: .word 0x02106814 + + arm_func_start GX_BeginLoadOBJExtPltt +GX_BeginLoadOBJExtPltt: ; 0x020C89BC + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl GX_ResetBankForOBJExtPltt + ldr r1, _020C8A1C ; =0x021D33E8 + cmp r0, #0x0 + str r0, [r1, #0x0] + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + cmp r0, #0x20 + beq _020C8A04 + cmp r0, #0x40 + ldreq r1, _020C8A20 ; =0x06894000 + ldreq r0, _020C8A24 ; =0x021D33E4 + add sp, sp, #0x4 + streq r1, [r0, #0x0] + ldmia sp!, {lr} + bx lr +_020C8A04: + ldr r1, _020C8A28 ; =0x06890000 + ldr r0, _020C8A24 ; =0x021D33E4 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C8A1C: .word 0x021D33E8 +_020C8A20: .word 0x06894000 +_020C8A24: .word 0x021D33E4 +_020C8A28: .word 0x06890000 + + arm_func_start GX_EndLoadBGExtPltt +GX_EndLoadBGExtPltt: ; 0x020C8A2C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C8A80 ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C8A4C + bl MI_WaitDma +_020C8A4C: + ldr r0, _020C8A84 ; =0x021D33F4 + ldr r0, [r0, #0x0] + bl GX_SetBankForBGExtPltt + ldr r2, _020C8A84 ; =0x021D33F4 + mov r3, #0x0 + ldr r1, _020C8A88 ; =0x021D33F0 + ldr r0, _020C8A8C ; =0x021D33EC + str r3, [r2, #0x0] + str r3, [r1, #0x0] + str r3, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C8A80: .word 0x02106814 +_020C8A84: .word 0x021D33F4 +_020C8A88: .word 0x021D33F0 +_020C8A8C: .word 0x021D33EC + + arm_func_start GX_LoadBGExtPltt +GX_LoadBGExtPltt: ; 0x020C8A90 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + ldr lr, _020C8B04 ; =0x021D33F0 + ldr ip, _020C8B08 ; =0x021D33EC + ldr r3, _020C8B0C ; =0x02106814 + ldr lr, [lr, #0x0] + ldr r4, [r12, #0x0] + add r5, lr, r1 + ldr lr, [r3, #0x0] + mvn r12, #0x0 + mov r1, r0 + mov r3, r2 + cmp lr, r12 + sub r4, r5, r4 + beq _020C8AF0 + mov r12, #0x0 + str r12, [sp, #0x0] + mov r0, lr + mov r2, r4 + str r12, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr +_020C8AF0: + mov r1, r4 + bl MIi_CpuCopy32 + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020C8B04: .word 0x021D33F0 +_020C8B08: .word 0x021D33EC +_020C8B0C: .word 0x02106814 + + arm_func_start GX_BeginLoadBGExtPltt +GX_BeginLoadBGExtPltt: ; 0x020C8B10 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl GX_ResetBankForBGExtPltt + ldr r1, _020C8BFC ; =0x021D33F4 + cmp r0, #0x20 + str r0, [r1, #0x0] + bgt _020C8B60 + cmp r0, #0x20 + bge _020C8BD8 + cmp r0, #0x0 + bgt _020C8B4C + add sp, sp, #0x4 + cmp r0, #0x0 + ldmia sp!, {lr} + bx lr +_020C8B4C: + cmp r0, #0x10 + beq _020C8B90 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020C8B60: + cmp r0, #0x40 + bgt _020C8B7C + cmp r0, #0x40 + beq _020C8BB4 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020C8B7C: + cmp r0, #0x60 + beq _020C8BD8 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020C8B90: + ldr r3, _020C8C00 ; =0x06880000 + ldr r1, _020C8C04 ; =0x021D33F0 + ldr r0, _020C8C08 ; =0x021D33EC + mov r2, #0x0 + str r3, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020C8BB4: + ldr r3, _020C8C0C ; =0x06894000 + ldr r1, _020C8C04 ; =0x021D33F0 + ldr r0, _020C8C08 ; =0x021D33EC + mov r2, #0x4000 + str r3, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020C8BD8: + ldr r3, _020C8C10 ; =0x06890000 + ldr r1, _020C8C04 ; =0x021D33F0 + ldr r0, _020C8C08 ; =0x021D33EC + mov r2, #0x0 + str r3, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C8BFC: .word 0x021D33F4 +_020C8C00: .word 0x06880000 +_020C8C04: .word 0x021D33F0 +_020C8C08: .word 0x021D33EC +_020C8C0C: .word 0x06894000 +_020C8C10: .word 0x06890000 + + arm_func_start GXS_LoadBG3Char_2 +GXS_LoadBG3Char_2: ; 0x020C8C14 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2S_GetBG3CharPtr + ldr r1, _020C8C78 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8C60 + cmp r4, #0x30 + bls _020C8C60 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy32 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8C60: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8C78: .word 0x02106814 + + arm_func_start GX_LoadBG3Char_2 +GX_LoadBG3Char_2: ; 0x020C8C7C + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2_GetBG3CharPtr + ldr r1, _020C8CE0 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8CC8 + cmp r4, #0x30 + bls _020C8CC8 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy32 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8CC8: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8CE0: .word 0x02106814 + + arm_func_start GXS_LoadBG2Char_2 +GXS_LoadBG2Char_2: ; 0x020C8CE4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2S_GetBG2CharPtr + ldr r1, _020C8D48 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8D30 + cmp r4, #0x30 + bls _020C8D30 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy32 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8D30: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8D48: .word 0x02106814 + + arm_func_start GX_LoadBG2Char_2 +GX_LoadBG2Char_2: ; 0x020C8D4C + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2_GetBG2CharPtr + ldr r1, _020C8DB0 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8D98 + cmp r4, #0x30 + bls _020C8D98 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy32 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8D98: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8DB0: .word 0x02106814 + + arm_func_start GXS_LoadBG1Char_2 +GXS_LoadBG1Char_2: ; 0x020C8DB4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2S_GetBG1CharPtr + ldr r1, _020C8E18 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8E00 + cmp r4, #0x30 + bls _020C8E00 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy32 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8E00: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8E18: .word 0x02106814 + + arm_func_start GX_LoadBG1Char_2 +GX_LoadBG1Char_2: ; 0x020C8E1C + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2_GetBG1CharPtr + ldr r1, _020C8E80 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8E68 + cmp r4, #0x30 + bls _020C8E68 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy32 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8E68: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8E80: .word 0x02106814 + + arm_func_start GXS_LoadBG0Char_2 +GXS_LoadBG0Char_2: ; 0x020C8E84 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2S_GetBG0CharPtr + ldr r1, _020C8EE8 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8ED0 + cmp r4, #0x30 + bls _020C8ED0 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy32 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8ED0: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8EE8: .word 0x02106814 + + arm_func_start GX_LoadBG0Char_2 +GX_LoadBG0Char_2: ; 0x020C8EEC + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2_GetBG0CharPtr + ldr r1, _020C8F50 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8F38 + cmp r4, #0x30 + bls _020C8F38 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy32 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8F38: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8F50: .word 0x02106814 + + arm_func_start GXS_LoadBG3Scr_3 +GXS_LoadBG3Scr_3: ; 0x020C8F54 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2S_GetBG3ScrPtr + ldr r1, _020C8FB8 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8FA0 + cmp r4, #0x1c + bls _020C8FA0 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy16 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8FA0: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy16 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8FB8: .word 0x02106814 + + arm_func_start GX_LoadBG3Scr_3 +GX_LoadBG3Scr_3: ; 0x020C8FBC + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2_GetBG3ScrPtr + ldr r1, _020C9020 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C9008 + cmp r4, #0x1c + bls _020C9008 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy16 + ldmia sp!, {r4-r6,lr} + bx lr +_020C9008: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy16 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C9020: .word 0x02106814 + + arm_func_start GXS_LoadBG2Scr_3 +GXS_LoadBG2Scr_3: ; 0x020C9024 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2S_GetBG2ScrPtr + ldr r1, _020C9088 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C9070 + cmp r4, #0x1c + bls _020C9070 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy16 + ldmia sp!, {r4-r6,lr} + bx lr +_020C9070: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy16 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C9088: .word 0x02106814 + + arm_func_start GX_LoadBG2Scr_3 +GX_LoadBG2Scr_3: ; 0x020C908C + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2_GetBG2ScrPtr + ldr r1, _020C90F0 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C90D8 + cmp r4, #0x1c + bls _020C90D8 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy16 + ldmia sp!, {r4-r6,lr} + bx lr +_020C90D8: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy16 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C90F0: .word 0x02106814 + + arm_func_start GXS_LoadBG1Scr_2 +GXS_LoadBG1Scr_2: ; 0x020C90F4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2S_GetBG1ScrPtr + ldr r1, _020C9158 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C9140 + cmp r4, #0x1c + bls _020C9140 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy16 + ldmia sp!, {r4-r6,lr} + bx lr +_020C9140: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy16 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C9158: .word 0x02106814 + + arm_func_start GX_LoadBG1Scr_2 +GX_LoadBG1Scr_2: ; 0x020C915C + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2_GetBG1ScrPtr + ldr r1, _020C91C0 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C91A8 + cmp r4, #0x1c + bls _020C91A8 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy16 + ldmia sp!, {r4-r6,lr} + bx lr +_020C91A8: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy16 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C91C0: .word 0x02106814 + + arm_func_start GXS_LoadBG0Scr_2 +GXS_LoadBG0Scr_2: ; 0x020C91C4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2S_GetBG0ScrPtr + ldr r1, _020C9228 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C9210 + cmp r4, #0x1c + bls _020C9210 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy16 + ldmia sp!, {r4-r6,lr} + bx lr +_020C9210: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy16 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C9228: .word 0x02106814 + + arm_func_start GX_LoadBG0Scr_2 +GX_LoadBG0Scr_2: ; 0x020C922C + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2_GetBG0ScrPtr + ldr r1, _020C9290 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C9278 + cmp r4, #0x1c + bls _020C9278 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy16 + ldmia sp!, {r4-r6,lr} + bx lr +_020C9278: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy16 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C9290: .word 0x02106814 + + arm_func_start GXS_LoadOBJ2 +GXS_LoadOBJ2: ; 0x020C9294 + stmdb sp!, {r4,lr} + ldr r3, _020C92F0 ; =0x02106814 + mov r4, r0 + ldr r0, [r3, #0x0] + mvn r12, #0x0 + mov lr, r1 + mov r3, r2 + cmp r0, r12 + mov r12, #0x6600000 + beq _020C92D8 + cmp r3, #0x30 + bls _020C92D8 + mov r1, r4 + add r2, r12, lr + bl MI_DmaCopy32 + ldmia sp!, {r4,lr} + bx lr +_020C92D8: + mov r0, r4 + mov r2, r3 + add r1, r12, lr + bl MIi_CpuCopy32 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C92F0: .word 0x02106814 + + arm_func_start GX_LoadOBJ2 +GX_LoadOBJ2: ; 0x020C92F4 + stmdb sp!, {r4,lr} + ldr r3, _020C9350 ; =0x02106814 + mov r4, r0 + ldr r0, [r3, #0x0] + mvn r12, #0x0 + mov lr, r1 + mov r3, r2 + cmp r0, r12 + mov r12, #0x6400000 + beq _020C9338 + cmp r3, #0x30 + bls _020C9338 + mov r1, r4 + add r2, r12, lr + bl MI_DmaCopy32 + ldmia sp!, {r4,lr} + bx lr +_020C9338: + mov r0, r4 + mov r2, r3 + add r1, r12, lr + bl MIi_CpuCopy32 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C9350: .word 0x02106814 + + arm_func_start GXS_LoadOAM_2 +GXS_LoadOAM_2: ; 0x020C9354 + stmdb sp!, {r4,lr} + ldr r3, _020C93B4 ; =0x02106814 + mov r4, r0 + ldr r0, [r3, #0x0] + mvn r12, #0x0 + mov lr, r1 + mov r3, r2 + cmp r0, r12 + beq _020C9398 + cmp r3, #0x30 + bls _020C9398 + ldr r2, _020C93B8 ; =0x07000400 + mov r1, r4 + add r2, lr, r2 + bl MI_DmaCopy32 + ldmia sp!, {r4,lr} + bx lr +_020C9398: + ldr r1, _020C93B8 ; =0x07000400 + mov r0, r4 + mov r2, r3 + add r1, lr, r1 + bl MIi_CpuCopy32 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C93B4: .word 0x02106814 +_020C93B8: .word 0x07000400 + + arm_func_start GX_LoadOAM_2 +GX_LoadOAM_2: ; 0x020C93BC + stmdb sp!, {r4,lr} + ldr r3, _020C9414 ; =0x02106814 + mov r4, r0 + ldr r0, [r3, #0x0] + mvn r12, #0x0 + mov lr, r1 + mov r3, r2 + cmp r0, r12 + beq _020C93FC + cmp r3, #0x30 + bls _020C93FC + mov r1, r4 + add r2, lr, #0x7000000 + bl MI_DmaCopy32 + ldmia sp!, {r4,lr} + bx lr +_020C93FC: + mov r0, r4 + mov r2, r3 + add r1, lr, #0x7000000 + bl MIi_CpuCopy32 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C9414: .word 0x02106814 + + arm_func_start GXS_LoadOBJPltt_2 +GXS_LoadOBJPltt_2: ; 0x020C9418 + stmdb sp!, {r4,lr} + ldr r3, _020C9478 ; =0x02106814 + mov r4, r0 + ldr r0, [r3, #0x0] + mvn r12, #0x0 + mov lr, r1 + mov r3, r2 + cmp r0, r12 + beq _020C945C + cmp r3, #0x1c + bls _020C945C + ldr r2, _020C947C ; =0x05000600 + mov r1, r4 + add r2, lr, r2 + bl MI_DmaCopy16 + ldmia sp!, {r4,lr} + bx lr +_020C945C: + ldr r1, _020C947C ; =0x05000600 + mov r0, r4 + mov r2, r3 + add r1, lr, r1 + bl MIi_CpuCopy16 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C9478: .word 0x02106814 +_020C947C: .word 0x05000600 + + arm_func_start GX_LoadOBJPltt_2 +GX_LoadOBJPltt_2: ; 0x020C9480 + stmdb sp!, {r4,lr} + ldr r3, _020C94E0 ; =0x02106814 + mov r4, r0 + ldr r0, [r3, #0x0] + mvn r12, #0x0 + mov lr, r1 + mov r3, r2 + cmp r0, r12 + beq _020C94C4 + cmp r3, #0x1c + bls _020C94C4 + ldr r2, _020C94E4 ; =0x05000200 + mov r1, r4 + add r2, lr, r2 + bl MI_DmaCopy16 + ldmia sp!, {r4,lr} + bx lr +_020C94C4: + ldr r1, _020C94E4 ; =0x05000200 + mov r0, r4 + mov r2, r3 + add r1, lr, r1 + bl MIi_CpuCopy16 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C94E0: .word 0x02106814 +_020C94E4: .word 0x05000200 + + arm_func_start GXS_LoadBGPltt_2 +GXS_LoadBGPltt_2: ; 0x020C94E8 + stmdb sp!, {r4,lr} + ldr r3, _020C9548 ; =0x02106814 + mov r4, r0 + ldr r0, [r3, #0x0] + mvn r12, #0x0 + mov lr, r1 + mov r3, r2 + cmp r0, r12 + beq _020C952C + cmp r3, #0x1c + bls _020C952C + ldr r2, _020C954C ; =0x05000400 + mov r1, r4 + add r2, lr, r2 + bl MI_DmaCopy16 + ldmia sp!, {r4,lr} + bx lr +_020C952C: + ldr r1, _020C954C ; =0x05000400 + mov r0, r4 + mov r2, r3 + add r1, lr, r1 + bl MIi_CpuCopy16 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C9548: .word 0x02106814 +_020C954C: .word 0x05000400 + + arm_func_start GX_LoadBGPltt_2 +GX_LoadBGPltt_2: ; 0x020C9550 + stmdb sp!, {r4,lr} + ldr r3, _020C95A8 ; =0x02106814 + mov r4, r0 + ldr r0, [r3, #0x0] + mvn r12, #0x0 + mov lr, r1 + mov r3, r2 + cmp r0, r12 + beq _020C9590 + cmp r3, #0x1c + bls _020C9590 + mov r1, r4 + add r2, lr, #0x5000000 + bl MI_DmaCopy16 + ldmia sp!, {r4,lr} + bx lr +_020C9590: + mov r0, r4 + mov r2, r3 + add r1, lr, #0x5000000 + bl MIi_CpuCopy16 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C95A8: .word 0x02106814 + + arm_func_start GX_EndLoadClearImage +GX_EndLoadClearImage: ; 0x020C95AC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C95F8 ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C95CC + bl MI_WaitDma +_020C95CC: + ldr r0, _020C95FC ; =0x021D33FC + ldr r0, [r0, #0x0] + bl GX_SetBankForClearImage + ldr r1, _020C95FC ; =0x021D33FC + mov r2, #0x0 + ldr r0, _020C9600 ; =0x021D340C + str r2, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C95F8: .word 0x02106814 +_020C95FC: .word 0x021D33FC +_020C9600: .word 0x021D340C + + arm_func_start GX_LoadClearImageDepth +GX_LoadClearImageDepth: ; 0x020C9604 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r3, _020C9670 ; =0x021D340C + ldr r2, _020C9674 ; =0x02106814 + ldr r12, [r3, #0x0] + ldr lr, [r2, #0x0] + mvn r2, #0x0 + mov r4, r0 + mov r3, r1 + cmp lr, r2 + add r2, r12, #0x20000 + beq _020C9658 + mov r12, #0x0 + str r12, [sp, #0x0] + mov r0, lr + mov r1, r4 + str r12, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020C9658: + mov r1, r2 + mov r2, r3 + bl MIi_CpuCopy32 + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C9670: .word 0x021D340C +_020C9674: .word 0x02106814 + + arm_func_start GX_LoadClearImageColor +GX_LoadClearImageColor: ; 0x020C9678 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r2, _020C96E0 ; =0x02106814 + ldr ip, _020C96E4 ; =0x021D340C + ldr lr, [r2, #0x0] + mvn r2, #0x0 + mov r4, r0 + mov r3, r1 + cmp lr, r2 + ldr r2, [r12, #0x0] + beq _020C96C8 + mov r12, #0x0 + str r12, [sp, #0x0] + mov r0, lr + mov r1, r4 + str r12, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020C96C8: + mov r1, r2 + mov r2, r3 + bl MIi_CpuCopy32 + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C96E0: .word 0x02106814 +_020C96E4: .word 0x021D340C + + arm_func_start GX_BeginLoadClearImage +GX_BeginLoadClearImage: ; 0x020C96E8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl GX_ResetBankForClearImage + ldr r1, _020C979C ; =0x021D33FC + cmp r0, #0xc + str r0, [r1, #0x0] + addls pc, pc, r0, lsl #0x2 + b _020C9790 +_020C9708: + b _020C9790 +_020C970C: + b _020C976C +_020C9710: + b _020C973C +_020C9714: + b _020C973C +_020C9718: + b _020C9784 +_020C971C: + b _020C9790 +_020C9720: + b _020C9790 +_020C9724: + b _020C9790 +_020C9728: + b _020C9754 +_020C972C: + b _020C9790 +_020C9730: + b _020C9790 +_020C9734: + b _020C9790 +_020C9738: + b _020C9754 +_020C973C: + ldr r0, _020C97A0 ; =0x021D340C + mov r1, #0x6800000 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020C9754: + ldr r1, _020C97A4 ; =0x06840000 + ldr r0, _020C97A0 ; =0x021D340C + add sp, sp, #0x4 + str r1, [r0, #0x0] + ldmia sp!, {lr} + bx lr +_020C976C: + ldr r1, _020C97A8 ; =0x067E0000 + ldr r0, _020C97A0 ; =0x021D340C + add sp, sp, #0x4 + str r1, [r0, #0x0] + ldmia sp!, {lr} + bx lr +_020C9784: + ldr r1, _020C97AC ; =0x06820000 + ldr r0, _020C97A0 ; =0x021D340C + str r1, [r0, #0x0] +_020C9790: + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C979C: .word 0x021D33FC +_020C97A0: .word 0x021D340C +_020C97A4: .word 0x06840000 +_020C97A8: .word 0x067E0000 +_020C97AC: .word 0x06820000 + + arm_func_start GX_EndLoadTexPltt +GX_EndLoadTexPltt: ; 0x020C97B0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C97FC ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C97D0 + bl MI_WaitDma +_020C97D0: + ldr r0, _020C9800 ; =0x021D3408 + ldr r0, [r0, #0x0] + bl GX_SetBankForTexPltt + ldr r1, _020C9800 ; =0x021D3408 + mov r2, #0x0 + ldr r0, _020C9804 ; =0x021D3404 + str r2, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C97FC: .word 0x02106814 +_020C9800: .word 0x021D3408 +_020C9804: .word 0x021D3404 + + arm_func_start GX_LoadTexPltt +GX_LoadTexPltt: ; 0x020C9808 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + ldr ip, _020C9874 ; =0x021D3404 + ldr r3, _020C9878 ; =0x02106814 + ldr r4, [r12, #0x0] + ldr lr, [r3, #0x0] + mvn r12, #0x0 + mov r5, r0 + mov r3, r2 + cmp lr, r12 + add r4, r4, r1 + beq _020C9860 + mov r12, #0x0 + str r12, [sp, #0x0] + mov r0, lr + mov r1, r5 + mov r2, r4 + str r12, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr +_020C9860: + mov r1, r4 + bl MIi_CpuCopy32 + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020C9874: .word 0x021D3404 +_020C9878: .word 0x02106814 + + arm_func_start GX_BeginLoadTexPltt +GX_BeginLoadTexPltt: ; 0x020C987C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl GX_ResetBankForTexPltt + mov r3, r0, asr #0x4 + ldr r2, _020C98B8 ; =0x021D3408 + ldr r1, _020C98BC ; =0x02103B3C + mov r3, r3, lsl #0x1 + ldrh r3, [r1, r3] + ldr r1, _020C98C0 ; =0x021D3404 + str r0, [r2, #0x0] + mov r0, r3, lsl #0xc + str r0, [r1, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C98B8: .word 0x021D3408 +_020C98BC: .word 0x02103B3C +_020C98C0: .word 0x021D3404 + + arm_func_start GX_EndLoadTex +GX_EndLoadTex: ; 0x020C98C4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C9920 ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C98E4 + bl MI_WaitDma +_020C98E4: + ldr r0, _020C9924 ; =0x021D3410 + ldr r0, [r0, #0x0] + bl GX_SetBankForTex + ldr r3, _020C9928 ; =0x021D3418 + mov r12, #0x0 + ldr r2, _020C992C ; =0x021D3414 + ldr r1, _020C9930 ; =0x021D3400 + ldr r0, _020C9924 ; =0x021D3410 + str r12, [r3, #0x0] + str r12, [r2, #0x0] + str r12, [r1, #0x0] + str r12, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C9920: .word 0x02106814 +_020C9924: .word 0x021D3410 +_020C9928: .word 0x021D3418 +_020C992C: .word 0x021D3414 +_020C9930: .word 0x021D3400 + + arm_func_start GX_LoadTex +GX_LoadTex: ; 0x020C9934 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + ldr r3, _020C9A88 ; =0x021D3414 + mov r7, r0 + ldr r5, [r3, #0x0] + mov r6, r2 + cmp r5, #0x0 + ldreq r0, _020C9A8C ; =0x021D3400 + ldreq r0, [r0, #0x0] + addeq r2, r0, r1 + beq _020C9A34 + ldr r0, _020C9A90 ; =0x021D3418 + add r2, r1, r6 + ldr r4, [r0, #0x0] + cmp r2, r4 + ldrlo r0, _020C9A8C ; =0x021D3400 + ldrcc r0, [r0, #0x0] + addcc r2, r0, r1 + blo _020C9A34 + cmp r1, r4 + addcs r0, r5, r1 + subcs r2, r0, r4 + bhs _020C9A34 + ldr r2, _020C9A8C ; =0x021D3400 + ldr r0, _020C9A94 ; =0x02106814 + ldr r3, [r2, #0x0] + ldr r0, [r0, #0x0] + mvn r2, #0x0 + cmp r0, r2 + sub r4, r4, r1 + add r2, r3, r1 + beq _020C99CC + cmp r4, #0x30 + bls _020C99CC + mov r1, r7 + mov r3, r4 + bl MI_DmaCopy32 + b _020C99DC +_020C99CC: + mov r1, r2 + mov r0, r7 + mov r2, r4 + bl MIi_CpuCopy32 +_020C99DC: + ldr r0, _020C9A94 ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C9A18 + mov r12, #0x0 + str r12, [sp, #0x0] + mov r2, r5 + add r1, r7, r4 + sub r3, r6, r4 + str r12, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr +_020C9A18: + mov r1, r5 + add r0, r7, r4 + sub r2, r6, r4 + bl MIi_CpuCopy32 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr +_020C9A34: + ldr r0, _020C9A94 ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C9A6C + mov r4, #0x0 + str r4, [sp, #0x0] + mov r1, r7 + mov r3, r6 + str r4, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr +_020C9A6C: + mov r1, r2 + mov r0, r7 + mov r2, r6 + bl MIi_CpuCopy32 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020C9A88: .word 0x021D3414 +_020C9A8C: .word 0x021D3400 +_020C9A90: .word 0x021D3418 +_020C9A94: .word 0x02106814 + + arm_func_start GX_BeginLoadTex +GX_BeginLoadTex: ; 0x020C9A98 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl GX_ResetBankForTex + mov r1, #0x6 + mul r12, r0, r1 + ldr r3, _020C9AFC ; =0x02103B4C + ldr r2, _020C9B00 ; =0x02103B4E + ldr r1, _020C9B04 ; =0x02103B50 + ldrh r5, [r3, r12] + ldrh r4, [r2, r12] + ldrh lr, [r1, r12] + ldr ip, _020C9B08 ; =0x021D3410 + ldr r3, _020C9B0C ; =0x021D3400 + mov r5, r5, lsl #0xc + ldr r2, _020C9B10 ; =0x021D3414 + mov r4, r4, lsl #0xc + ldr r1, _020C9B14 ; =0x021D3418 + mov lr, lr, lsl #0xc + str r0, [r12, #0x0] + str r5, [r3, #0x0] + str r4, [r2, #0x0] + str lr, [r1, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020C9AFC: .word 0x02103B4C +_020C9B00: .word 0x02103B4E +_020C9B04: .word 0x02103B50 +_020C9B08: .word 0x021D3410 +_020C9B0C: .word 0x021D3400 +_020C9B10: .word 0x021D3414 +_020C9B14: .word 0x021D3418 + + arm_func_start G3_EndMakeDL +G3_EndMakeDL: ; 0x020C9B18 + ldr r3, [r0, #0x0] + ldr r2, [r0, #0x8] + cmp r2, r3 + moveq r0, #0x0 + bxeq lr + and r1, r3, #0x3 + cmp r1, #0x3 + addls pc, pc, r1, lsl #0x2 + b _020C9B8C +_020C9B3C: + b _020C9B4C +_020C9B40: + b _020C9B54 +_020C9B44: + b _020C9B64 +_020C9B48: + b _020C9B78 +_020C9B4C: + sub r0, r3, r2 + bx lr +_020C9B54: + add r1, r3, #0x1 + str r1, [r0, #0x0] + mov r1, #0x0 + strb r1, [r3, #0x0] +_020C9B64: + ldr r3, [r0, #0x0] + mov r1, #0x0 + add r2, r3, #0x1 + str r2, [r0, #0x0] + strb r1, [r3, #0x0] +_020C9B78: + ldr r3, [r0, #0x0] + mov r1, #0x0 + add r2, r3, #0x1 + str r2, [r0, #0x0] + strb r1, [r3, #0x0] +_020C9B8C: + ldr r1, [r0, #0x10] + cmp r1, #0x0 + beq _020C9BB0 + ldr r3, [r0, #0x4] + mov r1, #0x0 + add r2, r3, #0x4 + str r2, [r0, #0x4] + str r1, [r3, #0x0] + str r1, [r0, #0x10] +_020C9BB0: + ldr r1, [r0, #0x4] + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + ldr r0, [r0, #0x8] + sub r0, r1, r0 + bx lr + + arm_func_start G3_BeginMakeDL +G3_BeginMakeDL: ; 0x020C9BC8 + str r2, [r0, #0xc] + str r1, [r0, #0x8] + str r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + mov r1, #0x0 + str r1, [r0, #0x10] + bx lr + + arm_func_start FUN_020C9BE8 +FUN_020C9BE8: ; 0x020C9BE8 + 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 diff --git a/global.inc b/global.inc index cd19b8ed9..837433363 100644 --- a/global.inc +++ b/global.inc @@ -3430,3 +3430,107 @@ .extern FUN_020AF2E0 .extern FUN_020AF30C .extern DC_FlushRange + +.extern _u32_div_f +.extern abs +.extern DC_InvalidateRange +.extern MI_DmaFill32 +.extern MIi_CpuClear32 +.extern DC_FlushRange +.extern MIi_CpuClear16 +.extern MIi_CpuCopy16 +.extern MIi_CpuClearFast +.extern OS_Terminate +.extern MIi_CpuSend32 +.extern MI_Zero36B +.extern MIi_CpuCopyFast +.extern MI_SendGXCommandAsyncFast +.extern FUN_020AE84C +.extern FUN_020AE868 +.extern MIi_CpuCopy32 +.extern SND_StopTimer +.extern SND_GetCurrentCommandTag +.extern SND_FlushCommand +.extern SND_WaitForCommandProc +.extern SND_SetMasterPan +.extern SND_ResetMasterPan +.extern SND_RecvCommandReply +.extern SND_Init +.extern PM_PrependPreSleepCallback +.extern PM_AppendPostSleepCallback +.extern SND_UnlockChannel +.extern SND_LockChannel +.extern SND_IsFinishedCommandTag +.extern SND_GetChannelStatus +.extern SND_SetChannelPan +.extern _ll_udiv +.extern SND_SetChannelTimer +.extern SND_SetChannelVolume +.extern SND_SetupChannelPcm +.extern SND_StartTimer +.extern FUN_020ADAB0 +.extern FUN_020ADBE8 +.extern FUN_020ADA98 +.extern SND_SetPlayerVolume +.extern SND_StopSeq +.extern FUN_020ADB18 +.extern SND_PauseSeq +.extern SND_PrepareSeq +.extern SND_SetTrackAllocatableChannel +.extern SND_GetPlayerStatus +.extern SND_StartPreparedSeq +.extern FUN_020ADC74 +.extern SND_GetPlayerTickCounter +.extern SND_SetTrackPan +.extern SND_SetTrackPitch +.extern SND_SetPlayerChannelPriority +.extern OS_DisableInterrupts +.extern OS_RestoreInterrupts +.extern PM_DeletePreSleepCallback +.extern PM_DeletePostSleepCallback +.extern SND_CalcChannelVolume +.extern SND_SetupAlarm +.extern OS_SendMessage +.extern OS_ReceiveMessage +.extern SND_SetOutputSelector +.extern _s32_div_f +.extern SND_SetupCapture +.extern FS_SeekFile +.extern FS_ReadFile +.extern FS_ConvertPathToFileID +.extern FS_InitFile +.extern FS_OpenFileFast +.extern FUN_020AE638 +.extern FUN_020ADA84 +.extern FUN_020AE554 +.extern FUN_020AE5B0 +.extern FUN_020AE600 +.extern thunk_FUN_020adc8c_2 +.extern FUN_020AE684 +.extern SND_GetFirstInstDataPos +.extern SND_GetNextInstData +.extern SND_GetWaveDataAddress +.extern SND_GetWaveDataCount +.extern DC_StoreRange +.extern SND_SetWaveDataAddress +.extern SND_InvalidateWaveData +.extern SND_DestroyWaveArc +.extern SND_InvalidateBankData +.extern SND_DestroyBank +.extern SND_InvalidateSeqData +.extern MI_CpuCopy8 +.extern MI_CpuFill8 +.extern SND_AssignWaveArc +.extern OS_LockMutex +.extern OS_UnlockMutex +.extern MI_Copy48B +.extern OS_GetLockID +.extern OSi_UnlockVram +.extern MI_Copy64B +.extern MI_Copy36B +.extern MI_DmaFill32Async +.extern _ll_sdiv +.extern MI_WaitDma +.extern MI_DmaCopy32Async +.extern MI_DmaCopy32 +.extern MI_SendGXCommandAsync diff --git a/pokediamond.lcf b/pokediamond.lcf index 994c7d142..44a010035 100644 --- a/pokediamond.lcf +++ b/pokediamond.lcf @@ -388,7 +388,7 @@ SECTIONS { scrcmd.o (.text) unk_02046030.o (.text) unk_0208AC14.o (.text) - rom1.5.o (.text) + unk_020AF030.o (.text) unk_020C9C0C.o (.text) PM_arm9.o (.text) RTC_arm9.o (.text) From adcf9a9db5bda045a363c1e29e0b8f786fd0745a Mon Sep 17 00:00:00 2001 From: Demki Date: Fri, 24 Apr 2020 19:32:27 +0300 Subject: [PATCH 11/23] clean up undefined_syms.txt and apply names --- asm/unk_020023C0.s | 68 +++++----- asm/unk_02006864.s | 332 ++++++++++++++++++++++----------------------- asm/unk_02046030.s | 40 +++--- asm/unk_0208AC14.s | 38 +++--- asm/unk_020AF030.s | 24 ++-- global.inc | 224 +++++++++++++++--------------- undefined_syms.txt | 314 +----------------------------------------- 7 files changed, 366 insertions(+), 674 deletions(-) diff --git a/asm/unk_020023C0.s b/asm/unk_020023C0.s index cd02d807a..f826c6c3e 100644 --- a/asm/unk_020023C0.s +++ b/asm/unk_020023C0.s @@ -2690,109 +2690,109 @@ _020037A6: ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] mov r1, #0x0 - blx FUN_020C9550 + blx GX_LoadBGPltt_2 b _020038A4 _020037B2: ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] mov r1, #0x0 - blx FUN_020C94E8 + blx GXS_LoadBGPltt_2 b _020038A4 _020037BE: ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] mov r1, #0x0 - blx FUN_020C9480 + blx GX_LoadOBJPltt_2 b _020038A4 _020037CA: ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] mov r1, #0x0 - blx FUN_020C9418 + blx GXS_LoadOBJPltt_2 b _020038A4 _020037D6: - blx FUN_020C8B10 + blx GX_BeginLoadBGExtPltt ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] mov r1, #0x0 - blx FUN_020C8A90 - blx FUN_020C8A2C + blx GX_LoadBGExtPltt + blx GX_EndLoadBGExtPltt b _020038A4 _020037EA: - blx FUN_020C8B10 + blx GX_BeginLoadBGExtPltt ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] add r1, r7, #0x0 - blx FUN_020C8A90 - blx FUN_020C8A2C + blx GX_LoadBGExtPltt + blx GX_EndLoadBGExtPltt b _020038A4 _020037FE: - blx FUN_020C8B10 + blx GX_BeginLoadBGExtPltt mov r1, #0x1 ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] lsl r1, r1, #0xe - blx FUN_020C8A90 - blx FUN_020C8A2C + blx GX_LoadBGExtPltt + blx GX_EndLoadBGExtPltt b _020038A4 _02003814: - blx FUN_020C8B10 + blx GX_BeginLoadBGExtPltt mov r1, #0x6 ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] lsl r1, r1, #0xc - blx FUN_020C8A90 - blx FUN_020C8A2C + blx GX_LoadBGExtPltt + blx GX_EndLoadBGExtPltt b _020038A4 _0200382A: - blx FUN_020C88CC + blx GXS_BeginLoadBGExtPltt ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] mov r1, #0x0 - blx FUN_020C8858 - blx FUN_020C880C + blx GXS_LoadBGExtPltt + blx GXS_EndLoadBGExtPltt b _020038A4 _0200383E: - blx FUN_020C88CC + blx GXS_BeginLoadBGExtPltt ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] add r1, r7, #0x0 - blx FUN_020C8858 - blx FUN_020C880C + blx GXS_LoadBGExtPltt + blx GXS_EndLoadBGExtPltt b _020038A4 _02003852: - blx FUN_020C88CC + blx GXS_BeginLoadBGExtPltt mov r1, #0x1 ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] lsl r1, r1, #0xe - blx FUN_020C8858 - blx FUN_020C880C + blx GXS_LoadBGExtPltt + blx GXS_EndLoadBGExtPltt b _020038A4 _02003868: - blx FUN_020C88CC + blx GXS_BeginLoadBGExtPltt mov r1, #0x6 ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] lsl r1, r1, #0xc - blx FUN_020C8858 - blx FUN_020C880C + blx GXS_LoadBGExtPltt + blx GXS_EndLoadBGExtPltt b _020038A4 _0200387E: - blx FUN_020C89BC + blx GX_BeginLoadOBJExtPltt ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] mov r1, #0x0 - blx FUN_020C8948 - blx FUN_020C88F0 + blx GX_LoadOBJExtPltt + blx GX_EndLoadOBJExtPltt b _020038A4 _02003892: - blx FUN_020C87E8 + blx GXS_BeginLoadOBJExtPltt ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] mov r1, #0x0 - blx FUN_020C8774 - blx FUN_020C8728 + blx GXS_LoadOBJExtPltt + blx GXS_EndLoadOBJExtPltt _020038A4: add r5, r5, #0x1 add r4, #0x14 diff --git a/asm/unk_02006864.s b/asm/unk_02006864.s index fc213a122..b2633b24e 100644 --- a/asm/unk_02006864.s +++ b/asm/unk_02006864.s @@ -179,7 +179,7 @@ _0200699C: ; jump table (using 16-bit offset) .short _020069C6 - _0200699C - 2; case 6 .short _020069FA - _0200699C - 2; case 7 _020069AC: - blx FUN_020C8B10 + blx GX_BeginLoadBGExtPltt ldr r0, [sp, #0x8] ldr r3, _02006A30 ; =0x020ECBB0 lsl r4, r4, #0x2 @@ -188,10 +188,10 @@ _020069AC: add r1, r6, #0x0 add r2, r5, #0x0 blx r3 - blx FUN_020C8A2C + blx GX_EndLoadBGExtPltt b _02006A24 _020069C6: - blx FUN_020C88CC + blx GXS_BeginLoadBGExtPltt ldr r0, [sp, #0x8] ldr r3, _02006A30 ; =0x020ECBB0 lsl r4, r4, #0x2 @@ -200,10 +200,10 @@ _020069C6: add r1, r6, #0x0 add r2, r5, #0x0 blx r3 - blx FUN_020C880C + blx GXS_EndLoadBGExtPltt b _02006A24 _020069E0: - blx FUN_020C89BC + blx GX_BeginLoadOBJExtPltt ldr r0, [sp, #0x8] ldr r3, _02006A30 ; =0x020ECBB0 lsl r4, r4, #0x2 @@ -212,10 +212,10 @@ _020069E0: add r1, r6, #0x0 add r2, r5, #0x0 blx r3 - blx FUN_020C88F0 + blx GX_EndLoadOBJExtPltt b _02006A24 _020069FA: - blx FUN_020C87E8 + blx GXS_BeginLoadOBJExtPltt ldr r0, [sp, #0x8] ldr r3, _02006A30 ; =0x020ECBB0 lsl r4, r4, #0x2 @@ -224,7 +224,7 @@ _020069FA: add r1, r6, #0x0 add r2, r5, #0x0 blx r3 - blx FUN_020C8728 + blx GXS_EndLoadOBJExtPltt b _02006A24 _02006A14: ldr r0, [sp, #0x8] @@ -540,7 +540,7 @@ FUN_02006C5C: ; 0x02006C5C add r5, r0, #0x0 beq _02006C82 add r1, r4, #0x0 - blx FUN_020AFD94 + blx thunk_FUN_020afda0_2 cmp r0, #0x0 bne _02006C82 add r0, r5, #0x0 @@ -969,7 +969,7 @@ _02006F7E: ldrsh r0, [r0, r1] mov r1, #0x2 ldrsh r1, [r2, r1] - blx FUN_020C8068 + blx G3_RotX ldrh r0, [r4, #0x3a] asr r0, r0, #0x4 lsl r1, r0, #0x2 @@ -978,7 +978,7 @@ _02006F7E: ldrsh r0, [r0, r1] mov r1, #0x2 ldrsh r1, [r2, r1] - blx FUN_020C802C + blx G3_RotY ldrh r0, [r4, #0x3c] asr r0, r0, #0x4 lsl r1, r0, #0x2 @@ -987,7 +987,7 @@ _02006F7E: ldrsh r0, [r0, r1] mov r1, #0x2 ldrsh r1, [r2, r1] - blx FUN_020C7FF0 + blx G3_RotZ ldr r0, [r4, #0x28] lsl r0, r0, #0xc neg r1, r0 @@ -5035,10 +5035,10 @@ FUN_02008D44: ; 0x02008D44 beq _02008D98 b _02008DC4 _02008D5A: - blx FUN_020C5DBC + blx GX_GetBankForOBJ cmp r0, #0x40 beq _02008D6A - blx FUN_020C5DBC + blx GX_GetBankForOBJ cmp r0, #0x20 bne _02008D7A _02008D6A: @@ -5065,10 +5065,10 @@ _02008D8A: bl FUN_0201D194 pop {r4, pc} _02008D98: - blx FUN_020C5DBC + blx GX_GetBankForOBJ cmp r0, #0x30 beq _02008DA8 - blx FUN_020C5DBC + blx GX_GetBankForOBJ cmp r0, #0x50 bne _02008DB6 _02008DA8: @@ -6608,7 +6608,7 @@ FUN_020098CC: ; 0x020098CC add r4, r0, #0x0 add r0, r5, #0x0 add r1, r4, #0x0 - blx FUN_020AFD94 + blx thunk_FUN_020afda0_2 add r0, r4, #0x0 pop {r3-r5, pc} .balign 4 @@ -6638,7 +6638,7 @@ FUN_02009904: ; 0x02009904 add r4, r0, #0x0 add r0, r5, #0x0 add r1, r4, #0x0 - blx FUN_020AFD88 + blx thunk_FUN_020afda0 add r0, r4, #0x0 pop {r3-r5, pc} .balign 4 @@ -7757,7 +7757,7 @@ _0200A166: ldrsh r2, [r5, r2] ldr r0, _0200A198 ; =0x04000050 ldr r1, [r5, #0x0] - blx FUN_020C74B8 + blx G2x_SetBlendBrightness_ b _0200A18E _0200A17C: mov r0, #0x2 @@ -7767,7 +7767,7 @@ _0200A17C: ldrsh r2, [r5, r2] ldr r0, _0200A19C ; =0x04001050 ldr r1, [r5, #0x0] - blx FUN_020C74B8 + blx G2x_SetBlendBrightness_ _0200A18E: cmp r4, #0x1 bne _0200A196 @@ -7850,7 +7850,7 @@ FUN_0200A208: ; 0x0200A208 beq _0200A23A ldr r0, _0200A264 ; =0x04000050 add r1, r4, #0x0 - blx FUN_020C74B8 + blx G2x_SetBlendBrightness_ str r4, [sp, #0x0] mov r0, #0x1 str r0, [sp, #0x4] @@ -7867,7 +7867,7 @@ _0200A23A: ldr r0, _0200A26C ; =0x04001050 add r1, r4, #0x0 add r2, r6, #0x0 - blx FUN_020C74B8 + blx G2x_SetBlendBrightness_ str r4, [sp, #0x0] mov r0, #0x2 str r0, [sp, #0x4] @@ -7896,7 +7896,7 @@ FUN_0200A274: ; 0x0200A274 beq _0200A28A ldr r0, _0200A2A4 ; =0x04000050 add r2, r5, #0x0 - blx FUN_020C74B8 + blx G2x_SetBlendBrightness_ _0200A28A: mov r0, #0x2 tst r0, r4 @@ -7904,7 +7904,7 @@ _0200A28A: ldr r0, _0200A2A8 ; =0x04001050 add r1, r6, #0x0 add r2, r5, #0x0 - blx FUN_020C74B8 + blx G2x_SetBlendBrightness_ _0200A29A: add r0, r4, #0x0 bl FUN_0200A2D8 @@ -15859,7 +15859,7 @@ FUN_0200DEF4: ; 0x0200DEF4 add r0, r4, #0x0 add r1, r7, #0x0 lsl r2, r2, #0x8 - blx FUN_020C92F4 + blx GX_LoadOBJ_2 add r0, r4, #0x0 bl FUN_02016A18 ldr r2, _0200DFC8 ; =0x00000162 @@ -15884,7 +15884,7 @@ FUN_0200DEF4: ; 0x0200DEF4 add r0, r4, #0x0 add r1, r5, #0x0 mov r2, #0x20 - blx FUN_020C9480 + blx GX_LoadOBJPltt_2 add r0, r4, #0x0 bl FUN_02016A18 add sp, #0x28 @@ -16385,12 +16385,12 @@ FUN_0200E3BC: ; 0x0200E3BC bne _0200E3D2 mov r1, #0x0 mov r2, #0x2 - blx FUN_020C9550 + blx GX_LoadBGPltt_2 b _0200E3DA _0200E3D2: mov r1, #0x0 mov r2, #0x2 - blx FUN_020C94E8 + blx GXS_LoadBGPltt_2 _0200E3DA: ldr r0, _0200E41C ; =0x021C4740 mov r1, #0x1 @@ -16430,11 +16430,11 @@ FUN_0200E420: ; 0x0200E420 add r0, sp, #0x8 mov r1, #0x0 mov r2, #0x2 - blx FUN_020C9550 + blx GX_LoadBGPltt_2 add r0, sp, #0x8 mov r1, #0x0 mov r2, #0x2 - blx FUN_020C94E8 + blx GXS_LoadBGPltt_2 pop {r3} pop {r3} add sp, #0x10 @@ -16446,11 +16446,11 @@ FUN_0200E440: ; 0x0200E440 cmp r0, #0x0 bne _0200E44E ldr r0, _0200E458 ; =0x0400006C - blx FUN_020C5978 + blx GXx_SetMasterBrightness_ pop {r3, pc} _0200E44E: ldr r0, _0200E45C ; =0x0400106C - blx FUN_020C5978 + blx GXx_SetMasterBrightness_ pop {r3, pc} nop _0200E458: .word 0x0400006C @@ -18095,13 +18095,13 @@ FUN_0200F0B4: ; 0x0200F0B4 ldr r2, _0200F0C8 ; =0x020FFA38 add r1, r1, #0x1 lsl r1, r1, #0x1 - ldr r3, _0200F0CC ; =FUN_020C50B8 + ldr r3, _0200F0CC ; =FX_Div ldrsh r0, [r2, r0] ldrsh r1, [r2, r1] bx r3 .balign 4 _0200F0C8: .word 0x020FFA38 -_0200F0CC: .word FUN_020C50B8 +_0200F0CC: .word FX_Div thumb_func_start FUN_0200F0D0 FUN_0200F0D0: ; 0x0200F0D0 @@ -18178,7 +18178,7 @@ FUN_0200F14C: ; 0x0200F14C add r0, r4, r0 asr r0, r0, #0x1 lsl r0, r0, #0xc - blx FUN_020C50B8 + blx FX_Div pop {r4, pc} thumb_func_start FUN_0200F164 @@ -20316,7 +20316,7 @@ _020100FA: lsr r2, r2, #0xc orr r2, r1 sub r0, r0, r2 - blx FUN_020C504C + blx FX_Sqrt asr r2, r0, #0xc ldr r0, [sp, #0x0] sub r0, r0, r2 @@ -24121,7 +24121,7 @@ _02011DC6: add r0, r7, #0x0 add r1, r6, #0x0 add r2, r4, #0x0 - blx FUN_020C92F4 + blx GX_LoadOBJ_2 mov r0, #0x1 str r6, [r5, #0x4] lsl r0, r0, #0x1a @@ -24132,7 +24132,7 @@ _02011E08: add r0, r7, #0x0 add r1, r6, #0x0 add r2, r4, #0x0 - blx FUN_020C9294 + blx GXS_LoadOBJ_2 ldr r0, _02011E4C ; =0x04001000 str r6, [r5, #0x8] ldr r1, [r0, #0x0] @@ -29220,7 +29220,7 @@ _02014172: lsl r2, r2, #0x1 ldrsh r0, [r1, r0] ldrsh r1, [r1, r2] - blx FUN_020C7FF0 + blx G3_RotZ ldr r2, [r5, #0x10] ldr r0, [r5, #0xc] ldr r1, _02014210 ; =0x0400046C @@ -30499,7 +30499,7 @@ FUN_02014B10: ; 0x02014B10 ldr r1, [r4, #0xc] ldr r0, [r0, #0xc] ldr r2, [r4, #0x10] - blx FUN_020C9550 + blx GX_LoadBGPltt_2 b _02014B44 _02014B34: cmp r0, #0x4 @@ -30508,7 +30508,7 @@ _02014B34: ldr r1, [r4, #0xc] ldr r0, [r0, #0xc] ldr r2, [r4, #0x10] - blx FUN_020C94E8 + blx GXS_LoadBGPltt_2 _02014B44: add r0, r5, #0x0 bl FUN_0200CAB4 @@ -33301,7 +33301,7 @@ FUN_02015F80: ; 0x02015F80 mov r0, #0x2 blx OS_DisableIrqMask mov r0, #0x0 - blx FUN_020C5AF8 + blx GX_HBlankIntr b _02015FB4 _02015F9E: ldr r0, [r2, #0x8] @@ -33311,7 +33311,7 @@ _02015F9E: mov r0, #0x2 blx OS_EnableIrqMask mov r0, #0x1 - blx FUN_020C5AF8 + blx GX_HBlankIntr _02015FB4: ldr r1, _02015FC0 ; =0x04000208 ldrh r0, [r1, #0x0] @@ -33367,7 +33367,7 @@ _02016010: .word 0x020EDB10 InitSystemForTheGame: ; 0x02016014 push {r3-r5, lr} blx OS_Init - blx FUN_020C5974 + blx FX_Init ldr r2, _02016124 ; =0x04000304 ldr r0, _02016128 ; =0xFFFFFDF1 ldrh r1, [r2, #0x0] @@ -33375,7 +33375,7 @@ InitSystemForTheGame: ; 0x02016014 ldr r0, _0201612C ; =0x0000020E orr r0, r1 strh r0, [r2, #0x0] - blx FUN_020C5B28 + blx GX_Init blx OS_InitTick bl FUN_02015FC8 mov r0, #0xa0 @@ -33422,7 +33422,7 @@ InitSystemForTheGame: ; 0x02016014 bl FUN_0201B580 ldr r1, _02016130 ; =0x021C48B8 str r0, [r1, #0x24] - blx FUN_020C5A80 + blx GX_DispOff ldr r2, _02016134 ; =0x04001000 ldr r0, _02016138 ; =0xFFFEFFFF ldr r1, [r2, #0x0] @@ -33445,7 +33445,7 @@ InitSystemForTheGame: ; 0x02016014 ldrh r0, [r1, #0x0] mov r0, #0x1 strh r0, [r1, #0x0] - blx FUN_020C5AC8 + blx GX_VBlankIntr mov r0, #0x1 blx FS_Init bl FUN_02022450 @@ -33489,14 +33489,14 @@ _02016144: .word 0x021C4918 InitGraphicMemory: ; 0x02016148 push {r3, lr} ldr r0, _02016198 ; =0x000001FF - blx FUN_020C63A8 + blx GX_SetBankForLCDC mov r1, #0x1a mov r2, #0x29 mov r0, #0x0 lsl r1, r1, #0x16 lsl r2, r2, #0xe blx MIi_CpuClearFast - blx FUN_020C5E54 + blx GX_DisableBankForLCDC mov r1, #0x7 mov r2, #0x1 mov r0, #0xc0 @@ -34325,7 +34325,7 @@ _02016772: beq _0201678E ldr r1, [r5, #0x0] mov r2, #0x0 - blx FUN_020ADFE8 + blx tempName_NNS_FndCreateExpHeapEx ldr r1, _020167F0 ; =0x021C4D28 ldr r2, [r1, #0x0] ldr r1, [sp, #0x0] @@ -34463,7 +34463,7 @@ _0201684C: ldr r1, [sp, #0x0] add r0, r6, #0x0 add r2, r7, #0x0 - blx FUN_020ADFA0 + blx tempName_NNS_FndAllocFromExpHeapEx str r0, [sp, #0x4] cmp r0, #0x0 beq _020168B6 @@ -34474,7 +34474,7 @@ _0201684C: ldr r1, [sp, #0x0] mov r2, #0x0 lsl r4, r7, #0x2 - blx FUN_020ADFE8 + blx tempName_NNS_FndCreateExpHeapEx ldr r1, _020168CC ; =0x021C4D28 ldr r2, [r1, #0x0] str r0, [r2, r4] @@ -34530,7 +34530,7 @@ _020168E0: ldr r0, [r1, r0] cmp r0, #0x0 beq _0201693E - blx FUN_020ADFDC + blx thunk_FUN_020adc8c ldr r1, _02016940 ; =0x021C4D28 ldr r0, [r1, #0x10] ldrb r0, [r0, r4] @@ -34590,7 +34590,7 @@ _02016956: add r0, r5, #0x0 add r1, r4, #0x0 add r2, r7, #0x0 - blx FUN_020ADFA0 + blx tempName_NNS_FndAllocFromExpHeapEx add r4, r0, #0x0 ldr r0, [sp, #0x0] blx OS_RestoreInterrupts @@ -34916,9 +34916,9 @@ FUN_02016BBC: ; 0x02016BBC ldr r0, [r4, #0x0] ldr r1, [r4, #0x4] ldr r2, [r4, #0xc] - blx FUN_020C59C0 + blx GX_SetGraphicsMode ldr r0, [r4, #0x8] - blx FUN_020C59A4 + blx GXS_SetGraphicsMode mov r2, #0x1 lsl r2, r2, #0x1a ldr r1, [r2, #0x0] @@ -34944,12 +34944,12 @@ FUN_02016BF4: ; 0x02016BF4 ldr r0, [r2, #0x0] ldr r1, [r2, #0x4] ldr r2, [r2, #0xc] - blx FUN_020C59C0 + blx GX_SetGraphicsMode bl FUN_0201E6D8 pop {r3, pc} _02016C0C: ldr r0, [r2, #0x8] - blx FUN_020C59A4 + blx GXS_SetGraphicsMode bl FUN_0201E740 pop {r3, pc} @@ -37134,7 +37134,7 @@ _02017BFC: ldr r0, [r4, #0x18] str r0, [sp, #0x4] ldr r0, _02017C5C ; =0x04000020 - blx FUN_020C74F8 + blx G2x_SetBGyAffine_ add sp, #0x8 pop {r3-r5, pc} _02017C14: @@ -37146,7 +37146,7 @@ _02017C14: ldr r0, [r4, #0x18] str r0, [sp, #0x4] ldr r0, _02017C60 ; =0x04000030 - blx FUN_020C74F8 + blx G2x_SetBGyAffine_ add sp, #0x8 pop {r3-r5, pc} _02017C2C: @@ -37158,7 +37158,7 @@ _02017C2C: ldr r0, [r4, #0x18] str r0, [sp, #0x4] ldr r0, _02017C64 ; =0x04001020 - blx FUN_020C74F8 + blx G2x_SetBGyAffine_ add sp, #0x8 pop {r3-r5, pc} _02017C44: @@ -37170,7 +37170,7 @@ _02017C44: ldr r0, [r4, #0x18] str r0, [sp, #0x4] ldr r0, _02017C68 ; =0x04001030 - blx FUN_020C74F8 + blx G2x_SetBGyAffine_ _02017C58: add sp, #0x8 pop {r3-r5, pc} @@ -37340,49 +37340,49 @@ _02017D9A: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx FUN_020C922C + blx GX_LoadBG0Scr_2 pop {r3-r7, pc} _02017DA6: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx FUN_020C915C + blx GX_LoadBG1Scr_2 pop {r3-r7, pc} _02017DB2: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx FUN_020C908C + blx GX_LoadBG2Scr_3 pop {r3-r7, pc} _02017DBE: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx FUN_020C8FBC + blx GX_LoadBG3Scr_3 pop {r3-r7, pc} _02017DCA: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx FUN_020C91C4 + blx GXS_LoadBG0Scr_2 pop {r3-r7, pc} _02017DD6: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx FUN_020C90F4 + blx GXS_LoadBG1Scr_2 pop {r3-r7, pc} _02017DE2: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx FUN_020C9024 + blx GXS_LoadBG2Scr_3 pop {r3-r7, pc} _02017DEE: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx FUN_020C8F54 + blx GXS_LoadBG3Scr_3 _02017DF8: pop {r3-r7, pc} .balign 4 @@ -37489,49 +37489,49 @@ _02017EB6: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx FUN_020C8EEC + blx GX_LoadBG0Char_2 pop {r3-r7, pc} _02017EC2: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx FUN_020C8E1C + blx GX_LoadBG1Char_2 pop {r3-r7, pc} _02017ECE: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx FUN_020C8D4C + blx GX_LoadBG2Char_2 pop {r3-r7, pc} _02017EDA: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx FUN_020C8C7C + blx GX_LoadBG3Char_2 pop {r3-r7, pc} _02017EE6: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx FUN_020C8E84 + blx GXS_LoadBG0Char_2 pop {r3-r7, pc} _02017EF2: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx FUN_020C8DB4 + blx GXS_LoadBG1Char_2 pop {r3-r7, pc} _02017EFE: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx FUN_020C8CE4 + blx GXS_LoadBG2Char_2 pop {r3-r7, pc} _02017F0A: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx FUN_020C8C14 + blx GXS_LoadBG3Char_2 _02017F14: pop {r3-r7, pc} .balign 4 @@ -37629,13 +37629,13 @@ FUN_02017FB4: ; 0x02017FB4 add r0, r5, #0x0 add r1, r7, #0x0 add r2, r4, #0x0 - blx FUN_020C9550 + blx GX_LoadBGPltt_2 pop {r3-r7, pc} _02017FD6: add r0, r5, #0x0 add r1, r7, #0x0 add r2, r4, #0x0 - blx FUN_020C94E8 + blx GXS_LoadBGPltt_2 pop {r3-r7, pc} .balign 4 @@ -38736,28 +38736,28 @@ _020187C2: ; jump table (using 16-bit offset) .short _020187F6 - _020187C2 - 2; case 6 .short _020187FC - _020187C2 - 2; case 7 _020187D2: - blx FUN_020C7124 + blx G2_GetBG0CharPtr pop {r3, pc} _020187D8: - blx FUN_020C70D0 + blx G2_GetBG1CharPtr pop {r3, pc} _020187DE: - blx FUN_020C7058 + blx G2_GetBG2CharPtr pop {r3, pc} _020187E4: - blx FUN_020C6FB0 + blx G2_GetBG3CharPtr pop {r3, pc} _020187EA: - blx FUN_020C7104 + blx G2S_GetBG0CharPtr pop {r3, pc} _020187F0: - blx FUN_020C70B0 + blx G2S_GetBG1CharPtr pop {r3, pc} _020187F6: - blx FUN_020C7010 + blx G2S_GetBG2CharPtr pop {r3, pc} _020187FC: - blx FUN_020C6F60 + blx G2S_GetBG3CharPtr pop {r3, pc} _02018802: mov r0, #0x0 @@ -43889,7 +43889,7 @@ _0201ACEA: ldr r2, [r2, #0x0] ldr r3, [r3, #0x0] add r1, sp, #0x38 - blx FUN_020C74F8 + blx G2x_SetBGyAffine_ _0201AD1E: ldrh r1, [r4, #0x4] mov r0, #0x8 @@ -43945,7 +43945,7 @@ _0201AD4E: ldr r2, [r2, #0x0] ldr r3, [r3, #0x0] add r1, sp, #0x28 - blx FUN_020C74F8 + blx G2x_SetBGyAffine_ _0201AD8E: ldrh r1, [r4, #0x4] mov r0, #0x10 @@ -44035,7 +44035,7 @@ _0201AE04: ldr r2, [r4, r2] ldr r3, [r4, r3] add r1, sp, #0x18 - blx FUN_020C74F8 + blx G2x_SetBGyAffine_ _0201AE3E: ldrh r0, [r4, #0x4] mov r3, #0x80 @@ -44090,7 +44090,7 @@ _0201AE72: ldr r2, [r4, r2] ldr r3, [r4, r3] add r1, sp, #0x8 - blx FUN_020C74F8 + blx G2x_SetBGyAffine_ _0201AEAC: add sp, #0x48 pop {r4, pc} @@ -44712,13 +44712,13 @@ FUN_0201B314: ; 0x0201B314 add r1, r0, #0x0 add r2, r0, #0x0 add r3, r0, #0x0 - blx FUN_020C7C28 + blx G3X_SetFog mov r0, #0x0 ldr r2, _0201B38C ; =0x00007FFF add r1, r0, #0x0 mov r3, #0x3f str r0, [sp, #0x0] - blx FUN_020C7B3C + blx G3X_SetClearColor ldr r1, _0201B390 ; =0xBFFF0000 ldr r0, _0201B394 ; =0x04000580 str r1, [r0, #0x0] @@ -45401,7 +45401,7 @@ FUN_0201B82C: ; 0x0201B82C add r4, sp, #0x8 _0201B86A: add r0, r4, #0x0 - blx FUN_020C7A14 + blx G3X_GetBoxTestResult cmp r0, #0x0 bne _0201B86A ldr r0, [sp, #0x8] @@ -45928,7 +45928,7 @@ FUN_0201BBD0: ; 0x0201BBD0 str r0, [sp, #0x34] add r0, sp, #0x2c add r1, sp, #0x14 - blx FUN_020C5288 + blx VEC_Normalize mov r1, #0x0 ldr r0, [sp, #0x0] str r1, [sp, #0x34] @@ -45940,7 +45940,7 @@ FUN_0201BBD0: ; 0x0201BBD0 str r5, [sp, #0x2c] str r4, [sp, #0x30] str r6, [sp, #0x24] - blx FUN_020C5600 + blx VEC_Subtract add r0, sp, #0x14 add r1, sp, #0x8 blx VEC_DotProduct @@ -47550,10 +47550,10 @@ FUN_0201C7B0: ; 0x0201C7B0 sub sp, #0x30 add r4, r1, #0x0 add r1, sp, #0x24 - blx FUN_020C5288 + blx VEC_Normalize add r0, r4, #0x0 add r1, sp, #0x18 - blx FUN_020C5288 + blx VEC_Normalize ldr r0, [sp, #0x24] ldr r4, [sp, #0x18] str r0, [sp, #0x0] @@ -47636,7 +47636,7 @@ _0201C862: pop {r3-r7, pc} _0201C86A: add r1, r5, #0x0 - blx FUN_020C5668 + blx FX_Modf add sp, #0x30 pop {r3-r7, pc} .balign 4 @@ -47934,7 +47934,7 @@ FUN_0201CAA8: ; 0x0201CAA8 ldrsh r1, [r3, r1] ldrsh r2, [r3, r2] add r5, r0, #0x0 - bl FUN_020C3F38 + bl MTX_RotX33_ ldr r0, [r4, #0x4] ldr r3, _0201CB1C ; =0x020FFA38 lsl r0, r0, #0x10 @@ -47947,11 +47947,11 @@ FUN_0201CAA8: ; 0x0201CAA8 ldrsh r1, [r3, r1] ldrsh r2, [r3, r2] add r0, sp, #0x0 - bl FUN_020C3F54 + bl MTX_RotY33_ add r0, r5, #0x0 add r1, sp, #0x0 add r2, r5, #0x0 - blx FUN_020C400C + blx MTX_Concat33 ldr r0, [r4, #0x8] ldr r3, _0201CB1C ; =0x020FFA38 lsl r0, r0, #0x10 @@ -47964,11 +47964,11 @@ FUN_0201CAA8: ; 0x0201CAA8 ldrsh r1, [r3, r1] ldrsh r2, [r3, r2] add r0, sp, #0x0 - bl FUN_020C3F70 + bl MTX_RotZ33_ add r0, r5, #0x0 add r1, sp, #0x0 add r2, r5, #0x0 - blx FUN_020C400C + blx MTX_Concat33 add sp, #0x24 pop {r4-r5, pc} nop @@ -47988,7 +47988,7 @@ FUN_0201CB20: ; 0x0201CB20 ldr r1, [r2, r1] ldr r2, [r2, r3] add r7, r0, #0x0 - bl FUN_020C3F38 + bl MTX_RotX33_ lsl r1, r5, #0x2 ldr r3, _0201CB78 ; =0x020EDF50 add r5, #0x5a @@ -47996,11 +47996,11 @@ FUN_0201CB20: ; 0x0201CB20 ldr r1, [r3, r1] ldr r2, [r3, r2] add r0, sp, #0x0 - bl FUN_020C3F54 + bl MTX_RotY33_ add r0, r7, #0x0 add r1, sp, #0x0 add r2, r7, #0x0 - blx FUN_020C400C + blx MTX_Concat33 lsl r1, r4, #0x2 ldr r3, _0201CB78 ; =0x020EDF50 add r4, #0x5a @@ -48008,11 +48008,11 @@ FUN_0201CB20: ; 0x0201CB20 ldr r1, [r3, r1] ldr r2, [r3, r2] add r0, sp, #0x0 - bl FUN_020C3F70 + bl MTX_RotZ33_ add r0, r7, #0x0 add r1, sp, #0x0 add r2, r7, #0x0 - blx FUN_020C400C + blx MTX_Concat33 add sp, #0x24 pop {r4-r7, pc} .balign 4 @@ -48033,7 +48033,7 @@ FUN_0201CB7C: ; 0x0201CB7C ldrsh r1, [r1, r2] add r5, r3, #0x0 ldr r4, [sp, #0x18] - blx FUN_020C50B8 + blx FX_Div add r2, r0, #0x0 asr r1, r6, #0x1f add r0, r6, #0x0 @@ -48085,7 +48085,7 @@ FUN_0201CBEC: ; 0x0201CBEC mul r0, r2 add r0, r1, r0 lsl r0, r0, #0xc - blx FUN_020C504C + blx FX_Sqrt asr r0, r0, #0xc pop {r3, pc} .balign 4 @@ -50123,7 +50123,7 @@ _0201DAE4: .word 0x021C5994 thumb_func_start FUN_0201DAE8 FUN_0201DAE8: ; 0x0201DAE8 push {r3, lr} - blx FUN_020C5DBC + blx GX_GetBankForOBJ cmp r0, #0x30 bgt _0201DB18 bge _0201DB60 @@ -50224,7 +50224,7 @@ _0201DB90: ldr r0, [r0, #0x0] str r1, [r0, #0x14] _0201DB98: - blx FUN_020C5D4C + blx GX_GetBankForSubOBJ cmp r0, #0x0 beq _0201DBAE cmp r0, #0x8 @@ -51463,7 +51463,7 @@ _0201E460: .word 0x021C5998 thumb_func_start FUN_0201E464 FUN_0201E464: ; 0x0201E464 push {r3, lr} - blx FUN_020C5D9C + blx GX_GetBankForOBJExtPltt cmp r0, #0x20 beq _0201E472 cmp r0, #0x40 @@ -51481,7 +51481,7 @@ _0201E47E: ldr r0, [r0, #0x0] str r1, [r0, #0x1c] _0201E486: - blx FUN_020C5D2C + blx GX_GetBankForSubOBJExtPltt mov r1, #0x1 lsl r1, r1, #0x8 cmp r0, r1 @@ -51767,36 +51767,36 @@ _0201E666: FUN_0201E66C: ; 0x0201E66C push {r4, lr} add r4, r0, #0x0 - blx FUN_020C611C - blx FUN_020C60E4 - blx FUN_020C6070 + blx GX_ResetBankForBG + blx GX_ResetBankForBGExtPltt + blx GX_ResetBankForSubBG blx FUN_020C6034 - blx FUN_020C6108 - blx FUN_020C60C0 + blx GX_ResetBankForOBJ + blx GX_ResetBankForOBJExtPltt blx FUN_020C605C - blx FUN_020C600C - blx FUN_020C60AC - blx FUN_020C6098 + blx GX_ResetBankForSubOBJ + blx GX_ResetBankForTex + blx GX_ResetBankForTexPltt ldr r0, [r4, #0x0] - blx FUN_020C6BF0 + blx GX_SetBankForBG ldr r0, [r4, #0x4] - blx FUN_020C6970 + blx GX_SetBankForBGExtPltt ldr r0, [r4, #0x8] - blx FUN_020C62FC + blx GX_SetBankForSubBG ldr r0, [r4, #0xc] - blx FUN_020C61F4 + blx GX_SetBankForSubBGExtPltt ldr r0, [r4, #0x10] - blx FUN_020C6A84 + blx GX_SetBankForOBJ ldr r0, [r4, #0x14] - blx FUN_020C68B8 + blx GX_SetBankForOBJExtPltt ldr r0, [r4, #0x18] - blx FUN_020C6280 + blx GX_SetBankForSubOBJ ldr r0, [r4, #0x1c] - blx FUN_020C6168 + blx GX_SetBankForSubOBJExtPltt ldr r0, [r4, #0x20] - blx FUN_020C66B4 + blx GX_SetBankForTex ldr r0, [r4, #0x24] - blx FUN_020C65C0 + blx GX_SetBankForTexPltt pop {r4, pc} .balign 4 @@ -51906,7 +51906,7 @@ _0201E784: .word 0xFFFFE0FF thumb_func_start FUN_0201E788 FUN_0201E788: ; 0x0201E788 push {r3, lr} - blx FUN_020C5A34 + blx GX_DispOn ldr r2, _0201E79C ; =0x04001000 mov r0, #0x1 ldr r1, [r2, #0x0] @@ -52051,7 +52051,7 @@ FUN_0201E7D8: ; 0x0201E7D8 add r5, #0x20 add r1, r5, #0x0 add r2, r0, #0x0 - blx FUN_020C5634 + blx VEC_Add pop {r3-r5, pc} nop _0201E8B4: .word 0x020FFA38 @@ -52162,7 +52162,7 @@ FUN_0201E8B8: ; 0x0201E8B8 add r5, #0x14 add r1, r5, #0x0 add r2, r0, #0x0 - blx FUN_020C5634 + blx VEC_Add pop {r3-r5, pc} .balign 4 _0201E998: .word 0x020FFA38 @@ -52477,7 +52477,7 @@ FUN_0201EBA4: ; 0x0201EBA4 beq _0201EBEE add r1, #0x48 add r2, sp, #0x10 - blx FUN_020C5600 + blx VEC_Subtract ldr r0, _0201EC40 ; =0x021C59A4 add r1, sp, #0x10 ldr r0, [r0, #0x0] @@ -52531,7 +52531,7 @@ _0201EBEE: str r0, [sp, #0x0] add r0, r4, #0x0 mov r3, #0x0 - blx FUN_020C80A4 + blx G3i_LookAt_ ldr r1, _0201EC54 ; =0x021CED98 mov r0, #0xe8 ldr r2, [r1, #0x7c] @@ -52719,9 +52719,9 @@ FUN_0201ED5C: ; 0x0201ED5C str r0, [r2, #0x0] add r0, r6, #0x0 add r2, sp, #0x30 - blx FUN_020C5600 + blx VEC_Subtract add r0, sp, #0x30 - blx FUN_020C53C8 + blx VEC_Mag str r0, [r4, #0x38] mov r6, #0x0 add r0, sp, #0x24 @@ -52813,7 +52813,7 @@ FUN_0201EE2C: ; 0x0201EE2C ldr r1, [r5, #0x4] ldr r2, [r5, #0x8] ldr r3, [r5, #0xc] - blx FUN_020C8538 + blx G3i_PerspectiveW_ ldr r1, _0201EEE8 ; =0x021CED98 mov r0, #0x50 ldr r2, [r1, #0x7c] @@ -52830,7 +52830,7 @@ _0201EE6C: ldr r4, [r5, #0x38] ldr r0, [r5, #0x0] ldr r1, [r5, #0x4] - blx FUN_020C50B8 + blx FX_Div asr r1, r0, #0x1f asr r3, r4, #0x1f add r2, r4, #0x0 @@ -52868,7 +52868,7 @@ _0201EE6C: neg r2, r3 str r0, [sp, #0x10] add r0, r4, #0x0 - blx FUN_020C823C + blx G3i_OrthoW_ ldr r1, _0201EEE8 ; =0x021CED98 mov r0, #0x50 ldr r2, [r1, #0x7c] @@ -52962,12 +52962,12 @@ FUN_0201EF70: ; 0x0201EF70 add r0, #0x14 add r1, r5, #0x0 add r2, r0, #0x0 - blx FUN_020C5634 + blx VEC_Add add r4, #0x20 add r0, r4, #0x0 add r1, r5, #0x0 add r2, r4, #0x0 - blx FUN_020C5634 + blx VEC_Add pop {r3-r5, pc} thumb_func_start FUN_0201EF90 @@ -53489,7 +53489,7 @@ FUN_0201F318: ; 0x0201F318 bl ErrorHandling _0201F324: add r0, sp, #0x0 - blx FUN_020C3F14 + blx MTX_Identity33_ add r0, r5, #0x0 add r0, #0xbc ldr r4, [r0, #0x0] @@ -54907,7 +54907,7 @@ _0201FD0C: ldr r0, [r4, r1] add r1, r1, #0x4 add r1, r4, r1 - blx FUN_020AFD94 + blx thunk_FUN_020afda0_2 mov r0, #0x12 mov r1, #0x1 lsl r0, r0, #0x4 @@ -55887,7 +55887,7 @@ FUN_020203CC: ; 0x020203CC add r0, r4, #0x0 mov r1, #0x0 lsl r2, r2, #0xa - blx FUN_020C93BC + blx GX_LoadOAM_2 add r0, r4, #0x0 bl FUN_02016A18 pop {r4, pc} @@ -55909,7 +55909,7 @@ FUN_02020404: ; 0x02020404 add r0, r4, #0x0 mov r1, #0x0 lsl r2, r2, #0xa - blx FUN_020C9354 + blx GXS_LoadOAM_2 add r0, r4, #0x0 bl FUN_02016A18 pop {r4, pc} @@ -56194,7 +56194,7 @@ FUN_02020618: ; 0x02020618 ldr r0, [r5, r0] add r1, #0xb4 add r2, #0xd8 - blx FUN_020B2780 + blx thunk_FUN_020b5040 mov r0, #0x45 lsl r0, r0, #0x2 ldr r0, [r5, r0] @@ -60152,10 +60152,10 @@ _020222A8: .word 0x021C59BC thumb_func_start FUN_020222AC FUN_020222AC: ; 0x020222AC - ldr r3, _020222B0 ; =FUN_020C7E0C + ldr r3, _020222B0 ; =G3X_ResetMtxStack_2 bx r3 .balign 4 -_020222B0: .word FUN_020C7E0C +_020222B0: .word G3X_ResetMtxStack_2 thumb_func_start FUN_020222B4 FUN_020222B4: ; 0x020222B4 @@ -60243,7 +60243,7 @@ FUN_02022318: ; 0x02022318 add r4, r0, #0x0 str r6, [r4, #0x0] blx FUN_020BB7F4 - blx FUN_020C7D28 + blx G3X_InitMtxStack mov r1, #0x2 ldr r0, _020223B8 ; =0x04000540 cmp r7, #0x0 @@ -60359,13 +60359,13 @@ FUN_020223D4: ; 0x020223D4 add r1, r0, #0x0 add r2, r0, #0x0 add r3, r0, #0x0 - blx FUN_020C7C28 + blx G3X_SetFog mov r0, #0x0 ldr r2, _02022444 ; =0x00007FFF add r1, r0, #0x0 mov r3, #0x3f str r0, [sp, #0x0] - blx FUN_020C7B3C + blx G3X_SetClearColor ldr r1, _02022448 ; =0xBFFF0000 ldr r0, _0202244C ; =0x04000580 str r1, [r0, #0x0] @@ -98748,9 +98748,9 @@ FUN_0203380C: ; 0x0203380C bne _0203382A ldr r1, _0203382C ; =0x4144414A add r0, r4, #0x0 - blx FUN_02096FF4 + blx thunk_FUN_02097190 add r0, r4, #0x0 - blx FUN_02096E90 + blx thunk_FUN_02096e4c _0203382A: pop {r4, pc} .balign 4 @@ -99234,7 +99234,7 @@ _02033C06: ldr r0, _02033CB4 ; =0x00300010 add r7, r1, #0x0 and r7, r0 - blx FUN_020C5DBC + blx GX_GetBankForOBJ b _02033C2C _02033C1E: ldr r0, _02033CB8 ; =0x04001000 @@ -99242,7 +99242,7 @@ _02033C1E: ldr r0, _02033CB4 ; =0x00300010 add r7, r1, #0x0 and r7, r0 - blx FUN_020C5D4C + blx GX_GetBankForSubOBJ _02033C2C: cmp r7, #0x10 beq _02033C38 @@ -99423,14 +99423,14 @@ FUN_02033D3C: ; 0x02033D3C add r1, r4, #0x0 ldr r0, [r0, #0xc] mov r2, #0x20 - blx FUN_020C9480 + blx GX_LoadOBJPltt_2 b _02033D8C _02033D80: ldr r0, [sp, #0x0] add r1, r4, #0x0 ldr r0, [r0, #0xc] mov r2, #0x20 - blx FUN_020C9418 + blx GXS_LoadOBJPltt_2 _02033D8C: ldr r0, [sp, #0x4] bl FUN_02016A18 @@ -99478,7 +99478,7 @@ _02033DC8: ldr r0, _02033E64 ; =0x00300010 add r4, r1, #0x0 and r4, r0 - blx FUN_020C5DBC + blx GX_GetBankForOBJ b _02033E00 _02033DF0: mov r0, #0x1 @@ -99487,7 +99487,7 @@ _02033DF0: ldr r0, _02033E64 ; =0x00300010 add r4, r1, #0x0 and r4, r0 - blx FUN_020C5DBC + blx GX_GetBankForOBJ _02033E00: cmp r4, #0x10 beq _02033E0C @@ -99529,14 +99529,14 @@ _02033E34: mov r2, #0x2 ldr r0, [r0, #0x14] lsl r2, r2, #0x8 - blx FUN_020C92F4 + blx GX_LoadOBJ_2 b _02033E52 _02033E46: ldr r0, [sp, #0x0] mov r2, #0x2 ldr r0, [r0, #0x14] lsl r2, r2, #0x8 - blx FUN_020C9294 + blx GXS_LoadOBJ_2 _02033E52: ldr r0, [sp, #0x4] bl FUN_02016A18 diff --git a/asm/unk_02046030.s b/asm/unk_02046030.s index 7d95c5dd5..edfe710f7 100644 --- a/asm/unk_02046030.s +++ b/asm/unk_02046030.s @@ -10700,7 +10700,7 @@ FUN_0204B450: ; 0x0204B450 ldr r0, [r3, #0x0] str r0, [r2, #0x0] add r0, sp, #0x0 - blx FUN_020C3F14 + blx MTX_Identity33_ ldr r0, [r5, #0x4] add r1, r4, #0x0 ldr r0, [r0, #0x18] @@ -84084,14 +84084,14 @@ FUN_0206DE4C: ; 0x0206DE4C mov r1, #0x0 mov r2, #0xe mov r3, #0xb - blx FUN_020C74DC + blx G2x_SetBlendAlpha_ mov r0, #0x8 str r0, [sp, #0x0] ldr r0, _0206DE74 ; =0x04001050 mov r1, #0x0 mov r2, #0xe mov r3, #0x7 - blx FUN_020C74DC + blx G2x_SetBlendAlpha_ pop {r3, pc} .balign 4 _0206DE70: .word 0x04000050 @@ -84155,13 +84155,13 @@ FUN_0206DE94: ; 0x0206DE94 add r1, r0, #0x0 add r2, r0, #0x0 add r3, r0, #0x0 - blx FUN_020C7C28 + blx G3X_SetFog mov r0, #0x0 ldr r2, _0206DF0C ; =0x00007FFF add r1, r0, #0x0 mov r3, #0x3f str r0, [sp, #0x0] - blx FUN_020C7B3C + blx G3X_SetClearColor ldr r1, _0206DF10 ; =0xBFFF0000 ldr r0, _0206DF14 ; =0x04000580 str r1, [r0, #0x0] @@ -102890,7 +102890,7 @@ FUN_020774B8: ; 0x020774B8 ldr r1, _020774E8 ; =0x000057E0 add r6, r3, #0x0 lsl r2, r2, #0x8 - blx FUN_020C92F4 + blx GX_LoadOBJ_2 ldr r4, [r4, #0xc] add r0, r5, #0x0 add r1, r6, #0x0 @@ -102900,7 +102900,7 @@ FUN_020774B8: ; 0x020774B8 add r0, r4, r0 mov r1, #0xc0 mov r2, #0x20 - blx FUN_020C9480 + blx GX_LoadOBJPltt_2 pop {r4-r6, pc} nop _020774E8: .word 0x000057E0 @@ -106027,7 +106027,7 @@ _02078E52: add r0, sp, #0x0 mov r1, #0x3a mov r2, #0x2 - blx FUN_020C9480 + blx GX_LoadOBJPltt_2 pop {r3, pc} thumb_func_start FUN_02078E7C @@ -106220,7 +106220,7 @@ _02078FD0: add r0, r5, #0x0 lsl r2, r2, #0x8 lsl r1, r1, #0x5 - blx FUN_020C9294 + blx GXS_LoadOBJ_2 add r0, r4, #0x1 lsl r0, r0, #0x10 lsr r4, r0, #0x10 @@ -106260,7 +106260,7 @@ _02079012: add r0, r7, #0x0 lsl r1, r1, #0x5 mov r2, #0x80 - blx FUN_020C9294 + blx GXS_LoadOBJ_2 add r0, r5, #0x1 lsl r0, r0, #0x10 lsr r5, r0, #0x10 @@ -106854,7 +106854,7 @@ _02079470: mov r1, #0x0 mov r2, #0x7 str r3, [sp, #0x0] - blx FUN_020C74DC + blx G2x_SetBlendAlpha_ mov r0, #0xd3 lsl r0, r0, #0x2 ldr r0, [r4, r0] @@ -108459,7 +108459,7 @@ FUN_0207A188: ; 0x0207A188 mov r1, #0x1 mov r2, #0x1e mov r3, #0x17 - blx FUN_020C74DC + blx G2x_SetBlendAlpha_ pop {r3, pc} .balign 4 _0207A19C: .word 0x04000050 @@ -118029,8 +118029,8 @@ FUN_0207EF6C: ; 0x0207EF6C push {r3-r4, lr} sub sp, #0x4 blx FUN_020BB7F4 - blx FUN_020C7E94 - blx FUN_020C7D28 + blx G3X_Init + blx G3X_InitMtxStack ldr r0, _0207EFEC ; =0x04000060 ldr r1, _0207EFF0 ; =0xFFFFCFFD ldrh r2, [r0, #0x0] @@ -118060,13 +118060,13 @@ FUN_0207EF6C: ; 0x0207EF6C add r1, r0, #0x0 add r2, r0, #0x0 add r3, r0, #0x0 - blx FUN_020C7C28 + blx G3X_SetFog mov r0, #0x0 ldr r2, _0207EFF8 ; =0x00007FFF add r1, r0, #0x0 mov r3, #0x3f str r0, [sp, #0x0] - blx FUN_020C7B3C + blx G3X_SetClearColor ldr r1, _0207EFFC ; =0x04000540 mov r0, #0x0 str r0, [r1, #0x0] @@ -133167,14 +133167,14 @@ FUN_0208643C: ; 0x0208643C mov r1, #0x0 mov r2, #0xe mov r3, #0xb - blx FUN_020C74DC + blx G2x_SetBlendAlpha_ mov r0, #0x8 str r0, [sp, #0x0] ldr r0, _02086464 ; =0x04001050 mov r1, #0x0 mov r2, #0xe mov r3, #0x7 - blx FUN_020C74DC + blx G2x_SetBlendAlpha_ pop {r3, pc} .balign 4 _02086460: .word 0x04000050 @@ -133239,13 +133239,13 @@ FUN_02086488: ; 0x02086488 add r1, r0, #0x0 add r2, r0, #0x0 add r3, r0, #0x0 - blx FUN_020C7C28 + blx G3X_SetFog mov r0, #0x0 ldr r2, _02086500 ; =0x00007FFF add r1, r0, #0x0 mov r3, #0x3f str r0, [sp, #0x0] - blx FUN_020C7B3C + blx G3X_SetClearColor ldr r1, _02086504 ; =0xBFFF0000 ldr r0, _02086508 ; =0x04000580 str r1, [r0, #0x0] diff --git a/asm/unk_0208AC14.s b/asm/unk_0208AC14.s index 0b326bbe0..d434188d2 100644 --- a/asm/unk_0208AC14.s +++ b/asm/unk_0208AC14.s @@ -1824,12 +1824,12 @@ FUN_0208C4F4: ; 0x0208C4F4 bne _0208C5D4 add r1, sp, #0x90 add r0, r4, #0x14 - bl FUN_020C5288 + bl VEC_Normalize b _0208C604 _0208C5D4: add r1, sp, #0x90 add r0, r4, #0x8 - bl FUN_020C5288 + bl VEC_Normalize ldr r2, [sp, #0x90] ldr r1, [sp, #0x94] ldr r0, [sp, #0x98] @@ -2127,12 +2127,12 @@ FUN_0208C974: ; 0x0208C974 bne _0208CA50 add r1, sp, #0x90 add r0, r4, #0x14 - bl FUN_020C5288 + bl VEC_Normalize b _0208CA80 _0208CA50: add r1, sp, #0x90 add r0, r4, #0x8 - bl FUN_020C5288 + bl VEC_Normalize ldr r2, [sp, #0x90] ldr r1, [sp, #0x94] ldr r0, [sp, #0x98] @@ -2954,7 +2954,7 @@ _0208D5D4: _0208D678: add r0, sp, #0x18 mov r1, r0 - bl FUN_020C5288 + bl VEC_Normalize add r1, sp, #0x30 mov r0, r8 bl MI_Copy36B @@ -2972,7 +2972,7 @@ _0208D678: stmia r3, {r0-r2} mov r0, r3 mov r1, r3 - bl FUN_020C5288 + bl VEC_Normalize ldr r0, [r8, #0x20] ldr r1, [sp, #0x8] rsb r0, r0, #0x0 @@ -3118,7 +3118,7 @@ _0208D83C: _0208D900: add r0, sp, #0x18 mov r1, r0 - bl FUN_020C5288 + bl VEC_Normalize add r1, sp, #0x30 mov r0, r8 bl MI_Copy36B @@ -3136,7 +3136,7 @@ _0208D900: stmia r3, {r0-r2} mov r0, r3 mov r1, r3 - bl FUN_020C5288 + bl VEC_Normalize ldr r0, [r8, #0x20] ldr r1, [sp, #0x8] rsb r0, r0, #0x0 @@ -3406,7 +3406,7 @@ _0208DCB4: _0208DD58: add r0, sp, #0x18 mov r1, r0 - bl FUN_020C5288 + bl VEC_Normalize add r1, sp, #0x30 mov r0, r8 bl MI_Copy36B @@ -3424,7 +3424,7 @@ _0208DD58: stmia r3, {r0-r2} mov r0, r3 mov r1, r3 - bl FUN_020C5288 + bl VEC_Normalize ldr r0, [r8, #0x20] ldr r1, [sp, #0x8] rsb r0, r0, #0x0 @@ -3570,7 +3570,7 @@ _0208DF1C: _0208DFE0: add r0, sp, #0x18 mov r1, r0 - bl FUN_020C5288 + bl VEC_Normalize add r1, sp, #0x30 mov r0, r8 bl MI_Copy36B @@ -3588,7 +3588,7 @@ _0208DFE0: stmia r3, {r0-r2} mov r0, r3 mov r1, r3 - bl FUN_020C5288 + bl VEC_Normalize ldr r0, [r8, #0x20] ldr r1, [sp, #0x8] rsb r0, r0, #0x0 @@ -5302,7 +5302,7 @@ _0208F87C: add r0, sp, #0xb8 add r1, sp, #0xac str r2, [sp, #0xc0] - bl FUN_020C5288 + bl VEC_Normalize b _0208FA04 _0208F9C8: ldr r0, [r7, #0x8] @@ -5320,7 +5320,7 @@ _0208F9C8: _0208F9F8: add r0, r7, #0x8 add r1, sp, #0xac - bl FUN_020C5288 + bl VEC_Normalize _0208FA04: ldr r2, [sp, #0xac] ldr r1, [sp, #0x10] @@ -6273,7 +6273,7 @@ _020907AC: mov r2, r1, lsl #0x1 ldrsh r1, [r3, r12] ldrsh r2, [r3, r2] - blx FUN_020C3F38 + blx MTX_RotX33_ b _02090838 _020907DC: ldrh r1, [r0, #0x0] @@ -6286,7 +6286,7 @@ _020907DC: mov r2, r1, lsl #0x1 ldrsh r1, [r3, r12] ldrsh r2, [r3, r2] - blx FUN_020C3F54 + blx MTX_RotY33_ b _02090838 _0209080C: ldrh r1, [r0, #0x0] @@ -6299,7 +6299,7 @@ _0209080C: mov r2, r1, lsl #0x1 ldrsh r1, [r3, r12] ldrsh r2, [r3, r2] - blx FUN_020C3F70 + blx MTX_RotZ33_ _02090838: add r0, r4, #0x8 add r1, sp, #0x0 @@ -6522,7 +6522,7 @@ FUN_02090AF4: mov r2, r2, asr #0x8 str r2, [r0, #0x4] str lr, [r0, #0x8] - bl FUN_020C5288 + bl VEC_Normalize ldmia sp!, {r4,lr} bx lr .balign 4 @@ -6552,7 +6552,7 @@ FUN_02090B50: ; 0x02090B50 str r2, [r12, #0x0] mov r2, r2, asr #0x8 str r2, [r0, #0x8] - bl FUN_020C5288 + bl VEC_Normalize ldmia sp!, {r4,lr} bx lr .balign 4 diff --git a/asm/unk_020AF030.s b/asm/unk_020AF030.s index 10c6ffd82..80e6c2c02 100644 --- a/asm/unk_020AF030.s +++ b/asm/unk_020AF030.s @@ -5,10 +5,10 @@ arm_func_start GXS_LoadOBJ GXS_LoadOBJ: - ldr ip, _020AF038 ; =GXS_LoadOBJ2 + ldr ip, _020AF038 ; =GXS_LoadOBJ_2 bx r12 .balign 4 -_020AF038: .word GXS_LoadOBJ2 +_020AF038: .word GXS_LoadOBJ_2 arm_func_start GXS_LoadOAM GXS_LoadOAM: ; 0x020AF03C @@ -131,10 +131,10 @@ _020AF12C: .word GXS_LoadBG0Char_2 arm_func_start GX_LoadOBJ GX_LoadOBJ: ; 0x020AF130 - ldr ip, _020AF138 ; =GX_LoadOBJ2 + ldr ip, _020AF138 ; =GX_LoadOBJ_2 bx r12 .balign 4 -_020AF138: .word GX_LoadOBJ2 +_020AF138: .word GX_LoadOBJ_2 arm_func_start GX_LoadOAM GX_LoadOAM: ; 0x020AF13C @@ -3002,13 +3002,13 @@ _020B15D4: ldr r0, [r7, #0x14] ldr r2, [r7, #0x10] mov r1, r6 - bl GX_LoadOBJ2 + bl GX_LoadOBJ_2 b _020B15F8 _020B15E8: ldr r0, [r7, #0x14] ldr r2, [r7, #0x10] mov r1, r6 - bl GXS_LoadOBJ2 + bl GXS_LoadOBJ_2 _020B15F8: ldr r0, [r7, #0x8] cmp r0, #0x0 @@ -3196,13 +3196,13 @@ _020B1814: ldr r0, [r7, #0x14] ldr r2, [r7, #0x10] mov r1, r6 - bl GX_LoadOBJ2 + bl GX_LoadOBJ_2 b _020B1838 _020B1828: ldr r0, [r7, #0x14] ldr r2, [r7, #0x10] mov r1, r6 - bl GXS_LoadOBJ2 + bl GXS_LoadOBJ_2 _020B1838: ldr r0, [r7, #0x8] cmp r0, #0x0 @@ -31352,8 +31352,8 @@ _020C9278: .balign 4 _020C9290: .word 0x02106814 - arm_func_start GXS_LoadOBJ2 -GXS_LoadOBJ2: ; 0x020C9294 + arm_func_start GXS_LoadOBJ_2 +GXS_LoadOBJ_2: ; 0x020C9294 stmdb sp!, {r4,lr} ldr r3, _020C92F0 ; =0x02106814 mov r4, r0 @@ -31381,8 +31381,8 @@ _020C92D8: .balign 4 _020C92F0: .word 0x02106814 - arm_func_start GX_LoadOBJ2 -GX_LoadOBJ2: ; 0x020C92F4 + arm_func_start GX_LoadOBJ_2 +GX_LoadOBJ_2: ; 0x020C92F4 stmdb sp!, {r4,lr} ldr r3, _020C9350 ; =0x02106814 mov r4, r0 diff --git a/global.inc b/global.inc index 837433363..4da26853f 100644 --- a/global.inc +++ b/global.inc @@ -50,20 +50,20 @@ .extern FUN_02096CCC .extern FUN_02096D2C .extern FUN_02096DA0 -.extern FUN_02096E90 +.extern thunk_FUN_02096e4c .extern FUN_02096F18 .extern FUN_02096F80 .extern FUN_02096FB0 -.extern FUN_02096FF4 +.extern thunk_FUN_02097190 .extern FUN_0209700C .extern FUN_020973B4 .extern FUN_020ADDC0 .extern FUN_020ADDC8 .extern FUN_020ADDF0 .extern FUN_020ADE2C -.extern FUN_020ADFA0 -.extern FUN_020ADFDC -.extern FUN_020ADFE8 +.extern tempName_NNS_FndAllocFromExpHeapEx +.extern thunk_FUN_020adc8c +.extern tempName_NNS_FndCreateExpHeapEx .extern FUN_020AE82C .extern FUN_020AE8CC .extern FUN_020AE918 @@ -80,8 +80,8 @@ .extern FUN_020AFBA8 .extern FUN_020AFBFC .extern FUN_020AFC04 -.extern FUN_020AFD88 -.extern FUN_020AFD94 +.extern thunk_FUN_020afda0 +.extern thunk_FUN_020afda0_2 .extern FUN_020AFEB8 .extern FUN_020AFFD8 .extern FUN_020B0030 @@ -116,7 +116,7 @@ .extern FUN_020B224C .extern FUN_020B23D8 .extern FUN_020B242C -.extern FUN_020B2780 +.extern thunk_FUN_020b5040 .extern FUN_020B2794 .extern FUN_020B28B4 .extern FUN_020B2A08 @@ -212,113 +212,113 @@ .extern FUN_020C39CC .extern FUN_020C3EA4 .extern FUN_020C3EB0 -.extern FUN_020C3F14 -.extern FUN_020C3F38 -.extern FUN_020C3F54 -.extern FUN_020C3F70 -.extern FUN_020C400C -.extern FUN_020C504C -.extern FUN_020C50B8 -.extern FUN_020C5288 -.extern FUN_020C53C8 +.extern MTX_Identity33_ +.extern MTX_RotX33_ +.extern MTX_RotY33_ +.extern MTX_RotZ33_ +.extern MTX_Concat33 +.extern FX_Sqrt +.extern FX_Div +.extern VEC_Normalize +.extern VEC_Mag .extern VEC_DotProduct -.extern FUN_020C5600 -.extern FUN_020C5634 -.extern FUN_020C5668 -.extern FUN_020C5974 -.extern FUN_020C5978 -.extern FUN_020C59A4 -.extern FUN_020C59C0 -.extern FUN_020C5A34 -.extern FUN_020C5A80 -.extern FUN_020C5AC8 -.extern FUN_020C5AF8 -.extern FUN_020C5B28 -.extern FUN_020C5D2C -.extern FUN_020C5D4C -.extern FUN_020C5D9C -.extern FUN_020C5DBC -.extern FUN_020C5E54 -.extern FUN_020C600C +.extern VEC_Subtract +.extern VEC_Add +.extern FX_Modf +.extern FX_Init +.extern GXx_SetMasterBrightness_ +.extern GXS_SetGraphicsMode +.extern GX_SetGraphicsMode +.extern GX_DispOn +.extern GX_DispOff +.extern GX_VBlankIntr +.extern GX_HBlankIntr +.extern GX_Init +.extern GX_GetBankForSubOBJExtPltt +.extern GX_GetBankForSubOBJ +.extern GX_GetBankForOBJExtPltt +.extern GX_GetBankForOBJ +.extern GX_DisableBankForLCDC +.extern GX_ResetBankForSubOBJ .extern FUN_020C6034 .extern FUN_020C605C -.extern FUN_020C6070 -.extern FUN_020C6098 -.extern FUN_020C60AC -.extern FUN_020C60C0 -.extern FUN_020C60E4 -.extern FUN_020C6108 -.extern FUN_020C611C -.extern FUN_020C6168 -.extern FUN_020C61F4 -.extern FUN_020C6280 -.extern FUN_020C62FC -.extern FUN_020C63A8 -.extern FUN_020C65C0 -.extern FUN_020C66B4 -.extern FUN_020C68B8 -.extern FUN_020C6970 -.extern FUN_020C6A84 -.extern FUN_020C6BF0 -.extern FUN_020C6F60 -.extern FUN_020C6FB0 -.extern FUN_020C7010 -.extern FUN_020C7058 -.extern FUN_020C70B0 -.extern FUN_020C70D0 -.extern FUN_020C7104 -.extern FUN_020C7124 -.extern FUN_020C74B8 -.extern FUN_020C74DC -.extern FUN_020C74F8 -.extern FUN_020C7A14 -.extern FUN_020C7B3C -.extern FUN_020C7C28 -.extern FUN_020C7D28 -.extern FUN_020C7E0C -.extern FUN_020C7E94 -.extern FUN_020C7FF0 -.extern FUN_020C802C -.extern FUN_020C8068 -.extern FUN_020C80A4 -.extern FUN_020C823C -.extern FUN_020C8538 -.extern FUN_020C8728 -.extern FUN_020C8774 -.extern FUN_020C87E8 -.extern FUN_020C880C -.extern FUN_020C8858 -.extern FUN_020C88CC -.extern FUN_020C88F0 -.extern FUN_020C8948 -.extern FUN_020C89BC -.extern FUN_020C8A2C -.extern FUN_020C8A90 -.extern FUN_020C8B10 -.extern FUN_020C8C14 -.extern FUN_020C8C7C -.extern FUN_020C8CE4 -.extern FUN_020C8D4C -.extern FUN_020C8DB4 -.extern FUN_020C8E1C -.extern FUN_020C8E84 -.extern FUN_020C8EEC -.extern FUN_020C8F54 -.extern FUN_020C8FBC -.extern FUN_020C9024 -.extern FUN_020C908C -.extern FUN_020C90F4 -.extern FUN_020C915C -.extern FUN_020C91C4 -.extern FUN_020C922C -.extern FUN_020C9294 -.extern FUN_020C92F4 -.extern FUN_020C9354 -.extern FUN_020C93BC -.extern FUN_020C9418 -.extern FUN_020C9480 -.extern FUN_020C94E8 -.extern FUN_020C9550 +.extern GX_ResetBankForSubBG +.extern GX_ResetBankForTexPltt +.extern GX_ResetBankForTex +.extern GX_ResetBankForOBJExtPltt +.extern GX_ResetBankForBGExtPltt +.extern GX_ResetBankForOBJ +.extern GX_ResetBankForBG +.extern GX_SetBankForSubOBJExtPltt +.extern GX_SetBankForSubBGExtPltt +.extern GX_SetBankForSubOBJ +.extern GX_SetBankForSubBG +.extern GX_SetBankForLCDC +.extern GX_SetBankForTexPltt +.extern GX_SetBankForTex +.extern GX_SetBankForOBJExtPltt +.extern GX_SetBankForBGExtPltt +.extern GX_SetBankForOBJ +.extern GX_SetBankForBG +.extern G2S_GetBG3CharPtr +.extern G2_GetBG3CharPtr +.extern G2S_GetBG2CharPtr +.extern G2_GetBG2CharPtr +.extern G2S_GetBG1CharPtr +.extern G2_GetBG1CharPtr +.extern G2S_GetBG0CharPtr +.extern G2_GetBG0CharPtr +.extern G2x_SetBlendBrightness_ +.extern G2x_SetBlendAlpha_ +.extern G2x_SetBGyAffine_ +.extern G3X_GetBoxTestResult +.extern G3X_SetClearColor +.extern G3X_SetFog +.extern G3X_InitMtxStack +.extern G3X_ResetMtxStack_2 +.extern G3X_Init +.extern G3_RotZ +.extern G3_RotY +.extern G3_RotX +.extern G3i_LookAt_ +.extern G3i_OrthoW_ +.extern G3i_PerspectiveW_ +.extern GXS_EndLoadOBJExtPltt +.extern GXS_LoadOBJExtPltt +.extern GXS_BeginLoadOBJExtPltt +.extern GXS_EndLoadBGExtPltt +.extern GXS_LoadBGExtPltt +.extern GXS_BeginLoadBGExtPltt +.extern GX_EndLoadOBJExtPltt +.extern GX_LoadOBJExtPltt +.extern GX_BeginLoadOBJExtPltt +.extern GX_EndLoadBGExtPltt +.extern GX_LoadBGExtPltt +.extern GX_BeginLoadBGExtPltt +.extern GXS_LoadBG3Char_2 +.extern GX_LoadBG3Char_2 +.extern GXS_LoadBG2Char_2 +.extern GX_LoadBG2Char_2 +.extern GXS_LoadBG1Char_2 +.extern GX_LoadBG1Char_2 +.extern GXS_LoadBG0Char_2 +.extern GX_LoadBG0Char_2 +.extern GXS_LoadBG3Scr_3 +.extern GX_LoadBG3Scr_3 +.extern GXS_LoadBG2Scr_3 +.extern GX_LoadBG2Scr_3 +.extern GXS_LoadBG1Scr_2 +.extern GX_LoadBG1Scr_2 +.extern GXS_LoadBG0Scr_2 +.extern GX_LoadBG0Scr_2 +.extern GXS_LoadOBJ_2 +.extern GX_LoadOBJ_2 +.extern GXS_LoadOAM_2 +.extern GX_LoadOAM_2 +.extern GXS_LoadOBJPltt_2 +.extern GX_LoadOBJPltt_2 +.extern GXS_LoadBGPltt_2 +.extern GX_LoadBGPltt_2 .extern OS_WaitIrq .extern OS_DisableIrqMask .extern OS_EnableIrqMask diff --git a/undefined_syms.txt b/undefined_syms.txt index 723142167..c30f31da0 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -6,290 +6,7 @@ FUN_01FF84E4 = 0x01FF84E4; FUN_01FF8544 = 0x01FF8544; FUN_01FF857C = 0x01FF857C; FUN_01FF85F0 = 0x01FF85F0; -FUN_0208ACEC = 0x0208ACEC; -FUN_0208AD80 = 0x0208AD80; -FUN_0208AF80 = 0x0208AF80; -FUN_0208AF94 = 0x0208AF94; -FUN_0208AFA8 = 0x0208AFA8; -FUN_0208B05C = 0x0208B05C; -FUN_0208B128 = 0x0208B128; -FUN_0208B4A0 = 0x0208B4A0; -FUN_02090CC8 = 0x02090CC8; -FUN_02090DB8 = 0x02090DB8; -FUN_02096B14 = 0x02096B14; -FUN_02096B78 = 0x02096B78; -FUN_02096CCC = 0x02096CCC; -FUN_02096D2C = 0x02096D2C; -FUN_02096DA0 = 0x02096DA0; -FUN_02096E90 = 0x02096E90; -FUN_02096F18 = 0x02096F18; -FUN_02096F80 = 0x02096F80; -FUN_02096FB0 = 0x02096FB0; -FUN_02096FF4 = 0x02096FF4; -FUN_0209700C = 0x0209700C; -FUN_020973B4 = 0x020973B4; -FUN_020ADDC0 = 0x020ADDC0; -FUN_020ADDC8 = 0x020ADDC8; -FUN_020ADDF0 = 0x020ADDF0; -FUN_020ADE2C = 0x020ADE2C; -FUN_020ADFA0 = 0x020ADFA0; -FUN_020ADFDC = 0x020ADFDC; -FUN_020ADFE8 = 0x020ADFE8; -FUN_020AE82C = 0x020AE82C; -FUN_020AE8CC = 0x020AE8CC; -FUN_020AE918 = 0x020AE918; -FUN_020AEB70 = 0x020AEB70; -FUN_020AEC7C = 0x020AEC7C; -FUN_020AEC98 = 0x020AEC98; -FUN_020AEE40 = 0x020AEE40; -FUN_020AEEB8 = 0x020AEEB8; -FUN_020AEF1C = 0x020AEF1C; -FUN_020AF894 = 0x020AF894; -FUN_020AF9C4 = 0x020AF9C4; -FUN_020AFA28 = 0x020AFA28; -FUN_020AFA80 = 0x020AFA80; -FUN_020AFBA8 = 0x020AFBA8; -FUN_020AFBFC = 0x020AFBFC; -FUN_020AFC04 = 0x020AFC04; -FUN_020AFD88 = 0x020AFD88; -FUN_020AFD94 = 0x020AFD94; -FUN_020AFEB8 = 0x020AFEB8; -FUN_020AFFD8 = 0x020AFFD8; -FUN_020B0030 = 0x020B0030; -FUN_020B0088 = 0x020B0088; -FUN_020B00F0 = 0x020B00F0; -FUN_020B0138 = 0x020B0138; -FUN_020B0180 = 0x020B0180; -FUN_020B0250 = 0x020B0250; -FUN_020B02C8 = 0x020B02C8; -FUN_020B0448 = 0x020B0448; -FUN_020B0870 = 0x020B0870; -FUN_020B0BB0 = 0x020B0BB0; -FUN_020B0C7C = 0x020B0C7C; -FUN_020B0E34 = 0x020B0E34; -FUN_020B0FC0 = 0x020B0FC0; -FUN_020B10E8 = 0x020B10E8; -FUN_020B1240 = 0x020B1240; -FUN_020B1340 = 0x020B1340; -FUN_020B1528 = 0x020B1528; -FUN_020B1768 = 0x020B1768; -FUN_020B19C4 = 0x020B19C4; -FUN_020B19DC = 0x020B19DC; -FUN_020B1A14 = 0x020B1A14; -FUN_020B1A24 = 0x020B1A24; -FUN_020B1EA4 = 0x020B1EA4; -FUN_020B1EC4 = 0x020B1EC4; -FUN_020B1EE4 = 0x020B1EE4; -FUN_020B1EFC = 0x020B1EFC; -FUN_020B1F80 = 0x020B1F80; -FUN_020B20C8 = 0x020B20C8; -FUN_020B2194 = 0x020B2194; -FUN_020B224C = 0x020B224C; -FUN_020B23D8 = 0x020B23D8; -FUN_020B242C = 0x020B242C; -FUN_020B2780 = 0x020B2780; -FUN_020B2794 = 0x020B2794; -FUN_020B28B4 = 0x020B28B4; -FUN_020B2A08 = 0x020B2A08; -FUN_020B2B08 = 0x020B2B08; -FUN_020B2B58 = 0x020B2B58; -FUN_020B2D9C = 0x020B2D9C; -FUN_020B317C = 0x020B317C; -FUN_020B31F0 = 0x020B31F0; -FUN_020B326C = 0x020B326C; -FUN_020B3334 = 0x020B3334; -FUN_020B3390 = 0x020B3390; -FUN_020B33A0 = 0x020B33A0; -FUN_020B4358 = 0x020B4358; -FUN_020B43A4 = 0x020B43A4; -FUN_020B442C = 0x020B442C; -FUN_020B4568 = 0x020B4568; -FUN_020B4F38 = 0x020B4F38; -FUN_020B502C = 0x020B502C; -FUN_020B772C = 0x020B772C; -FUN_020B7790 = 0x020B7790; -FUN_020B7C58 = 0x020B7C58; -FUN_020B7C78 = 0x020B7C78; -FUN_020B7CDC = 0x020B7CDC; -FUN_020B7CE4 = 0x020B7CE4; -FUN_020B7CF0 = 0x020B7CF0; -FUN_020B7D28 = 0x020B7D28; -FUN_020B7DFC = 0x020B7DFC; -FUN_020B7E10 = 0x020B7E10; -FUN_020B7E1C = 0x020B7E1C; -FUN_020B80B4 = 0x020B80B4; -FUN_020B844C = 0x020B844C; -FUN_020B8474 = 0x020B8474; -FUN_020B849C = 0x020B849C; -FUN_020BAC98 = 0x020BAC98; -FUN_020BAFB8 = 0x020BAFB8; -FUN_020BB1C0 = 0x020BB1C0; -FUN_020BB394 = 0x020BB394; -FUN_020BB59C = 0x020BB59C; -FUN_020BB7F4 = 0x020BB7F4; -FUN_020BC0FC = 0x020BC0FC; -FUN_020BC13C = 0x020BC13C; -FUN_020BC2A0 = 0x020BC2A0; -FUN_020C0174 = 0x020C0174; -FUN_020C01A0 = 0x020C01A0; -FUN_020C01D0 = 0x020C01D0; -FUN_020C03B8 = 0x020C03B8; -FUN_020C041C = 0x020C041C; -FUN_020C044C = 0x020C044C; -FUN_020C04DC = 0x020C04DC; -FUN_020C0510 = 0x020C0510; -FUN_020C054C = 0x020C054C; -FUN_020C0670 = 0x020C0670; -FUN_020C0688 = 0x020C0688; -FUN_020C0DD4 = 0x020C0DD4; -FUN_020C0E14 = 0x020C0E14; -FUN_020C0E7C = 0x020C0E7C; -FUN_020C0EA4 = 0x020C0EA4; -FUN_020C0EF4 = 0x020C0EF4; -FUN_020C0F30 = 0x020C0F30; -FUN_020C0F50 = 0x020C0F50; -FUN_020C0F68 = 0x020C0F68; -FUN_020C0F80 = 0x020C0F80; -FUN_020C0F8C = 0x020C0F8C; -FUN_020C0F9C = 0x020C0F9C; -FUN_020C0FDC = 0x020C0FDC; -FUN_020C1040 = 0x020C1040; -FUN_020C10A4 = 0x020C10A4; -FUN_020C1148 = 0x020C1148; -FUN_020C1180 = 0x020C1180; -FUN_020C1E58 = 0x020C1E58; -FUN_020C1E68 = 0x020C1E68; -FUN_020C1EA4 = 0x020C1EA4; -FUN_020C1F54 = 0x020C1F54; -FUN_020C1FA4 = 0x020C1FA4; -FUN_020C1FF0 = 0x020C1FF0; -FUN_020C20DC = 0x020C20DC; -FUN_020C2104 = 0x020C2104; -FUN_020C217C = 0x020C217C; -FUN_020C226C = 0x020C226C; -FUN_020C22D0 = 0x020C22D0; -FUN_020C23FC = 0x020C23FC; -FUN_020C26F8 = 0x020C26F8; -FUN_020C2828 = 0x020C2828; -FUN_020C290C = 0x020C290C; -FUN_020C2A94 = 0x020C2A94; -FUN_020C35E0 = 0x020C35E0; -FUN_020C360C = 0x020C360C; -FUN_020C3640 = 0x020C3640; -FUN_020C3674 = 0x020C3674; -FUN_020C36A8 = 0x020C36A8; -FUN_020C3910 = 0x020C3910; -FUN_020C3980 = 0x020C3980; -FUN_020C39CC = 0x020C39CC; -FUN_020C3EA4 = 0x020C3EA4; -FUN_020C3EB0 = 0x020C3EB0; -FUN_020C3F14 = 0x020C3F14; -FUN_020C3F38 = 0x020C3F38; -FUN_020C3F54 = 0x020C3F54; -FUN_020C3F70 = 0x020C3F70; -FUN_020C400C = 0x020C400C; -FUN_020C504C = 0x020C504C; -FUN_020C50B8 = 0x020C50B8; -FUN_020C5288 = 0x020C5288; -FUN_020C53C8 = 0x020C53C8; -VEC_DotProduct = 0x020C5588; -FUN_020C5600 = 0x020C5600; -FUN_020C5634 = 0x020C5634; -FUN_020C5668 = 0x020C5668; -FUN_020C5974 = 0x020C5974; -FUN_020C5978 = 0x020C5978; -FUN_020C59A4 = 0x020C59A4; -FUN_020C59C0 = 0x020C59C0; -FUN_020C5A34 = 0x020C5A34; -FUN_020C5A80 = 0x020C5A80; -FUN_020C5AC8 = 0x020C5AC8; -FUN_020C5AF8 = 0x020C5AF8; -FUN_020C5B28 = 0x020C5B28; -FUN_020C5D2C = 0x020C5D2C; -FUN_020C5D4C = 0x020C5D4C; -FUN_020C5D9C = 0x020C5D9C; -FUN_020C5DBC = 0x020C5DBC; -FUN_020C5E54 = 0x020C5E54; -FUN_020C600C = 0x020C600C; -FUN_020C6034 = 0x020C6034; -FUN_020C605C = 0x020C605C; -FUN_020C6070 = 0x020C6070; -FUN_020C6098 = 0x020C6098; -FUN_020C60AC = 0x020C60AC; -FUN_020C60C0 = 0x020C60C0; -FUN_020C60E4 = 0x020C60E4; -FUN_020C6108 = 0x020C6108; -FUN_020C611C = 0x020C611C; -FUN_020C6168 = 0x020C6168; -FUN_020C61F4 = 0x020C61F4; -FUN_020C6280 = 0x020C6280; -FUN_020C62FC = 0x020C62FC; -FUN_020C63A8 = 0x020C63A8; -FUN_020C65C0 = 0x020C65C0; -FUN_020C66B4 = 0x020C66B4; -FUN_020C68B8 = 0x020C68B8; -FUN_020C6970 = 0x020C6970; -FUN_020C6A84 = 0x020C6A84; -FUN_020C6BF0 = 0x020C6BF0; -FUN_020C6F60 = 0x020C6F60; -FUN_020C6FB0 = 0x020C6FB0; -FUN_020C7010 = 0x020C7010; -FUN_020C7058 = 0x020C7058; -FUN_020C70B0 = 0x020C70B0; -FUN_020C70D0 = 0x020C70D0; -FUN_020C7104 = 0x020C7104; -FUN_020C7124 = 0x020C7124; -FUN_020C74B8 = 0x020C74B8; -FUN_020C74DC = 0x020C74DC; -FUN_020C74F8 = 0x020C74F8; -FUN_020C7A14 = 0x020C7A14; -FUN_020C7B3C = 0x020C7B3C; -FUN_020C7C28 = 0x020C7C28; -FUN_020C7D28 = 0x020C7D28; -FUN_020C7E0C = 0x020C7E0C; -FUN_020C7E94 = 0x020C7E94; -FUN_020C7FF0 = 0x020C7FF0; -FUN_020C802C = 0x020C802C; -FUN_020C8068 = 0x020C8068; -FUN_020C80A4 = 0x020C80A4; -FUN_020C823C = 0x020C823C; -FUN_020C8538 = 0x020C8538; -FUN_020C8728 = 0x020C8728; -FUN_020C8774 = 0x020C8774; -FUN_020C87E8 = 0x020C87E8; -FUN_020C880C = 0x020C880C; -FUN_020C8858 = 0x020C8858; -FUN_020C88CC = 0x020C88CC; -FUN_020C88F0 = 0x020C88F0; -FUN_020C8948 = 0x020C8948; -FUN_020C89BC = 0x020C89BC; -FUN_020C8A2C = 0x020C8A2C; -FUN_020C8A90 = 0x020C8A90; -FUN_020C8B10 = 0x020C8B10; -FUN_020C8C14 = 0x020C8C14; -FUN_020C8C7C = 0x020C8C7C; -FUN_020C8CE4 = 0x020C8CE4; -FUN_020C8D4C = 0x020C8D4C; -FUN_020C8DB4 = 0x020C8DB4; -FUN_020C8E1C = 0x020C8E1C; -FUN_020C8E84 = 0x020C8E84; -FUN_020C8EEC = 0x020C8EEC; -FUN_020C8F54 = 0x020C8F54; -FUN_020C8FBC = 0x020C8FBC; -FUN_020C9024 = 0x020C9024; -FUN_020C908C = 0x020C908C; -FUN_020C90F4 = 0x020C90F4; -FUN_020C915C = 0x020C915C; -FUN_020C91C4 = 0x020C91C4; -FUN_020C922C = 0x020C922C; -FUN_020C9294 = 0x020C9294; -FUN_020C92F4 = 0x020C92F4; -FUN_020C9354 = 0x020C9354; -FUN_020C93BC = 0x020C93BC; -FUN_020C9418 = 0x020C9418; -FUN_020C9480 = 0x020C9480; -FUN_020C94E8 = 0x020C94E8; -FUN_020C9550 = 0x020C9550; +FUN_02000B60 = 0x02000B60; gBacklightTop = 0x02106FA0; gBacklightTop_2 = 0x02106FA0; gUnknown2106FB8 = 0x02106FB8; @@ -428,6 +145,8 @@ FUN_021E856C = 0x021E856C; FUN_021E8588 = 0x021E8588; FUN_021E85E4 = 0x021E85E4; FUN_021E85FC = 0x021E85FC; +FUN_021EAE90 = 0x021EAE90; +FUN_021EB044 = 0x021EB044; FUN_021EC57C = 0x021EC57C; FUN_021EC71C = 0x021EC71C; FUN_021EC854 = 0x021EC854; @@ -736,30 +455,3 @@ FUN_022567E0 = 0x022567E0; SDK_AUTOLOAD_DTCM_START = 0x027E0000; SDK_STATIC_BSS_END = 0x021D74E0; gUnk027FFC20 = 0x027FFC20; -FUN_02000B60 = 0x02000B60; - -FUN_021EAE90 = 0x021EAE90; -FUN_021EB044 = 0x021EB044; - -FUN_020AF2E0 = 0x020AF2E0; -FUN_020AF2F4 = 0x020AF2F4; -FUN_020AF30C = 0x020AF30C; - -G3_LoadMtx43 = 0x020c7954; -G3_MultMtx43 = 0x020c7938; -MTX_Concat43 = 0x020c43d0; -MTX_MultVec33 = 0x020c3f88; -MTX_MultVec43 = 0x020c431c; -MTX_Scale43_ = 0x020c42c8; -VEC_CrossProduct = 0x020c549c; -VEC_Fx16CrossProduct = 0x020c5430; -VEC_Fx16DotProduct = 0x020c5538; -VEC_Fx16Normalize = 0x020c5134; - -GX_BeginLoadTex = 0x020c9a98; -GX_BeginLoadTexPltt = 0x020c987c; -GX_EndLoadTex = 0x020c98c4; -GX_EndLoadTexPltt = 0x020c97b0; -GX_LoadTex = 0x020c9934; -GX_LoadTexPltt = 0x020c9808; -MTX_Identity43_ = 0x020c426c; From a8561013dbfe0ddd5950dd4e5f9fbdae03bfc756 Mon Sep 17 00:00:00 2001 From: Demki Date: Fri, 24 Apr 2020 20:15:14 +0300 Subject: [PATCH 12/23] remove _2/_3 from the library functions --- asm/unk_020023C0.s | 8 +- asm/unk_02006864.s | 72 +++++----- asm/unk_02046030.s | 10 +- asm/unk_020AF030.s | 334 ++++++++++++++++++++++----------------------- global.inc | 50 +++---- 5 files changed, 237 insertions(+), 237 deletions(-) diff --git a/asm/unk_020023C0.s b/asm/unk_020023C0.s index f826c6c3e..2024d9d70 100644 --- a/asm/unk_020023C0.s +++ b/asm/unk_020023C0.s @@ -2690,25 +2690,25 @@ _020037A6: ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] mov r1, #0x0 - blx GX_LoadBGPltt_2 + blx GX_LoadBGPltt b _020038A4 _020037B2: ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] mov r1, #0x0 - blx GXS_LoadBGPltt_2 + blx GXS_LoadBGPltt b _020038A4 _020037BE: ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] mov r1, #0x0 - blx GX_LoadOBJPltt_2 + blx GX_LoadOBJPltt b _020038A4 _020037CA: ldr r0, [r4, #0x4] ldr r2, [r4, #0x8] mov r1, #0x0 - blx GXS_LoadOBJPltt_2 + blx GXS_LoadOBJPltt b _020038A4 _020037D6: blx GX_BeginLoadBGExtPltt diff --git a/asm/unk_02006864.s b/asm/unk_02006864.s index b2633b24e..dab6adfe0 100644 --- a/asm/unk_02006864.s +++ b/asm/unk_02006864.s @@ -15859,7 +15859,7 @@ FUN_0200DEF4: ; 0x0200DEF4 add r0, r4, #0x0 add r1, r7, #0x0 lsl r2, r2, #0x8 - blx GX_LoadOBJ_2 + blx GX_LoadOBJ add r0, r4, #0x0 bl FUN_02016A18 ldr r2, _0200DFC8 ; =0x00000162 @@ -15884,7 +15884,7 @@ FUN_0200DEF4: ; 0x0200DEF4 add r0, r4, #0x0 add r1, r5, #0x0 mov r2, #0x20 - blx GX_LoadOBJPltt_2 + blx GX_LoadOBJPltt add r0, r4, #0x0 bl FUN_02016A18 add sp, #0x28 @@ -16385,12 +16385,12 @@ FUN_0200E3BC: ; 0x0200E3BC bne _0200E3D2 mov r1, #0x0 mov r2, #0x2 - blx GX_LoadBGPltt_2 + blx GX_LoadBGPltt b _0200E3DA _0200E3D2: mov r1, #0x0 mov r2, #0x2 - blx GXS_LoadBGPltt_2 + blx GXS_LoadBGPltt _0200E3DA: ldr r0, _0200E41C ; =0x021C4740 mov r1, #0x1 @@ -16430,11 +16430,11 @@ FUN_0200E420: ; 0x0200E420 add r0, sp, #0x8 mov r1, #0x0 mov r2, #0x2 - blx GX_LoadBGPltt_2 + blx GX_LoadBGPltt add r0, sp, #0x8 mov r1, #0x0 mov r2, #0x2 - blx GXS_LoadBGPltt_2 + blx GXS_LoadBGPltt pop {r3} pop {r3} add sp, #0x10 @@ -24121,7 +24121,7 @@ _02011DC6: add r0, r7, #0x0 add r1, r6, #0x0 add r2, r4, #0x0 - blx GX_LoadOBJ_2 + blx GX_LoadOBJ mov r0, #0x1 str r6, [r5, #0x4] lsl r0, r0, #0x1a @@ -24132,7 +24132,7 @@ _02011E08: add r0, r7, #0x0 add r1, r6, #0x0 add r2, r4, #0x0 - blx GXS_LoadOBJ_2 + blx GXS_LoadOBJ ldr r0, _02011E4C ; =0x04001000 str r6, [r5, #0x8] ldr r1, [r0, #0x0] @@ -30499,7 +30499,7 @@ FUN_02014B10: ; 0x02014B10 ldr r1, [r4, #0xc] ldr r0, [r0, #0xc] ldr r2, [r4, #0x10] - blx GX_LoadBGPltt_2 + blx GX_LoadBGPltt b _02014B44 _02014B34: cmp r0, #0x4 @@ -30508,7 +30508,7 @@ _02014B34: ldr r1, [r4, #0xc] ldr r0, [r0, #0xc] ldr r2, [r4, #0x10] - blx GXS_LoadBGPltt_2 + blx GXS_LoadBGPltt _02014B44: add r0, r5, #0x0 bl FUN_0200CAB4 @@ -37340,49 +37340,49 @@ _02017D9A: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx GX_LoadBG0Scr_2 + blx GX_LoadBG0Scr pop {r3-r7, pc} _02017DA6: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx GX_LoadBG1Scr_2 + blx GX_LoadBG1Scr pop {r3-r7, pc} _02017DB2: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx GX_LoadBG2Scr_3 + blx GX_LoadBG2Scr pop {r3-r7, pc} _02017DBE: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx GX_LoadBG3Scr_3 + blx GX_LoadBG3Scr pop {r3-r7, pc} _02017DCA: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx GXS_LoadBG0Scr_2 + blx GXS_LoadBG0Scr pop {r3-r7, pc} _02017DD6: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx GXS_LoadBG1Scr_2 + blx GXS_LoadBG1Scr pop {r3-r7, pc} _02017DE2: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx GXS_LoadBG2Scr_3 + blx GXS_LoadBG2Scr pop {r3-r7, pc} _02017DEE: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx GXS_LoadBG3Scr_3 + blx GXS_LoadBG3Scr _02017DF8: pop {r3-r7, pc} .balign 4 @@ -37489,49 +37489,49 @@ _02017EB6: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx GX_LoadBG0Char_2 + blx GX_LoadBG0Char pop {r3-r7, pc} _02017EC2: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx GX_LoadBG1Char_2 + blx GX_LoadBG1Char pop {r3-r7, pc} _02017ECE: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx GX_LoadBG2Char_2 + blx GX_LoadBG2Char pop {r3-r7, pc} _02017EDA: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx GX_LoadBG3Char_2 + blx GX_LoadBG3Char pop {r3-r7, pc} _02017EE6: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx GXS_LoadBG0Char_2 + blx GXS_LoadBG0Char pop {r3-r7, pc} _02017EF2: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx GXS_LoadBG1Char_2 + blx GXS_LoadBG1Char pop {r3-r7, pc} _02017EFE: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx GXS_LoadBG2Char_2 + blx GXS_LoadBG2Char pop {r3-r7, pc} _02017F0A: add r0, r4, #0x0 add r1, r5, #0x0 add r2, r6, #0x0 - blx GXS_LoadBG3Char_2 + blx GXS_LoadBG3Char _02017F14: pop {r3-r7, pc} .balign 4 @@ -37629,13 +37629,13 @@ FUN_02017FB4: ; 0x02017FB4 add r0, r5, #0x0 add r1, r7, #0x0 add r2, r4, #0x0 - blx GX_LoadBGPltt_2 + blx GX_LoadBGPltt pop {r3-r7, pc} _02017FD6: add r0, r5, #0x0 add r1, r7, #0x0 add r2, r4, #0x0 - blx GXS_LoadBGPltt_2 + blx GXS_LoadBGPltt pop {r3-r7, pc} .balign 4 @@ -55887,7 +55887,7 @@ FUN_020203CC: ; 0x020203CC add r0, r4, #0x0 mov r1, #0x0 lsl r2, r2, #0xa - blx GX_LoadOAM_2 + blx GX_LoadOAM add r0, r4, #0x0 bl FUN_02016A18 pop {r4, pc} @@ -55909,7 +55909,7 @@ FUN_02020404: ; 0x02020404 add r0, r4, #0x0 mov r1, #0x0 lsl r2, r2, #0xa - blx GXS_LoadOAM_2 + blx GXS_LoadOAM add r0, r4, #0x0 bl FUN_02016A18 pop {r4, pc} @@ -60152,10 +60152,10 @@ _020222A8: .word 0x021C59BC thumb_func_start FUN_020222AC FUN_020222AC: ; 0x020222AC - ldr r3, _020222B0 ; =G3X_ResetMtxStack_2 + ldr r3, _020222B0 ; =G3X_ResetMtxStack bx r3 .balign 4 -_020222B0: .word G3X_ResetMtxStack_2 +_020222B0: .word G3X_ResetMtxStack thumb_func_start FUN_020222B4 FUN_020222B4: ; 0x020222B4 @@ -99423,14 +99423,14 @@ FUN_02033D3C: ; 0x02033D3C add r1, r4, #0x0 ldr r0, [r0, #0xc] mov r2, #0x20 - blx GX_LoadOBJPltt_2 + blx GX_LoadOBJPltt b _02033D8C _02033D80: ldr r0, [sp, #0x0] add r1, r4, #0x0 ldr r0, [r0, #0xc] mov r2, #0x20 - blx GXS_LoadOBJPltt_2 + blx GXS_LoadOBJPltt _02033D8C: ldr r0, [sp, #0x4] bl FUN_02016A18 @@ -99529,14 +99529,14 @@ _02033E34: mov r2, #0x2 ldr r0, [r0, #0x14] lsl r2, r2, #0x8 - blx GX_LoadOBJ_2 + blx GX_LoadOBJ b _02033E52 _02033E46: ldr r0, [sp, #0x0] mov r2, #0x2 ldr r0, [r0, #0x14] lsl r2, r2, #0x8 - blx GXS_LoadOBJ_2 + blx GXS_LoadOBJ _02033E52: ldr r0, [sp, #0x4] bl FUN_02016A18 diff --git a/asm/unk_02046030.s b/asm/unk_02046030.s index edfe710f7..30b8ee4cb 100644 --- a/asm/unk_02046030.s +++ b/asm/unk_02046030.s @@ -102890,7 +102890,7 @@ FUN_020774B8: ; 0x020774B8 ldr r1, _020774E8 ; =0x000057E0 add r6, r3, #0x0 lsl r2, r2, #0x8 - blx GX_LoadOBJ_2 + blx GX_LoadOBJ ldr r4, [r4, #0xc] add r0, r5, #0x0 add r1, r6, #0x0 @@ -102900,7 +102900,7 @@ FUN_020774B8: ; 0x020774B8 add r0, r4, r0 mov r1, #0xc0 mov r2, #0x20 - blx GX_LoadOBJPltt_2 + blx GX_LoadOBJPltt pop {r4-r6, pc} nop _020774E8: .word 0x000057E0 @@ -106027,7 +106027,7 @@ _02078E52: add r0, sp, #0x0 mov r1, #0x3a mov r2, #0x2 - blx GX_LoadOBJPltt_2 + blx GX_LoadOBJPltt pop {r3, pc} thumb_func_start FUN_02078E7C @@ -106220,7 +106220,7 @@ _02078FD0: add r0, r5, #0x0 lsl r2, r2, #0x8 lsl r1, r1, #0x5 - blx GXS_LoadOBJ_2 + blx GXS_LoadOBJ add r0, r4, #0x1 lsl r0, r0, #0x10 lsr r4, r0, #0x10 @@ -106260,7 +106260,7 @@ _02079012: add r0, r7, #0x0 lsl r1, r1, #0x5 mov r2, #0x80 - blx GXS_LoadOBJ_2 + blx GXS_LoadOBJ add r0, r5, #0x1 lsl r0, r0, #0x10 lsr r5, r0, #0x10 diff --git a/asm/unk_020AF030.s b/asm/unk_020AF030.s index 80e6c2c02..cefa83aaa 100644 --- a/asm/unk_020AF030.s +++ b/asm/unk_020AF030.s @@ -3,19 +3,19 @@ .text - arm_func_start GXS_LoadOBJ -GXS_LoadOBJ: - ldr ip, _020AF038 ; =GXS_LoadOBJ_2 + arm_func_start GXS_LoadOBJ_2 +GXS_LoadOBJ_2: + ldr ip, _020AF038 ; =GXS_LoadOBJ bx r12 .balign 4 -_020AF038: .word GXS_LoadOBJ_2 +_020AF038: .word GXS_LoadOBJ - arm_func_start GXS_LoadOAM -GXS_LoadOAM: ; 0x020AF03C - ldr ip, _020AF044 ; =GXS_LoadOAM_2 + arm_func_start GXS_LoadOAM_2 +GXS_LoadOAM_2: ; 0x020AF03C + ldr ip, _020AF044 ; =GXS_LoadOAM bx r12 .balign 4 -_020AF044: .word GXS_LoadOAM_2 +_020AF044: .word GXS_LoadOAM arm_func_start FUN_020AF048 FUN_020AF048: ; 0x020AF048 @@ -45,103 +45,103 @@ FUN_020AF074: ; 0x020AF074 bl GXS_EndLoadOBJExtPltt ldmia sp!, {r4-r6,pc} - arm_func_start GXS_LoadBGPltt -GXS_LoadBGPltt: ; 0x020AF0A0 - ldr ip, _020AF0A8 ; =GXS_LoadBGPltt_2 + arm_func_start GXS_LoadBGPltt_2 +GXS_LoadBGPltt_2: ; 0x020AF0A0 + ldr ip, _020AF0A8 ; =GXS_LoadBGPltt bx r12 .balign 4 -_020AF0A8: .word GXS_LoadBGPltt_2 +_020AF0A8: .word GXS_LoadBGPltt - arm_func_start GXS_LoadOBJPltt -GXS_LoadOBJPltt: ; 0x020AF0AC - ldr ip, _020AF0B4 ; =GXS_LoadOBJPltt_2 + arm_func_start GXS_LoadOBJPltt_2 +GXS_LoadOBJPltt_2: ; 0x020AF0AC + ldr ip, _020AF0B4 ; =GXS_LoadOBJPltt bx r12 .balign 4 -_020AF0B4: .word GXS_LoadOBJPltt_2 +_020AF0B4: .word GXS_LoadOBJPltt - arm_func_start GXS_LoadBG3Scr -GXS_LoadBG3Scr: ; 0x020AF0B8 - ldr ip, _020AF0C0 ; =GXS_LoadBG3Scr_3 + arm_func_start GXS_LoadBG3Scr_3 +GXS_LoadBG3Scr_3: ; 0x020AF0B8 + ldr ip, _020AF0C0 ; =GXS_LoadBG3Scr bx r12 .balign 4 -_020AF0C0: .word GXS_LoadBG3Scr_3 +_020AF0C0: .word GXS_LoadBG3Scr - arm_func_start GXS_LoadBG2Scr -GXS_LoadBG2Scr: ; 0x020AF0C4 - ldr ip, _020AF0CC ; =GXS_LoadBG2Scr_3 + arm_func_start GXS_LoadBG2Scr_3 +GXS_LoadBG2Scr_3: ; 0x020AF0C4 + ldr ip, _020AF0CC ; =GXS_LoadBG2Scr bx r12 .balign 4 -_020AF0CC: .word GXS_LoadBG2Scr_3 +_020AF0CC: .word GXS_LoadBG2Scr arm_func_start GXS_LoadBG3Scr_2 GXS_LoadBG3Scr_2: ; 0x020AF0D0 - ldr ip, _020AF0D8 ; =GXS_LoadBG3Scr_3 + ldr ip, _020AF0D8 ; =GXS_LoadBG3Scr bx r12 .balign 4 -_020AF0D8: .word GXS_LoadBG3Scr_3 +_020AF0D8: .word GXS_LoadBG3Scr arm_func_start GXS_LoadBG2Scr_2 GXS_LoadBG2Scr_2: ; 0x020AF0DC - ldr ip, _020AF0E4 ; =GXS_LoadBG2Scr_3 + ldr ip, _020AF0E4 ; =GXS_LoadBG2Scr bx r12 .balign 4 -_020AF0E4: .word GXS_LoadBG2Scr_3 +_020AF0E4: .word GXS_LoadBG2Scr - arm_func_start GXS_LoadBG1Scr -GXS_LoadBG1Scr: ; 0x020AF0E8 - ldr ip, _020AF0F0 ; =GXS_LoadBG1Scr_2 + arm_func_start GXS_LoadBG1Scr_2 +GXS_LoadBG1Scr_2: ; 0x020AF0E8 + ldr ip, _020AF0F0 ; =GXS_LoadBG1Scr bx r12 .balign 4 -_020AF0F0: .word GXS_LoadBG1Scr_2 +_020AF0F0: .word GXS_LoadBG1Scr - arm_func_start GXS_LoadBG0Scr -GXS_LoadBG0Scr: ; 0x020AF0F4 - ldr ip, _020AF0FC ; =GXS_LoadBG0Scr_2 + arm_func_start GXS_LoadBG0Scr_2 +GXS_LoadBG0Scr_2: ; 0x020AF0F4 + ldr ip, _020AF0FC ; =GXS_LoadBG0Scr bx r12 .balign 4 -_020AF0FC: .word GXS_LoadBG0Scr_2 +_020AF0FC: .word GXS_LoadBG0Scr - arm_func_start GXS_LoadBG3Char -GXS_LoadBG3Char: ; 0x020AF100 - ldr ip, _020AF108 ; =GXS_LoadBG3Char_2 + arm_func_start GXS_LoadBG3Char_2 +GXS_LoadBG3Char_2: ; 0x020AF100 + ldr ip, _020AF108 ; =GXS_LoadBG3Char bx r12 .balign 4 -_020AF108: .word GXS_LoadBG3Char_2 +_020AF108: .word GXS_LoadBG3Char - arm_func_start GXS_LoadBG2Char -GXS_LoadBG2Char: ; 0x020AF10C - ldr ip, _020AF114 ; =GXS_LoadBG2Char_2 + arm_func_start GXS_LoadBG2Char_2 +GXS_LoadBG2Char_2: ; 0x020AF10C + ldr ip, _020AF114 ; =GXS_LoadBG2Char bx r12 .balign 4 -_020AF114: .word GXS_LoadBG2Char_2 +_020AF114: .word GXS_LoadBG2Char - arm_func_start GXS_LoadBG1Char -GXS_LoadBG1Char: ; 0x020AF118 - ldr ip, _020AF120 ; =GXS_LoadBG1Char_2 + arm_func_start GXS_LoadBG1Char_2 +GXS_LoadBG1Char_2: ; 0x020AF118 + ldr ip, _020AF120 ; =GXS_LoadBG1Char bx r12 .balign 4 -_020AF120: .word GXS_LoadBG1Char_2 +_020AF120: .word GXS_LoadBG1Char - arm_func_start GXS_LoadBG0Char -GXS_LoadBG0Char: ; 0x020AF124 - ldr ip, _020AF12C ; =GXS_LoadBG0Char_2 + arm_func_start GXS_LoadBG0Char_2 +GXS_LoadBG0Char_2: ; 0x020AF124 + ldr ip, _020AF12C ; =GXS_LoadBG0Char bx r12 .balign 4 -_020AF12C: .word GXS_LoadBG0Char_2 +_020AF12C: .word GXS_LoadBG0Char - arm_func_start GX_LoadOBJ -GX_LoadOBJ: ; 0x020AF130 - ldr ip, _020AF138 ; =GX_LoadOBJ_2 + arm_func_start GX_LoadOBJ_2 +GX_LoadOBJ_2: ; 0x020AF130 + ldr ip, _020AF138 ; =GX_LoadOBJ bx r12 .balign 4 -_020AF138: .word GX_LoadOBJ_2 +_020AF138: .word GX_LoadOBJ - arm_func_start GX_LoadOAM -GX_LoadOAM: ; 0x020AF13C - ldr ip, _020AF144 ; =GX_LoadOAM_2 + arm_func_start GX_LoadOAM_2 +GX_LoadOAM_2: ; 0x020AF13C + ldr ip, _020AF144 ; =GX_LoadOAM bx r12 .balign 4 -_020AF144: .word GX_LoadOAM_2 +_020AF144: .word GX_LoadOAM arm_func_start FUN_020AF148 FUN_020AF148: ; 0x020AF148 @@ -171,89 +171,89 @@ FUN_020AF174: ; 0x020AF174 bl GX_EndLoadOBJExtPltt ldmia sp!, {r4-r6,pc} - arm_func_start GX_LoadBGPltt -GX_LoadBGPltt: ; 0x020AF1A0 - ldr ip, _020AF1A8 ; =GX_LoadBGPltt_2 + arm_func_start GX_LoadBGPltt_2 +GX_LoadBGPltt_2: ; 0x020AF1A0 + ldr ip, _020AF1A8 ; =GX_LoadBGPltt bx r12 .balign 4 -_020AF1A8: .word GX_LoadBGPltt_2 +_020AF1A8: .word GX_LoadBGPltt - arm_func_start GX_LoadOBJPltt -GX_LoadOBJPltt: ; 0x020AF1AC - ldr ip, _020AF1B4 ; =GX_LoadOBJPltt_2 + arm_func_start GX_LoadOBJPltt_2 +GX_LoadOBJPltt_2: ; 0x020AF1AC + ldr ip, _020AF1B4 ; =GX_LoadOBJPltt bx r12 .balign 4 -_020AF1B4: .word GX_LoadOBJPltt_2 +_020AF1B4: .word GX_LoadOBJPltt - arm_func_start GX_LoadBG3Scr -GX_LoadBG3Scr: ; 0x020AF1B8 - ldr ip, _020AF1C0 ; =GX_LoadBG3Scr_3 + arm_func_start GX_LoadBG3Scr_3 +GX_LoadBG3Scr_3: ; 0x020AF1B8 + ldr ip, _020AF1C0 ; =GX_LoadBG3Scr bx r12 .balign 4 -_020AF1C0: .word GX_LoadBG3Scr_3 +_020AF1C0: .word GX_LoadBG3Scr - arm_func_start GX_LoadBG2Scr -GX_LoadBG2Scr: ; 0x020AF1C4 - ldr ip, _020AF1CC ; =GX_LoadBG2Scr_3 + arm_func_start GX_LoadBG2Scr_3 +GX_LoadBG2Scr_3: ; 0x020AF1C4 + ldr ip, _020AF1CC ; =GX_LoadBG2Scr bx r12 .balign 4 -_020AF1CC: .word GX_LoadBG2Scr_3 +_020AF1CC: .word GX_LoadBG2Scr arm_func_start GX_LoadBG3Scr_2 GX_LoadBG3Scr_2: ; 0x020AF1D0 - ldr ip, _020AF1D8 ; =GX_LoadBG3Scr_3 + ldr ip, _020AF1D8 ; =GX_LoadBG3Scr bx r12 .balign 4 -_020AF1D8: .word GX_LoadBG3Scr_3 +_020AF1D8: .word GX_LoadBG3Scr arm_func_start GX_LoadBG2Scr_2 GX_LoadBG2Scr_2: ; 0x020AF1DC - ldr ip, _020AF1E4 ; =GX_LoadBG2Scr_3 + ldr ip, _020AF1E4 ; =GX_LoadBG2Scr bx r12 .balign 4 -_020AF1E4: .word GX_LoadBG2Scr_3 +_020AF1E4: .word GX_LoadBG2Scr - arm_func_start GX_LoadBG1Scr -GX_LoadBG1Scr: ; 0x020AF1E8 - ldr ip, _020AF1F0 ; =GX_LoadBG1Scr_2 + arm_func_start GX_LoadBG1Scr_2 +GX_LoadBG1Scr_2: ; 0x020AF1E8 + ldr ip, _020AF1F0 ; =GX_LoadBG1Scr bx r12 .balign 4 -_020AF1F0: .word GX_LoadBG1Scr_2 +_020AF1F0: .word GX_LoadBG1Scr - arm_func_start GX_LoadBG0Scr -GX_LoadBG0Scr: ; 0x020AF1F4 - ldr ip, _020AF1FC ; =GX_LoadBG0Scr_2 + arm_func_start GX_LoadBG0Scr_2 +GX_LoadBG0Scr_2: ; 0x020AF1F4 + ldr ip, _020AF1FC ; =GX_LoadBG0Scr bx r12 .balign 4 -_020AF1FC: .word GX_LoadBG0Scr_2 +_020AF1FC: .word GX_LoadBG0Scr - arm_func_start GX_LoadBG3Char -GX_LoadBG3Char: ; 0x020AF200 - ldr ip, _020AF208 ; =GX_LoadBG3Char_2 + arm_func_start GX_LoadBG3Char_2 +GX_LoadBG3Char_2: ; 0x020AF200 + ldr ip, _020AF208 ; =GX_LoadBG3Char bx r12 .balign 4 -_020AF208: .word GX_LoadBG3Char_2 +_020AF208: .word GX_LoadBG3Char - arm_func_start GX_LoadBG2Char -GX_LoadBG2Char: ; 0x020AF20C - ldr ip, _020AF214 ; =GX_LoadBG2Char_2 + arm_func_start GX_LoadBG2Char_2 +GX_LoadBG2Char_2: ; 0x020AF20C + ldr ip, _020AF214 ; =GX_LoadBG2Char bx r12 .balign 4 -_020AF214: .word GX_LoadBG2Char_2 +_020AF214: .word GX_LoadBG2Char - arm_func_start GX_LoadBG1Char -GX_LoadBG1Char: ; 0x020AF218 - ldr ip, _020AF220 ; =GX_LoadBG1Char_2 + arm_func_start GX_LoadBG1Char_2 +GX_LoadBG1Char_2: ; 0x020AF218 + ldr ip, _020AF220 ; =GX_LoadBG1Char bx r12 .balign 4 -_020AF220: .word GX_LoadBG1Char_2 +_020AF220: .word GX_LoadBG1Char - arm_func_start GX_LoadBG0Char -GX_LoadBG0Char: ; 0x020AF224 - ldr ip, _020AF22C ; =GX_LoadBG0Char_2 + arm_func_start GX_LoadBG0Char_2 +GX_LoadBG0Char_2: ; 0x020AF224 + ldr ip, _020AF22C ; =GX_LoadBG0Char bx r12 .balign 4 -_020AF22C: .word GX_LoadBG0Char_2 +_020AF22C: .word GX_LoadBG0Char arm_func_start FUN_020AF230 FUN_020AF230: ; 0x020AF230 @@ -2107,13 +2107,13 @@ _020B0A20: mov r0, r4 mov r1, r7 mov r2, r6 - bl GX_LoadOAM_2 + bl GX_LoadOAM ldmia sp!, {r4-r10,pc} _020B0A34: mov r0, r4 mov r1, r7 mov r2, r6 - bl GXS_LoadOAM_2 + bl GXS_LoadOAM ldmia sp!, {r4-r10,pc} _020B0A48: ldr r0, [r7, #0x0] @@ -2659,7 +2659,7 @@ _020B1190: mov r0, r4 mov r1, r5 mov r2, r7 - bl GX_LoadOBJPltt_2 + bl GX_LoadOBJPltt b _020B11F8 _020B11A4: ldr r0, [r10, #0x4] @@ -2676,7 +2676,7 @@ _020B11CC: mov r0, r4 mov r1, r5 mov r2, r7 - bl GXS_LoadOBJPltt_2 + bl GXS_LoadOBJPltt b _020B11F8 _020B11E0: bl GX_BeginLoadTexPltt @@ -2742,7 +2742,7 @@ _020B12B0: mov r0, r5 mov r1, r8 mov r2, r4 - bl GX_LoadOBJPltt_2 + bl GX_LoadOBJPltt b _020B1318 _020B12C4: ldr r0, [r9, #0x4] @@ -2759,7 +2759,7 @@ _020B12EC: mov r0, r5 mov r1, r8 mov r2, r4 - bl GXS_LoadOBJPltt_2 + bl GXS_LoadOBJPltt b _020B1318 _020B1300: bl GX_BeginLoadTexPltt @@ -3002,13 +3002,13 @@ _020B15D4: ldr r0, [r7, #0x14] ldr r2, [r7, #0x10] mov r1, r6 - bl GX_LoadOBJ_2 + bl GX_LoadOBJ b _020B15F8 _020B15E8: ldr r0, [r7, #0x14] ldr r2, [r7, #0x10] mov r1, r6 - bl GXS_LoadOBJ_2 + bl GXS_LoadOBJ _020B15F8: ldr r0, [r7, #0x8] cmp r0, #0x0 @@ -3196,13 +3196,13 @@ _020B1814: ldr r0, [r7, #0x14] ldr r2, [r7, #0x10] mov r1, r6 - bl GX_LoadOBJ_2 + bl GX_LoadOBJ b _020B1838 _020B1828: ldr r0, [r7, #0x14] ldr r2, [r7, #0x10] mov r1, r6 - bl GXS_LoadOBJ_2 + bl GXS_LoadOBJ _020B1838: ldr r0, [r7, #0x8] cmp r0, #0x0 @@ -29727,8 +29727,8 @@ _020C7C70: .word 0x04000060 _020C7C74: .word 0x0000CF7F _020C7C78: .word 0x0400035C - arm_func_start G3X_ResetMtxStack -G3X_ResetMtxStack: ; 0x020C7C7C + arm_func_start G3X_ResetMtxStack_2 +G3X_ResetMtxStack_2: ; 0x020C7C7C stmdb sp!, {r4,lr} sub sp, sp, #0x8 ldr r1, _020C7D18 ; =0x04000600 @@ -29848,8 +29848,8 @@ _020C7DEC: _020C7E04: .word 0x04000400 _020C7E08: .word 0x04000600 - arm_func_start G3X_ResetMtxStack_2 -G3X_ResetMtxStack_2: ; 0x020C7E0C + arm_func_start G3X_ResetMtxStack +G3X_ResetMtxStack: ; 0x020C7E0C stmdb sp!, {lr} sub sp, sp, #0x4 ldr r2, _020C7E7C ; =0x04000600 @@ -29867,7 +29867,7 @@ _020C7E18: ldrh r0, [r1, #0x0] orr r0, r0, #0x1000 strh r0, [r1, #0x0] - bl G3X_ResetMtxStack + bl G3X_ResetMtxStack_2 ldr r2, _020C7E84 ; =0x001F0080 ldr r0, _020C7E88 ; =0x040004A4 ldr r1, _020C7E8C ; =0x040004A8 @@ -30856,8 +30856,8 @@ _020C8C08: .word 0x021D33EC _020C8C0C: .word 0x06894000 _020C8C10: .word 0x06890000 - arm_func_start GXS_LoadBG3Char_2 -GXS_LoadBG3Char_2: ; 0x020C8C14 + arm_func_start GXS_LoadBG3Char +GXS_LoadBG3Char: ; 0x020C8C14 stmdb sp!, {r4-r6,lr} mov r6, r0 mov r5, r1 @@ -30887,8 +30887,8 @@ _020C8C60: .balign 4 _020C8C78: .word 0x02106814 - arm_func_start GX_LoadBG3Char_2 -GX_LoadBG3Char_2: ; 0x020C8C7C + arm_func_start GX_LoadBG3Char +GX_LoadBG3Char: ; 0x020C8C7C stmdb sp!, {r4-r6,lr} mov r6, r0 mov r5, r1 @@ -30918,8 +30918,8 @@ _020C8CC8: .balign 4 _020C8CE0: .word 0x02106814 - arm_func_start GXS_LoadBG2Char_2 -GXS_LoadBG2Char_2: ; 0x020C8CE4 + arm_func_start GXS_LoadBG2Char +GXS_LoadBG2Char: ; 0x020C8CE4 stmdb sp!, {r4-r6,lr} mov r6, r0 mov r5, r1 @@ -30949,8 +30949,8 @@ _020C8D30: .balign 4 _020C8D48: .word 0x02106814 - arm_func_start GX_LoadBG2Char_2 -GX_LoadBG2Char_2: ; 0x020C8D4C + arm_func_start GX_LoadBG2Char +GX_LoadBG2Char: ; 0x020C8D4C stmdb sp!, {r4-r6,lr} mov r6, r0 mov r5, r1 @@ -30980,8 +30980,8 @@ _020C8D98: .balign 4 _020C8DB0: .word 0x02106814 - arm_func_start GXS_LoadBG1Char_2 -GXS_LoadBG1Char_2: ; 0x020C8DB4 + arm_func_start GXS_LoadBG1Char +GXS_LoadBG1Char: ; 0x020C8DB4 stmdb sp!, {r4-r6,lr} mov r6, r0 mov r5, r1 @@ -31011,8 +31011,8 @@ _020C8E00: .balign 4 _020C8E18: .word 0x02106814 - arm_func_start GX_LoadBG1Char_2 -GX_LoadBG1Char_2: ; 0x020C8E1C + arm_func_start GX_LoadBG1Char +GX_LoadBG1Char: ; 0x020C8E1C stmdb sp!, {r4-r6,lr} mov r6, r0 mov r5, r1 @@ -31042,8 +31042,8 @@ _020C8E68: .balign 4 _020C8E80: .word 0x02106814 - arm_func_start GXS_LoadBG0Char_2 -GXS_LoadBG0Char_2: ; 0x020C8E84 + arm_func_start GXS_LoadBG0Char +GXS_LoadBG0Char: ; 0x020C8E84 stmdb sp!, {r4-r6,lr} mov r6, r0 mov r5, r1 @@ -31073,8 +31073,8 @@ _020C8ED0: .balign 4 _020C8EE8: .word 0x02106814 - arm_func_start GX_LoadBG0Char_2 -GX_LoadBG0Char_2: ; 0x020C8EEC + arm_func_start GX_LoadBG0Char +GX_LoadBG0Char: ; 0x020C8EEC stmdb sp!, {r4-r6,lr} mov r6, r0 mov r5, r1 @@ -31104,8 +31104,8 @@ _020C8F38: .balign 4 _020C8F50: .word 0x02106814 - arm_func_start GXS_LoadBG3Scr_3 -GXS_LoadBG3Scr_3: ; 0x020C8F54 + arm_func_start GXS_LoadBG3Scr +GXS_LoadBG3Scr: ; 0x020C8F54 stmdb sp!, {r4-r6,lr} mov r6, r0 mov r5, r1 @@ -31135,8 +31135,8 @@ _020C8FA0: .balign 4 _020C8FB8: .word 0x02106814 - arm_func_start GX_LoadBG3Scr_3 -GX_LoadBG3Scr_3: ; 0x020C8FBC + arm_func_start GX_LoadBG3Scr +GX_LoadBG3Scr: ; 0x020C8FBC stmdb sp!, {r4-r6,lr} mov r6, r0 mov r5, r1 @@ -31166,8 +31166,8 @@ _020C9008: .balign 4 _020C9020: .word 0x02106814 - arm_func_start GXS_LoadBG2Scr_3 -GXS_LoadBG2Scr_3: ; 0x020C9024 + arm_func_start GXS_LoadBG2Scr +GXS_LoadBG2Scr: ; 0x020C9024 stmdb sp!, {r4-r6,lr} mov r6, r0 mov r5, r1 @@ -31197,8 +31197,8 @@ _020C9070: .balign 4 _020C9088: .word 0x02106814 - arm_func_start GX_LoadBG2Scr_3 -GX_LoadBG2Scr_3: ; 0x020C908C + arm_func_start GX_LoadBG2Scr +GX_LoadBG2Scr: ; 0x020C908C stmdb sp!, {r4-r6,lr} mov r6, r0 mov r5, r1 @@ -31228,8 +31228,8 @@ _020C90D8: .balign 4 _020C90F0: .word 0x02106814 - arm_func_start GXS_LoadBG1Scr_2 -GXS_LoadBG1Scr_2: ; 0x020C90F4 + arm_func_start GXS_LoadBG1Scr +GXS_LoadBG1Scr: ; 0x020C90F4 stmdb sp!, {r4-r6,lr} mov r6, r0 mov r5, r1 @@ -31259,8 +31259,8 @@ _020C9140: .balign 4 _020C9158: .word 0x02106814 - arm_func_start GX_LoadBG1Scr_2 -GX_LoadBG1Scr_2: ; 0x020C915C + arm_func_start GX_LoadBG1Scr +GX_LoadBG1Scr: ; 0x020C915C stmdb sp!, {r4-r6,lr} mov r6, r0 mov r5, r1 @@ -31290,8 +31290,8 @@ _020C91A8: .balign 4 _020C91C0: .word 0x02106814 - arm_func_start GXS_LoadBG0Scr_2 -GXS_LoadBG0Scr_2: ; 0x020C91C4 + arm_func_start GXS_LoadBG0Scr +GXS_LoadBG0Scr: ; 0x020C91C4 stmdb sp!, {r4-r6,lr} mov r6, r0 mov r5, r1 @@ -31321,8 +31321,8 @@ _020C9210: .balign 4 _020C9228: .word 0x02106814 - arm_func_start GX_LoadBG0Scr_2 -GX_LoadBG0Scr_2: ; 0x020C922C + arm_func_start GX_LoadBG0Scr +GX_LoadBG0Scr: ; 0x020C922C stmdb sp!, {r4-r6,lr} mov r6, r0 mov r5, r1 @@ -31352,8 +31352,8 @@ _020C9278: .balign 4 _020C9290: .word 0x02106814 - arm_func_start GXS_LoadOBJ_2 -GXS_LoadOBJ_2: ; 0x020C9294 + arm_func_start GXS_LoadOBJ +GXS_LoadOBJ: ; 0x020C9294 stmdb sp!, {r4,lr} ldr r3, _020C92F0 ; =0x02106814 mov r4, r0 @@ -31381,8 +31381,8 @@ _020C92D8: .balign 4 _020C92F0: .word 0x02106814 - arm_func_start GX_LoadOBJ_2 -GX_LoadOBJ_2: ; 0x020C92F4 + arm_func_start GX_LoadOBJ +GX_LoadOBJ: ; 0x020C92F4 stmdb sp!, {r4,lr} ldr r3, _020C9350 ; =0x02106814 mov r4, r0 @@ -31410,8 +31410,8 @@ _020C9338: .balign 4 _020C9350: .word 0x02106814 - arm_func_start GXS_LoadOAM_2 -GXS_LoadOAM_2: ; 0x020C9354 + arm_func_start GXS_LoadOAM +GXS_LoadOAM: ; 0x020C9354 stmdb sp!, {r4,lr} ldr r3, _020C93B4 ; =0x02106814 mov r4, r0 @@ -31441,8 +31441,8 @@ _020C9398: _020C93B4: .word 0x02106814 _020C93B8: .word 0x07000400 - arm_func_start GX_LoadOAM_2 -GX_LoadOAM_2: ; 0x020C93BC + arm_func_start GX_LoadOAM +GX_LoadOAM: ; 0x020C93BC stmdb sp!, {r4,lr} ldr r3, _020C9414 ; =0x02106814 mov r4, r0 @@ -31469,8 +31469,8 @@ _020C93FC: .balign 4 _020C9414: .word 0x02106814 - arm_func_start GXS_LoadOBJPltt_2 -GXS_LoadOBJPltt_2: ; 0x020C9418 + arm_func_start GXS_LoadOBJPltt +GXS_LoadOBJPltt: ; 0x020C9418 stmdb sp!, {r4,lr} ldr r3, _020C9478 ; =0x02106814 mov r4, r0 @@ -31500,8 +31500,8 @@ _020C945C: _020C9478: .word 0x02106814 _020C947C: .word 0x05000600 - arm_func_start GX_LoadOBJPltt_2 -GX_LoadOBJPltt_2: ; 0x020C9480 + arm_func_start GX_LoadOBJPltt +GX_LoadOBJPltt: ; 0x020C9480 stmdb sp!, {r4,lr} ldr r3, _020C94E0 ; =0x02106814 mov r4, r0 @@ -31531,8 +31531,8 @@ _020C94C4: _020C94E0: .word 0x02106814 _020C94E4: .word 0x05000200 - arm_func_start GXS_LoadBGPltt_2 -GXS_LoadBGPltt_2: ; 0x020C94E8 + arm_func_start GXS_LoadBGPltt +GXS_LoadBGPltt: ; 0x020C94E8 stmdb sp!, {r4,lr} ldr r3, _020C9548 ; =0x02106814 mov r4, r0 @@ -31562,8 +31562,8 @@ _020C952C: _020C9548: .word 0x02106814 _020C954C: .word 0x05000400 - arm_func_start GX_LoadBGPltt_2 -GX_LoadBGPltt_2: ; 0x020C9550 + arm_func_start GX_LoadBGPltt +GX_LoadBGPltt: ; 0x020C9550 stmdb sp!, {r4,lr} ldr r3, _020C95A8 ; =0x02106814 mov r4, r0 diff --git a/global.inc b/global.inc index 4da26853f..d08e41279 100644 --- a/global.inc +++ b/global.inc @@ -275,7 +275,7 @@ .extern G3X_SetClearColor .extern G3X_SetFog .extern G3X_InitMtxStack -.extern G3X_ResetMtxStack_2 +.extern G3X_ResetMtxStack .extern G3X_Init .extern G3_RotZ .extern G3_RotY @@ -295,30 +295,30 @@ .extern GX_EndLoadBGExtPltt .extern GX_LoadBGExtPltt .extern GX_BeginLoadBGExtPltt -.extern GXS_LoadBG3Char_2 -.extern GX_LoadBG3Char_2 -.extern GXS_LoadBG2Char_2 -.extern GX_LoadBG2Char_2 -.extern GXS_LoadBG1Char_2 -.extern GX_LoadBG1Char_2 -.extern GXS_LoadBG0Char_2 -.extern GX_LoadBG0Char_2 -.extern GXS_LoadBG3Scr_3 -.extern GX_LoadBG3Scr_3 -.extern GXS_LoadBG2Scr_3 -.extern GX_LoadBG2Scr_3 -.extern GXS_LoadBG1Scr_2 -.extern GX_LoadBG1Scr_2 -.extern GXS_LoadBG0Scr_2 -.extern GX_LoadBG0Scr_2 -.extern GXS_LoadOBJ_2 -.extern GX_LoadOBJ_2 -.extern GXS_LoadOAM_2 -.extern GX_LoadOAM_2 -.extern GXS_LoadOBJPltt_2 -.extern GX_LoadOBJPltt_2 -.extern GXS_LoadBGPltt_2 -.extern GX_LoadBGPltt_2 +.extern GXS_LoadBG3Char +.extern GX_LoadBG3Char +.extern GXS_LoadBG2Char +.extern GX_LoadBG2Char +.extern GXS_LoadBG1Char +.extern GX_LoadBG1Char +.extern GXS_LoadBG0Char +.extern GX_LoadBG0Char +.extern GXS_LoadBG3Scr +.extern GX_LoadBG3Scr +.extern GXS_LoadBG2Scr +.extern GX_LoadBG2Scr +.extern GXS_LoadBG1Scr +.extern GX_LoadBG1Scr +.extern GXS_LoadBG0Scr +.extern GX_LoadBG0Scr +.extern GXS_LoadOBJ +.extern GX_LoadOBJ +.extern GXS_LoadOAM +.extern GX_LoadOAM +.extern GXS_LoadOBJPltt +.extern GX_LoadOBJPltt +.extern GXS_LoadBGPltt +.extern GX_LoadBGPltt .extern OS_WaitIrq .extern OS_DisableIrqMask .extern OS_EnableIrqMask From 002b01714d787617083c1d32e2f30245337755a5 Mon Sep 17 00:00:00 2001 From: Demki Date: Fri, 24 Apr 2020 20:22:39 +0300 Subject: [PATCH 13/23] move split out GX_arm9.s and rename FUN_020C9BE8 to GX_SendFifo48B --- asm/GX_arm9.s | 5256 ++++++++++++++++++++++++++++++++++++++++++++ asm/unk_020AF030.s | 5252 ------------------------------------------- global.inc | 20 + pokediamond.lcf | 1 + 4 files changed, 5277 insertions(+), 5252 deletions(-) create mode 100644 asm/GX_arm9.s diff --git a/asm/GX_arm9.s b/asm/GX_arm9.s new file mode 100644 index 000000000..59a548b26 --- /dev/null +++ b/asm/GX_arm9.s @@ -0,0 +1,5256 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start GXx_SetMasterBrightness_ +GXx_SetMasterBrightness_: ; 0x020C5978 + cmp r1, #0x0 + moveq r1, #0x0 + streqh r1, [r0, #0x0] + bxeq lr + cmp r1, #0x0 + orrgt r1, r1, #0x4000 + strgth r1, [r0, #0x0] + rsble r1, r1, #0x0 + orrle r1, r1, #0x8000 + strleh r1, [r0, #0x0] + bx lr + + arm_func_start GXS_SetGraphicsMode +GXS_SetGraphicsMode: ; 0x020C59A4 + ldr r2, _020C59BC ; =0x04001000 + ldr r1, [r2, #0x0] + bic r1, r1, #0x7 + orr r0, r1, r0 + str r0, [r2, #0x0] + bx lr + .balign 4 +_020C59BC: .word 0x04001000 + + arm_func_start GX_SetGraphicsMode +GX_SetGraphicsMode: ; 0x020C59C0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, _020C5A28 ; =0x02106810 + mov lr, #0x4000000 + ldrh r12, [r3, #0x0] + ldr lr, [lr, #0x0] + ldr r3, _020C5A2C ; =0x021D33C0 + cmp r12, #0x0 + strh r0, [r3, #0x0] + ldr r3, _020C5A30 ; =0xFFF0FFF0 + moveq r0, #0x0 + and r3, lr, r3 + orr r0, r3, r0, lsl #0x10 + orr r0, r1, r0 + orr r1, r0, r2, lsl #0x3 + mov r12, #0x4000000 + ldr r0, _020C5A2C ; =0x021D33C0 + str r1, [r12, #0x0] + ldrh r0, [r0, #0x0] + cmp r0, #0x0 + ldreq r0, _020C5A28 ; =0x02106810 + moveq r1, #0x0 + streqh r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C5A28: .word 0x02106810 +_020C5A2C: .word 0x021D33C0 +_020C5A30: .word 0xFFF0FFF0 + + arm_func_start GX_DispOn +GX_DispOn: ; 0x020C5A34 + ldr r0, _020C5A78 ; =0x021D33C0 + ldr r1, _020C5A7C ; =0x02106810 + ldrh r2, [r0, #0x0] + mov r0, #0x1 + strh r0, [r1, #0x0] + cmp r2, #0x0 + moveq r1, #0x4000000 + ldreq r0, [r1, #0x0] + orreq r0, r0, #0x10000 + streq r0, [r1, #0x0] + bxeq lr + mov r1, #0x4000000 + ldr r0, [r1, #0x0] + bic r0, r0, #0x30000 + orr r0, r0, r2, lsl #0x10 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020C5A78: .word 0x021D33C0 +_020C5A7C: .word 0x02106810 + + arm_func_start GX_DispOff +GX_DispOff: ; 0x020C5A80 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, #0x4000000 + ldr r12, [lr, #0x0] + ldr r1, _020C5AC0 ; =0x02106810 + and r2, r12, #0x30000 + mov r3, #0x0 + ldr r0, _020C5AC4 ; =0x021D33C0 + mov r2, r2, lsr #0x10 + strh r3, [r1, #0x0] + strh r2, [r0, #0x0] + bic r0, r12, #0x30000 + str r0, [lr, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C5AC0: .word 0x02106810 +_020C5AC4: .word 0x021D33C0 + + arm_func_start GX_VBlankIntr +GX_VBlankIntr: ; 0x020C5AC8 + ldr r2, _020C5AF4 ; =0x04000004 + cmp r0, #0x0 + ldrh r0, [r2, #0x0] + ldrneh r1, [r2, #0x0] + and r0, r0, #0x8 + orrne r1, r1, #0x8 + strneh r1, [r2, #0x0] + ldreqh r1, [r2, #0x0] + biceq r1, r1, #0x8 + streqh r1, [r2, #0x0] + bx lr + .balign 4 +_020C5AF4: .word 0x04000004 + + arm_func_start GX_HBlankIntr +GX_HBlankIntr: ; 0x020C5AF8 + ldr r2, _020C5B24 ; =0x04000004 + cmp r0, #0x0 + ldrh r0, [r2, #0x0] + ldrneh r1, [r2, #0x0] + and r0, r0, #0x10 + orrne r1, r1, #0x10 + strneh r1, [r2, #0x0] + ldreqh r1, [r2, #0x0] + biceq r1, r1, #0x10 + streqh r1, [r2, #0x0] + bx lr + .balign 4 +_020C5B24: .word 0x04000004 + + arm_func_start GX_Init +GX_Init: ; 0x020C5B28 + stmdb sp!, {r4-r6,lr} + ldr r3, _020C5C68 ; =0x04000304 + ldr r0, _020C5C6C ; =0xFFFFFDF1 + ldrh r2, [r3, #0x0] + ldr r1, _020C5C70 ; =0x0000020E + orr r2, r2, #0x8000 + strh r2, [r3, #0x0] + ldrh r2, [r3, #0x0] + and r0, r2, r0 + orr r0, r0, r1 + strh r0, [r3, #0x0] + ldrh r0, [r3, #0x0] + orr r0, r0, #0x1 + strh r0, [r3, #0x0] + bl GX_InitGXState + ldr r5, _020C5C74 ; =0x021D33BC + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + bne _020C5B9C + mvn r4, #0x2 +_020C5B78: + bl OS_GetLockID + mov r6, r0 + cmp r6, r4 + bne _020C5B8C + bl OS_Terminate +_020C5B8C: + strh r6, [r5, #0x0] + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + beq _020C5B78 +_020C5B9C: + ldr r0, _020C5C78 ; =0x04000004 + mov r2, #0x0 + strh r2, [r0, #0x0] + mov r1, #0x4000000 + ldr r0, _020C5C7C ; =0x02106814 + str r2, [r1, #0x0] + ldr r0, [r0, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C5BF4 + ldr r1, _020C5C80 ; =0x04000008 + mov r3, #0x60 + bl MI_DmaFill32 + ldr r1, _020C5C84 ; =0x0400006C + mov r2, #0x0 + ldr r0, _020C5C7C ; =0x02106814 + strh r2, [r1, #0x0] + ldr r0, [r0, #0x0] + ldr r1, _020C5C88 ; =0x04001000 + mov r3, #0x70 + bl MI_DmaFill32 + b _020C5C1C +_020C5BF4: + ldr r1, _020C5C80 ; =0x04000008 + mov r0, r2 + mov r2, #0x60 + bl MIi_CpuClear32 + ldr r3, _020C5C84 ; =0x0400006C + mov r0, #0x0 + ldr r1, _020C5C88 ; =0x04001000 + mov r2, #0x70 + strh r0, [r3, #0x0] + bl MIi_CpuClear32 +_020C5C1C: + ldr r1, _020C5C8C ; =0x04000020 + mov r2, #0x100 + ldr r0, _020C5C90 ; =0x04000026 + strh r2, [r1, #0x0] + ldr r1, _020C5C94 ; =0x04000030 + strh r2, [r0, #0x0] + ldr r0, _020C5C98 ; =0x04000036 + strh r2, [r1, #0x0] + ldr r1, _020C5C9C ; =0x04001020 + strh r2, [r0, #0x0] + ldr r0, _020C5CA0 ; =0x04001026 + strh r2, [r1, #0x0] + ldr r1, _020C5CA4 ; =0x04001030 + strh r2, [r0, #0x0] + ldr r0, _020C5CA8 ; =0x04001036 + strh r2, [r1, #0x0] + strh r2, [r0, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C5C68: .word 0x04000304 +_020C5C6C: .word 0xFFFFFDF1 +_020C5C70: .word 0x0000020E +_020C5C74: .word 0x021D33BC +_020C5C78: .word 0x04000004 +_020C5C7C: .word 0x02106814 +_020C5C80: .word 0x04000008 +_020C5C84: .word 0x0400006C +_020C5C88: .word 0x04001000 +_020C5C8C: .word 0x04000020 +_020C5C90: .word 0x04000026 +_020C5C94: .word 0x04000030 +_020C5C98: .word 0x04000036 +_020C5C9C: .word 0x04001020 +_020C5CA0: .word 0x04001026 +_020C5CA4: .word 0x04001030 +_020C5CA8: .word 0x04001036 + + arm_func_start GX_InitGXState +GX_InitGXState: ; 0x020C5CAC + ldr r0, _020C5D14 ; =0x021D33C4 + mov r3, #0x0 + ldr r2, _020C5D18 ; =0x04000240 + strh r3, [r0, #0x0] + strh r3, [r0, #0x2] + strh r3, [r0, #0x4] + strh r3, [r0, #0x6] + strh r3, [r0, #0x8] + strh r3, [r0, #0xa] + strh r3, [r0, #0xc] + strh r3, [r0, #0xe] + strh r3, [r0, #0x10] + strh r3, [r0, #0x12] + strh r3, [r0, #0x14] + strh r3, [r0, #0x16] + strh r3, [r0, #0x18] + ldr r1, _020C5D1C ; =0x04000244 + str r3, [r2, #0x0] + ldr r0, _020C5D20 ; =0x04000245 + strb r3, [r1, #0x0] + ldr r1, _020C5D24 ; =0x04000246 + strb r3, [r0, #0x0] + ldr r0, _020C5D28 ; =0x04000248 + strb r3, [r1, #0x0] + strh r3, [r0, #0x0] + bx lr + .balign 4 +_020C5D14: .word 0x021D33C4 +_020C5D18: .word 0x04000240 +_020C5D1C: .word 0x04000244 +_020C5D20: .word 0x04000245 +_020C5D24: .word 0x04000246 +_020C5D28: .word 0x04000248 + + arm_func_start GX_GetBankForSubOBJExtPltt +GX_GetBankForSubOBJExtPltt: ; 0x020C5D2C + ldr r0, _020C5D38 ; =0x021D33C4 + ldrh r0, [r0, #0x18] + bx lr + .balign 4 +_020C5D38: .word 0x021D33C4 + + arm_func_start GX_GetBankForSubBGExtPltt +GX_GetBankForSubBGExtPltt: ; 0x020C5D3C + ldr r0, _020C5D48 ; =0x021D33C4 + ldrh r0, [r0, #0x16] + bx lr + .balign 4 +_020C5D48: .word 0x021D33C4 + + arm_func_start GX_GetBankForSubOBJ +GX_GetBankForSubOBJ: ; 0x020C5D4C + ldr r0, _020C5D58 ; =0x021D33C4 + ldrh r0, [r0, #0x14] + bx lr + .balign 4 +_020C5D58: .word 0x021D33C4 + + arm_func_start GX_GetBankForSubBGExtPltt_2 +GX_GetBankForSubBGExtPltt_2: ; 0x020C5D5C + ldr r0, _020C5D68 ; =0x021D33C4 + ldrh r0, [r0, #0x12] + bx lr + .balign 4 +_020C5D68: .word 0x021D33C4 + + arm_func_start GX_GetBankForLCDC +GX_GetBankForLCDC: ; 0x020C5D6C + ldr r0, _020C5D78 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bx lr + .balign 4 +_020C5D78: .word 0x021D33C4 + + arm_func_start GX_GetBankForTexPltt +GX_GetBankForTexPltt: ; 0x020C5D7C + ldr r0, _020C5D88 ; =0x021D33C4 + + arm_func_start FUN_020C5D80 +FUN_020C5D80: ; 0x020C5D80 + ldrh r0, [r0, #0xa] + bx lr + .balign 4 +_020C5D88: .word 0x021D33C4 + + arm_func_start FUN_020C5D8C +FUN_020C5D8C: ; 0x020C5D8C + ldr r0, _020C5D98 ; =0x021D33C4 + ldrh r0, [r0, #0x8] + bx lr + .balign 4 +_020C5D98: .word 0x021D33C4 + + arm_func_start GX_GetBankForOBJExtPltt +GX_GetBankForOBJExtPltt: ; 0x020C5D9C + ldr r0, _020C5DA8 ; =0x021D33C4 + ldrh r0, [r0, #0x10] + bx lr + .balign 4 +_020C5DA8: .word 0x021D33C4 + + arm_func_start GX_GetBankForBGExtPltt +GX_GetBankForBGExtPltt: ; 0x020C5DAC + ldr r0, _020C5DB8 ; =0x021D33C4 + ldrh r0, [r0, #0xe] + bx lr + .balign 4 +_020C5DB8: .word 0x021D33C4 + + arm_func_start GX_GetBankForOBJ +GX_GetBankForOBJ: ; 0x020C5DBC + ldr r0, _020C5DC8 ; =0x021D33C4 + ldrh r0, [r0, #0x4] + bx lr + .balign 4 +_020C5DC8: .word 0x021D33C4 + + arm_func_start GX_GetBankForBGExtPltt_2 +GX_GetBankForBGExtPltt_2: ; 0x020C5DCC + ldr r0, _020C5DD8 ; =0x021D33C4 + ldrh r0, [r0, #0x2] + bx lr + .balign 4 +_020C5DD8: .word 0x021D33C4 + + arm_func_start GX_DisableBankForSubOBJExtPltt +GX_DisableBankForSubOBJExtPltt: ; 0x020C5DDC + ldr r2, _020C5DF8 ; =0x04001000 + ldr ip, _020C5DFC ; =FUN_020C5F28 + ldr r1, [r2, #0x0] + ldr r0, _020C5E00 ; =0x021D33DC + bic r1, r1, #0x80000000 + str r1, [r2, #0x0] + bx r12 + .balign 4 +_020C5DF8: .word 0x04001000 +_020C5DFC: .word FUN_020C5F28 +_020C5E00: .word 0x021D33DC + + arm_func_start FUN_020C5E04 +FUN_020C5E04: ; 0x020C5E04 + ldr r2, _020C5E20 ; =0x04001000 + ldr ip, _020C5E24 ; =FUN_020C5F28 + ldr r1, [r2, #0x0] + ldr r0, _020C5E28 ; =0x021D33DA + bic r1, r1, #0x40000000 + str r1, [r2, #0x0] + bx r12 + .balign 4 +_020C5E20: .word 0x04001000 +_020C5E24: .word FUN_020C5F28 +_020C5E28: .word 0x021D33DA + + arm_func_start GX_DisableBankForSubOBJExtPltt_2 +GX_DisableBankForSubOBJExtPltt_2: ; 0x020C5E2C + ldr ip, _020C5E38 ; =FUN_020C5F28 + ldr r0, _020C5E3C ; =0x021D33D8 + bx r12 + .balign 4 +_020C5E38: .word FUN_020C5F28 +_020C5E3C: .word 0x021D33D8 + + arm_func_start GX_DisableBankForSubBGExtPltt +GX_DisableBankForSubBGExtPltt: ; 0x020C5E40 + ldr ip, _020C5E4C ; =FUN_020C5F28 + ldr r0, _020C5E50 ; =0x021D33D6 + bx r12 + .balign 4 +_020C5E4C: .word FUN_020C5F28 +_020C5E50: .word 0x021D33D6 + + arm_func_start GX_DisableBankForLCDC +GX_DisableBankForLCDC: ; 0x020C5E54 + ldr ip, _020C5E60 ; =FUN_020C5F28 + ldr r0, _020C5E64 ; =0x021D33C4 + bx r12 + .balign 4 +_020C5E60: .word FUN_020C5F28 +_020C5E64: .word 0x021D33C4 + + arm_func_start GX_DisableBankForARM7 +GX_DisableBankForARM7: ; 0x020C5E68 + ldr ip, _020C5E74 ; =FUN_020C5F28 + ldr r0, _020C5E78 ; =0x021D33CA + bx r12 + .balign 4 +_020C5E74: .word FUN_020C5F28 +_020C5E78: .word 0x021D33CA + + arm_func_start GX_DisableBankForClearImage +GX_DisableBankForClearImage: ; 0x020C5E7C + ldr ip, _020C5E88 ; =FUN_020C5F28 + ldr r0, _020C5E8C ; =0x021D33D0 + bx r12 + .balign 4 +_020C5E88: .word FUN_020C5F28 +_020C5E8C: .word 0x021D33D0 + + arm_func_start GX_DisableBankForTexPltt +GX_DisableBankForTexPltt: ; 0x020C5E90 + ldr ip, _020C5E9C ; =FUN_020C5F28 + ldr r0, _020C5EA0 ; =0x021D33CE + bx r12 + .balign 4 +_020C5E9C: .word FUN_020C5F28 +_020C5EA0: .word 0x021D33CE + + arm_func_start GX_DisableBankForTexPltt_2 +GX_DisableBankForTexPltt_2: ; 0x020C5EA4 + ldr ip, _020C5EB0 ; =FUN_020C5F28 + ldr r0, _020C5EB4 ; =0x021D33CC + bx r12 + .balign 4 +_020C5EB0: .word FUN_020C5F28 +_020C5EB4: .word 0x021D33CC + + arm_func_start GX_DisableBankForOBJExtPltt +GX_DisableBankForOBJExtPltt: ; 0x020C5EB8 + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldr ip, _020C5ED4 ; =FUN_020C5F28 + bic r1, r1, #0x80000000 + ldr r0, _020C5ED8 ; =0x021D33D4 + str r1, [r2, #0x0] + bx r12 + .balign 4 +_020C5ED4: .word FUN_020C5F28 +_020C5ED8: .word 0x021D33D4 + + arm_func_start GX_DisableBankForBGExtPltt +GX_DisableBankForBGExtPltt: ; 0x020C5EDC + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldr ip, _020C5EF8 ; =FUN_020C5F28 + bic r1, r1, #0x40000000 + ldr r0, _020C5EFC ; =0x021D33D2 + str r1, [r2, #0x0] + bx r12 + .balign 4 +_020C5EF8: .word FUN_020C5F28 +_020C5EFC: .word 0x021D33D2 + + arm_func_start GX_DisableBankForOBJExtPltt_2 +GX_DisableBankForOBJExtPltt_2: ; 0x020C5F00 + ldr ip, _020C5F0C ; =FUN_020C5F28 + ldr r0, _020C5F10 ; =0x021D33C8 + bx r12 + .balign 4 +_020C5F0C: .word FUN_020C5F28 +_020C5F10: .word 0x021D33C8 + + arm_func_start disableBankForX_ +disableBankForX_: ; 0x020C5F14 + ldr ip, _020C5F20 ; =FUN_020C5F28 + ldr r0, _020C5F24 ; =0x021D33C6 + bx r12 + .balign 4 +_020C5F20: .word FUN_020C5F28 +_020C5F24: .word 0x021D33C6 + + arm_func_start FUN_020C5F28 +FUN_020C5F28: ; 0x020C5F28 + stmdb sp!, {r4,lr} + ldrh r4, [r0, #0x0] + mov r1, #0x0 + strh r1, [r0, #0x0] + ands r0, r4, #0x1 + ldrne r0, _020C5FE4 ; =0x04000240 + strneb r1, [r0, #0x0] + ands r0, r4, #0x2 + ldrne r0, _020C5FE8 ; =0x04000241 + movne r1, #0x0 + strneb r1, [r0, #0x0] + ands r0, r4, #0x4 + ldrne r0, _020C5FEC ; =0x04000242 + movne r1, #0x0 + strneb r1, [r0, #0x0] + ands r0, r4, #0x8 + ldrne r0, _020C5FF0 ; =0x04000243 + movne r1, #0x0 + strneb r1, [r0, #0x0] + ands r0, r4, #0x10 + ldrne r0, _020C5FF4 ; =0x04000244 + movne r1, #0x0 + strneb r1, [r0, #0x0] + ands r0, r4, #0x20 + ldrne r0, _020C5FF8 ; =0x04000245 + movne r1, #0x0 + strneb r1, [r0, #0x0] + ands r0, r4, #0x40 + ldrne r0, _020C5FFC ; =0x04000246 + movne r1, #0x0 + strneb r1, [r0, #0x0] + ands r0, r4, #0x80 + ldrne r0, _020C6000 ; =0x04000248 + movne r1, #0x0 + strneb r1, [r0, #0x0] + ands r0, r4, #0x100 + ldrne r0, _020C6004 ; =0x04000249 + movne r1, #0x0 + strneb r1, [r0, #0x0] + ldr r1, _020C6008 ; =0x021D33BC + mov r0, r4, lsl #0x10 + ldrh r1, [r1, #0x0] + mov r0, r0, lsr #0x10 + bl OSi_UnlockVram + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C5FE4: .word 0x04000240 +_020C5FE8: .word 0x04000241 +_020C5FEC: .word 0x04000242 +_020C5FF0: .word 0x04000243 +_020C5FF4: .word 0x04000244 +_020C5FF8: .word 0x04000245 +_020C5FFC: .word 0x04000246 +_020C6000: .word 0x04000248 +_020C6004: .word 0x04000249 +_020C6008: .word 0x021D33BC + + arm_func_start GX_ResetBankForSubOBJ +GX_ResetBankForSubOBJ: ; 0x020C600C + ldr r2, _020C6028 ; =0x04001000 + ldr ip, _020C602C ; =FUN_020C6130 + ldr r1, [r2, #0x0] + ldr r0, _020C6030 ; =0x021D33DC + bic r1, r1, #0x80000000 + str r1, [r2, #0x0] + bx r12 + .balign 4 +_020C6028: .word 0x04001000 +_020C602C: .word FUN_020C6130 +_020C6030: .word 0x021D33DC + + arm_func_start FUN_020C6034 +FUN_020C6034: ; 0x020C6034 + ldr r2, _020C6050 ; =0x04001000 + ldr ip, _020C6054 ; =FUN_020C6130 + ldr r1, [r2, #0x0] + ldr r0, _020C6058 ; =0x021D33DA + bic r1, r1, #0x40000000 + str r1, [r2, #0x0] + bx r12 + .balign 4 +_020C6050: .word 0x04001000 +_020C6054: .word FUN_020C6130 +_020C6058: .word 0x021D33DA + + arm_func_start FUN_020C605C +FUN_020C605C: ; 0x020C605C + ldr ip, _020C6068 ; =FUN_020C6130 + ldr r0, _020C606C ; =0x021D33D8 + bx r12 + .balign 4 +_020C6068: .word FUN_020C6130 +_020C606C: .word 0x021D33D8 + + arm_func_start GX_ResetBankForSubBG +GX_ResetBankForSubBG: ; 0x020C6070 + ldr ip, _020C607C ; =FUN_020C6130 + ldr r0, _020C6080 ; =0x021D33D6 + bx r12 + .balign 4 +_020C607C: .word FUN_020C6130 +_020C6080: .word 0x021D33D6 + + arm_func_start GX_ResetBankForClearImage +GX_ResetBankForClearImage: ; 0x020C6084 + ldr ip, _020C6090 ; =FUN_020C6130 + ldr r0, _020C6094 ; =0x021D33D0 + bx r12 + .balign 4 +_020C6090: .word FUN_020C6130 +_020C6094: .word 0x021D33D0 + + arm_func_start GX_ResetBankForTexPltt +GX_ResetBankForTexPltt: ; 0x020C6098 + ldr ip, _020C60A4 ; =FUN_020C6130 + ldr r0, _020C60A8 ; =0x021D33CE + bx r12 + .balign 4 +_020C60A4: .word FUN_020C6130 +_020C60A8: .word 0x021D33CE + + arm_func_start GX_ResetBankForTex +GX_ResetBankForTex: ; 0x020C60AC + ldr ip, _020C60B8 ; =FUN_020C6130 + ldr r0, _020C60BC ; =0x021D33CC + bx r12 + .balign 4 +_020C60B8: .word FUN_020C6130 +_020C60BC: .word 0x021D33CC + + arm_func_start GX_ResetBankForOBJExtPltt +GX_ResetBankForOBJExtPltt: ; 0x020C60C0 + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldr ip, _020C60DC ; =FUN_020C6130 + bic r1, r1, #0x80000000 + ldr r0, _020C60E0 ; =0x021D33D4 + str r1, [r2, #0x0] + bx r12 + .balign 4 +_020C60DC: .word FUN_020C6130 +_020C60E0: .word 0x021D33D4 + + arm_func_start GX_ResetBankForBGExtPltt +GX_ResetBankForBGExtPltt: ; 0x020C60E4 + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldr ip, _020C6100 ; =FUN_020C6130 + bic r1, r1, #0x40000000 + ldr r0, _020C6104 ; =0x021D33D2 + str r1, [r2, #0x0] + bx r12 + .balign 4 +_020C6100: .word FUN_020C6130 +_020C6104: .word 0x021D33D2 + + arm_func_start GX_ResetBankForOBJ +GX_ResetBankForOBJ: ; 0x020C6108 + ldr ip, _020C6114 ; =FUN_020C6130 + ldr r0, _020C6118 ; =0x021D33C8 + bx r12 + .balign 4 +_020C6114: .word FUN_020C6130 +_020C6118: .word 0x021D33C8 + + arm_func_start GX_ResetBankForBG +GX_ResetBankForBG: ; 0x020C611C + ldr ip, _020C6128 ; =FUN_020C6130 + ldr r0, _020C612C ; =0x021D33C6 + bx r12 + .balign 4 +_020C6128: .word FUN_020C6130 +_020C612C: .word 0x021D33C6 + + arm_func_start FUN_020C6130 +FUN_020C6130: ; 0x020C6130 + stmdb sp!, {r4,lr} + ldrh r4, [r0, #0x0] + mov r2, #0x0 + ldr r1, _020C6164 ; =0x021D33C4 + strh r2, [r0, #0x0] + ldrh r2, [r1, #0x0] + mov r0, r4 + orr r2, r2, r4 + strh r2, [r1, #0x0] + bl GX_VRAMCNT_SetLCDC_ + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C6164: .word 0x021D33C4 + + arm_func_start GX_SetBankForSubOBJExtPltt +GX_SetBankForSubOBJExtPltt: ; 0x020C6168 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C61E8 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x18] + ldrh r3, [r1, #0x0] + cmp r0, #0x0 + strh r0, [r1, #0x18] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + beq _020C61C0 + cmp r0, #0x100 + bne _020C61D0 + ldr r3, _020C61EC ; =0x04001000 + ldr r0, _020C61F0 ; =0x04000249 + ldr r2, [r3, #0x0] + mov r1, #0x83 + orr r2, r2, #0x80000000 + str r2, [r3, #0x0] + strb r1, [r0, #0x0] + b _020C61D0 +_020C61C0: + ldr r1, _020C61EC ; =0x04001000 + ldr r0, [r1, #0x0] + bic r0, r0, #0x80000000 + str r0, [r1, #0x0] +_020C61D0: + ldr r0, _020C61E8 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C61E8: .word 0x021D33C4 +_020C61EC: .word 0x04001000 +_020C61F0: .word 0x04000249 + + arm_func_start GX_SetBankForSubBGExtPltt +GX_SetBankForSubBGExtPltt: ; 0x020C61F4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C6274 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x16] + ldrh r3, [r1, #0x0] + cmp r0, #0x0 + strh r0, [r1, #0x16] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + beq _020C624C + cmp r0, #0x80 + bne _020C625C + ldr r3, _020C6278 ; =0x04001000 + ldr r0, _020C627C ; =0x04000248 + ldr r2, [r3, #0x0] + mov r1, #0x82 + orr r2, r2, #0x40000000 + str r2, [r3, #0x0] + strb r1, [r0, #0x0] + b _020C625C +_020C624C: + ldr r1, _020C6278 ; =0x04001000 + ldr r0, [r1, #0x0] + bic r0, r0, #0x40000000 + str r0, [r1, #0x0] +_020C625C: + ldr r0, _020C6274 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C6274: .word 0x021D33C4 +_020C6278: .word 0x04001000 +_020C627C: .word 0x04000248 + + arm_func_start GX_SetBankForSubOBJ +GX_SetBankForSubOBJ: ; 0x020C6280 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C62F0 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x14] + ldrh r3, [r1, #0x0] + cmp r0, #0x0 + strh r0, [r1, #0x14] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + beq _020C62D8 + cmp r0, #0x8 + beq _020C62CC + cmp r0, #0x100 + ldreq r0, _020C62F4 ; =0x04000249 + moveq r1, #0x82 + streqb r1, [r0, #0x0] + b _020C62D8 +_020C62CC: + ldr r0, _020C62F8 ; =0x04000243 + mov r1, #0x84 + strb r1, [r0, #0x0] +_020C62D8: + ldr r0, _020C62F0 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C62F0: .word 0x021D33C4 +_020C62F4: .word 0x04000249 +_020C62F8: .word 0x04000243 + + arm_func_start GX_SetBankForSubBG +GX_SetBankForSubBG: ; 0x020C62FC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C6398 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x12] + ldrh r3, [r1, #0x0] + cmp r0, #0x80 + strh r0, [r1, #0x12] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + bgt _020C6360 + cmp r0, #0x80 + bge _020C6374 + cmp r0, #0x4 + bgt _020C6380 + cmp r0, #0x0 + blt _020C6380 + cmp r0, #0x0 + beq _020C6380 + cmp r0, #0x4 + ldreq r0, _020C639C ; =0x04000242 + moveq r1, #0x84 + streqb r1, [r0, #0x0] + b _020C6380 +_020C6360: + cmp r0, #0x180 + bne _020C6380 + ldr r0, _020C63A0 ; =0x04000249 + mov r1, #0x81 + strb r1, [r0, #0x0] +_020C6374: + ldr r0, _020C63A4 ; =0x04000248 + mov r1, #0x81 + strb r1, [r0, #0x0] +_020C6380: + ldr r0, _020C6398 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C6398: .word 0x021D33C4 +_020C639C: .word 0x04000242 +_020C63A0: .word 0x04000249 +_020C63A4: .word 0x04000248 + + arm_func_start GX_SetBankForLCDC +GX_SetBankForLCDC: ; 0x020C63A8 + ldr r1, _020C63C0 ; =0x021D33C4 + ldr ip, _020C63C4 ; =GX_VRAMCNT_SetLCDC_ + ldrh r2, [r1, #0x0] + orr r2, r2, r0 + strh r2, [r1, #0x0] + bx r12 + .balign 4 +_020C63C0: .word 0x021D33C4 +_020C63C4: .word GX_VRAMCNT_SetLCDC_ + + arm_func_start GX_SetBankForARM7 +GX_SetBankForARM7: ; 0x020C63C8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C6474 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x6] + ldrh r3, [r1, #0x0] + cmp r0, #0x8 + strh r0, [r1, #0x6] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + bgt _020C642C + cmp r0, #0x8 + bge _020C6450 + cmp r0, #0x4 + bgt _020C645C + cmp r0, #0x0 + blt _020C645C + cmp r0, #0x0 + beq _020C645C + cmp r0, #0x4 + ldreq r0, _020C6478 ; =0x04000242 + moveq r1, #0x82 + streqb r1, [r0, #0x0] + b _020C645C +_020C642C: + cmp r0, #0xc + bne _020C645C + ldr r1, _020C647C ; =0x04000243 + mov r2, #0x8a + strb r2, [r1, #0x0] + ldr r0, _020C6478 ; =0x04000242 + mov r1, #0x82 + strb r1, [r0, #0x0] + b _020C645C +_020C6450: + ldr r0, _020C647C ; =0x04000243 + mov r1, #0x82 + strb r1, [r0, #0x0] +_020C645C: + ldr r0, _020C6474 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C6474: .word 0x021D33C4 +_020C6478: .word 0x04000242 +_020C647C: .word 0x04000243 + + arm_func_start GX_SetBankForClearImage +GX_SetBankForClearImage: ; 0x020C6480 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C65A8 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0xc] + ldrh r3, [r1, #0x0] + cmp r0, #0xc + strh r0, [r1, #0xc] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + addls pc, pc, r0, lsl #0x2 + b _020C6590 +_020C64B4: ; 0x020C64B4 + b _020C6540 +_020C64B8: ; 0x020C64B8 + b _020C6554 +_020C64BC: ; 0x020C64BC + b _020C64F4 +_020C64C0: ; 0x020C64C0 + b _020C64E8 +_020C64C4: ; 0x020C64C4 + b _020C6574 +_020C64C8: ; 0x020C64C8 + b _020C6590 +_020C64CC: ; 0x020C64CC + b _020C6590 +_020C64D0: ; 0x020C64D0 + b _020C6590 +_020C64D4: ; 0x020C64D4 + b _020C6520 +_020C64D8: ; 0x020C64D8 + b _020C6590 +_020C64DC: ; 0x020C64DC + b _020C6590 +_020C64E0: ; 0x020C64E0 + b _020C6590 +_020C64E4: ; 0x020C64E4 + b _020C6514 +_020C64E8: + ldr r0, _020C65AC ; =0x04000240 + mov r1, #0x93 + strb r1, [r0, #0x0] +_020C64F4: + ldr r0, _020C65B0 ; =0x04000241 + mov r2, #0x9b + ldr r1, _020C65B4 ; =0x04000060 + strb r2, [r0, #0x0] + ldrh r0, [r1, #0x0] + orr r0, r0, #0x4000 + strh r0, [r1, #0x0] + b _020C6590 +_020C6514: + ldr r0, _020C65B8 ; =0x04000242 + mov r1, #0x93 + strb r1, [r0, #0x0] +_020C6520: + ldr r0, _020C65BC ; =0x04000243 + mov r2, #0x9b + ldr r1, _020C65B4 ; =0x04000060 + strb r2, [r0, #0x0] + ldrh r0, [r1, #0x0] + orr r0, r0, #0x4000 + strh r0, [r1, #0x0] + b _020C6590 +_020C6540: + ldr r1, _020C65B4 ; =0x04000060 + ldrh r0, [r1, #0x0] + bic r0, r0, #0x4000 + strh r0, [r1, #0x0] + b _020C6590 +_020C6554: + ldr r0, _020C65AC ; =0x04000240 + mov r2, #0x9b + ldr r1, _020C65B4 ; =0x04000060 + strb r2, [r0, #0x0] + ldrh r0, [r1, #0x0] + orr r0, r0, #0x4000 + strh r0, [r1, #0x0] + b _020C6590 +_020C6574: + ldr r0, _020C65B8 ; =0x04000242 + mov r2, #0x9b + ldr r1, _020C65B4 ; =0x04000060 + strb r2, [r0, #0x0] + ldrh r0, [r1, #0x0] + orr r0, r0, #0x4000 + strh r0, [r1, #0x0] +_020C6590: + ldr r0, _020C65A8 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C65A8: .word 0x021D33C4 +_020C65AC: .word 0x04000240 +_020C65B0: .word 0x04000241 +_020C65B4: .word 0x04000060 +_020C65B8: .word 0x04000242 +_020C65BC: .word 0x04000243 + + arm_func_start GX_SetBankForTexPltt +GX_SetBankForTexPltt: ; 0x020C65C0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C66A4 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0xa] + ldrh r3, [r1, #0x0] + cmp r0, #0x30 + strh r0, [r1, #0xa] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + bgt _020C661C + cmp r0, #0x30 + bge _020C6674 + cmp r0, #0x10 + bgt _020C6610 + cmp r0, #0x10 + bge _020C6680 + cmp r0, #0x0 + b _020C668C +_020C6610: + cmp r0, #0x20 + beq _020C6658 + b _020C668C +_020C661C: + cmp r0, #0x60 + bgt _020C6640 + cmp r0, #0x60 + bge _020C664C + cmp r0, #0x40 + ldreq r0, _020C66A8 ; =0x04000246 + moveq r1, #0x83 + streqb r1, [r0, #0x0] + b _020C668C +_020C6640: + cmp r0, #0x70 + beq _020C6668 + b _020C668C +_020C664C: + ldr r0, _020C66A8 ; =0x04000246 + mov r1, #0x8b + strb r1, [r0, #0x0] +_020C6658: + ldr r0, _020C66AC ; =0x04000245 + mov r1, #0x83 + strb r1, [r0, #0x0] + b _020C668C +_020C6668: + ldr r0, _020C66A8 ; =0x04000246 + mov r1, #0x9b + strb r1, [r0, #0x0] +_020C6674: + ldr r0, _020C66AC ; =0x04000245 + mov r1, #0x93 + strb r1, [r0, #0x0] +_020C6680: + ldr r0, _020C66B0 ; =0x04000244 + mov r1, #0x83 + strb r1, [r0, #0x0] +_020C668C: + ldr r0, _020C66A4 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C66A4: .word 0x021D33C4 +_020C66A8: .word 0x04000246 +_020C66AC: .word 0x04000245 +_020C66B0: .word 0x04000244 + + arm_func_start GX_SetBankForTex +GX_SetBankForTex: ; 0x020C66B4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C689C ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x8] + ldrh r3, [r1, #0x0] + cmp r0, #0x0 + strh r0, [r1, #0x8] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + bne _020C66FC + ldr r2, _020C68A0 ; =0x04000060 + ldr r0, _020C68A4 ; =0x0000CFFE + ldrh r1, [r2, #0x0] + and r0, r1, r0 + strh r0, [r2, #0x0] + b _020C6884 +_020C66FC: + ldr r2, _020C68A0 ; =0x04000060 + cmp r0, #0xf + ldrh r1, [r2, #0x0] + bic r1, r1, #0x3000 + orr r1, r1, #0x1 + strh r1, [r2, #0x0] + addls pc, pc, r0, lsl #0x2 + b _020C6884 +_020C671C: ; 0x020C671C + b _020C6884 +_020C6720: ; 0x020C6720 + b _020C6878 +_020C6724: ; 0x020C6724 + b _020C6844 +_020C6728: ; 0x020C6728 + b _020C686C +_020C672C: ; 0x020C672C + b _020C681C +_020C6730: ; 0x020C6730 + b _020C675C +_020C6734: ; 0x020C6734 + b _020C6838 +_020C6738: ; 0x020C6738 + b _020C6860 +_020C673C: ; 0x020C673C + b _020C6800 +_020C6740: ; 0x020C6740 + b _020C6778 +_020C6744: ; 0x020C6744 + b _020C6794 +_020C6748: ; 0x020C6748 + b _020C67B0 +_020C674C: ; 0x020C674C + b _020C6810 +_020C6750: ; 0x020C6750 + b _020C67D8 +_020C6754: ; 0x020C6754 + b _020C682C +_020C6758: ; 0x020C6758 + b _020C6854 +_020C675C: + ldr r1, _020C68A8 ; =0x04000240 + mov r2, #0x83 + ldr r0, _020C68AC ; =0x04000242 + strb r2, [r1, #0x0] + mov r1, #0x8b + strb r1, [r0, #0x0] + b _020C6884 +_020C6778: + ldr r1, _020C68A8 ; =0x04000240 + mov r2, #0x83 + ldr r0, _020C68B0 ; =0x04000243 + strb r2, [r1, #0x0] + mov r1, #0x8b + strb r1, [r0, #0x0] + b _020C6884 +_020C6794: + ldr r1, _020C68B4 ; =0x04000241 + mov r2, #0x83 + ldr r0, _020C68B0 ; =0x04000243 + strb r2, [r1, #0x0] + mov r1, #0x8b + strb r1, [r0, #0x0] + b _020C6884 +_020C67B0: + ldr r0, _020C68A8 ; =0x04000240 + mov r2, #0x83 + ldr r1, _020C68B4 ; =0x04000241 + strb r2, [r0, #0x0] + mov r2, #0x8b + ldr r0, _020C68B0 ; =0x04000243 + strb r2, [r1, #0x0] + mov r1, #0x93 + strb r1, [r0, #0x0] + b _020C6884 +_020C67D8: + ldr r0, _020C68A8 ; =0x04000240 + mov r2, #0x83 + ldr r1, _020C68AC ; =0x04000242 + strb r2, [r0, #0x0] + mov r2, #0x8b + ldr r0, _020C68B0 ; =0x04000243 + strb r2, [r1, #0x0] + mov r1, #0x93 + strb r1, [r0, #0x0] + b _020C6884 +_020C6800: + ldr r0, _020C68B0 ; =0x04000243 + mov r1, #0x83 + strb r1, [r0, #0x0] + b _020C6884 +_020C6810: + ldr r0, _020C68B0 ; =0x04000243 + mov r1, #0x8b + strb r1, [r0, #0x0] +_020C681C: + ldr r0, _020C68AC ; =0x04000242 + mov r1, #0x83 + strb r1, [r0, #0x0] + b _020C6884 +_020C682C: + ldr r0, _020C68B0 ; =0x04000243 + mov r1, #0x93 + strb r1, [r0, #0x0] +_020C6838: + ldr r0, _020C68AC ; =0x04000242 + mov r1, #0x8b + strb r1, [r0, #0x0] +_020C6844: + ldr r0, _020C68B4 ; =0x04000241 + mov r1, #0x83 + strb r1, [r0, #0x0] + b _020C6884 +_020C6854: + ldr r0, _020C68B0 ; =0x04000243 + mov r1, #0x9b + strb r1, [r0, #0x0] +_020C6860: + ldr r0, _020C68AC ; =0x04000242 + mov r1, #0x93 + strb r1, [r0, #0x0] +_020C686C: + ldr r0, _020C68B4 ; =0x04000241 + mov r1, #0x8b + strb r1, [r0, #0x0] +_020C6878: + ldr r0, _020C68A8 ; =0x04000240 + mov r1, #0x83 + strb r1, [r0, #0x0] +_020C6884: + ldr r0, _020C689C ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C689C: .word 0x021D33C4 +_020C68A0: .word 0x04000060 +_020C68A4: .word 0x0000CFFE +_020C68A8: .word 0x04000240 +_020C68AC: .word 0x04000242 +_020C68B0: .word 0x04000243 +_020C68B4: .word 0x04000241 + + arm_func_start GX_SetBankForOBJExtPltt +GX_SetBankForOBJExtPltt: ; 0x020C68B8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C6964 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x10] + ldrh r3, [r1, #0x0] + cmp r0, #0x0 + strh r0, [r1, #0x10] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + beq _020C693C + cmp r0, #0x20 + beq _020C68FC + cmp r0, #0x40 + beq _020C691C + b _020C694C +_020C68FC: + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldr r0, _020C6968 ; =0x04000245 + orr r1, r1, #0x80000000 + str r1, [r2, #0x0] + mov r1, #0x85 + strb r1, [r0, #0x0] + b _020C694C +_020C691C: + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldr r0, _020C696C ; =0x04000246 + orr r1, r1, #0x80000000 + str r1, [r2, #0x0] + mov r1, #0x85 + strb r1, [r0, #0x0] + b _020C694C +_020C693C: + mov r1, #0x4000000 + ldr r0, [r1, #0x0] + bic r0, r0, #0x80000000 + str r0, [r1, #0x0] +_020C694C: + ldr r0, _020C6964 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C6964: .word 0x021D33C4 +_020C6968: .word 0x04000245 +_020C696C: .word 0x04000246 + + arm_func_start GX_SetBankForBGExtPltt +GX_SetBankForBGExtPltt: ; 0x020C6970 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C6A74 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0xe] + ldrh r3, [r1, #0x0] + cmp r0, #0x20 + strh r0, [r1, #0xe] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + bgt _020C69D4 + cmp r0, #0x20 + bge _020C6A40 + cmp r0, #0x0 + bgt _020C69C8 + cmp r0, #0x0 + moveq r1, #0x4000000 + ldreq r0, [r1, #0x0] + biceq r0, r0, #0x40000000 + streq r0, [r1, #0x0] + b _020C6A5C +_020C69C8: + cmp r0, #0x10 + beq _020C69F4 + b _020C6A5C +_020C69D4: + cmp r0, #0x40 + bgt _020C69E8 + cmp r0, #0x40 + beq _020C6A14 + b _020C6A5C +_020C69E8: + cmp r0, #0x60 + beq _020C6A34 + b _020C6A5C +_020C69F4: + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldr r0, _020C6A78 ; =0x04000244 + orr r1, r1, #0x40000000 + str r1, [r2, #0x0] + mov r1, #0x84 + strb r1, [r0, #0x0] + b _020C6A5C +_020C6A14: + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldr r0, _020C6A7C ; =0x04000246 + orr r1, r1, #0x40000000 + str r1, [r2, #0x0] + mov r1, #0x8c + strb r1, [r0, #0x0] + b _020C6A5C +_020C6A34: + ldr r0, _020C6A7C ; =0x04000246 + mov r1, #0x8c + strb r1, [r0, #0x0] +_020C6A40: + ldr r0, _020C6A80 ; =0x04000245 + mov r1, #0x84 + strb r1, [r0, #0x0] + mov r1, #0x4000000 + ldr r0, [r1, #0x0] + orr r0, r0, #0x40000000 + str r0, [r1, #0x0] +_020C6A5C: + ldr r0, _020C6A74 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C6A74: .word 0x021D33C4 +_020C6A78: .word 0x04000244 +_020C6A7C: .word 0x04000246 +_020C6A80: .word 0x04000245 + + arm_func_start GX_SetBankForOBJ +GX_SetBankForOBJ: ; 0x020C6A84 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C6BD8 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x4] + ldrh r3, [r1, #0x0] + cmp r0, #0x30 + strh r0, [r1, #0x4] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + bgt _020C6AF4 + cmp r0, #0x30 + bge _020C6B70 + cmp r0, #0x10 + bgt _020C6AE8 + cmp r0, #0x10 + bge _020C6B7C + cmp r0, #0x3 + addls pc, pc, r0, lsl #0x2 + b _020C6BC0 +_020C6AD8: ; 0x020C6AD8 + b _020C6BC0 +_020C6ADC: ; 0x020C6ADC + b _020C6B44 +_020C6AE0: ; 0x020C6AE0 + b _020C6B54 +_020C6AE4: ; 0x020C6AE4 + b _020C6B38 +_020C6AE8: + cmp r0, #0x20 + beq _020C6BB4 + b _020C6BC0 +_020C6AF4: + cmp r0, #0x50 + bgt _020C6B18 + cmp r0, #0x50 + bge _020C6B8C + cmp r0, #0x40 + ldreq r0, _020C6BDC ; =0x04000246 + moveq r1, #0x82 + streqb r1, [r0, #0x0] + b _020C6BC0 +_020C6B18: + cmp r0, #0x60 + bgt _020C6B2C + cmp r0, #0x60 + beq _020C6BA8 + b _020C6BC0 +_020C6B2C: + cmp r0, #0x70 + beq _020C6B64 + b _020C6BC0 +_020C6B38: + ldr r0, _020C6BE0 ; =0x04000241 + mov r1, #0x8a + strb r1, [r0, #0x0] +_020C6B44: + ldr r0, _020C6BE4 ; =0x04000240 + mov r1, #0x82 + strb r1, [r0, #0x0] + b _020C6BC0 +_020C6B54: + ldr r0, _020C6BE0 ; =0x04000241 + mov r1, #0x82 + strb r1, [r0, #0x0] + b _020C6BC0 +_020C6B64: + ldr r0, _020C6BDC ; =0x04000246 + mov r1, #0x9a + strb r1, [r0, #0x0] +_020C6B70: + ldr r0, _020C6BE8 ; =0x04000245 + mov r1, #0x92 + strb r1, [r0, #0x0] +_020C6B7C: + ldr r0, _020C6BEC ; =0x04000244 + mov r1, #0x82 + strb r1, [r0, #0x0] + b _020C6BC0 +_020C6B8C: + ldr r1, _020C6BDC ; =0x04000246 + mov r2, #0x92 + ldr r0, _020C6BEC ; =0x04000244 + strb r2, [r1, #0x0] + mov r1, #0x82 + strb r1, [r0, #0x0] + b _020C6BC0 +_020C6BA8: + ldr r0, _020C6BDC ; =0x04000246 + mov r1, #0x8a + strb r1, [r0, #0x0] +_020C6BB4: + ldr r0, _020C6BE8 ; =0x04000245 + mov r1, #0x82 + strb r1, [r0, #0x0] +_020C6BC0: + ldr r0, _020C6BD8 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C6BD8: .word 0x021D33C4 +_020C6BDC: .word 0x04000246 +_020C6BE0: .word 0x04000241 +_020C6BE4: .word 0x04000240 +_020C6BE8: .word 0x04000245 +_020C6BEC: .word 0x04000244 + + arm_func_start GX_SetBankForBG +GX_SetBankForBG: ; 0x020C6BF0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020C6E88 ; =0x021D33C4 + mvn r12, r0 + ldrh r2, [r1, #0x2] + ldrh r3, [r1, #0x0] + cmp r0, #0x40 + strh r0, [r1, #0x2] + orr r2, r3, r2 + and r2, r12, r2 + strh r2, [r1, #0x0] + bgt _020C6CCC + cmp r0, #0x40 + bge _020C6E64 + cmp r0, #0x20 + bgt _020C6CC0 + cmp r0, #0x0 + addge pc, pc, r0, lsl #0x2 + b _020C6E70 +_020C6C3C: ; 0x020C6C3C + b _020C6E70 +_020C6C40: ; 0x020C6C40 + b _020C6D6C +_020C6C44: ; 0x020C6C44 + b _020C6D38 +_020C6C48: ; 0x020C6C48 + b _020C6D60 +_020C6C4C: ; 0x020C6C4C + b _020C6D10 +_020C6C50: ; 0x020C6C50 + b _020C6DB0 +_020C6C54: ; 0x020C6C54 + b _020C6D2C +_020C6C58: ; 0x020C6C58 + b _020C6D54 +_020C6C5C: ; 0x020C6C5C + b _020C6CF4 +_020C6C60: ; 0x020C6C60 + b _020C6DCC +_020C6C64: ; 0x020C6C64 + b _020C6DE8 +_020C6C68: ; 0x020C6C68 + b _020C6D7C +_020C6C6C: ; 0x020C6C6C + b _020C6D04 +_020C6C70: ; 0x020C6C70 + b _020C6DA4 +_020C6C74: ; 0x020C6C74 + b _020C6D20 +_020C6C78: ; 0x020C6C78 + b _020C6D48 +_020C6C7C: ; 0x020C6C7C + b _020C6E1C +_020C6C80: ; 0x020C6C80 + b _020C6E70 +_020C6C84: ; 0x020C6C84 + b _020C6E70 +_020C6C88: ; 0x020C6C88 + b _020C6E70 +_020C6C8C: ; 0x020C6C8C + b _020C6E70 +_020C6C90: ; 0x020C6C90 + b _020C6E70 +_020C6C94: ; 0x020C6C94 + b _020C6E70 +_020C6C98: ; 0x020C6C98 + b _020C6E70 +_020C6C9C: ; 0x020C6C9C + b _020C6E70 +_020C6CA0: ; 0x020C6CA0 + b _020C6E70 +_020C6CA4: ; 0x020C6CA4 + b _020C6E70 +_020C6CA8: ; 0x020C6CA8 + b _020C6E70 +_020C6CAC: ; 0x020C6CAC + b _020C6E70 +_020C6CB0: ; 0x020C6CB0 + b _020C6E70 +_020C6CB4: ; 0x020C6CB4 + b _020C6E70 +_020C6CB8: ; 0x020C6CB8 + b _020C6E70 +_020C6CBC: ; 0x020C6CBC + b _020C6E54 +_020C6CC0: + cmp r0, #0x30 + beq _020C6E10 + b _020C6E70 +_020C6CCC: + cmp r0, #0x60 + bgt _020C6CE8 + cmp r0, #0x60 + bge _020C6E48 + cmp r0, #0x50 + beq _020C6E2C + b _020C6E70 +_020C6CE8: + cmp r0, #0x70 + beq _020C6E04 + b _020C6E70 +_020C6CF4: + ldr r0, _020C6E8C ; =0x04000243 + mov r1, #0x81 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6D04: + ldr r0, _020C6E8C ; =0x04000243 + mov r1, #0x89 + strb r1, [r0, #0x0] +_020C6D10: + ldr r0, _020C6E90 ; =0x04000242 + mov r1, #0x81 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6D20: + ldr r0, _020C6E8C ; =0x04000243 + mov r1, #0x91 + strb r1, [r0, #0x0] +_020C6D2C: + ldr r0, _020C6E90 ; =0x04000242 + mov r1, #0x89 + strb r1, [r0, #0x0] +_020C6D38: + ldr r0, _020C6E94 ; =0x04000241 + mov r1, #0x81 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6D48: + ldr r0, _020C6E8C ; =0x04000243 + mov r1, #0x99 + strb r1, [r0, #0x0] +_020C6D54: + ldr r0, _020C6E90 ; =0x04000242 + mov r1, #0x91 + strb r1, [r0, #0x0] +_020C6D60: + ldr r0, _020C6E94 ; =0x04000241 + mov r1, #0x89 + strb r1, [r0, #0x0] +_020C6D6C: + ldr r0, _020C6E98 ; =0x04000240 + mov r1, #0x81 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6D7C: + ldr r0, _020C6E98 ; =0x04000240 + mov r2, #0x81 + ldr r1, _020C6E94 ; =0x04000241 + strb r2, [r0, #0x0] + mov r2, #0x89 + ldr r0, _020C6E8C ; =0x04000243 + strb r2, [r1, #0x0] + mov r1, #0x91 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6DA4: + ldr r0, _020C6E8C ; =0x04000243 + mov r1, #0x91 + strb r1, [r0, #0x0] +_020C6DB0: + ldr r1, _020C6E98 ; =0x04000240 + mov r2, #0x81 + ldr r0, _020C6E90 ; =0x04000242 + strb r2, [r1, #0x0] + mov r1, #0x89 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6DCC: + ldr r1, _020C6E98 ; =0x04000240 + mov r2, #0x81 + ldr r0, _020C6E8C ; =0x04000243 + strb r2, [r1, #0x0] + mov r1, #0x89 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6DE8: + ldr r1, _020C6E94 ; =0x04000241 + mov r2, #0x81 + ldr r0, _020C6E8C ; =0x04000243 + strb r2, [r1, #0x0] + mov r1, #0x89 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6E04: + ldr r0, _020C6E9C ; =0x04000246 + mov r1, #0x99 + strb r1, [r0, #0x0] +_020C6E10: + ldr r0, _020C6EA0 ; =0x04000245 + mov r1, #0x91 + strb r1, [r0, #0x0] +_020C6E1C: + ldr r0, _020C6EA4 ; =0x04000244 + mov r1, #0x81 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6E2C: + ldr r1, _020C6E9C ; =0x04000246 + mov r2, #0x91 + ldr r0, _020C6EA4 ; =0x04000244 + strb r2, [r1, #0x0] + mov r1, #0x81 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6E48: + ldr r0, _020C6E9C ; =0x04000246 + mov r1, #0x89 + strb r1, [r0, #0x0] +_020C6E54: + ldr r0, _020C6EA0 ; =0x04000245 + mov r1, #0x81 + strb r1, [r0, #0x0] + b _020C6E70 +_020C6E64: + ldr r0, _020C6E9C ; =0x04000246 + mov r1, #0x81 + strb r1, [r0, #0x0] +_020C6E70: + ldr r0, _020C6E88 ; =0x021D33C4 + ldrh r0, [r0, #0x0] + bl GX_VRAMCNT_SetLCDC_ + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C6E88: .word 0x021D33C4 +_020C6E8C: .word 0x04000243 +_020C6E90: .word 0x04000242 +_020C6E94: .word 0x04000241 +_020C6E98: .word 0x04000240 +_020C6E9C: .word 0x04000246 +_020C6EA0: .word 0x04000245 +_020C6EA4: .word 0x04000244 + + arm_func_start GX_VRAMCNT_SetLCDC_ +GX_VRAMCNT_SetLCDC_: ; 0x020C6EA8 + ands r1, r0, #0x1 + ldrne r1, _020C6F3C ; =0x04000240 + movne r2, #0x80 + strneb r2, [r1, #0x0] + ands r1, r0, #0x2 + ldrne r1, _020C6F40 ; =0x04000241 + movne r2, #0x80 + strneb r2, [r1, #0x0] + ands r1, r0, #0x4 + ldrne r1, _020C6F44 ; =0x04000242 + movne r2, #0x80 + strneb r2, [r1, #0x0] + ands r1, r0, #0x8 + ldrne r1, _020C6F48 ; =0x04000243 + movne r2, #0x80 + strneb r2, [r1, #0x0] + ands r1, r0, #0x10 + ldrne r1, _020C6F4C ; =0x04000244 + movne r2, #0x80 + strneb r2, [r1, #0x0] + ands r1, r0, #0x20 + ldrne r1, _020C6F50 ; =0x04000245 + movne r2, #0x80 + strneb r2, [r1, #0x0] + ands r1, r0, #0x40 + ldrne r1, _020C6F54 ; =0x04000246 + movne r2, #0x80 + strneb r2, [r1, #0x0] + ands r1, r0, #0x80 + ldrne r1, _020C6F58 ; =0x04000248 + movne r2, #0x80 + strneb r2, [r1, #0x0] + ands r0, r0, #0x100 + ldrne r0, _020C6F5C ; =0x04000249 + movne r1, #0x80 + strneb r1, [r0, #0x0] + bx lr + .balign 4 +_020C6F3C: .word 0x04000240 +_020C6F40: .word 0x04000241 +_020C6F44: .word 0x04000242 +_020C6F48: .word 0x04000243 +_020C6F4C: .word 0x04000244 +_020C6F50: .word 0x04000245 +_020C6F54: .word 0x04000246 +_020C6F58: .word 0x04000248 +_020C6F5C: .word 0x04000249 + + arm_func_start G2S_GetBG3CharPtr +G2S_GetBG3CharPtr: ; 0x020C6F60 + ldr r1, _020C6FA8 ; =0x04001000 + ldr r0, _020C6FAC ; =0x0400100E + ldr r1, [r1, #0x0] + ldrh r2, [r0, #0x0] + and r0, r1, #0x7 + cmp r0, #0x3 + blt _020C6F8C + cmp r0, #0x6 + bge _020C6FA0 + ands r0, r2, #0x80 + bne _020C6FA0 +_020C6F8C: + and r0, r2, #0x3c + mov r0, r0, lsr #0x2 + mov r0, r0, lsl #0xe + add r0, r0, #0x6200000 + bx lr +_020C6FA0: + mov r0, #0x0 + bx lr + .balign 4 +_020C6FA8: .word 0x04001000 +_020C6FAC: .word 0x0400100E + + arm_func_start G2_GetBG3CharPtr +G2_GetBG3CharPtr: ; 0x020C6FB0 + mov r0, #0x4000000 + ldr r1, [r0, #0x0] + ldr r0, _020C700C ; =0x0400000E + and r1, r1, #0x7 + cmp r1, #0x3 + ldrh r2, [r0, #0x0] + blt _020C6FDC + cmp r1, #0x6 + bge _020C7004 + ands r0, r2, #0x80 + bne _020C7004 +_020C6FDC: + mov r0, #0x4000000 + ldr r1, [r0, #0x0] + and r0, r2, #0x3c + and r1, r1, #0x7000000 + mov r1, r1, lsr #0x18 + mov r1, r1, lsl #0x10 + add r1, r1, #0x6000000 + mov r0, r0, lsr #0x2 + add r0, r1, r0, lsl #0xe + bx lr +_020C7004: + mov r0, #0x0 + bx lr + .balign 4 +_020C700C: .word 0x0400000E + + arm_func_start G2S_GetBG2CharPtr +G2S_GetBG2CharPtr: ; 0x020C7010 + ldr r1, _020C7050 ; =0x04001000 + ldr r0, _020C7054 ; =0x0400100C + ldr r1, [r1, #0x0] + ldrh r2, [r0, #0x0] + and r0, r1, #0x7 + cmp r0, #0x5 + blt _020C7034 + ands r0, r2, #0x80 + bne _020C7048 +_020C7034: + and r0, r2, #0x3c + mov r0, r0, lsr #0x2 + mov r0, r0, lsl #0xe + add r0, r0, #0x6200000 + bx lr +_020C7048: + mov r0, #0x0 + bx lr + .balign 4 +_020C7050: .word 0x04001000 +_020C7054: .word 0x0400100C + + arm_func_start G2_GetBG2CharPtr +G2_GetBG2CharPtr: ; 0x020C7058 + mov r0, #0x4000000 + ldr r1, [r0, #0x0] + ldr r0, _020C70AC ; =0x0400000C + and r1, r1, #0x7 + cmp r1, #0x5 + ldrh r2, [r0, #0x0] + blt _020C707C + ands r0, r2, #0x80 + bne _020C70A4 +_020C707C: + mov r0, #0x4000000 + ldr r1, [r0, #0x0] + and r0, r2, #0x3c + and r1, r1, #0x7000000 + mov r1, r1, lsr #0x18 + mov r1, r1, lsl #0x10 + add r1, r1, #0x6000000 + mov r0, r0, lsr #0x2 + add r0, r1, r0, lsl #0xe + bx lr +_020C70A4: + mov r0, #0x0 + bx lr + .balign 4 +_020C70AC: .word 0x0400000C + + arm_func_start G2S_GetBG1CharPtr +G2S_GetBG1CharPtr: ; 0x020C70B0 + ldr r0, _020C70CC ; =0x0400100A + ldrh r0, [r0, #0x0] + and r0, r0, #0x3c + mov r0, r0, asr #0x2 + mov r0, r0, lsl #0xe + add r0, r0, #0x6200000 + bx lr + .balign 4 +_020C70CC: .word 0x0400100A + + arm_func_start G2_GetBG1CharPtr +G2_GetBG1CharPtr: ; 0x020C70D0 + ldr r1, _020C7100 ; =0x0400000A + mov r0, #0x4000000 + ldrh r1, [r1, #0x0] + ldr r0, [r0, #0x0] + and r0, r0, #0x7000000 + mov r0, r0, lsr #0x18 + and r1, r1, #0x3c + mov r0, r0, lsl #0x10 + mov r1, r1, asr #0x2 + add r0, r0, #0x6000000 + add r0, r0, r1, lsl #0xe + bx lr + .balign 4 +_020C7100: .word 0x0400000A + + arm_func_start G2S_GetBG0CharPtr +G2S_GetBG0CharPtr: ; 0x020C7104 + ldr r0, _020C7120 ; =0x04001008 + ldrh r0, [r0, #0x0] + and r0, r0, #0x3c + mov r0, r0, asr #0x2 + mov r0, r0, lsl #0xe + add r0, r0, #0x6200000 + bx lr + .balign 4 +_020C7120: .word 0x04001008 + + arm_func_start G2_GetBG0CharPtr +G2_GetBG0CharPtr: ; 0x020C7124 + ldr r1, _020C7154 ; =0x04000008 + mov r0, #0x4000000 + ldrh r1, [r1, #0x0] + ldr r0, [r0, #0x0] + and r0, r0, #0x7000000 + mov r0, r0, lsr #0x18 + and r1, r1, #0x3c + mov r0, r0, lsl #0x10 + mov r1, r1, asr #0x2 + add r0, r0, #0x6000000 + add r0, r0, r1, lsl #0xe + bx lr + .balign 4 +_020C7154: .word 0x04000008 + + arm_func_start G2S_GetBG3ScrPtr +G2S_GetBG3ScrPtr: ; 0x020C7158 + ldr r1, _020C71D0 ; =0x04001000 + ldr r0, _020C71D4 ; =0x0400100E + ldr r1, [r1, #0x0] + ldrh r2, [r0, #0x0] + and r3, r1, #0x7 + cmp r3, #0x6 + and r0, r2, #0x1f00 + mov r1, r0, lsr #0x8 + addls pc, pc, r3, lsl #0x2 + b _020C71C8 +_020C7180: ; 0x020C7180 + b _020C719C +_020C7184: ; 0x020C7184 + b _020C719C +_020C7188: ; 0x020C7188 + b _020C719C +_020C718C: ; 0x020C718C + b _020C71A8 +_020C7190: ; 0x020C7190 + b _020C71A8 +_020C7194: ; 0x020C7194 + b _020C71A8 +_020C7198: ; 0x020C7198 + b _020C71C0 +_020C719C: + mov r0, r1, lsl #0xb + add r0, r0, #0x6200000 + bx lr +_020C71A8: + ands r0, r2, #0x80 + movne r0, r1, lsl #0xe + addne r0, r0, #0x6200000 + moveq r0, r1, lsl #0xb + addeq r0, r0, #0x6200000 + bx lr +_020C71C0: + mov r0, #0x0 + bx lr +_020C71C8: + mov r0, #0x0 + bx lr + .balign 4 +_020C71D0: .word 0x04001000 +_020C71D4: .word 0x0400100E + + arm_func_start G2_GetBG3ScrPtr +G2_GetBG3ScrPtr: ; 0x020C71D8 + ldr r0, _020C7260 ; =0x0400000E + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldrh r3, [r0, #0x0] + ldr r0, [r2, #0x0] + and r12, r1, #0x7 + and r0, r0, #0x38000000 + mov r1, r0, lsr #0x1b + and r0, r3, #0x1f00 + mov r2, r1, lsl #0x10 + cmp r12, #0x6 + mov r1, r0, lsr #0x8 + addls pc, pc, r12, lsl #0x2 + b _020C7258 +_020C7210: + b _020C722C +_020C7214: + b _020C722C +_020C7218: + b _020C722C +_020C721C: + b _020C7238 +_020C7220: + b _020C7238 +_020C7224: + b _020C7238 +_020C7228: + b _020C7250 +_020C722C: + add r0, r2, #0x6000000 + add r0, r0, r1, lsl #0xb + bx lr +_020C7238: + ands r0, r3, #0x80 + movne r0, r1, lsl #0xe + addne r0, r0, #0x6000000 + addeq r0, r2, #0x6000000 + addeq r0, r0, r1, lsl #0xb + bx lr +_020C7250: + mov r0, #0x0 + bx lr +_020C7258: + mov r0, #0x0 + bx lr + .balign 4 +_020C7260: .word 0x0400000E + + arm_func_start G2S_GetBG2ScrPtr +G2S_GetBG2ScrPtr: ; 0x020C7264 + ldr r1, _020C72DC ; =0x04001000 + ldr r0, _020C72E0 ; =0x0400100C + ldr r1, [r1, #0x0] + ldrh r2, [r0, #0x0] + and r3, r1, #0x7 + cmp r3, #0x6 + and r0, r2, #0x1f00 + mov r1, r0, lsr #0x8 + addls pc, pc, r3, lsl #0x2 + b _020C72D4 +_020C728C: ; 0x020C728C + b _020C72A8 +_020C7290: ; 0x020C7290 + b _020C72A8 +_020C7294: ; 0x020C7294 + b _020C72A8 +_020C7298: ; 0x020C7298 + b _020C72A8 +_020C729C: ; 0x020C729C + b _020C72A8 +_020C72A0: ; 0x020C72A0 + b _020C72B4 +_020C72A4: ; 0x020C72A4 + b _020C72CC +_020C72A8: + mov r0, r1, lsl #0xb + add r0, r0, #0x6200000 + bx lr +_020C72B4: + ands r0, r2, #0x80 + movne r0, r1, lsl #0xe + addne r0, r0, #0x6200000 + moveq r0, r1, lsl #0xb + addeq r0, r0, #0x6200000 + bx lr +_020C72CC: + mov r0, #0x0 + bx lr +_020C72D4: + mov r0, #0x0 + bx lr + .balign 4 +_020C72DC: .word 0x04001000 +_020C72E0: .word 0x0400100C + + arm_func_start G2_GetBG2ScrPtr +G2_GetBG2ScrPtr: ; 0x020C72E4 + ldr r0, _020C736C ; =0x0400000C + mov r2, #0x4000000 + ldr r1, [r2, #0x0] + ldrh r3, [r0, #0x0] + ldr r0, [r2, #0x0] + and r12, r1, #0x7 + and r0, r0, #0x38000000 + mov r1, r0, lsr #0x1b + and r0, r3, #0x1f00 + mov r2, r1, lsl #0x10 + cmp r12, #0x6 + mov r1, r0, lsr #0x8 + addls pc, pc, r12, lsl #0x2 + b _020C7364 +_020C731C: + b _020C7338 +_020C7320: + b _020C7338 +_020C7324: + b _020C7338 +_020C7328: + b _020C7338 +_020C732C: + b _020C7338 +_020C7330: + b _020C7344 +_020C7334: + b _020C735C +_020C7338: + add r0, r2, #0x6000000 + add r0, r0, r1, lsl #0xb + bx lr +_020C7344: + ands r0, r3, #0x80 + movne r0, r1, lsl #0xe + addne r0, r0, #0x6000000 + addeq r0, r2, #0x6000000 + addeq r0, r0, r1, lsl #0xb + bx lr +_020C735C: + mov r0, #0x6000000 + bx lr +_020C7364: + mov r0, #0x0 + bx lr + .balign 4 +_020C736C: .word 0x0400000C + + arm_func_start G2S_GetBG1ScrPtr +G2S_GetBG1ScrPtr: ; 0x020C7370 + ldr r0, _020C738C ; =0x0400100A + ldrh r0, [r0, #0x0] + and r0, r0, #0x1f00 + mov r0, r0, asr #0x8 + mov r0, r0, lsl #0xb + add r0, r0, #0x6200000 + bx lr + .balign 4 +_020C738C: .word 0x0400100A + + arm_func_start G2_GetBG1ScrPtr +G2_GetBG1ScrPtr: ; 0x020C7390 + ldr r1, _020C73C0 ; =0x0400000A + mov r0, #0x4000000 + ldrh r1, [r1, #0x0] + ldr r0, [r0, #0x0] + and r0, r0, #0x38000000 + mov r0, r0, lsr #0x1b + and r1, r1, #0x1f00 + mov r0, r0, lsl #0x10 + mov r1, r1, asr #0x8 + add r0, r0, #0x6000000 + add r0, r0, r1, lsl #0xb + bx lr + .balign 4 +_020C73C0: .word 0x0400000A + + arm_func_start G2S_GetBG0ScrPtr +G2S_GetBG0ScrPtr: ; 0x020C73C4 + ldr r0, _020C73E0 ; =0x04001008 + ldrh r0, [r0, #0x0] + and r0, r0, #0x1f00 + mov r0, r0, asr #0x8 + mov r0, r0, lsl #0xb + add r0, r0, #0x6200000 + bx lr + .balign 4 +_020C73E0: .word 0x04001008 + + arm_func_start G2_GetBG0ScrPtr +G2_GetBG0ScrPtr: ; 0x020C73E4 + ldr r1, _020C7414 ; =0x04000008 + mov r0, #0x4000000 + ldrh r1, [r1, #0x0] + ldr r0, [r0, #0x0] + and r0, r0, #0x38000000 + mov r0, r0, lsr #0x1b + and r1, r1, #0x1f00 + mov r0, r0, lsl #0x10 + mov r1, r1, asr #0x8 + add r0, r0, #0x6000000 + add r0, r0, r1, lsl #0xb + bx lr + .balign 4 +_020C7414: .word 0x04000008 + + arm_func_start G2x_ChangeBlendBrightness_ +G2x_ChangeBlendBrightness_: ; 0x020C7418 + cmp r1, #0x0 + ldrh r3, [r0, #0x0] + bge _020C7444 + and r2, r3, #0xc0 + cmp r2, #0x80 + biceq r2, r3, #0xc0 + orreq r2, r2, #0xc0 + streqh r2, [r0, #0x0] + rsb r1, r1, #0x0 + strh r1, [r0, #0x4] + bx lr +_020C7444: + and r2, r3, #0xc0 + cmp r2, #0xc0 + biceq r2, r3, #0xc0 + orreq r2, r2, #0x80 + streqh r2, [r0, #0x0] + strh r1, [r0, #0x4] + bx lr + + arm_func_start G2x_SetBlendBrightnessExt_ +G2x_SetBlendBrightnessExt_: ; 0x020C7460 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr lr, [sp, #0x8] + ldr r12, [sp, #0xc] + orr r3, r3, lr, lsl #0x8 + cmp r12, #0x0 + orrge r1, r1, #0x80 + strh r3, [r0, #0x2] + orrge r1, r1, r2, lsl #0x8 + strgeh r1, [r0, #0x0] + strgeh r12, [r0, #0x4] + addge sp, sp, #0x4 + ldmgeia sp!, {lr} + bxge lr + orr r1, r1, #0xc0 + orr r1, r1, r2, lsl #0x8 + strh r1, [r0, #0x0] + rsb r1, r12, #0x0 + strh r1, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start G2x_SetBlendBrightness_ +G2x_SetBlendBrightness_: ; 0x020C74B8 + cmp r2, #0x0 + orrlt r1, r1, #0xc0 + strlth r1, [r0, #0x0] + rsblt r1, r2, #0x0 + strlth r1, [r0, #0x4] + orrge r1, r1, #0x80 + strgeh r1, [r0, #0x0] + strgeh r2, [r0, #0x4] + bx lr + + arm_func_start G2x_SetBlendAlpha_ +G2x_SetBlendAlpha_: ; 0x020C74DC + ldr r12, [sp, #0x0] + orr r1, r1, #0x40 + orr r2, r1, r2, lsl #0x8 + orr r1, r3, r12, lsl #0x8 + orr r1, r2, r1, lsl #0x10 + str r1, [r0, #0x0] + bx lr + + arm_func_start G2x_SetBGyAffine_ +G2x_SetBGyAffine_: ; 0x020C74F8 + stmdb sp!, {r4-r6,lr} + ldr r5, [r1, #0x0] + ldr r4, [r1, #0x4] + mov r12, r5, lsl #0xc + mov lr, r4, lsl #0xc + mov r5, r12, asr #0x10 + mov r4, lr, asr #0x10 + mov r12, r5, lsl #0x10 + mov lr, r4, lsl #0x10 + mov r5, r12, lsr #0x10 + mov r4, lr, lsr #0x10 + orr r4, r5, r4, lsl #0x10 + str r4, [r0, #0x0] + ldr r5, [r1, #0x8] + ldr r4, [r1, #0xc] + mov r12, r5, lsl #0xc + mov lr, r4, lsl #0xc + mov r5, r12, asr #0x10 + mov r4, lr, asr #0x10 + mov r12, r5, lsl #0x10 + mov lr, r4, lsl #0x10 + ldr r4, [sp, #0x14] + ldr r6, [sp, #0x10] + mov r12, r12, lsr #0x10 + mov r5, lr, lsr #0x10 + orr r5, r12, r5, lsl #0x10 + str r5, [r0, #0x4] + ldr r12, [r1, #0x4] + sub r5, r4, r3 + ldr r4, [r1, #0xc] + mul lr, r12, r5 + mul r5, r4, r5 + ldr r12, [r1, #0x0] + sub r6, r6, r2 + ldr r4, [r1, #0x8] + mla r1, r12, r6, lr + mla r5, r4, r6, r5 + add r1, r1, r2, lsl #0xc + add r2, r5, r3, lsl #0xc + mov r1, r1, asr #0x4 + str r1, [r0, #0x8] + mov r1, r2, asr #0x4 + str r1, [r0, #0xc] + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start G3B_End +G3B_End: ; 0x020C75AC + ldr r1, [r0, #0x0] + mov r2, #0x41 + str r2, [r1, #0x0] + ldr r1, [r0, #0x4] + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + bx lr + + arm_func_start G3B_Begin +G3B_Begin: ; 0x020C75D0 + ldr r2, [r0, #0x0] + mov r3, #0x40 + str r3, [r2, #0x0] + ldr r2, [r0, #0x4] + str r1, [r2, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + bx lr + + arm_func_start G3B_LightColor +G3B_LightColor: ; 0x020C7600 + ldr r3, [r0, #0x0] + mov r12, #0x33 + str r12, [r3, #0x0] + ldr r3, [r0, #0x4] + orr r1, r2, r1, lsl #0x1e + str r1, [r3, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + bx lr + + arm_func_start G3B_LightVector +G3B_LightVector: ; 0x020C7634 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr ip, _020C7694 ; =0x000003FF + ldrsh r4, [sp, #0x10] + ldr lr, [r0, #0x0] + mov r5, #0x32 + str r5, [lr, #0x0] + and lr, r12, r2, asr #0x3 + and r2, r12, r3, asr #0x3 + and r3, r12, r4, asr #0x3 + orr r2, lr, r2, lsl #0xa + orr r3, r2, r3, lsl #0x14 + ldr r2, [r0, #0x4] + orr r1, r3, r1, lsl #0x1e + str r1, [r2, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020C7694: .word 0x000003FF + + arm_func_start G3B_MaterialColorSpecEmi +G3B_MaterialColorSpecEmi: ; 0x020C7698 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r12, [r0, #0x0] + mov lr, #0x31 + cmp r3, #0x0 + movne r3, #0x1 + str lr, [r12, #0x0] + orr r2, r1, r2, lsl #0x10 + moveq r3, #0x0 + ldr r1, [r0, #0x4] + orr r2, r2, r3, lsl #0xf + str r2, [r1, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start G3B_MaterialColorDiffAmb +G3B_MaterialColorDiffAmb: ; 0x020C76EC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r12, [r0, #0x0] + mov lr, #0x30 + cmp r3, #0x0 + movne r3, #0x1 + str lr, [r12, #0x0] + orr r2, r1, r2, lsl #0x10 + moveq r3, #0x0 + ldr r1, [r0, #0x4] + orr r2, r2, r3, lsl #0xf + str r2, [r1, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start G3B_PolygonAttr +G3B_PolygonAttr: ; 0x020C7740 + orr r1, r1, r2, lsl #0x4 + ldr r2, [r0, #0x0] + mov r12, #0x29 + str r12, [r2, #0x0] + ldr r2, [sp, #0x8] + orr r1, r1, r3, lsl #0x6 + ldr r3, [sp, #0x0] + orr r1, r2, r1 + ldr r12, [sp, #0x4] + orr r2, r1, r3, lsl #0x18 + ldr r1, [r0, #0x4] + orr r2, r2, r12, lsl #0x10 + str r2, [r1, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + bx lr + + arm_func_start G3B_Vtx +G3B_Vtx: ; 0x020C7790 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r12, [r0, #0x0] + mov lr, #0x23 + str lr, [r12, #0x0] + mov r1, r1, lsl #0x10 + mov r2, r2, lsl #0x10 + mov lr, r1, lsr #0x10 + mov r12, r2, lsr #0x10 + mov r1, r3, lsl #0x10 + ldr r2, [r0, #0x4] + orr r3, lr, r12, lsl #0x10 + str r3, [r2, #0x0] + ldr r2, [r0, #0x4] + mov r1, r1, lsr #0x10 + str r1, [r2, #0x4] + ldr r1, [r0, #0x4] + add r1, r1, #0x8 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start G3B_Normal +G3B_Normal: ; 0x020C77F4 + stmdb sp!, {r4,lr} + ldr ip, _020C7844 ; =0x000003FF + ldr lr, [r0, #0x0] + mov r4, #0x21 + str r4, [lr, #0x0] + and lr, r12, r1, asr #0x3 + and r1, r12, r2, asr #0x3 + and r3, r12, r3, asr #0x3 + orr r2, lr, r1, lsl #0xa + ldr r1, [r0, #0x4] + orr r2, r2, r3, lsl #0x14 + str r2, [r1, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C7844: .word 0x000003FF + + arm_func_start G3B_Color +G3B_Color: ; 0x020C7848 + ldr r2, [r0, #0x0] + mov r3, #0x20 + str r3, [r2, #0x0] + ldr r2, [r0, #0x4] + str r1, [r2, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + bx lr + + arm_func_start G3B_LoadMtx44 +G3B_LoadMtx44: ; 0x020C7878 + stmdb sp!, {r4,lr} + mov r4, r0 + bl G3BS_LoadMtx44 + ldr r0, [r4, #0x4] + add r0, r0, #0x40 + str r0, [r4, #0x0] + ldr r0, [r4, #0x0] + add r0, r0, #0x4 + str r0, [r4, #0x4] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start G3B_PopMtx +G3B_PopMtx: ; 0x020C78A4 + ldr r2, [r0, #0x0] + mov r3, #0x12 + str r3, [r2, #0x0] + ldr r2, [r0, #0x4] + str r1, [r2, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, #0x4 + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + bx lr + + arm_func_start G3B_PushMtx +G3B_PushMtx: ; 0x020C78D4 + ldr r1, [r0, #0x0] + mov r2, #0x11 + str r2, [r1, #0x0] + ldr r1, [r0, #0x4] + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + bx lr + + arm_func_start G3BS_LoadMtx44 +G3BS_LoadMtx44: ; 0x020C78F8 + mov r3, r0 + ldr r0, [r3, #0x0] + mov r2, #0x16 + str r2, [r0, #0x0] + mov r0, r1 + ldr ip, _020C7918 ; =MI_Copy64B + ldr r1, [r3, #0x4] + bx r12 + .balign 4 +_020C7918: .word MI_Copy64B + + arm_func_start G3_MultMtx33 +G3_MultMtx33: ; 0x020C791C + ldr r1, _020C7930 ; =0x04000400 + mov r2, #0x1a + ldr ip, _020C7934 ; =MI_Copy36B + str r2, [r1, #0x0] + bx r12 + .balign 4 +_020C7930: .word 0x04000400 +_020C7934: .word MI_Copy36B + + arm_func_start G3_MultMtx43 +G3_MultMtx43: + ldr r1, _020C794C ; =0x04000400 + mov r2, #0x19 + ldr ip, _020C7950 ; =GX_SendFifo48B + str r2, [r1, #0x0] + bx r12 + .balign 4 +_020C794C: .word 0x04000400 +_020C7950: .word GX_SendFifo48B + + arm_func_start G3_LoadMtx43 +G3_LoadMtx43: ; 0x020C7954 + ldr r1, _020C7968 ; =0x04000400 + mov r2, #0x17 + ldr ip, _020C796C ; =GX_SendFifo48B + str r2, [r1, #0x0] + bx r12 + .balign 4 +_020C7968: .word 0x04000400 +_020C796C: .word GX_SendFifo48B + + arm_func_start GXi_NopClearFifo128_ +GXi_NopClearFifo128_: ; 0x020C7970 + mov r1, #0x0 + mov r2, #0x0 + mov r3, #0x0 + mov r12, #0x0 + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + bx lr + + arm_func_start G3X_SetHOffset +G3X_SetHOffset: ; 0x020C7A04 + ldr r1, _020C7A10 ; =0x04000010 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020C7A10: .word 0x04000010 + + arm_func_start G3X_GetBoxTestResult +G3X_GetBoxTestResult: ; 0x020C7A14 + ldr r2, _020C7A38 ; =0x04000600 + ldr r1, [r2, #0x0] + ands r1, r1, #0x1 + ldreq r1, [r2, #0x0] + mvnne r0, #0x0 + andeq r1, r1, #0x2 + streq r1, [r0, #0x0] + moveq r0, #0x0 + bx lr + .balign 4 +_020C7A38: .word 0x04000600 + + arm_func_start G3X_GetMtxStackLevelPJ +G3X_GetMtxStackLevelPJ: + ldr r2, _020C7A64 ; =0x04000600 + ldr r1, [r2, #0x0] + ands r1, r1, #0x4000 + ldreq r1, [r2, #0x0] + mvnne r0, #0x0 + andeq r1, r1, #0x2000 + moveq r1, r1, lsr #0xd + streq r1, [r0, #0x0] + moveq r0, #0x0 + bx lr + .balign 4 +_020C7A64: .word 0x04000600 + + arm_func_start G3X_GetMtxStackLevelPV +G3X_GetMtxStackLevelPV: + ldr r2, _020C7A90 ; =0x04000600 + ldr r1, [r2, #0x0] + ands r1, r1, #0x4000 + ldreq r1, [r2, #0x0] + mvnne r0, #0x0 + andeq r1, r1, #0x1f00 + moveq r1, r1, lsr #0x8 + streq r1, [r0, #0x0] + moveq r0, #0x0 + bx lr + .balign 4 +_020C7A90: .word 0x04000600 + + arm_func_start G3X_InitTable +G3X_InitTable: ; 0x020C7A94 + stmdb sp!, {lr} + sub sp, sp, #0xc + ldr r0, _020C7B2C ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C7AE4 + mov r2, #0x0 + str r2, [sp, #0x0] + ldr r1, _020C7B30 ; =0x04000330 + mov r3, #0x10 + str r2, [sp, #0x4] + bl MI_DmaFill32Async + ldr r0, _020C7B2C ; =0x02106814 + ldr r1, _020C7B34 ; =0x04000360 + ldr r0, [r0, #0x0] + mov r2, #0x0 + mov r3, #0x60 + bl MI_DmaFill32 + b _020C7B04 +_020C7AE4: + ldr r1, _020C7B30 ; =0x04000330 + mov r0, #0x0 + mov r2, #0x10 + bl MIi_CpuClear32 + ldr r1, _020C7B34 ; =0x04000360 + mov r0, #0x0 + mov r2, #0x60 + bl MIi_CpuClear32 +_020C7B04: + mov r2, #0x0 + ldr r0, _020C7B38 ; =0x040004D0 + mov r1, r2 +_020C7B10: + add r2, r2, #0x1 + str r1, [r0, #0x0] + cmp r2, #0x20 + blt _020C7B10 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_020C7B2C: .word 0x02106814 +_020C7B30: .word 0x04000330 +_020C7B34: .word 0x04000360 +_020C7B38: .word 0x040004D0 + + arm_func_start G3X_SetClearColor +G3X_SetClearColor: ; 0x020C7B3C + orr r0, r0, r1, lsl #0x10 + ldr r12, [sp, #0x0] + orr r3, r0, r3, lsl #0x18 + cmp r12, #0x0 + ldr r1, _020C7B64 ; =0x04000350 + orrne r3, r3, #0x8000 + ldr r0, _020C7B68 ; =0x04000354 + str r3, [r1, #0x0] + strh r2, [r0, #0x0] + bx lr + .balign 4 +_020C7B64: .word 0x04000350 +_020C7B68: .word 0x04000354 + + arm_func_start G3X_SetFogTable +G3X_SetFogTable: ; 0x020C7B6C + ldr ip, _020C7B78 ; =0x020CE2C4 + ldr r1, _020C7B7C ; =0x04000360 + bx r12 + .balign 4 +_020C7B78: .word 0x020CE2C4 +_020C7B7C: .word 0x04000360 + + arm_func_start G3X_SetEdgeColorTable +G3X_SetEdgeColorTable: ; 0x020C7B80 + ldr ip, _020C7B90 ; =MIi_CpuCopy16 + ldr r1, _020C7B94 ; =0x04000330 + mov r2, #0x10 + bx r12 + .balign 4 +_020C7B90: .word MIi_CpuCopy16 +_020C7B94: .word 0x04000330 + + arm_func_start G3X_GetVectorMtx +G3X_GetVectorMtx: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020C7BD8 ; =0x04000600 + mov r1, r0 + ldr r0, [r2, #0x0] + ands r0, r0, #0x8000000 + addne sp, sp, #0x4 + mvnne r0, #0x0 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020C7BDC ; =0x04000680 + bl MI_Copy36B +_020C7BC8: ; 0x020C7BC8 + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C7BD8: .word 0x04000600 +_020C7BDC: .word 0x04000680 + + arm_func_start G3X_GetClipMtx +G3X_GetClipMtx: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020C7C20 ; =0x04000600 + mov r1, r0 + ldr r0, [r2, #0x0] + ands r0, r0, #0x8000000 + addne sp, sp, #0x4 + mvnne r0, #0x0 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020C7C24 ; =0x04000640 + bl MI_Copy64B +_020C7C10: ; 0x020C7C10 + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C7C20: .word 0x04000600 +_020C7C24: .word 0x04000640 + + arm_func_start G3X_SetFog +G3X_SetFog: ; 0x020C7C28 + cmp r0, #0x0 + ldreq r2, _020C7C70 ; =0x04000060 + ldreq r0, _020C7C74 ; =0x0000CF7F + ldreqh r1, [r2, #0x0] + andeq r0, r1, r0 + streqh r0, [r2, #0x0] + bxeq lr + ldr r0, _020C7C78 ; =0x0400035C + ldr ip, _020C7C70 ; =0x04000060 + strh r3, [r0, #0x0] + mov r0, r2, lsl #0x8 + orr r0, r0, r1, lsl #0x6 + ldrh r3, [r12, #0x0] + orr r0, r0, #0x80 + bic r1, r3, #0x3f40 + orr r0, r1, r0 + strh r0, [r12, #0x0] + bx lr + .balign 4 +_020C7C70: .word 0x04000060 +_020C7C74: .word 0x0000CF7F +_020C7C78: .word 0x0400035C + + arm_func_start G3X_ResetMtxStack_2 +G3X_ResetMtxStack_2: ; 0x020C7C7C + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r1, _020C7D18 ; =0x04000600 + ldr r0, [r1, #0x0] + orr r0, r0, #0x8000 + str r0, [r1, #0x0] + add r4, sp, #0x0 +_020C7C98: + mov r0, r4 + bl G3X_GetMtxStackLevelPV +_020C7CA0: ; 0x020C7CA0 + cmp r0, #0x0 + bne _020C7C98 + add r4, sp, #0x4 +_020C7CAC: + mov r0, r4 + bl G3X_GetMtxStackLevelPJ +_020C7CB4: ; 0x020C7CB4 + cmp r0, #0x0 + bne _020C7CAC + ldr r2, _020C7D1C ; =0x04000440 + mov r1, #0x3 + str r1, [r2, #0x0] + ldr r0, _020C7D20 ; =0x04000454 + mov r1, #0x0 + str r1, [r0, #0x0] + str r1, [r2, #0x0] + ldr r1, [sp, #0x4] + cmp r1, #0x0 + ldrne r0, _020C7D24 ; =0x04000448 + strne r1, [r0, #0x0] + ldr r0, _020C7D1C ; =0x04000440 + mov r1, #0x2 + str r1, [r0, #0x0] + ldr r2, [sp, #0x0] + ldr r1, _020C7D24 ; =0x04000448 + ldr r0, _020C7D20 ; =0x04000454 + str r2, [r1, #0x0] + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C7D18: .word 0x04000600 +_020C7D1C: .word 0x04000440 +_020C7D20: .word 0x04000454 +_020C7D24: .word 0x04000448 + + arm_func_start G3X_InitMtxStack +G3X_InitMtxStack: ; 0x020C7D28 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r1, _020C7DC8 ; =0x04000600 + ldr r0, [r1, #0x0] + orr r0, r0, #0x8000 + str r0, [r1, #0x0] + add r4, sp, #0x0 +_020C7D44: + mov r0, r4 + bl G3X_GetMtxStackLevelPV +_020C7D4C: ; 0x020C7D4C + cmp r0, #0x0 + bne _020C7D44 + add r4, sp, #0x4 +_020C7D58: + mov r0, r4 + bl G3X_GetMtxStackLevelPJ +_020C7D60: ; 0x020C7D60 + cmp r0, #0x0 + bne _020C7D58 + ldr r2, _020C7DCC ; =0x04000440 + mov r1, #0x3 + str r1, [r2, #0x0] + ldr r0, _020C7DD0 ; =0x04000454 + mov r1, #0x0 + str r1, [r0, #0x0] + str r1, [r2, #0x0] + ldr r1, [sp, #0x4] + ldr r2, _020C7DD0 ; =0x04000454 + cmp r1, #0x0 + ldrne r0, _020C7DD4 ; =0x04000448 + mov r3, #0x0 + strne r1, [r0, #0x0] + ldr r0, _020C7DCC ; =0x04000440 + str r3, [r2, #0x0] + mov r1, #0x2 + str r1, [r0, #0x0] + ldr r1, [sp, #0x0] + ldr r0, _020C7DD4 ; =0x04000448 + str r1, [r0, #0x0] + str r3, [r2, #0x0] + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C7DC8: .word 0x04000600 +_020C7DCC: .word 0x04000440 +_020C7DD0: .word 0x04000454 +_020C7DD4: .word 0x04000448 + + arm_func_start G3X_ClearFifo +G3X_ClearFifo: ; 0x020C7DD8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C7E04 ; =0x04000400 + bl GXi_NopClearFifo128_ + ldr r1, _020C7E08 ; =0x04000600 +_020C7DEC: + ldr r0, [r1, #0x0] + ands r0, r0, #0x8000000 + bne _020C7DEC + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C7E04: .word 0x04000400 +_020C7E08: .word 0x04000600 + + arm_func_start G3X_ResetMtxStack +G3X_ResetMtxStack: ; 0x020C7E0C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020C7E7C ; =0x04000600 +_020C7E18: + ldr r0, [r2, #0x0] + ands r0, r0, #0x8000000 + bne _020C7E18 + ldr r0, [r2, #0x0] + ldr r1, _020C7E80 ; =0x04000060 + orr r0, r0, #0x8000 + str r0, [r2, #0x0] + ldrh r0, [r1, #0x0] + orr r0, r0, #0x2000 + strh r0, [r1, #0x0] + ldrh r0, [r1, #0x0] + orr r0, r0, #0x1000 + strh r0, [r1, #0x0] + bl G3X_ResetMtxStack_2 + ldr r2, _020C7E84 ; =0x001F0080 + ldr r0, _020C7E88 ; =0x040004A4 + ldr r1, _020C7E8C ; =0x040004A8 + str r2, [r0, #0x0] + mov r2, #0x0 + ldr r0, _020C7E90 ; =0x040004AC + str r2, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C7E7C: .word 0x04000600 +_020C7E80: .word 0x04000060 +_020C7E84: .word 0x001F0080 +_020C7E88: .word 0x040004A4 +_020C7E8C: .word 0x040004A8 +_020C7E90: .word 0x040004AC + + arm_func_start G3X_Init +G3X_Init: ; 0x020C7E94 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl G3X_ClearFifo + ldr r0, _020C7FAC ; =0x04000504 + mov r1, #0x0 + str r1, [r0, #0x0] + ldr r1, _020C7FB0 ; =0x04000600 +_020C7EB0: + ldr r0, [r1, #0x0] + ands r0, r0, #0x8000000 + bne _020C7EB0 + ldr r0, _020C7FB4 ; =0x04000060 + mov r3, #0x0 + strh r3, [r0, #0x0] + ldr r2, _020C7FB8 ; =0x04000010 + str r3, [r1, #0x0] + str r3, [r2, #0x0] + ldrh r12, [r0, #0x0] + ldr r2, _020C7FBC ; =0xFFFFCFFD + ldr r3, _020C7FC0 ; =0x0000CFFB + orr r12, r12, #0x2000 + strh r12, [r0, #0x0] + ldrh r12, [r0, #0x0] + orr r12, r12, #0x1000 + strh r12, [r0, #0x0] + ldrh r12, [r0, #0x0] + and r2, r12, r2 + strh r2, [r0, #0x0] + ldrh r2, [r0, #0x0] + bic r2, r2, #0x3000 + orr r2, r2, #0x10 + strh r2, [r0, #0x0] + ldrh r2, [r0, #0x0] + and r2, r2, r3 + strh r2, [r0, #0x0] + ldr r0, [r1, #0x0] + orr r0, r0, #0x8000 + str r0, [r1, #0x0] + ldr r0, [r1, #0x0] + bic r0, r0, #0xc0000000 + orr r0, r0, #0x80000000 + str r0, [r1, #0x0] + bl G3X_InitMtxStack + ldr r0, _020C7FC4 ; =0x04000350 + mov r3, #0x0 + ldr r2, _020C7FC8 ; =0x00007FFF + ldr r1, _020C7FCC ; =0x04000354 + str r3, [r0, #0x0] + ldr r0, _020C7FD0 ; =0x04000356 + strh r2, [r1, #0x0] + ldr r1, _020C7FD4 ; =0x04000358 + strh r3, [r0, #0x0] + ldr r0, _020C7FD8 ; =0x0400035C + str r3, [r1, #0x0] + ldr r1, _020C7FDC ; =0x04000008 + strh r3, [r0, #0x0] + ldrh r0, [r1, #0x0] + bic r0, r0, #0x3 + strh r0, [r1, #0x0] + bl G3X_InitTable + ldr r2, _020C7FE0 ; =0x001F0080 + ldr r0, _020C7FE4 ; =0x040004A4 + ldr r1, _020C7FE8 ; =0x040004A8 + str r2, [r0, #0x0] + mov r2, #0x0 + ldr r0, _020C7FEC ; =0x040004AC + str r2, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C7FAC: .word 0x04000504 +_020C7FB0: .word 0x04000600 +_020C7FB4: .word 0x04000060 +_020C7FB8: .word 0x04000010 +_020C7FBC: .word 0xFFFFCFFD +_020C7FC0: .word 0x0000CFFB +_020C7FC4: .word 0x04000350 +_020C7FC8: .word 0x00007FFF +_020C7FCC: .word 0x04000354 +_020C7FD0: .word 0x04000356 +_020C7FD4: .word 0x04000358 +_020C7FD8: .word 0x0400035C +_020C7FDC: .word 0x04000008 +_020C7FE0: .word 0x001F0080 +_020C7FE4: .word 0x040004A4 +_020C7FE8: .word 0x040004A8 +_020C7FEC: .word 0x040004AC + + arm_func_start G3_RotZ +G3_RotZ: ; 0x020C7FF0 + ldr r3, _020C8028 ; =0x04000468 + mov r2, #0x0 + str r1, [r3, #0x0] + str r0, [r3, #0x0] + str r2, [r3, #0x0] + rsb r0, r0, #0x0 + str r0, [r3, #0x0] + str r1, [r3, #0x0] + str r2, [r3, #0x0] + str r2, [r3, #0x0] + str r2, [r3, #0x0] + mov r0, #0x1000 + str r0, [r3, #0x0] + bx lr + .balign 4 +_020C8028: .word 0x04000468 + + arm_func_start G3_RotY +G3_RotY: ; 0x020C802C + ldr ip, _020C8064 ; =0x04000468 + mov r3, #0x0 + str r1, [r12, #0x0] + str r3, [r12, #0x0] + rsb r2, r0, #0x0 + str r2, [r12, #0x0] + str r3, [r12, #0x0] + mov r2, #0x1000 + str r2, [r12, #0x0] + str r3, [r12, #0x0] + str r0, [r12, #0x0] + str r3, [r12, #0x0] + str r1, [r12, #0x0] + bx lr + .balign 4 +_020C8064: .word 0x04000468 + + arm_func_start G3_RotX +G3_RotX: ; 0x020C8068 + ldr r3, _020C80A0 ; =0x04000468 + mov r2, #0x1000 + str r2, [r3, #0x0] + mov r2, #0x0 + str r2, [r3, #0x0] + str r2, [r3, #0x0] + str r2, [r3, #0x0] + str r1, [r3, #0x0] + str r0, [r3, #0x0] + str r2, [r3, #0x0] + rsb r0, r0, #0x0 + str r0, [r3, #0x0] + str r1, [r3, #0x0] + bx lr + .balign 4 +_020C80A0: .word 0x04000468 + + arm_func_start G3i_LookAt_ +G3i_LookAt_: ; 0x020C80A4 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x24 + mov r9, r0 + ldr r6, [r9, #0x0] + ldr r5, [r2, #0x0] + add r0, sp, #0x0 + sub r5, r6, r5 + str r5, [sp, #0x0] + ldr r7, [r9, #0x4] + ldr r6, [r2, #0x4] + mov r5, r1 + sub r1, r7, r6 + str r1, [sp, #0x4] + ldr r6, [r9, #0x8] + ldr r2, [r2, #0x8] + mov r1, r0 + sub r2, r6, r2 + mov r8, r3 + str r2, [sp, #0x8] + ldr r7, [sp, #0x40] + bl VEC_Normalize + add r1, sp, #0x0 + add r2, sp, #0xc + mov r0, r5 + bl VEC_CrossProduct + add r0, sp, #0xc + mov r1, r0 + bl VEC_Normalize +_020C8114: ; 0x020C8114 + add r0, sp, #0x0 + add r1, sp, #0xc + add r2, sp, #0x18 + bl VEC_CrossProduct +_020C8124: ; 0x020C8124 + cmp r8, #0x0 + beq _020C8184 + ldr r0, _020C8234 ; =0x04000440 + mov r1, #0x2 + str r1, [r0, #0x0] + ldr r0, [sp, #0xc] + ldr r4, _020C8238 ; =0x0400045C + str r0, [r4, #0x0] + ldr r0, [sp, #0x18] + str r0, [r4, #0x0] + ldr r0, [sp, #0x0] + str r0, [r4, #0x0] + ldr r0, [sp, #0x10] + str r0, [r4, #0x0] + ldr r0, [sp, #0x1c] + str r0, [r4, #0x0] + ldr r0, [sp, #0x4] + str r0, [r4, #0x0] + ldr r0, [sp, #0x14] + str r0, [r4, #0x0] + ldr r0, [sp, #0x20] + str r0, [r4, #0x0] + ldr r0, [sp, #0x8] + str r0, [r4, #0x0] +_020C8184: + add r1, sp, #0xc + mov r0, r9 + bl VEC_DotProduct + rsb r6, r0, #0x0 + add r1, sp, #0x18 + mov r0, r9 + bl VEC_DotProduct + rsb r5, r0, #0x0 + add r1, sp, #0x0 + mov r0, r9 + bl VEC_DotProduct +_020C81B0: ; 0x020C81B0 + cmp r8, #0x0 + strne r6, [r4, #0x0] + rsb r0, r0, #0x0 + strne r5, [r4, #0x0] + strne r0, [r4, #0x0] + cmp r7, #0x0 + addeq sp, sp, #0x24 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + ldr r1, [sp, #0xc] + str r1, [r7, #0x0] + ldr r1, [sp, #0x18] + str r1, [r7, #0x4] + ldr r1, [sp, #0x0] + str r1, [r7, #0x8] + ldr r1, [sp, #0x10] + str r1, [r7, #0xc] + ldr r1, [sp, #0x1c] + str r1, [r7, #0x10] + ldr r1, [sp, #0x4] + str r1, [r7, #0x14] + ldr r1, [sp, #0x14] + str r1, [r7, #0x18] + ldr r1, [sp, #0x20] + str r1, [r7, #0x1c] + ldr r1, [sp, #0x8] + str r1, [r7, #0x20] + str r6, [r7, #0x24] + str r5, [r7, #0x28] + str r0, [r7, #0x2c] + add sp, sp, #0x24 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020C8234: .word 0x04000440 +_020C8238: .word 0x0400045C + + arm_func_start G3i_OrthoW_ +G3i_OrthoW_: ; 0x020C823C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x34 + str r2, [sp, #0x8] + str r0, [sp, #0x0] + ldr r0, [sp, #0x8] + mov r2, r3 + ldr r7, [sp, #0x64] + sub r0, r2, r0 + str r3, [sp, #0xc] + str r1, [sp, #0x4] + ldr r8, [sp, #0x60] + ldr r6, [sp, #0x68] + bl FX_InvAsync +_020C8270: ; 0x020C8270 + cmp r7, #0x0 + ldrne r0, _020C8528 ; =0x04000440 + movne r1, #0x0 + ldrne r4, _020C852C ; =0x04000458 + strne r1, [r0, #0x0] + cmp r6, #0x0 + beq _020C82B8 + mov r0, #0x0 + str r0, [r6, #0x4] + str r0, [r6, #0x8] + str r0, [r6, #0xc] + str r0, [r6, #0x10] + str r0, [r6, #0x18] + str r0, [r6, #0x1c] + str r0, [r6, #0x20] + str r0, [r6, #0x24] + str r0, [r6, #0x2c] + str r8, [r6, #0x3c] +_020C82B8: + bl FX_GetDivResultFx64c + mov r5, r0 + str r1, [sp, #0x14] + ldr sb, _020C8530 ; =0x04000290 + mov r3, #0x0 + ldr r1, [sp, #0x0] + ldr r0, [sp, #0x4] + str r3, [r9, #0x0] + mov r2, #0x1000 + sub r1, r1, r0 + ldr r0, _020C8534 ; =0x04000298 + str r2, [r9, #0x4] + str r1, [r0, #0x0] + cmp r8, #0x1000 + str r3, [r0, #0x4] + beq _020C8318 + mov r9, r8, asr #0x1f + umull r0, r1, r5, r8 + mla r1, r5, r9, r1 + ldr r5, [sp, #0x14] + mla r1, r5, r8, r1 + bl _ll_sdiv + mov r5, r0 + str r1, [sp, #0x14] +_020C8318: + ldr r0, [sp, #0x14] + mov r2, r5, lsl #0xd + mov r1, r0, lsl #0xd + mov r0, #0x80000000 + adds r0, r2, r0 + orr r1, r1, r5, lsr #0x13 + adc r1, r1, #0x0 + cmp r7, #0x0 + mov r0, #0x0 + strne r1, [r4, #0x0] + strne r0, [r4, #0x0] + strne r0, [r4, #0x0] + strne r0, [r4, #0x0] + strne r0, [r4, #0x0] + cmp r6, #0x0 + strne r1, [r6, #0x0] + bl FX_GetDivResultFx64c + mov r11, r0 + str r1, [sp, #0x2c] + ldr r0, _020C8530 ; =0x04000290 + mov r3, #0x0 + mov r2, #0x1000 + str r3, [r0, #0x0] + str r2, [r0, #0x4] + ldr r9, [sp, #0x58] + ldr r1, [sp, #0x5c] + ldr r0, _020C8534 ; =0x04000298 + sub r1, r9, r1 + str r1, [r0, #0x0] + cmp r8, #0x1000 + str r3, [r0, #0x4] + beq _020C83B8 + mov r9, r8, asr #0x1f + umull r0, r1, r11, r8 + mla r1, r11, r9, r1 + ldr r9, [sp, #0x2c] + mla r1, r9, r8, r1 + bl _ll_sdiv + mov r11, r0 + str r1, [sp, #0x2c] +_020C83B8: + ldr r0, [sp, #0x2c] + mov r3, r11, lsl #0xd + mov r2, r0, lsl #0xd + mov r0, #0x80000000 + orr r2, r2, r11, lsr #0x13 + adds r0, r3, r0 + adc r0, r2, #0x0 + cmp r7, #0x0 + mov r1, #0x0 + strne r0, [r4, #0x0] + strne r1, [r4, #0x0] + strne r1, [r4, #0x0] + strne r1, [r4, #0x0] + strne r1, [r4, #0x0] + cmp r6, #0x0 + strne r0, [r6, #0x14] + bl FX_GetDivResultFx64c + cmp r8, #0x1000 + beq _020C8428 + mov r9, r8, asr #0x1f + mov r2, #0x1000 + mov r3, #0x0 + umull r12, r10, r0, r8 + mla r10, r0, r9, r10 + mov r0, r12 + mla r10, r1, r8, r10 + mov r1, r10 + bl _ll_sdiv +_020C8428: + mov r9, r1, lsl #0xd + mov r10, r0, lsl #0xd + mov r2, #0x80000000 + orr r9, r9, r0, lsr #0x13 + adds r2, r10, r2 + adc r2, r9, #0x0 + cmp r7, #0x0 + mov r3, #0x0 + strne r2, [r4, #0x0] + strne r3, [r4, #0x0] + cmp r6, #0x0 + strne r2, [r6, #0x28] + ldr r3, [sp, #0xc] + ldr r2, [sp, #0x8] + add r9, r3, r2 + rsb lr, r9, #0x0 + ldr r3, [sp, #0x0] + ldr r2, [sp, #0x4] + ldr r9, [sp, #0x5c] + add r2, r3, r2 + ldr r3, [sp, #0x58] + rsb r12, r2, #0x0 + add r3, r9, r3 + mov r9, r12, asr #0x1f + str r9, [sp, #0x20] + mov r9, r3, asr #0x1f + str r9, [sp, #0x24] + umull r10, r9, r5, lr + mov r2, lr, asr #0x1f + str r2, [sp, #0x1c] + str r10, [sp, #0x18] + ldr r10, [sp, #0x1c] + mov r2, #0x80000000 + mla r9, r5, r10, r9 + ldr r5, [sp, #0x14] + mla r9, r5, lr, r9 + ldr r5, [sp, #0x18] + adds r5, r5, r2 + adc r10, r9, #0x0 + ldr r5, [sp, #0x20] + umull lr, r9, r11, r12 + mla r9, r11, r5, r9 + ldr r5, [sp, #0x2c] + mla r9, r5, r12, r9 + adds r5, lr, r2 + adc r5, r9, #0x0 + umull r11, r9, r0, r3 + adds r2, r11, r2 + ldr r2, [sp, #0x24] + mla r9, r0, r2, r9 + mla r9, r1, r3, r9 + adc r0, r9, #0x0 + cmp r7, #0x0 + strne r10, [r4, #0x0] + strne r5, [r4, #0x0] + strne r0, [r4, #0x0] + strne r8, [r4, #0x0] + cmp r6, #0x0 + strne r10, [r6, #0x30] + strne r5, [r6, #0x34] + strne r0, [r6, #0x38] + add sp, sp, #0x34 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020C8528: .word 0x04000440 +_020C852C: .word 0x04000458 +_020C8530: .word 0x04000290 +_020C8534: .word 0x04000298 + + arm_func_start G3i_PerspectiveW_ +G3i_PerspectiveW_: ; 0x020C8538 + stmdb sp!, {r4-r10,lr} + mov r5, r0 + mov r0, r1 + mov r1, r5 + ldr r6, [sp, #0x24] + mov r9, r2 + mov r8, r3 + ldr r5, [sp, #0x2c] + bl FX_Div + mov r7, r0 + cmp r6, #0x1000 + mulne r1, r7, r6 + movne r0, r1, asr #0xb + addne r0, r1, r0, lsr #0x14 + movne r7, r0, asr #0xc + ldr r0, [sp, #0x28] + ldr r2, _020C8718 ; =0x04000290 + cmp r0, #0x0 + mov r3, #0x0 + str r3, [r2, #0x0] + ldr r1, _020C871C ; =0x04000298 + str r7, [r2, #0x4] + str r9, [r1, #0x0] + ldrne r0, _020C8720 ; =0x04000440 + str r3, [r1, #0x4] + ldrne r4, _020C8724 ; =0x04000458 + strne r3, [r0, #0x0] + cmp r5, #0x0 + beq _020C85E4 + mov r1, #0x0 + str r1, [r5, #0x4] + str r1, [r5, #0x8] + str r1, [r5, #0xc] + str r1, [r5, #0x10] + str r1, [r5, #0x18] + str r1, [r5, #0x1c] + str r1, [r5, #0x20] + str r1, [r5, #0x24] + rsb r0, r6, #0x0 + str r0, [r5, #0x2c] + str r1, [r5, #0x30] + str r1, [r5, #0x34] + str r1, [r5, #0x3c] +_020C85E4: + bl FX_GetDivResult + ldr r3, [sp, #0x20] + ldr r1, [sp, #0x28] + ldr sb, _020C8718 ; =0x04000290 + mov r12, #0x0 + str r12, [r9, #0x0] + mov r10, #0x1000 + ldr r2, _020C871C ; =0x04000298 + str r10, [r9, #0x4] + sub r3, r8, r3 + str r3, [r2, #0x0] + str r12, [r2, #0x4] + cmp r1, #0x0 + beq _020C8644 + str r0, [r4, #0x0] + str r12, [r4, #0x0] + str r12, [r4, #0x0] + str r12, [r4, #0x0] + str r12, [r4, #0x0] + str r7, [r4, #0x0] + str r12, [r4, #0x0] + str r12, [r4, #0x0] + str r12, [r4, #0x0] + str r12, [r4, #0x0] +_020C8644: + cmp r5, #0x0 + strne r0, [r5, #0x0] + strne r7, [r5, #0x14] + bl FX_GetDivResultFx64c + cmp r6, #0x1000 + beq _020C8680 + mov r2, r6, asr #0x1f + umull r7, r3, r0, r6 + mla r3, r0, r2, r3 + mla r3, r1, r6, r3 + mov r0, r7 + mov r1, r3 + mov r2, #0x1000 + mov r3, #0x0 + bl _ll_sdiv +_020C8680: + ldr r3, [sp, #0x20] + mov r10, r8, lsl #0x1 + add r12, r3, r8 + mov r2, r12, asr #0x1f + umull r7, lr, r0, r12 + mla lr, r0, r2, lr + mov r9, #0x80000000 + smull r3, r2, r10, r3 + mla lr, r1, r12, lr + adds r7, r7, r9 + mov r8, #0x800 + adc r7, lr, #0x0 + adds r3, r3, r8 + adc r2, r2, #0x0 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + umull r10, r8, r0, r3 + mov r2, r3, asr #0x1f + adds r9, r10, r9 + mla r8, r0, r2, r8 + mla r8, r1, r3, r8 + ldr r0, [sp, #0x28] + adc r2, r8, #0x0 + cmp r0, #0x0 + mov r0, #0x0 + beq _020C8704 + str r7, [r4, #0x0] + rsb r1, r6, #0x0 + str r1, [r4, #0x0] + str r0, [r4, #0x0] + str r0, [r4, #0x0] + str r2, [r4, #0x0] + str r0, [r4, #0x0] +_020C8704: + cmp r5, #0x0 + strne r7, [r5, #0x28] + strne r2, [r5, #0x38] + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020C8718: .word 0x04000290 +_020C871C: .word 0x04000298 +_020C8720: .word 0x04000440 +_020C8724: .word 0x04000458 + + arm_func_start GXS_EndLoadOBJExtPltt +GXS_EndLoadOBJExtPltt: ; 0x020C8728 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C876C ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C8748 + bl MI_WaitDma +_020C8748: + ldr r0, _020C8770 ; =0x021D33F8 + ldr r0, [r0, #0x0] + bl GX_SetBankForSubOBJExtPltt + ldr r0, _020C8770 ; =0x021D33F8 + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C876C: .word 0x02106814 +_020C8770: .word 0x021D33F8 + + arm_func_start GXS_LoadOBJExtPltt +GXS_LoadOBJExtPltt: ; 0x020C8774 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + ldr r3, _020C87E0 ; =0x02106814 + mvn r12, #0x0 + ldr lr, [r3, #0x0] + mov r5, r0 + mov r4, r1 + mov r3, r2 + cmp lr, r12 + beq _020C87C8 + ldr r2, _020C87E4 ; =0x068A0000 + mov r12, #0x0 + str r12, [sp, #0x0] + mov r0, lr + mov r1, r5 + add r2, r4, r2 + str r12, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr +_020C87C8: + ldr r1, _020C87E4 ; =0x068A0000 + add r1, r4, r1 + bl MIi_CpuCopy32 + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020C87E0: .word 0x02106814 +_020C87E4: .word 0x068A0000 + + arm_func_start GXS_BeginLoadOBJExtPltt +GXS_BeginLoadOBJExtPltt: ; 0x020C87E8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl GX_ResetBankForSubOBJ + ldr r1, _020C8808 ; =0x021D33F8 + str r0, [r1, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C8808: .word 0x021D33F8 + + arm_func_start GXS_EndLoadBGExtPltt +GXS_EndLoadBGExtPltt: ; 0x020C880C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C8850 ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C882C + bl MI_WaitDma +_020C882C: + ldr r0, _020C8854 ; =0x021D33E0 + ldr r0, [r0, #0x0] + bl GX_SetBankForSubBGExtPltt + ldr r0, _020C8854 ; =0x021D33E0 + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C8850: .word 0x02106814 +_020C8854: .word 0x021D33E0 + + arm_func_start GXS_LoadBGExtPltt +GXS_LoadBGExtPltt: ; 0x020C8858 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + ldr r3, _020C88C4 ; =0x02106814 + mvn r12, #0x0 + ldr lr, [r3, #0x0] + mov r5, r0 + mov r4, r1 + mov r3, r2 + cmp lr, r12 + beq _020C88AC + ldr r2, _020C88C8 ; =0x06898000 + mov r12, #0x0 + str r12, [sp, #0x0] + mov r0, lr + mov r1, r5 + add r2, r4, r2 + str r12, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr +_020C88AC: + ldr r1, _020C88C8 ; =0x06898000 + add r1, r4, r1 + bl MIi_CpuCopy32 + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020C88C4: .word 0x02106814 +_020C88C8: .word 0x06898000 + + arm_func_start GXS_BeginLoadBGExtPltt +GXS_BeginLoadBGExtPltt: ; 0x020C88CC + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl FUN_020C6034 + ldr r1, _020C88EC ; =0x021D33E0 + str r0, [r1, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C88EC: .word 0x021D33E0 + + arm_func_start GX_EndLoadOBJExtPltt +GX_EndLoadOBJExtPltt: ; 0x020C88F0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C893C ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C8910 + bl MI_WaitDma +_020C8910: + ldr r0, _020C8940 ; =0x021D33E8 + ldr r0, [r0, #0x0] + bl GX_SetBankForOBJExtPltt + ldr r1, _020C8940 ; =0x021D33E8 + mov r2, #0x0 + ldr r0, _020C8944 ; =0x021D33E4 + str r2, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C893C: .word 0x02106814 +_020C8940: .word 0x021D33E8 +_020C8944: .word 0x021D33E4 + + arm_func_start GX_LoadOBJExtPltt +GX_LoadOBJExtPltt: ; 0x020C8948 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + ldr ip, _020C89B4 ; =0x021D33E4 + ldr r3, _020C89B8 ; =0x02106814 + ldr r4, [r12, #0x0] + ldr lr, [r3, #0x0] + mvn r12, #0x0 + mov r5, r0 + mov r3, r2 + cmp lr, r12 + add r4, r4, r1 + beq _020C89A0 + mov r12, #0x0 + str r12, [sp, #0x0] + mov r0, lr + mov r1, r5 + mov r2, r4 + str r12, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr +_020C89A0: + mov r1, r4 + bl MIi_CpuCopy32 + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020C89B4: .word 0x021D33E4 +_020C89B8: .word 0x02106814 + + arm_func_start GX_BeginLoadOBJExtPltt +GX_BeginLoadOBJExtPltt: ; 0x020C89BC + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl GX_ResetBankForOBJExtPltt + ldr r1, _020C8A1C ; =0x021D33E8 + cmp r0, #0x0 + str r0, [r1, #0x0] + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + cmp r0, #0x20 + beq _020C8A04 + cmp r0, #0x40 + ldreq r1, _020C8A20 ; =0x06894000 + ldreq r0, _020C8A24 ; =0x021D33E4 + add sp, sp, #0x4 + streq r1, [r0, #0x0] + ldmia sp!, {lr} + bx lr +_020C8A04: + ldr r1, _020C8A28 ; =0x06890000 + ldr r0, _020C8A24 ; =0x021D33E4 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C8A1C: .word 0x021D33E8 +_020C8A20: .word 0x06894000 +_020C8A24: .word 0x021D33E4 +_020C8A28: .word 0x06890000 + + arm_func_start GX_EndLoadBGExtPltt +GX_EndLoadBGExtPltt: ; 0x020C8A2C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C8A80 ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C8A4C + bl MI_WaitDma +_020C8A4C: + ldr r0, _020C8A84 ; =0x021D33F4 + ldr r0, [r0, #0x0] + bl GX_SetBankForBGExtPltt + ldr r2, _020C8A84 ; =0x021D33F4 + mov r3, #0x0 + ldr r1, _020C8A88 ; =0x021D33F0 + ldr r0, _020C8A8C ; =0x021D33EC + str r3, [r2, #0x0] + str r3, [r1, #0x0] + str r3, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C8A80: .word 0x02106814 +_020C8A84: .word 0x021D33F4 +_020C8A88: .word 0x021D33F0 +_020C8A8C: .word 0x021D33EC + + arm_func_start GX_LoadBGExtPltt +GX_LoadBGExtPltt: ; 0x020C8A90 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + ldr lr, _020C8B04 ; =0x021D33F0 + ldr ip, _020C8B08 ; =0x021D33EC + ldr r3, _020C8B0C ; =0x02106814 + ldr lr, [lr, #0x0] + ldr r4, [r12, #0x0] + add r5, lr, r1 + ldr lr, [r3, #0x0] + mvn r12, #0x0 + mov r1, r0 + mov r3, r2 + cmp lr, r12 + sub r4, r5, r4 + beq _020C8AF0 + mov r12, #0x0 + str r12, [sp, #0x0] + mov r0, lr + mov r2, r4 + str r12, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr +_020C8AF0: + mov r1, r4 + bl MIi_CpuCopy32 + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020C8B04: .word 0x021D33F0 +_020C8B08: .word 0x021D33EC +_020C8B0C: .word 0x02106814 + + arm_func_start GX_BeginLoadBGExtPltt +GX_BeginLoadBGExtPltt: ; 0x020C8B10 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl GX_ResetBankForBGExtPltt + ldr r1, _020C8BFC ; =0x021D33F4 + cmp r0, #0x20 + str r0, [r1, #0x0] + bgt _020C8B60 + cmp r0, #0x20 + bge _020C8BD8 + cmp r0, #0x0 + bgt _020C8B4C + add sp, sp, #0x4 + cmp r0, #0x0 + ldmia sp!, {lr} + bx lr +_020C8B4C: + cmp r0, #0x10 + beq _020C8B90 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020C8B60: + cmp r0, #0x40 + bgt _020C8B7C + cmp r0, #0x40 + beq _020C8BB4 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020C8B7C: + cmp r0, #0x60 + beq _020C8BD8 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020C8B90: + ldr r3, _020C8C00 ; =0x06880000 + ldr r1, _020C8C04 ; =0x021D33F0 + ldr r0, _020C8C08 ; =0x021D33EC + mov r2, #0x0 + str r3, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020C8BB4: + ldr r3, _020C8C0C ; =0x06894000 + ldr r1, _020C8C04 ; =0x021D33F0 + ldr r0, _020C8C08 ; =0x021D33EC + mov r2, #0x4000 + str r3, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020C8BD8: + ldr r3, _020C8C10 ; =0x06890000 + ldr r1, _020C8C04 ; =0x021D33F0 + ldr r0, _020C8C08 ; =0x021D33EC + mov r2, #0x0 + str r3, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C8BFC: .word 0x021D33F4 +_020C8C00: .word 0x06880000 +_020C8C04: .word 0x021D33F0 +_020C8C08: .word 0x021D33EC +_020C8C0C: .word 0x06894000 +_020C8C10: .word 0x06890000 + + arm_func_start GXS_LoadBG3Char +GXS_LoadBG3Char: ; 0x020C8C14 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2S_GetBG3CharPtr + ldr r1, _020C8C78 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8C60 + cmp r4, #0x30 + bls _020C8C60 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy32 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8C60: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8C78: .word 0x02106814 + + arm_func_start GX_LoadBG3Char +GX_LoadBG3Char: ; 0x020C8C7C + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2_GetBG3CharPtr + ldr r1, _020C8CE0 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8CC8 + cmp r4, #0x30 + bls _020C8CC8 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy32 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8CC8: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8CE0: .word 0x02106814 + + arm_func_start GXS_LoadBG2Char +GXS_LoadBG2Char: ; 0x020C8CE4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2S_GetBG2CharPtr + ldr r1, _020C8D48 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8D30 + cmp r4, #0x30 + bls _020C8D30 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy32 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8D30: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8D48: .word 0x02106814 + + arm_func_start GX_LoadBG2Char +GX_LoadBG2Char: ; 0x020C8D4C + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2_GetBG2CharPtr + ldr r1, _020C8DB0 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8D98 + cmp r4, #0x30 + bls _020C8D98 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy32 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8D98: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8DB0: .word 0x02106814 + + arm_func_start GXS_LoadBG1Char +GXS_LoadBG1Char: ; 0x020C8DB4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2S_GetBG1CharPtr + ldr r1, _020C8E18 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8E00 + cmp r4, #0x30 + bls _020C8E00 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy32 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8E00: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8E18: .word 0x02106814 + + arm_func_start GX_LoadBG1Char +GX_LoadBG1Char: ; 0x020C8E1C + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2_GetBG1CharPtr + ldr r1, _020C8E80 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8E68 + cmp r4, #0x30 + bls _020C8E68 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy32 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8E68: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8E80: .word 0x02106814 + + arm_func_start GXS_LoadBG0Char +GXS_LoadBG0Char: ; 0x020C8E84 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2S_GetBG0CharPtr + ldr r1, _020C8EE8 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8ED0 + cmp r4, #0x30 + bls _020C8ED0 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy32 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8ED0: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8EE8: .word 0x02106814 + + arm_func_start GX_LoadBG0Char +GX_LoadBG0Char: ; 0x020C8EEC + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2_GetBG0CharPtr + ldr r1, _020C8F50 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8F38 + cmp r4, #0x30 + bls _020C8F38 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy32 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8F38: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8F50: .word 0x02106814 + + arm_func_start GXS_LoadBG3Scr +GXS_LoadBG3Scr: ; 0x020C8F54 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2S_GetBG3ScrPtr + ldr r1, _020C8FB8 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C8FA0 + cmp r4, #0x1c + bls _020C8FA0 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy16 + ldmia sp!, {r4-r6,lr} + bx lr +_020C8FA0: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy16 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C8FB8: .word 0x02106814 + + arm_func_start GX_LoadBG3Scr +GX_LoadBG3Scr: ; 0x020C8FBC + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2_GetBG3ScrPtr + ldr r1, _020C9020 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C9008 + cmp r4, #0x1c + bls _020C9008 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy16 + ldmia sp!, {r4-r6,lr} + bx lr +_020C9008: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy16 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C9020: .word 0x02106814 + + arm_func_start GXS_LoadBG2Scr +GXS_LoadBG2Scr: ; 0x020C9024 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2S_GetBG2ScrPtr + ldr r1, _020C9088 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C9070 + cmp r4, #0x1c + bls _020C9070 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy16 + ldmia sp!, {r4-r6,lr} + bx lr +_020C9070: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy16 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C9088: .word 0x02106814 + + arm_func_start GX_LoadBG2Scr +GX_LoadBG2Scr: ; 0x020C908C + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2_GetBG2ScrPtr + ldr r1, _020C90F0 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C90D8 + cmp r4, #0x1c + bls _020C90D8 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy16 + ldmia sp!, {r4-r6,lr} + bx lr +_020C90D8: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy16 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C90F0: .word 0x02106814 + + arm_func_start GXS_LoadBG1Scr +GXS_LoadBG1Scr: ; 0x020C90F4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2S_GetBG1ScrPtr + ldr r1, _020C9158 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C9140 + cmp r4, #0x1c + bls _020C9140 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy16 + ldmia sp!, {r4-r6,lr} + bx lr +_020C9140: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy16 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C9158: .word 0x02106814 + + arm_func_start GX_LoadBG1Scr +GX_LoadBG1Scr: ; 0x020C915C + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2_GetBG1ScrPtr + ldr r1, _020C91C0 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C91A8 + cmp r4, #0x1c + bls _020C91A8 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy16 + ldmia sp!, {r4-r6,lr} + bx lr +_020C91A8: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy16 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C91C0: .word 0x02106814 + + arm_func_start GXS_LoadBG0Scr +GXS_LoadBG0Scr: ; 0x020C91C4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2S_GetBG0ScrPtr + ldr r1, _020C9228 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C9210 + cmp r4, #0x1c + bls _020C9210 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy16 + ldmia sp!, {r4-r6,lr} + bx lr +_020C9210: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy16 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C9228: .word 0x02106814 + + arm_func_start GX_LoadBG0Scr +GX_LoadBG0Scr: ; 0x020C922C + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl G2_GetBG0ScrPtr + ldr r1, _020C9290 ; =0x02106814 + mov r12, r0 + ldr r0, [r1, #0x0] + mvn r1, #0x0 + cmp r0, r1 + beq _020C9278 + cmp r4, #0x1c + bls _020C9278 + mov r1, r6 + mov r3, r4 + add r2, r12, r5 + bl MI_DmaCopy16 + ldmia sp!, {r4-r6,lr} + bx lr +_020C9278: + mov r0, r6 + mov r2, r4 + add r1, r12, r5 + bl MIi_CpuCopy16 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020C9290: .word 0x02106814 + + arm_func_start GXS_LoadOBJ +GXS_LoadOBJ: ; 0x020C9294 + stmdb sp!, {r4,lr} + ldr r3, _020C92F0 ; =0x02106814 + mov r4, r0 + ldr r0, [r3, #0x0] + mvn r12, #0x0 + mov lr, r1 + mov r3, r2 + cmp r0, r12 + mov r12, #0x6600000 + beq _020C92D8 + cmp r3, #0x30 + bls _020C92D8 + mov r1, r4 + add r2, r12, lr + bl MI_DmaCopy32 + ldmia sp!, {r4,lr} + bx lr +_020C92D8: + mov r0, r4 + mov r2, r3 + add r1, r12, lr + bl MIi_CpuCopy32 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C92F0: .word 0x02106814 + + arm_func_start GX_LoadOBJ +GX_LoadOBJ: ; 0x020C92F4 + stmdb sp!, {r4,lr} + ldr r3, _020C9350 ; =0x02106814 + mov r4, r0 + ldr r0, [r3, #0x0] + mvn r12, #0x0 + mov lr, r1 + mov r3, r2 + cmp r0, r12 + mov r12, #0x6400000 + beq _020C9338 + cmp r3, #0x30 + bls _020C9338 + mov r1, r4 + add r2, r12, lr + bl MI_DmaCopy32 + ldmia sp!, {r4,lr} + bx lr +_020C9338: + mov r0, r4 + mov r2, r3 + add r1, r12, lr + bl MIi_CpuCopy32 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C9350: .word 0x02106814 + + arm_func_start GXS_LoadOAM +GXS_LoadOAM: ; 0x020C9354 + stmdb sp!, {r4,lr} + ldr r3, _020C93B4 ; =0x02106814 + mov r4, r0 + ldr r0, [r3, #0x0] + mvn r12, #0x0 + mov lr, r1 + mov r3, r2 + cmp r0, r12 + beq _020C9398 + cmp r3, #0x30 + bls _020C9398 + ldr r2, _020C93B8 ; =0x07000400 + mov r1, r4 + add r2, lr, r2 + bl MI_DmaCopy32 + ldmia sp!, {r4,lr} + bx lr +_020C9398: + ldr r1, _020C93B8 ; =0x07000400 + mov r0, r4 + mov r2, r3 + add r1, lr, r1 + bl MIi_CpuCopy32 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C93B4: .word 0x02106814 +_020C93B8: .word 0x07000400 + + arm_func_start GX_LoadOAM +GX_LoadOAM: ; 0x020C93BC + stmdb sp!, {r4,lr} + ldr r3, _020C9414 ; =0x02106814 + mov r4, r0 + ldr r0, [r3, #0x0] + mvn r12, #0x0 + mov lr, r1 + mov r3, r2 + cmp r0, r12 + beq _020C93FC + cmp r3, #0x30 + bls _020C93FC + mov r1, r4 + add r2, lr, #0x7000000 + bl MI_DmaCopy32 + ldmia sp!, {r4,lr} + bx lr +_020C93FC: + mov r0, r4 + mov r2, r3 + add r1, lr, #0x7000000 + bl MIi_CpuCopy32 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C9414: .word 0x02106814 + + arm_func_start GXS_LoadOBJPltt +GXS_LoadOBJPltt: ; 0x020C9418 + stmdb sp!, {r4,lr} + ldr r3, _020C9478 ; =0x02106814 + mov r4, r0 + ldr r0, [r3, #0x0] + mvn r12, #0x0 + mov lr, r1 + mov r3, r2 + cmp r0, r12 + beq _020C945C + cmp r3, #0x1c + bls _020C945C + ldr r2, _020C947C ; =0x05000600 + mov r1, r4 + add r2, lr, r2 + bl MI_DmaCopy16 + ldmia sp!, {r4,lr} + bx lr +_020C945C: + ldr r1, _020C947C ; =0x05000600 + mov r0, r4 + mov r2, r3 + add r1, lr, r1 + bl MIi_CpuCopy16 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C9478: .word 0x02106814 +_020C947C: .word 0x05000600 + + arm_func_start GX_LoadOBJPltt +GX_LoadOBJPltt: ; 0x020C9480 + stmdb sp!, {r4,lr} + ldr r3, _020C94E0 ; =0x02106814 + mov r4, r0 + ldr r0, [r3, #0x0] + mvn r12, #0x0 + mov lr, r1 + mov r3, r2 + cmp r0, r12 + beq _020C94C4 + cmp r3, #0x1c + bls _020C94C4 + ldr r2, _020C94E4 ; =0x05000200 + mov r1, r4 + add r2, lr, r2 + bl MI_DmaCopy16 + ldmia sp!, {r4,lr} + bx lr +_020C94C4: + ldr r1, _020C94E4 ; =0x05000200 + mov r0, r4 + mov r2, r3 + add r1, lr, r1 + bl MIi_CpuCopy16 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C94E0: .word 0x02106814 +_020C94E4: .word 0x05000200 + + arm_func_start GXS_LoadBGPltt +GXS_LoadBGPltt: ; 0x020C94E8 + stmdb sp!, {r4,lr} + ldr r3, _020C9548 ; =0x02106814 + mov r4, r0 + ldr r0, [r3, #0x0] + mvn r12, #0x0 + mov lr, r1 + mov r3, r2 + cmp r0, r12 + beq _020C952C + cmp r3, #0x1c + bls _020C952C + ldr r2, _020C954C ; =0x05000400 + mov r1, r4 + add r2, lr, r2 + bl MI_DmaCopy16 + ldmia sp!, {r4,lr} + bx lr +_020C952C: + ldr r1, _020C954C ; =0x05000400 + mov r0, r4 + mov r2, r3 + add r1, lr, r1 + bl MIi_CpuCopy16 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C9548: .word 0x02106814 +_020C954C: .word 0x05000400 + + arm_func_start GX_LoadBGPltt +GX_LoadBGPltt: ; 0x020C9550 + stmdb sp!, {r4,lr} + ldr r3, _020C95A8 ; =0x02106814 + mov r4, r0 + ldr r0, [r3, #0x0] + mvn r12, #0x0 + mov lr, r1 + mov r3, r2 + cmp r0, r12 + beq _020C9590 + cmp r3, #0x1c + bls _020C9590 + mov r1, r4 + add r2, lr, #0x5000000 + bl MI_DmaCopy16 + ldmia sp!, {r4,lr} + bx lr +_020C9590: + mov r0, r4 + mov r2, r3 + add r1, lr, #0x5000000 + bl MIi_CpuCopy16 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C95A8: .word 0x02106814 + + arm_func_start GX_EndLoadClearImage +GX_EndLoadClearImage: ; 0x020C95AC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C95F8 ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C95CC + bl MI_WaitDma +_020C95CC: + ldr r0, _020C95FC ; =0x021D33FC + ldr r0, [r0, #0x0] + bl GX_SetBankForClearImage + ldr r1, _020C95FC ; =0x021D33FC + mov r2, #0x0 + ldr r0, _020C9600 ; =0x021D340C + str r2, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C95F8: .word 0x02106814 +_020C95FC: .word 0x021D33FC +_020C9600: .word 0x021D340C + + arm_func_start GX_LoadClearImageDepth +GX_LoadClearImageDepth: ; 0x020C9604 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r3, _020C9670 ; =0x021D340C + ldr r2, _020C9674 ; =0x02106814 + ldr r12, [r3, #0x0] + ldr lr, [r2, #0x0] + mvn r2, #0x0 + mov r4, r0 + mov r3, r1 + cmp lr, r2 + add r2, r12, #0x20000 + beq _020C9658 + mov r12, #0x0 + str r12, [sp, #0x0] + mov r0, lr + mov r1, r4 + str r12, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020C9658: + mov r1, r2 + mov r2, r3 + bl MIi_CpuCopy32 + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C9670: .word 0x021D340C +_020C9674: .word 0x02106814 + + arm_func_start GX_LoadClearImageColor +GX_LoadClearImageColor: ; 0x020C9678 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r2, _020C96E0 ; =0x02106814 + ldr ip, _020C96E4 ; =0x021D340C + ldr lr, [r2, #0x0] + mvn r2, #0x0 + mov r4, r0 + mov r3, r1 + cmp lr, r2 + ldr r2, [r12, #0x0] + beq _020C96C8 + mov r12, #0x0 + str r12, [sp, #0x0] + mov r0, lr + mov r1, r4 + str r12, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020C96C8: + mov r1, r2 + mov r2, r3 + bl MIi_CpuCopy32 + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020C96E0: .word 0x02106814 +_020C96E4: .word 0x021D340C + + arm_func_start GX_BeginLoadClearImage +GX_BeginLoadClearImage: ; 0x020C96E8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl GX_ResetBankForClearImage + ldr r1, _020C979C ; =0x021D33FC + cmp r0, #0xc + str r0, [r1, #0x0] + addls pc, pc, r0, lsl #0x2 + b _020C9790 +_020C9708: + b _020C9790 +_020C970C: + b _020C976C +_020C9710: + b _020C973C +_020C9714: + b _020C973C +_020C9718: + b _020C9784 +_020C971C: + b _020C9790 +_020C9720: + b _020C9790 +_020C9724: + b _020C9790 +_020C9728: + b _020C9754 +_020C972C: + b _020C9790 +_020C9730: + b _020C9790 +_020C9734: + b _020C9790 +_020C9738: + b _020C9754 +_020C973C: + ldr r0, _020C97A0 ; =0x021D340C + mov r1, #0x6800000 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020C9754: + ldr r1, _020C97A4 ; =0x06840000 + ldr r0, _020C97A0 ; =0x021D340C + add sp, sp, #0x4 + str r1, [r0, #0x0] + ldmia sp!, {lr} + bx lr +_020C976C: + ldr r1, _020C97A8 ; =0x067E0000 + ldr r0, _020C97A0 ; =0x021D340C + add sp, sp, #0x4 + str r1, [r0, #0x0] + ldmia sp!, {lr} + bx lr +_020C9784: + ldr r1, _020C97AC ; =0x06820000 + ldr r0, _020C97A0 ; =0x021D340C + str r1, [r0, #0x0] +_020C9790: + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C979C: .word 0x021D33FC +_020C97A0: .word 0x021D340C +_020C97A4: .word 0x06840000 +_020C97A8: .word 0x067E0000 +_020C97AC: .word 0x06820000 + + arm_func_start GX_EndLoadTexPltt +GX_EndLoadTexPltt: ; 0x020C97B0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C97FC ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C97D0 + bl MI_WaitDma +_020C97D0: + ldr r0, _020C9800 ; =0x021D3408 + ldr r0, [r0, #0x0] + bl GX_SetBankForTexPltt + ldr r1, _020C9800 ; =0x021D3408 + mov r2, #0x0 + ldr r0, _020C9804 ; =0x021D3404 + str r2, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C97FC: .word 0x02106814 +_020C9800: .word 0x021D3408 +_020C9804: .word 0x021D3404 + + arm_func_start GX_LoadTexPltt +GX_LoadTexPltt: ; 0x020C9808 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + ldr ip, _020C9874 ; =0x021D3404 + ldr r3, _020C9878 ; =0x02106814 + ldr r4, [r12, #0x0] + ldr lr, [r3, #0x0] + mvn r12, #0x0 + mov r5, r0 + mov r3, r2 + cmp lr, r12 + add r4, r4, r1 + beq _020C9860 + mov r12, #0x0 + str r12, [sp, #0x0] + mov r0, lr + mov r1, r5 + mov r2, r4 + str r12, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr +_020C9860: + mov r1, r4 + bl MIi_CpuCopy32 + add sp, sp, #0xc + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020C9874: .word 0x021D3404 +_020C9878: .word 0x02106814 + + arm_func_start GX_BeginLoadTexPltt +GX_BeginLoadTexPltt: ; 0x020C987C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl GX_ResetBankForTexPltt + mov r3, r0, asr #0x4 + ldr r2, _020C98B8 ; =0x021D3408 + ldr r1, _020C98BC ; =0x02103B3C + mov r3, r3, lsl #0x1 + ldrh r3, [r1, r3] + ldr r1, _020C98C0 ; =0x021D3404 + str r0, [r2, #0x0] + mov r0, r3, lsl #0xc + str r0, [r1, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C98B8: .word 0x021D3408 +_020C98BC: .word 0x02103B3C +_020C98C0: .word 0x021D3404 + + arm_func_start GX_EndLoadTex +GX_EndLoadTex: ; 0x020C98C4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C9920 ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C98E4 + bl MI_WaitDma +_020C98E4: + ldr r0, _020C9924 ; =0x021D3410 + ldr r0, [r0, #0x0] + bl GX_SetBankForTex + ldr r3, _020C9928 ; =0x021D3418 + mov r12, #0x0 + ldr r2, _020C992C ; =0x021D3414 + ldr r1, _020C9930 ; =0x021D3400 + ldr r0, _020C9924 ; =0x021D3410 + str r12, [r3, #0x0] + str r12, [r2, #0x0] + str r12, [r1, #0x0] + str r12, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020C9920: .word 0x02106814 +_020C9924: .word 0x021D3410 +_020C9928: .word 0x021D3418 +_020C992C: .word 0x021D3414 +_020C9930: .word 0x021D3400 + + arm_func_start GX_LoadTex +GX_LoadTex: ; 0x020C9934 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + ldr r3, _020C9A88 ; =0x021D3414 + mov r7, r0 + ldr r5, [r3, #0x0] + mov r6, r2 + cmp r5, #0x0 + ldreq r0, _020C9A8C ; =0x021D3400 + ldreq r0, [r0, #0x0] + addeq r2, r0, r1 + beq _020C9A34 + ldr r0, _020C9A90 ; =0x021D3418 + add r2, r1, r6 + ldr r4, [r0, #0x0] + cmp r2, r4 + ldrlo r0, _020C9A8C ; =0x021D3400 + ldrcc r0, [r0, #0x0] + addcc r2, r0, r1 + blo _020C9A34 + cmp r1, r4 + addcs r0, r5, r1 + subcs r2, r0, r4 + bhs _020C9A34 + ldr r2, _020C9A8C ; =0x021D3400 + ldr r0, _020C9A94 ; =0x02106814 + ldr r3, [r2, #0x0] + ldr r0, [r0, #0x0] + mvn r2, #0x0 + cmp r0, r2 + sub r4, r4, r1 + add r2, r3, r1 + beq _020C99CC + cmp r4, #0x30 + bls _020C99CC + mov r1, r7 + mov r3, r4 + bl MI_DmaCopy32 + b _020C99DC +_020C99CC: + mov r1, r2 + mov r0, r7 + mov r2, r4 + bl MIi_CpuCopy32 +_020C99DC: + ldr r0, _020C9A94 ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C9A18 + mov r12, #0x0 + str r12, [sp, #0x0] + mov r2, r5 + add r1, r7, r4 + sub r3, r6, r4 + str r12, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr +_020C9A18: + mov r1, r5 + add r0, r7, r4 + sub r2, r6, r4 + bl MIi_CpuCopy32 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr +_020C9A34: + ldr r0, _020C9A94 ; =0x02106814 + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020C9A6C + mov r4, #0x0 + str r4, [sp, #0x0] + mov r1, r7 + mov r3, r6 + str r4, [sp, #0x4] + bl MI_DmaCopy32Async + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr +_020C9A6C: + mov r1, r2 + mov r0, r7 + mov r2, r6 + bl MIi_CpuCopy32 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020C9A88: .word 0x021D3414 +_020C9A8C: .word 0x021D3400 +_020C9A90: .word 0x021D3418 +_020C9A94: .word 0x02106814 + + arm_func_start GX_BeginLoadTex +GX_BeginLoadTex: ; 0x020C9A98 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl GX_ResetBankForTex + mov r1, #0x6 + mul r12, r0, r1 + ldr r3, _020C9AFC ; =0x02103B4C + ldr r2, _020C9B00 ; =0x02103B4E + ldr r1, _020C9B04 ; =0x02103B50 + ldrh r5, [r3, r12] + ldrh r4, [r2, r12] + ldrh lr, [r1, r12] + ldr ip, _020C9B08 ; =0x021D3410 + ldr r3, _020C9B0C ; =0x021D3400 + mov r5, r5, lsl #0xc + ldr r2, _020C9B10 ; =0x021D3414 + mov r4, r4, lsl #0xc + ldr r1, _020C9B14 ; =0x021D3418 + mov lr, lr, lsl #0xc + str r0, [r12, #0x0] + str r5, [r3, #0x0] + str r4, [r2, #0x0] + str lr, [r1, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020C9AFC: .word 0x02103B4C +_020C9B00: .word 0x02103B4E +_020C9B04: .word 0x02103B50 +_020C9B08: .word 0x021D3410 +_020C9B0C: .word 0x021D3400 +_020C9B10: .word 0x021D3414 +_020C9B14: .word 0x021D3418 + + arm_func_start G3_EndMakeDL +G3_EndMakeDL: ; 0x020C9B18 + ldr r3, [r0, #0x0] + ldr r2, [r0, #0x8] + cmp r2, r3 + moveq r0, #0x0 + bxeq lr + and r1, r3, #0x3 + cmp r1, #0x3 + addls pc, pc, r1, lsl #0x2 + b _020C9B8C +_020C9B3C: + b _020C9B4C +_020C9B40: + b _020C9B54 +_020C9B44: + b _020C9B64 +_020C9B48: + b _020C9B78 +_020C9B4C: + sub r0, r3, r2 + bx lr +_020C9B54: + add r1, r3, #0x1 + str r1, [r0, #0x0] + mov r1, #0x0 + strb r1, [r3, #0x0] +_020C9B64: + ldr r3, [r0, #0x0] + mov r1, #0x0 + add r2, r3, #0x1 + str r2, [r0, #0x0] + strb r1, [r3, #0x0] +_020C9B78: + ldr r3, [r0, #0x0] + mov r1, #0x0 + add r2, r3, #0x1 + str r2, [r0, #0x0] + strb r1, [r3, #0x0] +_020C9B8C: + ldr r1, [r0, #0x10] + cmp r1, #0x0 + beq _020C9BB0 + ldr r3, [r0, #0x4] + mov r1, #0x0 + add r2, r3, #0x4 + str r2, [r0, #0x4] + str r1, [r3, #0x0] + str r1, [r0, #0x10] +_020C9BB0: + ldr r1, [r0, #0x4] + str r1, [r0, #0x0] + ldr r1, [r0, #0x0] + ldr r0, [r0, #0x8] + sub r0, r1, r0 + bx lr + + arm_func_start G3_BeginMakeDL +G3_BeginMakeDL: ; 0x020C9BC8 + str r2, [r0, #0xc] + str r1, [r0, #0x8] + str r1, [r0, #0x0] + add r1, r1, #0x4 + str r1, [r0, #0x4] + mov r1, #0x0 + str r1, [r0, #0x10] + bx lr + + arm_func_start GX_SendFifo48B +GX_SendFifo48B: ; 0x020C9BE8 + 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 diff --git a/asm/unk_020AF030.s b/asm/unk_020AF030.s index cefa83aaa..33faec27c 100644 --- a/asm/unk_020AF030.s +++ b/asm/unk_020AF030.s @@ -26833,5255 +26833,3 @@ _020C5970: .word 0x00000FFF arm_func_start FX_Init FX_Init: ; 0x020C5974 bx lr - - arm_func_start GXx_SetMasterBrightness_ -GXx_SetMasterBrightness_: ; 0x020C5978 - cmp r1, #0x0 - moveq r1, #0x0 - streqh r1, [r0, #0x0] - bxeq lr - cmp r1, #0x0 - orrgt r1, r1, #0x4000 - strgth r1, [r0, #0x0] - rsble r1, r1, #0x0 - orrle r1, r1, #0x8000 - strleh r1, [r0, #0x0] - bx lr - - arm_func_start GXS_SetGraphicsMode -GXS_SetGraphicsMode: ; 0x020C59A4 - ldr r2, _020C59BC ; =0x04001000 - ldr r1, [r2, #0x0] - bic r1, r1, #0x7 - orr r0, r1, r0 - str r0, [r2, #0x0] - bx lr - .balign 4 -_020C59BC: .word 0x04001000 - - arm_func_start GX_SetGraphicsMode -GX_SetGraphicsMode: ; 0x020C59C0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r3, _020C5A28 ; =0x02106810 - mov lr, #0x4000000 - ldrh r12, [r3, #0x0] - ldr lr, [lr, #0x0] - ldr r3, _020C5A2C ; =0x021D33C0 - cmp r12, #0x0 - strh r0, [r3, #0x0] - ldr r3, _020C5A30 ; =0xFFF0FFF0 - moveq r0, #0x0 - and r3, lr, r3 - orr r0, r3, r0, lsl #0x10 - orr r0, r1, r0 - orr r1, r0, r2, lsl #0x3 - mov r12, #0x4000000 - ldr r0, _020C5A2C ; =0x021D33C0 - str r1, [r12, #0x0] - ldrh r0, [r0, #0x0] - cmp r0, #0x0 - ldreq r0, _020C5A28 ; =0x02106810 - moveq r1, #0x0 - streqh r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C5A28: .word 0x02106810 -_020C5A2C: .word 0x021D33C0 -_020C5A30: .word 0xFFF0FFF0 - - arm_func_start GX_DispOn -GX_DispOn: ; 0x020C5A34 - ldr r0, _020C5A78 ; =0x021D33C0 - ldr r1, _020C5A7C ; =0x02106810 - ldrh r2, [r0, #0x0] - mov r0, #0x1 - strh r0, [r1, #0x0] - cmp r2, #0x0 - moveq r1, #0x4000000 - ldreq r0, [r1, #0x0] - orreq r0, r0, #0x10000 - streq r0, [r1, #0x0] - bxeq lr - mov r1, #0x4000000 - ldr r0, [r1, #0x0] - bic r0, r0, #0x30000 - orr r0, r0, r2, lsl #0x10 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020C5A78: .word 0x021D33C0 -_020C5A7C: .word 0x02106810 - - arm_func_start GX_DispOff -GX_DispOff: ; 0x020C5A80 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, #0x4000000 - ldr r12, [lr, #0x0] - ldr r1, _020C5AC0 ; =0x02106810 - and r2, r12, #0x30000 - mov r3, #0x0 - ldr r0, _020C5AC4 ; =0x021D33C0 - mov r2, r2, lsr #0x10 - strh r3, [r1, #0x0] - strh r2, [r0, #0x0] - bic r0, r12, #0x30000 - str r0, [lr, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C5AC0: .word 0x02106810 -_020C5AC4: .word 0x021D33C0 - - arm_func_start GX_VBlankIntr -GX_VBlankIntr: ; 0x020C5AC8 - ldr r2, _020C5AF4 ; =0x04000004 - cmp r0, #0x0 - ldrh r0, [r2, #0x0] - ldrneh r1, [r2, #0x0] - and r0, r0, #0x8 - orrne r1, r1, #0x8 - strneh r1, [r2, #0x0] - ldreqh r1, [r2, #0x0] - biceq r1, r1, #0x8 - streqh r1, [r2, #0x0] - bx lr - .balign 4 -_020C5AF4: .word 0x04000004 - - arm_func_start GX_HBlankIntr -GX_HBlankIntr: ; 0x020C5AF8 - ldr r2, _020C5B24 ; =0x04000004 - cmp r0, #0x0 - ldrh r0, [r2, #0x0] - ldrneh r1, [r2, #0x0] - and r0, r0, #0x10 - orrne r1, r1, #0x10 - strneh r1, [r2, #0x0] - ldreqh r1, [r2, #0x0] - biceq r1, r1, #0x10 - streqh r1, [r2, #0x0] - bx lr - .balign 4 -_020C5B24: .word 0x04000004 - - arm_func_start GX_Init -GX_Init: ; 0x020C5B28 - stmdb sp!, {r4-r6,lr} - ldr r3, _020C5C68 ; =0x04000304 - ldr r0, _020C5C6C ; =0xFFFFFDF1 - ldrh r2, [r3, #0x0] - ldr r1, _020C5C70 ; =0x0000020E - orr r2, r2, #0x8000 - strh r2, [r3, #0x0] - ldrh r2, [r3, #0x0] - and r0, r2, r0 - orr r0, r0, r1 - strh r0, [r3, #0x0] - ldrh r0, [r3, #0x0] - orr r0, r0, #0x1 - strh r0, [r3, #0x0] - bl GX_InitGXState - ldr r5, _020C5C74 ; =0x021D33BC - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - bne _020C5B9C - mvn r4, #0x2 -_020C5B78: - bl OS_GetLockID - mov r6, r0 - cmp r6, r4 - bne _020C5B8C - bl OS_Terminate -_020C5B8C: - strh r6, [r5, #0x0] - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - beq _020C5B78 -_020C5B9C: - ldr r0, _020C5C78 ; =0x04000004 - mov r2, #0x0 - strh r2, [r0, #0x0] - mov r1, #0x4000000 - ldr r0, _020C5C7C ; =0x02106814 - str r2, [r1, #0x0] - ldr r0, [r0, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C5BF4 - ldr r1, _020C5C80 ; =0x04000008 - mov r3, #0x60 - bl MI_DmaFill32 - ldr r1, _020C5C84 ; =0x0400006C - mov r2, #0x0 - ldr r0, _020C5C7C ; =0x02106814 - strh r2, [r1, #0x0] - ldr r0, [r0, #0x0] - ldr r1, _020C5C88 ; =0x04001000 - mov r3, #0x70 - bl MI_DmaFill32 - b _020C5C1C -_020C5BF4: - ldr r1, _020C5C80 ; =0x04000008 - mov r0, r2 - mov r2, #0x60 - bl MIi_CpuClear32 - ldr r3, _020C5C84 ; =0x0400006C - mov r0, #0x0 - ldr r1, _020C5C88 ; =0x04001000 - mov r2, #0x70 - strh r0, [r3, #0x0] - bl MIi_CpuClear32 -_020C5C1C: - ldr r1, _020C5C8C ; =0x04000020 - mov r2, #0x100 - ldr r0, _020C5C90 ; =0x04000026 - strh r2, [r1, #0x0] - ldr r1, _020C5C94 ; =0x04000030 - strh r2, [r0, #0x0] - ldr r0, _020C5C98 ; =0x04000036 - strh r2, [r1, #0x0] - ldr r1, _020C5C9C ; =0x04001020 - strh r2, [r0, #0x0] - ldr r0, _020C5CA0 ; =0x04001026 - strh r2, [r1, #0x0] - ldr r1, _020C5CA4 ; =0x04001030 - strh r2, [r0, #0x0] - ldr r0, _020C5CA8 ; =0x04001036 - strh r2, [r1, #0x0] - strh r2, [r0, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C5C68: .word 0x04000304 -_020C5C6C: .word 0xFFFFFDF1 -_020C5C70: .word 0x0000020E -_020C5C74: .word 0x021D33BC -_020C5C78: .word 0x04000004 -_020C5C7C: .word 0x02106814 -_020C5C80: .word 0x04000008 -_020C5C84: .word 0x0400006C -_020C5C88: .word 0x04001000 -_020C5C8C: .word 0x04000020 -_020C5C90: .word 0x04000026 -_020C5C94: .word 0x04000030 -_020C5C98: .word 0x04000036 -_020C5C9C: .word 0x04001020 -_020C5CA0: .word 0x04001026 -_020C5CA4: .word 0x04001030 -_020C5CA8: .word 0x04001036 - - arm_func_start GX_InitGXState -GX_InitGXState: ; 0x020C5CAC - ldr r0, _020C5D14 ; =0x021D33C4 - mov r3, #0x0 - ldr r2, _020C5D18 ; =0x04000240 - strh r3, [r0, #0x0] - strh r3, [r0, #0x2] - strh r3, [r0, #0x4] - strh r3, [r0, #0x6] - strh r3, [r0, #0x8] - strh r3, [r0, #0xa] - strh r3, [r0, #0xc] - strh r3, [r0, #0xe] - strh r3, [r0, #0x10] - strh r3, [r0, #0x12] - strh r3, [r0, #0x14] - strh r3, [r0, #0x16] - strh r3, [r0, #0x18] - ldr r1, _020C5D1C ; =0x04000244 - str r3, [r2, #0x0] - ldr r0, _020C5D20 ; =0x04000245 - strb r3, [r1, #0x0] - ldr r1, _020C5D24 ; =0x04000246 - strb r3, [r0, #0x0] - ldr r0, _020C5D28 ; =0x04000248 - strb r3, [r1, #0x0] - strh r3, [r0, #0x0] - bx lr - .balign 4 -_020C5D14: .word 0x021D33C4 -_020C5D18: .word 0x04000240 -_020C5D1C: .word 0x04000244 -_020C5D20: .word 0x04000245 -_020C5D24: .word 0x04000246 -_020C5D28: .word 0x04000248 - - arm_func_start GX_GetBankForSubOBJExtPltt -GX_GetBankForSubOBJExtPltt: ; 0x020C5D2C - ldr r0, _020C5D38 ; =0x021D33C4 - ldrh r0, [r0, #0x18] - bx lr - .balign 4 -_020C5D38: .word 0x021D33C4 - - arm_func_start GX_GetBankForSubBGExtPltt -GX_GetBankForSubBGExtPltt: ; 0x020C5D3C - ldr r0, _020C5D48 ; =0x021D33C4 - ldrh r0, [r0, #0x16] - bx lr - .balign 4 -_020C5D48: .word 0x021D33C4 - - arm_func_start GX_GetBankForSubOBJ -GX_GetBankForSubOBJ: ; 0x020C5D4C - ldr r0, _020C5D58 ; =0x021D33C4 - ldrh r0, [r0, #0x14] - bx lr - .balign 4 -_020C5D58: .word 0x021D33C4 - - arm_func_start GX_GetBankForSubBGExtPltt_2 -GX_GetBankForSubBGExtPltt_2: ; 0x020C5D5C - ldr r0, _020C5D68 ; =0x021D33C4 - ldrh r0, [r0, #0x12] - bx lr - .balign 4 -_020C5D68: .word 0x021D33C4 - - arm_func_start GX_GetBankForLCDC -GX_GetBankForLCDC: ; 0x020C5D6C - ldr r0, _020C5D78 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bx lr - .balign 4 -_020C5D78: .word 0x021D33C4 - - arm_func_start GX_GetBankForTexPltt -GX_GetBankForTexPltt: ; 0x020C5D7C - ldr r0, _020C5D88 ; =0x021D33C4 - - arm_func_start FUN_020C5D80 -FUN_020C5D80: ; 0x020C5D80 - ldrh r0, [r0, #0xa] - bx lr - .balign 4 -_020C5D88: .word 0x021D33C4 - - arm_func_start FUN_020C5D8C -FUN_020C5D8C: ; 0x020C5D8C - ldr r0, _020C5D98 ; =0x021D33C4 - ldrh r0, [r0, #0x8] - bx lr - .balign 4 -_020C5D98: .word 0x021D33C4 - - arm_func_start GX_GetBankForOBJExtPltt -GX_GetBankForOBJExtPltt: ; 0x020C5D9C - ldr r0, _020C5DA8 ; =0x021D33C4 - ldrh r0, [r0, #0x10] - bx lr - .balign 4 -_020C5DA8: .word 0x021D33C4 - - arm_func_start GX_GetBankForBGExtPltt -GX_GetBankForBGExtPltt: ; 0x020C5DAC - ldr r0, _020C5DB8 ; =0x021D33C4 - ldrh r0, [r0, #0xe] - bx lr - .balign 4 -_020C5DB8: .word 0x021D33C4 - - arm_func_start GX_GetBankForOBJ -GX_GetBankForOBJ: ; 0x020C5DBC - ldr r0, _020C5DC8 ; =0x021D33C4 - ldrh r0, [r0, #0x4] - bx lr - .balign 4 -_020C5DC8: .word 0x021D33C4 - - arm_func_start GX_GetBankForBGExtPltt_2 -GX_GetBankForBGExtPltt_2: ; 0x020C5DCC - ldr r0, _020C5DD8 ; =0x021D33C4 - ldrh r0, [r0, #0x2] - bx lr - .balign 4 -_020C5DD8: .word 0x021D33C4 - - arm_func_start GX_DisableBankForSubOBJExtPltt -GX_DisableBankForSubOBJExtPltt: ; 0x020C5DDC - ldr r2, _020C5DF8 ; =0x04001000 - ldr ip, _020C5DFC ; =FUN_020C5F28 - ldr r1, [r2, #0x0] - ldr r0, _020C5E00 ; =0x021D33DC - bic r1, r1, #0x80000000 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C5DF8: .word 0x04001000 -_020C5DFC: .word FUN_020C5F28 -_020C5E00: .word 0x021D33DC - - arm_func_start FUN_020C5E04 -FUN_020C5E04: ; 0x020C5E04 - ldr r2, _020C5E20 ; =0x04001000 - ldr ip, _020C5E24 ; =FUN_020C5F28 - ldr r1, [r2, #0x0] - ldr r0, _020C5E28 ; =0x021D33DA - bic r1, r1, #0x40000000 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C5E20: .word 0x04001000 -_020C5E24: .word FUN_020C5F28 -_020C5E28: .word 0x021D33DA - - arm_func_start GX_DisableBankForSubOBJExtPltt_2 -GX_DisableBankForSubOBJExtPltt_2: ; 0x020C5E2C - ldr ip, _020C5E38 ; =FUN_020C5F28 - ldr r0, _020C5E3C ; =0x021D33D8 - bx r12 - .balign 4 -_020C5E38: .word FUN_020C5F28 -_020C5E3C: .word 0x021D33D8 - - arm_func_start GX_DisableBankForSubBGExtPltt -GX_DisableBankForSubBGExtPltt: ; 0x020C5E40 - ldr ip, _020C5E4C ; =FUN_020C5F28 - ldr r0, _020C5E50 ; =0x021D33D6 - bx r12 - .balign 4 -_020C5E4C: .word FUN_020C5F28 -_020C5E50: .word 0x021D33D6 - - arm_func_start GX_DisableBankForLCDC -GX_DisableBankForLCDC: ; 0x020C5E54 - ldr ip, _020C5E60 ; =FUN_020C5F28 - ldr r0, _020C5E64 ; =0x021D33C4 - bx r12 - .balign 4 -_020C5E60: .word FUN_020C5F28 -_020C5E64: .word 0x021D33C4 - - arm_func_start GX_DisableBankForARM7 -GX_DisableBankForARM7: ; 0x020C5E68 - ldr ip, _020C5E74 ; =FUN_020C5F28 - ldr r0, _020C5E78 ; =0x021D33CA - bx r12 - .balign 4 -_020C5E74: .word FUN_020C5F28 -_020C5E78: .word 0x021D33CA - - arm_func_start GX_DisableBankForClearImage -GX_DisableBankForClearImage: ; 0x020C5E7C - ldr ip, _020C5E88 ; =FUN_020C5F28 - ldr r0, _020C5E8C ; =0x021D33D0 - bx r12 - .balign 4 -_020C5E88: .word FUN_020C5F28 -_020C5E8C: .word 0x021D33D0 - - arm_func_start GX_DisableBankForTexPltt -GX_DisableBankForTexPltt: ; 0x020C5E90 - ldr ip, _020C5E9C ; =FUN_020C5F28 - ldr r0, _020C5EA0 ; =0x021D33CE - bx r12 - .balign 4 -_020C5E9C: .word FUN_020C5F28 -_020C5EA0: .word 0x021D33CE - - arm_func_start GX_DisableBankForTexPltt_2 -GX_DisableBankForTexPltt_2: ; 0x020C5EA4 - ldr ip, _020C5EB0 ; =FUN_020C5F28 - ldr r0, _020C5EB4 ; =0x021D33CC - bx r12 - .balign 4 -_020C5EB0: .word FUN_020C5F28 -_020C5EB4: .word 0x021D33CC - - arm_func_start GX_DisableBankForOBJExtPltt -GX_DisableBankForOBJExtPltt: ; 0x020C5EB8 - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr ip, _020C5ED4 ; =FUN_020C5F28 - bic r1, r1, #0x80000000 - ldr r0, _020C5ED8 ; =0x021D33D4 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C5ED4: .word FUN_020C5F28 -_020C5ED8: .word 0x021D33D4 - - arm_func_start GX_DisableBankForBGExtPltt -GX_DisableBankForBGExtPltt: ; 0x020C5EDC - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr ip, _020C5EF8 ; =FUN_020C5F28 - bic r1, r1, #0x40000000 - ldr r0, _020C5EFC ; =0x021D33D2 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C5EF8: .word FUN_020C5F28 -_020C5EFC: .word 0x021D33D2 - - arm_func_start GX_DisableBankForOBJExtPltt_2 -GX_DisableBankForOBJExtPltt_2: ; 0x020C5F00 - ldr ip, _020C5F0C ; =FUN_020C5F28 - ldr r0, _020C5F10 ; =0x021D33C8 - bx r12 - .balign 4 -_020C5F0C: .word FUN_020C5F28 -_020C5F10: .word 0x021D33C8 - - arm_func_start disableBankForX_ -disableBankForX_: ; 0x020C5F14 - ldr ip, _020C5F20 ; =FUN_020C5F28 - ldr r0, _020C5F24 ; =0x021D33C6 - bx r12 - .balign 4 -_020C5F20: .word FUN_020C5F28 -_020C5F24: .word 0x021D33C6 - - arm_func_start FUN_020C5F28 -FUN_020C5F28: ; 0x020C5F28 - stmdb sp!, {r4,lr} - ldrh r4, [r0, #0x0] - mov r1, #0x0 - strh r1, [r0, #0x0] - ands r0, r4, #0x1 - ldrne r0, _020C5FE4 ; =0x04000240 - strneb r1, [r0, #0x0] - ands r0, r4, #0x2 - ldrne r0, _020C5FE8 ; =0x04000241 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x4 - ldrne r0, _020C5FEC ; =0x04000242 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x8 - ldrne r0, _020C5FF0 ; =0x04000243 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x10 - ldrne r0, _020C5FF4 ; =0x04000244 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x20 - ldrne r0, _020C5FF8 ; =0x04000245 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x40 - ldrne r0, _020C5FFC ; =0x04000246 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x80 - ldrne r0, _020C6000 ; =0x04000248 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x100 - ldrne r0, _020C6004 ; =0x04000249 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ldr r1, _020C6008 ; =0x021D33BC - mov r0, r4, lsl #0x10 - ldrh r1, [r1, #0x0] - mov r0, r0, lsr #0x10 - bl OSi_UnlockVram - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C5FE4: .word 0x04000240 -_020C5FE8: .word 0x04000241 -_020C5FEC: .word 0x04000242 -_020C5FF0: .word 0x04000243 -_020C5FF4: .word 0x04000244 -_020C5FF8: .word 0x04000245 -_020C5FFC: .word 0x04000246 -_020C6000: .word 0x04000248 -_020C6004: .word 0x04000249 -_020C6008: .word 0x021D33BC - - arm_func_start GX_ResetBankForSubOBJ -GX_ResetBankForSubOBJ: ; 0x020C600C - ldr r2, _020C6028 ; =0x04001000 - ldr ip, _020C602C ; =FUN_020C6130 - ldr r1, [r2, #0x0] - ldr r0, _020C6030 ; =0x021D33DC - bic r1, r1, #0x80000000 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C6028: .word 0x04001000 -_020C602C: .word FUN_020C6130 -_020C6030: .word 0x021D33DC - - arm_func_start FUN_020C6034 -FUN_020C6034: ; 0x020C6034 - ldr r2, _020C6050 ; =0x04001000 - ldr ip, _020C6054 ; =FUN_020C6130 - ldr r1, [r2, #0x0] - ldr r0, _020C6058 ; =0x021D33DA - bic r1, r1, #0x40000000 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C6050: .word 0x04001000 -_020C6054: .word FUN_020C6130 -_020C6058: .word 0x021D33DA - - arm_func_start FUN_020C605C -FUN_020C605C: ; 0x020C605C - ldr ip, _020C6068 ; =FUN_020C6130 - ldr r0, _020C606C ; =0x021D33D8 - bx r12 - .balign 4 -_020C6068: .word FUN_020C6130 -_020C606C: .word 0x021D33D8 - - arm_func_start GX_ResetBankForSubBG -GX_ResetBankForSubBG: ; 0x020C6070 - ldr ip, _020C607C ; =FUN_020C6130 - ldr r0, _020C6080 ; =0x021D33D6 - bx r12 - .balign 4 -_020C607C: .word FUN_020C6130 -_020C6080: .word 0x021D33D6 - - arm_func_start GX_ResetBankForClearImage -GX_ResetBankForClearImage: ; 0x020C6084 - ldr ip, _020C6090 ; =FUN_020C6130 - ldr r0, _020C6094 ; =0x021D33D0 - bx r12 - .balign 4 -_020C6090: .word FUN_020C6130 -_020C6094: .word 0x021D33D0 - - arm_func_start GX_ResetBankForTexPltt -GX_ResetBankForTexPltt: ; 0x020C6098 - ldr ip, _020C60A4 ; =FUN_020C6130 - ldr r0, _020C60A8 ; =0x021D33CE - bx r12 - .balign 4 -_020C60A4: .word FUN_020C6130 -_020C60A8: .word 0x021D33CE - - arm_func_start GX_ResetBankForTex -GX_ResetBankForTex: ; 0x020C60AC - ldr ip, _020C60B8 ; =FUN_020C6130 - ldr r0, _020C60BC ; =0x021D33CC - bx r12 - .balign 4 -_020C60B8: .word FUN_020C6130 -_020C60BC: .word 0x021D33CC - - arm_func_start GX_ResetBankForOBJExtPltt -GX_ResetBankForOBJExtPltt: ; 0x020C60C0 - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr ip, _020C60DC ; =FUN_020C6130 - bic r1, r1, #0x80000000 - ldr r0, _020C60E0 ; =0x021D33D4 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C60DC: .word FUN_020C6130 -_020C60E0: .word 0x021D33D4 - - arm_func_start GX_ResetBankForBGExtPltt -GX_ResetBankForBGExtPltt: ; 0x020C60E4 - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr ip, _020C6100 ; =FUN_020C6130 - bic r1, r1, #0x40000000 - ldr r0, _020C6104 ; =0x021D33D2 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C6100: .word FUN_020C6130 -_020C6104: .word 0x021D33D2 - - arm_func_start GX_ResetBankForOBJ -GX_ResetBankForOBJ: ; 0x020C6108 - ldr ip, _020C6114 ; =FUN_020C6130 - ldr r0, _020C6118 ; =0x021D33C8 - bx r12 - .balign 4 -_020C6114: .word FUN_020C6130 -_020C6118: .word 0x021D33C8 - - arm_func_start GX_ResetBankForBG -GX_ResetBankForBG: ; 0x020C611C - ldr ip, _020C6128 ; =FUN_020C6130 - ldr r0, _020C612C ; =0x021D33C6 - bx r12 - .balign 4 -_020C6128: .word FUN_020C6130 -_020C612C: .word 0x021D33C6 - - arm_func_start FUN_020C6130 -FUN_020C6130: ; 0x020C6130 - stmdb sp!, {r4,lr} - ldrh r4, [r0, #0x0] - mov r2, #0x0 - ldr r1, _020C6164 ; =0x021D33C4 - strh r2, [r0, #0x0] - ldrh r2, [r1, #0x0] - mov r0, r4 - orr r2, r2, r4 - strh r2, [r1, #0x0] - bl GX_VRAMCNT_SetLCDC_ - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C6164: .word 0x021D33C4 - - arm_func_start GX_SetBankForSubOBJExtPltt -GX_SetBankForSubOBJExtPltt: ; 0x020C6168 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C61E8 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x18] - ldrh r3, [r1, #0x0] - cmp r0, #0x0 - strh r0, [r1, #0x18] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - beq _020C61C0 - cmp r0, #0x100 - bne _020C61D0 - ldr r3, _020C61EC ; =0x04001000 - ldr r0, _020C61F0 ; =0x04000249 - ldr r2, [r3, #0x0] - mov r1, #0x83 - orr r2, r2, #0x80000000 - str r2, [r3, #0x0] - strb r1, [r0, #0x0] - b _020C61D0 -_020C61C0: - ldr r1, _020C61EC ; =0x04001000 - ldr r0, [r1, #0x0] - bic r0, r0, #0x80000000 - str r0, [r1, #0x0] -_020C61D0: - ldr r0, _020C61E8 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C61E8: .word 0x021D33C4 -_020C61EC: .word 0x04001000 -_020C61F0: .word 0x04000249 - - arm_func_start GX_SetBankForSubBGExtPltt -GX_SetBankForSubBGExtPltt: ; 0x020C61F4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6274 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x16] - ldrh r3, [r1, #0x0] - cmp r0, #0x0 - strh r0, [r1, #0x16] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - beq _020C624C - cmp r0, #0x80 - bne _020C625C - ldr r3, _020C6278 ; =0x04001000 - ldr r0, _020C627C ; =0x04000248 - ldr r2, [r3, #0x0] - mov r1, #0x82 - orr r2, r2, #0x40000000 - str r2, [r3, #0x0] - strb r1, [r0, #0x0] - b _020C625C -_020C624C: - ldr r1, _020C6278 ; =0x04001000 - ldr r0, [r1, #0x0] - bic r0, r0, #0x40000000 - str r0, [r1, #0x0] -_020C625C: - ldr r0, _020C6274 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6274: .word 0x021D33C4 -_020C6278: .word 0x04001000 -_020C627C: .word 0x04000248 - - arm_func_start GX_SetBankForSubOBJ -GX_SetBankForSubOBJ: ; 0x020C6280 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C62F0 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x14] - ldrh r3, [r1, #0x0] - cmp r0, #0x0 - strh r0, [r1, #0x14] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - beq _020C62D8 - cmp r0, #0x8 - beq _020C62CC - cmp r0, #0x100 - ldreq r0, _020C62F4 ; =0x04000249 - moveq r1, #0x82 - streqb r1, [r0, #0x0] - b _020C62D8 -_020C62CC: - ldr r0, _020C62F8 ; =0x04000243 - mov r1, #0x84 - strb r1, [r0, #0x0] -_020C62D8: - ldr r0, _020C62F0 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C62F0: .word 0x021D33C4 -_020C62F4: .word 0x04000249 -_020C62F8: .word 0x04000243 - - arm_func_start GX_SetBankForSubBG -GX_SetBankForSubBG: ; 0x020C62FC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6398 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x12] - ldrh r3, [r1, #0x0] - cmp r0, #0x80 - strh r0, [r1, #0x12] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C6360 - cmp r0, #0x80 - bge _020C6374 - cmp r0, #0x4 - bgt _020C6380 - cmp r0, #0x0 - blt _020C6380 - cmp r0, #0x0 - beq _020C6380 - cmp r0, #0x4 - ldreq r0, _020C639C ; =0x04000242 - moveq r1, #0x84 - streqb r1, [r0, #0x0] - b _020C6380 -_020C6360: - cmp r0, #0x180 - bne _020C6380 - ldr r0, _020C63A0 ; =0x04000249 - mov r1, #0x81 - strb r1, [r0, #0x0] -_020C6374: - ldr r0, _020C63A4 ; =0x04000248 - mov r1, #0x81 - strb r1, [r0, #0x0] -_020C6380: - ldr r0, _020C6398 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6398: .word 0x021D33C4 -_020C639C: .word 0x04000242 -_020C63A0: .word 0x04000249 -_020C63A4: .word 0x04000248 - - arm_func_start GX_SetBankForLCDC -GX_SetBankForLCDC: ; 0x020C63A8 - ldr r1, _020C63C0 ; =0x021D33C4 - ldr ip, _020C63C4 ; =GX_VRAMCNT_SetLCDC_ - ldrh r2, [r1, #0x0] - orr r2, r2, r0 - strh r2, [r1, #0x0] - bx r12 - .balign 4 -_020C63C0: .word 0x021D33C4 -_020C63C4: .word GX_VRAMCNT_SetLCDC_ - - arm_func_start GX_SetBankForARM7 -GX_SetBankForARM7: ; 0x020C63C8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6474 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x6] - ldrh r3, [r1, #0x0] - cmp r0, #0x8 - strh r0, [r1, #0x6] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C642C - cmp r0, #0x8 - bge _020C6450 - cmp r0, #0x4 - bgt _020C645C - cmp r0, #0x0 - blt _020C645C - cmp r0, #0x0 - beq _020C645C - cmp r0, #0x4 - ldreq r0, _020C6478 ; =0x04000242 - moveq r1, #0x82 - streqb r1, [r0, #0x0] - b _020C645C -_020C642C: - cmp r0, #0xc - bne _020C645C - ldr r1, _020C647C ; =0x04000243 - mov r2, #0x8a - strb r2, [r1, #0x0] - ldr r0, _020C6478 ; =0x04000242 - mov r1, #0x82 - strb r1, [r0, #0x0] - b _020C645C -_020C6450: - ldr r0, _020C647C ; =0x04000243 - mov r1, #0x82 - strb r1, [r0, #0x0] -_020C645C: - ldr r0, _020C6474 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6474: .word 0x021D33C4 -_020C6478: .word 0x04000242 -_020C647C: .word 0x04000243 - - arm_func_start GX_SetBankForClearImage -GX_SetBankForClearImage: ; 0x020C6480 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C65A8 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0xc] - ldrh r3, [r1, #0x0] - cmp r0, #0xc - strh r0, [r1, #0xc] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - addls pc, pc, r0, lsl #0x2 - b _020C6590 -_020C64B4: ; 0x020C64B4 - b _020C6540 -_020C64B8: ; 0x020C64B8 - b _020C6554 -_020C64BC: ; 0x020C64BC - b _020C64F4 -_020C64C0: ; 0x020C64C0 - b _020C64E8 -_020C64C4: ; 0x020C64C4 - b _020C6574 -_020C64C8: ; 0x020C64C8 - b _020C6590 -_020C64CC: ; 0x020C64CC - b _020C6590 -_020C64D0: ; 0x020C64D0 - b _020C6590 -_020C64D4: ; 0x020C64D4 - b _020C6520 -_020C64D8: ; 0x020C64D8 - b _020C6590 -_020C64DC: ; 0x020C64DC - b _020C6590 -_020C64E0: ; 0x020C64E0 - b _020C6590 -_020C64E4: ; 0x020C64E4 - b _020C6514 -_020C64E8: - ldr r0, _020C65AC ; =0x04000240 - mov r1, #0x93 - strb r1, [r0, #0x0] -_020C64F4: - ldr r0, _020C65B0 ; =0x04000241 - mov r2, #0x9b - ldr r1, _020C65B4 ; =0x04000060 - strb r2, [r0, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x4000 - strh r0, [r1, #0x0] - b _020C6590 -_020C6514: - ldr r0, _020C65B8 ; =0x04000242 - mov r1, #0x93 - strb r1, [r0, #0x0] -_020C6520: - ldr r0, _020C65BC ; =0x04000243 - mov r2, #0x9b - ldr r1, _020C65B4 ; =0x04000060 - strb r2, [r0, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x4000 - strh r0, [r1, #0x0] - b _020C6590 -_020C6540: - ldr r1, _020C65B4 ; =0x04000060 - ldrh r0, [r1, #0x0] - bic r0, r0, #0x4000 - strh r0, [r1, #0x0] - b _020C6590 -_020C6554: - ldr r0, _020C65AC ; =0x04000240 - mov r2, #0x9b - ldr r1, _020C65B4 ; =0x04000060 - strb r2, [r0, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x4000 - strh r0, [r1, #0x0] - b _020C6590 -_020C6574: - ldr r0, _020C65B8 ; =0x04000242 - mov r2, #0x9b - ldr r1, _020C65B4 ; =0x04000060 - strb r2, [r0, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x4000 - strh r0, [r1, #0x0] -_020C6590: - ldr r0, _020C65A8 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C65A8: .word 0x021D33C4 -_020C65AC: .word 0x04000240 -_020C65B0: .word 0x04000241 -_020C65B4: .word 0x04000060 -_020C65B8: .word 0x04000242 -_020C65BC: .word 0x04000243 - - arm_func_start GX_SetBankForTexPltt -GX_SetBankForTexPltt: ; 0x020C65C0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C66A4 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0xa] - ldrh r3, [r1, #0x0] - cmp r0, #0x30 - strh r0, [r1, #0xa] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C661C - cmp r0, #0x30 - bge _020C6674 - cmp r0, #0x10 - bgt _020C6610 - cmp r0, #0x10 - bge _020C6680 - cmp r0, #0x0 - b _020C668C -_020C6610: - cmp r0, #0x20 - beq _020C6658 - b _020C668C -_020C661C: - cmp r0, #0x60 - bgt _020C6640 - cmp r0, #0x60 - bge _020C664C - cmp r0, #0x40 - ldreq r0, _020C66A8 ; =0x04000246 - moveq r1, #0x83 - streqb r1, [r0, #0x0] - b _020C668C -_020C6640: - cmp r0, #0x70 - beq _020C6668 - b _020C668C -_020C664C: - ldr r0, _020C66A8 ; =0x04000246 - mov r1, #0x8b - strb r1, [r0, #0x0] -_020C6658: - ldr r0, _020C66AC ; =0x04000245 - mov r1, #0x83 - strb r1, [r0, #0x0] - b _020C668C -_020C6668: - ldr r0, _020C66A8 ; =0x04000246 - mov r1, #0x9b - strb r1, [r0, #0x0] -_020C6674: - ldr r0, _020C66AC ; =0x04000245 - mov r1, #0x93 - strb r1, [r0, #0x0] -_020C6680: - ldr r0, _020C66B0 ; =0x04000244 - mov r1, #0x83 - strb r1, [r0, #0x0] -_020C668C: - ldr r0, _020C66A4 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C66A4: .word 0x021D33C4 -_020C66A8: .word 0x04000246 -_020C66AC: .word 0x04000245 -_020C66B0: .word 0x04000244 - - arm_func_start GX_SetBankForTex -GX_SetBankForTex: ; 0x020C66B4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C689C ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x8] - ldrh r3, [r1, #0x0] - cmp r0, #0x0 - strh r0, [r1, #0x8] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bne _020C66FC - ldr r2, _020C68A0 ; =0x04000060 - ldr r0, _020C68A4 ; =0x0000CFFE - ldrh r1, [r2, #0x0] - and r0, r1, r0 - strh r0, [r2, #0x0] - b _020C6884 -_020C66FC: - ldr r2, _020C68A0 ; =0x04000060 - cmp r0, #0xf - ldrh r1, [r2, #0x0] - bic r1, r1, #0x3000 - orr r1, r1, #0x1 - strh r1, [r2, #0x0] - addls pc, pc, r0, lsl #0x2 - b _020C6884 -_020C671C: ; 0x020C671C - b _020C6884 -_020C6720: ; 0x020C6720 - b _020C6878 -_020C6724: ; 0x020C6724 - b _020C6844 -_020C6728: ; 0x020C6728 - b _020C686C -_020C672C: ; 0x020C672C - b _020C681C -_020C6730: ; 0x020C6730 - b _020C675C -_020C6734: ; 0x020C6734 - b _020C6838 -_020C6738: ; 0x020C6738 - b _020C6860 -_020C673C: ; 0x020C673C - b _020C6800 -_020C6740: ; 0x020C6740 - b _020C6778 -_020C6744: ; 0x020C6744 - b _020C6794 -_020C6748: ; 0x020C6748 - b _020C67B0 -_020C674C: ; 0x020C674C - b _020C6810 -_020C6750: ; 0x020C6750 - b _020C67D8 -_020C6754: ; 0x020C6754 - b _020C682C -_020C6758: ; 0x020C6758 - b _020C6854 -_020C675C: - ldr r1, _020C68A8 ; =0x04000240 - mov r2, #0x83 - ldr r0, _020C68AC ; =0x04000242 - strb r2, [r1, #0x0] - mov r1, #0x8b - strb r1, [r0, #0x0] - b _020C6884 -_020C6778: - ldr r1, _020C68A8 ; =0x04000240 - mov r2, #0x83 - ldr r0, _020C68B0 ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x8b - strb r1, [r0, #0x0] - b _020C6884 -_020C6794: - ldr r1, _020C68B4 ; =0x04000241 - mov r2, #0x83 - ldr r0, _020C68B0 ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x8b - strb r1, [r0, #0x0] - b _020C6884 -_020C67B0: - ldr r0, _020C68A8 ; =0x04000240 - mov r2, #0x83 - ldr r1, _020C68B4 ; =0x04000241 - strb r2, [r0, #0x0] - mov r2, #0x8b - ldr r0, _020C68B0 ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x93 - strb r1, [r0, #0x0] - b _020C6884 -_020C67D8: - ldr r0, _020C68A8 ; =0x04000240 - mov r2, #0x83 - ldr r1, _020C68AC ; =0x04000242 - strb r2, [r0, #0x0] - mov r2, #0x8b - ldr r0, _020C68B0 ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x93 - strb r1, [r0, #0x0] - b _020C6884 -_020C6800: - ldr r0, _020C68B0 ; =0x04000243 - mov r1, #0x83 - strb r1, [r0, #0x0] - b _020C6884 -_020C6810: - ldr r0, _020C68B0 ; =0x04000243 - mov r1, #0x8b - strb r1, [r0, #0x0] -_020C681C: - ldr r0, _020C68AC ; =0x04000242 - mov r1, #0x83 - strb r1, [r0, #0x0] - b _020C6884 -_020C682C: - ldr r0, _020C68B0 ; =0x04000243 - mov r1, #0x93 - strb r1, [r0, #0x0] -_020C6838: - ldr r0, _020C68AC ; =0x04000242 - mov r1, #0x8b - strb r1, [r0, #0x0] -_020C6844: - ldr r0, _020C68B4 ; =0x04000241 - mov r1, #0x83 - strb r1, [r0, #0x0] - b _020C6884 -_020C6854: - ldr r0, _020C68B0 ; =0x04000243 - mov r1, #0x9b - strb r1, [r0, #0x0] -_020C6860: - ldr r0, _020C68AC ; =0x04000242 - mov r1, #0x93 - strb r1, [r0, #0x0] -_020C686C: - ldr r0, _020C68B4 ; =0x04000241 - mov r1, #0x8b - strb r1, [r0, #0x0] -_020C6878: - ldr r0, _020C68A8 ; =0x04000240 - mov r1, #0x83 - strb r1, [r0, #0x0] -_020C6884: - ldr r0, _020C689C ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C689C: .word 0x021D33C4 -_020C68A0: .word 0x04000060 -_020C68A4: .word 0x0000CFFE -_020C68A8: .word 0x04000240 -_020C68AC: .word 0x04000242 -_020C68B0: .word 0x04000243 -_020C68B4: .word 0x04000241 - - arm_func_start GX_SetBankForOBJExtPltt -GX_SetBankForOBJExtPltt: ; 0x020C68B8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6964 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x10] - ldrh r3, [r1, #0x0] - cmp r0, #0x0 - strh r0, [r1, #0x10] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - beq _020C693C - cmp r0, #0x20 - beq _020C68FC - cmp r0, #0x40 - beq _020C691C - b _020C694C -_020C68FC: - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr r0, _020C6968 ; =0x04000245 - orr r1, r1, #0x80000000 - str r1, [r2, #0x0] - mov r1, #0x85 - strb r1, [r0, #0x0] - b _020C694C -_020C691C: - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr r0, _020C696C ; =0x04000246 - orr r1, r1, #0x80000000 - str r1, [r2, #0x0] - mov r1, #0x85 - strb r1, [r0, #0x0] - b _020C694C -_020C693C: - mov r1, #0x4000000 - ldr r0, [r1, #0x0] - bic r0, r0, #0x80000000 - str r0, [r1, #0x0] -_020C694C: - ldr r0, _020C6964 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6964: .word 0x021D33C4 -_020C6968: .word 0x04000245 -_020C696C: .word 0x04000246 - - arm_func_start GX_SetBankForBGExtPltt -GX_SetBankForBGExtPltt: ; 0x020C6970 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6A74 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0xe] - ldrh r3, [r1, #0x0] - cmp r0, #0x20 - strh r0, [r1, #0xe] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C69D4 - cmp r0, #0x20 - bge _020C6A40 - cmp r0, #0x0 - bgt _020C69C8 - cmp r0, #0x0 - moveq r1, #0x4000000 - ldreq r0, [r1, #0x0] - biceq r0, r0, #0x40000000 - streq r0, [r1, #0x0] - b _020C6A5C -_020C69C8: - cmp r0, #0x10 - beq _020C69F4 - b _020C6A5C -_020C69D4: - cmp r0, #0x40 - bgt _020C69E8 - cmp r0, #0x40 - beq _020C6A14 - b _020C6A5C -_020C69E8: - cmp r0, #0x60 - beq _020C6A34 - b _020C6A5C -_020C69F4: - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr r0, _020C6A78 ; =0x04000244 - orr r1, r1, #0x40000000 - str r1, [r2, #0x0] - mov r1, #0x84 - strb r1, [r0, #0x0] - b _020C6A5C -_020C6A14: - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr r0, _020C6A7C ; =0x04000246 - orr r1, r1, #0x40000000 - str r1, [r2, #0x0] - mov r1, #0x8c - strb r1, [r0, #0x0] - b _020C6A5C -_020C6A34: - ldr r0, _020C6A7C ; =0x04000246 - mov r1, #0x8c - strb r1, [r0, #0x0] -_020C6A40: - ldr r0, _020C6A80 ; =0x04000245 - mov r1, #0x84 - strb r1, [r0, #0x0] - mov r1, #0x4000000 - ldr r0, [r1, #0x0] - orr r0, r0, #0x40000000 - str r0, [r1, #0x0] -_020C6A5C: - ldr r0, _020C6A74 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6A74: .word 0x021D33C4 -_020C6A78: .word 0x04000244 -_020C6A7C: .word 0x04000246 -_020C6A80: .word 0x04000245 - - arm_func_start GX_SetBankForOBJ -GX_SetBankForOBJ: ; 0x020C6A84 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6BD8 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x4] - ldrh r3, [r1, #0x0] - cmp r0, #0x30 - strh r0, [r1, #0x4] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C6AF4 - cmp r0, #0x30 - bge _020C6B70 - cmp r0, #0x10 - bgt _020C6AE8 - cmp r0, #0x10 - bge _020C6B7C - cmp r0, #0x3 - addls pc, pc, r0, lsl #0x2 - b _020C6BC0 -_020C6AD8: ; 0x020C6AD8 - b _020C6BC0 -_020C6ADC: ; 0x020C6ADC - b _020C6B44 -_020C6AE0: ; 0x020C6AE0 - b _020C6B54 -_020C6AE4: ; 0x020C6AE4 - b _020C6B38 -_020C6AE8: - cmp r0, #0x20 - beq _020C6BB4 - b _020C6BC0 -_020C6AF4: - cmp r0, #0x50 - bgt _020C6B18 - cmp r0, #0x50 - bge _020C6B8C - cmp r0, #0x40 - ldreq r0, _020C6BDC ; =0x04000246 - moveq r1, #0x82 - streqb r1, [r0, #0x0] - b _020C6BC0 -_020C6B18: - cmp r0, #0x60 - bgt _020C6B2C - cmp r0, #0x60 - beq _020C6BA8 - b _020C6BC0 -_020C6B2C: - cmp r0, #0x70 - beq _020C6B64 - b _020C6BC0 -_020C6B38: - ldr r0, _020C6BE0 ; =0x04000241 - mov r1, #0x8a - strb r1, [r0, #0x0] -_020C6B44: - ldr r0, _020C6BE4 ; =0x04000240 - mov r1, #0x82 - strb r1, [r0, #0x0] - b _020C6BC0 -_020C6B54: - ldr r0, _020C6BE0 ; =0x04000241 - mov r1, #0x82 - strb r1, [r0, #0x0] - b _020C6BC0 -_020C6B64: - ldr r0, _020C6BDC ; =0x04000246 - mov r1, #0x9a - strb r1, [r0, #0x0] -_020C6B70: - ldr r0, _020C6BE8 ; =0x04000245 - mov r1, #0x92 - strb r1, [r0, #0x0] -_020C6B7C: - ldr r0, _020C6BEC ; =0x04000244 - mov r1, #0x82 - strb r1, [r0, #0x0] - b _020C6BC0 -_020C6B8C: - ldr r1, _020C6BDC ; =0x04000246 - mov r2, #0x92 - ldr r0, _020C6BEC ; =0x04000244 - strb r2, [r1, #0x0] - mov r1, #0x82 - strb r1, [r0, #0x0] - b _020C6BC0 -_020C6BA8: - ldr r0, _020C6BDC ; =0x04000246 - mov r1, #0x8a - strb r1, [r0, #0x0] -_020C6BB4: - ldr r0, _020C6BE8 ; =0x04000245 - mov r1, #0x82 - strb r1, [r0, #0x0] -_020C6BC0: - ldr r0, _020C6BD8 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6BD8: .word 0x021D33C4 -_020C6BDC: .word 0x04000246 -_020C6BE0: .word 0x04000241 -_020C6BE4: .word 0x04000240 -_020C6BE8: .word 0x04000245 -_020C6BEC: .word 0x04000244 - - arm_func_start GX_SetBankForBG -GX_SetBankForBG: ; 0x020C6BF0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6E88 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x2] - ldrh r3, [r1, #0x0] - cmp r0, #0x40 - strh r0, [r1, #0x2] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C6CCC - cmp r0, #0x40 - bge _020C6E64 - cmp r0, #0x20 - bgt _020C6CC0 - cmp r0, #0x0 - addge pc, pc, r0, lsl #0x2 - b _020C6E70 -_020C6C3C: ; 0x020C6C3C - b _020C6E70 -_020C6C40: ; 0x020C6C40 - b _020C6D6C -_020C6C44: ; 0x020C6C44 - b _020C6D38 -_020C6C48: ; 0x020C6C48 - b _020C6D60 -_020C6C4C: ; 0x020C6C4C - b _020C6D10 -_020C6C50: ; 0x020C6C50 - b _020C6DB0 -_020C6C54: ; 0x020C6C54 - b _020C6D2C -_020C6C58: ; 0x020C6C58 - b _020C6D54 -_020C6C5C: ; 0x020C6C5C - b _020C6CF4 -_020C6C60: ; 0x020C6C60 - b _020C6DCC -_020C6C64: ; 0x020C6C64 - b _020C6DE8 -_020C6C68: ; 0x020C6C68 - b _020C6D7C -_020C6C6C: ; 0x020C6C6C - b _020C6D04 -_020C6C70: ; 0x020C6C70 - b _020C6DA4 -_020C6C74: ; 0x020C6C74 - b _020C6D20 -_020C6C78: ; 0x020C6C78 - b _020C6D48 -_020C6C7C: ; 0x020C6C7C - b _020C6E1C -_020C6C80: ; 0x020C6C80 - b _020C6E70 -_020C6C84: ; 0x020C6C84 - b _020C6E70 -_020C6C88: ; 0x020C6C88 - b _020C6E70 -_020C6C8C: ; 0x020C6C8C - b _020C6E70 -_020C6C90: ; 0x020C6C90 - b _020C6E70 -_020C6C94: ; 0x020C6C94 - b _020C6E70 -_020C6C98: ; 0x020C6C98 - b _020C6E70 -_020C6C9C: ; 0x020C6C9C - b _020C6E70 -_020C6CA0: ; 0x020C6CA0 - b _020C6E70 -_020C6CA4: ; 0x020C6CA4 - b _020C6E70 -_020C6CA8: ; 0x020C6CA8 - b _020C6E70 -_020C6CAC: ; 0x020C6CAC - b _020C6E70 -_020C6CB0: ; 0x020C6CB0 - b _020C6E70 -_020C6CB4: ; 0x020C6CB4 - b _020C6E70 -_020C6CB8: ; 0x020C6CB8 - b _020C6E70 -_020C6CBC: ; 0x020C6CBC - b _020C6E54 -_020C6CC0: - cmp r0, #0x30 - beq _020C6E10 - b _020C6E70 -_020C6CCC: - cmp r0, #0x60 - bgt _020C6CE8 - cmp r0, #0x60 - bge _020C6E48 - cmp r0, #0x50 - beq _020C6E2C - b _020C6E70 -_020C6CE8: - cmp r0, #0x70 - beq _020C6E04 - b _020C6E70 -_020C6CF4: - ldr r0, _020C6E8C ; =0x04000243 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6D04: - ldr r0, _020C6E8C ; =0x04000243 - mov r1, #0x89 - strb r1, [r0, #0x0] -_020C6D10: - ldr r0, _020C6E90 ; =0x04000242 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6D20: - ldr r0, _020C6E8C ; =0x04000243 - mov r1, #0x91 - strb r1, [r0, #0x0] -_020C6D2C: - ldr r0, _020C6E90 ; =0x04000242 - mov r1, #0x89 - strb r1, [r0, #0x0] -_020C6D38: - ldr r0, _020C6E94 ; =0x04000241 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6D48: - ldr r0, _020C6E8C ; =0x04000243 - mov r1, #0x99 - strb r1, [r0, #0x0] -_020C6D54: - ldr r0, _020C6E90 ; =0x04000242 - mov r1, #0x91 - strb r1, [r0, #0x0] -_020C6D60: - ldr r0, _020C6E94 ; =0x04000241 - mov r1, #0x89 - strb r1, [r0, #0x0] -_020C6D6C: - ldr r0, _020C6E98 ; =0x04000240 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6D7C: - ldr r0, _020C6E98 ; =0x04000240 - mov r2, #0x81 - ldr r1, _020C6E94 ; =0x04000241 - strb r2, [r0, #0x0] - mov r2, #0x89 - ldr r0, _020C6E8C ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x91 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6DA4: - ldr r0, _020C6E8C ; =0x04000243 - mov r1, #0x91 - strb r1, [r0, #0x0] -_020C6DB0: - ldr r1, _020C6E98 ; =0x04000240 - mov r2, #0x81 - ldr r0, _020C6E90 ; =0x04000242 - strb r2, [r1, #0x0] - mov r1, #0x89 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6DCC: - ldr r1, _020C6E98 ; =0x04000240 - mov r2, #0x81 - ldr r0, _020C6E8C ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x89 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6DE8: - ldr r1, _020C6E94 ; =0x04000241 - mov r2, #0x81 - ldr r0, _020C6E8C ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x89 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6E04: - ldr r0, _020C6E9C ; =0x04000246 - mov r1, #0x99 - strb r1, [r0, #0x0] -_020C6E10: - ldr r0, _020C6EA0 ; =0x04000245 - mov r1, #0x91 - strb r1, [r0, #0x0] -_020C6E1C: - ldr r0, _020C6EA4 ; =0x04000244 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6E2C: - ldr r1, _020C6E9C ; =0x04000246 - mov r2, #0x91 - ldr r0, _020C6EA4 ; =0x04000244 - strb r2, [r1, #0x0] - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6E48: - ldr r0, _020C6E9C ; =0x04000246 - mov r1, #0x89 - strb r1, [r0, #0x0] -_020C6E54: - ldr r0, _020C6EA0 ; =0x04000245 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6E64: - ldr r0, _020C6E9C ; =0x04000246 - mov r1, #0x81 - strb r1, [r0, #0x0] -_020C6E70: - ldr r0, _020C6E88 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6E88: .word 0x021D33C4 -_020C6E8C: .word 0x04000243 -_020C6E90: .word 0x04000242 -_020C6E94: .word 0x04000241 -_020C6E98: .word 0x04000240 -_020C6E9C: .word 0x04000246 -_020C6EA0: .word 0x04000245 -_020C6EA4: .word 0x04000244 - - arm_func_start GX_VRAMCNT_SetLCDC_ -GX_VRAMCNT_SetLCDC_: ; 0x020C6EA8 - ands r1, r0, #0x1 - ldrne r1, _020C6F3C ; =0x04000240 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x2 - ldrne r1, _020C6F40 ; =0x04000241 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x4 - ldrne r1, _020C6F44 ; =0x04000242 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x8 - ldrne r1, _020C6F48 ; =0x04000243 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x10 - ldrne r1, _020C6F4C ; =0x04000244 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x20 - ldrne r1, _020C6F50 ; =0x04000245 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x40 - ldrne r1, _020C6F54 ; =0x04000246 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x80 - ldrne r1, _020C6F58 ; =0x04000248 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r0, r0, #0x100 - ldrne r0, _020C6F5C ; =0x04000249 - movne r1, #0x80 - strneb r1, [r0, #0x0] - bx lr - .balign 4 -_020C6F3C: .word 0x04000240 -_020C6F40: .word 0x04000241 -_020C6F44: .word 0x04000242 -_020C6F48: .word 0x04000243 -_020C6F4C: .word 0x04000244 -_020C6F50: .word 0x04000245 -_020C6F54: .word 0x04000246 -_020C6F58: .word 0x04000248 -_020C6F5C: .word 0x04000249 - - arm_func_start G2S_GetBG3CharPtr -G2S_GetBG3CharPtr: ; 0x020C6F60 - ldr r1, _020C6FA8 ; =0x04001000 - ldr r0, _020C6FAC ; =0x0400100E - ldr r1, [r1, #0x0] - ldrh r2, [r0, #0x0] - and r0, r1, #0x7 - cmp r0, #0x3 - blt _020C6F8C - cmp r0, #0x6 - bge _020C6FA0 - ands r0, r2, #0x80 - bne _020C6FA0 -_020C6F8C: - and r0, r2, #0x3c - mov r0, r0, lsr #0x2 - mov r0, r0, lsl #0xe - add r0, r0, #0x6200000 - bx lr -_020C6FA0: - mov r0, #0x0 - bx lr - .balign 4 -_020C6FA8: .word 0x04001000 -_020C6FAC: .word 0x0400100E - - arm_func_start G2_GetBG3CharPtr -G2_GetBG3CharPtr: ; 0x020C6FB0 - mov r0, #0x4000000 - ldr r1, [r0, #0x0] - ldr r0, _020C700C ; =0x0400000E - and r1, r1, #0x7 - cmp r1, #0x3 - ldrh r2, [r0, #0x0] - blt _020C6FDC - cmp r1, #0x6 - bge _020C7004 - ands r0, r2, #0x80 - bne _020C7004 -_020C6FDC: - mov r0, #0x4000000 - ldr r1, [r0, #0x0] - and r0, r2, #0x3c - and r1, r1, #0x7000000 - mov r1, r1, lsr #0x18 - mov r1, r1, lsl #0x10 - add r1, r1, #0x6000000 - mov r0, r0, lsr #0x2 - add r0, r1, r0, lsl #0xe - bx lr -_020C7004: - mov r0, #0x0 - bx lr - .balign 4 -_020C700C: .word 0x0400000E - - arm_func_start G2S_GetBG2CharPtr -G2S_GetBG2CharPtr: ; 0x020C7010 - ldr r1, _020C7050 ; =0x04001000 - ldr r0, _020C7054 ; =0x0400100C - ldr r1, [r1, #0x0] - ldrh r2, [r0, #0x0] - and r0, r1, #0x7 - cmp r0, #0x5 - blt _020C7034 - ands r0, r2, #0x80 - bne _020C7048 -_020C7034: - and r0, r2, #0x3c - mov r0, r0, lsr #0x2 - mov r0, r0, lsl #0xe - add r0, r0, #0x6200000 - bx lr -_020C7048: - mov r0, #0x0 - bx lr - .balign 4 -_020C7050: .word 0x04001000 -_020C7054: .word 0x0400100C - - arm_func_start G2_GetBG2CharPtr -G2_GetBG2CharPtr: ; 0x020C7058 - mov r0, #0x4000000 - ldr r1, [r0, #0x0] - ldr r0, _020C70AC ; =0x0400000C - and r1, r1, #0x7 - cmp r1, #0x5 - ldrh r2, [r0, #0x0] - blt _020C707C - ands r0, r2, #0x80 - bne _020C70A4 -_020C707C: - mov r0, #0x4000000 - ldr r1, [r0, #0x0] - and r0, r2, #0x3c - and r1, r1, #0x7000000 - mov r1, r1, lsr #0x18 - mov r1, r1, lsl #0x10 - add r1, r1, #0x6000000 - mov r0, r0, lsr #0x2 - add r0, r1, r0, lsl #0xe - bx lr -_020C70A4: - mov r0, #0x0 - bx lr - .balign 4 -_020C70AC: .word 0x0400000C - - arm_func_start G2S_GetBG1CharPtr -G2S_GetBG1CharPtr: ; 0x020C70B0 - ldr r0, _020C70CC ; =0x0400100A - ldrh r0, [r0, #0x0] - and r0, r0, #0x3c - mov r0, r0, asr #0x2 - mov r0, r0, lsl #0xe - add r0, r0, #0x6200000 - bx lr - .balign 4 -_020C70CC: .word 0x0400100A - - arm_func_start G2_GetBG1CharPtr -G2_GetBG1CharPtr: ; 0x020C70D0 - ldr r1, _020C7100 ; =0x0400000A - mov r0, #0x4000000 - ldrh r1, [r1, #0x0] - ldr r0, [r0, #0x0] - and r0, r0, #0x7000000 - mov r0, r0, lsr #0x18 - and r1, r1, #0x3c - mov r0, r0, lsl #0x10 - mov r1, r1, asr #0x2 - add r0, r0, #0x6000000 - add r0, r0, r1, lsl #0xe - bx lr - .balign 4 -_020C7100: .word 0x0400000A - - arm_func_start G2S_GetBG0CharPtr -G2S_GetBG0CharPtr: ; 0x020C7104 - ldr r0, _020C7120 ; =0x04001008 - ldrh r0, [r0, #0x0] - and r0, r0, #0x3c - mov r0, r0, asr #0x2 - mov r0, r0, lsl #0xe - add r0, r0, #0x6200000 - bx lr - .balign 4 -_020C7120: .word 0x04001008 - - arm_func_start G2_GetBG0CharPtr -G2_GetBG0CharPtr: ; 0x020C7124 - ldr r1, _020C7154 ; =0x04000008 - mov r0, #0x4000000 - ldrh r1, [r1, #0x0] - ldr r0, [r0, #0x0] - and r0, r0, #0x7000000 - mov r0, r0, lsr #0x18 - and r1, r1, #0x3c - mov r0, r0, lsl #0x10 - mov r1, r1, asr #0x2 - add r0, r0, #0x6000000 - add r0, r0, r1, lsl #0xe - bx lr - .balign 4 -_020C7154: .word 0x04000008 - - arm_func_start G2S_GetBG3ScrPtr -G2S_GetBG3ScrPtr: ; 0x020C7158 - ldr r1, _020C71D0 ; =0x04001000 - ldr r0, _020C71D4 ; =0x0400100E - ldr r1, [r1, #0x0] - ldrh r2, [r0, #0x0] - and r3, r1, #0x7 - cmp r3, #0x6 - and r0, r2, #0x1f00 - mov r1, r0, lsr #0x8 - addls pc, pc, r3, lsl #0x2 - b _020C71C8 -_020C7180: ; 0x020C7180 - b _020C719C -_020C7184: ; 0x020C7184 - b _020C719C -_020C7188: ; 0x020C7188 - b _020C719C -_020C718C: ; 0x020C718C - b _020C71A8 -_020C7190: ; 0x020C7190 - b _020C71A8 -_020C7194: ; 0x020C7194 - b _020C71A8 -_020C7198: ; 0x020C7198 - b _020C71C0 -_020C719C: - mov r0, r1, lsl #0xb - add r0, r0, #0x6200000 - bx lr -_020C71A8: - ands r0, r2, #0x80 - movne r0, r1, lsl #0xe - addne r0, r0, #0x6200000 - moveq r0, r1, lsl #0xb - addeq r0, r0, #0x6200000 - bx lr -_020C71C0: - mov r0, #0x0 - bx lr -_020C71C8: - mov r0, #0x0 - bx lr - .balign 4 -_020C71D0: .word 0x04001000 -_020C71D4: .word 0x0400100E - - arm_func_start G2_GetBG3ScrPtr -G2_GetBG3ScrPtr: ; 0x020C71D8 - ldr r0, _020C7260 ; =0x0400000E - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldrh r3, [r0, #0x0] - ldr r0, [r2, #0x0] - and r12, r1, #0x7 - and r0, r0, #0x38000000 - mov r1, r0, lsr #0x1b - and r0, r3, #0x1f00 - mov r2, r1, lsl #0x10 - cmp r12, #0x6 - mov r1, r0, lsr #0x8 - addls pc, pc, r12, lsl #0x2 - b _020C7258 -_020C7210: - b _020C722C -_020C7214: - b _020C722C -_020C7218: - b _020C722C -_020C721C: - b _020C7238 -_020C7220: - b _020C7238 -_020C7224: - b _020C7238 -_020C7228: - b _020C7250 -_020C722C: - add r0, r2, #0x6000000 - add r0, r0, r1, lsl #0xb - bx lr -_020C7238: - ands r0, r3, #0x80 - movne r0, r1, lsl #0xe - addne r0, r0, #0x6000000 - addeq r0, r2, #0x6000000 - addeq r0, r0, r1, lsl #0xb - bx lr -_020C7250: - mov r0, #0x0 - bx lr -_020C7258: - mov r0, #0x0 - bx lr - .balign 4 -_020C7260: .word 0x0400000E - - arm_func_start G2S_GetBG2ScrPtr -G2S_GetBG2ScrPtr: ; 0x020C7264 - ldr r1, _020C72DC ; =0x04001000 - ldr r0, _020C72E0 ; =0x0400100C - ldr r1, [r1, #0x0] - ldrh r2, [r0, #0x0] - and r3, r1, #0x7 - cmp r3, #0x6 - and r0, r2, #0x1f00 - mov r1, r0, lsr #0x8 - addls pc, pc, r3, lsl #0x2 - b _020C72D4 -_020C728C: ; 0x020C728C - b _020C72A8 -_020C7290: ; 0x020C7290 - b _020C72A8 -_020C7294: ; 0x020C7294 - b _020C72A8 -_020C7298: ; 0x020C7298 - b _020C72A8 -_020C729C: ; 0x020C729C - b _020C72A8 -_020C72A0: ; 0x020C72A0 - b _020C72B4 -_020C72A4: ; 0x020C72A4 - b _020C72CC -_020C72A8: - mov r0, r1, lsl #0xb - add r0, r0, #0x6200000 - bx lr -_020C72B4: - ands r0, r2, #0x80 - movne r0, r1, lsl #0xe - addne r0, r0, #0x6200000 - moveq r0, r1, lsl #0xb - addeq r0, r0, #0x6200000 - bx lr -_020C72CC: - mov r0, #0x0 - bx lr -_020C72D4: - mov r0, #0x0 - bx lr - .balign 4 -_020C72DC: .word 0x04001000 -_020C72E0: .word 0x0400100C - - arm_func_start G2_GetBG2ScrPtr -G2_GetBG2ScrPtr: ; 0x020C72E4 - ldr r0, _020C736C ; =0x0400000C - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldrh r3, [r0, #0x0] - ldr r0, [r2, #0x0] - and r12, r1, #0x7 - and r0, r0, #0x38000000 - mov r1, r0, lsr #0x1b - and r0, r3, #0x1f00 - mov r2, r1, lsl #0x10 - cmp r12, #0x6 - mov r1, r0, lsr #0x8 - addls pc, pc, r12, lsl #0x2 - b _020C7364 -_020C731C: - b _020C7338 -_020C7320: - b _020C7338 -_020C7324: - b _020C7338 -_020C7328: - b _020C7338 -_020C732C: - b _020C7338 -_020C7330: - b _020C7344 -_020C7334: - b _020C735C -_020C7338: - add r0, r2, #0x6000000 - add r0, r0, r1, lsl #0xb - bx lr -_020C7344: - ands r0, r3, #0x80 - movne r0, r1, lsl #0xe - addne r0, r0, #0x6000000 - addeq r0, r2, #0x6000000 - addeq r0, r0, r1, lsl #0xb - bx lr -_020C735C: - mov r0, #0x6000000 - bx lr -_020C7364: - mov r0, #0x0 - bx lr - .balign 4 -_020C736C: .word 0x0400000C - - arm_func_start G2S_GetBG1ScrPtr -G2S_GetBG1ScrPtr: ; 0x020C7370 - ldr r0, _020C738C ; =0x0400100A - ldrh r0, [r0, #0x0] - and r0, r0, #0x1f00 - mov r0, r0, asr #0x8 - mov r0, r0, lsl #0xb - add r0, r0, #0x6200000 - bx lr - .balign 4 -_020C738C: .word 0x0400100A - - arm_func_start G2_GetBG1ScrPtr -G2_GetBG1ScrPtr: ; 0x020C7390 - ldr r1, _020C73C0 ; =0x0400000A - mov r0, #0x4000000 - ldrh r1, [r1, #0x0] - ldr r0, [r0, #0x0] - and r0, r0, #0x38000000 - mov r0, r0, lsr #0x1b - and r1, r1, #0x1f00 - mov r0, r0, lsl #0x10 - mov r1, r1, asr #0x8 - add r0, r0, #0x6000000 - add r0, r0, r1, lsl #0xb - bx lr - .balign 4 -_020C73C0: .word 0x0400000A - - arm_func_start G2S_GetBG0ScrPtr -G2S_GetBG0ScrPtr: ; 0x020C73C4 - ldr r0, _020C73E0 ; =0x04001008 - ldrh r0, [r0, #0x0] - and r0, r0, #0x1f00 - mov r0, r0, asr #0x8 - mov r0, r0, lsl #0xb - add r0, r0, #0x6200000 - bx lr - .balign 4 -_020C73E0: .word 0x04001008 - - arm_func_start G2_GetBG0ScrPtr -G2_GetBG0ScrPtr: ; 0x020C73E4 - ldr r1, _020C7414 ; =0x04000008 - mov r0, #0x4000000 - ldrh r1, [r1, #0x0] - ldr r0, [r0, #0x0] - and r0, r0, #0x38000000 - mov r0, r0, lsr #0x1b - and r1, r1, #0x1f00 - mov r0, r0, lsl #0x10 - mov r1, r1, asr #0x8 - add r0, r0, #0x6000000 - add r0, r0, r1, lsl #0xb - bx lr - .balign 4 -_020C7414: .word 0x04000008 - - arm_func_start G2x_ChangeBlendBrightness_ -G2x_ChangeBlendBrightness_: ; 0x020C7418 - cmp r1, #0x0 - ldrh r3, [r0, #0x0] - bge _020C7444 - and r2, r3, #0xc0 - cmp r2, #0x80 - biceq r2, r3, #0xc0 - orreq r2, r2, #0xc0 - streqh r2, [r0, #0x0] - rsb r1, r1, #0x0 - strh r1, [r0, #0x4] - bx lr -_020C7444: - and r2, r3, #0xc0 - cmp r2, #0xc0 - biceq r2, r3, #0xc0 - orreq r2, r2, #0x80 - streqh r2, [r0, #0x0] - strh r1, [r0, #0x4] - bx lr - - arm_func_start G2x_SetBlendBrightnessExt_ -G2x_SetBlendBrightnessExt_: ; 0x020C7460 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr lr, [sp, #0x8] - ldr r12, [sp, #0xc] - orr r3, r3, lr, lsl #0x8 - cmp r12, #0x0 - orrge r1, r1, #0x80 - strh r3, [r0, #0x2] - orrge r1, r1, r2, lsl #0x8 - strgeh r1, [r0, #0x0] - strgeh r12, [r0, #0x4] - addge sp, sp, #0x4 - ldmgeia sp!, {lr} - bxge lr - orr r1, r1, #0xc0 - orr r1, r1, r2, lsl #0x8 - strh r1, [r0, #0x0] - rsb r1, r12, #0x0 - strh r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start G2x_SetBlendBrightness_ -G2x_SetBlendBrightness_: ; 0x020C74B8 - cmp r2, #0x0 - orrlt r1, r1, #0xc0 - strlth r1, [r0, #0x0] - rsblt r1, r2, #0x0 - strlth r1, [r0, #0x4] - orrge r1, r1, #0x80 - strgeh r1, [r0, #0x0] - strgeh r2, [r0, #0x4] - bx lr - - arm_func_start G2x_SetBlendAlpha_ -G2x_SetBlendAlpha_: ; 0x020C74DC - ldr r12, [sp, #0x0] - orr r1, r1, #0x40 - orr r2, r1, r2, lsl #0x8 - orr r1, r3, r12, lsl #0x8 - orr r1, r2, r1, lsl #0x10 - str r1, [r0, #0x0] - bx lr - - arm_func_start G2x_SetBGyAffine_ -G2x_SetBGyAffine_: ; 0x020C74F8 - stmdb sp!, {r4-r6,lr} - ldr r5, [r1, #0x0] - ldr r4, [r1, #0x4] - mov r12, r5, lsl #0xc - mov lr, r4, lsl #0xc - mov r5, r12, asr #0x10 - mov r4, lr, asr #0x10 - mov r12, r5, lsl #0x10 - mov lr, r4, lsl #0x10 - mov r5, r12, lsr #0x10 - mov r4, lr, lsr #0x10 - orr r4, r5, r4, lsl #0x10 - str r4, [r0, #0x0] - ldr r5, [r1, #0x8] - ldr r4, [r1, #0xc] - mov r12, r5, lsl #0xc - mov lr, r4, lsl #0xc - mov r5, r12, asr #0x10 - mov r4, lr, asr #0x10 - mov r12, r5, lsl #0x10 - mov lr, r4, lsl #0x10 - ldr r4, [sp, #0x14] - ldr r6, [sp, #0x10] - mov r12, r12, lsr #0x10 - mov r5, lr, lsr #0x10 - orr r5, r12, r5, lsl #0x10 - str r5, [r0, #0x4] - ldr r12, [r1, #0x4] - sub r5, r4, r3 - ldr r4, [r1, #0xc] - mul lr, r12, r5 - mul r5, r4, r5 - ldr r12, [r1, #0x0] - sub r6, r6, r2 - ldr r4, [r1, #0x8] - mla r1, r12, r6, lr - mla r5, r4, r6, r5 - add r1, r1, r2, lsl #0xc - add r2, r5, r3, lsl #0xc - mov r1, r1, asr #0x4 - str r1, [r0, #0x8] - mov r1, r2, asr #0x4 - str r1, [r0, #0xc] - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start G3B_End -G3B_End: ; 0x020C75AC - ldr r1, [r0, #0x0] - mov r2, #0x41 - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_Begin -G3B_Begin: ; 0x020C75D0 - ldr r2, [r0, #0x0] - mov r3, #0x40 - str r3, [r2, #0x0] - ldr r2, [r0, #0x4] - str r1, [r2, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_LightColor -G3B_LightColor: ; 0x020C7600 - ldr r3, [r0, #0x0] - mov r12, #0x33 - str r12, [r3, #0x0] - ldr r3, [r0, #0x4] - orr r1, r2, r1, lsl #0x1e - str r1, [r3, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_LightVector -G3B_LightVector: ; 0x020C7634 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr ip, _020C7694 ; =0x000003FF - ldrsh r4, [sp, #0x10] - ldr lr, [r0, #0x0] - mov r5, #0x32 - str r5, [lr, #0x0] - and lr, r12, r2, asr #0x3 - and r2, r12, r3, asr #0x3 - and r3, r12, r4, asr #0x3 - orr r2, lr, r2, lsl #0xa - orr r3, r2, r3, lsl #0x14 - ldr r2, [r0, #0x4] - orr r1, r3, r1, lsl #0x1e - str r1, [r2, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C7694: .word 0x000003FF - - arm_func_start G3B_MaterialColorSpecEmi -G3B_MaterialColorSpecEmi: ; 0x020C7698 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r12, [r0, #0x0] - mov lr, #0x31 - cmp r3, #0x0 - movne r3, #0x1 - str lr, [r12, #0x0] - orr r2, r1, r2, lsl #0x10 - moveq r3, #0x0 - ldr r1, [r0, #0x4] - orr r2, r2, r3, lsl #0xf - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start G3B_MaterialColorDiffAmb -G3B_MaterialColorDiffAmb: ; 0x020C76EC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r12, [r0, #0x0] - mov lr, #0x30 - cmp r3, #0x0 - movne r3, #0x1 - str lr, [r12, #0x0] - orr r2, r1, r2, lsl #0x10 - moveq r3, #0x0 - ldr r1, [r0, #0x4] - orr r2, r2, r3, lsl #0xf - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start G3B_PolygonAttr -G3B_PolygonAttr: ; 0x020C7740 - orr r1, r1, r2, lsl #0x4 - ldr r2, [r0, #0x0] - mov r12, #0x29 - str r12, [r2, #0x0] - ldr r2, [sp, #0x8] - orr r1, r1, r3, lsl #0x6 - ldr r3, [sp, #0x0] - orr r1, r2, r1 - ldr r12, [sp, #0x4] - orr r2, r1, r3, lsl #0x18 - ldr r1, [r0, #0x4] - orr r2, r2, r12, lsl #0x10 - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_Vtx -G3B_Vtx: ; 0x020C7790 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r12, [r0, #0x0] - mov lr, #0x23 - str lr, [r12, #0x0] - mov r1, r1, lsl #0x10 - mov r2, r2, lsl #0x10 - mov lr, r1, lsr #0x10 - mov r12, r2, lsr #0x10 - mov r1, r3, lsl #0x10 - ldr r2, [r0, #0x4] - orr r3, lr, r12, lsl #0x10 - str r3, [r2, #0x0] - ldr r2, [r0, #0x4] - mov r1, r1, lsr #0x10 - str r1, [r2, #0x4] - ldr r1, [r0, #0x4] - add r1, r1, #0x8 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start G3B_Normal -G3B_Normal: ; 0x020C77F4 - stmdb sp!, {r4,lr} - ldr ip, _020C7844 ; =0x000003FF - ldr lr, [r0, #0x0] - mov r4, #0x21 - str r4, [lr, #0x0] - and lr, r12, r1, asr #0x3 - and r1, r12, r2, asr #0x3 - and r3, r12, r3, asr #0x3 - orr r2, lr, r1, lsl #0xa - ldr r1, [r0, #0x4] - orr r2, r2, r3, lsl #0x14 - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C7844: .word 0x000003FF - - arm_func_start G3B_Color -G3B_Color: ; 0x020C7848 - ldr r2, [r0, #0x0] - mov r3, #0x20 - str r3, [r2, #0x0] - ldr r2, [r0, #0x4] - str r1, [r2, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_LoadMtx44 -G3B_LoadMtx44: ; 0x020C7878 - stmdb sp!, {r4,lr} - mov r4, r0 - bl G3BS_LoadMtx44 - ldr r0, [r4, #0x4] - add r0, r0, #0x40 - str r0, [r4, #0x0] - ldr r0, [r4, #0x0] - add r0, r0, #0x4 - str r0, [r4, #0x4] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start G3B_PopMtx -G3B_PopMtx: ; 0x020C78A4 - ldr r2, [r0, #0x0] - mov r3, #0x12 - str r3, [r2, #0x0] - ldr r2, [r0, #0x4] - str r1, [r2, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_PushMtx -G3B_PushMtx: ; 0x020C78D4 - ldr r1, [r0, #0x0] - mov r2, #0x11 - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3BS_LoadMtx44 -G3BS_LoadMtx44: ; 0x020C78F8 - mov r3, r0 - ldr r0, [r3, #0x0] - mov r2, #0x16 - str r2, [r0, #0x0] - mov r0, r1 - ldr ip, _020C7918 ; =MI_Copy64B - ldr r1, [r3, #0x4] - bx r12 - .balign 4 -_020C7918: .word MI_Copy64B - - arm_func_start G3_MultMtx33 -G3_MultMtx33: ; 0x020C791C - ldr r1, _020C7930 ; =0x04000400 - mov r2, #0x1a - ldr ip, _020C7934 ; =MI_Copy36B - str r2, [r1, #0x0] - bx r12 - .balign 4 -_020C7930: .word 0x04000400 -_020C7934: .word MI_Copy36B - - arm_func_start G3_MultMtx43 -G3_MultMtx43: - ldr r1, _020C794C ; =0x04000400 - mov r2, #0x19 - ldr ip, _020C7950 ; =FUN_020C9BE8 - str r2, [r1, #0x0] - bx r12 - .balign 4 -_020C794C: .word 0x04000400 -_020C7950: .word FUN_020C9BE8 - - arm_func_start G3_LoadMtx43 -G3_LoadMtx43: ; 0x020C7954 - ldr r1, _020C7968 ; =0x04000400 - mov r2, #0x17 - ldr ip, _020C796C ; =FUN_020C9BE8 - str r2, [r1, #0x0] - bx r12 - .balign 4 -_020C7968: .word 0x04000400 -_020C796C: .word FUN_020C9BE8 - - arm_func_start GXi_NopClearFifo128_ -GXi_NopClearFifo128_: ; 0x020C7970 - mov r1, #0x0 - mov r2, #0x0 - mov r3, #0x0 - mov r12, #0x0 - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - bx lr - - arm_func_start G3X_SetHOffset -G3X_SetHOffset: ; 0x020C7A04 - ldr r1, _020C7A10 ; =0x04000010 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020C7A10: .word 0x04000010 - - arm_func_start G3X_GetBoxTestResult -G3X_GetBoxTestResult: ; 0x020C7A14 - ldr r2, _020C7A38 ; =0x04000600 - ldr r1, [r2, #0x0] - ands r1, r1, #0x1 - ldreq r1, [r2, #0x0] - mvnne r0, #0x0 - andeq r1, r1, #0x2 - streq r1, [r0, #0x0] - moveq r0, #0x0 - bx lr - .balign 4 -_020C7A38: .word 0x04000600 - - arm_func_start G3X_GetMtxStackLevelPJ -G3X_GetMtxStackLevelPJ: - ldr r2, _020C7A64 ; =0x04000600 - ldr r1, [r2, #0x0] - ands r1, r1, #0x4000 - ldreq r1, [r2, #0x0] - mvnne r0, #0x0 - andeq r1, r1, #0x2000 - moveq r1, r1, lsr #0xd - streq r1, [r0, #0x0] - moveq r0, #0x0 - bx lr - .balign 4 -_020C7A64: .word 0x04000600 - - arm_func_start G3X_GetMtxStackLevelPV -G3X_GetMtxStackLevelPV: - ldr r2, _020C7A90 ; =0x04000600 - ldr r1, [r2, #0x0] - ands r1, r1, #0x4000 - ldreq r1, [r2, #0x0] - mvnne r0, #0x0 - andeq r1, r1, #0x1f00 - moveq r1, r1, lsr #0x8 - streq r1, [r0, #0x0] - moveq r0, #0x0 - bx lr - .balign 4 -_020C7A90: .word 0x04000600 - - arm_func_start G3X_InitTable -G3X_InitTable: ; 0x020C7A94 - stmdb sp!, {lr} - sub sp, sp, #0xc - ldr r0, _020C7B2C ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C7AE4 - mov r2, #0x0 - str r2, [sp, #0x0] - ldr r1, _020C7B30 ; =0x04000330 - mov r3, #0x10 - str r2, [sp, #0x4] - bl MI_DmaFill32Async - ldr r0, _020C7B2C ; =0x02106814 - ldr r1, _020C7B34 ; =0x04000360 - ldr r0, [r0, #0x0] - mov r2, #0x0 - mov r3, #0x60 - bl MI_DmaFill32 - b _020C7B04 -_020C7AE4: - ldr r1, _020C7B30 ; =0x04000330 - mov r0, #0x0 - mov r2, #0x10 - bl MIi_CpuClear32 - ldr r1, _020C7B34 ; =0x04000360 - mov r0, #0x0 - mov r2, #0x60 - bl MIi_CpuClear32 -_020C7B04: - mov r2, #0x0 - ldr r0, _020C7B38 ; =0x040004D0 - mov r1, r2 -_020C7B10: - add r2, r2, #0x1 - str r1, [r0, #0x0] - cmp r2, #0x20 - blt _020C7B10 - add sp, sp, #0xc - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7B2C: .word 0x02106814 -_020C7B30: .word 0x04000330 -_020C7B34: .word 0x04000360 -_020C7B38: .word 0x040004D0 - - arm_func_start G3X_SetClearColor -G3X_SetClearColor: ; 0x020C7B3C - orr r0, r0, r1, lsl #0x10 - ldr r12, [sp, #0x0] - orr r3, r0, r3, lsl #0x18 - cmp r12, #0x0 - ldr r1, _020C7B64 ; =0x04000350 - orrne r3, r3, #0x8000 - ldr r0, _020C7B68 ; =0x04000354 - str r3, [r1, #0x0] - strh r2, [r0, #0x0] - bx lr - .balign 4 -_020C7B64: .word 0x04000350 -_020C7B68: .word 0x04000354 - - arm_func_start G3X_SetFogTable -G3X_SetFogTable: ; 0x020C7B6C - ldr ip, _020C7B78 ; =0x020CE2C4 - ldr r1, _020C7B7C ; =0x04000360 - bx r12 - .balign 4 -_020C7B78: .word 0x020CE2C4 -_020C7B7C: .word 0x04000360 - - arm_func_start G3X_SetEdgeColorTable -G3X_SetEdgeColorTable: ; 0x020C7B80 - ldr ip, _020C7B90 ; =MIi_CpuCopy16 - ldr r1, _020C7B94 ; =0x04000330 - mov r2, #0x10 - bx r12 - .balign 4 -_020C7B90: .word MIi_CpuCopy16 -_020C7B94: .word 0x04000330 - - arm_func_start G3X_GetVectorMtx -G3X_GetVectorMtx: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020C7BD8 ; =0x04000600 - mov r1, r0 - ldr r0, [r2, #0x0] - ands r0, r0, #0x8000000 - addne sp, sp, #0x4 - mvnne r0, #0x0 - ldmneia sp!, {lr} - bxne lr - ldr r0, _020C7BDC ; =0x04000680 - bl MI_Copy36B -_020C7BC8: ; 0x020C7BC8 - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7BD8: .word 0x04000600 -_020C7BDC: .word 0x04000680 - - arm_func_start G3X_GetClipMtx -G3X_GetClipMtx: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020C7C20 ; =0x04000600 - mov r1, r0 - ldr r0, [r2, #0x0] - ands r0, r0, #0x8000000 - addne sp, sp, #0x4 - mvnne r0, #0x0 - ldmneia sp!, {lr} - bxne lr - ldr r0, _020C7C24 ; =0x04000640 - bl MI_Copy64B -_020C7C10: ; 0x020C7C10 - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7C20: .word 0x04000600 -_020C7C24: .word 0x04000640 - - arm_func_start G3X_SetFog -G3X_SetFog: ; 0x020C7C28 - cmp r0, #0x0 - ldreq r2, _020C7C70 ; =0x04000060 - ldreq r0, _020C7C74 ; =0x0000CF7F - ldreqh r1, [r2, #0x0] - andeq r0, r1, r0 - streqh r0, [r2, #0x0] - bxeq lr - ldr r0, _020C7C78 ; =0x0400035C - ldr ip, _020C7C70 ; =0x04000060 - strh r3, [r0, #0x0] - mov r0, r2, lsl #0x8 - orr r0, r0, r1, lsl #0x6 - ldrh r3, [r12, #0x0] - orr r0, r0, #0x80 - bic r1, r3, #0x3f40 - orr r0, r1, r0 - strh r0, [r12, #0x0] - bx lr - .balign 4 -_020C7C70: .word 0x04000060 -_020C7C74: .word 0x0000CF7F -_020C7C78: .word 0x0400035C - - arm_func_start G3X_ResetMtxStack_2 -G3X_ResetMtxStack_2: ; 0x020C7C7C - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r1, _020C7D18 ; =0x04000600 - ldr r0, [r1, #0x0] - orr r0, r0, #0x8000 - str r0, [r1, #0x0] - add r4, sp, #0x0 -_020C7C98: - mov r0, r4 - bl G3X_GetMtxStackLevelPV -_020C7CA0: ; 0x020C7CA0 - cmp r0, #0x0 - bne _020C7C98 - add r4, sp, #0x4 -_020C7CAC: - mov r0, r4 - bl G3X_GetMtxStackLevelPJ -_020C7CB4: ; 0x020C7CB4 - cmp r0, #0x0 - bne _020C7CAC - ldr r2, _020C7D1C ; =0x04000440 - mov r1, #0x3 - str r1, [r2, #0x0] - ldr r0, _020C7D20 ; =0x04000454 - mov r1, #0x0 - str r1, [r0, #0x0] - str r1, [r2, #0x0] - ldr r1, [sp, #0x4] - cmp r1, #0x0 - ldrne r0, _020C7D24 ; =0x04000448 - strne r1, [r0, #0x0] - ldr r0, _020C7D1C ; =0x04000440 - mov r1, #0x2 - str r1, [r0, #0x0] - ldr r2, [sp, #0x0] - ldr r1, _020C7D24 ; =0x04000448 - ldr r0, _020C7D20 ; =0x04000454 - str r2, [r1, #0x0] - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C7D18: .word 0x04000600 -_020C7D1C: .word 0x04000440 -_020C7D20: .word 0x04000454 -_020C7D24: .word 0x04000448 - - arm_func_start G3X_InitMtxStack -G3X_InitMtxStack: ; 0x020C7D28 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r1, _020C7DC8 ; =0x04000600 - ldr r0, [r1, #0x0] - orr r0, r0, #0x8000 - str r0, [r1, #0x0] - add r4, sp, #0x0 -_020C7D44: - mov r0, r4 - bl G3X_GetMtxStackLevelPV -_020C7D4C: ; 0x020C7D4C - cmp r0, #0x0 - bne _020C7D44 - add r4, sp, #0x4 -_020C7D58: - mov r0, r4 - bl G3X_GetMtxStackLevelPJ -_020C7D60: ; 0x020C7D60 - cmp r0, #0x0 - bne _020C7D58 - ldr r2, _020C7DCC ; =0x04000440 - mov r1, #0x3 - str r1, [r2, #0x0] - ldr r0, _020C7DD0 ; =0x04000454 - mov r1, #0x0 - str r1, [r0, #0x0] - str r1, [r2, #0x0] - ldr r1, [sp, #0x4] - ldr r2, _020C7DD0 ; =0x04000454 - cmp r1, #0x0 - ldrne r0, _020C7DD4 ; =0x04000448 - mov r3, #0x0 - strne r1, [r0, #0x0] - ldr r0, _020C7DCC ; =0x04000440 - str r3, [r2, #0x0] - mov r1, #0x2 - str r1, [r0, #0x0] - ldr r1, [sp, #0x0] - ldr r0, _020C7DD4 ; =0x04000448 - str r1, [r0, #0x0] - str r3, [r2, #0x0] - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C7DC8: .word 0x04000600 -_020C7DCC: .word 0x04000440 -_020C7DD0: .word 0x04000454 -_020C7DD4: .word 0x04000448 - - arm_func_start G3X_ClearFifo -G3X_ClearFifo: ; 0x020C7DD8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C7E04 ; =0x04000400 - bl GXi_NopClearFifo128_ - ldr r1, _020C7E08 ; =0x04000600 -_020C7DEC: - ldr r0, [r1, #0x0] - ands r0, r0, #0x8000000 - bne _020C7DEC - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7E04: .word 0x04000400 -_020C7E08: .word 0x04000600 - - arm_func_start G3X_ResetMtxStack -G3X_ResetMtxStack: ; 0x020C7E0C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020C7E7C ; =0x04000600 -_020C7E18: - ldr r0, [r2, #0x0] - ands r0, r0, #0x8000000 - bne _020C7E18 - ldr r0, [r2, #0x0] - ldr r1, _020C7E80 ; =0x04000060 - orr r0, r0, #0x8000 - str r0, [r2, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x2000 - strh r0, [r1, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x1000 - strh r0, [r1, #0x0] - bl G3X_ResetMtxStack_2 - ldr r2, _020C7E84 ; =0x001F0080 - ldr r0, _020C7E88 ; =0x040004A4 - ldr r1, _020C7E8C ; =0x040004A8 - str r2, [r0, #0x0] - mov r2, #0x0 - ldr r0, _020C7E90 ; =0x040004AC - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7E7C: .word 0x04000600 -_020C7E80: .word 0x04000060 -_020C7E84: .word 0x001F0080 -_020C7E88: .word 0x040004A4 -_020C7E8C: .word 0x040004A8 -_020C7E90: .word 0x040004AC - - arm_func_start G3X_Init -G3X_Init: ; 0x020C7E94 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl G3X_ClearFifo - ldr r0, _020C7FAC ; =0x04000504 - mov r1, #0x0 - str r1, [r0, #0x0] - ldr r1, _020C7FB0 ; =0x04000600 -_020C7EB0: - ldr r0, [r1, #0x0] - ands r0, r0, #0x8000000 - bne _020C7EB0 - ldr r0, _020C7FB4 ; =0x04000060 - mov r3, #0x0 - strh r3, [r0, #0x0] - ldr r2, _020C7FB8 ; =0x04000010 - str r3, [r1, #0x0] - str r3, [r2, #0x0] - ldrh r12, [r0, #0x0] - ldr r2, _020C7FBC ; =0xFFFFCFFD - ldr r3, _020C7FC0 ; =0x0000CFFB - orr r12, r12, #0x2000 - strh r12, [r0, #0x0] - ldrh r12, [r0, #0x0] - orr r12, r12, #0x1000 - strh r12, [r0, #0x0] - ldrh r12, [r0, #0x0] - and r2, r12, r2 - strh r2, [r0, #0x0] - ldrh r2, [r0, #0x0] - bic r2, r2, #0x3000 - orr r2, r2, #0x10 - strh r2, [r0, #0x0] - ldrh r2, [r0, #0x0] - and r2, r2, r3 - strh r2, [r0, #0x0] - ldr r0, [r1, #0x0] - orr r0, r0, #0x8000 - str r0, [r1, #0x0] - ldr r0, [r1, #0x0] - bic r0, r0, #0xc0000000 - orr r0, r0, #0x80000000 - str r0, [r1, #0x0] - bl G3X_InitMtxStack - ldr r0, _020C7FC4 ; =0x04000350 - mov r3, #0x0 - ldr r2, _020C7FC8 ; =0x00007FFF - ldr r1, _020C7FCC ; =0x04000354 - str r3, [r0, #0x0] - ldr r0, _020C7FD0 ; =0x04000356 - strh r2, [r1, #0x0] - ldr r1, _020C7FD4 ; =0x04000358 - strh r3, [r0, #0x0] - ldr r0, _020C7FD8 ; =0x0400035C - str r3, [r1, #0x0] - ldr r1, _020C7FDC ; =0x04000008 - strh r3, [r0, #0x0] - ldrh r0, [r1, #0x0] - bic r0, r0, #0x3 - strh r0, [r1, #0x0] - bl G3X_InitTable - ldr r2, _020C7FE0 ; =0x001F0080 - ldr r0, _020C7FE4 ; =0x040004A4 - ldr r1, _020C7FE8 ; =0x040004A8 - str r2, [r0, #0x0] - mov r2, #0x0 - ldr r0, _020C7FEC ; =0x040004AC - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7FAC: .word 0x04000504 -_020C7FB0: .word 0x04000600 -_020C7FB4: .word 0x04000060 -_020C7FB8: .word 0x04000010 -_020C7FBC: .word 0xFFFFCFFD -_020C7FC0: .word 0x0000CFFB -_020C7FC4: .word 0x04000350 -_020C7FC8: .word 0x00007FFF -_020C7FCC: .word 0x04000354 -_020C7FD0: .word 0x04000356 -_020C7FD4: .word 0x04000358 -_020C7FD8: .word 0x0400035C -_020C7FDC: .word 0x04000008 -_020C7FE0: .word 0x001F0080 -_020C7FE4: .word 0x040004A4 -_020C7FE8: .word 0x040004A8 -_020C7FEC: .word 0x040004AC - - arm_func_start G3_RotZ -G3_RotZ: ; 0x020C7FF0 - ldr r3, _020C8028 ; =0x04000468 - mov r2, #0x0 - str r1, [r3, #0x0] - str r0, [r3, #0x0] - str r2, [r3, #0x0] - rsb r0, r0, #0x0 - str r0, [r3, #0x0] - str r1, [r3, #0x0] - str r2, [r3, #0x0] - str r2, [r3, #0x0] - str r2, [r3, #0x0] - mov r0, #0x1000 - str r0, [r3, #0x0] - bx lr - .balign 4 -_020C8028: .word 0x04000468 - - arm_func_start G3_RotY -G3_RotY: ; 0x020C802C - ldr ip, _020C8064 ; =0x04000468 - mov r3, #0x0 - str r1, [r12, #0x0] - str r3, [r12, #0x0] - rsb r2, r0, #0x0 - str r2, [r12, #0x0] - str r3, [r12, #0x0] - mov r2, #0x1000 - str r2, [r12, #0x0] - str r3, [r12, #0x0] - str r0, [r12, #0x0] - str r3, [r12, #0x0] - str r1, [r12, #0x0] - bx lr - .balign 4 -_020C8064: .word 0x04000468 - - arm_func_start G3_RotX -G3_RotX: ; 0x020C8068 - ldr r3, _020C80A0 ; =0x04000468 - mov r2, #0x1000 - str r2, [r3, #0x0] - mov r2, #0x0 - str r2, [r3, #0x0] - str r2, [r3, #0x0] - str r2, [r3, #0x0] - str r1, [r3, #0x0] - str r0, [r3, #0x0] - str r2, [r3, #0x0] - rsb r0, r0, #0x0 - str r0, [r3, #0x0] - str r1, [r3, #0x0] - bx lr - .balign 4 -_020C80A0: .word 0x04000468 - - arm_func_start G3i_LookAt_ -G3i_LookAt_: ; 0x020C80A4 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x24 - mov r9, r0 - ldr r6, [r9, #0x0] - ldr r5, [r2, #0x0] - add r0, sp, #0x0 - sub r5, r6, r5 - str r5, [sp, #0x0] - ldr r7, [r9, #0x4] - ldr r6, [r2, #0x4] - mov r5, r1 - sub r1, r7, r6 - str r1, [sp, #0x4] - ldr r6, [r9, #0x8] - ldr r2, [r2, #0x8] - mov r1, r0 - sub r2, r6, r2 - mov r8, r3 - str r2, [sp, #0x8] - ldr r7, [sp, #0x40] - bl VEC_Normalize - add r1, sp, #0x0 - add r2, sp, #0xc - mov r0, r5 - bl VEC_CrossProduct - add r0, sp, #0xc - mov r1, r0 - bl VEC_Normalize -_020C8114: ; 0x020C8114 - add r0, sp, #0x0 - add r1, sp, #0xc - add r2, sp, #0x18 - bl VEC_CrossProduct -_020C8124: ; 0x020C8124 - cmp r8, #0x0 - beq _020C8184 - ldr r0, _020C8234 ; =0x04000440 - mov r1, #0x2 - str r1, [r0, #0x0] - ldr r0, [sp, #0xc] - ldr r4, _020C8238 ; =0x0400045C - str r0, [r4, #0x0] - ldr r0, [sp, #0x18] - str r0, [r4, #0x0] - ldr r0, [sp, #0x0] - str r0, [r4, #0x0] - ldr r0, [sp, #0x10] - str r0, [r4, #0x0] - ldr r0, [sp, #0x1c] - str r0, [r4, #0x0] - ldr r0, [sp, #0x4] - str r0, [r4, #0x0] - ldr r0, [sp, #0x14] - str r0, [r4, #0x0] - ldr r0, [sp, #0x20] - str r0, [r4, #0x0] - ldr r0, [sp, #0x8] - str r0, [r4, #0x0] -_020C8184: - add r1, sp, #0xc - mov r0, r9 - bl VEC_DotProduct - rsb r6, r0, #0x0 - add r1, sp, #0x18 - mov r0, r9 - bl VEC_DotProduct - rsb r5, r0, #0x0 - add r1, sp, #0x0 - mov r0, r9 - bl VEC_DotProduct -_020C81B0: ; 0x020C81B0 - cmp r8, #0x0 - strne r6, [r4, #0x0] - rsb r0, r0, #0x0 - strne r5, [r4, #0x0] - strne r0, [r4, #0x0] - cmp r7, #0x0 - addeq sp, sp, #0x24 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - ldr r1, [sp, #0xc] - str r1, [r7, #0x0] - ldr r1, [sp, #0x18] - str r1, [r7, #0x4] - ldr r1, [sp, #0x0] - str r1, [r7, #0x8] - ldr r1, [sp, #0x10] - str r1, [r7, #0xc] - ldr r1, [sp, #0x1c] - str r1, [r7, #0x10] - ldr r1, [sp, #0x4] - str r1, [r7, #0x14] - ldr r1, [sp, #0x14] - str r1, [r7, #0x18] - ldr r1, [sp, #0x20] - str r1, [r7, #0x1c] - ldr r1, [sp, #0x8] - str r1, [r7, #0x20] - str r6, [r7, #0x24] - str r5, [r7, #0x28] - str r0, [r7, #0x2c] - add sp, sp, #0x24 - ldmia sp!, {r4-r9,lr} - bx lr - .balign 4 -_020C8234: .word 0x04000440 -_020C8238: .word 0x0400045C - - arm_func_start G3i_OrthoW_ -G3i_OrthoW_: ; 0x020C823C - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x34 - str r2, [sp, #0x8] - str r0, [sp, #0x0] - ldr r0, [sp, #0x8] - mov r2, r3 - ldr r7, [sp, #0x64] - sub r0, r2, r0 - str r3, [sp, #0xc] - str r1, [sp, #0x4] - ldr r8, [sp, #0x60] - ldr r6, [sp, #0x68] - bl FX_InvAsync -_020C8270: ; 0x020C8270 - cmp r7, #0x0 - ldrne r0, _020C8528 ; =0x04000440 - movne r1, #0x0 - ldrne r4, _020C852C ; =0x04000458 - strne r1, [r0, #0x0] - cmp r6, #0x0 - beq _020C82B8 - mov r0, #0x0 - str r0, [r6, #0x4] - str r0, [r6, #0x8] - str r0, [r6, #0xc] - str r0, [r6, #0x10] - str r0, [r6, #0x18] - str r0, [r6, #0x1c] - str r0, [r6, #0x20] - str r0, [r6, #0x24] - str r0, [r6, #0x2c] - str r8, [r6, #0x3c] -_020C82B8: - bl FX_GetDivResultFx64c - mov r5, r0 - str r1, [sp, #0x14] - ldr sb, _020C8530 ; =0x04000290 - mov r3, #0x0 - ldr r1, [sp, #0x0] - ldr r0, [sp, #0x4] - str r3, [r9, #0x0] - mov r2, #0x1000 - sub r1, r1, r0 - ldr r0, _020C8534 ; =0x04000298 - str r2, [r9, #0x4] - str r1, [r0, #0x0] - cmp r8, #0x1000 - str r3, [r0, #0x4] - beq _020C8318 - mov r9, r8, asr #0x1f - umull r0, r1, r5, r8 - mla r1, r5, r9, r1 - ldr r5, [sp, #0x14] - mla r1, r5, r8, r1 - bl _ll_sdiv - mov r5, r0 - str r1, [sp, #0x14] -_020C8318: - ldr r0, [sp, #0x14] - mov r2, r5, lsl #0xd - mov r1, r0, lsl #0xd - mov r0, #0x80000000 - adds r0, r2, r0 - orr r1, r1, r5, lsr #0x13 - adc r1, r1, #0x0 - cmp r7, #0x0 - mov r0, #0x0 - strne r1, [r4, #0x0] - strne r0, [r4, #0x0] - strne r0, [r4, #0x0] - strne r0, [r4, #0x0] - strne r0, [r4, #0x0] - cmp r6, #0x0 - strne r1, [r6, #0x0] - bl FX_GetDivResultFx64c - mov r11, r0 - str r1, [sp, #0x2c] - ldr r0, _020C8530 ; =0x04000290 - mov r3, #0x0 - mov r2, #0x1000 - str r3, [r0, #0x0] - str r2, [r0, #0x4] - ldr r9, [sp, #0x58] - ldr r1, [sp, #0x5c] - ldr r0, _020C8534 ; =0x04000298 - sub r1, r9, r1 - str r1, [r0, #0x0] - cmp r8, #0x1000 - str r3, [r0, #0x4] - beq _020C83B8 - mov r9, r8, asr #0x1f - umull r0, r1, r11, r8 - mla r1, r11, r9, r1 - ldr r9, [sp, #0x2c] - mla r1, r9, r8, r1 - bl _ll_sdiv - mov r11, r0 - str r1, [sp, #0x2c] -_020C83B8: - ldr r0, [sp, #0x2c] - mov r3, r11, lsl #0xd - mov r2, r0, lsl #0xd - mov r0, #0x80000000 - orr r2, r2, r11, lsr #0x13 - adds r0, r3, r0 - adc r0, r2, #0x0 - cmp r7, #0x0 - mov r1, #0x0 - strne r0, [r4, #0x0] - strne r1, [r4, #0x0] - strne r1, [r4, #0x0] - strne r1, [r4, #0x0] - strne r1, [r4, #0x0] - cmp r6, #0x0 - strne r0, [r6, #0x14] - bl FX_GetDivResultFx64c - cmp r8, #0x1000 - beq _020C8428 - mov r9, r8, asr #0x1f - mov r2, #0x1000 - mov r3, #0x0 - umull r12, r10, r0, r8 - mla r10, r0, r9, r10 - mov r0, r12 - mla r10, r1, r8, r10 - mov r1, r10 - bl _ll_sdiv -_020C8428: - mov r9, r1, lsl #0xd - mov r10, r0, lsl #0xd - mov r2, #0x80000000 - orr r9, r9, r0, lsr #0x13 - adds r2, r10, r2 - adc r2, r9, #0x0 - cmp r7, #0x0 - mov r3, #0x0 - strne r2, [r4, #0x0] - strne r3, [r4, #0x0] - cmp r6, #0x0 - strne r2, [r6, #0x28] - ldr r3, [sp, #0xc] - ldr r2, [sp, #0x8] - add r9, r3, r2 - rsb lr, r9, #0x0 - ldr r3, [sp, #0x0] - ldr r2, [sp, #0x4] - ldr r9, [sp, #0x5c] - add r2, r3, r2 - ldr r3, [sp, #0x58] - rsb r12, r2, #0x0 - add r3, r9, r3 - mov r9, r12, asr #0x1f - str r9, [sp, #0x20] - mov r9, r3, asr #0x1f - str r9, [sp, #0x24] - umull r10, r9, r5, lr - mov r2, lr, asr #0x1f - str r2, [sp, #0x1c] - str r10, [sp, #0x18] - ldr r10, [sp, #0x1c] - mov r2, #0x80000000 - mla r9, r5, r10, r9 - ldr r5, [sp, #0x14] - mla r9, r5, lr, r9 - ldr r5, [sp, #0x18] - adds r5, r5, r2 - adc r10, r9, #0x0 - ldr r5, [sp, #0x20] - umull lr, r9, r11, r12 - mla r9, r11, r5, r9 - ldr r5, [sp, #0x2c] - mla r9, r5, r12, r9 - adds r5, lr, r2 - adc r5, r9, #0x0 - umull r11, r9, r0, r3 - adds r2, r11, r2 - ldr r2, [sp, #0x24] - mla r9, r0, r2, r9 - mla r9, r1, r3, r9 - adc r0, r9, #0x0 - cmp r7, #0x0 - strne r10, [r4, #0x0] - strne r5, [r4, #0x0] - strne r0, [r4, #0x0] - strne r8, [r4, #0x0] - cmp r6, #0x0 - strne r10, [r6, #0x30] - strne r5, [r6, #0x34] - strne r0, [r6, #0x38] - add sp, sp, #0x34 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020C8528: .word 0x04000440 -_020C852C: .word 0x04000458 -_020C8530: .word 0x04000290 -_020C8534: .word 0x04000298 - - arm_func_start G3i_PerspectiveW_ -G3i_PerspectiveW_: ; 0x020C8538 - stmdb sp!, {r4-r10,lr} - mov r5, r0 - mov r0, r1 - mov r1, r5 - ldr r6, [sp, #0x24] - mov r9, r2 - mov r8, r3 - ldr r5, [sp, #0x2c] - bl FX_Div - mov r7, r0 - cmp r6, #0x1000 - mulne r1, r7, r6 - movne r0, r1, asr #0xb - addne r0, r1, r0, lsr #0x14 - movne r7, r0, asr #0xc - ldr r0, [sp, #0x28] - ldr r2, _020C8718 ; =0x04000290 - cmp r0, #0x0 - mov r3, #0x0 - str r3, [r2, #0x0] - ldr r1, _020C871C ; =0x04000298 - str r7, [r2, #0x4] - str r9, [r1, #0x0] - ldrne r0, _020C8720 ; =0x04000440 - str r3, [r1, #0x4] - ldrne r4, _020C8724 ; =0x04000458 - strne r3, [r0, #0x0] - cmp r5, #0x0 - beq _020C85E4 - mov r1, #0x0 - str r1, [r5, #0x4] - str r1, [r5, #0x8] - str r1, [r5, #0xc] - str r1, [r5, #0x10] - str r1, [r5, #0x18] - str r1, [r5, #0x1c] - str r1, [r5, #0x20] - str r1, [r5, #0x24] - rsb r0, r6, #0x0 - str r0, [r5, #0x2c] - str r1, [r5, #0x30] - str r1, [r5, #0x34] - str r1, [r5, #0x3c] -_020C85E4: - bl FX_GetDivResult - ldr r3, [sp, #0x20] - ldr r1, [sp, #0x28] - ldr sb, _020C8718 ; =0x04000290 - mov r12, #0x0 - str r12, [r9, #0x0] - mov r10, #0x1000 - ldr r2, _020C871C ; =0x04000298 - str r10, [r9, #0x4] - sub r3, r8, r3 - str r3, [r2, #0x0] - str r12, [r2, #0x4] - cmp r1, #0x0 - beq _020C8644 - str r0, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] - str r7, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] -_020C8644: - cmp r5, #0x0 - strne r0, [r5, #0x0] - strne r7, [r5, #0x14] - bl FX_GetDivResultFx64c - cmp r6, #0x1000 - beq _020C8680 - mov r2, r6, asr #0x1f - umull r7, r3, r0, r6 - mla r3, r0, r2, r3 - mla r3, r1, r6, r3 - mov r0, r7 - mov r1, r3 - mov r2, #0x1000 - mov r3, #0x0 - bl _ll_sdiv -_020C8680: - ldr r3, [sp, #0x20] - mov r10, r8, lsl #0x1 - add r12, r3, r8 - mov r2, r12, asr #0x1f - umull r7, lr, r0, r12 - mla lr, r0, r2, lr - mov r9, #0x80000000 - smull r3, r2, r10, r3 - mla lr, r1, r12, lr - adds r7, r7, r9 - mov r8, #0x800 - adc r7, lr, #0x0 - adds r3, r3, r8 - adc r2, r2, #0x0 - mov r3, r3, lsr #0xc - orr r3, r3, r2, lsl #0x14 - umull r10, r8, r0, r3 - mov r2, r3, asr #0x1f - adds r9, r10, r9 - mla r8, r0, r2, r8 - mla r8, r1, r3, r8 - ldr r0, [sp, #0x28] - adc r2, r8, #0x0 - cmp r0, #0x0 - mov r0, #0x0 - beq _020C8704 - str r7, [r4, #0x0] - rsb r1, r6, #0x0 - str r1, [r4, #0x0] - str r0, [r4, #0x0] - str r0, [r4, #0x0] - str r2, [r4, #0x0] - str r0, [r4, #0x0] -_020C8704: - cmp r5, #0x0 - strne r7, [r5, #0x28] - strne r2, [r5, #0x38] - ldmia sp!, {r4-r10,lr} - bx lr - .balign 4 -_020C8718: .word 0x04000290 -_020C871C: .word 0x04000298 -_020C8720: .word 0x04000440 -_020C8724: .word 0x04000458 - - arm_func_start GXS_EndLoadOBJExtPltt -GXS_EndLoadOBJExtPltt: ; 0x020C8728 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C876C ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C8748 - bl MI_WaitDma -_020C8748: - ldr r0, _020C8770 ; =0x021D33F8 - ldr r0, [r0, #0x0] - bl GX_SetBankForSubOBJExtPltt - ldr r0, _020C8770 ; =0x021D33F8 - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C876C: .word 0x02106814 -_020C8770: .word 0x021D33F8 - - arm_func_start GXS_LoadOBJExtPltt -GXS_LoadOBJExtPltt: ; 0x020C8774 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - ldr r3, _020C87E0 ; =0x02106814 - mvn r12, #0x0 - ldr lr, [r3, #0x0] - mov r5, r0 - mov r4, r1 - mov r3, r2 - cmp lr, r12 - beq _020C87C8 - ldr r2, _020C87E4 ; =0x068A0000 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r5 - add r2, r4, r2 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr -_020C87C8: - ldr r1, _020C87E4 ; =0x068A0000 - add r1, r4, r1 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C87E0: .word 0x02106814 -_020C87E4: .word 0x068A0000 - - arm_func_start GXS_BeginLoadOBJExtPltt -GXS_BeginLoadOBJExtPltt: ; 0x020C87E8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl GX_ResetBankForSubOBJ - ldr r1, _020C8808 ; =0x021D33F8 - str r0, [r1, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C8808: .word 0x021D33F8 - - arm_func_start GXS_EndLoadBGExtPltt -GXS_EndLoadBGExtPltt: ; 0x020C880C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C8850 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C882C - bl MI_WaitDma -_020C882C: - ldr r0, _020C8854 ; =0x021D33E0 - ldr r0, [r0, #0x0] - bl GX_SetBankForSubBGExtPltt - ldr r0, _020C8854 ; =0x021D33E0 - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C8850: .word 0x02106814 -_020C8854: .word 0x021D33E0 - - arm_func_start GXS_LoadBGExtPltt -GXS_LoadBGExtPltt: ; 0x020C8858 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - ldr r3, _020C88C4 ; =0x02106814 - mvn r12, #0x0 - ldr lr, [r3, #0x0] - mov r5, r0 - mov r4, r1 - mov r3, r2 - cmp lr, r12 - beq _020C88AC - ldr r2, _020C88C8 ; =0x06898000 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r5 - add r2, r4, r2 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr -_020C88AC: - ldr r1, _020C88C8 ; =0x06898000 - add r1, r4, r1 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C88C4: .word 0x02106814 -_020C88C8: .word 0x06898000 - - arm_func_start GXS_BeginLoadBGExtPltt -GXS_BeginLoadBGExtPltt: ; 0x020C88CC - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl FUN_020C6034 - ldr r1, _020C88EC ; =0x021D33E0 - str r0, [r1, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C88EC: .word 0x021D33E0 - - arm_func_start GX_EndLoadOBJExtPltt -GX_EndLoadOBJExtPltt: ; 0x020C88F0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C893C ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C8910 - bl MI_WaitDma -_020C8910: - ldr r0, _020C8940 ; =0x021D33E8 - ldr r0, [r0, #0x0] - bl GX_SetBankForOBJExtPltt - ldr r1, _020C8940 ; =0x021D33E8 - mov r2, #0x0 - ldr r0, _020C8944 ; =0x021D33E4 - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C893C: .word 0x02106814 -_020C8940: .word 0x021D33E8 -_020C8944: .word 0x021D33E4 - - arm_func_start GX_LoadOBJExtPltt -GX_LoadOBJExtPltt: ; 0x020C8948 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - ldr ip, _020C89B4 ; =0x021D33E4 - ldr r3, _020C89B8 ; =0x02106814 - ldr r4, [r12, #0x0] - ldr lr, [r3, #0x0] - mvn r12, #0x0 - mov r5, r0 - mov r3, r2 - cmp lr, r12 - add r4, r4, r1 - beq _020C89A0 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r5 - mov r2, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr -_020C89A0: - mov r1, r4 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C89B4: .word 0x021D33E4 -_020C89B8: .word 0x02106814 - - arm_func_start GX_BeginLoadOBJExtPltt -GX_BeginLoadOBJExtPltt: ; 0x020C89BC - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl GX_ResetBankForOBJExtPltt - ldr r1, _020C8A1C ; =0x021D33E8 - cmp r0, #0x0 - str r0, [r1, #0x0] - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - cmp r0, #0x20 - beq _020C8A04 - cmp r0, #0x40 - ldreq r1, _020C8A20 ; =0x06894000 - ldreq r0, _020C8A24 ; =0x021D33E4 - add sp, sp, #0x4 - streq r1, [r0, #0x0] - ldmia sp!, {lr} - bx lr -_020C8A04: - ldr r1, _020C8A28 ; =0x06890000 - ldr r0, _020C8A24 ; =0x021D33E4 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C8A1C: .word 0x021D33E8 -_020C8A20: .word 0x06894000 -_020C8A24: .word 0x021D33E4 -_020C8A28: .word 0x06890000 - - arm_func_start GX_EndLoadBGExtPltt -GX_EndLoadBGExtPltt: ; 0x020C8A2C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C8A80 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C8A4C - bl MI_WaitDma -_020C8A4C: - ldr r0, _020C8A84 ; =0x021D33F4 - ldr r0, [r0, #0x0] - bl GX_SetBankForBGExtPltt - ldr r2, _020C8A84 ; =0x021D33F4 - mov r3, #0x0 - ldr r1, _020C8A88 ; =0x021D33F0 - ldr r0, _020C8A8C ; =0x021D33EC - str r3, [r2, #0x0] - str r3, [r1, #0x0] - str r3, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C8A80: .word 0x02106814 -_020C8A84: .word 0x021D33F4 -_020C8A88: .word 0x021D33F0 -_020C8A8C: .word 0x021D33EC - - arm_func_start GX_LoadBGExtPltt -GX_LoadBGExtPltt: ; 0x020C8A90 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - ldr lr, _020C8B04 ; =0x021D33F0 - ldr ip, _020C8B08 ; =0x021D33EC - ldr r3, _020C8B0C ; =0x02106814 - ldr lr, [lr, #0x0] - ldr r4, [r12, #0x0] - add r5, lr, r1 - ldr lr, [r3, #0x0] - mvn r12, #0x0 - mov r1, r0 - mov r3, r2 - cmp lr, r12 - sub r4, r5, r4 - beq _020C8AF0 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r2, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr -_020C8AF0: - mov r1, r4 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C8B04: .word 0x021D33F0 -_020C8B08: .word 0x021D33EC -_020C8B0C: .word 0x02106814 - - arm_func_start GX_BeginLoadBGExtPltt -GX_BeginLoadBGExtPltt: ; 0x020C8B10 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl GX_ResetBankForBGExtPltt - ldr r1, _020C8BFC ; =0x021D33F4 - cmp r0, #0x20 - str r0, [r1, #0x0] - bgt _020C8B60 - cmp r0, #0x20 - bge _020C8BD8 - cmp r0, #0x0 - bgt _020C8B4C - add sp, sp, #0x4 - cmp r0, #0x0 - ldmia sp!, {lr} - bx lr -_020C8B4C: - cmp r0, #0x10 - beq _020C8B90 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C8B60: - cmp r0, #0x40 - bgt _020C8B7C - cmp r0, #0x40 - beq _020C8BB4 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C8B7C: - cmp r0, #0x60 - beq _020C8BD8 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C8B90: - ldr r3, _020C8C00 ; =0x06880000 - ldr r1, _020C8C04 ; =0x021D33F0 - ldr r0, _020C8C08 ; =0x021D33EC - mov r2, #0x0 - str r3, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C8BB4: - ldr r3, _020C8C0C ; =0x06894000 - ldr r1, _020C8C04 ; =0x021D33F0 - ldr r0, _020C8C08 ; =0x021D33EC - mov r2, #0x4000 - str r3, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C8BD8: - ldr r3, _020C8C10 ; =0x06890000 - ldr r1, _020C8C04 ; =0x021D33F0 - ldr r0, _020C8C08 ; =0x021D33EC - mov r2, #0x0 - str r3, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C8BFC: .word 0x021D33F4 -_020C8C00: .word 0x06880000 -_020C8C04: .word 0x021D33F0 -_020C8C08: .word 0x021D33EC -_020C8C0C: .word 0x06894000 -_020C8C10: .word 0x06890000 - - arm_func_start GXS_LoadBG3Char -GXS_LoadBG3Char: ; 0x020C8C14 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG3CharPtr - ldr r1, _020C8C78 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8C60 - cmp r4, #0x30 - bls _020C8C60 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8C60: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8C78: .word 0x02106814 - - arm_func_start GX_LoadBG3Char -GX_LoadBG3Char: ; 0x020C8C7C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG3CharPtr - ldr r1, _020C8CE0 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8CC8 - cmp r4, #0x30 - bls _020C8CC8 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8CC8: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8CE0: .word 0x02106814 - - arm_func_start GXS_LoadBG2Char -GXS_LoadBG2Char: ; 0x020C8CE4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG2CharPtr - ldr r1, _020C8D48 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8D30 - cmp r4, #0x30 - bls _020C8D30 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8D30: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8D48: .word 0x02106814 - - arm_func_start GX_LoadBG2Char -GX_LoadBG2Char: ; 0x020C8D4C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG2CharPtr - ldr r1, _020C8DB0 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8D98 - cmp r4, #0x30 - bls _020C8D98 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8D98: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8DB0: .word 0x02106814 - - arm_func_start GXS_LoadBG1Char -GXS_LoadBG1Char: ; 0x020C8DB4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG1CharPtr - ldr r1, _020C8E18 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8E00 - cmp r4, #0x30 - bls _020C8E00 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8E00: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8E18: .word 0x02106814 - - arm_func_start GX_LoadBG1Char -GX_LoadBG1Char: ; 0x020C8E1C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG1CharPtr - ldr r1, _020C8E80 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8E68 - cmp r4, #0x30 - bls _020C8E68 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8E68: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8E80: .word 0x02106814 - - arm_func_start GXS_LoadBG0Char -GXS_LoadBG0Char: ; 0x020C8E84 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG0CharPtr - ldr r1, _020C8EE8 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8ED0 - cmp r4, #0x30 - bls _020C8ED0 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8ED0: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8EE8: .word 0x02106814 - - arm_func_start GX_LoadBG0Char -GX_LoadBG0Char: ; 0x020C8EEC - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG0CharPtr - ldr r1, _020C8F50 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8F38 - cmp r4, #0x30 - bls _020C8F38 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8F38: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8F50: .word 0x02106814 - - arm_func_start GXS_LoadBG3Scr -GXS_LoadBG3Scr: ; 0x020C8F54 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG3ScrPtr - ldr r1, _020C8FB8 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8FA0 - cmp r4, #0x1c - bls _020C8FA0 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8FA0: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8FB8: .word 0x02106814 - - arm_func_start GX_LoadBG3Scr -GX_LoadBG3Scr: ; 0x020C8FBC - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG3ScrPtr - ldr r1, _020C9020 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C9008 - cmp r4, #0x1c - bls _020C9008 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C9008: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9020: .word 0x02106814 - - arm_func_start GXS_LoadBG2Scr -GXS_LoadBG2Scr: ; 0x020C9024 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG2ScrPtr - ldr r1, _020C9088 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C9070 - cmp r4, #0x1c - bls _020C9070 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C9070: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9088: .word 0x02106814 - - arm_func_start GX_LoadBG2Scr -GX_LoadBG2Scr: ; 0x020C908C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG2ScrPtr - ldr r1, _020C90F0 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C90D8 - cmp r4, #0x1c - bls _020C90D8 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C90D8: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C90F0: .word 0x02106814 - - arm_func_start GXS_LoadBG1Scr -GXS_LoadBG1Scr: ; 0x020C90F4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG1ScrPtr - ldr r1, _020C9158 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C9140 - cmp r4, #0x1c - bls _020C9140 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C9140: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9158: .word 0x02106814 - - arm_func_start GX_LoadBG1Scr -GX_LoadBG1Scr: ; 0x020C915C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG1ScrPtr - ldr r1, _020C91C0 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C91A8 - cmp r4, #0x1c - bls _020C91A8 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C91A8: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C91C0: .word 0x02106814 - - arm_func_start GXS_LoadBG0Scr -GXS_LoadBG0Scr: ; 0x020C91C4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG0ScrPtr - ldr r1, _020C9228 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C9210 - cmp r4, #0x1c - bls _020C9210 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C9210: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9228: .word 0x02106814 - - arm_func_start GX_LoadBG0Scr -GX_LoadBG0Scr: ; 0x020C922C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG0ScrPtr - ldr r1, _020C9290 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C9278 - cmp r4, #0x1c - bls _020C9278 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C9278: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9290: .word 0x02106814 - - arm_func_start GXS_LoadOBJ -GXS_LoadOBJ: ; 0x020C9294 - stmdb sp!, {r4,lr} - ldr r3, _020C92F0 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - mov r12, #0x6600000 - beq _020C92D8 - cmp r3, #0x30 - bls _020C92D8 - mov r1, r4 - add r2, r12, lr - bl MI_DmaCopy32 - ldmia sp!, {r4,lr} - bx lr -_020C92D8: - mov r0, r4 - mov r2, r3 - add r1, r12, lr - bl MIi_CpuCopy32 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C92F0: .word 0x02106814 - - arm_func_start GX_LoadOBJ -GX_LoadOBJ: ; 0x020C92F4 - stmdb sp!, {r4,lr} - ldr r3, _020C9350 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - mov r12, #0x6400000 - beq _020C9338 - cmp r3, #0x30 - bls _020C9338 - mov r1, r4 - add r2, r12, lr - bl MI_DmaCopy32 - ldmia sp!, {r4,lr} - bx lr -_020C9338: - mov r0, r4 - mov r2, r3 - add r1, r12, lr - bl MIi_CpuCopy32 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C9350: .word 0x02106814 - - arm_func_start GXS_LoadOAM -GXS_LoadOAM: ; 0x020C9354 - stmdb sp!, {r4,lr} - ldr r3, _020C93B4 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C9398 - cmp r3, #0x30 - bls _020C9398 - ldr r2, _020C93B8 ; =0x07000400 - mov r1, r4 - add r2, lr, r2 - bl MI_DmaCopy32 - ldmia sp!, {r4,lr} - bx lr -_020C9398: - ldr r1, _020C93B8 ; =0x07000400 - mov r0, r4 - mov r2, r3 - add r1, lr, r1 - bl MIi_CpuCopy32 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C93B4: .word 0x02106814 -_020C93B8: .word 0x07000400 - - arm_func_start GX_LoadOAM -GX_LoadOAM: ; 0x020C93BC - stmdb sp!, {r4,lr} - ldr r3, _020C9414 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C93FC - cmp r3, #0x30 - bls _020C93FC - mov r1, r4 - add r2, lr, #0x7000000 - bl MI_DmaCopy32 - ldmia sp!, {r4,lr} - bx lr -_020C93FC: - mov r0, r4 - mov r2, r3 - add r1, lr, #0x7000000 - bl MIi_CpuCopy32 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C9414: .word 0x02106814 - - arm_func_start GXS_LoadOBJPltt -GXS_LoadOBJPltt: ; 0x020C9418 - stmdb sp!, {r4,lr} - ldr r3, _020C9478 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C945C - cmp r3, #0x1c - bls _020C945C - ldr r2, _020C947C ; =0x05000600 - mov r1, r4 - add r2, lr, r2 - bl MI_DmaCopy16 - ldmia sp!, {r4,lr} - bx lr -_020C945C: - ldr r1, _020C947C ; =0x05000600 - mov r0, r4 - mov r2, r3 - add r1, lr, r1 - bl MIi_CpuCopy16 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C9478: .word 0x02106814 -_020C947C: .word 0x05000600 - - arm_func_start GX_LoadOBJPltt -GX_LoadOBJPltt: ; 0x020C9480 - stmdb sp!, {r4,lr} - ldr r3, _020C94E0 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C94C4 - cmp r3, #0x1c - bls _020C94C4 - ldr r2, _020C94E4 ; =0x05000200 - mov r1, r4 - add r2, lr, r2 - bl MI_DmaCopy16 - ldmia sp!, {r4,lr} - bx lr -_020C94C4: - ldr r1, _020C94E4 ; =0x05000200 - mov r0, r4 - mov r2, r3 - add r1, lr, r1 - bl MIi_CpuCopy16 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C94E0: .word 0x02106814 -_020C94E4: .word 0x05000200 - - arm_func_start GXS_LoadBGPltt -GXS_LoadBGPltt: ; 0x020C94E8 - stmdb sp!, {r4,lr} - ldr r3, _020C9548 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C952C - cmp r3, #0x1c - bls _020C952C - ldr r2, _020C954C ; =0x05000400 - mov r1, r4 - add r2, lr, r2 - bl MI_DmaCopy16 - ldmia sp!, {r4,lr} - bx lr -_020C952C: - ldr r1, _020C954C ; =0x05000400 - mov r0, r4 - mov r2, r3 - add r1, lr, r1 - bl MIi_CpuCopy16 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C9548: .word 0x02106814 -_020C954C: .word 0x05000400 - - arm_func_start GX_LoadBGPltt -GX_LoadBGPltt: ; 0x020C9550 - stmdb sp!, {r4,lr} - ldr r3, _020C95A8 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C9590 - cmp r3, #0x1c - bls _020C9590 - mov r1, r4 - add r2, lr, #0x5000000 - bl MI_DmaCopy16 - ldmia sp!, {r4,lr} - bx lr -_020C9590: - mov r0, r4 - mov r2, r3 - add r1, lr, #0x5000000 - bl MIi_CpuCopy16 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C95A8: .word 0x02106814 - - arm_func_start GX_EndLoadClearImage -GX_EndLoadClearImage: ; 0x020C95AC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C95F8 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C95CC - bl MI_WaitDma -_020C95CC: - ldr r0, _020C95FC ; =0x021D33FC - ldr r0, [r0, #0x0] - bl GX_SetBankForClearImage - ldr r1, _020C95FC ; =0x021D33FC - mov r2, #0x0 - ldr r0, _020C9600 ; =0x021D340C - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C95F8: .word 0x02106814 -_020C95FC: .word 0x021D33FC -_020C9600: .word 0x021D340C - - arm_func_start GX_LoadClearImageDepth -GX_LoadClearImageDepth: ; 0x020C9604 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r3, _020C9670 ; =0x021D340C - ldr r2, _020C9674 ; =0x02106814 - ldr r12, [r3, #0x0] - ldr lr, [r2, #0x0] - mvn r2, #0x0 - mov r4, r0 - mov r3, r1 - cmp lr, r2 - add r2, r12, #0x20000 - beq _020C9658 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020C9658: - mov r1, r2 - mov r2, r3 - bl MIi_CpuCopy32 - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C9670: .word 0x021D340C -_020C9674: .word 0x02106814 - - arm_func_start GX_LoadClearImageColor -GX_LoadClearImageColor: ; 0x020C9678 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r2, _020C96E0 ; =0x02106814 - ldr ip, _020C96E4 ; =0x021D340C - ldr lr, [r2, #0x0] - mvn r2, #0x0 - mov r4, r0 - mov r3, r1 - cmp lr, r2 - ldr r2, [r12, #0x0] - beq _020C96C8 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020C96C8: - mov r1, r2 - mov r2, r3 - bl MIi_CpuCopy32 - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C96E0: .word 0x02106814 -_020C96E4: .word 0x021D340C - - arm_func_start GX_BeginLoadClearImage -GX_BeginLoadClearImage: ; 0x020C96E8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl GX_ResetBankForClearImage - ldr r1, _020C979C ; =0x021D33FC - cmp r0, #0xc - str r0, [r1, #0x0] - addls pc, pc, r0, lsl #0x2 - b _020C9790 -_020C9708: - b _020C9790 -_020C970C: - b _020C976C -_020C9710: - b _020C973C -_020C9714: - b _020C973C -_020C9718: - b _020C9784 -_020C971C: - b _020C9790 -_020C9720: - b _020C9790 -_020C9724: - b _020C9790 -_020C9728: - b _020C9754 -_020C972C: - b _020C9790 -_020C9730: - b _020C9790 -_020C9734: - b _020C9790 -_020C9738: - b _020C9754 -_020C973C: - ldr r0, _020C97A0 ; =0x021D340C - mov r1, #0x6800000 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C9754: - ldr r1, _020C97A4 ; =0x06840000 - ldr r0, _020C97A0 ; =0x021D340C - add sp, sp, #0x4 - str r1, [r0, #0x0] - ldmia sp!, {lr} - bx lr -_020C976C: - ldr r1, _020C97A8 ; =0x067E0000 - ldr r0, _020C97A0 ; =0x021D340C - add sp, sp, #0x4 - str r1, [r0, #0x0] - ldmia sp!, {lr} - bx lr -_020C9784: - ldr r1, _020C97AC ; =0x06820000 - ldr r0, _020C97A0 ; =0x021D340C - str r1, [r0, #0x0] -_020C9790: - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C979C: .word 0x021D33FC -_020C97A0: .word 0x021D340C -_020C97A4: .word 0x06840000 -_020C97A8: .word 0x067E0000 -_020C97AC: .word 0x06820000 - - arm_func_start GX_EndLoadTexPltt -GX_EndLoadTexPltt: ; 0x020C97B0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C97FC ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C97D0 - bl MI_WaitDma -_020C97D0: - ldr r0, _020C9800 ; =0x021D3408 - ldr r0, [r0, #0x0] - bl GX_SetBankForTexPltt - ldr r1, _020C9800 ; =0x021D3408 - mov r2, #0x0 - ldr r0, _020C9804 ; =0x021D3404 - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C97FC: .word 0x02106814 -_020C9800: .word 0x021D3408 -_020C9804: .word 0x021D3404 - - arm_func_start GX_LoadTexPltt -GX_LoadTexPltt: ; 0x020C9808 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - ldr ip, _020C9874 ; =0x021D3404 - ldr r3, _020C9878 ; =0x02106814 - ldr r4, [r12, #0x0] - ldr lr, [r3, #0x0] - mvn r12, #0x0 - mov r5, r0 - mov r3, r2 - cmp lr, r12 - add r4, r4, r1 - beq _020C9860 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r5 - mov r2, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr -_020C9860: - mov r1, r4 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C9874: .word 0x021D3404 -_020C9878: .word 0x02106814 - - arm_func_start GX_BeginLoadTexPltt -GX_BeginLoadTexPltt: ; 0x020C987C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl GX_ResetBankForTexPltt - mov r3, r0, asr #0x4 - ldr r2, _020C98B8 ; =0x021D3408 - ldr r1, _020C98BC ; =0x02103B3C - mov r3, r3, lsl #0x1 - ldrh r3, [r1, r3] - ldr r1, _020C98C0 ; =0x021D3404 - str r0, [r2, #0x0] - mov r0, r3, lsl #0xc - str r0, [r1, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C98B8: .word 0x021D3408 -_020C98BC: .word 0x02103B3C -_020C98C0: .word 0x021D3404 - - arm_func_start GX_EndLoadTex -GX_EndLoadTex: ; 0x020C98C4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C9920 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C98E4 - bl MI_WaitDma -_020C98E4: - ldr r0, _020C9924 ; =0x021D3410 - ldr r0, [r0, #0x0] - bl GX_SetBankForTex - ldr r3, _020C9928 ; =0x021D3418 - mov r12, #0x0 - ldr r2, _020C992C ; =0x021D3414 - ldr r1, _020C9930 ; =0x021D3400 - ldr r0, _020C9924 ; =0x021D3410 - str r12, [r3, #0x0] - str r12, [r2, #0x0] - str r12, [r1, #0x0] - str r12, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C9920: .word 0x02106814 -_020C9924: .word 0x021D3410 -_020C9928: .word 0x021D3418 -_020C992C: .word 0x021D3414 -_020C9930: .word 0x021D3400 - - arm_func_start GX_LoadTex -GX_LoadTex: ; 0x020C9934 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - ldr r3, _020C9A88 ; =0x021D3414 - mov r7, r0 - ldr r5, [r3, #0x0] - mov r6, r2 - cmp r5, #0x0 - ldreq r0, _020C9A8C ; =0x021D3400 - ldreq r0, [r0, #0x0] - addeq r2, r0, r1 - beq _020C9A34 - ldr r0, _020C9A90 ; =0x021D3418 - add r2, r1, r6 - ldr r4, [r0, #0x0] - cmp r2, r4 - ldrlo r0, _020C9A8C ; =0x021D3400 - ldrcc r0, [r0, #0x0] - addcc r2, r0, r1 - blo _020C9A34 - cmp r1, r4 - addcs r0, r5, r1 - subcs r2, r0, r4 - bhs _020C9A34 - ldr r2, _020C9A8C ; =0x021D3400 - ldr r0, _020C9A94 ; =0x02106814 - ldr r3, [r2, #0x0] - ldr r0, [r0, #0x0] - mvn r2, #0x0 - cmp r0, r2 - sub r4, r4, r1 - add r2, r3, r1 - beq _020C99CC - cmp r4, #0x30 - bls _020C99CC - mov r1, r7 - mov r3, r4 - bl MI_DmaCopy32 - b _020C99DC -_020C99CC: - mov r1, r2 - mov r0, r7 - mov r2, r4 - bl MIi_CpuCopy32 -_020C99DC: - ldr r0, _020C9A94 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C9A18 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r2, r5 - add r1, r7, r4 - sub r3, r6, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr -_020C9A18: - mov r1, r5 - add r0, r7, r4 - sub r2, r6, r4 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr -_020C9A34: - ldr r0, _020C9A94 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C9A6C - mov r4, #0x0 - str r4, [sp, #0x0] - mov r1, r7 - mov r3, r6 - str r4, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr -_020C9A6C: - mov r1, r2 - mov r0, r7 - mov r2, r6 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020C9A88: .word 0x021D3414 -_020C9A8C: .word 0x021D3400 -_020C9A90: .word 0x021D3418 -_020C9A94: .word 0x02106814 - - arm_func_start GX_BeginLoadTex -GX_BeginLoadTex: ; 0x020C9A98 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl GX_ResetBankForTex - mov r1, #0x6 - mul r12, r0, r1 - ldr r3, _020C9AFC ; =0x02103B4C - ldr r2, _020C9B00 ; =0x02103B4E - ldr r1, _020C9B04 ; =0x02103B50 - ldrh r5, [r3, r12] - ldrh r4, [r2, r12] - ldrh lr, [r1, r12] - ldr ip, _020C9B08 ; =0x021D3410 - ldr r3, _020C9B0C ; =0x021D3400 - mov r5, r5, lsl #0xc - ldr r2, _020C9B10 ; =0x021D3414 - mov r4, r4, lsl #0xc - ldr r1, _020C9B14 ; =0x021D3418 - mov lr, lr, lsl #0xc - str r0, [r12, #0x0] - str r5, [r3, #0x0] - str r4, [r2, #0x0] - str lr, [r1, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C9AFC: .word 0x02103B4C -_020C9B00: .word 0x02103B4E -_020C9B04: .word 0x02103B50 -_020C9B08: .word 0x021D3410 -_020C9B0C: .word 0x021D3400 -_020C9B10: .word 0x021D3414 -_020C9B14: .word 0x021D3418 - - arm_func_start G3_EndMakeDL -G3_EndMakeDL: ; 0x020C9B18 - ldr r3, [r0, #0x0] - ldr r2, [r0, #0x8] - cmp r2, r3 - moveq r0, #0x0 - bxeq lr - and r1, r3, #0x3 - cmp r1, #0x3 - addls pc, pc, r1, lsl #0x2 - b _020C9B8C -_020C9B3C: - b _020C9B4C -_020C9B40: - b _020C9B54 -_020C9B44: - b _020C9B64 -_020C9B48: - b _020C9B78 -_020C9B4C: - sub r0, r3, r2 - bx lr -_020C9B54: - add r1, r3, #0x1 - str r1, [r0, #0x0] - mov r1, #0x0 - strb r1, [r3, #0x0] -_020C9B64: - ldr r3, [r0, #0x0] - mov r1, #0x0 - add r2, r3, #0x1 - str r2, [r0, #0x0] - strb r1, [r3, #0x0] -_020C9B78: - ldr r3, [r0, #0x0] - mov r1, #0x0 - add r2, r3, #0x1 - str r2, [r0, #0x0] - strb r1, [r3, #0x0] -_020C9B8C: - ldr r1, [r0, #0x10] - cmp r1, #0x0 - beq _020C9BB0 - ldr r3, [r0, #0x4] - mov r1, #0x0 - add r2, r3, #0x4 - str r2, [r0, #0x4] - str r1, [r3, #0x0] - str r1, [r0, #0x10] -_020C9BB0: - ldr r1, [r0, #0x4] - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - ldr r0, [r0, #0x8] - sub r0, r1, r0 - bx lr - - arm_func_start G3_BeginMakeDL -G3_BeginMakeDL: ; 0x020C9BC8 - str r2, [r0, #0xc] - str r1, [r0, #0x8] - str r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - mov r1, #0x0 - str r1, [r0, #0x10] - bx lr - - arm_func_start FUN_020C9BE8 -FUN_020C9BE8: ; 0x020C9BE8 - 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 diff --git a/global.inc b/global.inc index d08e41279..89a596531 100644 --- a/global.inc +++ b/global.inc @@ -3534,3 +3534,23 @@ .extern MI_DmaCopy32Async .extern MI_DmaCopy32 .extern MI_SendGXCommandAsync +.extern GX_BeginLoadClearImage +.extern GX_LoadClearImageDepth +.extern GX_EndLoadClearImage +.extern GX_BeginLoadClearImage +.extern GX_LoadClearImageColor +.extern GX_EndLoadClearImage +.extern G3X_GetClipMtx +.extern G3X_GetClipMtx +.extern G3_MultMtx33 +.extern G3X_GetVectorMtx +.extern G3X_GetClipMtx +.extern G3X_GetClipMtx +.extern G3X_GetClipMtx +.extern G3X_GetVectorMtx +.extern FX_InvAsync +.extern FX_GetDivResultFx64c +.extern FX_GetDivResultFx64c +.extern FX_GetDivResultFx64c +.extern FX_GetDivResult +.extern FX_GetDivResultFx64c diff --git a/pokediamond.lcf b/pokediamond.lcf index 44a010035..ad1c352e4 100644 --- a/pokediamond.lcf +++ b/pokediamond.lcf @@ -389,6 +389,7 @@ SECTIONS { unk_02046030.o (.text) unk_0208AC14.o (.text) unk_020AF030.o (.text) + GX_arm9.o (.text) unk_020C9C0C.o (.text) PM_arm9.o (.text) RTC_arm9.o (.text) From bf7eb80ebd3c9b61bc436aaab88296bab9e5836f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Apr 2020 22:01:43 -0400 Subject: [PATCH 14/23] Partial dism of OS_arm9 autoload sections --- asm/OS_arm9.s | 216 ++++++++++++++++++++++++++++++++++++++++ asm/SDK_AUTOLOAD_LIST.s | 20 ++++ asm/arm7_rom.s | 83 +++++++++++++-- asm/crt0.s | 5 +- asm/rom2_2.s | 28 ------ global.inc | 14 +++ pokediamond.lcf | 29 +++++- undefined_syms.txt | 14 ++- 8 files changed, 366 insertions(+), 43 deletions(-) create mode 100644 asm/OS_arm9.s create mode 100644 asm/SDK_AUTOLOAD_LIST.s diff --git a/asm/OS_arm9.s b/asm/OS_arm9.s new file mode 100644 index 000000000..f7cbb69f3 --- /dev/null +++ b/asm/OS_arm9.s @@ -0,0 +1,216 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + + .section .itcm + ; Used in autoload + arm_func_start OS_IrqHandler +OS_IrqHandler: + stmfd sp!, {lr} + mov ip, #0x04000000 + add ip, ip, #0x210 + ldr r1, [ip, #-8] + cmp r1, #0 + ldmeqfd sp!, {pc} + ldmia ip, {r1, r2} + ands r1, r1, r2 + ldmeqfd sp!, {pc} + mov r3, #0x80000000 +_02106FC8: + clz r0, r1 + bics r1, r1, r3, lsr r0 + bne _02106FC8 + mov r1, r3, lsr r0 + str r1, [ip, #0x4] + rsbs r0, r0, #0x1f + ldr r1, _02106FF0 ; =0x027E0000 + ldr r0, [r1, r0, lsl #2] + ldr lr, _02106FF4 ; =0x01FF8058 + bx r0 +_02106FF0: .word OS_IRQTable +_02106FF4: .word OS_IrqHandler_ThreadSwitch + + arm_func_start OS_IrqHandler_ThreadSwitch +OS_IrqHandler_ThreadSwitch: ; + ldr ip, _02107144 + mov r3, #0x0 + ldr ip, [ip] + mov r2, #0x1 + cmp ip, #0x0 + beq _02107048 +_02107010: + str r2, [ip, #0x64] + str r3, [ip, #0x78] + str r3, [ip, #0x7c] + ldr r0, [ip, #0x80] + str r3, [ip, #0x80] + mov ip, r0 + cmp ip, #0x0 + bne _02107010 + ldr ip, _02107144 + str r3, [ip] + str r3, [ip, #0x4] + ldr ip, _02107148 + mov r1, #0x1 + strh r1, [ip] +_02107048: + ldr ip, _02107148 + ldrh r1, [ip] + cmp r1, #0x0 + ldreq pc, [sp], #0x4 + mov r1, #0x0 + strh r1, [ip] + mov r3, #0xd2 + msr CPSR_c, r3 + add r2, ip, #0x8 + ldr r1, [r2] +_02107070: + cmp r1, #0x0 + ldrneh r0, [r1, #0x64] + cmpne r0, #0x1 + ldrne r1, [r1, #0x68] + bne _02107070 + cmp r1, #0x0 + bne _02107098 +_0210708C: + mov r3, #0x92 + msr CPSR_c, r3 + ldr pc, [sp], #0x4 +_02107098: + ldr r0, [ip, #0x4] + cmp r1, r0 + beq _0210708C + ldr r3, [ip, #0xC] + cmp r3, #0x0 + beq _021070C0 + stmdb sp!, {r0, r1, ip} + mov lr, pc + bx r3 + ldmia sp!, {r0, r1, ip} +_021070C0: + str r1, [ip, #0x4] + mrs r2, SPSR + str r2, [r0, #0x0]! + stmdb sp!, {r0, r1} + add r0, r0, #0x0 + add r0, r0, #0x48 + ldr r1, _0210714C + blx r1 + ldmia sp!, {r0, r1} + ldmib sp!, {r2, r3} + stmib r0!, {r2, r3} + ldmib sp!, {r2, r3, ip, lr} + stmib r0!, {r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^ + stmib r0!, {lr} + mov r3, #0xd3 + msr CPSR_c, r3 + stmib r0!, {sp} + stmfd sp!, {r1} + add r0, r1, #0x0 + add r0, r0, #0x48 + ldr r1, _02107150 + blx r1 + ldmfd sp!, {r1} + ldr sp, [r1, #0x44] + mov r3, #0xd2 + msr CPSR_c, r3 + ldr r2, [r1, #0x0]! + msr SPSR_fc, r2 + ldr lr, [r1, #0x40] + ldmib r1!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^ + nop + stmda sp!, {r0, r1, r2, r3, ip, lr} + ldmfd sp!, {pc} +_02107144: .word OSi_IrqThreadQueue +_02107148: .word OSi_ThreadInfo +_0210714C: .word CP_SaveContext +_02107150: .word CP_RestoreContext + + .section .itcm + arm_func_start OSi_DoBoot +OSi_DoBoot: ; 02107154 + mov ip, #0x04000000 + str ip, [ip, #0x208] + ldr r1, _02107200 + add r1, r1, #0x3fc0 + add r1, r1, #0x3c + mov r0, #0x0 + str r0, [r1] + ldr r1, _02107204 +_02107174: + ldrh r0, [r1] + and r0, r0, #0xf + cmp r0, #0x1 + bne _02107174 + mov r0, #0x100 + strh r0, [r1] + mov r0, #0x0 + ldr r3, _02107208 + ldr r4, [r3] + ldr r1, _0210720C + mov r2, #0x80 + bl OSi_CpuClear32 + str r4, [r3] + ldr r1, _02107210 + mov r2, #0x18 + bl OSi_CpuClear32 + ldr r1, _02107214 + strh r0, [r1] + ldr r1, _02107218 + mov r2, #0x64 + bl OSi_CpuClear32 + ldr r1, _02107204 +_021071CC: + ldrh r0, [r1] + and r0, r0, #0xf + cmp r0, #0x1 + beq _021071CC + mov r0, #0x0 + strh r0, [r1] + ldr r3, _0210721C + ldr ip, [r3, #0x24] + mov lr, ip + ldr fp, _02107210 + ldmia fp, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl} + mov fp, #0x0 + bx ip +_02107200: .word SDK_AUTOLOAD_DTCM_START +_02107204: .word 0x04000180 +_02107208: .word 0x027FFD9C +_0210720C: .word 0x027FFD80 +_02107210: .word 0x027FFF80 +_02107214: .word 0x027FFF98 +_02107218: .word 0x027FFF9C +_0210721C: .word 0x027FFE00 + + arm_func_start OSi_CpuClear32 +OSi_CpuClear32: + .incbin "baserom.nds", 0x10B220, 0x480 + + .section .dtcm + .global OS_IRQTable +OS_IRQTable: ; 10b6a0 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OSi_IrqTimer0 ; 020c9cbc + .word OSi_IrqTimer1 ; 020c9cac + .word OSi_IrqTimer2 ; 020c9c9c + .word OSi_IrqTimer3 ; 020c9c8c + .word OS_IrqDummy ; 020c9da8 + .word OSi_IrqDma0 ; 020c9cfc + .word OSi_IrqDma1 ; 020c9cec + .word OSi_IrqDma2 ; 020c9cdc + .word OSi_IrqDma3 ; 020c9ccc + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .balign 16, 0 +OSi_IrqThreadQueue: diff --git a/asm/SDK_AUTOLOAD_LIST.s b/asm/SDK_AUTOLOAD_LIST.s new file mode 100644 index 000000000..8043d6162 --- /dev/null +++ b/asm/SDK_AUTOLOAD_LIST.s @@ -0,0 +1,20 @@ + .include "asm/macros.inc" + .section .data + + .global SDK_AUTOLOAD_LIST +SDK_AUTOLOAD_LIST: ; 0x02107700 + .word 0x01FF8000 + .word 0x00000700 + .word 0x00000000 + + .word 0x027e0000 + .word 0x00000060 + .word 0x00000020 + + .word 0x02400000 + .word 0x00000000 + .word 0x00000000 + + .global SDK_AUTOLOAD_LIST_END +SDK_AUTOLOAD_LIST_END: + diff --git a/asm/arm7_rom.s b/asm/arm7_rom.s index a18e85658..9dcd3224c 100644 --- a/asm/arm7_rom.s +++ b/asm/arm7_rom.s @@ -61,7 +61,7 @@ _023800a4: ldr r1, _23800f8 ldr lr, _23800fc bx r1 -_23800cc: .word UNK_23801B0 +_23800cc: .word FUN_023801B0 _23800d0: .word 0x0380ff00 _23800d4: .word 0x0380ffc0 _23800d8: .word 0x0380ff80 @@ -129,17 +129,84 @@ _0238018c: _2380194: .word 0x027ffffa _2380198: .word UNK_23A92F8 - .word UNK_23A92FC - .word UNK_23801B0 - .word UNK_23801B0 - .word UNK_23801B0 + .word UNK_23A931C + .word FUN_023801B0 + .word FUN_023801B0 + .word FUN_023801B0 .word 0x00000000 arm_func_end FUN_238015C -UNK_23801B0: - .incbin "baserom.nds", 0x30D1B0, 0x29148 + arm_func_start FUN_023801B0 +FUN_023801B0: + .incbin "baserom.nds", 0x30D1B0, 0x91B0 + + thumb_func_start SVC_SoftReset +SVC_SoftReset: ; 0x02389360 + swi 0 + bx lr + + thumb_func_start SVC_WaitByLoop +SVC_WaitByLoop: ; 0x02389364 + swi 3 + bx lr + + thumb_func_start SVC_WaitIntr +SVC_WaitIntr: ; 0x02389368 + ldr r2, =0x04000000 + mov ip, r2 + mov r2, #0x0 + swi 4 + bx lr + .pool + + thumb_func_start SVC_WaitVBlankIntr +SVC_WaitVBlankIntr: + mov r2, #0x0 + swi 5 + bx lr + + non_word_aligned_thumb_func_start SVC_Halt +SVC_Halt: + swi 6 + bx lr + + non_word_aligned_thumb_func_start SVC_Stop +SVC_Stop: + swi 7 + bx lr + + non_word_aligned_thumb_func_start SVC_SoundBias +SVC_SoundBias: + swi 8 + bx lr + + non_word_aligned_thumb_func_start SVC_SoundBiasSet +SVC_SoundBiasSet: + add r1, r0, #0x0 + mov r0, #0x1 + swi 8 + bx lr + + non_word_aligned_thumb_func_start SVC_SoundBiasReset +SVC_SoundBiasReset: + add r1, r0, #0x0 + mov r0, #0x0 + swi 8 + bx lr + + non_word_aligned_thumb_func_start SVC_Div +SVC_Div: + swi 9 + bx lr + + non_word_aligned_thumb_func_start SVC_DivRem +SVC_DivRem: + swi 9 + add r0, r1, #0x0 + bx lr + .incbin "baserom.nds", 0x3163a4, 0x1ff54 UNK_23A92F8: .incbin "baserom.nds", 0x3362F8, 0x24 -UNK_23A92FC: +UNK_23A931C: diff --git a/asm/crt0.s b/asm/crt0.s index cfbab5f0e..fe2ca894d 100644 --- a/asm/crt0.s +++ b/asm/crt0.s @@ -264,7 +264,10 @@ _start_ModuleParams: .word SDK_STATIC_BSS_END .word 0x00000000 - .byte 0x31, 0x75, 0x02, 0x03, 0x21, 0x06, 0xC0, 0xDE, 0xDE, 0xC0, 0x06, 0x21 + .ascii "1u" ; 31 75 + .byte 0x02, 0x03 + .word 0xdec00621 + .byte 0xde, 0xc0, 0x06, 0x21 # strings .balign 4 diff --git a/asm/rom2_2.s b/asm/rom2_2.s index 0682a6b0b..d50557739 100644 --- a/asm/rom2_2.s +++ b/asm/rom2_2.s @@ -732,31 +732,3 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203AFA4 .incbin "baserom.nds", 0xF80A0, 0x12F00 - - ; Used in autoload - .global SDK_AUTOLOAD_START - .global SDK_STATIC_BSS_START -SDK_AUTOLOAD_START: -SDK_STATIC_BSS_START: ; 0x02106FA0 -.incbin "baserom.nds", 0x10AFA0, 0x700 - - .global UNK_021076A0 -UNK_021076A0: -.incbin "baserom.nds", 0x10B6A0, 0x60 - - .global SDK_AUTOLOAD_LIST -SDK_AUTOLOAD_LIST: ; 0x02107700 - .word 0x01FF8000 - .word 0x00000700 - .word 0x00000000 - - .word 0x027e0000 - .word 0x00000060 - .word 0x00000020 - - .word 0x02400000 - .word 0x00000000 - .word 0x00000000 - - .global SDK_AUTOLOAD_LIST_END -SDK_AUTOLOAD_LIST_END: diff --git a/global.inc b/global.inc index 622c7c7f2..2e819946d 100644 --- a/global.inc +++ b/global.inc @@ -3302,3 +3302,17 @@ .extern SDK_STATIC_BSS_START .extern SDK_STATIC_BSS_END .extern OS_IrqHandler +.extern OS_IRQTable +.extern OSi_IrqThreadQueue +.extern OSi_ThreadInfo +.extern CP_SaveContext +.extern CP_RestoreContext +.extern OS_IrqDummy +.extern OSi_IrqDma0 +.extern OSi_IrqDma1 +.extern OSi_IrqDma2 +.extern OSi_IrqDma3 +.extern OSi_IrqTimer0 +.extern OSi_IrqTimer1 +.extern OSi_IrqTimer2 +.extern OSi_IrqTimer3 diff --git a/pokediamond.lcf b/pokediamond.lcf index 19b80331e..0f32038f2 100644 --- a/pokediamond.lcf +++ b/pokediamond.lcf @@ -1,8 +1,11 @@ /* TEST */ MEMORY { header (RWX) : ORIGIN=0, LENGTH=0 - arm9 (RWX) : ORIGIN=0x2000000, LENGTH=0 - unk_10b724 (RWX) : ORIGIN=0, LENGTH=0 + arm9.text (RWX) : ORIGIN=0x02000000, LENGTH=0 + arm9.data (RWX) : ORIGIN=0x020EC710, LENGTH=0 + arm9.itcm (RWX) : ORIGIN=0x01FF8000, LENGTH=0 + arm9.dtcm (RWX) : ORIGIN=0x027E0000, LENGTH=0 + arm9.autoload (RWX) : ORIGIN=0x02107700, LENGTH=0 arm9overlay (RWX) : ORIGIN=0, LENGTH=0 arm7 (RWX) : ORIGIN=0x2380000, LENGTH=0 filenametable (RWX) : ORIGIN=0, LENGTH=0 @@ -388,6 +391,7 @@ SECTIONS { scrcmd.o (.text) unk_02046030.o (.text) rom1.5.o (.text) + OS_arm9.o (.text) unk_020C9C0C.o (.text) PM_arm9.o (.text) RTC_arm9.o (.text) @@ -396,14 +400,29 @@ SECTIONS { CTRDG_arm9.o (.text) MATH_arm9.o (.text) STD_arm9.o (.text) + } > arm9.text + .arm9.data : AT (0xF0710) { rom2.o (.data) string_util.o (.data) rom2_2.o (.data) - } > arm9 + } > arm9.data - .unk_10b724 : AT (0x10B724) { + SDK_AUTOLOAD_START = .; + SDK_STATIC_BSS_START = .; + + .arm9.itcm : AT (0x10AFA0) { + OS_arm9.o (.itcm) + } > arm9.itcm + + .arm9.dtcm : AT (0x10B6A0) { + SDK_AUTOLOAD_DTCM_START = .; + OS_arm9.o (.dtcm) + } > arm9.dtcm + + .arm9.autoload : AT (0x10B700) { + SDK_AUTOLOAD_LIST.o (.data) unk_10b724.o (.text) - } > unk_10b724 + } > arm9.autoload .arm9overlay : AT (0x10B800) { arm9overlay.o (.text) diff --git a/undefined_syms.txt b/undefined_syms.txt index 9282ff4aa..f707c199d 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1,6 +1,5 @@ CONST_34 = 0x00000034; CONST_3F = 0x0000003F; -OS_IrqHandler = 0x01FF8000; FUN_01FF84A4 = 0x01FF84A4; FUN_01FF84E4 = 0x01FF84E4; FUN_01FF8544 = 0x01FF8544; @@ -734,6 +733,19 @@ FUN_02252534 = 0x02252534; FUN_02252538 = 0x02252538; FUN_022567E0 = 0x022567E0; SDK_AUTOLOAD_DTCM_START = 0x027E0000; +OSi_IrqThreadQueue = 0x027E0060; +OSi_ThreadInfo = 0x021D3498; +CP_SaveContext = 0x020D3648; +CP_RestoreContext = 0x020D3688; SDK_STATIC_BSS_END = 0x021D74E0; gUnk027FFC20 = 0x027FFC20; FUN_02000B60 = 0x02000B60; +OS_IrqDummy = 0x020c9da8; +OSi_IrqDma0 = 0x020c9cfc; +OSi_IrqDma1 = 0x020c9cec; +OSi_IrqDma2 = 0x020c9cdc; +OSi_IrqDma3 = 0x020c9ccc; +OSi_IrqTimer0 = 0x020c9cbc; +OSi_IrqTimer1 = 0x020c9cac; +OSi_IrqTimer2 = 0x020c9c9c; +OSi_IrqTimer3 = 0x020c9c8c; From 52626e9d3f36d0e778d4179f53a44e14b49e4a85 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 25 Apr 2020 10:58:27 -0400 Subject: [PATCH 15/23] Split SDK libs --- asm/CP_arm9.s | 42 + asm/DGT_arm9.s | 1017 ++++ asm/FS_arm9.s | 3011 ++++++++++ asm/MATH_arm9.s | 6 +- asm/MI_arm9.s | 1082 ++++ asm/OS_arm9.s | 4916 +++++++++++++++- asm/PXI_arm9.s | 266 + asm/SND_arm9.s | 1655 ++++++ asm/SPI_arm9.s | 1487 +++++ asm/arm9_itcm.s | 458 ++ asm/unk_020C9C0C.s | 13263 ------------------------------------------- global.inc | 27 +- pokediamond.lcf | 15 +- undefined_syms.txt | 15 +- 14 files changed, 13781 insertions(+), 13479 deletions(-) create mode 100644 asm/CP_arm9.s create mode 100644 asm/DGT_arm9.s create mode 100644 asm/FS_arm9.s create mode 100644 asm/MI_arm9.s create mode 100644 asm/PXI_arm9.s create mode 100644 asm/SND_arm9.s create mode 100644 asm/SPI_arm9.s create mode 100644 asm/arm9_itcm.s delete mode 100644 asm/unk_020C9C0C.s diff --git a/asm/CP_arm9.s b/asm/CP_arm9.s new file mode 100644 index 000000000..c756e8e24 --- /dev/null +++ b/asm/CP_arm9.s @@ -0,0 +1,42 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + + 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 diff --git a/asm/DGT_arm9.s b/asm/DGT_arm9.s new file mode 100644 index 000000000..e5a4dac3c --- /dev/null +++ b/asm/DGT_arm9.s @@ -0,0 +1,1017 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + 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 DGT_Hash1GetDigest_R +DGT_Hash1GetDigest_R: ; 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 DGT_Hash1SetSource + 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 DGT_Hash1SetSource +DGT_Hash1SetSource: ; 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 DGT_Hash1Reset +DGT_Hash1Reset: ; 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 DGTi_hash2_arm4_small +DGTi_hash2_arm4_small: ; 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} diff --git a/asm/FS_arm9.s b/asm/FS_arm9.s new file mode 100644 index 000000000..8fcbff7a1 --- /dev/null +++ b/asm/FS_arm9.s @@ -0,0 +1,3011 @@ + .include "asm/macros.inc + .include "global.inc" + .section .text + + 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 diff --git a/asm/MATH_arm9.s b/asm/MATH_arm9.s index 3b384077a..02dcfbcf3 100644 --- a/asm/MATH_arm9.s +++ b/asm/MATH_arm9.s @@ -54,15 +54,15 @@ MATH_CalcMD5: ; 0x020DDCE4 add r0, sp, #0x0 mov r5, r1 mov r4, r2 - bl MATH_MD5Init + bl DGT_Hash1Reset _020DDD00: ; 0x020DDD00 add r0, sp, #0x0 mov r1, r5 mov r2, r4 - bl MATH_MD5Update + bl DGT_Hash1SetSource add r1, sp, #0x0 mov r0, r6 - bl MATH_MD5GetHash + bl DGT_Hash1GetDigest_R add sp, sp, #0x58 ldmia sp!, {r4-r6,lr} bx lr diff --git a/asm/MI_arm9.s b/asm/MI_arm9.s new file mode 100644 index 000000000..82747b382 --- /dev/null +++ b/asm/MI_arm9.s @@ -0,0 +1,1082 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + + + 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 MIi_DmaSetParams + 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 MIi_DmaSetParams + 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 MIi_DmaSetParams_noInt + 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 MIi_DmaSetParams_noInt + 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 MIi_DmaSetParams_wait +_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 MIi_DmaSetParams_wait +_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 MIi_DmaSetParams_wait_noInt + 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 MIi_DmaSetParams + 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 MIi_DmaSetParams + 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 MIi_DmaSetParams + 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 MIi_DmaSetParams + 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 MIi_DmaSetParams + 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 MIi_DmaSetParams + 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 + diff --git a/asm/OS_arm9.s b/asm/OS_arm9.s index f7cbb69f3..5e10a429f 100644 --- a/asm/OS_arm9.s +++ b/asm/OS_arm9.s @@ -1,195 +1,10 @@ .include "asm/macros.inc" .include "global.inc" - .section .text - - .section .itcm - ; Used in autoload - arm_func_start OS_IrqHandler -OS_IrqHandler: - stmfd sp!, {lr} - mov ip, #0x04000000 - add ip, ip, #0x210 - ldr r1, [ip, #-8] - cmp r1, #0 - ldmeqfd sp!, {pc} - ldmia ip, {r1, r2} - ands r1, r1, r2 - ldmeqfd sp!, {pc} - mov r3, #0x80000000 -_02106FC8: - clz r0, r1 - bics r1, r1, r3, lsr r0 - bne _02106FC8 - mov r1, r3, lsr r0 - str r1, [ip, #0x4] - rsbs r0, r0, #0x1f - ldr r1, _02106FF0 ; =0x027E0000 - ldr r0, [r1, r0, lsl #2] - ldr lr, _02106FF4 ; =0x01FF8058 - bx r0 -_02106FF0: .word OS_IRQTable -_02106FF4: .word OS_IrqHandler_ThreadSwitch - - arm_func_start OS_IrqHandler_ThreadSwitch -OS_IrqHandler_ThreadSwitch: ; - ldr ip, _02107144 - mov r3, #0x0 - ldr ip, [ip] - mov r2, #0x1 - cmp ip, #0x0 - beq _02107048 -_02107010: - str r2, [ip, #0x64] - str r3, [ip, #0x78] - str r3, [ip, #0x7c] - ldr r0, [ip, #0x80] - str r3, [ip, #0x80] - mov ip, r0 - cmp ip, #0x0 - bne _02107010 - ldr ip, _02107144 - str r3, [ip] - str r3, [ip, #0x4] - ldr ip, _02107148 - mov r1, #0x1 - strh r1, [ip] -_02107048: - ldr ip, _02107148 - ldrh r1, [ip] - cmp r1, #0x0 - ldreq pc, [sp], #0x4 - mov r1, #0x0 - strh r1, [ip] - mov r3, #0xd2 - msr CPSR_c, r3 - add r2, ip, #0x8 - ldr r1, [r2] -_02107070: - cmp r1, #0x0 - ldrneh r0, [r1, #0x64] - cmpne r0, #0x1 - ldrne r1, [r1, #0x68] - bne _02107070 - cmp r1, #0x0 - bne _02107098 -_0210708C: - mov r3, #0x92 - msr CPSR_c, r3 - ldr pc, [sp], #0x4 -_02107098: - ldr r0, [ip, #0x4] - cmp r1, r0 - beq _0210708C - ldr r3, [ip, #0xC] - cmp r3, #0x0 - beq _021070C0 - stmdb sp!, {r0, r1, ip} - mov lr, pc - bx r3 - ldmia sp!, {r0, r1, ip} -_021070C0: - str r1, [ip, #0x4] - mrs r2, SPSR - str r2, [r0, #0x0]! - stmdb sp!, {r0, r1} - add r0, r0, #0x0 - add r0, r0, #0x48 - ldr r1, _0210714C - blx r1 - ldmia sp!, {r0, r1} - ldmib sp!, {r2, r3} - stmib r0!, {r2, r3} - ldmib sp!, {r2, r3, ip, lr} - stmib r0!, {r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^ - stmib r0!, {lr} - mov r3, #0xd3 - msr CPSR_c, r3 - stmib r0!, {sp} - stmfd sp!, {r1} - add r0, r1, #0x0 - add r0, r0, #0x48 - ldr r1, _02107150 - blx r1 - ldmfd sp!, {r1} - ldr sp, [r1, #0x44] - mov r3, #0xd2 - msr CPSR_c, r3 - ldr r2, [r1, #0x0]! - msr SPSR_fc, r2 - ldr lr, [r1, #0x40] - ldmib r1!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^ - nop - stmda sp!, {r0, r1, r2, r3, ip, lr} - ldmfd sp!, {pc} -_02107144: .word OSi_IrqThreadQueue -_02107148: .word OSi_ThreadInfo -_0210714C: .word CP_SaveContext -_02107150: .word CP_RestoreContext - - .section .itcm - arm_func_start OSi_DoBoot -OSi_DoBoot: ; 02107154 - mov ip, #0x04000000 - str ip, [ip, #0x208] - ldr r1, _02107200 - add r1, r1, #0x3fc0 - add r1, r1, #0x3c - mov r0, #0x0 - str r0, [r1] - ldr r1, _02107204 -_02107174: - ldrh r0, [r1] - and r0, r0, #0xf - cmp r0, #0x1 - bne _02107174 - mov r0, #0x100 - strh r0, [r1] - mov r0, #0x0 - ldr r3, _02107208 - ldr r4, [r3] - ldr r1, _0210720C - mov r2, #0x80 - bl OSi_CpuClear32 - str r4, [r3] - ldr r1, _02107210 - mov r2, #0x18 - bl OSi_CpuClear32 - ldr r1, _02107214 - strh r0, [r1] - ldr r1, _02107218 - mov r2, #0x64 - bl OSi_CpuClear32 - ldr r1, _02107204 -_021071CC: - ldrh r0, [r1] - and r0, r0, #0xf - cmp r0, #0x1 - beq _021071CC - mov r0, #0x0 - strh r0, [r1] - ldr r3, _0210721C - ldr ip, [r3, #0x24] - mov lr, ip - ldr fp, _02107210 - ldmia fp, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl} - mov fp, #0x0 - bx ip -_02107200: .word SDK_AUTOLOAD_DTCM_START -_02107204: .word 0x04000180 -_02107208: .word 0x027FFD9C -_0210720C: .word 0x027FFD80 -_02107210: .word 0x027FFF80 -_02107214: .word 0x027FFF98 -_02107218: .word 0x027FFF9C -_0210721C: .word 0x027FFE00 - - arm_func_start OSi_CpuClear32 -OSi_CpuClear32: - .incbin "baserom.nds", 0x10B220, 0x480 .section .dtcm + .balign 16, 0 .global OS_IRQTable -OS_IRQTable: ; 10b6a0 +OS_IRQTable: ; 027E0000 ;10b6a0 .word OS_IrqDummy ; 020c9da8 .word OS_IrqDummy ; 020c9da8 .word OS_IrqDummy ; 020c9da8 @@ -213,4 +28,4729 @@ OS_IRQTable: ; 10b6a0 .word OS_IrqDummy ; 020c9da8 .word OS_IrqDummy ; 020c9da8 .balign 16, 0 -OSi_IrqThreadQueue: +OSi_IrqThreadQueue: ; 027E0060 + + .section .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 ; =0x01FF7780 + 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 OSi_DoResetSystem + 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 diff --git a/asm/PXI_arm9.s b/asm/PXI_arm9.s new file mode 100644 index 000000000..ab3af5de4 --- /dev/null +++ b/asm/PXI_arm9.s @@ -0,0 +1,266 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + + 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 diff --git a/asm/SND_arm9.s b/asm/SND_arm9.s new file mode 100644 index 000000000..993517123 --- /dev/null +++ b/asm/SND_arm9.s @@ -0,0 +1,1655 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + + 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 diff --git a/asm/SPI_arm9.s b/asm/SPI_arm9.s new file mode 100644 index 000000000..915bb22c1 --- /dev/null +++ b/asm/SPI_arm9.s @@ -0,0 +1,1487 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + + 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 ; initial$7594 +_020D4140: .word 0x021D5474 ; tpState +_020D4144: .word TPi_TpCallback + + arm_func_start TPi_TpCallback +TPi_TpCallback: ; 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 diff --git a/asm/arm9_itcm.s b/asm/arm9_itcm.s new file mode 100644 index 000000000..494219a0b --- /dev/null +++ b/asm/arm9_itcm.s @@ -0,0 +1,458 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .itcm + + ; OS + arm_func_start OS_IrqHandler +OS_IrqHandler: ; 0x01FF8000 + stmfd sp!, {lr} + mov ip, #0x04000000 + add ip, ip, #0x210 + ldr r1, [ip, #-8] + cmp r1, #0 + ldmeqfd sp!, {pc} + ldmia ip, {r1, r2} + ands r1, r1, r2 + ldmeqfd sp!, {pc} + mov r3, #0x80000000 +_01FF8028: + clz r0, r1 + bics r1, r1, r3, lsr r0 + bne _01FF8028 + mov r1, r3, lsr r0 + str r1, [ip, #0x4] + rsbs r0, r0, #0x1f + ldr r1, _01FF8050 ; =0x027E0000 + ldr r0, [r1, r0, lsl #2] + ldr lr, _01FF8054 ; =0x01FF70B8 + bx r0 +_01FF8050: .word OS_IRQTable +_01FF8054: .word OS_IrqHandler_ThreadSwitch + + arm_func_start OS_IrqHandler_ThreadSwitch +OS_IrqHandler_ThreadSwitch: ; 01FF8058 + ldr ip, _01FF81A4 + mov r3, #0x0 + ldr ip, [ip] + mov r2, #0x1 + cmp ip, #0x0 + beq _01FF80A8 +_01FF8070: + str r2, [ip, #0x64] + str r3, [ip, #0x78] + str r3, [ip, #0x7c] + ldr r0, [ip, #0x80] + str r3, [ip, #0x80] + mov ip, r0 + cmp ip, #0x0 + bne _01FF8070 + ldr ip, _01FF81A4 + str r3, [ip] + str r3, [ip, #0x4] + ldr ip, _01FF81A8 + mov r1, #0x1 + strh r1, [ip] +_01FF80A8: + ldr ip, _01FF81A8 + ldrh r1, [ip] + cmp r1, #0x0 + ldreq pc, [sp], #0x4 + mov r1, #0x0 + strh r1, [ip] + mov r3, #0xd2 + msr CPSR_c, r3 + add r2, ip, #0x8 + ldr r1, [r2] +_01FF80D0: + cmp r1, #0x0 + ldrneh r0, [r1, #0x64] + cmpne r0, #0x1 + ldrne r1, [r1, #0x68] + bne _01FF80D0 + cmp r1, #0x0 + bne _01FF80F8 +_01FF80EC: + mov r3, #0x92 + msr CPSR_c, r3 + ldr pc, [sp], #0x4 +_01FF80F8: + ldr r0, [ip, #0x4] + cmp r1, r0 + beq _01FF80EC + ldr r3, [ip, #0xC] + cmp r3, #0x0 + beq _01FF8120 + stmdb sp!, {r0, r1, ip} + mov lr, pc + bx r3 + ldmia sp!, {r0, r1, ip} +_01FF8120: + str r1, [ip, #0x4] + mrs r2, SPSR + str r2, [r0, #0x0]! + stmdb sp!, {r0, r1} + add r0, r0, #0x0 + add r0, r0, #0x48 + ldr r1, _01FF81AC + blx r1 + ldmia sp!, {r0, r1} + ldmib sp!, {r2, r3} + stmib r0!, {r2, r3} + ldmib sp!, {r2, r3, ip, lr} + stmib r0!, {r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^ + stmib r0!, {lr} + mov r3, #0xd3 + msr CPSR_c, r3 + stmib r0!, {sp} + stmfd sp!, {r1} + add r0, r1, #0x0 + add r0, r0, #0x48 + ldr r1, _01FF81B0 + blx r1 + ldmfd sp!, {r1} + ldr sp, [r1, #0x44] + mov r3, #0xd2 + msr CPSR_c, r3 + ldr r2, [r1, #0x0]! + msr SPSR_fc, r2 + ldr lr, [r1, #0x40] + ldmib r1!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^ + nop + stmda sp!, {r0, r1, r2, r3, ip, lr} + ldmfd sp!, {pc} +_01FF81A4: .word OSi_IrqThreadQueue +_01FF81A8: .word OSi_ThreadInfo +_01FF81AC: .word CP_SaveContext +_01FF81B0: .word CP_RestoreContext + + .section .itcm + arm_func_start OSi_DoBoot +OSi_DoBoot: ; 0x01FF81B4 + mov ip, #0x04000000 + str ip, [ip, #0x208] + ldr r1, _01FF8260 + add r1, r1, #0x3fc0 + add r1, r1, #0x3c + mov r0, #0x0 + str r0, [r1] + ldr r1, _01FF8264 +_01FF81D4: + ldrh r0, [r1] + and r0, r0, #0xf + cmp r0, #0x1 + bne _01FF81D4 + mov r0, #0x100 + strh r0, [r1] + mov r0, #0x0 + ldr r3, _01FF8268 + ldr r4, [r3] + ldr r1, _01FF826C + mov r2, #0x80 + bl OSi_CpuClear32 + str r4, [r3] + ldr r1, _01FF8270 + mov r2, #0x18 + bl OSi_CpuClear32 + ldr r1, _01FF8274 + strh r0, [r1] + ldr r1, _01FF8278 + mov r2, #0x64 + bl OSi_CpuClear32 + ldr r1, _01FF8264 +_01FF822C: + ldrh r0, [r1] + and r0, r0, #0xf + cmp r0, #0x1 + beq _01FF822C + mov r0, #0x0 + strh r0, [r1] + ldr r3, _01FF827C + ldr ip, [r3, #0x24] + mov lr, ip + ldr fp, _01FF8270 + ldmia fp, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl} + mov fp, #0x0 + bx ip +_01FF8260: .word SDK_AUTOLOAD_DTCM_START +_01FF8264: .word 0x04000180 +_01FF8268: .word 0x027FFD9C +_01FF826C: .word 0x027FFD80 +_01FF8270: .word 0x027FFF80 +_01FF8274: .word 0x027FFF98 +_01FF8278: .word 0x027FFF9C +_01FF827C: .word 0x027FFE00 + + arm_func_start OSi_CpuClear32 +OSi_CpuClear32: ; 01FF8280 + add ip, r1, r2 +_01FF8284: + cmp r1, ip + stmltia r1!, {r0} + blt _01FF8284 + bx lr + + arm_func_start OSi_ReadCardRom32 +OSi_ReadCardRom32: ; 01FF8294 + stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + sub sp, sp, #4 + ldr r4, _01FF8390 + ldr r3, _01FF8394 + ldr r4, [r4] + and r3, r0, r3 + bic r4, r4, #117440512 ; 0x7000000 + orr sl, r4, #-1593835520 ; 0xa1000000 + rsb r9, r3, #0 + ldr r4, _01FF8398 +_01FF82BC: + ldr r3, [r4] + ands r3, r3, #-2147483648 ; 0x80000000 + bne _01FF82BC + ldr r3, _01FF839C + mov r4, #128 ; 0x80 + cmp r9, r2 + addge sp, sp, #4 + strb r4, [r3] + add r0, r0, r9 + ldmgeia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + bxge lr + ldr r3, _01FF83A0 + ldr ip, _01FF8398 + ldr r5, _01FF83A4 + ldr r4, _01FF83A8 + mov r7, r0, lsr #8 + mov r6, #183 ; 0xb7 + mov lr, #0 +_01FF8304: + strb r6, [r5] + mov r8, r0, lsr #24 + strb r8, [r4] + ldr r8, _01FF83AC + mov fp, r0, lsr #16 + strb fp, [r8] + ldr r8, _01FF83B0 + strb r7, [r8] + ldr r8, _01FF83B4 + strb r0, [r8] + ldr r8, _01FF83B8 + strb lr, [r8] + ldr r8, _01FF83BC + strb lr, [r8] + ldr r8, _01FF83C0 + strb lr, [r8] + str sl, [ip] +_01FF8348: + ldr r8, [ip] + ands fp, r8, #8388608 ; 0x800000 + beq _01FF836C + cmp r9, #0 + ldr fp, [r3] + blt _01FF8368 + cmp r9, r2 + strlt fp, [r1, r9] +_01FF8368: + add r9, r9, #4 +_01FF836C: + ands r8, r8, #-2147483648 ; 0x80000000 + bne _01FF8348 + cmp r9, r2 + add r7, r7, #2 + add r0, r0, #512 ; 0x200 + blt _01FF8304 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + bx lr +_01FF8390: .word 0x027FFE60 +_01FF8394: .word 0x000001FF +_01FF8398: .word 0x040001A4 +_01FF839C: .word 0x040001A1 +_01FF83A0: .word 0x04100010 +_01FF83A4: .word 0x040001A8 +_01FF83A8: .word 0x040001A9 +_01FF83AC: .word 0x040001AA +_01FF83B0: .word 0x040001AB +_01FF83B4: .word 0x040001AC +_01FF83B8: .word 0x040001AD +_01FF83BC: .word 0x040001AE +_01FF83C0: .word 0x040001AF + + arm_func_start OSi_ReloadRomData +OSi_ReloadRomData: ; 0x01FF83C4 + stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + sub sp, sp, #4 + ldr r0, _01FF8484 + ldr sl, [r0] + cmp sl, #32768 ; 0x8000 + bcc _01FF83EC + ldr r1, _01FF8488 + mov r0, sl + mov r2, #352 ; 0x160 + bl OSi_ReadCardRom32 +_01FF83EC: + ldr r5, _01FF848C + ldr r4, _01FF8490 + ldr r3, _01FF8494 + ldr r2, _01FF8498 + ldr r1, _01FF849C + ldr r9, [r5] + ldr r0, _01FF84A0 + ldr r8, [r4] + ldr r7, [r3] + ldr r6, [r2] + ldr r5, [r1] + ldr r4, [r0] + bl OS_DisableInterrupts ; 0x1e02b0 + mov fp, r0 + bl DC_StoreAll ; 0x1df064 + bl DC_InvalidateAll ; 0x1df058 + mov r0, fp + bl OS_RestoreInterrupts ; 0x1e02c4 + bl IC_InvalidateAll ; 0x1df12c + bl DC_WaitWriteBufferEmpty ; 0x1df120 + add r9, r9, sl + cmp r9, #32768 ; 0x8000 + rsbcc r0, r9, #32768 ; 0x8000 + addcc r8, r8, r0 + subcc r7, r7, r0 + movcc r9, #32768 ; 0x8000 + add r6, r6, sl + mov r0, r9 + mov r1, r8 + mov r2, r7 + bl OSi_ReadCardRom32 ; 0x10b234 + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl OSi_ReadCardRom32 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + bx lr +_01FF8484: .word 0x027FFC2C +_01FF8488: .word 0x027FFE00 +_01FF848C: .word 0x027FFE20 +_01FF8490: .word 0x027FFE28 +_01FF8494: .word 0x027FFE2C +_01FF8498: .word 0x027FFE30 +_01FF849C: .word 0x027FFE38 +_01FF84A0: .word 0x027FFE3C + + arm_func_start OSi_DoResetSystem +OSi_DoResetSystem: ; 0x01FF84A4 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r0, _01FF84DC +_01FF84B0: + ldrh r1, [r0] + cmp r1, #0 + beq _01FF84B0 + ldr r0, _01FF84E0 + mov r1, #0 + strh r1, [r0] + bl OSi_ReloadRomData + bl OSi_DoBoot + add sp, sp, #4 + ldmfd sp!, {lr} + bx lr +_01FF84DC: .word OSi_IsResetOccurred +_01FF84E0: .word 0x04000208 + + ; MI + arm_func_start MIi_DmaSetParams_wait_noInt +MIi_DmaSetParams_wait_noInt: ; 0x01FF84E4 + stmdb sp!, {r4, lr} + mov ip, #12 + mul r4, r0, ip + add ip, r4, #67108864 ; 0x4000000 + ldr lr, [pc, #64] ; 0x10b4dc + str r1, [ip, #176] ; 0xb0 + add r4, r4, lr + str r2, [r4, #4] + str r3, [r4, #8] + ldr r1, [lr] + cmp r0, #0 + ldr r0, [lr] + moveq r1, #0 + streq r1, [r4] + streq r1, [r4, #4] + ldreq r0, _01FF8540 + ldr r1, _01FF853C + streq r0, [r4, #8] + ldr r0, [r1] + ldr r0, [r1] + ldmia sp!, {r4, lr} + bx lr +_01FF853C: .word 0x040000B0 +_01FF8540: .word 0x81400001 + + arm_func_start MIi_DmaSetParams_noInt +MIi_DmaSetParams_noInt: ; 01FF8544 + stmfd sp!, {lr} + sub sp, sp, #4 + mov ip, #12 + mul lr, r0, ip + ldr r0, _01FF8578 + add ip, lr, #67108864 ; 0x4000000 + str r1, [ip, #176] ; 0xb0 + add r0, lr, r0 + str r2, [r0, #4] + str r3, [r0, #8] + add sp, sp, #4 + ldmfd sp!, {lr} + bx lr +_01FF8578: .word 0x040000B0 + + arm_func_start MIi_DmaSetParams_wait +MIi_DmaSetParams_wait: ; 01FF857C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl OS_DisableInterrupts + mov r1, #12 + mul r3, r7, r1 + add r1, r3, #67108864 ; 0x4000000 + ldr r2, _01FF85E8 + str r6, [r1, #176] ; 0xb0 + add r3, r3, r2 + str r5, [r3, #4] + str r4, [r3, #8] + ldr r1, [r2] + cmp r7, #0 + ldr r1, [r2] + moveq r2, #0 + streq r2, [r3] + ldreq r1, _01FF85EC + streq r2, [r3, #4] + streq r1, [r3, #8] + bl OS_RestoreInterrupts + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr +_01FF85E8: .word 0x040000B0 +_01FF85EC: .word 0x81400001 + + arm_func_start MIi_DmaSetParams +MIi_DmaSetParams: ; 01FF85F0 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl OS_DisableInterrupts + mov r1, #12 + mul r3, r7, r1 + ldr r1, _01FF863C + add r2, r3, #67108864 ; 0x4000000 + str r6, [r2, #176] ; 0xb0 + add r1, r3, r1 + str r5, [r1, #4] + str r4, [r1, #8] + bl OS_RestoreInterrupts + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr +_01FF863C: .word 0x040000B0 + + .incbin "baserom.nds", 0x10B5E0, 0xC0 diff --git a/asm/unk_020C9C0C.s b/asm/unk_020C9C0C.s deleted file mode 100644 index c6cdac463..000000000 --- a/asm/unk_020C9C0C.s +++ /dev/null @@ -1,13263 +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 - - 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 diff --git a/global.inc b/global.inc index 2e819946d..706dd6f41 100644 --- a/global.inc +++ b/global.inc @@ -922,11 +922,11 @@ .extern PMi_WaitBusy .extern CTRDG_IsExisting .extern PMi_SendSleepStart -.extern FUN_01FF857C -.extern FUN_01FF84E4 -.extern FUN_01FF85F0 -.extern FUN_01FF84A4 -.extern FUN_01FF8544 +.extern MIi_DmaSetParams_wait +.extern MIi_DmaSetParams_wait_noInt +.extern MIi_DmaSetParams +.extern OSi_DoResetSystem +.extern MIi_DmaSetParams_noInt .extern FUN_020010A8 .extern FUN_02001204 @@ -1030,7 +1030,7 @@ .extern OS_UnlockCartridge2 .extern OS_ExitThread .extern MATH_SHA1Init -.extern MATH_MD5Init +.extern DGT_Hash1Reset .extern __destroy_global_chain .extern OS_TryLockMutex .extern _ddiv @@ -1050,8 +1050,8 @@ .extern MI_DmaCopy32 .extern MATH_SHA1Update .extern MATH_SHA1GetHash -.extern MATH_MD5Update -.extern MATH_MD5GetHash +.extern DGT_Hash1SetSource +.extern DGT_Hash1GetDigest_R .extern OS_LockMutex .extern OS_UnlockMutex @@ -3316,3 +3316,14 @@ .extern OSi_IrqTimer1 .extern OSi_IrqTimer2 .extern OSi_IrqTimer3 +.extern OSi_EnterDmaCallback +.extern OS_IsRunOnEmulator +.extern OS_GetIrqFunction +.extern MI_Init +.extern MI_SwapWord +.extern OSi_IsResetOccurred +.extern DC_StoreAll +.extern DC_InvalidateAll +.extern IC_InvalidateAll +.extern MATH_CalcHMACSHA1 +.extern ProcessBlock diff --git a/pokediamond.lcf b/pokediamond.lcf index 0f32038f2..585344dc2 100644 --- a/pokediamond.lcf +++ b/pokediamond.lcf @@ -391,8 +391,15 @@ SECTIONS { scrcmd.o (.text) unk_02046030.o (.text) rom1.5.o (.text) + /* SDK */ OS_arm9.o (.text) - unk_020C9C0C.o (.text) + MI_arm9.o (.text) + SND_arm9.o (.text) + PXI_arm9.o (.text) + FS_arm9.o (.text) + DGT_arm9.o (.text) + CP_arm9.o (.text) + SPI_arm9.o (.text) PM_arm9.o (.text) RTC_arm9.o (.text) CARD_arm9.o (.text) @@ -401,6 +408,7 @@ SECTIONS { MATH_arm9.o (.text) STD_arm9.o (.text) } > arm9.text + .arm9.data : AT (0xF0710) { rom2.o (.data) string_util.o (.data) @@ -410,8 +418,9 @@ SECTIONS { SDK_AUTOLOAD_START = .; SDK_STATIC_BSS_START = .; - .arm9.itcm : AT (0x10AFA0) { - OS_arm9.o (.itcm) + .arm9.itcm : AT (0x10AFA0) + { + arm9_itcm.o (.itcm) } > arm9.itcm .arm9.dtcm : AT (0x10B6A0) { diff --git a/undefined_syms.txt b/undefined_syms.txt index f707c199d..478e3df6c 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1,10 +1,5 @@ CONST_34 = 0x00000034; CONST_3F = 0x0000003F; -FUN_01FF84A4 = 0x01FF84A4; -FUN_01FF84E4 = 0x01FF84E4; -FUN_01FF8544 = 0x01FF8544; -FUN_01FF857C = 0x01FF857C; -FUN_01FF85F0 = 0x01FF85F0; FUN_0208ACEC = 0x0208ACEC; FUN_0208AD80 = 0x0208AD80; FUN_0208AF80 = 0x0208AF80; @@ -294,6 +289,7 @@ gBacklightTop_2 = 0x02106FA0; gUnknown2106FB8 = 0x02106FB8; gUnknown21C48B8 = 0x021C48B8; gUnk021C4918 = 0x021C4918; +OSi_IsResetOccurred = 0x021D37E0; FUN_021D74E0 = 0x021D74E0; FUN_021D76AC = 0x021D76AC; gUnk021D76C8 = 0x021D76C8; @@ -740,12 +736,3 @@ CP_RestoreContext = 0x020D3688; SDK_STATIC_BSS_END = 0x021D74E0; gUnk027FFC20 = 0x027FFC20; FUN_02000B60 = 0x02000B60; -OS_IrqDummy = 0x020c9da8; -OSi_IrqDma0 = 0x020c9cfc; -OSi_IrqDma1 = 0x020c9cec; -OSi_IrqDma2 = 0x020c9cdc; -OSi_IrqDma3 = 0x020c9ccc; -OSi_IrqTimer0 = 0x020c9cbc; -OSi_IrqTimer1 = 0x020c9cac; -OSi_IrqTimer2 = 0x020c9c9c; -OSi_IrqTimer3 = 0x020c9c8c; From b3c28ef41247d1eb1663a2ff19937fca40c72f1b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 25 Apr 2020 11:41:41 -0400 Subject: [PATCH 16/23] Finish itcm dism --- asm/CARD_arm9.s | 2 +- asm/OS_arm9.s | 12 ++++++------ asm/arm9_itcm.s | 49 +++++++++++++++++++++++++++++++++++++++++++++- global.inc | 7 +++++++ pokediamond.lcf | 9 +++++++-- undefined_syms.txt | 4 ++++ 6 files changed, 73 insertions(+), 10 deletions(-) diff --git a/asm/CARD_arm9.s b/asm/CARD_arm9.s index 9756ce4bb..7222bfc43 100644 --- a/asm/CARD_arm9.s +++ b/asm/CARD_arm9.s @@ -1274,7 +1274,7 @@ _020D7738: ldmia sp!, {r4-r11,lr} bx lr .balign 4 -_020D7748: .word 0x021D55C0 +_020D7748: .word cardi_common _020D774C: .word 0x01FF8000 _020D7750: .word 0x000001FF _020D7754: .word 0x02106A50 diff --git a/asm/OS_arm9.s b/asm/OS_arm9.s index 5e10a429f..af2c75f14 100644 --- a/asm/OS_arm9.s +++ b/asm/OS_arm9.s @@ -3155,7 +3155,7 @@ _020CC38C: bx lr _020CC39C: add sp, sp, #0x4 - ldr r0, _020CC3F8 ; =0x01FF7780 + ldr r0, _020CC3F8 ; =0x01FF8720 ldmfd sp!, {lr} bx lr _020CC3AC: @@ -3178,11 +3178,11 @@ _020CC3DC: add sp, sp, #0x4 ldmia sp!, {lr} bx lr -_020CC3EC: .word 0x0225FFA0 -_020CC3F0: .word 0x021D36F4 -_020CC3F4: .word 0x023E0000 -_020CC3F8: .word 0x01FF8720 -_020CC3FC: .word 0x027E0080 +_020CC3EC: .word SDK_MAIN_ARENA_LO +_020CC3F0: .word OSi_MainExArenaEnabled +_020CC3F4: .word SDK_SECTION_ARENA_EX_START +_020CC3F8: .word SDK_SECTION_ARENA_ITCM_START +_020CC3FC: .word SDK_SECTION_ARENA_DTCM_START _020CC400: .word 0x027FF000 _020CC404: .word 0x037F8000 diff --git a/asm/arm9_itcm.s b/asm/arm9_itcm.s index 494219a0b..79c0de28d 100644 --- a/asm/arm9_itcm.s +++ b/asm/arm9_itcm.s @@ -455,4 +455,51 @@ MIi_DmaSetParams: ; 01FF85F0 bx lr _01FF863C: .word 0x040000B0 - .incbin "baserom.nds", 0x10B5E0, 0xC0 + arm_func_start MI_SendGXCommand +MI_SendGXCommand: ; 0x01FF8640 + stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + sub sp, sp, #4 + movs r8, r2 + mov sl, r0 + mov r9, r1 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + bxeq lr + mov r3, #0 + bl MIi_CheckDma0SourceAddress + mov r0, #3 + mul r1, sl, r0 + ldr r0, [pc, #104] ; 0x10b680 + add r1, r1, #2 + add r7, r0, r1, lsl #2 +_01FF867C: + ldr r0, [r7] + ands r0, r0, #-2147483648 ; 0x80000000 + bne _01FF867C + cmp r8, #0 + beq _01FF86C8 + ldr fp, [pc, #76] ; 0x10b684 + mov r5, #472 ; 0x1d8 + ldr r4, [pc, #72] ; 0x10b688 +_01FF869C: + cmp r8, #472 ; 0x1d8 + movhi r6, r5 + movls r6, r8 + mov r0, sl + mov r1, r9 + mov r2, fp + orr r3, r4, r6, lsr #2 + bl MIi_DmaSetParams + subs r8, r8, r6 + add r9, r9, r6 + bne _01FF869C +_01FF86C8: + ldr r0, [r7] + ands r0, r0, #-2147483648 ; 0x80000000 + bne _01FF86C8 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + bx lr +_01FF86E0: .word 0x040000B0 +_01FF86E4: .word 0x04000400 +_01FF86E8: .word 0x84400000 diff --git a/global.inc b/global.inc index 706dd6f41..800ff721e 100644 --- a/global.inc +++ b/global.inc @@ -3327,3 +3327,10 @@ .extern IC_InvalidateAll .extern MATH_CalcHMACSHA1 .extern ProcessBlock +.extern MIi_CheckDma0SourceAddress +.extern SDK_MAIN_ARENA_LO +.extern OSi_MainExArenaEnabled +.extern SDK_SECTION_ARENA_EX_START +.extern SDK_SECTION_ARENA_ITCM_START +.extern SDK_SECTION_ARENA_DTCM_START +.extern cardi_common diff --git a/pokediamond.lcf b/pokediamond.lcf index 585344dc2..028a36ffd 100644 --- a/pokediamond.lcf +++ b/pokediamond.lcf @@ -3,8 +3,8 @@ MEMORY { header (RWX) : ORIGIN=0, LENGTH=0 arm9.text (RWX) : ORIGIN=0x02000000, LENGTH=0 arm9.data (RWX) : ORIGIN=0x020EC710, LENGTH=0 - arm9.itcm (RWX) : ORIGIN=0x01FF8000, LENGTH=0 - arm9.dtcm (RWX) : ORIGIN=0x027E0000, LENGTH=0 + arm9.itcm (RWX) : ORIGIN=0x01FF8000, LENGTH=0x8000 + arm9.dtcm (RWX) : ORIGIN=0x027E0000, LENGTH=0x2000 arm9.autoload (RWX) : ORIGIN=0x02107700, LENGTH=0 arm9overlay (RWX) : ORIGIN=0, LENGTH=0 arm7 (RWX) : ORIGIN=0x2380000, LENGTH=0 @@ -420,12 +420,17 @@ SECTIONS { .arm9.itcm : AT (0x10AFA0) { + OS_arm9.o (.itcm) arm9_itcm.o (.itcm) + . = 0x01FF8720; + SDK_SECTION_ARENA_ITCM_START = .; } > arm9.itcm .arm9.dtcm : AT (0x10B6A0) { SDK_AUTOLOAD_DTCM_START = .; OS_arm9.o (.dtcm) + . = 0x027E0080; + SDK_SECTION_ARENA_DTCM_START = .; } > arm9.dtcm .arm9.autoload : AT (0x10B700) { diff --git a/undefined_syms.txt b/undefined_syms.txt index 478e3df6c..7ae2852d0 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -736,3 +736,7 @@ CP_RestoreContext = 0x020D3688; SDK_STATIC_BSS_END = 0x021D74E0; gUnk027FFC20 = 0x027FFC20; FUN_02000B60 = 0x02000B60; +cardi_common = 0x021D55C0; +OSi_MainExArenaEnabled = 0x021D36F4; +SDK_MAIN_ARENA_LO = 0x0225FFA0; +SDK_SECTION_ARENA_EX_START = 0x023E0000; From d4bff78959a147b523bd160b96f87dade04584a6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 25 Apr 2020 16:23:38 -0400 Subject: [PATCH 17/23] Fix directory name comments in filenametable.s --- data/filenametable.s | 104 +++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/data/filenametable.s b/data/filenametable.s index c5699171a..7ff82dc8c 100644 --- a/data/filenametable.s +++ b/data/filenametable.s @@ -272,31 +272,31 @@ FileNameTable: .byte 0x05, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /custom_ball + ; Directory: /application/custom_ball .byte 4 | 0x80 .ascii "data" .byte 0x03, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /application/data + ; Directory: /application/custom_ball/data .byte 12 .ascii "cb_data.narc" .byte 0 ; end - ; Directory: /wifi_earth + ; Directory: /application/wifi_earth .byte 15 .ascii "wifi_earth.narc" .byte 21 .ascii "wifi_earth_place.narc" .byte 0 ; end - ; Directory: /zukanlist + ; Directory: /application/zukanlist .byte 8 | 0x80 .ascii "zkn_data" .byte 0x06, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /application/zkn_data + ; Directory: /application/zukanlist/zkn_data .byte 15 .ascii "zukan_data.narc" .byte 22 @@ -335,14 +335,14 @@ FileNameTable: .byte 0x0C, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /b_tower + ; Directory: /battle/b_tower .byte 10 .ascii "btdpm.narc" .byte 10 .ascii "btdtr.narc" .byte 0 ; end - ; Directory: /graphic + ; Directory: /battle/graphic .byte 14 .ascii "b_bag_gra.narc" .byte 16 @@ -355,7 +355,7 @@ FileNameTable: .ascii "vs_demo_gra.narc" .byte 0 ; end - ; Directory: /skill + ; Directory: /battle/skill .byte 11 .ascii "be_seq.narc" .byte 12 @@ -364,7 +364,7 @@ FileNameTable: .ascii "waza_seq.narc" .byte 0 ; end - ; Directory: /tr_ai + ; Directory: /battle/tr_ai .byte 14 .ascii "tr_ai_seq.narc" .byte 0 ; end @@ -378,12 +378,12 @@ FileNameTable: .byte 0x0F, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /data + ; Directory: /contest/data .byte 17 .ascii "contest_data.narc" .byte 0 ; end - ; Directory: /graphic + ; Directory: /contest/graphic .byte 15 .ascii "contest_bg.narc" .byte 16 @@ -661,14 +661,14 @@ FileNameTable: .byte 0x12, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /mmodel + ; Directory: /data/mmodel .byte 11 .ascii "fldeff.narc" .byte 11 .ascii "mmodel.narc" .byte 0 ; end - ; Directory: /sound + ; Directory: /data/sound .byte 15 .ascii "sound_data.sdat" .byte 0 ; end @@ -691,13 +691,13 @@ FileNameTable: .byte 0x1C, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /egg + ; Directory: /demo/egg .byte 4 | 0x80 .ascii "data" .byte 0x15, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /demo/data + ; Directory: /demo/egg/data .byte 13 .ascii "egg_data.narc" .byte 8 | 0x80 @@ -705,41 +705,41 @@ FileNameTable: .byte 0x16, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /egg/particle + ; Directory: /demo/egg/data/particle .byte 22 .ascii "egg_demo_particle.narc" .byte 0 ; end - ; Directory: /intro + ; Directory: /demo/intro .byte 10 .ascii "intro.narc" .byte 13 .ascii "intro_tv.narc" .byte 0 ; end - ; Directory: /shinka + ; Directory: /demo/shinka .byte 4 | 0x80 .ascii "data" .byte 0x19, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /demo/data + ; Directory: /demo/shinka/data .byte 8 | 0x80 .ascii "particle" .byte 0x1A, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /shinka/particle + ; Directory: /demo/shinka/data/particle .byte 25 .ascii "shinka_demo_particle.narc" .byte 0 ; end - ; Directory: /syoujyou + ; Directory: /demo/syoujyou .byte 13 .ascii "syoujyou.narc" .byte 0 ; end - ; Directory: /title + ; Directory: /demo/title .byte 12 .ascii "op_demo.narc" .byte 14 @@ -784,7 +784,7 @@ FileNameTable: .byte 0x2B, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /areadata + ; Directory: /fielddata/areadata .byte 14 .ascii "area_data.narc" .byte 16 | 0x80 @@ -798,68 +798,68 @@ FileNameTable: .byte 0x22, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /fielddata/area_build_model + ; Directory: /fielddata/areadata/area_build_model .byte 15 .ascii "area_build.narc" .byte 18 .ascii "areabm_texset.narc" .byte 0 ; end - ; Directory: /fielddata/area_map_tex + ; Directory: /fielddata/areadata/area_map_tex .byte 16 .ascii "map_tex_set.narc" .byte 0 ; end - ; Directory: /fielddata/area_move_model + ; Directory: /fielddata/areadata/area_move_model .byte 20 .ascii "move_model_list.narc" .byte 0 ; end - ; Directory: /build_model + ; Directory: /fielddata/build_model .byte 16 .ascii "build_model.narc" .byte 22 .ascii "build_model_matshp.dat" .byte 0 ; end - ; Directory: /encountdata + ; Directory: /fielddata/encountdata .byte 15 .ascii "d_enc_data.narc" .byte 15 .ascii "p_enc_data.narc" .byte 0 ; end - ; Directory: /eventdata + ; Directory: /fielddata/eventdata .byte 23 .ascii "zone_event_release.narc" .byte 0 ; end - ; Directory: /land_data + ; Directory: /fielddata/land_data .byte 22 .ascii "land_data_release.narc" .byte 0 ; end - ; Directory: /mapmatrix + ; Directory: /fielddata/mapmatrix .byte 15 .ascii "map_matrix.narc" .byte 0 ; end - ; Directory: /maptable + ; Directory: /fielddata/maptable .byte 11 .ascii "mapname.bin" .byte 0 ; end - ; Directory: /mm_list + ; Directory: /fielddata/mm_list .byte 20 .ascii "move_model_list.narc" .byte 0 ; end - ; Directory: /pokemon_trade + ; Directory: /fielddata/pokemon_trade .byte 14 .ascii "fld_trade.narc" .byte 0 ; end - ; Directory: /script + ; Directory: /fielddata/script .byte 20 .ascii "scr_seq_release.narc" .byte 0 ; end @@ -957,7 +957,7 @@ FileNameTable: .byte 0x2E, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /itemdata + ; Directory: /itemtool/itemdata .byte 14 .ascii "item_data.narc" .byte 14 @@ -974,7 +974,7 @@ FileNameTable: .byte 0x30, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /scenario + ; Directory: /msgdata/scenario .byte 12 .ascii "scr_msg.narc" .byte 0 ; end @@ -1023,12 +1023,12 @@ FileNameTable: .byte 0x3C, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /icongra + ; Directory: /poketool/icongra .byte 14 .ascii "poke_icon.narc" .byte 0 ; end - ; Directory: /personal + ; Directory: /poketool/personal .byte 8 .ascii "evo.narc" .byte 12 @@ -1041,17 +1041,17 @@ FileNameTable: .ascii "wotbl.narc" .byte 0 ; end - ; Directory: /pokeanm + ; Directory: /poketool/pokeanm .byte 12 .ascii "pokeanm.narc" .byte 0 ; end - ; Directory: /pokefoot + ; Directory: /poketool/pokefoot .byte 13 .ascii "pokefoot.narc" .byte 0 ; end - ; Directory: /pokegra + ; Directory: /poketool/pokegra .byte 11 .ascii "height.narc" .byte 13 @@ -1068,28 +1068,28 @@ FileNameTable: .ascii "pokegra.narc" .byte 0 ; end - ; Directory: /trainer + ; Directory: /poketool/trainer .byte 11 .ascii "trdata.narc" .byte 11 .ascii "trpoke.narc" .byte 0 ; end - ; Directory: /trgra + ; Directory: /poketool/trgra .byte 11 .ascii "trbgra.narc" .byte 11 .ascii "trfgra.narc" .byte 0 ; end - ; Directory: /trmsg + ; Directory: /poketool/trmsg .byte 10 .ascii "trtbl.narc" .byte 13 .ascii "trtblofs.narc" .byte 0 ; end - ; Directory: /waza + ; Directory: /poketool/waza .byte 13 .ascii "waza_tbl.narc" .byte 0 ; end @@ -1100,7 +1100,7 @@ FileNameTable: .byte 0x3E, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /eng + ; Directory: /resource/eng .byte 5 | 0x80 .ascii "trial" .byte 0x3F, 0xF0 ; dir ID @@ -1109,12 +1109,12 @@ FileNameTable: .byte 0x40, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /resource/trial + ; Directory: /resource/eng/trial .byte 10 .ascii "trial.narc" .byte 0 ; end - ; Directory: /resource/zukan + ; Directory: /resource/eng/zukan .byte 10 .ascii "zukan.narc" .byte 0 ; end @@ -1135,7 +1135,7 @@ FileNameTable: .byte 0x44, 0xF0 ; dir ID .byte 0 ; end - ; Directory: /effectclact + ; Directory: /wazaeffect/effectclact .byte 11 .ascii "wecell.narc" .byte 14 @@ -1146,14 +1146,14 @@ FileNameTable: .ascii "wepltt.narc" .byte 0 ; end - ; Directory: /effectdata + ; Directory: /wazaeffect/effectdata .byte 18 .ascii "ball_particle.narc" .byte 18 .ascii "waza_particle.narc" .byte 0 ; end - ; Directory: /pt_debug + ; Directory: /wazaeffect/pt_debug .byte 19 .ascii "debug_particle.narc" .byte 0 ; end From 119eb75dbf1b7d053290339846ae709732803ca9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 25 Apr 2020 17:59:15 -0400 Subject: [PATCH 18/23] Update undefined_syms.txt and global.inc --- asm/CARD_arm9.s | 6 +++--- asm/OS_arm9.s | 2 ++ asm/unk_0208AC14.s | 10 +++++----- global.inc | 2 +- pokediamond.lcf | 2 +- undefined_syms.txt | 25 ++++++++++++++----------- 6 files changed, 26 insertions(+), 21 deletions(-) diff --git a/asm/CARD_arm9.s b/asm/CARD_arm9.s index 7222bfc43..08129ab5c 100644 --- a/asm/CARD_arm9.s +++ b/asm/CARD_arm9.s @@ -565,7 +565,7 @@ CARD_IdentifyBackup: ; 0x020D6DC4 mov r5, r0 ldr r0, _020D6F00 ; =0x02000C3C ldr r7, _020D6F04 ; =0x021D55C0 - bl FUN_02000B60 + bl OSi_ReferSymbol _020D6DDC: ; 0x020D6DDC cmp r5, #0x0 bne _020D6DE8 @@ -670,7 +670,7 @@ CARDi_RequestStreamCommand: ; 0x020D6F20 mov r9, r1 mov r8, r2 mov r7, r3 - bl FUN_02000B60 + bl OSi_ReferSymbol bl OS_DisableInterrupts ldr r1, [r6, #0x114] mov r5, r0 @@ -740,7 +740,7 @@ CARDi_RequestStreamCommandCore: ldr r7, [r9, #0x34] ldr r10, [r9, #0x30] mov r6, #0x100 - bl FUN_02000B60 + bl OSi_ReferSymbol cmp r8, #0xb bne _020D7048 bl CARD_GetBackupSectorSize diff --git a/asm/OS_arm9.s b/asm/OS_arm9.s index af2c75f14..5a013ac11 100644 --- a/asm/OS_arm9.s +++ b/asm/OS_arm9.s @@ -28,6 +28,8 @@ OS_IRQTable: ; 027E0000 ;10b6a0 .word OS_IrqDummy ; 020c9da8 .word OS_IrqDummy ; 020c9da8 .balign 16, 0 + + .global OSi_IrqThreadQueue OSi_IrqThreadQueue: ; 027E0060 .section .text diff --git a/asm/unk_0208AC14.s b/asm/unk_0208AC14.s index 9650ea9d7..59d1fcb9a 100644 --- a/asm/unk_0208AC14.s +++ b/asm/unk_0208AC14.s @@ -13544,7 +13544,7 @@ FUN_02096B14: ; 0x02096B14 mov r6, r0 ldr r0, _02096B74 ; =0x02000B8C mov r4, #0x0 - bl FUN_02000B60 + bl OSi_ReferSymbol mov r0, r6 bl FUN_02096190 mov r5, r0 @@ -14607,7 +14607,7 @@ FUN_02097834: ; 0x02097834 stmdb sp!, {r4,lr} mov r4, r0 ldr r0, _02097870 ; =0x02000BC4 - bl FUN_02000B60 + bl OSi_ReferSymbol ldr r0, _02097874 ; =0x021C8CC0 ldr r1, [r0, #0x0] cmp r1, #0x0 @@ -24479,7 +24479,7 @@ FUN_0209FD94: ; 0x0209FD94 sub sp, sp, #0x8 mov r4, r0 ldr r0, _0209FFD4 ; =0x02000BEC - bl FUN_02000B60 + bl OSi_ReferSymbol ldr r12, [r4, #0x14] ldr r6, [r4, #0x18] mov r1, #0x0 @@ -24861,7 +24861,7 @@ FUN_020A02EC: stmdb sp!, {r4,lr} mov r4, r0 ldr r0, _020A0318 ; =0x02000C04 - bl FUN_02000B60 + bl OSi_ReferSymbol ldr r0, _020A031C ; =0x021D3498 ldr r0, [r0, #0x4] ldr r0, [r0, #0xa4] @@ -40632,7 +40632,7 @@ FUN_020AD93C: ; 0x020AD93C stmdb sp!, {r4,lr} mov r4, r0 ldr r0, _020ADA78 ; =0x02000C1C - bl FUN_02000B60 + bl OSi_ReferSymbol _020AD94C: ; 0x020AD94C cmp r4, #0x0 moveq r0, #0x0 diff --git a/global.inc b/global.inc index f337679f7..1e8e2db76 100644 --- a/global.inc +++ b/global.inc @@ -53,7 +53,7 @@ .extern FUN_0200019E .extern FUN_020002FE .extern FUN_020005F2 -.extern FUN_02000B60 +.extern OSi_ReferSymbol .extern FUN_02000DF4 .extern FUN_02000E7C .extern FUN_02000EE8 diff --git a/pokediamond.lcf b/pokediamond.lcf index 6581649a0..da357c97a 100644 --- a/pokediamond.lcf +++ b/pokediamond.lcf @@ -419,10 +419,10 @@ SECTIONS { SDK_AUTOLOAD_START = .; SDK_STATIC_BSS_START = .; + SDK_STATIC_BSS_END = . + 0xd0540; .arm9.itcm : AT (0x10AFA0) { - OS_arm9.o (.itcm) arm9_itcm.o (.itcm) . = 0x01FF8720; SDK_SECTION_ARENA_ITCM_START = .; diff --git a/undefined_syms.txt b/undefined_syms.txt index e3ad952bb..46a62ad18 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1,12 +1,18 @@ CONST_34 = 0x00000034; CONST_3F = 0x0000003F; -FUN_02000B60 = 0x02000B60; + +// .bss gBacklightTop = 0x02106FA0; gBacklightTop_2 = 0x02106FA0; gUnknown2106FB8 = 0x02106FB8; gUnknown21C48B8 = 0x021C48B8; gUnk021C4918 = 0x021C4918; +OSi_ThreadInfo = 0x021D3498; +OSi_MainExArenaEnabled = 0x021D36F4; OSi_IsResetOccurred = 0x021D37E0; +cardi_common = 0x021D55C0; + +// Overlay FUN_021D74E0 = 0x021D74E0; FUN_021D76AC = 0x021D76AC; gUnk021D76C8 = 0x021D76C8; @@ -447,15 +453,12 @@ FUN_0224F12C = 0x0224F12C; FUN_02252534 = 0x02252534; FUN_02252538 = 0x02252538; FUN_022567E0 = 0x022567E0; -SDK_AUTOLOAD_DTCM_START = 0x027E0000; -OSi_IrqThreadQueue = 0x027E0060; -OSi_ThreadInfo = 0x021D3498; -CP_SaveContext = 0x020D3648; -CP_RestoreContext = 0x020D3688; -SDK_STATIC_BSS_END = 0x021D74E0; -gUnk027FFC20 = 0x027FFC20; -FUN_02000B60 = 0x02000B60; -cardi_common = 0x021D55C0; -OSi_MainExArenaEnabled = 0x021D36F4; + +// ??? SDK_MAIN_ARENA_LO = 0x0225FFA0; + +// EWRAM SDK_SECTION_ARENA_EX_START = 0x023E0000; + +// DTCM +gUnk027FFC20 = 0x027FFC20; From 143e670e14d18a56f3465ebf1ee3d22a985da25a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 25 Apr 2020 19:52:41 -0400 Subject: [PATCH 19/23] Port libos ram symbol names --- asm/CARD_arm9.s | 2 +- asm/CTRDG_arm9.s | 6 +- asm/DGT_arm9.s | 12 +- asm/OS_arm9.s | 421 +++++++++++++++++++++++---------------------- asm/arm7_rom.s | 44 ++--- asm/crt0.s | 1 - asm/secure.s | 4 +- asm/unk_0208AC14.s | 8 +- global.inc | 39 ++++- undefined_syms.txt | 42 +++++ 10 files changed, 329 insertions(+), 250 deletions(-) diff --git a/asm/CARD_arm9.s b/asm/CARD_arm9.s index 08129ab5c..664e85f55 100644 --- a/asm/CARD_arm9.s +++ b/asm/CARD_arm9.s @@ -1635,7 +1635,7 @@ _020D7BEC: ; 0x020D7BEC mov r4, #0x0 _020D7C04: mov r0, r6 - blx FUN_020005F2 + blx SVC_WaitByLoop mov r0, r5 mov r1, r7 mov r2, r4 diff --git a/asm/CTRDG_arm9.s b/asm/CTRDG_arm9.s index 025923883..301ea2339 100644 --- a/asm/CTRDG_arm9.s +++ b/asm/CTRDG_arm9.s @@ -333,7 +333,7 @@ _020DB520: ; 0x020DB520 mov r4, #0x0 _020DB53C: mov r0, r6 - blx FUN_020005F2 + blx SVC_WaitByLoop mov r0, r5 mov r1, r7 mov r2, r4 @@ -389,7 +389,7 @@ _020DB5DC: ; 0x020DB5DC ldr r0, [r6, #0x4] bl OS_RestoreInterrupts mov r0, r4 - blx FUN_020005F2 + blx SVC_WaitByLoop b _020DB5A8 _020DB600: ; 0x020DB600 add sp, sp, #0x4 @@ -872,7 +872,7 @@ _020DBBDC: mov r7, #0x1 _020DBC1C: mov r0, r7 - blx FUN_020005F2 + blx SVC_WaitByLoop ldrh r0, [r5, #0x0] cmp r0, #0x1 bne _020DBC1C diff --git a/asm/DGT_arm9.s b/asm/DGT_arm9.s index e5a4dac3c..d5ef358db 100644 --- a/asm/DGT_arm9.s +++ b/asm/DGT_arm9.s @@ -258,8 +258,8 @@ _020D2A60: ldmia sp!, {r4-r11,lr} bx lr .balign 4 -_020D2B78: .word 0x02106900 -_020D2B7C: .word 0x02106840 +_020D2B78: .word Unk_02106900 ; = 0x02106900 +_020D2B7C: .word Unk_02106840 ; = 0x02106840 arm_func_start DGT_Hash1GetDigest_R DGT_Hash1GetDigest_R: ; 0x020D2B80 @@ -314,7 +314,7 @@ _020D2C04: ldmia sp!, {r4-r7,lr} bx lr .balign 4 -_020D2C40: .word 0x0210683C +_020D2C40: .word Unk_0210683C ; = 0x0210683C arm_func_start DGT_Hash1SetSource DGT_Hash1SetSource: ; 0x020D2C44 @@ -440,7 +440,7 @@ MATH_CalcHMACSHA1: ; 0x020D2D78 ldmia sp!, {r4-r8,lr} bx lr .balign 4 -_020D2E00: .word 0x02106A04 +_020D2E00: .word Unk_02106A04 ; = 0x02106A04 _020D2E04: .word MATH_SHA1Init _020D2E08: .word MATH_SHA1Update _020D2E0C: .word MATH_SHA1GetHash @@ -581,7 +581,7 @@ _020D2ED0: add sp, sp, #0x10 bx lr .balign 4 -_020D3008: .word 0x02106A00 +_020D3008: .word Unk_02106A00 ; = 0x02106A00 arm_func_start MATH_SHA1Update MATH_SHA1Update: ; 0x020D300C @@ -676,7 +676,7 @@ _020D313C: ldmia sp!, {r4-r8,lr} bx lr .balign 4 -_020D3164: .word 0x02106A00 +_020D3164: .word Unk_02106A00 ; = 0x02106A00 arm_func_start MATH_SHA1Init MATH_SHA1Init: ; 0x020D3168 diff --git a/asm/OS_arm9.s b/asm/OS_arm9.s index 5a013ac11..1323e376d 100644 --- a/asm/OS_arm9.s +++ b/asm/OS_arm9.s @@ -1,32 +1,33 @@ .include "asm/macros.inc" .include "global.inc" + .extern isInitialized .section .dtcm .balign 16, 0 .global OS_IRQTable OS_IRQTable: ; 027E0000 ;10b6a0 - .word OS_IrqDummy ; 020c9da8 - .word OS_IrqDummy ; 020c9da8 - .word OS_IrqDummy ; 020c9da8 - .word OSi_IrqTimer0 ; 020c9cbc - .word OSi_IrqTimer1 ; 020c9cac - .word OSi_IrqTimer2 ; 020c9c9c - .word OSi_IrqTimer3 ; 020c9c8c - .word OS_IrqDummy ; 020c9da8 - .word OSi_IrqDma0 ; 020c9cfc - .word OSi_IrqDma1 ; 020c9cec - .word OSi_IrqDma2 ; 020c9cdc - .word OSi_IrqDma3 ; 020c9ccc - .word OS_IrqDummy ; 020c9da8 - .word OS_IrqDummy ; 020c9da8 - .word OS_IrqDummy ; 020c9da8 - .word OS_IrqDummy ; 020c9da8 - .word OS_IrqDummy ; 020c9da8 - .word OS_IrqDummy ; 020c9da8 - .word OS_IrqDummy ; 020c9da8 - .word OS_IrqDummy ; 020c9da8 - .word OS_IrqDummy ; 020c9da8 - .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OSi_IrqTimer0 + .word OSi_IrqTimer1 + .word OSi_IrqTimer2 + .word OSi_IrqTimer3 + .word OS_IrqDummy + .word OSi_IrqDma0 + .word OSi_IrqDma1 + .word OSi_IrqDma2 + .word OSi_IrqDma3 + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy .balign 16, 0 .global OSi_IrqThreadQueue @@ -142,7 +143,7 @@ OSi_IrqCallback: ; 0x020C9D0C sub sp, sp, #0x4 mov r1, #0xc mul r4, r0, r1 - ldr r2, _020C9D94 ; =0x021D341C + ldr r2, _020C9D94 ; =OSi_IrqCallbackInfo ldr r3, _020C9D98 ; =0x02106818 mov r0, r0, lsl #0x1 ldr r1, [r2, r4] @@ -174,11 +175,11 @@ _020C9D54: ldmia sp!, {r4-r5,lr} bx lr .balign 4 -_020C9D94: .word 0x021D341C -_020C9D98: .word 0x02106818 -_020C9D9C: .word 0x021D3424 -_020C9DA0: .word 0x027E0000 -_020C9DA4: .word 0x021D3420 +_020C9D94: .word OSi_IrqCallbackInfo +_020C9D98: .word OSi_IrqCallbackInfoIndex +_020C9D9C: .word OSi_IrqCallbackInfo + 8 +_020C9DA0: .word SDK_AUTOLOAD_DTCM_START +_020C9DA4: .word OSi_IrqCallbackInfo + 4 arm_func_start OS_IrqDummy OS_IrqDummy: ; 0x020C9DA8 @@ -294,16 +295,16 @@ OSi_EnterTimerCallback: ; 0x020C9EC8 ldmia sp!, {r4,lr} bx lr .balign 4 -_020C9F08: .word 0x021D344C -_020C9F0C: .word 0x021D3454 -_020C9F10: .word 0x021D3450 +_020C9F08: .word OSi_IrqCallbackInfo+0x30 +_020C9F0C: .word OSi_IrqCallbackInfo+0x38 +_020C9F10: .word OSi_IrqCallbackInfo+0x34 arm_func_start OSi_EnterDmaCallback OSi_EnterDmaCallback: ; 0x020C9F14 stmdb sp!, {r4-r6,lr} mov r3, #0xc mul r6, r0, r3 - ldr ip, _020C9F54 ; =0x021D341C + ldr ip, _020C9F54 ; =OSi_IrqCallbackInfo add r4, r0, #0x8 mov r5, #0x1 mov r0, r5, lsl r4 @@ -317,9 +318,9 @@ OSi_EnterDmaCallback: ; 0x020C9F14 ldmia sp!, {r4-r6,lr} bx lr .balign 4 -_020C9F54: .word 0x021D341C -_020C9F58: .word 0x021D3424 -_020C9F5C: .word 0x021D3420 +_020C9F54: .word OSi_IrqCallbackInfo +_020C9F58: .word OSi_IrqCallbackInfo + 8 +_020C9F5C: .word OSi_IrqCallbackInfo + 4 arm_func_start OS_GetIrqFunction OS_GetIrqFunction: ; 0x020C9F60 @@ -335,7 +336,7 @@ _020C9F68: sub r1, r3, #0x8 mov r0, #0xc mul r2, r1, r0 - ldr r0, _020C9FE8 ; =0x021D341C + ldr r0, _020C9FE8 ; =OSi_IrqCallbackInfo ldr r0, [r0, r2] bx lr _020C9F98: @@ -346,7 +347,7 @@ _020C9F98: add r1, r3, #0x1 mov r0, #0xc mul r2, r1, r0 - ldr r0, _020C9FE8 ; =0x021D341C + ldr r0, _020C9FE8 ; =OSi_IrqCallbackInfo ldr r0, [r0, r2] bx lr _020C9FC0: @@ -362,14 +363,14 @@ _020C9FC8: bx lr .balign 4 _020C9FE4: .word 0x027E0000 -_020C9FE8: .word 0x021D341C +_020C9FE8: .word OSi_IrqCallbackInfo arm_func_start OS_SetIrqFunction OS_SetIrqFunction: ; 0x020C9FEC stmdb sp!, {r4-r8,lr} mov r8, #0x0 ldr lr, _020CA074 ; =0x027E0000 - ldr r5, _020CA078 ; =0x021D341C + ldr r5, _020CA078 ; =OSi_IrqCallbackInfo mov r6, r8 mov r12, r8 mov r3, #0x1 @@ -407,7 +408,7 @@ _020CA05C: bx lr .balign 4 _020CA074: .word 0x027E0000 -_020CA078: .word 0x021D341C +_020CA078: .word OSi_IrqCallbackInfo arm_func_start OS_InitIrqTable OS_InitIrqTable: ; 0x020CA07C @@ -687,7 +688,7 @@ FUN_020CA358: ; 0x020CA358 mov r4, #0x400 _020CA380: mov r0, r4 - blx FUN_020005F2 + blx SVC_WaitByLoop mov r0, r8 mov r1, r7 mov r2, r6 @@ -702,7 +703,7 @@ _020CA380: OS_InitLock: ; 0x020CA3AC stmdb sp!, {r4-r5,lr} sub sp, sp, #0x4 - ldr r0, _020CA484 ; =0x021D347C + ldr r0, _020CA484 ; =isInitialized ldr r1, [r0, #0x0] cmp r1, #0x0 addne sp, sp, #0x4 @@ -722,7 +723,7 @@ OS_InitLock: ; 0x020CA3AC mov r4, #0x400 _020CA3FC: mov r0, r4 - blx FUN_020005F2 + blx SVC_WaitByLoop ldrh r0, [r5, #0x6] cmp r0, #0x0 bne _020CA3FC @@ -757,7 +758,7 @@ _020CA410: ldmia sp!, {r4-r5,lr} bx lr .balign 4 -_020CA484: .word 0x021D347C +_020CA484: .word isInitialized _020CA488: .word 0x027FFFF0 _020CA48C: .word 0x027FFFB0 _020CA490: .word 0x027FFFB4 @@ -1517,13 +1518,13 @@ string_put_char: str r1, [r0, #0x4] bx lr - arm_func_start FUN_020CAED0 -FUN_020CAED0: ; 0x020CAED0 - ldr r0, _020CAEDC ; =0x021D3494 + arm_func_start OS_IsThreadAvailable +OS_IsThreadAvailable: ; 0x020CAED0 + ldr r0, _020CAEDC ; =OSi_IsThreadInitialized ldr r0, [r0, #0x0] bx lr .balign 4 -_020CAEDC: .word 0x021D3494 +_020CAEDC: .word OSi_IsThreadInitialized arm_func_start OS_SetThreadDestructor OS_SetThreadDestructor: @@ -1534,7 +1535,7 @@ OS_SetThreadDestructor: OS_EnableScheduler: ; 0x020CAEE8 stmdb sp!, {r4,lr} bl OS_DisableInterrupts - ldr r1, _020CAF1C ; =0x021D3484 + ldr r1, _020CAF1C ; =OSi_RescheduleCount mov r4, #0x0 ldr r3, [r1, #0x0] cmp r3, #0x0 @@ -1546,13 +1547,13 @@ OS_EnableScheduler: ; 0x020CAEE8 ldmia sp!, {r4,lr} bx lr .balign 4 -_020CAF1C: .word 0x021D3484 +_020CAF1C: .word OSi_RescheduleCount arm_func_start OS_DisableScheduler OS_DisableScheduler: ; 0x020CAF20 stmdb sp!, {r4,lr} bl OS_DisableInterrupts - ldr r2, _020CAF54 ; =0x021D3484 + ldr r2, _020CAF54 ; =OSi_RescheduleCount mvn r1, #0x0 ldr r3, [r2, #0x0] cmp r3, r1 @@ -1564,7 +1565,7 @@ OS_DisableScheduler: ; 0x020CAF20 ldmia sp!, {r4,lr} bx lr .balign 4 -_020CAF54: .word 0x021D3484 +_020CAF54: .word OSi_RescheduleCount arm_func_start OSi_IdleThreadProc OSi_IdleThreadProc: ; 0x020CAF58 @@ -1581,7 +1582,7 @@ OS_SetSwitchThreadCallback: ; 0x020CAF6C sub sp, sp, #0x4 mov r5, r0 bl OS_DisableInterrupts - ldr r1, _020CAF9C ; =0x021D3498 + ldr r1, _020CAF9C ; =OSi_ThreadInfo ldr r4, [r1, #0xc] str r5, [r1, #0xc] bl OS_RestoreInterrupts @@ -1590,7 +1591,7 @@ OS_SetSwitchThreadCallback: ; 0x020CAF6C ldmia sp!, {r4-r5,lr} bx lr .balign 4 -_020CAF9C: .word 0x021D3498 +_020CAF9C: .word OSi_ThreadInfo arm_func_start OSi_SleepAlarmCallback OSi_SleepAlarmCallback: ; 0x020CAFA0 @@ -1611,7 +1612,7 @@ OS_Sleep: ; 0x020CAFC0 mov r4, r0 add r0, sp, #0x8 bl OS_CreateAlarm - ldr r0, _020CB060 ; =0x021D3490 + ldr r0, _020CB060 ; =OSi_CurrentThreadPtr ldr r0, [r0, #0x0] ldr r0, [r0, #0x0] str r0, [sp, #0x4] @@ -1649,7 +1650,7 @@ _020CB04C: ldmia sp!, {r4-r5,lr} bx lr .balign 4 -_020CB060: .word 0x021D3490 +_020CB060: .word OSi_CurrentThreadPtr _020CB064: .word 0x000082EA _020CB068: .word OSi_SleepAlarmCallback @@ -1661,7 +1662,7 @@ OS_GetThreadPriority: ; 0x020CB06C arm_func_start OS_SetThreadPriority OS_SetThreadPriority: ; 0x020CB074 stmdb sp!, {r4-r8,lr} - ldr r2, _020CB120 ; =0x021D3498 + ldr r2, _020CB120 ; =OSi_ThreadInfo mov r6, r0 mov r5, r1 ldr r8, [r2, #0x8] @@ -1680,7 +1681,7 @@ _020CB0A0: _020CB0B0: cmp r8, #0x0 beq _020CB0C4 - ldr r0, _020CB124 ; =0x021D34A8 + ldr r0, _020CB124 ; =OSi_IdleThread cmp r8, r0 bne _020CB0D8 _020CB0C4: @@ -1696,7 +1697,7 @@ _020CB0D8: beq _020CB10C cmp r7, #0x0 ldreq r1, [r6, #0x68] - ldreq r0, _020CB120 ; =0x021D3498 + ldreq r0, _020CB120 ; =OSi_ThreadInfo streq r1, [r0, #0x8] ldrne r0, [r6, #0x68] strne r0, [r7, #0x68] @@ -1711,19 +1712,19 @@ _020CB10C: ldmia sp!, {r4-r8,lr} bx lr .balign 4 -_020CB120: .word 0x021D3498 -_020CB124: .word 0x021D34A8 +_020CB120: .word OSi_ThreadInfo +_020CB124: .word OSi_IdleThread arm_func_start OS_YieldThread OS_YieldThread: ; 0x020CB128 stmdb sp!, {r4-r8,lr} - ldr r0, _020CB1E0 ; =0x021D3498 + ldr r0, _020CB1E0 ; =OSi_ThreadInfo mov r7, #0x0 mov r6, r7 mov r5, r7 ldr r8, [r0, #0x4] bl OS_DisableInterrupts - ldr r1, _020CB1E0 ; =0x021D3498 + ldr r1, _020CB1E0 ; =OSi_ThreadInfo mov r4, r0 ldr r2, [r1, #0x8] mov r0, r7 @@ -1754,7 +1755,7 @@ _020CB198: _020CB1A8: cmp r7, #0x0 ldreq r1, [r8, #0x68] - ldreq r0, _020CB1E0 ; =0x021D3498 + ldreq r0, _020CB1E0 ; =OSi_ThreadInfo streq r1, [r0, #0x8] ldrne r0, [r8, #0x68] strne r0, [r7, #0x68] @@ -1767,7 +1768,7 @@ _020CB1A8: ldmia sp!, {r4-r8,lr} bx lr .balign 4 -_020CB1E0: .word 0x021D3498 +_020CB1E0: .word OSi_ThreadInfo arm_func_start OS_RescheduleThread OS_RescheduleThread: ; 0x020CB1E4 @@ -1782,7 +1783,7 @@ OS_RescheduleThread: ; 0x020CB1E4 arm_func_start OS_SelectThread OS_SelectThread: ; 0x020CB204 - ldr r0, _020CB22C ; =0x021D3498 + ldr r0, _020CB22C ; =OSi_ThreadInfo ldr r0, [r0, #0x8] b _020CB214 _020CB210: @@ -1795,7 +1796,7 @@ _020CB214: bne _020CB210 bx lr .balign 4 -_020CB22C: .word 0x021D3498 +_020CB22C: .word OSi_ThreadInfo arm_func_start OS_WakeupThreadDirect OS_WakeupThreadDirect: ; 0x020CB230 @@ -1856,7 +1857,7 @@ OS_SleepThread: stmdb sp!, {r4-r6,lr} mov r6, r0 bl OS_DisableInterrupts - ldr r1, _020CB334 ; =0x021D3490 + ldr r1, _020CB334 ; =OSi_CurrentThreadPtr mov r5, r0 ldr r0, [r1, #0x0] cmp r6, #0x0 @@ -1875,7 +1876,7 @@ _020CB318: ldmia sp!, {r4-r6,lr} bx lr .balign 4 -_020CB334: .word 0x021D3490 +_020CB334: .word OSi_CurrentThreadPtr arm_func_start OS_IsThreadTerminated OS_IsThreadTerminated: ; 0x020CB338 @@ -1924,7 +1925,7 @@ OS_DestroyThread: ; 0x020CB3B4 sub sp, sp, #0x4 mov r5, r0 bl OS_DisableInterrupts - ldr r1, _020CB438 ; =0x021D3498 + ldr r1, _020CB438 ; =OSi_ThreadInfo mov r4, r0 ldr r0, [r1, #0x4] cmp r0, r5 @@ -1956,12 +1957,12 @@ _020CB404: ldmia sp!, {r4-r5,lr} bx lr .balign 4 -_020CB438: .word 0x021D3498 +_020CB438: .word OSi_ThreadInfo arm_func_start OSi_ExitThread_Destroy OSi_ExitThread_Destroy: ; 0x020CB43C stmdb sp!, {r4,lr} - ldr r0, _020CB498 ; =0x021D3490 + ldr r0, _020CB498 ; =OSi_CurrentThreadPtr ldr r0, [r0, #0x0] ldr r4, [r0, #0x0] bl OS_DisableScheduler @@ -1985,13 +1986,13 @@ _020CB46C: ldmia sp!, {r4,lr} bx lr .balign 4 -_020CB498: .word 0x021D3490 +_020CB498: .word OSi_CurrentThreadPtr arm_func_start OSi_ExitThread_Destroy2 OSi_ExitThread_Destroy2: ; 0x020CB49C stmdb sp!, {lr} sub sp, sp, #0x4 - ldr r1, _020CB4DC ; =0x021D3490 + ldr r1, _020CB4DC ; =OSi_CurrentThreadPtr ldr r1, [r1, #0x0] ldr r3, [r1, #0x0] ldr r2, [r3, #0xb4] @@ -2007,13 +2008,13 @@ _020CB4CC: ldmia sp!, {lr} bx lr .balign 4 -_020CB4DC: .word 0x021D3490 +_020CB4DC: .word OSi_CurrentThreadPtr arm_func_start OSi_ExitThread_ArgSpecified OSi_ExitThread_ArgSpecified: ; 0x020CB4E0 stmdb sp!, {r4-r5,lr} sub sp, sp, #0x4 - ldr r2, _020CB548 ; =0x021D3480 + ldr r2, _020CB548 ; =OSi_StackForDestructor mov r5, r0 ldr r2, [r2, #0x0] mov r4, r1 @@ -2039,7 +2040,7 @@ _020CB534: ldmia sp!, {r4-r5,lr} bx lr .balign 4 -_020CB548: .word 0x021D3480 +_020CB548: .word OSi_StackForDestructor _020CB54C: .word OSi_ExitThread_Destroy2 arm_func_start OS_ExitThread @@ -2047,7 +2048,7 @@ OS_ExitThread: ; 0x020CB550 stmdb sp!, {lr} sub sp, sp, #0x4 bl OS_DisableInterrupts - ldr r0, _020CB578 ; =0x021D3498 + ldr r0, _020CB578 ; =OSi_ThreadInfo mov r1, #0x0 ldr r0, [r0, #0x4] bl OSi_ExitThread_ArgSpecified @@ -2055,7 +2056,7 @@ OS_ExitThread: ; 0x020CB550 ldmia sp!, {lr} bx lr .balign 4 -_020CB578: .word 0x021D3498 +_020CB578: .word OSi_ThreadInfo arm_func_start OS_CreateThread OS_CreateThread: ; 0x020CB57C @@ -2131,7 +2132,7 @@ _020CB680: .word OS_ExitThread OS_InitThread: ; 0x020CB684 stmdb sp!, {r4-r6,lr} sub sp, sp, #0x8 - ldr r3, _020CB7A4 ; =0x021D3494 + ldr r3, _020CB7A4 ; =OSi_IsThreadInitialized ldr r0, [r3, #0x0] cmp r0, #0x0 addne sp, sp, #0x8 @@ -2140,7 +2141,7 @@ OS_InitThread: ; 0x020CB684 ldr ip, _020CB7A8 ; =0x00000000 ldr r1, _020CB7AC ; =0x021D3568 mov lr, #0x0 - ldr r0, _020CB7B0 ; =0x021D3498 + ldr r0, _020CB7B0 ; =OSi_ThreadInfo mov r6, #0x1 mov r4, #0x10 str r1, [r0, #0x8] @@ -2160,7 +2161,7 @@ OS_InitThread: ; 0x020CB684 subgt r4, r0, r12 ldr r1, _020CB7B8 ; =0x027E0000 ldr r5, _020CB7C0 ; =0x021D349C - ldr r2, _020CB7C4 ; =0x021D3490 + ldr r2, _020CB7C4 ; =OSi_CurrentThreadPtr ldr r0, _020CB7BC ; =0x00000400 str r5, [r2, #0x0] ldr r2, _020CB7AC ; =0x021D3568 @@ -2175,7 +2176,7 @@ OS_InitThread: ; 0x020CB684 str r1, [r3, #-0x4] ldr r3, [r2, #0x90] ldr ip, _020CB7CC ; =0x7BF9DD5B - ldr r1, _020CB7B0 ; =0x021D3498 + ldr r1, _020CB7B0 ; =OSi_ThreadInfo str r12, [r3, #0x0] ldr r3, _020CB7D0 ; =0x027FFFA0 str r0, [r2, #0xa0] @@ -2187,13 +2188,13 @@ OS_InitThread: ; 0x020CB684 mov r2, #0xc8 str r2, [sp, #0x0] mov r12, #0x1f - ldr r0, _020CB7D4 ; =0x021D34A8 + ldr r0, _020CB7D4 ; =OSi_IdleThread ldr r1, _020CB7D8 ; =OSi_IdleThreadProc - ldr r3, _020CB7DC ; =0x021D36F0 + ldr r3, _020CB7DC ; =OSi_Initialized mov r2, #0x0 str r12, [sp, #0x4] bl OS_CreateThread - ldr r0, _020CB7D4 ; =0x021D34A8 + ldr r0, _020CB7D4 ; =OSi_IdleThread mov r2, #0x20 mov r1, #0x1 str r2, [r0, #0x70] @@ -2202,31 +2203,31 @@ OS_InitThread: ; 0x020CB684 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 +_020CB7A4: .word OSi_IsThreadInitialized +_020CB7A8: .word SDK_SYS_STACKSIZE +_020CB7AC: .word OSi_LauncherThread +_020CB7B0: .word OSi_ThreadInfo +_020CB7B4: .word SDK_SECTION_ARENA_DTCM_START +_020CB7B8: .word SDK_AUTOLOAD_DTCM_START +_020CB7BC: .word SDK_IRQ_STACKSIZE +_020CB7C0: .word OSi_ThreadInfo+4 +_020CB7C4: .word OSi_CurrentThreadPtr _020CB7C8: .word 0xFDDB597D _020CB7CC: .word 0x7BF9DD5B _020CB7D0: .word 0x027FFFA0 -_020CB7D4: .word 0x021D34A8 +_020CB7D4: .word OSi_IdleThread _020CB7D8: .word OSi_IdleThreadProc -_020CB7DC: .word 0x021D36F0 +_020CB7DC: .word OSi_IdleThreadStack+0xc8 arm_func_start OSi_RescheduleThread OSi_RescheduleThread: ; 0x020CB7E0 stmdb sp!, {r4-r6,lr} - ldr r0, _020CB8BC ; =0x021D3484 + ldr r0, _020CB8BC ; =OSi_RescheduleCount ldr r0, [r0, #0x0] cmp r0, #0x0 ldmneia sp!, {r4-r6,lr} bxne lr - ldr r4, _020CB8C0 ; =0x021D3498 + ldr r4, _020CB8C0 ; =OSi_ThreadInfo ldrh r0, [r4, #0x2] cmp r0, #0x0 bne _020CB814 @@ -2239,7 +2240,7 @@ _020CB814: ldmia sp!, {r4-r6,lr} bx lr _020CB824: - ldr r0, _020CB8C4 ; =0x021D3490 + ldr r0, _020CB8C4 ; =OSi_CurrentThreadPtr ldr r0, [r0, #0x0] ldr r6, [r0, #0x0] bl OS_SelectThread @@ -2275,21 +2276,21 @@ _020CB88C: mov r1, r5 blx r2 _020CB8A4: - ldr r1, _020CB8C0 ; =0x021D3498 + ldr r1, _020CB8C0 ; =OSi_ThreadInfo 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 +_020CB8BC: .word OSi_RescheduleCount +_020CB8C0: .word OSi_ThreadInfo +_020CB8C4: .word OSi_CurrentThreadPtr +_020CB8C8: .word OSi_SystemCallbackInSwitchThread arm_func_start OSi_RemoveThreadFromList OSi_RemoveThreadFromList: ; 0x020CB8CC - ldr r1, _020CB910 ; =0x021D3498 + ldr r1, _020CB910 ; =OSi_ThreadInfo mov r2, #0x0 ldr r1, [r1, #0x8] b _020CB8E4 @@ -2304,19 +2305,19 @@ _020CB8E4: _020CB8F4: cmp r2, #0x0 ldreq r1, [r0, #0x68] - ldreq r0, _020CB910 ; =0x021D3498 + ldreq r0, _020CB910 ; =OSi_ThreadInfo streq r1, [r0, #0x8] ldrne r0, [r0, #0x68] strne r0, [r2, #0x68] bx lr .balign 4 -_020CB910: .word 0x021D3498 +_020CB910: .word OSi_ThreadInfo arm_func_start OSi_InsertThreadToList OSi_InsertThreadToList: ; 0x020CB914 stmdb sp!, {lr} sub sp, sp, #0x4 - ldr r1, _020CB978 ; =0x021D3498 + ldr r1, _020CB978 ; =OSi_ThreadInfo mov r12, #0x0 ldr r3, [r1, #0x8] mov lr, r3 @@ -2333,7 +2334,7 @@ _020CB938: blo _020CB930 _020CB950: cmp r12, #0x0 - ldreq r1, _020CB978 ; =0x021D3498 + ldreq r1, _020CB978 ; =OSi_ThreadInfo streq r3, [r0, #0x68] streq r0, [r1, #0x8] ldrne r1, [r12, #0x68] @@ -2343,7 +2344,7 @@ _020CB950: ldmia sp!, {lr} bx lr .balign 4 -_020CB978: .word 0x021D3498 +_020CB978: .word OSi_ThreadInfo arm_func_start OSi_RemoveMutexLinkFromQueue OSi_RemoveMutexLinkFromQueue: ; 0x020CB97C @@ -2444,13 +2445,13 @@ _020CBA8C: arm_func_start OSi_GetUnusedThreadId OSi_GetUnusedThreadId: ; 0x020CBAAC - ldr r1, _020CBAC0 ; =0x021D3488 + ldr r1, _020CBAC0 ; =OSi_ThreadIdCount ldr r0, [r1, #0x0] add r0, r0, #0x1 str r0, [r1, #0x0] bx lr .balign 4 -_020CBAC0: .word 0x021D3488 +_020CBAC0: .word OSi_ThreadIdCount arm_func_start OS_InitContext OS_InitContext: ; 0x020CBAC4 @@ -2775,7 +2776,7 @@ OS_TryLockMutex: ; 0x020CBEE4 mov r5, r0 bl OS_DisableInterrupts ldr r2, [r5, #0x8] - ldr r1, _020CBF54 ; =0x021D3498 + ldr r1, _020CBF54 ; =OSi_ThreadInfo mov r4, r0 cmp r2, #0x0 ldr r0, [r1, #0x4] @@ -2802,7 +2803,7 @@ _020CBF40: ldmia sp!, {r4-r6,lr} bx lr .balign 4 -_020CBF54: .word 0x021D3498 +_020CBF54: .word OSi_ThreadInfo arm_func_start OSi_UnlockAllMutex OSi_UnlockAllMutex: ; 0x020CBF58 @@ -2832,7 +2833,7 @@ OS_UnlockMutex: ; 0x020CBFA0 sub sp, sp, #0x4 mov r5, r0 bl OS_DisableInterrupts - ldr r1, _020CC00C ; =0x021D3498 + ldr r1, _020CC00C ; =OSi_ThreadInfo mov r4, r0 ldr r0, [r1, #0x4] ldr r1, [r5, #0x8] @@ -2857,7 +2858,7 @@ _020CBFF8: ldmia sp!, {r4-r5,lr} bx lr .balign 4 -_020CC00C: .word 0x021D3498 +_020CC00C: .word OSi_ThreadInfo arm_func_start OS_LockMutex OS_LockMutex: ; 0x020CC010 @@ -2865,7 +2866,7 @@ OS_LockMutex: ; 0x020CC010 sub sp, sp, #0x4 mov r5, r0 bl OS_DisableInterrupts - ldr r1, _020CC098 ; =0x021D3498 + ldr r1, _020CC098 ; =OSi_ThreadInfo mov r4, r0 ldr r7, [r1, #0x4] mov r6, #0x0 @@ -2899,7 +2900,7 @@ _020CC084: ldmia sp!, {r4-r7,lr} bx lr .balign 4 -_020CC098: .word 0x021D3498 +_020CC098: .word OSi_ThreadInfo arm_func_start OS_InitMutex OS_InitMutex: ; 0x020CC09C @@ -3137,7 +3138,7 @@ _020CC34C: ldmfd sp!, {lr} bx lr _020CC35C: - ldr r0, _020CC3F0 ; =0x021D36F4 + ldr r0, _020CC3F0 ; =OSi_MainExArenaEnabled ldr r0, [r0] cmp r0, #0x0 beq _020CC37C @@ -3209,7 +3210,7 @@ _020CC438: ldmfd sp!, {lr} bx lr _020CC448: - ldr r0, _020CC51C ; =0x021D36F4 + ldr r0, _020CC51C ; =OSi_MainExArenaEnabled ldr r0, [r0] cmp r0, #0x0 beq _020CC468 @@ -3270,7 +3271,7 @@ _020CC508: ldmia sp!, {lr} bx lr _020CC518: .word 0x023E0000 -_020CC51C: .word 0x021D36F4 +_020CC51C: .word OSi_MainExArenaEnabled _020CC520: .word 0x027E0000 _020CC524: .word 0x00000000 _020CC528: .word 0x00000400 @@ -3308,7 +3309,7 @@ OS_InitArenaEx: ; 0x020CC560 mov r1, r0 mov r0, #0x2 bl OS_SetArenaLo - ldr r0, _020CC5D4 ; =0x021D36F4 + ldr r0, _020CC5D4 ; =OSi_MainExArenaEnabled ldr r0, [r0, #0x0] cmp r0, #0x0 beq _020CC5B8 @@ -3327,7 +3328,7 @@ _020CC5B8: ldmia sp!, {lr} bx lr .balign 4 -_020CC5D4: .word 0x021D36F4 +_020CC5D4: .word OSi_MainExArenaEnabled _020CC5D8: .word 0x0200002B _020CC5DC: .word 0x023E0021 @@ -3335,7 +3336,7 @@ _020CC5DC: .word 0x023E0021 OS_InitArena: ; 0x020CC5E0 stmdb sp!, {lr} sub sp, sp, #0x4 - ldr r1, _020CC6F4 ; =0x021D36F0 + ldr r1, _020CC6F4 ; =OSi_Initialized ldr r0, [r1, #0x0] cmp r0, #0x0 addne sp, sp, #0x4 @@ -3403,7 +3404,7 @@ _020CC61C: add sp, sp, #0x4 ldmfd sp!, {lr} bx lr -_020CC6F4: .word 0x021D36F0 +_020CC6F4: .word OSi_Initialized arm_func_start OS_FreeToHeap OS_FreeToHeap: ; 0x020CC6F8 @@ -3413,7 +3414,7 @@ OS_FreeToHeap: ; 0x020CC6F8 mov r5, r1 mov r4, r2 bl OS_DisableInterrupts - ldr r1, _020CC768 ; =0x021D36F8 + ldr r1, _020CC768 ; =OSi_HeapInfo mov r6, r0 ldr r0, [r1, r7, lsl #0x2] cmp r5, #0x0 @@ -3436,7 +3437,7 @@ OS_FreeToHeap: ; 0x020CC6F8 ldmia sp!, {r4-r7,lr} bx lr .balign 4 -_020CC768: .word 0x021D36F8 +_020CC768: .word OSi_HeapInfo arm_func_start OS_AllocFromHeap OS_AllocFromHeap: ; 0x020CC76C @@ -3446,7 +3447,7 @@ OS_AllocFromHeap: ; 0x020CC76C mov r5, r1 mov r7, r2 bl OS_DisableInterrupts - ldr r1, _020CC894 ; =0x021D36F8 + ldr r1, _020CC894 ; =OSi_HeapInfo mov r4, r0 ldr r1, [r1, r6, lsl #0x2] cmp r1, #0x0 @@ -3521,7 +3522,7 @@ _020CC86C: ldmia sp!, {r4-r7,lr} bx lr .balign 4 -_020CC894: .word 0x021D36F8 +_020CC894: .word OSi_HeapInfo arm_func_start DLInsert DLInsert: ; 0x020CC898 @@ -3646,7 +3647,7 @@ OS_SetProtectionRegion2: ; 0x020CC9F4 arm_func_start OSi_ExceptionHandler OSi_ExceptionHandler: ; 0x020CC9FC - ldr ip, _020CCA68 ; =0x021D3724 + ldr ip, _020CCA68 ; =OSi_DebuggerHandler ldr r12, [r12, #0x0] cmp r12, #0x0 movne lr, pc @@ -3666,7 +3667,7 @@ _020CCA38: bne _020CCA44 bl OSi_GetAndDisplayContext _020CCA44: - ldr ip, _020CCA68 ; =0x021D3724 + ldr ip, _020CCA68 ; =OSi_DebuggerHandler ldr r12, [r12, #0x0] cmp r12, #0x0 _020CCA50: @@ -3678,7 +3679,7 @@ _020CCA5C: ldmia sp!, {r0-r3,ip,lr} mov sp, ip bx lr -_020CCA68: .word 0x021D3724 +_020CCA68: .word OSi_DebuggerHandler _020CCA6C: .word 0x02000000 arm_func_start OSi_GetAndDisplayContext @@ -3691,7 +3692,7 @@ OSi_GetAndDisplayContext: ; 0x020CCA70 arm_func_start OSi_SetExContext OSi_SetExContext: ; 0x020CCA84 - ldr r1, _020CCB10 ; =0x021D3728 + ldr r1, _020CCB10 ; =OSi_ExContext mrs r2, cpsr str r2, [r1, #0x74] str r0, [r1, #0x6c] @@ -3727,13 +3728,13 @@ OSi_SetExContext: ; 0x020CCA84 msr cpsr_fsxc, r0 bx lr .balign 4 -_020CCB10: .word 0x021D3728 +_020CCB10: .word OSi_ExContext arm_func_start OSi_DisplayExContext OSi_DisplayExContext: ; 0x020CCB14 stmdb sp!, {lr} sub sp, sp, #0x4 - ldr r0, _020CCB70 ; =0x021D371C + ldr r0, _020CCB70 ; =OSi_UserExceptionHandler ldr r0, [r0, #0x0] cmp r0, #0x0 addeq sp, sp, #0x4 @@ -3744,21 +3745,21 @@ OSi_DisplayExContext: ; 0x020CCB14 msr cpsr_fsxc, r1 mov sp, r0 bl OS_EnableProtectionUnit - ldr r1, _020CCB78 ; =0x021D3720 - ldr r0, _020CCB70 ; =0x021D371C + ldr r1, _020CCB78 ; =OSi_UserExceptionHandlerArg + ldr r0, _020CCB70 ; =OSi_UserExceptionHandler ldr r1, [r1, #0x0] ldr r2, [r0, #0x0] - ldr r0, _020CCB7C ; =0x021D3728 + ldr r0, _020CCB7C ; =OSi_ExContext blx r2 bl OS_DisableProtectionUnit add sp, sp, #0x4 ldmia sp!, {lr} bx lr .balign 4 -_020CCB70: .word 0x021D371C +_020CCB70: .word OSi_UserExceptionHandler _020CCB74: .word 0x0000009F -_020CCB78: .word 0x021D3720 -_020CCB7C: .word 0x021D3728 +_020CCB78: .word OSi_UserExceptionHandlerArg +_020CCB7C: .word OSi_ExContext arm_func_start OS_InitException OS_InitException: ; 0x020CCB80 @@ -3767,15 +3768,15 @@ OS_InitException: ; 0x020CCB80 cmp r1, #0x2600000 blo _020CCBA0 cmp r1, #0x2800000 - ldrlo r0, _020CCBE0 ; =0x021D3724 + ldrlo r0, _020CCBE0 ; =OSi_DebuggerHandler strcc r1, [r0, #0x0] blo _020CCBAC _020CCBA0: - ldr r0, _020CCBE0 ; =0x021D3724 + ldr r0, _020CCBE0 ; =OSi_DebuggerHandler mov r1, #0x0 str r1, [r0, #0x0] _020CCBAC: - ldr r0, _020CCBE0 ; =0x021D3724 + ldr r0, _020CCBE0 ; =OSi_DebuggerHandler ldr r0, [r0, #0x0] cmp r0, #0x0 ldreq r2, _020CCBE4 ; =OSi_ExceptionHandler @@ -3783,27 +3784,27 @@ _020CCBAC: ldreq r0, _020CCBE8 ; =0x027E3000 streq r2, [r1, #0x0] streq r2, [r0, #0xfdc] - ldr r0, _020CCBEC ; =0x021D371C + ldr r0, _020CCBEC ; =OSi_UserExceptionHandler mov r1, #0x0 str r1, [r0, #0x0] bx lr .balign 4 _020CCBDC: .word 0x027FFD9C -_020CCBE0: .word 0x021D3724 +_020CCBE0: .word OSi_DebuggerHandler _020CCBE4: .word OSi_ExceptionHandler _020CCBE8: .word 0x027E3000 -_020CCBEC: .word 0x021D371C +_020CCBEC: .word OSi_UserExceptionHandler arm_func_start OSi_SetTimerReserved OSi_SetTimerReserved: ; 0x020CCBF0 - ldr r1, _020CCC08 ; =0x021D37A8 + ldr r1, _020CCC08 ; =OSi_TimerReserved mov r2, #0x1 ldrh r3, [r1, #0x0] orr r0, r3, r2, lsl r0 strh r0, [r1, #0x0] bx lr .balign 4 -_020CCC08: .word 0x021D37A8 +_020CCC08: .word OSi_TimerReserved arm_func_start OS_GetTickLo OS_GetTickLo: ; 0x020CCC0C @@ -3819,7 +3820,7 @@ OS_GetTick: ; 0x020CCC1C sub sp, sp, #0xc bl OS_DisableInterrupts ldr r1, _020CCCBC ; =0x04000100 - ldr r3, _020CCCC0 ; =0x021D37B4 + ldr r3, _020CCCC0 ; =OSi_TickCounter ldrh r12, [r1, #0x0] ldr r2, _020CCCC4 ; =0x0000FFFF mvn r1, #0x0 @@ -3858,7 +3859,7 @@ _020CCC90: bx lr .balign 4 _020CCCBC: .word 0x04000100 -_020CCCC0: .word 0x021D37B4 +_020CCCC0: .word OSi_TickCounter _020CCCC4: .word 0x0000FFFF _020CCCC8: .word 0x04000214 @@ -3866,8 +3867,8 @@ _020CCCC8: .word 0x04000214 OSi_CountUpTick: ; 0x020CCCCC stmdb sp!, {lr} sub sp, sp, #0x4 - ldr r2, _020CCD40 ; =0x021D37B4 - ldr r1, _020CCD44 ; =0x021D37B0 + ldr r2, _020CCD40 ; =OSi_TickCounter + ldr r1, _020CCD44 ; =OSi_NeedResetTimer ldr r12, [r2, #0x0] mov r0, #0x1 ldr r3, [r2, #0x4] @@ -3895,25 +3896,25 @@ _020CCD24: ldmia sp!, {lr} bx lr .balign 4 -_020CCD40: .word 0x021D37B4 -_020CCD44: .word 0x021D37B0 +_020CCD40: .word OSi_TickCounter +_020CCD44: .word OSi_NeedResetTimer _020CCD48: .word 0x04000102 _020CCD4C: .word 0x04000100 _020CCD50: .word OSi_CountUpTick arm_func_start OS_IsTickAvailable OS_IsTickAvailable: ; 0x020CCD54 - ldr r0, _020CCD60 ; =0x021D37AC + ldr r0, _020CCD60 ; =OSi_UseTick ldrh r0, [r0, #0x0] bx lr .balign 4 -_020CCD60: .word 0x021D37AC +_020CCD60: .word OSi_UseTick arm_func_start OS_InitTick OS_InitTick: ; 0x020CCD64 stmdb sp!, {lr} sub sp, sp, #0x4 - ldr r1, _020CCDE8 ; =0x021D37AC + ldr r1, _020CCDE8 ; =OSi_UseTick ldrh r0, [r1, #0x0] cmp r0, #0x0 addne sp, sp, #0x4 @@ -3923,7 +3924,7 @@ OS_InitTick: ; 0x020CCD64 mov r0, #0x0 strh r2, [r1, #0x0] bl OSi_SetTimerReserved - ldr r0, _020CCDEC ; =0x021D37B4 + ldr r0, _020CCDEC ; =OSi_TickCounter mov r2, #0x0 str r2, [r0, #0x0] ldr r3, _020CCDF0 ; =0x04000102 @@ -3938,19 +3939,19 @@ OS_InitTick: ; 0x020CCD64 bl OS_SetIrqFunction mov r0, #0x8 bl OS_EnableIrqMask - ldr r0, _020CCDFC ; =0x021D37B0 + ldr r0, _020CCDFC ; =OSi_NeedResetTimer mov r1, #0x0 str r1, [r0, #0x0] add sp, sp, #0x4 ldmia sp!, {lr} bx lr .balign 4 -_020CCDE8: .word 0x021D37AC -_020CCDEC: .word 0x021D37B4 +_020CCDE8: .word OSi_UseTick +_020CCDEC: .word OSi_TickCounter _020CCDF0: .word 0x04000102 _020CCDF4: .word 0x04000100 _020CCDF8: .word OSi_CountUpTick -_020CCDFC: .word 0x021D37B0 +_020CCDFC: .word OSi_NeedResetTimer arm_func_start OSi_AlarmHandler OSi_AlarmHandler: ; 0x020CCE00 @@ -3974,7 +3975,7 @@ OSi_ArrangeTimer: ; 0x020CCE10 orr r1, r1, #0x10 str r1, [r0, #0xff8] bl OS_GetTick - ldr r2, _020CCF24 ; =0x021D37C0 + ldr r2, _020CCF24 ; =OSi_AlarmQueue ldr r4, [r2, #0x0] cmp r4, #0x0 addeq sp, sp, #0x4 @@ -4021,7 +4022,7 @@ _020CCECC: str r5, [r4, #0x0] bl OSi_InsertAlarm _020CCEF4: - ldr r0, _020CCF24 ; =0x021D37C0 + ldr r0, _020CCF24 ; =OSi_AlarmQueue ldr r0, [r0, #0x0] cmp r0, #0x0 addeq sp, sp, #0x4 @@ -4034,7 +4035,7 @@ _020CCEF4: .balign 4 _020CCF1C: .word 0x04000106 _020CCF20: .word 0x027E0000 -_020CCF24: .word 0x021D37C0 +_020CCF24: .word OSi_AlarmQueue arm_func_start OS_CancelAlarm OS_CancelAlarm: ; 0x020CCF28 @@ -4054,7 +4055,7 @@ _020CCF58: ldr r0, [r5, #0x18] cmp r0, #0x0 ldreq r2, [r5, #0x14] - ldreq r1, _020CCFBC ; =0x021D37C0 + ldreq r1, _020CCFBC ; =OSi_AlarmQueue streq r2, [r1, #0x4] ldrne r1, [r5, #0x14] strne r1, [r0, #0x14] @@ -4062,7 +4063,7 @@ _020CCF58: cmp r1, #0x0 strne r0, [r1, #0x18] bne _020CCF98 - ldr r1, _020CCFBC ; =0x021D37C0 + ldr r1, _020CCFBC ; =OSi_AlarmQueue cmp r0, #0x0 str r0, [r1, #0x0] beq _020CCF98 @@ -4078,7 +4079,7 @@ _020CCF98: ldmia sp!, {r4-r5,lr} bx lr .balign 4 -_020CCFBC: .word 0x021D37C0 +_020CCFBC: .word OSi_AlarmQueue arm_func_start OS_SetAlarm OS_SetAlarm: ; 0x020CCFC0 @@ -4150,7 +4151,7 @@ OSi_InsertAlarm: ; 0x020CD038 adc r6, r6, r1 _020CD0B4: str r7, [r8, #0xc] - ldr r0, _020CD174 ; =0x021D37C0 + ldr r0, _020CD174 ; =OSi_AlarmQueue str r6, [r8, #0x10] ldr r4, [r0, #0x0] cmp r4, #0x0 @@ -4173,7 +4174,7 @@ _020CD0D0: strne r8, [r0, #0x18] ldmneia sp!, {r4-r8,lr} bxne lr - ldr r1, _020CD174 ; =0x021D37C0 + ldr r1, _020CD174 ; =OSi_AlarmQueue mov r0, r8 str r8, [r1, #0x0] bl OSi_SetTimer @@ -4184,7 +4185,7 @@ _020CD128: cmp r4, #0x0 bne _020CD0D0 _020CD134: - ldr r1, _020CD174 ; =0x021D37C0 + ldr r1, _020CD174 ; =OSi_AlarmQueue mov r0, #0x0 str r0, [r8, #0x18] ldr r0, [r1, #0x4] @@ -4201,7 +4202,7 @@ _020CD134: ldmia sp!, {r4-r8,lr} bx lr .balign 4 -_020CD174: .word 0x021D37C0 +_020CD174: .word OSi_AlarmQueue arm_func_start OS_CreateAlarm OS_CreateAlarm: ; 0x020CD178 @@ -4212,17 +4213,17 @@ OS_CreateAlarm: ; 0x020CD178 arm_func_start OS_IsAlarmAvailable OS_IsAlarmAvailable: ; 0x020CD188 - ldr r0, _020CD194 ; =0x021D37BC + ldr r0, _020CD194 ; =OSi_UseAlarm ldrh r0, [r0, #0x0] bx lr .balign 4 -_020CD194: .word 0x021D37BC +_020CD194: .word OSi_UseAlarm arm_func_start OS_InitAlarm OS_InitAlarm: ; 0x020CD198 stmdb sp!, {lr} sub sp, sp, #0x4 - ldr r1, _020CD1E8 ; =0x021D37BC + ldr r1, _020CD1E8 ; =OSi_UseAlarm ldrh r0, [r1, #0x0] cmp r0, #0x0 addne sp, sp, #0x4 @@ -4231,7 +4232,7 @@ OS_InitAlarm: ; 0x020CD198 mov r0, #0x1 strh r0, [r1, #0x0] bl OSi_SetTimerReserved - ldr r1, _020CD1EC ; =0x021D37C0 + ldr r1, _020CD1EC ; =OSi_AlarmQueue mov r2, #0x0 mov r0, #0x10 str r2, [r1, #0x0] @@ -4241,8 +4242,8 @@ OS_InitAlarm: ; 0x020CD198 ldmia sp!, {lr} bx lr .balign 4 -_020CD1E8: .word 0x021D37BC -_020CD1EC: .word 0x021D37C0 +_020CD1E8: .word OSi_UseAlarm +_020CD1EC: .word OSi_AlarmQueue arm_func_start OSi_SetTimer OSi_SetTimer: ; 0x020CD1F0 @@ -4292,13 +4293,13 @@ _020CD288: .word 0x04000104 OS_InitVAlarm: ; 0x020CD28C stmdb sp!, {lr} sub sp, sp, #0x4 - ldr r2, _020CD2EC ; =0x021D37C8 + ldr r2, _020CD2EC ; =OSi_UseVAlarm ldrh r0, [r2, #0x0] cmp r0, #0x0 addne sp, sp, #0x4 ldmneia sp!, {lr} bxne lr - ldr r1, _020CD2F0 ; =0x021D37D4 + ldr r1, _020CD2F0 ; =OSi_VAlarmQueue mov r3, #0x0 mov r12, #0x1 mov r0, #0x4 @@ -4306,19 +4307,19 @@ OS_InitVAlarm: ; 0x020CD28C str r3, [r1, #0x0] str r3, [r1, #0x4] bl OS_DisableIrqMask - ldr r1, _020CD2F4 ; =0x021D37D0 + ldr r1, _020CD2F4 ; =OSi_VFrameCount mov r2, #0x0 - ldr r0, _020CD2F8 ; =0x021D37CC + ldr r0, _020CD2F8 ; =OSi_PreviousVCount 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 +_020CD2EC: .word OSi_UseVAlarm +_020CD2F0: .word OSi_VAlarmQueue +_020CD2F4: .word OSi_VFrameCount +_020CD2F8: .word OSi_PreviousVCount arm_func_start OS_EnableInterrupts OS_EnableInterrupts: ; 0x020CD2FC @@ -4385,7 +4386,7 @@ OS_WaitVBlankIntr: ; 0x020CD38C stmdb sp!, {lr} sub sp, sp, #0x4 mov r0, #0x1 - blx FUN_020005F2 + blx SVC_WaitByLoop mov r0, #0x1 mov r1, r0 bl OS_WaitIrq @@ -4448,14 +4449,14 @@ _020CD454: bx lr arm_func_start OSi_CommonCallback -OSi_CommonCallback: ; 0x020CD464 +OSi_CommonCallback: ; OSi_CommonCallback 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 + ldreq r0, _020CD4A4 ; =OSi_IsResetOccurred moveq r1, #0x1 streqh r1, [r0, #0x0] addeq sp, sp, #0x4 @@ -4466,7 +4467,7 @@ OSi_CommonCallback: ; 0x020CD464 ldmia sp!, {lr} bx lr .balign 4 -_020CD4A4: .word 0x021D37E0 +_020CD4A4: .word OSi_IsResetOccurred arm_func_start OS_InitReset OS_InitReset: ; 0x020CD4A8 @@ -4496,8 +4497,8 @@ _020CD4E8: add sp, sp, #0x4 ldmia sp!, {r4-r5, lr} bx lr -_020CD508: .word 0x021D37DC -_020CD50C: .word 0x020CD464 +_020CD508: .word OSi_IsInitReset +_020CD50C: .word OSi_CommonCallback arm_func_start OS_GetOwnerRtcOffset OS_GetOwnerRtcOffset: ; 0x020CD510 @@ -4565,13 +4566,13 @@ OSi_UnlockVram: ; 0x020CD5C4 mov r5, r0 mov r10, r1 bl OS_DisableInterrupts - ldr r4, _020CD640 ; =0x021D37E4 + ldr r4, _020CD640 ; =OSi_vramExclusive ldr r1, _020CD644 ; =0x000001FF ldr r2, [r4, #0x0] mov r8, r0 and r0, r5, r2 and r9, r0, r1 - ldr r6, _020CD648 ; =0x021D37E8 + ldr r6, _020CD648 ; =OSi_vramLockId mov r7, #0x1 mov r5, #0x0 _020CD5F8: @@ -4595,9 +4596,9 @@ _020CD630: ldmia sp!, {r4-r10,lr} bx lr .balign 4 -_020CD640: .word 0x021D37E4 +_020CD640: .word OSi_vramExclusive _020CD644: .word 0x000001FF -_020CD648: .word 0x021D37E8 +_020CD648: .word OSi_vramLockId arm_func_start OSi_TryLockVram OSi_TryLockVram: ; 0x020CD64C @@ -4606,11 +4607,11 @@ OSi_TryLockVram: ; 0x020CD64C mov r6, r0 mov r8, r1 bl OS_DisableInterrupts - ldr r1, _020CD714 ; =0x021D37E4 + ldr r1, _020CD714 ; =OSi_vramExclusive mov r7, r0 ldr r0, [r1, #0x0] and r5, r6, r0 - ldr sb, _020CD718 ; =0x021D37E8 + ldr sb, _020CD718 ; =OSi_vramLockId mov r4, #0x1 _020CD678: mov r0, r5 @@ -4632,8 +4633,8 @@ _020CD678: _020CD6B8: ldr r0, _020CD71C ; =0x000001FF and r6, r6, r0 - ldr r4, _020CD718 ; =0x021D37E8 - ldr sb, _020CD714 ; =0x021D37E4 + ldr r4, _020CD718 ; =OSi_vramLockId + ldr sb, _020CD714 ; =OSi_vramExclusive mov r5, #0x1 _020CD6CC: mov r0, r6 @@ -4656,16 +4657,16 @@ _020CD6FC: ldmia sp!, {r4-r9,lr} bx lr .balign 4 -_020CD714: .word 0x021D37E4 -_020CD718: .word 0x021D37E8 +_020CD714: .word OSi_vramExclusive +_020CD718: .word OSi_vramLockId _020CD71C: .word 0x000001FF arm_func_start OSi_InitVramExclusive OSi_InitVramExclusive: ; 0x020CD720 - ldr r0, _020CD74C ; =0x021D37E4 + ldr r0, _020CD74C ; =OSi_vramExclusive mov r3, #0x0 str r3, [r0, #0x0] - ldr r0, _020CD750 ; =0x021D37E8 + ldr r0, _020CD750 ; =OSi_vramLockId mov r2, r3 _020CD734: mov r1, r3, lsl #0x1 @@ -4675,8 +4676,8 @@ _020CD734: blt _020CD734 bx lr .balign 4 -_020CD74C: .word 0x021D37E4 -_020CD750: .word 0x021D37E8 +_020CD74C: .word OSi_vramExclusive +_020CD750: .word OSi_vramLockId arm_func_start OS_GetLowEntropyData OS_GetLowEntropyData: ; 0x020CD754 @@ -4691,7 +4692,7 @@ OS_GetLowEntropyData: ; 0x020CD754 bl OS_GetTickLo orr r0, r0, r7, lsl #0x10 str r0, [r6, #0x0] - ldr r1, _020CD834 ; =0x021D37B4 + ldr r1, _020CD834 ; =OSi_TickCounter ldr r0, _020CD830 ; =0x027FFC00 ldr r3, [r1, #0x0] ldrh r5, [r5, #0x4] @@ -4737,7 +4738,7 @@ OS_GetLowEntropyData: ; 0x020CD754 .balign 4 _020CD82C: .word 0x04000006 _020CD830: .word 0x027FFC00 -_020CD834: .word 0x021D37B4 +_020CD834: .word OSi_TickCounter _020CD838: .word 0x04000600 _020CD83C: .word 0x04000130 _020CD840: .word 0x027FFFA8 diff --git a/asm/arm7_rom.s b/asm/arm7_rom.s index 9dcd3224c..fa248afc8 100644 --- a/asm/arm7_rom.s +++ b/asm/arm7_rom.s @@ -140,18 +140,18 @@ _2380198: FUN_023801B0: .incbin "baserom.nds", 0x30D1B0, 0x91B0 - thumb_func_start SVC_SoftReset -SVC_SoftReset: ; 0x02389360 + thumb_func_start ROM7_SVC_SoftReset +ROM7_SVC_SoftReset: ; 0x02389360 swi 0 bx lr - thumb_func_start SVC_WaitByLoop -SVC_WaitByLoop: ; 0x02389364 + thumb_func_start ROM7_SVC_WaitByLoop +ROM7_SVC_WaitByLoop: ; 0x02389364 swi 3 bx lr - thumb_func_start SVC_WaitIntr -SVC_WaitIntr: ; 0x02389368 + thumb_func_start ROM7_SVC_WaitIntr +ROM7_SVC_WaitIntr: ; 0x02389368 ldr r2, =0x04000000 mov ip, r2 mov r2, #0x0 @@ -159,48 +159,48 @@ SVC_WaitIntr: ; 0x02389368 bx lr .pool - thumb_func_start SVC_WaitVBlankIntr -SVC_WaitVBlankIntr: + thumb_func_start ROM7_SVC_WaitVBlankIntr +ROM7_SVC_WaitVBlankIntr: mov r2, #0x0 swi 5 bx lr - non_word_aligned_thumb_func_start SVC_Halt -SVC_Halt: + non_word_aligned_thumb_func_start ROM7_SVC_Halt +ROM7_SVC_Halt: swi 6 bx lr - non_word_aligned_thumb_func_start SVC_Stop -SVC_Stop: + non_word_aligned_thumb_func_start ROM7_SVC_Stop +ROM7_SVC_Stop: swi 7 bx lr - non_word_aligned_thumb_func_start SVC_SoundBias -SVC_SoundBias: + non_word_aligned_thumb_func_start ROM7_SVC_SoundBias +ROM7_SVC_SoundBias: swi 8 bx lr - non_word_aligned_thumb_func_start SVC_SoundBiasSet -SVC_SoundBiasSet: + non_word_aligned_thumb_func_start ROM7_SVC_SoundBiasSet +ROM7_SVC_SoundBiasSet: add r1, r0, #0x0 mov r0, #0x1 swi 8 bx lr - non_word_aligned_thumb_func_start SVC_SoundBiasReset -SVC_SoundBiasReset: + non_word_aligned_thumb_func_start ROM7_SVC_SoundBiasReset +ROM7_SVC_SoundBiasReset: add r1, r0, #0x0 mov r0, #0x0 swi 8 bx lr - non_word_aligned_thumb_func_start SVC_Div -SVC_Div: + non_word_aligned_thumb_func_start ROM7_SVC_Div +ROM7_SVC_Div: swi 9 bx lr - non_word_aligned_thumb_func_start SVC_DivRem -SVC_DivRem: + non_word_aligned_thumb_func_start ROM7_SVC_DivRem +ROM7_SVC_DivRem: swi 9 add r0, r1, #0x0 bx lr diff --git a/asm/crt0.s b/asm/crt0.s index fe2ca894d..709bd5f39 100644 --- a/asm/crt0.s +++ b/asm/crt0.s @@ -2,7 +2,6 @@ .include "global.inc" .text - .set SDK_IRQ_STACKSIZE, 0x400 arm_func_start _start _start: ; 0x02000800 diff --git a/asm/secure.s b/asm/secure.s index 8bfb7ede0..f9d8f1591 100644 --- a/asm/secure.s +++ b/asm/secure.s @@ -21,8 +21,8 @@ FUN_020002FE: ; 0x020002FE .incbin "baserom.nds", 0x4302, 0x2F0 - non_word_aligned_thumb_func_start FUN_020005F2 -FUN_020005F2: + non_word_aligned_thumb_func_start SVC_WaitByLoop +SVC_WaitByLoop: swi 3 bx lr diff --git a/asm/unk_0208AC14.s b/asm/unk_0208AC14.s index 59d1fcb9a..0adafb8b2 100644 --- a/asm/unk_0208AC14.s +++ b/asm/unk_0208AC14.s @@ -11822,7 +11822,7 @@ _02095460: cmp r0, #0x1 beq _02095488 mov r0, r4 - blx FUN_020005F2 + blx SVC_WaitByLoop b _02095460 _02095488: mov r0, #0x1 @@ -11888,7 +11888,7 @@ _0209552C: ldmeqia sp!, {r4-r8,pc} _02095548: ; 0x02095548 mov r0, r4 - blx FUN_020005F2 + blx SVC_WaitByLoop b _0209552C _02095554: ; 0x02095554 ldmia sp!, {r4-r8,pc} @@ -11929,7 +11929,7 @@ _020955B0: cmp r0, #0x1 beq _020955D8 mov r0, r7 - blx FUN_020005F2 + blx SVC_WaitByLoop b _020955B0 _020955D8: mov r0, r4 @@ -12286,7 +12286,7 @@ _02095A74: b _0209574C _02095A7C: ldr r0, [sp, #0xbc] - blx FUN_020005F2 + blx SVC_WaitByLoop b _0209574C _02095A88: add sp, sp, #0xc4 diff --git a/global.inc b/global.inc index 1e8e2db76..478abdaa6 100644 --- a/global.inc +++ b/global.inc @@ -52,7 +52,7 @@ .extern FUNRTC_Init .extern FUN_0200019E .extern FUN_020002FE -.extern FUN_020005F2 +.extern SVC_WaitByLoop .extern OSi_ReferSymbol .extern FUN_02000DF4 .extern FUN_02000E7C @@ -3478,3 +3478,40 @@ .extern thunk_FUN_020afda0 .extern thunk_FUN_020afda0_2 .extern thunk_FUN_020b5040 +.extern Unk_0210683C +.extern Unk_02106840 +.extern Unk_02106900 +.extern Unk_02106A00 +.extern Unk_02106A04 +.extern OSi_IrqCallbackInfo +.extern OSi_IrqCallbackInfoIndex +.extern SDK_SYS_STACKSIZE +.extern SDK_IRQ_STACKSIZE +.extern OSi_IsThreadInitialized +.extern OSi_LauncherThread +.extern OSi_CurrentThreadPtr +.extern OSi_IdleThread +.extern OSi_IdleThreadStack +.extern OSi_RescheduleCount +.extern OSi_SystemCallbackInSwitchThread +.extern OSi_Initialized +.extern OSi_HeapInfo +.extern OSi_DebuggerHandler +.extern OSi_ExContext +.extern OSi_UserExceptionHandler +.extern OSi_UserExceptionHandlerArg +.extern OSi_TimerReserved +.extern OSi_UseTick +.extern OSi_NeedResetTimer +.extern OSi_TickCounter +.extern OSi_UseAlarm +.extern OSi_AlarmQueue +.extern OSi_UseVAlarm +.extern OSi_PreviousVCount +.extern OSi_VFrameCount +.extern OSi_VAlarmQueue +.extern OSi_IsInitReset +.extern OSi_vramExclusive +.extern OSi_vramLockId +.extern OSi_ThreadIdCount +.extern OSi_StackForDestructor diff --git a/undefined_syms.txt b/undefined_syms.txt index 46a62ad18..075d22a90 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1,5 +1,17 @@ +SDK_SYS_STACKSIZE = 0x00000000; CONST_34 = 0x00000034; CONST_3F = 0x0000003F; +SDK_IRQ_STACKSIZE = 0x00000400; + +// .data +// OS +OSi_IrqCallbackInfoIndex = 0x02106818; +// DGT +Unk_0210683C = 0x0210683C; +Unk_02106840 = 0x02106840; +Unk_02106900 = 0x02106900; +Unk_02106A00 = 0x02106A00; +Unk_02106A04 = 0x02106A04; // .bss gBacklightTop = 0x02106FA0; @@ -7,9 +19,39 @@ gBacklightTop_2 = 0x02106FA0; gUnknown2106FB8 = 0x02106FB8; gUnknown21C48B8 = 0x021C48B8; gUnk021C4918 = 0x021C4918; +OSi_IrqCallbackInfo = 0x021D341C; +isInitialized = 0x021D347C; +OSi_StackForDestructor = 0x021D3480; +OSi_RescheduleCount = 0x021D3484; +OSi_ThreadIdCount = 0x021D3488; +OSi_SystemCallbackInSwitchThread = 0x021D348C; +OSi_CurrentThreadPtr = 0x021D3490; +OSi_IsThreadInitialized = 0x021D3494; OSi_ThreadInfo = 0x021D3498; +OSi_IdleThread = 0x021D34A8; +OSi_LauncherThread = 0x021D3568; +OSi_IdleThreadStack = 0x021D3628; +OSi_Initialized = 0x021D36F0; OSi_MainExArenaEnabled = 0x021D36F4; +OSi_HeapInfo = 0x021D36F8; +OSi_UserExceptionHandler = 0x021D371C; +OSi_UserExceptionHandlerArg = 0x21D3720; +OSi_DebuggerHandler = 0x021D3724; +OSi_ExContext = 0x021D3728; +OSi_TimerReserved = 0x021D37A8; +OSi_UseTick = 0x021D37AC; +OSi_NeedResetTimer = 0x021D37B0; +OSi_TickCounter = 0x021D37B4; +OSi_UseAlarm = 0x021D37BC; +OSi_AlarmQueue = 0x021D37C0; +OSi_UseVAlarm = 0x021D37C8; +OSi_PreviousVCount = 0x021D37CC; +OSi_VFrameCount = 0x021D37D0; +OSi_VAlarmQueue = 0x021D37D4; +OSi_IsInitReset = 0x021D37DC; OSi_IsResetOccurred = 0x021D37E0; +OSi_vramExclusive = 0x021D37E4; +OSi_vramLockId = 0x021D37E8; cardi_common = 0x021D55C0; // Overlay From 4b97511982ecdecbac166218b86e786c5cb6718b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 25 Apr 2020 21:00:56 -0400 Subject: [PATCH 20/23] Split arm9 compilation to subdir --- .gitignore | 2 + Makefile | 11 +- arm7/Makefile | 175 ++ arm9/Makefile | 175 ++ arm9/arm9.lcf | 84 + {asm => arm9/asm}/CARD_arm9.s | 0 {asm => arm9/asm}/CP_arm9.s | 0 {asm => arm9/asm}/CTRDG_arm9.s | 0 {asm => arm9/asm}/DGT_arm9.s | 0 {asm => arm9/asm}/FS_arm9.s | 0 {asm => arm9/asm}/GX_arm9.s | 0 {asm => arm9/asm}/MATH_arm9.s | 0 {asm => arm9/asm}/MI_arm9.s | 0 {asm => arm9/asm}/OS_arm9.s | 0 {asm => arm9/asm}/PM_arm9.s | 0 {asm => arm9/asm}/PXI_arm9.s | 0 {asm => arm9/asm}/RTC_arm9.s | 0 {asm => arm9/asm}/SDK_AUTOLOAD_LIST.s | 5 +- {asm => arm9/asm}/SND_arm9.s | 0 {asm => arm9/asm}/SPI_arm9.s | 0 {asm => arm9/asm}/STD_arm9.s | 0 {asm => arm9/asm}/WM_arm9.s | 0 {asm => arm9/asm}/arm9_itcm.s | 0 {asm => arm9/asm}/arm9overlay.s | 0 {asm => arm9/asm}/crt0.s | 0 {asm => arm9/asm}/filesystem.s | 0 arm9/asm/macros.inc | 1 + arm9/asm/macros/function.inc | 24 + {asm => arm9/asm}/rom2.s | 0 {asm => arm9/asm}/rom2_2.s | 0 {asm => arm9/asm}/scrcmd.s | 0 {asm => arm9/asm}/secure.s | 0 {asm => arm9/asm}/unk_02000E0C.s | 0 {asm => arm9/asm}/unk_020023C0.s | 0 {asm => arm9/asm}/unk_02006864.s | 0 {asm => arm9/asm}/unk_02038C78.s | 0 {asm => arm9/asm}/unk_02046030.s | 0 {asm => arm9/asm}/unk_0208AC14.s | 0 {asm => arm9/asm}/unk_020AF030.s | 0 {asm => arm9/asm}/unk_10b724.s | 0 arm9/global.inc | 3521 +++++++++++++++++++++++++ {src => arm9/src}/FUN_02000DF4.c | 0 {src => arm9/src}/main.c | 0 {src => arm9/src}/script.c | 0 {src => arm9/src}/string_util.c | 0 arm9/undefined_syms.txt | 506 ++++ pokediamond.lcf | 77 +- 47 files changed, 4504 insertions(+), 77 deletions(-) create mode 100644 arm7/Makefile create mode 100644 arm9/Makefile create mode 100644 arm9/arm9.lcf rename {asm => arm9/asm}/CARD_arm9.s (100%) rename {asm => arm9/asm}/CP_arm9.s (100%) rename {asm => arm9/asm}/CTRDG_arm9.s (100%) rename {asm => arm9/asm}/DGT_arm9.s (100%) rename {asm => arm9/asm}/FS_arm9.s (100%) rename {asm => arm9/asm}/GX_arm9.s (100%) rename {asm => arm9/asm}/MATH_arm9.s (100%) rename {asm => arm9/asm}/MI_arm9.s (100%) rename {asm => arm9/asm}/OS_arm9.s (100%) rename {asm => arm9/asm}/PM_arm9.s (100%) rename {asm => arm9/asm}/PXI_arm9.s (100%) rename {asm => arm9/asm}/RTC_arm9.s (100%) rename {asm => arm9/asm}/SDK_AUTOLOAD_LIST.s (77%) rename {asm => arm9/asm}/SND_arm9.s (100%) rename {asm => arm9/asm}/SPI_arm9.s (100%) rename {asm => arm9/asm}/STD_arm9.s (100%) rename {asm => arm9/asm}/WM_arm9.s (100%) rename {asm => arm9/asm}/arm9_itcm.s (100%) rename {asm => arm9/asm}/arm9overlay.s (100%) rename {asm => arm9/asm}/crt0.s (100%) rename {asm => arm9/asm}/filesystem.s (100%) create mode 100644 arm9/asm/macros.inc create mode 100644 arm9/asm/macros/function.inc rename {asm => arm9/asm}/rom2.s (100%) rename {asm => arm9/asm}/rom2_2.s (100%) rename {asm => arm9/asm}/scrcmd.s (100%) rename {asm => arm9/asm}/secure.s (100%) rename {asm => arm9/asm}/unk_02000E0C.s (100%) rename {asm => arm9/asm}/unk_020023C0.s (100%) rename {asm => arm9/asm}/unk_02006864.s (100%) rename {asm => arm9/asm}/unk_02038C78.s (100%) rename {asm => arm9/asm}/unk_02046030.s (100%) rename {asm => arm9/asm}/unk_0208AC14.s (100%) rename {asm => arm9/asm}/unk_020AF030.s (100%) rename {asm => arm9/asm}/unk_10b724.s (100%) create mode 100644 arm9/global.inc rename {src => arm9/src}/FUN_02000DF4.c (100%) rename {src => arm9/src}/main.c (100%) rename {src => arm9/src}/script.c (100%) rename {src => arm9/src}/string_util.c (100%) create mode 100644 arm9/undefined_syms.txt diff --git a/.gitignore b/.gitignore index b6cffd404..43a15d119 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,8 @@ tools/mwccarm/** # Build folder build/** +arm7/build/** +arm9/build/** # CLion folders .idea/ diff --git a/Makefile b/Makefile index 763dd7149..d5a3c4107 100644 --- a/Makefile +++ b/Makefile @@ -54,6 +54,8 @@ S_FILES := $(foreach dir,$(ASM_DIRS),$(wildcard $(dir)/*.s)) O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \ $(foreach file,$(S_FILES),$(BUILD_DIR)/$(file:.s=.o)) \ +ARM9BIN := arm9/build/arm9.bin + ##################### Compiler Options ####################### MWCCVERSION := 2.0/base @@ -107,7 +109,7 @@ else NODEP := 1 endif -.PHONY: all clean mostlyclean tidy tools $(TOOLDIRS) patch_mwasmarm +.PHONY: all clean mostlyclean tidy tools $(TOOLDIRS) patch_mwasmarm $(ARM9BIN) MAKEFLAGS += --no-print-directory @@ -133,6 +135,9 @@ $(MWASMARM): patch_mwasmarm patch_mwasmarm: $(MWASMARM_PATCHER) $(MWASMARM) +$(ARM9BIN): + @$(MAKE) -C arm9 + ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(ASM_DIRS)) $(BUILD_DIR)/%.o: %.c @@ -144,8 +149,8 @@ $(BUILD_DIR)/%.o: %.s $(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) undefined_syms.txt $(CPP) $(VERSION_CFLAGS) -MMD -MP -MT $@ -MF $@.d -I include/ -I . -DBUILD_DIR=$(BUILD_DIR) -o $@ $< -$(ELF): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT) - $(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES) +$(ELF): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT) $(ARM9BIN) + $(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES) $(ARM9BIN) $(ROM): $(ELF) $(OBJCOPY) -O binary --gap-fill=0xFF --pad-to=0x04000000 $< $@ diff --git a/arm7/Makefile b/arm7/Makefile new file mode 100644 index 000000000..763dd7149 --- /dev/null +++ b/arm7/Makefile @@ -0,0 +1,175 @@ +# Makefile to build Pokemon Diamond image + +.PHONY: clean tidy all default patch_mwasmarm + +# Try to include devkitarm if installed +TOOLCHAIN := $(DEVKITARM) + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +endif + +### Default target ### + +default: all + +# If you are using WSL, it is recommended you build with NOWINE=1. +WSLENV ?= no +ifeq ($(WSLENV),) +NOWINE = 1 +else +NOWINE = 0 +endif + +ifeq ($(OS),Windows_NT) +EXE := .exe +WINE := +else +EXE := +WINE := wine +endif + +ifeq ($(NOWINE),1) +WINE := +endif + +################ Target Executable and Sources ############### + +BUILD_DIR := build + +TARGET := pokediamond.us + +ROM := $(BUILD_DIR)/$(TARGET).nds +ELF := $(BUILD_DIR)/$(TARGET).elf +LD_SCRIPT := pokediamond.lcf + +# Directories containing source files +SRC_DIRS := src +ASM_DIRS := asm data files + +C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) +S_FILES := $(foreach dir,$(ASM_DIRS),$(wildcard $(dir)/*.s)) + +# Object files +O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \ + $(foreach file,$(S_FILES),$(BUILD_DIR)/$(file:.s=.o)) \ + +##################### Compiler Options ####################### + +MWCCVERSION := 2.0/base + +CROSS := arm-none-eabi- + +MWCCARM := tools/mwccarm/$(MWCCVERSION)/mwccarm.exe +# Argh... due to EABI version shenanigans, we can't use GNU LD to link together +# MWCC built objects and GNU built ones. mwldarm, however, doesn't care, so we +# have to use mwldarm for now. +# TODO: Is there a hack workaround to let us go back to GNU LD? Ideally, the +# only dependency should be MWCCARM. +MWLDARM := tools/mwccarm/$(MWCCVERSION)/mwldarm.exe +MWASMARM := tools/mwccarm/$(MWCCVERSION)/mwasmarm.exe + +AS := $(WINE) $(MWASMARM) +CC := $(WINE) $(MWCCARM) +CPP := cpp -P +LD := $(WINE) $(MWLDARM) +AR := $(CROSS)ar +OBJDUMP := $(CROSS)objdump +OBJCOPY := $(CROSS)objcopy + +# ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o +ASFLAGS = -proc arm5te +CFLAGS = -O4,p -proc v5te -thumb -fp soft -lang c99 -Cpp_exceptions off -ir include +LDFLAGS = -map -nodead -w off -proc v5te -interworking -map -symtab -m _start + +####################### Other Tools ######################### + +# DS TOOLS +TOOLS_DIR = tools +SHA1SUM = sha1sum +JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc +GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx +MWASMARM_PATCHER = $(TOOLS_DIR)/mwasmarm_patcher/mwasmarm_patcher$(EXE) + +TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm,$(wildcard $(TOOLS_DIR)/*)) +TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%) +TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE)) + +######################### Targets ########################### + +infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) + +# Build tools when building the rom +# Disable dependency scanning for clean/tidy/tools +ifeq (,$(filter-out all,$(MAKECMDGOALS))) +$(call infoshell, $(MAKE) tools patch_mwasmarm) +else +NODEP := 1 +endif + +.PHONY: all clean mostlyclean tidy tools $(TOOLDIRS) patch_mwasmarm + +MAKEFLAGS += --no-print-directory + +all: $(ROM) + @$(SHA1SUM) -c $(TARGET).sha1 + +clean: mostlyclean + make -C tools/mwasmarm_patcher clean + +mostlyclean: tidy + find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' \) -exec $(RM) {} + + +tidy: + $(RM) -r $(BUILD_DIR) + +tools: $(TOOLDIRS) + +$(TOOLDIRS): + @$(MAKE) -C $@ + +$(MWASMARM): patch_mwasmarm + +patch_mwasmarm: + $(MWASMARM_PATCHER) $(MWASMARM) + +ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(ASM_DIRS)) + +$(BUILD_DIR)/%.o: %.c + $(CC) -c $(CFLAGS) -o $@ $< + +$(BUILD_DIR)/%.o: %.s + $(AS) $(ASFLAGS) $< -o $@ + +$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) undefined_syms.txt + $(CPP) $(VERSION_CFLAGS) -MMD -MP -MT $@ -MF $@.d -I include/ -I . -DBUILD_DIR=$(BUILD_DIR) -o $@ $< + +$(ELF): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT) + $(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES) + +$(ROM): $(ELF) + $(OBJCOPY) -O binary --gap-fill=0xFF --pad-to=0x04000000 $< $@ + +# Make sure build directory exists before compiling anything +DUMMY != mkdir -p $(ALL_DIRS) + +%.4bpp: %.png + $(GFX) $< $@ + +%.gbapal: %.png + $(GFX) $< $@ + +%.gbapal: %.pal + $(GFX) $< $@ + +%.lz: % + $(GFX) $< $@ + +%.png: ; +%.pal: ; + +$(BUILD_DIR)/data/icon.o: graphics/icon.4bpp graphics/icon.gbapal + +### Debug Print ### + +print-% : ; $(info $* is a $(flavor $*) variable set to [$($*)]) @true diff --git a/arm9/Makefile b/arm9/Makefile new file mode 100644 index 000000000..5c6b4fdac --- /dev/null +++ b/arm9/Makefile @@ -0,0 +1,175 @@ +# Makefile to build Pokemon Diamond image + +.PHONY: clean tidy all default patch_mwasmarm + +# Try to include devkitarm if installed +TOOLCHAIN := $(DEVKITARM) + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +endif + +### Default target ### + +default: all + +# If you are using WSL, it is recommended you build with NOWINE=1. +WSLENV ?= no +ifeq ($(WSLENV),) +NOWINE = 1 +else +NOWINE = 0 +endif + +ifeq ($(OS),Windows_NT) +EXE := .exe +WINE := +else +EXE := +WINE := wine +endif + +ifeq ($(NOWINE),1) +WINE := +endif + +################ Target Executable and Sources ############### + +BUILD_DIR := build + +TARGET := arm9 + +ROM := $(BUILD_DIR)/$(TARGET).bin +ELF := $(BUILD_DIR)/$(TARGET).elf +LD_SCRIPT := arm9.lcf + +# Directories containing source files +SRC_DIRS := src +ASM_DIRS := asm data files + +C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) +S_FILES := $(foreach dir,$(ASM_DIRS),$(wildcard $(dir)/*.s)) + +# Object files +O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \ + $(foreach file,$(S_FILES),$(BUILD_DIR)/$(file:.s=.o)) \ + +##################### Compiler Options ####################### + +MWCCVERSION := 2.0/base +TOOLS_DIR = ../tools + +CROSS := arm-none-eabi- + +MWCCARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwccarm.exe +# Argh... due to EABI version shenanigans, we can't use GNU LD to link together +# MWCC built objects and GNU built ones. mwldarm, however, doesn't care, so we +# have to use mwldarm for now. +# TODO: Is there a hack workaround to let us go back to GNU LD? Ideally, the +# only dependency should be MWCCARM. +MWLDARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwldarm.exe +MWASMARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwasmarm.exe + +AS := $(WINE) $(MWASMARM) +CC := $(WINE) $(MWCCARM) +CPP := cpp -P +LD := $(WINE) $(MWLDARM) +AR := $(CROSS)ar +OBJDUMP := $(CROSS)objdump +OBJCOPY := $(CROSS)objcopy + +# ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o +ASFLAGS = -proc arm5te +CFLAGS = -O4,p -proc v5te -thumb -fp soft -lang c99 -Cpp_exceptions off -ir ../include +LDFLAGS = -map -nodead -w off -proc v5te -interworking -map -symtab -m _start + +####################### Other Tools ######################### + +# DS TOOLS +SHA1SUM = sha1sum +JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc +GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx +MWASMARM_PATCHER = $(TOOLS_DIR)/mwasmarm_patcher/mwasmarm_patcher$(EXE) + +TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm,$(wildcard $(TOOLS_DIR)/*)) +TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%) +TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE)) + +######################### Targets ########################### + +infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) + +# Build tools when building the rom +# Disable dependency scanning for clean/tidy/tools +ifeq (,$(filter-out all,$(MAKECMDGOALS))) +$(call infoshell, $(MAKE) tools patch_mwasmarm) +else +NODEP := 1 +endif + +.PHONY: all clean mostlyclean tidy tools $(TOOLDIRS) patch_mwasmarm + +MAKEFLAGS += --no-print-directory + +all: $(ROM) + # @$(SHA1SUM) -c $(TARGET).sha1 + +clean: mostlyclean + make -C $(TOOLS_DIR)/mwasmarm_patcher clean + +mostlyclean: tidy + find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' \) -exec $(RM) {} + + +tidy: + $(RM) -r $(BUILD_DIR) + +tools: $(TOOLDIRS) + +$(TOOLDIRS): + @$(MAKE) -C $@ + +$(MWASMARM): patch_mwasmarm + +patch_mwasmarm: + $(MWASMARM_PATCHER) $(MWASMARM) + +ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(ASM_DIRS)) + +$(BUILD_DIR)/%.o: %.c + $(CC) -c $(CFLAGS) -o $@ $< + +$(BUILD_DIR)/%.o: %.s + $(AS) $(ASFLAGS) $< -o $@ + +$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) undefined_syms.txt + $(CPP) $(VERSION_CFLAGS) -MMD -MP -MT $@ -MF $@.d -I include/ -I . -DBUILD_DIR=$(BUILD_DIR) -o $@ $< + +$(ELF): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT) + $(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES) + +$(ROM): $(ELF) + $(OBJCOPY) -O binary --gap-fill=0xFF $< $@ + +# Make sure build directory exists before compiling anything +DUMMY != mkdir -p $(ALL_DIRS) + +%.4bpp: %.png + $(GFX) $< $@ + +%.gbapal: %.png + $(GFX) $< $@ + +%.gbapal: %.pal + $(GFX) $< $@ + +%.lz: % + $(GFX) $< $@ + +%.png: ; +%.pal: ; + +$(BUILD_DIR)/data/icon.o: graphics/icon.4bpp graphics/icon.gbapal + +### Debug Print ### + +print-% : ; $(info $* is a $(flavor $*) variable set to [$($*)]) @true diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf new file mode 100644 index 000000000..c5f29baf8 --- /dev/null +++ b/arm9/arm9.lcf @@ -0,0 +1,84 @@ +MEMORY { + .itcm (RWX) : ORIGIN=0x01FF8000, LENGTH=0 + .text (RX) : ORIGIN=0x02000000, LENGTH=0 + .data (R) : ORIGIN=0x20EC710, LENGTH=0 + .autoload (R) : ORIGIN=0x02107700, LENGTH=0 + .bss (RWX) : ORIGIN=0x02106FA0, LENGTH=0 + .ewram (RWX) : ORIGIN=0x023E0000, LENGTH=0 + .dtcm (RW) : ORIGIN=0x027E0000, LENGTH=0 + .overlay (RX) : ORIGIN=0, LENGTH=0 +} + +SECTIONS { +#include "undefined_syms.txt" + .text : AT (0x0) { + secure.o (.text) + crt0.o (.text) + main.o (.text) + FUN_02000DF4.o (.text) + unk_02000E0C.o (.text) + string_util.o (.text) + unk_020023C0.o (.text) + filesystem.o (.text) + unk_02006864.o (.text) + script.o (.text) + unk_02038C78.o (.text) + scrcmd.o (.text) + unk_02046030.o (.text) + unk_0208AC14.o (.text) + unk_020AF030.o (.text) + /* SDK */ + GX_arm9.o (.text) + OS_arm9.o (.text) + MI_arm9.o (.text) + SND_arm9.o (.text) + PXI_arm9.o (.text) + FS_arm9.o (.text) + DGT_arm9.o (.text) + CP_arm9.o (.text) + SPI_arm9.o (.text) + PM_arm9.o (.text) + RTC_arm9.o (.text) + CARD_arm9.o (.text) + WM_arm9.o (.text) + CTRDG_arm9.o (.text) + MATH_arm9.o (.text) + STD_arm9.o (.text) + } > .text + + .data : AT (0xEC710) { + rom2.o (.data) + string_util.o (.data) + rom2_2.o (.data) + } > .data + + SDK_AUTOLOAD_START = .; + SDK_STATIC_BSS_START = .; + SDK_STATIC_BSS_END = . + 0xd0540; + + .itcm : AT (0x106FA0) + { + SDK_AUTOLOAD_ITCM_START = .; + arm9_itcm.o (.itcm) + SDK_AUTOLOAD_ITCM_END = .; + . = 0x01FF8720; + SDK_SECTION_ARENA_ITCM_START = .; + } > .itcm + + .autoload : AT (0x107700) { + SDK_AUTOLOAD_LIST.o (.data) + unk_10b724.o (.text) + } > .autoload + + .overlay : AT (0x107800) { + arm9overlay.o (.text) + } > .overlay + + .dtcm : AT (0x1076A0) { + SDK_AUTOLOAD_DTCM_START = .; + OS_arm9.o (.dtcm) + SDK_AUTOLOAD_DTCM_END = .; + SDK_SECTION_ARENA_DTCM_START = 0x027E0080; + } > .dtcm + +} diff --git a/asm/CARD_arm9.s b/arm9/asm/CARD_arm9.s similarity index 100% rename from asm/CARD_arm9.s rename to arm9/asm/CARD_arm9.s diff --git a/asm/CP_arm9.s b/arm9/asm/CP_arm9.s similarity index 100% rename from asm/CP_arm9.s rename to arm9/asm/CP_arm9.s diff --git a/asm/CTRDG_arm9.s b/arm9/asm/CTRDG_arm9.s similarity index 100% rename from asm/CTRDG_arm9.s rename to arm9/asm/CTRDG_arm9.s diff --git a/asm/DGT_arm9.s b/arm9/asm/DGT_arm9.s similarity index 100% rename from asm/DGT_arm9.s rename to arm9/asm/DGT_arm9.s diff --git a/asm/FS_arm9.s b/arm9/asm/FS_arm9.s similarity index 100% rename from asm/FS_arm9.s rename to arm9/asm/FS_arm9.s diff --git a/asm/GX_arm9.s b/arm9/asm/GX_arm9.s similarity index 100% rename from asm/GX_arm9.s rename to arm9/asm/GX_arm9.s diff --git a/asm/MATH_arm9.s b/arm9/asm/MATH_arm9.s similarity index 100% rename from asm/MATH_arm9.s rename to arm9/asm/MATH_arm9.s diff --git a/asm/MI_arm9.s b/arm9/asm/MI_arm9.s similarity index 100% rename from asm/MI_arm9.s rename to arm9/asm/MI_arm9.s diff --git a/asm/OS_arm9.s b/arm9/asm/OS_arm9.s similarity index 100% rename from asm/OS_arm9.s rename to arm9/asm/OS_arm9.s diff --git a/asm/PM_arm9.s b/arm9/asm/PM_arm9.s similarity index 100% rename from asm/PM_arm9.s rename to arm9/asm/PM_arm9.s diff --git a/asm/PXI_arm9.s b/arm9/asm/PXI_arm9.s similarity index 100% rename from asm/PXI_arm9.s rename to arm9/asm/PXI_arm9.s diff --git a/asm/RTC_arm9.s b/arm9/asm/RTC_arm9.s similarity index 100% rename from asm/RTC_arm9.s rename to arm9/asm/RTC_arm9.s diff --git a/asm/SDK_AUTOLOAD_LIST.s b/arm9/asm/SDK_AUTOLOAD_LIST.s similarity index 77% rename from asm/SDK_AUTOLOAD_LIST.s rename to arm9/asm/SDK_AUTOLOAD_LIST.s index 8043d6162..a2d1d5fec 100644 --- a/asm/SDK_AUTOLOAD_LIST.s +++ b/arm9/asm/SDK_AUTOLOAD_LIST.s @@ -1,13 +1,14 @@ .include "asm/macros.inc" + .include "global.inc" .section .data .global SDK_AUTOLOAD_LIST SDK_AUTOLOAD_LIST: ; 0x02107700 - .word 0x01FF8000 + .word SDK_AUTOLOAD_ITCM_START .word 0x00000700 .word 0x00000000 - .word 0x027e0000 + .word SDK_AUTOLOAD_DTCM_START .word 0x00000060 .word 0x00000020 diff --git a/asm/SND_arm9.s b/arm9/asm/SND_arm9.s similarity index 100% rename from asm/SND_arm9.s rename to arm9/asm/SND_arm9.s diff --git a/asm/SPI_arm9.s b/arm9/asm/SPI_arm9.s similarity index 100% rename from asm/SPI_arm9.s rename to arm9/asm/SPI_arm9.s diff --git a/asm/STD_arm9.s b/arm9/asm/STD_arm9.s similarity index 100% rename from asm/STD_arm9.s rename to arm9/asm/STD_arm9.s diff --git a/asm/WM_arm9.s b/arm9/asm/WM_arm9.s similarity index 100% rename from asm/WM_arm9.s rename to arm9/asm/WM_arm9.s diff --git a/asm/arm9_itcm.s b/arm9/asm/arm9_itcm.s similarity index 100% rename from asm/arm9_itcm.s rename to arm9/asm/arm9_itcm.s diff --git a/asm/arm9overlay.s b/arm9/asm/arm9overlay.s similarity index 100% rename from asm/arm9overlay.s rename to arm9/asm/arm9overlay.s diff --git a/asm/crt0.s b/arm9/asm/crt0.s similarity index 100% rename from asm/crt0.s rename to arm9/asm/crt0.s diff --git a/asm/filesystem.s b/arm9/asm/filesystem.s similarity index 100% rename from asm/filesystem.s rename to arm9/asm/filesystem.s diff --git a/arm9/asm/macros.inc b/arm9/asm/macros.inc new file mode 100644 index 000000000..156b2b09e --- /dev/null +++ b/arm9/asm/macros.inc @@ -0,0 +1 @@ + .include "asm/macros/function.inc" diff --git a/arm9/asm/macros/function.inc b/arm9/asm/macros/function.inc new file mode 100644 index 000000000..6b9e5f40e --- /dev/null +++ b/arm9/asm/macros/function.inc @@ -0,0 +1,24 @@ + .macro arm_func_start name + .balign 4, 0 + .global \name + .arm + .endm + + .macro arm_func_end name + .size \name, .-\name + .endm + + .macro thumb_func_start name + .balign 4, 0 + .global \name + .thumb + .endm + + .macro non_word_aligned_thumb_func_start name + .global \name + .thumb + .endm + + .macro thumb_func_end name + .size \name, .-\name + .endm diff --git a/asm/rom2.s b/arm9/asm/rom2.s similarity index 100% rename from asm/rom2.s rename to arm9/asm/rom2.s diff --git a/asm/rom2_2.s b/arm9/asm/rom2_2.s similarity index 100% rename from asm/rom2_2.s rename to arm9/asm/rom2_2.s diff --git a/asm/scrcmd.s b/arm9/asm/scrcmd.s similarity index 100% rename from asm/scrcmd.s rename to arm9/asm/scrcmd.s diff --git a/asm/secure.s b/arm9/asm/secure.s similarity index 100% rename from asm/secure.s rename to arm9/asm/secure.s diff --git a/asm/unk_02000E0C.s b/arm9/asm/unk_02000E0C.s similarity index 100% rename from asm/unk_02000E0C.s rename to arm9/asm/unk_02000E0C.s diff --git a/asm/unk_020023C0.s b/arm9/asm/unk_020023C0.s similarity index 100% rename from asm/unk_020023C0.s rename to arm9/asm/unk_020023C0.s diff --git a/asm/unk_02006864.s b/arm9/asm/unk_02006864.s similarity index 100% rename from asm/unk_02006864.s rename to arm9/asm/unk_02006864.s diff --git a/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s similarity index 100% rename from asm/unk_02038C78.s rename to arm9/asm/unk_02038C78.s diff --git a/asm/unk_02046030.s b/arm9/asm/unk_02046030.s similarity index 100% rename from asm/unk_02046030.s rename to arm9/asm/unk_02046030.s diff --git a/asm/unk_0208AC14.s b/arm9/asm/unk_0208AC14.s similarity index 100% rename from asm/unk_0208AC14.s rename to arm9/asm/unk_0208AC14.s diff --git a/asm/unk_020AF030.s b/arm9/asm/unk_020AF030.s similarity index 100% rename from asm/unk_020AF030.s rename to arm9/asm/unk_020AF030.s diff --git a/asm/unk_10b724.s b/arm9/asm/unk_10b724.s similarity index 100% rename from asm/unk_10b724.s rename to arm9/asm/unk_10b724.s diff --git a/arm9/global.inc b/arm9/global.inc new file mode 100644 index 000000000..d25362f36 --- /dev/null +++ b/arm9/global.inc @@ -0,0 +1,3521 @@ +.extern CARD_CancelBackupAsync +.extern CARD_GetResultCode +.extern CARD_IdentifyBackup +.extern CARD_Init +.extern CARD_IsPulledOut +.extern CARD_LockBackup +.extern CARD_LockRom +.extern CARD_TryWaitBackupAsync +.extern CARD_UnlockBackup +.extern CARD_UnlockRom +.extern CARD_WaitBackupAsync +.extern CARDi_ReadRom +.extern CARDi_RequestStreamCommand +.extern CP_RestoreContext +.extern CP_SaveContext +.extern CTRDG_Init +.extern CTRDG_IsExisting +.extern CTRDG_IsPulledOut +.extern Call_FillMemWithValue +.extern ConvertUIntToDecimalString +.extern DC_FlushAll +.extern DC_FlushRange +.extern DC_InvalidateAll +.extern DC_InvalidateRange +.extern DC_StoreAll +.extern DC_StoreRange +.extern DC_WaitWriteBufferEmpty +.extern DGT_Hash1GetDigest_R +.extern DGT_Hash1Reset +.extern DGT_Hash1SetSource +.extern DGTi_hash2_arm4_small +.extern ErrorHandling +.extern FS_CloseFile +.extern FS_ConvertPathToFileID +.extern FS_FindArchive +.extern FS_Init +.extern FS_InitFile +.extern FS_IsAvailable +.extern FS_LoadOverlay +.extern FS_LoadOverlayImage +.extern FS_LoadOverlayImageAsync +.extern FS_LoadOverlayInfo +.extern FS_OpenFile +.extern FS_OpenFileFast +.extern FS_ReadFile +.extern FS_SeekFile +.extern FS_SetDefaultDMA +.extern FS_StartOverlay +.extern FS_TryLoadTable +.extern FS_UnloadOverlay +.extern FS_WaitAsync +.extern FUNRTC_Init +.extern FUN_0200019E +.extern FUN_020002FE +.extern SVC_WaitByLoop +.extern OSi_ReferSymbol +.extern FUN_02000DF4 +.extern FUN_02000E7C +.extern FUN_02000EE8 +.extern FUN_02000F18 +.extern FUN_02000FA4 +.extern FUN_02000FE8 +.extern FUN_020010A8 +.extern FUN_02001204 +.extern FUN_02001300 +.extern FUN_020013E8 +.extern FUN_02001448 +.extern FUN_02001470 +.extern FUN_02001B8C +.extern FUN_02001C14 +.extern FUN_02001C5C +.extern FUN_02001C78 +.extern FUN_02001D2C +.extern FUN_02001E5C +.extern FUN_020020EC +.extern FUN_02002198 +.extern FUN_020021AC +.extern FUN_02002840 +.extern FUN_02002B60 +.extern FUN_02002B7C +.extern FUN_02002BB8 +.extern FUN_02002C14 +.extern FUN_02002C50 +.extern FUN_02002C84 +.extern FUN_02002CC0 +.extern FUN_02002CF8 +.extern FUN_02002DB0 +.extern FUN_02002DE0 +.extern FUN_02002E14 +.extern FUN_02002E4C +.extern FUN_02002ED0 +.extern FUN_02002EEC +.extern FUN_02002F08 +.extern FUN_02002FD0 +.extern FUN_02002FEC +.extern FUN_02003008 +.extern FUN_02003038 +.extern FUN_02003054 +.extern FUN_020030E8 +.extern FUN_02003108 +.extern FUN_020031FC +.extern FUN_02003210 +.extern FUN_0200372C +.extern FUN_020038E4 +.extern FUN_020038F0 +.extern FUN_02003974 +.extern FUN_02003B98 +.extern FUN_02003C10 +.extern FUN_020040F4 +.extern FUN_02004104 +.extern FUN_02004124 +.extern FUN_0200414C +.extern FUN_0200415C +.extern FUN_0200433C +.extern FUN_02004724 +.extern FUN_020047C8 +.extern FUN_02004810 +.extern FUN_0200488C +.extern FUN_02004DCC +.extern FUN_02004E08 +.extern FUN_0200516C +.extern FUN_020051F4 +.extern FUN_0200521C +.extern FUN_02005308 +.extern FUN_02005350 +.extern FUN_0200538C +.extern FUN_020053CC +.extern FUN_02005404 +.extern FUN_02005410 +.extern FUN_0200541C +.extern FUN_020054C8 +.extern FUN_020054F0 +.extern FUN_02005508 +.extern FUN_02005514 +.extern FUN_02005578 +.extern FUN_02005670 +.extern FUN_020056AC +.extern FUN_02005C28 +.extern FUN_02005CBC +.extern FUN_02005D20 +.extern FUN_02005E28 +.extern FUN_02005E64 +.extern FUN_02005E6C +.extern FUN_02005E80 +.extern FUN_02005E90 +.extern FUN_02005F14 +.extern FUN_02005F60 +.extern FUN_02005FDC +.extern FUN_020061E8 +.extern FUN_0200621C +.extern FUN_02006234 +.extern FUN_02006260 +.extern FUN_02006268 +.extern FUN_02006278 +.extern FUN_0200627C +.extern FUN_0200628C +.extern FUN_02006290 +.extern FUN_02006528 +.extern FUN_02006548 +.extern FUN_02006564 +.extern FUN_02006670 +.extern FUN_020066F4 +.extern FUN_02006704 +.extern FUN_02006774 +.extern FUN_02006814 +.extern FUN_0200687C +.extern FUN_020068C8 +.extern FUN_02006930 +.extern FUN_02006BB0 +.extern FUN_02006C08 +.extern FUN_02006C98 +.extern FUN_02006D98 +.extern FUN_02006ED4 +.extern FUN_020072E8 +.extern FUN_02007314 +.extern FUN_0200737C +.extern FUN_02007390 +.extern FUN_020073A0 +.extern FUN_02007534 +.extern FUN_02007558 +.extern FUN_0200782C +.extern FUN_020079E0 +.extern FUN_02007E68 +.extern FUN_02007E98 +.extern FUN_02007F20 +.extern FUN_020080D0 +.extern FUN_020081C4 +.extern FUN_02008AA4 +.extern FUN_02008BE0 +.extern FUN_02008C80 +.extern FUN_02008C9C +.extern FUN_02008D24 +.extern FUN_02008DEC +.extern FUN_02008E2C +.extern FUN_02008F34 +.extern FUN_02008FEC +.extern FUN_020090AC +.extern FUN_02009168 +.extern FUN_020093A8 +.extern FUN_02009424 +.extern FUN_02009448 +.extern FUN_02009630 +.extern FUN_0200965C +.extern FUN_02009668 +.extern FUN_020096B4 +.extern FUN_020096CC +.extern FUN_02009A50 +.extern FUN_02009B04 +.extern FUN_02009B44 +.extern FUN_02009B78 +.extern FUN_02009C0C +.extern FUN_02009C30 +.extern FUN_02009CF0 +.extern FUN_02009DAC +.extern FUN_02009DE0 +.extern FUN_02009E04 +.extern FUN_02009E28 +.extern FUN_02009E88 +.extern FUN_02009EAC +.extern FUN_02009F80 +.extern FUN_02009FA0 +.extern FUN_0200A208 +.extern FUN_0200A274 +.extern FUN_0200A2AC +.extern FUN_0200A318 +.extern FUN_0200A344 +.extern FUN_0200A648 +.extern FUN_0200A738 +.extern FUN_0200A86C +.extern FUN_0200A8B8 +.extern FUN_0200A8E0 +.extern FUN_0200A914 +.extern FUN_0200A968 +.extern FUN_0200A99C +.extern FUN_0200A9C4 +.extern FUN_0200AA50 +.extern FUN_0200AA80 +.extern FUN_0200AA90 +.extern FUN_0200AB18 +.extern FUN_0200ABB4 +.extern FUN_0200ABC0 +.extern FUN_0200ABE4 +.extern FUN_0200AC0C +.extern FUN_0200AC60 +.extern FUN_0200ACA4 +.extern FUN_0200ACC0 +.extern FUN_0200ACF8 +.extern FUN_0200AD18 +.extern FUN_0200AD38 +.extern FUN_0200AD5C +.extern FUN_0200AD94 +.extern FUN_0200ADCC +.extern FUN_0200AE04 +.extern FUN_0200AE38 +.extern FUN_0200AE70 +.extern FUN_0200AEA8 +.extern FUN_0200AEE0 +.extern FUN_0200AF18 +.extern FUN_0200AF50 +.extern FUN_0200AFF4 +.extern FUN_0200B02C +.extern FUN_0200B064 +.extern FUN_0200B09C +.extern FUN_0200B164 +.extern FUN_0200B19C +.extern FUN_0200B1D4 +.extern FUN_0200B20C +.extern FUN_0200B244 +.extern FUN_0200B278 +.extern FUN_0200B2AC +.extern FUN_0200B350 +.extern FUN_0200B388 +.extern FUN_0200B410 +.extern FUN_0200B4A0 +.extern FUN_0200B4D8 +.extern FUN_0200B518 +.extern FUN_0200B534 +.extern FUN_0200B568 +.extern FUN_0200B59C +.extern FUN_0200B628 +.extern FUN_0200B660 +.extern FUN_0200B698 +.extern FUN_0200B6D0 +.extern FUN_0200B708 +.extern FUN_0200B764 +.extern FUN_0200B7A8 +.extern FUN_0200B7B8 +.extern FUN_0200B870 +.extern FUN_0200B990 +.extern FUN_0200B9A8 +.extern FUN_0200B9EC +.extern FUN_0200BA78 +.extern FUN_0200BB14 +.extern FUN_0200BB34 +.extern FUN_0200BB68 +.extern FUN_0200BB6C +.extern FUN_0200BBF0 +.extern FUN_0200BC1C +.extern FUN_0200BC30 +.extern FUN_0200BCE0 +.extern FUN_0200BD04 +.extern FUN_0200BD20 +.extern FUN_0200BE38 +.extern FUN_0200BF60 +.extern FUN_0200C00C +.extern FUN_0200C06C +.extern FUN_0200C0DC +.extern FUN_0200C124 +.extern FUN_0200C13C +.extern FUN_0200C154 +.extern FUN_0200C358 +.extern FUN_0200C368 +.extern FUN_0200C378 +.extern FUN_0200C388 +.extern FUN_0200C398 +.extern FUN_0200C3DC +.extern FUN_0200C5A8 +.extern FUN_0200C61C +.extern FUN_0200C63C +.extern FUN_0200C644 +.extern FUN_0200C664 +.extern FUN_0200C66C +.extern FUN_0200C6E4 +.extern FUN_0200C714 +.extern FUN_0200C75C +.extern FUN_0200C7A0 +.extern FUN_0200C82C +.extern FUN_0200C840 +.extern FUN_0200C884 +.extern FUN_0200C9D8 +.extern FUN_0200CA0C +.extern FUN_0200CA44 +.extern FUN_0200CAB4 +.extern FUN_0200CABC +.extern FUN_0200CAFC +.extern FUN_0200CB00 +.extern FUN_0200CCA4 +.extern FUN_0200CCF8 +.extern FUN_0200CD64 +.extern FUN_0200CD68 +.extern FUN_0200D0BC +.extern FUN_0200D0E0 +.extern FUN_0200D274 +.extern FUN_0200D300 +.extern FUN_0200D6F8 +.extern FUN_0200D858 +.extern FUN_0200DBFC +.extern FUN_0200DC4C +.extern FUN_0200DCA4 +.extern FUN_0200E1D0 +.extern FUN_0200E2D8 +.extern FUN_0200E308 +.extern FUN_0200E388 +.extern FUN_0200E394 +.extern FUN_0200E3A0 +.extern FUN_0200E3BC +.extern FUN_02011B20 +.extern FUN_02012420 +.extern FUN_0201259C +.extern FUN_020125D4 +.extern FUN_0201265C +.extern FUN_020126B4 +.extern FUN_020126D8 +.extern FUN_020126FC +.extern FUN_0201277C +.extern FUN_020127A8 +.extern FUN_020127C0 +.extern FUN_02012838 +.extern FUN_02012870 +.extern FUN_02012880 +.extern FUN_020128A0 +.extern FUN_02012CC8 +.extern FUN_02012CDC +.extern FUN_02012DE4 +.extern FUN_0201318C +.extern FUN_02013194 +.extern FUN_0201327C +.extern FUN_020132BC +.extern FUN_02013364 +.extern FUN_02013388 +.extern FUN_020133AC +.extern FUN_020133C8 +.extern FUN_020133E8 +.extern FUN_0201343C +.extern FUN_02013440 +.extern FUN_02013690 +.extern FUN_020136C0 +.extern FUN_020136E0 +.extern FUN_020136F8 +.extern FUN_0201373C +.extern FUN_02013754 +.extern FUN_0201385C +.extern FUN_02013918 +.extern FUN_02013920 +.extern FUN_02013924 +.extern FUN_02013928 +.extern FUN_02013960 +.extern FUN_020139D8 +.extern FUN_02013A10 +.extern FUN_02013A30 +.extern FUN_02013A9C +.extern FUN_02013B5C +.extern FUN_02013B68 +.extern FUN_02013B74 +.extern FUN_02013BC8 +.extern FUN_02013BE4 +.extern FUN_02013C0C +.extern FUN_02013C18 +.extern FUN_020142EC +.extern FUN_020143A8 +.extern FUN_020143D0 +.extern FUN_02014BF4 +.extern FUN_02014C28 +.extern FUN_02014C3C +.extern FUN_02014C54 +.extern FUN_02014D7C +.extern FUN_02014D9C +.extern FUN_02015CF8 +.extern FUN_02015E30 +.extern FUN_02015E60 +.extern FUN_02015EF4 +.extern FUN_02015F10 +.extern FUN_02015F1C +.extern FUN_02015F34 +.extern FUN_020161A4 +.extern FUN_020163BC +.extern FUN_02016438 +.extern FUN_02016464 +.extern FUN_0201669C +.extern FUN_020166C8 +.extern FUN_0201681C +.extern FUN_02016828 +.extern FUN_020168D0 +.extern FUN_02016998 +.extern FUN_020169D8 +.extern FUN_02016A18 +.extern FUN_02016A8C +.extern FUN_02016AF8 +.extern FUN_02016B94 +.extern FUN_02016BBC +.extern FUN_02016C18 +.extern FUN_020178A0 +.extern FUN_020178BC +.extern FUN_0201797C +.extern FUN_020179E0 +.extern FUN_02017B48 +.extern FUN_02017B54 +.extern FUN_02017CD0 +.extern FUN_02017CE8 +.extern FUN_02017DFC +.extern FUN_02017E14 +.extern FUN_02017F18 +.extern FUN_02017FB4 +.extern FUN_02017FE4 +.extern FUN_02018148 +.extern FUN_02018170 +.extern FUN_02018540 +.extern FUN_020186B4 +.extern FUN_02018744 +.extern FUN_0201886C +.extern FUN_02018884 +.extern FUN_02018FF4 +.extern FUN_0201901C +.extern FUN_02019048 +.extern FUN_02019064 +.extern FUN_02019150 +.extern FUN_02019178 +.extern FUN_020191A4 +.extern FUN_020191D0 +.extern FUN_02019220 +.extern FUN_02019548 +.extern FUN_02019570 +.extern FUN_0201958C +.extern FUN_02019620 +.extern FUN_02019658 +.extern FUN_020196F4 +.extern FUN_0201974C +.extern FUN_0201A8C8 +.extern FUN_0201AB08 +.extern FUN_0201AB0C +.extern FUN_0201AB10 +.extern FUN_0201AB14 +.extern FUN_0201AB18 +.extern FUN_0201AB60 +.extern FUN_0201AC68 +.extern FUN_0201AEE4 +.extern FUN_0201AFBC +.extern FUN_0201B234 +.extern FUN_0201B5CC +.extern FUN_0201B6C4 +.extern FUN_0201B6C8 +.extern FUN_0201B6D0 +.extern FUN_0201B76C +.extern FUN_0201B7DC +.extern FUN_0201B8B8 +.extern FUN_0201B8E0 +.extern FUN_0201B914 +.extern FUN_0201B93C +.extern FUN_0201B970 +.extern FUN_0201B9D4 +.extern FUN_0201B9E0 +.extern FUN_0201B9EC +.extern FUN_0201BA10 +.extern FUN_0201BA1C +.extern FUN_0201BA60 +.extern FUN_0201BCBC +.extern FUN_0201BD5C +.extern FUN_0201BD70 +.extern FUN_0201BD7C +.extern FUN_0201BD84 +.extern FUN_0201BDE0 +.extern FUN_0201BE3C +.extern FUN_0201C05C +.extern FUN_0201C1EC +.extern FUN_0201C24C +.extern FUN_0201C29C +.extern FUN_0201C30C +.extern FUN_0201C620 +.extern FUN_0201C638 +.extern FUN_0201CC08 +.extern FUN_0201CC24 +.extern FUN_0201CD04 +.extern FUN_0201CDD0 +.extern FUN_0201CE04 +.extern FUN_0201D040 +.extern FUN_0201D12C +.extern FUN_0201D168 +.extern FUN_0201E00C +.extern FUN_0201E08C +.extern FUN_0201E0BC +.extern FUN_0201E28C +.extern FUN_0201E66C +.extern FUN_0201E6D8 +.extern FUN_0201E6E4 +.extern FUN_0201E740 +.extern FUN_0201E74C +.extern FUN_0201E788 +.extern FUN_0201E7A0 +.extern FUN_0201EB64 +.extern FUN_0201EB70 +.extern FUN_0201EB8C +.extern FUN_0201EBA4 +.extern FUN_0201EC68 +.extern FUN_0201EC88 +.extern FUN_0201EC94 +.extern FUN_0201ED10 +.extern FUN_0201EEF0 +.extern FUN_0201EF70 +.extern FUN_0201EF90 +.extern FUN_0201EFE0 +.extern FUN_0201EFEC +.extern FUN_0201F04C +.extern FUN_0201F854 +.extern FUN_0201FD58 +.extern FUN_0201FDEC +.extern FUN_0201FE94 +.extern FUN_0201FFC8 +.extern FUN_02020044 +.extern FUN_020200A0 +.extern FUN_020200BC +.extern FUN_02020100 +.extern FUN_0202011C +.extern FUN_02020128 +.extern FUN_02020130 +.extern FUN_020201DC +.extern FUN_020201E4 +.extern FUN_02020208 +.extern FUN_0202022C +.extern FUN_02020248 +.extern FUN_02020310 +.extern FUN_02020354 +.extern FUN_02020388 +.extern FUN_02020398 +.extern FUN_02020968 +.extern FUN_02020988 +.extern FUN_02020AFC +.extern FUN_02021590 +.extern FUN_020215C8 +.extern FUN_020215E0 +.extern FUN_02021750 +.extern FUN_020218D8 +.extern FUN_02021934 +.extern FUN_0202199C +.extern FUN_020219F4 +.extern FUN_02021A20 +.extern FUN_02021A4C +.extern FUN_02021A74 +.extern FUN_02021CE0 +.extern FUN_02021D3C +.extern FUN_02021E28 +.extern FUN_02021EF0 +.extern FUN_02021F2C +.extern FUN_0202212C +.extern FUN_02022294 +.extern FUN_020222AC +.extern FUN_020222B4 +.extern FUN_020222C4 +.extern FUN_020222E8 +.extern FUN_020222F0 +.extern FUN_020222F8 +.extern FUN_02022300 +.extern FUN_02022308 +.extern FUN_02022310 +.extern FUN_02022318 +.extern FUN_020223BC +.extern FUN_02022504 +.extern FUN_02022510 +.extern FUN_02022528 +.extern FUN_02022534 +.extern FUN_02022540 +.extern FUN_0202254C +.extern FUN_020225F8 +.extern FUN_02022610 +.extern FUN_0202263C +.extern FUN_02022720 +.extern FUN_020227FC +.extern FUN_02022800 +.extern FUN_02022804 +.extern FUN_0202280C +.extern FUN_0202282C +.extern FUN_02022830 +.extern FUN_0202287C +.extern FUN_02023788 +.extern FUN_02023794 +.extern FUN_02023818 +.extern FUN_0202381C +.extern FUN_02023828 +.extern FUN_02023874 +.extern FUN_02023884 +.extern FUN_020238F4 +.extern FUN_0202390C +.extern FUN_02023918 +.extern FUN_02023924 +.extern FUN_02023928 +.extern FUN_0202393C +.extern FUN_0202395C +.extern FUN_0202397C +.extern FUN_0202398C +.extern FUN_02023990 +.extern FUN_020239A0 +.extern FUN_020239BC +.extern FUN_020239C0 +.extern FUN_020239C8 +.extern FUN_020239CC +.extern FUN_020239D0 +.extern FUN_020239E4 +.extern FUN_02023A10 +.extern FUN_02023A28 +.extern FUN_02023A2C +.extern FUN_02023A30 +.extern FUN_02023A54 +.extern FUN_02023A68 +.extern FUN_02023A70 +.extern FUN_02023A78 +.extern FUN_02023A88 +.extern FUN_02023A90 +.extern FUN_02023A9C +.extern FUN_02023AA4 +.extern FUN_02023AF4 +.extern FUN_02023B0C +.extern FUN_02023BD4 +.extern FUN_02023C90 +.extern FUN_02023D58 +.extern FUN_02023D6C +.extern FUN_02023D80 +.extern FUN_020243C8 +.extern FUN_02024404 +.extern FUN_02024440 +.extern FUN_0202445C +.extern FUN_020244A4 +.extern FUN_020244EC +.extern FUN_02024504 +.extern FUN_02024518 +.extern FUN_02024550 +.extern FUN_020245F0 +.extern FUN_0202471C +.extern FUN_0202498C +.extern FUN_02024AF0 +.extern FUN_02024C84 +.extern FUN_02024CA4 +.extern FUN_02024CE0 +.extern FUN_02024D4C +.extern FUN_02024D64 +.extern FUN_02024D80 +.extern FUN_02024DA0 +.extern FUN_02024EB4 +.extern FUN_02024EC0 +.extern FUN_02024ECC +.extern FUN_02024ED8 +.extern FUN_02024EE8 +.extern FUN_02024F0C +.extern FUN_02024F30 +.extern FUN_02024F44 +.extern FUN_02024FF4 +.extern FUN_02025084 +.extern FUN_02025128 +.extern FUN_02025238 +.extern FUN_02025244 +.extern FUN_0202524C +.extern FUN_02025268 +.extern FUN_02025274 +.extern FUN_020252AC +.extern FUN_020252C4 +.extern FUN_020252D0 +.extern FUN_020252DC +.extern FUN_020252E8 +.extern FUN_020252F4 +.extern FUN_020253E0 +.extern FUN_02025484 +.extern FUN_02025490 +.extern FUN_020254A0 +.extern FUN_020254B4 +.extern FUN_020254C0 +.extern FUN_02025520 +.extern FUN_02025614 +.extern FUN_02025658 +.extern FUN_020256AC +.extern FUN_020256BC +.extern FUN_020256D0 +.extern FUN_020256DC +.extern FUN_020257C0 +.extern FUN_020257C4 +.extern FUN_020257C8 +.extern FUN_020257CC +.extern FUN_020257D0 +.extern FUN_020257D8 +.extern FUN_020257DC +.extern FUN_020257E0 +.extern FUN_02025814 +.extern FUN_02025824 +.extern FUN_02025838 +.extern FUN_02025864 +.extern FUN_02025878 +.extern FUN_02025888 +.extern FUN_0202589C +.extern FUN_020258B0 +.extern FUN_020258D4 +.extern FUN_02025A60 +.extern FUN_02025B60 +.extern FUN_02025B94 +.extern FUN_02025BE8 +.extern FUN_02025C30 +.extern FUN_02025C40 +.extern FUN_02025D6C +.extern FUN_02025D94 +.extern FUN_02025DB0 +.extern FUN_020260C4 +.extern FUN_02026298 +.extern FUN_020266B0 +.extern FUN_020266C8 +.extern FUN_020268D4 +.extern FUN_02026908 +.extern FUN_02026970 +.extern FUN_020269A0 +.extern FUN_020269CC +.extern FUN_020269D4 +.extern FUN_02026BC8 +.extern FUN_02026C00 +.extern FUN_02026CB4 +.extern FUN_02026CC4 +.extern FUN_02026FE4 +.extern FUN_02026FE8 +.extern FUN_02027008 +.extern FUN_02027044 +.extern FUN_0202708C +.extern FUN_02027098 +.extern FUN_020270B4 +.extern FUN_020270D8 +.extern FUN_02027100 +.extern FUN_02027114 +.extern FUN_02027168 +.extern FUN_02027184 +.extern FUN_020271A4 +.extern FUN_02027210 +.extern FUN_02027264 +.extern FUN_02027478 +.extern FUN_020275D8 +.extern FUN_02027608 +.extern FUN_0202763C +.extern FUN_0202769C +.extern FUN_020276A8 +.extern FUN_02027710 +.extern FUN_02027740 +.extern FUN_0202787C +.extern FUN_020278AC +.extern FUN_020278DC +.extern FUN_02027914 +.extern FUN_02027964 +.extern FUN_02027E24 +.extern FUN_02027E34 +.extern FUN_02027E5C +.extern FUN_02027F04 +.extern FUN_02027FBC +.extern FUN_02027FDC +.extern FUN_02028048 +.extern FUN_02028074 +.extern FUN_02028094 +.extern FUN_020280B8 +.extern FUN_020280F4 +.extern FUN_02028174 +.extern FUN_02028190 +.extern FUN_020281B8 +.extern FUN_02028448 +.extern FUN_020286EC +.extern FUN_02028700 +.extern FUN_02028754 +.extern FUN_02028788 +.extern FUN_020287A4 +.extern FUN_020287A8 +.extern FUN_020287C0 +.extern FUN_020287EC +.extern FUN_02028810 +.extern FUN_0202881C +.extern FUN_02028828 +.extern FUN_02028840 +.extern FUN_02028930 +.extern FUN_02028934 +.extern FUN_02028954 +.extern FUN_0202896C +.extern FUN_020289A4 +.extern FUN_020289B0 +.extern FUN_02028A20 +.extern FUN_02028AD4 +.extern FUN_02028FA4 +.extern FUN_02029048 +.extern FUN_02029120 +.extern FUN_0202912C +.extern FUN_02029138 +.extern FUN_0202914C +.extern FUN_0202918C +.extern FUN_0202920C +.extern FUN_0202942C +.extern FUN_02029500 +.extern FUN_02029880 +.extern FUN_020299C0 +.extern FUN_020299DC +.extern FUN_02029ABC +.extern FUN_02029AC8 +.extern FUN_02029ACC +.extern FUN_02029AD0 +.extern FUN_02029AD8 +.extern FUN_02029AFC +.extern FUN_02029B38 +.extern FUN_02029B3C +.extern FUN_02029C08 +.extern FUN_02029C74 +.extern FUN_02029C80 +.extern FUN_02029C8C +.extern FUN_02029CC8 +.extern FUN_02029CE0 +.extern FUN_02029CEC +.extern FUN_02029D44 +.extern FUN_02029DD4 +.extern FUN_02029E0C +.extern FUN_02029E2C +.extern FUN_02029EBC +.extern FUN_02029EC0 +.extern FUN_02029EC4 +.extern FUN_02029EE4 +.extern FUN_02029EF8 +.extern FUN_02029F04 +.extern FUN_02029F10 +.extern FUN_02029F14 +.extern FUN_02029F4C +.extern FUN_02029F9C +.extern FUN_02029FC8 +.extern FUN_0202A07C +.extern FUN_0202A0A8 +.extern FUN_0202A0E8 +.extern FUN_0202A11C +.extern FUN_0202A150 +.extern FUN_0202A170 +.extern FUN_0202A1B8 +.extern FUN_0202A240 +.extern FUN_0202A2C4 +.extern FUN_0202A3B4 +.extern FUN_0202A498 +.extern FUN_0202A520 +.extern FUN_0202A538 +.extern FUN_0202A578 +.extern FUN_0202A5CC +.extern FUN_0202A5D0 +.extern FUN_0202A5D4 +.extern FUN_0202A5F4 +.extern FUN_0202A74C +.extern FUN_0202A864 +.extern FUN_0202A8CC +.extern FUN_0202A8D8 +.extern FUN_0202A8E4 +.extern FUN_0202A918 +.extern FUN_0202A988 +.extern FUN_0202A990 +.extern FUN_0202A9AC +.extern FUN_0202A9B0 +.extern FUN_0202A9D0 +.extern FUN_0202AA00 +.extern FUN_0202AA14 +.extern FUN_0202AA20 +.extern FUN_0202AA38 +.extern FUN_0202AA40 +.extern FUN_0202AA58 +.extern FUN_0202AA74 +.extern FUN_0202AAA0 +.extern FUN_0202AAFC +.extern FUN_0202AB40 +.extern FUN_0202AB68 +.extern FUN_0202AF70 +.extern FUN_0202AF88 +.extern FUN_0202AF9C +.extern FUN_0202AFC0 +.extern FUN_0202AFFC +.extern FUN_0202B020 +.extern FUN_0202B03C +.extern FUN_0202B050 +.extern FUN_0202B21C +.extern FUN_0202B3C4 +.extern FUN_0202B4B0 +.extern FUN_0202B710 +.extern FUN_0202B838 +.extern FUN_0202B844 +.extern FUN_0202B850 +.extern FUN_0202B85C +.extern FUN_0202B868 +.extern FUN_0202B870 +.extern FUN_0202B87C +.extern FUN_0202B8E4 +.extern FUN_0202B8F0 +.extern FUN_0202BD6C +.extern FUN_0202BDF0 +.extern FUN_0202BE6C +.extern FUN_0202BEDC +.extern FUN_0202BFD8 +.extern FUN_0202C000 +.extern FUN_0202C108 +.extern FUN_0202C144 +.extern FUN_0202CB8C +.extern FUN_0202D8B0 +.extern FUN_0202D8D0 +.extern FUN_0202DBE0 +.extern FUN_0202DCF8 +.extern FUN_0202DDE8 +.extern FUN_0202DE78 +.extern FUN_0202DFA4 +.extern FUN_0202E020 +.extern FUN_0202E044 +.extern FUN_0202E25C +.extern FUN_0202E4C8 +.extern FUN_0202EDD8 +.extern FUN_0202EDF8 +.extern FUN_0202EE0C +.extern FUN_0202EE24 +.extern FUN_0202EE44 +.extern FUN_0202EF18 +.extern FUN_0202EF84 +.extern FUN_0202F078 +.extern FUN_0202F094 +.extern FUN_0202F0B8 +.extern FUN_0202FA10 +.extern FUN_0202FA1C +.extern FUN_0202FA48 +.extern FUN_0202FB80 +.extern FUN_02030A78 +.extern FUN_02030ADC +.extern FUN_02030B3C +.extern FUN_02030BC4 +.extern FUN_02030C4C +.extern FUN_02030C58 +.extern FUN_02030E7C +.extern FUN_02030F20 +.extern FUN_02030F40 +.extern FUN_02030F60 +.extern FUN_02030F74 +.extern FUN_02030F88 +.extern FUN_02030FA8 +.extern FUN_02030FC8 +.extern FUN_02030FE0 +.extern FUN_02031190 +.extern FUN_020311D0 +.extern FUN_020311DC +.extern FUN_020311E8 +.extern FUN_020311F0 +.extern FUN_02031248 +.extern FUN_02031280 +.extern FUN_020312BC +.extern FUN_020313B4 +.extern FUN_020313EC +.extern FUN_02031400 +.extern FUN_02031438 +.extern FUN_02031588 +.extern FUN_020315D8 +.extern FUN_020315FC +.extern FUN_0203168C +.extern FUN_020316AC +.extern FUN_020316E0 +.extern FUN_02031810 +.extern FUN_02031824 +.extern FUN_02031860 +.extern FUN_02031880 +.extern FUN_020318B4 +.extern FUN_020318C4 +.extern FUN_02031914 +.extern FUN_02031924 +.extern FUN_02031934 +.extern FUN_02031948 +.extern FUN_02031990 +.extern FUN_020319D8 +.extern FUN_020319F4 +.extern FUN_02031A08 +.extern FUN_02031A2C +.extern FUN_02031A7C +.extern FUN_02031AC8 +.extern FUN_02031AF4 +.extern FUN_02031B2C +.extern FUN_02031B50 +.extern FUN_02031BD0 +.extern FUN_02031BF4 +.extern FUN_02031C2C +.extern FUN_02031C54 +.extern FUN_02031C64 +.extern FUN_02032888 +.extern FUN_020328C0 +.extern FUN_020328F4 +.extern FUN_02032B6C +.extern FUN_02032DAC +.extern FUN_020334E8 +.extern FUN_02033534 +.extern FUN_02033564 +.extern FUN_02033578 +.extern FUN_020335B8 +.extern FUN_020335F0 +.extern FUN_02033678 +.extern FUN_020337E8 +.extern FUN_0203384C +.extern FUN_02033E74 +.extern FUN_02033ED0 +.extern FUN_02033F20 +.extern FUN_02033F70 +.extern FUN_02034188 +.extern FUN_020344AC +.extern FUN_020344D8 +.extern FUN_020344FC +.extern FUN_0203450C +.extern FUN_0203451C +.extern FUN_02034678 +.extern FUN_020346CC +.extern FUN_02034774 +.extern FUN_02034788 +.extern FUN_020347B0 +.extern FUN_020347C4 +.extern FUN_02034824 +.extern FUN_0203484C +.extern FUN_02034860 +.extern FUN_0203487C +.extern FUN_02034898 +.extern FUN_020348B4 +.extern FUN_020348E4 +.extern FUN_02034908 +.extern FUN_02034930 +.extern FUN_02034944 +.extern FUN_02034964 +.extern FUN_02034998 +.extern FUN_020349D8 +.extern FUN_020349E4 +.extern FUN_02034A04 +.extern FUN_02034A60 +.extern FUN_02034AC8 +.extern FUN_02034AF0 +.extern FUN_02034AF8 +.extern FUN_02034B00 +.extern FUN_02034B64 +.extern FUN_02034B6C +.extern FUN_02034B74 +.extern FUN_02034BAC +.extern FUN_02034BDC +.extern FUN_02034C0C +.extern FUN_02034C24 +.extern FUN_02034C34 +.extern FUN_02034D2C +.extern FUN_02034D44 +.extern FUN_02034DC4 +.extern FUN_02034DC8 +.extern FUN_02034DCC +.extern FUN_02034DD0 +.extern FUN_02034DD4 +.extern FUN_02034DE8 +.extern FUN_02034DEC +.extern FUN_02034DF4 +.extern FUN_02034DFC +.extern FUN_02034E04 +.extern FUN_02034E0C +.extern FUN_02034E10 +.extern FUN_02034E18 +.extern FUN_02034E20 +.extern FUN_02034E24 +.extern FUN_02034E28 +.extern FUN_02034E30 +.extern FUN_02034E48 +.extern FUN_02034E60 +.extern FUN_02034E8C +.extern FUN_02034E90 +.extern FUN_02034EC4 +.extern FUN_02034EF8 +.extern FUN_02034F1C +.extern FUN_02034F40 +.extern FUN_02034F88 +.extern FUN_02034FC0 +.extern FUN_02034FE4 +.extern FUN_02035068 +.extern FUN_020351A0 +.extern FUN_02035D04 +.extern FUN_02035E50 +.extern FUN_02036A78 +.extern FUN_02036AB8 +.extern FUN_02036B90 +.extern FUN_02036BC4 +.extern FUN_02036BDC +.extern FUN_02036D94 +.extern FUN_02036DD4 +.extern FUN_02037024 +.extern FUN_02037350 +.extern FUN_02037394 +.extern FUN_0203739C +.extern FUN_020373AC +.extern FUN_020373C4 +.extern FUN_020373D4 +.extern FUN_02037760 +.extern FUN_02037778 +.extern FUN_020377A8 +.extern FUN_020377AC +.extern FUN_020377B0 +.extern FUN_020377C8 +.extern FUN_0203780C +.extern FUN_0203789C +.extern FUN_020378FC +.extern FUN_02037944 +.extern FUN_020379F8 +.extern FUN_02037A1C +.extern FUN_02037A40 +.extern FUN_02037A48 +.extern FUN_02037A70 +.extern FUN_02037A78 +.extern FUN_02037B44 +.extern FUN_02037BB0 +.extern FUN_02037C00 +.extern FUN_02037CF0 +.extern FUN_02037D5C +.extern FUN_02037D60 +.extern FUN_02037E18 +.extern FUN_02037E80 +.extern FUN_02037E90 +.extern FUN_02037EB8 +.extern FUN_02037F2C +.extern FUN_02037F58 +.extern FUN_02037FC4 +.extern FUN_02037FE4 +.extern FUN_020380CC +.extern FUN_02038130 +.extern FUN_020383D8 +.extern FUN_020383F8 +.extern FUN_0203842C +.extern FUN_0203846C +.extern FUN_020385CC +.extern FUN_02038680 +.extern FUN_020386A4 +.extern FUN_020386B4 +.extern FUN_020386E0 +.extern FUN_02038790 +.extern FUN_02038804 +.extern FUN_02038814 +.extern FUN_02038824 +.extern FUN_02038854 +.extern FUN_02038864 +.extern FUN_0203888C +.extern FUN_020388B4 +.extern FUN_020389CC +.extern FUN_02038AD0 +.extern FUN_02038AF4 +.extern FUN_02038B6C +.extern FUN_02038C78 +.extern FUN_02038CA8 +.extern FUN_02038CD8 +.extern FUN_02038D10 +.extern FUN_02038EB0 +.extern FUN_02039438 +.extern FUN_02039460 +.extern FUN_020394B8 +.extern FUN_020394F0 +.extern FUN_02039504 +.extern FUN_02039528 +.extern FUN_0203953C +.extern FUN_02039550 +.extern FUN_02039564 +.extern FUN_0203959C +.extern FUN_020395BC +.extern FUN_020395F4 +.extern FUN_02039618 +.extern FUN_0203962C +.extern FUN_02039640 +.extern FUN_0203965C +.extern FUN_02039678 +.extern FUN_02039694 +.extern FUN_02039874 +.extern FUN_0203989C +.extern FUN_020399A0 +.extern FUN_020399A4 +.extern FUN_020399A8 +.extern FUN_020399B4 +.extern FUN_02039A10 +.extern FUN_02039A28 +.extern FUN_02039A40 +.extern FUN_02039A5C +.extern FUN_02039A78 +.extern FUN_02039A90 +.extern FUN_02039AAC +.extern FUN_02039ACC +.extern FUN_02039AF8 +.extern FUN_02039B28 +.extern FUN_02039B50 +.extern FUN_02039B78 +.extern FUN_02039BA0 +.extern FUN_02039BBC +.extern FUN_02039BDC +.extern FUN_02039C08 +.extern FUN_02039C40 +.extern FUN_02039C78 +.extern FUN_02039CE4 +.extern FUN_02039CF8 +.extern FUN_02039D10 +.extern FUN_02039D48 +.extern FUN_02039D78 +.extern FUN_02039DAC +.extern FUN_02039DC4 +.extern FUN_02039DD0 +.extern FUN_02039E04 +.extern FUN_02039E38 +.extern FUN_02039E50 +.extern FUN_02039E68 +.extern FUN_02039E84 +.extern FUN_02039EC0 +.extern FUN_02039EE8 +.extern FUN_02039F0C +.extern FUN_02039F30 +.extern FUN_02039F58 +.extern FUN_02039F88 +.extern FUN_02039FB8 +.extern FUN_02039FDC +.extern FUN_0203A00C +.extern FUN_0203A038 +.extern FUN_0203A04C +.extern FUN_0203A098 +.extern FUN_0203A0FC +.extern FUN_0203A13C +.extern FUN_0203A188 +.extern FUN_0203A210 +.extern FUN_0203A288 +.extern FUN_0203A2C4 +.extern FUN_0203A304 +.extern FUN_0203A340 +.extern FUN_0203A388 +.extern FUN_0203A3C4 +.extern FUN_0203A400 +.extern FUN_0203A45C +.extern FUN_0203A484 +.extern FUN_0203A4D0 +.extern FUN_0203A560 +.extern FUN_0203A590 +.extern FUN_0203A5D8 +.extern FUN_0203A608 +.extern FUN_0203A630 +.extern FUN_0203A780 +.extern FUN_0203A830 +.extern FUN_0203A85C +.extern FUN_0203A878 +.extern FUN_0203A8B8 +.extern FUN_0203A9F0 +.extern FUN_0203AA90 +.extern FUN_0203AAA0 +.extern FUN_0203AB44 +.extern FUN_0203AB74 +.extern FUN_0203AB8C +.extern FUN_0203AC14 +.extern FUN_0203AC9C +.extern FUN_0203ACC4 +.extern FUN_0203AD08 +.extern FUN_0203AD54 +.extern FUN_0203ADC4 +.extern FUN_0203AE4C +.extern FUN_0203AED4 +.extern FUN_0203AF34 +.extern FUN_0203AF58 +.extern FUN_0203AF84 +.extern FUN_0203AFA4 +.extern FUN_0203AFC4 +.extern FUN_0203B024 +.extern FUN_0203B148 +.extern FUN_0203B1F0 +.extern FUN_0203B2E0 +.extern FUN_0203B3B0 +.extern FUN_0203B3C0 +.extern FUN_0203B3DC +.extern FUN_0203B3F8 +.extern FUN_0203B440 +.extern FUN_0203B468 +.extern FUN_0203B500 +.extern FUN_0203B544 +.extern FUN_0203B574 +.extern FUN_0203B5B8 +.extern FUN_0203B618 +.extern FUN_0203B640 +.extern FUN_0203B724 +.extern FUN_0203B758 +.extern FUN_0203B790 +.extern FUN_0203B7D8 +.extern FUN_0203B7F0 +.extern FUN_0203B81C +.extern FUN_0203B85C +.extern FUN_0203B8A0 +.extern FUN_0203B8E4 +.extern FUN_0203B914 +.extern FUN_0203B944 +.extern FUN_0203B968 +.extern FUN_0203B9B4 +.extern FUN_0203BA3C +.extern FUN_0203BAB0 +.extern FUN_0203BAF4 +.extern FUN_0203BB34 +.extern FUN_0203BB80 +.extern FUN_0203BB84 +.extern FUN_0203BB88 +.extern FUN_0203BB8C +.extern FUN_0203BC1C +.extern FUN_0203BC2C +.extern FUN_0203BCBC +.extern FUN_0203BCCC +.extern FUN_0203BCD8 +.extern FUN_0203BD08 +.extern FUN_0203BD28 +.extern FUN_0203BDB8 +.extern FUN_0203BE50 +.extern FUN_0203BE68 +.extern FUN_0203BE80 +.extern FUN_0203BECC +.extern FUN_0203BF00 +.extern FUN_0203BF20 +.extern FUN_0203BF2C +.extern FUN_0203BF84 +.extern FUN_0203BFEC +.extern FUN_0203C054 +.extern FUN_0203C090 +.extern FUN_0203C0CC +.extern FUN_0203C0FC +.extern FUN_0203C118 +.extern FUN_0203C12C +.extern FUN_0203C174 +.extern FUN_0203C1AC +.extern FUN_0203C200 +.extern FUN_0203C278 +.extern FUN_0203C2C4 +.extern FUN_0203C2E0 +.extern FUN_0203C2F0 +.extern FUN_0203C300 +.extern FUN_0203C32C +.extern FUN_0203C33C +.extern FUN_0203C368 +.extern FUN_0203C3C8 +.extern FUN_0203C3E8 +.extern FUN_0203C430 +.extern FUN_0203C460 +.extern FUN_0203C4B0 +.extern FUN_0203C4F0 +.extern FUN_0203C520 +.extern FUN_0203C58C +.extern FUN_0203C5BC +.extern FUN_0203C614 +.extern FUN_0203C680 +.extern FUN_0203C6C4 +.extern FUN_0203C70C +.extern FUN_0203C730 +.extern FUN_0203C788 +.extern FUN_0203C7E4 +.extern FUN_0203C7F4 +.extern FUN_0203C820 +.extern FUN_0203C844 +.extern FUN_0203C874 +.extern FUN_0203C8B4 +.extern FUN_0203C8E4 +.extern FUN_0203C930 +.extern FUN_0203C960 +.extern FUN_0203C990 +.extern FUN_0203CA20 +.extern FUN_0203CA2C +.extern FUN_0203CA5C +.extern FUN_0203CAE8 +.extern FUN_0203CB08 +.extern FUN_0203CB20 +.extern FUN_0203CB48 +.extern FUN_0203CB60 +.extern FUN_0203CB70 +.extern FUN_0203CBBC +.extern FUN_0203CBE8 +.extern FUN_0203CC88 +.extern FUN_0203CD20 +.extern FUN_0203CDB8 +.extern FUN_0203CDC4 +.extern FUN_0203CDD0 +.extern FUN_0203CE00 +.extern FUN_0203CE0C +.extern FUN_0203CE8C +.extern FUN_0203CEBC +.extern FUN_0203CF04 +.extern FUN_0203CF34 +.extern FUN_0203CF64 +.extern FUN_0203CF94 +.extern FUN_0203CFC4 +.extern FUN_0203CFC8 +.extern FUN_0203D050 +.extern FUN_0203D0A4 +.extern FUN_0203D0F8 +.extern FUN_0203D134 +.extern FUN_0203D140 +.extern FUN_0203D150 +.extern FUN_0203D178 +.extern FUN_0203D194 +.extern FUN_0203D1A4 +.extern FUN_0203D1C0 +.extern FUN_0203D214 +.extern FUN_0203D23C +.extern FUN_0203D248 +.extern FUN_0203D278 +.extern FUN_0203D2A4 +.extern FUN_0203D2E4 +.extern FUN_0203D330 +.extern FUN_0203D33C +.extern FUN_0203D36C +.extern FUN_0203D3A4 +.extern FUN_0203D3DC +.extern FUN_0203D448 +.extern FUN_0203D458 +.extern FUN_0203D490 +.extern FUN_0203D4E8 +.extern FUN_0203D528 +.extern FUN_0203D560 +.extern FUN_0203D5B0 +.extern FUN_0203D5F8 +.extern FUN_0203D60C +.extern FUN_0203D61C +.extern FUN_0203D630 +.extern FUN_0203D66C +.extern FUN_0203D6C4 +.extern FUN_0203D728 +.extern FUN_0203D738 +.extern FUN_0203D774 +.extern FUN_0203D7DC +.extern FUN_0203D834 +.extern FUN_0203D868 +.extern FUN_0203D874 +.extern FUN_0203D8A0 +.extern FUN_0203D8D0 +.extern FUN_0203D8E8 +.extern FUN_0203D8EC +.extern FUN_0203D920 +.extern FUN_0203D938 +.extern FUN_0203D948 +.extern FUN_0203D958 +.extern FUN_0203D998 +.extern FUN_0203D9E8 +.extern FUN_0203DA78 +.extern FUN_0203DAB0 +.extern FUN_0203DAE8 +.extern FUN_0203DB38 +.extern FUN_0203DB88 +.extern FUN_0203DBD4 +.extern FUN_0203DC00 +.extern FUN_0203DC58 +.extern FUN_0203DC70 +.extern FUN_0203DC88 +.extern FUN_0203DCA0 +.extern FUN_0203DCB8 +.extern FUN_0203DCC8 +.extern FUN_0203DCD8 +.extern FUN_0203DCE8 +.extern FUN_0203DCF8 +.extern FUN_0203DD08 +.extern FUN_0203DD18 +.extern FUN_0203DD34 +.extern FUN_0203DD50 +.extern FUN_0203DD60 +.extern FUN_0203DE00 +.extern FUN_0203DE4C +.extern FUN_0203DE58 +.extern FUN_0203DE80 +.extern FUN_0203DEA8 +.extern FUN_0203DEC4 +.extern FUN_0203DEF8 +.extern FUN_0203DF2C +.extern FUN_0203DF38 +.extern FUN_0203DF64 +.extern FUN_0203DF84 +.extern FUN_0203DFA8 +.extern FUN_0203DFE0 +.extern FUN_0203E018 +.extern FUN_0203E054 +.extern FUN_0203E078 +.extern FUN_0203E0CC +.extern FUN_0203E120 +.extern FUN_0203E138 +.extern FUN_0203E168 +.extern FUN_0203E254 +.extern FUN_0203E258 +.extern FUN_0203E29C +.extern FUN_0203E2F8 +.extern FUN_0203E35C +.extern FUN_0203E38C +.extern FUN_0203E3D0 +.extern FUN_0203E408 +.extern FUN_0203E440 +.extern FUN_0203E470 +.extern FUN_0203E4A0 +.extern FUN_0203E4B0 +.extern FUN_0203E4D8 +.extern FUN_0203E4F0 +.extern FUN_0203E510 +.extern FUN_0203E568 +.extern FUN_0203E5DC +.extern FUN_0203E674 +.extern FUN_0203E684 +.extern FUN_0203E6B4 +.extern FUN_0203E6C4 +.extern FUN_0203E6FC +.extern FUN_0203E72C +.extern FUN_0203E744 +.extern FUN_0203E774 +.extern FUN_0203E7F0 +.extern FUN_0203E81C +.extern FUN_0203E848 +.extern FUN_0203E858 +.extern FUN_0203E870 +.extern FUN_0203E894 +.extern FUN_0203E8C4 +.extern FUN_0203E8F4 +.extern FUN_0203E928 +.extern FUN_0203E940 +.extern FUN_0203E954 +.extern FUN_0203E968 +.extern FUN_0203E9CC +.extern FUN_0203EA68 +.extern FUN_0203EA90 +.extern FUN_0203EAB0 +.extern FUN_0203EB20 +.extern FUN_0203EB48 +.extern FUN_0203EB88 +.extern FUN_0203EBC8 +.extern FUN_0203EBE4 +.extern FUN_0203ECAC +.extern FUN_0203ECD8 +.extern FUN_0203ECF4 +.extern FUN_0203ED10 +.extern FUN_0203ED70 +.extern FUN_0203EDA4 +.extern FUN_0203EDC8 +.extern FUN_0203EDE0 +.extern FUN_0203EE08 +.extern FUN_0203EE18 +.extern FUN_0203EE28 +.extern FUN_0203EE58 +.extern FUN_0203EE68 +.extern FUN_0203EE78 +.extern FUN_0203EE98 +.extern FUN_0203EED8 +.extern FUN_0203EF58 +.extern FUN_0203F00C +.extern FUN_0203F020 +.extern FUN_0203F034 +.extern FUN_0203F058 +.extern FUN_0203F07C +.extern FUN_0203F110 +.extern FUN_0203F174 +.extern FUN_0203F19C +.extern FUN_0203F234 +.extern FUN_0203F254 +.extern FUN_0203F26C +.extern FUN_0203F2AC +.extern FUN_0203F2E4 +.extern FUN_0203F31C +.extern FUN_0203F348 +.extern FUN_0203F38C +.extern FUN_0203F39C +.extern FUN_0203F3AC +.extern FUN_0203F418 +.extern FUN_0203F44C +.extern FUN_0203F484 +.extern FUN_0203F4D8 +.extern FUN_0203F508 +.extern FUN_0203F5D4 +.extern FUN_0203F604 +.extern FUN_0203F634 +.extern FUN_0203F664 +.extern FUN_0203F6E4 +.extern FUN_0203F720 +.extern FUN_0203F760 +.extern FUN_0203F7C8 +.extern FUN_0203F80C +.extern FUN_0203F880 +.extern FUN_0203F8C0 +.extern FUN_0203F924 +.extern FUN_0203F954 +.extern FUN_0203F988 +.extern FUN_0203F9B0 +.extern FUN_0203F9DC +.extern FUN_0203FA14 +.extern FUN_0203FA58 +.extern FUN_0203FB4C +.extern FUN_0203FB64 +.extern FUN_0203FB94 +.extern FUN_0203FBA0 +.extern FUN_0203FBAC +.extern FUN_0203FBBC +.extern FUN_0203FC1C +.extern FUN_0203FC58 +.extern FUN_0203FC80 +.extern FUN_0203FCB0 +.extern FUN_0203FCDC +.extern FUN_0203FCF4 +.extern FUN_0203FDBC +.extern FUN_0203FE08 +.extern FUN_0203FE48 +.extern FUN_0203FE80 +.extern FUN_0203FE90 +.extern FUN_0203FEC0 +.extern FUN_0203FF10 +.extern FUN_02040028 +.extern FUN_02040074 +.extern FUN_020400C8 +.extern FUN_0204011C +.extern FUN_02040170 +.extern FUN_020401CC +.extern FUN_02040204 +.extern FUN_02040220 +.extern FUN_0204025C +.extern FUN_02040298 +.extern FUN_020402D4 +.extern FUN_02040304 +.extern FUN_02040340 +.extern FUN_02040370 +.extern FUN_020403A0 +.extern FUN_020403D0 +.extern FUN_02040414 +.extern FUN_02040458 +.extern FUN_02040488 +.extern FUN_020404FC +.extern FUN_0204052C +.extern FUN_0204056C +.extern FUN_0204059C +.extern FUN_020405B4 +.extern FUN_020405CC +.extern FUN_020405F8 +.extern FUN_02040638 +.extern FUN_0204064C +.extern FUN_02040660 +.extern FUN_020406C0 +.extern FUN_020406CC +.extern FUN_02040700 +.extern FUN_02040724 +.extern FUN_02040748 +.extern FUN_02040790 +.extern FUN_020407C8 +.extern FUN_02040800 +.extern FUN_0204083C +.extern FUN_02040874 +.extern FUN_020408BC +.extern FUN_0204091C +.extern FUN_02040964 +.extern FUN_020409C0 +.extern FUN_020409F8 +.extern FUN_02040A30 +.extern FUN_02040A7C +.extern FUN_02040B0C +.extern FUN_02040B5C +.extern FUN_02040BAC +.extern FUN_02040BFC +.extern FUN_02040C34 +.extern FUN_02040C6C +.extern FUN_02040CA4 +.extern FUN_02040D04 +.extern FUN_02040D7C +.extern FUN_02040DB4 +.extern FUN_02040DEC +.extern FUN_02040E4C +.extern FUN_02040EB4 +.extern FUN_02040EF8 +.extern FUN_02040F34 +.extern FUN_02040F6C +.extern FUN_02040FA4 +.extern FUN_02040FDC +.extern FUN_02041014 +.extern FUN_0204104C +.extern FUN_02041094 +.extern FUN_020410C8 +.extern FUN_02041100 +.extern FUN_02041138 +.extern FUN_02041174 +.extern FUN_02041194 +.extern FUN_020411C4 +.extern FUN_02041340 +.extern FUN_020413C0 +.extern FUN_020413E8 +.extern FUN_020413F8 +.extern FUN_0204140C +.extern FUN_02041424 +.extern FUN_0204143C +.extern FUN_02041478 +.extern FUN_0204149C +.extern FUN_020414B8 +.extern FUN_020414CC +.extern FUN_020414E0 +.extern FUN_020414FC +.extern FUN_02041518 +.extern FUN_02041558 +.extern FUN_02041588 +.extern FUN_020415AC +.extern FUN_020415BC +.extern FUN_020415E0 +.extern FUN_02041618 +.extern FUN_02041644 +.extern FUN_02041650 +.extern FUN_02041664 +.extern FUN_02041674 +.extern FUN_020416A8 +.extern FUN_02041770 +.extern FUN_020417E0 +.extern FUN_02041808 +.extern FUN_0204185C +.extern FUN_0204188C +.extern FUN_0204190C +.extern FUN_02041970 +.extern FUN_020419F8 +.extern FUN_02041A80 +.extern FUN_02041AB4 +.extern FUN_02041AD4 +.extern FUN_02041AE0 +.extern FUN_02041B10 +.extern FUN_02041B40 +.extern FUN_02041B70 +.extern FUN_02041B9C +.extern FUN_02041BC4 +.extern FUN_02041BF0 +.extern FUN_02041C38 +.extern FUN_02041E40 +.extern FUN_02041FDC +.extern FUN_02042000 +.extern FUN_02042038 +.extern FUN_02042110 +.extern FUN_0204214C +.extern FUN_02042354 +.extern FUN_02042364 +.extern FUN_02042394 +.extern FUN_020423B0 +.extern FUN_02042700 +.extern FUN_02042780 +.extern FUN_020427A8 +.extern FUN_020427D0 +.extern FUN_02042864 +.extern FUN_02042894 +.extern FUN_020428E0 +.extern FUN_02042950 +.extern FUN_02042980 +.extern FUN_02042998 +.extern FUN_020429B8 +.extern FUN_020429E8 +.extern FUN_02042A18 +.extern FUN_02042A48 +.extern FUN_02042A98 +.extern FUN_02042B0C +.extern FUN_02042B40 +.extern FUN_02042B74 +.extern FUN_02042BA8 +.extern FUN_02042BDC +.extern FUN_02042C10 +.extern FUN_02042C44 +.extern FUN_02042C8C +.extern FUN_02042CBC +.extern FUN_02042D1C +.extern FUN_0204387C +.extern FUN_020438D0 +.extern FUN_02043918 +.extern FUN_020439B4 +.extern FUN_02043A44 +.extern FUN_02043A94 +.extern FUN_02043AAC +.extern FUN_02043ACC +.extern FUN_02043AFC +.extern FUN_02043B28 +.extern FUN_02043B54 +.extern FUN_02043B84 +.extern FUN_02043BD0 +.extern FUN_02043C28 +.extern FUN_02043C6C +.extern FUN_02043C90 +.extern FUN_02043CB4 +.extern FUN_02043CE4 +.extern FUN_02043D28 +.extern FUN_02043D78 +.extern FUN_02043DC8 +.extern FUN_02043DE0 +.extern FUN_02043E00 +.extern FUN_02043E20 +.extern FUN_02043E50 +.extern FUN_02043E68 +.extern FUN_02043E9C +.extern FUN_02043EFC +.extern FUN_02043F50 +.extern FUN_02043FA0 +.extern FUN_02043FF4 +.extern FUN_02044034 +.extern FUN_020440C0 +.extern FUN_020440F0 +.extern FUN_02044120 +.extern FUN_02044138 +.extern FUN_0204413C +.extern FUN_02044140 +.extern FUN_02044158 +.extern FUN_0204416C +.extern FUN_02044198 +.extern FUN_020442BC +.extern FUN_0204434C +.extern FUN_020443A8 +.extern FUN_02044414 +.extern FUN_0204449C +.extern FUN_020444F4 +.extern FUN_02044598 +.extern FUN_02044658 +.extern FUN_0204469C +.extern FUN_02044730 +.extern FUN_0204478C +.extern FUN_02044800 +.extern FUN_0204488C +.extern FUN_020448D4 +.extern FUN_020449A4 +.extern FUN_02044A0C +.extern FUN_02044A6C +.extern FUN_02044A94 +.extern FUN_02044B00 +.extern FUN_02044B2C +.extern FUN_02044B84 +.extern FUN_02044C0C +.extern FUN_02044C88 +.extern FUN_02044CE0 +.extern FUN_02044D44 +.extern FUN_02044D8C +.extern FUN_02044E34 +.extern FUN_02044E78 +.extern FUN_02044ED8 +.extern FUN_02044F20 +.extern FUN_02044F58 +.extern FUN_02044FE8 +.extern FUN_0204505C +.extern FUN_02045104 +.extern FUN_02045170 +.extern FUN_020451D0 +.extern FUN_02045264 +.extern FUN_02045268 +.extern FUN_020452B4 +.extern FUN_02045308 +.extern FUN_02045398 +.extern FUN_0204539C +.extern FUN_020453A0 +.extern FUN_020453F4 +.extern FUN_02045424 +.extern FUN_02045438 +.extern FUN_02045468 +.extern FUN_02045484 +.extern FUN_020454CC +.extern FUN_02045500 +.extern FUN_0204552C +.extern FUN_0204557C +.extern FUN_02045590 +.extern FUN_020455BC +.extern FUN_020455D0 +.extern FUN_020455E4 +.extern FUN_02045610 +.extern FUN_02045624 +.extern FUN_02045638 +.extern FUN_02045664 +.extern FUN_02045678 +.extern FUN_020456D4 +.extern FUN_0204572C +.extern FUN_02045784 +.extern FUN_020457DC +.extern FUN_02045834 +.extern FUN_0204588C +.extern FUN_020458E4 +.extern FUN_02045918 +.extern FUN_02045950 +.extern FUN_02045954 +.extern FUN_02045958 +.extern FUN_020459AC +.extern FUN_020459E8 +.extern FUN_02045A3C +.extern FUN_02045A78 +.extern FUN_02045ACC +.extern FUN_02045B08 +.extern FUN_02045B44 +.extern FUN_02045B80 +.extern FUN_02045BC8 +.extern FUN_02045C04 +.extern FUN_02045C40 +.extern FUN_02045C7C +.extern FUN_02045CD4 +.extern FUN_02045D10 +.extern FUN_02045D4C +.extern FUN_02045D88 +.extern FUN_02045DD0 +.extern FUN_02045E1C +.extern FUN_02045E20 +.extern FUN_02045EE0 +.extern FUN_02045EE4 +.extern FUN_02045F24 +.extern FUN_02045F84 +.extern FUN_02045F88 +.extern FUN_02045FCC +.extern FUN_02046010 +.extern FUN_0204601C +.extern FUN_02046028 +.extern FUN_0204602C +.extern FUN_02046030 +.extern FUN_020462AC +.extern FUN_020462B8 +.extern FUN_020462E4 +.extern FUN_0204630C +.extern FUN_02046338 +.extern FUN_02046380 +.extern FUN_020463CC +.extern FUN_020463EC +.extern FUN_0204640C +.extern FUN_02046420 +.extern FUN_0204646C +.extern FUN_0204647C +.extern FUN_0204649C +.extern FUN_020464A4 +.extern FUN_02046500 +.extern FUN_02046528 +.extern FUN_0204652C +.extern FUN_02046530 +.extern FUN_02046534 +.extern FUN_02046DB4 +.extern FUN_02046E18 +.extern FUN_02046FA0 +.extern FUN_020470AC +.extern FUN_020470E8 +.extern FUN_02047174 +.extern FUN_020480B8 +.extern FUN_020480C8 +.extern FUN_020480D8 +.extern FUN_02048498 +.extern FUN_02048694 +.extern FUN_02048C58 +.extern FUN_02048D90 +.extern FUN_02048EC8 +.extern FUN_02048FC8 +.extern FUN_02049240 +.extern FUN_02049274 +.extern FUN_02049EA4 +.extern FUN_02049F98 +.extern FUN_02049FFC +.extern FUN_0204A048 +.extern FUN_0204A0C8 +.extern FUN_0204A120 +.extern FUN_0204A20C +.extern FUN_0204A248 +.extern FUN_0204A32C +.extern FUN_0204A6E0 +.extern FUN_0204AB20 +.extern FUN_0204AB58 +.extern FUN_0204ABA8 +.extern FUN_0204ABDC +.extern FUN_0204AD0C +.extern FUN_0204ADBC +.extern FUN_0204ADE0 +.extern FUN_0204AF3C +.extern FUN_0204AF84 +.extern FUN_0204B2A4 +.extern FUN_0204B2B4 +.extern FUN_0204B2C0 +.extern FUN_0204B2D8 +.extern FUN_0204B33C +.extern FUN_0204B4FC +.extern FUN_0204B57C +.extern FUN_0204B5A8 +.extern FUN_0204B5FC +.extern FUN_0204B63C +.extern FUN_0204B660 +.extern FUN_0204B684 +.extern FUN_0204B6A4 +.extern FUN_0204B9A0 +.extern FUN_0204B9CC +.extern FUN_0204B9EC +.extern FUN_0204BA1C +.extern FUN_0204BAB0 +.extern FUN_0204BAC4 +.extern FUN_0204BAD4 +.extern FUN_0204BAE4 +.extern FUN_0204BEC8 +.extern FUN_0204BED0 +.extern FUN_0204BED8 +.extern FUN_0204C104 +.extern FUN_0204C1A8 +.extern FUN_0204D6C0 +.extern FUN_0204E2FC +.extern FUN_0204F6DC +.extern FUN_0204FF5C +.extern FUN_02050024 +.extern FUN_02050048 +.extern FUN_020524CC +.extern FUN_02052544 +.extern FUN_02052604 +.extern FUN_02052608 +.extern FUN_02052648 +.extern FUN_0205265C +.extern FUN_02052714 +.extern FUN_02052718 +.extern FUN_020527A8 +.extern FUN_020527D8 +.extern FUN_0205296C +.extern FUN_02052A10 +.extern FUN_02052B74 +.extern FUN_02052C0C +.extern FUN_02052CD8 +.extern FUN_02052D08 +.extern FUN_02052DE8 +.extern FUN_02052E10 +.extern FUN_02052F74 +.extern FUN_020534DC +.extern FUN_0205363C +.extern FUN_02053678 +.extern FUN_020536D0 +.extern FUN_020545B8 +.extern FUN_02054608 +.extern FUN_02054658 +.extern FUN_020546C8 +.extern FUN_020547A4 +.extern FUN_02054C14 +.extern FUN_02054CB0 +.extern FUN_02054CC8 +.extern FUN_02054D1C +.extern FUN_02054DEC +.extern FUN_02054E30 +.extern FUN_02054F50 +.extern FUN_0205502C +.extern FUN_020552F8 +.extern FUN_02055304 +.extern FUN_02055320 +.extern FUN_0205532C +.extern FUN_020553A0 +.extern FUN_020553C4 +.extern FUN_020553D4 +.extern FUN_020553E8 +.extern FUN_02055468 +.extern FUN_02055474 +.extern FUN_02055488 +.extern FUN_02055560 +.extern FUN_02055720 +.extern FUN_020557F4 +.extern FUN_02055A38 +.extern FUN_02055B14 +.extern FUN_02055B30 +.extern FUN_02055B8C +.extern FUN_0205753C +.extern FUN_020575D4 +.extern FUN_02057654 +.extern FUN_02057688 +.extern FUN_02057800 +.extern FUN_0205785C +.extern FUN_02057BAC +.extern FUN_02058060 +.extern FUN_020580B4 +.extern FUN_02058448 +.extern FUN_02058458 +.extern FUN_02058480 +.extern FUN_02058488 +.extern FUN_02058510 +.extern FUN_02058738 +.extern FUN_02058780 +.extern FUN_020587B0 +.extern FUN_02058854 +.extern FUN_0205889C +.extern FUN_020588B8 +.extern FUN_020588D4 +.extern FUN_02058908 +.extern FUN_02058914 +.extern FUN_02058994 +.extern FUN_02058B2C +.extern FUN_02058B4C +.extern FUN_02058B7C +.extern FUN_02058BB4 +.extern FUN_02058BE4 +.extern FUN_02058D74 +.extern FUN_02058E28 +.extern FUN_02058E90 +.extern FUN_02058EB0 +.extern FUN_02059D1C +.extern FUN_02059E74 +.extern FUN_0205AE28 +.extern FUN_0205AEA4 +.extern FUN_0205AEF0 +.extern FUN_0205AEFC +.extern FUN_0205CA4C +.extern FUN_0205CA64 +.extern FUN_0205CA78 +.extern FUN_0205CE48 +.extern FUN_0205CE80 +.extern FUN_0205DD18 +.extern FUN_0205DD38 +.extern FUN_0205DD40 +.extern FUN_0205E7C4 +.extern FUN_0205ECD4 +.extern FUN_0205ECE0 +.extern FUN_0205ECFC +.extern FUN_0205ED0C +.extern FUN_0205ED1C +.extern FUN_0205ED2C +.extern FUN_0205ED3C +.extern FUN_0205ED4C +.extern FUN_0205ED5C +.extern FUN_0205ED6C +.extern FUN_0205F1C4 +.extern FUN_0205F1D4 +.extern FUN_0205F1F4 +.extern FUN_0205F204 +.extern FUN_0205F214 +.extern FUN_0205F224 +.extern FUN_0205F234 +.extern FUN_0205F244 +.extern FUN_0205F264 +.extern FUN_0205F274 +.extern FUN_0205F284 +.extern FUN_0205F294 +.extern FUN_0205F2A4 +.extern FUN_0205F2B4 +.extern FUN_0205F2C4 +.extern FUN_0205F2D4 +.extern FUN_0205F2E4 +.extern FUN_0205F368 +.extern FUN_0205F378 +.extern FUN_0205F388 +.extern FUN_0205F398 +.extern FUN_0205F3C0 +.extern FUN_0205F3F8 +.extern FUN_0205F478 +.extern FUN_0205F4A0 +.extern FUN_0205F4E4 +.extern FUN_0205F50C +.extern FUN_0205F524 +.extern FUN_0205F54C +.extern FUN_0205F55C +.extern FUN_0205F594 +.extern FUN_0205F5A4 +.extern FUN_0205F5D8 +.extern FUN_0205F5FC +.extern FUN_0205F648 +.extern FUN_0205F668 +.extern FUN_0205F688 +.extern FUN_0205F698 +.extern FUN_0205F6A8 +.extern FUN_0205F6C8 +.extern FUN_0205F6D8 +.extern FUN_0205F710 +.extern FUN_0205F720 +.extern FUN_0205F740 +.extern FUN_0205F760 +.extern FUN_0205F7A0 +.extern FUN_0205FD38 +.extern FUN_0205FDDC +.extern FUN_0205FE10 +.extern FUN_0205FF5C +.extern FUN_02060144 +.extern FUN_0206015C +.extern FUN_02060490 +.extern FUN_02060790 +.extern FUN_020607D4 +.extern FUN_02060F3C +.extern FUN_02060F88 +.extern FUN_02060F9C +.extern FUN_02060FD0 +.extern FUN_020612EC +.extern FUN_020612F8 +.extern FUN_02061374 +.extern FUN_020613CC +.extern FUN_02061460 +.extern FUN_02061574 +.extern FUN_02061A8C +.extern FUN_02063650 +.extern FUN_0206367C +.extern FUN_02063888 +.extern FUN_020638BC +.extern FUN_02063948 +.extern FUN_02063964 +.extern FUN_0206486C +.extern FUN_020649B0 +.extern FUN_020649D4 +.extern FUN_02064CA8 +.extern FUN_02064CC8 +.extern FUN_02064D10 +.extern FUN_02064D4C +.extern FUN_02064D88 +.extern FUN_02064E20 +.extern FUN_02064E60 +.extern FUN_02064E90 +.extern FUN_02065054 +.extern FUN_02065070 +.extern FUN_02065078 +.extern FUN_02065314 +.extern FUN_02065344 +.extern FUN_02066818 +.extern FUN_02066978 +.extern FUN_020669A0 +.extern FUN_020669C0 +.extern FUN_020669D4 +.extern FUN_02066A20 +.extern FUN_02066ACC +.extern FUN_02066ED8 +.extern FUN_020671BC +.extern FUN_020672BC +.extern FUN_02067830 +.extern FUN_02068678 +.extern FUN_02068854 +.extern FUN_020689E0 +.extern FUN_02068AAC +.extern FUN_02068B68 +.extern FUN_02068C00 +.extern FUN_02068E14 +.extern FUN_020690C4 +.extern FUN_020690CC +.extern FUN_020690E4 +.extern FUN_02069168 +.extern FUN_020699A4 +.extern FUN_02069A64 +.extern FUN_02069B40 +.extern FUN_02069B88 +.extern FUN_0206A23C +.extern FUN_0206AC74 +.extern FUN_0206AD4C +.extern FUN_0206B20C +.extern FUN_0206B3E4 +.extern FUN_0206B484 +.extern FUN_0206B57C +.extern FUN_0206B5E4 +.extern FUN_0206B620 +.extern FUN_0206B644 +.extern FUN_0206B6C8 +.extern FUN_0206B7BC +.extern FUN_0206B900 +.extern FUN_0206B9AC +.extern FUN_0206B9B0 +.extern FUN_0206BAE4 +.extern FUN_0206BB1C +.extern FUN_0206BB28 +.extern FUN_0206C700 +.extern FUN_0206C91C +.extern FUN_0206C92C +.extern FUN_0206E2F0 +.extern FUN_0206E308 +.extern FUN_0206E314 +.extern FUN_0206E340 +.extern FUN_0206E354 +.extern FUN_0206E358 +.extern FUN_0206E360 +.extern FUN_0206E37C +.extern FUN_0206E384 +.extern FUN_0206E38C +.extern FUN_0206E7B8 +.extern FUN_0206EA30 +.extern FUN_0206EA98 +.extern FUN_0206EAB8 +.extern FUN_0206EB1C +.extern FUN_0206ED24 +.extern FUN_0206ED38 +.extern FUN_0206EDD4 +.extern FUN_0206EE50 +.extern FUN_0206EE64 +.extern FUN_0206EEF8 +.extern FUN_0206EFEC +.extern FUN_0206F158 +.extern FUN_0206F164 +.extern FUN_0206F17C +.extern FUN_0206F190 +.extern FUN_0206F3B8 +.extern FUN_0206F3D8 +.extern FUN_02077A84 +.extern FUN_02077AC4 +.extern FUN_02079C70 +.extern FUN_0207B000 +.extern FUN_0207C2A4 +.extern FUN_0207FC5C +.extern FUN_0207FCE0 +.extern FUN_0208089C +.extern FUN_02080C38 +.extern FUN_02080E0C +.extern FUN_02081214 +.extern FUN_020814E8 +.extern FUN_02081DC4 +.extern FUN_02081EB8 +.extern FUN_0208201C +.extern FUN_02082034 +.extern FUN_0208206C +.extern FUN_02082090 +.extern FUN_020820B8 +.extern FUN_020820DC +.extern FUN_0208210C +.extern FUN_0208213C +.extern FUN_02082140 +.extern FUN_02082158 +.extern FUN_0208217C +.extern FUN_02082190 +.extern FUN_020821B4 +.extern FUN_020821C4 +.extern FUN_020821DC +.extern FUN_020821F0 +.extern FUN_02082214 +.extern FUN_0208223C +.extern FUN_0208224C +.extern FUN_02082254 +.extern FUN_02082284 +.extern FUN_020822F0 +.extern FUN_02082444 +.extern FUN_02082508 +.extern FUN_020825A0 +.extern FUN_02082630 +.extern FUN_02085140 +.extern FUN_020851B8 +.extern FUN_020851DC +.extern FUN_020851F8 +.extern FUN_0208524C +.extern FUN_02085258 +.extern FUN_02085264 +.extern FUN_0208526C +.extern FUN_02085290 +.extern FUN_020852E8 +.extern FUN_02085338 +.extern FUN_020853A8 +.extern FUN_020853B0 +.extern FUN_020853B4 +.extern FUN_020853BC +.extern FUN_020853E4 +.extern FUN_020853E8 +.extern FUN_020853EC +.extern FUN_020853F0 +.extern FUN_020853FC +.extern FUN_020854E0 +.extern FUN_02085538 +.extern FUN_02085578 +.extern FUN_020855B0 +.extern FUN_020855E4 +.extern FUN_0208560C +.extern FUN_0208562C +.extern FUN_02085F48 +.extern FUN_020863DC +.extern FUN_02087A1C +.extern FUN_02087A50 +.extern FUN_02087D00 +.extern FUN_02087E14 +.extern FUN_0208881C +.extern FUN_02088960 +.extern FUN_02088D40 +.extern FUN_02088DD8 +.extern FUN_02088DF0 +.extern FUN_02088DF8 +.extern FUN_02088EF8 +.extern FUN_02089D90 +.extern FUN_0208A0B8 +.extern FUN_0208A300 +.extern FUN_0208A320 +.extern FUN_0208A338 +.extern FUN_0208A9B8 +.extern FUN_0208ACEC +.extern FUN_0208AD80 +.extern FUN_0208AF80 +.extern FUN_0208AF94 +.extern FUN_0208AFA8 +.extern FUN_0208B05C +.extern FUN_0208B128 +.extern FUN_0208B4A0 +.extern FUN_02090CC8 +.extern FUN_02090DB8 +.extern FUN_02096B14 +.extern FUN_02096B78 +.extern FUN_02096CCC +.extern FUN_02096D2C +.extern FUN_02096DA0 +.extern FUN_02096F18 +.extern FUN_02096F80 +.extern FUN_02096FB0 +.extern FUN_0209700C +.extern FUN_020973B4 +.extern FUN_020ADA84 +.extern FUN_020ADA98 +.extern FUN_020ADAB0 +.extern FUN_020ADB18 +.extern FUN_020ADBE8 +.extern FUN_020ADC74 +.extern FUN_020ADDC0 +.extern FUN_020ADDC8 +.extern FUN_020ADDF0 +.extern FUN_020ADE2C +.extern FUN_020AE554 +.extern FUN_020AE5B0 +.extern FUN_020AE600 +.extern FUN_020AE638 +.extern FUN_020AE684 +.extern FUN_020AE82C +.extern FUN_020AE84C +.extern FUN_020AE868 +.extern FUN_020AE8CC +.extern FUN_020AE918 +.extern FUN_020AEB70 +.extern FUN_020AEC7C +.extern FUN_020AEC98 +.extern FUN_020AEE40 +.extern FUN_020AEEB8 +.extern FUN_020AEF1C +.extern FUN_020AF2E0 +.extern FUN_020AF2F4 +.extern FUN_020AF30C +.extern FUN_020AF894 +.extern FUN_020AF9C4 +.extern FUN_020AFA28 +.extern FUN_020AFA80 +.extern FUN_020AFBA8 +.extern FUN_020AFBFC +.extern FUN_020AFC04 +.extern FUN_020AFEB8 +.extern FUN_020AFFD8 +.extern FUN_020B0030 +.extern FUN_020B0088 +.extern FUN_020B00F0 +.extern FUN_020B0138 +.extern FUN_020B0180 +.extern FUN_020B0250 +.extern FUN_020B02C8 +.extern FUN_020B0448 +.extern FUN_020B0870 +.extern FUN_020B0BB0 +.extern FUN_020B0C7C +.extern FUN_020B0E34 +.extern FUN_020B0FC0 +.extern FUN_020B10E8 +.extern FUN_020B1240 +.extern FUN_020B1340 +.extern FUN_020B1528 +.extern FUN_020B1768 +.extern FUN_020B19C4 +.extern FUN_020B19DC +.extern FUN_020B1A14 +.extern FUN_020B1A24 +.extern FUN_020B1EA4 +.extern FUN_020B1EC4 +.extern FUN_020B1EE4 +.extern FUN_020B1EFC +.extern FUN_020B1F80 +.extern FUN_020B20C8 +.extern FUN_020B2194 +.extern FUN_020B224C +.extern FUN_020B23D8 +.extern FUN_020B242C +.extern FUN_020B2794 +.extern FUN_020B28B4 +.extern FUN_020B2A08 +.extern FUN_020B2B08 +.extern FUN_020B2B58 +.extern FUN_020B2D9C +.extern FUN_020B317C +.extern FUN_020B31F0 +.extern FUN_020B326C +.extern FUN_020B3334 +.extern FUN_020B3390 +.extern FUN_020B33A0 +.extern FUN_020B4358 +.extern FUN_020B43A4 +.extern FUN_020B442C +.extern FUN_020B4568 +.extern FUN_020B4F38 +.extern FUN_020B502C +.extern FUN_020B772C +.extern FUN_020B7790 +.extern FUN_020B7C58 +.extern FUN_020B7C78 +.extern FUN_020B7CDC +.extern FUN_020B7CE4 +.extern FUN_020B7CF0 +.extern FUN_020B7D28 +.extern FUN_020B7DFC +.extern FUN_020B7E10 +.extern FUN_020B7E1C +.extern FUN_020B80B4 +.extern FUN_020B844C +.extern FUN_020B8474 +.extern FUN_020B849C +.extern FUN_020BAC98 +.extern FUN_020BAFB8 +.extern FUN_020BB1C0 +.extern FUN_020BB394 +.extern FUN_020BB59C +.extern FUN_020BB7F4 +.extern FUN_020BC0FC +.extern FUN_020BC13C +.extern FUN_020BC2A0 +.extern FUN_020C0174 +.extern FUN_020C01A0 +.extern FUN_020C01D0 +.extern FUN_020C03B8 +.extern FUN_020C041C +.extern FUN_020C044C +.extern FUN_020C04DC +.extern FUN_020C0510 +.extern FUN_020C054C +.extern FUN_020C0670 +.extern FUN_020C0688 +.extern FUN_020C0DD4 +.extern FUN_020C0E14 +.extern FUN_020C0E7C +.extern FUN_020C0EA4 +.extern FUN_020C0EF4 +.extern FUN_020C0F30 +.extern FUN_020C0F50 +.extern FUN_020C0F68 +.extern FUN_020C0F80 +.extern FUN_020C0F8C +.extern FUN_020C0F9C +.extern FUN_020C0FDC +.extern FUN_020C1040 +.extern FUN_020C10A4 +.extern FUN_020C1148 +.extern FUN_020C1180 +.extern FUN_020C1E58 +.extern FUN_020C1E68 +.extern FUN_020C1EA4 +.extern FUN_020C1F54 +.extern FUN_020C1FA4 +.extern FUN_020C1FF0 +.extern FUN_020C20DC +.extern FUN_020C2104 +.extern FUN_020C217C +.extern FUN_020C226C +.extern FUN_020C22D0 +.extern FUN_020C23FC +.extern FUN_020C26F8 +.extern FUN_020C2828 +.extern FUN_020C290C +.extern FUN_020C2A94 +.extern FUN_020C35E0 +.extern FUN_020C360C +.extern FUN_020C3640 +.extern FUN_020C3674 +.extern FUN_020C36A8 +.extern FUN_020C3910 +.extern FUN_020C3980 +.extern FUN_020C39CC +.extern FUN_020C3EA4 +.extern FUN_020C3EB0 +.extern FUN_020C6034 +.extern FUN_020C605C +.extern FUN_021D74E0 +.extern FUN_021D76AC +.extern FUN_021D77C4 +.extern FUN_021D7800 +.extern FUN_021D78FC +.extern FUN_021D79B4 +.extern FUN_021D7CA4 +.extern FUN_021D7F8C +.extern FUN_021D8018 +.extern FUN_021D8164 +.extern FUN_021D82BC +.extern FUN_021D8320 +.extern FUN_021D836C +.extern FUN_021D83A8 +.extern FUN_021D83C0 +.extern FUN_021D844C +.extern FUN_021D8494 +.extern FUN_021D85FC +.extern FUN_021D8624 +.extern FUN_021D865C +.extern FUN_021D8758 +.extern FUN_021D8820 +.extern FUN_021D88E4 +.extern FUN_021D89CC +.extern FUN_021D8B64 +.extern FUN_021D8C24 +.extern FUN_021D917C +.extern FUN_021D959C +.extern FUN_021D967C +.extern FUN_021D96F4 +.extern FUN_021D9708 +.extern FUN_021D971C +.extern FUN_021D9820 +.extern FUN_021D99F8 +.extern FUN_021DA464 +.extern FUN_021DA4EC +.extern FUN_021DA54C +.extern FUN_021DA58C +.extern FUN_021DA5B8 +.extern FUN_021DA5C8 +.extern FUN_021DA5D0 +.extern FUN_021DA5D8 +.extern FUN_021DA7B4 +.extern FUN_021DAAA4 +.extern FUN_021DAC70 +.extern FUN_021DAE40 +.extern FUN_021DAED4 +.extern FUN_021DAF28 +.extern FUN_021DAF78 +.extern FUN_021DAF98 +.extern FUN_021DB030 +.extern FUN_021DB7E8 +.extern FUN_021DB858 +.extern FUN_021DC174 +.extern FUN_021DD6F0 +.extern FUN_021DD718 +.extern FUN_021DDB08 +.extern FUN_021E1374 +.extern FUN_021E1858 +.extern FUN_021E1994 +.extern FUN_021E1BF8 +.extern FUN_021E1C4C +.extern FUN_021E1C54 +.extern FUN_021E1ECC +.extern FUN_021E1F34 +.extern FUN_021E1F58 +.extern FUN_021E1F60 +.extern FUN_021E2464 +.extern FUN_021E2608 +.extern FUN_021E26CC +.extern FUN_021E27E8 +.extern FUN_021E288C +.extern FUN_021E28A0 +.extern FUN_021E2950 +.extern FUN_021E29B4 +.extern FUN_021E29C8 +.extern FUN_021E2A70 +.extern FUN_021E2AD4 +.extern FUN_021E2B80 +.extern FUN_021E2B9C +.extern FUN_021E2BB8 +.extern FUN_021E2BD0 +.extern FUN_021E2C24 +.extern FUN_021E2C58 +.extern FUN_021E2CBC +.extern FUN_021E32F0 +.extern FUN_021E331C +.extern FUN_021E3424 +.extern FUN_021E3444 +.extern FUN_021E495C +.extern FUN_021E4C54 +.extern FUN_021E4C60 +.extern FUN_021E4DE4 +.extern FUN_021E5614 +.extern FUN_021E57D4 +.extern FUN_021E5970 +.extern FUN_021E5B30 +.extern FUN_021E5FD8 +.extern FUN_021E5FE0 +.extern FUN_021E6410 +.extern FUN_021E643C +.extern FUN_021E6990 +.extern FUN_021E69BC +.extern FUN_021E6BF4 +.extern FUN_021E7030 +.extern FUN_021E70F0 +.extern FUN_021E7138 +.extern FUN_021E7184 +.extern FUN_021E71E8 +.extern FUN_021E7750 +.extern FUN_021E799C +.extern FUN_021E7AC0 +.extern FUN_021E7EA0 +.extern FUN_021E7EB0 +.extern FUN_021E7EC4 +.extern FUN_021E7EC8 +.extern FUN_021E7ED0 +.extern FUN_021E7ED8 +.extern FUN_021E7FBC +.extern FUN_021E8128 +.extern FUN_021E8130 +.extern FUN_021E8140 +.extern FUN_021E8144 +.extern FUN_021E8148 +.extern FUN_021E8158 +.extern FUN_021E81BC +.extern FUN_021E84F4 +.extern FUN_021E856C +.extern FUN_021E8588 +.extern FUN_021E85E4 +.extern FUN_021E85FC +.extern FUN_021EAE90 +.extern FUN_021EB044 +.extern FUN_021EC57C +.extern FUN_021EC71C +.extern FUN_021EC854 +.extern FUN_021EC864 +.extern FUN_021ECD64 +.extern FUN_021ECF14 +.extern FUN_021ED0CC +.extern FUN_021ED49C +.extern FUN_021ED4E0 +.extern FUN_021ED52C +.extern FUN_021ED5C4 +.extern FUN_021ED5EC +.extern FUN_021ED644 +.extern FUN_021ED940 +.extern FUN_021EDA48 +.extern FUN_021EDBC8 +.extern FUN_021EF5E0 +.extern FUN_021EF604 +.extern FUN_021EF620 +.extern FUN_021EF654 +.extern FUN_021EF824 +.extern FUN_021EF844 +.extern FUN_021EF8C8 +.extern FUN_021EF8DC +.extern FUN_021EFA9C +.extern FUN_021F02C4 +.extern FUN_021F1D8C +.extern FUN_021F1DC8 +.extern FUN_021F1DFC +.extern FUN_021F1EC0 +.extern FUN_021F1F78 +.extern FUN_021F2094 +.extern FUN_021F20D8 +.extern FUN_021F20F8 +.extern FUN_021F2AF4 +.extern FUN_021F2E0C +.extern FUN_021F2E28 +.extern FUN_021F2F48 +.extern FUN_021F2F6C +.extern FUN_021F3A18 +.extern FUN_021F3AB4 +.extern FUN_021F3B4C +.extern FUN_021F3B7C +.extern FUN_021F3DA4 +.extern FUN_021F44D8 +.extern FUN_021F4520 +.extern FUN_021F4568 +.extern FUN_021F4594 +.extern FUN_021F45E8 +.extern FUN_021F4608 +.extern FUN_021F4BD0 +.extern FUN_021F4C88 +.extern FUN_021F4D80 +.extern FUN_021F4DC8 +.extern FUN_021F4E7C +.extern FUN_021F57EC +.extern FUN_021F5C44 +.extern FUN_021F61DC +.extern FUN_021F61E8 +.extern FUN_02211E60 +.extern FUN_0222D5C0 +.extern FUN_0222DAEC +.extern FUN_0222DD1C +.extern FUN_0222DD38 +.extern FUN_0222E2BC +.extern FUN_0222E360 +.extern FUN_0222E3A0 +.extern FUN_0222E7E8 +.extern FUN_0222E874 +.extern FUN_0222ED34 +.extern FUN_0222EDBC +.extern FUN_0222F440 +.extern FUN_0222F480 +.extern FUN_0222F7E0 +.extern FUN_0222F990 +.extern FUN_022300D4 +.extern FUN_022300DC +.extern FUN_022300E4 +.extern FUN_022300E8 +.extern FUN_022300F4 +.extern FUN_02230100 +.extern FUN_0223010C +.extern FUN_02230118 +.extern FUN_02230124 +.extern FUN_02230F3C +.extern FUN_02230F70 +.extern FUN_02230F80 +.extern FUN_02231344 +.extern FUN_02231350 +.extern FUN_0223135C +.extern FUN_02231368 +.extern FUN_02231374 +.extern FUN_02239944 +.extern FUN_02239AAC +.extern FUN_0223CACC +.extern FUN_0223CB08 +.extern FUN_0223CCDC +.extern FUN_0223CD7C +.extern FUN_0223D3D0 +.extern FUN_0223D638 +.extern FUN_0223D648 +.extern FUN_0223DFB4 +.extern FUN_0223E060 +.extern FUN_0223E118 +.extern FUN_0223E154 +.extern FUN_0223E1A4 +.extern FUN_0223E1E0 +.extern FUN_0223E2AC +.extern FUN_0223E4A8 +.extern FUN_0223E4D4 +.extern FUN_0223E554 +.extern FUN_0223E6B8 +.extern FUN_0223E734 +.extern FUN_0223E7FC +.extern FUN_0223EB8C +.extern FUN_0223EF7C +.extern FUN_0223F4D8 +.extern FUN_0223F4F4 +.extern FUN_0223F8D8 +.extern FUN_0223FCE8 +.extern FUN_02240790 +.extern FUN_022407CC +.extern FUN_022407DC +.extern FUN_022407F8 +.extern FUN_02240834 +.extern FUN_02240844 +.extern FUN_0224089C +.extern FUN_022408FC +.extern FUN_022411F4 +.extern FUN_02241230 +.extern FUN_02241914 +.extern FUN_02242A38 +.extern FUN_02242BE0 +.extern FUN_0224312C +.extern FUN_022432E4 +.extern FUN_0224339C +.extern FUN_022433A8 +.extern FUN_022433B0 +.extern FUN_022433B8 +.extern FUN_022433F8 +.extern FUN_02243408 +.extern FUN_02243428 +.extern FUN_02243448 +.extern FUN_0224345C +.extern FUN_022434AC +.extern FUN_022434BC +.extern FUN_022434D0 +.extern FUN_02243694 +.extern FUN_022436C8 +.extern FUN_022436E8 +.extern FUN_02243780 +.extern FUN_02243838 +.extern FUN_022438DC +.extern FUN_022438E0 +.extern FUN_022438FC +.extern FUN_02243920 +.extern FUN_022439F8 +.extern FUN_02243AD8 +.extern FUN_02243BA8 +.extern FUN_02243C5C +.extern FUN_02243D3C +.extern FUN_02243DA0 +.extern FUN_02243DB8 +.extern FUN_02243DC0 +.extern FUN_02243DC4 +.extern FUN_02243DD8 +.extern FUN_02243DE0 +.extern FUN_02243E34 +.extern FUN_02243E74 +.extern FUN_02243F18 +.extern FUN_02243F50 +.extern FUN_02243F9C +.extern FUN_02244210 +.extern FUN_02244558 +.extern FUN_02244660 +.extern FUN_022446BC +.extern FUN_022446E0 +.extern FUN_022446FC +.extern FUN_02244758 +.extern FUN_02244770 +.extern FUN_02244824 +.extern FUN_0224484C +.extern FUN_02244D1C +.extern FUN_02244D20 +.extern FUN_02244D3C +.extern FUN_02244D40 +.extern FUN_02244D58 +.extern FUN_02244D98 +.extern FUN_02244DA0 +.extern FUN_02244DB0 +.extern FUN_02244DBC +.extern FUN_02244DC4 +.extern FUN_02244EF8 +.extern FUN_02244F18 +.extern FUN_02244F24 +.extern FUN_02244F2C +.extern FUN_02245088 +.extern FUN_02245114 +.extern FUN_02245190 +.extern FUN_02245198 +.extern FUN_022451F0 +.extern FUN_0224525C +.extern FUN_022452A4 +.extern FUN_02245324 +.extern FUN_02245340 +.extern FUN_02245358 +.extern FUN_0224566C +.extern FUN_022456E8 +.extern FUN_02245844 +.extern FUN_02245910 +.extern FUN_02245F1C +.extern FUN_02245F4C +.extern FUN_02245FA0 +.extern FUN_022461A4 +.extern FUN_022461B8 +.extern FUN_0224666C +.extern FUN_022466A0 +.extern FUN_022466AC +.extern FUN_02246F1C +.extern FUN_02247294 +.extern FUN_022472AC +.extern FUN_02247544 +.extern FUN_02247614 +.extern FUN_02247728 +.extern FUN_02247808 +.extern FUN_02247970 +.extern FUN_02247A34 +.extern FUN_022483BC +.extern FUN_022483E0 +.extern FUN_022483EC +.extern FUN_02248724 +.extern FUN_0224884C +.extern FUN_022488CC +.extern FUN_022488EC +.extern FUN_022488F4 +.extern FUN_022488FC +.extern FUN_0224891C +.extern FUN_02248B54 +.extern FUN_02248B58 +.extern FUN_02248B5C +.extern FUN_02248B60 +.extern FUN_02248B6C +.extern FUN_02248CC0 +.extern FUN_02248CD0 +.extern FUN_02248DF8 +.extern FUN_02248F70 +.extern FUN_02248FE0 +.extern FUN_02249038 +.extern FUN_022490A0 +.extern FUN_022491FC +.extern FUN_022494C8 +.extern FUN_02249508 +.extern FUN_02249668 +.extern FUN_022497E8 +.extern FUN_02249E6C +.extern FUN_02249E78 +.extern FUN_02249E84 +.extern FUN_02249E90 +.extern FUN_0224A310 +.extern FUN_0224A528 +.extern FUN_0224A7C8 +.extern FUN_0224ABAC +.extern FUN_0224B124 +.extern FUN_0224B2C4 +.extern FUN_0224B568 +.extern FUN_0224B818 +.extern FUN_0224B86C +.extern FUN_0224B9E0 +.extern FUN_0224BBEC +.extern FUN_0224BD90 +.extern FUN_0224C038 +.extern FUN_0224C27C +.extern FUN_0224C520 +.extern FUN_0224C678 +.extern FUN_0224C6E8 +.extern FUN_0224C6F4 +.extern FUN_0224C700 +.extern FUN_0224C8C8 +.extern FUN_0224CA2C +.extern FUN_0224CA54 +.extern FUN_0224CA58 +.extern FUN_0224CA88 +.extern FUN_0224CA94 +.extern FUN_0224CAA0 +.extern FUN_0224CAB4 +.extern FUN_0224CB30 +.extern FUN_0224CBB0 +.extern FUN_0224CC24 +.extern FUN_0224CECC +.extern FUN_0224D14C +.extern FUN_0224D2E0 +.extern FUN_0224D3E8 +.extern FUN_0224D70C +.extern FUN_0224D76C +.extern FUN_0224D79C +.extern FUN_0224DCB8 +.extern FUN_0224DD94 +.extern FUN_0224DDB8 +.extern FUN_0224E554 +.extern FUN_0224E764 +.extern FUN_0224E7C4 +.extern FUN_0224F12C +.extern FUN_02252534 +.extern FUN_02252538 +.extern FUN_022567E0 +.extern FX_Div +.extern FX_GetDivResult +.extern FX_GetDivResultFx64c +.extern FX_Init +.extern FX_InvAsync +.extern FX_Modf +.extern FX_Sqrt +.extern G2S_GetBG0CharPtr +.extern G2S_GetBG1CharPtr +.extern G2S_GetBG2CharPtr +.extern G2S_GetBG3CharPtr +.extern G2_GetBG0CharPtr +.extern G2_GetBG1CharPtr +.extern G2_GetBG2CharPtr +.extern G2_GetBG3CharPtr +.extern G2x_SetBGyAffine_ +.extern G2x_SetBlendAlpha_ +.extern G2x_SetBlendBrightness_ +.extern G3X_GetBoxTestResult +.extern G3X_GetClipMtx +.extern G3X_GetVectorMtx +.extern G3X_Init +.extern G3X_InitMtxStack +.extern G3X_ResetMtxStack +.extern G3X_SetClearColor +.extern G3X_SetFog +.extern G3_LoadMtx43 +.extern G3_MultMtx33 +.extern G3_MultMtx43 +.extern G3_RotX +.extern G3_RotY +.extern G3_RotZ +.extern G3i_LookAt_ +.extern G3i_OrthoW_ +.extern G3i_PerspectiveW_ +.extern GXS_BeginLoadBGExtPltt +.extern GXS_BeginLoadOBJExtPltt +.extern GXS_EndLoadBGExtPltt +.extern GXS_EndLoadOBJExtPltt +.extern GXS_LoadBG0Char +.extern GXS_LoadBG0Scr +.extern GXS_LoadBG1Char +.extern GXS_LoadBG1Scr +.extern GXS_LoadBG2Char +.extern GXS_LoadBG2Scr +.extern GXS_LoadBG3Char +.extern GXS_LoadBG3Scr +.extern GXS_LoadBGExtPltt +.extern GXS_LoadBGPltt +.extern GXS_LoadOAM +.extern GXS_LoadOBJ +.extern GXS_LoadOBJExtPltt +.extern GXS_LoadOBJPltt +.extern GXS_SetGraphicsMode +.extern GX_BeginLoadBGExtPltt +.extern GX_BeginLoadClearImage +.extern GX_BeginLoadOBJExtPltt +.extern GX_BeginLoadTex +.extern GX_BeginLoadTexPltt +.extern GX_DisableBankForLCDC +.extern GX_DispOff +.extern GX_DispOn +.extern GX_EndLoadBGExtPltt +.extern GX_EndLoadClearImage +.extern GX_EndLoadOBJExtPltt +.extern GX_EndLoadTex +.extern GX_EndLoadTexPltt +.extern GX_GetBankForOBJ +.extern GX_GetBankForOBJExtPltt +.extern GX_GetBankForSubOBJ +.extern GX_GetBankForSubOBJExtPltt +.extern GX_HBlankIntr +.extern GX_Init +.extern GX_LoadBG0Char +.extern GX_LoadBG0Scr +.extern GX_LoadBG1Char +.extern GX_LoadBG1Scr +.extern GX_LoadBG2Char +.extern GX_LoadBG2Scr +.extern GX_LoadBG3Char +.extern GX_LoadBG3Scr +.extern GX_LoadBGExtPltt +.extern GX_LoadBGPltt +.extern GX_LoadClearImageColor +.extern GX_LoadClearImageDepth +.extern GX_LoadOAM +.extern GX_LoadOBJ +.extern GX_LoadOBJExtPltt +.extern GX_LoadOBJPltt +.extern GX_LoadTex +.extern GX_LoadTexPltt +.extern GX_ResetBankForBG +.extern GX_ResetBankForBGExtPltt +.extern GX_ResetBankForOBJ +.extern GX_ResetBankForOBJExtPltt +.extern GX_ResetBankForSubBG +.extern GX_ResetBankForSubOBJ +.extern GX_ResetBankForTex +.extern GX_ResetBankForTexPltt +.extern GX_SetBankForBG +.extern GX_SetBankForBGExtPltt +.extern GX_SetBankForLCDC +.extern GX_SetBankForOBJ +.extern GX_SetBankForOBJExtPltt +.extern GX_SetBankForSubBG +.extern GX_SetBankForSubBGExtPltt +.extern GX_SetBankForSubOBJ +.extern GX_SetBankForSubOBJExtPltt +.extern GX_SetBankForTex +.extern GX_SetBankForTexPltt +.extern GX_SetGraphicsMode +.extern GX_VBlankIntr +.extern GXx_SetMasterBrightness_ +.extern IC_InvalidateAll +.extern IC_InvalidateRange +.extern InitGraphicMemory +.extern InitScriptContext +.extern InitSystemForTheGame +.extern LoadFromNARC +.extern LoadFromNARC_7 +.extern LoadFromNarc_2 +.extern LoadPlayerDataAddress +.extern MATH_CalcCRC16 +.extern MATH_CalcCRC16CCITT +.extern MATH_CalcCRC32 +.extern MATH_CalcCRC8 +.extern MATH_CalcHMACSHA1 +.extern MATH_CalcMD5 +.extern MATH_CalcSHA1 +.extern MATH_CountPopulation +.extern MATH_MD5GetHash +.extern MATH_MD5Init +.extern MATH_MD5Update +.extern MATH_SHA1GetHash +.extern MATH_SHA1Init +.extern MATH_SHA1Update +.extern MATHi_CRC16InitTable +.extern MATHi_CRC16InitTableRev +.extern MATHi_CRC32InitTableRev +.extern MATHi_CRC8InitTable +.extern MATHi_CalcHMAC +.extern MIC_DoSamplingAsync +.extern MIC_Init +.extern MIC_StartAutoSampling +.extern MIC_StopAutoSampling +.extern MI_Copy36B +.extern MI_Copy48B +.extern MI_Copy64B +.extern MI_CpuCopy8 +.extern MI_CpuFill8 +.extern MI_DmaCopy16 +.extern MI_DmaCopy32 +.extern MI_DmaCopy32Async +.extern MI_DmaFill32 +.extern MI_DmaFill32Async +.extern MI_HBlankDmaCopy16 +.extern MI_HBlankDmaCopy32 +.extern MI_Init +.extern MI_SendGXCommandAsync +.extern MI_SendGXCommandAsyncFast +.extern MI_StopDma +.extern MI_SwapWord +.extern MI_UncompressLZ8 +.extern MI_WaitDma +.extern MI_Zero36B +.extern MIi_CardDmaCopy32 +.extern MIi_CheckDma0SourceAddress +.extern MIi_CpuClear16 +.extern MIi_CpuClear32 +.extern MIi_CpuClearFast +.extern MIi_CpuCopy16 +.extern MIi_CpuCopy32 +.extern MIi_CpuCopyFast +.extern MIi_CpuSend32 +.extern MIi_DmaSetParams +.extern MIi_DmaSetParams_noInt +.extern MIi_DmaSetParams_wait +.extern MIi_DmaSetParams_wait_noInt +.extern MIi_UncompressBackward +.extern MTX_Concat33 +.extern MTX_Concat43 +.extern MTX_Identity33_ +.extern MTX_Identity43_ +.extern MTX_MultVec33 +.extern MTX_MultVec43 +.extern MTX_RotX33_ +.extern MTX_RotY33_ +.extern MTX_RotZ33_ +.extern MTX_Scale43_ +.extern NitroMain +.extern OS_AllocFromArenaHi +.extern OS_AllocFromArenaLo +.extern OS_AllocFromHeap +.extern OS_CancelAlarm +.extern OS_CreateAlarm +.extern OS_CreateThread +.extern OS_DestroyThread +.extern OS_DisableInterrupts +.extern OS_DisableIrqMask +.extern OS_DisableScheduler +.extern OS_EnableIrqMask +.extern OS_EnableScheduler +.extern OS_ExitThread +.extern OS_FreeToHeap +.extern OS_GetCpsrIrq +.extern OS_GetDTCMAddress +.extern OS_GetInitArenaHi +.extern OS_GetInitArenaLo +.extern OS_GetIrqFunction +.extern OS_GetLockID +.extern OS_GetLowEntropyData +.extern OS_GetMacAddress +.extern OS_GetOwnerInfo +.extern OS_GetOwnerRtcOffset +.extern OS_GetProcMode +.extern OS_GetThreadPriority +.extern OS_GetTick +.extern OS_GetTickLo +.extern OS_Halt +.extern OS_IRQTable +.extern OS_Init +.extern OS_InitAlarm +.extern OS_InitMessageQueue +.extern OS_InitMutex +.extern OS_InitTick +.extern OS_IrqDummy +.extern OS_IrqHandler +.extern OS_IsAlarmAvailable +.extern OS_IsRunOnEmulator +.extern OS_IsThreadTerminated +.extern OS_IsTickAvailable +.extern OS_JamMessage +.extern OS_JoinThread +.extern OS_LockCartridge +.extern OS_LockMutex +.extern OS_ReadMessage +.extern OS_ReadOwnerOfLockWord +.extern OS_ReceiveMessage +.extern OS_ReleaseLockID +.extern OS_RescheduleThread +.extern OS_ResetRequestIrqMask +.extern OS_ResetSystem +.extern OS_RestoreInterrupts +.extern OS_SNPrintf +.extern OS_SendMessage +.extern OS_SetAlarm +.extern OS_SetArenaHi +.extern OS_SetArenaLo +.extern OS_SetDPermissionsForProtectionRegion +.extern OS_SetIrqFunction +.extern OS_SetIrqMask +.extern OS_SetThreadPriority +.extern OS_Sleep +.extern OS_SleepThread +.extern OS_SpinWait +.extern OS_Terminate +.extern OS_TryLockCard +.extern OS_TryLockCartridge +.extern OS_TryLockMutex +.extern OS_UnlockCard +.extern OS_UnlockCartridge +.extern OS_UnlockCartridge2 +.extern OS_UnlockMutex +.extern OS_WaitIrq +.extern OS_WakeupThread +.extern OS_WakeupThreadDirect +.extern OS_YieldThread +.extern OSi_DoResetSystem +.extern OSi_EnterDmaCallback +.extern OSi_IrqDma0 +.extern OSi_IrqDma1 +.extern OSi_IrqDma2 +.extern OSi_IrqDma3 +.extern OSi_IrqThreadQueue +.extern OSi_IrqTimer0 +.extern OSi_IrqTimer1 +.extern OSi_IrqTimer2 +.extern OSi_IrqTimer3 +.extern OSi_IsResetOccurred +.extern OSi_MainExArenaEnabled +.extern OSi_ThreadInfo +.extern OSi_TryLockVram +.extern OSi_UnlockVram +.extern PM_AppendPostSleepCallback +.extern PM_DeletePostSleepCallback +.extern PM_DeletePreSleepCallback +.extern PM_ForceToPowerOff +.extern PM_GetBackLight +.extern PM_GetLCDPower +.extern PM_GoSleepMode +.extern PM_Init +.extern PM_PrependPreSleepCallback +.extern PM_SetAmp +.extern PM_SetAmpGain +.extern PM_SetBackLight +.extern PM_SetLCDPower +.extern PMi_Lock +.extern PMi_ReadRegister +.extern PMi_SendPxiData +.extern PMi_SendSleepStart +.extern PMi_SetLED +.extern PMi_SetLEDAsync +.extern PMi_WaitBusy +.extern PXI_Init +.extern PXI_IsCallbackReady +.extern PXI_SendWordByFifo +.extern PXI_SetFifoRecvCallback +.extern PXIi_HandlerRecvFifoNotEmpty +.extern ProcessBlock +.extern RTC_ConvertDateTimeToSecond +.extern RTC_ConvertDateToDay +.extern RTC_ConvertSecondToDateTime +.extern RTC_GetDate +.extern RTC_GetDateTimeAsync +.extern RTC_GetTime +.extern RTC_Init +.extern RunScriptCommand +.extern SDK_AUTOLOAD_DTCM_START +.extern SDK_AUTOLOAD_LIST +.extern SDK_AUTOLOAD_LIST_END +.extern SDK_AUTOLOAD_START +.extern SDK_MAIN_ARENA_LO +.extern SDK_SECTION_ARENA_DTCM_START +.extern SDK_SECTION_ARENA_EX_START +.extern SDK_SECTION_ARENA_ITCM_START +.extern SDK_STATIC_BSS_END +.extern SDK_STATIC_BSS_START +.extern SND_AssignWaveArc +.extern SND_CalcChannelVolume +.extern SND_DestroyBank +.extern SND_DestroyWaveArc +.extern SND_FlushCommand +.extern SND_GetChannelStatus +.extern SND_GetCurrentCommandTag +.extern SND_GetFirstInstDataPos +.extern SND_GetNextInstData +.extern SND_GetPlayerStatus +.extern SND_GetPlayerTickCounter +.extern SND_GetWaveDataAddress +.extern SND_GetWaveDataCount +.extern SND_Init +.extern SND_InvalidateBankData +.extern SND_InvalidateSeqData +.extern SND_InvalidateWaveData +.extern SND_IsFinishedCommandTag +.extern SND_LockChannel +.extern SND_PauseSeq +.extern SND_PrepareSeq +.extern SND_RecvCommandReply +.extern SND_ResetMasterPan +.extern SND_SetChannelPan +.extern SND_SetChannelTimer +.extern SND_SetChannelVolume +.extern SND_SetMasterPan +.extern SND_SetOutputSelector +.extern SND_SetPlayerChannelPriority +.extern SND_SetPlayerVolume +.extern SND_SetTrackAllocatableChannel +.extern SND_SetTrackPan +.extern SND_SetTrackPitch +.extern SND_SetWaveDataAddress +.extern SND_SetupAlarm +.extern SND_SetupCapture +.extern SND_SetupChannelPcm +.extern SND_StartPreparedSeq +.extern SND_StartTimer +.extern SND_StopSeq +.extern SND_StopTimer +.extern SND_UnlockChannel +.extern SND_WaitForCommandProc +.extern STD_CopyLString +.extern ScriptCall +.extern ScriptJump +.extern ScriptReadHalfword +.extern ScriptReadWord +.extern ScriptReturn +.extern SetupBytecodeScript +.extern SetupNativeScript +.extern StopScript +.extern StringCopy +.extern StringCopyN +.extern StringFillEOS +.extern StringLength +.extern StringNotEqual +.extern StringNotEqualN +.extern TP_CheckError +.extern TP_GetCalibratedPoint +.extern TP_GetLatestIndexInAuto +.extern TP_GetLatestRawPointInAuto +.extern TP_GetUserInfo +.extern TP_Init +.extern TP_RequestAutoSamplingStartAsync +.extern TP_RequestAutoSamplingStopAsync +.extern TP_RequestSamplingAsync +.extern TP_SetCalibrateParam +.extern TP_WaitBusy +.extern TP_WaitRawResult +.extern VEC_Add +.extern VEC_CrossProduct +.extern VEC_DotProduct +.extern VEC_Fx16CrossProduct +.extern VEC_Fx16DotProduct +.extern VEC_Fx16Normalize +.extern VEC_Mag +.extern VEC_Normalize +.extern VEC_Subtract +.extern WM_Disable +.extern WM_Disconnect +.extern WM_Enable +.extern WM_End +.extern WM_EndDCF +.extern WM_EndMP +.extern WM_EndParent +.extern WM_EndScan +.extern WM_Finish +.extern WM_GetAllowedChannel +.extern WM_GetDispersionBeaconPeriod +.extern WM_GetDispersionScanPeriod +.extern WM_GetLinkLevel +.extern WM_Init +.extern WM_Initialize +.extern WM_MeasureChannel +.extern WM_PowerOff +.extern WM_PowerOn +.extern WM_Reset +.extern WM_SetBeaconIndication +.extern WM_SetDCFData +.extern WM_SetEntry +.extern WM_SetGameInfo +.extern WM_SetIndCallback +.extern WM_SetLifeTime +.extern WM_SetMPDataToPortEx +.extern WM_SetParentParameter +.extern WM_SetPortCallback +.extern WM_SetWEPKeyEx +.extern WM_StartConnectEx +.extern WM_StartDCF +.extern WM_StartMP +.extern WM_StartParent +.extern WM_StartScan +.extern WM_StartScanEx +.extern WMi_GetStatusAddress +.extern __call_static_initializers +.extern __destroy_global_chain +.extern _ddiv +.extern _fadd +.extern _fdiv +.extern _feq +.extern _ffix +.extern _ffixu +.extern _fflt +.extern _ffltu +.extern _fgr +.extern _fmul +.extern _fp_init +.extern _fsub +.extern _ll_mod +.extern _ll_mul +.extern _ll_sdiv +.extern _ll_shl +.extern _ll_udiv +.extern _s32_div_f +.extern _u32_div_f +.extern _u32_div_not_0_f +.extern abs +.extern cardi_common +.extern gScriptCmdTable +.extern memcmp +.extern memcpy +.extern memmove +.extern strcmp +.extern strcpy +.extern strlen +.extern tempName_NNS_FndAllocFromExpHeapEx +.extern tempName_NNS_FndCreateExpHeapEx +.extern thunk_FUN_02096e4c +.extern thunk_FUN_02097190 +.extern thunk_FUN_020adc8c +.extern thunk_FUN_020adc8c_2 +.extern thunk_FUN_020afda0 +.extern thunk_FUN_020afda0_2 +.extern thunk_FUN_020b5040 +.extern Unk_0210683C +.extern Unk_02106840 +.extern Unk_02106900 +.extern Unk_02106A00 +.extern Unk_02106A04 +.extern OSi_IrqCallbackInfo +.extern OSi_IrqCallbackInfoIndex +.extern SDK_SYS_STACKSIZE +.extern SDK_IRQ_STACKSIZE +.extern OSi_IsThreadInitialized +.extern OSi_LauncherThread +.extern OSi_CurrentThreadPtr +.extern OSi_IdleThread +.extern OSi_IdleThreadStack +.extern OSi_RescheduleCount +.extern OSi_SystemCallbackInSwitchThread +.extern OSi_Initialized +.extern OSi_HeapInfo +.extern OSi_DebuggerHandler +.extern OSi_ExContext +.extern OSi_UserExceptionHandler +.extern OSi_UserExceptionHandlerArg +.extern OSi_TimerReserved +.extern OSi_UseTick +.extern OSi_NeedResetTimer +.extern OSi_TickCounter +.extern OSi_UseAlarm +.extern OSi_AlarmQueue +.extern OSi_UseVAlarm +.extern OSi_PreviousVCount +.extern OSi_VFrameCount +.extern OSi_VAlarmQueue +.extern OSi_IsInitReset +.extern OSi_vramExclusive +.extern OSi_vramLockId +.extern OSi_ThreadIdCount +.extern OSi_StackForDestructor +.extern SDK_AUTOLOAD_ITCM_START +.extern SDK_AUTOLOAD_ITCM_END +.extern SDK_AUTOLOAD_DTCM_START +.extern SDK_AUTOLOAD_DTCM_END diff --git a/src/FUN_02000DF4.c b/arm9/src/FUN_02000DF4.c similarity index 100% rename from src/FUN_02000DF4.c rename to arm9/src/FUN_02000DF4.c diff --git a/src/main.c b/arm9/src/main.c similarity index 100% rename from src/main.c rename to arm9/src/main.c diff --git a/src/script.c b/arm9/src/script.c similarity index 100% rename from src/script.c rename to arm9/src/script.c diff --git a/src/string_util.c b/arm9/src/string_util.c similarity index 100% rename from src/string_util.c rename to arm9/src/string_util.c diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt new file mode 100644 index 000000000..075d22a90 --- /dev/null +++ b/arm9/undefined_syms.txt @@ -0,0 +1,506 @@ +SDK_SYS_STACKSIZE = 0x00000000; +CONST_34 = 0x00000034; +CONST_3F = 0x0000003F; +SDK_IRQ_STACKSIZE = 0x00000400; + +// .data +// OS +OSi_IrqCallbackInfoIndex = 0x02106818; +// DGT +Unk_0210683C = 0x0210683C; +Unk_02106840 = 0x02106840; +Unk_02106900 = 0x02106900; +Unk_02106A00 = 0x02106A00; +Unk_02106A04 = 0x02106A04; + +// .bss +gBacklightTop = 0x02106FA0; +gBacklightTop_2 = 0x02106FA0; +gUnknown2106FB8 = 0x02106FB8; +gUnknown21C48B8 = 0x021C48B8; +gUnk021C4918 = 0x021C4918; +OSi_IrqCallbackInfo = 0x021D341C; +isInitialized = 0x021D347C; +OSi_StackForDestructor = 0x021D3480; +OSi_RescheduleCount = 0x021D3484; +OSi_ThreadIdCount = 0x021D3488; +OSi_SystemCallbackInSwitchThread = 0x021D348C; +OSi_CurrentThreadPtr = 0x021D3490; +OSi_IsThreadInitialized = 0x021D3494; +OSi_ThreadInfo = 0x021D3498; +OSi_IdleThread = 0x021D34A8; +OSi_LauncherThread = 0x021D3568; +OSi_IdleThreadStack = 0x021D3628; +OSi_Initialized = 0x021D36F0; +OSi_MainExArenaEnabled = 0x021D36F4; +OSi_HeapInfo = 0x021D36F8; +OSi_UserExceptionHandler = 0x021D371C; +OSi_UserExceptionHandlerArg = 0x21D3720; +OSi_DebuggerHandler = 0x021D3724; +OSi_ExContext = 0x021D3728; +OSi_TimerReserved = 0x021D37A8; +OSi_UseTick = 0x021D37AC; +OSi_NeedResetTimer = 0x021D37B0; +OSi_TickCounter = 0x021D37B4; +OSi_UseAlarm = 0x021D37BC; +OSi_AlarmQueue = 0x021D37C0; +OSi_UseVAlarm = 0x021D37C8; +OSi_PreviousVCount = 0x021D37CC; +OSi_VFrameCount = 0x021D37D0; +OSi_VAlarmQueue = 0x021D37D4; +OSi_IsInitReset = 0x021D37DC; +OSi_IsResetOccurred = 0x021D37E0; +OSi_vramExclusive = 0x021D37E4; +OSi_vramLockId = 0x021D37E8; +cardi_common = 0x021D55C0; + +// Overlay +FUN_021D74E0 = 0x021D74E0; +FUN_021D76AC = 0x021D76AC; +gUnk021D76C8 = 0x021D76C8; +FUN_021D77C4 = 0x021D77C4; +FUN_021D7800 = 0x021D7800; +FUN_021D78FC = 0x021D78FC; +FUN_021D79B4 = 0x021D79B4; +FUN_021D7CA4 = 0x021D7CA4; +FUN_021D7F8C = 0x021D7F8C; +FUN_021D8018 = 0x021D8018; +FUN_021D8164 = 0x021D8164; +FUN_021D82BC = 0x021D82BC; +FUN_021D8320 = 0x021D8320; +FUN_021D836C = 0x021D836C; +FUN_021D83A8 = 0x021D83A8; +FUN_021D83C0 = 0x021D83C0; +FUN_021D844C = 0x021D844C; +FUN_021D8494 = 0x021D8494; +FUN_021D85FC = 0x021D85FC; +FUN_021D8624 = 0x021D8624; +FUN_021D865C = 0x021D865C; +FUN_021D8758 = 0x021D8758; +FUN_021D8820 = 0x021D8820; +FUN_021D88E4 = 0x021D88E4; +FUN_021D89CC = 0x021D89CC; +FUN_021D8B64 = 0x021D8B64; +FUN_021D8C24 = 0x021D8C24; +FUN_021D917C = 0x021D917C; +FUN_021D959C = 0x021D959C; +FUN_021D967C = 0x021D967C; +FUN_021D96F4 = 0x021D96F4; +FUN_021D9708 = 0x021D9708; +FUN_021D971C = 0x021D971C; +FUN_021D9820 = 0x021D9820; +FUN_021D99F8 = 0x021D99F8; +FUN_021DA464 = 0x021DA464; +FUN_021DA4EC = 0x021DA4EC; +FUN_021DA54C = 0x021DA54C; +FUN_021DA58C = 0x021DA58C; +FUN_021DA5B8 = 0x021DA5B8; +FUN_021DA5C8 = 0x021DA5C8; +FUN_021DA5D0 = 0x021DA5D0; +FUN_021DA5D8 = 0x021DA5D8; +FUN_021DA7B4 = 0x021DA7B4; +FUN_021DAAA4 = 0x021DAAA4; +FUN_021DAC70 = 0x021DAC70; +FUN_021DAE40 = 0x021DAE40; +FUN_021DAED4 = 0x021DAED4; +FUN_021DAF28 = 0x021DAF28; +FUN_021DAF78 = 0x021DAF78; +FUN_021DAF98 = 0x021DAF98; +FUN_021DB030 = 0x021DB030; +FUN_021DB7E8 = 0x021DB7E8; +FUN_021DB858 = 0x021DB858; +gUnk021DBE18 = 0x021DBE18; +FUN_021DC174 = 0x021DC174; +FUN_021DD6F0 = 0x021DD6F0; +FUN_021DD718 = 0x021DD718; +FUN_021DDB08 = 0x021DDB08; +FUN_021E1374 = 0x021E1374; +FUN_021E1858 = 0x021E1858; +FUN_021E1994 = 0x021E1994; +FUN_021E1BF8 = 0x021E1BF8; +FUN_021E1C4C = 0x021E1C4C; +FUN_021E1C54 = 0x021E1C54; +FUN_021E1ECC = 0x021E1ECC; +FUN_021E1F34 = 0x021E1F34; +FUN_021E1F58 = 0x021E1F58; +FUN_021E1F60 = 0x021E1F60; +FUN_021E2464 = 0x021E2464; +FUN_021E2608 = 0x021E2608; +FUN_021E26CC = 0x021E26CC; +FUN_021E27E8 = 0x021E27E8; +FUN_021E288C = 0x021E288C; +FUN_021E28A0 = 0x021E28A0; +FUN_021E2950 = 0x021E2950; +FUN_021E29B4 = 0x021E29B4; +FUN_021E29C8 = 0x021E29C8; +FUN_021E2A70 = 0x021E2A70; +FUN_021E2AD4 = 0x021E2AD4; +FUN_021E2B80 = 0x021E2B80; +FUN_021E2B9C = 0x021E2B9C; +FUN_021E2BB8 = 0x021E2BB8; +FUN_021E2BD0 = 0x021E2BD0; +FUN_021E2C24 = 0x021E2C24; +FUN_021E2C58 = 0x021E2C58; +FUN_021E2CBC = 0x021E2CBC; +FUN_021E32F0 = 0x021E32F0; +FUN_021E331C = 0x021E331C; +FUN_021E3424 = 0x021E3424; +FUN_021E3444 = 0x021E3444; +FUN_021E495C = 0x021E495C; +FUN_021E4C54 = 0x021E4C54; +FUN_021E4C60 = 0x021E4C60; +FUN_021E4DE4 = 0x021E4DE4; +FUN_021E5614 = 0x021E5614; +FUN_021E57D4 = 0x021E57D4; +FUN_021E5970 = 0x021E5970; +FUN_021E5B30 = 0x021E5B30; +FUN_021E5FD8 = 0x021E5FD8; +FUN_021E5FE0 = 0x021E5FE0; +FUN_021E6410 = 0x021E6410; +FUN_021E643C = 0x021E643C; +FUN_021E6990 = 0x021E6990; +FUN_021E69BC = 0x021E69BC; +FUN_021E6BF4 = 0x021E6BF4; +FUN_021E7030 = 0x021E7030; +FUN_021E70F0 = 0x021E70F0; +FUN_021E7138 = 0x021E7138; +FUN_021E7184 = 0x021E7184; +FUN_021E71E8 = 0x021E71E8; +FUN_021E7750 = 0x021E7750; +FUN_021E799C = 0x021E799C; +FUN_021E7AC0 = 0x021E7AC0; +FUN_021E7EA0 = 0x021E7EA0; +FUN_021E7EB0 = 0x021E7EB0; +FUN_021E7EC4 = 0x021E7EC4; +FUN_021E7EC8 = 0x021E7EC8; +FUN_021E7ED0 = 0x021E7ED0; +FUN_021E7ED8 = 0x021E7ED8; +FUN_021E7FBC = 0x021E7FBC; +FUN_021E8128 = 0x021E8128; +FUN_021E8130 = 0x021E8130; +FUN_021E8140 = 0x021E8140; +FUN_021E8144 = 0x021E8144; +FUN_021E8148 = 0x021E8148; +FUN_021E8158 = 0x021E8158; +FUN_021E81BC = 0x021E81BC; +FUN_021E84F4 = 0x021E84F4; +FUN_021E856C = 0x021E856C; +FUN_021E8588 = 0x021E8588; +FUN_021E85E4 = 0x021E85E4; +FUN_021E85FC = 0x021E85FC; +FUN_021EAE90 = 0x021EAE90; +FUN_021EB044 = 0x021EB044; +FUN_021EC57C = 0x021EC57C; +FUN_021EC71C = 0x021EC71C; +FUN_021EC854 = 0x021EC854; +FUN_021EC864 = 0x021EC864; +FUN_021ECD64 = 0x021ECD64; +FUN_021ECF14 = 0x021ECF14; +FUN_021ED0CC = 0x021ED0CC; +FUN_021ED49C = 0x021ED49C; +FUN_021ED4E0 = 0x021ED4E0; +FUN_021ED52C = 0x021ED52C; +FUN_021ED5C4 = 0x021ED5C4; +FUN_021ED5EC = 0x021ED5EC; +FUN_021ED644 = 0x021ED644; +FUN_021ED940 = 0x021ED940; +FUN_021EDA48 = 0x021EDA48; +FUN_021EDBC8 = 0x021EDBC8; +FUN_021EF5E0 = 0x021EF5E0; +FUN_021EF604 = 0x021EF604; +FUN_021EF620 = 0x021EF620; +FUN_021EF654 = 0x021EF654; +FUN_021EF824 = 0x021EF824; +FUN_021EF844 = 0x021EF844; +FUN_021EF8C8 = 0x021EF8C8; +FUN_021EF8DC = 0x021EF8DC; +FUN_021EFA9C = 0x021EFA9C; +FUN_021F02C4 = 0x021F02C4; +FUN_021F1D8C = 0x021F1D8C; +FUN_021F1DC8 = 0x021F1DC8; +FUN_021F1DFC = 0x021F1DFC; +FUN_021F1EC0 = 0x021F1EC0; +FUN_021F1F78 = 0x021F1F78; +FUN_021F2094 = 0x021F2094; +FUN_021F20D8 = 0x021F20D8; +FUN_021F20F8 = 0x021F20F8; +FUN_021F2AF4 = 0x021F2AF4; +FUN_021F2E0C = 0x021F2E0C; +FUN_021F2E28 = 0x021F2E28; +FUN_021F2F48 = 0x021F2F48; +FUN_021F2F6C = 0x021F2F6C; +FUN_021F3A18 = 0x021F3A18; +FUN_021F3AB4 = 0x021F3AB4; +FUN_021F3B4C = 0x021F3B4C; +FUN_021F3B7C = 0x021F3B7C; +FUN_021F3DA4 = 0x021F3DA4; +FUN_021F44D8 = 0x021F44D8; +FUN_021F4520 = 0x021F4520; +FUN_021F4568 = 0x021F4568; +FUN_021F4594 = 0x021F4594; +FUN_021F45E8 = 0x021F45E8; +FUN_021F4608 = 0x021F4608; +FUN_021F4BD0 = 0x021F4BD0; +FUN_021F4C88 = 0x021F4C88; +FUN_021F4D80 = 0x021F4D80; +FUN_021F4DC8 = 0x021F4DC8; +FUN_021F4E7C = 0x021F4E7C; +FUN_021F57EC = 0x021F57EC; +FUN_021F5C44 = 0x021F5C44; +FUN_021F61DC = 0x021F61DC; +FUN_021F61E8 = 0x021F61E8; +FUN_02211E60 = 0x02211E60; +FUN_0222D5C0 = 0x0222D5C0; +FUN_0222DAEC = 0x0222DAEC; +FUN_0222DD1C = 0x0222DD1C; +FUN_0222DD38 = 0x0222DD38; +FUN_0222E2BC = 0x0222E2BC; +FUN_0222E360 = 0x0222E360; +FUN_0222E3A0 = 0x0222E3A0; +FUN_0222E7E8 = 0x0222E7E8; +FUN_0222E874 = 0x0222E874; +FUN_0222ED34 = 0x0222ED34; +FUN_0222EDBC = 0x0222EDBC; +FUN_0222F440 = 0x0222F440; +FUN_0222F480 = 0x0222F480; +FUN_0222F7E0 = 0x0222F7E0; +FUN_0222F990 = 0x0222F990; +FUN_022300D4 = 0x022300D4; +FUN_022300DC = 0x022300DC; +FUN_022300E4 = 0x022300E4; +FUN_022300E8 = 0x022300E8; +FUN_022300F4 = 0x022300F4; +FUN_02230100 = 0x02230100; +FUN_0223010C = 0x0223010C; +FUN_02230118 = 0x02230118; +FUN_02230124 = 0x02230124; +FUN_02230F3C = 0x02230F3C; +FUN_02230F70 = 0x02230F70; +FUN_02230F80 = 0x02230F80; +FUN_02231344 = 0x02231344; +FUN_02231350 = 0x02231350; +FUN_0223135C = 0x0223135C; +FUN_02231368 = 0x02231368; +FUN_02231374 = 0x02231374; +FUN_02239944 = 0x02239944; +FUN_02239AAC = 0x02239AAC; +FUN_0223CACC = 0x0223CACC; +FUN_0223CB08 = 0x0223CB08; +FUN_0223CCDC = 0x0223CCDC; +FUN_0223CD7C = 0x0223CD7C; +FUN_0223D3D0 = 0x0223D3D0; +FUN_0223D638 = 0x0223D638; +FUN_0223D648 = 0x0223D648; +FUN_0223DFB4 = 0x0223DFB4; +FUN_0223E060 = 0x0223E060; +FUN_0223E118 = 0x0223E118; +FUN_0223E154 = 0x0223E154; +FUN_0223E1A4 = 0x0223E1A4; +FUN_0223E1E0 = 0x0223E1E0; +FUN_0223E2AC = 0x0223E2AC; +FUN_0223E4A8 = 0x0223E4A8; +FUN_0223E4D4 = 0x0223E4D4; +FUN_0223E554 = 0x0223E554; +FUN_0223E6B8 = 0x0223E6B8; +FUN_0223E734 = 0x0223E734; +FUN_0223E7FC = 0x0223E7FC; +FUN_0223EB8C = 0x0223EB8C; +FUN_0223EF7C = 0x0223EF7C; +FUN_0223F4D8 = 0x0223F4D8; +FUN_0223F4F4 = 0x0223F4F4; +FUN_0223F8D8 = 0x0223F8D8; +FUN_0223FCE8 = 0x0223FCE8; +FUN_02240790 = 0x02240790; +FUN_022407CC = 0x022407CC; +FUN_022407DC = 0x022407DC; +FUN_022407F8 = 0x022407F8; +FUN_02240834 = 0x02240834; +FUN_02240844 = 0x02240844; +FUN_0224089C = 0x0224089C; +FUN_022408FC = 0x022408FC; +FUN_022411F4 = 0x022411F4; +FUN_02241230 = 0x02241230; +FUN_02241914 = 0x02241914; +FUN_02242A38 = 0x02242A38; +FUN_02242BE0 = 0x02242BE0; +FUN_0224312C = 0x0224312C; +FUN_022432E4 = 0x022432E4; +FUN_0224339C = 0x0224339C; +FUN_022433A8 = 0x022433A8; +FUN_022433B0 = 0x022433B0; +FUN_022433B8 = 0x022433B8; +FUN_022433F8 = 0x022433F8; +FUN_02243408 = 0x02243408; +FUN_02243428 = 0x02243428; +FUN_02243448 = 0x02243448; +FUN_0224345C = 0x0224345C; +FUN_022434AC = 0x022434AC; +FUN_022434BC = 0x022434BC; +FUN_022434D0 = 0x022434D0; +FUN_02243694 = 0x02243694; +FUN_022436C8 = 0x022436C8; +FUN_022436E8 = 0x022436E8; +FUN_02243780 = 0x02243780; +FUN_02243838 = 0x02243838; +FUN_022438DC = 0x022438DC; +FUN_022438E0 = 0x022438E0; +FUN_022438FC = 0x022438FC; +FUN_02243920 = 0x02243920; +FUN_022439F8 = 0x022439F8; +FUN_02243AD8 = 0x02243AD8; +FUN_02243BA8 = 0x02243BA8; +FUN_02243C5C = 0x02243C5C; +FUN_02243D3C = 0x02243D3C; +FUN_02243DA0 = 0x02243DA0; +FUN_02243DB8 = 0x02243DB8; +FUN_02243DC0 = 0x02243DC0; +FUN_02243DC4 = 0x02243DC4; +FUN_02243DD8 = 0x02243DD8; +FUN_02243DE0 = 0x02243DE0; +FUN_02243E34 = 0x02243E34; +FUN_02243E74 = 0x02243E74; +FUN_02243F18 = 0x02243F18; +FUN_02243F50 = 0x02243F50; +FUN_02243F9C = 0x02243F9C; +FUN_02244210 = 0x02244210; +FUN_02244558 = 0x02244558; +FUN_02244660 = 0x02244660; +FUN_022446BC = 0x022446BC; +FUN_022446E0 = 0x022446E0; +FUN_022446FC = 0x022446FC; +FUN_02244758 = 0x02244758; +FUN_02244770 = 0x02244770; +FUN_02244824 = 0x02244824; +FUN_0224484C = 0x0224484C; +FUN_02244D1C = 0x02244D1C; +FUN_02244D20 = 0x02244D20; +FUN_02244D3C = 0x02244D3C; +FUN_02244D40 = 0x02244D40; +FUN_02244D58 = 0x02244D58; +FUN_02244D98 = 0x02244D98; +FUN_02244DA0 = 0x02244DA0; +FUN_02244DB0 = 0x02244DB0; +FUN_02244DBC = 0x02244DBC; +FUN_02244DC4 = 0x02244DC4; +FUN_02244EF8 = 0x02244EF8; +FUN_02244F18 = 0x02244F18; +FUN_02244F24 = 0x02244F24; +FUN_02244F2C = 0x02244F2C; +FUN_02245088 = 0x02245088; +FUN_02245114 = 0x02245114; +FUN_02245190 = 0x02245190; +FUN_02245198 = 0x02245198; +FUN_022451F0 = 0x022451F0; +FUN_0224525C = 0x0224525C; +FUN_022452A4 = 0x022452A4; +FUN_02245324 = 0x02245324; +FUN_02245340 = 0x02245340; +FUN_02245358 = 0x02245358; +FUN_0224566C = 0x0224566C; +FUN_022456E8 = 0x022456E8; +FUN_02245844 = 0x02245844; +FUN_02245910 = 0x02245910; +FUN_02245F1C = 0x02245F1C; +FUN_02245F4C = 0x02245F4C; +FUN_02245FA0 = 0x02245FA0; +FUN_022461A4 = 0x022461A4; +FUN_022461B8 = 0x022461B8; +FUN_0224666C = 0x0224666C; +FUN_022466A0 = 0x022466A0; +FUN_022466AC = 0x022466AC; +FUN_02246F1C = 0x02246F1C; +FUN_02247294 = 0x02247294; +FUN_022472AC = 0x022472AC; +FUN_02247544 = 0x02247544; +FUN_02247614 = 0x02247614; +FUN_02247728 = 0x02247728; +FUN_02247808 = 0x02247808; +FUN_02247970 = 0x02247970; +FUN_02247A34 = 0x02247A34; +FUN_022483BC = 0x022483BC; +FUN_022483E0 = 0x022483E0; +FUN_022483EC = 0x022483EC; +FUN_02248724 = 0x02248724; +FUN_0224884C = 0x0224884C; +FUN_022488CC = 0x022488CC; +FUN_022488EC = 0x022488EC; +FUN_022488F4 = 0x022488F4; +FUN_022488FC = 0x022488FC; +FUN_0224891C = 0x0224891C; +FUN_02248B54 = 0x02248B54; +FUN_02248B58 = 0x02248B58; +FUN_02248B5C = 0x02248B5C; +FUN_02248B60 = 0x02248B60; +FUN_02248B6C = 0x02248B6C; +FUN_02248CC0 = 0x02248CC0; +FUN_02248CD0 = 0x02248CD0; +FUN_02248DF8 = 0x02248DF8; +FUN_02248F70 = 0x02248F70; +FUN_02248FE0 = 0x02248FE0; +FUN_02249038 = 0x02249038; +FUN_022490A0 = 0x022490A0; +FUN_022491FC = 0x022491FC; +FUN_022494C8 = 0x022494C8; +FUN_02249508 = 0x02249508; +FUN_02249668 = 0x02249668; +FUN_022497E8 = 0x022497E8; +FUN_02249E6C = 0x02249E6C; +FUN_02249E78 = 0x02249E78; +FUN_02249E84 = 0x02249E84; +FUN_02249E90 = 0x02249E90; +FUN_0224A310 = 0x0224A310; +FUN_0224A528 = 0x0224A528; +FUN_0224A7C8 = 0x0224A7C8; +FUN_0224ABAC = 0x0224ABAC; +FUN_0224B124 = 0x0224B124; +FUN_0224B2C4 = 0x0224B2C4; +FUN_0224B568 = 0x0224B568; +FUN_0224B818 = 0x0224B818; +FUN_0224B86C = 0x0224B86C; +FUN_0224B9E0 = 0x0224B9E0; +FUN_0224BBEC = 0x0224BBEC; +FUN_0224BD90 = 0x0224BD90; +FUN_0224C038 = 0x0224C038; +FUN_0224C27C = 0x0224C27C; +FUN_0224C520 = 0x0224C520; +FUN_0224C678 = 0x0224C678; +FUN_0224C6E8 = 0x0224C6E8; +FUN_0224C6F4 = 0x0224C6F4; +FUN_0224C700 = 0x0224C700; +FUN_0224C8C8 = 0x0224C8C8; +FUN_0224CA2C = 0x0224CA2C; +FUN_0224CA54 = 0x0224CA54; +FUN_0224CA58 = 0x0224CA58; +FUN_0224CA88 = 0x0224CA88; +FUN_0224CA94 = 0x0224CA94; +FUN_0224CAA0 = 0x0224CAA0; +FUN_0224CAB4 = 0x0224CAB4; +FUN_0224CB30 = 0x0224CB30; +FUN_0224CBB0 = 0x0224CBB0; +FUN_0224CC24 = 0x0224CC24; +FUN_0224CECC = 0x0224CECC; +FUN_0224D14C = 0x0224D14C; +FUN_0224D2E0 = 0x0224D2E0; +FUN_0224D3E8 = 0x0224D3E8; +FUN_0224D70C = 0x0224D70C; +FUN_0224D76C = 0x0224D76C; +FUN_0224D79C = 0x0224D79C; +FUN_0224DCB8 = 0x0224DCB8; +FUN_0224DD94 = 0x0224DD94; +FUN_0224DDB8 = 0x0224DDB8; +FUN_0224E554 = 0x0224E554; +FUN_0224E764 = 0x0224E764; +FUN_0224E7C4 = 0x0224E7C4; +FUN_0224F12C = 0x0224F12C; +FUN_02252534 = 0x02252534; +FUN_02252538 = 0x02252538; +FUN_022567E0 = 0x022567E0; + +// ??? +SDK_MAIN_ARENA_LO = 0x0225FFA0; + +// EWRAM +SDK_SECTION_ARENA_EX_START = 0x023E0000; + +// DTCM +gUnk027FFC20 = 0x027FFC20; diff --git a/pokediamond.lcf b/pokediamond.lcf index da357c97a..452afd175 100644 --- a/pokediamond.lcf +++ b/pokediamond.lcf @@ -1,12 +1,7 @@ /* TEST */ MEMORY { header (RWX) : ORIGIN=0, LENGTH=0 - arm9.text (RWX) : ORIGIN=0x02000000, LENGTH=0 - arm9.data (RWX) : ORIGIN=0x020EC710, LENGTH=0 - arm9.itcm (RWX) : ORIGIN=0x01FF8000, LENGTH=0x8000 - arm9.dtcm (RWX) : ORIGIN=0x027E0000, LENGTH=0x2000 - arm9.autoload (RWX) : ORIGIN=0x02107700, LENGTH=0 - arm9overlay (RWX) : ORIGIN=0, LENGTH=0 + arm9 (RWX) : ORIGIN=0x02000000, LENGTH=0 arm7 (RWX) : ORIGIN=0x2380000, LENGTH=0 filenametable (RWX) : ORIGIN=0, LENGTH=0 fileallocationtable (RWX) : ORIGIN=0, LENGTH=0 @@ -377,72 +372,10 @@ SECTIONS { } > header .arm9 : AT (0x4000) { - secure.o (.text) - crt0.o (.text) - main.o (.text) - FUN_02000DF4.o (.text) - unk_02000E0C.o (.text) - string_util.o (.text) - unk_020023C0.o (.text) - filesystem.o (.text) - unk_02006864.o (.text) - script.o (.text) - unk_02038C78.o (.text) - scrcmd.o (.text) - unk_02046030.o (.text) - unk_0208AC14.o (.text) - unk_020AF030.o (.text) - /* SDK */ - GX_arm9.o (.text) - OS_arm9.o (.text) - MI_arm9.o (.text) - SND_arm9.o (.text) - PXI_arm9.o (.text) - FS_arm9.o (.text) - DGT_arm9.o (.text) - CP_arm9.o (.text) - SPI_arm9.o (.text) - PM_arm9.o (.text) - RTC_arm9.o (.text) - CARD_arm9.o (.text) - WM_arm9.o (.text) - CTRDG_arm9.o (.text) - MATH_arm9.o (.text) - STD_arm9.o (.text) - } > arm9.text - - .arm9.data : AT (0xF0710) { - rom2.o (.data) - string_util.o (.data) - rom2_2.o (.data) - } > arm9.data - - SDK_AUTOLOAD_START = .; - SDK_STATIC_BSS_START = .; - SDK_STATIC_BSS_END = . + 0xd0540; - - .arm9.itcm : AT (0x10AFA0) - { - arm9_itcm.o (.itcm) - . = 0x01FF8720; - SDK_SECTION_ARENA_ITCM_START = .; - } > arm9.itcm - - .arm9.dtcm : AT (0x10B6A0) { - SDK_AUTOLOAD_DTCM_START = .; - OS_arm9.o (.dtcm) - . = 0x027E0080; - SDK_SECTION_ARENA_DTCM_START = .; - } > arm9.dtcm - - .arm9.autoload : AT (0x10B700) { - SDK_AUTOLOAD_LIST.o (.data) - unk_10b724.o (.text) - } > arm9.autoload - - .arm9overlay : AT (0x10B800) { - arm9overlay.o (.text) - } > arm9overlay + _start = .; + _start_AutoloadDoneCallback = . + 0xA74; + INCLUDE arm9.bin + } > arm9 .FILE_10C400 : AT (0x10C400) { FILE_10C400.o (.text) /* 0x10C400 */ From 409de04065549094cec4905209aaf90dd7e3060c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 25 Apr 2020 21:07:47 -0400 Subject: [PATCH 21/23] Move arm7 build files to subdirectory --- Makefile | 10 +- arm7/Makefile | 24 +- arm7/arm7.lcf | 10 + {asm => arm7/asm}/arm7_rom.s | 6 +- arm7/asm/macros.inc | 1 + arm7/asm/macros/function.inc | 24 + arm7/global.inc | 3517 ++++++++++++++++++++++++++++++++++ arm7/undefined_syms.txt | 506 +++++ pokediamond.lcf | 5 +- 9 files changed, 4083 insertions(+), 20 deletions(-) create mode 100644 arm7/arm7.lcf rename {asm => arm7/asm}/arm7_rom.s (98%) create mode 100644 arm7/asm/macros.inc create mode 100644 arm7/asm/macros/function.inc create mode 100644 arm7/global.inc create mode 100644 arm7/undefined_syms.txt diff --git a/Makefile b/Makefile index d5a3c4107..f67c43486 100644 --- a/Makefile +++ b/Makefile @@ -55,6 +55,7 @@ O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \ $(foreach file,$(S_FILES),$(BUILD_DIR)/$(file:.s=.o)) \ ARM9BIN := arm9/build/arm9.bin +ARM7BIN := arm7/build/arm7.bin ##################### Compiler Options ####################### @@ -109,7 +110,7 @@ else NODEP := 1 endif -.PHONY: all clean mostlyclean tidy tools $(TOOLDIRS) patch_mwasmarm $(ARM9BIN) +.PHONY: all clean mostlyclean tidy tools $(TOOLDIRS) patch_mwasmarm $(ARM9BIN) $(ARM7BIN) MAKEFLAGS += --no-print-directory @@ -138,6 +139,9 @@ patch_mwasmarm: $(ARM9BIN): @$(MAKE) -C arm9 +$(ARM7BIN): + @$(MAKE) -C arm7 + ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(ASM_DIRS)) $(BUILD_DIR)/%.o: %.c @@ -149,8 +153,8 @@ $(BUILD_DIR)/%.o: %.s $(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) undefined_syms.txt $(CPP) $(VERSION_CFLAGS) -MMD -MP -MT $@ -MF $@.d -I include/ -I . -DBUILD_DIR=$(BUILD_DIR) -o $@ $< -$(ELF): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT) $(ARM9BIN) - $(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES) $(ARM9BIN) +$(ELF): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT) $(ARM9BIN) $(ARM7BIN) + $(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES) $(ARM9BIN) $(ARM7BIN) $(ROM): $(ELF) $(OBJCOPY) -O binary --gap-fill=0xFF --pad-to=0x04000000 $< $@ diff --git a/arm7/Makefile b/arm7/Makefile index 763dd7149..88e81d5d3 100644 --- a/arm7/Makefile +++ b/arm7/Makefile @@ -37,11 +37,11 @@ endif BUILD_DIR := build -TARGET := pokediamond.us +TARGET := arm7 -ROM := $(BUILD_DIR)/$(TARGET).nds +ROM := $(BUILD_DIR)/$(TARGET).bin ELF := $(BUILD_DIR)/$(TARGET).elf -LD_SCRIPT := pokediamond.lcf +LD_SCRIPT := arm7.lcf # Directories containing source files SRC_DIRS := src @@ -57,17 +57,18 @@ O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \ ##################### Compiler Options ####################### MWCCVERSION := 2.0/base +TOOLS_DIR = ../tools CROSS := arm-none-eabi- -MWCCARM := tools/mwccarm/$(MWCCVERSION)/mwccarm.exe +MWCCARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwccarm.exe # Argh... due to EABI version shenanigans, we can't use GNU LD to link together # MWCC built objects and GNU built ones. mwldarm, however, doesn't care, so we # have to use mwldarm for now. # TODO: Is there a hack workaround to let us go back to GNU LD? Ideally, the # only dependency should be MWCCARM. -MWLDARM := tools/mwccarm/$(MWCCVERSION)/mwldarm.exe -MWASMARM := tools/mwccarm/$(MWCCVERSION)/mwasmarm.exe +MWLDARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwldarm.exe +MWASMARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwasmarm.exe AS := $(WINE) $(MWASMARM) CC := $(WINE) $(MWCCARM) @@ -77,15 +78,14 @@ AR := $(CROSS)ar OBJDUMP := $(CROSS)objdump OBJCOPY := $(CROSS)objcopy -# ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o +# ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm7_thumb.s -o arm7.o ASFLAGS = -proc arm5te -CFLAGS = -O4,p -proc v5te -thumb -fp soft -lang c99 -Cpp_exceptions off -ir include +CFLAGS = -O4,p -proc v5te -thumb -fp soft -lang c99 -Cpp_exceptions off -ir ../include LDFLAGS = -map -nodead -w off -proc v5te -interworking -map -symtab -m _start ####################### Other Tools ######################### # DS TOOLS -TOOLS_DIR = tools SHA1SUM = sha1sum JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx @@ -112,10 +112,10 @@ endif MAKEFLAGS += --no-print-directory all: $(ROM) - @$(SHA1SUM) -c $(TARGET).sha1 + # @$(SHA1SUM) -c $(TARGET).sha1 clean: mostlyclean - make -C tools/mwasmarm_patcher clean + make -C $(TOOLS_DIR)/mwasmarm_patcher clean mostlyclean: tidy find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' \) -exec $(RM) {} + @@ -148,7 +148,7 @@ $(ELF): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT) $(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES) $(ROM): $(ELF) - $(OBJCOPY) -O binary --gap-fill=0xFF --pad-to=0x04000000 $< $@ + $(OBJCOPY) -O binary --gap-fill=0xFF $< $@ # Make sure build directory exists before compiling anything DUMMY != mkdir -p $(ALL_DIRS) diff --git a/arm7/arm7.lcf b/arm7/arm7.lcf new file mode 100644 index 000000000..784c4cbb3 --- /dev/null +++ b/arm7/arm7.lcf @@ -0,0 +1,10 @@ +MEMORY { + .text (RX) : ORIGIN=0x02380000, LENGTH=0 +} + +SECTIONS { +#include "undefined_syms.txt" + .text : AT (0x0) { + arm7_rom.o (.text) + } > .text +} diff --git a/asm/arm7_rom.s b/arm7/asm/arm7_rom.s similarity index 98% rename from asm/arm7_rom.s rename to arm7/asm/arm7_rom.s index fa248afc8..3366eba47 100644 --- a/asm/arm7_rom.s +++ b/arm7/asm/arm7_rom.s @@ -3,9 +3,9 @@ .global ARM7AutoLoad .section .text - arm_func_start Entry_ARM7 + arm_func_start _start -Entry_ARM7: +_start: mov ip, #67108864 ; 0x4000000 str ip, [ip, #520] ; 0x208 ldr r1, _23800cc @@ -74,7 +74,7 @@ _23800f0: .word 0x0380fffc _23800f4: .word 0x037f853c _23800f8: .word 0x037f8468 _23800fc: .word 0xffff0000 - arm_func_end Entry_ARM7 + arm_func_end _start arm_func_start FUN_2380100 FUN_2380100: diff --git a/arm7/asm/macros.inc b/arm7/asm/macros.inc new file mode 100644 index 000000000..156b2b09e --- /dev/null +++ b/arm7/asm/macros.inc @@ -0,0 +1 @@ + .include "asm/macros/function.inc" diff --git a/arm7/asm/macros/function.inc b/arm7/asm/macros/function.inc new file mode 100644 index 000000000..6b9e5f40e --- /dev/null +++ b/arm7/asm/macros/function.inc @@ -0,0 +1,24 @@ + .macro arm_func_start name + .balign 4, 0 + .global \name + .arm + .endm + + .macro arm_func_end name + .size \name, .-\name + .endm + + .macro thumb_func_start name + .balign 4, 0 + .global \name + .thumb + .endm + + .macro non_word_aligned_thumb_func_start name + .global \name + .thumb + .endm + + .macro thumb_func_end name + .size \name, .-\name + .endm diff --git a/arm7/global.inc b/arm7/global.inc new file mode 100644 index 000000000..478abdaa6 --- /dev/null +++ b/arm7/global.inc @@ -0,0 +1,3517 @@ +.extern CARD_CancelBackupAsync +.extern CARD_GetResultCode +.extern CARD_IdentifyBackup +.extern CARD_Init +.extern CARD_IsPulledOut +.extern CARD_LockBackup +.extern CARD_LockRom +.extern CARD_TryWaitBackupAsync +.extern CARD_UnlockBackup +.extern CARD_UnlockRom +.extern CARD_WaitBackupAsync +.extern CARDi_ReadRom +.extern CARDi_RequestStreamCommand +.extern CP_RestoreContext +.extern CP_SaveContext +.extern CTRDG_Init +.extern CTRDG_IsExisting +.extern CTRDG_IsPulledOut +.extern Call_FillMemWithValue +.extern ConvertUIntToDecimalString +.extern DC_FlushAll +.extern DC_FlushRange +.extern DC_InvalidateAll +.extern DC_InvalidateRange +.extern DC_StoreAll +.extern DC_StoreRange +.extern DC_WaitWriteBufferEmpty +.extern DGT_Hash1GetDigest_R +.extern DGT_Hash1Reset +.extern DGT_Hash1SetSource +.extern DGTi_hash2_arm4_small +.extern ErrorHandling +.extern FS_CloseFile +.extern FS_ConvertPathToFileID +.extern FS_FindArchive +.extern FS_Init +.extern FS_InitFile +.extern FS_IsAvailable +.extern FS_LoadOverlay +.extern FS_LoadOverlayImage +.extern FS_LoadOverlayImageAsync +.extern FS_LoadOverlayInfo +.extern FS_OpenFile +.extern FS_OpenFileFast +.extern FS_ReadFile +.extern FS_SeekFile +.extern FS_SetDefaultDMA +.extern FS_StartOverlay +.extern FS_TryLoadTable +.extern FS_UnloadOverlay +.extern FS_WaitAsync +.extern FUNRTC_Init +.extern FUN_0200019E +.extern FUN_020002FE +.extern SVC_WaitByLoop +.extern OSi_ReferSymbol +.extern FUN_02000DF4 +.extern FUN_02000E7C +.extern FUN_02000EE8 +.extern FUN_02000F18 +.extern FUN_02000FA4 +.extern FUN_02000FE8 +.extern FUN_020010A8 +.extern FUN_02001204 +.extern FUN_02001300 +.extern FUN_020013E8 +.extern FUN_02001448 +.extern FUN_02001470 +.extern FUN_02001B8C +.extern FUN_02001C14 +.extern FUN_02001C5C +.extern FUN_02001C78 +.extern FUN_02001D2C +.extern FUN_02001E5C +.extern FUN_020020EC +.extern FUN_02002198 +.extern FUN_020021AC +.extern FUN_02002840 +.extern FUN_02002B60 +.extern FUN_02002B7C +.extern FUN_02002BB8 +.extern FUN_02002C14 +.extern FUN_02002C50 +.extern FUN_02002C84 +.extern FUN_02002CC0 +.extern FUN_02002CF8 +.extern FUN_02002DB0 +.extern FUN_02002DE0 +.extern FUN_02002E14 +.extern FUN_02002E4C +.extern FUN_02002ED0 +.extern FUN_02002EEC +.extern FUN_02002F08 +.extern FUN_02002FD0 +.extern FUN_02002FEC +.extern FUN_02003008 +.extern FUN_02003038 +.extern FUN_02003054 +.extern FUN_020030E8 +.extern FUN_02003108 +.extern FUN_020031FC +.extern FUN_02003210 +.extern FUN_0200372C +.extern FUN_020038E4 +.extern FUN_020038F0 +.extern FUN_02003974 +.extern FUN_02003B98 +.extern FUN_02003C10 +.extern FUN_020040F4 +.extern FUN_02004104 +.extern FUN_02004124 +.extern FUN_0200414C +.extern FUN_0200415C +.extern FUN_0200433C +.extern FUN_02004724 +.extern FUN_020047C8 +.extern FUN_02004810 +.extern FUN_0200488C +.extern FUN_02004DCC +.extern FUN_02004E08 +.extern FUN_0200516C +.extern FUN_020051F4 +.extern FUN_0200521C +.extern FUN_02005308 +.extern FUN_02005350 +.extern FUN_0200538C +.extern FUN_020053CC +.extern FUN_02005404 +.extern FUN_02005410 +.extern FUN_0200541C +.extern FUN_020054C8 +.extern FUN_020054F0 +.extern FUN_02005508 +.extern FUN_02005514 +.extern FUN_02005578 +.extern FUN_02005670 +.extern FUN_020056AC +.extern FUN_02005C28 +.extern FUN_02005CBC +.extern FUN_02005D20 +.extern FUN_02005E28 +.extern FUN_02005E64 +.extern FUN_02005E6C +.extern FUN_02005E80 +.extern FUN_02005E90 +.extern FUN_02005F14 +.extern FUN_02005F60 +.extern FUN_02005FDC +.extern FUN_020061E8 +.extern FUN_0200621C +.extern FUN_02006234 +.extern FUN_02006260 +.extern FUN_02006268 +.extern FUN_02006278 +.extern FUN_0200627C +.extern FUN_0200628C +.extern FUN_02006290 +.extern FUN_02006528 +.extern FUN_02006548 +.extern FUN_02006564 +.extern FUN_02006670 +.extern FUN_020066F4 +.extern FUN_02006704 +.extern FUN_02006774 +.extern FUN_02006814 +.extern FUN_0200687C +.extern FUN_020068C8 +.extern FUN_02006930 +.extern FUN_02006BB0 +.extern FUN_02006C08 +.extern FUN_02006C98 +.extern FUN_02006D98 +.extern FUN_02006ED4 +.extern FUN_020072E8 +.extern FUN_02007314 +.extern FUN_0200737C +.extern FUN_02007390 +.extern FUN_020073A0 +.extern FUN_02007534 +.extern FUN_02007558 +.extern FUN_0200782C +.extern FUN_020079E0 +.extern FUN_02007E68 +.extern FUN_02007E98 +.extern FUN_02007F20 +.extern FUN_020080D0 +.extern FUN_020081C4 +.extern FUN_02008AA4 +.extern FUN_02008BE0 +.extern FUN_02008C80 +.extern FUN_02008C9C +.extern FUN_02008D24 +.extern FUN_02008DEC +.extern FUN_02008E2C +.extern FUN_02008F34 +.extern FUN_02008FEC +.extern FUN_020090AC +.extern FUN_02009168 +.extern FUN_020093A8 +.extern FUN_02009424 +.extern FUN_02009448 +.extern FUN_02009630 +.extern FUN_0200965C +.extern FUN_02009668 +.extern FUN_020096B4 +.extern FUN_020096CC +.extern FUN_02009A50 +.extern FUN_02009B04 +.extern FUN_02009B44 +.extern FUN_02009B78 +.extern FUN_02009C0C +.extern FUN_02009C30 +.extern FUN_02009CF0 +.extern FUN_02009DAC +.extern FUN_02009DE0 +.extern FUN_02009E04 +.extern FUN_02009E28 +.extern FUN_02009E88 +.extern FUN_02009EAC +.extern FUN_02009F80 +.extern FUN_02009FA0 +.extern FUN_0200A208 +.extern FUN_0200A274 +.extern FUN_0200A2AC +.extern FUN_0200A318 +.extern FUN_0200A344 +.extern FUN_0200A648 +.extern FUN_0200A738 +.extern FUN_0200A86C +.extern FUN_0200A8B8 +.extern FUN_0200A8E0 +.extern FUN_0200A914 +.extern FUN_0200A968 +.extern FUN_0200A99C +.extern FUN_0200A9C4 +.extern FUN_0200AA50 +.extern FUN_0200AA80 +.extern FUN_0200AA90 +.extern FUN_0200AB18 +.extern FUN_0200ABB4 +.extern FUN_0200ABC0 +.extern FUN_0200ABE4 +.extern FUN_0200AC0C +.extern FUN_0200AC60 +.extern FUN_0200ACA4 +.extern FUN_0200ACC0 +.extern FUN_0200ACF8 +.extern FUN_0200AD18 +.extern FUN_0200AD38 +.extern FUN_0200AD5C +.extern FUN_0200AD94 +.extern FUN_0200ADCC +.extern FUN_0200AE04 +.extern FUN_0200AE38 +.extern FUN_0200AE70 +.extern FUN_0200AEA8 +.extern FUN_0200AEE0 +.extern FUN_0200AF18 +.extern FUN_0200AF50 +.extern FUN_0200AFF4 +.extern FUN_0200B02C +.extern FUN_0200B064 +.extern FUN_0200B09C +.extern FUN_0200B164 +.extern FUN_0200B19C +.extern FUN_0200B1D4 +.extern FUN_0200B20C +.extern FUN_0200B244 +.extern FUN_0200B278 +.extern FUN_0200B2AC +.extern FUN_0200B350 +.extern FUN_0200B388 +.extern FUN_0200B410 +.extern FUN_0200B4A0 +.extern FUN_0200B4D8 +.extern FUN_0200B518 +.extern FUN_0200B534 +.extern FUN_0200B568 +.extern FUN_0200B59C +.extern FUN_0200B628 +.extern FUN_0200B660 +.extern FUN_0200B698 +.extern FUN_0200B6D0 +.extern FUN_0200B708 +.extern FUN_0200B764 +.extern FUN_0200B7A8 +.extern FUN_0200B7B8 +.extern FUN_0200B870 +.extern FUN_0200B990 +.extern FUN_0200B9A8 +.extern FUN_0200B9EC +.extern FUN_0200BA78 +.extern FUN_0200BB14 +.extern FUN_0200BB34 +.extern FUN_0200BB68 +.extern FUN_0200BB6C +.extern FUN_0200BBF0 +.extern FUN_0200BC1C +.extern FUN_0200BC30 +.extern FUN_0200BCE0 +.extern FUN_0200BD04 +.extern FUN_0200BD20 +.extern FUN_0200BE38 +.extern FUN_0200BF60 +.extern FUN_0200C00C +.extern FUN_0200C06C +.extern FUN_0200C0DC +.extern FUN_0200C124 +.extern FUN_0200C13C +.extern FUN_0200C154 +.extern FUN_0200C358 +.extern FUN_0200C368 +.extern FUN_0200C378 +.extern FUN_0200C388 +.extern FUN_0200C398 +.extern FUN_0200C3DC +.extern FUN_0200C5A8 +.extern FUN_0200C61C +.extern FUN_0200C63C +.extern FUN_0200C644 +.extern FUN_0200C664 +.extern FUN_0200C66C +.extern FUN_0200C6E4 +.extern FUN_0200C714 +.extern FUN_0200C75C +.extern FUN_0200C7A0 +.extern FUN_0200C82C +.extern FUN_0200C840 +.extern FUN_0200C884 +.extern FUN_0200C9D8 +.extern FUN_0200CA0C +.extern FUN_0200CA44 +.extern FUN_0200CAB4 +.extern FUN_0200CABC +.extern FUN_0200CAFC +.extern FUN_0200CB00 +.extern FUN_0200CCA4 +.extern FUN_0200CCF8 +.extern FUN_0200CD64 +.extern FUN_0200CD68 +.extern FUN_0200D0BC +.extern FUN_0200D0E0 +.extern FUN_0200D274 +.extern FUN_0200D300 +.extern FUN_0200D6F8 +.extern FUN_0200D858 +.extern FUN_0200DBFC +.extern FUN_0200DC4C +.extern FUN_0200DCA4 +.extern FUN_0200E1D0 +.extern FUN_0200E2D8 +.extern FUN_0200E308 +.extern FUN_0200E388 +.extern FUN_0200E394 +.extern FUN_0200E3A0 +.extern FUN_0200E3BC +.extern FUN_02011B20 +.extern FUN_02012420 +.extern FUN_0201259C +.extern FUN_020125D4 +.extern FUN_0201265C +.extern FUN_020126B4 +.extern FUN_020126D8 +.extern FUN_020126FC +.extern FUN_0201277C +.extern FUN_020127A8 +.extern FUN_020127C0 +.extern FUN_02012838 +.extern FUN_02012870 +.extern FUN_02012880 +.extern FUN_020128A0 +.extern FUN_02012CC8 +.extern FUN_02012CDC +.extern FUN_02012DE4 +.extern FUN_0201318C +.extern FUN_02013194 +.extern FUN_0201327C +.extern FUN_020132BC +.extern FUN_02013364 +.extern FUN_02013388 +.extern FUN_020133AC +.extern FUN_020133C8 +.extern FUN_020133E8 +.extern FUN_0201343C +.extern FUN_02013440 +.extern FUN_02013690 +.extern FUN_020136C0 +.extern FUN_020136E0 +.extern FUN_020136F8 +.extern FUN_0201373C +.extern FUN_02013754 +.extern FUN_0201385C +.extern FUN_02013918 +.extern FUN_02013920 +.extern FUN_02013924 +.extern FUN_02013928 +.extern FUN_02013960 +.extern FUN_020139D8 +.extern FUN_02013A10 +.extern FUN_02013A30 +.extern FUN_02013A9C +.extern FUN_02013B5C +.extern FUN_02013B68 +.extern FUN_02013B74 +.extern FUN_02013BC8 +.extern FUN_02013BE4 +.extern FUN_02013C0C +.extern FUN_02013C18 +.extern FUN_020142EC +.extern FUN_020143A8 +.extern FUN_020143D0 +.extern FUN_02014BF4 +.extern FUN_02014C28 +.extern FUN_02014C3C +.extern FUN_02014C54 +.extern FUN_02014D7C +.extern FUN_02014D9C +.extern FUN_02015CF8 +.extern FUN_02015E30 +.extern FUN_02015E60 +.extern FUN_02015EF4 +.extern FUN_02015F10 +.extern FUN_02015F1C +.extern FUN_02015F34 +.extern FUN_020161A4 +.extern FUN_020163BC +.extern FUN_02016438 +.extern FUN_02016464 +.extern FUN_0201669C +.extern FUN_020166C8 +.extern FUN_0201681C +.extern FUN_02016828 +.extern FUN_020168D0 +.extern FUN_02016998 +.extern FUN_020169D8 +.extern FUN_02016A18 +.extern FUN_02016A8C +.extern FUN_02016AF8 +.extern FUN_02016B94 +.extern FUN_02016BBC +.extern FUN_02016C18 +.extern FUN_020178A0 +.extern FUN_020178BC +.extern FUN_0201797C +.extern FUN_020179E0 +.extern FUN_02017B48 +.extern FUN_02017B54 +.extern FUN_02017CD0 +.extern FUN_02017CE8 +.extern FUN_02017DFC +.extern FUN_02017E14 +.extern FUN_02017F18 +.extern FUN_02017FB4 +.extern FUN_02017FE4 +.extern FUN_02018148 +.extern FUN_02018170 +.extern FUN_02018540 +.extern FUN_020186B4 +.extern FUN_02018744 +.extern FUN_0201886C +.extern FUN_02018884 +.extern FUN_02018FF4 +.extern FUN_0201901C +.extern FUN_02019048 +.extern FUN_02019064 +.extern FUN_02019150 +.extern FUN_02019178 +.extern FUN_020191A4 +.extern FUN_020191D0 +.extern FUN_02019220 +.extern FUN_02019548 +.extern FUN_02019570 +.extern FUN_0201958C +.extern FUN_02019620 +.extern FUN_02019658 +.extern FUN_020196F4 +.extern FUN_0201974C +.extern FUN_0201A8C8 +.extern FUN_0201AB08 +.extern FUN_0201AB0C +.extern FUN_0201AB10 +.extern FUN_0201AB14 +.extern FUN_0201AB18 +.extern FUN_0201AB60 +.extern FUN_0201AC68 +.extern FUN_0201AEE4 +.extern FUN_0201AFBC +.extern FUN_0201B234 +.extern FUN_0201B5CC +.extern FUN_0201B6C4 +.extern FUN_0201B6C8 +.extern FUN_0201B6D0 +.extern FUN_0201B76C +.extern FUN_0201B7DC +.extern FUN_0201B8B8 +.extern FUN_0201B8E0 +.extern FUN_0201B914 +.extern FUN_0201B93C +.extern FUN_0201B970 +.extern FUN_0201B9D4 +.extern FUN_0201B9E0 +.extern FUN_0201B9EC +.extern FUN_0201BA10 +.extern FUN_0201BA1C +.extern FUN_0201BA60 +.extern FUN_0201BCBC +.extern FUN_0201BD5C +.extern FUN_0201BD70 +.extern FUN_0201BD7C +.extern FUN_0201BD84 +.extern FUN_0201BDE0 +.extern FUN_0201BE3C +.extern FUN_0201C05C +.extern FUN_0201C1EC +.extern FUN_0201C24C +.extern FUN_0201C29C +.extern FUN_0201C30C +.extern FUN_0201C620 +.extern FUN_0201C638 +.extern FUN_0201CC08 +.extern FUN_0201CC24 +.extern FUN_0201CD04 +.extern FUN_0201CDD0 +.extern FUN_0201CE04 +.extern FUN_0201D040 +.extern FUN_0201D12C +.extern FUN_0201D168 +.extern FUN_0201E00C +.extern FUN_0201E08C +.extern FUN_0201E0BC +.extern FUN_0201E28C +.extern FUN_0201E66C +.extern FUN_0201E6D8 +.extern FUN_0201E6E4 +.extern FUN_0201E740 +.extern FUN_0201E74C +.extern FUN_0201E788 +.extern FUN_0201E7A0 +.extern FUN_0201EB64 +.extern FUN_0201EB70 +.extern FUN_0201EB8C +.extern FUN_0201EBA4 +.extern FUN_0201EC68 +.extern FUN_0201EC88 +.extern FUN_0201EC94 +.extern FUN_0201ED10 +.extern FUN_0201EEF0 +.extern FUN_0201EF70 +.extern FUN_0201EF90 +.extern FUN_0201EFE0 +.extern FUN_0201EFEC +.extern FUN_0201F04C +.extern FUN_0201F854 +.extern FUN_0201FD58 +.extern FUN_0201FDEC +.extern FUN_0201FE94 +.extern FUN_0201FFC8 +.extern FUN_02020044 +.extern FUN_020200A0 +.extern FUN_020200BC +.extern FUN_02020100 +.extern FUN_0202011C +.extern FUN_02020128 +.extern FUN_02020130 +.extern FUN_020201DC +.extern FUN_020201E4 +.extern FUN_02020208 +.extern FUN_0202022C +.extern FUN_02020248 +.extern FUN_02020310 +.extern FUN_02020354 +.extern FUN_02020388 +.extern FUN_02020398 +.extern FUN_02020968 +.extern FUN_02020988 +.extern FUN_02020AFC +.extern FUN_02021590 +.extern FUN_020215C8 +.extern FUN_020215E0 +.extern FUN_02021750 +.extern FUN_020218D8 +.extern FUN_02021934 +.extern FUN_0202199C +.extern FUN_020219F4 +.extern FUN_02021A20 +.extern FUN_02021A4C +.extern FUN_02021A74 +.extern FUN_02021CE0 +.extern FUN_02021D3C +.extern FUN_02021E28 +.extern FUN_02021EF0 +.extern FUN_02021F2C +.extern FUN_0202212C +.extern FUN_02022294 +.extern FUN_020222AC +.extern FUN_020222B4 +.extern FUN_020222C4 +.extern FUN_020222E8 +.extern FUN_020222F0 +.extern FUN_020222F8 +.extern FUN_02022300 +.extern FUN_02022308 +.extern FUN_02022310 +.extern FUN_02022318 +.extern FUN_020223BC +.extern FUN_02022504 +.extern FUN_02022510 +.extern FUN_02022528 +.extern FUN_02022534 +.extern FUN_02022540 +.extern FUN_0202254C +.extern FUN_020225F8 +.extern FUN_02022610 +.extern FUN_0202263C +.extern FUN_02022720 +.extern FUN_020227FC +.extern FUN_02022800 +.extern FUN_02022804 +.extern FUN_0202280C +.extern FUN_0202282C +.extern FUN_02022830 +.extern FUN_0202287C +.extern FUN_02023788 +.extern FUN_02023794 +.extern FUN_02023818 +.extern FUN_0202381C +.extern FUN_02023828 +.extern FUN_02023874 +.extern FUN_02023884 +.extern FUN_020238F4 +.extern FUN_0202390C +.extern FUN_02023918 +.extern FUN_02023924 +.extern FUN_02023928 +.extern FUN_0202393C +.extern FUN_0202395C +.extern FUN_0202397C +.extern FUN_0202398C +.extern FUN_02023990 +.extern FUN_020239A0 +.extern FUN_020239BC +.extern FUN_020239C0 +.extern FUN_020239C8 +.extern FUN_020239CC +.extern FUN_020239D0 +.extern FUN_020239E4 +.extern FUN_02023A10 +.extern FUN_02023A28 +.extern FUN_02023A2C +.extern FUN_02023A30 +.extern FUN_02023A54 +.extern FUN_02023A68 +.extern FUN_02023A70 +.extern FUN_02023A78 +.extern FUN_02023A88 +.extern FUN_02023A90 +.extern FUN_02023A9C +.extern FUN_02023AA4 +.extern FUN_02023AF4 +.extern FUN_02023B0C +.extern FUN_02023BD4 +.extern FUN_02023C90 +.extern FUN_02023D58 +.extern FUN_02023D6C +.extern FUN_02023D80 +.extern FUN_020243C8 +.extern FUN_02024404 +.extern FUN_02024440 +.extern FUN_0202445C +.extern FUN_020244A4 +.extern FUN_020244EC +.extern FUN_02024504 +.extern FUN_02024518 +.extern FUN_02024550 +.extern FUN_020245F0 +.extern FUN_0202471C +.extern FUN_0202498C +.extern FUN_02024AF0 +.extern FUN_02024C84 +.extern FUN_02024CA4 +.extern FUN_02024CE0 +.extern FUN_02024D4C +.extern FUN_02024D64 +.extern FUN_02024D80 +.extern FUN_02024DA0 +.extern FUN_02024EB4 +.extern FUN_02024EC0 +.extern FUN_02024ECC +.extern FUN_02024ED8 +.extern FUN_02024EE8 +.extern FUN_02024F0C +.extern FUN_02024F30 +.extern FUN_02024F44 +.extern FUN_02024FF4 +.extern FUN_02025084 +.extern FUN_02025128 +.extern FUN_02025238 +.extern FUN_02025244 +.extern FUN_0202524C +.extern FUN_02025268 +.extern FUN_02025274 +.extern FUN_020252AC +.extern FUN_020252C4 +.extern FUN_020252D0 +.extern FUN_020252DC +.extern FUN_020252E8 +.extern FUN_020252F4 +.extern FUN_020253E0 +.extern FUN_02025484 +.extern FUN_02025490 +.extern FUN_020254A0 +.extern FUN_020254B4 +.extern FUN_020254C0 +.extern FUN_02025520 +.extern FUN_02025614 +.extern FUN_02025658 +.extern FUN_020256AC +.extern FUN_020256BC +.extern FUN_020256D0 +.extern FUN_020256DC +.extern FUN_020257C0 +.extern FUN_020257C4 +.extern FUN_020257C8 +.extern FUN_020257CC +.extern FUN_020257D0 +.extern FUN_020257D8 +.extern FUN_020257DC +.extern FUN_020257E0 +.extern FUN_02025814 +.extern FUN_02025824 +.extern FUN_02025838 +.extern FUN_02025864 +.extern FUN_02025878 +.extern FUN_02025888 +.extern FUN_0202589C +.extern FUN_020258B0 +.extern FUN_020258D4 +.extern FUN_02025A60 +.extern FUN_02025B60 +.extern FUN_02025B94 +.extern FUN_02025BE8 +.extern FUN_02025C30 +.extern FUN_02025C40 +.extern FUN_02025D6C +.extern FUN_02025D94 +.extern FUN_02025DB0 +.extern FUN_020260C4 +.extern FUN_02026298 +.extern FUN_020266B0 +.extern FUN_020266C8 +.extern FUN_020268D4 +.extern FUN_02026908 +.extern FUN_02026970 +.extern FUN_020269A0 +.extern FUN_020269CC +.extern FUN_020269D4 +.extern FUN_02026BC8 +.extern FUN_02026C00 +.extern FUN_02026CB4 +.extern FUN_02026CC4 +.extern FUN_02026FE4 +.extern FUN_02026FE8 +.extern FUN_02027008 +.extern FUN_02027044 +.extern FUN_0202708C +.extern FUN_02027098 +.extern FUN_020270B4 +.extern FUN_020270D8 +.extern FUN_02027100 +.extern FUN_02027114 +.extern FUN_02027168 +.extern FUN_02027184 +.extern FUN_020271A4 +.extern FUN_02027210 +.extern FUN_02027264 +.extern FUN_02027478 +.extern FUN_020275D8 +.extern FUN_02027608 +.extern FUN_0202763C +.extern FUN_0202769C +.extern FUN_020276A8 +.extern FUN_02027710 +.extern FUN_02027740 +.extern FUN_0202787C +.extern FUN_020278AC +.extern FUN_020278DC +.extern FUN_02027914 +.extern FUN_02027964 +.extern FUN_02027E24 +.extern FUN_02027E34 +.extern FUN_02027E5C +.extern FUN_02027F04 +.extern FUN_02027FBC +.extern FUN_02027FDC +.extern FUN_02028048 +.extern FUN_02028074 +.extern FUN_02028094 +.extern FUN_020280B8 +.extern FUN_020280F4 +.extern FUN_02028174 +.extern FUN_02028190 +.extern FUN_020281B8 +.extern FUN_02028448 +.extern FUN_020286EC +.extern FUN_02028700 +.extern FUN_02028754 +.extern FUN_02028788 +.extern FUN_020287A4 +.extern FUN_020287A8 +.extern FUN_020287C0 +.extern FUN_020287EC +.extern FUN_02028810 +.extern FUN_0202881C +.extern FUN_02028828 +.extern FUN_02028840 +.extern FUN_02028930 +.extern FUN_02028934 +.extern FUN_02028954 +.extern FUN_0202896C +.extern FUN_020289A4 +.extern FUN_020289B0 +.extern FUN_02028A20 +.extern FUN_02028AD4 +.extern FUN_02028FA4 +.extern FUN_02029048 +.extern FUN_02029120 +.extern FUN_0202912C +.extern FUN_02029138 +.extern FUN_0202914C +.extern FUN_0202918C +.extern FUN_0202920C +.extern FUN_0202942C +.extern FUN_02029500 +.extern FUN_02029880 +.extern FUN_020299C0 +.extern FUN_020299DC +.extern FUN_02029ABC +.extern FUN_02029AC8 +.extern FUN_02029ACC +.extern FUN_02029AD0 +.extern FUN_02029AD8 +.extern FUN_02029AFC +.extern FUN_02029B38 +.extern FUN_02029B3C +.extern FUN_02029C08 +.extern FUN_02029C74 +.extern FUN_02029C80 +.extern FUN_02029C8C +.extern FUN_02029CC8 +.extern FUN_02029CE0 +.extern FUN_02029CEC +.extern FUN_02029D44 +.extern FUN_02029DD4 +.extern FUN_02029E0C +.extern FUN_02029E2C +.extern FUN_02029EBC +.extern FUN_02029EC0 +.extern FUN_02029EC4 +.extern FUN_02029EE4 +.extern FUN_02029EF8 +.extern FUN_02029F04 +.extern FUN_02029F10 +.extern FUN_02029F14 +.extern FUN_02029F4C +.extern FUN_02029F9C +.extern FUN_02029FC8 +.extern FUN_0202A07C +.extern FUN_0202A0A8 +.extern FUN_0202A0E8 +.extern FUN_0202A11C +.extern FUN_0202A150 +.extern FUN_0202A170 +.extern FUN_0202A1B8 +.extern FUN_0202A240 +.extern FUN_0202A2C4 +.extern FUN_0202A3B4 +.extern FUN_0202A498 +.extern FUN_0202A520 +.extern FUN_0202A538 +.extern FUN_0202A578 +.extern FUN_0202A5CC +.extern FUN_0202A5D0 +.extern FUN_0202A5D4 +.extern FUN_0202A5F4 +.extern FUN_0202A74C +.extern FUN_0202A864 +.extern FUN_0202A8CC +.extern FUN_0202A8D8 +.extern FUN_0202A8E4 +.extern FUN_0202A918 +.extern FUN_0202A988 +.extern FUN_0202A990 +.extern FUN_0202A9AC +.extern FUN_0202A9B0 +.extern FUN_0202A9D0 +.extern FUN_0202AA00 +.extern FUN_0202AA14 +.extern FUN_0202AA20 +.extern FUN_0202AA38 +.extern FUN_0202AA40 +.extern FUN_0202AA58 +.extern FUN_0202AA74 +.extern FUN_0202AAA0 +.extern FUN_0202AAFC +.extern FUN_0202AB40 +.extern FUN_0202AB68 +.extern FUN_0202AF70 +.extern FUN_0202AF88 +.extern FUN_0202AF9C +.extern FUN_0202AFC0 +.extern FUN_0202AFFC +.extern FUN_0202B020 +.extern FUN_0202B03C +.extern FUN_0202B050 +.extern FUN_0202B21C +.extern FUN_0202B3C4 +.extern FUN_0202B4B0 +.extern FUN_0202B710 +.extern FUN_0202B838 +.extern FUN_0202B844 +.extern FUN_0202B850 +.extern FUN_0202B85C +.extern FUN_0202B868 +.extern FUN_0202B870 +.extern FUN_0202B87C +.extern FUN_0202B8E4 +.extern FUN_0202B8F0 +.extern FUN_0202BD6C +.extern FUN_0202BDF0 +.extern FUN_0202BE6C +.extern FUN_0202BEDC +.extern FUN_0202BFD8 +.extern FUN_0202C000 +.extern FUN_0202C108 +.extern FUN_0202C144 +.extern FUN_0202CB8C +.extern FUN_0202D8B0 +.extern FUN_0202D8D0 +.extern FUN_0202DBE0 +.extern FUN_0202DCF8 +.extern FUN_0202DDE8 +.extern FUN_0202DE78 +.extern FUN_0202DFA4 +.extern FUN_0202E020 +.extern FUN_0202E044 +.extern FUN_0202E25C +.extern FUN_0202E4C8 +.extern FUN_0202EDD8 +.extern FUN_0202EDF8 +.extern FUN_0202EE0C +.extern FUN_0202EE24 +.extern FUN_0202EE44 +.extern FUN_0202EF18 +.extern FUN_0202EF84 +.extern FUN_0202F078 +.extern FUN_0202F094 +.extern FUN_0202F0B8 +.extern FUN_0202FA10 +.extern FUN_0202FA1C +.extern FUN_0202FA48 +.extern FUN_0202FB80 +.extern FUN_02030A78 +.extern FUN_02030ADC +.extern FUN_02030B3C +.extern FUN_02030BC4 +.extern FUN_02030C4C +.extern FUN_02030C58 +.extern FUN_02030E7C +.extern FUN_02030F20 +.extern FUN_02030F40 +.extern FUN_02030F60 +.extern FUN_02030F74 +.extern FUN_02030F88 +.extern FUN_02030FA8 +.extern FUN_02030FC8 +.extern FUN_02030FE0 +.extern FUN_02031190 +.extern FUN_020311D0 +.extern FUN_020311DC +.extern FUN_020311E8 +.extern FUN_020311F0 +.extern FUN_02031248 +.extern FUN_02031280 +.extern FUN_020312BC +.extern FUN_020313B4 +.extern FUN_020313EC +.extern FUN_02031400 +.extern FUN_02031438 +.extern FUN_02031588 +.extern FUN_020315D8 +.extern FUN_020315FC +.extern FUN_0203168C +.extern FUN_020316AC +.extern FUN_020316E0 +.extern FUN_02031810 +.extern FUN_02031824 +.extern FUN_02031860 +.extern FUN_02031880 +.extern FUN_020318B4 +.extern FUN_020318C4 +.extern FUN_02031914 +.extern FUN_02031924 +.extern FUN_02031934 +.extern FUN_02031948 +.extern FUN_02031990 +.extern FUN_020319D8 +.extern FUN_020319F4 +.extern FUN_02031A08 +.extern FUN_02031A2C +.extern FUN_02031A7C +.extern FUN_02031AC8 +.extern FUN_02031AF4 +.extern FUN_02031B2C +.extern FUN_02031B50 +.extern FUN_02031BD0 +.extern FUN_02031BF4 +.extern FUN_02031C2C +.extern FUN_02031C54 +.extern FUN_02031C64 +.extern FUN_02032888 +.extern FUN_020328C0 +.extern FUN_020328F4 +.extern FUN_02032B6C +.extern FUN_02032DAC +.extern FUN_020334E8 +.extern FUN_02033534 +.extern FUN_02033564 +.extern FUN_02033578 +.extern FUN_020335B8 +.extern FUN_020335F0 +.extern FUN_02033678 +.extern FUN_020337E8 +.extern FUN_0203384C +.extern FUN_02033E74 +.extern FUN_02033ED0 +.extern FUN_02033F20 +.extern FUN_02033F70 +.extern FUN_02034188 +.extern FUN_020344AC +.extern FUN_020344D8 +.extern FUN_020344FC +.extern FUN_0203450C +.extern FUN_0203451C +.extern FUN_02034678 +.extern FUN_020346CC +.extern FUN_02034774 +.extern FUN_02034788 +.extern FUN_020347B0 +.extern FUN_020347C4 +.extern FUN_02034824 +.extern FUN_0203484C +.extern FUN_02034860 +.extern FUN_0203487C +.extern FUN_02034898 +.extern FUN_020348B4 +.extern FUN_020348E4 +.extern FUN_02034908 +.extern FUN_02034930 +.extern FUN_02034944 +.extern FUN_02034964 +.extern FUN_02034998 +.extern FUN_020349D8 +.extern FUN_020349E4 +.extern FUN_02034A04 +.extern FUN_02034A60 +.extern FUN_02034AC8 +.extern FUN_02034AF0 +.extern FUN_02034AF8 +.extern FUN_02034B00 +.extern FUN_02034B64 +.extern FUN_02034B6C +.extern FUN_02034B74 +.extern FUN_02034BAC +.extern FUN_02034BDC +.extern FUN_02034C0C +.extern FUN_02034C24 +.extern FUN_02034C34 +.extern FUN_02034D2C +.extern FUN_02034D44 +.extern FUN_02034DC4 +.extern FUN_02034DC8 +.extern FUN_02034DCC +.extern FUN_02034DD0 +.extern FUN_02034DD4 +.extern FUN_02034DE8 +.extern FUN_02034DEC +.extern FUN_02034DF4 +.extern FUN_02034DFC +.extern FUN_02034E04 +.extern FUN_02034E0C +.extern FUN_02034E10 +.extern FUN_02034E18 +.extern FUN_02034E20 +.extern FUN_02034E24 +.extern FUN_02034E28 +.extern FUN_02034E30 +.extern FUN_02034E48 +.extern FUN_02034E60 +.extern FUN_02034E8C +.extern FUN_02034E90 +.extern FUN_02034EC4 +.extern FUN_02034EF8 +.extern FUN_02034F1C +.extern FUN_02034F40 +.extern FUN_02034F88 +.extern FUN_02034FC0 +.extern FUN_02034FE4 +.extern FUN_02035068 +.extern FUN_020351A0 +.extern FUN_02035D04 +.extern FUN_02035E50 +.extern FUN_02036A78 +.extern FUN_02036AB8 +.extern FUN_02036B90 +.extern FUN_02036BC4 +.extern FUN_02036BDC +.extern FUN_02036D94 +.extern FUN_02036DD4 +.extern FUN_02037024 +.extern FUN_02037350 +.extern FUN_02037394 +.extern FUN_0203739C +.extern FUN_020373AC +.extern FUN_020373C4 +.extern FUN_020373D4 +.extern FUN_02037760 +.extern FUN_02037778 +.extern FUN_020377A8 +.extern FUN_020377AC +.extern FUN_020377B0 +.extern FUN_020377C8 +.extern FUN_0203780C +.extern FUN_0203789C +.extern FUN_020378FC +.extern FUN_02037944 +.extern FUN_020379F8 +.extern FUN_02037A1C +.extern FUN_02037A40 +.extern FUN_02037A48 +.extern FUN_02037A70 +.extern FUN_02037A78 +.extern FUN_02037B44 +.extern FUN_02037BB0 +.extern FUN_02037C00 +.extern FUN_02037CF0 +.extern FUN_02037D5C +.extern FUN_02037D60 +.extern FUN_02037E18 +.extern FUN_02037E80 +.extern FUN_02037E90 +.extern FUN_02037EB8 +.extern FUN_02037F2C +.extern FUN_02037F58 +.extern FUN_02037FC4 +.extern FUN_02037FE4 +.extern FUN_020380CC +.extern FUN_02038130 +.extern FUN_020383D8 +.extern FUN_020383F8 +.extern FUN_0203842C +.extern FUN_0203846C +.extern FUN_020385CC +.extern FUN_02038680 +.extern FUN_020386A4 +.extern FUN_020386B4 +.extern FUN_020386E0 +.extern FUN_02038790 +.extern FUN_02038804 +.extern FUN_02038814 +.extern FUN_02038824 +.extern FUN_02038854 +.extern FUN_02038864 +.extern FUN_0203888C +.extern FUN_020388B4 +.extern FUN_020389CC +.extern FUN_02038AD0 +.extern FUN_02038AF4 +.extern FUN_02038B6C +.extern FUN_02038C78 +.extern FUN_02038CA8 +.extern FUN_02038CD8 +.extern FUN_02038D10 +.extern FUN_02038EB0 +.extern FUN_02039438 +.extern FUN_02039460 +.extern FUN_020394B8 +.extern FUN_020394F0 +.extern FUN_02039504 +.extern FUN_02039528 +.extern FUN_0203953C +.extern FUN_02039550 +.extern FUN_02039564 +.extern FUN_0203959C +.extern FUN_020395BC +.extern FUN_020395F4 +.extern FUN_02039618 +.extern FUN_0203962C +.extern FUN_02039640 +.extern FUN_0203965C +.extern FUN_02039678 +.extern FUN_02039694 +.extern FUN_02039874 +.extern FUN_0203989C +.extern FUN_020399A0 +.extern FUN_020399A4 +.extern FUN_020399A8 +.extern FUN_020399B4 +.extern FUN_02039A10 +.extern FUN_02039A28 +.extern FUN_02039A40 +.extern FUN_02039A5C +.extern FUN_02039A78 +.extern FUN_02039A90 +.extern FUN_02039AAC +.extern FUN_02039ACC +.extern FUN_02039AF8 +.extern FUN_02039B28 +.extern FUN_02039B50 +.extern FUN_02039B78 +.extern FUN_02039BA0 +.extern FUN_02039BBC +.extern FUN_02039BDC +.extern FUN_02039C08 +.extern FUN_02039C40 +.extern FUN_02039C78 +.extern FUN_02039CE4 +.extern FUN_02039CF8 +.extern FUN_02039D10 +.extern FUN_02039D48 +.extern FUN_02039D78 +.extern FUN_02039DAC +.extern FUN_02039DC4 +.extern FUN_02039DD0 +.extern FUN_02039E04 +.extern FUN_02039E38 +.extern FUN_02039E50 +.extern FUN_02039E68 +.extern FUN_02039E84 +.extern FUN_02039EC0 +.extern FUN_02039EE8 +.extern FUN_02039F0C +.extern FUN_02039F30 +.extern FUN_02039F58 +.extern FUN_02039F88 +.extern FUN_02039FB8 +.extern FUN_02039FDC +.extern FUN_0203A00C +.extern FUN_0203A038 +.extern FUN_0203A04C +.extern FUN_0203A098 +.extern FUN_0203A0FC +.extern FUN_0203A13C +.extern FUN_0203A188 +.extern FUN_0203A210 +.extern FUN_0203A288 +.extern FUN_0203A2C4 +.extern FUN_0203A304 +.extern FUN_0203A340 +.extern FUN_0203A388 +.extern FUN_0203A3C4 +.extern FUN_0203A400 +.extern FUN_0203A45C +.extern FUN_0203A484 +.extern FUN_0203A4D0 +.extern FUN_0203A560 +.extern FUN_0203A590 +.extern FUN_0203A5D8 +.extern FUN_0203A608 +.extern FUN_0203A630 +.extern FUN_0203A780 +.extern FUN_0203A830 +.extern FUN_0203A85C +.extern FUN_0203A878 +.extern FUN_0203A8B8 +.extern FUN_0203A9F0 +.extern FUN_0203AA90 +.extern FUN_0203AAA0 +.extern FUN_0203AB44 +.extern FUN_0203AB74 +.extern FUN_0203AB8C +.extern FUN_0203AC14 +.extern FUN_0203AC9C +.extern FUN_0203ACC4 +.extern FUN_0203AD08 +.extern FUN_0203AD54 +.extern FUN_0203ADC4 +.extern FUN_0203AE4C +.extern FUN_0203AED4 +.extern FUN_0203AF34 +.extern FUN_0203AF58 +.extern FUN_0203AF84 +.extern FUN_0203AFA4 +.extern FUN_0203AFC4 +.extern FUN_0203B024 +.extern FUN_0203B148 +.extern FUN_0203B1F0 +.extern FUN_0203B2E0 +.extern FUN_0203B3B0 +.extern FUN_0203B3C0 +.extern FUN_0203B3DC +.extern FUN_0203B3F8 +.extern FUN_0203B440 +.extern FUN_0203B468 +.extern FUN_0203B500 +.extern FUN_0203B544 +.extern FUN_0203B574 +.extern FUN_0203B5B8 +.extern FUN_0203B618 +.extern FUN_0203B640 +.extern FUN_0203B724 +.extern FUN_0203B758 +.extern FUN_0203B790 +.extern FUN_0203B7D8 +.extern FUN_0203B7F0 +.extern FUN_0203B81C +.extern FUN_0203B85C +.extern FUN_0203B8A0 +.extern FUN_0203B8E4 +.extern FUN_0203B914 +.extern FUN_0203B944 +.extern FUN_0203B968 +.extern FUN_0203B9B4 +.extern FUN_0203BA3C +.extern FUN_0203BAB0 +.extern FUN_0203BAF4 +.extern FUN_0203BB34 +.extern FUN_0203BB80 +.extern FUN_0203BB84 +.extern FUN_0203BB88 +.extern FUN_0203BB8C +.extern FUN_0203BC1C +.extern FUN_0203BC2C +.extern FUN_0203BCBC +.extern FUN_0203BCCC +.extern FUN_0203BCD8 +.extern FUN_0203BD08 +.extern FUN_0203BD28 +.extern FUN_0203BDB8 +.extern FUN_0203BE50 +.extern FUN_0203BE68 +.extern FUN_0203BE80 +.extern FUN_0203BECC +.extern FUN_0203BF00 +.extern FUN_0203BF20 +.extern FUN_0203BF2C +.extern FUN_0203BF84 +.extern FUN_0203BFEC +.extern FUN_0203C054 +.extern FUN_0203C090 +.extern FUN_0203C0CC +.extern FUN_0203C0FC +.extern FUN_0203C118 +.extern FUN_0203C12C +.extern FUN_0203C174 +.extern FUN_0203C1AC +.extern FUN_0203C200 +.extern FUN_0203C278 +.extern FUN_0203C2C4 +.extern FUN_0203C2E0 +.extern FUN_0203C2F0 +.extern FUN_0203C300 +.extern FUN_0203C32C +.extern FUN_0203C33C +.extern FUN_0203C368 +.extern FUN_0203C3C8 +.extern FUN_0203C3E8 +.extern FUN_0203C430 +.extern FUN_0203C460 +.extern FUN_0203C4B0 +.extern FUN_0203C4F0 +.extern FUN_0203C520 +.extern FUN_0203C58C +.extern FUN_0203C5BC +.extern FUN_0203C614 +.extern FUN_0203C680 +.extern FUN_0203C6C4 +.extern FUN_0203C70C +.extern FUN_0203C730 +.extern FUN_0203C788 +.extern FUN_0203C7E4 +.extern FUN_0203C7F4 +.extern FUN_0203C820 +.extern FUN_0203C844 +.extern FUN_0203C874 +.extern FUN_0203C8B4 +.extern FUN_0203C8E4 +.extern FUN_0203C930 +.extern FUN_0203C960 +.extern FUN_0203C990 +.extern FUN_0203CA20 +.extern FUN_0203CA2C +.extern FUN_0203CA5C +.extern FUN_0203CAE8 +.extern FUN_0203CB08 +.extern FUN_0203CB20 +.extern FUN_0203CB48 +.extern FUN_0203CB60 +.extern FUN_0203CB70 +.extern FUN_0203CBBC +.extern FUN_0203CBE8 +.extern FUN_0203CC88 +.extern FUN_0203CD20 +.extern FUN_0203CDB8 +.extern FUN_0203CDC4 +.extern FUN_0203CDD0 +.extern FUN_0203CE00 +.extern FUN_0203CE0C +.extern FUN_0203CE8C +.extern FUN_0203CEBC +.extern FUN_0203CF04 +.extern FUN_0203CF34 +.extern FUN_0203CF64 +.extern FUN_0203CF94 +.extern FUN_0203CFC4 +.extern FUN_0203CFC8 +.extern FUN_0203D050 +.extern FUN_0203D0A4 +.extern FUN_0203D0F8 +.extern FUN_0203D134 +.extern FUN_0203D140 +.extern FUN_0203D150 +.extern FUN_0203D178 +.extern FUN_0203D194 +.extern FUN_0203D1A4 +.extern FUN_0203D1C0 +.extern FUN_0203D214 +.extern FUN_0203D23C +.extern FUN_0203D248 +.extern FUN_0203D278 +.extern FUN_0203D2A4 +.extern FUN_0203D2E4 +.extern FUN_0203D330 +.extern FUN_0203D33C +.extern FUN_0203D36C +.extern FUN_0203D3A4 +.extern FUN_0203D3DC +.extern FUN_0203D448 +.extern FUN_0203D458 +.extern FUN_0203D490 +.extern FUN_0203D4E8 +.extern FUN_0203D528 +.extern FUN_0203D560 +.extern FUN_0203D5B0 +.extern FUN_0203D5F8 +.extern FUN_0203D60C +.extern FUN_0203D61C +.extern FUN_0203D630 +.extern FUN_0203D66C +.extern FUN_0203D6C4 +.extern FUN_0203D728 +.extern FUN_0203D738 +.extern FUN_0203D774 +.extern FUN_0203D7DC +.extern FUN_0203D834 +.extern FUN_0203D868 +.extern FUN_0203D874 +.extern FUN_0203D8A0 +.extern FUN_0203D8D0 +.extern FUN_0203D8E8 +.extern FUN_0203D8EC +.extern FUN_0203D920 +.extern FUN_0203D938 +.extern FUN_0203D948 +.extern FUN_0203D958 +.extern FUN_0203D998 +.extern FUN_0203D9E8 +.extern FUN_0203DA78 +.extern FUN_0203DAB0 +.extern FUN_0203DAE8 +.extern FUN_0203DB38 +.extern FUN_0203DB88 +.extern FUN_0203DBD4 +.extern FUN_0203DC00 +.extern FUN_0203DC58 +.extern FUN_0203DC70 +.extern FUN_0203DC88 +.extern FUN_0203DCA0 +.extern FUN_0203DCB8 +.extern FUN_0203DCC8 +.extern FUN_0203DCD8 +.extern FUN_0203DCE8 +.extern FUN_0203DCF8 +.extern FUN_0203DD08 +.extern FUN_0203DD18 +.extern FUN_0203DD34 +.extern FUN_0203DD50 +.extern FUN_0203DD60 +.extern FUN_0203DE00 +.extern FUN_0203DE4C +.extern FUN_0203DE58 +.extern FUN_0203DE80 +.extern FUN_0203DEA8 +.extern FUN_0203DEC4 +.extern FUN_0203DEF8 +.extern FUN_0203DF2C +.extern FUN_0203DF38 +.extern FUN_0203DF64 +.extern FUN_0203DF84 +.extern FUN_0203DFA8 +.extern FUN_0203DFE0 +.extern FUN_0203E018 +.extern FUN_0203E054 +.extern FUN_0203E078 +.extern FUN_0203E0CC +.extern FUN_0203E120 +.extern FUN_0203E138 +.extern FUN_0203E168 +.extern FUN_0203E254 +.extern FUN_0203E258 +.extern FUN_0203E29C +.extern FUN_0203E2F8 +.extern FUN_0203E35C +.extern FUN_0203E38C +.extern FUN_0203E3D0 +.extern FUN_0203E408 +.extern FUN_0203E440 +.extern FUN_0203E470 +.extern FUN_0203E4A0 +.extern FUN_0203E4B0 +.extern FUN_0203E4D8 +.extern FUN_0203E4F0 +.extern FUN_0203E510 +.extern FUN_0203E568 +.extern FUN_0203E5DC +.extern FUN_0203E674 +.extern FUN_0203E684 +.extern FUN_0203E6B4 +.extern FUN_0203E6C4 +.extern FUN_0203E6FC +.extern FUN_0203E72C +.extern FUN_0203E744 +.extern FUN_0203E774 +.extern FUN_0203E7F0 +.extern FUN_0203E81C +.extern FUN_0203E848 +.extern FUN_0203E858 +.extern FUN_0203E870 +.extern FUN_0203E894 +.extern FUN_0203E8C4 +.extern FUN_0203E8F4 +.extern FUN_0203E928 +.extern FUN_0203E940 +.extern FUN_0203E954 +.extern FUN_0203E968 +.extern FUN_0203E9CC +.extern FUN_0203EA68 +.extern FUN_0203EA90 +.extern FUN_0203EAB0 +.extern FUN_0203EB20 +.extern FUN_0203EB48 +.extern FUN_0203EB88 +.extern FUN_0203EBC8 +.extern FUN_0203EBE4 +.extern FUN_0203ECAC +.extern FUN_0203ECD8 +.extern FUN_0203ECF4 +.extern FUN_0203ED10 +.extern FUN_0203ED70 +.extern FUN_0203EDA4 +.extern FUN_0203EDC8 +.extern FUN_0203EDE0 +.extern FUN_0203EE08 +.extern FUN_0203EE18 +.extern FUN_0203EE28 +.extern FUN_0203EE58 +.extern FUN_0203EE68 +.extern FUN_0203EE78 +.extern FUN_0203EE98 +.extern FUN_0203EED8 +.extern FUN_0203EF58 +.extern FUN_0203F00C +.extern FUN_0203F020 +.extern FUN_0203F034 +.extern FUN_0203F058 +.extern FUN_0203F07C +.extern FUN_0203F110 +.extern FUN_0203F174 +.extern FUN_0203F19C +.extern FUN_0203F234 +.extern FUN_0203F254 +.extern FUN_0203F26C +.extern FUN_0203F2AC +.extern FUN_0203F2E4 +.extern FUN_0203F31C +.extern FUN_0203F348 +.extern FUN_0203F38C +.extern FUN_0203F39C +.extern FUN_0203F3AC +.extern FUN_0203F418 +.extern FUN_0203F44C +.extern FUN_0203F484 +.extern FUN_0203F4D8 +.extern FUN_0203F508 +.extern FUN_0203F5D4 +.extern FUN_0203F604 +.extern FUN_0203F634 +.extern FUN_0203F664 +.extern FUN_0203F6E4 +.extern FUN_0203F720 +.extern FUN_0203F760 +.extern FUN_0203F7C8 +.extern FUN_0203F80C +.extern FUN_0203F880 +.extern FUN_0203F8C0 +.extern FUN_0203F924 +.extern FUN_0203F954 +.extern FUN_0203F988 +.extern FUN_0203F9B0 +.extern FUN_0203F9DC +.extern FUN_0203FA14 +.extern FUN_0203FA58 +.extern FUN_0203FB4C +.extern FUN_0203FB64 +.extern FUN_0203FB94 +.extern FUN_0203FBA0 +.extern FUN_0203FBAC +.extern FUN_0203FBBC +.extern FUN_0203FC1C +.extern FUN_0203FC58 +.extern FUN_0203FC80 +.extern FUN_0203FCB0 +.extern FUN_0203FCDC +.extern FUN_0203FCF4 +.extern FUN_0203FDBC +.extern FUN_0203FE08 +.extern FUN_0203FE48 +.extern FUN_0203FE80 +.extern FUN_0203FE90 +.extern FUN_0203FEC0 +.extern FUN_0203FF10 +.extern FUN_02040028 +.extern FUN_02040074 +.extern FUN_020400C8 +.extern FUN_0204011C +.extern FUN_02040170 +.extern FUN_020401CC +.extern FUN_02040204 +.extern FUN_02040220 +.extern FUN_0204025C +.extern FUN_02040298 +.extern FUN_020402D4 +.extern FUN_02040304 +.extern FUN_02040340 +.extern FUN_02040370 +.extern FUN_020403A0 +.extern FUN_020403D0 +.extern FUN_02040414 +.extern FUN_02040458 +.extern FUN_02040488 +.extern FUN_020404FC +.extern FUN_0204052C +.extern FUN_0204056C +.extern FUN_0204059C +.extern FUN_020405B4 +.extern FUN_020405CC +.extern FUN_020405F8 +.extern FUN_02040638 +.extern FUN_0204064C +.extern FUN_02040660 +.extern FUN_020406C0 +.extern FUN_020406CC +.extern FUN_02040700 +.extern FUN_02040724 +.extern FUN_02040748 +.extern FUN_02040790 +.extern FUN_020407C8 +.extern FUN_02040800 +.extern FUN_0204083C +.extern FUN_02040874 +.extern FUN_020408BC +.extern FUN_0204091C +.extern FUN_02040964 +.extern FUN_020409C0 +.extern FUN_020409F8 +.extern FUN_02040A30 +.extern FUN_02040A7C +.extern FUN_02040B0C +.extern FUN_02040B5C +.extern FUN_02040BAC +.extern FUN_02040BFC +.extern FUN_02040C34 +.extern FUN_02040C6C +.extern FUN_02040CA4 +.extern FUN_02040D04 +.extern FUN_02040D7C +.extern FUN_02040DB4 +.extern FUN_02040DEC +.extern FUN_02040E4C +.extern FUN_02040EB4 +.extern FUN_02040EF8 +.extern FUN_02040F34 +.extern FUN_02040F6C +.extern FUN_02040FA4 +.extern FUN_02040FDC +.extern FUN_02041014 +.extern FUN_0204104C +.extern FUN_02041094 +.extern FUN_020410C8 +.extern FUN_02041100 +.extern FUN_02041138 +.extern FUN_02041174 +.extern FUN_02041194 +.extern FUN_020411C4 +.extern FUN_02041340 +.extern FUN_020413C0 +.extern FUN_020413E8 +.extern FUN_020413F8 +.extern FUN_0204140C +.extern FUN_02041424 +.extern FUN_0204143C +.extern FUN_02041478 +.extern FUN_0204149C +.extern FUN_020414B8 +.extern FUN_020414CC +.extern FUN_020414E0 +.extern FUN_020414FC +.extern FUN_02041518 +.extern FUN_02041558 +.extern FUN_02041588 +.extern FUN_020415AC +.extern FUN_020415BC +.extern FUN_020415E0 +.extern FUN_02041618 +.extern FUN_02041644 +.extern FUN_02041650 +.extern FUN_02041664 +.extern FUN_02041674 +.extern FUN_020416A8 +.extern FUN_02041770 +.extern FUN_020417E0 +.extern FUN_02041808 +.extern FUN_0204185C +.extern FUN_0204188C +.extern FUN_0204190C +.extern FUN_02041970 +.extern FUN_020419F8 +.extern FUN_02041A80 +.extern FUN_02041AB4 +.extern FUN_02041AD4 +.extern FUN_02041AE0 +.extern FUN_02041B10 +.extern FUN_02041B40 +.extern FUN_02041B70 +.extern FUN_02041B9C +.extern FUN_02041BC4 +.extern FUN_02041BF0 +.extern FUN_02041C38 +.extern FUN_02041E40 +.extern FUN_02041FDC +.extern FUN_02042000 +.extern FUN_02042038 +.extern FUN_02042110 +.extern FUN_0204214C +.extern FUN_02042354 +.extern FUN_02042364 +.extern FUN_02042394 +.extern FUN_020423B0 +.extern FUN_02042700 +.extern FUN_02042780 +.extern FUN_020427A8 +.extern FUN_020427D0 +.extern FUN_02042864 +.extern FUN_02042894 +.extern FUN_020428E0 +.extern FUN_02042950 +.extern FUN_02042980 +.extern FUN_02042998 +.extern FUN_020429B8 +.extern FUN_020429E8 +.extern FUN_02042A18 +.extern FUN_02042A48 +.extern FUN_02042A98 +.extern FUN_02042B0C +.extern FUN_02042B40 +.extern FUN_02042B74 +.extern FUN_02042BA8 +.extern FUN_02042BDC +.extern FUN_02042C10 +.extern FUN_02042C44 +.extern FUN_02042C8C +.extern FUN_02042CBC +.extern FUN_02042D1C +.extern FUN_0204387C +.extern FUN_020438D0 +.extern FUN_02043918 +.extern FUN_020439B4 +.extern FUN_02043A44 +.extern FUN_02043A94 +.extern FUN_02043AAC +.extern FUN_02043ACC +.extern FUN_02043AFC +.extern FUN_02043B28 +.extern FUN_02043B54 +.extern FUN_02043B84 +.extern FUN_02043BD0 +.extern FUN_02043C28 +.extern FUN_02043C6C +.extern FUN_02043C90 +.extern FUN_02043CB4 +.extern FUN_02043CE4 +.extern FUN_02043D28 +.extern FUN_02043D78 +.extern FUN_02043DC8 +.extern FUN_02043DE0 +.extern FUN_02043E00 +.extern FUN_02043E20 +.extern FUN_02043E50 +.extern FUN_02043E68 +.extern FUN_02043E9C +.extern FUN_02043EFC +.extern FUN_02043F50 +.extern FUN_02043FA0 +.extern FUN_02043FF4 +.extern FUN_02044034 +.extern FUN_020440C0 +.extern FUN_020440F0 +.extern FUN_02044120 +.extern FUN_02044138 +.extern FUN_0204413C +.extern FUN_02044140 +.extern FUN_02044158 +.extern FUN_0204416C +.extern FUN_02044198 +.extern FUN_020442BC +.extern FUN_0204434C +.extern FUN_020443A8 +.extern FUN_02044414 +.extern FUN_0204449C +.extern FUN_020444F4 +.extern FUN_02044598 +.extern FUN_02044658 +.extern FUN_0204469C +.extern FUN_02044730 +.extern FUN_0204478C +.extern FUN_02044800 +.extern FUN_0204488C +.extern FUN_020448D4 +.extern FUN_020449A4 +.extern FUN_02044A0C +.extern FUN_02044A6C +.extern FUN_02044A94 +.extern FUN_02044B00 +.extern FUN_02044B2C +.extern FUN_02044B84 +.extern FUN_02044C0C +.extern FUN_02044C88 +.extern FUN_02044CE0 +.extern FUN_02044D44 +.extern FUN_02044D8C +.extern FUN_02044E34 +.extern FUN_02044E78 +.extern FUN_02044ED8 +.extern FUN_02044F20 +.extern FUN_02044F58 +.extern FUN_02044FE8 +.extern FUN_0204505C +.extern FUN_02045104 +.extern FUN_02045170 +.extern FUN_020451D0 +.extern FUN_02045264 +.extern FUN_02045268 +.extern FUN_020452B4 +.extern FUN_02045308 +.extern FUN_02045398 +.extern FUN_0204539C +.extern FUN_020453A0 +.extern FUN_020453F4 +.extern FUN_02045424 +.extern FUN_02045438 +.extern FUN_02045468 +.extern FUN_02045484 +.extern FUN_020454CC +.extern FUN_02045500 +.extern FUN_0204552C +.extern FUN_0204557C +.extern FUN_02045590 +.extern FUN_020455BC +.extern FUN_020455D0 +.extern FUN_020455E4 +.extern FUN_02045610 +.extern FUN_02045624 +.extern FUN_02045638 +.extern FUN_02045664 +.extern FUN_02045678 +.extern FUN_020456D4 +.extern FUN_0204572C +.extern FUN_02045784 +.extern FUN_020457DC +.extern FUN_02045834 +.extern FUN_0204588C +.extern FUN_020458E4 +.extern FUN_02045918 +.extern FUN_02045950 +.extern FUN_02045954 +.extern FUN_02045958 +.extern FUN_020459AC +.extern FUN_020459E8 +.extern FUN_02045A3C +.extern FUN_02045A78 +.extern FUN_02045ACC +.extern FUN_02045B08 +.extern FUN_02045B44 +.extern FUN_02045B80 +.extern FUN_02045BC8 +.extern FUN_02045C04 +.extern FUN_02045C40 +.extern FUN_02045C7C +.extern FUN_02045CD4 +.extern FUN_02045D10 +.extern FUN_02045D4C +.extern FUN_02045D88 +.extern FUN_02045DD0 +.extern FUN_02045E1C +.extern FUN_02045E20 +.extern FUN_02045EE0 +.extern FUN_02045EE4 +.extern FUN_02045F24 +.extern FUN_02045F84 +.extern FUN_02045F88 +.extern FUN_02045FCC +.extern FUN_02046010 +.extern FUN_0204601C +.extern FUN_02046028 +.extern FUN_0204602C +.extern FUN_02046030 +.extern FUN_020462AC +.extern FUN_020462B8 +.extern FUN_020462E4 +.extern FUN_0204630C +.extern FUN_02046338 +.extern FUN_02046380 +.extern FUN_020463CC +.extern FUN_020463EC +.extern FUN_0204640C +.extern FUN_02046420 +.extern FUN_0204646C +.extern FUN_0204647C +.extern FUN_0204649C +.extern FUN_020464A4 +.extern FUN_02046500 +.extern FUN_02046528 +.extern FUN_0204652C +.extern FUN_02046530 +.extern FUN_02046534 +.extern FUN_02046DB4 +.extern FUN_02046E18 +.extern FUN_02046FA0 +.extern FUN_020470AC +.extern FUN_020470E8 +.extern FUN_02047174 +.extern FUN_020480B8 +.extern FUN_020480C8 +.extern FUN_020480D8 +.extern FUN_02048498 +.extern FUN_02048694 +.extern FUN_02048C58 +.extern FUN_02048D90 +.extern FUN_02048EC8 +.extern FUN_02048FC8 +.extern FUN_02049240 +.extern FUN_02049274 +.extern FUN_02049EA4 +.extern FUN_02049F98 +.extern FUN_02049FFC +.extern FUN_0204A048 +.extern FUN_0204A0C8 +.extern FUN_0204A120 +.extern FUN_0204A20C +.extern FUN_0204A248 +.extern FUN_0204A32C +.extern FUN_0204A6E0 +.extern FUN_0204AB20 +.extern FUN_0204AB58 +.extern FUN_0204ABA8 +.extern FUN_0204ABDC +.extern FUN_0204AD0C +.extern FUN_0204ADBC +.extern FUN_0204ADE0 +.extern FUN_0204AF3C +.extern FUN_0204AF84 +.extern FUN_0204B2A4 +.extern FUN_0204B2B4 +.extern FUN_0204B2C0 +.extern FUN_0204B2D8 +.extern FUN_0204B33C +.extern FUN_0204B4FC +.extern FUN_0204B57C +.extern FUN_0204B5A8 +.extern FUN_0204B5FC +.extern FUN_0204B63C +.extern FUN_0204B660 +.extern FUN_0204B684 +.extern FUN_0204B6A4 +.extern FUN_0204B9A0 +.extern FUN_0204B9CC +.extern FUN_0204B9EC +.extern FUN_0204BA1C +.extern FUN_0204BAB0 +.extern FUN_0204BAC4 +.extern FUN_0204BAD4 +.extern FUN_0204BAE4 +.extern FUN_0204BEC8 +.extern FUN_0204BED0 +.extern FUN_0204BED8 +.extern FUN_0204C104 +.extern FUN_0204C1A8 +.extern FUN_0204D6C0 +.extern FUN_0204E2FC +.extern FUN_0204F6DC +.extern FUN_0204FF5C +.extern FUN_02050024 +.extern FUN_02050048 +.extern FUN_020524CC +.extern FUN_02052544 +.extern FUN_02052604 +.extern FUN_02052608 +.extern FUN_02052648 +.extern FUN_0205265C +.extern FUN_02052714 +.extern FUN_02052718 +.extern FUN_020527A8 +.extern FUN_020527D8 +.extern FUN_0205296C +.extern FUN_02052A10 +.extern FUN_02052B74 +.extern FUN_02052C0C +.extern FUN_02052CD8 +.extern FUN_02052D08 +.extern FUN_02052DE8 +.extern FUN_02052E10 +.extern FUN_02052F74 +.extern FUN_020534DC +.extern FUN_0205363C +.extern FUN_02053678 +.extern FUN_020536D0 +.extern FUN_020545B8 +.extern FUN_02054608 +.extern FUN_02054658 +.extern FUN_020546C8 +.extern FUN_020547A4 +.extern FUN_02054C14 +.extern FUN_02054CB0 +.extern FUN_02054CC8 +.extern FUN_02054D1C +.extern FUN_02054DEC +.extern FUN_02054E30 +.extern FUN_02054F50 +.extern FUN_0205502C +.extern FUN_020552F8 +.extern FUN_02055304 +.extern FUN_02055320 +.extern FUN_0205532C +.extern FUN_020553A0 +.extern FUN_020553C4 +.extern FUN_020553D4 +.extern FUN_020553E8 +.extern FUN_02055468 +.extern FUN_02055474 +.extern FUN_02055488 +.extern FUN_02055560 +.extern FUN_02055720 +.extern FUN_020557F4 +.extern FUN_02055A38 +.extern FUN_02055B14 +.extern FUN_02055B30 +.extern FUN_02055B8C +.extern FUN_0205753C +.extern FUN_020575D4 +.extern FUN_02057654 +.extern FUN_02057688 +.extern FUN_02057800 +.extern FUN_0205785C +.extern FUN_02057BAC +.extern FUN_02058060 +.extern FUN_020580B4 +.extern FUN_02058448 +.extern FUN_02058458 +.extern FUN_02058480 +.extern FUN_02058488 +.extern FUN_02058510 +.extern FUN_02058738 +.extern FUN_02058780 +.extern FUN_020587B0 +.extern FUN_02058854 +.extern FUN_0205889C +.extern FUN_020588B8 +.extern FUN_020588D4 +.extern FUN_02058908 +.extern FUN_02058914 +.extern FUN_02058994 +.extern FUN_02058B2C +.extern FUN_02058B4C +.extern FUN_02058B7C +.extern FUN_02058BB4 +.extern FUN_02058BE4 +.extern FUN_02058D74 +.extern FUN_02058E28 +.extern FUN_02058E90 +.extern FUN_02058EB0 +.extern FUN_02059D1C +.extern FUN_02059E74 +.extern FUN_0205AE28 +.extern FUN_0205AEA4 +.extern FUN_0205AEF0 +.extern FUN_0205AEFC +.extern FUN_0205CA4C +.extern FUN_0205CA64 +.extern FUN_0205CA78 +.extern FUN_0205CE48 +.extern FUN_0205CE80 +.extern FUN_0205DD18 +.extern FUN_0205DD38 +.extern FUN_0205DD40 +.extern FUN_0205E7C4 +.extern FUN_0205ECD4 +.extern FUN_0205ECE0 +.extern FUN_0205ECFC +.extern FUN_0205ED0C +.extern FUN_0205ED1C +.extern FUN_0205ED2C +.extern FUN_0205ED3C +.extern FUN_0205ED4C +.extern FUN_0205ED5C +.extern FUN_0205ED6C +.extern FUN_0205F1C4 +.extern FUN_0205F1D4 +.extern FUN_0205F1F4 +.extern FUN_0205F204 +.extern FUN_0205F214 +.extern FUN_0205F224 +.extern FUN_0205F234 +.extern FUN_0205F244 +.extern FUN_0205F264 +.extern FUN_0205F274 +.extern FUN_0205F284 +.extern FUN_0205F294 +.extern FUN_0205F2A4 +.extern FUN_0205F2B4 +.extern FUN_0205F2C4 +.extern FUN_0205F2D4 +.extern FUN_0205F2E4 +.extern FUN_0205F368 +.extern FUN_0205F378 +.extern FUN_0205F388 +.extern FUN_0205F398 +.extern FUN_0205F3C0 +.extern FUN_0205F3F8 +.extern FUN_0205F478 +.extern FUN_0205F4A0 +.extern FUN_0205F4E4 +.extern FUN_0205F50C +.extern FUN_0205F524 +.extern FUN_0205F54C +.extern FUN_0205F55C +.extern FUN_0205F594 +.extern FUN_0205F5A4 +.extern FUN_0205F5D8 +.extern FUN_0205F5FC +.extern FUN_0205F648 +.extern FUN_0205F668 +.extern FUN_0205F688 +.extern FUN_0205F698 +.extern FUN_0205F6A8 +.extern FUN_0205F6C8 +.extern FUN_0205F6D8 +.extern FUN_0205F710 +.extern FUN_0205F720 +.extern FUN_0205F740 +.extern FUN_0205F760 +.extern FUN_0205F7A0 +.extern FUN_0205FD38 +.extern FUN_0205FDDC +.extern FUN_0205FE10 +.extern FUN_0205FF5C +.extern FUN_02060144 +.extern FUN_0206015C +.extern FUN_02060490 +.extern FUN_02060790 +.extern FUN_020607D4 +.extern FUN_02060F3C +.extern FUN_02060F88 +.extern FUN_02060F9C +.extern FUN_02060FD0 +.extern FUN_020612EC +.extern FUN_020612F8 +.extern FUN_02061374 +.extern FUN_020613CC +.extern FUN_02061460 +.extern FUN_02061574 +.extern FUN_02061A8C +.extern FUN_02063650 +.extern FUN_0206367C +.extern FUN_02063888 +.extern FUN_020638BC +.extern FUN_02063948 +.extern FUN_02063964 +.extern FUN_0206486C +.extern FUN_020649B0 +.extern FUN_020649D4 +.extern FUN_02064CA8 +.extern FUN_02064CC8 +.extern FUN_02064D10 +.extern FUN_02064D4C +.extern FUN_02064D88 +.extern FUN_02064E20 +.extern FUN_02064E60 +.extern FUN_02064E90 +.extern FUN_02065054 +.extern FUN_02065070 +.extern FUN_02065078 +.extern FUN_02065314 +.extern FUN_02065344 +.extern FUN_02066818 +.extern FUN_02066978 +.extern FUN_020669A0 +.extern FUN_020669C0 +.extern FUN_020669D4 +.extern FUN_02066A20 +.extern FUN_02066ACC +.extern FUN_02066ED8 +.extern FUN_020671BC +.extern FUN_020672BC +.extern FUN_02067830 +.extern FUN_02068678 +.extern FUN_02068854 +.extern FUN_020689E0 +.extern FUN_02068AAC +.extern FUN_02068B68 +.extern FUN_02068C00 +.extern FUN_02068E14 +.extern FUN_020690C4 +.extern FUN_020690CC +.extern FUN_020690E4 +.extern FUN_02069168 +.extern FUN_020699A4 +.extern FUN_02069A64 +.extern FUN_02069B40 +.extern FUN_02069B88 +.extern FUN_0206A23C +.extern FUN_0206AC74 +.extern FUN_0206AD4C +.extern FUN_0206B20C +.extern FUN_0206B3E4 +.extern FUN_0206B484 +.extern FUN_0206B57C +.extern FUN_0206B5E4 +.extern FUN_0206B620 +.extern FUN_0206B644 +.extern FUN_0206B6C8 +.extern FUN_0206B7BC +.extern FUN_0206B900 +.extern FUN_0206B9AC +.extern FUN_0206B9B0 +.extern FUN_0206BAE4 +.extern FUN_0206BB1C +.extern FUN_0206BB28 +.extern FUN_0206C700 +.extern FUN_0206C91C +.extern FUN_0206C92C +.extern FUN_0206E2F0 +.extern FUN_0206E308 +.extern FUN_0206E314 +.extern FUN_0206E340 +.extern FUN_0206E354 +.extern FUN_0206E358 +.extern FUN_0206E360 +.extern FUN_0206E37C +.extern FUN_0206E384 +.extern FUN_0206E38C +.extern FUN_0206E7B8 +.extern FUN_0206EA30 +.extern FUN_0206EA98 +.extern FUN_0206EAB8 +.extern FUN_0206EB1C +.extern FUN_0206ED24 +.extern FUN_0206ED38 +.extern FUN_0206EDD4 +.extern FUN_0206EE50 +.extern FUN_0206EE64 +.extern FUN_0206EEF8 +.extern FUN_0206EFEC +.extern FUN_0206F158 +.extern FUN_0206F164 +.extern FUN_0206F17C +.extern FUN_0206F190 +.extern FUN_0206F3B8 +.extern FUN_0206F3D8 +.extern FUN_02077A84 +.extern FUN_02077AC4 +.extern FUN_02079C70 +.extern FUN_0207B000 +.extern FUN_0207C2A4 +.extern FUN_0207FC5C +.extern FUN_0207FCE0 +.extern FUN_0208089C +.extern FUN_02080C38 +.extern FUN_02080E0C +.extern FUN_02081214 +.extern FUN_020814E8 +.extern FUN_02081DC4 +.extern FUN_02081EB8 +.extern FUN_0208201C +.extern FUN_02082034 +.extern FUN_0208206C +.extern FUN_02082090 +.extern FUN_020820B8 +.extern FUN_020820DC +.extern FUN_0208210C +.extern FUN_0208213C +.extern FUN_02082140 +.extern FUN_02082158 +.extern FUN_0208217C +.extern FUN_02082190 +.extern FUN_020821B4 +.extern FUN_020821C4 +.extern FUN_020821DC +.extern FUN_020821F0 +.extern FUN_02082214 +.extern FUN_0208223C +.extern FUN_0208224C +.extern FUN_02082254 +.extern FUN_02082284 +.extern FUN_020822F0 +.extern FUN_02082444 +.extern FUN_02082508 +.extern FUN_020825A0 +.extern FUN_02082630 +.extern FUN_02085140 +.extern FUN_020851B8 +.extern FUN_020851DC +.extern FUN_020851F8 +.extern FUN_0208524C +.extern FUN_02085258 +.extern FUN_02085264 +.extern FUN_0208526C +.extern FUN_02085290 +.extern FUN_020852E8 +.extern FUN_02085338 +.extern FUN_020853A8 +.extern FUN_020853B0 +.extern FUN_020853B4 +.extern FUN_020853BC +.extern FUN_020853E4 +.extern FUN_020853E8 +.extern FUN_020853EC +.extern FUN_020853F0 +.extern FUN_020853FC +.extern FUN_020854E0 +.extern FUN_02085538 +.extern FUN_02085578 +.extern FUN_020855B0 +.extern FUN_020855E4 +.extern FUN_0208560C +.extern FUN_0208562C +.extern FUN_02085F48 +.extern FUN_020863DC +.extern FUN_02087A1C +.extern FUN_02087A50 +.extern FUN_02087D00 +.extern FUN_02087E14 +.extern FUN_0208881C +.extern FUN_02088960 +.extern FUN_02088D40 +.extern FUN_02088DD8 +.extern FUN_02088DF0 +.extern FUN_02088DF8 +.extern FUN_02088EF8 +.extern FUN_02089D90 +.extern FUN_0208A0B8 +.extern FUN_0208A300 +.extern FUN_0208A320 +.extern FUN_0208A338 +.extern FUN_0208A9B8 +.extern FUN_0208ACEC +.extern FUN_0208AD80 +.extern FUN_0208AF80 +.extern FUN_0208AF94 +.extern FUN_0208AFA8 +.extern FUN_0208B05C +.extern FUN_0208B128 +.extern FUN_0208B4A0 +.extern FUN_02090CC8 +.extern FUN_02090DB8 +.extern FUN_02096B14 +.extern FUN_02096B78 +.extern FUN_02096CCC +.extern FUN_02096D2C +.extern FUN_02096DA0 +.extern FUN_02096F18 +.extern FUN_02096F80 +.extern FUN_02096FB0 +.extern FUN_0209700C +.extern FUN_020973B4 +.extern FUN_020ADA84 +.extern FUN_020ADA98 +.extern FUN_020ADAB0 +.extern FUN_020ADB18 +.extern FUN_020ADBE8 +.extern FUN_020ADC74 +.extern FUN_020ADDC0 +.extern FUN_020ADDC8 +.extern FUN_020ADDF0 +.extern FUN_020ADE2C +.extern FUN_020AE554 +.extern FUN_020AE5B0 +.extern FUN_020AE600 +.extern FUN_020AE638 +.extern FUN_020AE684 +.extern FUN_020AE82C +.extern FUN_020AE84C +.extern FUN_020AE868 +.extern FUN_020AE8CC +.extern FUN_020AE918 +.extern FUN_020AEB70 +.extern FUN_020AEC7C +.extern FUN_020AEC98 +.extern FUN_020AEE40 +.extern FUN_020AEEB8 +.extern FUN_020AEF1C +.extern FUN_020AF2E0 +.extern FUN_020AF2F4 +.extern FUN_020AF30C +.extern FUN_020AF894 +.extern FUN_020AF9C4 +.extern FUN_020AFA28 +.extern FUN_020AFA80 +.extern FUN_020AFBA8 +.extern FUN_020AFBFC +.extern FUN_020AFC04 +.extern FUN_020AFEB8 +.extern FUN_020AFFD8 +.extern FUN_020B0030 +.extern FUN_020B0088 +.extern FUN_020B00F0 +.extern FUN_020B0138 +.extern FUN_020B0180 +.extern FUN_020B0250 +.extern FUN_020B02C8 +.extern FUN_020B0448 +.extern FUN_020B0870 +.extern FUN_020B0BB0 +.extern FUN_020B0C7C +.extern FUN_020B0E34 +.extern FUN_020B0FC0 +.extern FUN_020B10E8 +.extern FUN_020B1240 +.extern FUN_020B1340 +.extern FUN_020B1528 +.extern FUN_020B1768 +.extern FUN_020B19C4 +.extern FUN_020B19DC +.extern FUN_020B1A14 +.extern FUN_020B1A24 +.extern FUN_020B1EA4 +.extern FUN_020B1EC4 +.extern FUN_020B1EE4 +.extern FUN_020B1EFC +.extern FUN_020B1F80 +.extern FUN_020B20C8 +.extern FUN_020B2194 +.extern FUN_020B224C +.extern FUN_020B23D8 +.extern FUN_020B242C +.extern FUN_020B2794 +.extern FUN_020B28B4 +.extern FUN_020B2A08 +.extern FUN_020B2B08 +.extern FUN_020B2B58 +.extern FUN_020B2D9C +.extern FUN_020B317C +.extern FUN_020B31F0 +.extern FUN_020B326C +.extern FUN_020B3334 +.extern FUN_020B3390 +.extern FUN_020B33A0 +.extern FUN_020B4358 +.extern FUN_020B43A4 +.extern FUN_020B442C +.extern FUN_020B4568 +.extern FUN_020B4F38 +.extern FUN_020B502C +.extern FUN_020B772C +.extern FUN_020B7790 +.extern FUN_020B7C58 +.extern FUN_020B7C78 +.extern FUN_020B7CDC +.extern FUN_020B7CE4 +.extern FUN_020B7CF0 +.extern FUN_020B7D28 +.extern FUN_020B7DFC +.extern FUN_020B7E10 +.extern FUN_020B7E1C +.extern FUN_020B80B4 +.extern FUN_020B844C +.extern FUN_020B8474 +.extern FUN_020B849C +.extern FUN_020BAC98 +.extern FUN_020BAFB8 +.extern FUN_020BB1C0 +.extern FUN_020BB394 +.extern FUN_020BB59C +.extern FUN_020BB7F4 +.extern FUN_020BC0FC +.extern FUN_020BC13C +.extern FUN_020BC2A0 +.extern FUN_020C0174 +.extern FUN_020C01A0 +.extern FUN_020C01D0 +.extern FUN_020C03B8 +.extern FUN_020C041C +.extern FUN_020C044C +.extern FUN_020C04DC +.extern FUN_020C0510 +.extern FUN_020C054C +.extern FUN_020C0670 +.extern FUN_020C0688 +.extern FUN_020C0DD4 +.extern FUN_020C0E14 +.extern FUN_020C0E7C +.extern FUN_020C0EA4 +.extern FUN_020C0EF4 +.extern FUN_020C0F30 +.extern FUN_020C0F50 +.extern FUN_020C0F68 +.extern FUN_020C0F80 +.extern FUN_020C0F8C +.extern FUN_020C0F9C +.extern FUN_020C0FDC +.extern FUN_020C1040 +.extern FUN_020C10A4 +.extern FUN_020C1148 +.extern FUN_020C1180 +.extern FUN_020C1E58 +.extern FUN_020C1E68 +.extern FUN_020C1EA4 +.extern FUN_020C1F54 +.extern FUN_020C1FA4 +.extern FUN_020C1FF0 +.extern FUN_020C20DC +.extern FUN_020C2104 +.extern FUN_020C217C +.extern FUN_020C226C +.extern FUN_020C22D0 +.extern FUN_020C23FC +.extern FUN_020C26F8 +.extern FUN_020C2828 +.extern FUN_020C290C +.extern FUN_020C2A94 +.extern FUN_020C35E0 +.extern FUN_020C360C +.extern FUN_020C3640 +.extern FUN_020C3674 +.extern FUN_020C36A8 +.extern FUN_020C3910 +.extern FUN_020C3980 +.extern FUN_020C39CC +.extern FUN_020C3EA4 +.extern FUN_020C3EB0 +.extern FUN_020C6034 +.extern FUN_020C605C +.extern FUN_021D74E0 +.extern FUN_021D76AC +.extern FUN_021D77C4 +.extern FUN_021D7800 +.extern FUN_021D78FC +.extern FUN_021D79B4 +.extern FUN_021D7CA4 +.extern FUN_021D7F8C +.extern FUN_021D8018 +.extern FUN_021D8164 +.extern FUN_021D82BC +.extern FUN_021D8320 +.extern FUN_021D836C +.extern FUN_021D83A8 +.extern FUN_021D83C0 +.extern FUN_021D844C +.extern FUN_021D8494 +.extern FUN_021D85FC +.extern FUN_021D8624 +.extern FUN_021D865C +.extern FUN_021D8758 +.extern FUN_021D8820 +.extern FUN_021D88E4 +.extern FUN_021D89CC +.extern FUN_021D8B64 +.extern FUN_021D8C24 +.extern FUN_021D917C +.extern FUN_021D959C +.extern FUN_021D967C +.extern FUN_021D96F4 +.extern FUN_021D9708 +.extern FUN_021D971C +.extern FUN_021D9820 +.extern FUN_021D99F8 +.extern FUN_021DA464 +.extern FUN_021DA4EC +.extern FUN_021DA54C +.extern FUN_021DA58C +.extern FUN_021DA5B8 +.extern FUN_021DA5C8 +.extern FUN_021DA5D0 +.extern FUN_021DA5D8 +.extern FUN_021DA7B4 +.extern FUN_021DAAA4 +.extern FUN_021DAC70 +.extern FUN_021DAE40 +.extern FUN_021DAED4 +.extern FUN_021DAF28 +.extern FUN_021DAF78 +.extern FUN_021DAF98 +.extern FUN_021DB030 +.extern FUN_021DB7E8 +.extern FUN_021DB858 +.extern FUN_021DC174 +.extern FUN_021DD6F0 +.extern FUN_021DD718 +.extern FUN_021DDB08 +.extern FUN_021E1374 +.extern FUN_021E1858 +.extern FUN_021E1994 +.extern FUN_021E1BF8 +.extern FUN_021E1C4C +.extern FUN_021E1C54 +.extern FUN_021E1ECC +.extern FUN_021E1F34 +.extern FUN_021E1F58 +.extern FUN_021E1F60 +.extern FUN_021E2464 +.extern FUN_021E2608 +.extern FUN_021E26CC +.extern FUN_021E27E8 +.extern FUN_021E288C +.extern FUN_021E28A0 +.extern FUN_021E2950 +.extern FUN_021E29B4 +.extern FUN_021E29C8 +.extern FUN_021E2A70 +.extern FUN_021E2AD4 +.extern FUN_021E2B80 +.extern FUN_021E2B9C +.extern FUN_021E2BB8 +.extern FUN_021E2BD0 +.extern FUN_021E2C24 +.extern FUN_021E2C58 +.extern FUN_021E2CBC +.extern FUN_021E32F0 +.extern FUN_021E331C +.extern FUN_021E3424 +.extern FUN_021E3444 +.extern FUN_021E495C +.extern FUN_021E4C54 +.extern FUN_021E4C60 +.extern FUN_021E4DE4 +.extern FUN_021E5614 +.extern FUN_021E57D4 +.extern FUN_021E5970 +.extern FUN_021E5B30 +.extern FUN_021E5FD8 +.extern FUN_021E5FE0 +.extern FUN_021E6410 +.extern FUN_021E643C +.extern FUN_021E6990 +.extern FUN_021E69BC +.extern FUN_021E6BF4 +.extern FUN_021E7030 +.extern FUN_021E70F0 +.extern FUN_021E7138 +.extern FUN_021E7184 +.extern FUN_021E71E8 +.extern FUN_021E7750 +.extern FUN_021E799C +.extern FUN_021E7AC0 +.extern FUN_021E7EA0 +.extern FUN_021E7EB0 +.extern FUN_021E7EC4 +.extern FUN_021E7EC8 +.extern FUN_021E7ED0 +.extern FUN_021E7ED8 +.extern FUN_021E7FBC +.extern FUN_021E8128 +.extern FUN_021E8130 +.extern FUN_021E8140 +.extern FUN_021E8144 +.extern FUN_021E8148 +.extern FUN_021E8158 +.extern FUN_021E81BC +.extern FUN_021E84F4 +.extern FUN_021E856C +.extern FUN_021E8588 +.extern FUN_021E85E4 +.extern FUN_021E85FC +.extern FUN_021EAE90 +.extern FUN_021EB044 +.extern FUN_021EC57C +.extern FUN_021EC71C +.extern FUN_021EC854 +.extern FUN_021EC864 +.extern FUN_021ECD64 +.extern FUN_021ECF14 +.extern FUN_021ED0CC +.extern FUN_021ED49C +.extern FUN_021ED4E0 +.extern FUN_021ED52C +.extern FUN_021ED5C4 +.extern FUN_021ED5EC +.extern FUN_021ED644 +.extern FUN_021ED940 +.extern FUN_021EDA48 +.extern FUN_021EDBC8 +.extern FUN_021EF5E0 +.extern FUN_021EF604 +.extern FUN_021EF620 +.extern FUN_021EF654 +.extern FUN_021EF824 +.extern FUN_021EF844 +.extern FUN_021EF8C8 +.extern FUN_021EF8DC +.extern FUN_021EFA9C +.extern FUN_021F02C4 +.extern FUN_021F1D8C +.extern FUN_021F1DC8 +.extern FUN_021F1DFC +.extern FUN_021F1EC0 +.extern FUN_021F1F78 +.extern FUN_021F2094 +.extern FUN_021F20D8 +.extern FUN_021F20F8 +.extern FUN_021F2AF4 +.extern FUN_021F2E0C +.extern FUN_021F2E28 +.extern FUN_021F2F48 +.extern FUN_021F2F6C +.extern FUN_021F3A18 +.extern FUN_021F3AB4 +.extern FUN_021F3B4C +.extern FUN_021F3B7C +.extern FUN_021F3DA4 +.extern FUN_021F44D8 +.extern FUN_021F4520 +.extern FUN_021F4568 +.extern FUN_021F4594 +.extern FUN_021F45E8 +.extern FUN_021F4608 +.extern FUN_021F4BD0 +.extern FUN_021F4C88 +.extern FUN_021F4D80 +.extern FUN_021F4DC8 +.extern FUN_021F4E7C +.extern FUN_021F57EC +.extern FUN_021F5C44 +.extern FUN_021F61DC +.extern FUN_021F61E8 +.extern FUN_02211E60 +.extern FUN_0222D5C0 +.extern FUN_0222DAEC +.extern FUN_0222DD1C +.extern FUN_0222DD38 +.extern FUN_0222E2BC +.extern FUN_0222E360 +.extern FUN_0222E3A0 +.extern FUN_0222E7E8 +.extern FUN_0222E874 +.extern FUN_0222ED34 +.extern FUN_0222EDBC +.extern FUN_0222F440 +.extern FUN_0222F480 +.extern FUN_0222F7E0 +.extern FUN_0222F990 +.extern FUN_022300D4 +.extern FUN_022300DC +.extern FUN_022300E4 +.extern FUN_022300E8 +.extern FUN_022300F4 +.extern FUN_02230100 +.extern FUN_0223010C +.extern FUN_02230118 +.extern FUN_02230124 +.extern FUN_02230F3C +.extern FUN_02230F70 +.extern FUN_02230F80 +.extern FUN_02231344 +.extern FUN_02231350 +.extern FUN_0223135C +.extern FUN_02231368 +.extern FUN_02231374 +.extern FUN_02239944 +.extern FUN_02239AAC +.extern FUN_0223CACC +.extern FUN_0223CB08 +.extern FUN_0223CCDC +.extern FUN_0223CD7C +.extern FUN_0223D3D0 +.extern FUN_0223D638 +.extern FUN_0223D648 +.extern FUN_0223DFB4 +.extern FUN_0223E060 +.extern FUN_0223E118 +.extern FUN_0223E154 +.extern FUN_0223E1A4 +.extern FUN_0223E1E0 +.extern FUN_0223E2AC +.extern FUN_0223E4A8 +.extern FUN_0223E4D4 +.extern FUN_0223E554 +.extern FUN_0223E6B8 +.extern FUN_0223E734 +.extern FUN_0223E7FC +.extern FUN_0223EB8C +.extern FUN_0223EF7C +.extern FUN_0223F4D8 +.extern FUN_0223F4F4 +.extern FUN_0223F8D8 +.extern FUN_0223FCE8 +.extern FUN_02240790 +.extern FUN_022407CC +.extern FUN_022407DC +.extern FUN_022407F8 +.extern FUN_02240834 +.extern FUN_02240844 +.extern FUN_0224089C +.extern FUN_022408FC +.extern FUN_022411F4 +.extern FUN_02241230 +.extern FUN_02241914 +.extern FUN_02242A38 +.extern FUN_02242BE0 +.extern FUN_0224312C +.extern FUN_022432E4 +.extern FUN_0224339C +.extern FUN_022433A8 +.extern FUN_022433B0 +.extern FUN_022433B8 +.extern FUN_022433F8 +.extern FUN_02243408 +.extern FUN_02243428 +.extern FUN_02243448 +.extern FUN_0224345C +.extern FUN_022434AC +.extern FUN_022434BC +.extern FUN_022434D0 +.extern FUN_02243694 +.extern FUN_022436C8 +.extern FUN_022436E8 +.extern FUN_02243780 +.extern FUN_02243838 +.extern FUN_022438DC +.extern FUN_022438E0 +.extern FUN_022438FC +.extern FUN_02243920 +.extern FUN_022439F8 +.extern FUN_02243AD8 +.extern FUN_02243BA8 +.extern FUN_02243C5C +.extern FUN_02243D3C +.extern FUN_02243DA0 +.extern FUN_02243DB8 +.extern FUN_02243DC0 +.extern FUN_02243DC4 +.extern FUN_02243DD8 +.extern FUN_02243DE0 +.extern FUN_02243E34 +.extern FUN_02243E74 +.extern FUN_02243F18 +.extern FUN_02243F50 +.extern FUN_02243F9C +.extern FUN_02244210 +.extern FUN_02244558 +.extern FUN_02244660 +.extern FUN_022446BC +.extern FUN_022446E0 +.extern FUN_022446FC +.extern FUN_02244758 +.extern FUN_02244770 +.extern FUN_02244824 +.extern FUN_0224484C +.extern FUN_02244D1C +.extern FUN_02244D20 +.extern FUN_02244D3C +.extern FUN_02244D40 +.extern FUN_02244D58 +.extern FUN_02244D98 +.extern FUN_02244DA0 +.extern FUN_02244DB0 +.extern FUN_02244DBC +.extern FUN_02244DC4 +.extern FUN_02244EF8 +.extern FUN_02244F18 +.extern FUN_02244F24 +.extern FUN_02244F2C +.extern FUN_02245088 +.extern FUN_02245114 +.extern FUN_02245190 +.extern FUN_02245198 +.extern FUN_022451F0 +.extern FUN_0224525C +.extern FUN_022452A4 +.extern FUN_02245324 +.extern FUN_02245340 +.extern FUN_02245358 +.extern FUN_0224566C +.extern FUN_022456E8 +.extern FUN_02245844 +.extern FUN_02245910 +.extern FUN_02245F1C +.extern FUN_02245F4C +.extern FUN_02245FA0 +.extern FUN_022461A4 +.extern FUN_022461B8 +.extern FUN_0224666C +.extern FUN_022466A0 +.extern FUN_022466AC +.extern FUN_02246F1C +.extern FUN_02247294 +.extern FUN_022472AC +.extern FUN_02247544 +.extern FUN_02247614 +.extern FUN_02247728 +.extern FUN_02247808 +.extern FUN_02247970 +.extern FUN_02247A34 +.extern FUN_022483BC +.extern FUN_022483E0 +.extern FUN_022483EC +.extern FUN_02248724 +.extern FUN_0224884C +.extern FUN_022488CC +.extern FUN_022488EC +.extern FUN_022488F4 +.extern FUN_022488FC +.extern FUN_0224891C +.extern FUN_02248B54 +.extern FUN_02248B58 +.extern FUN_02248B5C +.extern FUN_02248B60 +.extern FUN_02248B6C +.extern FUN_02248CC0 +.extern FUN_02248CD0 +.extern FUN_02248DF8 +.extern FUN_02248F70 +.extern FUN_02248FE0 +.extern FUN_02249038 +.extern FUN_022490A0 +.extern FUN_022491FC +.extern FUN_022494C8 +.extern FUN_02249508 +.extern FUN_02249668 +.extern FUN_022497E8 +.extern FUN_02249E6C +.extern FUN_02249E78 +.extern FUN_02249E84 +.extern FUN_02249E90 +.extern FUN_0224A310 +.extern FUN_0224A528 +.extern FUN_0224A7C8 +.extern FUN_0224ABAC +.extern FUN_0224B124 +.extern FUN_0224B2C4 +.extern FUN_0224B568 +.extern FUN_0224B818 +.extern FUN_0224B86C +.extern FUN_0224B9E0 +.extern FUN_0224BBEC +.extern FUN_0224BD90 +.extern FUN_0224C038 +.extern FUN_0224C27C +.extern FUN_0224C520 +.extern FUN_0224C678 +.extern FUN_0224C6E8 +.extern FUN_0224C6F4 +.extern FUN_0224C700 +.extern FUN_0224C8C8 +.extern FUN_0224CA2C +.extern FUN_0224CA54 +.extern FUN_0224CA58 +.extern FUN_0224CA88 +.extern FUN_0224CA94 +.extern FUN_0224CAA0 +.extern FUN_0224CAB4 +.extern FUN_0224CB30 +.extern FUN_0224CBB0 +.extern FUN_0224CC24 +.extern FUN_0224CECC +.extern FUN_0224D14C +.extern FUN_0224D2E0 +.extern FUN_0224D3E8 +.extern FUN_0224D70C +.extern FUN_0224D76C +.extern FUN_0224D79C +.extern FUN_0224DCB8 +.extern FUN_0224DD94 +.extern FUN_0224DDB8 +.extern FUN_0224E554 +.extern FUN_0224E764 +.extern FUN_0224E7C4 +.extern FUN_0224F12C +.extern FUN_02252534 +.extern FUN_02252538 +.extern FUN_022567E0 +.extern FX_Div +.extern FX_GetDivResult +.extern FX_GetDivResultFx64c +.extern FX_Init +.extern FX_InvAsync +.extern FX_Modf +.extern FX_Sqrt +.extern G2S_GetBG0CharPtr +.extern G2S_GetBG1CharPtr +.extern G2S_GetBG2CharPtr +.extern G2S_GetBG3CharPtr +.extern G2_GetBG0CharPtr +.extern G2_GetBG1CharPtr +.extern G2_GetBG2CharPtr +.extern G2_GetBG3CharPtr +.extern G2x_SetBGyAffine_ +.extern G2x_SetBlendAlpha_ +.extern G2x_SetBlendBrightness_ +.extern G3X_GetBoxTestResult +.extern G3X_GetClipMtx +.extern G3X_GetVectorMtx +.extern G3X_Init +.extern G3X_InitMtxStack +.extern G3X_ResetMtxStack +.extern G3X_SetClearColor +.extern G3X_SetFog +.extern G3_LoadMtx43 +.extern G3_MultMtx33 +.extern G3_MultMtx43 +.extern G3_RotX +.extern G3_RotY +.extern G3_RotZ +.extern G3i_LookAt_ +.extern G3i_OrthoW_ +.extern G3i_PerspectiveW_ +.extern GXS_BeginLoadBGExtPltt +.extern GXS_BeginLoadOBJExtPltt +.extern GXS_EndLoadBGExtPltt +.extern GXS_EndLoadOBJExtPltt +.extern GXS_LoadBG0Char +.extern GXS_LoadBG0Scr +.extern GXS_LoadBG1Char +.extern GXS_LoadBG1Scr +.extern GXS_LoadBG2Char +.extern GXS_LoadBG2Scr +.extern GXS_LoadBG3Char +.extern GXS_LoadBG3Scr +.extern GXS_LoadBGExtPltt +.extern GXS_LoadBGPltt +.extern GXS_LoadOAM +.extern GXS_LoadOBJ +.extern GXS_LoadOBJExtPltt +.extern GXS_LoadOBJPltt +.extern GXS_SetGraphicsMode +.extern GX_BeginLoadBGExtPltt +.extern GX_BeginLoadClearImage +.extern GX_BeginLoadOBJExtPltt +.extern GX_BeginLoadTex +.extern GX_BeginLoadTexPltt +.extern GX_DisableBankForLCDC +.extern GX_DispOff +.extern GX_DispOn +.extern GX_EndLoadBGExtPltt +.extern GX_EndLoadClearImage +.extern GX_EndLoadOBJExtPltt +.extern GX_EndLoadTex +.extern GX_EndLoadTexPltt +.extern GX_GetBankForOBJ +.extern GX_GetBankForOBJExtPltt +.extern GX_GetBankForSubOBJ +.extern GX_GetBankForSubOBJExtPltt +.extern GX_HBlankIntr +.extern GX_Init +.extern GX_LoadBG0Char +.extern GX_LoadBG0Scr +.extern GX_LoadBG1Char +.extern GX_LoadBG1Scr +.extern GX_LoadBG2Char +.extern GX_LoadBG2Scr +.extern GX_LoadBG3Char +.extern GX_LoadBG3Scr +.extern GX_LoadBGExtPltt +.extern GX_LoadBGPltt +.extern GX_LoadClearImageColor +.extern GX_LoadClearImageDepth +.extern GX_LoadOAM +.extern GX_LoadOBJ +.extern GX_LoadOBJExtPltt +.extern GX_LoadOBJPltt +.extern GX_LoadTex +.extern GX_LoadTexPltt +.extern GX_ResetBankForBG +.extern GX_ResetBankForBGExtPltt +.extern GX_ResetBankForOBJ +.extern GX_ResetBankForOBJExtPltt +.extern GX_ResetBankForSubBG +.extern GX_ResetBankForSubOBJ +.extern GX_ResetBankForTex +.extern GX_ResetBankForTexPltt +.extern GX_SetBankForBG +.extern GX_SetBankForBGExtPltt +.extern GX_SetBankForLCDC +.extern GX_SetBankForOBJ +.extern GX_SetBankForOBJExtPltt +.extern GX_SetBankForSubBG +.extern GX_SetBankForSubBGExtPltt +.extern GX_SetBankForSubOBJ +.extern GX_SetBankForSubOBJExtPltt +.extern GX_SetBankForTex +.extern GX_SetBankForTexPltt +.extern GX_SetGraphicsMode +.extern GX_VBlankIntr +.extern GXx_SetMasterBrightness_ +.extern IC_InvalidateAll +.extern IC_InvalidateRange +.extern InitGraphicMemory +.extern InitScriptContext +.extern InitSystemForTheGame +.extern LoadFromNARC +.extern LoadFromNARC_7 +.extern LoadFromNarc_2 +.extern LoadPlayerDataAddress +.extern MATH_CalcCRC16 +.extern MATH_CalcCRC16CCITT +.extern MATH_CalcCRC32 +.extern MATH_CalcCRC8 +.extern MATH_CalcHMACSHA1 +.extern MATH_CalcMD5 +.extern MATH_CalcSHA1 +.extern MATH_CountPopulation +.extern MATH_MD5GetHash +.extern MATH_MD5Init +.extern MATH_MD5Update +.extern MATH_SHA1GetHash +.extern MATH_SHA1Init +.extern MATH_SHA1Update +.extern MATHi_CRC16InitTable +.extern MATHi_CRC16InitTableRev +.extern MATHi_CRC32InitTableRev +.extern MATHi_CRC8InitTable +.extern MATHi_CalcHMAC +.extern MIC_DoSamplingAsync +.extern MIC_Init +.extern MIC_StartAutoSampling +.extern MIC_StopAutoSampling +.extern MI_Copy36B +.extern MI_Copy48B +.extern MI_Copy64B +.extern MI_CpuCopy8 +.extern MI_CpuFill8 +.extern MI_DmaCopy16 +.extern MI_DmaCopy32 +.extern MI_DmaCopy32Async +.extern MI_DmaFill32 +.extern MI_DmaFill32Async +.extern MI_HBlankDmaCopy16 +.extern MI_HBlankDmaCopy32 +.extern MI_Init +.extern MI_SendGXCommandAsync +.extern MI_SendGXCommandAsyncFast +.extern MI_StopDma +.extern MI_SwapWord +.extern MI_UncompressLZ8 +.extern MI_WaitDma +.extern MI_Zero36B +.extern MIi_CardDmaCopy32 +.extern MIi_CheckDma0SourceAddress +.extern MIi_CpuClear16 +.extern MIi_CpuClear32 +.extern MIi_CpuClearFast +.extern MIi_CpuCopy16 +.extern MIi_CpuCopy32 +.extern MIi_CpuCopyFast +.extern MIi_CpuSend32 +.extern MIi_DmaSetParams +.extern MIi_DmaSetParams_noInt +.extern MIi_DmaSetParams_wait +.extern MIi_DmaSetParams_wait_noInt +.extern MIi_UncompressBackward +.extern MTX_Concat33 +.extern MTX_Concat43 +.extern MTX_Identity33_ +.extern MTX_Identity43_ +.extern MTX_MultVec33 +.extern MTX_MultVec43 +.extern MTX_RotX33_ +.extern MTX_RotY33_ +.extern MTX_RotZ33_ +.extern MTX_Scale43_ +.extern NitroMain +.extern OS_AllocFromArenaHi +.extern OS_AllocFromArenaLo +.extern OS_AllocFromHeap +.extern OS_CancelAlarm +.extern OS_CreateAlarm +.extern OS_CreateThread +.extern OS_DestroyThread +.extern OS_DisableInterrupts +.extern OS_DisableIrqMask +.extern OS_DisableScheduler +.extern OS_EnableIrqMask +.extern OS_EnableScheduler +.extern OS_ExitThread +.extern OS_FreeToHeap +.extern OS_GetCpsrIrq +.extern OS_GetDTCMAddress +.extern OS_GetInitArenaHi +.extern OS_GetInitArenaLo +.extern OS_GetIrqFunction +.extern OS_GetLockID +.extern OS_GetLowEntropyData +.extern OS_GetMacAddress +.extern OS_GetOwnerInfo +.extern OS_GetOwnerRtcOffset +.extern OS_GetProcMode +.extern OS_GetThreadPriority +.extern OS_GetTick +.extern OS_GetTickLo +.extern OS_Halt +.extern OS_IRQTable +.extern OS_Init +.extern OS_InitAlarm +.extern OS_InitMessageQueue +.extern OS_InitMutex +.extern OS_InitTick +.extern OS_IrqDummy +.extern OS_IrqHandler +.extern OS_IsAlarmAvailable +.extern OS_IsRunOnEmulator +.extern OS_IsThreadTerminated +.extern OS_IsTickAvailable +.extern OS_JamMessage +.extern OS_JoinThread +.extern OS_LockCartridge +.extern OS_LockMutex +.extern OS_ReadMessage +.extern OS_ReadOwnerOfLockWord +.extern OS_ReceiveMessage +.extern OS_ReleaseLockID +.extern OS_RescheduleThread +.extern OS_ResetRequestIrqMask +.extern OS_ResetSystem +.extern OS_RestoreInterrupts +.extern OS_SNPrintf +.extern OS_SendMessage +.extern OS_SetAlarm +.extern OS_SetArenaHi +.extern OS_SetArenaLo +.extern OS_SetDPermissionsForProtectionRegion +.extern OS_SetIrqFunction +.extern OS_SetIrqMask +.extern OS_SetThreadPriority +.extern OS_Sleep +.extern OS_SleepThread +.extern OS_SpinWait +.extern OS_Terminate +.extern OS_TryLockCard +.extern OS_TryLockCartridge +.extern OS_TryLockMutex +.extern OS_UnlockCard +.extern OS_UnlockCartridge +.extern OS_UnlockCartridge2 +.extern OS_UnlockMutex +.extern OS_WaitIrq +.extern OS_WakeupThread +.extern OS_WakeupThreadDirect +.extern OS_YieldThread +.extern OSi_DoResetSystem +.extern OSi_EnterDmaCallback +.extern OSi_IrqDma0 +.extern OSi_IrqDma1 +.extern OSi_IrqDma2 +.extern OSi_IrqDma3 +.extern OSi_IrqThreadQueue +.extern OSi_IrqTimer0 +.extern OSi_IrqTimer1 +.extern OSi_IrqTimer2 +.extern OSi_IrqTimer3 +.extern OSi_IsResetOccurred +.extern OSi_MainExArenaEnabled +.extern OSi_ThreadInfo +.extern OSi_TryLockVram +.extern OSi_UnlockVram +.extern PM_AppendPostSleepCallback +.extern PM_DeletePostSleepCallback +.extern PM_DeletePreSleepCallback +.extern PM_ForceToPowerOff +.extern PM_GetBackLight +.extern PM_GetLCDPower +.extern PM_GoSleepMode +.extern PM_Init +.extern PM_PrependPreSleepCallback +.extern PM_SetAmp +.extern PM_SetAmpGain +.extern PM_SetBackLight +.extern PM_SetLCDPower +.extern PMi_Lock +.extern PMi_ReadRegister +.extern PMi_SendPxiData +.extern PMi_SendSleepStart +.extern PMi_SetLED +.extern PMi_SetLEDAsync +.extern PMi_WaitBusy +.extern PXI_Init +.extern PXI_IsCallbackReady +.extern PXI_SendWordByFifo +.extern PXI_SetFifoRecvCallback +.extern PXIi_HandlerRecvFifoNotEmpty +.extern ProcessBlock +.extern RTC_ConvertDateTimeToSecond +.extern RTC_ConvertDateToDay +.extern RTC_ConvertSecondToDateTime +.extern RTC_GetDate +.extern RTC_GetDateTimeAsync +.extern RTC_GetTime +.extern RTC_Init +.extern RunScriptCommand +.extern SDK_AUTOLOAD_DTCM_START +.extern SDK_AUTOLOAD_LIST +.extern SDK_AUTOLOAD_LIST_END +.extern SDK_AUTOLOAD_START +.extern SDK_MAIN_ARENA_LO +.extern SDK_SECTION_ARENA_DTCM_START +.extern SDK_SECTION_ARENA_EX_START +.extern SDK_SECTION_ARENA_ITCM_START +.extern SDK_STATIC_BSS_END +.extern SDK_STATIC_BSS_START +.extern SND_AssignWaveArc +.extern SND_CalcChannelVolume +.extern SND_DestroyBank +.extern SND_DestroyWaveArc +.extern SND_FlushCommand +.extern SND_GetChannelStatus +.extern SND_GetCurrentCommandTag +.extern SND_GetFirstInstDataPos +.extern SND_GetNextInstData +.extern SND_GetPlayerStatus +.extern SND_GetPlayerTickCounter +.extern SND_GetWaveDataAddress +.extern SND_GetWaveDataCount +.extern SND_Init +.extern SND_InvalidateBankData +.extern SND_InvalidateSeqData +.extern SND_InvalidateWaveData +.extern SND_IsFinishedCommandTag +.extern SND_LockChannel +.extern SND_PauseSeq +.extern SND_PrepareSeq +.extern SND_RecvCommandReply +.extern SND_ResetMasterPan +.extern SND_SetChannelPan +.extern SND_SetChannelTimer +.extern SND_SetChannelVolume +.extern SND_SetMasterPan +.extern SND_SetOutputSelector +.extern SND_SetPlayerChannelPriority +.extern SND_SetPlayerVolume +.extern SND_SetTrackAllocatableChannel +.extern SND_SetTrackPan +.extern SND_SetTrackPitch +.extern SND_SetWaveDataAddress +.extern SND_SetupAlarm +.extern SND_SetupCapture +.extern SND_SetupChannelPcm +.extern SND_StartPreparedSeq +.extern SND_StartTimer +.extern SND_StopSeq +.extern SND_StopTimer +.extern SND_UnlockChannel +.extern SND_WaitForCommandProc +.extern STD_CopyLString +.extern ScriptCall +.extern ScriptJump +.extern ScriptReadHalfword +.extern ScriptReadWord +.extern ScriptReturn +.extern SetupBytecodeScript +.extern SetupNativeScript +.extern StopScript +.extern StringCopy +.extern StringCopyN +.extern StringFillEOS +.extern StringLength +.extern StringNotEqual +.extern StringNotEqualN +.extern TP_CheckError +.extern TP_GetCalibratedPoint +.extern TP_GetLatestIndexInAuto +.extern TP_GetLatestRawPointInAuto +.extern TP_GetUserInfo +.extern TP_Init +.extern TP_RequestAutoSamplingStartAsync +.extern TP_RequestAutoSamplingStopAsync +.extern TP_RequestSamplingAsync +.extern TP_SetCalibrateParam +.extern TP_WaitBusy +.extern TP_WaitRawResult +.extern VEC_Add +.extern VEC_CrossProduct +.extern VEC_DotProduct +.extern VEC_Fx16CrossProduct +.extern VEC_Fx16DotProduct +.extern VEC_Fx16Normalize +.extern VEC_Mag +.extern VEC_Normalize +.extern VEC_Subtract +.extern WM_Disable +.extern WM_Disconnect +.extern WM_Enable +.extern WM_End +.extern WM_EndDCF +.extern WM_EndMP +.extern WM_EndParent +.extern WM_EndScan +.extern WM_Finish +.extern WM_GetAllowedChannel +.extern WM_GetDispersionBeaconPeriod +.extern WM_GetDispersionScanPeriod +.extern WM_GetLinkLevel +.extern WM_Init +.extern WM_Initialize +.extern WM_MeasureChannel +.extern WM_PowerOff +.extern WM_PowerOn +.extern WM_Reset +.extern WM_SetBeaconIndication +.extern WM_SetDCFData +.extern WM_SetEntry +.extern WM_SetGameInfo +.extern WM_SetIndCallback +.extern WM_SetLifeTime +.extern WM_SetMPDataToPortEx +.extern WM_SetParentParameter +.extern WM_SetPortCallback +.extern WM_SetWEPKeyEx +.extern WM_StartConnectEx +.extern WM_StartDCF +.extern WM_StartMP +.extern WM_StartParent +.extern WM_StartScan +.extern WM_StartScanEx +.extern WMi_GetStatusAddress +.extern __call_static_initializers +.extern __destroy_global_chain +.extern _ddiv +.extern _fadd +.extern _fdiv +.extern _feq +.extern _ffix +.extern _ffixu +.extern _fflt +.extern _ffltu +.extern _fgr +.extern _fmul +.extern _fp_init +.extern _fsub +.extern _ll_mod +.extern _ll_mul +.extern _ll_sdiv +.extern _ll_shl +.extern _ll_udiv +.extern _s32_div_f +.extern _u32_div_f +.extern _u32_div_not_0_f +.extern abs +.extern cardi_common +.extern gScriptCmdTable +.extern memcmp +.extern memcpy +.extern memmove +.extern strcmp +.extern strcpy +.extern strlen +.extern tempName_NNS_FndAllocFromExpHeapEx +.extern tempName_NNS_FndCreateExpHeapEx +.extern thunk_FUN_02096e4c +.extern thunk_FUN_02097190 +.extern thunk_FUN_020adc8c +.extern thunk_FUN_020adc8c_2 +.extern thunk_FUN_020afda0 +.extern thunk_FUN_020afda0_2 +.extern thunk_FUN_020b5040 +.extern Unk_0210683C +.extern Unk_02106840 +.extern Unk_02106900 +.extern Unk_02106A00 +.extern Unk_02106A04 +.extern OSi_IrqCallbackInfo +.extern OSi_IrqCallbackInfoIndex +.extern SDK_SYS_STACKSIZE +.extern SDK_IRQ_STACKSIZE +.extern OSi_IsThreadInitialized +.extern OSi_LauncherThread +.extern OSi_CurrentThreadPtr +.extern OSi_IdleThread +.extern OSi_IdleThreadStack +.extern OSi_RescheduleCount +.extern OSi_SystemCallbackInSwitchThread +.extern OSi_Initialized +.extern OSi_HeapInfo +.extern OSi_DebuggerHandler +.extern OSi_ExContext +.extern OSi_UserExceptionHandler +.extern OSi_UserExceptionHandlerArg +.extern OSi_TimerReserved +.extern OSi_UseTick +.extern OSi_NeedResetTimer +.extern OSi_TickCounter +.extern OSi_UseAlarm +.extern OSi_AlarmQueue +.extern OSi_UseVAlarm +.extern OSi_PreviousVCount +.extern OSi_VFrameCount +.extern OSi_VAlarmQueue +.extern OSi_IsInitReset +.extern OSi_vramExclusive +.extern OSi_vramLockId +.extern OSi_ThreadIdCount +.extern OSi_StackForDestructor diff --git a/arm7/undefined_syms.txt b/arm7/undefined_syms.txt new file mode 100644 index 000000000..075d22a90 --- /dev/null +++ b/arm7/undefined_syms.txt @@ -0,0 +1,506 @@ +SDK_SYS_STACKSIZE = 0x00000000; +CONST_34 = 0x00000034; +CONST_3F = 0x0000003F; +SDK_IRQ_STACKSIZE = 0x00000400; + +// .data +// OS +OSi_IrqCallbackInfoIndex = 0x02106818; +// DGT +Unk_0210683C = 0x0210683C; +Unk_02106840 = 0x02106840; +Unk_02106900 = 0x02106900; +Unk_02106A00 = 0x02106A00; +Unk_02106A04 = 0x02106A04; + +// .bss +gBacklightTop = 0x02106FA0; +gBacklightTop_2 = 0x02106FA0; +gUnknown2106FB8 = 0x02106FB8; +gUnknown21C48B8 = 0x021C48B8; +gUnk021C4918 = 0x021C4918; +OSi_IrqCallbackInfo = 0x021D341C; +isInitialized = 0x021D347C; +OSi_StackForDestructor = 0x021D3480; +OSi_RescheduleCount = 0x021D3484; +OSi_ThreadIdCount = 0x021D3488; +OSi_SystemCallbackInSwitchThread = 0x021D348C; +OSi_CurrentThreadPtr = 0x021D3490; +OSi_IsThreadInitialized = 0x021D3494; +OSi_ThreadInfo = 0x021D3498; +OSi_IdleThread = 0x021D34A8; +OSi_LauncherThread = 0x021D3568; +OSi_IdleThreadStack = 0x021D3628; +OSi_Initialized = 0x021D36F0; +OSi_MainExArenaEnabled = 0x021D36F4; +OSi_HeapInfo = 0x021D36F8; +OSi_UserExceptionHandler = 0x021D371C; +OSi_UserExceptionHandlerArg = 0x21D3720; +OSi_DebuggerHandler = 0x021D3724; +OSi_ExContext = 0x021D3728; +OSi_TimerReserved = 0x021D37A8; +OSi_UseTick = 0x021D37AC; +OSi_NeedResetTimer = 0x021D37B0; +OSi_TickCounter = 0x021D37B4; +OSi_UseAlarm = 0x021D37BC; +OSi_AlarmQueue = 0x021D37C0; +OSi_UseVAlarm = 0x021D37C8; +OSi_PreviousVCount = 0x021D37CC; +OSi_VFrameCount = 0x021D37D0; +OSi_VAlarmQueue = 0x021D37D4; +OSi_IsInitReset = 0x021D37DC; +OSi_IsResetOccurred = 0x021D37E0; +OSi_vramExclusive = 0x021D37E4; +OSi_vramLockId = 0x021D37E8; +cardi_common = 0x021D55C0; + +// Overlay +FUN_021D74E0 = 0x021D74E0; +FUN_021D76AC = 0x021D76AC; +gUnk021D76C8 = 0x021D76C8; +FUN_021D77C4 = 0x021D77C4; +FUN_021D7800 = 0x021D7800; +FUN_021D78FC = 0x021D78FC; +FUN_021D79B4 = 0x021D79B4; +FUN_021D7CA4 = 0x021D7CA4; +FUN_021D7F8C = 0x021D7F8C; +FUN_021D8018 = 0x021D8018; +FUN_021D8164 = 0x021D8164; +FUN_021D82BC = 0x021D82BC; +FUN_021D8320 = 0x021D8320; +FUN_021D836C = 0x021D836C; +FUN_021D83A8 = 0x021D83A8; +FUN_021D83C0 = 0x021D83C0; +FUN_021D844C = 0x021D844C; +FUN_021D8494 = 0x021D8494; +FUN_021D85FC = 0x021D85FC; +FUN_021D8624 = 0x021D8624; +FUN_021D865C = 0x021D865C; +FUN_021D8758 = 0x021D8758; +FUN_021D8820 = 0x021D8820; +FUN_021D88E4 = 0x021D88E4; +FUN_021D89CC = 0x021D89CC; +FUN_021D8B64 = 0x021D8B64; +FUN_021D8C24 = 0x021D8C24; +FUN_021D917C = 0x021D917C; +FUN_021D959C = 0x021D959C; +FUN_021D967C = 0x021D967C; +FUN_021D96F4 = 0x021D96F4; +FUN_021D9708 = 0x021D9708; +FUN_021D971C = 0x021D971C; +FUN_021D9820 = 0x021D9820; +FUN_021D99F8 = 0x021D99F8; +FUN_021DA464 = 0x021DA464; +FUN_021DA4EC = 0x021DA4EC; +FUN_021DA54C = 0x021DA54C; +FUN_021DA58C = 0x021DA58C; +FUN_021DA5B8 = 0x021DA5B8; +FUN_021DA5C8 = 0x021DA5C8; +FUN_021DA5D0 = 0x021DA5D0; +FUN_021DA5D8 = 0x021DA5D8; +FUN_021DA7B4 = 0x021DA7B4; +FUN_021DAAA4 = 0x021DAAA4; +FUN_021DAC70 = 0x021DAC70; +FUN_021DAE40 = 0x021DAE40; +FUN_021DAED4 = 0x021DAED4; +FUN_021DAF28 = 0x021DAF28; +FUN_021DAF78 = 0x021DAF78; +FUN_021DAF98 = 0x021DAF98; +FUN_021DB030 = 0x021DB030; +FUN_021DB7E8 = 0x021DB7E8; +FUN_021DB858 = 0x021DB858; +gUnk021DBE18 = 0x021DBE18; +FUN_021DC174 = 0x021DC174; +FUN_021DD6F0 = 0x021DD6F0; +FUN_021DD718 = 0x021DD718; +FUN_021DDB08 = 0x021DDB08; +FUN_021E1374 = 0x021E1374; +FUN_021E1858 = 0x021E1858; +FUN_021E1994 = 0x021E1994; +FUN_021E1BF8 = 0x021E1BF8; +FUN_021E1C4C = 0x021E1C4C; +FUN_021E1C54 = 0x021E1C54; +FUN_021E1ECC = 0x021E1ECC; +FUN_021E1F34 = 0x021E1F34; +FUN_021E1F58 = 0x021E1F58; +FUN_021E1F60 = 0x021E1F60; +FUN_021E2464 = 0x021E2464; +FUN_021E2608 = 0x021E2608; +FUN_021E26CC = 0x021E26CC; +FUN_021E27E8 = 0x021E27E8; +FUN_021E288C = 0x021E288C; +FUN_021E28A0 = 0x021E28A0; +FUN_021E2950 = 0x021E2950; +FUN_021E29B4 = 0x021E29B4; +FUN_021E29C8 = 0x021E29C8; +FUN_021E2A70 = 0x021E2A70; +FUN_021E2AD4 = 0x021E2AD4; +FUN_021E2B80 = 0x021E2B80; +FUN_021E2B9C = 0x021E2B9C; +FUN_021E2BB8 = 0x021E2BB8; +FUN_021E2BD0 = 0x021E2BD0; +FUN_021E2C24 = 0x021E2C24; +FUN_021E2C58 = 0x021E2C58; +FUN_021E2CBC = 0x021E2CBC; +FUN_021E32F0 = 0x021E32F0; +FUN_021E331C = 0x021E331C; +FUN_021E3424 = 0x021E3424; +FUN_021E3444 = 0x021E3444; +FUN_021E495C = 0x021E495C; +FUN_021E4C54 = 0x021E4C54; +FUN_021E4C60 = 0x021E4C60; +FUN_021E4DE4 = 0x021E4DE4; +FUN_021E5614 = 0x021E5614; +FUN_021E57D4 = 0x021E57D4; +FUN_021E5970 = 0x021E5970; +FUN_021E5B30 = 0x021E5B30; +FUN_021E5FD8 = 0x021E5FD8; +FUN_021E5FE0 = 0x021E5FE0; +FUN_021E6410 = 0x021E6410; +FUN_021E643C = 0x021E643C; +FUN_021E6990 = 0x021E6990; +FUN_021E69BC = 0x021E69BC; +FUN_021E6BF4 = 0x021E6BF4; +FUN_021E7030 = 0x021E7030; +FUN_021E70F0 = 0x021E70F0; +FUN_021E7138 = 0x021E7138; +FUN_021E7184 = 0x021E7184; +FUN_021E71E8 = 0x021E71E8; +FUN_021E7750 = 0x021E7750; +FUN_021E799C = 0x021E799C; +FUN_021E7AC0 = 0x021E7AC0; +FUN_021E7EA0 = 0x021E7EA0; +FUN_021E7EB0 = 0x021E7EB0; +FUN_021E7EC4 = 0x021E7EC4; +FUN_021E7EC8 = 0x021E7EC8; +FUN_021E7ED0 = 0x021E7ED0; +FUN_021E7ED8 = 0x021E7ED8; +FUN_021E7FBC = 0x021E7FBC; +FUN_021E8128 = 0x021E8128; +FUN_021E8130 = 0x021E8130; +FUN_021E8140 = 0x021E8140; +FUN_021E8144 = 0x021E8144; +FUN_021E8148 = 0x021E8148; +FUN_021E8158 = 0x021E8158; +FUN_021E81BC = 0x021E81BC; +FUN_021E84F4 = 0x021E84F4; +FUN_021E856C = 0x021E856C; +FUN_021E8588 = 0x021E8588; +FUN_021E85E4 = 0x021E85E4; +FUN_021E85FC = 0x021E85FC; +FUN_021EAE90 = 0x021EAE90; +FUN_021EB044 = 0x021EB044; +FUN_021EC57C = 0x021EC57C; +FUN_021EC71C = 0x021EC71C; +FUN_021EC854 = 0x021EC854; +FUN_021EC864 = 0x021EC864; +FUN_021ECD64 = 0x021ECD64; +FUN_021ECF14 = 0x021ECF14; +FUN_021ED0CC = 0x021ED0CC; +FUN_021ED49C = 0x021ED49C; +FUN_021ED4E0 = 0x021ED4E0; +FUN_021ED52C = 0x021ED52C; +FUN_021ED5C4 = 0x021ED5C4; +FUN_021ED5EC = 0x021ED5EC; +FUN_021ED644 = 0x021ED644; +FUN_021ED940 = 0x021ED940; +FUN_021EDA48 = 0x021EDA48; +FUN_021EDBC8 = 0x021EDBC8; +FUN_021EF5E0 = 0x021EF5E0; +FUN_021EF604 = 0x021EF604; +FUN_021EF620 = 0x021EF620; +FUN_021EF654 = 0x021EF654; +FUN_021EF824 = 0x021EF824; +FUN_021EF844 = 0x021EF844; +FUN_021EF8C8 = 0x021EF8C8; +FUN_021EF8DC = 0x021EF8DC; +FUN_021EFA9C = 0x021EFA9C; +FUN_021F02C4 = 0x021F02C4; +FUN_021F1D8C = 0x021F1D8C; +FUN_021F1DC8 = 0x021F1DC8; +FUN_021F1DFC = 0x021F1DFC; +FUN_021F1EC0 = 0x021F1EC0; +FUN_021F1F78 = 0x021F1F78; +FUN_021F2094 = 0x021F2094; +FUN_021F20D8 = 0x021F20D8; +FUN_021F20F8 = 0x021F20F8; +FUN_021F2AF4 = 0x021F2AF4; +FUN_021F2E0C = 0x021F2E0C; +FUN_021F2E28 = 0x021F2E28; +FUN_021F2F48 = 0x021F2F48; +FUN_021F2F6C = 0x021F2F6C; +FUN_021F3A18 = 0x021F3A18; +FUN_021F3AB4 = 0x021F3AB4; +FUN_021F3B4C = 0x021F3B4C; +FUN_021F3B7C = 0x021F3B7C; +FUN_021F3DA4 = 0x021F3DA4; +FUN_021F44D8 = 0x021F44D8; +FUN_021F4520 = 0x021F4520; +FUN_021F4568 = 0x021F4568; +FUN_021F4594 = 0x021F4594; +FUN_021F45E8 = 0x021F45E8; +FUN_021F4608 = 0x021F4608; +FUN_021F4BD0 = 0x021F4BD0; +FUN_021F4C88 = 0x021F4C88; +FUN_021F4D80 = 0x021F4D80; +FUN_021F4DC8 = 0x021F4DC8; +FUN_021F4E7C = 0x021F4E7C; +FUN_021F57EC = 0x021F57EC; +FUN_021F5C44 = 0x021F5C44; +FUN_021F61DC = 0x021F61DC; +FUN_021F61E8 = 0x021F61E8; +FUN_02211E60 = 0x02211E60; +FUN_0222D5C0 = 0x0222D5C0; +FUN_0222DAEC = 0x0222DAEC; +FUN_0222DD1C = 0x0222DD1C; +FUN_0222DD38 = 0x0222DD38; +FUN_0222E2BC = 0x0222E2BC; +FUN_0222E360 = 0x0222E360; +FUN_0222E3A0 = 0x0222E3A0; +FUN_0222E7E8 = 0x0222E7E8; +FUN_0222E874 = 0x0222E874; +FUN_0222ED34 = 0x0222ED34; +FUN_0222EDBC = 0x0222EDBC; +FUN_0222F440 = 0x0222F440; +FUN_0222F480 = 0x0222F480; +FUN_0222F7E0 = 0x0222F7E0; +FUN_0222F990 = 0x0222F990; +FUN_022300D4 = 0x022300D4; +FUN_022300DC = 0x022300DC; +FUN_022300E4 = 0x022300E4; +FUN_022300E8 = 0x022300E8; +FUN_022300F4 = 0x022300F4; +FUN_02230100 = 0x02230100; +FUN_0223010C = 0x0223010C; +FUN_02230118 = 0x02230118; +FUN_02230124 = 0x02230124; +FUN_02230F3C = 0x02230F3C; +FUN_02230F70 = 0x02230F70; +FUN_02230F80 = 0x02230F80; +FUN_02231344 = 0x02231344; +FUN_02231350 = 0x02231350; +FUN_0223135C = 0x0223135C; +FUN_02231368 = 0x02231368; +FUN_02231374 = 0x02231374; +FUN_02239944 = 0x02239944; +FUN_02239AAC = 0x02239AAC; +FUN_0223CACC = 0x0223CACC; +FUN_0223CB08 = 0x0223CB08; +FUN_0223CCDC = 0x0223CCDC; +FUN_0223CD7C = 0x0223CD7C; +FUN_0223D3D0 = 0x0223D3D0; +FUN_0223D638 = 0x0223D638; +FUN_0223D648 = 0x0223D648; +FUN_0223DFB4 = 0x0223DFB4; +FUN_0223E060 = 0x0223E060; +FUN_0223E118 = 0x0223E118; +FUN_0223E154 = 0x0223E154; +FUN_0223E1A4 = 0x0223E1A4; +FUN_0223E1E0 = 0x0223E1E0; +FUN_0223E2AC = 0x0223E2AC; +FUN_0223E4A8 = 0x0223E4A8; +FUN_0223E4D4 = 0x0223E4D4; +FUN_0223E554 = 0x0223E554; +FUN_0223E6B8 = 0x0223E6B8; +FUN_0223E734 = 0x0223E734; +FUN_0223E7FC = 0x0223E7FC; +FUN_0223EB8C = 0x0223EB8C; +FUN_0223EF7C = 0x0223EF7C; +FUN_0223F4D8 = 0x0223F4D8; +FUN_0223F4F4 = 0x0223F4F4; +FUN_0223F8D8 = 0x0223F8D8; +FUN_0223FCE8 = 0x0223FCE8; +FUN_02240790 = 0x02240790; +FUN_022407CC = 0x022407CC; +FUN_022407DC = 0x022407DC; +FUN_022407F8 = 0x022407F8; +FUN_02240834 = 0x02240834; +FUN_02240844 = 0x02240844; +FUN_0224089C = 0x0224089C; +FUN_022408FC = 0x022408FC; +FUN_022411F4 = 0x022411F4; +FUN_02241230 = 0x02241230; +FUN_02241914 = 0x02241914; +FUN_02242A38 = 0x02242A38; +FUN_02242BE0 = 0x02242BE0; +FUN_0224312C = 0x0224312C; +FUN_022432E4 = 0x022432E4; +FUN_0224339C = 0x0224339C; +FUN_022433A8 = 0x022433A8; +FUN_022433B0 = 0x022433B0; +FUN_022433B8 = 0x022433B8; +FUN_022433F8 = 0x022433F8; +FUN_02243408 = 0x02243408; +FUN_02243428 = 0x02243428; +FUN_02243448 = 0x02243448; +FUN_0224345C = 0x0224345C; +FUN_022434AC = 0x022434AC; +FUN_022434BC = 0x022434BC; +FUN_022434D0 = 0x022434D0; +FUN_02243694 = 0x02243694; +FUN_022436C8 = 0x022436C8; +FUN_022436E8 = 0x022436E8; +FUN_02243780 = 0x02243780; +FUN_02243838 = 0x02243838; +FUN_022438DC = 0x022438DC; +FUN_022438E0 = 0x022438E0; +FUN_022438FC = 0x022438FC; +FUN_02243920 = 0x02243920; +FUN_022439F8 = 0x022439F8; +FUN_02243AD8 = 0x02243AD8; +FUN_02243BA8 = 0x02243BA8; +FUN_02243C5C = 0x02243C5C; +FUN_02243D3C = 0x02243D3C; +FUN_02243DA0 = 0x02243DA0; +FUN_02243DB8 = 0x02243DB8; +FUN_02243DC0 = 0x02243DC0; +FUN_02243DC4 = 0x02243DC4; +FUN_02243DD8 = 0x02243DD8; +FUN_02243DE0 = 0x02243DE0; +FUN_02243E34 = 0x02243E34; +FUN_02243E74 = 0x02243E74; +FUN_02243F18 = 0x02243F18; +FUN_02243F50 = 0x02243F50; +FUN_02243F9C = 0x02243F9C; +FUN_02244210 = 0x02244210; +FUN_02244558 = 0x02244558; +FUN_02244660 = 0x02244660; +FUN_022446BC = 0x022446BC; +FUN_022446E0 = 0x022446E0; +FUN_022446FC = 0x022446FC; +FUN_02244758 = 0x02244758; +FUN_02244770 = 0x02244770; +FUN_02244824 = 0x02244824; +FUN_0224484C = 0x0224484C; +FUN_02244D1C = 0x02244D1C; +FUN_02244D20 = 0x02244D20; +FUN_02244D3C = 0x02244D3C; +FUN_02244D40 = 0x02244D40; +FUN_02244D58 = 0x02244D58; +FUN_02244D98 = 0x02244D98; +FUN_02244DA0 = 0x02244DA0; +FUN_02244DB0 = 0x02244DB0; +FUN_02244DBC = 0x02244DBC; +FUN_02244DC4 = 0x02244DC4; +FUN_02244EF8 = 0x02244EF8; +FUN_02244F18 = 0x02244F18; +FUN_02244F24 = 0x02244F24; +FUN_02244F2C = 0x02244F2C; +FUN_02245088 = 0x02245088; +FUN_02245114 = 0x02245114; +FUN_02245190 = 0x02245190; +FUN_02245198 = 0x02245198; +FUN_022451F0 = 0x022451F0; +FUN_0224525C = 0x0224525C; +FUN_022452A4 = 0x022452A4; +FUN_02245324 = 0x02245324; +FUN_02245340 = 0x02245340; +FUN_02245358 = 0x02245358; +FUN_0224566C = 0x0224566C; +FUN_022456E8 = 0x022456E8; +FUN_02245844 = 0x02245844; +FUN_02245910 = 0x02245910; +FUN_02245F1C = 0x02245F1C; +FUN_02245F4C = 0x02245F4C; +FUN_02245FA0 = 0x02245FA0; +FUN_022461A4 = 0x022461A4; +FUN_022461B8 = 0x022461B8; +FUN_0224666C = 0x0224666C; +FUN_022466A0 = 0x022466A0; +FUN_022466AC = 0x022466AC; +FUN_02246F1C = 0x02246F1C; +FUN_02247294 = 0x02247294; +FUN_022472AC = 0x022472AC; +FUN_02247544 = 0x02247544; +FUN_02247614 = 0x02247614; +FUN_02247728 = 0x02247728; +FUN_02247808 = 0x02247808; +FUN_02247970 = 0x02247970; +FUN_02247A34 = 0x02247A34; +FUN_022483BC = 0x022483BC; +FUN_022483E0 = 0x022483E0; +FUN_022483EC = 0x022483EC; +FUN_02248724 = 0x02248724; +FUN_0224884C = 0x0224884C; +FUN_022488CC = 0x022488CC; +FUN_022488EC = 0x022488EC; +FUN_022488F4 = 0x022488F4; +FUN_022488FC = 0x022488FC; +FUN_0224891C = 0x0224891C; +FUN_02248B54 = 0x02248B54; +FUN_02248B58 = 0x02248B58; +FUN_02248B5C = 0x02248B5C; +FUN_02248B60 = 0x02248B60; +FUN_02248B6C = 0x02248B6C; +FUN_02248CC0 = 0x02248CC0; +FUN_02248CD0 = 0x02248CD0; +FUN_02248DF8 = 0x02248DF8; +FUN_02248F70 = 0x02248F70; +FUN_02248FE0 = 0x02248FE0; +FUN_02249038 = 0x02249038; +FUN_022490A0 = 0x022490A0; +FUN_022491FC = 0x022491FC; +FUN_022494C8 = 0x022494C8; +FUN_02249508 = 0x02249508; +FUN_02249668 = 0x02249668; +FUN_022497E8 = 0x022497E8; +FUN_02249E6C = 0x02249E6C; +FUN_02249E78 = 0x02249E78; +FUN_02249E84 = 0x02249E84; +FUN_02249E90 = 0x02249E90; +FUN_0224A310 = 0x0224A310; +FUN_0224A528 = 0x0224A528; +FUN_0224A7C8 = 0x0224A7C8; +FUN_0224ABAC = 0x0224ABAC; +FUN_0224B124 = 0x0224B124; +FUN_0224B2C4 = 0x0224B2C4; +FUN_0224B568 = 0x0224B568; +FUN_0224B818 = 0x0224B818; +FUN_0224B86C = 0x0224B86C; +FUN_0224B9E0 = 0x0224B9E0; +FUN_0224BBEC = 0x0224BBEC; +FUN_0224BD90 = 0x0224BD90; +FUN_0224C038 = 0x0224C038; +FUN_0224C27C = 0x0224C27C; +FUN_0224C520 = 0x0224C520; +FUN_0224C678 = 0x0224C678; +FUN_0224C6E8 = 0x0224C6E8; +FUN_0224C6F4 = 0x0224C6F4; +FUN_0224C700 = 0x0224C700; +FUN_0224C8C8 = 0x0224C8C8; +FUN_0224CA2C = 0x0224CA2C; +FUN_0224CA54 = 0x0224CA54; +FUN_0224CA58 = 0x0224CA58; +FUN_0224CA88 = 0x0224CA88; +FUN_0224CA94 = 0x0224CA94; +FUN_0224CAA0 = 0x0224CAA0; +FUN_0224CAB4 = 0x0224CAB4; +FUN_0224CB30 = 0x0224CB30; +FUN_0224CBB0 = 0x0224CBB0; +FUN_0224CC24 = 0x0224CC24; +FUN_0224CECC = 0x0224CECC; +FUN_0224D14C = 0x0224D14C; +FUN_0224D2E0 = 0x0224D2E0; +FUN_0224D3E8 = 0x0224D3E8; +FUN_0224D70C = 0x0224D70C; +FUN_0224D76C = 0x0224D76C; +FUN_0224D79C = 0x0224D79C; +FUN_0224DCB8 = 0x0224DCB8; +FUN_0224DD94 = 0x0224DD94; +FUN_0224DDB8 = 0x0224DDB8; +FUN_0224E554 = 0x0224E554; +FUN_0224E764 = 0x0224E764; +FUN_0224E7C4 = 0x0224E7C4; +FUN_0224F12C = 0x0224F12C; +FUN_02252534 = 0x02252534; +FUN_02252538 = 0x02252538; +FUN_022567E0 = 0x022567E0; + +// ??? +SDK_MAIN_ARENA_LO = 0x0225FFA0; + +// EWRAM +SDK_SECTION_ARENA_EX_START = 0x023E0000; + +// DTCM +gUnk027FFC20 = 0x027FFC20; diff --git a/pokediamond.lcf b/pokediamond.lcf index 452afd175..01161a05d 100644 --- a/pokediamond.lcf +++ b/pokediamond.lcf @@ -2,7 +2,7 @@ MEMORY { header (RWX) : ORIGIN=0, LENGTH=0 arm9 (RWX) : ORIGIN=0x02000000, LENGTH=0 - arm7 (RWX) : ORIGIN=0x2380000, LENGTH=0 + arm7 (RWX) : ORIGIN=0x02380000, LENGTH=0 filenametable (RWX) : ORIGIN=0, LENGTH=0 fileallocationtable (RWX) : ORIGIN=0, LENGTH=0 icon_title (RWX) : ORIGIN=0, LENGTH=0 @@ -640,7 +640,8 @@ SECTIONS { } > rom3.FILE_30C600 .arm7 : AT(0x30D000) { - arm7_rom.o(.text) + ARM7AutoLoad = 0x02380158; + INCLUDE arm7.bin } > arm7 .filenametable : AT(0x336400) { From 442bb98553233bd38d6117d58df82d30bb83872a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 25 Apr 2020 21:09:36 -0400 Subject: [PATCH 22/23] Update install instructions and travis --- .travis.yml | 2 ++ INSTALL.md | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 867a5198d..4f376cea2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,8 @@ install: # These files are only accessible from Travis CI IP Addresses to prevent piracy. - wget http://private.martmists.com/mwccarm.zip - wget http://private.martmists.com/baserom.nds + - cp baserom.nds arm7/ + - cp baserom.nds arm9/ - unzip mwccarm.zip - mv mwccarm tools diff --git a/INSTALL.md b/INSTALL.md index 1ffc5c59a..82e9719ee 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,6 +1,6 @@ ### 1. Copy baserom(s) into root folder -Put a clean copy of Pokemon Diamond (US) nds rom at `./baserom.nds`. +Put clean copies of Pokemon Diamond (US) nds rom at `./baserom.nds`, `./arm9/baserom.nds`, and `./arm7/baserom.nds`. All three copies are required and must be identical. ### 2. Install MWCC compiler From fc0f4d2c89040c868df82d0da5bfdfc492ea05d4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 25 Apr 2020 21:30:25 -0400 Subject: [PATCH 23/23] No need for multiple copies of baserom.nds --- .travis.yml | 2 -- INSTALL.md | 2 +- Makefile | 6 ++++++ arm7/Makefile | 2 +- arm9/Makefile | 2 +- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4f376cea2..867a5198d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,8 +8,6 @@ install: # These files are only accessible from Travis CI IP Addresses to prevent piracy. - wget http://private.martmists.com/mwccarm.zip - wget http://private.martmists.com/baserom.nds - - cp baserom.nds arm7/ - - cp baserom.nds arm9/ - unzip mwccarm.zip - mv mwccarm tools diff --git a/INSTALL.md b/INSTALL.md index 82e9719ee..1ffc5c59a 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,6 +1,6 @@ ### 1. Copy baserom(s) into root folder -Put clean copies of Pokemon Diamond (US) nds rom at `./baserom.nds`, `./arm9/baserom.nds`, and `./arm7/baserom.nds`. All three copies are required and must be identical. +Put a clean copy of Pokemon Diamond (US) nds rom at `./baserom.nds`. ### 2. Install MWCC compiler diff --git a/Makefile b/Makefile index f67c43486..bfb5ed9e4 100644 --- a/Makefile +++ b/Makefile @@ -118,12 +118,18 @@ all: $(ROM) @$(SHA1SUM) -c $(TARGET).sha1 clean: mostlyclean + make -C arm9 clean + make -C arm7 clean make -C tools/mwasmarm_patcher clean mostlyclean: tidy + make -C arm9 mostlyclean + make -C arm7 mostlyclean find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' \) -exec $(RM) {} + tidy: + make -C arm9 tidy + make -C arm7 tidy $(RM) -r $(BUILD_DIR) tools: $(TOOLDIRS) diff --git a/arm7/Makefile b/arm7/Makefile index 88e81d5d3..d2c2681d0 100644 --- a/arm7/Makefile +++ b/arm7/Makefile @@ -79,7 +79,7 @@ OBJDUMP := $(CROSS)objdump OBJCOPY := $(CROSS)objcopy # ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm7_thumb.s -o arm7.o -ASFLAGS = -proc arm5te +ASFLAGS = -proc arm5te -i .. CFLAGS = -O4,p -proc v5te -thumb -fp soft -lang c99 -Cpp_exceptions off -ir ../include LDFLAGS = -map -nodead -w off -proc v5te -interworking -map -symtab -m _start diff --git a/arm9/Makefile b/arm9/Makefile index 5c6b4fdac..d97cfb950 100644 --- a/arm9/Makefile +++ b/arm9/Makefile @@ -79,7 +79,7 @@ OBJDUMP := $(CROSS)objdump OBJCOPY := $(CROSS)objcopy # ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o -ASFLAGS = -proc arm5te +ASFLAGS = -proc arm5te -i .. CFLAGS = -O4,p -proc v5te -thumb -fp soft -lang c99 -Cpp_exceptions off -ir ../include LDFLAGS = -map -nodead -w off -proc v5te -interworking -map -symtab -m _start