diff options
author | Max <mparisi@stevens.edu> | 2020-10-27 20:00:40 -0400 |
---|---|---|
committer | Max <mparisi@stevens.edu> | 2020-10-27 20:00:40 -0400 |
commit | 3512ee2e095d0aaa663b2feea4781f5199139d8f (patch) | |
tree | 6332fe753bc83b974b1849adecc1d6c1c730674a | |
parent | dfcd7d75a33c3706f0c0f3e58efd564fc578d8ec (diff) |
match up to func_801DCE38
-rw-r--r-- | asm/code_801DBE90_asm.s | 196 | ||||
-rw-r--r-- | asm/code_801DCE6C_asm.s | 4 | ||||
-rw-r--r-- | include/SDK/DVD/dvdfs.h | 2 | ||||
-rw-r--r-- | src/code_801DBE90.cpp | 91 |
4 files changed, 90 insertions, 203 deletions
diff --git a/asm/code_801DBE90_asm.s b/asm/code_801DBE90_asm.s index 683d1b1..61c9a65 100644 --- a/asm/code_801DBE90_asm.s +++ b/asm/code_801DBE90_asm.s @@ -2,202 +2,6 @@ .section .text, "ax" # 0x80006980 - 0x803E1E60
-.global func_801DCBC0
-func_801DCBC0:
-/* 801DCBC0 001D8820 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 801DCBC4 001D8824 7C 08 02 A6 */ mflr r0
-/* 801DCBC8 001D8828 90 01 00 24 */ stw r0, 0x24(r1)
-/* 801DCBCC 001D882C 93 E1 00 1C */ stw r31, 0x1c(r1)
-/* 801DCBD0 001D8830 93 C1 00 18 */ stw r30, 0x18(r1)
-/* 801DCBD4 001D8834 93 A1 00 14 */ stw r29, 0x14(r1)
-/* 801DCBD8 001D8838 7C 7D 1B 78 */ mr r29, r3
-/* 801DCBDC 001D883C 93 81 00 10 */ stw r28, 0x10(r1)
-/* 801DCBE0 001D8840 7C 9C 23 78 */ mr r28, r4
-/* 801DCBE4 001D8844 4B FF F7 9D */ bl func_801DC380
-/* 801DCBE8 001D8848 2C 03 00 00 */ cmpwi r3, 0
-/* 801DCBEC 001D884C 40 82 00 0C */ bne lbl_801DCBF8
-/* 801DCBF0 001D8850 38 60 00 00 */ li r3, 0
-/* 801DCBF4 001D8854 48 00 00 98 */ b lbl_801DCC8C
-lbl_801DCBF8:
-/* 801DCBF8 001D8858 7F A3 EB 78 */ mr r3, r29
-/* 801DCBFC 001D885C 4B FF F6 D5 */ bl func_801DC2D0
-/* 801DCC00 001D8860 2C 03 00 00 */ cmpwi r3, 0
-/* 801DCC04 001D8864 7C 7F 1B 78 */ mr r31, r3
-/* 801DCC08 001D8868 40 82 00 0C */ bne lbl_801DCC14
-/* 801DCC0C 001D886C 38 60 00 00 */ li r3, 0
-/* 801DCC10 001D8870 48 00 00 7C */ b lbl_801DCC8C
-lbl_801DCC14:
-/* 801DCC14 001D8874 4B FF FB 4D */ bl func_801DC760
-/* 801DCC18 001D8878 38 03 00 1F */ addi r0, r3, 0x1f
-/* 801DCC1C 001D887C 54 1E 00 35 */ rlwinm. r30, r0, 0, 0, 0x1a
-/* 801DCC20 001D8880 40 82 00 0C */ bne lbl_801DCC2C
-/* 801DCC24 001D8884 38 60 00 00 */ li r3, 0
-/* 801DCC28 001D8888 48 00 00 64 */ b lbl_801DCC8C
-lbl_801DCC2C:
-/* 801DCC2C 001D888C 7F C3 F3 78 */ mr r3, r30
-/* 801DCC30 001D8890 4B FF E1 35 */ bl func_801DAD64
-/* 801DCC34 001D8894 2C 03 00 00 */ cmpwi r3, 0
-/* 801DCC38 001D8898 7C 7D 1B 78 */ mr r29, r3
-/* 801DCC3C 001D889C 40 82 00 0C */ bne lbl_801DCC48
-/* 801DCC40 001D88A0 38 60 00 00 */ li r3, 0
-/* 801DCC44 001D88A4 48 00 00 48 */ b lbl_801DCC8C
-lbl_801DCC48:
-/* 801DCC48 001D88A8 7F E3 FB 78 */ mr r3, r31
-/* 801DCC4C 001D88AC 7F A4 EB 78 */ mr r4, r29
-/* 801DCC50 001D88B0 7F C5 F3 78 */ mr r5, r30
-/* 801DCC54 001D88B4 38 C0 00 00 */ li r6, 0
-/* 801DCC58 001D88B8 4B FF F7 A5 */ bl func_801DC3FC
-/* 801DCC5C 001D88BC 7C 03 F0 40 */ cmplw r3, r30
-/* 801DCC60 001D88C0 41 82 00 14 */ beq lbl_801DCC74
-/* 801DCC64 001D88C4 7F A3 EB 78 */ mr r3, r29
-/* 801DCC68 001D88C8 4B FF E2 3D */ bl func_801DAEA4
-/* 801DCC6C 001D88CC 38 60 00 00 */ li r3, 0
-/* 801DCC70 001D88D0 48 00 00 1C */ b lbl_801DCC8C
-lbl_801DCC74:
-/* 801DCC74 001D88D4 7F E3 FB 78 */ mr r3, r31
-/* 801DCC78 001D88D8 4B FF FA 4D */ bl func_801DC6C4
-/* 801DCC7C 001D88DC 2C 1C 00 00 */ cmpwi r28, 0
-/* 801DCC80 001D88E0 41 82 00 08 */ beq lbl_801DCC88
-/* 801DCC84 001D88E4 93 DC 00 00 */ stw r30, 0(r28)
-lbl_801DCC88:
-/* 801DCC88 001D88E8 7F A3 EB 78 */ mr r3, r29
-lbl_801DCC8C:
-/* 801DCC8C 001D88EC 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 801DCC90 001D88F0 83 E1 00 1C */ lwz r31, 0x1c(r1)
-/* 801DCC94 001D88F4 83 C1 00 18 */ lwz r30, 0x18(r1)
-/* 801DCC98 001D88F8 83 A1 00 14 */ lwz r29, 0x14(r1)
-/* 801DCC9C 001D88FC 83 81 00 10 */ lwz r28, 0x10(r1)
-/* 801DCCA0 001D8900 7C 08 03 A6 */ mtlr r0
-/* 801DCCA4 001D8904 38 21 00 20 */ addi r1, r1, 0x20
-/* 801DCCA8 001D8908 4E 80 00 20 */ blr
-
-.global func_801DCCAC
-func_801DCCAC:
-/* 801DCCAC 001D890C 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 801DCCB0 001D8910 7C 08 02 A6 */ mflr r0
-/* 801DCCB4 001D8914 90 01 00 24 */ stw r0, 0x24(r1)
-/* 801DCCB8 001D8918 39 61 00 20 */ addi r11, r1, 0x20
-/* 801DCCBC 001D891C 4B FE A4 6D */ bl _savegpr_27
-/* 801DCCC0 001D8920 7C 7D 1B 78 */ mr r29, r3
-/* 801DCCC4 001D8924 7C 9B 23 78 */ mr r27, r4
-/* 801DCCC8 001D8928 7C BC 2B 78 */ mr r28, r5
-/* 801DCCCC 001D892C 4B FF F6 B5 */ bl func_801DC380
-/* 801DCCD0 001D8930 2C 03 00 00 */ cmpwi r3, 0
-/* 801DCCD4 001D8934 40 82 00 0C */ bne lbl_801DCCE0
-/* 801DCCD8 001D8938 38 60 00 00 */ li r3, 0
-/* 801DCCDC 001D893C 48 00 00 A0 */ b lbl_801DCD7C
-lbl_801DCCE0:
-/* 801DCCE0 001D8940 7F A3 EB 78 */ mr r3, r29
-/* 801DCCE4 001D8944 4B FF F5 ED */ bl func_801DC2D0
-/* 801DCCE8 001D8948 2C 03 00 00 */ cmpwi r3, 0
-/* 801DCCEC 001D894C 7C 7F 1B 78 */ mr r31, r3
-/* 801DCCF0 001D8950 40 82 00 0C */ bne lbl_801DCCFC
-/* 801DCCF4 001D8954 38 60 00 00 */ li r3, 0
-/* 801DCCF8 001D8958 48 00 00 84 */ b lbl_801DCD7C
-lbl_801DCCFC:
-/* 801DCCFC 001D895C 4B FF FA 65 */ bl func_801DC760
-/* 801DCD00 001D8960 38 03 00 1F */ addi r0, r3, 0x1f
-/* 801DCD04 001D8964 54 1E 00 35 */ rlwinm. r30, r0, 0, 0, 0x1a
-/* 801DCD08 001D8968 40 82 00 0C */ bne lbl_801DCD14
-/* 801DCD0C 001D896C 38 60 00 00 */ li r3, 0
-/* 801DCD10 001D8970 48 00 00 6C */ b lbl_801DCD7C
-lbl_801DCD14:
-/* 801DCD14 001D8974 7F 63 DB 78 */ mr r3, r27
-/* 801DCD18 001D8978 7F C4 F3 78 */ mr r4, r30
-/* 801DCD1C 001D897C 4B FF DF 79 */ bl func_801DAC94
-/* 801DCD20 001D8980 2C 03 00 00 */ cmpwi r3, 0
-/* 801DCD24 001D8984 7C 7D 1B 78 */ mr r29, r3
-/* 801DCD28 001D8988 40 82 00 0C */ bne lbl_801DCD34
-/* 801DCD2C 001D898C 38 60 00 00 */ li r3, 0
-/* 801DCD30 001D8990 48 00 00 4C */ b lbl_801DCD7C
-lbl_801DCD34:
-/* 801DCD34 001D8994 7F E3 FB 78 */ mr r3, r31
-/* 801DCD38 001D8998 7F A4 EB 78 */ mr r4, r29
-/* 801DCD3C 001D899C 7F C5 F3 78 */ mr r5, r30
-/* 801DCD40 001D89A0 38 C0 00 00 */ li r6, 0
-/* 801DCD44 001D89A4 4B FF F6 B9 */ bl func_801DC3FC
-/* 801DCD48 001D89A8 7C 03 F0 40 */ cmplw r3, r30
-/* 801DCD4C 001D89AC 41 82 00 18 */ beq lbl_801DCD64
-/* 801DCD50 001D89B0 7F 63 DB 78 */ mr r3, r27
-/* 801DCD54 001D89B4 7F A4 EB 78 */ mr r4, r29
-/* 801DCD58 001D89B8 4B FF DF F1 */ bl func_801DAD48
-/* 801DCD5C 001D89BC 38 60 00 00 */ li r3, 0
-/* 801DCD60 001D89C0 48 00 00 1C */ b lbl_801DCD7C
-lbl_801DCD64:
-/* 801DCD64 001D89C4 7F E3 FB 78 */ mr r3, r31
-/* 801DCD68 001D89C8 4B FF F9 5D */ bl func_801DC6C4
-/* 801DCD6C 001D89CC 2C 1C 00 00 */ cmpwi r28, 0
-/* 801DCD70 001D89D0 41 82 00 08 */ beq lbl_801DCD78
-/* 801DCD74 001D89D4 93 DC 00 00 */ stw r30, 0(r28)
-lbl_801DCD78:
-/* 801DCD78 001D89D8 7F A3 EB 78 */ mr r3, r29
-lbl_801DCD7C:
-/* 801DCD7C 001D89DC 39 61 00 20 */ addi r11, r1, 0x20
-/* 801DCD80 001D89E0 4B FE A3 F5 */ bl _restgpr_27
-/* 801DCD84 001D89E4 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 801DCD88 001D89E8 7C 08 03 A6 */ mtlr r0
-/* 801DCD8C 001D89EC 38 21 00 20 */ addi r1, r1, 0x20
-/* 801DCD90 001D89F0 4E 80 00 20 */ blr
-
-.global func_801DCD94
-func_801DCD94:
-/* 801DCD94 001D89F4 80 0D A0 78 */ lwz r0, lbl_8063F338-_SDA_BASE_(r13)
-/* 801DCD98 001D89F8 7C 64 1B 78 */ mr r4, r3
-/* 801DCD9C 001D89FC 2C 00 00 00 */ cmpwi r0, 0
-/* 801DCDA0 001D8A00 41 82 00 10 */ beq lbl_801DCDB0
-/* 801DCDA4 001D8A04 7C 03 03 78 */ mr r3, r0
-/* 801DCDA8 001D8A08 38 A0 00 00 */ li r5, 0
-/* 801DCDAC 001D8A0C 48 00 04 E8 */ b lbl_801DD294
-lbl_801DCDB0:
-/* 801DCDB0 001D8A10 38 60 00 00 */ li r3, 0
-/* 801DCDB4 001D8A14 4E 80 00 20 */ blr
-
-.global func_801DCDB8
-func_801DCDB8:
-/* 801DCDB8 001D8A18 90 6D A0 70 */ stw r3, lbl_8063F330-_SDA_BASE_(r13)
-/* 801DCDBC 001D8A1C 90 8D A0 74 */ stw r4, lbl_8063F334-_SDA_BASE_(r13)
-/* 801DCDC0 001D8A20 4E 80 00 20 */ blr
-
-.global func_801DCDC4
-func_801DCDC4:
-/* 801DCDC4 001D8A24 80 0D A0 68 */ lwz r0, lbl_8063F328-_SDA_BASE_(r13)
-/* 801DCDC8 001D8A28 2C 00 00 05 */ cmpwi r0, 5
-/* 801DCDCC 001D8A2C 40 80 00 1C */ bge lbl_801DCDE8
-/* 801DCDD0 001D8A30 2C 00 00 00 */ cmpwi r0, 0
-/* 801DCDD4 001D8A34 41 82 00 5C */ beq lbl_801DCE30
-/* 801DCDD8 001D8A38 41 80 00 58 */ blt lbl_801DCE30
-/* 801DCDDC 001D8A3C 2C 00 00 03 */ cmpwi r0, 3
-/* 801DCDE0 001D8A40 40 80 00 30 */ bge lbl_801DCE10
-/* 801DCDE4 001D8A44 48 00 00 24 */ b lbl_801DCE08
-lbl_801DCDE8:
-/* 801DCDE8 001D8A48 2C 00 00 09 */ cmpwi r0, 9
-/* 801DCDEC 001D8A4C 40 80 00 10 */ bge lbl_801DCDFC
-/* 801DCDF0 001D8A50 2C 00 00 07 */ cmpwi r0, 7
-/* 801DCDF4 001D8A54 40 80 00 2C */ bge lbl_801DCE20
-/* 801DCDF8 001D8A58 48 00 00 20 */ b lbl_801DCE18
-lbl_801DCDFC:
-/* 801DCDFC 001D8A5C 2C 00 00 0B */ cmpwi r0, 0xb
-/* 801DCE00 001D8A60 40 80 00 30 */ bge lbl_801DCE30
-/* 801DCE04 001D8A64 48 00 00 24 */ b lbl_801DCE28
-lbl_801DCE08:
-/* 801DCE08 001D8A68 38 60 00 01 */ li r3, 1
-/* 801DCE0C 001D8A6C 4E 80 00 20 */ blr
-lbl_801DCE10:
-/* 801DCE10 001D8A70 38 60 00 02 */ li r3, 2
-/* 801DCE14 001D8A74 4E 80 00 20 */ blr
-lbl_801DCE18:
-/* 801DCE18 001D8A78 38 60 00 03 */ li r3, 3
-/* 801DCE1C 001D8A7C 4E 80 00 20 */ blr
-lbl_801DCE20:
-/* 801DCE20 001D8A80 38 60 00 04 */ li r3, 4
-/* 801DCE24 001D8A84 4E 80 00 20 */ blr
-lbl_801DCE28:
-/* 801DCE28 001D8A88 38 60 00 05 */ li r3, 5
-/* 801DCE2C 001D8A8C 4E 80 00 20 */ blr
-lbl_801DCE30:
-/* 801DCE30 001D8A90 38 60 00 00 */ li r3, 0
-/* 801DCE34 001D8A94 4E 80 00 20 */ blr
-
.global func_801DCE38
func_801DCE38:
/* 801DCE38 001D8A98 38 00 00 01 */ li r0, 1
diff --git a/asm/code_801DCE6C_asm.s b/asm/code_801DCE6C_asm.s index 85522fc..1ee7626 100644 --- a/asm/code_801DCE6C_asm.s +++ b/asm/code_801DCE6C_asm.s @@ -290,8 +290,8 @@ lbl_801DD27C: /* 801DD28C 001D8EEC 38 21 00 10 */ addi r1, r1, 0x10
/* 801DD290 001D8EF0 4E 80 00 20 */ blr
-.global lbl_801DD294 -lbl_801DD294:
+.global func_801DD294 +func_801DD294:
/* 801DD294 001D8EF4 94 21 FF 40 */ stwu r1, -0xc0(r1)
/* 801DD298 001D8EF8 7C 08 02 A6 */ mflr r0
/* 801DD29C 001D8EFC 90 01 00 C4 */ stw r0, 0xc4(r1)
diff --git a/include/SDK/DVD/dvdfs.h b/include/SDK/DVD/dvdfs.h index 0067c68..7be2c08 100644 --- a/include/SDK/DVD/dvdfs.h +++ b/include/SDK/DVD/dvdfs.h @@ -12,7 +12,7 @@ typedef void (*DVDCallback)(s32 result, DVDFileInfo* fileInfo); struct DVDFileInfo
{
u8 unk0[0x34];
- u32 unk34;
+ size_t unk34;
u8 unk38[0x8];
void (*unk40)(s32, void*); // TODO: not a DVDFileCallback bc an unkClass* is passed as 2nd param?
void* unk44; //data cache start addr to invalidate
diff --git a/src/code_801DBE90.cpp b/src/code_801DBE90.cpp index 8f8386f..7e49642 100644 --- a/src/code_801DBE90.cpp +++ b/src/code_801DBE90.cpp @@ -43,7 +43,7 @@ extern u8 lbl_8063F31E; extern u8 lbl_8063F31F;
extern size_t lbl_8063F320;
extern unkClass* lbl_8063F324;
-extern u32 lbl_8063F328;
+extern s32 lbl_8063F328;
extern u32 lbl_8063F32C;
extern void (*lbl_8063F330)(u32);
@@ -84,7 +84,9 @@ void* func_801DD220(gUnkClass4*, unkClass*, void*, s32, s32); u32 func_801DCFE4(gUnkClass4*, unkClass*);
u32 func_801DD03C(gUnkClass4*, unkClass*, u32*);
-
+
+BOOL func_801DD294(gUnkClass4*, const char*, u32);
+
// TODO: return type
@@ -425,9 +427,10 @@ BOOL func_801DC6C4(unkClass* p1) return result;
}
-u32 func_801DC760(unkClass* p1)
+// get file size
+size_t func_801DC760(unkClass* p1)
{
- u32 sp8; // TODO: determine type
+ size_t sp8;
if (!lbl_8063F31E)
return 0;
func_801DC264();
@@ -595,6 +598,86 @@ void func_801DC9CC(u32 p1, u32) }
}
+// Load entire file contents into buffer
+u8* func_801DCBC0(const char* fileName, u32* fileSz)
+{
+ if (!func_801DC380(fileName))
+ return NULL;
+ unkClass* fp = func_801DC2D0(fileName);
+ if (!fp)
+ return NULL;
+ size_t size = (func_801DC760(fp) + 0x1F) & ~0x1F;
+ if (!size)
+ return NULL;
+ u8* buf = (u8*)func_801DAD64(size);
+ if (!buf)
+ return NULL;
+ size_t bytesRead = func_801DC3FC(fp, buf, size, 0);
+ if (bytesRead != size) {
+ func_801DAEA4(buf);
+ return NULL;
+ }
+ func_801DC6C4(fp);
+ if (fileSz)
+ *fileSz = size;
+ return buf;
+}
+
+void* func_801DCCAC(const char* fileName, MEMHeapHandle heap, u32* fileSz)
+{
+ if (!func_801DC380(fileName))
+ return NULL;
+ unkClass* fp = func_801DC2D0(fileName);
+ if (!fp)
+ return NULL;
+ size_t size = (func_801DC760(fp) + 0x1F) & ~0x1F;
+ if (!size)
+ return NULL;
+ u8* buf = (u8*)func_801DAC94(heap, size);
+ if (!buf)
+ return NULL;
+ size_t bytesRead = func_801DC3FC(fp, buf, size, 0);
+ if (bytesRead != size) {
+ func_801DAD48(heap, buf);
+ return NULL;
+ }
+ func_801DC6C4(fp);
+ if (fileSz)
+ *fileSz = size;
+ return buf;
+}
+
+u32 func_801DCD94(const char* fileName)
+{
+ if (lbl_8063F338)
+ return func_801DD294(lbl_8063F338, fileName, 0);
+ return 0;
+}
+
+void func_801DCDB8(void (*p1)(u32), void (*p2)(void))
+{
+ lbl_8063F330 = p1;
+ lbl_8063F334 = p2;
+}
+
+u32 func_801DCDC4(void)
+{
+ switch (lbl_8063F328) {
+ case 1: case 2:
+ return 1;
+ case 3: case 4:
+ return 2;
+ case 5: case 6:
+ return 3;
+ case 7: case 8:
+ return 4;
+ case 9: case 10:
+ return 5;
+ case 0: default:
+ return 0;
+ }
+}
+
|