2006-06-15 04:19:30 +00:00
|
|
|
#ifndef _DMAC_H_
|
|
|
|
#define _DMAC_H_
|
|
|
|
|
|
|
|
#include "Types.h"
|
2007-12-17 04:08:46 +00:00
|
|
|
#include "zip/ZipArchiveWriter.h"
|
|
|
|
#include "zip/ZipArchiveReader.h"
|
2007-12-01 04:08:34 +00:00
|
|
|
#include "Dmac_Channel.h"
|
2006-06-15 04:19:30 +00:00
|
|
|
|
|
|
|
class CDMAC
|
|
|
|
{
|
|
|
|
public:
|
2007-12-01 04:08:34 +00:00
|
|
|
friend class Dmac::CChannel;
|
|
|
|
|
2006-06-15 04:19:30 +00:00
|
|
|
enum REGISTER
|
|
|
|
{
|
2008-06-15 19:55:28 +00:00
|
|
|
D0_CHCR = 0x10008000,
|
|
|
|
D0_MADR = 0x10008010,
|
|
|
|
D0_QWC = 0x10008020,
|
|
|
|
D0_TADR = 0x10008030,
|
|
|
|
|
2006-06-15 04:19:30 +00:00
|
|
|
D1_CHCR = 0x10009000,
|
|
|
|
D1_MADR = 0x10009010,
|
|
|
|
D1_QWC = 0x10009020,
|
|
|
|
D1_TADR = 0x10009030,
|
|
|
|
|
|
|
|
D2_CHCR = 0x1000A000,
|
|
|
|
D2_MADR = 0x1000A010,
|
|
|
|
D2_SIZE = 0x1000A020,
|
|
|
|
D2_TADR = 0x1000A030,
|
|
|
|
|
|
|
|
D3_CHCR = 0x1000B000,
|
|
|
|
D3_MADR = 0x1000B010,
|
|
|
|
D3_QWC = 0x1000B020,
|
|
|
|
|
|
|
|
D4_CHCR = 0x1000B400,
|
|
|
|
D4_MADR = 0x1000B410,
|
|
|
|
D4_QWC = 0x1000B420,
|
|
|
|
D4_TADR = 0x1000B430,
|
|
|
|
|
|
|
|
D5_CHCR = 0x1000C000,
|
|
|
|
D5_MADR = 0x1000C010,
|
|
|
|
D5_QWC = 0x1000C020,
|
|
|
|
|
|
|
|
D6_CHCR = 0x1000C400,
|
|
|
|
D6_MADR = 0x1000C410,
|
|
|
|
D6_QWC = 0x1000C420,
|
|
|
|
D6_TADR = 0x1000C430,
|
|
|
|
|
2008-06-15 19:55:28 +00:00
|
|
|
D8_CHCR = 0x1000D000,
|
|
|
|
D8_MADR = 0x1000D010,
|
|
|
|
D8_QWC = 0x1000D020,
|
|
|
|
D8_SADR = 0x1000D080,
|
|
|
|
|
2006-06-15 04:19:30 +00:00
|
|
|
D9_CHCR = 0x1000D400,
|
|
|
|
D9_MADR = 0x1000D410,
|
|
|
|
D9_QWC = 0x1000D420,
|
|
|
|
D9_TADR = 0x1000D430,
|
|
|
|
D9_SADR = 0x1000D480,
|
|
|
|
|
|
|
|
D_STAT = 0x1000E010,
|
|
|
|
|
|
|
|
D_ENABLER = 0x1000F520,
|
|
|
|
D_ENABLEW = 0x1000F590,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum CHCR_BIT
|
|
|
|
{
|
|
|
|
CHCR_STR = 0x100,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum ENABLE_BIT
|
|
|
|
{
|
|
|
|
ENABLE_CPND = 0x10000,
|
|
|
|
};
|
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
CDMAC(uint8*, uint8*);
|
|
|
|
virtual ~CDMAC();
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
void Reset();
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
void SetChannelTransferFunction(unsigned int, const Dmac::DmaReceiveHandler&);
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
uint32 GetRegister(uint32);
|
|
|
|
void SetRegister(uint32, uint32);
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2007-12-17 04:08:46 +00:00
|
|
|
void LoadState(CZipArchiveReader&);
|
|
|
|
void SaveState(CZipArchiveWriter&);
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
void DisassembleGet(uint32);
|
|
|
|
void DisassembleSet(uint32, uint32);
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
bool IsInterruptPending();
|
2008-07-20 17:26:08 +00:00
|
|
|
void ResumeDMA0();
|
2008-03-29 16:38:35 +00:00
|
|
|
void ResumeDMA1();
|
2007-12-01 04:08:34 +00:00
|
|
|
uint32 ResumeDMA3(void*, uint32);
|
|
|
|
void ResumeDMA4();
|
|
|
|
static bool IsEndTagId(uint32);
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
private:
|
|
|
|
uint64 FetchDMATag(uint32);
|
|
|
|
|
2008-06-15 19:55:28 +00:00
|
|
|
uint32 ReceiveDMA8(uint32, uint32, uint32, bool);
|
|
|
|
uint32 ReceiveDMA9(uint32, uint32, uint32, bool);
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
uint32 m_D_STAT;
|
|
|
|
uint32 m_D_ENABLE;
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2008-06-15 19:55:28 +00:00
|
|
|
Dmac::CChannel m_D0;
|
2007-12-01 04:08:34 +00:00
|
|
|
Dmac::CChannel m_D1;
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
Dmac::CChannel m_D2;
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
uint32 m_D3_CHCR;
|
|
|
|
uint32 m_D3_MADR;
|
|
|
|
uint32 m_D3_QWC;
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
Dmac::CChannel m_D4;
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
uint32 m_D5_CHCR;
|
|
|
|
uint32 m_D5_MADR;
|
|
|
|
uint32 m_D5_QWC;
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
uint32 m_D6_CHCR;
|
|
|
|
uint32 m_D6_MADR;
|
|
|
|
uint32 m_D6_QWC;
|
|
|
|
uint32 m_D6_TADR;
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2008-06-15 19:55:28 +00:00
|
|
|
Dmac::CChannel m_D8;
|
|
|
|
uint32 m_D8_SADR;
|
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
Dmac::CChannel m_D9;
|
|
|
|
uint32 m_D9_SADR;
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
uint8* m_ram;
|
|
|
|
uint8* m_spr;
|
2006-06-15 04:19:30 +00:00
|
|
|
|
2008-01-12 01:27:04 +00:00
|
|
|
Dmac::DmaReceiveHandler m_receiveDma5;
|
|
|
|
Dmac::DmaReceiveHandler m_receiveDma6;
|
2006-06-15 04:19:30 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|