⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 armcopro.h

📁 這是一個arm模擬器 以C++實做 主要模擬ARM9架構
💻 H
字号:
#ifndef SIMIT_ARMCOPRO_H#define SIMIT_ARMCOPRO_H#include "armemul.h"#include "armmmu.h"namespace simit {#define ARMul_FIRST 0#define ARMul_TRANSFER 1#define ARMul_BUSY 2#define ARMul_DATA 3#define ARMul_INTERRUPT 4#define ARMul_DONE 0#define ARMul_CANT 1#define ARMul_INC 3class arm_copro {	public:		arm_copro(arm_emulator *emu) : emu(emu) {}		virtual ~arm_copro() {}		virtual unsigned LDC (unsigned type, word_t instr, word_t data) = 0;		virtual unsigned STC (unsigned type, word_t instr, word_t * data) = 0;		virtual unsigned MRC (unsigned type, word_t instr, word_t * value) = 0;		virtual unsigned MCR (unsigned type, word_t instr, word_t value) = 0;		virtual unsigned CDP (unsigned type, word_t instr) = 0;	protected:		arm_emulator *emu;};/*class copro0:public arm_copro{	public:	copro0(arm_emulator *emu) : arm_copro(emu) {		Accumulator = 0;	}	unsigned LDC (unsigned type, word_t instr, word_t data) {		return ARMul_CANT;	}	unsigned STC (unsigned type, word_t instr, word_t * data) {		return ARMul_CANT;	}	unsigned MRC (unsigned type, word_t instr, word_t * value) {		return ARMul_CANT;	}	unsigned MCR (unsigned type, word_t instr, word_t value) {		return ARMul_CANT;	}	unsigned CDP (unsigned type, word_t instr) {		return ARMul_CANT;	}	~copro0(){};	uint64_t Accumulator;};*/class copro1 : public arm_copro{	public:		copro1(arm_emulator *emu) : arm_copro(emu) {}		unsigned LDC (unsigned type, word_t instr, word_t data) {			return ARMul_CANT;		}		unsigned STC (unsigned type, word_t instr, word_t * data) {			return ARMul_CANT;		}		unsigned MRC (unsigned type, word_t instr, word_t * value);		unsigned MCR (unsigned type, word_t instr, word_t value);		unsigned CDP (unsigned type, word_t instr){			return ARMul_CANT;		}		~copro1() {};};class copro2 : public arm_copro{	public:		copro2(arm_emulator *emu) : arm_copro(emu) {}		unsigned LDC (unsigned type, word_t instr, word_t data);		unsigned STC (unsigned type, word_t instr, word_t * data);		unsigned MRC (unsigned type, word_t instr, word_t * value){			return ARMul_CANT;		}		unsigned MCR (unsigned type, word_t instr, word_t value){			return ARMul_CANT;		}		unsigned CDP (unsigned type, word_t instr){			return ARMul_CANT;		}		~copro2(){};};class copro4 : public arm_copro{	public:		copro4(arm_emulator *emu) : arm_copro(emu) {}		unsigned LDC (unsigned type, word_t instr, word_t data);		unsigned STC (unsigned type, word_t instr, word_t * data);		unsigned MRC (unsigned type, word_t instr, word_t * value);		unsigned MCR (unsigned type, word_t instr, word_t value);		unsigned CDP (unsigned type, word_t instr);		~copro4(){};};class copro5 : public arm_copro{	public:		copro5(arm_emulator *emu) : arm_copro(emu) {}		unsigned LDC (unsigned type, word_t instr, word_t data) {			return ARMul_CANT;		}		unsigned STC (unsigned type, word_t instr, word_t * data){			return ARMul_CANT;		}		unsigned MRC (unsigned type, word_t instr, word_t * value);		unsigned MCR (unsigned type, word_t instr, word_t value);		unsigned CDP (unsigned type, word_t instr);		~copro5(){};};#if 1//#ifdef XScale_machclass copro6 : public arm_copro // pxa27x{	public:		copro6(arm_emulator *emu) : arm_copro(emu) {			last_creg = 0;		}			unsigned LDC (unsigned type, word_t instr, word_t data){			return ARMul_CANT;		}		unsigned STC (unsigned type, word_t instr, word_t * data){			return ARMul_CANT;		}		unsigned MRC (unsigned type, word_t instr, word_t * value);		unsigned MCR (unsigned type, word_t instr, word_t value);			unsigned CDP (unsigned type, word_t instr){			return ARMul_CANT;		}			~copro6() {};		private:		word_t last_creg;};typedef struct xscale_cp14_reg_s{	unsigned cclkcfg;	unsigned pwrmode;} xscale_cp14_reg_s;class copro14:public arm_copro // XScale{	public:			copro14(arm_emulator *emu) : arm_copro(emu) {			pxa_cp14_regs.cclkcfg = 0;			pxa_cp14_regs.pwrmode = 0;		}		unsigned LDC (unsigned type, word_t instr, word_t data){			return ARMul_CANT;		}		unsigned STC (unsigned type, word_t instr, word_t * data){			return ARMul_CANT;		}		unsigned MRC (unsigned type, word_t instr, word_t * value);		unsigned MCR (unsigned type, word_t instr, word_t value);			unsigned CDP (unsigned type, word_t instr){			return ARMul_CANT;		}			~copro14() {};	private:		xscale_cp14_reg_s pxa_cp14_regs;};#endifclass copro15 : public arm_copro{	public:		copro15(arm_emulator *emu) : arm_copro(emu) {}		unsigned LDC (unsigned type, word_t instr, word_t data){			return ARMul_CANT;		}		unsigned STC (unsigned type, word_t instr, word_t * data){			return ARMul_CANT;		}		unsigned MRC (unsigned type, word_t instr, word_t * value){			if (emu->is_xscale()) 				* value= emu->mmu->xscale_mrc(instr);			else				* value= emu->mmu->mrc(instr);			return ARMul_DONE; 		}		unsigned MCR (unsigned type, word_t instr, word_t value){			if (emu->is_xscale()) 				emu->mmu->xscale_mcr(instr,value);			else				emu->mmu->mcr(instr,value);			return ARMul_DONE; 		}		unsigned CDP (unsigned type, word_t instr){			return ARMul_CANT;		}		~copro15() {};};} /* namespace */#endif /* _ARMCOPRO_H_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -