diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-05-05 18:07:45 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-05-05 18:07:45 -0400 |
commit | 20d2be0cc4f7659f53e5b104d6298fd01660938a (patch) | |
tree | fe0cc234c08e9bce2e809ae39d51aa0ea73b86fc | |
parent | 59b901298217b6aa2cde46a6f828fb20a23ac758 (diff) |
Split libfs
-rw-r--r-- | arm9/arm9.lcf | 7 | ||||
-rw-r--r-- | arm9/asm/FS_archive.s | 897 | ||||
-rw-r--r-- | arm9/asm/FS_command.s | 140 | ||||
-rw-r--r-- | arm9/asm/FS_command_default.s | 748 | ||||
-rw-r--r-- | arm9/asm/FS_file.s | 448 | ||||
-rw-r--r-- | arm9/asm/FS_overlay.s | 546 | ||||
-rw-r--r-- | arm9/asm/FS_rom.s | 246 | ||||
-rw-r--r-- | arm9/asm/libfs.s | 3011 | ||||
-rw-r--r-- | arm9/global.inc | 9 |
9 files changed, 3040 insertions, 3012 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 62cdb898..c9ddc713 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -188,7 +188,12 @@ SECTIONS { SND_bank.o (.text) PXI_init.o (.text) PXI_fifo.o (.text) - libfs.o (.text) + FS_command.o (.text) + FS_command_default.o (.text) + FS_archive.o (.text) + FS_file.o (.text) + FS_rom.o (.text) + FS_overlay.o (.text) libdgt.o (.text) libcp.o (.text) libspi.o (.text) diff --git a/arm9/asm/FS_archive.s b/arm9/asm/FS_archive.s new file mode 100644 index 00000000..51a3e121 --- /dev/null +++ b/arm9/asm/FS_archive.s @@ -0,0 +1,897 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + + 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 diff --git a/arm9/asm/FS_command.s b/arm9/asm/FS_command.s new file mode 100644 index 00000000..0c2ec755 --- /dev/null +++ b/arm9/asm/FS_command.s @@ -0,0 +1,140 @@ + .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 diff --git a/arm9/asm/FS_command_default.s b/arm9/asm/FS_command_default.s new file mode 100644 index 00000000..eea33a0a --- /dev/null +++ b/arm9/asm/FS_command_default.s @@ -0,0 +1,748 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + + 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 diff --git a/arm9/asm/FS_file.s b/arm9/asm/FS_file.s new file mode 100644 index 00000000..daec0913 --- /dev/null +++ b/arm9/asm/FS_file.s @@ -0,0 +1,448 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + + 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 diff --git a/arm9/asm/FS_overlay.s b/arm9/asm/FS_overlay.s new file mode 100644 index 00000000..78635558 --- /dev/null +++ b/arm9/asm/FS_overlay.s @@ -0,0 +1,546 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + + 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/arm9/asm/FS_rom.s b/arm9/asm/FS_rom.s new file mode 100644 index 00000000..61a7c521 --- /dev/null +++ b/arm9/asm/FS_rom.s @@ -0,0 +1,246 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + + 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 diff --git a/arm9/asm/libfs.s b/arm9/asm/libfs.s deleted file mode 100644 index d9b791b8..00000000 --- a/arm9/asm/libfs.s +++ /dev/null @@ -1,3011 +0,0 @@ - .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/arm9/global.inc b/arm9/global.inc index 450bee0d..99f4a8e2 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -5111,6 +5111,15 @@ .extern MOD11_02249E58
.extern MOD11_0224B310
.extern MOD11_0224C12C
+.extern FSi_ExecuteSyncCommand
+.extern FSi_InitRom
+.extern FSi_SendCommand
+.extern FSi_TranslateCommand
+.extern FS_NotifyArchiveAsyncEnd
+.extern FS_ResumeArchive
+.extern FS_SuspendArchive
+.extern FS_ReadFileAsync
+.extern FSi_ReleaseCommand
.extern FX_DivS32
.extern G2x_ChangeBlendBrightness_
.extern GX_DisableBankForARM7
|