fork of PCE focusing on macplus, supporting DaynaPort SCSI network emulation
1/*****************************************************************************
2 * pce *
3 *****************************************************************************/
4
5/*****************************************************************************
6 * File name: src/cpu/e8080/op_ed.c *
7 * Created: 2012-12-11 by Hampa Hug <hampa@hampa.ch> *
8 * Copyright: (C) 2012-2024 Hampa Hug <hampa@hampa.ch> *
9 *****************************************************************************/
10
11/*****************************************************************************
12 * This program is free software. You can redistribute it and / or modify it *
13 * under the terms of the GNU General Public License version 2 as published *
14 * by the Free Software Foundation. *
15 * *
16 * This program is distributed in the hope that it will be useful, but *
17 * WITHOUT ANY WARRANTY, without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General *
19 * Public License for more details. *
20 *****************************************************************************/
21
22
23#include "e8080.h"
24#include "internal.h"
25
26#include <stdlib.h>
27#include <stdio.h>
28
29
30static void op_ed_ud (e8080_t *c)
31{
32 if (e8080_hook_undefined (c)) {
33 return;
34 }
35
36 e8080_set_clk (c, 1, 4);
37}
38
39
40/* OP ED 40: IN r, (C) */
41static void op_ed_40 (e8080_t *c)
42{
43 unsigned r;
44 unsigned char d;
45
46 r = (c->inst[1] >> 3) & 7;
47 d = e8080_get_port8 (c, e8080_get_bc (c));
48 e8080_set_reg8 (c, r, d);
49 e8080_set_psw_szp (c, d, 0, E8080_FLG_A | E8080_FLG_N);
50 e8080_set_clk (c, 2, 12);
51}
52
53/* OP ED 41: OUT (C), r */
54static void op_ed_41 (e8080_t *c)
55{
56 unsigned r;
57
58 r = (c->inst[1] >> 3) & 7;
59 e8080_set_port8 (c, e8080_get_bc (c), e8080_get_reg8 (c, r));
60 e8080_set_clk (c, 2, 12);
61}
62
63/* OP ED 42: SBC HL, BC */
64static void op_ed_42 (e8080_t *c)
65{
66 unsigned long d, s1, s2;
67
68 s1 = e8080_get_hl (c);
69 s2 = e8080_get_bc (c);
70 d = s1 - s2 - e8080_get_cf (c);
71 e8080_set_hl (c, d);
72 z80_set_psw_sub16_2 (c, d, s1, s2);
73 e8080_set_clk (c, 2, 15);
74}
75
76/* OP ED 43: LD (nnnn), BC */
77static void op_ed_43 (e8080_t *c)
78{
79 unsigned short adr;
80
81 e8080_get_inst23 (c);
82 adr = e8080_uint16 (c->inst[2], c->inst[3]);
83 e8080_set_mem16 (c, adr, e8080_get_bc (c));
84 e8080_set_clk (c, 4, 20);
85}
86
87/* OP ED 44: NEG */
88static void op_ed_44 (e8080_t *c)
89{
90 unsigned d, s;
91
92 s = e8080_get_a (c);
93 d = 0 - s;
94 e8080_set_a (c, d);
95 z80_set_psw_sub (c, d, 0, s);
96 e8080_set_clk (c, 2, 8);
97}
98
99/* OP ED 45: RETN */
100static void op_ed_45 (e8080_t *c)
101{
102 e8080_set_iff1 (c, e8080_get_iff2 (c));
103 e8080_set_pc (c, e8080_get_mem16 (c, e8080_get_sp (c)));
104 e8080_set_sp (c, e8080_get_sp (c) + 2);
105 e8080_set_clk (c, 0, 14);
106}
107
108/* OP ED 46: IM 0 */
109static void op_ed_46 (e8080_t *c)
110{
111 c->im = 0;
112
113 e8080_set_clk (c, 2, 8);
114}
115
116/* OP ED 47: LD I, A */
117static void op_ed_47 (e8080_t *c)
118{
119 e8080_set_i (c, e8080_get_a (c));
120 e8080_set_clk (c, 2, 9);
121}
122
123/* OP ED 4A: ADC HL, BC */
124static void op_ed_4a (e8080_t *c)
125{
126 unsigned long d, s1, s2;
127
128 s1 = e8080_get_hl (c);
129 s2 = e8080_get_bc (c);
130 d = s1 + s2 + e8080_get_cf (c);
131 e8080_set_hl (c, d);
132 z80_set_psw_add16_2 (c, d, s1, s2);
133 e8080_set_clk (c, 2, 15);
134}
135
136/* OP ED 4B: LD BC, (nnnn) */
137static void op_ed_4b (e8080_t *c)
138{
139 unsigned short adr;
140
141 e8080_get_inst23 (c);
142 adr = e8080_uint16 (c->inst[2], c->inst[3]);
143 e8080_set_bc (c, e8080_get_mem16 (c, adr));
144 e8080_set_clk (c, 4, 20);
145}
146
147/* OP ED 4D: RETI */
148static void op_ed_4d (e8080_t *c)
149{
150 e8080_set_pc (c, e8080_get_mem16 (c, e8080_get_sp (c)));
151 e8080_set_sp (c, e8080_get_sp (c) + 2);
152 e8080_set_clk (c, 0, 14);
153}
154
155/* OP ED 4F: R, A */
156static void op_ed_4f (e8080_t *c)
157{
158 e8080_set_r (c, e8080_get_a (c));
159 e8080_set_clk (c, 2, 9);
160}
161
162/* OP ED 52: SBC HL, DE */
163static void op_ed_52 (e8080_t *c)
164{
165 unsigned long d, s1, s2;
166
167 s1 = e8080_get_hl (c);
168 s2 = e8080_get_de (c);
169 d = s1 - s2 - e8080_get_cf (c);
170 e8080_set_hl (c, d);
171 z80_set_psw_sub16_2 (c, d, s1, s2);
172 e8080_set_clk (c, 2, 15);
173}
174
175/* OP ED 53: LD (nnnn), DE */
176static void op_ed_53 (e8080_t *c)
177{
178 unsigned short adr;
179
180 e8080_get_inst23 (c);
181 adr = e8080_uint16 (c->inst[2], c->inst[3]);
182 e8080_set_mem16 (c, adr, e8080_get_de (c));
183 e8080_set_clk (c, 4, 20);
184}
185
186/* OP ED 56: IM 1 */
187static void op_ed_56 (e8080_t *c)
188{
189 c->im = 1;
190
191 e8080_set_clk (c, 2, 8);
192}
193
194/* OP ED 57: LD A, I */
195static void op_ed_57 (e8080_t *c)
196{
197 unsigned char d;
198
199 d = e8080_get_i (c);
200 e8080_set_a (c, d);
201 e8080_set_psw_szp (c, d, 0, E8080_FLG_A | E8080_FLG_N);
202 e8080_set_pf (c, c->iff2);
203 e8080_set_clk (c, 2, 9);
204}
205
206/* OP ED 5A: ADC HL, DE */
207static void op_ed_5a (e8080_t *c)
208{
209 unsigned long d, s1, s2;
210
211 s1 = e8080_get_hl (c);
212 s2 = e8080_get_de (c);
213 d = s1 + s2 + e8080_get_cf (c);
214 e8080_set_hl (c, d);
215 z80_set_psw_add16_2 (c, d, s1, s2);
216 e8080_set_clk (c, 2, 15);
217}
218
219/* OP ED 5B: LD DE, (nnnn) */
220static void op_ed_5b (e8080_t *c)
221{
222 unsigned short adr;
223
224 e8080_get_inst23 (c);
225 adr = e8080_uint16 (c->inst[2], c->inst[3]);
226 e8080_set_de (c, e8080_get_mem16 (c, adr));
227 e8080_set_clk (c, 4, 20);
228}
229
230/* OP ED 5E: IM 2 */
231static void op_ed_5e (e8080_t *c)
232{
233 c->im = 2;
234
235 e8080_set_clk (c, 2, 8);
236}
237
238/* OP ED 5F: LD A, R */
239static void op_ed_5f (e8080_t *c)
240{
241 unsigned char d;
242
243 d = e8080_get_r (c);
244 e8080_set_a (c, d);
245 e8080_set_psw_szp (c, d, 0, E8080_FLG_A | E8080_FLG_N);
246 e8080_set_pf (c, c->iff2);
247 e8080_set_clk (c, 2, 9);
248}
249
250/* OP ED 62: SBC HL, HL */
251static void op_ed_62 (e8080_t *c)
252{
253 unsigned long d, s;
254
255 s = e8080_get_hl (c);
256 d = s - s - e8080_get_cf (c);
257 e8080_set_hl (c, d);
258 z80_set_psw_sub16_2 (c, d, s, s);
259 e8080_set_clk (c, 2, 15);
260}
261
262/* OP ED 63: LD (nnnn), HL */
263static void op_ed_63 (e8080_t *c)
264{
265 unsigned short adr;
266
267 e8080_get_inst23 (c);
268 adr = e8080_uint16 (c->inst[2], c->inst[3]);
269 e8080_set_mem16 (c, adr, e8080_get_hl (c));
270 e8080_set_clk (c, 4, 20);
271}
272
273/* OP ED 67: RRD */
274static void op_ed_67 (e8080_t *c)
275{
276 unsigned char s, d, a;
277
278 s = e8080_get_mem8 (c, e8080_get_hl (c));
279 a = e8080_get_a (c);
280
281 d = (s >> 4) | (a << 4);
282 a = (a & 0xf0) | (s & 0x0f);
283
284 e8080_set_a (c, a);
285 e8080_set_mem8 (c, e8080_get_hl (c), d);
286 e8080_set_psw_szp (c, a, 0, E8080_FLG_A | E8080_FLG_N);
287 e8080_set_clk (c, 2, 18);
288}
289
290/* OP ED 6A: ADC HL, HL */
291static void op_ed_6a (e8080_t *c)
292{
293 unsigned long d, s;
294
295 s = e8080_get_hl (c);
296 d = s + s + e8080_get_cf (c);
297 e8080_set_hl (c, d);
298 z80_set_psw_add16_2 (c, d, s, s);
299 e8080_set_clk (c, 2, 15);
300}
301
302/* OP ED 6B: LD HL, (nnnn) */
303static void op_ed_6b (e8080_t *c)
304{
305 unsigned short adr;
306
307 e8080_get_inst23 (c);
308 adr = e8080_uint16 (c->inst[2], c->inst[3]);
309 e8080_set_hl (c, e8080_get_mem16 (c, adr));
310 e8080_set_clk (c, 4, 20);
311}
312
313/* OP ED 6F: RLD */
314static void op_ed_6f (e8080_t *c)
315{
316 unsigned char s, d, a;
317
318 s = e8080_get_mem8 (c, e8080_get_hl (c));
319 a = e8080_get_a (c);
320
321 d = (s << 4) | (a & 0x0f);
322 a = (a & 0xf0) | (s >> 4);
323
324 e8080_set_a (c, a);
325 e8080_set_mem8 (c, e8080_get_hl (c), d);
326 e8080_set_psw_szp (c, a, 0, E8080_FLG_A | E8080_FLG_N);
327 e8080_set_clk (c, 2, 18);
328}
329
330/* OP ED 70: IN (C) */
331static void op_ed_70 (e8080_t *c)
332{
333 unsigned char d;
334
335 d = e8080_get_port8 (c, e8080_get_bc (c));
336 e8080_set_psw_szp (c, d, 0, E8080_FLG_A | E8080_FLG_N);
337 e8080_set_clk (c, 2, 12);
338}
339
340/* OP ED 71: OUT (C), 0 */
341static void op_ed_71 (e8080_t *c)
342{
343 e8080_set_port8 (c, e8080_get_bc (c), 0);
344 e8080_set_clk (c, 2, 12);
345}
346
347/* OP ED 72: SBC HL, SP */
348static void op_ed_72 (e8080_t *c)
349{
350 unsigned long d, s1, s2;
351
352 s1 = e8080_get_hl (c);
353 s2 = e8080_get_sp (c);
354 d = s1 - s2 - e8080_get_cf (c);
355 e8080_set_hl (c, d);
356 z80_set_psw_sub16_2 (c, d, s1, s2);
357 e8080_set_clk (c, 2, 15);
358}
359
360/* OP ED 73: LD (nnnn), SP */
361static void op_ed_73 (e8080_t *c)
362{
363 unsigned short adr;
364
365 e8080_get_inst23 (c);
366 adr = e8080_uint16 (c->inst[2], c->inst[3]);
367 e8080_set_mem16 (c, adr, e8080_get_sp (c));
368 e8080_set_clk (c, 4, 20);
369}
370
371/* OP ED 7A: ADC HL, SP */
372static void op_ed_7a (e8080_t *c)
373{
374 unsigned long d, s1, s2;
375
376 s1 = e8080_get_hl (c);
377 s2 = e8080_get_sp (c);
378 d = s1 + s2 + e8080_get_cf (c);
379 e8080_set_hl (c, d);
380 z80_set_psw_add16_2 (c, d, s1, s2);
381 e8080_set_clk (c, 2, 15);
382}
383
384/* OP ED 7B: LD SP, (nnnn) */
385static void op_ed_7b (e8080_t *c)
386{
387 unsigned short adr;
388
389 e8080_get_inst23 (c);
390 adr = e8080_uint16 (c->inst[2], c->inst[3]);
391 e8080_set_sp (c, e8080_get_mem16 (c, adr));
392 e8080_set_clk (c, 4, 20);
393}
394
395/* OP ED A0: LDI */
396static void op_ed_a0 (e8080_t *c)
397{
398 unsigned char s;
399 unsigned short n;
400
401 n = (e8080_get_bc (c) - 1) & 0xffff;
402 s = e8080_get_mem8 (c, e8080_get_hl (c));
403 e8080_set_mem8 (c, e8080_get_de (c), s);
404 e8080_set_hl (c, e8080_get_hl (c) + 1);
405 e8080_set_de (c, e8080_get_de (c) + 1);
406 e8080_set_bc (c, n);
407 e8080_set_flag (c, E8080_FLG_A | E8080_FLG_P | E8080_FLG_N, 0);
408 e8080_set_pf (c, n != 0);
409 e8080_set_clk (c, 2, 16);
410}
411
412/* OP ED A1: CPI */
413static void op_ed_a1 (e8080_t *c)
414{
415 unsigned short n;
416 unsigned char d, s1, s2;
417
418 n = (e8080_get_bc (c) - 1) & 0xffff;
419 s1 = e8080_get_a (c);
420 s2 = e8080_get_mem8 (c, e8080_get_hl (c));
421 d = s1 - s2;
422 e8080_set_hl (c, e8080_get_hl (c) + 1);
423 e8080_set_bc (c, n);
424 e8080_set_psw_szp (c, d, E8080_FLG_N, 0);
425 e8080_set_pf (c, n != 0);
426 e8080_set_af (c, (d ^ s1 ^ s2) & 0x10);
427 e8080_set_clk (c, 2, 16);
428}
429
430/* OP ED A2: INI */
431static void op_ed_a2 (e8080_t *c)
432{
433 unsigned char s, n;
434
435 n = (e8080_get_b (c) - 1) & 0xff;
436 s = e8080_get_port8 (c, e8080_get_bc (c));
437 e8080_set_mem8 (c, e8080_get_hl (c), s);
438 e8080_set_hl (c, e8080_get_hl (c) + 1);
439 e8080_set_b (c, n);
440 e8080_set_zf (c, n == 0);
441 e8080_set_nf (c, 1);
442 e8080_set_clk (c, 2, 16);
443}
444
445/* OP ED A3: OUTI */
446static void op_ed_a3 (e8080_t *c)
447{
448 unsigned char s, n;
449
450 n = (e8080_get_b (c) - 1) & 0xff;
451 s = e8080_get_mem8 (c, e8080_get_hl (c));
452 e8080_set_port8 (c, e8080_get_bc (c), s);
453 e8080_set_hl (c, e8080_get_hl (c) + 1);
454 e8080_set_b (c, n);
455 e8080_set_zf (c, n == 0);
456 e8080_set_nf (c, 1);
457 e8080_set_clk (c, 2, 16);
458}
459
460/* OP ED A8: LDD */
461static void op_ed_a8 (e8080_t *c)
462{
463 unsigned char s;
464 unsigned short n;
465
466 n = (e8080_get_bc (c) - 1) & 0xffff;
467 s = e8080_get_mem8 (c, e8080_get_hl (c));
468 e8080_set_mem8 (c, e8080_get_de (c), s);
469 e8080_set_hl (c, e8080_get_hl (c) - 1);
470 e8080_set_de (c, e8080_get_de (c) - 1);
471 e8080_set_bc (c, n);
472 e8080_set_flag (c, E8080_FLG_A | E8080_FLG_P | E8080_FLG_N, 0);
473 e8080_set_pf (c, n != 0);
474 e8080_set_clk (c, 2, 16);
475}
476
477/* OP ED A9: CPD */
478static void op_ed_a9 (e8080_t *c)
479{
480 unsigned short n;
481 unsigned char d, s1, s2;
482
483 n = (e8080_get_bc (c) - 1) & 0xffff;
484 s1 = e8080_get_a (c);
485 s2 = e8080_get_mem8 (c, e8080_get_hl (c));
486 d = s1 - s2;
487 e8080_set_hl (c, e8080_get_hl (c) - 1);
488 e8080_set_bc (c, n);
489 e8080_set_psw_szp (c, d, E8080_FLG_N, 0);
490 e8080_set_pf (c, n != 0);
491 e8080_set_af (c, (d ^ s1 ^ s2) & 0x10);
492 e8080_set_clk (c, 2, 16);
493}
494
495/* OP ED AA: IND */
496static void op_ed_aa (e8080_t *c)
497{
498 unsigned char s, n;
499
500 n = (e8080_get_b (c) - 1) & 0xff;
501 s = e8080_get_port8 (c, e8080_get_bc (c));
502 e8080_set_mem8 (c, e8080_get_hl (c), s);
503 e8080_set_hl (c, e8080_get_hl (c) - 1);
504 e8080_set_b (c, n);
505 e8080_set_zf (c, n == 0);
506 e8080_set_nf (c, 1);
507 e8080_set_clk (c, 2, 16);
508}
509
510/* OP ED AB: OUTD */
511static void op_ed_ab (e8080_t *c)
512{
513 unsigned char s, n;
514
515 n = (e8080_get_b (c) - 1) & 0xff;
516 s = e8080_get_mem8 (c, e8080_get_hl (c));
517 e8080_set_port8 (c, e8080_get_bc (c), s);
518 e8080_set_hl (c, e8080_get_hl (c) - 1);
519 e8080_set_b (c, n);
520 e8080_set_zf (c, n == 0);
521 e8080_set_nf (c, 1);
522 e8080_set_clk (c, 2, 16);
523}
524
525/* OP ED B0: LDIR */
526static void op_ed_b0 (e8080_t *c)
527{
528 unsigned char s;
529 unsigned short n;
530
531 n = (e8080_get_bc (c) - 1) & 0xffff;
532 s = e8080_get_mem8 (c, e8080_get_hl (c));
533 e8080_set_mem8 (c, e8080_get_de (c), s);
534 e8080_set_hl (c, e8080_get_hl (c) + 1);
535 e8080_set_de (c, e8080_get_de (c) + 1);
536 e8080_set_bc (c, n);
537 e8080_set_flag (c, E8080_FLG_A | E8080_FLG_P | E8080_FLG_N, 0);
538
539 if (n == 0) {
540 e8080_set_clk (c, 2, 16);
541 }
542 else {
543 e8080_set_clk (c, 0, 21);
544 }
545}
546
547/* OP ED B1: CPIR */
548static void op_ed_b1 (e8080_t *c)
549{
550 unsigned short n;
551 unsigned char d, s1, s2;
552
553 n = (e8080_get_bc (c) - 1) & 0xffff;
554 s1 = e8080_get_a (c);
555 s2 = e8080_get_mem8 (c, e8080_get_hl (c));
556 d = s1 - s2;
557 e8080_set_hl (c, e8080_get_hl (c) + 1);
558 e8080_set_bc (c, n);
559 e8080_set_psw_szp (c, d, E8080_FLG_N, 0);
560 e8080_set_pf (c, n != 0);
561 e8080_set_af (c, (d ^ s1 ^ s2) & 0x10);
562
563 if ((n == 0) || (s1 == s2)) {
564 e8080_set_clk (c, 2, 16);
565 }
566 else {
567 e8080_set_clk (c, 0, 21);
568 }
569}
570
571/* OP ED B2: INIR */
572static void op_ed_b2 (e8080_t *c)
573{
574 unsigned char s, n;
575
576 n = (e8080_get_b (c) - 1) & 0xff;
577 s = e8080_get_port8 (c, e8080_get_bc (c));
578 e8080_set_mem8 (c, e8080_get_hl (c), s);
579 e8080_set_hl (c, e8080_get_hl (c) + 1);
580 e8080_set_b (c, n);
581 e8080_set_zf (c, 1);
582 e8080_set_nf (c, 1);
583
584 if (n == 0) {
585 e8080_set_clk (c, 2, 16);
586 }
587 else {
588 e8080_set_clk (c, 0, 21);
589 }
590}
591
592/* OP ED B3: OTIR */
593static void op_ed_b3 (e8080_t *c)
594{
595 unsigned char s, n;
596
597 n = (e8080_get_b (c) - 1) & 0xff;
598 s = e8080_get_mem8 (c, e8080_get_hl (c));
599 e8080_set_port8 (c, e8080_get_bc (c), s);
600 e8080_set_hl (c, e8080_get_hl (c) + 1);
601 e8080_set_b (c, n);
602 e8080_set_zf (c, 1);
603 e8080_set_nf (c, 1);
604
605 if (n == 0) {
606 e8080_set_clk (c, 2, 16);
607 }
608 else {
609 e8080_set_clk (c, 0, 21);
610 }
611}
612
613/* OP ED B8: LDDR */
614static void op_ed_b8 (e8080_t *c)
615{
616 unsigned char s;
617 unsigned short n;
618
619 n = (e8080_get_bc (c) - 1) & 0xffff;
620 s = e8080_get_mem8 (c, e8080_get_hl (c));
621 e8080_set_mem8 (c, e8080_get_de (c), s);
622 e8080_set_hl (c, e8080_get_hl (c) - 1);
623 e8080_set_de (c, e8080_get_de (c) - 1);
624 e8080_set_bc (c, n);
625 e8080_set_flag (c, E8080_FLG_A | E8080_FLG_P | E8080_FLG_N, 0);
626
627 if (n == 0) {
628 e8080_set_clk (c, 2, 16);
629 }
630 else {
631 e8080_set_clk (c, 0, 21);
632 }
633}
634
635/* OP ED B9: CPDR */
636static void op_ed_b9 (e8080_t *c)
637{
638 unsigned short n;
639 unsigned char d, s1, s2;
640
641 n = (e8080_get_bc (c) - 1) & 0xffff;
642 s1 = e8080_get_a (c);
643 s2 = e8080_get_mem8 (c, e8080_get_hl (c));
644 d = s1 - s2;
645 e8080_set_hl (c, e8080_get_hl (c) - 1);
646 e8080_set_bc (c, n);
647 e8080_set_psw_szp (c, d, E8080_FLG_N, 0);
648 e8080_set_pf (c, n != 0);
649 e8080_set_af (c, (d ^ s1 ^ s2) & 0x10);
650
651 if ((n == 0) || (s1 == s2)) {
652 e8080_set_clk (c, 2, 16);
653 }
654 else {
655 e8080_set_clk (c, 0, 21);
656 }
657}
658
659/* OP ED BA: INDR */
660static void op_ed_ba (e8080_t *c)
661{
662 unsigned char s, n;
663
664 n = (e8080_get_b (c) - 1) & 0xff;
665 s = e8080_get_port8 (c, e8080_get_bc (c));
666 e8080_set_mem8 (c, e8080_get_hl (c), s);
667 e8080_set_hl (c, e8080_get_hl (c) - 1);
668 e8080_set_b (c, n);
669 e8080_set_zf (c, 1);
670 e8080_set_nf (c, 1);
671
672 if (n == 0) {
673 e8080_set_clk (c, 2, 16);
674 }
675 else {
676 e8080_set_clk (c, 0, 21);
677 }
678}
679
680/* OP ED BB: OTDR */
681static void op_ed_bb (e8080_t *c)
682{
683 unsigned char s, n;
684
685 n = (e8080_get_b (c) - 1) & 0xff;
686 s = e8080_get_mem8 (c, e8080_get_hl (c));
687 e8080_set_port8 (c, e8080_get_bc (c), s);
688 e8080_set_hl (c, e8080_get_hl (c) - 1);
689 e8080_set_b (c, n);
690 e8080_set_zf (c, 1);
691 e8080_set_nf (c, 1);
692
693 if (n == 0) {
694 e8080_set_clk (c, 2, 16);
695 }
696 else {
697 e8080_set_clk (c, 0, 21);
698 }
699}
700
701static e8080_opcode_f opcodes_ed[256] = {
702 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* 00 */
703 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud,
704 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* 10 */
705 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud,
706 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* 20 */
707 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud,
708 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* 30 */
709 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud,
710 op_ed_40, op_ed_41, op_ed_42, op_ed_43, op_ed_44, op_ed_45, op_ed_46, op_ed_47, /* 40 */
711 op_ed_40, op_ed_41, op_ed_4a, op_ed_4b, op_ed_ud, op_ed_4d, op_ed_ud, op_ed_4f,
712 op_ed_40, op_ed_41, op_ed_52, op_ed_53, op_ed_ud, op_ed_45, op_ed_56, op_ed_57, /* 50 */
713 op_ed_40, op_ed_41, op_ed_5a, op_ed_5b, op_ed_ud, op_ed_45, op_ed_5e, op_ed_5f,
714 op_ed_40, op_ed_41, op_ed_62, op_ed_63, op_ed_ud, op_ed_45, op_ed_ud, op_ed_67, /* 60 */
715 op_ed_40, op_ed_41, op_ed_6a, op_ed_6b, op_ed_ud, op_ed_45, op_ed_ud, op_ed_6f,
716 op_ed_70, op_ed_71, op_ed_72, op_ed_73, op_ed_ud, op_ed_45, op_ed_ud, op_ed_ud, /* 70 */
717 op_ed_40, op_ed_41, op_ed_7a, op_ed_7b, op_ed_ud, op_ed_45, op_ed_ud, op_ed_ud,
718 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* 80 */
719 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud,
720 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* 90 */
721 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud,
722 op_ed_a0, op_ed_a1, op_ed_a2, op_ed_a3, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* A0 */
723 op_ed_a8, op_ed_a9, op_ed_aa, op_ed_ab, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud,
724 op_ed_b0, op_ed_b1, op_ed_b2, op_ed_b3, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* B0 */
725 op_ed_b8, op_ed_b9, op_ed_ba, op_ed_bb, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud,
726 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* C0 */
727 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud,
728 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* D0 */
729 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud,
730 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* E0 */
731 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud,
732 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, /* F0 */
733 op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud, op_ed_ud,
734};
735
736void z80_op_ed (e8080_t *c)
737{
738 e8080_get_inst1 (c);
739 e8080_inc_r (c);
740 opcodes_ed[c->inst[1]] (c);
741}