#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;
