mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-05 11:17:43 -04:00
Merge pull request #540 from Jcw87/JAudio
JASHardStream, 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,66 @@
|
||||
#ifndef JASHARDSTREAM_H
|
||||
#define JASHARDSTREAM_H
|
||||
|
||||
#include "dolphin/types.h"
|
||||
|
||||
typedef struct DVDCommandBlock DVDCommandBlock;
|
||||
typedef struct DVDFileInfo DVDFileInfo;
|
||||
|
||||
namespace JASystem {
|
||||
namespace HardStream {
|
||||
int unregistBgmAll();
|
||||
void main();
|
||||
void firstBgmCallback(s32, DVDFileInfo*);
|
||||
void secondBgmCallback(s32, DVDFileInfo*);
|
||||
void getAddrCallback(s32, DVDCommandBlock*);
|
||||
|
||||
class TControl {
|
||||
public:
|
||||
TControl();
|
||||
~TControl() {}
|
||||
u16 getIntroNum();
|
||||
u16 getLoopNum();
|
||||
BOOL fileOpen(u16, DVDFileInfo*);
|
||||
void clearListOne();
|
||||
void setLastAddr(DVDFileInfo*);
|
||||
u32 getLastAddr();
|
||||
BOOL startFirst(u16, DVDFileInfo*, u32*);
|
||||
BOOL startSecond(u16, DVDFileInfo*, u32*);
|
||||
void resetFader();
|
||||
u8 getCurVol();
|
||||
void calcCurVolume();
|
||||
u8 volFloatToU8(f32);
|
||||
|
||||
/* 0x00 */ int field_0x0;
|
||||
/* 0x04 */ void* field_0x4;
|
||||
/* 0x08 */ u16 field_0x8;
|
||||
/* 0x0A */ u8 field_0xa;
|
||||
/* 0x0B */ u8 field_0xb;
|
||||
/* 0x0C */ f32 field_0xc;
|
||||
/* 0x10 */ f32 field_0x10;
|
||||
/* 0x14 */ int field_0x14;
|
||||
/* 0x18 */ int field_0x18;
|
||||
/* 0x1C */ int field_0x1c;
|
||||
/* 0x20 */ f32 field_0x20;
|
||||
/* 0x24 */ f32 field_0x24;
|
||||
/* 0x28 */ f32 field_0x28;
|
||||
/* 0x2C */ f32 field_0x2c;
|
||||
/* 0x30 */ f32 field_0x30;
|
||||
/* 0x34 */ f32 field_0x34;
|
||||
/* 0x38 */ int field_0x38;
|
||||
/* 0x3C */ int field_0x3c;
|
||||
/* 0x40 */ int field_0x40;
|
||||
/* 0x44 */ u32 field_0x44[2];
|
||||
/* 0x4C */ u8 field_0x4c;
|
||||
};
|
||||
|
||||
extern TControl strCtrl;
|
||||
extern bool useHardStreaming;
|
||||
extern char* streamFiles;
|
||||
extern u32* playList;
|
||||
extern int playListMax;
|
||||
extern char rootDir[];
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* JASHARDSTREAM_H */
|
||||
@@ -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 */
|
||||
@@ -14,10 +14,12 @@ AIDCallback AIRegisterDMACallback(AIDCallback callback);
|
||||
void AIInitDMA(u32 addr, u32 length);
|
||||
void AIStartDMA(void);
|
||||
void AIStopDMA(void);
|
||||
void AIResetStreamSampleCount(void);
|
||||
void AISetStreamPlayState(u32 state);
|
||||
inline u32 AIGetStreamPlayState(void);
|
||||
void AISetDSPSampleRate(u32 rate);
|
||||
u32 AIGetDSPSampleRate(void);
|
||||
void AISetStreamSampleRate(u32 rate);
|
||||
void __AI_set_stream_sample_rate(u32 rate);
|
||||
u32 AIGetStreamSampleRate(void);
|
||||
void AISetStreamVolLeft(u8 vol);
|
||||
|
||||
@@ -127,12 +127,15 @@ BOOL DVDChangeDir(const char* dirname);
|
||||
BOOL DVDCloseDir(DVDDirectory* dir);
|
||||
BOOL DVDOpenDir(const char*, DVDDirectory* dir);
|
||||
BOOL DVDReadDir(DVDDirectory* dir, DVDDirectoryEntry* entry);
|
||||
BOOL DVDPrepareStreamAsync(DVDFileInfo* fileinfo, u32 length, u32 offset, DVDCallback callback);
|
||||
BOOL DVDReadAbsAsyncPrio(DVDCommandBlock* block, void* addr, s32 length, s32 offset,
|
||||
DVDCBCallback callback, s32 prio);
|
||||
BOOL DVDReadAbsAsyncForBS(DVDCommandBlock* block, void* addr, s32 length, s32 offset,
|
||||
DVDCBCallback callback);
|
||||
BOOL DVDReadDiskID(DVDCommandBlock* block, DVDDiskID* diskID, DVDCBCallback callback);
|
||||
BOOL DVDCancelStreamAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
||||
BOOL DVDStopStreamAtEndAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
||||
BOOL DVDGetStreamPlayAddrAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
||||
BOOL DVDInquiryAsync(DVDCommandBlock* block, DVDDriveInfo* info, DVDCBCallback callback);
|
||||
void DVDReset(void);
|
||||
BOOL DVDSetAutoInvalidation(BOOL autoInval);
|
||||
|
||||
@@ -3,52 +3,315 @@
|
||||
// Translation Unit: JASHardStream.cpp
|
||||
//
|
||||
|
||||
#include "JASHardStream.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "JSystem/JAudio/JASHardStream.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
#include "MSL_C/string.h"
|
||||
#include "dolphin/ai/ai.h"
|
||||
#include "dolphin/dvd/dvd.h"
|
||||
#include "dolphin/os/OS.h"
|
||||
|
||||
JASystem::HardStream::TControl JASystem::HardStream::strCtrl;
|
||||
bool JASystem::HardStream::useHardStreaming;
|
||||
char* JASystem::HardStream::streamFiles;
|
||||
u32* JASystem::HardStream::playList;
|
||||
int JASystem::HardStream::playListMax = 32;
|
||||
|
||||
/* 8027BE44-8027BEA4 .text unregistBgmAll__Q28JASystem10HardStreamFv */
|
||||
void JASystem::HardStream::unregistBgmAll() {
|
||||
int JASystem::HardStream::unregistBgmAll() {
|
||||
/* Nonmatching */
|
||||
if (strCtrl.field_0x4 == NULL) {
|
||||
return 0;
|
||||
}
|
||||
strCtrl.field_0x4 = NULL;
|
||||
for (int i = 0; i < playListMax; i++) {
|
||||
u32* list = playList + i * 3;
|
||||
list[2] = list[1] = list[0] = 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
char JASystem::HardStream::rootDir[32] = "";
|
||||
|
||||
/* 8027BEA4-8027C318 .text main__Q28JASystem10HardStreamFv */
|
||||
void JASystem::HardStream::main() {
|
||||
/* Nonmatching */
|
||||
static DVDFileInfo finfo[3];
|
||||
static u32 cur_finfo = 0;
|
||||
static u8 cur_addr_cmd = 0;
|
||||
static DVDCommandBlock get_addr_cmd[16];
|
||||
static DVDCommandBlock stop_cmd;
|
||||
static DVDCommandBlock finish_cmd;
|
||||
if (!useHardStreaming) {
|
||||
return;
|
||||
}
|
||||
while (true) {
|
||||
u16 introNum;
|
||||
switch (strCtrl.field_0xb) {
|
||||
case 1:
|
||||
if (!strCtrl.field_0x4) {
|
||||
return;
|
||||
}
|
||||
introNum = strCtrl.getIntroNum();
|
||||
if (introNum != 0xffff) {
|
||||
if (!strCtrl.startFirst(introNum, finfo, &cur_finfo)) {
|
||||
strCtrl.field_0xb = 0;
|
||||
return;
|
||||
}
|
||||
strCtrl.field_0x8 = 0;
|
||||
} else {
|
||||
if (!strCtrl.startFirst(strCtrl.getLoopNum(), finfo, &cur_finfo)) {
|
||||
strCtrl.field_0xb = 0;
|
||||
return;
|
||||
}
|
||||
strCtrl.clearListOne();
|
||||
strCtrl.field_0x8 = 1;
|
||||
}
|
||||
strCtrl.field_0xb = 3;
|
||||
return;
|
||||
case 2:
|
||||
if (strCtrl.field_0x8 == 0) {
|
||||
u16 loopNum = strCtrl.getLoopNum();
|
||||
if (loopNum != 0xffff) {
|
||||
if (!strCtrl.startSecond(loopNum, finfo, &cur_finfo)) {
|
||||
strCtrl.field_0xb = 0;
|
||||
return;
|
||||
}
|
||||
strCtrl.clearListOne();
|
||||
strCtrl.field_0x8 = 1;
|
||||
strCtrl.field_0xb = 4;
|
||||
return;
|
||||
}
|
||||
}
|
||||
strCtrl.clearListOne();
|
||||
if (strCtrl.field_0x4 == 0) {
|
||||
if (strCtrl.field_0x8 == 0) {
|
||||
DVDStopStreamAtEndAsync(&stop_cmd, 0);
|
||||
strCtrl.field_0xb = 4;
|
||||
strCtrl.field_0x8 = 2;
|
||||
return;
|
||||
}
|
||||
strCtrl.field_0x8 = 3;
|
||||
strCtrl.field_0xb = 4;
|
||||
return;
|
||||
}
|
||||
introNum = strCtrl.getIntroNum();
|
||||
if (introNum != 0xffff) {
|
||||
if (!strCtrl.startSecond(introNum, finfo, &cur_finfo)) {
|
||||
strCtrl.field_0xb = 0;
|
||||
return;
|
||||
}
|
||||
strCtrl.field_0x8 = 0;
|
||||
} else {
|
||||
if (!strCtrl.startSecond(strCtrl.getLoopNum(), finfo, &cur_finfo)) {
|
||||
strCtrl.field_0xb = 0;
|
||||
return;
|
||||
}
|
||||
strCtrl.clearListOne();
|
||||
strCtrl.field_0x8 = 1;
|
||||
}
|
||||
strCtrl.field_0xb = 4;
|
||||
return;
|
||||
case 4:
|
||||
u8 currentVol = strCtrl.getCurVol();
|
||||
AISetStreamVolLeft(currentVol);
|
||||
AISetStreamVolRight(currentVol);
|
||||
DVDGetStreamPlayAddrAsync(&get_addr_cmd[cur_addr_cmd], getAddrCallback);
|
||||
cur_addr_cmd++;
|
||||
cur_addr_cmd %= 16;
|
||||
return;
|
||||
case 5:
|
||||
if (!strCtrl.field_0x4) {
|
||||
if (strCtrl.field_0x8 != 2) {
|
||||
strCtrl.field_0x8 = 3;
|
||||
}
|
||||
strCtrl.field_0xb = 4;
|
||||
return;
|
||||
}
|
||||
if (strCtrl.field_0x8 == 0) {
|
||||
if (((u16**)strCtrl.field_0x4)[0][3] == 0xffff) {
|
||||
if (((u32*)strCtrl.field_0x4)[1] == 0) {
|
||||
DVDStopStreamAtEndAsync(&stop_cmd, 0);
|
||||
strCtrl.clearListOne();
|
||||
strCtrl.field_0x8 = 2;
|
||||
} else {
|
||||
strCtrl.clearListOne();
|
||||
strCtrl.field_0x8 = 1;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (!strCtrl.startSecond(strCtrl.getLoopNum(), finfo, &cur_finfo)) {
|
||||
strCtrl.field_0xb = 0;
|
||||
return;
|
||||
}
|
||||
strCtrl.clearListOne();
|
||||
strCtrl.field_0x8 = 1;
|
||||
}
|
||||
} else if (!strCtrl.field_0x4) {
|
||||
strCtrl.field_0x8 = 3;
|
||||
strCtrl.field_0xb = 4;
|
||||
} else {
|
||||
introNum = strCtrl.getIntroNum();
|
||||
if (introNum == 0xffff) {
|
||||
strCtrl.field_0x8 = 0;
|
||||
break;
|
||||
}
|
||||
if (!strCtrl.startSecond(introNum, finfo, &cur_finfo)) {
|
||||
strCtrl.field_0xb = 0;
|
||||
return;
|
||||
}
|
||||
strCtrl.field_0x8 = 0;
|
||||
}
|
||||
strCtrl.field_0xb = 4;
|
||||
return;
|
||||
case 6:
|
||||
AISetStreamVolLeft(0);
|
||||
AISetStreamVolRight(0);
|
||||
AISetStreamPlayState(0);
|
||||
DVDCancelStreamAsync(&finish_cmd, NULL);
|
||||
strCtrl.field_0xb = 0;
|
||||
strCtrl.field_0x8 = 0;
|
||||
strCtrl.resetFader();
|
||||
strCtrl.field_0xa = 0;
|
||||
return;
|
||||
case 0:
|
||||
case 3:
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 8027C318-8027C39C .text firstBgmCallback__Q28JASystem10HardStreamFlP11DVDFileInfo */
|
||||
void JASystem::HardStream::firstBgmCallback(long, DVDFileInfo*) {
|
||||
/* Nonmatching */
|
||||
void JASystem::HardStream::firstBgmCallback(s32, DVDFileInfo*) {
|
||||
if (strCtrl.field_0xa == 0) {
|
||||
u8 vol = strCtrl.getCurVol();
|
||||
AISetStreamVolLeft(vol);
|
||||
AISetStreamVolRight(vol);
|
||||
AISetStreamSampleRate(1);
|
||||
AIResetStreamSampleCount();
|
||||
AISetStreamPlayState(1);
|
||||
strCtrl.field_0xb = 2;
|
||||
} else {
|
||||
strCtrl.field_0xb = 4;
|
||||
strCtrl.field_0xa = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8027C39C-8027C3B0 .text secondBgmCallback__Q28JASystem10HardStreamFlP11DVDFileInfo */
|
||||
void JASystem::HardStream::secondBgmCallback(long, DVDFileInfo*) {
|
||||
/* Nonmatching */
|
||||
void JASystem::HardStream::secondBgmCallback(s32, DVDFileInfo*) {
|
||||
strCtrl.field_0xb = 4;
|
||||
}
|
||||
|
||||
/* 8027C3B0-8027C4E4 .text getAddrCallback__Q28JASystem10HardStreamFlP15DVDCommandBlock */
|
||||
void JASystem::HardStream::getAddrCallback(long, DVDCommandBlock*) {
|
||||
/* Nonmatching */
|
||||
void JASystem::HardStream::getAddrCallback(s32 param_1, DVDCommandBlock* param_2) {
|
||||
static BOOL last_frame = 0;
|
||||
if (strCtrl.field_0x8 == 3) {
|
||||
if (param_1 == strCtrl.field_0x44[strCtrl.field_0x4c ^ 1]) {
|
||||
last_frame = true;
|
||||
} else if (last_frame) {
|
||||
last_frame = false;
|
||||
strCtrl.field_0xb = 5;
|
||||
}
|
||||
} else if (strCtrl.field_0x8 == 2) {
|
||||
if (param_1 == strCtrl.field_0x44[strCtrl.field_0x4c ^ 1] - 0x8000) {
|
||||
last_frame = true;
|
||||
} else if (last_frame) {
|
||||
strCtrl.field_0xb = 6;
|
||||
unregistBgmAll();
|
||||
last_frame = false;
|
||||
}
|
||||
} else {
|
||||
if (param_1 == strCtrl.getLastAddr()) {
|
||||
last_frame = true;
|
||||
} else if (last_frame) {
|
||||
last_frame = false;
|
||||
strCtrl.field_0xb = 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float dummy1() {
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
/* 8027C4E4-8027C544 .text __ct__Q38JASystem10HardStream8TControlFv */
|
||||
JASystem::HardStream::TControl::TControl() {
|
||||
/* Nonmatching */
|
||||
field_0x0 = 0;
|
||||
field_0x4 = NULL;
|
||||
field_0xa = 0;
|
||||
field_0x8 = 0;
|
||||
field_0xb = 0;
|
||||
field_0xc = 1.0f;
|
||||
field_0x10 = 0.0f;
|
||||
field_0x14 = 0;
|
||||
field_0x18 = 0;
|
||||
field_0x1c = 0;
|
||||
field_0x20 = 0.0f;
|
||||
field_0x24 = 0.0f;
|
||||
field_0x2c = 1.0f;
|
||||
field_0x30 = 1.0f;
|
||||
field_0x28 = 1.0f;
|
||||
field_0x34 = 0.0f;
|
||||
field_0x38 = 0;
|
||||
field_0x3c = 0;
|
||||
field_0x40 = 0;
|
||||
field_0x4c = 0;
|
||||
}
|
||||
|
||||
/* 8027C544-8027C57C .text getIntroNum__Q38JASystem10HardStream8TControlFv */
|
||||
void JASystem::HardStream::TControl::getIntroNum() {
|
||||
/* Nonmatching */
|
||||
u16 JASystem::HardStream::TControl::getIntroNum() {
|
||||
if (!field_0x4) {
|
||||
return 0xffff;
|
||||
}
|
||||
u16* ptr = *(u16**)field_0x4;
|
||||
if (ptr == NULL) {
|
||||
return 0xffff;
|
||||
}
|
||||
return ptr[2];
|
||||
}
|
||||
|
||||
/* 8027C57C-8027C5B4 .text getLoopNum__Q38JASystem10HardStream8TControlFv */
|
||||
void JASystem::HardStream::TControl::getLoopNum() {
|
||||
/* Nonmatching */
|
||||
u16 JASystem::HardStream::TControl::getLoopNum() {
|
||||
if (!field_0x4) {
|
||||
return 0xffff;
|
||||
}
|
||||
u16* ptr = *(u16**)field_0x4;
|
||||
if (ptr == NULL) {
|
||||
return 0xffff;
|
||||
}
|
||||
return ptr[3];
|
||||
}
|
||||
|
||||
void dummy2() {
|
||||
OSReport(__FILE__);
|
||||
OSReport("playPairs != 0");
|
||||
OSReport("Halt");
|
||||
OSReport("playList != 0");
|
||||
OSReport("name != 0");
|
||||
OSReport("[JASHardStream::setRootDir] ディレクトリ(%s)名が長すぎます。\n");
|
||||
OSReport("filename != 0");
|
||||
OSReport("streamFiles != 0");
|
||||
OSReport("[JASHardStream::setFile] このID(%d)には既にファイルが登録されています。\n");
|
||||
OSReport("pair_id < playPairsMax");
|
||||
OSReport("[JASHardStream::setBgmPair] このBGMペアID(%d)は既に使用されています。\n");
|
||||
OSReport("[JASHardStream::setBgmPair] イントロ部のBGM番号指定が大きすぎます。(%d)\n");
|
||||
OSReport("[JASHardStream::setBgmPair] ループ部のBGM番号指定が大きすぎます。(%d)\n");
|
||||
OSReport("[JASHardStream::registBgmPair] このペア(%d)にはイントロ/ループともにありませんので登録できません。\n");
|
||||
OSReport("new_list != 0");
|
||||
OSReport("[JASHardStream::playBgm] まだ前の曲が再生中ですので、新たに開始できません。\n");
|
||||
}
|
||||
|
||||
/* 8027C5B4-8027C648 .text fileOpen__Q38JASystem10HardStream8TControlFUsP11DVDFileInfo */
|
||||
void JASystem::HardStream::TControl::fileOpen(unsigned short, DVDFileInfo*) {
|
||||
/* Nonmatching */
|
||||
BOOL JASystem::HardStream::TControl::fileOpen(u16 param_1, DVDFileInfo* fileinfo) {
|
||||
char buffer[64];
|
||||
char* ptr = streamFiles + param_1 * 0x24;
|
||||
strcpy(buffer, rootDir);
|
||||
strcat(buffer, ptr);
|
||||
if (!DVDOpen(buffer, fileinfo)) {
|
||||
OSReport("[JASHardStream::main] ファイルが開けません。(%s)\n", buffer);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 8027C648-8027C67C .text clearListOne__Q38JASystem10HardStream8TControlFv */
|
||||
@@ -57,33 +320,60 @@ void JASystem::HardStream::TControl::clearListOne() {
|
||||
}
|
||||
|
||||
/* 8027C67C-8027C710 .text setLastAddr__Q38JASystem10HardStream8TControlFP11DVDFileInfo */
|
||||
void JASystem::HardStream::TControl::setLastAddr(DVDFileInfo*) {
|
||||
/* Nonmatching */
|
||||
void JASystem::HardStream::TControl::setLastAddr(DVDFileInfo* finfo) {
|
||||
JUT_ASSERT(906, finfo != 0);
|
||||
field_0x44[field_0x4c] = finfo->start_address + finfo->length - 0x8000;
|
||||
field_0x4c ^= 1;
|
||||
}
|
||||
|
||||
/* 8027C710-8027C724 .text getLastAddr__Q38JASystem10HardStream8TControlFv */
|
||||
void JASystem::HardStream::TControl::getLastAddr() {
|
||||
/* Nonmatching */
|
||||
u32 JASystem::HardStream::TControl::getLastAddr() {
|
||||
return field_0x44[field_0x4c];
|
||||
}
|
||||
|
||||
/* 8027C724-8027C7D8 .text startFirst__Q38JASystem10HardStream8TControlFUsP11DVDFileInfoPUl */
|
||||
void JASystem::HardStream::TControl::startFirst(unsigned short, DVDFileInfo*, unsigned long*) {
|
||||
/* Nonmatching */
|
||||
BOOL JASystem::HardStream::TControl::startFirst(u16 param_1, DVDFileInfo* param_2, u32* param_3) {
|
||||
if (!fileOpen(param_1, param_2 + *param_3)) {
|
||||
return false;
|
||||
}
|
||||
setLastAddr(param_2 + *param_3);
|
||||
DVDPrepareStreamAsync(param_2 + *param_3, 0, 0, firstBgmCallback);
|
||||
param_3[0]++;
|
||||
param_3[0] %= 3;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 8027C7D8-8027C88C .text startSecond__Q38JASystem10HardStream8TControlFUsP11DVDFileInfoPUl */
|
||||
void JASystem::HardStream::TControl::startSecond(unsigned short, DVDFileInfo*, unsigned long*) {
|
||||
/* Nonmatching */
|
||||
BOOL JASystem::HardStream::TControl::startSecond(u16 param_1, DVDFileInfo* param_2, u32* param_3) {
|
||||
if (!fileOpen(param_1, param_2 + *param_3)) {
|
||||
return false;
|
||||
}
|
||||
setLastAddr(param_2 + *param_3);
|
||||
DVDPrepareStreamAsync(param_2 + *param_3, 0, 0, secondBgmCallback);
|
||||
param_3[0]++;
|
||||
param_3[0] %= 3;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 8027C88C-8027C8C8 .text resetFader__Q38JASystem10HardStream8TControlFv */
|
||||
void JASystem::HardStream::TControl::resetFader() {
|
||||
/* Nonmatching */
|
||||
field_0x14 = 0;
|
||||
field_0x20 = 0.0f;
|
||||
field_0x38 = 0;
|
||||
field_0x18 = 0;
|
||||
field_0x24 = 0.0f;
|
||||
field_0x3c = 0;
|
||||
field_0x30 = 1.0f;
|
||||
field_0x2c = 1.0f;
|
||||
field_0x28 = 1.0f;
|
||||
field_0x1c = 0;
|
||||
field_0x40 = 0;
|
||||
}
|
||||
|
||||
/* 8027C8C8-8027C900 .text getCurVol__Q38JASystem10HardStream8TControlFv */
|
||||
void JASystem::HardStream::TControl::getCurVol() {
|
||||
/* Nonmatching */
|
||||
u8 JASystem::HardStream::TControl::getCurVol() {
|
||||
calcCurVolume();
|
||||
return volFloatToU8(field_0x10);
|
||||
}
|
||||
|
||||
/* 8027C900-8027CB5C .text calcCurVolume__Q38JASystem10HardStream8TControlFv */
|
||||
@@ -92,12 +382,13 @@ void JASystem::HardStream::TControl::calcCurVolume() {
|
||||
}
|
||||
|
||||
/* 8027CB5C-8027CB9C .text volFloatToU8__Q38JASystem10HardStream8TControlFf */
|
||||
void JASystem::HardStream::TControl::volFloatToU8(float) {
|
||||
u8 JASystem::HardStream::TControl::volFloatToU8(f32 param_1) {
|
||||
/* Nonmatching */
|
||||
if (param_1 > 1.0f) {
|
||||
param_1 = 1.0f;
|
||||
}
|
||||
if (param_1 < 0.0f) {
|
||||
param_1 = 0.0f;
|
||||
}
|
||||
return param_1 * 255.0f;
|
||||
}
|
||||
|
||||
/* 8027CBD8-8027CC14 .text __dt__Q38JASystem10HardStream8TControlFv */
|
||||
JASystem::HardStream::TControl::~TControl() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
|
||||
@@ -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