Files
dusklight/src/JSystem/JAudio2/JASAudioThread.cpp
T
Caroline Madsen 5650c7fe08 JAudio2 and Z2AudioLib work (#2223)
* JAudio2 and Z2AudioLib work

* check1stDynamicWave matched
2024-10-24 02:25:13 +03:00

125 lines
3.6 KiB
C++

//
// Generated By: dol2asm
// Translation Unit: JASAudioThread
//
#include "JSystem/JAudio2/JASAudioThread.h"
#include "JSystem/JAudio2/JASAiCtrl.h"
#include "JSystem/JAudio2/JASDriverIF.h"
#include "JSystem/JAudio2/JASDSPChannel.h"
#include "JSystem/JAudio2/JASDSPInterface.h"
#include "JSystem/JAudio2/JASHeapCtrl.h"
#include "JSystem/JAudio2/JASProbe.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "dolphin/dsp.h"
/* 8029CCDC-8029CD4C 29761C 0070+00 1/1 0/0 0/0 .text __ct__14JASAudioThreadFiiUl */
JASAudioThread::JASAudioThread(int stackSize, int msgCount, u32 threadPriority)
:
JKRThread(JASDram, threadPriority, msgCount, stackSize),
JASGlobalInstance<JASAudioThread>(true)
{
sbPauseFlag = false;
OSInitThreadQueue(&sThreadQueue);
}
/* 8029CD4C-8029CDC0 29768C 0074+00 0/0 1/1 0/0 .text create__14JASAudioThreadFl */
void JASAudioThread::create(long threadPriority) {
JASAudioThread* sAudioThread = new (JASDram, 0) JASAudioThread(threadPriority, 0x10, 0x1400);
sAudioThread->setCurrentHeap(JKRGetSystemHeap());
sAudioThread->resume();
}
/* 8029CDC0-8029CDEC 297700 002C+00 0/0 1/1 0/0 .text stop__14JASAudioThreadFv */
void JASAudioThread::stop() {
jamMessageBlock((void*)2);
}
/* 804512D8-804512E0 0007D8 0004+04 1/1 2/2 0/0 .sbss snIntCount__14JASAudioThread */
volatile int JASAudioThread::snIntCount;
class Lock {
public:
Lock() {
mInterrupts = OSDisableInterrupts();
}
~Lock() {
OSRestoreInterrupts(mInterrupts);
}
private:
BOOL mInterrupts;
};
class JASChannel {
u8 filler[0x108];
};
/* 8029CDEC-8029CF68 29772C 017C+00 1/0 0/0 0/0 .text run__14JASAudioThreadFv */
// NONMATCHING location of JASPoolAllocObject_MultiThreaded<JASChannel>
void* JASAudioThread::run() {
OSInitFastCast();
JASDriver::initAI(DMACallback);
JASDsp::boot(DSPCallback);
JASDsp::initBuffer();
JASDSPChannel::initAll();
JASPoolAllocObject_MultiThreaded<JASChannel>::newMemPool(0x48);
JASDriver::startDMA();
while (true) {
OSMessage msg = waitMessageBlock();
switch ((int)msg) {
case AUDIOMSG_DMA:
if (sbPauseFlag) {
JASDriver::stopDMA();
OSSleepThread(&sThreadQueue);
}
JASDriver::updateDac();
JASDriver::updateDacCallback();
break;
case AUDIOMSG_DSP:
snIntCount--;
if (snIntCount == 0) {
JASProbe::stop(7);
JASDriver::finishDSPFrame();
} else {
JASProbe::start(2, "SFR_DSP");
JASDriver::updateDSP();
JASProbe::stop(2);
}
break;
case AUDIOMSG_STOP:
JASDriver::stopDMA();
OSExitThread(NULL);
break;
}
}
}
/* 8029CF68-8029CFBC 2978A8 0054+00 1/1 0/0 0/0 .text DMACallback__14JASAudioThreadFv */
void JASAudioThread::DMACallback() {
JASAudioThread* thread = getInstance();
JASProbe::stop(4);
JASProbe::start(4, "UPDATE-DAC");
thread->sendMessage((void*)AUDIOMSG_DMA);
}
/* 8029CFBC-8029D028 2978FC 006C+00 1/1 0/0 0/0 .text DSPCallback__14JASAudioThreadFPv */
void JASAudioThread::DSPCallback(void*) {
JASAudioThread* thread = getInstance();
while (DSPCheckMailFromDSP() == 0) { }
u32 mail = DSPReadMailFromDSP();
if (mail >> 0x10 == 0xF355) {
if ((mail & 0xFF00) == 0xFF00) {
thread->sendMessage((void*)AUDIOMSG_DSP);
} else {
JASDsp::finishWork(mail);
}
}
}
/* 8039B338-8039B338 027998 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */