diff options
author | sceptillion <33798691+sceptillion@users.noreply.github.com> | 2017-12-12 00:50:47 -0800 |
---|---|---|
committer | sceptillion <33798691+sceptillion@users.noreply.github.com> | 2017-12-12 00:50:47 -0800 |
commit | c418a4585f727f334ed3625cc656764b0c345589 (patch) | |
tree | 60cc49a0bea7f9e0176266fe274e9dd53cec7e7a | |
parent | d08ba1f0231ea44410601aebfd1b8e43a4ba8042 (diff) |
decompile rest of file_system
-rw-r--r-- | asm/file_system.s | 95 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/file_system.c | 54 |
3 files changed, 54 insertions, 96 deletions
diff --git a/asm/file_system.s b/asm/file_system.s deleted file mode 100644 index 90bedba..0000000 --- a/asm/file_system.s +++ /dev/null @@ -1,95 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - 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. diff --git a/ld_script.txt b/ld_script.txt index 05e39f4..4ce25b9 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -50,7 +50,6 @@ SECTIONS { 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); asm/code_800B540.o(.text); diff --git a/src/file_system.c b/src/file_system.c index adddb5e..296478d 100644 --- a/src/file_system.c +++ b/src/file_system.c @@ -19,6 +19,12 @@ struct FileArchive struct File *entries; }; +struct SiroArchive +{ + u32 magic; + u8 *data; +}; + extern struct OpenedFile gUnknown_202D2A8[]; extern u32 gUnknown_203B094; @@ -27,6 +33,7 @@ extern u32 gUnknown_202D2A4; extern int sprintf(char *, const char *, ...); u8 *GetSiroPtr(struct OpenedFile *); +void NDS_DecompressRLE(void *); void InitFileSystem(void) { @@ -143,3 +150,50 @@ struct OpenedFile *Call_OpenFileAndGetFileDataPtr(char *filename, struct FileArc { return OpenFileAndGetFileDataPtr(filename, arc); } + +void CloseFile(struct OpenedFile *openedFile) +{ + s32 i; + + for (i = 0; i < 64; i++) + { + if (&gUnknown_202D2A8[i] == openedFile) + { + gUnknown_202D2A8[i].file = NULL; + gUnknown_202D2A8[i].data = NULL; + gUnknown_203B094 = i; + return; + } + } +} + +u8 *GetSiroPtr(struct OpenedFile *openedFile) +{ + struct SiroArchive *siro = (struct SiroArchive *)openedFile->data; + + if (siro->magic == 0x30524953) + { + NDS_DecompressRLE(openedFile->data); + } + else if (siro->magic != 0x4F524953) + { + return openedFile->data; + } + + openedFile->data = siro->data; + + return openedFile->data; +} + +void *UnusedGetSir0Ptr(struct SiroArchive *siro) +{ + if (siro->magic != 0x30524953) + return siro; + + NDS_DecompressRLE(siro); + return siro->data; +} + +void NDS_DecompressRLE(void *unused) +{ +} |