JASDSPBuf, JASChAllocQueue OK

This commit is contained in:
LagoLunatic
2023-12-18 15:55:47 -05:00
parent cd7dc9ddd7
commit 2d82197034
12 changed files with 61 additions and 38 deletions
+2 -2
View File
@@ -687,12 +687,12 @@ config.libs = [
Object(Matching, "JSystem/JAudio/JASWaveBankMgr.cpp"),
Object(NonMatching, "JSystem/JAudio/JASBankMgr.cpp"),
Object(Matching, "JSystem/JAudio/JASAudioThread.cpp"),
Object(NonMatching, "JSystem/JAudio/JASDSPBuf.cpp"),
Object(Matching, "JSystem/JAudio/JASDSPBuf.cpp"),
Object(NonMatching, "JSystem/JAudio/JASDSPChannel.cpp"),
Object(Matching, "JSystem/JAudio/JASDSPInterface.cpp"),
Object(Matching, "JSystem/JAudio/JASDriverIF.cpp"),
Object(Matching, "JSystem/JAudio/JASChGlobal.cpp"),
Object(NonMatching, "JSystem/JAudio/JASChAllocQueue.cpp"),
Object(Matching, "JSystem/JAudio/JASChAllocQueue.cpp"),
Object(NonMatching, "JSystem/JAudio/JASChannel.cpp"),
Object(NonMatching, "JSystem/JAudio/JASChannelMgr.cpp"),
Object(NonMatching, "JSystem/JAudio/JASOscillator.cpp"),
+2
View File
@@ -24,6 +24,8 @@ namespace JASystem {
extern int JASVframeCounter;
extern s16* (*extMixCallback)(s32);
extern u8 extMixMode;
inline void JASAiMixLimit16(s32) {} // TODO
}
}
+7
View File
@@ -54,6 +54,13 @@ namespace JASystem {
void extraUpdate(TChannel*, u32);
static void updatecallLogicalChannel(TChannel*, u32);
u8 getNoteOnPriority() const { return field_0x48; }
// TODO
void getLifeTimePriority() const {}
void getReleasePriority() const {}
void setSkipSamples(u32) {}
/* 0x00 */ u8 field_0x0;
/* 0x01 */ u8 field_0x1;
/* 0x02 */ u8 mPauseFlag;
+8 -1
View File
@@ -7,10 +7,17 @@ namespace JASystem {
namespace Kernel {
extern f32 gDacRate;
extern u32 gSubFrames;
extern int gFrameSamples;
extern u32 gFrameSamples;
extern u32 gDacSize;
extern int gOutputRate;
extern int gAiSetting;
inline f32 getDacRate() { return gDacRate; }
inline u32 getSubFrames() { return gSubFrames; }
inline u32 getFrameSamples() { return gFrameSamples; }
inline u32 getDacSize() { return gDacSize; }
inline int getOutputRate() { return gOutputRate; }
inline int getAiSetting() { return gAiSetting; }
}
}
+13 -14
View File
@@ -34,12 +34,12 @@ s16* JASystem::Kernel::dac[3];
/* 8027AE5C-8027AEF8 .text initSystem__Q28JASystem6KernelFv */
void JASystem::Kernel::initSystem() {
for (int i = 0; i < 3; i++) {
dac[i] = (s16*)allocFromSysDram(gDacSize * 2);
Calc::bzero(dac[i], gDacSize * 2);
DCStoreRange(dac[i], gDacSize * 2);
dac[i] = (s16*)allocFromSysDram(getDacSize() * 2);
Calc::bzero(dac[i], getDacSize() * 2);
DCStoreRange(dac[i], getDacSize() * 2);
}
AIInit(NULL);
AIInitDMA(u32(dac[2]), gDacSize * 2);
AIInitDMA(u32(dac[2]), getDacSize() * 2);
}
int JASystem::Kernel::JASUniversalDacCounter;
@@ -61,26 +61,26 @@ void JASystem::Kernel::registerMixCallback(s16* (*param_1)(s32), u8 param_2) {
void JASystem::Kernel::vframeWork() {
static u32 dacp = 0;
JASVframeCounter++;
s16* buf = TDSP_DACBuffer::mixDSP(gDacSize / 2);
Calc::imixcopy(buf + gFrameSamples, buf, dac[dacp], gDacSize / 2);
s16* buf = TDSP_DACBuffer::mixDSP(getDacSize() / 2);
Calc::imixcopy(buf + gFrameSamples, buf, dac[dacp], getDacSize() / 2);
if (extMixCallback) {
switch(extMixMode) {
case 0:
mixMonoTrack(dac[dacp], gDacSize / 2, extMixCallback);
mixMonoTrack(dac[dacp], getDacSize() / 2, extMixCallback);
break;
case 1:
mixMonoTrackWide(dac[dacp], gDacSize / 2, extMixCallback);
mixMonoTrackWide(dac[dacp], getDacSize() / 2, extMixCallback);
break;
case 2:
mixExtraTrack(dac[dacp], gDacSize / 2, extMixCallback);
mixExtraTrack(dac[dacp], getDacSize() / 2, extMixCallback);
break;
case 3:
mixInterleaveTrack(dac[dacp], gDacSize / 2, extMixCallback);
mixInterleaveTrack(dac[dacp], getDacSize() / 2, extMixCallback);
break;
}
}
BOOL enable = OSDisableInterrupts();
DCStoreRange(dac[dacp], gDacSize * 2);
DCStoreRange(dac[dacp], getDacSize() * 2);
OSRestoreInterrupts(enable);
lastRspMadep = dac[dacp];
dacp++;
@@ -92,13 +92,12 @@ void JASystem::Kernel::vframeWork() {
/* 8027B0B8-8027B160 .text updateDac__Q28JASystem6KernelFv */
void JASystem::Kernel::updateDac() {
/* Nonmatching */
if (!useRspMadep) {
useRspMadep = lastRspMadep;
lastRspMadep = NULL;
}
if (useRspMadep) {
AIInitDMA(u32(useRspMadep), gDacSize * 2);
AIInitDMA(u32(useRspMadep), getDacSize() * 2);
useRspMadep = NULL;
} else {
JASUniversalDacCounter++;
@@ -108,7 +107,7 @@ void JASystem::Kernel::updateDac() {
}
HardStream::main();
if (dacCallbackFunc) {
dacCallbackFunc(lastRspMadep, gDacSize / 2);
dacCallbackFunc(lastRspMadep, getDacSize() / 2);
}
}
+1 -1
View File
@@ -57,7 +57,7 @@ void* JASystem::TAudioThread::audioproc(void*) {
sbIsDSPBoot = 1;
}
Driver::init();
AISetDSPSampleRate(Kernel::gAiSetting);
AISetDSPSampleRate(Kernel::getAiSetting());
AIRegisterDMACallback(syncAudio);
AIStartDMA();
while (true) {
+1 -1
View File
@@ -121,7 +121,7 @@ JASystem::TChannel* JASystem::BankMgr::noteOnOsc(TChannelMgr* param_1, int param
channel->field_0xc = 2;
channel->field_0x0 = param_4;
channel->field_0x1 = param_3;
channel->field_0x50 = 16736.016f / Kernel::gDacRate;
channel->field_0x50 = 16736.016f / Kernel::getDacRate();
channel->field_0x58 = channel->field_0x50;
s32 var1 = param_3;
if (var1 < 0) {
+1 -2
View File
@@ -45,10 +45,9 @@ void JASystem::TDSPQueue::deQueue() {
/* 8028B224-8028B288 .text enQueue__Q28JASystem9TDSPQueueFPQ28JASystem8TChannel */
void JASystem::TDSPQueue::enQueue(TChannel* param_1) {
/* Nonmatching */
JSUListIterator<TChannel> it;
for (it = sDspQueueList.getFirst(); it != sDspQueueList.getEnd(); it++) {
if ((it->field_0x48 & 0xff) <= (param_1->field_0x48 & 0xff)) {
if (param_1->getNoteOnPriority() > it->getNoteOnPriority()) {
break;
}
}
+10 -12
View File
@@ -29,20 +29,19 @@ static void dummy() {
/* 802892E0-802893E4 .text init__Q28JASystem14TDSP_DACBufferFv */
void JASystem::TDSP_DACBuffer::init() {
/* Nonmatching */
if (!isInit) {
int r30 = Kernel::gFrameSamples;
u32 frameSamples = Kernel::getFrameSamples();
writeBuffer = numDSPBuf - 1;
readBuffer = 0;
dsp_buf = new (JASDram, 0x20) s16*[numDSPBuf];
for (int i = 0; i < numDSPBuf; i++) {
dsp_buf[i] = new (JASDram, 0x20) s16[r30 * 2];
for (u32 j = 0; j < r30 * 2; j++) {
dsp_buf[i] = new (JASDram, 0x20) s16[frameSamples * 2];
for (u32 j = 0; j < frameSamples * 2; j++) {
dsp_buf[i][j] = 0;
}
DCStoreRange(dsp_buf[i], r30 * 4);
DCStoreRange(dsp_buf[i], frameSamples * 4);
}
OSReport("DSP_DAC buffer size : %d\n", r30 * 2);
OSReport("DSP_DAC buffer size : %d\n", frameSamples * 2);
dspStatus = 0;
isInit = 1;
}
@@ -63,9 +62,8 @@ void JASystem::TDSP_DACBuffer::updateDSP() {
/* 80289438-80289568 .text mixDSP__Q28JASystem14TDSP_DACBufferFl */
s16* JASystem::TDSP_DACBuffer::mixDSP(s32) {
/* Nonmatching */
u8 var4 = readBuffer + 1;
u32 frameSamples = Kernel::gFrameSamples;
u32 frameSamples = Kernel::getFrameSamples();
if (var4 == numDSPBuf) {
var4 = 0;
}
@@ -97,7 +95,7 @@ void (*JASystem::TDSP_DACBuffer::callback)(s16*, u32);
/* 80289568-8028963C .text finishDSPFrame__Q28JASystem14TDSP_DACBufferFv */
void JASystem::TDSP_DACBuffer::finishDSPFrame() {
u8 var2 = writeBuffer + 1;
u32 r31 = Kernel::gFrameSamples;
u32 frameSamples = Kernel::getFrameSamples();
if (var2 == numDSPBuf) {
var2 = 0;
}
@@ -106,12 +104,12 @@ void JASystem::TDSP_DACBuffer::finishDSPFrame() {
return;
}
writeBuffer = var2;
TAudioThread::snIntCount = Kernel::gSubFrames;
TAudioThread::snIntCount = Kernel::getSubFrames();
Kernel::probeStart(7, "DSP-MAIN");
DsyncFrame2(Kernel::gSubFrames, u32(dsp_buf[writeBuffer]), u32(&dsp_buf[writeBuffer][r31]));
DsyncFrame2(Kernel::getSubFrames(), u32(dsp_buf[writeBuffer]), u32(&dsp_buf[writeBuffer][frameSamples]));
dspStatus = 1;
updateDSP();
if (callback) {
callback(dsp_buf[writeBuffer], r31);
callback(dsp_buf[writeBuffer], frameSamples);
}
}
+2 -2
View File
@@ -249,11 +249,11 @@ f32 JASystem::DSP_LIMIT_RATIO = 1.1f;
/* 80289E68-8028A04C .text updateAll__Q28JASystem11TDSPChannelFv */
void JASystem::TDSPChannel::updateAll() {
/* Nonmatching */
if (Kernel::gSubFrames <= 10) {
if (Kernel::getSubFrames() <= 10) {
OSTick time = OSGetTick();
OSTick var3 = time - old_time;
old_time = time;
u32 var2 = Kernel::gSubFrames - TAudioThread::snIntCount;
u32 var2 = Kernel::getSubFrames() - TAudioThread::snIntCount;
history[var2] = var3;
if (var2) {
if (f32(history[0]) / var3 < DSP_LIMIT_RATIO) {
+1 -1
View File
@@ -7,7 +7,7 @@
f32 JASystem::Kernel::gDacRate = 32028.5f;
u32 JASystem::Kernel::gSubFrames = 7;
int JASystem::Kernel::gFrameSamples = 560;
u32 JASystem::Kernel::gFrameSamples = 560;
u32 JASystem::Kernel::gDacSize = 1120;
int JASystem::Kernel::gOutputRate;
int JASystem::Kernel::gAiSetting;
+13 -2
View File
@@ -10,6 +10,7 @@
#include "JSystem/JAudio/JASChGlobal.h"
#include "JSystem/JAudio/JASPlayer.h"
#include "JSystem/JAudio/JASSystemHeap.h"
#include "JSystem/JAudio/JASRate.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "JSystem/JUtility/JUTAssert.h"
@@ -481,8 +482,18 @@ void JASystem::TTrack::updateSeq(u32, bool) {
}
/* 802825A0-8028265C .text seqTimeToDspTime__Q28JASystem6TTrackFlUc */
int JASystem::TTrack::seqTimeToDspTime(s32, u8) {
/* Nonmatching */
int JASystem::TTrack::seqTimeToDspTime(s32 param_1, u8 param_2) {
f32 f1 = ((f32)param_1 * (f32)param_2) / 100.0f;
if (field_0x387) {
f1 /= field_0x368;
} else {
f1 = 120.0f * f1;
f1 /= field_0x378;
if (Kernel::getOutputRate() == 0) {
f1 = (f1 * Kernel::getSubFrames()) / 10.0f;
}
}
return f1;
}
/* 8028265C-8028278C .text setParam__Q28JASystem6TTrackFifi */