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