mirror of
https://github.com/pret/pmd-red.git
synced 2026-03-22 01:54:50 -05:00
288 lines
4.5 KiB
ArmAsm
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.
|