1 /*
2  * Z80Ex, ZILoG Z80 CPU emulator.
3  *
4  * by Pigmaker57 aka boo_boo [pigmaker57@kahoh57.info]
5  *
6  * contains some code from the FUSE project (http://fuse-emulator.sourceforge.net)
7  * Released under GNU GPL v2
8  *
9  */
10 
11 #ifndef _Z80_TYPEDEFS_H_INCLUDED
12 #define _Z80_TYPEDEFS_H_INCLUDED
13 
14 struct _z80_cpu_context;
15 typedef struct _z80_cpu_context Z80EX_CONTEXT;
16 
17 #define __Z80EX_SELF_INCLUDE
18 #include "z80ex.h"
19 
20 /* Union allowing a register pair to be accessed as bytes or as a word */
21 typedef union {
22 #ifdef WORDS_BIG_ENDIAN
23   struct { Z80EX_BYTE h,l; } b;
24 #else
25   struct { Z80EX_BYTE l,h; } b;
26 #endif
27   Z80EX_WORD w;
28 } regpair;
29 
30 typedef
31 enum {IM0=0,IM1=1,IM2=2} IM_MODE;
32 
33 struct _z80_cpu_context {
34 	regpair af,bc,de,hl;
35 	regpair af_,bc_,de_,hl_;
36 	regpair ix,iy;
37 	Z80EX_BYTE i;
38 	Z80EX_WORD r;
39 	Z80EX_BYTE r7; /* The high bit of the R register */
40 	regpair sp,pc;
41 	Z80EX_BYTE iff1, iff2; /*interrupt flip-flops*/
42 	regpair memptr; /*undocumented internal register*/
43 	IM_MODE im;
44 	int halted;
45 
46 	unsigned long tstate; /*t-state clock of current/last step*/
47 	unsigned char op_tstate; /*clean (without WAITs and such) t-state of currently executing instruction*/
48 
49 	int noint_once; /*disable interrupts before next opcode?*/
50 	int reset_PV_on_int; /*reset P/V flag on interrupt? (for LD A,R / LD A,I)*/
51 	int doing_opcode; /*is there an opcode currently executing?*/
52 	char int_vector_req; /*opcode must be fetched from IO device? (int vector read)*/
53 	Z80EX_BYTE prefix;
54 
55 	/*callbacks*/
56 	z80ex_tstate_cb tstate_cb;
57 	void *tstate_cb_user_data;
58 	z80ex_pread_cb pread_cb;
59 	void *pread_cb_user_data;
60 	z80ex_pwrite_cb pwrite_cb;
61 	void *pwrite_cb_user_data;
62 	z80ex_mread_cb mread_cb;
63 	void *mread_cb_user_data;
64 	z80ex_mwrite_cb	mwrite_cb;
65 	void *mwrite_cb_user_data;
66 	z80ex_intread_cb intread_cb;
67 	void *intread_cb_user_data;
68 	z80ex_reti_cb reti_cb;
69 	void *reti_cb_user_data;
70 
71 	/*other stuff*/
72 	regpair tmpword;
73 	regpair tmpaddr;
74 	Z80EX_BYTE tmpbyte;
75 	Z80EX_SIGNED_BYTE tmpbyte_s;
76 };
77 
78 typedef void (*z80ex_opcode_fn) (Z80EX_CONTEXT *cpu);
79 
80 #endif
81