summaryrefslogtreecommitdiff
path: root/src/JSystem/JAudio2/JASDSPInterface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/JSystem/JAudio2/JASDSPInterface.cpp')
-rw-r--r--src/JSystem/JAudio2/JASDSPInterface.cpp128
1 files changed, 94 insertions, 34 deletions
diff --git a/src/JSystem/JAudio2/JASDSPInterface.cpp b/src/JSystem/JAudio2/JASDSPInterface.cpp
index 4d1a2f1d8b..79cf9bb249 100644
--- a/src/JSystem/JAudio2/JASDSPInterface.cpp
+++ b/src/JSystem/JAudio2/JASDSPInterface.cpp
@@ -17,10 +17,34 @@ JASDsp::FxBuf* JASDsp::FX_BUF;
f32 JASDsp::sDSPVolume;
+u16 JASDsp::SEND_TABLE[] = {
+ 0x0D00,
+ 0x0D60,
+ 0x0DC8,
+ 0x0E28,
+ 0x0E88,
+ 0x0EE8,
+ 0x0CA0,
+ 0x0F40,
+ 0x0FA0,
+ 0x0B00,
+ 0x09A0,
+ 0x0000,
+};
+
+u32 JASWaveInfo::one = 1;
+
+#if DEBUG
+s32 JASDsp::dspMutex = 1;
+#endif
+
void JASDsp::boot(void (*param_0)(void*)) {
static bool data_804512F4 = true;
if (data_804512F4) {
DspBoot(param_0);
+#if !PLATFORM_GCN
+ // DsetVARAM(JKRHeap::getAltAramStartAdr());
+#endif
data_804512F4 = false;
}
}
@@ -40,6 +64,7 @@ void JASDsp::syncFrame(u32 param_0, u32 param_1, u32 param_2) {
void JASDsp::setDSPMixerLevel(f32 dsp_level) {
sDSPVolume = dsp_level;
dsp_level *= 4.0f;
+ JUT_ASSERT(277, (0.0 <= dsp_level) && (dsp_level <= 8.0));
DsetMixerLevel(dsp_level);
}
@@ -51,6 +76,10 @@ JASDsp::TChannel* JASDsp::getDSPHandle(int param_0) {
return CH_BUF + param_0;
}
+JASDsp::TChannel* JASDsp::getDSPHandleNc(int param_0) {
+ return (TChannel*)OSCachedToUncached(CH_BUF + param_0);
+}
+
void JASDsp::setFilterTable(s16* param_0, s16* param_1, u32 param_2) {
for (int i = 0; i < param_2; i++) {
*param_0++ = *param_1++;
@@ -398,7 +427,9 @@ u32 const ATTRIBUTE_ALIGN(32) JASDsp::DSPRES_FILTER[320] = {
void JASDsp::initBuffer() {
CH_BUF = new(JASDram, 0x20) TChannel[64];
+ JUT_ASSERT(354, CH_BUF);
FX_BUF = new(JASDram, 0x20) FxBuf[4];
+ JUT_ASSERT(356, FX_BUF);
JASCalc::bzero(CH_BUF, 0x6000);
JASCalc::bzero(FX_BUF, sizeof(FxBuf) * 4);
for (u8 i = 0; i < 4; i++) {
@@ -408,22 +439,7 @@ void JASDsp::initBuffer() {
flushBuffer();
}
-u16 JASDsp::SEND_TABLE[] = {
- 0x0D00,
- 0x0D60,
- 0x0DC8,
- 0x0E28,
- 0x0E88,
- 0x0EE8,
- 0x0CA0,
- 0x0F40,
- 0x0FA0,
- 0x0B00,
- 0x09A0,
- 0x0000,
-};
-
-int JASDsp::setFXLine(u8 param_0, s16* param_1, JASDsp::FxlineConfig_* param_2) {
+int JASDsp::setFXLine(u8 param_0, s16* buffer, JASDsp::FxlineConfig_* param_2) {
FxBuf* puVar3 = FX_BUF + param_0;
JASCriticalSection aJStack_20;
puVar3->field_0x0 = 0;
@@ -433,15 +449,17 @@ int JASDsp::setFXLine(u8 param_0, s16* param_1, JASDsp::FxlineConfig_* param_2)
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);
+ setFilterTable((s16*)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 (buffer != NULL && param_2 != NULL) {
+ u32 bufsize = param_2->field_0xc * 0xa0;
+ puVar3->field_0x4 = buffer;
+ JASCalc::bzero(buffer, bufsize);
+ JUT_ASSERT(420, (reinterpret_cast<u32>(buffer) & 0x1f) == 0);
+ JUT_ASSERT(421, (bufsize & 0x1f) == 0);
+ DCFlushRange(buffer, bufsize);
+ } else if (param_2 == NULL || buffer != NULL) {
+ puVar3->field_0x4 = buffer;
}
if (puVar3->field_0x4 != NULL) {
@@ -453,7 +471,31 @@ int JASDsp::setFXLine(u8 param_0, s16* param_1, JASDsp::FxlineConfig_* param_2)
return 1;
}
+BOOL JASDsp::changeFXLineParam(u8 param_0, u8 param_1, u32 param_2) {
+ JUT_ASSERT(450, dspMutex);
+ FxBuf* buf = &FX_BUF[param_0];
+ switch (param_1) {
+ case 0: buf->field_0x8 = param_2; break;
+ case 1: buf->field_0xc = param_2; break;
+ case 2: buf->field_0xa = param_2; break;
+ case 3: buf->field_0xe = param_2; break;
+ case 4: buf->field_0x2 = param_2; break;
+ case 5: buf->field_0x10[0] = param_2; break;
+ case 6: buf->field_0x10[1] = param_2; break;
+ case 7: buf->field_0x10[2] = param_2; break;
+ case 8: buf->field_0x10[3] = param_2; break;
+ case 9: buf->field_0x10[4] = param_2; break;
+ case 10: buf->field_0x10[5] = param_2; break;
+ case 11: buf->field_0x10[6] = param_2; break;
+ case 12: buf->field_0x10[7] = param_2; break;
+ case 13: setFilterTable((s16*)buf->field_0x10, (s16*)param_2, 8); break;
+ case 14: buf->field_0x0 = param_2; break;
+ }
+ return 1;
+}
+
void JASDsp::TChannel::init() {
+ JUT_ASSERT(489, dspMutex);
mPauseFlag = 0;
mIsFinished = 0;
mForcedStop = 0;
@@ -464,6 +506,7 @@ void JASDsp::TChannel::init() {
}
void JASDsp::TChannel::playStart() {
+ JUT_ASSERT(508, dspMutex);
field_0x10c = 0;
field_0x060 = 0;
field_0x008 = 1;
@@ -480,27 +523,34 @@ void JASDsp::TChannel::playStart() {
}
void JASDsp::TChannel::playStop() {
+ JUT_ASSERT(540, dspMutex);
mIsActive = 0;
}
void JASDsp::TChannel::replyFinishRequest() {
+ JUT_ASSERT(549, dspMutex);
mIsFinished = 0;
mIsActive = 0;
}
void JASDsp::TChannel::forceStop() {
+ JUT_ASSERT(559, dspMutex);
mForcedStop = 1;
}
bool JASDsp::TChannel::isActive() const {
+ JUT_ASSERT(568, dspMutex);
return mIsActive != 0;
}
bool JASDsp::TChannel::isFinish() const {
+ JUT_ASSERT(577, dspMutex);
return mIsFinished != 0;
}
void JASDsp::TChannel::setWaveInfo(JASWaveInfo const& param_0, u32 param_1, u32 param_2) {
+ int i;
+ JUT_ASSERT(610, dspMutex);
field_0x118 = param_1;
static const u8 COMP_BLOCKSAMPLES[8] = {0x10, 0x10, 0x01, 0x01, 0x01, 0x10, 0x10, 0x01};
field_0x064 = COMP_BLOCKSAMPLES[param_0.field_0x00];
@@ -536,19 +586,21 @@ void JASDsp::TChannel::setWaveInfo(JASWaveInfo const& param_0, u32 param_1, u32
break;
}
}
- for (int i = 0; i < 16; i++) {
+ for (i = 0; i < 16; i++) {
field_0x0b0[i] = 0;
}
}
}
void JASDsp::TChannel::setOscInfo(u32 param_0) {
+ JUT_ASSERT(671, dspMutex);
field_0x118 = 0;
field_0x064 = 16;
field_0x100 = param_0;
}
void JASDsp::TChannel::initAutoMixer() {
+ JUT_ASSERT(688, dspMutex);
if (field_0x058) {
field_0x054 = field_0x056;
} else {
@@ -559,6 +611,7 @@ void JASDsp::TChannel::initAutoMixer() {
void JASDsp::TChannel::setAutoMixer(u16 param_0, u8 param_1, u8 param_2, u8 param_3,
u8 param_4) {
+ JUT_ASSERT(709, dspMutex);
field_0x050 = (param_1 << 8) | param_2;
field_0x052 = param_3 << 8 | param_3 << 1;
field_0x056 = param_0;
@@ -566,6 +619,7 @@ void JASDsp::TChannel::setAutoMixer(u16 param_0, u8 param_1, u8 param_2, u8 para
}
void JASDsp::TChannel::setPitch(u16 param_0) {
+ JUT_ASSERT(763, dspMutex);
if (param_0 >= 0x7fff) {
param_0 = 0x7fff;
}
@@ -573,6 +627,7 @@ void JASDsp::TChannel::setPitch(u16 param_0) {
}
void JASDsp::TChannel::setMixerInitVolume(u8 param_0, s16 param_1) {
+ JUT_ASSERT(798, dspMutex);
u16* tmp = field_0x010[param_0];
tmp[2] = param_1;
tmp[1] = param_1;
@@ -580,14 +635,17 @@ void JASDsp::TChannel::setMixerInitVolume(u8 param_0, s16 param_1) {
}
void JASDsp::TChannel::setMixerVolume(u8 param_0, s16 param_1) {
+ u16* tmp;
+ JUT_ASSERT(841, dspMutex);
if (mForcedStop == 0) {
- u16* tmp = field_0x010[param_0];
+ tmp = field_0x010[param_0];
tmp[1] = param_1;
tmp[3] &= 0xff;
}
}
void JASDsp::TChannel::setPauseFlag(u8 param_0) {
+ JUT_ASSERT(863, dspMutex);
mPauseFlag = param_0;
}
@@ -596,7 +654,8 @@ void JASDsp::TChannel::flush() {
}
void JASDsp::TChannel::initFilter() {
- int i;
+ u32 i;
+ JUT_ASSERT(888, dspMutex);
for (i = 0; i < 8; i++) {
fir_filter_params[i] = 0;
}
@@ -609,6 +668,7 @@ void JASDsp::TChannel::initFilter() {
}
void JASDsp::TChannel::setFilterMode(u16 param_0) {
+ JUT_ASSERT(914, dspMutex);
u8 r30 = param_0 & 0x20;
u8 r31 = param_0 & 0x1f;
if (r30) {
@@ -624,24 +684,30 @@ void JASDsp::TChannel::setFilterMode(u16 param_0) {
}
void JASDsp::TChannel::setIIRFilterParam(s16* param_0) {
+ JUT_ASSERT(937, dspMutex);
setFilterTable(iir_filter_params, param_0, 8);
}
void JASDsp::TChannel::setFIR8FilterParam(s16* param_0) {
+ JUT_ASSERT(948, dspMutex);
setFilterTable(fir_filter_params, param_0, 8);
}
void JASDsp::TChannel::setDistFilter(s16 param_0) {
+ JUT_ASSERT(959, dspMutex);
iir_filter_params[4] = param_0;
}
void JASDsp::TChannel::setBusConnect(u8 param_0, u8 param_1) {
+ JUT_ASSERT(973, dspMutex);
u16* tmp = field_0x010[param_0];
static u16 const connect_table[12] = {
0x0000, 0x0D00, 0x0D60, 0x0DC0, 0x0E20, 0x0E80,
0x0EE0, 0x0CA0, 0x0F40, 0x0FA0, 0x0B00, 0x09A0,
};
- tmp[0] = connect_table[param_1];
+ u16 r30 = 0;
+ r30 = connect_table[param_1];
+ tmp[0] = r30;
}
u16 DSP_CreateMap2(u32 param_0) {
@@ -656,9 +722,3 @@ u16 DSP_CreateMap2(u32 param_0) {
}
return r30;
}
-
-u32 JASWaveInfo::one = 1;
-
-#if DEBUG
-s32 dspMutex = 1;
-#endif