decompile some of file_system

This commit is contained in:
sceptillion
2017-12-12 00:17:17 -08:00
parent ae3751c57b
commit d08ba1f023
5 changed files with 12155 additions and 12204 deletions

View File

@@ -5,198 +5,6 @@
.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}

12012
data/data.s

File diff suppressed because it is too large Load Diff

12007
data/data_80B9BB8.s Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -49,6 +49,7 @@ SECTIONS {
src/random.o(.text);
asm/text.o(.text);
asm/code_8009804.o(.text);
src/file_system.o(.text);
asm/file_system.o(.text);
asm/code_800AAA0.o(.text);
src/main.o(.text);
@@ -81,6 +82,8 @@ SECTIONS {
ALIGN(4)
{
data/data.o(.rodata);
src/file_system.o(.rodata);
data/data_80B9BB8.o(.rodata);
src/agb_flash.o(.rodata);
src/agb_flash_1m.o(.rodata);
src/agb_flash_mx.o(.rodata);

145
src/file_system.c Normal file
View File

@@ -0,0 +1,145 @@
#include "global.h"
struct File
{
char *name;
u8 *data;
};
struct OpenedFile
{
struct File *file;
u8 *data;
};
struct FileArchive
{
char magic[8];
s32 count;
struct File *entries;
};
extern struct OpenedFile gUnknown_202D2A8[];
extern u32 gUnknown_203B094;
extern u32 gUnknown_202D2A4;
extern int sprintf(char *, const char *, ...);
u8 *GetSiroPtr(struct OpenedFile *);
void InitFileSystem(void)
{
s32 i;
for (i = 0; i < 64; i++)
{
gUnknown_202D2A8[i].file = NULL;
gUnknown_202D2A8[i].data = NULL;
}
gUnknown_203B094 = 0;
gUnknown_202D2A4 = 1;
}
u32 sub_800A8F8(u32 value)
{
u32 oldValue = gUnknown_202D2A4;
gUnknown_202D2A4 = value;
return oldValue;
}
struct OpenedFile *OpenFile(char *filename, struct FileArchive *arc)
{
char buffer[0x12C];
s32 left, right;
s32 cursor;
s32 i;
s32 magic = 0;
s32 magicFound;
struct File *entries;
struct File *file;
magic = strcmp(arc->magic, "pksdir0") != 0;
magicFound = 0;
if (!(u8)magic)
magicFound = 1;
if (!magicFound)
return NULL;
entries = arc->entries;
left = 0;
right = arc->count - 1;
while (left < right)
{
s32 mid = (left + right) / 2;
int result = strcmp(entries[mid].name, filename);
if (result == 0)
{
left = mid;
break;
}
else if (result < 0)
{
left = mid + 1;
}
else
{
right = mid;
}
}
file = &entries[left];
if (strcmp(file->name, filename))
{
sprintf(buffer, "not find file [%s]\n", filename);
return NULL;
}
cursor = gUnknown_203B094;
for (i = 0; i < 64; i++)
{
cursor++;
if (cursor > 63)
cursor = 0;
if (!gUnknown_202D2A8[cursor].file)
{
gUnknown_202D2A8[cursor].file = file;
gUnknown_202D2A8[cursor].data = NULL;
return &gUnknown_202D2A8[cursor];
}
}
return NULL;
}
static u8 *_GetFileDataPtr(struct OpenedFile *openedFile)
{
openedFile->data = openedFile->file->data;
return openedFile->data;
}
u8 *GetFileDataPtr(struct OpenedFile *openedFile, int unused)
{
_GetFileDataPtr(openedFile);
return GetSiroPtr(openedFile);
}
struct OpenedFile *OpenFileAndGetFileDataPtr(char *filename, struct FileArchive *arc)
{
struct OpenedFile *openedFile = OpenFile(filename, arc);
if (openedFile)
GetFileDataPtr(openedFile, 0);
return openedFile;
}
struct OpenedFile *Call_OpenFileAndGetFileDataPtr(char *filename, struct FileArchive *arc)
{
return OpenFileAndGetFileDataPtr(filename, arc);
}