summaryrefslogtreecommitdiff
path: root/include/JSystem
diff options
context:
space:
mode:
authorJcw87 <Jcw87@users.noreply.github.com>2023-09-02 15:34:50 -0700
committerGitHub <noreply@github.com>2023-09-03 01:34:50 +0300
commitce78c773b732cff35644260c8fa33a11547d27db (patch)
treea93fb556d7d96f02726fdf68f9cab5d6d7faceac /include/JSystem
parent71b055104099688a2cf227de535095da246408e2 (diff)
JASDriverIF, JASAiCtrl, JASDSPInterface (#1907)
* JASDriverIF * JASDriverIF sinit * JASAiCtrl * JASDSPInterface
Diffstat (limited to 'include/JSystem')
-rw-r--r--include/JSystem/JAudio2/JASAiCtrl.h53
-rw-r--r--include/JSystem/JAudio2/JASAudioReseter.h8
-rw-r--r--include/JSystem/JAudio2/JASAudioThread.h3
-rw-r--r--include/JSystem/JAudio2/JASCriticalSection.h15
-rw-r--r--include/JSystem/JAudio2/JASDSPInterface.h96
-rw-r--r--include/JSystem/JAudio2/JASDriverIF.h34
-rw-r--r--include/JSystem/JAudio2/JASLfo.h2
-rw-r--r--include/JSystem/JAudio2/JASWaveInfo.h23
-rw-r--r--include/JSystem/JAudio2/dsptask.h4
-rw-r--r--include/JSystem/JAudio2/osdsp_task.h2
10 files changed, 212 insertions, 28 deletions
diff --git a/include/JSystem/JAudio2/JASAiCtrl.h b/include/JSystem/JAudio2/JASAiCtrl.h
index 5aa13d81a6..8415a9d8af 100644
--- a/include/JSystem/JAudio2/JASAiCtrl.h
+++ b/include/JSystem/JAudio2/JASAiCtrl.h
@@ -3,4 +3,57 @@
#include "dolphin/types.h"
+enum JASOutputRate {
+ OUTPUT_RATE_0,
+};
+
+enum JASMixMode {
+ MIX_MODE_MONO,
+ MIX_MODE_MONO_WIDE,
+ MIX_MODE_EXTRA,
+ MIX_MODE_INTERLEAVE,
+};
+
+namespace JASDriver {
+ typedef s16* (*MixCallback)(s32);
+ typedef void (*MixFunc)(s16*, u32, MixCallback);
+
+ /* 8029C388 */ void initAI(void (*)(void));
+ /* 8029C4E4 */ void startDMA();
+ /* 8029C504 */ void stopDMA();
+ /* 8029C524 */ void setOutputRate(JASOutputRate);
+ /* 8029C568 */ void updateDac();
+ /* 8029C6C4 */ void updateDSP();
+ /* 8029C7E0 */ void readDspBuffer(s16*, u32);
+ /* 8029C900 */ void finishDSPFrame();
+ /* 8029C9DC */ void registerMixCallback(MixCallback, JASMixMode);
+ /* 8029C9E8 */ f32 getDacRate();
+ /* 8029C9F0 */ u32 getSubFrames();
+ /* 8029C9F8 */ u32 getDacSize();
+ /* 8029CA04 */ u32 getFrameSamples();
+ /* 8029CA10 */ void mixMonoTrack(s16*, u32, MixCallback);
+ /* 8029CAC0 */ void mixMonoTrackWide(s16*, u32, MixCallback);
+ /* 8029CB70 */ void mixExtraTrack(s16*, u32, MixCallback);
+ /* 8029CC50 */ void mixInterleaveTrack(s16*, u32, MixCallback);
+ /* 8029CCD4 */ u32 getSubFrameCounter();
+ /* 8029E2A8 */ void subframeCallback();
+ /* 8029E2D0 */ void DSPSyncCallback();
+
+ extern const MixFunc sMixFuncs[4];
+ extern s16* sDmaDacBuffer[3];
+ extern JASMixMode sMixMode;
+ extern f32 sDacRate;
+ extern u32 sSubFrames;
+ extern s16** sDspDacBuffer;
+ extern s32 sDspDacWriteBuffer;
+ extern s32 sDspDacReadBuffer;
+ extern s32 sDspStatus;
+ extern void (*sDspDacCallback)(s16*, u32);
+ extern s16* lastRspMadep;
+ extern void (*dacCallbackFunc)(s16*, u32);
+ extern MixCallback extMixCallback;
+ extern u32 sOutputRate;
+ extern u32 sSubFrameCounter;
+};
+
#endif /* JASAICTRL_H */
diff --git a/include/JSystem/JAudio2/JASAudioReseter.h b/include/JSystem/JAudio2/JASAudioReseter.h
index 3b48c7af49..aa077e053c 100644
--- a/include/JSystem/JAudio2/JASAudioReseter.h
+++ b/include/JSystem/JAudio2/JASAudioReseter.h
@@ -1,13 +1,7 @@
#ifndef JASAUDIORESETER_H
#define JASAUDIORESETER_H
-#include "dolphin/os/OSInterrupt.h"
-
-struct JASCriticalSection {
- inline JASCriticalSection() {mInterruptState = OSDisableInterrupts();};
- inline ~JASCriticalSection() {OSRestoreInterrupts(mInterruptState);};
- u32 mInterruptState;
-};
+#include "dolphin/types.h"
struct JASAudioReseter {
/* 8029D0B4 */ JASAudioReseter();
diff --git a/include/JSystem/JAudio2/JASAudioThread.h b/include/JSystem/JAudio2/JASAudioThread.h
index 9d89801cc5..4eb9ebc18d 100644
--- a/include/JSystem/JAudio2/JASAudioThread.h
+++ b/include/JSystem/JAudio2/JASAudioThread.h
@@ -19,6 +19,9 @@ struct JASAudioThread : public JKRThread, public JASGlobalInstance<JASAudioThrea
/* 8029CFBC */ static void DSPCallback(void*);
/* 8029D028 */ virtual ~JASAudioThread() {}
+ static int getDSPSyncCount() { return snIntCount; }
+ static void setDSPSyncCount(u32 param_0) { snIntCount = param_0; }
+
/* 0x7c */ OSThreadQueue sThreadQueue;
/* 0x84 */ bool sbPauseFlag; // type unsure
diff --git a/include/JSystem/JAudio2/JASCriticalSection.h b/include/JSystem/JAudio2/JASCriticalSection.h
new file mode 100644
index 0000000000..affd991f35
--- /dev/null
+++ b/include/JSystem/JAudio2/JASCriticalSection.h
@@ -0,0 +1,15 @@
+#ifndef JASCRITICALSECTION_H
+#define JASCRITICALSECTION_H
+
+#include "dolphin/os/OSInterrupt.h"
+
+class JASCriticalSection {
+public:
+ JASCriticalSection() { mInterruptState = OSDisableInterrupts(); };
+ ~JASCriticalSection() { OSRestoreInterrupts(mInterruptState); };
+
+private:
+ u32 mInterruptState;
+};
+
+#endif /* JASCRITICALSECTION_H */
diff --git a/include/JSystem/JAudio2/JASDSPInterface.h b/include/JSystem/JAudio2/JASDSPInterface.h
index c213367003..174cc6138d 100644
--- a/include/JSystem/JAudio2/JASDSPInterface.h
+++ b/include/JSystem/JAudio2/JASDSPInterface.h
@@ -3,4 +3,100 @@
#include "dolphin/types.h"
+struct JASWaveInfo;
+
+namespace JASDsp {
+ struct FxlineConfig_ {};
+
+ struct TChannel {
+ /* 8029DCA4 */ void init();
+ /* 8029DCE0 */ void playStart();
+ /* 8029DD44 */ void playStop();
+ /* 8029DD50 */ void replyFinishRequest();
+ /* 8029DD60 */ void forceStop();
+ /* 8029DD6C */ bool isActive() const;
+ /* 8029DD7C */ bool isFinish() const;
+ /* 8029DD8C */ void setWaveInfo(JASWaveInfo const&, u32, u32);
+ /* 8029DEAC */ void setOscInfo(u32);
+ /* 8029DEC4 */ void initAutoMixer();
+ /* 8029DEF0 */ void setAutoMixer(u16, u8, u8, u8, u8);
+ /* 8029DF1C */ void setPitch(u16);
+ /* 8029DF34 */ void setMixerInitVolume(u8, s16);
+ /* 8029DF54 */ void setMixerVolume(u8, s16);
+ /* 8029DF80 */ void setPauseFlag(u8);
+ /* 8029DF8C */ void flush();
+ /* 8029DFB0 */ void initFilter();
+ /* 8029E00C */ void setFilterMode(u16);
+ /* 8029E044 */ void setIIRFilterParam(s16*);
+ /* 8029E06C */ void setFIR8FilterParam(s16*);
+ /* 8029E094 */ void setDistFilter(s16);
+ /* 8029E09C */ void setBusConnect(u8, u8);
+
+ /* 0x000 */ u16 mIsActive;
+ /* 0x002 */ u16 mIsFinished;
+ /* 0x004 */ u16 mPitch;
+ /* 0x006 */ short field_0x006;
+ /* 0x008 */ short field_0x008;
+ /* 0x00A */ u8 field_0x00A[0x00C - 0x00A];
+ /* 0x00C */ s16 mPauseFlag;
+ /* 0x00E */ short field_0x00E;
+ /* 0x010 */ u16 field_0x010[1][4]; // array size unknown
+ /* 0x018 */ u8 field_0x018[0x050 - 0x018];
+ /* 0x050 */ short field_0x050;
+ /* 0x052 */ u16 field_0x052;
+ /* 0x054 */ u16 field_0x054;
+ /* 0x056 */ u16 field_0x056;
+ /* 0x058 */ u16 field_0x058;
+ /* 0x05A */ u8 field_0x05A[0x060 - 0x05A];
+ /* 0x060 */ short field_0x060;
+ /* 0x062 */ u8 field_0x062[0x064 - 0x062];
+ /* 0x064 */ short field_0x064;
+ /* 0x066 */ short field_0x066;
+ /* 0x068 */ int field_0x068;
+ /* 0x06C */ u8 field_0x06C[0x070 - 0x06C];
+ /* 0x070 */ int field_0x070;
+ /* 0x074 */ int field_0x074;
+ /* 0x078 */ short field_0x078[4];
+ /* 0x080 */ short field_0x080[20];
+ /* 0x0A8 */ short field_0x0a8[4];
+ /* 0x0B0 */ u16 field_0x0b0[16];
+ /* 0x0D0 */ u8 field_0x0D0[0x100 - 0x0D0];
+ /* 0x100 */ u16 field_0x100;
+ /* 0x102 */ u16 field_0x102;
+ /* 0x104 */ s16 field_0x104;
+ /* 0x106 */ s16 field_0x106;
+ /* 0x108 */ u16 mFilterMode;
+ /* 0x10A */ u16 mForcedStop;
+ /* 0x10C */ int field_0x10c;
+ /* 0x110 */ u32 field_0x110;
+ /* 0x114 */ u32 field_0x114;
+ /* 0x118 */ u32 field_0x118;
+ /* 0x11C */ int field_0x11c;
+ /* 0x120 */ s16 fir_filter_params[8];
+ /* 0x130 */ u8 field_0x130[0x148 - 0x130];
+ /* 0x148 */ s16 iir_filter_params[8];
+ /* 0x158 */ u8 field_0x158[0x180 - 0x158];
+ };
+
+ /* 8029D958 */ void boot(void (*)(void*));
+ /* 8029D9A4 */ void releaseHalt(u32);
+ /* 8029D9C4 */ void finishWork(u16);
+ /* 8029D9E4 */ void syncFrame(u32, u32, u32);
+ /* 8029DA04 */ void setDSPMixerLevel(f32);
+ /* 8029DA30 */ f32 getDSPMixerLevel();
+ /* 8029DA38 */ TChannel* getDSPHandle(int);
+ /* 8029DA48 */ void setFilterTable(s16*, s16*, u32);
+ /* 8029DA6C */ void flushBuffer();
+ /* 8029DAA0 */ void invalChannelAll();
+ /* 8029DAC8 */ void initBuffer();
+ /* 8029DB78 */ void setFXLine(u8, s16*, JASDsp::FxlineConfig_*);
+
+ extern u8 const DSPADPCM_FILTER[64];
+ extern void* const DSPRES_FILTER[320];
+ extern u16 SEND_TABLE[12 + 12 /* padding */];
+ extern TChannel* CH_BUF;
+ extern void* FX_BUF;
+ extern f32 sDSPVolume;
+};
+
#endif /* JASDSPINTERFACE_H */
diff --git a/include/JSystem/JAudio2/JASDriverIF.h b/include/JSystem/JAudio2/JASDriverIF.h
index 05b9d3c827..ff2f42cad0 100644
--- a/include/JSystem/JAudio2/JASDriverIF.h
+++ b/include/JSystem/JAudio2/JASDriverIF.h
@@ -1,37 +1,29 @@
#ifndef JASDRIVERIF_H
#define JASDRIVERIF_H
-#include "dolphin/types.h"
+#include "JSystem/JAudio2/JASCallback.h"
typedef s32 (*DriverCallback)(void*);
-struct JASDriver {
- /* 8029E130 */ static void setDSPLevel(f32);
+namespace JASDriver {
+ /* 8029E130 */ void setDSPLevel(f32);
/* 8029E150 */ u16 getChannelLevel_dsp();
- /* 8029E158 */ static f32 getDSPLevel();
- /* 8029E178 */ static void setOutputMode(u32);
+ /* 8029E158 */ f32 getDSPLevel();
+ /* 8029E178 */ void setOutputMode(u32);
/* 8029E180 */ u32 getOutputMode();
/* 8029E188 */ void waitSubFrame();
- /* 8029E1C4 */ void rejectCallback(DriverCallback, void*);
- /* 8029E240 */ static bool registerDspSyncCallback(DriverCallback, void*);
- /* 8029E274 */ static bool registerSubFrameCallback(DriverCallback, void*);
+ /* 8029E1C4 */ int rejectCallback(DriverCallback, void*);
+ /* 8029E240 */ bool registerDspSyncCallback(DriverCallback, void*);
+ /* 8029E274 */ bool registerSubFrameCallback(DriverCallback, void*);
/* 8029E2A8 */ void subframeCallback();
/* 8029E2D0 */ void DSPSyncCallback();
/* 8029E2F8 */ void updateDacCallback();
- /* 8029C9F0 */ static u32 getSubFrames();
- static void initAI(void (*)());
- static void startDMA();
- static void stopDMA();
- static void updateDac();
- static void updateDacCallback();
- static void finishDSPFrame();
- static void updateDSP();
- static u8 sDspSyncCallback[256];
- static u8 sSubFrameCallback[256];
- static u8 sUpdateDacCallback[256 + 8 /* padding */];
- static u16 MAX_MIXERLEVEL[1 + 1 /* padding */];
- static u32 JAS_SYSTEM_OUTPUT_MODE;
+ extern JASCallbackMgr sDspSyncCallback;
+ extern JASCallbackMgr sSubFrameCallback;
+ extern JASCallbackMgr sUpdateDacCallback;
+ extern u16 MAX_MIXERLEVEL;
+ extern u32 JAS_SYSTEM_OUTPUT_MODE;
};
#endif /* JASDRIVERIF_H */
diff --git a/include/JSystem/JAudio2/JASLfo.h b/include/JSystem/JAudio2/JASLfo.h
index 35291bd5b0..3008d8b17c 100644
--- a/include/JSystem/JAudio2/JASLfo.h
+++ b/include/JSystem/JAudio2/JASLfo.h
@@ -9,6 +9,8 @@ struct JASLfo {
/* 8029BDD8 */ void incCounter(f32);
/* 8029BE2C */ void resetCounter();
+ static void updateFreeRun(f32 param_0) { sFreeRunLfo.incCounter(param_0); }
+
static JASLfo sFreeRunLfo;
/* 0x00 */ u32 field_0x0;
diff --git a/include/JSystem/JAudio2/JASWaveInfo.h b/include/JSystem/JAudio2/JASWaveInfo.h
new file mode 100644
index 0000000000..9227fb578a
--- /dev/null
+++ b/include/JSystem/JAudio2/JASWaveInfo.h
@@ -0,0 +1,23 @@
+#ifndef JASWAVEINFO_H
+#define JASWAVEINFO_H
+
+#include "dolphin/types.h"
+
+struct JASWaveInfo {
+ /* 0x00 */ u8 field_0x00;
+ /* 0x01 */ u8 field_0x01;
+ /* 0x02 */ u8 field_0x02;
+ /* 0x04 */ int field_0x04;
+ /* 0x08 */ int field_0x08;
+ /* 0x0C */ int field_0x0c;
+ /* 0x10 */ u32 field_0x10;
+ /* 0x14 */ int field_0x14;
+ /* 0x18 */ int field_0x18;
+ /* 0x1C */ s16 field_0x1c;
+ /* 0x1E */ s16 field_0x1e;
+ /* 0x20 */ void* field_0x20;
+
+ static u32 one[1 + 1 /* padding */];
+};
+
+#endif /* JASWAVEINFO_H */ \ No newline at end of file
diff --git a/include/JSystem/JAudio2/dsptask.h b/include/JSystem/JAudio2/dsptask.h
index 901b28f1e9..816f823393 100644
--- a/include/JSystem/JAudio2/dsptask.h
+++ b/include/JSystem/JAudio2/dsptask.h
@@ -1,5 +1,9 @@
#ifndef DSPTASK_H
#define DSPTASK_H
+#include "dolphin/types.h"
+
+void DspBoot(void (*)(void*));
+void DspFinishWork(u16 param_0);
#endif /* DSPTASK_H */
diff --git a/include/JSystem/JAudio2/osdsp_task.h b/include/JSystem/JAudio2/osdsp_task.h
index a2d661aba3..c27f585f0c 100644
--- a/include/JSystem/JAudio2/osdsp_task.h
+++ b/include/JSystem/JAudio2/osdsp_task.h
@@ -17,4 +17,6 @@ void __DSPHandler(OSInterrupt interrupt, OSContext* context);
}
#endif
+void DsyncFrame2(u32 param_0, u32 param_1, u32 param_2);
+
#endif /* OSDSP_TASK_H */