From 4ca50bb60f7077cdeaa2e59a40a7f4a8aae21d38 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Tue, 23 Jan 2024 04:23:15 -0500 Subject: [PATCH] JASWSParser OK, JASInstSense OK --- configure.py | 8 ++++---- include/JSystem/JAudio/JASDSPChannel.h | 26 +++++++++++++------------- src/JSystem/JAudio/JASBNKParser.cpp | 7 ++++--- src/JSystem/JAudio/JASDSPChannel.cpp | 20 +++++++++++--------- src/JSystem/JAudio/JASInstSense.cpp | 13 +++++++------ src/JSystem/JAudio/JASWSParser.cpp | 22 +++++++++++++--------- 6 files changed, 52 insertions(+), 44 deletions(-) diff --git a/configure.py b/configure.py index 12ce79005..5b48ada08 100644 --- a/configure.py +++ b/configure.py @@ -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"), diff --git a/include/JSystem/JAudio/JASDSPChannel.h b/include/JSystem/JAudio/JASDSPChannel.h index ad2af96ee..013ee3f64 100644 --- a/include/JSystem/JAudio/JASDSPChannel.h +++ b/include/JSystem/JAudio/JASDSPChannel.h @@ -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; diff --git a/src/JSystem/JAudio/JASBNKParser.cpp b/src/JSystem/JAudio/JASBNKParser.cpp index 2cc995b04..195008403 100644 --- a/src/JSystem/JAudio/JASBNKParser.cpp +++ b/src/JSystem/JAudio/JASBNKParser.cpp @@ -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(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(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; } diff --git a/src/JSystem/JAudio/JASDSPChannel.cpp b/src/JSystem/JAudio/JASDSPChannel.cpp index 7fa0f425c..077082f72 100644 --- a/src/JSystem/JAudio/JASDSPChannel.cpp +++ b/src/JSystem/JAudio/JASDSPChannel.cpp @@ -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; } diff --git a/src/JSystem/JAudio/JASInstSense.cpp b/src/JSystem/JAudio/JASInstSense.cpp index 35a934da6..2cb36b0f3 100644 --- a/src/JSystem/JAudio/JASInstSense.cpp +++ b/src/JSystem/JAudio/JASInstSense.cpp @@ -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 */ diff --git a/src/JSystem/JAudio/JASWSParser.cpp b/src/JSystem/JAudio/JASWSParser.cpp index 8c8b587b9..435d689a9 100644 --- a/src/JSystem/JAudio/JASWSParser.cpp +++ b/src/JSystem/JAudio/JASWSParser.cpp @@ -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(header, ctrlSceneRaw->mCtrlOffset); TBasicWaveBank::TWaveGroup* waveGroup = bank->getWaveGroup(groupIndex); TWaveArchiveBank* archiveBankRaw = JSUConvertOffsetToPtr(header, header->mArchiveBankOffset); - TWaveArchive* archiveRaw = JSUConvertOffsetToPtr(header, archiveBankRaw->mArchiveOffsets[groupIndex]); + archiveRaw = JSUConvertOffsetToPtr(header, archiveBankRaw->mArchiveOffsets[groupIndex]); waveGroup->setWaveCount(ctrlRaw->mWaveCount); for (int waveIndex = 0; waveIndex < ctrlRaw->mWaveCount; waveIndex++) { TWave* waveRaw = JSUConvertOffsetToPtr(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(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(header, ctrlGroupRaw->mCtrlSceneOffsets[0]); const TCtrl* ctrlRaw = JSUConvertOffsetToPtr(header, ctrlSceneRaw->mCtrlOffset); const TWaveArchiveBank* archiveBankRaw = JSUConvertOffsetToPtr(header, header->mArchiveBankOffset); - const TWaveArchive* archiveRaw = JSUConvertOffsetToPtr(header, archiveBankRaw->mArchiveOffsets[0]); + archiveRaw = JSUConvertOffsetToPtr(header, archiveBankRaw->mArchiveOffsets[0]); for (int waveIndex = 0; waveIndex < ctrlRaw->mWaveCount; waveIndex++) { TCtrlWave* ctrlWaveRaw = JSUConvertOffsetToPtr(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(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(header, ctrlRaw->mCtrlWaveOffsets[waveIndex]); - bank->setWaveInfo(ctrlWaveRaw->field_0x0 & 0xFFFF, info); + info.field_0x28 = waveRaw->field_0x28; + bank->setWaveInfo( + (u16)JSUConvertOffsetToPtr(header, ctrlRaw->mCtrlWaveOffsets[waveIndex])->field_0x0, + info + ); } bank->setFileName(archiveRaw->mFileName); sUsedHeapSize += priorFreeSize - heap->getFreeSize();