JASWSParser OK, JASInstSense OK

This commit is contained in:
LagoLunatic
2024-01-23 04:23:15 -05:00
parent a2b9822e5c
commit 4ca50bb60f
6 changed files with 52 additions and 44 deletions
+4 -4
View File
@@ -684,9 +684,9 @@ config.libs = [
Object(NonMatching, "JSystem/JAudio/JASBasicWaveBank.cpp"),
Object(Matching, "JSystem/JAudio/JASSimpleWaveBank.cpp"),
Object(Matching, "JSystem/JAudio/JASInstEffect.cpp"),
Object(NonMatching, "JSystem/JAudio/JASInstSense.cpp"),
Object(Matching, "JSystem/JAudio/JASInstSense.cpp"),
Object(Matching, "JSystem/JAudio/JASInstRand.cpp"),
Object(NonMatching, "JSystem/JAudio/JASWSParser.cpp"),
Object(Matching, "JSystem/JAudio/JASWSParser.cpp"),
Object(NonMatching, "JSystem/JAudio/JASBNKParser.cpp"),
Object(Matching, "JSystem/JAudio/JASWaveArcLoader.cpp"),
Object(Matching, "JSystem/JAudio/JASWaveBankMgr.cpp"),
@@ -1418,7 +1418,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_daiocta_eye"),
ActorRel(NonMatching, "d_a_deku_item"),
ActorRel(NonMatching, "d_a_dk"),
ActorRel(Matching, "d_a_dummy"),
ActorRel(Matching, "d_a_dummy"),
ActorRel(NonMatching, "d_a_fallrock_tag"),
ActorRel(Matching, "d_a_fan", extra_cflags=['-pragma "nosyminline on"']),
ActorRel(NonMatching, "d_a_fganon"),
@@ -1530,7 +1530,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_obj_ftree"),
ActorRel(Matching, "d_a_obj_ganonbed", extra_cflags=['-pragma "nosyminline on"']),
ActorRel(NonMatching, "d_a_obj_gaship"),
ActorRel(Matching, "d_a_obj_gaship2"),
ActorRel(Matching, "d_a_obj_gaship2"),
ActorRel(NonMatching, "d_a_obj_gnnbtltaki"),
ActorRel(NonMatching, "d_a_obj_gnndemotakie"),
ActorRel(NonMatching, "d_a_obj_gnndemotakis"),
+13 -13
View File
@@ -39,19 +39,19 @@ namespace JASystem {
u8 getNumber() { return mNumber; }
// TODO: inlines
void checkSign(u32);
void isFree();
void getPriority();
void getStatus();
void getCBInterval();
void decCBInterval();
void getPriorityTime();
void setCBInterval(u16);
void setPriorityTime(u16);
void setPriority(u8);
void getLogicalChannel();
void forceStop(TDSPChannel*);
void release(TDSPChannel*, u32);
void checkSign(u32) {}
void isFree() {}
void getPriority() {}
void getStatus() {}
void getCBInterval() {}
void decCBInterval() {}
void getPriorityTime() {}
void setCBInterval(u16) {}
void setPriorityTime(u16) {}
void setPriority(u8) {}
void getLogicalChannel() {}
void forceStop(TDSPChannel*) {}
void release(TDSPChannel*, u32) {}
/* 0x00 */ u8 mNumber;
/* 0x01 */ u8 field_0x1;
+4 -3
View File
@@ -18,6 +18,7 @@ u32 JASystem::BNKParser::sUsedHeapSize;
/* 802870F0-802879A0 .text createBasicBank__Q28JASystem9BNKParserFPv */
JASystem::TBasicBank* JASystem::BNKParser::createBasicBank(void* stream) {
/* Nonmatching - regswap */
JKRHeap* heap = TBank::getCurrentHeap();
const u32 freeSize = heap->getFreeSize();
THeader* header = (THeader*)stream;
@@ -47,7 +48,7 @@ JASystem::TBasicBank* JASystem::BNKParser::createBasicBank(void* stream) {
osc->field_0x4 = oscRaw->field_0x4;
s16* oscTable = JSUConvertOffsetToPtr<s16>(header, oscRaw->field_0x8);
if (oscTable != NULL) {
u32 tableLength = getOscTableEndPtr(oscTable) - oscTable;
s32 tableLength = getOscTableEndPtr(oscTable) - oscTable;
osc->table = new (heap, 0) s16[tableLength];
JUT_ASSERT(82, osc->table != 0);
Calc::bcopy(oscTable, osc->table, tableLength * sizeof(s16));
@@ -56,10 +57,10 @@ JASystem::TBasicBank* JASystem::BNKParser::createBasicBank(void* stream) {
}
oscTable = JSUConvertOffsetToPtr<s16>(header, oscRaw->field_0xC);
if (oscTable != NULL) {
u32 tableLength = getOscTableEndPtr(oscTable) - oscTable;
s32 tableLength = getOscTableEndPtr(oscTable) - oscTable;
osc->rel_table = new (heap, 0) s16[tableLength];
JUT_ASSERT(94, osc->rel_table != 0);
Calc::bcopy(oscTable, osc->rel_table, tableLength);
Calc::bcopy(oscTable, osc->rel_table, tableLength * sizeof(s16));
} else {
osc->rel_table = NULL;
}
+11 -9
View File
@@ -27,11 +27,11 @@ void JASystem::TDSPChannel::init(u8 param_1) {
/* 80289694-80289720 .text allocate__Q28JASystem11TDSPChannelFUl */
int JASystem::TDSPChannel::allocate(u32 param_1) {
/* Nonmatching */
if (field_0x1 != 1) {
return false;
}
if (field_0x8 == 0) {
BOOL r0 = (field_0x8 == 0) ? TRUE : FALSE;
if (!r0) {
OSReport("sign %x があるのにCH.%d はFREE\n", field_0x8, mNumber);
}
field_0x1 = 0;
@@ -113,14 +113,14 @@ int JASystem::TDSPChannel::smnFree = 64;
/* 80289994-80289A54 .text alloc__Q28JASystem11TDSPChannelFUlUl */
JASystem::TDSPChannel* JASystem::TDSPChannel::alloc(u32 param_1, u32 param_2) {
/* Nonmatching */
if (param_1) {
OSReport("----- JASDSPChannel::alloc : 多チャネルモードはサポートされていません\n");
return NULL;
}
int i = 0;
do {
if (DSPCH[i].field_0x1 == 1 && DSPCH[i].allocate(param_2)) {
BOOL r0 = DSPCH[i].field_0x1 == 1 ? TRUE : FALSE;
if (r0 && DSPCH[i].allocate(param_2)) {
smnFree--;
smnUse++;
return &DSPCH[i];
@@ -242,18 +242,20 @@ bool JASystem::TDSPChannel::breakLowerActive(u8 param_1) {
return true;
}
OSTick JASystem::history[10];
OSTick JASystem::history[10] = { 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
OSTick JASystem::old_time;
f32 JASystem::DSP_LIMIT_RATIO = 1.1f;
/* 80289E68-8028A04C .text updateAll__Q28JASystem11TDSPChannelFv */
void JASystem::TDSPChannel::updateAll() {
/* Nonmatching */
/* Nonmatching - instruction ordering, maybe inline related */
DSPInterface::DSPBuffer* dspBuffer;
if (Kernel::getSubFrames() <= 10) {
OSTick time = OSGetTick();
u32 var2;
OSTick var3 = time - old_time;
old_time = time;
u32 var2 = Kernel::getSubFrames() - TAudioThread::snIntCount;
var2 = Kernel::getSubFrames() - TAudioThread::snIntCount;
history[var2] = var3;
if (var2) {
if (f32(history[0]) / var3 < DSP_LIMIT_RATIO) {
@@ -266,8 +268,8 @@ void JASystem::TDSPChannel::updateAll() {
if ((i & 0x0f) == 0 && i != 0) {
DSPReleaseHalt2(i - 1 >> 4);
}
TDSPChannel* dspChannel = DSPCH + i;
DSPInterface::DSPBuffer* dspBuffer = dspChannel->field_0xc;
dspBuffer = DSPCH[i].field_0xc;
TDSPChannel* dspChannel = &DSPCH[i];
if (dspChannel->field_0x1 == 1) {
continue;
}
+7 -6
View File
@@ -8,7 +8,6 @@
/* 802868F0-80286A1C .text getY__Q28JASystem10TInstSenseCFii */
f32 JASystem::TInstSense::getY(int param_1, int param_2) const {
/* Nonmatching */
int r6 = 0;
switch (field_0x8) {
case 1:
@@ -18,13 +17,15 @@ f32 JASystem::TInstSense::getY(int param_1, int param_2) const {
r6 = param_1;
break;
}
f32 ret;
if (field_0x9 == 0x7f || field_0x9 == 0) {
return field_0xc + r6 * (field_0x10 - field_0xc) / 127.0f;
ret = field_0xc + r6 * (field_0x10 - field_0xc) / 127.0f;
} else if (r6 < field_0x9) {
ret = field_0xc + (1.0f - field_0xc) * (r6 / (f32)field_0x9);
} else {
ret = (field_0x10 - 1.0f) * ((r6 - field_0x9) / (f32)(0x7f - field_0x9)) + 1.0f;
}
if (r6 < field_0x9) {
return field_0xc + (1.0f - field_0xc) * r6 / field_0x9;
}
return field_0x10 - 1.0f * (r6 - field_0x9) / (0x7f - field_0x9) + 1.0f;
return ret;
}
/* 80286A1C-80286B58 .text setParams__Q28JASystem10TInstSenseFiiff */
+13 -9
View File
@@ -19,7 +19,7 @@ u32 JASystem::WSParser::getGroupCount(void* stream) {
/* 80286C1C-80286E38 .text createBasicWaveBank__Q28JASystem8WSParserFPv */
JASystem::TBasicWaveBank* JASystem::WSParser::createBasicWaveBank(void* stream) {
/* Nonmatching */
TWaveArchive* archiveRaw;
JKRHeap* heap = TWaveBank::getCurrentHeap();
const u32 priorFreeSize = heap->getFreeSize();
const THeader* header = (THeader*)stream;
@@ -36,7 +36,7 @@ JASystem::TBasicWaveBank* JASystem::WSParser::createBasicWaveBank(void* stream)
TCtrl* ctrlRaw = JSUConvertOffsetToPtr<TCtrl>(header, ctrlSceneRaw->mCtrlOffset);
TBasicWaveBank::TWaveGroup* waveGroup = bank->getWaveGroup(groupIndex);
TWaveArchiveBank* archiveBankRaw = JSUConvertOffsetToPtr<TWaveArchiveBank>(header, header->mArchiveBankOffset);
TWaveArchive* archiveRaw = JSUConvertOffsetToPtr<TWaveArchive>(header, archiveBankRaw->mArchiveOffsets[groupIndex]);
archiveRaw = JSUConvertOffsetToPtr<TWaveArchive>(header, archiveBankRaw->mArchiveOffsets[groupIndex]);
waveGroup->setWaveCount(ctrlRaw->mWaveCount);
for (int waveIndex = 0; waveIndex < ctrlRaw->mWaveCount; waveIndex++) {
TWave* waveRaw = JSUConvertOffsetToPtr<TWave>(header, archiveRaw->mWaveOffsets[waveIndex]);
@@ -56,7 +56,7 @@ JASystem::TBasicWaveBank* JASystem::WSParser::createBasicWaveBank(void* stream)
info.field_0x22 = waveRaw->field_0x22;
info.field_0x28 = waveRaw->field_0x28;
TCtrlWave* ctrlWaveRaw = JSUConvertOffsetToPtr<TCtrlWave>(header, ctrlRaw->mCtrlWaveOffsets[waveIndex]);
u32 size = ctrlWaveRaw->field_0x0 & 0xFFFF;
u32 size = (u16)ctrlWaveRaw->field_0x0;
waveGroup->setWaveInfo(waveIndex, size, info);
if (maxSize < size) {
maxSize = size;
@@ -71,7 +71,7 @@ JASystem::TBasicWaveBank* JASystem::WSParser::createBasicWaveBank(void* stream)
/* 80286E38-80287048 .text createSimpleWaveBank__Q28JASystem8WSParserFPv */
JASystem::TSimpleWaveBank* JASystem::WSParser::createSimpleWaveBank(void* stream) {
/* Nonmatching */
const TWaveArchive* archiveRaw;
JKRHeap* heap = TWaveBank::getCurrentHeap();
const u32 priorFreeSize = heap->getFreeSize();
const THeader* header = (THeader*)stream;
@@ -88,7 +88,7 @@ JASystem::TSimpleWaveBank* JASystem::WSParser::createSimpleWaveBank(void* stream
const TCtrlScene* ctrlSceneRaw = JSUConvertOffsetToPtr<TCtrlScene>(header, ctrlGroupRaw->mCtrlSceneOffsets[0]);
const TCtrl* ctrlRaw = JSUConvertOffsetToPtr<TCtrl>(header, ctrlSceneRaw->mCtrlOffset);
const TWaveArchiveBank* archiveBankRaw = JSUConvertOffsetToPtr<TWaveArchiveBank>(header, header->mArchiveBankOffset);
const TWaveArchive* archiveRaw = JSUConvertOffsetToPtr<TWaveArchive>(header, archiveBankRaw->mArchiveOffsets[0]);
archiveRaw = JSUConvertOffsetToPtr<TWaveArchive>(header, archiveBankRaw->mArchiveOffsets[0]);
for (int waveIndex = 0; waveIndex < ctrlRaw->mWaveCount; waveIndex++) {
TCtrlWave* ctrlWaveRaw = JSUConvertOffsetToPtr<TCtrlWave>(header, ctrlRaw->mCtrlWaveOffsets[waveIndex]);
u32 size = ctrlWaveRaw->field_0x0 & 0xFFFF;
@@ -100,8 +100,9 @@ JASystem::TSimpleWaveBank* JASystem::WSParser::createSimpleWaveBank(void* stream
for (int waveIndex = 0; waveIndex < ctrlRaw->mWaveCount; waveIndex++) {
TWave* waveRaw = JSUConvertOffsetToPtr<TWave>(header, archiveRaw->mWaveOffsets[waveIndex]);
TWaveInfo info;
info.mBlockType = waveRaw->field_0x1;
info.field_0x1 = waveRaw->field_0x2;
info.mBlockType = waveRaw->field_0x0;
info.field_0x1 = waveRaw->field_0x1;
info.field_0x2 = waveRaw->field_0x2;
info.field_0x4 = waveRaw->field_0x4;
info.mWavePtrOffs = waveRaw->mOffset;
info.field_0xc = waveRaw->field_0xc;
@@ -111,8 +112,11 @@ JASystem::TSimpleWaveBank* JASystem::WSParser::createSimpleWaveBank(void* stream
info.field_0x1c = waveRaw->field_0x1c;
info.field_0x20 = waveRaw->field_0x20;
info.field_0x22 = waveRaw->field_0x22;
TCtrlWave* ctrlWaveRaw = JSUConvertOffsetToPtr<TCtrlWave>(header, ctrlRaw->mCtrlWaveOffsets[waveIndex]);
bank->setWaveInfo(ctrlWaveRaw->field_0x0 & 0xFFFF, info);
info.field_0x28 = waveRaw->field_0x28;
bank->setWaveInfo(
(u16)JSUConvertOffsetToPtr<TCtrlWave>(header, ctrlRaw->mCtrlWaveOffsets[waveIndex])->field_0x0,
info
);
}
bank->setFileName(archiveRaw->mFileName);
sUsedHeapSize += priorFreeSize - heap->getFreeSize();