mirror of https://github.com/zeldaret/tp.git
327 lines
11 KiB
C++
327 lines
11 KiB
C++
//
|
|
// Generated By: dol2asm
|
|
// Translation Unit: JKRAramStream
|
|
//
|
|
|
|
#include "JSystem/JKernel/JKRAramStream.h"
|
|
#include "JSystem/JKernel/JKRAramPiece.h"
|
|
#include "JSystem/JKernel/JKRHeap.h"
|
|
#include "dol2asm.h"
|
|
#include "global.h"
|
|
|
|
//
|
|
// Forward References:
|
|
//
|
|
|
|
extern "C" void create__13JKRAramStreamFl();
|
|
extern "C" void __ct__13JKRAramStreamFl();
|
|
extern "C" void __dt__13JKRAramStreamFv();
|
|
extern "C" void run__13JKRAramStreamFv();
|
|
extern "C" bool readFromAram__13JKRAramStreamFv();
|
|
extern "C" void writeToAram__13JKRAramStreamFP20JKRAramStreamCommand();
|
|
extern "C" void write_StreamToAram_Async__13JKRAramStreamFP18JSUFileInputStreamUlUlUlPUl();
|
|
extern "C" void sync__13JKRAramStreamFP20JKRAramStreamCommandi();
|
|
extern "C" void setTransBuffer__13JKRAramStreamFPUcUlP7JKRHeap();
|
|
extern "C" void __ct__20JKRAramStreamCommandFv();
|
|
extern "C" s32 getAvailable__20JSURandomInputStreamCFv(JSURandomInputStream*);
|
|
extern "C" extern char const* const JKRAramStream__stringBase0;
|
|
extern "C" u8 sMessageBuffer__13JKRAramStream[16];
|
|
extern "C" u8 sMessageQueue__13JKRAramStream[32];
|
|
extern "C" u8 sAramStreamObject__13JKRAramStream[4];
|
|
extern "C" u8 transBuffer__13JKRAramStream[4];
|
|
extern "C" u8 transSize__13JKRAramStream[4];
|
|
extern "C" u8 transHeap__13JKRAramStream[4];
|
|
|
|
//
|
|
// External References:
|
|
//
|
|
|
|
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 orderSync__12JKRAramPieceFiUlUlUlP12JKRAramBlock();
|
|
extern "C" void read__14JSUInputStreamFPvl();
|
|
extern "C" void seek__20JSURandomInputStreamFl17JSUStreamSeekFrom();
|
|
extern "C" void panic_f__12JUTExceptionFPCciPCce();
|
|
extern "C" void _savegpr_24();
|
|
extern "C" void _savegpr_26();
|
|
extern "C" void _restgpr_24();
|
|
extern "C" void _restgpr_26();
|
|
extern "C" u8 sSystemHeap__7JKRHeap[4];
|
|
extern "C" u8 sCurrentHeap__7JKRHeap[4];
|
|
|
|
//
|
|
// Declarations:
|
|
//
|
|
|
|
/* ############################################################################################## */
|
|
/* 80451408-8045140C 000908 0004+00 1/1 0/0 0/0 .sbss sAramStreamObject__13JKRAramStream
|
|
*/
|
|
JKRAramStream* JKRAramStream::sAramStreamObject;
|
|
|
|
/* 802D3B48-802D3BB8 2CE488 0070+00 0/0 1/1 0/0 .text create__13JKRAramStreamFl */
|
|
JKRAramStream* JKRAramStream::create(long priority) {
|
|
if (!sAramStreamObject) {
|
|
sAramStreamObject = new (JKRGetSystemHeap(), 0) JKRAramStream(priority);
|
|
setTransBuffer(NULL, 0, NULL);
|
|
}
|
|
|
|
return sAramStreamObject;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
/* 803CC188-803CC198 0292A8 0010+00 1/1 0/0 0/0 .data sMessageBuffer__13JKRAramStream */
|
|
void* JKRAramStream::sMessageBuffer[4] = {
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
};
|
|
|
|
/* 803CC198-803CC1B8 0292B8 0020+00 2/2 0/0 0/0 .data sMessageQueue__13JKRAramStream */
|
|
OSMessageQueue JKRAramStream::sMessageQueue = {0};
|
|
|
|
/* 802D3BB8-802D3C08 2CE4F8 0050+00 1/1 0/0 0/0 .text __ct__13JKRAramStreamFl */
|
|
JKRAramStream::JKRAramStream(long priority) : JKRThread(0xc00, 0x10, priority) {
|
|
resume();
|
|
}
|
|
|
|
/* 802D3C08-802D3C68 2CE548 0060+00 1/0 0/0 0/0 .text __dt__13JKRAramStreamFv */
|
|
JKRAramStream::~JKRAramStream() {}
|
|
|
|
/* 802D3C68-802D3CD8 2CE5A8 0070+00 1/0 0/0 0/0 .text run__13JKRAramStreamFv */
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 802D3CD8-802D3CE0 2CE618 0008+00 1/1 0/0 0/0 .text readFromAram__13JKRAramStreamFv */
|
|
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";
|
|
SECTION_DEAD static char const* const stringBase_8039D132 = "%s";
|
|
SECTION_DEAD static char const* const stringBase_8039D135 = ":::Cannot alloc memory\n";
|
|
/* @stringBase0 padding */
|
|
SECTION_DEAD static char const* const pad_8039D14D = "\0\0";
|
|
#pragma pop
|
|
|
|
/* 802D3CE0-802D3ED0 2CE620 01F0+00 1/1 0/0 0/0 .text
|
|
* writeToAram__13JKRAramStreamFP20JKRAramStreamCommand */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
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;
|
|
|
|
/* 80451410-80451414 000910 0004+00 2/2 0/0 0/0 .sbss transSize__13JKRAramStream */
|
|
u32 JKRAramStream::transSize;
|
|
|
|
/* 80451414-80451418 000914 0004+00 2/2 0/0 0/0 .sbss transHeap__13JKRAramStream */
|
|
JKRHeap* JKRAramStream::transHeap;
|
|
|
|
/* 802D3ED0-802D3FA0 2CE810 00D0+00 0/0 1/1 0/0 .text
|
|
* write_StreamToAram_Async__13JKRAramStreamFP18JSUFileInputStreamUlUlUlPUl */
|
|
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;
|
|
}
|
|
|
|
/* 802D3FA0-802D4034 2CE8E0 0094+00 0/0 1/1 0/0 .text
|
|
* sync__13JKRAramStreamFP20JKRAramStreamCommandi */
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 802D4034-802D4088 2CE974 0054+00 1/1 1/1 0/0 .text
|
|
* setTransBuffer__13JKRAramStreamFPUcUlP7JKRHeap */
|
|
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;
|
|
}
|
|
}
|
|
|
|
/* 802D4088-802D4094 2CE9C8 000C+00 1/1 0/0 0/0 .text __ct__20JKRAramStreamCommandFv */
|
|
JKRAramStreamCommand::JKRAramStreamCommand() {
|
|
mAllocatedTransferBuffer = false;
|
|
}
|
|
|
|
/* 802D4094-802D40F0 2CE9D4 005C+00 0/0 3/0 0/0 .text getAvailable__20JSURandomInputStreamCFv */
|
|
// s32 JSURandomInputStream::getAvailable() const {
|
|
// should be an inline function
|
|
extern "C" s32 getAvailable__20JSURandomInputStreamCFv(JSURandomInputStream* self) {
|
|
return self->getLength() - self->getPosition();
|
|
}
|
|
|
|
/* 8039D120-8039D120 029780 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|