JKRArchive debug rom (#1935)

This commit is contained in:
Jcw87 2023-09-19 03:46:45 -07:00 committed by GitHub
parent e5cb9ce472
commit 5b86df6000
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 106 additions and 70 deletions

View File

@ -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*);

View File

@ -120,7 +120,7 @@ public:
protected:
JKRArchive();
JKRArchive(long, EMountMode);
JKRArchive(s32, EMountMode);
virtual ~JKRArchive();
public:

View File

@ -1,5 +0,0 @@
#ifndef JKRARCHIVEPRI_H
#define JKRARCHIVEPRI_H
#endif /* JKRARCHIVEPRI_H */

View File

@ -1,5 +0,0 @@
#ifndef JKRARCHIVEPUB_H
#define JKRARCHIVEPUB_H
#endif /* JKRARCHIVEPUB_H */

View File

@ -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 */

View File

@ -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 */

View File

@ -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<u8*>(JKRAllocFromHeap(pHeap, alignedLen, 0x20));
JKRAramToMainRam(entryNum, tmpBufAligned, alignedLen, EXPAND_SWITCH_UNKNOWN0, alignedLen,
buffer = static_cast<u8*>(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<u8*>(JKRAllocFromHeap(pHeap, length, sizeof(SArcHeader)));
buffer = static_cast<u8*>(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);
}

View File

@ -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;

View File

@ -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<JKRFileLoader>& 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;

View File

@ -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<JKRCompArchive *>(this)->setExpandSize(fileEntry, expandSize);

View File

@ -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;
}
}

View File

@ -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;
}