mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-21 22:10:59 -04:00
JASResArcLoader
This commit is contained in:
+1
-1
@@ -657,7 +657,7 @@ config.libs = [
|
||||
Object(Matching, "JSystem/JAudio/JASRate.cpp"),
|
||||
Object(NonMatching, "JSystem/JAudio/JASHardStream.cpp"),
|
||||
Object(NonMatching, "JSystem/JAudio/JASHeapCtrl.cpp"),
|
||||
Object(NonMatching, "JSystem/JAudio/JASResArcLoader.cpp"),
|
||||
Object(Matching, "JSystem/JAudio/JASResArcLoader.cpp"),
|
||||
Object(Matching, "JSystem/JAudio/JASProbe.cpp"),
|
||||
Object(Matching, "JSystem/JAudio/JASKernelDebug.cpp"),
|
||||
Object(Matching, "JSystem/JAudio/JASCmdStack.cpp"),
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
#ifndef JASRESARCLOADER_H
|
||||
#define JASRESARCLOADER_H
|
||||
|
||||
#include "dolphin/types.h"
|
||||
|
||||
class JKRArchive;
|
||||
|
||||
namespace JASystem {
|
||||
namespace ResArcLoader {
|
||||
u32 getResSize(JKRArchive*, u16);
|
||||
s32 loadResourceCallback(void*);
|
||||
u32 loadResource(JKRArchive*, u16, u8*, u32);
|
||||
void loadResourceAsync(JKRArchive*, u16, u8*, u32, void (*)(u32, u32), u32);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* JASRESARCLOADER_H */
|
||||
@@ -3,26 +3,83 @@
|
||||
// Translation Unit: JASResArcLoader.cpp
|
||||
//
|
||||
|
||||
#include "JASResArcLoader.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "JSystem/JAudio/JASResArcLoader.h"
|
||||
#include "JSystem/JAudio/JASDvdThread.h"
|
||||
#include "JSystem/JKernel/JKRArchive.h"
|
||||
#include "dolphin/os/OSMessage.h"
|
||||
|
||||
struct LoadResourceMsg {
|
||||
/* 0x00 */ JKRArchive* mArchive;
|
||||
/* 0x04 */ u16 mId;
|
||||
/* 0x08 */ u8* mBuffer;
|
||||
/* 0x0C */ u32 mSize;
|
||||
/* 0x10 */ void (*mCallback)(u32, u32);
|
||||
/* 0x14 */ u32 mCallbackParam;
|
||||
/* 0x18 */ OSMessageQueue* mMessageQueue;
|
||||
};
|
||||
|
||||
/* 8027D4C8-8027D4FC .text getResSize__Q28JASystem12ResArcLoaderFP10JKRArchiveUs */
|
||||
void JASystem::ResArcLoader::getResSize(JKRArchive*, unsigned short) {
|
||||
/* Nonmatching */
|
||||
u32 JASystem::ResArcLoader::getResSize(JKRArchive* archive, u16 param_2) {
|
||||
JKRArchive::SDIFileEntry* entry = archive->findIdResource(param_2);
|
||||
if (entry == NULL) {
|
||||
return 0;
|
||||
}
|
||||
return entry->data_size;
|
||||
}
|
||||
|
||||
/* 8027D4FC-8027D5A0 .text loadResourceCallback__Q28JASystem12ResArcLoaderFPv */
|
||||
void JASystem::ResArcLoader::loadResourceCallback(void*) {
|
||||
/* Nonmatching */
|
||||
s32 JASystem::ResArcLoader::loadResourceCallback(void* param_1) {
|
||||
LoadResourceMsg* msg = (LoadResourceMsg*)param_1;
|
||||
u32 var1 = msg->mArchive->readResource(msg->mBuffer, msg->mSize, msg->mId);
|
||||
if (msg->mCallback) {
|
||||
msg->mCallback(var1, msg->mCallbackParam);
|
||||
}
|
||||
if (var1 == 0) {
|
||||
if (msg->mMessageQueue) {
|
||||
OSSendMessage(msg->mMessageQueue, OSMessage(-1), OS_MESSAGE_BLOCK);
|
||||
}
|
||||
return -1;
|
||||
} else {
|
||||
if (msg->mMessageQueue) {
|
||||
OSSendMessage(msg->mMessageQueue, OSMessage(0), OS_MESSAGE_BLOCK);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8027D5A0-8027D658 .text loadResource__Q28JASystem12ResArcLoaderFP10JKRArchiveUsPUcUl */
|
||||
void JASystem::ResArcLoader::loadResource(JKRArchive*, unsigned short, unsigned char*, unsigned long) {
|
||||
/* Nonmatching */
|
||||
u32 JASystem::ResArcLoader::loadResource(JKRArchive* archive, u16 id, u8* buffer, u32 size) {
|
||||
OSMessageQueue queue;
|
||||
LoadResourceMsg msg;
|
||||
OSMessage queueMsg;
|
||||
OSMessage receiveMsg;
|
||||
OSInitMessageQueue(&queue, &queueMsg, 1);
|
||||
msg.mArchive = archive;
|
||||
msg.mId = id;
|
||||
msg.mBuffer = buffer;
|
||||
msg.mSize = size;
|
||||
msg.mCallback = NULL;
|
||||
msg.mCallbackParam = 0;
|
||||
msg.mMessageQueue = NULL;
|
||||
msg.mMessageQueue = &queue;
|
||||
if (!Dvd::sendCmdMsg(loadResourceCallback, &msg, sizeof(LoadResourceMsg))) {
|
||||
return 0;
|
||||
}
|
||||
OSReceiveMessage(&queue, &receiveMsg, OS_MESSAGE_BLOCK);
|
||||
return size & ~-(u32(receiveMsg) != 0);
|
||||
}
|
||||
|
||||
/* 8027D658-8027D6B0 .text loadResourceAsync__Q28JASystem12ResArcLoaderFP10JKRArchiveUsPUcUlPFUlUl_vUl */
|
||||
void JASystem::ResArcLoader::loadResourceAsync(JKRArchive*, unsigned short, unsigned char*, unsigned long, void (*)(unsigned long, unsigned long), unsigned long) {
|
||||
/* Nonmatching */
|
||||
void JASystem::ResArcLoader::loadResourceAsync(JKRArchive* archive, u16 id, u8* buffer, u32 size, void (*cb)(u32, u32), u32 cbParam) {
|
||||
LoadResourceMsg msg;
|
||||
msg.mArchive = archive;
|
||||
msg.mId = id;
|
||||
msg.mBuffer = buffer;
|
||||
msg.mSize = size;
|
||||
msg.mCallback = NULL;
|
||||
msg.mCallbackParam = 0;
|
||||
msg.mMessageQueue = NULL;
|
||||
msg.mCallback = cb;
|
||||
msg.mCallbackParam = cbParam;
|
||||
Dvd::sendCmdMsg(loadResourceCallback, &msg, sizeof(LoadResourceMsg));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user