comparison m68k.cpu @ 2610:2de52352936c

Fix lsl in new CPU core and make asl less broken
author Michael Pavone <pavone@retrodev.com>
date Sat, 15 Feb 2025 19:11:40 -0800
parents b0a7b1f708cc
children 9bd90cd94000
comparison
equal deleted inserted replaced
2609:fbb5115b1a27 2610:2de52352936c
1571 1571
1572 1110CCC1ZZ101RRR lsl_dn 1572 1110CCC1ZZ101RRR lsl_dn
1573 invalid Z 3 1573 invalid Z 3
1574 local shift 8 1574 local shift 8
1575 and dregs.C 63 shift 1575 and dregs.C 63 shift
1576 lsl dregs.R shift dregs.R Z 1576 switch Z
1577 update_flags XNZV0C 1577 case 2
1578 if shift >=U 32
1579 if shift = 32
1580 lsl dregs.R 31 dregs.R Z
1581 lsl dregs.R 1 dregs.R Z
1582 update_flags XN0Z1V0C
1583 else
1584 dregs.R:Z = 0
1585 update_flags X0N0Z1V0C0
1586 end
1587 else
1588 lsl dregs.R shift dregs.R Z
1589 update_flags NZV0C
1590 if shift
1591 xflag = cflag
1592 end
1593 end
1594 case 1
1595 if shift >=U 16
1596 if shift = 16
1597 lsl dregs.R 15 dregs.R Z
1598 lsl dregs.R 1 dregs.R Z
1599 update_flags XN0Z1V0C
1600 else
1601 dregs.R:Z = 0
1602 update_flags X0N0Z1V0C0
1603 end
1604 else
1605 lsl dregs.R shift dregs.R Z
1606 update_flags NZV0C
1607 if shift
1608 xflag = cflag
1609 end
1610 end
1611 case 0
1612 if shift >=U 8
1613 if shift = 8
1614 lsl dregs.R 7 dregs.R Z
1615 lsl dregs.R 1 dregs.R Z
1616 update_flags XN0Z1V0C
1617 else
1618 dregs.R:Z = 0
1619 update_flags X0N0Z1V0C0
1620 end
1621 else
1622 lsl dregs.R shift dregs.R Z
1623 update_flags NZV0C
1624 if shift
1625 xflag = cflag
1626 end
1627 end
1628 end
1578 add shift shift shift 1629 add shift shift shift
1579 switch Z 1630 switch Z
1580 case 2 1631 case 2
1581 add 4 shift shift 1632 add 4 shift shift
1582 default 1633 default
1626 1677
1627 1110CCC1ZZ100RRR asl_dn 1678 1110CCC1ZZ100RRR asl_dn
1628 invalid Z 3 1679 invalid Z 3
1629 local shift 8 1680 local shift 8
1630 and dregs.C 63 shift 1681 and dregs.C 63 shift
1631 lsl dregs.R shift dregs.R Z 1682 #TODO: implement loops and do this a bit at a time to implement V flag
1632 update_flags XNZV0C 1683 switch Z
1684 case 2
1685 if shift >=U 32
1686 if shift = 32
1687 lsl dregs.R 31 dregs.R Z
1688 lsl dregs.R 1 dregs.R Z
1689 update_flags XNZ1V0C
1690 else
1691 dregs.R:Z = 0
1692 update_flags X0N0Z1V0C0
1693 end
1694 else
1695 lsl dregs.R shift dregs.R Z
1696 update_flags NZV0C
1697 if shift
1698 xflag = cflag
1699 end
1700 end
1701 case 1
1702 if shift >=U 16
1703 if shift = 16
1704 lsl dregs.R 15 dregs.R Z
1705 lsl dregs.R 1 dregs.R Z
1706 update_flags XN0Z1V0C
1707 else
1708 dregs.R:Z = 0
1709 update_flags X0N0Z1V0C0
1710 end
1711 else
1712 lsl dregs.R shift dregs.R Z
1713 update_flags NZV0C
1714 if shift
1715 xflag = cflag
1716 end
1717 end
1718 case 0
1719 if shift >=U 8
1720 if shift = 8
1721 lsl dregs.R 7 dregs.R Z
1722 lsl dregs.R 1 dregs.R Z
1723 update_flags XN0Z1V0C
1724 else
1725 dregs.R:Z = 0
1726 update_flags X0N0Z1V0C0
1727 end
1728 else
1729 lsl dregs.R shift dregs.R Z
1730 update_flags NZV0C
1731 if shift
1732 xflag = cflag
1733 end
1734 end
1735 end
1633 add shift shift shift 1736 add shift shift shift
1634 switch Z 1737 switch Z
1635 case 2 1738 case 2
1636 add 4 shift shift 1739 add 4 shift shift
1637 default 1740 default