From a20c2ff1fcc275305ba8e2fc31aaef0a456046b6 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Tue, 21 Nov 2023 00:06:01 -0500 Subject: [PATCH] JASHardStream regswap fixes, inlines --- include/JSystem/JAudio/JASHardStream.h | 44 +++++++++++++++++++++-- src/JSystem/JAudio/JASHardStream.cpp | 50 +++++++++++++------------- 2 files changed, 67 insertions(+), 27 deletions(-) diff --git a/include/JSystem/JAudio/JASHardStream.h b/include/JSystem/JAudio/JASHardStream.h index fa5b6a428..ba97f1513 100644 --- a/include/JSystem/JAudio/JASHardStream.h +++ b/include/JSystem/JAudio/JASHardStream.h @@ -14,6 +14,34 @@ namespace JASystem { void secondBgmCallback(s32, DVDFileInfo*); void getAddrCallback(s32, DVDCommandBlock*); + class TPlayPair { + public: + u16 getIntro() { return mIntroNum; } + u16 getLoop() { return mLoopNum; } + + public: + /* 0x00 */ u16 field_0x0; + /* 0x02 */ u16 field_0x2; + /* 0x04 */ u16 mIntroNum; + /* 0x06 */ u16 mLoopNum; + }; + + class TPlayList { + public: + void clear() { + mpPair = NULL; + mpNextList = NULL; + field_0x8 = 0; + } + TPlayPair* getPair() { return mpPair; } + TPlayList* getNext() { return mpNextList; } + + public: + /* 0x00 */ TPlayPair* mpPair; + /* 0x04 */ TPlayList* mpNextList; + /* 0x08 */ u32 field_0x8; + }; + class TControl { public: TControl(); @@ -21,7 +49,7 @@ namespace JASystem { u16 getIntroNum(); u16 getLoopNum(); BOOL fileOpen(u16, DVDFileInfo*); - void clearListOne(); + BOOL clearListOne(); void setLastAddr(DVDFileInfo*); u32 getLastAddr(); BOOL startFirst(u16, DVDFileInfo*, u32*); @@ -31,8 +59,18 @@ namespace JASystem { void calcCurVolume(); u8 volFloatToU8(f32); + void getLastAddrBefore() {} + TPlayList* getList() { return mpList; } + void getPlayArea() {} + void getRestart() {} + void getState() {} + void setList(TPlayList* list) { mpList = list; } + void setPlayArea(u16) {} + void setRestart(u8) {} + void setState(u8) {} + /* 0x00 */ int field_0x0; - /* 0x04 */ void* field_0x4; + /* 0x04 */ TPlayList* mpList; /* 0x08 */ u16 field_0x8; /* 0x0A */ u8 field_0xa; /* 0x0B */ u8 field_0xb; @@ -57,7 +95,7 @@ namespace JASystem { extern TControl strCtrl; extern bool useHardStreaming; extern char* streamFiles; - extern u32* playList; + extern TPlayList* playList; extern int playListMax; extern char rootDir[]; } diff --git a/src/JSystem/JAudio/JASHardStream.cpp b/src/JSystem/JAudio/JASHardStream.cpp index 2e0d807f6..fdb1aa4a8 100644 --- a/src/JSystem/JAudio/JASHardStream.cpp +++ b/src/JSystem/JAudio/JASHardStream.cpp @@ -13,19 +13,17 @@ JASystem::HardStream::TControl JASystem::HardStream::strCtrl; bool JASystem::HardStream::useHardStreaming; char* JASystem::HardStream::streamFiles; -u32* JASystem::HardStream::playList; +JASystem::HardStream::TPlayList* JASystem::HardStream::playList; int JASystem::HardStream::playListMax = 32; /* 8027BE44-8027BEA4 .text unregistBgmAll__Q28JASystem10HardStreamFv */ int JASystem::HardStream::unregistBgmAll() { - /* Nonmatching */ - if (strCtrl.field_0x4 == NULL) { + if (strCtrl.getList() == NULL) { return 0; } - strCtrl.field_0x4 = NULL; + strCtrl.setList(NULL); for (int i = 0; i < playListMax; i++) { - u32* list = playList + i * 3; - list[2] = list[1] = list[0] = 0; + playList[i].clear(); } return 1; } @@ -34,7 +32,6 @@ 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; @@ -48,7 +45,7 @@ void JASystem::HardStream::main() { u16 introNum; switch (strCtrl.field_0xb) { case 1: - if (!strCtrl.field_0x4) { + if (!strCtrl.getList()) { return; } introNum = strCtrl.getIntroNum(); @@ -83,7 +80,7 @@ void JASystem::HardStream::main() { } } strCtrl.clearListOne(); - if (strCtrl.field_0x4 == 0) { + if (!strCtrl.getList()) { if (strCtrl.field_0x8 == 0) { DVDStopStreamAtEndAsync(&stop_cmd, 0); strCtrl.field_0xb = 4; @@ -120,7 +117,8 @@ void JASystem::HardStream::main() { cur_addr_cmd %= 16; return; case 5: - if (!strCtrl.field_0x4) { + TPlayList* list = strCtrl.getList(); + if (!list) { if (strCtrl.field_0x8 != 2) { strCtrl.field_0x8 = 3; } @@ -128,8 +126,8 @@ void JASystem::HardStream::main() { return; } if (strCtrl.field_0x8 == 0) { - if (((u16**)strCtrl.field_0x4)[0][3] == 0xffff) { - if (((u32*)strCtrl.field_0x4)[1] == 0) { + if (list->getPair()->getLoop() == 0xffff) { + if (list->getNext() == NULL) { DVDStopStreamAtEndAsync(&stop_cmd, 0); strCtrl.clearListOne(); strCtrl.field_0x8 = 2; @@ -146,7 +144,7 @@ void JASystem::HardStream::main() { strCtrl.clearListOne(); strCtrl.field_0x8 = 1; } - } else if (!strCtrl.field_0x4) { + } else if (!list) { strCtrl.field_0x8 = 3; strCtrl.field_0xb = 4; } else { @@ -237,7 +235,7 @@ float dummy1() { /* 8027C4E4-8027C544 .text __ct__Q38JASystem10HardStream8TControlFv */ JASystem::HardStream::TControl::TControl() { field_0x0 = 0; - field_0x4 = NULL; + mpList = NULL; field_0xa = 0; field_0x8 = 0; field_0xb = 0; @@ -260,26 +258,24 @@ JASystem::HardStream::TControl::TControl() { /* 8027C544-8027C57C .text getIntroNum__Q38JASystem10HardStream8TControlFv */ u16 JASystem::HardStream::TControl::getIntroNum() { - if (!field_0x4) { + if (!mpList) { return 0xffff; } - u16* ptr = *(u16**)field_0x4; - if (ptr == NULL) { + if (mpList->getPair() == NULL) { return 0xffff; } - return ptr[2]; + return mpList->getPair()->getIntro(); } /* 8027C57C-8027C5B4 .text getLoopNum__Q38JASystem10HardStream8TControlFv */ u16 JASystem::HardStream::TControl::getLoopNum() { - if (!field_0x4) { + if (!mpList) { return 0xffff; } - u16* ptr = *(u16**)field_0x4; - if (ptr == NULL) { + if (mpList->getPair() == NULL) { return 0xffff; } - return ptr[3]; + return mpList->getPair()->getLoop(); } void dummy2() { @@ -315,8 +311,14 @@ BOOL JASystem::HardStream::TControl::fileOpen(u16 param_1, DVDFileInfo* fileinfo } /* 8027C648-8027C67C .text clearListOne__Q38JASystem10HardStream8TControlFv */ -void JASystem::HardStream::TControl::clearListOne() { - /* Nonmatching */ +BOOL JASystem::HardStream::TControl::clearListOne() { + if (mpList == NULL) { + return FALSE; + } + TPlayList* oldList = mpList; + mpList = mpList->getNext(); + oldList->clear(); + return TRUE; } /* 8027C67C-8027C710 .text setLastAddr__Q38JASystem10HardStream8TControlFP11DVDFileInfo */