// // 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(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 void* JASAudioThread::run() { OSInitFastCast(); JASDriver::initAI(DMACallback); JASDsp::boot(DSPCallback); JASDsp::initBuffer(); JASDSPChannel::initAll(); JASPoolAllocObject_MultiThreaded::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 */