www.pudn.com > potemkin_sourceforPSP.rar > CPU.h
#pragma once
#include "../Globals.h"
#include "MemMap.h"
#include "Core.h"
enum
{
GPR_SIZE_32=0,
GPR_SIZE_64=1
};
enum CPUType
{
CPUTYPE_OTHER=-1,
CPUTYPE_ARM7=1,
CPUTYPE_ARM9=2,
CPUTYPE_MIPSR4K=3,
CPUTYPE_SH4,
};
class CPU
{
public:
MemMap memMap;
private:
u32 id;
//virtual functions - slower, only for IR interpreter and debugger
// DO NOT use in dynarec
public:
virtual void SingleStep() {}
virtual void FastRun()
{
//lame default implementation
while (coreState == CORE_RUNNING)
{
SingleStep();
}
}
virtual TCHAR *GetName() = 0;
virtual int GetNumGPRs() = 0;
virtual int GetGPRSize() = 0; //32 or 64
virtual u32 GetGPR32Value(int reg) {return 0;}
virtual u32 GetGPR64Value(int reg) {return 0;}
virtual void SetGPR32Value(int reg) {}
virtual void SetGPR64Value(int reg) {}
virtual u32 GetPC() = 0;
virtual void SetPC(u32 _pc) = 0;
virtual u32 GetLR() {return GetPC();}
virtual int GetInstructionSize() {return 4;}
virtual CPUType GetType() {return CPUTYPE_OTHER;}
virtual void DisAsm(u32 op, u32 pc, int align, char *out) {sprintf(out,"[%08x] UNKNOWN", op);}
//More stuff for debugger
virtual int GetNumCategories() {return 0;}
virtual int GetNumRegsInCategory(int cat) {return 0;}
virtual const TCHAR *GetCategoryName(int cat) {return 0;}
virtual const TCHAR *GetRegName(int cat, int index) {return 0;}
virtual void PrintRegValue(int cat, int index, char *out)
{
sprintf(out,"%08x",GetGPR32Value(index));
}
virtual u32 GetRegValue(int cat, int index) {return 0;}
virtual void SetRegValue(int cat, int index, u32 value) {}
};
#define MAX_NUM_CPU 2
extern CPU *cpus[MAX_NUM_CPU];
extern CPU *currentCPU;
extern int numCPUs;