mirror of https://github.com/zeldaret/tp.git
JKRArchive debug rom (#1935)
This commit is contained in:
parent
e5cb9ce472
commit
5b86df6000
|
|
@ -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*);
|
||||
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ public:
|
|||
|
||||
protected:
|
||||
JKRArchive();
|
||||
JKRArchive(long, EMountMode);
|
||||
JKRArchive(s32, EMountMode);
|
||||
virtual ~JKRArchive();
|
||||
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
#ifndef JKRARCHIVEPRI_H
|
||||
#define JKRARCHIVEPRI_H
|
||||
|
||||
|
||||
#endif /* JKRARCHIVEPRI_H */
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
#ifndef JKRARCHIVEPUB_H
|
||||
#define JKRARCHIVEPUB_H
|
||||
|
||||
|
||||
#endif /* JKRARCHIVEPUB_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 */
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue