mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-04 00:38:59 -04:00
Copy JKernel (#126)
* start JSystem * JKRAram and JUTGamePad * started heap and thread * more JKernel * mostly finished JKernel * delete unused asm * JKRFileFinder * delete unused asm and match findNextFile * format * fix mtx_vec
This commit is contained in:
@@ -5,8 +5,8 @@
|
||||
|
||||
#include "JSystem/JFramework/JFWDisplay.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/mtx/mtx44.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "mtx_vec.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
|
||||
+229
-198
@@ -4,87 +4,15 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRAram.h"
|
||||
#include "JSystem/JKernel/JKRAramBlock.h"
|
||||
#include "JSystem/JKernel/JKRAramHeap.h"
|
||||
#include "JSystem/JKernel/JKRAramPiece.h"
|
||||
#include "JSystem/JKernel/JKRAramStream.h"
|
||||
#include "JSystem/JKernel/JKRExpHeap.h"
|
||||
#include "JSystem/JUtility/JUTException.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JUTException {
|
||||
/* 802E21FC */ void panic_f(char const*, int, char const*, ...);
|
||||
};
|
||||
|
||||
struct JSUPtrList {
|
||||
/* 802DBEAC */ ~JSUPtrList();
|
||||
/* 802DBF14 */ void initiate();
|
||||
};
|
||||
|
||||
template <typename A0>
|
||||
struct JSUList {};
|
||||
/* JSUList<JKRAMCommand> */
|
||||
struct JSUList__template5 {
|
||||
/* 802D2DF0 */ void func_802D2DF0(void* _this);
|
||||
};
|
||||
|
||||
struct JKRThread {
|
||||
/* 802D1568 */ JKRThread(u32, int, int);
|
||||
/* 802D1758 */ ~JKRThread();
|
||||
};
|
||||
|
||||
struct JKRHeap {
|
||||
/* 802CE4D4 */ void alloc(u32, int);
|
||||
/* 802CE474 */ void alloc(u32, int, JKRHeap*);
|
||||
/* 802CE500 */ void free(void*, JKRHeap*);
|
||||
|
||||
static u8 sSystemHeap[4];
|
||||
static u8 sCurrentHeap[4];
|
||||
};
|
||||
|
||||
struct JKRExpandSwitch {};
|
||||
|
||||
struct JKRDecomp {
|
||||
/* 802DB680 */ void create(s32);
|
||||
/* 802DB988 */ void orderSync(u8*, u8*, u32, u32);
|
||||
/* 802DBCF8 */ void checkCompressed(u8*);
|
||||
};
|
||||
|
||||
struct JKRAramStream {
|
||||
/* 802D3B48 */ void create(s32);
|
||||
};
|
||||
|
||||
struct JKRAMCommand {};
|
||||
|
||||
struct JKRAramBlock {};
|
||||
|
||||
struct JKRAramPiece {
|
||||
/* 802D3838 */ void orderSync(int, u32, u32, u32, JKRAramBlock*);
|
||||
/* 802D38CC */ void startDMA(JKRAMCommand*);
|
||||
};
|
||||
|
||||
struct JKRAramHeap {
|
||||
struct EAllocMode {};
|
||||
|
||||
/* 802D2E44 */ JKRAramHeap(u32, u32);
|
||||
/* 802D2FBC */ void alloc(u32, JKRAramHeap::EAllocMode);
|
||||
};
|
||||
|
||||
struct JKRAram {
|
||||
/* 802D1FA4 */ void create(u32, u32, s32, s32, s32);
|
||||
/* 802D2040 */ JKRAram(u32, u32, s32);
|
||||
/* 802D214C */ ~JKRAram();
|
||||
/* 802D21DC */ void run();
|
||||
/* 802D2248 */ void checkOkAddress(u8*, u32, JKRAramBlock*, u32);
|
||||
/* 802D22DC */ void changeGroupIdIfNeed(u8*, int);
|
||||
/* 802D233C */ void mainRamToAram(u8*, u32, u32, JKRExpandSwitch, u32, JKRHeap*, int, u32*);
|
||||
/* 802D25B4 */ void aramToMainRam(u32, u8*, u32, JKRExpandSwitch, u32, JKRHeap*, int, u32*);
|
||||
|
||||
static u8 sMessageBuffer[16];
|
||||
static u8 sMessageQueue[32];
|
||||
static u8 sAramCommandList[12];
|
||||
static u32 sSZSBufferSize[1 + 1 /* padding */];
|
||||
static u8 sAramObject[4];
|
||||
};
|
||||
#include "dolphin/ar/ar.h"
|
||||
#include "global.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
@@ -135,17 +63,6 @@ extern "C" void __dt__10JSUPtrListFv();
|
||||
extern "C" void initiate__10JSUPtrListFv();
|
||||
extern "C" void panic_f__12JUTExceptionFPCciPCce();
|
||||
extern "C" void DCStoreRangeNoSync();
|
||||
extern "C" void OSDisableInterrupts();
|
||||
extern "C" void OSRestoreInterrupts();
|
||||
extern "C" void OSInitMessageQueue();
|
||||
extern "C" void OSReceiveMessage();
|
||||
extern "C" void OSInitMutex();
|
||||
extern "C" void OSLockMutex();
|
||||
extern "C" void OSUnlockMutex();
|
||||
extern "C" void OSResumeThread();
|
||||
extern "C" void ARAlloc();
|
||||
extern "C" void ARInit();
|
||||
extern "C" void ARGetSize();
|
||||
extern "C" void ARQInit();
|
||||
extern "C" void __register_global_object();
|
||||
extern "C" void _savegpr_22();
|
||||
@@ -169,98 +86,130 @@ extern "C" u8 sCurrentHeap__7JKRHeap[4];
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 804513C8-804513CC 0008C8 0004+00 3/3 9/9 0/0 .sbss sAramObject__7JKRAram */
|
||||
u8 JKRAram::sAramObject[4];
|
||||
JKRAram* JKRAram::sAramObject;
|
||||
|
||||
/* 802D1FA4-802D2040 2CC8E4 009C+00 0/0 1/1 0/0 .text create__7JKRAramFUlUllll */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAram::create(u32 param_0, u32 param_1, s32 param_2, s32 param_3, s32 param_4) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAram/create__7JKRAramFUlUllll.s"
|
||||
JKRAram* JKRAram::create(u32 aram_audio_buffer_size, u32 aram_audio_graph_size,
|
||||
long stream_priority, long decomp_priority, long piece_priority) {
|
||||
if (!sAramObject) {
|
||||
sAramObject = new (JKRHeap::getSystemHeap(), 0)
|
||||
JKRAram(aram_audio_buffer_size, aram_audio_graph_size, piece_priority);
|
||||
}
|
||||
|
||||
JKRCreateAramStreamManager(stream_priority);
|
||||
JKRCreateDecompManager(decomp_priority);
|
||||
sAramObject->resume();
|
||||
return sAramObject;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CC128-803CC138 029248 0010+00 1/1 0/0 0/0 .data sMessageBuffer__7JKRAram */
|
||||
SECTION_DATA u8 JKRAram::sMessageBuffer[16] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
OSMessage JKRAram::sMessageBuffer[4] = {
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
};
|
||||
|
||||
/* 803CC138-803CC158 029258 0020+00 1/1 1/1 0/0 .data sMessageQueue__7JKRAram */
|
||||
SECTION_DATA u8 JKRAram::sMessageQueue[32] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
/* 803CC158-803CC168 029278 0010+00 2/2 0/0 0/0 .data __vt__7JKRAram */
|
||||
SECTION_DATA extern void* __vt__7JKRAram[4] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__7JKRAramFv,
|
||||
(void*)run__7JKRAramFv,
|
||||
};
|
||||
OSMessageQueue JKRAram::sMessageQueue = {0};
|
||||
|
||||
/* 802D2040-802D214C 2CC980 010C+00 1/1 0/0 0/0 .text __ct__7JKRAramFUlUll */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRAram::JKRAram(u32 param_0, u32 param_1, s32 param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAram/__ct__7JKRAramFUlUll.s"
|
||||
JKRAram::JKRAram(u32 audio_buffer_size, u32 audio_graph_size, long priority)
|
||||
: JKRThread(0xC00, 0x10, priority) {
|
||||
u32 aramBase = ARInit(mStackArray, ARRAY_SIZE(mStackArray));
|
||||
ARQInit();
|
||||
|
||||
u32 aramSize = ARGetSize();
|
||||
|
||||
mAudioMemorySize = audio_buffer_size;
|
||||
if (audio_graph_size == 0xffffffff) {
|
||||
mGraphMemorySize = (aramSize - audio_buffer_size) - aramBase;
|
||||
mAramMemorySize = 0;
|
||||
} else {
|
||||
mGraphMemorySize = audio_graph_size;
|
||||
mAramMemorySize = (aramSize - (audio_buffer_size + audio_graph_size)) - aramBase;
|
||||
}
|
||||
|
||||
mAudioMemoryPtr = ARAlloc(mAudioMemorySize);
|
||||
mGraphMemoryPtr = ARAlloc(mGraphMemorySize);
|
||||
|
||||
if (mAramMemorySize) {
|
||||
mAramMemoryPtr = ARAlloc(mAramMemorySize);
|
||||
} else {
|
||||
mAramMemoryPtr = NULL;
|
||||
}
|
||||
|
||||
mAramHeap = new (JKRHeap::getSystemHeap(), 0) JKRAramHeap(mGraphMemoryPtr, mGraphMemorySize);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D214C-802D21DC 2CCA8C 0090+00 1/0 0/0 0/0 .text __dt__7JKRAramFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRAram::~JKRAram() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAram/__dt__7JKRAramFv.s"
|
||||
JKRAram::~JKRAram() {
|
||||
sAramObject = NULL;
|
||||
if (mAramHeap)
|
||||
delete mAramHeap;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D21DC-802D2248 2CCB1C 006C+00 1/0 0/0 0/0 .text run__7JKRAramFv */
|
||||
// almost full match
|
||||
#ifdef NONMATCHING
|
||||
void* JKRAram::run(void) {
|
||||
int result;
|
||||
JKRAMCommand* command;
|
||||
JKRAMCommand::Message* message;
|
||||
OSInitMessageQueue(&sMessageQueue, sMessageBuffer, 4);
|
||||
do {
|
||||
OSReceiveMessage(&sMessageQueue, &message, OS_MESSAGE_BLOCKING);
|
||||
result = message->field_0x0;
|
||||
command = message->command;
|
||||
delete message;
|
||||
|
||||
if (result == 1) {
|
||||
JKRAramPiece::startDMA(command);
|
||||
}
|
||||
} while (true);
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAram::run() {
|
||||
asm void* JKRAram::run() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAram/run__7JKRAramFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8039D078-8039D078 0296D8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DEAD static char const* const stringBase_8039D078 = "JKRAram.cpp";
|
||||
SECTION_DEAD static char const* const stringBase_8039D084 = "%s";
|
||||
SECTION_DEAD static char const* const stringBase_8039D087 = ":::address not 32Byte aligned.";
|
||||
#pragma pop
|
||||
// #pragma push
|
||||
// #pragma force_active on
|
||||
// SECTION_DEAD static char const* const stringBase_8039D078 = "JKRAram.cpp";
|
||||
// SECTION_DEAD static char const* const stringBase_8039D084 = "%s";
|
||||
// SECTION_DEAD static char const* const stringBase_8039D087 = ":::address not 32Byte aligned.";
|
||||
// #pragma pop
|
||||
|
||||
/* 802D2248-802D22DC 2CCB88 0094+00 2/2 0/0 0/0 .text
|
||||
* checkOkAddress__7JKRAramFPUcUlP12JKRAramBlockUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAram::checkOkAddress(u8* param_0, u32 param_1, JKRAramBlock* param_2, u32 param_3) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAram/checkOkAddress__7JKRAramFPUcUlP12JKRAramBlockUl.s"
|
||||
void JKRAram::checkOkAddress(u8* addr, u32 size, JKRAramBlock* block, u32 param_4) {
|
||||
if (!IS_ALIGNED((u32)addr, 0x20) && !IS_ALIGNED(size, 0x20)) {
|
||||
JUTException::panic_f("JKRAram.cpp", 0xdb, "%s", ":::address not 32Byte aligned.");
|
||||
}
|
||||
|
||||
if (block && !IS_ALIGNED((u32)block->getAddress() + param_4, 0x20)) {
|
||||
JUTException::panic_f("JKRAram.cpp", 0xe3, "%s", ":::address not 32Byte aligned.");
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D22DC-802D233C 2CCC1C 0060+00 1/1 0/0 0/0 .text changeGroupIdIfNeed__7JKRAramFPUci
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAram::changeGroupIdIfNeed(u8* param_0, int param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAram/changeGroupIdIfNeed__7JKRAramFPUci.s"
|
||||
void JKRAram::changeGroupIdIfNeed(u8* data, int groupId) {
|
||||
JKRHeap* currentHeap = JKRHeap::getCurrentHeap();
|
||||
if (currentHeap->getHeapType() == 'EXPH' && groupId >= 0) {
|
||||
JKRExpHeap::CMemBlock* block = JKRExpHeap::CMemBlock::getBlock(data);
|
||||
block->newGroupId(groupId);
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D233C-802D25B4 2CCC7C 0278+00 0/0 3/3 0/0 .text
|
||||
* mainRamToAram__7JKRAramFPUcUlUl15JKRExpandSwitchUlP7JKRHeapiPUl */
|
||||
@@ -286,28 +235,20 @@ asm void JKRAram::aramToMainRam(u32 param_0, u8* param_1, u32 param_2, JKRExpand
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 804342D0-804342DC 060FF0 000C+00 1/1 0/0 0/0 .bss @492 */
|
||||
static u8 lit_492[12];
|
||||
|
||||
/* 804342DC-804342E8 060FFC 000C+00 1/1 0/0 0/0 .bss sAramCommandList__7JKRAram */
|
||||
u8 JKRAram::sAramCommandList[12];
|
||||
JSUList<JKRAMCommand> JKRAram::sAramCommandList;
|
||||
|
||||
/* 804342E8-80434300 061008 0018+00 1/1 0/0 0/0 .bss decompMutex */
|
||||
static u8 decompMutex[24];
|
||||
static OSMutex decompMutex;
|
||||
|
||||
/* 804508B8-804508C0 000338 0004+04 1/1 1/1 0/0 .sdata sSZSBufferSize__7JKRAram */
|
||||
SECTION_SDATA u32 JKRAram::sSZSBufferSize[1 + 1 /* padding */] = {
|
||||
0x00000400,
|
||||
/* padding */
|
||||
0x00000000,
|
||||
};
|
||||
u32 JKRAram::sSZSBufferSize = 0x00000400;
|
||||
|
||||
/* 804513CC-804513D0 0008CC 0004+00 3/3 0/0 0/0 .sbss szpBuf */
|
||||
static u8 szpBuf[4];
|
||||
static u8* szpBuf;
|
||||
|
||||
/* 804513D0-804513D4 0008D0 0004+00 3/3 0/0 0/0 .sbss szpEnd */
|
||||
static u8 szpEnd[4];
|
||||
static u8* szpEnd;
|
||||
|
||||
/* 804513D4-804513D8 0008D4 0004+00 2/2 0/0 0/0 .sbss refBuf */
|
||||
static u8 refBuf[4];
|
||||
@@ -319,16 +260,16 @@ static u8 refEnd[4];
|
||||
static u8 refCurrent[4];
|
||||
|
||||
/* 804513E0-804513E4 0008E0 0004+00 3/3 0/0 0/0 .sbss srcOffset */
|
||||
static u8 srcOffset[4];
|
||||
static u32 srcOffset;
|
||||
|
||||
/* 804513E4-804513E8 0008E4 0004+00 4/4 0/0 0/0 .sbss transLeft */
|
||||
static u8 transLeft[4];
|
||||
static u32 transLeft;
|
||||
|
||||
/* 804513E8-804513EC 0008E8 0004+00 3/3 0/0 0/0 .sbss srcLimit */
|
||||
static u8 srcLimit[4];
|
||||
static u32 srcLimit;
|
||||
|
||||
/* 804513EC-804513F0 0008EC 0004+00 3/3 0/0 0/0 .sbss srcAddress */
|
||||
static u8 srcAddress[4];
|
||||
static u32 srcAddress;
|
||||
|
||||
/* 804513F0-804513F4 0008F0 0004+00 2/2 0/0 0/0 .sbss fileOffset */
|
||||
static u8 fileOffset[4];
|
||||
@@ -350,6 +291,70 @@ static u8 tsArea[4];
|
||||
|
||||
/* 802D2830-802D29A0 2CD170 0170+00 1/1 0/0 0/0 .text
|
||||
* JKRDecompressFromAramToMainRam__FUlPvUlUlUlPUl */
|
||||
#ifdef NONMATCHING
|
||||
// full match, except:
|
||||
// tsPtr = &tsArea;
|
||||
// doesn't use r13
|
||||
void JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 dstLength, u32 offset,
|
||||
u32* resourceSize) {
|
||||
#define s_is_decompress_mutex_initialized lbl_804513FC
|
||||
#define decompMutex lbl_804343C0
|
||||
|
||||
// STATIC BEGIN
|
||||
// This code is probably generated by the compiler for a static variable
|
||||
BOOL enable = OSDisableInterrupts();
|
||||
if (s_is_decompress_mutex_initialized == false) {
|
||||
OSInitMutex(&decompMutex);
|
||||
s_is_decompress_mutex_initialized = true;
|
||||
}
|
||||
OSRestoreInterrupts(enable);
|
||||
// STATIC END
|
||||
|
||||
OSLockMutex(&decompMutex);
|
||||
u32 szpSize = getSZSBufferSize();
|
||||
szpBuf = (u8*)JKRAllocFromSysHeap(szpSize, 0x20);
|
||||
ASSERT(szpBuf != 0);
|
||||
szpEnd = szpBuf + szpSize;
|
||||
|
||||
if (offset != 0) {
|
||||
refBuf = (u8*)JKRAllocFromSysHeap(0x1120, 0);
|
||||
ASSERT(refBuf != 0);
|
||||
refEnd = refBuf + 0x1120;
|
||||
refCurrent = refBuf;
|
||||
} else {
|
||||
refBuf = NULL;
|
||||
}
|
||||
|
||||
srcAddress = src;
|
||||
srcOffset = 0;
|
||||
if (srcLength == 0) {
|
||||
transLeft = -1;
|
||||
} else {
|
||||
transLeft = srcLength;
|
||||
}
|
||||
|
||||
fileOffset = offset;
|
||||
readCount = 0;
|
||||
maxDest = dstLength;
|
||||
if (!resourceSize) {
|
||||
tsPtr = &tsArea;
|
||||
} else {
|
||||
tsPtr = resourceSize;
|
||||
}
|
||||
|
||||
*tsPtr = 0;
|
||||
|
||||
decompSZS_subroutine(firstSrcData(), (u8*)dst);
|
||||
JKRFreeToSysHeap(szpBuf);
|
||||
if (refBuf) {
|
||||
JKRFreeToSysHeap(refBuf);
|
||||
}
|
||||
DCStoreRangeNoSync(dst, *tsPtr);
|
||||
OSUnlockMutex(&decompMutex);
|
||||
#undef s_is_decompress_mutex_initialized
|
||||
#undef decompMutex
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -359,6 +364,7 @@ static asm void JKRDecompressFromAramToMainRam(u32 param_0, void* param_1, u32 p
|
||||
#include "asm/JSystem/JKernel/JKRAram/JKRDecompressFromAramToMainRam__FUlPvUlUlUlPUl.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802D29A0-802D2C40 2CD2E0 02A0+00 1/1 0/0 0/0 .text decompSZS_subroutine__FPUcPUc */
|
||||
#pragma push
|
||||
@@ -371,16 +377,66 @@ static asm void decompSZS_subroutine(u8* param_0, u8* param_1) {
|
||||
#pragma pop
|
||||
|
||||
/* 802D2C40-802D2CE4 2CD580 00A4+00 1/1 0/0 0/0 .text firstSrcData__Fv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
static asm void firstSrcData() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAram/firstSrcData__Fv.s"
|
||||
static u8* firstSrcData(void) {
|
||||
srcLimit = (u32)(szpEnd - 0x19);
|
||||
u8* buffer = szpBuf;
|
||||
|
||||
u32 length;
|
||||
u32 size = szpEnd - szpBuf;
|
||||
if (transLeft < size) {
|
||||
length = transLeft;
|
||||
} else {
|
||||
length = size;
|
||||
}
|
||||
|
||||
u32 src = (u32)(srcAddress + srcOffset);
|
||||
u32 dst = (u32)buffer;
|
||||
u32 alignedLength = ALIGN_NEXT(length, 0x20);
|
||||
JKRAramPcs(1, src, dst, alignedLength, NULL);
|
||||
|
||||
srcOffset += length;
|
||||
transLeft -= length;
|
||||
if (!transLeft) {
|
||||
srcLimit = (u32)(buffer + length);
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D2CE4-802D2DAC 2CD624 00C8+00 1/1 0/0 0/0 .text nextSrcData__FPUc */
|
||||
// missing one add instruction
|
||||
#ifdef NONMATCHING
|
||||
inline u32 nextSrcData_MIN(u32 A, u32 B) {
|
||||
if (A > B)
|
||||
return B;
|
||||
return A;
|
||||
}
|
||||
|
||||
static u8* nextSrcData(u8* current) {
|
||||
u8* dest;
|
||||
u32 left = (u32)(szpEnd - current);
|
||||
if (!IS_NOT_ALIGNED(left, 0x20)) {
|
||||
dest = szpBuf;
|
||||
} else {
|
||||
dest = szpBuf + 0x20 - (left & 0x1f);
|
||||
}
|
||||
|
||||
memcpy(dest, current, left);
|
||||
u32 transSize = nextSrcData_MIN(transLeft, szpEnd - (dest + left));
|
||||
ASSERT(transSize > 0);
|
||||
|
||||
JKRAramPcs(1, (u32)(srcAddress + srcOffset), (u32)(dest + left), ALIGN_NEXT(transSize, 0x20),
|
||||
NULL);
|
||||
srcOffset += transSize;
|
||||
transLeft -= transSize;
|
||||
|
||||
if (transLeft == 0) {
|
||||
srcLimit = (u32)(dest + left) + transSize;
|
||||
}
|
||||
|
||||
return dest;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -389,32 +445,7 @@ static asm void nextSrcData(u8* param_0) {
|
||||
#include "asm/JSystem/JKernel/JKRAram/nextSrcData__FPUc.s"
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D2DAC-802D2DF0 2CD6EC 0044+00 0/0 1/0 0/0 .text __sinit_JKRAram_cpp */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void __sinit_JKRAram_cpp() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAram/__sinit_JKRAram_cpp.s"
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
REGISTER_CTORS(0x802D2DAC, __sinit_JKRAram_cpp);
|
||||
#pragma pop
|
||||
|
||||
/* 802D2DF0-802D2E44 2CD730 0054+00 1/1 1/1 0/0 .text __dt__23JSUList<12JKRAMCommand>Fv
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
extern "C" asm void func_802D2DF0(void* _this) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAram/func_802D2DF0.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8039D0A6-8039D0B8 029706 000E+04 0/0 0/0 0/0 .rodata None */
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// Translation Unit: JKRAramArchive
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRAramArchive.h"
|
||||
// #include "JSystem/JKernel/JKRAramArchive.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
|
||||
@@ -4,110 +4,73 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRAramBlock.h"
|
||||
#include "JSystem/JKernel/JKRAramHeap.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JSUPtrLink {
|
||||
/* 802DBDFC */ JSUPtrLink(void*);
|
||||
/* 802DBE14 */ ~JSUPtrLink();
|
||||
};
|
||||
|
||||
struct JSUPtrList {
|
||||
/* 802DC094 */ void insert(JSUPtrLink*, JSUPtrLink*);
|
||||
/* 802DC15C */ void remove(JSUPtrLink*);
|
||||
};
|
||||
|
||||
struct JKRHeap {};
|
||||
|
||||
struct JKRAramHeap {};
|
||||
|
||||
struct JKRAramBlock {
|
||||
/* 802D3304 */ JKRAramBlock(u32, u32, u32, u8, bool);
|
||||
/* 802D3378 */ ~JKRAramBlock();
|
||||
/* 802D3434 */ void allocHead(u32, u8, JKRAramHeap*);
|
||||
/* 802D34D0 */ void allocTail(u32, u8, JKRAramHeap*);
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void __ct__12JKRAramBlockFUlUlUlUcb();
|
||||
extern "C" void __dt__12JKRAramBlockFv();
|
||||
extern "C" void allocHead__12JKRAramBlockFUlUcP11JKRAramHeap();
|
||||
extern "C" void allocTail__12JKRAramBlockFUlUcP11JKRAramHeap();
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void* __nw__FUlP7JKRHeapi();
|
||||
extern "C" void __dl__FPv();
|
||||
extern "C" void __ct__10JSUPtrLinkFPv();
|
||||
extern "C" void __dt__10JSUPtrLinkFv();
|
||||
extern "C" void insert__10JSUPtrListFP10JSUPtrLinkP10JSUPtrLink();
|
||||
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void _savegpr_26();
|
||||
extern "C" void _savegpr_27();
|
||||
extern "C" void _restgpr_26();
|
||||
extern "C" void _restgpr_27();
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CC178-803CC188 029298 000C+04 2/2 0/0 0/0 .data __vt__12JKRAramBlock */
|
||||
SECTION_DATA extern void* __vt__12JKRAramBlock[3 + 1 /* padding */] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__12JKRAramBlockFv,
|
||||
/* padding */
|
||||
NULL,
|
||||
};
|
||||
|
||||
/* 802D3304-802D3378 2CDC44 0074+00 2/2 1/1 0/0 .text __ct__12JKRAramBlockFUlUlUlUcb */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRAramBlock::JKRAramBlock(u32 param_0, u32 param_1, u32 param_2, u8 param_3, bool param_4) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramBlock/__ct__12JKRAramBlockFUlUlUlUcb.s"
|
||||
JKRAramBlock::JKRAramBlock(u32 address, u32 size, u32 freeSize, u8 groupId, bool isTempMemory)
|
||||
: mBlockLink(this) {
|
||||
mAddress = address;
|
||||
mSize = size;
|
||||
mFreeSize = freeSize;
|
||||
mGroupId = groupId;
|
||||
mIsTempMemory = isTempMemory;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D3378-802D3434 2CDCB8 00BC+00 1/0 0/0 0/0 .text __dt__12JKRAramBlockFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRAramBlock::~JKRAramBlock() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramBlock/__dt__12JKRAramBlockFv.s"
|
||||
JKRAramBlock::~JKRAramBlock() {
|
||||
JSUList<JKRAramBlock>* list = mBlockLink.getSupervisor();
|
||||
JSULink<JKRAramBlock>* prev = mBlockLink.getPrev();
|
||||
if (prev) {
|
||||
JKRAramBlock* block = prev->getObject();
|
||||
block->mFreeSize = mSize + mFreeSize + block->mFreeSize;
|
||||
list->remove(&mBlockLink);
|
||||
} else {
|
||||
mFreeSize = mFreeSize + mSize;
|
||||
mSize = 0;
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D3434-802D34D0 2CDD74 009C+00 0/0 1/1 0/0 .text allocHead__12JKRAramBlockFUlUcP11JKRAramHeap
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramBlock::allocHead(u32 param_0, u8 param_1, JKRAramHeap* param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramBlock/allocHead__12JKRAramBlockFUlUcP11JKRAramHeap.s"
|
||||
JKRAramBlock* JKRAramBlock::allocHead(u32 size, u8 groupId, JKRAramHeap* aramHeap) {
|
||||
u32 address = mAddress;
|
||||
u32 usedSize = mSize;
|
||||
u32 nextAddress = address + usedSize;
|
||||
u32 freeSize = mFreeSize;
|
||||
u32 nextFreeSize = freeSize - size;
|
||||
|
||||
JKRAramBlock* block = new (aramHeap->getMgrHeap(), 0)
|
||||
JKRAramBlock(nextAddress, size, nextFreeSize, groupId, false);
|
||||
|
||||
mFreeSize = 0;
|
||||
JSULink<JKRAramBlock>* next = mBlockLink.getNext();
|
||||
JSUList<JKRAramBlock>* list = mBlockLink.getSupervisor();
|
||||
list->insert(next, &block->mBlockLink);
|
||||
return block;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D34D0-802D3574 2CDE10 00A4+00 0/0 1/1 0/0 .text allocTail__12JKRAramBlockFUlUcP11JKRAramHeap
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramBlock::allocTail(u32 param_0, u8 param_1, JKRAramHeap* param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramBlock/allocTail__12JKRAramBlockFUlUcP11JKRAramHeap.s"
|
||||
JKRAramBlock* JKRAramBlock::allocTail(u32 size, u8 groupId, JKRAramHeap* aramHeap) {
|
||||
u32 freeSize = mFreeSize;
|
||||
u32 address = mAddress;
|
||||
u32 usedSize = mSize;
|
||||
u32 endAddress = address + usedSize + freeSize;
|
||||
u32 tailAddress = endAddress - size;
|
||||
|
||||
JKRAramBlock* block =
|
||||
new (aramHeap->getMgrHeap(), 0) JKRAramBlock(tailAddress, size, 0, groupId, true);
|
||||
|
||||
mFreeSize -= size;
|
||||
JSULink<JKRAramBlock>* next = mBlockLink.getNext();
|
||||
JSUList<JKRAramBlock>* list = mBlockLink.getSupervisor();
|
||||
list->insert(next, &block->mBlockLink);
|
||||
return block;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
@@ -4,57 +4,9 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRAramHeap.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JSUPtrLink {};
|
||||
|
||||
struct JSUPtrList {
|
||||
/* 802DBEAC */ ~JSUPtrList();
|
||||
/* 802DBF14 */ void initiate();
|
||||
/* 802DBF4C */ void append(JSUPtrLink*);
|
||||
};
|
||||
|
||||
template <typename A0>
|
||||
struct JSUList {};
|
||||
/* JSUList<JKRAramBlock> */
|
||||
struct JSUList__template6 {
|
||||
/* 802D32B0 */ void func_802D32B0(void* _this);
|
||||
};
|
||||
|
||||
struct JKRHeap {
|
||||
/* 802CE83C */ void findFromRoot(void*);
|
||||
};
|
||||
|
||||
struct JKRDisposer {
|
||||
/* 802D147C */ JKRDisposer();
|
||||
/* 802D14E4 */ ~JKRDisposer();
|
||||
};
|
||||
|
||||
struct JKRAramHeap {
|
||||
struct EAllocMode {};
|
||||
|
||||
/* 802D2E44 */ JKRAramHeap(u32, u32);
|
||||
/* 802D2F14 */ ~JKRAramHeap();
|
||||
/* 802D2FBC */ void alloc(u32, JKRAramHeap::EAllocMode);
|
||||
/* 802D3034 */ void allocFromHead(u32);
|
||||
/* 802D30BC */ void allocFromTail(u32);
|
||||
/* 802D3134 */ void getFreeSize();
|
||||
/* 802D31AC */ void getTotalFreeSize();
|
||||
/* 802D3218 */ void dump();
|
||||
|
||||
static u8 sAramList[12];
|
||||
};
|
||||
|
||||
struct JKRAramBlock {
|
||||
/* 802D3304 */ JKRAramBlock(u32, u32, u32, u8, bool);
|
||||
/* 802D3434 */ void allocHead(u32, u8, JKRAramHeap*);
|
||||
/* 802D34D0 */ void allocTail(u32, u8, JKRAramHeap*);
|
||||
};
|
||||
#include "global.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
@@ -72,10 +24,17 @@ extern "C" void __sinit_JKRAramHeap_cpp();
|
||||
extern "C" void func_802D32B0(void* _this);
|
||||
extern "C" u8 sAramList__11JKRAramHeap[12];
|
||||
|
||||
extern "C" void* __vt__11JKRAramHeap;
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
// TODO: move to JKRHeap
|
||||
void* operator new(u32 size);
|
||||
void* operator new(u32 size, int alignment);
|
||||
void* operator new(u32 size, JKRHeap* heap, int alignment);
|
||||
|
||||
extern "C" void findFromRoot__7JKRHeapFPv();
|
||||
extern "C" void* __nw__FUlP7JKRHeapi();
|
||||
extern "C" void __dl__FPv();
|
||||
@@ -87,9 +46,6 @@ extern "C" void allocTail__12JKRAramBlockFUlUcP11JKRAramHeap();
|
||||
extern "C" void __dt__10JSUPtrListFv();
|
||||
extern "C" void initiate__10JSUPtrListFv();
|
||||
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void OSInitMutex();
|
||||
extern "C" void OSLockMutex();
|
||||
extern "C" void OSUnlockMutex();
|
||||
extern "C" void __register_global_object();
|
||||
extern "C" void _savegpr_29();
|
||||
extern "C" void _restgpr_29();
|
||||
@@ -98,33 +54,40 @@ extern "C" void _restgpr_29();
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CC168-803CC178 029288 000C+04 2/2 0/0 0/0 .data __vt__11JKRAramHeap */
|
||||
SECTION_DATA extern void* __vt__11JKRAramHeap[3 + 1 /* padding */] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__11JKRAramHeapFv,
|
||||
/* padding */
|
||||
NULL,
|
||||
};
|
||||
|
||||
/* 80434300-8043430C 061020 000C+00 1/1 0/0 0/0 .bss @297 */
|
||||
static u8 lit_297[12];
|
||||
|
||||
/* 8043430C-80434318 06102C 000C+00 8/8 0/0 0/0 .bss sAramList__11JKRAramHeap */
|
||||
u8 JKRAramHeap::sAramList[12];
|
||||
JSUList<JKRAramBlock> JKRAramHeap::sAramList;
|
||||
|
||||
/* 802D2E44-802D2F14 2CD784 00D0+00 0/0 1/1 0/0 .text __ct__11JKRAramHeapFUlUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRAramHeap::JKRAramHeap(u32 param_0, u32 param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramHeap/__ct__11JKRAramHeapFUlUl.s"
|
||||
JKRAramHeap::JKRAramHeap(u32 startAddress, u32 size) {
|
||||
OSInitMutex(&mMutex);
|
||||
|
||||
mHeap = JKRHeap::findFromRoot(this);
|
||||
mSize = ALIGN_PREV(size, 0x20);
|
||||
mHeadAddress = ALIGN_NEXT(startAddress, 0x20);
|
||||
mTailAddress = mHeadAddress + mSize;
|
||||
mGroupId = -1;
|
||||
|
||||
JKRAramBlock* block = new (mHeap, 0) JKRAramBlock(mHeadAddress, 0, mSize, -1, false);
|
||||
sAramList.append(&block->mBlockLink);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D2F14-802D2FBC 2CD854 00A8+00 1/0 0/0 0/0 .text __dt__11JKRAramHeapFv */
|
||||
// close match, regalloc problem in the beginning of the while loop
|
||||
#ifdef NONMATCHING
|
||||
JKRAramHeap::~JKRAramHeap() {
|
||||
JSUList<JKRAramBlock>* list = &lbl_8043430C;
|
||||
JSUListIterator<JKRAramBlock> iterator = list;
|
||||
|
||||
while (iterator != list->getEnd()) {
|
||||
JSUListIterator<JKRAramBlock> prev = iterator;
|
||||
JKRAramBlock* block = prev.getObject();
|
||||
delete block;
|
||||
}
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -133,91 +96,119 @@ asm JKRAramHeap::~JKRAramHeap() {
|
||||
#include "asm/JSystem/JKernel/JKRAramHeap/__dt__11JKRAramHeapFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802D2FBC-802D3034 2CD8FC 0078+00 0/0 5/5 0/0 .text
|
||||
* alloc__11JKRAramHeapFUlQ211JKRAramHeap10EAllocMode */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramHeap::alloc(u32 param_0, JKRAramHeap::EAllocMode param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramHeap/alloc__11JKRAramHeapFUlQ211JKRAramHeap10EAllocMode.s"
|
||||
JKRAramBlock* JKRAramHeap::alloc(u32 size, JKRAramHeap::EAllocMode allocationMode) {
|
||||
lock();
|
||||
|
||||
JKRAramBlock* block;
|
||||
if (allocationMode == JKRAramHeap::HEAD) {
|
||||
block = allocFromHead(size);
|
||||
} else {
|
||||
block = allocFromTail(size);
|
||||
}
|
||||
|
||||
unlock();
|
||||
return block;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D3034-802D30BC 2CD974 0088+00 1/1 0/0 0/0 .text allocFromHead__11JKRAramHeapFUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramHeap::allocFromHead(u32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramHeap/allocFromHead__11JKRAramHeapFUl.s"
|
||||
JKRAramBlock* JKRAramHeap::allocFromHead(u32 size) {
|
||||
u32 alignedSize = ALIGN_NEXT(size, 0x20);
|
||||
u32 bestFreeSize = UINT32_MAX;
|
||||
JKRAramBlock* bestBlock = NULL;
|
||||
|
||||
JSUList<JKRAramBlock>* list = &sAramList;
|
||||
for (JSUListIterator<JKRAramBlock> iterator = list; iterator != list->getEnd(); ++iterator) {
|
||||
JKRAramBlock* block = iterator.getObject();
|
||||
if (block->mFreeSize < alignedSize)
|
||||
continue;
|
||||
if (bestFreeSize <= block->mFreeSize)
|
||||
continue;
|
||||
|
||||
bestFreeSize = block->mFreeSize;
|
||||
bestBlock = block;
|
||||
|
||||
if (block->mFreeSize == alignedSize) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (bestBlock) {
|
||||
return bestBlock->allocHead(alignedSize, mGroupId, this);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D30BC-802D3134 2CD9FC 0078+00 1/1 0/0 0/0 .text allocFromTail__11JKRAramHeapFUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramHeap::allocFromTail(u32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramHeap/allocFromTail__11JKRAramHeapFUl.s"
|
||||
JKRAramBlock* JKRAramHeap::allocFromTail(u32 size) {
|
||||
u32 alignedSize = ALIGN_NEXT(size, 0x20);
|
||||
JKRAramBlock* tailBlock = NULL;
|
||||
|
||||
JSUList<JKRAramBlock>* list = &sAramList;
|
||||
JSUListIterator<JKRAramBlock> iterator = list->getLast();
|
||||
for (; iterator != list->getEnd(); --iterator) {
|
||||
JKRAramBlock* block = iterator.getObject();
|
||||
if (block->mFreeSize >= alignedSize) {
|
||||
tailBlock = block;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (tailBlock) {
|
||||
return tailBlock->allocTail(alignedSize, mGroupId, this);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D3134-802D31AC 2CDA74 0078+00 0/0 1/1 0/0 .text getFreeSize__11JKRAramHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramHeap::getFreeSize() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramHeap/getFreeSize__11JKRAramHeapFv.s"
|
||||
u32 JKRAramHeap::getFreeSize(void) {
|
||||
u32 maxFreeSize = 0;
|
||||
|
||||
lock();
|
||||
|
||||
JSUList<JKRAramBlock>* list = &sAramList;
|
||||
JSUListIterator<JKRAramBlock> iterator = list;
|
||||
for (; iterator != list->getEnd(); ++iterator) {
|
||||
if (iterator->mFreeSize > maxFreeSize) {
|
||||
maxFreeSize = iterator->mFreeSize;
|
||||
}
|
||||
}
|
||||
|
||||
unlock();
|
||||
return maxFreeSize;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D31AC-802D3218 2CDAEC 006C+00 0/0 2/2 0/0 .text getTotalFreeSize__11JKRAramHeapFv
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramHeap::getTotalFreeSize() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramHeap/getTotalFreeSize__11JKRAramHeapFv.s"
|
||||
u32 JKRAramHeap::getTotalFreeSize(void) {
|
||||
u32 totalFreeSize = 0;
|
||||
|
||||
lock();
|
||||
|
||||
JSUList<JKRAramBlock>* list = &sAramList;
|
||||
JSUListIterator<JKRAramBlock> iterator = list;
|
||||
for (; iterator != list->getEnd(); ++iterator) {
|
||||
totalFreeSize += iterator->mFreeSize;
|
||||
}
|
||||
|
||||
unlock();
|
||||
return totalFreeSize;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D3218-802D326C 2CDB58 0054+00 0/0 2/2 0/0 .text dump__11JKRAramHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramHeap::dump() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramHeap/dump__11JKRAramHeapFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
void JKRAramHeap::dump(void) {
|
||||
lock();
|
||||
|
||||
/* 802D326C-802D32B0 2CDBAC 0044+00 0/0 1/0 0/0 .text __sinit_JKRAramHeap_cpp */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void __sinit_JKRAramHeap_cpp() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramHeap/__sinit_JKRAramHeap_cpp.s"
|
||||
}
|
||||
#pragma pop
|
||||
JSUList<JKRAramBlock>* list = &sAramList;
|
||||
JSUListIterator<JKRAramBlock> iterator = list;
|
||||
for (; iterator != list->getEnd(); ++iterator) {
|
||||
// The debug version calls OSReport
|
||||
}
|
||||
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
REGISTER_CTORS(0x802D326C, __sinit_JKRAramHeap_cpp);
|
||||
#pragma pop
|
||||
|
||||
/* 802D32B0-802D3304 2CDBF0 0054+00 1/1 0/0 0/0 .text __dt__23JSUList<12JKRAramBlock>Fv
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
extern "C" asm void func_802D32B0(void* _this) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramHeap/func_802D32B0.s"
|
||||
unlock();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
@@ -4,259 +4,168 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRAramPiece.h"
|
||||
#include "JSystem/JKernel/JKRAram.h"
|
||||
#include "JSystem/JKernel/JKRDecomp.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "JSystem/JUtility/JUTException.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/os/OSCache.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JUTException {
|
||||
/* 802E21FC */ void panic_f(char const*, int, char const*, ...);
|
||||
};
|
||||
|
||||
struct JSUPtrLink {
|
||||
/* 802DBDFC */ JSUPtrLink(void*);
|
||||
/* 802DBE14 */ ~JSUPtrLink();
|
||||
};
|
||||
|
||||
struct JSUPtrList {
|
||||
/* 802DBF14 */ void initiate();
|
||||
/* 802DBF4C */ void append(JSUPtrLink*);
|
||||
/* 802DC15C */ void remove(JSUPtrLink*);
|
||||
};
|
||||
|
||||
template <typename A0>
|
||||
struct JSUList {};
|
||||
/* JSUList<JKRAMCommand> */
|
||||
struct JSUList__template5 {
|
||||
/* 802D2DF0 */ void func_802D2DF0(void* _this);
|
||||
};
|
||||
|
||||
struct JKRHeap {
|
||||
/* 802CE500 */ void free(void*, JKRHeap*);
|
||||
|
||||
static u8 sSystemHeap[4];
|
||||
};
|
||||
|
||||
struct JKRDecompCommand {};
|
||||
|
||||
struct JKRDecomp {
|
||||
/* 802DB8D0 */ void sendCommand(JKRDecompCommand*);
|
||||
};
|
||||
|
||||
struct JKRAMCommand {
|
||||
/* 802D39EC */ JKRAMCommand();
|
||||
/* 802D3A5C */ ~JKRAMCommand();
|
||||
};
|
||||
|
||||
struct JKRAramBlock {};
|
||||
|
||||
struct JKRAramPiece {
|
||||
/* 802D3574 */ void prepareCommand(int, u32, u32, u32, JKRAramBlock*, void (*)(u32));
|
||||
/* 802D35F4 */ void sendCommand(JKRAMCommand*);
|
||||
/* 802D3614 */ void orderAsync(int, u32, u32, u32, JKRAramBlock*, void (*)(u32));
|
||||
/* 802D3770 */ void sync(JKRAMCommand*, int);
|
||||
/* 802D3838 */ void orderSync(int, u32, u32, u32, JKRAramBlock*);
|
||||
/* 802D38CC */ void startDMA(JKRAMCommand*);
|
||||
/* 802D3944 */ void doneDMA(u32);
|
||||
|
||||
static u8 sAramPieceCommandList[12];
|
||||
static u8 mMutex[24];
|
||||
};
|
||||
|
||||
struct JKRAram {
|
||||
static u8 sMessageQueue[32];
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void prepareCommand__12JKRAramPieceFiUlUlUlP12JKRAramBlockPFUl_v();
|
||||
extern "C" void sendCommand__12JKRAramPieceFP12JKRAMCommand();
|
||||
extern "C" void orderAsync__12JKRAramPieceFiUlUlUlP12JKRAramBlockPFUl_v();
|
||||
extern "C" void sync__12JKRAramPieceFP12JKRAMCommandi();
|
||||
extern "C" void orderSync__12JKRAramPieceFiUlUlUlP12JKRAramBlock();
|
||||
extern "C" void startDMA__12JKRAramPieceFP12JKRAMCommand();
|
||||
extern "C" void doneDMA__12JKRAramPieceFUl();
|
||||
extern "C" void __ct__12JKRAMCommandFv();
|
||||
extern "C" void __dt__12JKRAMCommandFv();
|
||||
extern "C" void __sinit_JKRAramPiece_cpp();
|
||||
extern "C" extern char const* const JKRAramPiece__stringBase0;
|
||||
extern "C" u8 sAramPieceCommandList__12JKRAramPiece[12];
|
||||
extern "C" u8 mMutex__12JKRAramPiece[24];
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void OSReport();
|
||||
extern "C" void free__7JKRHeapFPvP7JKRHeap();
|
||||
extern "C" void* __nw__FUlP7JKRHeapi();
|
||||
extern "C" void __dl__FPv();
|
||||
extern "C" void func_802D2DF0(void* _this);
|
||||
extern "C" void sendCommand__9JKRDecompFP16JKRDecompCommand();
|
||||
extern "C" void __ct__10JSUPtrLinkFPv();
|
||||
extern "C" void __dt__10JSUPtrLinkFv();
|
||||
extern "C" void initiate__10JSUPtrListFv();
|
||||
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void panic_f__12JUTExceptionFPCciPCce();
|
||||
extern "C" void DCInvalidateRange();
|
||||
extern "C" void DCStoreRange();
|
||||
extern "C" void OSInitMessageQueue();
|
||||
extern "C" void OSSendMessage();
|
||||
extern "C" void OSReceiveMessage();
|
||||
extern "C" void OSLockMutex();
|
||||
extern "C" void OSUnlockMutex();
|
||||
extern "C" void ARQPostRequest();
|
||||
extern "C" void __register_global_object();
|
||||
extern "C" void _savegpr_25();
|
||||
extern "C" void _savegpr_26();
|
||||
extern "C" void _savegpr_27();
|
||||
extern "C" void _restgpr_25();
|
||||
extern "C" void _restgpr_26();
|
||||
extern "C" void _restgpr_27();
|
||||
extern "C" u8 sMessageQueue__7JKRAram[32];
|
||||
extern "C" u8 sSystemHeap__7JKRHeap[4];
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* 802D3574-802D35F4 2CDEB4 0080+00 1/1 0/0 0/0 .text
|
||||
* prepareCommand__12JKRAramPieceFiUlUlUlP12JKRAramBlockPFUl_v */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramPiece::prepareCommand(int param_0, u32 param_1, u32 param_2, u32 param_3,
|
||||
JKRAramBlock* param_4, void (*param_5)(u32)) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramPiece/prepareCommand__12JKRAramPieceFiUlUlUlP12JKRAramBlockPFUl_v.s"
|
||||
JKRAMCommand* JKRAramPiece::prepareCommand(int direction, u32 src, u32 dst, u32 length,
|
||||
JKRAramBlock* block,
|
||||
JKRAMCommand::AsyncCallback callback) {
|
||||
JKRAMCommand* command = new (JKRHeap::getSystemHeap(), -4) JKRAMCommand();
|
||||
command->mTransferDirection = direction;
|
||||
command->mSrc = src;
|
||||
command->mDst = dst;
|
||||
command->mAramBlock = block;
|
||||
command->mDataLength = length;
|
||||
command->mCallback = callback;
|
||||
return command;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D35F4-802D3614 2CDF34 0020+00 0/0 1/1 0/0 .text sendCommand__12JKRAramPieceFP12JKRAMCommand
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramPiece::sendCommand(JKRAMCommand* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramPiece/sendCommand__12JKRAramPieceFP12JKRAMCommand.s"
|
||||
void JKRAramPiece::sendCommand(JKRAMCommand* command) {
|
||||
startDMA(command);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8039D0B8-8039D0B8 029718 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DEAD static char const* const stringBase_8039D0B8 = "direction = %x\n";
|
||||
SECTION_DEAD static char const* const stringBase_8039D0C8 = "source = %x\n";
|
||||
SECTION_DEAD static char const* const stringBase_8039D0D5 = "destination = %x\n";
|
||||
SECTION_DEAD static char const* const stringBase_8039D0E7 = "length = %x\n";
|
||||
SECTION_DEAD static char const* const stringBase_8039D0F4 = "JKRAramPiece.cpp";
|
||||
SECTION_DEAD static char const* const stringBase_8039D105 = "%s";
|
||||
SECTION_DEAD static char const* const stringBase_8039D108 = "illegal address. abort.";
|
||||
#pragma pop
|
||||
|
||||
/* 80434318-80434324 061038 000C+00 1/1 0/0 0/0 .bss @492 */
|
||||
static u8 lit_492[12];
|
||||
|
||||
/* 80434324-80434330 061044 000C+00 3/3 0/0 0/0 .bss sAramPieceCommandList__12JKRAramPiece */
|
||||
u8 JKRAramPiece::sAramPieceCommandList[12];
|
||||
// JSUList<JKRAMCommand> JKRAramPiece::sAramPieceCommandList;
|
||||
JSUList<JKRAMCommand> JKRAramPiece::sAramPieceCommandList;
|
||||
|
||||
/* 80434330-80434348 061050 0018+00 3/3 0/0 0/0 .bss mMutex__12JKRAramPiece */
|
||||
u8 JKRAramPiece::mMutex[24];
|
||||
OSMutex JKRAramPiece::mMutex;
|
||||
|
||||
/* 802D3614-802D3770 2CDF54 015C+00 1/1 0/0 0/0 .text
|
||||
* orderAsync__12JKRAramPieceFiUlUlUlP12JKRAramBlockPFUl_v */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramPiece::orderAsync(int param_0, u32 param_1, u32 param_2, u32 param_3,
|
||||
JKRAramBlock* param_4, void (*param_5)(u32)) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramPiece/orderAsync__12JKRAramPieceFiUlUlUlP12JKRAramBlockPFUl_v.s"
|
||||
JKRAMCommand* JKRAramPiece::orderAsync(int direction, u32 source, u32 destination, u32 length,
|
||||
JKRAramBlock* block, JKRAMCommand::AsyncCallback callback) {
|
||||
lock();
|
||||
if (((source & 0x1f) != 0) || ((destination & 0x1f) != 0)) {
|
||||
OSReport("direction = %x\n", direction);
|
||||
OSReport("source = %x\n", source);
|
||||
OSReport("destination = %x\n", destination);
|
||||
OSReport("length = %x\n", length);
|
||||
JUTException::panic_f("JKRAramPiece.cpp", 0x6c, "%s", "illegal address. abort.");
|
||||
}
|
||||
|
||||
Message* message = new (JKRHeap::getSystemHeap(), -4) Message();
|
||||
JKRAMCommand* command =
|
||||
JKRAramPiece::prepareCommand(direction, source, destination, length, block, callback);
|
||||
message->field_0x00 = 1;
|
||||
message->command = command;
|
||||
|
||||
OSSendMessage(&JKRAram::sMessageQueue, message, OS_MESSAGE_BLOCKING);
|
||||
if (command->mCallback != NULL) {
|
||||
sAramPieceCommandList.append(&command->mPieceLink);
|
||||
}
|
||||
|
||||
unlock();
|
||||
return command;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D3770-802D3838 2CE0B0 00C8+00 1/1 0/0 0/0 .text sync__12JKRAramPieceFP12JKRAMCommandi */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramPiece::sync(JKRAMCommand* param_0, int param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramPiece/sync__12JKRAramPieceFP12JKRAMCommandi.s"
|
||||
BOOL JKRAramPiece::sync(JKRAMCommand* command, int is_non_blocking) {
|
||||
OSMessage message;
|
||||
|
||||
lock();
|
||||
if (is_non_blocking == 0) {
|
||||
OSReceiveMessage(&command->mMessageQueue, &message, OS_MESSAGE_BLOCKING);
|
||||
sAramPieceCommandList.remove(&command->mPieceLink);
|
||||
unlock();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL result = OSReceiveMessage(&command->mMessageQueue, &message, OS_MESSAGE_NON_BLOCKING);
|
||||
if (!result) {
|
||||
unlock();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
sAramPieceCommandList.remove(&command->mPieceLink);
|
||||
unlock();
|
||||
return TRUE;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D3838-802D38CC 2CE178 0094+00 0/0 6/6 0/0 .text
|
||||
* orderSync__12JKRAramPieceFiUlUlUlP12JKRAramBlock */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramPiece::orderSync(int param_0, u32 param_1, u32 param_2, u32 param_3,
|
||||
JKRAramBlock* param_4) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramPiece/orderSync__12JKRAramPieceFiUlUlUlP12JKRAramBlock.s"
|
||||
BOOL JKRAramPiece::orderSync(int direction, u32 source, u32 destination, u32 length,
|
||||
JKRAramBlock* block) {
|
||||
lock();
|
||||
|
||||
JKRAMCommand* command =
|
||||
JKRAramPiece::orderAsync(direction, source, destination, length, block, NULL);
|
||||
BOOL result = JKRAramPiece::sync(command, 0);
|
||||
delete command;
|
||||
|
||||
unlock();
|
||||
return result;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D38CC-802D3944 2CE20C 0078+00 1/1 1/1 0/0 .text startDMA__12JKRAramPieceFP12JKRAMCommand */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramPiece::startDMA(JKRAMCommand* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramPiece/startDMA__12JKRAramPieceFP12JKRAMCommand.s"
|
||||
void JKRAramPiece::startDMA(JKRAMCommand* command) {
|
||||
if (command->mTransferDirection == 1) {
|
||||
DCInvalidateRange((void*)command->mDst, command->mDataLength);
|
||||
} else {
|
||||
DCStoreRange((void*)command->mSrc, command->mDataLength);
|
||||
}
|
||||
|
||||
ARQPostRequest(&command->mRequest, 0, command->mTransferDirection, 0, command->mSrc,
|
||||
command->mDst, command->mDataLength, JKRAramPiece::doneDMA);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D3944-802D39EC 2CE284 00A8+00 1/1 0/0 0/0 .text doneDMA__12JKRAramPieceFUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramPiece::doneDMA(u32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramPiece/doneDMA__12JKRAramPieceFUl.s"
|
||||
void JKRAramPiece::doneDMA(u32 requestAddress) {
|
||||
JKRAMCommand* command = (JKRAMCommand*)requestAddress;
|
||||
|
||||
if (command->mTransferDirection == 1) {
|
||||
DCInvalidateRange((void*)command->mDst, command->mDataLength);
|
||||
}
|
||||
|
||||
if (command->field_0x60 != 0) {
|
||||
if (command->field_0x60 == 2) {
|
||||
JKRDecomp::sendCommand(command->mDecompCommand);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (command->mCallback) {
|
||||
(*command->mCallback)(requestAddress);
|
||||
} else if (command->field_0x5C) {
|
||||
OSSendMessage(command->field_0x5C, command, OS_MESSAGE_NON_BLOCKING);
|
||||
} else {
|
||||
OSSendMessage(&command->mMessageQueue, command, OS_MESSAGE_NON_BLOCKING);
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D39EC-802D3A5C 2CE32C 0070+00 1/1 0/0 0/0 .text __ct__12JKRAMCommandFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRAMCommand::JKRAMCommand() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramPiece/__ct__12JKRAMCommandFv.s"
|
||||
JKRAMCommand::JKRAMCommand() : mPieceLink(this), field_0x30(this) {
|
||||
OSInitMessageQueue(&mMessageQueue, &mMessage, 1);
|
||||
mCallback = NULL;
|
||||
field_0x5C = NULL;
|
||||
field_0x60 = 0;
|
||||
field_0x8C = NULL;
|
||||
field_0x90 = NULL;
|
||||
field_0x94 = NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D3A5C-802D3B04 2CE39C 00A8+00 1/1 0/0 0/0 .text __dt__12JKRAMCommandFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRAMCommand::~JKRAMCommand() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramPiece/__dt__12JKRAMCommandFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
JKRAMCommand::~JKRAMCommand() {
|
||||
if (field_0x8C)
|
||||
delete field_0x8C;
|
||||
if (field_0x90)
|
||||
delete field_0x90;
|
||||
|
||||
/* 802D3B04-802D3B48 2CE444 0044+00 0/0 1/0 0/0 .text __sinit_JKRAramPiece_cpp */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void __sinit_JKRAramPiece_cpp() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramPiece/__sinit_JKRAramPiece_cpp.s"
|
||||
if (field_0x94)
|
||||
JKRHeap::free(field_0x94, NULL);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
REGISTER_CTORS(0x802D3B04, __sinit_JKRAramPiece_cpp);
|
||||
#pragma pop
|
||||
|
||||
/* 8039D0B8-8039D0B8 029718 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
|
||||
@@ -4,72 +4,10 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRAramStream.h"
|
||||
#include "JSystem/JKernel/JKRAramPiece.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JUTException {
|
||||
/* 802E21FC */ void panic_f(char const*, int, char const*, ...);
|
||||
};
|
||||
|
||||
struct JSUStreamSeekFrom {};
|
||||
|
||||
struct JSURandomInputStream {
|
||||
/* 802D4094 */ void getAvailable() const;
|
||||
/* 802DC4DC */ void seek(s32, JSUStreamSeekFrom);
|
||||
};
|
||||
|
||||
struct JSUInputStream {
|
||||
/* 802DC298 */ void read(void*, s32);
|
||||
};
|
||||
|
||||
struct JSUFileInputStream {};
|
||||
|
||||
struct JKRThread {
|
||||
/* 802D1568 */ JKRThread(u32, int, int);
|
||||
/* 802D1758 */ ~JKRThread();
|
||||
};
|
||||
|
||||
struct JKRHeap {
|
||||
/* 802CE4D4 */ void alloc(u32, int);
|
||||
/* 802CE474 */ void alloc(u32, int, JKRHeap*);
|
||||
/* 802CE500 */ void free(void*, JKRHeap*);
|
||||
|
||||
static u8 sSystemHeap[4];
|
||||
static u8 sCurrentHeap[4];
|
||||
};
|
||||
|
||||
struct JKRAramStreamCommand {
|
||||
/* 802D4088 */ JKRAramStreamCommand();
|
||||
};
|
||||
|
||||
struct JKRAramStream {
|
||||
/* 802D3B48 */ void create(s32);
|
||||
/* 802D3BB8 */ JKRAramStream(s32);
|
||||
/* 802D3C08 */ ~JKRAramStream();
|
||||
/* 802D3C68 */ void run();
|
||||
/* 802D3CD8 */ bool readFromAram();
|
||||
/* 802D3CE0 */ void writeToAram(JKRAramStreamCommand*);
|
||||
/* 802D3ED0 */ void write_StreamToAram_Async(JSUFileInputStream*, u32, u32, u32, u32*);
|
||||
/* 802D3FA0 */ void sync(JKRAramStreamCommand*, int);
|
||||
/* 802D4034 */ void setTransBuffer(u8*, u32, JKRHeap*);
|
||||
|
||||
static u8 sMessageBuffer[16];
|
||||
static u8 sMessageQueue[32];
|
||||
static u8 sAramStreamObject[4];
|
||||
static u8 transBuffer[4];
|
||||
static u8 transSize[4];
|
||||
static u8 transHeap[4];
|
||||
};
|
||||
|
||||
struct JKRAramBlock {};
|
||||
|
||||
struct JKRAramPiece {
|
||||
/* 802D3838 */ void orderSync(int, u32, u32, u32, JKRAramBlock*);
|
||||
};
|
||||
#include "global.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
@@ -109,10 +47,6 @@ extern "C" void orderSync__12JKRAramPieceFiUlUlUlP12JKRAramBlock();
|
||||
extern "C" void read__14JSUInputStreamFPvl();
|
||||
extern "C" void seek__20JSURandomInputStreamFl17JSUStreamSeekFrom();
|
||||
extern "C" void panic_f__12JUTExceptionFPCciPCce();
|
||||
extern "C" void OSInitMessageQueue();
|
||||
extern "C" void OSSendMessage();
|
||||
extern "C" void OSReceiveMessage();
|
||||
extern "C" void OSResumeThread();
|
||||
extern "C" void _savegpr_24();
|
||||
extern "C" void _savegpr_26();
|
||||
extern "C" void _restgpr_24();
|
||||
@@ -127,75 +61,153 @@ extern "C" u8 sCurrentHeap__7JKRHeap[4];
|
||||
/* ############################################################################################## */
|
||||
/* 80451408-8045140C 000908 0004+00 1/1 0/0 0/0 .sbss sAramStreamObject__13JKRAramStream
|
||||
*/
|
||||
u8 JKRAramStream::sAramStreamObject[4];
|
||||
JKRAramStream* JKRAramStream::sAramStreamObject;
|
||||
|
||||
/* 802D3B48-802D3BB8 2CE488 0070+00 0/0 1/1 0/0 .text create__13JKRAramStreamFl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramStream::create(s32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramStream/create__13JKRAramStreamFl.s"
|
||||
JKRAramStream* JKRAramStream::create(long priority) {
|
||||
if (!sAramStreamObject) {
|
||||
sAramStreamObject = new (JKRGetSystemHeap(), 0) JKRAramStream(priority);
|
||||
setTransBuffer(NULL, 0, NULL);
|
||||
}
|
||||
|
||||
return sAramStreamObject;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CC188-803CC198 0292A8 0010+00 1/1 0/0 0/0 .data sMessageBuffer__13JKRAramStream */
|
||||
SECTION_DATA u8 JKRAramStream::sMessageBuffer[16] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
void* JKRAramStream::sMessageBuffer[4] = {
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
};
|
||||
|
||||
/* 803CC198-803CC1B8 0292B8 0020+00 2/2 0/0 0/0 .data sMessageQueue__13JKRAramStream */
|
||||
SECTION_DATA u8 JKRAramStream::sMessageQueue[32] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
/* 803CC1B8-803CC1C8 0292D8 0010+00 2/2 0/0 0/0 .data __vt__13JKRAramStream */
|
||||
SECTION_DATA extern void* __vt__13JKRAramStream[4] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__13JKRAramStreamFv,
|
||||
(void*)run__13JKRAramStreamFv,
|
||||
};
|
||||
OSMessageQueue JKRAramStream::sMessageQueue = {0};
|
||||
|
||||
/* 802D3BB8-802D3C08 2CE4F8 0050+00 1/1 0/0 0/0 .text __ct__13JKRAramStreamFl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRAramStream::JKRAramStream(s32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramStream/__ct__13JKRAramStreamFl.s"
|
||||
JKRAramStream::JKRAramStream(long priority) : JKRThread(0xc00, 0x10, priority) {
|
||||
resume();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D3C08-802D3C68 2CE548 0060+00 1/0 0/0 0/0 .text __dt__13JKRAramStreamFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRAramStream::~JKRAramStream() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramStream/__dt__13JKRAramStreamFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
JKRAramStream::~JKRAramStream() {}
|
||||
|
||||
/* 802D3C68-802D3CD8 2CE5A8 0070+00 1/0 0/0 0/0 .text run__13JKRAramStreamFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramStream::run() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramStream/run__13JKRAramStreamFv.s"
|
||||
void* JKRAramStream::run(void) {
|
||||
OSInitMessageQueue(&sMessageQueue, sMessageBuffer, ARRAY_SIZE(sMessageBuffer));
|
||||
|
||||
for (;;) {
|
||||
OSMessage message;
|
||||
OSReceiveMessage(&sMessageQueue, &message, OS_MESSAGE_BLOCKING);
|
||||
JKRAramStreamCommand* command = (JKRAramStreamCommand*)message;
|
||||
|
||||
switch (command->mType) {
|
||||
case JKRAramStreamCommand::READ:
|
||||
readFromAram();
|
||||
break;
|
||||
case JKRAramStreamCommand::WRITE:
|
||||
writeToAram(command);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D3CD8-802D3CE0 2CE618 0008+00 1/1 0/0 0/0 .text readFromAram__13JKRAramStreamFv */
|
||||
bool JKRAramStream::readFromAram() {
|
||||
return true;
|
||||
s32 JKRAramStream::readFromAram(void) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8039D120-8039D120 029780 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
// regalloc problems
|
||||
#ifdef NONMATCHING
|
||||
s32 JKRAramStream::writeToAram(JKRAramStreamCommand* command) {
|
||||
u32 size;
|
||||
u32 dstSize = command->mDstLength;
|
||||
u32 offset = command->mOffset;
|
||||
u32 writtenLength = 0;
|
||||
u32 destination = command->mDst;
|
||||
u8* buffer = command->mTransferBuffer;
|
||||
u32 bufferSize = command->mTransferBufferSize;
|
||||
JKRHeap* heap = command->mHeap;
|
||||
if (buffer) {
|
||||
if (bufferSize) {
|
||||
size = bufferSize;
|
||||
} else {
|
||||
size = 0x8000;
|
||||
}
|
||||
|
||||
command->mTransferBufferSize = size;
|
||||
command->mAllocatedTransferBuffer = false;
|
||||
} else {
|
||||
if (bufferSize) {
|
||||
size = bufferSize;
|
||||
} else {
|
||||
size = 0x8000;
|
||||
}
|
||||
|
||||
if (heap) {
|
||||
buffer = (u8*)JKRAllocFromHeap(heap, size, -0x20);
|
||||
command->mTransferBuffer = buffer;
|
||||
} else {
|
||||
buffer = (u8*)JKRAllocFromSysHeap(size, -0x20);
|
||||
command->mTransferBuffer = buffer;
|
||||
}
|
||||
|
||||
command->mTransferBufferSize = size;
|
||||
command->mAllocatedTransferBuffer = true;
|
||||
}
|
||||
|
||||
if (!buffer) {
|
||||
if (!heap) {
|
||||
JKRGetCurrentHeap()->dump();
|
||||
} else {
|
||||
heap->dump();
|
||||
}
|
||||
|
||||
panic_f__12JUTExceptionFPCciPCce("JKRAramStream.cpp", 0xac, "%s",
|
||||
":::Cannot alloc memory\n");
|
||||
}
|
||||
|
||||
if (buffer) {
|
||||
seek__20JSURandomInputStreamFl17JSUStreamSeekFrom((JSURandomInputStream*)command->mStream,
|
||||
offset, 0);
|
||||
while (dstSize != 0) {
|
||||
u32 length;
|
||||
if (dstSize > size) {
|
||||
length = size;
|
||||
} else {
|
||||
length = dstSize;
|
||||
}
|
||||
|
||||
s32 readLength =
|
||||
read__14JSUInputStreamFPvl((JSUInputStream*)command->mStream, buffer, length);
|
||||
if (readLength == 0) {
|
||||
writtenLength = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
JKRAramPcs(0, (u32)buffer, destination, length, NULL);
|
||||
dstSize -= length;
|
||||
writtenLength += writtenLength;
|
||||
destination += length;
|
||||
|
||||
if (command->mReturnSize) {
|
||||
*command->mReturnSize += length;
|
||||
}
|
||||
}
|
||||
|
||||
if (command->mAllocatedTransferBuffer) {
|
||||
JKRFree(buffer);
|
||||
command->mAllocatedTransferBuffer = false;
|
||||
}
|
||||
}
|
||||
|
||||
OSSendMessage(&command->mMessageQueue, (OSMessage)writtenLength, OS_MESSAGE_NON_BLOCKING);
|
||||
return writtenLength;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DEAD static char const* const stringBase_8039D120 = "JKRAramStream.cpp";
|
||||
@@ -210,74 +222,103 @@ SECTION_DEAD static char const* const pad_8039D14D = "\0\0";
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramStream::writeToAram(JKRAramStreamCommand* param_0) {
|
||||
asm s32 JKRAramStream::writeToAram(JKRAramStreamCommand* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramStream/writeToAram__13JKRAramStreamFP20JKRAramStreamCommand.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8045140C-80451410 00090C 0004+00 2/2 0/0 0/0 .sbss transBuffer__13JKRAramStream */
|
||||
u8 JKRAramStream::transBuffer[4];
|
||||
u8* JKRAramStream::transBuffer;
|
||||
|
||||
/* 80451410-80451414 000910 0004+00 2/2 0/0 0/0 .sbss transSize__13JKRAramStream */
|
||||
u8 JKRAramStream::transSize[4];
|
||||
u32 JKRAramStream::transSize;
|
||||
|
||||
/* 80451414-80451418 000914 0004+00 2/2 0/0 0/0 .sbss transHeap__13JKRAramStream */
|
||||
u8 JKRAramStream::transHeap[4];
|
||||
JKRHeap* JKRAramStream::transHeap;
|
||||
|
||||
/* 802D3ED0-802D3FA0 2CE810 00D0+00 0/0 1/1 0/0 .text
|
||||
* write_StreamToAram_Async__13JKRAramStreamFP18JSUFileInputStreamUlUlUlPUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramStream::write_StreamToAram_Async(JSUFileInputStream* param_0, u32 param_1,
|
||||
u32 param_2, u32 param_3, u32* param_4) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramStream/write_StreamToAram_Async__13JKRAramStreamFP18JSUFileInputStreamUlUlUlPUl.s"
|
||||
JKRAramStreamCommand* JKRAramStream::write_StreamToAram_Async(JSUFileInputStream* stream, u32 addr,
|
||||
u32 size, u32 offset,
|
||||
u32* returnSize) {
|
||||
JKRAramStreamCommand* command = new (JKRGetSystemHeap(), -4) JKRAramStreamCommand();
|
||||
command->mType = JKRAramStreamCommand::WRITE;
|
||||
command->mAddress = addr;
|
||||
command->mSize = size;
|
||||
command->mStream = stream;
|
||||
command->field_0x2c = 0;
|
||||
command->mOffset = offset;
|
||||
command->mTransferBuffer = transBuffer;
|
||||
command->mHeap = transHeap;
|
||||
command->mTransferBufferSize = transSize;
|
||||
command->mReturnSize = returnSize;
|
||||
if (returnSize) {
|
||||
*returnSize = 0;
|
||||
}
|
||||
|
||||
OSInitMessageQueue(&command->mMessageQueue, &command->mMessage, 1);
|
||||
OSSendMessage(&sMessageQueue, command, OS_MESSAGE_BLOCKING);
|
||||
return command;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D3FA0-802D4034 2CE8E0 0094+00 0/0 1/1 0/0 .text
|
||||
* sync__13JKRAramStreamFP20JKRAramStreamCommandi */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramStream::sync(JKRAramStreamCommand* param_0, int param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramStream/sync__13JKRAramStreamFP20JKRAramStreamCommandi.s"
|
||||
JKRAramStreamCommand* JKRAramStream::sync(JKRAramStreamCommand* command, BOOL isNonBlocking) {
|
||||
OSMessage message;
|
||||
if (isNonBlocking == 0) {
|
||||
OSReceiveMessage(&command->mMessageQueue, &message, OS_MESSAGE_BLOCKING);
|
||||
if (message == NULL) {
|
||||
command = NULL;
|
||||
return command;
|
||||
} else {
|
||||
return command;
|
||||
}
|
||||
} else {
|
||||
BOOL receiveResult =
|
||||
OSReceiveMessage(&command->mMessageQueue, &message, OS_MESSAGE_NON_BLOCKING);
|
||||
if (receiveResult == FALSE) {
|
||||
command = NULL;
|
||||
return command;
|
||||
} else if (message == NULL) {
|
||||
command = NULL;
|
||||
return command;
|
||||
} else {
|
||||
return command;
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D4034-802D4088 2CE974 0054+00 1/1 1/1 0/0 .text
|
||||
* setTransBuffer__13JKRAramStreamFPUcUlP7JKRHeap */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAramStream::setTransBuffer(u8* param_0, u32 param_1, JKRHeap* param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramStream/setTransBuffer__13JKRAramStreamFPUcUlP7JKRHeap.s"
|
||||
void JKRAramStream::setTransBuffer(u8* buffer, u32 bufferSize, JKRHeap* heap) {
|
||||
transBuffer = NULL;
|
||||
transSize = 0x8000;
|
||||
transHeap = NULL;
|
||||
|
||||
if (buffer) {
|
||||
transBuffer = (u8*)ALIGN_NEXT((u32)buffer, 0x20);
|
||||
}
|
||||
|
||||
if (bufferSize) {
|
||||
transSize = ALIGN_PREV(bufferSize, 0x20);
|
||||
}
|
||||
|
||||
if (heap && !buffer) {
|
||||
transHeap = heap;
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D4088-802D4094 2CE9C8 000C+00 1/1 0/0 0/0 .text __ct__20JKRAramStreamCommandFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRAramStreamCommand::JKRAramStreamCommand() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramStream/__ct__20JKRAramStreamCommandFv.s"
|
||||
JKRAramStreamCommand::JKRAramStreamCommand() {
|
||||
mAllocatedTransferBuffer = false;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D4094-802D40F0 2CE9D4 005C+00 0/0 3/0 0/0 .text getAvailable__20JSURandomInputStreamCFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JSURandomInputStream::getAvailable() const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAramStream/getAvailable__20JSURandomInputStreamCFv.s"
|
||||
s32 JSURandomInputStream::getAvailable() const {
|
||||
return getLength() - getPosition();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 8039D120-8039D120 029780 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
|
||||
@@ -3,94 +3,11 @@
|
||||
// Translation Unit: JKRArchivePri
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRArchivePri.h"
|
||||
#include "JSystem/JKernel/JKRArchive.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JKRHeap {
|
||||
/* 802CE83C */ void findFromRoot(void*);
|
||||
|
||||
static u8 sCurrentHeap[4];
|
||||
};
|
||||
|
||||
struct JKRFileLoader {
|
||||
/* 802D40F0 */ JKRFileLoader();
|
||||
/* 802D4148 */ ~JKRFileLoader();
|
||||
|
||||
static u8 sCurrentVolume[4 + 4 /* padding */];
|
||||
};
|
||||
|
||||
struct JKRArchive {
|
||||
struct EMountMode {};
|
||||
|
||||
struct CArcName {
|
||||
/* 802D6884 */ void store(char const*, char);
|
||||
/* 802D67F4 */ void store(char const*);
|
||||
};
|
||||
|
||||
struct SDIFileEntry {};
|
||||
|
||||
/* 802D6294 */ JKRArchive(s32, JKRArchive::EMountMode);
|
||||
/* 802D6334 */ ~JKRArchive();
|
||||
/* 802D6394 */ void isSameName(JKRArchive::CArcName&, u32, u16) const;
|
||||
/* 802D63E0 */ void findResType(u32) const;
|
||||
/* 802D641C */ void findDirectory(char const*, u32) const;
|
||||
/* 802D64F4 */ void findTypeResource(u32, char const*) const;
|
||||
/* 802D65A4 */ void findFsResource(char const*, u32) const;
|
||||
/* 802D6684 */ void findIdxResource(u32) const;
|
||||
/* 802D66AC */ void findNameResource(char const*) const;
|
||||
/* 802D6734 */ void findPtrResource(void const*) const;
|
||||
/* 802D6770 */ void findIdResource(u16) const;
|
||||
/* 802D693C */ void setExpandSize(JKRArchive::SDIFileEntry*, u32);
|
||||
/* 802D6978 */ void getExpandSize(JKRArchive::SDIFileEntry*) const;
|
||||
|
||||
static u8 sCurrentDirID[4 + 4 /* padding */];
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void __ct__10JKRArchiveFlQ210JKRArchive10EMountMode();
|
||||
extern "C" void __dt__10JKRArchiveFv();
|
||||
extern "C" void isSameName__10JKRArchiveCFRQ210JKRArchive8CArcNameUlUs();
|
||||
extern "C" void findResType__10JKRArchiveCFUl();
|
||||
extern "C" void findDirectory__10JKRArchiveCFPCcUl();
|
||||
extern "C" void findTypeResource__10JKRArchiveCFUlPCc();
|
||||
extern "C" void findFsResource__10JKRArchiveCFPCcUl();
|
||||
extern "C" void findIdxResource__10JKRArchiveCFUl();
|
||||
extern "C" void findNameResource__10JKRArchiveCFPCc();
|
||||
extern "C" void findPtrResource__10JKRArchiveCFPCv();
|
||||
extern "C" void findIdResource__10JKRArchiveCFUs();
|
||||
extern "C" void store__Q210JKRArchive8CArcNameFPCc();
|
||||
extern "C" void store__Q210JKRArchive8CArcNameFPCcc();
|
||||
extern "C" void setExpandSize__10JKRArchiveFPQ210JKRArchive12SDIFileEntryUl();
|
||||
extern "C" void getExpandSize__10JKRArchiveCFPQ210JKRArchive12SDIFileEntry();
|
||||
extern "C" u8 sCurrentDirID__10JKRArchive[4 + 4 /* padding */];
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void findFromRoot__7JKRHeapFPv();
|
||||
extern "C" void __dl__FPv();
|
||||
extern "C" void __ct__13JKRFileLoaderFv();
|
||||
extern "C" void __dt__13JKRFileLoaderFv();
|
||||
extern "C" void _savegpr_27();
|
||||
extern "C" void _savegpr_28();
|
||||
extern "C" void _savegpr_29();
|
||||
extern "C" void _restgpr_27();
|
||||
extern "C" void _restgpr_28();
|
||||
extern "C" void _restgpr_29();
|
||||
extern "C" void tolower();
|
||||
extern "C" void strcmp();
|
||||
extern "C" extern void* __vt__10JKRArchive[20];
|
||||
extern "C" u8 sCurrentHeap__7JKRHeap[4];
|
||||
extern "C" u8 sCurrentVolume__13JKRFileLoader[4 + 4 /* padding */];
|
||||
#include "msl_c/string.h"
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
@@ -98,165 +15,239 @@ extern "C" u8 sCurrentVolume__13JKRFileLoader[4 + 4 /* padding */];
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80451420-80451428 000920 0004+04 1/1 5/5 0/0 .sbss sCurrentDirID__10JKRArchive */
|
||||
u8 JKRArchive::sCurrentDirID[4 + 4 /* padding */];
|
||||
u32 JKRArchive::sCurrentDirID;
|
||||
|
||||
/* 802D6294-802D6334 2D0BD4 00A0+00 0/0 5/5 0/0 .text
|
||||
* __ct__10JKRArchiveFlQ210JKRArchive10EMountMode */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRArchive::JKRArchive(s32 param_0, JKRArchive::EMountMode param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePri/__ct__10JKRArchiveFlQ210JKRArchive10EMountMode.s"
|
||||
JKRArchive::JKRArchive(long entryNumber, JKRArchive::EMountMode mountMode) {
|
||||
mIsMounted = false;
|
||||
mMountMode = mountMode;
|
||||
mMountCount = 1;
|
||||
field_0x58 = 1;
|
||||
|
||||
mHeap = JKRHeap::findFromRoot(this);
|
||||
if (mHeap == NULL) {
|
||||
mHeap = JKRHeap::getCurrentHeap();
|
||||
}
|
||||
|
||||
mEntryNum = entryNumber;
|
||||
if (getCurrentVolume() == NULL) {
|
||||
setCurrentVolume(this);
|
||||
setCurrentDirID(0);
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D6334-802D6394 2D0C74 0060+00 0/0 5/4 0/0 .text __dt__10JKRArchiveFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRArchive::~JKRArchive() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePri/__dt__10JKRArchiveFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
JKRArchive::~JKRArchive() {}
|
||||
|
||||
/* 802D6394-802D63E0 2D0CD4 004C+00 4/4 0/0 0/0 .text
|
||||
* isSameName__10JKRArchiveCFRQ210JKRArchive8CArcNameUlUs */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::isSameName(JKRArchive::CArcName& param_0, u32 param_1, u16 param_2) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePri/isSameName__10JKRArchiveCFRQ210JKRArchive8CArcNameUlUs.s"
|
||||
bool JKRArchive::isSameName(JKRArchive::CArcName& name, u32 nameOffset, u16 nameHash) const {
|
||||
u16 hash = name.getHash();
|
||||
if (hash != nameHash)
|
||||
return false;
|
||||
return strcmp(mStringTable + nameOffset, name.getString()) == 0;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D63E0-802D641C 2D0D20 003C+00 1/1 0/0 0/0 .text findResType__10JKRArchiveCFUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::findResType(u32 param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePri/findResType__10JKRArchiveCFUl.s"
|
||||
JKRArchive::SDirEntry* JKRArchive::findResType(u32 type) const {
|
||||
SDirEntry* node = mNodes;
|
||||
u32 count = 0;
|
||||
while (count < mArcInfoBlock->num_nodes) {
|
||||
if (node->type == type) {
|
||||
return node;
|
||||
}
|
||||
|
||||
node++;
|
||||
count++;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D641C-802D64F4 2D0D5C 00D8+00 0/0 3/3 0/0 .text findDirectory__10JKRArchiveCFPCcUl
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::findDirectory(char const* param_0, u32 param_1) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePri/findDirectory__10JKRArchiveCFPCcUl.s"
|
||||
JKRArchive::SDirEntry* JKRArchive::findDirectory(const char* name, u32 directoryId) const {
|
||||
if (name == NULL) {
|
||||
return mNodes + directoryId;
|
||||
}
|
||||
|
||||
CArcName arcName(&name, '/');
|
||||
SDirEntry* dirEntry = mNodes + directoryId;
|
||||
SDIFileEntry* fileEntry = mFiles + dirEntry->first_file_index;
|
||||
|
||||
for (int i = 0; i < dirEntry->num_entries; fileEntry++, i++) {
|
||||
// regalloc doesn't like fileEntry->getNameHash()
|
||||
if (isSameName(arcName, fileEntry->getNameOffset(), fileEntry->name_hash)) {
|
||||
if (fileEntry->isDirectory()) {
|
||||
return findDirectory(name, fileEntry->data_offset);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D64F4-802D65A4 2D0E34 00B0+00 0/0 2/2 0/0 .text findTypeResource__10JKRArchiveCFUlPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::findTypeResource(u32 param_0, char const* param_1) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePri/findTypeResource__10JKRArchiveCFUlPCc.s"
|
||||
JKRArchive::SDIFileEntry* JKRArchive::findTypeResource(u32 type, const char* name) const {
|
||||
if (type) {
|
||||
CArcName arcName(name);
|
||||
SDirEntry* dirEntry = findResType(type);
|
||||
if (dirEntry) {
|
||||
SDIFileEntry* fileEntry = mFiles + dirEntry->first_file_index;
|
||||
for (int i = 0; i < dirEntry->num_entries; fileEntry++, i++) {
|
||||
if (isSameName(arcName, fileEntry->getNameOffset(), fileEntry->getNameHash())) {
|
||||
return fileEntry;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D65A4-802D6684 2D0EE4 00E0+00 0/0 4/4 0/0 .text findFsResource__10JKRArchiveCFPCcUl
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::findFsResource(char const* param_0, u32 param_1) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePri/findFsResource__10JKRArchiveCFPCcUl.s"
|
||||
JKRArchive::SDIFileEntry* JKRArchive::findFsResource(const char* name, u32 directoryId) const {
|
||||
if (name) {
|
||||
CArcName arcName(&name, '/');
|
||||
SDirEntry* dirEntry = mNodes + directoryId;
|
||||
SDIFileEntry* fileEntry = mFiles + dirEntry->first_file_index;
|
||||
for (int i = 0; i < dirEntry->num_entries; fileEntry++, i++) {
|
||||
// regalloc doesn't like fileEntry->getNameHash()
|
||||
if (isSameName(arcName, fileEntry->getNameOffset(), fileEntry->name_hash)) {
|
||||
if (fileEntry->isDirectory()) {
|
||||
return findFsResource(name, fileEntry->data_offset);
|
||||
}
|
||||
|
||||
if (name == NULL) {
|
||||
return fileEntry;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D6684-802D66AC 2D0FC4 0028+00 0/0 7/7 0/0 .text findIdxResource__10JKRArchiveCFUl
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::findIdxResource(u32 param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePri/findIdxResource__10JKRArchiveCFUl.s"
|
||||
JKRArchive::SDIFileEntry* JKRArchive::findIdxResource(u32 fileIndex) const {
|
||||
if (fileIndex < mArcInfoBlock->num_file_entries) {
|
||||
return mFiles + fileIndex;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D66AC-802D6734 2D0FEC 0088+00 0/0 4/4 0/0 .text findNameResource__10JKRArchiveCFPCc
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::findNameResource(char const* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePri/findNameResource__10JKRArchiveCFPCc.s"
|
||||
JKRArchive::SDIFileEntry* JKRArchive::findNameResource(const char* name) const {
|
||||
SDIFileEntry* fileEntry = mFiles;
|
||||
|
||||
CArcName arcName(name);
|
||||
for (int i = 0; i < mArcInfoBlock->num_file_entries; fileEntry++, i++) {
|
||||
if (isSameName(arcName, fileEntry->getNameOffset(), fileEntry->getNameHash())) {
|
||||
return fileEntry;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D6734-802D6770 2D1074 003C+00 0/0 9/9 0/0 .text findPtrResource__10JKRArchiveCFPCv
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::findPtrResource(void const* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePri/findPtrResource__10JKRArchiveCFPCv.s"
|
||||
JKRArchive::SDIFileEntry* JKRArchive::findPtrResource(const void* resource) const {
|
||||
SDIFileEntry* fileEntry = mFiles;
|
||||
for (int i = 0; i < mArcInfoBlock->num_file_entries; fileEntry++, i++) {
|
||||
if (fileEntry->data == resource) {
|
||||
return fileEntry;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D6770-802D67F4 2D10B0 0084+00 0/0 4/4 0/0 .text findIdResource__10JKRArchiveCFUs */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::findIdResource(u16 param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePri/findIdResource__10JKRArchiveCFUs.s"
|
||||
JKRArchive::SDIFileEntry* JKRArchive::findIdResource(u16 id) const {
|
||||
if (id != 0xFFFF) {
|
||||
if (id < mArcInfoBlock->num_file_entries) {
|
||||
SDIFileEntry* fileEntry = mFiles + id;
|
||||
if (fileEntry->file_id == id && fileEntry->isUnknownFlag1()) {
|
||||
return fileEntry;
|
||||
}
|
||||
}
|
||||
|
||||
SDIFileEntry* fileEntry = mFiles;
|
||||
for (int i = 0; i < mArcInfoBlock->num_file_entries; fileEntry++, i++) {
|
||||
if (fileEntry->file_id == id && fileEntry->isUnknownFlag1()) {
|
||||
return fileEntry;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D67F4-802D6884 2D1134 0090+00 2/2 0/0 0/0 .text store__Q210JKRArchive8CArcNameFPCc
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::CArcName::store(char const* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePri/store__Q210JKRArchive8CArcNameFPCc.s"
|
||||
void JKRArchive::CArcName::store(const char* name) {
|
||||
mHash = 0;
|
||||
s32 length = 0;
|
||||
while (*name) {
|
||||
s32 ch = tolower(*name);
|
||||
mHash = ch + mHash * 3;
|
||||
if (length < (s32)ARRAY_SIZE(mData)) {
|
||||
mData[length++] = ch;
|
||||
}
|
||||
name++;
|
||||
}
|
||||
|
||||
mLength = (u16)length;
|
||||
mData[length] = 0;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D6884-802D693C 2D11C4 00B8+00 2/2 0/0 0/0 .text store__Q210JKRArchive8CArcNameFPCcc
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::CArcName::store(char const* param_0, char param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePri/store__Q210JKRArchive8CArcNameFPCcc.s"
|
||||
const char* JKRArchive::CArcName::store(const char* name, char endChar) {
|
||||
mHash = 0;
|
||||
s32 length = 0;
|
||||
while (*name && *name != endChar) {
|
||||
s32 lch = tolower((int)*name);
|
||||
mHash = lch + mHash * 3;
|
||||
if (length < (s32)ARRAY_SIZE(mData)) {
|
||||
mData[length++] = lch;
|
||||
}
|
||||
name++;
|
||||
}
|
||||
|
||||
mLength = (u16)length;
|
||||
mData[length] = 0;
|
||||
|
||||
if (*name == 0)
|
||||
return NULL;
|
||||
return name + 1;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D693C-802D6978 2D127C 003C+00 0/0 5/0 0/0 .text
|
||||
* setExpandSize__10JKRArchiveFPQ210JKRArchive12SDIFileEntryUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::setExpandSize(JKRArchive::SDIFileEntry* param_0, u32 param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePri/setExpandSize__10JKRArchiveFPQ210JKRArchive12SDIFileEntryUl.s"
|
||||
void JKRArchive::setExpandSize(SDIFileEntry* fileEntry, u32 expandSize) {
|
||||
int index = fileEntry - mFiles;
|
||||
if (!mExpandedSize || index >= mArcInfoBlock->num_file_entries)
|
||||
return;
|
||||
|
||||
mExpandedSize[index] = expandSize;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D6978-802D69B8 2D12B8 0040+00 0/0 5/0 0/0 .text
|
||||
* getExpandSize__10JKRArchiveCFPQ210JKRArchive12SDIFileEntry */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::getExpandSize(JKRArchive::SDIFileEntry* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePri/getExpandSize__10JKRArchiveCFPQ210JKRArchive12SDIFileEntry.s"
|
||||
u32 JKRArchive::getExpandSize(SDIFileEntry* fileEntry) const {
|
||||
int index = fileEntry - mFiles;
|
||||
if (!mExpandedSize || index >= mArcInfoBlock->num_file_entries)
|
||||
return 0;
|
||||
|
||||
return mExpandedSize[index];
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
@@ -3,434 +3,388 @@
|
||||
// Translation Unit: JKRArchivePub
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRArchivePub.h"
|
||||
#include "JSystem/JKernel/JKRAramArchive.h"
|
||||
#include "JSystem/JKernel/JKRAramPiece.h"
|
||||
#include "JSystem/JKernel/JKRArchive.h"
|
||||
#include "JSystem/JKernel/JKRCompArchive.h"
|
||||
#include "JSystem/JKernel/JKRDvdArchive.h"
|
||||
#include "JSystem/JKernel/JKRFileFinder.h"
|
||||
#include "JSystem/JKernel/JKRFileLoader.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "JSystem/JKernel/JKRMemArchive.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JKRMemBreakFlag {};
|
||||
|
||||
struct JKRHeap {
|
||||
/* 802CE500 */ void free(void*, JKRHeap*);
|
||||
|
||||
static u8 sSystemHeap[4];
|
||||
static u8 sCurrentHeap[4];
|
||||
};
|
||||
|
||||
struct JKRArchive {
|
||||
struct EMountMode {};
|
||||
|
||||
struct EMountDirection {};
|
||||
|
||||
struct SDirEntry {};
|
||||
|
||||
struct SDIFileEntry {};
|
||||
|
||||
/* 801CC284 */ void getExpandedResSize(void const*) const;
|
||||
/* 802D5778 */ void check_mount_already(s32, JKRHeap*);
|
||||
/* 802D5840 */ void mount(void*, JKRHeap*, JKRArchive::EMountDirection);
|
||||
/* 802D58C8 */ void mount(s32, JKRArchive::EMountMode, JKRHeap*, JKRArchive::EMountDirection);
|
||||
/* 802D57E4 */ void mount(char const*, JKRArchive::EMountMode, JKRHeap*,
|
||||
JKRArchive::EMountDirection);
|
||||
/* 802D5A38 */ void becomeCurrent(char const*);
|
||||
/* 802D5AC0 */ void getDirEntry(JKRArchive::SDirEntry*, u32) const;
|
||||
/* 802D5B38 */ void getGlbResource(u32, char const*, JKRArchive*);
|
||||
/* 802D5D38 */ void getResource(u16);
|
||||
/* 802D5C64 */ void getResource(u32, char const*);
|
||||
/* 802D5BE8 */ void getResource(char const*);
|
||||
/* 802D5CE4 */ void getIdxResource(u32);
|
||||
/* 802D5D8C */ void readResource(void*, u32, u32, char const*);
|
||||
/* 802D5E30 */ void readResource(void*, u32, char const*);
|
||||
/* 802D5F40 */ void readResource(void*, u32, u16);
|
||||
/* 802D5ECC */ void readIdxResource(void*, u32, u32);
|
||||
/* 802D5FB4 */ void removeResourceAll();
|
||||
/* 802D603C */ void removeResource(void*);
|
||||
/* 802D609C */ void detachResource(void*);
|
||||
/* 802D60D8 */ void getResSize(void const*) const;
|
||||
/* 802D610C */ void countResource() const;
|
||||
/* 802D6150 */ void countFile(char const*) const;
|
||||
/* 802D61B0 */ void getFirstFile(char const*) const;
|
||||
/* 802D625C */ void getFileAttribute(u32) const;
|
||||
/* 802D6334 */ ~JKRArchive();
|
||||
/* 802D641C */ void findDirectory(char const*, u32) const;
|
||||
/* 802D64F4 */ void findTypeResource(u32, char const*) const;
|
||||
/* 802D65A4 */ void findFsResource(char const*, u32) const;
|
||||
/* 802D6684 */ void findIdxResource(u32) const;
|
||||
/* 802D66AC */ void findNameResource(char const*) const;
|
||||
/* 802D6734 */ void findPtrResource(void const*) const;
|
||||
/* 802D6770 */ void findIdResource(u16) const;
|
||||
/* 802D693C */ void setExpandSize(JKRArchive::SDIFileEntry*, u32);
|
||||
/* 802D6978 */ void getExpandSize(JKRArchive::SDIFileEntry*) const;
|
||||
|
||||
static u8 sCurrentDirID[4 + 4 /* padding */];
|
||||
};
|
||||
|
||||
struct JKRMemArchive {
|
||||
/* 802D69B8 */ JKRMemArchive(s32, JKRArchive::EMountDirection);
|
||||
/* 802D6A6C */ JKRMemArchive(void*, u32, JKRMemBreakFlag);
|
||||
};
|
||||
|
||||
struct JKRFileLoader {
|
||||
/* 802D41D4 */ void unmount();
|
||||
|
||||
static u8 sVolumeList[12];
|
||||
static u8 sCurrentVolume[4 + 4 /* padding */];
|
||||
};
|
||||
|
||||
struct JKRDvdArchive {
|
||||
/* 802D7BF0 */ JKRDvdArchive(s32, JKRArchive::EMountDirection);
|
||||
};
|
||||
|
||||
struct JKRCompArchive {
|
||||
/* 802D87D4 */ JKRCompArchive(s32, JKRArchive::EMountDirection);
|
||||
};
|
||||
|
||||
struct JKRArcFinder {
|
||||
/* 802D4638 */ JKRArcFinder(JKRArchive*, s32, s32);
|
||||
};
|
||||
|
||||
struct JKRAramArchive {
|
||||
/* 802D70C0 */ JKRAramArchive(s32, JKRArchive::EMountDirection);
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void check_mount_already__10JKRArchiveFlP7JKRHeap();
|
||||
extern "C" void
|
||||
mount__10JKRArchiveFPCcQ210JKRArchive10EMountModeP7JKRHeapQ210JKRArchive15EMountDirection();
|
||||
extern "C" void mount__10JKRArchiveFPvP7JKRHeapQ210JKRArchive15EMountDirection();
|
||||
extern "C" void
|
||||
mount__10JKRArchiveFlQ210JKRArchive10EMountModeP7JKRHeapQ210JKRArchive15EMountDirection();
|
||||
extern "C" void becomeCurrent__10JKRArchiveFPCc();
|
||||
extern "C" void getDirEntry__10JKRArchiveCFPQ210JKRArchive9SDirEntryUl();
|
||||
extern "C" void getGlbResource__10JKRArchiveFUlPCcP10JKRArchive();
|
||||
extern "C" void getResource__10JKRArchiveFPCc();
|
||||
extern "C" void getResource__10JKRArchiveFUlPCc();
|
||||
extern "C" void getIdxResource__10JKRArchiveFUl();
|
||||
extern "C" void getResource__10JKRArchiveFUs();
|
||||
extern "C" void readResource__10JKRArchiveFPvUlUlPCc();
|
||||
extern "C" void readResource__10JKRArchiveFPvUlPCc();
|
||||
extern "C" void readIdxResource__10JKRArchiveFPvUlUl();
|
||||
extern "C" void readResource__10JKRArchiveFPvUlUs();
|
||||
extern "C" void removeResourceAll__10JKRArchiveFv();
|
||||
extern "C" void removeResource__10JKRArchiveFPv();
|
||||
extern "C" void detachResource__10JKRArchiveFPv();
|
||||
extern "C" void getResSize__10JKRArchiveCFPCv();
|
||||
extern "C" void countResource__10JKRArchiveCFv();
|
||||
extern "C" void countFile__10JKRArchiveCFPCc();
|
||||
extern "C" void getFirstFile__10JKRArchiveCFPCc();
|
||||
extern "C" void getFileAttribute__10JKRArchiveCFUl();
|
||||
extern "C" extern void* __vt__10JKRArchive[20];
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void getExpandedResSize__10JKRArchiveCFPCv();
|
||||
extern "C" void free__7JKRHeapFPvP7JKRHeap();
|
||||
extern "C" void* __nw__FUlP7JKRHeapi();
|
||||
extern "C" void unmount__13JKRFileLoaderFv();
|
||||
extern "C" void __ct__12JKRArcFinderFP10JKRArchivell();
|
||||
extern "C" void __dt__10JKRArchiveFv();
|
||||
extern "C" void findDirectory__10JKRArchiveCFPCcUl();
|
||||
extern "C" void findTypeResource__10JKRArchiveCFUlPCc();
|
||||
extern "C" void findFsResource__10JKRArchiveCFPCcUl();
|
||||
extern "C" void findIdxResource__10JKRArchiveCFUl();
|
||||
extern "C" void findNameResource__10JKRArchiveCFPCc();
|
||||
extern "C" void findPtrResource__10JKRArchiveCFPCv();
|
||||
extern "C" void findIdResource__10JKRArchiveCFUs();
|
||||
extern "C" void setExpandSize__10JKRArchiveFPQ210JKRArchive12SDIFileEntryUl();
|
||||
extern "C" void getExpandSize__10JKRArchiveCFPQ210JKRArchive12SDIFileEntry();
|
||||
extern "C" void __ct__13JKRMemArchiveFlQ210JKRArchive15EMountDirection();
|
||||
extern "C" void __ct__13JKRMemArchiveFPvUl15JKRMemBreakFlag();
|
||||
extern "C" void __ct__14JKRAramArchiveFlQ210JKRArchive15EMountDirection();
|
||||
extern "C" void __ct__13JKRDvdArchiveFlQ210JKRArchive15EMountDirection();
|
||||
extern "C" void __ct__14JKRCompArchiveFlQ210JKRArchive15EMountDirection();
|
||||
extern "C" void DVDConvertPathToEntrynum();
|
||||
extern "C" void _savegpr_27();
|
||||
extern "C" void _savegpr_28();
|
||||
extern "C" void _savegpr_29();
|
||||
extern "C" void _restgpr_27();
|
||||
extern "C" void _restgpr_28();
|
||||
extern "C" void _restgpr_29();
|
||||
extern "C" u8 sVolumeList__13JKRFileLoader[12];
|
||||
extern "C" u8 sSystemHeap__7JKRHeap[4];
|
||||
extern "C" u8 sCurrentHeap__7JKRHeap[4];
|
||||
extern "C" u8 sCurrentVolume__13JKRFileLoader[4 + 4 /* padding */];
|
||||
extern "C" u8 sCurrentDirID__10JKRArchive[4 + 4 /* padding */];
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* 802D5778-802D57E4 2D00B8 006C+00 2/2 0/0 0/0 .text check_mount_already__10JKRArchiveFlP7JKRHeap
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::check_mount_already(s32 param_0, JKRHeap* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/check_mount_already__10JKRArchiveFlP7JKRHeap.s"
|
||||
JKRArchive* JKRArchive::check_mount_already(s32 entryNum, JKRHeap* heap) {
|
||||
if (heap == NULL) {
|
||||
heap = JKRHeap::getCurrentHeap();
|
||||
}
|
||||
|
||||
JSUList<JKRFileLoader>& volumeList = getVolumeList();
|
||||
JSUListIterator<JKRFileLoader> iterator;
|
||||
for (iterator = volumeList.getFirst(); iterator != volumeList.getEnd(); ++iterator) {
|
||||
if (iterator->getVolumeType() == 'RARC') {
|
||||
JKRArchive* archive = (JKRArchive*)iterator.getObject();
|
||||
if (archive->mEntryNum == entryNum && archive->mHeap == heap) {
|
||||
archive->mMountCount++;
|
||||
return archive;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D57E4-802D5840 2D0124 005C+00 0/0 1/1 0/0 .text
|
||||
* mount__10JKRArchiveFPCcQ210JKRArchive10EMountModeP7JKRHeapQ210JKRArchive15EMountDirection */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::mount(char const* param_0, JKRArchive::EMountMode param_1, JKRHeap* param_2,
|
||||
JKRArchive::EMountDirection param_3) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/func_802D57E4.s"
|
||||
JKRArchive* JKRArchive::mount(const char* path, JKRArchive::EMountMode mountMode, JKRHeap* heap,
|
||||
JKRArchive::EMountDirection mountDirection) {
|
||||
s32 entryNum = DVDConvertPathToEntrynum(path);
|
||||
if (entryNum < 0)
|
||||
return NULL;
|
||||
|
||||
return mount(entryNum, mountMode, heap, mountDirection);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D5840-802D58C8 2D0180 0088+00 0/0 1/1 0/0 .text
|
||||
* mount__10JKRArchiveFPvP7JKRHeapQ210JKRArchive15EMountDirection */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::mount(void* param_0, JKRHeap* param_1, JKRArchive::EMountDirection param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/mount__10JKRArchiveFPvP7JKRHeapQ210JKRArchive15EMountDirection.s"
|
||||
JKRArchive* JKRArchive::mount(void* ptr, JKRHeap* heap,
|
||||
JKRArchive::EMountDirection mountDirection) {
|
||||
JKRArchive* archive = check_mount_already((s32)ptr, heap);
|
||||
if (archive)
|
||||
return archive;
|
||||
|
||||
int alignment;
|
||||
if (mountDirection == JKRArchive::MOUNT_DIRECTION_HEAD) {
|
||||
alignment = 4;
|
||||
} else {
|
||||
alignment = -4;
|
||||
}
|
||||
|
||||
archive = new (heap, alignment) JKRMemArchive(ptr, 0xFFFF, JKRMEMBREAK_FLAG_UNKNOWN0);
|
||||
return archive;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D58C8-802D5A38 2D0208 0170+00 1/1 1/1 0/0 .text
|
||||
* mount__10JKRArchiveFlQ210JKRArchive10EMountModeP7JKRHeapQ210JKRArchive15EMountDirection */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::mount(s32 param_0, JKRArchive::EMountMode param_1, JKRHeap* param_2,
|
||||
JKRArchive::EMountDirection param_3) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/func_802D58C8.s"
|
||||
JKRArchive* JKRArchive::mount(s32 entryNum, JKRArchive::EMountMode mountMode, JKRHeap* heap,
|
||||
JKRArchive::EMountDirection mountDirection) {
|
||||
JKRArchive* archive = check_mount_already(entryNum, heap);
|
||||
if (archive != NULL) {
|
||||
return archive;
|
||||
} else {
|
||||
int alignment;
|
||||
if (mountDirection == JKRArchive::MOUNT_DIRECTION_HEAD) {
|
||||
alignment = 4;
|
||||
} else {
|
||||
alignment = -4;
|
||||
}
|
||||
|
||||
JKRArchive* archive;
|
||||
switch (mountMode) {
|
||||
case JKRArchive::MOUNT_MEM:
|
||||
archive = new (heap, alignment) JKRMemArchive(entryNum, mountDirection);
|
||||
break;
|
||||
case JKRArchive::MOUNT_ARAM:
|
||||
archive = new (heap, alignment) JKRAramArchive(entryNum, mountDirection);
|
||||
break;
|
||||
case JKRArchive::MOUNT_DVD:
|
||||
archive = new (heap, alignment) JKRDvdArchive(entryNum, mountDirection);
|
||||
break;
|
||||
case JKRArchive::MOUNT_COMP:
|
||||
archive = new (heap, alignment) JKRCompArchive(entryNum, mountDirection);
|
||||
break;
|
||||
}
|
||||
|
||||
if (archive && archive->getMountMode() == JKRArchive::UNKNOWN_MOUNT_MODE) {
|
||||
delete archive;
|
||||
archive = NULL;
|
||||
}
|
||||
|
||||
return archive;
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D5A38-802D5AC0 2D0378 0088+00 1/0 4/0 0/0 .text becomeCurrent__10JKRArchiveFPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::becomeCurrent(char const* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/becomeCurrent__10JKRArchiveFPCc.s"
|
||||
bool JKRArchive::becomeCurrent(const char* path) {
|
||||
SDirEntry* dirEntry;
|
||||
if (*path == '/') {
|
||||
path++;
|
||||
|
||||
if (*path == '\0')
|
||||
path = NULL;
|
||||
dirEntry = findDirectory(path, 0);
|
||||
} else {
|
||||
dirEntry = findDirectory(path, getCurrentDirID());
|
||||
}
|
||||
|
||||
bool found = dirEntry != NULL;
|
||||
if (found) {
|
||||
setCurrentVolume(this);
|
||||
setCurrentDirID(dirEntry - mNodes);
|
||||
}
|
||||
|
||||
return found;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D5AC0-802D5B38 2D0400 0078+00 0/0 1/1 0/0 .text
|
||||
* getDirEntry__10JKRArchiveCFPQ210JKRArchive9SDirEntryUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::getDirEntry(JKRArchive::SDirEntry* param_0, u32 param_1) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/getDirEntry__10JKRArchiveCFPQ210JKRArchive9SDirEntryUl.s"
|
||||
bool JKRArchive::getDirEntry(SDirEntry* dirEntry, u32 index) const {
|
||||
SDIFileEntry* fileEntry = findIdxResource(index);
|
||||
if (!fileEntry)
|
||||
return false;
|
||||
|
||||
dirEntry->other.flags = fileEntry->getFlags();
|
||||
dirEntry->other.id = fileEntry->getFileID();
|
||||
dirEntry->name = mStringTable + fileEntry->getNameOffset();
|
||||
return true;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D5B38-802D5BE8 2D0478 00B0+00 0/0 9/9 0/0 .text
|
||||
* getGlbResource__10JKRArchiveFUlPCcP10JKRArchive */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::getGlbResource(u32 param_0, char const* param_1, JKRArchive* param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/getGlbResource__10JKRArchiveFUlPCcP10JKRArchive.s"
|
||||
void* JKRArchive::getGlbResource(u32 param_1, const char* path, JKRArchive* archive) {
|
||||
void* resource = NULL;
|
||||
if (archive) {
|
||||
return archive->getResource(param_1, path);
|
||||
}
|
||||
|
||||
JSUList<JKRFileLoader>& volumeList = getVolumeList();
|
||||
JSUListIterator<JKRFileLoader> iterator;
|
||||
for (iterator = volumeList.getFirst(); iterator != volumeList.getEnd(); ++iterator) {
|
||||
if (iterator->getVolumeType() == 'RARC') {
|
||||
resource = iterator->getResource(param_1, path);
|
||||
if (resource)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return resource;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D5BE8-802D5C64 2D0528 007C+00 1/0 4/0 0/0 .text getResource__10JKRArchiveFPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::getResource(char const* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/getResource__10JKRArchiveFPCc.s"
|
||||
void* JKRArchive::getResource(const char* path) {
|
||||
SDIFileEntry* fileEntry;
|
||||
if (*path == '/') {
|
||||
fileEntry = findFsResource(path + 1, 0);
|
||||
} else {
|
||||
fileEntry = findFsResource(path, getCurrentDirID());
|
||||
}
|
||||
|
||||
if (fileEntry) {
|
||||
return fetchResource(fileEntry, NULL);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D5C64-802D5CE4 2D05A4 0080+00 1/0 4/0 0/0 .text getResource__10JKRArchiveFUlPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::getResource(u32 param_0, char const* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/getResource__10JKRArchiveFUlPCc.s"
|
||||
void* JKRArchive::getResource(u32 type, const char* path) {
|
||||
SDIFileEntry* fileEntry;
|
||||
if (type == 0 || type == '????') {
|
||||
fileEntry = findNameResource(path);
|
||||
} else {
|
||||
fileEntry = findTypeResource(type, path);
|
||||
}
|
||||
|
||||
if (fileEntry) {
|
||||
return fetchResource(fileEntry, NULL);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D5CE4-802D5D38 2D0624 0054+00 0/0 1/1 0/0 .text getIdxResource__10JKRArchiveFUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::getIdxResource(u32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/getIdxResource__10JKRArchiveFUl.s"
|
||||
void* JKRArchive::getIdxResource(u32 index) {
|
||||
SDIFileEntry* fileEntry = findIdxResource(index);
|
||||
if (fileEntry) {
|
||||
return fetchResource(fileEntry, NULL);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D5D38-802D5D8C 2D0678 0054+00 0/0 1/1 0/0 .text getResource__10JKRArchiveFUs */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::getResource(u16 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/getResource__10JKRArchiveFUs.s"
|
||||
void* JKRArchive::getResource(u16 id) {
|
||||
SDIFileEntry* fileEntry = findIdResource(id);
|
||||
if (fileEntry) {
|
||||
return fetchResource(fileEntry, NULL);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D5D8C-802D5E30 2D06CC 00A4+00 1/0 4/0 0/0 .text readResource__10JKRArchiveFPvUlUlPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::readResource(void* param_0, u32 param_1, u32 param_2, char const* param_3) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/readResource__10JKRArchiveFPvUlUlPCc.s"
|
||||
u32 JKRArchive::readResource(void* buffer, u32 bufferSize, u32 type, const char* path) {
|
||||
SDIFileEntry* fileEntry;
|
||||
if (type == 0 || type == '????') {
|
||||
fileEntry = findNameResource(path);
|
||||
} else {
|
||||
fileEntry = findTypeResource(type, path);
|
||||
}
|
||||
|
||||
if (fileEntry) {
|
||||
u32 resourceSize;
|
||||
fetchResource(buffer, bufferSize, fileEntry, &resourceSize);
|
||||
return resourceSize;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D5E30-802D5ECC 2D0770 009C+00 1/0 4/0 0/0 .text readResource__10JKRArchiveFPvUlPCc
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::readResource(void* param_0, u32 param_1, char const* param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/readResource__10JKRArchiveFPvUlPCc.s"
|
||||
u32 JKRArchive::readResource(void* buffer, u32 bufferSize, const char* path) {
|
||||
SDIFileEntry* fileEntry;
|
||||
if (*path == '/') {
|
||||
fileEntry = findFsResource(path + 1, 0);
|
||||
} else {
|
||||
fileEntry = findFsResource(path, getCurrentDirID());
|
||||
}
|
||||
|
||||
if (fileEntry) {
|
||||
u32 resourceSize;
|
||||
fetchResource(buffer, bufferSize, fileEntry, &resourceSize);
|
||||
return resourceSize;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D5ECC-802D5F40 2D080C 0074+00 0/0 7/7 1/1 .text readIdxResource__10JKRArchiveFPvUlUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::readIdxResource(void* param_0, u32 param_1, u32 param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/readIdxResource__10JKRArchiveFPvUlUl.s"
|
||||
u32 JKRArchive::readIdxResource(void* buffer, u32 bufferSize, u32 index) {
|
||||
SDIFileEntry* fileEntry = findIdxResource(index);
|
||||
if (fileEntry) {
|
||||
u32 resourceSize;
|
||||
fetchResource(buffer, bufferSize, fileEntry, &resourceSize);
|
||||
return resourceSize;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D5F40-802D5FB4 2D0880 0074+00 0/0 1/1 0/0 .text readResource__10JKRArchiveFPvUlUs
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::readResource(void* param_0, u32 param_1, u16 param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/readResource__10JKRArchiveFPvUlUs.s"
|
||||
u32 JKRArchive::readResource(void* buffer, u32 bufferSize, u16 id) {
|
||||
SDIFileEntry* fileEntry = findIdResource(id);
|
||||
if (fileEntry) {
|
||||
u32 resourceSize;
|
||||
fetchResource(buffer, bufferSize, fileEntry, &resourceSize);
|
||||
return resourceSize;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D5FB4-802D603C 2D08F4 0088+00 1/0 2/0 0/0 .text removeResourceAll__10JKRArchiveFv
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::removeResourceAll() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/removeResourceAll__10JKRArchiveFv.s"
|
||||
void JKRArchive::removeResourceAll(void) {
|
||||
if (mArcInfoBlock && mMountMode != MOUNT_MEM) {
|
||||
SDIFileEntry* fileEntry = mFiles;
|
||||
for (int i = 0; i < mArcInfoBlock->num_file_entries; fileEntry++, i++) {
|
||||
if (fileEntry->data) {
|
||||
JKRFreeToHeap(mHeap, fileEntry->data);
|
||||
fileEntry->data = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D603C-802D609C 2D097C 0060+00 1/0 2/0 0/0 .text removeResource__10JKRArchiveFPv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::removeResource(void* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/removeResource__10JKRArchiveFPv.s"
|
||||
bool JKRArchive::removeResource(void* resource) {
|
||||
SDIFileEntry* fileEntry = findPtrResource(resource);
|
||||
if (fileEntry == NULL)
|
||||
return false;
|
||||
|
||||
fileEntry->data = NULL;
|
||||
JKRFreeToHeap(mHeap, resource);
|
||||
return true;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D609C-802D60D8 2D09DC 003C+00 1/0 4/0 0/0 .text detachResource__10JKRArchiveFPv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::detachResource(void* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/detachResource__10JKRArchiveFPv.s"
|
||||
bool JKRArchive::detachResource(void* resource) {
|
||||
SDIFileEntry* fileEntry = findPtrResource(resource);
|
||||
if (fileEntry == NULL)
|
||||
return false;
|
||||
|
||||
fileEntry->data = NULL;
|
||||
return true;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D60D8-802D610C 2D0A18 0034+00 1/0 4/0 0/0 .text getResSize__10JKRArchiveCFPCv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::getResSize(void const* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/getResSize__10JKRArchiveCFPCv.s"
|
||||
u32 JKRArchive::getResSize(const void* resource) const {
|
||||
SDIFileEntry* fileEntry = findPtrResource(resource);
|
||||
if (fileEntry == NULL)
|
||||
return -1;
|
||||
|
||||
return fileEntry->data_size;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D610C-802D6150 2D0A4C 0044+00 0/0 1/1 0/0 .text countResource__10JKRArchiveCFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::countResource() const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/countResource__10JKRArchiveCFv.s"
|
||||
u32 JKRArchive::countResource(void) const {
|
||||
u32 count = 0;
|
||||
for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) {
|
||||
if (mFiles[i].isUnknownFlag1()) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D6150-802D61B0 2D0A90 0060+00 1/0 4/0 0/0 .text countFile__10JKRArchiveCFPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::countFile(char const* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/countFile__10JKRArchiveCFPCc.s"
|
||||
u32 JKRArchive::countFile(const char* path) const {
|
||||
SDirEntry* dirEntry;
|
||||
if (*path == '/') {
|
||||
path++;
|
||||
|
||||
if (*path == '\0')
|
||||
path = NULL;
|
||||
dirEntry = findDirectory(path, 0);
|
||||
} else {
|
||||
dirEntry = findDirectory(path, getCurrentDirID());
|
||||
}
|
||||
|
||||
if (dirEntry) {
|
||||
return dirEntry->num_entries;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D61B0-802D625C 2D0AF0 00AC+00 1/0 4/0 0/0 .text getFirstFile__10JKRArchiveCFPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::getFirstFile(char const* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/getFirstFile__10JKRArchiveCFPCc.s"
|
||||
JKRFileFinder* JKRArchive::getFirstFile(const char* path) const {
|
||||
SDirEntry* dirEntry;
|
||||
if (*path == '/') {
|
||||
path++;
|
||||
|
||||
if (*path == '\0')
|
||||
path = NULL;
|
||||
dirEntry = findDirectory(path, 0);
|
||||
} else {
|
||||
dirEntry = findDirectory(path, getCurrentDirID());
|
||||
}
|
||||
|
||||
if (dirEntry) {
|
||||
// don't know what is correct here... for now we're casting away const
|
||||
return new (JKRHeap::getSystemHeap(), 0)
|
||||
JKRArcFinder((JKRArchive*)this, dirEntry->first_file_index, (u32)dirEntry->num_entries);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D625C-802D6294 2D0B9C 0038+00 0/0 2/2 0/0 .text getFileAttribute__10JKRArchiveCFUl
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArchive::getFileAttribute(u32 param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRArchivePub/getFileAttribute__10JKRArchiveCFUl.s"
|
||||
}
|
||||
#pragma pop
|
||||
u32 JKRArchive::getFileAttribute(u32 index) const {
|
||||
SDIFileEntry* fileEntry = findIdxResource(index);
|
||||
if (fileEntry) {
|
||||
return fileEntry->getFlags();
|
||||
}
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CC288-803CC2D8 0293A8 0050+00 0/0 2/2 0/0 .data __vt__10JKRArchive */
|
||||
SECTION_DATA extern void* __vt__10JKRArchive[20] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__10JKRArchiveFv,
|
||||
(void*)unmount__13JKRFileLoaderFv,
|
||||
(void*)becomeCurrent__10JKRArchiveFPCc,
|
||||
(void*)getResource__10JKRArchiveFPCc,
|
||||
(void*)getResource__10JKRArchiveFUlPCc,
|
||||
(void*)readResource__10JKRArchiveFPvUlPCc,
|
||||
(void*)readResource__10JKRArchiveFPvUlUlPCc,
|
||||
(void*)removeResourceAll__10JKRArchiveFv,
|
||||
(void*)removeResource__10JKRArchiveFPv,
|
||||
(void*)detachResource__10JKRArchiveFPv,
|
||||
(void*)getResSize__10JKRArchiveCFPCv,
|
||||
(void*)countFile__10JKRArchiveCFPCc,
|
||||
(void*)getFirstFile__10JKRArchiveCFPCc,
|
||||
(void*)getExpandedResSize__10JKRArchiveCFPCv,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)setExpandSize__10JKRArchiveFPQ210JKRArchive12SDIFileEntryUl,
|
||||
(void*)getExpandSize__10JKRArchiveCFPQ210JKRArchive12SDIFileEntry,
|
||||
};
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -11,44 +11,6 @@
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JKRHeap {
|
||||
struct TState {};
|
||||
|
||||
/* 802CE138 */ JKRHeap(void*, u32, JKRHeap*, bool);
|
||||
/* 802CE264 */ ~JKRHeap();
|
||||
/* 802CE474 */ void alloc(u32, int, JKRHeap*);
|
||||
/* 802CE574 */ void callAllDisposer();
|
||||
/* 802CEAC0 */ void dispose();
|
||||
/* 802CED84 */ void state_register(JKRHeap::TState*, u32) const;
|
||||
/* 802CED88 */ void state_compare(JKRHeap::TState const&, JKRHeap::TState const&) const;
|
||||
/* 802CEDA0 */ void state_dump(JKRHeap::TState const&) const;
|
||||
|
||||
static u8 sRootHeap[4];
|
||||
};
|
||||
|
||||
struct JKRAssertHeap {
|
||||
/* 802D12C4 */ JKRAssertHeap(void*, u32, JKRHeap*, bool);
|
||||
/* 802D1300 */ ~JKRAssertHeap();
|
||||
/* 802D1368 */ void create(JKRHeap*);
|
||||
/* 802D13D8 */ void do_destroy();
|
||||
/* 802D1408 */ void getHeapType();
|
||||
/* 802D1414 */ bool check();
|
||||
/* 802D141C */ bool dump();
|
||||
/* 802D1424 */ bool dump_sort();
|
||||
/* 802D142C */ bool do_changeGroupID(u8);
|
||||
/* 802D1434 */ bool do_getCurrentGroupId();
|
||||
/* 802D143C */ bool do_alloc(u32, int);
|
||||
/* 802D1444 */ void do_free(void*);
|
||||
/* 802D1448 */ void do_freeAll();
|
||||
/* 802D144C */ void do_freeTail();
|
||||
/* 802D1450 */ void do_fillFreeArea();
|
||||
/* 802D1454 */ bool do_resize(void*, u32);
|
||||
/* 802D145C */ bool do_getSize(void*);
|
||||
/* 802D1464 */ bool do_getFreeSize();
|
||||
/* 802D146C */ bool do_getMaxFreeBlock();
|
||||
/* 802D1474 */ bool do_getTotalFreeSize();
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
@@ -93,88 +55,45 @@ extern "C" u8 sRootHeap__7JKRHeap[4];
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CC090-803CC0F0 0291B0 0060+00 2/2 0/0 0/0 .data __vt__13JKRAssertHeap */
|
||||
SECTION_DATA extern void* __vt__13JKRAssertHeap[24] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__13JKRAssertHeapFv,
|
||||
(void*)callAllDisposer__7JKRHeapFv,
|
||||
(void*)getHeapType__13JKRAssertHeapFv,
|
||||
(void*)check__13JKRAssertHeapFv,
|
||||
(void*)dump_sort__13JKRAssertHeapFv,
|
||||
(void*)dump__13JKRAssertHeapFv,
|
||||
(void*)do_destroy__13JKRAssertHeapFv,
|
||||
(void*)do_alloc__13JKRAssertHeapFUli,
|
||||
(void*)do_free__13JKRAssertHeapFPv,
|
||||
(void*)do_freeAll__13JKRAssertHeapFv,
|
||||
(void*)do_freeTail__13JKRAssertHeapFv,
|
||||
(void*)do_fillFreeArea__13JKRAssertHeapFv,
|
||||
(void*)do_resize__13JKRAssertHeapFPvUl,
|
||||
(void*)do_getSize__13JKRAssertHeapFPv,
|
||||
(void*)do_getFreeSize__13JKRAssertHeapFv,
|
||||
(void*)do_getMaxFreeBlock__13JKRAssertHeapFv,
|
||||
(void*)do_getTotalFreeSize__13JKRAssertHeapFv,
|
||||
(void*)do_changeGroupID__13JKRAssertHeapFUc,
|
||||
(void*)do_getCurrentGroupId__13JKRAssertHeapFv,
|
||||
(void*)state_register__7JKRHeapCFPQ27JKRHeap6TStateUl,
|
||||
(void*)state_compare__7JKRHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState,
|
||||
(void*)state_dump__7JKRHeapCFRCQ27JKRHeap6TState,
|
||||
};
|
||||
|
||||
/* 802D12C4-802D1300 2CBC04 003C+00 1/1 0/0 0/0 .text __ct__13JKRAssertHeapFPvUlP7JKRHeapb */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRAssertHeap::JKRAssertHeap(void* param_0, u32 param_1, JKRHeap* param_2, bool param_3) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAssertHeap/__ct__13JKRAssertHeapFPvUlP7JKRHeapb.s"
|
||||
}
|
||||
#pragma pop
|
||||
JKRAssertHeap::JKRAssertHeap(void* data, unsigned long size, JKRHeap* parent, bool errorFlag)
|
||||
: JKRHeap(data, size, parent, errorFlag) {}
|
||||
|
||||
/* 802D1300-802D1368 2CBC40 0068+00 1/0 0/0 0/0 .text __dt__13JKRAssertHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRAssertHeap::~JKRAssertHeap() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAssertHeap/__dt__13JKRAssertHeapFv.s"
|
||||
JKRAssertHeap::~JKRAssertHeap() {
|
||||
this->dispose();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D1368-802D13D8 2CBCA8 0070+00 0/0 1/1 0/0 .text create__13JKRAssertHeapFP7JKRHeap
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAssertHeap::create(JKRHeap* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAssertHeap/create__13JKRAssertHeapFP7JKRHeap.s"
|
||||
JKRAssertHeap* JKRAssertHeap::create(JKRHeap* parent) {
|
||||
if (!parent) {
|
||||
parent = JKRHeap::getRootHeap();
|
||||
}
|
||||
|
||||
// 0x70 is sizeof(JKRAssertHeap) aligned to 16 bytes
|
||||
u32 size = 0x70;
|
||||
int alignment = 16;
|
||||
|
||||
void* ptr = JKRHeap::alloc(size, alignment, parent);
|
||||
if (!ptr)
|
||||
return NULL;
|
||||
|
||||
return new (ptr) JKRAssertHeap(NULL, 0, parent, false);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D13D8-802D1408 2CBD18 0030+00 1/0 0/0 0/0 .text do_destroy__13JKRAssertHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAssertHeap::do_destroy() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAssertHeap/do_destroy__13JKRAssertHeapFv.s"
|
||||
void JKRAssertHeap::do_destroy(void) {
|
||||
this->~JKRAssertHeap();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D1408-802D1414 2CBD48 000C+00 1/0 0/0 0/0 .text getHeapType__13JKRAssertHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAssertHeap::getHeapType() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAssertHeap/getHeapType__13JKRAssertHeapFv.s"
|
||||
u32 JKRAssertHeap::getHeapType(void) {
|
||||
return 'ASTH';
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D1414-802D141C 2CBD54 0008+00 1/0 0/0 0/0 .text check__13JKRAssertHeapFv */
|
||||
bool JKRAssertHeap::check() {
|
||||
bool JKRAssertHeap::check(void) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -189,18 +108,19 @@ bool JKRAssertHeap::dump_sort() {
|
||||
}
|
||||
|
||||
/* 802D142C-802D1434 2CBD6C 0008+00 1/0 0/0 0/0 .text do_changeGroupID__13JKRAssertHeapFUc */
|
||||
bool JKRAssertHeap::do_changeGroupID(u8 param_0) {
|
||||
return false;
|
||||
|
||||
u8 JKRAssertHeap::do_changeGroupID(u8) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 802D1434-802D143C 2CBD74 0008+00 1/0 0/0 0/0 .text do_getCurrentGroupId__13JKRAssertHeapFv */
|
||||
bool JKRAssertHeap::do_getCurrentGroupId() {
|
||||
return false;
|
||||
u8 JKRAssertHeap::do_getCurrentGroupId(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 802D143C-802D1444 2CBD7C 0008+00 1/0 0/0 0/0 .text do_alloc__13JKRAssertHeapFUli */
|
||||
bool JKRAssertHeap::do_alloc(u32 param_0, int param_1) {
|
||||
return false;
|
||||
void* JKRAssertHeap::do_alloc(u32, int) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* 802D1444-802D1448 2CBD84 0004+00 1/0 0/0 0/0 .text do_free__13JKRAssertHeapFPv */
|
||||
@@ -225,27 +145,27 @@ void JKRAssertHeap::do_fillFreeArea() {
|
||||
}
|
||||
|
||||
/* 802D1454-802D145C 2CBD94 0008+00 1/0 0/0 0/0 .text do_resize__13JKRAssertHeapFPvUl */
|
||||
bool JKRAssertHeap::do_resize(void* param_0, u32 param_1) {
|
||||
return false;
|
||||
s32 JKRAssertHeap::do_resize(void*, u32) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 802D145C-802D1464 2CBD9C 0008+00 1/0 0/0 0/0 .text do_getSize__13JKRAssertHeapFPv */
|
||||
bool JKRAssertHeap::do_getSize(void* param_0) {
|
||||
return false;
|
||||
s32 JKRAssertHeap::do_getSize(void*) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 802D1464-802D146C 2CBDA4 0008+00 1/0 0/0 0/0 .text do_getFreeSize__13JKRAssertHeapFv
|
||||
*/
|
||||
bool JKRAssertHeap::do_getFreeSize() {
|
||||
return false;
|
||||
s32 JKRAssertHeap::do_getFreeSize(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 802D146C-802D1474 2CBDAC 0008+00 1/0 0/0 0/0 .text do_getMaxFreeBlock__13JKRAssertHeapFv */
|
||||
bool JKRAssertHeap::do_getMaxFreeBlock() {
|
||||
return false;
|
||||
void* JKRAssertHeap::do_getMaxFreeBlock(void) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* 802D1474-802D147C 2CBDB4 0008+00 1/0 0/0 0/0 .text do_getTotalFreeSize__13JKRAssertHeapFv */
|
||||
bool JKRAssertHeap::do_getTotalFreeSize() {
|
||||
return false;
|
||||
s32 JKRAssertHeap::do_getTotalFreeSize(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// Translation Unit: JKRCompArchive
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRCompArchive.h"
|
||||
// #include "JSystem/JKernel/JKRCompArchive.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
|
||||
+187
-161
@@ -4,53 +4,11 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRDecomp.h"
|
||||
#include "JSystem/JKernel/JKRAramPiece.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JKRThread {
|
||||
/* 802D1568 */ JKRThread(u32, int, int);
|
||||
/* 802D1758 */ ~JKRThread();
|
||||
};
|
||||
|
||||
struct JKRHeap {
|
||||
static u8 sSystemHeap[4];
|
||||
};
|
||||
|
||||
struct JKRDecompCommand {
|
||||
/* 802DBD70 */ JKRDecompCommand();
|
||||
/* 802DBDC0 */ ~JKRDecompCommand();
|
||||
};
|
||||
|
||||
struct JKRDecomp {
|
||||
/* 802DB680 */ void create(s32);
|
||||
/* 802DB6E0 */ JKRDecomp(s32);
|
||||
/* 802DB730 */ ~JKRDecomp();
|
||||
/* 802DB790 */ void run();
|
||||
/* 802DB858 */ void prepareCommand(u8*, u8*, u32, u32, void (*)(u32));
|
||||
/* 802DB8D0 */ void sendCommand(JKRDecompCommand*);
|
||||
/* 802DB900 */ void orderAsync(u8*, u8*, u32, u32, void (*)(u32));
|
||||
/* 802DB934 */ void sync(JKRDecompCommand*, int);
|
||||
/* 802DB988 */ void orderSync(u8*, u8*, u32, u32);
|
||||
/* 802DB9DC */ void decode(u8*, u8*, u32, u32);
|
||||
/* 802DBA58 */ void decodeSZP(u8*, u8*, u32, u32);
|
||||
/* 802DBC14 */ void decodeSZS(u8*, u8*, u32, u32);
|
||||
/* 802DBCF8 */ void checkCompressed(u8*);
|
||||
|
||||
static u8 sMessageBuffer[32];
|
||||
static u8 sMessageQueue[32];
|
||||
static u8 sDecompObject[4 + 4 /* padding */];
|
||||
};
|
||||
|
||||
struct JKRAMCommand {};
|
||||
|
||||
struct JKRAramPiece {
|
||||
/* 802D35F4 */ void sendCommand(JKRAMCommand*);
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
@@ -83,10 +41,6 @@ extern "C" void __dl__FPv();
|
||||
extern "C" void __ct__9JKRThreadFUlii();
|
||||
extern "C" void __dt__9JKRThreadFv();
|
||||
extern "C" void sendCommand__12JKRAramPieceFP12JKRAMCommand();
|
||||
extern "C" void OSInitMessageQueue();
|
||||
extern "C" void OSSendMessage();
|
||||
extern "C" void OSReceiveMessage();
|
||||
extern "C" void OSResumeThread();
|
||||
extern "C" void _savegpr_27();
|
||||
extern "C" void _savegpr_28();
|
||||
extern "C" void _restgpr_27();
|
||||
@@ -99,134 +53,207 @@ extern "C" u8 sSystemHeap__7JKRHeap[4];
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 804514B0-804514B8 0009B0 0004+04 1/1 0/0 0/0 .sbss sDecompObject__9JKRDecomp */
|
||||
u8 JKRDecomp::sDecompObject[4 + 4 /* padding */];
|
||||
JKRDecomp* JKRDecomp::sDecompObject;
|
||||
|
||||
/* 802DB680-802DB6E0 2D5FC0 0060+00 0/0 1/1 0/0 .text create__9JKRDecompFl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDecomp::create(s32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDecomp/create__9JKRDecompFl.s"
|
||||
JKRDecomp* JKRDecomp::create(long priority) {
|
||||
if (!sDecompObject) {
|
||||
sDecompObject = new (JKRHeap::getSystemHeap(), 0) JKRDecomp(priority);
|
||||
}
|
||||
|
||||
return sDecompObject;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CC460-803CC480 029580 0020+00 1/1 0/0 0/0 .data sMessageBuffer__9JKRDecomp */
|
||||
SECTION_DATA u8 JKRDecomp::sMessageBuffer[32] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
OSMessage JKRDecomp::sMessageBuffer[8] = {0};
|
||||
|
||||
/* 803CC480-803CC4A0 0295A0 0020+00 2/2 0/0 0/0 .data sMessageQueue__9JKRDecomp */
|
||||
SECTION_DATA u8 JKRDecomp::sMessageQueue[32] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
/* 803CC4A0-803CC4B0 0295C0 0010+00 2/2 0/0 0/0 .data __vt__9JKRDecomp */
|
||||
SECTION_DATA extern void* __vt__9JKRDecomp[4] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__9JKRDecompFv,
|
||||
(void*)run__9JKRDecompFv,
|
||||
};
|
||||
OSMessageQueue JKRDecomp::sMessageQueue = {0};
|
||||
|
||||
/* 802DB6E0-802DB730 2D6020 0050+00 1/1 0/0 0/0 .text __ct__9JKRDecompFl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRDecomp::JKRDecomp(s32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDecomp/__ct__9JKRDecompFl.s"
|
||||
JKRDecomp::JKRDecomp(long priority) : JKRThread(0x800, 0x10, priority) {
|
||||
resume();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DB730-802DB790 2D6070 0060+00 1/0 0/0 0/0 .text __dt__9JKRDecompFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRDecomp::~JKRDecomp() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDecomp/__dt__9JKRDecompFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
JKRDecomp::~JKRDecomp() {}
|
||||
|
||||
/* 802DB790-802DB858 2D60D0 00C8+00 1/0 0/0 0/0 .text run__9JKRDecompFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDecomp::run() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDecomp/run__9JKRDecompFv.s"
|
||||
void* JKRDecomp::run(void) {
|
||||
OSInitMessageQueue(&sMessageQueue, sMessageBuffer, 8);
|
||||
for (;;) {
|
||||
OSMessage message;
|
||||
OSReceiveMessage(&sMessageQueue, &message, OS_MESSAGE_BLOCKING);
|
||||
|
||||
JKRDecompCommand* command = (JKRDecompCommand*)message;
|
||||
decode(command->mSrcBuffer, command->mDstBuffer, command->mSrcLength, command->mDstLength);
|
||||
|
||||
if (command->field_0x20 != 0) {
|
||||
if (command->field_0x20 == 1) {
|
||||
JKRAramPiece::sendCommand(command->mAMCommand);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (command->mCallback) {
|
||||
(*command->mCallback)((u32)command);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (command->field_0x1c) {
|
||||
OSSendMessage(command->field_0x1c, (OSMessage)1, OS_MESSAGE_NON_BLOCKING);
|
||||
} else {
|
||||
OSSendMessage(&command->mMessageQueue, (OSMessage)1, OS_MESSAGE_NON_BLOCKING);
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DB858-802DB8D0 2D6198 0078+00 1/1 0/0 0/0 .text prepareCommand__9JKRDecompFPUcPUcUlUlPFUl_v
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDecomp::prepareCommand(u8* param_0, u8* param_1, u32 param_2, u32 param_3,
|
||||
void (*param_4)(u32)) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDecomp/prepareCommand__9JKRDecompFPUcPUcUlUlPFUl_v.s"
|
||||
JKRDecompCommand* JKRDecomp::prepareCommand(u8* srcBuffer, u8* dstBuffer, u32 srcLength,
|
||||
u32 dstLength,
|
||||
JKRDecompCommand::AsyncCallback callback) {
|
||||
JKRDecompCommand* command = new (JKRHeap::getSystemHeap(), -4) JKRDecompCommand();
|
||||
command->mSrcBuffer = srcBuffer;
|
||||
command->mDstBuffer = dstBuffer;
|
||||
command->mSrcLength = srcLength;
|
||||
command->mDstLength = dstLength;
|
||||
command->mCallback = callback;
|
||||
return command;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DB8D0-802DB900 2D6210 0030+00 1/1 1/1 0/0 .text sendCommand__9JKRDecompFP16JKRDecompCommand
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDecomp::sendCommand(JKRDecompCommand* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDecomp/sendCommand__9JKRDecompFP16JKRDecompCommand.s"
|
||||
void JKRDecomp::sendCommand(JKRDecompCommand* command) {
|
||||
OSSendMessage(&sMessageQueue, command, OS_MESSAGE_NON_BLOCKING);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DB900-802DB934 2D6240 0034+00 1/1 0/0 0/0 .text orderAsync__9JKRDecompFPUcPUcUlUlPFUl_v */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDecomp::orderAsync(u8* param_0, u8* param_1, u32 param_2, u32 param_3,
|
||||
void (*param_4)(u32)) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDecomp/orderAsync__9JKRDecompFPUcPUcUlUlPFUl_v.s"
|
||||
JKRDecompCommand* JKRDecomp::orderAsync(u8* srcBuffer, u8* dstBuffer, u32 srcLength, u32 dstLength,
|
||||
JKRDecompCommand::AsyncCallback callback) {
|
||||
JKRDecompCommand* command =
|
||||
prepareCommand(srcBuffer, dstBuffer, srcLength, dstLength, callback);
|
||||
sendCommand(command);
|
||||
return command;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DB934-802DB988 2D6274 0054+00 1/1 0/0 0/0 .text sync__9JKRDecompFP16JKRDecompCommandi */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDecomp::sync(JKRDecompCommand* param_0, int param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDecomp/sync__9JKRDecompFP16JKRDecompCommandi.s"
|
||||
bool JKRDecomp::sync(JKRDecompCommand* command, int isNonBlocking) {
|
||||
OSMessage message;
|
||||
bool result;
|
||||
if (isNonBlocking == JKRDECOMP_SYNC_BLOCKING) {
|
||||
OSReceiveMessage(&command->mMessageQueue, &message, OS_MESSAGE_BLOCKING);
|
||||
result = true;
|
||||
} else {
|
||||
result =
|
||||
OSReceiveMessage(&command->mMessageQueue, &message, OS_MESSAGE_NON_BLOCKING) != FALSE;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DB988-802DB9DC 2D62C8 0054+00 0/0 5/5 0/0 .text orderSync__9JKRDecompFPUcPUcUlUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDecomp::orderSync(u8* param_0, u8* param_1, u32 param_2, u32 param_3) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDecomp/orderSync__9JKRDecompFPUcPUcUlUl.s"
|
||||
bool JKRDecomp::orderSync(u8* srcBuffer, u8* dstBuffer, u32 srcLength, u32 dstLength) {
|
||||
JKRDecompCommand* command = orderAsync(srcBuffer, dstBuffer, srcLength, dstLength, NULL);
|
||||
bool result = sync(command, JKRDECOMP_SYNC_BLOCKING);
|
||||
delete command;
|
||||
return result;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DB9DC-802DBA58 2D631C 007C+00 1/1 0/0 0/0 .text decode__9JKRDecompFPUcPUcUlUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDecomp::decode(u8* param_0, u8* param_1, u32 param_2, u32 param_3) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDecomp/decode__9JKRDecompFPUcPUcUlUl.s"
|
||||
void JKRDecomp::decode(u8* srcBuffer, u8* dstBuffer, u32 srcLength, u32 dstLength) {
|
||||
JKRCompression compression = checkCompressed(srcBuffer);
|
||||
if (compression == COMPRESSION_YAY0) {
|
||||
decodeSZP(srcBuffer, dstBuffer, srcLength, dstLength);
|
||||
} else if (compression == COMPRESSION_YAZ0) {
|
||||
decodeSZS(srcBuffer, dstBuffer, srcLength, dstLength);
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DBA58-802DBC14 2D6398 01BC+00 1/1 0/0 0/0 .text decodeSZP__9JKRDecompFPUcPUcUlUl */
|
||||
// All instructions match. Wrong registers are used.
|
||||
#ifdef NONMATCHING
|
||||
void JKRDecomp::decodeSZP(u8* src, u8* dst, u32 srcLength, u32 dstLength) {
|
||||
u32 decodedSize;
|
||||
s32 srcChunkOffset;
|
||||
s32 count;
|
||||
s32 dstOffset;
|
||||
u32 length;
|
||||
u32 counter;
|
||||
u32 srcDataOffset;
|
||||
u32 linkTableOffset;
|
||||
s32 offset;
|
||||
s32 i;
|
||||
|
||||
decodedSize = read_big_endian_u32(src + 4);
|
||||
linkTableOffset = read_big_endian_u32(src + 8);
|
||||
srcDataOffset = read_big_endian_u32(src + 12);
|
||||
|
||||
dstOffset = 0;
|
||||
counter = 0;
|
||||
srcChunkOffset = 16;
|
||||
|
||||
u32 chunkBits;
|
||||
if (srcLength == 0)
|
||||
return;
|
||||
if (dstLength > decodedSize)
|
||||
return;
|
||||
|
||||
length = srcLength;
|
||||
do {
|
||||
if (counter == 0) {
|
||||
chunkBits = read_big_endian_u32(src + srcChunkOffset);
|
||||
srcChunkOffset += 4;
|
||||
counter = 32;
|
||||
}
|
||||
|
||||
if (chunkBits & 0x80000000) {
|
||||
if (dstLength == 0) {
|
||||
dst[dstOffset] = src[srcDataOffset];
|
||||
length--;
|
||||
if (length == 0) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
dstLength--;
|
||||
}
|
||||
dstOffset++;
|
||||
srcDataOffset++;
|
||||
} else {
|
||||
u32 linkInfo = read_big_endian_u16(src + linkTableOffset);
|
||||
linkTableOffset += 2;
|
||||
|
||||
offset = dstOffset - (linkInfo & 0xFFF);
|
||||
count = ((s32)linkInfo) >> 12;
|
||||
if (count == 0) {
|
||||
count = (u32)src[srcDataOffset] + 0x12;
|
||||
srcDataOffset++;
|
||||
} else {
|
||||
count += 2;
|
||||
}
|
||||
|
||||
if (count > decodedSize - dstOffset) {
|
||||
count = decodedSize - dstOffset;
|
||||
}
|
||||
|
||||
for (i = 0; i < count; i++, dstOffset++, offset++) {
|
||||
if (dstLength == 0) {
|
||||
dst[dstOffset] = dst[offset - 1];
|
||||
length--;
|
||||
if (length == 0) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
dstLength--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
chunkBits <<= 1;
|
||||
counter--;
|
||||
} while ((s32)dstLength < decodedSize);
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -235,6 +262,7 @@ asm void JKRDecomp::decodeSZP(u8* param_0, u8* param_1, u32 param_2, u32 param_3
|
||||
#include "asm/JSystem/JKernel/JKRDecomp/decodeSZP__9JKRDecompFPUcPUcUlUl.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802DBC14-802DBCF8 2D6554 00E4+00 1/1 0/0 0/0 .text decodeSZS__9JKRDecompFPUcPUcUlUl */
|
||||
#pragma push
|
||||
@@ -247,31 +275,29 @@ asm void JKRDecomp::decodeSZS(u8* param_0, u8* param_1, u32 param_2, u32 param_3
|
||||
#pragma pop
|
||||
|
||||
/* 802DBCF8-802DBD70 2D6638 0078+00 1/1 4/4 0/0 .text checkCompressed__9JKRDecompFPUc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDecomp::checkCompressed(u8* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDecomp/checkCompressed__9JKRDecompFPUc.s"
|
||||
JKRCompression JKRDecomp::checkCompressed(u8* src) {
|
||||
if ((src[0] == 'Y') && (src[1] == 'a') && (src[3] == '0')) {
|
||||
if (src[2] == 'y') {
|
||||
return COMPRESSION_YAY0;
|
||||
}
|
||||
if (src[2] == 'z') {
|
||||
return COMPRESSION_YAZ0;
|
||||
}
|
||||
}
|
||||
if ((src[0] == 'A') && (src[1] == 'S') && (src[2] == 'R')) {
|
||||
return COMPRESSION_ASR;
|
||||
}
|
||||
return COMPRESSION_NONE;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DBD70-802DBDC0 2D66B0 0050+00 1/1 0/0 0/0 .text __ct__16JKRDecompCommandFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRDecompCommand::JKRDecompCommand() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDecomp/__ct__16JKRDecompCommandFv.s"
|
||||
JKRDecompCommand::JKRDecompCommand() {
|
||||
OSInitMessageQueue(&mMessageQueue, &mMessage, 1);
|
||||
mCallback = NULL;
|
||||
field_0x1c = NULL;
|
||||
mThis = this;
|
||||
field_0x20 = 0;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DBDC0-802DBDFC 2D6700 003C+00 1/1 0/0 0/0 .text __dt__16JKRDecompCommandFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRDecompCommand::~JKRDecompCommand() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDecomp/__dt__16JKRDecompCommandFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
JKRDecompCommand::~JKRDecompCommand() {}
|
||||
|
||||
@@ -4,80 +4,26 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRDisposer.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JSUPtrLink {
|
||||
/* 802DBDFC */ JSUPtrLink(void*);
|
||||
/* 802DBE14 */ ~JSUPtrLink();
|
||||
};
|
||||
|
||||
struct JSUPtrList {
|
||||
/* 802DBF4C */ void append(JSUPtrLink*);
|
||||
/* 802DC15C */ void remove(JSUPtrLink*);
|
||||
};
|
||||
|
||||
struct JKRHeap {
|
||||
/* 802CE83C */ void findFromRoot(void*);
|
||||
};
|
||||
|
||||
struct JKRDisposer {
|
||||
/* 802D147C */ JKRDisposer();
|
||||
/* 802D14E4 */ ~JKRDisposer();
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void __ct__11JKRDisposerFv();
|
||||
extern "C" void __dt__11JKRDisposerFv();
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void findFromRoot__7JKRHeapFPv();
|
||||
extern "C" void __dl__FPv();
|
||||
extern "C" void __ct__10JSUPtrLinkFPv();
|
||||
extern "C" void __dt__10JSUPtrLinkFv();
|
||||
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CC0F0-803CC100 029210 000C+04 2/2 0/0 0/0 .data __vt__11JKRDisposer */
|
||||
SECTION_DATA extern void* __vt__11JKRDisposer[3 + 1 /* padding */] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__11JKRDisposerFv,
|
||||
/* padding */
|
||||
NULL,
|
||||
};
|
||||
|
||||
/* 802D147C-802D14E4 2CBDBC 0068+00 0/0 12/12 0/0 .text __ct__11JKRDisposerFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRDisposer::JKRDisposer() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDisposer/__ct__11JKRDisposerFv.s"
|
||||
JKRDisposer::JKRDisposer() : mLink(this) {
|
||||
mHeap = JKRHeap::findFromRoot(this);
|
||||
if (mHeap) {
|
||||
mHeap->appendDisposer(this);
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D14E4-802D1568 2CBE24 0084+00 1/0 10/10 0/0 .text __dt__11JKRDisposerFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRDisposer::~JKRDisposer() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDisposer/__dt__11JKRDisposerFv.s"
|
||||
JKRDisposer::~JKRDisposer() {
|
||||
JKRHeap* heap = mHeap;
|
||||
if (heap) {
|
||||
heap->removeDisposer(this);
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// Translation Unit: JKRDvdAramRipper
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRDvdAramRipper.h"
|
||||
// #include "JSystem/JKernel/JKRDvdAramRipper.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
|
||||
@@ -4,88 +4,12 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRDvdArchive.h"
|
||||
#include "JSystem/JKernel/JKRDvdFile.h"
|
||||
#include "JSystem/JKernel/JKRDvdRipper.h"
|
||||
#include "JSystem/JKernel/JKRExpHeap.h"
|
||||
#include "JSystem/JUtility/JUTException.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JUTException {
|
||||
/* 802E21FC */ void panic_f(char const*, int, char const*, ...);
|
||||
};
|
||||
|
||||
struct JSUPtrLink {};
|
||||
|
||||
struct JSUPtrList {
|
||||
/* 802DBFF0 */ void prepend(JSUPtrLink*);
|
||||
/* 802DC15C */ void remove(JSUPtrLink*);
|
||||
};
|
||||
|
||||
struct JKRHeap {
|
||||
/* 802CE4D4 */ void alloc(u32, int);
|
||||
/* 802CE474 */ void alloc(u32, int, JKRHeap*);
|
||||
/* 802CE500 */ void free(void*, JKRHeap*);
|
||||
/* 802CE548 */ void free(void*);
|
||||
/* 802CEB18 */ void copyMemory(void*, void*, u32);
|
||||
|
||||
static u8 sSystemHeap[4];
|
||||
};
|
||||
|
||||
struct JKRFileLoader {
|
||||
/* 802D41D4 */ void unmount();
|
||||
|
||||
static u8 sVolumeList[12];
|
||||
};
|
||||
|
||||
struct JKRExpandSwitch {};
|
||||
|
||||
struct JKRDvdRipper {
|
||||
struct EAllocDirection {};
|
||||
|
||||
/* 802D9C54 */ void loadToMainRAM(s32, u8*, JKRExpandSwitch, u32, JKRHeap*,
|
||||
JKRDvdRipper::EAllocDirection, u32, int*, u32*);
|
||||
};
|
||||
|
||||
struct JKRDvdFile {
|
||||
/* 802D96A0 */ JKRDvdFile(s32);
|
||||
};
|
||||
|
||||
struct JKRArchive {
|
||||
struct EMountDirection {};
|
||||
|
||||
struct SDIFileEntry {};
|
||||
|
||||
struct EMountMode {};
|
||||
|
||||
/* 802D5A38 */ void becomeCurrent(char const*);
|
||||
/* 802D5C64 */ void getResource(u32, char const*);
|
||||
/* 802D5BE8 */ void getResource(char const*);
|
||||
/* 802D5D8C */ void readResource(void*, u32, u32, char const*);
|
||||
/* 802D5E30 */ void readResource(void*, u32, char const*);
|
||||
/* 802D5FB4 */ void removeResourceAll();
|
||||
/* 802D603C */ void removeResource(void*);
|
||||
/* 802D609C */ void detachResource(void*);
|
||||
/* 802D60D8 */ void getResSize(void const*) const;
|
||||
/* 802D6150 */ void countFile(char const*) const;
|
||||
/* 802D61B0 */ void getFirstFile(char const*) const;
|
||||
/* 802D6294 */ JKRArchive(s32, JKRArchive::EMountMode);
|
||||
/* 802D6334 */ ~JKRArchive();
|
||||
/* 802D6734 */ void findPtrResource(void const*) const;
|
||||
/* 802D693C */ void setExpandSize(JKRArchive::SDIFileEntry*, u32);
|
||||
/* 802D6978 */ void getExpandSize(JKRArchive::SDIFileEntry*) const;
|
||||
};
|
||||
|
||||
struct JKRDvdArchive {
|
||||
/* 802D7BF0 */ JKRDvdArchive(s32, JKRArchive::EMountDirection);
|
||||
/* 802D7C98 */ ~JKRDvdArchive();
|
||||
/* 802D7DB4 */ void open(s32);
|
||||
/* 802D8168 */ void fetchResource(void*, u32, JKRArchive::SDIFileEntry*, u32*);
|
||||
/* 802D8050 */ void fetchResource(JKRArchive::SDIFileEntry*, u32*);
|
||||
/* 802D826C */ void fetchResource_subroutine(s32, u32, u32, u8*, u32, int, int);
|
||||
/* 802D8474 */ void fetchResource_subroutine(s32, u32, u32, JKRHeap*, int, int, u8**);
|
||||
/* 802D8698 */ void getExpandedResSize(void const*) const;
|
||||
};
|
||||
#include "global.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
@@ -136,7 +60,6 @@ loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15
|
||||
extern "C" void prepend__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void panic_f__12JUTExceptionFPCciPCce();
|
||||
extern "C" void DCInvalidateRange();
|
||||
extern "C" void _savegpr_25();
|
||||
extern "C" void _savegpr_26();
|
||||
extern "C" void _savegpr_27();
|
||||
@@ -151,141 +74,408 @@ extern "C" void abs();
|
||||
extern "C" u8 sVolumeList__13JKRFileLoader[12];
|
||||
extern "C" u8 sSystemHeap__7JKRHeap[4];
|
||||
|
||||
extern "C" {
|
||||
void DCInvalidateRange(void*, u32);
|
||||
void DCStoreRange(void*, u32);
|
||||
}
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CC398-803CC3E8 0294B8 0050+00 2/2 0/0 0/0 .data __vt__13JKRDvdArchive */
|
||||
SECTION_DATA extern void* __vt__13JKRDvdArchive[20] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__13JKRDvdArchiveFv,
|
||||
(void*)unmount__13JKRFileLoaderFv,
|
||||
(void*)becomeCurrent__10JKRArchiveFPCc,
|
||||
(void*)getResource__10JKRArchiveFPCc,
|
||||
(void*)getResource__10JKRArchiveFUlPCc,
|
||||
(void*)readResource__10JKRArchiveFPvUlPCc,
|
||||
(void*)readResource__10JKRArchiveFPvUlUlPCc,
|
||||
(void*)removeResourceAll__10JKRArchiveFv,
|
||||
(void*)removeResource__10JKRArchiveFPv,
|
||||
(void*)detachResource__10JKRArchiveFPv,
|
||||
(void*)getResSize__10JKRArchiveCFPCv,
|
||||
(void*)countFile__10JKRArchiveCFPCc,
|
||||
(void*)getFirstFile__10JKRArchiveCFPCc,
|
||||
(void*)getExpandedResSize__13JKRDvdArchiveCFPCv,
|
||||
(void*)fetchResource__13JKRDvdArchiveFPQ210JKRArchive12SDIFileEntryPUl,
|
||||
(void*)fetchResource__13JKRDvdArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl,
|
||||
(void*)setExpandSize__10JKRArchiveFPQ210JKRArchive12SDIFileEntryUl,
|
||||
(void*)getExpandSize__10JKRArchiveCFPQ210JKRArchive12SDIFileEntry,
|
||||
};
|
||||
|
||||
/* 802D7BF0-802D7C98 2D2530 00A8+00 0/0 1/1 0/0 .text
|
||||
* __ct__13JKRDvdArchiveFlQ210JKRArchive15EMountDirection */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRDvdArchive::JKRDvdArchive(s32 param_0, JKRArchive::EMountDirection param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdArchive/__ct__13JKRDvdArchiveFlQ210JKRArchive15EMountDirection.s"
|
||||
JKRDvdArchive::JKRDvdArchive(s32 entryNum, JKRArchive::EMountDirection mountDirection)
|
||||
: JKRArchive(entryNum, MOUNT_DVD), mMountDirection(mountDirection) {
|
||||
if (!open(entryNum))
|
||||
return;
|
||||
|
||||
mVolumeType = 'RARC';
|
||||
mVolumeName = mStringTable + (u32)mNodes->name;
|
||||
getVolumeList().prepend(&mFileLoaderLink);
|
||||
mIsMounted = true;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D7C98-802D7DB4 2D25D8 011C+00 1/0 0/0 0/0 .text __dt__13JKRDvdArchiveFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRDvdArchive::~JKRDvdArchive() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdArchive/__dt__13JKRDvdArchiveFv.s"
|
||||
JKRDvdArchive::~JKRDvdArchive() {
|
||||
if (mIsMounted == true) {
|
||||
if (mArcInfoBlock) {
|
||||
SDIFileEntry* fileEntry = mFiles;
|
||||
int i = 0;
|
||||
for (; i < mArcInfoBlock->num_file_entries; fileEntry++, i++) {
|
||||
if (fileEntry->data) {
|
||||
JKRFreeToHeap(mHeap, fileEntry->data);
|
||||
}
|
||||
}
|
||||
|
||||
JKRFreeToHeap(mHeap, mArcInfoBlock);
|
||||
mArcInfoBlock = NULL;
|
||||
}
|
||||
|
||||
if (mExpandedSize) {
|
||||
JKRFree(mExpandedSize);
|
||||
mExpandedSize = NULL;
|
||||
}
|
||||
|
||||
if (mDvdFile) {
|
||||
delete mDvdFile;
|
||||
}
|
||||
|
||||
getVolumeList().remove(&mFileLoaderLink);
|
||||
mIsMounted = false;
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D7DB4-802D8050 2D26F4 029C+00 1/1 0/0 0/0 .text open__13JKRDvdArchiveFl */
|
||||
#ifdef NONMATCHING
|
||||
bool JKRDvdArchive::open(s32 entryNum) {
|
||||
mArcInfoBlock = NULL;
|
||||
field_0x64 = NULL;
|
||||
mNodes = NULL;
|
||||
mFiles = NULL;
|
||||
mStringTable = NULL;
|
||||
|
||||
mDvdFile = new (JKRHeap::getSystemHeap(), 0) JKRDvdFile(entryNum);
|
||||
if (!mDvdFile) {
|
||||
mMountMode = UNKNOWN_MOUNT_MODE;
|
||||
return false;
|
||||
}
|
||||
|
||||
SArcHeader* arcHeader = (SArcHeader*)JKRAllocFromSysHeap(sizeof(SArcHeader), 0x20);
|
||||
if (!arcHeader) {
|
||||
mMountMode = UNKNOWN_MOUNT_MODE;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
JKRDvdToMainRam(entryNum, (u8*)arcHeader, EXPAND_SWITCH_UNKNOWN1, sizeof(SArcHeader), NULL,
|
||||
JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, &mCompression, NULL);
|
||||
DCInvalidateRange(arcHeader, sizeof(SArcHeader));
|
||||
|
||||
int alignment;
|
||||
if (mMountDirection == MOUNT_DIRECTION_HEAD) {
|
||||
alignment = 0x20;
|
||||
} else {
|
||||
alignment = -0x20;
|
||||
}
|
||||
|
||||
mArcInfoBlock = (SArcDataInfo*)JKRAllocFromHeap(mHeap, arcHeader->file_data_offset, alignment);
|
||||
if (!mArcInfoBlock) {
|
||||
mMountMode = UNKNOWN_MOUNT_MODE;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
JKRDvdToMainRam(entryNum, (u8*)mArcInfoBlock, EXPAND_SWITCH_UNKNOWN1,
|
||||
arcHeader->file_data_offset, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD,
|
||||
sizeof(SArcHeader), NULL, NULL);
|
||||
DCInvalidateRange(mArcInfoBlock, arcHeader->file_data_offset);
|
||||
|
||||
mNodes = (SDirEntry*)((int)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset);
|
||||
mFiles = (SDIFileEntry*)((int)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset);
|
||||
mStringTable = (char*)((int)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset);
|
||||
mExpandedSize = NULL;
|
||||
|
||||
bool useCompression = false;
|
||||
SDIFileEntry* fileEntry = mFiles;
|
||||
for (u32 i = 0; i < mArcInfoBlock->num_file_entries; fileEntry++, i++) {
|
||||
if (!fileEntry->isUnknownFlag1()) {
|
||||
useCompression |= fileEntry->isCompressed();
|
||||
}
|
||||
}
|
||||
|
||||
if (useCompression) {
|
||||
mExpandedSize = (s32*)JKRAllocFromHeap(mHeap, sizeof(s32) * mArcInfoBlock->num_file_entries,
|
||||
abs(alignment));
|
||||
if (mExpandedSize) {
|
||||
// !@bug: mArcInfoBlock is allocated from mHeap but free'd to sSystemHeap. I don't know
|
||||
// what will happen if mHeap != sSystemHeap, but it's still a bug to free to the wrong
|
||||
// allocator.
|
||||
JKRFreeToSysHeap(mArcInfoBlock);
|
||||
mMountMode = UNKNOWN_MOUNT_MODE;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
memset(mExpandedSize, 0, sizeof(s32) * mArcInfoBlock->num_file_entries);
|
||||
}
|
||||
|
||||
field_0x64 = arcHeader->header_length + arcHeader->file_data_offset;
|
||||
|
||||
cleanup:
|
||||
if (arcHeader) {
|
||||
JKRFreeToSysHeap(arcHeader);
|
||||
}
|
||||
|
||||
if (mMountMode == UNKNOWN_MOUNT_MODE) {
|
||||
if (mDvdFile) {
|
||||
delete mDvdFile;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdArchive::open(s32 param_0) {
|
||||
asm bool JKRDvdArchive::open(s32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdArchive/open__13JKRDvdArchiveFl.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802D8050-802D8168 2D2990 0118+00 1/0 0/0 0/0 .text
|
||||
* fetchResource__13JKRDvdArchiveFPQ210JKRArchive12SDIFileEntryPUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdArchive::fetchResource(JKRArchive::SDIFileEntry* param_0, u32* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdArchive/fetchResource__13JKRDvdArchiveFPQ210JKRArchive12SDIFileEntryPUl.s"
|
||||
void* JKRDvdArchive::fetchResource(SDIFileEntry* fileEntry, u32* returnSize) {
|
||||
u32 tempReturnSize;
|
||||
if (returnSize == NULL) {
|
||||
returnSize = &tempReturnSize;
|
||||
}
|
||||
|
||||
JKRCompression fileCompression = JKRConvertAttrToCompressionType(fileEntry->getAttr());
|
||||
if (!fileEntry->data) {
|
||||
u8* resourcePtr;
|
||||
u32 resourceSize = fetchResource_subroutine(
|
||||
mEntryNum, this->field_0x64 + fileEntry->data_offset, fileEntry->data_size, mHeap,
|
||||
fileCompression, mCompression, &resourcePtr);
|
||||
*returnSize = resourceSize;
|
||||
if (resourceSize == 0) {
|
||||
return NULL;
|
||||
}
|
||||
fileEntry->data = resourcePtr;
|
||||
if (fileCompression == COMPRESSION_YAZ0) {
|
||||
setExpandSize(fileEntry, *returnSize);
|
||||
}
|
||||
} else {
|
||||
if (fileCompression == COMPRESSION_YAZ0) {
|
||||
u32 resourceSize = getExpandSize(fileEntry);
|
||||
*returnSize = resourceSize;
|
||||
} else {
|
||||
*returnSize = fileEntry->data_size;
|
||||
}
|
||||
}
|
||||
|
||||
return fileEntry->data;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D8168-802D826C 2D2AA8 0104+00 1/0 0/0 0/0 .text
|
||||
* fetchResource__13JKRDvdArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl */
|
||||
// ALIGN_PREV(bufferSize, 0x20) is "inlined" in the function parameter.
|
||||
#ifdef NONMATCHING
|
||||
void* JKRDvdArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* fileEntry,
|
||||
u32* returnSize) {
|
||||
ASSERT(isMounted());
|
||||
u32 otherSize;
|
||||
u32 size = fileEntry->data_size;
|
||||
u32 dstSize = bufferSize;
|
||||
JKRCompression fileCompression = JKRConvertAttrToCompressionType(fileEntry->getAttr());
|
||||
|
||||
if (!fileEntry->data) {
|
||||
dstSize = ALIGN_PREV(bufferSize, 0x20);
|
||||
size = fetchResource_subroutine(mEntryNum, field_0x64 + fileEntry->data_offset,
|
||||
fileEntry->data_size, (u8*)buffer, dstSize, fileCompression,
|
||||
mCompression);
|
||||
} else {
|
||||
if (fileCompression == COMPRESSION_YAZ0) {
|
||||
otherSize = getExpandSize(fileEntry);
|
||||
if (otherSize) {
|
||||
size = otherSize;
|
||||
}
|
||||
}
|
||||
|
||||
if (size > bufferSize) {
|
||||
size = bufferSize;
|
||||
}
|
||||
|
||||
JKRHeap::copyMemory(buffer, fileEntry->data, size);
|
||||
}
|
||||
|
||||
if (returnSize) {
|
||||
*returnSize = size;
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdArchive::fetchResource(void* param_0, u32 param_1, JKRArchive::SDIFileEntry* param_2,
|
||||
u32* param_3) {
|
||||
asm void* JKRDvdArchive::fetchResource(void* param_0, u32 param_1,
|
||||
JKRArchive::SDIFileEntry* param_2, u32* param_3) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdArchive/fetchResource__13JKRDvdArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl.s"
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8039D1B0-8039D1B0 029810 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DEAD static char const* const stringBase_8039D1B0 = "JKRDvdArchive.cpp";
|
||||
SECTION_DEAD static char const* const stringBase_8039D1C2 = "%s";
|
||||
SECTION_DEAD static char const* const stringBase_8039D1C5 = "Sorry, not applied for SZP archive.\n";
|
||||
SECTION_DEAD static char const* const stringBase_8039D1EA = "??? bad sequence\n";
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802D826C-802D8474 2D2BAC 0208+00 1/1 1/1 0/0 .text
|
||||
* fetchResource_subroutine__13JKRDvdArchiveFlUlUlPUcUlii */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdArchive::fetchResource_subroutine(s32 param_0, u32 param_1, u32 param_2, u8* param_3,
|
||||
u32 param_4, int param_5, int param_6) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdArchive/fetchResource_subroutine__13JKRDvdArchiveFlUlUlPUcUlii.s"
|
||||
}
|
||||
#pragma pop
|
||||
u32 JKRDvdArchive::fetchResource_subroutine(s32 entryNum, u32 offset, u32 size, u8* dst,
|
||||
u32 dstLength, JKRCompression fileCompression,
|
||||
JKRCompression archiveCompression) {
|
||||
u32 alignedSize = ALIGN_NEXT(size, 0x20);
|
||||
u32 alignedDstLength = ALIGN_PREV(dstLength, 0x20);
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8039D1B0-8039D1B0 029810 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DEAD static char const* const stringBase_8039D1FC = "Sorry, not applied SZP archive.\n";
|
||||
/* @stringBase0 padding */
|
||||
SECTION_DEAD static char const* const pad_8039D21D = "\0\0";
|
||||
#pragma pop
|
||||
switch (archiveCompression) {
|
||||
case COMPRESSION_NONE: {
|
||||
switch (fileCompression) {
|
||||
case COMPRESSION_NONE:
|
||||
if (alignedSize > alignedDstLength) {
|
||||
alignedSize = alignedDstLength;
|
||||
}
|
||||
|
||||
JKRDvdToMainRam(entryNum, dst, EXPAND_SWITCH_UNKNOWN0, alignedSize, NULL,
|
||||
JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL, NULL);
|
||||
DCInvalidateRange(dst, alignedSize);
|
||||
return alignedSize;
|
||||
case COMPRESSION_YAY0:
|
||||
case COMPRESSION_YAZ0:
|
||||
// The dst pointer to JKRDvdToMainRam should be aligned to 32 bytes. This will align
|
||||
// arcHeader to 32 bytes on the stack.
|
||||
char arcHeaderBuffer[64];
|
||||
SArcHeader* arcHeader = (SArcHeader*)ALIGN_NEXT((u32)arcHeaderBuffer, 0x20);
|
||||
JKRDvdToMainRam(entryNum, (u8*)arcHeader, EXPAND_SWITCH_UNKNOWN2, sizeof(SArcHeader),
|
||||
NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL, NULL);
|
||||
DCInvalidateRange(arcHeader, sizeof(SArcHeader));
|
||||
|
||||
u32 decompressedSize = JKRDecompExpandSize(arcHeader);
|
||||
u32 alignedDecompressedSize = ALIGN_NEXT(decompressedSize, 0x20);
|
||||
if (alignedDecompressedSize > alignedDstLength) {
|
||||
alignedDecompressedSize = alignedDstLength;
|
||||
}
|
||||
|
||||
JKRDvdToMainRam(entryNum, dst, EXPAND_SWITCH_UNKNOWN1, alignedDecompressedSize, NULL,
|
||||
JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL, NULL);
|
||||
DCInvalidateRange(dst, alignedDecompressedSize);
|
||||
return decompressedSize;
|
||||
}
|
||||
}
|
||||
|
||||
case COMPRESSION_YAZ0: {
|
||||
if (size > alignedDstLength) {
|
||||
size = alignedDstLength;
|
||||
}
|
||||
|
||||
JKRDvdToMainRam(entryNum, dst, EXPAND_SWITCH_UNKNOWN1, size, NULL,
|
||||
JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL, NULL);
|
||||
DCInvalidateRange(dst, size);
|
||||
return size;
|
||||
}
|
||||
|
||||
case COMPRESSION_YAY0: {
|
||||
JUTException::panic_f("JKRDvdArchive.cpp", 0x289, "%s",
|
||||
"Sorry, not applied for SZP archive.\n");
|
||||
}
|
||||
|
||||
default: {
|
||||
JUTException::panic_f("JKRDvdArchive.cpp", 0x28d, "%s", "??? bad sequence\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 802D8474-802D8698 2D2DB4 0224+00 1/1 1/1 0/0 .text
|
||||
* fetchResource_subroutine__13JKRDvdArchiveFlUlUlP7JKRHeapiiPPUc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdArchive::fetchResource_subroutine(s32 param_0, u32 param_1, u32 param_2,
|
||||
JKRHeap* param_3, int param_4, int param_5,
|
||||
u8** param_6) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdArchive/fetchResource_subroutine__13JKRDvdArchiveFlUlUlP7JKRHeapiiPPUc.s"
|
||||
u32 JKRDvdArchive::fetchResource_subroutine(s32 entryNum, u32 offset, u32 size, JKRHeap* heap,
|
||||
JKRCompression fileCompression,
|
||||
JKRCompression archiveCompression,
|
||||
u8** returnResource) {
|
||||
u32 alignedSize = ALIGN_NEXT(size, 0x20);
|
||||
u8* buffer;
|
||||
|
||||
switch (archiveCompression) {
|
||||
case COMPRESSION_NONE: {
|
||||
switch (fileCompression) {
|
||||
case COMPRESSION_NONE:
|
||||
buffer = (u8*)JKRAllocFromHeap(heap, alignedSize, sizeof(SArcHeader));
|
||||
ASSERT(buffer);
|
||||
|
||||
JKRDvdToMainRam(entryNum, buffer, EXPAND_SWITCH_UNKNOWN0, alignedSize, NULL,
|
||||
JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL, NULL);
|
||||
DCInvalidateRange(buffer, alignedSize);
|
||||
|
||||
*returnResource = buffer;
|
||||
return alignedSize;
|
||||
case COMPRESSION_YAY0:
|
||||
case COMPRESSION_YAZ0:
|
||||
// The dst pointer to JKRDvdToMainRam should be aligned to 32 bytes. This will align
|
||||
// arcHeader to 32 bytes on the stack.
|
||||
char arcHeaderBuffer[64];
|
||||
SArcHeader* arcHeader = (SArcHeader*)ALIGN_NEXT((u32)arcHeaderBuffer, 0x20);
|
||||
JKRDvdToMainRam(entryNum, (u8*)arcHeader, EXPAND_SWITCH_UNKNOWN2, sizeof(SArcHeader),
|
||||
NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL, NULL);
|
||||
DCInvalidateRange(arcHeader, sizeof(SArcHeader));
|
||||
|
||||
alignedSize = JKRDecompExpandSize(arcHeader);
|
||||
buffer = (u8*)JKRAllocFromHeap(heap, alignedSize, sizeof(SArcHeader));
|
||||
ASSERT(buffer);
|
||||
JKRDvdToMainRam(entryNum, buffer, EXPAND_SWITCH_UNKNOWN1, alignedSize, NULL,
|
||||
JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL, NULL);
|
||||
DCInvalidateRange(buffer, alignedSize);
|
||||
|
||||
*returnResource = buffer;
|
||||
return alignedSize;
|
||||
}
|
||||
}
|
||||
|
||||
case COMPRESSION_YAZ0: {
|
||||
buffer = (u8*)JKRAllocFromHeap(heap, alignedSize, sizeof(SArcHeader));
|
||||
ASSERT(buffer);
|
||||
|
||||
JKRDvdToMainRam(entryNum, buffer, EXPAND_SWITCH_UNKNOWN1, size, NULL,
|
||||
JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL, NULL);
|
||||
DCInvalidateRange(buffer, size);
|
||||
|
||||
*returnResource = buffer;
|
||||
return alignedSize;
|
||||
}
|
||||
|
||||
case COMPRESSION_YAY0: {
|
||||
JUTException::panic_f("JKRDvdArchive.cpp", 0x2f2, "%s",
|
||||
"Sorry, not applied SZP archive.\n");
|
||||
}
|
||||
|
||||
default: {
|
||||
JUTException::panic_f("JKRDvdArchive.cpp", 0x2f6, "%s", "??? bad sequence\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D8698-802D87D4 2D2FD8 013C+00 1/0 0/0 0/0 .text getExpandedResSize__13JKRDvdArchiveCFPCv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdArchive::getExpandedResSize(void const* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdArchive/getExpandedResSize__13JKRDvdArchiveCFPCv.s"
|
||||
u32 JKRDvdArchive::getExpandedResSize(const void* resource) const {
|
||||
u32 resourceSize;
|
||||
if (!mExpandedSize) {
|
||||
return getResSize(resource);
|
||||
}
|
||||
|
||||
SDIFileEntry* fileEntry = findPtrResource(resource);
|
||||
if (!fileEntry) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!fileEntry->isCompressed()) {
|
||||
return getResSize(resource);
|
||||
}
|
||||
|
||||
resourceSize = getExpandSize(fileEntry);
|
||||
if (resourceSize) {
|
||||
return resourceSize;
|
||||
}
|
||||
|
||||
// The dst pointer to JKRDvdToMainRam should be aligned to 32 bytes. This will align arcHeader
|
||||
// to 32 bytes on the stack.
|
||||
char buffer[64];
|
||||
SArcHeader* arcHeader = (SArcHeader*)ALIGN_NEXT((u32)buffer, 0x20);
|
||||
JKRDvdToMainRam(mEntryNum, (u8*)arcHeader, EXPAND_SWITCH_UNKNOWN2, sizeof(*arcHeader), NULL,
|
||||
JKRDvdRipper::ALLOC_DIRECTION_FORWARD,
|
||||
this->field_0x64 + fileEntry->data_offset, NULL, NULL);
|
||||
DCInvalidateRange(arcHeader, sizeof(*arcHeader));
|
||||
|
||||
resourceSize = JKRDecompExpandSize(arcHeader);
|
||||
// ???
|
||||
((JKRDvdArchive*)this)->setExpandSize(fileEntry, resourceSize);
|
||||
|
||||
return resourceSize;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 8039D1B0-8039D1B0 029810 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
|
||||
@@ -4,243 +4,124 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRDvdFile.h"
|
||||
#include "JSystem/JUtility/JUTException.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JUTException {
|
||||
/* 802E21FC */ void panic_f(char const*, int, char const*, ...);
|
||||
};
|
||||
|
||||
struct JSUPtrLink {
|
||||
/* 802DBDFC */ JSUPtrLink(void*);
|
||||
/* 802DBE14 */ ~JSUPtrLink();
|
||||
};
|
||||
|
||||
struct JSUPtrList {
|
||||
/* 802DBEAC */ ~JSUPtrList();
|
||||
/* 802DBF14 */ void initiate();
|
||||
/* 802DBF4C */ void append(JSUPtrLink*);
|
||||
/* 802DC15C */ void remove(JSUPtrLink*);
|
||||
};
|
||||
|
||||
template <typename A0>
|
||||
struct JSUList {};
|
||||
/* JSUList<JKRDvdFile> */
|
||||
struct JSUList__template8 {
|
||||
/* 802D9B44 */ void func_802D9B44(void* _this);
|
||||
};
|
||||
|
||||
struct DVDFileInfo {};
|
||||
|
||||
struct JKRDvdFile {
|
||||
/* 802D96A0 */ JKRDvdFile(s32);
|
||||
/* 802D9584 */ JKRDvdFile();
|
||||
/* 802D95F8 */ JKRDvdFile(char const*);
|
||||
/* 802D9748 */ ~JKRDvdFile();
|
||||
/* 802D97E4 */ void initiate();
|
||||
/* 802D98C4 */ void open(s32);
|
||||
/* 802D9850 */ void open(char const*);
|
||||
/* 802D9938 */ void close();
|
||||
/* 802D99B4 */ void readData(void*, s32, s32);
|
||||
/* 802D9A68 */ s32 writeData(void const*, s32, s32);
|
||||
/* 802D9A70 */ void sync();
|
||||
/* 802D9AC4 */ void doneProcess(s32, DVDFileInfo*);
|
||||
/* 802D9AF8 */ void getFileSize() const;
|
||||
|
||||
static u8 sDvdList[12];
|
||||
};
|
||||
|
||||
struct JKRDisposer {
|
||||
/* 802D147C */ JKRDisposer();
|
||||
/* 802D14E4 */ ~JKRDisposer();
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void __ct__10JKRDvdFileFv();
|
||||
extern "C" void __ct__10JKRDvdFileFPCc();
|
||||
extern "C" void __ct__10JKRDvdFileFl();
|
||||
extern "C" void __dt__10JKRDvdFileFv();
|
||||
extern "C" void initiate__10JKRDvdFileFv();
|
||||
extern "C" void open__10JKRDvdFileFPCc();
|
||||
extern "C" void open__10JKRDvdFileFl();
|
||||
extern "C" void close__10JKRDvdFileFv();
|
||||
extern "C" void readData__10JKRDvdFileFPvll();
|
||||
extern "C" s32 writeData__10JKRDvdFileFPCvll();
|
||||
extern "C" void sync__10JKRDvdFileFv();
|
||||
extern "C" void doneProcess__10JKRDvdFileFlP11DVDFileInfo();
|
||||
extern "C" void getFileSize__10JKRDvdFileCFv();
|
||||
extern "C" void __sinit_JKRDvdFile_cpp();
|
||||
extern "C" void func_802D9B44(void* _this);
|
||||
extern "C" extern char const* const JKRDvdFile__stringBase0;
|
||||
extern "C" u8 sDvdList__10JKRDvdFile[12];
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void __dl__FPv();
|
||||
extern "C" void __ct__11JKRDisposerFv();
|
||||
extern "C" void __dt__11JKRDisposerFv();
|
||||
extern "C" void __ct__10JSUPtrLinkFPv();
|
||||
extern "C" void __dt__10JSUPtrLinkFv();
|
||||
extern "C" void __dt__10JSUPtrListFv();
|
||||
extern "C" void initiate__10JSUPtrListFv();
|
||||
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void panic_f__12JUTExceptionFPCciPCce();
|
||||
extern "C" void OSInitMessageQueue();
|
||||
extern "C" void OSSendMessage();
|
||||
extern "C" void OSReceiveMessage();
|
||||
extern "C" void OSInitMutex();
|
||||
extern "C" void OSLockMutex();
|
||||
extern "C" void OSUnlockMutex();
|
||||
extern "C" void OSGetCurrentThread();
|
||||
extern "C" void DVDFastOpen();
|
||||
extern "C" void DVDOpen();
|
||||
extern "C" void DVDClose();
|
||||
extern "C" void DVDReadAsyncPrio();
|
||||
extern "C" void DVDGetCommandBlockStatus();
|
||||
extern "C" void __register_global_object();
|
||||
extern "C" void _savegpr_27();
|
||||
extern "C" void _savegpr_29();
|
||||
extern "C" void _restgpr_27();
|
||||
extern "C" void _restgpr_29();
|
||||
extern "C" extern void* __vt__7JKRFile[8];
|
||||
#include "global.h"
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CC438-803CC460 029558 0024+04 4/4 0/0 0/0 .data __vt__10JKRDvdFile */
|
||||
SECTION_DATA extern void* __vt__10JKRDvdFile[9 + 1 /* padding */] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__10JKRDvdFileFv,
|
||||
(void*)open__10JKRDvdFileFPCc,
|
||||
(void*)close__10JKRDvdFileFv,
|
||||
(void*)readData__10JKRDvdFileFPvll,
|
||||
(void*)writeData__10JKRDvdFileFPCvll,
|
||||
(void*)getFileSize__10JKRDvdFileCFv,
|
||||
(void*)open__10JKRDvdFileFl,
|
||||
/* padding */
|
||||
NULL,
|
||||
};
|
||||
/* 8043436C-80434378 06108C 000C+00 4/4 0/0 0/0 .bss sDvdList__10JKRDvdFile */
|
||||
JSUList<JKRDvdFile> JKRDvdFile::sDvdList;
|
||||
|
||||
/* 802D9584-802D95F8 2D3EC4 0074+00 0/0 3/3 0/0 .text __ct__10JKRDvdFileFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRDvdFile::JKRDvdFile() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdFile/__ct__10JKRDvdFileFv.s"
|
||||
JKRDvdFile::JKRDvdFile() : JKRFile(), mDvdLink(this) {
|
||||
initiate();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D95F8-802D96A0 2D3F38 00A8+00 0/0 2/2 0/0 .text __ct__10JKRDvdFileFPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRDvdFile::JKRDvdFile(char const* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdFile/__ct__10JKRDvdFileFPCc.s"
|
||||
JKRDvdFile::JKRDvdFile(const char* name) : JKRFile(), mDvdLink(this) {
|
||||
initiate();
|
||||
bool result = open(name);
|
||||
mIsAvailable = result;
|
||||
// weird code. doesn't match without this, maybe remains from assert or something?
|
||||
if (mIsAvailable)
|
||||
return;
|
||||
else
|
||||
return;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D96A0-802D9748 2D3FE0 00A8+00 0/0 3/3 0/0 .text __ct__10JKRDvdFileFl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRDvdFile::JKRDvdFile(s32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdFile/__ct__10JKRDvdFileFl.s"
|
||||
JKRDvdFile::JKRDvdFile(long entryNum) : JKRFile(), mDvdLink(this) {
|
||||
initiate();
|
||||
bool result = open(entryNum);
|
||||
mIsAvailable = result;
|
||||
// weird code. doesn't match without this, maybe remains from assert or something?
|
||||
if (mIsAvailable)
|
||||
return;
|
||||
else
|
||||
return;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D9748-802D97E4 2D4088 009C+00 1/0 5/5 0/0 .text __dt__10JKRDvdFileFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRDvdFile::~JKRDvdFile() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdFile/__dt__10JKRDvdFileFv.s"
|
||||
JKRDvdFile::~JKRDvdFile() {
|
||||
close();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D97E4-802D9850 2D4124 006C+00 3/3 0/0 0/0 .text initiate__10JKRDvdFileFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdFile::initiate() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdFile/initiate__10JKRDvdFileFv.s"
|
||||
void JKRDvdFile::initiate(void) {
|
||||
mDvdFile = this;
|
||||
OSInitMutex(&mMutex1);
|
||||
OSInitMutex(&mMutex2);
|
||||
OSInitMessageQueue(&mMessageQueue2, &mMessage2, 1);
|
||||
OSInitMessageQueue(&mMessageQueue1, &mMessage1, 1);
|
||||
mOSThread = NULL;
|
||||
field_0x50 = 0;
|
||||
field_0x58 = 0;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80434360-8043436C 061080 000C+00 1/1 0/0 0/0 .bss @657 */
|
||||
static u8 lit_657[12];
|
||||
|
||||
/* 8043436C-80434378 06108C 000C+00 4/4 0/0 0/0 .bss sDvdList__10JKRDvdFile */
|
||||
u8 JKRDvdFile::sDvdList[12];
|
||||
|
||||
/* 802D9850-802D98C4 2D4190 0074+00 1/0 1/1 0/0 .text open__10JKRDvdFileFPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdFile::open(char const* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdFile/open__10JKRDvdFileFPCc.s"
|
||||
bool JKRDvdFile::open(const char* param_1) {
|
||||
if (!mIsAvailable) {
|
||||
mIsAvailable = DVDOpen(param_1, &mFileInfo);
|
||||
if (mIsAvailable) {
|
||||
getDvdList().append(&mDvdLink);
|
||||
getStatus();
|
||||
}
|
||||
}
|
||||
return mIsAvailable;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D98C4-802D9938 2D4204 0074+00 1/0 2/2 0/0 .text open__10JKRDvdFileFl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdFile::open(s32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdFile/open__10JKRDvdFileFl.s"
|
||||
bool JKRDvdFile::open(long entryNum) {
|
||||
if (!mIsAvailable) {
|
||||
mIsAvailable = DVDFastOpen(entryNum, &mFileInfo);
|
||||
if (mIsAvailable) {
|
||||
getDvdList().append(&mDvdLink);
|
||||
getStatus();
|
||||
}
|
||||
}
|
||||
return mIsAvailable;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8039D260-8039D260 0298C0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DEAD static char const* const stringBase_8039D260 = "JKRDvdFile.cpp";
|
||||
SECTION_DEAD static char const* const stringBase_8039D26F = "%s";
|
||||
SECTION_DEAD static char const* const stringBase_8039D272 = "cannot close DVD file\n";
|
||||
/* @stringBase0 padding */
|
||||
SECTION_DEAD static char const* const pad_8039D289 = "\0\0\0\0\0\0";
|
||||
#pragma pop
|
||||
|
||||
/* 802D9938-802D99B4 2D4278 007C+00 1/0 0/0 0/0 .text close__10JKRDvdFileFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdFile::close() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdFile/close__10JKRDvdFileFv.s"
|
||||
void JKRDvdFile::close() {
|
||||
if (mIsAvailable) {
|
||||
s32 result = DVDClose(&mFileInfo);
|
||||
if (result != 0) {
|
||||
mIsAvailable = false;
|
||||
getDvdList().remove(&mDvdLink);
|
||||
} else {
|
||||
JUTException::panic_f("JKRDvdFile.cpp", 0xd5, "%s", "cannot close DVD file\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D99B4-802D9A68 2D42F4 00B4+00 1/0 0/0 0/0 .text readData__10JKRDvdFileFPvll */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdFile::readData(void* param_0, s32 param_1, s32 param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdFile/readData__10JKRDvdFileFPvll.s"
|
||||
s32 JKRDvdFile::readData(void* param_1, long length, long param_3) {
|
||||
JUT_ASSERT((length & 0x1f) == 0);
|
||||
|
||||
OSLockMutex(&mMutex1);
|
||||
if (mOSThread) {
|
||||
OSUnlockMutex(&mMutex1);
|
||||
return -1;
|
||||
}
|
||||
|
||||
mOSThread = OSGetCurrentThread();
|
||||
|
||||
s32 result = -1;
|
||||
s32 readAsyncResult =
|
||||
DVDReadAsyncPrio(&mFileInfo, param_1, length, param_3, JKRDvdFile::doneProcess, 2);
|
||||
if (readAsyncResult) {
|
||||
result = sync();
|
||||
}
|
||||
|
||||
mOSThread = NULL;
|
||||
OSUnlockMutex(&mMutex1);
|
||||
|
||||
return result;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D9A68-802D9A70 2D43A8 0008+00 1/0 0/0 0/0 .text writeData__10JKRDvdFileFPCvll */
|
||||
s32 JKRDvdFile::writeData(void const* param_0, s32 param_1, s32 param_2) {
|
||||
@@ -248,58 +129,25 @@ s32 JKRDvdFile::writeData(void const* param_0, s32 param_1, s32 param_2) {
|
||||
}
|
||||
|
||||
/* 802D9A70-802D9AC4 2D43B0 0054+00 1/1 0/0 0/0 .text sync__10JKRDvdFileFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdFile::sync() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdFile/sync__10JKRDvdFileFv.s"
|
||||
s32 JKRDvdFile::sync(void) {
|
||||
OSMessage message;
|
||||
OSLockMutex(&mMutex1);
|
||||
OSReceiveMessage(&mMessageQueue2, &message, 1);
|
||||
mOSThread = NULL;
|
||||
OSUnlockMutex(&mMutex1);
|
||||
return (int)message;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D9AC4-802D9AF8 2D4404 0034+00 1/1 0/0 0/0 .text doneProcess__10JKRDvdFileFlP11DVDFileInfo */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdFile::doneProcess(s32 param_0, DVDFileInfo* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdFile/doneProcess__10JKRDvdFileFlP11DVDFileInfo.s"
|
||||
void JKRDvdFile::doneProcess(long id, DVDFileInfo* fileInfo) {
|
||||
// fileInfo->field_0x3c looks like some kind of user pointer?
|
||||
JKRDvdFile* dvdFile = *(JKRDvdFile**)((u8*)fileInfo + 0x3c);
|
||||
OSSendMessage(&dvdFile->mMessageQueue2, (OSMessage)id, OS_MESSAGE_NON_BLOCKING);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D9AF8-802D9B00 2D4438 0008+00 1/0 0/0 0/0 .text getFileSize__10JKRDvdFileCFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdFile::getFileSize() const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdFile/getFileSize__10JKRDvdFileCFv.s"
|
||||
s32 JKRDvdFile::getFileSize(void) const {
|
||||
return mFileInfo.length;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D9B00-802D9B44 2D4440 0044+00 0/0 1/0 0/0 .text __sinit_JKRDvdFile_cpp */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void __sinit_JKRDvdFile_cpp() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdFile/__sinit_JKRDvdFile_cpp.s"
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
REGISTER_CTORS(0x802D9B00, __sinit_JKRDvdFile_cpp);
|
||||
#pragma pop
|
||||
|
||||
/* 802D9B44-802D9B98 2D4484 0054+00 1/1 0/0 0/0 .text __dt__21JSUList<10JKRDvdFile>Fv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
extern "C" asm void func_802D9B44(void* _this) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdFile/func_802D9B44.s"
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 8039D260-8039D260 0298C0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
|
||||
@@ -7,63 +7,6 @@
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JUTException {
|
||||
/* 802E21FC */ void panic_f(char const*, int, char const*, ...);
|
||||
};
|
||||
|
||||
struct JSUPtrList {
|
||||
/* 802DBEAC */ ~JSUPtrList();
|
||||
/* 802DBF14 */ void initiate();
|
||||
};
|
||||
|
||||
template <typename A0>
|
||||
struct JSUList {};
|
||||
/* JSUList<JKRDMCommand> */
|
||||
struct JSUList__template9 {
|
||||
/* 802DA820 */ void func_802DA820(void* _this);
|
||||
};
|
||||
|
||||
struct JKRHeap {
|
||||
/* 802CE4D4 */ void alloc(u32, int);
|
||||
/* 802CE474 */ void alloc(u32, int, JKRHeap*);
|
||||
/* 802CE500 */ void free(void*, JKRHeap*);
|
||||
|
||||
static u8 sSystemHeap[4];
|
||||
};
|
||||
|
||||
struct JKRExpandSwitch {};
|
||||
|
||||
struct JKRDvdFile {
|
||||
/* 802D9584 */ JKRDvdFile();
|
||||
/* 802D9748 */ ~JKRDvdFile();
|
||||
/* 802D9850 */ void open(char const*);
|
||||
/* 802D98C4 */ void open(s32);
|
||||
};
|
||||
|
||||
struct JKRDvdRipper {
|
||||
struct EAllocDirection {};
|
||||
|
||||
/* 802D9D10 */ void loadToMainRAM(JKRDvdFile*, u8*, JKRExpandSwitch, u32, JKRHeap*,
|
||||
JKRDvdRipper::EAllocDirection, u32, int*, u32*);
|
||||
/* 802D9C54 */ void loadToMainRAM(s32, u8*, JKRExpandSwitch, u32, JKRHeap*,
|
||||
JKRDvdRipper::EAllocDirection, u32, int*, u32*);
|
||||
/* 802D9B98 */ void loadToMainRAM(char const*, u8*, JKRExpandSwitch, u32, JKRHeap*,
|
||||
JKRDvdRipper::EAllocDirection, u32, int*, u32*);
|
||||
/* 802DA7D4 */ u8 isErrorRetry();
|
||||
|
||||
static u8 sDvdAsyncList[12];
|
||||
static u32 sSZSBufferSize;
|
||||
};
|
||||
|
||||
struct JKRDecomp {
|
||||
/* 802DB988 */ void orderSync(u8*, u8*, u32, u32);
|
||||
/* 802DBCF8 */ void checkCompressed(u8*);
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
@@ -105,12 +48,6 @@ extern "C" void initiate__10JSUPtrListFv();
|
||||
extern "C" void panic_f__12JUTExceptionFPCciPCce();
|
||||
extern "C" void DCInvalidateRange();
|
||||
extern "C" void DCStoreRangeNoSync();
|
||||
extern "C" void OSDisableInterrupts();
|
||||
extern "C" void OSRestoreInterrupts();
|
||||
extern "C" void OSInitMutex();
|
||||
extern "C" void OSLockMutex();
|
||||
extern "C" void OSUnlockMutex();
|
||||
extern "C" void DVDReadPrio();
|
||||
extern "C" void VIWaitForRetrace();
|
||||
extern "C" void __register_global_object();
|
||||
extern "C" void _savegpr_18();
|
||||
@@ -135,10 +72,10 @@ extern "C" u8 sSystemHeap__7JKRHeap[4];
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdRipper::loadToMainRAM(char const* param_0, u8* param_1, JKRExpandSwitch param_2,
|
||||
u32 param_3, JKRHeap* param_4,
|
||||
JKRDvdRipper::EAllocDirection param_5, u32 param_6,
|
||||
int* param_7, u32* param_8) {
|
||||
asm void* JKRDvdRipper::loadToMainRAM(char const* param_0, u8* param_1, JKRExpandSwitch param_2,
|
||||
u32 param_3, JKRHeap* param_4,
|
||||
JKRDvdRipper::EAllocDirection param_5, u32 param_6,
|
||||
int* param_7, u32* param_8) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdRipper/func_802D9B98.s"
|
||||
}
|
||||
@@ -150,9 +87,10 @@ asm void JKRDvdRipper::loadToMainRAM(char const* param_0, u8* param_1, JKRExpand
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdRipper::loadToMainRAM(s32 param_0, u8* param_1, JKRExpandSwitch param_2, u32 param_3,
|
||||
JKRHeap* param_4, JKRDvdRipper::EAllocDirection param_5,
|
||||
u32 param_6, int* param_7, u32* param_8) {
|
||||
asm void* JKRDvdRipper::loadToMainRAM(s32 param_0, u8* param_1, JKRExpandSwitch param_2,
|
||||
u32 param_3, JKRHeap* param_4,
|
||||
JKRDvdRipper::EAllocDirection param_5, u32 param_6,
|
||||
int* param_7, u32* param_8) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdRipper/func_802D9C54.s"
|
||||
}
|
||||
@@ -179,10 +117,10 @@ SECTION_SDATA static u32 data_804508C8 = 0x01000000;
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdRipper::loadToMainRAM(JKRDvdFile* param_0, u8* param_1, JKRExpandSwitch param_2,
|
||||
u32 param_3, JKRHeap* param_4,
|
||||
JKRDvdRipper::EAllocDirection param_5, u32 param_6,
|
||||
int* param_7, u32* param_8) {
|
||||
asm void* JKRDvdRipper::loadToMainRAM(JKRDvdFile* param_0, u8* param_1, JKRExpandSwitch param_2,
|
||||
u32 param_3, JKRHeap* param_4,
|
||||
JKRDvdRipper::EAllocDirection param_5, u32 param_6,
|
||||
int* param_7, u32* param_8) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdRipper/func_802D9D10.s"
|
||||
}
|
||||
@@ -272,7 +210,7 @@ static asm void decompSZS_subroutine(u8* param_0, u8* param_1) {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
static asm void firstSrcData() {
|
||||
static asm u8* firstSrcData() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRDvdRipper/firstSrcData__Fv.s"
|
||||
}
|
||||
|
||||
@@ -4,86 +4,10 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRExpHeap.h"
|
||||
#include "JSystem/JUtility/JUTException.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JUTException {
|
||||
/* 802E21FC */ void panic_f(char const*, int, char const*, ...);
|
||||
};
|
||||
|
||||
struct JKRHeap {
|
||||
struct TState {};
|
||||
|
||||
/* 802CE138 */ JKRHeap(void*, u32, JKRHeap*, bool);
|
||||
/* 802CE264 */ ~JKRHeap();
|
||||
/* 802CE378 */ void initArena(char**, u32*, int);
|
||||
/* 802CE474 */ void alloc(u32, int, JKRHeap*);
|
||||
/* 802CE500 */ void free(void*, JKRHeap*);
|
||||
/* 802CE574 */ void callAllDisposer();
|
||||
/* 802CE784 */ void getTotalFreeSize();
|
||||
/* 802CE7DC */ void getMaxAllocatableSize(int);
|
||||
/* 802CE894 */ void find(void*) const;
|
||||
/* 802CEAC0 */ void dispose();
|
||||
/* 802CEA78 */ void dispose(void*, u32);
|
||||
/* 802CEDA0 */ void state_dump(JKRHeap::TState const&) const;
|
||||
|
||||
static u8 sCurrentHeap[4];
|
||||
static u8 sRootHeap[4];
|
||||
static u8 mErrorHandler[4];
|
||||
};
|
||||
|
||||
struct JKRExpHeap {
|
||||
struct CMemBlock {
|
||||
/* 802D0810 */ void initiate(JKRExpHeap::CMemBlock*, JKRExpHeap::CMemBlock*, u32, u8, u8);
|
||||
/* 802D0830 */ void allocFore(u32, u8, u8, u8, u8);
|
||||
/* 802D0874 */ void allocBack(u32, u8, u8, u8, u8);
|
||||
/* 802D08CC */ void free(JKRExpHeap*);
|
||||
/* 802D091C */ void getHeapBlock(void*);
|
||||
};
|
||||
|
||||
/* 802CEDB4 */ void createRoot(int, bool);
|
||||
/* 802CEF00 */ void create(void*, u32, JKRHeap*, bool);
|
||||
/* 802CEE2C */ void create(u32, JKRHeap*, bool);
|
||||
/* 802CEFAC */ void do_destroy();
|
||||
/* 802CF030 */ JKRExpHeap(void*, u32, JKRHeap*, bool);
|
||||
/* 802CF0C0 */ ~JKRExpHeap();
|
||||
/* 802CF128 */ void do_alloc(u32, int);
|
||||
/* 802CF490 */ void allocFromHead(u32);
|
||||
/* 802CF234 */ void allocFromHead(u32, int);
|
||||
/* 802CF6D4 */ void allocFromTail(u32);
|
||||
/* 802CF574 */ void allocFromTail(u32, int);
|
||||
/* 802CF7AC */ void do_free(void*);
|
||||
/* 802CF820 */ void do_freeAll();
|
||||
/* 802CF89C */ void do_freeTail();
|
||||
/* 802CF924 */ void do_fillFreeArea();
|
||||
/* 802CF928 */ void do_changeGroupID(u8);
|
||||
/* 802CF978 */ void do_resize(void*, u32);
|
||||
/* 802CFB24 */ void do_getSize(void*);
|
||||
/* 802CFBA4 */ void do_getFreeSize();
|
||||
/* 802CFC10 */ void do_getMaxFreeBlock();
|
||||
/* 802CFC84 */ void do_getTotalFreeSize();
|
||||
/* 802CFCE8 */ void getUsedSize(u8) const;
|
||||
/* 802CFD64 */ void getTotalUsedSize() const;
|
||||
/* 802CFDCC */ void appendUsedList(JKRExpHeap::CMemBlock*);
|
||||
/* 802CFE68 */ void setFreeBlock(JKRExpHeap::CMemBlock*, JKRExpHeap::CMemBlock*,
|
||||
JKRExpHeap::CMemBlock*);
|
||||
/* 802CFEB4 */ void removeFreeBlock(JKRExpHeap::CMemBlock*);
|
||||
/* 802CFEE8 */ void removeUsedBlock(JKRExpHeap::CMemBlock*);
|
||||
/* 802CFF1C */ void recycleFreeBlock(JKRExpHeap::CMemBlock*);
|
||||
/* 802D00B4 */ void joinTwoBlocks(JKRExpHeap::CMemBlock*);
|
||||
/* 802D0190 */ void check();
|
||||
/* 802D03B8 */ void dump();
|
||||
/* 802D05CC */ void dump_sort();
|
||||
/* 802D0938 */ void state_register(JKRHeap::TState*, u32) const;
|
||||
/* 802D09E0 */ void state_compare(JKRHeap::TState const&, JKRHeap::TState const&) const;
|
||||
/* 802D0A10 */ void getHeapType();
|
||||
/* 802D0A1C */ void do_getCurrentGroupId();
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
@@ -155,8 +79,6 @@ extern "C" void JUTReportConsole_f();
|
||||
extern "C" void JUTReportConsole();
|
||||
extern "C" void JUTWarningConsole_f();
|
||||
extern "C" void JUTWarningConsole();
|
||||
extern "C" void OSLockMutex();
|
||||
extern "C" void OSUnlockMutex();
|
||||
extern "C" void _savegpr_25();
|
||||
extern "C" void _savegpr_27();
|
||||
extern "C" void _savegpr_28();
|
||||
@@ -276,7 +198,7 @@ SECTION_DEAD static char const* const stringBase_8039CAF0 = ":::cannot alloc mem
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRExpHeap::do_alloc(u32 param_0, int param_1) {
|
||||
asm void* JKRExpHeap::do_alloc(u32 param_0, int param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRExpHeap/do_alloc__10JKRExpHeapFUli.s"
|
||||
}
|
||||
@@ -378,7 +300,7 @@ void JKRExpHeap::do_fillFreeArea() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRExpHeap::do_changeGroupID(u8 param_0) {
|
||||
asm u8 JKRExpHeap::do_changeGroupID(u8 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRExpHeap/do_changeGroupID__10JKRExpHeapFUc.s"
|
||||
}
|
||||
@@ -388,7 +310,7 @@ asm void JKRExpHeap::do_changeGroupID(u8 param_0) {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRExpHeap::do_resize(void* param_0, u32 param_1) {
|
||||
asm s32 JKRExpHeap::do_resize(void* param_0, u32 param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRExpHeap/do_resize__10JKRExpHeapFPvUl.s"
|
||||
}
|
||||
@@ -398,7 +320,7 @@ asm void JKRExpHeap::do_resize(void* param_0, u32 param_1) {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRExpHeap::do_getSize(void* param_0) {
|
||||
asm s32 JKRExpHeap::do_getSize(void* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRExpHeap/do_getSize__10JKRExpHeapFPv.s"
|
||||
}
|
||||
@@ -408,7 +330,7 @@ asm void JKRExpHeap::do_getSize(void* param_0) {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRExpHeap::do_getFreeSize() {
|
||||
asm s32 JKRExpHeap::do_getFreeSize() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRExpHeap/do_getFreeSize__10JKRExpHeapFv.s"
|
||||
}
|
||||
@@ -419,7 +341,7 @@ asm void JKRExpHeap::do_getFreeSize() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRExpHeap::do_getMaxFreeBlock() {
|
||||
asm void* JKRExpHeap::do_getMaxFreeBlock() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRExpHeap/do_getMaxFreeBlock__10JKRExpHeapFv.s"
|
||||
}
|
||||
@@ -430,7 +352,7 @@ asm void JKRExpHeap::do_getMaxFreeBlock() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRExpHeap::do_getTotalFreeSize() {
|
||||
asm s32 JKRExpHeap::do_getTotalFreeSize() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRExpHeap/do_getTotalFreeSize__10JKRExpHeapFv.s"
|
||||
}
|
||||
@@ -440,7 +362,7 @@ asm void JKRExpHeap::do_getTotalFreeSize() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRExpHeap::getUsedSize(u8 param_0) const {
|
||||
asm s32 JKRExpHeap::getUsedSize(u8 param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRExpHeap/getUsedSize__10JKRExpHeapCFUc.s"
|
||||
}
|
||||
@@ -451,7 +373,7 @@ asm void JKRExpHeap::getUsedSize(u8 param_0) const {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRExpHeap::getTotalUsedSize() const {
|
||||
asm s32 JKRExpHeap::getTotalUsedSize() const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRExpHeap/getTotalUsedSize__10JKRExpHeapCFv.s"
|
||||
}
|
||||
@@ -565,7 +487,7 @@ SECTION_DEAD static char const* const stringBase_8039CC67 =
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRExpHeap::check() {
|
||||
asm bool JKRExpHeap::check() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRExpHeap/check__10JKRExpHeapFv.s"
|
||||
}
|
||||
@@ -606,7 +528,7 @@ SECTION_SDATA2 static f64 lit_1123 = 4503599627370496.0 /* cast u32 to float */;
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRExpHeap::dump() {
|
||||
asm bool JKRExpHeap::dump() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRExpHeap/dump__10JKRExpHeapFv.s"
|
||||
}
|
||||
@@ -616,7 +538,7 @@ asm void JKRExpHeap::dump() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRExpHeap::dump_sort() {
|
||||
asm bool JKRExpHeap::dump_sort() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRExpHeap/dump_sort__10JKRExpHeapFv.s"
|
||||
}
|
||||
@@ -696,7 +618,7 @@ asm void JKRExpHeap::state_register(JKRHeap::TState* param_0, u32 param_1) const
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRExpHeap::state_compare(JKRHeap::TState const& param_0,
|
||||
asm bool JKRExpHeap::state_compare(JKRHeap::TState const& param_0,
|
||||
JKRHeap::TState const& param_1) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRExpHeap/state_compare__10JKRExpHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState.s"
|
||||
@@ -707,7 +629,7 @@ asm void JKRExpHeap::state_compare(JKRHeap::TState const& param_0,
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRExpHeap::getHeapType() {
|
||||
asm u32 JKRExpHeap::getHeapType() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRExpHeap/getHeapType__10JKRExpHeapFv.s"
|
||||
}
|
||||
@@ -717,7 +639,7 @@ asm void JKRExpHeap::getHeapType() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRExpHeap::do_getCurrentGroupId() {
|
||||
asm u8 JKRExpHeap::do_getCurrentGroupId() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRExpHeap/do_getCurrentGroupId__10JKRExpHeapFv.s"
|
||||
}
|
||||
|
||||
@@ -6,39 +6,19 @@
|
||||
#include "JSystem/JKernel/JKRFile.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JKRFile {
|
||||
/* 802D9518 */ void read(void*, s32, s32);
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void read__7JKRFileFPvll();
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void VIWaitForRetrace();
|
||||
extern "C" void _savegpr_28();
|
||||
extern "C" void _restgpr_28();
|
||||
#include "dolphin/vi/vi.h"
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* 802D9518-802D9584 2D3E58 006C+00 0/0 2/2 0/0 .text read__7JKRFileFPvll */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFile::read(void* param_0, s32 param_1, s32 param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFile/read__7JKRFileFPvll.s"
|
||||
s32 JKRFile::read(void* data, s32 size, long offset) {
|
||||
while (true) {
|
||||
s32 result = readData(data, size, offset);
|
||||
if (size != result)
|
||||
VIWaitForRetrace();
|
||||
else
|
||||
return result;
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
@@ -4,87 +4,12 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRFileCache.h"
|
||||
#include "JSystem/JKernel/JKRDvdFile.h"
|
||||
#include "JSystem/JKernel/JKRFileFinder.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JSUPtrLink {
|
||||
/* 802DBDFC */ JSUPtrLink(void*);
|
||||
/* 802DBE14 */ ~JSUPtrLink();
|
||||
};
|
||||
|
||||
struct JSUPtrList {
|
||||
/* 802DBEAC */ ~JSUPtrList();
|
||||
/* 802DBF14 */ void initiate();
|
||||
/* 802DBF4C */ void append(JSUPtrLink*);
|
||||
/* 802DBFF0 */ void prepend(JSUPtrLink*);
|
||||
/* 802DC15C */ void remove(JSUPtrLink*);
|
||||
};
|
||||
|
||||
struct JKRHeap {
|
||||
/* 802CE4D4 */ void alloc(u32, int);
|
||||
/* 802CE474 */ void alloc(u32, int, JKRHeap*);
|
||||
/* 802CE500 */ void free(void*, JKRHeap*);
|
||||
/* 802CE548 */ void free(void*);
|
||||
/* 802CE83C */ void findFromRoot(void*);
|
||||
|
||||
static u8 sSystemHeap[4];
|
||||
};
|
||||
|
||||
struct JKRFileLoader {
|
||||
/* 802D40F0 */ JKRFileLoader();
|
||||
/* 802D4148 */ ~JKRFileLoader();
|
||||
/* 802D41D4 */ void unmount();
|
||||
|
||||
static u8 sVolumeList[12];
|
||||
static u8 sCurrentVolume[4 + 4 /* padding */];
|
||||
};
|
||||
|
||||
struct JKRFileCache {
|
||||
struct CCacheBlock {
|
||||
/* 802D566C */ CCacheBlock(u32, u32, void const*);
|
||||
};
|
||||
|
||||
/* 802D49B4 */ void mount(char const*, JKRHeap*, char const*);
|
||||
/* 802D4AB4 */ JKRFileCache(char const*, char const*);
|
||||
/* 802D4C70 */ ~JKRFileCache();
|
||||
/* 802D4D44 */ void becomeCurrent(char const*);
|
||||
/* 802D4DD8 */ void getResource(char const*);
|
||||
/* 802D4EDC */ void getResource(u32, char const*);
|
||||
/* 802D503C */ void readResource(void*, u32, u32, char const*);
|
||||
/* 802D4F64 */ void readResource(void*, u32, char const*);
|
||||
/* 802D50D4 */ void removeResourceAll();
|
||||
/* 802D5164 */ void removeResource(void*);
|
||||
/* 802D51F8 */ void detachResource(void*);
|
||||
/* 802D526C */ void getResSize(void const*) const;
|
||||
/* 802D52A0 */ void countFile(char const*) const;
|
||||
/* 802D531C */ void getFirstFile(char const*) const;
|
||||
/* 802D53B8 */ void findCacheBlock(void const*) const;
|
||||
/* 802D53E4 */ void findCacheBlock(u32) const;
|
||||
/* 802D5410 */ void findFile(char*, char const*) const;
|
||||
/* 802D551C */ void getDvdPathName(char const*) const;
|
||||
/* 802D5624 */ void convStrLower(char*) const;
|
||||
/* 802D56C8 */ void getFsResource(char const*);
|
||||
/* 802D56F4 */ void getNameResource(u32, char const*);
|
||||
/* 802D5720 */ void readFsResource(void*, u32, char const*);
|
||||
/* 802D574C */ void readNameResource(void*, u32, u32, char const*);
|
||||
};
|
||||
|
||||
struct JKRFile {
|
||||
/* 802D9518 */ void read(void*, s32, s32);
|
||||
};
|
||||
|
||||
struct JKRDvdFinder {
|
||||
/* 802D4770 */ JKRDvdFinder(char const*);
|
||||
};
|
||||
|
||||
struct JKRDvdFile {
|
||||
/* 802D95F8 */ JKRDvdFile(char const*);
|
||||
/* 802D9748 */ ~JKRDvdFile();
|
||||
};
|
||||
#include "global.h"
|
||||
#include "msl_c/string.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
@@ -120,7 +45,6 @@ extern "C" extern char const* const JKRFileCache__stringBase0;
|
||||
// External References:
|
||||
//
|
||||
|
||||
SECTION_INIT void memcpy();
|
||||
extern "C" void alloc__7JKRHeapFUliP7JKRHeap();
|
||||
extern "C" void alloc__7JKRHeapFUli();
|
||||
extern "C" void free__7JKRHeapFPvP7JKRHeap();
|
||||
@@ -142,10 +66,6 @@ extern "C" void initiate__10JSUPtrListFv();
|
||||
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void prepend__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void DVDChangeDir();
|
||||
extern "C" void DVDOpenDir();
|
||||
extern "C" void DVDReadDir();
|
||||
extern "C" bool DVDCloseDir();
|
||||
extern "C" void _savegpr_26();
|
||||
extern "C" void _savegpr_27();
|
||||
extern "C" void _savegpr_28();
|
||||
@@ -154,12 +74,6 @@ extern "C" void _restgpr_26();
|
||||
extern "C" void _restgpr_27();
|
||||
extern "C" void _restgpr_28();
|
||||
extern "C" void _restgpr_29();
|
||||
extern "C" void tolower();
|
||||
extern "C" void strrchr();
|
||||
extern "C" void strcmp();
|
||||
extern "C" void strcat();
|
||||
extern "C" void strcpy();
|
||||
extern "C" void strlen();
|
||||
extern "C" u8 sVolumeList__13JKRFileLoader[12];
|
||||
extern "C" u8 sSystemHeap__7JKRHeap[4];
|
||||
extern "C" u8 sCurrentVolume__13JKRFileLoader[4 + 4 /* padding */];
|
||||
@@ -169,124 +83,248 @@ extern "C" u8 sCurrentVolume__13JKRFileLoader[4 + 4 /* padding */];
|
||||
//
|
||||
|
||||
/* 802D49B4-802D4AB4 2CF2F4 0100+00 0/0 2/2 0/0 .text mount__12JKRFileCacheFPCcP7JKRHeapPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::mount(char const* param_0, JKRHeap* param_1, char const* param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/mount__12JKRFileCacheFPCcP7JKRHeapPCc.s"
|
||||
JKRFileCache* JKRFileCache::mount(const char* path, JKRHeap* heap, const char* param_3) {
|
||||
if (!path || *path != '/') {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
u32 pathLength = strlen(path);
|
||||
if (pathLength != 1 && path[pathLength - 1] == '/') {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
JSUList<JKRFileLoader>& volumeList = getVolumeList();
|
||||
JSUListIterator<JKRFileLoader> iterator;
|
||||
for (iterator = volumeList.getFirst(); iterator != volumeList.getEnd(); ++iterator) {
|
||||
if (iterator->getVolumeType() == 'CASH') {
|
||||
JKRFileCache* fileCache = (JKRFileCache*)iterator.getObject();
|
||||
if (fileCache->mRootPath) {
|
||||
if (strcmp(fileCache->mRootPath, path) == 0) {
|
||||
fileCache->mMountCount++;
|
||||
return fileCache;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new (heap, 0) JKRFileCache(path, param_3);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8039D158-8039D158 0297B8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DEAD static char const* const stringBase_8039D158 = "/";
|
||||
SECTION_DEAD static char const* const stringBase_8039D15A = "dvd";
|
||||
/* @stringBase0 padding */
|
||||
SECTION_DEAD static char const* const pad_8039D15E = "\0";
|
||||
#pragma pop
|
||||
|
||||
/* 803CC238-803CC288 029358 004C+04 2/2 0/0 0/0 .data __vt__12JKRFileCache */
|
||||
SECTION_DATA extern void* __vt__12JKRFileCache[19 + 1 /* padding */] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__12JKRFileCacheFv,
|
||||
(void*)unmount__13JKRFileLoaderFv,
|
||||
(void*)becomeCurrent__12JKRFileCacheFPCc,
|
||||
(void*)getResource__12JKRFileCacheFPCc,
|
||||
(void*)getResource__12JKRFileCacheFUlPCc,
|
||||
(void*)readResource__12JKRFileCacheFPvUlPCc,
|
||||
(void*)readResource__12JKRFileCacheFPvUlUlPCc,
|
||||
(void*)removeResourceAll__12JKRFileCacheFv,
|
||||
(void*)removeResource__12JKRFileCacheFPv,
|
||||
(void*)detachResource__12JKRFileCacheFPv,
|
||||
(void*)getResSize__12JKRFileCacheCFPCv,
|
||||
(void*)countFile__12JKRFileCacheCFPCc,
|
||||
(void*)getFirstFile__12JKRFileCacheCFPCc,
|
||||
(void*)getFsResource__12JKRFileCacheFPCc,
|
||||
(void*)getNameResource__12JKRFileCacheFUlPCc,
|
||||
(void*)readFsResource__12JKRFileCacheFPvUlPCc,
|
||||
(void*)readNameResource__12JKRFileCacheFPvUlUlPCc,
|
||||
/* padding */
|
||||
NULL,
|
||||
};
|
||||
// #pragma push
|
||||
// #pragma force_active on
|
||||
// SECTION_DEAD static char const* const stringBase_8039D158 = "/";
|
||||
// SECTION_DEAD static char const* const stringBase_8039D15A = "dvd";
|
||||
// /* @stringBase0 padding */
|
||||
// SECTION_DEAD static char const* const pad_8039D15E = "\0";
|
||||
// #pragma pop
|
||||
|
||||
/* 802D4AB4-802D4C70 2CF3F4 01BC+00 1/1 0/0 0/0 .text __ct__12JKRFileCacheFPCcPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRFileCache::JKRFileCache(char const* param_0, char const* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/__ct__12JKRFileCacheFPCcPCc.s"
|
||||
JKRFileCache::JKRFileCache(const char* path, const char* volume) : mCacheBlockList() {
|
||||
mParentHeap = JKRHeap::findFromRoot(this);
|
||||
mMountCount = 1;
|
||||
mVolumeType = 'CASH';
|
||||
|
||||
u32 pathLength = strlen(path);
|
||||
mRootPath = (char*)JKRAllocFromHeap(mParentHeap, pathLength + 1, 1);
|
||||
mCurrentPath = (char*)JKRAllocFromSysHeap(pathLength + 2, 1);
|
||||
strcpy(mRootPath, path);
|
||||
strcpy(mCurrentPath, path);
|
||||
|
||||
if (path[1] != '\0') {
|
||||
convStrLower(mRootPath);
|
||||
convStrLower(mCurrentPath);
|
||||
strcat(mCurrentPath, "/");
|
||||
|
||||
const char* volumePath = volume;
|
||||
if (!volume) {
|
||||
volumePath = strrchr(mRootPath, '/');
|
||||
volumePath++;
|
||||
}
|
||||
|
||||
u32 volumeLength = strlen(volumePath) + 1;
|
||||
mVolumePath = (char*)JKRAllocFromSysHeap(volumeLength, 0);
|
||||
strcpy(mVolumePath, volumePath);
|
||||
convStrLower(mVolumePath);
|
||||
mVolumeName = mVolumePath;
|
||||
} else {
|
||||
const char* volumePath = volume;
|
||||
if (!volume) {
|
||||
volumePath = "dvd";
|
||||
}
|
||||
|
||||
u32 volumeLength = strlen(volumePath) + 1;
|
||||
mVolumePath = (char*)JKRAllocFromSysHeap(volumeLength, 0);
|
||||
strcpy(mVolumePath, volumePath);
|
||||
convStrLower(mVolumePath);
|
||||
mVolumeName = mVolumePath;
|
||||
}
|
||||
|
||||
getVolumeList().prepend(&mFileLoaderLink);
|
||||
mIsMounted = true;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D4C70-802D4D44 2CF5B0 00D4+00 1/0 0/0 0/0 .text __dt__12JKRFileCacheFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRFileCache::~JKRFileCache() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/__dt__12JKRFileCacheFv.s"
|
||||
JKRFileCache::~JKRFileCache() {
|
||||
removeResourceAll();
|
||||
if (mRootPath)
|
||||
JKRFreeToHeap(mParentHeap, mRootPath);
|
||||
if (mCurrentPath)
|
||||
JKRFreeToSysHeap(mCurrentPath);
|
||||
if (mVolumePath)
|
||||
JKRFreeToSysHeap(mVolumePath);
|
||||
|
||||
getVolumeList().remove(&mFileLoaderLink);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D4D44-802D4DD8 2CF684 0094+00 1/0 0/0 0/0 .text becomeCurrent__12JKRFileCacheFPCc
|
||||
*/
|
||||
#ifdef NONMATCHING
|
||||
bool JKRFileCache::becomeCurrent(const char* path) {
|
||||
char* name = getDvdPathName(path);
|
||||
BOOL result = DVDChangeDir(name);
|
||||
bool didChangeDir = (result != 0);
|
||||
if (didChangeDir) {
|
||||
setCurrentVolume(this);
|
||||
JKRFreeToSysHeap(mCurrentPath);
|
||||
|
||||
mCurrentPath = name;
|
||||
if (mCurrentPath[1]) {
|
||||
strcat(mCurrentPath, "/");
|
||||
}
|
||||
} else {
|
||||
JKRFreeToSysHeap(name);
|
||||
}
|
||||
|
||||
return didChangeDir;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::becomeCurrent(char const* param_0) {
|
||||
asm bool JKRFileCache::becomeCurrent(char const* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/becomeCurrent__12JKRFileCacheFPCc.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802D4DD8-802D4EDC 2CF718 0104+00 1/0 0/0 0/0 .text getResource__12JKRFileCacheFPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::getResource(char const* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/getResource__12JKRFileCacheFPCc.s"
|
||||
void* JKRFileCache::getResource(const char* path) {
|
||||
ASSERT(isMounted());
|
||||
|
||||
void* buffer = NULL;
|
||||
char* name = getDvdPathName(path);
|
||||
JKRDvdFile dvdFile(name);
|
||||
if (dvdFile.isAvailable()) {
|
||||
CCacheBlock* cacheBlock = findCacheBlock(dvdFile.getFileID());
|
||||
if (!cacheBlock) {
|
||||
// dvdFile.getFileSize() not inlined
|
||||
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);
|
||||
mCacheBlockList.append(&cacheBlock->mCacheBlockLink);
|
||||
}
|
||||
} else {
|
||||
cacheBlock->mReferenceCount++;
|
||||
buffer = cacheBlock->mMemoryPtr;
|
||||
}
|
||||
}
|
||||
|
||||
JKRFreeToSysHeap(name);
|
||||
return buffer;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D4EDC-802D4F64 2CF81C 0088+00 1/0 0/0 0/0 .text getResource__12JKRFileCacheFUlPCc
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::getResource(u32 param_0, char const* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/getResource__12JKRFileCacheFUlPCc.s"
|
||||
void* JKRFileCache::getResource(u32, const char* path) {
|
||||
ASSERT(isMounted());
|
||||
|
||||
char finalPath[256];
|
||||
u32 rootLength = strlen(mRootPath);
|
||||
char* filePath = finalPath + rootLength;
|
||||
strcpy(finalPath, mRootPath);
|
||||
|
||||
bool found = findFile(finalPath, path);
|
||||
if (!found)
|
||||
return NULL;
|
||||
|
||||
return getResource(filePath);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D4F64-802D503C 2CF8A4 00D8+00 1/0 0/0 0/0 .text readResource__12JKRFileCacheFPvUlPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::readResource(void* param_0, u32 param_1, char const* param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/readResource__12JKRFileCacheFPvUlPCc.s"
|
||||
u32 JKRFileCache::readResource(void* dst, u32 dstLength, const char* path) {
|
||||
ASSERT(isMounted());
|
||||
|
||||
char* name = getDvdPathName(path);
|
||||
JKRDvdFile dvdFile(name);
|
||||
|
||||
u32 resourceSize = 0;
|
||||
|
||||
// !@bug: (maybe?) Infinite Loop: Because dvdFile.isAvailable() is never updated in the loop-body
|
||||
// will would never exit the loop.
|
||||
loop:
|
||||
if (dvdFile.isAvailable()) {
|
||||
// dvdFile.getFileSize() not inlined
|
||||
u32 fileSize = dvdFile.getFileInfo().length;
|
||||
resourceSize = ALIGN_NEXT(fileSize, 0x20);
|
||||
dstLength = ALIGN_PREV(dstLength, 0x20);
|
||||
if (resourceSize > dstLength) {
|
||||
resourceSize = dstLength;
|
||||
}
|
||||
|
||||
CCacheBlock* cacheBlock = findCacheBlock(dvdFile.getFileID());
|
||||
if (!cacheBlock) {
|
||||
dvdFile.read(dst, resourceSize, 0);
|
||||
} else {
|
||||
memcpy(dst, cacheBlock->mMemoryPtr, resourceSize);
|
||||
}
|
||||
goto loop;
|
||||
}
|
||||
|
||||
JKRFreeToSysHeap(name);
|
||||
return resourceSize;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D503C-802D50D4 2CF97C 0098+00 1/0 0/0 0/0 .text readResource__12JKRFileCacheFPvUlUlPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::readResource(void* param_0, u32 param_1, u32 param_2, char const* param_3) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/readResource__12JKRFileCacheFPvUlUlPCc.s"
|
||||
u32 JKRFileCache::readResource(void* dst, u32 dstLength, u32, const char* path) {
|
||||
ASSERT(isMounted());
|
||||
|
||||
char finalPath[256];
|
||||
u32 rootLength = strlen(mRootPath);
|
||||
char* filePath = finalPath + rootLength;
|
||||
strcpy(finalPath, mRootPath);
|
||||
|
||||
bool found = findFile(finalPath, path);
|
||||
if (!found)
|
||||
return NULL;
|
||||
|
||||
return readResource(dst, dstLength, filePath);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D50D4-802D5164 2CFA14 0090+00 1/0 0/0 0/0 .text removeResourceAll__12JKRFileCacheFv
|
||||
*/
|
||||
#ifdef NONMATCHING
|
||||
void JKRFileCache::removeResourceAll(void) {
|
||||
ASSERT(isMounted());
|
||||
|
||||
JSUListIterator<CCacheBlock> iterator;
|
||||
iterator = mCacheBlockList.getFirst();
|
||||
while (iterator != mCacheBlockList.getEnd()) {
|
||||
JKRFreeToHeap(mParentHeap, iterator->mMemoryPtr);
|
||||
mCacheBlockList.remove(&iterator->mLink);
|
||||
JSUListIterator<CCacheBlock> next = iterator++;
|
||||
CCacheBlock* cacheBlock = next.getObject();
|
||||
delete cacheBlock;
|
||||
}
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -295,165 +333,214 @@ asm void JKRFileCache::removeResourceAll() {
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/removeResourceAll__12JKRFileCacheFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802D5164-802D51F8 2CFAA4 0094+00 1/0 0/0 0/0 .text removeResource__12JKRFileCacheFPv
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::removeResource(void* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/removeResource__12JKRFileCacheFPv.s"
|
||||
bool JKRFileCache::removeResource(void* resource) {
|
||||
ASSERT(isMounted());
|
||||
|
||||
CCacheBlock* cacheBlock = findCacheBlock(resource);
|
||||
if (!cacheBlock)
|
||||
return false;
|
||||
|
||||
u32 referenceCount = cacheBlock->mReferenceCount - 1;
|
||||
cacheBlock->mReferenceCount = referenceCount;
|
||||
if (referenceCount == 0) {
|
||||
JKRFreeToHeap(mParentHeap, resource);
|
||||
mCacheBlockList.remove(&cacheBlock->mCacheBlockLink);
|
||||
delete cacheBlock;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D51F8-802D526C 2CFB38 0074+00 1/0 0/0 0/0 .text detachResource__12JKRFileCacheFPv
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::detachResource(void* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/detachResource__12JKRFileCacheFPv.s"
|
||||
bool JKRFileCache::detachResource(void* resource) {
|
||||
ASSERT(isMounted());
|
||||
|
||||
CCacheBlock* cacheBlock = findCacheBlock(resource);
|
||||
if (!cacheBlock)
|
||||
return false;
|
||||
|
||||
mCacheBlockList.remove(&cacheBlock->mCacheBlockLink);
|
||||
delete cacheBlock;
|
||||
return true;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D526C-802D52A0 2CFBAC 0034+00 1/0 0/0 0/0 .text getResSize__12JKRFileCacheCFPCv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::getResSize(void const* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/getResSize__12JKRFileCacheCFPCv.s"
|
||||
u32 JKRFileCache::getResSize(const void* resource) const {
|
||||
ASSERT(isMounted());
|
||||
|
||||
CCacheBlock* cacheBlock = findCacheBlock(resource);
|
||||
if (cacheBlock == NULL) {
|
||||
return -1;
|
||||
} else {
|
||||
return cacheBlock->mFileSize;
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D52A0-802D531C 2CFBE0 007C+00 1/0 0/0 0/0 .text countFile__12JKRFileCacheCFPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::countFile(char const* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/countFile__12JKRFileCacheCFPCc.s"
|
||||
u32 JKRFileCache::countFile(const char* path) const {
|
||||
ASSERT(isMounted());
|
||||
|
||||
DVDDirectory dir;
|
||||
DVDDirectoryEntry dirEntry;
|
||||
|
||||
u32 count = 0;
|
||||
char* name = getDvdPathName(path);
|
||||
BOOL result = DVDOpenDir(name, &dir);
|
||||
if (result != 0) {
|
||||
while (result = DVDReadDir(&dir, &dirEntry), result != FALSE) {
|
||||
count = count + 1;
|
||||
}
|
||||
|
||||
DVDCloseDir(&dir);
|
||||
}
|
||||
|
||||
JKRFreeToSysHeap(name);
|
||||
return count;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D531C-802D53B8 2CFC5C 009C+00 1/0 0/0 0/0 .text getFirstFile__12JKRFileCacheCFPCc
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::getFirstFile(char const* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/getFirstFile__12JKRFileCacheCFPCc.s"
|
||||
JKRFileFinder* JKRFileCache::getFirstFile(const char* path) const {
|
||||
char* name = getDvdPathName(path);
|
||||
JKRHeap* systemHeap = JKRHeap::getSystemHeap();
|
||||
JKRDvdFinder* finder = new (systemHeap, 0) JKRDvdFinder(name);
|
||||
JKRFreeToSysHeap(name);
|
||||
|
||||
if (finder->isAvailable() != true) {
|
||||
delete finder;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return finder;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D53B8-802D53E4 2CFCF8 002C+00 3/3 0/0 0/0 .text findCacheBlock__12JKRFileCacheCFPCv
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::findCacheBlock(void const* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/findCacheBlock__12JKRFileCacheCFPCv.s"
|
||||
JKRFileCache::CCacheBlock* JKRFileCache::findCacheBlock(const void* resource) const {
|
||||
JSUListIterator<CCacheBlock> iterator;
|
||||
for (iterator = mCacheBlockList.getFirst(); iterator != mCacheBlockList.getEnd(); ++iterator) {
|
||||
if (iterator->mMemoryPtr == resource) {
|
||||
return iterator.getObject();
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D53E4-802D5410 2CFD24 002C+00 2/2 0/0 0/0 .text findCacheBlock__12JKRFileCacheCFUl
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::findCacheBlock(u32 param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/findCacheBlock__12JKRFileCacheCFUl.s"
|
||||
JKRFileCache::CCacheBlock* JKRFileCache::findCacheBlock(u32 fileID) const {
|
||||
JSUListIterator<CCacheBlock> iterator;
|
||||
for (iterator = mCacheBlockList.getFirst(); iterator != mCacheBlockList.getEnd(); ++iterator) {
|
||||
if (iterator->mFileId == fileID) {
|
||||
return iterator.getObject();
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D5410-802D551C 2CFD50 010C+00 2/2 0/0 0/0 .text findFile__12JKRFileCacheCFPcPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::findFile(char* param_0, char const* param_1) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/findFile__12JKRFileCacheCFPcPCc.s"
|
||||
bool JKRFileCache::findFile(char* path, const char* fileName) const {
|
||||
DVDDirectory dir;
|
||||
DVDDirectoryEntry dirEntry;
|
||||
|
||||
bool result = false;
|
||||
u32 pathLength = strlen(path);
|
||||
if (DVDOpenDir(path, &dir)) {
|
||||
while (DVDReadDir(&dir, &dirEntry)) {
|
||||
if (dirEntry.is_directory) {
|
||||
char* endOfPath = path + pathLength;
|
||||
*endOfPath = '/';
|
||||
strcpy(path + pathLength + 1, dirEntry.name);
|
||||
result = findFile(path, fileName);
|
||||
if (result)
|
||||
break;
|
||||
*endOfPath = '\0';
|
||||
} else {
|
||||
result = (strcmp(fileName, dirEntry.name) == 0);
|
||||
if (result) {
|
||||
strcat(path, "/");
|
||||
strcat(path, fileName);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DVDCloseDir(&dir);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D551C-802D5624 2CFE5C 0108+00 5/5 0/0 0/0 .text getDvdPathName__12JKRFileCacheCFPCc
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::getDvdPathName(char const* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/getDvdPathName__12JKRFileCacheCFPCc.s"
|
||||
char* JKRFileCache::getDvdPathName(const char* path) const {
|
||||
char* newPath;
|
||||
if (path[0] == '/') {
|
||||
u32 length = strlen(mRootPath) + strlen(path) + 2;
|
||||
newPath = (char*)JKRAllocFromSysHeap(length, 1);
|
||||
strcpy(newPath, mRootPath);
|
||||
if (path[1]) {
|
||||
if (mRootPath[1] == 0) {
|
||||
strcat(newPath, path + 1);
|
||||
} else {
|
||||
strcat(newPath, path);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
u32 length = strlen(mCurrentPath) + strlen(path) + 2;
|
||||
newPath = (char*)JKRAllocFromSysHeap(length, 1);
|
||||
strcpy(newPath, mCurrentPath);
|
||||
strcat(newPath, path);
|
||||
}
|
||||
|
||||
convStrLower(newPath);
|
||||
return newPath;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D5624-802D566C 2CFF64 0048+00 2/2 0/0 0/0 .text convStrLower__12JKRFileCacheCFPc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::convStrLower(char* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/convStrLower__12JKRFileCacheCFPc.s"
|
||||
void JKRFileCache::convStrLower(char* buffer) const {
|
||||
while (*buffer) {
|
||||
*buffer++ = tolower(*buffer);
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D566C-802D56C8 2CFFAC 005C+00 1/1 0/0 0/0 .text __ct__Q212JKRFileCache11CCacheBlockFUlUlPCv
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRFileCache::CCacheBlock::CCacheBlock(u32 param_0, u32 param_1, void const* param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/__ct__Q212JKRFileCache11CCacheBlockFUlUlPCv.s"
|
||||
JKRFileCache::CCacheBlock::CCacheBlock(u32 fileId, u32 fileSize, const void* resource)
|
||||
: mCacheBlockLink(this) {
|
||||
mReferenceCount = 1;
|
||||
mFileId = fileId;
|
||||
mFileSize = fileSize;
|
||||
mMemoryPtr = (void*)resource; // todo: don't cast away const
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D56C8-802D56F4 2D0008 002C+00 1/0 0/0 0/0 .text getFsResource__12JKRFileCacheFPCc
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::getFsResource(char const* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/getFsResource__12JKRFileCacheFPCc.s"
|
||||
void* JKRFileCache::getFsResource(const char* path) {
|
||||
return getResource(path);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D56F4-802D5720 2D0034 002C+00 1/0 0/0 0/0 .text getNameResource__12JKRFileCacheFUlPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::getNameResource(u32 param_0, char const* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/getNameResource__12JKRFileCacheFUlPCc.s"
|
||||
void* JKRFileCache::getNameResource(u32 type, const char* path) {
|
||||
return getResource(type, path);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D5720-802D574C 2D0060 002C+00 1/0 0/0 0/0 .text readFsResource__12JKRFileCacheFPvUlPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::readFsResource(void* param_0, u32 param_1, char const* param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/readFsResource__12JKRFileCacheFPvUlPCc.s"
|
||||
u32 JKRFileCache::readFsResource(void* dst, u32 dstLength, const char* path) {
|
||||
return readResource(dst, dstLength, path);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D574C-802D5778 2D008C 002C+00 1/0 0/0 0/0 .text readNameResource__12JKRFileCacheFPvUlUlPCc
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileCache::readNameResource(void* param_0, u32 param_1, u32 param_2,
|
||||
char const* param_3) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileCache/readNameResource__12JKRFileCacheFPvUlUlPCc.s"
|
||||
u32 JKRFileCache::readNameResource(void* dst, u32 dstLength, u32 type, const char* path) {
|
||||
return readResource(dst, dstLength, type, path);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 8039D158-8039D158 0297B8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
|
||||
@@ -4,35 +4,10 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRFileFinder.h"
|
||||
#include "JSystem/JKernel/JKRArchive.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JKRFileFinder {
|
||||
/* 802D4910 */ ~JKRFileFinder();
|
||||
};
|
||||
|
||||
struct JKRDvdFinder {
|
||||
/* 802D4770 */ JKRDvdFinder(char const*);
|
||||
/* 802D47F4 */ ~JKRDvdFinder();
|
||||
/* 802D4874 */ void findNextFile();
|
||||
};
|
||||
|
||||
struct JKRArchive {
|
||||
struct SDirEntry {};
|
||||
|
||||
/* 802D5AC0 */ void getDirEntry(JKRArchive::SDirEntry*, u32) const;
|
||||
};
|
||||
|
||||
struct JKRArcFinder {
|
||||
/* 802D4638 */ JKRArcFinder(JKRArchive*, s32, s32);
|
||||
/* 802D46C4 */ void findNextFile();
|
||||
/* 802D4958 */ ~JKRArcFinder();
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
@@ -44,6 +19,8 @@ extern "C" void __dt__12JKRDvdFinderFv();
|
||||
extern "C" void findNextFile__12JKRDvdFinderFv();
|
||||
extern "C" void __dt__13JKRFileFinderFv();
|
||||
extern "C" void __dt__12JKRArcFinderFv();
|
||||
extern "C" void* __vt__12JKRDvdFinder;
|
||||
extern "C" void* __vt__13JKRFileFinder;
|
||||
|
||||
//
|
||||
// External References:
|
||||
@@ -51,70 +28,56 @@ extern "C" void __dt__12JKRArcFinderFv();
|
||||
|
||||
extern "C" void __dl__FPv();
|
||||
extern "C" void getDirEntry__10JKRArchiveCFPQ210JKRArchive9SDirEntryUl();
|
||||
extern "C" void DVDOpenDir();
|
||||
extern "C" void DVDReadDir();
|
||||
extern "C" bool DVDCloseDir();
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CC208-803CC218 029328 0010+00 2/2 0/0 0/0 .data __vt__12JKRDvdFinder */
|
||||
SECTION_DATA extern void* __vt__12JKRDvdFinder[4] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__12JKRDvdFinderFv,
|
||||
(void*)findNextFile__12JKRDvdFinderFv,
|
||||
};
|
||||
|
||||
/* 803CC218-803CC228 029338 0010+00 2/2 0/0 0/0 .data __vt__12JKRArcFinder */
|
||||
SECTION_DATA extern void* __vt__12JKRArcFinder[4] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__12JKRArcFinderFv,
|
||||
(void*)findNextFile__12JKRArcFinderFv,
|
||||
};
|
||||
|
||||
/* 803CC228-803CC238 029348 0010+00 5/5 0/0 0/0 .data __vt__13JKRFileFinder */
|
||||
SECTION_DATA extern void* __vt__13JKRFileFinder[4] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__13JKRFileFinderFv,
|
||||
(void*)NULL,
|
||||
};
|
||||
|
||||
/* 802D4638-802D46C4 2CEF78 008C+00 0/0 1/1 0/0 .text __ct__12JKRArcFinderFP10JKRArchivell */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRArcFinder::JKRArcFinder(JKRArchive* param_0, s32 param_1, s32 param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileFinder/__ct__12JKRArcFinderFP10JKRArchivell.s"
|
||||
JKRArcFinder::JKRArcFinder(JKRArchive* archive, s32 startIndex, s32 numEntries) : JKRFileFinder() {
|
||||
mArchive = archive;
|
||||
mIsAvailable = numEntries > 0;
|
||||
mStartIndex = startIndex;
|
||||
mEndIndex = startIndex + numEntries - 1;
|
||||
mNextIndex = mStartIndex;
|
||||
findNextFile();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D46C4-802D4770 2CF004 00AC+00 1/0 0/0 0/0 .text findNextFile__12JKRArcFinderFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRArcFinder::findNextFile() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileFinder/findNextFile__12JKRArcFinderFv.s"
|
||||
bool JKRArcFinder::findNextFile(void) {
|
||||
JKRArchive::SDirEntry entry;
|
||||
|
||||
if (mIsAvailable) {
|
||||
mIsAvailable = !(mNextIndex > mEndIndex);
|
||||
if (mIsAvailable) {
|
||||
mIsAvailable = mArchive->getDirEntry(&entry, mNextIndex);
|
||||
mEntryName = entry.name;
|
||||
mEntryFileIndex = mNextIndex;
|
||||
mEntryId = entry.other.id;
|
||||
mEntryTypeFlags = entry.other.flags;
|
||||
mIsFileOrDirectory = (mEntryTypeFlags >> 1) & 1;
|
||||
mNextIndex++;
|
||||
}
|
||||
}
|
||||
return mIsAvailable;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D4770-802D47F4 2CF0B0 0084+00 0/0 1/1 0/0 .text __ct__12JKRDvdFinderFPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRDvdFinder::JKRDvdFinder(char const* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileFinder/__ct__12JKRDvdFinderFPCc.s"
|
||||
JKRDvdFinder::JKRDvdFinder(const char* directory) : JKRFileFinder() {
|
||||
mDvdIsOpen = DVDOpenDir(directory, &mDvdDirectory);
|
||||
mIsAvailable = mDvdIsOpen;
|
||||
findNextFile();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D47F4-802D4874 2CF134 0080+00 1/0 0/0 0/0 .text __dt__12JKRDvdFinderFv */
|
||||
// JKRFileFinder::~JKRFileFinder is not inlined
|
||||
#ifdef NONMATCHING
|
||||
JKRDvdFinder::~JKRDvdFinder() {
|
||||
if (mDvdIsOpen) {
|
||||
DVDCloseDir(&mDvdDirectory);
|
||||
}
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -123,33 +86,34 @@ asm JKRDvdFinder::~JKRDvdFinder() {
|
||||
#include "asm/JSystem/JKernel/JKRFileFinder/__dt__12JKRDvdFinderFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802D4874-802D4910 2CF1B4 009C+00 1/0 0/0 0/0 .text findNextFile__12JKRDvdFinderFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRDvdFinder::findNextFile() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileFinder/findNextFile__12JKRDvdFinderFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
bool JKRDvdFinder::findNextFile(void) {
|
||||
if (mIsAvailable) {
|
||||
DVDDirectoryEntry directoryEntry;
|
||||
mIsAvailable = DVDReadDir(&mDvdDirectory, &directoryEntry);
|
||||
|
||||
/* 802D4910-802D4958 2CF250 0048+00 1/0 0/0 0/0 .text __dt__13JKRFileFinderFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRFileFinder::~JKRFileFinder() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileFinder/__dt__13JKRFileFinderFv.s"
|
||||
if (mIsAvailable) {
|
||||
mIsFileOrDirectory = directoryEntry.is_directory != 0;
|
||||
mEntryName = directoryEntry.name;
|
||||
mEntryFileIndex = directoryEntry.entry_number;
|
||||
mEntryId = 0;
|
||||
|
||||
// only matches with enum
|
||||
// TODO: placeholder
|
||||
enum EntryTypeFlags {
|
||||
EntryTypeFlags1 = 1,
|
||||
EntryTypeFlags2 = 2,
|
||||
};
|
||||
mEntryTypeFlags = mIsFileOrDirectory ? EntryTypeFlags2 : EntryTypeFlags1;
|
||||
}
|
||||
}
|
||||
|
||||
return mIsAvailable;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
inline JKRFileFinder::~JKRFileFinder() {}
|
||||
|
||||
/* 802D4958-802D49B4 2CF298 005C+00 1/0 0/0 0/0 .text __dt__12JKRArcFinderFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRArcFinder::~JKRArcFinder() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileFinder/__dt__12JKRArcFinderFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
inline JKRArcFinder::~JKRArcFinder() {}
|
||||
|
||||
@@ -5,48 +5,8 @@
|
||||
|
||||
#include "JSystem/JKernel/JKRFileLoader.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JSUPtrList {
|
||||
/* 802DBEAC */ ~JSUPtrList();
|
||||
/* 802DBF14 */ void initiate();
|
||||
};
|
||||
|
||||
struct JSUPtrLink {
|
||||
/* 802DBDFC */ JSUPtrLink(void*);
|
||||
/* 802DBE14 */ ~JSUPtrLink();
|
||||
};
|
||||
|
||||
template <typename A0>
|
||||
struct JSUList {};
|
||||
/* JSUList<JKRFileLoader> */
|
||||
struct JSUList__template7 {
|
||||
/* 802D45E4 */ void func_802D45E4(void* _this);
|
||||
};
|
||||
|
||||
struct JKRFileLoader {
|
||||
/* 802D40F0 */ JKRFileLoader();
|
||||
/* 802D4148 */ ~JKRFileLoader();
|
||||
/* 802D41D4 */ void unmount();
|
||||
/* 802D4224 */ void getGlbResource(char const*);
|
||||
/* 802D4270 */ void getGlbResource(char const*, JKRFileLoader*);
|
||||
/* 802D4308 */ void removeResource(void*, JKRFileLoader*);
|
||||
/* 802D43A0 */ void detachResource(void*, JKRFileLoader*);
|
||||
/* 802D4438 */ void findVolume(char const**);
|
||||
/* 802D44C4 */ void fetchVolumeName(char*, s32, char const*);
|
||||
|
||||
static u8 sVolumeList[12];
|
||||
static u8 sCurrentVolume[4 + 4 /* padding */];
|
||||
};
|
||||
|
||||
struct JKRDisposer {
|
||||
/* 802D147C */ JKRDisposer();
|
||||
/* 802D14E4 */ ~JKRDisposer();
|
||||
};
|
||||
#include "global.h"
|
||||
#include "msl_c/string.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
@@ -81,8 +41,6 @@ extern "C" void initiate__10JSUPtrListFv();
|
||||
extern "C" void __register_global_object();
|
||||
extern "C" void _savegpr_29();
|
||||
extern "C" void _restgpr_29();
|
||||
extern "C" void strcmp();
|
||||
extern "C" void strcpy();
|
||||
extern "C" extern u8 __lower_map[256];
|
||||
|
||||
//
|
||||
@@ -90,121 +48,124 @@ extern "C" extern u8 __lower_map[256];
|
||||
//
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CC1C8-803CC208 0292E8 003C+04 2/2 0/0 0/0 .data __vt__13JKRFileLoader */
|
||||
SECTION_DATA extern void* __vt__13JKRFileLoader[15 + 1 /* padding */] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__13JKRFileLoaderFv,
|
||||
(void*)unmount__13JKRFileLoaderFv,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
/* padding */
|
||||
NULL,
|
||||
};
|
||||
/* 80451418-80451420 000918 0004+04 2/2 3/3 0/0 .sbss sCurrentVolume__13JKRFileLoader */
|
||||
JKRFileLoader* JKRFileLoader::sCurrentVolume;
|
||||
/* 80434354-80434360 061074 000C+00 5/5 14/14 0/0 .bss sVolumeList__13JKRFileLoader */
|
||||
JSUList<JKRFileLoader> JKRFileLoader::sVolumeList;
|
||||
|
||||
/* 802D40F0-802D4148 2CEA30 0058+00 0/0 2/2 0/0 .text __ct__13JKRFileLoaderFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRFileLoader::JKRFileLoader() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileLoader/__ct__13JKRFileLoaderFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80451418-80451420 000918 0004+04 2/2 3/3 0/0 .sbss sCurrentVolume__13JKRFileLoader */
|
||||
u8 JKRFileLoader::sCurrentVolume[4 + 4 /* padding */];
|
||||
JKRFileLoader::JKRFileLoader(void)
|
||||
: mFileLoaderLink(this), mVolumeName(NULL), mVolumeType(0), mMountCount(0) {}
|
||||
|
||||
/* 802D4148-802D41D4 2CEA88 008C+00 1/0 2/2 0/0 .text __dt__13JKRFileLoaderFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRFileLoader::~JKRFileLoader() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileLoader/__dt__13JKRFileLoaderFv.s"
|
||||
JKRFileLoader::~JKRFileLoader() {
|
||||
if (getCurrentVolume() == this) {
|
||||
setCurrentVolume(NULL);
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D41D4-802D4224 2CEB14 0050+00 1/0 6/0 0/0 .text unmount__13JKRFileLoaderFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileLoader::unmount() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileLoader/unmount__13JKRFileLoaderFv.s"
|
||||
void JKRFileLoader::unmount(void) {
|
||||
s32 count = mMountCount;
|
||||
if (mMountCount != 0) {
|
||||
count--;
|
||||
mMountCount = count;
|
||||
if (count == 0) {
|
||||
delete this;
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D4224-802D4270 2CEB64 004C+00 0/0 2/2 0/0 .text getGlbResource__13JKRFileLoaderFPCc
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileLoader::getGlbResource(char const* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileLoader/getGlbResource__13JKRFileLoaderFPCc.s"
|
||||
void* JKRFileLoader::getGlbResource(const char* name) {
|
||||
const char* name_reference[1];
|
||||
name_reference[0] = name;
|
||||
|
||||
JKRFileLoader* fileLoader = findVolume(name_reference);
|
||||
void* resource;
|
||||
if (fileLoader == NULL) {
|
||||
resource = NULL;
|
||||
} else {
|
||||
resource = fileLoader->getResource(name_reference[0]);
|
||||
}
|
||||
|
||||
return resource;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80434348-80434354 061068 000C+00 1/1 0/0 0/0 .bss @2182 */
|
||||
static u8 lit_2182[12];
|
||||
|
||||
/* 80434354-80434360 061074 000C+00 5/5 14/14 0/0 .bss sVolumeList__13JKRFileLoader */
|
||||
u8 JKRFileLoader::sVolumeList[12];
|
||||
|
||||
/* 802D4270-802D4308 2CEBB0 0098+00 0/0 29/29 1/1 .text
|
||||
* getGlbResource__13JKRFileLoaderFPCcP13JKRFileLoader */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileLoader::getGlbResource(char const* param_0, JKRFileLoader* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileLoader/getGlbResource__13JKRFileLoaderFPCcP13JKRFileLoader.s"
|
||||
void* JKRFileLoader::getGlbResource(const char* name, JKRFileLoader* fileLoader) {
|
||||
void* resource = NULL;
|
||||
if (fileLoader) {
|
||||
return fileLoader->getResource(0, name);
|
||||
}
|
||||
|
||||
JSUList<JKRFileLoader>& volumeList = getVolumeList();
|
||||
JSUListIterator<JKRFileLoader> iterator;
|
||||
for (iterator = volumeList.getFirst(); iterator != volumeList.getEnd(); ++iterator) {
|
||||
resource = iterator->getResource(0, name);
|
||||
if (resource)
|
||||
break;
|
||||
}
|
||||
return resource;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D4308-802D43A0 2CEC48 0098+00 0/0 1/1 0/0 .text
|
||||
* removeResource__13JKRFileLoaderFPvP13JKRFileLoader */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileLoader::removeResource(void* param_0, JKRFileLoader* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileLoader/removeResource__13JKRFileLoaderFPvP13JKRFileLoader.s"
|
||||
bool JKRFileLoader::removeResource(void* resource, JKRFileLoader* fileLoader) {
|
||||
if (fileLoader) {
|
||||
return fileLoader->removeResource(resource);
|
||||
}
|
||||
|
||||
JSUList<JKRFileLoader>& volumeList = getVolumeList();
|
||||
JSUListIterator<JKRFileLoader> iterator;
|
||||
for (iterator = volumeList.getFirst(); iterator != volumeList.getEnd(); ++iterator) {
|
||||
if (iterator->removeResource(resource)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D43A0-802D4438 2CECE0 0098+00 0/0 2/2 0/0 .text
|
||||
* detachResource__13JKRFileLoaderFPvP13JKRFileLoader */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileLoader::detachResource(void* param_0, JKRFileLoader* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileLoader/detachResource__13JKRFileLoaderFPvP13JKRFileLoader.s"
|
||||
bool JKRFileLoader::detachResource(void* resource, JKRFileLoader* fileLoader) {
|
||||
if (fileLoader) {
|
||||
return fileLoader->detachResource(resource);
|
||||
}
|
||||
|
||||
JSUList<JKRFileLoader>& volumeList = getVolumeList();
|
||||
JSUListIterator<JKRFileLoader> iterator;
|
||||
for (iterator = volumeList.getFirst(); iterator != volumeList.getEnd(); ++iterator) {
|
||||
if (iterator->detachResource(resource)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D4438-802D44C4 2CED78 008C+00 1/1 0/0 0/0 .text findVolume__13JKRFileLoaderFPPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileLoader::findVolume(char const** param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileLoader/findVolume__13JKRFileLoaderFPPCc.s"
|
||||
JKRFileLoader* JKRFileLoader::findVolume(const char** volumeName) {
|
||||
if (*volumeName[0] != '/') {
|
||||
return getCurrentVolume();
|
||||
}
|
||||
|
||||
char volumeNameBuffer[0x101];
|
||||
*volumeName = fetchVolumeName(volumeNameBuffer, ARRAY_SIZE(volumeNameBuffer), *volumeName);
|
||||
|
||||
JSUList<JKRFileLoader>& volumeList = getVolumeList();
|
||||
JSUListIterator<JKRFileLoader> iterator;
|
||||
for (iterator = volumeList.getFirst(); iterator != volumeList.getEnd(); ++iterator) {
|
||||
if (strcmp(volumeNameBuffer, iterator->mVolumeName) == 0) {
|
||||
return iterator.getObject();
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8039D150-8039D150 0297B0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
@@ -229,39 +190,53 @@ SECTION_SDATA static u8 rootPath[2 + 6 /* padding */] = {
|
||||
};
|
||||
|
||||
/* 802D44C4-802D45A0 2CEE04 00DC+00 1/1 0/0 0/0 .text fetchVolumeName__13JKRFileLoaderFPclPCc */
|
||||
// matches, but lbl_804508C0 is accessed through r13
|
||||
#ifdef NONMATCHING
|
||||
const char* JKRFileLoader::fetchVolumeName(char* buffer, long bufferSize, const char* path) {
|
||||
// lbl_803D2D18 = MSL_C.PPCEABI.bare.H::__lower_map
|
||||
// lbl_8039D150 = JKernel::@stringBase0 "/"
|
||||
// lbl_804508C0 = JKernel::rootPath$2498 "/"
|
||||
// lbl_803D2D18 = MSL_C.PPCEABI.bare.H::__lower_map
|
||||
|
||||
if (strcmp(path, lbl_8039D150) == 0) {
|
||||
strcpy(buffer, lbl_804508C0);
|
||||
return lbl_804508C0;
|
||||
}
|
||||
|
||||
path++;
|
||||
while (*path != 0 && *path != '/') {
|
||||
if (1 < bufferSize) {
|
||||
u8 lower_char;
|
||||
int ch = (int)*path;
|
||||
if (ch == -1) {
|
||||
lower_char = -1;
|
||||
} else {
|
||||
lower_char = lbl_803D2D18[ch & 0xFF];
|
||||
}
|
||||
|
||||
*buffer = lower_char;
|
||||
buffer++;
|
||||
bufferSize--;
|
||||
}
|
||||
path++;
|
||||
}
|
||||
|
||||
*buffer = '\0';
|
||||
if (*path == '\0') {
|
||||
path = lbl_804508C0;
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRFileLoader::fetchVolumeName(char* param_0, s32 param_1, char const* param_2) {
|
||||
asm const char* JKRFileLoader::fetchVolumeName(char* param_0, s32 param_1, char const* param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileLoader/fetchVolumeName__13JKRFileLoaderFPclPCc.s"
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D45A0-802D45E4 2CEEE0 0044+00 0/0 1/0 0/0 .text __sinit_JKRFileLoader_cpp */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void __sinit_JKRFileLoader_cpp() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileLoader/__sinit_JKRFileLoader_cpp.s"
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
REGISTER_CTORS(0x802D45A0, __sinit_JKRFileLoader_cpp);
|
||||
#pragma pop
|
||||
|
||||
/* 802D45E4-802D4638 2CEF24 0054+00 1/1 0/0 0/0 .text __dt__24JSUList<13JKRFileLoader>Fv
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
extern "C" asm void func_802D45E4(void* _this) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRFileLoader/func_802D45E4.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 8039D150-8039D150 0297B0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
|
||||
+344
-421
@@ -4,87 +4,9 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "JSystem/JUtility/JUTException.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JUTException {
|
||||
/* 802E21FC */ void panic_f(char const*, int, char const*, ...);
|
||||
};
|
||||
|
||||
struct JSUPtrLink {
|
||||
/* 802DBDFC */ JSUPtrLink(void*);
|
||||
/* 802DBE14 */ ~JSUPtrLink();
|
||||
};
|
||||
|
||||
struct JSUPtrList {
|
||||
/* 802DBEAC */ ~JSUPtrList();
|
||||
/* 802DBF14 */ void initiate();
|
||||
/* 802DBF4C */ void append(JSUPtrLink*);
|
||||
/* 802DC15C */ void remove(JSUPtrLink*);
|
||||
};
|
||||
|
||||
struct JKRHeap {
|
||||
struct TState {};
|
||||
|
||||
/* 800065D8 */ bool dump_sort();
|
||||
/* 802CE138 */ JKRHeap(void*, u32, JKRHeap*, bool);
|
||||
/* 802CE264 */ ~JKRHeap();
|
||||
/* 802CE378 */ void initArena(char**, u32*, int);
|
||||
/* 802CE428 */ void becomeSystemHeap();
|
||||
/* 802CE438 */ void becomeCurrentHeap();
|
||||
/* 802CE448 */ void destroy();
|
||||
/* 802CE4D4 */ void alloc(u32, int);
|
||||
/* 802CE474 */ void alloc(u32, int, JKRHeap*);
|
||||
/* 802CE500 */ void free(void*, JKRHeap*);
|
||||
/* 802CE548 */ void free(void*);
|
||||
/* 802CE574 */ void callAllDisposer();
|
||||
/* 802CE5CC */ void freeAll();
|
||||
/* 802CE5F8 */ void freeTail();
|
||||
/* 802CE684 */ void resize(void*, u32);
|
||||
/* 802CE624 */ void resize(void*, u32, JKRHeap*);
|
||||
/* 802CE700 */ void getSize(void*);
|
||||
/* 802CE6B0 */ void getSize(void*, JKRHeap*);
|
||||
/* 802CE72C */ void getFreeSize();
|
||||
/* 802CE758 */ void getMaxFreeBlock();
|
||||
/* 802CE784 */ void getTotalFreeSize();
|
||||
/* 802CE7B0 */ void changeGroupID(u8);
|
||||
/* 802CE7DC */ void getMaxAllocatableSize(int);
|
||||
/* 802CE83C */ void findFromRoot(void*);
|
||||
/* 802CE894 */ void find(void*) const;
|
||||
/* 802CE93C */ void findAllHeap(void*) const;
|
||||
/* 802CE9E4 */ void dispose_subroutine(u32, u32);
|
||||
/* 802CEAA0 */ void dispose(void*, void*);
|
||||
/* 802CEA78 */ void dispose(void*, u32);
|
||||
/* 802CEAC0 */ void dispose();
|
||||
/* 802CEB18 */ void copyMemory(void*, void*, u32);
|
||||
/* 802CEB78 */ void setErrorFlag(bool);
|
||||
/* 802CEB88 */ void setErrorHandler(void (*)(void*, u32, int));
|
||||
/* 802CEBA8 */ void isSubHeap(JKRHeap*) const;
|
||||
/* 802CED84 */ void state_register(JKRHeap::TState*, u32) const;
|
||||
/* 802CED88 */ void state_compare(JKRHeap::TState const&, JKRHeap::TState const&) const;
|
||||
/* 802CEDA0 */ void state_dump(JKRHeap::TState const&) const;
|
||||
/* 802CEDA4 */ bool do_changeGroupID(u8);
|
||||
/* 802CEDAC */ bool do_getCurrentGroupId();
|
||||
|
||||
static u8 sSystemHeap[4];
|
||||
static u8 sCurrentHeap[4];
|
||||
static u8 sRootHeap[4];
|
||||
static u8 mErrorHandler[4];
|
||||
static u8 mCodeStart[4];
|
||||
static u8 mCodeEnd[4];
|
||||
static u8 mUserRamStart[4];
|
||||
static u8 mUserRamEnd[4];
|
||||
static u8 mMemorySize[4];
|
||||
};
|
||||
|
||||
struct JKRDisposer {
|
||||
/* 802D147C */ JKRDisposer();
|
||||
/* 802D14E4 */ ~JKRDisposer();
|
||||
};
|
||||
#include "global.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
@@ -120,7 +42,7 @@ extern "C" void dispose__7JKRHeapFPvUl();
|
||||
extern "C" void dispose__7JKRHeapFPvPv();
|
||||
extern "C" void dispose__7JKRHeapFv();
|
||||
extern "C" void copyMemory__7JKRHeapFPvPvUl();
|
||||
extern "C" static void JKRDefaultMemoryErrorRoutine__FPvUli();
|
||||
extern "C" void JKRDefaultMemoryErrorRoutine__FPvUli();
|
||||
extern "C" void setErrorFlag__7JKRHeapFb();
|
||||
extern "C" void setErrorHandler__7JKRHeapFPFPvUli_v();
|
||||
extern "C" void isSubHeap__7JKRHeapCFP7JKRHeap();
|
||||
@@ -162,12 +84,6 @@ extern "C" void initiate__10JSUPtrListFv();
|
||||
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void panic_f__12JUTExceptionFPCciPCce();
|
||||
extern "C" void OSInitAlloc();
|
||||
extern "C" void OSGetArenaHi();
|
||||
extern "C" void OSGetArenaLo();
|
||||
extern "C" void OSSetArenaHi();
|
||||
extern "C" void OSSetArenaLo();
|
||||
extern "C" void OSInitMutex();
|
||||
extern "C" void _savegpr_26();
|
||||
extern "C" void _savegpr_27();
|
||||
extern "C" void _savegpr_28();
|
||||
@@ -176,67 +92,91 @@ extern "C" void _restgpr_26();
|
||||
extern "C" void _restgpr_27();
|
||||
extern "C" void _restgpr_28();
|
||||
extern "C" void _restgpr_29();
|
||||
extern "C" extern u8 data_804508B0[8];
|
||||
extern "C" extern bool data_804508B0;
|
||||
extern "C" void* __vt__7JKRHeap;
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CBF70-803CBFD0 029090 0060+00 2/2 0/0 0/0 .data __vt__7JKRHeap */
|
||||
SECTION_DATA extern void* __vt__7JKRHeap[24] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__7JKRHeapFv,
|
||||
(void*)callAllDisposer__7JKRHeapFv,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)dump_sort__7JKRHeapFv,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)NULL,
|
||||
(void*)do_changeGroupID__7JKRHeapFUc,
|
||||
(void*)do_getCurrentGroupId__7JKRHeapFv,
|
||||
(void*)state_register__7JKRHeapCFPQ27JKRHeap6TStateUl,
|
||||
(void*)state_compare__7JKRHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState,
|
||||
(void*)state_dump__7JKRHeapCFRCQ27JKRHeap6TState,
|
||||
};
|
||||
|
||||
/* 80451370-80451374 000870 0004+00 3/3 44/44 0/0 .sbss sSystemHeap__7JKRHeap */
|
||||
u8 JKRHeap::sSystemHeap[4];
|
||||
JKRHeap* JKRHeap::sSystemHeap;
|
||||
|
||||
/* 80451374-80451378 000874 0004+00 4/4 23/22 0/0 .sbss sCurrentHeap__7JKRHeap */
|
||||
u8 JKRHeap::sCurrentHeap[4];
|
||||
JKRHeap* JKRHeap::sCurrentHeap;
|
||||
|
||||
/* 80451378-8045137C 000878 0004+00 3/3 10/10 0/0 .sbss sRootHeap__7JKRHeap */
|
||||
u8 JKRHeap::sRootHeap[4];
|
||||
JKRHeap* JKRHeap::sRootHeap;
|
||||
|
||||
/* 8045137C-80451380 00087C 0004+00 2/2 3/3 0/0 .sbss mErrorHandler__7JKRHeap */
|
||||
u8 JKRHeap::mErrorHandler[4];
|
||||
JKRErrorHandler JKRHeap::mErrorHandler;
|
||||
|
||||
/* 80451380-80451384 000880 0004+00 1/1 0/0 0/0 .sbss None */
|
||||
static u8 data_80451380[4];
|
||||
static bool data_80451380;
|
||||
|
||||
/* 802CE138-802CE264 2C8A78 012C+00 0/0 3/3 0/0 .text __ct__7JKRHeapFPvUlP7JKRHeapb */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRHeap::JKRHeap(void* param_0, u32 param_1, JKRHeap* param_2, bool param_3) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/__ct__7JKRHeapFPvUlP7JKRHeapb.s"
|
||||
JKRHeap::JKRHeap(void* data, u32 size, JKRHeap* parent, bool errorFlag)
|
||||
: JKRDisposer(), mChildTree(this), mDisposerList() {
|
||||
OSInitMutex(&mMutex);
|
||||
mSize = size;
|
||||
mStart = (u8*)data;
|
||||
mEnd = (u8*)data + size;
|
||||
|
||||
if (parent == NULL) {
|
||||
becomeSystemHeap();
|
||||
becomeCurrentHeap();
|
||||
} else {
|
||||
parent->mChildTree.appendChild(&mChildTree);
|
||||
|
||||
if (getSystemHeap() == getRootHeap()) {
|
||||
becomeSystemHeap();
|
||||
}
|
||||
if (getCurrentHeap() == getRootHeap()) {
|
||||
becomeCurrentHeap();
|
||||
}
|
||||
}
|
||||
|
||||
mErrorFlag = errorFlag;
|
||||
if ((mErrorFlag == true) && (mErrorHandler == NULL)) {
|
||||
mErrorHandler = JKRDefaultMemoryErrorRoutine;
|
||||
}
|
||||
|
||||
mDebugFill = data_804508B0;
|
||||
mCheckMemoryFilled = data_80451380;
|
||||
mInitFlag = false;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE264-802CE378 2C8BA4 0114+00 1/0 3/3 0/0 .text __dt__7JKRHeapFv */
|
||||
// using the wrong register for storing the results
|
||||
#ifdef NONMATCHING
|
||||
JKRHeap::~JKRHeap() {
|
||||
JSUTree<JKRHeap>* parent = mChildTree.getParent();
|
||||
parent->removeChild(&mChildTree);
|
||||
|
||||
JSUTree<JKRHeap>* nextRootHeap = getRootHeap()->mChildTree.getFirstChild();
|
||||
|
||||
JKRHeap* rootHeap = getRootHeap();
|
||||
JKRHeap* currentHeap = getCurrentHeap();
|
||||
if (currentHeap == this) {
|
||||
if (!nextRootHeap) {
|
||||
currentHeap = rootHeap;
|
||||
} else {
|
||||
currentHeap = nextRootHeap->getObject();
|
||||
}
|
||||
}
|
||||
setCurrentHeap(currentHeap);
|
||||
|
||||
JKRHeap* systemHeap = getSystemHeap();
|
||||
if (systemHeap == this) {
|
||||
if (!nextRootHeap) {
|
||||
systemHeap = rootHeap;
|
||||
} else {
|
||||
systemHeap = nextRootHeap->getObject();
|
||||
}
|
||||
}
|
||||
setSystemHeap(systemHeap);
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -245,102 +185,103 @@ asm JKRHeap::~JKRHeap() {
|
||||
#include "asm/JSystem/JKernel/JKRHeap/__dt__7JKRHeapFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80451384-80451388 000884 0004+00 1/1 1/1 0/0 .sbss mCodeStart__7JKRHeap */
|
||||
u8 JKRHeap::mCodeStart[4];
|
||||
void* JKRHeap::mCodeStart;
|
||||
|
||||
/* 80451388-8045138C 000888 0004+00 1/1 1/1 0/0 .sbss mCodeEnd__7JKRHeap */
|
||||
u8 JKRHeap::mCodeEnd[4];
|
||||
void* JKRHeap::mCodeEnd;
|
||||
|
||||
/* 8045138C-80451390 00088C 0004+00 1/1 1/1 0/0 .sbss mUserRamStart__7JKRHeap */
|
||||
u8 JKRHeap::mUserRamStart[4];
|
||||
void* JKRHeap::mUserRamStart;
|
||||
|
||||
/* 80451390-80451394 000890 0004+00 1/1 1/1 0/0 .sbss mUserRamEnd__7JKRHeap */
|
||||
u8 JKRHeap::mUserRamEnd[4];
|
||||
void* JKRHeap::mUserRamEnd;
|
||||
|
||||
/* 80451394-80451398 000894 0004+00 1/1 2/2 0/0 .sbss mMemorySize__7JKRHeap */
|
||||
u8 JKRHeap::mMemorySize[4];
|
||||
u32 JKRHeap::mMemorySize;
|
||||
|
||||
/* 802CE378-802CE428 2C8CB8 00B0+00 0/0 1/1 0/0 .text initArena__7JKRHeapFPPcPUli */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::initArena(char** param_0, u32* param_1, int param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/initArena__7JKRHeapFPPcPUli.s"
|
||||
bool JKRHeap::initArena(char** memory, u32* size, int param_3) {
|
||||
u32 ram_start;
|
||||
u32 ram_end;
|
||||
u32 ram;
|
||||
|
||||
u32 low = OSGetArenaLo();
|
||||
u32 high = OSGetArenaHi();
|
||||
if (low == high)
|
||||
return false;
|
||||
|
||||
ram = OSInitAlloc(low, high, param_3);
|
||||
ram_start = ALIGN_NEXT(ram, 0x20);
|
||||
ram_end = ALIGN_PREV(high, 0x20);
|
||||
GLOBAL_MEMORY* globalMemory = (GLOBAL_MEMORY*)OSPhysicalToCached(0);
|
||||
mCodeStart = globalMemory;
|
||||
mCodeEnd = (void*)ram_start;
|
||||
mUserRamStart = (void*)ram_start;
|
||||
mUserRamEnd = (void*)ram_end;
|
||||
mMemorySize = globalMemory->memory_size;
|
||||
OSSetArenaLo(ram_end);
|
||||
OSSetArenaHi(ram_end);
|
||||
*memory = (char*)ram_start;
|
||||
*size = ram_end - ram_start;
|
||||
return true;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE428-802CE438 2C8D68 0010+00 1/1 0/0 0/0 .text becomeSystemHeap__7JKRHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::becomeSystemHeap() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/becomeSystemHeap__7JKRHeapFv.s"
|
||||
JKRHeap* JKRHeap::becomeSystemHeap() {
|
||||
JKRHeap* prev = JKRHeap::getSystemHeap();
|
||||
setSystemHeap(this);
|
||||
return prev;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE438-802CE448 2C8D78 0010+00 1/1 22/22 1/1 .text becomeCurrentHeap__7JKRHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::becomeCurrentHeap() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/becomeCurrentHeap__7JKRHeapFv.s"
|
||||
JKRHeap* JKRHeap::becomeCurrentHeap() {
|
||||
JKRHeap* prev = getCurrentHeap();
|
||||
setCurrentHeap(this);
|
||||
return prev;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE448-802CE474 2C8D88 002C+00 0/0 5/5 1/1 .text destroy__7JKRHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::destroy() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/destroy__7JKRHeapFv.s"
|
||||
void JKRHeap::destroy() {
|
||||
do_destroy();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE474-802CE4D4 2C8DB4 0060+00 6/6 23/23 0/0 .text alloc__7JKRHeapFUliP7JKRHeap */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::alloc(u32 param_0, int param_1, JKRHeap* param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/alloc__7JKRHeapFUliP7JKRHeap.s"
|
||||
void* JKRHeap::alloc(u32 size, int alignment, JKRHeap* heap) {
|
||||
if (heap != NULL) {
|
||||
return heap->alloc(size, alignment);
|
||||
}
|
||||
|
||||
if (getCurrentHeap() != NULL) {
|
||||
return getCurrentHeap()->alloc(size, alignment);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE4D4-802CE500 2C8E14 002C+00 1/1 30/30 1/1 .text alloc__7JKRHeapFUli */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::alloc(u32 param_0, int param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/alloc__7JKRHeapFUli.s"
|
||||
void* JKRHeap::alloc(u32 size, int alignment) {
|
||||
return do_alloc(size, alignment);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE500-802CE548 2C8E40 0048+00 2/2 38/38 1/1 .text free__7JKRHeapFPvP7JKRHeap */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::free(void* param_0, JKRHeap* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/free__7JKRHeapFPvP7JKRHeap.s"
|
||||
void JKRHeap::free(void* ptr, JKRHeap* heap) {
|
||||
if (!heap) {
|
||||
heap = findFromRoot(ptr);
|
||||
if (!heap)
|
||||
return;
|
||||
}
|
||||
|
||||
heap->free(ptr);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE548-802CE574 2C8E88 002C+00 1/1 29/29 0/0 .text free__7JKRHeapFPv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::free(void* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/free__7JKRHeapFPv.s"
|
||||
void JKRHeap::free(void* ptr) {
|
||||
do_free(ptr);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE574-802CE5CC 2C8EB4 0058+00 1/0 5/2 0/0 .text callAllDisposer__7JKRHeapFv */
|
||||
#pragma push
|
||||
@@ -353,178 +294,200 @@ asm void JKRHeap::callAllDisposer() {
|
||||
#pragma pop
|
||||
|
||||
/* 802CE5CC-802CE5F8 2C8F0C 002C+00 0/0 12/12 0/0 .text freeAll__7JKRHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::freeAll() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/freeAll__7JKRHeapFv.s"
|
||||
void JKRHeap::freeAll() {
|
||||
do_freeAll();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE5F8-802CE624 2C8F38 002C+00 0/0 1/1 0/0 .text freeTail__7JKRHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::freeTail() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/freeTail__7JKRHeapFv.s"
|
||||
void JKRHeap::freeTail() {
|
||||
do_freeTail();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE624-802CE684 2C8F64 0060+00 0/0 1/1 0/0 .text resize__7JKRHeapFPvUlP7JKRHeap */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::resize(void* param_0, u32 param_1, JKRHeap* param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/resize__7JKRHeapFPvUlP7JKRHeap.s"
|
||||
s32 JKRHeap::resize(void* ptr, u32 size, JKRHeap* heap) {
|
||||
if (!heap) {
|
||||
heap = findFromRoot(ptr);
|
||||
if (!heap)
|
||||
return -1;
|
||||
}
|
||||
|
||||
return heap->resize(ptr, size);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE684-802CE6B0 2C8FC4 002C+00 1/1 1/1 0/0 .text resize__7JKRHeapFPvUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::resize(void* param_0, u32 param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/resize__7JKRHeapFPvUl.s"
|
||||
s32 JKRHeap::resize(void* ptr, u32 size) {
|
||||
return do_resize(ptr, size);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE6B0-802CE700 2C8FF0 0050+00 0/0 4/4 0/0 .text getSize__7JKRHeapFPvP7JKRHeap */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::getSize(void* param_0, JKRHeap* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/getSize__7JKRHeapFPvP7JKRHeap.s"
|
||||
s32 JKRHeap::getSize(void* ptr, JKRHeap* heap) {
|
||||
if (!heap) {
|
||||
heap = findFromRoot(ptr);
|
||||
if (!heap)
|
||||
return -1;
|
||||
}
|
||||
|
||||
return heap->getSize(ptr);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE700-802CE72C 2C9040 002C+00 1/1 1/1 0/0 .text getSize__7JKRHeapFPv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::getSize(void* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/getSize__7JKRHeapFPv.s"
|
||||
s32 JKRHeap::getSize(void* ptr) {
|
||||
return do_getSize(ptr);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE72C-802CE758 2C906C 002C+00 1/1 18/18 0/0 .text getFreeSize__7JKRHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::getFreeSize() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/getFreeSize__7JKRHeapFv.s"
|
||||
s32 JKRHeap::getFreeSize() {
|
||||
return do_getFreeSize();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE758-802CE784 2C9098 002C+00 1/1 0/0 0/0 .text getMaxFreeBlock__7JKRHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::getMaxFreeBlock() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/getMaxFreeBlock__7JKRHeapFv.s"
|
||||
void* JKRHeap::getMaxFreeBlock() {
|
||||
return do_getMaxFreeBlock();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE784-802CE7B0 2C90C4 002C+00 0/0 32/32 0/0 .text getTotalFreeSize__7JKRHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::getTotalFreeSize() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/getTotalFreeSize__7JKRHeapFv.s"
|
||||
s32 JKRHeap::getTotalFreeSize() {
|
||||
return do_getTotalFreeSize();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE7B0-802CE7DC 2C90F0 002C+00 0/0 1/1 0/0 .text changeGroupID__7JKRHeapFUc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::changeGroupID(u8 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/changeGroupID__7JKRHeapFUc.s"
|
||||
u8 JKRHeap::changeGroupID(u8 param_1) {
|
||||
return do_changeGroupID(param_1);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE7DC-802CE83C 2C911C 0060+00 0/0 2/2 0/0 .text getMaxAllocatableSize__7JKRHeapFi
|
||||
*/
|
||||
// "not/nor" instruction in the wrong place
|
||||
#ifdef NONMATCHING
|
||||
s32 JKRHeap::getMaxAllocatableSize(int alignment) {
|
||||
u32 maxFreeBlock = (u32)getMaxFreeBlock();
|
||||
s32 freeSize = getFreeSize();
|
||||
|
||||
u32 mask = alignment - 1U;
|
||||
s32 ptrOffset = mask & (alignment - (maxFreeBlock & 0xf));
|
||||
s32 alignedSize = (freeSize - ptrOffset) & ~(alignment - 1U);
|
||||
return alignedSize;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::getMaxAllocatableSize(int param_0) {
|
||||
asm u32 JKRHeap::getMaxAllocatableSize(int param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/getMaxAllocatableSize__7JKRHeapFi.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802CE83C-802CE894 2C917C 0058+00 3/3 8/8 0/0 .text findFromRoot__7JKRHeapFPv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::findFromRoot(void* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/findFromRoot__7JKRHeapFPv.s"
|
||||
JKRHeap* JKRHeap::findFromRoot(void* ptr) {
|
||||
JKRHeap* rootHeap = getRootHeap();
|
||||
if (rootHeap == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (rootHeap->getStartAddr() <= ptr && ptr < rootHeap->getEndAddr()) {
|
||||
return rootHeap->find(ptr);
|
||||
}
|
||||
|
||||
return rootHeap->findAllHeap(ptr);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE894-802CE93C 2C91D4 00A8+00 1/1 1/1 0/0 .text find__7JKRHeapCFPv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::find(void* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/find__7JKRHeapCFPv.s"
|
||||
JKRHeap* JKRHeap::find(void* ptr) const {
|
||||
if (getStartAddr() <= ptr && ptr < getEndAddr()) {
|
||||
const JSUTree<JKRHeap>& tree = mChildTree;
|
||||
if (tree.getNumChildren() != 0) {
|
||||
JSUTreeIterator<JKRHeap> iterator;
|
||||
for (iterator = tree.getFirstChild(); iterator != tree.getEndChild(); iterator++) {
|
||||
JKRHeap* child = iterator.getObject();
|
||||
JKRHeap* result = child->find(ptr);
|
||||
if (result) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// todo: not sure about this... casting away const for now.
|
||||
return (JKRHeap*)this;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE93C-802CE9E4 2C927C 00A8+00 1/1 0/0 0/0 .text findAllHeap__7JKRHeapCFPv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::findAllHeap(void* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/findAllHeap__7JKRHeapCFPv.s"
|
||||
JKRHeap* JKRHeap::findAllHeap(void* ptr) const {
|
||||
const JSUTree<JKRHeap>& tree = mChildTree;
|
||||
if (tree.getNumChildren() != 0) {
|
||||
JSUTreeIterator<JKRHeap> iterator;
|
||||
for (iterator = tree.getFirstChild(); iterator != tree.getEndChild(); iterator++) {
|
||||
JKRHeap* child = iterator.getObject();
|
||||
JKRHeap* result = child->findAllHeap(ptr);
|
||||
if (result) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (getStartAddr() <= ptr && ptr < getEndAddr()) {
|
||||
// todo: not sure about this... casting away const for now.
|
||||
return (JKRHeap*)this;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CE9E4-802CEA78 2C9324 0094+00 2/2 0/0 0/0 .text dispose_subroutine__7JKRHeapFUlUl
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::dispose_subroutine(u32 param_0, u32 param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/dispose_subroutine__7JKRHeapFUlUl.s"
|
||||
void JKRHeap::dispose_subroutine(u32 begin, u32 end) {
|
||||
JSUListIterator<JKRDisposer> last_iterator;
|
||||
JSUListIterator<JKRDisposer> next_iterator;
|
||||
JSUListIterator<JKRDisposer> iterator;
|
||||
for (iterator = mDisposerList.getFirst(); iterator != mDisposerList.getEnd();
|
||||
iterator = next_iterator) {
|
||||
JKRDisposer* disposer = iterator.getObject();
|
||||
|
||||
if ((void*)begin <= disposer && disposer < (void*)end) {
|
||||
disposer->~JKRDisposer();
|
||||
if (last_iterator == NULL) {
|
||||
next_iterator = mDisposerList.getFirst();
|
||||
} else {
|
||||
next_iterator = last_iterator;
|
||||
next_iterator++;
|
||||
}
|
||||
} else {
|
||||
last_iterator = iterator;
|
||||
next_iterator = iterator;
|
||||
next_iterator++;
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CEA78-802CEAA0 2C93B8 0028+00 0/0 1/1 0/0 .text dispose__7JKRHeapFPvUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::dispose(void* param_0, u32 param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/dispose__7JKRHeapFPvUl.s"
|
||||
bool JKRHeap::dispose(void* ptr, u32 size) {
|
||||
u32 begin = (u32)ptr;
|
||||
u32 end = (u32)ptr + size;
|
||||
dispose_subroutine(begin, end);
|
||||
return false;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CEAA0-802CEAC0 2C93E0 0020+00 0/0 1/1 0/0 .text dispose__7JKRHeapFPvPv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::dispose(void* param_0, void* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/dispose__7JKRHeapFPvPv.s"
|
||||
void JKRHeap::dispose(void* begin, void* end) {
|
||||
dispose_subroutine((u32)begin, (u32)end);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CEAC0-802CEB18 2C9400 0058+00 0/0 3/3 0/0 .text dispose__7JKRHeapFv */
|
||||
// missing stack variable?
|
||||
#ifdef NONMATCHING
|
||||
void JKRHeap::dispose() {
|
||||
const JSUList<JKRDisposer>& list = mDisposerList;
|
||||
JSUListIterator<JKRDisposer> iterator;
|
||||
while (list.getFirst() != list.getEnd()) {
|
||||
iterator = list.getFirst();
|
||||
iterator->~JKRDisposer();
|
||||
}
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -533,180 +496,140 @@ asm void JKRHeap::dispose() {
|
||||
#include "asm/JSystem/JKernel/JKRHeap/dispose__7JKRHeapFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802CEB18-802CEB40 2C9458 0028+00 0/0 4/4 0/0 .text copyMemory__7JKRHeapFPvPvUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::copyMemory(void* param_0, void* param_1, u32 param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/copyMemory__7JKRHeapFPvPvUl.s"
|
||||
}
|
||||
#pragma pop
|
||||
void JKRHeap::copyMemory(void* dst, void* src, u32 size) {
|
||||
u32 count = (size + 3) / 4;
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8039CAD8-8039CAD8 029138 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DEAD static char const* const stringBase_8039CAD8 = "JKRHeap.cpp";
|
||||
SECTION_DEAD static char const* const stringBase_8039CAE4 = "%s";
|
||||
SECTION_DEAD static char const* const stringBase_8039CAE7 = "abort\n";
|
||||
/* @stringBase0 padding */
|
||||
SECTION_DEAD static char const* const pad_8039CAEE = "\0";
|
||||
#pragma pop
|
||||
u32* dst_32 = (u32*)dst;
|
||||
u32* src_32 = (u32*)src;
|
||||
while (count > 0) {
|
||||
*dst_32 = *src_32;
|
||||
dst_32++;
|
||||
src_32++;
|
||||
count--;
|
||||
}
|
||||
}
|
||||
|
||||
/* 802CEB40-802CEB78 2C9480 0038+00 2/2 0/0 0/0 .text JKRDefaultMemoryErrorRoutine__FPvUli */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
static asm void JKRDefaultMemoryErrorRoutine(void* param_0, u32 param_1, int param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/JKRDefaultMemoryErrorRoutine__FPvUli.s"
|
||||
void JKRDefaultMemoryErrorRoutine(void* heap, u32 size, int alignment) {
|
||||
JUTException::panic_f("JKRHeap.cpp", 0x33f, "%s", "abort\n");
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CEB78-802CEB88 2C94B8 0010+00 0/0 2/2 0/0 .text setErrorFlag__7JKRHeapFb */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::setErrorFlag(bool param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/setErrorFlag__7JKRHeapFb.s"
|
||||
bool JKRHeap::setErrorFlag(bool errorFlag) {
|
||||
bool prev = mErrorFlag;
|
||||
mErrorFlag = errorFlag;
|
||||
return prev;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CEB88-802CEBA8 2C94C8 0020+00 0/0 1/1 0/0 .text setErrorHandler__7JKRHeapFPFPvUli_v
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::setErrorHandler(void (*param_0)(void*, u32, int)) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/setErrorHandler__7JKRHeapFPFPvUli_v.s"
|
||||
JKRErrorHandler JKRHeap::setErrorHandler(JKRErrorHandler errorHandler) {
|
||||
JKRErrorHandler prev = mErrorHandler;
|
||||
|
||||
if (!errorHandler) {
|
||||
errorHandler = JKRDefaultMemoryErrorRoutine;
|
||||
}
|
||||
|
||||
mErrorHandler = errorHandler;
|
||||
return prev;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CEBA8-802CEC4C 2C94E8 00A4+00 0/0 1/1 0/0 .text isSubHeap__7JKRHeapCFP7JKRHeap */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::isSubHeap(JKRHeap* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/isSubHeap__7JKRHeapCFP7JKRHeap.s"
|
||||
bool JKRHeap::isSubHeap(JKRHeap* heap) const {
|
||||
if (!heap)
|
||||
return false;
|
||||
|
||||
const JSUTree<JKRHeap>& tree = mChildTree;
|
||||
if (tree.getNumChildren() != 0) {
|
||||
JSUTreeIterator<JKRHeap> iterator;
|
||||
for (iterator = tree.getFirstChild(); iterator != tree.getEndChild(); ++iterator) {
|
||||
JKRHeap* child = iterator.getObject();
|
||||
if (child == heap) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool is_sub_heap = child->isSubHeap(heap);
|
||||
if (is_sub_heap) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CEC4C-802CEC74 2C958C 0028+00 0/0 278/278 377/377 .text __nw__FUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void* operator new(u32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/__nw__FUl.s"
|
||||
void* operator new(u32 size) {
|
||||
return JKRHeap::alloc(size, 4, NULL);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CEC74-802CEC98 2C95B4 0024+00 0/0 15/15 0/0 .text __nw__FUli */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void* operator new(u32 param_0, int param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/__nw__FUli.s"
|
||||
void* operator new(u32 size, int alignment) {
|
||||
return JKRHeap::alloc(size, alignment, NULL);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CEC98-802CECC4 2C95D8 002C+00 0/0 47/47 0/0 .text __nw__FUlP7JKRHeapi */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void* operator new(u32 param_0, JKRHeap* param_1, int param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/__nw__FUlP7JKRHeapi.s"
|
||||
void* operator new(u32 size, JKRHeap* heap, int alignment) {
|
||||
return JKRHeap::alloc(size, alignment, heap);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CECC4-802CECEC 2C9604 0028+00 0/0 52/52 15/15 .text __nwa__FUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void* operator new[](u32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/__nwa__FUl.s"
|
||||
void* operator new[](u32 size) {
|
||||
return JKRHeap::alloc(size, 4, NULL);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CECEC-802CED10 2C962C 0024+00 0/0 29/29 0/0 .text __nwa__FUli */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void* operator new[](u32 param_0, int param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/__nwa__FUli.s"
|
||||
void* operator new[](u32 size, int alignment) {
|
||||
return JKRHeap::alloc(size, alignment, NULL);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CED10-802CED3C 2C9650 002C+00 0/0 25/25 0/0 .text __nwa__FUlP7JKRHeapi */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void* operator new[](u32 param_0, JKRHeap* param_1, int param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/__nwa__FUlP7JKRHeapi.s"
|
||||
void* operator new[](u32 size, JKRHeap* heap, int alignment) {
|
||||
return JKRHeap::alloc(size, alignment, heap);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CED3C-802CED60 2C967C 0024+00 1/1 847/847 4665/4665 .text __dl__FPv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void operator delete(void* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/__dl__FPv.s"
|
||||
void operator delete(void* ptr) {
|
||||
JKRHeap::free(ptr, NULL);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CED60-802CED84 2C96A0 0024+00 0/0 20/20 3/3 .text __dla__FPv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void operator delete[](void* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/__dla__FPv.s"
|
||||
void operator delete[](void* ptr) {
|
||||
JKRHeap::free(ptr, NULL);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CED84-802CED88 2C96C4 0004+00 1/0 1/0 0/0 .text
|
||||
* state_register__7JKRHeapCFPQ27JKRHeap6TStateUl */
|
||||
void JKRHeap::state_register(JKRHeap::TState* param_0, u32 param_1) const {
|
||||
/* empty function */
|
||||
void JKRHeap::state_register(JKRHeap::TState* p, u32 id) const {
|
||||
JUT_ASSERT(p != 0);
|
||||
JUT_ASSERT(p->getHeap() == this);
|
||||
}
|
||||
|
||||
/* 802CED88-802CEDA0 2C96C8 0018+00 1/0 1/0 0/0 .text
|
||||
* state_compare__7JKRHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRHeap::state_compare(JKRHeap::TState const& param_0,
|
||||
JKRHeap::TState const& param_1) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRHeap/state_compare__7JKRHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState.s"
|
||||
bool JKRHeap::state_compare(JKRHeap::TState const& r1, JKRHeap::TState const& r2) const {
|
||||
JUT_ASSERT(r1.getHeap() == r2.getHeap());
|
||||
return r1.getCheckCode() == r2.getCheckCode();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802CEDA0-802CEDA4 2C96E0 0004+00 1/0 3/0 0/0 .text state_dump__7JKRHeapCFRCQ27JKRHeap6TState */
|
||||
void JKRHeap::state_dump(JKRHeap::TState const& param_0) const {
|
||||
/* empty function */
|
||||
void JKRHeap::state_dump(JKRHeap::TState const& p) const {
|
||||
LOGF("check-code : 0x%08x", p.getCheckCode());
|
||||
LOGF("id : 0x%08x", p.getId());
|
||||
LOGF("used size : %u", p.getUsedSize());
|
||||
}
|
||||
|
||||
/* 802CEDA4-802CEDAC 2C96E4 0008+00 1/0 1/0 0/0 .text do_changeGroupID__7JKRHeapFUc */
|
||||
bool JKRHeap::do_changeGroupID(u8 param_0) {
|
||||
return false;
|
||||
u8 JKRHeap::do_changeGroupID(u8 param_0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 802CEDAC-802CEDB4 2C96EC 0008+00 1/0 1/0 0/0 .text do_getCurrentGroupId__7JKRHeapFv */
|
||||
bool JKRHeap::do_getCurrentGroupId() {
|
||||
return false;
|
||||
u8 JKRHeap::do_getCurrentGroupId() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 8039CAD8-8039CAD8 029138 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
|
||||
@@ -4,86 +4,90 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRMemArchive.h"
|
||||
#include "JSystem/JKernel/JKRDvdRipper.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "JSystem/JUtility/JUTException.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "msl_c/string.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JUTException {
|
||||
/* 802E21FC */ void panic_f(char const*, int, char const*, ...);
|
||||
};
|
||||
// struct JUTException {
|
||||
// /* 802E21FC */ void panic_f(char const*, int, char const*, ...);
|
||||
// };
|
||||
|
||||
struct JSUPtrLink {};
|
||||
// struct JSUPtrLink {};
|
||||
|
||||
struct JSUPtrList {
|
||||
/* 802DBFF0 */ void prepend(JSUPtrLink*);
|
||||
/* 802DC15C */ void remove(JSUPtrLink*);
|
||||
};
|
||||
// struct JSUPtrList {
|
||||
// /* 802DBFF0 */ void prepend(JSUPtrLink*);
|
||||
// /* 802DC15C */ void remove(JSUPtrLink*);
|
||||
// };
|
||||
|
||||
struct JKRMemBreakFlag {};
|
||||
// struct JKRMemBreakFlag {};
|
||||
|
||||
struct JKRArchive {
|
||||
struct EMountDirection {};
|
||||
// struct JKRArchive {
|
||||
// struct EMountDirection {};
|
||||
|
||||
struct SDIFileEntry {};
|
||||
// struct SDIFileEntry {};
|
||||
|
||||
struct EMountMode {};
|
||||
// struct EMountMode {};
|
||||
|
||||
/* 802D5A38 */ void becomeCurrent(char const*);
|
||||
/* 802D5C64 */ void getResource(u32, char const*);
|
||||
/* 802D5BE8 */ void getResource(char const*);
|
||||
/* 802D5D8C */ void readResource(void*, u32, u32, char const*);
|
||||
/* 802D5E30 */ void readResource(void*, u32, char const*);
|
||||
/* 802D609C */ void detachResource(void*);
|
||||
/* 802D60D8 */ void getResSize(void const*) const;
|
||||
/* 802D6150 */ void countFile(char const*) const;
|
||||
/* 802D61B0 */ void getFirstFile(char const*) const;
|
||||
/* 802D6294 */ JKRArchive(s32, JKRArchive::EMountMode);
|
||||
/* 802D6334 */ ~JKRArchive();
|
||||
/* 802D6734 */ void findPtrResource(void const*) const;
|
||||
/* 802D693C */ void setExpandSize(JKRArchive::SDIFileEntry*, u32);
|
||||
/* 802D6978 */ void getExpandSize(JKRArchive::SDIFileEntry*) const;
|
||||
};
|
||||
// /* 802D5A38 */ void becomeCurrent(char const*);
|
||||
// /* 802D5C64 */ void getResource(u32, char const*);
|
||||
// /* 802D5BE8 */ void getResource(char const*);
|
||||
// /* 802D5D8C */ void readResource(void*, u32, u32, char const*);
|
||||
// /* 802D5E30 */ void readResource(void*, u32, char const*);
|
||||
// /* 802D609C */ void detachResource(void*);
|
||||
// /* 802D60D8 */ void getResSize(void const*) const;
|
||||
// /* 802D6150 */ void countFile(char const*) const;
|
||||
// /* 802D61B0 */ void getFirstFile(char const*) const;
|
||||
// /* 802D6294 */ JKRArchive(s32, JKRArchive::EMountMode);
|
||||
// /* 802D6334 */ ~JKRArchive();
|
||||
// /* 802D6734 */ void findPtrResource(void const*) const;
|
||||
// /* 802D693C */ void setExpandSize(JKRArchive::SDIFileEntry*, u32);
|
||||
// /* 802D6978 */ void getExpandSize(JKRArchive::SDIFileEntry*) const;
|
||||
// };
|
||||
|
||||
struct JKRMemArchive {
|
||||
/* 802D6A6C */ JKRMemArchive(void*, u32, JKRMemBreakFlag);
|
||||
/* 802D69B8 */ JKRMemArchive(s32, JKRArchive::EMountDirection);
|
||||
/* 802D6B24 */ ~JKRMemArchive();
|
||||
/* 802D6BCC */ void open(s32, JKRArchive::EMountDirection);
|
||||
/* 802D6D30 */ void open(void*, u32, JKRMemBreakFlag);
|
||||
/* 802D6E10 */ void fetchResource(void*, u32, JKRArchive::SDIFileEntry*, u32*);
|
||||
/* 802D6DDC */ void fetchResource(JKRArchive::SDIFileEntry*, u32*);
|
||||
/* 802D6ED0 */ void removeResourceAll();
|
||||
/* 802D6F20 */ void removeResource(void*);
|
||||
/* 802D6F5C */ void fetchResource_subroutine(u8*, u32, u8*, u32, int);
|
||||
/* 802D7030 */ void getExpandedResSize(void const*) const;
|
||||
};
|
||||
// struct JKRMemArchive {
|
||||
// /* 802D6A6C */ JKRMemArchive(void*, u32, JKRMemBreakFlag);
|
||||
// /* 802D69B8 */ JKRMemArchive(s32, JKRArchive::EMountDirection);
|
||||
// /* 802D6B24 */ ~JKRMemArchive();
|
||||
// /* 802D6BCC */ void open(s32, JKRArchive::EMountDirection);
|
||||
// /* 802D6D30 */ void open(void*, u32, JKRMemBreakFlag);
|
||||
// /* 802D6E10 */ void fetchResource(void*, u32, JKRArchive::SDIFileEntry*, u32*);
|
||||
// /* 802D6DDC */ void fetchResource(JKRArchive::SDIFileEntry*, u32*);
|
||||
// /* 802D6ED0 */ void removeResourceAll();
|
||||
// /* 802D6F20 */ void removeResource(void*);
|
||||
// /* 802D6F5C */ void fetchResource_subroutine(u8*, u32, u8*, u32, int);
|
||||
// /* 802D7030 */ void getExpandedResSize(void const*) const;
|
||||
// };
|
||||
|
||||
struct JKRHeap {
|
||||
/* 802CE500 */ void free(void*, JKRHeap*);
|
||||
/* 802CE83C */ void findFromRoot(void*);
|
||||
};
|
||||
// struct JKRHeap {
|
||||
// /* 802CE500 */ void free(void*, JKRHeap*);
|
||||
// /* 802CE83C */ void findFromRoot(void*);
|
||||
// };
|
||||
|
||||
struct JKRFileLoader {
|
||||
/* 802D41D4 */ void unmount();
|
||||
// struct JKRFileLoader {
|
||||
// /* 802D41D4 */ void unmount();
|
||||
|
||||
static u8 sVolumeList[12];
|
||||
};
|
||||
// static u8 sVolumeList[12];
|
||||
// };
|
||||
|
||||
struct JKRExpandSwitch {};
|
||||
// struct JKRExpandSwitch {};
|
||||
|
||||
struct JKRDvdRipper {
|
||||
struct EAllocDirection {};
|
||||
// struct JKRDvdRipper {
|
||||
// struct EAllocDirection {};
|
||||
|
||||
/* 802D9C54 */ void loadToMainRAM(s32, u8*, JKRExpandSwitch, u32, JKRHeap*,
|
||||
JKRDvdRipper::EAllocDirection, u32, int*, u32*);
|
||||
};
|
||||
// /* 802D9C54 */ void loadToMainRAM(s32, u8*, JKRExpandSwitch, u32, JKRHeap*,
|
||||
// JKRDvdRipper::EAllocDirection, u32, int*, u32*);
|
||||
// };
|
||||
|
||||
struct JKRDecomp {
|
||||
/* 802DB988 */ void orderSync(u8*, u8*, u32, u32);
|
||||
};
|
||||
// struct JKRDecomp {
|
||||
// /* 802DB988 */ void orderSync(u8*, u8*, u32, u32);
|
||||
// };
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
@@ -106,7 +110,6 @@ extern "C" extern char const* const JKRMemArchive__stringBase0;
|
||||
// External References:
|
||||
//
|
||||
|
||||
SECTION_INIT void memcpy();
|
||||
extern "C" void free__7JKRHeapFPvP7JKRHeap();
|
||||
extern "C" void findFromRoot__7JKRHeapFPv();
|
||||
extern "C" void __dl__FPv();
|
||||
@@ -142,160 +145,270 @@ extern "C" u8 sVolumeList__13JKRFileLoader[12];
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CC2D8-803CC328 0293F8 0050+00 3/3 0/0 0/0 .data __vt__13JKRMemArchive */
|
||||
SECTION_DATA extern void* __vt__13JKRMemArchive[20] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__13JKRMemArchiveFv,
|
||||
(void*)unmount__13JKRFileLoaderFv,
|
||||
(void*)becomeCurrent__10JKRArchiveFPCc,
|
||||
(void*)getResource__10JKRArchiveFPCc,
|
||||
(void*)getResource__10JKRArchiveFUlPCc,
|
||||
(void*)readResource__10JKRArchiveFPvUlPCc,
|
||||
(void*)readResource__10JKRArchiveFPvUlUlPCc,
|
||||
(void*)removeResourceAll__13JKRMemArchiveFv,
|
||||
(void*)removeResource__13JKRMemArchiveFPv,
|
||||
(void*)detachResource__10JKRArchiveFPv,
|
||||
(void*)getResSize__10JKRArchiveCFPCv,
|
||||
(void*)countFile__10JKRArchiveCFPCc,
|
||||
(void*)getFirstFile__10JKRArchiveCFPCc,
|
||||
(void*)getExpandedResSize__13JKRMemArchiveCFPCv,
|
||||
(void*)fetchResource__13JKRMemArchiveFPQ210JKRArchive12SDIFileEntryPUl,
|
||||
(void*)fetchResource__13JKRMemArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl,
|
||||
(void*)setExpandSize__10JKRArchiveFPQ210JKRArchive12SDIFileEntryUl,
|
||||
(void*)getExpandSize__10JKRArchiveCFPQ210JKRArchive12SDIFileEntry,
|
||||
};
|
||||
|
||||
/* 802D69B8-802D6A6C 2D12F8 00B4+00 0/0 2/2 0/0 .text
|
||||
* __ct__13JKRMemArchiveFlQ210JKRArchive15EMountDirection */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRMemArchive::JKRMemArchive(s32 param_0, JKRArchive::EMountDirection param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRMemArchive/__ct__13JKRMemArchiveFlQ210JKRArchive15EMountDirection.s"
|
||||
JKRMemArchive::JKRMemArchive(long entryNum, JKRArchive::EMountDirection mountDirection)
|
||||
: JKRArchive(entryNum, MOUNT_MEM) {
|
||||
mIsMounted = false;
|
||||
mMountDirection = mountDirection;
|
||||
if (!open(entryNum, mMountDirection)) {
|
||||
return;
|
||||
}
|
||||
|
||||
mVolumeType = 'RARC';
|
||||
mVolumeName = mStringTable + (u32)mNodes->name;
|
||||
|
||||
getVolumeList().prepend(&mFileLoaderLink);
|
||||
mIsMounted = true;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D6A6C-802D6B24 2D13AC 00B8+00 0/0 2/2 0/0 .text __ct__13JKRMemArchiveFPvUl15JKRMemBreakFlag
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRMemArchive::JKRMemArchive(void* param_0, u32 param_1, JKRMemBreakFlag param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRMemArchive/__ct__13JKRMemArchiveFPvUl15JKRMemBreakFlag.s"
|
||||
JKRMemArchive::JKRMemArchive(void* buffer, u32 bufferSize, JKRMemBreakFlag param_3)
|
||||
: JKRArchive((s32)buffer, MOUNT_MEM) {
|
||||
mIsMounted = false;
|
||||
if (!open(buffer, bufferSize, param_3)) {
|
||||
return;
|
||||
}
|
||||
|
||||
mVolumeType = 'RARC';
|
||||
mVolumeName = mStringTable + (u32)mNodes->name;
|
||||
|
||||
getVolumeList().prepend(&mFileLoaderLink);
|
||||
mIsMounted = true;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D6B24-802D6BCC 2D1464 00A8+00 1/0 0/0 0/0 .text __dt__13JKRMemArchiveFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRMemArchive::~JKRMemArchive() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRMemArchive/__dt__13JKRMemArchiveFv.s"
|
||||
JKRMemArchive::~JKRMemArchive() {
|
||||
if (mIsMounted == true) {
|
||||
if (mIsOpen) {
|
||||
if (mArcHeader)
|
||||
JKRFreeToHeap(mHeap, mArcHeader);
|
||||
}
|
||||
|
||||
getVolumeList().remove(&mFileLoaderLink);
|
||||
mIsMounted = false;
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D6BCC-802D6D30 2D150C 0164+00 1/1 0/0 0/0 .text
|
||||
* open__13JKRMemArchiveFlQ210JKRArchive15EMountDirection */
|
||||
// full match, except:
|
||||
// mArchiveData = (u8*)(mArcHeader->file_data_offset + mArcHeader->header_length + (u32)mArcHeader);
|
||||
// where the addition is swapped.
|
||||
#ifdef NONMATCHING
|
||||
bool JKRMemArchive::open(long entryNum, JKRArchive::EMountDirection mountDirection) {
|
||||
mArcHeader = NULL;
|
||||
mArcInfoBlock = NULL;
|
||||
mArchiveData = NULL;
|
||||
mNodes = NULL;
|
||||
mFiles = NULL;
|
||||
mStringTable = NULL;
|
||||
mIsOpen = false;
|
||||
mMountDirection = mountDirection;
|
||||
|
||||
if (mMountDirection == JKRArchive::HEAD) {
|
||||
u32 loadedSize;
|
||||
mArcHeader = (SArcHeader*)JKRDvdRipper::loadToMainRAM(
|
||||
entryNum, NULL, EXPAND_SWITCH_UNKNOWN1, 0, mHeap, JKRDvdRipper::FORWARD, 0,
|
||||
&mCompression, &loadedSize);
|
||||
if (mArcHeader) {
|
||||
DCInvalidateRange(mArcHeader, loadedSize);
|
||||
}
|
||||
} else {
|
||||
u32 loadedSize;
|
||||
mArcHeader = (SArcHeader*)JKRDvdRipper::loadToMainRAM(
|
||||
entryNum, NULL, EXPAND_SWITCH_UNKNOWN1, 0, mHeap, JKRDvdRipper::BACKWARD, 0,
|
||||
&mCompression, &loadedSize);
|
||||
if (mArcHeader) {
|
||||
DCInvalidateRange(mArcHeader, loadedSize);
|
||||
}
|
||||
}
|
||||
|
||||
if (!mArcHeader) {
|
||||
mMountMode = UNKNOWN_MOUNT_MODE;
|
||||
} else {
|
||||
ASSERT(mArcHeader->signature == 'RARC');
|
||||
mArcInfoBlock = (SArcDataInfo*)((u8*)mArcHeader + mArcHeader->header_length);
|
||||
mNodes = (SDirEntry*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset);
|
||||
mFiles = (SDIFileEntry*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset);
|
||||
mStringTable = (char*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset);
|
||||
|
||||
mArchiveData =
|
||||
(u8*)(mArcHeader->file_data_offset + mArcHeader->header_length + (u32)mArcHeader);
|
||||
mIsOpen = true;
|
||||
}
|
||||
|
||||
return mMountMode != UNKNOWN_MOUNT_MODE;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRMemArchive::open(s32 param_0, JKRArchive::EMountDirection param_1) {
|
||||
asm bool JKRMemArchive::open(s32 param_0, JKRArchive::EMountDirection param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRMemArchive/open__13JKRMemArchiveFlQ210JKRArchive15EMountDirection.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802D6D30-802D6DDC 2D1670 00AC+00 1/1 0/0 0/0 .text open__13JKRMemArchiveFPvUl15JKRMemBreakFlag
|
||||
*/
|
||||
// full match, except:
|
||||
// mArchiveData = (u8*)(mArcHeader->file_data_offset + mArcHeader->header_length + (u32)mArcHeader);
|
||||
// where the addition is swapped.
|
||||
#ifdef NONMATCHING
|
||||
bool JKRMemArchive::open(void* buffer, u32 bufferSize, JKRMemBreakFlag flag) {
|
||||
mArcHeader = (SArcHeader*)buffer;
|
||||
|
||||
ASSERT(mArcHeader->signature == 'RARC');
|
||||
mArcInfoBlock = (SArcDataInfo*)((u8*)mArcHeader + mArcHeader->header_length);
|
||||
mNodes = (SDirEntry*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset);
|
||||
mFiles = (SDIFileEntry*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset);
|
||||
mStringTable = (char*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset);
|
||||
mArchiveData =
|
||||
(u8*)(mArcHeader->file_data_offset + mArcHeader->header_length + (u32)mArcHeader);
|
||||
mIsOpen = (flag == JKRMEMBREAK_FLAG_UNKNOWN1);
|
||||
mHeap = JKRHeap::findFromRoot(buffer);
|
||||
mCompression = JKRDecomp::NONE;
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRMemArchive::open(void* param_0, u32 param_1, JKRMemBreakFlag param_2) {
|
||||
asm bool JKRMemArchive::open(void* param_0, u32 param_1, JKRMemBreakFlag param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRMemArchive/open__13JKRMemArchiveFPvUl15JKRMemBreakFlag.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802D6DDC-802D6E10 2D171C 0034+00 1/0 0/0 0/0 .text
|
||||
* fetchResource__13JKRMemArchiveFPQ210JKRArchive12SDIFileEntryPUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRMemArchive::fetchResource(JKRArchive::SDIFileEntry* param_0, u32* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRMemArchive/fetchResource__13JKRMemArchiveFPQ210JKRArchive12SDIFileEntryPUl.s"
|
||||
void* JKRMemArchive::fetchResource(SDIFileEntry* fileEntry, u32* resourceSize) {
|
||||
if (!fileEntry->data) {
|
||||
fileEntry->data = mArchiveData + fileEntry->data_offset;
|
||||
}
|
||||
|
||||
if (resourceSize) {
|
||||
*resourceSize = fileEntry->data_size;
|
||||
}
|
||||
|
||||
return fileEntry->data;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D6E10-802D6ED0 2D1750 00C0+00 1/0 0/0 0/0 .text
|
||||
* fetchResource__13JKRMemArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRMemArchive::fetchResource(void* param_0, u32 param_1, JKRArchive::SDIFileEntry* param_2,
|
||||
u32* param_3) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRMemArchive/fetchResource__13JKRMemArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl.s"
|
||||
void* JKRMemArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* fileEntry,
|
||||
u32* resourceSize) {
|
||||
u32 srcLength = fileEntry->data_size;
|
||||
if (srcLength > bufferSize) {
|
||||
srcLength = bufferSize;
|
||||
}
|
||||
|
||||
if (fileEntry->data != NULL) {
|
||||
memcpy(buffer, fileEntry->data, srcLength);
|
||||
} else {
|
||||
JKRCompression compression = JKRConvertAttrToCompressionType(fileEntry->getAttr());
|
||||
void* data = mArchiveData + fileEntry->data_offset;
|
||||
srcLength =
|
||||
fetchResource_subroutine((u8*)data, srcLength, (u8*)buffer, bufferSize, compression);
|
||||
}
|
||||
|
||||
if (resourceSize) {
|
||||
*resourceSize = srcLength;
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D6ED0-802D6F20 2D1810 0050+00 1/0 0/0 0/0 .text removeResourceAll__13JKRMemArchiveFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRMemArchive::removeResourceAll() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRMemArchive/removeResourceAll__13JKRMemArchiveFv.s"
|
||||
void JKRMemArchive::removeResourceAll(void) {
|
||||
ASSERT(isMounted());
|
||||
|
||||
if (mArcInfoBlock == NULL)
|
||||
return;
|
||||
if (mMountMode == MOUNT_MEM)
|
||||
return;
|
||||
|
||||
// !@bug: looping over file entries without incrementing the fileEntry pointer. Thus, only the
|
||||
// first fileEntry will clear/remove the resource data.
|
||||
SDIFileEntry* fileEntry = mFiles;
|
||||
for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) {
|
||||
if (fileEntry->data) {
|
||||
fileEntry->data = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D6F20-802D6F5C 2D1860 003C+00 1/0 0/0 0/0 .text removeResource__13JKRMemArchiveFPv
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRMemArchive::removeResource(void* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRMemArchive/removeResource__13JKRMemArchiveFPv.s"
|
||||
bool JKRMemArchive::removeResource(void* resource) {
|
||||
ASSERT(isMounted());
|
||||
|
||||
SDIFileEntry* fileEntry = findPtrResource(resource);
|
||||
if (!fileEntry)
|
||||
return false;
|
||||
|
||||
fileEntry->data = NULL;
|
||||
return true;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8039D160-8039D160 0297C0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DEAD static char const* const stringBase_8039D160 = "JKRMemArchive.cpp";
|
||||
SECTION_DEAD static char const* const stringBase_8039D172 = "%s";
|
||||
SECTION_DEAD static char const* const stringBase_8039D175 = "??? bad sequence\n";
|
||||
/* @stringBase0 padding */
|
||||
SECTION_DEAD static char const* const pad_8039D187 = "";
|
||||
#pragma pop
|
||||
// #pragma push
|
||||
// #pragma force_active on
|
||||
// SECTION_DEAD static char const* const stringBase_8039D160 = "JKRMemArchive.cpp";
|
||||
// SECTION_DEAD static char const* const stringBase_8039D172 = "%s";
|
||||
// SECTION_DEAD static char const* const stringBase_8039D175 = "??? bad sequence\n";
|
||||
// /* @stringBase0 padding */
|
||||
// SECTION_DEAD static char const* const pad_8039D187 = "";
|
||||
// #pragma pop
|
||||
|
||||
/* 802D6F5C-802D7030 2D189C 00D4+00 1/1 1/1 0/0 .text
|
||||
* fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUli */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRMemArchive::fetchResource_subroutine(u8* param_0, u32 param_1, u8* param_2, u32 param_3,
|
||||
int param_4) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRMemArchive/fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUli.s"
|
||||
u32 JKRMemArchive::fetchResource_subroutine(u8* src, u32 srcLength, u8* dst, u32 dstLength,
|
||||
JKRCompression compression) {
|
||||
switch (compression) {
|
||||
case COMPRESSION_NONE:
|
||||
if (srcLength > dstLength) {
|
||||
srcLength = dstLength;
|
||||
}
|
||||
|
||||
memcpy(dst, src, srcLength);
|
||||
return srcLength;
|
||||
|
||||
case COMPRESSION_YAY0:
|
||||
case COMPRESSION_YAZ0:
|
||||
u32 expendedSize = JKRDecompExpandSize((SArcHeader*)src);
|
||||
srcLength = expendedSize;
|
||||
if (expendedSize > dstLength) {
|
||||
srcLength = dstLength;
|
||||
}
|
||||
|
||||
JKRDecompress(src, dst, srcLength, 0);
|
||||
return srcLength;
|
||||
|
||||
default: {
|
||||
JUTException::panic_f("JKRMemArchive.cpp", 0x2d3, "%s", "??? bad sequence\n");
|
||||
} break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D7030-802D70C0 2D1970 0090+00 1/0 0/0 0/0 .text getExpandedResSize__13JKRMemArchiveCFPCv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRMemArchive::getExpandedResSize(void const* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRMemArchive/getExpandedResSize__13JKRMemArchiveCFPCv.s"
|
||||
u32 JKRMemArchive::getExpandedResSize(const void* resource) const {
|
||||
SDIFileEntry* fileEntry = findPtrResource(resource);
|
||||
if (fileEntry == NULL)
|
||||
return -1;
|
||||
|
||||
if (fileEntry->isCompressed() == false) {
|
||||
return getResSize(resource);
|
||||
} else {
|
||||
return JKRDecompExpandSize((SArcHeader*)resource);
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 8039D160-8039D160 0297C0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
|
||||
@@ -5,59 +5,7 @@
|
||||
|
||||
#include "JSystem/JKernel/JKRSolidHeap.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JKRHeap {
|
||||
struct TState {};
|
||||
|
||||
/* 800065D8 */ bool dump_sort();
|
||||
/* 802CE138 */ JKRHeap(void*, u32, JKRHeap*, bool);
|
||||
/* 802CE264 */ ~JKRHeap();
|
||||
/* 802CE474 */ void alloc(u32, int, JKRHeap*);
|
||||
/* 802CE500 */ void free(void*, JKRHeap*);
|
||||
/* 802CE574 */ void callAllDisposer();
|
||||
/* 802CE684 */ void resize(void*, u32);
|
||||
/* 802CE72C */ void getFreeSize();
|
||||
/* 802CE784 */ void getTotalFreeSize();
|
||||
/* 802CE7DC */ void getMaxAllocatableSize(int);
|
||||
/* 802CEAA0 */ void dispose(void*, void*);
|
||||
/* 802CEAC0 */ void dispose();
|
||||
/* 802CEDA0 */ void state_dump(JKRHeap::TState const&) const;
|
||||
/* 802CEDA4 */ bool do_changeGroupID(u8);
|
||||
/* 802CEDAC */ bool do_getCurrentGroupId();
|
||||
|
||||
static u8 sRootHeap[4];
|
||||
static u8 mErrorHandler[4];
|
||||
};
|
||||
|
||||
struct JKRSolidHeap {
|
||||
/* 802D0A24 */ void create(u32, JKRHeap*, bool);
|
||||
/* 802D0AD0 */ void do_destroy();
|
||||
/* 802D0B30 */ JKRSolidHeap(void*, u32, JKRHeap*, bool);
|
||||
/* 802D0B8C */ ~JKRSolidHeap();
|
||||
/* 802D0BF4 */ void adjustSize();
|
||||
/* 802D0CB0 */ void do_alloc(u32, int);
|
||||
/* 802D0D58 */ void allocFromHead(u32, int);
|
||||
/* 802D0E20 */ void allocFromTail(u32, int);
|
||||
/* 802D0EE4 */ void do_free(void*);
|
||||
/* 802D0F14 */ void do_freeAll();
|
||||
/* 802D0F74 */ void do_freeTail();
|
||||
/* 802D1000 */ void do_fillFreeArea();
|
||||
/* 802D1004 */ void do_resize(void*, u32);
|
||||
/* 802D1038 */ void do_getSize(void*);
|
||||
/* 802D106C */ void check();
|
||||
/* 802D10FC */ void dump();
|
||||
/* 802D11FC */ void state_register(JKRHeap::TState*, u32) const;
|
||||
/* 802D1258 */ void state_compare(JKRHeap::TState const&, JKRHeap::TState const&) const;
|
||||
/* 802D1288 */ void getHeapType();
|
||||
/* 802D1294 */ void do_getFreeSize();
|
||||
/* 802D129C */ void do_getMaxFreeBlock();
|
||||
/* 802D12A4 */ void do_getTotalFreeSize();
|
||||
};
|
||||
#include "global.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
@@ -107,10 +55,8 @@ extern "C" void __dl__FPv();
|
||||
extern "C" void state_dump__7JKRHeapCFRCQ27JKRHeap6TState();
|
||||
extern "C" bool do_changeGroupID__7JKRHeapFUc();
|
||||
extern "C" bool do_getCurrentGroupId__7JKRHeapFv();
|
||||
extern "C" void JUTReportConsole_f();
|
||||
extern "C" void JUTWarningConsole_f();
|
||||
extern "C" void OSLockMutex();
|
||||
extern "C" void OSUnlockMutex();
|
||||
extern "C" void JUTReportConsole_f(const char*, ...);
|
||||
extern "C" void JUTWarningConsole_f(const char*, ...);
|
||||
extern "C" void _savegpr_28();
|
||||
extern "C" void _savegpr_29();
|
||||
extern "C" void _restgpr_28();
|
||||
@@ -124,94 +70,119 @@ extern "C" u8 mErrorHandler__7JKRHeap[4];
|
||||
|
||||
/* 802D0A24-802D0AD0 2CB364 00AC+00 0/0 4/4 1/1 .text create__12JKRSolidHeapFUlP7JKRHeapb
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::create(u32 param_0, JKRHeap* param_1, bool param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/create__12JKRSolidHeapFUlP7JKRHeapb.s"
|
||||
JKRSolidHeap* JKRSolidHeap::create(u32 size, JKRHeap* heap, bool useErrorHandler) {
|
||||
if (!heap) {
|
||||
heap = getRootHeap();
|
||||
}
|
||||
|
||||
if (size == 0xffffffff) {
|
||||
size = heap->getMaxAllocatableSize(0x10);
|
||||
}
|
||||
|
||||
u32 alignedSize = ALIGN_PREV(size, 0x10);
|
||||
u32 solidHeapSize = ALIGN_NEXT(sizeof(JKRSolidHeap), 0x10);
|
||||
if (alignedSize < solidHeapSize)
|
||||
return NULL;
|
||||
|
||||
JKRSolidHeap* solidHeap = (JKRSolidHeap*)JKRAllocFromHeap(heap, alignedSize, 0x10);
|
||||
void* dataPtr = (u8*)solidHeap + solidHeapSize;
|
||||
if (!solidHeap)
|
||||
return NULL;
|
||||
|
||||
solidHeap =
|
||||
new (solidHeap) JKRSolidHeap(dataPtr, alignedSize - solidHeapSize, heap, useErrorHandler);
|
||||
return solidHeap;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D0AD0-802D0B30 2CB410 0060+00 1/0 0/0 0/0 .text do_destroy__12JKRSolidHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::do_destroy() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/do_destroy__12JKRSolidHeapFv.s"
|
||||
void JKRSolidHeap::do_destroy(void) {
|
||||
JKRHeap* parent = getParent();
|
||||
if (parent) {
|
||||
this->~JKRSolidHeap();
|
||||
JKRFreeToHeap(parent, this);
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CC030-803CC090 029150 0060+00 2/2 0/0 0/0 .data __vt__12JKRSolidHeap */
|
||||
SECTION_DATA extern void* __vt__12JKRSolidHeap[24] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__12JKRSolidHeapFv,
|
||||
(void*)callAllDisposer__7JKRHeapFv,
|
||||
(void*)getHeapType__12JKRSolidHeapFv,
|
||||
(void*)check__12JKRSolidHeapFv,
|
||||
(void*)dump_sort__7JKRHeapFv,
|
||||
(void*)dump__12JKRSolidHeapFv,
|
||||
(void*)do_destroy__12JKRSolidHeapFv,
|
||||
(void*)do_alloc__12JKRSolidHeapFUli,
|
||||
(void*)do_free__12JKRSolidHeapFPv,
|
||||
(void*)do_freeAll__12JKRSolidHeapFv,
|
||||
(void*)do_freeTail__12JKRSolidHeapFv,
|
||||
(void*)do_fillFreeArea__12JKRSolidHeapFv,
|
||||
(void*)do_resize__12JKRSolidHeapFPvUl,
|
||||
(void*)do_getSize__12JKRSolidHeapFPv,
|
||||
(void*)do_getFreeSize__12JKRSolidHeapFv,
|
||||
(void*)do_getMaxFreeBlock__12JKRSolidHeapFv,
|
||||
(void*)do_getTotalFreeSize__12JKRSolidHeapFv,
|
||||
(void*)do_changeGroupID__7JKRHeapFUc,
|
||||
(void*)do_getCurrentGroupId__7JKRHeapFv,
|
||||
(void*)state_register__12JKRSolidHeapCFPQ27JKRHeap6TStateUl,
|
||||
(void*)state_compare__12JKRSolidHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState,
|
||||
(void*)state_dump__7JKRHeapCFRCQ27JKRHeap6TState,
|
||||
};
|
||||
|
||||
/* 802D0B30-802D0B8C 2CB470 005C+00 1/1 0/0 0/0 .text __ct__12JKRSolidHeapFPvUlP7JKRHeapb
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRSolidHeap::JKRSolidHeap(void* param_0, u32 param_1, JKRHeap* param_2, bool param_3) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/__ct__12JKRSolidHeapFPvUlP7JKRHeapb.s"
|
||||
JKRSolidHeap::JKRSolidHeap(void* start, u32 size, JKRHeap* parent, bool useErrorHandler)
|
||||
: JKRHeap(start, size, parent, useErrorHandler) {
|
||||
mFreeSize = mSize;
|
||||
mSolidHead = (u8*)mStart;
|
||||
mSolidTail = (u8*)mEnd;
|
||||
field_0x78 = NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D0B8C-802D0BF4 2CB4CC 0068+00 1/0 0/0 0/0 .text __dt__12JKRSolidHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRSolidHeap::~JKRSolidHeap() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/__dt__12JKRSolidHeapFv.s"
|
||||
JKRSolidHeap::~JKRSolidHeap(void) {
|
||||
dispose();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 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) {
|
||||
mFreeSize = 0;
|
||||
mSize = newSize;
|
||||
mEnd = mStart + mSize;
|
||||
mSolidHead = (void*)mEnd;
|
||||
mSolidTail = (void*)mEnd;
|
||||
}
|
||||
|
||||
unlock();
|
||||
|
||||
return newSizeThis;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::adjustSize() {
|
||||
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 */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::do_alloc(u32 param_0, int param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/do_alloc__12JKRSolidHeapFUli.s"
|
||||
void* JKRSolidHeap::do_alloc(u32 size, int alignment) {
|
||||
if (alignment != 0) {
|
||||
JUT_ASSERT(abs(alignment));
|
||||
JUT_ASSERT(isPower2(alignment));
|
||||
}
|
||||
|
||||
lock();
|
||||
|
||||
if (size < 4) {
|
||||
size = 4;
|
||||
}
|
||||
|
||||
void* ptr;
|
||||
if (alignment >= 0) {
|
||||
ptr = allocFromHead(size, alignment < 4 ? 4 : alignment);
|
||||
} else {
|
||||
if (-alignment < 4) {
|
||||
alignment = 4;
|
||||
} else {
|
||||
alignment = -alignment;
|
||||
}
|
||||
|
||||
ptr = allocFromTail(size, alignment);
|
||||
}
|
||||
|
||||
unlock();
|
||||
return ptr;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8039CE50-8039CE50 0294B0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
@@ -223,14 +194,41 @@ SECTION_DEAD static char const* const stringBase_8039CE50 =
|
||||
|
||||
/* 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;
|
||||
if (totalSize <= mFreeSize) {
|
||||
ptr = (void*)alignedStart;
|
||||
mSolidHead += totalSize;
|
||||
mFreeSize -= totalSize;
|
||||
} else {
|
||||
JUTWarningConsole_f("allocFromHead: cannot alloc memory (0x%x byte).\n", totalSize);
|
||||
if (getErrorFlag() == true) {
|
||||
callErrorHandler(this, alignedSize, alignment);
|
||||
}
|
||||
}
|
||||
|
||||
return ptr;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::allocFromHead(u32 param_0, int param_1) {
|
||||
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 */
|
||||
@@ -245,146 +243,120 @@ SECTION_DEAD static char const* const stringBase_8039CE81 =
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::allocFromTail(u32 param_0, int param_1) {
|
||||
asm void* JKRSolidHeap::allocFromTail(u32 param_0, int param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/allocFromTail__12JKRSolidHeapFUli.s"
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 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_8039CEB2 =
|
||||
"free: cannot free memory block (%08x)\n";
|
||||
#pragma pop
|
||||
|
||||
/* 802D0EE4-802D0F14 2CB824 0030+00 1/0 0/0 0/0 .text do_free__12JKRSolidHeapFPv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::do_free(void* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/do_free__12JKRSolidHeapFPv.s"
|
||||
void JKRSolidHeap::do_free(void* ptr) {
|
||||
JUTWarningConsole_f("free: cannot free memory block (%08x)\n", ptr);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D0F14-802D0F74 2CB854 0060+00 1/0 0/0 0/0 .text do_freeAll__12JKRSolidHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::do_freeAll() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/do_freeAll__12JKRSolidHeapFv.s"
|
||||
void JKRSolidHeap::do_freeAll(void) {
|
||||
lock();
|
||||
|
||||
this->JKRHeap::callAllDisposer();
|
||||
mFreeSize = mSize;
|
||||
mSolidHead = (u8*)mStart;
|
||||
mSolidTail = (u8*)mEnd;
|
||||
field_0x78 = NULL;
|
||||
|
||||
unlock();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D0F74-802D1000 2CB8B4 008C+00 1/0 0/0 0/0 .text do_freeTail__12JKRSolidHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::do_freeTail() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/do_freeTail__12JKRSolidHeapFv.s"
|
||||
void JKRSolidHeap::do_freeTail(void) {
|
||||
lock();
|
||||
|
||||
if (mSolidTail != mEnd) {
|
||||
dispose(mSolidTail, mEnd);
|
||||
}
|
||||
|
||||
this->mFreeSize = ((u32)mEnd - (u32)mSolidTail + mFreeSize);
|
||||
this->mSolidTail = mEnd;
|
||||
|
||||
JKRSolidHeap::Unknown* unknown = field_0x78;
|
||||
while (unknown) {
|
||||
unknown->field_0xc = mEnd;
|
||||
unknown = unknown->mNext;
|
||||
}
|
||||
|
||||
unlock();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D1000-802D1004 2CB940 0004+00 1/0 0/0 0/0 .text do_fillFreeArea__12JKRSolidHeapFv
|
||||
*/
|
||||
void JKRSolidHeap::do_fillFreeArea() {
|
||||
/* empty function */
|
||||
#if DEBUG
|
||||
fillMemory(mSolidHead, mEnd - mSolidHead, (uint)DAT_8074a8ba);
|
||||
#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_8039CED9 =
|
||||
"resize: cannot resize memory block (%08x: %d)\n";
|
||||
#pragma pop
|
||||
|
||||
/* 802D1004-802D1038 2CB944 0034+00 1/0 0/0 0/0 .text do_resize__12JKRSolidHeapFPvUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::do_resize(void* param_0, u32 param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/do_resize__12JKRSolidHeapFPvUl.s"
|
||||
s32 JKRSolidHeap::do_resize(void* ptr, u32 newSize) {
|
||||
JUTWarningConsole_f("resize: cannot resize memory block (%08x: %d)\n", ptr, newSize);
|
||||
return -1;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 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_8039CF08 =
|
||||
"getSize: cannot get memory block size (%08x)\n";
|
||||
#pragma pop
|
||||
|
||||
/* 802D1038-802D106C 2CB978 0034+00 1/0 0/0 0/0 .text do_getSize__12JKRSolidHeapFPv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::do_getSize(void* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/do_getSize__12JKRSolidHeapFPv.s"
|
||||
s32 JKRSolidHeap::do_getSize(void* ptr) {
|
||||
JUTWarningConsole_f("getSize: cannot get memory block size (%08x)\n", ptr);
|
||||
return -1;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 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_8039CF36 =
|
||||
"check: bad total memory block size (%08X, %08X)\n";
|
||||
#pragma pop
|
||||
|
||||
/* 802D106C-802D10FC 2CB9AC 0090+00 1/0 0/0 0/0 .text check__12JKRSolidHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::check() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/check__12JKRSolidHeapFv.s"
|
||||
bool JKRSolidHeap::check(void) {
|
||||
lock();
|
||||
|
||||
bool result = true;
|
||||
u32 calculatedSize =
|
||||
((u32)mSolidHead - (u32)mStart) + mFreeSize + ((u32)mEnd - (u32)mSolidTail);
|
||||
u32 availableSize = mSize;
|
||||
if (calculatedSize != availableSize) {
|
||||
result = false;
|
||||
JUTWarningConsole_f("check: bad total memory block size (%08X, %08X)\n", availableSize,
|
||||
calculatedSize);
|
||||
}
|
||||
|
||||
unlock();
|
||||
return result;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 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_8039CF67 = "head %08x: %08x\n";
|
||||
SECTION_DEAD static char const* const stringBase_8039CF78 = "tail %08x: %08x\n";
|
||||
SECTION_DEAD static char const* const stringBase_8039CF89 = "%d / %d bytes (%6.2f%%) used\n";
|
||||
/* @stringBase0 padding */
|
||||
SECTION_DEAD static char const* const pad_8039CFA7 = "";
|
||||
#pragma pop
|
||||
|
||||
/* 80455FA8-80455FB0 0045A8 0004+04 1/1 0/0 0/0 .sdata2 @693 */
|
||||
SECTION_SDATA2 static f32 lit_693[1 + 1 /* padding */] = {
|
||||
100.0f,
|
||||
/* padding */
|
||||
0.0f,
|
||||
};
|
||||
|
||||
/* 80455FB0-80455FB8 0045B0 0008+00 1/1 0/0 0/0 .sdata2 @695 */
|
||||
SECTION_SDATA2 static f64 lit_695 = 4503601774854144.0 /* cast s32 to float */;
|
||||
|
||||
/* 80455FB8-80455FC0 0045B8 0008+00 1/1 0/0 0/0 .sdata2 @697 */
|
||||
SECTION_SDATA2 static f64 lit_697 = 4503599627370496.0 /* cast u32 to float */;
|
||||
|
||||
/* 802D10FC-802D11FC 2CBA3C 0100+00 1/0 0/0 0/0 .text dump__12JKRSolidHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::dump() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/dump__12JKRSolidHeapFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
bool JKRSolidHeap::dump(void) {
|
||||
bool result = check();
|
||||
|
||||
lock();
|
||||
u32 headSize = ((u32)mSolidHead - (u32)mStart);
|
||||
u32 tailSize = ((u32)mEnd - (u32)mSolidTail);
|
||||
s32 htSize = headSize + tailSize;
|
||||
JUTReportConsole_f("head %08x: %08x\n", mStart, headSize);
|
||||
JUTReportConsole_f("tail %08x: %08x\n", mSolidTail, ((u32)mEnd - (u32)mSolidTail));
|
||||
|
||||
u32 totalSize = mSize;
|
||||
float percentage = (float)htSize / (float)totalSize * 100.0f;
|
||||
JUTReportConsole_f("%d / %d bytes (%6.2f%%) used\n", htSize, totalSize, percentage);
|
||||
unlock();
|
||||
|
||||
return result;
|
||||
}
|
||||
/* 802D11FC-802D1258 2CBB3C 005C+00 1/0 0/0 0/0 .text
|
||||
* state_register__12JKRSolidHeapCFPQ27JKRHeap6TStateUl */
|
||||
// full match expect using the wrong register
|
||||
#ifdef NONMATCHING
|
||||
void JKRSolidHeap::state_register(JKRHeap::TState* p, u32 id) const {
|
||||
JUT_ASSERT(p != 0);
|
||||
JUT_ASSERT(p->getHeap() == this);
|
||||
|
||||
getState_(p);
|
||||
setState_u32ID_(p, id);
|
||||
setState_uUsedSize_(p, getUsedSize());
|
||||
setState_u32CheckCode_(p, (u32)mSolidHead + (u32)mSolidTail * 3);
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -393,57 +365,43 @@ asm void JKRSolidHeap::state_register(JKRHeap::TState* param_0, u32 param_1) con
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/state_register__12JKRSolidHeapCFPQ27JKRHeap6TStateUl.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802D1258-802D1288 2CBB98 0030+00 1/0 0/0 0/0 .text
|
||||
* state_compare__12JKRSolidHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::state_compare(JKRHeap::TState const& param_0,
|
||||
JKRHeap::TState const& param_1) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/state_compare__12JKRSolidHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState.s"
|
||||
bool JKRSolidHeap::state_compare(JKRHeap::TState const& r1, JKRHeap::TState const& r2) const {
|
||||
JUT_ASSERT(r1.getHeap() == r2.getHeap());
|
||||
|
||||
bool result = true;
|
||||
if (r1.getCheckCode() != r2.getCheckCode()) {
|
||||
result = false;
|
||||
}
|
||||
|
||||
if (r1.getUsedSize() != r2.getUsedSize()) {
|
||||
result = false;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D1288-802D1294 2CBBC8 000C+00 1/0 0/0 0/0 .text getHeapType__12JKRSolidHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::getHeapType() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/getHeapType__12JKRSolidHeapFv.s"
|
||||
u32 JKRSolidHeap::getHeapType(void) {
|
||||
return 'SLID';
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D1294-802D129C 2CBBD4 0008+00 1/0 0/0 0/0 .text do_getFreeSize__12JKRSolidHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::do_getFreeSize() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/do_getFreeSize__12JKRSolidHeapFv.s"
|
||||
s32 JKRSolidHeap::do_getFreeSize(void) {
|
||||
return mFreeSize;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D129C-802D12A4 2CBBDC 0008+00 1/0 0/0 0/0 .text do_getMaxFreeBlock__12JKRSolidHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::do_getMaxFreeBlock() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/do_getMaxFreeBlock__12JKRSolidHeapFv.s"
|
||||
void* JKRSolidHeap::do_getMaxFreeBlock(void) {
|
||||
return mSolidHead;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D12A4-802D12C4 2CBBE4 0020+00 1/0 0/0 0/0 .text do_getTotalFreeSize__12JKRSolidHeapFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::do_getTotalFreeSize() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/do_getTotalFreeSize__12JKRSolidHeapFv.s"
|
||||
s32 JKRSolidHeap::do_getTotalFreeSize(void) {
|
||||
return getFreeSize();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 8039CE50-8039CE50 0294B0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRThread.h"
|
||||
#include "JSystem/JKernel/JKRExpHeap.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
@@ -11,93 +12,12 @@
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct OSThread {};
|
||||
|
||||
struct JUTConsole {
|
||||
/* 802E75EC */ void clear();
|
||||
/* 802E7BB8 */ void print_f(char const*, ...);
|
||||
/* 802E7C38 */ void print(char const*);
|
||||
};
|
||||
|
||||
struct JSUPtrLink {
|
||||
/* 802DBDFC */ JSUPtrLink(void*);
|
||||
/* 802DBE14 */ ~JSUPtrLink();
|
||||
};
|
||||
|
||||
struct JSUPtrList {
|
||||
/* 802DBE74 */ JSUPtrList(bool);
|
||||
/* 802DBEAC */ ~JSUPtrList();
|
||||
/* 802DBF14 */ void initiate();
|
||||
/* 802DBF4C */ void append(JSUPtrLink*);
|
||||
/* 802DC15C */ void remove(JSUPtrLink*);
|
||||
};
|
||||
|
||||
template <typename A0>
|
||||
struct JSUList {};
|
||||
/* JSUList<JKRTask> */
|
||||
struct JSUList__template3 {
|
||||
/* 802D1EFC */ void func_802D1EFC(void* _this);
|
||||
};
|
||||
|
||||
/* JSUList<JKRThread> */
|
||||
struct JSUList__template4 {
|
||||
/* 802D1F50 */ void func_802D1F50(void* _this);
|
||||
};
|
||||
|
||||
struct JKRHeap {
|
||||
/* 802CE438 */ void becomeCurrentHeap();
|
||||
/* 802CE474 */ void alloc(u32, int, JKRHeap*);
|
||||
/* 802CE500 */ void free(void*, JKRHeap*);
|
||||
/* 802CE83C */ void findFromRoot(void*);
|
||||
/* 802CEBA8 */ void isSubHeap(JKRHeap*) const;
|
||||
|
||||
static u8 sSystemHeap[4];
|
||||
static u8 sCurrentHeap[4];
|
||||
static u8 sRootHeap[4];
|
||||
};
|
||||
|
||||
struct JKRThread {
|
||||
/* 802D1568 */ JKRThread(u32, int, int);
|
||||
/* 802D16B8 */ JKRThread(OSThread*, int);
|
||||
/* 802D1610 */ JKRThread(JKRHeap*, u32, int, int);
|
||||
/* 802D1758 */ ~JKRThread();
|
||||
/* 802D1830 */ void setCommon_mesgQueue(JKRHeap*, int);
|
||||
/* 802D18A4 */ void setCommon_heapSpecified(JKRHeap*, u32, int);
|
||||
/* 802D1934 */ void start(void*);
|
||||
/* 802D1960 */ void searchThread(OSThread*);
|
||||
/* 802D1E14 */ bool run();
|
||||
|
||||
static u8 sThreadList[12];
|
||||
};
|
||||
|
||||
struct JKRThreadName_ {};
|
||||
|
||||
struct JKRThreadSwitch {
|
||||
/* 802D199C */ JKRThreadSwitch(JKRHeap*);
|
||||
/* 802D1A14 */ void createManager(JKRHeap*);
|
||||
/* 802D1A70 */ void enter(JKRThread*, int);
|
||||
/* 802D1AE4 */ void callback(OSThread*, OSThread*);
|
||||
/* 802D1C74 */ void draw(JKRThreadName_*, JUTConsole*);
|
||||
/* 802D1E1C */ void draw(JKRThreadName_*);
|
||||
/* 802D1E4C */ ~JKRThreadSwitch();
|
||||
|
||||
static u8 sManager[4];
|
||||
static u8 sTotalCount[4];
|
||||
static u8 sTotalStart[4];
|
||||
static u8 mUserPreCallback[4];
|
||||
static u8 mUserPostCallback[4];
|
||||
};
|
||||
|
||||
struct JKRTask {
|
||||
static u8 sTaskList[12];
|
||||
static u8 sEndMesgQueue[32];
|
||||
};
|
||||
|
||||
struct JKRDisposer {
|
||||
/* 802D147C */ JKRDisposer();
|
||||
/* 802D14E4 */ ~JKRDisposer();
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
@@ -155,13 +75,6 @@ extern "C" void clear__10JUTConsoleFv();
|
||||
extern "C" void print_f__10JUTConsoleFPCce();
|
||||
extern "C" void print__10JUTConsoleFPCc();
|
||||
extern "C" void JUTWarningConsole();
|
||||
extern "C" void OSInitMessageQueue();
|
||||
extern "C" void OSSetSwitchThreadCallback();
|
||||
extern "C" void OSIsThreadTerminated();
|
||||
extern "C" void OSCreateThread();
|
||||
extern "C" void OSCancelThread();
|
||||
extern "C" void OSDetachThread();
|
||||
extern "C" void OSGetTick();
|
||||
extern "C" void __register_global_object();
|
||||
extern "C" void __cvt_fp2unsigned();
|
||||
extern "C" void _savegpr_25();
|
||||
@@ -177,120 +90,124 @@ extern "C" void sprintf();
|
||||
extern "C" u8 sSystemHeap__7JKRHeap[4];
|
||||
extern "C" u8 sCurrentHeap__7JKRHeap[4];
|
||||
extern "C" u8 sRootHeap__7JKRHeap[4];
|
||||
extern "C" void* __vt__15JKRThreadSwitch;
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CC100-803CC114 029220 0014+00 2/2 0/0 0/0 .data __vt__15JKRThreadSwitch */
|
||||
SECTION_DATA extern void* __vt__15JKRThreadSwitch[5] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)draw__15JKRThreadSwitchFP14JKRThreadName_P10JUTConsole,
|
||||
(void*)draw__15JKRThreadSwitchFP14JKRThreadName_,
|
||||
(void*)__dt__15JKRThreadSwitchFv,
|
||||
};
|
||||
|
||||
/* 803CC114-803CC128 029234 0010+04 4/4 0/0 0/0 .data __vt__9JKRThread */
|
||||
SECTION_DATA extern void* __vt__9JKRThread[4 + 1 /* padding */] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__9JKRThreadFv,
|
||||
(void*)run__9JKRThreadFv,
|
||||
/* padding */
|
||||
NULL,
|
||||
};
|
||||
|
||||
/* 802D1568-802D1610 2CBEA8 00A8+00 0/0 4/4 0/0 .text __ct__9JKRThreadFUlii */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRThread::JKRThread(u32 param_0, int param_1, int param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRThread/__ct__9JKRThreadFUlii.s"
|
||||
JKRThread::JKRThread(u32 stack_size, int message_count, int param_3) : mThreadListLink(this) {
|
||||
mSwitchCount = 0;
|
||||
mCost = 0;
|
||||
field_0x6c = 0;
|
||||
field_0x60 = 0;
|
||||
field_0x70 = 0;
|
||||
|
||||
JKRHeap* heap = JKRHeap::findFromRoot(this);
|
||||
if (heap == NULL) {
|
||||
heap = JKRHeap::getSystemHeap();
|
||||
}
|
||||
|
||||
setCommon_heapSpecified(heap, stack_size, param_3);
|
||||
setCommon_mesgQueue(mHeap, message_count);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D1610-802D16B8 2CBF50 00A8+00 0/0 2/2 0/0 .text __ct__9JKRThreadFP7JKRHeapUlii */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRThread::JKRThread(JKRHeap* param_0, u32 param_1, int param_2, int param_3) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRThread/__ct__9JKRThreadFP7JKRHeapUlii.s"
|
||||
JKRThread::JKRThread(JKRHeap* heap, u32 stack_size, int message_count, int param_4)
|
||||
: mThreadListLink(this) {
|
||||
mSwitchCount = 0;
|
||||
mCost = 0;
|
||||
field_0x6c = 0;
|
||||
field_0x60 = 0;
|
||||
field_0x70 = 0;
|
||||
|
||||
if (heap == NULL) {
|
||||
heap = JKRHeap::getCurrentHeap();
|
||||
}
|
||||
|
||||
setCommon_heapSpecified(heap, stack_size, param_4);
|
||||
setCommon_mesgQueue(mHeap, message_count);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D16B8-802D1758 2CBFF8 00A0+00 0/0 5/5 0/0 .text __ct__9JKRThreadFP8OSThreadi */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRThread::JKRThread(OSThread* param_0, int param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRThread/__ct__9JKRThreadFP8OSThreadi.s"
|
||||
}
|
||||
#pragma pop
|
||||
JKRThread::JKRThread(OSThread* thread, int message_count) : mThreadListLink(this) {
|
||||
mSwitchCount = 0;
|
||||
mCost = 0;
|
||||
field_0x6c = 0;
|
||||
field_0x60 = 0;
|
||||
field_0x70 = 0;
|
||||
mHeap = NULL;
|
||||
mThreadRecord = thread;
|
||||
mStackSize = (u32)thread->stack_end - (u32)thread->stack_base;
|
||||
mStackMemory = thread->stack_base;
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80434280-8043428C 060FA0 000C+00 1/1 0/0 0/0 .bss @481 */
|
||||
static u8 lit_481[12];
|
||||
setCommon_mesgQueue(JKRHeap::getSystemHeap(), message_count);
|
||||
}
|
||||
|
||||
/* 8043428C-80434298 060FAC 000C+00 5/6 0/0 0/0 .bss sThreadList__9JKRThread */
|
||||
u8 JKRThread::sThreadList[12];
|
||||
JSUList<JKRThread> JKRThread::sThreadList(0);
|
||||
|
||||
/* 802D1758-802D1830 2CC098 00D8+00 1/0 9/9 0/0 .text __dt__9JKRThreadFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JKRThread::~JKRThread() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRThread/__dt__9JKRThreadFv.s"
|
||||
JKRThread::~JKRThread() {
|
||||
getList().remove(&mThreadListLink);
|
||||
|
||||
if (mHeap) {
|
||||
BOOL result = OSIsThreadTerminated(mThreadRecord);
|
||||
if (result == FALSE) {
|
||||
OSDetachThread(mThreadRecord);
|
||||
OSCancelThread(mThreadRecord);
|
||||
}
|
||||
JKRFreeToHeap(mHeap, mStackMemory);
|
||||
JKRFreeToHeap(mHeap, mThreadRecord);
|
||||
}
|
||||
JKRFree(mMessages);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D1830-802D18A4 2CC170 0074+00 3/3 0/0 0/0 .text setCommon_mesgQueue__9JKRThreadFP7JKRHeapi
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRThread::setCommon_mesgQueue(JKRHeap* param_0, int param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRThread/setCommon_mesgQueue__9JKRThreadFP7JKRHeapi.s"
|
||||
void JKRThread::setCommon_mesgQueue(JKRHeap* heap, int message_count) {
|
||||
mMessageCount = message_count;
|
||||
mMessages = (OSMessage*)JKRHeap::alloc(mMessageCount * sizeof(OSMessage), 0, heap);
|
||||
|
||||
OSInitMessageQueue(&mMessageQueue, mMessages, mMessageCount);
|
||||
getList().append(&mThreadListLink);
|
||||
|
||||
mCurrentHeap = NULL;
|
||||
mCurrentHeapError = NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D18A4-802D1934 2CC1E4 0090+00 2/2 0/0 0/0 .text
|
||||
* setCommon_heapSpecified__9JKRThreadFP7JKRHeapUli */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRThread::setCommon_heapSpecified(JKRHeap* param_0, u32 param_1, int param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRThread/setCommon_heapSpecified__9JKRThreadFP7JKRHeapUli.s"
|
||||
void JKRThread::setCommon_heapSpecified(JKRHeap* heap, u32 stack_size, int param_3) {
|
||||
mHeap = heap;
|
||||
mStackSize = stack_size & 0xffffffe0;
|
||||
mStackMemory = JKRAllocFromHeap(mHeap, mStackSize, 0x20);
|
||||
mThreadRecord = (OSThread*)JKRAllocFromHeap(mHeap, sizeof(OSThread), 0x20);
|
||||
|
||||
void* stackBase = (void*)((int)mStackMemory + mStackSize);
|
||||
OSCreateThread(mThreadRecord, start, this, stackBase, mStackSize, param_3, 1);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D1934-802D1960 2CC274 002C+00 1/1 0/0 0/0 .text start__9JKRThreadFPv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRThread::start(void* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRThread/start__9JKRThreadFPv.s"
|
||||
void* JKRThread::start(void* param) {
|
||||
JKRThread* thread = (JKRThread*)param;
|
||||
return thread->run();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D1960-802D199C 2CC2A0 003C+00 1/1 0/0 0/0 .text searchThread__9JKRThreadFP8OSThread
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRThread::searchThread(OSThread* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRThread/searchThread__9JKRThreadFP8OSThread.s"
|
||||
JKRThread* JKRThread::searchThread(OSThread* thread) {
|
||||
JSUList<JKRThread>& threadList = getList();
|
||||
JSUListIterator<JKRThread> iterator;
|
||||
for (iterator = threadList.getFirst(); iterator != threadList.getEnd(); ++iterator) {
|
||||
if (iterator->getThreadRecord() == thread) {
|
||||
return iterator.getObject();
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 804513B0-804513B4 0008B0 0004+00 2/2 1/1 0/0 .sbss sManager__15JKRThreadSwitch */
|
||||
@@ -321,7 +238,7 @@ asm JKRThreadSwitch::JKRThreadSwitch(JKRHeap* param_0) {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRThreadSwitch::createManager(JKRHeap* param_0) {
|
||||
asm JKRThreadSwitch* JKRThreadSwitch::createManager(JKRHeap* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRThread/createManager__15JKRThreadSwitchFP7JKRHeap.s"
|
||||
}
|
||||
@@ -331,7 +248,7 @@ asm void JKRThreadSwitch::createManager(JKRHeap* param_0) {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRThreadSwitch::enter(JKRThread* param_0, int param_1) {
|
||||
asm JKRThread* JKRThreadSwitch::enter(JKRThread* param_0, int param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRThread/enter__15JKRThreadSwitchFP9JKRThreadi.s"
|
||||
}
|
||||
@@ -394,6 +311,7 @@ SECTION_SDATA2 static f64 lit_937 = 4503599627370496.0 /* cast u32 to float */;
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
#pragma force_active on
|
||||
asm void JKRThreadSwitch::draw(JKRThreadName_* param_0, JUTConsole* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRThread/draw__15JKRThreadSwitchFP14JKRThreadName_P10JUTConsole.s"
|
||||
@@ -401,14 +319,15 @@ asm void JKRThreadSwitch::draw(JKRThreadName_* param_0, JUTConsole* param_1) {
|
||||
#pragma pop
|
||||
|
||||
/* 802D1E14-802D1E1C 2CC754 0008+00 1/0 0/0 0/0 .text run__9JKRThreadFv */
|
||||
bool JKRThread::run() {
|
||||
return false;
|
||||
void* JKRThread::run() {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* 802D1E1C-802D1E4C 2CC75C 0030+00 1/0 0/0 0/0 .text draw__15JKRThreadSwitchFP14JKRThreadName_ */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
#pragma force_active on
|
||||
asm void JKRThreadSwitch::draw(JKRThreadName_* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRThread/draw__15JKRThreadSwitchFP14JKRThreadName_.s"
|
||||
@@ -427,50 +346,15 @@ asm JKRThreadSwitch::~JKRThreadSwitch() {
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80434298-804342A4 060FB8 000C+00 0/1 0/0 0/0 .bss @989 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 lit_989[12];
|
||||
#pragma pop
|
||||
// #pragma push
|
||||
// #pragma force_active on
|
||||
// static u8 lit_989[12];
|
||||
// #pragma pop
|
||||
|
||||
/* 804342A4-804342B0 060FC4 000C+00 0/1 0/0 0/0 .bss sTaskList__7JKRTask */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
u8 JKRTask::sTaskList[12];
|
||||
#pragma pop
|
||||
|
||||
/* 802D1E94-802D1EFC 2CC7D4 0068+00 0/0 1/0 0/0 .text __sinit_JKRThread_cpp */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void __sinit_JKRThread_cpp() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRThread/__sinit_JKRThread_cpp.s"
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
REGISTER_CTORS(0x802D1E94, __sinit_JKRThread_cpp);
|
||||
#pragma pop
|
||||
|
||||
/* 802D1EFC-802D1F50 2CC83C 0054+00 1/1 0/0 0/0 .text __dt__17JSUList<7JKRTask>Fv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
extern "C" asm void func_802D1EFC(void* _this) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRThread/func_802D1EFC.s"
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D1F50-802D1FA4 2CC890 0054+00 1/1 0/0 0/0 .text __dt__19JSUList<9JKRThread>Fv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
extern "C" asm void func_802D1F50(void* _this) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRThread/func_802D1F50.s"
|
||||
}
|
||||
JSUList<JKRTask> JKRTask::sTaskList;
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
|
||||
@@ -7,28 +7,6 @@
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JSUStreamSeekFrom {};
|
||||
|
||||
struct JSURandomInputStream {
|
||||
/* 802D4094 */ void getAvailable() const;
|
||||
/* 802DC3FC */ void skip(s32);
|
||||
};
|
||||
|
||||
struct JKRFile {};
|
||||
|
||||
struct JSUFileInputStream {
|
||||
/* 802DADD8 */ ~JSUFileInputStream();
|
||||
/* 802DC638 */ JSUFileInputStream(JKRFile*);
|
||||
/* 802DC67C */ void readData(void*, s32);
|
||||
/* 802DC74C */ void seekPos(s32, JSUStreamSeekFrom);
|
||||
/* 802DC82C */ void getLength() const;
|
||||
/* 802DC85C */ void getPosition() const;
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
@@ -89,7 +67,7 @@ asm JSUFileInputStream::JSUFileInputStream(JKRFile* param_0) {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JSUFileInputStream::readData(void* param_0, s32 param_1) {
|
||||
asm s32 JSUFileInputStream::readData(void* param_0, s32 param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JSupport/JSUFileStream/readData__18JSUFileInputStreamFPvl.s"
|
||||
}
|
||||
@@ -111,7 +89,7 @@ asm void JSUFileInputStream::seekPos(s32 param_0, JSUStreamSeekFrom param_1) {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JSUFileInputStream::getLength() const {
|
||||
asm s32 JSUFileInputStream::getLength() const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JSupport/JSUFileStream/getLength__18JSUFileInputStreamCFv.s"
|
||||
}
|
||||
@@ -121,7 +99,7 @@ asm void JSUFileInputStream::getLength() const {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JSUFileInputStream::getPosition() const {
|
||||
asm s32 JSUFileInputStream::getPosition() const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JSupport/JSUFileStream/getPosition__18JSUFileInputStreamCFv.s"
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JSupport/JSUInputStream.h"
|
||||
#include "JSystem/JSupport/JSURandomInputStream.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
@@ -11,23 +12,6 @@
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JSUStreamSeekFrom {};
|
||||
|
||||
struct JSURandomInputStream {
|
||||
/* 80255328 */ ~JSURandomInputStream();
|
||||
/* 802D4094 */ void getAvailable() const;
|
||||
/* 802DC370 */ void align(s32);
|
||||
/* 802DC3FC */ void skip(s32);
|
||||
/* 802DC458 */ void peek(void*, s32);
|
||||
/* 802DC4DC */ void seek(s32, JSUStreamSeekFrom);
|
||||
};
|
||||
|
||||
struct JSUInputStream {
|
||||
/* 802DC23C */ ~JSUInputStream();
|
||||
/* 802DC298 */ void read(void*, s32);
|
||||
/* 802DC2F0 */ void skip(s32);
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
@@ -107,7 +91,7 @@ asm void JSUInputStream::read(void* param_0, s32 param_1) {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JSUInputStream::skip(s32 param_0) {
|
||||
asm s32 JSUInputStream::skip(s32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JSupport/JSUInputStream/skip__14JSUInputStreamFl.s"
|
||||
}
|
||||
@@ -127,7 +111,7 @@ asm void JSURandomInputStream::align(s32 param_0) {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JSURandomInputStream::skip(s32 param_0) {
|
||||
asm s32 JSURandomInputStream::skip(s32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JSupport/JSUInputStream/skip__20JSURandomInputStreamFl.s"
|
||||
}
|
||||
|
||||
+137
-142
@@ -7,163 +7,158 @@
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JSUPtrLink {
|
||||
/* 802DBDFC */ JSUPtrLink(void*);
|
||||
/* 802DBE14 */ ~JSUPtrLink();
|
||||
};
|
||||
|
||||
struct JSUPtrList {
|
||||
/* 802DBE74 */ JSUPtrList(bool);
|
||||
/* 802DBEAC */ ~JSUPtrList();
|
||||
/* 802DBF14 */ void initiate();
|
||||
/* 802DBF28 */ void setFirst(JSUPtrLink*);
|
||||
/* 802DBF4C */ void append(JSUPtrLink*);
|
||||
/* 802DBFF0 */ void prepend(JSUPtrLink*);
|
||||
/* 802DC094 */ void insert(JSUPtrLink*, JSUPtrLink*);
|
||||
/* 802DC15C */ void remove(JSUPtrLink*);
|
||||
/* 802DC20C */ void getNthLink(u32) const;
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void __ct__10JSUPtrLinkFPv();
|
||||
extern "C" void __dt__10JSUPtrLinkFv();
|
||||
extern "C" void __ct__10JSUPtrListFb();
|
||||
extern "C" void __dt__10JSUPtrListFv();
|
||||
extern "C" void initiate__10JSUPtrListFv();
|
||||
extern "C" void setFirst__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void prepend__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void insert__10JSUPtrListFP10JSUPtrLinkP10JSUPtrLink();
|
||||
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void getNthLink__10JSUPtrListCFUl();
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void __dl__FPv();
|
||||
extern "C" void _savegpr_29();
|
||||
extern "C" void _restgpr_29();
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* 802DBDFC-802DBE14 2D673C 0018+00 0/0 34/34 0/0 .text __ct__10JSUPtrLinkFPv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JSUPtrLink::JSUPtrLink(void* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JSupport/JSUList/__ct__10JSUPtrLinkFPv.s"
|
||||
JSUPtrLink::JSUPtrLink(void* object) {
|
||||
this->mList = NULL;
|
||||
this->mObject = object;
|
||||
this->mPrev = NULL;
|
||||
this->mNext = NULL;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DBE14-802DBE74 2D6754 0060+00 0/0 27/27 0/0 .text __dt__10JSUPtrLinkFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JSUPtrLink::~JSUPtrLink() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JSupport/JSUList/__dt__10JSUPtrLinkFv.s"
|
||||
JSUPtrLink::~JSUPtrLink() {
|
||||
if (this->mList != NULL) {
|
||||
this->mList->remove(this);
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DBE74-802DBEAC 2D67B4 0038+00 0/0 4/4 0/0 .text __ct__10JSUPtrListFb */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JSUPtrList::JSUPtrList(bool param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JSupport/JSUList/__ct__10JSUPtrListFb.s"
|
||||
JSUPtrList::JSUPtrList(bool init) {
|
||||
if (init) {
|
||||
this->initiate();
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DBEAC-802DBF14 2D67EC 0068+00 0/0 25/25 0/0 .text __dt__10JSUPtrListFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JSUPtrList::~JSUPtrList() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JSupport/JSUList/__dt__10JSUPtrListFv.s"
|
||||
JSUPtrList::~JSUPtrList() {
|
||||
JSUPtrLink* node = this->mHead;
|
||||
s32 removed = 0;
|
||||
while (this->mLength > removed) {
|
||||
node->mList = NULL;
|
||||
node = node->getNext();
|
||||
removed += 1;
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DBF14-802DBF28 2D6854 0014+00 1/1 27/27 0/0 .text initiate__10JSUPtrListFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JSUPtrList::initiate() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JSupport/JSUList/initiate__10JSUPtrListFv.s"
|
||||
void JSUPtrList::initiate() {
|
||||
this->mHead = NULL;
|
||||
this->mTail = NULL;
|
||||
this->mLength = 0;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DBF28-802DBF4C 2D6868 0024+00 2/2 0/0 0/0 .text setFirst__10JSUPtrListFP10JSUPtrLink */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JSUPtrList::setFirst(JSUPtrLink* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JSupport/JSUList/setFirst__10JSUPtrListFP10JSUPtrLink.s"
|
||||
void JSUPtrList::setFirst(JSUPtrLink* first) {
|
||||
first->mList = this;
|
||||
first->mPrev = NULL;
|
||||
first->mNext = NULL;
|
||||
this->mTail = first;
|
||||
this->mHead = first;
|
||||
this->mLength = 1;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DBF4C-802DBFF0 2D688C 00A4+00 1/1 29/29 0/0 .text append__10JSUPtrListFP10JSUPtrLink */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JSUPtrList::append(JSUPtrLink* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JSupport/JSUList/append__10JSUPtrListFP10JSUPtrLink.s"
|
||||
}
|
||||
#pragma pop
|
||||
bool JSUPtrList::append(JSUPtrLink* ptr) {
|
||||
JSUPtrList* list = ptr->mList;
|
||||
bool result = (NULL == list);
|
||||
if (!result) {
|
||||
result = list->remove(ptr);
|
||||
}
|
||||
|
||||
/* 802DBFF0-802DC094 2D6930 00A4+00 1/1 8/8 0/0 .text prepend__10JSUPtrListFP10JSUPtrLink
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JSUPtrList::prepend(JSUPtrLink* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JSupport/JSUList/prepend__10JSUPtrListFP10JSUPtrLink.s"
|
||||
}
|
||||
#pragma pop
|
||||
if (result) {
|
||||
if (this->mLength == 0) {
|
||||
this->setFirst(ptr);
|
||||
} else {
|
||||
ptr->mList = this;
|
||||
ptr->mPrev = this->mTail;
|
||||
ptr->mNext = NULL;
|
||||
this->mTail->mNext = ptr;
|
||||
this->mTail = ptr;
|
||||
this->mLength++;
|
||||
}
|
||||
}
|
||||
|
||||
/* 802DC094-802DC15C 2D69D4 00C8+00 0/0 4/4 0/0 .text
|
||||
* insert__10JSUPtrListFP10JSUPtrLinkP10JSUPtrLink */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JSUPtrList::insert(JSUPtrLink* param_0, JSUPtrLink* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JSupport/JSUList/insert__10JSUPtrListFP10JSUPtrLinkP10JSUPtrLink.s"
|
||||
return result;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DC15C-802DC20C 2D6A9C 00B0+00 4/4 31/31 0/0 .text remove__10JSUPtrListFP10JSUPtrLink */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JSUPtrList::remove(JSUPtrLink* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JSupport/JSUList/remove__10JSUPtrListFP10JSUPtrLink.s"
|
||||
}
|
||||
#pragma pop
|
||||
bool JSUPtrList::prepend(JSUPtrLink* ptr) {
|
||||
JSUPtrList* list = ptr->mList;
|
||||
bool result = (NULL == list);
|
||||
if (!result) {
|
||||
result = list->remove(ptr);
|
||||
}
|
||||
|
||||
/* 802DC20C-802DC23C 2D6B4C 0030+00 0/0 3/3 0/0 .text getNthLink__10JSUPtrListCFUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JSUPtrList::getNthLink(u32 param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JSupport/JSUList/getNthLink__10JSUPtrListCFUl.s"
|
||||
if (result) {
|
||||
if (this->mLength == 0) {
|
||||
this->setFirst(ptr);
|
||||
} else {
|
||||
ptr->mList = this;
|
||||
ptr->mPrev = NULL;
|
||||
ptr->mNext = this->mHead;
|
||||
this->mHead->mPrev = ptr;
|
||||
this->mHead = ptr;
|
||||
this->mLength++;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
bool JSUPtrList::insert(JSUPtrLink* before, JSUPtrLink* ptr) {
|
||||
if (before == this->mHead) {
|
||||
return this->prepend(ptr);
|
||||
} else if (before == NULL) {
|
||||
return this->append(ptr);
|
||||
}
|
||||
|
||||
if (before->mList != this) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool result = (NULL == ptr->mList);
|
||||
if (!result) {
|
||||
result = ptr->mList->remove(ptr);
|
||||
}
|
||||
|
||||
if (result) {
|
||||
JSUPtrLink* prev = before->mPrev;
|
||||
ptr->mList = this;
|
||||
ptr->mPrev = prev;
|
||||
ptr->mNext = before;
|
||||
prev->mNext = ptr;
|
||||
before->mPrev = ptr;
|
||||
this->mLength++;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
bool JSUPtrList::remove(JSUPtrLink* ptr) {
|
||||
bool is_parent = (ptr->mList == this);
|
||||
if (is_parent) {
|
||||
if (this->mLength == 1) {
|
||||
this->mHead = NULL;
|
||||
this->mTail = NULL;
|
||||
} else if (ptr == this->mHead) {
|
||||
ptr->mNext->mPrev = NULL;
|
||||
this->mHead = ptr->mNext;
|
||||
} else if (ptr == this->mTail) {
|
||||
ptr->mPrev->mNext = NULL;
|
||||
this->mTail = ptr->mPrev;
|
||||
} else {
|
||||
ptr->mPrev->mNext = ptr->mNext;
|
||||
ptr->mNext->mPrev = ptr->mPrev;
|
||||
}
|
||||
|
||||
ptr->mList = NULL;
|
||||
this->mLength--;
|
||||
}
|
||||
|
||||
return is_parent;
|
||||
}
|
||||
|
||||
JSUPtrLink* JSUPtrList::getNthLink(u32 index) const {
|
||||
if (index >= this->mLength) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
JSUPtrLink* node = this->mHead;
|
||||
for (u32 i = 0; i < index; i++) {
|
||||
node = node->getNext();
|
||||
}
|
||||
|
||||
return node;
|
||||
}
|
||||
@@ -31,15 +31,6 @@ struct JUTDbPrint {
|
||||
static u8 sDebugPrint[4 + 4 /* padding */];
|
||||
};
|
||||
|
||||
struct JUTAssertion {
|
||||
/* 802E495C */ void create();
|
||||
/* 802E4960 */ void flush_subroutine();
|
||||
/* 802E499C */ void flushMessage();
|
||||
/* 802E4A54 */ void flushMessage_dbPrint();
|
||||
/* 802E4C34 */ void setVisible(bool);
|
||||
/* 802E4C3C */ void setMessageCount(int);
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
@@ -11,14 +11,6 @@
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct __va_list_struct {};
|
||||
|
||||
struct _GXRenderModeObj {};
|
||||
|
||||
struct _GXGamma {};
|
||||
|
||||
struct OSContext {};
|
||||
|
||||
struct JUTGamePad {
|
||||
struct EPadPort {};
|
||||
|
||||
@@ -28,61 +20,6 @@ struct JUTGamePad {
|
||||
/* 802E0C6C */ void checkResetCallback(s64);
|
||||
};
|
||||
|
||||
struct JUTExternalFB {
|
||||
/* 802E40CC */ JUTExternalFB(_GXRenderModeObj*, _GXGamma, void*, u32);
|
||||
};
|
||||
|
||||
struct JUTDirectPrint {
|
||||
/* 802E456C */ void changeFrameBuffer(void*, u16, u16);
|
||||
};
|
||||
|
||||
struct JUTException {
|
||||
struct EInfoPage {};
|
||||
|
||||
/* 802E1D5C */ JUTException(JUTDirectPrint*);
|
||||
/* 802E1E40 */ void create(JUTDirectPrint*);
|
||||
/* 802E1EA8 */ void run();
|
||||
/* 802E1FCC */ void errorHandler(u16, OSContext*, u32, u32);
|
||||
/* 802E20C0 */ void panic_f_va(char const*, int, char const*, __va_list_struct*);
|
||||
/* 802E21FC */ void panic_f(char const*, int, char const*, ...);
|
||||
/* 802E227C */ void setFPException(u32);
|
||||
/* 802E22C4 */ void showFloatSub(int, f32);
|
||||
/* 802E2454 */ void showFloat(OSContext*);
|
||||
/* 802E2578 */ void searchPartialModule(u32, u32*, u32*, u32*, u32*);
|
||||
/* 802E26B0 */ void showStack(OSContext*);
|
||||
/* 802E27B0 */ void showMainInfo(u16, OSContext*, u32, u32);
|
||||
/* 802E2A84 */ void showGPR(OSContext*);
|
||||
/* 802E2B44 */ void showMapInfo_subroutine(u32, bool);
|
||||
/* 802E2CA0 */ void showGPRMap(OSContext*);
|
||||
/* 802E2DAC */ void showSRR0Map(OSContext*);
|
||||
/* 802E2E70 */ void printDebugInfo(JUTException::EInfoPage, u16, OSContext*, u32, u32);
|
||||
/* 802E2F18 */ void isEnablePad() const;
|
||||
/* 802E2F54 */ void readPad(u32*, u32*);
|
||||
/* 802E34C0 */ void printContext(u16, OSContext*, u32, u32);
|
||||
/* 802E3980 */ void waitTime(s32);
|
||||
/* 802E3A08 */ void createFB();
|
||||
/* 802E3AEC */ void setPreUserCallback(void (*)(u16, OSContext*, u32, u32));
|
||||
/* 802E3AFC */ void setPostUserCallback(void (*)(u16, OSContext*, u32, u32));
|
||||
/* 802E3B0C */ void appendMapFile(char const*);
|
||||
/* 802E3BA0 */ void queryMapAddress(char*, u32, s32, u32*, u32*, char*, u32, bool, bool);
|
||||
/* 802E3C90 */ void queryMapAddress_single(char*, u32, s32, u32*, u32*, char*, u32, bool, bool);
|
||||
/* 802E3FEC */ void createConsole(void*, u32);
|
||||
/* 802E40EC */ ~JUTException();
|
||||
|
||||
static u8 sMessageQueue[32];
|
||||
static void* sCpuExpName[17];
|
||||
static u8 sMapFileList[12 + 4 /* padding */];
|
||||
static u8 sMessageBuffer[4 + 4 /* padding */];
|
||||
static u8 sErrorManager[4];
|
||||
static u8 sPreUserCallback[4];
|
||||
static u8 sPostUserCallback[4];
|
||||
static u8 sConsoleBuffer[4];
|
||||
static u8 sConsoleBufferSize[4];
|
||||
static u8 sConsole[4];
|
||||
static u8 msr[4];
|
||||
static u8 fpscr[4];
|
||||
};
|
||||
|
||||
struct JUTDirectFile {
|
||||
/* 802E87F8 */ JUTDirectFile();
|
||||
/* 802E881C */ ~JUTDirectFile();
|
||||
@@ -191,8 +128,6 @@ extern "C" u8 fpscr__12JUTException[4];
|
||||
//
|
||||
|
||||
SECTION_INIT void memcpy();
|
||||
extern "C" void OSReport();
|
||||
extern "C" void OSPanic();
|
||||
extern "C" void* __nw__FUl();
|
||||
extern "C" void* __nw__FUlP7JKRHeapi();
|
||||
extern "C" void __dl__FPv();
|
||||
@@ -223,24 +158,11 @@ extern "C" void fclose__13JUTDirectFileFv();
|
||||
extern "C" void fgets__13JUTDirectFileFPvi();
|
||||
extern "C" void PPCMfmsr();
|
||||
extern "C" void PPCMtmsr();
|
||||
extern "C" void OSGetArenaHi();
|
||||
extern "C" void OSGetCurrentContext();
|
||||
extern "C" void OSGetStackPointer();
|
||||
extern "C" void OSFillFPUContext();
|
||||
extern "C" void OSSetErrorHandler();
|
||||
extern "C" void OSDisableInterrupts();
|
||||
extern "C" void OSEnableInterrupts();
|
||||
extern "C" void OSRestoreInterrupts();
|
||||
extern "C" void OSInitMessageQueue();
|
||||
extern "C" void OSSendMessage();
|
||||
extern "C" void OSReceiveMessage();
|
||||
extern "C" void OSProtectRange();
|
||||
extern "C" void OSGetCurrentThread();
|
||||
extern "C" void OSEnableScheduler();
|
||||
extern "C" void OSYieldThread();
|
||||
extern "C" void OSResumeThread();
|
||||
extern "C" void OSSuspendThread();
|
||||
extern "C" void OSGetTime();
|
||||
extern "C" void VISetPreRetraceCallback();
|
||||
extern "C" void VISetPostRetraceCallback();
|
||||
extern "C" void VIConfigure();
|
||||
|
||||
@@ -7,18 +7,6 @@
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JUTFont {
|
||||
/* 802DECF8 */ JUTFont();
|
||||
/* 802DED24 */ void initialize_state();
|
||||
/* 802DED70 */ void setCharColor(JUtility::TColor);
|
||||
/* 802DEDC4 */ void setGradColor(JUtility::TColor, JUtility::TColor);
|
||||
/* 802DEE28 */ void drawString_size_scale(f32, f32, f32, f32, char const*, u32, bool);
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
@@ -42,54 +30,64 @@ extern "C" extern void* __vt__7JUTFont[17];
|
||||
//
|
||||
|
||||
/* 802DECF8-802DED24 2D9638 002C+00 0/0 2/2 0/0 .text __ct__7JUTFontFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JUTFont::JUTFont() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JUtility/JUTFont/__ct__7JUTFontFv.s"
|
||||
JUTFont::JUTFont() : mColor1(), mColor2(), mColor3(), mColor4() {
|
||||
unk4 = 0;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DED24-802DED70 2D9664 004C+00 0/0 9/9 0/0 .text initialize_state__7JUTFontFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JUTFont::initialize_state() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JUtility/JUTFont/initialize_state__7JUTFontFv.s"
|
||||
void JUTFont::initialize_state() {
|
||||
setCharColor(JUtility::TColor());
|
||||
unk5 = false;
|
||||
unk8 = 0;
|
||||
unk4 = false;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DED70-802DEDC4 2D96B0 0054+00 1/1 3/3 0/0 .text setCharColor__7JUTFontFQ28JUtility6TColor */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JUTFont::setCharColor(JUtility::TColor param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JUtility/JUTFont/setCharColor__7JUTFontFQ28JUtility6TColor.s"
|
||||
void JUTFont::setCharColor(JUtility::TColor col1) {
|
||||
mColor1 = col1;
|
||||
mColor2 = col1;
|
||||
mColor3 = col1;
|
||||
mColor4 = col1;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DEDC4-802DEE28 2D9704 0064+00 0/0 2/2 0/0 .text
|
||||
* setGradColor__7JUTFontFQ28JUtility6TColorQ28JUtility6TColor */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JUTFont::setGradColor(JUtility::TColor param_0, JUtility::TColor param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JUtility/JUTFont/setGradColor__7JUTFontFQ28JUtility6TColorQ28JUtility6TColor.s"
|
||||
void JUTFont::setGradColor(JUtility::TColor col1, JUtility::TColor col2) {
|
||||
mColor1 = col1;
|
||||
mColor2 = col1;
|
||||
mColor3 = col2;
|
||||
mColor4 = col2;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802DEE28-802DEF48 2D9768 0120+00 0/0 3/3 0/0 .text drawString_size_scale__7JUTFontFffffPCcUlb
|
||||
*/
|
||||
#ifdef NON_MATCHING
|
||||
f32 JUTFont::drawString_size_scale(f32 a1, f32 a2, f32 a3, f32 a4, const char* str, u32 usz,
|
||||
bool a7) {
|
||||
f32 temp = a1;
|
||||
|
||||
for (; usz > 0; usz--, str++) {
|
||||
u32 b = *(u8*)str;
|
||||
if (isLeadByte(b)) {
|
||||
str++;
|
||||
b = (b << 8 | *(u8*)str);
|
||||
usz--;
|
||||
}
|
||||
|
||||
a1 += drawChar_scale(temp, a2, a3, a4, b, a7);
|
||||
a7 = 1;
|
||||
}
|
||||
|
||||
return a1 - temp;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JUTFont::drawString_size_scale(f32 param_0, f32 param_1, f32 param_2, f32 param_3,
|
||||
char const* param_4, u32 param_5, bool param_6) {
|
||||
asm f32 JUTFont::drawString_size_scale(f32 param_0, f32 param_1, f32 param_2, f32 param_3,
|
||||
char const* param_4, u32 param_5, bool param_6) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JUtility/JUTFont/drawString_size_scale__7JUTFontFffffPCcUlb.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
@@ -7,127 +7,14 @@
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
// can't type mPadList correctly because of __sinit
|
||||
// remove this once __sinit is decompiled
|
||||
#define mPadListHack (*(JSUList<JUTGamePad>*)&mPadList)
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct PADStatus {};
|
||||
|
||||
struct JUTGamePadLongPress {
|
||||
/* 802E1AFC */ void checkCallback(int, u32);
|
||||
|
||||
static u8 sPatternList[12];
|
||||
};
|
||||
|
||||
struct JUTGamePad {
|
||||
struct EPadPort {};
|
||||
|
||||
struct CButton {
|
||||
/* 802E1050 */ void clear();
|
||||
/* 802E108C */ void update(PADStatus const*, u32);
|
||||
/* 802E1A7C */ void setRepeat(u32, u32, u32);
|
||||
/* 802E1CD8 */ CButton();
|
||||
};
|
||||
|
||||
struct EStickMode {};
|
||||
|
||||
struct EWhichStick {};
|
||||
|
||||
struct CStick {
|
||||
/* 802E121C */ void clear();
|
||||
/* 802E1238 */ void update(s8, s8, JUTGamePad::EStickMode, JUTGamePad::EWhichStick, u32);
|
||||
/* 802E1500 */ void getButton(u32);
|
||||
/* 802E1CA8 */ CStick();
|
||||
|
||||
static f32 sPressPoint;
|
||||
static f32 sReleasePoint;
|
||||
};
|
||||
|
||||
struct CRumble {
|
||||
struct ERumble {};
|
||||
|
||||
/* 802E15B4 */ void clear();
|
||||
/* 802E15D8 */ void clear(JUTGamePad*);
|
||||
/* 802E1634 */ void startMotor(int);
|
||||
/* 802E168C */ void stopMotor(int, bool);
|
||||
/* 802E1720 */ void update(s16);
|
||||
/* 802E18A4 */ void triggerPatternedRumble(u32);
|
||||
/* 802E18CC */ void startPatternedRumble(void*, JUTGamePad::CRumble::ERumble, u32);
|
||||
/* 802E1948 */ void stopPatternedRumble(s16);
|
||||
/* 802E1978 */ void stopPatternedRumbleAtThePeriod();
|
||||
/* 802E19D8 */ void setEnabled(u32);
|
||||
|
||||
static u8 sChannelMask[16];
|
||||
static u8 mStatus[4];
|
||||
static u8 mEnabled[4];
|
||||
};
|
||||
|
||||
struct C3ButtonReset {
|
||||
static u32 sResetPattern;
|
||||
static u32 sResetMaskPattern;
|
||||
static u8 sCallback[4];
|
||||
static u8 sCallbackArg[4 + 4 /* padding */];
|
||||
static u8 sThreshold[4];
|
||||
static u8 sResetOccurredPort[4];
|
||||
};
|
||||
|
||||
/* 802E06DC */ JUTGamePad(JUTGamePad::EPadPort);
|
||||
/* 802E07B0 */ ~JUTGamePad();
|
||||
/* 802E085C */ void initList();
|
||||
/* 802E0898 */ void init();
|
||||
/* 802E08D0 */ void clear();
|
||||
/* 802E08E4 */ void read();
|
||||
/* 802E0BBC */ void assign();
|
||||
/* 802E0C6C */ void checkResetCallback(s64);
|
||||
/* 802E0CD8 */ void update();
|
||||
/* 802E0FA4 */ void checkResetSwitch();
|
||||
/* 802E1024 */ void clearForReset();
|
||||
/* 802E199C */ void getGamePad(int);
|
||||
/* 802E1A98 */ void recalibrate(u32);
|
||||
|
||||
static u8 mPadList[12];
|
||||
static u8 mPadStatus[48];
|
||||
static u8 mPadButton[192];
|
||||
static u8 mPadMStick[64];
|
||||
static u8 mPadSStick[64];
|
||||
static u32 sStickMode;
|
||||
static u32 sClampMode;
|
||||
static u8 mPadAssign[4];
|
||||
static u8 sSuppressPadReset[4];
|
||||
static u8 sAnalogMode[4];
|
||||
static u8 sRumbleSupported[4];
|
||||
};
|
||||
|
||||
struct JSUPtrLink {
|
||||
/* 802DBDFC */ JSUPtrLink(void*);
|
||||
/* 802DBE14 */ ~JSUPtrLink();
|
||||
};
|
||||
|
||||
struct JSUPtrList {
|
||||
/* 802DBE74 */ JSUPtrList(bool);
|
||||
/* 802DBEAC */ ~JSUPtrList();
|
||||
/* 802DBF14 */ void initiate();
|
||||
/* 802DBF4C */ void append(JSUPtrLink*);
|
||||
/* 802DC15C */ void remove(JSUPtrLink*);
|
||||
};
|
||||
|
||||
template <typename A0>
|
||||
struct JSUList {};
|
||||
/* JSUList<JUTGamePadLongPress> */
|
||||
struct JSUList__template11 {
|
||||
/* 802E1C54 */ void func_802E1C54(void* _this);
|
||||
};
|
||||
|
||||
/* JSUList<JUTGamePad> */
|
||||
struct JSUList__template12 {
|
||||
/* 802E1D08 */ void func_802E1D08(void* _this);
|
||||
};
|
||||
|
||||
struct JKRDisposer {
|
||||
/* 802D147C */ JKRDisposer();
|
||||
/* 802D14E4 */ ~JKRDisposer();
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
@@ -208,16 +95,6 @@ extern "C" void initiate__10JSUPtrListFv();
|
||||
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void OSGetResetSwitchState();
|
||||
extern "C" void OSGetTime();
|
||||
extern "C" void PADClamp();
|
||||
extern "C" void PADClampCircle();
|
||||
extern "C" void PADReset();
|
||||
extern "C" void PADRecalibrate();
|
||||
extern "C" void PADInit();
|
||||
extern "C" void PADRead();
|
||||
extern "C" void PADControlMotor();
|
||||
extern "C" void PADSetSpec();
|
||||
extern "C" void PADSetAnalogMode();
|
||||
extern "C" void __register_global_object();
|
||||
extern "C" void __construct_array();
|
||||
extern "C" void _savegpr_22();
|
||||
@@ -237,8 +114,11 @@ extern "C" extern u32 __float_nan;
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CC5F0-803CC600 029710 0010+00 3/3 0/0 0/0 .data sChannelMask__Q210JUTGamePad7CRumble */
|
||||
SECTION_DATA u8 JUTGamePad::CRumble::sChannelMask[16] = {
|
||||
0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||
SECTION_DATA PADMask JUTGamePad::CRumble::sChannelMask[4] = {
|
||||
PAD_CHAN0_BIT,
|
||||
PAD_CHAN1_BIT,
|
||||
PAD_CHAN2_BIT,
|
||||
PAD_CHAN3_BIT,
|
||||
};
|
||||
|
||||
/* 803CC600-803CC610 029720 0010+00 2/2 0/0 0/0 .data channel_mask */
|
||||
@@ -262,13 +142,22 @@ static u8 lit_525[12];
|
||||
u8 JUTGamePad::mPadList[12];
|
||||
|
||||
/* 804514D0-804514D4 0009D0 0004+00 1/1 0/0 0/0 .sbss None */
|
||||
static u8 data_804514D0[4];
|
||||
static bool data_804514D0;
|
||||
|
||||
/* 804514D4-804514D8 0009D4 0004+00 3/3 0/0 0/0 .sbss mPadAssign__10JUTGamePad */
|
||||
u8 JUTGamePad::mPadAssign[4];
|
||||
|
||||
/* 802E06DC-802E07B0 2DB01C 00D4+00 0/0 4/4 0/0 .text __ct__10JUTGamePadFQ210JUTGamePad8EPadPort
|
||||
*/
|
||||
#ifdef NONMATCHING
|
||||
// TODO(erin): probably ~easy to do, i just didn't do it yet :)
|
||||
JUTGamePad::JUTGamePad(EPadPort port) : ptr_link(this) {
|
||||
this->buttons.clear();
|
||||
this->control_stick.clear();
|
||||
this->c_stick.clear();
|
||||
this->rumble.clear();
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -277,6 +166,7 @@ asm JUTGamePad::JUTGamePad(JUTGamePad::EPadPort param_0) {
|
||||
#include "asm/JSystem/JUtility/JUTGamePad/__ct__10JUTGamePadFQ210JUTGamePad8EPadPort.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802E07B0-802E085C 2DB0F0 00AC+00 1/0 2/2 0/0 .text __dt__10JUTGamePadFv */
|
||||
#pragma push
|
||||
@@ -289,45 +179,38 @@ asm JUTGamePad::~JUTGamePad() {
|
||||
#pragma pop
|
||||
|
||||
/* 802E085C-802E0898 2DB19C 003C+00 1/1 0/0 0/0 .text initList__10JUTGamePadFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JUTGamePad::initList() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JUtility/JUTGamePad/initList__10JUTGamePadFv.s"
|
||||
void JUTGamePad::initList() {
|
||||
if (/* mIsPadListInitialized */ data_804514D0 == false) {
|
||||
mPadListHack.initiate();
|
||||
data_804514D0 = true;
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 804514D8-804514DC 0009D8 0004+00 2/2 0/0 0/0 .sbss sSuppressPadReset__10JUTGamePad */
|
||||
u8 JUTGamePad::sSuppressPadReset[4];
|
||||
|
||||
/* 804514DC-804514E0 0009DC 0004+00 1/1 1/1 0/0 .sbss sAnalogMode__10JUTGamePad */
|
||||
u8 JUTGamePad::sAnalogMode[4];
|
||||
s32 JUTGamePad::sAnalogMode;
|
||||
|
||||
/* 802E0898-802E08D0 2DB1D8 0038+00 0/0 1/1 0/0 .text init__10JUTGamePadFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JUTGamePad::init() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JUtility/JUTGamePad/init__10JUTGamePadFv.s"
|
||||
s32 JUTGamePad::init() {
|
||||
PADSetSpec(5);
|
||||
sAnalogMode = 3;
|
||||
PADSetAnalogMode(3);
|
||||
|
||||
return PADInit();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802E08D0-802E08E4 2DB210 0014+00 1/1 0/0 0/0 .text clear__10JUTGamePadFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JUTGamePad::clear() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JUtility/JUTGamePad/clear__10JUTGamePadFv.s"
|
||||
void JUTGamePad::clear() {
|
||||
this->field_0x98 = 0;
|
||||
this->field_0xa8 = 1;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 804343F0-80434420 061110 0030+00 1/3 1/1 0/0 .bss mPadStatus__10JUTGamePad */
|
||||
u8 JUTGamePad::mPadStatus[48];
|
||||
PADStatus JUTGamePad::mPadStatus[4];
|
||||
|
||||
/* 80434420-804344E0 061140 00C0+00 1/4 0/0 0/0 .bss mPadButton__10JUTGamePad */
|
||||
u8 JUTGamePad::mPadButton[192];
|
||||
@@ -364,6 +247,27 @@ asm void JUTGamePad::read() {
|
||||
#pragma pop
|
||||
|
||||
/* 802E0BBC-802E0C6C 2DB4FC 00B0+00 1/1 0/0 0/0 .text assign__10JUTGamePadFv */
|
||||
#if 0
|
||||
// matches if all static variables have their proper type
|
||||
void JUTGamePad::assign() {
|
||||
s32 iVar3 = 0;
|
||||
|
||||
for (s32 i = 4; i > 0; i--) {
|
||||
if ((/* mPadStatus */ lbl_804343F0[iVar3].error == 0) &&
|
||||
(/* *puVar2 */ lbl_804514D4[iVar3] == 0)) {
|
||||
this->pad_port = iVar3;
|
||||
/* JUTGamePad::mPadAssign[iVar3] */ /* *puVar2 */ lbl_804514D4[iVar3] = 1;
|
||||
/* JUTGamePad::mPadButton */ lbl_80434420[iVar3].setRepeat(
|
||||
this->buttons.field_0x24, this->buttons.field_0x28, this->buttons.field_0x2c);
|
||||
this->rumble.clear(this);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
iVar3++;
|
||||
}
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -372,47 +276,49 @@ asm void JUTGamePad::assign() {
|
||||
#include "asm/JSystem/JUtility/JUTGamePad/assign__10JUTGamePadFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 804514E4-804514E8 0009E4 0004+00 5/5 0/0 0/0 .sbss mStatus__Q210JUTGamePad7CRumble */
|
||||
u8 JUTGamePad::CRumble::mStatus[4];
|
||||
bool JUTGamePad::CRumble::mStatus[4];
|
||||
|
||||
/* 804514E8-804514EC 0009E8 0004+00 5/5 0/0 0/0 .sbss mEnabled__Q210JUTGamePad7CRumble */
|
||||
u8 JUTGamePad::CRumble::mEnabled[4];
|
||||
PADMask JUTGamePad::CRumble::mEnabled;
|
||||
|
||||
/* 804514EC-804514F0 0009EC 0004+00 2/2 4/4 0/0 .sbss sCallback__Q210JUTGamePad13C3ButtonReset */
|
||||
u8 JUTGamePad::C3ButtonReset::sCallback[4];
|
||||
callbackFn JUTGamePad::C3ButtonReset::sCallback;
|
||||
|
||||
/* 804514F0-804514F8 0009F0 0004+04 2/2 4/4 0/0 .sbss sCallbackArg__Q210JUTGamePad13C3ButtonReset
|
||||
*/
|
||||
u8 JUTGamePad::C3ButtonReset::sCallbackArg[4 + 4 /* padding */];
|
||||
void* JUTGamePad::C3ButtonReset::sCallbackArg;
|
||||
|
||||
/* 804514F8-804514FC 0009F8 0004+00 2/2 0/0 0/0 .sbss sThreshold__Q210JUTGamePad13C3ButtonReset */
|
||||
u8 JUTGamePad::C3ButtonReset::sThreshold[4];
|
||||
|
||||
/* 804514FC-80451500 0009FC 0004+00 2/2 0/0 0/0 .sbss None */
|
||||
static u8 data_804514FC[4];
|
||||
/* 804514F8-80451500 0009F8 0008+00 2/2 0/0 0/0 .sbss sThreshold__Q210JUTGamePad13C3ButtonReset */
|
||||
OSTime JUTGamePad::C3ButtonReset::sThreshold;
|
||||
|
||||
/* 80451500-80451504 -00001 0004+00 3/3 6/6 0/0 .sbss None */
|
||||
/* 80451500 0001+00 data_80451500 None */
|
||||
/* 80451501 0003+00 data_80451501 None */
|
||||
extern u8 struct_80451500[4];
|
||||
u8 struct_80451500[4];
|
||||
extern bool struct_80451500;
|
||||
bool struct_80451500;
|
||||
bool struct_80451501;
|
||||
|
||||
/* 80451504-80451508 000A04 0004+00 2/2 0/0 0/0 .sbss
|
||||
* sResetOccurredPort__Q210JUTGamePad13C3ButtonReset */
|
||||
u8 JUTGamePad::C3ButtonReset::sResetOccurredPort[4];
|
||||
s32 JUTGamePad::C3ButtonReset::sResetOccurredPort;
|
||||
|
||||
/* 802E0C6C-802E0CD8 2DB5AC 006C+00 1/1 1/1 0/0 .text checkResetCallback__10JUTGamePadFx
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JUTGamePad::checkResetCallback(s64 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JUtility/JUTGamePad/checkResetCallback__10JUTGamePadFx.s"
|
||||
void JUTGamePad::checkResetCallback(OSTime unk) {
|
||||
if (unk < JUTGamePad::C3ButtonReset::sThreshold)
|
||||
return;
|
||||
|
||||
struct_80451501 = true;
|
||||
JUTGamePad::C3ButtonReset::sResetOccurredPort = this->pad_port;
|
||||
if (JUTGamePad::C3ButtonReset::sCallback != NULL) {
|
||||
JUTGamePad::C3ButtonReset::sCallback(this->pad_port,
|
||||
JUTGamePad::C3ButtonReset::sCallbackArg);
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80434560-8043456C 061280 000C+00 0/1 0/0 0/0 .bss @1373 */
|
||||
@@ -496,7 +402,7 @@ SECTION_SDATA2 static f64 lit_1050 = 4503601774854144.0 /* cast s32 to float */;
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JUTGamePad::CButton::update(PADStatus const* param_0, u32 param_1) {
|
||||
asm u32 JUTGamePad::CButton::update(PADStatus const* param_0, u32 param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JUtility/JUTGamePad/update__Q210JUTGamePad7CButtonFPC9PADStatusUl.s"
|
||||
}
|
||||
@@ -543,8 +449,8 @@ SECTION_SDATA2 static f32 lit_1121 = 10430.37890625f;
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JUTGamePad::CStick::update(s8 param_0, s8 param_1, JUTGamePad::EStickMode param_2,
|
||||
JUTGamePad::EWhichStick param_3, u32 param_4) {
|
||||
asm u32 JUTGamePad::CStick::update(s8 param_0, s8 param_1, JUTGamePad::EStickMode param_2,
|
||||
JUTGamePad::EWhichStick param_3, u32 param_4) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JUtility/JUTGamePad/func_802E1238.s"
|
||||
}
|
||||
@@ -555,7 +461,7 @@ asm void JUTGamePad::CStick::update(s8 param_0, s8 param_1, JUTGamePad::EStickMo
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JUTGamePad::CStick::getButton(u32 param_0) {
|
||||
asm u32 JUTGamePad::CStick::getButton(u32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JUtility/JUTGamePad/getButton__Q210JUTGamePad6CStickFUl.s"
|
||||
}
|
||||
@@ -672,7 +578,7 @@ asm void JUTGamePad::CRumble::stopPatternedRumbleAtThePeriod() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JUTGamePad::getGamePad(int param_0) {
|
||||
asm JUTGamePad* JUTGamePad::getGamePad(int param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JUtility/JUTGamePad/getGamePad__10JUTGamePadFi.s"
|
||||
}
|
||||
@@ -702,7 +608,7 @@ asm void JUTGamePad::CButton::setRepeat(u32 param_0, u32 param_1, u32 param_2) {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JUTGamePad::recalibrate(u32 param_0) {
|
||||
asm bool JUTGamePad::recalibrate(u32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JUtility/JUTGamePad/recalibrate__10JUTGamePadFUl.s"
|
||||
}
|
||||
|
||||
@@ -11,30 +11,10 @@
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct _GXRenderModeObj {};
|
||||
|
||||
struct JUTXfb {
|
||||
static u8 sManager[4 + 4 /* padding */];
|
||||
};
|
||||
|
||||
struct JUTVideo {
|
||||
/* 802E4C54 */ void createManager(_GXRenderModeObj const*);
|
||||
/* 802E4CAC */ void destroyManager();
|
||||
/* 802E4CF4 */ JUTVideo(_GXRenderModeObj const*);
|
||||
/* 802E4DE8 */ ~JUTVideo();
|
||||
/* 802E4E50 */ void preRetraceProc(u32);
|
||||
/* 802E5088 */ void drawDoneStart();
|
||||
/* 802E50B0 */ void dummyNoDrawWait();
|
||||
/* 802E50BC */ void drawDoneCallback();
|
||||
/* 802E5144 */ void postRetraceProc(u32);
|
||||
/* 802E5198 */ void setRenderMode(_GXRenderModeObj const*);
|
||||
/* 802E5210 */ void waitRetraceIfNeed();
|
||||
|
||||
static u8 sManager[4];
|
||||
static u8 sVideoLastTick[4];
|
||||
static u8 sVideoInterval[4];
|
||||
};
|
||||
|
||||
struct JUTDirectPrint {
|
||||
/* 802E456C */ void changeFrameBuffer(void*, u16, u16);
|
||||
|
||||
@@ -67,9 +47,6 @@ extern "C" u8 sVideoInterval__8JUTVideo[4];
|
||||
extern "C" void* __nw__FUl();
|
||||
extern "C" void __dl__FPv();
|
||||
extern "C" void changeFrameBuffer__14JUTDirectPrintFPvUsUs();
|
||||
extern "C" void OSInitMessageQueue();
|
||||
extern "C" void OSSendMessage();
|
||||
extern "C" void OSGetTick();
|
||||
extern "C" void VISetPreRetraceCallback();
|
||||
extern "C" void VISetPostRetraceCallback();
|
||||
extern "C" void VIInit();
|
||||
@@ -80,9 +57,7 @@ extern "C" void VISetNextFrameBuffer();
|
||||
extern "C" void VIGetNextFrameBuffer();
|
||||
extern "C" void VISetBlack();
|
||||
extern "C" void VIGetRetraceCount();
|
||||
extern "C" void GXFlush();
|
||||
extern "C" void GXSetDrawDone();
|
||||
extern "C" void GXSetDrawDoneCallback();
|
||||
extern "C" void GXCopyDisp();
|
||||
extern "C" u8 sDirectPrint__14JUTDirectPrint[4 + 4 /* padding */];
|
||||
extern "C" u8 sManager__6JUTXfb[4 + 4 /* padding */];
|
||||
@@ -93,7 +68,7 @@ extern "C" u8 sManager__6JUTXfb[4 + 4 /* padding */];
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80451538-8045153C 000A38 0004+00 4/4 18/18 1/1 .sbss sManager__8JUTVideo */
|
||||
u8 JUTVideo::sManager[4];
|
||||
JUTVideo* JUTVideo::sManager;
|
||||
|
||||
/* 802E4C54-802E4CAC 2DF594 0058+00 0/0 1/1 0/0 .text
|
||||
* createManager__8JUTVideoFPC16_GXRenderModeObj */
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "SSystem/SComponent/c_math.h"
|
||||
#include "SSystem/SComponent/c_xyz.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/mtx/mtxvec.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "msl_c/math.h"
|
||||
#include "msl_c/string.h"
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
|
||||
#include "SSystem/SComponent/c_m3d_g_aab.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/mtx/vec.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "mtx_vec.h"
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
#include "dol2asm.h"
|
||||
#include "global.h"
|
||||
#include "msl_c/math.h"
|
||||
#include "mtx_vec.h"
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
|
||||
@@ -14,9 +14,6 @@
|
||||
extern "C" void ARRegisterDMACallback();
|
||||
extern "C" void ARGetDMAStatus();
|
||||
extern "C" void ARStartDMA();
|
||||
extern "C" void ARAlloc();
|
||||
extern "C" void ARInit();
|
||||
extern "C" u32 ARGetSize();
|
||||
extern "C" void __ARHandler();
|
||||
extern "C" void __ARClearInterrupt();
|
||||
extern "C" void __ARGetInterruptStatus();
|
||||
@@ -99,7 +96,7 @@ static u8 __AR_BlockLength[4];
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void ARAlloc() {
|
||||
asm u32 ARAlloc(u32) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/ar/ar/ARAlloc.s"
|
||||
}
|
||||
@@ -197,7 +194,7 @@ static u8 __AR_init_flag[4];
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void ARInit() {
|
||||
asm u32 ARInit(u32*, u32) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/ar/ar/ARInit.s"
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ extern "C" void __ARQServiceQueueLo();
|
||||
extern "C" void __ARQCallbackHack();
|
||||
extern "C" void __ARQInterruptServiceRoutine();
|
||||
extern "C" void ARQInit();
|
||||
extern "C" void ARQPostRequest();
|
||||
|
||||
//
|
||||
// External References:
|
||||
@@ -186,7 +185,8 @@ asm void ARQInit() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void ARQPostRequest() {
|
||||
asm void ARQPostRequest(ARQRequest* task, u32 owner, u32 type, u32 priority, u32 source,
|
||||
u32 destination, u32 length, ARQCallback callback) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/ar/arq/ARQPostRequest.s"
|
||||
}
|
||||
|
||||
@@ -47,15 +47,11 @@ extern "C" void DVDReadDiskID();
|
||||
extern "C" void DVDCancelStreamAsync();
|
||||
extern "C" void DVDInquiryAsync();
|
||||
extern "C" void DVDReset();
|
||||
extern "C" void DVDGetCommandBlockStatus();
|
||||
extern "C" void DVDGetDriveStatus();
|
||||
extern "C" void DVDSetAutoInvalidation();
|
||||
extern "C" void DVDResume();
|
||||
extern "C" static void DVDCancelAsync();
|
||||
extern "C" void DVDCancel();
|
||||
extern "C" static void cbForCancelSync();
|
||||
extern "C" void DVDGetCurrentDiskID();
|
||||
extern "C" void DVDCheckDisk();
|
||||
extern "C" void __DVDPrepareResetAsync();
|
||||
extern "C" void __DVDTestAlarm();
|
||||
|
||||
@@ -689,7 +685,7 @@ asm void DVDReset() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void DVDGetCommandBlockStatus() {
|
||||
asm int DVDGetCommandBlockStatus(DVDCommandBlock*) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/dvd/dvd/DVDGetCommandBlockStatus.s"
|
||||
}
|
||||
@@ -699,7 +695,7 @@ asm void DVDGetCommandBlockStatus() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void DVDGetDriveStatus() {
|
||||
asm DVDState DVDGetDriveStatus() {
|
||||
nofralloc
|
||||
#include "asm/dolphin/dvd/dvd/DVDGetDriveStatus.s"
|
||||
}
|
||||
@@ -847,7 +843,7 @@ static asm void cbForCancelSync() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void DVDGetCurrentDiskID() {
|
||||
asm DVDDiskID* DVDGetCurrentDiskID() {
|
||||
nofralloc
|
||||
#include "asm/dolphin/dvd/dvd/DVDGetCurrentDiskID.s"
|
||||
}
|
||||
@@ -877,7 +873,7 @@ SECTION_DATA static void* lit_1060[13 + 1 /* padding */] = {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void DVDCheckDisk() {
|
||||
asm s32 DVDCheckDisk() {
|
||||
nofralloc
|
||||
#include "asm/dolphin/dvd/dvd/DVDCheckDisk.s"
|
||||
}
|
||||
|
||||
+20
-47
@@ -5,38 +5,9 @@
|
||||
|
||||
#include "dolphin/mtx/mtx.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/mtx/mtxvec.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void PSMTXIdentity();
|
||||
extern "C" void PSMTXCopy();
|
||||
extern "C" void PSMTXConcat();
|
||||
extern "C" void PSMTXInverse();
|
||||
extern "C" void PSMTXRotRad();
|
||||
extern "C" static void PSMTXRotTrig();
|
||||
extern "C" void __PSMTXRotAxisRadInternal();
|
||||
extern "C" void PSMTXRotAxisRad();
|
||||
extern "C" void PSMTXTrans();
|
||||
extern "C" void PSMTXTransApply();
|
||||
extern "C" void PSMTXScale();
|
||||
extern "C" void PSMTXScaleApply();
|
||||
extern "C" void PSMTXQuat();
|
||||
extern "C" void C_MTXLookAt();
|
||||
extern "C" void C_MTXLightPerspective();
|
||||
extern "C" void C_MTXLightOrtho();
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void PSVECNormalize();
|
||||
extern "C" void PSVECCrossProduct();
|
||||
extern "C" void tanf();
|
||||
extern "C" void sinf();
|
||||
extern "C" void cosf();
|
||||
#include "msl_c/math.h"
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
@@ -58,7 +29,7 @@ SECTION_SDATA2 static u8 lit_97[4] = {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSMTXIdentity() {
|
||||
asm void PSMTXIdentity(Mtx matrix) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx/PSMTXIdentity.s"
|
||||
}
|
||||
@@ -68,7 +39,7 @@ asm void PSMTXIdentity() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSMTXCopy() {
|
||||
asm void PSMTXCopy(const Mtx src, Mtx dst) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx/PSMTXCopy.s"
|
||||
}
|
||||
@@ -84,7 +55,7 @@ SECTION_SDATA static u8 Unit01[8] = {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSMTXConcat() {
|
||||
asm void PSMTXConcat(const Mtx src_a, const Mtx src_b, Mtx dst) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx/PSMTXConcat.s"
|
||||
}
|
||||
@@ -94,7 +65,7 @@ asm void PSMTXConcat() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSMTXInverse() {
|
||||
asm u32 PSMTXInverse(const Mtx src, Mtx dst) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx/PSMTXInverse.s"
|
||||
}
|
||||
@@ -104,7 +75,7 @@ asm void PSMTXInverse() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSMTXRotRad() {
|
||||
asm void PSMTXRotRad(Mtx matrix, u8 axis, float rad) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx/PSMTXRotRad.s"
|
||||
}
|
||||
@@ -114,7 +85,7 @@ asm void PSMTXRotRad() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
static asm void PSMTXRotTrig() {
|
||||
asm void PSMTXRotTrig(Mtx matrix, u8 axis, float sin, float cos) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx/PSMTXRotTrig.s"
|
||||
}
|
||||
@@ -131,7 +102,7 @@ SECTION_SDATA2 static f32 lit_191 = 3.0f;
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void __PSMTXRotAxisRadInternal() {
|
||||
asm double __PSMTXRotAxisRadInternal(double param_1, double param_2, int param_3, int param_4) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx/__PSMTXRotAxisRadInternal.s"
|
||||
}
|
||||
@@ -141,7 +112,7 @@ asm void __PSMTXRotAxisRadInternal() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSMTXRotAxisRad() {
|
||||
asm void PSMTXRotAxisRad(Mtx matrix, const Vec* axis, float rad) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx/PSMTXRotAxisRad.s"
|
||||
}
|
||||
@@ -151,7 +122,7 @@ asm void PSMTXRotAxisRad() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSMTXTrans() {
|
||||
asm void PSMTXTrans(Mtx matrix, float x_trans, float y_trans, float z_trans) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx/PSMTXTrans.s"
|
||||
}
|
||||
@@ -161,7 +132,7 @@ asm void PSMTXTrans() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSMTXTransApply() {
|
||||
asm void PSMTXTransApply(const Mtx src, Mtx dst, float x, float y, float z) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx/PSMTXTransApply.s"
|
||||
}
|
||||
@@ -171,7 +142,7 @@ asm void PSMTXTransApply() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSMTXScale() {
|
||||
asm void PSMTXScale(Mtx matrix, float x_scale, float y_scale, float z_scale) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx/PSMTXScale.s"
|
||||
}
|
||||
@@ -181,7 +152,7 @@ asm void PSMTXScale() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSMTXScaleApply() {
|
||||
asm void PSMTXScaleApply(const Mtx src, Mtx dst, float x_scale, float y_scale, float z_scale) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx/PSMTXScaleApply.s"
|
||||
}
|
||||
@@ -191,7 +162,7 @@ asm void PSMTXScaleApply() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSMTXQuat() {
|
||||
asm void PSMTXQuat(Mtx matrix, const Quaternion* quat) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx/PSMTXQuat.s"
|
||||
}
|
||||
@@ -201,7 +172,7 @@ asm void PSMTXQuat() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void C_MTXLookAt() {
|
||||
asm void C_MTXLookAt(Mtx param_1, const Vec* param_2, const Vec* param_3, const Vec* param_4) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx/C_MTXLookAt.s"
|
||||
}
|
||||
@@ -225,7 +196,8 @@ SECTION_SDATA2 static f32 lit_230[1 + 1 /* padding */] = {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void C_MTXLightPerspective() {
|
||||
asm void C_MTXLightPerspective(Mtx matrix, float fov_y, float aspect, float scale_s, float scale_t,
|
||||
float trans_s, float trans_t) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx/C_MTXLightPerspective.s"
|
||||
}
|
||||
@@ -235,7 +207,8 @@ asm void C_MTXLightPerspective() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void C_MTXLightOrtho() {
|
||||
asm void C_MTXLightOrtho(Mtx matrix, float top, float bottom, float left, float right,
|
||||
float scale_s, float scale_t, float trans_s, float trans_t) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx/C_MTXLightOrtho.s"
|
||||
}
|
||||
|
||||
@@ -6,19 +6,7 @@
|
||||
#include "dolphin/mtx/mtx44.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void C_MTXPerspective();
|
||||
extern "C" void C_MTXOrtho();
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void tanf();
|
||||
#include "msl_c/math.h"
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
@@ -52,7 +40,7 @@ SECTION_SDATA2 static f32 lit_106 = 0.01745329238474369f;
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void C_MTXPerspective() {
|
||||
asm void C_MTXPerspective(Mtx44 matrix, float fov_y, float aspect, float near, float far) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx44/C_MTXPerspective.s"
|
||||
}
|
||||
@@ -62,7 +50,8 @@ asm void C_MTXPerspective() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void C_MTXOrtho() {
|
||||
asm void C_MTXOrtho(Mtx44 matrix, float top, float bottom, float left, float right, float near,
|
||||
float far) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtx44/C_MTXOrtho.s"
|
||||
}
|
||||
|
||||
@@ -7,19 +7,6 @@
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void PSMTXMultVec();
|
||||
extern "C" void PSMTXMultVecArray();
|
||||
extern "C" void PSMTXMultVecSR();
|
||||
extern "C" void PSMTXMultVecArraySR();
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
@@ -28,7 +15,7 @@ extern "C" void PSMTXMultVecArraySR();
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSMTXMultVec() {
|
||||
asm void PSMTXMultVec(const Mtx matrix, const Vec* src, Vec* dst) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtxvec/PSMTXMultVec.s"
|
||||
}
|
||||
@@ -38,7 +25,7 @@ asm void PSMTXMultVec() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSMTXMultVecArray() {
|
||||
asm void PSMTXMultVecArray(const Mtx matrix, const Vec* src, Vec* dst, u32 count) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtxvec/PSMTXMultVecArray.s"
|
||||
}
|
||||
@@ -48,7 +35,7 @@ asm void PSMTXMultVecArray() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSMTXMultVecSR() {
|
||||
asm void PSMTXMultVecSR(const Mtx matrix, const Vec* src, Vec* dst) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtxvec/PSMTXMultVecSR.s"
|
||||
}
|
||||
@@ -58,7 +45,7 @@ asm void PSMTXMultVecSR() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSMTXMultVecArraySR() {
|
||||
asm void PSMTXMultVecArraySR(const Mtx matrix, const Vec* src, Vec* dst, u32 count) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/mtxvec/PSMTXMultVecArraySR.s"
|
||||
}
|
||||
|
||||
@@ -6,23 +6,7 @@
|
||||
#include "dolphin/mtx/quat.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void PSQUATMultiply();
|
||||
extern "C" void C_QUATRotAxisRad();
|
||||
extern "C" void C_QUATSlerp();
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void PSVECNormalize();
|
||||
extern "C" void sinf();
|
||||
extern "C" void cosf();
|
||||
extern "C" void acosf();
|
||||
#include "msl_c/math.h"
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
@@ -32,7 +16,7 @@ extern "C" void acosf();
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSQUATMultiply() {
|
||||
asm void PSQUATMultiply(const Quaternion* src_a, const Quaternion* src_b, Quaternion* dst) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/quat/PSQUATMultiply.s"
|
||||
}
|
||||
@@ -57,7 +41,7 @@ SECTION_SDATA2 static f32 lit_135 = 0.5f;
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void C_QUATRotAxisRad() {
|
||||
asm void C_QUATRotAxisRad(Quaternion* quat, const Vec* axis, float rad) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/quat/C_QUATRotAxisRad.s"
|
||||
}
|
||||
@@ -71,7 +55,7 @@ SECTION_SDATA2 static f32 lit_261 = 0.9999899864196777f;
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void C_QUATSlerp() {
|
||||
asm void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, float t) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/quat/C_QUATSlerp.s"
|
||||
}
|
||||
|
||||
+12
-33
@@ -7,27 +7,6 @@
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void PSVECAdd();
|
||||
extern "C" void PSVECSubtract();
|
||||
extern "C" void PSVECScale();
|
||||
extern "C" void PSVECNormalize();
|
||||
extern "C" void PSVECSquareMag();
|
||||
extern "C" void PSVECMag();
|
||||
extern "C" void PSVECDotProduct();
|
||||
extern "C" void PSVECCrossProduct();
|
||||
extern "C" void C_VECHalfAngle();
|
||||
extern "C" void C_VECReflect();
|
||||
extern "C" void PSVECSquareDistance();
|
||||
extern "C" void PSVECDistance();
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
@@ -36,7 +15,7 @@ extern "C" void PSVECDistance();
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSVECAdd() {
|
||||
asm void PSVECAdd(const Vec* src_a, const Vec* src_b, Vec* dst) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/vec/PSVECAdd.s"
|
||||
}
|
||||
@@ -46,7 +25,7 @@ asm void PSVECAdd() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSVECSubtract() {
|
||||
asm void PSVECSubtract(const Vec* a, const Vec* b, Vec* dst) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/vec/PSVECSubtract.s"
|
||||
}
|
||||
@@ -56,7 +35,7 @@ asm void PSVECSubtract() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSVECScale() {
|
||||
asm void PSVECScale(const Vec* src, Vec* dst, float scale) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/vec/PSVECScale.s"
|
||||
}
|
||||
@@ -81,7 +60,7 @@ SECTION_SDATA2 static f32 lit_119 = 3.0f;
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSVECNormalize() {
|
||||
asm void PSVECNormalize(const Vec* src, Vec* dst) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/vec/PSVECNormalize.s"
|
||||
}
|
||||
@@ -91,7 +70,7 @@ asm void PSVECNormalize() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSVECSquareMag() {
|
||||
asm float PSVECSquareMag(const Vec* vec) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/vec/PSVECSquareMag.s"
|
||||
}
|
||||
@@ -101,7 +80,7 @@ asm void PSVECSquareMag() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSVECMag() {
|
||||
asm float PSVECMag(const Vec* data) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/vec/PSVECMag.s"
|
||||
}
|
||||
@@ -111,7 +90,7 @@ asm void PSVECMag() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSVECDotProduct() {
|
||||
asm float PSVECDotProduct(const Vec* a, const Vec* b) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/vec/PSVECDotProduct.s"
|
||||
}
|
||||
@@ -121,7 +100,7 @@ asm void PSVECDotProduct() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSVECCrossProduct() {
|
||||
asm void PSVECCrossProduct(const Vec* src_a, const Vec* src_b, Vec* dst) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/vec/PSVECCrossProduct.s"
|
||||
}
|
||||
@@ -131,7 +110,7 @@ asm void PSVECCrossProduct() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void C_VECHalfAngle() {
|
||||
asm void C_VECHalfAngle(const Vec* incident, const Vec* line_of_sight, Vec* out_half) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/vec/C_VECHalfAngle.s"
|
||||
}
|
||||
@@ -145,7 +124,7 @@ SECTION_SDATA2 static f32 lit_161 = 2.0f;
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void C_VECReflect() {
|
||||
asm void C_VECReflect(const Vec* src, const Vec* surface_normal, Vec* dst) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/vec/C_VECReflect.s"
|
||||
}
|
||||
@@ -155,7 +134,7 @@ asm void C_VECReflect() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSVECSquareDistance() {
|
||||
asm float PSVECSquareDistance(const Vec* a, const Vec* b) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/vec/PSVECSquareDistance.s"
|
||||
}
|
||||
@@ -165,7 +144,7 @@ asm void PSVECSquareDistance() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PSVECDistance() {
|
||||
asm float PSVECDistance(const Vec* a, const Vec* b) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/mtx/vec/PSVECDistance.s"
|
||||
}
|
||||
|
||||
+1
-10
@@ -22,7 +22,6 @@ struct daBgObj_c {
|
||||
//
|
||||
|
||||
extern "C" void __OSFPRInit();
|
||||
extern "C" void OSGetConsoleType();
|
||||
extern "C" static void InquiryCallback();
|
||||
extern "C" void OSInit();
|
||||
extern "C" static void OSExceptionInit();
|
||||
@@ -45,7 +44,6 @@ extern "C" void OSRegisterVersion();
|
||||
|
||||
SECTION_INIT void memset();
|
||||
SECTION_INIT void memcpy();
|
||||
extern "C" void OSReport();
|
||||
extern "C" void PPCMtmmcr0();
|
||||
extern "C" void PPCMtmmcr1();
|
||||
extern "C" void PPCMtpmc1();
|
||||
@@ -57,10 +55,6 @@ extern "C" void PPCMthid2();
|
||||
extern "C" void PPCDisableSpeculation();
|
||||
extern "C" void PPCSetFpNonIEEEMode();
|
||||
extern "C" void OSInitAlarm();
|
||||
extern "C" void OSGetArenaHi();
|
||||
extern "C" void OSGetArenaLo();
|
||||
extern "C" void OSSetArenaHi();
|
||||
extern "C" void OSSetArenaLo();
|
||||
extern "C" void __OSInitAudioSystem();
|
||||
extern "C" void DCInvalidateRange();
|
||||
extern "C" void DCFlushRangeNoSync();
|
||||
@@ -70,13 +64,10 @@ extern "C" void __OSCacheInit();
|
||||
extern "C" void __OSContextInit();
|
||||
extern "C" void __OSUnhandledException();
|
||||
extern "C" void __OSGetExecParams();
|
||||
extern "C" void OSDisableInterrupts();
|
||||
extern "C" void OSEnableInterrupts();
|
||||
extern "C" void __OSSetInterruptHandler();
|
||||
extern "C" void __OSInterruptInit();
|
||||
extern "C" void __OSModuleInit();
|
||||
extern "C" void __OSInitMemoryProtection();
|
||||
extern "C" void OSGetResetCode();
|
||||
extern "C" void __OSResetSWInterruptHandler();
|
||||
extern "C" void __OSInitSram();
|
||||
extern "C" void __OSInitSystemCall();
|
||||
@@ -132,7 +123,7 @@ asm void __OSFPRInit() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void OSGetConsoleType() {
|
||||
asm s32 OSGetConsoleType() {
|
||||
nofralloc
|
||||
#include "asm/dolphin/os/OS/OSGetConsoleType.s"
|
||||
}
|
||||
|
||||
@@ -12,9 +12,7 @@
|
||||
//
|
||||
|
||||
extern "C" static void DCEnable();
|
||||
extern "C" void DCInvalidateRange();
|
||||
extern "C" void DCFlushRange();
|
||||
extern "C" void DCStoreRange();
|
||||
extern "C" void DCFlushRangeNoSync();
|
||||
extern "C" void DCStoreRangeNoSync();
|
||||
extern "C" void DCZeroRange();
|
||||
@@ -68,7 +66,7 @@ static asm void DCEnable() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void DCInvalidateRange() {
|
||||
asm void DCInvalidateRange(void*, u32) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/os/OSCache/DCInvalidateRange.s"
|
||||
}
|
||||
@@ -88,7 +86,7 @@ asm void DCFlushRange() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void DCStoreRange() {
|
||||
asm void DCStoreRange(void*, u32) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/os/OSCache/DCStoreRange.s"
|
||||
}
|
||||
|
||||
@@ -17,16 +17,9 @@ extern "C" static void PADOriginUpdateCallback();
|
||||
extern "C" static void PADProbeCallback();
|
||||
extern "C" static void PADTypeAndStatusCallback();
|
||||
extern "C" static void PADReceiveCheckCallback();
|
||||
extern "C" void PADReset();
|
||||
extern "C" void PADRecalibrate();
|
||||
extern "C" void PADInit();
|
||||
extern "C" void PADRead();
|
||||
extern "C" void PADControlMotor();
|
||||
extern "C" void PADSetSpec();
|
||||
extern "C" static void SPEC0_MakeStatus();
|
||||
extern "C" static void SPEC1_MakeStatus();
|
||||
extern "C" static void SPEC2_MakeStatus();
|
||||
extern "C" void PADSetAnalogMode();
|
||||
extern "C" static void OnReset();
|
||||
extern "C" static void SamplingHandler();
|
||||
extern "C" static void PADSetSamplingCallback();
|
||||
@@ -265,7 +258,7 @@ static asm void PADReceiveCheckCallback() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PADReset() {
|
||||
asm s32 PADReset(PADMask mask) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/pad/Pad/PADReset.s"
|
||||
}
|
||||
@@ -275,7 +268,7 @@ asm void PADReset() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PADRecalibrate() {
|
||||
asm s32 PADRecalibrate(PADMask mask) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/pad/Pad/PADRecalibrate.s"
|
||||
}
|
||||
@@ -310,7 +303,7 @@ u8 __PADSpec[4 + 4 /* padding */];
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PADInit() {
|
||||
asm u32 PADInit() {
|
||||
nofralloc
|
||||
#include "asm/dolphin/pad/Pad/PADInit.s"
|
||||
}
|
||||
@@ -320,7 +313,7 @@ asm void PADInit() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PADRead() {
|
||||
asm u32 PADRead(PADStatus*) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/pad/Pad/PADRead.s"
|
||||
}
|
||||
@@ -330,7 +323,7 @@ asm void PADRead() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PADControlMotor() {
|
||||
asm void PADControlMotor(s32 channel, u32 command) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/pad/Pad/PADControlMotor.s"
|
||||
}
|
||||
@@ -340,7 +333,7 @@ asm void PADControlMotor() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PADSetSpec() {
|
||||
asm void PADSetSpec(int spec) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/pad/Pad/PADSetSpec.s"
|
||||
}
|
||||
@@ -380,7 +373,7 @@ static asm void SPEC2_MakeStatus() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void PADSetAnalogMode() {
|
||||
asm void PADSetAnalogMode(u32 mode) {
|
||||
nofralloc
|
||||
#include "asm/dolphin/pad/Pad/PADSetAnalogMode.s"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user