Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
716 | lvd | 1 | #include "defs.h" |
2 | #include "tables.h" |
||
3 | #include "op_noprefix.h" |
||
4 | #include "op_fd.h" |
||
5 | |||
6 | /* FD prefix opcodes */ |
||
7 | |||
8 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 9 | static Z80OPCODE opy_09(Z80 *cpu) { // add iy,bc |
716 | lvd | 10 | cpu->memptr = cpu->iy+1; |
11 | cpu->f = (cpu->f & ~(NF | CF | F5 | F3 | HF)); |
||
12 | cpu->f |= (((cpu->iy & 0x0FFF) + (cpu->bc & 0x0FFF)) >> 8) & 0x10; /* HF */ |
||
13 | cpu->iy = (cpu->iy & 0xFFFF) + (cpu->bc & 0xFFFF); |
||
14 | if (cpu->iy & 0x10000) cpu->f |= CF; |
||
15 | cpu->f |= (cpu->yh & (F5 | F3)); |
||
16 | cpu->t += 7; |
||
17 | } |
||
784 | DimkaM | 18 | static Z80OPCODE opy_19(Z80 *cpu) { // add iy,de |
716 | lvd | 19 | cpu->memptr = cpu->iy+1; |
20 | cpu->f = (cpu->f & ~(NF | CF | F5 | F3 | HF)); |
||
21 | cpu->f |= (((cpu->iy & 0x0FFF) + (cpu->de & 0x0FFF)) >> 8) & 0x10; /* HF */ |
||
22 | cpu->iy = (cpu->iy & 0xFFFF) + (cpu->de & 0xFFFF); |
||
23 | if (cpu->iy & 0x10000) cpu->f |= CF; |
||
24 | cpu->f |= (cpu->yh & (F5 | F3)); |
||
25 | cpu->t += 7; |
||
26 | } |
||
27 | //#endif |
||
28 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 29 | static Z80OPCODE opy_21(Z80 *cpu) { // ld iy,nnnn |
716 | lvd | 30 | cpu->yl = cpu->MemIf->xm(cpu->pc++); |
31 | cpu->yh = cpu->MemIf->xm(cpu->pc++); |
||
32 | cpu->t += 6; |
||
33 | } |
||
784 | DimkaM | 34 | static Z80OPCODE opy_22(Z80 *cpu) { // ld (nnnn),iy | M:6 T:20 (4, 4, 3, 3, 3, 3) |
716 | lvd | 35 | unsigned adr = cpu->MemIf->xm(cpu->pc++); |
36 | adr += cpu->MemIf->xm(cpu->pc++)*0x100; |
||
37 | cpu->memptr = adr+1; |
||
38 | cpu->MemIf->wm(adr, cpu->yl); |
||
39 | cpu->MemIf->wm(adr+1, cpu->yh); |
||
40 | cpu->t += 12; |
||
41 | } |
||
42 | //#endif |
||
43 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 44 | static Z80OPCODE opy_23(Z80 *cpu) { // inc iy |
716 | lvd | 45 | cpu->iy++; |
46 | cpu->t += 2; |
||
47 | } |
||
784 | DimkaM | 48 | static Z80OPCODE opy_24(Z80 *cpu) { // inc yh |
716 | lvd | 49 | inc8(cpu, cpu->yh); |
50 | } |
||
784 | DimkaM | 51 | static Z80OPCODE opy_25(Z80 *cpu) { // dec yh |
716 | lvd | 52 | dec8(cpu, cpu->yh); |
53 | } |
||
54 | //#endif |
||
55 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 56 | static Z80OPCODE opy_26(Z80 *cpu) { // ld yh,nn |
716 | lvd | 57 | cpu->yh = cpu->MemIf->xm(cpu->pc++); |
58 | cpu->t += 3; |
||
59 | } |
||
60 | //#endif |
||
61 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 62 | static Z80OPCODE opy_29(Z80 *cpu) { // add iy,iy |
716 | lvd | 63 | cpu->memptr = cpu->iy+1; |
64 | cpu->f = (cpu->f & ~(NF | CF | F5 | F3 | HF)); |
||
65 | cpu->f |= ((cpu->iy >> 7) & 0x10); /* HF */ |
||
66 | cpu->iy = (cpu->iy & 0xFFFF)*2; |
||
67 | if (cpu->iy & 0x10000) cpu->f |= CF; |
||
68 | cpu->f |= (cpu->yh & (F5 | F3)); |
||
69 | cpu->t += 7; |
||
70 | } |
||
71 | //#endif |
||
72 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 73 | static Z80OPCODE opy_2A(Z80 *cpu) { // ld iy,(nnnn) |
716 | lvd | 74 | unsigned adr = cpu->MemIf->xm(cpu->pc++); |
75 | adr += cpu->MemIf->xm(cpu->pc++)*0x100; |
||
76 | cpu->memptr = adr+1; |
||
77 | cpu->yl = cpu->MemIf->rm(adr); |
||
78 | cpu->yh = cpu->MemIf->rm(adr+1); |
||
79 | cpu->t += 12; |
||
80 | } |
||
81 | //#endif |
||
82 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 83 | static Z80OPCODE opy_2B(Z80 *cpu) { // dec iy |
716 | lvd | 84 | cpu->iy--; |
85 | cpu->t += 2; |
||
86 | } |
||
784 | DimkaM | 87 | static Z80OPCODE opy_2C(Z80 *cpu) { // inc yl |
716 | lvd | 88 | inc8(cpu, cpu->yl); |
89 | } |
||
784 | DimkaM | 90 | static Z80OPCODE opy_2D(Z80 *cpu) { // dec yl |
716 | lvd | 91 | dec8(cpu, cpu->yl); |
92 | } |
||
93 | //#endif |
||
94 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 95 | static Z80OPCODE opy_2E(Z80 *cpu) { // ld yl,nn |
716 | lvd | 96 | cpu->yl = cpu->MemIf->xm(cpu->pc++); |
97 | cpu->t += 3; |
||
98 | } |
||
784 | DimkaM | 99 | static Z80OPCODE opy_34(Z80 *cpu) { // inc (iy+nn) | M:6 T:23 (4, 4, 3, 5, 4, 3) |
100 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
101 | unsigned char t = cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs)); |
||
716 | lvd | 102 | inc8(cpu, t); |
784 | DimkaM | 103 | cpu->MemIf->wm(unsigned(int(cpu->iy) + ofs), t); |
716 | lvd | 104 | cpu->t += 15; |
105 | } |
||
784 | DimkaM | 106 | static Z80OPCODE opy_35(Z80 *cpu) { // dec (iy+nn) | M:6 T:23 (4, 4, 3, 5, 4, 3) |
107 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
108 | unsigned char t = cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs)); |
||
716 | lvd | 109 | dec8(cpu, t); |
784 | DimkaM | 110 | cpu->MemIf->wm(unsigned(int(cpu->iy) + ofs), t); |
716 | lvd | 111 | cpu->t += 15; |
112 | } |
||
784 | DimkaM | 113 | static Z80OPCODE opy_36(Z80 *cpu) { // ld (iy+nn),nn | M:5 T:19 (4, 4, 3, 5, 3) |
114 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
115 | cpu->MemIf->wm(unsigned(int(cpu->iy) + ofs), cpu->MemIf->rm(cpu->pc++)); |
||
716 | lvd | 116 | cpu->t += 11; |
117 | } |
||
118 | //#endif |
||
119 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 120 | static Z80OPCODE opy_39(Z80 *cpu) { // add iy,sp |
716 | lvd | 121 | cpu->memptr = cpu->iy+1; |
122 | cpu->f = (cpu->f & ~(NF | CF | F5 | F3 | HF)); |
||
123 | cpu->f |= (((cpu->iy & 0x0FFF) + (cpu->sp & 0x0FFF)) >> 8) & 0x10; /* HF */ |
||
124 | cpu->iy = (cpu->iy & 0xFFFF) + (cpu->sp & 0xFFFF); |
||
125 | if (cpu->iy & 0x10000) cpu->f |= CF; |
||
126 | cpu->f |= (cpu->yh & (F5 | F3)); |
||
127 | cpu->t += 7; |
||
128 | } |
||
784 | DimkaM | 129 | static Z80OPCODE opy_44(Z80 *cpu) { // ld b,yh |
716 | lvd | 130 | cpu->b = cpu->yh; |
131 | } |
||
784 | DimkaM | 132 | static Z80OPCODE opy_45(Z80 *cpu) { // ld b,yl |
716 | lvd | 133 | cpu->b = cpu->yl; |
134 | } |
||
135 | //#endif |
||
136 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 137 | static Z80OPCODE opy_46(Z80 *cpu) { // ld b,(iy+nn) |
138 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
139 | cpu->b = cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs)); |
||
716 | lvd | 140 | cpu->t += 11; |
141 | } |
||
142 | //#endif |
||
143 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 144 | static Z80OPCODE opy_4C(Z80 *cpu) { // ld c,yh |
716 | lvd | 145 | cpu->c = cpu->yh; |
146 | } |
||
784 | DimkaM | 147 | static Z80OPCODE opy_4D(Z80 *cpu) { // ld c,yl |
716 | lvd | 148 | cpu->c = cpu->yl; |
149 | } |
||
150 | //#endif |
||
151 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 152 | static Z80OPCODE opy_4E(Z80 *cpu) { // ld c,(iy+nn) |
153 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
154 | cpu->c = cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs)); |
||
716 | lvd | 155 | cpu->t += 11; |
156 | } |
||
157 | //#endif |
||
158 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 159 | static Z80OPCODE opy_54(Z80 *cpu) { // ld d,yh |
716 | lvd | 160 | cpu->d = cpu->yh; |
161 | } |
||
784 | DimkaM | 162 | static Z80OPCODE opy_55(Z80 *cpu) { // ld d,yl |
716 | lvd | 163 | cpu->d = cpu->yl; |
164 | } |
||
165 | //#endif |
||
166 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 167 | static Z80OPCODE opy_56(Z80 *cpu) { // ld d,(iy+nn) |
168 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
169 | cpu->d = cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs)); |
||
716 | lvd | 170 | cpu->t += 11; |
171 | } |
||
172 | //#endif |
||
173 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 174 | static Z80OPCODE opy_5C(Z80 *cpu) { // ld e,yh |
716 | lvd | 175 | cpu->e = cpu->yh; |
176 | } |
||
784 | DimkaM | 177 | static Z80OPCODE opy_5D(Z80 *cpu) { // ld e,yl |
716 | lvd | 178 | cpu->e = cpu->yl; |
179 | } |
||
180 | //#endif |
||
181 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 182 | static Z80OPCODE opy_5E(Z80 *cpu) { // ld e,(iy+nn) |
183 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
184 | cpu->e = cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs)); |
||
716 | lvd | 185 | cpu->t += 11; |
186 | } |
||
187 | //#endif |
||
188 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 189 | static Z80OPCODE opy_60(Z80 *cpu) { // ld yh,b |
716 | lvd | 190 | cpu->yh = cpu->b; |
191 | } |
||
784 | DimkaM | 192 | static Z80OPCODE opy_61(Z80 *cpu) { // ld yh,c |
716 | lvd | 193 | cpu->yh = cpu->c; |
194 | } |
||
784 | DimkaM | 195 | static Z80OPCODE opy_62(Z80 *cpu) { // ld yh,d |
716 | lvd | 196 | cpu->yh = cpu->d; |
197 | } |
||
784 | DimkaM | 198 | static Z80OPCODE opy_63(Z80 *cpu) { // ld yh,e |
716 | lvd | 199 | cpu->yh = cpu->e; |
200 | } |
||
784 | DimkaM | 201 | static Z80OPCODE opy_65(Z80 *cpu) { // ld yh,yl |
716 | lvd | 202 | cpu->yh = cpu->yl; |
203 | } |
||
204 | //#endif |
||
205 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 206 | static Z80OPCODE opy_66(Z80 *cpu) { // ld h,(iy+nn) |
207 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
208 | cpu->h = cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs)); |
||
716 | lvd | 209 | cpu->t += 11; |
210 | } |
||
211 | //#endif |
||
212 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 213 | static Z80OPCODE opy_67(Z80 *cpu) { // ld yh,a |
716 | lvd | 214 | cpu->yh = cpu->a; |
215 | } |
||
784 | DimkaM | 216 | static Z80OPCODE opy_68(Z80 *cpu) { // ld yl,b |
716 | lvd | 217 | cpu->yl = cpu->b; |
218 | } |
||
784 | DimkaM | 219 | static Z80OPCODE opy_69(Z80 *cpu) { // ld yl,c |
716 | lvd | 220 | cpu->yl = cpu->c; |
221 | } |
||
784 | DimkaM | 222 | static Z80OPCODE opy_6A(Z80 *cpu) { // ld yl,d |
716 | lvd | 223 | cpu->yl = cpu->d; |
224 | } |
||
784 | DimkaM | 225 | static Z80OPCODE opy_6B(Z80 *cpu) { // ld yl,e |
716 | lvd | 226 | cpu->yl = cpu->e; |
227 | } |
||
784 | DimkaM | 228 | static Z80OPCODE opy_6C(Z80 *cpu) { // ld yl,yh |
716 | lvd | 229 | cpu->yl = cpu->yh; |
230 | } |
||
231 | //#endif |
||
232 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 233 | static Z80OPCODE opy_6E(Z80 *cpu) { // ld l,(iy+nn) |
234 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
235 | cpu->l = cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs)); |
||
716 | lvd | 236 | cpu->t += 11; |
237 | } |
||
238 | //#endif |
||
239 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 240 | static Z80OPCODE opy_6F(Z80 *cpu) { // ld yl,a |
716 | lvd | 241 | cpu->yl = cpu->a; |
242 | } |
||
243 | //#endif |
||
244 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 245 | static Z80OPCODE opy_70(Z80 *cpu) { // ld (iy+nn),b | M:5 T:19 (4, 4, 3, 5, 3) |
246 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
247 | cpu->MemIf->wm(unsigned(int(cpu->iy) + ofs), cpu->b); |
||
716 | lvd | 248 | cpu->t += 11; |
249 | } |
||
784 | DimkaM | 250 | static Z80OPCODE opy_71(Z80 *cpu) { // ld (iy+nn),c | M:5 T:19 (4, 4, 3, 5, 3) |
251 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
252 | cpu->MemIf->wm(unsigned(int(cpu->iy) + ofs), cpu->c); |
||
716 | lvd | 253 | cpu->t += 11; |
254 | } |
||
784 | DimkaM | 255 | static Z80OPCODE opy_72(Z80 *cpu) { // ld (iy+nn),d | M:5 T:19 (4, 4, 3, 5, 3) |
256 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
257 | cpu->MemIf->wm(unsigned(int(cpu->iy) + ofs), cpu->d); |
||
716 | lvd | 258 | cpu->t += 11; |
259 | } |
||
784 | DimkaM | 260 | static Z80OPCODE opy_73(Z80 *cpu) { // ld (iy+nn),e | M:5 T:19 (4, 4, 3, 5, 3) |
261 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
262 | cpu->MemIf->wm(unsigned(int(cpu->iy) + ofs), cpu->e); |
||
716 | lvd | 263 | cpu->t += 11; |
264 | } |
||
784 | DimkaM | 265 | static Z80OPCODE opy_74(Z80 *cpu) { // ld (iy+nn),h | M:5 T:19 (4, 4, 3, 5, 3) |
266 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
267 | cpu->MemIf->wm(unsigned(int(cpu->iy) + ofs), cpu->h); |
||
716 | lvd | 268 | cpu->t += 11; |
269 | } |
||
784 | DimkaM | 270 | static Z80OPCODE opy_75(Z80 *cpu) { // ld (iy+nn),l | M:5 T:19 (4, 4, 3, 5, 3) |
271 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
272 | cpu->MemIf->wm(unsigned(int(cpu->iy) + ofs), cpu->l); |
||
716 | lvd | 273 | cpu->t += 11; |
274 | } |
||
784 | DimkaM | 275 | static Z80OPCODE opy_77(Z80 *cpu) { // ld (iy+nn),a | M:5 T:19 (4, 4, 3, 5, 3) |
276 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
277 | cpu->MemIf->wm(unsigned(int(cpu->iy) + ofs), cpu->a); |
||
716 | lvd | 278 | cpu->t += 11; |
279 | } |
||
280 | //#endif |
||
281 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 282 | static Z80OPCODE opy_7C(Z80 *cpu) { // ld a,yh |
716 | lvd | 283 | cpu->a = cpu->yh; |
284 | } |
||
784 | DimkaM | 285 | static Z80OPCODE opy_7D(Z80 *cpu) { // ld a,yl |
716 | lvd | 286 | cpu->a = cpu->yl; |
287 | } |
||
288 | //#endif |
||
289 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 290 | static Z80OPCODE opy_7E(Z80 *cpu) { // ld a,(iy+nn) |
291 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
292 | cpu->a = cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs)); |
||
716 | lvd | 293 | cpu->t += 11; |
294 | } |
||
295 | //#endif |
||
296 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 297 | static Z80OPCODE opy_84(Z80 *cpu) { // add a,yh |
716 | lvd | 298 | add8(cpu, cpu->yh); |
299 | } |
||
784 | DimkaM | 300 | static Z80OPCODE opy_85(Z80 *cpu) { // add a,yl |
716 | lvd | 301 | add8(cpu, cpu->yl); |
302 | } |
||
303 | //#endif |
||
304 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 305 | static Z80OPCODE opy_86(Z80 *cpu) { // add a,(iy+nn) |
306 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
307 | add8(cpu, cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs))); |
||
716 | lvd | 308 | cpu->t += 11; |
309 | } |
||
310 | //#endif |
||
311 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 312 | static Z80OPCODE opy_8C(Z80 *cpu) { // adc a,yh |
716 | lvd | 313 | adc8(cpu, cpu->yh); |
314 | } |
||
784 | DimkaM | 315 | static Z80OPCODE opy_8D(Z80 *cpu) { // adc a,yl |
716 | lvd | 316 | adc8(cpu, cpu->yl); |
317 | } |
||
318 | //#endif |
||
319 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 320 | static Z80OPCODE opy_8E(Z80 *cpu) { // adc a,(iy+nn) |
321 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
322 | adc8(cpu, cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs))); |
||
716 | lvd | 323 | cpu->t += 11; |
324 | } |
||
325 | //#endif |
||
326 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 327 | static Z80OPCODE opy_94(Z80 *cpu) { // sub yh |
716 | lvd | 328 | sub8(cpu, cpu->yh); |
329 | } |
||
784 | DimkaM | 330 | static Z80OPCODE opy_95(Z80 *cpu) { // sub yl |
716 | lvd | 331 | sub8(cpu, cpu->yl); |
332 | } |
||
333 | //#endif |
||
334 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 335 | static Z80OPCODE opy_96(Z80 *cpu) { // sub (iy+nn) |
336 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
337 | sub8(cpu, cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs))); |
||
716 | lvd | 338 | cpu->t += 11; |
339 | } |
||
340 | //#endif |
||
341 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 342 | static Z80OPCODE opy_9C(Z80 *cpu) { // sbc a,yh |
716 | lvd | 343 | sbc8(cpu, cpu->yh); |
344 | } |
||
784 | DimkaM | 345 | static Z80OPCODE opy_9D(Z80 *cpu) { // sbc a,yl |
716 | lvd | 346 | sbc8(cpu, cpu->yl); |
347 | } |
||
348 | //#endif |
||
349 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 350 | static Z80OPCODE opy_9E(Z80 *cpu) { // sbc a,(iy+nn) |
351 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
352 | sbc8(cpu, cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs))); |
||
716 | lvd | 353 | cpu->t += 11; |
354 | } |
||
355 | //#endif |
||
356 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 357 | static Z80OPCODE opy_A4(Z80 *cpu) { // and yh |
716 | lvd | 358 | and8(cpu, cpu->yh); |
359 | } |
||
784 | DimkaM | 360 | static Z80OPCODE opy_A5(Z80 *cpu) { // and yl |
716 | lvd | 361 | and8(cpu, cpu->yl); |
362 | } |
||
363 | //#endif |
||
364 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 365 | static Z80OPCODE opy_A6(Z80 *cpu) { // and (iy+nn) |
366 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
367 | and8(cpu, cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs))); |
||
716 | lvd | 368 | cpu->t += 11; |
369 | } |
||
370 | //#endif |
||
371 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 372 | static Z80OPCODE opy_AC(Z80 *cpu) { // xor yh |
716 | lvd | 373 | xor8(cpu, cpu->yh); |
374 | } |
||
784 | DimkaM | 375 | static Z80OPCODE opy_AD(Z80 *cpu) { // xor yl |
716 | lvd | 376 | xor8(cpu, cpu->yl); |
377 | } |
||
378 | //#endif |
||
379 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 380 | static Z80OPCODE opy_AE(Z80 *cpu) { // xor (iy+nn) |
381 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
382 | xor8(cpu, cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs))); |
||
716 | lvd | 383 | cpu->t += 11; |
384 | } |
||
385 | //#endif |
||
386 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 387 | static Z80OPCODE opy_B4(Z80 *cpu) { // or yh |
716 | lvd | 388 | or8(cpu, cpu->yh); |
389 | } |
||
784 | DimkaM | 390 | static Z80OPCODE opy_B5(Z80 *cpu) { // or yl |
716 | lvd | 391 | or8(cpu, cpu->yl); |
392 | } |
||
393 | //#endif |
||
394 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 395 | static Z80OPCODE opy_B6(Z80 *cpu) { // or (iy+nn) |
396 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
397 | or8(cpu, cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs))); |
||
716 | lvd | 398 | cpu->t += 11; |
399 | } |
||
400 | //#endif |
||
401 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 402 | static Z80OPCODE opy_BC(Z80 *cpu) { // cp yh |
716 | lvd | 403 | cp8(cpu, cpu->yh); |
404 | } |
||
784 | DimkaM | 405 | static Z80OPCODE opy_BD(Z80 *cpu) { // cp yl |
716 | lvd | 406 | cp8(cpu, cpu->yl); |
407 | } |
||
408 | //#endif |
||
409 | //#ifndef Z80_COMMON |
||
784 | DimkaM | 410 | static Z80OPCODE opy_BE(Z80 *cpu) { // cp (iy+nn) |
411 | signed char ofs = i8(cpu->MemIf->xm(cpu->pc++)); |
||
412 | cp8(cpu, cpu->MemIf->rm(unsigned(int(cpu->iy) + ofs))); |
||
716 | lvd | 413 | cpu->t += 11; |
414 | } |
||
784 | DimkaM | 415 | static Z80OPCODE opy_E1(Z80 *cpu) { // pop iy |
716 | lvd | 416 | cpu->yl = cpu->MemIf->rm(cpu->sp++); |
417 | cpu->yh = cpu->MemIf->rm(cpu->sp++); |
||
418 | cpu->t += 6; |
||
419 | } |
||
784 | DimkaM | 420 | static Z80OPCODE opy_E3(Z80 *cpu) { // ex (sp),iy | M:6 T:23 (4, 4, 3, 4, 3, 5) |
716 | lvd | 421 | unsigned tmp = cpu->MemIf->rm(cpu->sp) + 0x100*cpu->MemIf->rm(cpu->sp + 1); |
422 | cpu->MemIf->wm(cpu->sp, cpu->yl); |
||
423 | cpu->MemIf->wm(cpu->sp+1, cpu->yh); |
||
424 | cpu->memptr = tmp; |
||
425 | cpu->iy = tmp; |
||
426 | cpu->t += 15; |
||
427 | } |
||
784 | DimkaM | 428 | static Z80OPCODE opy_E5(Z80 *cpu) { // push iy | M:4 T:15 (4, 5, 3, 3) |
716 | lvd | 429 | cpu->MemIf->wm(--cpu->sp, cpu->yh); |
430 | cpu->MemIf->wm(--cpu->sp, cpu->yl); |
||
431 | cpu->t += 7; |
||
432 | } |
||
433 | //#endif |
||
434 | //#ifdef Z80_COMMON |
||
784 | DimkaM | 435 | static Z80OPCODE opy_E9(Z80 *cpu) { // jp (iy) |
436 | cpu->last_branch = u16(cpu->pc-2); |
||
716 | lvd | 437 | cpu->pc = cpu->iy; |
438 | } |
||
784 | DimkaM | 439 | static Z80OPCODE opy_F9(Z80 *cpu) { // ld sp,iy |
716 | lvd | 440 | cpu->sp = cpu->iy; |
441 | cpu->t += 2; |
||
442 | } |
||
443 | //#endif |
||
444 | //#ifndef Z80_COMMON |
||
445 | |||
446 | STEPFUNC const iy_opcode[0x100] = { |
||
447 | |||
448 | op_00, op_01, op_02, op_03, op_04, op_05, op_06, op_07, |
||
449 | op_08, opy_09, op_0A, op_0B, op_0C, op_0D, op_0E, op_0F, |
||
450 | op_10, op_11, op_12, op_13, op_14, op_15, op_16, op_17, |
||
451 | op_18, opy_19, op_1A, op_1B, op_1C, op_1D, op_1E, op_1F, |
||
452 | op_20, opy_21, opy_22, opy_23, opy_24, opy_25, opy_26, op_27, |
||
453 | op_28, opy_29, opy_2A, opy_2B, opy_2C, opy_2D, opy_2E, op_2F, |
||
454 | op_30, op_31, op_32, op_33, opy_34, opy_35, opy_36, op_37, |
||
455 | op_38, opy_39, op_3A, op_3B, op_3C, op_3D, op_3E, op_3F, |
||
456 | |||
457 | op_40, op_41, op_42, op_43, opy_44, opy_45, opy_46, op_47, |
||
458 | op_48, op_49, op_4A, op_4B, opy_4C, opy_4D, opy_4E, op_4F, |
||
459 | op_50, op_51, op_52, op_53, opy_54, opy_55, opy_56, op_57, |
||
460 | op_58, op_59, op_5A, op_5B, opy_5C, opy_5D, opy_5E, op_5F, |
||
461 | opy_60, opy_61, opy_62, opy_63, op_64, opy_65, opy_66, opy_67, |
||
462 | opy_68, opy_69, opy_6A, opy_6B, opy_6C, op_6D, opy_6E, opy_6F, |
||
463 | opy_70, opy_71, opy_72, opy_73, opy_74, opy_75, op_76, opy_77, |
||
464 | op_78, op_79, op_7A, op_7B, opy_7C, opy_7D, opy_7E, op_7F, |
||
465 | |||
466 | op_80, op_81, op_82, op_83, opy_84, opy_85, opy_86, op_87, |
||
467 | op_88, op_89, op_8A, op_8B, opy_8C, opy_8D, opy_8E, op_8F, |
||
468 | op_90, op_91, op_92, op_93, opy_94, opy_95, opy_96, op_97, |
||
469 | op_98, op_99, op_9A, op_9B, opy_9C, opy_9D, opy_9E, op_9F, |
||
470 | op_A0, op_A1, op_A2, op_A3, opy_A4, opy_A5, opy_A6, op_A7, |
||
471 | op_A8, op_A9, op_AA, op_AB, opy_AC, opy_AD, opy_AE, op_AF, |
||
472 | op_B0, op_B1, op_B2, op_B3, opy_B4, opy_B5, opy_B6, op_B7, |
||
473 | op_B8, op_B9, op_BA, op_BB, opy_BC, opy_BD, opy_BE, op_BF, |
||
474 | |||
475 | op_C0, op_C1, op_C2, op_C3, op_C4, op_C5, op_C6, op_C7, |
||
476 | op_C8, op_C9, op_CA, op_CB, op_CC, op_CD, op_CE, op_CF, |
||
477 | op_D0, op_D1, op_D2, op_D3, op_D4, op_D5, op_D6, op_D7, |
||
478 | op_D8, op_D9, op_DA, op_DB, op_DC, op_DD, op_DE, op_DF, |
||
479 | op_E0, opy_E1, op_E2, opy_E3, op_E4, opy_E5, op_E6, op_E7, |
||
480 | op_E8, opy_E9, op_EA, op_EB, op_EC, op_ED, op_EE, op_EF, |
||
481 | op_F0, op_F1, op_F2, op_F3, op_F4, op_F5, op_F6, op_F7, |
||
482 | op_F8, opy_F9, op_FA, op_FB, op_FC, op_FD, op_FE, op_FF, |
||
483 | |||
484 | }; |
||
485 | //#endif |