summaryrefslogtreecommitdiff
path: root/arm9/asm/FS_command_default.asm.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm/FS_command_default.asm.s')
-rw-r--r--arm9/asm/FS_command_default.asm.s618
1 files changed, 618 insertions, 0 deletions
diff --git a/arm9/asm/FS_command_default.asm.s b/arm9/asm/FS_command_default.asm.s
new file mode 100644
index 00000000..550c82ea
--- /dev/null
+++ b/arm9/asm/FS_command_default.asm.s
@@ -0,0 +1,618 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .extern FSi_StrNICmp
+ .extern FSi_ReadTable
+ .extern FSi_SeekDirDirect
+
+ 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
+ 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