From ef72d46dca9a0436d6f4c480b8e9b46b9760306b Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Mon, 16 May 2022 16:42:10 -0700 Subject: [PATCH] JKRDvdAramRipper (#195) --- ...omDVDToAram__FP10JKRDvdFileUlUlUlUlUlPUl.s | 100 ----- .../JKRDvdAramRipper/__ct__12JKRADCommandFv.s | 17 - .../JKRDvdAramRipper/__dt__12JKRADCommandFv.s | 39 -- .../JKernel/JKRDvdAramRipper/func_802DA9C0.s | 49 -- ...FP10JKRDvdFileUl15JKRExpandSwitchUlUlPUl.s | 46 -- ...vdAramRipperFlUl15JKRExpandSwitchUlUlPUl.s | 44 -- include/JSystem/JKernel/JKRAramStream.h | 4 +- include/JSystem/JKernel/JKRDvdAramRipper.h | 33 +- include/JSystem/JKernel/JKRDvdFile.h | 7 +- include/dolphin/dvd/dvd.h | 2 +- libs/JSystem/JKernel/JKRAramStream.cpp | 1 + libs/JSystem/JKernel/JKRDvdAramRipper.cpp | 424 +++++++++++------- 12 files changed, 289 insertions(+), 477 deletions(-) delete mode 100644 asm/JSystem/JKernel/JKRDvdAramRipper/JKRDecompressFromDVDToAram__FP10JKRDvdFileUlUlUlUlUlPUl.s delete mode 100644 asm/JSystem/JKernel/JKRDvdAramRipper/__ct__12JKRADCommandFv.s delete mode 100644 asm/JSystem/JKernel/JKRDvdAramRipper/__dt__12JKRADCommandFv.s delete mode 100644 asm/JSystem/JKernel/JKRDvdAramRipper/func_802DA9C0.s delete mode 100644 asm/JSystem/JKernel/JKRDvdAramRipper/loadToAram__16JKRDvdAramRipperFP10JKRDvdFileUl15JKRExpandSwitchUlUlPUl.s delete mode 100644 asm/JSystem/JKernel/JKRDvdAramRipper/loadToAram__16JKRDvdAramRipperFlUl15JKRExpandSwitchUlUlPUl.s diff --git a/asm/JSystem/JKernel/JKRDvdAramRipper/JKRDecompressFromDVDToAram__FP10JKRDvdFileUlUlUlUlUlPUl.s b/asm/JSystem/JKernel/JKRDvdAramRipper/JKRDecompressFromDVDToAram__FP10JKRDvdFileUlUlUlUlUlPUl.s deleted file mode 100644 index 2b75ca8047..0000000000 --- a/asm/JSystem/JKernel/JKRDvdAramRipper/JKRDecompressFromDVDToAram__FP10JKRDvdFileUlUlUlUlUlPUl.s +++ /dev/null @@ -1,100 +0,0 @@ -lbl_802DAFE8: -/* 802DAFE8 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 802DAFEC 7C 08 02 A6 */ mflr r0 -/* 802DAFF0 90 01 00 34 */ stw r0, 0x34(r1) -/* 802DAFF4 39 61 00 30 */ addi r11, r1, 0x30 -/* 802DAFF8 48 08 71 D1 */ bl _savegpr_24 -/* 802DAFFC 7C 79 1B 78 */ mr r25, r3 -/* 802DB000 7C 9A 23 78 */ mr r26, r4 -/* 802DB004 7C BB 2B 78 */ mr r27, r5 -/* 802DB008 7C DC 33 78 */ mr r28, r6 -/* 802DB00C 7C FD 3B 78 */ mr r29, r7 -/* 802DB010 7D 1E 43 78 */ mr r30, r8 -/* 802DB014 7D 3F 4B 78 */ mr r31, r9 -/* 802DB018 48 06 26 DD */ bl OSDisableInterrupts -/* 802DB01C 7C 78 1B 78 */ mr r24, r3 -/* 802DB020 88 0D 8F 24 */ lbz r0, data_804514A4(r13) -/* 802DB024 28 00 00 00 */ cmplwi r0, 0 -/* 802DB028 40 82 00 18 */ bne lbl_802DB040 -/* 802DB02C 3C 60 80 43 */ lis r3, decompMutex@ha /* 0x804343C0@ha */ -/* 802DB030 38 63 43 C0 */ addi r3, r3, decompMutex@l /* 0x804343C0@l */ -/* 802DB034 48 06 3F D5 */ bl OSInitMutex -/* 802DB038 38 00 00 01 */ li r0, 1 -/* 802DB03C 98 0D 8F 24 */ stb r0, data_804514A4(r13) -lbl_802DB040: -/* 802DB040 7F 03 C3 78 */ mr r3, r24 -/* 802DB044 48 06 26 D9 */ bl OSRestoreInterrupts -/* 802DB048 3C 60 80 43 */ lis r3, decompMutex@ha /* 0x804343C0@ha */ -/* 802DB04C 38 63 43 C0 */ addi r3, r3, decompMutex@l /* 0x804343C0@l */ -/* 802DB050 48 06 3F F1 */ bl OSLockMutex -/* 802DB054 83 0D 83 54 */ lwz r24, sSZSBufferSize__16JKRDvdAramRipper(r13) -/* 802DB058 80 6D 8D F0 */ lwz r3, sSystemHeap__7JKRHeap(r13) -/* 802DB05C 7F 04 C3 78 */ mr r4, r24 -/* 802DB060 38 A0 00 20 */ li r5, 0x20 -/* 802DB064 4B FF 34 71 */ bl alloc__7JKRHeapFUli -/* 802DB068 90 6D 8E E8 */ stw r3, szpBuf(r13) -/* 802DB06C 7C 03 C2 14 */ add r0, r3, r24 -/* 802DB070 90 0D 8E EC */ stw r0, szpEnd(r13) -/* 802DB074 80 6D 8D F0 */ lwz r3, sSystemHeap__7JKRHeap(r13) -/* 802DB078 38 80 11 20 */ li r4, 0x1120 -/* 802DB07C 38 A0 00 00 */ li r5, 0 -/* 802DB080 4B FF 34 55 */ bl alloc__7JKRHeapFUli -/* 802DB084 90 6D 8E F0 */ stw r3, refBuf(r13) -/* 802DB088 38 03 11 20 */ addi r0, r3, 0x1120 -/* 802DB08C 90 0D 8E F4 */ stw r0, refEnd(r13) -/* 802DB090 90 6D 8E F8 */ stw r3, refCurrent(r13) -/* 802DB094 80 6D 8D F0 */ lwz r3, sSystemHeap__7JKRHeap(r13) -/* 802DB098 38 80 01 00 */ li r4, 0x100 -/* 802DB09C 38 A0 00 20 */ li r5, 0x20 -/* 802DB0A0 4B FF 34 35 */ bl alloc__7JKRHeapFUli -/* 802DB0A4 90 6D 8E FC */ stw r3, dmaBuf(r13) -/* 802DB0A8 38 03 01 00 */ addi r0, r3, 0x100 -/* 802DB0AC 90 0D 8F 00 */ stw r0, dmaEnd(r13) -/* 802DB0B0 90 6D 8F 04 */ stw r3, dmaCurrent(r13) -/* 802DB0B4 93 2D 8F 14 */ stw r25, srcFile(r13) -/* 802DB0B8 93 CD 8F 08 */ stw r30, srcOffset(r13) -/* 802DB0BC 7C 1E D8 50 */ subf r0, r30, r27 -/* 802DB0C0 90 0D 8F 0C */ stw r0, transLeft(r13) -/* 802DB0C4 93 AD 8F 18 */ stw r29, fileOffset(r13) -/* 802DB0C8 38 00 00 00 */ li r0, 0 -/* 802DB0CC 90 0D 8F 1C */ stw r0, readCount(r13) -/* 802DB0D0 93 8D 8F 20 */ stw r28, maxDest(r13) -/* 802DB0D4 28 1F 00 00 */ cmplwi r31, 0 -/* 802DB0D8 41 82 00 0C */ beq lbl_802DB0E4 -/* 802DB0DC 7F E3 FB 78 */ mr r3, r31 -/* 802DB0E0 48 00 00 08 */ b lbl_802DB0E8 -lbl_802DB0E4: -/* 802DB0E4 38 6D 8F 2C */ la r3, tsArea(r13) /* 804514AC-_SDA_BASE_ */ -lbl_802DB0E8: -/* 802DB0E8 90 6D 8F 28 */ stw r3, tsPtr(r13) -/* 802DB0EC 38 00 00 00 */ li r0, 0 -/* 802DB0F0 90 03 00 00 */ stw r0, 0(r3) -/* 802DB0F4 48 00 02 F5 */ bl firstSrcData__Fv -/* 802DB0F8 28 03 00 00 */ cmplwi r3, 0 -/* 802DB0FC 41 82 00 14 */ beq lbl_802DB110 -/* 802DB100 7F 44 D3 78 */ mr r4, r26 -/* 802DB104 48 00 00 5D */ bl decompSZS_subroutine__FPUcUl -/* 802DB108 7C 79 1B 78 */ mr r25, r3 -/* 802DB10C 48 00 00 08 */ b lbl_802DB114 -lbl_802DB110: -/* 802DB110 3B 20 FF FF */ li r25, -1 -lbl_802DB114: -/* 802DB114 80 6D 8E E8 */ lwz r3, szpBuf(r13) -/* 802DB118 38 80 00 00 */ li r4, 0 -/* 802DB11C 4B FF 33 E5 */ bl free__7JKRHeapFPvP7JKRHeap -/* 802DB120 80 6D 8E F0 */ lwz r3, refBuf(r13) -/* 802DB124 38 80 00 00 */ li r4, 0 -/* 802DB128 4B FF 33 D9 */ bl free__7JKRHeapFPvP7JKRHeap -/* 802DB12C 80 6D 8E FC */ lwz r3, dmaBuf(r13) -/* 802DB130 38 80 00 00 */ li r4, 0 -/* 802DB134 4B FF 33 CD */ bl free__7JKRHeapFPvP7JKRHeap -/* 802DB138 3C 60 80 43 */ lis r3, decompMutex@ha /* 0x804343C0@ha */ -/* 802DB13C 38 63 43 C0 */ addi r3, r3, decompMutex@l /* 0x804343C0@l */ -/* 802DB140 48 06 3F DD */ bl OSUnlockMutex -/* 802DB144 7F 23 CB 78 */ mr r3, r25 -/* 802DB148 39 61 00 30 */ addi r11, r1, 0x30 -/* 802DB14C 48 08 70 C9 */ bl _restgpr_24 -/* 802DB150 80 01 00 34 */ lwz r0, 0x34(r1) -/* 802DB154 7C 08 03 A6 */ mtlr r0 -/* 802DB158 38 21 00 30 */ addi r1, r1, 0x30 -/* 802DB15C 4E 80 00 20 */ blr diff --git a/asm/JSystem/JKernel/JKRDvdAramRipper/__ct__12JKRADCommandFv.s b/asm/JSystem/JKernel/JKRDvdAramRipper/__ct__12JKRADCommandFv.s deleted file mode 100644 index 20bf2616b4..0000000000 --- a/asm/JSystem/JKernel/JKRDvdAramRipper/__ct__12JKRADCommandFv.s +++ /dev/null @@ -1,17 +0,0 @@ -lbl_802DAF1C: -/* 802DAF1C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 802DAF20 7C 08 02 A6 */ mflr r0 -/* 802DAF24 90 01 00 14 */ stw r0, 0x14(r1) -/* 802DAF28 93 E1 00 0C */ stw r31, 0xc(r1) -/* 802DAF2C 7C 7F 1B 78 */ mr r31, r3 -/* 802DAF30 7F E4 FB 78 */ mr r4, r31 -/* 802DAF34 48 00 0E C9 */ bl __ct__10JSUPtrLinkFPv -/* 802DAF38 38 00 00 00 */ li r0, 0 -/* 802DAF3C 90 1F 00 48 */ stw r0, 0x48(r31) -/* 802DAF40 98 1F 00 4C */ stb r0, 0x4c(r31) -/* 802DAF44 7F E3 FB 78 */ mr r3, r31 -/* 802DAF48 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 802DAF4C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 802DAF50 7C 08 03 A6 */ mtlr r0 -/* 802DAF54 38 21 00 10 */ addi r1, r1, 0x10 -/* 802DAF58 4E 80 00 20 */ blr diff --git a/asm/JSystem/JKernel/JKRDvdAramRipper/__dt__12JKRADCommandFv.s b/asm/JSystem/JKernel/JKRDvdAramRipper/__dt__12JKRADCommandFv.s deleted file mode 100644 index c328dda91f..0000000000 --- a/asm/JSystem/JKernel/JKRDvdAramRipper/__dt__12JKRADCommandFv.s +++ /dev/null @@ -1,39 +0,0 @@ -lbl_802DAF5C: -/* 802DAF5C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 802DAF60 7C 08 02 A6 */ mflr r0 -/* 802DAF64 90 01 00 14 */ stw r0, 0x14(r1) -/* 802DAF68 93 E1 00 0C */ stw r31, 0xc(r1) -/* 802DAF6C 93 C1 00 08 */ stw r30, 8(r1) -/* 802DAF70 7C 7E 1B 79 */ or. r30, r3, r3 -/* 802DAF74 7C 9F 23 78 */ mr r31, r4 -/* 802DAF78 41 82 00 54 */ beq lbl_802DAFCC -/* 802DAF7C 88 1E 00 4C */ lbz r0, 0x4c(r30) -/* 802DAF80 28 00 00 01 */ cmplwi r0, 1 -/* 802DAF84 40 82 00 24 */ bne lbl_802DAFA8 -/* 802DAF88 80 7E 00 28 */ lwz r3, 0x28(r30) -/* 802DAF8C 28 03 00 00 */ cmplwi r3, 0 -/* 802DAF90 41 82 00 18 */ beq lbl_802DAFA8 -/* 802DAF94 38 80 00 01 */ li r4, 1 -/* 802DAF98 81 83 00 00 */ lwz r12, 0(r3) -/* 802DAF9C 81 8C 00 08 */ lwz r12, 8(r12) -/* 802DAFA0 7D 89 03 A6 */ mtctr r12 -/* 802DAFA4 4E 80 04 21 */ bctrl -lbl_802DAFA8: -/* 802DAFA8 28 1E 00 00 */ cmplwi r30, 0 -/* 802DAFAC 41 82 00 10 */ beq lbl_802DAFBC -/* 802DAFB0 7F C3 F3 78 */ mr r3, r30 -/* 802DAFB4 38 80 00 00 */ li r4, 0 -/* 802DAFB8 48 00 0E 5D */ bl __dt__10JSUPtrLinkFv -lbl_802DAFBC: -/* 802DAFBC 7F E0 07 35 */ extsh. r0, r31 -/* 802DAFC0 40 81 00 0C */ ble lbl_802DAFCC -/* 802DAFC4 7F C3 F3 78 */ mr r3, r30 -/* 802DAFC8 4B FF 3D 75 */ bl __dl__FPv -lbl_802DAFCC: -/* 802DAFCC 7F C3 F3 78 */ mr r3, r30 -/* 802DAFD0 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 802DAFD4 83 C1 00 08 */ lwz r30, 8(r1) -/* 802DAFD8 80 01 00 14 */ lwz r0, 0x14(r1) -/* 802DAFDC 7C 08 03 A6 */ mtlr r0 -/* 802DAFE0 38 21 00 10 */ addi r1, r1, 0x10 -/* 802DAFE4 4E 80 00 20 */ blr diff --git a/asm/JSystem/JKernel/JKRDvdAramRipper/func_802DA9C0.s b/asm/JSystem/JKernel/JKRDvdAramRipper/func_802DA9C0.s deleted file mode 100644 index 2b91670da6..0000000000 --- a/asm/JSystem/JKernel/JKRDvdAramRipper/func_802DA9C0.s +++ /dev/null @@ -1,49 +0,0 @@ -lbl_802DA9C0: -/* 802DA9C0 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 802DA9C4 7C 08 02 A6 */ mflr r0 -/* 802DA9C8 90 01 00 34 */ stw r0, 0x34(r1) -/* 802DA9CC 39 61 00 30 */ addi r11, r1, 0x30 -/* 802DA9D0 48 08 77 F9 */ bl _savegpr_24 -/* 802DA9D4 7C 78 1B 78 */ mr r24, r3 -/* 802DA9D8 7C 99 23 78 */ mr r25, r4 -/* 802DA9DC 7C BA 2B 78 */ mr r26, r5 -/* 802DA9E0 7C DB 33 78 */ mr r27, r6 -/* 802DA9E4 7C FC 3B 78 */ mr r28, r7 -/* 802DA9E8 7D 1D 43 78 */ mr r29, r8 -/* 802DA9EC 7D 3E 4B 78 */ mr r30, r9 -/* 802DA9F0 38 60 00 54 */ li r3, 0x54 -/* 802DA9F4 80 8D 8D F0 */ lwz r4, sSystemHeap__7JKRHeap(r13) -/* 802DA9F8 38 A0 FF FC */ li r5, -4 -/* 802DA9FC 4B FF 42 9D */ bl __nw__FUlP7JKRHeapi -/* 802DAA00 7C 7F 1B 79 */ or. r31, r3, r3 -/* 802DAA04 41 82 00 0C */ beq lbl_802DAA10 -/* 802DAA08 48 00 05 15 */ bl __ct__12JKRADCommandFv -/* 802DAA0C 7C 7F 1B 78 */ mr r31, r3 -lbl_802DAA10: -/* 802DAA10 93 1F 00 28 */ stw r24, 0x28(r31) -/* 802DAA14 93 3F 00 2C */ stw r25, 0x2c(r31) -/* 802DAA18 38 00 00 00 */ li r0, 0 -/* 802DAA1C 90 1F 00 30 */ stw r0, 0x30(r31) -/* 802DAA20 93 5F 00 34 */ stw r26, 0x34(r31) -/* 802DAA24 93 7F 00 38 */ stw r27, 0x38(r31) -/* 802DAA28 93 9F 00 3C */ stw r28, 0x3c(r31) -/* 802DAA2C 93 BF 00 40 */ stw r29, 0x40(r31) -/* 802DAA30 93 DF 00 44 */ stw r30, 0x44(r31) -/* 802DAA34 7F E3 FB 78 */ mr r3, r31 -/* 802DAA38 48 00 00 3D */ bl callCommand_Async__16JKRDvdAramRipperFP12JKRADCommand -/* 802DAA3C 28 03 00 00 */ cmplwi r3, 0 -/* 802DAA40 40 82 00 18 */ bne lbl_802DAA58 -/* 802DAA44 7F E3 FB 78 */ mr r3, r31 -/* 802DAA48 38 80 00 01 */ li r4, 1 -/* 802DAA4C 48 00 05 11 */ bl __dt__12JKRADCommandFv -/* 802DAA50 38 60 00 00 */ li r3, 0 -/* 802DAA54 48 00 00 08 */ b lbl_802DAA5C -lbl_802DAA58: -/* 802DAA58 7F E3 FB 78 */ mr r3, r31 -lbl_802DAA5C: -/* 802DAA5C 39 61 00 30 */ addi r11, r1, 0x30 -/* 802DAA60 48 08 77 B5 */ bl _restgpr_24 -/* 802DAA64 80 01 00 34 */ lwz r0, 0x34(r1) -/* 802DAA68 7C 08 03 A6 */ mtlr r0 -/* 802DAA6C 38 21 00 30 */ addi r1, r1, 0x30 -/* 802DAA70 4E 80 00 20 */ blr diff --git a/asm/JSystem/JKernel/JKRDvdAramRipper/loadToAram__16JKRDvdAramRipperFP10JKRDvdFileUl15JKRExpandSwitchUlUlPUl.s b/asm/JSystem/JKernel/JKRDvdAramRipper/loadToAram__16JKRDvdAramRipperFP10JKRDvdFileUl15JKRExpandSwitchUlUlPUl.s deleted file mode 100644 index 5afb489a90..0000000000 --- a/asm/JSystem/JKernel/JKRDvdAramRipper/loadToAram__16JKRDvdAramRipperFP10JKRDvdFileUl15JKRExpandSwitchUlUlPUl.s +++ /dev/null @@ -1,46 +0,0 @@ -lbl_802DA918: -/* 802DA918 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 802DA91C 7C 08 02 A6 */ mflr r0 -/* 802DA920 90 01 00 14 */ stw r0, 0x14(r1) -/* 802DA924 93 E1 00 0C */ stw r31, 0xc(r1) -/* 802DA928 93 C1 00 08 */ stw r30, 8(r1) -/* 802DA92C 7C 9E 23 78 */ mr r30, r4 -/* 802DA930 7C CA 33 78 */ mr r10, r6 -/* 802DA934 7C E0 3B 78 */ mr r0, r7 -/* 802DA938 7D 09 43 78 */ mr r9, r8 -/* 802DA93C 38 C0 00 00 */ li r6, 0 -/* 802DA940 7D 47 53 78 */ mr r7, r10 -/* 802DA944 7C 08 03 78 */ mr r8, r0 -/* 802DA948 48 00 00 79 */ bl loadToAram_Async__16JKRDvdAramRipperFP10JKRDvdFileUl15JKRExpandSwitchPFUl_vUlUlPUl -/* 802DA94C 7C 7F 1B 78 */ mr r31, r3 -/* 802DA950 38 80 00 00 */ li r4, 0 -/* 802DA954 48 00 04 F5 */ bl syncAram__16JKRDvdAramRipperFP12JKRADCommandi -/* 802DA958 80 1F 00 48 */ lwz r0, 0x48(r31) -/* 802DA95C 2C 00 00 00 */ cmpwi r0, 0 -/* 802DA960 40 80 00 18 */ bge lbl_802DA978 -/* 802DA964 7F E3 FB 78 */ mr r3, r31 -/* 802DA968 38 80 00 01 */ li r4, 1 -/* 802DA96C 48 00 05 F1 */ bl __dt__12JKRADCommandFv -/* 802DA970 38 60 00 00 */ li r3, 0 -/* 802DA974 48 00 00 34 */ b lbl_802DA9A8 -lbl_802DA978: -/* 802DA978 28 1E 00 00 */ cmplwi r30, 0 -/* 802DA97C 41 82 00 18 */ beq lbl_802DA994 -/* 802DA980 7F E3 FB 78 */ mr r3, r31 -/* 802DA984 38 80 00 01 */ li r4, 1 -/* 802DA988 48 00 05 D5 */ bl __dt__12JKRADCommandFv -/* 802DA98C 38 60 FF FF */ li r3, -1 -/* 802DA990 48 00 00 18 */ b lbl_802DA9A8 -lbl_802DA994: -/* 802DA994 83 DF 00 30 */ lwz r30, 0x30(r31) -/* 802DA998 7F E3 FB 78 */ mr r3, r31 -/* 802DA99C 38 80 00 01 */ li r4, 1 -/* 802DA9A0 48 00 05 BD */ bl __dt__12JKRADCommandFv -/* 802DA9A4 7F C3 F3 78 */ mr r3, r30 -lbl_802DA9A8: -/* 802DA9A8 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 802DA9AC 83 C1 00 08 */ lwz r30, 8(r1) -/* 802DA9B0 80 01 00 14 */ lwz r0, 0x14(r1) -/* 802DA9B4 7C 08 03 A6 */ mtlr r0 -/* 802DA9B8 38 21 00 10 */ addi r1, r1, 0x10 -/* 802DA9BC 4E 80 00 20 */ blr diff --git a/asm/JSystem/JKernel/JKRDvdAramRipper/loadToAram__16JKRDvdAramRipperFlUl15JKRExpandSwitchUlUlPUl.s b/asm/JSystem/JKernel/JKRDvdAramRipper/loadToAram__16JKRDvdAramRipperFlUl15JKRExpandSwitchUlUlPUl.s deleted file mode 100644 index 5fb3624ce7..0000000000 --- a/asm/JSystem/JKernel/JKRDvdAramRipper/loadToAram__16JKRDvdAramRipperFlUl15JKRExpandSwitchUlUlPUl.s +++ /dev/null @@ -1,44 +0,0 @@ -lbl_802DA874: -/* 802DA874 94 21 FE E0 */ stwu r1, -0x120(r1) -/* 802DA878 7C 08 02 A6 */ mflr r0 -/* 802DA87C 90 01 01 24 */ stw r0, 0x124(r1) -/* 802DA880 39 61 01 20 */ addi r11, r1, 0x120 -/* 802DA884 48 08 79 4D */ bl _savegpr_26 -/* 802DA888 7C 7A 1B 78 */ mr r26, r3 -/* 802DA88C 7C 9B 23 78 */ mr r27, r4 -/* 802DA890 7C BC 2B 78 */ mr r28, r5 -/* 802DA894 7C DD 33 78 */ mr r29, r6 -/* 802DA898 7C FE 3B 78 */ mr r30, r7 -/* 802DA89C 7D 1F 43 78 */ mr r31, r8 -/* 802DA8A0 38 61 00 08 */ addi r3, r1, 8 -/* 802DA8A4 4B FF EC E1 */ bl __ct__10JKRDvdFileFv -/* 802DA8A8 38 61 00 08 */ addi r3, r1, 8 -/* 802DA8AC 7F 44 D3 78 */ mr r4, r26 -/* 802DA8B0 4B FF F0 15 */ bl open__10JKRDvdFileFl -/* 802DA8B4 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 802DA8B8 40 82 00 18 */ bne lbl_802DA8D0 -/* 802DA8BC 38 61 00 08 */ addi r3, r1, 8 -/* 802DA8C0 38 80 FF FF */ li r4, -1 -/* 802DA8C4 4B FF EE 85 */ bl __dt__10JKRDvdFileFv -/* 802DA8C8 38 60 00 00 */ li r3, 0 -/* 802DA8CC 48 00 00 34 */ b lbl_802DA900 -lbl_802DA8D0: -/* 802DA8D0 38 61 00 08 */ addi r3, r1, 8 -/* 802DA8D4 7F 64 DB 78 */ mr r4, r27 -/* 802DA8D8 7F 85 E3 78 */ mr r5, r28 -/* 802DA8DC 7F A6 EB 78 */ mr r6, r29 -/* 802DA8E0 7F C7 F3 78 */ mr r7, r30 -/* 802DA8E4 7F E8 FB 78 */ mr r8, r31 -/* 802DA8E8 48 00 00 31 */ bl loadToAram__16JKRDvdAramRipperFP10JKRDvdFileUl15JKRExpandSwitchUlUlPUl -/* 802DA8EC 7C 7F 1B 78 */ mr r31, r3 -/* 802DA8F0 38 61 00 08 */ addi r3, r1, 8 -/* 802DA8F4 38 80 FF FF */ li r4, -1 -/* 802DA8F8 4B FF EE 51 */ bl __dt__10JKRDvdFileFv -/* 802DA8FC 7F E3 FB 78 */ mr r3, r31 -lbl_802DA900: -/* 802DA900 39 61 01 20 */ addi r11, r1, 0x120 -/* 802DA904 48 08 79 19 */ bl _restgpr_26 -/* 802DA908 80 01 01 24 */ lwz r0, 0x124(r1) -/* 802DA90C 7C 08 03 A6 */ mtlr r0 -/* 802DA910 38 21 01 20 */ addi r1, r1, 0x120 -/* 802DA914 4E 80 00 20 */ blr diff --git a/include/JSystem/JKernel/JKRAramStream.h b/include/JSystem/JKernel/JKRAramStream.h index 0ba3472383..b683ecb514 100644 --- a/include/JSystem/JKernel/JKRAramStream.h +++ b/include/JSystem/JKernel/JKRAramStream.h @@ -2,10 +2,10 @@ #define JKRARAMSTREAM_H #include "JSystem/JKernel/JKRThread.h" -#include "JSystem/JSupport/JSUFileStream.h" -#include "JSystem/JSupport/JSURandomInputStream.h" #include "dolphin/types.h" +class JSUFileInputStream; + class JKRAramStreamCommand { public: enum Type { diff --git a/include/JSystem/JKernel/JKRDvdAramRipper.h b/include/JSystem/JKernel/JKRDvdAramRipper.h index 0b0f9a7974..040015d0d7 100644 --- a/include/JSystem/JKernel/JKRDvdAramRipper.h +++ b/include/JSystem/JKernel/JKRDvdAramRipper.h @@ -2,23 +2,44 @@ #define JKRDVDARAMRIPPER_H #include "JSystem/JKernel/JKRDvdRipper.h" -#include "JSystem/JSupport/JSUFileStream.h" #include "dolphin/types.h" +class JKRAramBlock; +class JKRAramStreamCommand; + class JKRADCommand { public: JKRADCommand(); ~JKRADCommand(); + + /* 0x00 */ JSULink mLink; + /* 0x10 */ int field_0x10; + /* 0x14 */ int field_0x14; + /* 0x18 */ int field_0x18; + /* 0x1C */ int field_0x1c; + /* 0x20 */ int field_0x20; + /* 0x24 */ int field_0x24; + /* 0x28 */ JKRDvdFile* mDvdFile; + /* 0x2C */ u32 field_0x2c; + /* 0x30 */ JKRAramBlock* mBlock; + /* 0x34 */ int field_0x34; + /* 0x38 */ void (*field_0x38)(u32); + /* 0x3C */ u32 field_0x3c; + /* 0x40 */ u32 field_0x40; + /* 0x44 */ u32* field_0x44; + /* 0x48 */ int field_0x48; + /* 0x4C */ u8 field_0x4c; + /* 0x50 */ JKRAramStreamCommand* mStreamCommand; }; class JKRDvdFile; class JKRDvdAramRipper { public: - static void loadToAram(long, u32, JKRExpandSwitch, u32, u32, u32*); - static void loadToAram(JKRDvdFile*, u32, JKRExpandSwitch, u32, u32, u32*); - static void loadToAram_Async(JKRDvdFile*, u32, JKRExpandSwitch, void (*)(u32), u32, u32, u32*); - static void callCommand_Async(JKRADCommand*); - static void syncAram(JKRADCommand*, int); + static JKRAramBlock* loadToAram(long, u32, JKRExpandSwitch, u32, u32, u32*); + static JKRAramBlock* loadToAram(JKRDvdFile*, u32, JKRExpandSwitch, u32, u32, u32*); + static JKRADCommand* loadToAram_Async(JKRDvdFile*, u32, JKRExpandSwitch, void (*)(u32), u32, u32, u32*); + static JKRADCommand* callCommand_Async(JKRADCommand*); + static bool syncAram(JKRADCommand*, int); // TODO: fix type static u8 sDvdAramAsyncList[12]; diff --git a/include/JSystem/JKernel/JKRDvdFile.h b/include/JSystem/JKernel/JKRDvdFile.h index 2fbb583b6f..a777f83047 100644 --- a/include/JSystem/JKernel/JKRDvdFile.h +++ b/include/JSystem/JKernel/JKRDvdFile.h @@ -7,6 +7,7 @@ #include "dolphin/types.h" class JKRADCommand; +class JKRAramBlock; class JSUFileInputStream; class JKRDvdFile : public JKRFile { public: @@ -35,9 +36,9 @@ private: /* 0x04 */ // JKRFile /* 0x1C */ OSMutex mMutex1; /* 0x34 */ OSMutex mMutex2; - /* 0x4C */ u32 field_0x4c; - /* 0x50 */ u32 field_0x50; - /* 0x54 */ u32 field_0x54; + /* 0x4C */ JKRAramBlock* mBlock; + /* 0x50 */ OSThread* field_0x50; + /* 0x54 */ JSUFileInputStream* mFileStream; /* 0x58 */ u32 field_0x58; /* 0x5C */ DVDFileInfo mFileInfo; /* 0x98 */ JKRDvdFile* mDvdFile; diff --git a/include/dolphin/dvd/dvd.h b/include/dolphin/dvd/dvd.h index dd345442ed..12316f432f 100644 --- a/include/dolphin/dvd/dvd.h +++ b/include/dolphin/dvd/dvd.h @@ -73,7 +73,7 @@ struct DVDFileInfo { extern "C" { s32 DVDOpen(const char*, DVDFileInfo*); s32 DVDClose(DVDFileInfo*); -void DVDReadPrio(DVDFileInfo*, void*, s32, s32, s32); +s32 DVDReadPrio(DVDFileInfo*, void*, s32, s32, s32); DVDDiskID* DVDGetCurrentDiskID(void); s32 DVDFastOpen(long, DVDFileInfo*); int DVDGetCommandBlockStatus(DVDCommandBlock*); diff --git a/libs/JSystem/JKernel/JKRAramStream.cpp b/libs/JSystem/JKernel/JKRAramStream.cpp index e07e68b87d..af76d5559b 100644 --- a/libs/JSystem/JKernel/JKRAramStream.cpp +++ b/libs/JSystem/JKernel/JKRAramStream.cpp @@ -6,6 +6,7 @@ #include "JSystem/JKernel/JKRAramStream.h" #include "JSystem/JKernel/JKRAramPiece.h" #include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JSupport/JSUFileStream.h" #include "dol2asm.h" #include "global.h" diff --git a/libs/JSystem/JKernel/JKRDvdAramRipper.cpp b/libs/JSystem/JKernel/JKRDvdAramRipper.cpp index a43304e75e..03b107e8f0 100644 --- a/libs/JSystem/JKernel/JKRDvdAramRipper.cpp +++ b/libs/JSystem/JKernel/JKRDvdAramRipper.cpp @@ -3,28 +3,21 @@ // Translation Unit: JKRDvdAramRipper // -// #include "JSystem/JKernel/JKRDvdAramRipper.h" +#include "JSystem/JKernel/JKRDvdAramRipper.h" +#include "JSystem/JKernel/JKRAram.h" +#include "JSystem/JKernel/JKRAramStream.h" +#include "JSystem/JKernel/JKRDvdFile.h" +// #include "JSystem/JSupport/JSUFileStream.h" #include "dol2asm.h" +#include "dolphin/os/OSCache.h" #include "dolphin/types.h" +#include "dolphin/vi/vi.h" +#include "global.h" // // Types: // -struct JSUPtrLink { - /* 802DBDFC */ JSUPtrLink(void*); - /* 802DBE14 */ ~JSUPtrLink(); -}; - -struct JSUPtrList { - /* 802DBEAC */ ~JSUPtrList(); - /* 802DBF14 */ void initiate(); - /* 802DBF4C */ void append(JSUPtrLink*); - /* 802DC15C */ void remove(JSUPtrLink*); -}; - -template -struct JSUList {}; /* JSUList */ struct JSUList__template10 { /* 802DB62C */ void func_802DB62C(void* _this); @@ -34,90 +27,32 @@ struct JSUInputStream { /* 802DC23C */ ~JSUInputStream(); }; -struct JKRFile {}; - struct JSUFileInputStream { /* 802DADD8 */ ~JSUFileInputStream(); /* 802DC638 */ JSUFileInputStream(JKRFile*); + int padding[4]; }; -struct JKRHeap { - /* 802CE4D4 */ void alloc(u32, int); - /* 802CE500 */ void free(void*, JKRHeap*); - - static u8 sSystemHeap[4]; -}; - -struct JKRExpandSwitch {}; - -struct JKRDvdFile { - /* 802D9584 */ JKRDvdFile(); - /* 802D9748 */ ~JKRDvdFile(); - /* 802D98C4 */ void open(s32); -}; - -struct JKRADCommand { - /* 802DAF1C */ JKRADCommand(); - /* 802DAF5C */ ~JKRADCommand(); -}; - -struct JKRDvdAramRipper { - /* 802DA874 */ void loadToAram(s32, u32, JKRExpandSwitch, u32, u32, u32*); - /* 802DA918 */ void loadToAram(JKRDvdFile*, u32, JKRExpandSwitch, u32, u32, u32*); - /* 802DA9C0 */ void loadToAram_Async(JKRDvdFile*, u32, JKRExpandSwitch, void (*)(u32), u32, u32, - u32*); - /* 802DAA74 */ void callCommand_Async(JKRADCommand*); - /* 802DAE48 */ void syncAram(JKRADCommand*, int); - - static u8 sDvdAramAsyncList[12]; - static u32 sSZSBufferSize; -}; - -struct JKRDecomp { - /* 802DBCF8 */ void checkCompressed(u8*); -}; - -struct JKRAramStreamCommand {}; - -struct JKRAramStream { - /* 802D3ED0 */ void write_StreamToAram_Async(JSUFileInputStream*, u32, u32, u32, u32*); - /* 802D3FA0 */ void sync(JKRAramStreamCommand*, int); -}; - -struct JKRAramBlock {}; - struct JKRAramPiece { /* 802D3838 */ void orderSync(int, u32, u32, u32, JKRAramBlock*); }; -struct JKRAramHeap { - struct EAllocMode {}; - - /* 802D2FBC */ void alloc(u32, JKRAramHeap::EAllocMode); -}; - -struct JKRAram { - static u8 sAramObject[4]; -}; - // // Forward References: // -extern "C" void loadToAram__16JKRDvdAramRipperFlUl15JKRExpandSwitchUlUlPUl(); -extern "C" void loadToAram__16JKRDvdAramRipperFP10JKRDvdFileUl15JKRExpandSwitchUlUlPUl(); -extern "C" void -loadToAram_Async__16JKRDvdAramRipperFP10JKRDvdFileUl15JKRExpandSwitchPFUl_vUlUlPUl(); -extern "C" void callCommand_Async__16JKRDvdAramRipperFP12JKRADCommand(); +static int JKRDecompressFromDVDToAram(JKRDvdFile*, u32, u32, u32, u32, u32, u32*); +static int decompSZS_subroutine(u8*, u32); +static u8* firstSrcData(); +static u8* nextSrcData(u8*); +static int dmaBufferFlush(u32); + extern "C" void __dt__18JSUFileInputStreamFv(); -extern "C" void syncAram__16JKRDvdAramRipperFP12JKRADCommandi(); -extern "C" void __ct__12JKRADCommandFv(); -extern "C" void __dt__12JKRADCommandFv(); -extern "C" static void JKRDecompressFromDVDToAram__FP10JKRDvdFileUlUlUlUlUlPUl(); -extern "C" static void decompSZS_subroutine__FPUcUl(); -extern "C" static void firstSrcData__Fv(); -extern "C" static void nextSrcData__FPUc(); -extern "C" static void dmaBufferFlush__FUl(); +extern "C" static int JKRDecompressFromDVDToAram__FP10JKRDvdFileUlUlUlUlUlPUl(); +extern "C" static int decompSZS_subroutine__FPUcUl(); +extern "C" static u8* firstSrcData__Fv(); +extern "C" static u8* nextSrcData__FPUc(); +extern "C" static int dmaBufferFlush__FUl(); extern "C" void __sinit_JKRDvdAramRipper_cpp(); extern "C" void func_802DB62C(void* _this); extern "C" u8 sDvdAramAsyncList__16JKRDvdAramRipper[12]; @@ -136,9 +71,6 @@ extern "C" void alloc__11JKRAramHeapFUlQ211JKRAramHeap10EAllocMode(); extern "C" void orderSync__12JKRAramPieceFiUlUlUlP12JKRAramBlock(); extern "C" void write_StreamToAram_Async__13JKRAramStreamFP18JSUFileInputStreamUlUlUlPUl(); extern "C" void sync__13JKRAramStreamFP20JKRAramStreamCommandi(); -extern "C" void __ct__10JKRDvdFileFv(); -extern "C" void __dt__10JKRDvdFileFv(); -extern "C" void open__10JKRDvdFileFl(); extern "C" void checkCompressed__9JKRDecompFPUc(); extern "C" void __ct__10JSUPtrLinkFPv(); extern "C" void __dt__10JSUPtrLinkFv(); @@ -148,15 +80,6 @@ extern "C" void append__10JSUPtrListFP10JSUPtrLink(); extern "C" void remove__10JSUPtrListFP10JSUPtrLink(); extern "C" void __dt__14JSUInputStreamFv(); extern "C" void __ct__18JSUFileInputStreamFP7JKRFile(); -extern "C" void DCInvalidateRange(); -extern "C" void OSDisableInterrupts(); -extern "C" void OSRestoreInterrupts(); -extern "C" void OSInitMutex(); -extern "C" void OSLockMutex(); -extern "C" void OSUnlockMutex(); -extern "C" void OSGetCurrentThread(); -extern "C" void DVDReadPrio(); -extern "C" void VIWaitForRetrace(); extern "C" void __register_global_object(); extern "C" void _savegpr_23(); extern "C" void _savegpr_24(); @@ -179,40 +102,57 @@ extern "C" u8 sAramObject__7JKRAram[4]; /* 802DA874-802DA918 2D51B4 00A4+00 0/0 3/3 0/0 .text * loadToAram__16JKRDvdAramRipperFlUl15JKRExpandSwitchUlUlPUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JKRDvdAramRipper::loadToAram(s32 param_0, u32 param_1, JKRExpandSwitch param_2, - u32 param_3, u32 param_4, u32* param_5) { - nofralloc -#include "asm/JSystem/JKernel/JKRDvdAramRipper/loadToAram__16JKRDvdAramRipperFlUl15JKRExpandSwitchUlUlPUl.s" +JKRAramBlock* JKRDvdAramRipper::loadToAram(s32 entryNumber, u32 param_1, JKRExpandSwitch param_2, + u32 param_3, u32 param_4, u32* param_5) { + JKRDvdFile dvdFile; + if (!dvdFile.open(entryNumber)) { + return NULL; + } else { + return loadToAram(&dvdFile, param_1, param_2, param_3, param_4, param_5); + } } -#pragma pop /* 802DA918-802DA9C0 2D5258 00A8+00 1/1 0/0 0/0 .text * loadToAram__16JKRDvdAramRipperFP10JKRDvdFileUl15JKRExpandSwitchUlUlPUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JKRDvdAramRipper::loadToAram(JKRDvdFile* param_0, u32 param_1, JKRExpandSwitch param_2, - u32 param_3, u32 param_4, u32* param_5) { - nofralloc -#include "asm/JSystem/JKernel/JKRDvdAramRipper/loadToAram__16JKRDvdAramRipperFP10JKRDvdFileUl15JKRExpandSwitchUlUlPUl.s" +JKRAramBlock* JKRDvdAramRipper::loadToAram(JKRDvdFile* dvdFile, u32 param_1, + JKRExpandSwitch param_2, u32 param_3, u32 param_4, + u32* param_5) { + JKRADCommand* command = + loadToAram_Async(dvdFile, param_1, param_2, NULL, param_3, param_4, param_5); + syncAram(command, 0); + if (command->field_0x48 < 0) { + delete command; + return NULL; + } + if (param_1) { + delete command; + return (JKRAramBlock*)-1; + } + JKRAramBlock* result = command->mBlock; + delete command; + return result; } -#pragma pop /* 802DA9C0-802DAA74 2D5300 00B4+00 1/1 0/0 0/0 .text * loadToAram_Async__16JKRDvdAramRipperFP10JKRDvdFileUl15JKRExpandSwitchPFUl_vUlUlPUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JKRDvdAramRipper::loadToAram_Async(JKRDvdFile* param_0, u32 param_1, - JKRExpandSwitch param_2, void (*param_3)(u32), - u32 param_4, u32 param_5, u32* param_6) { - nofralloc -#include "asm/JSystem/JKernel/JKRDvdAramRipper/func_802DA9C0.s" +JKRADCommand* JKRDvdAramRipper::loadToAram_Async(JKRDvdFile* dvdFile, u32 param_1, + JKRExpandSwitch param_2, void (*param_3)(u32), + u32 param_4, u32 param_5, u32* param_6) { + JKRADCommand* command = new (JKRHeap::sSystemHeap, -4) JKRADCommand(); + command->mDvdFile = dvdFile; + command->field_0x2c = param_1; + command->mBlock = NULL; + command->field_0x34 = param_2; + command->field_0x38 = param_3; + command->field_0x3c = param_4; + command->field_0x40 = param_5; + command->field_0x44 = param_6; + if (!callCommand_Async(command)) { + delete command; + return NULL; + } + return command; } -#pragma pop /* ############################################################################################## */ /* 804343A8-804343B4 0610C8 000C+00 1/1 0/0 0/0 .bss @301 */ @@ -222,18 +162,120 @@ static u8 lit_301[12]; u8 JKRDvdAramRipper::sDvdAramAsyncList[12]; /* 804508D0-804508D4 000350 0004+00 3/3 0/0 0/0 .sdata None */ -SECTION_SDATA static u32 data_804508D0 = 0x01000000; +SECTION_SDATA static u8 data_804508D0 = 0x01; /* 802DAA74-802DADD8 2D53B4 0364+00 1/1 0/0 0/0 .text * callCommand_Async__16JKRDvdAramRipperFP12JKRADCommand */ +#ifdef NONMATCHING +JKRADCommand* JKRDvdAramRipper::callCommand_Async(JKRADCommand* command) { + s32 uncompressedSize; + bool bVar1 = true; + JKRDvdFile* dvdFile = command->mDvdFile; + s32 compression = 0; + OSLockMutex(&dvdFile->mMutex2); + if (command->field_0x44) { + *command->field_0x44 = 0; + } + if (dvdFile->field_0x50) { + bVar1 = false; + } else { + dvdFile->field_0x50 = OSGetCurrentThread(); + JSUFileInputStream* stream = new (JKRHeap::sSystemHeap, -4) JSUFileInputStream(dvdFile); + dvdFile->mFileStream = stream; + u32 fileSize = dvdFile->getFileSize(); + if (command->field_0x40 && fileSize > command->field_0x40) { + fileSize = command->field_0x40; + } + fileSize = ALIGN_NEXT(fileSize, 0x20); + if (command->field_0x34 == 1) { + u8 buffer[0x40]; + u8* bufPtr = (u8*)ALIGN_NEXT((u32)&buffer, 0x20); + while (true) { + if (DVDReadPrio(&dvdFile->mFileInfo, bufPtr, 0x20, 0, 2) >= 0) { + break; + } + if (data_804508D0 == 0) { + delete stream; + return NULL; + } + VIWaitForRetrace(); + } + DCInvalidateRange(bufPtr, 0x20); + JKRCompression tmpCompression = JKRDecomp::checkCompressed(bufPtr); + if (tmpCompression == 3) { + tmpCompression = 0; + } + compression = tmpCompression; + uncompressedSize = + bufPtr[4] << 0x18 | bufPtr[5] << 0x10 | bufPtr[6] << 0x08 | bufPtr[7]; + if (command->field_0x40 && command->field_0x40 < uncompressedSize) { + uncompressedSize = command->field_0x40; + } + } + if (compression == 0) { + command->field_0x34 = 0; + } + if (command->field_0x34 == 1) { + if (command->field_0x2c == 0 && command->mBlock == NULL) { + command->mBlock = + JKRAram::getAramHeap()->alloc(uncompressedSize, JKRAramHeap::HEAD); + if (command->mBlock) { + command->field_0x2c = command->mBlock->mAddress; + } + dvdFile->mBlock = command->mBlock; + } + if (command->mBlock) { + command->field_0x2c = command->mBlock->mAddress; + } + if (command->field_0x2c == 0) { + dvdFile->field_0x50 = NULL; + return NULL; + } + } else { + if (command->field_0x2c == 0 && !command->mBlock) { + command->mBlock = JKRAram::getAramHeap()->alloc(fileSize, JKRAramHeap::HEAD); + } + if (command->mBlock) { + command->field_0x2c = command->mBlock->mAddress; + } + if (command->field_0x2c == 0) { + dvdFile->field_0x50 = NULL; + return NULL; + } + } + if (compression == 0) { + command->mStreamCommand = JKRAramStream::write_StreamToAram_Async( + stream, command->field_0x2c, fileSize - command->field_0x3c, command->field_0x3c, + command->field_0x44); + } else if (compression == 1) { + command->mStreamCommand = JKRAramStream::write_StreamToAram_Async( + stream, command->field_0x2c, fileSize - command->field_0x3c, command->field_0x3c, + command->field_0x44); + } else if (compression == 2) { + command->mStreamCommand = NULL; + JKRDecompressFromDVDToAram(command->mDvdFile, command->field_0x2c, fileSize, + uncompressedSize, command->field_0x3c, 0, + command->field_0x44); + } + if (!command->field_0x38) { + (*((JSUList*)&sDvdAramAsyncList)).append(&command->mLink); + } else { + command->field_0x38((u32)command); + } + } + OSUnlockMutex(&dvdFile->mMutex2); + return bVar1 == true ? command : NULL; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JKRDvdAramRipper::callCommand_Async(JKRADCommand* param_0) { +asm JKRADCommand* JKRDvdAramRipper::callCommand_Async(JKRADCommand* command) { nofralloc #include "asm/JSystem/JKernel/JKRDvdAramRipper/callCommand_Async__16JKRDvdAramRipperFP12JKRADCommand.s" } #pragma pop +#endif /* 802DADD8-802DAE48 2D5718 0070+00 0/0 1/0 0/0 .text __dt__18JSUFileInputStreamFv */ #pragma push @@ -247,114 +289,156 @@ asm JSUFileInputStream::~JSUFileInputStream() { /* 802DAE48-802DAF1C 2D5788 00D4+00 1/1 0/0 0/0 .text * syncAram__16JKRDvdAramRipperFP12JKRADCommandi */ +#ifdef NONMATCHING +bool JKRDvdAramRipper::syncAram(JKRADCommand* command, int param_1) { + JKRDvdFile* dvdFile = command->mDvdFile; + OSLockMutex(&dvdFile->mMutex2); + if (command->mStreamCommand) { + JKRAramStreamCommand* var1 = JKRAramStream::sync(command->mStreamCommand, param_1); + command->field_0x48 = -(var1 == NULL); + if (param_1 != 0 && var1 == NULL) { + OSUnlockMutex(&dvdFile->mMutex2); + return false; + } + } + (*((JSUList*)&sDvdAramAsyncList)).remove(&command->mLink); + if (command->mStreamCommand) { + delete command->mStreamCommand; + } + delete dvdFile->mFileStream; + dvdFile->field_0x50 = NULL; + OSUnlockMutex(&dvdFile->mMutex2); + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JKRDvdAramRipper::syncAram(JKRADCommand* param_0, int param_1) { +asm bool JKRDvdAramRipper::syncAram(JKRADCommand* param_0, int param_1) { nofralloc #include "asm/JSystem/JKernel/JKRDvdAramRipper/syncAram__16JKRDvdAramRipperFP12JKRADCommandi.s" } #pragma pop +#endif /* 802DAF1C-802DAF5C 2D585C 0040+00 1/1 0/0 0/0 .text __ct__12JKRADCommandFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JKRADCommand::JKRADCommand() { - nofralloc -#include "asm/JSystem/JKernel/JKRDvdAramRipper/__ct__12JKRADCommandFv.s" +JKRADCommand::JKRADCommand() : mLink(this) { + field_0x48 = 0; + field_0x4c = 0; } -#pragma pop /* 802DAF5C-802DAFE8 2D589C 008C+00 2/2 0/0 0/0 .text __dt__12JKRADCommandFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JKRADCommand::~JKRADCommand() { - nofralloc -#include "asm/JSystem/JKernel/JKRDvdAramRipper/__dt__12JKRADCommandFv.s" +JKRADCommand::~JKRADCommand() { + if (field_0x4c == 1) { + delete mDvdFile; + } } -#pragma pop /* ############################################################################################## */ /* 804343C0-804343D8 0610E0 0018+00 1/1 0/0 0/0 .bss decompMutex */ -static u8 decompMutex[24]; +static OSMutex decompMutex; /* 804508D4-804508D8 000354 0004+00 1/1 1/1 0/0 .sdata sSZSBufferSize__16JKRDvdAramRipper */ SECTION_SDATA u32 JKRDvdAramRipper::sSZSBufferSize = 0x00000400; /* 80451468-8045146C 000968 0004+00 3/3 0/0 0/0 .sbss szpBuf */ -static u8 szpBuf[4]; +static u8* szpBuf; /* 8045146C-80451470 00096C 0004+00 3/3 0/0 0/0 .sbss szpEnd */ -static u8 szpEnd[4]; +static u8* szpEnd; /* 80451470-80451474 000970 0004+00 2/2 0/0 0/0 .sbss refBuf */ -static u8 refBuf[4]; +static u8* refBuf; /* 80451474-80451478 000974 0004+00 2/2 0/0 0/0 .sbss refEnd */ -static u8 refEnd[4]; +static u8* refEnd; /* 80451478-8045147C 000978 0004+00 2/2 0/0 0/0 .sbss refCurrent */ -static u8 refCurrent[4]; +static u8* refCurrent; /* 8045147C-80451480 00097C 0004+00 2/2 0/0 0/0 .sbss dmaBuf */ -static u8 dmaBuf[4]; +static u8* dmaBuf; /* 80451480-80451484 000980 0004+00 2/2 0/0 0/0 .sbss dmaEnd */ -static u8 dmaEnd[4]; +static u8* dmaEnd; /* 80451484-80451488 000984 0004+00 3/3 0/0 0/0 .sbss dmaCurrent */ -static u8 dmaCurrent[4]; +static u8* dmaCurrent; /* 80451488-8045148C 000988 0004+00 3/3 0/0 0/0 .sbss srcOffset */ -static u8 srcOffset[4]; +static u32 srcOffset; /* 8045148C-80451490 00098C 0004+00 4/4 0/0 0/0 .sbss transLeft */ -static u8 transLeft[4]; +static u32 transLeft; /* 80451490-80451494 000990 0004+00 3/3 0/0 0/0 .sbss srcLimit */ -static u8 srcLimit[4]; +static int srcLimit; /* 80451494-80451498 000994 0004+00 3/3 0/0 0/0 .sbss srcFile */ -static u8 srcFile[4]; +static JKRDvdFile* srcFile; /* 80451498-8045149C 000998 0004+00 2/2 0/0 0/0 .sbss fileOffset */ -static u8 fileOffset[4]; +static u32 fileOffset; /* 8045149C-804514A0 00099C 0004+00 2/2 0/0 0/0 .sbss readCount */ -static u8 readCount[4]; +static int readCount; /* 804514A0-804514A4 0009A0 0004+00 2/2 0/0 0/0 .sbss maxDest */ -static u8 maxDest[4]; +static u32 maxDest; /* 804514A4-804514A8 0009A4 0004+00 1/1 0/0 0/0 .sbss None */ -static u8 data_804514A4[4]; +static bool data_804514A4; /* 804514A8-804514AC 0009A8 0004+00 2/2 0/0 0/0 .sbss tsPtr */ -static u8 tsPtr[4]; +static u32* tsPtr; /* 804514AC-804514B0 0009AC 0004+00 1/1 0/0 0/0 .sbss tsArea */ -static u8 tsArea[4]; +static u32 tsArea; /* 802DAFE8-802DB160 2D5928 0178+00 1/1 0/0 0/0 .text * JKRDecompressFromDVDToAram__FP10JKRDvdFileUlUlUlUlUlPUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void JKRDecompressFromDVDToAram(JKRDvdFile* param_0, u32 param_1, u32 param_2, - u32 param_3, u32 param_4, u32 param_5, u32* param_6) { - nofralloc -#include "asm/JSystem/JKernel/JKRDvdAramRipper/JKRDecompressFromDVDToAram__FP10JKRDvdFileUlUlUlUlUlPUl.s" +int JKRDecompressFromDVDToAram(JKRDvdFile* dvdFile, u32 param_1, u32 fileSize, u32 uncompressedSize, + u32 param_4, u32 param_5, u32* param_6) { + BOOL level = OSDisableInterrupts(); + if (!data_804514A4) { + OSInitMutex(&decompMutex); + data_804514A4 = true; + } + OSRestoreInterrupts(level); + OSLockMutex(&decompMutex); + u32 bufferSize = JKRDvdAramRipper::sSZSBufferSize; + szpBuf = (u8*)JKRHeap::sSystemHeap->alloc(bufferSize, 0x20); + szpEnd = szpBuf + bufferSize; + refBuf = (u8*)JKRHeap::sSystemHeap->alloc(0x1120, 0); + refEnd = refBuf + 0x1120; + refCurrent = refBuf; + dmaBuf = (u8*)JKRHeap::sSystemHeap->alloc(0x100, 0x20); + dmaEnd = dmaBuf + 0x100; + dmaCurrent = dmaBuf; + srcFile = dvdFile; + srcOffset = param_5; + transLeft = fileSize - param_5; + fileOffset = param_4; + readCount = 0; + maxDest = uncompressedSize; + param_6 = param_6 ? param_6 : &tsArea; + tsPtr = param_6; + *param_6 = 0; + u8* first = firstSrcData(); + int result = first ? decompSZS_subroutine(first, param_1) : -1; + JKRHeap::free(szpBuf, 0); + JKRHeap::free(refBuf, 0); + JKRHeap::free(dmaBuf, 0); + OSUnlockMutex(&decompMutex); + return result; } -#pragma pop /* 802DB160-802DB3E8 2D5AA0 0288+00 1/1 0/0 0/0 .text decompSZS_subroutine__FPUcUl */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void decompSZS_subroutine(u8* param_0, u32 param_1) { +static asm int decompSZS_subroutine(u8* param_0, u32 param_1) { nofralloc #include "asm/JSystem/JKernel/JKRDvdAramRipper/decompSZS_subroutine__FPUcUl.s" } @@ -364,7 +448,7 @@ static asm void decompSZS_subroutine(u8* param_0, u32 param_1) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void firstSrcData() { +static asm u8* firstSrcData() { nofralloc #include "asm/JSystem/JKernel/JKRDvdAramRipper/firstSrcData__Fv.s" } @@ -374,7 +458,7 @@ static asm void firstSrcData() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void nextSrcData(u8* param_0) { +static asm u8* nextSrcData(u8* param_0) { nofralloc #include "asm/JSystem/JKernel/JKRDvdAramRipper/nextSrcData__FPUc.s" } @@ -384,7 +468,7 @@ static asm void nextSrcData(u8* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void dmaBufferFlush(u32 param_0) { +static asm int dmaBufferFlush(u32 param_0) { nofralloc #include "asm/JSystem/JKernel/JKRDvdAramRipper/dmaBufferFlush__FUl.s" }