comparison m68k.cpu @ 2454:b1e8e7554f2f

Implement bit instructions in new CPU core
author Michael Pavone <pavone@retrodev.com>
date Mon, 19 Feb 2024 22:52:21 -0800
parents 7d7525769ce2
children 72d0eac49507
comparison
equal deleted inserted replaced
2453:7d7525769ce2 2454:b1e8e7554f2f
1387 end 1387 end
1388 cmp src aregs.D 1388 cmp src aregs.D
1389 update_flags NZVC 1389 update_flags NZVC
1390 m68k_prefetch 1390 m68k_prefetch
1391 1391
1392 0000100000MMMRRR btsti
1393 invalid M 1
1394 invalid M 7 R 5
1395 invalid M 7 R 6
1396 invalid M 7 R 7
1397
1398 local tmp 32
1399 m68k_prefetch
1400 if M
1401 tmp = scratch1 & 7
1402 meta size 0
1403 else
1404 cycles 2
1405 tmp = scratch1 & 31
1406 meta size 2
1407 end
1408 tmp = 1 << tmp
1409 m68k_fetch_src_ea M R size
1410 tmp &= src
1411 update_flags Z
1412 m68k_prefetch
1413
1414 0000100001MMMRRR bchgi
1415 invalid M 1
1416 invalid M 7 R 2
1417 invalid M 7 R 3
1418 invalid M 7 R 4
1419 invalid M 7 R 5
1420 invalid M 7 R 6
1421 invalid M 7 R 7
1422
1423 local tmp 32
1424 local tmp2 32
1425 m68k_prefetch
1426 if M
1427 tmp = scratch1 & 7
1428 meta size 0
1429 else
1430 tmp = scratch1 & 31
1431 meta size 2
1432 if tmp >=U 16
1433 cycles 4
1434 else
1435 cycles 2
1436 end
1437 end
1438 tmp = 1 << tmp
1439 m68k_fetch_dst_ea M R size
1440 tmp2 = tmp & dst
1441 update_flags Z
1442 dst ^= tmp
1443 m68k_save_dst size
1444 m68k_prefetch
1445
1446 0000100010MMMRRR bclri
1447 invalid M 1
1448 invalid M 7 R 2
1449 invalid M 7 R 3
1450 invalid M 7 R 4
1451 invalid M 7 R 5
1452 invalid M 7 R 6
1453 invalid M 7 R 7
1454
1455 local tmp 32
1456 local tmp2 32
1457 m68k_prefetch
1458 if M
1459 tmp = scratch1 & 7
1460 meta size 0
1461 else
1462 tmp = scratch1 & 31
1463 meta size 2
1464 if tmp >=U 16
1465 cycles 6
1466 else
1467 cycles 4
1468 end
1469 end
1470 tmp = 1 << tmp
1471 m68k_fetch_dst_ea M R size
1472 tmp2 = tmp & dst
1473 update_flags Z
1474 tmp = ~tmp
1475 dst &= tmp
1476 m68k_save_dst size
1477 m68k_prefetch
1478
1479 0000100011MMMRRR bseti
1480 invalid M 1
1481 invalid M 7 R 2
1482 invalid M 7 R 3
1483 invalid M 7 R 4
1484 invalid M 7 R 5
1485 invalid M 7 R 6
1486 invalid M 7 R 7
1487
1488 local tmp 32
1489 local tmp2 32
1490 m68k_prefetch
1491 if M
1492 tmp = scratch1 & 7
1493 meta size 0
1494 else
1495 tmp = scratch1 & 31
1496 meta size 2
1497 if tmp >=U 16
1498 cycles 4
1499 else
1500 cycles 2
1501 end
1502 end
1503 tmp = 1 << tmp
1504 m68k_fetch_dst_ea M R size
1505 tmp2 = tmp & dst
1506 update_flags Z
1507 dst |= tmp
1508 m68k_save_dst size
1509 m68k_prefetch
1510
1511 0000SSS100MMMRRR btst_dn
1512 invalid M 1
1513 invalid M 7 R 5
1514 invalid M 7 R 6
1515 invalid M 7 R 7
1516
1517 local tmp 32
1518 if M
1519 tmp = dregs.S & 7
1520 meta size 0
1521 else
1522 tmp = dregs.S & 31
1523 meta size 2
1524 cycles 2
1525 end
1526 tmp = 1 << tmp
1527 m68k_fetch_src_ea M R size
1528 tmp &= src
1529 update_flags Z
1530 m68k_prefetch
1531
1532 0000SSS101MMMRRR bchg_dn
1533 invalid M 1
1534 invalid M 7 R 2
1535 invalid M 7 R 3
1536 invalid M 7 R 4
1537 invalid M 7 R 5
1538 invalid M 7 R 6
1539 invalid M 7 R 7
1540
1541 local tmp 32
1542 local tmp2 32
1543 if M
1544 tmp = dregs.S & 7
1545 meta size 0
1546 else
1547 tmp = dregs.S & 31
1548 meta size 2
1549 if tmp >=U 16
1550 cycles 4
1551 else
1552 cycles 2
1553 end
1554 end
1555 tmp = 1 << tmp
1556 m68k_fetch_dst_ea M R size
1557 tmp2 = tmp & dst
1558 update_flags Z
1559 dst ^= tmp
1560 m68k_save_dst size
1561 m68k_prefetch
1562
1563 0000SSS110MMMRRR bclr_dn
1564 invalid M 1
1565 invalid M 7 R 2
1566 invalid M 7 R 3
1567 invalid M 7 R 4
1568 invalid M 7 R 5
1569 invalid M 7 R 6
1570 invalid M 7 R 7
1571
1572 local tmp 32
1573 local tmp2 32
1574 if M
1575 tmp = dregs.S & 7
1576 meta size 0
1577 else
1578 tmp = dregs.S & 31
1579 meta size 2
1580 if tmp >=U 16
1581 cycles 6
1582 else
1583 cycles 4
1584 end
1585 end
1586 tmp = 1 << tmp
1587 m68k_fetch_dst_ea M R size
1588 tmp2 = tmp & dst
1589 update_flags Z
1590 tmp = ~tmp
1591 dst &= tmp
1592 m68k_save_dst size
1593 m68k_prefetch
1594
1595 0000SSS111MMMRRR bset_dn
1596 invalid M 1
1597 invalid M 7 R 2
1598 invalid M 7 R 3
1599 invalid M 7 R 4
1600 invalid M 7 R 5
1601 invalid M 7 R 6
1602 invalid M 7 R 7
1603
1604 local tmp 32
1605 local tmp2 32
1606 if M
1607 tmp = dregs.S & 7
1608 meta size 0
1609 else
1610 tmp = dregs.S & 31
1611 meta size 2
1612 if tmp >=U 16
1613 cycles 4
1614 else
1615 cycles 2
1616 end
1617 end
1618 tmp = 1 << tmp
1619 m68k_fetch_dst_ea M R size
1620 tmp2 = tmp & dst
1621 update_flags Z
1622 dst |= tmp
1623 m68k_save_dst size
1624 m68k_prefetch
1625
1392 0100111001110000 reset 1626 0100111001110000 reset
1393 if reset_handler 1627 if reset_handler
1394 pcall reset_handler m68k_reset_handler context 1628 pcall reset_handler m68k_reset_handler context
1395 end 1629 end
1396 cycles 128 1630 cycles 128