summaryrefslogtreecommitdiff
path: root/asm/file_system.s
diff options
context:
space:
mode:
Diffstat (limited to 'asm/file_system.s')
-rw-r--r--asm/file_system.s287
1 files changed, 287 insertions, 0 deletions
diff --git a/asm/file_system.s b/asm/file_system.s
new file mode 100644
index 0000000..570d760
--- /dev/null
+++ b/asm/file_system.s
@@ -0,0 +1,287 @@
+ .include "constants/gba_constants.inc"
+ .include "asm/macros.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start InitFileSystem
+InitFileSystem:
+ push {r4,lr}
+ ldr r3, _0800A8EC
+ ldr r4, _0800A8F0
+ movs r2, 0
+ ldr r0, _0800A8F4
+ movs r1, 0x3F
+_0800A8D0:
+ str r2, [r0]
+ str r2, [r0, 0x4]
+ adds r0, 0x8
+ subs r1, 0x1
+ cmp r1, 0
+ bge _0800A8D0
+ movs r0, 0
+ str r0, [r3]
+ movs r0, 0x1
+ str r0, [r4]
+ pop {r4}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0800A8EC: .4byte gUnknown_203B094
+_0800A8F0: .4byte gUnknown_202D2A4
+_0800A8F4: .4byte gUnknown_202D2A8
+ thumb_func_end InitFileSystem
+
+ thumb_func_start sub_800A8F8
+sub_800A8F8:
+ ldr r1, _0800A904
+ ldr r2, [r1]
+ str r0, [r1]
+ adds r0, r2, 0
+ bx lr
+ .align 2, 0
+_0800A904: .4byte gUnknown_202D2A4
+ thumb_func_end sub_800A8F8
+
+ thumb_func_start OpenFile
+OpenFile:
+ push {r4-r7,lr}
+ mov r7, r8
+ push {r7}
+ sub sp, 0x12C
+ mov r8, r0
+ adds r4, r1, 0
+ ldr r1, _0800A93C
+ adds r0, r4, 0
+ bl strcmp
+ cmp r0, 0
+ beq _0800A922
+ movs r0, 0x1
+_0800A922:
+ movs r1, 0
+ lsls r0, 24
+ cmp r0, 0
+ bne _0800A92C
+ movs r1, 0x1
+_0800A92C:
+ cmp r1, 0
+ beq _0800A9B6
+ ldr r7, [r4, 0xC]
+ movs r6, 0
+ ldr r0, [r4, 0x8]
+ subs r5, r0, 0x1
+ b _0800A94A
+ .align 2, 0
+_0800A93C: .4byte gUnknown_80B9B94
+_0800A940:
+ cmp r0, 0
+ bge _0800A948
+ adds r6, r4, 0x1
+ b _0800A94A
+_0800A948:
+ adds r5, r4, 0
+_0800A94A:
+ cmp r6, r5
+ bge _0800A968
+ adds r0, r6, r5
+ lsrs r1, r0, 31
+ adds r0, r1
+ asrs r4, r0, 1
+ lsls r0, r4, 3
+ adds r0, r7
+ ldr r0, [r0]
+ mov r1, r8
+ bl strcmp
+ cmp r0, 0
+ bne _0800A940
+ adds r6, r4, 0
+_0800A968:
+ lsls r0, r6, 3
+ adds r6, r7, r0
+ ldr r0, [r6]
+ mov r1, r8
+ bl strcmp
+ cmp r0, 0
+ beq _0800A994
+ ldr r1, _0800A984
+ mov r0, sp
+ mov r2, r8
+ bl sprintf
+ b _0800A9B6
+ .align 2, 0
+_0800A984: .4byte gUnknown_80B9B9C
+_0800A988:
+ str r6, [r2]
+ adds r0, r7, 0x4
+ adds r0, r3, r0
+ str r1, [r0]
+ adds r0, r2, 0
+ b _0800A9B8
+_0800A994:
+ ldr r0, _0800A9C4
+ ldr r0, [r0]
+ movs r4, 0
+ ldr r5, _0800A9C8
+ adds r7, r5, 0
+_0800A99E:
+ adds r0, 0x1
+ cmp r0, 0x3F
+ ble _0800A9A6
+ movs r0, 0
+_0800A9A6:
+ lsls r3, r0, 3
+ adds r2, r3, r5
+ ldr r1, [r2]
+ cmp r1, 0
+ beq _0800A988
+ adds r4, 0x1
+ cmp r4, 0x3F
+ ble _0800A99E
+_0800A9B6:
+ movs r0, 0
+_0800A9B8:
+ add sp, 0x12C
+ pop {r3}
+ mov r8, r3
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_0800A9C4: .4byte gUnknown_203B094
+_0800A9C8: .4byte gUnknown_202D2A8
+ thumb_func_end OpenFile
+
+ thumb_func_start GetFileDataPtrFromFileEntry
+GetFileDataPtrFromFileEntry:
+ ldr r1, [r0]
+ ldr r1, [r1, 0x4]
+ str r1, [r0, 0x4]
+ adds r0, r1, 0
+ bx lr
+ thumb_func_end GetFileDataPtrFromFileEntry
+
+ thumb_func_start GetFileDataPtr
+GetFileDataPtr:
+ push {r4,lr}
+ adds r4, r0, 0
+ bl GetFileDataPtrFromFileEntry
+ adds r0, r4, 0
+ bl GetSiroPtr
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end GetFileDataPtr
+
+ thumb_func_start OpenFileAndGetFileDataPtr
+OpenFileAndGetFileDataPtr:
+ push {r4,lr}
+ bl OpenFile
+ adds r4, r0, 0
+ cmp r4, 0
+ beq _0800A9FE
+ movs r1, 0
+ bl GetFileDataPtr
+_0800A9FE:
+ adds r0, r4, 0
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end OpenFileAndGetFileDataPtr
+
+ thumb_func_start Call_OpenFileAndGetFileDataPtr
+Call_OpenFileAndGetFileDataPtr:
+ push {lr}
+ bl OpenFileAndGetFileDataPtr
+ pop {r1}
+ bx r1
+ thumb_func_end Call_OpenFileAndGetFileDataPtr
+
+ thumb_func_start CloseFile
+CloseFile:
+ push {r4,r5,lr}
+ adds r4, r0, 0
+ movs r1, 0
+ ldr r0, _0800AA30
+ movs r3, 0
+ ldr r5, _0800AA34
+ adds r2, r0, 0x4
+_0800AA22:
+ cmp r0, r4
+ bne _0800AA38
+ str r3, [r0]
+ str r3, [r2]
+ str r1, [r5]
+ b _0800AA42
+ .align 2, 0
+_0800AA30: .4byte gUnknown_202D2A8
+_0800AA34: .4byte gUnknown_203B094
+_0800AA38:
+ adds r2, 0x8
+ adds r0, 0x8
+ adds r1, 0x1
+ cmp r1, 0x3F
+ ble _0800AA22
+_0800AA42:
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ thumb_func_end CloseFile
+
+ thumb_func_start GetSiroPtr
+GetSiroPtr:
+ push {r4,r5,lr}
+ adds r5, r0, 0
+ ldr r4, [r5, 0x4]
+ ldr r1, [r4]
+ ldr r0, _0800AA60
+ cmp r1, r0
+ beq _0800AA68
+ ldr r0, _0800AA64
+ cmp r1, r0
+ beq _0800AA6E
+ adds r0, r4, 0
+ b _0800AA72
+ .align 2, 0
+_0800AA60: .4byte 0x30524953
+_0800AA64: .4byte 0x4f524953
+_0800AA68:
+ adds r0, r4, 0
+ bl NDS_DecompressRLE
+_0800AA6E:
+ ldr r0, [r4, 0x4]
+ str r0, [r5, 0x4]
+_0800AA72:
+ pop {r4,r5}
+ pop {r1}
+ bx r1
+ thumb_func_end GetSiroPtr
+
+ thumb_func_start UnusedGetSir0Ptr
+UnusedGetSir0Ptr:
+ push {r4,lr}
+ adds r4, r0, 0
+ ldr r1, [r4]
+ ldr r0, _0800AA90
+ cmp r1, r0
+ bne _0800AA94
+ adds r0, r4, 0
+ bl NDS_DecompressRLE
+ ldr r0, [r4, 0x4]
+ b _0800AA96
+ .align 2, 0
+_0800AA90: .4byte 0x30524953
+_0800AA94:
+ adds r0, r4, 0
+_0800AA96:
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end UnusedGetSir0Ptr
+
+ thumb_func_start NDS_DecompressRLE
+NDS_DecompressRLE:
+ bx lr
+ thumb_func_end NDS_DecompressRLE
+
+ .align 2, 0 @ Don't pad with nop.