summaryrefslogtreecommitdiff
path: root/libs/JSystem/JAudio2/JASDSPInterface.cpp
diff options
context:
space:
mode:
authorJcw87 <Jcw87@users.noreply.github.com>2023-09-02 15:34:50 -0700
committerGitHub <noreply@github.com>2023-09-03 01:34:50 +0300
commitce78c773b732cff35644260c8fa33a11547d27db (patch)
treea93fb556d7d96f02726fdf68f9cab5d6d7faceac /libs/JSystem/JAudio2/JASDSPInterface.cpp
parent71b055104099688a2cf227de535095da246408e2 (diff)
JASDriverIF, JASAiCtrl, JASDSPInterface (#1907)
* JASDriverIF * JASDriverIF sinit * JASAiCtrl * JASDSPInterface
Diffstat (limited to 'libs/JSystem/JAudio2/JASDSPInterface.cpp')
-rw-r--r--libs/JSystem/JAudio2/JASDSPInterface.cpp580
1 files changed, 235 insertions, 345 deletions
diff --git a/libs/JSystem/JAudio2/JASDSPInterface.cpp b/libs/JSystem/JAudio2/JASDSPInterface.cpp
index c58efa131b..240fcf5efb 100644
--- a/libs/JSystem/JAudio2/JASDSPInterface.cpp
+++ b/libs/JSystem/JAudio2/JASDSPInterface.cpp
@@ -4,70 +4,15 @@
//
#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/JKernel/JKRSolidHeap.h"
#include "dol2asm.h"
-
-//
-// Types:
-//
-
-struct JKRHeap {};
-
-struct JASWaveInfo {
- static u32 one[1 + 1 /* padding */];
-};
-
-struct JASDsp {
- struct FxlineConfig_ {};
-
- struct TChannel {
- /* 8029DCA4 */ void init();
- /* 8029DCE0 */ void playStart();
- /* 8029DD44 */ void playStop();
- /* 8029DD50 */ void replyFinishRequest();
- /* 8029DD60 */ void forceStop();
- /* 8029DD6C */ void isActive() const;
- /* 8029DD7C */ void isFinish() const;
- /* 8029DD8C */ void setWaveInfo(JASWaveInfo const&, u32, u32);
- /* 8029DEAC */ void setOscInfo(u32);
- /* 8029DEC4 */ void initAutoMixer();
- /* 8029DEF0 */ void setAutoMixer(u16, u8, u8, u8, u8);
- /* 8029DF1C */ void setPitch(u16);
- /* 8029DF34 */ void setMixerInitVolume(u8, s16);
- /* 8029DF54 */ void setMixerVolume(u8, s16);
- /* 8029DF80 */ void setPauseFlag(u8);
- /* 8029DF8C */ void flush();
- /* 8029DFB0 */ void initFilter();
- /* 8029E00C */ void setFilterMode(u16);
- /* 8029E044 */ void setIIRFilterParam(s16*);
- /* 8029E06C */ void setFIR8FilterParam(s16*);
- /* 8029E094 */ void setDistFilter(s16);
- /* 8029E09C */ void setBusConnect(u8, u8);
- };
-
- /* 8029D958 */ void boot(void (*)(void*));
- /* 8029D9A4 */ void releaseHalt(u32);
- /* 8029D9C4 */ void finishWork(u16);
- /* 8029D9E4 */ void syncFrame(u32, u32, u32);
- /* 8029DA04 */ void setDSPMixerLevel(f32);
- /* 8029DA30 */ void getDSPMixerLevel();
- /* 8029DA38 */ void getDSPHandle(int);
- /* 8029DA48 */ void setFilterTable(s16*, s16*, u32);
- /* 8029DA6C */ void flushBuffer();
- /* 8029DAA0 */ void invalChannelAll();
- /* 8029DAC8 */ void initBuffer();
- /* 8029DB78 */ void setFXLine(u8, s16*, JASDsp::FxlineConfig_*);
-
- static u8 const DSPADPCM_FILTER[64];
- static void* const DSPRES_FILTER[320];
- static u8 SEND_TABLE[24 + 24 /* padding */];
- static u8 CH_BUF[4];
- static u8 FX_BUF[4];
- static f32 sDSPVolume;
-};
-
-struct JASCalc {
- /* 8028F480 */ void bzero(void*, u32);
-};
+#include "dolphin/dsp/dsp.h"
+#include "dolphin/os/OSCache.h"
//
// Forward References:
@@ -129,15 +74,10 @@ extern "C" void DspBoot__FPFPv_v();
extern "C" void DspFinishWork__FUs();
extern "C" void DsyncFrame2__FUlUlUl();
extern "C" void* __nwa__FUlP7JKRHeapi();
-extern "C" void DCInvalidateRange();
-extern "C" void DCFlushRange();
-extern "C" void OSDisableInterrupts();
-extern "C" void OSRestoreInterrupts();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
-extern "C" extern u8 JASDram[4];
//
// Declarations:
@@ -145,122 +85,76 @@ extern "C" extern u8 JASDram[4];
/* ############################################################################################## */
/* 804512E8-804512EC 0007E8 0004+00 5/5 0/0 0/0 .sbss CH_BUF__6JASDsp */
-u8 JASDsp::CH_BUF[4];
+JASDsp::TChannel* JASDsp::CH_BUF;
/* 804512EC-804512F0 0007EC 0004+00 3/3 0/0 0/0 .sbss FX_BUF__6JASDsp */
-u8 JASDsp::FX_BUF[4];
+void* JASDsp::FX_BUF;
/* 804512F0-804512F4 0007F0 0004+00 2/2 0/0 0/0 .sbss sDSPVolume__6JASDsp */
f32 JASDsp::sDSPVolume;
-/* 804512F4-804512F8 -00001 0004+00 1/1 0/0 0/0 .sbss None */
-/* 804512F4 0001+00 data_804512F4 None */
-/* 804512F5 0003+00 data_804512F5 None */
-static u8 struct_804512F4[4];
-
/* 8029D958-8029D9A4 298298 004C+00 0/0 1/1 0/0 .text boot__6JASDspFPFPv_v */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::boot(void (*param_0)(void*)) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/boot__6JASDspFPFPv_v.s"
+void JASDsp::boot(void (*param_0)(void*)) {
+ static bool data_804512F4 = true;
+ if (data_804512F4) {
+ DspBoot(param_0);
+ data_804512F4 = false;
+ }
}
-#pragma pop
/* 8029D9A4-8029D9C4 2982E4 0020+00 0/0 1/1 0/0 .text releaseHalt__6JASDspFUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::releaseHalt(u32 param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/releaseHalt__6JASDspFUl.s"
+void JASDsp::releaseHalt(u32 param_0) {
+ DSPReleaseHalt2(param_0);
}
-#pragma pop
/* 8029D9C4-8029D9E4 298304 0020+00 0/0 1/1 0/0 .text finishWork__6JASDspFUs */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::finishWork(u16 param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/finishWork__6JASDspFUs.s"
+void JASDsp::finishWork(u16 param_0) {
+ DspFinishWork(param_0);
}
-#pragma pop
/* 8029D9E4-8029DA04 298324 0020+00 0/0 1/1 0/0 .text syncFrame__6JASDspFUlUlUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::syncFrame(u32 param_0, u32 param_1, u32 param_2) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/syncFrame__6JASDspFUlUlUl.s"
+void JASDsp::syncFrame(u32 param_0, u32 param_1, u32 param_2) {
+ DsyncFrame2(param_0, param_1, param_2);
}
-#pragma pop
/* ############################################################################################## */
/* 80455748-8045574C 003D48 0004+00 1/1 0/0 0/0 .sdata2 @176 */
SECTION_SDATA2 static f32 lit_176 = 4.0f;
/* 8029DA04-8029DA30 298344 002C+00 0/0 1/1 0/0 .text setDSPMixerLevel__6JASDspFf */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::setDSPMixerLevel(f32 param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/setDSPMixerLevel__6JASDspFf.s"
+void JASDsp::setDSPMixerLevel(f32 dsp_level) {
+ sDSPVolume = dsp_level;
+ dsp_level *= 4.0f;
+ DsetMixerLevel(dsp_level);
}
-#pragma pop
/* 8029DA30-8029DA38 298370 0008+00 0/0 1/1 0/0 .text getDSPMixerLevel__6JASDspFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::getDSPMixerLevel() {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/getDSPMixerLevel__6JASDspFv.s"
+f32 JASDsp::getDSPMixerLevel() {
+ return sDSPVolume;
}
-#pragma pop
/* 8029DA38-8029DA48 298378 0010+00 0/0 1/1 0/0 .text getDSPHandle__6JASDspFi */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::getDSPHandle(int param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/getDSPHandle__6JASDspFi.s"
+JASDsp::TChannel* JASDsp::getDSPHandle(int param_0) {
+ return CH_BUF + param_0;
}
-#pragma pop
/* 8029DA48-8029DA6C 298388 0024+00 3/3 0/0 0/0 .text setFilterTable__6JASDspFPsPsUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::setFilterTable(s16* param_0, s16* param_1, u32 param_2) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/setFilterTable__6JASDspFPsPsUl.s"
+void JASDsp::setFilterTable(s16* param_0, s16* param_1, u32 param_2) {
+ for (int i = 0; i < param_2; i++) {
+ *param_0++ = *param_1++;
+ }
}
-#pragma pop
/* 8029DA6C-8029DAA0 2983AC 0034+00 1/1 0/0 0/0 .text flushBuffer__6JASDspFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::flushBuffer() {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/flushBuffer__6JASDspFv.s"
+void JASDsp::flushBuffer() {
+ DCFlushRange(CH_BUF, sizeof(TChannel) * 64);
+ DCFlushRange(FX_BUF, 0x80);
}
-#pragma pop
/* 8029DAA0-8029DAC8 2983E0 0028+00 0/0 1/1 0/0 .text invalChannelAll__6JASDspFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::invalChannelAll() {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/invalChannelAll__6JASDspFv.s"
+void JASDsp::invalChannelAll() {
+ DCInvalidateRange(CH_BUF, sizeof(TChannel) * 64);
}
-#pragma pop
/* ############################################################################################## */
/* 8039B360-8039B3A0 0279C0 0040+00 1/1 0/0 0/0 .rodata DSPADPCM_FILTER__6JASDsp */
@@ -598,67 +492,46 @@ SECTION_RODATA void* const JASDsp::DSPRES_FILTER[320] = {
COMPILER_STRIP_GATE(0x8039B3A0, &JASDsp::DSPRES_FILTER);
/* 8029DAC8-8029DB78 298408 00B0+00 0/0 1/1 0/0 .text initBuffer__6JASDspFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::initBuffer() {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/initBuffer__6JASDspFv.s"
+void JASDsp::initBuffer() {
+ CH_BUF = new(JASDram, 0x20) TChannel[64];
+ FX_BUF = new(JASDram, 0x20) u8[0x80];
+ JASCalc::bzero(CH_BUF, 0x6000);
+ JASCalc::bzero(FX_BUF, 0x80);
+ 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();
}
-#pragma pop
/* ############################################################################################## */
/* 803C78F0-803C7920 024A10 0018+18 1/1 0/0 0/0 .data SEND_TABLE__6JASDsp */
-SECTION_DATA u8 JASDsp::SEND_TABLE[24 + 24 /* padding */] = {
- 0x0D,
- 0x00,
- 0x0D,
- 0x60,
- 0x0D,
- 0xC8,
- 0x0E,
- 0x28,
- 0x0E,
- 0x88,
- 0x0E,
- 0xE8,
- 0x0C,
- 0xA0,
- 0x0F,
- 0x40,
- 0x0F,
- 0xA0,
- 0x0B,
- 0x00,
- 0x09,
- 0xA0,
- 0x00,
- 0x00,
+SECTION_DATA u16 JASDsp::SEND_TABLE[12 + 12 /* padding */] = {
+ 0x0D00,
+ 0x0D60,
+ 0x0DC8,
+ 0x0E28,
+ 0x0E88,
+ 0x0EE8,
+ 0x0CA0,
+ 0x0F40,
+ 0x0FA0,
+ 0x0B00,
+ 0x09A0,
+ 0x0000,
/* padding */
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
+ 0x0000,
+ 0x0000,
+ 0x0000,
+ 0x0000,
+ 0x0000,
+ 0x0000,
+ 0x0000,
+ 0x0000,
+ 0x0000,
+ 0x0000,
+ 0x0000,
+ 0x0000,
};
/* 8029DB78-8029DCA4 2984B8 012C+00 1/1 1/1 0/0 .text
@@ -673,16 +546,34 @@ asm void JASDsp::setFXLine(u8 param_0, s16* param_1, JASDsp::FxlineConfig_* para
#pragma pop
/* 8029DCA4-8029DCE0 2985E4 003C+00 0/0 1/1 0/0 .text init__Q26JASDsp8TChannelFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::init() {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/init__Q26JASDsp8TChannelFv.s"
+void JASDsp::TChannel::init() {
+ mPauseFlag = 0;
+ mIsFinished = 0;
+ mForcedStop = 0;
+ mIsActive = 0;
+ field_0x058 = 0;
+ field_0x068 = 0;
+ initFilter();
}
-#pragma pop
/* 8029DCE0-8029DD44 298620 0064+00 0/0 1/1 0/0 .text playStart__Q26JASDsp8TChannelFv */
+// regswap
+#ifdef NONMATCHING
+void JASDsp::TChannel::playStart() {
+ field_0x10c = 0;
+ field_0x060 = 0;
+ field_0x008 = 1;
+ field_0x066 = 0;
+ for (int i = 0; i < 4; i++) {
+ field_0x078[i] = 0;
+ field_0x0a8[i] = 0;
+ }
+ for (int i = 0; i < 20; i++) {
+ field_0x080[i] = 0;
+ }
+ mIsActive = 1;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -691,56 +582,33 @@ asm void JASDsp::TChannel::playStart() {
#include "asm/JSystem/JAudio2/JASDSPInterface/playStart__Q26JASDsp8TChannelFv.s"
}
#pragma pop
+#endif
/* 8029DD44-8029DD50 298684 000C+00 0/0 1/1 0/0 .text playStop__Q26JASDsp8TChannelFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::playStop() {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/playStop__Q26JASDsp8TChannelFv.s"
+void JASDsp::TChannel::playStop() {
+ mIsActive = 0;
}
-#pragma pop
/* 8029DD50-8029DD60 298690 0010+00 0/0 1/1 0/0 .text replyFinishRequest__Q26JASDsp8TChannelFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::replyFinishRequest() {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/replyFinishRequest__Q26JASDsp8TChannelFv.s"
+void JASDsp::TChannel::replyFinishRequest() {
+ mIsFinished = 0;
+ mIsActive = 0;
}
-#pragma pop
/* 8029DD60-8029DD6C 2986A0 000C+00 0/0 1/1 0/0 .text forceStop__Q26JASDsp8TChannelFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::forceStop() {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/forceStop__Q26JASDsp8TChannelFv.s"
+void JASDsp::TChannel::forceStop() {
+ mForcedStop = 1;
}
-#pragma pop
/* 8029DD6C-8029DD7C 2986AC 0010+00 1/1 0/0 0/0 .text isActive__Q26JASDsp8TChannelCFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::isActive() const {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/isActive__Q26JASDsp8TChannelCFv.s"
+bool JASDsp::TChannel::isActive() const {
+ return mIsActive != 0;
}
-#pragma pop
/* 8029DD7C-8029DD8C 2986BC 0010+00 0/0 1/1 0/0 .text isFinish__Q26JASDsp8TChannelCFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::isFinish() const {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/isFinish__Q26JASDsp8TChannelCFv.s"
+bool JASDsp::TChannel::isFinish() const {
+ return mIsFinished != 0;
}
-#pragma pop
/* ############################################################################################## */
/* 8045574C-80455754 003D4C 0008+00 1/1 0/0 0/0 .sdata2 COMP_BLOCKSAMPLES$331 */
@@ -755,102 +623,127 @@ SECTION_SDATA2 static u8 COMP_BLOCKBYTES[8] = {
/* 8029DD8C-8029DEAC 2986CC 0120+00 0/0 1/1 0/0 .text
* setWaveInfo__Q26JASDsp8TChannelFRC11JASWaveInfoUlUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::setWaveInfo(JASWaveInfo const& param_0, u32 param_1, u32 param_2) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/setWaveInfo__Q26JASDsp8TChannelFRC11JASWaveInfoUlUl.s"
+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;
+ }
+ }
}
-#pragma pop
/* 8029DEAC-8029DEC4 2987EC 0018+00 0/0 1/1 0/0 .text setOscInfo__Q26JASDsp8TChannelFUl
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::setOscInfo(u32 param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/setOscInfo__Q26JASDsp8TChannelFUl.s"
+void JASDsp::TChannel::setOscInfo(u32 param_0) {
+ field_0x118 = 0;
+ field_0x064 = 16;
+ field_0x100 = param_0;
}
-#pragma pop
/* 8029DEC4-8029DEF0 298804 002C+00 0/0 1/1 0/0 .text initAutoMixer__Q26JASDsp8TChannelFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::initAutoMixer() {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/initAutoMixer__Q26JASDsp8TChannelFv.s"
+void JASDsp::TChannel::initAutoMixer() {
+ if (field_0x058) {
+ field_0x054 = field_0x056;
+ } else {
+ field_0x054 = 0;
+ field_0x058 = 1;
+ }
}
-#pragma pop
/* 8029DEF0-8029DF1C 298830 002C+00 0/0 1/1 0/0 .text setAutoMixer__Q26JASDsp8TChannelFUsUcUcUcUc
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::setAutoMixer(u16 param_0, u8 param_1, u8 param_2, u8 param_3,
+void JASDsp::TChannel::setAutoMixer(u16 param_0, u8 param_1, u8 param_2, u8 param_3,
u8 param_4) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/setAutoMixer__Q26JASDsp8TChannelFUsUcUcUcUc.s"
+ field_0x050 = (param_1 << 8) | param_2;
+ field_0x052 = param_3 << 8 | param_3 << 1;
+ field_0x056 = param_0;
+ field_0x058 = 1;
}
-#pragma pop
/* 8029DF1C-8029DF34 29885C 0018+00 0/0 2/2 0/0 .text setPitch__Q26JASDsp8TChannelFUs */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::setPitch(u16 param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/setPitch__Q26JASDsp8TChannelFUs.s"
+void JASDsp::TChannel::setPitch(u16 param_0) {
+ if (param_0 >= 0x7fff) {
+ param_0 = 0x7fff;
+ }
+ mPitch = param_0;
}
-#pragma pop
/* 8029DF34-8029DF54 298874 0020+00 0/0 1/1 0/0 .text setMixerInitVolume__Q26JASDsp8TChannelFUcs
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::setMixerInitVolume(u8 param_0, s16 param_1) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/setMixerInitVolume__Q26JASDsp8TChannelFUcs.s"
+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;
}
-#pragma pop
/* 8029DF54-8029DF80 298894 002C+00 0/0 1/1 0/0 .text setMixerVolume__Q26JASDsp8TChannelFUcs */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::setMixerVolume(u8 param_0, s16 param_1) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/setMixerVolume__Q26JASDsp8TChannelFUcs.s"
+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;
+ }
}
-#pragma pop
/* 8029DF80-8029DF8C 2988C0 000C+00 0/0 2/2 0/0 .text setPauseFlag__Q26JASDsp8TChannelFUc
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::setPauseFlag(u8 param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/setPauseFlag__Q26JASDsp8TChannelFUc.s"
+void JASDsp::TChannel::setPauseFlag(u8 param_0) {
+ mPauseFlag = param_0;
}
-#pragma pop
/* 8029DF8C-8029DFB0 2988CC 0024+00 0/0 1/1 0/0 .text flush__Q26JASDsp8TChannelFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::flush() {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/flush__Q26JASDsp8TChannelFv.s"
+void JASDsp::TChannel::flush() {
+ DCFlushRange(this, sizeof(*this));
}
-#pragma pop
/* 8029DFB0-8029E00C 2988F0 005C+00 1/1 0/0 0/0 .text initFilter__Q26JASDsp8TChannelFv */
+// regswap
+#ifdef NONMATCHING
+void JASDsp::TChannel::initFilter() {
+ for (int i = 0; i < 8; i++) {
+ fir_filter_params[i] = 0;
+ }
+ fir_filter_params[0] = 0x7fff;
+ for (int i = 0; i < 8; i++) {
+ iir_filter_params[i] = 0;
+ }
+ iir_filter_params[0] = 0x7fff;
+ iir_filter_params[4] = 0;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -859,70 +752,67 @@ asm void JASDsp::TChannel::initFilter() {
#include "asm/JSystem/JAudio2/JASDSPInterface/initFilter__Q26JASDsp8TChannelFv.s"
}
#pragma pop
+#endif
/* 8029E00C-8029E044 29894C 0038+00 0/0 1/1 0/0 .text setFilterMode__Q26JASDsp8TChannelFUs */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::setFilterMode(u16 param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/setFilterMode__Q26JASDsp8TChannelFUs.s"
+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;
}
-#pragma pop
/* 8029E044-8029E06C 298984 0028+00 0/0 1/1 0/0 .text setIIRFilterParam__Q26JASDsp8TChannelFPs */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::setIIRFilterParam(s16* param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/setIIRFilterParam__Q26JASDsp8TChannelFPs.s"
+void JASDsp::TChannel::setIIRFilterParam(s16* param_0) {
+ setFilterTable(iir_filter_params, param_0, 8);
}
-#pragma pop
/* 8029E06C-8029E094 2989AC 0028+00 0/0 1/1 0/0 .text setFIR8FilterParam__Q26JASDsp8TChannelFPs */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::setFIR8FilterParam(s16* param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/setFIR8FilterParam__Q26JASDsp8TChannelFPs.s"
+void JASDsp::TChannel::setFIR8FilterParam(s16* param_0) {
+ setFilterTable(fir_filter_params, param_0, 8);
}
-#pragma pop
/* 8029E094-8029E09C -00001 0008+00 0/0 0/0 0/0 .text setDistFilter__Q26JASDsp8TChannelFs
*/
void JASDsp::TChannel::setDistFilter(s16 param_0) {
- *(u16*)(((u8*)this) + 336) /* this->field_0x150 */ = (u16)(param_0);
+ iir_filter_params[4] = param_0;
}
/* ############################################################################################## */
/* 8039B8A0-8039B8B8 027F00 0018+00 1/1 0/0 0/0 .rodata connect_table$463 */
-SECTION_RODATA static u8 const connect_table[24] = {
- 0x00, 0x00, 0x0D, 0x00, 0x0D, 0x60, 0x0D, 0xC0, 0x0E, 0x20, 0x0E, 0x80,
- 0x0E, 0xE0, 0x0C, 0xA0, 0x0F, 0x40, 0x0F, 0xA0, 0x0B, 0x00, 0x09, 0xA0,
+SECTION_RODATA static u16 const connect_table[12] = {
+ 0x0000, 0x0D00, 0x0D60, 0x0DC0, 0x0E20, 0x0E80,
+ 0x0EE0, 0x0CA0, 0x0F40, 0x0FA0, 0x0B00, 0x09A0,
};
COMPILER_STRIP_GATE(0x8039B8A0, &connect_table);
/* 8029E09C-8029E0BC 2989DC 0020+00 0/0 1/1 0/0 .text setBusConnect__Q26JASDsp8TChannelFUcUc */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JASDsp::TChannel::setBusConnect(u8 param_0, u8 param_1) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/setBusConnect__Q26JASDsp8TChannelFUcUc.s"
+void JASDsp::TChannel::setBusConnect(u8 param_0, u8 param_1) {
+ u16* tmp = field_0x010[param_0];
+ tmp[0] = connect_table[param_1];
}
-#pragma pop
/* 8029E0BC-8029E130 2989FC 0074+00 0/0 1/1 0/0 .text DSP_CreateMap2__FUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void DSP_CreateMap2(u32 param_0) {
- nofralloc
-#include "asm/JSystem/JAudio2/JASDSPInterface/DSP_CreateMap2__FUl.s"
+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;
}
-#pragma pop
/* ############################################################################################## */
/* 804507B8-804507C0 000238 0004+04 0/0 5/5 0/0 .sdata one__11JASWaveInfo */