diff options
Diffstat (limited to 'src/DSi_DSP.h')
-rw-r--r-- | src/DSi_DSP.h | 96 |
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 |