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