summaryrefslogtreecommitdiff
path: root/libs/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp')
-rw-r--r--libs/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp347
1 files changed, 183 insertions, 164 deletions
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