diff options
| author | hatal175 <hatal175@users.noreply.github.com> | 2024-02-09 01:30:28 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-08 15:30:28 -0800 |
| commit | 9f38190f00c329a99dcb3eb5530bdfe8b1caf1c7 (patch) | |
| tree | e682abfcfddcd8517dac7fedbe9551e05e32947e /libs | |
| parent | 95176edb8226b8907947652f817eb7933357adfc (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.cpp | 4 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAISeq.cpp | 4 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAISeqMgr.cpp | 223 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAISoundStarter.cpp | 47 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAIStream.cpp | 338 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAIStreamMgr.cpp | 169 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JASAramStream.cpp | 9 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JASTrack.cpp | 26 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAUAudioMgr.cpp | 44 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAUClusterSound.cpp | 40 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAUSectionHeap.cpp | 16 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/Makefile | 2 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/dsptask.cpp | 96 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/osdsp.cpp | 23 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/osdsp_task.cpp | 1 |
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]; |
