Mercurial > repos > blastem
comparison z80.cpu @ 1769:8fe162bdb038 mame_interp
Merge from default
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 01 Mar 2019 14:17:29 -0800 |
parents | 1dc718581aac |
children | 338c78da3fff |
comparison
equal
deleted
inserted
replaced
1768:63256371046f | 1769:8fe162bdb038 |
---|---|
1 info | |
2 prefix z80_ | |
3 opcode_size 8 | |
4 extra_tables cb ed dded fded ddcb fdcb dd fd | |
5 body z80_run_op | |
6 sync_cycle z80_sync_cycle | |
7 interrupt z80_interrupt | |
8 include z80_util.c | |
9 header z80.h | |
10 | |
11 declare | |
12 void init_z80_opts(z80_options * options, memmap_chunk const * chunks, uint32_t num_chunks, memmap_chunk const * io_chunks, uint32_t num_io_chunks, uint32_t clock_divider, uint32_t io_address_mask); | |
13 z80_context * init_z80_context(z80_options *options); | |
14 void z80_run(z80_context *context, uint32_t target_cycle); | |
15 void z80_assert_reset(z80_context * context, uint32_t cycle); | |
16 void z80_clear_reset(z80_context * context, uint32_t cycle); | |
17 void z80_assert_busreq(z80_context * context, uint32_t cycle); | |
18 void z80_clear_busreq(z80_context * context, uint32_t cycle); | |
19 void z80_assert_nmi(z80_context *context, uint32_t cycle); | |
20 uint8_t z80_get_busack(z80_context * context, uint32_t cycle); | |
21 void z80_invalidate_code_range(z80_context *context, uint32_t start, uint32_t end); | |
22 void z80_adjust_cycles(z80_context * context, uint32_t deduction); | |
23 void z80_serialize(z80_context *context, serialize_buffer *buf); | |
24 void z80_deserialize(deserialize_buffer *buf, void *vcontext); | |
25 void zinsert_breakpoint(z80_context * context, uint16_t address, uint8_t * bp_handler); | |
26 void zremove_breakpoint(z80_context * context, uint16_t address); | |
27 void z80_options_free(z80_options *opts); | |
28 void z80_sync_cycle(z80_context *context, uint32_t target_cycle); | |
29 | |
30 regs | |
31 main 8 b c d e h l f a | |
32 alt 8 b' c' d' e' h' l' f' a' | |
33 i 8 | |
34 r 8 | |
35 rhigh 8 | |
36 iff1 8 | |
37 iff2 8 | |
38 imode 8 | |
39 sp 16 | |
40 ix 16 | |
41 iy 16 | |
42 pc 16 | |
43 wz 16 | |
44 nflag 8 | |
45 last_flag_result 8 | |
46 pvflag 8 | |
47 chflags 8 | |
48 zflag 8 | |
49 scratch1 16 | |
50 scratch2 16 | |
51 busreq 8 | |
52 busack 8 | |
53 reset 8 | |
54 io_map ptrmemmap_chunk | |
55 io_chunks 32 | |
56 io_mask 32 | |
57 int_cycle 32 | |
58 int_end_cycle 32 | |
59 int_value 8 | |
60 nmi_cycle 32 | |
61 system ptrvoid | |
62 fastread ptr8 64 | |
63 fastwrite ptr8 64 | |
64 mem_pointers ptr8 4 | |
65 | |
66 flags | |
67 register f | |
68 S 7 sign last_flag_result.7 | |
69 Z 6 zero zflag | |
70 Y 5 bit-5 last_flag_result.5 | |
71 H 4 half-carry chflags.3 | |
72 P 2 parity pvflag | |
73 V 2 overflow pvflag | |
74 X 3 bit-3 last_flag_result.3 | |
75 N 1 none nflag | |
76 C 0 carry chflags.7 | |
77 | |
78 | |
79 z80_op_fetch | |
80 cycles 1 | |
81 add 1 r r | |
82 mov pc scratch1 | |
83 ocall read_8 | |
84 add 1 pc pc | |
85 | |
86 z80_run_op | |
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 | |
89 z80_op_fetch | |
90 dispatch scratch1 | |
91 | |
92 z80_interrupt | |
93 cmp int_cycle cycles | |
94 if >=U | |
95 | |
96 mov 0 iff1 | |
97 mov 0 iff2 | |
98 cycles 6 | |
99 update_sync | |
100 | |
101 switch imode | |
102 case 0 | |
103 dispatch int_value | |
104 | |
105 case 1 | |
106 dispatch 0xFF | |
107 | |
108 case 2 | |
109 lsl i 8 pc | |
110 or int_value pc pc | |
111 #CD is call | |
112 dispatch 0xCD | |
113 end | |
114 | |
115 else | |
116 | |
117 cmp nmi_cycle cycles | |
118 if >=U | |
119 | |
120 mov 0xFFFFFFFF nmi_cycle | |
121 mov 0 iff1 | |
122 local pch 8 | |
123 lsr pc 8 pch | |
124 meta high pch | |
125 meta low pc | |
126 z80_push | |
127 mov 0x66 pc | |
128 update_sync | |
129 | |
130 end | |
131 end | |
132 | |
133 | |
134 11001011 cb_prefix | |
135 z80_op_fetch | |
136 dispatch scratch1 cb | |
137 | |
138 11011101 dd_prefix | |
139 z80_op_fetch | |
140 dispatch scratch1 dd | |
141 | |
142 11101101 ed_prefix | |
143 z80_op_fetch | |
144 dispatch scratch1 ed | |
145 | |
146 11111101 fd_prefix | |
147 z80_op_fetch | |
148 dispatch scratch1 fd | |
149 | |
150 dd 11001011 ddcb_prefix | |
151 z80_calc_index ix | |
152 cycles 2 | |
153 mov pc scratch1 | |
154 ocall read_8 | |
155 add 1 pc pc | |
156 dispatch scratch1 ddcb | |
157 | |
158 fd 11001011 fdcb_prefix | |
159 z80_calc_index iy | |
160 cycles 2 | |
161 mov pc scratch1 | |
162 ocall read_8 | |
163 add 1 pc pc | |
164 dispatch scratch1 fdcb | |
165 | |
166 z80_check_cond | |
167 arg cond 8 | |
168 local invert 8 | |
169 switch cond | |
170 case 0 | |
171 meta istrue invert | |
172 lnot zflag invert | |
173 | |
174 case 1 | |
175 meta istrue zflag | |
176 | |
177 case 2 | |
178 meta istrue invert | |
179 not chflags invert | |
180 and 0x80 invert invert | |
181 | |
182 case 3 | |
183 meta istrue invert | |
184 and 0x80 chflags invert | |
185 | |
186 case 4 | |
187 meta istrue invert | |
188 lnot pvflag invert | |
189 | |
190 case 5 | |
191 meta istrue pvflag | |
192 | |
193 case 6 | |
194 meta istrue invert | |
195 not last_flag_result invert | |
196 and 0x80 invert invert | |
197 | |
198 case 7 | |
199 meta istrue invert | |
200 and 0x80 last_flag_result invert | |
201 | |
202 end | |
203 | |
204 z80_fetch_hl | |
205 lsl h 8 scratch1 | |
206 or l scratch1 scratch1 | |
207 ocall read_8 | |
208 | |
209 z80_store_hl | |
210 lsl h 8 scratch2 | |
211 or l scratch2 scratch2 | |
212 ocall write_8 | |
213 | |
214 z80_fetch_immed | |
215 mov pc scratch1 | |
216 ocall read_8 | |
217 add 1 pc pc | |
218 | |
219 z80_fetch_immed16 | |
220 mov pc scratch1 | |
221 ocall read_8 | |
222 mov scratch1 wz | |
223 add 1 pc pc | |
224 mov pc scratch1 | |
225 ocall read_8 | |
226 add 1 pc pc | |
227 lsl scratch1 8 scratch1 | |
228 or scratch1 wz wz | |
229 | |
230 z80_fetch_immed_reg16 | |
231 mov pc scratch1 | |
232 ocall read_8 | |
233 mov scratch1 low | |
234 add 1 pc pc | |
235 mov pc scratch1 | |
236 ocall read_8 | |
237 mov scratch1 high | |
238 add 1 pc pc | |
239 | |
240 z80_fetch_immed_to_reg16 | |
241 mov pc scratch1 | |
242 ocall read_8 | |
243 mov scratch1 reg | |
244 add 1 pc pc | |
245 mov pc scratch1 | |
246 ocall read_8 | |
247 add 1 pc pc | |
248 lsl scratch1 8 scratch1 | |
249 or scratch1 reg reg | |
250 | |
251 01RRR110 ld_from_hl | |
252 z80_fetch_hl | |
253 mov scratch1 main.R | |
254 | |
255 01DDDSSS ld_from_reg | |
256 mov main.S main.D | |
257 | |
258 dd 01DDD100 ld_from_ixh | |
259 invalid D 6 | |
260 lsr ix 8 main.D | |
261 | |
262 dd 01100SSS ld_to_ixh | |
263 invalid S 6 | |
264 local tmp 16 | |
265 and 0xFF ix ix | |
266 lsl main.S 8 tmp | |
267 or tmp ix ix | |
268 | |
269 dd 0110D10S ld_ixb_to_ixb | |
270 | |
271 dd 01DDD101 ld_from_ixl | |
272 invalid D 6 | |
273 mov ix main.D | |
274 | |
275 dd 01101SSS ld_to_ixl | |
276 invalid S 6 | |
277 and 0xFF00 ix ix | |
278 or main.S ix ix | |
279 | |
280 dd 01100101 ld_ixl_to_ixh | |
281 local tmp 16 | |
282 lsl ix 8 tmp | |
283 and 0xFF ix ix | |
284 or tmp ix ix | |
285 | |
286 dd 01101100 ld_ixh_to_ixl | |
287 local tmp 16 | |
288 lsr ix 8 tmp | |
289 and 0xFF00 ix ix | |
290 or tmp ix ix | |
291 | |
292 fd 01DDD100 ld_from_iyh | |
293 invalid D 6 | |
294 lsr iy 8 main.D | |
295 | |
296 fd 01100SSS ld_to_iyh | |
297 invalid S 6 | |
298 local tmp 16 | |
299 and 0xFF iy iy | |
300 lsl main.S 8 tmp | |
301 or tmp iy iy | |
302 | |
303 fd 0110D10S ld_iyb_to_iyb | |
304 | |
305 fd 01DDD101 ld_from_iyl | |
306 invalid D 6 | |
307 mov iy main.D | |
308 | |
309 fd 01101SSS ld_to_iyl | |
310 invalid S 6 | |
311 and 0xFF00 iy iy | |
312 or main.S iy iy | |
313 | |
314 fd 01100101 ld_iyl_to_iyh | |
315 local tmp 16 | |
316 lsl iy 8 tmp | |
317 and 0xFF iy iy | |
318 or tmp iy iy | |
319 | |
320 fd 01101100 ld_iyh_to_iyl | |
321 local tmp 16 | |
322 lsr iy 8 tmp | |
323 and 0xFF00 iy iy | |
324 or tmp iy iy | |
325 | |
326 z80_calc_index | |
327 arg index 16 | |
328 mov index wz | |
329 z80_fetch_immed | |
330 sext 16 scratch1 scratch1 | |
331 add scratch1 wz wz | |
332 | |
333 z80_fetch_index | |
334 arg index 16 | |
335 z80_calc_index index | |
336 mov wz scratch1 | |
337 cycles 5 | |
338 ocall read_8 | |
339 | |
340 z80_store_index | |
341 mov wz scratch2 | |
342 ocall write_8 | |
343 | |
344 dd 01RRR110 ld_from_ix | |
345 z80_fetch_index ix | |
346 mov scratch1 main.R | |
347 | |
348 fd 01RRR110 ld_from_iy | |
349 z80_fetch_index iy | |
350 mov scratch1 main.R | |
351 | |
352 00RRR110 ld_immed | |
353 z80_fetch_immed | |
354 mov scratch1 main.R | |
355 | |
356 dd 00100110 ld_immed_ixh | |
357 z80_fetch_immed | |
358 lsl scratch1 8 scratch1 | |
359 and 0xFF ix ix | |
360 or scratch1 ix ix | |
361 | |
362 dd 00101110 ld_immed_ixl | |
363 z80_fetch_immed | |
364 and 0xFF00 ix ix | |
365 or scratch1 ix ix | |
366 | |
367 fd 00100110 ld_immed_iyh | |
368 z80_fetch_immed | |
369 lsl scratch1 8 scratch1 | |
370 and 0xFF iy iy | |
371 or scratch1 iy iy | |
372 | |
373 fd 00101110 ld_immed_iyl | |
374 z80_fetch_immed | |
375 and 0xFF00 iy iy | |
376 or scratch1 iy iy | |
377 | |
378 01110RRR ld_to_hl | |
379 mov main.R scratch1 | |
380 z80_store_hl | |
381 | |
382 dd 01110RRR ld_to_ix | |
383 z80_calc_index ix | |
384 mov wz scratch2 | |
385 mov main.R scratch1 | |
386 cycles 5 | |
387 ocall write_8 | |
388 | |
389 fd 01110RRR ld_to_iy | |
390 z80_calc_index iy | |
391 mov wz scratch2 | |
392 mov main.R scratch1 | |
393 cycles 5 | |
394 ocall write_8 | |
395 | |
396 00110110 ld_to_hl_immed | |
397 z80_fetch_immed | |
398 z80_store_hl | |
399 | |
400 dd 00110110 ld_to_ixd_immed | |
401 z80_calc_index ix | |
402 z80_fetch_immed | |
403 cycles 2 | |
404 mov wz scratch2 | |
405 ocall write_8 | |
406 | |
407 fd 00110110 ld_to_iyd_immed | |
408 z80_calc_index iy | |
409 z80_fetch_immed | |
410 cycles 2 | |
411 mov wz scratch2 | |
412 ocall write_8 | |
413 | |
414 00001010 ld_a_from_bc | |
415 lsl b 8 wz | |
416 or c wz wz | |
417 mov wz scratch1 | |
418 add 1 wz wz | |
419 ocall read_8 | |
420 mov scratch1 a | |
421 | |
422 00011010 ld_a_from_de | |
423 lsl d 8 wz | |
424 or e wz wz | |
425 mov wz scratch1 | |
426 add 1 wz wz | |
427 ocall read_8 | |
428 mov scratch1 a | |
429 | |
430 00111010 ld_a_from_immed | |
431 z80_fetch_immed16 | |
432 mov wz scratch1 | |
433 add 1 wz wz | |
434 ocall read_8 | |
435 mov scratch1 a | |
436 | |
437 00000010 ld_a_to_bc | |
438 local tmp 8 | |
439 lsl b 8 scratch2 | |
440 or c scratch2 scratch2 | |
441 mov a scratch1 | |
442 add c 1 tmp | |
443 lsl a 8 wz | |
444 or tmp wz wz | |
445 ocall write_8 | |
446 | |
447 00010010 ld_a_to_de | |
448 local tmp 8 | |
449 lsl d 8 scratch2 | |
450 or e scratch2 scratch2 | |
451 mov a scratch1 | |
452 add e 1 tmp | |
453 lsl a 8 wz | |
454 or tmp wz wz | |
455 ocall write_8 | |
456 | |
457 00110010 ld_a_to_immed | |
458 local tmp 16 | |
459 z80_fetch_immed16 | |
460 mov wz scratch2 | |
461 mov a scratch1 | |
462 add 1 wz wz | |
463 ocall write_8 | |
464 and 0xFF wz wz | |
465 lsl a 8 tmp | |
466 or tmp wz wz | |
467 | |
468 ed 01000111 ld_i_a | |
469 mov a i | |
470 cycles 1 | |
471 | |
472 ed 01001111 ld_r_a | |
473 mov a r | |
474 and 0x80 a rhigh | |
475 cycles 1 | |
476 | |
477 ed 01011111 ld_a_r | |
478 cycles 1 | |
479 and 0x7F r a | |
480 or rhigh a a | |
481 update_flags SZYH0XN0 | |
482 mov iff2 pvflag | |
483 | |
484 ed 01010111 ld_a_i | |
485 cycles 1 | |
486 mov i a | |
487 update_flags SZYH0XN0 | |
488 mov iff2 pvflag | |
489 | |
490 00000001 ld_bc_immed | |
491 meta high b | |
492 meta low c | |
493 z80_fetch_immed_reg16 | |
494 | |
495 00010001 ld_de_immed | |
496 meta high d | |
497 meta low e | |
498 z80_fetch_immed_reg16 | |
499 | |
500 00100001 ld_hl_immed | |
501 meta high h | |
502 meta low l | |
503 z80_fetch_immed_reg16 | |
504 | |
505 00110001 ld_sp_immed | |
506 meta reg sp | |
507 z80_fetch_immed_to_reg16 | |
508 | |
509 dd 00100001 ld_ix_immed | |
510 meta reg ix | |
511 z80_fetch_immed_to_reg16 | |
512 | |
513 fd 00100001 ld_iy_immed | |
514 meta reg iy | |
515 z80_fetch_immed_to_reg16 | |
516 | |
517 z80_fetch16_from_immed | |
518 z80_fetch_immed16 | |
519 mov wz scratch1 | |
520 ocall read_8 | |
521 mov scratch1 low | |
522 add 1 wz wz | |
523 mov wz scratch1 | |
524 ocall read_8 | |
525 mov scratch1 high | |
526 add 1 wz wz | |
527 | |
528 00101010 ld_hl_from_immed | |
529 meta low l | |
530 meta high h | |
531 z80_fetch16_from_immed | |
532 | |
533 ed 01001011 ld_bc_from_immed | |
534 meta low c | |
535 meta high b | |
536 z80_fetch16_from_immed | |
537 | |
538 ed 01011011 ld_de_from_immed | |
539 meta low e | |
540 meta high d | |
541 z80_fetch16_from_immed | |
542 | |
543 ed 01101011 ld_hl_from_immed_slow | |
544 meta low l | |
545 meta high h | |
546 z80_fetch16_from_immed | |
547 | |
548 z80_fetch_reg16_from_immed | |
549 z80_fetch_immed16 | |
550 mov wz scratch1 | |
551 ocall read_8 | |
552 mov scratch1 reg | |
553 add 1 wz wz | |
554 mov wz scratch1 | |
555 ocall read_8 | |
556 lsl scratch1 8 scratch1 | |
557 or scratch1 reg reg | |
558 add 1 wz wz | |
559 | |
560 ed 01111011 ld_sp_from_immed | |
561 meta reg sp | |
562 z80_fetch_reg16_from_immed | |
563 | |
564 dd 00101010 ld_ix_from_immed | |
565 meta reg ix | |
566 z80_fetch_reg16_from_immed | |
567 | |
568 fd 00101010 ld_iy_from_immed | |
569 meta reg iy | |
570 z80_fetch_reg16_from_immed | |
571 | |
572 00100010 ld_hl_to_immed | |
573 z80_fetch_immed16 | |
574 mov wz scratch2 | |
575 mov l scratch1 | |
576 ocall write_8 | |
577 add 1 wz wz | |
578 mov wz scratch2 | |
579 mov h scratch1 | |
580 ocall write_8 | |
581 add 1 wz wz | |
582 | |
583 dd 00100010 ld_ix_to_immed | |
584 z80_fetch_immed16 | |
585 mov wz scratch2 | |
586 mov ix scratch1 | |
587 ocall write_8 | |
588 add 1 wz wz | |
589 mov wz scratch2 | |
590 lsr ix 8 scratch1 | |
591 ocall write_8 | |
592 add 1 wz wz | |
593 | |
594 fd 00100010 ld_iy_to_immed | |
595 z80_fetch_immed16 | |
596 mov wz scratch2 | |
597 mov iy scratch1 | |
598 ocall write_8 | |
599 add 1 wz wz | |
600 mov wz scratch2 | |
601 lsr iy 8 scratch1 | |
602 ocall write_8 | |
603 add 1 wz wz | |
604 | |
605 z80_regpair_to_immed | |
606 z80_fetch_immed16 | |
607 mov wz scratch2 | |
608 mov low scratch1 | |
609 ocall write_8 | |
610 add 1 wz wz | |
611 mov high scratch1 | |
612 mov wz scratch2 | |
613 ocall write_8 | |
614 add 1 wz wz | |
615 | |
616 ed 01000011 ld_bc_to_immed | |
617 meta low c | |
618 meta high b | |
619 z80_regpair_to_immed | |
620 | |
621 ed 01010011 ld_de_to_immed | |
622 meta low e | |
623 meta high d | |
624 z80_regpair_to_immed | |
625 | |
626 ed 01100011 ld_hl_to_immed_slow | |
627 meta low l | |
628 meta high h | |
629 z80_regpair_to_immed | |
630 | |
631 ed 01110011 ld_sp_to_immed | |
632 meta low sp | |
633 local sph 8 | |
634 lsr sp 8 sph | |
635 meta high sph | |
636 z80_regpair_to_immed | |
637 | |
638 11111001 ld_sp_hl | |
639 cycles 2 | |
640 lsl h 8 sp | |
641 or l sp sp | |
642 | |
643 dd 11111001 ld_sp_ix | |
644 cycles 2 | |
645 mov ix sp | |
646 | |
647 fd 11111001 ld_sp_iy | |
648 cycles 2 | |
649 mov iy sp | |
650 | |
651 z80_push | |
652 cycles 1 | |
653 sub 1 sp sp | |
654 mov sp scratch2 | |
655 mov high scratch1 | |
656 ocall write_8 | |
657 sub 1 sp sp | |
658 mov sp scratch2 | |
659 mov low scratch1 | |
660 ocall write_8 | |
661 | |
662 11000101 push_bc | |
663 meta high b | |
664 meta low c | |
665 z80_push | |
666 | |
667 11010101 push_de | |
668 meta high d | |
669 meta low e | |
670 z80_push | |
671 | |
672 11100101 push_hl | |
673 meta high h | |
674 meta low l | |
675 z80_push | |
676 | |
677 11110101 push_af | |
678 meta high a | |
679 meta low f | |
680 z80_push | |
681 | |
682 dd 11100101 push_ix | |
683 local ixh 8 | |
684 lsr ix 8 ixh | |
685 meta high ixh | |
686 meta low ix | |
687 z80_push | |
688 | |
689 fd 11100101 push_iy | |
690 local iyh 8 | |
691 lsr iy 8 iyh | |
692 meta high iyh | |
693 meta low iy | |
694 z80_push | |
695 | |
696 z80_pop | |
697 mov sp scratch1 | |
698 ocall read_8 | |
699 add 1 sp sp | |
700 mov scratch1 low | |
701 mov sp scratch1 | |
702 ocall read_8 | |
703 add 1 sp sp | |
704 mov scratch1 high | |
705 | |
706 11000001 pop_bc | |
707 meta high b | |
708 meta low c | |
709 z80_pop | |
710 | |
711 11010001 pop_de | |
712 meta high d | |
713 meta low e | |
714 z80_pop | |
715 | |
716 11100001 pop_hl | |
717 meta high h | |
718 meta low l | |
719 z80_pop | |
720 | |
721 11110001 pop_af | |
722 meta high a | |
723 meta low f | |
724 z80_pop | |
725 | |
726 dd 11100001 pop_ix | |
727 local ixh 16 | |
728 meta high ixh | |
729 meta low ix | |
730 z80_pop | |
731 lsl ixh 8 ixh | |
732 or ixh ix ix | |
733 | |
734 fd 11100001 pop_iy | |
735 local iyh 16 | |
736 meta high iyh | |
737 meta low iy | |
738 z80_pop | |
739 lsl iyh 8 iyh | |
740 or iyh iy iy | |
741 | |
742 11101011 ex_de_hl | |
743 xchg e l | |
744 xchg d h | |
745 | |
746 00001000 ex_af_af | |
747 xchg a a' | |
748 xchg f f' | |
749 | |
750 11011001 exx | |
751 xchg b b' | |
752 xchg c c' | |
753 xchg d d' | |
754 xchg e e' | |
755 xchg h h' | |
756 xchg l l' | |
757 | |
758 11100011 ex_sp_hl | |
759 mov sp scratch1 | |
760 ocall read_8 | |
761 xchg l scratch1 | |
762 cycles 1 | |
763 mov sp scratch2 | |
764 ocall write_8 | |
765 add 1 sp scratch1 | |
766 ocall read_8 | |
767 xchg h scratch1 | |
768 cycles 2 | |
769 add 1 sp scratch2 | |
770 ocall write_8 | |
771 lsl h 8 wz | |
772 or l wz wz | |
773 | |
774 dd 11100011 ex_sp_ix | |
775 mov sp scratch1 | |
776 ocall read_8 | |
777 mov scratch1 wz | |
778 mov ix scratch1 | |
779 cycles 1 | |
780 mov sp scratch2 | |
781 ocall write_8 | |
782 add 1 sp scratch1 | |
783 ocall read_8 | |
784 lsl scratch1 8 scratch1 | |
785 or scratch1 wz wz | |
786 lsr ix 8 scratch1 | |
787 cycles 2 | |
788 add 1 sp scratch2 | |
789 ocall write_8 | |
790 mov wz ix | |
791 | |
792 fd 11100011 ex_sp_iy | |
793 mov sp scratch1 | |
794 ocall read_8 | |
795 mov scratch1 wz | |
796 mov iy scratch1 | |
797 cycles 1 | |
798 mov sp scratch2 | |
799 ocall write_8 | |
800 add 1 sp scratch1 | |
801 ocall read_8 | |
802 lsl scratch1 8 scratch1 | |
803 or scratch1 wz wz | |
804 lsr iy 8 scratch1 | |
805 cycles 2 | |
806 add 1 sp scratch2 | |
807 ocall write_8 | |
808 mov wz iy | |
809 | |
810 10000RRR add_reg | |
811 add a main.R a | |
812 update_flags SZYHVXN0C | |
813 | |
814 dd 10000100 add_ixh | |
815 lsr ix 8 scratch1 | |
816 add a scratch1 a | |
817 update_flags SZYHVXN0C | |
818 | |
819 dd 10000101 add_ixl | |
820 and ix 0xFF scratch1 | |
821 add a scratch1 a | |
822 update_flags SZYHVXN0C | |
823 | |
824 fd 10000100 add_iyh | |
825 lsr iy 8 scratch1 | |
826 add a scratch1 a | |
827 update_flags SZYHVXN0C | |
828 | |
829 fd 10000101 add_iyl | |
830 and iy 0xFF scratch1 | |
831 add a scratch1 a | |
832 update_flags SZYHVXN0C | |
833 | |
834 10000110 add_hl | |
835 z80_fetch_hl | |
836 add a scratch1 a | |
837 update_flags SZYHVXN0C | |
838 | |
839 dd 10000110 add_ixd | |
840 z80_fetch_index ix | |
841 add a scratch1 a | |
842 update_flags SZYHVXN0C | |
843 | |
844 fd 10000110 add_iyd | |
845 z80_fetch_index iy | |
846 add a scratch1 a | |
847 update_flags SZYHVXN0C | |
848 | |
849 11000110 add_immed | |
850 z80_fetch_immed | |
851 add a scratch1 a | |
852 update_flags SZYHVXN0C | |
853 | |
854 z80_add16_hl | |
855 arg src 16 | |
856 lsl h 8 hlt | |
857 or l hlt hlt | |
858 add 1 hlt wz | |
859 add src hlt hlt | |
860 update_flags YHXN0C | |
861 mov hlt l | |
862 lsr hlt 8 h | |
863 cycles 7 | |
864 | |
865 00001001 add_hl_bc | |
866 local hlw 16 | |
867 local bcw 16 | |
868 meta hlt hlw | |
869 lsl b 8 bcw | |
870 or c bcw bcw | |
871 z80_add16_hl bcw | |
872 | |
873 00011001 add_hl_de | |
874 local hlw 16 | |
875 local dew 16 | |
876 meta hlt hlw | |
877 lsl d 8 dew | |
878 or e dew dew | |
879 z80_add16_hl dew | |
880 | |
881 00101001 add_hl_hl | |
882 local hlw 16 | |
883 meta hlt hlw | |
884 z80_add16_hl hlw | |
885 | |
886 00111001 add_hl_sp | |
887 local hlw 16 | |
888 meta hlt hlw | |
889 z80_add16_hl sp | |
890 | |
891 dd 00001001 add_ix_bc | |
892 lsl b 8 scratch1 | |
893 or c scratch1 scratch1 | |
894 add scratch1 ix ix | |
895 update_flags YHXN0C | |
896 cycles 7 | |
897 | |
898 dd 00011001 add_ix_de | |
899 lsl d 8 scratch1 | |
900 or e scratch1 scratch1 | |
901 add scratch1 ix ix | |
902 update_flags YHXN0C | |
903 cycles 7 | |
904 | |
905 dd 00101001 add_ix_ix | |
906 add ix ix ix | |
907 update_flags YHXN0C | |
908 cycles 7 | |
909 | |
910 dd 00111001 add_ix_sp | |
911 add sp ix ix | |
912 update_flags YHXN0C | |
913 cycles 7 | |
914 | |
915 fd 00001001 add_iy_bc | |
916 lsl b 8 scratch1 | |
917 or c scratch1 scratch1 | |
918 add scratch1 iy iy | |
919 update_flags YHXN0C | |
920 cycles 7 | |
921 | |
922 fd 00011001 add_iy_de | |
923 lsl d 8 scratch1 | |
924 or e scratch1 scratch1 | |
925 add scratch1 iy iy | |
926 update_flags YHXN0C | |
927 cycles 7 | |
928 | |
929 fd 00101001 add_iy_iy | |
930 add iy iy iy | |
931 update_flags YHXN0C | |
932 cycles 7 | |
933 | |
934 fd 00111001 add_iy_sp | |
935 add sp iy iy | |
936 update_flags YHXN0C | |
937 cycles 7 | |
938 | |
939 10001RRR adc_reg | |
940 adc a main.R a | |
941 update_flags SZYHVXN0C | |
942 | |
943 dd 10001100 adc_ixh | |
944 lsr ix 8 scratch1 | |
945 adc a scratch1 a | |
946 update_flags SZYHVXN0C | |
947 | |
948 dd 10001101 adc_ixl | |
949 and ix 0xFF scratch1 | |
950 adc a scratch1 a | |
951 update_flags SZYHVXN0C | |
952 | |
953 fd 10001100 adc_iyh | |
954 lsr iy 8 scratch1 | |
955 adc a scratch1 a | |
956 update_flags SZYHVXN0C | |
957 | |
958 fd 10001101 adc_iyl | |
959 and iy 0xFF scratch1 | |
960 adc a scratch1 a | |
961 update_flags SZYHVXN0C | |
962 | |
963 10001110 adc_hl | |
964 z80_fetch_hl | |
965 adc a scratch1 a | |
966 update_flags SZYHVXN0C | |
967 | |
968 dd 10001110 adc_ixd | |
969 z80_fetch_index ix | |
970 adc a scratch1 a | |
971 update_flags SZYHVXN0C | |
972 | |
973 fd 10001110 adc_iyd | |
974 z80_fetch_index iy | |
975 adc a scratch1 a | |
976 update_flags SZYHVXN0C | |
977 | |
978 11001110 adc_immed | |
979 z80_fetch_immed | |
980 adc a scratch1 a | |
981 update_flags SZYHVXN0C | |
982 | |
983 z80_adc16_hl | |
984 arg src 16 | |
985 lsl h 8 hlt | |
986 or l hlt hlt | |
987 add 1 hlt wz | |
988 adc src hlt hlt | |
989 update_flags SZYHVXN0C | |
990 mov hlt l | |
991 lsr hlt 8 h | |
992 cycles 7 | |
993 | |
994 ed 01001010 adc_hl_bc | |
995 local hlw 16 | |
996 local bcw 16 | |
997 meta hlt hlw | |
998 lsl b 8 bcw | |
999 or c bcw bcw | |
1000 z80_adc16_hl bcw | |
1001 | |
1002 ed 01011010 adc_hl_de | |
1003 local hlw 16 | |
1004 local dew 16 | |
1005 meta hlt hlw | |
1006 lsl d 8 dew | |
1007 or e dew dew | |
1008 z80_adc16_hl dew | |
1009 | |
1010 ed 01101010 adc_hl_hl | |
1011 local hlw 16 | |
1012 meta hlt hlw | |
1013 z80_adc16_hl hlw | |
1014 | |
1015 | |
1016 ed 01111010 adc_hl_sp | |
1017 local hlw 16 | |
1018 meta hlt hlw | |
1019 z80_adc16_hl sp | |
1020 | |
1021 10010RRR sub_reg | |
1022 sub main.R a a | |
1023 update_flags SZYHVXN1C | |
1024 | |
1025 dd 10010100 sub_ixh | |
1026 lsr ix 8 scratch1 | |
1027 sub scratch1 a a | |
1028 update_flags SZYHVXN1C | |
1029 | |
1030 dd 10010101 sub_ixl | |
1031 and ix 0xFF scratch1 | |
1032 sub scratch1 a a | |
1033 update_flags SZYHVXN1C | |
1034 | |
1035 fd 10010100 sub_iyh | |
1036 lsr iy 8 scratch1 | |
1037 sub scratch1 a a | |
1038 update_flags SZYHVXN1C | |
1039 | |
1040 fd 10010101 sub_iyl | |
1041 and iy 0xFF scratch1 | |
1042 sub scratch1 a a | |
1043 update_flags SZYHVXN1C | |
1044 | |
1045 10010110 sub_hl | |
1046 z80_fetch_hl | |
1047 sub scratch1 a a | |
1048 update_flags SZYHVXN1C | |
1049 | |
1050 dd 10010110 sub_ixd | |
1051 z80_fetch_index ix | |
1052 sub scratch1 a a | |
1053 update_flags SZYHVXN1C | |
1054 | |
1055 fd 10010110 sub_iyd | |
1056 z80_fetch_index iy | |
1057 sub scratch1 a a | |
1058 update_flags SZYHVXN1C | |
1059 | |
1060 11010110 sub_immed | |
1061 z80_fetch_immed | |
1062 sub scratch1 a a | |
1063 update_flags SZYHVXN1C | |
1064 | |
1065 10011RRR sbc_reg | |
1066 sbc main.R a a | |
1067 update_flags SZYHVXN1C | |
1068 | |
1069 dd 10011100 sbc_ixh | |
1070 lsr ix 8 scratch1 | |
1071 sbc scratch1 a a | |
1072 update_flags SZYHVXN1C | |
1073 | |
1074 dd 10011101 sbc_ixl | |
1075 and ix 0xFF scratch1 | |
1076 sbc scratch1 a a | |
1077 update_flags SZYHVXN1C | |
1078 | |
1079 fd 10011100 sbc_iyh | |
1080 lsr iy 8 scratch1 | |
1081 sbc scratch1 a a | |
1082 update_flags SZYHVXN1C | |
1083 | |
1084 fd 10011101 sbc_iyl | |
1085 and iy 0xFF scratch1 | |
1086 sbc scratch1 a a | |
1087 update_flags SZYHVXN1C | |
1088 | |
1089 | |
1090 10011110 sbc_hl | |
1091 z80_fetch_hl | |
1092 sbc scratch1 a a | |
1093 update_flags SZYHVXN1C | |
1094 | |
1095 dd 10011110 sbc_ixd | |
1096 z80_fetch_index ix | |
1097 sbc scratch1 a a | |
1098 update_flags SZYHVXN1C | |
1099 | |
1100 fd 10011110 sbc_iyd | |
1101 z80_fetch_index iy | |
1102 sbc scratch1 a a | |
1103 update_flags SZYHVXN1C | |
1104 | |
1105 11011110 sbc_immed | |
1106 z80_fetch_immed | |
1107 sbc scratch1 a a | |
1108 update_flags SZYHVXN1C | |
1109 | |
1110 z80_sbc16_hl | |
1111 arg src 16 | |
1112 lsl h 8 hlt | |
1113 or l hlt hlt | |
1114 add 1 hlt wz | |
1115 sbc src hlt hlt | |
1116 update_flags SZYHVXN1C | |
1117 mov hlt l | |
1118 lsr hlt 8 h | |
1119 cycles 7 | |
1120 | |
1121 ed 01000010 sbc_hl_bc | |
1122 local hlw 16 | |
1123 local bcw 16 | |
1124 meta hlt hlw | |
1125 lsl b 8 bcw | |
1126 or c bcw bcw | |
1127 z80_sbc16_hl bcw | |
1128 | |
1129 ed 01010010 sbc_hl_de | |
1130 local hlw 16 | |
1131 local dew 16 | |
1132 meta hlt hlw | |
1133 lsl d 8 dew | |
1134 or e dew dew | |
1135 z80_sbc16_hl dew | |
1136 | |
1137 ed 01100010 sbc_hl_hl | |
1138 local hlw 16 | |
1139 meta hlt hlw | |
1140 z80_sbc16_hl hlw | |
1141 | |
1142 | |
1143 ed 01110010 sbc_hl_sp | |
1144 local hlw 16 | |
1145 meta hlt hlw | |
1146 z80_sbc16_hl sp | |
1147 | |
1148 10100RRR and_reg | |
1149 and a main.R a | |
1150 update_flags SZYH1PXN0C0 | |
1151 | |
1152 dd 10100100 and_ixh | |
1153 lsr ix 8 scratch1 | |
1154 and scratch1 a a | |
1155 update_flags SZYH1PXN0C0 | |
1156 | |
1157 dd 10100101 and_ixl | |
1158 and ix a a | |
1159 update_flags SZYH1PXN0C0 | |
1160 | |
1161 fd 10100100 and_iyh | |
1162 lsr iy 8 scratch1 | |
1163 and scratch1 a a | |
1164 update_flags SZYH1PXN0C0 | |
1165 | |
1166 fd 10100101 and_iyl | |
1167 and iy a a | |
1168 update_flags SZYH1PXN0C0 | |
1169 | |
1170 10100110 and_hl | |
1171 z80_fetch_hl | |
1172 and a scratch1 a | |
1173 update_flags SZYH1PXN0C0 | |
1174 | |
1175 dd 10100110 and_ixd | |
1176 z80_fetch_index ix | |
1177 and a scratch1 a | |
1178 update_flags SZYH1PXN0C0 | |
1179 | |
1180 fd 10100110 and_iyd | |
1181 z80_fetch_index iy | |
1182 and a scratch1 a | |
1183 update_flags SZYH1PXN0C0 | |
1184 | |
1185 11100110 and_immed | |
1186 z80_fetch_immed | |
1187 and a scratch1 a | |
1188 update_flags SZYH1PXN0C0 | |
1189 | |
1190 10110RRR or_reg | |
1191 or a main.R a | |
1192 update_flags SZYH0PXN0C0 | |
1193 | |
1194 dd 10110100 or_ixh | |
1195 lsr ix 8 scratch1 | |
1196 or scratch1 a a | |
1197 update_flags SZYH0PXN0C0 | |
1198 | |
1199 dd 10110101 or_ixl | |
1200 or ix a a | |
1201 update_flags SZYH0PXN0C0 | |
1202 | |
1203 fd 10110100 or_iyh | |
1204 lsr iy 8 scratch1 | |
1205 or scratch1 a a | |
1206 update_flags SZYH0PXN0C0 | |
1207 | |
1208 fd 10110101 or_iyl | |
1209 or iy a a | |
1210 update_flags SZYH0PXN0C0 | |
1211 | |
1212 10110110 or_hl | |
1213 z80_fetch_hl | |
1214 or a scratch1 a | |
1215 update_flags SZYH0PXN0C0 | |
1216 | |
1217 dd 10110110 or_ixd | |
1218 z80_fetch_index ix | |
1219 or a scratch1 a | |
1220 update_flags SZYH0PXN0C0 | |
1221 | |
1222 fd 10110110 or_iyd | |
1223 z80_fetch_index iy | |
1224 or a scratch1 a | |
1225 update_flags SZYH0PXN0C0 | |
1226 | |
1227 11110110 or_immed | |
1228 z80_fetch_immed | |
1229 or a scratch1 a | |
1230 update_flags SZYH0PXN0C0 | |
1231 | |
1232 10101RRR xor_reg | |
1233 xor a main.R a | |
1234 update_flags SZYH0PXN0C0 | |
1235 | |
1236 dd 10101100 xor_ixh | |
1237 lsr ix 8 scratch1 | |
1238 xor scratch1 a a | |
1239 update_flags SZYH0PXN0C0 | |
1240 | |
1241 dd 10101101 xor_ixl | |
1242 xor ix a a | |
1243 update_flags SZYH0PXN0C0 | |
1244 | |
1245 fd 10101100 xor_iyh | |
1246 lsr iy 8 scratch1 | |
1247 xor scratch1 a a | |
1248 update_flags SZYH0PXN0C0 | |
1249 | |
1250 fd 10101101 xor_iyl | |
1251 xor iy a a | |
1252 update_flags SZYH0PXN0C0 | |
1253 | |
1254 10101110 xor_hl | |
1255 z80_fetch_hl | |
1256 xor a scratch1 a | |
1257 update_flags SZYH0PXN0C0 | |
1258 | |
1259 dd 10101110 xor_ixd | |
1260 z80_fetch_index ix | |
1261 xor a scratch1 a | |
1262 update_flags SZYH0PXN0C0 | |
1263 | |
1264 fd 10101110 xor_iyd | |
1265 z80_fetch_index iy | |
1266 xor a scratch1 a | |
1267 update_flags SZYH0PXN0C0 | |
1268 | |
1269 11101110 xor_immed | |
1270 z80_fetch_immed | |
1271 xor a scratch1 a | |
1272 update_flags SZYH0PXN0C0 | |
1273 | |
1274 10111RRR cp_reg | |
1275 mov main.R last_flag_result | |
1276 cmp main.R a | |
1277 update_flags SZHVN1C | |
1278 | |
1279 dd 10111100 cp_ixh | |
1280 local tmp 8 | |
1281 lsr ix 8 tmp | |
1282 mov tmp last_flag_result | |
1283 cmp tmp a | |
1284 update_flags SZHVN1C | |
1285 | |
1286 dd 10111101 cp_ixl | |
1287 local tmp 8 | |
1288 mov ix tmp | |
1289 mov ix last_flag_result | |
1290 cmp tmp a | |
1291 update_flags SZHVN1C | |
1292 | |
1293 fd 10111100 cp_iyh | |
1294 local tmp 8 | |
1295 lsr iy 8 tmp | |
1296 mov tmp last_flag_result | |
1297 cmp tmp a | |
1298 update_flags SZHVN1C | |
1299 | |
1300 fd 10111101 cp_iyl | |
1301 local tmp 8 | |
1302 mov iy tmp | |
1303 mov iy last_flag_result | |
1304 cmp tmp a | |
1305 update_flags SZHVN1C | |
1306 | |
1307 10111110 cp_hl | |
1308 local tmp 8 | |
1309 z80_fetch_hl | |
1310 mov scratch1 tmp | |
1311 mov scratch1 last_flag_result | |
1312 cmp tmp a | |
1313 update_flags SZHVN1C | |
1314 | |
1315 dd 10111110 cp_ixd | |
1316 local tmp 8 | |
1317 z80_fetch_index ix | |
1318 mov scratch1 tmp | |
1319 mov scratch1 last_flag_result | |
1320 cmp tmp a | |
1321 update_flags SZHVN1C | |
1322 | |
1323 fd 10111110 cp_iyd | |
1324 local tmp 8 | |
1325 z80_fetch_index iy | |
1326 mov scratch1 tmp | |
1327 mov scratch1 last_flag_result | |
1328 cmp tmp a | |
1329 update_flags SZHVN1C | |
1330 | |
1331 11111110 cp_immed | |
1332 local tmp 8 | |
1333 z80_fetch_immed | |
1334 mov scratch1 tmp | |
1335 mov scratch1 last_flag_result | |
1336 cmp tmp a | |
1337 update_flags SZHVN1C | |
1338 | |
1339 00RRR100 inc_reg | |
1340 add 1 main.R main.R | |
1341 update_flags SZYHVXN0 | |
1342 | |
1343 dd 00100100 inc_ixh | |
1344 add 0x100 ix ix | |
1345 update_flags SZYHVXN0 | |
1346 | |
1347 dd 00101100 inc_ixl | |
1348 local tmp 8 | |
1349 mov ix tmp | |
1350 add 1 tmp tmp | |
1351 update_flags SZYHVXN0 | |
1352 and 0xFF00 ix ix | |
1353 or tmp ix ix | |
1354 | |
1355 fd 00100100 inc_iyh | |
1356 add 0x100 iy iy | |
1357 update_flags SZYHVXN0 | |
1358 | |
1359 fd 00101100 inc_iyl | |
1360 local tmp 8 | |
1361 mov iy tmp | |
1362 add 1 tmp tmp | |
1363 update_flags SZYHVXN0 | |
1364 and 0xFF00 iy iy | |
1365 or tmp iy iy | |
1366 | |
1367 00110100 inc_hl | |
1368 local tmp 8 | |
1369 z80_fetch_hl | |
1370 #TODO: Either make DSL compiler smart enough to optimize these unnecessary moves out | |
1371 #or add some syntax to force a certain size on an operation so they are unnecessary | |
1372 mov scratch1 tmp | |
1373 add 1 tmp tmp | |
1374 update_flags SZYHVXN0 | |
1375 mov tmp scratch1 | |
1376 cycles 1 | |
1377 z80_store_hl | |
1378 | |
1379 dd 00110100 inc_ixd | |
1380 local tmp 8 | |
1381 z80_fetch_index ix | |
1382 #TODO: Either make DSL compiler smart enough to optimize these unnecessary moves out | |
1383 #or add some syntax to force a certain size on an operation so they are unnecessary | |
1384 mov scratch1 tmp | |
1385 add 1 tmp tmp | |
1386 update_flags SZYHVXN0 | |
1387 mov tmp scratch1 | |
1388 cycles 1 | |
1389 z80_store_index | |
1390 | |
1391 fd 00110100 inc_iyd | |
1392 local tmp 8 | |
1393 z80_fetch_index iy | |
1394 #TODO: Either make DSL compiler smart enough to optimize these unnecessary moves out | |
1395 #or add some syntax to force a certain size on an operation so they are unnecessary | |
1396 mov scratch1 tmp | |
1397 add 1 tmp tmp | |
1398 update_flags SZYHVXN0 | |
1399 mov tmp scratch1 | |
1400 cycles 1 | |
1401 z80_store_index | |
1402 | |
1403 z80_inc_pair | |
1404 arg high 8 | |
1405 arg low 8 | |
1406 cycles 2 | |
1407 local word 16 | |
1408 lsl high 8 word | |
1409 or low word word | |
1410 add 1 word word | |
1411 mov word low | |
1412 lsr word 8 high | |
1413 | |
1414 00000011 inc_bc | |
1415 z80_inc_pair b c | |
1416 | |
1417 00010011 inc_de | |
1418 z80_inc_pair d e | |
1419 | |
1420 00100011 inc16_hl | |
1421 z80_inc_pair h l | |
1422 | |
1423 00110011 inc_sp | |
1424 add 1 sp sp | |
1425 | |
1426 dd 00100011 inc_ix | |
1427 add 1 ix ix | |
1428 | |
1429 fd 00100011 inc_iy | |
1430 add 1 iy iy | |
1431 | |
1432 00RRR101 dec_reg | |
1433 sub 1 main.R main.R | |
1434 update_flags SZYHVXN1 | |
1435 | |
1436 dd 00100101 dec_ixh | |
1437 sub 0x100 ix ix | |
1438 update_flags SZYHVXN1 | |
1439 | |
1440 dd 00101101 dec_ixl | |
1441 local tmp 8 | |
1442 mov ix tmp | |
1443 sub 1 tmp tmp | |
1444 update_flags SZYHVXN1 | |
1445 and 0xFF00 ix ix | |
1446 or tmp ix ix | |
1447 | |
1448 fd 00100101 dec_iyh | |
1449 sub 0x100 iy iy | |
1450 update_flags SZYHVXN1 | |
1451 | |
1452 fd 00101101 dec_iyl | |
1453 local tmp 8 | |
1454 mov iy tmp | |
1455 sub 1 tmp tmp | |
1456 update_flags SZYHVXN1 | |
1457 and 0xFF00 iy iy | |
1458 or tmp iy iy | |
1459 | |
1460 00110101 dec_hl | |
1461 local tmp 8 | |
1462 z80_fetch_hl | |
1463 #TODO: Either make DSL compiler smart enough to optimize these unnecessary moves out | |
1464 #or add some syntax to force a certain size on an operation so they are unnecessary | |
1465 mov scratch1 tmp | |
1466 sub 1 tmp tmp | |
1467 update_flags SZYHVXN1 | |
1468 mov tmp scratch1 | |
1469 cycles 1 | |
1470 z80_store_hl | |
1471 | |
1472 dd 00110101 dec_ixd | |
1473 local tmp 8 | |
1474 z80_fetch_index ix | |
1475 #TODO: Either make DSL compiler smart enough to optimize these unnecessary moves out | |
1476 #or add some syntax to force a certain size on an operation so they are unnecessary | |
1477 mov scratch1 tmp | |
1478 sub 1 tmp tmp | |
1479 update_flags SZYHVXN1 | |
1480 mov tmp scratch1 | |
1481 cycles 1 | |
1482 z80_store_index | |
1483 | |
1484 fd 00110101 dec_iyd | |
1485 local tmp 8 | |
1486 z80_fetch_index iy | |
1487 #TODO: Either make DSL compiler smart enough to optimize these unnecessary moves out | |
1488 #or add some syntax to force a certain size on an operation so they are unnecessary | |
1489 mov scratch1 tmp | |
1490 sub 1 tmp tmp | |
1491 update_flags SZYHVXN1 | |
1492 mov tmp scratch1 | |
1493 cycles 1 | |
1494 z80_store_index | |
1495 | |
1496 z80_dec_pair | |
1497 arg high 8 | |
1498 arg low 8 | |
1499 local word 16 | |
1500 lsl high 8 word | |
1501 or low word word | |
1502 sub 1 word word | |
1503 mov word low | |
1504 lsr word 8 high | |
1505 cycles 2 | |
1506 | |
1507 00001011 dec_bc | |
1508 z80_dec_pair b c | |
1509 | |
1510 00011011 dec_de | |
1511 z80_dec_pair d e | |
1512 | |
1513 00101011 dec16_hl | |
1514 z80_dec_pair h l | |
1515 | |
1516 00111011 dec_sp | |
1517 sub 1 sp sp | |
1518 | |
1519 dd 00101011 dec_ix | |
1520 sub 1 ix ix | |
1521 | |
1522 fd 00101011 dec_iy | |
1523 sub 1 iy iy | |
1524 | |
1525 00101111 cpl | |
1526 not a a | |
1527 update_flags YH1XN1 | |
1528 | |
1529 ed 01DDD100 neg | |
1530 neg a a | |
1531 update_flags SZYHVXN1C | |
1532 | |
1533 00111111 ccf | |
1534 local tmp 8 | |
1535 and 0x80 last_flag_result last_flag_result | |
1536 and 0x7F a tmp | |
1537 or tmp last_flag_result last_flag_result | |
1538 and 0x80 chflags chflags | |
1539 lsr chflags 4 tmp | |
1540 or tmp chflags chflags | |
1541 xor 0x80 chflags chflags | |
1542 update_flags N0 | |
1543 | |
1544 00110111 scf | |
1545 local tmp 8 | |
1546 and 0x80 last_flag_result last_flag_result | |
1547 and 0x7F a tmp | |
1548 or tmp last_flag_result last_flag_result | |
1549 update_flags H0N0C1 | |
1550 | |
1551 00000000 nop | |
1552 | |
1553 01110110 halt | |
1554 cmp nmi_cycle cycles | |
1555 if >=U | |
1556 | |
1557 else | |
1558 cmp int_cycle cycles | |
1559 if >=U | |
1560 | |
1561 if iff1 | |
1562 else | |
1563 sub 1 pc pc | |
1564 end | |
1565 | |
1566 else | |
1567 sub 1 pc pc | |
1568 end | |
1569 end | |
1570 | |
1571 11110011 di | |
1572 mov 0 iff1 | |
1573 mov 0 iff2 | |
1574 update_sync | |
1575 | |
1576 11111011 ei | |
1577 mov 1 iff1 | |
1578 mov 1 iff2 | |
1579 update_sync | |
1580 cmp int_cycle cycles | |
1581 if >=U | |
1582 | |
1583 add 1 cycles int_cycle | |
1584 | |
1585 end | |
1586 | |
1587 ed 01D00110 im0 | |
1588 mov 0 imode | |
1589 | |
1590 ed 01D10110 im1 | |
1591 mov 1 imode | |
1592 | |
1593 ed 01D11110 im2 | |
1594 mov 2 imode | |
1595 | |
1596 ed 01D01110 im3 | |
1597 #some sources call this mode 0/1, but unclear | |
1598 #if the behavior is really different from im 0 | |
1599 mov 0 imode | |
1600 | |
1601 11000011 jp | |
1602 z80_fetch_immed16 | |
1603 mov wz pc | |
1604 | |
1605 11101001 jp_hl | |
1606 lsl h 8 pc | |
1607 or l pc pc | |
1608 | |
1609 dd 11101001 jp_ix | |
1610 mov ix pc | |
1611 | |
1612 fd 11101001 jp_iy | |
1613 mov iy pc | |
1614 | |
1615 11CCC010 jp_cc | |
1616 z80_check_cond C | |
1617 z80_fetch_immed16 | |
1618 if istrue | |
1619 | |
1620 mov wz pc | |
1621 | |
1622 end | |
1623 | |
1624 00011000 jr | |
1625 z80_fetch_immed | |
1626 #TODO: determine if this updates wz | |
1627 sext 16 scratch1 scratch1 | |
1628 add scratch1 pc pc | |
1629 cycles 5 | |
1630 | |
1631 001CC000 jr_cc | |
1632 z80_check_cond C | |
1633 z80_fetch_immed | |
1634 | |
1635 if istrue | |
1636 | |
1637 sext 16 scratch1 scratch1 | |
1638 add scratch1 pc pc | |
1639 cycles 5 | |
1640 | |
1641 end | |
1642 | |
1643 00010000 djnz | |
1644 cycles 1 | |
1645 z80_fetch_immed | |
1646 sub 1 b b | |
1647 | |
1648 if b | |
1649 | |
1650 sext 16 scratch1 scratch1 | |
1651 add scratch1 pc pc | |
1652 cycles 5 | |
1653 | |
1654 end | |
1655 | |
1656 | |
1657 11001101 call_uncond | |
1658 z80_fetch_immed16 | |
1659 local pch 8 | |
1660 lsr pc 8 pch | |
1661 meta high pch | |
1662 meta low pc | |
1663 z80_push | |
1664 mov wz pc | |
1665 | |
1666 11CCC100 call_cond | |
1667 local pch 8 | |
1668 z80_fetch_immed16 | |
1669 z80_check_cond C | |
1670 | |
1671 if istrue | |
1672 | |
1673 lsr pc 8 pch | |
1674 meta high pch | |
1675 meta low pc | |
1676 z80_push | |
1677 mov wz pc | |
1678 | |
1679 end | |
1680 | |
1681 11TTT111 rst | |
1682 local pch 8 | |
1683 lsr pc 8 pch | |
1684 meta high pch | |
1685 meta low pc | |
1686 z80_push | |
1687 lsl T 3 scratch1 | |
1688 mov scratch1 pc | |
1689 | |
1690 11001001 ret | |
1691 local pch 16 | |
1692 meta high pch | |
1693 meta low pc | |
1694 z80_pop | |
1695 lsl pch 8 pch | |
1696 or pch pc pc | |
1697 | |
1698 ed 01001101 reti | |
1699 local pch 16 | |
1700 cycles 1 | |
1701 meta high pch | |
1702 meta low pc | |
1703 z80_pop | |
1704 lsl pch 8 pch | |
1705 or pch pc pc | |
1706 | |
1707 ed 01NN1101 retn | |
1708 mov iff2 iff1 | |
1709 local pch 16 | |
1710 cycles 1 | |
1711 meta high pch | |
1712 meta low pc | |
1713 z80_pop | |
1714 lsl pch 8 pch | |
1715 or pch pc pc | |
1716 | |
1717 11CCC000 ret_cond | |
1718 local pch 16 | |
1719 cycles 1 | |
1720 z80_check_cond C | |
1721 if istrue | |
1722 | |
1723 meta high pch | |
1724 meta low pc | |
1725 z80_pop | |
1726 lsl pch 8 pch | |
1727 or pch pc pc | |
1728 | |
1729 end | |
1730 | |
1731 11011011 in_abs | |
1732 z80_fetch_immed | |
1733 ocall io_read8 | |
1734 mov scratch1 a | |
1735 | |
1736 ed 01RRR000 in_bc | |
1737 lsl b 8 scratch1 | |
1738 or c scratch1 scratch1 | |
1739 ocall io_read8 | |
1740 mov scratch1 main.R | |
1741 | |
1742 z80_ini_ind | |
1743 arg change 16 | |
1744 local tmp 8 | |
1745 cycles 1 | |
1746 | |
1747 lsl 8 b wz | |
1748 or c wz wz | |
1749 add change wz wz | |
1750 | |
1751 sub 1 b b | |
1752 update_flags SZYX | |
1753 | |
1754 lsl b 8 scratch1 | |
1755 or c scratch1 scratch1 | |
1756 ocall io_read8 | |
1757 | |
1758 and 0x80 scratch1 nflag | |
1759 | |
1760 mov wz tmp | |
1761 add tmp scratch1 tmp | |
1762 update_flags C | |
1763 | |
1764 z80_store_hl | |
1765 | |
1766 lsl h 8 scratch2 | |
1767 or l scratch2 scratch2 | |
1768 add change scratch2 scratch2 | |
1769 mov scratch2 l | |
1770 lsr scratch2 8 h | |
1771 | |
1772 and 7 tmp tmp | |
1773 xor b tmp tmp | |
1774 update_flags P | |
1775 lsr chflags 4 tmp | |
1776 or tmp chflags chflags | |
1777 | |
1778 ed 10100010 ini | |
1779 z80_ini_ind 1 | |
1780 | |
1781 ed 10110010 inir | |
1782 z80_ini_ind 1 | |
1783 if zflag | |
1784 else | |
1785 sub 2 pc pc | |
1786 cycles 5 | |
1787 end | |
1788 | |
1789 ed 10101010 ind | |
1790 z80_ini_ind -1 | |
1791 | |
1792 ed 10111010 indr | |
1793 z80_ini_ind -1 | |
1794 if zflag | |
1795 else | |
1796 sub 2 pc pc | |
1797 cycles 5 | |
1798 end | |
1799 | |
1800 11010011 out_abs | |
1801 z80_fetch_immed | |
1802 mov scratch1 scratch2 | |
1803 mov a scratch1 | |
1804 ocall io_write8 | |
1805 | |
1806 ed 01RRR001 out_bc | |
1807 lsl b 8 scratch2 | |
1808 or c scratch2 scratch2 | |
1809 mov main.R scratch1 | |
1810 ocall io_write8 | |
1811 | |
1812 z80_outi_outd | |
1813 arg change 16 | |
1814 local tmp 8 | |
1815 cycles 1 | |
1816 z80_fetch_hl | |
1817 | |
1818 and 0x80 scratch1 nflag | |
1819 | |
1820 lsl h 8 scratch2 | |
1821 or l scratch2 scratch2 | |
1822 add change scratch2 scratch2 | |
1823 mov scratch2 l | |
1824 lsr scratch2 8 h | |
1825 | |
1826 add l scratch1 tmp | |
1827 update_flags C | |
1828 and 7 tmp tmp | |
1829 | |
1830 lsl b 8 scratch2 | |
1831 or c scratch2 scratch2 | |
1832 ocall io_write8 | |
1833 | |
1834 sub 1 b b | |
1835 update_flags SZYX | |
1836 | |
1837 lsl 8 b wz | |
1838 or c wz wz | |
1839 add change wz wz | |
1840 | |
1841 xor b tmp tmp | |
1842 update_flags P | |
1843 lsr chflags 4 tmp | |
1844 or tmp chflags chflags | |
1845 | |
1846 ed 10100011 outi | |
1847 z80_outi_outd 1 | |
1848 | |
1849 ed 10110011 otir | |
1850 z80_outi_outd 1 | |
1851 if zflag | |
1852 else | |
1853 sub 2 pc pc | |
1854 cycles 5 | |
1855 end | |
1856 | |
1857 ed 10101011 outd | |
1858 z80_outi_outd -1 | |
1859 | |
1860 ed 10111011 otdr | |
1861 z80_outi_outd -1 | |
1862 if zflag | |
1863 else | |
1864 sub 2 pc pc | |
1865 cycles 5 | |
1866 end | |
1867 | |
1868 00000111 rlca | |
1869 rol a 1 a | |
1870 update_flags YH0XN0C | |
1871 | |
1872 00010111 rla | |
1873 rlc a 1 a | |
1874 update_flags YH0XN0C | |
1875 | |
1876 00001111 rrca | |
1877 ror a 1 a | |
1878 update_flags YH0XN0C | |
1879 | |
1880 00011111 rra | |
1881 rrc a 1 a | |
1882 update_flags YH0XN0C | |
1883 | |
1884 cb 00000RRR rlc | |
1885 rol main.R 1 main.R | |
1886 update_flags SZYH0PXN0C | |
1887 | |
1888 cb 00000110 rlc_hl | |
1889 local tmp 8 | |
1890 z80_fetch_hl | |
1891 mov scratch1 tmp | |
1892 rol tmp 1 tmp | |
1893 update_flags SZYH0PXN0C | |
1894 mov tmp scratch1 | |
1895 z80_store_hl | |
1896 | |
1897 z80_rlc_index | |
1898 arg tmp 8 | |
1899 mov wz scratch1 | |
1900 ocall read_8 | |
1901 cycles 1 | |
1902 mov scratch1 tmp | |
1903 rol tmp 1 tmp | |
1904 update_flags SZYH0PXN0C | |
1905 mov tmp scratch1 | |
1906 z80_store_index | |
1907 | |
1908 ddcb 00000110 rlc_ixd | |
1909 local tmp 8 | |
1910 z80_rlc_index tmp | |
1911 | |
1912 ddcb 00000RRR rlc_ixd_reg | |
1913 z80_rlc_index main.R | |
1914 | |
1915 fdcb 00000110 rlc_iyd | |
1916 local tmp 8 | |
1917 z80_rlc_index tmp | |
1918 | |
1919 fdcb 00000RRR rlc_iyd_reg | |
1920 z80_rlc_index main.R | |
1921 | |
1922 cb 00010RRR rl | |
1923 rlc main.R 1 main.R | |
1924 update_flags SZYH0PXN0C | |
1925 | |
1926 cb 00010110 rl_hl | |
1927 local tmp 8 | |
1928 z80_fetch_hl | |
1929 mov scratch1 tmp | |
1930 rlc tmp 1 tmp | |
1931 update_flags SZYH0PXN0C | |
1932 mov tmp scratch1 | |
1933 z80_store_hl | |
1934 | |
1935 z80_rl_index | |
1936 arg tmp 8 | |
1937 mov wz scratch1 | |
1938 ocall read_8 | |
1939 cycles 1 | |
1940 mov scratch1 tmp | |
1941 rlc tmp 1 tmp | |
1942 update_flags SZYH0PXN0C | |
1943 mov tmp scratch1 | |
1944 z80_store_index | |
1945 | |
1946 ddcb 00010110 rl_ixd | |
1947 local tmp 8 | |
1948 z80_rl_index tmp | |
1949 | |
1950 fdcb 00010110 rl_iyd | |
1951 local tmp 8 | |
1952 z80_rl_index tmp | |
1953 | |
1954 | |
1955 ddcb 00010RRR rl_ixd_reg | |
1956 z80_rl_index main.R | |
1957 | |
1958 fdcb 00010RRR rl_iyd_reg | |
1959 z80_rl_index main.R | |
1960 | |
1961 cb 00001RRR rrc | |
1962 ror main.R 1 main.R | |
1963 update_flags SZYH0PXN0C | |
1964 | |
1965 cb 00001110 rrc_hl | |
1966 local tmp 8 | |
1967 z80_fetch_hl | |
1968 mov scratch1 tmp | |
1969 ror tmp 1 tmp | |
1970 update_flags SZYH0PXN0C | |
1971 mov tmp scratch1 | |
1972 z80_store_hl | |
1973 | |
1974 z80_rrc_index | |
1975 arg tmp 8 | |
1976 mov wz scratch1 | |
1977 ocall read_8 | |
1978 cycles 1 | |
1979 mov scratch1 tmp | |
1980 ror tmp 1 tmp | |
1981 update_flags SZYH0PXN0C | |
1982 mov tmp scratch1 | |
1983 z80_store_index | |
1984 | |
1985 ddcb 00001110 rrc_ixd | |
1986 local tmp 8 | |
1987 z80_rrc_index tmp | |
1988 | |
1989 ddcb 00001RRR rrc_ixd_reg | |
1990 z80_rrc_index main.R | |
1991 | |
1992 fdcb 00001110 rrc_iyd | |
1993 local tmp 8 | |
1994 z80_rrc_index tmp | |
1995 | |
1996 fdcb 00001RRR rrc_iyd_reg | |
1997 z80_rrc_index main.R | |
1998 | |
1999 cb 00011RRR rr | |
2000 rrc main.R 1 main.R | |
2001 update_flags SZYH0PXN0C | |
2002 | |
2003 cb 00011110 rr_hl | |
2004 local tmp 8 | |
2005 z80_fetch_hl | |
2006 mov scratch1 tmp | |
2007 rrc tmp 1 tmp | |
2008 update_flags SZYH0PXN0C | |
2009 mov tmp scratch1 | |
2010 z80_store_hl | |
2011 | |
2012 z80_rr_index | |
2013 arg tmp 8 | |
2014 mov wz scratch1 | |
2015 ocall read_8 | |
2016 cycles 1 | |
2017 mov scratch1 tmp | |
2018 rrc tmp 1 tmp | |
2019 update_flags SZYH0PXN0C | |
2020 mov tmp scratch1 | |
2021 z80_store_index | |
2022 | |
2023 ddcb 00011110 rr_ixd | |
2024 local tmp 8 | |
2025 z80_rr_index tmp | |
2026 | |
2027 ddcb 00011RRR rr_ixd_reg | |
2028 z80_rr_index main.R | |
2029 | |
2030 fdcb 00011110 rr_iyd | |
2031 local tmp 8 | |
2032 z80_rr_index tmp | |
2033 | |
2034 fdcb 00011RRR rr_iyd_reg | |
2035 z80_rr_index main.R | |
2036 | |
2037 cb 00100RRR sla | |
2038 lsl main.R 1 main.R | |
2039 update_flags SZYH0PXN0C | |
2040 | |
2041 cb 00100110 sla_hl | |
2042 local tmp 8 | |
2043 z80_fetch_hl | |
2044 mov scratch1 tmp | |
2045 lsl tmp 1 tmp | |
2046 update_flags SZYH0PXN0C | |
2047 mov tmp scratch1 | |
2048 z80_store_hl | |
2049 | |
2050 z80_sla_index | |
2051 arg tmp 8 | |
2052 mov wz scratch1 | |
2053 ocall read_8 | |
2054 cycles 1 | |
2055 mov scratch1 tmp | |
2056 lsl tmp 1 tmp | |
2057 update_flags SZYH0PXN0C | |
2058 mov tmp scratch1 | |
2059 z80_store_index | |
2060 | |
2061 ddcb 00100110 sla_ixd | |
2062 local tmp 8 | |
2063 z80_sla_index tmp | |
2064 | |
2065 ddcb 00100RRR sla_ixd_reg | |
2066 z80_sla_index main.R | |
2067 | |
2068 fdcb 00100110 sla_iyd | |
2069 local tmp 8 | |
2070 z80_sla_index tmp | |
2071 | |
2072 fdcb 00100RRR sla_iyd_reg | |
2073 z80_sla_index main.R | |
2074 | |
2075 cb 00101RRR sra | |
2076 asr main.R 1 main.R | |
2077 update_flags SZYH0PXN0C | |
2078 | |
2079 cb 00101110 sra_hl | |
2080 local tmp 8 | |
2081 z80_fetch_hl | |
2082 mov scratch1 tmp | |
2083 asr tmp 1 tmp | |
2084 update_flags SZYH0PXN0C | |
2085 mov tmp scratch1 | |
2086 z80_store_hl | |
2087 | |
2088 z80_sra_index | |
2089 arg tmp 8 | |
2090 mov wz scratch1 | |
2091 ocall read_8 | |
2092 cycles 1 | |
2093 mov scratch1 tmp | |
2094 asr tmp 1 tmp | |
2095 update_flags SZYH0PXN0C | |
2096 mov tmp scratch1 | |
2097 z80_store_index | |
2098 | |
2099 ddcb 00101110 sra_ixd | |
2100 local tmp 8 | |
2101 z80_sra_index tmp | |
2102 | |
2103 ddcb 00101RRR sra_ixd_reg | |
2104 z80_sra_index main.R | |
2105 | |
2106 fdcb 00101110 sra_iyd | |
2107 local tmp 8 | |
2108 z80_sra_index tmp | |
2109 | |
2110 fdcb 00101RRR sra_iyd_reg | |
2111 z80_sra_index main.R | |
2112 | |
2113 cb 00110RRR sll | |
2114 lsl main.R 1 main.R | |
2115 update_flags SZ0YH0XN0C | |
2116 or 1 main.R main.R | |
2117 update_flags P | |
2118 | |
2119 cb 00110110 sll_hl | |
2120 local tmp 8 | |
2121 z80_fetch_hl | |
2122 mov scratch1 tmp | |
2123 lsl tmp 1 tmp | |
2124 update_flags SZ0YH0XN0C | |
2125 or 1 tmp tmp | |
2126 update_flags P | |
2127 mov tmp scratch1 | |
2128 z80_store_hl | |
2129 | |
2130 z80_sll_index | |
2131 arg tmp 8 | |
2132 mov wz scratch1 | |
2133 ocall read_8 | |
2134 cycles 1 | |
2135 mov scratch1 tmp | |
2136 lsl tmp 1 tmp | |
2137 update_flags SZ0YH0XN0C | |
2138 or 1 tmp tmp | |
2139 update_flags P | |
2140 mov tmp scratch1 | |
2141 z80_store_index | |
2142 | |
2143 ddcb 00110110 sll_ixd | |
2144 local tmp 8 | |
2145 z80_sll_index tmp | |
2146 | |
2147 ddcb 00110RRR sll_ixd_reg | |
2148 z80_sll_index main.R | |
2149 | |
2150 fdcb 00110110 sll_iyd | |
2151 local tmp 8 | |
2152 z80_sll_index tmp | |
2153 | |
2154 fdcb 00110RRR sll_iyd_reg | |
2155 z80_sll_index main.R | |
2156 | |
2157 cb 00111RRR srl | |
2158 lsr main.R 1 main.R | |
2159 update_flags SZYH0PXN0C | |
2160 | |
2161 cb 00111110 srl_hl | |
2162 local tmp 8 | |
2163 z80_fetch_hl | |
2164 mov scratch1 tmp | |
2165 lsr tmp 1 tmp | |
2166 update_flags SZYH0PXN0C | |
2167 mov tmp scratch1 | |
2168 z80_store_hl | |
2169 | |
2170 z80_srl_index | |
2171 arg tmp 8 | |
2172 mov wz scratch1 | |
2173 ocall read_8 | |
2174 cycles 1 | |
2175 mov scratch1 tmp | |
2176 lsr tmp 1 tmp | |
2177 update_flags SZYH0PXN0C | |
2178 mov tmp scratch1 | |
2179 z80_store_index | |
2180 | |
2181 ddcb 00111110 srl_ixd | |
2182 local tmp 8 | |
2183 z80_srl_index tmp | |
2184 | |
2185 ddcb 00111RRR srl_ixd_reg | |
2186 z80_srl_index main.R | |
2187 | |
2188 fdcb 00111110 srl_iyd | |
2189 local tmp 8 | |
2190 z80_srl_index tmp | |
2191 | |
2192 fdcb 00111RRR srl_iyd_reg | |
2193 z80_srl_index main.R | |
2194 | |
2195 cb 01BBBRRR bit_reg | |
2196 local tmp 8 | |
2197 lsl 1 B tmp | |
2198 mov main.R last_flag_result | |
2199 and main.R tmp tmp | |
2200 update_flags SZH1PN0 | |
2201 | |
2202 cb 01BBB110 bit_hl | |
2203 local tmp 8 | |
2204 z80_fetch_hl | |
2205 cycles 1 | |
2206 lsl 1 B tmp | |
2207 lsr wz 8 last_flag_result | |
2208 and scratch1 tmp tmp | |
2209 update_flags SZH1PN0 | |
2210 | |
2211 | |
2212 ddcb 01BBBRRR bit_ixd | |
2213 local tmp 8 | |
2214 mov wz scratch1 | |
2215 ocall read_8 | |
2216 cycles 1 | |
2217 lsl 1 B tmp | |
2218 lsr wz 8 last_flag_result | |
2219 and scratch1 tmp tmp | |
2220 update_flags SZH1PN0 | |
2221 | |
2222 fdcb 01BBBRRR bit_iyd | |
2223 local tmp 8 | |
2224 mov wz scratch1 | |
2225 ocall read_8 | |
2226 cycles 1 | |
2227 lsl 1 B tmp | |
2228 lsr wz 8 last_flag_result | |
2229 and scratch1 tmp tmp | |
2230 update_flags SZH1PN0 | |
2231 | |
2232 cb 10BBBRRR res_reg | |
2233 local tmp 8 | |
2234 lsl 1 B tmp | |
2235 not tmp tmp | |
2236 and main.R tmp main.R | |
2237 | |
2238 cb 10BBB110 res_hl | |
2239 z80_fetch_hl | |
2240 cycles 1 | |
2241 local tmp 8 | |
2242 lsl 1 B tmp | |
2243 not tmp tmp | |
2244 and scratch1 tmp scratch1 | |
2245 z80_store_hl | |
2246 | |
2247 z80_res_index | |
2248 arg bit 8 | |
2249 arg tmp 8 | |
2250 lsl 1 bit tmp | |
2251 not tmp tmp | |
2252 mov wz scratch1 | |
2253 ocall read_8 | |
2254 cycles 1 | |
2255 and scratch1 tmp tmp | |
2256 mov tmp scratch1 | |
2257 z80_store_index | |
2258 | |
2259 ddcb 10BBB110 res_ixd | |
2260 local tmp 8 | |
2261 z80_res_index B tmp | |
2262 | |
2263 ddcb 10BBBRRR res_ixd_reg | |
2264 z80_res_index B main.R | |
2265 | |
2266 fdcb 10BBB110 res_iyd | |
2267 local tmp 8 | |
2268 z80_res_index B tmp | |
2269 | |
2270 fdcb 10BBBRRR res_iyd_reg | |
2271 z80_res_index B main.R | |
2272 | |
2273 cb 11BBBRRR set_reg | |
2274 local tmp 8 | |
2275 lsl 1 B tmp | |
2276 or main.R tmp main.R | |
2277 | |
2278 cb 11BBB110 set_hl | |
2279 z80_fetch_hl | |
2280 cycles 1 | |
2281 local tmp 8 | |
2282 lsl 1 B tmp | |
2283 or scratch1 tmp scratch1 | |
2284 z80_store_hl | |
2285 | |
2286 z80_set_index | |
2287 arg bit 8 | |
2288 arg tmp 8 | |
2289 lsl 1 bit tmp | |
2290 mov wz scratch1 | |
2291 ocall read_8 | |
2292 cycles 1 | |
2293 or scratch1 tmp tmp | |
2294 mov tmp scratch1 | |
2295 z80_store_index | |
2296 | |
2297 ddcb 11BBB110 set_ixd | |
2298 local tmp 8 | |
2299 z80_set_index B tmp | |
2300 | |
2301 ddcb 11BBBRRR set_ixd_reg | |
2302 z80_set_index B main.R | |
2303 | |
2304 fdcb 11BBB110 set_iyd | |
2305 local tmp 8 | |
2306 z80_set_index B tmp | |
2307 | |
2308 fdcb 11BBBRRR set_iyd_reg | |
2309 z80_set_index B main.R | |
2310 | |
2311 z80_fetch_mod_hl | |
2312 local tmp 16 | |
2313 arg change 16 | |
2314 lsl h 8 tmp | |
2315 or l tmp tmp | |
2316 mov tmp scratch1 | |
2317 add change tmp tmp | |
2318 mov tmp l | |
2319 lsr tmp 8 h | |
2320 ocall read_8 | |
2321 cycles 2 | |
2322 | |
2323 z80_ldd_ldi | |
2324 arg change 16 | |
2325 local tmp 16 | |
2326 local tmp8 8 | |
2327 z80_fetch_mod_hl change | |
2328 | |
2329 add a scratch1 tmp8 | |
2330 update_flags H0XN0 | |
2331 | |
2332 and 0x2 tmp8 tmp8 | |
2333 lsl tmp8 4 tmp8 | |
2334 and 0x88 last_flag_result last_flag_result | |
2335 or tmp8 last_flag_result last_flag_result | |
2336 | |
2337 lsl d 8 tmp | |
2338 or e tmp tmp | |
2339 mov tmp scratch2 | |
2340 add change tmp tmp | |
2341 mov tmp e | |
2342 lsr tmp 8 d | |
2343 ocall write_8 | |
2344 | |
2345 lsl b 8 tmp | |
2346 or c tmp tmp | |
2347 sub 1 tmp tmp | |
2348 | |
2349 mov tmp c | |
2350 lsr tmp 8 b | |
2351 mov c pvflag | |
2352 or b pvflag pvflag | |
2353 | |
2354 | |
2355 ed 10100000 ldi | |
2356 z80_ldd_ldi 1 | |
2357 | |
2358 ed 10101000 ldd | |
2359 z80_ldd_ldi -1 | |
2360 | |
2361 ed 10110000 ldir | |
2362 z80_ldd_ldi 1 | |
2363 if pvflag | |
2364 | |
2365 add 1 pc wz | |
2366 sub 2 pc pc | |
2367 cycles 5 | |
2368 | |
2369 end | |
2370 | |
2371 ed 10111000 lddr | |
2372 z80_ldd_ldi -1 | |
2373 if pvflag | |
2374 | |
2375 add 1 pc wz | |
2376 sub 2 pc pc | |
2377 cycles 5 | |
2378 | |
2379 end | |
2380 | |
2381 z80_cpd_cpi | |
2382 local tmp 16 | |
2383 local tmp8 8 | |
2384 local hf 8 | |
2385 arg change 16 | |
2386 | |
2387 z80_fetch_mod_hl change | |
2388 sub scratch1 a tmp8 | |
2389 update_flags SZHN1 | |
2390 | |
2391 lsr chflags 3 hf | |
2392 and 1 hf hf | |
2393 | |
2394 sub hf tmp8 tmp8 | |
2395 update_flags X | |
2396 | |
2397 and 0x2 tmp8 tmp8 | |
2398 lsl tmp8 4 tmp8 | |
2399 and 0x88 last_flag_result last_flag_result | |
2400 or tmp8 last_flag_result last_flag_result | |
2401 | |
2402 lsl b 8 tmp | |
2403 or c tmp tmp | |
2404 sub 1 tmp tmp | |
2405 | |
2406 mov tmp c | |
2407 lsr tmp 8 b | |
2408 mov c pvflag | |
2409 or b pvflag pvflag | |
2410 | |
2411 cycles 5 | |
2412 | |
2413 ed 10100001 cpi | |
2414 z80_cpd_cpi 1 | |
2415 | |
2416 ed 10101001 cpd | |
2417 z80_cpd_cpi -1 | |
2418 | |
2419 ed 10110001 cpir | |
2420 z80_cpd_cpi 1 | |
2421 if pvflag | |
2422 | |
2423 if zflag | |
2424 | |
2425 else | |
2426 | |
2427 add 1 pc wz | |
2428 sub 2 pc pc | |
2429 cycles 5 | |
2430 | |
2431 end | |
2432 end | |
2433 | |
2434 ed 10111001 cpdr | |
2435 z80_cpd_cpi -1 | |
2436 if pvflag | |
2437 | |
2438 if zflag | |
2439 | |
2440 else | |
2441 | |
2442 add 1 pc wz | |
2443 sub 2 pc pc | |
2444 cycles 5 | |
2445 | |
2446 end | |
2447 end | |
2448 | |
2449 00100111 daa | |
2450 local diff 8 | |
2451 local tmp 8 | |
2452 local low 8 | |
2453 and 0xF a low | |
2454 and 0x8 chflags tmp | |
2455 if tmp | |
2456 | |
2457 mov 6 diff | |
2458 | |
2459 else | |
2460 | |
2461 cmp 0xA low | |
2462 if >=U | |
2463 mov 6 diff | |
2464 else | |
2465 mov 0 diff | |
2466 end | |
2467 | |
2468 end | |
2469 | |
2470 and 0x80 chflags tmp | |
2471 if tmp | |
2472 | |
2473 or 0x60 diff diff | |
2474 update_flags C1 | |
2475 | |
2476 else | |
2477 | |
2478 cmp 0x9A a | |
2479 if >=U | |
2480 or 0x60 diff diff | |
2481 update_flags C1 | |
2482 else | |
2483 update_flags C0 | |
2484 end | |
2485 end | |
2486 | |
2487 if nflag | |
2488 | |
2489 sub diff a a | |
2490 update_flags SZYHPX | |
2491 | |
2492 else | |
2493 | |
2494 add diff a a | |
2495 update_flags SZYHPX | |
2496 | |
2497 end | |
2498 | |
2499 dd OOOOOOOO dd_normal | |
2500 dispatch O | |
2501 | |
2502 fd OOOOOOOO fd_normal | |
2503 dispatch O | |
2504 | |
2505 ed 01101111 rld | |
2506 local tmp 8 | |
2507 local tmp2 8 | |
2508 z80_fetch_hl | |
2509 cycles 4 | |
2510 | |
2511 lsr scratch1 4 tmp | |
2512 | |
2513 lsl scratch1 4 scratch1 | |
2514 | |
2515 and 0xF a tmp2 | |
2516 or tmp2 scratch1 scratch1 | |
2517 | |
2518 and 0xF0 a a | |
2519 or tmp a a | |
2520 update_flags SZYH0XPN0 | |
2521 z80_store_hl | |
2522 | |
2523 ed 01100111 rrd | |
2524 local tmp 8 | |
2525 local tmp2 8 | |
2526 z80_fetch_hl | |
2527 cycles 4 | |
2528 | |
2529 and 0xF scratch1 tmp | |
2530 lsr scratch1 4 scratch1 | |
2531 | |
2532 lsl a 4 tmp2 | |
2533 or tmp2 scratch1 scratch1 | |
2534 | |
2535 and 0xF0 a a | |
2536 or tmp a a | |
2537 update_flags SZYH0XPN0 | |
2538 z80_store_hl | |
2539 |