summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsceptillion <33798691+sceptillion@users.noreply.github.com>2017-12-12 00:50:47 -0800
committersceptillion <33798691+sceptillion@users.noreply.github.com>2017-12-12 00:50:47 -0800
commitc418a4585f727f334ed3625cc656764b0c345589 (patch)
tree60cc49a0bea7f9e0176266fe274e9dd53cec7e7a
parentd08ba1f0231ea44410601aebfd1b8e43a4ba8042 (diff)
decompile rest of file_system
-rw-r--r--asm/file_system.s95
-rw-r--r--ld_script.txt1
-rw-r--r--src/file_system.c54
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)
+{
+}