JASDriverIF, JASAiCtrl, JASDSPInterface (#1907)

* JASDriverIF

* JASDriverIF sinit

* JASAiCtrl

* JASDSPInterface
This commit is contained in:
Jcw87
2023-09-02 15:34:50 -07:00
committed by GitHub
parent 71b0551040
commit ce78c773b7
69 changed files with 787 additions and 1419 deletions
+53
View File
@@ -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 */
+1 -7
View File
@@ -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();
+3
View File
@@ -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
@@ -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 */
+96
View File
@@ -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 */
+13 -21
View File
@@ -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 */
+2
View File
@@ -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;
+23
View File
@@ -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 */
+4
View File
@@ -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 */
+2
View File
@@ -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 */