Xemu [doxygen]  hyppo 0a42be3a057156924bc1b626a687bd6e27349c45 @ Sat 19 Mar 02:15:11 CET 2022
opcodes_ed.c
Go to the documentation of this file.
1 // 0xED opcodes
2 
3 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
4 /*ZX Spectrum Next: SWAPNIB*/
5 static void op_ED_0x23_EX(void)
6 {
7  // TODO: implement this ZX Spectrum Next opcode
8 }
9 #else
10 # define op_ED_0x23_EX NULL
11 #endif
12 
13 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
14 /*ZX Spectrum Next: MIRROR*/
15 static void op_ED_0x24_EX(void)
16 {
17  // TODO: implement this ZX Spectrum Next opcode
18  7 6 5 4 3 2 1 0
19  // Mirrors the bit pattern of Accumulator. Does not effect flags. 8 T-states in total
20  a = ((a >> 7) & 0x01) | ((a >> 5) & 0x02) | ((a >> 3) & 0x04) | ((a >> 1) & 0x08) | ((a << 1) & 0x10) | ((a << 3) & 0x20) | ((a << 5) & 0x40) | ((a << 7) & 0x80);
21  T_WAIT_UNTIL(4); // 4 T-states after the 4 spent for ED prefix.
22 }
23 #else
24 # define op_ED_0x24_EX NULL
25 #endif
26 
27 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
28 /*ZX Spectrum Next: TEST $nn*/
29 static void op_ED_0x27_EX(void)
30 {
31  // TODO: implement this ZX Spectrum Next opcode
32 }
33 #else
34 # define op_ED_0x27_EX NULL
35 #endif
36 
37 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
38 /*ZX Spectrum Next: BSLA DE,B*/
39 static void op_ED_0x28_EX(void)
40 {
41  // TODO: implement this ZX Spectrum Next opcode
42 }
43 #else
44 # define op_ED_0x28_EX NULL
45 #endif
46 
47 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
48 /*ZX Spectrum Next: BSRA DE,B*/
49 static void op_ED_0x29_EX(void)
50 {
51  // TODO: implement this ZX Spectrum Next opcode
52 }
53 #else
54 # define op_ED_0x29_EX NULL
55 #endif
56 
57 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
58 /*ZX Spectrum Next: BSRL DE,B*/
59 static void op_ED_0x2a_EX(void)
60 {
61  // TODO: implement this ZX Spectrum Next opcode
62 }
63 #else
64 # define op_ED_0x2a_EX NULL
65 #endif
66 
67 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
68 /*ZX Spectrum Next: BSRF DE,B*/
69 static void op_ED_0x2b_EX(void)
70 {
71  // TODO: implement this ZX Spectrum Next opcode
72 }
73 #else
74 # define op_ED_0x2b_EX NULL
75 #endif
76 
77 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
78 /*ZX Spectrum Next: BRLC DE,B*/
79 static void op_ED_0x2c_EX(void)
80 {
81  // TODO: implement this ZX Spectrum Next opcode
82 }
83 #else
84 # define op_ED_0x2c_EX NULL
85 #endif
86 
87 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
88 /*ZX Spectrum Next: MUL D,E*/
89 static void op_ED_0x30_EX(void)
90 {
91  // TODO: implement this ZX Spectrum Next opcode
92 }
93 #else
94 # define op_ED_0x30_EX NULL
95 #endif
96 
97 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
98 /*ZX Spectrum Next: ADD HL,A*/
99 static void op_ED_0x31_EX(void)
100 {
101  // TODO: implement this ZX Spectrum Next opcode
102 }
103 #else
104 # define op_ED_0x31_EX NULL
105 #endif
106 
107 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
108 /*ZX Spectrum Next: ADD DE,A*/
109 static void op_ED_0x32_EX(void)
110 {
111  // TODO: implement this ZX Spectrum Next opcode
112 }
113 #else
114 # define op_ED_0x32_EX NULL
115 #endif
116 
117 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
118 /*ZX Spectrum Next: ADD BC,A*/
119 static void op_ED_0x33_EX(void)
120 {
121  // TODO: implement this ZX Spectrum Next opcode
122 }
123 #else
124 # define op_ED_0x33_EX NULL
125 #endif
126 
127 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
128 /*ZX Spectrum Next: ADD HL,$nnnn*/
129 static void op_ED_0x34_EX(void)
130 {
131  // TODO: implement this ZX Spectrum Next opcode
132 }
133 #else
134 # define op_ED_0x34_EX NULL
135 #endif
136 
137 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
138 /*ZX Spectrum Next: ADD DE,$nnnn*/
139 static void op_ED_0x35_EX(void)
140 {
141  // TODO: implement this ZX Spectrum Next opcode
142 }
143 #else
144 # define op_ED_0x35_EX NULL
145 #endif
146 
147 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
148 /*ZX Spectrum Next: ADD BC,$nnnn*/
149 static void op_ED_0x36_EX(void)
150 {
151  // TODO: implement this ZX Spectrum Next opcode
152 }
153 #else
154 # define op_ED_0x36_EX NULL
155 #endif
156 
157 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
158 /*ZX Spectrum Next: PUSH $nnnn*/
159 static void op_ED_0x8a_EX(void)
160 {
161  // TODO: implement this ZX Spectrum Next opcode
162 }
163 #else
164 # define op_ED_0x8a_EX NULL
165 #endif
166 
167 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
168 /*ZX Spectrum Next: OUTINB*/
169 static void op_ED_0x90_EX(void)
170 {
171  // TODO: implement this ZX Spectrum Next opcode
172 }
173 #else
174 # define op_ED_0x90_EX NULL
175 #endif
176 
177 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
178 /*ZX Spectrum Next: NEXTREG $rr,$nn*/
179 static void op_ED_0x91_EX(void)
180 {
181  // TODO: implement this ZX Spectrum Next opcode
182 }
183 #else
184 # define op_ED_0x91_EX NULL
185 #endif
186 
187 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
188 /*ZX Spectrum Next: NEXTREG $rr,A*/
189 static void op_ED_0x92_EX(void)
190 {
191  // TODO: implement this ZX Spectrum Next opcode
192 }
193 #else
194 # define op_ED_0x92_EX NULL
195 #endif
196 
197 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
198 /*ZX Spectrum Next: PIXELDN*/
199 static void op_ED_0x93_EX(void)
200 {
201  // TODO: implement this ZX Spectrum Next opcode
202 }
203 #else
204 # define op_ED_0x93_EX NULL
205 #endif
206 
207 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
208 /*ZX Spectrum Next: PIXELAD*/
209 static void op_ED_0x94_EX(void)
210 {
211  // TODO: implement this ZX Spectrum Next opcode
212 }
213 #else
214 # define op_ED_0x94_EX NULL
215 #endif
216 
217 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
218 /*ZX Spectrum Next: SETAE*/
219 static void op_ED_0x95_EX(void)
220 {
221  // TODO: implement this ZX Spectrum Next opcode
222 }
223 #else
224 # define op_ED_0x95_EX NULL
225 #endif
226 
227 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
228 /*ZX Spectrum Next: JP (C)*/
229 static void op_ED_0x98_EX(void)
230 {
231  // TODO: implement this ZX Spectrum Next opcode
232 }
233 #else
234 # define op_ED_0x98_EX NULL
235 #endif
236 
237 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
238 /*ZX Spectrum Next: LDIX*/
239 static void op_ED_0xa4_EX(void)
240 {
241  // TODO: implement this ZX Spectrum Next opcode
242 }
243 #else
244 # define op_ED_0xa4_EX NULL
245 #endif
246 
247 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
248 /*ZX Spectrum Next: LDWS*/
249 static void op_ED_0xa5_EX(void)
250 {
251  // TODO: implement this ZX Spectrum Next opcode
252 }
253 #else
254 # define op_ED_0xa5_EX NULL
255 #endif
256 
257 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
258 /*ZX Spectrum Next: LDDX*/
259 static void op_ED_0xac_EX(void)
260 {
261  // TODO: implement this ZX Spectrum Next opcode
262 }
263 #else
264 # define op_ED_0xac_EX NULL
265 #endif
266 
267 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
268 /*ZX Spectrum Next: LDIRX*/
269 static void op_ED_0xb4_EX(void)
270 {
271  // TODO: implement this ZX Spectrum Next opcode
272 }
273 #else
274 # define op_ED_0xb4_EX NULL
275 #endif
276 
277 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
278 /*ZX Spectrum Next: LDPIRX*/
279 static void op_ED_0xb7_EX(void)
280 {
281  // TODO: implement this ZX Spectrum Next opcode
282 }
283 #else
284 # define op_ED_0xb7_EX NULL
285 #endif
286 
287 #if defined(Z80EX_SPECTRUM_NEXT_SUPPORT)
288 /*ZX Spectrum Next: LDDRX*/
289 static void op_ED_0xbc_EX(void)
290 {
291  // TODO: implement this ZX Spectrum Next opcode
292 }
293 #else
294 # define op_ED_0xbc_EX NULL
295 #endif
296 
297 /*IN B,(C)*/
298 static void op_ED_0x40(void)
299 {
300  IN(B,BC, /*rd*/5);
301  T_WAIT_UNTIL(8);
302  return;
303 }
304 
305 /*OUT (C),B*/
306 static void op_ED_0x41(void)
307 {
308  OUT(BC,B, /*wr*/5);
309  T_WAIT_UNTIL(8);
310  return;
311 }
312 
313 /*SBC HL,BC*/
314 static void op_ED_0x42(void)
315 {
316  SBC16(HL,BC);
317  T_WAIT_UNTIL(11);
318  return;
319 }
320 
321 /*LD (@),BC*/
322 static void op_ED_0x43(void)
323 {
324  temp_addr.b.l=READ_OP();
325  temp_addr.b.h=READ_OP();
327  WRITE_MEM(temp_addr.w,temp_word.b.l,10);
328  WRITE_MEM(temp_addr.w+1,temp_word.b.h,13);
329  T_WAIT_UNTIL(16);
330  return;
331 }
332 
333 /*NEG*/
334 static void op_ED_0x44(void)
335 {
336  NEG();
337  T_WAIT_UNTIL(4);
338  return;
339 }
340 
341 /*RETN*/
342 static void op_ED_0x45(void)
343 {
344  RETN(/*rd*/4,7);
345  T_WAIT_UNTIL(10);
346  return;
347 }
348 
349 /*IM 0*/
350 static void op_ED_0x46(void)
351 {
352  IM_(IM0);
353  T_WAIT_UNTIL(4);
354  return;
355 }
356 
357 /*LD I,A*/
358 static void op_ED_0x47(void)
359 {
360  LD(I,A);
361  T_WAIT_UNTIL(5);
362  return;
363 }
364 
365 /*IN C,(C)*/
366 static void op_ED_0x48(void)
367 {
368  IN(C,BC, /*rd*/5);
369  T_WAIT_UNTIL(8);
370  return;
371 }
372 
373 /*OUT (C),C*/
374 static void op_ED_0x49(void)
375 {
376  OUT(BC,C, /*wr*/5);
377  T_WAIT_UNTIL(8);
378  return;
379 }
380 
381 /*ADC HL,BC*/
382 static void op_ED_0x4a(void)
383 {
384  ADC16(HL,BC);
385  T_WAIT_UNTIL(11);
386  return;
387 }
388 
389 /*LD BC,(@)*/
390 static void op_ED_0x4b(void)
391 {
392  temp_addr.b.l=READ_OP();
393  temp_addr.b.h=READ_OP();
394  READ_MEM(temp_word.b.l,temp_addr.w,10);
395  READ_MEM(temp_word.b.h,temp_addr.w+1,13);
397  T_WAIT_UNTIL(16);
398  return;
399 }
400 
401 /*NEG*/
402 static void op_ED_0x4c(void)
403 {
404  NEG();
405  T_WAIT_UNTIL(4);
406  return;
407 }
408 
409 /*RETI*/
410 static void op_ED_0x4d(void)
411 {
412  RETI(/*rd*/4,7);
413  T_WAIT_UNTIL(10);
414  return;
415 }
416 
417 /*IM 0*/
418 static void op_ED_0x4e(void)
419 {
420  IM_(IM0);
421  T_WAIT_UNTIL(4);
422  return;
423 }
424 
425 /*LD R,A*/
426 static void op_ED_0x4f(void)
427 {
428  LD_R_A();
429  T_WAIT_UNTIL(5);
430  return;
431 }
432 
433 /*IN D,(C)*/
434 static void op_ED_0x50(void)
435 {
436  IN(D,BC, /*rd*/5);
437  T_WAIT_UNTIL(8);
438  return;
439 }
440 
441 /*OUT (C),D*/
442 static void op_ED_0x51(void)
443 {
444  OUT(BC,D, /*wr*/5);
445  T_WAIT_UNTIL(8);
446  return;
447 }
448 
449 /*SBC HL,DE*/
450 static void op_ED_0x52(void)
451 {
452  SBC16(HL,DE);
453  T_WAIT_UNTIL(11);
454  return;
455 }
456 
457 /*LD (@),DE*/
458 static void op_ED_0x53(void)
459 {
460  temp_addr.b.l=READ_OP();
461  temp_addr.b.h=READ_OP();
463  WRITE_MEM(temp_addr.w,temp_word.b.l,10);
464  WRITE_MEM(temp_addr.w+1,temp_word.b.h,13);
465  T_WAIT_UNTIL(16);
466  return;
467 }
468 
469 /*NEG*/
470 static void op_ED_0x54(void)
471 {
472  NEG();
473  T_WAIT_UNTIL(4);
474  return;
475 }
476 
477 /*RETN*/
478 static void op_ED_0x55(void)
479 {
480  RETN(/*rd*/4,7);
481  T_WAIT_UNTIL(10);
482  return;
483 }
484 
485 /*IM 1*/
486 static void op_ED_0x56(void)
487 {
488  IM_(IM1);
489  T_WAIT_UNTIL(4);
490  return;
491 }
492 
493 /*LD A,I*/
494 static void op_ED_0x57(void)
495 {
496  LD_A_I();
497  T_WAIT_UNTIL(5);
498  return;
499 }
500 
501 /*IN E,(C)*/
502 static void op_ED_0x58(void)
503 {
504  IN(E,BC, /*rd*/5);
505  T_WAIT_UNTIL(8);
506  return;
507 }
508 
509 /*OUT (C),E*/
510 static void op_ED_0x59(void)
511 {
512  OUT(BC,E, /*wr*/5);
513  T_WAIT_UNTIL(8);
514  return;
515 }
516 
517 /*ADC HL,DE*/
518 static void op_ED_0x5a(void)
519 {
520  ADC16(HL,DE);
521  T_WAIT_UNTIL(11);
522  return;
523 }
524 
525 /*LD DE,(@)*/
526 static void op_ED_0x5b(void)
527 {
528  temp_addr.b.l=READ_OP();
529  temp_addr.b.h=READ_OP();
530  READ_MEM(temp_word.b.l,temp_addr.w,10);
531  READ_MEM(temp_word.b.h,temp_addr.w+1,13);
533  T_WAIT_UNTIL(16);
534  return;
535 }
536 
537 /*NEG*/
538 static void op_ED_0x5c(void)
539 {
540  NEG();
541  T_WAIT_UNTIL(4);
542  return;
543 }
544 
545 /*RETI*/
546 static void op_ED_0x5d(void)
547 {
548  RETI(/*rd*/4,7);
549  T_WAIT_UNTIL(10);
550  return;
551 }
552 
553 /*IM 2*/
554 static void op_ED_0x5e(void)
555 {
556  IM_(IM2);
557  T_WAIT_UNTIL(4);
558  return;
559 }
560 
561 /*LD A,R*/
562 static void op_ED_0x5f(void)
563 {
564  LD_A_R();
565  T_WAIT_UNTIL(5);
566  return;
567 }
568 
569 /*IN H,(C)*/
570 static void op_ED_0x60(void)
571 {
572  IN(H,BC, /*rd*/5);
573  T_WAIT_UNTIL(8);
574  return;
575 }
576 
577 /*OUT (C),H*/
578 static void op_ED_0x61(void)
579 {
580  OUT(BC,H, /*wr*/5);
581  T_WAIT_UNTIL(8);
582  return;
583 }
584 
585 /*SBC HL,HL*/
586 static void op_ED_0x62(void)
587 {
588  SBC16(HL,HL);
589  T_WAIT_UNTIL(11);
590  return;
591 }
592 
593 /*LD (@),HL*/
594 static void op_ED_0x63(void)
595 {
596  temp_addr.b.l=READ_OP();
597  temp_addr.b.h=READ_OP();
599  WRITE_MEM(temp_addr.w,temp_word.b.l,10);
600  WRITE_MEM(temp_addr.w+1,temp_word.b.h,13);
601  T_WAIT_UNTIL(16);
602  return;
603 }
604 
605 /*NEG*/
606 static void op_ED_0x64(void)
607 {
608  NEG();
609  T_WAIT_UNTIL(4);
610  return;
611 }
612 
613 /*RETN*/
614 static void op_ED_0x65(void)
615 {
616  RETN(/*rd*/4,7);
617  T_WAIT_UNTIL(10);
618  return;
619 }
620 
621 /*IM 0*/
622 static void op_ED_0x66(void)
623 {
624  IM_(IM0);
625  T_WAIT_UNTIL(4);
626  return;
627 }
628 
629 /*RRD*/
630 static void op_ED_0x67(void)
631 {
632  RRD(/*rd*/4, /*wr*/11);
633  T_WAIT_UNTIL(14);
634  return;
635 }
636 
637 /*IN L,(C)*/
638 static void op_ED_0x68(void)
639 {
640  IN(L,BC, /*rd*/5);
641  T_WAIT_UNTIL(8);
642  return;
643 }
644 
645 /*OUT (C),L*/
646 static void op_ED_0x69(void)
647 {
648  OUT(BC,L, /*wr*/5);
649  T_WAIT_UNTIL(8);
650  return;
651 }
652 
653 /*ADC HL,HL*/
654 static void op_ED_0x6a(void)
655 {
656  ADC16(HL,HL);
657  T_WAIT_UNTIL(11);
658  return;
659 }
660 
661 /*LD HL,(@)*/
662 static void op_ED_0x6b(void)
663 {
664  temp_addr.b.l=READ_OP();
665  temp_addr.b.h=READ_OP();
666  READ_MEM(temp_word.b.l,temp_addr.w,10);
667  READ_MEM(temp_word.b.h,temp_addr.w+1,13);
669  T_WAIT_UNTIL(16);
670  return;
671 }
672 
673 /*NEG*/
674 static void op_ED_0x6c(void)
675 {
676  NEG();
677  T_WAIT_UNTIL(4);
678  return;
679 }
680 
681 /*RETI*/
682 static void op_ED_0x6d(void)
683 {
684  RETI(/*rd*/4,7);
685  T_WAIT_UNTIL(10);
686  return;
687 }
688 
689 /*IM 0*/
690 static void op_ED_0x6e(void)
691 {
692  IM_(IM0);
693  T_WAIT_UNTIL(4);
694  return;
695 }
696 
697 /*RLD*/
698 static void op_ED_0x6f(void)
699 {
700  RLD(/*rd*/4, /*wr*/11);
701  T_WAIT_UNTIL(14);
702  return;
703 }
704 
705 /*IN_F (C)*/
706 static void op_ED_0x70(void)
707 {
708  IN_F(BC, /*rd*/5);
709  T_WAIT_UNTIL(8);
710  return;
711 }
712 
713 /*OUT (C),0*/
714 static void op_ED_0x71(void)
715 {
716  OUT(BC,z80ex.nmos ? 0: 0xFF, /*wr*/5); /* LGB: CMOS CPU uses 0xFF here! I guess ... */
717  T_WAIT_UNTIL(8);
718  return;
719 }
720 
721 /*SBC HL,SP*/
722 static void op_ED_0x72(void)
723 {
724  SBC16(HL,SP);
725  T_WAIT_UNTIL(11);
726  return;
727 }
728 
729 /*LD (@),SP*/
730 static void op_ED_0x73(void)
731 {
732  temp_addr.b.l=READ_OP();
733  temp_addr.b.h=READ_OP();
735  WRITE_MEM(temp_addr.w,temp_word.b.l,10);
736  WRITE_MEM(temp_addr.w+1,temp_word.b.h,13);
737  T_WAIT_UNTIL(16);
738  return;
739 }
740 
741 /*NEG*/
742 static void op_ED_0x74(void)
743 {
744  NEG();
745  T_WAIT_UNTIL(4);
746  return;
747 }
748 
749 /*RETN*/
750 static void op_ED_0x75(void)
751 {
752  RETN(/*rd*/4,7);
753  T_WAIT_UNTIL(10);
754  return;
755 }
756 
757 /*IM 1*/
758 static void op_ED_0x76(void)
759 {
760  IM_(IM1);
761  T_WAIT_UNTIL(4);
762  return;
763 }
764 
765 /*IN A,(C)*/
766 static void op_ED_0x78(void)
767 {
768  IN(A,BC, /*rd*/5);
769  T_WAIT_UNTIL(8);
770  return;
771 }
772 
773 /*OUT (C),A*/
774 static void op_ED_0x79(void)
775 {
776  OUT(BC,A, /*wr*/5);
777  T_WAIT_UNTIL(8);
778  return;
779 }
780 
781 /*ADC HL,SP*/
782 static void op_ED_0x7a(void)
783 {
784  ADC16(HL,SP);
785  T_WAIT_UNTIL(11);
786  return;
787 }
788 
789 /*LD SP,(@)*/
790 static void op_ED_0x7b(void)
791 {
792  temp_addr.b.l=READ_OP();
793  temp_addr.b.h=READ_OP();
794  READ_MEM(temp_word.b.l,temp_addr.w,10);
795  READ_MEM(temp_word.b.h,temp_addr.w+1,13);
797  T_WAIT_UNTIL(16);
798  return;
799 }
800 
801 /*NEG*/
802 static void op_ED_0x7c(void)
803 {
804  NEG();
805  T_WAIT_UNTIL(4);
806  return;
807 }
808 
809 /*RETI*/
810 static void op_ED_0x7d(void)
811 {
812  RETI(/*rd*/4,7);
813  T_WAIT_UNTIL(10);
814  return;
815 }
816 
817 /*IM 2*/
818 static void op_ED_0x7e(void)
819 {
820  IM_(IM2);
821  T_WAIT_UNTIL(4);
822  return;
823 }
824 
825 /*LDI*/
826 static void op_ED_0xa0(void)
827 {
828  LDI(/*rd*/4, /*wr*/7);
829  T_WAIT_UNTIL(12);
830  return;
831 }
832 
833 /*CPI*/
834 static void op_ED_0xa1(void)
835 {
836  CPI(/*rd*/4);
837  T_WAIT_UNTIL(12);
838  return;
839 }
840 
841 /*INI*/
842 static void op_ED_0xa2(void)
843 {
844  INI(/*rd*/6, /*wr*/9);
845  T_WAIT_UNTIL(12);
846  return;
847 }
848 
849 /*OUTI*/
850 static void op_ED_0xa3(void)
851 {
852  OUTI(/*rd*/5, /*wr*/9);
853  T_WAIT_UNTIL(12);
854  return;
855 }
856 
857 /*LDD*/
858 static void op_ED_0xa8(void)
859 {
860  LDD(/*rd*/4, /*wr*/7);
861  T_WAIT_UNTIL(12);
862  return;
863 }
864 
865 /*CPD*/
866 static void op_ED_0xa9(void)
867 {
868  CPD(/*rd*/4);
869  T_WAIT_UNTIL(12);
870  return;
871 }
872 
873 /*IND*/
874 static void op_ED_0xaa(void)
875 {
876  IND(/*rd*/6, /*wr*/9);
877  T_WAIT_UNTIL(12);
878  return;
879 }
880 
881 /*OUTD*/
882 static void op_ED_0xab(void)
883 {
884  OUTD(/*rd*/5, /*wr*/9);
885  T_WAIT_UNTIL(12);
886  return;
887 }
888 
889 /*LDIR*/
890 static void op_ED_0xb0(void)
891 {
892  LDIR(/*t:*/ /*t1*/12,/*t2*/17, /*rd*/4, /*wr*/7);
893  return;
894 }
895 
896 /*CPIR*/
897 static void op_ED_0xb1(void)
898 {
899  CPIR(/*t:*/ /*t1*/12,/*t2*/17, /*rd*/4);
900  return;
901 }
902 
903 /*INIR*/
904 static void op_ED_0xb2(void)
905 {
906  INIR(/*t:*/ /*t1*/12,/*t2*/17, /*rd*/6, /*wr*/9);
907  return;
908 }
909 
910 /*OTIR*/
911 static void op_ED_0xb3(void)
912 {
913  OTIR(/*t:*/ /*t1*/12,/*t2*/17, /*rd*/5, /*wr*/9);
914  return;
915 }
916 
917 /*LDDR*/
918 static void op_ED_0xb8(void)
919 {
920  LDDR(/*t:*/ /*t1*/12,/*t2*/17, /*rd*/4, /*wr*/7);
921  return;
922 }
923 
924 /*CPDR*/
925 static void op_ED_0xb9(void)
926 {
927  CPDR(/*t:*/ /*t1*/12,/*t2*/17, /*rd*/4);
928  return;
929 }
930 
931 /*INDR*/
932 static void op_ED_0xba(void)
933 {
934  INDR(/*t:*/ /*t1*/12,/*t2*/17, /*rd*/6, /*wr*/9);
935  return;
936 }
937 
938 /*OTDR*/
939 static void op_ED_0xbb(void)
940 {
941  OTDR(/*t:*/ /*t1*/12,/*t2*/17, /*rd*/5, /*wr*/9);
942  return;
943 }
944 
945 
946 
947 /* _EX stuffs are for extended instruction set of Z80+ CPUs. One must be sure, that *
948  * the unused ones in the current emulated Z80 part are #define to NULL! - LGB */
949 static const z80ex_opcode_fn opcodes_ed[0x100] = {
950  NULL , NULL , NULL , NULL , // 00-03
951  NULL , NULL , NULL , NULL , // 04-07
952  NULL , NULL , NULL , NULL , // 08-0B
953  NULL , NULL , NULL , NULL , // 0C-0F
954  NULL , NULL , NULL , NULL , // 10-13
955  NULL , NULL , NULL , NULL , // 14-17
956  NULL , NULL , NULL , NULL , // 18-1B
957  NULL , NULL , NULL , NULL , // 1C-1F
958  NULL , NULL , NULL , op_ED_0x23_EX , // 20-23
959  op_ED_0x24_EX , NULL , NULL , op_ED_0x27_EX , // 24-27
961  op_ED_0x2c_EX , NULL , NULL , NULL , // 2C-2F
963  op_ED_0x34_EX , op_ED_0x35_EX , op_ED_0x36_EX , NULL , // 34-37
964  NULL , NULL , NULL , NULL , // 38-3B
965  NULL , NULL , NULL , NULL , // 3C-3F
966  op_ED_0x40 , op_ED_0x41 , op_ED_0x42 , op_ED_0x43 , // 40-43, Z80 original opcodes
967  op_ED_0x44 , op_ED_0x45 , op_ED_0x46 , op_ED_0x47 , // 44-47, Z80 original opcodes
968  op_ED_0x48 , op_ED_0x49 , op_ED_0x4a , op_ED_0x4b , // 48-4B, Z80 original opcodes
969  op_ED_0x4c , op_ED_0x4d , op_ED_0x4e , op_ED_0x4f , // 4C-4F, Z80 original opcodes
970  op_ED_0x50 , op_ED_0x51 , op_ED_0x52 , op_ED_0x53 , // 50-53, Z80 original opcodes
971  op_ED_0x54 , op_ED_0x55 , op_ED_0x56 , op_ED_0x57 , // 54-57, Z80 original opcodes
972  op_ED_0x58 , op_ED_0x59 , op_ED_0x5a , op_ED_0x5b , // 58-5B, Z80 original opcodes
973  op_ED_0x5c , op_ED_0x5d , op_ED_0x5e , op_ED_0x5f , // 5C-5F, Z80 original opcodes
974  op_ED_0x60 , op_ED_0x61 , op_ED_0x62 , op_ED_0x63 , // 60-63, Z80 original opcodes
975  op_ED_0x64 , op_ED_0x65 , op_ED_0x66 , op_ED_0x67 , // 64-67, Z80 original opcodes
976  op_ED_0x68 , op_ED_0x69 , op_ED_0x6a , op_ED_0x6b , // 68-6B, Z80 original opcodes
977  op_ED_0x6c , op_ED_0x6d , op_ED_0x6e , op_ED_0x6f , // 6C-6F, Z80 original opcodes
978  op_ED_0x70 , op_ED_0x71 , op_ED_0x72 , op_ED_0x73 , // 70-73, Z80 original opcodes
979  op_ED_0x74 , op_ED_0x75 , op_ED_0x76 , NULL , // 74-77, Z80 original opcodes, EXCEPT 0x77
980  op_ED_0x78 , op_ED_0x79 , op_ED_0x7a , op_ED_0x7b , // 78-7B, Z80 original opcodes
981  op_ED_0x7c , op_ED_0x7d , op_ED_0x7e , NULL , // 7C-7F, Z80 original opcodes, EXCEPT 0x7F
982  NULL , NULL , NULL , NULL , // 80-83
983  NULL , NULL , NULL , NULL , // 84-87
984  NULL , NULL , op_ED_0x8a_EX , NULL , // 88-8B
985  NULL , NULL , NULL , NULL , // 8C-8F
987  op_ED_0x94_EX , op_ED_0x95_EX , NULL , NULL , // 94-97
988  op_ED_0x98_EX , NULL , NULL , NULL , // 98-9B
989  NULL , NULL , NULL , NULL , // 9C-9F
990  op_ED_0xa0 , op_ED_0xa1 , op_ED_0xa2 , op_ED_0xa3 , // A0-A3, Z80 original opcodes
991  op_ED_0xa4_EX , op_ED_0xa5_EX , NULL , NULL , // A4-A7
992  op_ED_0xa8 , op_ED_0xa9 , op_ED_0xaa , op_ED_0xab , // A8-AB, Z80 original opcodes
993  op_ED_0xac_EX , NULL , NULL , NULL , // AC-AF
994  op_ED_0xb0 , op_ED_0xb1 , op_ED_0xb2 , op_ED_0xb3 , // B0-B3, Z80 original opcodes
995  op_ED_0xb4_EX , NULL , NULL , op_ED_0xb7_EX , // B4-B7
996  op_ED_0xb8 , op_ED_0xb9 , op_ED_0xba , op_ED_0xbb , // B8-BB, Z80 original opcodes
997  op_ED_0xbc_EX , NULL , NULL , NULL , // BC-BF
998  NULL , NULL , NULL , NULL ,
999  NULL , NULL , NULL , NULL ,
1000  NULL , NULL , NULL , NULL ,
1001  NULL , NULL , NULL , NULL ,
1002  NULL , NULL , NULL , NULL ,
1003  NULL , NULL , NULL , NULL ,
1004  NULL , NULL , NULL , NULL ,
1005  NULL , NULL , NULL , NULL ,
1006  NULL , NULL , NULL , NULL ,
1007  NULL , NULL , NULL , NULL ,
1008  NULL , NULL , NULL , NULL ,
1009  NULL , NULL , NULL , NULL ,
1010  NULL , NULL , NULL , NULL ,
1011  NULL , NULL , NULL , NULL ,
1012  NULL , NULL , NULL , NULL ,
1013  NULL , NULL , NULL , NULL
1014 };
SBC16
#define SBC16(hl, value)
Definition: macros.h:492
op_ED_0xa5_EX
#define op_ED_0xa5_EX
Definition: opcodes_ed.c:254
LD
#define LD(dst, src)
Definition: macros.h:325
_z80_cpu_context::nmos
int nmos
Definition: z80ex.h:175
BC
#define BC
Definition: macros.h:23
op_ED_0x32_EX
#define op_ED_0x32_EX
Definition: opcodes_ed.c:114
B
#define B
Definition: macros.h:21
IN_F
#define IN_F(port, rd)
Definition: macros.h:415
INI
#define INI(rd, wr)
Definition: macros.h:666
op_ED_0xa4_EX
#define op_ED_0xa4_EX
Definition: opcodes_ed.c:244
T_WAIT_UNTIL
#define T_WAIT_UNTIL(t_state)
Definition: macros.h:119
CPIR
#define CPIR(t1, t2, rd)
Definition: macros.h:761
op_ED_0x94_EX
#define op_ED_0x94_EX
Definition: opcodes_ed.c:214
IM2
@ IM2
Definition: z80ex.h:67
op_ED_0x30_EX
#define op_ED_0x30_EX
Definition: opcodes_ed.c:94
INIR
#define INIR(t1, t2, rd, wr)
Definition: macros.h:787
op_ED_0x8a_EX
#define op_ED_0x8a_EX
Definition: opcodes_ed.c:164
op_ED_0x27_EX
#define op_ED_0x27_EX
Definition: opcodes_ed.c:34
OTIR
#define OTIR(t1, t2, rd, wr)
Definition: macros.h:806
op_ED_0x28_EX
#define op_ED_0x28_EX
Definition: opcodes_ed.c:44
op_ED_0x98_EX
#define op_ED_0x98_EX
Definition: opcodes_ed.c:234
temp_addr
#define temp_addr
Definition: z80ex.c:25
HL
#define HL
Definition: macros.h:31
E
#define E
Definition: macros.h:26
SP
#define SP
Definition: macros.h:59
op_ED_0x92_EX
#define op_ED_0x92_EX
Definition: opcodes_ed.c:194
OUTD
#define OUTD(rd, wr)
Definition: macros.h:729
op_ED_0x33_EX
#define op_ED_0x33_EX
Definition: opcodes_ed.c:124
IM_
#define IM_(mode)
Definition: macros.h:574
RETI
#define RETI(rd1, rd2)
Definition: macros.h:605
op_ED_0x2c_EX
#define op_ED_0x2c_EX
Definition: opcodes_ed.c:84
IM0
@ IM0
Definition: z80ex.h:67
LD_R_A
#define LD_R_A()
Definition: macros.h:586
op_ED_0x90_EX
#define op_ED_0x90_EX
Definition: opcodes_ed.c:174
op_ED_0x91_EX
#define op_ED_0x91_EX
Definition: opcodes_ed.c:184
z80ex_opcode_fn
void(* z80ex_opcode_fn)(void)
Definition: z80ex.c:28
LD_A_R
#define LD_A_R()
Definition: macros.h:579
D
#define D
Definition: macros.h:25
WRITE_MEM
#define WRITE_MEM(addr, vbyte, t_state)
Definition: macros.h:161
LD_RP_FROM_ADDR_MPTR_16
#define LD_RP_FROM_ADDR_MPTR_16(dst, src, addr)
Definition: macros.h:358
IN
#define IN(reg, port, rd)
Definition: macros.h:401
LDD
#define LDD(rd, wr)
Definition: macros.h:689
RRD
#define RRD(rd, wr)
Definition: macros.h:553
op_ED_0x31_EX
#define op_ED_0x31_EX
Definition: opcodes_ed.c:104
CPDR
#define CPDR(t1, t2, rd)
Definition: macros.h:846
temp_word
#define temp_word
Definition: z80ex.c:26
IND
#define IND(rd, wr)
Definition: macros.h:718
op_ED_0x2a_EX
#define op_ED_0x2a_EX
Definition: opcodes_ed.c:64
H
#define H
Definition: macros.h:29
INDR
#define INDR(t1, t2, rd, wr)
Definition: macros.h:872
C
#define C
Definition: macros.h:22
LDDR
#define LDDR(t1, t2, rd, wr)
Definition: macros.h:826
op_ED_0x35_EX
#define op_ED_0x35_EX
Definition: opcodes_ed.c:144
OUT
#define OUT(port, reg, wr)
Definition: macros.h:387
READ_OP
#define READ_OP()
Definition: macros.h:93
op_ED_0x36_EX
#define op_ED_0x36_EX
Definition: opcodes_ed.c:154
RLD
#define RLD(rd, wr)
Definition: macros.h:563
LDI
#define LDI(rd, wr)
Definition: macros.h:619
LD_RP_TO_ADDR_MPTR_16
#define LD_RP_TO_ADDR_MPTR_16(dst, src, addr)
Definition: macros.h:351
I
#define I
Definition: macros.h:65
ADC16
#define ADC16(hl, value)
Definition: macros.h:229
DE
#define DE
Definition: macros.h:27
L
#define L
Definition: macros.h:30
op_ED_0xb4_EX
#define op_ED_0xb4_EX
Definition: opcodes_ed.c:274
op_ED_0x34_EX
#define op_ED_0x34_EX
Definition: opcodes_ed.c:134
NEG
#define NEG()
Definition: macros.h:598
LD_A_I
#define LD_A_I()
Definition: macros.h:591
OUTI
#define OUTI(rd, wr)
Definition: macros.h:677
op_ED_0xbc_EX
#define op_ED_0xbc_EX
Definition: opcodes_ed.c:294
op_ED_0x23_EX
#define op_ED_0x23_EX
Definition: opcodes_ed.c:10
A
#define A
Definition: macros.h:17
IM1
@ IM1
Definition: z80ex.h:67
op_ED_0x95_EX
#define op_ED_0x95_EX
Definition: opcodes_ed.c:224
op_ED_0x93_EX
#define op_ED_0x93_EX
Definition: opcodes_ed.c:204
op_ED_0x2b_EX
#define op_ED_0x2b_EX
Definition: opcodes_ed.c:74
z80ex
Z80EX_CONTEXT z80ex
Definition: primo.c:37
op_ED_0xb7_EX
#define op_ED_0xb7_EX
Definition: opcodes_ed.c:284
CPI
#define CPI(rd)
Definition: macros.h:631
LDIR
#define LDIR(t1, t2, rd, wr)
Definition: macros.h:741
READ_MEM
#define READ_MEM(result, addr, t_state)
Definition: macros.h:147
CPD
#define CPD(rd)
Definition: macros.h:701
op_ED_0x29_EX
#define op_ED_0x29_EX
Definition: opcodes_ed.c:54
op_ED_0xac_EX
#define op_ED_0xac_EX
Definition: opcodes_ed.c:264
RETN
#define RETN(rd1, rd2)
Definition: macros.h:613
op_ED_0x24_EX
#define op_ED_0x24_EX
Definition: opcodes_ed.c:24
OTDR
#define OTDR(t1, t2, rd, wr)
Definition: macros.h:891