comparison z80.cpu @ 1753:33ec5df77fac

Integration of new Z80 core is sort of working now
author Michael Pavone <pavone@retrodev.com>
date Tue, 12 Feb 2019 09:58:04 -0800
parents d6d4c006a7b3
children 093e323dc683
comparison
equal deleted inserted replaced
1752:d6d4c006a7b3 1753:33ec5df77fac
52 reset 8 52 reset 8
53 io_map ptrmemmap_chunk 53 io_map ptrmemmap_chunk
54 io_chunks 32 54 io_chunks 32
55 io_mask 32 55 io_mask 32
56 int_cycle 32 56 int_cycle 32
57 int_end_cycle 32
57 int_value 8 58 int_value 8
58 nmi_cycle 32 59 nmi_cycle 32
59 system ptrvoid 60 system ptrvoid
60 fastmem ptr8 64 61 fastread ptr8 64
62 fastwrite ptr8 64
61 mem_pointers ptr8 4 63 mem_pointers ptr8 4
62 64
63 flags 65 flags
64 register f 66 register f
65 S 7 sign last_flag_result.7 67 S 7 sign last_flag_result.7
79 mov pc scratch1 81 mov pc scratch1
80 ocall read_8 82 ocall read_8
81 add 1 pc pc 83 add 1 pc pc
82 84
83 z80_run_op 85 z80_run_op
86 #printf "Z80: %X @ %d\n" pc cycles
84 z80_op_fetch 87 z80_op_fetch
85 dispatch scratch1 88 dispatch scratch1
86 89
87 z80_interrupt 90 z80_interrupt
88 cmp int_cycle cycles 91 cmp int_cycle cycles
89 if >=U 92 if >=U
90 93
91 mov 0xFFFFFFFF int_cycle
92 mov 0 iff1 94 mov 0 iff1
93 mov 0 iff2 95 mov 0 iff2
94 cycles 6 96 cycles 6
95 update_sync 97 update_sync
96 98
1533 sub 1 pc pc 1535 sub 1 pc pc
1534 1536
1535 11110011 di 1537 11110011 di
1536 mov 0 iff1 1538 mov 0 iff1
1537 mov 0 iff2 1539 mov 0 iff2
1538 #TODO: update interrupt/sync cycle 1540 update_sync
1539 1541
1540 11111011 ei 1542 11111011 ei
1541 mov 1 iff1 1543 mov 1 iff1
1542 mov 1 iff2 1544 mov 1 iff2
1543 #TODO: update interrupt/sync cycle 1545 update_sync
1546 cmp int_cycle cycles
1547 if >=U
1548
1549 add 1 cycles int_cycle
1550
1551 end
1544 1552
1545 ed 01D00110 im0 1553 ed 01D00110 im0
1546 mov 0 imode 1554 mov 0 imode
1547 1555
1548 ed 01D10110 im1 1556 ed 01D10110 im1
1652 meta low pc 1660 meta low pc
1653 z80_pop 1661 z80_pop
1654 lsl pch 8 pch 1662 lsl pch 8 pch
1655 or pch pc pc 1663 or pch pc pc
1656 1664
1657 11CCC000 ret_cond 1665 ed 01001101 reti
1658 local pch 16 1666 local pch 16
1659 cycles 1 1667 cycles 1
1660 z80_check_cond C
1661 if istrue
1662
1663 meta high pch 1668 meta high pch
1664 meta low pc 1669 meta low pc
1665 z80_pop 1670 z80_pop
1666 lsl pch 8 pch 1671 lsl pch 8 pch
1667 or pch pc pc 1672 or pch pc pc
1668 1673
1674 ed 01NN1101 retn
1675 mov iff2 iff1
1676 local pch 16
1677 cycles 1
1678 meta high pch
1679 meta low pc
1680 z80_pop
1681 lsl pch 8 pch
1682 or pch pc pc
1683
1684 11CCC000 ret_cond
1685 local pch 16
1686 cycles 1
1687 z80_check_cond C
1688 if istrue
1689
1690 meta high pch
1691 meta low pc
1692 z80_pop
1693 lsl pch 8 pch
1694 or pch pc pc
1695
1669 end 1696 end
1670 1697
1671 11011011 in_abs 1698 11011011 in_abs
1672 z80_fetch_immed 1699 z80_fetch_immed
1673 ocall io_read8 1700 ocall io_read8
1688 ed 01RRR001 out_bc 1715 ed 01RRR001 out_bc
1689 lsl b 8 scratch2 1716 lsl b 8 scratch2
1690 or c scratch2 scratch2 1717 or c scratch2 scratch2
1691 mov main.R scratch1 1718 mov main.R scratch1
1692 ocall io_write8 1719 ocall io_write8
1720
1721 z80_outi_outd
1722 arg change 16
1723 local tmp 8
1724 cycles 1
1725 z80_fetch_hl
1726
1727 and 0x80 scratch1 nflag
1728
1729 lsl h 8 scratch2
1730 or l scratch2 scratch2
1731 add change scratch2 scratch2
1732 mov scratch2 l
1733 lsr scratch2 8 h
1734
1735 add l scratch1 tmp
1736 update_flags C
1737 and 7 tmp tmp
1738
1739 lsl 8 b scratch2
1740 or c scratch2 scratch2
1741 ocall io_write8
1742
1743 lsl 8 b wz
1744 or c wz wz
1745
1746 sub 1 b b
1747 update_flags SZYX
1748 xor b tmp tmp
1749 update_flags P
1750 lsr chflags 4 tmp
1751 or tmp chflags chflags
1752
1753 ed 10100011 outi
1754 z80_outi_outd 1
1755
1756 ed 10110011 otir
1757 z80_outi_outd 1
1758 if zflag
1759 else
1760 sub 2 pc pc
1761 cycles 5
1762 end
1763
1764 ed 10101011 outd
1765 z80_outi_outd -1
1766
1767 ed 10111011 otdr
1768 z80_outi_outd -1
1769 if zflag
1770 else
1771 sub 2 pc pc
1772 cycles 5
1773 end
1693 1774
1694 00000111 rlca 1775 00000111 rlca
1695 rol a 1 a 1776 rol a 1 a
1696 update_flags YH0XN0C 1777 update_flags YH0XN0C
1697 1778