diff --git a/include/JSystem/JKernel/JKRAramArchive.h b/include/JSystem/JKernel/JKRAramArchive.h index 5f8d2841361..392be1be51f 100644 --- a/include/JSystem/JKernel/JKRAramArchive.h +++ b/include/JSystem/JKernel/JKRAramArchive.h @@ -9,10 +9,10 @@ class JKRDvdFile; class JKRAramArchive : public JKRArchive { public: - JKRAramArchive(long, JKRArchive::EMountDirection); + JKRAramArchive(s32, JKRArchive::EMountDirection); virtual ~JKRAramArchive(); - bool open(long); + bool open(s32); u32 getAramAddress_Entry(SDIFileEntry*); u32 getAramAddress(char const*); diff --git a/include/JSystem/JKernel/JKRArchive.h b/include/JSystem/JKernel/JKRArchive.h index 7f89bc3e2bd..2d839562380 100644 --- a/include/JSystem/JKernel/JKRArchive.h +++ b/include/JSystem/JKernel/JKRArchive.h @@ -120,7 +120,7 @@ public: protected: JKRArchive(); - JKRArchive(long, EMountMode); + JKRArchive(s32, EMountMode); virtual ~JKRArchive(); public: diff --git a/include/JSystem/JKernel/JKRArchivePri.h b/include/JSystem/JKernel/JKRArchivePri.h deleted file mode 100644 index a2cb65220b0..00000000000 --- a/include/JSystem/JKernel/JKRArchivePri.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef JKRARCHIVEPRI_H -#define JKRARCHIVEPRI_H - - -#endif /* JKRARCHIVEPRI_H */ diff --git a/include/JSystem/JKernel/JKRArchivePub.h b/include/JSystem/JKernel/JKRArchivePub.h deleted file mode 100644 index bd2bdfa8a76..00000000000 --- a/include/JSystem/JKernel/JKRArchivePub.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef JKRARCHIVEPUB_H -#define JKRARCHIVEPUB_H - - -#endif /* JKRARCHIVEPUB_H */ diff --git a/include/JSystem/JKernel/JKRCompArchive.h b/include/JSystem/JKernel/JKRCompArchive.h index 338332fb6a5..11524afc0b7 100644 --- a/include/JSystem/JKernel/JKRCompArchive.h +++ b/include/JSystem/JKernel/JKRCompArchive.h @@ -8,10 +8,10 @@ class JKRDvdFile; class JKRCompArchive : public JKRArchive { public: - JKRCompArchive(long, JKRArchive::EMountDirection); + JKRCompArchive(s32, JKRArchive::EMountDirection); virtual ~JKRCompArchive(); - bool open(long); + bool open(s32); /* vt[09] */ void removeResourceAll(void); /* override */ /* vt[10] */ bool removeResource(void*); /* override */ diff --git a/include/JSystem/JKernel/JKRMemArchive.h b/include/JSystem/JKernel/JKRMemArchive.h index eb09c0b2009..24f0ec6c08d 100644 --- a/include/JSystem/JKernel/JKRMemArchive.h +++ b/include/JSystem/JKernel/JKRMemArchive.h @@ -10,11 +10,11 @@ enum JKRMemBreakFlag { class JKRMemArchive : public JKRArchive { public: - JKRMemArchive(long, JKRArchive::EMountDirection); + JKRMemArchive(s32, JKRArchive::EMountDirection); JKRMemArchive(void*, u32, JKRMemBreakFlag); virtual ~JKRMemArchive(); - bool open(long, JKRArchive::EMountDirection); + bool open(s32, JKRArchive::EMountDirection); bool open(void*, u32, JKRMemBreakFlag); /* vt[09] */ void removeResourceAll(void); /* override */ diff --git a/libs/JSystem/JKernel/JKRAramArchive.cpp b/libs/JSystem/JKernel/JKRAramArchive.cpp index f47644e051b..d8d6670e17e 100644 --- a/libs/JSystem/JKernel/JKRAramArchive.cpp +++ b/libs/JSystem/JKernel/JKRAramArchive.cpp @@ -7,6 +7,7 @@ #include "JSystem/JKernel/JKRAram.h" #include "JSystem/JKernel/JKRDvdAramRipper.h" #include "JSystem/JKernel/JKRDvdFile.h" +#include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTException.h" #include "MSL_C/math.h" #include "MSL_C/string.h" @@ -101,11 +102,11 @@ SECTION_DATA extern void* __vt__7JKRFile[8] = { /* 802D70C0-802D7168 2D1A00 00A8+00 0/0 1/1 0/0 .text * __ct__14JKRAramArchiveFlQ210JKRArchive15EMountDirection */ -JKRAramArchive::JKRAramArchive(s32 param_0, JKRArchive::EMountDirection mountDirection) - : JKRArchive(param_0, MOUNT_ARAM) { +JKRAramArchive::JKRAramArchive(s32 entryNumber, JKRArchive::EMountDirection mountDirection) + : JKRArchive(entryNumber, MOUNT_ARAM) { mMountDirection = mountDirection; - if (!this->open(param_0)) { + if (!this->open(entryNumber)) { return; } @@ -122,16 +123,16 @@ JKRAramArchive::~JKRAramArchive() { SDIFileEntry* entry = mFiles; for (int i = 0; i < mArcInfoBlock->num_file_entries; entry++, i++) { if (entry->data != NULL) { - JKRHeap::free(entry->data, mHeap); + JKRFreeToHeap(mHeap, entry->data); } } - JKRHeap::free(mArcInfoBlock, mHeap); + JKRFreeToHeap(mHeap, mArcInfoBlock); mArcInfoBlock = NULL; } if (mExpandedSize != NULL) { - JKRHeap::free(mExpandedSize, NULL); + i_JKRFree(mExpandedSize); mExpandedSize = NULL; } @@ -168,7 +169,7 @@ bool JKRAramArchive::open(s32 entryNum) { } // NOTE: a different struct is used here for sure, unfortunately i can't get any hits on this address, so gonna leave it like this for now - SArcHeader *mem = (SArcHeader *)JKRAllocFromSysHeap(32, -32); + SArcHeader *mem = (SArcHeader *)JKRAllocFromSysHeap(32, -32); if (mem == NULL) { mMountMode = 0; } @@ -239,6 +240,9 @@ cleanup: } if (mMountMode == 0) { +#if DEBUG + OSReport(":::[%s: %d] Cannot alloc memory\n", __FILE__, 415); +#endif if (mDvdFile != NULL) { delete mDvdFile; @@ -250,7 +254,8 @@ cleanup: /* 802D75E0-802D76F4 2D1F20 0114+00 1/0 0/0 0/0 .text * fetchResource__14JKRAramArchiveFPQ210JKRArchive12SDIFileEntryPUl */ -void* JKRAramArchive::fetchResource(JKRArchive::SDIFileEntry* pEntry, u32* pOutSize) { +void* JKRAramArchive::fetchResource(SDIFileEntry* pEntry, u32* pOutSize) { + JUT_ASSERT(442, isMounted()); u32 outSize; u8* outBuf; if (pOutSize == NULL) { @@ -286,8 +291,9 @@ void* JKRAramArchive::fetchResource(JKRArchive::SDIFileEntry* pEntry, u32* pOutS /* 802D76F4-802D77F8 2D2034 0104+00 1/0 0/0 0/0 .text * fetchResource__14JKRAramArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl */ #ifdef NONMATCHING -void* JKRAramArchive::fetchResource(void* buffer, u32 bufferSize, JKRArchive::SDIFileEntry* pEntry, +void* JKRAramArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* pEntry, u32* resourceSize) { + JUT_ASSERT(515, isMounted()); u32 size = pEntry->data_size; if (size > bufferSize) { size = bufferSize; @@ -329,7 +335,8 @@ asm void* JKRAramArchive::fetchResource(void* param_0, u32 param_1, /* 802D77F8-802D781C 2D2138 0024+00 1/1 0/0 0/0 .text * getAramAddress_Entry__14JKRAramArchiveFPQ210JKRArchive12SDIFileEntry */ -u32 JKRAramArchive::getAramAddress_Entry(JKRArchive::SDIFileEntry* pEntry) { +u32 JKRAramArchive::getAramAddress_Entry(SDIFileEntry* pEntry) { + JUT_ASSERT(572, isMounted()); if (pEntry == NULL) { return 0; } else { @@ -344,8 +351,9 @@ u32 JKRAramArchive::getAramAddress(char const* name) { /* 802D7858-802D7914 2D2198 00BC+00 1/1 1/1 0/0 .text * fetchResource_subroutine__14JKRAramArchiveFUlUlPUcUli */ -u32 JKRAramArchive::fetchResource_subroutine(u32 src, u32 srcLength, u8* dst, u32 dstLength, +u32 JKRAramArchive::fetchResource_subroutine(u32 srcAram, u32 srcLength, u8* dst, u32 dstLength, int compression) { + JUT_ASSERT(628, ( srcAram & 0x1f ) == 0); u32 outLen; u32 srcSize = ALIGN_NEXT(srcLength, 0x20); u32 dstSize = ALIGN_PREV(dstLength, 0x20); @@ -355,16 +363,16 @@ u32 JKRAramArchive::fetchResource_subroutine(u32 src, u32 srcLength, u8* dst, u3 if (srcSize > dstSize) { srcSize = dstSize; } - JKRAram::aramToMainRam(src, dst, srcSize, EXPAND_SWITCH_UNKNOWN0, dstSize, NULL, -1, + JKRAramToMainRam(srcAram, dst, srcSize, EXPAND_SWITCH_UNKNOWN0, dstSize, NULL, -1, &outLen); return outLen; case COMPRESSION_YAY0: case COMPRESSION_YAZ0: - JKRAram::aramToMainRam(src, dst, srcSize, EXPAND_SWITCH_UNKNOWN1, dstSize, NULL, -1, + JKRAramToMainRam(srcAram, dst, srcSize, EXPAND_SWITCH_UNKNOWN1, dstSize, NULL, -1, &outLen); return outLen; default: - JUTException::panic_f(__FILE__, 655, "%s", "??? bad sequence\n"); + JUTException::panic(__FILE__, 655, "??? bad sequence\n"); return 0; } } @@ -377,13 +385,14 @@ u32 JKRAramArchive::fetchResource_subroutine(u32 entryNum, u32 length, JKRHeap* // r28 -> r29, r29 -> r30, r30 -> r31, r31 -> r28 u32 readLen; u32 alignedLen = alignNext(length, 0x20); - u8* tmpBufAligned; + u8* buffer; switch (compression) { case COMPRESSION_NONE: - tmpBufAligned = static_cast(JKRAllocFromHeap(pHeap, alignedLen, 0x20)); - JKRAramToMainRam(entryNum, tmpBufAligned, alignedLen, EXPAND_SWITCH_UNKNOWN0, alignedLen, + buffer = static_cast(JKRAllocFromHeap(pHeap, alignedLen, 0x20)); + JUT_ASSERT(677, buffer != 0); + JKRAramToMainRam(entryNum, buffer, alignedLen, EXPAND_SWITCH_UNKNOWN0, alignedLen, NULL, -1, NULL); - *out = tmpBufAligned; + *out = buffer; return length; case COMPRESSION_YAY0: case COMPRESSION_YAZ0: @@ -391,14 +400,15 @@ u32 JKRAramArchive::fetchResource_subroutine(u32 entryNum, u32 length, JKRHeap* u8* buf = (u8*)ALIGN_PREV((s32)&tmpBuf[0x1F], sizeof(SArcHeader)); JKRAramToMainRam(entryNum, buf, sizeof(SArcHeader), EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1, NULL); length = alignNext(JKRDecompExpandSize(buf), sizeof(SArcHeader)); - tmpBufAligned = static_cast(JKRAllocFromHeap(pHeap, length, sizeof(SArcHeader))); + buffer = static_cast(JKRAllocFromHeap(pHeap, length, sizeof(SArcHeader))); + JUT_ASSERT(703, buffer); - JKRAramToMainRam(entryNum, tmpBufAligned, alignedLen, EXPAND_SWITCH_UNKNOWN1, length, pHeap, + JKRAramToMainRam(entryNum, buffer, alignedLen, EXPAND_SWITCH_UNKNOWN1, length, pHeap, -1, &readLen); - *out = tmpBufAligned; + *out = buffer; return readLen; default: - JUTException::panic_f(__FILE__, 0x2c9, "%s", "??? bad sequence\n"); + JUTException::panic(__FILE__, 713, "??? bad sequence\n"); return 0; } } @@ -415,7 +425,7 @@ asm u32 JKRAramArchive::fetchResource_subroutine(u32 param_0, u32 param_1, JKRHe #endif /* 802D7A64-802D7B90 2D23A4 012C+00 1/0 0/0 0/0 .text getExpandedResSize__14JKRAramArchiveCFPCv */ -u32 JKRAramArchive::getExpandedResSize(void const* ptr) const { +u32 JKRAramArchive::getExpandedResSize(const void* ptr) const { if (mExpandedSize == NULL) { return this->getResSize(ptr); } diff --git a/libs/JSystem/JKernel/JKRArchivePri.cpp b/libs/JSystem/JKernel/JKRArchivePri.cpp index 7743207cce3..6aea2708698 100644 --- a/libs/JSystem/JKernel/JKRArchivePri.cpp +++ b/libs/JSystem/JKernel/JKRArchivePri.cpp @@ -14,7 +14,7 @@ u32 JKRArchive::sCurrentDirID; /* 802D6294-802D6334 2D0BD4 00A0+00 0/0 5/5 0/0 .text * __ct__10JKRArchiveFlQ210JKRArchive10EMountMode */ -JKRArchive::JKRArchive(long entryNumber, JKRArchive::EMountMode mountMode) { +JKRArchive::JKRArchive(s32 entryNumber, JKRArchive::EMountMode mountMode) { mIsMounted = false; mMountMode = mountMode; mMountCount = 1; diff --git a/libs/JSystem/JKernel/JKRArchivePub.cpp b/libs/JSystem/JKernel/JKRArchivePub.cpp index 4922d177095..eb3fb287a9d 100644 --- a/libs/JSystem/JKernel/JKRArchivePub.cpp +++ b/libs/JSystem/JKernel/JKRArchivePub.cpp @@ -10,12 +10,13 @@ #include "JSystem/JKernel/JKRFileFinder.h" #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JKernel/JKRMemArchive.h" +#include "JSystem/JUtility/JUTAssert.h" /* 802D5778-802D57E4 2D00B8 006C+00 2/2 0/0 0/0 .text check_mount_already__10JKRArchiveFlP7JKRHeap */ JKRArchive* JKRArchive::check_mount_already(s32 entryNum, JKRHeap* heap) { if (heap == NULL) { - heap = JKRHeap::getCurrentHeap(); + heap = JKRGetCurrentHeap(); } JSUList& volumeList = getVolumeList(); @@ -35,8 +36,8 @@ JKRArchive* JKRArchive::check_mount_already(s32 entryNum, JKRHeap* heap) { /* 802D57E4-802D5840 2D0124 005C+00 0/0 1/1 0/0 .text * mount__10JKRArchiveFPCcQ210JKRArchive10EMountModeP7JKRHeapQ210JKRArchive15EMountDirection */ -JKRArchive* JKRArchive::mount(const char* path, JKRArchive::EMountMode mountMode, JKRHeap* heap, - JKRArchive::EMountDirection mountDirection) { +JKRArchive* JKRArchive::mount(const char* path, EMountMode mountMode, JKRHeap* heap, + EMountDirection mountDirection) { s32 entryNum = DVDConvertPathToEntrynum(path); if (entryNum < 0) return NULL; @@ -47,13 +48,13 @@ JKRArchive* JKRArchive::mount(const char* path, JKRArchive::EMountMode mountMode /* 802D5840-802D58C8 2D0180 0088+00 0/0 1/1 0/0 .text * mount__10JKRArchiveFPvP7JKRHeapQ210JKRArchive15EMountDirection */ JKRArchive* JKRArchive::mount(void* ptr, JKRHeap* heap, - JKRArchive::EMountDirection mountDirection) { + EMountDirection mountDirection) { JKRArchive* archive = check_mount_already((s32)ptr, heap); if (archive) return archive; int alignment; - if (mountDirection == JKRArchive::MOUNT_DIRECTION_HEAD) { + if (mountDirection == MOUNT_DIRECTION_HEAD) { alignment = 4; } else { alignment = -4; @@ -161,6 +162,7 @@ void* JKRArchive::getGlbResource(u32 param_1, const char* path, JKRArchive* arch /* 802D5BE8-802D5C64 2D0528 007C+00 1/0 4/0 0/0 .text getResource__10JKRArchiveFPCc */ void* JKRArchive::getResource(const char* path) { + JUT_ASSERT(303, isMounted()); SDIFileEntry* fileEntry; if (*path == '/') { fileEntry = findFsResource(path + 1, 0); @@ -177,6 +179,7 @@ void* JKRArchive::getResource(const char* path) { /* 802D5C64-802D5CE4 2D05A4 0080+00 1/0 4/0 0/0 .text getResource__10JKRArchiveFUlPCc */ void* JKRArchive::getResource(u32 type, const char* path) { + JUT_ASSERT(347, isMounted()); SDIFileEntry* fileEntry; if (type == 0 || type == '????') { fileEntry = findNameResource(path); @@ -193,6 +196,7 @@ void* JKRArchive::getResource(u32 type, const char* path) { /* 802D5CE4-802D5D38 2D0624 0054+00 0/0 1/1 0/0 .text getIdxResource__10JKRArchiveFUl */ void* JKRArchive::getIdxResource(u32 index) { + JUT_ASSERT(384, isMounted()); SDIFileEntry* fileEntry = findIdxResource(index); if (fileEntry) { return fetchResource(fileEntry, NULL); @@ -203,6 +207,7 @@ void* JKRArchive::getIdxResource(u32 index) { /* 802D5D38-802D5D8C 2D0678 0054+00 0/0 1/1 0/0 .text getResource__10JKRArchiveFUs */ void* JKRArchive::getResource(u16 id) { + JUT_ASSERT(409, isMounted()); SDIFileEntry* fileEntry = findIdResource(id); if (fileEntry) { return fetchResource(fileEntry, NULL); @@ -213,6 +218,7 @@ void* JKRArchive::getResource(u16 id) { /* 802D5D8C-802D5E30 2D06CC 00A4+00 1/0 4/0 0/0 .text readResource__10JKRArchiveFPvUlUlPCc */ u32 JKRArchive::readResource(void* buffer, u32 bufferSize, u32 type, const char* path) { + JUT_ASSERT(493, isMounted()); SDIFileEntry* fileEntry; if (type == 0 || type == '????') { fileEntry = findNameResource(path); @@ -232,6 +238,7 @@ u32 JKRArchive::readResource(void* buffer, u32 bufferSize, u32 type, const char* /* 802D5E30-802D5ECC 2D0770 009C+00 1/0 4/0 0/0 .text readResource__10JKRArchiveFPvUlPCc */ u32 JKRArchive::readResource(void* buffer, u32 bufferSize, const char* path) { + JUT_ASSERT(539, isMounted()); SDIFileEntry* fileEntry; if (*path == '/') { fileEntry = findFsResource(path + 1, 0); @@ -250,6 +257,7 @@ u32 JKRArchive::readResource(void* buffer, u32 bufferSize, const char* path) { /* 802D5ECC-802D5F40 2D080C 0074+00 0/0 7/7 1/1 .text readIdxResource__10JKRArchiveFPvUlUl */ u32 JKRArchive::readIdxResource(void* buffer, u32 bufferSize, u32 index) { + JUT_ASSERT(593, isMounted()); SDIFileEntry* fileEntry = findIdxResource(index); if (fileEntry) { u32 resourceSize; @@ -263,6 +271,7 @@ u32 JKRArchive::readIdxResource(void* buffer, u32 bufferSize, u32 index) { /* 802D5F40-802D5FB4 2D0880 0074+00 0/0 1/1 0/0 .text readResource__10JKRArchiveFPvUlUs */ u32 JKRArchive::readResource(void* buffer, u32 bufferSize, u16 id) { + JUT_ASSERT(625, isMounted()); SDIFileEntry* fileEntry = findIdResource(id); if (fileEntry) { u32 resourceSize; @@ -289,6 +298,7 @@ void JKRArchive::removeResourceAll() { /* 802D603C-802D609C 2D097C 0060+00 1/0 2/0 0/0 .text removeResource__10JKRArchiveFPv */ bool JKRArchive::removeResource(void* resource) { + JUT_ASSERT(678, resource != 0); SDIFileEntry* fileEntry = findPtrResource(resource); if (fileEntry == NULL) return false; @@ -300,6 +310,7 @@ bool JKRArchive::removeResource(void* resource) { /* 802D609C-802D60D8 2D09DC 003C+00 1/0 4/0 0/0 .text detachResource__10JKRArchiveFPv */ bool JKRArchive::detachResource(void* resource) { + JUT_ASSERT(707, resource != 0); SDIFileEntry* fileEntry = findPtrResource(resource); if (fileEntry == NULL) return false; @@ -310,6 +321,7 @@ bool JKRArchive::detachResource(void* resource) { /* 802D60D8-802D610C 2D0A18 0034+00 1/0 4/0 0/0 .text getResSize__10JKRArchiveCFPCv */ u32 JKRArchive::getResSize(const void* resource) const { + JUT_ASSERT(732, resource != 0); SDIFileEntry* fileEntry = findPtrResource(resource); if (fileEntry == NULL) return -1; diff --git a/libs/JSystem/JKernel/JKRCompArchive.cpp b/libs/JSystem/JKernel/JKRCompArchive.cpp index 82eec667b5d..90fbf56f825 100644 --- a/libs/JSystem/JKernel/JKRCompArchive.cpp +++ b/libs/JSystem/JKernel/JKRCompArchive.cpp @@ -5,12 +5,13 @@ #include "JSystem/JKernel/JKRCompArchive.h" #include "JSystem/JKernel/JKRAram.h" +#include "JSystem/JKernel/JKRAramArchive.h" +#include "JSystem/JKernel/JKRDecomp.h" #include "JSystem/JKernel/JKRDvdAramRipper.h" #include "JSystem/JKernel/JKRDvdArchive.h" #include "JSystem/JKernel/JKRDvdFile.h" #include "JSystem/JKernel/JKRMemArchive.h" -#include "JSystem/JKernel/JKRDecomp.h" -#include "JSystem/JKernel/JKRAramArchive.h" +#include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTException.h" #include "MSL_C/math.h" #include "MSL_C/string.h" @@ -78,7 +79,7 @@ JKRCompArchive::~JKRCompArchive() { } /* 802D89BC-802D8F40 2D32FC 0584+00 1/1 0/0 0/0 .text open__14JKRCompArchiveFl */ -bool JKRCompArchive::open(long entryNum) { +bool JKRCompArchive::open(s32 entryNum) { mArcInfoBlock = NULL; field_0x64 = 0; mAramPart = NULL; @@ -107,6 +108,8 @@ bool JKRCompArchive::open(long entryNum) { mSizeOfMemPart = arcHeader->field_0x14; mSizeOfAramPart = arcHeader->field_0x18; + JUT_ASSERT(352, ( mSizeOfMemPart & 0x1f ) == 0); + JUT_ASSERT(353, ( mSizeOfAramPart & 0x1f ) == 0); switch (mCompression) { @@ -174,14 +177,14 @@ bool JKRCompArchive::open(long entryNum) { if (mSizeOfAramPart != 0) { mAramPart = (JKRAramBlock*)JKRAllocFromAram(mSizeOfAramPart, JKRAramHeap::HEAD); if(mAramPart == NULL) { - mMountMode = 0; + mMountMode = 0; } else { JKRMainRamToAram((u8 *)mem + arcHeader->header_length + arcHeader->file_data_offset + mSizeOfMemPart, mAramPart->getAddress(), mSizeOfAramPart, EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1, NULL); } } - } + } } } mNodes = (SDIDirEntry *)((u32)mArcInfoBlock + mArcInfoBlock->node_offset); @@ -223,6 +226,9 @@ bool JKRCompArchive::open(long entryNum) { JKRFreeToSysHeap(arcHeader); } if(mMountMode == 0) { +#if DEBUG + OSReport(":::[%s: %d] Cannot alloc memory in mounting CompArchive\n", __FILE__, 567); +#endif if(mDvdFile != NULL) { delete mDvdFile; } @@ -235,6 +241,7 @@ bool JKRCompArchive::open(long entryNum) { /* 802D8F40-802D90C0 2D3880 0180+00 1/0 0/0 0/0 .text * fetchResource__14JKRCompArchiveFPQ210JKRArchive12SDIFileEntryPUl */ void* JKRCompArchive::fetchResource(SDIFileEntry *fileEntry, u32 *pSize) { + JUT_ASSERT(597, isMounted()); u32 ptrSize; u32 size = fileEntry->data_size; int compression = JKRConvertAttrToCompressionType(fileEntry->type_flags_and_name_offset >> 0x18); @@ -284,11 +291,12 @@ void* JKRCompArchive::fetchResource(SDIFileEntry *fileEntry, u32 *pSize) { void *JKRCompArchive::fetchResource(void *data, u32 compressedSize, SDIFileEntry *fileEntry, u32 *pSize) { u32 size = 0; + JUT_ASSERT(708, isMounted()); u32 fileSize = fileEntry->data_size; u32 alignedSize = ALIGN_NEXT(fileSize, 32); u32 fileFlag = fileEntry->type_flags_and_name_offset >> 0x18; int compression = JKRConvertAttrToCompressionType(fileFlag); - + if(fileEntry->data != NULL) { if (compression == COMPRESSION_YAZ0) { u32 expandSize = getExpandSize(fileEntry); @@ -317,7 +325,7 @@ void *JKRCompArchive::fetchResource(void *data, u32 compressedSize, SDIFileEntry size = JKRDvdArchive::fetchResource_subroutine(mEntryNum, field_0x6c + fileEntry->data_offset, alignedSize, (u8 *)data, compressedSize & ~31, compression, mCompression); } else { - JUTException::panic_f(__FILE__, 0x308, "%s", "illegal archive."); + JUTException::panic(__FILE__, 776, "illegal archive."); } } @@ -396,7 +404,7 @@ u32 JKRCompArchive::getExpandedResSize(const void *resource) const DCInvalidateRange(bufPtr, sizeof(buf) / 2); } else { - JUTException::panic_f(__FILE__, 0x3af, "%s", "illegal resource."); + JUTException::panic(__FILE__, 943, "illegal resource."); } u32 expandSize = JKRDecompExpandSize(bufPtr); const_cast(this)->setExpandSize(fileEntry, expandSize); diff --git a/libs/JSystem/JKernel/JKRDvdArchive.cpp b/libs/JSystem/JKernel/JKRDvdArchive.cpp index 903a1cc1e2c..0a0f682d423 100644 --- a/libs/JSystem/JKernel/JKRDvdArchive.cpp +++ b/libs/JSystem/JKernel/JKRDvdArchive.cpp @@ -6,6 +6,7 @@ #include "JSystem/JKernel/JKRDvdArchive.h" #include "JSystem/JKernel/JKRDvdFile.h" #include "JSystem/JKernel/JKRDvdRipper.h" +#include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTException.h" #include "MSL_C/math.h" #include "MSL_C/string.h" @@ -129,7 +130,7 @@ bool JKRDvdArchive::open(s32 entryNum) { mFiles = NULL; mStringTable = NULL; - mDvdFile = new (JKRHeap::getSystemHeap(), 0) JKRDvdFile(entryNum); + mDvdFile = new (JKRGetSystemHeap(), 0) JKRDvdFile(entryNum); if (!mDvdFile) { mMountMode = UNKNOWN_MOUNT_MODE; return false; @@ -194,6 +195,9 @@ cleanup: } if (mMountMode == UNKNOWN_MOUNT_MODE) { +#if DEBUG + OSReport(":::Cannot alloc memory [%s][%d]\n", __FILE__, 397); +#endif if (mDvdFile) { delete mDvdFile; } @@ -206,6 +210,7 @@ cleanup: /* 802D8050-802D8168 2D2990 0118+00 1/0 0/0 0/0 .text * fetchResource__13JKRDvdArchiveFPQ210JKRArchive12SDIFileEntryPUl */ void* JKRDvdArchive::fetchResource(SDIFileEntry* fileEntry, u32* returnSize) { + JUT_ASSERT(428, isMounted()); u32 tempReturnSize; if (returnSize == NULL) { returnSize = &tempReturnSize; @@ -244,7 +249,7 @@ void* JKRDvdArchive::fetchResource(SDIFileEntry* fileEntry, u32* returnSize) { #ifdef NONMATCHING void* JKRDvdArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* fileEntry, u32* returnSize) { - ASSERT(isMounted()); + JUT_ASSERT(504, isMounted()); u32 otherSize; u32 size = fileEntry->data_size; u32 dstSize = bufferSize; @@ -342,11 +347,11 @@ u32 JKRDvdArchive::fetchResource_subroutine(s32 entryNum, u32 offset, u32 size, } case COMPRESSION_YAY0: { - JUTException::panic_f(__FILE__, 649, "%s", "Sorry, not applied for SZP archive.\n"); + JUTException::panic(__FILE__, 649, "Sorry, not applied for SZP archive.\n"); } default: { - JUTException::panic_f(__FILE__, 653, "%s", "??? bad sequence\n"); + JUTException::panic(__FILE__, 653, "??? bad sequence\n"); return 0; } } @@ -366,7 +371,7 @@ u32 JKRDvdArchive::fetchResource_subroutine(s32 entryNum, u32 offset, u32 size, switch (fileCompression) { case COMPRESSION_NONE: buffer = (u8*)JKRAllocFromHeap(heap, alignedSize, sizeof(SArcHeader)); - ASSERT(buffer); + JUT_ASSERT(675, buffer != 0); JKRDvdToMainRam(entryNum, buffer, EXPAND_SWITCH_UNKNOWN0, alignedSize, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL, NULL); @@ -386,7 +391,7 @@ u32 JKRDvdArchive::fetchResource_subroutine(s32 entryNum, u32 offset, u32 size, alignedSize = JKRDecompExpandSize(arcHeader); buffer = (u8*)JKRAllocFromHeap(heap, alignedSize, sizeof(SArcHeader)); - ASSERT(buffer); + JUT_ASSERT(715, buffer); JKRDvdToMainRam(entryNum, buffer, EXPAND_SWITCH_UNKNOWN1, alignedSize, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL, NULL); DCInvalidateRange(buffer, alignedSize); @@ -398,7 +403,7 @@ u32 JKRDvdArchive::fetchResource_subroutine(s32 entryNum, u32 offset, u32 size, case COMPRESSION_YAZ0: { buffer = (u8*)JKRAllocFromHeap(heap, alignedSize, sizeof(SArcHeader)); - ASSERT(buffer); + JUT_ASSERT(735, buffer); JKRDvdToMainRam(entryNum, buffer, EXPAND_SWITCH_UNKNOWN1, size, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL, NULL); @@ -409,11 +414,11 @@ u32 JKRDvdArchive::fetchResource_subroutine(s32 entryNum, u32 offset, u32 size, } case COMPRESSION_YAY0: { - JUTException::panic_f(__FILE__, 754, "%s", "Sorry, not applied SZP archive.\n"); + JUTException::panic(__FILE__, 754, "Sorry, not applied SZP archive.\n"); } default: { - JUTException::panic_f(__FILE__, 758, "%s", "??? bad sequence\n"); + JUTException::panic(__FILE__, 758, "??? bad sequence\n"); return 0; } } diff --git a/libs/JSystem/JKernel/JKRMemArchive.cpp b/libs/JSystem/JKernel/JKRMemArchive.cpp index 99140f61019..84c78d7fdfb 100644 --- a/libs/JSystem/JKernel/JKRMemArchive.cpp +++ b/libs/JSystem/JKernel/JKRMemArchive.cpp @@ -6,6 +6,7 @@ #include "JSystem/JKernel/JKRMemArchive.h" #include "JSystem/JKernel/JKRDecomp.h" #include "JSystem/JKernel/JKRDvdRipper.h" +#include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTException.h" #include "MSL_C/string.h" #include "dolphin/os/OSCache.h" @@ -25,7 +26,7 @@ /* 802D69B8-802D6A6C 2D12F8 00B4+00 0/0 2/2 0/0 .text * __ct__13JKRMemArchiveFlQ210JKRArchive15EMountDirection */ -JKRMemArchive::JKRMemArchive(long entryNum, JKRArchive::EMountDirection mountDirection) +JKRMemArchive::JKRMemArchive(s32 entryNum, JKRArchive::EMountDirection mountDirection) : JKRArchive(entryNum, MOUNT_MEM) { mIsMounted = false; mMountDirection = mountDirection; @@ -71,7 +72,7 @@ JKRMemArchive::~JKRMemArchive() { /* 802D6BCC-802D6D30 2D150C 0164+00 1/1 0/0 0/0 .text * open__13JKRMemArchiveFlQ210JKRArchive15EMountDirection */ -bool JKRMemArchive::open(long entryNum, JKRArchive::EMountDirection mountDirection) { +bool JKRMemArchive::open(s32 entryNum, JKRArchive::EMountDirection mountDirection) { mArcHeader = NULL; mArcInfoBlock = NULL; mArchiveData = NULL; @@ -83,7 +84,7 @@ bool JKRMemArchive::open(long entryNum, JKRArchive::EMountDirection mountDirecti if (mMountDirection == JKRArchive::MOUNT_DIRECTION_HEAD) { u32 loadedSize; - mArcHeader = (SArcHeader *)JKRDvdRipper::loadToMainRAM( + mArcHeader = (SArcHeader *)JKRDvdToMainRam( entryNum, NULL, EXPAND_SWITCH_UNKNOWN1, 0, mHeap, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, (int *)&mCompression, &loadedSize); if (mArcHeader) { @@ -92,7 +93,7 @@ bool JKRMemArchive::open(long entryNum, JKRArchive::EMountDirection mountDirecti } else { u32 loadedSize; - mArcHeader = (SArcHeader *)JKRDvdRipper::loadToMainRAM( + mArcHeader = (SArcHeader *)JKRDvdToMainRam( entryNum, NULL, EXPAND_SWITCH_UNKNOWN1, 0, mHeap, JKRDvdRipper::ALLOC_DIRECTION_BACKWARD, 0, (int *)&mCompression, &loadedSize); if (mArcHeader) { @@ -104,6 +105,7 @@ bool JKRMemArchive::open(long entryNum, JKRArchive::EMountDirection mountDirecti mMountMode = UNKNOWN_MOUNT_MODE; } else { + JUT_ASSERT(438, mArcHeader->signature =='RARC'); mArcInfoBlock = (SArcDataInfo *)((u8 *)mArcHeader + mArcHeader->header_length); mNodes = (SDIDirEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset); mFiles = (SDIFileEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset); @@ -114,6 +116,12 @@ bool JKRMemArchive::open(long entryNum, JKRArchive::EMountDirection mountDirecti mIsOpen = true; } +#if DEBUG + if (mMountMode == 0) { + OSReport(":::Cannot alloc memory [%s][%d]\n", __FILE__, 460) + } +#endif + return (mMountMode == UNKNOWN_MOUNT_MODE) ? false : true; } @@ -121,6 +129,7 @@ bool JKRMemArchive::open(long entryNum, JKRArchive::EMountDirection mountDirecti */ bool JKRMemArchive::open(void* buffer, u32 bufferSize, JKRMemBreakFlag flag) { mArcHeader = (SArcHeader *)buffer; + JUT_ASSERT(491, mArcHeader->signature =='RARC'); mArcInfoBlock = (SArcDataInfo *)((u8 *)mArcHeader + mArcHeader->header_length); mNodes = (SDIDirEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset); mFiles = (SDIFileEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset); @@ -135,6 +144,7 @@ bool JKRMemArchive::open(void* buffer, u32 bufferSize, JKRMemBreakFlag flag) { /* 802D6DDC-802D6E10 2D171C 0034+00 1/0 0/0 0/0 .text * fetchResource__13JKRMemArchiveFPQ210JKRArchive12SDIFileEntryPUl */ void* JKRMemArchive::fetchResource(SDIFileEntry* fileEntry, u32* resourceSize) { + JUT_ASSERT(555, isMounted()); if (!fileEntry->data) { fileEntry->data = mArchiveData + fileEntry->data_offset; } @@ -150,6 +160,7 @@ void* JKRMemArchive::fetchResource(SDIFileEntry* fileEntry, u32* resourceSize) { * fetchResource__13JKRMemArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl */ void* JKRMemArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* fileEntry, u32* resourceSize) { + JUT_ASSERT(595, isMounted()); u32 srcLength = fileEntry->data_size; if (srcLength > bufferSize) { srcLength = bufferSize; @@ -173,7 +184,7 @@ void* JKRMemArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* f /* 802D6ED0-802D6F20 2D1810 0050+00 1/0 0/0 0/0 .text removeResourceAll__13JKRMemArchiveFv */ void JKRMemArchive::removeResourceAll(void) { - ASSERT(isMounted()); + JUT_ASSERT(642, isMounted()); if (mArcInfoBlock == NULL) return; @@ -193,7 +204,7 @@ void JKRMemArchive::removeResourceAll(void) { /* 802D6F20-802D6F5C 2D1860 003C+00 1/0 0/0 0/0 .text removeResource__13JKRMemArchiveFPv */ bool JKRMemArchive::removeResource(void* resource) { - ASSERT(isMounted()); + JUT_ASSERT(673, isMounted()); SDIFileEntry* fileEntry = findPtrResource(resource); if (!fileEntry) @@ -228,7 +239,7 @@ u32 JKRMemArchive::fetchResource_subroutine(u8* src, u32 srcLength, u8* dst, u32 return srcLength; default: { - JUTException::panic_f(__FILE__, 723, "%s", "??? bad sequence\n"); + JUTException::panic(__FILE__, 723, "??? bad sequence\n"); } break; }