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

📄 coldfire.h

📁 SkyEye是一个可以运行嵌入式操作系统的硬件仿真工具
💻 H
字号:
/**********************************//*                                *//*  Copyright 2000, David Grant   *//*                                *//*  see LICENSE for more details  *//*                                *//**********************************/#ifndef __COLDFIRE_H__#define __COLDFIRE_H__#include <stdio.h>#include <string.h>#include "skyeye.h"struct _Instruction {	void (*FunctionPtr)(void);	unsigned short Code;	unsigned short Mask;	int (*DIFunctionPtr)(char *Instruction, char *Arg1, char *Arg2);};/* This is ALWAYS cast into a longword, so we need to pad it to a longword */struct _InstructionExtensionWord {#ifndef WORDS_BIGENDIAN						signed Displacement:8;	unsigned EV:1;	unsigned Scale:2;	unsigned WL:1;	unsigned Register:3;	unsigned AD:1;	unsigned pad:16;#else	unsigned pad:16;	unsigned AD:1;	unsigned Register:3;	unsigned WL:1;	unsigned Scale:2;	unsigned EV:1;	signed Displacement:8;#endif};enum {	I_ADD, I_ADDA, I_ADDI, I_ADDQ, I_ADDX,	I_AND, I_ANDI, I_ASL, I_ASR, I_BCC, I_BCHG, I_BCLR, I_BRA,	I_BSET, I_BSR, I_BTST, I_CLR, I_CMP, I_CMPA, I_CMPI,	I_DIVS, I_DIVL, I_DIVU, I_DIVUL, I_EOR, I_EORI, I_EXT, I_JMP, I_JSR,	I_LEA, I_LINK, I_LSR, I_LSL, I_MOVE, I_MOVEC, I_MOVEA, I_MOVEM, I_MOVEQ,	I_MOVETOSR, I_MULS, I_MULU, I_NEG, I_NEGX, I_NOP, I_NOT, I_OR,	I_ORI, I_RTE, I_RTS, I_SCC, I_SUB, I_SUBA, I_SUBI, I_SUBQ, I_SUBX,	I_SWAP, I_TRAP, I_TRAPF, I_TST, I_UNLK,	I_LAST};enum _coldfire_cpu_id {	CF_NULL, 	CF_5206,	CF_5206e,	CF_5276, 	CF_5307,	CF_5407,	CF_LAST};	#define INSTRUCTION_(I,A) \	typedef union _##I##_instr {			\		struct _##I##_bits {			\				A;			\			} Bits;				\			unsigned int Code;		\		} I##_Instr#ifndef WORDS_BIGENDIAN						#define INSTRUCTION_1ARG(I,A1,S1)			\		INSTRUCTION_(I,	A1:S1)	#define INSTRUCTION_2ARGS(I,A1,S1,A2,S2)			\		INSTRUCTION_(I,	A2:S2; A1:S1)	#define INSTRUCTION_3ARGS(I,A1,S1,A2,S2,A3,S3)			\		INSTRUCTION_(I,	A3:S3; A2:S2; A1:S1)	#define INSTRUCTION_4ARGS(I,A1,S1,A2,S2,A3,S3,A4,S4)		\		INSTRUCTION_(I,	A4:S4; A3:S3; A2:S2; A1:S1)	#define INSTRUCTION_5ARGS(I,A1,S1,A2,S2,A3,S3,A4,S4,A5,S5)	\		INSTRUCTION_(I,	A5:S5; A4:S4; A3:S3; A2:S2; A1:S1)	#define INSTRUCTION_6ARGS(I,A1,S1,A2,S2,A3,S3,A4,S4,A5,S5,A6,S6) \		INSTRUCTION_(I, A6:S6; A5:S5; A4:S4; A3:S3; A2:S2; A1:S1)	#define INSTRUCTION_7ARGS(I,A1,S1,A2,S2,A3,S3,A4,S4,A5,S5,A6,S6,A7,S7) \		INSTRUCTION_(I,	A7:S7; A6:S6; A5:S5; A4:S4; A3:S3; A2:S2; A1:S1)#else								#define INSTRUCTION_1ARG(I,A1,S1)			\		INSTRUCTION_(I,	unsigned pad:(32-S1);		\				A1:S1)	#define INSTRUCTION_2ARGS(I,A1,S1,A2,S2)			\		INSTRUCTION_(I,	unsigned pad:(32-S1-S2);		\				A1:S1; A2:S2)	#define INSTRUCTION_3ARGS(I,A1,S1,A2,S2,A3,S3)			\		INSTRUCTION_(I,	unsigned pad:(32-S1-S2-S3); 		\				A1:S1; A2:S2; A3:S3)	#define INSTRUCTION_4ARGS(I,A1,S1,A2,S2,A3,S3,A4,S4)		\		INSTRUCTION_(I,	unsigned pad:(32-S1-S2-S3-S4); 		\				A1:S1; A2:S2; A3:S3; A4:S4)	#define INSTRUCTION_5ARGS(I,A1,S1,A2,S2,A3,S3,A4,S4,A5,S5);	\		INSTRUCTION_(I,	unsigned pad:(32-S1-S2-S3-S4-S5); 	\				A1:S1; A2:S2; A3:S3; A4:S4; A5:S5)	#define INSTRUCTION_6ARGS(I,A1,S1,A2,S2,A3,S3,A4,S4,A5,S5,A6,S6)\		INSTRUCTION_(I,	unsigned pad:(32-S1-S2-S3-S4-S5-S6); 	\				A1:S1; A2:S2; A3:S3; A4:S4; A5:S5; A6:S6)	#define INSTRUCTION_7ARGS(I,A1,S1,A2,S2,A3,S3,A4,S4,A5,S5,A6,S6,A7,S7)	\		INSTRUCTION_(I,	unsigned pad:(32-S1-S2-S3-S4-S5-S6-S7); 	\				A1:S1; A2:S2; A3:S3; A4:S4; A5:S5; A6:S6; A7:S7)#endif	#include "memory.h"#include "addressing.h"//#include "monitor/monitor.h"	//#include "i_5206/i_5206.h"//#include "i_5206e/i_5206e.h"//#include "i_5307/i_5307.h"//#include "peripherals/peripherals.h"		/* board.c -- definitions of various eval board layouts */struct _board_data {	char *cpu_id;	unsigned int clock_speed;	unsigned int cycle_count;	unsigned int total_cycle_count;	char use_timer_hack;	char trace_run;	enum _coldfire_cpu_id cpu;};void board_init(void);void board_reset(void);void board_fini(void);void board_setup(char *file);struct _board_data *board_get_data(void);/* cycle.c */void cycle(unsigned int number);int cycle_EA(short reg, short mode);/* exception.c -- exception generators */int exception_do_raw_exception(short vector);int exception_do_exception(short vector);void exception_restore_from_stack_frame(void);void exception_push_stack_frame(short vector);void exception_post(unsigned int interrupt_level, 		unsigned int (*func)(unsigned int interrupt_level) );void exception_withdraw(unsigned int interrupt_level);void exception_check_and_handle(void);/* handlers.c -- misc functions */void SR_Set(short Instr, int Source, int Destination, int Result);/* i.c -- instructions */void Instruction_Init(void);void instruction_register(unsigned short code, unsigned short mask, 		void (*execute)(void),		int (*disassemble)(char *, char *, char *));void Instruction_DeInit(void);struct _Instruction *Instruction_FindInstruction(unsigned short Instr);void instruction_register_instructions(void);/* misc.c -- Misc functions */int arg_split(char **argv, char *buffer, int max_args);int arg_split_chars(char **argv, char *buffer, int max_args, char *split);/* network.c -- Network functions */int network_setup_on_port(int *fd, unsigned short port);int network_check_accept(int *fd);/* run.c -- Running the core */extern char Run_Exit;void Run(void);/* sim.c -- System Integration Module */struct _sim_register {	char *name;	int offset;	char width;	char read;	char write;	int resetvalue;	char *description;};struct _sim {	/* These are for peripherals to talk to the sim */	void (*interrupt_assert)(short number, short vector);	void (*interrupt_withdraw)(short number);	/* These are for the monitor to query SIM registers */	struct _sim_register *(*register_lookup_by_offset)(int offset);	struct _sim_register *(*register_lookup_by_name)(char *name);};void sim_register(struct _sim *sim_data);extern struct _sim *sim;/*#define TRACE(x,y,z)#define TRACE(x,y) #define TRACE(x)*//* INSTRUCTION TIMING is firewalled inside profile.h *///#include "profile.h"/* MEMORY_STATS is firewalled inside stats.h *///#include "stats.h"#endif

⌨️ 快捷键说明

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