summaryrefslogtreecommitdiff
path: root/src/JSystem/JAudio2/JASAudioThread.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2024-10-10 07:29:58 -0700
committerGitHub <noreply@github.com>2024-10-10 08:29:58 -0600
commit12eb254d769d84743b5cc6cd5424057c57eaf0ad (patch)
tree4509be332b2ccfc6fe939f47740d68f7746eca3e /src/JSystem/JAudio2/JASAudioThread.cpp
parent2fd702c0ac170a789af879b8b92a82d4dcc9080c (diff)
switch to dtk setup (#2203)
* switch to dtk setup * some cleanup / fixes * cleanup d_a_alink literals * Restore doxygen, update CI & README.md (#1) * Fix build image ref (#2) --------- Co-authored-by: Luke Street <luke@street.dev>
Diffstat (limited to 'src/JSystem/JAudio2/JASAudioThread.cpp')
-rw-r--r--src/JSystem/JAudio2/JASAudioThread.cpp221
1 files changed, 221 insertions, 0 deletions
diff --git a/src/JSystem/JAudio2/JASAudioThread.cpp b/src/JSystem/JAudio2/JASAudioThread.cpp
new file mode 100644
index 0000000000..a9ad8237f4
--- /dev/null
+++ b/src/JSystem/JAudio2/JASAudioThread.cpp
@@ -0,0 +1,221 @@
+//
+// Generated By: dol2asm
+// Translation Unit: JASAudioThread
+//
+
+#include "JSystem/JAudio2/JASAudioThread.h"
+#include "JSystem/JAudio2/JASHeapCtrl.h"
+#include "JSystem/JKernel/JKRSolidHeap.h"
+#include "dol2asm.h"
+#include "dolphin/dsp.h"
+
+//
+// Types:
+//
+
+struct JASProbe {
+ /* 80290EE4 */ static void start(s32, char const*);
+ /* 80290F24 */ static void stop(s32);
+};
+
+/* JASMemPool_MultiThreaded<JASChannel> */
+struct JASMemPool_MultiThreaded__template2 {
+ /* 802978DC */ void func_802978DC(void* _this);
+};
+
+
+
+struct JASDsp {
+ /* 8029D958 */ static void boot(void (*)(void*));
+ /* 8029D9C4 */ static void finishWork(u16);
+ /* 8029DAC8 */ static void initBuffer();
+};
+
+struct JASDSPChannel {
+ /* 8029D3C8 */ static void initAll();
+};
+
+//
+// Forward References:
+//
+
+extern "C" void __ct__14JASAudioThreadFiiUl();
+extern "C" void create__14JASAudioThreadFl();
+extern "C" void stop__14JASAudioThreadFv();
+extern "C" void run__14JASAudioThreadFv();
+extern "C" void DMACallback__14JASAudioThreadFv();
+extern "C" void DSPCallback__14JASAudioThreadFPv();
+extern "C" void __dt__14JASAudioThreadFv();
+extern "C" extern char const* const JASAudioThread__stringBase0;
+extern "C" u8 snIntCount__14JASAudioThread[4 + 4 /* padding */];
+
+//
+// External References:
+//
+
+extern "C" void __ct__17JASGenericMemPoolFv();
+extern "C" void newMemPool__17JASGenericMemPoolFUli();
+extern "C" void start__8JASProbeFlPCc();
+extern "C" void stop__8JASProbeFl();
+extern "C" void func_802978DC(void* _this);
+extern "C" void initAI__9JASDriverFPFv_v();
+extern "C" void startDMA__9JASDriverFv();
+extern "C" void stopDMA__9JASDriverFv();
+extern "C" void updateDac__9JASDriverFv();
+extern "C" void updateDSP__9JASDriverFv();
+extern "C" void finishDSPFrame__9JASDriverFv();
+extern "C" void initAll__13JASDSPChannelFv();
+extern "C" void boot__6JASDspFPFPv_v();
+extern "C" void finishWork__6JASDspFUs();
+extern "C" void initBuffer__6JASDspFv();
+extern "C" void updateDacCallback__9JASDriverFv();
+extern "C" void* __nw__FUlP7JKRHeapi();
+extern "C" void __dl__FPv();
+extern "C" void __ct__9JKRThreadFP7JKRHeapUlii();
+extern "C" void __dt__9JKRThreadFv();
+extern "C" void __register_global_object();
+extern "C" extern u8 data_80431B34[16 + 4 /* padding */];
+extern "C" extern u8 struct_80451260[8];
+extern "C" u8 sSystemHeap__7JKRHeap[4];
+extern "C" u8 sCurrentHeap__7JKRHeap[4];
+extern "C" extern u8 __OSReport_disable;
+
+//
+// Declarations:
+//
+
+/* ############################################################################################## */
+
+/* 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);
+}
+
+/* ############################################################################################## */
+/* 8039B338-8039B338 027998 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_8039B338 = "SFR_DSP";
+#pragma pop
+
+/* 80431C68-80431C78 05E988 000C+04 1/1 0/0 0/0 .bss @205 */
+static u8 lit_205[12 + 4 /* padding */];
+
+/* 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 */
+// Maybe location of JASPoolAllocObject_MultiThreaded<JASChannel>
+#ifdef NONMATCHING
+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;
+ }
+ }
+}
+#else
+void* JASAudioThread::run() {
+ // NONMATCHING
+}
+#endif
+/* ############################################################################################## */
+/* 8039B338-8039B338 027998 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_8039B340 = "UPDATE-DAC";
+/* @stringBase0 padding */
+SECTION_DEAD static char const* const pad_8039B34B = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
+#pragma pop
+
+/* 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 */ \ No newline at end of file