diff --git a/configure.py b/configure.py index 03eff0a56..cd172fe57 100644 --- a/configure.py +++ b/configure.py @@ -673,7 +673,7 @@ config.libs = [ Object(Matching, "JSystem/JAudio/JASTrackPort.cpp"), Object(Matching, "JSystem/JAudio/JASBank.cpp"), Object(NonMatching, "JSystem/JAudio/JASWaveBank.cpp"), - Object(NonMatching, "JSystem/JAudio/JASBasicBank.cpp"), + Object(Matching, "JSystem/JAudio/JASBasicBank.cpp"), Object(NonMatching, "JSystem/JAudio/JASBasicInst.cpp"), Object(NonMatching, "JSystem/JAudio/JASDrumSet.cpp"), Object(NonMatching, "JSystem/JAudio/JASBasicWaveBank.cpp"), diff --git a/include/JSystem/JAudio/JASBank.h b/include/JSystem/JAudio/JASBank.h index 7763ef23e..1d00e5f3f 100644 --- a/include/JSystem/JAudio/JASBank.h +++ b/include/JSystem/JAudio/JASBank.h @@ -6,10 +6,21 @@ class JKRHeap; namespace JASystem { - namespace TBank { - JKRHeap* getCurrentHeap(); + class TInst; + class TBank { + public: + TBank() { + field_0x4 = 0; + } + virtual ~TBank() {} + virtual TInst* getInst(int) const = 0; + virtual u32 getType() const = 0; - extern JKRHeap* sCurrentHeap; + static JKRHeap* getCurrentHeap(); + + static JKRHeap* sCurrentHeap; + + /* 0x04 */ int field_0x4; }; } diff --git a/include/JSystem/JAudio/JASBasicBank.h b/include/JSystem/JAudio/JASBasicBank.h new file mode 100644 index 000000000..6c760bfb0 --- /dev/null +++ b/include/JSystem/JAudio/JASBasicBank.h @@ -0,0 +1,21 @@ +#ifndef JASBASICBANK_H +#define JASBASICBANK_H + +#include "JSystem/JAudio/JASBank.h" + +namespace JASystem { + class TBasicBank : public TBank { + public: + TBasicBank(); + ~TBasicBank(); + void setInstCount(u32); + void setInst(int, JASystem::TInst*); + TInst* getInst(int) const; + u32 getType() const { return 'BSIC'; } + + /* 0x08 */ TInst** mInstTable; + /* 0x0C */ u32 mInstCount; + }; +} + +#endif /* JASBASICBANK_H */ diff --git a/src/JSystem/JAudio/JASBasicBank.cpp b/src/JSystem/JAudio/JASBasicBank.cpp index 76d7cd128..bf833a286 100644 --- a/src/JSystem/JAudio/JASBasicBank.cpp +++ b/src/JSystem/JAudio/JASBasicBank.cpp @@ -3,41 +3,43 @@ // Translation Unit: JASBasicBank.cpp // -#include "JASBasicBank.h" -#include "dolphin/types.h" +#include "JSystem/JAudio/JASBasicBank.h" +#include "JSystem/JAudio/JASCalc.h" +#include "JSystem/JKernel/JKRSolidHeap.h" +#include "JSystem/JUtility/JUTAssert.h" /* 80284570-8028459C .text __ct__Q28JASystem10TBasicBankFv */ JASystem::TBasicBank::TBasicBank() { - /* Nonmatching */ + mInstTable = NULL; + mInstCount = 0; } /* 8028459C-80284610 .text __dt__Q28JASystem10TBasicBankFv */ JASystem::TBasicBank::~TBasicBank() { - /* Nonmatching */ + delete[] mInstTable; } /* 80284610-802846B0 .text setInstCount__Q28JASystem10TBasicBankFUl */ -void JASystem::TBasicBank::setInstCount(unsigned long) { - /* Nonmatching */ +void JASystem::TBasicBank::setInstCount(u32 param_1) { + delete[] mInstTable; + mInstTable = new (getCurrentHeap(), 0) TInst*[param_1]; + JUT_ASSERT(36, mInstTable != 0); + Calc::bzero(mInstTable, param_1 * 4); + mInstCount = param_1; } /* 802846B0-80284768 .text setInst__Q28JASystem10TBasicBankFiPQ28JASystem5TInst */ -void JASystem::TBasicBank::setInst(int, JASystem::TInst*) { - /* Nonmatching */ +void JASystem::TBasicBank::setInst(int prg_no, JASystem::TInst* param_2) { + JUT_ASSERT(45, prg_no < mInstCount); + JUT_ASSERT(46, prg_no >= 0); + mInstTable[prg_no] = param_2; } /* 80284768-802847F0 .text getInst__Q28JASystem10TBasicBankCFi */ -void JASystem::TBasicBank::getInst(int) const { - /* Nonmatching */ +JASystem::TInst* JASystem::TBasicBank::getInst(int prg_no) const { + JUT_ASSERT(53, prg_no >= 0); + if (prg_no >= mInstCount) { + return 0; + } + return mInstTable[prg_no]; } - -/* 802847F0-80284838 .text __dt__Q28JASystem5TBankFv */ -JASystem::TBank::~TBank() { - /* Nonmatching */ -} - -/* 80284838-80284844 .text getType__Q28JASystem10TBasicBankCFv */ -void JASystem::TBasicBank::getType() const { - /* Nonmatching */ -} -