|  | #define DEBUG | 
|  |  | 
|  | /* These define the size of main memory for the simulator. | 
|  |  | 
|  | Note the size of main memory for the H8/300H is only 256k.  Keeping it | 
|  | small makes the simulator run much faster and consume less memory. | 
|  |  | 
|  | The linker knows about the limited size of the simulator's main memory | 
|  | on the H8/300H (via the h8300h.sc linker script).  So if you change | 
|  | H8300H_MSIZE, be sure to fix the linker script too. | 
|  |  | 
|  | Also note that there's a separate "eightbit" area aside from main | 
|  | memory.  For simplicity, the simulator assumes any data memory reference | 
|  | outside of main memory refers to the eightbit area (in theory, this | 
|  | can only happen when simulating H8/300H programs).  We make no attempt | 
|  | to catch overlapping addresses, wrapped addresses, etc etc.  */ | 
|  | #define H8300_MSIZE (1 << 16) | 
|  |  | 
|  | /* avolkov: | 
|  | Next 2 macros are ugly for any workstation, but while they're work. | 
|  | Memory size MUST be configurable.  */ | 
|  | #define H8300H_MSIZE (1 << 18) | 
|  | #define H8300S_MSIZE (1 << 24) | 
|  |  | 
|  | #define CSIZE 1000 | 
|  |  | 
|  | /* Local register names */ | 
|  | typedef enum | 
|  | { | 
|  | R0, R1, R2, R3, R4, R5, R6, R7, | 
|  | R_ZERO, | 
|  | R_PC, | 
|  | R_CCR, | 
|  | R_EXR, | 
|  | R_HARD_0, | 
|  | R_LAST, | 
|  | } reg_type; | 
|  |  | 
|  |  | 
|  | /* Structure used to describe addressing */ | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | int type; | 
|  | int reg; | 
|  | int literal; | 
|  | } ea_type; | 
|  |  | 
|  |  | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | ea_type src; | 
|  | ea_type dst; | 
|  | int opcode; | 
|  | int next_pc; | 
|  | int oldpc; | 
|  | int cycles; | 
|  | #ifdef DEBUG | 
|  | struct h8_opcode *op; | 
|  | #endif | 
|  | } | 
|  | decoded_inst; | 
|  |  | 
|  | enum h8300_sim_state { | 
|  | SIM_STATE_RUNNING, SIM_STATE_EXITED, SIM_STATE_SIGNALLED, SIM_STATE_STOPPED | 
|  | }; | 
|  |  | 
|  | /* For Command Line.  */ | 
|  | char **ptr_command_line; /* Pointer to Command Line Arguments. */ | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | enum h8300_sim_state state; | 
|  | int exception; | 
|  | unsigned  int regs[9]; | 
|  | int pc; | 
|  | int ccr; | 
|  | int exr; | 
|  |  | 
|  | unsigned char *memory; | 
|  | unsigned char *eightbit; | 
|  | unsigned short *cache_idx; | 
|  | int cache_top; | 
|  | int maximum; | 
|  | int csize; | 
|  | int mask; | 
|  |  | 
|  | decoded_inst *cache; | 
|  | int cycles; | 
|  | int insts; | 
|  | int ticks; | 
|  | int compiles; | 
|  | #ifdef ADEBUG | 
|  | int stats[O_LAST]; | 
|  | #endif | 
|  | } | 
|  | cpu_state_type; |