comparison z80.cpu @ 1736:06c2438c7641

Implemented conditional call/ret, cpi/cpd/cpir/cpdr and fixed ldir/lddr in new Z80 core
author Michael Pavone <pavone@retrodev.com>
date Mon, 04 Feb 2019 20:47:20 -0800
parents ca2336469397
children d6157b7eb20c
comparison
equal deleted inserted replaced
1735:ca2336469397 1736:06c2438c7641
1534 meta high pch 1534 meta high pch
1535 meta low pc 1535 meta low pc
1536 z80_push 1536 z80_push
1537 mov wz pc 1537 mov wz pc
1538 1538
1539 11CCC100 call_cond
1540 local pch 8
1541 z80_fetch_immed16
1542 z80_check_cond C
1543
1544 if istrue
1545
1546 lsr pc 8 pch
1547 meta high pch
1548 meta low pc
1549 z80_push
1550 mov wz pc
1551
1552 end
1553
1539 11TTT111 rst 1554 11TTT111 rst
1540 local pch 8 1555 local pch 8
1541 lsr pc 8 pch 1556 lsr pc 8 pch
1542 meta high pch 1557 meta high pch
1543 meta low pc 1558 meta low pc
1544 z80_push 1559 z80_push
1545 lsl T 3 scratch1 1560 lsl T 3 scratch1
1546 mov scratch1 pc 1561 mov scratch1 pc
1547 1562
1548 11001001 ret 1563 11001001 ret
1549 #TODO: confirm this goes through wz 1564 local pch 16
1550 local wzh 16 1565 cycles 1
1551 meta high wzh 1566 meta high pch
1552 meta low wz 1567 meta low pc
1553 z80_pop 1568 z80_pop
1554 lsl wzh 8 wzh 1569 lsl pch 8 pch
1555 or wzh wz wz 1570 or pch pc pc
1556 mov wz pc 1571
1572 11CCC000 ret_cond
1573 local pch 16
1574 cycles 1
1575 z80_check_cond C
1576 if istrue
1577
1578 meta high pch
1579 meta low pc
1580 z80_pop
1581 lsl pch 8 pch
1582 or pch pc pc
1583
1584 end
1557 1585
1558 11011011 in_abs 1586 11011011 in_abs
1559 z80_fetch_immed 1587 z80_fetch_immed
1560 ocall io_read8 1588 ocall io_read8
1561 mov scratch1 a 1589 mov scratch1 a
2075 ed 10110000 ldir 2103 ed 10110000 ldir
2076 z80_ldd_ldi 1 2104 z80_ldd_ldi 1
2077 if pvflag 2105 if pvflag
2078 2106
2079 add 1 pc wz 2107 add 1 pc wz
2080 sub 1 pc pc 2108 sub 2 pc pc
2081 cycles 5 2109 cycles 5
2082 2110
2083 end 2111 end
2084 2112
2085 ed 10111000 lddr 2113 ed 10111000 lddr
2086 z80_ldd_ldi -1 2114 z80_ldd_ldi -1
2087 if pvflag 2115 if pvflag
2088 2116
2089 add 1 pc wz 2117 add 1 pc wz
2090 sub 1 pc pc 2118 sub 2 pc pc
2091 cycles 5 2119 cycles 5
2092 2120
2093 end 2121 end
2094 2122
2095 2123 z80_cpd_cpi
2096 2124 local tmp 16
2125 local tmp8 8
2126 arg change 16
2127
2128 z80_fetch_mod_hl change
2129 sub scratch1 a tmp8
2130 update_flags SZHXN1
2131
2132 and 0x2 tmp8 tmp8
2133 lsl tmp8 4 tmp8
2134 and 0x88 last_flag_result last_flag_result
2135 or tmp8 last_flag_result last_flag_result
2136
2137 lsl b 8 tmp
2138 or c tmp tmp
2139 sub 1 tmp tmp
2140
2141 mov tmp c
2142 lsr tmp 8 b
2143 mov c pvflag
2144 or b pvflag pvflag
2145
2146 cycles 5
2147
2148 ed 10100001 cpi
2149 z80_cpd_cpi 1
2150
2151 ed 10101001 cpd
2152 z80_cpd_cpi -1
2153
2154 ed 10110001 cpir
2155 z80_cpd_cpi 1
2156 if pvflag
2157
2158 add 1 pc wz
2159 sub 2 pc pc
2160 cycles 5
2161
2162 end
2163
2164 ed 10111001 cpdr
2165 z80_cpd_cpi -1
2166 if pvflag
2167
2168 add 1 pc wz
2169 sub 2 pc pc
2170 cycles 5
2171
2172 end
2173
2174