summaryrefslogtreecommitdiff
path: root/apps/plugins/zxbox/z80.h
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/zxbox/z80.h')
-rw-r--r--apps/plugins/zxbox/z80.h193
1 files changed, 193 insertions, 0 deletions
diff --git a/apps/plugins/zxbox/z80.h b/apps/plugins/zxbox/z80.h
new file mode 100644
index 0000000000..996ea9d294
--- /dev/null
+++ b/apps/plugins/zxbox/z80.h
@@ -0,0 +1,193 @@
1/*
2 * Copyright (C) 1996-1998 Szeredi Miklos
3 * Email: mszeredi@inf.bme.hu
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version. See the file COPYING.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 *
19 */
20
21#ifndef Z80_H
22#define Z80_H
23
24#include "zxconfig.h"
25#include "config.h"
26
27#ifdef ROCKBOX_BIG_ENDIAN
28#define WORDS_BIGENDIAN
29#endif
30
31#ifndef COMPARISON
32#define PRNM(x) z80_ ## x
33#else
34#define PRNM(x) z80x_ ## x
35#endif
36
37#define DANM(x) PRNM(proc).x
38
39#include "z80_type.h"
40
41
42#ifndef WORDS_BIGENDIAN
43union dregp {
44 struct { byte l, h, _b2, _b3; } s;
45 struct { dbyte d, _d1; } d;
46 byte* p;
47};
48#else
49union dregp {
50 struct { byte _b3, _b2, h, l; } s;
51 struct { dbyte _d1, d; } d;
52 byte* p;
53};
54#endif
55
56#define NUMDREGS 9
57#define BACKDREGS 4
58
59#define PORTNUM 256
60
61/* Do NOT change the order! */
62typedef struct {
63 union dregp nr[NUMDREGS];
64 union dregp br[BACKDREGS];
65
66 int haltstate;
67 int it_mode;
68 int iff1, iff2;
69
70 byte *mem;
71
72 int tc;
73 int rl7;
74
75#ifdef SPECT_MEM /* WARNING: Do NOT change the order!!! */
76 int next_scri;
77 int inport_mask;
78 int ula_inport;
79 int ula_outport;
80 int sound_sam;
81 int sound_change;
82 int imp_change;
83#endif
84
85#ifdef Z80C
86 dbyte cbaddr;
87
88#ifdef PROCP
89 byte *incf_tbl;
90 byte *decf_tbl;
91 byte *addf_tbl;
92 byte *subf_tbl;
93 byte *orf_tbl;
94
95 byte *inports;
96 byte *outports;
97#ifdef SPECT_MEM
98 byte *fe_inport_high;
99#endif
100#endif
101#endif
102
103} Z80;
104
105
106extern Z80 PRNM(proc);
107
108extern byte PRNM(inports)[];
109extern byte PRNM(outports)[];
110
111#define ZI_BC 0
112#define ZI_DE 1
113#define ZI_HL 2
114#define ZI_AF 3
115#define ZI_IR 4
116#define ZI_IX 5
117#define ZI_IY 6
118#define ZI_PC 7
119#define ZI_SP 8
120
121
122#define BC (DANM(nr)[ZI_BC].d.d)
123#define DE (DANM(nr)[ZI_DE].d.d)
124#define HL (DANM(nr)[ZI_HL].d.d)
125#define AF (DANM(nr)[ZI_AF].d.d)
126#define IR (DANM(nr)[ZI_IR].d.d)
127#define IX (DANM(nr)[ZI_IX].d.d)
128#define IY (DANM(nr)[ZI_IY].d.d)
129#define PC (DANM(nr)[ZI_PC].d.d)
130#define SP (DANM(nr)[ZI_SP].d.d)
131
132#define BCP (DANM(nr)[ZI_BC].p)
133#define DEP (DANM(nr)[ZI_DE].p)
134#define HLP (DANM(nr)[ZI_HL].p)
135#define PCP (DANM(nr)[ZI_PC].p)
136#define SPP (DANM(nr)[ZI_SP].p)
137#define IXP (DANM(nr)[ZI_IX].p)
138#define IYP (DANM(nr)[ZI_IY].p)
139
140
141#define RB (DANM(nr)[ZI_BC].s.h)
142#define RC (DANM(nr)[ZI_BC].s.l)
143#define RD (DANM(nr)[ZI_DE].s.h)
144#define RE (DANM(nr)[ZI_DE].s.l)
145#define RH (DANM(nr)[ZI_HL].s.h)
146#define RL (DANM(nr)[ZI_HL].s.l)
147#define RA (DANM(nr)[ZI_AF].s.h)
148#define RF (DANM(nr)[ZI_AF].s.l)
149#define RI (DANM(nr)[ZI_IR].s.h)
150#define RR (DANM(nr)[ZI_IR].s.l)
151#define XH (DANM(nr)[ZI_IX].s.h)
152#define XL (DANM(nr)[ZI_IX].s.l)
153#define YH (DANM(nr)[ZI_IY].s.h)
154#define YL (DANM(nr)[ZI_IY].s.l)
155#define PCH (DANM(nr)[ZI_PC].s.h)
156#define PCL (DANM(nr)[ZI_PC].s.l)
157#define SPH (DANM(nr)[ZI_SP].s.h)
158#define SPL (DANM(nr)[ZI_SP].s.l)
159
160#define BCBK (DANM(br)[ZI_BC].d.d)
161#define DEBK (DANM(br)[ZI_DE].d.d)
162#define HLBK (DANM(br)[ZI_HL].d.d)
163#define AFBK (DANM(br)[ZI_AF].d.d)
164
165#define BBK (DANM(br)[ZI_BC].s.h)
166#define CBK (DANM(br)[ZI_BC].s.l)
167#define DBK (DANM(br)[ZI_DE].s.h)
168#define EBK (DANM(br)[ZI_DE].s.l)
169#define HBK (DANM(br)[ZI_HL].s.h)
170#define LBK (DANM(br)[ZI_HL].s.l)
171#define ABK (DANM(br)[ZI_AF].s.h)
172#define FBK (DANM(br)[ZI_AF].s.l)
173
174#ifdef __cplusplus
175extern "C" {
176#endif
177
178extern void PRNM(init)(void);
179extern int PRNM(step)(int ticknum);
180
181extern void PRNM(interrupt)(int data);
182extern void PRNM(nmi)(void);
183extern void PRNM(reset)(void);
184
185extern void PRNM(pushpc)(void);
186extern void PRNM(local_init)(void);
187
188#ifdef __cplusplus
189}
190#endif
191
192
193#endif /* Z80_H */