#define DEBUG #define H8500_MSIZE (8*64*1024) #define CSIZE 1000 union rtype { unsigned long l; unsigned short s[2]; unsigned char *c; }; /* Local register names */ typedef enum { R0, R1, R2, R3, R4, R5, R6, R7, R_SR, /* 8 */ R_PC, /* 9 */ R_BR, /* 10 */ R_BP, /* 11 */ R_CP, /* 14 */ R_DP, /* 13 */ R_EP, /* 12 */ R_TP, /* 15 */ R_HARD_0, /* 16 */ R_HARD8_0, /* 17 */ R_LAST, } reg_type; typedef struct { fastref type; union { int code; unsigned char *bptr; unsigned short *wptr; unsigned long *lptr; unsigned char **segptr; union rtype *rptr; } reg; int literal; union { unsigned char **segreg; unsigned short *wptr; union rtype *rptr; } r2; } ea_type; typedef struct { ea_type srca; ea_type srcb; ea_type dst; fastref opcode; fastref flags; int next_pc; int oldpc; int cycles; #ifdef DEBUG h8500_opcode_info *op; #endif } decoded_inst; typedef struct { int exception; union rtype regs[20]; unsigned char *memory; unsigned short *cache_idx; int cache_top; int maximum; int csize; decoded_inst *cache; int cycles; int insts; int ticks; int compiles; } cpu_state_type;