diff --git a/configure.py b/configure.py index 1b725fbcc..fccddd7f2 100644 --- a/configure.py +++ b/configure.py @@ -787,7 +787,7 @@ config.libs = [ Object(Matching, "JSystem/JKernel/JKRFile.cpp"), Object(NonMatching, "JSystem/JKernel/JKRDvdFile.cpp"), Object(Matching, "JSystem/JKernel/JKRDvdRipper.cpp"), - Object(NonMatching, "JSystem/JKernel/JKRDvdAramRipper.cpp", extra_cflags=["-sym off"]), + Object(Matching, "JSystem/JKernel/JKRDvdAramRipper.cpp", extra_cflags=["-sym off"]), Object(Matching, "JSystem/JKernel/JKRDecomp.cpp"), ], ), diff --git a/include/JSystem/JKernel/JKRArchive.h b/include/JSystem/JKernel/JKRArchive.h index 46ebcd0c4..dcad5d765 100644 --- a/include/JSystem/JKernel/JKRArchive.h +++ b/include/JSystem/JKernel/JKRArchive.h @@ -193,12 +193,12 @@ public: static JKRCompression convertAttrToCompressionType(u32 attr) { #define JKRARCHIVE_ATTR_COMPRESSION 0x04 -#define JKRARCHIVE_ATTR_YAY0 0x80 +#define JKRARCHIVE_ATTR_YAZ0 0x80 JKRCompression compression; - if (FLAG_ON(attr, JKRARCHIVE_ATTR_COMPRESSION)) { + if (!(attr & JKRARCHIVE_ATTR_COMPRESSION)) { compression = COMPRESSION_NONE; - } else if (!FLAG_ON(attr, JKRARCHIVE_ATTR_YAY0)) { + } else if (attr & JKRARCHIVE_ATTR_YAZ0) { compression = COMPRESSION_YAZ0; } else { compression = COMPRESSION_YAY0; diff --git a/include/JSystem/JKernel/JKRDvdArchive.h b/include/JSystem/JKernel/JKRDvdArchive.h index fe72cd8f3..83333ad96 100644 --- a/include/JSystem/JKernel/JKRDvdArchive.h +++ b/include/JSystem/JKernel/JKRDvdArchive.h @@ -23,7 +23,7 @@ public: private: /* 0x00 */ // vtable /* 0x04 */ // JKRArchive - /* 0x64 */ s32 field_0x64; + /* 0x64 */ s32 mDataOffset; /* 0x68 */ JKRDvdFile* mDvdFile; }; diff --git a/include/global.h b/include/global.h index 3e5b06a42..82758bb06 100644 --- a/include/global.h +++ b/include/global.h @@ -15,7 +15,6 @@ #define JUT_EXPECT(...) #define ASSERT(...) #define LOGF(FMT, ...) -#define FLAG_ON(V, F) (((V) & (F)) == 0) #define FLOAT_LABEL(x) (*(f32*)&x) #define DOUBLE_LABEL(x) (*(f64*)&x) diff --git a/src/JSystem/JKernel/JKRAramArchive.cpp b/src/JSystem/JKernel/JKRAramArchive.cpp index 08230cabb..2283e8079 100644 --- a/src/JSystem/JKernel/JKRAramArchive.cpp +++ b/src/JSystem/JKernel/JKRAramArchive.cpp @@ -249,31 +249,32 @@ u32 JKRAramArchive::fetchResource_subroutine(u32 srcAram, u32 srcLength, u8* dst /* 802BA894-802BAA48 .text fetchResource_subroutine__14JKRAramArchiveFUlUlP7JKRHeapiPPUc */ u32 JKRAramArchive::fetchResource_subroutine(u32 entryNum, u32 length, JKRHeap* pHeap, int compression, u8** out) { - /* Nonmatching */ - u32 readLen; u32 alignedLen = ALIGN_NEXT(length, 0x20); u8* buffer; switch (compression) { case COMPRESSION_NONE: - buffer = static_cast(JKRAllocFromHeap(pHeap, alignedLen, 0x20)); - JUT_ASSERT(662, buffer != 0); - JKRAramToMainRam(entryNum, buffer, alignedLen, EXPAND_SWITCH_UNKNOWN0, alignedLen, - NULL, -1, NULL); - *out = buffer; - return length; + { + buffer = (u8*)(JKRAllocFromHeap(pHeap, alignedLen, 0x20)); + JUT_ASSERT(662, buffer != 0); + JKRAramToMainRam(entryNum, buffer, alignedLen, EXPAND_SWITCH_UNKNOWN0, alignedLen, NULL, -1, NULL); + *out = buffer; + return length; + } case COMPRESSION_YAY0: case COMPRESSION_YAZ0: - u8 tmpBuf[0x40]; - u8* buf = (u8*)ALIGN_PREV((s32)&tmpBuf[0x1F], sizeof(SArcHeader)); - JKRAramToMainRam(entryNum, buf, sizeof(SArcHeader), EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1, NULL); - length = ALIGN_NEXT(JKRDecompExpandSize(buf), sizeof(SArcHeader)); - buffer = static_cast(JKRAllocFromHeap(pHeap, length, sizeof(SArcHeader))); - JUT_ASSERT(688, buffer); - JKRAramToMainRam(entryNum, buffer, alignedLen, EXPAND_SWITCH_UNKNOWN1, length, pHeap, - -1, &readLen); - *out = buffer; - return readLen; + { + u8 headerBuf[0x40]; + u8* alignHeader = (u8*)ALIGN_NEXT((s32)&headerBuf[0], sizeof(SArcHeader)); + JKRAramToMainRam(entryNum, alignHeader, sizeof(SArcHeader), EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1, NULL); + u32 decompressedLen = ALIGN_NEXT(JKRDecompExpandSize(alignHeader), sizeof(SArcHeader)); + buffer = (u8*)(JKRAllocFromHeap(pHeap, decompressedLen, sizeof(SArcHeader))); + JUT_ASSERT(688, buffer); + u32 readLen; + JKRAramToMainRam(entryNum, buffer, alignedLen, EXPAND_SWITCH_UNKNOWN1, decompressedLen, pHeap, -1, &readLen); + *out = buffer; + return readLen; + } default: OSPanic(__FILE__, 698, ":::??? bad sequence\n"); return 0; diff --git a/src/JSystem/JKernel/JKRDvdArchive.cpp b/src/JSystem/JKernel/JKRDvdArchive.cpp index 23b5ef693..9ae44bdb4 100644 --- a/src/JSystem/JKernel/JKRDvdArchive.cpp +++ b/src/JSystem/JKernel/JKRDvdArchive.cpp @@ -65,7 +65,7 @@ static void dummy() { /* 802BAD98-802BB024 .text open__13JKRDvdArchiveFl */ bool JKRDvdArchive::open(s32 entryNum) { mArcInfoBlock = NULL; - field_0x64 = NULL; + mDataOffset = NULL; mNodes = NULL; mFiles = NULL; mStringTable = NULL; @@ -125,7 +125,7 @@ bool JKRDvdArchive::open(s32 entryNum) { memset(mExpandedSize, 0, sizeof(s32) * mArcInfoBlock->num_file_entries); } - field_0x64 = arcHeader->header_length + arcHeader->file_data_offset; + mDataOffset = arcHeader->header_length + arcHeader->file_data_offset; cleanup: if (arcHeader) { @@ -155,7 +155,7 @@ void* JKRDvdArchive::fetchResource(SDIFileEntry* fileEntry, u32* returnSize) { if (!fileEntry->data) { u8* resourcePtr; u32 resourceSize = fetchResource_subroutine( - mEntryNum, this->field_0x64 + fileEntry->data_offset, fileEntry->data_size, mHeap, + mEntryNum, this->mDataOffset + fileEntry->data_offset, fileEntry->data_size, mHeap, fileCompression, mCompression, &resourcePtr); *returnSize = resourceSize; if (resourceSize == 0) { @@ -182,20 +182,20 @@ void* JKRDvdArchive::fetchResource(SDIFileEntry* fileEntry, u32* returnSize) { void* JKRDvdArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* fileEntry, u32* returnSize) { /* Nonmatching */ JUT_ASSERT(489, isMounted()); - u32 otherSize; + u32 expandSize; u32 size = fileEntry->data_size; JKRCompression fileCompression = JKRConvertAttrToCompressionType(fileEntry->getAttr()); if (!fileEntry->data) { bufferSize = ALIGN_PREV(bufferSize, 0x20); - size = fetchResource_subroutine(mEntryNum, field_0x64 + fileEntry->data_offset, + size = fetchResource_subroutine(mEntryNum, mDataOffset + fileEntry->data_offset, fileEntry->data_size, (u8*)buffer, bufferSize, fileCompression, mCompression); } else { if (fileCompression == COMPRESSION_YAZ0) { - otherSize = getExpandSize(fileEntry); - if (otherSize) { - size = otherSize; + expandSize = getExpandSize(fileEntry); + if (expandSize) { + size = expandSize; } } @@ -360,7 +360,7 @@ u32 JKRDvdArchive::getExpandedResSize(const void* resource) const { u8* arcHeader = (u8*)ALIGN_NEXT((u32)buffer, 0x20); JKRDvdToMainRam(mEntryNum, arcHeader, EXPAND_SWITCH_UNKNOWN2, sizeof(SArcHeader), NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, - this->field_0x64 + fileEntry->data_offset, NULL); + this->mDataOffset + fileEntry->data_offset, NULL); DCInvalidateRange(arcHeader, sizeof(SArcHeader)); resourceSize = JKRDecompExpandSize(arcHeader);