Mercurial > repos > blastem
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 |