pmd-red/asm/file_system.s
2017-12-11 11:39:11 -08:00

288 lines
4.5 KiB
ArmAsm

.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.