summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRevo <projectrevotpp@hotmail.com>2020-04-25 20:07:22 -0400
committerGitHub <noreply@github.com>2020-04-25 20:07:22 -0400
commitf08350ee4d2b7568fba5a1b72eb7278812f7adcc (patch)
tree4bfd7ec0733028751f628847371c920ea975c91a
parent5f1de106f34d57da41173aaa25422cdee7eca72d (diff)
parent143e670e14d18a56f3465ebf1ee3d22a985da25a (diff)
Merge pull request #26 from PikalaxALT/pikalax_work
Disassemble ITCM and split unk_020C9C2C.s
-rw-r--r--asm/CARD_arm9.s10
-rw-r--r--asm/CP_arm9.s42
-rw-r--r--asm/CTRDG_arm9.s6
-rw-r--r--asm/DGT_arm9.s1017
-rw-r--r--asm/FS_arm9.s3011
-rw-r--r--asm/MATH_arm9.s6
-rw-r--r--asm/MI_arm9.s1082
-rw-r--r--asm/OS_arm9.s4759
-rw-r--r--asm/PXI_arm9.s266
-rw-r--r--asm/SDK_AUTOLOAD_LIST.s20
-rw-r--r--asm/SND_arm9.s1655
-rw-r--r--asm/SPI_arm9.s1487
-rw-r--r--asm/arm7_rom.s83
-rw-r--r--asm/arm9_itcm.s505
-rw-r--r--asm/crt0.s6
-rw-r--r--asm/rom2_2.s28
-rw-r--r--asm/secure.s4
-rw-r--r--asm/unk_0208AC14.s30
-rw-r--r--asm/unk_020C9C0C.s13263
-rw-r--r--data/filenametable.s104
-rw-r--r--global.inc4433
-rw-r--r--pokediamond.lcf45
-rw-r--r--undefined_syms.txt67
23 files changed, 16297 insertions, 15632 deletions
diff --git a/asm/CARD_arm9.s b/asm/CARD_arm9.s
index 9756ce4b..664e85f5 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
@@ -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
@@ -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/CP_arm9.s b/asm/CP_arm9.s
new file mode 100644
index 00000000..c756e8e2
--- /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/CTRDG_arm9.s b/asm/CTRDG_arm9.s
index 02592388..301ea233 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
new file mode 100644
index 00000000..d5ef358d
--- /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 Unk_02106900 ; = 0x02106900
+_020D2B7C: .word Unk_02106840 ; = 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 Unk_0210683C ; = 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 Unk_02106A04 ; = 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 Unk_02106A00 ; = 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 Unk_02106A00 ; = 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 00000000..8fcbff7a
--- /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 3b384077..02dcfbcf 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 00000000..82747b38
--- /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
new file mode 100644
index 00000000..1323e376
--- /dev/null
+++ b/asm/OS_arm9.s
@@ -0,0 +1,4759 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .extern isInitialized
+
+ .section .dtcm
+ .balign 16, 0
+ .global OS_IRQTable
+OS_IRQTable: ; 027E0000 ;10b6a0
+ .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
+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 ; =OSi_IrqCallbackInfo
+ 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 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
+ 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 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 ; =OSi_IrqCallbackInfo
+ 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 OSi_IrqCallbackInfo
+_020C9F58: .word OSi_IrqCallbackInfo + 8
+_020C9F5C: .word OSi_IrqCallbackInfo + 4
+
+ 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 ; =OSi_IrqCallbackInfo
+ 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 ; =OSi_IrqCallbackInfo
+ 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 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 ; =OSi_IrqCallbackInfo
+ 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 OSi_IrqCallbackInfo
+
+ 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 SVC_WaitByLoop
+ 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 ; =isInitialized
+ 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 SVC_WaitByLoop
+ 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 isInitialized
+_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 OS_IsThreadAvailable
+OS_IsThreadAvailable: ; 0x020CAED0
+ ldr r0, _020CAEDC ; =OSi_IsThreadInitialized
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020CAEDC: .word OSi_IsThreadInitialized
+
+ 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 ; =OSi_RescheduleCount
+ 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 OSi_RescheduleCount
+
+ arm_func_start OS_DisableScheduler
+OS_DisableScheduler: ; 0x020CAF20
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ ldr r2, _020CAF54 ; =OSi_RescheduleCount
+ 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 OSi_RescheduleCount
+
+ 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 ; =OSi_ThreadInfo
+ 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 OSi_ThreadInfo
+
+ 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 ; =OSi_CurrentThreadPtr
+ 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 OSi_CurrentThreadPtr
+_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 ; =OSi_ThreadInfo
+ 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 ; =OSi_IdleThread
+ 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 ; =OSi_ThreadInfo
+ 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 OSi_ThreadInfo
+_020CB124: .word OSi_IdleThread
+
+ arm_func_start OS_YieldThread
+OS_YieldThread: ; 0x020CB128
+ stmdb sp!, {r4-r8,lr}
+ ldr r0, _020CB1E0 ; =OSi_ThreadInfo
+ mov r7, #0x0
+ mov r6, r7
+ mov r5, r7
+ ldr r8, [r0, #0x4]
+ bl OS_DisableInterrupts
+ ldr r1, _020CB1E0 ; =OSi_ThreadInfo
+ 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 ; =OSi_ThreadInfo
+ 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 OSi_ThreadInfo
+
+ 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 ; =OSi_ThreadInfo
+ 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 OSi_ThreadInfo
+
+ 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 ; =OSi_CurrentThreadPtr
+ 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 OSi_CurrentThreadPtr
+
+ 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 ; =OSi_ThreadInfo
+ 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 OSi_ThreadInfo
+
+ arm_func_start OSi_ExitThread_Destroy
+OSi_ExitThread_Destroy: ; 0x020CB43C
+ stmdb sp!, {r4,lr}
+ ldr r0, _020CB498 ; =OSi_CurrentThreadPtr
+ 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 OSi_CurrentThreadPtr
+
+ arm_func_start OSi_ExitThread_Destroy2
+OSi_ExitThread_Destroy2: ; 0x020CB49C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020CB4DC ; =OSi_CurrentThreadPtr
+ 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 OSi_CurrentThreadPtr
+
+ arm_func_start OSi_ExitThread_ArgSpecified
+OSi_ExitThread_ArgSpecified: ; 0x020CB4E0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r2, _020CB548 ; =OSi_StackForDestructor
+ 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 OSi_StackForDestructor
+_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 ; =OSi_ThreadInfo
+ mov r1, #0x0
+ ldr r0, [r0, #0x4]
+ bl OSi_ExitThread_ArgSpecified
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CB578: .word OSi_ThreadInfo
+
+ 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 ; =OSi_IsThreadInitialized
+ 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 ; =OSi_ThreadInfo
+ 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 ; =OSi_CurrentThreadPtr
+ 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 ; =OSi_ThreadInfo
+ 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 ; =OSi_IdleThread
+ ldr r1, _020CB7D8 ; =OSi_IdleThreadProc
+ ldr r3, _020CB7DC ; =OSi_Initialized
+ mov r2, #0x0
+ str r12, [sp, #0x4]
+ bl OS_CreateThread
+ ldr r0, _020CB7D4 ; =OSi_IdleThread
+ 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 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 OSi_IdleThread
+_020CB7D8: .word OSi_IdleThreadProc
+_020CB7DC: .word OSi_IdleThreadStack+0xc8
+
+ arm_func_start OSi_RescheduleThread
+OSi_RescheduleThread: ; 0x020CB7E0
+ stmdb sp!, {r4-r6,lr}
+ ldr r0, _020CB8BC ; =OSi_RescheduleCount
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ ldr r4, _020CB8C0 ; =OSi_ThreadInfo
+ 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 ; =OSi_CurrentThreadPtr
+ 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 ; =OSi_ThreadInfo
+ mov r0, r5
+ str r5, [r1, #0x4]
+ bl OS_LoadContext
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_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 ; =OSi_ThreadInfo
+ 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 ; =OSi_ThreadInfo
+ streq r1, [r0, #0x8]
+ ldrne r0, [r0, #0x68]
+ strne r0, [r2, #0x68]
+ bx lr
+ .balign 4
+_020CB910: .word OSi_ThreadInfo
+
+ arm_func_start OSi_InsertThreadToList
+OSi_InsertThreadToList: ; 0x020CB914
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020CB978 ; =OSi_ThreadInfo
+ 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 ; =OSi_ThreadInfo
+ 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 OSi_ThreadInfo
+
+ 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 ; =OSi_ThreadIdCount
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x1
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020CBAC0: .word OSi_ThreadIdCount
+
+ 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 ; =OSi_ThreadInfo
+ 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 OSi_ThreadInfo
+
+ 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 ; =OSi_ThreadInfo
+ 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 OSi_ThreadInfo
+
+ 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 ; =OSi_ThreadInfo
+ 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 OSi_ThreadInfo
+
+ 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 ; =OSi_MainExArenaEnabled
+ 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 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
+
+ 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 ; =OSi_MainExArenaEnabled
+ 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 OSi_MainExArenaEnabled
+_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 ; =OSi_MainExArenaEnabled
+ 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 OSi_MainExArenaEnabled
+_020CC5D8: .word 0x0200002B
+_020CC5DC: .word 0x023E0021
+
+ arm_func_start OS_InitArena
+OS_InitArena: ; 0x020CC5E0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020CC6F4 ; =OSi_Initialized
+ 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 OSi_Initialized
+
+ 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 ; =OSi_HeapInfo
+ 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 OSi_HeapInfo
+
+ 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 ; =OSi_HeapInfo
+ 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 OSi_HeapInfo
+
+ 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 ; =OSi_DebuggerHandler
+ 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 ; =OSi_DebuggerHandler
+ 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 OSi_DebuggerHandler
+_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 ; =OSi_ExContext
+ 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 OSi_ExContext
+
+ arm_func_start OSi_DisplayExContext
+OSi_DisplayExContext: ; 0x020CCB14
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020CCB70 ; =OSi_UserExceptionHandler
+ 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 ; =OSi_UserExceptionHandlerArg
+ ldr r0, _020CCB70 ; =OSi_UserExceptionHandler
+ ldr r1, [r1, #0x0]
+ ldr r2, [r0, #0x0]
+ ldr r0, _020CCB7C ; =OSi_ExContext
+ blx r2
+ bl OS_DisableProtectionUnit
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CCB70: .word OSi_UserExceptionHandler
+_020CCB74: .word 0x0000009F
+_020CCB78: .word OSi_UserExceptionHandlerArg
+_020CCB7C: .word OSi_ExContext
+
+ 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 ; =OSi_DebuggerHandler
+ strcc r1, [r0, #0x0]
+ blo _020CCBAC
+_020CCBA0:
+ ldr r0, _020CCBE0 ; =OSi_DebuggerHandler
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+_020CCBAC:
+ ldr r0, _020CCBE0 ; =OSi_DebuggerHandler
+ 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 ; =OSi_UserExceptionHandler
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020CCBDC: .word 0x027FFD9C
+_020CCBE0: .word OSi_DebuggerHandler
+_020CCBE4: .word OSi_ExceptionHandler
+_020CCBE8: .word 0x027E3000
+_020CCBEC: .word OSi_UserExceptionHandler
+
+ arm_func_start OSi_SetTimerReserved
+OSi_SetTimerReserved: ; 0x020CCBF0
+ 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 OSi_TimerReserved
+
+ 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 ; =OSi_TickCounter
+ 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 OSi_TickCounter
+_020CCCC4: .word 0x0000FFFF
+_020CCCC8: .word 0x04000214
+
+ arm_func_start OSi_CountUpTick
+OSi_CountUpTick: ; 0x020CCCCC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020CCD40 ; =OSi_TickCounter
+ ldr r1, _020CCD44 ; =OSi_NeedResetTimer
+ 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 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 ; =OSi_UseTick
+ ldrh r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020CCD60: .word OSi_UseTick
+
+ arm_func_start OS_InitTick
+OS_InitTick: ; 0x020CCD64
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020CCDE8 ; =OSi_UseTick
+ 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 ; =OSi_TickCounter
+ 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 ; =OSi_NeedResetTimer
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CCDE8: .word OSi_UseTick
+_020CCDEC: .word OSi_TickCounter
+_020CCDF0: .word 0x04000102
+_020CCDF4: .word 0x04000100
+_020CCDF8: .word OSi_CountUpTick
+_020CCDFC: .word OSi_NeedResetTimer
+
+ 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 ; =OSi_AlarmQueue
+ 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 ; =OSi_AlarmQueue
+ 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 OSi_AlarmQueue
+
+ 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 ; =OSi_AlarmQueue
+ 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 ; =OSi_AlarmQueue
+ 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 OSi_AlarmQueue
+
+ 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 ; =OSi_AlarmQueue
+ 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 ; =OSi_AlarmQueue
+ 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 ; =OSi_AlarmQueue
+ 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 OSi_AlarmQueue
+
+ 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 ; =OSi_UseAlarm
+ ldrh r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020CD194: .word OSi_UseAlarm
+
+ arm_func_start OS_InitAlarm
+OS_InitAlarm: ; 0x020CD198
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020CD1E8 ; =OSi_UseAlarm
+ 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 ; =OSi_AlarmQueue
+ 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 OSi_UseAlarm
+_020CD1EC: .word OSi_AlarmQueue
+
+ 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 ; =OSi_UseVAlarm
+ ldrh r0, [r2, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r1, _020CD2F0 ; =OSi_VAlarmQueue
+ 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 ; =OSi_VFrameCount
+ mov r2, #0x0
+ 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 OSi_UseVAlarm
+_020CD2F0: .word OSi_VAlarmQueue
+_020CD2F4: .word OSi_VFrameCount
+_020CD2F8: .word OSi_PreviousVCount
+
+ 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 SVC_WaitByLoop
+ 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: ; 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 ; =OSi_IsResetOccurred
+ 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 OSi_IsResetOccurred
+
+ 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 OSi_IsInitReset
+_020CD50C: .word OSi_CommonCallback
+
+ 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 ; =OSi_vramExclusive
+ ldr r1, _020CD644 ; =0x000001FF
+ ldr r2, [r4, #0x0]
+ mov r8, r0
+ and r0, r5, r2
+ and r9, r0, r1
+ ldr r6, _020CD648 ; =OSi_vramLockId
+ 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 OSi_vramExclusive
+_020CD644: .word 0x000001FF
+_020CD648: .word OSi_vramLockId
+
+ 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 ; =OSi_vramExclusive
+ mov r7, r0
+ ldr r0, [r1, #0x0]
+ and r5, r6, r0
+ ldr sb, _020CD718 ; =OSi_vramLockId
+ 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 ; =OSi_vramLockId
+ ldr sb, _020CD714 ; =OSi_vramExclusive
+ 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 OSi_vramExclusive
+_020CD718: .word OSi_vramLockId
+_020CD71C: .word 0x000001FF
+
+ arm_func_start OSi_InitVramExclusive
+OSi_InitVramExclusive: ; 0x020CD720
+ ldr r0, _020CD74C ; =OSi_vramExclusive
+ mov r3, #0x0
+ str r3, [r0, #0x0]
+ ldr r0, _020CD750 ; =OSi_vramLockId
+ 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 OSi_vramExclusive
+_020CD750: .word OSi_vramLockId
+
+ 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 ; =OSi_TickCounter
+ 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 OSi_TickCounter
+_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 00000000..ab3af5de
--- /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/SDK_AUTOLOAD_LIST.s b/asm/SDK_AUTOLOAD_LIST.s
new file mode 100644
index 00000000..8043d616
--- /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/SND_arm9.s b/asm/SND_arm9.s
new file mode 100644
index 00000000..99351712
--- /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 00000000..915bb22c
--- /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/arm7_rom.s b/asm/arm7_rom.s
index a18e8565..fa248afc 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 ROM7_SVC_SoftReset
+ROM7_SVC_SoftReset: ; 0x02389360
+ swi 0
+ bx lr
+
+ thumb_func_start ROM7_SVC_WaitByLoop
+ROM7_SVC_WaitByLoop: ; 0x02389364
+ swi 3
+ bx lr
+
+ thumb_func_start ROM7_SVC_WaitIntr
+ROM7_SVC_WaitIntr: ; 0x02389368
+ ldr r2, =0x04000000
+ mov ip, r2
+ mov r2, #0x0
+ swi 4
+ bx lr
+ .pool
+
+ thumb_func_start ROM7_SVC_WaitVBlankIntr
+ROM7_SVC_WaitVBlankIntr:
+ mov r2, #0x0
+ swi 5
+ bx lr
+
+ non_word_aligned_thumb_func_start ROM7_SVC_Halt
+ROM7_SVC_Halt:
+ swi 6
+ bx lr
+
+ non_word_aligned_thumb_func_start ROM7_SVC_Stop
+ROM7_SVC_Stop:
+ swi 7
+ bx lr
+
+ non_word_aligned_thumb_func_start ROM7_SVC_SoundBias
+ROM7_SVC_SoundBias:
+ swi 8
+ bx lr
+
+ 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 ROM7_SVC_SoundBiasReset
+ROM7_SVC_SoundBiasReset:
+ add r1, r0, #0x0
+ mov r0, #0x0
+ swi 8
+ bx lr
+
+ non_word_aligned_thumb_func_start ROM7_SVC_Div
+ROM7_SVC_Div:
+ swi 9
+ bx lr
+
+ non_word_aligned_thumb_func_start ROM7_SVC_DivRem
+ROM7_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/arm9_itcm.s b/asm/arm9_itcm.s
new file mode 100644
index 00000000..79c0de28
--- /dev/null
+++ b/asm/arm9_itcm.s
@@ -0,0 +1,505 @@
+ .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
+
+ 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/asm/crt0.s b/asm/crt0.s
index cfbab5f0..709bd5f3 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
@@ -264,7 +263,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 0682a6b0..d5055773 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/asm/secure.s b/asm/secure.s
index 8bfb7ede..f9d8f159 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 d434188d..0adafb8b 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
@@ -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]
@@ -34906,24 +34906,24 @@ _020A8B7C:
arm_func_start FUN_020A8BA4
FUN_020A8BA4: ; 0x020A8BA4
- ldr ip, _020A8BAC ; =MATH_MD5GetHash
+ ldr ip, _020A8BAC ; =DGT_Hash1GetDigest_R
bx r12
.balign 4
-_020A8BAC: .word MATH_MD5GetHash
+_020A8BAC: .word DGT_Hash1GetDigest_R
arm_func_start FUN_020A8BB0
FUN_020A8BB0: ; 0x020A8BB0
- ldr ip, _020A8BB8 ; =MATH_MD5Update
+ ldr ip, _020A8BB8 ; =DGT_Hash1SetSource
bx r12
.balign 4
-_020A8BB8: .word MATH_MD5Update
+_020A8BB8: .word DGT_Hash1SetSource
arm_func_start FUN_020A8BBC
FUN_020A8BBC: ; 0x020A8BBC
- ldr ip, _020A8BC4 ; =MATH_MD5Init
+ ldr ip, _020A8BC4 ; =DGT_Hash1Reset
bx r12
.balign 4
-_020A8BC4: .word MATH_MD5Init
+_020A8BC4: .word DGT_Hash1Reset
arm_func_start FUN_020A8BC8
FUN_020A8BC8: ; 0x020A8BC8
@@ -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/asm/unk_020C9C0C.s b/asm/unk_020C9C0C.s
deleted file mode 100644
index c6cdac46..00000000
--- 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/data/filenametable.s b/data/filenametable.s
index c5699171..7ff82dc8 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
diff --git a/global.inc b/global.inc
index 89a59653..478abdaa 100644
--- a/global.inc
+++ b/global.inc
@@ -1,933 +1,65 @@
-.extern FUN_0200019E
-.extern FUN_02000DF4
-.extern StringCopy
-.extern FUN_02000E7C
-.extern FUN_02000EE8
-.extern FUN_02000F18
-.extern FUN_02000FA4
-.extern FUN_02000FE8
-.extern FUN_02002C14
-.extern FUN_02002C50
-.extern FUN_02003B98
-.extern FUN_02003C10
-.extern FUN_0200A2AC
-.extern FUN_0200A318
-.extern FUN_0200E2D8
-.extern FUN_0201259C
-.extern FUN_020125D4
-.extern FUN_02015E30
-.extern FUN_02015E60
-.extern InitSystemForTheGame
-.extern InitGraphicMemory
-.extern FUN_020163BC
-.extern FUN_02016438
-.extern FUN_02016464
-.extern FUN_0201B5CC
-.extern FUN_02020AFC
-.extern ErrorHandling
-.extern FUN_02022294
-.extern FUN_020222C4
-.extern FUN_0202254C
-.extern FUN_020227FC
-.extern LoadPlayerDataAddress
-.extern FUN_02029EF8
-.extern FUN_0202FB80
-.extern FUN_020337E8
-.extern FUN_02034188
-.extern FUN_02089D90
-.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 thunk_FUN_02096e4c
-.extern FUN_02096F18
-.extern FUN_02096F80
-.extern FUN_02096FB0
-.extern thunk_FUN_02097190
-.extern FUN_0209700C
-.extern FUN_020973B4
-.extern FUN_020ADDC0
-.extern FUN_020ADDC8
-.extern FUN_020ADDF0
-.extern FUN_020ADE2C
-.extern tempName_NNS_FndAllocFromExpHeapEx
-.extern thunk_FUN_020adc8c
-.extern tempName_NNS_FndCreateExpHeapEx
-.extern FUN_020AE82C
-.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_020AF894
-.extern FUN_020AF9C4
-.extern FUN_020AFA28
-.extern FUN_020AFA80
-.extern FUN_020AFBA8
-.extern FUN_020AFBFC
-.extern FUN_020AFC04
-.extern thunk_FUN_020afda0
-.extern thunk_FUN_020afda0_2
-.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 thunk_FUN_020b5040
-.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 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 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 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
-.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
-.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
-.extern OS_SetIrqFunction
-.extern OS_GetLockID
-.extern OS_ReleaseLockID
-.extern DC_InvalidateRange
+.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 OS_Init
-.extern OS_AllocFromArenaHi
-.extern OS_AllocFromArenaLo
-.extern OS_SetArenaLo
-.extern OS_SetArenaHi
-.extern OS_GetInitArenaLo
-.extern OS_GetInitArenaHi
-.extern OS_GetTick
-.extern OS_InitTick
-.extern OS_DisableInterrupts
-.extern OS_RestoreInterrupts
-.extern OS_GetProcMode
-.extern OS_ResetSystem
-.extern OS_GetOwnerRtcOffset
-.extern OS_GetOwnerInfo
-.extern OS_GetMacAddress
-.extern OS_GetLowEntropyData
-.extern OS_Terminate
-.extern MI_StopDma
-.extern MI_WaitDma
-.extern MI_HBlankDmaCopy16
-.extern MI_HBlankDmaCopy32
-.extern MIi_CpuClear16
-.extern MIi_CpuCopy16
-.extern MIi_CpuClear32
-.extern MIi_CpuCopy32
-.extern MIi_CpuClearFast
-.extern MIi_CpuCopyFast
-.extern MI_Copy36B
-.extern MI_CpuFill8
-.extern MI_CpuCopy8
-.extern MI_UncompressLZ8
-.extern SND_GetWaveDataAddress
-.extern FS_FindArchive
-.extern FS_SeekFile
-.extern FS_ReadFile
-.extern FS_WaitAsync
+.extern DGT_Hash1GetDigest_R
+.extern DGT_Hash1Reset
+.extern DGT_Hash1SetSource
+.extern DGTi_hash2_arm4_small
+.extern ErrorHandling
.extern FS_CloseFile
-.extern FS_OpenFile
+.extern FS_ConvertPathToFileID
+.extern FS_FindArchive
+.extern FS_Init
.extern FS_InitFile
.extern FS_IsAvailable
-.extern FS_Init
-.extern FS_TryLoadTable
-.extern FS_SetDefaultDMA
-.extern FS_UnloadOverlay
.extern FS_LoadOverlay
-.extern FS_StartOverlay
.extern FS_LoadOverlayImage
.extern FS_LoadOverlayImageAsync
.extern FS_LoadOverlayInfo
-.extern TP_CheckError
-.extern TP_WaitBusy
-.extern TP_GetCalibratedPoint
-.extern TP_GetLatestIndexInAuto
-.extern TP_GetLatestRawPointInAuto
-.extern TP_RequestAutoSamplingStopAsync
-.extern TP_RequestAutoSamplingStartAsync
-.extern TP_WaitRawResult
-.extern TP_RequestSamplingAsync
-.extern TP_SetCalibrateParam
-.extern TP_GetUserInfo
-.extern TP_Init
-.extern MIC_StopAutoSampling
-.extern MIC_StartAutoSampling
-.extern MIC_DoSamplingAsync
-.extern MIC_Init
-.extern PM_GoSleepMode
-.extern PM_GetBackLight
-.extern PM_SetAmpGain
-.extern PM_SetAmp
-.extern PM_ForceToPowerOff
-.extern PM_SetBackLight
-.extern RTC_GetDateTimeAsync
+.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 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 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
-.extern _s32_div_f
-.extern _u32_div_f
-.extern _fp_init
-.extern __call_static_initializers
-.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_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 NitroMain
-
-.extern FUN_020005F2
-.extern CTRDG_Init
-.extern PM_Init
-.extern CARD_LockRom
-.extern CARD_UnlockRom
-.extern CARDi_ReadRom
-.extern MIi_UncompressBackward
-.extern PMi_SetLED
-.extern OS_SpinWait
-.extern PMi_Lock
-.extern PMi_SetLEDAsync
-.extern PMi_ReadRegister
-.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 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
@@ -943,164 +75,19 @@
.extern FUN_020020EC
.extern FUN_02002198
.extern FUN_020021AC
-.extern StringCopy
-.extern StringCopyN
-.extern StringLength
-.extern StringNotEqual
-.extern StringNotEqualN
-.extern StringFillEOS
-.extern ConvertUIntToDecimalString
-
-.extern FUN_02002E14
-.extern FUN_02002E4C
-.extern FUN_020054C8
-.extern FUN_02005F60
-.extern FUN_02005FDC
-.extern FUN_02006234
-.extern FUN_02006260
-.extern FUN_02006290
-.extern FUN_0200A86C
-.extern FUN_0200A8B8
-.extern FUN_0200CCA4
-.extern FUN_0200CCF8
-.extern FUN_0200E3A0
-.extern FUN_0201265C
-.extern FUN_02012838
-.extern FUN_02012870
-.extern FUN_02012880
-.extern FUN_02013690
-.extern FUN_020136C0
-.extern FUN_020136E0
-.extern FUN_020136F8
-.extern FUN_02016998
-.extern FUN_02016A8C
-.extern FUN_02018FF4
-.extern FUN_02019150
-.extern FUN_02019178
-.extern FUN_020191D0
-.extern FUN_02019620
-.extern FUN_02019658
-.extern FUN_020196F4
-.extern FUN_0201A8C8
-.extern FUN_0201AB0C
-.extern FUN_0201AB10
-.extern FUN_0201B9E0
-.extern FUN_0201BA1C
-.extern FUN_0201BD84
-.extern FUN_0201BE3C
-.extern FUN_0201CDD0
-.extern FUN_0201CE04
-.extern FUN_020225F8
-.extern FUN_0202287C
-.extern FUN_02032DAC
-.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
-.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
-.extern OS_SetDPermissionsForProtectionRegion
-.extern MI_DmaCopy32
-.extern MATH_SHA1Update
-.extern MATH_SHA1GetHash
-.extern MATH_MD5Update
-.extern MATH_MD5GetHash
-.extern OS_LockMutex
-.extern OS_UnlockMutex
-
-.extern FUN_02006930
-.extern FUN_02006C08
-.extern FUN_0200CA44
-.extern FUN_0200CAB4
-.extern FUN_02016A18
-.extern FUN_02017CD0
-.extern FUN_02018540
-.extern FUN_0201974C
-.extern FUN_0201AB08
-.extern FUN_0201AB14
-.extern FUN_0201AB18
-.extern FUN_0201B6C8
-.extern FUN_0201B8B8
-.extern FUN_0201B8E0
-.extern FUN_0201B914
-.extern FUN_0201B9EC
-.extern FUN_0201BCBC
-.extern FUN_0201C05C
-.extern FUN_0201C1EC
-.extern FUN_02021590
-.extern FUN_020215C8
-.extern FUN_020215E0
-.extern FUN_02021750
-.extern FUN_020218D8
-.extern FUN_02021934
-.extern FUN_0202199C
-.extern FUN_02021F2C
-.extern FUN_020222E8
-.extern FUN_020222F8
-.extern FUN_02022308
-.extern FUN_02022310
-.extern FUN_02029F04
-.extern FUN_02029F10
-.extern FUN_02029F14
-.extern FUN_02029F4C
-.extern FUN_020313EC
-.extern FUN_020169D8
.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
@@ -1117,6 +104,8 @@
.extern FUN_020038E4
.extern FUN_020038F0
.extern FUN_02003974
+.extern FUN_02003B98
+.extern FUN_02003C10
.extern FUN_020040F4
.extern FUN_02004104
.extern FUN_02004124
@@ -1139,6 +128,7 @@
.extern FUN_02005404
.extern FUN_02005410
.extern FUN_0200541C
+.extern FUN_020054C8
.extern FUN_020054F0
.extern FUN_02005508
.extern FUN_02005514
@@ -1154,923 +144,30 @@
.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 LoadFromNARC
-.extern LoadFromNarc_2
+.extern FUN_02006290
.extern FUN_02006528
.extern FUN_02006548
.extern FUN_02006564
-.extern LoadFromNARC_7
.extern FUN_02006670
.extern FUN_020066F4
.extern FUN_02006704
.extern FUN_02006774
.extern FUN_02006814
-.extern gScriptCmdTable
-.extern FUN_020399A0
-.extern FUN_020399A4
-.extern FUN_020399A8
-.extern FUN_020399B4
-.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_0203A2C4
-.extern FUN_0203A304
-.extern FUN_0203A388
-.extern FUN_0203A400
-.extern FUN_0203A45C
-.extern FUN_0203A4D0
-.extern FUN_0203A560
-.extern FUN_0203A590
-.extern FUN_0203A5D8
-.extern FUN_0203A608
-.extern FUN_0203A780
-.extern FUN_0203A830
-.extern FUN_0203A85C
-.extern FUN_0203A878
-.extern FUN_0203A8B8
-.extern FUN_0203A9F0
-.extern FUN_0203AA90
-.extern FUN_0203A630
-.extern FUN_0203AAA0
-.extern FUN_0203DEA8
-.extern FUN_0203AB8C
-.extern FUN_0203AC14
-.extern FUN_0203AC9C
-.extern FUN_0203AD08
-.extern FUN_0203ADC4
-.extern FUN_0203AE4C
-.extern FUN_0203AED4
-.extern FUN_0203AF34
-.extern FUN_0203AF58
-.extern FUN_020414E0
-.extern FUN_020414FC
-.extern FUN_02041518
-.extern FUN_02041558
-.extern FUN_02041588
-.extern FUN_020415AC
-.extern FUN_020415BC
-.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_020415E0
-.extern FUN_02041618
-.extern FUN_02041644
-.extern FUN_02041650
-.extern FUN_02041664
-.extern FUN_0203AFC4
-.extern FUN_0203B148
-.extern FUN_0203B1F0
-.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_0203B640
-.extern FUN_0203B724
-.extern FUN_0203B758
-.extern FUN_0203B7D8
-.extern FUN_02043C6C
-.extern FUN_02043C90
-.extern FUN_02043CE4
-.extern FUN_02043D78
-.extern FUN_02043DC8
-.extern FUN_02043DE0
-.extern FUN_02043A44
-.extern FUN_02043A94
-.extern FUN_02043AAC
-.extern FUN_02043ACC
-.extern FUN_02043AFC
-.extern FUN_02043B28
-.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_0203B81C
-.extern FUN_0203B85C
-.extern FUN_0203B8A0
-.extern FUN_020442BC
-.extern FUN_02044414
-.extern FUN_0204449C
-.extern FUN_020444F4
-.extern FUN_02044598
-.extern FUN_0203BB34
-.extern FUN_0203BB80
-.extern FUN_0203BB84
-.extern FUN_0203BB88
-.extern FUN_0203BB8C
-.extern FUN_02045264
-.extern FUN_0203BC1C
-.extern FUN_0203BCBC
-.extern FUN_0203BCCC
-.extern FUN_0203BCD8
-.extern FUN_0203BF20
-.extern FUN_0203BF2C
-.extern FUN_0203BF84
-.extern FUN_0203BFEC
-.extern FUN_0203C118
-.extern FUN_0203C12C
-.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_020416A8
-.extern FUN_02041770
-.extern FUN_020417E0
-.extern FUN_02041808
-.extern FUN_0203C4F0
-.extern FUN_0203C520
-.extern FUN_0203C6C4
-.extern FUN_0203C70C
-.extern FUN_0203C730
-.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_0203CB08
-.extern FUN_0203CB20
-.extern FUN_0203CB48
-.extern FUN_0203CB60
-.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_0204091C
-.extern FUN_020409C0
-.extern FUN_020409F8
-.extern FUN_02040A30
-.extern FUN_02040A7C
-.extern FUN_02040B0C
-.extern FUN_02040B5C
-.extern FUN_02040BAC
-.extern FUN_0203CBBC
-.extern FUN_02040BFC
-.extern FUN_02040C34
-.extern FUN_02040C6C
-.extern FUN_02040CA4
-.extern FUN_0203CB70
-.extern FUN_0204185C
-.extern FUN_0204188C
-.extern FUN_0203CBE8
-.extern FUN_02041970
-.extern FUN_020419F8
-.extern FUN_02041A80
-.extern FUN_02041AB4
-.extern FUN_02041AD4
-.extern FUN_02041AE0
-.extern FUN_02041B10
-.extern FUN_02041B70
-.extern FUN_02041B9C
-.extern FUN_02041BC4
-.extern FUN_02041BF0
-.extern FUN_0203CC88
-.extern FUN_0203CD20
-.extern FUN_0203CDB8
-.extern FUN_0203CDC4
-.extern FUN_0203CDD0
-.extern FUN_0203CE00
-.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_020404FC
-.extern FUN_0204052C
-.extern FUN_0204056C
-.extern FUN_02040488
-.extern FUN_020405CC
-.extern FUN_020405F8
-.extern FUN_02040638
-.extern FUN_0204064C
-.extern FUN_02040660
-.extern FUN_020406C0
-.extern FUN_0204059C
-.extern FUN_020405B4
-.extern FUN_02044CE0
-.extern FUN_02044D44
-.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_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_0203C054
-.extern FUN_0203C090
-.extern FUN_0203C0CC
-.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_0203D60C
-.extern FUN_0203D61C
-.extern FUN_0203D3DC
-.extern FUN_0203D448
-.extern FUN_0203D458
-.extern FUN_0203D490
-.extern FUN_0203D528
-.extern FUN_0203D5B0
-.extern FUN_0203D5F8
-.extern FUN_0203D630
-.extern FUN_0203D66C
-.extern FUN_0203D6C4
-.extern FUN_0203D560
-.extern FUN_0203FCF4
-.extern FUN_0203FDBC
-.extern FUN_0203FE08
-.extern FUN_0203FE48
-.extern FUN_0203D868
-.extern FUN_0203D874
-.extern FUN_0203D8A0
-.extern FUN_0203D8D0
-.extern FUN_0203D8E8
-.extern FUN_0203D8EC
-.extern FUN_0203D938
-.extern FUN_0203D948
-.extern FUN_0203D728
-.extern FUN_0203D738
-.extern FUN_0203D774
-.extern FUN_0203D834
-.extern FUN_020453F4
-.extern FUN_02045424
-.extern FUN_02045438
-.extern FUN_02045468
-.extern FUN_02045484
-.extern FUN_020454CC
-.extern FUN_0204552C
-.extern FUN_02045500
-.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_0203DC00
-.extern FUN_0203DC58
-.extern FUN_0203DC70
-.extern FUN_0203DC88
-.extern FUN_0203DCA0
-.extern FUN_02043E00
-.extern FUN_02043E20
-.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_02044B00
-.extern FUN_0203C460
-.extern FUN_0203C4B0
-.extern FUN_0203D958
-.extern FUN_02040D04
-.extern FUN_02040D7C
-.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_0203D998
-.extern FUN_0203D9E8
-.extern FUN_0203DA78
-.extern FUN_0203DAB0
-.extern FUN_0203DAE8
-.extern FUN_0203DB38
-.extern FUN_0203DB88
-.extern FUN_0203AB44
-.extern FUN_0203AB74
-.extern FUN_0203DBD4
-.extern FUN_0203A484
-.extern FUN_0203B8E4
-.extern FUN_0203B944
-.extern FUN_0203B968
-.extern FUN_0203B9B4
-.extern FUN_0203BA3C
-.extern FUN_0203BAB0
-.extern FUN_0203BAF4
-.extern FUN_0204434C
-.extern FUN_020443A8
-.extern FUN_02044B2C
-.extern FUN_02044B84
-.extern FUN_02044C0C
-.extern FUN_02044C88
-.extern FUN_0203DD60
-.extern FUN_0203DE00
-.extern FUN_0203DE4C
-.extern FUN_0203DE58
-.extern FUN_0203DE80
-.extern FUN_02043CB4
-.extern FUN_02043E9C
-.extern FUN_02044120
-.extern FUN_02044138
-.extern FUN_0204413C
-.extern FUN_02043E50
-.extern FUN_02043E68
-.extern FUN_02043EFC
-.extern FUN_02043D28
-.extern FUN_0203DD50
-.extern FUN_02044140
-.extern FUN_02043F50
-.extern FUN_02043FA0
-.extern FUN_02043FF4
-.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_0204488C
-.extern FUN_020448D4
-.extern FUN_020449A4
-.extern FUN_02044034
-.extern FUN_0203B618
-.extern FUN_020440C0
-.extern FUN_020440F0
-.extern FUN_02044F58
-.extern FUN_0203E018
-.extern FUN_0203E054
-.extern FUN_0203E078
-.extern FUN_0203E0CC
-.extern FUN_0203E120
-.extern FUN_02045D88
-.extern FUN_02045DD0
-.extern FUN_02044D8C
-.extern FUN_02044E34
-.extern FUN_02044E78
-.extern FUN_02040E4C
-.extern FUN_0203E138
-.extern FUN_0203E168
-.extern FUN_0203E254
-.extern FUN_02045678
-.extern FUN_020456D4
-.extern FUN_0204572C
-.extern FUN_0203E258
-.extern FUN_0203E29C
-.extern FUN_0203E2F8
-.extern FUN_0203E35C
-.extern FUN_0203E38C
-.extern FUN_0203C174
-.extern FUN_0203C1AC
-.extern FUN_0203C200
-.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_0203E4F0
-.extern FUN_0203E510
-.extern FUN_0203E568
-.extern FUN_0203E3D0
-.extern FUN_0203E408
-.extern FUN_0203E440
-.extern FUN_0203E470
-.extern FUN_0203E4A0
-.extern FUN_0203E4B0
-.extern FUN_02044ED8
-.extern FUN_0203E4D8
-.extern FUN_02044F20
-.extern FUN_02045268
-.extern FUN_02045398
-.extern FUN_0204539C
-.extern FUN_020452B4
-.extern FUN_02045308
-.extern FUN_0204469C
-.extern FUN_02044658
-.extern FUN_0203BC2C
-.extern FUN_02039A10
-.extern FUN_0203A04C
-.extern FUN_0203A098
-.extern FUN_0203A0FC
-.extern FUN_0203A13C
-.extern FUN_0203A188
-.extern FUN_0203A210
-.extern FUN_0203C7F4
-.extern FUN_0203C820
-.extern FUN_0203E5DC
-.extern FUN_0203C788
-.extern FUN_0203C7E4
-.extern FUN_0203C0FC
-.extern FUN_0203E674
-.extern FUN_0203BD08
-.extern FUN_0203BD28
-.extern FUN_0203BE50
-.extern FUN_0203BECC
-.extern FUN_0203BF00
-.extern FUN_0203A3C4
-.extern FUN_0203E684
-.extern FUN_0203E6B4
-.extern FUN_0203E6C4
-.extern FUN_0203E6FC
-.extern FUN_0203E72C
-.extern FUN_0204478C
-.extern FUN_02044800
-.extern FUN_0203E744
-.extern FUN_02044158
-.extern FUN_0204416C
-.extern FUN_02044198
-.extern FUN_0203E774
-.extern FUN_0203E7F0
-.extern FUN_0203E81C
-.extern FUN_0203E848
-.extern FUN_0203E858
-.extern FUN_02041C38
-.extern FUN_02045E1C
-.extern FUN_02045E20
-.extern FUN_02045EE0
-.extern FUN_02045EE4
-.extern FUN_02045F84
-.extern FUN_02045F88
-.extern FUN_02045F24
-.extern FUN_02045FCC
-.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_02044FE8
-.extern FUN_0204505C
-.extern FUN_02045104
-.extern FUN_02045170
-.extern FUN_02040EB4
-.extern FUN_0203E9CC
-.extern FUN_0203EA68
-.extern FUN_02041E40
-.extern FUN_02041FDC
-.extern FUN_02042038
-.extern FUN_02042110
-.extern FUN_0203EA90
-.extern FUN_0203EAB0
-.extern FUN_0203EB20
-.extern FUN_0203EB48
-.extern FUN_0203EB88
-.extern FUN_02042D1C
-.extern FUN_02046010
-.extern FUN_0204601C
-.extern FUN_02046028
-.extern FUN_0204602C
-.extern FUN_0203C5BC
-.extern FUN_0203C614
-.extern FUN_0203C680
-.extern FUN_0203EBC8
-.extern FUN_02044A6C
-.extern FUN_02044A94
-.extern FUN_0203EBE4
-.extern FUN_0203ECAC
-.extern FUN_0203ECD8
-.extern FUN_0203ECF4
-.extern FUN_0203ED10
-.extern FUN_02041194
-.extern FUN_020411C4
-.extern FUN_02041340
-.extern FUN_02040964
-.extern FUN_0203ED70
-.extern FUN_0204387C
-.extern FUN_020438D0
-.extern FUN_02043918
-.extern FUN_020439B4
-.extern FUN_0203FE80
-.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_02040DB4
-.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_0203A288
-.extern FUN_0203F234
-.extern FUN_0203F254
-.extern FUN_0203F26C
-.extern FUN_0203C58C
-.extern FUN_02040DEC
-.extern FUN_0203F2AC
-.extern FUN_02043B84
-.extern FUN_0203F2E4
-.extern FUN_02043C28
-.extern FUN_0203F31C
-.extern FUN_02044730
-.extern FUN_0203F348
-.extern FUN_0203F38C
-.extern FUN_0203F39C
-.extern FUN_0204214C
-.extern FUN_0203F3AC
-.extern FUN_0203F44C
-.extern FUN_0203F418
-.extern FUN_020408BC
-.extern FUN_02044A0C
-.extern FUN_0203F484
-.extern FUN_02041674
-.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_0203BDB8
-.extern FUN_0203BE68
-.extern FUN_0203BE80
-.extern FUN_0203F760
-.extern FUN_0203F7C8
-.extern FUN_0203F80C
-.extern FUN_0203F880
-.extern FUN_0203F924
-.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_0203D7DC
-.extern FUN_0203ACC4
-.extern FUN_0203F8C0
-.extern FUN_0203F954
-.extern FUN_0204190C
-.extern FUN_0203B024
-.extern FUN_0203F9DC
-.extern FUN_0203F988
-.extern FUN_0203F9B0
-.extern FUN_0203B914
-.extern FUN_020453A0
-.extern FUN_0203FA14
-.extern FUN_02043B54
-.extern FUN_02043BD0
-.extern FUN_0203FA58
-.extern FUN_0203B7F0
-.extern FUN_0203FB4C
-.extern FUN_0203B790
-.extern FUN_020413C0
-.extern FUN_0203FB64
-.extern FUN_0203FB94
-.extern FUN_0203FBA0
-.extern FUN_0203FBAC
-.extern FUN_02040EF8
-.extern FUN_0203B2E0
-.extern FUN_0203FBBC
-.extern FUN_0203FC1C
-.extern FUN_020451D0
-.extern FUN_02042000
-.extern FUN_0203AD54
-.extern FUN_0203D4E8
-.extern FUN_0203D920
-.extern FUN_02041B40
-.extern FUN_0203D0A4
-.extern FUN_0203FC58
-.extern FUN_0203CAE8
-.extern FUN_0203A340
-.extern FUN_0203FC80
-.extern FUN_0203FCB0
-.extern FUN_0203FCDC
-.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_0203AF84
-.extern FUN_0203AFA4
-.extern FUN_02038CD8
-.extern FUN_02038D10
-.extern FUN_020394F0
-.extern FUN_02039528
-.extern FUN_02039694
-.extern FUN_020462AC
-.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_02048D90
-.extern FUN_02048EC8
-.extern FUN_02048FC8
-.extern FUN_0204A6E0
-.extern FUN_0204AB58
-.extern FUN_0204ADBC
-.extern FUN_0204ADE0
-.extern FUN_0204AF3C
-.extern FUN_0204AF84
-.extern FUN_0204B2A4
-.extern FUN_0204B33C
-.extern FUN_0204BAB0
-.extern FUN_0204C104
-.extern FUN_0204C1A8
-.extern FUN_0204D6C0
-.extern FUN_0204E2FC
-.extern FUN_020527D8
-.extern FUN_02052B74
-.extern FUN_02052CD8
-.extern FUN_02052DE8
-.extern FUN_02052F74
-.extern FUN_020547A4
-.extern FUN_020552F8
-.extern FUN_02055320
-.extern FUN_0205532C
-.extern FUN_020553A0
-.extern FUN_020553C4
-.extern FUN_02055468
-.extern FUN_020557F4
-.extern FUN_02055A38
-.extern FUN_02055B14
-.extern FUN_02055B30
-.extern FUN_02055B8C
-.extern FUN_02057800
-.extern FUN_0205785C
-.extern FUN_02057BAC
-.extern FUN_02058458
-.extern FUN_02058780
-.extern FUN_020587B0
-.extern FUN_020588D4
-.extern FUN_02058BE4
-.extern FUN_02058D74
-.extern FUN_0205CE48
-.extern FUN_0205CE80
-.extern FUN_0205DD18
-.extern FUN_0205DD38
-.extern FUN_0205DD40
-.extern FUN_0205ECE0
-.extern FUN_0205F214
-.extern FUN_0205F244
-.extern FUN_0205F2E4
-.extern FUN_0205F388
-.extern FUN_0205F524
-.extern FUN_0205F6C8
-.extern FUN_0205F6D8
-.extern FUN_0205F7A0
-.extern FUN_02060144
-.extern FUN_020613CC
-.extern FUN_02061A8C
-.extern FUN_02063888
-.extern FUN_02063948
-.extern FUN_02063964
-.extern FUN_02064E90
-.extern FUN_02065054
-.extern FUN_02065070
-.extern FUN_02065314
-.extern FUN_02066978
-.extern FUN_020669A0
-.extern FUN_020669D4
-.extern FUN_02066A20
-.extern FUN_02066ACC
-.extern FUN_020671BC
-.extern FUN_020672BC
-.extern FUN_02067830
-.extern FUN_02068678
-.extern FUN_020689E0
-.extern FUN_02068B68
-.extern FUN_02068C00
-.extern FUN_02068E14
-.extern FUN_020690C4
-.extern FUN_020690CC
-.extern FUN_020690E4
-.extern FUN_02069168
-.extern FUN_02069B40
-.extern FUN_02069B88
-.extern FUN_0206B484
-.extern FUN_0206B6C8
-.extern FUN_0206B7BC
-.extern FUN_0206B9AC
-.extern FUN_0206B9B0
-.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_0206EA98
-.extern FUN_0206EAB8
-.extern FUN_0206EB1C
-.extern FUN_0206EE50
-.extern FUN_0206EFEC
-.extern FUN_0206F158
-.extern FUN_0206F164
-.extern FUN_0206F17C
-.extern FUN_0206F190
-.extern FUN_02077A84
-.extern FUN_02077AC4
-.extern FUN_02079C70
-.extern FUN_0207B000
-.extern FUN_0207C2A4
-.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_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_020863DC
-.extern FUN_02087A1C
-.extern FUN_02087A50
-.extern FUN_02087D00
-.extern FUN_02087E14
-.extern FUN_02088D40
-.extern FUN_0208A0B8
-.extern FUN_0208A300
-.extern FUN_0208A320
-.extern FUN_0208A9B8
-.extern FUN_02069A64
-.extern FUN_020638BC
.extern FUN_0200687C
.extern FUN_020068C8
+.extern FUN_02006930
.extern FUN_02006BB0
+.extern FUN_02006C08
.extern FUN_02006C98
.extern FUN_02006D98
.extern FUN_02006ED4
@@ -2079,6 +176,7 @@
.extern FUN_0200737C
.extern FUN_02007390
.extern FUN_020073A0
+.extern FUN_02007534
.extern FUN_02007558
.extern FUN_0200782C
.extern FUN_020079E0
@@ -2123,9 +221,13 @@
.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
@@ -2206,6 +308,8 @@
.extern FUN_0200C124
.extern FUN_0200C13C
.extern FUN_0200C154
+.extern FUN_0200C358
+.extern FUN_0200C368
.extern FUN_0200C378
.extern FUN_0200C388
.extern FUN_0200C398
@@ -2225,9 +329,13 @@
.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
@@ -2240,18 +348,26 @@
.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
@@ -2267,6 +383,10 @@
.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
@@ -2296,16 +416,25 @@
.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
@@ -2316,6 +445,7 @@
.extern FUN_020179E0
.extern FUN_02017B48
.extern FUN_02017B54
+.extern FUN_02017CD0
.extern FUN_02017CE8
.extern FUN_02017DFC
.extern FUN_02017E14
@@ -2324,36 +454,64 @@
.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
@@ -2362,6 +520,8 @@
.extern FUN_0201CC08
.extern FUN_0201CC24
.extern FUN_0201CD04
+.extern FUN_0201CDD0
+.extern FUN_0201CE04
.extern FUN_0201D040
.extern FUN_0201D12C
.extern FUN_0201D168
@@ -2413,6 +573,14 @@
.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
@@ -2421,11 +589,18 @@
.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
@@ -2433,14 +608,18 @@
.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
@@ -2678,6 +857,11 @@
.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
@@ -2774,6 +958,7 @@
.extern FUN_0202FA10
.extern FUN_0202FA1C
.extern FUN_0202FA48
+.extern FUN_0202FB80
.extern FUN_02030A78
.extern FUN_02030ADC
.extern FUN_02030B3C
@@ -2783,6 +968,7 @@
.extern FUN_02030E7C
.extern FUN_02030F20
.extern FUN_02030F40
+.extern FUN_02030F60
.extern FUN_02030F74
.extern FUN_02030F88
.extern FUN_02030FA8
@@ -2797,6 +983,7 @@
.extern FUN_02031280
.extern FUN_020312BC
.extern FUN_020313B4
+.extern FUN_020313EC
.extern FUN_02031400
.extern FUN_02031438
.extern FUN_02031588
@@ -2834,15 +1021,21 @@
.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
@@ -2850,6 +1043,7 @@
.extern FUN_0203451C
.extern FUN_02034678
.extern FUN_020346CC
+.extern FUN_02034774
.extern FUN_02034788
.extern FUN_020347B0
.extern FUN_020347C4
@@ -2912,9 +1106,18 @@
.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
@@ -2972,44 +1175,772 @@
.extern FUN_020389CC
.extern FUN_02038AD0
.extern FUN_02038AF4
-.extern SetupBytecodeScript
-.extern SetupNativeScript
-.extern StopScript
.extern FUN_02038B6C
-.extern ScriptJump
-.extern ScriptCall
-.extern ScriptReturn
-.extern ScriptReadHalfword
-.extern ScriptReadWord
-.extern FUN_02007534
-.extern FUN_0200C358
-.extern FUN_0200C368
-.extern FUN_02030F60
-.extern FUN_02034774
-.extern FUN_020351A0
-.extern FUN_02035E50
-.extern FUN_02036A78
-.extern FUN_02036AB8
-.extern FUN_02036B90
-.extern FUN_02036BDC
-.extern FUN_02036D94
-.extern FUN_02036DD4
-.extern FUN_02037350
-.extern RunScriptCommand
-.extern InitScriptContext
+.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
@@ -3023,6 +1954,9 @@
.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
@@ -3034,13 +1968,21 @@
.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
@@ -3053,12 +1995,17 @@
.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
@@ -3072,11 +2019,16 @@
.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
@@ -3085,6 +2037,7 @@
.extern FUN_02054608
.extern FUN_02054658
.extern FUN_020546C8
+.extern FUN_020547A4
.extern FUN_02054C14
.extern FUN_02054CB0
.extern FUN_02054CC8
@@ -3093,27 +2046,45 @@
.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
@@ -3121,6 +2092,8 @@
.extern FUN_02058B4C
.extern FUN_02058B7C
.extern FUN_02058BB4
+.extern FUN_02058BE4
+.extern FUN_02058D74
.extern FUN_02058E28
.extern FUN_02058E90
.extern FUN_02058EB0
@@ -3133,8 +2106,14 @@
.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
@@ -3147,8 +2126,10 @@
.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
@@ -3157,8 +2138,10 @@
.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
@@ -3166,6 +2149,7 @@
.extern FUN_0205F4A0
.extern FUN_0205F4E4
.extern FUN_0205F50C
+.extern FUN_0205F524
.extern FUN_0205F54C
.extern FUN_0205F55C
.extern FUN_0205F594
@@ -3177,14 +2161,18 @@
.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
@@ -3196,10 +2184,16 @@
.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
@@ -3210,32 +2204,92 @@
.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
@@ -3272,285 +2326,1192 @@
.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_02038C78
-.extern FUN_02038CA8
-.extern FUN_02039504
-.extern FUN_02039564
-.extern FUN_0203959C
-.extern FUN_020395BC
-.extern FUN_02039874
-.extern FUN_0203989C
-.extern FUN_020462B8
-.extern FUN_020462E4
-.extern FUN_0204630C
-.extern FUN_02046338
-.extern FUN_02046380
-.extern FUN_0206AC74
-.extern SDK_AUTOLOAD_DTCM_START
-.extern SDK_AUTOLOAD_LIST
-.extern SDK_AUTOLOAD_LIST_END
-.extern SDK_AUTOLOAD_START
-.extern SDK_STATIC_BSS_START
-.extern SDK_STATIC_BSS_END
-.extern OS_IrqHandler
-
+.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_LoadTexPltt
+.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_BeginLoadTex
+.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_EndLoadTex
+.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 _s32_div_f
-.extern MTX_Identity43_
-.extern VEC_DotProduct
-.extern VEC_CrossProduct
+.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_Scale43_
-.extern G3_LoadMtx43
-.extern G3_MultMtx43
-.extern MI_Copy36B
+.extern MTX_Identity33_
+.extern MTX_Identity43_
.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 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_RestoreInterrupts
-.extern PXI_SendWordByFifo
-.extern OS_GetLockID
-.extern OSi_TryLockVram
+.extern OS_DisableIrqMask
+.extern OS_DisableScheduler
+.extern OS_EnableIrqMask
+.extern OS_EnableScheduler
+.extern OS_ExitThread
.extern OS_FreeToHeap
-.extern OS_AllocFromHeap
-.extern MATH_CalcSHA1
-.extern MI_CpuCopy8
-.extern memcmp
-.extern DC_StoreRange
-.extern DC_InvalidateRange
+.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 _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_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_GetMacAddress
-.extern MATHi_CRC32InitTableRev
-.extern MATH_CalcCRC32
-.extern OS_GetLowEntropyData
-.extern OS_SNPrintf
-.extern MATHi_CRC8InitTable
-.extern MATH_CalcCRC8
+.extern OS_JamMessage
+.extern OS_JoinThread
+.extern OS_LockCartridge
+.extern OS_LockMutex
.extern OS_ReadMessage
-.extern OS_DisableScheduler
+.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_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_SetAlarm
+.extern OS_SetArenaHi
+.extern OS_SetArenaLo
+.extern OS_SetDPermissionsForProtectionRegion
+.extern OS_SetIrqFunction
+.extern OS_SetIrqMask
+.extern OS_SetThreadPriority
.extern OS_Sleep
-.extern OS_GetProcMode
+.extern OS_SleepThread
+.extern OS_SpinWait
+.extern OS_Terminate
+.extern OS_TryLockCard
+.extern OS_TryLockCartridge
.extern OS_TryLockMutex
-.extern OS_JoinThread
-.extern OS_RescheduleThread
-.extern STD_CopyLString
-.extern memmove
+.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 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
-
-.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 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_WaitForCommandProc
-.extern SND_SetMasterPan
-.extern SND_ResetMasterPan
-.extern SND_RecvCommandReply
+.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 PM_PrependPreSleepCallback
-.extern PM_AppendPostSleepCallback
-.extern SND_UnlockChannel
-.extern SND_LockChannel
+.extern SND_InvalidateBankData
+.extern SND_InvalidateSeqData
+.extern SND_InvalidateWaveData
.extern SND_IsFinishedCommandTag
-.extern SND_GetChannelStatus
+.extern SND_LockChannel
+.extern SND_PauseSeq
+.extern SND_PrepareSeq
+.extern SND_RecvCommandReply
+.extern SND_ResetMasterPan
.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_SetMasterPan
+.extern SND_SetOutputSelector
+.extern SND_SetPlayerChannelPriority
.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_SetWaveDataAddress
.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 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 MI_WaitDma
-.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
+.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/pokediamond.lcf b/pokediamond.lcf
index ad1c352e..da357c97 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=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
filenametable (RWX) : ORIGIN=0, LENGTH=0
@@ -389,8 +392,16 @@ SECTIONS {
unk_02046030.o (.text)
unk_0208AC14.o (.text)
unk_020AF030.o (.text)
+ /* SDK */
GX_arm9.o (.text)
- unk_020C9C0C.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)
@@ -398,14 +409,36 @@ 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
+
+ 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
- .unk_10b724 : AT (0x10B724) {
+ .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 c30f31da..075d22a9 100644
--- a/undefined_syms.txt
+++ b/undefined_syms.txt
@@ -1,17 +1,60 @@
+SDK_SYS_STACKSIZE = 0x00000000;
CONST_34 = 0x00000034;
CONST_3F = 0x0000003F;
-OS_IrqHandler = 0x01FF8000;
-FUN_01FF84A4 = 0x01FF84A4;
-FUN_01FF84E4 = 0x01FF84E4;
-FUN_01FF8544 = 0x01FF8544;
-FUN_01FF857C = 0x01FF857C;
-FUN_01FF85F0 = 0x01FF85F0;
-FUN_02000B60 = 0x02000B60;
+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;
@@ -452,6 +495,12 @@ FUN_0224F12C = 0x0224F12C;
FUN_02252534 = 0x02252534;
FUN_02252538 = 0x02252538;
FUN_022567E0 = 0x022567E0;
-SDK_AUTOLOAD_DTCM_START = 0x027E0000;
-SDK_STATIC_BSS_END = 0x021D74E0;
+
+// ???
+SDK_MAIN_ARENA_LO = 0x0225FFA0;
+
+// EWRAM
+SDK_SECTION_ARENA_EX_START = 0x023E0000;
+
+// DTCM
gUnk027FFC20 = 0x027FFC20;