diff options
author | Max <mparisi@stevens.edu> | 2020-10-27 15:09:41 -0400 |
---|---|---|
committer | Max <mparisi@stevens.edu> | 2020-10-27 15:09:41 -0400 |
commit | 69dd6927a2ec6791639065a70da615228ae362f6 (patch) | |
tree | b2c093a26d3ea19304b47024a5bf60dde10e444a | |
parent | 1f79672cc57db6176590219ec5e34bb6e077f03c (diff) |
match up to func_801DC7F8
-rw-r--r-- | asm/code_801DBE90_asm.s | 156 | ||||
-rw-r--r-- | include/SDK/DVD/dvd.h | 1 | ||||
-rw-r--r-- | include/SDK/DVD/dvdfs.h | 8 | ||||
-rw-r--r-- | src/code_801DBE90.cpp | 61 |
4 files changed, 63 insertions, 163 deletions
diff --git a/asm/code_801DBE90_asm.s b/asm/code_801DBE90_asm.s index 6d5ffeb..dfc764f 100644 --- a/asm/code_801DBE90_asm.s +++ b/asm/code_801DBE90_asm.s @@ -2,162 +2,6 @@ .section .text, "ax" # 0x80006980 - 0x803E1E60
-.global func_801DC5FC
-func_801DC5FC:
-/* 801DC5FC 001D825C 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 801DC600 001D8260 7C 08 02 A6 */ mflr r0
-/* 801DC604 001D8264 90 01 00 24 */ stw r0, 0x24(r1)
-/* 801DC608 001D8268 39 61 00 20 */ addi r11, r1, 0x20
-/* 801DC60C 001D826C 4B FE AB 1D */ bl _savegpr_27
-/* 801DC610 001D8270 88 0D A0 5E */ lbz r0, lbl_8063F31E-_SDA_BASE_(r13)
-/* 801DC614 001D8274 7C 7B 1B 78 */ mr r27, r3
-/* 801DC618 001D8278 7C 9C 23 78 */ mr r28, r4
-/* 801DC61C 001D827C 7C BD 2B 78 */ mr r29, r5
-/* 801DC620 001D8280 2C 00 00 00 */ cmpwi r0, 0
-/* 801DC624 001D8284 7C DE 33 78 */ mr r30, r6
-/* 801DC628 001D8288 7C FF 3B 78 */ mr r31, r7
-/* 801DC62C 001D828C 40 82 00 0C */ bne lbl_801DC638
-/* 801DC630 001D8290 38 60 FF FF */ li r3, -1
-/* 801DC634 001D8294 48 00 00 78 */ b lbl_801DC6AC
-lbl_801DC638:
-/* 801DC638 001D8298 4B FF FC 2D */ bl func_801DC264
-/* 801DC63C 001D829C 2C 1B 00 00 */ cmpwi r27, 0
-/* 801DC640 001D82A0 40 82 00 0C */ bne lbl_801DC64C
-/* 801DC644 001D82A4 38 60 FF FF */ li r3, -1
-/* 801DC648 001D82A8 48 00 00 64 */ b lbl_801DC6AC
-lbl_801DC64C:
-/* 801DC64C 001D82AC 57 80 06 FF */ clrlwi. r0, r28, 0x1b
-/* 801DC650 001D82B0 41 82 00 0C */ beq lbl_801DC65C
-/* 801DC654 001D82B4 38 60 FF FF */ li r3, -1
-/* 801DC658 001D82B8 48 00 00 54 */ b lbl_801DC6AC
-lbl_801DC65C:
-/* 801DC65C 001D82BC 57 A0 06 FF */ clrlwi. r0, r29, 0x1b
-/* 801DC660 001D82C0 41 82 00 0C */ beq lbl_801DC66C
-/* 801DC664 001D82C4 38 60 FF FF */ li r3, -1
-/* 801DC668 001D82C8 48 00 00 44 */ b lbl_801DC6AC
-lbl_801DC66C:
-/* 801DC66C 001D82CC 57 C0 07 BF */ clrlwi. r0, r30, 0x1e
-/* 801DC670 001D82D0 41 82 00 0C */ beq lbl_801DC67C
-/* 801DC674 001D82D4 38 60 FF FF */ li r3, -1
-/* 801DC678 001D82D8 48 00 00 34 */ b lbl_801DC6AC
-lbl_801DC67C:
-/* 801DC67C 001D82DC 2C 1F 00 00 */ cmpwi r31, 0
-/* 801DC680 001D82E0 41 80 00 0C */ blt lbl_801DC68C
-/* 801DC684 001D82E4 2C 1F 00 03 */ cmpwi r31, 3
-/* 801DC688 001D82E8 40 81 00 0C */ ble lbl_801DC694
-lbl_801DC68C:
-/* 801DC68C 001D82EC 38 60 FF FF */ li r3, -1
-/* 801DC690 001D82F0 48 00 00 1C */ b lbl_801DC6AC
-lbl_801DC694:
-/* 801DC694 001D82F4 7F 84 E3 78 */ mr r4, r28
-/* 801DC698 001D82F8 7F A5 EB 78 */ mr r5, r29
-/* 801DC69C 001D82FC 7F C6 F3 78 */ mr r6, r30
-/* 801DC6A0 001D8300 7F E7 FB 78 */ mr r7, r31
-/* 801DC6A4 001D8304 38 7B 00 04 */ addi r3, r27, 4
-/* 801DC6A8 001D8308 48 0A B8 FD */ bl DVDReadPrio
-lbl_801DC6AC:
-/* 801DC6AC 001D830C 39 61 00 20 */ addi r11, r1, 0x20
-/* 801DC6B0 001D8310 4B FE AA C5 */ bl _restgpr_27
-/* 801DC6B4 001D8314 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 801DC6B8 001D8318 7C 08 03 A6 */ mtlr r0
-/* 801DC6BC 001D831C 38 21 00 20 */ addi r1, r1, 0x20
-/* 801DC6C0 001D8320 4E 80 00 20 */ blr
-
-.global func_801DC6C4
-func_801DC6C4:
-/* 801DC6C4 001D8324 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 801DC6C8 001D8328 7C 08 02 A6 */ mflr r0
-/* 801DC6CC 001D832C 90 01 00 14 */ stw r0, 0x14(r1)
-/* 801DC6D0 001D8330 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 801DC6D4 001D8334 93 C1 00 08 */ stw r30, 8(r1)
-/* 801DC6D8 001D8338 7C 7E 1B 78 */ mr r30, r3
-/* 801DC6DC 001D833C 88 0D A0 5E */ lbz r0, lbl_8063F31E-_SDA_BASE_(r13)
-/* 801DC6E0 001D8340 2C 00 00 00 */ cmpwi r0, 0
-/* 801DC6E4 001D8344 40 82 00 0C */ bne lbl_801DC6F0
-/* 801DC6E8 001D8348 38 60 00 00 */ li r3, 0
-/* 801DC6EC 001D834C 48 00 00 5C */ b lbl_801DC748
-lbl_801DC6F0:
-/* 801DC6F0 001D8350 4B FF FB 75 */ bl func_801DC264
-/* 801DC6F4 001D8354 2C 1E 00 00 */ cmpwi r30, 0
-/* 801DC6F8 001D8358 40 82 00 0C */ bne lbl_801DC704
-/* 801DC6FC 001D835C 38 60 00 00 */ li r3, 0
-/* 801DC700 001D8360 48 00 00 48 */ b lbl_801DC748
-lbl_801DC704:
-/* 801DC704 001D8364 80 6D A0 78 */ lwz r3, lbl_8063F338-_SDA_BASE_(r13)
-/* 801DC708 001D8368 2C 03 00 00 */ cmpwi r3, 0
-/* 801DC70C 001D836C 41 82 00 24 */ beq lbl_801DC730
-/* 801DC710 001D8370 7F C4 F3 78 */ mr r4, r30
-/* 801DC714 001D8374 48 00 08 D1 */ bl func_801DCFE4
-/* 801DC718 001D8378 2C 03 00 00 */ cmpwi r3, 0
-/* 801DC71C 001D837C 41 82 00 14 */ beq lbl_801DC730
-/* 801DC720 001D8380 7F C3 F3 78 */ mr r3, r30
-/* 801DC724 001D8384 4B FF F8 3D */ bl func_801DBF60
-/* 801DC728 001D8388 38 60 00 01 */ li r3, 1
-/* 801DC72C 001D838C 48 00 00 1C */ b lbl_801DC748
-lbl_801DC730:
-/* 801DC730 001D8390 38 7E 00 04 */ addi r3, r30, 4
-/* 801DC734 001D8394 48 0A B5 A5 */ bl DVDClose
-/* 801DC738 001D8398 7C 7F 1B 78 */ mr r31, r3
-/* 801DC73C 001D839C 7F C3 F3 78 */ mr r3, r30
-/* 801DC740 001D83A0 4B FF F8 21 */ bl func_801DBF60
-/* 801DC744 001D83A4 7F E3 FB 78 */ mr r3, r31
-lbl_801DC748:
-/* 801DC748 001D83A8 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 801DC74C 001D83AC 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 801DC750 001D83B0 83 C1 00 08 */ lwz r30, 8(r1)
-/* 801DC754 001D83B4 7C 08 03 A6 */ mtlr r0
-/* 801DC758 001D83B8 38 21 00 10 */ addi r1, r1, 0x10
-/* 801DC75C 001D83BC 4E 80 00 20 */ blr
-
-.global func_801DC760
-func_801DC760:
-/* 801DC760 001D83C0 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 801DC764 001D83C4 7C 08 02 A6 */ mflr r0
-/* 801DC768 001D83C8 90 01 00 24 */ stw r0, 0x24(r1)
-/* 801DC76C 001D83CC 93 E1 00 1C */ stw r31, 0x1c(r1)
-/* 801DC770 001D83D0 7C 7F 1B 78 */ mr r31, r3
-/* 801DC774 001D83D4 88 0D A0 5E */ lbz r0, lbl_8063F31E-_SDA_BASE_(r13)
-/* 801DC778 001D83D8 2C 00 00 00 */ cmpwi r0, 0
-/* 801DC77C 001D83DC 40 82 00 0C */ bne lbl_801DC788
-/* 801DC780 001D83E0 38 60 00 00 */ li r3, 0
-/* 801DC784 001D83E4 48 00 00 44 */ b lbl_801DC7C8
-lbl_801DC788:
-/* 801DC788 001D83E8 4B FF FA DD */ bl func_801DC264
-/* 801DC78C 001D83EC 2C 1F 00 00 */ cmpwi r31, 0
-/* 801DC790 001D83F0 40 82 00 0C */ bne lbl_801DC79C
-/* 801DC794 001D83F4 38 60 00 00 */ li r3, 0
-/* 801DC798 001D83F8 48 00 00 30 */ b lbl_801DC7C8
-lbl_801DC79C:
-/* 801DC79C 001D83FC 80 6D A0 78 */ lwz r3, lbl_8063F338-_SDA_BASE_(r13)
-/* 801DC7A0 001D8400 2C 03 00 00 */ cmpwi r3, 0
-/* 801DC7A4 001D8404 41 82 00 20 */ beq lbl_801DC7C4
-/* 801DC7A8 001D8408 7F E4 FB 78 */ mr r4, r31
-/* 801DC7AC 001D840C 38 A1 00 08 */ addi r5, r1, 8
-/* 801DC7B0 001D8410 48 00 08 8D */ bl func_801DD03C
-/* 801DC7B4 001D8414 2C 03 00 00 */ cmpwi r3, 0
-/* 801DC7B8 001D8418 41 82 00 0C */ beq lbl_801DC7C4
-/* 801DC7BC 001D841C 80 61 00 08 */ lwz r3, 8(r1)
-/* 801DC7C0 001D8420 48 00 00 08 */ b lbl_801DC7C8
-lbl_801DC7C4:
-/* 801DC7C4 001D8424 80 7F 00 38 */ lwz r3, 0x38(r31)
-lbl_801DC7C8:
-/* 801DC7C8 001D8428 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 801DC7CC 001D842C 83 E1 00 1C */ lwz r31, 0x1c(r1)
-/* 801DC7D0 001D8430 7C 08 03 A6 */ mtlr r0
-/* 801DC7D4 001D8434 38 21 00 20 */ addi r1, r1, 0x20
-/* 801DC7D8 001D8438 4E 80 00 20 */ blr
-
-.global func_801DC7DC
-func_801DC7DC:
-/* 801DC7DC 001D843C 88 0D A0 5E */ lbz r0, lbl_8063F31E-_SDA_BASE_(r13)
-/* 801DC7E0 001D8440 2C 00 00 00 */ cmpwi r0, 0
-/* 801DC7E4 001D8444 40 82 00 0C */ bne lbl_801DC7F0
-/* 801DC7E8 001D8448 38 60 FF FF */ li r3, -1
-/* 801DC7EC 001D844C 4E 80 00 20 */ blr
-lbl_801DC7F0:
-/* 801DC7F0 001D8450 48 0A F6 DC */ b DVDGetDriveStatus
-/* 801DC7F4 001D8454 4E 80 00 20 */ blr
-
.global func_801DC7F8
func_801DC7F8:
/* 801DC7F8 001D8458 94 21 FF E0 */ stwu r1, -0x20(r1)
diff --git a/include/SDK/DVD/dvd.h b/include/SDK/DVD/dvd.h index 09a6c79..f10826f 100644 --- a/include/SDK/DVD/dvd.h +++ b/include/SDK/DVD/dvd.h @@ -15,6 +15,7 @@ typedef struct DVDDiskID DVDDiskID* DVDGetCurrentDiskID(void);
void DVDInit(void);
+s32 DVDGetDriveStatus(void);
#ifdef __cplusplus
}
diff --git a/include/SDK/DVD/dvdfs.h b/include/SDK/DVD/dvdfs.h index 8f95a94..0597e82 100644 --- a/include/SDK/DVD/dvdfs.h +++ b/include/SDK/DVD/dvdfs.h @@ -11,17 +11,21 @@ typedef void (*DVDCallback)(s32 result, DVDFileInfo* fileInfo); struct DVDFileInfo
{
- u8 unk0[0x40];
+ u8 unk0[0x34];
+ u32 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
- u32 unk48; // data cache region size
+ s32 unk48; // data cache region size
};
BOOL DVDOpen(const char*, DVDFileInfo*);
+BOOL DVDClose(DVDFileInfo*);
s32 DVDConvertPathToEntrynum(const char* fileName);
s32 DVDReadPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, s32 prio);
s32 DVDReadAsyncPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, DVDCallback callback, s32 prio);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/code_801DBE90.cpp b/src/code_801DBE90.cpp index 10a6e29..c8c2ad1 100644 --- a/src/code_801DBE90.cpp +++ b/src/code_801DBE90.cpp @@ -14,7 +14,7 @@ namespace //TODO: header/source
struct unkClass
{
- u8 unk0;
+ u8 unk0; // file open flag?
u8 unk1;
u8 unk2[0x2];
DVDFileInfo unk4;
@@ -73,6 +73,9 @@ s32 func_801DD084(gUnkClass4* p1, unkClass* p2, void* addr, s32 length, s32 offs void* func_801DD220(gUnkClass4*, unkClass*, void*, s32, s32);
+u32 func_801DCFE4(gUnkClass4*, unkClass*);
+
+u32 func_801DD03C(gUnkClass4*, unkClass*, u32*);
@@ -370,6 +373,7 @@ BOOL func_801DC4F0(unkClass* p1, void* p2, s32 p3, s32 p4, void (*p5)(s32, void* return FALSE;
if (p4 & 0x3)
return FALSE;
+
p1->unk4.unk44 = p2;
p1->unk4.unk48 = p3;
if (lbl_8063F338 && p1->unk1 && func_801DD220(lbl_8063F338, p1, p2, p3, p4))
@@ -377,13 +381,60 @@ BOOL func_801DC4F0(unkClass* p1, void* p2, s32 p3, s32 p4, void (*p5)(s32, void* return DVDReadAsyncPrio(&p1->unk4, p2, p3, p4, &func_801DBFEC, 2) != 0;
}
+// DVDReadPrio wrapper
+s32 func_801DC5FC(unkClass* p1, void* addr, s32 length, s32 offset, s32 prio)
+{
+ if (!lbl_8063F31E)
+ return -1;
+ func_801DC264();
+ if (!p1)
+ return -1;
+ if ((u32)addr & 0x1F)
+ return -1;
+ if (length & 0x1F)
+ return -1;
+ if (offset & 0x3)
+ return -1;
+
+ if (prio < 0 || prio > 3)
+ return -1;
+ return DVDReadPrio(&p1->unk4, addr, length, offset, prio);
+}
+BOOL func_801DC6C4(unkClass* p1)
+{
+ if (!lbl_8063F31E)
+ return FALSE;
+ func_801DC264();
+ if (!p1)
+ return FALSE;
+ if (lbl_8063F338 && func_801DCFE4(lbl_8063F338, p1)) {
+ func_801DBF60(p1);
+ return TRUE;
+ }
+ BOOL result = DVDClose(&p1->unk4);
+ func_801DBF60(p1);
+ return result;
+}
+u32 func_801DC760(unkClass* p1)
+{
+ u32 sp8; // TODO: determine type
+ if (!lbl_8063F31E)
+ return 0;
+ func_801DC264();
+ if (!p1)
+ return 0;
+ if (lbl_8063F338 && func_801DD03C(lbl_8063F338, p1, &sp8))
+ return sp8;
+ return p1->unk4.unk34;
+}
-
-
-
-
+//static
+s32 func_801DC7DC(void)
+{
+ return (!lbl_8063F31E) ? -1 : DVDGetDriveStatus();
+}
|