summaryrefslogtreecommitdiff
path: root/arm9/asm/FS_rom.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm/FS_rom.s')
-rw-r--r--arm9/asm/FS_rom.s246
1 files changed, 246 insertions, 0 deletions
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