mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-12 05:27:14 -04:00
JASWaveArcLoader
This commit is contained in:
@@ -19,7 +19,7 @@ public:
|
||||
OSInitThreadQueue(&field_0x68);
|
||||
}
|
||||
~JASTaskThread();
|
||||
bool sendCmdMsg(s32 (*)(void*), void*, u32);
|
||||
BOOL sendCmdMsg(s32 (*)(void*), void*, u32);
|
||||
void* run();
|
||||
void pause(bool);
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace JASystem {
|
||||
namespace Dvd {
|
||||
bool createThread(int, int, u32);
|
||||
void resumeThread();
|
||||
void sendCmdMsg(s32 (*)(void*), void*, u32);
|
||||
BOOL sendCmdMsg(s32 (*)(void*), void*, u32);
|
||||
int checkPassDvdT(u32, u32*, void (*)(u32));
|
||||
u32 checkFile(char*);
|
||||
void unpauseDvdT();
|
||||
|
||||
@@ -19,6 +19,7 @@ namespace JASystem {
|
||||
};
|
||||
|
||||
THeap(TDisposer*);
|
||||
~THeap() {}
|
||||
void initRootHeap(void*, u32, Type);
|
||||
bool alloc(THeap*, u32);
|
||||
bool free();
|
||||
@@ -42,9 +43,9 @@ namespace JASystem {
|
||||
public:
|
||||
TSolidHeap();
|
||||
~TSolidHeap() {}
|
||||
int alloc(long param_1);
|
||||
void* alloc(s32 param_1);
|
||||
void freeAll();
|
||||
void init(u8* param_1, long param_2);
|
||||
void init(u8* param_1, s32 param_2);
|
||||
int getRemain();
|
||||
|
||||
/* 0x00 */ u32 field_0x0;
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace JASystem {
|
||||
void sysDramSetup(JKRSolidHeap*);
|
||||
void* allocFromSysDram(u32);
|
||||
void sysAramSetup(u32);
|
||||
void allocFromSysAramFull(u32*);
|
||||
void* allocFromSysAramFull(u32*);
|
||||
|
||||
extern TSolidHeap audioAramHeap;
|
||||
extern u32 audioDramSize;
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
#ifndef JASWAVEARCLOADER_H
|
||||
#define JASWAVEARCLOADER_H
|
||||
|
||||
#include "JSystem/JAudio/JASHeapCtrl.h"
|
||||
#include "dolphin/os/OSMutex.h"
|
||||
|
||||
namespace JASystem {
|
||||
namespace WaveArcLoader {
|
||||
bool init();
|
||||
Kernel::THeap* getRootHeap();
|
||||
void setCurrentDir(const char*);
|
||||
char* getCurrentDir();
|
||||
|
||||
extern Kernel::THeap sAramHeap;
|
||||
extern char sCurrentDir[];
|
||||
};
|
||||
|
||||
class TWaveArc : public Kernel::TDisposer {
|
||||
public:
|
||||
TWaveArc();
|
||||
virtual void onLoadDone() {}
|
||||
virtual void onEraseDone() {}
|
||||
bool loadSetup(u32);
|
||||
bool eraseSetup();
|
||||
static s32 loadToAramCallback(void*);
|
||||
bool sendLoadCmd();
|
||||
void load(Kernel::THeap*);
|
||||
bool erase();
|
||||
void onDispose();
|
||||
void setEntryNum(s32);
|
||||
void setFileName(const char*);
|
||||
|
||||
/* 0x04 */ Kernel::THeap field_0x4;
|
||||
/* 0x4C */ int field_0x4c;
|
||||
/* 0x50 */ OSMutex mMutex;
|
||||
/* 0x68 */ int field_0x68;
|
||||
/* 0x6C */ int field_0x6c;
|
||||
/* 0x70 */ int field_0x70;
|
||||
/* 0x74 */ int field_0x74;
|
||||
};
|
||||
}
|
||||
|
||||
#endif /* JASWAVEARCLOADER_H */
|
||||
@@ -31,11 +31,11 @@ public:
|
||||
|
||||
protected:
|
||||
void resume() { OSResumeThread(mThreadRecord); }
|
||||
void sendMessage(OSMessage message) {
|
||||
OSSendMessage(&mMessageQueue, message, OS_MESSAGE_NOBLOCK);
|
||||
BOOL sendMessage(OSMessage message) {
|
||||
return OSSendMessage(&mMessageQueue, message, OS_MESSAGE_NOBLOCK);
|
||||
}
|
||||
void sendMessageBlock(OSMessage message) {
|
||||
OSSendMessage(&mMessageQueue, message, OS_MESSAGE_BLOCK);
|
||||
BOOL sendMessageBlock(OSMessage message) {
|
||||
return OSSendMessage(&mMessageQueue, message, OS_MESSAGE_BLOCK);
|
||||
}
|
||||
OSMessage waitMessage() {
|
||||
OSMessage message;
|
||||
|
||||
@@ -22,14 +22,14 @@ JASTaskThread::TCallStack::~TCallStack() {
|
||||
}
|
||||
|
||||
/* 8027B5D8-8027B66C .text sendCmdMsg__13JASTaskThreadFPFPv_lPvUl */
|
||||
bool JASTaskThread::sendCmdMsg(s32 (*param_1)(void*), void* param_2, u32 param_3) {
|
||||
BOOL JASTaskThread::sendCmdMsg(s32 (*param_1)(void*), void* param_2, u32 param_3) {
|
||||
TCallStack* stack = new(JKRGetSystemHeap(), -4) TCallStack(param_3);
|
||||
if (!stack) {
|
||||
return false;
|
||||
}
|
||||
JASystem::Calc::bcopy(param_2, stack->argspace, param_3);
|
||||
stack->field_0x0 = param_1;
|
||||
sendMessageBlock(stack);
|
||||
return sendMessageBlock(stack);
|
||||
}
|
||||
|
||||
/* 8027B66C-8027B6D4 .text run__13JASTaskThreadFv */
|
||||
@@ -79,9 +79,9 @@ void JASystem::Dvd::resumeThread() {
|
||||
}
|
||||
|
||||
/* 8027B84C-8027B8D4 .text sendCmdMsg__Q28JASystem3DvdFPFPv_lPvUl */
|
||||
void JASystem::Dvd::sendCmdMsg(s32 (*param_1)(void*), void* param_2, u32 param_3) {
|
||||
BOOL JASystem::Dvd::sendCmdMsg(s32 (*param_1)(void*), void* param_2, u32 param_3) {
|
||||
JUT_ASSERT(152, sThread);
|
||||
sThread->sendCmdMsg(param_1, param_2, param_3);
|
||||
return sThread->sendCmdMsg(param_1, param_2, param_3);
|
||||
}
|
||||
|
||||
/* 8027B8D4-8027B914 .text checkPassDvdT__Q28JASystem3DvdFUlPUlPFUl_v */
|
||||
|
||||
@@ -197,7 +197,7 @@ JASystem::Kernel::TSolidHeap::TSolidHeap() {
|
||||
}
|
||||
|
||||
/* 8027D370-8027D40C .text alloc__Q38JASystem6Kernel10TSolidHeapFl */
|
||||
int JASystem::Kernel::TSolidHeap::alloc(s32 size) {
|
||||
void* JASystem::Kernel::TSolidHeap::alloc(s32 size) {
|
||||
/* Nonmatching */
|
||||
u32 tmp1 = OSRoundUp32B(size);
|
||||
if (field_0x0 == 0) {
|
||||
@@ -213,7 +213,7 @@ int JASystem::Kernel::TSolidHeap::alloc(s32 size) {
|
||||
}
|
||||
field_0xc++;
|
||||
field_0x10 = tmp2;
|
||||
return tmp2;
|
||||
return (void*)tmp2;
|
||||
}
|
||||
|
||||
/* 8027D40C-8027D424 .text freeAll__Q38JASystem6Kernel10TSolidHeapFv */
|
||||
|
||||
@@ -52,8 +52,9 @@ void JASystem::Kernel::sysAramSetup(u32 param_1) {
|
||||
}
|
||||
|
||||
/* 8027DC84-8027DCDC .text allocFromSysAramFull__Q28JASystem6KernelFPUl */
|
||||
void JASystem::Kernel::allocFromSysAramFull(u32* param_1) {
|
||||
void* JASystem::Kernel::allocFromSysAramFull(u32* param_1) {
|
||||
u32 size = audioAramHeap.getRemain();
|
||||
audioAramHeap.alloc(size - 0x20);
|
||||
void* var1 = audioAramHeap.alloc(size - 0x20);
|
||||
*param_1 = size - 0x20;
|
||||
return var1;
|
||||
}
|
||||
|
||||
@@ -3,81 +3,174 @@
|
||||
// Translation Unit: JASWaveArcLoader.cpp
|
||||
//
|
||||
|
||||
#include "JASWaveArcLoader.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "JSystem/JAudio/JASWaveArcLoader.h"
|
||||
#include "JSystem/JAudio/JASDvdThread.h"
|
||||
#include "JSystem/JAudio/JASSystemHeap.h"
|
||||
#include "JSystem/JKernel/JKRDvdAramRipper.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
#include "MSL_C/string.h"
|
||||
|
||||
const u32 DIR_MAX = 64;
|
||||
|
||||
JASystem::Kernel::THeap JASystem::WaveArcLoader::sAramHeap(NULL);
|
||||
|
||||
/* 80287BD8-80287C24 .text init__Q28JASystem13WaveArcLoaderFv */
|
||||
void JASystem::WaveArcLoader::init() {
|
||||
/* Nonmatching */
|
||||
bool JASystem::WaveArcLoader::init() {
|
||||
u32 local_8;
|
||||
void* var1 = Kernel::allocFromSysAramFull(&local_8);
|
||||
if (!var1) {
|
||||
return false;
|
||||
}
|
||||
sAramHeap.initRootHeap(var1, local_8, Kernel::THeap::Type0);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 80287C24-80287C30 .text getRootHeap__Q28JASystem13WaveArcLoaderFv */
|
||||
void JASystem::WaveArcLoader::getRootHeap() {
|
||||
/* Nonmatching */
|
||||
JASystem::Kernel::THeap* JASystem::WaveArcLoader::getRootHeap() {
|
||||
return &sAramHeap;
|
||||
}
|
||||
|
||||
char JASystem::WaveArcLoader::sCurrentDir[DIR_MAX] = "/Banks/";
|
||||
|
||||
/* 80287C30-80287D24 .text setCurrentDir__Q28JASystem13WaveArcLoaderFPCc */
|
||||
void JASystem::WaveArcLoader::setCurrentDir(const char*) {
|
||||
void JASystem::WaveArcLoader::setCurrentDir(const char* dir) {
|
||||
/* Nonmatching */
|
||||
//JUT_ASSERT(60, std::strlen(dir) < DIR_MAX);
|
||||
strcpy(sCurrentDir, dir);
|
||||
int len = strlen(sCurrentDir);
|
||||
if (sCurrentDir[len - 1] == '/') {
|
||||
return;
|
||||
}
|
||||
JUT_ASSERT(65, len+1 < DIR_MAX);
|
||||
sCurrentDir[len] = '/';
|
||||
sCurrentDir[len+1] = 0;
|
||||
}
|
||||
|
||||
/* 80287D24-80287D30 .text getCurrentDir__Q28JASystem13WaveArcLoaderFv */
|
||||
void JASystem::WaveArcLoader::getCurrentDir() {
|
||||
/* Nonmatching */
|
||||
char* JASystem::WaveArcLoader::getCurrentDir() {
|
||||
return sCurrentDir;
|
||||
}
|
||||
|
||||
/* 80287D30-80287DA4 .text __ct__Q28JASystem8TWaveArcFv */
|
||||
JASystem::TWaveArc::TWaveArc() {
|
||||
/* Nonmatching */
|
||||
JASystem::TWaveArc::TWaveArc() : field_0x4(this) {
|
||||
field_0x4c = 0;
|
||||
field_0x68 = 0;
|
||||
field_0x6c = -1;
|
||||
field_0x70 = 0;
|
||||
field_0x74 = 0;
|
||||
OSInitMutex(&mMutex);
|
||||
}
|
||||
|
||||
/* 80287DA4-80287E34 .text loadSetup__Q28JASystem8TWaveArcFUl */
|
||||
void JASystem::TWaveArc::loadSetup(unsigned long) {
|
||||
/* Nonmatching */
|
||||
bool JASystem::TWaveArc::loadSetup(u32 param_1) {
|
||||
OSLockMutex(&mMutex);
|
||||
if (field_0x74 != param_1) {
|
||||
OSUnlockMutex(&mMutex);
|
||||
return false;
|
||||
}
|
||||
if (field_0x68 != 1) {
|
||||
OSUnlockMutex(&mMutex);
|
||||
return false;
|
||||
}
|
||||
field_0x4c = 1;
|
||||
field_0x68 = 2;
|
||||
OSUnlockMutex(&mMutex);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 80287E34-80287EB8 .text eraseSetup__Q28JASystem8TWaveArcFv */
|
||||
void JASystem::TWaveArc::eraseSetup() {
|
||||
/* Nonmatching */
|
||||
bool JASystem::TWaveArc::eraseSetup() {
|
||||
OSLockMutex(&mMutex);
|
||||
if (field_0x68 == 0) {
|
||||
OSUnlockMutex(&mMutex);
|
||||
return false;
|
||||
}
|
||||
if (field_0x68 == 1) {
|
||||
field_0x68 = 0;
|
||||
OSUnlockMutex(&mMutex);
|
||||
return false;
|
||||
}
|
||||
field_0x4c = 0;
|
||||
field_0x68 = 0;
|
||||
OSUnlockMutex(&mMutex);
|
||||
return true;
|
||||
}
|
||||
|
||||
struct unk_message {
|
||||
JASystem::TWaveArc* field_0x0;
|
||||
int field_0x4;
|
||||
void* field_0x8;
|
||||
u32 field_0xc;
|
||||
};
|
||||
|
||||
/* 80287EB8-80287F48 .text loadToAramCallback__Q28JASystem8TWaveArcFPv */
|
||||
void JASystem::TWaveArc::loadToAramCallback(void*) {
|
||||
s32 JASystem::TWaveArc::loadToAramCallback(void* param_1) {
|
||||
/* Nonmatching */
|
||||
unk_message* msg = (unk_message*)param_1;
|
||||
if (JKRDvdAramRipper::loadToAram(msg->field_0x4, u32(msg->field_0x8), EXPAND_SWITCH_UNKNOWN0, 0, 0) == 0) {
|
||||
return -1;
|
||||
}
|
||||
TWaveArc* waveArc = msg->field_0x0;
|
||||
if (!waveArc->loadSetup(msg->field_0xc)) {
|
||||
return 0;
|
||||
}
|
||||
waveArc->onLoadDone();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 80287F48-80287FE4 .text sendLoadCmd__Q28JASystem8TWaveArcFv */
|
||||
void JASystem::TWaveArc::sendLoadCmd() {
|
||||
bool JASystem::TWaveArc::sendLoadCmd() {
|
||||
/* Nonmatching */
|
||||
OSLockMutex(&mMutex);
|
||||
field_0x4c = 0;
|
||||
field_0x68 = 1;
|
||||
unk_message msg;
|
||||
msg.field_0x0 = this;
|
||||
msg.field_0x4 = field_0x6c;
|
||||
msg.field_0x8 = field_0x4.mBase;
|
||||
msg.field_0xc = ++field_0x74;
|
||||
OSUnlockMutex(&mMutex);
|
||||
if (!Dvd::sendCmdMsg(loadToAramCallback, &msg, sizeof(msg))) {
|
||||
field_0x4.free();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 80287FE4-802880A0 .text load__Q28JASystem8TWaveArcFPQ38JASystem6Kernel5THeap */
|
||||
void JASystem::TWaveArc::load(JASystem::Kernel::THeap*) {
|
||||
void JASystem::TWaveArc::load(Kernel::THeap*) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 802880A0-802880C4 .text erase__Q28JASystem8TWaveArcFv */
|
||||
void JASystem::TWaveArc::erase() {
|
||||
/* Nonmatching */
|
||||
bool JASystem::TWaveArc::erase() {
|
||||
return field_0x4.free();
|
||||
}
|
||||
|
||||
/* 802880C4-8028810C .text onDispose__Q28JASystem8TWaveArcFv */
|
||||
void JASystem::TWaveArc::onDispose() {
|
||||
/* Nonmatching */
|
||||
if (eraseSetup()) {
|
||||
onEraseDone();
|
||||
}
|
||||
}
|
||||
|
||||
/* 8028810C-8028816C .text setEntryNum__Q28JASystem8TWaveArcFl */
|
||||
void JASystem::TWaveArc::setEntryNum(long) {
|
||||
void JASystem::TWaveArc::setEntryNum(s32) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 8028816C-80288214 .text setFileName__Q28JASystem8TWaveArcFPCc */
|
||||
void JASystem::TWaveArc::setFileName(const char*) {
|
||||
/* Nonmatching */
|
||||
void JASystem::TWaveArc::setFileName(const char* param_1) {
|
||||
char* currentDir = WaveArcLoader::getCurrentDir();
|
||||
size_t size = strlen(currentDir);
|
||||
size += strlen(param_1);
|
||||
char* str = new (JKRGetSystemHeap(), -4) char[size + 1];
|
||||
strcpy(str, currentDir);
|
||||
strcat(str, param_1);
|
||||
str[size] = 0;
|
||||
s32 entry = DVDConvertPathToEntrynum(str);
|
||||
delete[] str;
|
||||
if (entry >= 0) {
|
||||
setEntryNum(entry);
|
||||
}
|
||||
}
|
||||
|
||||
/* 80288214-8028828C .text __dt__Q38JASystem6Kernel5THeapFv */
|
||||
JASystem::Kernel::THeap::~THeap() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user