aboutsummaryrefslogtreecommitdiff
path: root/src/DSi_DSP.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/DSi_DSP.h')
-rw-r--r--src/DSi_DSP.h96
1 files changed, 65 insertions, 31 deletions
diff --git a/src/DSi_DSP.h b/src/DSi_DSP.h
index e88b5b5..56850c0 100644
--- a/src/DSi_DSP.h
+++ b/src/DSi_DSP.h
@@ -25,50 +25,84 @@
// TODO: for actual sound output
// * audio callbacks
-namespace DSi_DSP
+namespace Teakra { class Teakra; }
+
+class DSi_DSP
{
+public:
+ DSi_DSP();
+ ~DSi_DSP();
+ void Reset();
+ void DoSavestate(Savestate* file);
+
+ void DSPCatchUpU32(u32 _);
+
+ // SCFG_RST bit0
+ bool IsRstReleased();
+ void SetRstLine(bool release);
+
+ // DSP_* regs (0x040043xx) (NOTE: checks SCFG_EXT)
+ u8 Read8(u32 addr);
+ void Write8(u32 addr, u8 val);
+
+ u16 Read16(u32 addr);
+ void Write16(u32 addr, u16 val);
+
+ u32 Read32(u32 addr);
+ void Write32(u32 addr, u32 val);
+
+ u16 ReadSNDExCnt() { return SNDExCnt; }
+ void WriteSNDExCnt(u16 val, u16 mask);
+
+ // NOTE: checks SCFG_CLK9
+ void Run(u32 cycles);
-extern u16 SNDExCnt;
+ void IrqRep0();
+ void IrqRep1();
+ void IrqRep2();
+ void IrqSem();
+ u16 DSPRead16(u32 addr);
+ void DSPWrite16(u32 addr, u16 val);
+ void AudioCb(std::array<s16, 2> frame);
-extern u16 DSP_PDATA;
-extern u16 DSP_PADR;
-extern u16 DSP_PCFG;
-extern u16 DSP_PSTS;
-extern u16 DSP_PSEM;
-extern u16 DSP_PMASK;
-extern u16 DSP_PCLEAR;
-extern u16 DSP_SEM;
-extern u16 DSP_CMD[3];
-extern u16 DSP_REP[3];
+private:
+ // not sure whether to not rather put it somewhere else
+ u16 SNDExCnt;
-bool Init();
-void DeInit();
-void Reset();
+ Teakra::Teakra* TeakraCore;
-void DoSavestate(Savestate* file);
+ bool SCFG_RST;
-void DSPCatchUpU32(u32 _);
+ u16 DSP_PADR;
+ u16 DSP_PCFG;
+ u16 DSP_PSTS;
+ u16 DSP_PSEM;
+ u16 DSP_PMASK;
+ u16 DSP_PCLEAR;
+ u16 DSP_CMD[3];
+ u16 DSP_REP[3];
-// SCFG_RST bit0
-bool IsRstReleased();
-void SetRstLine(bool release);
+ u64 DSPTimestamp;
-// DSP_* regs (0x040043xx) (NOTE: checks SCFG_EXT)
-u8 Read8(u32 addr);
-void Write8(u32 addr, u8 val);
+ FIFO<u16, 16> PDATAReadFifo/*, *PDATAWriteFifo*/;
+ int PDataDMALen;
-u16 Read16(u32 addr);
-void Write16(u32 addr, u16 val);
+ static const u32 DataMemoryOffset;
-u32 Read32(u32 addr);
-void Write32(u32 addr, u32 val);
+ u16 GetPSTS();
-void WriteSNDExCnt(u16 val);
+ inline bool IsDSPCoreEnabled();
+ inline bool IsDSPIOEnabled();
-// NOTE: checks SCFG_CLK9
-void Run(u32 cycles);
+ bool DSPCatchUp();
-}
+ void PDataDMAWrite(u16 wrval);
+ u16 PDataDMARead();
+ void PDataDMAFetch();
+ void PDataDMAStart();
+ void PDataDMACancel();
+ u16 PDataDMAReadMMIO();
+};
#endif // DSI_DSP_H