1 OP(illegal,2)
2 {
3 
4 }
5 
6 /**********************************************************
7  * special opcodes (ED prefix)
8  **********************************************************/
9 OP(ed,00) { unsigned n = ARG(); _B = IN( n );						} /* IN0  B,(n)       */
10 OP(ed,01) { unsigned n = ARG(); OUT( n, _B );						} /* OUT0 (n),B       */
11 OP(ed,02) { illegal_2();											} /* DB   ED          */
12 OP(ed,03) { illegal_2();											} /* DB   ED          */
13 OP(ed,04) { TST( _B );												} /* TST  B           */
14 OP(ed,05) { illegal_2();											} /* DB   ED          */
15 OP(ed,06) { illegal_2();											} /* DB   ED          */
16 OP(ed,07) { illegal_2();											} /* DB   ED          */
17 
18 OP(ed,08) { unsigned n = ARG(); _C = IN( n );						} /* IN0  C,(n)       */
19 OP(ed,09) { unsigned n = ARG(); OUT( n, _C );						} /* OUT0 (n),C       */
20 OP(ed,0a) { illegal_2();											} /* DB   ED          */
21 OP(ed,0b) { illegal_2();											} /* DB   ED          */
22 OP(ed,0c) { TST( _C );												} /* TST  C           */
23 OP(ed,0d) { illegal_2();											} /* DB   ED          */
24 OP(ed,0e) { illegal_2();											} /* DB   ED          */
25 OP(ed,0f) { illegal_2();											} /* DB   ED          */
26 
27 OP(ed,10) { unsigned n = ARG(); _D = IN( n );						} /* IN0  D,(n)       */
28 OP(ed,11) { unsigned n = ARG(); OUT( n, _D );						} /* OUT0 (n),D       */
29 OP(ed,12) { illegal_2();											} /* DB   ED          */
30 OP(ed,13) { illegal_2();											} /* DB   ED          */
31 OP(ed,14) { TST( _D );												} /* TST  D           */
32 OP(ed,15) { illegal_2();											} /* DB   ED          */
33 OP(ed,16) { illegal_2();											} /* DB   ED          */
34 OP(ed,17) { illegal_2();											} /* DB   ED          */
35 
36 OP(ed,18) { unsigned n = ARG(); _E = IN( n );						} /* IN0  E,(n)       */
37 OP(ed,19) { unsigned n = ARG(); OUT( n, _E );						} /* OUT0 (n),E       */
38 OP(ed,1a) { illegal_2();											} /* DB   ED          */
39 OP(ed,1b) { illegal_2();											} /* DB   ED          */
40 OP(ed,1c) { TST( _E );												} /* TST  E           */
41 OP(ed,1d) { illegal_2();											} /* DB   ED          */
42 OP(ed,1e) { illegal_2();											} /* DB   ED          */
43 OP(ed,1f) { illegal_2();											} /* DB   ED          */
44 
45 OP(ed,20) { unsigned n = ARG(); _H = IN( n );						} /* IN0  H,(n)       */
46 OP(ed,21) { unsigned n = ARG(); OUT( n, _H );						} /* OUT0 (n),H       */
47 OP(ed,22) { illegal_2();											} /* DB   ED          */
48 OP(ed,23) { illegal_2();											} /* DB   ED          */
49 OP(ed,24) { TST( _H );												} /* TST  H           */
50 OP(ed,25) { illegal_2();											} /* DB   ED          */
51 OP(ed,26) { illegal_2();											} /* DB   ED          */
52 OP(ed,27) { illegal_2();											} /* DB   ED          */
53 
54 OP(ed,28) { unsigned n = ARG(); _L = IN( n );						} /* IN0  L,(n)       */
55 OP(ed,29) { unsigned n = ARG(); OUT( n, _L );						} /* OUT0 (n),L       */
56 OP(ed,2a) { illegal_2();											} /* DB   ED          */
57 OP(ed,2b) { illegal_2();											} /* DB   ED          */
58 OP(ed,2c) { TST( _L );												} /* TST  L           */
59 OP(ed,2d) { illegal_2();											} /* DB   ED          */
60 OP(ed,2e) { illegal_2();											} /* DB   ED          */
61 OP(ed,2f) { illegal_2();											} /* DB   ED          */
62 
63 OP(ed,30) { unsigned n = ARG(); IN( n );							} /* IN0  (n)         */
64 OP(ed,31) { unsigned n = ARG(); OUT( n, 0 );						} /* OUT0 (n)         */
65 OP(ed,32) { illegal_2();											} /* DB   ED          */
66 OP(ed,33) { illegal_2();											} /* DB   ED          */
67 OP(ed,34) { TST( RM(_HL) ); 										} /* TST  (HL)        */
68 OP(ed,35) { illegal_2();											} /* DB   ED          */
69 OP(ed,36) { illegal_2();											} /* DB   ED          */
70 OP(ed,37) { illegal_2();											} /* DB   ED          */
71 
72 OP(ed,38) { unsigned n = ARG(); _A = IN( n );						} /* IN0  A,(n)       */
73 OP(ed,39) { unsigned n = ARG(); OUT( n, _A );						} /* OUT0 (n),A       */
74 OP(ed,3a) { illegal_2();											} /* DB   ED          */
75 OP(ed,3b) { illegal_2();											} /* DB   ED          */
76 OP(ed,3c) { TST( _A );												} /* TST  A           */
77 OP(ed,3d) { illegal_2();											} /* DB   ED          */
78 OP(ed,3e) { illegal_2();											} /* DB   ED          */
79 OP(ed,3f) { illegal_2();											} /* DB   ED          */
80 
81 OP(ed,40) { _B = IN(_BC); _F = (_F & CF) | SZP[_B]; 				} /* IN   B,(C)       */
82 OP(ed,41) { OUT(_BC,_B);											} /* OUT  (C),B       */
83 OP(ed,42) { SBC16( BC );											} /* SBC  HL,BC       */
84 OP(ed,43) { EA = ARG16(); WM16( EA, &Z180.BC ); 					} /* LD   (w),BC      */
85 OP(ed,44) { NEG;													} /* NEG              */
86 OP(ed,45) { RETN;													} /* RETN;            */
87 OP(ed,46) { _IM = 0;												} /* IM   0           */
88 OP(ed,47) { LD_I_A; 												} /* LD   I,A         */
89 
90 OP(ed,48) { _C = IN(_BC); _F = (_F & CF) | SZP[_C]; 				} /* IN   C,(C)       */
91 OP(ed,49) { OUT(_BC,_C);											} /* OUT  (C),C       */
92 OP(ed,4a) { ADC16( BC );											} /* ADC  HL,BC       */
93 OP(ed,4b) { EA = ARG16(); RM16( EA, &Z180.BC ); 					} /* LD   BC,(w)      */
94 OP(ed,4c) { MLT( BC );												} /* MLT  BC          */
95 OP(ed,4d) { RETI;													} /* RETI             */
96 OP(ed,4e) { _IM = 0;												} /* IM   0           */
97 OP(ed,4f) { LD_R_A; 												} /* LD   R,A         */
98 
99 OP(ed,50) { _D = IN(_BC); _F = (_F & CF) | SZP[_D]; 				} /* IN   D,(C)       */
100 OP(ed,51) { OUT(_BC,_D);											} /* OUT  (C),D       */
101 OP(ed,52) { SBC16( DE );											} /* SBC  HL,DE       */
102 OP(ed,53) { EA = ARG16(); WM16( EA, &Z180.DE ); 					} /* LD   (w),DE      */
103 OP(ed,54) { NEG;													} /* NEG              */
104 OP(ed,55) { RETN;													} /* RETN;            */
105 OP(ed,56) { _IM = 1;												} /* IM   1           */
106 OP(ed,57) { LD_A_I; 												} /* LD   A,I         */
107 
108 OP(ed,58) { _E = IN(_BC); _F = (_F & CF) | SZP[_E]; 				} /* IN   E,(C)       */
109 OP(ed,59) { OUT(_BC,_E);											} /* OUT  (C),E       */
110 OP(ed,5a) { ADC16( DE );											} /* ADC  HL,DE       */
111 OP(ed,5b) { EA = ARG16(); RM16( EA, &Z180.DE ); 					} /* LD   DE,(w)      */
112 OP(ed,5c) { MLT( DE );												} /* MLT  DE          */
113 OP(ed,5d) { RETI;													} /* RETI             */
114 OP(ed,5e) { _IM = 2;												} /* IM   2           */
115 OP(ed,5f) { LD_A_R; 												} /* LD   A,R         */
116 
117 OP(ed,60) { _H = IN(_BC); _F = (_F & CF) | SZP[_H]; 				} /* IN   H,(C)       */
118 OP(ed,61) { OUT(_BC,_H);											} /* OUT  (C),H       */
119 OP(ed,62) { SBC16( HL );											} /* SBC  HL,HL       */
120 OP(ed,63) { EA = ARG16(); WM16( EA, &Z180.HL ); 					} /* LD   (w),HL      */
121 OP(ed,64) { unsigned m = ARG(); TST( m );							} /* TST  m           */
122 OP(ed,65) { RETN;													} /* RETN;            */
123 OP(ed,66) { _IM = 0;												} /* IM   0           */
124 OP(ed,67) { RRD;													} /* RRD  (HL)        */
125 
126 OP(ed,68) { _L = IN(_BC); _F = (_F & CF) | SZP[_L]; 				} /* IN   L,(C)       */
127 OP(ed,69) { OUT(_BC,_L);											} /* OUT  (C),L       */
128 OP(ed,6a) { ADC16( HL );											} /* ADC  HL,HL       */
129 OP(ed,6b) { EA = ARG16(); RM16( EA, &Z180.HL ); 					} /* LD   HL,(w)      */
130 OP(ed,6c) { MLT( HL );												} /* MLT  HL          */
131 OP(ed,6d) { RETI;													} /* RETI             */
132 OP(ed,6e) { _IM = 0;												} /* IM   0           */
133 OP(ed,6f) { RLD;													} /* RLD  (HL)        */
134 
135 OP(ed,70) { UINT8 res = IN(_BC); _F = (_F & CF) | SZP[res]; 		} /* IN   0,(C)       */
136 OP(ed,71) { OUT(_BC,0); 											} /* OUT  (C),0       */
137 OP(ed,72) { SBC16( SP );											} /* SBC  HL,SP       */
138 OP(ed,73) { EA = ARG16(); WM16( EA, &Z180.SP ); 					} /* LD   (w),SP      */
139 OP(ed,74) { unsigned m = ARG(); _F = (_F & CF) | SZP[IN(_C) & m];	} /* TSTIO m          */
140 OP(ed,75) { RETN;													} /* RETN;            */
141 OP(ed,76) { SLP;													} /* SLP              */
142 OP(ed,77) { illegal_2();											} /* DB   ED,77       */
143 
144 OP(ed,78) { _A = IN(_BC); _F = (_F & CF) | SZP[_A]; 				} /* IN   E,(C)       */
145 OP(ed,79) { OUT(_BC,_A);											} /* OUT  (C),E       */
146 OP(ed,7a) { ADC16( SP );											} /* ADC  HL,SP       */
147 OP(ed,7b) { EA = ARG16(); RM16( EA, &Z180.SP ); 					} /* LD   SP,(w)      */
148 OP(ed,7c) { MLT( SP );												} /* MLT  SP          */
149 OP(ed,7d) { RETI;													} /* RETI             */
150 OP(ed,7e) { _IM = 2;												} /* IM   2           */
151 OP(ed,7f) { illegal_2();											} /* DB   ED,7F       */
152 
153 OP(ed,80) { illegal_2();											} /* DB   ED          */
154 OP(ed,81) { illegal_2();											} /* DB   ED          */
155 OP(ed,82) { illegal_2();											} /* DB   ED          */
156 OP(ed,83) { OTIM;													} /* OTIM             */
157 OP(ed,84) { illegal_2();											} /* DB   ED          */
158 OP(ed,85) { illegal_2();											} /* DB   ED          */
159 OP(ed,86) { illegal_2();											} /* DB   ED          */
160 OP(ed,87) { illegal_2();											} /* DB   ED          */
161 
162 OP(ed,88) { illegal_2();											} /* DB   ED          */
163 OP(ed,89) { illegal_2();											} /* DB   ED          */
164 OP(ed,8a) { illegal_2();											} /* DB   ED          */
165 OP(ed,8b) { OTDM;													} /* OTDM             */
166 OP(ed,8c) { illegal_2();											} /* DB   ED          */
167 OP(ed,8d) { illegal_2();											} /* DB   ED          */
168 OP(ed,8e) { illegal_2();											} /* DB   ED          */
169 OP(ed,8f) { illegal_2();											} /* DB   ED          */
170 
171 OP(ed,90) { illegal_2();											} /* DB   ED          */
172 OP(ed,91) { illegal_2();											} /* DB   ED          */
173 OP(ed,92) { illegal_2();											} /* DB   ED          */
174 OP(ed,93) { OTIMR;													} /* OTIMR            */
175 OP(ed,94) { illegal_2();											} /* DB   ED          */
176 OP(ed,95) { illegal_2();											} /* DB   ED          */
177 OP(ed,96) { illegal_2();											} /* DB   ED          */
178 OP(ed,97) { illegal_2();											} /* DB   ED          */
179 
180 OP(ed,98) { illegal_2();											} /* DB   ED          */
181 OP(ed,99) { illegal_2();											} /* DB   ED          */
182 OP(ed,9a) { illegal_2();											} /* DB   ED          */
183 OP(ed,9b) { OTDMR;													} /* OTDMR            */
184 OP(ed,9c) { illegal_2();											} /* DB   ED          */
185 OP(ed,9d) { illegal_2();											} /* DB   ED          */
186 OP(ed,9e) { illegal_2();											} /* DB   ED          */
187 OP(ed,9f) { illegal_2();											} /* DB   ED          */
188 
OP(ed,a0)189 OP(ed,a0) { LDI;													} /* LDI              */
OP(ed,a1)190 OP(ed,a1) { CPI;													} /* CPI              */
OP(ed,a2)191 OP(ed,a2) { INI;													} /* INI              */
OP(ed,a3)192 OP(ed,a3) { OUTI;													} /* OUTI             */
OP(ed,a4)193 OP(ed,a4) { illegal_2();											} /* DB   ED          */
OP(ed,a5)194 OP(ed,a5) { illegal_2();											} /* DB   ED          */
OP(ed,a6)195 OP(ed,a6) { illegal_2();											} /* DB   ED          */
OP(ed,a7)196 OP(ed,a7) { illegal_2();											} /* DB   ED          */
197 
OP(ed,a8)198 OP(ed,a8) { LDD;													} /* LDD              */
OP(ed,a9)199 OP(ed,a9) { CPD;													} /* CPD              */
OP(ed,aa)200 OP(ed,aa) { IND;													} /* IND              */
OP(ed,ab)201 OP(ed,ab) { OUTD;													} /* OUTD             */
OP(ed,ac)202 OP(ed,ac) { illegal_2();											} /* DB   ED          */
OP(ed,ad)203 OP(ed,ad) { illegal_2();											} /* DB   ED          */
OP(ed,ae)204 OP(ed,ae) { illegal_2();											} /* DB   ED          */
OP(ed,af)205 OP(ed,af) { illegal_2();											} /* DB   ED          */
206 
OP(ed,b0)207 OP(ed,b0) { LDIR;													} /* LDIR             */
OP(ed,b1)208 OP(ed,b1) { CPIR;													} /* CPIR             */
OP(ed,b2)209 OP(ed,b2) { INIR;													} /* INIR             */
OP(ed,b3)210 OP(ed,b3) { OTIR;													} /* OTIR             */
OP(ed,b4)211 OP(ed,b4) { illegal_2();											} /* DB   ED          */
OP(ed,b5)212 OP(ed,b5) { illegal_2();											} /* DB   ED          */
OP(ed,b6)213 OP(ed,b6) { illegal_2();											} /* DB   ED          */
OP(ed,b7)214 OP(ed,b7) { illegal_2();											} /* DB   ED          */
215 
OP(ed,b8)216 OP(ed,b8) { LDDR;													} /* LDDR             */
OP(ed,b9)217 OP(ed,b9) { CPDR;													} /* CPDR             */
OP(ed,ba)218 OP(ed,ba) { INDR;													} /* INDR             */
OP(ed,bb)219 OP(ed,bb) { OTDR;													} /* OTDR             */
OP(ed,bc)220 OP(ed,bc) { illegal_2();											} /* DB   ED          */
OP(ed,bd)221 OP(ed,bd) { illegal_2();											} /* DB   ED          */
OP(ed,be)222 OP(ed,be) { illegal_2();											} /* DB   ED          */
OP(ed,bf)223 OP(ed,bf) { illegal_2();											} /* DB   ED          */
224 
OP(ed,c0)225 OP(ed,c0) { illegal_2();											} /* DB   ED          */
OP(ed,c1)226 OP(ed,c1) { illegal_2();											} /* DB   ED          */
OP(ed,c2)227 OP(ed,c2) { illegal_2();											} /* DB   ED          */
OP(ed,c3)228 OP(ed,c3) { illegal_2();											} /* DB   ED          */
OP(ed,c4)229 OP(ed,c4) { illegal_2();											} /* DB   ED          */
OP(ed,c5)230 OP(ed,c5) { illegal_2();											} /* DB   ED          */
OP(ed,c6)231 OP(ed,c6) { illegal_2();											} /* DB   ED          */
OP(ed,c7)232 OP(ed,c7) { illegal_2();											} /* DB   ED          */
233 
OP(ed,c8)234 OP(ed,c8) { illegal_2();											} /* DB   ED          */
OP(ed,c9)235 OP(ed,c9) { illegal_2();											} /* DB   ED          */
OP(ed,ca)236 OP(ed,ca) { illegal_2();											} /* DB   ED          */
OP(ed,cb)237 OP(ed,cb) { illegal_2();											} /* DB   ED          */
OP(ed,cc)238 OP(ed,cc) { illegal_2();											} /* DB   ED          */
OP(ed,cd)239 OP(ed,cd) { illegal_2();											} /* DB   ED          */
OP(ed,ce)240 OP(ed,ce) { illegal_2();											} /* DB   ED          */
OP(ed,cf)241 OP(ed,cf) { illegal_2();											} /* DB   ED          */
242 
OP(ed,d0)243 OP(ed,d0) { illegal_2();											} /* DB   ED          */
OP(ed,d1)244 OP(ed,d1) { illegal_2();											} /* DB   ED          */
OP(ed,d2)245 OP(ed,d2) { illegal_2();											} /* DB   ED          */
OP(ed,d3)246 OP(ed,d3) { illegal_2();											} /* DB   ED          */
OP(ed,d4)247 OP(ed,d4) { illegal_2();											} /* DB   ED          */
OP(ed,d5)248 OP(ed,d5) { illegal_2();											} /* DB   ED          */
OP(ed,d6)249 OP(ed,d6) { illegal_2();											} /* DB   ED          */
OP(ed,d7)250 OP(ed,d7) { illegal_2();											} /* DB   ED          */
251 
OP(ed,d8)252 OP(ed,d8) { illegal_2();											} /* DB   ED          */
OP(ed,d9)253 OP(ed,d9) { illegal_2();											} /* DB   ED          */
OP(ed,da)254 OP(ed,da) { illegal_2();											} /* DB   ED          */
OP(ed,db)255 OP(ed,db) { illegal_2();											} /* DB   ED          */
OP(ed,dc)256 OP(ed,dc) { illegal_2();											} /* DB   ED          */
OP(ed,dd)257 OP(ed,dd) { illegal_2();											} /* DB   ED          */
OP(ed,de)258 OP(ed,de) { illegal_2();											} /* DB   ED          */
OP(ed,df)259 OP(ed,df) { illegal_2();											} /* DB   ED          */
260 
OP(ed,e0)261 OP(ed,e0) { illegal_2();											} /* DB   ED          */
OP(ed,e1)262 OP(ed,e1) { illegal_2();											} /* DB   ED          */
OP(ed,e2)263 OP(ed,e2) { illegal_2();											} /* DB   ED          */
OP(ed,e3)264 OP(ed,e3) { illegal_2();											} /* DB   ED          */
OP(ed,e4)265 OP(ed,e4) { illegal_2();											} /* DB   ED          */
OP(ed,e5)266 OP(ed,e5) { illegal_2();											} /* DB   ED          */
OP(ed,e6)267 OP(ed,e6) { illegal_2();											} /* DB   ED          */
OP(ed,e7)268 OP(ed,e7) { illegal_2();											} /* DB   ED          */
269 
OP(ed,e8)270 OP(ed,e8) { illegal_2();											} /* DB   ED          */
OP(ed,e9)271 OP(ed,e9) { illegal_2();											} /* DB   ED          */
OP(ed,ea)272 OP(ed,ea) { illegal_2();											} /* DB   ED          */
OP(ed,eb)273 OP(ed,eb) { illegal_2();											} /* DB   ED          */
OP(ed,ec)274 OP(ed,ec) { illegal_2();											} /* DB   ED          */
OP(ed,ed)275 OP(ed,ed) { illegal_2();											} /* DB   ED          */
OP(ed,ee)276 OP(ed,ee) { illegal_2();											} /* DB   ED          */
OP(ed,ef)277 OP(ed,ef) { illegal_2();											} /* DB   ED          */
278 
OP(ed,f0)279 OP(ed,f0) { illegal_2();											} /* DB   ED          */
OP(ed,f1)280 OP(ed,f1) { illegal_2();											} /* DB   ED          */
OP(ed,f2)281 OP(ed,f2) { illegal_2();											} /* DB   ED          */
OP(ed,f3)282 OP(ed,f3) { illegal_2();											} /* DB   ED          */
OP(ed,f4)283 OP(ed,f4) { illegal_2();											} /* DB   ED          */
OP(ed,f5)284 OP(ed,f5) { illegal_2();											} /* DB   ED          */
OP(ed,f6)285 OP(ed,f6) { illegal_2();											} /* DB   ED          */
OP(ed,f7)286 OP(ed,f7) { illegal_2();											} /* DB   ED          */
287 
OP(ed,f8)288 OP(ed,f8) { illegal_2();											} /* DB   ED          */
OP(ed,f9)289 OP(ed,f9) { illegal_2();											} /* DB   ED          */
OP(ed,fa)290 OP(ed,fa) { illegal_2();											} /* DB   ED          */
OP(ed,fb)291 OP(ed,fb) { illegal_2();											} /* DB   ED          */
OP(ed,fc)292 OP(ed,fc) { illegal_2();											} /* DB   ED          */
OP(ed,fd)293 OP(ed,fd) { illegal_2();											} /* DB   ED          */
OP(ed,fe)294 OP(ed,fe) { illegal_2();											} /* DB   ED          */
OP(ed,ff)295 OP(ed,ff) { illegal_2();											} /* DB   ED          */
296 
297