mirror of https://github.com/zeldaret/tp.git
305 lines
9.2 KiB
C++
305 lines
9.2 KiB
C++
//
|
|
// Generated By: dol2asm
|
|
// Translation Unit: JASWaveArcLoader
|
|
//
|
|
|
|
#include "JSystem/JAudio2/JASWaveArcLoader.h"
|
|
#include "JSystem/JAudio2/JASDvdThread.h"
|
|
#include "JSystem/JAudio2/JASTaskThread.h"
|
|
#include "JSystem/JAudio2/JASMutex.h"
|
|
#include "JSystem/JKernel/JKRDvdAramRipper.h"
|
|
#include "MSL_C/string.h"
|
|
#include "dolphin/dvd/dvd.h"
|
|
#include "global.h"
|
|
|
|
//
|
|
// Forward References:
|
|
//
|
|
|
|
extern "C" void getRootHeap__16JASWaveArcLoaderFv();
|
|
extern "C" void setCurrentDir__16JASWaveArcLoaderFPCc();
|
|
extern "C" void getCurrentDir__16JASWaveArcLoaderFv();
|
|
extern "C" void __ct__10JASWaveArcFv();
|
|
extern "C" void __dt__10JASWaveArcFv();
|
|
extern "C" void loadSetup__10JASWaveArcFUl();
|
|
extern "C" void eraseSetup__10JASWaveArcFv();
|
|
extern "C" void loadToAramCallback__10JASWaveArcFPv();
|
|
extern "C" void sendLoadCmd__10JASWaveArcFv();
|
|
extern "C" void load__10JASWaveArcFP7JASHeap();
|
|
extern "C" void loadTail__10JASWaveArcFP7JASHeap();
|
|
extern "C" void erase__10JASWaveArcFv();
|
|
extern "C" void onDispose__10JASWaveArcFv();
|
|
extern "C" void setEntryNum__10JASWaveArcFl();
|
|
extern "C" void setFileName__10JASWaveArcFPCc();
|
|
extern "C" void __dt__11JASDisposerFv();
|
|
extern "C" u8 sCurrentDir__16JASWaveArcLoader[64];
|
|
extern "C" u8 sAramHeap__16JASWaveArcLoader[4 + 4 /* padding */];
|
|
|
|
//
|
|
// External References:
|
|
//
|
|
|
|
extern "C" void sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl();
|
|
extern "C" void getThreadPointer__6JASDvdFv();
|
|
extern "C" void __ct__7JASHeapFP11JASDisposer();
|
|
extern "C" void alloc__7JASHeapFP7JASHeapUl();
|
|
extern "C" void allocTail__7JASHeapFP7JASHeapUl();
|
|
extern "C" void free__7JASHeapFv();
|
|
extern "C" void getSystemHeap__9JASKernelFv();
|
|
extern "C" void getAramHeap__9JASKernelFv();
|
|
extern "C" void onDispose__11JASDisposerFv();
|
|
extern "C" void onLoadDone__10JASWaveArcFv();
|
|
extern "C" void onEraseDone__10JASWaveArcFv();
|
|
extern "C" void* __nwa__FUlP7JKRHeapi();
|
|
extern "C" void __dl__FPv();
|
|
extern "C" void __dla__FPv();
|
|
extern "C" void loadToAram__16JKRDvdAramRipperFlUl15JKRExpandSwitchUlUlPUl();
|
|
extern "C" void __dt__10JSUPtrLinkFv();
|
|
extern "C" void __dt__10JSUPtrListFv();
|
|
extern "C" void _savegpr_27();
|
|
extern "C" void _restgpr_27();
|
|
|
|
//
|
|
// Declarations:
|
|
//
|
|
|
|
/* ############################################################################################## */
|
|
/* 80451290-80451298 000790 0004+04 1/1 0/0 0/0 .sbss sAramHeap__16JASWaveArcLoader */
|
|
JASHeap* JASWaveArcLoader::sAramHeap;
|
|
|
|
/* 8029A0A0-8029A0D0 2949E0 0030+00 2/2 0/0 0/0 .text getRootHeap__16JASWaveArcLoaderFv
|
|
*/
|
|
JASHeap* JASWaveArcLoader::getRootHeap() {
|
|
if (JASWaveArcLoader::sAramHeap) {
|
|
return JASWaveArcLoader::sAramHeap;
|
|
}
|
|
return JASKernel::getAramHeap();
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
/* 803C77E0-803C7820 024900 0040+00 2/2 0/0 0/0 .data sCurrentDir__16JASWaveArcLoader */
|
|
char JASWaveArcLoader::sCurrentDir[DIR_MAX] = "/AudioRes/Waves/";
|
|
|
|
/* 8029A0D0-8029A130 294A10 0060+00 0/0 1/1 0/0 .text setCurrentDir__16JASWaveArcLoaderFPCc */
|
|
void JASWaveArcLoader::setCurrentDir(char const* dir) {
|
|
ASSERT(std::strlen(dir) < DIR_MAX - 1);
|
|
strcpy(sCurrentDir, dir);
|
|
u32 len = strlen(sCurrentDir);
|
|
if (sCurrentDir[len - 1] != '/') {
|
|
ASSERT(len + 1 < DIR_MAX);
|
|
sCurrentDir[len] = '/';
|
|
sCurrentDir[len + 1] = '\0';
|
|
}
|
|
}
|
|
|
|
/* 8029A130-8029A13C 294A70 000C+00 1/1 0/0 0/0 .text getCurrentDir__16JASWaveArcLoaderFv
|
|
*/
|
|
|
|
char* JASWaveArcLoader::getCurrentDir() {
|
|
return sCurrentDir;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
/* 803C7820-803C7838 024940 0018+00 2/2 0/0 0/0 .data __vt__10JASWaveArc */
|
|
SECTION_DATA extern void* __vt__10JASWaveArc[6] = {
|
|
(void*)NULL /* RTTI */,
|
|
(void*)NULL,
|
|
(void*)__dt__10JASWaveArcFv,
|
|
(void*)onDispose__10JASWaveArcFv,
|
|
(void*)onLoadDone__10JASWaveArcFv,
|
|
(void*)onEraseDone__10JASWaveArcFv,
|
|
};
|
|
|
|
/* 803C7838-803C7848 024958 0010+00 3/3 0/0 0/0 .data __vt__11JASDisposer */
|
|
SECTION_DATA extern void* __vt__11JASDisposer[4] = {
|
|
(void*)NULL /* RTTI */,
|
|
(void*)NULL,
|
|
(void*)__dt__11JASDisposerFv,
|
|
(void*)onDispose__11JASDisposerFv,
|
|
};
|
|
|
|
/* 8029A13C-8029A1B4 294A7C 0078+00 0/0 2/2 0/0 .text __ct__10JASWaveArcFv */
|
|
|
|
JASWaveArc::JASWaveArc() : mHeap(this) {
|
|
_48 = 0;
|
|
_4c = 0;
|
|
mEntryNum = -1;
|
|
mFileLength = 0;
|
|
_58 = 0;
|
|
_5a = 0;
|
|
OSInitMutex(&mMutex);
|
|
}
|
|
|
|
/* 8029A1B4-8029A258 294AF4 00A4+00 1/0 2/2 0/0 .text __dt__10JASWaveArcFv */
|
|
#ifdef NONMATCHING
|
|
JASWaveArc::~JASWaveArc() {}
|
|
#else
|
|
asm void __dt__10JASWaveArcFv() {
|
|
nofralloc
|
|
#include "asm/JSystem/JAudio2/JASWaveArcLoader/__dt__10JASWaveArcFv.s"
|
|
}
|
|
#endif
|
|
|
|
/* 8029A258-8029A2EC 294B98 0094+00 1/1 0/0 0/0 .text loadSetup__10JASWaveArcFUl */
|
|
bool JASWaveArc::loadSetup(u32 param_0) {
|
|
JASMutexLock mutexLock(&mMutex);
|
|
if (_58 != param_0) {
|
|
return false;
|
|
}
|
|
if (_4c != 1) {
|
|
return false;
|
|
}
|
|
_48 = 1;
|
|
_4c = 2;
|
|
return true;
|
|
}
|
|
|
|
/* 8029A2EC-8029A378 294C2C 008C+00 1/1 0/0 0/0 .text eraseSetup__10JASWaveArcFv */
|
|
bool JASWaveArc::eraseSetup() {
|
|
JASMutexLock mutexLock(&mMutex);
|
|
if (_4c == 0) {
|
|
return false;
|
|
}
|
|
if (_4c == 1) {
|
|
_4c = 0;
|
|
return false;
|
|
}
|
|
_48 = 0;
|
|
_4c = 0;
|
|
return true;
|
|
}
|
|
|
|
/* 8029A378-8029A404 294CB8 008C+00 1/1 0/0 0/0 .text loadToAramCallback__10JASWaveArcFPv
|
|
*/
|
|
void JASWaveArc::loadToAramCallback(void* this_) {
|
|
loadToAramCallbackParams* tmp = (loadToAramCallbackParams*)this_;
|
|
JASWaveArc* wavArc = tmp->mWavArc;
|
|
JKRAramBlock* block = JKRDvdAramRipper::loadToAram(tmp->mEntryNum, tmp->mBase,
|
|
EXPAND_SWITCH_UNKNOWN0, 0, 0, NULL);
|
|
if (block == NULL) {
|
|
// "loadToAram Failed"
|
|
return;
|
|
}
|
|
wavArc->_5a--;
|
|
if (wavArc->loadSetup(tmp->_c)) {
|
|
wavArc->onLoadDone();
|
|
}
|
|
}
|
|
|
|
/* 8029A404-8029A4C0 294D44 00BC+00 2/2 0/0 0/0 .text sendLoadCmd__10JASWaveArcFv */
|
|
bool JASWaveArc::sendLoadCmd() {
|
|
JASMutexLock mutexLock(&mMutex);
|
|
_48 = 0;
|
|
_4c = 1;
|
|
void* base = mHeap.getBase();
|
|
loadToAramCallbackParams commandInfo;
|
|
commandInfo.mWavArc = this;
|
|
commandInfo.mEntryNum = mEntryNum;
|
|
commandInfo.mBase = (u32)mHeap.mBase;
|
|
commandInfo._c = ++_58;
|
|
|
|
_5a++;
|
|
|
|
JASTaskThread* thread = JASDvd::getThreadPointer();
|
|
int status = thread->sendCmdMsg(loadToAramCallback, &commandInfo, 0x10);
|
|
if (status == 0) {
|
|
// "sendCmdMsg loadToAramCallback Failed"
|
|
mHeap.free();
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* 8029A4C0-8029A580 294E00 00C0+00 0/0 2/2 0/0 .text load__10JASWaveArcFP7JASHeap */
|
|
bool JASWaveArc::load(JASHeap* heap) {
|
|
if (mEntryNum < 0) {
|
|
return false;
|
|
}
|
|
JASMutexLock mutexLock(&mMutex);
|
|
if (_4c != 0) {
|
|
return false;
|
|
}
|
|
if (heap == NULL) {
|
|
heap = JASWaveArcLoader::getRootHeap();
|
|
}
|
|
bool result = mHeap.alloc(heap, mFileLength);
|
|
if (result == false) {
|
|
return false;
|
|
}
|
|
return sendLoadCmd();
|
|
}
|
|
|
|
/* 8029A580-8029A640 294EC0 00C0+00 0/0 1/1 0/0 .text loadTail__10JASWaveArcFP7JASHeap */
|
|
bool JASWaveArc::loadTail(JASHeap* heap) {
|
|
if (mEntryNum < 0) {
|
|
return false;
|
|
}
|
|
JASMutexLock mutexLock(&mMutex);
|
|
if (_4c != 0) {
|
|
return false;
|
|
}
|
|
if (heap == NULL) {
|
|
heap = JASWaveArcLoader::getRootHeap();
|
|
}
|
|
bool result = mHeap.allocTail(heap, mFileLength);
|
|
if (result == false) {
|
|
return false;
|
|
}
|
|
return sendLoadCmd();
|
|
}
|
|
|
|
/* 8029A640-8029A664 294F80 0024+00 0/0 2/2 0/0 .text erase__10JASWaveArcFv */
|
|
void JASWaveArc::erase() {
|
|
mHeap.free();
|
|
}
|
|
|
|
/* 8029A664-8029A6AC 294FA4 0048+00 1/0 2/0 0/0 .text onDispose__10JASWaveArcFv */
|
|
void JASWaveArc::onDispose() {
|
|
if (eraseSetup()) {
|
|
onEraseDone();
|
|
}
|
|
}
|
|
|
|
/* 8029A6AC-8029A70C 294FEC 0060+00 1/1 0/0 0/0 .text setEntryNum__10JASWaveArcFl */
|
|
void JASWaveArc::setEntryNum(s32 entryNum) {
|
|
DVDFileInfo fileInfo;
|
|
if (entryNum < 0) {
|
|
return;
|
|
}
|
|
BOOL openStatus = DVDFastOpen(entryNum, &fileInfo);
|
|
if (openStatus == FALSE) {
|
|
return;
|
|
}
|
|
mFileLength = fileInfo.length;
|
|
DVDClose(&fileInfo);
|
|
mEntryNum = entryNum;
|
|
}
|
|
|
|
/* 8029A70C-8029A7B8 29504C 00AC+00 0/0 2/2 0/0 .text setFileName__10JASWaveArcFPCc */
|
|
void JASWaveArc::setFileName(char const* fileName) {
|
|
char* currentDir = JASWaveArcLoader::getCurrentDir();
|
|
size_t length = strlen(currentDir);
|
|
length = length + strlen(fileName);
|
|
JKRHeap* systemHeap = JASKernel::getSystemHeap();
|
|
char* fileString = new (systemHeap, -4) char[length + 1];
|
|
strcpy(fileString, currentDir);
|
|
strcat(fileString, fileName);
|
|
fileString[length] = '\0';
|
|
int entryNum = DVDConvertPathToEntrynum(fileString);
|
|
delete[] fileString;
|
|
if (entryNum < 0) {
|
|
return;
|
|
}
|
|
setEntryNum(entryNum);
|
|
}
|
|
|
|
/* 8029A7B8-8029A800 2950F8 0048+00 1/0 0/0 0/0 .text __dt__11JASDisposerFv */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm void __dt__11JASDisposerFv() {
|
|
nofralloc
|
|
#include "asm/JSystem/JAudio2/JASWaveArcLoader/__dt__11JASDisposerFv.s"
|
|
}
|
|
#pragma pop
|