Play-/Source/iop/Iop_Intc.h

82 lines
1.5 KiB
C
Raw Permalink Normal View History

#ifndef _IOP_INTC_H_
#define _IOP_INTC_H_
#include "Types.h"
#include "BasicUnion.h"
#include "zip/ZipArchiveWriter.h"
#include "zip/ZipArchiveReader.h"
namespace Iop
{
class CIntc
{
public:
enum LINES
{
2018-04-30 21:01:23 +01:00
LINE_VBLANK = 0x00,
LINE_SBUS = 0x01,
LINE_CDROM = 0x02,
LINE_DMAC = 0x03,
LINE_RTC0 = 0x04,
LINE_RTC1 = 0x05,
LINE_RTC2 = 0x06,
LINE_SPU2 = 0x09,
LINE_EVBLANK = 0x0B,
LINE_DEV9 = 0x0D,
LINE_RTC3 = 0x0E,
LINE_RTC4 = 0x0F,
LINE_RTC5 = 0x10,
LINE_SIO2 = 0x11,
LINE_USB = 0x16,
LINE_ILINK = 0x18,
LINE_DMA_BASE = 0x20,
2021-06-08 21:56:18 +02:00
LINE_DMA_SIF2 = 0x22,
LINE_DMA_SPU0 = 0x24,
LINE_DMA_SPU1 = 0x28,
2018-04-30 21:01:23 +01:00
LINE_DMA_DEV9 = 0x29,
2021-06-08 21:56:18 +02:00
LINE_DMA_SIF0 = 0x2A,
LINE_DMA_SIF1 = 0x2B,
LINE_DMA_SIO2in = 0x2C,
LINE_DMA_SIO2out = 0x2D,
2015-10-17 01:27:25 -04:00
LINES_MAX
};
enum
{
2018-04-30 21:01:23 +01:00
ADDR_BEGIN = 0x1F801070,
ADDR_END = 0x1F80107F
};
enum
{
2018-04-30 21:01:23 +01:00
STATUS0 = 0x1F801070,
MASK0 = 0x1F801074,
STATUS1 = 0x1F801078,
MASK1 = 0x1F80107C,
};
2018-04-30 21:01:23 +01:00
CIntc();
virtual ~CIntc();
2018-04-30 21:01:23 +01:00
void Reset();
2018-04-30 21:01:23 +01:00
void LoadState(Framework::CZipArchiveReader&);
void SaveState(Framework::CZipArchiveWriter&);
2018-04-30 21:01:23 +01:00
uint32 ReadRegister(uint32);
uint32 WriteRegister(uint32, uint32);
2018-04-30 21:01:23 +01:00
void AssertLine(unsigned int);
void ClearLine(unsigned int);
void SetStatus(uint64);
void SetMask(uint64);
bool HasPendingInterrupt();
private:
2018-04-30 21:01:23 +01:00
UNION64_32 m_status;
UNION64_32 m_mask;
};
}
#endif