trunk/src/emu/cpu/arcompact/arcompact.h
| r242548 | r242549 | |
| 151 | 151 | ARCOMPACT_RETTYPE arcompact_handle04_02(OPS_32); |
| 152 | 152 | ARCOMPACT_RETTYPE arcompact_handle04_03(OPS_32); |
| 153 | 153 | // ARCOMPACT_RETTYPE arcompact_handle04_04(OPS_32); |
| 154 | | ARCOMPACT_RETTYPE arcompact_handle04_05(OPS_32); |
| 154 | // ARCOMPACT_RETTYPE arcompact_handle04_05(OPS_32); |
| 155 | 155 | // ARCOMPACT_RETTYPE arcompact_handle04_06(OPS_32); |
| 156 | 156 | // ARCOMPACT_RETTYPE arcompact_handle04_07(OPS_32); |
| 157 | 157 | ARCOMPACT_RETTYPE arcompact_handle04_08(OPS_32); |
| r242548 | r242549 | |
| 168 | 168 | ARCOMPACT_RETTYPE arcompact_handle04_13(OPS_32); |
| 169 | 169 | ARCOMPACT_RETTYPE arcompact_handle04_14(OPS_32); |
| 170 | 170 | ARCOMPACT_RETTYPE arcompact_handle04_15(OPS_32); |
| 171 | | ARCOMPACT_RETTYPE arcompact_handle04_16(OPS_32); |
| 171 | // ARCOMPACT_RETTYPE arcompact_handle04_16(OPS_32); |
| 172 | 172 | ARCOMPACT_RETTYPE arcompact_handle04_17(OPS_32); |
| 173 | 173 | ARCOMPACT_RETTYPE arcompact_handle04_18(OPS_32); |
| 174 | 174 | ARCOMPACT_RETTYPE arcompact_handle04_19(OPS_32); |
| r242548 | r242549 | |
| 192 | 192 | ARCOMPACT_RETTYPE arcompact_handle04_2f_05(OPS_32); |
| 193 | 193 | ARCOMPACT_RETTYPE arcompact_handle04_2f_06(OPS_32); |
| 194 | 194 | ARCOMPACT_RETTYPE arcompact_handle04_2f_07(OPS_32); |
| 195 | | ARCOMPACT_RETTYPE arcompact_handle04_2f_08(OPS_32); |
| 195 | // ARCOMPACT_RETTYPE arcompact_handle04_2f_08(OPS_32); |
| 196 | 196 | ARCOMPACT_RETTYPE arcompact_handle04_2f_09(OPS_32); |
| 197 | 197 | ARCOMPACT_RETTYPE arcompact_handle04_2f_0a(OPS_32); |
| 198 | 198 | ARCOMPACT_RETTYPE arcompact_handle04_2f_0b(OPS_32); |
| r242548 | r242549 | |
| 210 | 210 | ARCOMPACT_RETTYPE arcompact_handle04_35(OPS_32); |
| 211 | 211 | ARCOMPACT_RETTYPE arcompact_handle04_36(OPS_32); |
| 212 | 212 | ARCOMPACT_RETTYPE arcompact_handle04_37(OPS_32); |
| 213 | | ARCOMPACT_RETTYPE arcompact_handle05_00(OPS_32); |
| 214 | | ARCOMPACT_RETTYPE arcompact_handle05_01(OPS_32); |
| 213 | //ARCOMPACT_RETTYPE arcompact_handle05_00(OPS_32); |
| 214 | //ARCOMPACT_RETTYPE arcompact_handle05_01(OPS_32); |
| 215 | 215 | ARCOMPACT_RETTYPE arcompact_handle05_02(OPS_32); |
| 216 | 216 | ARCOMPACT_RETTYPE arcompact_handle05_03(OPS_32); |
| 217 | 217 | ARCOMPACT_RETTYPE arcompact_handle05_04(OPS_32); |
| r242548 | r242549 | |
| 768 | 768 | |
| 769 | 769 | ARCOMPACT_HANDLER04_TYPE_PM(04_00); |
| 770 | 770 | ARCOMPACT_HANDLER04_TYPE_PM(04_04); |
| 771 | ARCOMPACT_HANDLER04_TYPE_PM(04_05); |
| 771 | 772 | ARCOMPACT_HANDLER04_TYPE_PM(04_06); |
| 772 | 773 | ARCOMPACT_HANDLER04_TYPE_PM(04_07); |
| 773 | 774 | ARCOMPACT_HANDLER04_TYPE_PM(04_0a); |
| 774 | 775 | ARCOMPACT_HANDLER04_TYPE_PM(04_0f); |
| 776 | ARCOMPACT_HANDLER04_TYPE_PM(04_16); |
| 775 | 777 | ARCOMPACT_HANDLER04_TYPE_PM(04_20); |
| 776 | 778 | |
| 779 | ARCOMPACT_HANDLER04_TYPE_PM(04_2f_08); |
| 780 | |
| 781 | ARCOMPACT_HANDLER04_TYPE_PM(05_00); |
| 782 | ARCOMPACT_HANDLER04_TYPE_PM(05_01); |
| 783 | |
| 784 | |
| 777 | 785 | private: |
| 778 | 786 | address_space_config m_program_config; |
| 779 | 787 | |
trunk/src/emu/cpu/arcompact/arcompact_execute.c
| r242548 | r242549 | |
| 1109 | 1109 | { |
| 1110 | 1110 | int size = 4; |
| 1111 | 1111 | // Branch Unconditionally Far |
| 1112 | | arcompact_log("unimplemented B %08x", op); |
| 1112 | INT32 address = (op & 0x07fe0000) >> 17; |
| 1113 | address |= ((op & 0x0000ffc0) >> 6) << 10; |
| 1114 | address |= ((op & 0x0000000f) >> 0) << 20; |
| 1115 | if (address & 0x800000) address = -0x800000 + (address & 0x7fffff); |
| 1116 | int n = (op & 0x00000020) >> 5; op &= ~0x00000020; |
| 1117 | // int res = (op & 0x00000010) >> 4; op &= ~0x00000010; // should be set to 0 |
| 1118 | |
| 1119 | UINT32 realaddress = PC_ALIGNED32 + (address * 2); |
| 1120 | |
| 1121 | if (n) |
| 1122 | { |
| 1123 | m_delayactive = 1; |
| 1124 | m_delayjump = realaddress; |
| 1125 | m_delaylinks = 0; // don't link |
| 1126 | } |
| 1127 | else |
| 1128 | { |
| 1129 | // m_regs[REG_BLINK] = m_pc + (size >> 0); // don't link |
| 1130 | return realaddress; |
| 1131 | } |
| 1132 | |
| 1133 | |
| 1113 | 1134 | return m_pc + (size>>0); |
| 1114 | 1135 | |
| 1115 | 1136 | } |
| r242548 | r242549 | |
| 1259 | 1280 | return m_pc + (size>>0); |
| 1260 | 1281 | } |
| 1261 | 1282 | |
| 1262 | | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_02(OPS_32) { return arcompact_01_01_00_helper( PARAMS, "BRLT"); } |
| 1283 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_02(OPS_32) // regiter - register BRLT |
| 1284 | { |
| 1285 | BR_REGREG_SETUP |
| 1286 | |
| 1287 | // BRLT (signed operation) |
| 1288 | if ((INT32)b < (INT32)c) |
| 1289 | { |
| 1290 | BR_TAKEJUMP |
| 1291 | } |
| 1292 | |
| 1293 | return m_pc + (size>>0); |
| 1294 | |
| 1295 | } |
| 1263 | 1296 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_03(OPS_32) // register - register BRGE |
| 1264 | 1297 | { |
| 1265 | 1298 | BR_REGREG_SETUP |
| r242548 | r242549 | |
| 1674 | 1707 | |
| 1675 | 1708 | } |
| 1676 | 1709 | |
| 1677 | | arcompact_log("unimplemented %s %08x", optext, op); |
| 1710 | arcompact_log("unimplemented %s %08x (04 type helper)", optext, op); |
| 1678 | 1711 | |
| 1679 | 1712 | return m_pc + (size>>0); |
| 1680 | 1713 | } |
| r242548 | r242549 | |
| 1720 | 1753 | /* todo: is the limm, limm syntax valid? (it's pointless.) */ \ |
| 1721 | 1754 | /* todo: if areg = LIMM then there is no result (but since that register can never be read, I guess it doesn't matter if we store it there anyway?) */ \ |
| 1722 | 1755 | |
| 1756 | #define SETUP_HANDLE04_0x_P01 \ |
| 1757 | int size = 4; \ |
| 1758 | UINT32 limm = 0; \ |
| 1759 | /* int got_limm = 0; */ \ |
| 1760 | \ |
| 1761 | COMMON32_GET_breg; \ |
| 1762 | COMMON32_GET_F; \ |
| 1763 | COMMON32_GET_u6; \ |
| 1764 | COMMON32_GET_areg; \ |
| 1765 | \ |
| 1766 | UINT32 b, c; \ |
| 1767 | \ |
| 1768 | /* is having b as LIMM valid here? LIMM vs. fixed u6 value makes no sense */ \ |
| 1769 | if (breg == LIMM_REG) \ |
| 1770 | { \ |
| 1771 | GET_LIMM_32; \ |
| 1772 | size = 8; \ |
| 1773 | /* got_limm = 1; */ \ |
| 1774 | b = limm; \ |
| 1775 | } \ |
| 1776 | else \ |
| 1777 | { \ |
| 1778 | b = m_regs[breg]; \ |
| 1779 | } \ |
| 1780 | \ |
| 1781 | c = u; \ |
| 1782 | \ |
| 1783 | /* todo: if areg = LIMM then there is no result (but since that register can never be read, I guess it doesn't matter if we store it there anyway?) */ \ |
| 1723 | 1784 | |
| 1724 | 1785 | |
| 1786 | |
| 1725 | 1787 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_00_p00(OPS_32) |
| 1726 | 1788 | { |
| 1727 | 1789 | SETUP_HANDLE04_0x_P00 |
| r242548 | r242549 | |
| 1738 | 1800 | |
| 1739 | 1801 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_00_p01(OPS_32) |
| 1740 | 1802 | { |
| 1741 | | int size = 4; |
| 1742 | | UINT32 limm = 0; |
| 1743 | | // int got_limm = 0; |
| 1803 | SETUP_HANDLE04_0x_P01 |
| 1744 | 1804 | |
| 1745 | | COMMON32_GET_breg; |
| 1746 | | COMMON32_GET_F; |
| 1747 | | COMMON32_GET_u6 |
| 1748 | | COMMON32_GET_areg |
| 1749 | | |
| 1750 | | UINT32 b, c; |
| 1751 | | |
| 1752 | | // is having b as LIMM valid here? LIMM vs. fixed u6 value makes no sense |
| 1753 | | if (breg == LIMM_REG) |
| 1754 | | { |
| 1755 | | GET_LIMM_32; |
| 1756 | | size = 8; |
| 1757 | | // got_limm = 1; |
| 1758 | | b = limm; |
| 1759 | | } |
| 1760 | | else |
| 1761 | | { |
| 1762 | | b = m_regs[breg]; |
| 1763 | | } |
| 1764 | | |
| 1765 | | c = u; |
| 1766 | | |
| 1767 | | // todo: if areg = LIMM then there is no result (but since that register can never be read, I guess it doesn't matter if we store it there anyway?) |
| 1768 | 1805 | m_regs[areg] = b + c; |
| 1769 | 1806 | |
| 1770 | 1807 | if (F) |
| r242548 | r242549 | |
| 1829 | 1866 | |
| 1830 | 1867 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_04_p01(OPS_32) |
| 1831 | 1868 | { |
| 1832 | | int size = 4; |
| 1833 | | UINT32 limm = 0; |
| 1834 | | // int got_limm = 0; |
| 1835 | | |
| 1836 | | COMMON32_GET_breg; |
| 1837 | | COMMON32_GET_F; |
| 1838 | | COMMON32_GET_u6 |
| 1839 | | COMMON32_GET_areg |
| 1840 | | |
| 1841 | | UINT32 b, c; |
| 1842 | | |
| 1843 | | // is having b as LIMM valid here? LIMM vs. fixed u6 value makes no sense |
| 1844 | | if (breg == LIMM_REG) |
| 1845 | | { |
| 1846 | | GET_LIMM_32; |
| 1847 | | size = 8; |
| 1848 | | // got_limm = 1; |
| 1849 | | b = limm; |
| 1850 | | } |
| 1851 | | else |
| 1852 | | { |
| 1853 | | b = m_regs[breg]; |
| 1854 | | } |
| 1855 | | |
| 1856 | | c = u; |
| 1857 | | |
| 1858 | | // todo: if areg = LIMM then there is no result (but since that register can never be read, I guess it doesn't matter if we store it there anyway?) |
| 1869 | SETUP_HANDLE04_0x_P01 |
| 1859 | 1870 | m_regs[areg] = b & c; |
| 1860 | 1871 | |
| 1861 | 1872 | if (F) |
| r242548 | r242549 | |
| 1888 | 1899 | } |
| 1889 | 1900 | |
| 1890 | 1901 | |
| 1891 | | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_05(OPS_32) |
| 1902 | // OR |
| 1903 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_05_p00(OPS_32) |
| 1892 | 1904 | { |
| 1893 | | return arcompact_handle04_helper(PARAMS, opcodes_04[0x05], /*"OR"*/ 0,0); |
| 1905 | SETUP_HANDLE04_0x_P00 |
| 1906 | |
| 1907 | m_regs[areg] = b | c; |
| 1908 | |
| 1909 | if (F) |
| 1910 | { |
| 1911 | arcompact_fatal("arcompact_handle04_05_p00 (OR) (F set)\n"); // not yet supported |
| 1912 | } |
| 1913 | |
| 1914 | return m_pc + (size >> 0); |
| 1894 | 1915 | } |
| 1895 | 1916 | |
| 1917 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_05_p01(OPS_32) |
| 1918 | { |
| 1919 | int size = 4; |
| 1920 | arcompact_fatal("arcompact_handle04_05_p01 (OR)\n"); |
| 1921 | return m_pc + (size >> 0); |
| 1922 | } |
| 1896 | 1923 | |
| 1924 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_05_p10(OPS_32) |
| 1925 | { |
| 1926 | int size = 4; |
| 1927 | arcompact_fatal("arcompact_handle04_05_p10 (OR)\n"); |
| 1928 | return m_pc + (size >> 0); |
| 1929 | } |
| 1930 | |
| 1931 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_05_p11_m0(OPS_32) |
| 1932 | { |
| 1933 | int size = 4; |
| 1934 | arcompact_fatal("arcompact_handle04_05_p11_m0 (OR)\n"); |
| 1935 | return m_pc + (size >> 0); |
| 1936 | } |
| 1937 | |
| 1938 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_05_p11_m1(OPS_32) |
| 1939 | { |
| 1940 | int size = 4; |
| 1941 | arcompact_fatal("arcompact_handle04_05_p11_m1 (OR)\n"); |
| 1942 | return m_pc + (size >> 0); |
| 1943 | } |
| 1944 | |
| 1897 | 1945 | // Bitwise AND Operation with Inverted Source |
| 1898 | 1946 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_06_p00(OPS_32) // BIC |
| 1899 | 1947 | { |
| r242548 | r242549 | |
| 1950 | 1998 | |
| 1951 | 1999 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_07_p01(OPS_32) |
| 1952 | 2000 | { |
| 1953 | | int size = 4; |
| 1954 | | UINT32 limm = 0; |
| 1955 | | // int got_limm = 0; |
| 1956 | | |
| 1957 | | COMMON32_GET_breg; |
| 1958 | | COMMON32_GET_F; |
| 1959 | | COMMON32_GET_u6 |
| 1960 | | COMMON32_GET_areg |
| 1961 | | |
| 1962 | | UINT32 b, c; |
| 1963 | | |
| 1964 | | // is having b as LIMM valid here? LIMM vs. fixed u6 value makes no sense |
| 1965 | | if (breg == LIMM_REG) |
| 1966 | | { |
| 1967 | | GET_LIMM_32; |
| 1968 | | size = 8; |
| 1969 | | // got_limm = 1; |
| 1970 | | b = limm; |
| 1971 | | } |
| 1972 | | else |
| 1973 | | { |
| 1974 | | b = m_regs[breg]; |
| 1975 | | } |
| 1976 | | |
| 1977 | | c = u; |
| 1978 | | |
| 1979 | | // todo: if areg = LIMM then there is no result (but since that register can never be read, I guess it doesn't matter if we store it there anyway?) |
| 2001 | SETUP_HANDLE04_0x_P01 |
| 1980 | 2002 | m_regs[areg] = b ^ c; |
| 1981 | 2003 | |
| 1982 | 2004 | if (F) |
| r242548 | r242549 | |
| 2208 | 2230 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x15], /*"ADD2"*/ 0,0); |
| 2209 | 2231 | } |
| 2210 | 2232 | |
| 2211 | | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_16(OPS_32) |
| 2212 | | { |
| 2213 | | return arcompact_handle04_helper(PARAMS, opcodes_04[0x16], /*"ADD3"*/ 0,0); |
| 2233 | |
| 2234 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_16_p00(OPS_32) // ADD3 |
| 2235 | { |
| 2236 | int size = 4; |
| 2237 | arcompact_fatal("arcompact_handle04_16_p00 (ADD3)\n"); |
| 2238 | |
| 2239 | return m_pc + (size >> 0); |
| 2214 | 2240 | } |
| 2215 | 2241 | |
| 2242 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_16_p01(OPS_32) |
| 2243 | { |
| 2244 | SETUP_HANDLE04_0x_P01 |
| 2245 | |
| 2246 | m_regs[areg] = b + (c << 3); // c = u |
| 2247 | |
| 2248 | if (F) |
| 2249 | { |
| 2250 | arcompact_fatal("arcompact_handle04_16_p01 (ADD3) (F set)\n"); // not yet supported |
| 2251 | } |
| 2252 | |
| 2253 | return m_pc + (size >> 0); |
| 2254 | } |
| 2255 | |
| 2256 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_16_p10(OPS_32) |
| 2257 | { |
| 2258 | int size = 4; |
| 2259 | arcompact_fatal("arcompact_handle04_16_p10 (ADD3)\n"); |
| 2260 | return m_pc + (size >> 0); |
| 2261 | } |
| 2262 | |
| 2263 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_16_p11_m0(OPS_32) |
| 2264 | { |
| 2265 | int size = 4; |
| 2266 | arcompact_fatal("arcompact_handle04_16_p11_m0 (ADD3)\n"); |
| 2267 | return m_pc + (size >> 0); |
| 2268 | } |
| 2269 | |
| 2270 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_16_p11_m1(OPS_32) |
| 2271 | { |
| 2272 | int size = 4; |
| 2273 | arcompact_fatal("arcompact_handle04_16_p11_m1 (ADD3)\n"); |
| 2274 | return m_pc + (size >> 0); |
| 2275 | } |
| 2276 | |
| 2216 | 2277 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_17(OPS_32) |
| 2217 | 2278 | { |
| 2218 | 2279 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x17], /*"SUB1"*/ 0,0); |
| r242548 | r242549 | |
| 2557 | 2618 | } |
| 2558 | 2619 | |
| 2559 | 2620 | |
| 2621 | #define SETUP_HANDLE04_2f_0x_P00 \ |
| 2622 | int size = 4; \ |
| 2623 | UINT32 limm = 0; \ |
| 2624 | \ |
| 2625 | COMMON32_GET_breg; \ |
| 2626 | COMMON32_GET_F; \ |
| 2627 | COMMON32_GET_creg; \ |
| 2628 | \ |
| 2629 | UINT32 c; \ |
| 2630 | \ |
| 2631 | if (creg == LIMM_REG) \ |
| 2632 | { \ |
| 2633 | GET_LIMM_32; \ |
| 2634 | size = 8; \ |
| 2635 | c = limm; \ |
| 2636 | } \ |
| 2637 | else \ |
| 2638 | { \ |
| 2639 | c = m_regs[creg]; \ |
| 2640 | } \ |
| 2641 | /* todo: is the limm, limm syntax valid? (it's pointless.) */ \ |
| 2642 | /* todo: if breg = LIMM then there is no result (but since that register can never be read, I guess it doesn't matter if we store it there anyway?) */ \ |
| 2643 | |
| 2644 | |
| 2645 | |
| 2560 | 2646 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_00(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "ASL"); } // ASL |
| 2561 | 2647 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_01(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "ASR"); } // ASR |
| 2562 | 2648 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_02(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "LSR"); } // LSR |
| r242548 | r242549 | |
| 2565 | 2651 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_05(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "SEXB"); } // SEXB |
| 2566 | 2652 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_06(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "SEXW"); } // SEXW |
| 2567 | 2653 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_07(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "EXTB"); } // EXTB |
| 2568 | | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_08(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "EXTW"); } // EXTW |
| 2654 | |
| 2655 | |
| 2656 | // EXTW b <- c or EXTW b <- limm or EXTW limm <- c (no result) or EXTW limm, limm (invalid?) |
| 2657 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_08_p00(OPS_32) // note 'b' destination for 04_2f_08_xx group |
| 2658 | { |
| 2659 | SETUP_HANDLE04_2f_0x_P00; |
| 2660 | |
| 2661 | m_regs[breg] = c & 0x0000ffff; |
| 2662 | if (F) |
| 2663 | { |
| 2664 | arcompact_fatal("arcompact_handle04_2f_08_p00 (EXTW) (F set)\n"); // not yet supported |
| 2665 | } |
| 2666 | |
| 2667 | return m_pc + (size >> 0); |
| 2668 | } |
| 2669 | |
| 2670 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_08_p01(OPS_32) |
| 2671 | { |
| 2672 | int size = 4; |
| 2673 | arcompact_fatal("arcompact_handle04_2f_08_p01 (EXTW)\n"); |
| 2674 | return m_pc + (size >> 0); |
| 2675 | } |
| 2676 | |
| 2677 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_08_p10(OPS_32) |
| 2678 | { |
| 2679 | int size = 4; |
| 2680 | arcompact_fatal("illegal 04_2f_08_p10 (EXTW)\n"); // illegal mode because 'S' bits have already been used for opcode select |
| 2681 | return m_pc + (size >> 0); |
| 2682 | } |
| 2683 | |
| 2684 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_08_p11_m0(OPS_32) |
| 2685 | { |
| 2686 | int size = 4; |
| 2687 | arcompact_fatal("arcompact_handle04_2f_08_p11_m0 (EXTW)\n"); // illegal mode because 'Q' bits have already been used for opcode select |
| 2688 | return m_pc + (size >> 0); |
| 2689 | } |
| 2690 | |
| 2691 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_08_p11_m1(OPS_32) |
| 2692 | { |
| 2693 | int size = 4; |
| 2694 | arcompact_fatal("arcompact_handle04_2f_08_p11_m1 (EXTW)\n"); // illegal mode because 'Q' bits have already been used for opcode select |
| 2695 | return m_pc + (size >> 0); |
| 2696 | } |
| 2697 | |
| 2698 | |
| 2569 | 2699 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_09(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "ABS"); } // ABS |
| 2570 | 2700 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_0a(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "NOT"); } // NOT |
| 2571 | 2701 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_0b(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "RCL"); } // RLC |
| r242548 | r242549 | |
| 2637 | 2767 | |
| 2638 | 2768 | |
| 2639 | 2769 | |
| 2640 | | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_00(OPS_32) { return arcompact_handle04_helper(PARAMS, "ASL", 0,0); } |
| 2641 | | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_01(OPS_32) { return arcompact_handle04_helper(PARAMS, "LSR", 0,0); } |
| 2770 | |
| 2771 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_00_p00(OPS_32) // ASL |
| 2772 | { |
| 2773 | SETUP_HANDLE04_0x_P00 |
| 2774 | |
| 2775 | m_regs[areg] = b << (c&0x1f); // c = c |
| 2776 | |
| 2777 | if (F) |
| 2778 | { |
| 2779 | arcompact_fatal("arcompact_handle05_00_p00 (ASL) (F set)\n"); // not yet supported |
| 2780 | } |
| 2781 | |
| 2782 | return m_pc + (size >> 0); |
| 2783 | } |
| 2784 | |
| 2785 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_00_p01(OPS_32) |
| 2786 | { |
| 2787 | int size = 4; |
| 2788 | arcompact_fatal("arcompact_handle05_00_p01 (ASL)\n"); |
| 2789 | return m_pc + (size >> 0); |
| 2790 | } |
| 2791 | |
| 2792 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_00_p10(OPS_32) |
| 2793 | { |
| 2794 | int size = 4; |
| 2795 | arcompact_fatal("arcompact_handle05_00_p10 (ASL)\n"); |
| 2796 | return m_pc + (size >> 0); |
| 2797 | } |
| 2798 | |
| 2799 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_00_p11_m0(OPS_32) |
| 2800 | { |
| 2801 | int size = 4; |
| 2802 | arcompact_fatal("arcompact_handle05_00_p11_m0 (ASL)\n"); |
| 2803 | return m_pc + (size >> 0); |
| 2804 | } |
| 2805 | |
| 2806 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_00_p11_m1(OPS_32) |
| 2807 | { |
| 2808 | int size = 4; |
| 2809 | arcompact_fatal("arcompact_handle05_00_p11_m1 (ASL)\n"); |
| 2810 | return m_pc + (size >> 0); |
| 2811 | } |
| 2812 | |
| 2813 | |
| 2814 | |
| 2815 | |
| 2816 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_01_p00(OPS_32) |
| 2817 | { |
| 2818 | int size = 4; |
| 2819 | arcompact_fatal("arcompact_handle05_01_p00 (LSR)\n"); |
| 2820 | return m_pc + (size >> 0); |
| 2821 | } |
| 2822 | |
| 2823 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_01_p01(OPS_32) |
| 2824 | { |
| 2825 | SETUP_HANDLE04_0x_P01 |
| 2826 | |
| 2827 | m_regs[areg] = b >> (c&0x1f); // c = u |
| 2828 | |
| 2829 | if (F) |
| 2830 | { |
| 2831 | arcompact_fatal("arcompact_handle05_01_p01 (LSR) (F set)\n"); // not yet supported |
| 2832 | } |
| 2833 | |
| 2834 | return m_pc + (size >> 0); |
| 2835 | } |
| 2836 | |
| 2837 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_01_p10(OPS_32) |
| 2838 | { |
| 2839 | int size = 4; |
| 2840 | arcompact_fatal("arcompact_handle05_01_p10 (LSR)\n"); |
| 2841 | return m_pc + (size >> 0); |
| 2842 | } |
| 2843 | |
| 2844 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_01_p11_m0(OPS_32) |
| 2845 | { |
| 2846 | int size = 4; |
| 2847 | arcompact_fatal("arcompact_handle05_01_p11_m0 (LSR)\n"); |
| 2848 | return m_pc + (size >> 0); |
| 2849 | } |
| 2850 | |
| 2851 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_01_p11_m1(OPS_32) |
| 2852 | { |
| 2853 | int size = 4; |
| 2854 | arcompact_fatal("arcompact_handle05_01_p11_m1 (LSR)\n"); |
| 2855 | return m_pc + (size >> 0); |
| 2856 | } |
| 2857 | |
| 2858 | |
| 2642 | 2859 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_02(OPS_32) { return arcompact_handle04_helper(PARAMS, "ASR", 0,0); } |
| 2643 | 2860 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_03(OPS_32) { return arcompact_handle04_helper(PARAMS, "ROR", 0,0); } |
| 2644 | 2861 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_04(OPS_32) { return arcompact_handle04_helper(PARAMS, "MUL64", 2,0); } // special |