1 /* tm.h 2 Copyright (C) 1992, 1993 Free Software Foundation, Inc. 3 4 This file is part of Z8KSIM 5 6 Z8KSIM is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2, or (at your option) 9 any later version. 10 11 Z8KSIM is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with Z8KZIM; if not, write to the Free Software 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 19 20 #ifndef _TM_H 21 #define _TM_H 22 23 #ifdef __FOOBEYGNUC__ 24 typedef SFtype __attribute__ ((mode (SF))); 25 typedef DFtype __attribute__ ((mode (DF))); 26 27 typedef int HItype __attribute__ ((mode (HI))); 28 typedef int SItype __attribute__ ((mode (SI))); 29 30 typedef unsigned int UHItype __attribute__ ((mode (HI))); 31 typedef unsigned int USItype __attribute__ ((mode (SI))); 32 #else 33 typedef float SFtype; 34 typedef double DFtype; 35 typedef short int HItype; 36 typedef long int SItype; 37 typedef unsigned short UHItype ; 38 typedef unsigned int USItype ; 39 #endif 40 41 typedef struct UDIstruct 42 { 43 USItype high; 44 USItype low; 45 } UDItype; 46 47 #define BIG_ENDIAN_HOST 48 typedef unsigned int sim_phys_addr_type; 49 typedef unsigned int sim_logical_addr_type; 50 51 #define PAGE_POWER 23 /* only one pages */ 52 53 #define MAP_PHYSICAL_TO_LOGICAL(x) (((x >> 8) & 0x7f0000) | (x & 0xffff)) 54 #define MAP_LOGICAL_TO_PHYSICAL(x) (((x <<8) & 0x7f000000) | (x & 0xffff)) 55 #define REG_PC 17 56 #define REG_CYCLES 18 57 #define REG_INSTS 19 58 #define REG_TIME 20 59 #define REG_FP 21 60 #define REG_SP 22 61 #define REG_CCR 16 62 63 #define SET_REG(x,y) set_reg(x,y) 64 #define SINGLE_STEP 1 65 66 #define PSW_CARRY context->carry 67 #define PSW_OP context->op 68 #define PSW_OVERFLOW context->overflow 69 #define PSW_SIGN context->sign 70 #define PSW_ZERO context->zero 71 #define GET_PC() context->pc 72 #define SET_PC(x) context->pc = x 73 74 struct op_info 75 { 76 short int exec; 77 }; 78 79 extern struct op_info op_info_table[]; 80 81 typedef union 82 { 83 unsigned short int word; 84 85 } 86 87 borw_type; 88 89 typedef struct state_struct 90 { 91 unsigned short *memory; 92 int carry; 93 int sign; 94 int zero; 95 int overflow; 96 int op; 97 int cycles; 98 99 borw_type regs[16]; 100 101 sim_phys_addr_type sometimes_pc; 102 #ifdef __GNUC__ 103 volatile 104 #endif 105 int exception; 106 107 #define iwords_0 iwords0 108 #define iwords_1 iwords1 109 #define iwords_2 iwords2 110 #define iwords_3 iwords3 111 112 #define ibytes_0 (iwords_0>>8) 113 #define ibytes_1 (iwords_0&0xff) 114 #define ibytes_2 (iwords_1>>8) 115 #define ibytes_3 (iwords_1& 0xff) 116 #define ibytes_4 (iwords_2>>8) 117 118 int insts; 119 int ticks; 120 121 int next_inst; 122 int broken_flags; 123 124 int srca; 125 int srcb; 126 int dst; 127 int size; 128 } 129 130 sim_state_type; 131 132 #define CMP_FLAGS 100 133 #define TST_FLAGS 101 134 #endif 135 136 extern int get_word_mem_da PARAMS((sim_state_type *context, int addr)); 137 extern int get_word_reg PARAMS((sim_state_type *context, int reg)); 138 extern void support_call PARAMS((sim_state_type *context, int sc)); 139 extern void tm_exception PARAMS((int x)); 140 extern int tm_read_byte PARAMS((int x)); 141 extern int tm_signal PARAMS((void)); 142 extern void tm_state PARAMS((sim_state_type *x)); 143 extern void tm_write_byte PARAMS((int x, int y)); 144 extern void bfop_bad1 PARAMS(()); 145 extern int fail PARAMS((sim_state_type *context, int v)); 146 extern void fop_bad PARAMS((sim_state_type *context)); 147 extern void sfop_bad1 PARAMS(()); 148 extern void swap_long PARAMS((char *buf, int val)); 149 extern void swap_word PARAMS((char *buf, int val)); 150 extern void tm_fetch_register PARAMS((int regno, char *buf)); 151 extern void tm_info_print PARAMS((sim_state_type *x)); 152 extern void tm_resume PARAMS((int step)); 153 extern void tm_store_register PARAMS((int regno, int value)); 154 155 156 #ifndef __GNUC__ 157 /* If were using gnuc then these will be inlined, so the prototypes 158 won't be right */ 159 long int sitoptr PARAMS((long int si)); 160 long int ptrtosi PARAMS((long int ptr)); 161 void put_long_reg PARAMS((sim_state_type *context, int reg, int val)); 162 void put_quad_reg PARAMS((sim_state_type *context, int reg, int val1, int val2)); 163 void put_word_reg PARAMS((sim_state_type *context, int reg, int val)); 164 SItype get_long_reg PARAMS((sim_state_type *context, int reg)); 165 void put_byte_reg PARAMS((sim_state_type *context, int reg, int val)); 166 int get_byte_reg PARAMS((sim_state_type *context, int reg)); 167 void put_word_mem_da PARAMS((sim_state_type *context, int addr, int value)); 168 unsigned char get_byte_mem_da PARAMS((sim_state_type *context, int addr)); 169 void put_byte_mem_da PARAMS((sim_state_type *context, int addr, int value)); 170 SItype get_long_mem_da PARAMS((sim_state_type *context, int addr)); 171 void put_long_mem_da PARAMS((sim_state_type *context, int addr, int value)); 172 int get_word_mem_ir PARAMS((sim_state_type *context, int reg)); 173 void put_word_mem_ir PARAMS((sim_state_type *context, int reg, int value)); 174 int get_byte_mem_ir PARAMS((sim_state_type *context, int reg)); 175 void put_byte_mem_ir PARAMS((sim_state_type *context, int reg, int value)); 176 int get_long_mem_ir PARAMS((sim_state_type *context, int reg)); 177 void put_long_mem_ir PARAMS((sim_state_type *context, int reg, int value)); 178 void put_long_mem_x PARAMS((sim_state_type *context, int base, int reg, int value)); 179 void put_word_mem_x PARAMS((sim_state_type *context, int base, int reg, int value)); 180 void put_byte_mem_x PARAMS((sim_state_type *context, int base, int reg, int value)); 181 int get_word_mem_x PARAMS((sim_state_type *context, int base, int reg)); 182 int get_byte_mem_x PARAMS((sim_state_type *context, int base, int reg)); 183 int get_long_mem_x PARAMS((sim_state_type *context, int base, int reg)); 184 int COND PARAMS((sim_state_type *context, int c)); 185 void NORMAL_FLAGS PARAMS((sim_state_type *context, int size, int dst, int srca, int srcb)); 186 void TEST_NORMAL_FLAGS PARAMS((sim_state_type *context, int size, int dst)); 187 void put_ptr_long_reg PARAMS((sim_state_type *context, int reg, int val)); 188 long int get_ptr_long_reg PARAMS((sim_state_type *context, int reg)); 189 long int get_ptr_long_mem_ir PARAMS((sim_state_type *context, int reg)); 190 long int get_ptr_long_mem_da PARAMS((sim_state_type *context, long int addr)); 191 void put_ptr_long_mem_da PARAMS((sim_state_type *context, long int addr, long int ptr)); 192 #endif 193