diff options
Diffstat (limited to 'sim/z8k/tm.h')
-rw-r--r-- | sim/z8k/tm.h | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/sim/z8k/tm.h b/sim/z8k/tm.h new file mode 100644 index 00000000000..4527ff9304d --- /dev/null +++ b/sim/z8k/tm.h @@ -0,0 +1,192 @@ +/* tm.h + Copyright (C) 1992, 1993 Free Software Foundation, Inc. + +This file is part of Z8KSIM + +Z8KSIM is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +Z8KSIM is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Z8KZIM; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef _TM_H +#define _TM_H + +#ifdef __FOOBEYGNUC__ +typedef SFtype __attribute__ ((mode (SF))); +typedef DFtype __attribute__ ((mode (DF))); + +typedef int HItype __attribute__ ((mode (HI))); +typedef int SItype __attribute__ ((mode (SI))); + +typedef unsigned int UHItype __attribute__ ((mode (HI))); +typedef unsigned int USItype __attribute__ ((mode (SI))); +#else +typedef float SFtype; +typedef double DFtype; +typedef short int HItype; +typedef long int SItype; +typedef unsigned short UHItype ; +typedef unsigned int USItype ; +#endif + +typedef struct UDIstruct +{ + USItype high; + USItype low; +} UDItype; + +#define BIG_ENDIAN_HOST +typedef unsigned int sim_phys_addr_type; +typedef unsigned int sim_logical_addr_type; + +#define PAGE_POWER 23 /* only one pages */ + +#define MAP_PHYSICAL_TO_LOGICAL(x) (((x >> 8) & 0x7f0000) | (x & 0xffff)) +#define MAP_LOGICAL_TO_PHYSICAL(x) (((x <<8) & 0x7f000000) | (x & 0xffff)) +#define REG_PC 17 +#define REG_CYCLES 18 +#define REG_INSTS 19 +#define REG_TIME 20 +#define REG_FP 21 +#define REG_SP 22 +#define REG_CCR 16 + +#define SET_REG(x,y) set_reg(x,y) +#define SINGLE_STEP 1 + +#define PSW_CARRY context->carry +#define PSW_OP context->op +#define PSW_OVERFLOW context->overflow +#define PSW_SIGN context->sign +#define PSW_ZERO context->zero +#define GET_PC() context->pc +#define SET_PC(x) context->pc = x + +struct op_info +{ + short int exec; +}; + +extern struct op_info op_info_table[]; + +typedef union +{ + unsigned short int word; + +} + +borw_type; + +typedef struct state_struct +{ + unsigned short *memory; + int carry; + int sign; + int zero; + int overflow; + int op; + int cycles; + + borw_type regs[16]; + + sim_phys_addr_type sometimes_pc; +#ifdef __GNUC__ + volatile +#endif + int exception; + +#define iwords_0 iwords0 +#define iwords_1 iwords1 +#define iwords_2 iwords2 +#define iwords_3 iwords3 + +#define ibytes_0 (iwords_0>>8) +#define ibytes_1 (iwords_0&0xff) +#define ibytes_2 (iwords_1>>8) +#define ibytes_3 (iwords_1& 0xff) +#define ibytes_4 (iwords_2>>8) + + int insts; + int ticks; + + int next_inst; + int broken_flags; + + int srca; + int srcb; + int dst; + int size; +} + +sim_state_type; + +#define CMP_FLAGS 100 +#define TST_FLAGS 101 +#endif + +extern int get_word_mem_da PARAMS((sim_state_type *context, int addr)); +extern int get_word_reg PARAMS((sim_state_type *context, int reg)); +extern void support_call PARAMS((sim_state_type *context, int sc)); +extern void tm_exception PARAMS((int x)); +extern int tm_read_byte PARAMS((int x)); +extern int tm_signal PARAMS((void)); +extern void tm_state PARAMS((sim_state_type *x)); +extern void tm_write_byte PARAMS((int x, int y)); +extern void bfop_bad1 PARAMS(()); +extern int fail PARAMS((sim_state_type *context, int v)); +extern void fop_bad PARAMS((sim_state_type *context)); +extern void sfop_bad1 PARAMS(()); +extern void swap_long PARAMS((char *buf, int val)); +extern void swap_word PARAMS((char *buf, int val)); +extern void tm_fetch_register PARAMS((int regno, char *buf)); +extern void tm_info_print PARAMS((sim_state_type *x)); +extern void tm_resume PARAMS((int step)); +extern void tm_store_register PARAMS((int regno, int value)); + + +#ifndef __GNUC__ +/* If were using gnuc then these will be inlined, so the prototypes + won't be right */ +long int sitoptr PARAMS((long int si)); +long int ptrtosi PARAMS((long int ptr)); +void put_long_reg PARAMS((sim_state_type *context, int reg, int val)); +void put_quad_reg PARAMS((sim_state_type *context, int reg, int val1, int val2)); +void put_word_reg PARAMS((sim_state_type *context, int reg, int val)); +SItype get_long_reg PARAMS((sim_state_type *context, int reg)); +void put_byte_reg PARAMS((sim_state_type *context, int reg, int val)); +int get_byte_reg PARAMS((sim_state_type *context, int reg)); +void put_word_mem_da PARAMS((sim_state_type *context, int addr, int value)); +unsigned char get_byte_mem_da PARAMS((sim_state_type *context, int addr)); +void put_byte_mem_da PARAMS((sim_state_type *context, int addr, int value)); +SItype get_long_mem_da PARAMS((sim_state_type *context, int addr)); +void put_long_mem_da PARAMS((sim_state_type *context, int addr, int value)); +int get_word_mem_ir PARAMS((sim_state_type *context, int reg)); +void put_word_mem_ir PARAMS((sim_state_type *context, int reg, int value)); +int get_byte_mem_ir PARAMS((sim_state_type *context, int reg)); +void put_byte_mem_ir PARAMS((sim_state_type *context, int reg, int value)); +int get_long_mem_ir PARAMS((sim_state_type *context, int reg)); +void put_long_mem_ir PARAMS((sim_state_type *context, int reg, int value)); +void put_long_mem_x PARAMS((sim_state_type *context, int base, int reg, int value)); +void put_word_mem_x PARAMS((sim_state_type *context, int base, int reg, int value)); +void put_byte_mem_x PARAMS((sim_state_type *context, int base, int reg, int value)); +int get_word_mem_x PARAMS((sim_state_type *context, int base, int reg)); +int get_byte_mem_x PARAMS((sim_state_type *context, int base, int reg)); +int get_long_mem_x PARAMS((sim_state_type *context, int base, int reg)); +int COND PARAMS((sim_state_type *context, int c)); +void NORMAL_FLAGS PARAMS((sim_state_type *context, int size, int dst, int srca, int srcb)); +void TEST_NORMAL_FLAGS PARAMS((sim_state_type *context, int size, int dst)); +void put_ptr_long_reg PARAMS((sim_state_type *context, int reg, int val)); +long int get_ptr_long_reg PARAMS((sim_state_type *context, int reg)); +long int get_ptr_long_mem_ir PARAMS((sim_state_type *context, int reg)); +long int get_ptr_long_mem_da PARAMS((sim_state_type *context, long int addr)); +void put_ptr_long_mem_da PARAMS((sim_state_type *context, long int addr, long int ptr)); +#endif |