// // Generated By: dol2asm // Translation Unit: JASBasicWaveBank // #include "JSystem/JAudio2/JASBasicWaveBank.h" #include "JSystem/JAudio2/JASMutex.h" #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JUtility/JUTAssert.h" // // Types: // // // Forward References: // extern "C" void __ct__16JASBasicWaveBankFv(); extern "C" void __dt__16JASBasicWaveBankFv(); extern "C" void __dt__Q216JASBasicWaveBank11TWaveHandleFv(); extern "C" void getWaveGroup__16JASBasicWaveBankFUl(); extern "C" void setGroupCount__16JASBasicWaveBankFUlP7JKRHeap(); extern "C" void setWaveTableSize__16JASBasicWaveBankFUlP7JKRHeap(); extern "C" void incWaveTable__16JASBasicWaveBankFPCQ216JASBasicWaveBank10TWaveGroup(); extern "C" void decWaveTable__16JASBasicWaveBankFPCQ216JASBasicWaveBank10TWaveGroup(); extern "C" void getWaveHandle__16JASBasicWaveBankCFUl(); extern "C" void setWaveInfo__16JASBasicWaveBankFPQ216JASBasicWaveBank10TWaveGroupiUsRC11JASWaveInfo(); extern "C" void __ct__Q216JASBasicWaveBank10TWaveGroupFv(); extern "C" void __dt__Q216JASBasicWaveBank10TWaveGroupFv(); extern "C" void setWaveCount__Q216JASBasicWaveBank10TWaveGroupFUlP7JKRHeap(); extern "C" void onLoadDone__Q216JASBasicWaveBank10TWaveGroupFv(); extern "C" void onEraseDone__Q216JASBasicWaveBank10TWaveGroupFv(); extern "C" void getWaveID__Q216JASBasicWaveBank10TWaveGroupCFi(); extern "C" void getWavePtr__Q216JASBasicWaveBank11TWaveHandleCFv(); extern "C" void __dt__11JASWaveBankFv(); extern "C" void __dt__13JASWaveHandleFv(); extern "C" void __ct__Q216JASBasicWaveBank11TWaveHandleFv(); extern "C" void __ct__Q216JASBasicWaveBank14TGroupWaveInfoFv(); extern "C" void getWaveInfo__Q216JASBasicWaveBank11TWaveHandleCFv(); extern "C" void getWaveArc__16JASBasicWaveBankFUl(); extern "C" void getArcCount__16JASBasicWaveBankCFv(); extern "C" u8 mNoLoad__16JASBasicWaveBank[4 + 4 /* padding */]; // // External References: // extern "C" void __ct__10JASWaveArcFv(); extern "C" void __dt__10JASWaveArcFv(); extern "C" void onDispose__10JASWaveArcFv(); extern "C" void* __nwa__FUlP7JKRHeapi(); extern "C" void __dl__FPv(); extern "C" void __dla__FPv(); extern "C" void __destroy_new_array(); extern "C" void __construct_new_array(); extern "C" void _savegpr_25(); extern "C" void _savegpr_26(); extern "C" void _savegpr_29(); extern "C" void _restgpr_25(); extern "C" void _restgpr_26(); extern "C" void _restgpr_29(); extern "C" u32 one__11JASWaveInfo[1 + 1 /* padding */]; // // Declarations: // /* 802984F8-80298558 292E38 0060+00 0/0 1/1 0/0 .text __ct__16JASBasicWaveBankFv */ JASBasicWaveBank::JASBasicWaveBank() { mWaveTable = NULL; mWaveGroupArray = NULL; mHandleCount = 0; mGroupCount = 0; OSInitMutex(&field_0x4); } /* 80298558-802985E4 292E98 008C+00 1/0 0/0 0/0 .text __dt__16JASBasicWaveBankFv */ JASBasicWaveBank::~JASBasicWaveBank() { delete[] mWaveTable; delete[] mWaveGroupArray; } /* 80298640-80298664 292F80 0024+00 1/1 1/1 0/0 .text getWaveGroup__16JASBasicWaveBankFUl */ JASBasicWaveBank::TWaveGroup* JASBasicWaveBank::getWaveGroup(u32 param_0) { if (param_0 >= mGroupCount) { return NULL; } return mWaveGroupArray + param_0; } /* 80298664-80298710 292FA4 00AC+00 0/0 1/1 0/0 .text * setGroupCount__16JASBasicWaveBankFUlP7JKRHeap */ void JASBasicWaveBank::setGroupCount(u32 param_0, JKRHeap* param_1) { delete[] mWaveGroupArray; mGroupCount = param_0; mWaveGroupArray = new(param_1, 0) TWaveGroup[param_0]; JUT_ASSERT(62, mWaveGroupArray != 0); for (int i = 0; i < mGroupCount; i++) { mWaveGroupArray[i].mBank = this; } } /* 80298710-80298790 293050 0080+00 0/0 1/1 0/0 .text * setWaveTableSize__16JASBasicWaveBankFUlP7JKRHeap */ void JASBasicWaveBank::setWaveTableSize(u32 param_0, JKRHeap* param_1) { delete[] mWaveTable; mWaveTable = new(param_1, 0) TWaveHandle[param_0]; JUT_ASSERT(92, mWaveTable != 0); mHandleCount = param_0; } /* 80298790-8029883C 2930D0 00AC+00 1/1 0/0 0/0 .text * incWaveTable__16JASBasicWaveBankFPCQ216JASBasicWaveBank10TWaveGroup */ // NONMATCHING instruction order // This works if argument type is changed to non const void JASBasicWaveBank::incWaveTable(JASBasicWaveBank::TWaveGroup const* param_0) { JASMutexLock lock(&field_0x4); for (u32 i = 0; i < param_0->getWaveCount(); i++) { TWaveHandle* handle = mWaveTable + param_0->getWaveID(i); if (!handle->mHeap) { handle->mHeap = const_cast(¶m_0->mHeap); handle->field_0x4.field_0x20 = ¶m_0->_48; handle->field_0x4.field_0x08 = param_0->mCtrlWaveArray[i].field_0x4; } } } /* 80451278-80451280 000778 0004+04 2/2 0/0 0/0 .sbss mNoLoad__16JASBasicWaveBank */ u32 JASBasicWaveBank::mNoLoad; /* 8029883C-802988DC 29317C 00A0+00 1/1 0/0 0/0 .text * decWaveTable__16JASBasicWaveBankFPCQ216JASBasicWaveBank10TWaveGroup */ void JASBasicWaveBank::decWaveTable(JASBasicWaveBank::TWaveGroup const* param_0) { JASMutexLock lock(&field_0x4); for (u32 i = 0; i < param_0->getWaveCount(); i++) { TWaveHandle* handle = mWaveTable + param_0->getWaveID(i); if (handle->mHeap == ¶m_0->mHeap) { handle->mHeap = NULL; handle->field_0x4.field_0x20 = &mNoLoad; handle->field_0x4.field_0x08 = -1; } } } /* 802988DC-80298910 29321C 0034+00 1/0 0/0 0/0 .text getWaveHandle__16JASBasicWaveBankCFUl */ JASWaveHandle* JASBasicWaveBank::getWaveHandle(u32 param_0) const { if (param_0 >= mHandleCount) { return NULL; } if (!mWaveTable[param_0].mHeap) { return NULL; } return mWaveTable + param_0; } /* 80298910-802989C0 293250 00B0+00 0/0 1/1 0/0 .text * setWaveInfo__16JASBasicWaveBankFPQ216JASBasicWaveBank10TWaveGroupiUsRC11JASWaveInfo */ void JASBasicWaveBank::setWaveInfo(JASBasicWaveBank::TWaveGroup* wgrp, int index, u16 param_2, JASWaveInfo const& param_3) { JUT_ASSERT(204, wgrp); JUT_ASSERT(205, index < wgrp->mWaveCount); JUT_ASSERT(206, index >= 0); mWaveTable[param_2].field_0x4 = param_3; mWaveTable[param_2].field_0x4.field_0x20 = &mNoLoad; mWaveTable[param_2].field_0x4.field_0x08 = -1; wgrp->mCtrlWaveArray[index].field_0x0 = param_2; wgrp->mCtrlWaveArray[index].field_0x4 = param_3.field_0x08; } /* 802989C0-80298A0C 293300 004C+00 1/1 0/0 0/0 .text __ct__Q216JASBasicWaveBank10TWaveGroupFv */ JASBasicWaveBank::TWaveGroup::TWaveGroup() { mBank = NULL; mCtrlWaveArray = NULL; mWaveCount = 0; } /* 80298A0C-80298A84 29334C 0078+00 3/2 0/0 0/0 .text __dt__Q216JASBasicWaveBank10TWaveGroupFv */ JASBasicWaveBank::TWaveGroup::~TWaveGroup() { delete[] mCtrlWaveArray; } /* 80298A84-80298B04 2933C4 0080+00 0/0 1/1 0/0 .text * setWaveCount__Q216JASBasicWaveBank10TWaveGroupFUlP7JKRHeap */ void JASBasicWaveBank::TWaveGroup::setWaveCount(u32 param_0, JKRHeap* param_1) { delete[] mCtrlWaveArray; mWaveCount = param_0; mCtrlWaveArray = new(param_1, 0) TGroupWaveInfo[param_0]; JUT_ASSERT(255, mCtrlWaveArray != 0); } /* 80298B04-80298B2C 293444 0028+00 1/0 0/0 0/0 .text * onLoadDone__Q216JASBasicWaveBank10TWaveGroupFv */ void JASBasicWaveBank::TWaveGroup::onLoadDone() { JUT_ASSERT(286, mBank); mBank->incWaveTable(this); } /* 80298B2C-80298B54 29346C 0028+00 1/0 0/0 0/0 .text * onEraseDone__Q216JASBasicWaveBank10TWaveGroupFv */ void JASBasicWaveBank::TWaveGroup::onEraseDone() { JUT_ASSERT(292, mBank); mBank->decWaveTable(this); } /* 80298B54-80298B64 293494 0010+00 2/2 0/0 0/0 .text * getWaveID__Q216JASBasicWaveBank10TWaveGroupCFi */ u32 JASBasicWaveBank::TWaveGroup::getWaveID(int index) const { JUT_ASSERT(298, index < mWaveCount); JUT_ASSERT(299, index >= 0); return mCtrlWaveArray[index].field_0x0; } /* 80298B64-80298B88 2934A4 0024+00 1/0 0/0 0/0 .text * getWavePtr__Q216JASBasicWaveBank11TWaveHandleCFv */ int JASBasicWaveBank::TWaveHandle::getWavePtr() const { JUT_ASSERT(313, mHeap); void* base = mHeap->getBase(); if (base == 0) { return 0; } return (int)base + field_0x4.field_0x08; }