1 // license:BSD-3-Clause
2 // copyright-holders:Juergen Buchmueller
3 OP(illegal,1) {
4 logerror("Z180 '%s' ill. opcode $%02x $%02x\n",
5 tag(), m_copcodes.read_byte((_PCD-1)&0xffff), m_copcodes.read_byte(_PCD));
6 }
7
8 /**********************************************************
9 * IX register related opcodes (DD prefix)
10 **********************************************************/
11 OP(dd,00) { illegal_1(); op_00(); } /* DB DD */
12 OP(dd,01) { illegal_1(); op_01(); } /* DB DD */
13 OP(dd,02) { illegal_1(); op_02(); } /* DB DD */
14 OP(dd,03) { illegal_1(); op_03(); } /* DB DD */
15 OP(dd,04) { illegal_1(); op_04(); } /* DB DD */
16 OP(dd,05) { illegal_1(); op_05(); } /* DB DD */
17 OP(dd,06) { illegal_1(); op_06(); } /* DB DD */
18 OP(dd,07) { illegal_1(); op_07(); } /* DB DD */
19
20 OP(dd,08) { illegal_1(); op_08(); } /* DB DD */
21 OP(dd,09) { m_R++; ADD16(IX,BC); } /* ADD IX,BC */
22 OP(dd,0a) { illegal_1(); op_0a(); } /* DB DD */
23 OP(dd,0b) { illegal_1(); op_0b(); } /* DB DD */
24 OP(dd,0c) { illegal_1(); op_0c(); } /* DB DD */
25 OP(dd,0d) { illegal_1(); op_0d(); } /* DB DD */
26 OP(dd,0e) { illegal_1(); op_0e(); } /* DB DD */
27 OP(dd,0f) { illegal_1(); op_0f(); } /* DB DD */
28
29 OP(dd,10) { illegal_1(); op_10(); } /* DB DD */
30 OP(dd,11) { illegal_1(); op_11(); } /* DB DD */
31 OP(dd,12) { illegal_1(); op_12(); } /* DB DD */
32 OP(dd,13) { illegal_1(); op_13(); } /* DB DD */
33 OP(dd,14) { illegal_1(); op_14(); } /* DB DD */
34 OP(dd,15) { illegal_1(); op_15(); } /* DB DD */
35 OP(dd,16) { illegal_1(); op_16(); } /* DB DD */
36 OP(dd,17) { illegal_1(); op_17(); } /* DB DD */
37
38 OP(dd,18) { illegal_1(); op_18(); } /* DB DD */
39 OP(dd,19) { m_R++; ADD16(IX,DE); } /* ADD IX,DE */
40 OP(dd,1a) { illegal_1(); op_1a(); } /* DB DD */
41 OP(dd,1b) { illegal_1(); op_1b(); } /* DB DD */
42 OP(dd,1c) { illegal_1(); op_1c(); } /* DB DD */
43 OP(dd,1d) { illegal_1(); op_1d(); } /* DB DD */
44 OP(dd,1e) { illegal_1(); op_1e(); } /* DB DD */
45 OP(dd,1f) { illegal_1(); op_1f(); } /* DB DD */
46
47 OP(dd,20) { illegal_1(); op_20(); } /* DB DD */
48 OP(dd,21) { m_R++; _IX = ARG16(); } /* LD IX,w */
49 OP(dd,22) { m_R++; m_ea = ARG16(); WM16( m_ea, &m_IX ); } /* LD (w),IX */
50 OP(dd,23) { m_R++; _IX++; } /* INC IX */
51 OP(dd,24) { m_R++; _HX = INC(_HX); } /* INC HX */
52 OP(dd,25) { m_R++; _HX = DEC(_HX); } /* DEC HX */
53 OP(dd,26) { m_R++; _HX = ARG(); } /* LD HX,n */
54 OP(dd,27) { illegal_1(); op_27(); } /* DB DD */
55
56 OP(dd,28) { illegal_1(); op_28(); } /* DB DD */
57 OP(dd,29) { m_R++; ADD16(IX,IX); } /* ADD IX,IX */
58 OP(dd,2a) { m_R++; m_ea = ARG16(); RM16( m_ea, &m_IX ); } /* LD IX,(w) */
59 OP(dd,2b) { m_R++; _IX--; } /* DEC IX */
60 OP(dd,2c) { m_R++; _LX = INC(_LX); } /* INC LX */
61 OP(dd,2d) { m_R++; _LX = DEC(_LX); } /* DEC LX */
62 OP(dd,2e) { m_R++; _LX = ARG(); } /* LD LX,n */
63 OP(dd,2f) { illegal_1(); op_2f(); } /* DB DD */
64
65 OP(dd,30) { illegal_1(); op_30(); } /* DB DD */
66 OP(dd,31) { illegal_1(); op_31(); } /* DB DD */
67 OP(dd,32) { illegal_1(); op_32(); } /* DB DD */
68 OP(dd,33) { illegal_1(); op_33(); } /* DB DD */
69 OP(dd,34) { m_R++; EAX(); WM( m_ea, INC(RM(m_ea)) ); } /* INC (IX+o) */
70 OP(dd,35) { m_R++; EAX(); WM( m_ea, DEC(RM(m_ea)) ); } /* DEC (IX+o) */
71 OP(dd,36) { m_R++; EAX(); WM( m_ea, ARG() ); } /* LD (IX+o),n */
72 OP(dd,37) { illegal_1(); op_37(); } /* DB DD */
73
74 OP(dd,38) { illegal_1(); op_38(); } /* DB DD */
75 OP(dd,39) { m_R++; ADD16(IX,SP); } /* ADD IX,SP */
76 OP(dd,3a) { illegal_1(); op_3a(); } /* DB DD */
77 OP(dd,3b) { illegal_1(); op_3b(); } /* DB DD */
78 OP(dd,3c) { illegal_1(); op_3c(); } /* DB DD */
79 OP(dd,3d) { illegal_1(); op_3d(); } /* DB DD */
80 OP(dd,3e) { illegal_1(); op_3e(); } /* DB DD */
81 OP(dd,3f) { illegal_1(); op_3f(); } /* DB DD */
82
83 OP(dd,40) { illegal_1(); op_40(); } /* DB DD */
84 OP(dd,41) { illegal_1(); op_41(); } /* DB DD */
85 OP(dd,42) { illegal_1(); op_42(); } /* DB DD */
86 OP(dd,43) { illegal_1(); op_43(); } /* DB DD */
87 OP(dd,44) { m_R++; _B = _HX; } /* LD B,HX */
88 OP(dd,45) { m_R++; _B = _LX; } /* LD B,LX */
89 OP(dd,46) { m_R++; EAX(); _B = RM(m_ea); } /* LD B,(IX+o) */
90 OP(dd,47) { illegal_1(); op_47(); } /* DB DD */
91
92 OP(dd,48) { illegal_1(); op_48(); } /* DB DD */
93 OP(dd,49) { illegal_1(); op_49(); } /* DB DD */
94 OP(dd,4a) { illegal_1(); op_4a(); } /* DB DD */
95 OP(dd,4b) { illegal_1(); op_4b(); } /* DB DD */
96 OP(dd,4c) { m_R++; _C = _HX; } /* LD C,HX */
97 OP(dd,4d) { m_R++; _C = _LX; } /* LD C,LX */
98 OP(dd,4e) { m_R++; EAX(); _C = RM(m_ea); } /* LD C,(IX+o) */
99 OP(dd,4f) { illegal_1(); op_4f(); } /* DB DD */
100
101 OP(dd,50) { illegal_1(); op_50(); } /* DB DD */
102 OP(dd,51) { illegal_1(); op_51(); } /* DB DD */
103 OP(dd,52) { illegal_1(); op_52(); } /* DB DD */
104 OP(dd,53) { illegal_1(); op_53(); } /* DB DD */
105 OP(dd,54) { m_R++; _D = _HX; } /* LD D,HX */
106 OP(dd,55) { m_R++; _D = _LX; } /* LD D,LX */
107 OP(dd,56) { m_R++; EAX(); _D = RM(m_ea); } /* LD D,(IX+o) */
108 OP(dd,57) { illegal_1(); op_57(); } /* DB DD */
109
110 OP(dd,58) { illegal_1(); op_58(); } /* DB DD */
111 OP(dd,59) { illegal_1(); op_59(); } /* DB DD */
112 OP(dd,5a) { illegal_1(); op_5a(); } /* DB DD */
113 OP(dd,5b) { illegal_1(); op_5b(); } /* DB DD */
114 OP(dd,5c) { m_R++; _E = _HX; } /* LD E,HX */
115 OP(dd,5d) { m_R++; _E = _LX; } /* LD E,LX */
116 OP(dd,5e) { m_R++; EAX(); _E = RM(m_ea); } /* LD E,(IX+o) */
117 OP(dd,5f) { illegal_1(); op_5f(); } /* DB DD */
118
119 OP(dd,60) { m_R++; _HX = _B; } /* LD HX,B */
120 OP(dd,61) { m_R++; _HX = _C; } /* LD HX,C */
121 OP(dd,62) { m_R++; _HX = _D; } /* LD HX,D */
122 OP(dd,63) { m_R++; _HX = _E; } /* LD HX,E */
123 OP(dd,64) { } /* LD HX,HX */
124 OP(dd,65) { m_R++; _HX = _LX; } /* LD HX,LX */
125 OP(dd,66) { m_R++; EAX(); _H = RM(m_ea); } /* LD H,(IX+o) */
126 OP(dd,67) { m_R++; _HX = _A; } /* LD HX,A */
127
128 OP(dd,68) { m_R++; _LX = _B; } /* LD LX,B */
129 OP(dd,69) { m_R++; _LX = _C; } /* LD LX,C */
130 OP(dd,6a) { m_R++; _LX = _D; } /* LD LX,D */
131 OP(dd,6b) { m_R++; _LX = _E; } /* LD LX,E */
132 OP(dd,6c) { m_R++; _LX = _HX; } /* LD LX,HX */
133 OP(dd,6d) { } /* LD LX,LX */
134 OP(dd,6e) { m_R++; EAX(); _L = RM(m_ea); } /* LD L,(IX+o) */
135 OP(dd,6f) { m_R++; _LX = _A; } /* LD LX,A */
136
137 OP(dd,70) { m_R++; EAX(); WM( m_ea, _B ); } /* LD (IX+o),B */
138 OP(dd,71) { m_R++; EAX(); WM( m_ea, _C ); } /* LD (IX+o),C */
139 OP(dd,72) { m_R++; EAX(); WM( m_ea, _D ); } /* LD (IX+o),D */
140 OP(dd,73) { m_R++; EAX(); WM( m_ea, _E ); } /* LD (IX+o),E */
141 OP(dd,74) { m_R++; EAX(); WM( m_ea, _H ); } /* LD (IX+o),H */
142 OP(dd,75) { m_R++; EAX(); WM( m_ea, _L ); } /* LD (IX+o),L */
143 OP(dd,76) { illegal_1(); op_76(); } /* DB DD */
144 OP(dd,77) { m_R++; EAX(); WM( m_ea, _A ); } /* LD (IX+o),A */
145
146 OP(dd,78) { illegal_1(); op_78(); } /* DB DD */
147 OP(dd,79) { illegal_1(); op_79(); } /* DB DD */
148 OP(dd,7a) { illegal_1(); op_7a(); } /* DB DD */
149 OP(dd,7b) { illegal_1(); op_7b(); } /* DB DD */
150 OP(dd,7c) { m_R++; _A = _HX; } /* LD A,HX */
151 OP(dd,7d) { m_R++; _A = _LX; } /* LD A,LX */
152 OP(dd,7e) { m_R++; EAX(); _A = RM(m_ea); } /* LD A,(IX+o) */
153 OP(dd,7f) { illegal_1(); op_7f(); } /* DB DD */
154
155 OP(dd,80) { illegal_1(); op_80(); } /* DB DD */
156 OP(dd,81) { illegal_1(); op_81(); } /* DB DD */
157 OP(dd,82) { illegal_1(); op_82(); } /* DB DD */
158 OP(dd,83) { illegal_1(); op_83(); } /* DB DD */
159 OP(dd,84) { m_R++; ADD(_HX); } /* ADD A,HX */
160 OP(dd,85) { m_R++; ADD(_LX); } /* ADD A,LX */
161 OP(dd,86) { m_R++; EAX(); ADD(RM(m_ea)); } /* ADD A,(IX+o) */
162 OP(dd,87) { illegal_1(); op_87(); } /* DB DD */
163
164 OP(dd,88) { illegal_1(); op_88(); } /* DB DD */
165 OP(dd,89) { illegal_1(); op_89(); } /* DB DD */
166 OP(dd,8a) { illegal_1(); op_8a(); } /* DB DD */
167 OP(dd,8b) { illegal_1(); op_8b(); } /* DB DD */
168 OP(dd,8c) { m_R++; ADC(_HX); } /* ADC A,HX */
169 OP(dd,8d) { m_R++; ADC(_LX); } /* ADC A,LX */
170 OP(dd,8e) { m_R++; EAX(); ADC(RM(m_ea)); } /* ADC A,(IX+o) */
171 OP(dd,8f) { illegal_1(); op_8f(); } /* DB DD */
172
173 OP(dd,90) { illegal_1(); op_90(); } /* DB DD */
174 OP(dd,91) { illegal_1(); op_91(); } /* DB DD */
175 OP(dd,92) { illegal_1(); op_92(); } /* DB DD */
176 OP(dd,93) { illegal_1(); op_93(); } /* DB DD */
177 OP(dd,94) { m_R++; SUB(_HX); } /* SUB HX */
178 OP(dd,95) { m_R++; SUB(_LX); } /* SUB LX */
179 OP(dd,96) { m_R++; EAX(); SUB(RM(m_ea)); } /* SUB (IX+o) */
180 OP(dd,97) { illegal_1(); op_97(); } /* DB DD */
181
182 OP(dd,98) { illegal_1(); op_98(); } /* DB DD */
183 OP(dd,99) { illegal_1(); op_99(); } /* DB DD */
184 OP(dd,9a) { illegal_1(); op_9a(); } /* DB DD */
185 OP(dd,9b) { illegal_1(); op_9b(); } /* DB DD */
186 OP(dd,9c) { m_R++; SBC(_HX); } /* SBC A,HX */
187 OP(dd,9d) { m_R++; SBC(_LX); } /* SBC A,LX */
188 OP(dd,9e) { m_R++; EAX(); SBC(RM(m_ea)); } /* SBC A,(IX+o) */
189 OP(dd,9f) { illegal_1(); op_9f(); } /* DB DD */
190
OP(dd,a0)191 OP(dd,a0) { illegal_1(); op_a0(); } /* DB DD */
OP(dd,a1)192 OP(dd,a1) { illegal_1(); op_a1(); } /* DB DD */
OP(dd,a2)193 OP(dd,a2) { illegal_1(); op_a2(); } /* DB DD */
OP(dd,a3)194 OP(dd,a3) { illegal_1(); op_a3(); } /* DB DD */
OP(dd,a4)195 OP(dd,a4) { m_R++; AND(_HX); } /* AND HX */
OP(dd,a5)196 OP(dd,a5) { m_R++; AND(_LX); } /* AND LX */
OP(dd,a6)197 OP(dd,a6) { m_R++; EAX(); AND(RM(m_ea)); } /* AND (IX+o) */
OP(dd,a7)198 OP(dd,a7) { illegal_1(); op_a7(); } /* DB DD */
199
OP(dd,a8)200 OP(dd,a8) { illegal_1(); op_a8(); } /* DB DD */
OP(dd,a9)201 OP(dd,a9) { illegal_1(); op_a9(); } /* DB DD */
OP(dd,aa)202 OP(dd,aa) { illegal_1(); op_aa(); } /* DB DD */
OP(dd,ab)203 OP(dd,ab) { illegal_1(); op_ab(); } /* DB DD */
OP(dd,ac)204 OP(dd,ac) { m_R++; XOR(_HX); } /* XOR HX */
OP(dd,ad)205 OP(dd,ad) { m_R++; XOR(_LX); } /* XOR LX */
OP(dd,ae)206 OP(dd,ae) { m_R++; EAX(); XOR(RM(m_ea)); } /* XOR (IX+o) */
OP(dd,af)207 OP(dd,af) { illegal_1(); op_af(); } /* DB DD */
208
OP(dd,b0)209 OP(dd,b0) { illegal_1(); op_b0(); } /* DB DD */
OP(dd,b1)210 OP(dd,b1) { illegal_1(); op_b1(); } /* DB DD */
OP(dd,b2)211 OP(dd,b2) { illegal_1(); op_b2(); } /* DB DD */
OP(dd,b3)212 OP(dd,b3) { illegal_1(); op_b3(); } /* DB DD */
OP(dd,b4)213 OP(dd,b4) { m_R++; OR(_HX); } /* OR HX */
OP(dd,b5)214 OP(dd,b5) { m_R++; OR(_LX); } /* OR LX */
OP(dd,b6)215 OP(dd,b6) { m_R++; EAX(); OR(RM(m_ea)); } /* OR (IX+o) */
OP(dd,b7)216 OP(dd,b7) { illegal_1(); op_b7(); } /* DB DD */
217
OP(dd,b8)218 OP(dd,b8) { illegal_1(); op_b8(); } /* DB DD */
OP(dd,b9)219 OP(dd,b9) { illegal_1(); op_b9(); } /* DB DD */
OP(dd,ba)220 OP(dd,ba) { illegal_1(); op_ba(); } /* DB DD */
OP(dd,bb)221 OP(dd,bb) { illegal_1(); op_bb(); } /* DB DD */
OP(dd,bc)222 OP(dd,bc) { m_R++; CP(_HX); } /* CP HX */
OP(dd,bd)223 OP(dd,bd) { m_R++; CP(_LX); } /* CP LX */
OP(dd,be)224 OP(dd,be) { m_R++; EAX(); CP(RM(m_ea)); } /* CP (IX+o) */
OP(dd,bf)225 OP(dd,bf) { illegal_1(); op_bf(); } /* DB DD */
226
OP(dd,c0)227 OP(dd,c0) { illegal_1(); op_c0(); } /* DB DD */
OP(dd,c1)228 OP(dd,c1) { illegal_1(); op_c1(); } /* DB DD */
OP(dd,c2)229 OP(dd,c2) { illegal_1(); op_c2(); } /* DB DD */
OP(dd,c3)230 OP(dd,c3) { illegal_1(); op_c3(); } /* DB DD */
OP(dd,c4)231 OP(dd,c4) { illegal_1(); op_c4(); } /* DB DD */
OP(dd,c5)232 OP(dd,c5) { illegal_1(); op_c5(); } /* DB DD */
OP(dd,c6)233 OP(dd,c6) { illegal_1(); op_c6(); } /* DB DD */
OP(dd,c7)234 OP(dd,c7) { illegal_1(); op_c7(); } /* DB DD */
235
OP(dd,c8)236 OP(dd,c8) { illegal_1(); op_c8(); } /* DB DD */
OP(dd,c9)237 OP(dd,c9) { illegal_1(); op_c9(); } /* DB DD */
OP(dd,ca)238 OP(dd,ca) { illegal_1(); op_ca(); } /* DB DD */
OP(dd,cb)239 OP(dd,cb) { m_R++; EAX(); m_extra_cycles += exec_xycb(ROP()); } /* ** DD CB xx */
OP(dd,cc)240 OP(dd,cc) { illegal_1(); op_cc(); } /* DB DD */
OP(dd,cd)241 OP(dd,cd) { illegal_1(); op_cd(); } /* DB DD */
OP(dd,ce)242 OP(dd,ce) { illegal_1(); op_ce(); } /* DB DD */
OP(dd,cf)243 OP(dd,cf) { illegal_1(); op_cf(); } /* DB DD */
244
OP(dd,d0)245 OP(dd,d0) { illegal_1(); op_d0(); } /* DB DD */
OP(dd,d1)246 OP(dd,d1) { illegal_1(); op_d1(); } /* DB DD */
OP(dd,d2)247 OP(dd,d2) { illegal_1(); op_d2(); } /* DB DD */
OP(dd,d3)248 OP(dd,d3) { illegal_1(); op_d3(); } /* DB DD */
OP(dd,d4)249 OP(dd,d4) { illegal_1(); op_d4(); } /* DB DD */
OP(dd,d5)250 OP(dd,d5) { illegal_1(); op_d5(); } /* DB DD */
OP(dd,d6)251 OP(dd,d6) { illegal_1(); op_d6(); } /* DB DD */
OP(dd,d7)252 OP(dd,d7) { illegal_1(); op_d7(); } /* DB DD */
253
OP(dd,d8)254 OP(dd,d8) { illegal_1(); op_d8(); } /* DB DD */
OP(dd,d9)255 OP(dd,d9) { illegal_1(); op_d9(); } /* DB DD */
OP(dd,da)256 OP(dd,da) { illegal_1(); op_da(); } /* DB DD */
OP(dd,db)257 OP(dd,db) { illegal_1(); op_db(); } /* DB DD */
OP(dd,dc)258 OP(dd,dc) { illegal_1(); op_dc(); } /* DB DD */
OP(dd,dd)259 OP(dd,dd) { illegal_1(); op_dd(); } /* DB DD */
OP(dd,de)260 OP(dd,de) { illegal_1(); op_de(); } /* DB DD */
OP(dd,df)261 OP(dd,df) { illegal_1(); op_df(); } /* DB DD */
262
OP(dd,e0)263 OP(dd,e0) { illegal_1(); op_e0(); } /* DB DD */
OP(dd,e1)264 OP(dd,e1) { m_R++; POP(IX); } /* POP IX */
OP(dd,e2)265 OP(dd,e2) { illegal_1(); op_e2(); } /* DB DD */
OP(dd,e3)266 OP(dd,e3) { m_R++; EXSP(IX); } /* EX (SP),IX */
OP(dd,e4)267 OP(dd,e4) { illegal_1(); op_e4(); } /* DB DD */
OP(dd,e5)268 OP(dd,e5) { m_R++; PUSH( IX ); } /* PUSH IX */
OP(dd,e6)269 OP(dd,e6) { illegal_1(); op_e6(); } /* DB DD */
OP(dd,e7)270 OP(dd,e7) { illegal_1(); op_e7(); } /* DB DD */
271
OP(dd,e8)272 OP(dd,e8) { illegal_1(); op_e8(); } /* DB DD */
OP(dd,e9)273 OP(dd,e9) { m_R++; _PC = _IX; } /* JP (IX) */
OP(dd,ea)274 OP(dd,ea) { illegal_1(); op_ea(); } /* DB DD */
OP(dd,eb)275 OP(dd,eb) { illegal_1(); op_eb(); } /* DB DD */
OP(dd,ec)276 OP(dd,ec) { illegal_1(); op_ec(); } /* DB DD */
OP(dd,ed)277 OP(dd,ed) { illegal_1(); op_ed(); } /* DB DD */
OP(dd,ee)278 OP(dd,ee) { illegal_1(); op_ee(); } /* DB DD */
OP(dd,ef)279 OP(dd,ef) { illegal_1(); op_ef(); } /* DB DD */
280
OP(dd,f0)281 OP(dd,f0) { illegal_1(); op_f0(); } /* DB DD */
OP(dd,f1)282 OP(dd,f1) { illegal_1(); op_f1(); } /* DB DD */
OP(dd,f2)283 OP(dd,f2) { illegal_1(); op_f2(); } /* DB DD */
OP(dd,f3)284 OP(dd,f3) { illegal_1(); op_f3(); } /* DB DD */
OP(dd,f4)285 OP(dd,f4) { illegal_1(); op_f4(); } /* DB DD */
OP(dd,f5)286 OP(dd,f5) { illegal_1(); op_f5(); } /* DB DD */
OP(dd,f6)287 OP(dd,f6) { illegal_1(); op_f6(); } /* DB DD */
OP(dd,f7)288 OP(dd,f7) { illegal_1(); op_f7(); } /* DB DD */
289
OP(dd,f8)290 OP(dd,f8) { illegal_1(); op_f8(); } /* DB DD */
OP(dd,f9)291 OP(dd,f9) { m_R++; _SP = _IX; } /* LD SP,IX */
OP(dd,fa)292 OP(dd,fa) { illegal_1(); op_fa(); } /* DB DD */
OP(dd,fb)293 OP(dd,fb) { illegal_1(); op_fb(); } /* DB DD */
OP(dd,fc)294 OP(dd,fc) { illegal_1(); op_fc(); } /* DB DD */
OP(dd,fd)295 OP(dd,fd) { illegal_1(); op_fd(); } /* DB DD */
OP(dd,fe)296 OP(dd,fe) { illegal_1(); op_fe(); } /* DB DD */
OP(dd,ff)297 OP(dd,ff) { illegal_1(); op_ff(); } /* DB DD */
298