Imported Upstream version 2.9.0
[debian/cc1111] / sim / ucsim / z80.src / regsz80.h
1 /*
2  * Simulator of microcontrollers (regsz80.h)
3  *
4  * some z80 code base from Karl Bongers karl@turbobit.com
5  *
6  * Copyright (C) 1999,99 Drotos Daniel, Talker Bt.
7  * 
8  * To contact author send email to drdani@mazsola.iit.uni-miskolc.hu
9  *
10  */
11
12 /* This file is part of microcontroller simulator: ucsim.
13
14 UCSIM is free software; you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation; either version 2 of the License, or
17 (at your option) any later version.
18
19 UCSIM is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22 GNU General Public License for more details.
23
24 You should have received a copy of the GNU General Public License
25 along with UCSIM; see the file COPYING.  If not, write to the Free
26 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
27 02111-1307, USA. */
28 /*@1@*/
29
30 #ifndef REGSZ80_HEADER
31 #define REGSZ80_HEADER
32
33 #include "ddconfig.h"
34
35
36 struct t_regpair
37 {
38 #ifdef WORDS_BIGENDIAN
39   TYPE_UBYTE h;
40   TYPE_UBYTE l;
41 #else
42   TYPE_UBYTE l;
43   TYPE_UBYTE h;
44 #endif
45 };
46
47 #define DEF_REGPAIR(BIGNAME,smallname) \
48   union { \
49     TYPE_UWORD BIGNAME; \
50     struct t_regpair smallname; \
51   }
52
53 struct t_regs
54 {
55   TYPE_UBYTE A;
56   TYPE_UBYTE F;
57   DEF_REGPAIR(BC, bc);
58   DEF_REGPAIR(DE, de);
59   DEF_REGPAIR(HL, hl);
60   DEF_REGPAIR(IX, ix);
61   DEF_REGPAIR(IY, iy);
62   TYPE_UWORD SP;
63   /* there are alternate AF,BC,DE,HL register sets, and a few instructions
64      that swap one for the other */
65   TYPE_UBYTE aA;
66   TYPE_UBYTE aF;
67   DEF_REGPAIR(aBC, a_bc);
68   DEF_REGPAIR(aDE, a_de);
69   DEF_REGPAIR(aHL, a_hl);
70   TYPE_UBYTE iv;  /* interrupt vector, see ed 47 ld A,IV.. */
71 };
72
73 #define BIT_C   0x01  // carry status(out of bit 7)
74 #define BIT_N   0x02  // Not addition: subtract status(1 after subtract).
75 #define BIT_P   0x04  // parity/overflow, 1=even, 0=odd parity.  arith:1=overflow
76 #define BIT_A   0x10  // aux carry status(out of bit 3)
77 #define BIT_Z   0x40  // zero status, 1=zero, 0=nonzero
78 #define BIT_S   0x80  // sign status(value of bit 7)
79 #define BIT_ALL (BIT_C |BIT_N |BIT_P |BIT_A |BIT_Z |BIT_S)  // all bits
80
81 #define BITPOS_C 0    // 1
82 #define BITPOS_SUB 1  // 2H
83 #define BITPOS_P 2    // 4H
84 #define BITPOS_A 4    // 10H
85 #define BITPOS_Z 6    // 40H
86 #define BITPOS_S 7    // 80H
87
88 #endif
89
90 /* End of z80.src/regsz80.h */