1 /* 2 tms9900.h 3 4 C Header file for TMS9900 core 5 */ 6 7 #ifndef TMS9900_H 8 #define TMS9900_H 9 10 #include <stdio.h> 11 #include "driver.h" 12 #include "osd_cpu.h" 13 14 #define TMS9900_ID 0 /* original processor, 1976 (huh... it had some multi-chip ancestors, */ 15 /* the 9x0 series)*/ 16 #define TMS9940_ID 1 /* embedded version, 1979 */ 17 #define TMS9980_ID 2 /* 8-bit variant of tms9900. Two distinct chips actually : tms9980a, */ 18 /* and tms9981 with an extra clock and simplified power supply */ 19 #define TMS9985_ID 3 /* 9980 with on-chip 16-bit RAM and decrementer, c. 1978 (never released) */ 20 #define TMS9989_ID 4 /* improved 9980, used in bombs, missiles, and other *nice* hardware */ 21 #define TMS9995_ID 5 /* tms9985-like, with many improvements */ 22 #define TMS99105A_ID 6 /* late variant, widely improved, 1981 */ 23 #define TMS99110A_ID 7 /* same as above, with floating point support, c. 1981 */ 24 25 26 27 enum { 28 TMS9900_PC=1, TMS9900_WP, TMS9900_STATUS, TMS9900_IR 29 #ifdef MAME_DEBUG 30 , 31 TMS9900_R0, TMS9900_R1, TMS9900_R2, TMS9900_R3, 32 TMS9900_R4, TMS9900_R5, TMS9900_R6, TMS9900_R7, 33 TMS9900_R8, TMS9900_R9, TMS9900_R10, TMS9900_R11, 34 TMS9900_R12, TMS9900_R13, TMS9900_R14, TMS9900_R15 35 #endif 36 }; 37 38 #if (HAS_TMS9900) 39 40 extern int tms9900_ICount; 41 42 extern void tms9900_init(void); 43 extern void tms9900_reset(void *param); 44 extern int tms9900_execute(int cycles); 45 extern void tms9900_exit(void); 46 extern unsigned tms9900_get_context(void *dst); 47 extern void tms9900_set_context(void *src); 48 extern unsigned tms9900_get_reg(int regnum); 49 extern void tms9900_set_reg(int regnum, unsigned val); 50 extern void tms9900_set_irq_line(int irqline, int state); 51 extern void tms9900_set_irq_callback(int (*callback)(int irqline)); 52 extern const char *tms9900_info(void *context, int regnum); 53 extern unsigned tms9900_dasm(char *buffer, unsigned pc); 54 55 #endif 56 57 #if (HAS_TMS9940) 58 59 extern int tms9940_ICount; 60 61 extern void tms9940_init(void); 62 extern void tms9940_reset(void *param); 63 extern int tms9940_execute(int cycles); 64 extern void tms9940_exit(void); 65 extern unsigned tms9940_get_context(void *dst); 66 extern void tms9940_set_context(void *src); 67 extern unsigned tms9940_get_reg(int regnum); 68 extern void tms9940_set_reg(int regnum, unsigned val); 69 extern void tms9940_set_irq_line(int irqline, int state); 70 extern void tms9940_set_irq_callback(int (*callback)(int irqline)); 71 extern const char *tms9940_info(void *context, int regnum); 72 extern unsigned tms9940_dasm(char *buffer, unsigned pc); 73 74 #endif 75 76 #if (HAS_TMS9980) 77 78 extern int tms9980a_ICount; 79 80 extern void tms9980a_init(void); 81 extern void tms9980a_reset(void *param); 82 extern int tms9980a_execute(int cycles); 83 extern void tms9980a_exit(void); 84 extern unsigned tms9980a_get_context(void *dst); 85 extern void tms9980a_set_context(void *src); 86 extern unsigned tms9980a_get_reg(int regnum); 87 extern void tms9980a_set_reg(int regnum, unsigned val); 88 extern void tms9980a_set_irq_line(int irqline, int state); 89 extern void tms9980a_set_irq_callback(int (*callback)(int irqline)); 90 extern const char *tms9980a_info(void *context, int regnum); 91 extern unsigned tms9980a_dasm(char *buffer, unsigned pc); 92 93 #endif 94 95 #if (HAS_TMS9985) 96 97 extern int tms9985_ICount; 98 99 extern void tms9985_init(void); 100 extern void tms9985_reset(void *param); 101 extern int tms9985_execute(int cycles); 102 extern void tms9985_exit(void); 103 extern unsigned tms9985_get_context(void *dst); 104 extern void tms9985_set_context(void *src); 105 extern unsigned tms9985_get_reg(int regnum); 106 extern void tms9985_set_reg(int regnum, unsigned val); 107 extern void tms9985_set_irq_line(int irqline, int state); 108 extern void tms9985_set_irq_callback(int (*callback)(int irqline)); 109 extern const char *tms9985_info(void *context, int regnum); 110 extern unsigned tms9985_dasm(char *buffer, unsigned pc); 111 112 #endif 113 114 #if (HAS_TMS9989) 115 116 extern int tms9989_ICount; 117 118 extern void tms9989_init(void); 119 extern void tms9989_reset(void *param); 120 extern int tms9989_execute(int cycles); 121 extern void tms9989_exit(void); 122 extern unsigned tms9989_get_context(void *dst); 123 extern void tms9989_set_context(void *src); 124 extern unsigned tms9989_get_reg(int regnum); 125 extern void tms9989_set_reg(int regnum, unsigned val); 126 extern void tms9989_set_irq_line(int irqline, int state); 127 extern void tms9989_set_irq_callback(int (*callback)(int irqline)); 128 extern const char *tms9989_info(void *context, int regnum); 129 extern unsigned tms9989_dasm(char *buffer, unsigned pc); 130 131 #endif 132 133 #if (HAS_TMS9995) 134 135 extern int tms9995_ICount; 136 137 extern void tms9995_init(void); 138 extern void tms9995_reset(void *param); 139 extern int tms9995_execute(int cycles); 140 extern void tms9995_exit(void); 141 extern unsigned tms9995_get_context(void *dst); 142 extern void tms9995_set_context(void *src); 143 extern unsigned tms9995_get_reg(int regnum); 144 extern void tms9995_set_reg(int regnum, unsigned val); 145 extern void tms9995_set_irq_line(int irqline, int state); 146 extern void tms9995_set_irq_callback(int (*callback)(int irqline)); 147 extern const char *tms9995_info(void *context, int regnum); 148 extern unsigned tms9995_dasm(char *buffer, unsigned pc); 149 150 /* 151 structure with the parameters tms9995_reset wants. 152 */ 153 typedef struct tms9995reset_param 154 { 155 /* auto_wait_state : a non-zero value makes tms9995 generate a wait state automatically on each 156 memory access */ 157 int auto_wait_state; 158 } tms9995reset_param; 159 160 #endif 161 162 #if (HAS_TMS99105A) 163 164 extern int tms99105a_ICount; 165 166 extern void tms99105a_init(void); 167 extern void tms99105a_reset(void *param); 168 extern int tms99105a_execute(int cycles); 169 extern void tms99105a_exit(void); 170 extern unsigned tms99105a_get_context(void *dst); 171 extern void tms99105a_set_context(void *src); 172 extern unsigned tms99105a_get_reg(int regnum); 173 extern void tms99105a_set_reg(int regnum, unsigned val); 174 extern void tms99105a_set_irq_line(int irqline, int state); 175 extern void tms99105a_set_irq_callback(int (*callback)(int irqline)); 176 extern const char *tms99105a_info(void *context, int regnum); 177 extern unsigned tms99105a_dasm(char *buffer, unsigned pc); 178 179 #endif 180 181 #if (HAS_TMS99110A) 182 183 extern int tms99110A_ICount; 184 185 extern void tms99110a_init(void); 186 extern void tms99110a_reset(void *param); 187 extern int tms99110a_execute(int cycles); 188 extern void tms99110a_exit(void); 189 extern unsigned tms99110a_get_context(void *dst); 190 extern void tms99110a_set_context(void *src); 191 extern unsigned tms99110a_get_reg(int regnum); 192 extern void tms99110a_set_reg(int regnum, unsigned val); 193 extern void tms99110a_set_irq_line(int irqline, int state); 194 extern void tms99110a_set_irq_callback(int (*callback)(int irqline)); 195 extern const char *tms99110a_info(void *context, int regnum); 196 extern unsigned tms99110a_dasm(char *buffer, unsigned pc); 197 198 #endif 199 200 #ifdef MAME_DEBUG 201 extern unsigned Dasm9900 (char *buffer, unsigned pc); 202 #endif 203 204 #endif 205 206 207