1 #pragma once 2 3 #include "../MIPS.h" 4 #include "../MA_MIPSIV.h" 5 #include "../COP_SCU.h" 6 #include "Iop_BiosBase.h" 7 #include "Iop_Dev9.h" 8 #include "Iop_Dmac.h" 9 #include "Iop_Intc.h" 10 #include "Iop_RootCounters.h" 11 #include "Iop_Speed.h" 12 #include "Iop_SpuBase.h" 13 #include "Iop_Spu.h" 14 #include "Iop_Spu2.h" 15 #include "Iop_Sio2.h" 16 #include "zip/ZipArchiveWriter.h" 17 #include "zip/ZipArchiveReader.h" 18 19 namespace Iop 20 { 21 class CSubSystem 22 { 23 public: 24 CSubSystem(bool ps2Mode); 25 virtual ~CSubSystem(); 26 27 void Reset(); 28 int ExecuteCpu(int); 29 bool IsCpuIdle(); 30 void CountTicks(int); 31 32 void NotifyVBlankStart(); 33 void NotifyVBlankEnd(); 34 35 void SaveState(Framework::CZipArchiveWriter&); 36 void LoadState(Framework::CZipArchiveReader&); 37 38 uint8* m_ram; 39 uint8* m_scratchPad; 40 uint8* m_spuRam; 41 CIntc m_intc; 42 CRootCounters m_counters; 43 CDmac m_dmac; 44 CSpuBase m_spuCore0; 45 CSpuBase m_spuCore1; 46 CSpu m_spu; 47 CSpu2 m_spu2; 48 CDev9 m_dev9; 49 CSpeed m_speed; 50 #ifdef _IOP_EMULATE_MODULES 51 CSio2 m_sio2; 52 #endif 53 CMIPS m_cpu; 54 CMA_MIPSIV m_cpuArch; 55 CCOP_SCU m_copScu; 56 BiosBasePtr m_bios; 57 58 private: 59 enum 60 { 61 SPEED_REG_BEGIN = 0x10000000, 62 SPEED_REG_END = 0x1001FFFF, 63 HW_REG_BEGIN = 0x1F801000, 64 HW_REG_END = 0x1F9FFFFF 65 }; 66 67 void SetupPageTable(); 68 69 uint32 ReadIoRegister(uint32); 70 uint32 WriteIoRegister(uint32, uint32); 71 72 void CheckPendingInterrupts(); 73 74 int m_dmaUpdateTicks; 75 }; 76 } 77