From 26f4c5a0fe3f55e4e3d8c49e304342c346e1b5bb Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Tue, 9 Dec 2025 16:52:31 -0500 Subject: [PATCH] JASAramStream OK (#2937) --- configure.py | 2 +- include/JSystem/JAudio2/JASAramStream.h | 4 ++-- src/JSystem/JAudio2/JASAramStream.cpp | 8 +++----- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/configure.py b/configure.py index ad0d172217a..34da0e9c683 100755 --- a/configure.py +++ b/configure.py @@ -1028,7 +1028,7 @@ config.libs = [ Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASSeqCtrl.cpp"), Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASSeqParser.cpp"), Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASSeqReader.cpp"), - Object(NonMatching, "JSystem/JAudio2/JASAramStream.cpp"), + Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASAramStream.cpp"), Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASBank.cpp"), Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASBasicBank.cpp"), Object(MatchingFor(ALL_GCN, "ShieldD"), "JSystem/JAudio2/JASVoiceBank.cpp"), diff --git a/include/JSystem/JAudio2/JASAramStream.h b/include/JSystem/JAudio2/JASAramStream.h index c503e6b29ef..a50b9e68931 100644 --- a/include/JSystem/JAudio2/JASAramStream.h +++ b/include/JSystem/JAudio2/JASAramStream.h @@ -144,8 +144,8 @@ public: /* 0x0B8 */ u32 field_0x0b8; /* 0x0BC */ int field_0x0bc; /* 0x0C0 */ bool field_0x0c0; - /* 0x0C4 */ u32 field_0x0c4; - /* 0x0C8 */ f32 field_0x0c8; + /* 0x0C4 */ volatile u32 field_0x0c4; + /* 0x0C8 */ volatile f32 field_0x0c8; /* 0x0CC */ DVDFileInfo mDvdFileInfo; /* 0x108 */ u32 field_0x108; /* 0x10C */ int field_0x10c; diff --git a/src/JSystem/JAudio2/JASAramStream.cpp b/src/JSystem/JAudio2/JASAramStream.cpp index 32cbf21603a..878962671e1 100644 --- a/src/JSystem/JAudio2/JASAramStream.cpp +++ b/src/JSystem/JAudio2/JASAramStream.cpp @@ -38,7 +38,6 @@ void JASAramStream::initSystem(u32 i_blockSize, u32 i_channelMax) { } } -// NONMATCHING missing load JASAramStream::JASAramStream() { field_0x0a8 = NULL; field_0x0ac = false; @@ -85,7 +84,6 @@ JASAramStream::JASAramStream() { } } -// NONMATCHING missing load void JASAramStream::init(u32 param_0, u32 param_1, StreamCallback i_callback, void* i_callbackData) { field_0x148 = param_0; field_0x14c = param_1; @@ -258,7 +256,6 @@ bool JASAramStream::headerLoad(u32 param_0, int param_1) { } -// NONMATCHING regalloc and one instruction swap bool JASAramStream::load() { { JASCriticalSection cs; @@ -293,7 +290,9 @@ bool JASAramStream::load() { u32 sp08 = field_0x148 + field_0x10c * sBlockSize; for (int i = 0; i < mChannelNum; i++) { (void)i; - if (!JKRMainRamToAram(sReadBuffer + bhead->field_0x4 * i + sizeof(BlockHeader), + // Fakematch? It seems the only way to get the bhead->field_0x4 load in the right order is + // with a pointer cast on its address in one of the two places it is read, but not both. + if (!JKRMainRamToAram(sReadBuffer + *(u32*)&bhead->field_0x4 * i + sizeof(BlockHeader), sp08 + sBlockSize * field_0x160 * i, bhead->field_0x4, EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1, NULL)) { JUT_WARN(522, "%s", "JKRMainRamToAram Failed"); @@ -363,7 +362,6 @@ void JASAramStream::channelCallback(u32 i_callbackType, JASChannel* i_channel, ((JASAramStream*)i_this)->updateChannel(i_callbackType, i_channel, i_dspChannel); } -// NONMATCHING missing extra loads of field_0x0c4 void JASAramStream::updateChannel(u32 i_callbackType, JASChannel* i_channel, JASDsp::TChannel* i_dspChannel) { u32 block_samples = getBlockSamples();