diff options
| author | hatal175 <hatal175@users.noreply.github.com> | 2024-01-09 01:19:07 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-08 15:19:07 -0800 |
| commit | 28bef08667e3e1ef9eb85a8a96cb23af700afe02 (patch) | |
| tree | ff43e05e48a69c869a144a53d1bf3c1aea5eb88e /libs | |
| parent | 40dae638a7c0b7e967eda55d3aa1089163213c5d (diff) | |
Work on Audio, JAUSeqDataBlockMgr OK (#2027)
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/JSystem/JAudio2/JASHeapCtrl.cpp | 3 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JASWSParser.cpp | 76 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAUAudioArcLoader.cpp | 3 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAUSectionHeap.cpp | 12 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAUSeqCollection.cpp | 4 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp | 347 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAUSoundTable.cpp | 3 | ||||
| -rw-r--r-- | libs/Z2AudioLib/Z2Audience.cpp | 12 | ||||
| -rw-r--r-- | libs/Z2AudioLib/Z2AudioArcLoader.cpp | 96 |
9 files changed, 243 insertions, 313 deletions
diff --git a/libs/JSystem/JAudio2/JASHeapCtrl.cpp b/libs/JSystem/JAudio2/JASHeapCtrl.cpp index 1c1dcda510..04de9ef7ee 100644 --- a/libs/JSystem/JAudio2/JASHeapCtrl.cpp +++ b/libs/JSystem/JAudio2/JASHeapCtrl.cpp @@ -412,7 +412,8 @@ REGISTER_CTORS(0x80290B14, __sinit_JASHeapCtrl_cpp); #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm JASHeap::~JASHeap() { +//asm JASHeap::~JASHeap() { +asm void __dt__7JASHeapFv() { nofralloc #include "asm/JSystem/JAudio2/JASHeapCtrl/__dt__7JASHeapFv.s" } diff --git a/libs/JSystem/JAudio2/JASWSParser.cpp b/libs/JSystem/JAudio2/JASWSParser.cpp index e5595005b7..e26d898b74 100644 --- a/libs/JSystem/JAudio2/JASWSParser.cpp +++ b/libs/JSystem/JAudio2/JASWSParser.cpp @@ -4,52 +4,14 @@ // #include "JSystem/JAudio2/JASWSParser.h" +#include "JSystem/JAudio2/JASWaveInfo.h" +#include "JSystem/JAudio2/JASWaveArcLoader.h" +#include "JSystem/JAudio2/JASSimpleWaveBank.h" +#include "JSystem/JAudio2/JASBasicWaveBank.h" +#include "JSystem/JKernel/JKRHeap.h" #include "dolphin/types.h" // -// Types: -// - -struct JKRHeap { - /* 802CE72C */ void getFreeSize(); -}; - -struct JASWaveInfo { - static u32 one[1 + 1 /* padding */]; -}; - -struct JASWaveArc { - /* 8029A70C */ void setFileName(char const*); -}; - -struct JASWSParser { - /* 80298FB0 */ void getGroupCount(void const*); - /* 80298FD8 */ void createWaveBank(void const*, JKRHeap*); - /* 80299034 */ void createBasicWaveBank(void const*, JKRHeap*); - /* 80299264 */ void createSimpleWaveBank(void const*, JKRHeap*); - - static u8 sUsedHeapSize[4 + 4 /* padding */]; -}; - -struct JASSimpleWaveBank { - /* 80298C94 */ JASSimpleWaveBank(); - /* 80298DE0 */ void setWaveTableSize(u32, JKRHeap*); - /* 80298E84 */ void setWaveInfo(u32, JASWaveInfo const&); -}; - -struct JASBasicWaveBank { - struct TWaveGroup { - /* 80298A84 */ void setWaveCount(u32, JKRHeap*); - }; - - /* 802984F8 */ JASBasicWaveBank(); - /* 80298640 */ void getWaveGroup(u32); - /* 80298664 */ void setGroupCount(u32, JKRHeap*); - /* 80298710 */ void setWaveTableSize(u32, JKRHeap*); - /* 80298910 */ void setWaveInfo(JASBasicWaveBank::TWaveGroup*, int, u16, JASWaveInfo const&); -}; - -// // Forward References: // @@ -88,32 +50,38 @@ extern "C" void _savegpr_23(); extern "C" void _restgpr_20(); extern "C" void _restgpr_23(); extern "C" u32 one__11JASWaveInfo[1 + 1 /* padding */]; -extern "C" extern u8 JASDram[4]; // // Declarations: // /* 80298FB0-80298FD8 2938F0 0028+00 1/1 0/0 0/0 .text getGroupCount__11JASWSParserFPCv */ +// Matches with JSUConvertOffsetToPtr +#ifdef NONMATCHING +u32 JASWSParser::getGroupCount(void const* stream) { + THeader* header = (THeader*)stream; + return ((TOffset<TCtrlGroup>*)&header->mCtrlGroupOffset)->ptr(header)->mCtrlGroupCount; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JASWSParser::getGroupCount(void const* param_0) { +asm u32 JASWSParser::getGroupCount(void const* param_0) { nofralloc #include "asm/JSystem/JAudio2/JASWSParser/getGroupCount__11JASWSParserFPCv.s" } #pragma pop +#endif /* 80298FD8-80299034 293918 005C+00 0/0 1/1 0/0 .text createWaveBank__11JASWSParserFPCvP7JKRHeap */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASWSParser::createWaveBank(void const* param_0, JKRHeap* param_1) { - nofralloc -#include "asm/JSystem/JAudio2/JASWSParser/createWaveBank__11JASWSParserFPCvP7JKRHeap.s" +JASWaveBank* JASWSParser::createWaveBank(void const* param_0, JKRHeap* param_1) { + if (getGroupCount(param_0) == 1) { + return (JASWaveBank*)createSimpleWaveBank(param_0, param_1); + } else { + return (JASWaveBank*) createBasicWaveBank(param_0, param_1); + } } -#pragma pop /* ############################################################################################## */ /* 80451280-80451288 000780 0004+04 2/2 0/0 0/0 .sbss sUsedHeapSize__11JASWSParser */ @@ -124,7 +92,7 @@ u8 JASWSParser::sUsedHeapSize[4 + 4 /* padding */]; #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JASWSParser::createBasicWaveBank(void const* param_0, JKRHeap* param_1) { +asm JASBasicWaveBank* JASWSParser::createBasicWaveBank(void const* param_0, JKRHeap* param_1) { nofralloc #include "asm/JSystem/JAudio2/JASWSParser/createBasicWaveBank__11JASWSParserFPCvP7JKRHeap.s" } @@ -135,7 +103,7 @@ asm void JASWSParser::createBasicWaveBank(void const* param_0, JKRHeap* param_1) #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JASWSParser::createSimpleWaveBank(void const* param_0, JKRHeap* param_1) { +asm JASSimpleWaveBank* JASWSParser::createSimpleWaveBank(void const* param_0, JKRHeap* param_1) { nofralloc #include "asm/JSystem/JAudio2/JASWSParser/createSimpleWaveBank__11JASWSParserFPCvP7JKRHeap.s" } diff --git a/libs/JSystem/JAudio2/JAUAudioArcLoader.cpp b/libs/JSystem/JAudio2/JAUAudioArcLoader.cpp index 58b7349306..f2e7328560 100644 --- a/libs/JSystem/JAudio2/JAUAudioArcLoader.cpp +++ b/libs/JSystem/JAudio2/JAUAudioArcLoader.cpp @@ -107,6 +107,3 @@ void JAUAudioArcLoader::readMaxSeCategory(int param_0, int param_1, int param_2) seMgr->getCategory(param_0)->setMaxInactiveSe(param_2); } } - -/* 802A49FC-802A4A5C 29F33C 0060+00 1/0 0/0 0/0 .text __dt__17JAUAudioArcLoaderFv */ -JAUAudioArcLoader::~JAUAudioArcLoader() {} diff --git a/libs/JSystem/JAudio2/JAUSectionHeap.cpp b/libs/JSystem/JAudio2/JAUSectionHeap.cpp index d4e4bda155..bfd5a75e61 100644 --- a/libs/JSystem/JAudio2/JAUSectionHeap.cpp +++ b/libs/JSystem/JAudio2/JAUSectionHeap.cpp @@ -506,8 +506,8 @@ u8* JAUSection::newStaticSeqDataBlock_(JAISoundID param_0, u32 size) { if (!r28) { return NULL; } - seqDataBlock->field_0x14 = r28; - seqDataBlock->field_0x18 = size; + seqDataBlock->field_0x14.addr = r28; + seqDataBlock->field_0x14.size = size; seqDataBlock->field_0x10 = param_0; JASCriticalSection cs; if(data_.field_0x00.appendDynamicSeqDataBlock(seqDataBlock)) { @@ -844,7 +844,7 @@ bool JAUSectionHeap::setSeqDataUser(JAISeqDataUser* param_0) { } /* 802A60AC-802A61D0 2A09EC 0124+00 0/0 2/2 0/0 .text newDynamicSeqBlock__14JAUSectionHeapFUl */ -bool JAUSectionHeap::newDynamicSeqBlock(u32 param_0) { +bool JAUSectionHeap::newDynamicSeqBlock(u32 size) { /* JUT_ASSERT(937, isOpen()); JUT_ASSERT(938, isBuilding()); JUT_ASSERT(939, sectionHeap_ == this); */ @@ -857,12 +857,12 @@ bool JAUSectionHeap::newDynamicSeqBlock(u32 param_0) { if (!link) { return false; } - u8* r25 = new(0x20) u8[param_0]; + u8* r25 = new(0x20) u8[size]; if (!r25) { return false; } - seqDataBlock->field_0x14 = r25; - seqDataBlock->field_0x18 = param_0; + seqDataBlock->field_0x14.addr = r25; + seqDataBlock->field_0x14.size = size; seqDataBlock->field_0x10.setAnonymous(); JASCriticalSection cs; if (base1.sectionHeap_->sectionHeapData_.field_0x408.appendDynamicSeqDataBlock(seqDataBlock)) { diff --git a/libs/JSystem/JAudio2/JAUSeqCollection.cpp b/libs/JSystem/JAudio2/JAUSeqCollection.cpp index e07a6b88e2..d7c4558268 100644 --- a/libs/JSystem/JAudio2/JAUSeqCollection.cpp +++ b/libs/JSystem/JAudio2/JAUSeqCollection.cpp @@ -59,8 +59,8 @@ bool JAUSeqCollection::getSeqData(int param_0, int param_1, JAISeqData* param_2) * getSeqDataRegion__16JAUSeqCollectionFP16JAISeqDataRegion */ bool JAUSeqCollection::getSeqDataRegion(JAISeqDataRegion* param_0) { if (isValid()) { - param_0->field_0x0 = (u32)field_0x8; - param_0->field_0x4 = field_0xc; + param_0->addr = (u8*)field_0x8; + param_0->size = field_0xc; return true; } return false; diff --git a/libs/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp b/libs/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp index c36a64b549..63e340b5a0 100644 --- a/libs/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp +++ b/libs/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp @@ -1,145 +1,86 @@ // -// Generated By: dol2asm -// Translation Unit: JAUSeqDataBlockMgr +// JAUSeqDataBlockMgr // #include "JSystem/JAudio2/JAUSeqDataBlockMgr.h" +#include "JSystem/JAudio2/JAUSoundInfo.h" +#include "JSystem/JAudio2/JASResArcLoader.h" +#include "JSystem/JUtility/JUTAssert.h" #include "dolphin/types.h" -// -// Types: -// - -struct JKRArchive {}; - -struct JAISeqDataUser {}; - -struct JAISeqData {}; - -struct JASResArcLoader { - /* 80290BD0 */ void getResSize(JKRArchive const*, u16); - /* 80290D18 */ void loadResourceAsync(JKRArchive*, u16, u8*, u32, void (*)(u32, u32), u32); -}; - -// -// Forward References: -// - -extern "C" void __ct__15JAUSeqDataBlockFv(); -extern "C" void getSeqData__16JAUSeqDataBlocksF10JAISoundID(); -extern "C" void seekFreeBlock__16JAUSeqDataBlocksFUl(); -extern "C" void func_802A69D8(); -extern "C" void func_802A69F8(); -extern "C" void hasFailedBlock__16JAUSeqDataBlocksF10JAISoundID(); -extern "C" void __ct__23JAUDynamicSeqDataBlocksFv(); -extern "C" void setSeqDataArchive__23JAUDynamicSeqDataBlocksFP10JKRArchive(); -extern "C" void getSeqData__23JAUDynamicSeqDataBlocksF10JAISoundIDP14JAISeqDataUserP10JAISeqDatab(); -extern "C" void appendDynamicSeqDataBlock__23JAUDynamicSeqDataBlocksFP15JAUSeqDataBlock(); -extern "C" static void JAUDynamicSeqDataBlocks_receiveLoaded___FUlUl(); -extern "C" void loadDynamicSeq__23JAUDynamicSeqDataBlocksF10JAISoundIDbP14JAISeqDataUser(); -extern "C" void releaseIdleDynamicSeqDataBlock__23JAUDynamicSeqDataBlocksFP14JAISeqDataUser(); -extern "C" void releaseIdleDynamicSeqDataBlock___23JAUDynamicSeqDataBlocksFP14JAISeqDataUserUl(); -extern "C" void rearrangeLoadingSeqs___23JAUDynamicSeqDataBlocksFv(); - -// -// External References: -// - -extern "C" void getResSize__15JASResArcLoaderFPC10JKRArchiveUs(); -extern "C" void loadResourceAsync__15JASResArcLoaderFP10JKRArchiveUsPUcUlPFUlUl_vUl(); -extern "C" void __ct__10JSUPtrLinkFPv(); -extern "C" void initiate__10JSUPtrListFv(); -extern "C" void append__10JSUPtrListFP10JSUPtrLink(); -extern "C" void remove__10JSUPtrListFP10JSUPtrLink(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_29(); -extern "C" extern u8 data_80450B50[4]; -extern "C" extern u8 __OSReport_disable; - -// -// Declarations: -// - /* 802A68F4-802A6928 2A1234 0034+00 0/0 2/2 0/0 .text __ct__15JAUSeqDataBlockFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JAUSeqDataBlock::JAUSeqDataBlock() { - nofralloc -#include "asm/JSystem/JAudio2/JAUSeqDataBlockMgr/__ct__15JAUSeqDataBlockFv.s" -} -#pragma pop +JAUSeqDataBlock::JAUSeqDataBlock() : field_0x0(this) {} /* 802A6928-802A6974 2A1268 004C+00 1/1 0/0 0/0 .text getSeqData__16JAUSeqDataBlocksF10JAISoundID */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JAUSeqDataBlocks::getSeqData(JAISoundID param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JAUSeqDataBlockMgr/getSeqData__16JAUSeqDataBlocksF10JAISoundID.s" +u8* JAUSeqDataBlocks::getSeqData(JAISoundID param_0) { + // fake match. Should be + // if (param_0.isAnonymous()) { + // But doesn't match + if ((u32)param_0 == 0xffffffff) { + return NULL; + } + for (JSULink<JAUSeqDataBlock>* link = field_0x0.getFirst(); link != NULL; + link = link->getNext()) + { + if ((u32)link->getObject()->field_0x10 == (u32)param_0) { + return link->getObject()->field_0x14.addr; + } + } + return NULL; } -#pragma pop /* 802A6974-802A69D8 2A12B4 0064+00 1/1 0/0 0/0 .text seekFreeBlock__16JAUSeqDataBlocksFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JAUSeqDataBlocks::seekFreeBlock(u32 param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JAUSeqDataBlockMgr/seekFreeBlock__16JAUSeqDataBlocksFUl.s" +JSULink<JAUSeqDataBlock>* JAUSeqDataBlocks::seekFreeBlock(u32 size) { + u32 currentBlockSize = 0xffffffff; + JSULink<JAUSeqDataBlock>* rv = NULL; + for (JSULink<JAUSeqDataBlock>* link = field_0x0.getFirst(); link != NULL; link = link->getNext()) + { + if (link->getObject()->field_0x10.isAnonymous()) { + u32 blockSize = link->getObject()->field_0x14.size; + if (blockSize >= size && blockSize < currentBlockSize) { + rv = link; + currentBlockSize = blockSize; + } + } + } + if (rv != NULL) { + return rv; + } + return NULL; } -#pragma pop /* 802A69D8-802A69F8 2A1318 0020+00 5/5 0/0 0/0 .text * append__16JAUSeqDataBlocksFP26JSULink<15JAUSeqDataBlock> */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JAUSeqDataBlocks::append(JSULink<JAUSeqDataBlock>* param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JAUSeqDataBlockMgr/func_802A69D8.s" +bool JAUSeqDataBlocks::append(JSULink<JAUSeqDataBlock>* param_0) { + return field_0x0.append(param_0); } -#pragma pop /* 802A69F8-802A6A18 2A1338 0020+00 4/4 0/0 0/0 .text * remove__16JAUSeqDataBlocksFP26JSULink<15JAUSeqDataBlock> */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JAUSeqDataBlocks::remove(JSULink<JAUSeqDataBlock>* param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JAUSeqDataBlockMgr/func_802A69F8.s" +bool JAUSeqDataBlocks::remove(JSULink<JAUSeqDataBlock>* param_0) { + return field_0x0.remove(param_0); } -#pragma pop /* 802A6A18-802A6A58 2A1358 0040+00 1/1 0/0 0/0 .text * hasFailedBlock__16JAUSeqDataBlocksF10JAISoundID */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JAUSeqDataBlocks::hasFailedBlock(JAISoundID param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JAUSeqDataBlockMgr/hasFailedBlock__16JAUSeqDataBlocksF10JAISoundID.s" +bool JAUSeqDataBlocks::hasFailedBlock(JAISoundID param_0) { + JSULink<JAUSeqDataBlock>* rv = NULL; + for (JSULink<JAUSeqDataBlock>* link = field_0x0.getFirst(); link != NULL; link = link->getNext()) + { + if (link->getObject()->field_0x10 == param_0) { + link->getObject()->field_0x10.setAnonymous(); + return true; + } + } + return false; } -#pragma pop /* 802A6A58-802A6AA0 2A1398 0048+00 0/0 2/2 0/0 .text __ct__23JAUDynamicSeqDataBlocksFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JAUDynamicSeqDataBlocks::JAUDynamicSeqDataBlocks() { - nofralloc -#include "asm/JSystem/JAudio2/JAUSeqDataBlockMgr/__ct__23JAUDynamicSeqDataBlocksFv.s" +JAUDynamicSeqDataBlocks::JAUDynamicSeqDataBlocks() { + seqDataArchive_ = NULL; } -#pragma pop /* 802A6AA0-802A6AA8 -00001 0008+00 0/0 0/0 0/0 .text * setSeqDataArchive__23JAUDynamicSeqDataBlocksFP10JKRArchive */ @@ -149,80 +90,158 @@ void JAUDynamicSeqDataBlocks::setSeqDataArchive(JKRArchive* param_0) { /* 802A6AA8-802A6B8C 2A13E8 00E4+00 0/0 1/1 0/0 .text * getSeqData__23JAUDynamicSeqDataBlocksF10JAISoundIDP14JAISeqDataUserP10JAISeqDatab */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm s32 JAUDynamicSeqDataBlocks::getSeqData(JAISoundID param_0, JAISeqDataUser* param_1, - JAISeqData* param_2, bool param_3) { - nofralloc -#include "asm/JSystem/JAudio2/JAUSeqDataBlockMgr/func_802A6AA8.s" +s32 JAUDynamicSeqDataBlocks::getSeqData(JAISoundID param_0, JAISeqDataUser* param_1, + JAISeqData* param_2, bool param_3) { + rearrangeLoadingSeqs_(); + if (field_0x0.hasFailedBlock(param_0)) { + return 0; + } + + if (field_0xc.getSeqData(param_0)) { + return 1; + } + + u8* seqData = field_0x18.getSeqData(param_0); + if (seqData != NULL) { + param_2->field_0x0 = seqData; + param_2->field_0x4 = 0; + return 2; + } + + if (loadDynamicSeq(param_0, param_3, param_1)) { + return 1; + } + return 0; } -#pragma pop /* 802A6B8C-802A6BF4 2A14CC 0068+00 0/0 2/2 0/0 .text * appendDynamicSeqDataBlock__23JAUDynamicSeqDataBlocksFP15JAUSeqDataBlock */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm bool JAUDynamicSeqDataBlocks::appendDynamicSeqDataBlock(JAUSeqDataBlock* param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JAUSeqDataBlockMgr/appendDynamicSeqDataBlock__23JAUDynamicSeqDataBlocksFP15JAUSeqDataBlock.s" +bool JAUDynamicSeqDataBlocks::appendDynamicSeqDataBlock(JAUSeqDataBlock* seqDataBlock) { + rearrangeLoadingSeqs_(); + if (seqDataBlock->field_0x10.isAnonymous()) { + field_0x0.append(&seqDataBlock->field_0x0); + } else { + field_0x18.append(&seqDataBlock->field_0x0); + } + return 1; } -#pragma pop /* 802A6BF4-802A6C18 2A1534 0024+00 1/1 0/0 0/0 .text * JAUDynamicSeqDataBlocks_receiveLoaded___FUlUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void JAUDynamicSeqDataBlocks_receiveLoaded_(u32 param_0, u32 param_1) { - nofralloc -#include "asm/JSystem/JAudio2/JAUSeqDataBlockMgr/JAUDynamicSeqDataBlocks_receiveLoaded___FUlUl.s" +static void JAUDynamicSeqDataBlocks_receiveLoaded_(u32 param_0, u32 param_1) { + JAUSeqDataBlock* seqDataBlock = ((JSULink<JAUSeqDataBlock>*)param_1)->getObject(); + if (param_0 != NULL) { + seqDataBlock->field_0x1c = 2; + } else { + seqDataBlock->field_0x1c = 0; + } } -#pragma pop /* 802A6C18-802A6D48 2A1558 0130+00 1/1 2/2 0/0 .text * loadDynamicSeq__23JAUDynamicSeqDataBlocksF10JAISoundIDbP14JAISeqDataUser */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm bool JAUDynamicSeqDataBlocks::loadDynamicSeq(JAISoundID param_0, bool param_1, - JAISeqDataUser* param_2) { - nofralloc -#include "asm/JSystem/JAudio2/JAUSeqDataBlockMgr/loadDynamicSeq__23JAUDynamicSeqDataBlocksF10JAISoundIDbP14JAISeqDataUser.s" +bool JAUDynamicSeqDataBlocks::loadDynamicSeq(JAISoundID param_0, bool param_1, + JAISeqDataUser* param_2) { + if (seqDataArchive_ == NULL) { + return false; + } + JAUSoundInfo* soundInfo = JASGlobalInstance<JAUSoundInfo>::getInstance(); + if (soundInfo == NULL) { + return false; + } + u16 resourceId = soundInfo->getBgmSeqResourceID(param_0); + size_t resSize = JASResArcLoader::getResSize(seqDataArchive_, resourceId); + JSULink<JAUSeqDataBlock>* link = field_0x0.seekFreeBlock(resSize); + if (link == NULL) { + if (param_1) { + link = &releaseIdleDynamicSeqDataBlock_(param_2, resSize)->field_0x0; + if (link == NULL) { + return false; + } + } else { + return false; + } + } + field_0x0.remove(link); + JAUSeqDataBlock* seqDataBlock = link->getObject(); + seqDataBlock->field_0x10 = param_0; + link->getObject()->field_0x1c = 1; + field_0xc.append(link); + JASResArcLoader::loadResourceAsync( + seqDataArchive_, resourceId, + link->getObject()->field_0x14.addr, link->getObject()->field_0x14.size, + JAUDynamicSeqDataBlocks_receiveLoaded_, (u32)link); + return true; } -#pragma pop /* 802A6D48-802A6E00 2A1688 00B8+00 0/0 1/1 0/0 .text * releaseIdleDynamicSeqDataBlock__23JAUDynamicSeqDataBlocksFP14JAISeqDataUser */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JAUDynamicSeqDataBlocks::releaseIdleDynamicSeqDataBlock(JAISeqDataUser* param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JAUSeqDataBlockMgr/releaseIdleDynamicSeqDataBlock__23JAUDynamicSeqDataBlocksFP14JAISeqDataUser.s" +u32 JAUDynamicSeqDataBlocks::releaseIdleDynamicSeqDataBlock(JAISeqDataUser* param_0) { + rearrangeLoadingSeqs_(); + u32 size = 0; + JSULink<JAUSeqDataBlock>* nextLink; + for (JSULink<JAUSeqDataBlock>* link = field_0x18.field_0x0.getFirst(); link != NULL; ) { + nextLink = link->getNext(); + JAUSeqDataBlock* seqDataBlock = link->getObject(); + if (param_0 == NULL || !param_0->isUsingSeqData(seqDataBlock->field_0x14)) { + field_0x18.remove(link); + JAUSeqDataBlock* seqDataBlock = link->getObject(); + link->getObject()->field_0x10.setAnonymous(); + if (size < seqDataBlock->field_0x14.size) { + size = seqDataBlock->field_0x14.size; + } + field_0x0.append(link); + } + link = nextLink; + } + return size; } -#pragma pop /* 802A6E00-802A6EDC 2A1740 00DC+00 1/1 0/0 0/0 .text * releaseIdleDynamicSeqDataBlock___23JAUDynamicSeqDataBlocksFP14JAISeqDataUserUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JAUDynamicSeqDataBlocks::releaseIdleDynamicSeqDataBlock_(JAISeqDataUser* param_0, - u32 param_1) { - nofralloc -#include "asm/JSystem/JAudio2/JAUSeqDataBlockMgr/releaseIdleDynamicSeqDataBlock___23JAUDynamicSeqDataBlocksFP14JAISeqDataUserUl.s" +JAUSeqDataBlock* +JAUDynamicSeqDataBlocks::releaseIdleDynamicSeqDataBlock_(JAISeqDataUser* param_0, u32 param_1) { + rearrangeLoadingSeqs_(); + u32 minSize = 0xffffffff; + JSULink<JAUSeqDataBlock>* foundBlock = NULL; + JSULink<JAUSeqDataBlock>* link = field_0x18.field_0x0.getFirst(); + JSULink<JAUSeqDataBlock>* nextLink; + while (link != NULL) { + nextLink = link->getNext(); + JAUSeqDataBlock* seqDataBlock = link->getObject(); + if (param_0 == NULL || !param_0->isUsingSeqData(seqDataBlock->field_0x14)) { + u32 size = seqDataBlock->field_0x14.size; + if (size >= param_1 && size < minSize) { + foundBlock = link; + minSize = size; + } + } + link = nextLink; + } + if (foundBlock != NULL) { + field_0x18.remove(foundBlock); + JAUSeqDataBlock* seqDataBlock = foundBlock->getObject(); + seqDataBlock->field_0x10.setAnonymous(); + field_0x0.append(foundBlock); + return foundBlock->getObject(); + } + return NULL; } -#pragma pop /* 802A6EDC-802A6F70 2A181C 0094+00 4/4 0/0 0/0 .text * rearrangeLoadingSeqs___23JAUDynamicSeqDataBlocksFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JAUDynamicSeqDataBlocks::rearrangeLoadingSeqs_() { - nofralloc -#include "asm/JSystem/JAudio2/JAUSeqDataBlockMgr/rearrangeLoadingSeqs___23JAUDynamicSeqDataBlocksFv.s" +void JAUDynamicSeqDataBlocks::rearrangeLoadingSeqs_() { + JSULink<JAUSeqDataBlock>* link = field_0xc.field_0x0.getFirst(); + JSULink<JAUSeqDataBlock>* nextLink; + while (link != NULL) { + nextLink = link->getNext(); + JAUSeqDataBlock* seqDataBlock = link->getObject(); + if (seqDataBlock->field_0x1c == 0) { + field_0xc.remove(link); + field_0x0.append(link); + } else if (seqDataBlock->field_0x1c == 2) { + field_0xc.remove(link); + field_0x18.append(link); + } + link = nextLink; + } } -#pragma pop diff --git a/libs/JSystem/JAudio2/JAUSoundTable.cpp b/libs/JSystem/JAudio2/JAUSoundTable.cpp index d18231f750..1deb81f88c 100644 --- a/libs/JSystem/JAudio2/JAUSoundTable.cpp +++ b/libs/JSystem/JAudio2/JAUSoundTable.cpp @@ -1,6 +1,5 @@ // -// Generated By: dol2asm -// Translation Unit: JAUSoundTable +// JAUSoundTable // #include "JSystem/JAudio2/JAUSoundTable.h" diff --git a/libs/Z2AudioLib/Z2Audience.cpp b/libs/Z2AudioLib/Z2Audience.cpp index b5d4f9909a..3088fb5d93 100644 --- a/libs/Z2AudioLib/Z2Audience.cpp +++ b/libs/Z2AudioLib/Z2Audience.cpp @@ -301,7 +301,7 @@ SECTION_SDATA2 static f64 lit_1008 = 4503599627370496.0 /* cast u32 to float */; void Z2Audible::setOuterParams(JASSoundParams const& param_0, JASSoundParams const& param_1, int param_2) { Z2AudibleChannel* this_01 = &field_0x2c[param_2]; - u32 iStack_94 = (field_0x10.field_0x0.b.f1 & 0xf00) >> 8; + u32 iStack_94 = (field_0x10.field_0x0.half.f1 & 0xf00) >> 8; if (iStack_94 == 0) { this_01->field_0x0.combine(param_0, param_1); return; @@ -1016,15 +1016,7 @@ asm Z2Audience::Z2Audience() { #endif /* 802BD1FC-802BD288 2B7B3C 008C+00 1/0 1/1 0/0 .text __dt__10Z2AudienceFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -extern "C" asm void __dt__10Z2AudienceFv() { - // asm Z2Audience::~Z2Audience() { - nofralloc -#include "asm/Z2AudioLib/Z2Audience/__dt__10Z2AudienceFv.s" -} -#pragma pop +Z2Audience::~Z2Audience() {} /* 802BD288-802BD2DC 2B7BC8 0054+00 2/2 1/1 0/0 .text __dt__22JASMemPool<9Z2Audible>Fv */ #pragma push diff --git a/libs/Z2AudioLib/Z2AudioArcLoader.cpp b/libs/Z2AudioLib/Z2AudioArcLoader.cpp index 9a2465bcd4..0762223a1c 100644 --- a/libs/Z2AudioLib/Z2AudioArcLoader.cpp +++ b/libs/Z2AudioLib/Z2AudioArcLoader.cpp @@ -4,30 +4,16 @@ // #include "Z2AudioLib/Z2AudioArcLoader.h" +#include "Z2AudioLib/Z2FxLineMgr.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JKernel/JKRArchive.h" +#include "JSystem/JAudio2/JAUSectionHeap.h" #include "dol2asm.h" // // Types: // -struct JKRHeap { - static u8 sCurrentHeap[4]; -}; - -struct JKRArchive { - struct EMountDirection {}; - - /* 802D5840 */ void mount(void*, JKRHeap*, JKRArchive::EMountDirection); -}; - -struct Z2FxLineMgr { - /* 802BA7FC */ void initDataArc(JKRArchive*, JKRHeap*); -}; - -struct JAUSectionHeap { - /* 802A6094 */ void getOpenSection(); -}; - // // Forward References: // @@ -68,55 +54,33 @@ extern "C" extern u8 data_80450CC0[4 + 4 /* padding */]; extern "C" u8 sCurrentHeap__7JKRHeap[4]; extern "C" extern u8 __OSReport_disable; -// -// Declarations: -// - -/* ############################################################################################## */ -/* 803C9CD0-803C9D18 026DF0 0044+04 2/2 1/1 0/0 .data __vt__16Z2AudioArcLoader */ -SECTION_DATA extern void* __vt__16Z2AudioArcLoader[17 + 1 /* padding */] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__16Z2AudioArcLoaderFv, - (void*)readWS__17JAUAudioArcLoaderFUlPCvUl, - (void*)readBNK__17JAUAudioArcLoaderFUlPCv, - (void*)readBSC__17JAUAudioArcLoaderFPCvUl, - (void*)readBST__17JAUAudioArcLoaderFPCvUl, - (void*)readBSTN__16Z2AudioArcLoaderFPCvUl, - (void*)readBMS__17JAUAudioArcLoaderFUlPCvUl, - (void*)readBMS_fromArchive__17JAUAudioArcLoaderFUl, - (void*)newVoiceBank__17JAUAudioArcLoaderFUlUl, - (void*)newDynamicSeqBlock__17JAUAudioArcLoaderFUl, - (void*)readBSFT__17JAUAudioArcLoaderFPCv, - (void*)readMaxSeCategory__17JAUAudioArcLoaderFiii, - (void*)beginBNKList__17JAUAudioArcLoaderFUlUl, - (void*)endBNKList__17JAUAudioArcLoaderFv, - (void*)readCommandMore__16Z2AudioArcLoaderFUl, - /* padding */ - NULL, -}; - /* 802A9A34-802A9A70 2A4374 003C+00 0/0 1/1 0/0 .text __ct__16Z2AudioArcLoaderFP10JAUSection */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm Z2AudioArcLoader::Z2AudioArcLoader(JAUSection* param_0) { - nofralloc -#include "asm/Z2AudioLib/Z2AudioArcLoader/__ct__16Z2AudioArcLoaderFP10JAUSection.s" +Z2AudioArcLoader::Z2AudioArcLoader(JAUSection* param_0) : JAUAudioArcLoader(param_0) { } -#pragma pop /* 802A9A70-802A9AC8 2A43B0 0058+00 1/0 0/0 0/0 .text readCommandMore__16Z2AudioArcLoaderFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm bool Z2AudioArcLoader::readCommandMore(u32 param_0) { - nofralloc -#include "asm/Z2AudioLib/Z2AudioArcLoader/readCommandMore__16Z2AudioArcLoaderFUl.s" +bool Z2AudioArcLoader::readCommandMore(u32 param_0) { + bool rv = false; + switch (param_0) { + case 'bfca': + readBFCA(getContent_(readU32_())); + rv = true; + break; + } + return rv; } -#pragma pop /* 802A9AC8-802A9B54 2A4408 008C+00 1/1 0/0 0/0 .text readBFCA__16Z2AudioArcLoaderFPCv */ +// regalloc and extra stack +#ifdef NONMATCHING +void Z2AudioArcLoader::readBFCA(void const* param_0) { + JAUSectionHeap* sectionHeap = JASGlobalInstance<JAUSectionHeap>::getInstance(); + JKRHeap* pJVar1 = sectionHeap->getHeap(); + JKRArchive* pJVar5 = JKRArchive::mount((void*)param_0, JKRGetCurrentHeap(), JKRArchive::MOUNT_DIRECTION_TAIL); + Z2GetFxLineMgr()->initDataArc(pJVar5, pJVar1); + JKRUnmountArchive(pJVar5); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -125,19 +89,9 @@ asm void Z2AudioArcLoader::readBFCA(void const* param_0) { #include "asm/Z2AudioLib/Z2AudioArcLoader/readBFCA__16Z2AudioArcLoaderFPCv.s" } #pragma pop - +#endif /* 802A9B54-802A9B58 2A4494 0004+00 1/0 0/0 0/0 .text readBSTN__16Z2AudioArcLoaderFPCvUl */ void Z2AudioArcLoader::readBSTN(void const* param_0, u32 param_1) { /* empty function */ } - -/* 802A9B58-802A9BC8 2A4498 0070+00 1/0 0/0 0/0 .text __dt__16Z2AudioArcLoaderFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm Z2AudioArcLoader::~Z2AudioArcLoader() { - nofralloc -#include "asm/Z2AudioLib/Z2AudioArcLoader/__dt__16Z2AudioArcLoaderFv.s" -} -#pragma pop |
