summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/i8039/i8039.h
blob: da2388931f45f6de109bc94e7a41a5ba77a2c5be (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
/**************************************************************************
 *                      Intel 8039 Portable Emulator                      *
 *                                                                        *
 *                   Copyright Mirko Buffoni                              *
 *  Based on the original work Copyright Dan Boris, an 8048 emulator      *
 *     You are not allowed to distribute this software commercially       *
 *        Please, notify me, if you make any changes to this file         *
 **************************************************************************/

#ifndef _I8039_H
#define _I8039_H

#ifndef INLINE
#define INLINE static inline
#endif

#include "cpuintrf.h"


/**************************************************************************
    Internal Clock divisor

    External Clock is divided internally by 3 to produce the machine state
    generator. This is then divided by 5 for the instruction cycle times.
    (Each instruction cycle passes through 5 machine states).
*/


enum { I8039_PC=1, I8039_SP, I8039_PSW, I8039_A,  I8039_TC,
	   I8039_P1,   I8039_P2, I8039_R0,  I8039_R1, I8039_R2,
	   I8039_R3,   I8039_R4, I8039_R5,  I8039_R6, I8039_R7,
	   I8039_EA
};

extern void i8039_get_info(UINT32 state, cpuinfo *info);

/*   This handling of special I/O ports should be better for actual MAME
 *   architecture.  (i.e., define access to ports { I8039_p1, I8039_p1, dkong_out_w })
 */

#define  I8039_p0	0x100   /* Not used */
#define  I8039_p1	0x101
#define  I8039_p2	0x102
#define  I8039_p4	0x104
#define  I8039_p5	0x105
#define  I8039_p6	0x106
#define  I8039_p7	0x107
#define  I8039_t0	0x110
#define  I8039_t1	0x111
/* EA is activelow input on real hardware. It is treated
 * as active high here to remain compatible with existing drivers! */
#define  I8039_ea	0x112
#define  I8039_bus	0x120

/**************************************************************************
 * I8035 section
 **************************************************************************/
#if (HAS_I8035)
#define I8035_PC				I8039_PC
#define I8035_SP				I8039_SP
#define I8035_PSW				I8039_PSW
#define I8035_A 				I8039_A
#define I8035_TC				I8039_TC
#define I8035_P1				I8039_P1
#define I8035_P2				I8039_P2
#define I8035_R0				I8039_R0
#define I8035_R1				I8039_R1
#define I8035_R2				I8039_R2
#define I8035_R3				I8039_R3
#define I8035_R4				I8039_R4
#define I8035_R5				I8039_R5
#define I8035_R6				I8039_R6
#define I8035_R7				I8039_R7

#define i8035_ICount			i8039_ICount

extern void i8035_get_info(UINT32 state, cpuinfo *info);
#endif

/**************************************************************************
 * I8048 section
 **************************************************************************/
#if (HAS_I8048)
#define I8048_PC				I8039_PC
#define I8048_SP				I8039_SP
#define I8048_PSW				I8039_PSW
#define I8048_A 				I8039_A
#define I8048_TC				I8039_TC
#define I8048_P1				I8039_P1
#define I8048_P2				I8039_P2
#define I8048_R0				I8039_R0
#define I8048_R1				I8039_R1
#define I8048_R2				I8039_R2
#define I8048_R3				I8039_R3
#define I8048_R4				I8039_R4
#define I8048_R5				I8039_R5
#define I8048_R6				I8039_R6
#define I8048_R7				I8039_R7

#define i8048_ICount			i8039_ICount

extern void i8048_get_info(UINT32 state, cpuinfo *info);
#endif

/**************************************************************************
 * I8749 section
 **************************************************************************/
#if (HAS_I8749)
#define I8749_PC				I8039_PC
#define I8749_SP				I8039_SP
#define I8749_PSW				I8039_PSW
#define I8749_A 				I8039_A
#define I8749_TC				I8039_TC
#define I8749_P1				I8039_P1
#define I8749_P2				I8039_P2
#define I8749_R0				I8039_R0
#define I8749_R1				I8039_R1
#define I8749_R2				I8039_R2
#define I8749_R3				I8039_R3
#define I8749_R4				I8039_R4
#define I8749_R5				I8039_R5
#define I8749_R6				I8039_R6
#define I8749_R7				I8039_R7

#define i8749_ICount			i8039_ICount

extern void i8749_get_info(UINT32 state, cpuinfo *info);
#endif

/**************************************************************************
 * N7751 section
 **************************************************************************/
#if (HAS_N7751)
#define N7751_PC				I8039_PC
#define N7751_SP				I8039_SP
#define N7751_PSW				I8039_PSW
#define N7751_A 				I8039_A
#define N7751_TC				I8039_TC
#define N7751_P1				I8039_P1
#define N7751_P2				I8039_P2
#define N7751_R0				I8039_R0
#define N7751_R1				I8039_R1
#define N7751_R2				I8039_R2
#define N7751_R3				I8039_R3
#define N7751_R4				I8039_R4
#define N7751_R5				I8039_R5
#define N7751_R6				I8039_R6
#define N7751_R7				I8039_R7

#define n7751_ICount			i8039_ICount

extern void n7751_get_info(UINT32 state, cpuinfo *info);
#endif

/**************************************************************************
 * MB8884 section
 **************************************************************************/
#if (HAS_MB8884)
#define MB8884_PC				I8039_PC
#define MB8884_SP				I8039_SP
#define MB8884_PSW				I8039_PSW
#define MB8884_A 				I8039_A
#define MB8884_TC				I8039_TC
#define MB8884_P1				I8039_P1
#define MB8884_P2				I8039_P2
#define MB8884_R0				I8039_R0
#define MB8884_R1				I8039_R1
#define MB8884_R2				I8039_R2
#define MB8884_R3				I8039_R3
#define MB8884_R4				I8039_R4
#define MB8884_R5				I8039_R5
#define MB8884_R6				I8039_R6
#define MB8884_R7				I8039_R7

#define mb8884_ICount			i8039_ICount

extern void mb8884_get_info(UINT32 state, cpuinfo *info);
#endif

/**************************************************************************
 * M58715 section
 **************************************************************************/
#if (HAS_M58715)
#define M58715_PC				I8039_PC
#define M58715_SP				I8039_SP
#define M58715_PSW				I8039_PSW
#define M58715_A 				I8039_A
#define M58715_TC				I8039_TC
#define M58715_P1				I8039_P1
#define M58715_P2				I8039_P2
#define M58715_R0				I8039_R0
#define M58715_R1				I8039_R1
#define M58715_R2				I8039_R2
#define M58715_R3				I8039_R3
#define M58715_R4				I8039_R4
#define M58715_R5				I8039_R5
#define M58715_R6				I8039_R6
#define M58715_R7				I8039_R7

#define m58715_ICount			i8039_ICount

extern void m58715_get_info(UINT32 state, cpuinfo *info);
#endif

/*
 *   Input a UINT8 from given I/O port
 */
#define I8039_In(Port) ((UINT8)io_read_byte_8le(Port))


/*
 *   Output a UINT8 to given I/O port
 */
#define I8039_Out(Port,Value) (io_write_byte_8le(Port,Value))


/*
 *   Read a UINT8 from given memory location
 */
#define I8039_RDMEM(A) ((unsigned)program_read_byte_8le(A))


/*
 *   Write a UINT8 to given memory location
 */
#define I8039_WRMEM(A,V) (program_write_byte_8le(A,V))


/*
 *   I8039_RDOP() is identical to I8039_RDMEM() except it is used for reading
 *   opcodes. In case of system with memory mapped I/O, this function can be
 *   used to greatly speed up emulation
 */
#define I8039_RDOP(A) ((unsigned)cpu_readop(A))


/*
 *   I8039_RDOP_ARG() is identical to I8039_RDOP() except it is used for reading
 *   opcode arguments. This difference can be used to support systems that
 *   use different encoding mechanisms for opcodes and opcode arguments
 */
#define I8039_RDOP_ARG(A) ((unsigned)cpu_readop_arg(A))

#ifdef  ENABLE_DEBUGGER
offs_t i8039_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram);
#endif

#endif  /* _I8039_H */