4 * Copyright (C) 1993-2006 Alan R. Baldwin
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
26 * Extensions: P. Felber
27 * eZ80 port (based on ASxxxx sources): H. Sladky
33 char *cpu
= "Zilog Z80 / Hitachi HD64180 / ZX-Next / eZ80 / R800";
36 char imtab
[3] = { 0x46, 0x56, 0x5E };
40 static int ez80_adl
= 0;
43 * Opcode Cycle Definitions
45 #define OPCY_SDP ((char) (0xFF))
46 #define OPCY_ERR ((char) (0xFE))
48 /* OPCY_NONE ((char) (0x80)) */
49 /* OPCY_MASK ((char) (0x7F)) */
51 #define OPCY_CPU ((char) (0xFD))
53 #define UN ((char) (OPCY_NONE | 0x00))
54 #define P2 ((char) (OPCY_NONE | 0x01))
55 #define P3 ((char) (OPCY_NONE | 0x02))
56 #define P4 ((char) (OPCY_NONE | 0x03))
57 #define P5 ((char) (OPCY_NONE | 0x04))
58 #define P6 ((char) (OPCY_NONE | 0x05))
59 #define P7 ((char) (OPCY_NONE | 0x06))
61 #define PF ((char) (OPCY_NONE | 0x10))
64 * Z80 Opcode Cycle Pages
67 static const char z80pg1
[256] = {
68 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
69 /*--*--* - - - - - - - - - - - - - - - - */
70 /*00*/ 4,10, 7, 6, 4, 4, 7, 4, 4,11, 7, 6, 4, 4, 7, 4,
71 /*10*/ 13,10, 7, 6, 4, 4, 7, 4,12,11, 7, 6, 4, 4, 7, 4,
72 /*20*/ 12,10,16, 6, 4, 4, 7, 4,12,11,16, 6, 4, 4, 7, 4,
73 /*30*/ 12,10,13, 6,11,11,10, 4,12,11,13, 6, 4, 4, 7, 4,
74 /*40*/ 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
75 /*50*/ 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
76 /*60*/ 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
77 /*70*/ 7, 7, 7, 7, 7, 7, 4, 7, 4, 4, 4, 4, 4, 4, 7, 4,
78 /*80*/ 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
79 /*90*/ 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
80 /*A0*/ 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
81 /*B0*/ 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
82 /*C0*/ 11,10,10,10,17,11, 7,11,11,10,10,P2
,17,17, 7,11,
83 /*D0*/ 11,10,10,11,17,11, 7,11,11, 4,10,11,17,P3
, 7,11,
84 /*E0*/ 11,10,10,19,17,11, 7,11,11, 4,10, 4,17,P4
, 7,11,
85 /*F0*/ 11,10,10, 4,17,11, 7,11,11, 6,10, 4,17,P5
, 7,11
88 static const char z80pg2
[256] = { /* P2 == CB */
89 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
90 /*--*--* - - - - - - - - - - - - - - - - */
91 /*00*/ 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
92 /*10*/ 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
93 /*20*/ 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
94 /*30*/ 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
95 /*40*/ 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8,
96 /*50*/ 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8,
97 /*60*/ 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8,
98 /*70*/ 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8,
99 /*80*/ 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
100 /*90*/ 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
101 /*A0*/ 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
102 /*B0*/ 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
103 /*C0*/ 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
104 /*D0*/ 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
105 /*E0*/ 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
106 /*F0*/ 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8
109 static const char z80pg3
[256] = { /* P3 == DD && P5 == FD */
110 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
111 /*--*--* - - - - - - - - - - - - - - - - */
112 /*00*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,15,UN
,UN
,UN
,UN
,UN
,UN
,
113 /*10*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,15,UN
,UN
,UN
,UN
,UN
,UN
,
114 /*20*/ UN
,14,20,10, 8, 8,11,UN
,UN
,15,20,10, 8,8 ,11,UN
,
115 /*30*/ UN
,UN
,UN
,UN
,23,23,19,UN
,UN
,15,UN
,UN
,UN
,UN
,UN
,UN
,
116 /*40*/ UN
,UN
,UN
,UN
, 8, 8,19,UN
,UN
,UN
,UN
,UN
, 8, 8,19,UN
,
117 /*50*/ UN
,UN
,UN
,UN
, 8, 8,19,UN
,UN
,UN
,UN
,UN
, 8, 8,19,UN
,
118 /*60*/ 8, 8, 8, 8, 8, 8,19, 8, 8, 8, 8, 8, 8, 8,19, 8,
119 /*70*/ 19,19,19,19,19,19,UN
,19,UN
,UN
,UN
,UN
, 8, 8,19,UN
,
120 /*80*/ UN
,UN
,UN
,UN
, 8, 8,19,UN
,UN
,UN
,UN
,UN
, 8, 8,19,UN
,
121 /*90*/ UN
,UN
,UN
,UN
, 8, 8,19,UN
,UN
,UN
,UN
,UN
, 8, 8,19,UN
,
122 /*A0*/ UN
,UN
,UN
,UN
, 8, 8,19,UN
,UN
,UN
,UN
,UN
, 8, 8,19,UN
,
123 /*B0*/ UN
,UN
,UN
,UN
, 8, 8,19,UN
,UN
,UN
,UN
,UN
, 8, 8,19,UN
,
124 /*C0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,P6
,UN
,UN
,UN
,UN
,
125 /*D0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
126 /*E0*/ UN
,14,UN
,23,UN
,15,UN
,UN
,UN
, 8,UN
,UN
,UN
,UN
,UN
,UN
,
127 /*F0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,10,UN
,UN
,UN
,UN
,UN
,UN
130 static const char z80pg4
[256] = { /* P4 == ED */
131 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
132 /*--*--* - - - - - - - - - - - - - - - - */
133 /*00*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
134 /*10*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
135 /*20*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
136 /*30*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
137 /*40*/ 12,12,15,20, 8,14, 8, 9,12,12,15,20, 8,14, 8, 9,
138 /*50*/ 12,12,15,20, 8,14, 8, 9,12,12,15,20, 8,14, 8, 9,
139 /*60*/ 12,12,15,20, 8,14, 8,18,12,12,15,20, 8,14, 8,18,
140 /*70*/ 12,12,15,20, 8,14, 8,UN
,12,12,15,20, 8,14, 8,UN
,
141 /*80*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
142 /*90*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
143 /*A0*/ 16,16,16,16,UN
,UN
,UN
,UN
,16,16,16,16,UN
,UN
,UN
,UN
,
144 /*B0*/ 21,21,21,21,UN
,UN
,UN
,UN
,21,21,21,21,UN
,UN
,UN
,UN
,
145 /*C0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
146 /*D0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
147 /*E0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
148 /*F0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
151 static const char z80pg6
[256] = { /* P6 == FD CB && P6 == DD CB */
152 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
153 /*--*--* - - - - - - - - - - - - - - - - */
154 /*00*/ UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,
155 /*10*/ UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,
156 /*20*/ UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,
157 /*30*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,
158 /*40*/ UN
,UN
,UN
,UN
,UN
,UN
,20,UN
,UN
,UN
,UN
,UN
,UN
,UN
,20,UN
,
159 /*50*/ UN
,UN
,UN
,UN
,UN
,UN
,20,UN
,UN
,UN
,UN
,UN
,UN
,UN
,20,UN
,
160 /*60*/ UN
,UN
,UN
,UN
,UN
,UN
,20,UN
,UN
,UN
,UN
,UN
,UN
,UN
,20,UN
,
161 /*70*/ UN
,UN
,UN
,UN
,UN
,UN
,20,UN
,UN
,UN
,UN
,UN
,UN
,UN
,20,UN
,
162 /*80*/ UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,
163 /*90*/ UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,
164 /*A0*/ UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,
165 /*B0*/ UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,
166 /*C0*/ UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,
167 /*D0*/ UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,
168 /*E0*/ UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,
169 /*F0*/ UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,UN
,UN
,UN
,UN
,UN
,UN
,23,UN
172 static const char *z80Page
[7] = {
173 z80pg1
, z80pg2
, z80pg3
, z80pg4
,
174 z80pg3
, z80pg6
, z80pg6
178 * HD64180 / Z180 Opcode Cycle Pages
181 static const char hd64pg1
[256] = {
182 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
183 /*--*--* - - - - - - - - - - - - - - - - */
184 /*00*/ 3, 9, 7, 4, 4, 4, 6, 3, 4, 7, 6, 4, 4, 4, 6, 3,
185 /*10*/ 9, 9, 7, 4, 4, 4, 6, 3, 8, 7, 6, 4, 4, 4, 6, 3,
186 /*20*/ 8, 9,16, 4, 4, 4, 6, 4, 8, 7,15, 4, 4, 4, 6, 3,
187 /*30*/ 8, 9,13, 4,10,10, 9, 3, 8, 7,12, 4, 4, 4, 6, 3,
188 /*40*/ 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 6, 4,
189 /*50*/ 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 6, 4,
190 /*60*/ 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 6, 4,
191 /*70*/ 7, 7, 7, 7, 7, 7, 3, 7, 4, 4, 4, 4, 4, 4, 6, 4,
192 /*80*/ 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 6, 4,
193 /*90*/ 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 6, 4,
194 /*A0*/ 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 6, 4,
195 /*B0*/ 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 6, 4,
196 /*C0*/ 10, 9, 9, 9,16,11, 6,11,10, 9, 9,P2
,16,16, 6,11,
197 /*D0*/ 10, 9, 9,10,16,11, 6,11,10, 3, 9, 9,16,P3
, 6,11,
198 /*E0*/ 10, 9, 9,16,16,11, 6,11,10, 3, 9, 3,16,P4
, 6,11,
199 /*F0*/ 10, 9, 9, 3,16,11, 6,11,10, 4, 9, 3,16,P5
, 6,11
202 static const char hd64pg2
[256] = { /* P2 == CB */
203 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
204 /*--*--* - - - - - - - - - - - - - - - - */
205 /*00*/ 7, 7, 7, 7, 7, 7,13, 7, 7, 7, 7, 7, 7, 7,13, 7,
206 /*10*/ 7, 7, 7, 7, 7, 7,13, 7, 7, 7, 7, 7, 7, 7,13, 7,
207 /*20*/ 7, 7, 7, 7, 7, 7,13, 7, 7, 7, 7, 7, 7, 7,13, 7,
208 /*30*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 7, 7, 7, 7, 7, 7,13, 7,
209 /*40*/ 7, 7, 7, 7, 7, 7,13, 7, 7, 7, 7, 7, 7, 7,13, 7,
210 /*50*/ 7, 7, 7, 7, 7, 7,13, 7, 7, 7, 7, 7, 7, 7,13, 7,
211 /*60*/ 7, 7, 7, 7, 7, 7,13, 7, 7, 7, 7, 7, 7, 7,13, 7,
212 /*70*/ 7, 7, 7, 7, 7, 7,13, 7, 7, 7, 7, 7, 7, 7,13, 7,
213 /*80*/ 7, 7, 7, 7, 7, 7,13, 7, 7, 7, 7, 7, 7, 7,13, 7,
214 /*90*/ 7, 7, 7, 7, 7, 7,13, 7, 7, 7, 7, 7, 7, 7,13, 7,
215 /*A0*/ 7, 7, 7, 7, 7, 7,13, 7, 7, 7, 7, 7, 7, 7,13, 7,
216 /*B0*/ 7, 7, 7, 7, 7, 7,13, 7, 7, 7, 7, 7, 7, 7,13, 7,
217 /*C0*/ 7, 7, 7, 7, 7, 7,13, 7, 7, 7, 7, 7, 7, 7,13, 7,
218 /*D0*/ 7, 7, 7, 7, 7, 7,13, 7, 7, 7, 7, 7, 7, 7,13, 7,
219 /*E0*/ 7, 7, 7, 7, 7, 7,13, 7, 7, 7, 7, 7, 7, 7,13, 7,
220 /*F0*/ 7, 7, 7, 7, 7, 7,13, 7, 7, 7, 7, 7, 7, 7,13, 7
223 static const char hd64pg3
[256] = { /* P3 == DD */
224 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
225 /*--*--* - - - - - - - - - - - - - - - - */
226 /*00*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,10,UN
,UN
,UN
,UN
,UN
,UN
,
227 /*10*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,10,UN
,UN
,UN
,UN
,UN
,UN
,
228 /*20*/ UN
,12,19, 7,UN
,UN
,UN
,UN
,UN
,10,18, 7,UN
,UN
,UN
,UN
,
229 /*30*/ UN
,UN
,UN
,UN
,18,18,15,UN
,UN
,10,UN
,UN
,UN
,UN
,UN
,UN
,
230 /*40*/ UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,
231 /*50*/ UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,
232 /*60*/ UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,
233 /*70*/ 15,15,15,15,15,15,UN
,15,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,
234 /*80*/ UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,
235 /*90*/ UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,
236 /*A0*/ UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,
237 /*B0*/ UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,
238 /*C0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,P6
,UN
,UN
,UN
,UN
,
239 /*D0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
240 /*E0*/ UN
,12,UN
,19,UN
,14,UN
,UN
,UN
, 6,UN
,UN
,UN
,UN
,UN
,UN
,
241 /*F0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 7,UN
,UN
,UN
,UN
,UN
,UN
244 static const char hd64pg4
[256] = { /* P4 == ED */
245 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
246 /*--*--* - - - - - - - - - - - - - - - - */
247 /*00*/ 12,13,UN
,UN
, 7,UN
,UN
,UN
,12,13,UN
,UN
, 7,UN
,UN
,UN
,
248 /*10*/ 12,13,UN
,UN
, 7,UN
,UN
,UN
,12,13,UN
,UN
, 7,UN
,UN
,UN
,
249 /*20*/ 12,13,UN
,UN
, 7,UN
,UN
,UN
,12,13,UN
,UN
, 7,UN
,UN
,UN
,
250 /*30*/ UN
,UN
,UN
,UN
,10,UN
,UN
,UN
,12,13,UN
,UN
, 7,UN
,UN
,UN
,
251 /*40*/ 9,10,10,19, 6,12, 6, 6, 9,10,10,18,17,12,UN
, 6,
252 /*50*/ 9,10,10,19,UN
,UN
, 6, 6, 9,10,10,18,17,UN
, 6, 6,
253 /*60*/ 9,10,10,19, 9,UN
,UN
,16, 9,10,10,18,17,UN
,UN
,16,
254 /*70*/ UN
,10,10,19,12,UN
, 8,UN
, 9,10,10,18,17,UN
,UN
,UN
,
255 /*80*/ UN
,UN
,UN
,14,UN
,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,UN
,UN
,UN
,
256 /*90*/ UN
,UN
,UN
,16,UN
,UN
,UN
,UN
,UN
,UN
,UN
,16,UN
,UN
,UN
,UN
,
257 /*A0*/ 12,12,12,12,UN
,UN
,UN
,UN
,12,12,12,12,UN
,UN
,UN
,UN
,
258 /*B0*/ 14,14,14,14,UN
,UN
,UN
,UN
,14,14,14,14,UN
,UN
,UN
,UN
,
259 /*C0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
260 /*D0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
261 /*E0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
262 /*F0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
265 static const char hd64pg5
[256] = { /* P5 == FD */
266 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
267 /*--*--* - - - - - - - - - - - - - - - - */
268 /*00*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,10,UN
,UN
,UN
,UN
,UN
,UN
,
269 /*10*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,10,UN
,UN
,UN
,UN
,UN
,UN
,
270 /*20*/ UN
,12,19, 7,UN
,UN
,UN
,UN
,UN
,10,18, 7,UN
,UN
,UN
,UN
,
271 /*30*/ UN
,UN
,UN
,UN
,18,18,15,UN
,UN
,10,UN
,UN
,UN
,UN
,UN
,UN
,
272 /*40*/ UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,
273 /*50*/ UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,
274 /*60*/ UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,
275 /*70*/ 15,15,15,15,15,15,UN
,15,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,
276 /*80*/ UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,
277 /*90*/ UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,
278 /*A0*/ UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,
279 /*B0*/ UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,UN
,UN
,UN
,UN
,UN
,UN
,14,UN
,
280 /*C0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,P7
,UN
,UN
,UN
,UN
,
281 /*D0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
282 /*E0*/ UN
,12,UN
,19,UN
,14,UN
,UN
,UN
, 6,UN
,UN
,UN
,UN
,UN
,UN
,
283 /*F0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 7,UN
,UN
,UN
,UN
,UN
,UN
286 static const char hd64pg6
[256] = { /* P6 == DD CB */
287 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
288 /*--*--* - - - - - - - - - - - - - - - - */
289 /*00*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
290 /*10*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
291 /*20*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
292 /*30*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
293 /*40*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
294 /*50*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
295 /*60*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
296 /*70*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
297 /*80*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
298 /*90*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
299 /*A0*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
300 /*B0*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
301 /*C0*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
302 /*D0*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
303 /*E0*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
304 /*F0*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
307 static const char hd64pg7
[256] = { /* P7 == FD CB */
308 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
309 /*--*--* - - - - - - - - - - - - - - - - */
310 /*00*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
311 /*10*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
312 /*20*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
313 /*30*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
314 /*40*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
315 /*50*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
316 /*60*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
317 /*70*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
318 /*80*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
319 /*90*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
320 /*A0*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
321 /*B0*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
322 /*C0*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
323 /*D0*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
324 /*E0*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,
325 /*F0*/ UN
,UN
,UN
,UN
,UN
,UN
,19,UN
,UN
,UN
,UN
,UN
,UN
,UN
,19,UN
328 static const char *hd64Page
[7] = {
329 hd64pg1
, hd64pg2
, hd64pg3
, hd64pg4
,
330 hd64pg5
, hd64pg6
, hd64pg7
334 * Z80-ZXN Opcode Cycle Pages
337 static const char zxnpg4
[256] = { /* P4 == ED */
338 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
339 /*--*--* - - - - - - - - - - - - - - - - */
340 /*00*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
341 /*10*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
342 /*20*/ UN
,UN
,UN
, 8, 8,UN
,UN
,11, 8, 8, 8, 8, 8,UN
,UN
,UN
,
343 /*30*/ 8, 8, 8, 8,16,16,16,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
344 /*40*/ 12,12,15,20, 8,14, 8, 9,12,12,15,20, 8,14, 8, 9,
345 /*50*/ 12,12,15,20, 8,14, 8, 9,12,12,15,20, 8,14, 8, 9,
346 /*60*/ 12,12,15,20, 8,14, 8,18,12,12,15,20, 8,14, 8,18,
347 /*70*/ 12,12,15,20, 8,14, 8,UN
,12,12,15,20, 8,14, 8,UN
,
348 /*80*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,23,UN
,UN
,UN
,UN
,UN
,
349 /*90*/ 16,20,17, 8, 8, 8,UN
,UN
,13,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
350 /*A0*/ 16,16,16,16,16,14,UN
,UN
,16,16,16,16,16,UN
,UN
,UN
,
351 /*B0*/ 21,21,21,21,21,UN
,UN
,21,21,21,21,21,21,UN
,UN
,UN
,
352 /*C0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
353 /*D0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
354 /*E0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
355 /*F0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
358 static const char *zxnPage
[7] = {
359 z80pg1
, z80pg2
, z80pg3
, zxnpg4
,
360 z80pg3
, z80pg6
, z80pg6
364 * EZ80 Opcode Cycle Pages
367 static const char ez80pg1
[256] = {
368 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
369 /*--*--* - - - - - - - - - - - - - - - - */
370 /*00*/ 1, 3, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1,
371 /*10*/ 4, 3, 2, 1, 1, 1, 2, 1, 3, 1, 2, 1, 1, 1, 2, 1,
372 /*20*/ 3, 3, 7, 1, 1, 1, 2, 1, 3, 1, 5, 1, 1, 1, 2, 1,
373 /*30*/ 3, 3, 4, 1, 4, 4, 3, 1, 3, 1, 4, 1, 1, 1, 2, 1,
374 /*40*/ PF
, 1, 1, 1, 1, 1, 2, 1, 1,PF
, 1, 1, 1, 1, 2, 1,
375 /*50*/ 1, 1,PF
, 1, 1, 1, 2, 1, 1, 1, 1,PF
, 1, 1, 2, 1,
376 /*60*/ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
377 /*70*/ 2, 2, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1,
378 /*80*/ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
379 /*90*/ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
380 /*A0*/ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
381 /*B0*/ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
382 /*C0*/ 6, 3, 4, 4, 6, 3, 2, 5, 6, 5, 4,P2
, 6, 5, 2, 5,
383 /*D0*/ 6, 3, 4, 3, 6, 3, 2, 5, 6, 1, 4, 3, 6,P3
, 2, 5,
384 /*E0*/ 6, 3, 4, 5, 6, 3, 2, 5, 6, 3, 4, 1, 6,P4
, 2, 5,
385 /*F0*/ 6, 3, 4, 1, 6, 3, 2, 5, 6, 1, 4, 1, 6,P5
, 2, 5
388 static const char ez80pg2
[256] = { /* P2 == CB */
389 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
390 /*--*--* - - - - - - - - - - - - - - - - */
391 /*00*/ 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 5, 2,
392 /*10*/ 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 5, 2,
393 /*20*/ 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 5, 2,
394 /*30*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 2, 2, 2, 2, 2, 2, 5, 2,
395 /*40*/ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
396 /*50*/ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
397 /*60*/ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
398 /*70*/ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
399 /*80*/ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
400 /*90*/ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
401 /*A0*/ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
402 /*B0*/ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
403 /*C0*/ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
404 /*D0*/ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
405 /*E0*/ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
406 /*F0*/ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2
409 static const char ez80pg3
[256] = { /* P3 == DD */
410 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
411 /*--*--* - - - - - - - - - - - - - - - - */
412 /*00*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
, 2,UN
,UN
,UN
,UN
,UN
, 5,
413 /*10*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
, 2,UN
,UN
,UN
,UN
,UN
, 5,
414 /*20*/ UN
, 4, 6, 2, 2, 2, 2, 5,UN
, 2, 6, 2, 2, 2, 2, 5,
415 /*30*/ UN
, 5,UN
,UN
, 6, 6, 5, 5,UN
, 2,UN
,UN
,UN
,UN
, 5, 5,
416 /*40*/ UN
,UN
,UN
,UN
, 2, 2, 4,UN
,UN
,UN
,UN
,UN
, 2, 2, 4,UN
,
417 /*50*/ UN
,UN
,UN
,UN
, 2, 2, 4,UN
,UN
,UN
,UN
,UN
, 2, 2, 4,UN
,
418 /*60*/ 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
419 /*70*/ 4, 4, 4, 4, 4, 4,UN
, 4,UN
,UN
,UN
,UN
, 2, 2, 4,UN
,
420 /*80*/ UN
,UN
,UN
,UN
, 2, 2, 4,UN
,UN
,UN
,UN
,UN
, 2, 2, 4,UN
,
421 /*90*/ UN
,UN
,UN
,UN
, 2, 2, 4,UN
,UN
,UN
,UN
,UN
, 2, 2, 4,UN
,
422 /*A0*/ UN
,UN
,UN
,UN
, 2, 2, 4,UN
,UN
,UN
,UN
,UN
, 2, 2, 4,UN
,
423 /*B0*/ UN
,UN
,UN
,UN
, 2, 2, 4,UN
,UN
,UN
,UN
,UN
, 2, 2, 4,UN
,
424 /*C0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,P6
,UN
,UN
,UN
,UN
,
425 /*D0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
426 /*E0*/ UN
, 4,UN
, 6,UN
, 4,UN
,UN
,UN
, 4,UN
,UN
,UN
,UN
,UN
,UN
,
427 /*F0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 2,UN
,UN
,UN
,UN
,UN
,UN
430 static const char ez80pg4
[256] = { /* P4 == ED */
431 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
432 /*--*--* - - - - - - - - - - - - - - - - */
433 /*00*/ 4, 4, 3, 3, 2,UN
,UN
, 4, 4, 4,UN
,UN
, 2,UN
,UN
, 4,
434 /*10*/ 4, 4, 3, 3, 2,UN
,UN
, 4, 4, 4,UN
,UN
, 2,UN
,UN
, 4,
435 /*20*/ 4, 4, 3, 3, 2,UN
,UN
, 4, 4, 4,UN
,UN
, 2,UN
,UN
, 4,
436 /*30*/ UN
, 4, 3, 3, 3,UN
,UN
, 4, 4, 4,UN
,UN
, 2,UN
, 4, 4,
437 /*40*/ 3, 3, 2, 6, 2, 6, 2, 2, 3, 3, 2, 6, 6, 6,UN
, 2,
438 /*50*/ 3, 3, 2, 6, 3, 3, 2, 2, 3, 3, 2, 6, 6,UN
, 2, 2,
439 /*60*/ 3, 3, 2,UN
, 3, 5, 5, 5, 3, 3, 2,UN
, 6, 2, 2, 5,
440 /*70*/ UN
,UN
, 2, 6, 4,UN
, 2,UN
, 3, 3, 2, 5, 6, 2, 2,UN
,
441 /*80*/ UN
,UN
, 5, 5, 5,UN
,UN
,UN
,UN
,UN
, 5, 5, 5,UN
,UN
,UN
,
442 /*90*/ UN
,UN
, 2, 2, 2,UN
,UN
,UN
,UN
,UN
, 2, 2, 2,UN
,UN
,UN
,
443 /*A0*/ 5, 3, 5, 5, 5,UN
,UN
,UN
, 5, 3, 5, 5, 5,UN
,UN
,UN
,
444 /*B0*/ 2, 1, 2, 2, 2,UN
,UN
,UN
, 2, 1, 2, 2, 2,UN
,UN
,UN
,
445 /*C0*/ UN
,UN
, 2, 3,UN
,UN
,UN
, 2,UN
,UN
, 2, 2,UN
,UN
,UN
,UN
,
446 /*D0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
, 2,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
447 /*E0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
448 /*F0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
451 static const char ez80pg5
[256] = { /* P5 == FD */
452 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
453 /*--*--* - - - - - - - - - - - - - - - - */
454 /*00*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
, 2,UN
,UN
,UN
,UN
,UN
, 5,
455 /*10*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
, 2,UN
,UN
,UN
,UN
,UN
, 5,
456 /*20*/ UN
, 4, 6, 2, 2, 2, 2, 5,UN
, 2, 6, 2, 2, 2, 2, 5,
457 /*30*/ UN
, 5,UN
,UN
, 6, 6, 5, 5,UN
, 2,UN
,UN
,UN
,UN
, 5, 5,
458 /*40*/ UN
,UN
,UN
,UN
, 2, 2, 4,UN
,UN
,UN
,UN
,UN
, 2, 2, 4,UN
,
459 /*50*/ UN
,UN
,UN
,UN
, 2, 2, 4,UN
,UN
,UN
,UN
,UN
, 2, 2, 4,UN
,
460 /*60*/ 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
461 /*70*/ 4, 4, 4, 4, 4, 4,UN
, 4,UN
,UN
,UN
,UN
, 2, 2, 4,UN
,
462 /*80*/ UN
,UN
,UN
,UN
, 2, 2, 4,UN
,UN
,UN
,UN
,UN
, 2, 2, 4,UN
,
463 /*90*/ UN
,UN
,UN
,UN
, 2, 2, 4,UN
,UN
,UN
,UN
,UN
, 2, 2, 4,UN
,
464 /*A0*/ UN
,UN
,UN
,UN
, 2, 2, 4,UN
,UN
,UN
,UN
,UN
, 2, 2, 4,UN
,
465 /*B0*/ UN
,UN
,UN
,UN
, 2, 2, 4,UN
,UN
,UN
,UN
,UN
, 2, 2, 4,UN
,
466 /*C0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,P7
,UN
,UN
,UN
,UN
,
467 /*D0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,
468 /*E0*/ UN
, 4,UN
, 6,UN
, 4,UN
,UN
,UN
, 4,UN
,UN
,UN
,UN
,UN
,UN
,
469 /*F0*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 2,UN
,UN
,UN
,UN
,UN
,UN
472 static const char ez80pg6
[256] = { /* P6 == DD CB */
473 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
474 /*--*--* - - - - - - - - - - - - - - - - */
475 /*00*/ UN
,UN
,UN
,UN
,UN
,UN
, 7,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 7,UN
,
476 /*10*/ UN
,UN
,UN
,UN
,UN
,UN
, 7,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 7,UN
,
477 /*20*/ UN
,UN
,UN
,UN
,UN
,UN
, 7,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 7,UN
,
478 /*30*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 7,UN
,
479 /*40*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
480 /*50*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
481 /*60*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
482 /*70*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
483 /*80*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
484 /*90*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
485 /*A0*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
486 /*B0*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
487 /*C0*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
488 /*D0*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
489 /*E0*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
490 /*F0*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
493 static const char ez80pg7
[256] = { /* P7 == FD CB */
494 /*--*--* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
495 /*--*--* - - - - - - - - - - - - - - - - */
496 /*00*/ UN
,UN
,UN
,UN
,UN
,UN
, 7,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 7,UN
,
497 /*10*/ UN
,UN
,UN
,UN
,UN
,UN
, 7,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 7,UN
,
498 /*20*/ UN
,UN
,UN
,UN
,UN
,UN
, 7,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 7,UN
,
499 /*30*/ UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 7,UN
,
500 /*40*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
501 /*50*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
502 /*60*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
503 /*70*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
504 /*80*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
505 /*90*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
506 /*A0*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
507 /*B0*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
508 /*C0*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
509 /*D0*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
510 /*E0*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,
511 /*F0*/ UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
,UN
,UN
,UN
,UN
,UN
,UN
, 5,UN
514 static const char *ez80Page
[7] = {
515 ez80pg1
, ez80pg2
, ez80pg3
, ez80pg4
,
516 ez80pg5
, ez80pg6
, ez80pg7
520 * Process a machine op.
532 op
= (int) mp
->m_valu
;
536 /* check eZ80 flags in non-eZ80 mode and block such instruction */
537 if ((sf
& (M_LIL
| M_SIS
)) != 0 && mchtyp
!= X_EZ80
)
550 if (rf
> S_CPU
&& rf
< X_ZXN_INH2
&& rf
!= X_TST
&& rf
!= X_MLT
)
554 if (rf
>= X_ZXN_INH2
&& rf
< X_EZ_ADL
) {
558 /* handle eZ80 suffix and write it as prefix byte */
607 if (rf
> S_CPU
&& rf
< X_Z280_MULTU
)
631 if ((v1
= admode(CND
)) != 0) {
634 xerr('a', "Require condition code NZ, Z, NC, or C.");
653 * push/pop bc/de/hl/ix/iy (not sp)
655 if ((v1
= admode(R16
)) != 0 && (v1
&= 0xFF) != SP
) {
656 if (v1
!= gixiy(v1
)) {
663 if (mchtyp
== X_ZXN
&& op
== 0xC5 && (t1
= addr(&e1
)) == S_IMMED
) {
664 // ZXN push is big-endian
667 // ASXXXX do not check for R_MSB/R_LSB for constants!!!
668 if (e1
.e_flag
==0 && e1
.e_base
.e_ap
==NULL
) {
669 outab(hibyte(e1
.e_addr
));
670 outab(lobyte(e1
.e_addr
));
677 if (mchtyp
== X_ZXN
&& op
== 0xC1 && (v1
= admode(RX
)) != 0 && (v1
&= 0xFF) == X
) {
682 xerr('a', "Only 16-Bit registers except SP.");
686 v1
= (int) absexpr();
688 xerr('a', "Allowed values: N * 0x08, N = 0 -> 7.");
698 xerr('a', "Values of 0, 1, and 2 are valid.");
702 outab(imtab
[(int) e1
.e_addr
]);
708 v1
= (int) e1
.e_addr
;
723 if (genop(0xCB, op
, &e2
, 0) || t1
)
724 xerr('a', "Invalid Addressing Mode.");
729 xerr('a', "Undocumented instructions not enabled.");
741 if ((t2
!= S_R8
) || (e2
.e_addr
!= A
))
747 if (genop(0xCB, op
, &e2
, 0) || t1
)
748 xerr('a', "Invalid Addressing Mode.");
778 if ((t2
!= S_R8
) || (e2
.e_addr
!= A
))
785 if ((!t1
) && allow_undoc
&& ((t2
== S_R8U1
) || (t2
== S_R8U2
))) {
786 /* undocumented instruction: and/sub a,ixh|ixl|iyh|iyl */
787 outab( ((t2
== S_R8U1
) ? 0xDD : 0xFD ) );
788 outab( op
+ e2
.e_addr
);
805 if (genop(0, op
, &e2
, 1) || t1
)
806 xerr('a', "Invalid Addressing Mode.");
819 if (allow_undoc
&& ((t1
== S_R8U1
) || (t1
== S_R8U2
))) {
820 /* undocumented instruction: add/adc/sbc a,ixh|ixl|iyh|iyl */
821 outab( ((t1
== S_R8U1
) ? 0xDD : 0xFD ) );
822 outab( op
+ e1
.e_addr
);
826 if (genop(0, op
, &e1
, 1))
827 xerr('a', "Invalid Addressing Mode.");
830 if ((t1
== S_R8
) && (e1
.e_addr
== A
)) {
832 if (allow_undoc
&& ((t2
== S_R8U1
) || (t2
== S_R8U2
))) {
833 /* undocumented instruction: add/adc/sbc a,ixh|ixl|iyh|iyl */
834 outab( ((t2
== S_R8U1
) ? 0xDD : 0xFD ) );
835 outab( op
+ e2
.e_addr
);
839 if (genop(0, op
, &e2
, 1))
840 xerr('a', "Second argument: Invalid Addressing Mode.");
843 if ((t1
== S_R16
) && (t2
== S_R16
)) {
850 v1
= (int) e1
.e_addr
;
851 v2
= (int) e2
.e_addr
;
858 if ((v1
== HL
) && (v2
<= SP
)) {
865 xerr('a', "Only valid with ADD.");
874 if ((v1
== IX
) && (v2
!= HL
) && (v2
!= IY
)) {
887 if ((v1
== IY
) && (v2
!= HL
) && (v2
!= IX
)) {
895 if (mchtyp
== X_ZXN
&& rf
== S_ADD
&& t1
== S_R16
) {
896 if (e1
.e_addr
== HL
&& t2
== S_R8
&& e2
.e_addr
== A
) {
901 if (e1
.e_addr
== DE
&& t2
== S_R8
&& e2
.e_addr
== A
) {
906 if (e1
.e_addr
== BC
&& t2
== S_R8
&& e2
.e_addr
== A
) {
911 if (e1
.e_addr
== HL
&& t2
== S_IMMED
) {
917 if (e1
.e_addr
== DE
&& t2
== S_IMMED
) {
923 if (e1
.e_addr
== BC
&& t2
== S_IMMED
) {
930 xerr('a', "Invalid Addressing Mode.");
935 * Enumerated ld instructions:
955 v1
= op
| e1
.e_addr
<<3;
956 if (genop(0, v1
, &e2
, 0) == 0)
962 outab((e1
.e_addr
<<3) | 0x06);
969 ((t1
== S_R8U1
) || (t1
== S_R8U2
)) &&
972 outab( ((t1
== S_R8U1
) ? 0xDD : 0xFD ) );
973 outab((e1
.e_addr
<<3) | 0x06);
978 v1
= (int) e1
.e_addr
;
979 v2
= (int) e2
.e_addr
;
988 if ((t1
== S_R16
) && (t2
== S_IMMED
)) {
1002 if (mchtyp
== X_EZ80
&& (t1
== S_R16
) && (t2
== S_IDHL
)) {
1014 outab(7 + (v1
<< 4));
1026 if (mchtyp
== X_EZ80
&& (t2
== S_R16
) && (t1
== S_IDHL
)) {
1038 outab(0xf + (v2
<< 4));
1044 * ld bc,(ix+d) ld bc,(iy+d)
1045 * ld de,(ix+d) ld de,(iy+d)
1046 * ld hl,(ix+d) ld hl,(iy+d)
1047 * ld ix,(ix+d) ld ix,(iy+d)
1048 * ld iy,(ix+d) ld iy,(iy+d)
1050 if (mchtyp
== X_EZ80
&& (t1
== S_R16
) && ((t2
== S_IDIX
) || (t2
== S_IDIY
))) {
1052 xerr('a', "Only BC, DE, HL, IX and IY are allowed.");
1072 if ((v1
== BC
) || (v1
== DE
) || (v1
== HL
))
1073 outab((v1
<< 4) + 7);
1079 * ld (ix+d),bc ld (iy+d),bc
1080 * ld (ix+d),de ld (iy+d),de
1081 * ld (ix+d),hl ld (iy+d),hl
1082 * ld (ix+d),ix ld (iy+d),ix
1083 * ld (ix+d),iy ld (iy+d),iy
1085 if (mchtyp
== X_EZ80
&& (t2
== S_R16
) && ((t1
== S_IDIX
) || (t1
== S_IDIY
))) {
1087 xerr('a', "Only BC, DE, HL, IX and IY are allowed.");
1107 if ((v2
== BC
) || (v2
== DE
) || (v2
== HL
))
1108 outab((v2
<< 4) + 0xf);
1114 * ld be,(mn) [be,(#mn)]
1115 * ld de,(mn) [de,(#mn)]
1116 * ld hl,(mn) [hl,(#mn)]
1117 * ld sp,(mn) [sp,(#mn)]
1118 * ld ix,(mn) [ix,(#mn)]
1119 * ld iy,(mn) [iy,(#mn)]
1121 if ((t1
== S_R16
) && (t2
== S_INDM
)) {
1122 if (gixiy(v1
) == HL
) {
1126 outab(0x4B | (v1
<<4));
1132 * ld (mn),bc [(#mn),bc]
1133 * ld (mn),de [(#mn),de]
1134 * ld (mn),hl [(#mn),hl]
1135 * ld (mn),sp [(#mn),sp]
1136 * ld (mn),ix [(#mn),ix]
1137 * ld (mn),iy [(#mn),iy]
1139 if ((t1
== S_INDM
) && (t2
== S_R16
)) {
1140 if (gixiy(v2
) == HL
) {
1144 outab(0x43 | (v2
<<4));
1150 * ld a,(mn) [a,(#mn)]
1152 if ((t1
== S_R8
) && (v1
== A
) && (t2
== S_INDM
)) {
1158 * ld (mn),a [(#mn),a]
1160 if ((t1
== S_INDM
) && (t2
== S_R8
) && (v2
== A
)) {
1170 if ((t2
== S_R8
) && (gixiy(t1
) == S_IDHL
)) {
1177 * ld (hl),n [(hl),#n]
1178 * ld (ix+d),n [(ix+d),#n]
1179 * ld (iy+d),n [(iy+d),#n]
1181 if ((t2
== S_IMMED
) && (gixiy(t1
) == S_IDHL
)) {
1192 if ((t1
== S_R8X
) && (t2
== S_R8
) && (v2
== A
)) {
1200 if ((t1
== S_R8MB
) && (t2
== S_R8
) && (v2
== A
)) {
1209 if ((t1
== S_R8
) && (v1
== A
) && (t2
== S_R8X
)) {
1218 if ((t1
== S_R8
) && (v1
== A
) && (t2
== S_R8MB
)) {
1228 if ((t1
== S_R16
) && (v1
== SP
)) {
1229 if ((t2
== S_R16
) && (gixiy(v2
) == HL
)) {
1238 if ((t1
== S_R8
) && (v1
== A
)) {
1239 if ((t2
== S_IDBC
) || (t2
== S_IDDE
)) {
1240 outab(0x0A | ((t2
-S_INDR
)<<4));
1248 if ((t2
== S_R8
) && (v2
== A
)) {
1249 if ((t1
== S_IDBC
) || (t1
== S_IDDE
)) {
1250 outab(0x02 | ((t1
-S_INDR
)<<4));
1258 if ((t1
== S_R16
) && (v1
== HL
) && (t2
== S_R8X
) && (v2
== I
)) {
1266 if ((t2
== S_R16
) && (v2
== HL
) && (t1
== S_R8X
) && (v1
== I
)) {
1278 if ( (t1
== S_R8
) &&
1280 ((t2
== S_R8U1
) || (t2
== S_R8U2
)) )
1282 if ( (e1
.e_addr
== H
) || (e1
.e_addr
== L
) )
1284 outab( ((t2
== S_R8U1
) ? 0xDD : 0xFD ) );
1285 outab( (e1
.e_addr
<< 3) | (0x40 + e2
.e_addr
) );
1295 ((t1
== S_R8U1
) || (t1
== S_R8U2
)) &&
1298 if ( (e2
.e_addr
== H
) || (e2
.e_addr
== L
) )
1301 outab( ((t1
== S_R8U1
) ? 0xDD : 0xFD ) );
1302 outab( (e1
.e_addr
<< 3) | (0x40 + e2
.e_addr
) );
1316 ((t1
== S_R8U1
) && (t2
== S_R8U1
) || (t1
== S_R8U2
) && (t2
== S_R8U2
)) )
1318 outab( ((t1
== S_R8U1
) ? 0xDD : 0xFD ) );
1319 outab( (e1
.e_addr
<< 3) | (0x40 + e2
.e_addr
) );
1322 if (mchtyp
== X_EZ80
&& ((t1
== S_R8MB
&& v2
== A
) || (v1
== A
&& t2
== S_R8MB
))) {
1324 outab ((v1
== A
) ? 0x6E : 0x6D);
1327 xerr('a', "Invalid Addressing Mode.");
1335 v1
= (int) e1
.e_addr
;
1336 v2
= (int) e2
.e_addr
;
1342 if ((t1
== S_IDSP
) && (v1
== 0)) {
1343 if (gixiy(v2
) == HL
) {
1352 if ((v1
== DE
) && (v2
== HL
)) {
1361 if ((t1
== S_R16X
) && (t2
== S_R16X
)) {
1365 xerr('a', "Invalid Addressing Mode.");
1379 v1
= (int) e1
.e_addr
;
1380 v2
= (int) e2
.e_addr
;
1383 * in a,(n) [in a,(#n)]
1384 * out (n),a [out (#n),a]
1386 if ((v1
== A
) && (t2
== S_INDM
)) {
1392 * in r,(c) [in r,(bc)]
1393 * out (c),r [out (bc),r]
1397 outab(((rf
== S_IN
) ? 0x40 : 0x41) + (v1
<<3));
1401 xerr('a', "Invalid Addressing Mode.");
1407 v1
= (int) e1
.e_addr
;
1426 if (t1
!= gixiy(t1
)) {
1442 outab(0x03|(v1
<<4));
1446 outab(0x0B|(v1
<<4));
1456 if (allow_undoc
&& ((t1
== S_R8U1
)||(t1
== S_R8U2
))) {
1457 outab( ((t1
== S_R8U1
) ? 0xDD : 0xFD ) );
1461 xerr('a', "Invalid Addressing Mode.");
1469 if (rf
== S_JR
&& (v1
= admode(CND
)) != 0) {
1470 if ((v1
&= 0xFF) <= 0x03) {
1473 xerr('a', "Condition code required.");
1483 v2
= (int) (e2
.e_addr
- dot
.s_addr
- 1);
1484 if (pass
== 2 && ((v2
< -128) || (v2
> 127)))
1485 xerr('a', "Branching Range Exceeded.");
1490 if (e2
.e_mode
!= S_USER
)
1495 if ((v1
= admode(CND
)) != 0) {
1516 if ((v1
= admode(CND
)) != 0) {
1538 if ((e1
.e_addr
== 0) && (gixiy(t1
) == S_IDHL
)) {
1545 if (mchtyp
== X_ZXN
&& t1
== S_IDC
) {
1550 xerr('a', "Invalid Addressing Mode.");
1554 if (mchtyp
!= X_HD64
)
1557 xerr('a', "HD64180/Z180: Traps on illegal instruction");
1561 opcycles
= OPCY_CPU
;
1565 allow_undoc
= (mchtyp
== X_EZ80
|| mchtyp
== X_ZXN
|| mchtyp
== X_R800
);
1584 if ((t1
== S_R8
) && (t2
== S_INDM
)) {
1586 outab(op
| (e1
.e_addr
<<3));
1590 xerr('a', "Invalid Addressing Mode.");
1598 if (mchtyp
== X_ZXN
&& (t1
== S_R16
) && (int) e1
.e_addr
== DE
) {
1603 else if ((t1
== S_R16
) && ((v1
= (int) e1
.e_addr
) <= SP
)) {
1605 outab(op
| (v1
<<4));
1608 xerr('a', "Only BC, DE, HL and SP are allowed.");
1624 if ((t2
!= S_R8
) || (e2
.e_addr
!= A
))
1633 if ((mchtyp
== X_HD64
|| mchtyp
== X_EZ80
) && t2
== S_IDHL
) {
1641 if ((mchtyp
== X_HD64
|| mchtyp
== X_EZ80
) && t2
== S_R8
) {
1643 outab(op
| (e2
.e_addr
<< 3));
1649 if (t2
== S_IMMED
) {
1651 if (mchtyp
== X_HD64
|| mchtyp
== X_EZ80
)
1653 else if (mchtyp
== X_ZXN
)
1660 xerr('a', "Invalid Addressing Mode.");
1666 * tstio n [tstio #n]
1668 if (t1
== S_IMMED
) {
1674 xerr('a', "Invalid Addressing Mode.");
1680 if (more()) { // Optional argument a on swap
1682 if (t1
!= S_R8
|| e1
.e_addr
!= A
)
1686 case 0x28: // BSLA DE,B
1687 case 0x29: // BSRA DE,B
1688 case 0x2a: // BSRL DE,B
1689 case 0x2b: // BSRF DE,B
1690 case 0x2c: // BRLC DE,B
1694 if (t1
!= S_R16
|| e1
.e_addr
!= DE
|| t2
!= S_R8
|| e2
.e_addr
!= B
)
1703 if ((t1
= addr(&e1
)) == S_R8
&& e1
.e_addr
== D
&&
1704 more() && comma(1) &&
1705 (t2
= addr(&e2
)) == S_R8
&& e2
.e_addr
== E
1716 if (t1
== S_R8
&& e1
.e_addr
== A
) {
1721 if (t1
== S_R16
&& e1
.e_addr
== DE
) {
1736 if (t1
== S_IMMED
&& t2
== S_IMMED
) {
1743 if (t1
== S_IMMED
&& t2
== S_R8
&& e2
.e_addr
== A
) {
1759 if (t1
== S_IMMED
&& t2
== S_IMMED
) {
1760 if (e1
.e_addr
> 311 || e2
.e_addr
> 55) {
1764 v1
= 0x8000 + (e2
.e_addr
<< 9) + (e1
.e_addr
);
1767 opcycles
= OPCY_ERR
;
1780 if (t1
== S_IMMED
&& t2
== S_IMMED
) {
1781 if (e1
.e_addr
> 127 || e2
.e_addr
> 255) {
1785 v1
= (e1
.e_addr
<< 8) + (e2
.e_addr
);
1788 opcycles
= OPCY_ERR
;
1797 opcycles
= OPCY_ERR
;
1803 opcycles
= OPCY_ERR
;
1809 ez80_adl
= e1
.e_addr
;
1819 v1
= (int) e1
.e_addr
;
1822 v2
= (int) e2
.e_addr
;
1825 if ((t1
== S_R16
) && (v1
!= SP
) && (t2
== S_R16
) && (v2
==IX
|| v2
==IY
) && t3
== S_IMMED
) {
1826 t2
= e2
.e_mode
= S_INDR
+ v2
;
1856 outab((v1
<< 4) + 3);
1863 outab((v1
<< 4) + 2);
1874 v1
= (int) e1
.e_addr
;
1881 if ((t1
== S_R16
) && (v1
==IX
|| v1
==IY
) && t2
== S_IMMED
) {
1882 t1
= e1
.e_mode
= S_INDR
+ v1
;
1897 // For the R800, this instruction only works if the second operand is b, c, d, or e.
1898 if (t1
== S_R8
&& e1
.e_addr
== A
&& t2
== S_R8
&& (e2
.e_addr
== B
|| e2
.e_addr
== C
|| e2
.e_addr
== D
|| e2
.e_addr
== E
)) {
1900 outab(op
| (e2
.e_addr
<<3));
1910 // For the R800, this instruction only works if the second operand is bc or sp.
1911 if (t1
== S_R16
&& e1
.e_addr
== HL
&& t2
== S_R16
&& (e2
.e_addr
== BC
|| e2
.e_addr
== SP
)) {
1913 outab(op
| (e2
.e_addr
<<4));
1920 opcycles
= OPCY_ERR
;
1921 xerr('o', "Internal Opcode Error.");
1925 if (opcycles
== OPCY_NONE
) {
1928 opcycles
= hd64Page
[0][cb
[0] & 0xFF];
1929 while ((opcycles
& OPCY_NONE
) && (opcycles
& OPCY_MASK
)) {
1931 case P2
: /* CB xx */
1932 case P3
: /* DD xx */
1933 case P4
: /* ED xx */
1934 case P5
: /* FD xx */
1935 opcycles
= hd64Page
[opcycles
& OPCY_MASK
][cb
[1] & 0xFF];
1937 case P6
: /* DD CB -- xx */
1938 case P7
: /* FD CB -- xx */
1939 opcycles
= hd64Page
[opcycles
& OPCY_MASK
][cb
[3] & 0xFF];
1942 opcycles
= OPCY_NONE
;
1948 opcycles
= z80Page
[0][cb
[0] & 0xFF];
1949 while ((opcycles
& OPCY_NONE
) && (opcycles
& OPCY_MASK
)) {
1951 case P2
: /* CB xx */
1952 case P3
: /* DD xx */
1953 case P4
: /* ED xx */
1954 case P5
: /* FD xx */
1955 opcycles
= z80Page
[opcycles
& OPCY_MASK
][cb
[1] & 0xFF];
1957 case P6
: /* DD CB -- xx */
1958 case P7
: /* FD CB -- xx */
1959 opcycles
= z80Page
[opcycles
& OPCY_MASK
][cb
[3] & 0xFF];
1962 opcycles
= OPCY_NONE
;
1968 opcycles
= zxnPage
[0][cb
[0] & 0xFF];
1969 while ((opcycles
& OPCY_NONE
) && (opcycles
& OPCY_MASK
)) {
1971 case P2
: /* CB xx */
1972 case P3
: /* DD xx */
1973 case P4
: /* ED xx */
1974 case P5
: /* FD xx */
1975 opcycles
= zxnPage
[opcycles
& OPCY_MASK
][cb
[1] & 0xFF];
1977 case P6
: /* DD CB -- xx */
1978 case P7
: /* FD CB -- xx */
1979 opcycles
= zxnPage
[opcycles
& OPCY_MASK
][cb
[3] & 0xFF];
1982 opcycles
= OPCY_NONE
;
1990 opcycles
= ez80Page
[0][cb
[0] & 0xFF];
1991 while ((opcycles
& OPCY_NONE
) && (opcycles
& OPCY_MASK
)) {
1993 case PF
: /* 40 / 49 / 52 / 5B */
1995 opcycles
= ez80Page
[0][cb
[1] & 0xFF];
1997 case P2
: /* CB xx */
1998 case P3
: /* DD xx */
1999 case P4
: /* ED xx */
2000 case P5
: /* FD xx */
2001 opcycles
= ez80Page
[opcycles
& OPCY_MASK
][cb
[of
+ 1] & 0xFF];
2003 case P6
: /* DD CB -- xx */
2004 case P7
: /* FD CB -- xx */
2005 opcycles
= ez80Page
[opcycles
& OPCY_MASK
][cb
[of
+ 3] & 0xFF];
2008 opcycles
= OPCY_NONE
;
2013 // ToDo: ASXX has 'Cycle Adjustment' here...
2022 * general addressing evaluation
2023 * return(0) if general addressing mode output, else
2024 * return(esp->e_mode)
2027 genop(pop
, op
, esp
, f
)
2034 if ((t1
= esp
->e_mode
) == S_R8
) {
2037 outab(op
|esp
->e_addr
);
2046 if (gixiy(t1
) == S_IDHL
) {
2057 if ((t1
== S_IMMED
) && (f
)) {
2068 * IX and IY prebyte check
2077 } else if (v
== IY
) {
2080 } else if (v
== S_IDIX
) {
2083 } else if (v
== S_IDIY
) {
2091 * .IL/.LIL and .IS/.SIS checks
2099 // Pokus napsat zapis parametru 16/24-bit 'jinak'...
2100 if (ez80_adl
&& !(sfx
& M_IS
)) {
2104 // warning "Proc je pro Z80 defaultni funkce outrwm()...?
2105 // funkce - viz asxxsrc/asout.c
2106 // zrejme se musim podivat do ASxx zdrojaku, jak se zpracovavaji priznaky R_ADL, R_Z80, R_PAGX1...
2107 // outrwm(esp, R_Z80|R_PAGX1, 0);
2112 * Branch/Jump PCR Mode Check
2118 if (esp
->e_base
.e_ap
== dot
.s_area
) {
2121 if (esp
->e_flag
==0 && esp
->e_base
.e_ap
==NULL
) {
2123 * Absolute Destination
2125 * Use the global symbol '.__.ABS.'
2126 * of value zero and force the assembler
2127 * to use this absolute constant as the
2128 * base value for the relocation.
2131 esp
->e_base
.e_sp
= &sym
[1];
2137 * Machine dependent initialization
2154 sym
[2].s_addr
= X_Z80
;