mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-23 06:54:16 -04:00
JASDSPBuf, JASChAllocQueue OK
This commit is contained in:
+2
-2
@@ -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"),
|
||||
|
||||
@@ -24,6 +24,8 @@ namespace JASystem {
|
||||
extern int JASVframeCounter;
|
||||
extern s16* (*extMixCallback)(s32);
|
||||
extern u8 extMixMode;
|
||||
|
||||
inline void JASAiMixLimit16(s32) {} // TODO
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ void* JASystem::TAudioThread::audioproc(void*) {
|
||||
sbIsDSPBoot = 1;
|
||||
}
|
||||
Driver::init();
|
||||
AISetDSPSampleRate(Kernel::gAiSetting);
|
||||
AISetDSPSampleRate(Kernel::getAiSetting());
|
||||
AIRegisterDMACallback(syncAudio);
|
||||
AIStartDMA();
|
||||
while (true) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user