Play-/Source/iop/Iop_SubSystem.h

78 lines
1.5 KiB
C
Raw Permalink Normal View History

2014-10-05 02:00:20 -04:00
#pragma once
#include "../MIPS.h"
#include "../MA_MIPSIV.h"
#include "../COP_SCU.h"
2021-01-22 19:18:47 -05:00
#include "Iop_BiosBase.h"
#include "Iop_Dev9.h"
#include "Iop_Dmac.h"
#include "Iop_Intc.h"
#include "Iop_RootCounters.h"
#include "Iop_Speed.h"
#include "Iop_SpuBase.h"
#include "Iop_Spu.h"
#include "Iop_Spu2.h"
#include "Iop_Sio2.h"
#include "zip/ZipArchiveWriter.h"
#include "zip/ZipArchiveReader.h"
namespace Iop
{
class CSubSystem
{
public:
2018-04-30 21:01:23 +01:00
CSubSystem(bool ps2Mode);
virtual ~CSubSystem();
2018-04-30 21:01:23 +01:00
void Reset();
int ExecuteCpu(int);
bool IsCpuIdle();
void CountTicks(int);
2018-04-30 21:01:23 +01:00
void NotifyVBlankStart();
void NotifyVBlankEnd();
2018-04-30 21:01:23 +01:00
void SaveState(Framework::CZipArchiveWriter&);
void LoadState(Framework::CZipArchiveReader&);
2018-04-30 21:01:23 +01:00
uint8* m_ram;
uint8* m_scratchPad;
uint8* m_spuRam;
CIntc m_intc;
CRootCounters m_counters;
CDmac m_dmac;
CSpuBase m_spuCore0;
CSpuBase m_spuCore1;
CSpu m_spu;
CSpu2 m_spu2;
2021-01-22 19:18:47 -05:00
CDev9 m_dev9;
CSpeed m_speed;
#ifdef _IOP_EMULATE_MODULES
2018-04-30 21:01:23 +01:00
CSio2 m_sio2;
#endif
2018-04-30 21:01:23 +01:00
CMIPS m_cpu;
CMA_MIPSIV m_cpuArch;
CCOP_SCU m_copScu;
BiosBasePtr m_bios;
private:
enum
{
2021-01-22 19:18:47 -05:00
SPEED_REG_BEGIN = 0x10000000,
SPEED_REG_END = 0x1001FFFF,
2018-04-30 21:01:23 +01:00
HW_REG_BEGIN = 0x1F801000,
HW_REG_END = 0x1F9FFFFF
};
2019-04-17 13:11:52 -04:00
void SetupPageTable();
2018-04-30 21:01:23 +01:00
uint32 ReadIoRegister(uint32);
uint32 WriteIoRegister(uint32, uint32);
2018-04-30 21:01:23 +01:00
void CheckPendingInterrupts();
2018-04-30 21:01:23 +01:00
int m_dmaUpdateTicks;
int m_spuIrqUpdateTicks;
};
}