home *** CD-ROM | disk | FTP | other *** search
/ messroms.de / 2007-01-13_www.messroms.de.zip / CGENIE / TOOLS / DZ80.ZIP / z80.h < prev   
C/C++ Source or Header  |  1999-06-15  |  2KB  |  95 lines

  1. #define PACKED __attribute__((__packed__))
  2.  
  3. typedef    int        BOOL;    // BOOL
  4. typedef signed char    OFS8;    // offset
  5. typedef unsigned char    BYTE;    // BYTE
  6. typedef unsigned short    WORD;    // WORD
  7. typedef unsigned int    DWORD;    // DWORD
  8. typedef long long    LLONG;    // LLONG
  9.  
  10. typedef struct tagFLAG {// flag set
  11.     unsigned c:1;    // carry
  12.     unsigned n:1;    // negative
  13.     unsigned p:1;    // parity/overflow
  14.     unsigned x:1;    // unknown
  15.     unsigned h:1;    // half carry
  16.     unsigned y:1;    // unknown
  17.     unsigned z:1;    // zero
  18.     unsigned s:1;    // sign
  19. } FLAG    PACKED;
  20.  
  21. typedef union tagREG {    // registers union
  22.     BYTE    r8[2];    // low, high BYTE
  23.     WORD    r16;    // WORD (intel)
  24.     FLAG    f;    // flags
  25. } REG    PACKED;
  26.  
  27. typedef struct tagZ80 {
  28.     REG    bc;
  29.     REG    de;
  30.     REG    hl;
  31.     REG    sp;
  32.     REG    af;
  33.     REG    ix;
  34.     REG    iy;
  35.     REG    af2;
  36.     REG    bc2;
  37.     REG    de2;
  38.     REG    hl2;
  39.     REG    ri;
  40.     REG    pc;
  41.     BYTE    imode;
  42.     BYTE    IEN;
  43.     BYTE    data_tmp;
  44.     BYTE    port_tmp;
  45.     DWORD    addr_xy;
  46.     DWORD    addr_jmp;
  47.     DWORD    addr_src;
  48.     DWORD    addr_dst;
  49.     BYTE    data_xff[4];
  50. } Z80;
  51.  
  52. #define BC      z80->bc.r16
  53. #define DE      z80->de.r16
  54. #define HL      z80->hl.r16
  55. #define AF      z80->af.r16
  56.  
  57. #define IX    z80->ix.r16
  58. #define IY    z80->iy.r16
  59. #define SP    z80->sp.r16
  60.  
  61. #define BC2    z80->bc2.r16
  62. #define DE2    z80->de2.r16
  63. #define HL2    z80->hl2.r16
  64. #define AF2    z80->af2.r16
  65.  
  66. #define PC    z80->pc.r16
  67.  
  68. #define B    z80->bc.r8[1]
  69. #define C    z80->bc.r8[0]
  70. #define D    z80->de.r8[1]
  71. #define E    z80->de.r8[0]
  72. #define H    z80->hl.r8[1]
  73. #define L    z80->hl.r8[0]
  74. #define A    z80->af.r8[1]
  75. #define F    z80->af.f
  76. #define I    z80->ri.r8[1]
  77. #define R    z80->ri.r8[0]
  78.  
  79. #define HX    z80->ix.r8[1]
  80. #define LX    z80->ix.r8[0]
  81. #define HY    z80->iy.r8[1]
  82. #define LY    z80->iy.r8[0]
  83. #define HS    z80->sp.r8[1]
  84. #define LS    z80->sp.r8[0]
  85.  
  86. #define fC    z80->af.f.c
  87. #define fN    z80->af.f.n
  88. #define fX    z80->af.f.x
  89. #define fH    z80->af.f.h
  90. #define fY    z80->af.f.y
  91. #define fP    z80->af.f.p
  92. #define fZ    z80->af.f.z
  93. #define fS    z80->af.f.s
  94.  
  95. extern    BYTE    mem[0x10000];