Mercurial > repos > blastem
comparison z80.cpu @ 2440:338c78da3fff
Added a little syntax sugar to CPU DSL and started updating new Z80 core to use it
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 11 Feb 2024 17:26:52 -0800 |
parents | 1dc718581aac |
children | 4435abe5db5e |
comparison
equal
deleted
inserted
replaced
2439:a66916828c9b | 2440:338c78da3fff |
---|---|
76 C 0 carry chflags.7 | 76 C 0 carry chflags.7 |
77 | 77 |
78 | 78 |
79 z80_op_fetch | 79 z80_op_fetch |
80 cycles 1 | 80 cycles 1 |
81 add 1 r r | 81 r += 1 |
82 mov pc scratch1 | 82 scratch1 = pc |
83 ocall read_8 | 83 ocall read_8 |
84 add 1 pc pc | 84 pc += 1 |
85 | 85 |
86 z80_run_op | 86 z80_run_op |
87 #printf "Z80: %X @ %d\n" pc cycles | 87 #printf "Z80: %X @ %d\n" pc cycles |
88 #printf "Z80: %X - A: %X, B: %X, C: %X D: %X, E: %X, H: %X, L: %X, SP: %X, IX: %X, IY: %X @ %d\n" pc a b c d e h l sp ix iy cycles | 88 #printf "Z80: %X - A: %X, B: %X, C: %X D: %X, E: %X, H: %X, L: %X, SP: %X, IX: %X, IY: %X @ %d\n" pc a b c d e h l sp ix iy cycles |
89 z80_op_fetch | 89 z80_op_fetch |
91 | 91 |
92 z80_interrupt | 92 z80_interrupt |
93 cmp int_cycle cycles | 93 cmp int_cycle cycles |
94 if >=U | 94 if >=U |
95 | 95 |
96 mov 0 iff1 | 96 iff1 = 0 |
97 mov 0 iff2 | 97 iff2 = 0 |
98 cycles 6 | 98 cycles 6 |
99 update_sync | 99 update_sync |
100 | 100 |
101 switch imode | 101 switch imode |
102 case 0 | 102 case 0 |
103 dispatch int_value | 103 dispatch int_value |
104 | 104 |
105 case 1 | 105 case 1 |
106 dispatch 0xFF | 106 dispatch 0xFF |
107 | 107 |
108 case 2 | 108 case 2 |
109 lsl i 8 pc | 109 lsl i 8 pc |
110 or int_value pc pc | 110 pc |= int_value |
111 #CD is call | 111 #CD is call |
112 dispatch 0xCD | 112 dispatch 0xCD |
113 end | 113 end |
114 | 114 |
115 else | 115 else |
116 | 116 |
117 cmp nmi_cycle cycles | 117 cmp nmi_cycle cycles |
118 if >=U | 118 if >=U |
119 | 119 |
120 mov 0xFFFFFFFF nmi_cycle | 120 nmi_cycle = 0xFFFFFFFF |
121 mov 0 iff1 | 121 iff1 = 0 |
122 local pch 8 | 122 local pch 8 |
123 lsr pc 8 pch | 123 lsr pc 8 pch |
124 meta high pch | 124 meta high pch |
125 meta low pc | 125 meta low pc |
126 z80_push | 126 z80_push |
127 mov 0x66 pc | 127 pc = 0x66 |
128 update_sync | 128 update_sync |
129 | 129 |
130 end | 130 end |
131 end | 131 end |
132 | 132 |
133 | 133 |
134 11001011 cb_prefix | 134 11001011 cb_prefix |
135 z80_op_fetch | 135 z80_op_fetch |
148 dispatch scratch1 fd | 148 dispatch scratch1 fd |
149 | 149 |
150 dd 11001011 ddcb_prefix | 150 dd 11001011 ddcb_prefix |
151 z80_calc_index ix | 151 z80_calc_index ix |
152 cycles 2 | 152 cycles 2 |
153 mov pc scratch1 | 153 scratch1 = pc |
154 ocall read_8 | 154 ocall read_8 |
155 add 1 pc pc | 155 pc += 1 |
156 dispatch scratch1 ddcb | 156 dispatch scratch1 ddcb |
157 | 157 |
158 fd 11001011 fdcb_prefix | 158 fd 11001011 fdcb_prefix |
159 z80_calc_index iy | 159 z80_calc_index iy |
160 cycles 2 | 160 cycles 2 |
161 mov pc scratch1 | 161 scratch1 = pc |
162 ocall read_8 | 162 ocall read_8 |
163 add 1 pc pc | 163 pc += 1 |
164 dispatch scratch1 fdcb | 164 dispatch scratch1 fdcb |
165 | 165 |
166 z80_check_cond | 166 z80_check_cond |
167 arg cond 8 | 167 arg cond 8 |
168 local invert 8 | 168 local invert 8 |
169 switch cond | 169 switch cond |
170 case 0 | 170 case 0 |
171 meta istrue invert | 171 meta istrue invert |
172 lnot zflag invert | 172 lnot zflag invert |
173 | 173 |
174 case 1 | 174 case 1 |
175 meta istrue zflag | 175 meta istrue zflag |
176 | 176 |
177 case 2 | 177 case 2 |
178 meta istrue invert | 178 meta istrue invert |
179 not chflags invert | 179 not chflags invert |
180 and 0x80 invert invert | 180 invert &= 0x80 |
181 | 181 |
182 case 3 | 182 case 3 |
183 meta istrue invert | 183 meta istrue invert |
184 and 0x80 chflags invert | 184 and 0x80 chflags invert |
185 | 185 |
186 case 4 | 186 case 4 |
187 meta istrue invert | 187 meta istrue invert |
188 lnot pvflag invert | 188 lnot pvflag invert |
189 | 189 |
190 case 5 | 190 case 5 |
191 meta istrue pvflag | 191 meta istrue pvflag |
192 | 192 |
193 case 6 | 193 case 6 |
194 meta istrue invert | 194 meta istrue invert |
195 not last_flag_result invert | 195 not last_flag_result invert |
196 and 0x80 invert invert | 196 invert &= 0x80 |
197 | 197 |
198 case 7 | 198 case 7 |
199 meta istrue invert | 199 meta istrue invert |
200 and 0x80 last_flag_result invert | 200 and 0x80 last_flag_result invert |
201 | |
202 end | 201 end |
203 | 202 |
204 z80_fetch_hl | 203 z80_fetch_hl |
205 lsl h 8 scratch1 | 204 lsl h 8 scratch1 |
206 or l scratch1 scratch1 | 205 scratch1 |= l |
207 ocall read_8 | 206 ocall read_8 |
208 | 207 |
209 z80_store_hl | 208 z80_store_hl |
210 lsl h 8 scratch2 | 209 lsl h 8 scratch2 |
211 or l scratch2 scratch2 | 210 scratch2 |= l |
212 ocall write_8 | 211 ocall write_8 |
213 | 212 |
214 z80_fetch_immed | 213 z80_fetch_immed |
215 mov pc scratch1 | 214 scratch1 = pc |
216 ocall read_8 | 215 ocall read_8 |
217 add 1 pc pc | 216 pc += 1 |
218 | 217 |
219 z80_fetch_immed16 | 218 z80_fetch_immed16 |
220 mov pc scratch1 | 219 scratch1 = pc |
221 ocall read_8 | 220 ocall read_8 |
222 mov scratch1 wz | 221 wz = scratch1 |
223 add 1 pc pc | 222 pc += 1 |
224 mov pc scratch1 | 223 scratch1 = pc |
225 ocall read_8 | 224 ocall read_8 |
226 add 1 pc pc | 225 pc += 1 |
227 lsl scratch1 8 scratch1 | 226 scratch1 <<= 8 |
228 or scratch1 wz wz | 227 wz |= scratch1 |
229 | 228 |
230 z80_fetch_immed_reg16 | 229 z80_fetch_immed_reg16 |
231 mov pc scratch1 | 230 scratch1 = pc |
232 ocall read_8 | 231 ocall read_8 |
233 mov scratch1 low | 232 low = scratch1 |
234 add 1 pc pc | 233 pc += 1 |
235 mov pc scratch1 | 234 scratch1 = pc |
236 ocall read_8 | 235 ocall read_8 |
237 mov scratch1 high | 236 high = scratch1 |
238 add 1 pc pc | 237 pc += 1 |
239 | 238 |
240 z80_fetch_immed_to_reg16 | 239 z80_fetch_immed_to_reg16 |
241 mov pc scratch1 | 240 scratch1 = pc |
242 ocall read_8 | 241 ocall read_8 |
243 mov scratch1 reg | 242 reg = scratch1 |
244 add 1 pc pc | 243 pc += 1 |
245 mov pc scratch1 | 244 scratch1 = pc |
246 ocall read_8 | 245 ocall read_8 |
247 add 1 pc pc | 246 pc += 1 |
248 lsl scratch1 8 scratch1 | 247 scratch1 <<= 8 |
249 or scratch1 reg reg | 248 reg |= scratch1 |
250 | 249 |
251 01RRR110 ld_from_hl | 250 01RRR110 ld_from_hl |
252 z80_fetch_hl | 251 z80_fetch_hl |
253 mov scratch1 main.R | 252 main.R = scratch1 |
254 | 253 |
255 01DDDSSS ld_from_reg | 254 01DDDSSS ld_from_reg |
256 mov main.S main.D | 255 main.D = main.S |
257 | 256 |
258 dd 01DDD100 ld_from_ixh | 257 dd 01DDD100 ld_from_ixh |
259 invalid D 6 | 258 invalid D 6 |
260 lsr ix 8 main.D | 259 lsr ix 8 main.D |
261 | 260 |
262 dd 01100SSS ld_to_ixh | 261 dd 01100SSS ld_to_ixh |
263 invalid S 6 | 262 invalid S 6 |
264 local tmp 16 | 263 local tmp 16 |
265 and 0xFF ix ix | 264 ix &= 0xFF |
266 lsl main.S 8 tmp | 265 lsl main.S 8 tmp |
267 or tmp ix ix | 266 ix |= tmp |
268 | 267 |
269 dd 0110D10S ld_ixb_to_ixb | 268 dd 0110D10S ld_ixb_to_ixb |
270 | 269 |
271 dd 01DDD101 ld_from_ixl | 270 dd 01DDD101 ld_from_ixl |
272 invalid D 6 | 271 invalid D 6 |
273 mov ix main.D | 272 main.D = ix |
274 | 273 |
275 dd 01101SSS ld_to_ixl | 274 dd 01101SSS ld_to_ixl |
276 invalid S 6 | 275 invalid S 6 |
277 and 0xFF00 ix ix | 276 ix &= 0xFF00 |
278 or main.S ix ix | 277 ix |= main.S |
279 | 278 |
280 dd 01100101 ld_ixl_to_ixh | 279 dd 01100101 ld_ixl_to_ixh |
281 local tmp 16 | 280 local tmp 16 |
282 lsl ix 8 tmp | 281 lsl ix 8 tmp |
283 and 0xFF ix ix | 282 ix &= 0xFF |
284 or tmp ix ix | 283 ix |= tmp |
285 | 284 |
286 dd 01101100 ld_ixh_to_ixl | 285 dd 01101100 ld_ixh_to_ixl |
287 local tmp 16 | 286 local tmp 16 |
288 lsr ix 8 tmp | 287 lsr ix 8 tmp |
289 and 0xFF00 ix ix | 288 ix &= 0xFF00 |
290 or tmp ix ix | 289 ix |= tmp |
291 | 290 |
292 fd 01DDD100 ld_from_iyh | 291 fd 01DDD100 ld_from_iyh |
293 invalid D 6 | 292 invalid D 6 |
294 lsr iy 8 main.D | 293 lsr iy 8 main.D |
295 | 294 |
296 fd 01100SSS ld_to_iyh | 295 fd 01100SSS ld_to_iyh |
297 invalid S 6 | 296 invalid S 6 |
298 local tmp 16 | 297 local tmp 16 |
299 and 0xFF iy iy | 298 iy &= 0xFF |
300 lsl main.S 8 tmp | 299 lsl main.S 8 tmp |
301 or tmp iy iy | 300 iy |= tmp |
302 | 301 |
303 fd 0110D10S ld_iyb_to_iyb | 302 fd 0110D10S ld_iyb_to_iyb |
304 | 303 |
305 fd 01DDD101 ld_from_iyl | 304 fd 01DDD101 ld_from_iyl |
306 invalid D 6 | 305 invalid D 6 |
307 mov iy main.D | 306 main.D = iy |
308 | 307 |
309 fd 01101SSS ld_to_iyl | 308 fd 01101SSS ld_to_iyl |
310 invalid S 6 | 309 invalid S 6 |
311 and 0xFF00 iy iy | 310 iy &= 0xFF00 |
312 or main.S iy iy | 311 iy |= main.S |
313 | 312 |
314 fd 01100101 ld_iyl_to_iyh | 313 fd 01100101 ld_iyl_to_iyh |
315 local tmp 16 | 314 local tmp 16 |
316 lsl iy 8 tmp | 315 lsl iy 8 tmp |
317 and 0xFF iy iy | 316 iy &= 0xFF |
318 or tmp iy iy | 317 iy |= tmp |
319 | 318 |
320 fd 01101100 ld_iyh_to_iyl | 319 fd 01101100 ld_iyh_to_iyl |
321 local tmp 16 | 320 local tmp 16 |
322 lsr iy 8 tmp | 321 lsr iy 8 tmp |
323 and 0xFF00 iy iy | 322 iy &= 0xFF00 |
324 or tmp iy iy | 323 iy |= tmp |
325 | 324 |
326 z80_calc_index | 325 z80_calc_index |
327 arg index 16 | 326 arg index 16 |
328 mov index wz | 327 wz = index |
329 z80_fetch_immed | 328 z80_fetch_immed |
330 sext 16 scratch1 scratch1 | 329 sext 16 scratch1 scratch1 |
331 add scratch1 wz wz | 330 wz += scratch1 |
332 | 331 |
333 z80_fetch_index | 332 z80_fetch_index |
334 arg index 16 | 333 arg index 16 |
335 z80_calc_index index | 334 z80_calc_index index |
336 mov wz scratch1 | 335 scratch1 = wz |
337 cycles 5 | 336 cycles 5 |
338 ocall read_8 | 337 ocall read_8 |
339 | 338 |
340 z80_store_index | 339 z80_store_index |
341 mov wz scratch2 | 340 scratch2 = wz |
342 ocall write_8 | 341 ocall write_8 |
343 | 342 |
344 dd 01RRR110 ld_from_ix | 343 dd 01RRR110 ld_from_ix |
345 z80_fetch_index ix | 344 z80_fetch_index ix |
346 mov scratch1 main.R | 345 main.R = scratch1 |
347 | 346 |
348 fd 01RRR110 ld_from_iy | 347 fd 01RRR110 ld_from_iy |
349 z80_fetch_index iy | 348 z80_fetch_index iy |
350 mov scratch1 main.R | 349 main.R = scratch1 |
351 | 350 |
352 00RRR110 ld_immed | 351 00RRR110 ld_immed |
353 z80_fetch_immed | 352 z80_fetch_immed |
354 mov scratch1 main.R | 353 main.R = scratch1 |
355 | 354 |
356 dd 00100110 ld_immed_ixh | 355 dd 00100110 ld_immed_ixh |
357 z80_fetch_immed | 356 z80_fetch_immed |
358 lsl scratch1 8 scratch1 | 357 scratch1 <<= 8 |
359 and 0xFF ix ix | 358 ix &= 0xFF |
360 or scratch1 ix ix | 359 ix |= scratch1 |
361 | 360 |
362 dd 00101110 ld_immed_ixl | 361 dd 00101110 ld_immed_ixl |
363 z80_fetch_immed | 362 z80_fetch_immed |
364 and 0xFF00 ix ix | 363 ix &= 0xFF00 |
365 or scratch1 ix ix | 364 ix |= scratch1 |
366 | 365 |
367 fd 00100110 ld_immed_iyh | 366 fd 00100110 ld_immed_iyh |
368 z80_fetch_immed | 367 z80_fetch_immed |
369 lsl scratch1 8 scratch1 | 368 scratch1 <<= 8 |
370 and 0xFF iy iy | 369 iy &= 0xFF |
371 or scratch1 iy iy | 370 iy |= scratch1 |
372 | 371 |
373 fd 00101110 ld_immed_iyl | 372 fd 00101110 ld_immed_iyl |
374 z80_fetch_immed | 373 z80_fetch_immed |
375 and 0xFF00 iy iy | 374 iy &= 0xFF00 |
376 or scratch1 iy iy | 375 iy |= scratch1 |
377 | 376 |
378 01110RRR ld_to_hl | 377 01110RRR ld_to_hl |
379 mov main.R scratch1 | 378 scratch1 = main.R |
380 z80_store_hl | 379 z80_store_hl |
381 | 380 |
382 dd 01110RRR ld_to_ix | 381 dd 01110RRR ld_to_ix |
383 z80_calc_index ix | 382 z80_calc_index ix |
384 mov wz scratch2 | 383 scratch2 = wz |
385 mov main.R scratch1 | 384 scratch1 = main.R |
386 cycles 5 | 385 cycles 5 |
387 ocall write_8 | 386 ocall write_8 |
388 | 387 |
389 fd 01110RRR ld_to_iy | 388 fd 01110RRR ld_to_iy |
390 z80_calc_index iy | 389 z80_calc_index iy |
391 mov wz scratch2 | 390 scratch2 = wz |
392 mov main.R scratch1 | 391 scratch1 = main.R |
393 cycles 5 | 392 cycles 5 |
394 ocall write_8 | 393 ocall write_8 |
395 | 394 |
396 00110110 ld_to_hl_immed | 395 00110110 ld_to_hl_immed |
397 z80_fetch_immed | 396 z80_fetch_immed |
399 | 398 |
400 dd 00110110 ld_to_ixd_immed | 399 dd 00110110 ld_to_ixd_immed |
401 z80_calc_index ix | 400 z80_calc_index ix |
402 z80_fetch_immed | 401 z80_fetch_immed |
403 cycles 2 | 402 cycles 2 |
404 mov wz scratch2 | 403 scratch2 = wz |
405 ocall write_8 | 404 ocall write_8 |
406 | 405 |
407 fd 00110110 ld_to_iyd_immed | 406 fd 00110110 ld_to_iyd_immed |
408 z80_calc_index iy | 407 z80_calc_index iy |
409 z80_fetch_immed | 408 z80_fetch_immed |
410 cycles 2 | 409 cycles 2 |
411 mov wz scratch2 | 410 scratch2 = wz |
412 ocall write_8 | 411 ocall write_8 |
413 | 412 |
414 00001010 ld_a_from_bc | 413 00001010 ld_a_from_bc |
415 lsl b 8 wz | 414 lsl b 8 wz |
416 or c wz wz | 415 wz |= c |
417 mov wz scratch1 | 416 scratch1 = wz |
418 add 1 wz wz | 417 wz += 1 |
419 ocall read_8 | 418 ocall read_8 |
420 mov scratch1 a | 419 a = scratch1 |
421 | 420 |
422 00011010 ld_a_from_de | 421 00011010 ld_a_from_de |
423 lsl d 8 wz | 422 lsl d 8 wz |
424 or e wz wz | 423 wz |= e |
425 mov wz scratch1 | 424 scratch1 = wz |
426 add 1 wz wz | 425 wz += 1 |
427 ocall read_8 | 426 ocall read_8 |
428 mov scratch1 a | 427 a = scratch1 |
429 | 428 |
430 00111010 ld_a_from_immed | 429 00111010 ld_a_from_immed |
431 z80_fetch_immed16 | 430 z80_fetch_immed16 |
432 mov wz scratch1 | 431 scratch1 = wz |
433 add 1 wz wz | 432 wz += 1 |
434 ocall read_8 | 433 ocall read_8 |
435 mov scratch1 a | 434 a = scratch1 |
436 | 435 |
437 00000010 ld_a_to_bc | 436 00000010 ld_a_to_bc |
438 local tmp 8 | 437 local tmp 8 |
439 lsl b 8 scratch2 | 438 lsl b 8 scratch2 |
440 or c scratch2 scratch2 | 439 scratch2 |= c |
441 mov a scratch1 | 440 scratch1 = a |
442 add c 1 tmp | 441 add c 1 tmp |
443 lsl a 8 wz | 442 lsl a 8 wz |
444 or tmp wz wz | 443 wz |= tmp |
445 ocall write_8 | 444 ocall write_8 |
446 | 445 |
447 00010010 ld_a_to_de | 446 00010010 ld_a_to_de |
448 local tmp 8 | 447 local tmp 8 |
449 lsl d 8 scratch2 | 448 lsl d 8 scratch2 |
450 or e scratch2 scratch2 | 449 scratch2 |= e |
451 mov a scratch1 | 450 scratch1 = a |
452 add e 1 tmp | 451 add e 1 tmp |
453 lsl a 8 wz | 452 lsl a 8 wz |
454 or tmp wz wz | 453 wz |= tmp |
455 ocall write_8 | 454 ocall write_8 |
456 | 455 |
457 00110010 ld_a_to_immed | 456 00110010 ld_a_to_immed |
458 local tmp 16 | 457 local tmp 16 |
459 z80_fetch_immed16 | 458 z80_fetch_immed16 |
460 mov wz scratch2 | 459 scratch2 = wz |
461 mov a scratch1 | 460 scratch1 = a |
462 add 1 wz wz | 461 wz += 1 |
463 ocall write_8 | 462 ocall write_8 |
464 and 0xFF wz wz | 463 wz &= 0xFF |
465 lsl a 8 tmp | 464 lsl a 8 tmp |
466 or tmp wz wz | 465 wz |= tmp |
467 | 466 |
468 ed 01000111 ld_i_a | 467 ed 01000111 ld_i_a |
469 mov a i | 468 i = a |
470 cycles 1 | 469 cycles 1 |
471 | 470 |
472 ed 01001111 ld_r_a | 471 ed 01001111 ld_r_a |
473 mov a r | 472 r = a |
474 and 0x80 a rhigh | 473 and 0x80 a rhigh |
475 cycles 1 | 474 cycles 1 |
476 | 475 |
477 ed 01011111 ld_a_r | 476 ed 01011111 ld_a_r |
478 cycles 1 | 477 cycles 1 |
479 and 0x7F r a | 478 and 0x7F r a |
480 or rhigh a a | 479 a |= rhigh |
481 update_flags SZYH0XN0 | 480 update_flags SZYH0XN0 |
482 mov iff2 pvflag | 481 pvflag = iff2 |
483 | 482 |
484 ed 01010111 ld_a_i | 483 ed 01010111 ld_a_i |
485 cycles 1 | 484 cycles 1 |
486 mov i a | 485 a = i |
487 update_flags SZYH0XN0 | 486 update_flags SZYH0XN0 |
488 mov iff2 pvflag | 487 pvflag = iff2 |
489 | 488 |
490 00000001 ld_bc_immed | 489 00000001 ld_bc_immed |
491 meta high b | 490 meta high b |
492 meta low c | 491 meta low c |
493 z80_fetch_immed_reg16 | 492 z80_fetch_immed_reg16 |
514 meta reg iy | 513 meta reg iy |
515 z80_fetch_immed_to_reg16 | 514 z80_fetch_immed_to_reg16 |
516 | 515 |
517 z80_fetch16_from_immed | 516 z80_fetch16_from_immed |
518 z80_fetch_immed16 | 517 z80_fetch_immed16 |
519 mov wz scratch1 | 518 scratch1 = wz |
520 ocall read_8 | 519 ocall read_8 |
521 mov scratch1 low | 520 low = scratch1 |
522 add 1 wz wz | 521 wz += 1 |
523 mov wz scratch1 | 522 scratch1 = wz |
524 ocall read_8 | 523 ocall read_8 |
525 mov scratch1 high | 524 high = scratch1 |
526 add 1 wz wz | 525 wz += 1 |
527 | 526 |
528 00101010 ld_hl_from_immed | 527 00101010 ld_hl_from_immed |
529 meta low l | 528 meta low l |
530 meta high h | 529 meta high h |
531 z80_fetch16_from_immed | 530 z80_fetch16_from_immed |
545 meta high h | 544 meta high h |
546 z80_fetch16_from_immed | 545 z80_fetch16_from_immed |
547 | 546 |
548 z80_fetch_reg16_from_immed | 547 z80_fetch_reg16_from_immed |
549 z80_fetch_immed16 | 548 z80_fetch_immed16 |
550 mov wz scratch1 | 549 scratch1 = wz |
551 ocall read_8 | 550 ocall read_8 |
552 mov scratch1 reg | 551 reg = scratch1 |
553 add 1 wz wz | 552 wz += 1 |
554 mov wz scratch1 | 553 scratch1 = wz |
555 ocall read_8 | 554 ocall read_8 |
556 lsl scratch1 8 scratch1 | 555 scratch1 <<= 8 |
557 or scratch1 reg reg | 556 reg |= scratch1 |
558 add 1 wz wz | 557 wz += 1 |
559 | 558 |
560 ed 01111011 ld_sp_from_immed | 559 ed 01111011 ld_sp_from_immed |
561 meta reg sp | 560 meta reg sp |
562 z80_fetch_reg16_from_immed | 561 z80_fetch_reg16_from_immed |
563 | 562 |
569 meta reg iy | 568 meta reg iy |
570 z80_fetch_reg16_from_immed | 569 z80_fetch_reg16_from_immed |
571 | 570 |
572 00100010 ld_hl_to_immed | 571 00100010 ld_hl_to_immed |
573 z80_fetch_immed16 | 572 z80_fetch_immed16 |
574 mov wz scratch2 | 573 scratch2 = wz |
575 mov l scratch1 | 574 scratch1 = l |
576 ocall write_8 | 575 ocall write_8 |
577 add 1 wz wz | 576 wz += 1 |
578 mov wz scratch2 | 577 scratch2 = wz |
579 mov h scratch1 | 578 scratch1 = h |
580 ocall write_8 | 579 ocall write_8 |
581 add 1 wz wz | 580 wz += 1 |
582 | 581 |
583 dd 00100010 ld_ix_to_immed | 582 dd 00100010 ld_ix_to_immed |
584 z80_fetch_immed16 | 583 z80_fetch_immed16 |
585 mov wz scratch2 | 584 scratch2 = wz |
586 mov ix scratch1 | 585 scratch1 = ix |
587 ocall write_8 | 586 ocall write_8 |
588 add 1 wz wz | 587 wz += 1 |
589 mov wz scratch2 | 588 scratch2 = wz |
590 lsr ix 8 scratch1 | 589 lsr ix 8 scratch1 |
591 ocall write_8 | 590 ocall write_8 |
592 add 1 wz wz | 591 wz += 1 |
593 | 592 |
594 fd 00100010 ld_iy_to_immed | 593 fd 00100010 ld_iy_to_immed |
595 z80_fetch_immed16 | 594 z80_fetch_immed16 |
596 mov wz scratch2 | 595 scratch2 = wz |
597 mov iy scratch1 | 596 scratch1 = iy |
598 ocall write_8 | 597 ocall write_8 |
599 add 1 wz wz | 598 wz += 1 |
600 mov wz scratch2 | 599 scratch2 = wz |
601 lsr iy 8 scratch1 | 600 lsr iy 8 scratch1 |
602 ocall write_8 | 601 ocall write_8 |
603 add 1 wz wz | 602 wz += 1 |
604 | 603 |
605 z80_regpair_to_immed | 604 z80_regpair_to_immed |
606 z80_fetch_immed16 | 605 z80_fetch_immed16 |
607 mov wz scratch2 | 606 scratch2 = wz |
608 mov low scratch1 | 607 scratch1 = low |
609 ocall write_8 | 608 ocall write_8 |
610 add 1 wz wz | 609 wz += 1 |
611 mov high scratch1 | 610 scratch1 = high |
612 mov wz scratch2 | 611 scratch2 = wz |
613 ocall write_8 | 612 ocall write_8 |
614 add 1 wz wz | 613 wz += 1 |
615 | 614 |
616 ed 01000011 ld_bc_to_immed | 615 ed 01000011 ld_bc_to_immed |
617 meta low c | 616 meta low c |
618 meta high b | 617 meta high b |
619 z80_regpair_to_immed | 618 z80_regpair_to_immed |
636 z80_regpair_to_immed | 635 z80_regpair_to_immed |
637 | 636 |
638 11111001 ld_sp_hl | 637 11111001 ld_sp_hl |
639 cycles 2 | 638 cycles 2 |
640 lsl h 8 sp | 639 lsl h 8 sp |
641 or l sp sp | 640 sp |= l |
642 | 641 |
643 dd 11111001 ld_sp_ix | 642 dd 11111001 ld_sp_ix |
644 cycles 2 | 643 cycles 2 |
645 mov ix sp | 644 sp = ix |
646 | 645 |
647 fd 11111001 ld_sp_iy | 646 fd 11111001 ld_sp_iy |
648 cycles 2 | 647 cycles 2 |
649 mov iy sp | 648 sp = iy |
650 | 649 |
651 z80_push | 650 z80_push |
652 cycles 1 | 651 cycles 1 |
653 sub 1 sp sp | 652 sp -= 1 |
654 mov sp scratch2 | 653 scratch2 = sp |
655 mov high scratch1 | 654 scratch1 = high |
656 ocall write_8 | 655 ocall write_8 |
657 sub 1 sp sp | 656 sp -= 1 |
658 mov sp scratch2 | 657 scratch2 = sp |
659 mov low scratch1 | 658 scratch1 = low |
660 ocall write_8 | 659 ocall write_8 |
661 | 660 |
662 11000101 push_bc | 661 11000101 push_bc |
663 meta high b | 662 meta high b |
664 meta low c | 663 meta low c |
694 z80_push | 693 z80_push |
695 | 694 |
696 z80_pop | 695 z80_pop |
697 mov sp scratch1 | 696 mov sp scratch1 |
698 ocall read_8 | 697 ocall read_8 |
699 add 1 sp sp | 698 sp += 1 |
700 mov scratch1 low | 699 low = scratch1 |
701 mov sp scratch1 | 700 scratch1 = sp |
702 ocall read_8 | 701 ocall read_8 |
703 add 1 sp sp | 702 sp += 1 |
704 mov scratch1 high | 703 high = scratch1 |
705 | 704 |
706 11000001 pop_bc | 705 11000001 pop_bc |
707 meta high b | 706 meta high b |
708 meta low c | 707 meta low c |
709 z80_pop | 708 z80_pop |
734 fd 11100001 pop_iy | 733 fd 11100001 pop_iy |
735 local iyh 16 | 734 local iyh 16 |
736 meta high iyh | 735 meta high iyh |
737 meta low iy | 736 meta low iy |
738 z80_pop | 737 z80_pop |
739 lsl iyh 8 iyh | 738 iyh <<= 8 |
740 or iyh iy iy | 739 iy |= iyh |
741 | 740 |
742 11101011 ex_de_hl | 741 11101011 ex_de_hl |
743 xchg e l | 742 xchg e l |
744 xchg d h | 743 xchg d h |
745 | 744 |
754 xchg e e' | 753 xchg e e' |
755 xchg h h' | 754 xchg h h' |
756 xchg l l' | 755 xchg l l' |
757 | 756 |
758 11100011 ex_sp_hl | 757 11100011 ex_sp_hl |
759 mov sp scratch1 | 758 scratch1 = sp |
760 ocall read_8 | 759 ocall read_8 |
761 xchg l scratch1 | 760 xchg l scratch1 |
762 cycles 1 | 761 cycles 1 |
763 mov sp scratch2 | 762 scratch2 = sp |
764 ocall write_8 | 763 ocall write_8 |
765 add 1 sp scratch1 | 764 add 1 sp scratch1 |
766 ocall read_8 | 765 ocall read_8 |
767 xchg h scratch1 | 766 xchg h scratch1 |
768 cycles 2 | 767 cycles 2 |
769 add 1 sp scratch2 | 768 add 1 sp scratch2 |
770 ocall write_8 | 769 ocall write_8 |
771 lsl h 8 wz | 770 lsl h 8 wz |
772 or l wz wz | 771 wz |= l |
773 | 772 |
774 dd 11100011 ex_sp_ix | 773 dd 11100011 ex_sp_ix |
775 mov sp scratch1 | 774 scratch1 = sp |
776 ocall read_8 | 775 ocall read_8 |
777 mov scratch1 wz | 776 wz = scratch1 |
778 mov ix scratch1 | 777 scratch1 = ix |
779 cycles 1 | 778 cycles 1 |
780 mov sp scratch2 | 779 scratch2 = sp |
781 ocall write_8 | 780 ocall write_8 |
782 add 1 sp scratch1 | 781 add 1 sp scratch1 |
783 ocall read_8 | 782 ocall read_8 |
784 lsl scratch1 8 scratch1 | 783 scratch1 <<= 8 |
785 or scratch1 wz wz | 784 wz |= scratch1 |
786 lsr ix 8 scratch1 | 785 lsr ix 8 scratch1 |
787 cycles 2 | 786 cycles 2 |
788 add 1 sp scratch2 | 787 add 1 sp scratch2 |
789 ocall write_8 | 788 ocall write_8 |
790 mov wz ix | 789 ix = wz |
791 | 790 |
792 fd 11100011 ex_sp_iy | 791 fd 11100011 ex_sp_iy |
793 mov sp scratch1 | 792 scratch1 = sp |
794 ocall read_8 | 793 ocall read_8 |
795 mov scratch1 wz | 794 wz = scratch1 |
796 mov iy scratch1 | 795 scratch1 = iy |
797 cycles 1 | 796 cycles 1 |
798 mov sp scratch2 | 797 scratch2 = sp |
799 ocall write_8 | 798 ocall write_8 |
800 add 1 sp scratch1 | 799 add 1 sp scratch1 |
801 ocall read_8 | 800 ocall read_8 |
802 lsl scratch1 8 scratch1 | 801 scratch1 <<= 8 |
803 or scratch1 wz wz | 802 wz |= scratch1 |
804 lsr iy 8 scratch1 | 803 lsr iy 8 scratch1 |
805 cycles 2 | 804 cycles 2 |
806 add 1 sp scratch2 | 805 add 1 sp scratch2 |
807 ocall write_8 | 806 ocall write_8 |
808 mov wz iy | 807 iy = wz |
809 | 808 |
810 10000RRR add_reg | 809 10000RRR add_reg |
811 add a main.R a | 810 add a main.R a |
812 update_flags SZYHVXN0C | 811 update_flags SZYHVXN0C |
813 | 812 |