dol2asm OK

This commit is contained in:
Julgodis
2021-03-28 22:49:05 +02:00
parent 3d66902e1a
commit 1e95d29b60
60106 changed files with 4755966 additions and 1107376 deletions
+387 -277
View File
@@ -1,319 +1,429 @@
#include "JSystem/JKernel/JKRAram/JKRAram.h"
#include "JSystem/JKernel/JKRAramBlock/JKRAramBlock.h"
#include "JSystem/JKernel/JKRAramHeap/JKRAramHeap.h"
#include "JSystem/JKernel/JKRAramPiece/JKRAramPiece.h"
#include "JSystem/JKernel/JKRAramStream/JKRAramStream.h"
#include "JSystem/JKernel/JKRExpHeap/JKRExpHeap.h"
#include "msl_c/string.h"
extern "C" {
void __dl__FPv(void);
void __RAS_OSDisableInterrupts_begin(void);
void alloc__11JKRAramHeapFUlQ211JKRAramHeap10EAllocMode(void);
void alloc__7JKRHeapFUli(void);
void alloc__7JKRHeapFUliP7JKRHeap(void);
void changeGroupIdIfNeed__7JKRAramFPUci(void);
void checkCompressed__9JKRDecompFPUc(void);
void checkOkAddress__7JKRAramFPUcUlP12JKRAramBlockUl(void);
void DCStoreRangeNoSync(void);
void decompSZS_subroutine__FPUcPUc(void);
void firstSrcData__Fv(void);
void free__7JKRHeapFPvP7JKRHeap(void);
void JKRDecompressFromAramToMainRam__FUlPvUlUlUlPUl(void);
void panic_f__12JUTExceptionFPCciPCce(const char* filename, int line, const char* format, ...);
void nextSrcData__FPUc(void);
void orderSync__12JKRAramPieceFiUlUlUlP12JKRAramBlock(void);
void orderSync__9JKRDecompFPUcPUcUlUl(void);
void startDMA__12JKRAramPieceFP12JKRAMCommand(void);
}
//
// Generated By: dol2asm
// Translation Unit: JKRAram
//
extern u8 lbl_803CC158; // JKRAram::__vt
extern OSMessageQueue sMessageQueue__7JKRAram; // JKRAram::sMessageQueue
extern bool lbl_804513FC; // DAT_804513fc (init global mutex)
extern OSMutex lbl_804342E8; // JKernel::decompMutex (static?)
extern u8 lbl_804342D0; // JKernel::@492 (global destructor chain)
extern u8 sAramCommandList__7JKRAram; // JKRAram::sAramCommandList
extern u8 sSZSBufferSize__7JKRAram; // JKRAram::sSZSBufferSize
extern u8 sMessageBuffer__7JKRAram; // JKRAram::sMessageBuffer
#include "dol2asm.h"
#include "dolphin/types.h"
#include "JSystem/JKernel/JKRAram.h"
// Uncomment when static initialization is working
// JKRAram* JKRAram::sAramObject = NULL;
// u32 JKRAram::sSZSBufferSize = 0x400;
//
// 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 */ ~JSUList__template5();
};
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*);
};
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 JKRAramBlock {
};
struct JKRAMCommand {
};
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*);
};
//
// Forward References:
//
static void JKRDecompressFromAramToMainRam(u32, void*, u32, u32, u32, u32*);
static void decompSZS_subroutine(u8*, u8*);
static u8* firstSrcData(void);
static u8* nextSrcData(u8*);
static void firstSrcData();
static void nextSrcData(u8*);
extern "C" extern char const* const JKRAram__stringBase0;
extern "C" extern u8 sMessageQueue__7JKRAram[32];
extern "C" extern u32 sSZSBufferSize__7JKRAram[1 + 1 /* padding */];
extern "C" extern u8 sAramObject__7JKRAram[4];
// The prefix JKRAram__ is for now used to skip name collision in 'sbss.s'. All of these variables
// are probably defined as static and only visible in this translation unit.
extern u8* JKRAram__szpBuf;
extern u8* JKRAram__szpEnd;
extern u8* JKRAram__refBuf;
extern u8* JKRAram__refEnd;
extern u8* JKRAram__refCurrent;
extern u32 JKRAram__srcOffset;
extern u32 JKRAram__transLeft;
extern u32 JKRAram__srcLimit;
extern u32 JKRAram__srcAddress;
extern u32 JKRAram__fileOffset;
extern u32 JKRAram__readCount;
extern u32 JKRAram__maxDest;
extern u32* JKRAram__tsPtr;
extern u32 JKRAram__tsArea;
extern JKRExpHeap* sSystemHeap__7JKRHeap;
extern "C" void create__7JKRAramFUlUllll();
extern "C" void __ct__7JKRAramFUlUll();
extern "C" void __dt__7JKRAramFv();
extern "C" void run__7JKRAramFv();
extern "C" void checkOkAddress__7JKRAramFPUcUlP12JKRAramBlockUl();
extern "C" void changeGroupIdIfNeed__7JKRAramFPUci();
extern "C" void mainRamToAram__7JKRAramFPUcUlUl15JKRExpandSwitchUlP7JKRHeapiPUl();
extern "C" void aramToMainRam__7JKRAramFUlPUcUl15JKRExpandSwitchUlP7JKRHeapiPUl();
extern "C" static void JKRDecompressFromAramToMainRam__FUlPvUlUlUlPUl();
extern "C" static void decompSZS_subroutine__FPUcPUc();
extern "C" static void firstSrcData__Fv();
extern "C" static void nextSrcData__FPUc();
extern "C" void __sinit_JKRAram_cpp();
extern "C" void func_802D2DF0();
extern "C" extern char const* const JKRAram__stringBase0;
extern "C" extern u8 sMessageQueue__7JKRAram[32];
extern "C" extern u32 sSZSBufferSize__7JKRAram[1 + 1 /* padding */];
extern "C" extern u8 sAramObject__7JKRAram[4];
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);
}
//
// External References:
//
JKRCreateAramStreamManager(stream_priority);
JKRCreateDecompManager(decomp_priority);
sAramObject->resume();
return sAramObject;
void* operator new(u32, JKRHeap*, int);
void operator delete(void*);
extern "C" extern u8 sSystemHeap__7JKRHeap[4];
extern "C" extern u8 sCurrentHeap__7JKRHeap[4];
SECTION_INIT void memcpy();
extern "C" void alloc__7JKRHeapFUliP7JKRHeap();
extern "C" void alloc__7JKRHeapFUli();
extern "C" void free__7JKRHeapFPvP7JKRHeap();
extern "C" void* __nw__FUlP7JKRHeapi();
extern "C" void __dl__FPv();
extern "C" void __ct__9JKRThreadFUlii();
extern "C" void __dt__9JKRThreadFv();
extern "C" void __ct__11JKRAramHeapFUlUl();
extern "C" void alloc__11JKRAramHeapFUlQ211JKRAramHeap10EAllocMode();
extern "C" void orderSync__12JKRAramPieceFiUlUlUlP12JKRAramBlock();
extern "C" void startDMA__12JKRAramPieceFP12JKRAMCommand();
extern "C" void create__13JKRAramStreamFl();
extern "C" void create__9JKRDecompFl();
extern "C" void orderSync__9JKRDecompFPUcPUcUlUl();
extern "C" void checkCompressed__9JKRDecompFPUc();
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();
extern "C" void _savegpr_23();
extern "C" void _savegpr_25();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_22();
extern "C" void _restgpr_23();
extern "C" void _restgpr_25();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern u8 sSystemHeap__7JKRHeap[4];
extern "C" extern u8 sCurrentHeap__7JKRHeap[4];
//
// Declarations:
//
/* ############################################################################################## */
/* 804513C8-804513CC 0004+00 s=3 e=9 z=0 None .sbss sAramObject__7JKRAram */
u8 sAramObject__7JKRAram[4];
/* 802D1FA4-802D2040 009C+00 s=0 e=1 z=0 None .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"
}
#pragma pop
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();
/* ############################################################################################## */
/* 803CC128-803CC138 0010+00 s=1 e=0 z=0 None .data sMessageBuffer__7JKRAram */
SECTION_DATA static u8 sMessageBuffer__7JKRAram[16] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
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;
}
/* 803CC138-803CC158 0020+00 s=1 e=1 z=0 None .data sMessageQueue__7JKRAram */
SECTION_DATA u8 sMessageQueue__7JKRAram[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,
};
mAudioMemoryPtr = ARAlloc(mAudioMemorySize);
mGraphMemoryPtr = ARAlloc(mGraphMemorySize);
/* 803CC158-803CC168 0010+00 s=2 e=0 z=0 None .data __vt__7JKRAram */
SECTION_DATA static void* __vt__7JKRAram[4] = {
(void*)NULL,
(void*)NULL,
(void*)__dt__7JKRAramFv,
(void*)run__7JKRAramFv,
};
if (mAramMemorySize) {
mAramMemoryPtr = ARAlloc(mAramMemorySize);
} else {
mAramMemoryPtr = NULL;
}
mAramHeap = new (JKRHeap::getSystemHeap(), 0) JKRAramHeap(mGraphMemoryPtr, mGraphMemorySize);
/* 802D2040-802D214C 010C+00 s=1 e=0 z=0 None .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"
}
#pragma pop
JKRAram::~JKRAram() {
sAramObject = NULL;
if (mAramHeap)
delete mAramHeap;
/* 802D214C-802D21DC 0090+00 s=1 e=0 z=0 None .text __dt__7JKRAramFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm JKRAram::~JKRAram() {
nofralloc
#include "asm/JSystem/JKernel/JKRAram/__dt__7JKRAramFv.s"
}
#pragma pop
// 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);
/* 802D21DC-802D2248 006C+00 s=1 e=0 z=0 None .text run__7JKRAramFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JKRAram::run() {
nofralloc
#include "asm/JSystem/JKernel/JKRAram/run__7JKRAramFv.s"
}
#else
asm void* JKRAram::run(void) {
nofralloc
#include "JSystem/JKernel/JKRAram/asm/func_802D21DC.s"
#pragma pop
/* ############################################################################################## */
/* 8039D078-8039D0B8 003C+04 s=1 e=0 z=0 None .rodata @stringBase0 */
#pragma push
#pragma force_active on
#pragma section ".dead"
SECTION_DEAD char const* const stringBase_8039D078 = "JKRAram.cpp";
SECTION_DEAD char const* const stringBase_8039D084 = "%s";
SECTION_DEAD char const* const stringBase_8039D087 = ":::address not 32Byte aligned.";
SECTION_DEAD char const* const stringBase_8039D0A6 = "bad aramSync\n";
/* @stringBase0 padding */
SECTION_DEAD static char const* const pad_8039D0B4 = "\0\0\0";
#pragma pop
/* 802D2248-802D22DC 0094+00 s=2 e=0 z=0 None .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"
}
#endif
#pragma pop
void JKRAram::checkOkAddress(u8* addr, u32 size, JKRAramBlock* block, u32 param_4) {
if (!IS_ALIGNED((u32)addr, 0x20) && !IS_ALIGNED(size, 0x20)) {
panic_f__12JUTExceptionFPCciPCce("JKRAram.cpp", 0xdb, "%s",
":::address not 32Byte aligned.");
}
if (block && !IS_ALIGNED((u32)block->getAddress() + param_4, 0x20)) {
panic_f__12JUTExceptionFPCciPCce("JKRAram.cpp", 0xe3, "%s",
":::address not 32Byte aligned.");
}
/* 802D22DC-802D233C 0060+00 s=1 e=0 z=0 None .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"
}
#pragma pop
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);
}
/* 802D233C-802D25B4 0278+00 s=0 e=3 z=0 None .text mainRamToAram__7JKRAramFPUcUlUl15JKRExpandSwitchUlP7JKRHeapiPUl */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JKRAram::mainRamToAram(u8* param_0, u32 param_1, u32 param_2, JKRExpandSwitch param_3, u32 param_4, JKRHeap* param_5, int param_6, u32* param_7) {
nofralloc
#include "asm/JSystem/JKernel/JKRAram/mainRamToAram__7JKRAramFPUcUlUl15JKRExpandSwitchUlP7JKRHeapiPUl.s"
}
#pragma pop
asm void JKRAram::mainRamToAram(u8*, u32, u32, JKRExpandSwitch, u32, JKRHeap*, int, u32*) {
nofralloc
#include "JSystem/JKernel/JKRAram/asm/func_802D233C.s"
/* 802D25B4-802D2830 027C+00 s=0 e=6 z=0 None .text aramToMainRam__7JKRAramFUlPUcUl15JKRExpandSwitchUlP7JKRHeapiPUl */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JKRAram::aramToMainRam(u32 param_0, u8* param_1, u32 param_2, JKRExpandSwitch param_3, u32 param_4, JKRHeap* param_5, int param_6, u32* param_7) {
nofralloc
#include "asm/JSystem/JKernel/JKRAram/aramToMainRam__7JKRAramFUlPUcUl15JKRExpandSwitchUlP7JKRHeapiPUl.s"
}
#pragma pop
asm void JKRAram::aramToMainRam(u32, u8*, u32, JKRExpandSwitch, u32, JKRHeap*, int, u32*) {
nofralloc
#include "JSystem/JKernel/JKRAram/asm/func_802D25B4.s"
/* ############################################################################################## */
/* 804342D0-804342DC 000C+00 s=1 e=0 z=0 None .bss @492 */
static u8 lit_492[12];
/* 804342DC-804342E8 000C+00 s=1 e=0 z=0 None .bss sAramCommandList__7JKRAram */
static u8 sAramCommandList__7JKRAram[12];
/* 804342E8-80434300 0018+00 s=1 e=0 z=0 None .bss decompMutex */
static u8 decompMutex[24];
/* 804508B8-804508C0 0004+04 s=1 e=1 z=0 None .sdata sSZSBufferSize__7JKRAram */
SECTION_SDATA u32 sSZSBufferSize__7JKRAram[1 + 1 /* padding */] = {
0x00000400,
/* padding */
0x00000000,
};
/* 804513CC-804513D0 0004+00 s=3 e=0 z=0 None .sbss szpBuf */
static u8 szpBuf[4];
/* 804513D0-804513D4 0004+00 s=3 e=0 z=0 None .sbss szpEnd */
static u8 szpEnd[4];
/* 804513D4-804513D8 0004+00 s=2 e=0 z=0 None .sbss refBuf */
static u8 refBuf[4];
/* 804513D8-804513DC 0004+00 s=2 e=0 z=0 None .sbss refEnd */
static u8 refEnd[4];
/* 804513DC-804513E0 0004+00 s=2 e=0 z=0 None .sbss refCurrent */
static u8 refCurrent[4];
/* 804513E0-804513E4 0004+00 s=3 e=0 z=0 None .sbss srcOffset */
static u8 srcOffset[4];
/* 804513E4-804513E8 0004+00 s=4 e=0 z=0 None .sbss transLeft */
static u8 transLeft[4];
/* 804513E8-804513EC 0004+00 s=3 e=0 z=0 None .sbss srcLimit */
static u8 srcLimit[4];
/* 804513EC-804513F0 0004+00 s=3 e=0 z=0 None .sbss srcAddress */
static u8 srcAddress[4];
/* 804513F0-804513F4 0004+00 s=2 e=0 z=0 None .sbss fileOffset */
static u8 fileOffset[4];
/* 804513F4-804513F8 0004+00 s=2 e=0 z=0 None .sbss readCount */
static u8 readCount[4];
/* 804513F8-804513FC 0004+00 s=2 e=0 z=0 None .sbss maxDest */
static u8 maxDest[4];
/* 804513FC-80451400 0004+00 s=1 e=0 z=0 None .sbss None */
static u8 data_804513FC[4];
/* 80451400-80451404 0004+00 s=2 e=0 z=0 None .sbss tsPtr */
static u8 tsPtr[4];
/* 80451404-80451408 0004+00 s=1 e=0 z=0 None .sbss tsArea */
static u8 tsArea[4];
/* 802D2830-802D29A0 0170+00 s=1 e=0 z=0 None .text JKRDecompressFromAramToMainRam__FUlPvUlUlUlPUl */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm static void JKRDecompressFromAramToMainRam(u32 param_0, void* param_1, u32 param_2, u32 param_3, u32 param_4, u32* param_5) {
nofralloc
#include "asm/JSystem/JKernel/JKRAram/JKRDecompressFromAramToMainRam__FUlPvUlUlUlPUl.s"
}
#pragma pop
#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
/* 802D29A0-802D2C40 02A0+00 s=1 e=0 z=0 None .text decompSZS_subroutine__FPUcPUc */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm static void decompSZS_subroutine(u8* param_0, u8* param_1) {
nofralloc
#include "asm/JSystem/JKernel/JKRAram/decompSZS_subroutine__FPUcPUc.s"
}
#else
asm void JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 dstLength,
u32 offset, u32* resourceSize) {
nofralloc
#include "JSystem/JKernel/JKRAram/asm/func_802D2830.s"
#pragma pop
/* 802D2C40-802D2CE4 00A4+00 s=1 e=0 z=0 None .text firstSrcData__Fv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm static void firstSrcData() {
nofralloc
#include "asm/JSystem/JKernel/JKRAram/firstSrcData__Fv.s"
}
#endif
#pragma pop
asm void decompSZS_subroutine(u8*, u8*){nofralloc
#include "JSystem/JKernel/JKRAram/asm/func_802D29A0.s"
/* 802D2CE4-802D2DAC 00C8+00 s=1 e=0 z=0 None .text nextSrcData__FPUc */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm static void nextSrcData(u8* param_0) {
nofralloc
#include "asm/JSystem/JKernel/JKRAram/nextSrcData__FPUc.s"
}
#pragma pop
u8* firstSrcData(void) {
JKRAram__srcLimit = (u32)(JKRAram__szpEnd - 0x19);
u8* buffer = JKRAram__szpBuf;
u32 length;
u32 size = JKRAram__szpEnd - JKRAram__szpBuf;
if (JKRAram__transLeft < size) {
length = JKRAram__transLeft;
} else {
length = size;
}
u32 src = (u32)(JKRAram__srcAddress + JKRAram__srcOffset);
u32 dst = (u32)buffer;
u32 alignedLength = ALIGN_NEXT(length, 0x20);
JKRAramPcs(1, src, dst, alignedLength, NULL);
JKRAram__srcOffset += length;
JKRAram__transLeft -= length;
if (!JKRAram__transLeft) {
JKRAram__srcLimit = (u32)(buffer + length);
}
return buffer;
/* 802D2DAC-802D2DF0 0044+00 s=0 e=1 z=0 None .text __sinit_JKRAram_cpp */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
extern "C" asm void __sinit_JKRAram_cpp() {
nofralloc
#include "asm/JSystem/JKernel/JKRAram/__sinit_JKRAram_cpp.s"
}
#pragma pop
// missing one add instruction
#ifdef NONMATCHING
inline u32 nextSrcData_MIN(u32 A, u32 B) {
if (A > B)
return B;
return A;
/* 802D2DF0-802D2E44 0054+00 s=1 e=1 z=0 None .text __dt__23JSUList<12JKRAMCommand>Fv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm JSUList__template5::~JSUList__template5() {
nofralloc
#include "asm/JSystem/JKernel/JKRAram/func_802D2DF0.s"
}
#pragma pop
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
asm u8* nextSrcData(u8* current) {
nofralloc
#include "JSystem/JKernel/JKRAram/asm/func_802D2CE4.s"
}
#endif
#if 0
asm void __sinit_JKRAram_cpp {
nofralloc
#include "JSystem/JKernel/JKRAram/asm/func_802D2DAC.s"
}
asm JSUList<12JKRAMCommand>::~JSUList<12JKRAMCommand>(void) {
nofralloc
#include "JSystem/JKernel/JKRAram/asm/func_802D2DF0.s"
}
#endif
const char* lbl_8039D0A6 = "bad aramSync\n";
const char* lbl_8039D0B4 = "\x00\x00\x00"; /* padding */