switch to dtk setup (#2203)

* switch to dtk setup

* some cleanup / fixes

* cleanup d_a_alink literals

* Restore doxygen, update CI & README.md (#1)

* Fix build image ref (#2)

---------

Co-authored-by: Luke Street <luke@street.dev>
This commit is contained in:
TakaRikka
2024-10-10 07:29:58 -07:00
committed by GitHub
parent 3769ea47a6
commit 178194ccb2
33438 changed files with 370506 additions and 3055930 deletions
+3
View File
@@ -0,0 +1,3 @@
#include "JSystem/JAudio2/JAIAudible.h"
JAIAudible::~JAIAudible() {}
+3
View File
@@ -0,0 +1,3 @@
#include "JSystem/JAudio2/JAIAudience.h"
JAIAudience::~JAIAudience() {}
+242
View File
@@ -0,0 +1,242 @@
//
// Generated By: dol2asm
// Translation Unit: JAISe
//
#include "JSystem/JAudio2/JAISe.h"
#include "JSystem/JAudio2/JAIAudience.h"
#include "JSystem/JAudio2/JAISeMgr.h"
#include "dolphin/types.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 8029F03C-8029F0F8 29997C 00BC+00 0/0 1/1 0/0 .text
* __ct__5JAISeFP8JAISeMgrP27JAISoundStrategyMgr<5JAISe>Ul */
JAISe::JAISe(JAISeMgr* param_0, JAISoundStrategyMgr<JAISe>* param_1, u32 param_2) : JSULink<JAISe>(this) {
inner_.mSoundStrategyMgr = param_1;
inner_.seMgr = param_0;
inner_.mProperPriority = param_2;
}
/* 8029F0F8-8029F214 299A38 011C+00 1/1 0/0 0/0 .text mixOut___5JAISeFRC14JASSoundParams
*/
void JAISe::mixOut_(JASSoundParams const& param_0) {
inner_.track.setTempoRate(inner_.mTempoMgr.getTempo());
JASSoundParams stackParams;
params.mixOutAll(param_0, &stackParams, fader.getIntensity());
if (inner_.field_0x278) {
inner_.field_0x278->virtual4(this, stackParams);
}
if (audible_) {
int maxChannels = audience_->getMaxChannels();
for (int i = 0; i < maxChannels; i++) {
audience_->mixChannelOut(stackParams, audible_, i);
}
} else {
inner_.mSoundParams = stackParams;
}
}
/* 8029F214-8029F250 299B54 003C+00 1/1 0/0 0/0 .text stopTrack___5JAISeFv */
void JAISe::stopTrack_() {
switch (inner_.track.getStatus()) {
case 0:
break;
case 1:
inner_.track.stopSeq();
break;
case 2:
break;
}
}
/* 8029F250-8029F304 299B90 00B4+00 1/1 0/0 0/0 .text startTrack___5JAISeFRC14JASSoundParams */
void JAISe::startTrack_(JASSoundParams const& param_0) {
if (inner_.track.getStatus() == 2) {
inner_.track.init();
}
if (audible_) {
initTrack_JAISound_(&inner_.track);
} else {
params.mixOutAll(param_0, &inner_.mSoundParams, fader.getIntensity());
inner_.track.setChannelMgrCount(1);
inner_.track.assignExtBuffer(0, &inner_.mSoundParams);
}
inner_.field_0x26c = 1;
inner_.track.setSeqData(inner_.mSeqData.field_0x0, inner_.mSeqData.field_0x4);
inner_.track.startSeq();
}
/* 8029F304-8029F4CC 299C44 01C8+00 0/0 1/1 0/0 .text
* JAISeCategoryMgr_mixOut___5JAISeFbRC14JASSoundParams16JAISoundActivity */
void JAISe::JAISeCategoryMgr_mixOut_(bool param_0, JASSoundParams const& param_1, JAISoundActivity param_2) {
mixOut_(param_1);
if (isStopping()) {
stopTrack_();
} else if (param_0) {
if (status_.isPlaying()) {
if (inner_.field_0x26c) {
switch (inner_.track.getStatus()) {
case 2:
if (status_.field_0x1.flags.flag1) {
startTrack_(param_1);
} else {
stop_JAISound_();
}
break;
case 1:
inner_.track.pause(status_.isPaused() || param_2.field_0x0.flags.flag2);
inner_.track.mute(status_.isMute() || param_2.field_0x0.flags.flag1);
}
} else {
startTrack_(param_1);
}
}
} else if (status_.field_0x1.flags.flag1) {
if (status_.field_0x1.flags.flag3) {
inner_.track.pause(true);
} else {
stopTrack_();
}
} else {
stopTrack_();
stop_JAISound_();
}
}
/* 8029F4CC-8029F5C8 299E0C 00FC+00 0/0 1/1 0/0 .text JAISeCategoryMgr_calc___5JAISeFv */
void JAISe::JAISeCategoryMgr_calc_() {
prepare_();
if (calc_JAISound_()) {
inner_.mTempoMgr.calc();
if (inner_.field_0x278) {
inner_.field_0x278->calc(this);
}
}
if (isStopping() || mPriority == -1) {
inner_.mPriority = -1;
} else {
inner_.mPriority = inner_.mProperPriority + mPriority;
}
}
/* 8029F5C8-8029F650 299F08 0088+00 2/1 0/0 0/0 .text JAISound_tryDie___5JAISeFv */
bool JAISe::JAISound_tryDie_() {
switch (inner_.track.getStatus()) {
case 0:
case 2:
if (inner_.field_0x278) {
inner_.mSoundStrategyMgr->virtual4(inner_.field_0x278);
inner_.field_0x278 = NULL;
}
die_JAISound_();
return true;
case 1:
break;
}
return false;
}
/* 8029F650-8029F6D8 299F90 0088+00 0/0 1/1 0/0 .text
* JAISeMgr_startID___5JAISeF10JAISoundIDPCQ29JGeometry8TVec3<f>P11JAIAudience */
void JAISe::JAISeMgr_startID_(JAISoundID param_0, JGeometry::TVec3<f32> const* param_1, JAIAudience* param_2) {
start_JAISound_(param_0, param_1, param_2);
inner_.field_0x26c = 0;
if (inner_.mSoundStrategyMgr) {
inner_.field_0x278 = inner_.mSoundStrategyMgr->calc(param_0);
} else {
inner_.field_0x278 = NULL;
}
}
/* 8029F6D8-8029F6E0 29A018 0008+00 2/1 0/0 0/0 .text getNumChild__5JAISeCFv */
s32 JAISe::getNumChild() const {
return 0;
}
/* 8029F6E0-8029F6E8 29A020 0008+00 2/1 0/0 0/0 .text getChild__5JAISeFi */
JAISoundChild* JAISe::getChild(int param_0) {
return NULL;
}
/* 8029F6E8-8029F6EC 29A028 0004+00 2/1 0/0 0/0 .text releaseChild__5JAISeFi */
void JAISe::releaseChild(int param_0) {
/* empty function */
}
/* 8029F6EC-8029F78C 29A02C 00A0+00 1/1 0/0 0/0 .text prepare_getSeqData___5JAISeFv */
bool JAISe::prepare_getSeqData_() {
switch (inner_.seMgr->getSeqDataMgr()->getSeqData(soundID, &inner_.mSeqData)) {
case 0:
status_.state.unk = 2;
return false;
case 1:
increasePrepareCount_JAISound_();
return false;
case 2:
return true;
}
return false;
}
/* 8029F78C-8029F84C 29A0CC 00C0+00 1/1 0/0 0/0 .text prepare___5JAISeFv */
void JAISe::prepare_() {
switch (status_.state.unk) {
case 6:
break;
case 2:
stop_JAISound_();
break;
case 0:
if (prepare_getSeqData_()) {
status_.state.unk = 5;
}
break;
case 1:
if (prepare_getSeqData_()) {
status_.state.unk = 3;
}
break;
case 4:
status_.state.unk = 5;
break;
case 3:
case 5:
break;
}
}
/* 8029F84C-8029F854 29A18C 0008+00 2/1 0/0 0/0 .text getTrack__5JAISeFv */
JASTrack* JAISe::getTrack() {
return &inner_.track;
}
/* 8029F854-8029F864 29A194 0010+00 2/1 0/0 0/0 .text getChildTrack__5JAISeFi */
JASTrack* JAISe::getChildTrack(int param_0) {
return inner_.track.getChild(param_0);
}
/* 8029F864-8029F868 29A1A4 0004+00 2/1 0/0 0/0 .text asSe__5JAISeFv */
JAISe* JAISe::asSe() {
return this;
}
/* 8029F868-8029F870 29A1A8 0008+00 2/1 0/0 0/0 .text getTempoMgr__5JAISeFv */
JAITempoMgr* JAISe::getTempoMgr() {
return &inner_.mTempoMgr;
}
+480
View File
@@ -0,0 +1,480 @@
//
// Generated By: dol2asm
// Translation Unit: JAISeMgr
//
#include "JSystem/JAudio2/JAISeMgr.h"
#include "JSystem/JAudio2/JAISoundHandles.h"
#include "JSystem/JAudio2/JAISoundInfo.h"
#include "JSystem/JAudio2/JASReport.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void isUsingSeqData__16JAISeCategoryMgrFRC16JAISeqDataRegion();
extern "C" void releaseSeqData__16JAISeCategoryMgrFRC16JAISeqDataRegion();
extern "C" void JAISeMgr_calc___16JAISeCategoryMgrFv();
extern "C" void JAISeMgr_freeDeadSe___16JAISeCategoryMgrFv();
extern "C" void func_8029FC34(void* _this);
extern "C" void JAISeMgr_acceptsNewSe___16JAISeCategoryMgrCFUl();
extern "C" void sortByPriority___16JAISeCategoryMgrFv();
extern "C" void stop__16JAISeCategoryMgrFUl();
extern "C" void stop__16JAISeCategoryMgrFv();
extern "C" void stopSoundID__16JAISeCategoryMgrF10JAISoundID();
extern "C" void pause__16JAISeCategoryMgrFb();
extern "C" void JAISeMgr_mixOut___16JAISeCategoryMgrFRC18JAISoundParamsMove16JAISoundActivity();
extern "C" void __ct__8JAISeMgrFb();
extern "C" void isUsingSeqData__8JAISeMgrFRC16JAISeqDataRegion();
extern "C" void releaseSeqData__8JAISeMgrFRC16JAISeqDataRegion();
extern "C" void setCategoryArrangement__8JAISeMgrFRC24JAISeCategoryArrangement();
extern "C" void stop__8JAISeMgrFv();
extern "C" void stopSoundID__8JAISeMgrF10JAISoundID();
extern "C" void initParams__8JAISeMgrFv();
extern "C" void setAudience__8JAISeMgrFP11JAIAudience();
extern "C" void setSeqDataMgr__8JAISeMgrFP13JAISeqDataMgr();
extern "C" void resetSeqDataMgr__8JAISeMgrFv();
extern "C" void newSe___8JAISeMgrFiUl();
extern "C" void calc__8JAISeMgrFv();
extern "C" void mixOut__8JAISeMgrFv();
extern "C" void func_802A0768();
extern "C" void getNumActiveSe__8JAISeMgrCFv();
extern "C" void __dt__8JAISeMgrFv();
extern "C" void __ct__16JAISeCategoryMgrFv();
extern "C" extern char const* const JAISeMgr__stringBase0;
//
// External References:
//
extern "C" void __dt__16JAISeCategoryMgrFv();
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void __dt__17JASGenericMemPoolFv();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void free__17JASGenericMemPoolFPvUl();
extern "C" void JASReport__FPCce();
extern "C" void __dt__8JASTrackFv();
extern "C" void combine__14JASSoundParamsFRC14JASSoundParamsRC14JASSoundParams();
extern "C" void func_8029F03C();
extern "C" void JAISeCategoryMgr_mixOut___5JAISeFbRC14JASSoundParams16JAISoundActivity();
extern "C" void JAISeCategoryMgr_calc___5JAISeFv();
extern "C" void func_8029F650();
extern "C" void __dt__14JAISeqDataUserFv();
extern "C" void attachHandle__8JAISoundFP14JAISoundHandle();
extern "C" void stop__8JAISoundFUl();
extern "C" void stop__8JAISoundFv();
extern "C" void __dl__FPv();
extern "C" void __dt__10JSUPtrLinkFv();
extern "C" void initiate__10JSUPtrListFv();
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
extern "C" void __register_global_object();
extern "C" void __destroy_arr();
extern "C" void __construct_array();
extern "C" void _savegpr_25();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_25();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__5JAISe[22];
extern "C" extern void* __vt__14JAISeqDataUser[5 + 1 /* padding */];
extern "C" extern u8 data_80450B5C[4];
extern "C" extern u8 data_80451310[8];
extern "C" extern u8 __OSReport_disable;
//
// Declarations:
//
/* 8029F8B0-8029F91C 29A1F0 006C+00 2/1 0/0 0/0 .text
* isUsingSeqData__16JAISeCategoryMgrFRC16JAISeqDataRegion */
bool JAISeCategoryMgr::isUsingSeqData(JAISeqDataRegion const& param_0) {
JSULink<JAISe>* link = mSeList.getFirst();
while (link != NULL) {
JAISe* obj = link->getObject();
if (param_0.intersects(*obj->getSeqData())) {
return true;
}
link = link->getNext();
}
return false;
}
/* 8029F91C-8029F9C4 29A25C 00A8+00 2/1 0/0 0/0 .text
* releaseSeqData__16JAISeCategoryMgrFRC16JAISeqDataRegion */
int JAISeCategoryMgr::releaseSeqData(JAISeqDataRegion const& param_0) {
bool bVar1 = false;
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
if (param_0.intersects(*link->getObject()->getSeqData())) {
link->getObject()->stop();
bVar1 = true;
}
}
// Fake match. li 2 needs to come after clrlwi
u32 x = bVar1;
u32 y = x;
int rv = 2;
if (x) {
rv = 1;
}
return rv;
}
/* 8029F9C4-8029FB30 29A304 016C+00 1/1 0/0 0/0 .text JAISeMgr_calc___16JAISeCategoryMgrFv */
void JAISeCategoryMgr::JAISeMgr_calc_() {
mParams.calc();
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->JAISeCategoryMgr_calc_();
}
sortByPriority_();
}
/* ############################################################################################## */
/* 80434078-80434084 060D98 000C+00 2/2 0/0 0/0 .bss @744 */
static u8 lit_744[12];
/* 80434084-80434098 060DA4 0010+04 2/2 1/1 0/0 .bss
* memPool_$localstatic3$getMemPool___26JASPoolAllocObject<5JAISe>Fv */
extern u8 data_80434084[16 + 4 /* padding */];
u8 data_80434084[16 + 4 /* padding */];
/* 8029FB30-8029FC34 29A470 0104+00 1/1 0/0 0/0 .text JAISeMgr_freeDeadSe___16JAISeCategoryMgrFv
*/
// Need to setup JAISe dtor
#ifdef NONMATCHING
void JAISeCategoryMgr::JAISeMgr_freeDeadSe_() {
JSULink<JAISe>* link = mSeList.getFirst();
while (link != NULL) {
JSULink<JAISe>* link_next = link->getNext();
if (link->getObject()->status_.isDead()) {
mSeList.remove(link);
delete link->getObject();
}
link = link_next;
}
}
#else
void JAISeCategoryMgr::JAISeMgr_freeDeadSe_() {
// NONMATCHING
}
#endif
/* 8029FC34-8029FC88 29A574 0054+00 2/2 1/1 0/0 .text __dt__18JASMemPool<5JAISe>Fv */
extern "C" void func_8029FC34(void* _this) {
// NONMATCHING
}
/* ############################################################################################## */
/* 8029FC88-8029FD40 29A5C8 00B8+00 1/1 0/0 0/0 .text
* JAISeMgr_acceptsNewSe___16JAISeCategoryMgrCFUl */
u32 JAISeCategoryMgr::JAISeMgr_acceptsNewSe_(u32 param_0) const {
s32 maxSe = getMaxSe();
if (maxSe <= 0) {
return 1;
}
s32 stopCount = 0;
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
if (param_0 < link->getObject()->JAISeCategoryMgr_getProperPriority_()) {
return 1;
}
if (!link->getObject()->isStopping()) {
stopCount++;
}
}
return stopCount < maxSe;
}
/* 8029FD40-8029FDE0 29A680 00A0+00 1/1 0/0 0/0 .text sortByPriority___16JAISeCategoryMgrFv */
void JAISeCategoryMgr::sortByPriority_() {
for (u32 i = mSeList.getNumLinks(); i != 0; i--) {
JSULink<JAISe>* link = mSeList.getFirst();
u32 lowestPriority = link->getObject()->JAISeCategoryMgr_getPriority_();
JSULink<JAISe>* current = link->getNext();
for (int j = 1; j < i; j++) {
u32 itemPriority = current->getObject()->JAISeCategoryMgr_getPriority_();
if (itemPriority < lowestPriority) {
lowestPriority = itemPriority;
link = current;
}
current = current->getNext();
}
mSeList.remove(link);
mSeList.append(link);
}
}
/* 8029FDE0-8029FE34 29A720 0054+00 0/0 1/1 0/0 .text stop__16JAISeCategoryMgrFUl */
void JAISeCategoryMgr::stop(u32 param_0) {
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop(param_0);
}
}
/* 8029FE34-8029FE78 29A774 0044+00 1/1 0/0 0/0 .text stop__16JAISeCategoryMgrFv */
void JAISeCategoryMgr::stop() {
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop();
}
}
/* 8029FE78-8029FEEC 29A7B8 0074+00 1/1 0/0 0/0 .text stopSoundID__16JAISeCategoryMgrF10JAISoundID
*/
void JAISeCategoryMgr::stopSoundID(JAISoundID param_0) {
if (!param_0.isAnonymous()) {
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
if ((u32)link->getObject()->getID() == (u32)param_0) {
link->getObject()->stop();
}
}
}
}
/* 8029FEEC-8029FF18 29A82C 002C+00 0/0 2/2 0/0 .text pause__16JAISeCategoryMgrFb */
void JAISeCategoryMgr::pause(bool param_0) {
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->pause(param_0);
}
}
/* ############################################################################################## */
/* 8045578C-80455790 003D8C 0004+00 4/4 0/0 0/0 .sdata2 @1040 */
SECTION_SDATA2 static f32 lit_1040 = 1.0f;
/* 80455790-80455794 003D90 0004+00 4/4 0/0 0/0 .sdata2 @1041 */
SECTION_SDATA2 static u8 lit_1041[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 80455794-80455798 003D94 0004+00 4/4 0/0 0/0 .sdata2 @1042 */
SECTION_SDATA2 static f32 lit_1042 = 0.5f;
/* 8029FF18-802A0074 29A858 015C+00 1/1 0/0 0/0 .text
* JAISeMgr_mixOut___16JAISeCategoryMgrFRC18JAISoundParamsMove16JAISoundActivity */
void JAISeCategoryMgr::JAISeMgr_mixOut_(JAISoundParamsMove const& param_0,
JAISoundActivity param_1) {
JASSoundParams aJStack_30;
aJStack_30.combine(param_0.mParams, mParams.mParams);
JSULink<JAISe>* this_00 = mSeList.getFirst();
int iVar1 = getMaxActiveSe();
if (iVar1 > 0) {
while (this_00 != NULL && iVar1 > 0 && !this_00->getObject()->isFarAway()) {
this_00->getObject()->JAISeCategoryMgr_mixOut_(true, aJStack_30, param_1);
this_00 = this_00->getNext();
iVar1--;
}
for (; this_00 != NULL; this_00 = this_00->getNext()) {
this_00->getObject()->JAISeCategoryMgr_mixOut_(false, aJStack_30, param_1);
}
} else {
while (this_00 != NULL && !this_00->getObject()->isFarAway()) {
this_00->getObject()->JAISeCategoryMgr_mixOut_(true, aJStack_30, param_1);
this_00 = this_00->getNext();
}
for (; this_00 != NULL; this_00 = this_00->getNext()) {
this_00->getObject()->JAISeCategoryMgr_mixOut_(false, aJStack_30, param_1);
}
}
}
/* ############################################################################################## */
/* 803C98B0-803C98C4 0269D0 0014+00 2/2 1/1 0/0 .data __vt__8JAISeMgr */
SECTION_DATA extern void* __vt__8JAISeMgr[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__8JAISeMgrFv,
(void*)isUsingSeqData__8JAISeMgrFRC16JAISeqDataRegion,
(void*)releaseSeqData__8JAISeMgrFRC16JAISeqDataRegion,
};
/* 802A0074-802A0168 29A9B4 00F4+00 0/0 1/1 0/0 .text __ct__8JAISeMgrFb */
JAISeMgr::JAISeMgr(bool param_0) : JASGlobalInstance<JAISeMgr>(param_0) {
mAudience = NULL;
mSeqDataMgr = NULL;
field_0x10 = 0;
mParams.init();
JAISoundActivity::init();
}
/* 802A0168-802A01D8 29AAA8 0070+00 1/0 0/0 0/0 .text
* isUsingSeqData__8JAISeMgrFRC16JAISeqDataRegion */
bool JAISeMgr::isUsingSeqData(JAISeqDataRegion const& param_0) {
for (int i = 0; i < 16; i++) {
if (mCategoryMgrs[i].JAISeCategoryMgr::isUsingSeqData(param_0)) {
return true;
}
}
return false;
}
/* 802A01D8-802A0268 29AB18 0090+00 1/0 0/0 0/0 .text
* releaseSeqData__8JAISeMgrFRC16JAISeqDataRegion */
int JAISeMgr::releaseSeqData(JAISeqDataRegion const& param_0) {
u8 r30 = 0;
for (int i = 0; i < 16; i++) {
switch (mCategoryMgrs[i].JAISeCategoryMgr::releaseSeqData(param_0)) {
case 0:
return 0;
case 1:
r30 = 1;
break;
}
}
return (r30 != 0) ? 1 : 0;
}
/* 802A0268-802A02A0 29ABA8 0038+00 0/0 1/1 0/0 .text
* setCategoryArrangement__8JAISeMgrFRC24JAISeCategoryArrangement */
void JAISeMgr::setCategoryArrangement(JAISeCategoryArrangement const& param_0) {
for (int i = 0; i < 16; i++) {
mCategoryMgrs[i].setMaxActiveSe(param_0.mItems[i].mMaxActiveSe);
mCategoryMgrs[i].setMaxInactiveSe(param_0.mItems[i].mMaxInactiveSe);
}
}
/* 802A02A0-802A02F4 29ABE0 0054+00 0/0 1/1 0/0 .text stop__8JAISeMgrFv */
void JAISeMgr::stop() {
for (int i = 0; i < 16; i++) {
mCategoryMgrs[i].stop();
}
}
/* 802A02F4-802A0358 29AC34 0064+00 0/0 1/1 0/0 .text stopSoundID__8JAISeMgrF10JAISoundID
*/
void JAISeMgr::stopSoundID(JAISoundID param_0) {
for (int i = 0; i < 16; i++) {
mCategoryMgrs[i].stopSoundID(param_0);
}
}
/* 802A0358-802A03D8 29AC98 0080+00 0/0 1/1 0/0 .text initParams__8JAISeMgrFv */
void JAISeMgr::initParams() {
for (int i = 0; i < 16; i++) {
mCategoryMgrs[i].getParams()->init();
}
}
/* 802A03D8-802A03E0 -00001 0008+00 0/0 0/0 0/0 .text setAudience__8JAISeMgrFP11JAIAudience */
void JAISeMgr::setAudience(JAIAudience* param_0) {
mAudience = param_0;
}
/* 802A03E0-802A0434 29AD20 0054+00 0/0 1/1 0/0 .text setSeqDataMgr__8JAISeMgrFP13JAISeqDataMgr */
void JAISeMgr::setSeqDataMgr(JAISeqDataMgr* param_0) {
resetSeqDataMgr();
mSeqDataMgr = param_0;
mSeqDataMgr->setSeqDataUser(this);
}
/* 802A0434-802A0484 29AD74 0050+00 1/1 0/0 0/0 .text resetSeqDataMgr__8JAISeMgrFv */
void JAISeMgr::resetSeqDataMgr() {
if (mSeqDataMgr) {
mSeqDataMgr->setSeqDataUser(NULL);
mSeqDataMgr = NULL;
}
}
/* 802A0484-802A0574 29ADC4 00F0+00 1/1 0/0 0/0 .text newSe___8JAISeMgrFiUl */
JAISe* JAISeMgr::newSe_(int param_0, u32 param_1) {
// NONMATCHING
}
/* 802A0574-802A0704 29AEB4 0190+00 0/0 1/1 0/0 .text calc__8JAISeMgrFv */
void JAISeMgr::calc() {
mParams.calc();
for (int i = 0; i < 16; i++) {
mCategoryMgrs[i].JAISeMgr_calc_();
}
for (int i = 0; i < 16; i++) {
mCategoryMgrs[i].JAISeMgr_freeDeadSe_();
}
}
/* 802A0704-802A0768 29B044 0064+00 0/0 1/1 0/0 .text mixOut__8JAISeMgrFv */
void JAISeMgr::mixOut() {
for (int i = 0; i < 16; i++) {
mCategoryMgrs[i].JAISeMgr_mixOut_(mParams, *this);
}
}
/* ############################################################################################## */
/* 802A0768-802A08D0 29B0A8 0168+00 0/0 1/1 0/0 .text
* startSound__8JAISeMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
bool JAISeMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1,
JGeometry::TVec3<f32> const* param_2) {
if (param_1 && param_1->isSoundAttached()) {
param_1->getSound()->stop();
}
JAISoundInfo* pSoundInfo = JASGlobalInstance<JAISoundInfo>::getInstance();
u32 uVar4;
u32 categoryIndex;
if (pSoundInfo != NULL) {
categoryIndex = pSoundInfo->getCategory(param_0);
uVar4 = pSoundInfo->getPriority(param_0);
} else {
categoryIndex = param_0.mId.mBytes.b1;
uVar4 = 0;
}
JAISe* pJAISe = newSe_(categoryIndex, uVar4);
if (pJAISe == NULL) {
JASReport("cannot new Se %08x.", param_0.mId.mFullId);
return false;
}
JAIAudience* pAudience = getAudience(categoryIndex);
pJAISe->JAISeMgr_startID_(param_0, param_2, pAudience);
if (pSoundInfo != NULL) {
pSoundInfo->getSeInfo(param_0, pJAISe);
}
if (param_1 != NULL) {
pJAISe->attachHandle(param_1);
}
return true;
}
/* 802A08D0-802A08FC 29B210 002C+00 0/0 2/2 0/0 .text getNumActiveSe__8JAISeMgrCFv */
int JAISeMgr::getNumActiveSe() const {
int sum = 0;
for (int i = 0; i < 16; i++) {
sum += mCategoryMgrs[i].getNumSe();
}
return sum;
}
/* 802A08FC-802A0994 29B23C 0098+00 1/0 0/0 0/0 .text __dt__8JAISeMgrFv */
extern "C" void __dt__8JAISeMgrFv() {
// asm JAISeMgr::~JAISeMgr() {
// NONMATCHING
}
/* ############################################################################################## */
/* 803C98C4-803C98D8 0269E4 0014+00 1/1 1/1 0/0 .data __vt__16JAISeCategoryMgr */
SECTION_DATA extern void* __vt__16JAISeCategoryMgr[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__16JAISeCategoryMgrFv,
(void*)isUsingSeqData__16JAISeCategoryMgrFRC16JAISeqDataRegion,
(void*)releaseSeqData__16JAISeCategoryMgrFRC16JAISeqDataRegion,
};
/* 802A0994-802A0A6C 29B2D4 00D8+00 1/1 0/0 0/0 .text __ct__16JAISeCategoryMgrFv */
JAISeCategoryMgr::JAISeCategoryMgr() {
// NONMATCHING
}
/* 8039B8F8-8039B8F8 027F58 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+425
View File
@@ -0,0 +1,425 @@
//
// Generated By: dol2asm
// Translation Unit: JAISeq
//
#include "JSystem/JAudio2/JAISeq.h"
#include "JSystem/JAudio2/JAISeqMgr.h"
#include "JSystem/JAudio2/JAISoundChild.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JAudio2/JASCriticalSection.h"
#include "JSystem/JAudio2/JAIAudience.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" static bool func_802A0A6C(JASTrack*);
extern "C" void func_802A0A8C();
extern "C" void func_802A0B64();
extern "C" void playSeqData___6JAISeqFRC14JASSoundParams16JAISoundActivity();
extern "C" void reserveChildTracks___6JAISeqFi();
extern "C" void releaseChildTracks___6JAISeqFv();
extern "C" void prepare_getSeqData___6JAISeqFv();
extern "C" void prepare___6JAISeqFRC14JASSoundParams16JAISoundActivity();
extern "C" void JAISeqMgr_calc___6JAISeqFv();
extern "C" void die___6JAISeqFv();
extern "C" void func_802A1268(void* _this);
extern "C" void JAISound_tryDie___6JAISeqFv();
extern "C" void mixOut___6JAISeqFRC14JASSoundParams16JAISoundActivity();
extern "C" void JAISeqMgr_mixOut___6JAISeqFRC14JASSoundParams16JAISoundActivity();
extern "C" s32 getNumChild__6JAISeqCFv();
extern "C" void getChild__6JAISeqFi();
extern "C" void releaseChild__6JAISeqFi();
extern "C" void getTrack__6JAISeqFv();
extern "C" void getChildTrack__6JAISeqFi();
extern "C" void asSeq__6JAISeqFv();
extern "C" void getTempoMgr__6JAISeqFv();
//
// External References:
//
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void __dt__17JASGenericMemPoolFv();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void free__17JASGenericMemPoolFPvUl();
extern "C" void __ct__8JASTrackFv();
extern "C" void __dt__8JASTrackFv();
extern "C" void setChannelMgrCount__8JASTrackFUl();
extern "C" void assignExtBuffer__8JASTrackFUlP14JASSoundParams();
extern "C" void setSeqData__8JASTrackFPvUl();
extern "C" void startSeq__8JASTrackFv();
extern "C" void stopSeq__8JASTrackFv();
extern "C" void connectChild__8JASTrackFUlP8JASTrack();
extern "C" void mute__8JASTrackFb();
extern "C" void pause__8JASTrackFb();
extern "C" void setTempoRate__8JASTrackFf();
extern "C" void func_802932E0(void* _this);
extern "C" void mixOutAll__14JAISoundParamsFRC14JASSoundParamsP14JASSoundParamsf();
extern "C" void __ct__8JAISoundFv();
extern "C" void func_802A2328();
extern "C" bool asSe__8JAISoundFv();
extern "C" bool asStream__8JAISoundFv();
extern "C" void die_JAISound___8JAISoundFv();
extern "C" void increasePrepareCount_JAISound___8JAISoundFv();
extern "C" void calc_JAISound___8JAISoundFv();
extern "C" void initTrack_JAISound___8JAISoundFP8JASTrack();
extern "C" void init__13JAISoundChildFv();
extern "C" void mixOut__13JAISoundChildFP8JASTrack();
extern "C" void calc__13JAISoundChildFv();
extern "C" void __dl__FPv();
extern "C" void __ct__10JSUPtrLinkFPv();
extern "C" void __register_global_object();
extern "C" void _savegpr_24();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_24();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern u8 data_80431B04[16 + 4 /* padding */];
extern "C" extern u8 struct_80451230[8];
extern "C" extern u8 data_80451318[8];
//
// Declarations:
//
/* 802A0A6C-802A0A8C 29B3AC 0020+00 1/1 0/0 0/0 .text
* JASTrack_isFreeOrStopped__20@unnamed@JAISeq_cpp@FP8JASTrack */
static bool func_802A0A6C(JASTrack* track) {
u8 status = track->getStatus();
return status == 0 || status == 2;
}
/* 803C98F4-803C9928 026A14 0030+04 1/1 2/2 0/0 .data __vt__6JAISeq */
SECTION_DATA extern void* __vt__6JAISeq[12 + 1 /* padding */] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)getNumChild__6JAISeqCFv,
(void*)getChild__6JAISeqFi,
(void*)releaseChild__6JAISeqFi,
(void*)asSe__8JAISoundFv,
(void*)asSeq__6JAISeqFv,
(void*)asStream__8JAISoundFv,
(void*)getTrack__6JAISeqFv,
(void*)getChildTrack__6JAISeqFi,
(void*)getTempoMgr__6JAISeqFv,
(void*)JAISound_tryDie___6JAISeqFv,
};
/* 80455798-8045579C 003D98 0004+00 3/3 0/0 0/0 .sdata2 @642 */
SECTION_SDATA2 static f32 lit_642 = 1.0f;
/* 8045579C-804557A0 003D9C 0004+00 4/4 0/0 0/0 .sdata2 @643 */
SECTION_SDATA2 static u8 lit_643[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 804557A0-804557A8 003DA0 0004+04 3/3 0/0 0/0 .sdata2 @644 */
SECTION_SDATA2 static f32 lit_644[1 + 1 /* padding */] = {
0.5f,
/* padding */
0.0f,
};
/* 802A0A8C-802A0B64 29B3CC 00D8+00 0/0 2/1 0/0 .text
* __ct__6JAISeqFP9JAISeqMgrP28JAISoundStrategyMgr<6JAISeq> */
JAISeq::JAISeq(JAISeqMgr* param_0, JAISoundStrategyMgr<JAISeq>* param_1) : JSULink<JAISeq>(this) {
inner_.seqMgr = param_0;
inner_.strategyMgr = param_1;
inner_.mSoundParams.init();
for (int i = 0; i < 32; i++) {
inner_.mSoundChild[i] = NULL;
}
}
/* 802A0B64-802A0C04 29B4A4 00A0+00 0/0 1/1 0/0 .text
* JAISeqMgr_startID___6JAISeqF10JAISoundIDPCQ29JGeometry8TVec3<f>P11JAIAudienceii */
void JAISeq::JAISeqMgr_startID_(JAISoundID param_0, JGeometry::TVec3<f32> const* param_1, JAIAudience* param_2, int param_3, int param_4) {
inner_.field_0x39c = param_3;
reserveChildTracks_(param_4);
start_JAISound_(param_0, param_1, param_2);
if (inner_.strategyMgr) {
field_0x3a8 = inner_.strategyMgr->calc(param_0);
} else {
field_0x3a8 = NULL;
}
}
/* 802A0C04-802A0CA4 29B544 00A0+00 1/1 0/0 0/0 .text
* playSeqData___6JAISeqFRC14JASSoundParams16JAISoundActivity */
void JAISeq::playSeqData_(JASSoundParams const& param_0, JAISoundActivity param_1) {
inner_.outputTrack.setSeqData(inner_.mSeqData.field_0x0, inner_.mSeqData.field_0x4);
if (audible_) {
initTrack_JAISound_(&inner_.outputTrack);
} else {
inner_.outputTrack.setChannelMgrCount(1);
inner_.outputTrack.assignExtBuffer(0, &inner_.mSoundParams);
}
mixOut_(param_0, param_1);
inner_.outputTrack.startSeq();
}
/* ############################################################################################## */
/* 80434098-804340A4 060DB8 000C+00 1/1 0/0 0/0 .bss @716 */
static u8 lit_716[12];
/* 802A0CA4-802A0E48 29B5E4 01A4+00 1/1 0/0 0/0 .text reserveChildTracks___6JAISeqFi */
void JAISeq::reserveChildTracks_(int param_0) {
for (int i = 0; i < 2; i++) {
JASPoolAllocObject_MultiThreaded<JASTrack>* allocobj = new JASPoolAllocObject_MultiThreaded<JASTrack>();
JASTrack* track = new (allocobj) JASTrack();
if (track) {
track->setAutoDelete(true);
inner_.outputTrack.connectChild(i, track);
for (int j = 0; j < 16; j++) {
if (i * 16 + j >= param_0) {
continue;
}
JASPoolAllocObject_MultiThreaded<JASTrack>* allocobj2 = new JASPoolAllocObject_MultiThreaded<JASTrack>();
JASTrack* track2 = new (allocobj2) JASTrack();
if (track2) {
track2->setAutoDelete(true);
track->connectChild(j, track2);
}
}
}
}
}
/* 802A0E48-802A0EDC 29B788 0094+00 1/1 0/0 0/0 .text releaseChildTracks___6JAISeqFv */
void JAISeq::releaseChildTracks_() {
for (u32 i = 0; i < 2; i++) {
JASTrack* track = inner_.outputTrack.getChild(i);
if (track) {
for (u32 j = 0; j < 16; j++) {
JASTrack* track2 = track->getChild(j);
if (track2) {
delete track2;
}
}
delete track;
}
}
}
/* 802A0EDC-802A0F90 29B81C 00B4+00 1/1 0/0 0/0 .text prepare_getSeqData___6JAISeqFv */
bool JAISeq::prepare_getSeqData_() {
JAISoundID id(soundID);
if (id.isAnonymous()) {
return true;
}
JAISeqDataMgr* seqDataMgr = inner_.seqMgr->getSeqDataMgr();
switch (seqDataMgr->getSeqData(id, &inner_.mSeqData)) {
case 0:
status_.state.unk = 2;
break;
case 1:
increasePrepareCount_JAISound_();
return false;
case 2:
return true;
}
return false;
}
/* 802A0F90-802A108C 29B8D0 00FC+00 2/1 0/0 0/0 .text
* prepare___6JAISeqFRC14JASSoundParams16JAISoundActivity */
bool JAISeq::prepare_(JASSoundParams const& param_0, JAISoundActivity param_1) {
switch (status_.state.unk) {
case 6:
break;
case 2:
stop_JAISound_();
break;
case 0:
if (prepare_getSeqData_()) {
status_.state.unk = 5;
playSeqData_(param_0, param_1);
return true;
}
break;
case 1:
if (prepare_getSeqData_()) {
status_.state.unk = 3;
}
return false;
case 4:
status_.state.unk = 5;
playSeqData_(param_0, param_1);
return true;
case 5:
return true;
}
return false;
}
/* 802A108C-802A1180 29B9CC 00F4+00 0/0 1/1 0/0 .text JAISeqMgr_calc___6JAISeqFv */
void JAISeq::JAISeqMgr_calc_() {
if (inner_.outputTrack.getStatus() == 2 || (inner_.outputTrack.getStatus() == 0 && status_.state.unk == 2)) {
die_();
return;
}
if (calc_JAISound_()) {
inner_.mTempoMgr.calc();
for (int i = 0; i < 32; i++) {
if (inner_.mSoundChild[i]) {
inner_.mSoundChild[i]->calc();
}
}
if (field_0x3a8) {
field_0x3a8->calc(this);
}
}
}
/* ############################################################################################## */
/* 804340A4-804340B0 060DC4 000C+00 3/3 0/0 0/0 .bss @896 */
static u8 lit_896[12];
/* 804340B0-804340C0 060DD0 0010+00 3/3 4/4 0/0 .bss
* memPool_$localstatic3$getMemPool___35JASPoolAllocObject<13JAISoundChild>Fv */
extern u8 data_804340B0[16];
u8 data_804340B0[16];
/* 802A1180-802A1268 29BAC0 00E8+00 2/2 0/0 0/0 .text die___6JAISeqFv */
void JAISeq::die_() {
for (int i = 0; i < 32; i++) {
if (inner_.mSoundChild[i]) {
delete (JASPoolAllocObject<JAISoundChild>*)inner_.mSoundChild[i];
inner_.mSoundChild[i] = NULL;
}
}
if (field_0x3a8) {
inner_.strategyMgr->virtual4(field_0x3a8);
field_0x3a8 = NULL;
}
releaseChildTracks_();
die_JAISound_();
}
/* 802A1268-802A12BC 29BBA8 0054+00 3/3 4/4 0/0 .text __dt__27JASMemPool<13JAISoundChild>Fv */
extern "C" void func_802A1268(void* _this) {
// NONMATCHING
}
/* 802A12BC-802A1348 29BBFC 008C+00 1/0 0/0 0/0 .text JAISound_tryDie___6JAISeqFv */
bool JAISeq::JAISound_tryDie_() {
if (func_802A0A6C(&inner_.outputTrack)) {
die_();
return true;
}
fader.forceOut();
status_.state.flags.flag1 = 1;
JASCriticalSection cs;
inner_.outputTrack.stopSeq();
return false;
}
/* 802A1348-802A14FC 29BC88 01B4+00 2/2 0/0 0/0 .text
* mixOut___6JAISeqFRC14JASSoundParams16JAISoundActivity */
void JAISeq::mixOut_(JASSoundParams const& param_0, JAISoundActivity param_1) {
inner_.outputTrack.setTempoRate(inner_.mTempoMgr.getTempo());
inner_.outputTrack.mute(param_1.field_0x0.flags.flag1 || status_.isMute());
inner_.outputTrack.pause(param_1.field_0x0.flags.flag2 || status_.isPaused());
JASSoundParams stackParams;
params.mixOutAll(param_0, &stackParams, fader.getIntensity());
if (field_0x3a8) {
field_0x3a8->virtual4(this, stackParams);
}
if (audible_) {
int maxChannels = audience_->getMaxChannels();
for (int i = 0; i < maxChannels; i++) {
audience_->mixChannelOut(stackParams, audible_, i);
}
} else {
inner_.mSoundParams = stackParams;
for (int i = 0; i < 32; i++) {
if (inner_.mSoundChild[i]) {
JASTrack* track = JAISeq::getChildTrack(i);
if (track) {
inner_.mSoundChild[i]->mixOut(track);
}
}
}
}
}
/* 802A14FC-802A1570 29BE3C 0074+00 0/0 1/1 0/0 .text
* JAISeqMgr_mixOut___6JAISeqFRC14JASSoundParams16JAISoundActivity */
void JAISeq::JAISeqMgr_mixOut_(JASSoundParams const& param_0, JAISoundActivity param_1) {
if (prepare_(param_0, param_1) && inner_.outputTrack.getStatus() == 1) {
mixOut_(param_0, param_1);
}
}
/* 802A1570-802A1578 29BEB0 0008+00 1/0 0/0 0/0 .text getNumChild__6JAISeqCFv */
s32 JAISeq::getNumChild() const {
return 32;
}
/* 802A1578-802A165C 29BEB8 00E4+00 1/0 0/0 0/0 .text getChild__6JAISeqFi */
JAISoundChild* JAISeq::getChild(int index) {
if (inner_.mSoundChild[index]) {
return inner_.mSoundChild[index];
}
JASPoolAllocObject<JAISoundChild>* allocobj = new JASPoolAllocObject<JAISoundChild>();
inner_.mSoundChild[index] = new (allocobj) JAISoundChild();
if (!inner_.mSoundChild[index]) {
return NULL;
}
return inner_.mSoundChild[index];
}
/* 802A165C-802A1728 29BF9C 00CC+00 1/0 0/0 0/0 .text releaseChild__6JAISeqFi */
void JAISeq::releaseChild(int param_0) {
if (inner_.outputTrack.getStatus() == 1 && inner_.mSoundChild[param_0]) {
JASTrack* track = getChildTrack(param_0);
if (track) {
track->assignExtBuffer(0, NULL);
}
delete (JASPoolAllocObject<JAISoundChild>*)inner_.mSoundChild[param_0];
inner_.mSoundChild[param_0] = NULL;
}
}
/* 802A1728-802A1730 29C068 0008+00 1/0 0/0 0/0 .text getTrack__6JAISeqFv */
JASTrack* JAISeq::getTrack() {
return &inner_.outputTrack;
}
/* 802A1730-802A1768 29C070 0038+00 2/1 0/0 0/0 .text getChildTrack__6JAISeqFi */
JASTrack* JAISeq::getChildTrack(int param_0) {
u32 tmp = u32(param_0) >> 4;
JASTrack* track = inner_.outputTrack.getChild(tmp);
if (track) {
JASTrack* track2 = track->getChild(param_0 - (tmp << 4));
return track2;
}
return NULL;
}
/* 802A1768-802A176C 29C0A8 0004+00 1/0 0/0 0/0 .text asSeq__6JAISeqFv */
JAISeq* JAISeq::asSeq() {
return this;
}
/* 802A176C-802A1774 29C0AC 0008+00 1/0 0/0 0/0 .text getTempoMgr__6JAISeqFv */
JAITempoMgr* JAISeq::getTempoMgr() {
return &inner_.mTempoMgr;
}
+5
View File
@@ -0,0 +1,5 @@
#include "JSystem/JAudio2/JAISeqDataMgr.h"
JAISeqDataUser::~JAISeqDataUser() {}
JAISeqDataMgr::~JAISeqDataMgr() {}
+270
View File
@@ -0,0 +1,270 @@
//
// Generated By: dol2asm
// Translation Unit: JAISeqMgr
//
#include "JSystem/JAudio2/JAISeqMgr.h"
#include "JSystem/JAudio2/JAISeq.h"
#include "JSystem/JAudio2/JAISoundHandles.h"
#include "JSystem/JAudio2/JAISoundInfo.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void isUsingSeqData__9JAISeqMgrFRC16JAISeqDataRegion();
extern "C" void releaseSeqData__9JAISeqMgrFRC16JAISeqDataRegion();
extern "C" void __ct__9JAISeqMgrFb();
extern "C" void freeDeadSeq___9JAISeqMgrFv();
extern "C" void func_802A1AF4(void* _this);
extern "C" void func_802A1B48();
extern "C" void calc__9JAISeqMgrFv();
extern "C" void stop__9JAISeqMgrFv();
extern "C" void stop__9JAISeqMgrFUl();
extern "C" void stopSoundID__9JAISeqMgrF10JAISoundID();
extern "C" void mixOut__9JAISeqMgrFv();
extern "C" void beginStartSeq___9JAISeqMgrFv();
extern "C" void endStartSeq___9JAISeqMgrFP6JAISeqP14JAISoundHandle();
extern "C" void __dt__9JAISeqMgrFv();
//
// External References:
//
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void __dt__17JASGenericMemPoolFv();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void free__17JASGenericMemPoolFPvUl();
extern "C" void __dt__8JASTrackFv();
extern "C" void func_802A0A8C();
extern "C" void func_802A0B64();
extern "C" void JAISeqMgr_calc___6JAISeqFv();
extern "C" void JAISeqMgr_mixOut___6JAISeqFRC14JASSoundParams16JAISoundActivity();
extern "C" void __dt__14JAISeqDataUserFv();
extern "C" void attachHandle__8JAISoundFP14JAISoundHandle();
extern "C" void stop__8JAISoundFUl();
extern "C" void stop__8JAISoundFv();
extern "C" void __dl__FPv();
extern "C" void __dt__10JSUPtrLinkFv();
extern "C" void __dt__10JSUPtrListFv();
extern "C" void initiate__10JSUPtrListFv();
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
extern "C" void __register_global_object();
extern "C" void _savegpr_25();
extern "C" void _savegpr_29();
extern "C" void _restgpr_25();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__6JAISeq[12 + 1 /* padding */];
extern "C" extern void* __vt__14JAISeqDataUser[5 + 1 /* padding */];
extern "C" extern u8 data_80450B5C[4];
extern "C" extern u8 data_80451320[8];
extern "C" extern u8 __OSReport_disable;
//
// Declarations:
//
/* 802A1804-802A1870 29C144 006C+00 1/0 0/0 0/0 .text
* isUsingSeqData__9JAISeqMgrFRC16JAISeqDataRegion */
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;
}
/* 802A1870-802A1914 29C1B0 00A4+00 1/0 0/0 0/0 .text
* releaseSeqData__9JAISeqMgrFRC16JAISeqDataRegion */
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;
}
/* ############################################################################################## */
/* 803C9958-803C9970 026A78 0014+04 2/2 1/1 0/0 .data __vt__9JAISeqMgr */
SECTION_DATA extern void* __vt__9JAISeqMgr[5 + 1 /* padding */] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__9JAISeqMgrFv,
(void*)isUsingSeqData__9JAISeqMgrFRC16JAISeqDataRegion,
(void*)releaseSeqData__9JAISeqMgrFRC16JAISeqDataRegion,
/* padding */
NULL,
};
/* 804557A8-804557AC 003DA8 0004+00 1/1 0/0 0/0 .sdata2 @691 */
SECTION_SDATA2 static f32 lit_691 = 1.0f;
/* 804557AC-804557B0 003DAC 0004+00 1/1 0/0 0/0 .sdata2 @692 */
SECTION_SDATA2 static u8 lit_692[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 804557B0-804557B8 003DB0 0004+04 1/1 0/0 0/0 .sdata2 @693 */
SECTION_SDATA2 static f32 lit_693[1 + 1 /* padding */] = {
0.5f,
/* padding */
0.0f,
};
/* 802A1914-802A1A08 29C254 00F4+00 0/0 1/1 0/0 .text __ct__9JAISeqMgrFb */
JAISeqMgr::JAISeqMgr(bool param_1) : JASGlobalInstance<JAISeqMgr>(param_1), mAudience(NULL) {
seqDataMgr_ = NULL;
field_0x10 = NULL;
field_0x70 = 16;
mMove.init();
mActivity.init();
}
/* ############################################################################################## */
/* 804340C0-804340CC 060DE0 000C+00 3/3 0/0 0/0 .bss @715 */
static u8 lit_715[12];
/* 804340CC-804340E0 060DEC 0010+04 3/3 1/1 0/0 .bss
* memPool_$localstatic3$getMemPool___27JASPoolAllocObject<6JAISeq>Fv */
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 */
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;
}
}
/* 802A1AF4-802A1B48 29C434 0054+00 3/3 1/1 0/0 .text __dt__19JASMemPool<6JAISeq>Fv */
extern "C" void func_802A1AF4(void* _this) {
// NONMATCHING
}
/* 802A1B48-802A1C90 29C488 0148+00 0/0 1/1 0/0 .text
* startSound__9JAISeqMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
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;
}
/* 802A1C90-802A1DFC 29C5D0 016C+00 0/0 4/4 0/0 .text calc__9JAISeqMgrFv */
void JAISeqMgr::calc() {
mMove.calc();
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->JAISeqMgr_calc_();
}
freeDeadSeq_();
}
/* 802A1DFC-802A1E3C 29C73C 0040+00 0/0 1/1 0/0 .text stop__9JAISeqMgrFv */
void JAISeqMgr::stop() {
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop();
}
}
/* 802A1E3C-802A1E8C 29C77C 0050+00 0/0 1/1 0/0 .text stop__9JAISeqMgrFUl */
void JAISeqMgr::stop(u32 param_0) {
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop(param_0);
}
}
/* 802A1E8C-802A1EFC 29C7CC 0070+00 0/0 1/1 0/0 .text stopSoundID__9JAISeqMgrF10JAISoundID */
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();
}
}
}
}
/* 802A1EFC-802A1F58 29C83C 005C+00 0/0 4/4 0/0 .text mixOut__9JAISeqMgrFv */
void JAISeqMgr::mixOut() {
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->JAISeqMgr_mixOut_(mMove.mParams, mActivity);
}
}
/* 802A1F58-802A1FE8 29C898 0090+00 1/1 0/0 0/0 .text beginStartSeq___9JAISeqMgrFv */
JAISeq* JAISeqMgr::beginStartSeq_() {
JAISeq* seq = new JAISeq(this, field_0x10);
if (seq == NULL) {
JUT_WARN(273, "JASPoolAllocObject::<JAISeq>::operator new failed .\n");
}
return seq;
}
/* 802A1FE8-802A20F0 29C928 0108+00 1/1 0/0 0/0 .text
* endStartSeq___9JAISeqMgrFP6JAISeqP14JAISoundHandle */
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;
}
/* 802A20F0-802A2184 29CA30 0094+00 1/0 0/0 0/0 .text __dt__9JAISeqMgrFv */
extern "C" void __dt__9JAISeqMgrFv() {
// asm JAISeqMgr::~JAISeqMgr() {
// NONMATCHING
}
+250
View File
@@ -0,0 +1,250 @@
//
// Generated By: dol2asm
// Translation Unit: JAISound
//
#include "JSystem/JAudio2/JAISound.h"
#include "JSystem/JAudio2/JAIAudience.h"
#include "JSystem/JAudio2/JAISoundHandles.h"
#include "JSystem/JAudio2/JASReport.h"
#include "JSystem/JAudio2/JASTrack.h"
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 802A2184-802A21A0 29CAC4 001C+00 0/0 14/14 0/0 .text releaseSound__14JAISoundHandleFv
*/
void JAISoundHandle::releaseSound() {
if (sound_ == NULL) {
return;
}
sound_->handle_ = NULL;
sound_ = NULL;
}
/* 802A21A0-802A21BC 29CAE0 001C+00 3/3 3/3 0/0 .text releaseHandle__8JAISoundFv */
void JAISound::releaseHandle() {
if (handle_ == NULL) {
return;
}
handle_->sound_ = NULL;
handle_ = NULL;
}
/* 802A21BC-802A2220 29CAFC 0064+00 0/0 3/3 0/0 .text attachHandle__8JAISoundFP14JAISoundHandle */
void JAISound::attachHandle(JAISoundHandle* handle) {
if (handle->isSoundAttached()) {
handle->getSound()->stop();
}
if (isHandleAttached()) {
releaseHandle();
}
handle_ = handle;
handle_->sound_ = this;
}
/* 802A2220-802A2244 29CB60 0024+00 0/0 2/2 0/0 .text lockWhenPrepared__15JAISoundStatus_Fv */
s32 JAISoundStatus_::lockWhenPrepared() {
if (state.unk == 0) {
state.unk = 1;
return 1;
}
return 0;
}
/* 802A2244-802A2280 29CB84 003C+00 0/0 2/2 0/0 .text unlockIfLocked__15JAISoundStatus_Fv
*/
s32 JAISoundStatus_::unlockIfLocked() {
if (state.unk == 3) {
state.unk = 4;
return 1;
}
if (state.unk == 1) {
state.unk = 0;
return 1;
}
return 0;
}
/* 802A2280-802A22F8 29CBC0 0078+00 0/0 4/4 0/0 .text
* mixOutAll__14JAISoundParamsFRC14JASSoundParamsP14JASSoundParamsf */
void JAISoundParams::mixOutAll(JASSoundParams const& param_0, JASSoundParams* param_1,
f32 param_2) {
param_1->mVolume = mMove.mParams.mVolume * (param_0.mVolume * mProperty.field_0x0) * param_2;
param_1->mFxMix = mMove.mParams.mFxMix + (param_0.mFxMix + mProperty.field_0x4);
param_1->mPitch = mMove.mParams.mPitch * (param_0.mPitch * mProperty.field_0x8);
param_1->mPan = (param_0.mPan + mMove.mParams.mPan) - 0.5f;
param_1->mDolby = param_0.mDolby + mMove.mParams.mDolby;
}
/* 802A22F8-802A2328 29CC38 0030+00 0/0 3/3 0/0 .text __ct__8JAISoundFv */
JAISound::JAISound() : params() {}
/* 802A2328-802A244C 29CC68 0124+00 0/0 3/3 0/0 .text
* start_JAISound___8JAISoundF10JAISoundIDPCQ29JGeometry8TVec3<f>P11JAIAudience */
void JAISound::start_JAISound_(JAISoundID param_0, JGeometry::TVec3<f32> const* param_1,
JAIAudience* param_2) {
handle_ = NULL;
soundID = param_0;
status_.init();
params.init();
fader.forceIn();
audience_ = param_2;
prepareCount = 0;
mCount = 0;
if (param_1 != 0 && audience_ != NULL) {
audible_ = audience_->newAudible(*param_1, soundID, NULL, 0);
} else {
audible_ = NULL;
}
mPriority = 0;
}
/* 802A244C-802A2474 29CD8C 0028+00 0/0 2/2 0/0 .text acceptsNewAudible__8JAISoundCFv */
bool JAISound::acceptsNewAudible() const {
bool accepts = false;
if (audible_ == NULL && status_.state.flags.flag2 == 0) {
accepts = true;
}
return accepts;
}
/* 802A2474-802A24DC 29CDB4 0068+00 0/0 2/2 0/0 .text
/* * newAudible__8JAISoundFRCQ29JGeometry8TVec3<f>PCQ29JGeometry8TVec3<f>UlP11JAIAudience */
void JAISound::newAudible(JGeometry::TVec3<f32> const& param_0,
JGeometry::TVec3<f32> const* param_1, u32 param_2, JAIAudience* param_3) {
if (param_3 != NULL) {
audience_ = param_3;
}
JAISoundID sound = soundID;
audible_ = audience_->newAudible(param_0, sound, param_1, param_2);
}
/* 802A24DC-802A2598 29CE1C 00BC+00 0/0 24/24 0/0 .text stop__8JAISoundFUl */
void JAISound::stop(u32 fadeCount) {
ASSERT(status_.isAlive());
if (fadeCount == 0) {
stop();
return;
} else {
fader.fadeOut(fadeCount);
removeLifeTime_();
status_.field_0x1.flags.flag2 = 0;
status_.state.flags.flag5 = 1;
status_.state.flags.flag1 = 1;
}
}
/* 802A2598-802A25D8 29CED8 0040+00 2/2 21/21 0/0 .text stop__8JAISoundFv */
void JAISound::stop() {
stop_JAISound_();
releaseHandle();
}
/* 802A25D8-802A25E0 29CF18 0008+00 1/0 2/0 0/0 .text asSe__8JAISoundFv */
JAISe* JAISound::asSe() {
return NULL;
}
/* 802A25E0-802A25E8 29CF20 0008+00 1/0 2/0 0/0 .text asSeq__8JAISoundFv */
JAISeq* JAISound::asSeq() {
return NULL;
}
/* 802A25E8-802A25F0 29CF28 0008+00 1/0 2/0 0/0 .text asStream__8JAISoundFv */
JAIStream* JAISound::asStream() {
return NULL;
}
/* 802A25F0-802A266C 29CF30 007C+00 0/0 3/3 0/0 .text die_JAISound___8JAISoundFv */
void JAISound::die_JAISound_() {
if (audible_ != NULL) {
audience_->deleteAudible(audible_);
audible_ = NULL;
audience_ = NULL;
}
fader.forceOut();
releaseHandle();
status_.state.unk = 6;
}
/* 802A266C-802A26B8 29CFAC 004C+00 0/0 3/3 0/0 .text increasePrepareCount_JAISound___8JAISoundFv
*/
void JAISound::increasePrepareCount_JAISound_() {
if ((++prepareCount & 0xFF) == 0) {
JASReport("It cost %d steps to prepare Sound(ID:%08x, Address%08x).\n", prepareCount,
(u32)soundID, this);
}
}
/* 802A26B8-802A29DC 29CFF8 0324+00 0/0 3/3 0/0 .text calc_JAISound___8JAISoundFv */
bool JAISound::calc_JAISound_() {
status_.state.flags.flag2 = 1;
if (isStopping() && JAISound_tryDie_()) {
return false;
}
ASSERT(status_.isAlive());
bool isPlaying = status_.isPlaying();
if (isPlaying) {
mCount++;
}
bool isPaused = status_.isPaused();
if (isPaused == false) {
fader.calc();
}
bool playing = isPlaying && isPaused == false;
if (playing) {
params.mMove.calc();
if (audible_ != NULL) {
audible_->calc();
}
if (status_.field_0x1.flags.flag2 != 0) {
if (lifeTime == 0) {
stop_JAISound_();
} else {
lifeTime--;
}
}
}
if (audience_ != NULL && audible_ != NULL) {
u32 priority = audience_->calcPriority(audible_);
mPriority = priority;
if (priority == 0xFFFFFFFF && status_.field_0x1.flags.flag1 == 0) {
stop_JAISound_();
}
} else {
mPriority = 0;
}
return playing;
}
/* 802A29DC-802A2AB0 29D31C 00D4+00 0/0 2/2 0/0 .text initTrack_JAISound___8JAISoundFP8JASTrack */
void JAISound::initTrack_JAISound_(JASTrack* track) {
JASSoundParams* soundParams[8];
ASSERT(audience_);
ASSERT(audible_);
int numChannels = 0;
for (int i = 0; i < audience_->getMaxChannels(); i++) {
JASSoundParams* currentParams = audible_->getOuterParams(i);
if (currentParams != NULL) {
soundParams[numChannels] = currentParams;
numChannels++;
}
}
ASSERT(numChannels >= 1);
track->setChannelMgrCount(numChannels);
for (size_t i = 0; i < track->getChannelMgrCount(); i++) {
track->assignExtBuffer(i, soundParams[i]);
}
}
+16
View File
@@ -0,0 +1,16 @@
#include "JSystem/JAudio2/JAISoundChild.h"
#include "JSystem/JAudio2/JASTrack.h"
void JAISoundChild::init() {
mMove.init();
mParams.init();
}
void JAISoundChild::mixOut(JASTrack* pTrack) {
mParams = mMove.mParams;
pTrack->assignExtBuffer(0, &mParams);
}
void JAISoundChild::calc() {
mMove.calc();
}
+38
View File
@@ -0,0 +1,38 @@
//
// Generated By: dol2asm
// Translation Unit: JAISoundHandles
//
#include "JSystem/JAudio2/JAISoundHandles.h"
//
// Forward References:
//
//
// Declarations:
//
/* 802A2C98-802A2CF4 29D5D8 005C+00 0/0 1/1 0/0 .text
* getHandleSoundID__15JAISoundHandlesF10JAISoundID */
JAISoundHandle* JAISoundHandles::getHandleSoundID(JAISoundID param_0) {
for (int i = 0; i < numHandles_; i++) {
if (mSoundHandle[i].isSoundAttached()) {
if (JAISoundID(mSoundHandle[i]->soundID) == param_0) {
return &mSoundHandle[i];
}
}
}
return NULL;
}
/* 802A2CF4-802A2D34 29D634 0040+00 0/0 2/2 0/0 .text getFreeHandle__15JAISoundHandlesFv
*/
JAISoundHandle* JAISoundHandles::getFreeHandle() {
for (int i = 0; i < numHandles_; i++) {
if (!mSoundHandle[i].isSoundAttached()) {
return &mSoundHandle[i];
}
}
return NULL;
}
+28
View File
@@ -0,0 +1,28 @@
//
// Generated By: dol2asm
// Translation Unit: JAISoundInfo
//
#include "JSystem/JAudio2/JAISoundInfo.h"
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* ############################################################################################## */
/* 802A2D34-802A2D50 29D674 001C+00 0/0 1/1 0/0 .text __ct__12JAISoundInfoFb */
JAISoundInfo::JAISoundInfo(bool param_0) : JASGlobalInstance<JAISoundInfo>(param_0) {
}
/* 802A2D50-802A2DB4 29D690 0064+00 1/0 2/2 0/0 .text __dt__12JAISoundInfoFv */
JAISoundInfo::~JAISoundInfo() {
}
+46
View File
@@ -0,0 +1,46 @@
#include "JSystem/JAudio2/JAISoundParams.h"
void JAISoundParamsMove::moveVolume(f32 newValue, u32 count) {
if (count == 0) {
mParams.mVolume = newValue;
mTransition.mVolume.mCount = 0;
} else {
mTransition.mVolume.set(newValue, mParams.mVolume, count);
}
}
void JAISoundParamsMove::movePitch(f32 newValue, u32 count) {
if (count == 0) {
mParams.mPitch = newValue;
mTransition.mPitch.mCount = 0;
} else {
mTransition.mPitch.set(newValue, mParams.mPitch, count);
}
}
void JAISoundParamsMove::moveFxMix(f32 newValue, u32 count) {
if (count == 0) {
mParams.mFxMix = newValue;
mTransition.mFxMix.mCount = 0;
} else {
mTransition.mFxMix.set(newValue, mParams.mFxMix, count);
}
}
void JAISoundParamsMove::movePan(f32 newValue, u32 count) {
if (count == 0) {
mParams.mPan = newValue;
mTransition.mPan.mCount = 0;
} else {
mTransition.mPan.set(newValue, mParams.mPan, count);
}
}
void JAISoundParamsMove::moveDolby(f32 newValue, u32 count) {
if (count == 0) {
mParams.mDolby = newValue;
mTransition.mDolby.mCount = 0;
} else {
mTransition.mDolby.set(newValue, mParams.mDolby, count);
}
}
+35
View File
@@ -0,0 +1,35 @@
//
// JAISoundStarter
//
#include "JSystem/JAudio2/JAISoundStarter.h"
#include "JSystem/JAudio2/JAISoundHandles.h"
/* 802A2F6C-802A2F88 29D8AC 001C+00 0/0 1/1 0/0 .text __ct__15JAISoundStarterFb */
JAISoundStarter::JAISoundStarter(bool param_0) : JASGlobalInstance<JAISoundStarter>(param_0) {
}
/* 802A2F88-802A2FEC 29D8C8 0064+00 1/0 7/7 0/0 .text __dt__15JAISoundStarterFv */
JAISoundStarter::~JAISoundStarter() {
}
/* 802A2FEC-802A30D4 29D92C 00E8+00 0/0 4/4 0/0 .text
* startLevelSound__15JAISoundStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
bool JAISoundStarter::startLevelSound(JAISoundID param_0, JAISoundHandle* param_1,
JGeometry::TVec3<f32> const* param_2) {
if (*param_1) {
if (JAISoundID((u32)(*param_1)->soundID) == param_0) {
(*param_1)->updateLifeTime(1);
if (param_2 != NULL) {
(*param_1)->setPos(*param_2);
}
return true;
}
}
bool iVar2 = startSound(param_0, param_1, param_2);
if ((iVar2) && *param_1) {
(*param_1)->setLifeTime(1, false);
}
return iVar2;
}
+386
View File
@@ -0,0 +1,386 @@
//
// Generated By: dol2asm
// Translation Unit: JAIStream
//
#include "JSystem/JAudio2/JAIStream.h"
#include "JSystem/JAudio2/JAIStreamMgr.h"
#include "JSystem/JAudio2/JAISoundChild.h"
#include "JSystem/JAudio2/JAIStreamDataMgr.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JAudio2/JAIAudience.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" static void JAIStream_JASAramStreamCallback___FUlP13JASAramStreamPv();
extern "C" void func_802A3104();
extern "C" void func_802A319C();
extern "C" void prepare_prepareStream___9JAIStreamFv();
extern "C" void prepare___9JAIStreamFv();
extern "C" void prepare_startStream___9JAIStreamFv();
extern "C" void JAIStreamMgr_mixOut___9JAIStreamFRC14JASSoundParams16JAISoundActivity();
extern "C" void die_JAIStream___9JAIStreamFv();
extern "C" void JAISound_tryDie___9JAIStreamFv();
extern "C" void JAIStreamMgr_calc___9JAIStreamFv();
extern "C" s32 getNumChild__9JAIStreamCFv();
extern "C" void getChild__9JAIStreamFi();
extern "C" void releaseChild__9JAIStreamFi();
extern "C" bool getTrack__9JAIStreamFv();
extern "C" bool getChildTrack__9JAIStreamFi();
extern "C" void asStream__9JAIStreamFv();
extern "C" bool getTempoMgr__9JAIStreamFv();
//
// External References:
//
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void free__17JASGenericMemPoolFPvUl();
extern "C" void __ct__13JASAramStreamFv();
extern "C" void init__13JASAramStreamFUlUlPFUlP13JASAramStreamPv_vPv();
extern "C" void prepare__13JASAramStreamFli();
extern "C" void start__13JASAramStreamFv();
extern "C" void stop__13JASAramStreamFUs();
extern "C" void pause__13JASAramStreamFb();
extern "C" void cancel__13JASAramStreamFv();
extern "C" void func_802A1268(void* _this);
extern "C" void mixOutAll__14JAISoundParamsFRC14JASSoundParamsP14JASSoundParamsf();
extern "C" void __ct__8JAISoundFv();
extern "C" void func_802A2328();
extern "C" bool asSe__8JAISoundFv();
extern "C" bool asSeq__8JAISoundFv();
extern "C" void die_JAISound___8JAISoundFv();
extern "C" void increasePrepareCount_JAISound___8JAISoundFv();
extern "C" void calc_JAISound___8JAISoundFv();
extern "C" void init__13JAISoundChildFv();
extern "C" void calc__13JAISoundChildFv();
extern "C" void __ct__10JSUPtrLinkFPv();
extern "C" void __register_global_object();
extern "C" void _savegpr_27();
extern "C" void _savegpr_29();
extern "C" void _restgpr_27();
extern "C" void _restgpr_29();
extern "C" extern u8 data_804340B0[16];
extern "C" extern u8 data_80451318[8];
/* 802A30D4-802A3104 29DA14 0030+00 1/1 0/0 0/0 .text
* JAIStream_JASAramStreamCallback___FUlP13JASAramStreamPv */
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;
}
}
/* 802A3104-802A319C 29DA44 0098+00 0/0 1/1 0/0 .text
* __ct__9JAIStreamFP12JAIStreamMgrP31JAISoundStrategyMgr<9JAIStream> */
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;
}
}
/* 802A319C-802A3230 29DADC 0094+00 0/0 1/1 0/0 .text
* JAIStreamMgr_startID___9JAIStreamF10JAISoundIDlPCQ29JGeometry8TVec3<f>P11JAIAudiencei */
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;
}
}
/* 802A3230-802A33F4 29DB70 01C4+00 1/1 0/0 0/0 .text prepare_prepareStream___9JAIStreamFv */
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;
}
/* 802A33F4-802A3498 29DD34 00A4+00 1/1 0/0 0/0 .text prepare___9JAIStreamFv */
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;
}
}
/* 802A3498-802A34E4 29DDD8 004C+00 1/1 0/0 0/0 .text prepare_startStream___9JAIStreamFv
*/
void JAIStream::prepare_startStream_() {
if (field_0x0a8.field_0x0.start()) {
field_0x2c6 = 0;
field_0x2c4 = 0;
field_0x290 = 4;
}
}
/* ############################################################################################## */
/* 804557F0-804557F4 003DF0 0004+00 2/2 0/0 0/0 .sdata2 @864 */
SECTION_SDATA2 static f32 lit_864 = 1.0f;
/* 804557F4-804557F8 003DF4 0004+00 2/2 0/0 0/0 .sdata2 @865 */
SECTION_SDATA2 static u8 lit_865[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 804557F8-80455800 003DF8 0004+04 2/2 0/0 0/0 .sdata2 @866 */
SECTION_SDATA2 static f32 lit_866[1 + 1 /* padding */] = {
0.5f,
/* padding */
0.0f,
};
/* 802A34E4-802A3720 29DE24 023C+00 0/0 1/1 0/0 .text
* JAIStreamMgr_mixOut___9JAIStreamFRC14JASSoundParams16JAISoundActivity */
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;
}
}
}
/* ############################################################################################## */
/* 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 */
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;
}
}
/* 802A37FC-802A388C 29E13C 0090+00 1/0 0/0 0/0 .text JAISound_tryDie___9JAIStreamFv */
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;
}
/* 802A388C-802A3948 29E1CC 00BC+00 0/0 1/1 0/0 .text JAIStreamMgr_calc___9JAIStreamFv */
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);
}
}
}
/* 802A3948-802A3950 29E288 0008+00 1/0 0/0 0/0 .text getNumChild__9JAIStreamCFv */
s32 JAIStream::getNumChild() const {
return 6;
}
/* 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
JAISoundChild* JAIStream::getChild(int param_0) {
// NONMATCHING
}
#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
void JAIStream::releaseChild(int param_0) {
// NONMATCHING
}
#endif
/* 802A3ABC-802A3AC4 29E3FC 0008+00 1/0 0/0 0/0 .text getTrack__9JAIStreamFv */
JASTrack* JAIStream::getTrack() {
return NULL;
}
/* 802A3AC4-802A3ACC 29E404 0008+00 1/0 0/0 0/0 .text getChildTrack__9JAIStreamFi */
JASTrack* JAIStream::getChildTrack(int param_0) {
return NULL;
}
/* 802A3ACC-802A3AD0 29E40C 0004+00 1/0 0/0 0/0 .text asStream__9JAIStreamFv */
JAIStream* JAIStream::asStream() {
return this;
}
/* 802A3AD0-802A3AD8 29E410 0008+00 1/0 0/0 0/0 .text getTempoMgr__9JAIStreamFv */
JAITempoMgr* JAIStream::getTempoMgr() {
return NULL;
}
+5
View File
@@ -0,0 +1,5 @@
#include "JSystem/JAudio2/JAIStreamDataMgr.h"
JAIStreamDataMgr::~JAIStreamDataMgr() {}
JAIStreamAramMgr::~JAIStreamAramMgr() {}
+217
View File
@@ -0,0 +1,217 @@
//
// Generated By: dol2asm
// Translation Unit: JAIStreamMgr
//
#include "JSystem/JAudio2/JAIStreamMgr.h"
#include "JSystem/JAudio2/JAISoundHandles.h"
#include "JSystem/JAudio2/JAIStreamDataMgr.h"
#include "JSystem/JAudio2/JAISoundInfo.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void __ct__12JAIStreamMgrFb();
extern "C" void func_802A3C3C();
extern "C" void freeDeadStream___12JAIStreamMgrFv();
extern "C" void func_802A3E68(void* _this);
extern "C" void calc__12JAIStreamMgrFv();
extern "C" void stop__12JAIStreamMgrFv();
extern "C" void stop__12JAIStreamMgrFUl();
extern "C" void stopSoundID__12JAIStreamMgrF10JAISoundID();
extern "C" void mixOut__12JAIStreamMgrFv();
extern "C" void newStream___12JAIStreamMgrFv();
//
// External References:
//
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void __dt__17JASGenericMemPoolFv();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void free__17JASGenericMemPoolFPvUl();
extern "C" void attachHandle__8JAISoundFP14JAISoundHandle();
extern "C" void stop__8JAISoundFUl();
extern "C" void stop__8JAISoundFv();
extern "C" void func_802A3104();
extern "C" void func_802A319C();
extern "C" void JAIStreamMgr_mixOut___9JAIStreamFRC14JASSoundParams16JAISoundActivity();
extern "C" void JAIStreamMgr_calc___9JAIStreamFv();
extern "C" void __dl__FPv();
extern "C" void __dt__10JSUPtrLinkFv();
extern "C" void initiate__10JSUPtrListFv();
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
extern "C" void __register_global_object();
extern "C" void _savegpr_25();
extern "C" void _savegpr_29();
extern "C" void _restgpr_25();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__9JAIStream[12];
extern "C" extern u8 data_80450B5C[4];
extern "C" extern u8 data_80451328[8];
extern "C" extern u8 __OSReport_disable;
//
// Declarations:
//
/* ############################################################################################## */
/* 80455800-80455804 003E00 0004+00 1/1 0/0 0/0 .sdata2 @653 */
SECTION_SDATA2 static f32 lit_653 = 1.0f;
/* 80455804-80455808 003E04 0004+00 1/1 0/0 0/0 .sdata2 @654 */
SECTION_SDATA2 static u8 lit_654[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 80455808-80455810 003E08 0004+04 1/1 0/0 0/0 .sdata2 @655 */
SECTION_SDATA2 static f32 lit_655[1 + 1 /* padding */] = {
0.5f,
/* padding */
0.0f,
};
/* 802A3B68-802A3C3C 29E4A8 00D4+00 0/0 1/1 0/0 .text __ct__12JAIStreamMgrFb */
JAIStreamMgr::JAIStreamMgr(bool param_0) : JASGlobalInstance<JAIStreamMgr>(param_0) {
streamDataMgr_ = NULL;
mStreamAramMgr = NULL;
field_0x6c = NULL;
field_0x54 = NULL;
mParams.init();
mActivity.init();
}
/* 802A3C3C-802A3D70 29E57C 0134+00 0/0 1/1 0/0 .text
* startSound__12JAIStreamMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
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;
}
/* ############################################################################################## */
/* 804340F0-804340FC 060E10 000C+00 2/2 0/0 0/0 .bss @745 */
static u8 lit_745[12];
/* 804340FC-80434110 060E1C 0010+04 2/2 1/1 0/0 .bss
* memPool_$localstatic3$getMemPool___30JASPoolAllocObject<9JAIStream>Fv */
extern u8 data_804340FC[16 + 4 /* padding */];
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
void JAIStreamMgr::freeDeadStream_() {
// NONMATCHING
}
#endif
/* 802A3E68-802A3EBC 29E7A8 0054+00 2/2 1/1 0/0 .text __dt__22JASMemPool<9JAIStream>Fv */
extern "C" void func_802A3E68(void* _this) {
// NONMATCHING
}
/* 802A3EBC-802A4028 29E7FC 016C+00 0/0 1/1 0/0 .text calc__12JAIStreamMgrFv */
void JAIStreamMgr::calc() {
mParams.calc();
for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->JAIStreamMgr_calc_();
}
freeDeadStream_();
}
/* 802A4028-802A4068 29E968 0040+00 0/0 1/1 0/0 .text stop__12JAIStreamMgrFv */
void JAIStreamMgr::stop() {
for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop();
}
}
/* 802A4068-802A40B8 29E9A8 0050+00 0/0 2/2 0/0 .text stop__12JAIStreamMgrFUl */
void JAIStreamMgr::stop(u32 param_0) {
for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop(param_0);
}
}
/* 802A40B8-802A4118 29E9F8 0060+00 0/0 1/1 0/0 .text stopSoundID__12JAIStreamMgrF10JAISoundID */
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();
}
}
}
/* 802A4118-802A4174 29EA58 005C+00 0/0 1/1 0/0 .text mixOut__12JAIStreamMgrFv */
void JAIStreamMgr::mixOut() {
for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->JAIStreamMgr_mixOut_(mParams.mParams, mActivity);
}
}
/* 802A4174-802A4244 29EAB4 00D0+00 1/1 0/0 0/0 .text newStream___12JAIStreamMgrFv */
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;
}
+479
View File
@@ -0,0 +1,479 @@
//
// Generated By: dol2asm
// Translation Unit: JASAiCtrl
//
#include "JSystem/JAudio2/JASAiCtrl.h"
#include "JSystem/JAudio2/JASAudioThread.h"
#include "JSystem/JAudio2/JASCalc.h"
#include "JSystem/JAudio2/JASCriticalSection.h"
#include "JSystem/JAudio2/JASDSPInterface.h"
#include "JSystem/JAudio2/JASHeapCtrl.h"
#include "JSystem/JAudio2/JASProbe.h"
#include "JSystem/JAudio2/JASReport.h"
#include "JSystem/JAudio2/JASLfo.h"
#include "dol2asm.h"
#include "dolphin/ai.h"
#include "dolphin/os/OSCache.h"
#include "dolphin/os/OSTime.h"
//
// Types:
//
struct JASPortCmd {
/* 80291060 */ static void execAllCommand();
};
struct JASDSPChannel {
/* 8029D89C */ static void updateAll();
/* 8029D910 */ static void killActiveChannel();
};
struct JASChannel {
/* 8029BC0C */ static void initBankDisposeMsgQueue();
/* 8029BC48 */ static void receiveBankDisposeMsg();
};
//
// Forward References:
//
extern "C" void initAI__9JASDriverFPFv_v();
extern "C" void startDMA__9JASDriverFv();
extern "C" void stopDMA__9JASDriverFv();
extern "C" void setOutputRate__9JASDriverF13JASOutputRate();
extern "C" void updateDac__9JASDriverFv();
extern "C" void updateDSP__9JASDriverFv();
extern "C" void readDspBuffer__9JASDriverFPsUl();
extern "C" void finishDSPFrame__9JASDriverFv();
extern "C" void registerMixCallback__9JASDriverFPFl_Ps10JASMixMode();
extern "C" void getDacRate__9JASDriverFv();
extern "C" u32 getSubFrames__9JASDriverFv();
extern "C" void getDacSize__9JASDriverFv();
extern "C" void getFrameSamples__9JASDriverFv();
extern "C" void mixMonoTrack(s16*, u32, s16* (*)(s32));
extern "C" void mixMonoTrackWide(s16*, u32, s16* (*)(s32));
extern "C" void mixExtraTrack(s16*, u32, s16* (*)(s32));
extern "C" void mixInterleaveTrack(s16*, u32, s16* (*)(s32));
extern "C" u32 getSubFrameCounter__9JASDriverFv();
extern "C" void* const sMixFuncs__9JASDriver[4];
extern "C" extern char const* const JASAiCtrl__stringBase0;
extern "C" u8 sDmaDacBuffer__9JASDriver[12 + 4 /* padding */];
extern "C" u32 sMixMode__9JASDriver;
extern "C" f32 sDacRate__9JASDriver;
extern "C" u32 sSubFrames__9JASDriver;
extern "C" u8 sDspDacBuffer__9JASDriver[4];
extern "C" u8 sDspDacWriteBuffer__9JASDriver[4];
extern "C" u8 sDspDacReadBuffer__9JASDriver[4];
extern "C" u8 sDspStatus__9JASDriver[4];
extern "C" u8 sDspDacCallback__9JASDriver[4];
extern "C" u8 lastRspMadep__9JASDriver[4];
extern "C" u8 dacCallbackFunc__9JASDriver[4];
extern "C" u8 extMixCallback__9JASDriver[4];
extern "C" u8 sOutputRate__9JASDriver[4];
extern "C" u8 sSubFrameCounter__9JASDriver[4];
//
// External References:
//
extern "C" void imixcopy__7JASCalcFPCsPCsPsUl();
extern "C" void bzero__7JASCalcFPvUl();
extern "C" void func_8028F69C(void* _this, s32);
extern "C" void start__8JASProbeFlPCc();
extern "C" void stop__8JASProbeFl();
extern "C" void JASReport__FPCce();
extern "C" void execAllCommand__10JASPortCmdFv();
extern "C" void initBankDisposeMsgQueue__10JASChannelFv();
extern "C" void receiveBankDisposeMsg__10JASChannelFv();
extern "C" void incCounter__6JASLfoFf();
extern "C" void updateAll__13JASDSPChannelFv();
extern "C" void killActiveChannel__13JASDSPChannelFv();
extern "C" void syncFrame__6JASDspFUlUlUl();
extern "C" void invalChannelAll__6JASDspFv();
extern "C" void subframeCallback__9JASDriverFv();
extern "C" void DSPSyncCallback__9JASDriverFv();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void _savegpr_25();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_25();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" u8 sFreeRunLfo__6JASLfo[24];
extern "C" u8 snIntCount__14JASAudioThread[4 + 4 /* padding */];
//
// Declarations:
//
/* ############################################################################################## */
/* 80431C58-80431C68 05E978 000C+04 2/2 0/0 0/0 .bss sDmaDacBuffer__9JASDriver */
s16* JASDriver::sDmaDacBuffer[3];
/* 804507A8-804507AC 000228 0004+00 3/3 0/0 0/0 .sdata None */
SECTION_SDATA static u8 data_804507A8 = 3;
/* 804512A0-804512A4 0007A0 0004+00 3/3 0/0 0/0 .sbss sDspDacBuffer__9JASDriver */
s16** JASDriver::sDspDacBuffer;
/* 804512A4-804512A8 0007A4 0004+00 3/3 0/0 0/0 .sbss sDspDacWriteBuffer__9JASDriver */
s32 JASDriver::sDspDacWriteBuffer;
/* 804512A8-804512AC 0007A8 0004+00 3/3 0/0 0/0 .sbss sDspDacReadBuffer__9JASDriver */
s32 JASDriver::sDspDacReadBuffer;
/* 804512AC-804512B0 0007AC 0004+00 3/3 0/0 0/0 .sbss sDspStatus__9JASDriver */
s32 JASDriver::sDspStatus;
/* 804512B0-804512B4 0007B0 0004+00 1/1 0/0 0/0 .sbss sDspDacCallback__9JASDriver */
void (*JASDriver::sDspDacCallback)(s16*, u32);
/* 804512B4-804512B8 0007B4 0004+00 1/1 0/0 0/0 .sbss lastRspMadep__9JASDriver */
s16* JASDriver::lastRspMadep;
/* 804512B8-804512BC 0007B8 0004+00 1/1 0/0 0/0 .sbss dacCallbackFunc__9JASDriver */
void (*JASDriver::dacCallbackFunc)(s16*, u32);
/* 804512BC-804512C0 0007BC 0004+00 2/2 0/0 0/0 .sbss extMixCallback__9JASDriver */
JASDriver::MixCallback JASDriver::extMixCallback;
/* 804512C0-804512C4 0007C0 0004+00 2/2 0/0 0/0 .sbss sOutputRate__9JASDriver */
u32 JASDriver::sOutputRate;
/* 8029C388-8029C4E4 296CC8 015C+00 0/0 1/1 0/0 .text initAI__9JASDriverFPFv_v */
// missing instructions
#ifdef NONMATCHING
void JASDriver::initAI(void (*param_0)(void)) {
setOutputRate(OUTPUT_RATE_0);
u32 size = getDacSize() * 2;
for (int i = 0; i < 3; i++) {
sDmaDacBuffer[i] = new(JASDram, 0x20) s16[size / 2];
JASCalc::bzero(sDmaDacBuffer[i], size);
DCStoreRange(sDmaDacBuffer[i], size);
}
sDspDacBuffer = new(JASDram, 0) s16*[data_804507A8];
for (int i = 0; i < data_804507A8; i++) {
sDspDacBuffer[i] = new(JASDram, 0x20) s16[getDacSize()];
JASCalc::bzero(sDspDacBuffer[i], size);
DCStoreRange(sDspDacBuffer[i], size);
}
sDspDacWriteBuffer = data_804507A8 - 1;
sDspDacReadBuffer = 0;
sDspStatus = 0;
JASChannel::initBankDisposeMsgQueue();
AIInit(NULL);
AIInitDMA((u32)sDmaDacBuffer[2], size);
AISetDSPSampleRate(sOutputRate != 0);
AIRegisterDMACallback(param_0);
}
#else
void JASDriver::initAI(void (*param_0)(void)) {
// NONMATCHING
}
#endif
/* 8029C4E4-8029C504 296E24 0020+00 0/0 1/1 0/0 .text startDMA__9JASDriverFv */
void JASDriver::startDMA() {
AIStartDMA();
}
/* 8029C504-8029C524 296E44 0020+00 0/0 1/1 0/0 .text stopDMA__9JASDriverFv */
void JASDriver::stopDMA() {
AIStopDMA();
}
/* ############################################################################################## */
/* 804507AC-804507B0 00022C 0004+00 2/2 0/0 0/0 .sdata sMixMode__9JASDriver */
SECTION_SDATA JASMixMode JASDriver::sMixMode = MIX_MODE_EXTRA;
/* 804507B0-804507B4 000230 0004+00 2/2 0/0 0/0 .sdata sDacRate__9JASDriver */
SECTION_SDATA f32 JASDriver::sDacRate = 32028.5f;
/* 804507B4-804507B8 000234 0004+00 4/3 0/0 0/0 .sdata sSubFrames__9JASDriver */
SECTION_SDATA u32 JASDriver::sSubFrames = 0x00000007;
/* 80455720-80455724 003D20 0004+00 1/1 0/0 0/0 .sdata2 @233 */
SECTION_SDATA2 static f32 lit_233 = 32000.0f;
/* 80455724-80455728 003D24 0004+00 1/1 0/0 0/0 .sdata2 @234 */
SECTION_SDATA2 static f32 lit_234 = 48000.0f;
/* 80455728-8045572C 003D28 0004+00 1/1 0/0 0/0 .sdata2 @235 */
SECTION_SDATA2 static f32 lit_235 = 1.0008896589279175f;
/* 8029C524-8029C568 296E64 0044+00 1/1 0/0 0/0 .text setOutputRate__9JASDriverF13JASOutputRate */
void JASDriver::setOutputRate(JASOutputRate param_0) {
sOutputRate = param_0;
if (param_0 == 0) {
sSubFrames = 7;
sDacRate = 32000.0f;
} else {
sSubFrames = 10;
sDacRate = 48000.0f;
}
sDacRate *= 1.00089f;
}
/* ############################################################################################## */
/* 8039B2E0-8039B2F0 -00001 0010+00 1/1 0/0 0/0 .rodata sMixFuncs__9JASDriver */
SECTION_RODATA const JASDriver::MixFunc JASDriver::sMixFuncs[4] = {
mixMonoTrack,
mixMonoTrackWide,
mixExtraTrack,
mixInterleaveTrack,
};
COMPILER_STRIP_GATE(0x8039B2E0, &JASDriver::sMixFuncs);
/* 804512C4-804512C8 0007C4 0004+00 2/1 0/0 0/0 .sbss sSubFrameCounter__9JASDriver */
u32 JASDriver::sSubFrameCounter;
/* 8029C568-8029C6C4 296EA8 015C+00 0/0 1/1 0/0 .text updateDac__9JASDriverFv */
void JASDriver::updateDac() {
static u32 dacp = 0;
s16* r30 = lastRspMadep;
lastRspMadep = NULL;
if (r30) {
AIInitDMA((u32)r30, getDacSize() * 2);
}
s32 frameSamples = getFrameSamples();
readDspBuffer(sDmaDacBuffer[dacp], frameSamples);
if (sDspStatus == 0) {
finishDSPFrame();
}
if (extMixCallback) {
sMixFuncs[sMixMode](sDmaDacBuffer[dacp], frameSamples, extMixCallback);
}
{
JASCriticalSection cs;
DCStoreRange(sDmaDacBuffer[dacp], getDacSize() * 2);
}
lastRspMadep = sDmaDacBuffer[dacp];
dacp++;
if (dacp >= 3) {
dacp = 0;
}
if (dacCallbackFunc) {
dacCallbackFunc(lastRspMadep, getFrameSamples());
}
}
/* ############################################################################################## */
/* 8039B2F0-8039B2F0 027950 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8039B2F0 = "SFR-UPDATE";
SECTION_DEAD static char const* const stringBase_8039B2FB = "kill DSP channel";
#pragma pop
/* 803C78B8-803C78E0 0249D8 0028+00 1/1 0/0 0/0 .data history$267 */
SECTION_DATA static u32 history[10] = {
0x000F4240,
};
/* 804512D0-804512D4 0007D0 0004+00 1/1 0/0 0/0 .sbss old_time$264 */
static u32 old_time;
/* 804512D4-804512D8 0007D4 0004+00 1/1 0/0 0/0 .sbss None */
static u8 data_804512D4[4];
/* 8045572C-80455730 003D2C 0004+00 1/1 0/0 0/0 .sdata2 @275 */
SECTION_SDATA2 static f32 lit_275 = 11.0f / 10.0f;
/* 80455730-80455738 003D30 0004+04 1/1 0/0 0/0 .sdata2 @276 */
SECTION_SDATA2 static f32 lit_276[1 + 1 /* padding */] = {
32028.5f,
/* padding */
0.0f,
};
/* 80455738-80455740 003D38 0008+00 1/1 0/0 0/0 .sdata2 @278 */
SECTION_SDATA2 static f64 lit_278 = 4503599627370496.0 /* cast u32 to float */;
/* 8029C6C4-8029C7E0 297004 011C+00 1/1 1/1 0/0 .text updateDSP__9JASDriverFv */
void JASDriver::updateDSP() {
JASProbe::start(3, "SFR-UPDATE");
JASDsp::invalChannelAll();
JASPortCmd::execAllCommand();
DSPSyncCallback();
static u32 old_time = 0;
u32 r28 = OSGetTick();
u32 r27 = r28 - old_time;
old_time = r28;
u32 subFrame = getSubFrames();
int r26 = JASAudioThread::getDSPSyncCount();
history[subFrame - r26] = r27;
if (subFrame != r26 && f32(history[0]) / r27 < 1.1f) {
JASReport("kill DSP channel");
JASDSPChannel::killActiveChannel();
}
JASChannel::receiveBankDisposeMsg();
JASDSPChannel::updateAll();
subframeCallback();
JASLfo::updateFreeRun(32028.5f / getDacRate());
JASProbe::stop(3);
sSubFrameCounter++;
}
/* 8029C7E0-8029C900 297120 0120+00 1/1 0/0 0/0 .text readDspBuffer__9JASDriverFPsUl */
// missing instruction
#ifdef NONMATCHING
void JASDriver::readDspBuffer(s16* param_0, u32 param_1) {
s32 r29 = sDspDacReadBuffer + 1;
if (r29 == data_804507A8) {
r29 = 0;
}
if (r29 == sDspDacWriteBuffer && data_804507A8 >= 3) {
s16 r25 = sDspDacBuffer[sDspDacReadBuffer][param_1 / 2 - 1];
s16 r24 = sDspDacBuffer[sDspDacReadBuffer][param_1 - 1];
for (int i = 0; i < param_1; i++) {
sDspDacBuffer[sDspDacReadBuffer][i] = r25;
}
for (int i = param_1; i < param_1 * 2; i++) {
sDspDacBuffer[sDspDacReadBuffer][i] = r24;
}
} else {
sDspDacReadBuffer = r29;
DCInvalidateRange(sDspDacBuffer[r29], param_1 * 4);
}
JASCalc::imixcopy(sDspDacBuffer[sDspDacReadBuffer] + param_1, sDspDacBuffer[sDspDacReadBuffer], param_0, param_1);
}
#else
void JASDriver::readDspBuffer(s16* param_0, u32 param_1) {
// NONMATCHING
}
#endif
/* 8029C900-8029C9DC 297240 00DC+00 1/1 1/1 0/0 .text finishDSPFrame__9JASDriverFv */
void JASDriver::finishDSPFrame() {
int r30 = sDspDacWriteBuffer + 1;
if (r30 == data_804507A8) {
r30 = 0;
}
if (r30 == sDspDacReadBuffer) {
sDspStatus = 0;
return;
}
sDspDacWriteBuffer = r30;
JASAudioThread::setDSPSyncCount(getSubFrames());
JASProbe::start(7, "DSP-MAIN");
u32 r27 = getFrameSamples();
JASDsp::syncFrame(getSubFrames(), u32(sDspDacBuffer[sDspDacWriteBuffer]), u32(sDspDacBuffer[sDspDacWriteBuffer] + r27));
sDspStatus = 1;
updateDSP();
if (sDspDacCallback) {
sDspDacCallback(sDspDacBuffer[sDspDacWriteBuffer], r27);
}
}
/* 8029C9DC-8029C9E8 29731C 000C+00 0/0 0/0 2/2 .text
* registerMixCallback__9JASDriverFPFl_Ps10JASMixMode */
void JASDriver::registerMixCallback(MixCallback param_0, JASMixMode param_1) {
extMixCallback = param_0;
sMixMode = param_1;
}
/* 8029C9E8-8029C9F0 297328 0008+00 1/1 5/5 0/0 .text getDacRate__9JASDriverFv */
f32 JASDriver::getDacRate() {
return sDacRate;
}
/* 8029C9F0-8029C9F8 -00001 0008+00 0/0 0/0 0/0 .text getSubFrames__9JASDriverFv */
u32 JASDriver::getSubFrames() {
return sSubFrames;
}
/* 8029C9F8-8029CA04 297338 000C+00 2/2 0/0 0/0 .text getDacSize__9JASDriverFv */
u32 JASDriver::getDacSize() {
return sSubFrames * 0xa0;
}
/* 8029CA04-8029CA10 297344 000C+00 3/3 0/0 0/0 .text getFrameSamples__9JASDriverFv */
u32 JASDriver::getFrameSamples() {
return sSubFrames * 0x50;
}
/* 8029CA10-8029CAC0 297350 00B0+00 1/0 0/0 0/0 .text mixMonoTrack__9JASDriverFPsUlPFl_Ps
*/
void JASDriver::mixMonoTrack(s16* buffer, u32 param_1, MixCallback param_2) {
JASProbe::start(5, "MONO-MIX");
s16* r31 = param_2(param_1);
s16* pTrack = buffer;
if (r31 == NULL) {
return;
}
JASProbe::stop(5);
for (u32 i = param_1; i != 0; i--) {
pTrack[0] = JASCalc::clamp<s16, s32>(pTrack[0] + r31[0]);
pTrack[1] = JASCalc::clamp<s16, s32>(pTrack[1] + r31[0]);
pTrack += 2;
r31++;
}
}
/* 8029CAC0-8029CB70 297400 00B0+00 1/0 0/0 0/0 .text mixMonoTrackWide__9JASDriverFPsUlPFl_Ps */
void JASDriver::mixMonoTrackWide(s16* buffer, u32 param_1, MixCallback param_2) {
JASProbe::start(5, "MONO(W)-MIX");
s16* r31 = param_2(param_1);
s16* pTrack = buffer;
if (!r31) {
return;
}
JASProbe::stop(5);
for (u32 i = param_1; i != 0; i--) {
pTrack[0] = JASCalc::clamp<s16, s32>(pTrack[0] + r31[0]);
s32 src = pTrack[1];
src -= r31[0];
pTrack[1] = JASCalc::clamp<s16, s32>(src);
pTrack += 2;
r31++;
}
}
/* 8029CB70-8029CC50 2974B0 00E0+00 1/0 0/0 0/0 .text mixExtraTrack__9JASDriverFPsUlPFl_Ps */
void JASDriver::mixExtraTrack(s16* buffer, u32 param_1, MixCallback param_2) {
JASProbe::start(5, "DSPMIX");
s16* r31 = param_2(param_1);
if (!r31) {
return;
}
JASProbe::stop(5);
JASProbe::start(6, "MIXING");
s16* pTrack = buffer;
s16* r29 = r31 + getFrameSamples();
for (u32 i = param_1; i != 0; i--) {
pTrack[0] = JASCalc::clamp<s16, s32>(pTrack[0] + r29[0]);
pTrack[1] = JASCalc::clamp<s16, s32>(pTrack[1] + r31[0]);
pTrack += 2;
r29++;
r31++;
}
JASProbe::stop(6);
}
/* 8029CC50-8029CCD4 297590 0084+00 1/0 0/0 0/0 .text mixInterleaveTrack__9JASDriverFPsUlPFl_Ps */
void JASDriver::mixInterleaveTrack(s16* buffer, u32 param_1, MixCallback param_2) {
s16* r31 = param_2(param_1);
if (r31) {
s16* pTrack = buffer;
s16* r30 = r31;
for (u32 i = param_1 * 2; i != 0; i--) {
pTrack[0] = JASCalc::clamp<s16, s32>(pTrack[0] + r30[0]);
pTrack += 1;
r30++;
}
}
}
/* 8029CCD4-8029CCDC -00001 0008+00 0/0 0/0 0/0 .text getSubFrameCounter__9JASDriverFv */
u32 JASDriver::getSubFrameCounter() {
return sSubFrameCounter;
}
/* 8039B2F0-8039B2F0 027950 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+860
View File
@@ -0,0 +1,860 @@
//
// Generated By: dol2asm
// Translation Unit: JASAramStream
//
#include "JSystem/JAudio2/JASAramStream.h"
#include "JSystem/JAudio2/JASChannel.h"
#include "JSystem/JAudio2/JASCriticalSection.h"
#include "JSystem/JAudio2/JASDriverIF.h"
#include "JSystem/JAudio2/JASDvdThread.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "JSystem/JAudio2/JASAiCtrl.h"
#include "dol2asm.h"
//
// Types:
//
/* JASMemPool_MultiThreaded<JASChannel> */
struct JASMemPool_MultiThreaded__template2 {
/* 802978DC */ void func_802978DC(void* _this);
};
//
// Forward References:
//
extern "C" void initSystem__13JASAramStreamFUlUl();
extern "C" void __ct__13JASAramStreamFv();
extern "C" void init__13JASAramStreamFUlUlPFUlP13JASAramStreamPv_vPv();
extern "C" void prepare__13JASAramStreamFli();
extern "C" void start__13JASAramStreamFv();
extern "C" void stop__13JASAramStreamFUs();
extern "C" void pause__13JASAramStreamFb();
extern "C" void cancel__13JASAramStreamFv();
extern "C" void getBlockSamples__13JASAramStreamCFv();
extern "C" void headerLoadTask__13JASAramStreamFPv();
extern "C" void firstLoadTask__13JASAramStreamFPv();
extern "C" void loadToAramTask__13JASAramStreamFPv();
extern "C" void finishTask__13JASAramStreamFPv();
extern "C" void prepareFinishTask__13JASAramStreamFPv();
extern "C" void headerLoad__13JASAramStreamFUli();
extern "C" void load__13JASAramStreamFv();
extern "C" void channelProcCallback__13JASAramStreamFPv();
extern "C" void dvdErrorCheck__13JASAramStreamFPv();
extern "C" void channelCallback__13JASAramStreamFUlP10JASChannelPQ26JASDsp8TChannelPv();
extern "C" void updateChannel__13JASAramStreamFUlP10JASChannelPQ26JASDsp8TChannel();
extern "C" void channelProc__13JASAramStreamFv();
extern "C" void channelStart__13JASAramStreamFv();
extern "C" void channelStop__13JASAramStreamFUs();
extern "C" void func_802978DC(void* _this);
extern "C" u8 sLoadThread__13JASAramStream[4];
extern "C" u8 sReadBuffer__13JASAramStream[4];
extern "C" u8 sBlockSize__13JASAramStream[4];
extern "C" u8 sChannelMax__13JASAramStream[4];
//
// External References:
//
extern "C" void sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl();
extern "C" void sendCmdMsg__13JASTaskThreadFPFPv_vPv();
extern "C" void getThreadPointer__6JASDvdFv();
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void __dt__17JASGenericMemPoolFv();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void __ct__10JASChannelFPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv();
extern "C" void playForce__10JASChannelFv();
extern "C" void release__10JASChannelFUs();
extern "C" void setOscInit__10JASChannelFUlPCQ213JASOscillator4Data();
extern "C" void setMixConfig__10JASChannelFUlUs();
extern "C" void getDacRate__9JASDriverFv();
extern "C" void rejectCallback__9JASDriverFPFPv_lPv();
extern "C" void registerSubFrameCallback__9JASDriverFPFPv_lPv();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void __dl__FPv();
extern "C" void mainRamToAram__7JKRAramFPUcUlUl15JKRExpandSwitchUlP7JKRHeapiPUl();
extern "C" void __register_global_object();
extern "C" void _savegpr_19();
extern "C" void _savegpr_25();
extern "C" void _savegpr_26();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_19();
extern "C" void _restgpr_25();
extern "C" void _restgpr_26();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
//
// Declarations:
//
/* ############################################################################################## */
/* 80451250-80451254 000750 0004+00 6/6 0/0 0/0 .sbss sLoadThread__13JASAramStream */
JASTaskThread* JASAramStream::sLoadThread;
/* 80451254-80451258 000754 0004+00 3/3 0/0 0/0 .sbss sReadBuffer__13JASAramStream */
u8* JASAramStream::sReadBuffer;
/* 80451258-8045125C 000758 0004+00 6/6 1/1 0/0 .sbss sBlockSize__13JASAramStream */
u32 JASAramStream::sBlockSize;
/* 8045125C-80451260 00075C 0004+00 1/1 0/0 0/0 .sbss sChannelMax__13JASAramStream */
u32 JASAramStream::sChannelMax;
/* 80451260-80451268 -00001 0008+00 8/8 4/4 0/0 .sbss None */
/* 80451260 0001+00 data_80451260 None */
/* 80451261 0001+00 data_80451261 None */
/* 80451262 0006+00 data_80451262 None */
extern bool struct_80451260;
extern bool struct_80451261;
extern u32 struct_80451264;
bool struct_80451260;
bool struct_80451261;
u32 struct_80451264;
/* 8029631C-802963A8 290C5C 008C+00 0/0 1/1 0/0 .text initSystem__13JASAramStreamFUlUl */
void JASAramStream::initSystem(u32 i_blockSize, u32 i_channelMax) {
if (JASDriver::registerSubFrameCallback(dvdErrorCheck, NULL)) {
if (sLoadThread == NULL) {
sLoadThread = JASDvd::getThreadPointer();
}
sReadBuffer = new (JASDram, 0x20) u8[(i_blockSize + 0x20) * i_channelMax];
sBlockSize = i_blockSize;
sChannelMax = i_channelMax;
struct_80451260 = false;
struct_80451261 = false;
}
}
/* ############################################################################################## */
/* 80455610-80455614 003C10 0004+00 3/3 0/0 0/0 .sdata2 @390 */
SECTION_SDATA2 static u8 lit_390[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 80455614-80455618 003C14 0004+00 2/2 0/0 0/0 .sdata2 @391 */
SECTION_SDATA2 static f32 lit_391 = 1.0f;
/* 80455618-8045561C 003C18 0004+00 2/2 0/0 0/0 .sdata2 @392 */
SECTION_SDATA2 static f32 lit_392 = 0.5f;
/* 802963A8-8029649C 290CE8 00F4+00 0/0 1/1 0/0 .text __ct__13JASAramStreamFv */
#ifdef NONMATCHING
JASAramStream::JASAramStream() {
field_0x0a8 = NULL;
field_0x0ac = false;
field_0x0ad = false;
field_0x0ae = 0;
field_0x0b0 = 0;
field_0x0b4 = 0;
field_0x0b8 = 0;
field_0x0bc = 0;
field_0x0c0 = false;
field_0x0c4 = 0;
field_0x0c8 = 0.0f;
field_0x108 = 0;
field_0x10c = 0;
mBlock = 0;
field_0x114 = 0;
field_0x118 = 0;
field_0x12c = 0;
field_0x148 = 0;
field_0x14c = 0;
mCallback = NULL;
mCallbackData = NULL;
field_0x158 = 0;
mChannelNum = 0;
mBufCount = 0;
field_0x160 = 0;
field_0x164 = 0;
mLoop = false;
mLoopStart = 0;
mLoopEnd = 0;
mVolume = 1.0f;
mPitch = 1.0f;
for (int i = 0; i < 6; i++) {
mChannels[i] = NULL;
field_0x130[i] = 0;
field_0x13c[i] = 0;
mChannelVolume[i] = 1.0f;
mChannelPan[i] = 0.5f;
mChannelFxMix[i] = 0.0f;
mChannelDolby[i] = 0.0f;
}
for (int i = 0; i < 6; i++) {
field_0x1dc[i] = 0;
}
}
#else
JASAramStream::JASAramStream() {
// NONMATCHING
}
#endif
/* 8029649C-8029655C 290DDC 00C0+00 0/0 1/1 0/0 .text
* init__13JASAramStreamFUlUlPFUlP13JASAramStreamPv_vPv */
#ifdef NONMATCHING
void JASAramStream::init(u32 param_0, u32 param_1, StreamCallback i_callback, void* i_callbackData) {
field_0x148 = param_0;
field_0x14c = param_1;
field_0x0c8 = 0.0f;
field_0x0ae = 0;
field_0x0ac = false;
field_0x0ad = false;
field_0x114 = 0;
mChannelNum = 0;
for (int i = 0; i < 6; i++) {
mChannelVolume[i] = 1.0f;
mChannelPan[i] = 0.5f;
mChannelFxMix[i] = 0.0f;
mChannelDolby[i] = 0.0f;
}
mVolume = 1.0f;
mPitch = 1.0f;
field_0x1dc[0] = 0xffff;
mCallback = i_callback;
mCallbackData = i_callbackData;
OSInitMessageQueue(&field_0x000, field_0x040, 0x10);
OSInitMessageQueue(&field_0x020, field_0x080, 4);
}
#else
void JASAramStream::init(u32 param_0, u32 param_1, StreamCallback i_callback, void* param_3) {
// NONMATCHING
}
#endif
/* 8029655C-80296618 290E9C 00BC+00 0/0 1/1 0/0 .text prepare__13JASAramStreamFli */
bool JASAramStream::prepare(s32 param_0, int param_1) {
if (!DVDFastOpen(param_0, &mDvdFileInfo)) {
return false;
}
if (!JASDriver::registerSubFrameCallback(channelProcCallback, this)) {
return false;
}
TaskData data;
data.stream = this;
data.field_0x4 = field_0x14c;
data.field_0x8 = param_1;
if (!sLoadThread->sendCmdMsg(headerLoadTask, &data, 0xc)) {
JASDriver::rejectCallback(channelProcCallback, this);
return false;
}
return true;
}
/* 80296618-8029664C 290F58 0034+00 0/0 1/1 0/0 .text start__13JASAramStreamFv */
bool JASAramStream::start() {
return OSSendMessage(&field_0x000, (OSMessage)0, OS_MESSAGE_NOBLOCK);
}
/* 8029664C-80296684 290F8C 0038+00 0/0 1/1 0/0 .text stop__13JASAramStreamFUs */
bool JASAramStream::stop(u16 param_0) {
return OSSendMessage(&field_0x000, (OSMessage)(param_0 << 0x10 | 1), OS_MESSAGE_NOBLOCK);
}
/* 80296684-802966CC 290FC4 0048+00 0/0 1/1 0/0 .text pause__13JASAramStreamFb */
bool JASAramStream::pause(bool param_0) {
OSMessage msg;
if (param_0) {
msg = (OSMessage)2;
} else {
msg = (OSMessage)3;
}
if (!OSSendMessage(&field_0x000, msg, OS_MESSAGE_NOBLOCK)) {
return false;
}
return true;
}
/* 802966CC-80296710 29100C 0044+00 0/0 1/1 0/0 .text cancel__13JASAramStreamFv */
bool JASAramStream::cancel() {
field_0x114 = 1;
return sLoadThread->sendCmdMsg(finishTask, this);
}
/* 80296710-8029673C 291050 002C+00 4/4 0/0 0/0 .text getBlockSamples__13JASAramStreamCFv
*/
u32 JASAramStream::getBlockSamples() const {
if (field_0x158 == 0) {
return (sBlockSize << 4) / 9;
}
return sBlockSize >> 1;
}
/* 8029673C-8029676C 29107C 0030+00 1/1 0/0 0/0 .text headerLoadTask__13JASAramStreamFPv
*/
void JASAramStream::headerLoadTask(void* i_data) {
TaskData* data = (TaskData*)i_data;
data->stream->headerLoad(data->field_0x4, data->field_0x8);
}
/* 8029676C-80296848 2910AC 00DC+00 1/1 0/0 0/0 .text firstLoadTask__13JASAramStreamFPv
*/
void JASAramStream::firstLoadTask(void* i_data) {
TaskData* data = (TaskData*)i_data;
JASAramStream* _this = data->stream;
if (!_this->load()) {
return;
}
if (data->field_0x8 > 0) {
data->field_0x8--;
if (data->field_0x8 == 0) {
if (!sLoadThread->sendCmdMsg(prepareFinishTask, _this)) {
struct_80451261 = true;
}
}
}
if (data->field_0x4 != 0) {
data->field_0x4--;
if (!sLoadThread->sendCmdMsg(firstLoadTask, data, 0xc)) {
struct_80451261 = true;
}
JASCriticalSection cs;
_this->field_0x118++;
}
}
/* 80296848-80296868 291188 0020+00 1/1 0/0 0/0 .text loadToAramTask__13JASAramStreamFPv
*/
void JASAramStream::loadToAramTask(void* i_this) {
((JASAramStream*)i_this)->load();
}
/* 80296868-802968C8 2911A8 0060+00 2/2 0/0 0/0 .text finishTask__13JASAramStreamFPv */
void JASAramStream::finishTask(void* i_this) {
JASAramStream* _this = (JASAramStream*)i_this;
JASDriver::rejectCallback(channelProcCallback, _this);
if (_this->mCallback != NULL) {
_this->mCallback(CB_START, _this, _this->mCallbackData);
_this->mCallback = NULL;
}
}
/* 802968C8-80296920 291208 0058+00 1/1 0/0 0/0 .text prepareFinishTask__13JASAramStreamFPv */
void JASAramStream::prepareFinishTask(void* i_this) {
JASAramStream* _this = (JASAramStream*)i_this;
OSSendMessage(&_this->field_0x020, (OSMessage)4, OS_MESSAGE_BLOCK);
if (_this->mCallback != NULL) {
_this->mCallback(CB_STOP, _this, _this->mCallbackData);
}
}
/* ############################################################################################## */
/* 8045561C-80455620 003C1C 0004+00 1/1 0/0 0/0 .sdata2 @531 */
SECTION_SDATA2 static f32 lit_531 = 127.0f;
/* 80455620-80455628 003C20 0008+00 3/3 0/0 0/0 .sdata2 @533 */
SECTION_SDATA2 static f64 lit_533 = 4503599627370496.0 /* cast u32 to float */;
/* 80296920-80296AE8 291260 01C8+00 1/1 0/0 0/0 .text headerLoad__13JASAramStreamFUli */
bool JASAramStream::headerLoad(u32 param_0, int param_1) {
if (struct_80451261) {
return false;
}
if (field_0x114 != 0) {
return false;
}
if (DVDReadPrio(&mDvdFileInfo, sReadBuffer, sizeof(Header), 0, 1) < 0) {
struct_80451261 = true;
return false;
}
Header* header = (Header*)sReadBuffer;
field_0x158 = header->format;
mChannelNum = header->channels;
field_0x164 = header->field_0x10;
mLoop = header->loop != 0;
mLoopStart = header->loop_start;
mLoopEnd = header->loop_end;
mVolume = header->field_0x28 / 127.0f;
field_0x118 = 0;
mBlock = 0;
field_0x10c = 0;
field_0x160 = (param_0 / sBlockSize) / header->channels;
mBufCount = field_0x160;
mBufCount--;
field_0x108 = mBufCount;
getBlockSamples();
if (param_1 < 0 || param_1 > field_0x108) {
param_1 = field_0x108;
}
if (field_0x114 != 0) {
return false;
}
TaskData data;
data.stream = this;
data.field_0x4 = field_0x108 - 1;
data.field_0x8 = param_1;
if (!sLoadThread->sendCmdMsg(firstLoadTask, &data, 0xc)) {
struct_80451261 = true;
return false;
}
JASCriticalSection cs;
field_0x118++;
return true;
}
/* 80296AE8-80296D74 291428 028C+00 2/2 0/0 0/0 .text load__13JASAramStreamFv */
#ifdef NONMATCHING
bool JASAramStream::load() {
{
JASCriticalSection cs;
field_0x118--;
}
if (struct_80451261) {
return false;
}
if (field_0x114 != 0) {
return false;
}
u32 loop_end_block = (mLoopEnd - 1) / getBlockSamples();
u32 loop_start_block = mLoopStart / getBlockSamples();
u32 block = mBlock;
if (block > loop_end_block) {
return false;
}
u32 size = sBlockSize * mChannelNum + sizeof(BlockHeader);
u32 offset = block * size + sizeof(Header);
if (DVDReadPrio(&mDvdFileInfo, sReadBuffer, size, offset, 1) < 0) {
struct_80451261 = true;
return false;
}
BlockHeader* bhead = (BlockHeader*)sReadBuffer;
if (field_0x114 != 0) {
return false;
}
u32 uvar2 = field_0x148 + field_0x10c * sBlockSize;
for (int i = 0; i < mChannelNum; i++) {
if (!JKRAram::mainRamToAram(sReadBuffer + bhead->field_0x4 * i + 0x20,
uvar2 + i * field_0x160 * sBlockSize,
bhead->field_0x4, EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1, NULL)) {
struct_80451261 = 1;
return false;
}
}
field_0x10c++;
if (field_0x10c >= field_0x108) {
u32 uvar8 = mBlock - 1 + field_0x108;
if (mLoop) {
for (; uvar8 > loop_end_block; uvar8 = uvar8 - loop_end_block + loop_start_block) {}
}
if (uvar8 == loop_end_block || uvar8 + 2 == loop_end_block) {
field_0x108 = field_0x160;
OSSendMessage(&field_0x020, (OSMessage)5, OS_MESSAGE_BLOCK);
} else {
field_0x108 = field_0x160 - 1;
}
for (int i = 0; i < mChannelNum; i++) {
field_0x130[i] = bhead->field_0x8[i].field_0x0;
field_0x13c[i] = bhead->field_0x8[i].field_0x2;
}
field_0x10c = 0;
}
mBlock++;
if (mBlock > loop_end_block && mLoop) {
mBlock = loop_start_block;
}
return true;
}
#else
bool JASAramStream::load() {
// NONMATCHING
}
#endif
/* 80296D74-80296D94 2916B4 0020+00 2/2 0/0 0/0 .text channelProcCallback__13JASAramStreamFPv */
s32 JASAramStream::channelProcCallback(void* i_this) {
return ((JASAramStream*)i_this)->channelProc();
}
/* ############################################################################################## */
/* 803C7670-803C76A8 -00001 0034+04 1/1 0/0 0/0 .data @613 */
SECTION_DATA static void* lit_613[13 + 1 /* padding */] = {
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x34),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x48),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
/* padding */
NULL,
};
/* 80296D94-80296DF0 2916D4 005C+00 2/1 0/0 0/0 .text dvdErrorCheck__13JASAramStreamFPv
*/
#ifdef NONMATCHING
s32 JASAramStream::dvdErrorCheck(void* param_0) {
switch (DVDGetDriveStatus()) {
case DVD_STATE_END:
struct_80451260 = false;
break;
case DVD_STATE_WAITING:
case DVD_STATE_COVER_CLOSED:
case DVD_STATE_NO_DISK:
case DVD_STATE_COVER_OPEN:
case DVD_STATE_WRONG_DISK:
case DVD_STATE_MOTOR_STOPPED:
case DVD_STATE_IGNORED:
case 9:
case DVD_STATE_CANCELED:
case DVD_STATE_RETRY:
case DVD_STATE_FATAL_ERROR:
struct_80451260 = true;
break;
}
return 0;
}
#else
s32 JASAramStream::dvdErrorCheck(void* param_0) {
// NONMATCHING
}
#endif
/* 80296DF0-80296E2C 291730 003C+00 1/1 0/0 0/0 .text
* channelCallback__13JASAramStreamFUlP10JASChannelPQ26JASDsp8TChannelPv */
void JASAramStream::channelCallback(u32 i_callbackType, JASChannel* i_channel,
JASDsp::TChannel* i_dspChannel, void* i_this) {
((JASAramStream*)i_this)->updateChannel(i_callbackType, i_channel, i_dspChannel);
}
/* 80296E2C-802974AC 29176C 0680+00 1/1 0/0 0/0 .text
* updateChannel__13JASAramStreamFUlP10JASChannelPQ26JASDsp8TChannel */
#ifdef NONMATCHING
// missing extra loads of field_0x0c4
void JASAramStream::updateChannel(u32 i_callbackType, JASChannel* i_channel,
JASDsp::TChannel* i_dspChannel) {
u32 block_samples = getBlockSamples();
switch (i_callbackType) {
case JASChannel::CB_START:
if (field_0x0a8 == NULL) {
field_0x0a8 = i_channel;
field_0x0b4 = block_samples * mBufCount;
field_0x0b8 = 0;
field_0x0b0 = 0;
field_0x0bc = (mLoopEnd - 1) / block_samples;
field_0x0c0 = 0;
field_0x0c4 = 0;
field_0x12c = 0;
}
break;
case JASChannel::CB_PLAY:
if (i_dspChannel->field_0x008 == 0) {
if (i_channel == field_0x0a8) {
field_0x12c = 0;
u32 uvar8 = i_dspChannel->field_0x074 + i_dspChannel->field_0x064;
u32 uvar5 = field_0x0b4;
if (uvar8 <= uvar5) {
field_0x0b8 += uvar5 - uvar8;
} else {
if (!field_0x0c0) {
field_0x0b8 += uvar5;
field_0x0b8 += block_samples * mBufCount - uvar8;
} else {
field_0x0b8 += uvar5;
field_0x0b8 += block_samples * mBufCount - uvar8
- i_dspChannel->field_0x110;
field_0x0b8 -= mLoopEnd;
field_0x0b8 += mLoopStart;
i_dspChannel->field_0x110 = 0;
field_0x120 = 0;
field_0x12c |= 2;
if (field_0x0c4 < -1) {
field_0x0c4++;
}
field_0x0c0 = false;
}
}
if (field_0x0b8 > mLoopEnd) {
struct_80451261 = true;
}
f32 fvar1 = field_0x0c4;
fvar1 *= mLoopEnd - mLoopStart;
if (field_0x0c4 < -1) {
fvar1 += field_0x0b8;
}
fvar1 /= field_0x164;
field_0x0c8 = fvar1;
if (field_0x0b8 + 400 >= mLoopEnd && !field_0x0c0) {
if (mLoop) {
u32 uvar5 = field_0x0bc + 1;
if (uvar5 >= mBufCount) {
uvar5 = 0;
}
i_dspChannel->field_0x110 = mLoopStart % block_samples
+ uvar5 * block_samples;
field_0x120 = i_dspChannel->field_0x110;
field_0x12c |= 2;
} else {
i_dspChannel->field_0x102 = 0;
field_0x128 = 0;
field_0x12c |= 8;
}
i_dspChannel->field_0x074 -= block_samples * mBufCount
- (field_0x0bc * block_samples + mLoopEnd % block_samples);
field_0x11c = i_dspChannel->field_0x074;
field_0x12c |= 1;
field_0x0bc += (mLoopEnd - 1) / block_samples - mLoopStart / block_samples + 1;
field_0x0c0 = true;
}
u32 uvar4 = i_dspChannel->field_0x070 - i_channel->field_0x104;
if (uvar4 != 0) {
uvar4--;
}
uvar5 = uvar4 / sBlockSize;
getBlockSamples();
if (uvar5 != field_0x0b0) {
bool cmp = uvar5 < field_0x0b0;
while (uvar5 != field_0x0b0) {
if (!sLoadThread->sendCmdMsg(loadToAramTask, this)) {
struct_80451261 = true;
break;
}
{
JASCriticalSection cs;
field_0x118++;
}
field_0x0b0++;
if (field_0x0b0 >= mBufCount) {
field_0x0b0 = 0;
}
}
if (cmp) {
field_0x0bc -= mBufCount;
if (field_0x0ad) {
if (!field_0x0c0) {
i_dspChannel->field_0x074 += block_samples;
field_0x11c = i_dspChannel->field_0x074;
field_0x12c |= 1;
}
i_dspChannel->field_0x114 += block_samples;
field_0x124 = i_dspChannel->field_0x114;
field_0x12c |= 4;
mBufCount = field_0x160;
field_0x0ad = false;
} else {
if (mBufCount != field_0x160 - 1) {
mBufCount = field_0x160 - 1;
i_dspChannel->field_0x114 -= block_samples;
field_0x124 = i_dspChannel->field_0x114;
field_0x12c |= 4;
if (!field_0x0c0) {
i_dspChannel->field_0x074 -= block_samples;
field_0x11c = i_dspChannel->field_0x074;
field_0x12c |= 1;
}
}
}
}
} else {
if (field_0x118 == 0 && !struct_80451260) {
field_0x0ae &= ~2;
field_0x0ae &= ~4;
}
}
field_0x0b4 = i_dspChannel->field_0x074 + i_dspChannel->field_0x064;
if (field_0x118 >= field_0x160 - 2) {
field_0x0ae |= 4;
}
} else {
if (field_0x12c & 1) {
i_dspChannel->field_0x074 = field_0x11c;
}
if (field_0x12c & 2) {
i_dspChannel->field_0x110 = field_0x120;
}
if (field_0x12c & 4) {
i_dspChannel->field_0x114 = field_0x124;
}
if (field_0x12c & 8) {
i_dspChannel->field_0x102 = field_0x128;
}
}
int i = 0;
for (; i < 6; i++) {
if (i_channel == mChannels[i]) {
break;
}
}
i_dspChannel->field_0x104 = field_0x130[i];
i_dspChannel->field_0x106 = field_0x13c[i];
}
break;
case JASChannel::CB_STOP:
bool open_channel = false;
for (int i = 0; i < 6; i++) {
if (i_channel == mChannels[i]) {
mChannels[i] = NULL;
} else if (mChannels[i] != NULL) {
open_channel = true;
}
}
if (!open_channel) {
field_0x114 = 1;
if (!sLoadThread->sendCmdMsg(finishTask, this)) {
struct_80451261 = true;
return;
}
}
break;
}
i_channel->mPauseFlag = field_0x0ae != 0;
}
#else
void JASAramStream::updateChannel(u32 param_0, JASChannel* param_1, JASDsp::TChannel* param_2) {
// NONMATCHING
}
#endif
/* 802974AC-80297658 291DEC 01AC+00 1/1 0/0 0/0 .text channelProc__13JASAramStreamFv */
#ifdef NONMATCHING
// regalloc and instruction ordering
s32 JASAramStream::channelProc() {
OSMessage msg;
while (OSReceiveMessage(&field_0x020, &msg, OS_MESSAGE_NOBLOCK)) {
switch ((u32)msg) {
case 4:
field_0x0ac = true;
break;
case 5:
field_0x0ad = true;
break;
}
}
if (!field_0x0ac) {
return 0;
}
while (OSReceiveMessage(&field_0x000, &msg, OS_MESSAGE_NOBLOCK)) {
switch ((u32)msg & 0xff) {
case 0:
channelStart();
break;
case 1:
channelStop((u32)msg >> 0x10);
break;
case 2:
field_0x0ae |= 1;
break;
case 3:
field_0x0ae &= ~1;
break;
}
}
if (struct_80451261) {
field_0x0ae |= 8;
}
if (struct_80451260) {
field_0x0ae |= 2;
}
for (int i = 0; i < mChannelNum; i++) {
JASChannel* channel = mChannels[i];
if (channel != NULL) {
JASChannelParams params;
params.mVolume = mVolume * mChannelVolume[i];
params.mPitch = mPitch;
params.field_0x8 = 0.0f;
params.mPan = mChannelPan[i];
params.mFxMix = mChannelFxMix[i];
params.mDolby = mChannelDolby[i];
channel->setParams(params);
}
}
return 0;
}
#else
s32 JASAramStream::channelProc() {
// NONMATCHING
}
#endif
/* ############################################################################################## */
/* 8039B168-8039B174 0277C8 000C+00 1/0 0/0 0/0 .rodata OSC_RELEASE_TABLE */
static JASOscillator::Point const OSC_RELEASE_TABLE[2] = {
{0x0000, 0x0002, 0x0000},
{0x000F, 0x0000, 0x0000},
};
/* 8039B174-8039B190 -00001 0018+04 1/1 0/0 0/0 .rodata OSC_ENV */
static JASOscillator::Data const OSC_ENV = {0, 1.0f, NULL, OSC_RELEASE_TABLE, 1.0f, 0.0f};
/* 80431B28-80431B34 05E848 000C+00 1/1 0/0 0/0 .bss @792 */
static u8 lit_792[12];
/* 80431B34-80431B48 05E854 0010+04 1/1 4/4 0/0 .bss
* memPool_$localstatic3$getMemPool___46JASPoolAllocObject_MultiThreaded<10JASChannel>Fv */
extern u8 data_80431B34[16 + 4 /* padding */];
u8 data_80431B34[16 + 4 /* padding */];
/* 80455628-80455630 003C28 0004+04 1/1 0/0 0/0 .sdata2 one$776 */
SECTION_SDATA2 static u32 one = 1;
/* 80297658-80297870 291F98 0218+00 1/1 0/0 0/0 .text channelStart__13JASAramStreamFv */
void JASAramStream::channelStart() {
u8 r31;
switch (field_0x158) {
case 0:
r31 = 0;
break;
case 1:
r31 = 3;
break;
}
for (int i = 0; i < mChannelNum; i++) {
JASWaveInfo wave_info;
wave_info.field_0x00 = r31;
wave_info.field_0x02 = 0xff;
wave_info.field_0x10 = 0;
wave_info.field_0x14 = mBufCount * getBlockSamples();
wave_info.field_0x18 = wave_info.field_0x14;
wave_info.field_0x1c = 0;
wave_info.field_0x1e = 0;
// probably a fake match, this should be set in the JASWaveInfo constructor
wave_info.field_0x20 = &one;
JASChannel* channel = new JASChannel(channelCallback, this);
channel->setPriority(0x7f7f);
for (u32 j = 0; j < 6; j++) {
channel->setMixConfig(j, field_0x1dc[j]);
}
channel->setInitPitch(field_0x164 / JASDriver::getDacRate());
channel->setOscInit(0, &OSC_ENV);
channel->field_0xdc.field_0x4 = wave_info;
channel->field_0x104 = field_0x148 + sBlockSize * field_0x160 * i;
channel->field_0xdc.field_0x0 = 0;
channel->playForce();
mChannels[i] = channel;
}
field_0x0a8 = NULL;
}
/* 80297870-802978DC 2921B0 006C+00 1/1 0/0 0/0 .text channelStop__13JASAramStreamFUs */
void JASAramStream::channelStop(u16 i_directRelease) {
for (int i = 0; i < mChannelNum; i++) {
if (mChannels[i] != NULL) {
mChannels[i]->release(i_directRelease);
}
}
}
/* 802978DC-80297930 29221C 0054+00 1/1 5/5 0/0 .text
* __dt__38JASMemPool_MultiThreaded<10JASChannel>Fv */
extern "C" void func_802978DC(void* _this) {
// NONMATCHING
}
+117
View File
@@ -0,0 +1,117 @@
//
// Generated By: dol2asm
// Translation Unit: JASAudioReseter
//
#include "JSystem/JAudio2/JASAudioReseter.h"
#include "JSystem/JAudio2/JASAudioThread.h"
#include "JSystem/JAudio2/JASCriticalSection.h"
#include "JSystem/JAudio2/JASDriverIF.h"
#include "dolphin/types.h"
//
// Types:
//
struct JASDSPChannel {
/* 8029D340 */ void drop();
/* 8029D948 */ static JASDSPChannel* getHandle(u32);
inline u32 getStatus() {return mStatus;}
u32 mStatus;
};
//
// Forward References:
//
extern "C" void __ct__15JASAudioReseterFv();
extern "C" void __dt__15JASAudioReseterFv();
extern "C" void start__15JASAudioReseterFUlb();
extern "C" void resume__15JASAudioReseterFv();
extern "C" void checkDone__15JASAudioReseterCFv();
extern "C" void calc__15JASAudioReseterFv();
extern "C" void callback__15JASAudioReseterFPv();
//
// External References:
//
extern "C" void stop__14JASAudioThreadFv();
extern "C" void drop__13JASDSPChannelFv();
extern "C" void getHandle__13JASDSPChannelFUl();
extern "C" void setDSPLevel__9JASDriverFf();
extern "C" void getDSPLevel__9JASDriverFv();
extern "C" void registerDspSyncCallback__9JASDriverFPFPv_lPv();
extern "C" void __dl__FPv();
extern "C" extern JASAudioThread* data_80450B8C;
//
// Declarations:
//
/* 8029D0B4-8029D0FC 2979F4 0048+00 0/0 1/1 0/0 .text __ct__15JASAudioReseterFv */
JASAudioReseter::JASAudioReseter() {
field_0x0 = 0;
mIsDone = true;
field_0xc = false;
mDSPLevel = JASDriver::getDSPLevel();
}
/* 8029D0FC-8029D138 297A3C 003C+00 0/0 1/1 0/0 .text __dt__15JASAudioReseterFv */
JASAudioReseter::~JASAudioReseter() {}
/* 8029D138-8029D1D4 297A78 009C+00 0/0 1/1 0/0 .text start__15JASAudioReseterFUlb */
bool JASAudioReseter::start(u32 param_0, bool param_1) {
if (mIsDone == false) {
return false;
}
field_0xc = param_1;
JASCriticalSection critical;
if (!JASDriver::registerDspSyncCallback(callback, this)) {
return false;
} else {
mDSPLevel = JASDriver::getDSPLevel();
field_0x0 = param_0;
mIsDone = false;
return true;
}
}
/* 8029D1D4-8029D1F8 297B14 0024+00 0/0 1/1 0/0 .text resume__15JASAudioReseterFv */
void JASAudioReseter::resume() {
JASDriver::setDSPLevel(mDSPLevel);
}
/* 8029D1F8-8029D200 297B38 0008+00 0/0 2/2 0/0 .text checkDone__15JASAudioReseterCFv */
s32 JASAudioReseter::checkDone() const {
return mIsDone;
}
/* 8029D200-8029D2D4 297B40 00D4+00 1/1 0/0 0/0 .text calc__15JASAudioReseterFv */
s32 JASAudioReseter::calc() {
if(field_0x0==0) {
for(size_t i = 0; i<64; i++) {
JASDSPChannel* handle = JASDSPChannel::getHandle(i);
if ((handle->getStatus()&0xFF)==0) {
handle->drop();
}
}
if(field_0xc!=false) {
JASGlobalInstance<JASAudioThread>::getInstance()->stop();//JASGlobalInstance<JASAudioThread>::sInstance->stop();
}
mIsDone = 1;
return -1;
}
field_0x0--;
u32 unk = field_0x0;
float dspLevel = JASDriver::getDSPLevel();
JASDriver::setDSPLevel(((float)unk*dspLevel)/(float)(unk+1));
return 0;
}
/* 8029D2D4-8029D2F4 297C14 0020+00 1/1 0/0 0/0 .text callback__15JASAudioReseterFPv */
s32 JASAudioReseter::callback(void* param_0) {
return ((JASAudioReseter*)param_0)->calc();
}
+221
View File
@@ -0,0 +1,221 @@
//
// Generated By: dol2asm
// Translation Unit: JASAudioThread
//
#include "JSystem/JAudio2/JASAudioThread.h"
#include "JSystem/JAudio2/JASHeapCtrl.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "dol2asm.h"
#include "dolphin/dsp.h"
//
// Types:
//
struct JASProbe {
/* 80290EE4 */ static void start(s32, char const*);
/* 80290F24 */ static void stop(s32);
};
/* JASMemPool_MultiThreaded<JASChannel> */
struct JASMemPool_MultiThreaded__template2 {
/* 802978DC */ void func_802978DC(void* _this);
};
struct JASDsp {
/* 8029D958 */ static void boot(void (*)(void*));
/* 8029D9C4 */ static void finishWork(u16);
/* 8029DAC8 */ static void initBuffer();
};
struct JASDSPChannel {
/* 8029D3C8 */ static void initAll();
};
//
// Forward References:
//
extern "C" void __ct__14JASAudioThreadFiiUl();
extern "C" void create__14JASAudioThreadFl();
extern "C" void stop__14JASAudioThreadFv();
extern "C" void run__14JASAudioThreadFv();
extern "C" void DMACallback__14JASAudioThreadFv();
extern "C" void DSPCallback__14JASAudioThreadFPv();
extern "C" void __dt__14JASAudioThreadFv();
extern "C" extern char const* const JASAudioThread__stringBase0;
extern "C" u8 snIntCount__14JASAudioThread[4 + 4 /* padding */];
//
// External References:
//
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void newMemPool__17JASGenericMemPoolFUli();
extern "C" void start__8JASProbeFlPCc();
extern "C" void stop__8JASProbeFl();
extern "C" void func_802978DC(void* _this);
extern "C" void initAI__9JASDriverFPFv_v();
extern "C" void startDMA__9JASDriverFv();
extern "C" void stopDMA__9JASDriverFv();
extern "C" void updateDac__9JASDriverFv();
extern "C" void updateDSP__9JASDriverFv();
extern "C" void finishDSPFrame__9JASDriverFv();
extern "C" void initAll__13JASDSPChannelFv();
extern "C" void boot__6JASDspFPFPv_v();
extern "C" void finishWork__6JASDspFUs();
extern "C" void initBuffer__6JASDspFv();
extern "C" void updateDacCallback__9JASDriverFv();
extern "C" void* __nw__FUlP7JKRHeapi();
extern "C" void __dl__FPv();
extern "C" void __ct__9JKRThreadFP7JKRHeapUlii();
extern "C" void __dt__9JKRThreadFv();
extern "C" void __register_global_object();
extern "C" extern u8 data_80431B34[16 + 4 /* padding */];
extern "C" extern u8 struct_80451260[8];
extern "C" u8 sSystemHeap__7JKRHeap[4];
extern "C" u8 sCurrentHeap__7JKRHeap[4];
extern "C" extern u8 __OSReport_disable;
//
// Declarations:
//
/* ############################################################################################## */
/* 8029CCDC-8029CD4C 29761C 0070+00 1/1 0/0 0/0 .text __ct__14JASAudioThreadFiiUl */
JASAudioThread::JASAudioThread(int stackSize, int msgCount, u32 threadPriority)
:
JKRThread(JASDram, threadPriority, msgCount, stackSize),
JASGlobalInstance<JASAudioThread>(true)
{
sbPauseFlag = false;
OSInitThreadQueue(&sThreadQueue);
}
/* 8029CD4C-8029CDC0 29768C 0074+00 0/0 1/1 0/0 .text create__14JASAudioThreadFl */
void JASAudioThread::create(long threadPriority) {
JASAudioThread* sAudioThread = new (JASDram, 0) JASAudioThread(threadPriority, 0x10, 0x1400);
sAudioThread->setCurrentHeap(JKRGetSystemHeap());
sAudioThread->resume();
}
/* 8029CDC0-8029CDEC 297700 002C+00 0/0 1/1 0/0 .text stop__14JASAudioThreadFv */
void JASAudioThread::stop() {
jamMessageBlock((void*)2);
}
/* ############################################################################################## */
/* 8039B338-8039B338 027998 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8039B338 = "SFR_DSP";
#pragma pop
/* 80431C68-80431C78 05E988 000C+04 1/1 0/0 0/0 .bss @205 */
static u8 lit_205[12 + 4 /* padding */];
/* 804512D8-804512E0 0007D8 0004+04 1/1 2/2 0/0 .sbss snIntCount__14JASAudioThread */
volatile int JASAudioThread::snIntCount;
class Lock {
public:
Lock() {
mInterrupts = OSDisableInterrupts();
}
~Lock() {
OSRestoreInterrupts(mInterrupts);
}
private:
BOOL mInterrupts;
};
class JASChannel {
u8 filler[0x108];
};
/* 8029CDEC-8029CF68 29772C 017C+00 1/0 0/0 0/0 .text run__14JASAudioThreadFv */
// Maybe location of JASPoolAllocObject_MultiThreaded<JASChannel>
#ifdef NONMATCHING
void* JASAudioThread::run() {
OSInitFastCast();
JASDriver::initAI(DMACallback);
JASDsp::boot(DSPCallback);
JASDsp::initBuffer();
JASDSPChannel::initAll();
JASPoolAllocObject_MultiThreaded<JASChannel>::newMemPool(0x48);
JASDriver::startDMA();
while (true) {
OSMessage msg = waitMessageBlock();
switch ((int)msg) {
case AUDIOMSG_DMA:
if (sbPauseFlag) {
JASDriver::stopDMA();
OSSleepThread(&sThreadQueue);
}
JASDriver::updateDac();
JASDriver::updateDacCallback();
break;
case AUDIOMSG_DSP:
snIntCount--;
if (snIntCount == 0) {
JASProbe::stop(7);
JASDriver::finishDSPFrame();
} else {
JASProbe::start(2, "SFR_DSP");
JASDriver::updateDSP();
JASProbe::stop(2);
}
break;
case AUDIOMSG_STOP:
JASDriver::stopDMA();
OSExitThread(NULL);
break;
}
}
}
#else
void* JASAudioThread::run() {
// NONMATCHING
}
#endif
/* ############################################################################################## */
/* 8039B338-8039B338 027998 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8039B340 = "UPDATE-DAC";
/* @stringBase0 padding */
SECTION_DEAD static char const* const pad_8039B34B = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
#pragma pop
/* 8029CF68-8029CFBC 2978A8 0054+00 1/1 0/0 0/0 .text DMACallback__14JASAudioThreadFv */
void JASAudioThread::DMACallback() {
JASAudioThread* thread = getInstance();
JASProbe::stop(4);
JASProbe::start(4, "UPDATE-DAC");
thread->sendMessage((void*)AUDIOMSG_DMA);
}
/* 8029CFBC-8029D028 2978FC 006C+00 1/1 0/0 0/0 .text DSPCallback__14JASAudioThreadFPv */
void JASAudioThread::DSPCallback(void*) {
JASAudioThread* thread = getInstance();
while (DSPCheckMailFromDSP() == 0) { }
u32 mail = DSPReadMailFromDSP();
if (mail >> 0x10 == 0xF355) {
if ((mail & 0xFF00) == 0xFF00) {
thread->sendMessage((void*)AUDIOMSG_DSP);
} else {
JASDsp::finishWork(mail);
}
}
}
/* 8039B338-8039B338 027998 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+260
View File
@@ -0,0 +1,260 @@
//
// Generated By: dol2asm
// Translation Unit: JASBNKParser
//
#include "JSystem/JAudio2/JASBNKParser.h"
#include "dol2asm.h"
//
// Types:
//
struct JKRHeap {
/* 802CE72C */ void getFreeSize();
};
template <typename A0>
struct JASMemPool_MultiThreaded {};
/* JASMemPool_MultiThreaded<JASChannel> */
struct JASMemPool_MultiThreaded__template2 {
/* 802978DC */ void func_802978DC(void* _this);
};
struct JASInst {};
struct JASGenericMemPool {
/* 80290848 */ JASGenericMemPool();
};
struct JASDrumSet {
struct TPerc {
/* 802984C4 */ TPerc();
};
/* 802982EC */ JASDrumSet();
/* 80298370 */ void newPercArray(u8, JKRHeap*);
/* 802984B4 */ void setPerc(int, JASDrumSet::TPerc*);
};
struct JASCalc {
/* 8028F354 */ void bcopy(void const*, void*, u32);
};
struct JASBasicInst {
/* 80298014 */ JASBasicInst();
/* 8029819C */ void setKeyRegionCount(u32, JKRHeap*);
/* 8029821C */ void setOsc(int, JASOscillator::Data const*);
/* 8029822C */ void getKeyRegion(int);
};
struct JASBasicBank {
/* 80297D78 */ JASBasicBank();
/* 80297DA4 */ void newInstTable(u8, JKRHeap*);
/* 80297E68 */ void setInst(int, JASInst*);
/* 80297E80 */ void getInst(int) const;
};
//
// Forward References:
//
extern "C" void createBank__12JASBNKParserFPCvP7JKRHeap();
extern "C" void createBasicBank__12JASBNKParserFPCvP7JKRHeap();
extern "C" void findChunk__Q212JASBNKParser4Ver1FPCvUl();
extern "C" void createBasicBank__Q212JASBNKParser4Ver1FPCvP7JKRHeap();
extern "C" void createBasicBank__Q212JASBNKParser4Ver0FPCvP7JKRHeap();
extern "C" void
findOscPtr__Q212JASBNKParser4Ver0FP12JASBasicBankPCQ312JASBNKParser4Ver07THeaderPCQ312JASBNKParser4Ver04TOsc();
extern "C" void getOscTableEndPtr__Q212JASBNKParser4Ver0FPCQ213JASOscillator5Point();
extern "C" void func_80299FA0(void* _this, void const*, u32);
extern "C" void func_80299FB8(void* _this, void const*, u32);
extern "C" void func_80299FD0(void* _this, void const*, u32);
extern "C" void func_80299FE8(void* _this, void const*, u32);
extern "C" void func_8029A000(void* _this, void const*, u32);
extern "C" void func_8029A018(void* _this, void const*, u32);
extern "C" void func_8029A030(void* _this, void const*, u32);
extern "C" void __sinit_JASBNKParser_cpp();
extern "C" u8 sUsedHeapSize__12JASBNKParser[4];
//
// External References:
//
extern "C" void bcopy__7JASCalcFPCvPvUl();
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void func_802978DC(void* _this);
extern "C" void __ct__12JASBasicBankFv();
extern "C" void newInstTable__12JASBasicBankFUcP7JKRHeap();
extern "C" void setInst__12JASBasicBankFiP7JASInst();
extern "C" void getInst__12JASBasicBankCFi();
extern "C" void __ct__12JASBasicInstFv();
extern "C" void setKeyRegionCount__12JASBasicInstFUlP7JKRHeap();
extern "C" void setOsc__12JASBasicInstFiPCQ213JASOscillator4Data();
extern "C" void getKeyRegion__12JASBasicInstFi();
extern "C" void __ct__10JASDrumSetFv();
extern "C" void newPercArray__10JASDrumSetFUcP7JKRHeap();
extern "C" void setPerc__10JASDrumSetFiPQ210JASDrumSet5TPerc();
extern "C" void __ct__Q210JASDrumSet5TPercFv();
extern "C" void setRelease__Q210JASDrumSet5TPercFUl();
extern "C" void getFreeSize__7JKRHeapFv();
extern "C" void* __nw__FUlP7JKRHeapi();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void __register_global_object();
extern "C" void _savegpr_17();
extern "C" void _savegpr_19();
extern "C" void _savegpr_23();
extern "C" void _savegpr_28();
extern "C" void _restgpr_17();
extern "C" void _restgpr_19();
extern "C" void _restgpr_23();
extern "C" void _restgpr_28();
extern "C" extern u8 JASDram[4];
//
// Declarations:
//
/* 80299538-80299558 293E78 0020+00 0/0 1/1 0/0 .text createBank__12JASBNKParserFPCvP7JKRHeap */
JASBank* JASBNKParser::createBank(void const* param_0, JKRHeap* param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80451288-8045128C 000788 0004+00 1/1 0/0 0/0 .sbss sUsedHeapSize__12JASBNKParser */
u8 JASBNKParser::sUsedHeapSize[4];
/* 80299558-80299600 293E98 00A8+00 1/1 0/0 0/0 .text createBasicBank__12JASBNKParserFPCvP7JKRHeap
*/
JASBasicBank* JASBNKParser::createBasicBank(void const* param_0, JKRHeap* param_1) {
// NONMATCHING
}
/* 80299600-8029963C 293F40 003C+00 1/1 0/0 0/0 .text findChunk__Q212JASBNKParser4Ver1FPCvUl */
void JASBNKParser::Ver1::findChunk(void const* param_0, u32 param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80455658-80455660 003C58 0004+04 2/2 0/0 0/0 .sdata2 @835 */
SECTION_SDATA2 static f32 lit_835[1 + 1 /* padding */] = {
127.0f,
/* padding */
0.0f,
};
/* 80455660-80455668 003C60 0008+00 1/1 0/0 0/0 .sdata2 @838 */
SECTION_SDATA2 static f64 lit_838 = 4503599627370496.0 /* cast u32 to float */;
/* 8029963C-80299A3C 293F7C 0400+00 1/1 0/0 0/0 .text
* createBasicBank__Q212JASBNKParser4Ver1FPCvP7JKRHeap */
void JASBNKParser::Ver1::createBasicBank(void const* param_0, JKRHeap* param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80455668-80455670 003C68 0008+00 1/1 0/0 0/0 .sdata2 @990 */
SECTION_SDATA2 static f64 lit_990 = 4503601774854144.0 /* cast s32 to float */;
/* 80299A3C-80299E68 29437C 042C+00 1/1 0/0 0/0 .text
* createBasicBank__Q212JASBNKParser4Ver0FPCvP7JKRHeap */
void JASBNKParser::Ver0::createBasicBank(void const* param_0, JKRHeap* param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80455670-80455674 003C70 0004+00 1/1 0/0 0/0 .sdata2 @1045 */
SECTION_SDATA2 static f32 lit_1045 = 1.0f;
/* 80455674-80455678 003C74 0004+00 1/1 0/0 0/0 .sdata2 @1046 */
SECTION_SDATA2 static u8 lit_1046[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 80455678-80455680 003C78 0004+04 1/1 0/0 0/0 .sdata2 @1047 */
SECTION_SDATA2 static f32 lit_1047[1 + 1 /* padding */] = {
0.5f,
/* padding */
0.0f,
};
/* 80299E68-80299F8C 2947A8 0124+00 1/1 0/0 0/0 .text
* findOscPtr__Q212JASBNKParser4Ver0FP12JASBasicBankPCQ312JASBNKParser4Ver07THeaderPCQ312JASBNKParser4Ver04TOsc
*/
void JASBNKParser::Ver0::findOscPtr(JASBasicBank* param_0,
JASBNKParser::Ver0::THeader const* param_1,
JASBNKParser::Ver0::TOsc const* param_2) {
// NONMATCHING
}
/* 80299F8C-80299FA0 2948CC 0014+00 1/1 0/0 0/0 .text
* getOscTableEndPtr__Q212JASBNKParser4Ver0FPCQ213JASOscillator5Point */
void JASBNKParser::Ver0::getOscTableEndPtr(JASOscillator::Point const* param_0) {
// NONMATCHING
}
/* 80299FA0-80299FB8 2948E0 0018+00 1/1 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q312JASBNKParser4Ver05TPmap>__FPCvUl */
extern "C" void func_80299FA0(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 80299FB8-80299FD0 2948F8 0018+00 1/1 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q312JASBNKParser4Ver05TPerc>__FPCvUl */
extern "C" void func_80299FB8(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 80299FD0-80299FE8 294910 0018+00 1/1 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q312JASBNKParser4Ver05TVmap>__FPCvUl */
extern "C" void func_80299FD0(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 80299FE8-8029A000 294928 0018+00 1/1 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q312JASBNKParser4Ver07TKeymap>__FPCvUl */
extern "C" void func_80299FE8(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 8029A000-8029A018 294940 0018+00 1/1 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q213JASOscillator5Point>__FPCvUl */
extern "C" void func_8029A000(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 8029A018-8029A030 294958 0018+00 2/2 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q312JASBNKParser4Ver04TOsc>__FPCvUl */
extern "C" void func_8029A018(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 8029A030-8029A048 294970 0018+00 2/2 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q312JASBNKParser4Ver05TInst>__FPCvUl */
extern "C" void func_8029A030(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80431B70-80431B7C 05E890 000C+00 1/1 0/0 0/0 .bss @1065 */
static u8 lit_1065[12];
/* 80431B7C-80431B90 05E89C 0010+04 1/1 0/0 0/0 .bss
* memPool___46JASPoolAllocObject_MultiThreaded<10JASChannel> */
static u8 data_80431B7C[16 + 4 /* padding */];
/* 8045128C-80451290 00078C 0004+00 1/1 0/0 0/0 .sbss None */
static u8 data_8045128C[4];
/* 8029A048-8029A0A0 294988 0058+00 0/0 1/0 0/0 .text __sinit_JASBNKParser_cpp */
void __sinit_JASBNKParser_cpp() {
// NONMATCHING
}
#pragma push
#pragma force_active on
REGISTER_CTORS(0x8029A048, __sinit_JASBNKParser_cpp);
#pragma pop
+177
View File
@@ -0,0 +1,177 @@
//
// Generated By: dol2asm
// Translation Unit: JASBank
//
#include "JSystem/JAudio2/JASBank.h"
#include "JSystem/JAudio2/JASChannel.h"
#include "dol2asm.h"
//
// Types:
//
//
// Forward References:
//
extern "C" void noteOn__7JASBankFPC7JASBankiUcUcUsPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv();
extern "C" void noteOnOsc__7JASBankFiUcUcUsPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv();
//
// External References:
//
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void func_802978DC(void* _this);
extern "C" void __ct__10JASChannelFPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv();
extern "C" void play__10JASChannelFv();
extern "C" void setOscInit__10JASChannelFUlPCQ213JASOscillator4Data();
extern "C" void getDacRate__9JASDriverFv();
extern "C" void __register_global_object();
extern "C" void _savegpr_23();
extern "C" void _savegpr_25();
extern "C" void _restgpr_23();
extern "C" void _restgpr_25();
extern "C" extern u8 data_80431B34[16 + 4 /* padding */];
extern "C" extern u8 struct_80451260[8];
//
// Declarations:
//
/* ############################################################################################## */
/* 80431B48-80431B58 05E868 000C+04 2/2 0/0 0/0 .bss @156 */
static u8 lit_156[12 + 4 /* padding */];
/* 80455630-80455634 003C30 0004+00 1/1 0/0 0/0 .sdata2 @248 */
SECTION_SDATA2 static f32 lit_248 = 1.0f;
/* 80455634-80455638 003C34 0004+00 1/1 0/0 0/0 .sdata2 @249 */
SECTION_SDATA2 static u8 lit_249[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 80455638-8045563C 003C38 0004+00 1/1 0/0 0/0 .sdata2 @250 */
SECTION_SDATA2 static f32 lit_250 = 0.5f;
/* 80297930-80297C40 292270 0310+00 0/0 1/1 0/0 .text
* noteOn__7JASBankFPC7JASBankiUcUcUsPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv */
// vtables for JASWaveBank, JASWaveHandle
#ifdef NONMATCHING
JASChannel* JASBank::noteOn(JASBank const* param_0, int param_1, u8 param_2, u8 param_3, u16 param_4,
void (*param_5)(u32, JASChannel*, JASDsp::TChannel*, void*),
void* param_6) {
if (param_1 >= 0xf0) {
return noteOnOsc(param_1 - 0xf0, param_2, param_3, param_4, param_5, param_6);
}
if (!param_0) {
return NULL;
}
JASInstParam stack_60;
if (!param_0->getInstParam(param_1, param_2, param_3, &stack_60)) {
return NULL;
}
JASWaveBank* waveBank = param_0->getWaveBank();
if (!waveBank) {
return NULL;
}
JASWaveHandle* waveHandle = waveBank->getWaveHandle(stack_60.field_0x1a);
if (!waveHandle) {
return NULL;
}
const JASWaveInfo* waveInfo = waveHandle->getWaveInfo();
if (!waveInfo) {
return NULL;
}
int wavePtr = waveHandle->getWavePtr();
if (!wavePtr) {
return NULL;
}
JASChannel* channel = new JASChannel(param_5, param_6);
if (!channel) {
return NULL;
}
channel->setPriority(param_4);
channel->field_0xdc.field_0x4 = *waveInfo;
channel->field_0x104 = wavePtr;
channel->field_0xdc.field_0x0 = stack_60.field_0x1c;
channel->setBankDisposeID(param_0);
channel->setInitPitch(stack_60.mPitch * (waveInfo->field_0x04 / JASDriver::getDacRate()));
if (stack_60.field_0x1e == 0) {
channel->setKey(param_2 - waveInfo->field_0x01);
}
channel->setInitVolume(stack_60.mVolume);
channel->setVelocity(param_3);
channel->setInitPan(stack_60.mPan);
channel->setInitFxmix(stack_60.mFxMix);
channel->setInitDolby(stack_60.mDolby);
for (u32 i = 0; i < stack_60.field_0x1d; i++) {
channel->setOscInit(i, stack_60.field_0x14[i]);
}
channel->setDirectRelease(stack_60.field_0x18);
if (!channel->play()) {
return NULL;
}
return channel;
}
#else
JASChannel* JASBank::noteOn(JASBank const* param_0, int param_1, u8 param_2, u8 param_3, u16 param_4,
void (*param_5)(u32, JASChannel*, JASDsp::TChannel*, void*),
void* param_6) {
// NONMATCHING
}
#endif
/* ############################################################################################## */
/* 8039B190-8039B19C 0277F0 000C+00 1/0 0/0 0/0 .rodata OSC_RELEASE_TABLE$260 */
SECTION_RODATA static JASOscillator::Point const OSC_RELEASE_TABLE[2] = {
{0x0001, 0x000A, 0x0000},
{0x000F, 0x0000, 0x0000},
};
COMPILER_STRIP_GATE(0x8039B190, &OSC_RELEASE_TABLE);
/* 8039B19C-8039B1B8 -00001 0018+04 1/1 0/0 0/0 .rodata OSC_ENV$261 */
SECTION_RODATA static const JASOscillator::Data OSC_ENV = {
0, 1.0f, NULL, OSC_RELEASE_TABLE, 1.0f, 0.0f,
};
COMPILER_STRIP_GATE(0x8039B19C, &OSC_ENV);
/* 8045563C-80455640 003C3C 0004+00 1/1 0/0 0/0 .sdata2 @290 */
SECTION_SDATA2 static f32 lit_290 = 16736.015625f;
/* 80297C40-80297D78 292580 0138+00 1/1 0/0 0/0 .text
* noteOnOsc__7JASBankFiUcUcUsPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv */
// wild ~JASMemPool_MultiThreaded<JASChannel> destructor appeared!
#ifdef NONMATCHING
JASChannel* JASBank::noteOnOsc(int param_0, u8 param_1, u8 param_2, u16 param_3,
void (*param_4)(u32, JASChannel*, JASDsp::TChannel*, void*),
void* param_5) {
JASChannel* channel = new JASChannel(param_4, param_5);
if (!channel) {
return NULL;
}
channel->setPriority(param_3);
channel->field_0x104 = param_0;
channel->field_0xdc.field_0x0 = 2;
channel->setInitPitch(16736.02f / JASDriver::getDacRate());
channel->setKey(param_1 - channel->field_0xdc.field_0x4.field_0x01);
channel->setVelocity(param_2);
channel->setOscInit(0, &OSC_ENV);
if (!channel->play()) {
return NULL;
}
return channel;
}
#else
JASChannel* JASBank::noteOnOsc(int param_0, u8 param_1, u8 param_2, u16 param_3,
void (*param_4)(u32, JASChannel*, JASDsp::TChannel*, void*),
void* param_5) {
// NONMATCHING
}
#endif
+120
View File
@@ -0,0 +1,120 @@
//
// Generated By: dol2asm
// Translation Unit: JASBasicBank
//
#include "JSystem/JAudio2/JASBasicBank.h"
#include "dol2asm.h"
//
// Types:
//
struct JKRHeap {};
struct JASInstParam {};
struct JASInst {};
struct JASCalc {
/* 8028F480 */ void bzero(void*, u32);
};
struct JASBasicBank {
/* 80297D78 */ JASBasicBank();
/* 80297DA4 */ void newInstTable(u8, JKRHeap*);
/* 80297E00 */ void getInstParam(int, int, int, JASInstParam*) const;
/* 80297E68 */ void setInst(int, JASInst*);
/* 80297E80 */ void getInst(int) const;
/* 80297F0C */ ~JASBasicBank();
/* 80297F68 */ void getType() const;
};
struct JASBank {
/* 80297EC4 */ ~JASBank();
};
//
// Forward References:
//
extern "C" void __ct__12JASBasicBankFv();
extern "C" void newInstTable__12JASBasicBankFUcP7JKRHeap();
extern "C" void getInstParam__12JASBasicBankCFiiiP12JASInstParam();
extern "C" void setInst__12JASBasicBankFiP7JASInst();
extern "C" void getInst__12JASBasicBankCFi();
extern "C" void __dt__7JASBankFv();
extern "C" void __dt__12JASBasicBankFv();
extern "C" void getType__12JASBasicBankCFv();
//
// External References:
//
extern "C" void bzero__7JASCalcFPvUl();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void __dl__FPv();
extern "C" void _savegpr_29();
extern "C" void _restgpr_29();
//
// Declarations:
//
/* ############################################################################################## */
/* 803C76A8-803C76BC 0247C8 0014+00 2/2 0/0 0/0 .data __vt__12JASBasicBank */
SECTION_DATA extern void* __vt__12JASBasicBank[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__12JASBasicBankFv,
(void*)getInstParam__12JASBasicBankCFiiiP12JASInstParam,
(void*)getType__12JASBasicBankCFv,
};
/* 803C76BC-803C76D0 0247DC 0014+00 3/3 2/2 0/0 .data __vt__7JASBank */
SECTION_DATA extern void* __vt__7JASBank[5] = {
(void*)NULL /* RTTI */, (void*)NULL, (void*)__dt__7JASBankFv, (void*)NULL, (void*)NULL,
};
/* 80297D78-80297DA4 2926B8 002C+00 0/0 2/2 0/0 .text __ct__12JASBasicBankFv */
JASBasicBank::JASBasicBank() {
// NONMATCHING
}
/* 80297DA4-80297E00 2926E4 005C+00 0/0 2/2 0/0 .text newInstTable__12JASBasicBankFUcP7JKRHeap */
void JASBasicBank::newInstTable(u8 param_0, JKRHeap* param_1) {
// NONMATCHING
}
/* 80297E00-80297E68 292740 0068+00 1/0 0/0 0/0 .text
* getInstParam__12JASBasicBankCFiiiP12JASInstParam */
void JASBasicBank::getInstParam(int param_0, int param_1, int param_2,
JASInstParam* param_3) const {
// NONMATCHING
}
/* 80297E68-80297E80 2927A8 0018+00 0/0 2/2 0/0 .text setInst__12JASBasicBankFiP7JASInst
*/
void JASBasicBank::setInst(int param_0, JASInst* param_1) {
// NONMATCHING
}
/* 80297E80-80297EC4 2927C0 0044+00 1/1 1/1 0/0 .text getInst__12JASBasicBankCFi */
void JASBasicBank::getInst(int param_0) const {
// NONMATCHING
}
/* 80297EC4-80297F0C 292804 0048+00 1/0 0/0 0/0 .text __dt__7JASBankFv */
JASBank::~JASBank() {
// NONMATCHING
}
/* 80297F0C-80297F68 29284C 005C+00 1/0 0/0 0/0 .text __dt__12JASBasicBankFv */
JASBasicBank::~JASBasicBank() {
// NONMATCHING
}
/* 80297F68-80297F74 2928A8 000C+00 1/0 0/0 0/0 .text getType__12JASBasicBankCFv */
void JASBasicBank::getType() const {
// NONMATCHING
}
+76
View File
@@ -0,0 +1,76 @@
//
// JASBasicInst
//
#include "JSystem/JAudio2/JASBasicInst.h"
#include "JSystem/JAudio2/JASCalc.h"
#include "JSystem/JKernel/JKRHeap.h"
/* 80298014-8029807C 292954 0068+00 0/0 2/2 0/0 .text __ct__12JASBasicInstFv */
JASBasicInst::JASBasicInst() {
mVolume = 1.0;
mPitch = 1.0;
mKeymapCount = 0;
mKeymap = NULL;
JASCalc::bzero(field_0xc, sizeof(field_0xc));
}
/* 8029807C-802980F8 2929BC 007C+00 1/0 0/0 0/0 .text __dt__12JASBasicInstFv */
JASBasicInst::~JASBasicInst() {
delete[] mKeymap;
}
/* 802980F8-8029819C 292A38 00A4+00 1/0 0/0 0/0 .text getParam__12JASBasicInstCFiiP12JASInstParam
*/
bool JASBasicInst::getParam(int param_0, int param_1, JASInstParam* param_2) const {
param_2->field_0x1c = 0;
param_2->field_0x1e = 0;
param_2->field_0x14 = (JASOscillator::Data**)&field_0xc;
param_2->field_0x1d = 2;
param_2->mVolume = mVolume;
param_2->mPitch = mPitch;
TKeymap* keyMap = NULL;
for (int i = 0; i < mKeymapCount; i++) {
if (param_0 <= mKeymap[i].field_0x0) {
keyMap = &mKeymap[i];
break;
}
}
if (keyMap == NULL) {
return false;
}
param_2->mVolume *= keyMap->field_0x8;
param_2->mPitch *= keyMap->field_0xc;
param_2->field_0x1a = keyMap->field_0x4;
return true;
}
/* 8029819C-8029821C 292ADC 0080+00 0/0 2/2 0/0 .text
* setKeyRegionCount__12JASBasicInstFUlP7JKRHeap */
void JASBasicInst::setKeyRegionCount(u32 count, JKRHeap* param_1) {
delete [] mKeymap;
mKeymap = new (param_1, 0) TKeymap[count];
mKeymapCount = count;
}
/* 8029821C-8029822C 292B5C 0010+00 0/0 2/2 0/0 .text
* setOsc__12JASBasicInstFiPCQ213JASOscillator4Data */
void JASBasicInst::setOsc(int param_0, JASOscillator::Data const* param_1) {
field_0xc[param_0] = param_1;
}
/* 8029822C-80298250 292B6C 0024+00 0/0 2/2 0/0 .text getKeyRegion__12JASBasicInstFi */
JASBasicInst::TKeymap* JASBasicInst::getKeyRegion(int param_0) {
if (param_0 >= mKeymapCount) {
return NULL;
}
return mKeymap + param_0;
}
/* 80298250-8029828C 292B90 003C+00 2/2 0/0 0/0 .text __dt__Q212JASBasicInst7TKeymapFv */
JASBasicInst::TKeymap::~TKeymap() {
}
+361
View File
@@ -0,0 +1,361 @@
//
// 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:
//
/* ############################################################################################## */
/* 803C7728-803C773C 024848 0014+00 2/2 0/0 0/0 .data __vt__Q216JASBasicWaveBank11TWaveHandle */
SECTION_DATA extern void* __vt__Q216JASBasicWaveBank11TWaveHandle[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__Q216JASBasicWaveBank11TWaveHandleFv,
(void*)getWaveInfo__Q216JASBasicWaveBank11TWaveHandleCFv,
(void*)getWavePtr__Q216JASBasicWaveBank11TWaveHandleCFv,
};
/* 803C773C-803C7754 02485C 0018+00 2/2 0/0 0/0 .data __vt__Q216JASBasicWaveBank10TWaveGroup */
SECTION_DATA extern void* __vt__Q216JASBasicWaveBank10TWaveGroup[6] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__Q216JASBasicWaveBank10TWaveGroupFv,
(void*)onDispose__10JASWaveArcFv,
(void*)onLoadDone__Q216JASBasicWaveBank10TWaveGroupFv,
(void*)onEraseDone__Q216JASBasicWaveBank10TWaveGroupFv,
};
/* 803C7754-803C7768 024874 0014+00 3/3 2/2 0/0 .data __vt__13JASWaveHandle */
SECTION_DATA extern void* __vt__13JASWaveHandle[5] = {
(void*)NULL /* RTTI */, (void*)NULL, (void*)__dt__13JASWaveHandleFv, (void*)NULL, (void*)NULL,
};
/* 803C7768-803C7780 024888 0018+00 2/2 0/0 0/0 .data __vt__16JASBasicWaveBank */
SECTION_DATA extern void* __vt__16JASBasicWaveBank[6] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__16JASBasicWaveBankFv,
(void*)getWaveHandle__16JASBasicWaveBankCFUl,
(void*)getWaveArc__16JASBasicWaveBankFUl,
(void*)getArcCount__16JASBasicWaveBankCFv,
};
/* 803C7780-803C7798 0248A0 0018+00 3/3 2/2 0/0 .data __vt__11JASWaveBank */
SECTION_DATA extern void* __vt__11JASWaveBank[6] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__11JASWaveBankFv,
(void*)NULL,
(void*)NULL,
(void*)NULL,
};
/* 802984F8-80298558 292E38 0060+00 0/0 1/1 0/0 .text __ct__16JASBasicWaveBankFv */
// vtable order
#ifdef NONMATCHING
JASBasicWaveBank::JASBasicWaveBank() {
mWaveTable = NULL;
mWaveGroupArray = NULL;
mHandleCount = 0;
mGroupCount = 0;
OSInitMutex(&field_0x4);
}
#else
JASBasicWaveBank::JASBasicWaveBank() {
// NONMATCHING
}
#endif
/* 80298558-802985E4 292E98 008C+00 1/0 0/0 0/0 .text __dt__16JASBasicWaveBankFv */
// vtable order
#ifdef NONMATCHING
JASBasicWaveBank::~JASBasicWaveBank() {
delete[] mWaveTable;
delete[] mWaveGroupArray;
}
#else
JASBasicWaveBank::~JASBasicWaveBank() {
// NONMATCHING
}
#endif
/* 802985E4-80298640 292F24 005C+00 3/2 0/0 0/0 .text __dt__Q216JASBasicWaveBank11TWaveHandleFv */
// vtable order
#ifdef NONMATCHING
JASBasicWaveBank::TWaveHandle::~TWaveHandle() {}
#else
JASBasicWaveBank::TWaveHandle::~TWaveHandle() {
// NONMATCHING
}
#endif
/* 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 */
// instruction order
#ifdef NONMATCHING
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 = &param_0->base.mHeap;
handle->field_0x4.field_0x20 = &param_0->base._48;
handle->field_0x4.field_0x08 = param_0->mCtrlWaveArray[i].field_0x4;
}
}
}
#else
void JASBasicWaveBank::incWaveTable(JASBasicWaveBank::TWaveGroup const* param_0) {
// NONMATCHING
}
#endif
/* ############################################################################################## */
/* 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 == &param_0->base.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 */
// vtable order
#ifdef NONMATCHING
JASBasicWaveBank::TWaveGroup::TWaveGroup() {
mBank = NULL;
mCtrlWaveArray = NULL;
mWaveCount = 0;
}
#else
JASBasicWaveBank::TWaveGroup::TWaveGroup() {
// NONMATCHING
}
#endif
/* 80298A0C-80298A84 29334C 0078+00 3/2 0/0 0/0 .text __dt__Q216JASBasicWaveBank10TWaveGroupFv */
// vtable order
#ifdef NONMATCHING
JASBasicWaveBank::TWaveGroup::~TWaveGroup() {
delete[] mCtrlWaveArray;
}
#else
JASBasicWaveBank::TWaveGroup::~TWaveGroup() {
// NONMATCHING
}
#endif
/* 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;
}
/* 80298B88-80298BD0 2934C8 0048+00 1/0 0/0 0/0 .text __dt__11JASWaveBankFv */
// JASWaveBank::~JASWaveBank() {
void __dt__11JASWaveBankFv() {
// NONMATCHING
}
/* 80298BD0-80298C18 293510 0048+00 1/0 0/0 0/0 .text __dt__13JASWaveHandleFv */
// JASWaveHandle::~JASWaveHandle() {
void __dt__13JASWaveHandleFv() {
// NONMATCHING
}
/* 80298C18-80298C4C 293558 0034+00 1/1 0/0 0/0 .text __ct__Q216JASBasicWaveBank11TWaveHandleFv */
// JASBasicWaveBank::TWaveHandle::TWaveHandle() {
void __ct__Q216JASBasicWaveBank11TWaveHandleFv() {
// NONMATCHING
}
/* 80298C4C-80298C64 29358C 0018+00 1/1 0/0 0/0 .text __ct__Q216JASBasicWaveBank14TGroupWaveInfoFv
*/
// JASBasicWaveBank::TGroupWaveInfo::TGroupWaveInfo() {
void __ct__Q216JASBasicWaveBank14TGroupWaveInfoFv() {
// NONMATCHING
}
/* 80298C64-80298C6C 2935A4 0008+00 1/0 0/0 0/0 .text
* getWaveInfo__Q216JASBasicWaveBank11TWaveHandleCFv */
// JASWaveInfo* JASBasicWaveBank::TWaveHandle::getWaveInfo() const {
void getWaveInfo__Q216JASBasicWaveBank11TWaveHandleCFv() {
// NONMATCHING
}
/* 80298C6C-80298C8C 2935AC 0020+00 1/0 0/0 0/0 .text getWaveArc__16JASBasicWaveBankFUl
*/
// JASWaveArc* JASBasicWaveBank::getWaveArc(u32 param_0) {
void getWaveArc__16JASBasicWaveBankFUl() {
// NONMATCHING
}
/* 80298C8C-80298C94 2935CC 0008+00 1/0 0/0 0/0 .text getArcCount__16JASBasicWaveBankCFv
*/
// u32 JASBasicWaveBank::getArcCount() const {
void getArcCount__16JASBasicWaveBankCFv() {
// NONMATCHING
}
+332
View File
@@ -0,0 +1,332 @@
//
// JASCalc
//
#include "JSystem/JAudio2/JASCalc.h"
#include "dolphin/os/OSCache.h"
#include "math.h"
#include "limits.h"
/* 8028F2E8-8028F318 289C28 0030+00 0/0 1/1 0/0 .text imixcopy__7JASCalcFPCsPCsPsUl */
void JASCalc::imixcopy(const s16 *s1, const s16 *s2, s16 *dst, u32 n) {
for (n; n != 0; n--) {
*dst++ = *((s16 *)s1)++;
*dst++ = *((s16 *)s2)++;
}
}
/* 8028F318-8028F354 289C58 003C+00 1/1 0/0 0/0 .text bcopyfast__7JASCalcFPCvPvUl */
void JASCalc::bcopyfast(const void *src, void *dest, u32 size) {
u32 copy1, copy2, copy3, copy4;
u32 *usrc = (u32 *)src;
u32 *udest = (u32 *)dest;
for (size = size / (4 * sizeof(u32)); size != 0; size--) {
copy1 = *((u32 *)usrc)++;
copy2 = *((u32 *)usrc)++;
copy3 = *((u32 *)usrc)++;
copy4 = *((u32 *)usrc)++;
*udest++ = copy1;
*udest++ = copy2;
*udest++ = copy3;
*udest++ = copy4;
}
}
/* 8028F354-8028F454 289C94 0100+00 0/0 3/3 0/0 .text bcopy__7JASCalcFPCvPvUl */
void JASCalc::bcopy(const void *src, void *dest, u32 size) {
u32 *usrc;
u32 *udest;
u8 *bsrc = (u8 *)src;
u8 *bdest = (u8 *)dest;
u8 endbitsSrc = (reinterpret_cast<u32>(bsrc) & 0x03);
u8 enbitsDst = (reinterpret_cast<u32>(bdest) & 0x03);
if ((endbitsSrc) == (enbitsDst) && (size & 0x0f) == 0) {
bcopyfast(src, dest, size);
}
else if ((endbitsSrc == enbitsDst) && (size >= 16)) {
if (endbitsSrc != 0) {
for (endbitsSrc = 4 - endbitsSrc; endbitsSrc != 0; endbitsSrc--) {
*bdest++ = (u32)*bsrc++;
size--;
}
}
udest = (u32 *)bdest;
usrc = (u32 *)bsrc;
for (; size >= 4; size -= 4) {
*udest++ = *usrc++;
}
if (size != 0) {
bdest = (u8 *)udest;
bsrc = (u8 *)usrc;
for (; size != 0; size--) {
*bdest++ = (u32)*bsrc++;
}
}
}
else {
for (; size != 0; size--) {
*bdest++ = (u32)*bsrc++;
}
}
}
/* 8028F454-8028F480 289D94 002C+00 1/1 0/0 0/0 .text bzerofast__7JASCalcFPvUl */
void JASCalc::bzerofast(void *dest, u32 size) {
u32 *udest = (u32 *)dest;
for (size = size / (4 * sizeof(u32)); size != 0; size--) {
*udest++ = 0;
*udest++ = 0;
*udest++ = 0;
*udest++ = 0;
}
}
/* 8028F480-8028F578 289DC0 00F8+00 0/0 6/6 0/0 .text bzero__7JASCalcFPvUl */
void JASCalc::bzero(void *dest, u32 size) {
u32 *udest;
u8 *bdest = (u8 *)dest;
if ((size & 0x1f) == 0 && (reinterpret_cast<u32>(dest) & 0x1f) == 0) {
DCZeroRange(dest, size);
return;
}
u8 alignedbitsDst = reinterpret_cast<u32>(bdest) & 0x3;
if ((size & 0xf) == 0 && alignedbitsDst == 0) {
bzerofast(dest, size);
return;
}
if (size >= 16) {
if (alignedbitsDst != 0) {
for (alignedbitsDst = 4 - alignedbitsDst; alignedbitsDst != 0; alignedbitsDst--) {
*bdest++ = 0;
size--;
}
}
udest = (u32 *)bdest;
for (; size >= 4; size -= 4) {
*udest++ = 0;
}
if (size != 0) {
bdest = (u8 *)udest;
for (; size != 0; size--) {
*bdest++ = 0;
}
}
}
else {
for (; size != 0; size--) {
*bdest++ = 0;
}
}
}
/* ############################################################################################## */
/* 8039ABB8-8039AFB8 027218 0400+00 0/0 4/4 0/0 .rodata CUTOFF_TO_IIR_TABLE__7JASCalc */
s16 const JASCalc::CUTOFF_TO_IIR_TABLE[128][4] = {
0x0F5C, 0x0A3D, 0x4665, 0x1E73,
0x0F5E, 0x0A3D, 0x4664, 0x1E73,
0x0F63, 0x0A3C, 0x4661, 0x1E71,
0x0F6C, 0x0A3C, 0x465B, 0x1E6F,
0x0F79, 0x0A3A, 0x4653, 0x1E6B,
0x0F89, 0x0A39, 0x4649, 0x1E67,
0x0F9C, 0x0A37, 0x463D, 0x1E62,
0x0FB4, 0x0A35, 0x462E, 0x1E5B,
0x0FCE, 0x0A33, 0x461D, 0x1E54,
0x0FED, 0x0A30, 0x460A, 0x1E4C,
0x100F, 0x0A2D, 0x45F5, 0x1E43,
0x1034, 0x0A29, 0x45DE, 0x1E39,
0x105D, 0x0A26, 0x45C4, 0x1E2D,
0x108A, 0x0A22, 0x45A8, 0x1E21,
0x10BA, 0x0A1D, 0x458A, 0x1E14,
0x10EE, 0x0A18, 0x456A, 0x1E06,
0x1126, 0x0A13, 0x4547, 0x1DF7,
0x1161, 0x0A0E, 0x4522, 0x1DE7,
0x119F, 0x0A08, 0x44FB, 0x1DD6,
0x11E1, 0x0A02, 0x44D2, 0x1DC5,
0x1227, 0x09FC, 0x44A6, 0x1DB2,
0x1270, 0x09F5, 0x4478, 0x1D9E,
0x12BD, 0x09EE, 0x4448, 0x1D89,
0x130E, 0x09E7, 0x4416, 0x1D73,
0x1362, 0x09DF, 0x43E1, 0x1D5D,
0x13B9, 0x09D7, 0x43AB, 0x1D45,
0x1415, 0x09CF, 0x4372, 0x1D2C,
0x1473, 0x09C7, 0x4336, 0x1D13,
0x14D6, 0x09BE, 0x42F9, 0x1CF8,
0x153C, 0x09B4, 0x42B9, 0x1CDD,
0x15A5, 0x09AB, 0x4277, 0x1CC0,
0x1612, 0x09A1, 0x4233, 0x1CA3,
0x1683, 0x0997, 0x41ED, 0x1C84,
0x16F7, 0x098C, 0x41A4, 0x1C65,
0x176F, 0x0981, 0x4159, 0x1C44,
0x17EA, 0x0976, 0x410C, 0x1C23,
0x1869, 0x096A, 0x40BD, 0x1C01,
0x18EB, 0x095F, 0x406B, 0x1BDD,
0x1972, 0x0952, 0x4018, 0x1BB9,
0x19FB, 0x0946, 0x3FC2, 0x1B94,
0x1A88, 0x0939, 0x3F69, 0x1B6E,
0x1B19, 0x092C, 0x3F0F, 0x1B47,
0x1BAE, 0x091E, 0x3EB2, 0x1B1E,
0x1C46, 0x0911, 0x3E53, 0x1AF5,
0x1CE1, 0x0902, 0x3DF2, 0x1ACB,
0x1D80, 0x08F4, 0x3D8E, 0x1AA0,
0x1E23, 0x08E5, 0x3D29, 0x1A74,
0x1EC9, 0x08D6, 0x3CC1, 0x1A47,
0x1F73, 0x08C7, 0x3C57, 0x1A19,
0x2020, 0x08B7, 0x3BEA, 0x19EB,
0x20D1, 0x08A7, 0x3B7C, 0x19BB,
0x2186, 0x0896, 0x3B0B, 0x198A,
0x223E, 0x0886, 0x3A98, 0x1958,
0x22FA, 0x0875, 0x3A22, 0x1925,
0x23B9, 0x0863, 0x39AB, 0x18F2,
0x247C, 0x0851, 0x3931, 0x18BD,
0x2542, 0x083F, 0x38B5, 0x1887,
0x260C, 0x082D, 0x3837, 0x1851,
0x26DA, 0x081A, 0x37B6, 0x1819,
0x27AB, 0x0807, 0x3734, 0x17E1,
0x2880, 0x07F4, 0x36AF, 0x17A7,
0x2958, 0x07E0, 0x3628, 0x176D,
0x2A34, 0x07CC, 0x359E, 0x1731,
0x2B14, 0x07B8, 0x3512, 0x16F5,
0x2BF7, 0x07A3, 0x3485, 0x16B7,
0x2CDD, 0x078E, 0x33F4, 0x1679,
0x2DC8, 0x0779, 0x3362, 0x163A,
0x2EB5, 0x0764, 0x32CD, 0x15FA,
0x2FA7, 0x074E, 0x3237, 0x15B8,
0x309C, 0x0737, 0x319E, 0x1576,
0x3194, 0x0721, 0x3102, 0x1533,
0x3290, 0x070A, 0x3065, 0x14EF,
0x3390, 0x06F3, 0x2FC5, 0x14AA,
0x3493, 0x06DB, 0x2F23, 0x1464,
0x359A, 0x06C3, 0x2E7F, 0x141C,
0x36A4, 0x06AB, 0x2DD8, 0x13D4,
0x37B2, 0x0692, 0x2D2F, 0x138C,
0x38C4, 0x067A, 0x2C85, 0x1342,
0x39D9, 0x0660, 0x2BD7, 0x12F7,
0x3AF1, 0x0647, 0x2B28, 0x12AB,
0x3C0E, 0x062D, 0x2A76, 0x125E,
0x3D2E, 0x0613, 0x29C2, 0x1210,
0x3E51, 0x05F8, 0x290C, 0x11C1,
0x3F78, 0x05DE, 0x2854, 0x1172,
0x40A3, 0x05C2, 0x2799, 0x1121,
0x41D1, 0x05A7, 0x26DC, 0x10CF,
0x4302, 0x058B, 0x261D, 0x107D,
0x4438, 0x056F, 0x255C, 0x1029,
0x4571, 0x0553, 0x2499, 0x0FD4,
0x46AD, 0x0536, 0x23D3, 0x0F7F,
0x47ED, 0x0519, 0x230B, 0x0F28,
0x4931, 0x04FB, 0x2241, 0x0ED1,
0x4A78, 0x04DE, 0x2174, 0x0E78,
0x4BC2, 0x04C0, 0x20A5, 0x0E1F,
0x4D11, 0x04A1, 0x1FD4, 0x0DC5,
0x4E63, 0x0482, 0x1F01, 0x0D69,
0x4FB8, 0x0463, 0x1E2C, 0x0D0D,
0x5111, 0x0444, 0x1D54, 0x0CB0,
0x526E, 0x0424, 0x1C7A, 0x0C51,
0x53CE, 0x0404, 0x1B9E, 0x0BF2,
0x5532, 0x03E4, 0x1AC0, 0x0B92,
0x5699, 0x03C3, 0x19DF, 0x0B31,
0x5804, 0x03A2, 0x18FD, 0x0ACF,
0x5972, 0x0381, 0x1818, 0x0A6C,
0x5AE5, 0x035F, 0x1730, 0x0A08,
0x5C5A, 0x033D, 0x1647, 0x09A3,
0x5DD3, 0x031B, 0x155B, 0x093D,
0x5F50, 0x02F9, 0x146D, 0x08D6,
0x60D1, 0x02D6, 0x137D, 0x086E,
0x6255, 0x02B2, 0x128A, 0x0805,
0x63DC, 0x028F, 0x1196, 0x079B,
0x6567, 0x026B, 0x109F, 0x0730,
0x66F6, 0x0247, 0x0FA6, 0x06C5,
0x6888, 0x0222, 0x0EAA, 0x0658,
0x6A1E, 0x01FD, 0x0DAD, 0x05EA,
0x6BB7, 0x01D8, 0x0CAD, 0x057B,
0x6D54, 0x01B2, 0x0BAB, 0x050C,
0x6EF5, 0x018D, 0x0AA6, 0x049B,
0x7099, 0x0166, 0x09A0, 0x042A,
0x7241, 0x0140, 0x0897, 0x03B7,
0x73EC, 0x0119, 0x078C, 0x0344,
0x759B, 0x00F2, 0x067F, 0x02CF,
0x774D, 0x00CA, 0x056F, 0x025A,
0x7903, 0x00A3, 0x045D, 0x01E3,
0x7ABD, 0x007A, 0x0349, 0x016C,
0x7C7A, 0x0052, 0x0233, 0x00F4,
0x7E3B, 0x0029, 0x011B, 0x007A,
0x7FFF, 0x0000, 0x0000, 0x0000,
};
// currently required because of missing functions
// JASCalc::hannWindow(short *, unsigned long)
// JASCalc::hammWindow(short *, unsigned long)
// JASCalc::fft(float *, float *, unsigned long, long)
f32 JASCalc::fake1() { return 0.5f; }
f32 JASCalc::fake2(long x) { return JASCalc::clamp<s16, long>(x); }
f32 JASCalc::fake3() { return 0.0f; }
/* 8028F578-8028F69C 289EB8 0124+00 0/0 2/2 0/0 .text pow2__7JASCalcFf */
f32 JASCalc::pow2(f32 x) {
s32 frac_index = 0;
union {
s32 l;
f32 f;
} exponent;
exponent.l = (x >= 0.0f ? (s32)(x - 0.5f) : (s32)(x + 0.5f)); // Shift towards 0 and round
f32 pannedval = x - exponent.l; // strictly between 1.5 and -1.5
// 2^x will not fit in an IEEE-754 float
if(exponent.l > 128) {
return HUGE_VALF;
}
// convert to exponent of IEEE-754 float
exponent.l += 127;
exponent.l <<= 23;
// Calculate the mantissa
static const f32 scale_frac[] = { 0.0f, 0.5f };
// { 1 , 1/sqrt2 }
static const f32 two_to_frac[] = {1.0f, 0.70710677f};
// coefficients of Taylor polynomial of 2^x - 1 at 0:
// 2^x - 1 = (log2) * x + (log2)^2 / 2! * x^2 + ...
static const f32 __two_to_x[] = {
0.6931472f, 0.24022661,
0.055502914f, 0.009625022f,
0.0013131053f, 1.8300806E-4f
};
if (pannedval < 0.0f) {
frac_index += 1;
}
f32 ret = pannedval + scale_frac[frac_index];
// Evaluate Taylor polynomial using Horner's method
ret = ret * (ret * (ret * (ret * (ret * (ret * __two_to_x[5] + __two_to_x[4]) +
__two_to_x[3]) + __two_to_x[2]) + __two_to_x[1]) + __two_to_x[0]);
// 2^n * (corrected mantissa)
ret = exponent.f * (0.75f * two_to_frac[frac_index] + ((0.25f + ret) * two_to_frac[frac_index]));
return ret;
}
template <>
s16 JASCalc::clamp(s32 x) {
if (std::numeric_limits<s16>::min() >= x)
return std::numeric_limits<s16>::min();
if (x >= std::numeric_limits<s16>::max())
return std::numeric_limits<s16>::max();
return x;
}
+63
View File
@@ -0,0 +1,63 @@
//
// Generated By: dol2asm
// Translation Unit: JASCallback
//
#include "JSystem/JAudio2/JASCallback.h"
#include "JSystem/JAudio2/JASCriticalSection.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 8028FFA8-80290030 28A8E8 0088+00 0/0 2/2 0/0 .text regist__14JASCallbackMgrFPFPv_lPv
*/
bool JASCallbackMgr::regist(JASCallback* function, void* argument)
{
JASCriticalSection criticalSection;
for (int i = 0; i < 0x20; i++) {
if (mCallbacks[i].mFunction == NULL) {
mCallbacks[i].mFunction = function;
mCallbacks[i].mArgument = argument;
return true;
}
}
return false;
}
/* 80290030-802900C4 28A970 0094+00 0/0 1/1 0/0 .text reject__14JASCallbackMgrFPFPv_lPv
*/
int JASCallbackMgr::reject(JASCallback* function, void* argument) {
int rejectNum = 0;
JASCriticalSection criticalSection;
for (int i = 0; i < 0x20; i++) {
if (mCallbacks[i].mFunction == function && mCallbacks[i].mArgument == argument) {
mCallbacks[i].mFunction = NULL;
mCallbacks[i].mArgument = NULL;
rejectNum++;
}
}
return rejectNum;
}
/* 802900C4-80290140 28AA04 007C+00 0/0 3/3 0/0 .text callback__14JASCallbackMgrFv */
void JASCallbackMgr::callback() {
for (int i = 0; i < 0x20; i++) {
if (mCallbacks[i].mFunction && mCallbacks[i].mFunction(mCallbacks[i].mArgument) < 0) {
mCallbacks[i].mFunction = NULL;
mCallbacks[i].mArgument = NULL;
}
}
}
+628
View File
@@ -0,0 +1,628 @@
//
// Generated By: dol2asm
// Translation Unit: JASChannel
//
#include "JSystem/JAudio2/JASChannel.h"
#include "JSystem/JAudio2/JASAiCtrl.h"
#include "JSystem/JAudio2/JASCalc.h"
#include "JSystem/JAudio2/JASDriverIF.h"
#include "JSystem/JAudio2/JASDSPChannel.h"
#include "JSystem/JSupport/JSupport.h"
#include "JSystem/JMath/JMATrigonometric.h"
#include "JSystem/JGeometry.h"
//
// Forward References:
//
extern "C" void __ct__10JASChannelFPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv();
extern "C" void __dt__10JASChannelFv();
extern "C" void play__10JASChannelFv();
extern "C" void playForce__10JASChannelFv();
extern "C" void release__10JASChannelFUs();
extern "C" void setOscInit__10JASChannelFUlPCQ213JASOscillator4Data();
extern "C" void setMixConfig__10JASChannelFUlUs();
extern "C" void calcEffect__10JASChannelFPCQ210JASChannel9PanVector();
extern "C" void calcPan__10JASChannelFPCQ210JASChannel9PanVector();
extern "C" void effectOsc__10JASChannelFUlPQ213JASOscillator12EffectParams();
extern "C" void setKeySweepTarget__10JASChannelFlUl();
extern "C" void
updateEffectorParam__10JASChannelFPQ26JASDsp8TChannelPUsRCQ213JASOscillator12EffectParams();
extern "C" void dspUpdateCallback__10JASChannelFUlPQ26JASDsp8TChannelPv();
extern "C" void initialUpdateDSPChannel__10JASChannelFPQ26JASDsp8TChannel();
extern "C" void updateDSPChannel__10JASChannelFPQ26JASDsp8TChannel();
extern "C" void updateAutoMixer__10JASChannelFPQ26JASDsp8TChannelffff();
extern "C" void updateMixer__10JASChannelFffffPUs();
extern "C" void free__10JASChannelFv();
extern "C" void initBankDisposeMsgQueue__10JASChannelFv();
extern "C" void receiveBankDisposeMsg__10JASChannelFv();
extern "C" void checkBankDispose__10JASChannelCFv();
extern "C" u8 sBankDisposeMsgQ__10JASChannel[32];
extern "C" u8 sBankDisposeMsg__10JASChannel[64];
extern "C" u8 sBankDisposeList__10JASChannel[64];
extern "C" u8 sBankDisposeListSize__10JASChannel[4 + 4 /* padding */];
//
// External References:
//
extern "C" void pow2__7JASCalcFf();
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void free__17JASGenericMemPoolFPvUl();
extern "C" void func_802978DC(void* _this);
extern "C" void __ct__6JASLfoFv();
extern "C" void getValue__6JASLfoCFv();
extern "C" void incCounter__6JASLfoFf();
extern "C" void resetCounter__6JASLfoFv();
extern "C" void __ct__13JASOscillatorFv();
extern "C" void initStart__13JASOscillatorFPCQ213JASOscillator4Data();
extern "C" void incCounter__13JASOscillatorFf();
extern "C" void getValue__13JASOscillatorCFv();
extern "C" void release__13JASOscillatorFv();
extern "C" void update__13JASOscillatorFv();
extern "C" void getDacRate__9JASDriverFv();
extern "C" void free__13JASDSPChannelFv();
extern "C" void start__13JASDSPChannelFv();
extern "C" void drop__13JASDSPChannelFv();
extern "C" void alloc__13JASDSPChannelFUcPFUlPQ26JASDsp8TChannelPv_lPv();
extern "C" void allocForce__13JASDSPChannelFUcPFUlPQ26JASDsp8TChannelPv_lPv();
extern "C" void setPriority__13JASDSPChannelFUc();
extern "C" void setWaveInfo__Q26JASDsp8TChannelFRC11JASWaveInfoUlUl();
extern "C" void setOscInfo__Q26JASDsp8TChannelFUl();
extern "C" void initAutoMixer__Q26JASDsp8TChannelFv();
extern "C" void setAutoMixer__Q26JASDsp8TChannelFUsUcUcUcUc();
extern "C" void setPitch__Q26JASDsp8TChannelFUs();
extern "C" void setMixerInitVolume__Q26JASDsp8TChannelFUcs();
extern "C" void setMixerVolume__Q26JASDsp8TChannelFUcs();
extern "C" void setPauseFlag__Q26JASDsp8TChannelFUc();
extern "C" void setBusConnect__Q26JASDsp8TChannelFUcUc();
extern "C" void getChannelLevel_dsp__9JASDriverFv();
extern "C" void getOutputMode__9JASDriverFv();
extern "C" void __register_global_object();
extern "C" void __construct_array();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern u8 data_80431B34[16 + 4 /* padding */];
extern "C" u8 sincosTable___5JMath[65536];
extern "C" u32 one__11JASWaveInfo[1 + 1 /* padding */];
extern "C" extern u8 struct_80451260[8];
//
// Declarations:
//
/* 80431B90-80431BB0 05E8B0 0020+00 2/2 0/0 0/0 .bss sBankDisposeMsgQ__10JASChannel */
OSMessageQueue JASChannel::sBankDisposeMsgQ;
/* 80431BB0-80431BF0 05E8D0 0040+00 1/1 0/0 0/0 .bss sBankDisposeMsg__10JASChannel */
OSMessage JASChannel::sBankDisposeMsg[16];
/* 80431BF0-80431C30 05E910 0040+00 2/2 0/3 0/0 .bss sBankDisposeList__10JASChannel */
OSMessage JASChannel::sBankDisposeList[16];
/* 80451298-804512A0 000798 0004+04 3/3 0/0 0/0 .sbss sBankDisposeListSize__10JASChannel
*/
int JASChannel::sBankDisposeListSize;
/* 8029A800-8029A918 295140 0118+00 0/0 3/3 0/0 .text
* __ct__10JASChannelFPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv */
JASChannel::JASChannel(Callback i_callback, void* i_callbackData) :
mStatus(STATUS_INACTIVE),
mDspCh(NULL),
mCallback(i_callback),
mCallbackData(i_callbackData),
mUpdateTimer(0),
mBankDisposeID(NULL),
mKey(0),
mVelocity(0x7f),
mKeySweep(0.0f),
mKeySweepTarget(0.0f),
mKeySweepCount(0),
mSkipSamples(0)
{
field_0xdc.field_0x0 = 0;
field_0x104 = 0;
mMixConfig[0].whole = 0x150;
mMixConfig[1].whole = 0x210;
mMixConfig[2].whole = 0x352;
mMixConfig[3].whole = 0x412;
mMixConfig[4].whole = 0;
mMixConfig[5].whole = 0;
mPriority = 0x13f;
mPauseFlag = false;
}
/* 80431C30-80431C40 05E950 000C+04 1/1 0/2 0/0 .bss @556 */
static u8 lit_556[12 + 4 /* padding */];
/* 8029A918-8029A9F0 295258 00D8+00 5/5 0/0 0/0 .text __dt__10JASChannelFv */
JASChannel::~JASChannel() {
if (mDspCh != NULL) {
mDspCh->drop();
}
if (mCallback != NULL) {
mCallback(CB_STOP, this, NULL, mCallbackData);
}
}
/* 8029A9F0-8029AA60 295330 0070+00 0/0 2/2 0/0 .text play__10JASChannelFv */
int JASChannel::play() {
JASDSPChannel* channel = JASDSPChannel::alloc(JSULoByte(mPriority), dspUpdateCallback, this);
if (channel == NULL) {
delete this;
return 0;
}
mDspCh = channel;
channel->start();
mStatus = STATUS_ACTIVE;
return 1;
}
/* 8029AA60-8029AAD0 2953A0 0070+00 0/0 1/1 0/0 .text playForce__10JASChannelFv */
int JASChannel::playForce() {
JASDSPChannel* channel = JASDSPChannel::allocForce(JSULoByte(mPriority),
dspUpdateCallback, this);
if (channel == NULL) {
delete this;
return 0;
}
mDspCh = channel;
channel->start();
mStatus = STATUS_ACTIVE;
return 1;
}
/* 8029AAD0-8029AB64 295410 0094+00 0/0 4/4 0/0 .text release__10JASChannelFUs */
void JASChannel::release(u16 i_directRelease) {
if (mStatus == STATUS_ACTIVE) {
if (i_directRelease != 0) {
setDirectRelease(i_directRelease);
}
for (u32 i = 0; i < 2; i++) {
if (mOscillators[i].isValid()) {
mOscillators[i].release();
}
}
mDspCh->setPriority(JSUHiByte(mPriority));
mStatus = STATUS_RELEASE;
}
}
/* 8029AB64-8029AB98 2954A4 0034+00 0/0 4/4 0/0 .text
* setOscInit__10JASChannelFUlPCQ213JASOscillator4Data */
void JASChannel::setOscInit(u32 i_index, JASOscillator::Data const* i_data) {
mOscillators[i_index].initStart(i_data);
}
/* 8029AB98-8029ABA8 2954D8 0010+00 0/0 2/2 0/0 .text setMixConfig__10JASChannelFUlUs */
void JASChannel::setMixConfig(u32 i_index, u16 i_config) {
mMixConfig[i_index].whole = i_config;
}
/* 8029ABA8-8029ABC0 2954E8 0018+00 1/1 0/0 0/0 .text
* calcEffect__10JASChannelFPCQ210JASChannel9PanVector */
f32 JASChannel::calcEffect(JASChannel::PanVector const* i_vector) {
return i_vector->mSound + i_vector->mEffect + i_vector->mChannel;
}
/* 8029ABC0-8029ABEC 295500 002C+00 1/1 0/0 0/0 .text
* calcPan__10JASChannelFPCQ210JASChannel9PanVector */
f32 JASChannel::calcPan(JASChannel::PanVector const* i_vector) {
return 0.5f + (i_vector->mSound - 0.5f) + (i_vector->mEffect - 0.5f)
+ (i_vector->mChannel - 0.5f);
}
/* 8029ABEC-8029ACD4 29552C 00E8+00 3/2 0/0 0/0 .text
* effectOsc__10JASChannelFUlPQ213JASOscillator12EffectParams */
void JASChannel::effectOsc(u32 i_index, JASOscillator::EffectParams* i_params) {
f32 value = mOscillators[i_index].getValue();
switch (mOscillators[i_index].getTarget()) {
case JASOscillator::TARGET_PITCH:
i_params->mPitch *= value;
break;
case JASOscillator::TARGET_VOLUME:
i_params->mVolume *= value;
break;
case JASOscillator::TARGET_PAN:
value -= 0.5;
i_params->mPan += value;
break;
case JASOscillator::TARGET_FXMIX:
i_params->mFxMix += value;
break;
case JASOscillator::TARGET_DOLBY:
i_params->mDolby += value;
break;
case JASOscillator::TARGET_5:
i_params->_14 *= value;
break;
case JASOscillator::TARGET_6:
i_params->_18 *= value;
break;
}
}
/* 8029ACD4-8029AD38 295614 0064+00 0/0 1/1 0/0 .text setKeySweepTarget__10JASChannelFlUl
*/
void JASChannel::setKeySweepTarget(s32 i_target, u32 i_count) {
if (i_count == 0) {
mKeySweep = i_target;
} else {
mKeySweep = 0.0f;
mKeySweepTarget = i_target;
}
mKeySweepCount = i_count;
}
/* 8029AD38-8029AF78 295678 0240+00 2/2 0/0 0/0 .text
* updateEffectorParam__10JASChannelFPQ26JASDsp8TChannelPUsRCQ213JASOscillator12EffectParams */
void JASChannel::updateEffectorParam(JASDsp::TChannel* i_channel, u16* i_mixerVolume,
JASOscillator::EffectParams const& i_params) {
PanVector pan_vector, fxmix_vector, dolby_vector;
pan_vector.mSound = mSoundParams.mPan;
pan_vector.mChannel = mParams.mPan;
pan_vector.mEffect = i_params.mPan;
fxmix_vector.mSound = mSoundParams.mFxMix;
fxmix_vector.mChannel = mParams.mFxMix;
fxmix_vector.mEffect = i_params.mFxMix;
dolby_vector.mSound = mSoundParams.mDolby;
dolby_vector.mChannel = mParams.mDolby;
dolby_vector.mEffect = i_params.mDolby;
f32 pan = 0.5f;
f32 dolby = 0.0f;
switch (JASDriver::getOutputMode()) {
case 0:
break;
case 1:
pan = calcPan(&pan_vector);
break;
case 2:
pan = calcPan(&pan_vector);
dolby = calcEffect(&dolby_vector);
break;
}
f32 fxmix = calcEffect(&fxmix_vector);
f32 volume = mVelocity / 127.0f;
volume = volume * volume;
volume = mSoundParams.mVolume * i_params.mVolume * mParams.mVolume
* (i_params._18 * mTremolo.getValue() + 1.0f) * volume;
if (volume < 0.0f) {
volume = 0.0f;
}
pan = JASCalc::clamp01(pan);
fxmix = JASCalc::clamp01(fxmix);
dolby = JASCalc::clamp01(dolby);
if (isDolbyMode()) {
updateAutoMixer(i_channel, volume, pan, fxmix, dolby);
} else {
updateMixer(volume, pan, fxmix, dolby, i_mixerVolume);
}
}
/* 8029AF78-8029B004 2958B8 008C+00 2/2 0/0 0/0 .text
* dspUpdateCallback__10JASChannelFUlPQ26JASDsp8TChannelPv */
s32 JASChannel::dspUpdateCallback(u32 i_type, JASDsp::TChannel* i_channel, void* i_this) {
JASChannel* _this = static_cast<JASChannel*>(i_this);
switch (i_type) {
case JASDSPChannel::CB_PLAY:
return _this->updateDSPChannel(i_channel);
case JASDSPChannel::CB_START:
return _this->initialUpdateDSPChannel(i_channel);
case JASDSPChannel::CB_STOP:
case JASDSPChannel::CB_DROP:
_this->mDspCh->free();
_this->mDspCh = NULL;
delete _this;
return -1;
}
return 0;
}
/* 8029B004-8029B324 295944 0320+00 1/1 0/0 0/0 .text
* initialUpdateDSPChannel__10JASChannelFPQ26JASDsp8TChannel */
s32 JASChannel::initialUpdateDSPChannel(JASDsp::TChannel* i_channel) {
if (isDolbyMode()) {
i_channel->initAutoMixer();
}
if (mCallback != NULL) {
mCallback(CB_START, this, i_channel, mCallbackData);
}
if (field_0xdc.field_0x4.field_0x20[0] == 0) {
mDspCh->free();
mDspCh = NULL;
delete this;
return -1;
}
if (checkBankDispose()) {
mDspCh->free();
mDspCh = NULL;
delete this;
return -1;
}
switch (field_0xdc.field_0x0) {
case 0:
i_channel->setWaveInfo(field_0xdc.field_0x4, field_0x104, mSkipSamples);
break;
case 2:
i_channel->setOscInfo(field_0x104);
break;
}
for (u8 i = 0; i < 6; i++) {
MixConfig mix_config = mMixConfig[i];
u32 output_mode = JASDriver::getOutputMode();
if (output_mode == 0) {
switch (mix_config.parts.upper) {
case 8:
mix_config.parts.upper = 11;
break;
case 9:
mix_config.parts.upper = 2;
break;
}
} else if (output_mode == 1 && mix_config.parts.upper == 8) {
mix_config.parts.upper = 11;
}
i_channel->setBusConnect(i, mix_config.parts.upper);
}
JASOscillator::EffectParams effect_params;
for (u32 i = 0; i < 2; i++) {
if (mOscillators[i].isValid()) {
mOscillators[i].update();
effectOsc(i, &effect_params);
}
}
mVibrate.resetCounter();
mTremolo.resetCounter();
u16 mixer_volume[6];
updateEffectorParam(i_channel, mixer_volume, effect_params);
for (u8 i = 0; i < 6; i++) {
i_channel->setMixerInitVolume(i, mixer_volume[i]);
}
f32 pitch = JASCalc::pow2(mParams.field_0x8 + (mKey + mKeySweep) / 12.0f
+ effect_params._14 * mVibrate.getValue());
pitch = mSoundParams.mPitch * effect_params.mPitch * pitch * mParams.mPitch * 4096.0f;
if (pitch < 0.0f) {
pitch = 0.0f;
}
i_channel->setPitch(pitch);
i_channel->setPauseFlag(mPauseFlag);
i_channel->field_0x066 = 0;
return 0;
}
/* 8029B324-8029B6A0 295C64 037C+00 1/1 0/0 0/0 .text
* updateDSPChannel__10JASChannelFPQ26JASDsp8TChannel */
s32 JASChannel::updateDSPChannel(JASDsp::TChannel* i_channel) {
if (mCallback != NULL) {
mCallback(CB_PLAY, this, i_channel, mCallbackData);
}
if (field_0xdc.field_0x4.field_0x20[0] == 0) {
mDspCh->free();
mDspCh = NULL;
delete this;
return -1;
}
if (checkBankDispose()) {
mDspCh->free();
mDspCh = NULL;
delete this;
return -1;
}
i_channel->setPauseFlag(mPauseFlag);
JASOscillator::EffectParams effect_params;
if (mPauseFlag) {
if (mOscillators[0].isRelease()) {
mDspCh->free();
mDspCh = NULL;
delete this;
return -1;
}
} else {
f32 inc = 32028.5f / JASDriver::getDacRate();
mVibrate.incCounter(inc);
mTremolo.incCounter(inc);
if (mUpdateTimer != 0) {
mUpdateTimer--;
if (mUpdateTimer == 0 && mCallback != NULL) {
mCallback(CB_TIMER, this, i_channel, mCallbackData);
}
}
inc = 48000.0f / JASDriver::getDacRate();
for (u32 i = 0; i < 2; i++) {
if (mOscillators[i].isValid()) {
mOscillators[i].incCounter(inc);
effectOsc(i, &effect_params);
if (i == 0 && mOscillators[i].isStop()) {
mDspCh->free();
mDspCh = NULL;
delete this;
return -1;
}
}
}
}
u16 mixer_volume[6];
updateEffectorParam(i_channel, mixer_volume, effect_params);
for (u8 i = 0; i < 6; i++) {
i_channel->setMixerVolume(i, mixer_volume[i]);
}
f32 pitch = JASCalc::pow2(mParams.field_0x8 + (mKey + mKeySweep) / 12.0f
+ effect_params._14 * mVibrate.getValue());
pitch = mSoundParams.mPitch * effect_params.mPitch * pitch * mParams.mPitch * 4096.0f;
if (pitch < 0.0f) {
pitch = 0.0f;
}
i_channel->setPitch(pitch);
if (!mPauseFlag && mKeySweepCount != 0) {
mKeySweep += (mKeySweepTarget - mKeySweep) / mKeySweepCount;
mKeySweepCount--;
}
return 0;
}
/* 8029B6A0-8029B7D8 295FE0 0138+00 1/1 0/0 0/0 .text
* updateAutoMixer__10JASChannelFPQ26JASDsp8TChannelffff */
void JASChannel::updateAutoMixer(JASDsp::TChannel* i_channel, f32 param_1, f32 param_2,
f32 param_3, f32 param_4) {
if (JASDriver::getOutputMode() == 0) {
param_1 *= 0.707f;
}
f32 fvar1 = JASCalc::clamp01(param_1);
i_channel->setAutoMixer(fvar1 * JASDriver::getChannelLevel_dsp(), param_2 * 127.5f,
param_4 * 127.5f, param_3 * 127.5f, 0);
}
/* 8029B7D8-8029BBFC 296118 0424+00 3/1 0/0 0/0 .text updateMixer__10JASChannelFffffPUs
*/
void JASChannel::updateMixer(f32 i_volume, f32 i_pan, f32 i_fxmix, f32 i_dolby, u16* i_volumeOut) {
for (u32 i = 0; i < 6; i++) {
f32 volume = i_volume;
MixConfig config = mMixConfig[i];
if (config.parts.upper == 0) {
i_volumeOut[i] = 0;
} else {
f32 scale;
if (config.parts.lower0 != 0) {
switch (config.parts.lower0) {
case 1:
scale = i_pan;
break;
case 2:
scale = i_fxmix;
break;
case 3:
scale = i_dolby;
break;
case 5:
scale = 1.0f - i_pan;
break;
case 6:
scale = 1.0f - i_fxmix;
break;
case 7:
scale = 1.0f - i_dolby;
break;
}
switch (config.parts.lower0) {
case 2:
case 6:
volume *= scale;
break;
default:
if (JASDriver::getOutputMode() == 0) {
volume *= scale;
} else {
volume *= JMASinRadian(scale * JGeometry::TUtil<f32>::PI() * 0.5f);
}
break;
}
}
if (config.parts.lower1 != 0) {
switch (config.parts.lower1) {
case 1:
scale = i_pan;
break;
case 2:
scale = i_fxmix;
break;
case 3:
scale = i_dolby;
break;
case 5:
scale = 1.0f - i_pan;
break;
case 6:
scale = 1.0f - i_fxmix;
break;
case 7:
scale = 1.0f - i_dolby;
break;
}
switch (config.parts.lower1) {
case 3:
case 7:
volume *= JMASinRadian((scale * 0.34776f + 0.32612f)
* JGeometry::TUtil<f32>::PI() * 0.5f);
break;
case 2:
case 6:
volume *= scale;
break;
default:
if (JASDriver::getOutputMode() == 0) {
volume *= scale;
} else {
volume *= JMASinRadian(scale * JGeometry::TUtil<f32>::PI() * 0.5f);
}
break;
}
}
i_volumeOut[i] = JASCalc::clamp01(volume) * JASDriver::getChannelLevel_dsp();
}
}
}
/* 8029BBFC-8029BC0C 29653C 0010+00 0/0 3/3 0/0 .text free__10JASChannelFv */
void JASChannel::free() {
mCallback = NULL;
mCallbackData = NULL;
}
/* 8029BC0C-8029BC48 29654C 003C+00 0/0 1/1 0/0 .text initBankDisposeMsgQueue__10JASChannelFv */
void JASChannel::initBankDisposeMsgQueue() {
OSInitMessageQueue(&sBankDisposeMsgQ, sBankDisposeMsg, 0x10);
sBankDisposeListSize = 0;
}
/* 8029BC48-8029BCC0 296588 0078+00 0/0 1/1 0/0 .text receiveBankDisposeMsg__10JASChannelFv */
void JASChannel::receiveBankDisposeMsg() {
OSMessage msg;
for (sBankDisposeListSize = 0;
OSReceiveMessage(&sBankDisposeMsgQ, &msg, OS_MESSAGE_NOBLOCK);
sBankDisposeListSize++)
{
sBankDisposeList[sBankDisposeListSize] = msg;
}
}
/* 8029BCC0-8029BD14 296600 0054+00 2/2 0/0 0/0 .text checkBankDispose__10JASChannelCFv
*/
bool JASChannel::checkBankDispose() const {
if (mBankDisposeID == NULL) {
return false;
}
for (int i = 0; i < sBankDisposeListSize; i++) {
if (mBankDisposeID == sBankDisposeList[i]) {
return true;
}
}
return false;
}
+41
View File
@@ -0,0 +1,41 @@
//
// JASCmdStack
//
#include "JSystem/JAudio2/JASCmdStack.h"
#include "dolphin/os.h"
/* 80431684-80431690 05E3A4 000C+00 1/2 0/0 0/0 .bss sCommandListOnce__10JASPortCmd */
JASPortCmd::TPortHead JASPortCmd::sCommandListOnce;
/* 8043169C-804316A8 05E3BC 000C+00 1/2 0/0 0/0 .bss sCommandListStay__10JASPortCmd */
JASPortCmd::TPortHead JASPortCmd::sCommandListStay;
/* 80291060-80291094 28B9A0 0034+00 0/0 1/1 0/0 .text execAllCommand__10JASPortCmdFv */
void JASPortCmd::execAllCommand() {
sCommandListOnce.execCommandOnce();
sCommandListStay.execCommandStay();
}
/* 80291094-8029110C 28B9D4 0078+00 1/1 0/0 0/0 .text execCommandOnce__Q210JASPortCmd9TPortHeadFv
*/
void JASPortCmd::TPortHead::execCommandOnce() {
volatile BOOL interrupts = OSDisableInterrupts();
JSULink<JASPortCmd>* next;
for (JSULink<JASPortCmd>* link = getFirst(); link != NULL; link = next) {
next = link->getNext();
link->getObject()->_10(link->getObject()->_14);
remove(link);
}
OSRestoreInterrupts(interrupts);
}
/* 8029110C-8029116C 28BA4C 0060+00 1/1 0/0 0/0 .text execCommandStay__Q210JASPortCmd9TPortHeadFv
*/
void JASPortCmd::TPortHead::execCommandStay() {
volatile int interrupts = OSDisableInterrupts();
for (JSULink<JASPortCmd>* link = getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->_10(link->getObject()->_14);
}
OSRestoreInterrupts(interrupts);
}
+248
View File
@@ -0,0 +1,248 @@
//
// Generated By: dol2asm
// Translation Unit: JASDSPChannel
//
#include "JSystem/JAudio2/JASDSPChannel.h"
#include "JSystem/JAudio2/JASHeapCtrl.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
/* 804512E0-804512E8 0007E0 0004+04 5/5 0/0 0/0 .sbss sDspChannels__13JASDSPChannel */
JASDSPChannel* JASDSPChannel::sDspChannels;
/* 8029D2F4-8029D320 297C34 002C+00 1/1 0/0 0/0 .text __ct__13JASDSPChannelFv */
JASDSPChannel::JASDSPChannel() :
mStatus(STATUS_INACTIVE),
mPriority(-1),
mFlags(0),
field_0xc(0),
mCallback(NULL),
mCallbackData(NULL),
mChannel(NULL)
{
/* empty function */
}
/* 8029D320-8029D330 297C60 0010+00 0/0 3/3 0/0 .text free__13JASDSPChannelFv */
void JASDSPChannel::free() {
mCallback = NULL;
mCallbackData = NULL;
}
/* 8029D330-8029D340 297C70 0010+00 0/0 2/2 0/0 .text start__13JASDSPChannelFv */
void JASDSPChannel::start() {
mFlags |= 1;
}
/* 8029D340-8029D3C8 297C80 0088+00 3/3 2/2 0/0 .text drop__13JASDSPChannelFv */
void JASDSPChannel::drop() {
if (mCallback != NULL) {
mCallback(CB_DROP, NULL, mCallbackData);
}
mCallback = NULL;
mCallbackData = NULL;
mPriority = -1;
mFlags &= ~1;
if (mStatus == STATUS_ACTIVE) {
mFlags |= 2;
mStatus = STATUS_DROP;
}
}
/* 8029D3C8-8029D44C 297D08 0084+00 0/0 1/1 0/0 .text initAll__13JASDSPChannelFv */
void JASDSPChannel::initAll() {
sDspChannels = new (JASDram, 0x20) JASDSPChannel[0x40];
for (int i = 0; i < 0x40; i++) {
sDspChannels[i].mChannel = JASDsp::getDSPHandle(i);
}
}
/* 8029D44C-8029D4BC 297D8C 0070+00 0/0 1/1 0/0 .text
* alloc__13JASDSPChannelFUcPFUlPQ26JASDsp8TChannelPv_lPv */
JASDSPChannel* JASDSPChannel::alloc(u8 i_priority, Callback i_callback, void* i_callbackData) {
JASDSPChannel* channel = getLowestChannel(i_priority);
if (channel == NULL) {
return NULL;
}
channel->drop();
channel->mPriority = i_priority;
channel->field_0xc = 0;
channel->mCallback = i_callback;
channel->mCallbackData = i_callbackData;
return channel;
}
/* 8029D4BC-8029D534 297DFC 0078+00 0/0 1/1 0/0 .text
* allocForce__13JASDSPChannelFUcPFUlPQ26JASDsp8TChannelPv_lPv */
JASDSPChannel* JASDSPChannel::allocForce(u8 i_priority, Callback i_callback, void* i_callbackData) {
JASDSPChannel* channel = getLowestChannel(i_priority);
if (channel == NULL) {
return NULL;
}
channel->mStatus = STATUS_INACTIVE;
channel->drop();
channel->mPriority = i_priority;
channel->field_0xc = 0;
channel->mCallback = i_callback;
channel->mCallbackData = i_callbackData;
return channel;
}
/* 8029D534-8029D540 297E74 000C+00 0/0 1/1 0/0 .text setPriority__13JASDSPChannelFUc */
void JASDSPChannel::setPriority(u8 i_priority) {
mPriority = i_priority;
}
/* 8029D540-8029D5D0 297E80 0090+00 2/2 0/0 0/0 .text getLowestChannel__13JASDSPChannelFi
*/
JASDSPChannel* JASDSPChannel::getLowestChannel(int i_priority) {
s16 best_priority = 0xff;
int best_index = -1;
int best_unknown = 0;
for (int i = 0; i < 0x40; i++) {
JASDSPChannel* channel = &sDspChannels[i];
s16 priority = channel->mPriority;
if (priority < 0) {
return channel;
}
if (priority <= i_priority && priority <= best_priority) {
if (priority != best_priority || channel->field_0xc > best_unknown) {
best_unknown = channel->field_0xc;
best_index = i;
best_priority = priority;
}
}
}
if (best_index < 0) {
return NULL;
}
return &sDspChannels[best_index];
}
/* 8029D5D0-8029D65C 297F10 008C+00 1/1 0/0 0/0 .text getLowestActiveChannel__13JASDSPChannelFv */
JASDSPChannel* JASDSPChannel::getLowestActiveChannel() {
s16 best_priority = 0xff;
int best_index = -1;
int best_unknown = 0;
for (int i = 0; i < 0x40; i++) {
JASDSPChannel* channel = &sDspChannels[i];
if (channel->mStatus == STATUS_ACTIVE) {
s16 priority = channel->mPriority;
if (priority < 0x7f && priority <= best_priority) {
if (priority != best_priority || channel->field_0xc > best_unknown) {
best_unknown = channel->field_0xc;
best_index = i;
best_priority = priority;
}
}
}
}
if (best_index < 0) {
return NULL;
}
return &sDspChannels[best_index];
}
/* 8029D65C-8029D89C 297F9C 0240+00 1/1 0/0 0/0 .text updateProc__13JASDSPChannelFv */
void JASDSPChannel::updateProc() {
int ret;
if (mChannel->isFinish()) {
mFlags &= ~2;
if (mStatus == STATUS_ACTIVE) {
if (mCallback != NULL) {
ret = mCallback(CB_STOP, NULL, mCallbackData);
} else {
ret = -1;
}
if (ret < 0) {
mPriority = -1;
}
}
mStatus = STATUS_INACTIVE;
mChannel->replyFinishRequest();
mChannel->flush();
} else if (mFlags & 2) {
mFlags &= ~2;
mChannel->forceStop();
mChannel->flush();
} else if (mStatus != STATUS_DROP) {
if ((mFlags & 1) && mStatus == STATUS_INACTIVE) {
mFlags &= ~1;
mStatus = STATUS_ACTIVE;
mChannel->init();
if (mCallback != NULL) {
ret = mCallback(CB_START, mChannel, mCallbackData);
} else {
ret = 0;
}
if (ret < 0) {
mStatus = STATUS_INACTIVE;
if (mCallback != NULL) {
ret = mCallback(CB_STOP, NULL, mCallbackData);
} else {
ret = -1;
}
if (ret < 0) {
mPriority = -1;
}
mChannel->flush();
} else {
mChannel->playStart();
mChannel->flush();
}
} else if (mStatus != STATUS_INACTIVE) {
bool flush = false;
if (mCallback != NULL) {
ret = mCallback(CB_PLAY, mChannel, mCallbackData);
flush = true;
} else {
ret = 0;
}
if (ret < 0) {
mStatus = STATUS_INACTIVE;
if (mCallback != NULL) {
ret = mCallback(CB_STOP, NULL, mCallbackData);
} else {
ret = -1;
}
if (ret < 0) {
mPriority = -1;
}
mChannel->playStop();
mChannel->flush();
} else {
field_0xc++;
if (flush) {
mChannel->flush();
}
}
}
}
}
/* 8029D89C-8029D910 2981DC 0074+00 0/0 1/1 0/0 .text updateAll__13JASDSPChannelFv */
void JASDSPChannel::updateAll() {
for (u32 i = 0; i < 0x40; i++) {
if ((i & 0xf) == 0 && i != 0) {
JASDsp::releaseHalt((i - 1) >> 4);
}
sDspChannels[i].updateProc();
}
JASDsp::releaseHalt(3);
}
/* 8029D910-8029D948 298250 0038+00 0/0 1/1 0/0 .text killActiveChannel__13JASDSPChannelFv */
int JASDSPChannel::killActiveChannel() {
JASDSPChannel* channel = getLowestActiveChannel();
if (channel == NULL) {
return 0;
} else {
channel->drop();
return 1;
}
}
/* 8029D948-8029D958 298288 0010+00 0/0 1/1 0/0 .text getHandle__13JASDSPChannelFUl */
JASDSPChannel* JASDSPChannel::getHandle(u32 i_index) {
return &sDspChannels[i_index];
}
+752
View File
@@ -0,0 +1,752 @@
//
// Generated By: dol2asm
// Translation Unit: JASDSPInterface
//
#include "JSystem/JAudio2/JASDSPInterface.h"
#include "JSystem/JAudio2/JASCalc.h"
#include "JSystem/JAudio2/JASHeapCtrl.h"
#include "JSystem/JAudio2/JASWaveInfo.h"
#include "JSystem/JAudio2/dsptask.h"
#include "JSystem/JAudio2/osdsp_task.h"
#include "JSystem/JAudio2/JASCriticalSection.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "dolphin/os/OSCache.h"
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* ############################################################################################## */
/* 804512E8-804512EC 0007E8 0004+00 5/5 0/0 0/0 .sbss CH_BUF__6JASDsp */
JASDsp::TChannel* JASDsp::CH_BUF;
/* 804512EC-804512F0 0007EC 0004+00 3/3 0/0 0/0 .sbss FX_BUF__6JASDsp */
JASDsp::FxBuf* JASDsp::FX_BUF;
/* 804512F0-804512F4 0007F0 0004+00 2/2 0/0 0/0 .sbss sDSPVolume__6JASDsp */
f32 JASDsp::sDSPVolume;
/* 8029D958-8029D9A4 298298 004C+00 0/0 1/1 0/0 .text boot__6JASDspFPFPv_v */
void JASDsp::boot(void (*param_0)(void*)) {
static bool data_804512F4 = true;
if (data_804512F4) {
DspBoot(param_0);
data_804512F4 = false;
}
}
/* 8029D9A4-8029D9C4 2982E4 0020+00 0/0 1/1 0/0 .text releaseHalt__6JASDspFUl */
void JASDsp::releaseHalt(u32 param_0) {
DSPReleaseHalt2(param_0);
}
/* 8029D9C4-8029D9E4 298304 0020+00 0/0 1/1 0/0 .text finishWork__6JASDspFUs */
void JASDsp::finishWork(u16 param_0) {
DspFinishWork(param_0);
}
/* 8029D9E4-8029DA04 298324 0020+00 0/0 1/1 0/0 .text syncFrame__6JASDspFUlUlUl */
void JASDsp::syncFrame(u32 param_0, u32 param_1, u32 param_2) {
DsyncFrame2(param_0, param_1, param_2);
}
/* 8029DA04-8029DA30 298344 002C+00 0/0 1/1 0/0 .text setDSPMixerLevel__6JASDspFf */
void JASDsp::setDSPMixerLevel(f32 dsp_level) {
sDSPVolume = dsp_level;
dsp_level *= 4.0f;
DsetMixerLevel(dsp_level);
}
/* 8029DA30-8029DA38 298370 0008+00 0/0 1/1 0/0 .text getDSPMixerLevel__6JASDspFv */
f32 JASDsp::getDSPMixerLevel() {
return sDSPVolume;
}
/* 8029DA38-8029DA48 298378 0010+00 0/0 1/1 0/0 .text getDSPHandle__6JASDspFi */
JASDsp::TChannel* JASDsp::getDSPHandle(int param_0) {
return CH_BUF + param_0;
}
/* 8029DA48-8029DA6C 298388 0024+00 3/3 0/0 0/0 .text setFilterTable__6JASDspFPsPsUl */
void JASDsp::setFilterTable(s16* param_0, s16* param_1, u32 param_2) {
for (int i = 0; i < param_2; i++) {
*param_0++ = *param_1++;
}
}
/* 8029DA6C-8029DAA0 2983AC 0034+00 1/1 0/0 0/0 .text flushBuffer__6JASDspFv */
void JASDsp::flushBuffer() {
DCFlushRange(CH_BUF, sizeof(TChannel) * 64);
DCFlushRange(FX_BUF, sizeof(FxBuf) * 4);
}
/* 8029DAA0-8029DAC8 2983E0 0028+00 0/0 1/1 0/0 .text invalChannelAll__6JASDspFv */
void JASDsp::invalChannelAll() {
DCInvalidateRange(CH_BUF, sizeof(TChannel) * 64);
}
/* ############################################################################################## */
/* 8039B360-8039B3A0 0279C0 0040+00 1/1 0/0 0/0 .rodata DSPADPCM_FILTER__6JASDsp */
u8 const JASDsp::DSPADPCM_FILTER[64] = {
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x04, 0x00,
0x10, 0x00, 0xF8, 0x00, 0x0E, 0x00, 0xFA, 0x00, 0x0C, 0x00, 0xFC, 0x00, 0x12, 0x00, 0xF6, 0x00,
0x10, 0x68, 0xF7, 0x38, 0x12, 0xC0, 0xF7, 0x04, 0x14, 0x00, 0xF4, 0x00, 0x08, 0x00, 0xF8, 0x00,
0x04, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x04, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00,
};
/* 8039B3A0-8039B8A0 -00001 0500+00 1/1 0/0 0/0 .rodata DSPRES_FILTER__6JASDsp */
u32 const JASDsp::DSPRES_FILTER[320] = {
0x0C3966AD,
0x0D46FFDF,
0x0B396696,
0x0E5FFFD8,
0x0A446669,
0x0F83FFD0,
0x095A6626,
0x10B4FFC8,
0x087D65CD,
0x11F0FFBF,
0x07AB655E,
0x1338FFB6,
0x06E464D9,
0x148CFFAC,
0x0628643F,
0x15EBFFA1,
0x0577638F,
0x1756FF96,
0x04D162CB,
0x18CBFF8A,
0x043561F3,
0x1A4CFF7E,
0x03A46106,
0x1BD7FF71,
0x031C6007,
0x1D6CFF64,
0x029F5EF5,
0x1F0BFF56,
0x022A5DD0,
0x20B3FF48,
0x01BE5C9A,
0x2264FF3A,
0x015B5B53,
0x241EFF2C,
0x010159FC,
0x25E0FF1E,
0x00AE5896,
0x27A9FF10,
0x00635720,
0x297AFF02,
0x001F559D,
0x2B50FEF4,
0xFFE2540D,
0x2D2CFEE8,
0xFFAC5270,
0x2F0DFEDB,
0xFF7C50C7,
0x30F3FED0,
0xFF534F14,
0x32DCFEC6,
0xFF2E4D57,
0x34C8FEBD,
0xFF0F4B91,
0x36B6FEB6,
0xFEF549C2,
0x38A5FEB0,
0xFEDF47ED,
0x3A95FEAC,
0xFECE4611,
0x3C85FEAB,
0xFEC04430,
0x3E74FEAC,
0xFEB6424A,
0x4060FEAF,
0xFEAF4060,
0x424AFEB6,
0xFEAC3E74,
0x4430FEC0,
0xFEAB3C85,
0x4611FECE,
0xFEAC3A95,
0x47EDFEDF,
0xFEB038A5,
0x49C2FEF5,
0xFEB636B6,
0x4B91FF0F,
0xFEBD34C8,
0x4D57FF2E,
0xFEC632DC,
0x4F14FF53,
0xFED030F3,
0x50C7FF7C,
0xFEDB2F0D,
0x5270FFAC,
0xFEE82D2C,
0x540DFFE2,
0xFEF42B50,
0x559D001F,
0xFF02297A,
0x57200063,
0xFF1027A9,
0x589600AE,
0xFF1E25E0,
0x59FC0101,
0xFF2C241E,
0x5B53015B,
0xFF3A2264,
0x5C9A01BE,
0xFF4820B3,
0x5DD0022A,
0xFF561F0B,
0x5EF5029F,
0xFF641D6C,
0x6007031C,
0xFF711BD7,
0x610603A4,
0xFF7E1A4C,
0x61F30435,
0xFF8A18CB,
0x62CB04D1,
0xFF961756,
0x638F0577,
0xFFA115EB,
0x643F0628,
0xFFAC148C,
0x64D906E4,
0xFFB61338,
0x655E07AB,
0xFFBF11F0,
0x65CD087D,
0xFFC810B4,
0x6626095A,
0xFFD00F83,
0x66690A44,
0xFFD80E5F,
0x66960B39,
0xFFDF0D46,
0x66AD0C39,
0x00000C8B,
0x18F82527,
0x30FB3C56,
0x471C5133,
0x5A8262F1,
0x6A6D70E2,
0x76417A7C,
0x7D897F61,
0x7FFF7F61,
0x7D897A7C,
0x764170E2,
0x6A6D62F1,
0x5A825133,
0x471C3C56,
0x30FB2527,
0x18F80C8B,
0x0000F375,
0xE708DAD9,
0xCF05C3AA,
0xB8E4AECD,
0xA57E9D0F,
0x95938F1E,
0x89BF8584,
0x8277809F,
0x8001809F,
0x82778584,
0x89BF8F1E,
0x95939D0F,
0xA57EAECD,
0xB8E4C3AA,
0xCF05DAD9,
0xE708F375,
0x000007FF,
0x0FFF17FF,
0x1FFF27FF,
0x2FFF37FF,
0x3FFF47FF,
0x4FFF57FF,
0x5FFF67FF,
0x6FFF77FF,
0x7FFF7800,
0x70006800,
0x60005800,
0x50004800,
0x40003800,
0x30002800,
0x20001800,
0x10000800,
0x0000F801,
0xF001E801,
0xE001D801,
0xD001C801,
0xC001B801,
0xB001A801,
0xA0019801,
0x90018801,
0x80018800,
0x90009800,
0xA000A800,
0xB000B800,
0xC000C800,
0xD000D800,
0xE000E800,
0xF000F800,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0x1FFF3FFF,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0x1FFFC001,
0x00000192,
0x032404B6,
0x064707D9,
0x096A0AFB,
0x0C8B0E1B,
0x0FAB1139,
0x12C71455,
0x15E1176D,
0x18F81A82,
0x1C0B1D93,
0x1F19209F,
0x222323A6,
0x252726A7,
0x282629A3,
0x2B1F2C98,
0x2E102F87,
0x30FB326E,
0x33DE354D,
0x36B93824,
0x398C3AF2,
0x3C563DB7,
0x3F174073,
0x41CD4325,
0x447A45CC,
0x471C4869,
0x49B34AFB,
0x4C3F4D81,
0x4EBF4FFB,
0x51335268,
0x539A54C9,
0x55F5571D,
0x58425964,
0x5A825B9C,
0x5CB35DC7,
0x5ED75FE3,
0x60EB61F0,
0x62F163EE,
0x64E865DD,
0x66CF67BC,
0x68A6698B,
0x6A6D6B4A,
0x6C236CF8,
0x6DC96E96,
0x6F5E7022,
0x70E2719D,
0x72547307,
0x73B5745F,
0x750475A5,
0x764176D8,
0x776B77FA,
0x78847909,
0x79897A05,
0x7A7C7AEE,
0x7B5C7BC5,
0x7C297C88,
0x7CE37D39,
0x7D897DD5,
0x7E1D7E5F,
0x7E9C7ED5,
0x7F097F37,
0x7F617F86,
0x7FA67FC1,
0x7FD87FE9,
0x7FF57FFD,
};
/* 8029DAC8-8029DB78 298408 00B0+00 0/0 1/1 0/0 .text initBuffer__6JASDspFv */
void JASDsp::initBuffer() {
CH_BUF = new(JASDram, 0x20) TChannel[64];
FX_BUF = new(JASDram, 0x20) FxBuf[4];
JASCalc::bzero(CH_BUF, 0x6000);
JASCalc::bzero(FX_BUF, sizeof(FxBuf) * 4);
for (u8 i = 0; i < 4; i++) {
setFXLine(i, NULL, NULL);
}
DsetupTable(0x40, u32(CH_BUF), u32(&DSPRES_FILTER), u32(&DSPADPCM_FILTER), u32(FX_BUF));
flushBuffer();
}
/* ############################################################################################## */
/* 803C78F0-803C7920 024A10 0018+18 1/1 0/0 0/0 .data SEND_TABLE__6JASDsp */
u16 JASDsp::SEND_TABLE[12 + 12 /* padding */] = {
0x0D00,
0x0D60,
0x0DC8,
0x0E28,
0x0E88,
0x0EE8,
0x0CA0,
0x0F40,
0x0FA0,
0x0B00,
0x09A0,
0x0000,
/* padding */
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
};
/* 8029DB78-8029DCA4 2984B8 012C+00 1/1 1/1 0/0 .text
* setFXLine__6JASDspFUcPsPQ26JASDsp13FxlineConfig_ */
int JASDsp::setFXLine(u8 param_0, s16* param_1, JASDsp::FxlineConfig_* param_2) {
FxBuf* puVar3 = FX_BUF + param_0;
JASCriticalSection aJStack_20;
puVar3->field_0x0 = 0;
if (param_2 != NULL) {
puVar3->field_0xa = param_2->field_0x4;
puVar3->field_0x8 = SEND_TABLE[param_2->field_0x2];
puVar3->field_0xe = param_2->field_0x8;
puVar3->field_0xc = SEND_TABLE[param_2->field_0x6];
puVar3->field_0x2 = param_2->field_0xc;
setFilterTable(puVar3->field_0x10, param_2->field_0x10, 8);
}
if (param_1 != NULL && param_2 != NULL) {
u32 iVar1 = param_2->field_0xc * 0xa0;
puVar3->field_0x4 = param_1;
JASCalc::bzero(param_1, iVar1);
DCFlushRange(param_1, iVar1);
} else if (param_2 == NULL || param_1 != NULL) {
puVar3->field_0x4 = param_1;
}
if (puVar3->field_0x4 != NULL) {
puVar3->field_0x0 = param_2->field_0x0;
} else {
puVar3->field_0x0 = 0;
}
DCFlushRange(puVar3, sizeof(FxBuf));
return 1;
}
/* 8029DCA4-8029DCE0 2985E4 003C+00 0/0 1/1 0/0 .text init__Q26JASDsp8TChannelFv */
void JASDsp::TChannel::init() {
mPauseFlag = 0;
mIsFinished = 0;
mForcedStop = 0;
mIsActive = 0;
field_0x058 = 0;
field_0x068 = 0;
initFilter();
}
/* 8029DCE0-8029DD44 298620 0064+00 0/0 1/1 0/0 .text playStart__Q26JASDsp8TChannelFv */
void JASDsp::TChannel::playStart() {
field_0x10c = 0;
field_0x060 = 0;
field_0x008 = 1;
field_0x066 = 0;
int i;
for (i = 0; i < 4; i++) {
field_0x078[i] = 0;
field_0x0a8[i] = 0;
}
for (i = 0; i < 20; i++) {
field_0x080[i] = 0;
}
mIsActive = 1;
}
/* 8029DD44-8029DD50 298684 000C+00 0/0 1/1 0/0 .text playStop__Q26JASDsp8TChannelFv */
void JASDsp::TChannel::playStop() {
mIsActive = 0;
}
/* 8029DD50-8029DD60 298690 0010+00 0/0 1/1 0/0 .text replyFinishRequest__Q26JASDsp8TChannelFv */
void JASDsp::TChannel::replyFinishRequest() {
mIsFinished = 0;
mIsActive = 0;
}
/* 8029DD60-8029DD6C 2986A0 000C+00 0/0 1/1 0/0 .text forceStop__Q26JASDsp8TChannelFv */
void JASDsp::TChannel::forceStop() {
mForcedStop = 1;
}
/* 8029DD6C-8029DD7C 2986AC 0010+00 1/1 0/0 0/0 .text isActive__Q26JASDsp8TChannelCFv */
bool JASDsp::TChannel::isActive() const {
return mIsActive != 0;
}
/* 8029DD7C-8029DD8C 2986BC 0010+00 0/0 1/1 0/0 .text isFinish__Q26JASDsp8TChannelCFv */
bool JASDsp::TChannel::isFinish() const {
return mIsFinished != 0;
}
/* ############################################################################################## */
/* 8045574C-80455754 003D4C 0008+00 1/1 0/0 0/0 .sdata2 COMP_BLOCKSAMPLES$331 */
static const u8 COMP_BLOCKSAMPLES[8] = {
0x10, 0x10, 0x01, 0x01, 0x01, 0x10, 0x10, 0x01,
};
/* 80455754-8045575C 003D54 0008+00 1/1 0/0 0/0 .sdata2 COMP_BLOCKBYTES$332 */
static const u8 COMP_BLOCKBYTES[8] = {
0x09, 0x05, 0x08, 0x10, 0x01, 0x01, 0x01, 0x01,
};
/* 8029DD8C-8029DEAC 2986CC 0120+00 0/0 1/1 0/0 .text
* setWaveInfo__Q26JASDsp8TChannelFRC11JASWaveInfoUlUl */
void JASDsp::TChannel::setWaveInfo(JASWaveInfo const& param_0, u32 param_1, u32 param_2) {
field_0x118 = param_1;
field_0x064 = COMP_BLOCKSAMPLES[param_0.field_0x00];
field_0x100 = COMP_BLOCKBYTES[param_0.field_0x00];
field_0x068 = 0;
if (field_0x100 >= 4) {
field_0x11c = param_0.field_0x18;
field_0x102 = param_0.field_0x02;
if (field_0x102) {
if (param_2 == 1) {
param_2 = param_0.field_0x10;
}
field_0x110 = param_0.field_0x10;
field_0x114 = param_0.field_0x14;
field_0x104 = param_0.field_0x1c;
field_0x106 = param_0.field_0x1e;
} else {
field_0x114 = field_0x11c;
}
if (param_2 && field_0x114 > param_2) {
switch (param_0.field_0x00) {
case 0:
case 1:
field_0x068 = param_2;
field_0x118 += param_2 * field_0x100 >> 4;
field_0x110 -= param_2;
field_0x114 -= param_2;
break;
case 2:
case 3:
field_0x068 = param_2;
break;
}
}
for (int i = 0; i < 16; i++) {
field_0x0b0[i] = 0;
}
}
}
/* 8029DEAC-8029DEC4 2987EC 0018+00 0/0 1/1 0/0 .text setOscInfo__Q26JASDsp8TChannelFUl
*/
void JASDsp::TChannel::setOscInfo(u32 param_0) {
field_0x118 = 0;
field_0x064 = 16;
field_0x100 = param_0;
}
/* 8029DEC4-8029DEF0 298804 002C+00 0/0 1/1 0/0 .text initAutoMixer__Q26JASDsp8TChannelFv
*/
void JASDsp::TChannel::initAutoMixer() {
if (field_0x058) {
field_0x054 = field_0x056;
} else {
field_0x054 = 0;
field_0x058 = 1;
}
}
/* 8029DEF0-8029DF1C 298830 002C+00 0/0 1/1 0/0 .text setAutoMixer__Q26JASDsp8TChannelFUsUcUcUcUc
*/
void JASDsp::TChannel::setAutoMixer(u16 param_0, u8 param_1, u8 param_2, u8 param_3,
u8 param_4) {
field_0x050 = (param_1 << 8) | param_2;
field_0x052 = param_3 << 8 | param_3 << 1;
field_0x056 = param_0;
field_0x058 = 1;
}
/* 8029DF1C-8029DF34 29885C 0018+00 0/0 2/2 0/0 .text setPitch__Q26JASDsp8TChannelFUs */
void JASDsp::TChannel::setPitch(u16 param_0) {
if (param_0 >= 0x7fff) {
param_0 = 0x7fff;
}
mPitch = param_0;
}
/* 8029DF34-8029DF54 298874 0020+00 0/0 1/1 0/0 .text setMixerInitVolume__Q26JASDsp8TChannelFUcs
*/
void JASDsp::TChannel::setMixerInitVolume(u8 param_0, s16 param_1) {
u16* tmp = field_0x010[param_0];
tmp[2] = param_1;
tmp[1] = param_1;
tmp[3] = 0;
}
/* 8029DF54-8029DF80 298894 002C+00 0/0 1/1 0/0 .text setMixerVolume__Q26JASDsp8TChannelFUcs */
void JASDsp::TChannel::setMixerVolume(u8 param_0, s16 param_1) {
if (mForcedStop == 0) {
u16* tmp = field_0x010[param_0];
tmp[1] = param_1;
tmp[3] &= 0xff;
}
}
/* 8029DF80-8029DF8C 2988C0 000C+00 0/0 2/2 0/0 .text setPauseFlag__Q26JASDsp8TChannelFUc
*/
void JASDsp::TChannel::setPauseFlag(u8 param_0) {
mPauseFlag = param_0;
}
/* 8029DF8C-8029DFB0 2988CC 0024+00 0/0 1/1 0/0 .text flush__Q26JASDsp8TChannelFv */
void JASDsp::TChannel::flush() {
DCFlushRange(this, sizeof(*this));
}
/* 8029DFB0-8029E00C 2988F0 005C+00 1/1 0/0 0/0 .text initFilter__Q26JASDsp8TChannelFv */
void JASDsp::TChannel::initFilter() {
int i;
for (i = 0; i < 8; i++) {
fir_filter_params[i] = 0;
}
fir_filter_params[0] = 0x7fff;
for (i = 0; i < 8; i++) {
iir_filter_params[i] = 0;
}
iir_filter_params[0] = 0x7fff;
iir_filter_params[4] = 0;
}
/* 8029E00C-8029E044 29894C 0038+00 0/0 1/1 0/0 .text setFilterMode__Q26JASDsp8TChannelFUs */
void JASDsp::TChannel::setFilterMode(u16 param_0) {
u8 r30 = param_0 & 0x20;
u8 r31 = param_0 & 0x1f;
if (r30) {
if (r31 > 0x14) {
r31 = 0x14;
}
} else {
if (r31 > 0x18) {
r31 = 0x18;
}
}
mFilterMode = r30 + r31;
}
/* 8029E044-8029E06C 298984 0028+00 0/0 1/1 0/0 .text setIIRFilterParam__Q26JASDsp8TChannelFPs */
void JASDsp::TChannel::setIIRFilterParam(s16* param_0) {
setFilterTable(iir_filter_params, param_0, 8);
}
/* 8029E06C-8029E094 2989AC 0028+00 0/0 1/1 0/0 .text setFIR8FilterParam__Q26JASDsp8TChannelFPs */
void JASDsp::TChannel::setFIR8FilterParam(s16* param_0) {
setFilterTable(fir_filter_params, param_0, 8);
}
/* 8029E094-8029E09C -00001 0008+00 0/0 0/0 0/0 .text setDistFilter__Q26JASDsp8TChannelFs
*/
void JASDsp::TChannel::setDistFilter(s16 param_0) {
iir_filter_params[4] = param_0;
}
/* ############################################################################################## */
/* 8039B8A0-8039B8B8 027F00 0018+00 1/1 0/0 0/0 .rodata connect_table$463 */
static u16 const connect_table[12] = {
0x0000, 0x0D00, 0x0D60, 0x0DC0, 0x0E20, 0x0E80,
0x0EE0, 0x0CA0, 0x0F40, 0x0FA0, 0x0B00, 0x09A0,
};
/* 8029E09C-8029E0BC 2989DC 0020+00 0/0 1/1 0/0 .text setBusConnect__Q26JASDsp8TChannelFUcUc */
void JASDsp::TChannel::setBusConnect(u8 param_0, u8 param_1) {
u16* tmp = field_0x010[param_0];
tmp[0] = connect_table[param_1];
}
/* 8029E0BC-8029E130 2989FC 0074+00 0/0 1/1 0/0 .text DSP_CreateMap2__FUl */
u16 DSP_CreateMap2(u32 param_0) {
u16 r30 = 0;
JASDsp::TChannel* channel = &JASDsp::CH_BUF[param_0 << 4];
for (int i = 0; i < 16; i++) {
r30 <<= 1;
if (channel->isActive()) {
r30 |= 1;
}
channel++;
}
return r30;
}
/* 804507B8-804507C0 000238 0004+04 0/0 5/5 0/0 .sdata one__11JASWaveInfo */
u32 JASWaveInfo::one = 1;
+102
View File
@@ -0,0 +1,102 @@
//
// Generated By: dol2asm
// Translation Unit: JASDriverIF
//
#include "JSystem/JAudio2/JASDriverIF.h"
#include "JSystem/JAudio2/JASAiCtrl.h"
#include "JSystem/JAudio2/JASDSPInterface.h"
#include "dolphin/os/OSThread.h"
//
// Declarations:
//
/* 8029E130-8029E150 298A70 0020+00 0/0 3/3 0/0 .text setDSPLevel__9JASDriverFf */
void JASDriver::setDSPLevel(f32 param_0) {
JASDsp::setDSPMixerLevel(param_0);
}
/* ############################################################################################## */
/* 804507C0-804507C4 000240 0002+02 1/0 0/0 0/0 .sdata MAX_MIXERLEVEL__9JASDriver */
u16 JASDriver::MAX_MIXERLEVEL = 0x2EE0;
/* 8029E150-8029E158 -00001 0008+00 0/0 0/0 0/0 .text getChannelLevel_dsp__9JASDriverFv
*/
u16 JASDriver::getChannelLevel_dsp() {
return JASDriver::MAX_MIXERLEVEL;
}
/* 8029E158-8029E178 298A98 0020+00 0/0 3/3 0/0 .text getDSPLevel__9JASDriverFv */
f32 JASDriver::getDSPLevel() {
return JASDsp::getDSPMixerLevel();
}
/* ############################################################################################## */
/* 804507C4-804507C8 000244 0004+00 2/1 0/0 0/0 .sdata JAS_SYSTEM_OUTPUT_MODE__9JASDriver
*/
u32 JASDriver::JAS_SYSTEM_OUTPUT_MODE = 0x00000001;
/* 8029E178-8029E180 298AB8 0008+00 0/0 2/2 0/0 .text setOutputMode__9JASDriverFUl */
void JASDriver::setOutputMode(u32 param_0) {
JAS_SYSTEM_OUTPUT_MODE = param_0;
}
/* 8029E180-8029E188 -00001 0008+00 0/0 0/0 0/0 .text getOutputMode__9JASDriverFv */
u32 JASDriver::getOutputMode() {
return JASDriver::JAS_SYSTEM_OUTPUT_MODE;
}
/* 8029E188-8029E1C4 298AC8 003C+00 0/0 1/1 0/0 .text waitSubFrame__9JASDriverFv */
void JASDriver::waitSubFrame() {
u32 r31 = getSubFrameCounter();
do {
OSYieldThread();
} while (r31 == getSubFrameCounter());
}
/* ############################################################################################## */
/* 80431C78-80431D78 05E998 0100+00 4/4 0/0 0/0 .bss sDspSyncCallback__9JASDriver */
JASCallbackMgr JASDriver::sDspSyncCallback;
/* 80431D78-80431E78 05EA98 0100+00 2/4 0/0 0/0 .bss sSubFrameCallback__9JASDriver */
JASCallbackMgr JASDriver::sSubFrameCallback;
/* 80431E78-80431F80 05EB98 0100+08 1/3 0/0 0/0 .bss sUpdateDacCallback__9JASDriver */
JASCallbackMgr JASDriver::sUpdateDacCallback;
/* 8029E1C4-8029E240 298B04 007C+00 0/0 2/2 0/0 .text rejectCallback__9JASDriverFPFPv_lPv
*/
int JASDriver::rejectCallback(DriverCallback callback, void* param_1) {
int r31 = sDspSyncCallback.reject(callback, param_1);
r31 += sSubFrameCallback.reject(callback, param_1);
r31 += sUpdateDacCallback.reject(callback, param_1);
return r31;
}
/* 8029E240-8029E274 298B80 0034+00 0/0 1/1 0/0 .text registerDspSyncCallback__9JASDriverFPFPv_lPv
*/
bool JASDriver::registerDspSyncCallback(DriverCallback callback, void* param_1) {
return sDspSyncCallback.regist(callback, param_1);
}
/* 8029E274-8029E2A8 298BB4 0034+00 0/0 3/3 0/0 .text
* registerSubFrameCallback__9JASDriverFPFPv_lPv */
bool JASDriver::registerSubFrameCallback(DriverCallback callback, void* param_1) {
return sSubFrameCallback.regist(callback, param_1);
}
/* 8029E2A8-8029E2D0 298BE8 0028+00 0/0 1/1 0/0 .text subframeCallback__9JASDriverFv */
void JASDriver::subframeCallback() {
sSubFrameCallback.callback();
}
/* 8029E2D0-8029E2F8 298C10 0028+00 0/0 1/1 0/0 .text DSPSyncCallback__9JASDriverFv */
void JASDriver::DSPSyncCallback() {
sDspSyncCallback.callback();
}
/* 8029E2F8-8029E320 298C38 0028+00 0/0 1/1 0/0 .text updateDacCallback__9JASDriverFv */
void JASDriver::updateDacCallback() {
sUpdateDacCallback.callback();
}
+121
View File
@@ -0,0 +1,121 @@
//
// Generated By: dol2asm
// Translation Unit: JASDrumSet
//
#include "JSystem/JAudio2/JASDrumSet.h"
#include "JSystem/JAudio2/JASCalc.h"
#include "JSystem/JKernel/JKRHeap.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* ############################################################################################## */
/* 802982EC-80298314 292C2C 0028+00 0/0 2/2 0/0 .text __ct__10JASDrumSetFv */
JASDrumSet::JASDrumSet() {
field_0x4 = NULL;
field_0x8 = 0;
}
/* 80298314-80298370 292C54 005C+00 1/0 0/0 0/0 .text __dt__10JASDrumSetFv */
JASDrumSet::~JASDrumSet() {
}
/* 80298370-802983CC 292CB0 005C+00 0/0 2/2 0/0 .text newPercArray__10JASDrumSetFUcP7JKRHeap */
void JASDrumSet::newPercArray(u8 param_0, JKRHeap* param_1) {
if (param_0) {
field_0x8 = param_0;
field_0x4 = new (param_1, 0) TPerc*[field_0x8];
JASCalc::bzero(field_0x4, field_0x8 * sizeof(TPerc*));
}
}
/* ############################################################################################## */
/* 80431B58-80431B70 05E878 0018+00 1/1 0/0 0/0 .bss osc$213 */
static JASOscillator::Data osc;
/* 80451270-80451274 000770 0004+00 1/1 0/0 0/0 .sbss oscp$214 */
static JASOscillator::Data* oscp;
/* 80451274-80451278 000774 0004+00 1/1 0/0 0/0 .sbss None */
static s8 data_80451274[4];
/* 802983CC-802984B4 292D0C 00E8+00 1/0 0/0 0/0 .text getParam__10JASDrumSetCFiiP12JASInstParam */
bool JASDrumSet::getParam(int param_0, int param_1, JASInstParam* param_2) const {
if (field_0x4 == NULL) {
return false;
}
if (param_0 >= field_0x8) {
return false;
}
TPerc* perc = field_0x4[param_0];
if (perc == NULL) {
return false;
}
param_2->field_0x1c = 0;
param_2->field_0x1e = 1;
param_2->mVolume = perc->mVolume;
param_2->mPitch = perc->mPitch;
param_2->mPan = perc->mPan;
param_2->field_0x18 = perc->field_0xc;
osc.mTarget = 0;
osc._04 = 1.0f;
osc.mTable = NULL;
osc._0C = NULL;
osc.mScale = 1.0f;
osc._14 = 0.0f;
if (data_80451274[0] == 0) {
oscp = &osc;
data_80451274[0] = 1;
}
param_2->field_0x14 = &oscp;
param_2->field_0x1d = 1;
param_2->mVolume *= perc->field_0x10;
param_2->mPitch *= perc->field_0x14;
param_2->field_0x1a = perc->field_0xe;
return true;
}
/* 802984B4-802984C4 292DF4 0010+00 0/0 2/2 0/0 .text setPerc__10JASDrumSetFiPQ210JASDrumSet5TPerc
*/
void JASDrumSet::setPerc(int param_0, JASDrumSet::TPerc* param_1) {
field_0x4[param_0] = param_1;
}
/* ############################################################################################## */
/* 802984C4-802984E4 292E04 0020+00 0/0 2/2 0/0 .text __ct__Q210JASDrumSet5TPercFv */
JASDrumSet::TPerc::TPerc() {
mVolume = 1.0f;
mPitch = 1.0f;
mPan = 0.5f;
field_0xc = 1000;
}
/* 802984E4-802984EC -00001 0008+00 0/0 0/0 0/0 .text setRelease__Q210JASDrumSet5TPercFUl
*/
void JASDrumSet::TPerc::setRelease(u32 param_0) {
field_0xc = param_0;
}
/* 802984EC-802984F8 292E2C 000C+00 1/0 0/0 0/0 .text getType__10JASDrumSetCFv */
u32 JASDrumSet::getType() const { return 'PERC'; }
+39
View File
@@ -0,0 +1,39 @@
//
// Generated By: dol2asm
// Translation Unit: JASDvdThread
//
#include "JSystem/JAudio2/JASDvdThread.h"
#include "JSystem/JAudio2/JASTaskThread.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "dolphin/types.h"
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* ############################################################################################## */
/* 80451208-80451210 000708 0004+04 2/1 0/0 0/0 .sbss sThread__6JASDvd */
JASTaskThread* JASDvd::sThread;
/* 8028FEFC-8028FF04 -00001 0008+00 0/0 0/0 0/0 .text getThreadPointer__6JASDvdFv */
JASTaskThread* JASDvd::getThreadPointer() {
return JASDvd::sThread;
}
/* 8028FF04-8028FFA8 28A844 00A4+00 0/0 1/1 0/0 .text createThread__6JASDvdFliUl */
bool JASDvd::createThread(s32 priority, int param_1, u32 param_2) {
if (sThread != NULL) return false;
sThread = new (JASDram, 0) JASTaskThread(priority, param_1, param_2);
sThread->setCurrentHeap(JKRGetSystemHeap());
OSResumeThread(sThread->getThreadRecord());
return true;
}
+373
View File
@@ -0,0 +1,373 @@
//
// Generated By: dol2asm
// Translation Unit: JASHeapCtrl
//
#include "JSystem/JAudio2/JASHeapCtrl.h"
#include "JSystem/JAudio2/JASMutex.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "dol2asm.h"
//
// Types:
//
struct JASDisposer {
virtual ~JASDisposer();
/* 80290BCC */ virtual void onDispose();
};
//
// Forward References:
//
extern "C" void __ct__7JASHeapFP11JASDisposer();
extern "C" void initRootHeap__7JASHeapFPvUl();
extern "C" void alloc__7JASHeapFP7JASHeapUl();
extern "C" void allocTail__7JASHeapFP7JASHeapUl();
extern "C" void free__7JASHeapFv();
extern "C" void insertChild__7JASHeapFP7JASHeapP7JASHeapPvUlb();
extern "C" void getTailHeap__7JASHeapFv();
extern "C" void getTailOffset__7JASHeapFv();
extern "C" void getCurOffset__7JASHeapFv();
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void __dt__17JASGenericMemPoolFv();
extern "C" void newMemPool__17JASGenericMemPoolFUli();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void free__17JASGenericMemPoolFPvUl();
extern "C" void setupRootHeap__9JASKernelFP12JKRSolidHeapUl();
extern "C" u32 getSystemHeap__9JASKernelFv();
extern "C" u32 getCommandHeap__9JASKernelFv();
extern "C" void setupAramHeap__9JASKernelFUlUl();
extern "C" void getAramHeap__9JASKernelFv();
extern "C" void __sinit_JASHeapCtrl_cpp();
extern "C" void __dt__7JASHeapFv();
extern "C" void onDispose__11JASDisposerFv();
extern "C" u8 audioAramHeap__9JASKernel[68];
extern "C" u8 sAramBase__9JASKernel[4];
extern "C" u8 sSystemHeap__9JASKernel[4];
extern "C" u8 sCommandHeap__9JASKernel[4];
//
// External References:
//
extern "C" void* __nw__FUlP7JKRHeapi();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void __dl__FPv();
extern "C" void __dla__FPv();
extern "C" void create__10JKRExpHeapFUlP7JKRHeapb();
extern "C" void __ct__10JSUPtrLinkFPv();
extern "C" void __dt__10JSUPtrLinkFv();
extern "C" void __dt__10JSUPtrListFv();
extern "C" void initiate__10JSUPtrListFv();
extern "C" void insert__10JSUPtrListFP10JSUPtrLinkP10JSUPtrLink();
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
extern "C" void __register_global_object();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" u8 sSystemHeap__7JKRHeap[4];
//
// Declarations:
//
/* 80290140-802901AC 28AA80 006C+00 1/1 2/2 0/0 .text __ct__7JASHeapFP11JASDisposer */
JASHeap::JASHeap(JASDisposer* disposer) : mTree(this) {
mDisposer = disposer;
mBase = NULL;
mSize = 0;
field_0x40 = 0;
OSInitMutex(&mMutex);
}
/* 802901AC-8029021C 28AAEC 0070+00 1/1 0/0 0/0 .text initRootHeap__7JASHeapFPvUl */
void JASHeap::initRootHeap(void* param_0, u32 param_1) {
JUT_ASSERT(97, ! isAllocated());
JASMutexLock lock(&mMutex);
mBase = (u8*)OSRoundUpPtr(param_0, 0x20);
field_0x40 = NULL;
mSize = param_1 - (u32(mBase) - u32(param_0));
}
/* 8029021C-802903F4 28AB5C 01D8+00 0/0 2/2 0/0 .text alloc__7JASHeapFP7JASHeapUl */
bool JASHeap::alloc(JASHeap* mother, u32 param_1) {
JUT_ASSERT(120, mother != 0);
JASMutexLock lock(&mMutex);
if (isAllocated()) {
#ifdef DEBUG
OSReport("[JASHeap::alloc] すでにヒープは確保されています。初期化してからにしてください。\n");
#endif
return 0;
}
if (!mother->isAllocated()) {
return 0;
}
param_1 = OSRoundUp32B(param_1);
u32 local_28 = mother->getCurOffset();
u32 local_2c = mother->getTailOffset();
if (local_28 + param_1 <= local_2c) {
mother->insertChild(this, mother->getTailHeap(), mother->mBase + local_28, param_1, false);
return 1;
}
s32 r27 = -1;
u8* r29 = mother->mBase;
bool local_43 = false;
JASHeap* local_30 = NULL;
void* local_34;
for (JSUTreeIterator<JASHeap> it = mother->mTree.getFirstChild(); it != mother->mTree.getEndChild(); it++) {
if (r29 >= mother->mBase + local_2c) {
break;
}
u32 local_3c = u32(it->mBase) - u32(r29);
if (local_3c >= param_1 && local_3c < r27) {
local_30 = *it;
local_34 = r29;
r27 = local_3c;
local_43 = true;
}
u32 r25 = it->mSize;
r29 = (u8*)it->mBase + r25;
}
if (r29 != mother->mBase && r29 < mother->mBase + local_2c) {
u32 local_40 = mother->mBase + mother->mSize - r29;
if (local_40 >= param_1 && local_40 < r27) {
local_30 = NULL;
local_34 = r29;
r27 = local_40;
local_43 = true;
}
}
if (!local_43) {
#ifdef DEBUG
OSReport("[JASHeap::alloc] マザーメモリが足りないので確保できません。\n");
#endif
return 0;
}
mother->insertChild(this, local_30, local_34, param_1, false);
return 1;
}
/* 802903F4-802904E4 28AD34 00F0+00 0/0 1/1 0/0 .text allocTail__7JASHeapFP7JASHeapUl */
bool JASHeap::allocTail(JASHeap* param_0, u32 param_1) {
// NONMATCHING
}
/* 802904E4-80290608 28AE24 0124+00 0/0 4/4 0/0 .text free__7JASHeapFv */
// regswap
#ifdef NONMATCHING
bool JASHeap::free() {
JASMutexLock lock(&mMutex);
if (!isAllocated()) {
return false;
}
JSUTreeIterator<JASHeap> stack_20;
for (JSUTreeIterator<JASHeap> it(mTree.getFirstChild()); it != mTree.getEndChild(); it = stack_20) {
stack_20 = it;
stack_20++;
it->free();
}
JSUTree<JASHeap>* parentTree = mTree.getParent();
if (parentTree) {
JASHeap* parentHeap = parentTree->getObject();
if (parentHeap->field_0x40 == this) {
JSUTreeIterator<JASHeap> stack_28(mTree.getPrevChild());
if (stack_28 != mTree.getEndChild()) {
parentHeap->field_0x40 = *stack_28;
} else {
parentHeap->field_0x40 = NULL;
}
}
parentTree->removeChild(&mTree);
}
mBase = NULL;
field_0x40 = NULL;
mSize = 0;
if (mDisposer) {
mDisposer->onDispose();
}
return true;
}
#else
bool JASHeap::free() {
// NONMATCHING
}
#endif
/* 80290608-802906F0 28AF48 00E8+00 2/2 0/0 0/0 .text
* insertChild__7JASHeapFP7JASHeapP7JASHeapPvUlb */
// regalloc
#ifdef NONMATCHING
void JASHeap::insertChild(JASHeap* heap, JASHeap* next, void* param_2, u32 param_3, bool param_4) {
JUT_ASSERT(537, heap != 0);
JUT_ASSERT(538, next == 0 || &mTree == next->mTree.getParent());
JASMutexLock lock(&mMutex);
if (!param_4) {
JSUTreeIterator<JASHeap> it;
if (!next) {
it = mTree.getLastChild();
} else {
it = next->mTree.getPrevChild();
}
JASHeap* r24 = it != mTree.getEndChild() ? it.getObject() : NULL;
if (field_0x40 == r24) {
field_0x40 = heap;
}
}
heap->mBase = (u8*)param_2;
heap->mSize = param_3;
heap->field_0x40 = NULL;
mTree.insertChild(&next->mTree, &heap->mTree);
}
#else
void JASHeap::insertChild(JASHeap* param_0, JASHeap* param_1, void* param_2, u32 param_3,
bool param_4) {
// NONMATCHING
}
#endif
/* 802906F0-8029077C 28B030 008C+00 3/3 0/0 0/0 .text getTailHeap__7JASHeapFv */
JASHeap* JASHeap::getTailHeap() {
JSUTreeIterator<JASHeap> it;
JASMutexLock lock(&mMutex);
if (!field_0x40) {
it = mTree.getFirstChild();
} else {
it = field_0x40->mTree.getNextChild();
}
if (it == mTree.getEndChild()) {
return NULL;
}
return it.getObject();
}
/* 8029077C-802907E0 28B0BC 0064+00 2/2 0/0 0/0 .text getTailOffset__7JASHeapFv */
u32 JASHeap::getTailOffset() {
JASMutexLock lock(&mMutex);
JASHeap* heap = getTailHeap();
u32 offset = !heap ? mSize : heap->mBase - mBase;
return offset;
}
/* 802907E0-80290848 28B120 0068+00 2/2 0/0 0/0 .text getCurOffset__7JASHeapFv */
u32 JASHeap::getCurOffset() {
JASMutexLock lock(&mMutex);
u32 offset = !field_0x40 ? 0 : field_0x40->mBase + field_0x40->mSize - mBase;
return offset;
}
/* 80290848-80290860 28B188 0018+00 0/0 32/32 0/0 .text __ct__17JASGenericMemPoolFv */
JASGenericMemPool::JASGenericMemPool() {
field_0x0 = NULL;
freeMemCount = 0;
totalMemCount = 0;
field_0xc = 0;
}
/* 80290860-802908C8 28B1A0 0068+00 0/0 9/9 0/0 .text __dt__17JASGenericMemPoolFv */
JASGenericMemPool::~JASGenericMemPool() {
// NONMATCHING
}
/* ############################################################################################## */
/* 80451210-80451214 000710 0004+00 2/2 15/15 0/0 .sbss JASDram */
JKRSolidHeap* JASDram;
/* 802908C8-80290948 28B208 0080+00 0/0 4/4 0/0 .text newMemPool__17JASGenericMemPoolFUli
*/
void JASGenericMemPool::newMemPool(u32 param_0, int param_1) {
// NONMATCHING
}
/* 80290948-80290994 28B288 004C+00 0/0 13/13 0/0 .text alloc__17JASGenericMemPoolFUl */
void* JASGenericMemPool::alloc(u32 param_0) {
// NONMATCHING
}
/* 80290994-802909B8 28B2D4 0024+00 0/0 15/15 0/0 .text free__17JASGenericMemPoolFPvUl */
void JASGenericMemPool::free(void* param_0, u32 param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80451214-80451218 000714 0004+00 1/1 0/0 0/0 .sbss sAramBase__9JASKernel */
u32 JASKernel::sAramBase;
/* 80451218-8045121C 000718 0004+00 2/1 0/0 0/0 .sbss sSystemHeap__9JASKernel */
JKRHeap* JASKernel::sSystemHeap;
/* 8045121C-80451220 00071C 0004+00 2/1 0/0 0/0 .sbss sCommandHeap__9JASKernel */
JASMemChunkPool<1024, JASThreadingModel::ObjectLevelLockable>* JASKernel::sCommandHeap;
/* 802909B8-80290AC0 28B2F8 0108+00 0/0 1/1 0/0 .text setupRootHeap__9JASKernelFP12JKRSolidHeapUl
*/
// implement JASMemChunkPool
#ifdef NONMATCHING
void JASKernel::setupRootHeap(JKRSolidHeap* heap, u32 size) {
JUT_ASSERT(784, heap);
sSystemHeap = JKRExpHeap::create(size, heap, false);
JUT_ASSERT(787, sSystemHeap);
sCommandHeap = new JASMemChunkPool();
JUT_ASSERT(790, sCommandHeap);
JASDram = heap;
}
#else
void JASKernel::setupRootHeap(JKRSolidHeap* param_0, u32 param_1) {
// NONMATCHING
}
#endif
/* 80290AC0-80290AC8 -00001 0008+00 0/0 0/0 0/0 .text getSystemHeap__9JASKernelFv */
JKRHeap* JASKernel::getSystemHeap() {
return JASKernel::sSystemHeap;
}
/* 80290AC8-80290AD0 -00001 0008+00 0/0 0/0 0/0 .text getCommandHeap__9JASKernelFv */
JASMemChunkPool<1024, JASThreadingModel::ObjectLevelLockable>* JASKernel::getCommandHeap() {
return JASKernel::sCommandHeap;
}
/* ############################################################################################## */
/* 804315D0-804315DC 05E2F0 000C+00 1/1 0/0 0/0 .bss @313 */
static u8 lit_313[12];
/* 804315DC-80431620 05E2FC 0044+00 3/3 0/0 0/0 .bss audioAramHeap__9JASKernel */
u8 JASKernel::audioAramHeap[68];
/* 80290AD0-80290B08 28B410 0038+00 0/0 1/1 0/0 .text setupAramHeap__9JASKernelFUlUl */
void JASKernel::setupAramHeap(u32 param_0, u32 param_1) {
sAramBase = param_0;
(*(JASHeap*)audioAramHeap).initRootHeap((void*)sAramBase, param_1);
}
/* 80290B08-80290B14 28B448 000C+00 0/0 3/2 0/0 .text getAramHeap__9JASKernelFv */
JASHeap* JASKernel::getAramHeap() {
return (JASHeap*)audioAramHeap;
}
/* 80290B14-80290B54 28B454 0040+00 0/0 1/0 0/0 .text __sinit_JASHeapCtrl_cpp */
void __sinit_JASHeapCtrl_cpp() {
// NONMATCHING
}
#pragma push
#pragma force_active on
REGISTER_CTORS(0x80290B14, __sinit_JASHeapCtrl_cpp);
#pragma pop
/* 80290B54-80290BCC 28B494 0078+00 1/1 3/3 0/0 .text __dt__7JASHeapFv */
//JASHeap::~JASHeap() {
void __dt__7JASHeapFv() {
// NONMATCHING
}
/* 80290BCC-80290BD0 28B50C 0004+00 0/0 1/0 0/0 .text onDispose__11JASDisposerFv */
void JASDisposer::onDispose() {
/* empty function */
}
+85
View File
@@ -0,0 +1,85 @@
//
// Generated By: dol2asm
// Translation Unit: JASLfo
//
#include "JSystem/JAudio2/JASLfo.h"
#include "SSystem/SComponent/c_math.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* ############################################################################################## */
/* 8029BD14-8029BD44 296654 0030+00 1/1 1/1 0/0 .text __ct__6JASLfoFv */
JASLfo::JASLfo() {
field_0x0 = 0;
field_0x4 = 1;
field_0x8 = 0.0f;
mDepth = 0.0f;
mPitch = 1.0f;
mDelay = 0;
field_0x16 = 0;
}
/* ############################################################################################## */
/* 8029BD44-8029BDD8 296684 0094+00 0/0 3/3 0/0 .text getValue__6JASLfoCFv */
f32 JASLfo::getValue() const {
if (field_0x16) {
return 0.0f;
}
if (mDepth == 0.0f) {
return 0.0f;
}
return mDepth * JMASinLap(field_0x8);
}
/* ############################################################################################## */
/* 8029BDD8-8029BE2C 296718 0054+00 0/0 2/2 0/0 .text incCounter__6JASLfoFf */
void JASLfo::incCounter(f32 param_0) {
if (field_0x16) {
field_0x16--;
return;
}
field_0x8 += param_0 * ((1.0f / 72.0f) * mPitch);
if (field_0x8 >= 1.0f) {
field_0x8 -= 1.0f;
}
}
/* ############################################################################################## */
/* 80431C40-80431C58 05E960 0018+00 2/2 1/1 0/0 .bss sFreeRunLfo__6JASLfo */
JASLfo JASLfo::sFreeRunLfo;
/* 8029BE2C-8029BE6C 29676C 0040+00 0/0 1/1 0/0 .text resetCounter__6JASLfoFv */
void JASLfo::resetCounter() {
field_0x16 = mDelay;
switch (field_0x4) {
case 0:
field_0x8 = sFreeRunLfo.field_0x8;
break;
case 1:
field_0x8 = 0.0f;
break;
}
}
/* 8029BE6C-8029BE94 2967AC 0028+00 0/0 1/0 0/0 .text __sinit_JASLfo_cpp */
+217
View File
@@ -0,0 +1,217 @@
//
// Generated By: dol2asm
// Translation Unit: JASOscillator
//
#include "JSystem/JAudio2/JASOscillator.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* ############################################################################################## */
/* 8029BE94-8029BEC4 2967D4 0030+00 0/0 1/1 0/0 .text __ct__13JASOscillatorFv */
JASOscillator::JASOscillator() {
mData = NULL;
_14 = 0;
mDirectRelease = 0;
_18 = 0;
_1C = 0;
_0C = 0.0f;
_10 = 0.0f;
_08 = 0.0f;
_04 = 0.0f;
}
/* ############################################################################################## */
/* 8029BEC4-8029BF68 296804 00A4+00 0/0 1/1 0/0 .text
* initStart__13JASOscillatorFPCQ213JASOscillator4Data */
void JASOscillator::initStart(JASOscillator::Data const* data) {
mData = data;
_04 = 0.0f;
_08 = 0.0f;
_0C = 0.0f;
_14 = 0;
mDirectRelease = 0;
if (!data) {
_1C = 0;
return;
}
if (mData->mTable == NULL) {
_1C = 2;
_08 = 1.0f;
return;
}
_10 = mData->mTable[0]._4 / 32768.0f;
_18 = mData->mTable[0]._0;
_1C = 1;
}
/* 8029BF68-8029BFC8 2968A8 0060+00 0/0 1/1 0/0 .text incCounter__13JASOscillatorFf */
void JASOscillator::incCounter(f32 param_0) {
const short* v1;
switch (_1C) {
case 0:
case 2:
return;
case 1:
break;
}
_04 += param_0 * mData->_04;
update();
}
/* 8029BFC8-8029BFE4 296908 001C+00 0/0 1/1 0/0 .text getValue__13JASOscillatorCFv */
f32 JASOscillator::getValue() const {
return _08 * mData->mScale + mData->_14;
}
/* 8029BFE4-8029C0E0 296924 00FC+00 0/0 1/1 0/0 .text release__13JASOscillatorFv */
void JASOscillator::release() {
if (mData->_0C == NULL && mDirectRelease == 0) {
stop();
return;
}
if (mDirectRelease != 0) {
_04 = 0.0f;
_0C = _08;
_10 = 0.0f;
_14 = 0;
_18 = (mDirectRelease >> 14) & 3;
_1C = 4;
update();
return;
}
if (mData->mTable != mData->_0C) {
_04 = 0.0f;
_0C = _08;
_10 = mData->_0C[0]._4 / 32768.0f;
_14 = 0;
_18 = mData->_0C[0]._0;
}
_1C = 3;
update();
}
/* 8029C0E0-8029C2C0 296A20 01E0+00 2/2 1/1 0/0 .text update__13JASOscillatorFv */
void JASOscillator::update() {
if (_1C == 4) {
s16 x = mDirectRelease & 0x3FFF;
if (_04 < x) {
updateCurrentValue(x);
} else {
_08 = _10;
_1C = 0;
}
return;
}
if (_1C == 2) return;
const Point* psVar1;
if (_1C == 1) {
psVar1 = mData->mTable;
} else {
psVar1 = mData->_0C;
}
if (psVar1 == NULL) {
_1C = 2;
return;
}
while (_04 >= psVar1[_14]._2) {
_04 -= psVar1[_14]._2;
_08 = _10;
_14++;
_0C = _08;
const s16* ps = &psVar1[_14]._0;
switch(ps[0]) {
case 0xf:
_1C = 0;
return;
case 0xe:
_1C = 2;
return;
case 0xd:
_14 = ps[2];
break;
default:
_18 = ps[0];
_10 = ps[2] / 32768.0f;
break;
}
}
updateCurrentValue(psVar1[_14]._2);
}
/* ############################################################################################## */
/* 8039B1D0-8039B214 027830 0044+00 1/0 0/0 0/0 .rodata sCurveTableLinear__13JASOscillator
*/
f32 const JASOscillator::sCurveTableLinear[17] = {
1.0, 0.9375, 0.875, 0.8125, 0.75, 0.6875, 0.625, 0.5625, 0.5,
0.4375, 0.375, 0.3125, 0.25, 0.1875, 0.125, 0.0625, 0.0,
};
/* 8039B214-8039B258 027874 0044+00 1/0 0/0 0/0 .rodata sCurveTableSampleCell__13JASOscillator */
f32 const JASOscillator::sCurveTableSampleCell[17] = {
1.0, 0.9704890251159668, 0.7812740206718445, 0.5462809801101685, 0.39979198575019836,
0.28931498527526855, 0.21210399270057678, 0.15747599303722382, 0.1126129999756813, 0.08178959786891937,
0.057985201478004456, 0.04364150017499924, 0.03082370012998581, 0.023712899535894394, 0.015259300358593464,
0.00915555004030466, 0.0
};
/* 8039B258-8039B29C 0278B8 0044+00 1/0 0/0 0/0 .rodata sCurveTableSqRoot__13JASOscillator
*/
f32 const JASOscillator::sCurveTableSqRoot[17] = {
1.0, 0.8789060115814209, 0.765625, 0.6601560115814209, 0.5625, 0.4726560115814209,
0.390625, 0.3164060115814209, 0.25, 0.1914059966802597, 0.140625, 0.09765619784593582,
0.0625, 0.03515620157122612, 0.015625, 0.00390625, 0.0
};
/* 8039B29C-8039B2E0 0278FC 0044+00 1/0 0/0 0/0 .rodata sCurveTableSquare__13JASOscillator
*/
f32 const JASOscillator::sCurveTableSquare[17] = {
1.0, 0.9682459831237793, 0.9354140162467957, 0.9013879895210266, 0.8660249710083008,
0.8291559815406799, 0.790569007396698, 0.75, 0.7071070075035095, 0.66143798828125,
0.6123719811439514, 0.55901700258255, 0.5, 0.433012992143631, 0.35355299711227417, 0.25, 0.0,
};
/* 803C78A8-803C78B8 -00001 0010+00 1/1 0/0 0/0 .data table_list$151 */
static f32* table_list[4] = {
(f32*)JASOscillator::sCurveTableLinear,
(f32*)JASOscillator::sCurveTableSquare,
(f32*)JASOscillator::sCurveTableSqRoot,
(f32*)JASOscillator::sCurveTableSampleCell,
};
/* 8029C2C0-8029C388 296C00 00C8+00 1/1 0/0 0/0 .text updateCurrentValue__13JASOscillatorFf */
void JASOscillator::updateCurrentValue(f32 param_0) {
f32* table = table_list[_18];
f32 fVar1 = 16.0f * (_04 / param_0);
u32 index = (u32) fVar1;
f32 fVar3 = (fVar1 - index);
f32 fVar2 = (1.0f - fVar3) * table[index];
f32 fVar4 = fVar2 + fVar3 * table[index + 1];
_08 = _0C * fVar4 + _10 * (1.0f - fVar4);
}
+71
View File
@@ -0,0 +1,71 @@
//
// Generated By: dol2asm
// Translation Unit: JASProbe
//
#include "JSystem/JAudio2/JASProbe.h"
#include "dolphin/os.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 80290D74-80290DC4 28B6B4 0050+00 1/1 0/0 0/0 .text start__8JASProbeFPCc */
void JASProbe::start(char const* name) {
volatile BOOL interrupts = OSDisableInterrupts();
mName = name;
mStartTime = OSGetTime();
OSRestoreInterrupts(interrupts);
}
/* ############################################################################################## */
/* 80290DC4-80290EE4 28B704 0120+00 1/1 0/0 0/0 .text stop__8JASProbeFv */
void JASProbe::stop() {
volatile int interrupts = OSDisableInterrupts();
_08 = (u32)OSGetTime() - mStartTime;
_08 /= OS_TIMER_CLOCK / 59.94f;
if (_10 < _08 && 100 < _1A8) {
_10 = _08;
}
_0C = _0C * 0.96f + _08 * 0.04f;
u32 resultIndex = _1A8 % 100;
_14 -= _18[resultIndex];
_18[resultIndex] = _08;
_14 += _08;
_1A8++;
OSRestoreInterrupts(interrupts);
}
/* ############################################################################################## */
/* 80431620-80431660 05E340 0040+00 2/2 0/0 0/0 .bss sProbeTable__8JASProbe */
JASProbe* JASProbe::sProbeTable[16];
/* 80290EE4-80290F24 28B824 0040+00 0/0 7/7 0/0 .text start__8JASProbeFlPCc */
void JASProbe::start(s32 index, char const* name) {
if (index < 16) {
if (sProbeTable[index] != NULL) {
sProbeTable[index]->start(name);
}
}
}
/* 80290F24-80290F64 28B864 0040+00 0/0 6/6 0/0 .text stop__8JASProbeFl */
void JASProbe::stop(s32 index) {
if (index < 16) {
if (sProbeTable[index] != NULL) {
sProbeTable[index]->stop();
}
}
}
+150
View File
@@ -0,0 +1,150 @@
//
// Generated By: dol2asm
// Translation Unit: JASRegisterParam
//
#include "JSystem/JAudio2/JASRegisterParam.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 80293644-80293664 28DF84 0020+00 0/0 1/1 0/0 .text __ct__16JASRegisterParamFv */
JASRegisterParam::JASRegisterParam() {
for (int i = 0; i < 14; i++) {
field_0x0[i] = 0;
}
}
/* 80293664-80293684 28DFA4 0020+00 0/0 1/1 0/0 .text init__16JASRegisterParamFv */
void JASRegisterParam::init() {
for (int i = 0; i < 14; i++) {
field_0x0[i] = 0;
}
}
/* ############################################################################################## */
/* 80293684-802937B8 28DFC4 0134+00 1/0 4/4 0/0 .text
* write__16JASRegisterParamFQ216JASRegisterParam5RegIDUl */
void JASRegisterParam::write(JASRegisterParam::RegID param_0, u32 param_1) {
if (param_0 < 14) {
if (param_0 <= 2) {
field_0x0[param_0] = (u8)param_1;
return;
}
field_0x0[param_0] = param_1;
return;
}
switch (param_0) {
case 32:
field_0x0[0] = (param_1 >> 8) & 0xff;
field_0x0[1] = param_1 & 0xff;
break;
case 33:
field_0x0[4] = param_1 >> 16;
field_0x0[5] = param_1;
break;
case 34:
field_0x0[4] &= 0xff;
field_0x0[4] |= ((param_1 & 0xff) << 8);
break;
case 35:
field_0x0[4] &= 0xff00;
field_0x0[4] |= param_1 & 0xff;
break;
case 36:
field_0x0[5] &= 0xff;
field_0x0[5] |= (param_1 & 0xff) << 8;
break;
case 37:
field_0x0[5] &= 0xff00;
field_0x0[5] |= param_1 & 0xff;
break;
case 38:
field_0x0[6] = param_1 >> 16;
field_0x0[7] = param_1;
break;
case 39:
field_0x0[8] = param_1 >> 16;
field_0x0[9] = param_1;
break;
case 40:
field_0x0[10] = param_1 >> 16;
field_0x0[11] = param_1;
break;
case 41:
field_0x0[12] = param_1 >> 16;
field_0x0[13] = param_1;
break;
}
}
/* ############################################################################################## */
/* 802937B8-802938BC 28E0F8 0104+00 1/0 1/1 0/0 .text
* read__16JASRegisterParamFQ216JASRegisterParam5RegID */
u32 JASRegisterParam::read(JASRegisterParam::RegID param_0) {
if (param_0 < 14) {
return field_0x0[param_0];
}
u32 rv = 0;
switch (param_0) {
case 32:
rv = ((field_0x0[0] & 0xff) << 8) | (field_0x0[1] & 0xff) ;
break;
case 33:
rv = field_0x0[4];
rv <<= 16;
rv |= field_0x0[5];
break;
case 34:
rv = (u8)(field_0x0[4] >> 8);
break;
case 35:
rv = (u8)field_0x0[4];
break;
case 36:
rv = (u8)(field_0x0[5] >> 8);
break;
case 37:
rv = (u8)field_0x0[5];
break;
case 38:
rv = field_0x0[6];
rv <<= 16;
rv |= field_0x0[7];
break;
case 39:
rv = field_0x0[8];
rv <<= 16;
rv |= field_0x0[9];
break;
case 40:
rv = field_0x0[10];
rv <<= 16;
rv |= field_0x0[11];
break;
case 41:
// !@bug I think this should get field_0x0[12] and field_0x0[13]. Looks like a copy paste bug.
rv = field_0x0[10];
rv <<= 16;
rv |= field_0x0[11];
break;
}
return rv;
}
+60
View File
@@ -0,0 +1,60 @@
//
// Generated By: dol2asm
// Translation Unit: JASReport
//
#include "JSystem/JAudio2/JASReport.h"
#include "JSystem/JAudio2/JASMutex.h"
#include "stdio.h"
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* ############################################################################################## */
/* 80431660-80431678 05E380 0018+00 1/1 0/0 0/0 .bss sMutex */
static OSMutex sMutex;
/* 80451220-80451224 000720 0004+00 1/1 0/0 0/0 .sbss sBuffer */
static char* sBuffer;
/* 80451224-80451228 000724 0004+00 1/1 0/0 0/0 .sbss sLineMax */
static int sLineMax;
/* 80451228-8045122C 000728 0004+00 1/1 0/0 0/0 .sbss sLineCount */
static int sLineCount;
/* 8045122C-80451230 00072C 0004+00 1/1 0/0 0/0 .sbss sTop */
static int sTop;
/* 80290F64-80291060 28B8A4 00FC+00 0/0 5/5 0/0 .text JASReport__FPCce */
void JASReport(const char * str, ...) {
if(sBuffer) {
va_list vl;
va_start(vl, str);
JASMutexLock mutexLock(&sMutex);
vsnprintf(sBuffer + (sTop * 64), 64, str, vl);
va_end(vl);
sTop++;
if (sTop >= sLineMax)
sTop = 0;
if (sLineCount < sLineMax)
sLineCount++;
}
}
/* ############################################################################################## */
/* 80451230-80451238 -00001 0008+00 0/0 6/6 0/0 .sbss None */
/* 80451230 0001+00 data_80451230 None */
/* 80451231 0007+00 data_80451231 None */
u8 struct_80451230[8];
+71
View File
@@ -0,0 +1,71 @@
/**
* JASResArcLoader.cpp
* JAS - Resource Archive Loader
*/
#include "JSystem/JAudio2/JASResArcLoader.h"
#include "JSystem/JAudio2/JASDvdThread.h"
#include "JSystem/JAudio2/JASTaskThread.h"
/* 80290BD0-80290C04 28B510 0034+00 0/0 2/2 0/0 .text
* getResSize__15JASResArcLoaderFPC10JKRArchiveUs */
size_t JASResArcLoader::getResSize(JKRArchive const* i_archiveP, u16 i_resourceID) {
JKRArchive::SDIFileEntry* file = i_archiveP->findIdResource(i_resourceID);
if (file == 0) {
return 0;
}
return file->data_size;
}
/* 80290C04-80290C7C 28B544 0078+00 0/0 1/1 0/0 .text
* getResMaxSize__15JASResArcLoaderFPC10JKRArchive */
size_t JASResArcLoader::getResMaxSize(JKRArchive const* i_archiveP) {
u32 maxSize, index;
u32 fileEntries = i_archiveP->countFile();
for (maxSize = 0, index = 0; index < fileEntries; index++) {
JKRArchive::SDIFileEntry* file = i_archiveP->findIdxResource(index);
if (file) {
if (maxSize < file->data_size) {
maxSize = file->data_size;
}
}
}
return maxSize;
}
/* 80290C7C-80290D18 28B5BC 009C+00 1/1 0/0 0/0 .text loadResourceCallback__15JASResArcLoaderFPv
*/
static void JASResArcLoader::loadResourceCallback(void* args) {
CallbackArgs* castedArgs = static_cast<CallbackArgs*>(args);
u32 readResult = castedArgs->mArchive->readResource(castedArgs->mBuffer, castedArgs->mBufferSize, castedArgs->mID);
if (castedArgs->mCallback) {
castedArgs->mCallback(readResult, castedArgs->mCallbackArg);
}
if (readResult == 0) {
if (castedArgs->mQueue) {
OSSendMessage(castedArgs->mQueue, (void*)RESARCMSG_Error, OS_MESSAGE_BLOCK);
}
} else {
if (castedArgs->mQueue) {
OSSendMessage(castedArgs->mQueue, (void*)RESARCMSG_Success, OS_MESSAGE_BLOCK);
}
}
}
/* 80290D18-80290D74 28B658 005C+00 0/0 1/1 0/0 .text
* loadResourceAsync__15JASResArcLoaderFP10JKRArchiveUsPUcUlPFUlUl_vUl */
int JASResArcLoader::loadResourceAsync(JKRArchive* archive, u16 id, u8* buffer, u32 size, LoadCallback callback, u32 cbArg)
{
CallbackArgs args(id, buffer, size, archive);
args.mCallback = callback;
args.mCallbackArg = cbArg;
return JASDvd::getThreadPointer()->sendCmdMsg(&loadResourceCallback, (void*)&args, sizeof(CallbackArgs));
}
+158
View File
@@ -0,0 +1,158 @@
//
// Generated By: dol2asm
// Translation Unit: JASSeqCtrl
//
#include "JSystem/JAudio2/JASSeqCtrl.h"
#include "JSystem/JAudio2/JASSeqParser.h"
#include "JSystem/JAudio2/JASTrack.h"
/* ############################################################################################## */
/* 80451238-80451240 000738 0004+04 3/3 0/0 0/0 .sbss sDefaultParser__10JASSeqCtrl */
JASSeqParser JASSeqCtrl::sDefaultParser;
/* 802938BC-80293924 28E1FC 0068+00 0/0 1/1 0/0 .text __ct__10JASSeqCtrlFv */
JASSeqCtrl::JASSeqCtrl() {
mReader.init();
field_0x3c = &sDefaultParser;
field_0x40 = 0;
field_0x44 = NULL;
field_0x48 = 0;
field_0x4c = 0;
field_0x4e = 0;
field_0x50 = 0;
field_0x51 = 0;
field_0x54 = 0;
field_0x58 = 0;
mReader.init();
}
/* 80293924-80293980 28E264 005C+00 0/0 1/1 0/0 .text init__10JASSeqCtrlFv */
void JASSeqCtrl::init() {
mReader.init();
field_0x3c = &sDefaultParser;
field_0x40 = 0;
field_0x44 = NULL;
field_0x48 = 0;
field_0x4c = 0;
field_0x4e = 0;
field_0x50 = 0;
field_0x54 = 0;
field_0x58 = 0;
field_0x51 = 0;
}
/* 80293980-802939C4 28E2C0 0044+00 0/0 1/1 0/0 .text start__10JASSeqCtrlFPvUl */
void JASSeqCtrl::start(void* param_0, u32 param_1) {
mReader.init(param_0);
mReader.jump(param_1);
}
/* 802939C4-80293ABC 28E304 00F8+00 0/0 1/1 0/0 .text tickProc__10JASSeqCtrlFP8JASTrack
*/
int JASSeqCtrl::tickProc(JASTrack* param_0) {
if (!mReader.getBase()) {
return 0;
}
interrupt(INTRTYPE_VALUE_6);
timerProcess();
if (field_0x51) {
if (!param_0->checkNoteStop(0)) {
return 0;
}
field_0x51 = 0;
}
if (field_0x40 > 0) {
field_0x40--;
}
checkIntr();
while ((field_0x40 == 0 || field_0x44 != NULL) && field_0x51 == 0) {
if (field_0x3c->parse(param_0) < 0) {
return -1;
}
}
return 0;
}
/* 80293ABC-80293AE0 28E3FC 0024+00 2/2 2/2 0/0 .text
* interrupt__10JASSeqCtrlFQ210JASSeqCtrl8IntrType */
void JASSeqCtrl::interrupt(JASSeqCtrl::IntrType param_0) {
if (field_0x4e & (1 << param_0)) {
field_0x4c |= (1 << param_0);
}
}
/* 80293AE0-80293AF0 28E420 0010+00 0/0 1/1 0/0 .text setIntrMask__10JASSeqCtrlFUl */
void JASSeqCtrl::setIntrMask(u32 param_0) {
field_0x4e |= param_0;
}
/* 80293AF0-80293B00 28E430 0010+00 0/0 1/1 0/0 .text clrIntrMask__10JASSeqCtrlFUl */
void JASSeqCtrl::clrIntrMask(u32 param_0) {
field_0x4e &= ~param_0;
}
/* 80293B00-80293B28 28E440 0028+00 0/0 1/1 0/0 .text retIntr__10JASSeqCtrlFv */
int JASSeqCtrl::retIntr() {
if (field_0x44 == NULL) {
return 0;
}
mReader.jump(field_0x44);
field_0x44 = NULL;
return 1;
}
/* 80293B28-80293B78 28E468 0050+00 1/1 0/0 0/0 .text findIntr__10JASSeqCtrlFv */
int JASSeqCtrl::findIntr() {
u32 uVar1 = field_0x4e & field_0x4c;
for (int i = 0; uVar1 != 0; uVar1 >>= 1, i++) {
if (uVar1 & 1) {
field_0x4c &= ~(1 << i);
return i;
}
}
return -1;
}
/* 80293B78-80293BE8 28E4B8 0070+00 1/1 2/2 0/0 .text checkIntr__10JASSeqCtrlFv */
void JASSeqCtrl::checkIntr() {
if (field_0x44) return;
int intr = findIntr();
if (intr < 0) return;
u32 uVar2 = field_0x48;
uVar2 += intr * 3;
u32 uVar1 = get24(uVar2);
field_0x44 = mReader.getCur();
mReader.jump(uVar1);
}
/* 80293BE8-80293C6C 28E528 0084+00 1/1 0/0 0/0 .text timerProcess__10JASSeqCtrlFv */
void JASSeqCtrl::timerProcess() {
if (field_0x54 == 0) return;
field_0x54--;
if (field_0x54) return;
interrupt(INTRTYPE_VALUE_5);
if (field_0x50) {
field_0x50--;
if (field_0x50) {
field_0x54 = field_0x58;
}
} else {
field_0x54 = field_0x58;
}
}
/* ############################################################################################## */
File diff suppressed because it is too large Load Diff
+121
View File
@@ -0,0 +1,121 @@
/**
* JASSeqReader.cpp
*
*/
#include "JSystem/JAudio2/JASSeqReader.h"
/* 80296108-80296148 290A48 0040+00 0/0 2/2 0/0 .text init__12JASSeqReaderFv */
void JASSeqReader::init() {
field_0x00 = 0;
field_0x04 = 0;
field_0x08 = 0;
for (int i = 0; i < 8; i++) {
field_0x0c[i] = NULL;
field_0x2c[i] = 0;
}
}
/* 80296148-8029618C 290A88 0044+00 0/0 1/1 0/0 .text init__12JASSeqReaderFPv */
void JASSeqReader::init(void* param_0) {
field_0x00 = (u32*)param_0;
field_0x04 = (u8*)field_0x00;
field_0x08 = 0;
for (int i = 0; i < 8; i++) {
field_0x0c[i] = NULL;
field_0x2c[i] = 0;
}
}
/* 8029618C-802961CC 290ACC 0040+00 0/0 3/3 0/0 .text call__12JASSeqReaderFUl */
bool JASSeqReader::call(u32 param_0) {
if (field_0x08 >= 8) {
return false;
}
field_0x0c[field_0x08++] = (u16*)field_0x04;
field_0x04 = (u8*)((int)field_0x00 + param_0);
return true;
}
/* 802961CC-80296210 290B0C 0044+00 0/0 1/1 0/0 .text loopStart__12JASSeqReaderFUl */
bool JASSeqReader::loopStart(u32 param_0) {
if (8 <= field_0x08) {
return false;
}
field_0x0c[field_0x08] = (u16*)field_0x04;
field_0x2c[field_0x08++] = param_0;
return true;
}
/* 80296210-8029627C 290B50 006C+00 0/0 1/1 0/0 .text loopEnd__12JASSeqReaderFv */
bool JASSeqReader::loopEnd() {
if (field_0x08 == 0) {
return false;
}
u16 tmp = field_0x2c[field_0x08 - 1];
if (tmp != 0) {
tmp--;
}
if (!tmp) {
field_0x08--;
return true;
}
field_0x2c[field_0x08 - 1] = tmp;
field_0x04 = (u8*)field_0x0c[field_0x08 - 1];
return true;
}
/* 8029627C-802962B0 290BBC 0034+00 0/0 2/2 0/0 .text ret__12JASSeqReaderFv */
bool JASSeqReader::ret() {
if (field_0x08 == 0) {
return false;
}
field_0x04 = (u8*)field_0x0c[--field_0x08];
return true;
}
/* 802962B0-8029631C 290BF0 006C+00 0/0 2/2 0/0 .text readMidiValue__12JASSeqReaderFv */
int JASSeqReader::readMidiValue() {
int byte = readByte();
if (!(byte & 0x80)) {
return byte;
}
byte &= 0x7f;
int i = 0;
while (true) {
if (2 < i) {
return 0;
}
u8 newByte = readByte();
byte = byte << 7;
byte |= newByte & 0x7f;
if (!(newByte & 0x80)) {
break;
}
i++;
}
return byte;
}
+188
View File
@@ -0,0 +1,188 @@
//
// Generated By: dol2asm
// Translation Unit: JASSimpleWaveBank
//
#include "JSystem/JAudio2/JASSimpleWaveBank.h"
#include "dol2asm.h"
//
// Types:
//
struct JKRHeap {};
struct JASWaveInfo {
static u32 one[1 + 1 /* padding */];
};
struct JASWaveArc {
/* 80298FA0 */ void onLoadDone();
/* 80298FA4 */ void onEraseDone();
/* 8029A13C */ JASWaveArc();
/* 8029A1B4 */ ~JASWaveArc();
/* 8029A664 */ void onDispose();
};
struct JASSimpleWaveBank {
struct TWaveHandle {
/* 80298D84 */ ~TWaveHandle();
/* 80298F38 */ void getWavePtr() const;
/* 80298F5C */ TWaveHandle();
/* 80298F90 */ void getWaveInfo() const;
};
/* 80298C94 */ JASSimpleWaveBank();
/* 80298CF4 */ ~JASSimpleWaveBank();
/* 80298DE0 */ void setWaveTableSize(u32, JKRHeap*);
/* 80298E60 */ void getWaveHandle(u32) const;
/* 80298E84 */ void setWaveInfo(u32, JASWaveInfo const&);
/* 80298F18 */ void getWaveArc(u32);
/* 80298F98 */ bool getArcCount() const;
};
//
// Forward References:
//
extern "C" void __ct__17JASSimpleWaveBankFv();
extern "C" void __dt__17JASSimpleWaveBankFv();
extern "C" void __dt__Q217JASSimpleWaveBank11TWaveHandleFv();
extern "C" void setWaveTableSize__17JASSimpleWaveBankFUlP7JKRHeap();
extern "C" void getWaveHandle__17JASSimpleWaveBankCFUl();
extern "C" void setWaveInfo__17JASSimpleWaveBankFUlRC11JASWaveInfo();
extern "C" void getWaveArc__17JASSimpleWaveBankFUl();
extern "C" void getWavePtr__Q217JASSimpleWaveBank11TWaveHandleCFv();
extern "C" void __ct__Q217JASSimpleWaveBank11TWaveHandleFv();
extern "C" void getWaveInfo__Q217JASSimpleWaveBank11TWaveHandleCFv();
extern "C" bool getArcCount__17JASSimpleWaveBankCFv();
extern "C" void onLoadDone__10JASWaveArcFv();
extern "C" void onEraseDone__10JASWaveArcFv();
extern "C" static void func_80298FA8();
//
// 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 __destroy_new_array();
extern "C" void __construct_new_array();
extern "C" void _savegpr_29();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__13JASWaveHandle[5];
extern "C" extern void* __vt__11JASWaveBank[6];
extern "C" u32 one__11JASWaveInfo[1 + 1 /* padding */];
//
// Declarations:
//
/* ############################################################################################## */
/* 803C7798-803C77AC 0248B8 0014+00 2/2 0/0 0/0 .data __vt__Q217JASSimpleWaveBank11TWaveHandle */
SECTION_DATA extern void* __vt__Q217JASSimpleWaveBank11TWaveHandle[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__Q217JASSimpleWaveBank11TWaveHandleFv,
(void*)getWaveInfo__Q217JASSimpleWaveBank11TWaveHandleCFv,
(void*)getWavePtr__Q217JASSimpleWaveBank11TWaveHandleCFv,
};
/* 803C77AC-803C77E0 0248CC 0030+04 2/2 0/0 0/0 .data __vt__17JASSimpleWaveBank */
SECTION_DATA extern void* __vt__17JASSimpleWaveBank[12 + 1 /* padding */] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__17JASSimpleWaveBankFv,
(void*)getWaveHandle__17JASSimpleWaveBankCFUl,
(void*)getWaveArc__17JASSimpleWaveBankFUl,
(void*)getArcCount__17JASSimpleWaveBankCFv,
(void*)NULL,
(void*)NULL,
(void*)func_80298FA8,
(void*)onDispose__10JASWaveArcFv,
(void*)onLoadDone__10JASWaveArcFv,
(void*)onEraseDone__10JASWaveArcFv,
/* padding */
NULL,
};
/* 80298C94-80298CF4 2935D4 0060+00 0/0 1/1 0/0 .text __ct__17JASSimpleWaveBankFv */
JASSimpleWaveBank::JASSimpleWaveBank() {
// NONMATCHING
}
/* 80298CF4-80298D84 293634 0090+00 2/1 0/0 0/0 .text __dt__17JASSimpleWaveBankFv */
JASSimpleWaveBank::~JASSimpleWaveBank() {
// NONMATCHING
}
/* 80298D84-80298DE0 2936C4 005C+00 3/2 0/0 0/0 .text __dt__Q217JASSimpleWaveBank11TWaveHandleFv
*/
JASSimpleWaveBank::TWaveHandle::~TWaveHandle() {
// NONMATCHING
}
/* 80298DE0-80298E60 293720 0080+00 0/0 1/1 0/0 .text
* setWaveTableSize__17JASSimpleWaveBankFUlP7JKRHeap */
void JASSimpleWaveBank::setWaveTableSize(u32 param_0, JKRHeap* param_1) {
// NONMATCHING
}
/* 80298E60-80298E84 2937A0 0024+00 1/0 0/0 0/0 .text getWaveHandle__17JASSimpleWaveBankCFUl */
void JASSimpleWaveBank::getWaveHandle(u32 param_0) const {
// NONMATCHING
}
/* 80298E84-80298F18 2937C4 0094+00 0/0 1/1 0/0 .text
* setWaveInfo__17JASSimpleWaveBankFUlRC11JASWaveInfo */
void JASSimpleWaveBank::setWaveInfo(u32 param_0, JASWaveInfo const& param_1) {
// NONMATCHING
}
/* 80298F18-80298F38 293858 0020+00 1/0 0/0 0/0 .text getWaveArc__17JASSimpleWaveBankFUl
*/
void JASSimpleWaveBank::getWaveArc(u32 param_0) {
// NONMATCHING
}
/* 80298F38-80298F5C 293878 0024+00 1/0 0/0 0/0 .text
* getWavePtr__Q217JASSimpleWaveBank11TWaveHandleCFv */
void JASSimpleWaveBank::TWaveHandle::getWavePtr() const {
// NONMATCHING
}
/* 80298F5C-80298F90 29389C 0034+00 1/1 0/0 0/0 .text __ct__Q217JASSimpleWaveBank11TWaveHandleFv
*/
JASSimpleWaveBank::TWaveHandle::TWaveHandle() {
// NONMATCHING
}
/* 80298F90-80298F98 2938D0 0008+00 1/0 0/0 0/0 .text
* getWaveInfo__Q217JASSimpleWaveBank11TWaveHandleCFv */
void JASSimpleWaveBank::TWaveHandle::getWaveInfo() const {
// NONMATCHING
}
/* 80298F98-80298FA0 2938D8 0008+00 1/0 0/0 0/0 .text getArcCount__17JASSimpleWaveBankCFv
*/
bool JASSimpleWaveBank::getArcCount() const {
return true;
}
/* 80298FA0-80298FA4 2938E0 0004+00 1/0 1/0 0/0 .text onLoadDone__10JASWaveArcFv */
void JASWaveArc::onLoadDone() {
/* empty function */
}
/* 80298FA4-80298FA8 2938E4 0004+00 1/0 1/0 0/0 .text onEraseDone__10JASWaveArcFv */
void JASWaveArc::onEraseDone() {
/* empty function */
}
/* 80298FA8-80298FB0 2938E8 0008+00 1/0 0/0 0/0 .text @4@__dt__17JASSimpleWaveBankFv */
static void func_80298FA8() {
// NONMATCHING
}
+25
View File
@@ -0,0 +1,25 @@
//
// Generated By: dol2asm
// Translation Unit: JASSoundParams
//
#include "JSystem/JAudio2/JASSoundParams.h"
/* 8029E3B0-8029E47C 298CF0 00CC+00 0/0 2/2 0/0 .text clamp__14JASSoundParamsFv */
void JASSoundParams::clamp() {
clampVolume();
clampPitch();
clampFxMix();
clampPan();
clampDolby();
}
/* 8029E47C-8029E4D8 298DBC 005C+00 0/0 2/2 0/0 .text
* combine__14JASSoundParamsFRC14JASSoundParamsRC14JASSoundParams */
void JASSoundParams::combine(const JASSoundParams &other1, const JASSoundParams &other2) {
mVolume = other1.mVolume * other2.mVolume;
mPitch = other1.mPitch * other2.mPitch;
mFxMix = other1.mFxMix + other2.mFxMix;
mPan = other1.mPan + other2.mPan - 0.5f;
mDolby = other1.mDolby + other2.mDolby;
}
+167
View File
@@ -0,0 +1,167 @@
//
// Generated By: dol2asm
// Translation Unit: JASTaskThread
//
#include "JSystem/JAudio2/JASTaskThread.h"
#include "JSystem/JAudio2/JASCalc.h"
#include "JSystem/JAudio2/JASCriticalSection.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "dolphin/os.h"
//
// Forward References:
//
extern "C" void __ct__13JASTaskThreadFiiUl();
extern "C" void __dt__13JASTaskThreadFv();
extern "C" void allocCallStack__13JASTaskThreadFPFPv_vPCvUl();
extern "C" void allocCallStack__13JASTaskThreadFPFPv_vPv();
extern "C" void sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl();
extern "C" void sendCmdMsg__13JASTaskThreadFPFPv_vPv();
extern "C" void run__13JASTaskThreadFv();
extern "C" void pause__13JASTaskThreadFb();
//
// External References:
//
extern "C" void bcopy__7JASCalcFPCvPvUl();
extern "C" void getSystemHeap__9JASKernelFv();
extern "C" void getCommandHeap__9JASKernelFv();
extern "C" void* __nw__FUlP7JKRHeapi();
extern "C" void __dl__FPv();
extern "C" void __ct__9JKRThreadFP7JKRHeapUlii();
extern "C" void __dt__9JKRThreadFv();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" u8 sSystemHeap__7JKRHeap[4];
//
// Declarations:
//
/* 8028F6C4-8028F724 28A004 0060+00 0/0 1/1 0/0 .text __ct__13JASTaskThreadFiiUl */
JASTaskThread::JASTaskThread(int param_0, int param_1, u32 param_2) : JKRThread(JASDram, param_2, param_1, param_0) {
field_0x84 = false;
OSInitThreadQueue(&mpThreadQueue);
}
/* 8028F724-8028F850 28A064 012C+00 1/0 0/0 0/0 .text __dt__13JASTaskThreadFv */
JASTaskThread::~JASTaskThread() {
OSMessage msg;
BOOL received;
while (true) {
msg = waitMessage(&received);
if (!received) {
return;
}
ThreadMemPool* heap = JASKernel::getCommandHeap();
heap->free(msg);
}
}
/* 8028F850-8028F9EC 28A190 019C+00 1/1 0/0 0/0 .text allocCallStack__13JASTaskThreadFPFPv_vPCvUl
*/
void* JASTaskThread::allocCallStack(void (*param_0)(void*), void const* param_1, u32 param_2) {
ThreadMemPool* heap;
u32 size = param_2 + 8;
heap = JASKernel::getCommandHeap();
JASThreadCallStack *callStack = (JASThreadCallStack*) heap->alloc(size);
if (callStack == NULL) {
return NULL;
}
callStack->field_0x4 = 1;
JASCalc::bcopy(param_1, callStack->field_0x8.buffer, param_2);
callStack->mRunFunc = param_0;
return callStack;
}
/* 8028F9EC-8028FB5C 28A32C 0170+00 1/1 0/0 0/0 .text allocCallStack__13JASTaskThreadFPFPv_vPv */
void* JASTaskThread::allocCallStack(void (*runFunc)(void*), void* param_1) {
ThreadMemPool* heap;
JASThreadCallStack *callStack;
heap = JASKernel::getCommandHeap();
callStack = (JASThreadCallStack*)heap->alloc(0xc);
if (callStack == NULL) {
return NULL;
}
callStack->field_0x4 = 0;
callStack->field_0x8.pBuffer = param_1;
callStack->mRunFunc = runFunc;
return callStack;
}
/* 8028FB5C-8028FC54 28A49C 00F8+00 0/0 6/6 0/0 .text sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl */
int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void const* param_1, u32 param_2) {
void* pvVar1;
pvVar1 = allocCallStack(param_0, param_1, param_2);
if (pvVar1 == NULL) {
return 0;
}
int iVar2 = sendMessage(pvVar1);
if (iVar2 == 0) {
ThreadMemPool* heap = JASKernel::getCommandHeap();
heap->free(pvVar1);
}
return iVar2;
}
/* 8028FC54-8028FD4C 28A594 00F8+00 0/0 3/3 0/0 .text sendCmdMsg__13JASTaskThreadFPFPv_vPv */
int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void* param_1) {
void* pvVar1;
pvVar1 = allocCallStack(param_0, param_1);
if (pvVar1 == NULL) {
return 0;
}
int iVar2 = sendMessage(pvVar1);
if (iVar2 == 0) {
ThreadMemPool* heap = JASKernel::getCommandHeap();
heap->free(pvVar1);
}
return iVar2;
}
/* 8028FD4C-8028FE88 28A68C 013C+00 1/0 0/0 0/0 .text run__13JASTaskThreadFv */
// Regalloc
#ifdef NONMATCHING
void* JASTaskThread::run() {
OSInitFastCast();
do {
JASThreadCallStack* ppcVar1 = (JASThreadCallStack*)waitMessageBlock();
if (field_0x84) {
OSSleepThread(&mpThreadQueue);
}
if (ppcVar1->field_0x4) {
ppcVar1->mRunFunc(ppcVar1->field_0x8.buffer);
} else {
ppcVar1->mRunFunc(ppcVar1->field_0x8.pBuffer);
}
ThreadMemPool* heap = JASKernel::getCommandHeap();
heap->free(ppcVar1);
} while (true);
}
#else
void* JASTaskThread::run() {
// NONMATCHING
}
#endif
/* 8028FE88-8028FEFC 28A7C8 0074+00 0/0 1/1 0/0 .text pause__13JASTaskThreadFb */
void JASTaskThread::pause(bool param_0) {
JASCriticalSection aJStack_14;
if (param_0) {
field_0x84 = 1;
} else {
if (field_0x84) {
OSWakeupThread(&mpThreadQueue);
}
field_0x84 = 0;
}
}
File diff suppressed because it is too large Load Diff
+49
View File
@@ -0,0 +1,49 @@
//
// Generated By: dol2asm
// Translation Unit: JASTrackPort
//
#include "JSystem/JAudio2/JASTrackPort.h"
/* 8029354C-8029357C 28DE8C 0030+00 0/0 1/1 0/0 .text init__12JASTrackPortFv */
void JASTrackPort::init() {
for (int i = 0; i < 16; i++) {
field_0x4[i] = 0;
}
field_0x0 = 0;
field_0x2 = 0;
}
/* 8029357C-802935A0 28DEBC 0024+00 0/0 1/1 0/0 .text readImport__12JASTrackPortFUl */
u16 JASTrackPort::readImport(u32 port_num) {
field_0x0 = field_0x0 & ~(1 << port_num);
return field_0x4[port_num];
}
/* 802935A0-802935C4 28DEE0 0024+00 0/0 1/1 0/0 .text readExport__12JASTrackPortFUl */
u16 JASTrackPort::readExport(u32 port_num) {
field_0x2 = field_0x2 & ~(1 << port_num);
return field_0x4[port_num];
}
/* 802935C4-802935E8 28DF04 0024+00 0/0 1/1 0/0 .text writeImport__12JASTrackPortFUlUs */
void JASTrackPort::writeImport(u32 port_num, u16 param_1) {
field_0x0 = field_0x0 | (1 << port_num);
field_0x4[port_num] = param_1;
}
/* 802935E8-8029360C 28DF28 0024+00 0/0 1/1 0/0 .text writeExport__12JASTrackPortFUlUs */
void JASTrackPort::writeExport(u32 port_num, u16 param_1) {
field_0x2 = field_0x2 | (1 << port_num);
field_0x4[port_num] = param_1;
}
/* 8029360C-80293628 28DF4C 001C+00 0/0 1/1 0/0 .text checkImport__12JASTrackPortCFUl */
u32 JASTrackPort::checkImport(u32 param_0) const {
return field_0x0 & 1 << param_0 ? 1 : 0;
}
/* 80293628-80293644 28DF68 001C+00 0/0 1/1 0/0 .text checkExport__12JASTrackPortCFUl */
u32 JASTrackPort::checkExport(u32 param_0) const {
return field_0x2 & 1 << param_0 ? 1 : 0;
}
+42
View File
@@ -0,0 +1,42 @@
//
// Generated By: dol2asm
// Translation Unit: JASVoiceBank
//
#include "JSystem/JAudio2/JASVoiceBank.h"
#include "JSystem/JAudio2/JASBasicInst.h"
//
// Declarations:
//
/* ############################################################################################## */
/* 8039B1B8-8039B1D0 027818 0018+00 1/1 0/0 0/0 .rodata sOscData__12JASVoiceBank */
const JASOscillator::Data JASVoiceBank::sOscData = {
0, 1.0f, NULL, NULL, 1.0f, 0.0f,
};
/* 80451268-80451270 000768 0004+04 1/1 0/0 0/0 .sbss sOscTable__12JASVoiceBank */
JASOscillator::Data* JASVoiceBank::sOscTable;
/* 80297F74-80297FAC 2928B4 0038+00 1/0 0/0 0/0 .text
* getInstParam__12JASVoiceBankCFiiiP12JASInstParam */
bool JASVoiceBank::getInstParam(int param_0, int param_1, int param_2,
JASInstParam* param_3) const {
if (param_0 < 0) {
return false;
}
sOscTable = (JASOscillator::Data*)&sOscData;
param_3->field_0x1a = param_0;
param_3->field_0x1d = 1;
param_3->field_0x14 = &sOscTable;
return true;
}
/* 80297FAC-80298008 2928EC 005C+00 1/0 0/0 0/0 .text __dt__12JASVoiceBankFv */
JASVoiceBank::~JASVoiceBank() {}
/* 80298008-80298014 292948 000C+00 1/0 0/0 0/0 .text getType__12JASVoiceBankCFv */
u32 JASVoiceBank::getType() const {
return 'VOIC';
}
+128
View File
@@ -0,0 +1,128 @@
//
// Generated By: dol2asm
// Translation Unit: JASWSParser
//
#include "JSystem/JAudio2/JASWSParser.h"
#include "JSystem/JAudio2/JASBasicWaveBank.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "dolphin/types.h"
//
// Forward References:
//
extern "C" void getGroupCount__11JASWSParserFPCv();
extern "C" void createWaveBank__11JASWSParserFPCvP7JKRHeap();
extern "C" void createBasicWaveBank__11JASWSParserFPCvP7JKRHeap();
extern "C" void createSimpleWaveBank__11JASWSParserFPCvP7JKRHeap();
extern "C" void func_80299490(void* _this, void const*, u32);
extern "C" void func_802994A8(void* _this, void const*, u32);
extern "C" void func_802994C0(void* _this, void const*, u32);
extern "C" void func_802994D8(void* _this, void const*, u32);
extern "C" void func_802994F0(void* _this, void const*, u32);
extern "C" void func_80299508(void* _this, void const*, u32);
extern "C" void func_80299520(void* _this, void const*, u32);
extern "C" u8 sUsedHeapSize__11JASWSParser[4 + 4 /* padding */];
//
// External References:
//
extern "C" void __ct__16JASBasicWaveBankFv();
extern "C" void getWaveGroup__16JASBasicWaveBankFUl();
extern "C" void setGroupCount__16JASBasicWaveBankFUlP7JKRHeap();
extern "C" void setWaveTableSize__16JASBasicWaveBankFUlP7JKRHeap();
extern "C" void
setWaveInfo__16JASBasicWaveBankFPQ216JASBasicWaveBank10TWaveGroupiUsRC11JASWaveInfo();
extern "C" void setWaveCount__Q216JASBasicWaveBank10TWaveGroupFUlP7JKRHeap();
extern "C" void __ct__17JASSimpleWaveBankFv();
extern "C" void setWaveTableSize__17JASSimpleWaveBankFUlP7JKRHeap();
extern "C" void setWaveInfo__17JASSimpleWaveBankFUlRC11JASWaveInfo();
extern "C" void setFileName__10JASWaveArcFPCc();
extern "C" void getFreeSize__7JKRHeapFv();
extern "C" void* __nw__FUlP7JKRHeapi();
extern "C" void _savegpr_20();
extern "C" void _savegpr_23();
extern "C" void _restgpr_20();
extern "C" void _restgpr_23();
extern "C" u32 one__11JASWaveInfo[1 + 1 /* padding */];
//
// Declarations:
//
/* 80298FB0-80298FD8 2938F0 0028+00 1/1 0/0 0/0 .text getGroupCount__11JASWSParserFPCv */
u32 JASWSParser::getGroupCount(void const* stream) {
THeader* header = (THeader*)stream;
return ((TOffset<TCtrlGroup>*)&header->mCtrlGroupOffset)->ptr(header)->mCtrlGroupCount;
}
/* 80298FD8-80299034 293918 005C+00 0/0 1/1 0/0 .text createWaveBank__11JASWSParserFPCvP7JKRHeap
*/
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);
}
}
/* ############################################################################################## */
/* 80451280-80451288 000780 0004+04 2/2 0/0 0/0 .sbss sUsedHeapSize__11JASWSParser */
u8 JASWSParser::sUsedHeapSize[4 + 4 /* padding */];
/* 80299034-80299264 293974 0230+00 1/1 0/0 0/0 .text
* createBasicWaveBank__11JASWSParserFPCvP7JKRHeap */
JASBasicWaveBank* JASWSParser::createBasicWaveBank(void const* param_0, JKRHeap* param_1) {
// NONMATCHING
}
/* 80299264-80299490 293BA4 022C+00 1/1 0/0 0/0 .text
* createSimpleWaveBank__11JASWSParserFPCvP7JKRHeap */
JASSimpleWaveBank* JASWSParser::createSimpleWaveBank(void const* param_0, JKRHeap* param_1) {
// NONMATCHING
}
/* 80299490-802994A8 293DD0 0018+00 2/2 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q211JASWSParser9TCtrlWave>__FPCvUl */
extern "C" void func_80299490(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 802994A8-802994C0 293DE8 0018+00 2/2 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q211JASWSParser5TWave>__FPCvUl */
extern "C" void func_802994A8(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 802994C0-802994D8 293E00 0018+00 2/2 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q211JASWSParser12TWaveArchive>__FPCvUl */
extern "C" void func_802994C0(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 802994D8-802994F0 293E18 0018+00 2/2 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q211JASWSParser16TWaveArchiveBank>__FPCvUl */
extern "C" void func_802994D8(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 802994F0-80299508 293E30 0018+00 2/2 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q211JASWSParser5TCtrl>__FPCvUl */
extern "C" void func_802994F0(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 80299508-80299520 293E48 0018+00 2/2 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q211JASWSParser10TCtrlScene>__FPCvUl */
extern "C" void func_80299508(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 80299520-80299538 293E60 0018+00 3/3 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q211JASWSParser10TCtrlGroup>__FPCvUl */
extern "C" void func_80299520(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
+297
View File
@@ -0,0 +1,297 @@
//
// Generated By: dol2asm
// Translation Unit: JASWaveArcLoader
//
#include "JSystem/JAudio2/JASWaveArcLoader.h"
#include "JSystem/JAudio2/JASDvdThread.h"
#include "JSystem/JAudio2/JASTaskThread.h"
#include "JSystem/JAudio2/JASMutex.h"
#include "JSystem/JKernel/JKRDvdAramRipper.h"
#include "string.h"
#include "dolphin/os.h"
//
// Forward References:
//
extern "C" void getRootHeap__16JASWaveArcLoaderFv();
extern "C" void setCurrentDir__16JASWaveArcLoaderFPCc();
extern "C" void getCurrentDir__16JASWaveArcLoaderFv();
extern "C" void __ct__10JASWaveArcFv();
extern "C" void __dt__10JASWaveArcFv();
extern "C" void loadSetup__10JASWaveArcFUl();
extern "C" void eraseSetup__10JASWaveArcFv();
extern "C" void loadToAramCallback__10JASWaveArcFPv();
extern "C" void sendLoadCmd__10JASWaveArcFv();
extern "C" void load__10JASWaveArcFP7JASHeap();
extern "C" void loadTail__10JASWaveArcFP7JASHeap();
extern "C" void erase__10JASWaveArcFv();
extern "C" void onDispose__10JASWaveArcFv();
extern "C" void setEntryNum__10JASWaveArcFl();
extern "C" void setFileName__10JASWaveArcFPCc();
extern "C" void __dt__11JASDisposerFv();
extern "C" u8 sCurrentDir__16JASWaveArcLoader[64];
extern "C" u8 sAramHeap__16JASWaveArcLoader[4 + 4 /* padding */];
//
// External References:
//
extern "C" void sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl();
extern "C" void getThreadPointer__6JASDvdFv();
extern "C" void __ct__7JASHeapFP11JASDisposer();
extern "C" void alloc__7JASHeapFP7JASHeapUl();
extern "C" void allocTail__7JASHeapFP7JASHeapUl();
extern "C" void free__7JASHeapFv();
extern "C" void getSystemHeap__9JASKernelFv();
extern "C" void getAramHeap__9JASKernelFv();
extern "C" void onDispose__11JASDisposerFv();
extern "C" void onLoadDone__10JASWaveArcFv();
extern "C" void onEraseDone__10JASWaveArcFv();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void __dl__FPv();
extern "C" void __dla__FPv();
extern "C" void loadToAram__16JKRDvdAramRipperFlUl15JKRExpandSwitchUlUlPUl();
extern "C" void __dt__10JSUPtrLinkFv();
extern "C" void __dt__10JSUPtrListFv();
extern "C" void _savegpr_27();
extern "C" void _restgpr_27();
//
// Declarations:
//
/* ############################################################################################## */
/* 80451290-80451298 000790 0004+04 1/1 0/0 0/0 .sbss sAramHeap__16JASWaveArcLoader */
JASHeap* JASWaveArcLoader::sAramHeap;
/* 8029A0A0-8029A0D0 2949E0 0030+00 2/2 0/0 0/0 .text getRootHeap__16JASWaveArcLoaderFv
*/
JASHeap* JASWaveArcLoader::getRootHeap() {
if (JASWaveArcLoader::sAramHeap) {
return JASWaveArcLoader::sAramHeap;
}
return JASKernel::getAramHeap();
}
/* ############################################################################################## */
/* 803C77E0-803C7820 024900 0040+00 2/2 0/0 0/0 .data sCurrentDir__16JASWaveArcLoader */
char JASWaveArcLoader::sCurrentDir[DIR_MAX] = "/AudioRes/Waves/";
/* 8029A0D0-8029A130 294A10 0060+00 0/0 1/1 0/0 .text setCurrentDir__16JASWaveArcLoaderFPCc */
void JASWaveArcLoader::setCurrentDir(char const* dir) {
ASSERT(std::strlen(dir) < DIR_MAX - 1);
strcpy(sCurrentDir, dir);
u32 len = strlen(sCurrentDir);
if (sCurrentDir[len - 1] != '/') {
ASSERT(len + 1 < DIR_MAX);
sCurrentDir[len] = '/';
sCurrentDir[len + 1] = '\0';
}
}
/* 8029A130-8029A13C 294A70 000C+00 1/1 0/0 0/0 .text getCurrentDir__16JASWaveArcLoaderFv
*/
char* JASWaveArcLoader::getCurrentDir() {
return sCurrentDir;
}
/* ############################################################################################## */
/* 803C7820-803C7838 024940 0018+00 2/2 0/0 0/0 .data __vt__10JASWaveArc */
SECTION_DATA extern void* __vt__10JASWaveArc[6] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__10JASWaveArcFv,
(void*)onDispose__10JASWaveArcFv,
(void*)onLoadDone__10JASWaveArcFv,
(void*)onEraseDone__10JASWaveArcFv,
};
/* 803C7838-803C7848 024958 0010+00 3/3 0/0 0/0 .data __vt__11JASDisposer */
SECTION_DATA extern void* __vt__11JASDisposer[4] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__11JASDisposerFv,
(void*)onDispose__11JASDisposerFv,
};
/* 8029A13C-8029A1B4 294A7C 0078+00 0/0 2/2 0/0 .text __ct__10JASWaveArcFv */
JASWaveArc::JASWaveArc() : mHeap(this) {
_48 = 0;
_4c = 0;
mEntryNum = -1;
mFileLength = 0;
_58 = 0;
_5a = 0;
OSInitMutex(&mMutex);
}
/* 8029A1B4-8029A258 294AF4 00A4+00 1/0 2/2 0/0 .text __dt__10JASWaveArcFv */
#ifdef NONMATCHING
JASWaveArc::~JASWaveArc() {}
#else
void __dt__10JASWaveArcFv() {
// NONMATCHING
}
#endif
/* 8029A258-8029A2EC 294B98 0094+00 1/1 0/0 0/0 .text loadSetup__10JASWaveArcFUl */
bool JASWaveArc::loadSetup(u32 param_0) {
JASMutexLock mutexLock(&mMutex);
if (_58 != param_0) {
return false;
}
if (_4c != 1) {
return false;
}
_48 = 1;
_4c = 2;
return true;
}
/* 8029A2EC-8029A378 294C2C 008C+00 1/1 0/0 0/0 .text eraseSetup__10JASWaveArcFv */
bool JASWaveArc::eraseSetup() {
JASMutexLock mutexLock(&mMutex);
if (_4c == 0) {
return false;
}
if (_4c == 1) {
_4c = 0;
return false;
}
_48 = 0;
_4c = 0;
return true;
}
/* 8029A378-8029A404 294CB8 008C+00 1/1 0/0 0/0 .text loadToAramCallback__10JASWaveArcFPv
*/
void JASWaveArc::loadToAramCallback(void* this_) {
loadToAramCallbackParams* tmp = (loadToAramCallbackParams*)this_;
JASWaveArc* wavArc = tmp->mWavArc;
JKRAramBlock* block = JKRDvdAramRipper::loadToAram(tmp->mEntryNum, tmp->mBase,
EXPAND_SWITCH_UNKNOWN0, 0, 0, NULL);
if (block == NULL) {
// "loadToAram Failed"
return;
}
wavArc->_5a--;
if (wavArc->loadSetup(tmp->_c)) {
wavArc->onLoadDone();
}
}
/* 8029A404-8029A4C0 294D44 00BC+00 2/2 0/0 0/0 .text sendLoadCmd__10JASWaveArcFv */
bool JASWaveArc::sendLoadCmd() {
JASMutexLock mutexLock(&mMutex);
_48 = 0;
_4c = 1;
void* base = mHeap.getBase();
loadToAramCallbackParams commandInfo;
commandInfo.mWavArc = this;
commandInfo.mEntryNum = mEntryNum;
commandInfo.mBase = (u32)mHeap.mBase;
commandInfo._c = ++_58;
_5a++;
JASTaskThread* thread = JASDvd::getThreadPointer();
int status = thread->sendCmdMsg(loadToAramCallback, &commandInfo, 0x10);
if (status == 0) {
// "sendCmdMsg loadToAramCallback Failed"
mHeap.free();
return false;
}
return true;
}
/* 8029A4C0-8029A580 294E00 00C0+00 0/0 2/2 0/0 .text load__10JASWaveArcFP7JASHeap */
bool JASWaveArc::load(JASHeap* heap) {
if (mEntryNum < 0) {
return false;
}
JASMutexLock mutexLock(&mMutex);
if (_4c != 0) {
return false;
}
if (heap == NULL) {
heap = JASWaveArcLoader::getRootHeap();
}
bool result = mHeap.alloc(heap, mFileLength);
if (result == false) {
return false;
}
return sendLoadCmd();
}
/* 8029A580-8029A640 294EC0 00C0+00 0/0 1/1 0/0 .text loadTail__10JASWaveArcFP7JASHeap */
bool JASWaveArc::loadTail(JASHeap* heap) {
if (mEntryNum < 0) {
return false;
}
JASMutexLock mutexLock(&mMutex);
if (_4c != 0) {
return false;
}
if (heap == NULL) {
heap = JASWaveArcLoader::getRootHeap();
}
bool result = mHeap.allocTail(heap, mFileLength);
if (result == false) {
return false;
}
return sendLoadCmd();
}
/* 8029A640-8029A664 294F80 0024+00 0/0 2/2 0/0 .text erase__10JASWaveArcFv */
void JASWaveArc::erase() {
mHeap.free();
}
/* 8029A664-8029A6AC 294FA4 0048+00 1/0 2/0 0/0 .text onDispose__10JASWaveArcFv */
void JASWaveArc::onDispose() {
if (eraseSetup()) {
onEraseDone();
}
}
/* 8029A6AC-8029A70C 294FEC 0060+00 1/1 0/0 0/0 .text setEntryNum__10JASWaveArcFl */
void JASWaveArc::setEntryNum(s32 entryNum) {
DVDFileInfo fileInfo;
if (entryNum < 0) {
return;
}
BOOL openStatus = DVDFastOpen(entryNum, &fileInfo);
if (openStatus == FALSE) {
return;
}
mFileLength = fileInfo.length;
DVDClose(&fileInfo);
mEntryNum = entryNum;
}
/* 8029A70C-8029A7B8 29504C 00AC+00 0/0 2/2 0/0 .text setFileName__10JASWaveArcFPCc */
void JASWaveArc::setFileName(char const* fileName) {
char* currentDir = JASWaveArcLoader::getCurrentDir();
size_t length = strlen(currentDir);
length = length + strlen(fileName);
JKRHeap* systemHeap = JASKernel::getSystemHeap();
char* fileString = new (systemHeap, -4) char[length + 1];
strcpy(fileString, currentDir);
strcat(fileString, fileName);
fileString[length] = '\0';
int entryNum = DVDConvertPathToEntrynum(fileString);
delete[] fileString;
if (entryNum < 0) {
return;
}
setEntryNum(entryNum);
}
/* 8029A7B8-8029A800 2950F8 0048+00 1/0 0/0 0/0 .text __dt__11JASDisposerFv */
void __dt__11JASDisposerFv() {
// NONMATCHING
}
@@ -0,0 +1,133 @@
//
// Generated By: dol2asm
// Translation Unit: JAUAudioArcInterpreter
//
#include "JSystem/JAudio2/JAUAudioArcInterpreter.h"
#include "JSystem/JUtility/JUTAssert.h"
//
// Forward References:
//
//
// Declarations:
//
/* 802A4244-802A4260 29EB84 001C+00 0/0 1/1 0/0 .text __ct__22JAUAudioArcInterpreterFv */
JAUAudioArcInterpreter::JAUAudioArcInterpreter() {
mBase = NULL;
mReadPtr = NULL;
}
/* 802A4260-802A42A8 29EBA0 0048+00 1/0 3/3 0/0 .text __dt__22JAUAudioArcInterpreterFv */
JAUAudioArcInterpreter::~JAUAudioArcInterpreter() {}
/* 802A42A8-802A4314 29EBE8 006C+00 0/0 1/1 0/0 .text parse__22JAUAudioArcInterpreterFPCv
*/
bool JAUAudioArcInterpreter::parse(void const* param_0) {
mBase = (const u8*)param_0;
mReadPtr = mBase;
if (readU32_() != 'AA_<') {
return false;
}
while (readCommand_()) {}
return true;
}
/* 802A4314-802A431C 29EC54 0008+00 1/0 1/0 0/0 .text readCommandMore__22JAUAudioArcInterpreterFUl
*/
bool JAUAudioArcInterpreter::readCommandMore(u32 param_0) {
return false;
}
/* 802A431C-802A4740 29EC5C 0424+00 1/1 0/0 0/0 .text readCommand___22JAUAudioArcInterpreterFv */
bool JAUAudioArcInterpreter::readCommand_() {
u32 cmd = readU32_();
switch (cmd) {
case '>_AA':
return false;
case 'ws ': {
u32 var1 = readU32_();
u32 var2 = readU32_();
u32 var3 = readU32_();
readWS(var1, getContent_(var2), var3);
break;
}
case 'bnk ': {
u32 var1 = readU32_();
u32 var2 = readU32_();
readBNK(var1, getContent_(var2));
break;
}
case 'bl_<': {
u32 var1 = readU32_();
u32 var2 = readU32_();
beginBNKList(var1, var2);
break;
}
case '>_bl':
endBNKList();
break;
case 'bsc ': {
u32 var1 = readU32_();
u32 var2 = readU32_();
readBSC(getContent_(var1), var2 - var1);
break;
}
case 'bst ': {
u32 var1 = readU32_();
u32 var2 = readU32_();
readBST(getContent_(var1), var2 - var1);
break;
}
case 'bstn': {
u32 var1 = readU32_();
u32 var2 = readU32_();
readBSTN(getContent_(var1), var2 - var1);
break;
}
case 'bms ': {
u32 var1 = readU32_();
u32 var2 = readU32_();
u32 var3 = readU32_();
readBMS(var1, getContent_(var2), var3 - var2);
break;
}
case 'bmsa': {
u32 var1 = readU32_();
readBMS_fromArchive(var1);
break;
}
case 'vbnk': {
u32 var1 = readU32_();
u32 var2 = readU32_();
newVoiceBank(var1, var2);
break;
}
case 'dsqb': {
u32 var1 = readU32_();
newDynamicSeqBlock(var1);
break;
}
case 'bsft': {
u32 var1 = readU32_();
readBSFT(getContent_(var1));
break;
}
case 'sect': {
readU8_();
u8 var1 = readU8_();
u8 var2 = readU8_();
u8 var3 = readU8_();
readMaxSeCategory(var1, var2, var3);
break;
}
default:
if (!readCommandMore(cmd)) {
JUT_ASSERT(145, false);
}
break;
}
return true;
}
+108
View File
@@ -0,0 +1,108 @@
//
// Generated By: dol2asm
// Translation Unit: JAUAudioArcLoader
//
#include "JSystem/JAudio2/JAUAudioArcLoader.h"
#include "JSystem/JAudio2/JAISeMgr.h"
#include "JSystem/JAudio2/JAUSectionHeap.h"
//
// Declarations:
//
/* 802A4740-802A478C 29F080 004C+00 0/0 1/1 0/0 .text __ct__17JAUAudioArcLoaderFP10JAUSection */
JAUAudioArcLoader::JAUAudioArcLoader(JAUSection* section) {
//JUT_ASSERT(13, section->isOpen());
//JUT_ASSERT(14, section->isBuilding());
mSection = section;
}
/* 802A478C-802A47AC 29F0CC 0020+00 0/0 1/1 0/0 .text load__17JAUAudioArcLoaderFPCv */
bool JAUAudioArcLoader::load(void const* param_0) {
return parse(param_0);
}
/* 802A47AC-802A4804 29F0EC 0058+00 1/0 1/0 0/0 .text readWS__17JAUAudioArcLoaderFUlPCvUl
*/
void JAUAudioArcLoader::readWS(u32 param_0, void const* param_1, u32 param_2) {
mSection->newWaveBank(param_0, param_1);
if (param_2) {
mSection->loadWaveArc(param_0, param_2);
}
}
/* 802A4804-802A4834 29F144 0030+00 1/0 1/0 0/0 .text readBNK__17JAUAudioArcLoaderFUlPCv
*/
void JAUAudioArcLoader::readBNK(u32 param_0, void const* param_1) {
mSection->newBank(param_1, param_0);
}
/* 802A4834-802A4858 29F174 0024+00 1/0 1/0 0/0 .text readBSC__17JAUAudioArcLoaderFPCvUl
*/
void JAUAudioArcLoader::readBSC(void const* param_0, u32 param_1) {
mSection->newSeSeqCollection(param_0, param_1);
}
/* 802A4858-802A4880 29F198 0028+00 1/0 1/0 0/0 .text readBST__17JAUAudioArcLoaderFPCvUl
*/
void JAUAudioArcLoader::readBST(void const* param_0, u32 param_1) {
mSection->newSoundTable(param_0, param_1, true);
}
/* 802A4880-802A48A8 29F1C0 0028+00 1/0 0/0 0/0 .text readBSTN__17JAUAudioArcLoaderFPCvUl
*/
void JAUAudioArcLoader::readBSTN(void const* param_0, u32 param_1) {
mSection->newSoundNameTable(param_0, param_1, true);
}
/* 802A48A8-802A48D4 29F1E8 002C+00 1/0 1/0 0/0 .text readBMS__17JAUAudioArcLoaderFUlPCvUl */
void JAUAudioArcLoader::readBMS(u32 param_0, void const* param_1, u32 param_2) {
mSection->newStaticSeqData(param_0, param_1, param_2);
}
/* 802A48D4-802A4900 29F214 002C+00 1/0 1/0 0/0 .text readBMS_fromArchive__17JAUAudioArcLoaderFUl
*/
void JAUAudioArcLoader::readBMS_fromArchive(u32 param_0) {
mSection->newStaticSeqData(param_0);
}
/* 802A4900-802A4930 29F240 0030+00 1/0 1/0 0/0 .text newVoiceBank__17JAUAudioArcLoaderFUlUl */
void JAUAudioArcLoader::newVoiceBank(u32 param_0, u32 param_1) {
mSection->newVoiceBank(param_1, param_0);
}
/* 802A4930-802A4968 29F270 0038+00 1/0 1/0 0/0 .text newDynamicSeqBlock__17JAUAudioArcLoaderFUl
*/
void JAUAudioArcLoader::newDynamicSeqBlock(u32 param_0) {
JAUSectionHeap* sectionHeap = mSection->asSectionHeap();
JUT_ASSERT(72, sectionHeap);
sectionHeap->newDynamicSeqBlock(param_0);
}
/* 802A4968-802A4990 29F2A8 0028+00 1/0 1/0 0/0 .text readBSFT__17JAUAudioArcLoaderFPCv
*/
void JAUAudioArcLoader::readBSFT(void const* param_0) {
mSection->newStreamFileTable(param_0, true);
}
/* 802A4990-802A49B4 29F2D0 0024+00 1/0 1/0 0/0 .text beginBNKList__17JAUAudioArcLoaderFUlUl */
void JAUAudioArcLoader::beginBNKList(u32 param_0, u32 param_1) {
mSection->beginNewBankTable(param_0, param_1);
}
/* 802A49B4-802A49D8 29F2F4 0024+00 1/0 1/0 0/0 .text endBNKList__17JAUAudioArcLoaderFv
*/
void JAUAudioArcLoader::endBNKList() {
mSection->endNewBankTable();
}
/* 802A49D8-802A49FC 29F318 0024+00 1/0 1/0 0/0 .text readMaxSeCategory__17JAUAudioArcLoaderFiii
*/
void JAUAudioArcLoader::readMaxSeCategory(int param_0, int param_1, int param_2) {
JAISeMgr* seMgr = JASGlobalInstance<JAISeMgr>::getInstance();
if (seMgr) {
seMgr->getCategory(param_0)->setMaxActiveSe(param_1);
seMgr->getCategory(param_0)->setMaxInactiveSe(param_2);
}
}
+11
View File
@@ -0,0 +1,11 @@
//
// JAUAudioMgr
//
#include "JSystem/JAudio2/JAUAudioMgr.h"
#include "JSystem/JAudio2/JASHeapCtrl.h"
// Here to generate JASHeap::__defctor (ctor generated by default arguments)
void dummyDefCtor() {
JASHeap dummy[20];
}
+17
View File
@@ -0,0 +1,17 @@
//
// Generated By: dol2asm
// Translation Unit: JAUBankTable
//
#include "JSystem/JAudio2/JAUBankTable.h"
/* 802A4A80-802A4AA0 29F3C0 0020+00 0/0 1/1 0/0 .text
* appendBankTable__22JAUBankTableDictionaryFP23JSULink<12JAUBankTable> */
void JAUBankTableDictionary::appendBankTable(JSULink<JAUBankTable>* bankTableList) {
append(bankTableList);
}
/* 802A4AA0-802A4AC4 29F3E0 0024+00 0/0 2/0 0/0 .text getBank__12JAUBankTableCFUl */
JASBank* JAUBankTable::getBank(u32 bank) const {
return mBankPtrTable.get(bank);
}
+11
View File
@@ -0,0 +1,11 @@
//
// JAUClusterSound
//
#include "JSystem/JAudio2/JAUClusterSound.h"
#include "JSystem/JAudio2/JAISoundHandles.h"
// Dummy function to generate JAISoundHandle::JAISoundHandle
static void dummyCtor() {
JAISoundHandle dummy[20];
}
+202
View File
@@ -0,0 +1,202 @@
//
// Generated By: dol2asm
// Translation Unit: JAUInitializer
//
#include "JSystem/JAudio2/JAUInitializer.h"
#include "JSystem/JAudio2/JASTaskThread.h"
#include "JSystem/JAudio2/JASTrack.h"
#include "JSystem/JAudio2/JASWaveArcLoader.h"
#include "JSystem/JKernel/JKRAram.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "JSystem/JKernel/JKRThread.h"
#include "dol2asm.h"
#include "dolphin/os/OSRtc.h"
//
// Types:
//
//
// Forward References:
//
extern "C" void __ct__18JAU_JASInitializerFv();
extern "C" void initJASystem__18JAU_JASInitializerFP12JKRSolidHeap();
extern "C" void __ct__18JAU_JAIInitializerFv();
extern "C" void initJAInterface__18JAU_JAIInitializerFv();
//
// External References:
//
extern "C" void getThreadPointer__6JASDvdFv();
extern "C" void createThread__6JASDvdFliUl();
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void newMemPool__17JASGenericMemPoolFUli();
extern "C" void setupRootHeap__9JASKernelFP12JKRSolidHeapUl();
extern "C" void setupAramHeap__9JASKernelFUlUl();
extern "C" void func_802932E0(void* _this);
extern "C" void func_80293334(void* _this);
extern "C" void initSystem__13JASAramStreamFUlUl();
extern "C" void setCurrentDir__16JASWaveArcLoaderFPCc();
extern "C" void create__14JASAudioThreadFl();
extern "C" void setDSPLevel__9JASDriverFf();
extern "C" void setOutputMode__9JASDriverFUl();
extern "C" void func_8029FC34(void* _this);
extern "C" void func_802A1268(void* _this);
extern "C" void func_802A1AF4(void* _this);
extern "C" void func_802A3E68(void* _this);
extern "C" void getFreeSize__7JKRHeapFv();
extern "C" void enter__15JKRThreadSwitchFP9JKRThreadi();
extern "C" void __register_global_object();
extern "C" void _savegpr_29();
extern "C" void _restgpr_29();
extern "C" extern u8 data_80431AF4[16];
extern "C" extern u8 data_80431B04[16 + 4 /* padding */];
extern "C" extern u8 data_80434084[16 + 4 /* padding */];
extern "C" extern u8 data_804340B0[16];
extern "C" extern u8 data_804340CC[16 + 4 /* padding */];
extern "C" extern u8 data_804340FC[16 + 4 /* padding */];
extern "C" extern u8 data_80450B8C[4];
extern "C" extern u8 struct_80451230[8];
extern "C" extern u8 data_80451310[8];
extern "C" extern u8 data_80451318[8];
extern "C" extern u8 data_80451320[8];
extern "C" extern u8 data_80451328[8];
extern "C" u8 sManager__15JKRThreadSwitch[4];
extern "C" u8 sAramObject__7JKRAram[4];
extern "C" extern u8 __OSReport_disable;
//
// Declarations:
//
/* 802A4AD0-802A4B28 29F410 0058+00 0/0 1/1 0/0 .text __ct__18JAU_JASInitializerFv */
JAU_JASInitializer::JAU_JASInitializer() {
field_0x00 = 0;
field_0x04 = 0;
field_0x14 = -1;
field_0x18 = -1;
field_0x08 = 0x1000;
field_0x0c = 3;
field_0x10 = 2;
field_0x1c = 0x80;
field_0x2c = 1.0f;
field_0x24 = 0x2760;
field_0x28 = 2;
field_0x20 = 0;
field_0x30 = NULL;
}
/* ############################################################################################## */
/* 80434110-8043411C 060E30 000C+00 2/2 0/0 0/0 .bss @757 */
static u8 lit_757[12];
/* 8043411C-80434128 060E3C 000C+00 1/1 0/0 0/0 .bss @763 */
static u8 lit_763[12];
/* 802A4B28-802A4D3C 29F468 0214+00 0/0 1/1 0/0 .text
* initJASystem__18JAU_JASInitializerFP12JKRSolidHeap */
// extra destructors
#ifdef NONMATCHING
void JAU_JASInitializer::initJASystem(JKRSolidHeap* param_0) {
if (JASAudioThread::getThreadPointer()) {
} else if (JASDvd::getThreadPointer()) {
} else {
JASKernel::setupRootHeap(param_0, field_0x08);
if (field_0x00 == 0) {
field_0x00 = JKRAram::getManager()->getAudioMemory();
}
if (field_0x04 == 0) {
field_0x04 = JKRAram::getManager()->getAudioMemSize();
}
JASKernel::setupAramHeap(field_0x00, field_0x04);
JASPoolAllocObject_MultiThreaded<JASTrack>::newMemPool(field_0x1c);
if (field_0x20 > 0) {
JASPoolAllocObject_MultiThreaded<JASTrack::TChannelMgr>::newMemPool(field_0x20);
}
JASDvd::createThread(field_0x0c,0x80,0x1000);
JASAudioThread::create(field_0x10);
JKRThreadSwitch* threadSwitch = JKRThreadSwitch::getManager();
if (threadSwitch) {
if (field_0x14 >= 0) {
threadSwitch->enter(JASDvd::getThreadPointer(), field_0x14);
}
if (field_0x18 >= 0) {
threadSwitch->enter(JASAudioThread::getThreadPointer(), field_0x18);
}
}
JASDriver::setDSPLevel(field_0x2c);
JASAramStream::initSystem(field_0x24,field_0x28);
}
if (field_0x30) {
JASWaveArcLoader::setCurrentDir(field_0x30);
}
switch (OSGetSoundMode()) {
case 0:
JASDriver::setOutputMode(0);
break;
case 1:
JASDriver::setOutputMode(1);
break;
}
}
#else
void JAU_JASInitializer::initJASystem(JKRSolidHeap* param_0) {
// NONMATCHING
}
#endif
/* 802A4D3C-802A4D60 29F67C 0024+00 0/0 1/1 0/0 .text __ct__18JAU_JAIInitializerFv */
JAU_JAIInitializer::JAU_JAIInitializer() {
field_0x0 = 100;
field_0x4 = 4;
field_0x8 = 2;
field_0xc = 16;
}
/* ############################################################################################## */
/* 80434128-80434134 060E48 000C+00 0/1 0/0 0/0 .bss @855 */
#pragma push
#pragma force_active on
static u8 lit_855[12];
#pragma pop
/* 80434134-80434140 060E54 000C+00 0/1 0/0 0/0 .bss @859 */
#pragma push
#pragma force_active on
static u8 lit_859[12];
#pragma pop
/* 80434140-8043414C 060E60 000C+00 0/1 0/0 0/0 .bss @863 */
#pragma push
#pragma force_active on
static u8 lit_863[12];
#pragma pop
/* 8043414C-804341B8 060E6C 000C+60 0/1 0/0 0/0 .bss @867 */
#pragma push
#pragma force_active on
static u8 lit_867[12 + 96 /* padding */];
#pragma pop
/* 802A4D60-802A4EE8 29F6A0 0188+00 0/0 1/1 0/0 .text initJAInterface__18JAU_JAIInitializerFv */
// extra destructors
#ifdef NONMATCHING
void JAU_JAIInitializer::initJAInterface() {
s32 r30 = JASDram->getFreeSize();
JASPoolAllocObject<JAIStream>::newMemPool(field_0x8);
JASPoolAllocObject<JAISeq>::newMemPool(field_0x4);
JASPoolAllocObject<JAISe>::newMemPool(field_0x0);
JASPoolAllocObject<JAISoundChild>::newMemPool(field_0xc);
s32 r29 = JASDram->getFreeSize();
//OSReport("JAU_JAIInitializer uses %d bytes\n", r30 - r29);
}
#else
void JAU_JAIInitializer::initJAInterface() {
// NONMATCHING
}
#endif
+883
View File
@@ -0,0 +1,883 @@
//
// Generated By: dol2asm
// Translation Unit: JAUSectionHeap
//
#include "JSystem/JAudio2/JAUSectionHeap.h"
#include "JSystem/JAudio2/JASCriticalSection.h"
#include "JSystem/JAudio2/JASHeapCtrl.h"
#include "JSystem/JAudio2/JASResArcLoader.h"
#include "JSystem/JAudio2/JAUSeqCollection.h"
#include "JSystem/JAudio2/JAUSoundInfo.h"
#include "JSystem/JAudio2/JAUSoundTable.h"
#include "JSystem/JAudio2/JAUStreamFileTable.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "stdlib.h"
#include "dol2asm.h"
#include "dolphin/dvd.h"
//
// Types:
//
struct JASWSParser {
/* 80298FD8 */ static JASWaveBank* createWaveBank(void const*, JKRHeap*);
};
namespace {
class TPushCurrentHeap {
public:
TPushCurrentHeap(JKRHeap* heap) { mHeap = JKRSetCurrentHeap(heap); }
~TPushCurrentHeap() { JKRSetCurrentHeap(mHeap); }
private:
JKRHeap* mHeap;
};
class TStreamDataMgr : public JAIStreamDataMgr {
public:
TStreamDataMgr(const void* param_0) {
JAUStreamFileTable stack_14;
stack_14.init(param_0);
if (!stack_14.isValid()) {
field_0x4 = 0;
field_0x8 = NULL;
return;
}
field_0x4 = stack_14.getNumFiles();
field_0x8 = new s32[field_0x4];
if (!field_0x8) {
field_0x4 = NULL;
return;
}
for (u32 i = 0; i < field_0x4; i++) {
field_0x8[i] = DVDConvertPathToEntrynum(stack_14.getFilePath(i));
}
}
virtual s32 getStreamFileEntry(JAISoundID);
virtual ~TStreamDataMgr();
bool isValid() { return field_0x4; }
s32 field_0x4;
s32* field_0x8;
};
}
//
// Forward References:
//
extern "C" void __ct__Q210JAUSection12TSectionDataFv();
extern "C" void resetRegisteredBankTables__Q210JAUSection12TSectionDataFv();
extern "C" void resetRegisteredWaveBankTables__Q210JAUSection12TSectionDataFv();
extern "C" void __ct__10JAUSectionFP14JAUSectionHeapUll();
extern "C" void finishBuild__10JAUSectionFv();
extern "C" void dispose__10JAUSectionFv();
extern "C" void newSoundTable__10JAUSectionFPCvUlb();
extern "C" void newSoundNameTable__10JAUSectionFPCvUlb();
extern "C" void newStreamFileTable__10JAUSectionFPCvb();
extern "C" void newSeSeqCollection__10JAUSectionFPCvUl();
extern "C" void newStaticSeqDataBlock___10JAUSectionF10JAISoundIDUl();
extern "C" void newStaticSeqData__10JAUSectionF10JAISoundIDPCvUl();
extern "C" void newStaticSeqData__10JAUSectionF10JAISoundID();
extern "C" void newCopy__10JAUSectionFPCvUll();
extern "C" void newWaveBank__10JAUSectionFUlPCv();
extern "C" void loadWaveArc__10JAUSectionFUlUl();
extern "C" void newBank__10JAUSectionFPCvUl();
extern "C" void newVoiceBank__10JAUSectionFUlUl();
extern "C" void beginNewBankTable__10JAUSectionFUlUl();
extern "C" void endNewBankTable__10JAUSectionFv();
extern "C" void __ct__Q214JAUSectionHeap16TSectionHeapDataFv();
extern "C" void setSeqDataArchive__14JAUSectionHeapFP10JKRArchive();
extern "C" void loadDynamicSeq__14JAUSectionHeapF10JAISoundIDb();
extern "C" void releaseIdleDynamicSeqDataBlock__14JAUSectionHeapFv();
extern "C" static void JAUNewSectionHeap__FP12JKRSolidHeapb();
extern "C" void JAUNewSectionHeap__Fb();
extern "C" void __ct__14JAUSectionHeapFP12JKRSolidHeapbl();
extern "C" void getOpenSection__14JAUSectionHeapFv();
extern "C" void setSeqDataUser__14JAUSectionHeapFP14JAISeqDataUser();
extern "C" void newDynamicSeqBlock__14JAUSectionHeapFUl();
extern "C" void getSeqData__14JAUSectionHeapF10JAISoundIDP10JAISeqData();
extern "C" int releaseSeqData__14JAUSectionHeapFv();
extern "C" void __dt__14JAUSectionHeapFv();
extern "C" static void func_802A6440();
extern "C" void __dt__10JAUSectionFv();
extern "C" void func_802A6574();
extern "C" void func_802A65D4(void* _this, u32, bool);
extern "C" void func_802A6614(void* _this, u32);
extern "C" void func_802A6634(void* _this, u32);
extern "C" void func_802A665C(void* _this);
extern "C" static void func_802A6680();
extern "C" static void func_802A6688();
extern "C" static void func_802A6690();
extern "C" static void func_802A6698();
extern "C" extern char const* const JAUSectionHeap__stringBase0;
//
// External References:
//
extern "C" void getResSize__15JASResArcLoaderFPC10JKRArchiveUs();
extern "C" void createWaveBank__11JASWSParserFPCvP7JKRHeap();
extern "C" void createBank__12JASBNKParserFPCvP7JKRHeap();
extern "C" void load__10JASWaveArcFP7JASHeap();
extern "C" void __dt__13JAISeqDataMgrFv();
extern "C" void __dt__16JAIStreamDataMgrFv();
extern "C" void func_802A4A80();
extern "C" void getBank__12JAUBankTableCFUl();
extern "C" void init__16JAUSeqCollectionFPCv();
extern "C" void __ct__27JAUSeqDataMgr_SeqCollectionFv();
extern "C" void __ct__15JAUSeqDataBlockFv();
extern "C" void __ct__23JAUDynamicSeqDataBlocksFv();
extern "C" void setSeqDataArchive__23JAUDynamicSeqDataBlocksFP10JKRArchive();
extern "C" void getSeqData__23JAUDynamicSeqDataBlocksF10JAISoundIDP14JAISeqDataUserP10JAISeqDatab();
extern "C" void appendDynamicSeqDataBlock__23JAUDynamicSeqDataBlocksFP15JAUSeqDataBlock();
extern "C" void loadDynamicSeq__23JAUDynamicSeqDataBlocksF10JAISoundIDbP14JAISeqDataUser();
extern "C" void releaseIdleDynamicSeqDataBlock__23JAUDynamicSeqDataBlocksFP14JAISeqDataUser();
extern "C" void init__13JAUSoundTableFPCv();
extern "C" void init__17JAUSoundNameTableFPCv();
extern "C" void __ct__18JAUStreamFileTableFv();
extern "C" void init__18JAUStreamFileTableFPCv();
extern "C" void getNumFiles__18JAUStreamFileTableCFv();
extern "C" void getFilePath__18JAUStreamFileTableCFi();
extern "C" void becomeCurrentHeap__7JKRHeapFv();
extern "C" void freeTail__7JKRHeapFv();
extern "C" void getFreeSize__7JKRHeapFv();
extern "C" void* __nw__FUl();
extern "C" void* __nwa__FUl();
extern "C" void* __nwa__FUli();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void __dl__FPv();
extern "C" void create__12JKRSolidHeapFUlP7JKRHeapb();
extern "C" void __ct__11JKRDisposerFv();
extern "C" void __dt__11JKRDisposerFv();
extern "C" void __ct__10JSUPtrLinkFPv();
extern "C" void __dt__10JSUPtrLinkFv();
extern "C" void __dt__10JSUPtrListFv();
extern "C" void initiate__10JSUPtrListFv();
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__11JASBankList[3 + 1 /* padding */];
extern "C" extern void* __vt__7JASBank[5];
extern "C" extern void* __vt__12JASVoiceBank[5 + 1 /* padding */];
extern "C" extern void* __vt__13JAISeqDataMgr[6];
extern "C" extern void* __vt__16JAIStreamDataMgr[4 + 1 /* padding */];
extern "C" extern void* __vt__32JAUStreamDataMgr_StreamFileTable[4];
extern "C" extern u8 data_80450B50[4];
extern "C" extern u8 data_80450B54[4];
extern "C" extern u8 data_80450B58[4];
extern "C" extern u8 data_80450B90[4 + 4 /* padding */];
extern "C" extern u8 data_80450CC0[4 + 4 /* padding */];
extern "C" extern u8 __OSReport_disable;
//
// Declarations:
//
/* 802A4EE8-802A4F68 29F828 0080+00 1/1 0/0 0/0 .text __ct__Q210JAUSection12TSectionDataFv */
// wild destructors appeared!
#ifdef NONMATCHING
JAUSection::TSectionData::TSectionData() {
resetRegisteredWaveBankTables();
resetRegisteredBankTables();
field_0x84 = 0;
field_0x88 = 0;
field_0x80 = 0;
field_0xa0 = 0;
field_0x9c = 0;
}
#else
JAUSection::TSectionData::TSectionData() {
// NONMATCHING
}
#endif
/* ############################################################################################## */
/* 8039B950-8039B950 027FB0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8039B950 = "index out of range of bitset::reset";
#pragma pop
/* 802A4F68-802A4FE4 29F8A8 007C+00 1/1 0/0 0/0 .text
* resetRegisteredBankTables__Q210JAUSection12TSectionDataFv */
// position of std::__bitset_base<8>::reset
#ifdef NONMATCHING
void JAUSection::TSectionData::resetRegisteredBankTables() {
for (u32 i = 0; i < 255; i++) {
registeredBankTables.reset(i);
}
}
#else
void JAUSection::TSectionData::resetRegisteredBankTables() {
// NONMATCHING
}
#endif
/* 802A4FE4-802A5060 29F924 007C+00 1/1 0/0 0/0 .text
* resetRegisteredWaveBankTables__Q210JAUSection12TSectionDataFv */
// position of std::__bitset_base<8>::reset
#ifdef NONMATCHING
void JAUSection::TSectionData::resetRegisteredWaveBankTables() {
for (u32 i = 0; i < 255; i++) {
registeredWaveBankTables.reset(i);
}
}
#else
void JAUSection::TSectionData::resetRegisteredWaveBankTables() {
// NONMATCHING
}
#endif
/* ############################################################################################## */
/* 803C9AC0-803C9AF4 026BE0 0034+00 2/2 0/0 0/0 .data __vt__14JAUSectionHeap */
SECTION_DATA extern void* __vt__14JAUSectionHeap[13] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__14JAUSectionHeapFv,
(void*)dispose__10JAUSectionFv,
(void*)NULL,
(void*)NULL,
(void*)func_802A6698,
(void*)func_802A6690,
(void*)func_802A6688,
(void*)func_802A6680,
(void*)setSeqDataUser__14JAUSectionHeapFP14JAISeqDataUser,
(void*)getSeqData__14JAUSectionHeapF10JAISoundIDP10JAISeqData,
(void*)releaseSeqData__14JAUSectionHeapFv,
};
/* 803C9AF4-803C9B08 026C14 0014+00 1/1 0/0 0/0 .data __vt__16JAUBankTableLink */
SECTION_DATA extern void* __vt__16JAUBankTableLink[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)NULL,
(void*)NULL,
(void*)getBank__12JAUBankTableCFUl,
};
/* 803C9B08-803C9B14 026C28 000C+00 1/1 0/0 0/0 .data __vt__12JAUBankTable */
SECTION_DATA extern void* __vt__12JAUBankTable[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)getBank__12JAUBankTableCFUl,
};
/* 803C9B14-803C9B24 026C34 0010+00 2/2 0/0 0/0 .data
* __vt__Q228@unnamed@JAUSectionHeap_cpp@14TStreamDataMgr */
SECTION_DATA extern void* data_803C9B14[4] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)func_802A6440,
(void*)func_802A6574,
};
/* 803C9B24-803C9B38 026C44 0010+04 3/3 0/0 0/0 .data __vt__10JAUSection */
SECTION_DATA extern void* __vt__10JAUSection[4 + 1 /* padding */] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__10JAUSectionFv,
(void*)dispose__10JAUSectionFv,
/* padding */
NULL,
};
/* 802A5060-802A50F8 29F9A0 0098+00 1/1 0/0 0/0 .text __ct__10JAUSectionFP14JAUSectionHeapUll */
// NONMATCHING - JAUSection inheritance
/* JAUSection::JAUSection(JAUSectionHeap* param_0, u32 param_1, s32 param_2) : JSULink<JAUSection>(this), field_0x28(param_1), sectionHeap_(param_0) {
buildingBankTable_ = NULL;
field_0x2c = 1;
data_.field_0x98 = param_2;
if (this != sectionHeap_) {
data_.field_0x00.setSeqDataArchive(sectionHeap_->sectionHeapData_.seqDataBlocks.getSeqDataArchive());
}
} */
/* 802A50F8-802A5160 29FA38 0068+00 0/0 1/1 0/0 .text finishBuild__10JAUSectionFv */
void JAUSection::finishBuild() {
JUT_ASSERT(143, isOpen());
JUT_ASSERT(144, isBuilding());
{
TPushCurrentHeap push(getHeap_());
}
data_.field_0x98 -= getHeap_()->getFreeSize();
getHeap_()->freeTail();
field_0x2c = 0;
}
/* 802A5160-802A51E4 29FAA0 0084+00 2/0 0/0 0/0 .text dispose__10JAUSectionFv */
void JAUSection::dispose() {
/* JUT_ASSERT(267, ! data_.registeredBankTables.any());
JUT_ASSERT(268, ! data_.registeredWaveBankTables.any()); */
if (data_.mBstDst) {
sectionHeap_->sectionHeapData_.soundTable->~JAUSoundTable();
sectionHeap_->sectionHeapData_.soundTable = NULL;
}
if ((data_.mBstnDst)) {
sectionHeap_->sectionHeapData_.soundNameTable->~JAUSoundNameTable();
sectionHeap_->sectionHeapData_.soundNameTable = NULL;
}
}
/* 802A51E4-802A52A0 29FB24 00BC+00 0/0 1/1 0/0 .text newSoundTable__10JAUSectionFPCvUlb
*/
// regalloc, stackalloc
#ifdef NONMATCHING
JAUSoundTable* JAUSection::newSoundTable(void const* bst, u32 param_1, bool param_2) {
JUT_ASSERT(285, isOpen());
JUT_ASSERT(286, isBuilding());
JUT_ASSERT(287, bst);
JUT_ASSERT(288, asSectionHeap() == this);
JUT_ASSERT(289, sectionHeap_->sectionHeapData_.soundTable == 0);
{
TPushCurrentHeap push(getHeap_());
void* bstDst;
if (param_1) {
bstDst = newCopy(bst, param_1, 4);
JUT_ASSERT(296, bstDst);
}
JAUSoundTable* soundTable = new JAUSoundTable(param_2);
JUT_ASSERT(299, soundTable);
soundTable->init(bst);
sectionHeap_->sectionHeapData_.soundTable = soundTable;
data_.mBstDst = bstDst;
}
return sectionHeap_->sectionHeapData_.soundTable;
}
#else
JAUSoundTable* JAUSection::newSoundTable(void const* param_0, u32 param_1, bool param_2) {
// NONMATCHING
}
#endif
/* 802A52A0-802A535C 29FBE0 00BC+00 0/0 1/1 0/0 .text newSoundNameTable__10JAUSectionFPCvUlb */
// regalloc, stackalloc
#ifdef NONMATCHING
JAUSoundNameTable* JAUSection::newSoundNameTable(void const* bstn, u32 param_1, bool param_2) {
JUT_ASSERT(315, isOpen());
JUT_ASSERT(316, isBuilding());
JUT_ASSERT(317, bstn);
JUT_ASSERT(318, asSectionHeap() == this);
JUT_ASSERT(319, sectionHeap_->sectionHeapData_.soundNameTable == 0);
{
TPushCurrentHeap push(getHeap_());
void* bstnDst;
if (param_1) {
bstnDst = newCopy(bstn, param_1, 4);
JUT_ASSERT(326, bstnDst);
}
JAUSoundNameTable* soundNameTable = new JAUSoundNameTable(param_2);
JUT_ASSERT(329, soundNameTable);
soundNameTable->init(bstnDst);
sectionHeap_->sectionHeapData_.soundNameTable = soundNameTable;
data_.mBstnDst = bstnDst;
}
return sectionHeap_->sectionHeapData_.soundNameTable;
}
#else
JAUSoundNameTable* JAUSection::newSoundNameTable(void const* param_0, u32 param_1, bool param_2) {
// NONMATCHING
}
#endif
/* 802A535C-802A5500 29FC9C 01A4+00 0/0 1/1 0/0 .text newStreamFileTable__10JAUSectionFPCvb */
// JAUStreamFileTable::isValid() signed
#ifdef NONMATCHING
JAIStreamDataMgr* JAUSection::newStreamFileTable(void const* param_0, bool param_1) {
JUT_ASSERT(345, asSectionHeap() == this);
JUT_ASSERT(346, isOpen());
JUT_ASSERT(347, isBuilding());
JUT_ASSERT(348, sectionHeap_->sectionHeapData_.streamDataMgr_ == 0);
{
TPushCurrentHeap push(getHeap_());
JAIStreamDataMgr* r28 = NULL;
if (param_1) {
TStreamDataMgr* r26 = new TStreamDataMgr(param_0);
if (r26->isValid()) {
r28 = r26;
}
} else {
JAUStreamDataMgr_StreamFileTable* r25 = new JAUStreamDataMgr_StreamFileTable();
r25->init(param_0);
if (r25->isValid()) {
r28 = r25;
}
}
sectionHeap_->sectionHeapData_.streamDataMgr_ = r28;
}
return sectionHeap_->sectionHeapData_.streamDataMgr_;
}
#else
JAIStreamDataMgr* JAUSection::newStreamFileTable(void const* param_0, bool param_1) {
// NONMATCHING
}
#endif
/* 802A5500-802A5598 29FE40 0098+00 0/0 1/1 0/0 .text newSeSeqCollection__10JAUSectionFPCvUl */
JAISeqDataMgr* JAUSection::newSeSeqCollection(void const* bsc, u32 param_1) {
// JUT_ASSERT(398, asSectionHeap() == this);
JUT_ASSERT(399, sectionHeap_->sectionHeapData_.seSeqDataMgr_ == 0);
if (param_1) {
bsc = newCopy(bsc, param_1, 4);
}
JUT_ASSERT(405, bsc);
{
TPushCurrentHeap push(getHeap_());
JAUSeqDataMgr_SeqCollection* seSeqDataMgr = new JAUSeqDataMgr_SeqCollection();
JUT_ASSERT(409, seSeqDataMgr);
seSeqDataMgr->init(bsc);
sectionHeap_->sectionHeapData_.seSeqDataMgr_ = seSeqDataMgr;
data_.field_0x80 = seSeqDataMgr;
}
return sectionHeap_->sectionHeapData_.seSeqDataMgr_;
}
/* 802A5598-802A56C8 29FED8 0130+00 2/2 0/0 0/0 .text
* newStaticSeqDataBlock___10JAUSectionF10JAISoundIDUl */
u8* JAUSection::newStaticSeqDataBlock_(JAISoundID param_0, u32 size) {
JUT_ASSERT(419, isOpen());
JUT_ASSERT(420, isBuilding());
JUT_ASSERT(421, size);
{
TPushCurrentHeap push(getHeap_());
JAUSeqDataBlock* seqDataBlock = new JAUSeqDataBlock();
if (!seqDataBlock) {
return NULL;
}
JSULink<JAUSeqDataBlock>* link = new JSULink<JAUSeqDataBlock>(seqDataBlock);
if (!link) {
return NULL;
}
u8* r28 = new(0x20) u8[size];
if (!r28) {
return NULL;
}
seqDataBlock->field_0x14.addr = r28;
seqDataBlock->field_0x14.size = size;
seqDataBlock->field_0x10 = param_0;
JASCriticalSection cs;
if(data_.field_0x00.appendDynamicSeqDataBlock(seqDataBlock)) {
data_.field_0x28.append(link);
return r28;
}
}
return NULL;
}
/* 802A56C8-802A5730 2A0008 0068+00 0/0 1/1 0/0 .text
* newStaticSeqData__10JAUSectionF10JAISoundIDPCvUl */
bool JAUSection::newStaticSeqData(JAISoundID param_0, void const* param_1, u32 param_2) {
u8* r30 = newStaticSeqDataBlock_(param_0, param_2);
if (r30) {
memcpy(r30, param_1, param_2);
return true;
}
return false;
}
/* 802A5730-802A57F0 2A0070 00C0+00 0/0 1/1 0/0 .text newStaticSeqData__10JAUSectionF10JAISoundID
*/
bool JAUSection::newStaticSeqData(JAISoundID param_0) {
JKRArchive* seqArchive = data_.field_0x00.getSeqDataArchive();
JUT_ASSERT(481, seqArchive);
JAUSoundInfo* soundInfo = JASGlobalInstance<JAUSoundInfo>::getInstance();
if (!soundInfo) {
return false;
}
u16 r26 = soundInfo->getBgmSeqResourceID(param_0);
u32 r25 = JASResArcLoader::getResSize(seqArchive, r26);
u8* r24 = newStaticSeqDataBlock_(0xffffffff, r25);
if (r24) {
data_.field_0x00.loadDynamicSeq(param_0, true, sectionHeap_->sectionHeapData_.seqDataUser);
return true;
}
return false;
}
/* 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) {
JUT_ASSERT(516, isOpen());
JUT_ASSERT(517, isBuilding());
u8* r31 = new(getHeap_(), param_2) u8[param_1];
if (r31) {
memcpy(r31, param_0, param_1);
}
return r31;
}
/* ############################################################################################## */
/* 8039B950-8039B950 027FB0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8039B974 = "index out of range of bitset::test";
SECTION_DEAD static char const* const stringBase_8039B997 = "index out of range of bitset::set";
/* @stringBase0 padding */
SECTION_DEAD static char const* const pad_8039B9B9 = "\0\0\0\0\0\0";
#pragma pop
/* 802A5854-802A5948 2A0194 00F4+00 0/0 1/1 0/0 .text newWaveBank__10JAUSectionFUlPCv */
// position of std::__bitset_base<8>::set
#ifdef NONMATCHING
JASWaveBank* JAUSection::newWaveBank(u32 bank_no, void const* param_1) {
JUT_ASSERT(528, isOpen());
JUT_ASSERT(529, isBuilding());
TPushCurrentHeap push(getHeap_());
s32 r27 = getHeap_()->getFreeSize();
JASWaveBank* waveBank = JASWSParser::createWaveBank(param_1, getHeap_());
if (waveBank) {
JUT_ASSERT(536, sectionHeap_->getWaveBankTable().getWaveBank( bank_no ) == 0);
sectionHeap_->getWaveBankTable().registWaveBank(bank_no, waveBank);
data_.registeredWaveBankTables.set(bank_no, true);
data_.field_0xa0 += r27 - getHeap_()->getFreeSize();
return waveBank;
}
return NULL;
}
#else
JASWaveBank* JAUSection::newWaveBank(u32 param_0, void const* param_1) {
// NONMATCHING
}
#endif
/* 802A5948-802A5A50 2A0288 0108+00 0/0 1/1 0/0 .text loadWaveArc__10JAUSectionFUlUl */
// position of std::__bitset_base<8>::test
#ifdef NONMATCHING
bool JAUSection::loadWaveArc(u32 param_0, u32 param_1) {
if (data_.registeredWaveBankTables.test(param_0)) {
JASWaveBank* waveBank = sectionHeap_->getWaveBankTable().getWaveBank(param_0);
if (waveBank) {
for (u32 i = 0; i < waveBank->getArcCount(); i++) {
if (param_1 & 1 << i) {
waveBank->getWaveArc(i)->load(NULL);
}
}
return true;
}
}
return false;
}
#else
bool JAUSection::loadWaveArc(u32 param_0, u32 param_1) {
// NONMATCHING
}
#endif
/* 802A5A50-802A5B84 2A0390 0134+00 0/0 1/1 0/0 .text newBank__10JAUSectionFPCvUl */
// vtable order JAUBankTableLink
#ifdef NONMATCHING
JASBank* JAUSection::newBank(void const* param_0, u32 param_1) {
JUT_ASSERT(647, isOpen());
JUT_ASSERT(648, isBuilding());
JASWaveBank* waveBank = sectionHeap_->getWaveBankTable().getWaveBank(param_1);
JUT_ASSERT(650, waveBank != 0);
TPushCurrentHeap push(getHeap_());
u32 bank_no = JASBNKParser::getBankNumber(param_0);
s32 r25 = getHeap_()->getFreeSize();
JASBank* bank = JASBNKParser::createBank(param_0, getHeap_());
if (bank) {
if (buildingBankTable_) {
JUT_ASSERT(660, buildingBankTable_->getBank( bank_no ) == 0);
buildingBankTable_->registBank(bank_no, bank);
} else {
JUT_ASSERT(665, JASDefaultBankTable::getInstance() ->getBank( bank_no ) == 0);
JASDefaultBankTable::getInstance()->registBank(bank_no, bank);
data_.registeredBankTables.set(bank_no, true);
}
bank->assignWaveBank(waveBank);
data_.field_0x9c += r25 - getHeap_()->getFreeSize();
return bank;
}
return 0;
}
#else
JASBank* JAUSection::newBank(void const* param_0, u32 param_1) {
// NONMATCHING
}
#endif
/* 802A5B84-802A5CAC 2A04C4 0128+00 0/0 1/1 0/0 .text newVoiceBank__10JAUSectionFUlUl */
// regalloc
#ifdef NONMATCHING
JASVoiceBank* JAUSection::newVoiceBank(u32 bank_no, u32 param_1) {
JUT_ASSERT(685, isOpen());
JUT_ASSERT(686, isBuilding());
JASWaveBank* waveBank = sectionHeap_->getWaveBankTable().getWaveBank(param_1);
JUT_ASSERT(688, waveBank != 0);
TPushCurrentHeap push(getHeap_());
JASVoiceBank* voiceBank = new JASVoiceBank();
if (voiceBank) {
if (buildingBankTable_) {
JUT_ASSERT(696, buildingBankTable_->getBank( bank_no ) == 0);
buildingBankTable_->registBank(bank_no, voiceBank);
} else {
JUT_ASSERT(701, JASDefaultBankTable::getInstance() ->getBank( bank_no ) == 0);
JASDefaultBankTable::getInstance()->registBank(bank_no, voiceBank);
data_.registeredBankTables.set(bank_no, true);
}
voiceBank->assignWaveBank(waveBank);
return voiceBank;
}
return NULL;
}
#else
JASVoiceBank* JAUSection::newVoiceBank(u32 param_0, u32 param_1) {
// NONMATCHING
}
#endif
/* 802A5CAC-802A5D9C 2A05EC 00F0+00 0/0 1/1 0/0 .text beginNewBankTable__10JAUSectionFUlUl */
// JAUBankTable inheritance
#ifdef NONMATCHING
bool JAUSection::beginNewBankTable(u32 param_0, u32 param_1) {
JUT_ASSERT(714, isOpen());
JUT_ASSERT(715, isBuilding());
JUT_ASSERT(716, buildingBankTable_ == 0);
JAUBankTableLink* bankTableLink = NULL;
{
TPushCurrentHeap push(getHeap_());
JASBank** r26 = new JASBank*[param_1];
if (r26) {
bankTableLink = new JAUBankTableLink(param_0, r26, param_1);
if (bankTableLink) {
buildingBankTable_ = bankTableLink;
} else {
}
} else {
}
}
return bankTableLink;
}
#else
bool JAUSection::beginNewBankTable(u32 param_0, u32 param_1) {
// NONMATCHING
}
#endif
/* 802A5D9C-802A5DF4 2A06DC 0058+00 0/0 1/1 0/0 .text endNewBankTable__10JAUSectionFv */
JAUBankTable* JAUSection::endNewBankTable() {
JAUBankTable* r29 = NULL;
if (buildingBankTable_) {
data_.field_0x74.appendBankTable(buildingBankTable_);
buildingBankTable_ = NULL;
r29 = buildingBankTable_;
}
return r29;
}
/* 802A5DF4-802A5E60 2A0734 006C+00 1/1 0/0 0/0 .text __ct__Q214JAUSectionHeap16TSectionHeapDataFv
*/
JAUSectionHeap::TSectionHeapData::TSectionHeapData() {
seSeqDataMgr_ = NULL;
streamDataMgr_ = NULL;
soundTable = NULL;
soundNameTable = NULL;
seqDataUser = NULL;
}
/* 802A5E60-802A5EC0 2A07A0 0060+00 0/0 1/1 0/0 .text
* setSeqDataArchive__14JAUSectionHeapFP10JKRArchive */
void JAUSectionHeap::setSeqDataArchive(JKRArchive* param_0) {
sectionHeapData_.seqDataBlocks.setSeqDataArchive(param_0);
for (JSULink<JAUSection>* link = mSectionList.getFirst(); link; link = link->getNext()) {
link->getObject()->data_.field_0x00.setSeqDataArchive(param_0);
}
}
/* 802A5EC0-802A5EF8 2A0800 0038+00 0/0 1/1 0/0 .text
* loadDynamicSeq__14JAUSectionHeapF10JAISoundIDb */
bool JAUSectionHeap::loadDynamicSeq(JAISoundID param_0, bool param_1) {
return sectionHeapData_.seqDataBlocks.loadDynamicSeq(param_0, param_1, sectionHeapData_.seqDataUser);
}
/* 802A5EF8-802A5F24 2A0838 002C+00 0/0 1/1 0/0 .text
* releaseIdleDynamicSeqDataBlock__14JAUSectionHeapFv */
void JAUSectionHeap::releaseIdleDynamicSeqDataBlock() {
sectionHeapData_.seqDataBlocks.releaseIdleDynamicSeqDataBlock(sectionHeapData_.seqDataUser);
}
namespace {
// TODO
bool JKRSolidHeap_isEmpty(JKRSolidHeap*) { return 1; }
}
/* 802A5F24-802A5F9C 2A0864 0078+00 1/1 0/0 0/0 .text JAUNewSectionHeap__FP12JKRSolidHeapb */
static JAUSectionHeap* JAUNewSectionHeap(JKRSolidHeap* heap, bool param_1) {
JUT_ASSERT(809, JKRSolidHeap_isEmpty( heap ));
TPushCurrentHeap push(heap);
s32 r29 = heap->getFreeSize();
return new JAUSectionHeap(heap, param_1, r29);
}
/* 802A5F9C-802A5FE0 2A08DC 0044+00 0/0 1/1 0/0 .text JAUNewSectionHeap__Fb */
JAUSectionHeap* JAUNewSectionHeap(bool param_0) {
s32 freeSize = JASDram->getFreeSize();
JKRSolidHeap* sectionHeap = JKRCreateSolidHeap(freeSize, JASDram, true);
JUT_ASSERT(821, sectionHeap);
return JAUNewSectionHeap(sectionHeap, param_0);
}
/* 802A5FE0-802A6094 2A0920 00B4+00 1/1 0/0 0/0 .text __ct__14JAUSectionHeapFP12JKRSolidHeapbl */
// NONMATCHING - JAUSectionHeap inheritance
/* JAUSectionHeap::JAUSectionHeap(JKRSolidHeap* param_0, bool param_1, s32 param_2) : JAUSection(this, 0, param_2), JASGlobalInstance<JAUSectionHeap>(param_1), mHeap(param_0) {
field_0xe4 = 0;
mSectionList.append(this);
} */
/* 802A6094-802A60A0 2A09D4 000C+00 0/0 1/1 0/0 .text getOpenSection__14JAUSectionHeapFv
*/
JAUSection* JAUSectionHeap::getOpenSection() {
return mSectionList.getLast()->getObject();
}
/* 802A60A0-802A60AC 2A09E0 000C+00 2/1 0/0 0/0 .text
* setSeqDataUser__14JAUSectionHeapFP14JAISeqDataUser */
bool JAUSectionHeap::setSeqDataUser(JAISeqDataUser* param_0) {
sectionHeapData_.seqDataUser = param_0;
return true;
}
/* 802A60AC-802A61D0 2A09EC 0124+00 0/0 2/2 0/0 .text newDynamicSeqBlock__14JAUSectionHeapFUl */
bool JAUSectionHeap::newDynamicSeqBlock(u32 size) {
/* JUT_ASSERT(937, isOpen());
JUT_ASSERT(938, isBuilding());
JUT_ASSERT(939, sectionHeap_ == this); */
TPushCurrentHeap push(base1.getHeap_());
JAUSeqDataBlock * seqDataBlock = new JAUSeqDataBlock();
if (!seqDataBlock) {
return false;
}
JSULink<JAUSeqDataBlock> * link = new JSULink<JAUSeqDataBlock>(seqDataBlock);
if (!link) {
return false;
}
u8* r25 = new(0x20) u8[size];
if (!r25) {
return false;
}
seqDataBlock->field_0x14.addr = r25;
seqDataBlock->field_0x14.size = size;
seqDataBlock->field_0x10.setAnonymous();
JASCriticalSection cs;
if (base1.sectionHeap_->sectionHeapData_.seqDataBlocks.appendDynamicSeqDataBlock(seqDataBlock)) {
return true;
}
return false;
}
/* 802A61D0-802A6270 2A0B10 00A0+00 2/1 0/0 0/0 .text
* getSeqData__14JAUSectionHeapF10JAISoundIDP10JAISeqData */
s32 JAUSectionHeap::getSeqData(JAISoundID param_0, JAISeqData* param_1) {
for (JSULink<JAUSection> * link = mSectionList.getFirst(); link; link = link->getNext()) {
s32 result = link->getObject()->data_.field_0x00.getSeqData(param_0, sectionHeapData_.seqDataUser, param_1, false);
// JUT_ASSERT(994, result != JAI_ASYNC_RESULT_RETRY);
if (result == 2) {
return 2;
}
}
return sectionHeapData_.seqDataBlocks.getSeqData(param_0, sectionHeapData_.seqDataUser, param_1, true);
}
/* 802A6270-802A6278 2A0BB0 0008+00 2/1 0/0 0/0 .text releaseSeqData__14JAUSectionHeapFv
*/
int JAUSectionHeap::releaseSeqData() {
return 0;
}
/* 802A6278-802A6440 2A0BB8 01C8+00 2/1 0/0 0/0 .text __dt__14JAUSectionHeapFv */
// JAUSectionHeap inheritance
#ifdef NONMATCHING
JAUSectionHeap::~JAUSectionHeap() {}
#else
JAUSectionHeap::~JAUSectionHeap() {
// NONMATCHING
}
#endif
/* 802A6440-802A6468 2A0D80 0028+00 1/0 0/0 0/0 .text
* getStreamFileEntry__Q228@unnamed@JAUSectionHeap_cpp@14TStreamDataMgrF10JAISoundID */
static void func_802A6440() {
// NONMATCHING
}
/* 802A6468-802A6574 2A0DA8 010C+00 1/0 0/0 0/0 .text __dt__10JAUSectionFv */
JAUSection::~JAUSection() {
// NONMATCHING
}
/* 802A6574-802A65D4 2A0EB4 0060+00 1/0 0/0 0/0 .text
* __dt__Q228@unnamed@JAUSectionHeap_cpp@14TStreamDataMgrFv */
void func_802A6574() {
// NONMATCHING
}
/* 802A65D4-802A6614 2A0F14 0040+00 3/3 0/0 0/0 .text set__Q23std16__bitset_base<8>FUlb
*/
extern "C" void func_802A65D4(void* _this, u32 param_0, bool param_1) {
// NONMATCHING
}
/* 802A6614-802A6634 2A0F54 0020+00 2/2 0/0 0/0 .text reset__Q23std16__bitset_base<8>FUl
*/
extern "C" void func_802A6614(void* _this, u32 param_0) {
// NONMATCHING
}
/* 802A6634-802A665C 2A0F74 0028+00 1/1 0/0 0/0 .text test__Q23std16__bitset_base<8>CFUl
*/
extern "C" void func_802A6634(void* _this, u32 param_0) /* const */ {
// NONMATCHING
}
/* ############################################################################################## */
/* 804507D0-804507D8 000250 0004+04 1/1 0/0 0/0 .sdata @2588 */
SECTION_SDATA static u8 lit_2588[4 + 4 /* padding */] = {
0x00,
0x00,
0x00,
0x00,
/* padding */
0x00,
0x00,
0x00,
0x00,
};
/* 802A665C-802A6680 2A0F9C 0024+00 1/1 0/0 0/0 .text __ct__Q23std16__bitset_base<8>Fv */
extern "C" void func_802A665C(void* _this) {
// NONMATCHING
}
/* 802A6680-802A6688 2A0FC0 0008+00 1/0 0/0 0/0 .text
* @220@setSeqDataUser__14JAUSectionHeapFP14JAISeqDataUser */
static void func_802A6680() {
// NONMATCHING
}
/* 802A6688-802A6690 2A0FC8 0008+00 1/0 0/0 0/0 .text @220@releaseSeqData__14JAUSectionHeapFv */
static void func_802A6688() {
// NONMATCHING
}
/* 802A6690-802A6698 2A0FD0 0008+00 1/0 0/0 0/0 .text
* @220@getSeqData__14JAUSectionHeapF10JAISoundIDP10JAISeqData */
static void func_802A6690() {
// NONMATCHING
}
/* 802A6698-802A66A0 2A0FD8 0008+00 1/0 0/0 0/0 .text @220@__dt__14JAUSectionHeapFv */
static void func_802A6698() {
// NONMATCHING
}
/* 8039B950-8039B950 027FB0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+106
View File
@@ -0,0 +1,106 @@
//
// Generated By: dol2asm
// Translation Unit: JAUSeqCollection
//
#include "JSystem/JAudio2/JAUSeqCollection.h"
#include "JSystem/JUtility/JUTAssert.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 802A66A0-802A66AC 2A0FE0 000C+00 1/1 0/0 0/0 .text __ct__16JAUSeqCollectionFv */
JAUSeqCollection::JAUSeqCollection() {
field_0x8 = NULL;
}
/* 802A66AC-802A66FC 2A0FEC 0050+00 0/0 1/1 0/0 .text init__16JAUSeqCollectionFPCv */
void JAUSeqCollection::init(void const* param_0) {
field_0x8 = (const JAUSeqCollectionData*)param_0;
if (field_0x8->field_0x0 != 0x53 || field_0x8->field_0x1 != 0x43) {
field_0x8 = NULL;
return;
}
field_0x0 = field_0x8->field_0x2;
field_0xc = field_0x8->field_0x4;
field_0x4 = &field_0x8->field_0x8;
}
/* 802A66FC-802A6754 2A103C 0058+00 1/1 0/0 0/0 .text
* getSeqData__16JAUSeqCollectionFiiP10JAISeqData */
bool JAUSeqCollection::getSeqData(int param_0, int param_1, JAISeqData* param_2) {
if (param_0 >= field_0x0) {
return false;
}
u32* puVar2 = (u32*)((u8*)field_0x8 + field_0x4[param_0]);
if (param_1 >= puVar2[0]) {
return false;
}
param_2->set((void*)field_0x8, puVar2[param_1 + 1]);
return true;
}
/* 802A6754-802A677C 2A1094 0028+00 1/1 0/0 0/0 .text
* getSeqDataRegion__16JAUSeqCollectionFP16JAISeqDataRegion */
bool JAUSeqCollection::getSeqDataRegion(JAISeqDataRegion* param_0) {
if (isValid()) {
param_0->addr = (u8*)field_0x8;
param_0->size = field_0xc;
return true;
}
return false;
}
/* 802A677C-802A67D0 2A10BC 0054+00 0/0 1/1 0/0 .text __ct__27JAUSeqDataMgr_SeqCollectionFv */
JAUSeqDataMgr_SeqCollection::JAUSeqDataMgr_SeqCollection() {
user_ = NULL;
}
/* 802A67D0-802A67DC 2A1110 000C+00 1/0 0/0 0/0 .text
* setSeqDataUser__27JAUSeqDataMgr_SeqCollectionFP14JAISeqDataUser */
bool JAUSeqDataMgr_SeqCollection::setSeqDataUser(JAISeqDataUser* param_0) {
JUT_ASSERT(60, user_ == 0);
user_ = param_0;
return true;
}
/* 802A67DC-802A683C 2A111C 0060+00 1/0 0/0 0/0 .text
* releaseSeqData__27JAUSeqDataMgr_SeqCollectionFv */
int JAUSeqDataMgr_SeqCollection::releaseSeqData() {
if (user_) {
JAISeqDataRegion region;
getSeqDataRegion(&region);
return user_->releaseSeqData(region);
}
return 2;
}
/* 802A683C-802A6894 2A117C 0058+00 1/0 0/0 0/0 .text
* getSeqData__27JAUSeqDataMgr_SeqCollectionF10JAISoundIDP10JAISeqData */
JAUSeqDataMgr_SeqCollection::SeqDataReturnValue JAUSeqDataMgr_SeqCollection::getSeqData(JAISoundID param_0, JAISeqData* param_1) {
if (!isValid()) {
return SeqDataReturnValue_0;
}
if (JAUSeqCollection::getSeqData(param_0.mId.mBytes.b1, param_0.mId.mAdvancedId.mShortId, param_1)) {
return SeqDataReturnValue_2;
}
return SeqDataReturnValue_0;
}
/* 802A6894-802A68F4 2A11D4 0060+00 1/0 0/0 0/0 .text __dt__27JAUSeqDataMgr_SeqCollectionFv */
JAUSeqDataMgr_SeqCollection::~JAUSeqDataMgr_SeqCollection() {}
+246
View File
@@ -0,0 +1,246 @@
//
// JAUSeqDataBlockMgr
//
#include "JSystem/JAudio2/JAUSeqDataBlockMgr.h"
#include "JSystem/JAudio2/JAUSoundInfo.h"
#include "JSystem/JAudio2/JASResArcLoader.h"
#include "dolphin/types.h"
/* 802A68F4-802A6928 2A1234 0034+00 0/0 2/2 0/0 .text __ct__15JAUSeqDataBlockFv */
JAUSeqDataBlock::JAUSeqDataBlock() : field_0x0(this) {}
/* 802A6928-802A6974 2A1268 004C+00 1/1 0/0 0/0 .text getSeqData__16JAUSeqDataBlocksF10JAISoundID
*/
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 = getFirst(); link != NULL;
link = link->getNext())
{
if ((u32)link->getObject()->field_0x10 == (u32)param_0) {
return link->getObject()->field_0x14.addr;
}
}
return NULL;
}
/* 802A6974-802A69D8 2A12B4 0064+00 1/1 0/0 0/0 .text seekFreeBlock__16JAUSeqDataBlocksFUl */
JSULink<JAUSeqDataBlock>* JAUSeqDataBlocks::seekFreeBlock(u32 size) {
u32 currentBlockSize = 0xffffffff;
JSULink<JAUSeqDataBlock>* rv = NULL;
for (JSULink<JAUSeqDataBlock>* link = 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;
}
/* 802A69D8-802A69F8 2A1318 0020+00 5/5 0/0 0/0 .text
* append__16JAUSeqDataBlocksFP26JSULink<15JAUSeqDataBlock> */
bool JAUSeqDataBlocks::append(JSULink<JAUSeqDataBlock>* param_0) {
return JSUList::append(param_0);
}
/* 802A69F8-802A6A18 2A1338 0020+00 4/4 0/0 0/0 .text
* remove__16JAUSeqDataBlocksFP26JSULink<15JAUSeqDataBlock> */
bool JAUSeqDataBlocks::remove(JSULink<JAUSeqDataBlock>* param_0) {
return JSUList::remove(param_0);
}
/* 802A6A18-802A6A58 2A1358 0040+00 1/1 0/0 0/0 .text
* hasFailedBlock__16JAUSeqDataBlocksF10JAISoundID */
bool JAUSeqDataBlocks::hasFailedBlock(JAISoundID param_0) {
JSULink<JAUSeqDataBlock>* rv = NULL;
for (JSULink<JAUSeqDataBlock>* link = getFirst(); link != NULL; link = link->getNext())
{
if (link->getObject()->field_0x10 == param_0) {
link->getObject()->field_0x10.setAnonymous();
return true;
}
}
return false;
}
/* 802A6A58-802A6AA0 2A1398 0048+00 0/0 2/2 0/0 .text __ct__23JAUDynamicSeqDataBlocksFv
*/
JAUDynamicSeqDataBlocks::JAUDynamicSeqDataBlocks() {
seqDataArchive_ = NULL;
}
/* 802A6AA0-802A6AA8 -00001 0008+00 0/0 0/0 0/0 .text
* setSeqDataArchive__23JAUDynamicSeqDataBlocksFP10JKRArchive */
void JAUDynamicSeqDataBlocks::setSeqDataArchive(JKRArchive* param_0) {
*(u32*)(((u8*)this) + 36) /* this->field_0x24 */ = (u32)(param_0);
}
/* 802A6AA8-802A6B8C 2A13E8 00E4+00 0/0 1/1 0/0 .text
* getSeqData__23JAUDynamicSeqDataBlocksF10JAISoundIDP14JAISeqDataUserP10JAISeqDatab */
s32 JAUDynamicSeqDataBlocks::getSeqData(JAISoundID param_0, JAISeqDataUser* param_1,
JAISeqData* param_2, bool param_3) {
rearrangeLoadingSeqs_();
if (mFreeBlocks.hasFailedBlock(param_0)) {
return 0;
}
if (field_0xc.getSeqData(param_0)) {
return 1;
}
u8* seqData = mLoadedBlocks.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;
}
/* 802A6B8C-802A6BF4 2A14CC 0068+00 0/0 2/2 0/0 .text
* appendDynamicSeqDataBlock__23JAUDynamicSeqDataBlocksFP15JAUSeqDataBlock */
bool JAUDynamicSeqDataBlocks::appendDynamicSeqDataBlock(JAUSeqDataBlock* seqDataBlock) {
rearrangeLoadingSeqs_();
if (seqDataBlock->field_0x10.isAnonymous()) {
mFreeBlocks.append(&seqDataBlock->field_0x0);
} else {
mLoadedBlocks.append(&seqDataBlock->field_0x0);
}
return 1;
}
/* 802A6BF4-802A6C18 2A1534 0024+00 1/1 0/0 0/0 .text
* JAUDynamicSeqDataBlocks_receiveLoaded___FUlUl */
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;
}
}
/* 802A6C18-802A6D48 2A1558 0130+00 1/1 2/2 0/0 .text
* loadDynamicSeq__23JAUDynamicSeqDataBlocksF10JAISoundIDbP14JAISeqDataUser */
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 = mFreeBlocks.seekFreeBlock(resSize);
if (link == NULL) {
if (param_1) {
link = &releaseIdleDynamicSeqDataBlock_(param_2, resSize)->field_0x0;
if (link == NULL) {
return false;
}
} else {
return false;
}
}
mFreeBlocks.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;
}
/* 802A6D48-802A6E00 2A1688 00B8+00 0/0 1/1 0/0 .text
* releaseIdleDynamicSeqDataBlock__23JAUDynamicSeqDataBlocksFP14JAISeqDataUser */
u32 JAUDynamicSeqDataBlocks::releaseIdleDynamicSeqDataBlock(JAISeqDataUser* param_0) {
rearrangeLoadingSeqs_();
u32 size = 0;
JSULink<JAUSeqDataBlock>* nextLink;
for (JSULink<JAUSeqDataBlock>* link = mLoadedBlocks.getFirst(); link != NULL; ) {
nextLink = link->getNext();
JAUSeqDataBlock* seqDataBlock = link->getObject();
if (param_0 == NULL || !param_0->isUsingSeqData(seqDataBlock->field_0x14)) {
mLoadedBlocks.remove(link);
JAUSeqDataBlock* seqDataBlock = link->getObject();
link->getObject()->field_0x10.setAnonymous();
if (size < seqDataBlock->field_0x14.size) {
size = seqDataBlock->field_0x14.size;
}
mFreeBlocks.append(link);
}
link = nextLink;
}
return size;
}
/* 802A6E00-802A6EDC 2A1740 00DC+00 1/1 0/0 0/0 .text
* releaseIdleDynamicSeqDataBlock___23JAUDynamicSeqDataBlocksFP14JAISeqDataUserUl */
JAUSeqDataBlock*
JAUDynamicSeqDataBlocks::releaseIdleDynamicSeqDataBlock_(JAISeqDataUser* param_0, u32 param_1) {
rearrangeLoadingSeqs_();
u32 minSize = 0xffffffff;
JSULink<JAUSeqDataBlock>* foundBlock = NULL;
JSULink<JAUSeqDataBlock>* link = mLoadedBlocks.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) {
mLoadedBlocks.remove(foundBlock);
JAUSeqDataBlock* seqDataBlock = foundBlock->getObject();
seqDataBlock->field_0x10.setAnonymous();
mFreeBlocks.append(foundBlock);
return foundBlock->getObject();
}
return NULL;
}
/* 802A6EDC-802A6F70 2A181C 0094+00 4/4 0/0 0/0 .text
* rearrangeLoadingSeqs___23JAUDynamicSeqDataBlocksFv */
void JAUDynamicSeqDataBlocks::rearrangeLoadingSeqs_() {
JSULink<JAUSeqDataBlock>* link = field_0xc.getFirst();
JSULink<JAUSeqDataBlock>* nextLink;
while (link != NULL) {
nextLink = link->getNext();
JAUSeqDataBlock* seqDataBlock = link->getObject();
if (seqDataBlock->field_0x1c == 0) {
field_0xc.remove(link);
mFreeBlocks.append(link);
} else if (seqDataBlock->field_0x1c == 2) {
field_0xc.remove(link);
mLoadedBlocks.append(link);
}
link = nextLink;
}
}
+28
View File
@@ -0,0 +1,28 @@
//
// Translation Unit: JAUSoundAnimator
//
#include "JSystem/JAudio2/JAUSoundAnimator.h"
/* 802A6F70-802A7044 2A18B0 00D4+00 0/0 1/1 0/0 .text getStartSoundIndex__17JAUSoundAnimationCFf
*/
int JAUSoundAnimation::getStartSoundIndex(f32 param_0) const {
int i;
for (i = 0; i < getNumSounds(); i++) {
if (getSound(i)->field_0x04 >= param_0) {
break;
}
}
return i;
}
/* 802A7044-802A7114 2A1984 00D0+00 0/0 1/1 0/0 .text getEndSoundIndex__17JAUSoundAnimationCFf */
int JAUSoundAnimation::getEndSoundIndex(f32 param_0) const {
int i;
for (i = 0; i < getNumSounds(); i++) {
if (getSound(i)->field_0x04 > param_0) {
break;
}
}
return i;
}
+56
View File
@@ -0,0 +1,56 @@
//
// JAUSoundTable
//
#include "JSystem/JAudio2/JAUSoundTable.h"
/* 802A7114-802A7160 2A1A54 004C+00 0/0 1/1 0/0 .text init__13JAUSoundTableFPCv */
void JAUSoundTable::init(void const* param_0) {
if (param_0 != NULL) {
field_0x0.init(param_0);
} else {
field_0x0.reset();
}
}
/* 802A7160-802A728C 2A1AA0 012C+00 0/0 10/10 0/0 .text getTypeID__13JAUSoundTableCF10JAISoundID
*/
u8 JAUSoundTable::getTypeID(JAISoundID param_0) const {
if (param_0.isAnonymous()) {
return 0xff;
}
JAUSoundTableSection* section = field_0x0.getSection(param_0.mId.mBytes.b0);
if (section == NULL) {
return 0xff;
}
JAUSoundTableGroup* group = field_0x0.getGroup(section, param_0.mId.mBytes.b1);
if (group == NULL) {
return 0xff;
}
return group->getTypeID(param_0.mId.mAdvancedId.mShortId);
}
/* 802A728C-802A73D4 2A1BCC 0148+00 0/0 7/7 0/0 .text getData__13JAUSoundTableCF10JAISoundID */
JAUSoundTableItem* JAUSoundTable::getData(JAISoundID param_0) const {
if (param_0.isAnonymous()) {
return NULL;
}
JAUSoundTableSection* section = field_0x0.getSection(param_0.mId.mBytes.b0);
if (section == NULL) {
return NULL;
}
JAUSoundTableGroup* group = field_0x0.getGroup(section, param_0.mId.mBytes.b1);
if (group == NULL) {
return NULL;
}
return getItem(group, param_0.mId.mAdvancedId.mShortId);
}
/* 802A73D4-802A7420 2A1D14 004C+00 0/0 1/1 0/0 .text init__17JAUSoundNameTableFPCv */
void JAUSoundNameTable::init(void const* param_0) {
if (param_0 != NULL) {
field_0x0.init(param_0);
} else {
field_0x0.reset();
}
}
@@ -0,0 +1,46 @@
#include "JSystem/JAudio2/JAUStreamFileTable.h"
#include "dolphin/os.h"
/* 802A7420-802A742C 2A1D60 000C+00 0/0 1/1 0/0 .text __ct__18JAUStreamFileTableFv */
JAUStreamFileTable::JAUStreamFileTable() {
mData = NULL;
}
/* 802A742C-802A7478 2A1D6C 004C+00 0/0 1/1 0/0 .text init__18JAUStreamFileTableFPCv */
void JAUStreamFileTable::init(void const* data) {
if (data == NULL) {
mData = NULL;
return;
}
const BinaryStreamFileTable* binaryTable = (const BinaryStreamFileTable*)data;
const char* ident = binaryTable->mIdentifier;
if (ident[0] == 'b' && ident[1] == 's' && ident[2] == 'f' && ident[3] == 't') {
mData = binaryTable;
}
}
/* 802A7478-802A7484 2A1DB8 000C+00 0/0 1/1 0/0 .text getNumFiles__18JAUStreamFileTableCFv */
int JAUStreamFileTable::getNumFiles() const {
return mData->mNumFiles;
}
/* 802A7484-802A74AC 2A1DC4 0028+00 1/1 1/1 0/0 .text getFilePath__18JAUStreamFileTableCFi */
const char* JAUStreamFileTable::getFilePath(int index) const {
if (mData == NULL) {
return 0;
}
ASSERT(index >= 0);
ASSERT(index < getNumFiles());
char* data = (char*)mData;
return (char*)(data + *(int*)(data + 8 + (index * sizeof(s32))));
}
/* 802A74AC-802A74E8 2A1DEC 003C+00 1/0 0/0 0/0 .text
* getStreamFileEntry__32JAUStreamDataMgr_StreamFileTableF10JAISoundID */
s32 JAUStreamDataMgr_StreamFileTable::getStreamFileEntry(JAISoundID soundId) {
const char* filePath = getFilePath(soundId.mId.mAdvancedId.mShortId);
if (filePath == NULL) {
return -1;
}
return DVDConvertPathToEntrynum(filePath);
}
+84
View File
@@ -0,0 +1,84 @@
//
// Generated By: dol2asm
// Translation Unit: dspproc
//
#include "JSystem/JAudio2/dspproc.h"
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 8029E4E0-8029E528 298E20 0048+00 0/0 1/1 0/0 .text DSPReleaseHalt2__FUl */
void DSPReleaseHalt2(u32 msg) {
u32 msgs[2];
u16 dspMap = DSP_CreateMap2(msg);
msgs[0] = (msg<<16) | dspMap;
DSPSendCommands2(msgs,0,NULL);
}
/* ############################################################################################## */
/* 804512F8-80451300 0007F8 0004+04 2/2 0/0 0/0 .sbss flag */
static volatile BOOL flag;
/* 8029E540-8029E54C 298E80 000C+00 1/1 0/0 0/0 .text setup_callback__FUs */
static void setup_callback(u16 param_0) {
flag = 0;
}
/* 8029E560-8029E5C4 298EA0 0064+00 0/0 1/1 0/0 .text DsetupTable__FUlUlUlUlUl */
void DsetupTable(u32 param_0, u32 param_1, u32 param_2, u32 param_3, u32 param_4) {
u32 table[5];
table[0] = (param_0 & 0xFFFF) | 0x81000000;
table[1] = param_1;
table[2] = param_2;
table[3] = param_3;
table[4] = param_4;
flag = 1;
DSPSendCommands2(table,5,setup_callback);
while (true) {
if (flag==0) {
return;
}
}
}
/* ############################################################################################## */
/* 804507C8-804507D0 000248 0002+06 3/3 0/0 0/0 .sdata DSP_MIXERLEVEL */
static u16 DSP_MIXERLEVEL = 0x4000;
/* 8029E5E0-8029E604 298F20 0024+00 0/0 1/1 0/0 .text DsetMixerLevel__Ff */
void DsetMixerLevel(f32 level) {
DSP_MIXERLEVEL = 4096.0f*level;
}
/* 8029E620-8029E674 298F60 0054+00 0/0 1/1 0/0 .text DsyncFrame2ch__FUlUlUl */
void DsyncFrame2ch(u32 param_0, u32 param_1, u32 param_2) {
u32 msgs[5];
msgs[0] = (param_0 & 0xff) << 0x10 | 0x82000000 | DSP_MIXERLEVEL;
msgs[1] = param_1;
msgs[2] = param_2;
msgs[3] = 0;
msgs[4] = 0;
DSPSendCommands2(msgs, 5, 0);
}
/* 8029E680-8029E6D0 298FC0 0050+00 0/0 1/1 0/0 .text DsyncFrame4ch__FUlUlUlUlUl */
void DsyncFrame4ch(u32 param_0, u32 param_1, u32 param_2, u32 param_3, u32 param_4) {
u32 msgs[5];
msgs[0] = (param_0 & 0xff) << 0x10 | 0x82000000 | DSP_MIXERLEVEL;
msgs[1] = param_1;
msgs[2] = param_2;
msgs[3] = param_3;
msgs[4] = param_4;
DSPSendCommands2(msgs, 5, 0);
}
+644
View File
@@ -0,0 +1,644 @@
//
// Generated By: dol2asm
// Translation Unit: dsptask
//
#include "JSystem/JAudio2/dsptask.h"
#include "JSystem/JAudio2/osdsp.h"
#include "dolphin/os.h"
//
// Forward References:
//
static void DspInitWork();
static void DspHandShake(void* param_0);
static int DspStartWork(u32 param_0, void (*param_1)(u16));
//
// External References:
//
extern int Dsp_Running_Check();
extern int Dsp_Running_Start();
/* 8029E6E0-8029E718 299020 0038+00 1/1 0/0 0/0 .text DspHandShake__FPv */
void DspHandShake(void*) {
while (DSPCheckMailFromDSP() == 0) {}
DSPReadMailFromDSP();
DSPCheckMailFromDSP();
Dsp_Running_Start();
}
/* ############################################################################################## */
/* 803C7920-803C9820 024A40 1F00+00 1/1 0/0 0/0 .data jdsp */
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,
0x00, 0x80, 0x00, 0x00, 0x00, 0x5F, 0x1B, 0x1E, 0x02, 0xBF, 0x07, 0x75, 0x02, 0xBF, 0x06, 0x00,
0x02, 0xBF, 0x0F, 0x08, 0x0E, 0x00, 0x02, 0xBF, 0x07, 0x57, 0x00, 0x9E, 0x11, 0x11, 0x02, 0xBF,
0x07, 0x61, 0x0E, 0x00, 0x00, 0xFE, 0x03, 0x4E, 0x13, 0x05, 0x02, 0x9F, 0x07, 0xB2, 0x00, 0xDF,
0x03, 0x57, 0x00, 0xFF, 0x03, 0x45, 0x00, 0xDE, 0x03, 0x56, 0x1F, 0xFE, 0x03, 0x40, 0x00, 0xFF,
0x00, 0xFF, 0x03, 0x44, 0x14, 0x79, 0x02, 0x40, 0x00, 0x7E, 0x00, 0xFE, 0x03, 0x43, 0x02, 0x00,
0x00, 0x75, 0x1C, 0x1E, 0x17, 0x0F, 0x00, 0x92, 0x00, 0xFF, 0x0E, 0x04, 0x02, 0xBF, 0x07, 0x57,
0x00, 0xDE, 0x03, 0x56, 0x02, 0xBF, 0x07, 0x61, 0x02, 0x9F, 0x00, 0x2D, 0x12, 0x05, 0x02, 0xBF,
0x00, 0x57, 0x0E, 0x01, 0x02, 0xBF, 0x07, 0x57, 0x13, 0x05, 0x02, 0x9F, 0x00, 0x2D, 0x12, 0x02,
0x12, 0x03, 0x12, 0x04, 0x13, 0x06, 0x8E, 0x00, 0x8C, 0x00, 0x8B, 0x00, 0x00, 0x9E, 0xFF, 0xFF,
0x1D, 0x1E, 0x1D, 0x3E, 0x1D, 0x5E, 0x1D, 0x7E, 0x00, 0x92, 0x00, 0xFF, 0x02, 0xDF, 0x00, 0x81,
0x03, 0x58, 0x00, 0x90, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x7E, 0x00, 0x71, 0x19, 0x3E, 0x1B, 0x1E,
0x19, 0x3E, 0x1B, 0x1E, 0x02, 0xDF, 0x02, 0x9F, 0x00, 0x43, 0x02, 0x9F, 0x00, 0x43, 0x02, 0x9F,
0x00, 0x95, 0x02, 0x9F, 0x02, 0x92, 0x02, 0x9F, 0x00, 0x73, 0x02, 0x9F, 0x06, 0x6D, 0x02, 0x9F,
0x06, 0x7F, 0x02, 0x9F, 0x05, 0xA9, 0x02, 0x9F, 0x05, 0x5D, 0x02, 0x9F, 0x05, 0xC5, 0x02, 0x9F,
0x05, 0x8D, 0x02, 0x9F, 0x00, 0x43, 0x02, 0x9F, 0x00, 0x43, 0x02, 0x9F, 0x00, 0x43, 0x02, 0x9F,
0x00, 0xB2, 0x02, 0x9F, 0x00, 0x43, 0x02, 0x9F, 0x00, 0x43, 0x00, 0x80, 0x03, 0x80, 0x0E, 0x04,
0x02, 0xBF, 0x00, 0x67, 0x00, 0x81, 0x03, 0x82, 0x00, 0x9F, 0x00, 0x00, 0x00, 0x80, 0x02, 0x80,
0x02, 0xBF, 0x06, 0x10, 0x00, 0x81, 0x03, 0x84, 0x00, 0x9F, 0x03, 0x00, 0x00, 0x80, 0x00, 0x20,
0x02, 0xBF, 0x06, 0x10, 0x00, 0xDE, 0x03, 0x45, 0x00, 0xFE, 0x03, 0x42, 0x02, 0xBF, 0x0C, 0xD9,
0x02, 0x9F, 0x00, 0x43, 0x00, 0x80, 0x03, 0x74, 0x0E, 0x01, 0x00, 0xFE, 0x03, 0x77, 0x00, 0xFE,
0x03, 0x7C, 0x02, 0xBF, 0x00, 0x67, 0x00, 0xDE, 0x03, 0x45, 0x00, 0xFE, 0x03, 0x76, 0x02, 0x9F,
0x00, 0x43, 0x00, 0x81, 0x03, 0x4C, 0x00, 0x9F, 0x04, 0x00, 0x00, 0x80, 0x00, 0xC0, 0x02, 0xBF,
0x06, 0x10, 0x02, 0xDF, 0x00, 0x81, 0x03, 0x4C, 0x00, 0x9F, 0x04, 0x00, 0x00, 0x80, 0x00, 0x80,
0x00, 0x81, 0x03, 0x4C, 0x19, 0x3E, 0x19, 0x3C, 0x00, 0x98, 0x00, 0x00, 0x70, 0x00, 0x02, 0xBF,
0x06, 0x1F, 0x02, 0xDF, 0x19, 0x1E, 0x19, 0x1A, 0x00, 0x5F, 0x64, 0xA0, 0x1B, 0x7E, 0x1B, 0x7A,
0x02, 0xDF, 0x00, 0x00, 0x00, 0x7F, 0x00, 0xE7, 0x19, 0x1E, 0x1B, 0x7E, 0x19, 0x1E, 0x1B, 0x7E,
0x00, 0x00, 0x02, 0xDF, 0x19, 0x1E, 0x19, 0x1A, 0x00, 0x7F, 0x00, 0xF1, 0x32, 0xB2, 0x65, 0xA0,
0x33, 0xBA, 0x64, 0xA1, 0x00, 0x00, 0x02, 0xDF, 0x8A, 0x00, 0x15, 0x7F, 0x1C, 0x20, 0x1C, 0x03,
0x19, 0x3A, 0x90, 0x51, 0x92, 0x5B, 0x00, 0x7F, 0x01, 0x00, 0x46, 0x51, 0x92, 0xB2, 0x46, 0x51,
0x92, 0xB2, 0x8B, 0x00, 0x02, 0xDF, 0x8A, 0x00, 0x19, 0x1A, 0x90, 0x50, 0x92, 0x50, 0x00, 0x5F,
0x92, 0xA0, 0x8B, 0x00, 0x02, 0xDF, 0x81, 0x00, 0x89, 0x00, 0x0E, 0x50, 0x00, 0x80, 0x0D, 0x00,
0x00, 0x5E, 0x1B, 0x1F, 0x00, 0x80, 0x0D, 0x60, 0x00, 0x5E, 0x1B, 0x1F, 0x00, 0xDA, 0x03, 0x74,
0x86, 0x00, 0x02, 0xB5, 0x0F, 0x33, 0x81, 0x00, 0x89, 0x00, 0x0E, 0x50, 0x00, 0x80, 0x0C, 0xA0,
0x00, 0x5E, 0x1B, 0x1F, 0x00, 0x80, 0x0F, 0x40, 0x00, 0x5E, 0x1B, 0x1F, 0x00, 0x80, 0x0F, 0xA0,
0x00, 0x5E, 0x1B, 0x1F, 0x00, 0x80, 0x0A, 0x00, 0x00, 0x5E, 0x1B, 0x1F, 0x00, 0x80, 0x09, 0xA0,
0x00, 0x5E, 0x1B, 0x1F, 0x0F, 0x04, 0x00, 0x80, 0x0E, 0x10, 0x00, 0x83, 0x0D, 0xC0, 0x02, 0xBF,
0x00, 0xE1, 0x00, 0x80, 0x0E, 0x70, 0x00, 0x83, 0x0E, 0x20, 0x02, 0xBF, 0x00, 0xE1, 0x00, 0x80,
0x0E, 0xD0, 0x00, 0x83, 0x0E, 0x80, 0x02, 0xBF, 0x00, 0xE1, 0x00, 0x80, 0x0F, 0x30, 0x00, 0x83,
0x0E, 0xE0, 0x02, 0xBF, 0x00, 0xE1, 0x81, 0x00, 0x0E, 0x50, 0x89, 0x00, 0x00, 0x80, 0x0D, 0xC8,
0x00, 0x5E, 0x1B, 0x1F, 0x00, 0x80, 0x0E, 0x28, 0x00, 0x5E, 0x1B, 0x1F, 0x00, 0x80, 0x0E, 0x88,
0x00, 0x5E, 0x1B, 0x1F, 0x00, 0x80, 0x0E, 0xE8, 0x00, 0x5E, 0x1B, 0x1F, 0x02, 0xDF, 0x00, 0x9F,
0x05, 0x80, 0x00, 0x9B, 0x00, 0xA0, 0x00, 0x81, 0x03, 0x93, 0x18, 0xBC, 0xB8, 0x71, 0xBC, 0x00,
0x00, 0x80, 0x00, 0x50, 0x02, 0xBF, 0x06, 0x12, 0x02, 0xDF, 0x00, 0xDF, 0x03, 0xA1, 0x05, 0x08,
0x00, 0x80, 0x05, 0x80, 0x1C, 0x7F, 0x00, 0x98, 0x7F, 0xFF, 0x89, 0x00, 0x0F, 0x50, 0x02, 0xBF,
0x00, 0xF4, 0x02, 0xDF, 0x00, 0xC0, 0x03, 0xA0, 0x19, 0x1A, 0x02, 0xBF, 0x01, 0x5F, 0x02, 0xBF,
0x01, 0x6D, 0x81, 0x00, 0x89, 0x00, 0x00, 0xDE, 0x03, 0x90, 0x02, 0xA0, 0x00, 0x01, 0x02, 0x9D,
0x01, 0x90, 0x00, 0x80, 0x03, 0x98, 0x0E, 0x08, 0x00, 0xC1, 0x03, 0xA1, 0x02, 0xBF, 0x0C, 0x1B,
0x0F, 0x50, 0x00, 0xC0, 0x03, 0xA1, 0x00, 0xDA, 0x03, 0x94, 0x86, 0x00, 0x02, 0x95, 0x01, 0x9D,
0x1C, 0x7A, 0x00, 0xD8, 0x03, 0x95, 0x02, 0xBF, 0x00, 0xF4, 0x0F, 0x50, 0x00, 0xC0, 0x03, 0xA1,
0x00, 0xDA, 0x03, 0x96, 0x86, 0x00, 0x02, 0x95, 0x01, 0xAA, 0x1C, 0x7A, 0x00, 0xD8, 0x03, 0x97,
0x02, 0xBF, 0x00, 0xF4, 0x00, 0xDE, 0x03, 0x90, 0x02, 0xA0, 0x00, 0x02, 0x02, 0xDD, 0x00, 0x80,
0x03, 0x98, 0x0E, 0x08, 0x00, 0xC1, 0x03, 0xA1, 0x02, 0xBF, 0x0C, 0x1B, 0x02, 0xDF, 0x89, 0x00,
0x00, 0x9F, 0x0D, 0xC0, 0x00, 0xFF, 0x03, 0xA1, 0x00, 0x9F, 0x03, 0xA8, 0x00, 0xFF, 0x03, 0xA2,
0x00, 0x9F, 0x03, 0xA4, 0x00, 0xFF, 0x03, 0xA0, 0x11, 0x04, 0x01, 0xE4, 0x00, 0xC0, 0x03, 0xA2,
0x00, 0x83, 0x03, 0x90, 0x89, 0x00, 0x0F, 0x08, 0x02, 0xBF, 0x00, 0xE1, 0x00, 0xDA, 0x03, 0x90,
0x86, 0x00, 0x02, 0x95, 0x01, 0xD5, 0x02, 0xBF, 0x01, 0x7A, 0x81, 0x00, 0x00, 0xDE, 0x03, 0xA2,
0x04, 0x10, 0x00, 0xFE, 0x03, 0xA2, 0x00, 0xDE, 0x03, 0xA1, 0x04, 0x60, 0x00, 0xFE, 0x03, 0xA1,
0x00, 0xDE, 0x03, 0xA0, 0x74, 0x00, 0x00, 0xFE, 0x03, 0xA0, 0x00, 0xDA, 0x03, 0x74, 0x86, 0x00,
0x02, 0x94, 0x02, 0x0E, 0x0F, 0x50, 0x00, 0x80, 0x0B, 0xE0, 0x00, 0x83, 0x0E, 0x80, 0x00, 0x98,
0x7F, 0xFF, 0x02, 0xBF, 0x00, 0xF4, 0x0F, 0x50, 0x00, 0x80, 0x0B, 0xE0, 0x00, 0x83, 0x0E, 0xE0,
0x00, 0x98, 0xB8, 0x20, 0x02, 0xBF, 0x00, 0xF4, 0x0F, 0x28, 0x00, 0x80, 0x0C, 0x68, 0x00, 0x83,
0x0E, 0x80, 0x00, 0x98, 0xB8, 0x20, 0x02, 0xBF, 0x00, 0xF4, 0x0F, 0x28, 0x00, 0x80, 0x0C, 0x68,
0x00, 0x83, 0x0E, 0xE0, 0x00, 0x98, 0x7F, 0xFF, 0x02, 0xBF, 0x00, 0xF4, 0x81, 0x00, 0x89, 0x00,
0x0E, 0x50, 0x00, 0x80, 0x0B, 0xE0, 0x00, 0x5E, 0x1B, 0x1F, 0x00, 0x80, 0x0C, 0x40, 0x00, 0x5E,
0x1B, 0x1F, 0x02, 0xDF, 0x00, 0xC0, 0x03, 0xA0, 0x18, 0x1A, 0x81, 0x00, 0x18, 0x1E, 0x00, 0xDB,
0x03, 0x91, 0x74, 0x00, 0xD1, 0x00, 0x02, 0x70, 0x81, 0x00, 0x1B, 0x1E, 0x00, 0xDF, 0x03, 0xA1,
0x00, 0x9B, 0x00, 0xA0, 0x00, 0x81, 0x03, 0x93, 0x18, 0xBC, 0xB8, 0x71, 0xBC, 0x00, 0x00, 0x80,
0x00, 0x50, 0x02, 0xBF, 0x06, 0x1F, 0x02, 0xDF, 0x00, 0xDA, 0x03, 0x74, 0x86, 0x00, 0x02, 0x94,
0x02, 0x4D, 0x89, 0x00, 0x0F, 0x28, 0x00, 0x80, 0x0C, 0x40, 0x00, 0x83, 0x0E, 0xA8, 0x00, 0x98,
0xB8, 0x20, 0x02, 0xBF, 0x00, 0xF4, 0x89, 0x00, 0x0F, 0x28, 0x00, 0x80, 0x0C, 0x40, 0x00, 0x83,
0x0F, 0x08, 0x00, 0x98, 0x7F, 0xFF, 0x02, 0xBF, 0x00, 0xF4, 0x00, 0x9F, 0x0D, 0xC0, 0x00, 0xFF,
0x03, 0xA1, 0x00, 0x9F, 0x03, 0xA8, 0x00, 0xFF, 0x03, 0xA2, 0x00, 0x9F, 0x03, 0xA4, 0x00, 0xFF,
0x03, 0xA0, 0x11, 0x04, 0x02, 0x77, 0x00, 0xC0, 0x03, 0xA2, 0x00, 0x83, 0x03, 0x90, 0x0F, 0x08,
0x02, 0xBF, 0x00, 0xE1, 0x00, 0xDA, 0x03, 0x90, 0x86, 0x00, 0x02, 0x95, 0x02, 0x69, 0x02, 0xBF,
0x02, 0x1A, 0x00, 0xDE, 0x03, 0xA2, 0x04, 0x10, 0x00, 0xFE, 0x03, 0xA2, 0x00, 0xDE, 0x03, 0xA1,
0x04, 0x60, 0x00, 0xFE, 0x03, 0xA1, 0x00, 0xDE, 0x03, 0xA0, 0x74, 0x00, 0x00, 0xFE, 0x03, 0xA0,
0x02, 0xDF, 0x00, 0x81, 0x03, 0x86, 0x00, 0x9F, 0x03, 0xA8, 0x00, 0x80, 0x00, 0x40, 0x02, 0xBF,
0x06, 0x10, 0x02, 0xDF, 0x19, 0x1E, 0x18, 0x9C, 0x48, 0x00, 0x1B, 0x1E, 0x1B, 0x1C, 0x02, 0xDF,
0x81, 0x00, 0x89, 0x00, 0x00, 0xDF, 0x03, 0x54, 0x00, 0xDE, 0x03, 0x4E, 0x82, 0x00, 0x02, 0x93,
0x02, 0x88, 0x02, 0xDF, 0x00, 0x80, 0x03, 0x88, 0x00, 0x81, 0x00, 0x67, 0x0E, 0x02, 0x17, 0x3F,
0x02, 0xBF, 0x04, 0x74, 0x00, 0xDE, 0x03, 0x44, 0x00, 0xFE, 0x03, 0x41, 0x00, 0xDE, 0x03, 0x45,
0x00, 0xFE, 0x03, 0x8E, 0x81, 0x00, 0x00, 0xFE, 0x03, 0x55, 0x02, 0xBF, 0x02, 0x79, 0x02, 0xBF,
0x06, 0x91, 0x00, 0xDE, 0x03, 0x41, 0x00, 0x7E, 0x04, 0x6F, 0x02, 0xBF, 0x01, 0x0B, 0x02, 0xBF,
0x01, 0xB7, 0x02, 0xBF, 0x04, 0xE0, 0x02, 0xBF, 0x0A, 0x4C, 0x00, 0xDE, 0x03, 0x55, 0x74, 0x00,
0x00, 0xFE, 0x03, 0x55, 0x81, 0x00, 0x00, 0xFE, 0x03, 0x54, 0x00, 0xDE, 0x03, 0x42, 0x00, 0x7E,
0x04, 0x13, 0x02, 0xBF, 0x02, 0x88, 0x81, 0x00, 0x89, 0x00, 0x00, 0xDE, 0x03, 0x54, 0x14, 0x7C,
0x02, 0x00, 0x04, 0xFC, 0x1C, 0x1E, 0x18, 0x1F, 0x00, 0xDE, 0x03, 0x54, 0x02, 0x40, 0x00, 0x0F,
0x3D, 0x80, 0x03, 0xC0, 0x80, 0x00, 0x02, 0x9C, 0x04, 0x0F, 0x00, 0xD8, 0x03, 0x54, 0x00, 0x9A,
0x01, 0x80, 0x81, 0x00, 0x00, 0xDE, 0x03, 0x80, 0x00, 0xDC, 0x03, 0x81, 0x90, 0x00, 0x94, 0x00,
0x00, 0xFE, 0x03, 0x4C, 0x00, 0xFC, 0x03, 0x4D, 0x02, 0xBF, 0x00, 0xC1, 0x00, 0xDA, 0x04, 0x00,
0x86, 0x00, 0x02, 0x95, 0x04, 0x0F, 0x00, 0xDA, 0x04, 0x01, 0x86, 0x00, 0x02, 0x94, 0x04, 0x0F,
0x00, 0xDA, 0x04, 0x33, 0x00, 0xFA, 0x03, 0xF8, 0x00, 0xDA, 0x04, 0x06, 0x86, 0x00, 0x02, 0x94,
0x0E, 0xF3, 0x81, 0x00, 0x00, 0xDE, 0x04, 0x80, 0x06, 0x09, 0x02, 0x95, 0x03, 0x10, 0x06, 0x05,
0x02, 0x95, 0x03, 0x10, 0x06, 0x08, 0x02, 0x95, 0x0A, 0x7C, 0x06, 0x10, 0x02, 0x95, 0x0B, 0x01,
0x06, 0x20, 0x02, 0x95, 0x0B, 0x87, 0x06, 0x21, 0x02, 0x95, 0x0B, 0x8F, 0x02, 0x9F, 0x09, 0x69,
0x00, 0xD8, 0x04, 0x02, 0x81, 0x00, 0x89, 0x00, 0x00, 0xDC, 0x04, 0x30, 0x8D, 0x00, 0x09, 0x50,
0xA0, 0x00, 0xA4, 0x00, 0x14, 0x04, 0x8C, 0x00, 0x1F, 0xFE, 0x00, 0x83, 0x05, 0x80, 0x02, 0xBF,
0x08, 0x2A, 0x02, 0x9F, 0x03, 0x23, 0x00, 0x80, 0x05, 0x80, 0x00, 0x81, 0x05, 0x20, 0x00, 0x99,
0x00, 0x00, 0x02, 0xBF, 0x0E, 0x73, 0x00, 0xDA, 0x04, 0xA8, 0x86, 0x00, 0x02, 0x95, 0x03, 0x34,
0x00, 0x80, 0x05, 0x20, 0x02, 0xBF, 0x0D, 0x71, 0x00, 0x9E, 0x05, 0x20, 0x00, 0xFE, 0x03, 0x8F,
0x89, 0x00, 0x00, 0xDF, 0x04, 0x84, 0x03, 0x40, 0x00, 0x1F, 0xB9, 0x00, 0x02, 0x95, 0x03, 0x64,
0x00, 0xDE, 0x03, 0x8F, 0x5C, 0x00, 0x00, 0xFE, 0x03, 0x8F, 0x1C, 0x7E, 0x00, 0x80, 0x04, 0x40,
0x05, 0xFE, 0x02, 0xBF, 0x00, 0xDA, 0x00, 0x80, 0x04, 0x90, 0x00, 0xC1, 0x03, 0x8F, 0x89, 0x00,
0x00, 0xDF, 0x04, 0x84, 0x03, 0x40, 0x00, 0x1F, 0x02, 0xBF, 0x0C, 0x3A, 0x00, 0xDE, 0x03, 0x8F,
0x04, 0x50, 0x1C, 0x1E, 0x00, 0x83, 0x04, 0x40, 0x89, 0x00, 0x00, 0xDF, 0x04, 0x84, 0x03, 0x40,
0x00, 0x1F, 0x05, 0xFE, 0x02, 0xBF, 0x00, 0xDA, 0x00, 0xDE, 0x04, 0x84, 0x02, 0x40, 0x00, 0x20,
0x02, 0x95, 0x03, 0x86, 0x00, 0x80, 0x04, 0xA4, 0x00, 0xC1, 0x03, 0x8F, 0x00, 0x82, 0x04, 0x54,
0x00, 0x83, 0x04, 0xA7, 0x18, 0xFA, 0x86, 0x00, 0x02, 0x94, 0x03, 0x84, 0x18, 0xFA, 0x86, 0x00,
0x02, 0x94, 0x03, 0x84, 0x18, 0xFA, 0x86, 0x00, 0x02, 0x94, 0x03, 0x84, 0x81, 0x00, 0x18, 0xFE,
0x02, 0x80, 0x7F, 0xFF, 0x02, 0x95, 0x03, 0x86, 0x02, 0xBF, 0x0C, 0x55, 0x81, 0x00, 0x00, 0xDE,
0x04, 0x2C, 0xB1, 0x00, 0x02, 0x95, 0x03, 0x90, 0x02, 0xBF, 0x0D, 0xC0, 0x02, 0x9F, 0x04, 0x05,
0x81, 0x00, 0x1C, 0x9E, 0x1C, 0xDE, 0x74, 0x00, 0x1C, 0xFE, 0x81, 0x00, 0x00, 0xDE, 0x04, 0x07,
0xB1, 0x00, 0x02, 0x95, 0x03, 0xA8, 0x00, 0xC3, 0x03, 0x8F, 0x00, 0x07, 0x00, 0x80, 0x04, 0x77,
0x00, 0x84, 0xFF, 0xFF, 0x00, 0x87, 0xFF, 0xFF, 0x19, 0x9A, 0x65, 0x54, 0x00, 0x5E, 0x65, 0xAD,
0x00, 0xDA, 0x04, 0x85, 0x86, 0x00, 0x02, 0x95, 0x03, 0xBE, 0x89, 0x00, 0x00, 0x86, 0x00, 0x05,
0x00, 0x82, 0x04, 0x0A, 0x11, 0x06, 0x03, 0xB6, 0x18, 0xDE, 0x14, 0x7F, 0x4D, 0x36, 0xB9, 0x00,
0x02, 0x94, 0x03, 0xBE, 0x00, 0x9A, 0x00, 0x01, 0x00, 0xFA, 0x04, 0x01, 0x8F, 0x00, 0x00, 0x86,
0x00, 0x02, 0x00, 0x82, 0x04, 0x08, 0x11, 0x06, 0x03, 0xEE, 0x81, 0x00, 0x19, 0x5E, 0x12, 0x00,
0xB1, 0x00, 0x02, 0x75, 0x13, 0x00, 0x1C, 0x7E, 0x19, 0x5E, 0x19, 0x5F, 0x5C, 0x00, 0x14, 0xFB,
0x1F, 0x5E, 0x1F, 0x1C, 0x18, 0x5E, 0x02, 0x40, 0x00, 0xFF, 0x1F, 0x7E, 0x18, 0x5E, 0x14, 0x78,
0x00, 0x9C, 0x00, 0x00, 0xD1, 0x00, 0x02, 0x95, 0x03, 0xE3, 0x18, 0x5E, 0x02, 0x72, 0x74, 0x00,
0x02, 0x71, 0x78, 0x00, 0x1A, 0x5E, 0x00, 0x06, 0x00, 0xDE, 0x03, 0x8F, 0x56, 0x00, 0x02, 0x9D,
0x03, 0xEC, 0x1C, 0x1E, 0x02, 0xBF, 0x0D, 0x96, 0x00, 0x00, 0x1B, 0x5F, 0x00, 0x0A, 0x8E, 0x00,
0x81, 0x00, 0x00, 0xDE, 0x04, 0x07, 0xB1, 0x00, 0x02, 0x95, 0x04, 0x05, 0x00, 0xC3, 0x03, 0x8F,
0x00, 0x87, 0x00, 0x4F, 0x00, 0x1F, 0x00, 0x80, 0x04, 0x77, 0x00, 0x84, 0xFF, 0xFF, 0x00, 0x87,
0xFF, 0xFF, 0x19, 0xFA, 0x65, 0x57, 0x00, 0x5E, 0x65, 0xAF, 0x00, 0xDA, 0x04, 0x06, 0x86, 0x00,
0x02, 0x94, 0x04, 0x0D, 0x81, 0x00, 0x00, 0xFE, 0x04, 0x04, 0x02, 0xBF, 0x00, 0xCA, 0x00, 0xDE,
0x03, 0x54, 0x74, 0x00, 0x00, 0xFE, 0x03, 0x54, 0x0E, 0x00, 0x00, 0xFE, 0x03, 0x4E, 0x0E, 0x04,
0x02, 0xBF, 0x07, 0x57, 0x00, 0xDE, 0x03, 0x55, 0x02, 0x60, 0xFF, 0x00, 0x02, 0xBF, 0x07, 0x61,
0x02, 0xBF, 0x0C, 0xF7, 0x02, 0xBF, 0x0D, 0x09, 0x02, 0xBF, 0x0D, 0x5E, 0x00, 0xDE, 0x03, 0x41,
0x78, 0x00, 0x00, 0xFE, 0x03, 0x41, 0x00, 0x80, 0x09, 0xA0, 0x00, 0x83, 0x0D, 0x00, 0x0F, 0x50,
0x00, 0x98, 0x5A, 0x82, 0x02, 0xBF, 0x00, 0xF4, 0x00, 0x80, 0x09, 0xA0, 0x00, 0x83, 0x0D, 0x60,
0x0F, 0x50, 0x02, 0xBF, 0x00, 0xF4, 0x00, 0x83, 0x0D, 0x00, 0x02, 0xBF, 0x0D, 0xAE, 0x00, 0x81,
0x03, 0x88, 0x00, 0x9F, 0x0D, 0x00, 0x00, 0x80, 0x00, 0x50, 0x02, 0xBF, 0x06, 0x1D, 0x00, 0x80,
0x0F, 0xA0, 0x00, 0x83, 0x0D, 0x60, 0x0F, 0x50, 0x00, 0x98, 0x80, 0x00, 0x02, 0xBF, 0x00, 0xF4,
0x00, 0x83, 0x0D, 0x60, 0x02, 0xBF, 0x0D, 0xAE, 0x00, 0x81, 0x03, 0x8A, 0x00, 0x9F, 0x0D, 0x60,
0x00, 0x80, 0x00, 0x50, 0x02, 0xBF, 0x06, 0x1D, 0x00, 0x9A, 0x00, 0x00, 0x00, 0x98, 0x00, 0xA0,
0x00, 0x80, 0x03, 0x88, 0x02, 0xBF, 0x02, 0x82, 0x00, 0x80, 0x03, 0x8A, 0x02, 0xBF, 0x02, 0x82,
0x02, 0xBF, 0x02, 0x34, 0x02, 0xBF, 0x04, 0xAF, 0x02, 0xBF, 0x04, 0x86, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x00, 0x2D, 0x02, 0x9F, 0x06, 0xF0, 0x00, 0x80, 0x03, 0x74, 0x0E, 0x02, 0x02, 0xBF,
0x00, 0x69, 0x00, 0xDE, 0x03, 0x74, 0x02, 0x40, 0x7F, 0xFF, 0x00, 0xFE, 0x03, 0x74, 0x00, 0xDE,
0x03, 0x76, 0x02, 0x40, 0x7F, 0xFF, 0x00, 0xFE, 0x03, 0x76, 0x02, 0xDF, 0x00, 0xDA, 0x03, 0x74,
0x86, 0x00, 0x02, 0xD5, 0x00, 0x83, 0x0F, 0x40, 0x02, 0xBF, 0x0D, 0xAE, 0x00, 0x83, 0x0C, 0xA0,
0x02, 0xBF, 0x0D, 0xAE, 0x00, 0x81, 0x03, 0x74, 0x00, 0x9F, 0x0F, 0x40, 0x00, 0x80, 0x00, 0x50,
0x02, 0xBF, 0x06, 0x1D, 0x00, 0x81, 0x03, 0x76, 0x00, 0x9F, 0x0C, 0xA0, 0x00, 0x80, 0x00, 0x50,
0x02, 0xBF, 0x06, 0x1D, 0x00, 0x9A, 0x00, 0x00, 0x00, 0x98, 0x00, 0xA0, 0x00, 0x80, 0x03, 0x74,
0x02, 0xBF, 0x02, 0x82, 0x00, 0x80, 0x03, 0x76, 0x02, 0xBF, 0x02, 0x82, 0x02, 0xDF, 0x00, 0xDA,
0x03, 0x74, 0x86, 0x00, 0x02, 0xD5, 0x00, 0x9F, 0x0B, 0xE0, 0x00, 0xFF, 0x03, 0xA1, 0x00, 0xDF,
0x03, 0xCA, 0x00, 0xFF, 0x03, 0x92, 0x00, 0xDF, 0x03, 0xCB, 0x00, 0xFF, 0x03, 0x93, 0x00, 0x9F,
0x03, 0xA6, 0x00, 0xFF, 0x03, 0xA0, 0x00, 0xDF, 0x03, 0xC9, 0x00, 0xFF, 0x03, 0x91, 0x02, 0xBF,
0x02, 0x1A, 0x00, 0x9F, 0x0C, 0x40, 0x00, 0xFF, 0x03, 0xA1, 0x00, 0xDF, 0x03, 0xDA, 0x00, 0xFF,
0x03, 0x92, 0x00, 0xDF, 0x03, 0xDB, 0x00, 0xFF, 0x03, 0x93, 0x00, 0x9F, 0x03, 0xA7, 0x00, 0xFF,
0x03, 0xA0, 0x00, 0xDF, 0x03, 0xD9, 0x00, 0xFF, 0x03, 0x91, 0x02, 0xBF, 0x02, 0x1A, 0x02, 0xDF,
0x00, 0xDA, 0x03, 0x74, 0x86, 0x00, 0x02, 0xD5, 0x00, 0xDA, 0x03, 0xD8, 0x86, 0x00, 0x02, 0xD5,
0x00, 0x83, 0x0B, 0xE0, 0x00, 0x80, 0x0C, 0x30, 0x0F, 0x04, 0x02, 0xBF, 0x00, 0xE1, 0x00, 0x83,
0x0C, 0x40, 0x00, 0x80, 0x0C, 0x90, 0x0F, 0x04, 0x02, 0xBF, 0x00, 0xE1, 0x00, 0xDF, 0x03, 0xCA,
0x00, 0xFF, 0x03, 0x92, 0x00, 0xDF, 0x03, 0xCB, 0x00, 0xFF, 0x03, 0x93, 0x00, 0xDF, 0x03, 0xA6,
0x75, 0x00, 0x1F, 0x5F, 0x00, 0x9F, 0x0B, 0xE8, 0x02, 0xBF, 0x01, 0x61, 0x00, 0xDF, 0x03, 0xDA,
0x00, 0xFF, 0x03, 0x92, 0x00, 0xDF, 0x03, 0xDB, 0x00, 0xFF, 0x03, 0x93, 0x00, 0xDF, 0x03, 0xA7,
0x75, 0x00, 0x1F, 0x5F, 0x00, 0x9F, 0x0C, 0x48, 0x02, 0xBF, 0x01, 0x61, 0x00, 0xDE, 0x03, 0xC8,
0x02, 0xA0, 0x00, 0x01, 0x02, 0x9D, 0x05, 0x23, 0x00, 0x80, 0x03, 0xD0, 0x0E, 0x08, 0x00, 0x81,
0x0B, 0xE0, 0x02, 0xBF, 0x0C, 0x1B, 0x00, 0xDE, 0x03, 0xD8, 0x02, 0xA0, 0x00, 0x01, 0x02, 0x9D,
0x05, 0x30, 0x00, 0x80, 0x03, 0xE0, 0x0E, 0x08, 0x00, 0x81, 0x0C, 0x40, 0x02, 0xBF, 0x0C, 0x1B,
0x0F, 0x50, 0x00, 0x80, 0x0B, 0xE0, 0x00, 0x83, 0x0F, 0x40, 0x00, 0xD8, 0x03, 0xCD, 0x02, 0xBF,
0x00, 0xF4, 0x0F, 0x50, 0x00, 0x80, 0x0C, 0x40, 0x00, 0x83, 0x0C, 0xA0, 0x00, 0xD8, 0x03, 0xDF,
0x02, 0xBF, 0x00, 0xF4, 0x00, 0xDE, 0x03, 0xC8, 0x02, 0xA0, 0x00, 0x02, 0x02, 0x9D, 0x05, 0x4F,
0x00, 0x80, 0x03, 0xD0, 0x0E, 0x08, 0x00, 0x81, 0x0B, 0xE0, 0x02, 0xBF, 0x0C, 0x1B, 0x00, 0xDE,
0x03, 0xD8, 0x02, 0xA0, 0x00, 0x02, 0x02, 0x9D, 0x05, 0x5C, 0x00, 0x80, 0x03, 0xE0, 0x0E, 0x08,
0x00, 0x81, 0x0C, 0x40, 0x02, 0xBF, 0x0C, 0x1B, 0x02, 0xDF, 0x00, 0x80, 0x03, 0x46, 0x02, 0xBF,
0x00, 0x67, 0x02, 0xBF, 0x00, 0x67, 0x00, 0x81, 0x03, 0x46, 0x19, 0x3E, 0x19, 0x3C, 0x00, 0x9F,
0x04, 0x00, 0x00, 0xC0, 0x03, 0x45, 0x02, 0xBF, 0x06, 0x12, 0x00, 0x81, 0x03, 0x48, 0x19, 0x3E,
0x19, 0x3C, 0x00, 0x9F, 0x08, 0x00, 0x00, 0xC0, 0x03, 0x45, 0x02, 0xBF, 0x06, 0x12, 0x00, 0x81,
0x03, 0x46, 0x19, 0x3E, 0x19, 0x3C, 0x00, 0x9F, 0x08, 0x00, 0x00, 0xC0, 0x03, 0x45, 0x02, 0xBF,
0x06, 0x1F, 0x00, 0x81, 0x03, 0x48, 0x19, 0x3E, 0x19, 0x3C, 0x00, 0x9F, 0x04, 0x00, 0x00, 0xC0,
0x03, 0x45, 0x02, 0xBF, 0x06, 0x1F, 0x02, 0x9F, 0x00, 0x43, 0x00, 0x80, 0x03, 0x46, 0x02, 0xBF,
0x00, 0x67, 0x02, 0xBF, 0x00, 0x67, 0x00, 0x81, 0x03, 0x46, 0x19, 0x3E, 0x19, 0x3C, 0x00, 0x9F,
0x04, 0x00, 0x00, 0xC0, 0x03, 0x45, 0x02, 0xBF, 0x06, 0x12, 0x00, 0x81, 0x03, 0x48, 0x19, 0x3E,
0x19, 0x3C, 0x00, 0x9F, 0x04, 0x00, 0x00, 0xC0, 0x03, 0x45, 0x02, 0xBF, 0x06, 0x1F, 0x02, 0x9F,
0x00, 0x43, 0x00, 0x80, 0x03, 0x46, 0x02, 0xBF, 0x00, 0x67, 0x02, 0xBF, 0x00, 0x67, 0x00, 0x81,
0x03, 0x46, 0x19, 0x3E, 0x19, 0x3C, 0x00, 0x9F, 0x04, 0x00, 0x00, 0xC0, 0x03, 0x45, 0x02, 0xBF,
0x06, 0x42, 0x00, 0x81, 0x03, 0x48, 0x19, 0x3E, 0x19, 0x3C, 0x00, 0x9F, 0x04, 0x00, 0x00, 0xC0,
0x03, 0x45, 0x02, 0xBF, 0x06, 0x1F, 0x02, 0x9F, 0x00, 0x43, 0x00, 0x80, 0x03, 0x46, 0x02, 0xBF,
0x00, 0x67, 0x02, 0xBF, 0x00, 0x67, 0x00, 0x81, 0x03, 0x46, 0x19, 0x3E, 0x19, 0x3C, 0x00, 0x9F,
0x04, 0x00, 0x00, 0xC0, 0x03, 0x44, 0x02, 0xBF, 0x06, 0x12, 0x00, 0x81, 0x03, 0x48, 0x19, 0x3E,
0x19, 0x3C, 0x00, 0x9F, 0x08, 0x00, 0x00, 0xC0, 0x03, 0x44, 0x02, 0xBF, 0x06, 0x12, 0x00, 0x80,
0x04, 0x00, 0x00, 0x83, 0x08, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0xDA, 0x03, 0x45, 0x00, 0xDF,
0x03, 0x44, 0x8F, 0x00, 0x19, 0x7B, 0xB8, 0x00, 0x19, 0x7B, 0x00, 0x7F, 0x05, 0xF2, 0x19, 0x9E,
0xBC, 0x00, 0x80, 0xB2, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x81, 0x03, 0x46, 0x19, 0x3E, 0x19, 0x3C,
0x00, 0x9F, 0x04, 0x00, 0x00, 0xC0, 0x03, 0x44, 0x02, 0xBF, 0x06, 0x1F, 0x02, 0x9F, 0x00, 0x43,
0x00, 0x92, 0x00, 0xFF, 0x81, 0x00, 0x00, 0x80, 0x0B, 0x00, 0x10, 0xFF, 0x1B, 0x1E, 0x1B, 0x1E,
0x81, 0x00, 0x00, 0x9F, 0x0B, 0x00, 0x00, 0x80, 0x01, 0x00, 0x02, 0xBF, 0x06, 0x60, 0x02, 0xDF,
0x19, 0x3E, 0x19, 0x3C, 0x2F, 0xCD, 0x0F, 0x00, 0x2F, 0xC9, 0x2E, 0xCE, 0x2C, 0xCF, 0x1F, 0xE0,
0x15, 0x01, 0x2F, 0xCB, 0x02, 0xBF, 0x06, 0x23, 0x02, 0xDF, 0x19, 0x3E, 0x19, 0x3C, 0x2F, 0xCD,
0x0F, 0x01, 0x02, 0x9F, 0x06, 0x14, 0x26, 0xC9, 0x02, 0xA0, 0x00, 0x04, 0x02, 0x9C, 0x06, 0x23,
0x02, 0xDF, 0x19, 0x3E, 0x19, 0x3C, 0x00, 0xFF, 0xFF, 0xCD, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0xC9,
0x00, 0xFE, 0xFF, 0xCE, 0x00, 0xFC, 0xFF, 0xCF, 0x1F, 0xE0, 0x15, 0x01, 0x00, 0xFF, 0xFF, 0xCB,
0x02, 0xDF, 0x00, 0xDE, 0xFF, 0xC9, 0x02, 0xA0, 0x00, 0x04, 0x02, 0x9C, 0x06, 0x39, 0x02, 0xDF,
0x19, 0x3E, 0x19, 0x3C, 0x02, 0x40, 0x7F, 0xFF, 0x02, 0xBF, 0x06, 0x4E, 0x00, 0x7A, 0x06, 0x4C,
0x26, 0xD3, 0x1B, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xDF, 0x1C, 0x3F, 0x0F, 0x0A,
0x2F, 0xD1, 0x1F, 0x5E, 0x1F, 0x1C, 0x00, 0x9E, 0xFF, 0xFF, 0x2E, 0xD6, 0x2E, 0xD7, 0x1F, 0xDA,
0x1F, 0x98, 0x14, 0x7F, 0x2E, 0xD8, 0x2C, 0xD9, 0x1F, 0x40, 0x02, 0xDF, 0x19, 0x3E, 0x19, 0x3C,
0x00, 0x90, 0x00, 0x01, 0x02, 0xBF, 0x06, 0x4E, 0x00, 0x7A, 0x06, 0x6B, 0x19, 0x3E, 0x2E, 0xD3,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xDF, 0x00, 0x80, 0x03, 0x46, 0x02, 0xBF,
0x00, 0x67, 0x02, 0xBF, 0x00, 0x67, 0x00, 0x81, 0x03, 0x46, 0x00, 0xDF, 0x03, 0x49, 0x03, 0x40,
0xFF, 0xFF, 0x00, 0xC0, 0x03, 0x45, 0x02, 0xBF, 0x06, 0x10, 0x02, 0x9F, 0x00, 0x43, 0x00, 0x80,
0x03, 0x46, 0x02, 0xBF, 0x00, 0x67, 0x02, 0xBF, 0x00, 0x67, 0x00, 0x81, 0x03, 0x46, 0x00, 0xDF,
0x03, 0x49, 0x03, 0x40, 0xFF, 0xFF, 0x00, 0xC0, 0x03, 0x45, 0x02, 0xBF, 0x06, 0x1D, 0x02, 0x9F,
0x00, 0x43, 0x00, 0x92, 0x00, 0xFF, 0x00, 0x9E, 0xFF, 0xFF, 0x2E, 0xD4, 0x2E, 0xD5, 0x2E, 0xD6,
0x2E, 0xD7, 0x02, 0xDF, 0x00, 0xFF, 0xFF, 0xD1, 0x03, 0x40, 0x00, 0x03, 0x79, 0x00, 0x02, 0xCA,
0x00, 0xFE, 0xFF, 0xD8, 0x00, 0xFC, 0xFF, 0xD9, 0x02, 0xDF, 0x12, 0x05, 0x8E, 0x00, 0x00, 0xF0,
0x03, 0xFD, 0x00, 0xFC, 0x03, 0xFF, 0xF4, 0x00, 0x00, 0xFC, 0x03, 0xFE, 0x00, 0xFA, 0x03, 0xFA,
0x81, 0x00, 0x00, 0xDE, 0xFF, 0xFE, 0x02, 0xC0, 0x80, 0x00, 0x02, 0x9C, 0x07, 0xA6, 0x00, 0xDA,
0xFF, 0xFF, 0x86, 0x00, 0x02, 0x94, 0x07, 0x7F, 0x00, 0xDE, 0xFF, 0xFE, 0x02, 0xC0, 0x80, 0x00,
0x02, 0x9C, 0x06, 0xBC, 0x02, 0x40, 0x00, 0x0F, 0x1F, 0x5E, 0x74, 0x00, 0x0C, 0x00, 0x14, 0x04,
0x00, 0xFE, 0x03, 0x4E, 0x1F, 0xDA, 0x1F, 0x40, 0x02, 0x00, 0x04, 0xFC, 0x1C, 0x1E, 0x00, 0xDE,
0xFF, 0xFF, 0x1A, 0x1E, 0x1C, 0x1A, 0x00, 0xDE, 0x03, 0xFE, 0x00, 0xDC, 0x03, 0xFF, 0x00, 0xD0,
0x03, 0xFD, 0x00, 0xDA, 0x03, 0xFA, 0x13, 0x05, 0x02, 0xFF, 0x00, 0x9A, 0x00, 0x02, 0x00, 0xFA,
0x03, 0xA3, 0x00, 0xE0, 0x03, 0xF9, 0x02, 0xBF, 0x07, 0x69, 0x16, 0xFC, 0xDC, 0xD1, 0x16, 0xFD,
0x00, 0x02, 0x16, 0xFB, 0x00, 0x01, 0x00, 0x21, 0x07, 0x04, 0x07, 0x05, 0x07, 0x45, 0x07, 0x48,
0x00, 0xE0, 0x03, 0xF9, 0x00, 0x9E, 0x00, 0x05, 0x02, 0xBF, 0x07, 0x57, 0x8E, 0x00, 0x81, 0x00,
0x89, 0x00, 0x02, 0xBF, 0x07, 0x4B, 0x27, 0xFF, 0x00, 0x9E, 0x06, 0xEC, 0x4C, 0x00, 0x1C, 0x7E,
0x03, 0x13, 0x1C, 0x7F, 0x17, 0x6F, 0x00, 0x21, 0x00, 0x21, 0x00, 0x9A, 0x00, 0x02, 0x00, 0xFA,
0x03, 0xA3, 0x81, 0x00, 0x89, 0x00, 0x02, 0xBF, 0x07, 0x4B, 0x24, 0xFF, 0x02, 0xBF, 0x07, 0x51,
0x25, 0xFF, 0x02, 0xBF, 0x07, 0x51, 0x27, 0xFF, 0x2E, 0xCE, 0x2C, 0xCF, 0x16, 0xC9, 0x00, 0x01,
0x2F, 0xCD, 0x2D, 0xCB, 0x81, 0x00, 0x89, 0x00, 0x02, 0xBF, 0x07, 0x4B, 0x24, 0xFF, 0x1C, 0x9E,
0x1C, 0xBC, 0x02, 0xBF, 0x07, 0x51, 0x25, 0xFF, 0x02, 0xBF, 0x07, 0x51, 0x27, 0xFF, 0x1C, 0xDF,
0x1C, 0xFD, 0x81, 0x00, 0x02, 0xBF, 0x07, 0x4B, 0x26, 0xFF, 0x1C, 0x1E, 0x89, 0x00, 0x02, 0xBF,
0x07, 0x51, 0x20, 0xFF, 0x1F, 0x5F, 0x02, 0xBF, 0x07, 0x4B, 0x21, 0xFF, 0x02, 0xBF, 0x07, 0x4B,
0x23, 0xFF, 0x26, 0xC9, 0x02, 0xA0, 0x00, 0x04, 0x02, 0x9C, 0x07, 0x39, 0x12, 0x06, 0x12, 0x03,
0x12, 0x04, 0x12, 0x05, 0x02, 0x9F, 0x80, 0xB5, 0x00, 0x21, 0x02, 0x9F, 0x80, 0x00, 0x00, 0x21,
0x00, 0xC0, 0x03, 0xF9, 0x17, 0x0F, 0x26, 0xFE, 0x02, 0xC0, 0x80, 0x00, 0x02, 0x9C, 0x07, 0x4B,
0x02, 0xDF, 0x27, 0xFE, 0x03, 0xC0, 0x80, 0x00, 0x02, 0x9C, 0x07, 0x51, 0x02, 0xDF, 0x02, 0xBF,
0x07, 0x6F, 0x16, 0xFC, 0xDC, 0xD1, 0x2E, 0xFD, 0x16, 0xFB, 0x00, 0x01, 0x02, 0xBF, 0x07, 0x6F,
0x02, 0xDF, 0x02, 0xBF, 0x07, 0x6F, 0x16, 0xFC, 0xF3, 0x55, 0x2E, 0xFD, 0x02, 0xBF, 0x07, 0x6F,
0x02, 0xDF, 0x26, 0xFC, 0x02, 0xC0, 0x80, 0x00, 0x02, 0x9D, 0x07, 0x69, 0x02, 0xDF, 0x27, 0xFC,
0x03, 0xC0, 0x80, 0x00, 0x02, 0x9D, 0x07, 0x6F, 0x02, 0xDF, 0x00, 0x9A, 0x02, 0x80, 0x00, 0xFA,
0x03, 0x50, 0x00, 0xFA, 0x03, 0x51, 0x0A, 0x00, 0x00, 0xFA, 0x03, 0x52, 0x02, 0xDF, 0x00, 0xE0,
0x03, 0xFB, 0x00, 0xE8, 0x03, 0xFC, 0x00, 0xC0, 0x03, 0x50, 0x00, 0x88, 0x00, 0x2F, 0x1B, 0x1A,
0x00, 0xDE, 0xFF, 0xFE, 0x02, 0xC0, 0x80, 0x00, 0x02, 0x9C, 0x07, 0x88, 0x00, 0xDC, 0xFF, 0xFF,
0x1B, 0x1E, 0x1B, 0x1C, 0x1F, 0xDA, 0x78, 0x00, 0x1F, 0x5E, 0x86, 0x00, 0x02, 0x94, 0x07, 0x88,
0x81, 0x00, 0x00, 0xDE, 0x03, 0x52, 0x74, 0x00, 0x00, 0xFE, 0x03, 0x52, 0x00, 0xE0, 0x03, 0x50,
0x00, 0xC0, 0x03, 0xFB, 0x00, 0xC8, 0x03, 0xFC, 0x02, 0x9F, 0x06, 0xD3, 0x00, 0xE0, 0x03, 0xFB,
0x00, 0xE8, 0x03, 0xFC, 0x00, 0xC0, 0x03, 0x50, 0x00, 0x88, 0x00, 0x2F, 0x0A, 0x00, 0x1B, 0x1A,
0x02, 0x9F, 0x07, 0x98, 0x00, 0xC0, 0x03, 0x51, 0x00, 0x88, 0x00, 0x2F, 0x00, 0xDA, 0x03, 0x52,
0x86, 0x00, 0x02, 0x95, 0x07, 0xDA, 0x12, 0x05, 0x00, 0xDA, 0x03, 0x52, 0x1F, 0xDA, 0x78, 0x00,
0x00, 0xFE, 0x03, 0x52, 0x13, 0x05, 0x00, 0x81, 0x03, 0x56, 0x19, 0x1E, 0x02, 0xC0, 0x80, 0x00,
0x02, 0x9D, 0x07, 0xDE, 0x1F, 0x5E, 0x86, 0x00, 0x02, 0x95, 0x07, 0xE2, 0x00, 0x7A, 0x07, 0xD3,
0x19, 0x1E, 0x1B, 0x3E, 0x19, 0x1E, 0x1B, 0x3E, 0x00, 0xE0, 0x03, 0x51, 0x00, 0x88, 0xFF, 0xFF,
0x02, 0x9F, 0x00, 0x2F, 0x00, 0x88, 0xFF, 0xFF, 0x02, 0x9F, 0x00, 0x2D, 0x00, 0xE0, 0x03, 0x51,
0x02, 0x9F, 0x07, 0xB6, 0x00, 0x80, 0x07, 0xB2, 0x02, 0x9F, 0x06, 0xDD, 0x81, 0x00, 0x0E, 0x10,
0x22, 0x32, 0x86, 0x00, 0x02, 0xD5, 0x54, 0x00, 0x02, 0x00, 0x04, 0x58, 0x1C, 0x1E, 0x1F, 0xDA,
0x04, 0xFE, 0x1F, 0x1E, 0x19, 0x1E, 0x02, 0x91, 0x07, 0xF9, 0x19, 0x1A, 0x00, 0x58, 0x64, 0xA0,
0x64, 0x33, 0x1B, 0x7E, 0x02, 0xDF, 0x02, 0xBF, 0x07, 0xE6, 0x81, 0x00, 0x26, 0x32, 0x5C, 0x00,
0x2E, 0x32, 0x00, 0x92, 0x00, 0xFF, 0x02, 0xDF, 0x00, 0xDE, 0x04, 0xFB, 0x74, 0x00, 0x00, 0xFE,
0x04, 0xFB, 0x81, 0x00, 0x2E, 0x32, 0x2E, 0x66, 0x2E, 0x67, 0x26, 0x8A, 0x24, 0x8B, 0x2E, 0x3A,
0x2C, 0x3B, 0x26, 0x8C, 0x24, 0x8D, 0x2E, 0x38, 0x2C, 0x39, 0x02, 0xDF, 0x81, 0x00, 0x26, 0x89,
0x02, 0x40, 0x00, 0x0F, 0x1F, 0x5E, 0x81, 0x00, 0x0E, 0x10, 0x54, 0x00, 0x2E, 0x32, 0x26, 0x8A,
0x24, 0x8B, 0x22, 0x88, 0x20, 0x89, 0x58, 0x00, 0x0A, 0x00, 0x20, 0x32, 0x58, 0x00, 0x2E, 0x3A,
0x2C, 0x3B, 0x02, 0xDF, 0x00, 0x92, 0x00, 0x04, 0x81, 0x00, 0x26, 0x04, 0xB1, 0x00, 0x02, 0xB4,
0x08, 0x04, 0x81, 0x00, 0x26, 0x01, 0xB1, 0x00, 0x02, 0x94, 0x08, 0xD2, 0x22, 0x32, 0xC9, 0x00,
0x02, 0x93, 0x07, 0xFB, 0x55, 0x00, 0x02, 0xBF, 0x07, 0xE6, 0x22, 0x3A, 0x86, 0x00, 0x02, 0x94,
0x08, 0x46, 0x81, 0x00, 0x26, 0x3B, 0x82, 0x00, 0x02, 0x91, 0x08, 0x98, 0x81, 0x00, 0x1F, 0xDF,
0x04, 0x0F, 0x14, 0x7C, 0x1F, 0x7E, 0x0C, 0x00, 0x14, 0x04, 0x1F, 0x1E, 0x0A, 0x00, 0x81, 0x00,
0x26, 0x3A, 0x24, 0x3B, 0x58, 0x00, 0x02, 0x90, 0x08, 0x5E, 0x81, 0x00, 0x26, 0x3B, 0x5C, 0x00,
0x2E, 0x32, 0x81, 0x00, 0x2E, 0x3A, 0x2E, 0x3B, 0x02, 0x9F, 0x08, 0x64, 0x2E, 0x3A, 0x2C, 0x3B,
0x0C, 0x00, 0x1F, 0xD8, 0x5C, 0x00, 0x2E, 0x32, 0x81, 0x00, 0x1F, 0xDB, 0x02, 0xBF, 0x08, 0xD8,
0x22, 0x32, 0x86, 0x00, 0x02, 0x95, 0x08, 0x95, 0x0A, 0x10, 0x81, 0x00, 0x1F, 0xC3, 0x54, 0x00,
0x1C, 0x7E, 0x00, 0x80, 0x04, 0x58, 0x19, 0x7E, 0x19, 0x7A, 0x10, 0x0E, 0x64, 0xA2, 0x1B, 0x1E,
0x1B, 0x1A, 0x81, 0x00, 0x26, 0x3A, 0x24, 0x3B, 0xB1, 0x00, 0x02, 0x94, 0x08, 0x95, 0x22, 0x32,
0x86, 0x00, 0x02, 0x95, 0x08, 0x95, 0x00, 0x80, 0x04, 0x67, 0x81, 0x00, 0x26, 0x8B, 0xB1, 0x00,
0x02, 0x95, 0x08, 0x95, 0x02, 0x00, 0x00, 0x0F, 0x02, 0x40, 0x00, 0x0F, 0x02, 0x00, 0x04, 0x58,
0x1C, 0x7E, 0x00, 0x7A, 0x08, 0x94, 0x18, 0xFE, 0x1A, 0x9E, 0x00, 0x92, 0x00, 0xFF, 0x02, 0xDF,
0xB1, 0x00, 0x02, 0x95, 0x08, 0xA8, 0x5D, 0x00, 0x04, 0x0F, 0x14, 0x7C, 0x0C, 0x00, 0x00, 0xE3,
0x03, 0x63, 0x02, 0xBF, 0x08, 0xD8, 0x00, 0xDE, 0x03, 0x63, 0x22, 0x3B, 0x44, 0x00, 0x1C, 0x7E,
0x81, 0x00, 0x26, 0x81, 0xB1, 0x00, 0x02, 0x95, 0x08, 0xD0, 0x23, 0x80, 0x26, 0x88, 0x24, 0x89,
0x14, 0x08, 0x14, 0xF4, 0x23, 0x80, 0x8D, 0x00, 0xC8, 0x10, 0xAE, 0x00, 0x8C, 0x00, 0xF0, 0x00,
0x4E, 0x00, 0x23, 0x8C, 0x21, 0x8D, 0x4A, 0x00, 0x2E, 0x38, 0x2C, 0x39, 0x26, 0x82, 0x2E, 0x67,
0x26, 0x83, 0x2E, 0x66, 0x00, 0xE3, 0x03, 0x63, 0x00, 0x83, 0x04, 0x58, 0x81, 0x00, 0x0E, 0x01,
0x02, 0xBF, 0x08, 0xD8, 0x00, 0xC3, 0x03, 0x63, 0x02, 0xBF, 0x08, 0x16, 0x02, 0x9F, 0x08, 0x36,
0x0E, 0x01, 0x2E, 0x01, 0x81, 0x00, 0x00, 0x5F, 0x1B, 0x7E, 0x00, 0x92, 0x00, 0xFF, 0x02, 0xDF,
0x00, 0xFF, 0x03, 0x60, 0x00, 0xFE, 0x03, 0x61, 0x26, 0x38, 0x24, 0x39, 0x0F, 0x05, 0x02, 0xBF,
0x06, 0x9A, 0x26, 0x38, 0x24, 0x39, 0x89, 0x00, 0x00, 0xDF, 0x03, 0x61, 0x22, 0x80, 0xD0, 0x00,
0x6F, 0x00, 0x4C, 0x00, 0x2E, 0x38, 0x2C, 0x39, 0x81, 0x00, 0x00, 0xDE, 0x03, 0x61, 0x00, 0x7E,
0x09, 0x58, 0x00, 0x80, 0xFF, 0xD3, 0x00, 0x84, 0x00, 0x00, 0x19, 0x9E, 0x89, 0x00, 0x1F, 0xFE,
0x14, 0x01, 0x02, 0x40, 0x00, 0x1E, 0x02, 0x00, 0x03, 0x00, 0x1C, 0x3E, 0x15, 0x7C, 0x03, 0x40,
0x00, 0x0F, 0x0A, 0x11, 0x55, 0x00, 0x81, 0x00, 0x26, 0x80, 0x06, 0x05, 0x02, 0x95, 0x09, 0x1F,
0x00, 0x9A, 0x00, 0xF0, 0x0B, 0x0F, 0x00, 0x82, 0x03, 0x64, 0x19, 0x98, 0x60, 0x00, 0x11, 0x07,
0x09, 0x16, 0x34, 0x00, 0x14, 0x08, 0x60, 0x32, 0x36, 0x44, 0x14, 0x0C, 0x60, 0x32, 0x34, 0x00,
0x14, 0x08, 0x60, 0x32, 0x36, 0x00, 0x14, 0x0C, 0x1B, 0x5E, 0x02, 0x9F, 0x09, 0x3F, 0x00, 0x9A,
0xC0, 0x00, 0x00, 0x82, 0x03, 0x64, 0x19, 0x98, 0x60, 0x00, 0x11, 0x03, 0x09, 0x32, 0x14, 0x08,
0x34, 0x00, 0x60, 0x32, 0x14, 0x0A, 0x34, 0x00, 0x60, 0x32, 0x14, 0x0C, 0x34, 0x00, 0x60, 0x32,
0x14, 0x0E, 0x34, 0x44, 0x60, 0x32, 0x14, 0x08, 0x34, 0x00, 0x60, 0x32, 0x14, 0x0A, 0x34, 0x00,
0x60, 0x32, 0x14, 0x0C, 0x34, 0x00, 0x60, 0x32, 0x14, 0x0E, 0x34, 0x00, 0x1B, 0x5E, 0x8F, 0x00,
0x1F, 0x7F, 0x20, 0x66, 0x27, 0x67, 0x19, 0x3A, 0x19, 0x39, 0x00, 0x80, 0x03, 0x64, 0x1C, 0x80,
0xA0, 0x00, 0xEA, 0x70, 0x11, 0x08, 0x09, 0x53, 0x3A, 0x93, 0xA4, 0x78, 0x14, 0x85, 0xE8, 0x33,
0x3B, 0x92, 0xA5, 0x70, 0x15, 0x85, 0xEA, 0x3B, 0x2F, 0x67, 0x8E, 0x00, 0x1F, 0xF8, 0x2F, 0x66,
0x89, 0x00, 0x00, 0xDF, 0x03, 0x60, 0x02, 0xDF, 0xB1, 0x00, 0x02, 0xD5, 0x04, 0xFE, 0x1F, 0x1E,
0x19, 0x1E, 0x02, 0x91, 0x09, 0x67, 0x19, 0x1A, 0x00, 0x58, 0x64, 0xA0, 0x64, 0x33, 0x1B, 0x7E,
0x02, 0xDF, 0x81, 0x00, 0x1F, 0x5E, 0x00, 0xD8, 0x04, 0x02, 0x00, 0xDC, 0x04, 0x30, 0x00, 0x80,
0x05, 0x20, 0x00, 0xDF, 0x04, 0x80, 0x15, 0x01, 0x03, 0x40, 0x00, 0x7E, 0x03, 0x00, 0x09, 0x7E,
0x1C, 0x5F, 0x17, 0x5F, 0x00, 0xFC, 0x04, 0x30, 0x02, 0x9F, 0x03, 0x2B, 0x02, 0x9F, 0x09, 0x9F,
0x02, 0x9F, 0x09, 0xDA, 0x02, 0x9F, 0x09, 0xC2, 0x02, 0x9F, 0x09, 0xAF, 0x02, 0x9F, 0x09, 0xE8,
0x02, 0x9F, 0x09, 0x9E, 0x02, 0x9F, 0x0A, 0x06, 0x02, 0x9F, 0x0A, 0x09, 0x02, 0x9F, 0x09, 0x9E,
0x02, 0x9F, 0x09, 0x9E, 0x02, 0x9F, 0x0A, 0x27, 0x02, 0x9F, 0x09, 0xE0, 0x02, 0x9F, 0x09, 0xE4,
0x02, 0x9F, 0x09, 0x9E, 0x02, 0x9F, 0x09, 0x9E, 0x02, 0x9F, 0x09, 0x9E, 0x02, 0xDF, 0x14, 0x01,
0x00, 0x9B, 0xC0, 0x00, 0x00, 0x99, 0x40, 0x00, 0x11, 0x50, 0x09, 0xAC, 0x02, 0xC0, 0x00, 0x01,
0x02, 0x7C, 0x1B, 0x1B, 0x02, 0x7D, 0x1B, 0x19, 0x48, 0x00, 0x14, 0x7F, 0x02, 0xDF, 0x14, 0x02,
0x89, 0x00, 0x1F, 0xB8, 0x15, 0x01, 0x00, 0x9B, 0xC0, 0x00, 0x00, 0x99, 0x40, 0x00, 0x11, 0x50,
0x09, 0xBF, 0x02, 0xC0, 0x00, 0x03, 0x02, 0x7C, 0x1B, 0x1B, 0x02, 0x7D, 0x1B, 0x19, 0x4C, 0x00,
0x14, 0x7E, 0x02, 0xDF, 0x14, 0x01, 0x00, 0x81, 0x0C, 0xA0, 0x00, 0x9B, 0xC0, 0x00, 0x00, 0x99,
0x40, 0x00, 0x89, 0x00, 0x00, 0x82, 0x00, 0x00, 0x11, 0x50, 0x09, 0xD7, 0x02, 0xC0, 0x00, 0x01,
0x02, 0x7C, 0x1B, 0x1B, 0x02, 0x7D, 0x1B, 0x19, 0x18, 0x3D, 0x49, 0x00, 0x1F, 0xE2, 0x4C, 0x39,
0x14, 0x7F, 0x02, 0xDF, 0x89, 0x00, 0x1F, 0xB8, 0x15, 0x7F, 0x10, 0x50, 0x4C, 0x20, 0x02, 0xDF,
0x00, 0x82, 0x01, 0x80, 0x02, 0x9F, 0x09, 0xEA, 0x00, 0x82, 0x01, 0xC0, 0x02, 0x9F, 0x09, 0xEA,
0x00, 0x82, 0x01, 0x40, 0x00, 0x8A, 0x00, 0x3F, 0x00, 0x86, 0x00, 0x00, 0x14, 0x06, 0x89, 0x00,
0x1F, 0xB8, 0x15, 0x05, 0x00, 0x9B, 0x00, 0x3F, 0x00, 0x9A, 0x00, 0x00, 0x36, 0x00, 0x1C, 0xDE,
0x00, 0x1A, 0x34, 0x00, 0x11, 0x50, 0x0A, 0x00, 0x4C, 0x4A, 0x36, 0x06, 0x1C, 0xDE, 0x34, 0x0E,
0x1B, 0x19, 0x1F, 0xC2, 0x14, 0x7A, 0x00, 0x8A, 0xFF, 0xFF, 0x02, 0xDF, 0x10, 0x50, 0x1B, 0x18,
0x02, 0xDF, 0x00, 0x82, 0x01, 0x00, 0x00, 0x8A, 0x00, 0x3F, 0x00, 0x86, 0x00, 0x00, 0x14, 0x06,
0x89, 0x00, 0x1F, 0xB8, 0x15, 0x05, 0x00, 0x9B, 0x00, 0x3F, 0x00, 0x9A, 0x00, 0x00, 0x36, 0x00,
0x1C, 0xDE, 0x00, 0x1A, 0x34, 0x00, 0x11, 0x50, 0x0A, 0x21, 0x4C, 0x4A, 0x36, 0x06, 0x1C, 0xDE,
0x34, 0x0E, 0x1B, 0x19, 0x1F, 0xC2, 0x14, 0x7A, 0x00, 0x8A, 0xFF, 0xFF, 0x02, 0xDF, 0x00, 0x82,
0x01, 0x00, 0x00, 0x8A, 0x00, 0x3F, 0x00, 0x86, 0x00, 0x00, 0x00, 0x81, 0x0C, 0xA0, 0x14, 0x06,
0x89, 0x00, 0x1F, 0xB8, 0x15, 0x05, 0x00, 0x9B, 0x00, 0x3F, 0x00, 0x9A, 0x00, 0x00, 0x36, 0x00,
0x1C, 0xDE, 0x00, 0x1A, 0x34, 0x00, 0x11, 0x50, 0x0A, 0x46, 0x19, 0x39, 0xA0, 0x00, 0x14, 0x0A,
0x4E, 0x00, 0x14, 0x76, 0x4C, 0x4A, 0x36, 0x06, 0x1C, 0xDE, 0x34, 0x0E, 0x1B, 0x19, 0x1F, 0xC2,
0x14, 0x7A, 0x00, 0x8A, 0xFF, 0xFF, 0x02, 0xDF, 0x00, 0x80, 0x01, 0xBE, 0x19, 0x18, 0x19, 0x1A,
0x00, 0x80, 0x01, 0x80, 0x00, 0x83, 0x01, 0x80, 0x90, 0x70, 0x1F, 0xFE, 0x11, 0x20, 0x0A, 0x5D,
0x7C, 0x00, 0xD4, 0x50, 0x65, 0x33, 0xC5, 0x50, 0x15, 0x01, 0x64, 0x3B, 0x00, 0x80, 0x01, 0xFE,
0x19, 0x1A, 0x19, 0x18, 0x00, 0x80, 0x01, 0xC0, 0x00, 0x83, 0x01, 0xC0, 0x1F, 0xF8, 0x90, 0x70,
0xF8, 0x00, 0x02, 0x40, 0x01, 0xFF, 0x02, 0x60, 0x20, 0x00, 0x02, 0xBF, 0x0A, 0x70, 0x02, 0xDF,
0xB9, 0x00, 0x02, 0x72, 0x7C, 0x00, 0x1F, 0x7E, 0x47, 0x00, 0x11, 0x10, 0x0A, 0x7A, 0x47, 0x3B,
0x47, 0x3B, 0x47, 0x3B, 0x47, 0x3B, 0x02, 0xDF, 0x00, 0x92, 0x00, 0x04, 0x20, 0x02, 0x81, 0x00,
0x89, 0x00, 0x24, 0x30, 0x8D, 0x00, 0x09, 0x50, 0xA0, 0x00, 0xA4, 0x00, 0x14, 0x04, 0x8C, 0x00,
0x1F, 0xFE, 0x00, 0x83, 0x05, 0x80, 0x22, 0x01, 0x86, 0x00, 0x02, 0x94, 0x0A, 0x9E, 0x22, 0x04,
0x86, 0x00, 0x02, 0xB4, 0x0A, 0xE6, 0x81, 0x00, 0x26, 0x05, 0xB1, 0x00, 0x02, 0x95, 0x0A, 0xAB,
0x81, 0x00, 0x2E, 0x05, 0x22, 0x81, 0x86, 0x00, 0x02, 0x94, 0x0A, 0xA5, 0x81, 0x00, 0x00, 0x5F,
0x1B, 0x7E, 0x74, 0x00, 0x2E, 0x01, 0x02, 0x9F, 0x0A, 0xDF, 0x26, 0x88, 0x24, 0x89, 0x2E, 0x34,
0x2C, 0x35, 0x02, 0xBF, 0x0A, 0xE6, 0x00, 0xFF, 0x03, 0x60, 0x26, 0x38, 0x24, 0x39, 0x0F, 0x05,
0x02, 0xBF, 0x06, 0x9A, 0x00, 0xDF, 0x03, 0x60, 0x81, 0x00, 0x26, 0x3A, 0xB1, 0x00, 0x02, 0x94,
0x0A, 0xC6, 0x26, 0x3B, 0x5C, 0x00, 0x02, 0x90, 0x0A, 0xC6, 0x22, 0x3B, 0x02, 0xBF, 0x0A, 0xF7,
0x55, 0x00, 0x0A, 0x01, 0x00, 0xFA, 0x04, 0x05, 0x02, 0x9F, 0x0A, 0x98, 0x1F, 0x5F, 0x02, 0xBF,
0x0A, 0xF7, 0x00, 0xFA, 0x03, 0x62, 0x81, 0x00, 0x26, 0x3A, 0x24, 0x3B, 0x15, 0x70, 0x0A, 0x01,
0x00, 0x81, 0x04, 0x05, 0x5C, 0x00, 0xB1, 0x00, 0x02, 0x75, 0x1A, 0x3A, 0x2E, 0x3A, 0x2C, 0x3B,
0x26, 0x38, 0x24, 0x39, 0x00, 0xD8, 0x03, 0x62, 0x70, 0x00, 0x2C, 0x39, 0x2E, 0x38, 0x00, 0x92,
0x00, 0xFF, 0x02, 0x9F, 0x03, 0x23, 0x81, 0x00, 0x2E, 0x34, 0x2E, 0x35, 0x23, 0x34, 0x21, 0x35,
0x26, 0x8A, 0x24, 0x8B, 0x5A, 0x00, 0x2E, 0x3A, 0x2C, 0x3B, 0x26, 0x34, 0x24, 0x35, 0x23, 0x8C,
0x21, 0x8D, 0x4A, 0x00, 0x2E, 0x38, 0x2C, 0x39, 0x81, 0x00, 0x2E, 0x05, 0x02, 0xDF, 0x00, 0x80,
0xFF, 0xD3, 0x00, 0x84, 0x00, 0x00, 0x00, 0x7A, 0x0A, 0xFF, 0x19, 0x9E, 0x14, 0x88, 0x1B, 0x7E,
0x02, 0xDF, 0x00, 0x92, 0x00, 0x04, 0x20, 0x02, 0x81, 0x00, 0x89, 0x00, 0x24, 0x30, 0x8D, 0x00,
0x09, 0x50, 0xA0, 0x00, 0xA4, 0x00, 0x14, 0x04, 0x8C, 0x00, 0x1F, 0xFE, 0x00, 0x83, 0x05, 0x80,
0x22, 0x01, 0x86, 0x00, 0x02, 0x94, 0x0B, 0x23, 0x22, 0x04, 0x86, 0x00, 0x02, 0xB4, 0x0B, 0x6C,
0x81, 0x00, 0x26, 0x05, 0xB1, 0x00, 0x02, 0x95, 0x0B, 0x30, 0x81, 0x00, 0x2E, 0x05, 0x22, 0x81,
0x86, 0x00, 0x02, 0x94, 0x0B, 0x2A, 0x81, 0x00, 0x00, 0x5F, 0x1B, 0x7E, 0x74, 0x00, 0x2E, 0x01,
0x02, 0x9F, 0x0B, 0x65, 0x26, 0x88, 0x24, 0x89, 0x2E, 0x34, 0x2C, 0x35, 0x02, 0xBF, 0x0B, 0x6C,
0x00, 0xFF, 0x03, 0x60, 0x26, 0x38, 0x24, 0x39, 0x0F, 0x06, 0x02, 0xBF, 0x06, 0x9A, 0x00, 0xDF,
0x03, 0x60, 0x81, 0x00, 0x26, 0x3A, 0xB1, 0x00, 0x02, 0x94, 0x0B, 0x4B, 0x26, 0x3B, 0x5C, 0x00,
0x02, 0x90, 0x0B, 0x4B, 0x22, 0x3B, 0x02, 0xBF, 0x0B, 0x7E, 0x55, 0x00, 0x0A, 0x01, 0x00, 0xFA,
0x04, 0x05, 0x02, 0x9F, 0x0B, 0x1D, 0x1F, 0x5F, 0x02, 0xBF, 0x0B, 0x7E, 0x00, 0xFA, 0x03, 0x62,
0x81, 0x00, 0x26, 0x3A, 0x24, 0x3B, 0x15, 0x70, 0x0A, 0x01, 0x00, 0x81, 0x04, 0x05, 0x5C, 0x00,
0xB1, 0x00, 0x02, 0x75, 0x1A, 0x3A, 0x2E, 0x3A, 0x2C, 0x3B, 0x26, 0x38, 0x24, 0x39, 0x00, 0xD8,
0x03, 0x62, 0x70, 0x00, 0x70, 0x00, 0x2C, 0x39, 0x2E, 0x38, 0x00, 0x92, 0x00, 0xFF, 0x02, 0x9F,
0x03, 0x23, 0x81, 0x00, 0x2E, 0x34, 0x2E, 0x35, 0x23, 0x34, 0x21, 0x35, 0x26, 0x8A, 0x24, 0x8B,
0x5A, 0x00, 0x2E, 0x3A, 0x2C, 0x3B, 0x26, 0x34, 0x24, 0x35, 0x14, 0x01, 0x23, 0x8C, 0x21, 0x8D,
0x4A, 0x00, 0x2E, 0x38, 0x2C, 0x39, 0x81, 0x00, 0x2E, 0x05, 0x02, 0xDF, 0x00, 0x80, 0xFF, 0xD3,
0x00, 0x84, 0x00, 0x00, 0x00, 0x7A, 0x0B, 0x85, 0x19, 0x9E, 0x1B, 0x7E, 0x02, 0xDF, 0x89, 0x00,
0x0F, 0x50, 0x00, 0x83, 0x05, 0x20, 0x02, 0xBF, 0x0B, 0xA0, 0x02, 0x9F, 0x03, 0x2B, 0x00, 0xD8,
0x04, 0x02, 0x81, 0x00, 0x89, 0x00, 0x00, 0xDC, 0x04, 0x30, 0x0A, 0x50, 0x90, 0x00, 0x94, 0x00,
0x14, 0x04, 0x1F, 0xFE, 0x00, 0x83, 0x05, 0x80, 0x02, 0xBF, 0x0B, 0xA0, 0x02, 0x9F, 0x03, 0x23,
0x00, 0x92, 0x00, 0x04, 0x81, 0x00, 0x26, 0x3A, 0x24, 0x3B, 0x1F, 0x1F, 0x0A, 0x00, 0x58, 0x00,
0x02, 0x92, 0x0B, 0xBE, 0x89, 0x00, 0x00, 0xC0, 0x04, 0x3B, 0x02, 0xBF, 0x0B, 0xE3, 0x81, 0x00,
0x1F, 0xD8, 0x22, 0x3B, 0x54, 0x00, 0x00, 0x07, 0x19, 0x79, 0x00, 0x5E, 0x1B, 0x79, 0x0F, 0x01,
0x2F, 0x01, 0x89, 0x00, 0x2F, 0x3B, 0x00, 0x92, 0x00, 0xFF, 0x02, 0xDF, 0x2E, 0x3A, 0x2C, 0x3B,
0x81, 0x00, 0x89, 0x00, 0x26, 0x8A, 0x27, 0x34, 0x5C, 0x00, 0x2E, 0x36, 0x50, 0x00, 0x02, 0x90,
0x0B, 0xDD, 0x00, 0xC0, 0x04, 0x36, 0x02, 0xBF, 0x0B, 0xE3, 0x81, 0x00, 0x1F, 0xD8, 0x22, 0x36,
0x54, 0x00, 0x1C, 0x1E, 0x81, 0x00, 0x2E, 0x34, 0x26, 0x88, 0x24, 0x89, 0x2E, 0x8C, 0x2C, 0x8D,
0x02, 0xBF, 0x0B, 0xE3, 0x00, 0x92, 0x00, 0xFF, 0x02, 0xDF, 0x1C, 0x18, 0x02, 0xBF, 0x0B, 0xE3,
0x00, 0x92, 0x00, 0xFF, 0x02, 0xDF, 0x81, 0x00, 0x1F, 0xC0, 0xB1, 0x00, 0x02, 0xD5, 0x89, 0x00,
0x27, 0x34, 0x03, 0x40, 0x00, 0x01, 0x0B, 0x00, 0x1F, 0x3F, 0x26, 0x8C, 0x24, 0x8D, 0x89, 0x00,
0x25, 0x34, 0x15, 0x01, 0x4C, 0x00, 0x5A, 0x00, 0x5A, 0x00, 0x1C, 0x20, 0x1F, 0xE0, 0x05, 0x02,
0x1C, 0x1F, 0x00, 0x9F, 0x0B, 0x00, 0x00, 0x92, 0x00, 0xFF, 0x02, 0xBF, 0x06, 0x12, 0x00, 0x92,
0x00, 0x04, 0x27, 0x34, 0x1F, 0x61, 0x47, 0x00, 0x2F, 0x34, 0x00, 0x80, 0x0B, 0x00, 0x89, 0x00,
0x1F, 0xF9, 0xB9, 0x00, 0x02, 0x74, 0x00, 0x08, 0x89, 0x00, 0x1F, 0xE1, 0x19, 0x1E, 0x07, 0x01,
0x02, 0x93, 0x0C, 0x19, 0x19, 0x1A, 0x05, 0xFE, 0x00, 0x5F, 0x64, 0xA0, 0x1B, 0x7E, 0x1B, 0x7A,
0x02, 0xDF, 0x1B, 0x7E, 0x02, 0xDF, 0x00, 0x83, 0x03, 0xE8, 0x19, 0x1E, 0x19, 0x1A, 0x10, 0x06,
0x64, 0xA0, 0x1B, 0x7E, 0x1B, 0x7A, 0x00, 0x80, 0x03, 0xE8, 0x8A, 0x00, 0x00, 0x88, 0x00, 0x07,
0x11, 0x50, 0x0C, 0x35, 0x1C, 0x61, 0x84, 0xC3, 0xF2, 0xC3, 0xF2, 0xC3, 0xF2, 0xC3, 0xF2, 0xC3,
0xF2, 0xC3, 0xF2, 0xC3, 0xF2, 0xC3, 0xF2, 0x00, 0xFE, 0x00, 0x1B, 0x3E, 0x00, 0x88, 0xFF, 0xFF,
0x8B, 0x00, 0x02, 0xDF, 0x8A, 0x00, 0x05, 0xFE, 0x00, 0x83, 0x03, 0xE8, 0x19, 0x1E, 0x19, 0x1A,
0x00, 0x5F, 0x64, 0xA0, 0x1B, 0x7E, 0x1B, 0x7A, 0x00, 0x80, 0x03, 0xE8, 0x05, 0x01, 0x1D, 0x1F,
0x11, 0x50, 0x0C, 0x50, 0x1C, 0x61, 0x84, 0xC3, 0x00, 0x5F, 0xF2, 0xC3, 0xF2, 0x00, 0xFE, 0x00,
0x1B, 0x3E, 0x00, 0x88, 0xFF, 0xFF, 0x8B, 0x00, 0x02, 0xDF, 0x00, 0x83, 0x03, 0xE8, 0x19, 0x1E,
0x19, 0x1A, 0x64, 0xA0, 0x64, 0xA0, 0x1B, 0x7E, 0x1B, 0x7A, 0x00, 0x80, 0x03, 0xE8, 0x00, 0x88,
0x00, 0x03, 0x00, 0x85, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x1F, 0xC2, 0x19, 0x5B, 0x19, 0x59,
0x19, 0x5F, 0x19, 0x5A, 0x1C, 0x5E, 0x1F, 0xDA, 0x1C, 0x61, 0x8A, 0x00, 0x8F, 0x00, 0x19, 0x1A,
0xB8, 0x50, 0xE2, 0x50, 0xEA, 0x50, 0xE8, 0xE8, 0xB6, 0x50, 0x11, 0x27, 0x0C, 0x80, 0xE3, 0xA8,
0x19, 0x7E, 0xE8, 0x50, 0xEA, 0xF8, 0xBF, 0x50, 0xE2, 0xA9, 0x19, 0x7F, 0xEA, 0x50, 0xE8, 0xE8,
0xB6, 0x50, 0xE3, 0xA8, 0x19, 0x7E, 0xE8, 0x50, 0xEA, 0xF8, 0xBF, 0x00, 0x1B, 0xFF, 0x19, 0x7F,
0x8E, 0x00, 0x8B, 0x00, 0x00, 0x88, 0xFF, 0xFF, 0x1B, 0x5B, 0x1B, 0x59, 0x1B, 0x5F, 0x1B, 0x5E,
0x02, 0xDF, 0x00, 0x83, 0x03, 0xE8, 0x19, 0x1E, 0x19, 0x1A, 0x64, 0xA0, 0x64, 0xA0, 0x1B, 0x7E,
0x1B, 0x7A, 0x00, 0x80, 0x03, 0xE8, 0x00, 0x88, 0x00, 0x03, 0x00, 0x85, 0x00, 0x00, 0x00, 0x87,
0x00, 0x00, 0x1F, 0xC2, 0x19, 0x5B, 0x19, 0x59, 0x19, 0x5F, 0x19, 0x5A, 0x1C, 0x5E, 0x1F, 0xDA,
0x1C, 0x61, 0x8A, 0x00, 0x8F, 0x00, 0x19, 0x1A, 0xB8, 0x00, 0xE3, 0x50, 0xE2, 0x50, 0xEA, 0x00,
0xEA, 0x50, 0xE8, 0x77, 0xEC, 0xE8, 0xB2, 0x00, 0x11, 0x27, 0x0C, 0xC5, 0xE2, 0x50, 0xE3, 0xA8,
0x19, 0x7E, 0xE8, 0x00, 0xE8, 0x50, 0xEA, 0x7F, 0xEE, 0xF8, 0xBB, 0x00, 0xE3, 0x50, 0xE2, 0xA9,
0x19, 0x7F, 0xEA, 0x00, 0xEA, 0x50, 0xE8, 0x77, 0xEC, 0xE8, 0xB2, 0x00, 0xE2, 0x50, 0xE3, 0xA8,
0x19, 0x7E, 0xE8, 0x00, 0xE8, 0x50, 0xEA, 0x7F, 0xEE, 0xF8, 0xBB, 0x00, 0x1B, 0xFF, 0x19, 0x7F,
0x8E, 0x00, 0x8B, 0x00, 0x00, 0x88, 0xFF, 0xFF, 0x1B, 0x5B, 0x1B, 0x59, 0x1B, 0x5F, 0x1B, 0x5E,
0x02, 0xDF, 0x0E, 0xFF, 0x00, 0xFE, 0x03, 0xF2, 0x81, 0x00, 0x00, 0xFE, 0x03, 0xF0, 0x00, 0xFE,
0x03, 0xF6, 0x00, 0x9E, 0x01, 0x00, 0x00, 0xFE, 0x03, 0xF7, 0x00, 0xDA, 0x03, 0xF7, 0x00, 0x9E,
0x80, 0x00, 0x54, 0x00, 0x00, 0xFE, 0x03, 0xF5, 0x0E, 0x30, 0x00, 0xFE, 0x03, 0xF3, 0x0E, 0x10,
0x00, 0xFE, 0x03, 0xF4, 0x00, 0x9E, 0x00, 0x96, 0x00, 0xFE, 0x03, 0xF1, 0x02, 0xDF, 0x00, 0x80,
0x0A, 0x00, 0x81, 0x00, 0x00, 0xDE, 0x03, 0xF0, 0x89, 0x00, 0xB1, 0x00, 0x02, 0x75, 0x05, 0x50,
0x00, 0xFF, 0x03, 0xF0, 0x02, 0x00, 0x0A, 0x60, 0x1C, 0x7E, 0x0F, 0x4E, 0x02, 0xBF, 0x00, 0xDA,
0x02, 0xDF, 0x00, 0xDE, 0x03, 0xF1, 0x02, 0x00, 0x0A, 0x60, 0x1C, 0x7E, 0x81, 0x00, 0x89, 0x00,
0x00, 0x9F, 0x00, 0xA0, 0x00, 0xDE, 0x03, 0xF1, 0x5D, 0x00, 0x0E, 0x50, 0x07, 0x50, 0x02, 0x70,
0x5D, 0x00, 0x00, 0xDA, 0x03, 0xF2, 0x86, 0x00, 0x02, 0x90, 0x0D, 0x3A, 0x00, 0xDE, 0x03, 0xF3,
0x5C, 0x00, 0x02, 0x93, 0x0D, 0x25, 0x02, 0x9F, 0x0D, 0x3F, 0x00, 0xDB, 0x03, 0xF7, 0x00, 0x9E,
0x80, 0x00, 0x46, 0x00, 0x02, 0x9F, 0x0D, 0x31, 0x00, 0xDB, 0x03, 0xF7, 0x00, 0x9E, 0x80, 0x00,
0x56, 0x00, 0x00, 0xFE, 0x03, 0xF5, 0x1F, 0xDA, 0x7C, 0x00, 0x1F, 0x5E, 0x00, 0xFE, 0x03, 0xF2,
0x02, 0x9F, 0x0D, 0x3F, 0x00, 0xDE, 0x03, 0xF4, 0x5D, 0x00, 0x02, 0x93, 0x0D, 0x2C, 0x89, 0x00,
0x00, 0xDD, 0x03, 0xF5, 0x15, 0x01, 0x81, 0x00, 0x00, 0xDC, 0x03, 0xF6, 0x00, 0x8B, 0x00, 0x9F,
0x00, 0x80, 0x0A, 0x00, 0x09, 0x00, 0x11, 0x50, 0x0D, 0x52, 0x18, 0x78, 0x4C, 0x00, 0x1C, 0xFE,
0x00, 0x1F, 0x1F, 0xD9, 0x1B, 0x18, 0x00, 0x9F, 0x0A, 0x60, 0x1F, 0xC3, 0x5C, 0x00, 0x00, 0xFE,
0x03, 0xF1, 0x00, 0xFC, 0x03, 0xF6, 0x00, 0x8B, 0xFF, 0xFF, 0x02, 0xDF, 0x0F, 0x50, 0x00, 0x80,
0x0A, 0x00, 0x00, 0x83, 0x0D, 0x60, 0x00, 0x98, 0x3F, 0xFF, 0x02, 0xBF, 0x00, 0xF4, 0x0F, 0x50,
0x00, 0x80, 0x0A, 0x00, 0x00, 0x83, 0x0D, 0x00, 0x00, 0x98, 0x3F, 0xFF, 0x02, 0xBF, 0x00, 0xF4,
0x02, 0xDF, 0x8A, 0x00, 0x8F, 0x00, 0x81, 0x00, 0x00, 0xDE, 0x04, 0x04, 0xB1, 0x00, 0x02, 0x95,
0x0D, 0x7E, 0x81, 0x00, 0x00, 0xFE, 0x04, 0x78, 0x00, 0xFE, 0x04, 0x79, 0x00, 0xDF, 0x04, 0x79,
0x00, 0xDB, 0x04, 0x78, 0x09, 0x00, 0x00, 0x84, 0x00, 0x00, 0x11, 0x50, 0x0D, 0x8E, 0x19, 0x9E,
0x5C, 0x7C, 0xC0, 0x00, 0x6E, 0x00, 0x14, 0x88, 0x4A, 0x00, 0x1B, 0x1E, 0x1F, 0x7E, 0x00, 0xFB,
0x04, 0x78, 0x00, 0xFF, 0x04, 0x79, 0x8B, 0x00, 0x8E, 0x00, 0x02, 0xDF, 0xB9, 0x00, 0x02, 0x94,
0x0D, 0x9C, 0x68, 0x00, 0xB1, 0x00, 0x02, 0xD5, 0x1C, 0x23, 0x19, 0x7E, 0x19, 0x1B, 0xD8, 0x58,
0x11, 0x20, 0x0D, 0xA6, 0xDC, 0xD3, 0x62, 0x31, 0xDC, 0xD3, 0x62, 0x31, 0x49, 0x00, 0x11, 0x08,
0x0D, 0xAC, 0xDC, 0xD3, 0x62, 0x31, 0xDC, 0xD3, 0x62, 0x31, 0x02, 0xDF, 0x8F, 0x00, 0x8D, 0x00,
0x1C, 0x03, 0x00, 0xD9, 0x03, 0x8E, 0x0B, 0x04, 0x19, 0x7A, 0xB0, 0x53, 0xB6, 0x00, 0x11, 0x28,
0x0D, 0xBC, 0x3A, 0xD3, 0xB6, 0x30, 0x3A, 0xD3, 0xB6, 0x30, 0x8C, 0x00, 0x8E, 0x00, 0x02, 0xDF,
0x00, 0xDA, 0x04, 0x85, 0x86, 0x00, 0x02, 0x95, 0x0D, 0xD2, 0x81, 0x00, 0x00, 0xDE, 0x04, 0x2A,
0x14, 0x7F, 0x00, 0xFE, 0x04, 0x2B, 0xB1, 0x00, 0x02, 0x94, 0x0D, 0xD2, 0x00, 0x9A, 0x00, 0x01,
0x00, 0xFA, 0x04, 0x01, 0x8F, 0x00, 0x81, 0x00, 0x00, 0xDE, 0x04, 0x28, 0x14, 0x78, 0x00, 0xDF,
0x04, 0x28, 0x03, 0x40, 0x00, 0x7F, 0x1F, 0x1E, 0x1F, 0x5F, 0x02, 0x20, 0x00, 0x7F, 0x1F, 0x3E,
0x03, 0x20, 0x00, 0x7F, 0x1F, 0x7F, 0x81, 0x00, 0x89, 0x00, 0x00, 0x9F, 0x02, 0x00, 0x1F, 0xD8,
0x4C, 0x00, 0x1C, 0x1E, 0x18, 0x18, 0x1F, 0xDA, 0x4C, 0x00, 0x1C, 0x1E, 0x18, 0x1A, 0x1F, 0xD9,
0x4C, 0x00, 0x1C, 0x1E, 0x18, 0x19, 0x1F, 0xDB, 0x4C, 0x00, 0x1C, 0x1E, 0x18, 0x1B, 0x8A, 0x00,
0x00, 0x80, 0x0B, 0x00, 0x98, 0x00, 0xAE, 0x00, 0xB6, 0x30, 0x96, 0x30, 0x6E, 0x30, 0x1B, 0x1E,
0x8B, 0x00, 0x00, 0x80, 0x0B, 0x00, 0x00, 0x81, 0x0B, 0x04, 0x00, 0xDA, 0x04, 0x2A, 0x02, 0xBF,
0x0E, 0x52, 0x00, 0x81, 0x0B, 0x08, 0x00, 0x80, 0x0B, 0x00, 0x00, 0xDA, 0x04, 0x2A, 0x00, 0xDE,
0x04, 0x29, 0x8A, 0x00, 0xC0, 0x00, 0x8B, 0x00, 0x6E, 0x00, 0x1F, 0x5E, 0x02, 0xBF, 0x0E, 0x52,
0x00, 0x80, 0x0B, 0x00, 0x00, 0x81, 0x0B, 0x0C, 0x81, 0x00, 0x89, 0x00, 0x00, 0xDE, 0x04, 0x2B,
0x00, 0xDF, 0x04, 0x2A, 0x00, 0xFE, 0x04, 0x2A, 0x5C, 0x00, 0x1F, 0x5E, 0x02, 0xBF, 0x0E, 0x5D,
0x00, 0x80, 0x0B, 0x0C, 0x00, 0x81, 0x0B, 0x10, 0x00, 0xDA, 0x04, 0x29, 0x02, 0xBF, 0x0E, 0x52,
0x00, 0x81, 0x0B, 0x04, 0x00, 0x82, 0x0B, 0x0C, 0x00, 0x83, 0x0E, 0x6B, 0x11, 0x08, 0x0E, 0x4F,
0x19, 0x5F, 0x15, 0xFB, 0x1F, 0x1D, 0x1F, 0x5F, 0x19, 0x3F, 0x00, 0xE1, 0x0B, 0x24, 0x00, 0xE2,
0x0B, 0x25, 0x02, 0x1B, 0x00, 0xE3, 0x0B, 0x26, 0x1C, 0x7E, 0x00, 0xC0, 0x03, 0x8F, 0x02, 0xBF,
0x0D, 0x96, 0x00, 0xC1, 0x0B, 0x24, 0x00, 0xC2, 0x0B, 0x25, 0x00, 0xC3, 0x0B, 0x26, 0x00, 0x00,
0x8E, 0x00, 0x02, 0xDF, 0x8A, 0x00, 0x19, 0x1F, 0xD0, 0x78, 0xD6, 0x78, 0xD6, 0x31, 0x19, 0x1F,
0xD6, 0x31, 0x6E, 0x31, 0x1B, 0x3E, 0x8B, 0x00, 0x02, 0xDF, 0x8A, 0x00, 0x8D, 0x00, 0x1F, 0x7E,
0x19, 0x18, 0xA8, 0x40, 0xAE, 0x40, 0xAE, 0x31, 0x19, 0x18, 0xAE, 0x31, 0x6E, 0x31, 0x1B, 0x3E,
0x8C, 0x00, 0x8B, 0x00, 0x02, 0xDF, 0x0D, 0x00, 0x0D, 0x60, 0x0F, 0x40, 0x0C, 0xA0, 0x0E, 0x80,
0x0E, 0xE0, 0x0B, 0xE0, 0x0C, 0x40, 0x00, 0xF9, 0x03, 0x61, 0x1F, 0xC0, 0x02, 0x00, 0xFF, 0xFC,
0x1C, 0x1E, 0x1C, 0x5E, 0x00, 0x83, 0x04, 0x3C, 0x19, 0x7E, 0x19, 0x7F, 0x80, 0xA2, 0x64, 0xA3,
0x65, 0x30, 0x1B, 0x1F, 0x1C, 0x02, 0x81, 0x00, 0x00, 0xDE, 0x04, 0x02, 0x00, 0xFE, 0x03, 0x62,
0x14, 0x74, 0x1F, 0x7E, 0x1F, 0x3C, 0x89, 0x00, 0x00, 0xDD, 0x04, 0x30, 0x15, 0x04, 0x06, 0x04,
0x02, 0x90, 0x0E, 0xE7, 0x1F, 0xDD, 0x00, 0x82, 0x02, 0xB0, 0x10, 0x50, 0x4B, 0x2A, 0x1F, 0xBE,
0x00, 0xFE, 0x03, 0x60, 0x89, 0x00, 0x1F, 0xBE, 0x0A, 0xF8, 0x00, 0x9B, 0x00, 0xFC, 0x00, 0xD8,
0x03, 0x61, 0x00, 0x82, 0x02, 0xB0, 0x00, 0x83, 0x02, 0xB0, 0x19, 0x5E, 0x34, 0x80, 0x11, 0x28,
0x0E, 0xAC, 0x36, 0x7A, 0x35, 0xB3, 0x37, 0x72, 0x34, 0xBB, 0x8A, 0x00, 0x00, 0x82, 0x02, 0xB0,
0x00, 0xDD, 0x04, 0x30, 0x15, 0x04, 0x1F, 0xE0, 0x81, 0x00, 0x00, 0xDE, 0x03, 0x62, 0x14, 0x74,
0x1F, 0x7E, 0x1F, 0x3C, 0x8F, 0x00, 0x19, 0x43, 0x4B, 0xC3, 0x90, 0xC3, 0xF2, 0xC3, 0xF2, 0xC3,
0xF2, 0x00, 0xFE, 0x00, 0x1C, 0x1F, 0x19, 0x43, 0x4B, 0xC3, 0x90, 0xC3, 0x11, 0x4E, 0x0E, 0xCE,
0xF2, 0xC3, 0xF2, 0xC3, 0xF2, 0x31, 0x1C, 0x1F, 0x19, 0x43, 0x4B, 0xC3, 0x92, 0xC3, 0xF2, 0xC3,
0xF2, 0xC3, 0xF2, 0x31, 0xFE, 0x00, 0x1B, 0x3E, 0x8B, 0x00, 0x8E, 0x00, 0x00, 0xFE, 0x04, 0x33,
0x1C, 0x1F, 0x15, 0x0C, 0x03, 0x40, 0x0F, 0xFF, 0x00, 0xFF, 0x04, 0x30, 0x00, 0x83, 0x04, 0x3C,
0x19, 0x1E, 0x19, 0x1F, 0x80, 0xA0, 0x64, 0xA1, 0x65, 0x33, 0x1B, 0x7F, 0x02, 0xDF, 0x1F, 0xE0,
0x1C, 0x1F, 0x11, 0x28, 0x0E, 0xF0, 0x4B, 0x70, 0x1B, 0x3E, 0x1C, 0x1F, 0x4B, 0x70, 0x1B, 0x3E,
0x1C, 0x1F, 0x02, 0x9F, 0x0E, 0xD6, 0x00, 0x83, 0x05, 0x20, 0x00, 0xDE, 0x04, 0x33, 0x10, 0x50,
0x1B, 0x7E, 0x02, 0x9F, 0x03, 0x2B, 0x1C, 0x20, 0x18, 0x5F, 0x1F, 0x7F, 0x19, 0x3A, 0x64, 0x00,
0x00, 0x78, 0x0F, 0x05, 0x56, 0x59, 0x67, 0x30, 0x55, 0x51, 0x64, 0x38, 0x1A, 0x5B, 0x02, 0xDF,
0x00, 0x98, 0x82, 0x40, 0x00, 0xF8, 0x04, 0xE8, 0x00, 0x98, 0x7F, 0xFF, 0x00, 0xF8, 0x04, 0xE9,
0x00, 0x98, 0x7D, 0xBF, 0x00, 0xF8, 0x04, 0xEA, 0x00, 0x98, 0x84, 0x3F, 0x00, 0xF8, 0x04, 0xEB,
0x00, 0x98, 0xB2, 0x3B, 0x00, 0xF8, 0x04, 0xF0, 0x00, 0x98, 0x7F, 0xFF, 0x00, 0xF8, 0x04, 0xF1,
0x00, 0x98, 0x4D, 0xC4, 0x00, 0xF8, 0x04, 0xF2, 0x00, 0x98, 0xD8, 0x08, 0x00, 0xF8, 0x04, 0xF3,
0x00, 0x98, 0x00, 0x00, 0x00, 0x80, 0x04, 0xEC, 0x10, 0x04, 0x1B, 0x18, 0x00, 0x80, 0x04, 0xF4,
0x10, 0x04, 0x1B, 0x18, 0x02, 0xDF, 0x00, 0x80, 0x0F, 0x40, 0x00, 0x83, 0x0B, 0x00, 0x89, 0x00,
0x0F, 0x50, 0x00, 0x98, 0x67, 0x84, 0x02, 0xBF, 0x01, 0x03, 0x00, 0x80, 0x04, 0xE8, 0x00, 0x82,
0x04, 0xEC, 0x00, 0x81, 0x0B, 0x00, 0x89, 0x00, 0x0F, 0x50, 0x00, 0x80, 0x0B, 0x00, 0x00, 0x83,
0x0D, 0x00, 0x00, 0x98, 0x7F, 0xFF, 0x02, 0xBF, 0x00, 0xF4, 0x89, 0x00, 0x0F, 0x50, 0x00, 0x80,
0x0B, 0x00, 0x00, 0x83, 0x0D, 0x60, 0x00, 0x98, 0xB8, 0x20, 0x02, 0xBF, 0x00, 0xF4, 0x00, 0x80,
0x0C, 0xA0, 0x00, 0x83, 0x0B, 0x00, 0x89, 0x00, 0x0F, 0x50, 0x00, 0x98, 0x67, 0x84, 0x02, 0xBF,
0x01, 0x03, 0x00, 0x80, 0x04, 0xE8, 0x00, 0x82, 0x04, 0xF4, 0x00, 0x81, 0x0B, 0x00, 0x89, 0x00,
0x0F, 0x50, 0x00, 0x80, 0x0B, 0x00, 0x00, 0x83, 0x0D, 0x00, 0x00, 0x98, 0x47, 0xE0, 0x02, 0xBF,
0x00, 0xF4, 0x89, 0x00, 0x0F, 0x50, 0x00, 0x80, 0x0B, 0x00, 0x00, 0x83, 0x0D, 0x60, 0x00, 0x98,
0x80, 0x01, 0x02, 0xBF, 0x00, 0xF4, 0x02, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 80431F80-80431FE0 05ECA0 0050+10 1/1 0/0 0/0 .bss audio_task */
static STRUCT_DSP_TASK audio_task ALIGN_DECL(32);
/* 80431FE0-80433FE0 05ED00 2000+00 1/1 0/0 0/0 .bss AUDIO_YIELD_BUFFER */
static u8 AUDIO_YIELD_BUFFER[8192] ALIGN_DECL(32);
/* 8029E720-8029E7CC 299060 00AC+00 0/0 1/1 0/0 .text DspBoot__FPFPv_v */
void DspBoot(void (*param_0)(void*)) {
DspInitWork();
audio_task.info.priority = 0xf0;
audio_task.info.iram_mmem_addr = (u16*)(jdsp + 0x80000000);
audio_task.info.iram_length = sizeof(jdsp);
audio_task.info.iram_addr = 0;
audio_task.info.dram_mmem_addr = (u16*)(AUDIO_YIELD_BUFFER + 0x80000000);
audio_task.info.dram_length = sizeof(AUDIO_YIELD_BUFFER);
audio_task.info.dram_addr = 0;
audio_task.info.dsp_init_vector = 0;
audio_task.info.dsp_resume_vector = 0x10;
audio_task.info.init_cb = DspHandShake;
audio_task.info.res_cb = NULL;
audio_task.info.done_cb = NULL;
audio_task.info.req_cb = param_0;
DSPInit();
DSPAddPriorTask(&audio_task);
}
/* 8029E7E0-8029E8C8 299120 00E8+00 0/0 4/4 0/0 .text DSPSendCommands2__FPUlUlPFUs_v */
int DSPSendCommands2(u32* param_1, u32 param_2, void (*callBack)(u16)) {
s32 i;
BOOL interruptFlag;
s32 startWorkStatus;
while (Dsp_Running_Check() == 0) {};
interruptFlag = OSDisableInterrupts();
if (DSPCheckMailToDSP()) {
OSRestoreInterrupts(interruptFlag);
return -1;
}
DSPSendMailToDSP(param_2);
DSPAssertInt();
while(DSPCheckMailToDSP() != 0);
if (param_2 == 0) {
param_2 = 1;
}
if (callBack != NULL) {
startWorkStatus = DspStartWork(param_1[0], callBack);
}
for (i = 0; i < param_2; i++) {
DSPSendMailToDSP(param_1[i]);
while (DSPCheckMailToDSP() != 0);
}
OSRestoreInterrupts(interruptFlag);
return startWorkStatus;
}
/* ############################################################################################## */
/* 80433FE0-80434060 060D00 0080+00 3/3 0/0 0/0 .bss taskwork */
typedef struct {
u16 field_0x0;
u16 field_0x2;
void (*field_0x4)(u16);
} TaskWorkStruct;
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
static void DspInitWork() {
for (int i = 0; i < 16; i++) {
taskwork[i].field_0x4 = NULL;
}
}
/* ############################################################################################## */
/* 80451300-80451304 000800 0004+00 2/2 0/0 0/0 .sbss taskreadp */
static u32 taskreadp;
/* 80451304-80451308 000804 0004+00 1/1 0/0 0/0 .sbss taskwritep */
static u32 taskwritep;
/* 8029E920-8029E968 299260 0048+00 1/1 0/0 0/0 .text DspStartWork__FUlPFUs_v */
static int DspStartWork(u32 param_0, void (*param_1)(u16)) {
u32 taskWritePrev = taskwritep;
u32 writeVal = ((taskWritePrev + 1) & 0xf);
if (writeVal == taskreadp) {
return 0;
}
taskwritep = writeVal;
taskwork[taskWritePrev].field_0x0 = param_0 >> 0x10;
taskwork[taskWritePrev].field_0x4 = param_1;
return taskWritePrev + 1;
}
/* 8029E980-8029E9E8 2992C0 0068+00 0/0 1/1 0/0 .text DspFinishWork__FUs */
void DspFinishWork(u16 param_0) {
if (param_0 == taskwork[taskreadp].field_0x0) {
if (taskwork[taskreadp].field_0x4) {
taskwork[taskreadp].field_0x4(taskreadp);
}
taskreadp = (taskreadp + 1) & 0xf;
}
}
+39
View File
@@ -0,0 +1,39 @@
//
// Generated By: dol2asm
// Translation Unit: osdsp
//
#include "JSystem/JAudio2/osdsp.h"
#include "JSystem/JAudio2/osdsp_task.h"
#include "dolphin/os.h"
#include "dolphin/dsp/dsp_task.h"
/* 8029EA00-8029EA84 299340 0084+00 0/0 1/1 0/0 .text DSPAddTask */
DSPTaskInfo* DSPAddTask(DSPTaskInfo* task) {
if (DSP_prior_task == NULL) {
OSReport("Prior Task is not inited\n");
return NULL;
}
BOOL status = OSDisableInterrupts();
__DSP_insert_task(task);
task->state = 0;
task->flags = 1;
OSRestoreInterrupts(status);
return task;
}
/* ############################################################################################## */
/* 8029EAA0-8029EB1C 2993E0 007C+00 0/0 1/1 0/0 .text DSPAddPriorTask__FP15STRUCT_DSP_TASK */
void DSPAddPriorTask(STRUCT_DSP_TASK* task) {
if (DSP_prior_task != NULL) {
OSReport("Already inited prior DSP task\n");
return;
}
BOOL status = OSDisableInterrupts();
DSP_prior_task = (DSPTaskInfo*)task;
task->info.state = 0;
task->info.flags = 1;
__DSP_boot_task((DSPTaskInfo*)task);
OSRestoreInterrupts(status);
}
+200
View File
@@ -0,0 +1,200 @@
//
// Generated By: dol2asm
// Translation Unit: osdsp_task
//
#include "JSystem/JAudio2/osdsp_task.h"
#include "JSystem/JAudio2/dspproc.h"
#include "dolphin/dsp/dsp_task.h"
#include "dolphin/os/OSContext.h"
//
// Forward References:
//
static void Dsp_Update_Request();
//
// External References:
//
//
// Declarations:
//
/* ############################################################################################## */
/* 80451308-8045130C -00001 0004+00 6/6 0/0 0/0 .sbss None */
/* 80451308 0001+00 data_80451308 None */
/* 80451309 0003+00 data_80451309 None */
static vu8 struct_80451308;
static u8 struct_80451309;
static u8 struct_8045130a;
static u8 struct_8045130b;
/* 8045130C-80451310 00080C 0004+00 1/1 2/2 0/0 .sbss DSP_prior_task */
DSPTaskInfo* DSP_prior_task;
/* 8029EB20-8029EE24 299460 0304+00 0/0 1/1 0/0 .text __DSPHandler */
void __DSPHandler(__OSInterrupt interrupt, OSContext* context) {
OSContext funcContext;
__DSPRegs[5] = ((u16)(__DSPRegs[5]) & ~0x28) | 0x80;
OSClearContext(&funcContext);
OSSetCurrentContext(&funcContext);
if (struct_80451308 == 1 || struct_80451308 == 0) {
__DSP_curr_task = DSP_prior_task;
}
while (DSPCheckMailFromDSP() == 0);
u32 mail = DSPReadMailFromDSP();
if ((__DSP_curr_task->flags & 2) && mail == 0xDCD10002) {
mail = 0xDCD10003;
}
switch (mail) {
case 0xDCD10000:
__DSP_curr_task->state = 1;
if (__DSP_curr_task == DSP_prior_task) {
struct_80451308 = 1;
}
if (__DSP_curr_task->init_cb != NULL) {
__DSP_curr_task->init_cb(__DSP_curr_task);
}
break;
case 0xDCD10001:
__DSP_curr_task->state = 1;
if (__DSP_curr_task == DSP_prior_task) {
struct_80451308 = 1;
Dsp_Update_Request();
}
if (__DSP_curr_task->res_cb != NULL) {
__DSP_curr_task->res_cb(__DSP_curr_task);
}
break;
case 0xDCD10002:
DSPSendMailToDSP(0xCDD10001);
while (DSPCheckMailToDSP() != 0);
__DSP_curr_task->state = 2;
if (__DSP_curr_task->next == NULL && struct_80451309) {
__DSP_exec_task(__DSP_curr_task, DSP_prior_task);
struct_80451309 = 0;
__DSP_curr_task = DSP_prior_task;
} else {
__DSP_exec_task(__DSP_curr_task, __DSP_curr_task->next);
__DSP_curr_task = __DSP_curr_task->next;
}
break;
case 0xDCD10003:
if (__DSP_curr_task->done_cb != NULL) {
__DSP_curr_task->done_cb(__DSP_curr_task);
}
DSPSendMailToDSP(0xCDD10001);
while (DSPCheckMailToDSP() != 0);
__DSP_curr_task->state = 3;
if (__DSP_curr_task->next == NULL) {
__DSP_exec_task(NULL, DSP_prior_task);
__DSP_remove_task(__DSP_curr_task);
__DSP_curr_task = DSP_prior_task;
} else {
__DSP_exec_task(NULL, __DSP_curr_task->next);
__DSP_curr_task = __DSP_curr_task->next;
__DSP_remove_task(__DSP_curr_task->prev);
}
break;
case 0xDCD10004:
if (__DSP_curr_task->req_cb != NULL) {
__DSP_curr_task->req_cb(__DSP_curr_task);
}
break;
case 0xDCD10005:
if (__DSP_first_task == NULL || struct_80451309) {
DSPSendMailToDSP(0xCDD10003);
while (DSPCheckMailToDSP() != 0);
struct_80451309 = 0;
__DSP_curr_task = DSP_prior_task;
Dsp_Update_Request();
} else {
struct_80451308 = 3;
DSPSendMailToDSP(0xCDD10001);
while (DSPCheckMailToDSP() != 0);
__DSP_exec_task(DSP_prior_task, __DSP_first_task);
__DSP_curr_task = __DSP_first_task;
}
break;
}
OSClearContext(&funcContext);
OSSetCurrentContext(context);
}
/* ############################################################################################## */
/* 80434060-80434078 060D80 0014+04 3/3 0/0 0/0 .bss sync_stack */
static u32 sync_stack[5];
/* 8029EE40-8029EE90 299780 0050+00 1/1 1/1 0/0 .text DsyncFrame2__FUlUlUl */
void DsyncFrame2(u32 param_0, u32 param_1, u32 param_2) {
if (struct_80451308 != 1) {
sync_stack[0] = param_0;
sync_stack[1] = param_1;
sync_stack[2] = param_2;
struct_80451309 = 1;
return;
}
DsyncFrame2ch(param_0, param_1, param_2);
struct_80451309 = 0;
}
/* 8029EEA0-8029EEF8 2997E0 0058+00 1/1 0/0 0/0 .text DsyncFrame3__FUlUlUlUlUl */
static void DsyncFrame3(u32 param_0, u32 param_1, u32 param_2, u32 param_3, u32 param_4) {
if (struct_80451308 != 1) {
sync_stack[0] = param_0;
sync_stack[1] = param_1;
sync_stack[2] = param_2;
sync_stack[3] = param_3;
sync_stack[4] = param_4;
struct_80451309 = 2;
return;
}
DsyncFrame4ch(param_0, param_1, param_2, param_3, param_4);
struct_80451309 = 0;
}
/* 8029EF00-8029EF78 299840 0078+00 1/1 0/0 0/0 .text Dsp_Update_Request__Fv */
static void Dsp_Update_Request() {
switch (struct_80451309) {
case 0:
break;
case 1:
DsyncFrame2(sync_stack[0], sync_stack[1], sync_stack[2]);
break;
case 2:
DsyncFrame3(sync_stack[0], sync_stack[1], sync_stack[2], sync_stack[3], sync_stack[4]);
break;
}
}
/* 8029EF80-8029EF94 2998C0 0014+00 0/0 1/1 0/0 .text Dsp_Running_Check__Fv */
bool Dsp_Running_Check() {
return struct_80451308 == 1;
}
/* 8029EFA0-8029EFAC 2998E0 000C+00 0/0 1/1 0/0 .text Dsp_Running_Start__Fv */
void Dsp_Running_Start() {
struct_80451308 = 1;
}
/* ############################################################################################## */
/* 80451310-80451318 000810 0008+00 0/0 3/3 0/0 .sbss None */
u8 data_80451310[8];
/* 80451318-80451320 000818 0008+00 0/0 7/7 0/0 .sbss None */
u8 data_80451318[8];
/* 80451320-80451328 000820 0008+00 0/0 4/4 0/0 .sbss None */
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];