trunk/src/emu/cpu/z8000/z8000ops.c
| r19440 | r19441 | |
| 115 | 115 | cpustate->RW(regno) -= subtrahend; |
| 116 | 116 | } |
| 117 | 117 | |
| 118 | INLINE void set_pc(z8000_state *cpustate, UINT32 addr) |
| 119 | { |
| 120 | if (segmented_mode(cpustate)) |
| 121 | cpustate->pc = addr; |
| 122 | else |
| 123 | cpustate->pc = (cpustate->pc & 0xffff0000) | (addr & 0xffff); |
| 124 | } |
| 125 | |
| 118 | 126 | INLINE void PUSHW(z8000_state *cpustate, UINT8 dst, UINT16 value) |
| 119 | 127 | { |
| 120 | 128 | if (segmented_mode(cpustate)) |
| 121 | 129 | cpustate->RW(dst | 1) -= 2; |
| 122 | 130 | else |
| 123 | 131 | cpustate->RW(dst) -= 2; |
| 124 | | WRMEM_W(cpustate, addr_from_reg(cpustate, dst), value); |
| 132 | WRMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, dst), value); |
| 125 | 133 | } |
| 126 | 134 | |
| 127 | 135 | INLINE UINT16 POPW(z8000_state *cpustate, UINT8 src) |
| 128 | 136 | { |
| 129 | | UINT16 result = RDMEM_W(cpustate, addr_from_reg(cpustate, src)); |
| 137 | UINT16 result = RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src)); |
| 130 | 138 | if (segmented_mode(cpustate)) |
| 131 | 139 | cpustate->RW(src | 1) += 2; |
| 132 | 140 | else |
| r19440 | r19441 | |
| 140 | 148 | cpustate->RW(dst | 1) -= 4; |
| 141 | 149 | else |
| 142 | 150 | cpustate->RW(dst) -= 4; |
| 143 | | WRMEM_L(cpustate, addr_from_reg(cpustate, dst), value); |
| 151 | WRMEM_L(cpustate, AS_DATA, addr_from_reg(cpustate, dst), value); |
| 144 | 152 | } |
| 145 | 153 | |
| 146 | 154 | INLINE UINT32 POPL(z8000_state *cpustate, UINT8 src) |
| 147 | 155 | { |
| 148 | | UINT32 result = RDMEM_L(cpustate, addr_from_reg(cpustate, src)); |
| 156 | UINT32 result = RDMEM_L(cpustate, AS_DATA, addr_from_reg(cpustate, src)); |
| 149 | 157 | if (segmented_mode(cpustate)) |
| 150 | 158 | cpustate->RW(src | 1) += 4; |
| 151 | 159 | else |
| r19440 | r19441 | |
| 1203 | 1211 | { |
| 1204 | 1212 | GET_DST(OP0,NIB3); |
| 1205 | 1213 | GET_SRC(OP0,NIB2); |
| 1206 | | cpustate->RB(dst) = ADDB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); |
| 1214 | cpustate->RB(dst) = ADDB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1207 | 1215 | } |
| 1208 | 1216 | |
| 1209 | 1217 | /****************************************** |
| r19440 | r19441 | |
| 1225 | 1233 | { |
| 1226 | 1234 | GET_DST(OP0,NIB3); |
| 1227 | 1235 | GET_SRC(OP0,NIB2); |
| 1228 | | cpustate->RW(dst) = ADDW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 1236 | cpustate->RW(dst) = ADDW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1229 | 1237 | } |
| 1230 | 1238 | |
| 1231 | 1239 | /****************************************** |
| r19440 | r19441 | |
| 1247 | 1255 | { |
| 1248 | 1256 | GET_DST(OP0,NIB3); |
| 1249 | 1257 | GET_SRC(OP0,NIB2); |
| 1250 | | cpustate->RB(dst) = SUBB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); /* EHC */ |
| 1258 | cpustate->RB(dst) = SUBB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); /* EHC */ |
| 1251 | 1259 | } |
| 1252 | 1260 | |
| 1253 | 1261 | /****************************************** |
| r19440 | r19441 | |
| 1269 | 1277 | { |
| 1270 | 1278 | GET_DST(OP0,NIB3); |
| 1271 | 1279 | GET_SRC(OP0,NIB2); |
| 1272 | | cpustate->RW(dst) = SUBW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 1280 | cpustate->RW(dst) = SUBW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1273 | 1281 | } |
| 1274 | 1282 | |
| 1275 | 1283 | /****************************************** |
| r19440 | r19441 | |
| 1291 | 1299 | { |
| 1292 | 1300 | GET_DST(OP0,NIB3); |
| 1293 | 1301 | GET_SRC(OP0,NIB2); |
| 1294 | | cpustate->RB(dst) = ORB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); |
| 1302 | cpustate->RB(dst) = ORB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1295 | 1303 | } |
| 1296 | 1304 | |
| 1297 | 1305 | /****************************************** |
| r19440 | r19441 | |
| 1313 | 1321 | { |
| 1314 | 1322 | GET_DST(OP0,NIB3); |
| 1315 | 1323 | GET_SRC(OP0,NIB2); |
| 1316 | | cpustate->RW(dst) = ORW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 1324 | cpustate->RW(dst) = ORW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1317 | 1325 | } |
| 1318 | 1326 | |
| 1319 | 1327 | /****************************************** |
| r19440 | r19441 | |
| 1335 | 1343 | { |
| 1336 | 1344 | GET_DST(OP0,NIB3); |
| 1337 | 1345 | GET_SRC(OP0,NIB2); |
| 1338 | | cpustate->RB(dst) = ANDB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); |
| 1346 | cpustate->RB(dst) = ANDB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1339 | 1347 | } |
| 1340 | 1348 | |
| 1341 | 1349 | /****************************************** |
| r19440 | r19441 | |
| 1357 | 1365 | { |
| 1358 | 1366 | GET_DST(OP0,NIB3); |
| 1359 | 1367 | GET_SRC(OP0,NIB2); |
| 1360 | | cpustate->RW(dst) = ANDW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 1368 | cpustate->RW(dst) = ANDW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1361 | 1369 | } |
| 1362 | 1370 | |
| 1363 | 1371 | /****************************************** |
| r19440 | r19441 | |
| 1379 | 1387 | { |
| 1380 | 1388 | GET_DST(OP0,NIB3); |
| 1381 | 1389 | GET_SRC(OP0,NIB2); |
| 1382 | | cpustate->RB(dst) = XORB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); |
| 1390 | cpustate->RB(dst) = XORB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1383 | 1391 | } |
| 1384 | 1392 | |
| 1385 | 1393 | /****************************************** |
| r19440 | r19441 | |
| 1401 | 1409 | { |
| 1402 | 1410 | GET_DST(OP0,NIB3); |
| 1403 | 1411 | GET_SRC(OP0,NIB2); |
| 1404 | | cpustate->RW(dst) = XORW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 1412 | cpustate->RW(dst) = XORW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1405 | 1413 | } |
| 1406 | 1414 | |
| 1407 | 1415 | /****************************************** |
| r19440 | r19441 | |
| 1423 | 1431 | { |
| 1424 | 1432 | GET_DST(OP0,NIB3); |
| 1425 | 1433 | GET_SRC(OP0,NIB2); |
| 1426 | | CPB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); |
| 1434 | CPB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1427 | 1435 | } |
| 1428 | 1436 | |
| 1429 | 1437 | /****************************************** |
| r19440 | r19441 | |
| 1445 | 1453 | { |
| 1446 | 1454 | GET_DST(OP0,NIB3); |
| 1447 | 1455 | GET_SRC(OP0,NIB2); |
| 1448 | | CPW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr_from_reg(cpustate,src))); |
| 1456 | CPW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate,src))); |
| 1449 | 1457 | } |
| 1450 | 1458 | |
| 1451 | 1459 | /****************************************** |
| r19440 | r19441 | |
| 1456 | 1464 | { |
| 1457 | 1465 | GET_DST(OP0,NIB3); |
| 1458 | 1466 | UINT32 addr = addr_from_reg(cpustate, dst); |
| 1459 | | WRMEM_B(cpustate, addr, COMB(cpustate, RDMEM_B(cpustate, addr))); |
| 1467 | WRMEM_B(cpustate, AS_DATA, addr, COMB(cpustate, RDMEM_B(cpustate, AS_DATA, addr))); |
| 1460 | 1468 | } |
| 1461 | 1469 | |
| 1462 | 1470 | /****************************************** |
| r19440 | r19441 | |
| 1467 | 1475 | { |
| 1468 | 1476 | GET_DST(OP0,NIB2); |
| 1469 | 1477 | GET_IMM8(OP1); |
| 1470 | | CPB(cpustate, RDMEM_B(cpustate, addr_from_reg(cpustate, dst)), imm8); // @@@done |
| 1478 | CPB(cpustate, RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst)), imm8); // @@@done |
| 1471 | 1479 | } |
| 1472 | 1480 | |
| 1473 | 1481 | /****************************************** |
| r19440 | r19441 | |
| 1478 | 1486 | { |
| 1479 | 1487 | GET_DST(OP0,NIB2); |
| 1480 | 1488 | UINT32 addr = addr_from_reg(cpustate, dst); |
| 1481 | | WRMEM_B(cpustate, addr, NEGB(cpustate, RDMEM_B(cpustate, addr))); |
| 1489 | WRMEM_B(cpustate, AS_DATA, addr, NEGB(cpustate, RDMEM_B(cpustate, AS_DATA, addr))); |
| 1482 | 1490 | } |
| 1483 | 1491 | |
| 1484 | 1492 | /****************************************** |
| r19440 | r19441 | |
| 1488 | 1496 | static void Z0C_ddN0_0100(z8000_state *cpustate) |
| 1489 | 1497 | { |
| 1490 | 1498 | GET_DST(OP0,NIB2); |
| 1491 | | TESTB(cpustate, RDMEM_B(cpustate, addr_from_reg(cpustate, dst))); |
| 1499 | TESTB(cpustate, RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst))); |
| 1492 | 1500 | } |
| 1493 | 1501 | |
| 1494 | 1502 | /****************************************** |
| r19440 | r19441 | |
| 1499 | 1507 | { |
| 1500 | 1508 | GET_DST(OP0,NIB2); |
| 1501 | 1509 | GET_IMM8(OP1); |
| 1502 | | WRMEM_B(cpustate, addr_from_reg(cpustate, dst), imm8); |
| 1510 | WRMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst), imm8); |
| 1503 | 1511 | } |
| 1504 | 1512 | |
| 1505 | 1513 | /****************************************** |
| r19440 | r19441 | |
| 1510 | 1518 | { |
| 1511 | 1519 | GET_DST(OP0,NIB2); |
| 1512 | 1520 | UINT32 addr = addr_from_reg(cpustate, dst); |
| 1513 | | if (RDMEM_B(cpustate, addr) & S08) SET_S; else CLR_S; |
| 1514 | | WRMEM_B(cpustate, addr, 0xff); |
| 1521 | if (RDMEM_B(cpustate, AS_DATA, addr) & S08) SET_S; else CLR_S; |
| 1522 | WRMEM_B(cpustate, AS_DATA, addr, 0xff); |
| 1515 | 1523 | } |
| 1516 | 1524 | |
| 1517 | 1525 | /****************************************** |
| r19440 | r19441 | |
| 1521 | 1529 | static void Z0C_ddN0_1000(z8000_state *cpustate) |
| 1522 | 1530 | { |
| 1523 | 1531 | GET_DST(OP0,NIB2); |
| 1524 | | WRMEM_B(cpustate, addr_from_reg(cpustate, dst), 0); |
| 1532 | WRMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst), 0); |
| 1525 | 1533 | } |
| 1526 | 1534 | |
| 1527 | 1535 | /****************************************** |
| r19440 | r19441 | |
| 1532 | 1540 | { |
| 1533 | 1541 | GET_DST(OP0,NIB2); |
| 1534 | 1542 | UINT32 addr = addr_from_reg(cpustate, dst); |
| 1535 | | WRMEM_W(cpustate, addr, COMW(cpustate, RDMEM_W(cpustate, addr))); |
| 1543 | WRMEM_W(cpustate, AS_DATA, addr, COMW(cpustate, RDMEM_W(cpustate, AS_DATA, addr))); |
| 1536 | 1544 | } |
| 1537 | 1545 | |
| 1538 | 1546 | /****************************************** |
| r19440 | r19441 | |
| 1543 | 1551 | { |
| 1544 | 1552 | GET_DST(OP0,NIB2); |
| 1545 | 1553 | GET_IMM16(OP1); |
| 1546 | | CPW(cpustate, RDMEM_W(cpustate, addr_from_reg(cpustate, dst)), imm16); |
| 1554 | CPW(cpustate, RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, dst)), imm16); |
| 1547 | 1555 | } |
| 1548 | 1556 | |
| 1549 | 1557 | /****************************************** |
| r19440 | r19441 | |
| 1554 | 1562 | { |
| 1555 | 1563 | GET_DST(OP0,NIB2); |
| 1556 | 1564 | UINT32 addr = addr_from_reg(cpustate, dst); |
| 1557 | | WRMEM_W(cpustate, addr, NEGW(cpustate, RDMEM_W(cpustate, addr))); |
| 1565 | WRMEM_W(cpustate, AS_DATA, addr, NEGW(cpustate, RDMEM_W(cpustate, AS_DATA, addr))); |
| 1558 | 1566 | } |
| 1559 | 1567 | |
| 1560 | 1568 | /****************************************** |
| r19440 | r19441 | |
| 1564 | 1572 | static void Z0D_ddN0_0100(z8000_state *cpustate) |
| 1565 | 1573 | { |
| 1566 | 1574 | GET_DST(OP0,NIB2); |
| 1567 | | TESTW(cpustate, RDMEM_W(cpustate, addr_from_reg(cpustate, dst))); |
| 1575 | TESTW(cpustate, RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, dst))); |
| 1568 | 1576 | } |
| 1569 | 1577 | |
| 1570 | 1578 | /****************************************** |
| r19440 | r19441 | |
| 1575 | 1583 | { |
| 1576 | 1584 | GET_DST(OP0,NIB2); |
| 1577 | 1585 | GET_IMM16(OP1); |
| 1578 | | WRMEM_W(cpustate, addr_from_reg(cpustate, dst), imm16); |
| 1586 | WRMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, dst), imm16); |
| 1579 | 1587 | } |
| 1580 | 1588 | |
| 1581 | 1589 | /****************************************** |
| r19440 | r19441 | |
| 1586 | 1594 | { |
| 1587 | 1595 | GET_DST(OP0,NIB2); |
| 1588 | 1596 | UINT32 addr = addr_from_reg(cpustate, dst); |
| 1589 | | if (RDMEM_W(cpustate, addr) & S16) SET_S; else CLR_S; |
| 1590 | | WRMEM_W(cpustate, addr, 0xffff); |
| 1597 | if (RDMEM_W(cpustate, AS_DATA, addr) & S16) SET_S; else CLR_S; |
| 1598 | WRMEM_W(cpustate, AS_DATA, addr, 0xffff); |
| 1591 | 1599 | } |
| 1592 | 1600 | |
| 1593 | 1601 | /****************************************** |
| r19440 | r19441 | |
| 1597 | 1605 | static void Z0D_ddN0_1000(z8000_state *cpustate) |
| 1598 | 1606 | { |
| 1599 | 1607 | GET_DST(OP0,NIB2); |
| 1600 | | WRMEM_W(cpustate, addr_from_reg(cpustate, dst), 0); |
| 1608 | WRMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, dst), 0); |
| 1601 | 1609 | } |
| 1602 | 1610 | |
| 1603 | 1611 | /****************************************** |
| r19440 | r19441 | |
| 1660 | 1668 | { |
| 1661 | 1669 | GET_DST(OP0,NIB3); |
| 1662 | 1670 | GET_SRC(OP0,NIB2); |
| 1663 | | CPL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, addr_from_reg(cpustate, src))); |
| 1671 | CPL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1664 | 1672 | } |
| 1665 | 1673 | |
| 1666 | 1674 | /****************************************** |
| r19440 | r19441 | |
| 1671 | 1679 | { |
| 1672 | 1680 | GET_SRC(OP0,NIB3); |
| 1673 | 1681 | GET_DST(OP0,NIB2); |
| 1674 | | PUSHL(cpustate, dst, RDMEM_L(cpustate, addr_from_reg(cpustate, src))); |
| 1682 | PUSHL(cpustate, dst, RDMEM_L(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1675 | 1683 | } |
| 1676 | 1684 | |
| 1677 | 1685 | /****************************************** |
| r19440 | r19441 | |
| 1693 | 1701 | { |
| 1694 | 1702 | GET_DST(OP0,NIB3); |
| 1695 | 1703 | GET_SRC(OP0,NIB2); |
| 1696 | | cpustate->RL(dst) = SUBL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, addr_from_reg(cpustate, src))); |
| 1704 | cpustate->RL(dst) = SUBL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1697 | 1705 | } |
| 1698 | 1706 | |
| 1699 | 1707 | /****************************************** |
| r19440 | r19441 | |
| 1704 | 1712 | { |
| 1705 | 1713 | GET_SRC(OP0,NIB3); |
| 1706 | 1714 | GET_DST(OP0,NIB2); |
| 1707 | | PUSHW(cpustate, dst, RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 1715 | PUSHW(cpustate, dst, RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1708 | 1716 | } |
| 1709 | 1717 | |
| 1710 | 1718 | /****************************************** |
| r19440 | r19441 | |
| 1726 | 1734 | { |
| 1727 | 1735 | GET_DST(OP0,NIB3); |
| 1728 | 1736 | GET_SRC(OP0,NIB2); |
| 1729 | | cpustate->RL(dst) = RDMEM_L(cpustate, addr_from_reg(cpustate, src)); |
| 1737 | cpustate->RL(dst) = RDMEM_L(cpustate, AS_DATA, addr_from_reg(cpustate, src)); |
| 1730 | 1738 | } |
| 1731 | 1739 | |
| 1732 | 1740 | /****************************************** |
| r19440 | r19441 | |
| 1759 | 1767 | { |
| 1760 | 1768 | GET_DST(OP0,NIB3); |
| 1761 | 1769 | GET_SRC(OP0,NIB2); |
| 1762 | | cpustate->RL(dst) = ADDL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, addr_from_reg(cpustate, src))); |
| 1770 | cpustate->RL(dst) = ADDL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1763 | 1771 | } |
| 1764 | 1772 | |
| 1765 | 1773 | /****************************************** |
| r19440 | r19441 | |
| 1770 | 1778 | { |
| 1771 | 1779 | GET_DST(OP0,NIB3); |
| 1772 | 1780 | GET_SRC(OP0,NIB2); |
| 1773 | | WRMEM_W(cpustate, addr_from_reg(cpustate, dst), POPW(cpustate, src)); |
| 1781 | WRMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, dst), POPW(cpustate, src)); |
| 1774 | 1782 | } |
| 1775 | 1783 | |
| 1776 | 1784 | /****************************************** |
| r19440 | r19441 | |
| 1814 | 1822 | { |
| 1815 | 1823 | GET_DST(OP0,NIB3); |
| 1816 | 1824 | GET_SRC(OP0,NIB2); |
| 1817 | | cpustate->RL(dst) = MULTW(cpustate, cpustate->RL(dst), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 1825 | cpustate->RL(dst) = MULTW(cpustate, cpustate->RL(dst), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1818 | 1826 | } |
| 1819 | 1827 | |
| 1820 | 1828 | /****************************************** |
| r19440 | r19441 | |
| 1836 | 1844 | { |
| 1837 | 1845 | GET_DST(OP0,NIB3); |
| 1838 | 1846 | GET_SRC(OP0,NIB2); |
| 1839 | | cpustate->RQ(dst) = DIVL(cpustate, cpustate->RQ(dst), RDMEM_L(cpustate, addr_from_reg(cpustate, src))); |
| 1847 | cpustate->RQ(dst) = DIVL(cpustate, cpustate->RQ(dst), RDMEM_L(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1840 | 1848 | } |
| 1841 | 1849 | |
| 1842 | 1850 | /****************************************** |
| r19440 | r19441 | |
| 1858 | 1866 | { |
| 1859 | 1867 | GET_DST(OP0,NIB3); |
| 1860 | 1868 | GET_SRC(OP0,NIB2); |
| 1861 | | cpustate->RL(dst) = DIVW(cpustate, cpustate->RL(dst), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 1869 | cpustate->RL(dst) = DIVW(cpustate, cpustate->RL(dst), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 1862 | 1870 | } |
| 1863 | 1871 | |
| 1864 | 1872 | /****************************************** |
| r19440 | r19441 | |
| 1868 | 1876 | static void Z1C_ddN0_1000(z8000_state *cpustate) |
| 1869 | 1877 | { |
| 1870 | 1878 | GET_DST(OP0,NIB2); |
| 1871 | | TESTL(cpustate, RDMEM_L(cpustate, addr_from_reg(cpustate, dst))); |
| 1879 | TESTL(cpustate, RDMEM_L(cpustate, AS_DATA, addr_from_reg(cpustate, dst))); |
| 1872 | 1880 | } |
| 1873 | 1881 | |
| 1874 | 1882 | /****************************************** |
| r19440 | r19441 | |
| 1882 | 1890 | GET_SRC(OP1,NIB1); |
| 1883 | 1891 | UINT32 addr = addr_from_reg(cpustate, dst); |
| 1884 | 1892 | while (cnt-- >= 0) { |
| 1885 | | WRMEM_W(cpustate, addr, cpustate->RW(src)); |
| 1893 | WRMEM_W(cpustate, AS_DATA, addr, cpustate->RW(src)); |
| 1886 | 1894 | addr = addr_add(cpustate, addr, 2); |
| 1887 | 1895 | src = (src+1) & 15; |
| 1888 | 1896 | } |
| r19440 | r19441 | |
| 1899 | 1907 | GET_DST(OP1,NIB1); |
| 1900 | 1908 | UINT32 addr = addr_from_reg(cpustate, src); |
| 1901 | 1909 | while (cnt-- >= 0) { |
| 1902 | | cpustate->RW(dst) = RDMEM_W(cpustate, addr); |
| 1910 | cpustate->RW(dst) = RDMEM_W(cpustate, AS_DATA, addr); |
| 1903 | 1911 | addr = addr_add(cpustate, addr, 2); |
| 1904 | 1912 | dst = (dst+1) & 15; |
| 1905 | 1913 | } |
| r19440 | r19441 | |
| 1913 | 1921 | { |
| 1914 | 1922 | GET_SRC(OP0,NIB3); |
| 1915 | 1923 | GET_DST(OP0,NIB2); |
| 1916 | | WRMEM_L(cpustate, addr_from_reg(cpustate, dst), cpustate->RL(src)); |
| 1924 | WRMEM_L(cpustate, AS_DATA, addr_from_reg(cpustate, dst), cpustate->RL(src)); |
| 1917 | 1925 | } |
| 1918 | 1926 | |
| 1919 | 1927 | /****************************************** |
| r19440 | r19441 | |
| 1925 | 1933 | GET_CCC(OP0,NIB3); |
| 1926 | 1934 | GET_DST(OP0,NIB2); |
| 1927 | 1935 | switch (cc) { |
| 1928 | | case 0: if (CC0) cpustate->pc = addr_from_reg(cpustate, dst); break; |
| 1929 | | case 1: if (CC1) cpustate->pc = addr_from_reg(cpustate, dst); break; |
| 1930 | | case 2: if (CC2) cpustate->pc = addr_from_reg(cpustate, dst); break; |
| 1931 | | case 3: if (CC3) cpustate->pc = addr_from_reg(cpustate, dst); break; |
| 1932 | | case 4: if (CC4) cpustate->pc = addr_from_reg(cpustate, dst); break; |
| 1933 | | case 5: if (CC5) cpustate->pc = addr_from_reg(cpustate, dst); break; |
| 1934 | | case 6: if (CC6) cpustate->pc = addr_from_reg(cpustate, dst); break; |
| 1935 | | case 7: if (CC7) cpustate->pc = addr_from_reg(cpustate, dst); break; |
| 1936 | | case 8: if (CC8) cpustate->pc = addr_from_reg(cpustate, dst); break; |
| 1937 | | case 9: if (CC9) cpustate->pc = addr_from_reg(cpustate, dst); break; |
| 1938 | | case 10: if (CCA) cpustate->pc = addr_from_reg(cpustate, dst); break; |
| 1939 | | case 11: if (CCB) cpustate->pc = addr_from_reg(cpustate, dst); break; |
| 1940 | | case 12: if (CCC) cpustate->pc = addr_from_reg(cpustate, dst); break; |
| 1941 | | case 13: if (CCD) cpustate->pc = addr_from_reg(cpustate, dst); break; |
| 1942 | | case 14: if (CCE) cpustate->pc = addr_from_reg(cpustate, dst); break; |
| 1943 | | case 15: if (CCF) cpustate->pc = addr_from_reg(cpustate, dst); break; |
| 1936 | case 0: if (CC0) set_pc(cpustate, addr_from_reg(cpustate, dst)); break; |
| 1937 | case 1: if (CC1) set_pc(cpustate, addr_from_reg(cpustate, dst)); break; |
| 1938 | case 2: if (CC2) set_pc(cpustate, addr_from_reg(cpustate, dst)); break; |
| 1939 | case 3: if (CC3) set_pc(cpustate, addr_from_reg(cpustate, dst)); break; |
| 1940 | case 4: if (CC4) set_pc(cpustate, addr_from_reg(cpustate, dst)); break; |
| 1941 | case 5: if (CC5) set_pc(cpustate, addr_from_reg(cpustate, dst)); break; |
| 1942 | case 6: if (CC6) set_pc(cpustate, addr_from_reg(cpustate, dst)); break; |
| 1943 | case 7: if (CC7) set_pc(cpustate, addr_from_reg(cpustate, dst)); break; |
| 1944 | case 8: if (CC8) set_pc(cpustate, addr_from_reg(cpustate, dst)); break; |
| 1945 | case 9: if (CC9) set_pc(cpustate, addr_from_reg(cpustate, dst)); break; |
| 1946 | case 10: if (CCA) set_pc(cpustate, addr_from_reg(cpustate, dst)); break; |
| 1947 | case 11: if (CCB) set_pc(cpustate, addr_from_reg(cpustate, dst)); break; |
| 1948 | case 12: if (CCC) set_pc(cpustate, addr_from_reg(cpustate, dst)); break; |
| 1949 | case 13: if (CCD) set_pc(cpustate, addr_from_reg(cpustate, dst)); break; |
| 1950 | case 14: if (CCE) set_pc(cpustate, addr_from_reg(cpustate, dst)); break; |
| 1951 | case 15: if (CCF) set_pc(cpustate, addr_from_reg(cpustate, dst)); break; |
| 1944 | 1952 | } |
| 1945 | 1953 | } |
| 1946 | 1954 | |
| r19440 | r19441 | |
| 1955 | 1963 | PUSHL(cpustate, SP, make_segmented_addr(cpustate->pc)); |
| 1956 | 1964 | else |
| 1957 | 1965 | PUSHW(cpustate, SP, cpustate->pc); |
| 1958 | | cpustate->pc = addr_from_reg(cpustate, dst); |
| 1966 | set_pc(cpustate, addr_from_reg(cpustate, dst)); |
| 1959 | 1967 | } |
| 1960 | 1968 | |
| 1961 | 1969 | /****************************************** |
| r19440 | r19441 | |
| 1966 | 1974 | { |
| 1967 | 1975 | GET_DST(OP0,NIB3); |
| 1968 | 1976 | GET_SRC(OP0,NIB2); |
| 1969 | | cpustate->RB(dst) = RDMEM_B(cpustate, addr_from_reg(cpustate, src)); |
| 1977 | cpustate->RB(dst) = RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src)); |
| 1970 | 1978 | } |
| 1971 | 1979 | |
| 1972 | 1980 | /****************************************** |
| r19440 | r19441 | |
| 1988 | 1996 | { |
| 1989 | 1997 | GET_DST(OP0,NIB3); |
| 1990 | 1998 | GET_SRC(OP0,NIB2); |
| 1991 | | cpustate->RW(dst) = RDMEM_W(cpustate, addr_from_reg(cpustate, src)); |
| 1999 | cpustate->RW(dst) = RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src)); |
| 1992 | 2000 | } |
| 1993 | 2001 | |
| 1994 | 2002 | /****************************************** |
| r19440 | r19441 | |
| 2011 | 2019 | GET_BIT(OP0); |
| 2012 | 2020 | GET_DST(OP0,NIB2); |
| 2013 | 2021 | UINT32 addr = addr_from_reg(cpustate, dst); |
| 2014 | | WRMEM_B(cpustate, addr, RDMEM_B(cpustate, addr) & ~bit); |
| 2022 | WRMEM_B(cpustate, AS_DATA, addr, RDMEM_B(cpustate, AS_DATA, addr) & ~bit); |
| 2015 | 2023 | } |
| 2016 | 2024 | |
| 2017 | 2025 | /****************************************** |
| r19440 | r19441 | |
| 2034 | 2042 | GET_BIT(OP0); |
| 2035 | 2043 | GET_DST(OP0,NIB2); |
| 2036 | 2044 | UINT32 addr = addr_from_reg(cpustate, dst); |
| 2037 | | WRMEM_W(cpustate, addr, RDMEM_W(cpustate, addr) & ~bit); |
| 2045 | WRMEM_W(cpustate, AS_DATA, addr, RDMEM_W(cpustate, AS_DATA, addr) & ~bit); |
| 2038 | 2046 | } |
| 2039 | 2047 | |
| 2040 | 2048 | /****************************************** |
| r19440 | r19441 | |
| 2057 | 2065 | GET_BIT(OP0); |
| 2058 | 2066 | GET_DST(OP0,NIB2); |
| 2059 | 2067 | UINT32 addr = addr_from_reg(cpustate, dst); |
| 2060 | | WRMEM_B(cpustate, addr, RDMEM_B(cpustate, addr) | bit); |
| 2068 | WRMEM_B(cpustate, AS_DATA, addr, RDMEM_B(cpustate, AS_DATA, addr) | bit); |
| 2061 | 2069 | } |
| 2062 | 2070 | |
| 2063 | 2071 | /****************************************** |
| r19440 | r19441 | |
| 2080 | 2088 | GET_BIT(OP0); |
| 2081 | 2089 | GET_DST(OP0,NIB2); |
| 2082 | 2090 | UINT32 addr = addr_from_reg(cpustate, dst); |
| 2083 | | WRMEM_W(cpustate, addr, RDMEM_W(cpustate, addr) | bit); |
| 2091 | WRMEM_W(cpustate, AS_DATA, addr, RDMEM_W(cpustate, AS_DATA, addr) | bit); |
| 2084 | 2092 | } |
| 2085 | 2093 | |
| 2086 | 2094 | /****************************************** |
| r19440 | r19441 | |
| 2102 | 2110 | { |
| 2103 | 2111 | GET_BIT(OP0); |
| 2104 | 2112 | GET_DST(OP0,NIB2); |
| 2105 | | if (RDMEM_B(cpustate, addr_from_reg(cpustate, dst)) & bit) CLR_Z; else SET_Z; |
| 2113 | if (RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst)) & bit) CLR_Z; else SET_Z; |
| 2106 | 2114 | } |
| 2107 | 2115 | |
| 2108 | 2116 | /****************************************** |
| r19440 | r19441 | |
| 2124 | 2132 | { |
| 2125 | 2133 | GET_BIT(OP0); |
| 2126 | 2134 | GET_DST(OP0,NIB2); |
| 2127 | | if (RDMEM_W(cpustate, addr_from_reg(cpustate, dst)) & bit) CLR_Z; else SET_Z; |
| 2135 | if (RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, dst)) & bit) CLR_Z; else SET_Z; |
| 2128 | 2136 | } |
| 2129 | 2137 | |
| 2130 | 2138 | /****************************************** |
| r19440 | r19441 | |
| 2136 | 2144 | GET_I4M1(OP0,NIB3); |
| 2137 | 2145 | GET_DST(OP0,NIB2); |
| 2138 | 2146 | UINT32 addr = addr_from_reg(cpustate, dst); |
| 2139 | | WRMEM_B(cpustate, addr, INCB(cpustate, RDMEM_B(cpustate, addr), i4p1)); |
| 2147 | WRMEM_B(cpustate, AS_DATA, addr, INCB(cpustate, RDMEM_B(cpustate, AS_DATA, addr), i4p1)); |
| 2140 | 2148 | } |
| 2141 | 2149 | |
| 2142 | 2150 | /****************************************** |
| r19440 | r19441 | |
| 2148 | 2156 | GET_I4M1(OP0,NIB3); |
| 2149 | 2157 | GET_DST(OP0,NIB2); |
| 2150 | 2158 | UINT32 addr = addr_from_reg(cpustate, dst); |
| 2151 | | WRMEM_W(cpustate, addr, INCW(cpustate, RDMEM_W(cpustate, addr), i4p1)); |
| 2159 | WRMEM_W(cpustate, AS_DATA, addr, INCW(cpustate, RDMEM_W(cpustate, AS_DATA, addr), i4p1)); |
| 2152 | 2160 | } |
| 2153 | 2161 | |
| 2154 | 2162 | /****************************************** |
| r19440 | r19441 | |
| 2160 | 2168 | GET_I4M1(OP0,NIB3); |
| 2161 | 2169 | GET_DST(OP0,NIB2); |
| 2162 | 2170 | UINT32 addr = addr_from_reg(cpustate, dst); |
| 2163 | | WRMEM_B(cpustate, addr, DECB(cpustate, RDMEM_B(cpustate, addr), i4p1)); |
| 2171 | WRMEM_B(cpustate, AS_DATA, addr, DECB(cpustate, RDMEM_B(cpustate, AS_DATA, addr), i4p1)); |
| 2164 | 2172 | } |
| 2165 | 2173 | |
| 2166 | 2174 | /****************************************** |
| r19440 | r19441 | |
| 2172 | 2180 | GET_I4M1(OP0,NIB3); |
| 2173 | 2181 | GET_DST(OP0,NIB2); |
| 2174 | 2182 | UINT32 addr = addr_from_reg(cpustate, dst); |
| 2175 | | WRMEM_W(cpustate, addr, DECW(cpustate, RDMEM_W(cpustate, addr), i4p1)); |
| 2183 | WRMEM_W(cpustate, AS_DATA, addr, DECW(cpustate, RDMEM_W(cpustate, AS_DATA, addr), i4p1)); |
| 2176 | 2184 | } |
| 2177 | 2185 | |
| 2178 | 2186 | /****************************************** |
| r19440 | r19441 | |
| 2184 | 2192 | GET_DST(OP0,NIB3); |
| 2185 | 2193 | GET_SRC(OP0,NIB2); |
| 2186 | 2194 | UINT32 addr = addr_from_reg(cpustate, src); |
| 2187 | | UINT8 tmp = RDMEM_B(cpustate, addr); |
| 2188 | | WRMEM_B(cpustate, addr, cpustate->RB(dst)); |
| 2195 | UINT8 tmp = RDMEM_B(cpustate, AS_DATA, addr); |
| 2196 | WRMEM_B(cpustate, AS_DATA, addr, cpustate->RB(dst)); |
| 2189 | 2197 | cpustate->RB(dst) = tmp; |
| 2190 | 2198 | } |
| 2191 | 2199 | |
| r19440 | r19441 | |
| 2198 | 2206 | GET_DST(OP0,NIB3); |
| 2199 | 2207 | GET_SRC(OP0,NIB2); |
| 2200 | 2208 | UINT32 addr = addr_from_reg(cpustate, src); |
| 2201 | | UINT16 tmp = RDMEM_W(cpustate, addr); |
| 2202 | | WRMEM_W(cpustate, addr, cpustate->RW(dst)); |
| 2209 | UINT16 tmp = RDMEM_W(cpustate, AS_DATA, addr); |
| 2210 | WRMEM_W(cpustate, AS_DATA, addr, cpustate->RW(dst)); |
| 2203 | 2211 | cpustate->RW(dst) = tmp; |
| 2204 | 2212 | } |
| 2205 | 2213 | |
| r19440 | r19441 | |
| 2211 | 2219 | { |
| 2212 | 2220 | GET_SRC(OP0,NIB3); |
| 2213 | 2221 | GET_DST(OP0,NIB2); |
| 2214 | | WRMEM_B(cpustate, addr_from_reg(cpustate, dst), cpustate->RB(src)); |
| 2222 | WRMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst), cpustate->RB(src)); |
| 2215 | 2223 | } |
| 2216 | 2224 | |
| 2217 | 2225 | /****************************************** |
| r19440 | r19441 | |
| 2222 | 2230 | { |
| 2223 | 2231 | GET_SRC(OP0,NIB3); |
| 2224 | 2232 | GET_DST(OP0,NIB2); |
| 2225 | | WRMEM_W(cpustate, addr_from_reg(cpustate, dst), cpustate->RW(src)); |
| 2233 | WRMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, dst), cpustate->RW(src)); |
| 2226 | 2234 | } |
| 2227 | 2235 | |
| 2228 | 2236 | /****************************************** |
| r19440 | r19441 | |
| 2233 | 2241 | { |
| 2234 | 2242 | GET_DST(OP0,NIB3); |
| 2235 | 2243 | GET_DSP16; |
| 2236 | | cpustate->RB(dst) = RDMEM_B(cpustate, dsp16); |
| 2244 | cpustate->RB(dst) = RDMEM_B(cpustate, AS_PROGRAM, dsp16); |
| 2237 | 2245 | } |
| 2238 | 2246 | |
| 2239 | 2247 | /****************************************** |
| r19440 | r19441 | |
| 2246 | 2254 | GET_SRC(OP0,NIB2); |
| 2247 | 2255 | GET_IDX16(OP1); |
| 2248 | 2256 | idx16 = addr_add(cpustate, addr_from_reg(cpustate, src), idx16); |
| 2249 | | cpustate->RB(dst) = RDMEM_B(cpustate, idx16); |
| 2257 | cpustate->RB(dst) = RDMEM_B(cpustate, AS_DATA, idx16); |
| 2250 | 2258 | } |
| 2251 | 2259 | |
| 2252 | 2260 | /****************************************** |
| r19440 | r19441 | |
| 2257 | 2265 | { |
| 2258 | 2266 | GET_DST(OP0,NIB3); |
| 2259 | 2267 | GET_DSP16; |
| 2260 | | cpustate->RW(dst) = RDMEM_W(cpustate, dsp16); |
| 2268 | cpustate->RW(dst) = RDMEM_W(cpustate, AS_PROGRAM, dsp16); |
| 2261 | 2269 | } |
| 2262 | 2270 | |
| 2263 | 2271 | /****************************************** |
| r19440 | r19441 | |
| 2270 | 2278 | GET_SRC(OP0,NIB2); |
| 2271 | 2279 | GET_IDX16(OP1); |
| 2272 | 2280 | idx16 = addr_add(cpustate, addr_from_reg(cpustate, src), idx16); |
| 2273 | | cpustate->RW(dst) = RDMEM_W(cpustate, idx16); |
| 2281 | cpustate->RW(dst) = RDMEM_W(cpustate, AS_DATA, idx16); |
| 2274 | 2282 | } |
| 2275 | 2283 | |
| 2276 | 2284 | /****************************************** |
| r19440 | r19441 | |
| 2281 | 2289 | { |
| 2282 | 2290 | GET_SRC(OP0,NIB3); |
| 2283 | 2291 | GET_DSP16; |
| 2284 | | WRMEM_B(cpustate, dsp16, cpustate->RB(src)); |
| 2292 | WRMEM_B(cpustate, AS_PROGRAM, dsp16, cpustate->RB(src)); |
| 2285 | 2293 | } |
| 2286 | 2294 | |
| 2287 | 2295 | /****************************************** |
| r19440 | r19441 | |
| 2294 | 2302 | GET_DST(OP0,NIB2); |
| 2295 | 2303 | GET_IDX16(OP1); |
| 2296 | 2304 | idx16 = addr_add(cpustate, addr_from_reg(cpustate, dst), idx16); |
| 2297 | | WRMEM_B(cpustate, idx16, cpustate->RB(src)); |
| 2305 | WRMEM_B(cpustate, AS_DATA, idx16, cpustate->RB(src)); |
| 2298 | 2306 | } |
| 2299 | 2307 | |
| 2300 | 2308 | /****************************************** |
| r19440 | r19441 | |
| 2305 | 2313 | { |
| 2306 | 2314 | GET_SRC(OP0,NIB3); |
| 2307 | 2315 | GET_DSP16; |
| 2308 | | WRMEM_W(cpustate, dsp16, cpustate->RW(src)); |
| 2316 | WRMEM_W(cpustate, AS_PROGRAM, dsp16, cpustate->RW(src)); |
| 2309 | 2317 | } |
| 2310 | 2318 | |
| 2311 | 2319 | /****************************************** |
| r19440 | r19441 | |
| 2318 | 2326 | GET_DST(OP0,NIB2); |
| 2319 | 2327 | GET_IDX16(OP1); |
| 2320 | 2328 | idx16 = addr_add(cpustate, addr_from_reg(cpustate,dst), idx16); |
| 2321 | | WRMEM_W(cpustate, idx16, cpustate->RW(src)); |
| 2329 | WRMEM_W(cpustate, AS_DATA, idx16, cpustate->RW(src)); |
| 2322 | 2330 | } |
| 2323 | 2331 | |
| 2324 | 2332 | /****************************************** |
| r19440 | r19441 | |
| 2358 | 2366 | { |
| 2359 | 2367 | GET_DST(OP0,NIB3); |
| 2360 | 2368 | GET_DSP16; |
| 2361 | | cpustate->RL(dst) = RDMEM_L(cpustate, dsp16); |
| 2369 | cpustate->RL(dst) = RDMEM_L(cpustate, AS_PROGRAM, dsp16); |
| 2362 | 2370 | } |
| 2363 | 2371 | |
| 2364 | 2372 | /****************************************** |
| r19440 | r19441 | |
| 2371 | 2379 | GET_SRC(OP0,NIB2); |
| 2372 | 2380 | GET_IDX16(OP1); |
| 2373 | 2381 | idx16 = addr_add(cpustate, addr_from_reg(cpustate, src), idx16); |
| 2374 | | cpustate->RL(dst) = RDMEM_L(cpustate, idx16); |
| 2382 | cpustate->RL(dst) = RDMEM_L(cpustate, AS_DATA, idx16); |
| 2375 | 2383 | } |
| 2376 | 2384 | |
| 2377 | 2385 | /****************************************** |
| r19440 | r19441 | |
| 2406 | 2414 | { |
| 2407 | 2415 | GET_SRC(OP0,NIB3); |
| 2408 | 2416 | GET_DSP16; |
| 2409 | | WRMEM_L(cpustate, dsp16, cpustate->RL(src)); |
| 2417 | WRMEM_L(cpustate, AS_PROGRAM, dsp16, cpustate->RL(src)); |
| 2410 | 2418 | } |
| 2411 | 2419 | |
| 2412 | 2420 | /****************************************** |
| r19440 | r19441 | |
| 2419 | 2427 | GET_DST(OP0,NIB2); |
| 2420 | 2428 | GET_IDX16(OP1); |
| 2421 | 2429 | idx16 = addr_add(cpustate, addr_from_reg(cpustate, dst), idx16); |
| 2422 | | WRMEM_L(cpustate, idx16, cpustate->RL(src)); |
| 2430 | WRMEM_L(cpustate, AS_DATA, idx16, cpustate->RL(src)); |
| 2423 | 2431 | } |
| 2424 | 2432 | |
| 2425 | 2433 | /****************************************** |
| r19440 | r19441 | |
| 2447 | 2455 | UINT16 fcw; |
| 2448 | 2456 | if (segmented_mode(cpustate)) { |
| 2449 | 2457 | UINT32 addr = addr_from_reg(cpustate, src); |
| 2450 | | fcw = RDMEM_W(cpustate, addr + 2); |
| 2451 | | cpustate->pc = segmented_addr(RDMEM_L(cpustate, addr + 4)); |
| 2458 | fcw = RDMEM_W(cpustate, AS_DATA, addr + 2); |
| 2459 | set_pc(cpustate, segmented_addr(RDMEM_L(cpustate, AS_DATA, addr + 4))); |
| 2452 | 2460 | } |
| 2453 | 2461 | else { |
| 2454 | | fcw = RDMEM_W(cpustate, cpustate->RW(src)); |
| 2455 | | cpustate->pc = RDMEM_W(cpustate, (UINT16)(cpustate->RW(src) + 2)); |
| 2462 | fcw = RDMEM_W(cpustate, AS_DATA, cpustate->RW(src)); |
| 2463 | set_pc(cpustate, RDMEM_W(cpustate, AS_DATA, (UINT16)(cpustate->RW(src) + 2))); |
| 2456 | 2464 | } |
| 2465 | if ((fcw ^ cpustate->fcw) & F_SEG) printf("ldps 1 (0x%05x): changing from %ssegmented mode to %ssegmented mode\n", cpustate->pc, (fcw & F_SEG) ? "non-" : "", (fcw & F_SEG) ? "" : "non-"); |
| 2457 | 2466 | CHANGE_FCW(cpustate, fcw); /* check for user/system mode change */ |
| 2458 | 2467 | } |
| 2459 | 2468 | |
| r19440 | r19441 | |
| 2468 | 2477 | GET_CNT(OP1,NIB1); |
| 2469 | 2478 | GET_DST(OP1,NIB2); |
| 2470 | 2479 | GET_CCC(OP1,NIB3); |
| 2471 | | WRMEM_B(cpustate, addr_from_reg(cpustate, dst), RDPORT_B(cpustate, 0, cpustate->RW(src))); |
| 2480 | WRMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst), RDPORT_B(cpustate, 0, cpustate->RW(src))); |
| 2472 | 2481 | add_to_addr_reg(cpustate, dst, 1); |
| 2473 | 2482 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| 2474 | 2483 | } |
| r19440 | r19441 | |
| 2485 | 2494 | GET_CNT(OP1,NIB1); |
| 2486 | 2495 | GET_DST(OP1,NIB2); |
| 2487 | 2496 | GET_CCC(OP1,NIB3); |
| 2488 | | WRMEM_B(cpustate, cpustate->RW(dst), RDPORT_B(cpustate, 1, cpustate->RW(src))); |
| 2497 | WRMEM_B(cpustate, AS_DATA, cpustate->RW(dst), RDPORT_B(cpustate, 1, cpustate->RW(src))); |
| 2489 | 2498 | cpustate->RW(dst)++; |
| 2490 | 2499 | cpustate->RW(src)++; |
| 2491 | 2500 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 2503 | 2512 | GET_CNT(OP1,NIB1); |
| 2504 | 2513 | GET_DST(OP1,NIB2); |
| 2505 | 2514 | GET_CCC(OP1,NIB3); |
| 2506 | | WRPORT_B(cpustate, 0, cpustate->RW(dst), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); |
| 2515 | WRPORT_B(cpustate, 0, cpustate->RW(dst), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 2507 | 2516 | add_to_addr_reg(cpustate, src, 1); |
| 2508 | 2517 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| 2509 | 2518 | } |
| r19440 | r19441 | |
| 2520 | 2529 | GET_CNT(OP1,NIB1); |
| 2521 | 2530 | GET_DST(OP1,NIB2); |
| 2522 | 2531 | GET_CCC(OP1,NIB3); |
| 2523 | | WRPORT_B(cpustate, 1, cpustate->RW(dst), RDMEM_B(cpustate, cpustate->RW(src))); |
| 2532 | WRPORT_B(cpustate, 1, cpustate->RW(dst), RDMEM_B(cpustate, AS_DATA, cpustate->RW(src))); |
| 2524 | 2533 | cpustate->RW(dst)++; |
| 2525 | 2534 | cpustate->RW(src)++; |
| 2526 | 2535 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 2586 | 2595 | GET_CNT(OP1,NIB1); |
| 2587 | 2596 | GET_DST(OP1,NIB2); |
| 2588 | 2597 | GET_CCC(OP1,NIB3); |
| 2589 | | WRMEM_B(cpustate, cpustate->RW(dst), RDPORT_B(cpustate, 0, cpustate->RW(src))); |
| 2598 | WRMEM_B(cpustate, AS_DATA, cpustate->RW(dst), RDPORT_B(cpustate, 0, cpustate->RW(src))); |
| 2590 | 2599 | cpustate->RW(dst)--; |
| 2591 | 2600 | cpustate->RW(src)--; |
| 2592 | 2601 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 2604 | 2613 | GET_CNT(OP1,NIB1); |
| 2605 | 2614 | GET_DST(OP1,NIB2); |
| 2606 | 2615 | GET_CCC(OP1,NIB3); |
| 2607 | | WRMEM_B(cpustate, cpustate->RW(dst), RDPORT_B(cpustate, 1, cpustate->RW(src))); |
| 2616 | WRMEM_B(cpustate, AS_DATA, cpustate->RW(dst), RDPORT_B(cpustate, 1, cpustate->RW(src))); |
| 2608 | 2617 | cpustate->RW(dst)--; |
| 2609 | 2618 | cpustate->RW(src)--; |
| 2610 | 2619 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 2622 | 2631 | GET_CNT(OP1,NIB1); |
| 2623 | 2632 | GET_DST(OP1,NIB2); |
| 2624 | 2633 | GET_CCC(OP1,NIB3); |
| 2625 | | WRPORT_B(cpustate, 0, cpustate->RW(dst), RDMEM_B(cpustate, cpustate->RW(src))); |
| 2634 | WRPORT_B(cpustate, 0, cpustate->RW(dst), RDMEM_B(cpustate, AS_DATA, cpustate->RW(src))); |
| 2626 | 2635 | cpustate->RW(dst)--; |
| 2627 | 2636 | cpustate->RW(src)--; |
| 2628 | 2637 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 2640 | 2649 | GET_CNT(OP1,NIB1); |
| 2641 | 2650 | GET_DST(OP1,NIB2); |
| 2642 | 2651 | GET_CCC(OP1,NIB3); |
| 2643 | | WRPORT_B(cpustate, 1, cpustate->RW(dst), RDMEM_B(cpustate, cpustate->RW(src))); |
| 2652 | WRPORT_B(cpustate, 1, cpustate->RW(dst), RDMEM_B(cpustate, AS_DATA, cpustate->RW(src))); |
| 2644 | 2653 | cpustate->RW(dst)--; |
| 2645 | 2654 | cpustate->RW(src)--; |
| 2646 | 2655 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 2658 | 2667 | GET_CNT(OP1,NIB1); |
| 2659 | 2668 | GET_DST(OP1,NIB2); |
| 2660 | 2669 | GET_CCC(OP1,NIB3); |
| 2661 | | WRMEM_W(cpustate, cpustate->RW(dst), RDPORT_W(cpustate, 0, cpustate->RW(src))); |
| 2670 | WRMEM_W(cpustate, AS_DATA, cpustate->RW(dst), RDPORT_W(cpustate, 0, cpustate->RW(src))); |
| 2662 | 2671 | cpustate->RW(dst) += 2; |
| 2663 | 2672 | cpustate->RW(src) += 2; |
| 2664 | 2673 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 2676 | 2685 | GET_CNT(OP1,NIB1); |
| 2677 | 2686 | GET_DST(OP1,NIB2); |
| 2678 | 2687 | GET_CCC(OP1,NIB3); |
| 2679 | | WRMEM_W(cpustate, cpustate->RW(dst), RDPORT_W(cpustate, 1, cpustate->RW(src))); |
| 2688 | WRMEM_W(cpustate, AS_DATA, cpustate->RW(dst), RDPORT_W(cpustate, 1, cpustate->RW(src))); |
| 2680 | 2689 | cpustate->RW(dst) += 2; |
| 2681 | 2690 | cpustate->RW(src) += 2; |
| 2682 | 2691 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 2694 | 2703 | GET_CNT(OP1,NIB1); |
| 2695 | 2704 | GET_DST(OP1,NIB2); |
| 2696 | 2705 | GET_CCC(OP1,NIB3); |
| 2697 | | WRPORT_W(cpustate, 0, cpustate->RW(dst), RDMEM_W(cpustate, cpustate->RW(src))); |
| 2706 | WRPORT_W(cpustate, 0, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, cpustate->RW(src))); |
| 2698 | 2707 | cpustate->RW(dst) += 2; |
| 2699 | 2708 | cpustate->RW(src) += 2; |
| 2700 | 2709 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 2712 | 2721 | GET_CNT(OP1,NIB1); |
| 2713 | 2722 | GET_DST(OP1,NIB2); |
| 2714 | 2723 | GET_CCC(OP1,NIB3); |
| 2715 | | WRPORT_W(cpustate, 1, cpustate->RW(dst), RDMEM_W(cpustate, cpustate->RW(src))); |
| 2724 | WRPORT_W(cpustate, 1, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, cpustate->RW(src))); |
| 2716 | 2725 | cpustate->RW(dst) += 2; |
| 2717 | 2726 | cpustate->RW(src) += 2; |
| 2718 | 2727 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 2778 | 2787 | GET_CNT(OP1,NIB1); |
| 2779 | 2788 | GET_DST(OP1,NIB2); |
| 2780 | 2789 | GET_CCC(OP1,NIB3); |
| 2781 | | WRMEM_W(cpustate, cpustate->RW(dst), RDPORT_W(cpustate, 0, cpustate->RW(src))); |
| 2790 | WRMEM_W(cpustate, AS_DATA, cpustate->RW(dst), RDPORT_W(cpustate, 0, cpustate->RW(src))); |
| 2782 | 2791 | cpustate->RW(dst) -= 2; |
| 2783 | 2792 | cpustate->RW(src) -= 2; |
| 2784 | 2793 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 2796 | 2805 | GET_CNT(OP1,NIB1); |
| 2797 | 2806 | GET_DST(OP1,NIB2); |
| 2798 | 2807 | GET_CCC(OP1,NIB3); |
| 2799 | | WRMEM_W(cpustate, cpustate->RW(dst), RDPORT_W(cpustate, 1, cpustate->RW(src))); |
| 2808 | WRMEM_W(cpustate, AS_DATA, cpustate->RW(dst), RDPORT_W(cpustate, 1, cpustate->RW(src))); |
| 2800 | 2809 | cpustate->RW(dst) -= 2; |
| 2801 | 2810 | cpustate->RW(src) -= 2; |
| 2802 | 2811 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 2814 | 2823 | GET_CNT(OP1,NIB1); |
| 2815 | 2824 | GET_DST(OP1,NIB2); |
| 2816 | 2825 | GET_CCC(OP1,NIB3); |
| 2817 | | WRPORT_W(cpustate, 0, cpustate->RW(dst), RDMEM_W(cpustate, cpustate->RW(src))); |
| 2826 | WRPORT_W(cpustate, 0, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, cpustate->RW(src))); |
| 2818 | 2827 | cpustate->RW(dst) -= 2; |
| 2819 | 2828 | cpustate->RW(src) -= 2; |
| 2820 | 2829 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 2832 | 2841 | GET_CNT(OP1,NIB1); |
| 2833 | 2842 | GET_DST(OP1,NIB2); |
| 2834 | 2843 | GET_CCC(OP1,NIB3); |
| 2835 | | WRPORT_W(cpustate, 1, cpustate->RW(dst), RDMEM_W(cpustate, cpustate->RW(src))); |
| 2844 | WRPORT_W(cpustate, 1, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, cpustate->RW(src))); |
| 2836 | 2845 | cpustate->RW(dst) -= 2; |
| 2837 | 2846 | cpustate->RW(src) -= 2; |
| 2838 | 2847 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 2894 | 2903 | { |
| 2895 | 2904 | GET_DST(OP0,NIB3); |
| 2896 | 2905 | GET_ADDR(OP1); |
| 2897 | | cpustate->RB(dst) = ADDB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr)); |
| 2906 | cpustate->RB(dst) = ADDB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr)); |
| 2898 | 2907 | } |
| 2899 | 2908 | |
| 2900 | 2909 | /****************************************** |
| r19440 | r19441 | |
| 2907 | 2916 | GET_SRC(OP0,NIB2); |
| 2908 | 2917 | GET_ADDR(OP1); |
| 2909 | 2918 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 2910 | | cpustate->RB(dst) = ADDB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr)); |
| 2919 | cpustate->RB(dst) = ADDB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr)); |
| 2911 | 2920 | } |
| 2912 | 2921 | |
| 2913 | 2922 | /****************************************** |
| r19440 | r19441 | |
| 2918 | 2927 | { |
| 2919 | 2928 | GET_DST(OP0,NIB3); |
| 2920 | 2929 | GET_ADDR(OP1); |
| 2921 | | cpustate->RW(dst) = ADDW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr)); /* EHC */ |
| 2930 | cpustate->RW(dst) = ADDW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr)); /* EHC */ |
| 2922 | 2931 | } |
| 2923 | 2932 | |
| 2924 | 2933 | /****************************************** |
| r19440 | r19441 | |
| 2931 | 2940 | GET_SRC(OP0,NIB2); |
| 2932 | 2941 | GET_ADDR(OP1); |
| 2933 | 2942 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 2934 | | cpustate->RW(dst) = ADDW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr)); /* ASG */ |
| 2943 | cpustate->RW(dst) = ADDW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr)); /* ASG */ |
| 2935 | 2944 | } |
| 2936 | 2945 | |
| 2937 | 2946 | /****************************************** |
| r19440 | r19441 | |
| 2942 | 2951 | { |
| 2943 | 2952 | GET_DST(OP0,NIB3); |
| 2944 | 2953 | GET_ADDR(OP1); |
| 2945 | | cpustate->RB(dst) = SUBB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr)); /* EHC */ |
| 2954 | cpustate->RB(dst) = SUBB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr)); /* EHC */ |
| 2946 | 2955 | } |
| 2947 | 2956 | |
| 2948 | 2957 | /****************************************** |
| r19440 | r19441 | |
| 2955 | 2964 | GET_SRC(OP0,NIB2); |
| 2956 | 2965 | GET_ADDR(OP1); |
| 2957 | 2966 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 2958 | | cpustate->RB(dst) = SUBB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr)); |
| 2967 | cpustate->RB(dst) = SUBB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr)); |
| 2959 | 2968 | } |
| 2960 | 2969 | |
| 2961 | 2970 | /****************************************** |
| r19440 | r19441 | |
| 2966 | 2975 | { |
| 2967 | 2976 | GET_DST(OP0,NIB3); |
| 2968 | 2977 | GET_ADDR(OP1); |
| 2969 | | cpustate->RW(dst) = SUBW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr)); |
| 2978 | cpustate->RW(dst) = SUBW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr)); |
| 2970 | 2979 | } |
| 2971 | 2980 | |
| 2972 | 2981 | /****************************************** |
| r19440 | r19441 | |
| 2979 | 2988 | GET_SRC(OP0,NIB2); |
| 2980 | 2989 | GET_ADDR(OP1); |
| 2981 | 2990 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 2982 | | cpustate->RW(dst) = SUBW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr)); |
| 2991 | cpustate->RW(dst) = SUBW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr)); |
| 2983 | 2992 | } |
| 2984 | 2993 | |
| 2985 | 2994 | /****************************************** |
| r19440 | r19441 | |
| 2990 | 2999 | { |
| 2991 | 3000 | GET_DST(OP0,NIB3); |
| 2992 | 3001 | GET_ADDR(OP1); |
| 2993 | | cpustate->RB(dst) = ORB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr)); |
| 3002 | cpustate->RB(dst) = ORB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr)); |
| 2994 | 3003 | } |
| 2995 | 3004 | |
| 2996 | 3005 | /****************************************** |
| r19440 | r19441 | |
| 3003 | 3012 | GET_SRC(OP0,NIB2); |
| 3004 | 3013 | GET_ADDR(OP1); |
| 3005 | 3014 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3006 | | cpustate->RB(dst) = ORB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr)); |
| 3015 | cpustate->RB(dst) = ORB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr)); |
| 3007 | 3016 | } |
| 3008 | 3017 | |
| 3009 | 3018 | /****************************************** |
| r19440 | r19441 | |
| 3014 | 3023 | { |
| 3015 | 3024 | GET_DST(OP0,NIB3); |
| 3016 | 3025 | GET_ADDR(OP1); |
| 3017 | | cpustate->RW(dst) = ORW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr)); |
| 3026 | cpustate->RW(dst) = ORW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr)); |
| 3018 | 3027 | } |
| 3019 | 3028 | |
| 3020 | 3029 | /****************************************** |
| r19440 | r19441 | |
| 3027 | 3036 | GET_SRC(OP0,NIB2); |
| 3028 | 3037 | GET_ADDR(OP1); |
| 3029 | 3038 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3030 | | cpustate->RW(dst) = ORW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr)); |
| 3039 | cpustate->RW(dst) = ORW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr)); |
| 3031 | 3040 | } |
| 3032 | 3041 | |
| 3033 | 3042 | /****************************************** |
| r19440 | r19441 | |
| 3038 | 3047 | { |
| 3039 | 3048 | GET_DST(OP0,NIB3); |
| 3040 | 3049 | GET_ADDR(OP1); |
| 3041 | | cpustate->RB(dst) = ANDB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr)); |
| 3050 | cpustate->RB(dst) = ANDB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr)); |
| 3042 | 3051 | } |
| 3043 | 3052 | |
| 3044 | 3053 | /****************************************** |
| r19440 | r19441 | |
| 3051 | 3060 | GET_SRC(OP0,NIB2); |
| 3052 | 3061 | GET_ADDR(OP1); |
| 3053 | 3062 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3054 | | cpustate->RB(dst) = ANDB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr)); |
| 3063 | cpustate->RB(dst) = ANDB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr)); |
| 3055 | 3064 | } |
| 3056 | 3065 | |
| 3057 | 3066 | /****************************************** |
| r19440 | r19441 | |
| 3062 | 3071 | { |
| 3063 | 3072 | GET_DST(OP0,NIB3); |
| 3064 | 3073 | GET_ADDR(OP1); |
| 3065 | | cpustate->RW(dst) = ANDW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr)); |
| 3074 | cpustate->RW(dst) = ANDW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr)); |
| 3066 | 3075 | } |
| 3067 | 3076 | |
| 3068 | 3077 | /****************************************** |
| r19440 | r19441 | |
| 3075 | 3084 | GET_SRC(OP0,NIB2); |
| 3076 | 3085 | GET_ADDR(OP1); |
| 3077 | 3086 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3078 | | cpustate->RW(dst) = ANDW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr)); |
| 3087 | cpustate->RW(dst) = ANDW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr)); |
| 3079 | 3088 | } |
| 3080 | 3089 | |
| 3081 | 3090 | /****************************************** |
| r19440 | r19441 | |
| 3086 | 3095 | { |
| 3087 | 3096 | GET_DST(OP0,NIB3); |
| 3088 | 3097 | GET_ADDR(OP1); |
| 3089 | | cpustate->RB(dst) = XORB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr)); |
| 3098 | cpustate->RB(dst) = XORB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr)); |
| 3090 | 3099 | } |
| 3091 | 3100 | |
| 3092 | 3101 | /****************************************** |
| r19440 | r19441 | |
| 3099 | 3108 | GET_SRC(OP0,NIB2); |
| 3100 | 3109 | GET_ADDR(OP1); |
| 3101 | 3110 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3102 | | cpustate->RB(dst) = XORB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr)); |
| 3111 | cpustate->RB(dst) = XORB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr)); |
| 3103 | 3112 | } |
| 3104 | 3113 | |
| 3105 | 3114 | /****************************************** |
| r19440 | r19441 | |
| 3110 | 3119 | { |
| 3111 | 3120 | GET_DST(OP0,NIB3); |
| 3112 | 3121 | GET_ADDR(OP1); |
| 3113 | | cpustate->RW(dst) = XORW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr)); |
| 3122 | cpustate->RW(dst) = XORW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr)); |
| 3114 | 3123 | } |
| 3115 | 3124 | |
| 3116 | 3125 | /****************************************** |
| r19440 | r19441 | |
| 3123 | 3132 | GET_SRC(OP0,NIB2); |
| 3124 | 3133 | GET_ADDR(OP1); |
| 3125 | 3134 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3126 | | cpustate->RW(dst) = XORW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr)); |
| 3135 | cpustate->RW(dst) = XORW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr)); |
| 3127 | 3136 | } |
| 3128 | 3137 | |
| 3129 | 3138 | /****************************************** |
| r19440 | r19441 | |
| 3134 | 3143 | { |
| 3135 | 3144 | GET_DST(OP0,NIB3); |
| 3136 | 3145 | GET_ADDR(OP1); |
| 3137 | | CPB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr)); |
| 3146 | CPB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr)); |
| 3138 | 3147 | } |
| 3139 | 3148 | |
| 3140 | 3149 | /****************************************** |
| r19440 | r19441 | |
| 3147 | 3156 | GET_SRC(OP0,NIB2); |
| 3148 | 3157 | GET_ADDR(OP1); |
| 3149 | 3158 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3150 | | CPB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr)); |
| 3159 | CPB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr)); |
| 3151 | 3160 | } |
| 3152 | 3161 | |
| 3153 | 3162 | /****************************************** |
| r19440 | r19441 | |
| 3158 | 3167 | { |
| 3159 | 3168 | GET_DST(OP0,NIB3); |
| 3160 | 3169 | GET_ADDR(OP1); |
| 3161 | | CPW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr)); |
| 3170 | CPW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr)); |
| 3162 | 3171 | } |
| 3163 | 3172 | |
| 3164 | 3173 | /****************************************** |
| r19440 | r19441 | |
| 3171 | 3180 | GET_SRC(OP0,NIB2); |
| 3172 | 3181 | GET_ADDR(OP1); |
| 3173 | 3182 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3174 | | CPW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr)); |
| 3183 | CPW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr)); |
| 3175 | 3184 | } |
| 3176 | 3185 | |
| 3177 | 3186 | /****************************************** |
| r19440 | r19441 | |
| 3181 | 3190 | static void Z4C_0000_0000_addr(z8000_state *cpustate) |
| 3182 | 3191 | { |
| 3183 | 3192 | GET_ADDR(OP1); |
| 3184 | | WRMEM_B(cpustate, addr, COMB(cpustate, RDMEM_W(cpustate, addr))); |
| 3193 | WRMEM_B(cpustate, AS_DATA, addr, COMB(cpustate, RDMEM_W(cpustate, AS_DATA, addr))); |
| 3185 | 3194 | } |
| 3186 | 3195 | |
| 3187 | 3196 | /****************************************** |
| r19440 | r19441 | |
| 3192 | 3201 | { |
| 3193 | 3202 | GET_ADDR(OP1); |
| 3194 | 3203 | GET_IMM8(OP2); |
| 3195 | | CPB(cpustate, RDMEM_B(cpustate, addr), imm8); |
| 3204 | CPB(cpustate, RDMEM_B(cpustate, AS_DATA, addr), imm8); |
| 3196 | 3205 | } |
| 3197 | 3206 | |
| 3198 | 3207 | /****************************************** |
| r19440 | r19441 | |
| 3202 | 3211 | static void Z4C_0000_0010_addr(z8000_state *cpustate) |
| 3203 | 3212 | { |
| 3204 | 3213 | GET_ADDR(OP1); |
| 3205 | | WRMEM_B(cpustate, addr, NEGB(cpustate, RDMEM_B(cpustate, addr))); |
| 3214 | WRMEM_B(cpustate, AS_DATA, addr, NEGB(cpustate, RDMEM_B(cpustate, AS_DATA, addr))); |
| 3206 | 3215 | } |
| 3207 | 3216 | |
| 3208 | 3217 | /****************************************** |
| r19440 | r19441 | |
| 3212 | 3221 | static void Z4C_0000_0100_addr(z8000_state *cpustate) |
| 3213 | 3222 | { |
| 3214 | 3223 | GET_ADDR(OP1); |
| 3215 | | TESTB(cpustate, RDMEM_B(cpustate, addr)); |
| 3224 | TESTB(cpustate, RDMEM_B(cpustate, AS_DATA, addr)); |
| 3216 | 3225 | } |
| 3217 | 3226 | |
| 3218 | 3227 | /****************************************** |
| r19440 | r19441 | |
| 3223 | 3232 | { |
| 3224 | 3233 | GET_ADDR(OP1); |
| 3225 | 3234 | GET_IMM8(OP2); |
| 3226 | | WRMEM_B(cpustate, addr, imm8); |
| 3235 | WRMEM_B(cpustate, AS_DATA, addr, imm8); |
| 3227 | 3236 | } |
| 3228 | 3237 | |
| 3229 | 3238 | /****************************************** |
| r19440 | r19441 | |
| 3233 | 3242 | static void Z4C_0000_0110_addr(z8000_state *cpustate) |
| 3234 | 3243 | { |
| 3235 | 3244 | GET_ADDR(OP1); |
| 3236 | | if (RDMEM_B(cpustate, addr) & S08) SET_S; else CLR_S; |
| 3237 | | WRMEM_B(cpustate, addr, 0xff); |
| 3245 | if (RDMEM_B(cpustate, AS_DATA, addr) & S08) SET_S; else CLR_S; |
| 3246 | WRMEM_B(cpustate, AS_DATA, addr, 0xff); |
| 3238 | 3247 | } |
| 3239 | 3248 | |
| 3240 | 3249 | /****************************************** |
| r19440 | r19441 | |
| 3244 | 3253 | static void Z4C_0000_1000_addr(z8000_state *cpustate) |
| 3245 | 3254 | { |
| 3246 | 3255 | GET_ADDR(OP1); |
| 3247 | | WRMEM_B(cpustate, addr, 0); |
| 3256 | WRMEM_B(cpustate, AS_DATA, addr, 0); |
| 3248 | 3257 | } |
| 3249 | 3258 | |
| 3250 | 3259 | /****************************************** |
| r19440 | r19441 | |
| 3256 | 3265 | GET_DST(OP0,NIB2); |
| 3257 | 3266 | GET_ADDR(OP1); |
| 3258 | 3267 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3259 | | WRMEM_B(cpustate, addr, COMB(cpustate, RDMEM_B(cpustate, addr))); |
| 3268 | WRMEM_B(cpustate, AS_DATA, addr, COMB(cpustate, RDMEM_B(cpustate, AS_DATA, addr))); |
| 3260 | 3269 | } |
| 3261 | 3270 | |
| 3262 | 3271 | /****************************************** |
| r19440 | r19441 | |
| 3269 | 3278 | GET_ADDR(OP1); |
| 3270 | 3279 | GET_IMM8(OP2); |
| 3271 | 3280 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3272 | | CPB(cpustate, RDMEM_B(cpustate, addr), imm8); |
| 3281 | CPB(cpustate, RDMEM_B(cpustate, AS_DATA, addr), imm8); |
| 3273 | 3282 | } |
| 3274 | 3283 | |
| 3275 | 3284 | /****************************************** |
| r19440 | r19441 | |
| 3281 | 3290 | GET_DST(OP0,NIB2); |
| 3282 | 3291 | GET_ADDR(OP1); |
| 3283 | 3292 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3284 | | WRMEM_B(cpustate, addr, NEGB(cpustate, RDMEM_B(cpustate, addr))); |
| 3293 | WRMEM_B(cpustate, AS_DATA, addr, NEGB(cpustate, RDMEM_B(cpustate, AS_DATA, addr))); |
| 3285 | 3294 | } |
| 3286 | 3295 | |
| 3287 | 3296 | /****************************************** |
| r19440 | r19441 | |
| 3293 | 3302 | GET_DST(OP0,NIB2); |
| 3294 | 3303 | GET_ADDR(OP1); |
| 3295 | 3304 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3296 | | TESTB(cpustate, RDMEM_B(cpustate, addr)); |
| 3305 | TESTB(cpustate, RDMEM_B(cpustate, AS_DATA, addr)); |
| 3297 | 3306 | } |
| 3298 | 3307 | |
| 3299 | 3308 | /****************************************** |
| r19440 | r19441 | |
| 3306 | 3315 | GET_ADDR(OP1); |
| 3307 | 3316 | GET_IMM8(OP2); |
| 3308 | 3317 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3309 | | WRMEM_B(cpustate, addr, imm8); |
| 3318 | WRMEM_B(cpustate, AS_DATA, addr, imm8); |
| 3310 | 3319 | } |
| 3311 | 3320 | |
| 3312 | 3321 | /****************************************** |
| r19440 | r19441 | |
| 3318 | 3327 | GET_DST(OP0,NIB2); |
| 3319 | 3328 | GET_ADDR(OP1); |
| 3320 | 3329 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3321 | | if (RDMEM_B(cpustate, addr) & S08) SET_S; else CLR_S; |
| 3322 | | WRMEM_B(cpustate, addr, 0xff); |
| 3330 | if (RDMEM_B(cpustate, AS_DATA, addr) & S08) SET_S; else CLR_S; |
| 3331 | WRMEM_B(cpustate, AS_DATA, addr, 0xff); |
| 3323 | 3332 | } |
| 3324 | 3333 | |
| 3325 | 3334 | /****************************************** |
| r19440 | r19441 | |
| 3331 | 3340 | GET_DST(OP0,NIB2); |
| 3332 | 3341 | GET_ADDR(OP1); |
| 3333 | 3342 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3334 | | WRMEM_B(cpustate, addr, 0); |
| 3343 | WRMEM_B(cpustate, AS_DATA, addr, 0); |
| 3335 | 3344 | } |
| 3336 | 3345 | |
| 3337 | 3346 | /****************************************** |
| r19440 | r19441 | |
| 3341 | 3350 | static void Z4D_0000_0000_addr(z8000_state *cpustate) |
| 3342 | 3351 | { |
| 3343 | 3352 | GET_ADDR(OP1); |
| 3344 | | WRMEM_W(cpustate, addr, COMW(cpustate, RDMEM_W(cpustate, addr))); |
| 3353 | WRMEM_W(cpustate, AS_DATA, addr, COMW(cpustate, RDMEM_W(cpustate, AS_DATA, addr))); |
| 3345 | 3354 | } |
| 3346 | 3355 | |
| 3347 | 3356 | /****************************************** |
| r19440 | r19441 | |
| 3352 | 3361 | { |
| 3353 | 3362 | GET_ADDR(OP1); |
| 3354 | 3363 | GET_IMM16(OP2); |
| 3355 | | CPW(cpustate, RDMEM_W(cpustate, addr), imm16); |
| 3364 | CPW(cpustate, RDMEM_W(cpustate, AS_DATA, addr), imm16); |
| 3356 | 3365 | } |
| 3357 | 3366 | |
| 3358 | 3367 | /****************************************** |
| r19440 | r19441 | |
| 3362 | 3371 | static void Z4D_0000_0010_addr(z8000_state *cpustate) |
| 3363 | 3372 | { |
| 3364 | 3373 | GET_ADDR(OP1); |
| 3365 | | WRMEM_W(cpustate, addr, NEGW(cpustate, RDMEM_W(cpustate, addr))); |
| 3374 | WRMEM_W(cpustate, AS_DATA, addr, NEGW(cpustate, RDMEM_W(cpustate, AS_DATA, addr))); |
| 3366 | 3375 | } |
| 3367 | 3376 | |
| 3368 | 3377 | /****************************************** |
| r19440 | r19441 | |
| 3372 | 3381 | static void Z4D_0000_0100_addr(z8000_state *cpustate) |
| 3373 | 3382 | { |
| 3374 | 3383 | GET_ADDR(OP1); |
| 3375 | | TESTW(cpustate, RDMEM_W(cpustate, addr)); |
| 3384 | TESTW(cpustate, RDMEM_W(cpustate, AS_DATA, addr)); |
| 3376 | 3385 | } |
| 3377 | 3386 | |
| 3378 | 3387 | /****************************************** |
| r19440 | r19441 | |
| 3383 | 3392 | { |
| 3384 | 3393 | GET_ADDR(OP1); |
| 3385 | 3394 | GET_IMM16(OP2); |
| 3386 | | WRMEM_W(cpustate, addr, imm16); |
| 3395 | WRMEM_W(cpustate, AS_DATA, addr, imm16); |
| 3387 | 3396 | } |
| 3388 | 3397 | |
| 3389 | 3398 | /****************************************** |
| r19440 | r19441 | |
| 3393 | 3402 | static void Z4D_0000_0110_addr(z8000_state *cpustate) |
| 3394 | 3403 | { |
| 3395 | 3404 | GET_ADDR(OP1); |
| 3396 | | if (RDMEM_W(cpustate, addr) & S16) SET_S; else CLR_S; |
| 3397 | | WRMEM_W(cpustate, addr, 0xffff); |
| 3405 | if (RDMEM_W(cpustate, AS_DATA, addr) & S16) SET_S; else CLR_S; |
| 3406 | WRMEM_W(cpustate, AS_DATA, addr, 0xffff); |
| 3398 | 3407 | } |
| 3399 | 3408 | |
| 3400 | 3409 | /****************************************** |
| r19440 | r19441 | |
| 3404 | 3413 | static void Z4D_0000_1000_addr(z8000_state *cpustate) |
| 3405 | 3414 | { |
| 3406 | 3415 | GET_ADDR(OP1); |
| 3407 | | WRMEM_W(cpustate, addr, 0); |
| 3416 | WRMEM_W(cpustate, AS_DATA, addr, 0); |
| 3408 | 3417 | } |
| 3409 | 3418 | |
| 3410 | 3419 | /****************************************** |
| r19440 | r19441 | |
| 3416 | 3425 | GET_DST(OP0,NIB2); |
| 3417 | 3426 | GET_ADDR(OP1); |
| 3418 | 3427 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3419 | | WRMEM_W(cpustate, addr, COMW(cpustate, RDMEM_W(cpustate, addr))); |
| 3428 | WRMEM_W(cpustate, AS_DATA, addr, COMW(cpustate, RDMEM_W(cpustate, AS_DATA, addr))); |
| 3420 | 3429 | } |
| 3421 | 3430 | |
| 3422 | 3431 | /****************************************** |
| r19440 | r19441 | |
| 3429 | 3438 | GET_ADDR(OP1); |
| 3430 | 3439 | GET_IMM16(OP2); |
| 3431 | 3440 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3432 | | CPW(cpustate, RDMEM_W(cpustate, addr), imm16); |
| 3441 | CPW(cpustate, RDMEM_W(cpustate, AS_DATA, addr), imm16); |
| 3433 | 3442 | } |
| 3434 | 3443 | |
| 3435 | 3444 | /****************************************** |
| r19440 | r19441 | |
| 3441 | 3450 | GET_DST(OP0,NIB2); |
| 3442 | 3451 | GET_ADDR(OP1); |
| 3443 | 3452 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3444 | | WRMEM_W(cpustate, addr, NEGW(cpustate, RDMEM_W(cpustate, addr))); |
| 3453 | WRMEM_W(cpustate, AS_DATA, addr, NEGW(cpustate, RDMEM_W(cpustate, AS_DATA, addr))); |
| 3445 | 3454 | } |
| 3446 | 3455 | |
| 3447 | 3456 | /****************************************** |
| r19440 | r19441 | |
| 3453 | 3462 | GET_DST(OP0,NIB2); |
| 3454 | 3463 | GET_ADDR(OP1); |
| 3455 | 3464 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3456 | | TESTW(cpustate, RDMEM_W(cpustate, addr)); |
| 3465 | TESTW(cpustate, RDMEM_W(cpustate, AS_DATA, addr)); |
| 3457 | 3466 | } |
| 3458 | 3467 | |
| 3459 | 3468 | /****************************************** |
| r19440 | r19441 | |
| 3466 | 3475 | GET_ADDR(OP1); |
| 3467 | 3476 | GET_IMM16(OP2); |
| 3468 | 3477 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3469 | | WRMEM_W(cpustate, addr, imm16); |
| 3478 | WRMEM_W(cpustate, AS_DATA, addr, imm16); |
| 3470 | 3479 | } |
| 3471 | 3480 | |
| 3472 | 3481 | /****************************************** |
| r19440 | r19441 | |
| 3478 | 3487 | GET_DST(OP0,NIB2); |
| 3479 | 3488 | GET_ADDR(OP1); |
| 3480 | 3489 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3481 | | if (RDMEM_W(cpustate, addr) & S16) SET_S; else CLR_S; |
| 3482 | | WRMEM_W(cpustate, addr, 0xffff); |
| 3490 | if (RDMEM_W(cpustate, AS_DATA, addr) & S16) SET_S; else CLR_S; |
| 3491 | WRMEM_W(cpustate, AS_DATA, addr, 0xffff); |
| 3483 | 3492 | } |
| 3484 | 3493 | |
| 3485 | 3494 | /****************************************** |
| r19440 | r19441 | |
| 3491 | 3500 | GET_DST(OP0,NIB2); |
| 3492 | 3501 | GET_ADDR(OP1); |
| 3493 | 3502 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3494 | | WRMEM_W(cpustate, addr, 0); |
| 3503 | WRMEM_W(cpustate, AS_DATA, addr, 0); |
| 3495 | 3504 | } |
| 3496 | 3505 | |
| 3497 | 3506 | /****************************************** |
| r19440 | r19441 | |
| 3504 | 3513 | GET_SRC(OP0,NIB3); |
| 3505 | 3514 | GET_ADDR(OP1); |
| 3506 | 3515 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3507 | | WRMEM_B(cpustate, addr, cpustate->RB(src)); |
| 3516 | WRMEM_B(cpustate, AS_DATA, addr, cpustate->RB(src)); |
| 3508 | 3517 | } |
| 3509 | 3518 | |
| 3510 | 3519 | /****************************************** |
| r19440 | r19441 | |
| 3515 | 3524 | { |
| 3516 | 3525 | GET_DST(OP0,NIB3); |
| 3517 | 3526 | GET_ADDR(OP1); |
| 3518 | | CPL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, addr)); |
| 3527 | CPL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, AS_DATA, addr)); |
| 3519 | 3528 | } |
| 3520 | 3529 | |
| 3521 | 3530 | /****************************************** |
| r19440 | r19441 | |
| 3528 | 3537 | GET_SRC(OP0,NIB2); |
| 3529 | 3538 | GET_ADDR(OP1); |
| 3530 | 3539 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3531 | | CPL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, addr)); |
| 3540 | CPL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, AS_DATA, addr)); |
| 3532 | 3541 | } |
| 3533 | 3542 | |
| 3534 | 3543 | /****************************************** |
| r19440 | r19441 | |
| 3539 | 3548 | { |
| 3540 | 3549 | GET_DST(OP0,NIB2); |
| 3541 | 3550 | GET_ADDR(OP1); |
| 3542 | | PUSHL(cpustate, dst, RDMEM_L(cpustate, addr)); |
| 3551 | PUSHL(cpustate, dst, RDMEM_L(cpustate, AS_DATA, addr)); |
| 3543 | 3552 | } |
| 3544 | 3553 | |
| 3545 | 3554 | /****************************************** |
| r19440 | r19441 | |
| 3552 | 3561 | GET_DST(OP0,NIB2); |
| 3553 | 3562 | GET_ADDR(OP1); |
| 3554 | 3563 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3555 | | PUSHL(cpustate, dst, RDMEM_L(cpustate, addr)); |
| 3564 | PUSHL(cpustate, dst, RDMEM_L(cpustate, AS_DATA, addr)); |
| 3556 | 3565 | } |
| 3557 | 3566 | |
| 3558 | 3567 | /****************************************** |
| r19440 | r19441 | |
| 3563 | 3572 | { |
| 3564 | 3573 | GET_DST(OP0,NIB3); |
| 3565 | 3574 | GET_ADDR(OP1); |
| 3566 | | cpustate->RL(dst) = SUBL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, addr)); |
| 3575 | cpustate->RL(dst) = SUBL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, AS_DATA, addr)); |
| 3567 | 3576 | } |
| 3568 | 3577 | |
| 3569 | 3578 | /****************************************** |
| r19440 | r19441 | |
| 3576 | 3585 | GET_SRC(OP0,NIB2); |
| 3577 | 3586 | GET_ADDR(OP1); |
| 3578 | 3587 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3579 | | cpustate->RL(dst) = SUBL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, addr)); |
| 3588 | cpustate->RL(dst) = SUBL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, AS_DATA, addr)); |
| 3580 | 3589 | } |
| 3581 | 3590 | |
| 3582 | 3591 | /****************************************** |
| r19440 | r19441 | |
| 3587 | 3596 | { |
| 3588 | 3597 | GET_DST(OP0,NIB2); |
| 3589 | 3598 | GET_ADDR(OP1); |
| 3590 | | PUSHW(cpustate, dst, RDMEM_W(cpustate, addr)); |
| 3599 | PUSHW(cpustate, dst, RDMEM_W(cpustate, AS_DATA, addr)); |
| 3591 | 3600 | } |
| 3592 | 3601 | |
| 3593 | 3602 | /****************************************** |
| r19440 | r19441 | |
| 3600 | 3609 | GET_SRC(OP0,NIB3); |
| 3601 | 3610 | GET_ADDR(OP1); |
| 3602 | 3611 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3603 | | PUSHW(cpustate, dst, RDMEM_W(cpustate, addr)); |
| 3612 | PUSHW(cpustate, dst, RDMEM_W(cpustate, AS_DATA, addr)); |
| 3604 | 3613 | } |
| 3605 | 3614 | |
| 3606 | 3615 | /****************************************** |
| r19440 | r19441 | |
| 3611 | 3620 | { |
| 3612 | 3621 | GET_DST(OP0,NIB3); |
| 3613 | 3622 | GET_ADDR(OP1); |
| 3614 | | cpustate->RL(dst) = RDMEM_L(cpustate, addr); |
| 3623 | cpustate->RL(dst) = RDMEM_L(cpustate, AS_DATA, addr); |
| 3615 | 3624 | } |
| 3616 | 3625 | |
| 3617 | 3626 | /****************************************** |
| r19440 | r19441 | |
| 3624 | 3633 | GET_SRC(OP0,NIB2); |
| 3625 | 3634 | GET_ADDR(OP1); |
| 3626 | 3635 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3627 | | cpustate->RL(dst) = RDMEM_L(cpustate, addr); |
| 3636 | cpustate->RL(dst) = RDMEM_L(cpustate, AS_DATA, addr); |
| 3628 | 3637 | } |
| 3629 | 3638 | |
| 3630 | 3639 | /****************************************** |
| r19440 | r19441 | |
| 3635 | 3644 | { |
| 3636 | 3645 | GET_SRC(OP0,NIB2); |
| 3637 | 3646 | GET_ADDR(OP1); |
| 3638 | | WRMEM_L(cpustate, addr, POPL(cpustate, src)); |
| 3647 | WRMEM_L(cpustate, AS_DATA, addr, POPL(cpustate, src)); |
| 3639 | 3648 | } |
| 3640 | 3649 | |
| 3641 | 3650 | /****************************************** |
| r19440 | r19441 | |
| 3648 | 3657 | GET_SRC(OP0,NIB2); |
| 3649 | 3658 | GET_ADDR(OP1); |
| 3650 | 3659 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3651 | | WRMEM_L(cpustate, addr, POPL(cpustate, src)); |
| 3660 | WRMEM_L(cpustate, AS_DATA, addr, POPL(cpustate, src)); |
| 3652 | 3661 | } |
| 3653 | 3662 | |
| 3654 | 3663 | /****************************************** |
| r19440 | r19441 | |
| 3659 | 3668 | { |
| 3660 | 3669 | GET_DST(OP0,NIB3); |
| 3661 | 3670 | GET_ADDR(OP1); |
| 3662 | | cpustate->RL(dst) = ADDL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, addr)); |
| 3671 | cpustate->RL(dst) = ADDL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, AS_DATA, addr)); |
| 3663 | 3672 | } |
| 3664 | 3673 | |
| 3665 | 3674 | /****************************************** |
| r19440 | r19441 | |
| 3672 | 3681 | GET_SRC(OP0,NIB2); |
| 3673 | 3682 | GET_ADDR(OP1); |
| 3674 | 3683 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3675 | | cpustate->RL(dst) = ADDL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, addr)); |
| 3684 | cpustate->RL(dst) = ADDL(cpustate, cpustate->RL(dst), RDMEM_L(cpustate, AS_DATA, addr)); |
| 3676 | 3685 | } |
| 3677 | 3686 | |
| 3678 | 3687 | /****************************************** |
| r19440 | r19441 | |
| 3683 | 3692 | { |
| 3684 | 3693 | GET_SRC(OP0,NIB2); |
| 3685 | 3694 | GET_ADDR(OP1); |
| 3686 | | WRMEM_W(cpustate, addr, POPW(cpustate, src)); |
| 3695 | WRMEM_W(cpustate, AS_DATA, addr, POPW(cpustate, src)); |
| 3687 | 3696 | } |
| 3688 | 3697 | |
| 3689 | 3698 | /****************************************** |
| r19440 | r19441 | |
| 3696 | 3705 | GET_SRC(OP0,NIB2); |
| 3697 | 3706 | GET_ADDR(OP1); |
| 3698 | 3707 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3699 | | WRMEM_W(cpustate, addr, POPW(cpustate, src)); |
| 3708 | WRMEM_W(cpustate, AS_DATA, addr, POPW(cpustate, src)); |
| 3700 | 3709 | } |
| 3701 | 3710 | |
| 3702 | 3711 | /****************************************** |
| r19440 | r19441 | |
| 3707 | 3716 | { |
| 3708 | 3717 | GET_DST(OP0,NIB3); |
| 3709 | 3718 | GET_ADDR(OP1); |
| 3710 | | cpustate->RQ(dst) = MULTL(cpustate, cpustate->RQ(dst), RDMEM_L(cpustate, addr)); |
| 3719 | cpustate->RQ(dst) = MULTL(cpustate, cpustate->RQ(dst), RDMEM_L(cpustate, AS_DATA, addr)); |
| 3711 | 3720 | } |
| 3712 | 3721 | |
| 3713 | 3722 | /****************************************** |
| r19440 | r19441 | |
| 3720 | 3729 | GET_SRC(OP0,NIB2); |
| 3721 | 3730 | GET_ADDR(OP1); |
| 3722 | 3731 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3723 | | cpustate->RQ(dst) = MULTL(cpustate, cpustate->RQ(dst), RDMEM_L(cpustate, addr)); |
| 3732 | cpustate->RQ(dst) = MULTL(cpustate, cpustate->RQ(dst), RDMEM_L(cpustate, AS_DATA, addr)); |
| 3724 | 3733 | } |
| 3725 | 3734 | |
| 3726 | 3735 | /****************************************** |
| r19440 | r19441 | |
| 3731 | 3740 | { |
| 3732 | 3741 | GET_DST(OP0,NIB3); |
| 3733 | 3742 | GET_ADDR(OP1); |
| 3734 | | cpustate->RL(dst) = MULTW(cpustate, cpustate->RL(dst), RDMEM_W(cpustate, addr)); |
| 3743 | cpustate->RL(dst) = MULTW(cpustate, cpustate->RL(dst), RDMEM_W(cpustate, AS_DATA, addr)); |
| 3735 | 3744 | } |
| 3736 | 3745 | |
| 3737 | 3746 | /****************************************** |
| r19440 | r19441 | |
| 3744 | 3753 | GET_SRC(OP0,NIB2); |
| 3745 | 3754 | GET_ADDR(OP1); |
| 3746 | 3755 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3747 | | cpustate->RL(dst) = MULTW(cpustate, cpustate->RL(dst), RDMEM_W(cpustate, addr)); |
| 3756 | cpustate->RL(dst) = MULTW(cpustate, cpustate->RL(dst), RDMEM_W(cpustate, AS_DATA, addr)); |
| 3748 | 3757 | } |
| 3749 | 3758 | |
| 3750 | 3759 | /****************************************** |
| r19440 | r19441 | |
| 3755 | 3764 | { |
| 3756 | 3765 | GET_DST(OP0,NIB3); |
| 3757 | 3766 | GET_ADDR(OP1); |
| 3758 | | cpustate->RQ(dst) = DIVL(cpustate, cpustate->RQ(dst), RDMEM_L(cpustate, addr)); |
| 3767 | cpustate->RQ(dst) = DIVL(cpustate, cpustate->RQ(dst), RDMEM_L(cpustate, AS_DATA, addr)); |
| 3759 | 3768 | } |
| 3760 | 3769 | |
| 3761 | 3770 | /****************************************** |
| r19440 | r19441 | |
| 3768 | 3777 | GET_SRC(OP0,NIB2); |
| 3769 | 3778 | GET_ADDR(OP1); |
| 3770 | 3779 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3771 | | cpustate->RQ(dst) = DIVL(cpustate, cpustate->RQ(dst), RDMEM_L(cpustate, addr)); |
| 3780 | cpustate->RQ(dst) = DIVL(cpustate, cpustate->RQ(dst), RDMEM_L(cpustate, AS_DATA, addr)); |
| 3772 | 3781 | } |
| 3773 | 3782 | |
| 3774 | 3783 | /****************************************** |
| r19440 | r19441 | |
| 3779 | 3788 | { |
| 3780 | 3789 | GET_DST(OP0,NIB3); |
| 3781 | 3790 | GET_ADDR(OP1); |
| 3782 | | cpustate->RL(dst) = DIVW(cpustate, cpustate->RL(dst), RDMEM_W(cpustate, addr)); |
| 3791 | cpustate->RL(dst) = DIVW(cpustate, cpustate->RL(dst), RDMEM_W(cpustate, AS_DATA, addr)); |
| 3783 | 3792 | } |
| 3784 | 3793 | |
| 3785 | 3794 | /****************************************** |
| r19440 | r19441 | |
| 3792 | 3801 | GET_SRC(OP0,NIB2); |
| 3793 | 3802 | GET_ADDR(OP1); |
| 3794 | 3803 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3795 | | cpustate->RL(dst) = DIVW(cpustate, cpustate->RL(dst), RDMEM_W(cpustate, addr)); |
| 3804 | cpustate->RL(dst) = DIVW(cpustate, cpustate->RL(dst), RDMEM_W(cpustate, AS_DATA, addr)); |
| 3796 | 3805 | } |
| 3797 | 3806 | |
| 3798 | 3807 | /****************************************** |
| r19440 | r19441 | |
| 3805 | 3814 | GET_CNT(OP1,NIB3); |
| 3806 | 3815 | GET_ADDR(OP2); |
| 3807 | 3816 | while (cnt-- >= 0) { |
| 3808 | | cpustate->RW(dst) = RDMEM_W(cpustate, addr); |
| 3817 | cpustate->RW(dst) = RDMEM_W(cpustate, AS_DATA, addr); |
| 3809 | 3818 | dst = (dst+1) & 15; |
| 3810 | 3819 | addr = addr_add (cpustate, addr, 2); |
| 3811 | 3820 | } |
| r19440 | r19441 | |
| 3818 | 3827 | static void Z5C_0000_1000_addr(z8000_state *cpustate) |
| 3819 | 3828 | { |
| 3820 | 3829 | GET_ADDR(OP1); |
| 3821 | | TESTL(cpustate, RDMEM_L(cpustate, addr)); |
| 3830 | TESTL(cpustate, RDMEM_L(cpustate, AS_DATA, addr)); |
| 3822 | 3831 | } |
| 3823 | 3832 | |
| 3824 | 3833 | /****************************************** |
| r19440 | r19441 | |
| 3831 | 3840 | GET_CNT(OP1,NIB3); |
| 3832 | 3841 | GET_ADDR(OP2); |
| 3833 | 3842 | while (cnt-- >= 0) { |
| 3834 | | WRMEM_W(cpustate, addr, cpustate->RW(src)); |
| 3843 | WRMEM_W(cpustate, AS_DATA, addr, cpustate->RW(src)); |
| 3835 | 3844 | src = (src+1) & 15; |
| 3836 | 3845 | addr = addr_add (cpustate, addr, 2); |
| 3837 | 3846 | } |
| r19440 | r19441 | |
| 3846 | 3855 | GET_DST(OP0,NIB2); |
| 3847 | 3856 | GET_ADDR(OP1); |
| 3848 | 3857 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3849 | | TESTL(cpustate, RDMEM_L(cpustate, addr)); |
| 3858 | TESTL(cpustate, RDMEM_L(cpustate, AS_DATA, addr)); |
| 3850 | 3859 | } |
| 3851 | 3860 | |
| 3852 | 3861 | /****************************************** |
| r19440 | r19441 | |
| 3861 | 3870 | GET_ADDR(OP2); |
| 3862 | 3871 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3863 | 3872 | while (cnt-- >= 0) { |
| 3864 | | WRMEM_W(cpustate, addr, cpustate->RW(src)); |
| 3873 | WRMEM_W(cpustate, AS_DATA, addr, cpustate->RW(src)); |
| 3865 | 3874 | src = (src+1) & 15; |
| 3866 | 3875 | addr = addr_add(cpustate, addr, 2); |
| 3867 | 3876 | } |
| r19440 | r19441 | |
| 3879 | 3888 | GET_ADDR(OP2); |
| 3880 | 3889 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 3881 | 3890 | while (cnt-- >= 0) { |
| 3882 | | cpustate->RW(dst) = RDMEM_W(cpustate, addr); |
| 3891 | cpustate->RW(dst) = RDMEM_W(cpustate, AS_DATA, addr); |
| 3883 | 3892 | dst = (dst+1) & 15; |
| 3884 | 3893 | addr = addr_add(cpustate, addr, 2); |
| 3885 | 3894 | } |
| r19440 | r19441 | |
| 3893 | 3902 | { |
| 3894 | 3903 | GET_SRC(OP0,NIB3); |
| 3895 | 3904 | GET_ADDR(OP1); |
| 3896 | | WRMEM_L(cpustate, addr, cpustate->RL(src)); |
| 3905 | WRMEM_L(cpustate, AS_DATA, addr, cpustate->RL(src)); |
| 3897 | 3906 | } |
| 3898 | 3907 | |
| 3899 | 3908 | /****************************************** |
| r19440 | r19441 | |
| 3906 | 3915 | GET_DST(OP0,NIB2); |
| 3907 | 3916 | GET_ADDR(OP1); |
| 3908 | 3917 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3909 | | WRMEM_L(cpustate, addr, cpustate->RL(src)); |
| 3918 | WRMEM_L(cpustate, AS_DATA, addr, cpustate->RL(src)); |
| 3910 | 3919 | } |
| 3911 | 3920 | |
| 3912 | 3921 | /****************************************** |
| r19440 | r19441 | |
| 3918 | 3927 | GET_CCC(OP0,NIB3); |
| 3919 | 3928 | GET_ADDR(OP1); |
| 3920 | 3929 | switch (cc) { |
| 3921 | | case 0: if (CC0) cpustate->pc = addr; break; |
| 3922 | | case 1: if (CC1) cpustate->pc = addr; break; |
| 3923 | | case 2: if (CC2) cpustate->pc = addr; break; |
| 3924 | | case 3: if (CC3) cpustate->pc = addr; break; |
| 3925 | | case 4: if (CC4) cpustate->pc = addr; break; |
| 3926 | | case 5: if (CC5) cpustate->pc = addr; break; |
| 3927 | | case 6: if (CC6) cpustate->pc = addr; break; |
| 3928 | | case 7: if (CC7) cpustate->pc = addr; break; |
| 3929 | | case 8: if (CC8) cpustate->pc = addr; break; |
| 3930 | | case 9: if (CC9) cpustate->pc = addr; break; |
| 3931 | | case 10: if (CCA) cpustate->pc = addr; break; |
| 3932 | | case 11: if (CCB) cpustate->pc = addr; break; |
| 3933 | | case 12: if (CCC) cpustate->pc = addr; break; |
| 3934 | | case 13: if (CCD) cpustate->pc = addr; break; |
| 3935 | | case 14: if (CCE) cpustate->pc = addr; break; |
| 3936 | | case 15: if (CCF) cpustate->pc = addr; break; |
| 3930 | case 0: if (CC0) set_pc(cpustate, addr); break; |
| 3931 | case 1: if (CC1) set_pc(cpustate, addr); break; |
| 3932 | case 2: if (CC2) set_pc(cpustate, addr); break; |
| 3933 | case 3: if (CC3) set_pc(cpustate, addr); break; |
| 3934 | case 4: if (CC4) set_pc(cpustate, addr); break; |
| 3935 | case 5: if (CC5) set_pc(cpustate, addr); break; |
| 3936 | case 6: if (CC6) set_pc(cpustate, addr); break; |
| 3937 | case 7: if (CC7) set_pc(cpustate, addr); break; |
| 3938 | case 8: if (CC8) set_pc(cpustate, addr); break; |
| 3939 | case 9: if (CC9) set_pc(cpustate, addr); break; |
| 3940 | case 10: if (CCA) set_pc(cpustate, addr); break; |
| 3941 | case 11: if (CCB) set_pc(cpustate, addr); break; |
| 3942 | case 12: if (CCC) set_pc(cpustate, addr); break; |
| 3943 | case 13: if (CCD) set_pc(cpustate, addr); break; |
| 3944 | case 14: if (CCE) set_pc(cpustate, addr); break; |
| 3945 | case 15: if (CCF) set_pc(cpustate, addr); break; |
| 3937 | 3946 | } |
| 3938 | 3947 | } |
| 3939 | 3948 | |
| r19440 | r19441 | |
| 3948 | 3957 | GET_ADDR(OP1); |
| 3949 | 3958 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3950 | 3959 | switch (cc) { |
| 3951 | | case 0: if (CC0) cpustate->pc = addr; break; |
| 3952 | | case 1: if (CC1) cpustate->pc = addr; break; |
| 3953 | | case 2: if (CC2) cpustate->pc = addr; break; |
| 3954 | | case 3: if (CC3) cpustate->pc = addr; break; |
| 3955 | | case 4: if (CC4) cpustate->pc = addr; break; |
| 3956 | | case 5: if (CC5) cpustate->pc = addr; break; |
| 3957 | | case 6: if (CC6) cpustate->pc = addr; break; |
| 3958 | | case 7: if (CC7) cpustate->pc = addr; break; |
| 3959 | | case 8: if (CC8) cpustate->pc = addr; break; |
| 3960 | | case 9: if (CC9) cpustate->pc = addr; break; |
| 3961 | | case 10: if (CCA) cpustate->pc = addr; break; |
| 3962 | | case 11: if (CCB) cpustate->pc = addr; break; |
| 3963 | | case 12: if (CCC) cpustate->pc = addr; break; |
| 3964 | | case 13: if (CCD) cpustate->pc = addr; break; |
| 3965 | | case 14: if (CCE) cpustate->pc = addr; break; |
| 3966 | | case 15: if (CCF) cpustate->pc = addr; break; |
| 3960 | case 0: if (CC0) set_pc(cpustate, addr); break; |
| 3961 | case 1: if (CC1) set_pc(cpustate, addr); break; |
| 3962 | case 2: if (CC2) set_pc(cpustate, addr); break; |
| 3963 | case 3: if (CC3) set_pc(cpustate, addr); break; |
| 3964 | case 4: if (CC4) set_pc(cpustate, addr); break; |
| 3965 | case 5: if (CC5) set_pc(cpustate, addr); break; |
| 3966 | case 6: if (CC6) set_pc(cpustate, addr); break; |
| 3967 | case 7: if (CC7) set_pc(cpustate, addr); break; |
| 3968 | case 8: if (CC8) set_pc(cpustate, addr); break; |
| 3969 | case 9: if (CC9) set_pc(cpustate, addr); break; |
| 3970 | case 10: if (CCA) set_pc(cpustate, addr); break; |
| 3971 | case 11: if (CCB) set_pc(cpustate, addr); break; |
| 3972 | case 12: if (CCC) set_pc(cpustate, addr); break; |
| 3973 | case 13: if (CCD) set_pc(cpustate, addr); break; |
| 3974 | case 14: if (CCE) set_pc(cpustate, addr); break; |
| 3975 | case 15: if (CCF) set_pc(cpustate, addr); break; |
| 3967 | 3976 | } |
| 3968 | 3977 | } |
| 3969 | 3978 | |
| r19440 | r19441 | |
| 3978 | 3987 | PUSHL(cpustate, SP, make_segmented_addr(cpustate->pc)); |
| 3979 | 3988 | else |
| 3980 | 3989 | PUSHW(cpustate, SP, cpustate->pc); |
| 3981 | | cpustate->pc = addr; |
| 3990 | set_pc(cpustate, addr); |
| 3982 | 3991 | } |
| 3983 | 3992 | |
| 3984 | 3993 | /****************************************** |
| r19440 | r19441 | |
| 3994 | 4003 | else |
| 3995 | 4004 | PUSHW(cpustate, SP, cpustate->pc); |
| 3996 | 4005 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 3997 | | cpustate->pc = addr; |
| 4006 | set_pc(cpustate, addr); |
| 3998 | 4007 | } |
| 3999 | 4008 | |
| 4000 | 4009 | /****************************************** |
| r19440 | r19441 | |
| 4005 | 4014 | { |
| 4006 | 4015 | GET_DST(OP0,NIB3); |
| 4007 | 4016 | GET_ADDR(OP1); |
| 4008 | | cpustate->RB(dst) = RDMEM_B(cpustate, addr); |
| 4017 | cpustate->RB(dst) = RDMEM_B(cpustate, AS_DATA, addr); |
| 4009 | 4018 | } |
| 4010 | 4019 | |
| 4011 | 4020 | /****************************************** |
| r19440 | r19441 | |
| 4018 | 4027 | GET_SRC(OP0,NIB2); |
| 4019 | 4028 | GET_ADDR(OP1); |
| 4020 | 4029 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 4021 | | cpustate->RB(dst) = RDMEM_B(cpustate, addr); |
| 4030 | cpustate->RB(dst) = RDMEM_B(cpustate, AS_DATA, addr); |
| 4022 | 4031 | } |
| 4023 | 4032 | |
| 4024 | 4033 | /****************************************** |
| r19440 | r19441 | |
| 4029 | 4038 | { |
| 4030 | 4039 | GET_DST(OP0,NIB3); |
| 4031 | 4040 | GET_ADDR(OP1); |
| 4032 | | cpustate->RW(dst) = RDMEM_W(cpustate, addr); |
| 4041 | cpustate->RW(dst) = RDMEM_W(cpustate, AS_DATA, addr); |
| 4033 | 4042 | } |
| 4034 | 4043 | |
| 4035 | 4044 | /****************************************** |
| r19440 | r19441 | |
| 4042 | 4051 | GET_SRC(OP0,NIB2); |
| 4043 | 4052 | GET_ADDR(OP1); |
| 4044 | 4053 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 4045 | | cpustate->RW(dst) = RDMEM_W(cpustate, addr); |
| 4054 | cpustate->RW(dst) = RDMEM_W(cpustate, AS_DATA, addr); |
| 4046 | 4055 | } |
| 4047 | 4056 | |
| 4048 | 4057 | /****************************************** |
| r19440 | r19441 | |
| 4053 | 4062 | { |
| 4054 | 4063 | GET_BIT(OP0); |
| 4055 | 4064 | GET_ADDR(OP1); |
| 4056 | | WRMEM_B(cpustate, addr, RDMEM_B(cpustate, addr) & ~bit); |
| 4065 | WRMEM_B(cpustate, AS_DATA, addr, RDMEM_B(cpustate, AS_DATA, addr) & ~bit); |
| 4057 | 4066 | } |
| 4058 | 4067 | |
| 4059 | 4068 | /****************************************** |
| r19440 | r19441 | |
| 4066 | 4075 | GET_DST(OP0,NIB2); |
| 4067 | 4076 | GET_ADDR(OP1); |
| 4068 | 4077 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 4069 | | WRMEM_B(cpustate, addr, RDMEM_B(cpustate, addr) & ~bit); |
| 4078 | WRMEM_B(cpustate, AS_DATA, addr, RDMEM_B(cpustate, AS_DATA, addr) & ~bit); |
| 4070 | 4079 | } |
| 4071 | 4080 | |
| 4072 | 4081 | /****************************************** |
| r19440 | r19441 | |
| 4077 | 4086 | { |
| 4078 | 4087 | GET_BIT(OP0); |
| 4079 | 4088 | GET_ADDR(OP1); |
| 4080 | | WRMEM_W(cpustate, addr, RDMEM_W(cpustate, addr) & ~bit); |
| 4089 | WRMEM_W(cpustate, AS_DATA, addr, RDMEM_W(cpustate, AS_DATA, addr) & ~bit); |
| 4081 | 4090 | } |
| 4082 | 4091 | |
| 4083 | 4092 | /****************************************** |
| r19440 | r19441 | |
| 4090 | 4099 | GET_DST(OP0,NIB2); |
| 4091 | 4100 | GET_ADDR(OP1); |
| 4092 | 4101 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 4093 | | WRMEM_W(cpustate, addr, RDMEM_W(cpustate, addr) & ~bit); |
| 4102 | WRMEM_W(cpustate, AS_DATA, addr, RDMEM_W(cpustate, AS_DATA, addr) & ~bit); |
| 4094 | 4103 | } |
| 4095 | 4104 | |
| 4096 | 4105 | /****************************************** |
| r19440 | r19441 | |
| 4101 | 4110 | { |
| 4102 | 4111 | GET_BIT(OP0); |
| 4103 | 4112 | GET_ADDR(OP1); |
| 4104 | | WRMEM_B(cpustate, addr, RDMEM_B(cpustate, addr) | bit); |
| 4113 | WRMEM_B(cpustate, AS_DATA, addr, RDMEM_B(cpustate, AS_DATA, addr) | bit); |
| 4105 | 4114 | } |
| 4106 | 4115 | |
| 4107 | 4116 | /****************************************** |
| r19440 | r19441 | |
| 4114 | 4123 | GET_DST(OP0,NIB2); |
| 4115 | 4124 | GET_ADDR(OP1); |
| 4116 | 4125 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 4117 | | WRMEM_B(cpustate, addr, RDMEM_B(cpustate, addr) | bit); |
| 4126 | WRMEM_B(cpustate, AS_DATA, addr, RDMEM_B(cpustate, AS_DATA, addr) | bit); |
| 4118 | 4127 | } |
| 4119 | 4128 | |
| 4120 | 4129 | /****************************************** |
| r19440 | r19441 | |
| 4125 | 4134 | { |
| 4126 | 4135 | GET_BIT(OP0); |
| 4127 | 4136 | GET_ADDR(OP1); |
| 4128 | | WRMEM_W(cpustate, addr, RDMEM_W(cpustate, addr) | bit); |
| 4137 | WRMEM_W(cpustate, AS_DATA, addr, RDMEM_W(cpustate, AS_DATA, addr) | bit); |
| 4129 | 4138 | } |
| 4130 | 4139 | |
| 4131 | 4140 | /****************************************** |
| r19440 | r19441 | |
| 4138 | 4147 | GET_DST(OP0,NIB2); |
| 4139 | 4148 | GET_ADDR(OP1); |
| 4140 | 4149 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 4141 | | WRMEM_W(cpustate, addr, RDMEM_W(cpustate, addr) | bit); |
| 4150 | WRMEM_W(cpustate, AS_DATA, addr, RDMEM_W(cpustate, AS_DATA, addr) | bit); |
| 4142 | 4151 | } |
| 4143 | 4152 | |
| 4144 | 4153 | /****************************************** |
| r19440 | r19441 | |
| 4149 | 4158 | { |
| 4150 | 4159 | GET_BIT(OP0); |
| 4151 | 4160 | GET_ADDR(OP1); |
| 4152 | | if (RDMEM_B(cpustate, addr) & bit) CLR_Z; else SET_Z; |
| 4161 | if (RDMEM_B(cpustate, AS_DATA, addr) & bit) CLR_Z; else SET_Z; |
| 4153 | 4162 | } |
| 4154 | 4163 | |
| 4155 | 4164 | /****************************************** |
| r19440 | r19441 | |
| 4162 | 4171 | GET_DST(OP0,NIB2); |
| 4163 | 4172 | GET_ADDR(OP1); |
| 4164 | 4173 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 4165 | | if (RDMEM_B(cpustate, addr) & bit) CLR_Z; else SET_Z; |
| 4174 | if (RDMEM_B(cpustate, AS_DATA, addr) & bit) CLR_Z; else SET_Z; |
| 4166 | 4175 | } |
| 4167 | 4176 | |
| 4168 | 4177 | /****************************************** |
| r19440 | r19441 | |
| 4173 | 4182 | { |
| 4174 | 4183 | GET_BIT(OP0); |
| 4175 | 4184 | GET_ADDR(OP1); |
| 4176 | | if (RDMEM_W(cpustate, addr) & bit) CLR_Z; else SET_Z; |
| 4185 | if (RDMEM_W(cpustate, AS_DATA, addr) & bit) CLR_Z; else SET_Z; |
| 4177 | 4186 | } |
| 4178 | 4187 | |
| 4179 | 4188 | /****************************************** |
| r19440 | r19441 | |
| 4186 | 4195 | GET_DST(OP0,NIB2); |
| 4187 | 4196 | GET_ADDR(OP1); |
| 4188 | 4197 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 4189 | | if (RDMEM_W(cpustate, addr) & bit) CLR_Z; else SET_Z; |
| 4198 | if (RDMEM_W(cpustate, AS_DATA, addr) & bit) CLR_Z; else SET_Z; |
| 4190 | 4199 | } |
| 4191 | 4200 | |
| 4192 | 4201 | /****************************************** |
| r19440 | r19441 | |
| 4197 | 4206 | { |
| 4198 | 4207 | GET_I4M1(OP0,NIB3); |
| 4199 | 4208 | GET_ADDR(OP1); |
| 4200 | | WRMEM_B(cpustate, addr, INCB(cpustate, RDMEM_B(cpustate, addr), i4p1)); |
| 4209 | WRMEM_B(cpustate, AS_DATA, addr, INCB(cpustate, RDMEM_B(cpustate, AS_DATA, addr), i4p1)); |
| 4201 | 4210 | } |
| 4202 | 4211 | |
| 4203 | 4212 | /****************************************** |
| r19440 | r19441 | |
| 4210 | 4219 | GET_DST(OP0,NIB2); |
| 4211 | 4220 | GET_ADDR(OP1); |
| 4212 | 4221 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 4213 | | WRMEM_B(cpustate, addr, INCB(cpustate, RDMEM_B(cpustate, addr), i4p1)); |
| 4222 | WRMEM_B(cpustate, AS_DATA, addr, INCB(cpustate, RDMEM_B(cpustate, AS_DATA, addr), i4p1)); |
| 4214 | 4223 | } |
| 4215 | 4224 | |
| 4216 | 4225 | /****************************************** |
| r19440 | r19441 | |
| 4221 | 4230 | { |
| 4222 | 4231 | GET_I4M1(OP0,NIB3); |
| 4223 | 4232 | GET_ADDR(OP1); |
| 4224 | | WRMEM_W(cpustate, addr, INCW(cpustate, RDMEM_W(cpustate, addr), i4p1)); |
| 4233 | WRMEM_W(cpustate, AS_DATA, addr, INCW(cpustate, RDMEM_W(cpustate, AS_DATA, addr), i4p1)); |
| 4225 | 4234 | } |
| 4226 | 4235 | |
| 4227 | 4236 | /****************************************** |
| r19440 | r19441 | |
| 4234 | 4243 | GET_DST(OP0,NIB2); |
| 4235 | 4244 | GET_ADDR(OP1); |
| 4236 | 4245 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 4237 | | WRMEM_W(cpustate, addr, INCW(cpustate, RDMEM_W(cpustate, addr), i4p1)); |
| 4246 | WRMEM_W(cpustate, AS_DATA, addr, INCW(cpustate, RDMEM_W(cpustate, AS_DATA, addr), i4p1)); |
| 4238 | 4247 | } |
| 4239 | 4248 | |
| 4240 | 4249 | /****************************************** |
| r19440 | r19441 | |
| 4245 | 4254 | { |
| 4246 | 4255 | GET_I4M1(OP0,NIB3); |
| 4247 | 4256 | GET_ADDR(OP1); |
| 4248 | | WRMEM_B(cpustate, addr, DECB(cpustate, RDMEM_B(cpustate, addr), i4p1)); |
| 4257 | WRMEM_B(cpustate, AS_DATA, addr, DECB(cpustate, RDMEM_B(cpustate, AS_DATA, addr), i4p1)); |
| 4249 | 4258 | } |
| 4250 | 4259 | |
| 4251 | 4260 | /****************************************** |
| r19440 | r19441 | |
| 4258 | 4267 | GET_DST(OP0,NIB2); |
| 4259 | 4268 | GET_ADDR(OP1); |
| 4260 | 4269 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 4261 | | WRMEM_B(cpustate, addr, DECB(cpustate, RDMEM_B(cpustate, addr), i4p1)); |
| 4270 | WRMEM_B(cpustate, AS_DATA, addr, DECB(cpustate, RDMEM_B(cpustate, AS_DATA, addr), i4p1)); |
| 4262 | 4271 | } |
| 4263 | 4272 | |
| 4264 | 4273 | /****************************************** |
| r19440 | r19441 | |
| 4269 | 4278 | { |
| 4270 | 4279 | GET_I4M1(OP0,NIB3); |
| 4271 | 4280 | GET_ADDR(OP1); |
| 4272 | | WRMEM_W(cpustate, addr, DECW(cpustate, RDMEM_W(cpustate, addr), i4p1)); |
| 4281 | WRMEM_W(cpustate, AS_DATA, addr, DECW(cpustate, RDMEM_W(cpustate, AS_DATA, addr), i4p1)); |
| 4273 | 4282 | } |
| 4274 | 4283 | |
| 4275 | 4284 | /****************************************** |
| r19440 | r19441 | |
| 4282 | 4291 | GET_DST(OP0,NIB2); |
| 4283 | 4292 | GET_ADDR(OP1); |
| 4284 | 4293 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 4285 | | WRMEM_W(cpustate, addr, DECW(cpustate, RDMEM_W(cpustate, addr), i4p1)); |
| 4294 | WRMEM_W(cpustate, AS_DATA, addr, DECW(cpustate, RDMEM_W(cpustate, AS_DATA, addr), i4p1)); |
| 4286 | 4295 | } |
| 4287 | 4296 | |
| 4288 | 4297 | /****************************************** |
| r19440 | r19441 | |
| 4293 | 4302 | { |
| 4294 | 4303 | GET_DST(OP0,NIB3); |
| 4295 | 4304 | GET_ADDR(OP1); |
| 4296 | | UINT8 tmp = RDMEM_B(cpustate, addr); |
| 4297 | | WRMEM_B(cpustate, addr, cpustate->RB(dst)); |
| 4305 | UINT8 tmp = RDMEM_B(cpustate, AS_DATA, addr); |
| 4306 | WRMEM_B(cpustate, AS_DATA, addr, cpustate->RB(dst)); |
| 4298 | 4307 | cpustate->RB(dst) = tmp; |
| 4299 | 4308 | } |
| 4300 | 4309 | |
| r19440 | r19441 | |
| 4309 | 4318 | GET_ADDR(OP1); |
| 4310 | 4319 | UINT8 tmp; |
| 4311 | 4320 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 4312 | | tmp = RDMEM_B(cpustate, addr); |
| 4313 | | WRMEM_B(cpustate, addr, cpustate->RB(dst)); |
| 4321 | tmp = RDMEM_B(cpustate, AS_DATA, addr); |
| 4322 | WRMEM_B(cpustate, AS_DATA, addr, cpustate->RB(dst)); |
| 4314 | 4323 | cpustate->RB(dst) = tmp; |
| 4315 | 4324 | } |
| 4316 | 4325 | |
| r19440 | r19441 | |
| 4322 | 4331 | { |
| 4323 | 4332 | GET_DST(OP0,NIB3); |
| 4324 | 4333 | GET_ADDR(OP1); |
| 4325 | | UINT16 tmp = RDMEM_W(cpustate, addr); |
| 4326 | | WRMEM_W(cpustate, addr, cpustate->RW(dst)); |
| 4334 | UINT16 tmp = RDMEM_W(cpustate, AS_DATA, addr); |
| 4335 | WRMEM_W(cpustate, AS_DATA, addr, cpustate->RW(dst)); |
| 4327 | 4336 | cpustate->RW(dst) = tmp; |
| 4328 | 4337 | } |
| 4329 | 4338 | |
| r19440 | r19441 | |
| 4338 | 4347 | GET_ADDR(OP1); |
| 4339 | 4348 | UINT16 tmp; |
| 4340 | 4349 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 4341 | | tmp = RDMEM_W(cpustate, addr); |
| 4342 | | WRMEM_W(cpustate, addr, cpustate->RW(dst)); |
| 4350 | tmp = RDMEM_W(cpustate, AS_DATA, addr); |
| 4351 | WRMEM_W(cpustate, AS_DATA, addr, cpustate->RW(dst)); |
| 4343 | 4352 | cpustate->RW(dst) = tmp; |
| 4344 | 4353 | } |
| 4345 | 4354 | |
| r19440 | r19441 | |
| 4351 | 4360 | { |
| 4352 | 4361 | GET_SRC(OP0,NIB3); |
| 4353 | 4362 | GET_ADDR(OP1); |
| 4354 | | WRMEM_B(cpustate, addr, cpustate->RB(src)); |
| 4363 | WRMEM_B(cpustate, AS_DATA, addr, cpustate->RB(src)); |
| 4355 | 4364 | } |
| 4356 | 4365 | |
| 4357 | 4366 | /****************************************** |
| r19440 | r19441 | |
| 4364 | 4373 | GET_DST(OP0,NIB2); |
| 4365 | 4374 | GET_ADDR(OP1); |
| 4366 | 4375 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 4367 | | WRMEM_B(cpustate, addr, cpustate->RB(src)); |
| 4376 | WRMEM_B(cpustate, AS_DATA, addr, cpustate->RB(src)); |
| 4368 | 4377 | } |
| 4369 | 4378 | |
| 4370 | 4379 | /****************************************** |
| r19440 | r19441 | |
| 4375 | 4384 | { |
| 4376 | 4385 | GET_SRC(OP0,NIB3); |
| 4377 | 4386 | GET_ADDR(OP1); |
| 4378 | | WRMEM_W(cpustate, addr, cpustate->RW(src)); |
| 4387 | WRMEM_W(cpustate, AS_DATA, addr, cpustate->RW(src)); |
| 4379 | 4388 | } |
| 4380 | 4389 | |
| 4381 | 4390 | /****************************************** |
| r19440 | r19441 | |
| 4388 | 4397 | GET_DST(OP0,NIB2); |
| 4389 | 4398 | GET_ADDR(OP1); |
| 4390 | 4399 | addr = addr_add(cpustate, addr, cpustate->RW(dst)); |
| 4391 | | WRMEM_W(cpustate, addr, cpustate->RW(src)); |
| 4400 | WRMEM_W(cpustate, AS_DATA, addr, cpustate->RW(src)); |
| 4392 | 4401 | } |
| 4393 | 4402 | |
| 4394 | 4403 | /****************************************** |
| r19440 | r19441 | |
| 4400 | 4409 | GET_DST(OP0,NIB3); |
| 4401 | 4410 | GET_SRC(OP0,NIB2); |
| 4402 | 4411 | GET_IDX(OP1,NIB1); |
| 4403 | | cpustate->RB(dst) = RDMEM_B(cpustate, addr_add(cpustate, addr_from_reg(cpustate, src), cpustate->RW(idx))); |
| 4412 | cpustate->RB(dst) = RDMEM_B(cpustate, AS_DATA, addr_add(cpustate, addr_from_reg(cpustate, src), cpustate->RW(idx))); |
| 4404 | 4413 | } |
| 4405 | 4414 | |
| 4406 | 4415 | /****************************************** |
| r19440 | r19441 | |
| 4412 | 4421 | GET_DST(OP0,NIB3); |
| 4413 | 4422 | GET_SRC(OP0,NIB2); |
| 4414 | 4423 | GET_IDX(OP1,NIB1); |
| 4415 | | cpustate->RW(dst) = RDMEM_W(cpustate, addr_add(cpustate, addr_from_reg(cpustate, src), cpustate->RW(idx))); |
| 4424 | cpustate->RW(dst) = RDMEM_W(cpustate, AS_DATA, addr_add(cpustate, addr_from_reg(cpustate, src), cpustate->RW(idx))); |
| 4416 | 4425 | } |
| 4417 | 4426 | |
| 4418 | 4427 | /****************************************** |
| r19440 | r19441 | |
| 4424 | 4433 | GET_SRC(OP0,NIB3); |
| 4425 | 4434 | GET_DST(OP0,NIB2); |
| 4426 | 4435 | GET_IDX(OP1,NIB1); |
| 4427 | | WRMEM_B(cpustate, addr_add(cpustate, addr_from_reg(cpustate, dst), cpustate->RW(idx)), cpustate->RB(src)); |
| 4436 | WRMEM_B(cpustate, AS_DATA, addr_add(cpustate, addr_from_reg(cpustate, dst), cpustate->RW(idx)), cpustate->RB(src)); |
| 4428 | 4437 | } |
| 4429 | 4438 | |
| 4430 | 4439 | /****************************************** |
| r19440 | r19441 | |
| 4436 | 4445 | GET_SRC(OP0,NIB3); |
| 4437 | 4446 | GET_DST(OP0,NIB2); |
| 4438 | 4447 | GET_IDX(OP1,NIB1); |
| 4439 | | WRMEM_W(cpustate, addr_add(cpustate, addr_from_reg(cpustate, dst), cpustate->RW(idx)), cpustate->RW(src)); |
| 4448 | WRMEM_W(cpustate, AS_DATA, addr_add(cpustate, addr_from_reg(cpustate, dst), cpustate->RW(idx)), cpustate->RW(src)); |
| 4440 | 4449 | } |
| 4441 | 4450 | |
| 4442 | 4451 | /****************************************** |
| r19440 | r19441 | |
| 4466 | 4475 | GET_DST(OP0,NIB3); |
| 4467 | 4476 | GET_SRC(OP0,NIB2); |
| 4468 | 4477 | GET_IDX(OP1,NIB1); |
| 4469 | | cpustate->RL(dst) = RDMEM_L(cpustate, addr_add(cpustate, addr_from_reg(cpustate, src), cpustate->RW(idx))); |
| 4478 | cpustate->RL(dst) = RDMEM_L(cpustate, AS_DATA, addr_add(cpustate, addr_from_reg(cpustate, src), cpustate->RW(idx))); |
| 4470 | 4479 | } |
| 4471 | 4480 | |
| 4472 | 4481 | /****************************************** |
| r19440 | r19441 | |
| 4512 | 4521 | GET_SRC(OP0,NIB3); |
| 4513 | 4522 | GET_DST(OP0,NIB2); |
| 4514 | 4523 | GET_IDX(OP1,NIB1); |
| 4515 | | WRMEM_L(cpustate, addr_add(cpustate, addr_from_reg(cpustate, dst), cpustate->RW(idx)), cpustate->RL(src)); |
| 4524 | WRMEM_L(cpustate, AS_DATA, addr_add(cpustate, addr_from_reg(cpustate, dst), cpustate->RW(idx)), cpustate->RL(src)); |
| 4516 | 4525 | } |
| 4517 | 4526 | |
| 4518 | 4527 | /****************************************** |
| r19440 | r19441 | |
| 4538 | 4547 | CHECK_PRIVILEGED_INSTR(); |
| 4539 | 4548 | GET_ADDR(OP1); |
| 4540 | 4549 | UINT16 fcw; |
| 4541 | | //printf("LDPS from 0x%x: old pc: 0x%x\n", addr, cpustate->pc); |
| 4550 | printf("LDPS from 0x%x: old pc: 0x%x\n", addr, cpustate->pc); |
| 4542 | 4551 | if (segmented_mode(cpustate)) { |
| 4543 | | fcw = RDMEM_W(cpustate, addr + 2); |
| 4544 | | cpustate->pc = segmented_addr(RDMEM_L(cpustate, addr + 4)); |
| 4552 | fcw = RDMEM_W(cpustate, AS_DATA, addr + 2); |
| 4553 | set_pc(cpustate, segmented_addr(RDMEM_L(cpustate, AS_DATA, addr + 4))); |
| 4545 | 4554 | } |
| 4546 | 4555 | else { |
| 4547 | | fcw = RDMEM_W(cpustate, addr); |
| 4548 | | cpustate->pc = RDMEM_W(cpustate, (UINT16)(addr + 2)); |
| 4556 | fcw = RDMEM_W(cpustate, AS_DATA, addr); |
| 4557 | set_pc(cpustate, RDMEM_W(cpustate, AS_DATA, (UINT16)(addr + 2))); |
| 4549 | 4558 | } |
| 4559 | if ((fcw ^ cpustate->fcw) & F_SEG) printf("ldps 2 (0x%05x): changing from %ssegmented mode to %ssegmented mode\n", cpustate->pc, (fcw & F_SEG) ? "non-" : "", (fcw & F_SEG) ? "" : "non-"); |
| 4550 | 4560 | CHANGE_FCW(cpustate, fcw); /* check for user/system mode change */ |
| 4551 | 4561 | //printf("LDPS: new pc: 0x%x\n", cpustate->pc); |
| 4552 | 4562 | } |
| r19440 | r19441 | |
| 4563 | 4573 | UINT16 fcw; |
| 4564 | 4574 | addr = addr_add(cpustate, addr, cpustate->RW(src)); |
| 4565 | 4575 | if (segmented_mode(cpustate)) { |
| 4566 | | fcw = RDMEM_W(cpustate, addr + 2); |
| 4567 | | cpustate->pc = segmented_addr(RDMEM_L(cpustate, addr + 4)); |
| 4576 | fcw = RDMEM_W(cpustate, AS_DATA, addr + 2); |
| 4577 | set_pc(cpustate, segmented_addr(RDMEM_L(cpustate, AS_DATA, addr + 4))); |
| 4568 | 4578 | } |
| 4569 | 4579 | else { |
| 4570 | | fcw = RDMEM_W(cpustate, addr); |
| 4571 | | cpustate->pc = RDMEM_W(cpustate, (UINT16)(addr + 2)); |
| 4580 | fcw = RDMEM_W(cpustate, AS_DATA, addr); |
| 4581 | cpustate->pc = RDMEM_W(cpustate, AS_DATA, (UINT16)(addr + 2)); |
| 4572 | 4582 | } |
| 4583 | if ((fcw ^ cpustate->fcw) & F_SEG) printf("ldps 3 (0x%05x): changing from %ssegmented mode to %ssegmented mode\n", cpustate->pc, (fcw & F_SEG) ? "non-" : "", (fcw & F_SEG) ? "" : "non-"); |
| 4573 | 4584 | CHANGE_FCW(cpustate, fcw); /* check for user/system mode change */ |
| 4574 | 4585 | } |
| 4575 | 4586 | |
| r19440 | r19441 | |
| 4595 | 4606 | tag = POPW(cpustate, SP); /* get type tag */ |
| 4596 | 4607 | fcw = POPW(cpustate, SP); /* get cpustate->fcw */ |
| 4597 | 4608 | if (segmented_mode(cpustate)) |
| 4598 | | cpustate->pc = segmented_addr(POPL(cpustate, SP)); |
| 4609 | set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); |
| 4599 | 4610 | else |
| 4600 | 4611 | cpustate->pc = POPW(cpustate, SP); /* get cpustate->pc */ |
| 4601 | 4612 | cpustate->irq_srv &= ~tag; /* remove IRQ serviced flag */ |
| r19440 | r19441 | |
| 5253 | 5264 | GET_CCC(OP0,NIB3); |
| 5254 | 5265 | if (segmented_mode(cpustate)) |
| 5255 | 5266 | switch (cc) { |
| 5256 | | case 0: if (CC0) cpustate->pc = segmented_addr(POPL(cpustate, SP)); break; |
| 5257 | | case 1: if (CC1) cpustate->pc = segmented_addr(POPL(cpustate, SP)); break; |
| 5258 | | case 2: if (CC2) cpustate->pc = segmented_addr(POPL(cpustate, SP)); break; |
| 5259 | | case 3: if (CC3) cpustate->pc = segmented_addr(POPL(cpustate, SP)); break; |
| 5260 | | case 4: if (CC4) cpustate->pc = segmented_addr(POPL(cpustate, SP)); break; |
| 5261 | | case 5: if (CC5) cpustate->pc = segmented_addr(POPL(cpustate, SP)); break; |
| 5262 | | case 6: if (CC6) cpustate->pc = segmented_addr(POPL(cpustate, SP)); break; |
| 5263 | | case 7: if (CC7) cpustate->pc = segmented_addr(POPL(cpustate, SP)); break; |
| 5264 | | case 8: if (CC8) cpustate->pc = segmented_addr(POPL(cpustate, SP)); break; |
| 5265 | | case 9: if (CC9) cpustate->pc = segmented_addr(POPL(cpustate, SP)); break; |
| 5266 | | case 10: if (CCA) cpustate->pc = segmented_addr(POPL(cpustate, SP)); break; |
| 5267 | | case 11: if (CCB) cpustate->pc = segmented_addr(POPL(cpustate, SP)); break; |
| 5268 | | case 12: if (CCC) cpustate->pc = segmented_addr(POPL(cpustate, SP)); break; |
| 5269 | | case 13: if (CCD) cpustate->pc = segmented_addr(POPL(cpustate, SP)); break; |
| 5270 | | case 14: if (CCE) cpustate->pc = segmented_addr(POPL(cpustate, SP)); break; |
| 5271 | | case 15: if (CCF) cpustate->pc = segmented_addr(POPL(cpustate, SP)); break; |
| 5267 | case 0: if (CC0) set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); break; |
| 5268 | case 1: if (CC1) set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); break; |
| 5269 | case 2: if (CC2) set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); break; |
| 5270 | case 3: if (CC3) set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); break; |
| 5271 | case 4: if (CC4) set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); break; |
| 5272 | case 5: if (CC5) set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); break; |
| 5273 | case 6: if (CC6) set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); break; |
| 5274 | case 7: if (CC7) set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); break; |
| 5275 | case 8: if (CC8) set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); break; |
| 5276 | case 9: if (CC9) set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); break; |
| 5277 | case 10: if (CCA) set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); break; |
| 5278 | case 11: if (CCB) set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); break; |
| 5279 | case 12: if (CCC) set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); break; |
| 5280 | case 13: if (CCD) set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); break; |
| 5281 | case 14: if (CCE) set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); break; |
| 5282 | case 15: if (CCF) set_pc(cpustate, segmented_addr(POPL(cpustate, SP))); break; |
| 5272 | 5283 | } |
| 5273 | 5284 | else |
| 5274 | 5285 | switch (cc) { |
| 5275 | | case 0: if (CC0) cpustate->pc = POPW(cpustate, SP); break; |
| 5276 | | case 1: if (CC1) cpustate->pc = POPW(cpustate, SP); break; |
| 5277 | | case 2: if (CC2) cpustate->pc = POPW(cpustate, SP); break; |
| 5278 | | case 3: if (CC3) cpustate->pc = POPW(cpustate, SP); break; |
| 5279 | | case 4: if (CC4) cpustate->pc = POPW(cpustate, SP); break; |
| 5280 | | case 5: if (CC5) cpustate->pc = POPW(cpustate, SP); break; |
| 5281 | | case 6: if (CC6) cpustate->pc = POPW(cpustate, SP); break; |
| 5282 | | case 7: if (CC7) cpustate->pc = POPW(cpustate, SP); break; |
| 5283 | | case 8: if (CC8) cpustate->pc = POPW(cpustate, SP); break; |
| 5284 | | case 9: if (CC9) cpustate->pc = POPW(cpustate, SP); break; |
| 5285 | | case 10: if (CCA) cpustate->pc = POPW(cpustate, SP); break; |
| 5286 | | case 11: if (CCB) cpustate->pc = POPW(cpustate, SP); break; |
| 5287 | | case 12: if (CCC) cpustate->pc = POPW(cpustate, SP); break; |
| 5288 | | case 13: if (CCD) cpustate->pc = POPW(cpustate, SP); break; |
| 5289 | | case 14: if (CCE) cpustate->pc = POPW(cpustate, SP); break; |
| 5290 | | case 15: if (CCF) cpustate->pc = POPW(cpustate, SP); break; |
| 5286 | case 0: if (CC0) set_pc(cpustate, POPW(cpustate, SP)); break; |
| 5287 | case 1: if (CC1) set_pc(cpustate, POPW(cpustate, SP)); break; |
| 5288 | case 2: if (CC2) set_pc(cpustate, POPW(cpustate, SP)); break; |
| 5289 | case 3: if (CC3) set_pc(cpustate, POPW(cpustate, SP)); break; |
| 5290 | case 4: if (CC4) set_pc(cpustate, POPW(cpustate, SP)); break; |
| 5291 | case 5: if (CC5) set_pc(cpustate, POPW(cpustate, SP)); break; |
| 5292 | case 6: if (CC6) set_pc(cpustate, POPW(cpustate, SP)); break; |
| 5293 | case 7: if (CC7) set_pc(cpustate, POPW(cpustate, SP)); break; |
| 5294 | case 8: if (CC8) set_pc(cpustate, POPW(cpustate, SP)); break; |
| 5295 | case 9: if (CC9) set_pc(cpustate, POPW(cpustate, SP)); break; |
| 5296 | case 10: if (CCA) set_pc(cpustate, POPW(cpustate, SP)); break; |
| 5297 | case 11: if (CCB) set_pc(cpustate, POPW(cpustate, SP)); break; |
| 5298 | case 12: if (CCC) set_pc(cpustate, POPW(cpustate, SP)); break; |
| 5299 | case 13: if (CCD) set_pc(cpustate, POPW(cpustate, SP)); break; |
| 5300 | case 14: if (CCE) set_pc(cpustate, POPW(cpustate, SP)); break; |
| 5301 | case 15: if (CCF) set_pc(cpustate, POPW(cpustate, SP)); break; |
| 5291 | 5302 | } |
| 5292 | 5303 | } |
| 5293 | 5304 | |
| r19440 | r19441 | |
| 5877 | 5888 | GET_DST(OP0,NIB2); |
| 5878 | 5889 | GET_SRC(OP1,NIB2); |
| 5879 | 5890 | GET_CNT(OP1,NIB1); |
| 5880 | | UINT8 xlt = RDMEM_B(cpustate, addr_from_reg(cpustate, src) + RDMEM_B(cpustate, addr_from_reg(cpustate, dst))); |
| 5891 | UINT8 xlt = RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src) + RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst))); |
| 5881 | 5892 | cpustate->RB(1) = xlt; /* load RH1 */ |
| 5882 | 5893 | if (xlt) CLR_Z; else SET_Z; |
| 5883 | 5894 | add_to_addr_reg(cpustate, dst, 1); |
| r19440 | r19441 | |
| 5893 | 5904 | GET_DST(OP0,NIB2); |
| 5894 | 5905 | GET_SRC(OP1,NIB2); |
| 5895 | 5906 | GET_CNT(OP1,NIB1); |
| 5896 | | UINT8 xlt = RDMEM_B(cpustate, addr_from_reg(cpustate, src) + RDMEM_B(cpustate, addr_from_reg(cpustate, dst))); |
| 5907 | UINT8 xlt = RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src) + RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst))); |
| 5897 | 5908 | cpustate->RB(1) = xlt; /* load RH1 */ |
| 5898 | 5909 | if (xlt) CLR_Z; else SET_Z; |
| 5899 | 5910 | add_to_addr_reg(cpustate, dst, 1); |
| r19440 | r19441 | |
| 5914 | 5925 | GET_DST(OP0,NIB2); |
| 5915 | 5926 | GET_SRC(OP1,NIB2); |
| 5916 | 5927 | GET_CNT(OP1,NIB1); |
| 5917 | | UINT8 xlt = RDMEM_B(cpustate, addr_from_reg(cpustate, src) + RDMEM_B(cpustate, addr_from_reg(cpustate, dst))); |
| 5928 | UINT8 xlt = RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src) + RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst))); |
| 5918 | 5929 | cpustate->RB(1) = xlt; /* load RH1 */ |
| 5919 | 5930 | if (xlt) CLR_Z; else SET_Z; |
| 5920 | 5931 | sub_from_addr_reg(cpustate, dst, 1); |
| r19440 | r19441 | |
| 5930 | 5941 | GET_DST(OP0,NIB2); |
| 5931 | 5942 | GET_SRC(OP1,NIB2); |
| 5932 | 5943 | GET_CNT(OP1,NIB1); |
| 5933 | | UINT8 xlt = RDMEM_B(cpustate, addr_from_reg(cpustate, src) + RDMEM_B(cpustate, addr_from_reg(cpustate, dst))); |
| 5944 | UINT8 xlt = RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src) + RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst))); |
| 5934 | 5945 | cpustate->RB(1) = xlt; /* load RH1 */ |
| 5935 | 5946 | if (xlt) CLR_Z; else SET_Z; |
| 5936 | 5947 | sub_from_addr_reg(cpustate, dst, 1); |
| r19440 | r19441 | |
| 5951 | 5962 | GET_DST(OP0,NIB2); |
| 5952 | 5963 | GET_SRC(OP1,NIB2); |
| 5953 | 5964 | GET_CNT(OP1,NIB1); |
| 5954 | | UINT8 xlt = RDMEM_B(cpustate, addr_from_reg(cpustate, src) + RDMEM_B(cpustate, addr_from_reg(cpustate, dst))); |
| 5955 | | WRMEM_B(cpustate, addr_from_reg(cpustate, dst), xlt); |
| 5965 | UINT8 xlt = RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src) + RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst))); |
| 5966 | WRMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst), xlt); |
| 5956 | 5967 | cpustate->RB(1) = xlt; /* destroy RH1 */ |
| 5957 | 5968 | add_to_addr_reg(cpustate, dst, 1); |
| 5958 | 5969 | if (--cpustate->RW(cnt)) CLR_V; else SET_V; |
| r19440 | r19441 | |
| 5967 | 5978 | GET_DST(OP0,NIB2); |
| 5968 | 5979 | GET_SRC(OP1,NIB2); |
| 5969 | 5980 | GET_CNT(OP1,NIB1); |
| 5970 | | UINT8 xlt = RDMEM_B(cpustate, addr_from_reg(cpustate, src) + RDMEM_B(cpustate, addr_from_reg(cpustate, dst))); |
| 5971 | | WRMEM_B(cpustate, addr_from_reg(cpustate, dst), xlt); |
| 5981 | UINT8 xlt = RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src) + RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst))); |
| 5982 | WRMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst), xlt); |
| 5972 | 5983 | cpustate->RB(1) = xlt; /* destroy RH1 */ |
| 5973 | 5984 | add_to_addr_reg(cpustate, dst, 1); |
| 5974 | 5985 | if (--cpustate->RW(cnt)) { CLR_V; cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 5983 | 5994 | GET_DST(OP0,NIB2); |
| 5984 | 5995 | GET_SRC(OP1,NIB2); |
| 5985 | 5996 | GET_CNT(OP1,NIB1); |
| 5986 | | UINT8 xlt = RDMEM_B(cpustate, addr_from_reg(cpustate, src) + RDMEM_B(cpustate, addr_from_reg(cpustate, dst))); |
| 5987 | | WRMEM_B(cpustate, addr_from_reg(cpustate, dst), xlt); |
| 5997 | UINT8 xlt = RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src) + RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst))); |
| 5998 | WRMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst), xlt); |
| 5988 | 5999 | cpustate->RB(1) = xlt; /* destroy RH1 */ |
| 5989 | 6000 | sub_from_addr_reg(cpustate, dst, 1); |
| 5990 | 6001 | if (--cpustate->RW(cnt)) CLR_V; else SET_V; |
| r19440 | r19441 | |
| 5999 | 6010 | GET_DST(OP0,NIB2); |
| 6000 | 6011 | GET_SRC(OP1,NIB2); |
| 6001 | 6012 | GET_CNT(OP1,NIB1); |
| 6002 | | UINT8 xlt = RDMEM_B(cpustate, addr_from_reg(cpustate, src) + RDMEM_B(cpustate, addr_from_reg(cpustate, dst))); |
| 6003 | | WRMEM_B(cpustate, addr_from_reg(cpustate, dst), xlt); |
| 6013 | UINT8 xlt = RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src) + RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst))); |
| 6014 | WRMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst), xlt); |
| 6004 | 6015 | cpustate->RB(1) = xlt; /* destroy RH1 */ |
| 6005 | 6016 | sub_from_addr_reg(cpustate, dst, 1); |
| 6006 | 6017 | if (--cpustate->RW(cnt)) { CLR_V; cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 6031 | 6042 | GET_CCC(OP1,NIB3); |
| 6032 | 6043 | GET_DST(OP1,NIB2); |
| 6033 | 6044 | GET_CNT(OP1,NIB1); |
| 6034 | | CPB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); |
| 6045 | CPB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6035 | 6046 | switch (cc) { |
| 6036 | 6047 | case 0: if (CC0) SET_Z; else CLR_Z; break; |
| 6037 | 6048 | case 1: if (CC1) SET_Z; else CLR_Z; break; |
| r19440 | r19441 | |
| 6065 | 6076 | GET_CNT(OP1,NIB1); |
| 6066 | 6077 | GET_DST(OP1,NIB2); |
| 6067 | 6078 | GET_CCC(OP1,NIB3); /* repeat? */ |
| 6068 | | WRMEM_B(cpustate, addr_from_reg(cpustate, dst), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); |
| 6079 | WRMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6069 | 6080 | add_to_addr_reg(cpustate, src, 1); |
| 6070 | 6081 | add_to_addr_reg(cpustate, dst, 1); |
| 6071 | 6082 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 6081 | 6092 | GET_CCC(OP1,NIB3); |
| 6082 | 6093 | GET_DST(OP1,NIB2); |
| 6083 | 6094 | GET_CNT(OP1,NIB1); |
| 6084 | | CPB(cpustate, RDMEM_B(cpustate, addr_from_reg(cpustate, dst)), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); |
| 6095 | CPB(cpustate, RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst)), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6085 | 6096 | switch (cc) { |
| 6086 | 6097 | case 0: if (CC0) SET_Z; else CLR_Z; break; |
| 6087 | 6098 | case 1: if (CC1) SET_Z; else CLR_Z; break; |
| r19440 | r19441 | |
| 6115 | 6126 | GET_CCC(OP1,NIB3); |
| 6116 | 6127 | GET_DST(OP1,NIB2); |
| 6117 | 6128 | GET_CNT(OP1,NIB1); |
| 6118 | | CPB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); |
| 6129 | CPB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6119 | 6130 | switch (cc) { |
| 6120 | 6131 | case 0: if (CC0) SET_Z; else CLR_Z; break; |
| 6121 | 6132 | case 1: if (CC1) SET_Z; else CLR_Z; break; |
| r19440 | r19441 | |
| 6148 | 6159 | GET_CCC(OP1,NIB3); |
| 6149 | 6160 | GET_DST(OP1,NIB2); |
| 6150 | 6161 | GET_CNT(OP1,NIB1); |
| 6151 | | CPB(cpustate, RDMEM_B(cpustate, addr_from_reg(cpustate, dst)), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); |
| 6162 | CPB(cpustate, RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst)), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6152 | 6163 | switch (cc) { |
| 6153 | 6164 | case 0: if (CC0) SET_Z; else CLR_Z; break; |
| 6154 | 6165 | case 1: if (CC1) SET_Z; else CLR_Z; break; |
| r19440 | r19441 | |
| 6182 | 6193 | GET_CCC(OP1,NIB3); |
| 6183 | 6194 | GET_DST(OP1,NIB2); |
| 6184 | 6195 | GET_CNT(OP1,NIB1); |
| 6185 | | CPB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); |
| 6196 | CPB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6186 | 6197 | switch (cc) { |
| 6187 | 6198 | case 0: if (CC0) SET_Z; else CLR_Z; break; |
| 6188 | 6199 | case 1: if (CC1) SET_Z; else CLR_Z; break; |
| r19440 | r19441 | |
| 6216 | 6227 | GET_CNT(OP1,NIB1); |
| 6217 | 6228 | GET_DST(OP1,NIB2); |
| 6218 | 6229 | GET_CCC(OP1,NIB3); |
| 6219 | | WRMEM_B(cpustate, addr_from_reg(cpustate, dst), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); |
| 6230 | WRMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6220 | 6231 | sub_from_addr_reg(cpustate, src, 1); |
| 6221 | 6232 | sub_from_addr_reg(cpustate, dst, 1); |
| 6222 | 6233 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 6232 | 6243 | GET_CCC(OP1,NIB3); |
| 6233 | 6244 | GET_DST(OP1,NIB2); |
| 6234 | 6245 | GET_CNT(OP1,NIB1); |
| 6235 | | CPB(cpustate, RDMEM_B(cpustate, addr_from_reg(cpustate, dst)), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); |
| 6246 | CPB(cpustate, RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst)), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6236 | 6247 | switch (cc) { |
| 6237 | 6248 | case 0: if (CC0) SET_Z; else CLR_Z; break; |
| 6238 | 6249 | case 1: if (CC1) SET_Z; else CLR_Z; break; |
| r19440 | r19441 | |
| 6266 | 6277 | GET_CCC(OP1,NIB3); |
| 6267 | 6278 | GET_DST(OP1,NIB2); |
| 6268 | 6279 | GET_CNT(OP1,NIB1); |
| 6269 | | CPB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); |
| 6280 | CPB(cpustate, cpustate->RB(dst), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6270 | 6281 | switch (cc) { |
| 6271 | 6282 | case 0: if (CC0) SET_Z; else CLR_Z; break; |
| 6272 | 6283 | case 1: if (CC1) SET_Z; else CLR_Z; break; |
| r19440 | r19441 | |
| 6299 | 6310 | GET_CCC(OP1,NIB3); |
| 6300 | 6311 | GET_DST(OP1,NIB2); |
| 6301 | 6312 | GET_CNT(OP1,NIB1); |
| 6302 | | CPB(cpustate, RDMEM_B(cpustate, addr_from_reg(cpustate, dst)), RDMEM_B(cpustate, addr_from_reg(cpustate, src))); |
| 6313 | CPB(cpustate, RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, dst)), RDMEM_B(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6303 | 6314 | switch (cc) { |
| 6304 | 6315 | case 0: if (CC0) SET_Z; else CLR_Z; break; |
| 6305 | 6316 | case 1: if (CC1) SET_Z; else CLR_Z; break; |
| r19440 | r19441 | |
| 6333 | 6344 | GET_CCC(OP1,NIB3); |
| 6334 | 6345 | GET_DST(OP1,NIB2); |
| 6335 | 6346 | GET_CNT(OP1,NIB1); |
| 6336 | | CPW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 6347 | CPW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6337 | 6348 | switch (cc) { |
| 6338 | 6349 | case 0: if (CC0) SET_Z; else CLR_Z; break; |
| 6339 | 6350 | case 1: if (CC1) SET_Z; else CLR_Z; break; |
| r19440 | r19441 | |
| 6367 | 6378 | GET_CNT(OP1,NIB1); |
| 6368 | 6379 | GET_DST(OP1,NIB2); |
| 6369 | 6380 | GET_CCC(OP1,NIB3); |
| 6370 | | WRMEM_W(cpustate, addr_from_reg(cpustate, dst), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 6381 | WRMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, dst), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6371 | 6382 | add_to_addr_reg(cpustate, src, 2); |
| 6372 | 6383 | add_to_addr_reg(cpustate, dst, 2); |
| 6373 | 6384 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 6383 | 6394 | GET_CCC(OP1,NIB3); |
| 6384 | 6395 | GET_DST(OP1,NIB2); |
| 6385 | 6396 | GET_CNT(OP1,NIB1); |
| 6386 | | CPW(cpustate, RDMEM_W(cpustate, addr_from_reg(cpustate, dst)), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 6397 | CPW(cpustate, RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, dst)), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6387 | 6398 | switch (cc) { |
| 6388 | 6399 | case 0: if (CC0) SET_Z; else CLR_Z; break; |
| 6389 | 6400 | case 1: if (CC1) SET_Z; else CLR_Z; break; |
| r19440 | r19441 | |
| 6417 | 6428 | GET_CCC(OP1,NIB3); |
| 6418 | 6429 | GET_DST(OP1,NIB2); |
| 6419 | 6430 | GET_CNT(OP1,NIB1); |
| 6420 | | CPW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 6431 | CPW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6421 | 6432 | switch (cc) { |
| 6422 | 6433 | case 0: if (CC0) SET_Z; else CLR_Z; break; |
| 6423 | 6434 | case 1: if (CC1) SET_Z; else CLR_Z; break; |
| r19440 | r19441 | |
| 6450 | 6461 | GET_CCC(OP1,NIB3); |
| 6451 | 6462 | GET_DST(OP1,NIB2); |
| 6452 | 6463 | GET_CNT(OP1,NIB1); |
| 6453 | | CPW(cpustate, RDMEM_W(cpustate, addr_from_reg(cpustate, dst)), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 6464 | CPW(cpustate, RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, dst)), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6454 | 6465 | switch (cc) { |
| 6455 | 6466 | case 0: if (CC0) SET_Z; else CLR_Z; break; |
| 6456 | 6467 | case 1: if (CC1) SET_Z; else CLR_Z; break; |
| r19440 | r19441 | |
| 6484 | 6495 | GET_CCC(OP1,NIB3); |
| 6485 | 6496 | GET_DST(OP1,NIB2); |
| 6486 | 6497 | GET_CNT(OP1,NIB1); |
| 6487 | | CPW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 6498 | CPW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6488 | 6499 | switch (cc) { |
| 6489 | 6500 | case 0: if (CC0) SET_Z; else CLR_Z; break; |
| 6490 | 6501 | case 1: if (CC1) SET_Z; else CLR_Z; break; |
| r19440 | r19441 | |
| 6518 | 6529 | GET_CNT(OP1,NIB1); |
| 6519 | 6530 | GET_DST(OP1,NIB2); |
| 6520 | 6531 | GET_CCC(OP1,NIB3); |
| 6521 | | WRMEM_W(cpustate, addr_from_reg(cpustate, dst), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 6532 | WRMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, dst), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6522 | 6533 | sub_from_addr_reg(cpustate, src, 2); |
| 6523 | 6534 | sub_from_addr_reg(cpustate, dst, 2); |
| 6524 | 6535 | if (--cpustate->RW(cnt)) { CLR_V; if (cc == 0) cpustate->pc -= 4; } else SET_V; |
| r19440 | r19441 | |
| 6534 | 6545 | GET_CCC(OP1,NIB3); |
| 6535 | 6546 | GET_DST(OP1,NIB2); |
| 6536 | 6547 | GET_CNT(OP1,NIB1); |
| 6537 | | CPW(cpustate, RDMEM_W(cpustate, addr_from_reg(cpustate, dst)), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 6548 | CPW(cpustate, RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, dst)), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6538 | 6549 | switch (cc) { |
| 6539 | 6550 | case 0: if (CC0) SET_Z; else CLR_Z; break; |
| 6540 | 6551 | case 1: if (CC1) SET_Z; else CLR_Z; break; |
| r19440 | r19441 | |
| 6568 | 6579 | GET_CCC(OP1,NIB3); |
| 6569 | 6580 | GET_DST(OP1,NIB2); |
| 6570 | 6581 | GET_CNT(OP1,NIB1); |
| 6571 | | CPW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 6582 | CPW(cpustate, cpustate->RW(dst), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6572 | 6583 | switch (cc) { |
| 6573 | 6584 | case 0: if (CC0) SET_Z; else CLR_Z; break; |
| 6574 | 6585 | case 1: if (CC1) SET_Z; else CLR_Z; break; |
| r19440 | r19441 | |
| 6601 | 6612 | GET_CCC(OP1,NIB3); |
| 6602 | 6613 | GET_DST(OP1,NIB2); |
| 6603 | 6614 | GET_CNT(OP1,NIB1); |
| 6604 | | CPW(cpustate, RDMEM_W(cpustate, addr_from_reg(cpustate, dst)), RDMEM_W(cpustate, addr_from_reg(cpustate, src))); |
| 6615 | CPW(cpustate, RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, dst)), RDMEM_W(cpustate, AS_DATA, addr_from_reg(cpustate, src))); |
| 6605 | 6616 | switch (cc) { |
| 6606 | 6617 | case 0: if (CC0) SET_Z; else CLR_Z; break; |
| 6607 | 6618 | case 1: if (CC1) SET_Z; else CLR_Z; break; |
| r19440 | r19441 | |
| 6702 | 6713 | else |
| 6703 | 6714 | PUSHW(cpustate, SP, cpustate->pc); |
| 6704 | 6715 | dsp12 = (dsp12 & 2048) ? 4096 - 2 * (dsp12 & 2047) : -2 * (dsp12 & 2047); |
| 6705 | | cpustate->pc = addr_add(cpustate, cpustate->pc, dsp12); |
| 6716 | set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp12)); |
| 6706 | 6717 | } |
| 6707 | 6718 | |
| 6708 | 6719 | /****************************************** |
| r19440 | r19441 | |
| 6714 | 6725 | GET_DSP8; |
| 6715 | 6726 | GET_CCC(OP0,NIB1); |
| 6716 | 6727 | switch (cc) { |
| 6717 | | case 0: if (CC0) cpustate->pc = addr_add(cpustate, cpustate->pc, dsp8 * 2); break; |
| 6718 | | case 1: if (CC1) cpustate->pc = addr_add(cpustate, cpustate->pc, dsp8 * 2); break; |
| 6719 | | case 2: if (CC2) cpustate->pc = addr_add(cpustate, cpustate->pc, dsp8 * 2); break; |
| 6720 | | case 3: if (CC3) cpustate->pc = addr_add(cpustate, cpustate->pc, dsp8 * 2); break; |
| 6721 | | case 4: if (CC4) cpustate->pc = addr_add(cpustate, cpustate->pc, dsp8 * 2); break; |
| 6722 | | case 5: if (CC5) cpustate->pc = addr_add(cpustate, cpustate->pc, dsp8 * 2); break; |
| 6723 | | case 6: if (CC6) cpustate->pc = addr_add(cpustate, cpustate->pc, dsp8 * 2); break; |
| 6724 | | case 7: if (CC7) cpustate->pc = addr_add(cpustate, cpustate->pc, dsp8 * 2); break; |
| 6725 | | case 8: if (CC8) cpustate->pc = addr_add(cpustate, cpustate->pc, dsp8 * 2); break; |
| 6726 | | case 9: if (CC9) cpustate->pc = addr_add(cpustate, cpustate->pc, dsp8 * 2); break; |
| 6727 | | case 10: if (CCA) cpustate->pc = addr_add(cpustate, cpustate->pc, dsp8 * 2); break; |
| 6728 | | case 11: if (CCB) cpustate->pc = addr_add(cpustate, cpustate->pc, dsp8 * 2); break; |
| 6729 | | case 12: if (CCC) cpustate->pc = addr_add(cpustate, cpustate->pc, dsp8 * 2); break; |
| 6730 | | case 13: if (CCD) cpustate->pc = addr_add(cpustate, cpustate->pc, dsp8 * 2); break; |
| 6731 | | case 14: if (CCE) cpustate->pc = addr_add(cpustate, cpustate->pc, dsp8 * 2); break; |
| 6732 | | case 15: if (CCF) cpustate->pc = addr_add(cpustate, cpustate->pc, dsp8 * 2); break; |
| 6728 | case 0: if (CC0) set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp8 * 2)); break; |
| 6729 | case 1: if (CC1) set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp8 * 2)); break; |
| 6730 | case 2: if (CC2) set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp8 * 2)); break; |
| 6731 | case 3: if (CC3) set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp8 * 2)); break; |
| 6732 | case 4: if (CC4) set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp8 * 2)); break; |
| 6733 | case 5: if (CC5) set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp8 * 2)); break; |
| 6734 | case 6: if (CC6) set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp8 * 2)); break; |
| 6735 | case 7: if (CC7) set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp8 * 2)); break; |
| 6736 | case 8: if (CC8) set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp8 * 2)); break; |
| 6737 | case 9: if (CC9) set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp8 * 2)); break; |
| 6738 | case 10: if (CCA) set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp8 * 2)); break; |
| 6739 | case 11: if (CCB) set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp8 * 2)); break; |
| 6740 | case 12: if (CCC) set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp8 * 2)); break; |
| 6741 | case 13: if (CCD) set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp8 * 2)); break; |
| 6742 | case 14: if (CCE) set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp8 * 2)); break; |
| 6743 | case 15: if (CCF) set_pc(cpustate, addr_add(cpustate, cpustate->pc, dsp8 * 2)); break; |
| 6733 | 6744 | } |
| 6734 | 6745 | } |
| 6735 | 6746 | |
| r19440 | r19441 | |
| 6743 | 6754 | GET_DSP7; |
| 6744 | 6755 | cpustate->RB(dst) -= 1; |
| 6745 | 6756 | if (cpustate->RB(dst)) { |
| 6746 | | cpustate->pc = addr_sub(cpustate, cpustate->pc, 2 * dsp7); |
| 6757 | set_pc(cpustate, addr_sub(cpustate, cpustate->pc, 2 * dsp7)); |
| 6747 | 6758 | } |
| 6748 | 6759 | } |
| 6749 | 6760 | |
| r19440 | r19441 | |
| 6757 | 6768 | GET_DSP7; |
| 6758 | 6769 | cpustate->RW(dst) -= 1; |
| 6759 | 6770 | if (cpustate->RW(dst)) { |
| 6760 | | cpustate->pc = addr_sub(cpustate, cpustate->pc, 2 * dsp7); |
| 6771 | set_pc(cpustate, addr_sub(cpustate, cpustate->pc, 2 * dsp7)); |
| 6761 | 6772 | } |
| 6762 | 6773 | } |