summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorhatal175 <hatal175@users.noreply.github.com>2024-02-09 01:30:28 +0200
committerGitHub <noreply@github.com>2024-02-08 15:30:28 -0800
commit9f38190f00c329a99dcb3eb5530bdfe8b1caf1c7 (patch)
treee682abfcfddcd8517dac7fedbe9551e05e32947e /libs
parent95176edb8226b8907947652f817eb7933357adfc (diff)
Work On JAudio (#2067)
* Match two JASTrack functions * dsptask, JAISoundStarter OK. Other small matches * Work on JAIStream * Work on JAIStreamMgr * Work on JAISeqMgr * Formatting
Diffstat (limited to 'libs')
-rw-r--r--libs/JSystem/JAudio2/JAISe.cpp4
-rw-r--r--libs/JSystem/JAudio2/JAISeq.cpp4
-rw-r--r--libs/JSystem/JAudio2/JAISeqMgr.cpp223
-rw-r--r--libs/JSystem/JAudio2/JAISoundStarter.cpp47
-rw-r--r--libs/JSystem/JAudio2/JAIStream.cpp338
-rw-r--r--libs/JSystem/JAudio2/JAIStreamMgr.cpp169
-rw-r--r--libs/JSystem/JAudio2/JASAramStream.cpp9
-rw-r--r--libs/JSystem/JAudio2/JASTrack.cpp26
-rw-r--r--libs/JSystem/JAudio2/JAUAudioMgr.cpp44
-rw-r--r--libs/JSystem/JAudio2/JAUClusterSound.cpp40
-rw-r--r--libs/JSystem/JAudio2/JAUSectionHeap.cpp16
-rw-r--r--libs/JSystem/JAudio2/Makefile2
-rw-r--r--libs/JSystem/JAudio2/dsptask.cpp96
-rw-r--r--libs/JSystem/JAudio2/osdsp.cpp23
-rw-r--r--libs/JSystem/JAudio2/osdsp_task.cpp1
15 files changed, 531 insertions, 511 deletions
diff --git a/libs/JSystem/JAudio2/JAISe.cpp b/libs/JSystem/JAudio2/JAISe.cpp
index 8c370a526c..b344dee402 100644
--- a/libs/JSystem/JAudio2/JAISe.cpp
+++ b/libs/JSystem/JAudio2/JAISe.cpp
@@ -126,7 +126,7 @@ void JAISe::JAISeCategoryMgr_calc_() {
if (calc_JAISound_()) {
inner_.mTempoMgr.calc();
if (inner_.field_0x278) {
- inner_.field_0x278->virtual3(this);
+ inner_.field_0x278->calc(this);
}
}
if (isStopping() || mPriority == -1) {
@@ -159,7 +159,7 @@ void JAISe::JAISeMgr_startID_(JAISoundID param_0, JGeometry::TVec3<f32> const* p
start_JAISound_(param_0, param_1, param_2);
inner_.field_0x26c = 0;
if (inner_.mSoundStrategyMgr) {
- inner_.field_0x278 = inner_.mSoundStrategyMgr->virtual3(param_0);
+ inner_.field_0x278 = inner_.mSoundStrategyMgr->calc(param_0);
} else {
inner_.field_0x278 = NULL;
}
diff --git a/libs/JSystem/JAudio2/JAISeq.cpp b/libs/JSystem/JAudio2/JAISeq.cpp
index 6478f4b81c..d00b503c66 100644
--- a/libs/JSystem/JAudio2/JAISeq.cpp
+++ b/libs/JSystem/JAudio2/JAISeq.cpp
@@ -161,7 +161,7 @@ void JAISeq::JAISeqMgr_startID_(JAISoundID param_0, JGeometry::TVec3<f32> const*
reserveChildTracks_(param_4);
start_JAISound_(param_0, param_1, param_2);
if (inner_.strategyMgr) {
- field_0x3a8 = inner_.strategyMgr->virtual3(param_0);
+ field_0x3a8 = inner_.strategyMgr->calc(param_0);
} else {
field_0x3a8 = NULL;
}
@@ -301,7 +301,7 @@ void JAISeq::JAISeqMgr_calc_() {
}
}
if (field_0x3a8) {
- field_0x3a8->virtual3(this);
+ field_0x3a8->calc(this);
}
}
}
diff --git a/libs/JSystem/JAudio2/JAISeqMgr.cpp b/libs/JSystem/JAudio2/JAISeqMgr.cpp
index 36a55fb907..89a1afa770 100644
--- a/libs/JSystem/JAudio2/JAISeqMgr.cpp
+++ b/libs/JSystem/JAudio2/JAISeqMgr.cpp
@@ -4,35 +4,13 @@
//
#include "JSystem/JAudio2/JAISeqMgr.h"
+#include "JSystem/JAudio2/JAISeq.h"
+#include "JSystem/JAudio2/JASHeapCtrl.h"
+#include "JSystem/JAudio2/JAISoundHandles.h"
+#include "JSystem/JAudio2/JAISoundInfo.h"
#include "dol2asm.h"
//
-// Types:
-//
-
-template <typename A0>
-struct JASMemPool {};
-/* JASMemPool<JAISeq> */
-struct JASMemPool__template2 {
- /* 802A1AF4 */ void func_802A1AF4(void* _this);
-};
-
-struct JASGenericMemPool {
- /* 80290848 */ JASGenericMemPool();
- /* 80290860 */ ~JASGenericMemPool();
- /* 80290948 */ void alloc(u32);
- /* 80290994 */ void free(void*, u32);
-};
-
-struct JAISeq {
- /* 802A0A8C */ JAISeq(JAISeqMgr*, JAISoundStrategyMgr<JAISeq>*);
- /* 802A0B64 */ void JAISeqMgr_startID_(JAISoundID, JGeometry::TVec3<f32> const*, JAIAudience*,
- int, int);
- /* 802A108C */ void JAISeqMgr_calc_();
- /* 802A14FC */ void JAISeqMgr_mixOut_(JASSoundParams const&, JAISoundActivity);
-};
-
-//
// Forward References:
//
@@ -91,25 +69,35 @@ extern "C" extern u8 __OSReport_disable;
/* 802A1804-802A1870 29C144 006C+00 1/0 0/0 0/0 .text
* isUsingSeqData__9JAISeqMgrFRC16JAISeqDataRegion */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm bool JAISeqMgr::isUsingSeqData(JAISeqDataRegion const& param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JAISeqMgr/isUsingSeqData__9JAISeqMgrFRC16JAISeqDataRegion.s"
+bool JAISeqMgr::isUsingSeqData(JAISeqDataRegion const& param_1) {
+ for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
+ if (param_1.intersects(link->getObject()->getSeqData())) {
+ return true;
+ }
+ }
+ return false;
}
-#pragma pop
+
+
/* 802A1870-802A1914 29C1B0 00A4+00 1/0 0/0 0/0 .text
* releaseSeqData__9JAISeqMgrFRC16JAISeqDataRegion */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm int JAISeqMgr::releaseSeqData(JAISeqDataRegion const& param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JAISeqMgr/releaseSeqData__9JAISeqMgrFRC16JAISeqDataRegion.s"
+int JAISeqMgr::releaseSeqData(JAISeqDataRegion const& param_1) {
+ bool bVar1 = false;
+ for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
+ if (param_1.intersects(link->getObject()->getSeqData())) {
+ link->getObject()->stop();
+ bVar1 = true;
+ }
+ }
+ ReleaseSeqResult uVar4;
+ if (!bVar1) {
+ uVar4 = RELEASE_SEQ_2;
+ } else {
+ uVar4 = RELEASE_SEQ_1;
+ }
+ return uVar4;
}
-#pragma pop
/* ############################################################################################## */
/* 803C9958-803C9970 026A78 0014+04 2/2 1/1 0/0 .data __vt__9JAISeqMgr */
@@ -142,14 +130,13 @@ SECTION_SDATA2 static f32 lit_693[1 + 1 /* padding */] = {
};
/* 802A1914-802A1A08 29C254 00F4+00 0/0 1/1 0/0 .text __ct__9JAISeqMgrFb */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm JAISeqMgr::JAISeqMgr(bool param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JAISeqMgr/__ct__9JAISeqMgrFb.s"
+JAISeqMgr::JAISeqMgr(bool param_1) : JASGlobalInstance<JAISeqMgr>(param_1), mAudience(NULL) {
+ seqDataMgr_ = NULL;
+ field_0x10 = NULL;
+ field_0x70 = 16;
+ mMove.init();
+ mActivity.init();
}
-#pragma pop
/* ############################################################################################## */
/* 804340C0-804340CC 060DE0 000C+00 3/3 0/0 0/0 .bss @715 */
@@ -161,6 +148,21 @@ extern u8 data_804340CC[16 + 4 /* padding */];
u8 data_804340CC[16 + 4 /* padding */];
/* 802A1A08-802A1AF4 29C348 00EC+00 1/1 0/0 0/0 .text freeDeadSeq___9JAISeqMgrFv */
+// Matches with all JASPoolAllocObject definitions and data_80451320
+#ifdef NONMATCHING
+void JAISeqMgr::freeDeadSeq_() {
+ JSULink<JAISeq>* link = mSeqList.getFirst();
+ while (link != NULL) {
+ JAISeq* seq = link->getObject();
+ JSULink<JAISeq>* next = seq->getNext();
+ if (seq->status_.isDead()) {
+ mSeqList.remove(link);
+ delete seq;
+ }
+ link = next;
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -169,6 +171,7 @@ asm void JAISeqMgr::freeDeadSeq_() {
#include "asm/JSystem/JAudio2/JAISeqMgr/freeDeadSeq___9JAISeqMgrFv.s"
}
#pragma pop
+#endif
/* 802A1AF4-802A1B48 29C434 0054+00 3/3 1/1 0/0 .text __dt__19JASMemPool<6JAISeq>Fv */
#pragma push
@@ -182,86 +185,122 @@ extern "C" asm void func_802A1AF4(void* _this) {
/* 802A1B48-802A1C90 29C488 0148+00 0/0 1/1 0/0 .text
* startSound__9JAISeqMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm bool JAISeqMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1,
- JGeometry::TVec3<f32> const* param_2) {
- nofralloc
-#include "asm/JSystem/JAudio2/JAISeqMgr/func_802A1B48.s"
+bool JAISeqMgr::startSound(JAISoundID param_1, JAISoundHandle* param_2,
+ JGeometry::TVec3<f32> const* param_3) {
+ if (param_2 != NULL && *param_2) {
+ (*param_2)->stop();
+ }
+ JAISoundInfo* soundInfo = JASGlobalInstance<JAISoundInfo>::getInstance();
+ int category = (soundInfo != NULL) ? soundInfo->getCategory(param_1) : -1;
+ JAISeqData aJStack_38(NULL, 0);
+ JUT_ASSERT(81, seqDataMgr_);
+ if (seqDataMgr_->getSeqData(param_1, &aJStack_38) == JAISeqDataMgr::SeqDataReturnValue_0) {
+ return false;
+ }
+ JAISeq* jaiSeq = beginStartSeq_();
+ if (jaiSeq != NULL) {
+ jaiSeq->JAISeqMgr_startID_(param_1, param_3, mAudience, category, field_0x70);
+ if (endStartSeq_(jaiSeq, param_2) != 0) {
+ if (soundInfo != NULL) {
+ soundInfo->getSeqInfo(param_1, jaiSeq);
+ }
+ return true;
+ }
+ }
+
+ return false;
}
-#pragma pop
/* 802A1C90-802A1DFC 29C5D0 016C+00 0/0 4/4 0/0 .text calc__9JAISeqMgrFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JAISeqMgr::calc() {
- nofralloc
-#include "asm/JSystem/JAudio2/JAISeqMgr/calc__9JAISeqMgrFv.s"
+void JAISeqMgr::calc() {
+ mMove.calc();
+ for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
+ link->getObject()->JAISeqMgr_calc_();
+ }
+ freeDeadSeq_();
}
-#pragma pop
/* 802A1DFC-802A1E3C 29C73C 0040+00 0/0 1/1 0/0 .text stop__9JAISeqMgrFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JAISeqMgr::stop() {
- nofralloc
-#include "asm/JSystem/JAudio2/JAISeqMgr/stop__9JAISeqMgrFv.s"
+void JAISeqMgr::stop() {
+ for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
+ link->getObject()->stop();
+ }
}
-#pragma pop
/* 802A1E3C-802A1E8C 29C77C 0050+00 0/0 1/1 0/0 .text stop__9JAISeqMgrFUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JAISeqMgr::stop(u32 param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JAISeqMgr/stop__9JAISeqMgrFUl.s"
+void JAISeqMgr::stop(u32 param_0) {
+ for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
+ link->getObject()->stop(param_0);
+ }
}
-#pragma pop
/* 802A1E8C-802A1EFC 29C7CC 0070+00 0/0 1/1 0/0 .text stopSoundID__9JAISeqMgrF10JAISoundID */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JAISeqMgr::stopSoundID(JAISoundID param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JAISeqMgr/stopSoundID__9JAISeqMgrF10JAISoundID.s"
+void JAISeqMgr::stopSoundID(JAISoundID param_1) {
+ if (!param_1.isAnonymous()) {
+ for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
+ if ((u32)link->getObject()->getID() == (u32)param_1) {
+ link->getObject()->stop();
+ }
+ }
+ }
}
-#pragma pop
/* 802A1EFC-802A1F58 29C83C 005C+00 0/0 4/4 0/0 .text mixOut__9JAISeqMgrFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JAISeqMgr::mixOut() {
- nofralloc
-#include "asm/JSystem/JAudio2/JAISeqMgr/mixOut__9JAISeqMgrFv.s"
+void JAISeqMgr::mixOut() {
+ for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
+ link->getObject()->JAISeqMgr_mixOut_(mMove.mParams, mActivity);
+ }
}
-#pragma pop
/* 802A1F58-802A1FE8 29C898 0090+00 1/1 0/0 0/0 .text beginStartSeq___9JAISeqMgrFv */
+// Matches with JASPoolAllocObject stuff
+#ifdef NONMATCHING
+JAISeq* JAISeqMgr::beginStartSeq_() {
+ JAISeq* seq = new JAISeq(this, field_0x10);
+ if (seq == NULL) {
+ JUT_WARN(273, "JASPoolAllocObject::<JAISeq>::operator new failed .\n");
+ }
+ return seq;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void JAISeqMgr::beginStartSeq_() {
+asm JAISeq* JAISeqMgr::beginStartSeq_() {
nofralloc
#include "asm/JSystem/JAudio2/JAISeqMgr/beginStartSeq___9JAISeqMgrFv.s"
}
#pragma pop
+#endif
/* 802A1FE8-802A20F0 29C928 0108+00 1/1 0/0 0/0 .text
* endStartSeq___9JAISeqMgrFP6JAISeqP14JAISoundHandle */
+// Matches with JASPoolAllocObject stuff
+#ifdef NONMATCHING
+bool JAISeqMgr::endStartSeq_(JAISeq* param_1, JAISoundHandle* param_2) {
+ JAISeq* sound = param_1->getObject();
+ if (sound != NULL) {
+ if (sound->status_.isAlive()) {
+ mSeqList.append(param_1);
+ if (param_2 != NULL) {
+ sound->attachHandle(param_2);
+ }
+ return true;
+ }
+ delete sound;
+ }
+ return false;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void JAISeqMgr::endStartSeq_(JAISeq* param_0, JAISoundHandle* param_1) {
+asm bool JAISeqMgr::endStartSeq_(JAISeq* param_0, JAISoundHandle* param_1) {
nofralloc
#include "asm/JSystem/JAudio2/JAISeqMgr/endStartSeq___9JAISeqMgrFP6JAISeqP14JAISoundHandle.s"
}
#pragma pop
+#endif
/* 802A20F0-802A2184 29CA30 0094+00 1/0 0/0 0/0 .text __dt__9JAISeqMgrFv */
#pragma push
diff --git a/libs/JSystem/JAudio2/JAISoundStarter.cpp b/libs/JSystem/JAudio2/JAISoundStarter.cpp
index ff0ce36e8c..073bac8c43 100644
--- a/libs/JSystem/JAudio2/JAISoundStarter.cpp
+++ b/libs/JSystem/JAudio2/JAISoundStarter.cpp
@@ -1,39 +1,11 @@
//
-// Generated By: dol2asm
-// Translation Unit: JAISoundStarter
+// JAISoundStarter
//
#include "JSystem/JAudio2/JAISoundStarter.h"
-#include "dol2asm.h"
+#include "JSystem/JAudio2/JAISoundHandles.h"
#include "dolphin/types.h"
-//
-// Forward References:
-//
-
-extern "C" void __ct__15JAISoundStarterFb();
-extern "C" void __dt__15JAISoundStarterFv();
-extern "C" void func_802A2FEC();
-
-//
-// External References:
-//
-
-extern "C" void __dl__FPv();
-
-//
-// Declarations:
-//
-
-/* ############################################################################################## */
-/* 803C99C8-803C99D8 026AE8 0010+00 2/2 0/0 0/0 .data __vt__15JAISoundStarter */
-SECTION_DATA extern void* __vt__15JAISoundStarter[4] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__15JAISoundStarterFv,
- (void*)NULL,
-};
-
/* 802A2F6C-802A2F88 29D8AC 001C+00 0/0 1/1 0/0 .text __ct__15JAISoundStarterFb */
JAISoundStarter::JAISoundStarter(bool param_0) : JASGlobalInstance<JAISoundStarter>(param_0) {
}
@@ -44,8 +16,6 @@ JAISoundStarter::~JAISoundStarter() {
/* 802A2FEC-802A30D4 29D92C 00E8+00 0/0 4/4 0/0 .text
* startLevelSound__15JAISoundStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
-// This function is probably virtual but it causes vtable issues.
-#ifdef NONMATCHING
bool JAISoundStarter::startLevelSound(JAISoundID param_0, JAISoundHandle* param_1,
JGeometry::TVec3<f32> const* param_2) {
if (*param_1) {
@@ -58,20 +28,9 @@ bool JAISoundStarter::startLevelSound(JAISoundID param_0, JAISoundHandle* param_
}
}
- bool iVar2 = startLevelSound(param_0, param_1, param_2);
+ bool iVar2 = startSound(param_0, param_1, param_2);
if ((iVar2) && *param_1) {
(*param_1)->setLifeTime(1, false);
}
return iVar2;
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm bool JAISoundStarter::startLevelSound(JAISoundID param_0, JAISoundHandle* param_1,
- JGeometry::TVec3<f32> const* param_2) {
- nofralloc
-#include "asm/JSystem/JAudio2/JAISoundStarter/func_802A2FEC.s"
-}
-#pragma pop
-#endif \ No newline at end of file
diff --git a/libs/JSystem/JAudio2/JAIStream.cpp b/libs/JSystem/JAudio2/JAIStream.cpp
index b70f89f2d2..f79efde35a 100644
--- a/libs/JSystem/JAudio2/JAIStream.cpp
+++ b/libs/JSystem/JAudio2/JAIStream.cpp
@@ -4,28 +4,15 @@
//
#include "JSystem/JAudio2/JAIStream.h"
+#include "JSystem/JAudio2/JAIStreamMgr.h"
+#include "JSystem/JAudio2/JASHeapCtrl.h"
+#include "JSystem/JAudio2/JAIAudience.h"
+#include "JSystem/JAudio2/JAISoundChild.h"
+#include "JSystem/JAudio2/JAIStreamDataMgr.h"
+#include "JSystem/JKernel/JKRHeap.h"
#include "dol2asm.h"
//
-// Types:
-//
-
-struct JASGenericMemPool {
- /* 80290848 */ JASGenericMemPool();
- /* 80290948 */ void alloc(u32);
- /* 80290994 */ void free(void*, u32);
-};
-
-struct JAIStreamMgr {};
-
-struct JAIAudience {};
-
-struct JAISoundChild {
- /* 802A2AB0 */ void init();
- /* 802A2B7C */ void calc();
-};
-
-//
// Forward References:
//
@@ -81,93 +68,132 @@ extern "C" void _restgpr_29();
extern "C" extern u8 data_804340B0[16];
extern "C" extern u8 data_80451318[8];
-//
-// Declarations:
-//
-
/* 802A30D4-802A3104 29DA14 0030+00 1/1 0/0 0/0 .text
* JAIStream_JASAramStreamCallback___FUlP13JASAramStreamPv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-static asm void JAIStream_JASAramStreamCallback_(u32 param_0, JASAramStream* param_1,
- void* param_2) {
- nofralloc
-#include "asm/JSystem/JAudio2/JAIStream/JAIStream_JASAramStreamCallback___FUlP13JASAramStreamPv.s"
+static void JAIStream_JASAramStreamCallback_(u32 param_1, JASAramStream* param_2, void* param_3) {
+ switch (param_1) {
+ case 1:
+ ((JAIStream*)(param_3))->field_0x2c5 = 1;
+ break;
+ case 0:
+ ((JAIStream*)(param_3))->field_0x2c6 = 1;
+ break;
+ }
}
-#pragma pop
-
-/* ############################################################################################## */
-/* 803C99D8-803C9A08 026AF8 0030+00 1/1 1/1 0/0 .data __vt__9JAIStream */
-SECTION_DATA extern void* __vt__9JAIStream[12] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)getNumChild__9JAIStreamCFv,
- (void*)getChild__9JAIStreamFi,
- (void*)releaseChild__9JAIStreamFi,
- (void*)asSe__8JAISoundFv,
- (void*)asSeq__8JAISoundFv,
- (void*)asStream__9JAIStreamFv,
- (void*)getTrack__9JAIStreamFv,
- (void*)getChildTrack__9JAIStreamFi,
- (void*)getTempoMgr__9JAIStreamFv,
- (void*)JAISound_tryDie___9JAIStreamFv,
-};
/* 802A3104-802A319C 29DA44 0098+00 0/0 1/1 0/0 .text
* __ct__9JAIStreamFP12JAIStreamMgrP31JAISoundStrategyMgr<9JAIStream> */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm JAIStream::JAIStream(JAIStreamMgr* param_0, JAISoundStrategyMgr<JAIStream>* param_1) {
- nofralloc
-#include "asm/JSystem/JAudio2/JAIStream/func_802A3104.s"
+JAIStream::JAIStream(JAIStreamMgr* param_1, JAISoundStrategyMgr<JAIStream>* param_2) : JSULink<JAIStream>(this) {
+ field_0x290 = 0;
+ field_0x2c0 = param_2;
+ field_0x2b8 = param_1;
+ field_0x29c = 0;
+ field_0x2c5 = 0;
+ field_0x2c6 = 0;
+ for (int i = 0; i < CHANNEL_MAX; i++) {
+ field_0x2a0[i] = NULL;
+ }
}
-#pragma pop
/* 802A319C-802A3230 29DADC 0094+00 0/0 1/1 0/0 .text
* JAIStreamMgr_startID___9JAIStreamF10JAISoundIDlPCQ29JGeometry8TVec3<f>P11JAIAudiencei */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JAIStream::JAIStreamMgr_startID_(JAISoundID param_0, s32 param_1,
- JGeometry::TVec3<f32> const* param_2,
- JAIAudience* param_3, int param_4) {
- nofralloc
-#include "asm/JSystem/JAudio2/JAIStream/func_802A319C.s"
+void JAIStream::JAIStreamMgr_startID_(JAISoundID param_1, s32 param_2,
+ JGeometry::TVec3<f32> const* param_3, JAIAudience* param_4,
+ int param_5) {
+ field_0x298 = param_5;
+ field_0x294 = param_2;
+ start_JAISound_(param_1, param_3, param_4);
+ field_0x290 = 0;
+ if (field_0x2c0 != NULL) {
+ field_0x2bc = field_0x2c0->calc(param_1);
+ } else {
+ field_0x2bc = NULL;
+ }
}
-#pragma pop
/* 802A3230-802A33F4 29DB70 01C4+00 1/1 0/0 0/0 .text prepare_prepareStream___9JAIStreamFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JAIStream::prepare_prepareStream_() {
- nofralloc
-#include "asm/JSystem/JAudio2/JAIStream/prepare_prepareStream___9JAIStreamFv.s"
+bool JAIStream::prepare_prepareStream_() {
+ u32 local_28;
+ switch (field_0x290) {
+ case 0:
+ JAIStreamAramMgr* streamAramMgr = field_0x2b8->getStreamAramMgr();
+ JUT_ASSERT(100, streamAramMgr);
+ field_0x29c = streamAramMgr->newStreamAram(&local_28);
+ if (field_0x29c != NULL) {
+ field_0x0a8.field_0x0.init((u32)field_0x29c, local_28, &JAIStream_JASAramStreamCallback_, this);
+ field_0x290 = 1;
+ prepareCount = 0;
+ } else {
+ increasePrepareCount_JAISound_();
+ }
+ break;
+ case 1:
+ if (audible_ != NULL) {
+ JASSoundParams* soundParams = audible_->getOuterParams(0);
+ field_0x0a8.field_0x0.setPitch(soundParams->mPitch);
+ field_0x0a8.field_0x0.setVolume(soundParams->mVolume);
+ field_0x0a8.field_0x0.setPan(soundParams->mPan);
+ field_0x0a8.field_0x0.setFxmix(soundParams->mFxMix);
+ field_0x0a8.field_0x0.setDolby(soundParams->mDolby);
+ }
+ field_0x2c5 = 0;
+ if (field_0x0a8.field_0x0.prepare(field_0x294, -1)) {
+ field_0x290 = 2;
+ }
+ break;
+ case 2:
+ if (field_0x2c5 != 0) {
+ field_0x2c5 = 0;
+ field_0x290 = 3;
+ } else {
+ increasePrepareCount_JAISound_();
+ }
+ break;
+ case 3:
+ return true;
+ case 4:
+ JUT_WARN(155, "PC must not pass here.");
+ break;
+ }
+
+ return false;
}
-#pragma pop
/* 802A33F4-802A3498 29DD34 00A4+00 1/1 0/0 0/0 .text prepare___9JAIStreamFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JAIStream::prepare_() {
- nofralloc
-#include "asm/JSystem/JAudio2/JAIStream/prepare___9JAIStreamFv.s"
+void JAIStream::prepare_() {
+ if (field_0x2c6 != 0) {
+ return;
+ }
+ switch(status_.state.unk) {
+ case 0:
+ if (prepare_prepareStream_()) {
+ status_.state.unk = 5;
+ prepare_startStream_();
+ }
+ break;
+ case 1:
+ if (prepare_prepareStream_()) {
+ status_.state.unk = 3;
+ }
+ break;
+ case 4:
+ status_.state.unk = 5;
+ prepare_startStream_();
+ break;
+ case 5:
+ break;
+ }
}
-#pragma pop
/* 802A3498-802A34E4 29DDD8 004C+00 1/1 0/0 0/0 .text prepare_startStream___9JAIStreamFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JAIStream::prepare_startStream_() {
- nofralloc
-#include "asm/JSystem/JAudio2/JAIStream/prepare_startStream___9JAIStreamFv.s"
+void JAIStream::prepare_startStream_() {
+ if (field_0x0a8.field_0x0.start()) {
+ field_0x2c6 = 0;
+ field_0x2c4 = 0;
+ field_0x290 = 4;
+ }
}
-#pragma pop
/* ############################################################################################## */
/* 804557F0-804557F4 003DF0 0004+00 2/2 0/0 0/0 .sdata2 @864 */
@@ -190,6 +216,57 @@ SECTION_SDATA2 static f32 lit_866[1 + 1 /* padding */] = {
/* 802A34E4-802A3720 29DE24 023C+00 0/0 1/1 0/0 .text
* JAIStreamMgr_mixOut___9JAIStreamFRC14JASSoundParams16JAISoundActivity */
+// Matches with literals
+#ifdef NONMATCHING
+void JAIStream::JAIStreamMgr_mixOut_(JASSoundParams const& param_1, JAISoundActivity param_2) {
+ bool local_54;
+ JASSoundParams local_4c;
+ params.mixOutAll(param_1, &local_4c, (status_.isMute() || param_2.field_0x0.flags.flag1) ? 0.0f : fader.getIntensity());
+ if (field_0x2bc != NULL) {
+ field_0x2bc->virtual4(this, local_4c);
+ }
+ JASSoundParams* mixParams = &local_4c;
+ if (audible_ != NULL && audience_ != NULL) {
+ for (int i = 0; i < audience_->getMaxChannels(); i++) {
+ JASSoundParams* outerParams = audible_->getOuterParams(i);
+ if (outerParams != NULL) {
+ audience_->mixChannelOut(local_4c, audible_, i);
+ mixParams = outerParams;
+ break;
+ }
+ }
+ }
+ for (int i = 0; i < CHANNEL_MAX; i++) {
+ field_0x0a8.field_0x0.setPitch(mixParams->mPitch);
+ if (field_0x2a0[i] != NULL) {
+ field_0x0a8.field_0x0.setChannelVolume(i, field_0x2a0[i]->mMove.mParams.mVolume *
+ mixParams->mVolume);
+ field_0x0a8.field_0x0.setChannelPan(
+ i, (field_0x2a0[i]->mMove.mParams.mPan + mixParams->mPan) - 0.5f);
+ field_0x0a8.field_0x0.setChannelFxmix(i, field_0x2a0[i]->mMove.mParams.mFxMix +
+ mixParams->mFxMix);
+ field_0x0a8.field_0x0.setChannelDolby(i, field_0x2a0[i]->mMove.mParams.mDolby +
+ mixParams->mDolby);
+ } else {
+ field_0x0a8.field_0x0.setChannelVolume(i, mixParams->mVolume);
+ field_0x0a8.field_0x0.setChannelPan(i, mixParams->mPan);
+ field_0x0a8.field_0x0.setChannelFxmix(i, mixParams->mFxMix);
+ field_0x0a8.field_0x0.setChannelDolby(i, mixParams->mDolby);
+ }
+ }
+ prepare_();
+ if (field_0x290 == 4) {
+ local_54 = false;
+ if (status_.isPaused() || param_2.field_0x0.flags.flag2) {
+ local_54 = true;
+ }
+ if (local_54 != field_0x2c4) {
+ field_0x0a8.field_0x0.pause(local_54);
+ field_0x2c4 = local_54;
+ }
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -198,12 +275,29 @@ asm void JAIStream::JAIStreamMgr_mixOut_(JASSoundParams const& param_0, JAISound
#include "asm/JSystem/JAudio2/JAIStream/JAIStreamMgr_mixOut___9JAIStreamFRC14JASSoundParams16JAISoundActivity.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 804340E0-804340F0 060E00 000C+04 3/3 0/0 0/0 .bss @881 */
static u8 lit_881[12 + 4 /* padding */];
/* 802A3720-802A37FC 29E060 00DC+00 1/1 0/0 0/0 .text die_JAIStream___9JAIStreamFv */
+// Matches with literals
+#ifdef NONMATCHING
+void JAIStream::die_JAIStream_() {
+ die_JAISound_();
+ for (int i = 0; i < CHANNEL_MAX; i++) {
+ if (field_0x2a0[i] != NULL) {
+ delete (JASPoolAllocObject<JAISoundChild>*)field_0x2a0[i];
+ field_0x2a0[i] = NULL;
+ }
+ }
+ if (field_0x2bc != NULL) {
+ field_0x2c0->virtual4(field_0x2bc);
+ field_0x2bc = NULL;
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -212,26 +306,50 @@ asm void JAIStream::die_JAIStream_() {
#include "asm/JSystem/JAudio2/JAIStream/die_JAIStream___9JAIStreamFv.s"
}
#pragma pop
+#endif
/* 802A37FC-802A388C 29E13C 0090+00 1/0 0/0 0/0 .text JAISound_tryDie___9JAIStreamFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm bool JAIStream::JAISound_tryDie_() {
- nofralloc
-#include "asm/JSystem/JAudio2/JAIStream/JAISound_tryDie___9JAIStreamFv.s"
+bool JAIStream::JAISound_tryDie_() {
+ if (field_0x2c6) {
+ die_JAIStream_();
+ return true;
+ }
+ switch (field_0x290) {
+ case 0:
+ case 1:
+ die_JAIStream_();
+ return true;
+ case 2:
+ case 3:
+ field_0x290 = 5;
+ field_0x0a8.field_0x0.cancel();
+ break;
+ case 4:
+ field_0x290 = 6;
+ field_0x0a8.field_0x0.stop(10);
+ break;
+ }
+
+ return false;
}
-#pragma pop
/* 802A388C-802A3948 29E1CC 00BC+00 0/0 1/1 0/0 .text JAIStreamMgr_calc___9JAIStreamFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JAIStream::JAIStreamMgr_calc_() {
- nofralloc
-#include "asm/JSystem/JAudio2/JAIStream/JAIStreamMgr_calc___9JAIStreamFv.s"
+void JAIStream::JAIStreamMgr_calc_() {
+ if (field_0x2c6 != 0) {
+ field_0x290 = 0;
+ stop_JAISound_();
+ }
+ if (calc_JAISound_()) {
+ for (int i = 0; i < CHANNEL_MAX; i++) {
+ if (field_0x2a0[i] != NULL) {
+ field_0x2a0[i]->calc();
+ }
+ }
+ if (field_0x2bc != NULL) {
+ field_0x2bc->calc(this);
+ }
+ }
}
-#pragma pop
/* 802A3948-802A3950 29E288 0008+00 1/0 0/0 0/0 .text getNumChild__9JAIStreamCFv */
s32 JAIStream::getNumChild() const {
@@ -239,6 +357,18 @@ s32 JAIStream::getNumChild() const {
}
/* 802A3950-802A3A24 29E290 00D4+00 1/0 0/0 0/0 .text getChild__9JAIStreamFi */
+#ifdef NONMATCHING
+JAISoundChild* JAIStream::getChild(int i_idx) {
+ if (field_0x2a0[i_idx] == NULL) {
+ JASPoolAllocObject<JAISoundChild>* ptr = new JASPoolAllocObject<JAISoundChild>();
+ field_0x2a0[i_idx] = new (ptr) JAISoundChild();
+ if (field_0x2a0[i_idx] == NULL) {
+ JUT_WARN(370, "JASPoolAllocObject::<JAISoundChild>::operator new failed .")
+ }
+ }
+ return field_0x2a0[i_idx];
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -247,8 +377,17 @@ asm JAISoundChild* JAIStream::getChild(int param_0) {
#include "asm/JSystem/JAudio2/JAIStream/getChild__9JAIStreamFi.s"
}
#pragma pop
+#endif
/* 802A3A24-802A3ABC 29E364 0098+00 1/0 0/0 0/0 .text releaseChild__9JAIStreamFi */
+#ifdef NONMATCHING
+void JAIStream::releaseChild(int i_idx) {
+ if (field_0x2a0[i_idx] != NULL) {
+ delete (JASPoolAllocObject<JAISoundChild>*)field_0x2a0[i_idx];
+ field_0x2a0[i_idx] = NULL;
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -257,6 +396,7 @@ asm void JAIStream::releaseChild(int param_0) {
#include "asm/JSystem/JAudio2/JAIStream/releaseChild__9JAIStreamFi.s"
}
#pragma pop
+#endif
/* 802A3ABC-802A3AC4 29E3FC 0008+00 1/0 0/0 0/0 .text getTrack__9JAIStreamFv */
JASTrack* JAIStream::getTrack() {
diff --git a/libs/JSystem/JAudio2/JAIStreamMgr.cpp b/libs/JSystem/JAudio2/JAIStreamMgr.cpp
index a8b2f6f771..f5f49ccec1 100644
--- a/libs/JSystem/JAudio2/JAIStreamMgr.cpp
+++ b/libs/JSystem/JAudio2/JAIStreamMgr.cpp
@@ -4,27 +4,12 @@
//
#include "JSystem/JAudio2/JAIStreamMgr.h"
+#include "JSystem/JAudio2/JAISoundHandles.h"
+#include "JSystem/JAudio2/JAIStreamDataMgr.h"
+#include "JSystem/JAudio2/JAISoundInfo.h"
#include "dol2asm.h"
//
-// Types:
-//
-
-template <typename A0>
-struct JASMemPool {};
-/* JASMemPool<JAIStream> */
-struct JASMemPool__template3 {
- /* 802A3E68 */ void func_802A3E68(void* _this);
-};
-
-struct JASGenericMemPool {
- /* 80290848 */ JASGenericMemPool();
- /* 80290860 */ ~JASGenericMemPool();
- /* 80290948 */ void alloc(u32);
- /* 80290994 */ void free(void*, u32);
-};
-
-//
// Forward References:
//
@@ -93,6 +78,17 @@ SECTION_SDATA2 static f32 lit_655[1 + 1 /* padding */] = {
};
/* 802A3B68-802A3C3C 29E4A8 00D4+00 0/0 1/1 0/0 .text __ct__12JAIStreamMgrFb */
+// Matches with literals
+#ifdef NONMATCHING
+JAIStreamMgr::JAIStreamMgr(bool param_0) : JASGlobalInstance<JAIStreamMgr>(param_0) {
+ streamDataMgr_ = NULL;
+ mStreamAramMgr = NULL;
+ field_0x6c = NULL;
+ field_0x54 = NULL;
+ mParams.init();
+ mActivity.init();
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -101,18 +97,39 @@ asm JAIStreamMgr::JAIStreamMgr(bool param_0) {
#include "asm/JSystem/JAudio2/JAIStreamMgr/__ct__12JAIStreamMgrFb.s"
}
#pragma pop
+#endif
/* 802A3C3C-802A3D70 29E57C 0134+00 0/0 1/1 0/0 .text
* startSound__12JAIStreamMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm bool JAIStreamMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1,
- JGeometry::TVec3<f32> const* param_2) {
- nofralloc
-#include "asm/JSystem/JAudio2/JAIStreamMgr/func_802A3C3C.s"
+bool JAIStreamMgr::startSound(JAISoundID param_1, JAISoundHandle* param_2,
+ JGeometry::TVec3<f32> const* param_3) {
+ JUT_ASSERT(37, streamDataMgr_);
+ if (param_2 != NULL && *param_2) {
+ (*param_2)->stop();
+ }
+ s32 streamFileEntry = streamDataMgr_->getStreamFileEntry(param_1);
+ if (streamFileEntry < 0) {
+ JUT_WARN("Cannot find the stream file entry for ID:%08x\n", param_1)
+ return false;
+ }
+ JAIStream* stream = newStream_();
+ JAISoundInfo* piVar5 = JASGlobalInstance<JAISoundInfo>::getInstance();
+ int iVar2 = -1;
+ if (piVar5 != NULL) {
+ iVar2 = piVar5->getCategory(param_1);
+ }
+ if (stream == NULL) {
+ return false;
+ }
+ stream->JAIStreamMgr_startID_(param_1, streamFileEntry, param_3, field_0x54, iVar2);
+ if (piVar5 != NULL) {
+ piVar5->getStreamInfo(param_1, stream);
+ }
+ if (param_2 != NULL) {
+ stream->attachHandle(param_2);
+ }
+ return false;
}
-#pragma pop
/* ############################################################################################## */
/* 804340F0-804340FC 060E10 000C+00 2/2 0/0 0/0 .bss @745 */
@@ -125,6 +142,26 @@ u8 data_804340FC[16 + 4 /* padding */];
/* 802A3D70-802A3E68 29E6B0 00F8+00 1/1 0/0 0/0 .text freeDeadStream___12JAIStreamMgrFv
*/
+// I think this will match when all references to data_80451328 (init$localstatic4$getMemPool__30JASPoolAllocObject<9JAIStream>Fv) are not in asm
+#ifdef NONMATCHING
+void JAIStreamMgr::freeDeadStream_() {
+ JSULink<JAIStream>* link = mStreamList.getFirst();
+ while (link != NULL) {
+ JAIStream* stream = link->getObject();
+ JSULink<JAIStream>* next = link->getNext();
+ if (stream->status_.isDead()) {
+ mStreamList.remove(link);
+ void* aramAddr = stream->JAIStreamMgr_getAramAddr_();
+ if (aramAddr != NULL) {
+ mStreamAramMgr->deleteStreamAram((u32)aramAddr);
+ }
+
+ delete stream;
+ }
+ link = next;
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -133,6 +170,7 @@ asm void JAIStreamMgr::freeDeadStream_() {
#include "asm/JSystem/JAudio2/JAIStreamMgr/freeDeadStream___12JAIStreamMgrFv.s"
}
#pragma pop
+#endif
/* 802A3E68-802A3EBC 29E7A8 0054+00 2/2 1/1 0/0 .text __dt__22JASMemPool<9JAIStream>Fv */
#pragma push
@@ -145,61 +183,68 @@ extern "C" asm void func_802A3E68(void* _this) {
#pragma pop
/* 802A3EBC-802A4028 29E7FC 016C+00 0/0 1/1 0/0 .text calc__12JAIStreamMgrFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JAIStreamMgr::calc() {
- nofralloc
-#include "asm/JSystem/JAudio2/JAIStreamMgr/calc__12JAIStreamMgrFv.s"
+void JAIStreamMgr::calc() {
+ mParams.calc();
+ for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
+ link->getObject()->JAIStreamMgr_calc_();
+ }
+ freeDeadStream_();
}
-#pragma pop
/* 802A4028-802A4068 29E968 0040+00 0/0 1/1 0/0 .text stop__12JAIStreamMgrFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JAIStreamMgr::stop() {
- nofralloc
-#include "asm/JSystem/JAudio2/JAIStreamMgr/stop__12JAIStreamMgrFv.s"
+void JAIStreamMgr::stop() {
+ for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
+ link->getObject()->stop();
+ }
}
-#pragma pop
/* 802A4068-802A40B8 29E9A8 0050+00 0/0 2/2 0/0 .text stop__12JAIStreamMgrFUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JAIStreamMgr::stop(u32 param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JAIStreamMgr/stop__12JAIStreamMgrFUl.s"
+void JAIStreamMgr::stop(u32 param_0) {
+ for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
+ link->getObject()->stop(param_0);
+ }
}
-#pragma pop
/* 802A40B8-802A4118 29E9F8 0060+00 0/0 1/1 0/0 .text stopSoundID__12JAIStreamMgrF10JAISoundID */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JAIStreamMgr::stopSoundID(JAISoundID param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JAIStreamMgr/stopSoundID__12JAIStreamMgrF10JAISoundID.s"
+void JAIStreamMgr::stopSoundID(JAISoundID param_0) {
+ for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
+ if ((u32)link->getObject()->getID() == (u32)param_0) {
+ link->getObject()->stop();
+ }
+ }
}
-#pragma pop
/* 802A4118-802A4174 29EA58 005C+00 0/0 1/1 0/0 .text mixOut__12JAIStreamMgrFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JAIStreamMgr::mixOut() {
- nofralloc
-#include "asm/JSystem/JAudio2/JAIStreamMgr/mixOut__12JAIStreamMgrFv.s"
+void JAIStreamMgr::mixOut() {
+ for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
+ link->getObject()->JAIStreamMgr_mixOut_(mParams.mParams, mActivity);
+ }
}
-#pragma pop
/* 802A4174-802A4244 29EAB4 00D0+00 1/1 0/0 0/0 .text newStream___12JAIStreamMgrFv */
+// Matches with data_80451328
+#ifdef NONMATCHING
+JAIStream* JAIStreamMgr::newStream_() {
+ if (mStreamAramMgr == NULL) {
+ JUT_WARN(229, "JAIStreamAramMgr must be set.\n");
+ return NULL;
+ }
+ JAIStream* stream = new JAIStream(this, field_0x6c);
+ if (stream == NULL) {
+ JUT_WARN(235, "JASPoolAllocObject::<JAIStream>::operator new failed .\n");
+ return NULL;
+ }
+
+ mStreamList.append(stream);
+ return stream;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void JAIStreamMgr::newStream_() {
+asm JAIStream* JAIStreamMgr::newStream_() {
nofralloc
#include "asm/JSystem/JAudio2/JAIStreamMgr/newStream___12JAIStreamMgrFv.s"
}
#pragma pop
+#endif
diff --git a/libs/JSystem/JAudio2/JASAramStream.cpp b/libs/JSystem/JAudio2/JASAramStream.cpp
index 42a9eb6ed6..4831c5f8ef 100644
--- a/libs/JSystem/JAudio2/JASAramStream.cpp
+++ b/libs/JSystem/JAudio2/JASAramStream.cpp
@@ -108,11 +108,6 @@ extern "C" void registerSubFrameCallback__9JASDriverFPFPv_lPv();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void __dl__FPv();
extern "C" void mainRamToAram__7JKRAramFPUcUlUl15JKRExpandSwitchUlP7JKRHeapiPUl();
-extern "C" void OSDisableInterrupts();
-extern "C" void OSRestoreInterrupts();
-extern "C" void DVDFastOpen();
-extern "C" void DVDReadPrio();
-extern "C" void DVDGetDriveStatus();
extern "C" void __register_global_object();
extern "C" void _savegpr_19();
extern "C" void _savegpr_25();
@@ -201,7 +196,7 @@ asm void JASAramStream::init(u32 param_0, u32 param_1, void (*param_2)(u32, JASA
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void JASAramStream::prepare(s32 param_0, int param_1) {
+asm bool JASAramStream::prepare(s32 param_0, int param_1) {
nofralloc
#include "asm/JSystem/JAudio2/JASAramStream/prepare__13JASAramStreamFli.s"
}
@@ -211,7 +206,7 @@ asm void JASAramStream::prepare(s32 param_0, int param_1) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void JASAramStream::start() {
+asm bool JASAramStream::start() {
nofralloc
#include "asm/JSystem/JAudio2/JASAramStream/start__13JASAramStreamFv.s"
}
diff --git a/libs/JSystem/JAudio2/JASTrack.cpp b/libs/JSystem/JAudio2/JASTrack.cpp
index 75fe466e42..f75be65978 100644
--- a/libs/JSystem/JAudio2/JASTrack.cpp
+++ b/libs/JSystem/JAudio2/JASTrack.cpp
@@ -641,18 +641,16 @@ asm JASChannel* JASTrack::channelStart(JASTrack::TChannelMgr* param_0, u32 param
#endif
/* 80291F38-80292008 28C878 00D0+00 0/0 1/1 0/0 .text noteOn__8JASTrackFUlUlUl */
-#ifdef NONMATCHING
-// regalloc
int JASTrack::noteOn(u32 i_noteID, u32 param_1, u32 param_2) {
if (isMute()) {
return 0;
}
int ret = 1;
- int var1 = param_1 + getTransposeTotal();
+ param_1 += getTransposeTotal();
for (u32 i = 0; i < mChannelMgrCount; i++) {
if (mChannelMgrs[i] != NULL) {
mChannelMgrs[i]->noteOff(i_noteID, 0);
- JASChannel* channel = channelStart(mChannelMgrs[i], var1, param_2, 0);
+ JASChannel* channel = channelStart(mChannelMgrs[i], param_1, param_2, 0);
if (channel == NULL) {
ret = 0;
}
@@ -661,16 +659,6 @@ int JASTrack::noteOn(u32 i_noteID, u32 param_1, u32 param_2) {
}
return ret;
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm int JASTrack::noteOn(u32 param_0, u32 param_1, u32 param_2) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASTrack/noteOn__8JASTrackFUlUlUl.s"
-}
-#pragma pop
-#endif
/* ############################################################################################## */
/* 804555AC-804555B0 003BAC 0004+00 1/1 0/0 0/0 .sdata2 @952 */
@@ -681,9 +669,9 @@ SECTION_SDATA2 static f64 lit_954 = 4503599627370496.0 /* cast u32 to float */;
/* 80292008-80292198 28C948 0190+00 0/0 1/1 0/0 .text gateOn__8JASTrackFUlUlfUl */
#ifdef NONMATCHING
-// regalloc
+// matches with literals
int JASTrack::gateOn(u32 param_0, u32 i_velocity, f32 i_time, u32 i_flags) {
- int uvar5 = param_0 + getTransposeTotal();
+ param_0 += getTransposeTotal();
if (mGateRate != 100) {
i_time *= mGateRate / 100.0f;
}
@@ -693,7 +681,7 @@ int JASTrack::gateOn(u32 param_0, u32 i_velocity, f32 i_time, u32 i_flags) {
if (i_flags & 1) {
uvar7 = field_0x22b;
} else {
- uvar7 = uvar5;
+ uvar7 = param_0;
}
for (u32 i = 0; i < mChannelMgrCount; i++) {
TChannelMgr* channel_mgr = mChannelMgrs[i];
@@ -713,12 +701,12 @@ int JASTrack::gateOn(u32 param_0, u32 i_velocity, f32 i_time, u32 i_flags) {
}
}
if ((i_flags & 1) && channel_mgr->mChannels[0] != NULL) {
- channel_mgr->mChannels[0]->setKeySweepTarget(uvar5 - uvar7, uvar2);
+ channel_mgr->mChannels[0]->setKeySweepTarget(param_0 - uvar7, uvar2);
}
}
}
mFlags.flag4 = (i_flags >> 1) & 1;
- field_0x22b = uvar5;
+ field_0x22b = param_0;
return 1;
}
#else
diff --git a/libs/JSystem/JAudio2/JAUAudioMgr.cpp b/libs/JSystem/JAudio2/JAUAudioMgr.cpp
index d2a58eb3bf..159807b543 100644
--- a/libs/JSystem/JAudio2/JAUAudioMgr.cpp
+++ b/libs/JSystem/JAudio2/JAUAudioMgr.cpp
@@ -1,44 +1,12 @@
//
-// Generated By: dol2asm
-// Translation Unit: JAUAudioMgr
+// JAUAudioMgr
//
#include "JSystem/JAudio2/JAUAudioMgr.h"
-#include "dolphin/types.h"
+#include "JSystem/JAudio2/JASHeapCtrl.h"
-//
-// Types:
-//
-
-struct JASDisposer {};
-
-struct JASHeap {
- /* 80290140 */ JASHeap(JASDisposer*);
- /* 802A4A5C */ void __defctor();
-};
-
-//
-// Forward References:
-//
-
-extern "C" void __defctor__7JASHeapFv();
-
-//
-// External References:
-//
-
-extern "C" void __ct__7JASHeapFP11JASDisposer();
-
-//
-// Declarations:
-//
-
-/* 802A4A5C-802A4A80 29F39C 0024+00 0/0 1/1 0/0 .text __defctor__7JASHeapFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASHeap::__defctor() {
- nofralloc
-#include "asm/JSystem/JAudio2/JAUAudioMgr/__defctor__7JASHeapFv.s"
+// Here to generate JASHeap::__defctor (ctor generated by default arguments)
+void dummyDefCtor() {
+ JASHeap dummy[20];
}
-#pragma pop
+
diff --git a/libs/JSystem/JAudio2/JAUClusterSound.cpp b/libs/JSystem/JAudio2/JAUClusterSound.cpp
index a4a991270e..3edd56bc18 100644
--- a/libs/JSystem/JAudio2/JAUClusterSound.cpp
+++ b/libs/JSystem/JAudio2/JAUClusterSound.cpp
@@ -1,39 +1,11 @@
//
-// Generated By: dol2asm
-// Translation Unit: JAUClusterSound
+// JAUClusterSound
//
#include "JSystem/JAudio2/JAUClusterSound.h"
-#include "dolphin/types.h"
+#include "JSystem/JAudio2/JAISoundHandles.h"
-//
-// Types:
-//
-
-struct JAISoundHandle {
- /* 802A4AC4 */ JAISoundHandle();
-};
-
-//
-// Forward References:
-//
-
-extern "C" void __ct__14JAISoundHandleFv();
-
-//
-// External References:
-//
-
-//
-// Declarations:
-//
-
-/* 802A4AC4-802A4AD0 29F404 000C+00 0/0 1/1 0/0 .text __ct__14JAISoundHandleFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm JAISoundHandle::JAISoundHandle() {
- nofralloc
-#include "asm/JSystem/JAudio2/JAUClusterSound/__ct__14JAISoundHandleFv.s"
-}
-#pragma pop
+// Dummy function to generate JAISoundHandle::JAISoundHandle
+static void dummyCtor() {
+ JAISoundHandle dummy[20];
+} \ No newline at end of file
diff --git a/libs/JSystem/JAudio2/JAUSectionHeap.cpp b/libs/JSystem/JAudio2/JAUSectionHeap.cpp
index f4eae1cc49..8864ecc7f2 100644
--- a/libs/JSystem/JAudio2/JAUSectionHeap.cpp
+++ b/libs/JSystem/JAudio2/JAUSectionHeap.cpp
@@ -531,8 +531,6 @@ bool JAUSection::newStaticSeqData(JAISoundID param_0, void const* param_1, u32 p
/* 802A5730-802A57F0 2A0070 00C0+00 0/0 1/1 0/0 .text newStaticSeqData__10JAUSectionF10JAISoundID
*/
-// extra instruction JAISoundID
-#ifdef NONMATCHING
bool JAUSection::newStaticSeqData(JAISoundID param_0) {
JKRArchive* seqArchive = data_.field_0x00.getSeqDataArchive();
JUT_ASSERT(481, seqArchive);
@@ -542,25 +540,13 @@ bool JAUSection::newStaticSeqData(JAISoundID param_0) {
}
u16 r26 = soundInfo->getBgmSeqResourceID(param_0);
u32 r25 = JASResArcLoader::getResSize(seqArchive, r26);
- JAISoundID stack_2c;
- stack_2c.setAnonymous();
- u8* r24 = newStaticSeqDataBlock_(stack_2c, r25);
+ u8* r24 = newStaticSeqDataBlock_(0xffffffff, r25);
if (r24) {
data_.field_0x00.loadDynamicSeq(param_0, true, sectionHeap_->sectionHeapData_.seqDataUser);
return true;
}
return false;
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm bool JAUSection::newStaticSeqData(JAISoundID param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JAUSectionHeap/newStaticSeqData__10JAUSectionF10JAISoundID.s"
-}
-#pragma pop
-#endif
/* 802A57F0-802A5854 2A0130 0064+00 3/3 0/0 0/0 .text newCopy__10JAUSectionFPCvUll */
void* JAUSection::newCopy(void const* param_0, u32 param_1, s32 param_2) {
diff --git a/libs/JSystem/JAudio2/Makefile b/libs/JSystem/JAudio2/Makefile
index 7214a07a51..22ceedf512 100644
--- a/libs/JSystem/JAudio2/Makefile
+++ b/libs/JSystem/JAudio2/Makefile
@@ -150,7 +150,7 @@ LIBJAUDIO2_A_LDFLAGS := \
-proc gekko \
-linkmode moreram \
-DSP_CFLAGS := -pragma "function_align 32" -Cpp_exceptions off -proc gekko -fp hard -O4,p -nodefaults -str nopool,readonly,reuse -RTTI off -maxerrors 5 -enum int $(INCLUDES)
+DSP_CFLAGS := -pragma "function_align 32" -Cpp_exceptions off -proc gekko -fp hard -O4 -nodefaults -str nopool,readonly,reuse -RTTI off -maxerrors 5 -enum int $(INCLUDES)
$(BUILD_DIR)/libs/JSystem/JAudio2/dspproc.o: CFLAGS := $(DSP_CFLAGS)
$(BUILD_DIR)/libs/JSystem/JAudio2/osdsp.o: CFLAGS := $(DSP_CFLAGS)
diff --git a/libs/JSystem/JAudio2/dsptask.cpp b/libs/JSystem/JAudio2/dsptask.cpp
index 0aaa7015e7..9ea11c9c43 100644
--- a/libs/JSystem/JAudio2/dsptask.cpp
+++ b/libs/JSystem/JAudio2/dsptask.cpp
@@ -5,29 +5,13 @@
#include "JSystem/JAudio2/dsptask.h"
#include "JSystem/JAudio2/osdsp.h"
-#include "dol2asm.h"
#include "dolphin/dsp.h"
#include "dolphin/os.h"
//
-// Types:
-//
-
-struct STRUCT_DSP_TASK {
- /* 0x00 */ DSPTaskInfo info;
-};
-
-//
// Forward References:
//
-extern "C" static void DspHandShake__FPv();
-extern "C" void DspBoot__FPFPv_v();
-extern "C" void DSPSendCommands2__FPUlUlPFUs_v();
-extern "C" static void DspInitWork__Fv();
-extern "C" static void DspStartWork__FUlPFUs_v();
-extern "C" void DspFinishWork__FUs();
-
static void DspInitWork();
static void DspHandShake(void* param_0);
static int DspStartWork(u32 param_0, void (*param_1)(u16));
@@ -36,32 +20,20 @@ static int DspStartWork(u32 param_0, void (*param_1)(u16));
// External References:
//
-extern "C" void DSPAddPriorTask__FP15STRUCT_DSP_TASK();
-extern "C" void Dsp_Running_Check__Fv();
-extern "C" void Dsp_Running_Start__Fv();
-extern "C" void _savegpr_26();
-extern "C" void _restgpr_26();
-
extern int Dsp_Running_Check();
-
-//
-// Declarations:
-//
+extern int Dsp_Running_Start();
/* 8029E6E0-8029E718 299020 0038+00 1/1 0/0 0/0 .text DspHandShake__FPv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-#pragma function_align 32
-static asm void DspHandShake(void* param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/dsptask/DspHandShake__FPv.s"
+void DspHandShake(void*) {
+ while (DSPCheckMailFromDSP() == 0) {}
+ DSPReadMailFromDSP();
+ DSPCheckMailFromDSP();
+ Dsp_Running_Start();
}
-#pragma pop
/* ############################################################################################## */
/* 803C7920-803C9820 024A40 1F00+00 1/1 0/0 0/0 .data jdsp */
-SECTION_DATA static u8 jdsp[7936] = {
+static u8 jdsp[7936] = {
0x02, 0x9F, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x00, 0x00, 0x02, 0xFF, 0x00, 0x00,
0x02, 0xFF, 0x00, 0x00, 0x02, 0xFF, 0x00, 0x00, 0x02, 0xFF, 0x00, 0x00, 0x02, 0x9F, 0x06, 0xA5,
0x02, 0x9F, 0x00, 0x4E, 0x12, 0x05, 0x02, 0xBF, 0x00, 0x57, 0x81, 0x00, 0x00, 0x9F, 0x10, 0x00,
@@ -587,49 +559,39 @@ void DspBoot(void (*param_0)(void*)) {
}
/* 8029E7E0-8029E8C8 299120 00E8+00 0/0 4/4 0/0 .text DSPSendCommands2__FPUlUlPFUs_v */
-// lwz instead of lwzx in loop
-#ifdef NONMATCHING
-int DSPSendCommands2(u32* param_0, u32 param_1, void (*param_2)(u16)) {
- while (Dsp_Running_Check() == 0);
+int DSPSendCommands2(u32* param_1, u32 param_2, void (*callBack)(u16)) {
+ s32 i;
+ BOOL interruptFlag;
+ s32 startWorkStatus;
- BOOL status = OSDisableInterrupts();
+ while (Dsp_Running_Check() == 0) {};
+
+ interruptFlag = OSDisableInterrupts();
if (DSPCheckMailToDSP()) {
- OSRestoreInterrupts(status);
+ OSRestoreInterrupts(interruptFlag);
return -1;
}
- DSPSendMailToDSP(param_1);
+ DSPSendMailToDSP(param_2);
DSPAssertInt();
while(DSPCheckMailToDSP() != 0);
- if (param_1 == 0) {
- param_1 = 1;
+ if (param_2 == 0) {
+ param_2 = 1;
}
- int startWorkStatus;
- if (param_2 != NULL) {
- startWorkStatus = DspStartWork(param_0[0], param_2);
+ if (callBack != NULL) {
+ startWorkStatus = DspStartWork(param_1[0], callBack);
}
- for (int i = 0; i < param_1; i++) {
- DSPSendMailToDSP(param_0[i]);
+ for (i = 0; i < param_2; i++) {
+ DSPSendMailToDSP(param_1[i]);
while (DSPCheckMailToDSP() != 0);
}
- OSRestoreInterrupts(status);
+ OSRestoreInterrupts(interruptFlag);
return startWorkStatus;
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-#pragma function_align 32
-asm int DSPSendCommands2(u32* param_0, u32 param_1, void (*param_2)(u16)) {
- nofralloc
-#include "asm/JSystem/JAudio2/dsptask/DSPSendCommands2__FPUlUlPFUs_v.s"
-}
-#pragma pop
-#endif
/* ############################################################################################## */
/* 80433FE0-80434060 060D00 0080+00 3/3 0/0 0/0 .bss taskwork */
@@ -644,23 +606,11 @@ static TaskWorkStruct taskwork[16];
/* 8029E8E0-8029E90C 299220 002C+00 1/1 0/0 0/0 .text DspInitWork__Fv */
// Loop is unrolled but should not be
-#ifdef NONMATCHING
static void DspInitWork() {
for (int i = 0; i < 16; i++) {
taskwork[i].field_0x4 = NULL;
}
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-#pragma function_align 32
-static asm void DspInitWork() {
- nofralloc
-#include "asm/JSystem/JAudio2/dsptask/DspInitWork__Fv.s"
-}
-#pragma pop
-#endif
/* ############################################################################################## */
/* 80451300-80451304 000800 0004+00 2/2 0/0 0/0 .sbss taskreadp */
diff --git a/libs/JSystem/JAudio2/osdsp.cpp b/libs/JSystem/JAudio2/osdsp.cpp
index 1ff0a36025..d046da94c9 100644
--- a/libs/JSystem/JAudio2/osdsp.cpp
+++ b/libs/JSystem/JAudio2/osdsp.cpp
@@ -8,29 +8,6 @@
#include "dolphin/os.h"
#include "dolphin/dsp/dsp_task.h"
-//
-// Types:
-//
-
-// Unclear why this is a different type than DSPTaskInfo
-struct STRUCT_DSP_TASK {
- DSPTaskInfo info;
-};
-
-//
-// Forward References:
-//
-
-//
-// External References:
-//
-
-//
-// Declarations:
-//
-
-/* ############################################################################################## */
-
/* 8029EA00-8029EA84 299340 0084+00 0/0 1/1 0/0 .text DSPAddTask */
DSPTaskInfo* DSPAddTask(DSPTaskInfo* task) {
if (DSP_prior_task == NULL) {
diff --git a/libs/JSystem/JAudio2/osdsp_task.cpp b/libs/JSystem/JAudio2/osdsp_task.cpp
index 4ec5f43d47..94f9dddaf2 100644
--- a/libs/JSystem/JAudio2/osdsp_task.cpp
+++ b/libs/JSystem/JAudio2/osdsp_task.cpp
@@ -196,4 +196,5 @@ u8 data_80451318[8];
u8 data_80451320[8];
/* 80451328-80451330 000828 0008+00 0/0 3/3 0/0 .sbss None */
+// init$localstatic4$getMemPool__30JASPoolAllocObject<9JAIStream>Fv
u8 data_80451328[8];