Mercurial > repos > blastem
comparison m68k.cpu @ 2611:9bd90cd94000
Fix asr and lsr in new 68K core
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 15 Feb 2025 23:06:49 -0800 |
parents | 2de52352936c |
children | 1579b840a1af |
comparison
equal
deleted
inserted
replaced
2610:2de52352936c | 2611:9bd90cd94000 |
---|---|
1440 | 1440 |
1441 1110CCC0ZZ101RRR lsr_dn | 1441 1110CCC0ZZ101RRR lsr_dn |
1442 invalid Z 3 | 1442 invalid Z 3 |
1443 local shift 8 | 1443 local shift 8 |
1444 and dregs.C 63 shift | 1444 and dregs.C 63 shift |
1445 lsr dregs.R shift dregs.R Z | 1445 switch Z |
1446 update_flags XNZV0C | 1446 case 2 |
1447 if shift >=U 32 | |
1448 if shift = 32 | |
1449 lsr dregs.R 31 dregs.R Z | |
1450 lsr dregs.R 1 dregs.R Z | |
1451 update_flags XN0Z1V0C | |
1452 else | |
1453 dregs.R:Z = 0 | |
1454 update_flags X0N0Z1V0C0 | |
1455 end | |
1456 else | |
1457 lsr dregs.R shift dregs.R Z | |
1458 update_flags NZV0C | |
1459 if shift | |
1460 xflag = cflag | |
1461 end | |
1462 end | |
1463 case 1 | |
1464 if shift >=U 16 | |
1465 if shift = 16 | |
1466 lsr dregs.R 15 dregs.R Z | |
1467 lsr dregs.R 1 dregs.R Z | |
1468 update_flags XN0Z1V0C | |
1469 else | |
1470 dregs.R:Z = 0 | |
1471 update_flags X0N0Z1V0C0 | |
1472 end | |
1473 else | |
1474 lsr dregs.R shift dregs.R Z | |
1475 update_flags NZV0C | |
1476 if shift | |
1477 xflag = cflag | |
1478 end | |
1479 end | |
1480 case 0 | |
1481 if shift >=U 8 | |
1482 if shift = 8 | |
1483 lsr dregs.R 7 dregs.R Z | |
1484 lsr dregs.R 1 dregs.R Z | |
1485 update_flags XN0Z1V0C | |
1486 else | |
1487 dregs.R:Z = 0 | |
1488 update_flags X0N0Z1V0C0 | |
1489 end | |
1490 else | |
1491 lsr dregs.R shift dregs.R Z | |
1492 update_flags NZV0C | |
1493 if shift | |
1494 xflag = cflag | |
1495 end | |
1496 end | |
1497 end | |
1447 add shift shift shift | 1498 add shift shift shift |
1448 switch Z | 1499 switch Z |
1449 case 2 | 1500 case 2 |
1450 add 4 shift shift | 1501 add 4 shift shift |
1451 default | 1502 default |
1494 m68k_prefetch | 1545 m68k_prefetch |
1495 | 1546 |
1496 1110CCC0ZZ100RRR asr_dn | 1547 1110CCC0ZZ100RRR asr_dn |
1497 invalid Z 3 | 1548 invalid Z 3 |
1498 local shift 32 | 1549 local shift 32 |
1499 local shift_cycles 32 | |
1500 and dregs.C 63 shift | 1550 and dregs.C 63 shift |
1501 shift_cycles = shift | 1551 switch Z |
1502 if shift = 0 | 1552 case 2 |
1503 cmp 0 dregs.R Z | 1553 if shift >=U 32 |
1504 update_flags NZV0C0 | 1554 asr dregs.R 31 dregs.R Z |
1505 else | 1555 asr dregs.R 1 dregs.R Z |
1506 switch Z | 1556 update_flags NZV0 |
1507 case 0 | 1557 cflag = nflag |
1508 if shift >=U 9 | 1558 xflag = nflag |
1509 shift = 8 | 1559 else |
1560 asr dregs.R shift dregs.R Z | |
1561 update_flags NZV0C | |
1562 if shift | |
1563 xflag = cflag | |
1510 end | 1564 end |
1511 case 1 | 1565 end |
1512 if shift >=U 17 | 1566 case 1 |
1513 shift = 16 | 1567 if shift >=U 16 |
1568 asr dregs.R 15 dregs.R Z | |
1569 asr dregs.R 1 dregs.R Z | |
1570 update_flags NZV0 | |
1571 cflag = nflag | |
1572 xflag = nflag | |
1573 else | |
1574 asr dregs.R shift dregs.R Z | |
1575 update_flags NZV0C | |
1576 if shift | |
1577 xflag = cflag | |
1514 end | 1578 end |
1515 case 2 | 1579 end |
1516 if shift >=U 33 | 1580 case 0 |
1517 shift = 32 | 1581 if shift >=U 8 |
1582 asr dregs.R 7 dregs.R Z | |
1583 asr dregs.R 1 dregs.R Z | |
1584 update_flags NZV0 | |
1585 cflag = nflag | |
1586 xflag = nflag | |
1587 else | |
1588 asr dregs.R shift dregs.R Z | |
1589 update_flags NZV0C | |
1590 if shift | |
1591 xflag = cflag | |
1518 end | 1592 end |
1519 end | 1593 end |
1520 asr dregs.R shift dregs.R Z | 1594 end |
1521 update_flags XNZV0C | 1595 shift += shift |
1522 end | 1596 switch Z |
1523 shift_cycles += shift_cycles | 1597 case 2 |
1524 switch Z | 1598 shift += 4 |
1525 case 2 | 1599 default |
1526 shift_cycles += 4 | 1600 shift += 2 |
1527 default | 1601 end |
1528 shift_cycles += 2 | 1602 cycles shift |
1529 end | |
1530 cycles shift_cycles | |
1531 #TODO: should this happen before or after the majority of the shift? | 1603 #TODO: should this happen before or after the majority of the shift? |
1532 m68k_prefetch | 1604 m68k_prefetch |
1533 | 1605 |
1534 1110000011MMMRRR asr_ea | 1606 1110000011MMMRRR asr_ea |
1535 invalid M 0 | 1607 invalid M 0 |