diff options
| author | Jcw87 <Jcw87@users.noreply.github.com> | 2023-09-02 15:34:50 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-03 01:34:50 +0300 |
| commit | ce78c773b732cff35644260c8fa33a11547d27db (patch) | |
| tree | a93fb556d7d96f02726fdf68f9cab5d6d7faceac /include/JSystem | |
| parent | 71b055104099688a2cf227de535095da246408e2 (diff) | |
JASDriverIF, JASAiCtrl, JASDSPInterface (#1907)
* JASDriverIF
* JASDriverIF sinit
* JASAiCtrl
* JASDSPInterface
Diffstat (limited to 'include/JSystem')
| -rw-r--r-- | include/JSystem/JAudio2/JASAiCtrl.h | 53 | ||||
| -rw-r--r-- | include/JSystem/JAudio2/JASAudioReseter.h | 8 | ||||
| -rw-r--r-- | include/JSystem/JAudio2/JASAudioThread.h | 3 | ||||
| -rw-r--r-- | include/JSystem/JAudio2/JASCriticalSection.h | 15 | ||||
| -rw-r--r-- | include/JSystem/JAudio2/JASDSPInterface.h | 96 | ||||
| -rw-r--r-- | include/JSystem/JAudio2/JASDriverIF.h | 34 | ||||
| -rw-r--r-- | include/JSystem/JAudio2/JASLfo.h | 2 | ||||
| -rw-r--r-- | include/JSystem/JAudio2/JASWaveInfo.h | 23 | ||||
| -rw-r--r-- | include/JSystem/JAudio2/dsptask.h | 4 | ||||
| -rw-r--r-- | include/JSystem/JAudio2/osdsp_task.h | 2 |
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 */ |
