JKRDvdRipper, JKRSolidHeap (#199)

This commit is contained in:
Jcw87
2022-06-07 16:03:27 -04:00
committed by GitHub
parent 3c962112db
commit fb9dd3cdee
17 changed files with 491 additions and 498 deletions
@@ -80,7 +80,6 @@ extern "C" void calc__15J3DVtxColorCalcFP8J3DModel();
extern "C" void offAllFlag__13J3DDeformDataFUl();
extern "C" void deform__13J3DDeformDataFP8J3DModel();
extern "C" void entryIn__8J3DJointFv();
extern "C" void DCStoreRangeNoSync();
extern "C" void __construct_new_array();
extern "C" void _savegpr_23();
extern "C" void _savegpr_25();
+13 -13
View File
@@ -252,13 +252,13 @@ static u8* szpBuf;
static u8* szpEnd;
/* 804513D4-804513D8 0008D4 0004+00 2/2 0/0 0/0 .sbss refBuf */
static u8 refBuf[4];
static u8* refBuf;
/* 804513D8-804513DC 0008D8 0004+00 2/2 0/0 0/0 .sbss refEnd */
static u8 refEnd[4];
static u8* refEnd;
/* 804513DC-804513E0 0008DC 0004+00 2/2 0/0 0/0 .sbss refCurrent */
static u8 refCurrent[4];
static u8* refCurrent;
/* 804513E0-804513E4 0008E0 0004+00 3/3 0/0 0/0 .sbss srcOffset */
static u32 srcOffset;
@@ -267,28 +267,28 @@ static u32 srcOffset;
static u32 transLeft;
/* 804513E8-804513EC 0008E8 0004+00 3/3 0/0 0/0 .sbss srcLimit */
static u32 srcLimit;
static u8* srcLimit;
/* 804513EC-804513F0 0008EC 0004+00 3/3 0/0 0/0 .sbss srcAddress */
static u32 srcAddress;
/* 804513F0-804513F4 0008F0 0004+00 2/2 0/0 0/0 .sbss fileOffset */
static u8 fileOffset[4];
static u32 fileOffset;
/* 804513F4-804513F8 0008F4 0004+00 2/2 0/0 0/0 .sbss readCount */
static u8 readCount[4];
static u32 readCount;
/* 804513F8-804513FC 0008F8 0004+00 2/2 0/0 0/0 .sbss maxDest */
static u8 maxDest[4];
static u32 maxDest;
/* 804513FC-80451400 0008FC 0004+00 1/1 0/0 0/0 .sbss None */
static u8 data_804513FC[4];
/* 80451400-80451404 000900 0004+00 2/2 0/0 0/0 .sbss tsPtr */
static u8 tsPtr[4];
static u32* tsPtr;
/* 80451404-80451408 000904 0004+00 1/1 0/0 0/0 .sbss tsArea */
static u8 tsArea[4];
static u32 tsArea;
/* 802D2830-802D29A0 2CD170 0170+00 1/1 0/0 0/0 .text
* JKRDecompressFromAramToMainRam__FUlPvUlUlUlPUl */
@@ -371,7 +371,7 @@ static asm void JKRDecompressFromAramToMainRam(u32 param_0, void* param_1, u32 p
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void decompSZS_subroutine(u8* param_0, u8* param_1) {
static asm int decompSZS_subroutine(u8* param_0, u8* param_1) {
nofralloc
#include "asm/JSystem/JKernel/JKRAram/decompSZS_subroutine__FPUcPUc.s"
}
@@ -379,7 +379,7 @@ static asm void decompSZS_subroutine(u8* param_0, u8* param_1) {
/* 802D2C40-802D2CE4 2CD580 00A4+00 1/1 0/0 0/0 .text firstSrcData__Fv */
static u8* firstSrcData(void) {
srcLimit = (u32)(szpEnd - 0x19);
srcLimit = szpEnd - 0x19;
u8* buffer = szpBuf;
u32 length;
@@ -398,7 +398,7 @@ static u8* firstSrcData(void) {
srcOffset += length;
transLeft -= length;
if (!transLeft) {
srcLimit = (u32)(buffer + length);
srcLimit = buffer + length;
}
return buffer;
@@ -441,7 +441,7 @@ static u8* nextSrcData(u8* current) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void nextSrcData(u8* param_0) {
static asm u8* nextSrcData(u8* param_0) {
nofralloc
#include "asm/JSystem/JKernel/JKRAram/nextSrcData__FPUc.s"
}
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -222,14 +222,14 @@ void* JKRFileCache::getResource(const char* path) {
CCacheBlock* cacheBlock = findCacheBlock(dvdFile.getFileID());
if (!cacheBlock) {
// dvdFile.getFileSize() not inlined
u32 fileSize = dvdFile.getFileInfo().length;
u32 fileSize = dvdFile.getFileInfo()->length;
u32 alignedSize = ALIGN_NEXT(fileSize, 0x20);
buffer = JKRAllocFromHeap(mParentHeap, alignedSize, 0x20);
if (buffer) {
dvdFile.read(buffer, alignedSize, 0);
cacheBlock = new (JKRHeap::getSystemHeap(), 0)
CCacheBlock(dvdFile.getFileID(), dvdFile.getFileInfo().length, buffer);
CCacheBlock(dvdFile.getFileID(), dvdFile.getFileInfo()->length, buffer);
mCacheBlockList.append(&cacheBlock->mCacheBlockLink);
}
} else {
@@ -273,7 +273,7 @@ u32 JKRFileCache::readResource(void* dst, u32 dstLength, const char* path) {
loop:
if (dvdFile.isAvailable()) {
// dvdFile.getFileSize() not inlined
u32 fileSize = dvdFile.getFileInfo().length;
u32 fileSize = dvdFile.getFileInfo()->length;
resourceSize = ALIGN_NEXT(fileSize, 0x20);
dstLength = ALIGN_PREV(dstLength, 0x20);
if (resourceSize > dstLength) {
+28 -64
View File
@@ -121,40 +121,27 @@ JKRSolidHeap::~JKRSolidHeap(void) {
}
/* 802D0BF4-802D0CB0 2CB534 00BC+00 0/0 5/5 1/1 .text adjustSize__12JKRSolidHeapFv */
#ifdef NONMATCHING
s32 JKRSolidHeap::adjustSize(void) {
JKRHeap* parent = getParent();
if (parent) {
lock();
s32 start = mStart;
s32 newSize = (s32)this->mSolidHead - ALIGN_NEXT(start, 0x20);
s32 newSizeThis = newSize + (start - (s32)this);
s32 actualSize = parent->resize(this, newSizeThis);
if (actualSize != -1) {
u32 thisSize = (u32)mStart - (u32)this;
u32 newSize = ALIGN_NEXT(mSolidHead - mStart, 0x20);
if (parent->resize(this, thisSize + newSize) != -1) {
mFreeSize = 0;
mSize = newSize;
mEnd = mStart + mSize;
mSolidHead = (void*)mEnd;
mSolidTail = (void*)mEnd;
mSolidHead = mEnd;
mSolidTail = mEnd;
}
unlock();
return newSizeThis;
return thisSize + newSize;
}
return -1;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm s32 JKRSolidHeap::adjustSize() {
nofralloc
#include "asm/JSystem/JKernel/JKRSolidHeap/adjustSize__12JKRSolidHeapFv.s"
}
#pragma pop
#endif
/* 802D0CB0-802D0D58 2CB5F0 00A8+00 1/0 0/0 0/0 .text do_alloc__12JKRSolidHeapFUli */
void* JKRSolidHeap::do_alloc(u32 size, int alignment) {
@@ -190,28 +177,14 @@ void* JKRSolidHeap::do_alloc(u32 size, int alignment) {
return ptr;
}
/* ############################################################################################## */
/* 8039CE50-8039CE50 0294B0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8039CE50 =
"allocFromHead: cannot alloc memory (0x%x byte).\n";
#pragma pop
/* 802D0D58-802D0E20 2CB698 00C8+00 1/1 0/0 0/0 .text allocFromHead__12JKRSolidHeapFUli
*/
#ifdef NONMATCHING
void* JKRSolidHeap::allocFromHead(u32 size, int alignment) {
void* ptr;
u32 offset;
u32 alignedSize;
u32 alignedStart;
u32 totalSize;
alignedSize = ALIGN_NEXT(size, 0x4);
ptr = NULL;
alignedStart = (alignment - 1 + (u32)mSolidHead) & ~(alignment - 1);
offset = alignedStart - (u32)mSolidHead;
totalSize = alignedSize + offset;
size = ALIGN_NEXT(size, 0x4);
void* ptr = NULL;
u32 alignedStart = (alignment - 1 + (u32)mSolidHead) & ~(alignment - 1);
u32 offset = alignedStart - (u32)mSolidHead;
u32 totalSize = size + offset;
if (totalSize <= mFreeSize) {
ptr = (void*)alignedStart;
mSolidHead += totalSize;
@@ -219,41 +192,32 @@ void* JKRSolidHeap::allocFromHead(u32 size, int alignment) {
} else {
JUTWarningConsole_f("allocFromHead: cannot alloc memory (0x%x byte).\n", totalSize);
if (getErrorFlag() == true) {
callErrorHandler(this, alignedSize, alignment);
callErrorHandler(this, size, alignment);
}
}
return ptr;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void* JKRSolidHeap::allocFromHead(u32 param_0, int param_1) {
nofralloc
#include "asm/JSystem/JKernel/JKRSolidHeap/allocFromHead__12JKRSolidHeapFUli.s"
}
#pragma pop
#endif
/* ############################################################################################## */
/* 8039CE50-8039CE50 0294B0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8039CE81 =
"allocFromTail: cannot alloc memory (0x%x byte).\n";
#pragma pop
/* 802D0E20-802D0EE4 2CB760 00C4+00 1/1 0/0 0/0 .text allocFromTail__12JKRSolidHeapFUli
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void* JKRSolidHeap::allocFromTail(u32 param_0, int param_1) {
nofralloc
#include "asm/JSystem/JKernel/JKRSolidHeap/allocFromTail__12JKRSolidHeapFUli.s"
void* JKRSolidHeap::allocFromTail(u32 size, int alignment) {
size = ALIGN_NEXT(size, 4);
void* ptr = NULL;
u32 alignedStart = ALIGN_PREV((u32)mSolidTail - size, alignment);
u32 totalSize = (u32)mSolidTail - (u32)alignedStart;
if (totalSize <= mFreeSize) {
ptr = (void*)alignedStart;
mSolidTail -= totalSize;
mFreeSize -= totalSize;
} else {
JUTWarningConsole_f("allocFromTail: cannot alloc memory (0x%x byte).\n", totalSize);
if (getErrorFlag() == true) {
callErrorHandler(this, size, alignment);
}
}
return ptr;
}
#pragma pop
/* 802D0EE4-802D0F14 2CB824 0030+00 1/0 0/0 0/0 .text do_free__12JKRSolidHeapFPv */
void JKRSolidHeap::do_free(void* ptr) {