1 // license:BSD-3-Clause
2 // copyright-holders:Juergen Buchmueller
3 #ifndef MAME_CPU_UPD7810_UPD7810_H
4 #define MAME_CPU_UPD7810_UPD7810_H
5 
6 #pragma once
7 
8 
9 /*
10   all types have internal ram at 0xff00-0xffff
11   7810
12   7811 (4kbyte),7812(8),7814(16) have internal rom at 0x0000
13 */
14 
15 
16 enum
17 {
18 	UPD7810_PC=1, UPD7810_SP, UPD7810_PSW,
19 	UPD7810_EA, UPD7810_V, UPD7810_A, UPD7810_VA,
20 	UPD7810_BC, UPD7810_B, UPD7810_C, UPD7810_DE, UPD7810_D, UPD7810_E, UPD7810_HL, UPD7810_H, UPD7810_L,
21 	UPD7810_EA2, UPD7810_V2, UPD7810_A2, UPD7810_VA2,
22 	UPD7810_BC2, UPD7810_B2, UPD7810_C2, UPD7810_DE2, UPD7810_D2, UPD7810_E2, UPD7810_HL2, UPD7810_H2, UPD7810_L2,
23 	UPD7810_CNT0, UPD7810_CNT1, UPD7810_TM0, UPD7810_TM1, UPD7810_ECNT, UPD7810_ECPT, UPD7810_ETM0, UPD7810_ETM1,
24 	UPD7810_MA, UPD7810_MB, UPD7810_MCC, UPD7810_MC, UPD7810_MM, UPD7810_MF,
25 	UPD7810_TMM, UPD7810_ETMM, UPD7810_EOM, UPD7810_SML, UPD7810_SMH,
26 	UPD7810_ANM, UPD7810_MKL, UPD7810_MKH, UPD7810_ZCM,
27 	UPD7810_TXB, UPD7810_RXB, UPD7810_CR0, UPD7810_CR1, UPD7810_CR2, UPD7810_CR3,
28 	UPD7810_AN0, UPD7810_AN1, UPD7810_AN2, UPD7810_AN3, UPD7810_AN4, UPD7810_AN5, UPD7810_AN6, UPD7810_AN7,
29 	UPD7810_TXD, UPD7810_RXD, UPD7810_SCK, UPD7810_TI, UPD7810_TO, UPD7810_CI, UPD7810_CO0, UPD7810_CO1,
30 	UPD7810_LV0, UPD7810_LV1
31 };
32 
33 /* IRQ lines */
34 #define UPD7810_INTF1       0
35 #define UPD7810_INTF2       1
36 #define UPD7810_INTF0       2
37 #define UPD7810_INTFE1      4
38 
39 
40 class upd7810_device : public cpu_device
41 {
42 public:
43 	// construction/destruction
44 	upd7810_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
45 
46 	// configuration helpers
to_func()47 	auto to_func() { return m_to_func.bind(); }
co0_func()48 	auto co0_func() { return m_co0_func.bind(); }
co1_func()49 	auto co1_func() { return m_co1_func.bind(); }
txd_func()50 	auto txd_func() { return m_txd_func.bind(); }
rxd_func()51 	auto rxd_func() { return m_rxd_func.bind(); }
an0_func()52 	auto an0_func() { return m_an_func[0].bind(); }
an1_func()53 	auto an1_func() { return m_an_func[1].bind(); }
an2_func()54 	auto an2_func() { return m_an_func[2].bind(); }
an3_func()55 	auto an3_func() { return m_an_func[3].bind(); }
an4_func()56 	auto an4_func() { return m_an_func[4].bind(); }
an5_func()57 	auto an5_func() { return m_an_func[5].bind(); }
an6_func()58 	auto an6_func() { return m_an_func[6].bind(); }
an7_func()59 	auto an7_func() { return m_an_func[7].bind(); }
60 
pa_in_cb()61 	auto pa_in_cb() { return m_pa_in_cb.bind(); }
pb_in_cb()62 	auto pb_in_cb() { return m_pb_in_cb.bind(); }
pc_in_cb()63 	auto pc_in_cb() { return m_pc_in_cb.bind(); }
pd_in_cb()64 	auto pd_in_cb() { return m_pd_in_cb.bind(); }
pf_in_cb()65 	auto pf_in_cb() { return m_pf_in_cb.bind(); }
pa_out_cb()66 	auto pa_out_cb() { return m_pa_out_cb.bind(); }
pb_out_cb()67 	auto pb_out_cb() { return m_pb_out_cb.bind(); }
pc_out_cb()68 	auto pc_out_cb() { return m_pc_out_cb.bind(); }
pd_out_cb()69 	auto pd_out_cb() { return m_pd_out_cb.bind(); }
pf_out_cb()70 	auto pf_out_cb() { return m_pf_out_cb.bind(); }
71 
set_pa_pullups(uint8_t p)72 	void set_pa_pullups(uint8_t p) { m_pa_pullups = p; }
set_pb_pullups(uint8_t p)73 	void set_pb_pullups(uint8_t p) { m_pb_pullups = p; }
set_pc_pullups(uint8_t p)74 	void set_pc_pullups(uint8_t p) { m_pc_pullups = p; }
set_pd_pullups(uint8_t p)75 	void set_pd_pullups(uint8_t p) { m_pd_pullups = p; }
set_pf_pullups(uint8_t p)76 	void set_pf_pullups(uint8_t p) { m_pf_pullups = p; }
77 
pt_in_cb()78 	auto pt_in_cb() { return m_pt_in_cb.bind(); }
79 
80 	void pa_w(uint8_t data, uint8_t mem_mask = ~0);
81 	void pb_w(uint8_t data, uint8_t mem_mask = ~0);
82 	void pc_w(uint8_t data, uint8_t mem_mask = ~0);
83 	void pd_w(uint8_t data, uint8_t mem_mask = ~0);
84 	void pf_w(uint8_t data, uint8_t mem_mask = ~0);
85 
86 protected:
87 	void upd_internal_128_ram_map(address_map &map);
88 	void upd_internal_256_ram_map(address_map &map);
89 	void upd_internal_4096_rom_map(address_map &map);
90 
91 	// flags
92 	enum
93 	{
94 		CY = 0x01,
95 		F1 = 0x02,
96 		L0 = 0x04,
97 		L1 = 0x08,
98 		HC = 0x10,
99 		SK = 0x20,
100 		Z  = 0x40,
101 		F7 = 0x80
102 	};
103 
104 	// IRR flags
105 	enum
106 	{
107 		INTFNMI = 0x0001,
108 		INTFT0  = 0x0002,
109 		INTFT1  = 0x0004,
110 		INTF1   = 0x0008,
111 		INTF2   = 0x0010,
112 		INTFE0  = 0x0020,
113 		INTFE1  = 0x0040,
114 		INTFEIN = 0x0080,
115 		INTFAD  = 0x0100,
116 		INTFSR  = 0x0200,
117 		INTFST  = 0x0400,
118 		INTER   = 0x0800,
119 		INTOV   = 0x1000,
120 		INTF0   = 0x2000
121 	};
122 
123 	// ITF flags
124 	enum
125 	{
126 		INTAN4 = 0x0001,
127 		INTAN5 = 0x0002,
128 		INTAN6 = 0x0004,
129 		INTAN7 = 0x0008,
130 		INTSB  = 0x0010
131 	};
132 
133 	upd7810_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_map);
134 
135 	// device-level overrides
136 	virtual void device_start() override;
137 	virtual void device_reset() override;
138 
139 	// device_execute_interface overrides
execute_clocks_to_cycles(uint64_t clocks)140 	virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const noexcept override { return (clocks + 3 - 1) / 3; }
execute_cycles_to_clocks(uint64_t cycles)141 	virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const noexcept override { return (cycles * 3); }
execute_min_cycles()142 	virtual uint32_t execute_min_cycles() const noexcept override { return 1; }
execute_max_cycles()143 	virtual uint32_t execute_max_cycles() const noexcept override { return 40; }
execute_input_lines()144 	virtual uint32_t execute_input_lines() const noexcept override { return 2; }
execute_input_edge_triggered(int inputnum)145 	virtual bool execute_input_edge_triggered(int inputnum) const noexcept override { return true; }
146 	virtual void execute_run() override;
147 	virtual void execute_set_input(int inputnum, int state) override;
148 
149 	// device_memory_interface overrides
150 	virtual space_config_vector memory_space_config() const override;
151 
152 	// device_state_interface overrides
153 	virtual void state_string_export(const device_state_entry &entry, std::string &str) const override;
154 
155 	// device_disasm_interface overrides
156 	virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
157 
158 	virtual void handle_timers(int cycles);
159 	virtual void upd7810_take_irq();
160 
161 	void upd7810_handle_timer0(int cycles, int clkdiv);
162 	void upd7810_handle_timer1(int cycles, int clkdiv);
163 
164 	void upd7810_co0_output_change();
165 	void upd7810_co1_output_change();
166 
167 	devcb_write_line  m_to_func;
168 	devcb_write_line  m_co0_func;
169 	devcb_write_line  m_co1_func;
170 	devcb_write_line  m_txd_func;
171 	devcb_read_line   m_rxd_func;
172 	devcb_read8::array<8> m_an_func;
173 
174 	devcb_read8       m_pa_in_cb;
175 	devcb_read8       m_pb_in_cb;
176 	devcb_read8       m_pc_in_cb;
177 	devcb_read8       m_pd_in_cb;
178 	devcb_read8       m_pf_in_cb;
179 	devcb_write8      m_pa_out_cb;
180 	devcb_write8      m_pb_out_cb;
181 	devcb_write8      m_pc_out_cb;
182 	devcb_write8      m_pd_out_cb;
183 	devcb_write8      m_pf_out_cb;
184 
185 	devcb_read8       m_pt_in_cb; // TODO: uPD7807 only
186 
187 	typedef void (upd7810_device::*opcode_func)();
188 
189 	struct opcode_s {
190 		opcode_func opfunc;
191 		uint8_t oplen;
192 		uint8_t cycles;
193 		uint8_t cycles_skip;
194 		uint8_t mask_l0_l1;
195 	};
196 
197 	virtual void configure_ops();
198 
199 	static const struct opcode_s s_op48[256];
200 	static const struct opcode_s s_op4C[256];
201 	static const struct opcode_s s_op4D[256];
202 	static const struct opcode_s s_op60[256];
203 	static const struct opcode_s s_op64[256];
204 	static const struct opcode_s s_op70[256];
205 	static const struct opcode_s s_op74[256];
206 	static const struct opcode_s s_opXX_7810[256];
207 	static const struct opcode_s s_opXX_7807[256];
208 	static const struct opcode_s s_op48_7801[256];
209 	static const struct opcode_s s_op4C_7801[256];
210 	static const struct opcode_s s_op4D_7801[256];
211 	static const struct opcode_s s_op60_7801[256];
212 	static const struct opcode_s s_op64_7801[256];
213 	static const struct opcode_s s_op70_7801[256];
214 	static const struct opcode_s s_op74_7801[256];
215 	static const struct opcode_s s_opXX_7801[256];
216 	static const struct opcode_s s_op48_78c05[256];
217 	static const struct opcode_s s_op4C_78c05[256];
218 	static const struct opcode_s s_op4D_78c05[256];
219 	static const struct opcode_s s_op60_78c05[256];
220 	static const struct opcode_s s_op64_78c05[256];
221 	static const struct opcode_s s_op70_78c05[256];
222 	static const struct opcode_s s_op74_78c05[256];
223 	static const struct opcode_s s_opXX_78c05[256];
224 	static const struct opcode_s s_op48_78c06[256];
225 	static const struct opcode_s s_op4C_78c06[256];
226 	static const struct opcode_s s_op4D_78c06[256];
227 	static const struct opcode_s s_op60_78c06[256];
228 	static const struct opcode_s s_op64_78c06[256];
229 	static const struct opcode_s s_op70_78c06[256];
230 	static const struct opcode_s s_op74_78c06[256];
231 	static const struct opcode_s s_opXX_78c06[256];
232 
233 	address_space_config m_program_config;
234 
235 	PAIR    m_ppc;    /* previous program counter */
236 	PAIR    m_pc;     /* program counter */
237 	PAIR    m_sp;     /* stack pointer */
238 	uint8_t   m_op;     /* opcode */
239 	uint8_t   m_op2;    /* opcode part 2 */
240 	uint8_t   m_iff;    /* interrupt enable flip flop */
241 	uint8_t   m_iff_pending;
242 	uint8_t   m_psw;    /* processor status word */
243 	PAIR    m_ea;     /* extended accumulator */
244 	PAIR    m_va;     /* accumulator + vector register */
245 	PAIR    m_bc;     /* 8bit B and C registers / 16bit BC register */
246 	PAIR    m_de;     /* 8bit D and E registers / 16bit DE register */
247 	PAIR    m_hl;     /* 8bit H and L registers / 16bit HL register */
248 	PAIR    m_ea2;    /* alternate register set */
249 	PAIR    m_va2;
250 	PAIR    m_bc2;
251 	PAIR    m_de2;
252 	PAIR    m_hl2;
253 	PAIR    m_cnt;    /* 8 bit timer counter */
254 	PAIR    m_tm;     /* 8 bit timer 0/1 comparator inputs */
255 	PAIR    m_ecnt;   /* timer counter register / capture register */
256 	PAIR    m_etm;    /* timer 0/1 comparator inputs */
257 	uint8_t   m_ma;     /* port A input or output mask */
258 	uint8_t   m_mb;     /* port B input or output mask */
259 	uint8_t   m_mcc;    /* port C control/port select */
260 	uint8_t   m_mc;     /* port C input or output mask */
261 	uint8_t   m_mm;     /* memory mapping */
262 	uint8_t   m_mf;     /* port F input or output mask */
263 	uint8_t   m_mt;     /* port T input threshold level */
264 	uint8_t   m_tmm;    /* timer 0 and timer 1 operating parameters */
265 	uint8_t   m_etmm;   /* 16-bit multifunction timer/event counter */
266 	uint8_t   m_eom;    /* 16-bit timer/event counter output control */
267 	uint8_t   m_sml;    /* serial interface parameters low */
268 	uint8_t   m_smh;    /* -"- high */
269 	uint8_t   m_panm;   /* previous analog to digital converter operating parameters */
270 	uint8_t   m_anm;    /* analog to digital converter operating parameters */
271 	uint8_t   m_mkl;    /* interrupt mask low */
272 	uint8_t   m_mkh;    /* -"- high */
273 	uint8_t   m_zcm;    /* bias circuitry for ac zero-cross detection */
274 	uint8_t   m_pa_in;  /* port A,B,C,D,F inputs */
275 	uint8_t   m_pb_in;
276 	uint8_t   m_pc_in;
277 	uint8_t   m_pd_in;
278 	uint8_t   m_pf_in;
279 	uint8_t   m_pa_out; /* port A,B,C,D,F outputs */
280 	uint8_t   m_pb_out;
281 	uint8_t   m_pc_out;
282 	uint8_t   m_pd_out;
283 	uint8_t   m_pf_out;
284 	uint8_t   m_pa_pullups;
285 	uint8_t   m_pb_pullups;
286 	uint8_t   m_pc_pullups;
287 	uint8_t   m_pd_pullups;
288 	uint8_t   m_pf_pullups;
289 	uint8_t   m_cr[4];  /* analog digital conversion registers */
290 	uint8_t   m_txb;    /* transmitter buffer */
291 	uint8_t   m_rxb;    /* receiver buffer */
292 	uint8_t   m_txd;    /* port C control line states */
293 	uint8_t   m_rxd;
294 	uint8_t   m_sck;
295 	uint8_t   m_ti;
296 	uint8_t   m_to;
297 	uint8_t   m_ci;
298 	uint8_t   m_lv0;    /* level flip flop for co0 */
299 	uint8_t   m_lv1;    /* level flip flop for co1 */
300 	uint8_t   m_co0;
301 	uint8_t   m_co1;
302 	uint16_t  m_irr;    /* interrupt request register */
303 	uint16_t  m_itf;    /* interrupt test flag register */
304 	int     m_nmi;    /* keep track of current nmi state. Needed for 7810 irq checking. */
305 	int     m_int1;   /* keep track of current int1 state. Needed for irq checking. */
306 	int     m_int2;   /* keep track to current int2 state. Needed for irq checking. */
307 
308 	/* internal helper variables */
309 	uint16_t  m_txs;    /* transmitter shift register */
310 	uint16_t  m_rxs;    /* receiver shift register */
311 	uint8_t   m_txcnt;  /* transmitter shift register bit count */
312 	uint8_t   m_rxcnt;  /* receiver shift register bit count */
313 	uint8_t   m_txbuf;  /* transmitter buffer was written */
314 	int32_t   m_ovc0;   /* overflow counter for timer 0 (for clock div 12/384) */
315 	int32_t   m_ovc1;   /* overflow counter for timer 0 (for clock div 12/384) */
316 	int32_t   m_ovce;   /* overflow counter for ecnt */
317 	int32_t   m_ovcf;   /* overflow counter for fixed clock div 3 mode */
318 	int32_t   m_ovcs;   /* overflow counter for serial I/O */
319 	uint8_t   m_edges;  /* rising/falling edge flag for serial I/O */
320 	uint16_t  m_adcnt;  /* A/D converter cycle count */
321 	uint8_t   m_adtot;  /* A/D converter total cycles per conversion */
322 	uint8_t   m_tmpcr;  /* temporary analog digital conversion register */
323 	int     m_shdone; /* A/D converter sample and hold done */
324 	int     m_adout;  /* currently selected A/D converter output register */
325 	int     m_adin;   /* currently selected A/D converter input */
326 	int     m_adrange;/* in scan mode, A/D converter range (AN0-AN3 or AN4-AN7) */
327 
328 	const struct opcode_s *m_opXX;    /* opcode table */
329 	const struct opcode_s *m_op48;
330 	const struct opcode_s *m_op4C;
331 	const struct opcode_s *m_op4D;
332 	const struct opcode_s *m_op60;
333 	const struct opcode_s *m_op64;
334 	const struct opcode_s *m_op70;
335 	const struct opcode_s *m_op74;
336 	memory_access<16, 0, 0, ENDIANNESS_LITTLE>::cache m_opcodes;
337 	memory_access<16, 0, 0, ENDIANNESS_LITTLE>::specific m_program;
338 	int m_icount;
339 
340 	uint8_t RP(offs_t port);
341 	void WP(offs_t port, uint8_t data);
342 	void upd7810_write_EOM();
343 	void upd7810_write_TXB();
344 	void upd7810_sio_output();
345 	void upd7810_sio_input();
346 	void illegal();
347 	void illegal2();
348 	void SLRC_A();
349 	void SLRC_B();
350 	void SLRC_C();
351 	void SLLC_A();
352 	void SLLC_B();
353 	void SLLC_C();
354 	void SK_NV();
355 	void SK_CY();
356 	void SK_HC();
357 	void SK_Z();
358 	void SKN_NV();
359 	void SKN_CY();
360 	void SKN_HC();
361 	void SKN_Z();
362 	void SLR_A();
363 	void SLR_B();
364 	void SLR_C();
365 	void SLL_A();
366 	void SLL_B();
367 	void SLL_C();
368 	void JEA();
369 	void CALB();
370 	void CLC();
371 	void STC();
372 	void MUL_A();
373 	void MUL_B();
374 	void MUL_C();
375 	void RLR_A();
376 	void RLR_B();
377 	void RLR_C();
378 	void RLL_A();
379 	void RLL_B();
380 	void RLL_C();
381 	void RLD();
382 	void RRD();
383 	void NEGA();
384 	void HALT();
385 	void DIV_A();
386 	void DIV_B();
387 	void DIV_C();
388 	void SKIT_NMI();
389 	void SKIT_FT0();
390 	void SKIT_FT1();
391 	void SKIT_F1();
392 	void SKIT_F2();
393 	void SKIT_FE0();
394 	void SKIT_FE1();
395 	void SKIT_FEIN();
396 	void SKIT_FAD();
397 	void SKIT_FSR();
398 	void SKIT_FST();
399 	void SKIT_ER();
400 	void SKIT_OV();
401 	void SKIT_AN4();
402 	void SKIT_AN5();
403 	void SKIT_AN6();
404 	void SKIT_AN7();
405 	void SKIT_SB();
406 	void SKNIT_NMI();
407 	void SKNIT_FT0();
408 	void SKNIT_FT1();
409 	void SKNIT_F1();
410 	void SKNIT_F2();
411 	void SKNIT_FE0();
412 	void SKNIT_FE1();
413 	void SKNIT_FEIN();
414 	void SKNIT_FAD();
415 	void SKNIT_FSR();
416 	void SKNIT_FST();
417 	void SKNIT_ER();
418 	void SKNIT_OV();
419 	void SKNIT_AN4();
420 	void SKNIT_AN5();
421 	void SKNIT_AN6();
422 	void SKNIT_AN7();
423 	void SKNIT_SB();
424 	void LDEAX_D();
425 	void LDEAX_H();
426 	void LDEAX_Dp();
427 	void LDEAX_Hp();
428 	void LDEAX_D_xx();
429 	void LDEAX_H_A();
430 	void LDEAX_H_B();
431 	void LDEAX_H_EA();
432 	void LDEAX_H_xx();
433 	void STEAX_D();
434 	void STEAX_H();
435 	void STEAX_Dp();
436 	void STEAX_Hp();
437 	void STEAX_D_xx();
438 	void STEAX_H_A();
439 	void STEAX_H_B();
440 	void STEAX_H_EA();
441 	void STEAX_H_xx();
442 	void DSLR_EA();
443 	void DSLL_EA();
444 	void TABLE();
445 	void DRLR_EA();
446 	void DRLL_EA();
447 	void STOP();
448 	void DMOV_EA_ECNT();
449 	void DMOV_EA_ECPT();
450 	void DMOV_ETM0_EA();
451 	void DMOV_ETM1_EA();
452 	void MOV_A_PA();
453 	void MOV_A_PB();
454 	void MOV_A_PC();
455 	void MOV_A_PD();
456 	void MOV_A_PF();
457 	void MOV_A_MKH();
458 	void MOV_A_MKL();
459 	void MOV_A_ANM();
460 	void MOV_A_SMH();
461 	void MOV_A_EOM();
462 	void MOV_A_TMM();
463 	void MOV_A_PT();
464 	void MOV_A_RXB();
465 	void MOV_A_CR0();
466 	void MOV_A_CR1();
467 	void MOV_A_CR2();
468 	void MOV_A_CR3();
469 	void MOV_PA_A();
470 	void MOV_PB_A();
471 	void MOV_PC_A();
472 	void MOV_PD_A();
473 	void MOV_PF_A();
474 	void MOV_MKH_A();
475 	void MOV_MKL_A();
476 	void MOV_ANM_A();
477 	void MOV_SMH_A();
478 	void MOV_SML_A();
479 	void MOV_EOM_A();
480 	void MOV_ETMM_A();
481 	void MOV_TMM_A();
482 	void MOV_MM_A();
483 	void MOV_MCC_A();
484 	void MOV_MA_A();
485 	void MOV_MB_A();
486 	void MOV_MC_A();
487 	void MOV_MF_A();
488 	void MOV_TXB_A();
489 	void MOV_TM0_A();
490 	void MOV_TM1_A();
491 	void MOV_MT_A();
492 	void MOV_ZCM_A();
493 	void ANA_V_A();
494 	void ANA_A_A();
495 	void ANA_B_A();
496 	void ANA_C_A();
497 	void ANA_D_A();
498 	void ANA_E_A();
499 	void ANA_H_A();
500 	void ANA_L_A();
501 	void XRA_V_A();
502 	void XRA_A_A();
503 	void XRA_B_A();
504 	void XRA_C_A();
505 	void XRA_D_A();
506 	void XRA_E_A();
507 	void XRA_H_A();
508 	void XRA_L_A();
509 	void ORA_V_A();
510 	void ORA_A_A();
511 	void ORA_B_A();
512 	void ORA_C_A();
513 	void ORA_D_A();
514 	void ORA_E_A();
515 	void ORA_H_A();
516 	void ORA_L_A();
517 	void ADDNC_V_A();
518 	void ADDNC_A_A();
519 	void ADDNC_B_A();
520 	void ADDNC_C_A();
521 	void ADDNC_D_A();
522 	void ADDNC_E_A();
523 	void ADDNC_H_A();
524 	void ADDNC_L_A();
525 	void GTA_V_A();
526 	void GTA_A_A();
527 	void GTA_B_A();
528 	void GTA_C_A();
529 	void GTA_D_A();
530 	void GTA_E_A();
531 	void GTA_H_A();
532 	void GTA_L_A();
533 	void SUBNB_V_A();
534 	void SUBNB_A_A();
535 	void SUBNB_B_A();
536 	void SUBNB_C_A();
537 	void SUBNB_D_A();
538 	void SUBNB_E_A();
539 	void SUBNB_H_A();
540 	void SUBNB_L_A();
541 	void LTA_V_A();
542 	void LTA_A_A();
543 	void LTA_B_A();
544 	void LTA_C_A();
545 	void LTA_D_A();
546 	void LTA_E_A();
547 	void LTA_H_A();
548 	void LTA_L_A();
549 	void ADD_V_A();
550 	void ADD_A_A();
551 	void ADD_B_A();
552 	void ADD_C_A();
553 	void ADD_D_A();
554 	void ADD_E_A();
555 	void ADD_H_A();
556 	void ADD_L_A();
557 	void ADC_V_A();
558 	void ADC_A_A();
559 	void ADC_B_A();
560 	void ADC_C_A();
561 	void ADC_D_A();
562 	void ADC_E_A();
563 	void ADC_H_A();
564 	void ADC_L_A();
565 	void SUB_V_A();
566 	void SUB_A_A();
567 	void SUB_B_A();
568 	void SUB_C_A();
569 	void SUB_D_A();
570 	void SUB_E_A();
571 	void SUB_H_A();
572 	void SUB_L_A();
573 	void NEA_V_A();
574 	void NEA_A_A();
575 	void NEA_B_A();
576 	void NEA_C_A();
577 	void NEA_D_A();
578 	void NEA_E_A();
579 	void NEA_H_A();
580 	void NEA_L_A();
581 	void SBB_V_A();
582 	void SBB_A_A();
583 	void SBB_B_A();
584 	void SBB_C_A();
585 	void SBB_D_A();
586 	void SBB_E_A();
587 	void SBB_H_A();
588 	void SBB_L_A();
589 	void EQA_V_A();
590 	void EQA_A_A();
591 	void EQA_B_A();
592 	void EQA_C_A();
593 	void EQA_D_A();
594 	void EQA_E_A();
595 	void EQA_H_A();
596 	void EQA_L_A();
597 	void ANA_A_V();
598 	void ANA_A_B();
599 	void ANA_A_C();
600 	void ANA_A_D();
601 	void ANA_A_E();
602 	void ANA_A_H();
603 	void ANA_A_L();
604 	void XRA_A_V();
605 	void XRA_A_B();
606 	void XRA_A_C();
607 	void XRA_A_D();
608 	void XRA_A_E();
609 	void XRA_A_H();
610 	void XRA_A_L();
611 	void ORA_A_V();
612 	void ORA_A_B();
613 	void ORA_A_C();
614 	void ORA_A_D();
615 	void ORA_A_E();
616 	void ORA_A_H();
617 	void ORA_A_L();
618 	void ADDNC_A_V();
619 	void ADDNC_A_B();
620 	void ADDNC_A_C();
621 	void ADDNC_A_D();
622 	void ADDNC_A_E();
623 	void ADDNC_A_H();
624 	void ADDNC_A_L();
625 	void GTA_A_V();
626 	void GTA_A_B();
627 	void GTA_A_C();
628 	void GTA_A_D();
629 	void GTA_A_E();
630 	void GTA_A_H();
631 	void GTA_A_L();
632 	void SUBNB_A_V();
633 	void SUBNB_A_B();
634 	void SUBNB_A_C();
635 	void SUBNB_A_D();
636 	void SUBNB_A_E();
637 	void SUBNB_A_H();
638 	void SUBNB_A_L();
639 	void LTA_A_V();
640 	void LTA_A_B();
641 	void LTA_A_C();
642 	void LTA_A_D();
643 	void LTA_A_E();
644 	void LTA_A_H();
645 	void LTA_A_L();
646 	void ADD_A_V();
647 	void ADD_A_B();
648 	void ADD_A_C();
649 	void ADD_A_D();
650 	void ADD_A_E();
651 	void ADD_A_H();
652 	void ADD_A_L();
653 	void ONA_A_V();
654 	void ONA_A_A();
655 	void ONA_A_B();
656 	void ONA_A_C();
657 	void ONA_A_D();
658 	void ONA_A_E();
659 	void ONA_A_H();
660 	void ONA_A_L();
661 	void ADC_A_V();
662 	void ADC_A_B();
663 	void ADC_A_C();
664 	void ADC_A_D();
665 	void ADC_A_E();
666 	void ADC_A_H();
667 	void ADC_A_L();
668 	void OFFA_A_V();
669 	void OFFA_A_A();
670 	void OFFA_A_B();
671 	void OFFA_A_C();
672 	void OFFA_A_D();
673 	void OFFA_A_E();
674 	void OFFA_A_H();
675 	void OFFA_A_L();
676 	void SUB_A_V();
677 	void SUB_A_B();
678 	void SUB_A_C();
679 	void SUB_A_D();
680 	void SUB_A_E();
681 	void SUB_A_H();
682 	void SUB_A_L();
683 	void NEA_A_V();
684 	void NEA_A_B();
685 	void NEA_A_C();
686 	void NEA_A_D();
687 	void NEA_A_E();
688 	void NEA_A_H();
689 	void NEA_A_L();
690 	void SBB_A_V();
691 	void SBB_A_B();
692 	void SBB_A_C();
693 	void SBB_A_D();
694 	void SBB_A_E();
695 	void SBB_A_H();
696 	void SBB_A_L();
697 	void EQA_A_V();
698 	void EQA_A_B();
699 	void EQA_A_C();
700 	void EQA_A_D();
701 	void EQA_A_E();
702 	void EQA_A_H();
703 	void EQA_A_L();
704 	void MVI_PA_xx();
705 	void MVI_PB_xx();
706 	void MVI_PC_xx();
707 	void MVI_PD_xx();
708 	void MVI_PF_xx();
709 	void MVI_MKH_xx();
710 	void MVI_MKL_xx();
711 	void ANI_PA_xx();
712 	void ANI_PB_xx();
713 	void ANI_PC_xx();
714 	void ANI_PD_xx();
715 	void ANI_PF_xx();
716 	void ANI_MKH_xx();
717 	void ANI_MKL_xx();
718 	void XRI_PA_xx();
719 	void XRI_PB_xx();
720 	void XRI_PC_xx();
721 	void XRI_PD_xx();
722 	void XRI_PF_xx();
723 	void XRI_MKH_xx();
724 	void XRI_MKL_xx();
725 	void ORI_PA_xx();
726 	void ORI_PB_xx();
727 	void ORI_PC_xx();
728 	void ORI_PD_xx();
729 	void ORI_PF_xx();
730 	void ORI_MKH_xx();
731 	void ORI_MKL_xx();
732 	void ADINC_PA_xx();
733 	void ADINC_PB_xx();
734 	void ADINC_PC_xx();
735 	void ADINC_PD_xx();
736 	void ADINC_PF_xx();
737 	void ADINC_MKH_xx();
738 	void ADINC_MKL_xx();
739 	void GTI_PA_xx();
740 	void GTI_PB_xx();
741 	void GTI_PC_xx();
742 	void GTI_PD_xx();
743 	void GTI_PF_xx();
744 	void GTI_MKH_xx();
745 	void GTI_MKL_xx();
746 	void SUINB_PA_xx();
747 	void SUINB_PB_xx();
748 	void SUINB_PC_xx();
749 	void SUINB_PD_xx();
750 	void SUINB_PF_xx();
751 	void SUINB_MKH_xx();
752 	void SUINB_MKL_xx();
753 	void LTI_PA_xx();
754 	void LTI_PB_xx();
755 	void LTI_PC_xx();
756 	void LTI_PD_xx();
757 	void LTI_PF_xx();
758 	void LTI_MKH_xx();
759 	void LTI_MKL_xx();
760 	void ADI_PA_xx();
761 	void ADI_PB_xx();
762 	void ADI_PC_xx();
763 	void ADI_PD_xx();
764 	void ADI_PF_xx();
765 	void ADI_MKH_xx();
766 	void ADI_MKL_xx();
767 	void ONI_PA_xx();
768 	void ONI_PB_xx();
769 	void ONI_PC_xx();
770 	void ONI_PD_xx();
771 	void ONI_PF_xx();
772 	void ONI_MKH_xx();
773 	void ONI_MKL_xx();
774 	void ACI_PA_xx();
775 	void ACI_PB_xx();
776 	void ACI_PC_xx();
777 	void ACI_PD_xx();
778 	void ACI_PF_xx();
779 	void ACI_MKH_xx();
780 	void ACI_MKL_xx();
781 	void OFFI_PA_xx();
782 	void OFFI_PB_xx();
783 	void OFFI_PC_xx();
784 	void OFFI_PD_xx();
785 	void OFFI_PF_xx();
786 	void OFFI_MKH_xx();
787 	void OFFI_MKL_xx();
788 	void SUI_PA_xx();
789 	void SUI_PB_xx();
790 	void SUI_PC_xx();
791 	void SUI_PD_xx();
792 	void SUI_PF_xx();
793 	void SUI_MKH_xx();
794 	void SUI_MKL_xx();
795 	void NEI_PA_xx();
796 	void NEI_PB_xx();
797 	void NEI_PC_xx();
798 	void NEI_PD_xx();
799 	void NEI_PF_xx();
800 	void NEI_MKH_xx();
801 	void NEI_MKL_xx();
802 	void SBI_PA_xx();
803 	void SBI_PB_xx();
804 	void SBI_PC_xx();
805 	void SBI_PD_xx();
806 	void SBI_PF_xx();
807 	void SBI_MKH_xx();
808 	void SBI_MKL_xx();
809 	void EQI_PA_xx();
810 	void EQI_PB_xx();
811 	void EQI_PC_xx();
812 	void EQI_PD_xx();
813 	void EQI_PF_xx();
814 	void EQI_MKH_xx();
815 	void EQI_MKL_xx();
816 	void MVI_ANM_xx();
817 	void MVI_SMH_xx();
818 	void MVI_EOM_xx();
819 	void MVI_TMM_xx();
820 	void ANI_ANM_xx();
821 	void ANI_SMH_xx();
822 	void ANI_EOM_xx();
823 	void ANI_TMM_xx();
824 	void XRI_ANM_xx();
825 	void XRI_SMH_xx();
826 	void XRI_EOM_xx();
827 	void XRI_TMM_xx();
828 	void ORI_ANM_xx();
829 	void ORI_SMH_xx();
830 	void ORI_EOM_xx();
831 	void ORI_TMM_xx();
832 	void ADINC_ANM_xx();
833 	void ADINC_SMH_xx();
834 	void ADINC_EOM_xx();
835 	void ADINC_TMM_xx();
836 	void GTI_ANM_xx();
837 	void GTI_SMH_xx();
838 	void GTI_EOM_xx();
839 	void GTI_TMM_xx();
840 	void SUINB_ANM_xx();
841 	void SUINB_SMH_xx();
842 	void SUINB_EOM_xx();
843 	void SUINB_TMM_xx();
844 	void LTI_ANM_xx();
845 	void LTI_SMH_xx();
846 	void LTI_EOM_xx();
847 	void LTI_TMM_xx();
848 	void ADI_ANM_xx();
849 	void ADI_SMH_xx();
850 	void ADI_EOM_xx();
851 	void ADI_TMM_xx();
852 	void ONI_ANM_xx();
853 	void ONI_SMH_xx();
854 	void ONI_EOM_xx();
855 	void ONI_TMM_xx();
856 	void ACI_ANM_xx();
857 	void ACI_SMH_xx();
858 	void ACI_EOM_xx();
859 	void ACI_TMM_xx();
860 	void OFFI_ANM_xx();
861 	void OFFI_SMH_xx();
862 	void OFFI_EOM_xx();
863 	void OFFI_TMM_xx();
864 	void SUI_ANM_xx();
865 	void SUI_SMH_xx();
866 	void SUI_EOM_xx();
867 	void SUI_TMM_xx();
868 	void NEI_ANM_xx();
869 	void NEI_SMH_xx();
870 	void NEI_EOM_xx();
871 	void NEI_TMM_xx();
872 	void SBI_ANM_xx();
873 	void SBI_SMH_xx();
874 	void SBI_EOM_xx();
875 	void SBI_TMM_xx();
876 	void EQI_ANM_xx();
877 	void EQI_SMH_xx();
878 	void EQI_EOM_xx();
879 	void EQI_TMM_xx();
880 	void SSPD_w();
881 	void LSPD_w();
882 	void SBCD_w();
883 	void LBCD_w();
884 	void SDED_w();
885 	void LDED_w();
886 	void SHLD_w();
887 	void LHLD_w();
888 	void EADD_EA_A();
889 	void EADD_EA_B();
890 	void EADD_EA_C();
891 	void ESUB_EA_A();
892 	void ESUB_EA_B();
893 	void ESUB_EA_C();
894 	void MOV_V_w();
895 	void MOV_A_w();
896 	void MOV_B_w();
897 	void MOV_C_w();
898 	void MOV_D_w();
899 	void MOV_E_w();
900 	void MOV_H_w();
901 	void MOV_L_w();
902 	void MOV_w_V();
903 	void MOV_w_A();
904 	void MOV_w_B();
905 	void MOV_w_C();
906 	void MOV_w_D();
907 	void MOV_w_E();
908 	void MOV_w_H();
909 	void MOV_w_L();
910 	void ANAX_B();
911 	void ANAX_D();
912 	void ANAX_H();
913 	void ANAX_Dp();
914 	void ANAX_Hp();
915 	void ANAX_Dm();
916 	void ANAX_Hm();
917 	void XRAX_B();
918 	void XRAX_D();
919 	void XRAX_H();
920 	void XRAX_Dp();
921 	void XRAX_Hp();
922 	void XRAX_Dm();
923 	void XRAX_Hm();
924 	void ORAX_B();
925 	void ORAX_D();
926 	void ORAX_H();
927 	void ORAX_Dp();
928 	void ORAX_Hp();
929 	void ORAX_Dm();
930 	void ORAX_Hm();
931 	void ADDNCX_B();
932 	void ADDNCX_D();
933 	void ADDNCX_H();
934 	void ADDNCX_Dp();
935 	void ADDNCX_Hp();
936 	void ADDNCX_Dm();
937 	void ADDNCX_Hm();
938 	void GTAX_B();
939 	void GTAX_D();
940 	void GTAX_H();
941 	void GTAX_Dp();
942 	void GTAX_Hp();
943 	void GTAX_Dm();
944 	void GTAX_Hm();
945 	void SUBNBX_B();
946 	void SUBNBX_D();
947 	void SUBNBX_H();
948 	void SUBNBX_Dp();
949 	void SUBNBX_Hp();
950 	void SUBNBX_Dm();
951 	void SUBNBX_Hm();
952 	void LTAX_B();
953 	void LTAX_D();
954 	void LTAX_H();
955 	void LTAX_Dp();
956 	void LTAX_Hp();
957 	void LTAX_Dm();
958 	void LTAX_Hm();
959 	void ADDX_B();
960 	void ADDX_D();
961 	void ADDX_H();
962 	void ADDX_Dp();
963 	void ADDX_Hp();
964 	void ADDX_Dm();
965 	void ADDX_Hm();
966 	void ONAX_B();
967 	void ONAX_D();
968 	void ONAX_H();
969 	void ONAX_Dp();
970 	void ONAX_Hp();
971 	void ONAX_Dm();
972 	void ONAX_Hm();
973 	void ADCX_B();
974 	void ADCX_D();
975 	void ADCX_H();
976 	void ADCX_Dp();
977 	void ADCX_Hp();
978 	void ADCX_Dm();
979 	void ADCX_Hm();
980 	void OFFAX_B();
981 	void OFFAX_D();
982 	void OFFAX_H();
983 	void OFFAX_Dp();
984 	void OFFAX_Hp();
985 	void OFFAX_Dm();
986 	void OFFAX_Hm();
987 	void SUBX_B();
988 	void SUBX_D();
989 	void SUBX_H();
990 	void SUBX_Dp();
991 	void SUBX_Hp();
992 	void SUBX_Dm();
993 	void SUBX_Hm();
994 	void NEAX_B();
995 	void NEAX_D();
996 	void NEAX_H();
997 	void NEAX_Dp();
998 	void NEAX_Hp();
999 	void NEAX_Dm();
1000 	void NEAX_Hm();
1001 	void SBBX_B();
1002 	void SBBX_D();
1003 	void SBBX_H();
1004 	void SBBX_Dp();
1005 	void SBBX_Hp();
1006 	void SBBX_Dm();
1007 	void SBBX_Hm();
1008 	void EQAX_B();
1009 	void EQAX_D();
1010 	void EQAX_H();
1011 	void EQAX_Dp();
1012 	void EQAX_Hp();
1013 	void EQAX_Dm();
1014 	void EQAX_Hm();
1015 	void ANI_V_xx();
1016 	void ANI_A_xx();
1017 	void ANI_B_xx();
1018 	void ANI_C_xx();
1019 	void ANI_D_xx();
1020 	void ANI_E_xx();
1021 	void ANI_H_xx();
1022 	void ANI_L_xx();
1023 	void XRI_V_xx();
1024 	void XRI_A_xx();
1025 	void XRI_B_xx();
1026 	void XRI_C_xx();
1027 	void XRI_D_xx();
1028 	void XRI_E_xx();
1029 	void XRI_H_xx();
1030 	void XRI_L_xx();
1031 	void ORI_V_xx();
1032 	void ORI_A_xx();
1033 	void ORI_B_xx();
1034 	void ORI_C_xx();
1035 	void ORI_D_xx();
1036 	void ORI_E_xx();
1037 	void ORI_H_xx();
1038 	void ORI_L_xx();
1039 	void ADINC_V_xx();
1040 	void ADINC_A_xx();
1041 	void ADINC_B_xx();
1042 	void ADINC_C_xx();
1043 	void ADINC_D_xx();
1044 	void ADINC_E_xx();
1045 	void ADINC_H_xx();
1046 	void ADINC_L_xx();
1047 	void GTI_V_xx();
1048 	void GTI_A_xx();
1049 	void GTI_B_xx();
1050 	void GTI_C_xx();
1051 	void GTI_D_xx();
1052 	void GTI_E_xx();
1053 	void GTI_H_xx();
1054 	void GTI_L_xx();
1055 	void SUINB_V_xx();
1056 	void SUINB_A_xx();
1057 	void SUINB_B_xx();
1058 	void SUINB_C_xx();
1059 	void SUINB_D_xx();
1060 	void SUINB_E_xx();
1061 	void SUINB_H_xx();
1062 	void SUINB_L_xx();
1063 	void LTI_V_xx();
1064 	void LTI_A_xx();
1065 	void LTI_B_xx();
1066 	void LTI_C_xx();
1067 	void LTI_D_xx();
1068 	void LTI_E_xx();
1069 	void LTI_H_xx();
1070 	void LTI_L_xx();
1071 	void ADI_V_xx();
1072 	void ADI_A_xx();
1073 	void ADI_B_xx();
1074 	void ADI_C_xx();
1075 	void ADI_D_xx();
1076 	void ADI_E_xx();
1077 	void ADI_H_xx();
1078 	void ADI_L_xx();
1079 	void ONI_V_xx();
1080 	void ONI_A_xx();
1081 	void ONI_B_xx();
1082 	void ONI_C_xx();
1083 	void ONI_D_xx();
1084 	void ONI_E_xx();
1085 	void ONI_H_xx();
1086 	void ONI_L_xx();
1087 	void ACI_V_xx();
1088 	void ACI_A_xx();
1089 	void ACI_B_xx();
1090 	void ACI_C_xx();
1091 	void ACI_D_xx();
1092 	void ACI_E_xx();
1093 	void ACI_H_xx();
1094 	void ACI_L_xx();
1095 	void OFFI_V_xx();
1096 	void OFFI_A_xx();
1097 	void OFFI_B_xx();
1098 	void OFFI_C_xx();
1099 	void OFFI_D_xx();
1100 	void OFFI_E_xx();
1101 	void OFFI_H_xx();
1102 	void OFFI_L_xx();
1103 	void SUI_V_xx();
1104 	void SUI_A_xx();
1105 	void SUI_B_xx();
1106 	void SUI_C_xx();
1107 	void SUI_D_xx();
1108 	void SUI_E_xx();
1109 	void SUI_H_xx();
1110 	void SUI_L_xx();
1111 	void NEI_V_xx();
1112 	void NEI_A_xx();
1113 	void NEI_B_xx();
1114 	void NEI_C_xx();
1115 	void NEI_D_xx();
1116 	void NEI_E_xx();
1117 	void NEI_H_xx();
1118 	void NEI_L_xx();
1119 	void SBI_V_xx();
1120 	void SBI_A_xx();
1121 	void SBI_B_xx();
1122 	void SBI_C_xx();
1123 	void SBI_D_xx();
1124 	void SBI_E_xx();
1125 	void SBI_H_xx();
1126 	void SBI_L_xx();
1127 	void EQI_V_xx();
1128 	void EQI_A_xx();
1129 	void EQI_B_xx();
1130 	void EQI_C_xx();
1131 	void EQI_D_xx();
1132 	void EQI_E_xx();
1133 	void EQI_H_xx();
1134 	void EQI_L_xx();
1135 	void ANAW_wa();
1136 	void DAN_EA_BC();
1137 	void DAN_EA_DE();
1138 	void DAN_EA_HL();
1139 	void XRAW_wa();
1140 	void DXR_EA_BC();
1141 	void DXR_EA_DE();
1142 	void DXR_EA_HL();
1143 	void ORAW_wa();
1144 	void DOR_EA_BC();
1145 	void DOR_EA_DE();
1146 	void DOR_EA_HL();
1147 	void ADDNCW_wa();
1148 	void DADDNC_EA_BC();
1149 	void DADDNC_EA_DE();
1150 	void DADDNC_EA_HL();
1151 	void GTAW_wa();
1152 	void DGT_EA_BC();
1153 	void DGT_EA_DE();
1154 	void DGT_EA_HL();
1155 	void SUBNBW_wa();
1156 	void DSUBNB_EA_BC();
1157 	void DSUBNB_EA_DE();
1158 	void DSUBNB_EA_HL();
1159 	void LTAW_wa();
1160 	void DLT_EA_BC();
1161 	void DLT_EA_DE();
1162 	void DLT_EA_HL();
1163 	void ADDW_wa();
1164 	void DADD_EA_BC();
1165 	void DADD_EA_DE();
1166 	void DADD_EA_HL();
1167 	void ONAW_wa();
1168 	void DON_EA_BC();
1169 	void DON_EA_DE();
1170 	void DON_EA_HL();
1171 	void ADCW_wa();
1172 	void DADC_EA_BC();
1173 	void DADC_EA_DE();
1174 	void DADC_EA_HL();
1175 	void OFFAW_wa();
1176 	void DOFF_EA_BC();
1177 	void DOFF_EA_DE();
1178 	void DOFF_EA_HL();
1179 	void SUBW_wa();
1180 	void DSUB_EA_BC();
1181 	void DSUB_EA_DE();
1182 	void DSUB_EA_HL();
1183 	void NEAW_wa();
1184 	void DNE_EA_BC();
1185 	void DNE_EA_DE();
1186 	void DNE_EA_HL();
1187 	void SBBW_wa();
1188 	void DSBB_EA_BC();
1189 	void DSBB_EA_DE();
1190 	void DSBB_EA_HL();
1191 	void EQAW_wa();
1192 	void DEQ_EA_BC();
1193 	void DEQ_EA_DE();
1194 	void DEQ_EA_HL();
1195 	void NOP();
1196 	void LDAW_wa();
1197 	void INX_SP();
1198 	void DCX_SP();
1199 	void LXI_S_w();
1200 	void ANIW_wa_xx();
1201 	void MOV_A_EAH();
1202 	void MOV_A_EAL();
1203 	void MOV_A_B();
1204 	void MOV_A_C();
1205 	void MOV_A_D();
1206 	void MOV_A_E();
1207 	void MOV_A_H();
1208 	void MOV_A_L();
1209 	void EXA();
1210 	void EXX();
1211 	void EXR();
1212 	void INX_BC();
1213 	void DCX_BC();
1214 	void LXI_B_w();
1215 	void ORIW_wa_xx();
1216 	void MOV_EAH_A();
1217 	void MOV_EAL_A();
1218 	void MOV_B_A();
1219 	void MOV_C_A();
1220 	void MOV_D_A();
1221 	void MOV_E_A();
1222 	void MOV_H_A();
1223 	void MOV_L_A();
1224 	void INRW_wa();
1225 	void JB();
1226 	void INX_DE();
1227 	void DCX_DE();
1228 	void LXI_D_w();
1229 	void GTIW_wa_xx();
1230 	void LDAX_B();
1231 	void LDAX_D();
1232 	void LDAX_H();
1233 	void LDAX_Dp();
1234 	void LDAX_Hp();
1235 	void LDAX_Dm();
1236 	void LDAX_Hm();
1237 	void DCRW_wa();
1238 	void BLOCK();
1239 	void INX_HL();
1240 	void DCX_HL();
1241 	void LXI_H_w();
1242 	void LTIW_wa_xx();
1243 	void STAX_B();
1244 	void STAX_D();
1245 	void STAX_H();
1246 	void STAX_Dp();
1247 	void STAX_Hp();
1248 	void STAX_Dm();
1249 	void STAX_Hm();
1250 	void CALL_w();
1251 	void INR_A();
1252 	void INR_B();
1253 	void INR_C();
1254 	void LXI_EA_s();
1255 	void ONIW_wa_xx();
1256 	void PRE_48();
1257 	void MVIX_BC_xx();
1258 	void MVIX_DE_xx();
1259 	void MVIX_HL_xx();
1260 	void PRE_4C();
1261 	void PRE_4D();
1262 	void JRE();
1263 	void EXH();
1264 	void DCR_A();
1265 	void DCR_B();
1266 	void DCR_C();
1267 	void JMP_w();
1268 	void OFFIW_wa_xx();
1269 	void BIT_0_wa();
1270 	void BIT_1_wa();
1271 	void BIT_2_wa();
1272 	void BIT_3_wa();
1273 	void BIT_4_wa();
1274 	void BIT_5_wa();
1275 	void BIT_6_wa();
1276 	void BIT_7_wa();
1277 	void SKN_bit();
1278 	void SETB();
1279 	void CLR();
1280 	void SK_bit();
1281 	void PRE_60();
1282 	void DAA();
1283 	void RETI();
1284 	void STAW_wa();
1285 	void PRE_64();
1286 	void NEIW_wa_xx();
1287 	void MVI_V_xx();
1288 	void MVI_A_xx();
1289 	void MVI_B_xx();
1290 	void MVI_C_xx();
1291 	void MVI_D_xx();
1292 	void MVI_E_xx();
1293 	void MVI_H_xx();
1294 	void MVI_L_xx();
1295 	void PRE_70();
1296 	void MVIW_wa_xx();
1297 	void SOFTI();
1298 	void PRE_74();
1299 	void EQIW_wa_xx();
1300 	void CALF();
1301 	void CALT();
1302 	void POP_VA();
1303 	void POP_BC();
1304 	void POP_DE();
1305 	void POP_HL();
1306 	void POP_EA();
1307 	void DMOV_EA_BC();
1308 	void DMOV_EA_DE();
1309 	void DMOV_EA_HL();
1310 	void INX_EA();
1311 	void DCX_EA();
1312 	void EI();
1313 	void LDAX_D_xx();
1314 	void LDAX_H_A();
1315 	void LDAX_H_B();
1316 	void LDAX_H_EA();
1317 	void LDAX_H_xx();
1318 	void PUSH_VA();
1319 	void PUSH_BC();
1320 	void PUSH_DE();
1321 	void PUSH_HL();
1322 	void PUSH_EA();
1323 	void DMOV_BC_EA();
1324 	void DMOV_DE_EA();
1325 	void DMOV_HL_EA();
1326 	void RET();
1327 	void RETS();
1328 	void DI();
1329 	void STAX_D_xx();
1330 	void STAX_H_A();
1331 	void STAX_H_B();
1332 	void STAX_H_EA();
1333 	void STAX_H_xx();
1334 	void JR();
1335 	void CALT_7801();
1336 	void DCR_A_7801();
1337 	void DCR_B_7801();
1338 	void DCR_C_7801();
1339 	void DCRW_wa_7801();
1340 	void INR_A_7801();
1341 	void INR_B_7801();
1342 	void INR_C_7801();
1343 	void INRW_wa_7801();
1344 	void IN();
1345 	void OUT();
1346 	void MOV_A_S();
1347 	void MOV_S_A();
1348 	void PEN();
1349 	void PER();
1350 	void PEX();
1351 	void SIO();
1352 	void SKIT_F0();
1353 	void SKNIT_F0();
1354 	void STM();
1355 	void STM_7801();
1356 	void MOV_MC_A_7801();
1357 	void base_device_start();
1358 };
1359 
1360 
1361 class upd78c10_device : public upd7810_device
1362 {
1363 public:
1364 	// construction/destruction
1365 	upd78c10_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
1366 
1367 protected:
1368 	upd78c10_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_map);
1369 };
1370 
1371 
1372 class upd7807_device : public upd7810_device
1373 {
1374 public:
1375 	// construction/destruction
1376 	upd7807_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
1377 
1378 protected:
1379 	virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
1380 	virtual void configure_ops() override;
1381 };
1382 
1383 
1384 class upd7801_device : public upd7810_device
1385 {
1386 public:
1387 	// construction/destruction
1388 	upd7801_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
1389 
1390 protected:
1391 	virtual void device_reset() override;
execute_clocks_to_cycles(uint64_t clocks)1392 	virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const noexcept override { return (clocks + 2 - 1) / 2; }
execute_cycles_to_clocks(uint64_t cycles)1393 	virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const noexcept override { return (cycles * 2); }
1394 	virtual void execute_set_input(int inputnum, int state) override;
1395 	virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
1396 	virtual void handle_timers(int cycles) override;
1397 	virtual void upd7810_take_irq() override;
1398 	virtual void configure_ops() override;
1399 };
1400 
1401 
1402 class upd78c05_device : public upd7810_device
1403 {
1404 public:
1405 	// construction/destruction
1406 	upd78c05_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
1407 
1408 protected:
1409 	upd78c05_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
1410 
1411 	virtual void device_start() override;
1412 	virtual void device_reset() override;
execute_clocks_to_cycles(uint64_t clocks)1413 	virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const noexcept override { return (clocks + 4 - 1) / 4; }
execute_cycles_to_clocks(uint64_t cycles)1414 	virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const noexcept override { return (cycles * 4); }
1415 	virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
1416 	virtual void handle_timers(int cycles) override;
1417 	virtual void configure_ops() override;
1418 };
1419 
1420 
1421 class upd78c06_device : public upd78c05_device
1422 {
1423 public:
1424 	// construction/destruction
1425 	upd78c06_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
1426 	virtual void configure_ops() override;
1427 };
1428 
1429 
1430 DECLARE_DEVICE_TYPE(UPD7810,  upd7810_device)
1431 DECLARE_DEVICE_TYPE(UPD78C10, upd78c10_device)
1432 DECLARE_DEVICE_TYPE(UPD7807,  upd7807_device)
1433 DECLARE_DEVICE_TYPE(UPD7801,  upd7801_device)
1434 DECLARE_DEVICE_TYPE(UPD78C05, upd78c05_device)
1435 DECLARE_DEVICE_TYPE(UPD78C06, upd78c06_device)
1436 
1437 #endif // MAME_CPU_UPD7810_UPD7810_H
1438