1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054
|
Changelog for GXemul:
---------------------
20030829 Skeleton. ELF stuff. Some instructions.
20030830 Simple test programs using +-*/^|&%, function calls,
loops, and stuff like that work.
20030903 Adding more instructions, fixing some bugs.
20030907 Making adding of memory mapped devices easier, although
the framework isn't built for speed.
Adding a -q switch to turn of debug output.
20030911 Trying to fix some bugs. Minor changes. Some COP0
registers are now meaningful.
20030919 Making APs (non-bootstrap cpus) available via a simple
'mp' device. Implementing ll/lld and sc/scd (for atomic
memory updates, needed by MP operating systems).
20030923 Minor updates: more instructions (divu, mulu, lwu,
perhaps some more), and opcode usage statistics.
20030924 If the next instruction is nullified (for 'branch
likely' type of instructions), counters for delays etc
are now decreased as they should.
Adding some comments.
Adding instructions: movz, movn.
Adding a simple mandelbrot test to mipstest.c.
20030925 Adding instructions: bltzl, bgezl, lh, lhu, sh, mfc*,
mtc*.
Adding a dummy instructions: sync, cache.
Adding minimal DECstation PROM functionality: printf()
and getsysid() callback functions.
Beginning work on address translation.
20030927 Adding some more cop0 functionality (tlb stuff).
Adding mc146818 real-time clock. (Skeleton stuff.)
20030928 Adding a dc7085 serial console device (dummy, but enough
to output chars to the screen). NetBSD uses this for
the MIPSMATE 5100.
20030929 Working on the TLB stuff.
Adding instructions: srlv, tlbwr, tlbr, tlbp, eret.
20030930 Trying to find a bug which causes NetBSD to bug out, but
it is really hard.
Adding some a.out support (for loading an old
OpenBSD 2.8/pmax kernel image).
Adding instructions: lwc*, ldc*, swc1 and swc3.
Beginning to add special code to handle the differences
between R4000 (the default emulation) and R2000/R3000.
20031001 Symbol listings produced by 'nm -S' can be used to
show symbolic names for addresses. (-S)
20031002 Fixing the i/d fake cache for R2000/R3000. It's still
just an ugly hack, though.
Fixing minor bugs to make the 3100 emulation use the
dc device (serial console) correctly. So far, 5100 and
3100 are the only ones that get far enough to print
stuff, when booting NetBSD.
20031004 Adding skeleton Cobalt machine emulation (-E).
Adding a dummy ns16550 serial controller, used by the
Cobalt machine emulation.
20031006 Adding unaligned load/store instructions (lwl, lwr,
ldl, ldr, swl, swr, sdl, sdr), although they are not
tested yet.
Fixed a "data modified on freelist" bug when running
NetBSD/cobalt: setting the top bit of the index register
when a tlbp fails (as the R4000 manual says) isn't
sufficient, I had to clear the low bits as well.
Adding break and syscall instructions, but they are not
tested yet.
Adding a 'gt' device, faking a PCI bus, for the Cobalt
emulation.
20031008 Adding initial support for HPCmips (-F), a framebuffer
device using X11. NetBSD/hpcmips can output pixels to
the framebuffer, but that's about it.
20031009 Fixing the NetBSD/pmax bug: the "0/tftp/netbsd" style
bootstring was only passed correctly in the bootinfo
block, it needs to be passed as argv[0] as well.
Adding instructions: mtlo, mthi.
Rearrangning the source tree layout.
Adding console input functionality. The NetBSD/cobalt
kernel's ddb can now be interacted with.
20031010 Adding experimental (semi-useless) -t option, to show
a function call tree while a program runs.
Linux/cobalt now prints a few messages, but then hangs
at "Calibrating delay loop..." unless an ugly hack is
used (setting a word of memory at 0x801e472c to non-zero).
20031013 Adding a framebuffer device used in DECstation 3100;
VFB01 for mono is implemented so far, not yet the
VFB02 (color) variant. Rewriting the framebuffer
device so that it is usable by both HPCmips and DECstation
emulation.
20031014 Minor fixes. Everything should compile and run ok
both with and without X11.
20031015 Adding support for ECOFF binary images; text, data,
and symbols are loaded. (Playing around with ultrixboot
and ultrix kernels.)
20031016 The DECstation argv,argc stuff must be at 0xa0000000,
not 0x80000000, or Ultrix kernels complain.
Adding R2000/R3000 'rfe' instruction.
Implementing more R2K/R3K tlb specific stuff, so that
NetBSD boots and uses the tlb correctly, but much of
it is ugly. (Needs to be separated in a cleaner way.)
ECOFF symbols sizes are now calculated, so that offsets
within symbols are usable.
20031017 DECstation bootstrings now automatically include the
correct name of the kernel that is booting.
Ultrix boots a bit.
20031018 ELF symbols are now read automatically from the binary.
-t trace looks a bit better (string arguments are shown).
Trying to get initial R5900 stuff working (the 128-bit
CPU used in Playstation 2).
Fixing a minor bug to make the VFB02 (color framebuffer)
device work better, but it is still just 256 grayscales,
not real color. Ultrix can now use the framebuffer (it
calls it PMAX-CFB).
A machine can now consist of CPUs of different types.
Adding instructions: daddi, mov_xxx, mult_xx. The xxx
instructions are not documented MIPS64 instructions,
but NetBSD/playstation2 uses them. Perhaps VR5432
instructions?
Adding sign-extension to 32-bit mult.
Adding Playstation 2 devices: dmac (DMA controller),
gs (Graphic something?), and gif (graphics something
else, which has access to the PS2's framebuffer).
NetBSD/playstation2 works a bit, and prints a few
bootup messages.
20031020 The cpu_type field of the cpu struct now contains
usable values in a much better form than before. This
simplifies adding of new CPU types.
20031021 Fixing an interrupt related bug: pc_last was used, but
for interrupts this was incorrect. Fixed now.
Fixing a load/store related bug: if a load into a
register was aborted due to an exception, the register
was still modified.
The mc146818 rtc now reads its time from the system's
time() function.
Fixing another exception bug: if loading an instruction
caused an exception, something bogus happened as the
emulator tried to execute the instruction anyway. This
has been fixed now.
20031023 Adding a quick hack which skips "while (reg --) ;"
kind of loops.
NetBSD/pmax suddenly reached userland (!), but only
once and attempts to repeat it have failed. I believe
it is problems with my interrupt handling system.
20031024 Adding 8-bit color palette support to the framebuffer.
Connecting the pmax vdac device to the framebuffer's
rgb palette.
Fixing a bug in the dc device, so that console input
is possible; interaction with NetBSD/pmax's built-in
kernel debugger works now.
Symbol sizes for file formats where symbol size isn't
included are now calculated regardless of file format.
Physical memory space can now be smaller than 64 bits,
improving emulation speed a bit.
Doing other minor performance enhancements by moving
around some statements in critical parts of the code.
20031025 Minor changes to the dc device.
20031026 Adding support for reading symbols directly from
a.out files. (Works with OpenBSD/pmax binaries.)
Hardware devices may now register "tick functions" at
specific cycle intervals in a generic fashion.
All four channels of the dc serial controller device
should now work; playing around with keyboard scan
code generation when using the DECstation framebuffer.
Making various (speed) improvements to the framebuffer
device.
20031027 Playing around with the sii SCSI controller.
20031028 Minor fixes.
Adding an SGI emulation mode (-G), and some ARCBIOS
stuff, which SGIs seem to use.
Adding getbitmap() to the DEC prom emulation layer,
so some more -D x models become more usable.
Adding a dummy 'ssc' serial console device for
DECsystem 5400 emulation.
Playing around with TURBOchannel stuff.
20031030 Minor fixes.
Adding the sub instruction. (Not tested yet?)
Sign-extending the results of multu, addi,addiu,
add,addu,sub,subu,mfcZ.
Adding a colorplanemask device for DECstation 3100.
Fixed the NetBSD/pmax bug: I had forgotten to reset
asid_match to 0 between tlb entry checks. :-) Now
userland runs nicely...
20031031 Fixing more bugs: unaligned load/store could fail
because of an exception, but registers could be "half
updated". This has been fixed now. (As a result,
NetBSD/pmax can now run with any of r2000,r3000,r4000,
r4400, or r5000.)
Adding some R5K and R10000 stuff. (Note: R5K is NOT
R5000. Weird.)
Adding dummy serial console (scc) for MAXINE.
MAXINE also works with framebuffer, but there is no
color palette yet (only black and white output).
20031101 Moving code chunks around to increase performance by
a few percent.
The opcode statistics option (-s) now shows opcode
names, and not just numbers. :-)
Fixing the bug which caused NetBSD/pmax to refuse
input in serial console mode, but not in keyboard/
framebuffer mode: the osconsole environment variable
wasn't set correctly.
Adding DEC PROM getchar() call.
The transmitter scanner of the dc device now scans
all four channels at once, for each tick, so serial
output is (approximately) 4 times faster.
20031103 Adding a dummy BT459 vdac device, which does nothing
but allows a PMAG-BA turbochannel graphics card to be
used as framebuffer.
Several DECstation machines (-D 2, 3, and 4) can now
use TURBOchannel option card framebuffers as console,
for output. (Keyboard input is still not implemented
for those models.) Only PMAG-AA (1280x1024x8) and
PMAG-BA (1024x864x8), both using BT459 vdac, have
been tested so far.
Modifying the X11 routines so that several framebuffer
windows now can be used simultaneously (if several
graphics option cards are to be emulated concurrently).
20031104 DEC MIPSMATE 5100 (KN230) interrupts are shared
between devices. I've added an ugly hack to allow
that to work, which makes it possible to boot NetBSD
into userland with serial console.
20031106 Removing the -S (symbol) option, as symbol files can
now be given in any order together with other file
names to be loaded.
cookin tipped me about using (int64_t) (int32_t)
casts instead of manually sign-extending values.
Casting sometimes increases performance, sometimes
decreases. It's tricky.
Importing mips64emul into CVS.
20031107 Adding a generic ARC emulation mode.
Increasing performance of the framebuffer by not
updating it (or the XImage) if a write to the
framebuffer contains exactly what is already in it.
(This improves scrolling speed and initialization.)
Adding initial MIPS16 support.
Adding initial disk image support (-d command line
option), but this will not be used until I get some
kind of SCSI-controller emulation working.
20031108 Adding the first MIPS16 instructions: "move y,X",
"ld y,D(x)", and "daddiu S,K" (but the last one
doesn't work yet).
Fixing the console environment variable for
Enough of the 'asc' controller is now implemented
to let NetBSD get past scsi disk detection when
no disk images are used.
DECstation machine type 2; both serial console and
graphical console work now.
Other X-windows bit-depths than 24 bits work now,
but colors are still not correct in non-24 bit modes.
Keypresses in X framebuffer windows are now
translated into console keypresses. (Normal keys, but
not cursor keys or other special keys.)
20031111 Adding support for X11 using non-24-bit output.
20031120 Adding X11 mouse event to emulated mouse event
translation, but it's not tested yet.
Trying to get more of the SCSI controller emulation
to work.
20031124 Raw binaries can now be loaded into memory.
20031204 Adding srec binary support.
20031220 Adding some super-ugly arcbios emulation code.
Making some progress on the SGI and ARC machine
emulations.
20031222 SGI and ARC progress. Multiple CPUs are now added to
the arcbios component tree (although NetBSD cannot
actually use more than one).
20031228 Adding 'crime' and 'macepci' fake devices for SGI
emulation.
Finally implementing the cop0 'compare' register.
Improvements to the ns16550 device, but it is still
incomplete.
SGI userland is now reached, but interaction is broken
(due to the buggy ns16550).
20031229 Adding some more instructions: teq, dsllv
Adding a Nintendo 64 emulation mode (skeleton).
Adding R4300 and R12000 to the cpu list.
20031230 Adding bltzal, bltzall, bgezal, bgezall (not really
tested yet).
Fixing the 16550 serial controller device (by not
supporting fifo, so in fact it emulates a 16450
instead). This causes NetBSD/sgimips to run nicely
into userland, sysinst, and so on.
Some ARC/RD94 interrupts seem to work ok now, but
i/o interrupts are still not correctly implemented.
NetBSD/arc userland is reached and can be interacted
with, but there's no sysinst (?).
20040103 Trying to get some Irix stuff to work, but it's hard.
Fixing some Cobalt/linux problems.
20040104 Adding a dummy 8250 device, so that Linux/sgimips can output
console messages.
Adding dmultu. (The same as dmult, so I'm not sure it's correct.
Perhaps dmultu is correct and dmult is wrong...)
Fixing a bug in unaligned load/stores of 64-bit values (a cast
was needed).
Linux/sgimips in 64-bit works a bit more than before.
Adding simple (polled) input functionality to dev_zs.
Making some progress on SGI-IP22 (IP32 still works best,
though).
Fixing the mc146818 clock device in ARC/NEC and SGI emulation
modes, the year field was not correct.
Adding a fake 'pref' instruction (lwc3).
20040106 Separating out memory.h from misc.h.
Refactoring of a lot of small code fragments.
The PCI bus device is now shared between Cobalt, SGI, and ARC.
Support for RAM mirroring (dev_ram.c, not really tested yet).
Ugly hack to select the largest of ELF string symbol tables,
if there are more than one.
Memory hole fix for ARCBIOS, and a fix for very large (>= 4GB)
amounts of emulated RAM.
TGA (DEC 21030) PCI graphics device. NetBSD/arc can boot with
this card and use it as a framebuffer console.
20040107 Adding a fix (partly incorrect) to daddi, to allow Linux/sgimips
to boot in 64-bit mode.
20040108 Fixing a sll/nop bug (rd==0 for nop, not sa==0 as before).
20040109 Trying to get an SGI-IP32 PROM image to boot.
20040110 Faking R10000 cache things.
The PROM image boots, although it takes almost forever for it
to realize that there is no keyboard.
The 'gbe' SGI-IP32 graphics device works enough to display the
Linux framebuffer penguin in the upper left corner :-)
20040111 -p and -P addresses can now be given as symbol names, not just
numeric values.
Experimenting with adding a PCIIDE (dev_wdc) controller to the
Cobalt emulation.
20040120 Adding src/bintrans.c. No code yet, but this is a place for
ideas to be written down.
Increasing performance a little bit by inlining the check for
interrupts (which occurs for every instruction).
20040124 Experimenting with pure userland (syscall) emulation.
20040127 Fixes for compiling under Solaris.
20040206 Some bintrans experiments.
20040209 Adding some simple Ultrix userland emulation syscalls.
20040211 Adding decprom_dump_txt_to_bin.c to the experiments/ dir.
Adding a section to doc/ on how to use DECstation PROM dumps.
Adding a hello world example to doc/ as well.
20040218 TURBOchannel slots that are empty now return a DBE exception,
so that Ultrix and DECstation PROMs don't complain about
broken TURBOchannel ROMs.
Working some more on the machine-dependant interrupt stuff.
20040219 Trying out some Linux/DECstation kernels (semi-successfully).
20040222 YES! I finally found the bug that caused Linux/SGI-IP32 to only
work on Alpha, not on 32-bit machines. It was a shift left,
probably done using 6 bits on alpha, 5 bits on 32-bit machines.
20040223 Some minimal DEC KN5800 progress; Ultrix prints some boot
messages, detects 16 XMI R3000 cpus, and get a NULL panic.
It's all fake, though, the CPUs don't actually work.
Still, better than nothing :-)
20040225 An Ultrix OSF1 kernel with a ramdisk now boots :-) (It was
a problem with ultrixboot not giving the same arguments as
NetBSD's boot program.)
20040225(later) Fixing a bug in the DECstation dc serial device; digits 0-9
were translated to numeric keypad 0-9, not the normal 0-9.
(This caused Ultrix to print escape sequences instead of
digits.)
20040226 Some progress on machine-dependant interrupt delivery
for -D7 (Maxine) and -D4, and some more 'scc' serial
controller featuers are implemented (but no interrupts/
dma/keyboard/mouse stuff yet).
20040228 Progress on the scc controller; -D4 works in both serial
console mode and with keyboard (graphical console), but no
mouse yet.
20040301 SGI mace interrupts are now done using the new machine-
independant interrupt system.
20040303 Fixing an R5900 bug; the lowest 6 bits have special meaning
for coprocessor functions, not just 5 bits as on non-R5900
CPUs. (This fixes a bug which caused NetBSD to crash.)
20040304 Adding enough (fake) DMA capabilities to the ioasic device
to allow Ultrix to print boot messages in the -D3, -D4,
and -D7 modes, and also print graphical console messages
in -D4 and -D7 modes.
-D11 (DEC5500) polled getchar added (to the 'ssc' device).
Adding the 'madd' instruction (including R5900 weird stuff).
20040304(later) Playstation 2's GIF can now copy 640x16 pixel chunks, allowing
NetBSD to scroll up the framebuffer. The cursor also works
better now.
Playstation 2 bootinfo RTC data should now be passed correctly
to the running kernel.
DECstation rtc year should be either 72 or 73, anything else
will cause Ultrix to give a warning about invalid year.
20040306 Combining playstation2's dmac, interrupt, and timer devices
into one (ps2_stuff).
Adding some R5900 instructions: mfsa, mtsa, pmfhi, pmflo, por,
lq, and sq. (Most of them are just guesses, though.)
Implementing my own XImage putpixel routine, which can be
inlined... significantly faster than normal XPutPixel. :-)
20040307 Implementing the basic functionality of a "PMAG-CA" pixelstamp
accellerated framebuffer device. Works with NetBSD and
Ultrix, but no cursor or color support.
20040308 PMAG-CA, -DA, and -FA pixelstamps seem to work now.
Adding a hack to allow a pmax/mach kernel to be loaded (it's
a COFF file with 0 (!) sections).
Initial test of bt459 + framebuffer cursor support.
20040309 Fixes/updates of dev_dec5800 and dev_ssc (and dev_decxmi) allow
a KN5800 Ultrix-OSF1-ramdisk kernel to boot all the way into
userland and be interacted with.
The bt459 cursor should now look semi-nice, but it is still
a bit fake.
20040310 Moving the DEC CCA stuff from src/machine.c into a separate
device file (devices/dev_deccca.c).
An ugly hack added to allow some more OSF/1 kernels (almost
a.out, but without many of the header fields) to load.
20040314 Adding PMAG-JA and PMAG-RO (1280x1024 x 8-bit) TURBOchannel
graphics devices. They work in Ultrix, but only monochrome
and no cursor, because there are no ramdacs or such yet.
20040315 Pixelstamp solid fill now supports colors other than just
zero-fill.
Adding a (new) regression test skeleton.
20040321 Some really minor updates.
20040323 Fixes to allow SGI-IP20 and IP22 to work a bit better
(aliased memory), and adding "private" firmware-like vectors
to arcbios emul. An IP22 Irix kernel gets far enough to
print an assertion warning (and then double panics). :-)
20040324 Adding a generalization hack to the SCC serial controller
to work with SGI-IP19 (in addition to DECstations).
Adding the 'sdc1' instruction.
Some progress on various SGI emulation modes.
20040325 Minor updates.
20040326 Fixed a 'madd' bug (r5900). NetBSD/playstation2 now reaches
userland correctly. And a simple fix which allows NetBSD
timer interrupts to be triggered; NetBSD uses T_MODE_CMPE
(compare), while Linux uses _OVFE (overflow).
20040328 Linux on Playstation 2 boots a bit. The Playstation 2
graphics controller has been extended to work better with
NetBSD, and to include some Linux support as well.
Some interrupt handling enhancements on Playstation 2,
needed for Linux' dma.
128-bit loads and stores (lq and sq) are allowed, although
the top half of quadwords are not modified by other
instructions. (Linux uses lq and sq.)
Big-endian X Windows servers now display correct rgb color,
not bgr as before.
20040330 Some minor updates to the documentation.
20040401 Adding a dummy ps2 OHCI device.
20040402 Progress on the asc SCSI controller.
20040406 Hack to allow ./configure, make to work on HP-UX B.11.00
on HPPA-RISC, gcc 3.3.2. (Does not work with HP's cc.)
More progress on the asc SCSI controller. Fixing INQUIRY,
adding READ_CAPACITY, adding READ. Works a bit with NetBSD
and some (but not all) Ultrix kernels, on DECstation type 2.
Adding WRITE, SYNCRONIZE_CACHE.
Mounting disks works in NetBSD :-) It is a bit buggy,
though. Or something else is buggy.
20040407 The bug is triggered by gunzip during NetBSD/pmax install.
20040408 Fixing a bug (non-nul-terminated string) which caused X11
cursors to not display on Solaris.
Unnecessary X11 redraws are skipped (removes some weird
delays that existed before), and cursors are redrawn on
window exposure. (The cursor functionality has been moved
from dev_fb.c to x11.c.)
20040411 Fixing the DC7085 device so that Ultrix doesn't behave weird
if both tx and rx interrupts occur at the same time.
More advancements on the asc SCSI controller.
More disk image filename prefixes are now recognized; c (for
CD-ROM, as before), d for disk, b for boot device, r for
read-only, and 0-7 for scsi id.
Mounting disks works in Ultrix. Installing to disk usually
crashes for various reasons, but an OSF/1 install gets
relatively far (similar to the NetBSD/pmax install).
20040412 Trying to find the bug.
20040415 Finally found and fixed the bug; SCSI reads and writes
(actually, any data in or data out) can be split up into
multiple DMA transfers. That stuff was only partially
implemented, and the part that was implemented was buggy.
It works now. NetBSD/pmax and Ultrix 4.3 seems to like
the SCSI stuff enough to install almost all the way.
20040415 (more) Adding a hack which allows a host's cdrom device to be used as
a cdrom device inside the emulator, eg /dev/cd0c.
Making the cycle counter int64_t instead of long, as a 'long'
overflows too easily on 32-bit machines. (The bug is still
there, though.)
I've now verified that a full NetBSD/pmax install can be done.
If using a PMAG-AA graphics board, startx brings up X :-)
mips64emul can be compiled inside NetBSD inside mips64emul,
and it can run NetBSD in that environment. (I'm getting
dizzy... :-)
20040417 Moving some coprocessor stuff from cpu.c to coproc.c.
20040424 Adding a BT455 vdac for PMAG-AA. Black and white are now
rendered correctly in Xpmax.
Adding colormap support to the BT459 device, for PMAG-BA.
20040425 Fixing a buffer length bug, which caused an Ultrix 4.5
install to bug out on an i386 host.
20040429 FPU experiments.
20040502 More FPU experiments.
Speedup for exception debug messages: in quiet mode, debug
messages were still evaluated, which took a relatively
large amount of time.
20040503 Most FPU stuff fixed, but there is at least one known bug
left; ps axu in NetBSD triggers it (ps loops forever).
20040504 A default install of Ultrix 4.5 succeeded! It boots up with
a graphical login.
Fixing the keyboard repetition bug (a lk201 "up" (release)
scancode is now sent after every key).
20040505 Both CR and LF now produce the same lk201 scancode, so that
pressing 'enter' works as expected in Ultrix.
20040506 Adding a vaddr to paddr translation cache, causing a speedup
of perhaps 50% or more.
20040507 Fixing PMAG-BA color for Ultrix. (Ultrix relies on interrupts
coming from the TURBOchannel slot to update the palette.)
20040508 Fixing cursor positioning for PMAG-BA.
20040511 Prints current nr of instructions per seconds, not only
average, when using -N.
20040515 Some more bintrans experiments.
20040606 Adding ARCBIOS GetReadStatus() and Read().
Adding some instructions: tlt, tltu, tge, tgeu, tne.
20040607 Adding the dsub instruction.
Some minimal progress on SGI-IP30 emulation.
Applying a patch from Juli Mallett to src/file.c (I'm not
sure yet if it breaks or fixes anything).
Some minor fixes for SGI-IP22 (such as faked board revision
numbers).
20040608 ll/sc should now fail if any unrelated load/store occurs.
Minor changes to the configure script.
Adding some ifdefs around code which is not often used
(the mfhi/mflo delay, and the last_used TLB experimental
code); this might cause a tiny speedup.
20040609 Minor fixes.
20040610 Various minor SGI fixes (64-bit ARCS stuff, progress on the
CRIME/MACE interrupt system, and some other random things).
20040611 More crime/mace progress, and some more work on pckbc.
KN5800 progress: adding a XMI->BI adapter device; a disk
controller is detected (but it is just a dummy so far).
20040612 Adding "dev_unreadable", which simplifies making memory
areas unreadable. (NetBSD on SGI-IP22 no longer detects
non-existant hpc1 and hpc2 busses.)
Implementing rudimentary support for IP22 "local0" and
"local1" interrupts, and "mappable" local interrupts.
Some progress on the WDSC SCSI controller on IP22, enough
to let NetBSD get past the disk detection and enter
userland! :-)
The zs (zilog serial) device now works well enough to let
NetBSD/sgimips be interacted with on IP22. :-) (Though
it is very ugly and hardcoded.)
20040613 IP32 didn't work last night, because there were too many
tick functions registered. That has been increased now.
Trying out NetBSD/sgimips 2.0 beta kernels. There are some
differences compared to 1.6.2, which I'm trying to solve.
Interrupt fixes for IP32: _serial and _misc are different.
Separation of IP22 (Full-house) and IP24 (Guiness).
20040614 Modifying the memory layout for IP20,22,24,26 (RAM is now
offset by 128MB, leaving room for EISA registers and such),
and moving around some code chunks. This is not well
tested yet, but seems to work.
Moving parts of the tiny translation cache, as suggested
by Juli Mallett. It seems that the speedup isn't as
apparent as it was a few weeks ago, though. :-(
Speedups due to not translating addresses into symbol
names unless the symbol name is actually printed.
Added support for loading old big-endian (Irix) ECOFF
kernels (0x60 0x01 as the first two bytes).
20040615 (late) Adding enough SGI IP20 (Indigo) support to let NetBSD 2.0
enter userland :-) No interrupt specifics are implemented
yet, so it hangs while doing terminal output.
20040618 Experimenting with the WDSC SCSI controller for IP20,22,24.
20040620 Adding a program which converts SGI prom dumps from text
capture to binary, and some hacks to try to make such an
IP22 PROM to work better in the emulator.
20040621 Removing the Nintendo 64 emulation mode, as it is too
uninteresting to support.
Adding SCSI tape device support (read-only, so far).
Fixing a bug which caused the cursor to be corrupted if new
data was written to the framebuffer, but the cursor wasn't
moved.
20040622(early) Finally! Making progress on the SCSI tape stuff; when going
past the end of a file, automagically switch to the beginning
of the next.
20040622(late) Trying to track down the last SCSI tape bugs.
Removing _all_ dynamic binary translation code (bintrans),
starting from scratch again.
20040623(early) Performing a general code cleanup (comments, fixing stuff
that led to compiler warnings, ...).
Disabling MIPS16 support by default, and making it a
configure time option to enable it (--mips16). This gives
a few percent speed increase overall.
Increasing performance by assuming that instruction loads
(reading from memory) will be at the same page as the last
load. (Several percent speedup.)
Moving the list of kernels that can be found on the net from
README to doc/.
20040624 Finally! I found and fixed the bug which caused 'ps', 'top',
'xclock', and other programs in NetBSD/pmax to behave weird.
Increasing performance by a few percent by running as many
instructions in a row as possible, before checking for
hardware ticks.
When booting from SCSI tapes on DECstation, the bootstring
now contains 'tz' instead of 'rz'.
Adding a second ARC machine mode, "Acer PICA-61", -A2.
Disabling the support for "instruction delays" by default
(it has to be enabled manually in misc.h now, but is never
used anywhere anyway).
Other minor optimizations (moving around stuff in the
cpu struct in misc.h, and caching cpu->pc in cpu.c).
Separating the tiny translation cache into two, one for
code and one for data. This gives a few percent speed
increase.
20040625(early) I think now is a good time for a "feature freeze",
to let the code stabilize and then make some kind of
first release.
20040625(later) Adding a -v (verbose) command line option. If -v is not
specified, the emulator goes into -q (quiet) mode just before
it starts to execute MIPS code.
20040627 The configure script now adds -fomit-frame-pointer to the
compile flags if the $CC seems to be able to handle that.
Found and fixed a serious interrupt bug in BT459 (Ultrix'
behaviour required a hack, which was incorrect), so
performance for machines using the PMAG-BA framebuffer is
now improved.
For X11 bitdepths other than 8 or 24, a warning message
is printed at startup.
A number of other minor fixes, optimizations, updated
comments and so on.
Adding a BUGS file, a list of known bugs.
Adding a minimal man page, doc/mips64emul.1.
20040628 Hacks for faking the existance of a second level cache
(ARCBIOS and other places).
An important fix for dc7085: tx interrupts should happen
before rx interrupts, not the other way around as it was
before. (This speeds up NetBSD boot on DECstation, and
fixes a bug which Ultrix triggered on heavy keyboard input.)
A couple of other minor fixes.
Framebuffer fix: there was a bug which caused the rightmost/
bottom pixel to sometimes not be updated, when running in
scaledown mode. This is now fixed.
Adding a small program which removes "zero holes" from
harddisk image files.
20040629 More minor fixes.
20040629(later) Adding -A3 (NEC RISCstation 2200) (this is similar to
the 2250 model that NetBSD/arc can already boot all the
way into userland and be interacted with), and -A4
(Deskstation Tyne).
Some more minor fixes.
20040630 Adding support for 15 and 16 bits X11 framebuffers,
and converting from XYPixmap to ZPixmap (this fixes the
problem of updates appearing in "layers" on some X
servers).
The pixels in the mouse cursor (for BT459) are now colored
as the emulated OS sets them, although no transparency
masking is done on the edges of the cursor yet. (In plain
English: the mouse cursor is no longer just a white solid
square, you can actually see the mouse cursor image
on the white square.)
============== RELEASE 0.1 ==============
20040701 The -j option now takes a name, the of the kernel as passed
on to the bootloader. ("netbsd" is the default name.)
Adding support to load bootstrap code directly from a disk
image, for DECstation. Both NetBSD/pmax and Ultrix boot
straight of a disk image now, with no need to supply a
kernel filename on the command line. (Ultrix still needs
-j vmunix, though, to boot from /vmunix instead of /netbsd.)
20040702 Minor bugfix (some new untested code for X11 keypresses was
incorrect).
20040702(later) Adding an ugly hack for CDROMs in FreeBSD; if an fread() isn't
done at a 2048-byte aligned offset, it will fail. The hack
tries to read at 2048-byte aligned offsets and move around
buffers to make it work.
Adding video off (screen blanking) support to BT459.
============== RELEASE 0.1.1 ==============
20040702(later) Cleanup to remove compiler warnings (Compaq's cc, Solaris' cc,
and gcc 3.3.3/3.3.4 in Linux), mostly by putting ULL on large
numeric constants.
Better support for scaledown of BT459 cursors, but still not
color-averaging.
Beginning the work on adding better memory latency support
(instruction delays), enabled by the --delays configure option.
20040703 Modifications to the configure script so that a config.h file
is created, containing things that were passed along as
-Dxxx on each cc command line before.
More work on instruction latency support; trying to separate
the concepts of nr of cycles and nr of instructions.
20040704 Working on R2000/R3000 caches.
Adding a '--caches' option to the configure script.
Various small optimizations.
R3000 caches finally work. (I know that there is at least one
bug, regarding interrupt response.)
20040705 Working on the 'le' device, and on a generic (device
independant) networking framework. le can transmit and receive
packets, and the network framework fakes ARP responses from a
fake gateway machine (at a fixed ip address, 10.0.0.254).
Adding a '-c' command line option, which makes emulated_hz
automatically adjust itself to the current number of emulated
cycles per host CPU second (measured at regular intervals).
20040707 Removing the '-c' option again, and making it the default
behaviour of the emulator to automatically adjust clock
interrupts to runtime speed (as long as it is above 1 MHz).
(This can be overridden by specifying a static clock rate with
the -I option.)
Updating the doc/ stuff a bit.
Generalization of the DECstation bootblock loading, to work
with Sprite/pmax. Lots of other minor modifications to make
Sprite work, such as adding support for DECstation "jump table"
PROM functions, in addition to the old callback functions.
Sprite boots from a disk image, starting the kernel if the
argument "-j vmsprite" is used, but it seems to not like the
DBE exceptions caused by reading empty TURBOchannel slots. :-/
20040708 Minor changes and perhaps some tiny speed improvements.
The Lance chip is (apparently) supposed to set the length of
received packets to len+4. (I've not found this in any
documentation, but this is what NetBSD expects.) So now, ICMP
echo replies work :-) UDP works in the outgoing direction,
in the incoming direction, tcpdump can see the packets but they
seem to be ignored anyway. (Weird.)
Adding a separate virtual-address-to-host-page translation
cache, 1-entry for loads, 1-entry for stores. (For now, it
only works on R4000 as there are conflicts with cache usage
on R3000).
Changing the lower clock speed bound from 1 MHz to 1.5 MHz.
20040709 Incoming UDP checksums were wrong, but are now set to zero
and NetBSD inside the emulator now accepts the packets (eg.
nameserver responses). Host lookups and even tftp file
transfers (using UDP) work now :-)
Adding a section on Networking to the Technical documentation,
and a preliminary NetBSD/pmax install instruction for network
installs to the User documentation.
Some updates to the man page.
20040709(later) Fix to the TURBOchannel code to allow Sprite to get past the
card detection. Seems to still work with Ultrix and NetBSD.
This also makes Linux/DECstation properly recognize both the
Lance controller and the SCSI controller. Linux 2.4.26 from
Debian boots nicely in framebuffer mode :-)
20040710 Some bits in the KN02 CSR that were supposed to be readonly
weren't. That has been fixed, and this allows Linux/DECstation
to get past SCSI detection. :-)
Minor updates to the ASC controller, which makes Linux and
OpenBSD/pmax like the controller enough to be able to access
SCSI devices. OpenBSD/pmax boots from a disk image for the
first time. :-) Linux detects SCSI disks, but I have no
bootable Linux diskimage to test this with.
Updating the doc/ to include instructions on how to install
OpenBSD/pmax onto a disk image.
Naively added a PMAGB-BA (1280x1024x8) in hopes that it would
basically be a PMAG-BA (1024x864x8) in higher resolution,
but it didn't work that way. I'll have to look into this later.
Adding a -o option, useful for selecting '-s' (single user
mode) during OpenBSD install and other things.
After a lot of debugging, a serious bug related to the tiny
cache was found; Linux just changes the ASID and returns when
switching between processes in some occasions without actually
_writing_ to the TLB, and I had forgotten to invalidate the
tiny cache on such a change.
20040711(early) I've been trying to repeat the OpenBSD install from yesterday,
but appart from the first initial install (which was
successful), I've only been able to do one more. Several
attempts have failed with a filesystem panic in the middle
of install. I'm not sure why.
20040711 I found the "bug": wget downloaded the simpleroot28.fs.gz file
as read-only, and gunzip preserved those flags. Thus, OpenBSD's
installer crashed as it didn't get its writes through to the
disk.
Parts of the 1280x1024x8 PMAGB-BA graphics card has been
implemented, it works (unaccelerated) in NetBSD and OpenBSD,
but Ultrix does not seem to like it.
Cleaned up the BT459 cursor offset stuff a bit.
Trying to make the emulated mouse coordinates follow the host's
mouse' coordinates (for lk201, DECstation), by
"de-accelerating" the data sent to the emulated OS.
20040711(later) Fix so that Sprite detects the PMAG-BA correctly.
Adding some stuff about NFS via UDP to the documentation.
Fixed the 'update flag' for seconds, so now Sprite doesn't
crash because of timer-related issues anymore.
Fixing KN02 interrupt masks a bit more, to make Sprite not
crash. Sprite now runs quite well.
20040712 Working on IP/UDP fragementation issues. Incoming UDP packets
from the outside world can now be broken up into fragments
for the guest OS. (This allows, for example, OpenBSD/pmax to
be installed via nfs.) Outgoing fragmented packets are NOT
yet handled.
Linux doesn't use 64-bit file offsets by default, which is
needed when using large disk images (more than 2GB), so the
configure script has now been modified to add necessary
compiler flags for Linux.
20040713 Trying out some minor optimizations.
Refreshing the UDP implementation in src/net.c a little.
20040714 Updating the documentation a little on how to experiment
with a Debian Linux install kernel for DECstations.
A 'mini.iso' Linux image for DECstation has different fields
at offsets 0x10 and 0x14, so I'm guessing that the first is
the load address and the second is the initial PC value.
Hopefully this doesn't break anything.
Some initial TCP hacks, but not much is working yet.
Some updates for IP30: The load/store 1-entry cache didn't
work too well with IP30 memory, so it's only turned on for
"MMU4K" now. (This needs to be fixed some better way.)
Adding a hack which allows Linux/Octane to use ARC write()
and getchild() on IP30. Linux uses ARCBIOS_SPB_SIGNATURE as a
64-bit field, it was 32-bit before.
Making ugly hacks to the arcbios emulation to semi-support
64-bit equivalents of 32-bit structures.
20040716 Minor fixes to the configure script (and a few other places)
to make the sources compile out-of-the-box on HP-UX (ia64
and HPPA), old OpenBSD/pmax (inside the emulator itself), and
Tru64 (OSF/1) on Alpha.
A couple of other minor fixes.
20040717 A little TCP progress; OpenBSD/pmax likes my SYN+ACK replies,
and tries to send out data, but NetBSD/pmax just drops the
SYN+ACK packets.
Trial-and-error led me to change the 64-bit ARCS component
struct again (Linux/IP30 likes it now). I'm not sure about all
of the offsets yet, but some things seem to work.
More 64-bit ARCS updates (memory descriptors etc).
Better memory offset fix for IP30, similar to how I did it for
IP22 etc. (Hopefully this doesn't break anything else.)
Adding a MardiGras graphics controller skeleton for SGI-IP30
(dev_sgi_mardigras.c).
Thanks to Stanislaw Skowronek for dual-licensing mgras.h.
Finally rewrote get_symbol_name() to O(log n) instead of O(n)
(Stanislaw's Linux kernel had so many symbols that tracing
with the old get_symbol_name() was unbareably slow).
Removing all of the experimental tlbmod tag optimization code
(the 1-entry load/store cache), as it causes more trouble than
the performance gain was worth.
20040718 The MardiGras device works well enough to let Linux draw the
SGI logo and output text.
A bunch of other minor changes.
20040719 Trying to move out all of the instruction_trace stuff from the
main cpu loop (for two reasons: a little performance gain,
and to make it easier to add a GUI later on).
20040720 Finally found and fixed the ethernet/tcp bug. The hardware
address is comprised of 6 bytes, where the _first_ byte should
have a zero as the lowest bit, not the last byte. (This causes
NetBSD and Linux running in the emulator to accept my SYN+ACK
packets.)
Getting the first nameserver address from /etc/resolv.conf.
(This is not used yet, but could be useful if/when I add
internal DHCP support.)
Working more on the TCP stuff; TCP seems to be almost working,
the only immediate problem left is that the guest OS gets
stuck in the closing and last-ack states, when it shouldn't.
It is now possible to install NetBSD and OpenBSD via ftp. :-)
20040721 Trying to fix the last-ack bug, by sending an RST after the
end of a connection. (Probably not a correct fix, but seems
to work?)
Adding a my_fseek() function, which works like fseek() but
with off_t instead of long, so that large disk images can
be used on systems where long is 32 bits.
20040722 Trying to fix some more TCP related bugs.
20040725 Changing the inlined asm statement in bintrans_alpha.c into
a call to a hardcoded array of bytes that do the same thing
(an instruction cache invalidation). This allows the same
invalidation code to be used regardless of compiler.
Some other minor changes.
20040726 Minor updates. The configure script is now more verbose.
A Debian/IP22 Linux tftp boot kernel requires ARCS memory to
be FreeMemory, not FreeContiguous. (This should still work with
other SGI and ARC OSes.)
Fix for ARCS write(), so it returns good write count and
success result (0).
Some hacks to the IP22 memory controller, to fake 72MB RAM
in bank 0.
The IP22 Debian kernel reaches userland (ramdisk) when run
with -G24 -M72 -CR4400, if a special hack is done to the
zs device.
20040730 Removing mgras.h, as I'm not sure a file dual-licensed this way
would work. (Dual-licensing as two separate files would work
though.)
Preparing for the upcoming release (0.2).
20040801 Fixing the 512 vs 2048 cdrom sector size bug; I hadn't
implemented the mode select SCSI command. (It still isn't
really implemented.)
A bug which crashes the emulator is triggered when run with
new NetBSD 2.0_BETA snapshots on a Linux/i386 host. I'm not
sure why.
UDP packets sent to the gateway (at 10.0.0.254) are now
forwarded to the machine that the host uses as its nameserver.
Some other minor fixes.
============== RELEASE 0.2 ==============
20040803 A post-3.5 OpenBSD/sgimips kernel snapshot with ramdisk seems
to boot fine in the emulator, all the way to userland, and
can be interacted with.
Adding a -y option, used to set how many (random) instructions
to run from each CPU at max (useful for SMP instruction
interleave experiments).
Importing a 8x16 console font from FreeBSD (vt220l.816).
Adding a skeleton for a 80x25 text console device (dev_vga),
useful for some ARC modes. (Character output is possible, but
no cursor yet.)
Adding a dev_zero device (returns zeroes on read).
OpenBSD/arc 2.3 can get all the way to userland with -A4 (if
the wdc devices are commented out) but bugs out there, probably
because of interrupt issues.
Adding a -A5 ARC emulation mode (Microsoft-Jazz, "MIPS Magnum")
which NetBSD seems to like. No interrupt specifics yet, so
it hangs while waiting for SCSI.
20040804 Some dev_mp updates.
The -y switch has to do with number of cycles, not number
of instructions; variable names have been changed to reflect
this.
20040805 Minor updates. Adding some more CPU types/names, but they
are probably bogus.
Adding a MeshCube emulation mode. Just a skeleton so far, but
enough to let a Linux kernel print some boot messages.
Adding the 'deret' instruction.
20040806 Adding include/impactsr-bsd.h (a newer version of what was in
mgras.h before, and this time with only a BSD-style license),
but it is not used yet.
20040810 Some Au1500 updates.
20040811 Adding the 'clz', 'clo', 'dclz', and 'dclo' special2 (MIPS32
and MIPS64) instructions.
More Au1500 updates.
20040812 Using fseeko(), when it is available.
Other minor updates.
Adding a NetGear WG602 emulation mode skeleton (-g); after
a lot of trial and error, a Linux kernel (WG602_V1715.img)
gets all the way to userland, but hangs there.
20040818 Adding signal handlers to better cope with CTRL-Z and CTRL-C.
Adding a simple interactive single-step debugger which is
activated by CTRL-C. (Commands so far: continue, dump, help,
itrace, quit, registers, step, trace, version)
20040818(later) Adding a 'tlbdump' debugger command, and some other minor
fixes.
20040819 Minor updates. Adding an 'unassemble' debugger command.
20040822 Minor updates to the regression testing framework.
20040824 Minor updates based on feedback from Alec Voropay
(configure script updates for Cygwin and documentation).
20040826 Minor updates.
Adding a cursor to the VGA text console device.
Changing all old 11:22:..55:66 ethernet macs to 10:20..60,
still hardcoded though.
20040828 Minor updates.
20040829 mips64emul is 1 year old today :-)
20040901 tests/README now lists "all" MIPS opcodes. This list should
be updated whenever a new opcode is implemented, or when a
regression test is added. (A combination of instructions from
the TX79 manual, the GNU assembler, and the MIPS64 manual).
Hopefully I haven't missed too many.
Adding a section on regression testing to doc/technical.html.
20040902 Finally beginning the work on separating out the stuff from
main.c into a "struct emul". Very time-consuming.
Some minor fixes for LL/SC on R10000.
20040905 Moving more stuff from main.c into struct emul. Unfortunately,
it seems that this causes a slowdown of the emulator.
Userland emulation is now only used if --userland is used
when running configure.
Modifying src/symbol.c to not use global variables.
20040906 Minor update.
20040914 Using $COPTIM when detecting which compiler flags to use in
the configure script. (This makes sure that combinations of
flags should work.)
There'll probably be a 0.2.1 release some time soon, but I'll
do some more clean-up first.
Minor update to the detection of ECOFF files, but I don't like
it; sometimes the endianness of the magic value seems to be
swapped, but it doesn't have to do with endianness of the
actual data?
20040916 Minor updates. Adding an Example section to the manpage, but
as I'm not really familiar with manpage formatting, it will
need to be rewritten later.
20040917 Finally making the coprocessor instructions disassemblable
even when not running.
Doing some testing for the 0.2.1 release.
============== RELEASE 0.2.1 ==============
20040923 Updating the documentation about how to (try to) install
Debian GNU/Linux.
20040924 Some more updates to the documentation.
20040925 Adding overflow stuff to 'add' and 'sub'.
20040926 Minor updates: possibly a fix to 'sltiu' (the imm value
should be treated as signed, and then converted to unsigned,
according to the MIPS64 manual), and removing the
'last_was_rfe' stuff (again).
OpenBSD/arc used speed-hack jumps with other deltas than just
+/- 1 (it used -3 iirc), so the jump speedhack should now
support any delta. Also adding bgtzl and blezl as possible
instructions for the speed-hack jumps. (This needs to be
tested more.)
20040928 Minor updates. Some ARC stuff ("arcdiag" runs now).
cpu_register_dump() now also dumps coprocessor registers.
20040929 More ARC updates. Making the code look a tiny bit nicer
than before. "arcdiag.ip22" works for -G22 (SGI-IP22).
Apparently the overflow support in the 'add' instruction
was incorrect, so I disabled it.
20041002 Trying to install Ultrix in the emulator, but the installer
crashes; found (and fixed) the bug rather quickly: the "fix"
I implemented a few days ago for the 'sub' instruction
(according to the MIPS64 manual) caused the bug.
20041004 Changing the behaviour of the -j command line option. The
default is now "" (or taken from the last filename given on
the command line), not "netbsd". In practice, this doesn't
change much, except that -j netbsd.pmax is no longer needed
when installing NetBSD.
Adding a COMPILE_DATE string to config.h.
20041007 Adding a NEC RISCserver 4200 model (-A6), and some more
updates to the ARC component tree generator.
20041008 The 'll' instruction should be signed, not unsigned as before.
This (and some other minor fixes) causes Irix on SGI-IP32 (O2)
to actually boot far enough to print its first boot messages :)
Working on some new dynamic bintrans code. Enough is now
implemented so that the 'nop' instruction is translated
and there is support for Alpha, i386 and UltraSparc backends,
but performance is about 50% worse than when running without
bintrans. (This is as expected, though.)
20041009 Minor updates to the documentation.
Using mprotect() to make sure that the code created dynamically
by the bintrans subsystem is allowed to be executed. (This
affects newer OpenBSD systems, and possibly others.)
The translated code chunks now only get one argument passed to
them, the (struct cpu *) of the current cpu.
20041010 Hack to dev_le.c which makes Ultrix accept the initialization
of the LANCE controller. (This goes against the LANCE
documentation though.)
In src/net.c, a fix for Ultrix (which seems to send larger
ethernet packets than the actual TCP/IP contents). The hack to
dev_le.c and this fix is enough to let Ultrix access the
Internet.
For DECstation, when booting without a disk image (or when
"-O" is used on the command line), use "tftp" instead of "rzX"
for the boot string.
20041011 Adding cache size variables to the emul struct, so that these
can be set on a per-machine basis (or potentially manually
on the command line).
20041012 Mach/PMAX now passes the LK201 keyboard self-test (although
the keyboard ID is still bogus).
20041013 Minor updates.
Hacks to the ASC SCSI controller for Mach/PMAX, hopefully this
will not break support for other OSes.
20041014 Minor fix to src/emul.c for reading bootblocks at the end of
a disk or cdrom image (thanks to Alexandru Lazar for making me
aware of this).
Adding "gets()" to src/dec_prom.c.
Working a bit on ARC stuff. Importing pica.h from NetBSD.
Minor updates to the ARC component tree for PICA-61.
Adding a dev_jazz.c (mostly for PICA-61).
Renaming dev_jazz.c into dev_pica.c. Working on PICA timer
and interrupt specifics.
20041016 Adding some dummy entries to lk201.c to reduce debug output.
Some bintrans updates (don't run in delay slots or nullified
slots, read directly from host memory and not via memory_rw(),
try mmap() before malloc() at startup, and many other minor
updates).
Adding bintrans_mips.c for 64-bit MIPS hosts, but it is not
used yet.
20041017 Minor updates.
20041018 Update to dev_mc146818 to allow Mach to boot a bit further.
The "hardware random" in dev_mp.c now returns up to 64 bits
of random.
20041019 Minor updates to the way cache sizes are used throughout the
code. Should be mostly ok for R[234]x00.
src/file.c now loads files using NO_EXCEPTIONS. Whether this
is good or bad, I'm not sure.
20041020 Adding a Linksys WRT54G emulation skeleton (-H).
20041021 Minor updates.
R1[024]000 cache size bits in the config register should now
be ok.
Trying to make dev_asc.c work better with PICA.
More work on PICA interrupts (but they are broken now).
20041022 Generalizing the dev_vga text console device so that it can be
used in other resolutions than just 80x25. Works with
OpenBSD/arc.
emul->boot_string_argument is now empty by default (except
for DECstation modes, where it is "-a").
Speedup of dev_ram by using mmap() instead of malloc().
Using mmap() in memory.c as well, which reduces memory usage
when emulating large memory sizes if the memory isn't actually
written to.
20041023 Minor updates.
20041024 Updates to the PC-style keyboard controller, used by PICA.
Updates to the PICA (Jazz) interrupt system. Both NetBSD/arc
and OpenBSD/arc now reach userland with PICA emulation, and
can be interacted with (there are a few programs on the
INSTALL kernel ramdisks). In the case of OpenBSD, a VGA text
console and PC-style keyboard controller is used, NetBSD
runs on serial console.
Adding a framework for DMA transfer for the ASC SCSI
controller.
Implementing a R4030 DMA controller for PICA, enough to let
OpenBSD/arc and NetBSD/arc be installed on an emulated
Pica. :-)
Updates to the documentation.
20041025 Working on ISA interrupts for PICA.
Adding an Olivetti M700 emulation mode (-A7).
Better separation of PICA and M700 stuff (which I accidentally
mixed up before, I thought the M700 Linux kernel would
also work on PICA because it almost booted).
Writing a skeleton G364 framebuffer for M700, enough to show
the Linux penguin and some text, although scrolling isn't
correctly implemented yet.
Adding a dummy SONIC (ethernet) device, dev_sn, for PICA.
Fixing the passing of OSLOADOPTIONS for ARC, the default is
now "-aN" which works fine with OpenBSD/arc and NetBSD/arc.
20041027 Minor updates.
20041029 Adding a Sony NeWS "newsmips" emulation mode skeleton (-f).
Found and fixed a bug which prevented Linux/IP32 from running
(the speed-hack-jump-optimization fix I made a few weeks ago
was buggy).
Adding the trunc.w.fmt and trunc.l.fmt instructions, although
the are probably not really tested yet.
Changes to how floating point values are handled in
src/coproc.c, but right now it is probably very unstable.
20041101 I had accidentally removed the instructions on how to install
Ultrix from doc/index.html. They are back now.
Adding a -Z option, which makes it easier to run dual- or
tripple-head with Ultrix. (Default nr of graphics cards
without -X is 0, with -X is 1.)
Minor update which makes it possible to switch to the left
monitor when running tripple-head, not just right as before.
When using more than one framebuffer window, and the host's
mouse cursor is in a different window than the emulated mouse
cursor, the emulated mouse will now try to move "very far",
so that it in practice changes screen.
Running Ultrix with dual- and tripple-head now feels really
great.
20041101(later) OpenBSD/arc and Linux/Olivetti-M700 don't both work at the
same time with the speed-hack stuff. So, from now on, you
need to add -J for Linux, and add nothing for openbsd.
20041102 Minor update for OSF/1 V4.0 (include sys/time.h in src/net.c
and add -D_POSIX_PII_SOCKET to the C compiler flags).
20041103 Minor updates for the release.
For some reason, Mach/PMAX caused the emulator to bug out on
SunOS/sparc64 (compiled in 64-bit mode); a minor update/hack
to dev_asc fixed this.
============== RELEASE 0.2.2 ==============
20041103 Minor updates.
20041104 Minor updates.
20041105 Running with different framebuffer windows on different X11
displays works now (even with different bit depths and
endiannesses on different displays). A new command line option
(-z) adds DISPLAYs that should be used.
Update regarding how DECstation BT459 cursors are used;
transparency :-) and some other bug fixes.
20041106 More bt459 updates. The cursor color seems to be correct for
NetBSD, OpenBSD, Ultrix, and Sprite.
Some minor bintrans updates (redesigning some things).
20041107 More bintrans updates (probably broken for non-Alpha targets).
Moving doc/mips64emul.1 to man/.
20041108 Some updates.
20041109 More updates. Bintrans experiments mostly.
20041110 Some minor bintrans updates.
20041111 Minor updates.
20041112 A little rewrite of the bintrans system (again :-), this time
a lot more naĂŻve and non-optimizing, in order to support delay
slots in a much simpler way.
Ultrix 4.5 boots into a usable desktop on my home machine in
3min 28sec, compared to 6-8 minutes without bintrans.
20041113 Some minor bintrans updates.
20041114 More bintrans updates. Ultrix now boots in exactly 3 minutes
on my home machine.
20041115 More bintrans updates.
20041116 Bintrans updates.
20041117 Working on dev_dec_ioasic and related issues.
Adding support for letting translated code access devices in
some cases (such as framebuffers).
20041118 Moving some MIPS registers into Alpha registers, which gives
a speed improvement.
Beginning to write an i386 bintrans backend. Skeleton stuff
works, lui, jr/jalr, addiu/daddiu/andi/ori/xori, j/jal,
addu/daddu/subu/xor/or/nor/and.
20041119 dsubu/sll/srl/sra, rfe,mfc0,dmfc0, beq,bne, delayed branches.
Some load/store (but not for bigendian emulation yet.)
Time to reach Ultrix 4.5's graphical login on a 2.8 GHz Xeon
host is now down to 20 seconds!
Adding bgez, bltz, bgtz, and blez to the i386 backend.
20041120 Minor updates (bintrans related mostly).
Time to reach Ultrix login on the Xeon is now 11 seconds.
Adding 'mult', 'multu' and a some parts of mtc0 to the Alpha
backend.
The transparency updates to the X11 cursor support made the
OpenBSD/arc cursor disappear; that has been fixed now.
Unfortunately, something with Acer Pica emulation is broken
when bintrans is enabled.
20041121 Making tlbwr, tlbwi, tlbp, tlbr callable directly from
translated code.
Adding sltiu, slti, slt, and sltu to the i386 backend.
20041122 More bintrans updates.
With the Alpha backend, the status and entryhi registers
can (in some cases) be written without exiting to the main
loop. Ultrix boot time until a usable desktop is reached
is about 1 min 35 seconds on the 533 MHz pca56.
Adding srlv, srav, and sllv to the i386 backend.
20041123 Removing the special handling of high physical addresses for
DECstation emulation from the main memory handling code, and
replacing it with a mirror device instead. (This results in
a tiny increase in performance, and cleaner code.)
Various minor updates.
20041124 Ripping out _all_ bintrans load/store code, because I have
a new idea I'd like to try out.
A total rewrite of the load/store system. It works when
emulating 32-bit MIPS, but not for 64-bit code yet.
Some minor updates to the dev_fb, but no speed improvement.
Making the 'le' ethernet device' SRAM work with bintrans.
20041125 Various updates.
Adding a little "bootup logo" to the framebuffer.
There is now one translate_address() for R3000-style MMUs,
and one for the other types. (This gives a tiny speed
improvement.)
20041126 Minor updates, bintrans.
Fixing the bug which caused OpenBSD/arc (R4000) to bug out;
it was introduced between the 7:th and 10:th of November
when moving up the check for interrupts to above the code
which runs bintrans code, in src/cpu.c.
Adding movn and movz to the Alpha bintrans backend.
20041127 Various minor updates.
20041128 Making the R2000/R3000 caches work with bintrans, even in
isolated mode. (Not true cache emulation, but it works with
NetBSD/pmax, OpenBSD/pmax, and Ultrix.)
Making the default cache size for R3000 4KB instr, 4 KB data;
a real R3000 could have 64KB each, but emulated OSes run
faster when they think the cache is smaller :-)
Updates to the i386 backend: the nr of executed instructions
is now placed in ebp at all times, and some support for
mtc0 similar to how it is done in the Alpha backend has been
added. A full NetBSD/pmax 1.6.2 install can now be done in
5 minutes 35 seconds, on a 2.8 GHz Xeon host (with -bD2 -M20).
Adding mult and multu to the i386 bintrans backend.
Reducing the number of malloc/free calls used by the
diskimage subsystem.
20041129 Minor updates to the Alpha bintrans backend.
20041130 Trying to fix the bug which prevents Linux from working
with bintrans. It _seems_ to work now. (Pages could in some
cases be written to after they were translated, but that
has been fixed now.)
A couple of other minor fixes.
Minor updates to the Alpha backend (directly using Alpha
registers in some cases, instead of loading into temporaries).
Updates to the i386 backend (special hacks for 32-bit
MIPS emulation, which are fast on i386, for example only
updating half of the pc register).
20041201 More updates to the i386 backend, similar to those yesterday.
Preparing for release 0.2.3.
Adding a generic load/store mechanism, which is used when the
32-bit optimized version cannot be used (for R4000 etc).
============== RELEASE 0.2.3 ==============
20041202 If ALWAYS_SIGNEXTEND_32 is defined in misc.h, and an
incorrectly extended register is detected, the emulator now
exits instead of continues.
Removing the LAST_USED_TLB_EXPERIMENT stuff.
Minor updates to work better with Windows NT's ARCINST.EXE;
printing 0x9b via arcbios becomes ESC + '[', and the ARC
memory descriptor stuff has been generalized a bit more.
Adding arbios hacks for Open(), Seek(), GetRelativeTime(),
and Read() to allow WinNT's SETUPLDR to read the filesystem
on the diskimage used for booting.
20041203 Adding a terminal emulation layer which converts arcbios
stdout writes to "VGA text console" cell characters. Seems
to work with Windows NT and arcdiag.
Adding a 8x8 font to dev_vga.
Adding more ARC components to the component tree (for PICA
emulation).
20041204 Minor updates.
More updates to dev_vga. Adding a 8x10 font.
Adding a hack so that the framebuffer logo is visible at
startup with dev_vga. (It disappears at the first scroll.)
A minor fix for a bug which was triggered when running
dual- or tripple-head, on 2 or 3 actual X11 displays.
20041205 Fixing a bintrans bug.
Some other minor updates (some of them bintrans related).
20041206 Moving the web page to http://gavare.se.
Adding a hack for mmap() which supports anonymous mapping
using /dev/zero, but not using MAP_ANON{,YMOUS}.
Separating out opcodes.h, cop0.h, and cpu_types.h from misc.h.
20041207 Minor bintrans update. (In some cases, it isn't necessary
to return to the main loop, when translating from a new page.)
Some other minor i386 bintrans backend optimizations.
And some other minor updates.
i386 backend update: the lowest 32 bits of the pc register
are now placed in an i386 register.
20041208 Adding GetConfigurationData() and some support for config
data, to src/arcbios.c.
Adding a bogus 0xbd SCSI command (used by Windows NT). It is
not listed in http://www.danbbs.dk/~dino/SCSI/SCSI2-D.html.
If the framebuffer cursor contains more than 1 color, then
the host's X11 cursor disappears. (Nice for DECstation
emulation with emulated X.)
For ARC and SGI emulation, if an exception occurs before an
exception handler is installed, the emulator now exits
nicely (as suggested by Alec Voropay).
A couple of minor updates to the ARCBIOS emulation subsystem.
The single step debugger is now automatically entered when
all CPUs have stopped running, unless there was a clean
shutdown of some kind (PROM halt() call, or similar).
Adding a -V option for starting up in a paused state, into
the single-step debugger.
Adding a note about 'mmon' to the documentation
(http://www.brouhaha.com/~eric/software/mmon/).
20041209 Fixes to devices/console.c which makes cursor keys and such
a bit more reliable.
ARCBIOS hack/update which creates memory descriptors _after_
loading the executable. (Seems to work with OpenBSD/arc,
NetBSD/arc, arcdiag, IRIX, NetBSD/sgimips, OpenBSD/sgi, and
some Windows NT executables.)
ARCBIOS support for cursor keys (ESC + '[' ==> 0x9b).
A bintrans update (for 32-bit emulation) which speeds up
jumps between pages, if code is already translated.
Changing the default bintrans cache from 20 to 24 MB.
20041210 Optimizing unaligned load/stores a little bit in src/cpu.c.
Omiting the check for nr of executed bintrans instructions
on some forward jumps.
Adding the 'syscall' and 'break' instructions to the
bintrans backends.
Allowing more bits of the status register to be written to
from within inside translated code, on R3000.
Getting rid of the final pixel when hiding the host's mouse
cursor.
store_buf() now copies data 8 or 4 bytes at a time, when
possible. (This speeds up emulated ROM disk reads, etc.)
Tiny bug fix: coprocessor unusable exceptions are now also
generated (for coproc 1..3) even when in kernel mode, if the
coprocessors are not enabled. This allows a Debian installation
to proceed further than before. (It's still very unstable,
though.)
20041212 Updating doc/index.html with better Debian installation
instructions.
If SLOWSERIALINTERRUPTS is defined at compile time, interrupts
from the dc7085 device will not come as often as they normally
do. This makes Debian seem more stable.
Decreasing the bintrans cache to 20 MB again.
Updating some files in preparation for a 0.2.4 release.
20041213 Updating the docs on how to install NetBSD 2.0/pmax, and also
some updates to the section on installing Debian.
32-bit bintrans backend optimization: don't inline large
chunks of code, such as general jumps.
20041214 Minor fix for coproc unusable for R4000 (it's the PC that,
matters, not the KSU bits).
Separating out the debugger from emul.c into debugger.c.
Rewriting parts of the debugger.
Removing the -U command line option, as it wasn't really
useful. Also removing the -P option.
Renaming all instances of dumppoint to breakpoint, as that
is what it really is.
When a breakpoint is reached, the single-step debugger is
entered, instead of just turning on instruction trace.
Adding a 'breakpoints' debugger command.
Better fix for coproc unusable on R4000: the KSU bits matter,
but the ERL and EXL bits override that.
Fix which allows Debian to boot directly from a disk image
(with DELO). (It reads multiple separate areas from disk.)
Update to the SLOWSERIALINTERRUPTS stuff, making it even
slower.
Fixes based on feedback from Alec Voropay (-Q with ARC
emulation skips the setup of arcbios data structures in
memory, and no sign-extension _after_ writing a 32-bit
value to a 64-bit coproc 0 register).
Adding a 'devices' command to the debugger.
The 'registers' and 'tlbdump' commands now take an optional
argument (a cpu id).
Adding rudimentary tab-completion and cursor key stuff to
debugger_readline().
Adding some more debugger commands: 'bintrans' and 'machine'.
20041215 Adding a 'devstate' command; implementing a skeleton for a
state function for the bt459 device.
Implementing yet another variant of the SLOWSERIALINTERRUPTS
stuff.
Implementing more of the different exception offsets (taking
CAUSE_IV and STATUS_BEV into account).
hpc_bootinfo should now be correctly filled on big-endian
hosts.
Always shift left by 12, not by pageshift, to get physical
addresses on MMU4K etc. (Thanks to Alec Voropay for noticing
this.)
20041216 The KN02's CSR can now be read from bintranslated code.
Adding a dummy dev_sgi_mec.
20041217 The default framebuffer and model settings for -F (hpcmips)
should now be almost like Cassiopeia E-500.
Changing -DSLOWSERIALINTERRUPTS into a command line option, -U.
20041218 Continuing a little bit on the mec controller.
Removing lots of #include <math.h> that weren't really used.
20041219 Fixing stuff that broke because of the pageshift bugfix.
Adding an argument to the s (step) debugger command, for doing
more than 1 step at a time.
ARCBIOS components representing disk images are now created
to actually match the disk images in use, and some other
arcbios-related updates; adding a dummy GetComponent().
Adding a 'lookup' command to the debugger, for symbol lookups.
Adding a "NEC Express RISCserver" mode (NEC-R96, -A8).
Adding a dummy ARCBIOS GetFileInformation(), GetTime(), and
SetEnvironmentVariable().
20041220 Improved command line editing (including command history)
in the debugger.
Separating some more .h files from each other, and fixing
some Solaris compiler warnings.
20041221 Minor updates.
20041222 Minor updates; hpcmips (BE300, VR41xx) stuff.
The 'register' debugger command is now 'reg', and it can
be used to modify registers, not just read them.
The syntax for hpcmips (-F) is now -F xx, where xx is a
machine model identifier. (1 = BE300.)
20041223 Some really minor updates.
20041226 Minor updates to doc/index.html (NetBSD 1.6.2 -> 2.0, and
some other rearrangements).
Many updates to the debugger (better register manipulation,
breakpoint manipulation, and other updates).
Fix to dev_cons.c to allow the regression tests to work again.
The configure script now tries to detect the presence of a
MIPS cross compiler. (Used by "make regtest".)
Regression tests are now run both with and without bintrans.
20041227 Some hacks to the VR41xx code to allow Linux for BE300 to
get far enough to show the penguin on the framebuffer.
20041228 Merging dev_kn01_csr.c and dev_vdac.c into dev_kn01.c.
20041229 Various updates to the debugger (nicer tlb output and other
things).
Some floating point fixes in src/coproc.c (mov is not
an arithmetic instruction), and in src/cpu.c (ldcX/sdcX in
32-bit mode uses register pairs).
'-O' now also affects the bootstring for SGI and ARC emulation.
Bintrans updates (slightly faster 32-bit load/store on alpha).
Updates to the i386 backend too, but no real speed improvement.
20041230 Cleaning up parts of the 64-bit virtual-to-physical code for
R10000, and per-machine default TLB entries can now be set
for SGI and ARC machines.
Fix: SGI-IP27 is ARC64, not ARCS.
20050101 Minor updates.
20050102 Minor updates.
Fixing a 32-bit 'addu' bug in the bintrans backends.
Allowing fast load/stores even in 64-bit bintrans mode, if
the top 32 bits are either 0x00000000 or 0xffffffff (for Alpha
only).
Re-enabling ctc0/cfc0 (but what do they do?).
Adding beql, bnel, blezl, and bgtzl to the Alpha backend.
20050103 Adding fast 32-bit load/store for 64-bit mode emulation to
the i386 backend too (similar to the Alpha code). Not really
tested yet, though.
Adding an incomplete regression test case for lwl/lwr/ldl/ldr.
Playing around with bintranslated lwl and lwr for Alpha.
20040104 Changing many occurances of pica to jazz.
Various other updates.
20050105 Fixing some more bintrans bugs (both Alpha and i386).
Unaligned stores that cause tlb refill exceptions should now
cause TLBS exceptions, not TLBL.
Adding experimental swl and swr to the Alpha backend.
Adding lwl, lwr, swl, and swr to the i386 backend.
20050106 Adding another hpcmips model (Casio E-105, -F2), and doing
some updates to the VR41xx code. NetBSD/hpcmips prints some
boot messages.
20050108 Minor updates.
20050109 dev_dec5500_ioboard.c and dev_sgec.c => dev_kn220.c.
dev_crime.c, _mace.c, and _macepci.c => dev_sgi_ip32.c.
Also adding dev_sgi_mec, _ust, and _mte into dev_sgi_ip32.c.
A slight license change. Still revised BSD-style, though.
memory_v2p.c is now included separately for MMU10K and
MMU8K.
Fixing a NS16550 bug, triggered by NetBSD 2.0, but not 1.6.2.
Refreshing the UltraSPARC bintrans backend skeleton.
Merging dev_decbi, _deccca, and _decxmi into dev_dec5800.c.
Sparc backend instructions done so far: mthi/mtlo/mfhi/mflo,
lui, addu, daddu, subu, dsubu, and, or, nor, xor, sll, dsll,
srl, and sra.
Adding more sparc backend instructions: addiu, daddiu, xori,
ori, andi, srlv, srav, sllv, slt, sltu, slti, sltiu.
20050110 Changing the default bintrans cache to 16 MB, and some other
minor updates.
Adding div and divu to the i386 backend (but not Alpha yet).
More work on ARCBIOS emulation.
Trying to find a bug which affects Linux on Playstation 2 in
bintrans mode.
20050111 Moving around some Playstation 2 stuff, but I haven't found
the bug yet. It is triggered by load/stores.
More ARCBIOS updates, enough to let Windows NT partition
disks in some rudimentary fashion.
20050112 Testing for release 0.2.4.
Fixes to suppress compiler warnings.
============== RELEASE 0.2.4 ==============
20050113 Minor updates.
20050114 Fix to the Alpha bintrans backend to allow compilation with
old versions of gcc (2.95.4).
============== RELEASE 0.2.4.1 ==============
20050115 Various updates and fixes: some IP32 stuff, the debugger,
ns16550 loopback tx isn't transmitted out anymore, ...
Removing old/broken R10000 cache hacks, which weren't really
used.
20050116 Minor updates to the documentation on using PROM images.
Adding ARCBIOS function 0x100 (used by IRIX when returning
from main, but undocumented).
MC146818 updates (mostly SGI-related).
ARCS64 updates (testing with an OpenBSD snapshot in IP27
mode). This causes Linux/IP30 to not work. Maybe IP27 and
IP30 differ, even though both are 64-bit?
Removing some nonsensical ARCS64 code from machine.c.
Better handling of 128MB and 512MB memory offsets used by
various SGI models.
Trying to revert the ARCS64 changes (OpenBSD/sgi does
seem to be aware of 64-bit vs 32-bit data structures in
_some_ places, but not all), to make Linux/IP30 work again.
Adding "power off" capability to the RTC, as used on IP32
(and possibly IP30 and others).
Some IP30 updates.
20050117 Debugger updates (symbolic register names instead of just rX,
and using %08x instead of %016llx when emulating 32-bit CPUs
in more places than before).
Removing the dummy sgi_nasid and sgi_cpuinfo devices.
Also using symbolic names for coprocessor 0 registers.
Adding DEV_MP_MEMORY to dev_mp.c.
Adding a 'put' command to the debugger.
ARCBIOS function 0x100 used by IRIX seems to _NOT_ be a
ReturnFromMain(), but something else undocumented.
The count and compare registers are now 32-bit in all
places, as they should be. (This causes, among other things,
OpenBSD/sgi to not hang randomly in userspace anymore.)
On breakpoints, the debugger is now entered _at_ the
instruction at the breakpoint, not after it.
Some cursor keys now work when inputed via X.
Refreshing the MC146818 device a bit more.
20050118 Trying to add some support for less-than-4KB virtual pages,
used by at least VR4131. Thanks to Alexander Yurchenko for
noticing this. (I'm assuming for now that all R41xx work
this way, which is not necessarily true.) It doesn't really
work yet though.
Renicing the "loading files" messages and other things
displayed during startup.
Changing the disassembly output of ori, xori, and andi to
unsigned hex immediate, instead of decimal (as suggested
by Alec Voropay).
configure-script update for HP-UX, and switching from using
inet_aton() to inet_pton() (as suggested by Nils Weller).
Also adding -lnsl on Solaris, if required by inet_pton().
Lots of minor R4100-related updates.
20050119 Correcting the R4100 config register in src/coproc.c, and
a minor update to dev_vr41xx.
Finally began a redesign/remodelling/cleanup that I have had
in mind for quite some time... moving many things that were
in struct emul into a new struct machine.
Userland emulation now works with bintrans.
Refreshing the LANCE controller (dev_le.c).
Fixing the LK201 keyboard id.
20050120 Continuing on the remodelling/cleanup.
Fixing the SCSI bug (which was triggered sometimes by
NetBSD 2.0/pmax on Linux/i386 hosts).
Adding a speed-limit hack to the mc146818 device when running
in DECstation mode (limiting to emulated 30 MHz clock, so
that Ultrix doesn't freak out).
Adding an ugly workaround for the floating-point bug which
is triggered when running NetBSD/pmax 2.0 on an Alpha host.
The count/compare interrupt will not be triggered now, if
the compare register is left untouched.
Many, many other fixes...
20050121 Continuing the remodelling/cleanup. (Mostly working on the
network stack, and on moving towards multiple emulations
with multiple machines per emulation.)
Fixbug: not clearing lowest parts of lo0 and hi on tlbr
(seems to increase performance when emulating Linux?).
20050122 Continuing the remodelling/cleanup.
Linux on DECstation uses a non-used part of the RTC registers
for the year value; this is supported now, so Linux thinks
it is 2005 and not 2000.
Began hacking on something to reply to Debian's DHCP requests,
but it's not working yet.
20050123 Continuing the remodelling/cleanup.
20050124 Continuing the remodelling/cleanup.
Converting the dev_vga charcell memory to support direct
bintrans access (similar to how dev_fb works), and fixing a
couple of bintrans bugs in the process.
The emulator now compiles under OpenBSD/arc 2.3 without
crashing (mostly due to the bintrans fixes, but also some
minor updates to the configure script).
20050125 Continuing the remodelling/cleanup.
The '-a' option was missing in the Hello World example in the
documentation. (Thanks to Soohyun Cho for noticing this.)
20050126 Continuing the remodelling/cleanup. Moving around stuff in
the header files, etc. Adding a '-K' command line option, which
forces the debugger to be entered at the exit of a simulation,
regardless of failure or success. Beginning to work on the
config file parser.
Splitting doc/index.html into experiments.html, guestoses.html,
intro.html, and misc.html.
Updating the man page and adding a skeleton section about the
configure files to doc/misc.html.
20050127 Minor documentation updates.
20050128 Continuing the remodelling/cleanup, mostly working on the
config file parser (adding a couple of machine words, enough
to run simple emulations, and adding support for multi-line
comments using tuborgs).
Removing some command line options for the least working
emulation modes (-e, -f, -g, -E, -H), adding new -E and -e
options for selecting machine type.
Moving global variables from src/x11.c into struct machine (a
bit buggy, but it seems to almost work).
20050129 Removing the Playstation 2 mode (-B) and hpcmips modes (-F)
from the command line as well.
Changing the -T command line option from meaning "trace on bad
address" to meaning "enter the single-step debugger on bad
address".
More updates to the configuration file parser (nested tuborg
comments, more options, ...).
Making -s a global setting, not just affecting one machine.
Trying to fix the X11 event stuff... but it's so ugly that it
must be rewritten later.
Continuing the multi-emul cleanup.
Bugfixes and other updates to dev_vga.
20050130 Continuing the remodelling/cleanup. Finally moving out the
MIPS dependant stuff of the cpu struct into its own struct.
Renaming cpu.c to cpu_mips.c, and cpu_common.c to cpu.c.
Adding a dummy cpu_ppc.c.
Removing the UltraSPARC bintrans backend.
Many other minor updates.
src/file.c should now be free from MIPS-dependancies.
20050131 Continuing a little bit more on src/file.c. PPC ELFs can now
be loaded, it seems.
Continuing on src/cpu_ppc.c.
'mips' is undefined by the configure script, if it is defined
by default. (Fixes build on at least OpenBSD/arc and
NetBSD/arc, where gcc defines 'mips'.)
A couple of other minor fixes.
Removing the "Changing framebuffer resolution" section from
doc/misc.h (because it's buggy and not very useful anway).
Adding a mystrtoull(), used on systems where there is no
strtoull() in libc.
Adding 'add_x11_display' to the configure file parser
(corresponding to the -z command line option).
Continuing the multi-emul machine cleanup.
20050201 Minor updates (man page, RELEASE, README).
Continuing the cleanup.
Adding a 'name' field to the emul struct, and adding a command
to the debugger ("focus") to make it possible to switch focus
to different machines (in different emuls).
Beginning to work on the PPC disassembler etc. Hello World
for linux-ppc64 can be disassembled :-)
20050202 Adding a hack for reading symbols from Microsoft's variant of
COFF files.
Adding a dummy cpu_sparc.c and include/cpu_sparc.h.
Cleaning up more to support multiple cpu families.
Various other minor updates.
Fixing another old-gcc-on-Alpha problem.
20050203 Bintrans cache size is now variable, settable by a new
configuration file option 'bintrans_size'.
The debugger can now theoretically call disassembler functions
for cpu families with non-fixed instruction word length.
Working more on the mec controller. It now works well enough
to let both NetBSD/sgimips and OpenBSD/sgi connect to the
outside world using ftp :-)
Continuing on the cleanup of the networking subsystem.
20050204 Continuing the cleanup.
Working on a way to use separate xterms for serial ports and
other console input, when emulating multiple machines (or one
machine with multiple serial lines active).
20050205 Minor documentation updates.
20050206 Moving console.c from devices/ to src/, and continuing the
work on using separate windows for each serial console.
Trying to get OpenBSD/sgi to boot with root-on-nfs on an
emulated NetBSD/pmax server, but no success in setting up
the server yet.
20050207 Continuing on the console cleanup.
Adding a 'start_paused' configuration file option, and a
'pause' command to the debugger.
20050208 Everything now builds with --withoutmips.
Continuing on the documentation on how to run OpenBSD/sgi, but
no actual success yet.
sizeof => (int)sizeof in the configure script (as suggested by
Nils Weller).
20050209 Adding a check for -lm to the configure script.
Continuing on the cleanup: trying to make memory_rw non-MIPS
dependant.
Trying to make a better fix for the cdrom-block-size problems
on FreeBSD. (It now works with a Windows NT 4.0 cdrom in my
drive.)
Began a clean-up of the userland subsystem.
20050210 Continuing the userland cleanup.
IBM's Hello World example for Linux/PPC64 runs fine now.
20050211 Continuing the cleanup. Removing the --userland configure
option (because support for userland is always included now).
Working more on getting OpenBSD/sgi to boot with root on
nfs. (Booting with the ramdisk kernel, and mounting root via
nfs works, but not yet from the generic kernel.)
Major update to the manpage.
Removing the -G command line option (SGI modes).
20050212 Updating the documentation (experimental devices: dev_cons
and dev_mp, better hello.c, and some other things).
20050213 Some minor fixes: documentation, 80 columns in some source
files, better configure script options.
Adding some more PPC instructions.
Added a NOFPU flag to the MIPS cpu flags, so that executing
FPU instructions on for example VR4xxx will fail (as suggested
by Alexander Yurchenko).
20050214 Implementing more PPC instructions.
Adding dev_pmppc.
20050215 Continuing the work on PPC emulation. Adding a (mostly non-
working) NetBSD/powerpc userland mode, a (buggy)
show_trace_tree thing (simliar to the MIPS version).
20050216 Continuing...
20050218 Continuing the clean-up. (Merging the devices and devstate
debugger commands, more 80-column cleanup, some documentation
updates, ...).
20050219 Removing the -D, -A, and -a command line options. Updating the
documentation, in preparation for the next release.
Adding interrupt stuff to dev_cons.
Single-stepping now looks/works better with bintrans enabled.
Beginning the first phase of release testing; various minor
updates to make everything build cleanly on Solaris.
20050220 Continuing testing for the release...
============== RELEASE 0.3 ==============
20050221 Minor updates. Some more clean-up.
Beginning on the new device registry stuff.
20050222 Continuing on the device stuff, and doing various other kinds
of clean-up.
Adding a dummy BeBox mode.
Making the pc register common for all cpu families.
Adding some more PPC instructions and fixing some bugs.
20050223 Continuing on the BeBox stuff, and adding more instructions.
Adding an ns16550 to the VR4131 emulation (which is probably
a close enough fake to the VR4131's SIU unit).
20050224 Minor updates. Adding dummy PReP, macppc, and DB64360 modes.
Continuing on the device registry rewrite.
20050225 Continuing on the device stuff.
20050226 Continuing more on the device rewrite.
Separating the "testmips" machine into testmips and baremips
(and similarly with the ppc machine).
Redesigning the device registry again :-)
Adding a "device" command to the config file parser.
Adding "device add" and "device remove" to the debugger.
Removing pcidevs.h, because it was almost unused.
20050228 Correcting the Sprite disk image url in the documentation.
20050301 Adding an URISC cpu emulation mode (single-opcode machine).
20050303 Adding some files to the experiments directory (rssb_as.c,
rssb_as.README, urisc_test.s).
Continuing on the device stuff.
20050304 Minor documentation update. Also, the SPARC, PPC, and URISC
modes are now enabled by default in the configure script.
Some minor PPC updates (adding a VGA device to the bebox
emulation mode).
20050305 Moving the static i386 bintrans runchunk code snippet (and the
others) to be dynamically generated. (This allows the code to
compile on i386 with old gcc.)
Loading PPC64 ELFs now sets R2 to the TOC base.
Changing the name of the emulator from mips64emul to GXemul.
Splitting out the configuration file part of the documentation
into its own file (configfiles.html).
20050306 Some really minor documentation updates.
Adding a -D command line option (for "fully deterministic"
behaviour).
20050308 Minor PPC updates. Adding a dummy OpenFirmware emulation layer.
20050309 Adding a hack for systems without inet_pton (such as Cygwin in
Windows) as suggested by Soohyun Cho. (And updating the
configure script too.)
Adding a dummy HPPA cpu family.
Some more OpenFirmware updates.
Faster loading of badly aligned ELF regions.
20050311 Minor updates. Adding a dummy "NEC MobilePro 780" hpcmips
machine mode; disabling direct bintrans access to framebuffers
that are not 4K page aligned.
20050312 Adding an ugly KIU hack to the VR41xx device (which enables
NetBSD/hpcmips MobilePro 780 keyboard input).
20050313 Adding a dummy "pcic" device (a pcmcia card controller).
Adding a dummy Alpha cpu emulation mode.
Fixing a strcmp length bug (thanks to Alexander Yurchenko for
noticing the bug).
20050314 Some minor bintrans-related updates in preparation for a new
bintrans subsystem: command line option -b now means "old
bintrans", -B means "disable bintrans", and using no option at
all selects "new bintrans".
Better generation of MAC addresses when emulating multiple
machines and/or NICs.
Minor documentation updates (regarding configuration files).
20050315 Adding dummy standby, suspend, and hibernate MIPS opcodes.
RTC interrupt hack for VR4121 (hpcmips).
Enough of the pcic is now emulated to let NetBSD/hpcmips detect
a PCMCIA harddisk controller card (but there is no support for
ISA/PCMCIA interrupts yet).
Adding preliminary instructions on how to install
NetBSD/hpcmips.
Continuing the attempt to get harddisks working with interrupts
(pcic, wdc on hpcmips).
20050318 Minor updates. (Fixing disassembly of MIPS bgtz etc.,
continuing on the device cleanup, ...)
20050319 Minor updates.
20050320 Minor updates.
20050322 Various minor updates.
20050323 Some more minor updates.
20050328 VR41xx-related updates (keyboard stuff: the space key and
shifted and ctrled keys are now working in userland (ie
NetBSD/hpcmips' ramdisk installer).
Also adding simple cursor key support to the VR41xx kiu.
20050329 Some progress on the wdc.
Updating the documentation of how to (possibly) install
NetBSD/hpcmips, once it is working.
Adding delays before wdc interrupts; this allows NetBSD
2.0/hpcmips to be successfully installed!
Mirroring physical addresses 0x8....... to 0x00000000 on
hpcmips; this makes it possible to run X11 inside
NetBSD/hpcmips :-)
Updating the documentation regarding NetBSD/hpcmips.
Fixing 16-bit vs 15-bit color in dev_fb.
20050330 Print a warning when the user attempts to load a gzipped
file. (Thanks to Juan RP for making me aware of this "bug".)
20050331 Importing aic7xxx_reg.h from NetBSD.
Adding a "-x" command line option, which forces xterms for
each emulated serial port to always be opened.
Adding a MobilePro 770 mode (same as 780, but different
framebuffer address which allows bintrans = fast scrolling),
and a MobilePro 800 (with 800x600 pixels framebuffer :-).
20050401 Minor updates.
20050402 Minor updates. (The standby and suspend instructions are
bintransed as NOPs, and some minor documentation updates.)
20050403 Adding an Agenda VR3 mode, and playing around with a Linux
kernel image, but not much success yet.
Changing BIFB_D16_FFFF -> BIFB_D16_0000 for the hpcmips
framebuffers, causing NetBSD to boot with correct colors.
New syntax for loading raw files: loadaddr:skiplen:
initialpc:filename. (This is necessary to boot the Linux VR3
kernels.)
The Linux VR3 kernel boots in both serial console mode and
using the framebuffer, but it panics relatively early.
20050404 Continuing on the AHC, and some other minor updates.
20050405 Adding a note in doc/experimental.html about "root1.2.6.cramfs"
(thanks to Alec Voropay for noticing that it wasn't part
of root1.2.6.kernel-8.00).
Also adding a note about another cramfs image.
-o options are now added to the command line passed to the
Linux kernel, when emulating the VR3.
Adding a MobilePro 880 mode, and a dummy IBM WorkPad Z50 mode.
20050406 Connecting the VR3 serial controller to irq 9 (Linux calls this
irq 17), and some other interrupt-related cleanups.
Reducing the memory overhead per bintranslated page. (Hopefully
this makes things faster, or at least not slower...)
20050407 Some more cleanup regarding command line argument passing for
the hpcmips modes.
Playing with Linux kernels for MobilePro 770 and 800; they get
as far as mounting a root filesystem, but then crash.
Doing some testing for the next release.
============== RELEASE 0.3.1 ==============
20050408 Some minor updates to the wdc. Linux now doesn't complain
anymore if a disk is non-present.
20050409 Various minor fixes (a bintrans bug, and some other things).
The wdc seems to work with Playstation2 emulation, but there
is a _long_ annoying delay when disks are detected.
Fixing a really important bintrans bug (when devices and RAM
are mixed within 4KB pages), which was triggered with
NetBSD/playstation2 kernels.
20050410 Adding a dummy dev_ps2_ether (just so that NetBSD doesn't
complain as much during bootup).
Symbols starting with '$' are now ignored.
Renaming dev_ps2_ohci.c to dev_ohci.c, etc.
20050411 Moving the bintrans-cache-isolation check from cpu_mips.c to
cpu_mips_coproc.c. (I thought this would give a speedup, but
it's not noticable.)
Better playstation2 sbus interrupt code.
Skip ahead many ticks if the count register is read manually.
(This increases the speed of delay-loops that simply read
the count register.)
20050412 Updates to the playstation2 timer/interrupt code.
Some other minor updates.
20050413 NetBSD/cobalt runs from a disk image :-) including userland;
updating the documentation on how to install NetBSD/cobalt
using NetBSD/pmax (!).
Some minor bintrans updates (no real speed improvement) and
other minor updates (playstation2 now uses the -o options).
20050414 Adding a dummy x86 (and AMD64) mode.
20050415 Adding some (32-bit and 16-bit) x86 instructions.
Adding some initial support for non-SCSI, non-IDE floppy
images. (The x86 mode can boot from these, more or less.)
Moving the devices/ and include/ directories to src/devices/
and src/include/, respectively.
20050416 Continuing on the x86 stuff. (Adding pc_bios.c and some simple
support for software interrupts in 16-bit mode.)
20050417 Ripping out most of the x86 instruction decoding stuff, trying
to rewrite it in a cleaner way.
Disabling some of the least working CPU families in the
configure script (sparc, x86, alpha, hppa), so that they are
not enabled by default.
20050418 Trying to fix the bug which caused problems when turning on
and off bintrans interactively, by flushing the bintrans cache
whenever bintrans is manually (re)enabled.
20050419 Adding the 'lswi' ppc instruction.
Minor updates to the x86 instruction decoding.
20050420 Renaming x86 register name indices from R_xx to X86_R_xx (this
makes building on Tru64 nicer).
20050422 Adding a check for duplicate MIPS TLB entries on tlbwr/tlbwi.
20050427 Adding screenshots to guestoses.html.
Some minor fixes and testing for the next release.
============== RELEASE 0.3.2 ==============
20050428 Disabling the "-fmove-all-movables" option in the configure
script, because it causes the compile to fail on OpenBSD/sgi.
20050502 Minor updates.
20050503 Removing the WRT54G mode (it was bogus anyway), and adding a
comment about Windows NT for MIPS in doc/experiments.html.
Minor updates to the x86 instruction decoding.
20050504 Adding some more x86 instructions.
Adding support for reading files from ISO9660 CDROMs (including
gzipped files). It's an ugly hack, but it seems to work.
Various other minor updates (dev_vga.c, pc_bios.c etc).
20050505 Some more x86-related updates.
Beginning (what I hope will be) a major code cleanup phase.
"bootris" (an x86 bootsector) runs :-)
20050506 Adding some more x86 instructions.
20050507 tmpnam => mkstemp.
Working on a hack to allow VGA charcells to be shown even when
not running with X11.
Adding more x86 instructions.
20050508 x86 32-bit SIB addressing fix, and more instructions.
20050509 Adding more x86 instructions.
20050510 Minor documentation updates, and other updates (x86 stuff etc.)
20050511 More x86-related updates.
20050513 Various updates, mostly x86-related. (Trying to fix flag
calculation, factoring out the ugly shift/rotate code, and
some other things.)
20050514 Adding support for loading some old i386 a.out executables.
Finally beginning the cleanup of machine/PROM/bios dependant
info.
Some minor documentation updates.
Trying to clean up ARCBIOS stuff a little.
20050515 Trying to make it possible to actually use more than one disk
type per machine (floppy, ide, scsi).
Trying to clean up the kbd vs PROM console stuff. (For PC and
ARC emulation modes, mostly.)
Beginning to add an 8259 interrupt controller, and connecting
it to the x86 emulation.
20050516 The first x86 interrupts seem to work (keyboard stuff).
Adding a 8253/8254 programmable interval timer skeleton.
FreeDOS now reaches a command prompt and can be interacted
with.
20050517 After some bugfixes, MS-DOS also (sometimes) reaches a
command prompt now.
Trying to fix the pckbc to work with MS-DOS' keyb.com, but no
success yet.
20050518 Adding a simple 32-bit x86 MMU skeleton.
20050519 Some more work on the x86 stuff. (Beginning the work on paging,
and various other fixes).
20050520 More updates. Working on dev_vga (4-bit graphics modes), adding
40 columns support to the PC bios emulation.
Trying to add support for resizing windows when switching
between graphics modes.
20050521 Many more x86-related updates.
20050522 Correcting the initial stack pointer's sign-extension for
ARCBIOS emulation (thanks to Alec Voropay for noticing the
error).
Continuing on the cleanup (ARCBIOS etc).
dev_vga updates.
20050523 More x86 updates: trying to add some support for protected mode
interrupts (via gate descriptors) and many other fixes.
More ARCBIOS cleanup.
Adding a device flag which indicates that reads cause no
side-effects. (Useful for the "dump" command in the debugger,
and other things.)
Adding support for directly starting up x86 ELFs, skipping the
bootloader stage. (Most ELFs, however, are not suitable for
this.)
20050524 Adding simple 32-bit x86 TSS task switching, but no privilege
level support yet.
More work on dev_vga. A small "Copper bars" demo works. :-)
Adding support for Trap Flag (single-step exceptions), at least
in real mode, and various other x86-related fixes.
20050525 Adding a new disk image prefix (gH;S;) which can be used to
override the default nr of heads and sectors per track.
20050527 Various bug fixes, more work on the x86 mode (stack change on
interrupts between different priv.levels), and some minor
documentation updates.
20050528 Various fixes (x86 stuff).
20050529 More x86 fixes. An OpenBSD/i386 bootfloppy reaches userland
and can be interacted with (although there are problems with
key repetition). NetBSD/i386 triggers a serious CISC-related
problem: instruction fetches across page boundaries, where
the later part isn't actually part of the instruction.
20050530 Various minor updates. (Documentation updates, etc.)
20050531 Adding some experimental code (experiments/new_test_*) which
could be useful for dynamic (but not binary) translation in
the future.
20050602 Adding a dummy ARM skeleton.
Fixing the pckbc key repetition problem (by adding release
scancodes for all keypresses).
20050603 Minor updates for the next release.
20050604 Release testing. Minor updates.
============== RELEASE 0.3.3 ==============
20050604 There'll probably be a 0.3.3.1 release soon, with some very
very tiny updates.
============== RELEASE 0.3.3.1 ==============
20050609 Adding simple MIPS IPIs (to dev_mp).
20050611 Adding an ugly hack to track down low-reference bugs
(define TRACE_NULL_CRASHES, or configure --tracenull).
Other minor updates.
20050612 Adding a dummy evbmips mode.
============== RELEASE 0.3.3.2 ==============
20050617 Experimenting some more with netbooting OpenBSD/sgi. Adding
a hack which allows emulated ethernet networks to be
distributed across multiple emulator processes.
20050618 Minor updates (documentation, dummy YAMON emulation, etc).
20050620 strcpy/strcat -> strlcpy/strlcat updates.
Some more progress on evbmips (Malta).
20050621 Adding a section to doc/configfiles.html about ethernet
emulation across multiple hosts.
Beginning the work on the ARM translation engine (using the
dynamic-but-not-binary translation method).
Fixing a bintrans bug: 0x9fc00000 should always be treated as
PROM area, just as 0xbfc00000 is.
Minor progress on Malta emulation (the PCI-ISA bus).
20050622 NetBSD/evbmips can now be installed (using another emulated
machine) and run (including userland and so on). :-)
Spliting up the bintrans haddr_entry field into two (one for
read, one for write). Probably not much of a speed increase,
though.
Updating some NetBSD 2.0 -> 2.0.2 in the documentation.
20050623 Minor updates (documentation, the TODO file, etc).
gzipped kernels are now always automagically gunzipped when
loaded.
20050624 Adding a dummy Playstation Portable (PSP) mode, just barely
enough to run Hello World (in weird colors :-).
Removing the -b command line option; old bintrans is enabled
by default instead. It makes more sense.
Trying to finally fix the non-working performance measurement
thing (instr/second etc).
20050625 Continuing on the essential basics for ARM emulation. Two
instructions seem to work, a branch and a simple "mov". (The
mov arguments are not correct yet.) Performance is definitely
reasonable.
Various other minor updates.
Adding the ARM "bl" instruction.
Adding support for combining multiple ARM instructions into one
function call. ("mov" + "mov" is the only one implemented so
far, but it seems to work.)
Cleaning up some IP32 interrupt things (crime/mace); disabling
the PS/2 keyboard controller on IP32, so that NetBSD/sgimips
boots into userland again.
20050626 Finally! NetBSD/sgimips netboots. Adding instructions to
doc/guestoses.html on how to set up an nfs server etc.
Various other minor fixes.
Playstation Portable ".pbp" files can now be used directly.
(The ELF part of the .pbp is extracted transparently.)
Converting some sprintf -> snprintf.
Adding some more instructions to the ARM disassembler.
20050627 More ARM updates. Adding some simple ldr(b), str(b),
cmps, and conditional branch instructions, enough to run
a simple Hello World program.
All ARM instructions are now inlined/generated for all possible
condition codes.
Adding add and sub, and more load/store instructions.
Removing dummy files: cpu_alpha.c, cpu_hppa.c, and cpu_sparc.c.
Some minor documentation updates; preparing for a 0.3.4
release. Updating some URLs.
============== RELEASE 0.3.4 ==============
20050628 Continuing the work on the ARM translation engine. end_of_page
works. Experimenting with load/store translation caches
(virtual -> physical -> host).
20050629 More ARM stuff (memory access translation cache, mostly). This
might break a lot of stuff elsewhere, probably some MIPS-
related translation things.
20050630 Many load/stores are now automatically generated and included
into cpu_arm_instr.c; 1024 functions in total (!).
Fixes based on feedback from Alec Voropay: only print 8 hex
digits instead of 16 in some cases when emulating 32-bit
machines; similar 8 vs 16 digit fix for breakpoint addresses;
4Kc has 16 TLB entries, not 48; the MIPS config select1
register is now printed with "reg ,0".
Also changing many other occurances of 16 vs 8 digit output.
Adding cache associativity fields to mips_cpu_types.h; updating
some other cache fields; making the output of
mips_cpu_dumpinfo() look nicer.
Generalizing the bintrans stuff for device accesses to also
work with the new translation system. (This might also break
some MIPS things.)
Adding multi-load/store instructions to the ARM disassembler
and the translator, and some optimizations of various kinds.
20050701 Adding a simple dev_disk (it can read/write sectors from
disk images).
20050712 Adding dev_ether (a simple ethernet send/receive device).
Debugger command "ninstrs" for toggling show_nr_of_instructions
during runtime.
Removing the framebuffer logo.
20050713 Continuing on dev_ether.
Adding a dummy cpu_alpha (again).
20050714 More work on cpu_alpha.
20050715 More work on cpu_alpha. Many instructions work, enough to run
a simple framebuffer fill test (similar to the ARM test).
20050716 More Alpha stuff.
20050717 Minor updates (Alpha stuff).
20050718 Minor updates (Alpha stuff).
20050719 Generalizing some Alpha instructions.
20050720 More Alpha-related updates.
20050721 Continuing on cpu_alpha. Importing rpb.h from NetBSD/alpha.
20050722 Alpha-related updates: userland stuff (Hello World using
write() compiled statically for FreeBSD/Alpha runs fine), and
more instructions are now implemented.
20050723 Fixing ldq_u and stq_u.
Adding more instructions (conditional moves, masks, extracts,
shifts).
20050724 More FreeBSD/Alpha userland stuff, and adding some more
instructions (inserts).
20050725 Continuing on the Alpha stuff. (Adding dummy ldt/stt.)
Adding a -A command line option to turn off alignment checks
in some cases (for translated code).
Trying to remove the old bintrans code which updated the pc
and nr_of_executed_instructions for every instruction.
20050726 Making another attempt att removing the pc/nr of instructions
code. This time it worked, huge performance increase for
artificial test code, but performance loss for real-world
code :-( so I'm scrapping that code for now.
Tiny performance increase on Alpha (by using ret instead of
jmp, to play nice with the Alpha's branch prediction) for the
old MIPS bintrans backend.
20050727 Various minor fixes and cleanups.
20050728 Switching from a 2-level virtual to host/physical translation
system for ARM emulation, to a 1-level translation.
Trying to switch from 2-level to 1-level for the MIPS bintrans
system as well (Alpha only, so far), but there is at least one
problem: caches and/or how they work with device mappings.
20050730 Doing the 2-level to 1-level conversion for the i386 backend.
The cache/device bug is still there for R2K/3K :(
Various other minor updates (Malta etc).
The mc146818 clock now updates the UIP bit in a way which works
better with Linux for at least sgimips and Malta emulation.
Beginning the work on refactoring the dyntrans system.
20050731 Continuing the dyntrans refactoring.
Fixing a small but serious host alignment bug in memory_rw.
Adding support for big-endian load/stores to the i386 bintrans
backend.
Another minor i386 bintrans backend update: stores from the
zero register are now one (or two) loads shorter.
The slt and sltu instructions were incorrectly implemented for
the i386 backend; only using them for 32-bit mode for now.
20050801 Continuing the dyntrans refactoring.
Cleanup of the ns16550 serial controller (removing unnecessary
code).
Bugfix (memory corruption bug) in dev_gt, and a patch/hack from
Alec Voropay for Linux/Malta.
20050802 More cleanup/refactoring of the dyntrans subsystem: adding
phys_page pointers to the lookup tables, for quick jumps
between translated pages.
Better fix for the ns16550 device (but still no real FIFO
functionality).
Converting cpu_ppc to the new dyntrans system. This means that
I will have to start from scratch with implementing each
instruction, and figure out how to implement dual 64/32-bit
modes etc.
Removing the URISC CPU family, because it was useless.
20050803 When selecting a machine type, the main type can now be omitted
if the subtype name is unique. (I.e. -E can be omitted.)
Fixing a dyntrans/device update bug. (Writes to offset 0 of
a device could sometimes go unnoticed.)
Adding an experimental "instruction combination" hack for
ARM for memset-like byte fill loops.
20050804 Minor progress on cpu_alpha and related things.
Finally fixing the MIPS dmult/dmultu bugs.
Fixing some minor TODOs.
20050805 Generalizing the 8259 PIC. It now also works with Cobalt
and evbmips emulation, in addition to the x86 hack.
Finally converting the ns16550 device to use devinit.
Continuing the work on the dyntrans system. Thinking about
how to add breakpoints.
20050806 More dyntrans updates. Breakpoints seem to work now.
20050807 Minor updates: cpu_alpha and related things; removing
dev_malta (as it isn't used any more).
Dyntrans: working on general "show trace tree" support.
The trace tree stuff now works with both the old MIPS code and
with newer dyntrans modes. :)
Continuing on Alpha-related stuff (trying to get *BSD to boot
a bit further, adding more instructions, etc).
20050808 Adding a dummy IA64 cpu family, and continuing the refactoring
of the dyntrans system.
Removing the regression test stuff, because it was more or
less useless.
Adding loadlinked/storeconditional type instructions to the
Alpha emulation. (Needed for Linux/alpha. Not very well tested
yet.)
20050809 The function call trace tree now prints a per-function nr of
arguments. (Semi-meaningless, since that data isn't read yet
from the ELFs; some hardcoded symbols such as memcpy() and
strlen() work fine, though.)
More dyntrans refactoring; taking out more of the things that
are common to all cpu families.
20050810 Working on adding support for "dual mode" for PPC dyntrans
(i.e. both 64-bit and 32-bit modes).
(Re)adding some simple PPC instructions.
20050811 Adding a dummy M68K cpu family. The dyntrans system isn't ready
for variable-length ISAs yet, so it's completely bogus so far.
Re-adding more PPC instructions.
Adding a hack to src/file.c which allows OpenBSD/mac68k a.out
kernels to be loaded.
Beginning to add PPC loads/stores. So far they only work in
32-bit mode.
20050812 The configure file option "add_remote" now accepts symbolic
host names, in addition to numeric IPv4 addresses.
Re-adding more PPC instructions.
20050814 Continuing to port back more PPC instructions.
Found and fixed the cache/device write-update bug for 32-bit
MIPS bintrans. :-)
Triggered a really weird and annoying bug in Compaq's C
compiler; ccc sometimes outputs code which loads from an
address _before_ checking whether the pointer was NULL or not.
(I'm not sure how to handle this problem.)
20050815 Removing all of the old x86 instruction execution code; adding
a new (dummy) dyntrans module for x86.
Taking the first steps to extend the dyntrans system to support
variable-length instructions.
Slowly preparing for the next release.
20050816 Adding a dummy SPARC cpu module.
Minor updates (documentation etc) for the release.
============== RELEASE 0.3.5 ==============
20050816 Some success in decoding the way the SGI O2 PROM draws graphics
during bootup; lines/rectangles and bitmaps work, enough to
show the bootlogo etc. :-)
Adding more PPC instructions, and (dummy) BAT registers.
20050817 Updating the pckbc to support scancode type 3 keyboards
(required in order to interact with the SGI O2 PROM).
Adding more PPC instructions.
20050818 Adding more ARM instructions; general register forms.
Importing armreg.h from NetBSD (ARM cpu ids). Adding a (dummy)
CATS machine mode (using SA110 as the default CPU).
Continuing on general dyntrans related stuff.
20050819 Register forms for ARM load/stores. Gaah! The Compaq C Compiler
bug is triggered for ARM loads as well, not just PPC :-(
Adding full support for ARM PC-relative load/stores, and load/
stores where the PC register is the destination register.
Adding support for ARM a.out binaries.
20050820 Continuing to add more ARM instructions, and correcting some
bugs. Continuing on CATS emulation.
More work on the PPC stuff.
20050821 Minor PPC and ARM updates. Adding more machine types.
20050822 All ARM "data processing instructions" are now generated
automatically.
20050824 Beginning the work on the ARM system control coprocessor.
Adding support for ARM halfword load/stores, and signed loads.
20050825 Fixing an important bug related to the ARM condition codes.
OpenBSD/zaurus and NetBSD/netwinder now print some boot
messages. :)
Adding a dummy SH (Hitachi SuperH) cpu family.
Beginning to add some ARM virtual address translation.
MIPS bugfixes: unaligned PC now cause an ADEL exception (at
least for non-bintrans execution), and ADEL/ADES (not
TLBL/TLBS) are used if userland tries to access kernel space.
(Thanks to Joshua Wise for making me aware of these bugs.)
20050827 More work on the ARM emulation, and various other updates.
20050828 More ARM updates.
Finally taking the time to work on translation invalidation
(i.e. invalidating translated code mappings when memory is
written to). Hopefully this doesn't break anything.
20050829 Moving CPU related files from src/ to a new subdir, src/cpus/.
Moving PROM emulation stuff from src/ to src/promemul/.
Better debug instruction trace for ARM loads and stores.
20050830 Various ARM updates (correcting CMP flag calculation, etc).
20050831 PPC instruction updates. (Flag fixes, etc.)
20050901 Various minor PPC and ARM instruction emulation updates.
Minor OpenFirmware emulation updates.
20050903 Adding support for adding arbitrary ARM coprocessors (with
the i80321 I/O coprocessor as a first test).
Various other ARM and PPC updates.
20050904 Adding some SHcompact disassembly routines.
20050907 (Re)adding a dummy HPPA CPU module, and a dummy i960 module.
20050908 Began hacking on some Apple Partition Table support.
20050909 Adding support for loading Mach-O (Darwin PPC) binaries.
20050910 Fixing an ARM bug (Carry flag was incorrectly updated for some
data processing instructions); OpenBSD/cats and NetBSD/
netwinder get quite a bit further now.
Applying a patch to dev_wdc, and a one-liner to dev_pcic, to
make them work better when emulating new versions of OpenBSD.
(Thanks to Alexander Yurchenko for the patches.)
Also doing some other minor updates to dev_wdc. (Some cleanup,
and finally converting to devinit, etc.)
20050912 IRIX doesn't have u_int64_t by default (noticed by Andreas
<avr@gnulinux.nl>); configure updated to reflect this.
Working on ARM register bank switching, CPSR vs SPSR issues,
and beginning the work on interrupt/exception support.
20050913 Various minor ARM updates (speeding up load/store multiple,
and fixing a ROR bug in R(); NetBSD/cats now boots as far as
OpenBSD/cats).
20050917 Adding a dummy Atmel AVR (8-bit) cpu family skeleton.
20050918 Various minor updates.
20050919 Symbols are now loaded from Mach-O executables.
Continuing the work on adding ARM exception support.
20050920 More work on ARM stuff: OpenBSD/cats and NetBSD/cats reach
userland! :-)
20050921 Some more progress on ARM interrupt specifics.
20050923 Fixing linesize for VR4121 (patch by Yurchenko). Also fixing
linesizes/cachesizes for some other VR4xxx.
Adding a dummy Acer Labs M1543 PCI-ISA bridge (for CATS) and a
dummy Symphony Labs 83C553 bridge (for Netwinder), usable by
dev_footbridge.
20050924 Some PPC progress.
20050925 More PPC progress.
20050926 PPC progress (fixing some bugs etc); Darwin's kernel gets
slightly further than before.
20050928 Various updates: footbridge/ISA/pciide stuff, and finally
fixing the VGA text scroll-by-changing-the-base-offset bug.
20050930 Adding a dummy S3 ViRGE pci card for CATS emulation, which
both NetBSD and OpenBSD detects as VGA.
Continuing on Footbridge (timers, ISA interrupt stuff).
20051001 Continuing... there are still bugs, probably interrupt-
related.
20051002 More work on the Footbridge (interrupt stuff).
20051003 Various minor updates. (Trying to find the bug(s).)
20051004 Continuing on the ARM stuff.
20051005 More ARM-related fixes.
20051007 FINALLY! Found and fixed 2 ARM bugs: 1 memory related, and the
other was because of an error in the ARM manual (load multiple
with the S-bit set should _NOT_ load usermode registers, as the
manual says, but it should load saved registers, which may or
may not happen to be usermode registers).
NetBSD/cats and OpenBSD/cats seem to install fine now :-)
except for a minor bug at the end of the OpenBSD/cats install.
Updating the documentation, preparing for the next release.
20051008 Continuing with release testing and cleanup.
============== RELEASE 0.3.6 ==============
20051008 The bug was not because of faulty ARM documentation after all,
but it was related to those parts of the code.
Fixing the RTC (dev_mc146818) to work with CATS.
20051009 Rewriting the R() function; now there are 8192 automatically
generated smaller functions doing the same thing, but hopefully
faster. This also fixes some bugs which were triggered when
trying to compile GXemul inside itself. :-)
Adding a dummy dev_lpt.
20051010 Small hack to not update virtual translation tables if memory
accesses are done with the NO_EXCEPTION flag; a time reduction
of almost a factor 2 for a full NetBSD/cats install. :-)
20051011 Passing -A as the default boot arg for CATS (works fine with
OpenBSD/cats).
============== RELEASE 0.3.6.1 ==============
20051012 Fixing the VGA cursor offset bug, and speeding up framebuffer
redraws if character cells contain the same thing as during
the last redraw.
20051013 Adding a slow strd ARM instruction hack.
20051017 Minor updates: Adding a dummy i80321 Verde controller (for
XScale emulation), fixing the disassembly of the ARM "ldrd"
instruction, adding "support" for less-than-4KB pages for ARM
(by not adding them to translation tables).
20051020 Continuing on some HPCarm stuff. A NetBSD/hpcarm kernel prints
some boot messages on an emulated Jornada 720.
Making dev_ram work better with dyntrans (speeds up some things
quite a bit).
20051021 Automatically generating some of the most common ARM load/store
multiple instructions.
20051022 Better statistics gathering for the ARM load/store multiple.
Various other dyntrans and device updates.
20051023 Various minor updates.
20051024 Continuing; minor device and dyntrans fine-tuning. Adding the
first "reasonable" instruction combination hacks for ARM (the
cores of NetBSD/cats' memset and memcpy).
20051025 Fixing a dyntrans-related bug in dev_vga. Also changing the
dyntrans low/high access notification to only be updated on
writes, not reads. Hopefully it will be enough. (dev_vga in
charcell mode now seems to work correctly with both reads and
writes.)
Experimenting with gathering dyntrans statistics (which parts
of emulated RAM that are actually executed), and adding
instruction combination hacks for cache cleaning and a part of
NetBSD's scanc() function.
20051026 Adding a bitmap for ARM emulation which indicates if a page is
(specifically) user accessible; loads and stores with the t-
flag set can now use the translation arrays, which results in
a measurable speedup.
20051027 Dyntrans updates; adding an extra bitmap array for 32-bit
emulation modes, speeding up the check whether a physical page
has any code translations or not (O(n) -> O(1)). Doing a
similar reduction of O(n) to O(1) by avoiding the scan through
the translation entries on a translation update (32-bit mode
only).
Various other minor hacks.
20051029 Quick release, without any testing at all.
============== RELEASE 0.3.6.2 ==============
20051031 Adding disassembly support for more ARM instructions (clz,
smul* etc), and adding a hack to support "new tiny" pages
for StrongARM.
20051101 Minor documentation updates (NetBSD 2.0.2 -> 2.1, and OpenBSD
3.7 -> 3.8, and lots of testing).
Changing from 1-sector PIO mode 0 transfers to 128-sector PIO
mode 3 (in dev_wdc).
Various minor ARM dyntrans updates (pc-relative loads from
within the same page as the instruction are now treated as
constant "mov").
20051102 Re-enabling instruction combinations (they were accidentally
disabled).
Dyntrans TLB entries are now overwritten using a round-robin
scheme instead of randomly. This increases performance.
Fixing a typo in file.c (thanks to Chuan-Hua Chang for
noticing it).
Experimenting with adding ATAPI support to dev_wdc (to make
emulated *BSD detect cdroms as cdroms, not harddisks).
20051104 Various minor updates.
20051105 Continuing on the ATAPI emulation. Seems to work well enough
for a NetBSD/cats installation, but not OpenBSD/cats.
Various other updates.
20051106 Modifying the -Y command line option to allow scaleup with
certain graphic controllers (only dev_vga so far), not just
scaledown.
Some minor dyntrans cleanups.
20051107 Beginning a cleanup up the PCI subsystem (removing the
read_register hack, etc).
20051108 Continuing the cleanup; splitting up some pci devices into a
normal autodev device and some separate pci glue code.
20051109 Continuing on the PCI bus stuff; all old pci_*.c have been
incorporated into normal devices and/or rewritten as glue code
only, adding a dummy Intel 82371AB PIIX4 for Malta (not really
tested yet).
Minor pckbc fix so that Linux doesn't complain.
Working on the DEC 21143 NIC (ethernet mac rom stuff mostly).
Various other minor fixes.
20051110 Some more ARM dyntrans fine-tuning (e.g. some instruction
combinations (cmps followed by conditional branch within the
same page) and special cases for DPIs with regform when the
shifter isn't used).
20051111 ARM dyntrans updates: O(n)->O(1) for just-mark-as-non-
writable in the generic pc_to_pointers function, and some other
minor hacks.
Merging Cobalt and evbmips (Malta) ISA interrupt handling,
and some minor fixes to allow Linux to accept harddisk irqs.
20051112 Minor device updates (pckbc, dec21143, lpt, ...), most
importantly fixing the ALI M1543/M5229 so that harddisk irqs
work with Linux/CATS.
20051113 Some more generalizations of the PCI subsystem.
Finally took the time to add a hack for SCSI CDROM TOCs; this
enables OpenBSD to use partition 'a' (as needed by the OpenBSD
installer), and Windows NT's installer to get a bit further.
Also fixing dev_wdc to allow Linux to detect ATAPI CDROMs.
Continuing on the DEC 21143.
20051114 Minor ARM dyntrans tweaks; ARM cmps+branch optimization when
comparing with 0, and generalizing the xchg instr. comb.
Adding disassembly of ARM mrrc/mcrr and q{,d}{add,sub}.
20051115 Continuing on various PPC things (BATs, other address trans-
lation things, various loads/stores, BeBox emulation, etc.).
Beginning to work on PPC interrupt/exception support.
20051116 Factoring out some code which initializes legacy ISA devices
from those machines that use them (bus_isa).
Continuing on PPC interrupt/exception support.
20051117 Minor Malta fixes: RTC year offset = 80, disabling a speed hack
which caused NetBSD to detect a too fast cpu, and adding a new
hack to make Linux detect a faster cpu.
Continuing on the Artesyn PM/PPC emulation mode.
Adding an Algor emulation skeleton (P4032 and P5064);
implementing some of the basics.
Continuing on PPC emulation in general; usage of unimplemented
SPRs is now easier to track, continuing on memory/exception
related issues, etc.
20051118 More work on PPC emulation (tgpr0..3, exception handling,
memory stuff, syscalls, etc.).
20051119 Changing the ARM dyntrans code to mostly use cpu->pc, and not
necessarily use arm reg 15. Seems to work.
Various PPC updates; continuing on the PReP emulation mode.
20051120 Adding a workaround/hack to dev_mc146818 to allow NetBSD/prep
to detect the clock.
20051121 More cleanup of the PCI bus (memory and I/O bases, etc).
Continuing on various PPC things (decrementer and timebase,
WDCs on obio (on PReP) use irq 13, not 14/15).
20051122 Continuing on the CPC700 controller (interrupts etc) for PMPPC,
and on PPC stuff in general.
Finally! After some bug fixes to the virtual to physical addr
translation, NetBSD/{prep,pmppc} 2.1 reach userland and are
stable enough to be interacted with.
More PCI updates; reverse-endian device access for PowerPC etc.
20051123 Generalizing the IEEE floating point subsystem (moving it out
from src/cpus/cpu_mips_coproc.c into a new src/float_emul.c).
Input via slave xterms was sometimes not really working; fixing
this for ns16550, and a warning message is now displayed if
multiple non-xterm consoles are active.
Adding some PPC floating point support, etc.
Various interrupt related updates (dev_wdc, _ns16550, _8259,
and the isa32 common code in machine.c).
NetBSD/prep can now be installed! :-) (Well, with some manual
commands necessary before running sysinst.) Updating the
documentation and various other things to reflect this.
20051124 Various minor documentation updates.
Continuing the work on the DEC 21143 NIC.
20051125 LOTS of work on the 21143. Both OpenBSD and NetBSD work fine
with it now, except that OpenBSD sometimes gives a time-out
warning.
Minor documentation updates.
============== RELEASE 0.3.7 ==============
20051126 Cobalt and PReP now work with the 21143 NIC.
Continuing on Alpha dyntrans things.
Fixing some more left-shift-by-24 to unsigned.
20051127 Working on OpenFirmware emulation; major cleanup/redesign.
Progress on MacPPC emulation: NetBSD detects two CPUs (when
running with -n 2), framebuffer output (for text) works.
Adding quick-hack Bandit PCI controller and "gc" interrupt
controller for MacPPC.
20051128 Changing from a Bandit to a Uni-North controller for macppc.
Continuing on OpenFirmware and MacPPC emulation in general
(obio controller, and wdc attached to the obio seems to work).
20051129 More work on MacPPC emulation (adding a dummy ADB controller).
Continuing the PCI bus cleanup (endianness and tag composition)
and rewriting all PCI controllers' access functions.
20051130 Various minor PPC dyntrans optimizations.
Manually inlining some parts of the framebuffer redraw routine.
Slowly beginning the conversion of the old MIPS emulation into
dyntrans (but this will take quite some time to get right).
Generalizing quick_pc_to_pointers.
20051201 Documentation update (David Muse has made available a kernel
which simplifies Debian/DECstation installation).
Continuing on the ADB bus controller.
20051202 Beginning a rewrite of the Zilog serial controller (dev_zs).
20051203 Continuing on the zs rewrite (now called dev_z8530); conversion
to devinit style.
Reworking some of the input-only vs output-only vs input-output
details of src/console.c, better warning messages, and adding
a debug dump.
Removing the concept of "device state"; it wasn't really used.
Changing some debug output (-vv should now be used to show all
details about devices and busses; not shown during normal
startup anymore).
Beginning on some SPARC instruction disassembly support.
20051204 Minor PPC updates (WALNUT skeleton stuff).
Continuing on the MIPS dyntrans rewrite.
More progress on the ADB controller (a keyboard is "detected"
by NetBSD and OpenBSD).
Downgrading OpenBSD/arc as a guest OS from "working" to
"almost working" in the documentation.
Progress on Algor emulation ("v3" PCI controller).
20051205 Minor updates.
20051207 Sorting devices according to address; this reduces complexity
of device lookups from O(n) to O(log n) in memory_rw (but no
real performance increase (yet) in experiments).
20051210 Beginning the work on native dyntrans backends (by making a
simple skeleton; so far only for Alpha hosts).
20051211 Some very minor SPARC updates.
20051215 Fixing a bug in the MIPS mul (note: not mult) instruction,
so it also works with non-64-bit emulation. (Thanks to Alec
Voropay for noticing the problem.)
20051216 More work on the fake/empty/simple/skeleton/whatever backend;
performance doesn't increase, so this isn't really worth it,
but it was probably worth it to prepare for a real backend
later.
20051219 More instr call statistics gathering and analysis stuff.
20051220 Another fix for MIPS 'mul'. Also converting mul and {d,}cl{o,z}
to dyntrans.
memory_ppc.c syntax error fix (noticed by Peter Valchev).
Beginning to move out machines from src/machine.c into
individual files in src/machines (in a way similar to the
autodev system for devices).
20051222 Updating the documentation regarding NetBSD/pmax 3.0.
20051223 - " - NetBSD/cats 3.0.
20051225 - " - NetBSD/hpcmips 3.0.
20051226 Continuing on the machine registry redesign.
Adding support for ARM rrx (33-bit rotate).
Fixing some signed/unsigned issues (exposed by gcc -W).
20051227 Fixing the bug which prevented a NetBSD/prep 3.0 install kernel
from starting (triggered when an mtmsr was the last instruction
on a page). Unfortunately not enough to get the kernel to run
as well as the 2.1 kernels did.
20051230 Some dyntrans refactoring.
20051231 Continuing on the machine registry redesign.
20060101-10 Continuing... moving more machines. Moving MD interrupt stuff
from machine.c into a new src/machines/interrupts.c.
20060114 Adding various mvmeppc machine skeletons.
20060115 Continuing on mvme* stuff. NetBSD/mvmeppc prints boot messages
(for MVME1600) and reaches the root device prompt, but no
specific hardware devices are emulated yet.
20060116 Minor updates to the mvme1600 emulation mode; the Eagle PCI bus
seems to work without much modification, and a 21143 can be
detected, interrupts might work (but untested so far).
Adding a fake MK48Txx (mkclock) device, for NetBSD/mvmeppc.
20060121 Adding an aux control register for ARM. (A BIG thank you to
Olivier Houchard for tracking down this bug.)
20060122 Adding more ARM instructions (smulXY), and dev_iq80321_7seg.
20060124 Adding disassembly of more ARM instructions (mia*, mra/mar),
and some semi-bogus XScale and i80321 registers.
20060201-02 Various minor updates. Moving the last machines out of
machine.c.
20060204 Adding a -c command line option, for running debugger commands
before the simulation starts, but after all files have been
loaded.
Minor iq80321-related updates.
20060209 Minor hacks (DEVINIT macro, etc).
Preparing for the generalization of the 64-bit dyntrans address
translation subsystem.
20060216 Adding ARM ldrd (double-register load).
20060217 Continuing on various ARM-related stuff.
20060218 More progress on the ATA/wdc emulation for NetBSD/iq80321.
NetBSD/evbarm can now be installed :-) Updating the docs, etc.
Continuing on Algor emulation.
============== RELEASE 0.3.8 ==============
20060219 Various minor updates. Removing the old MIPS16 skeleton code,
because it will need to be rewritten for dyntrans anyway.
20060220-22 Removing the non-working dyntrans backend support.
Continuing on the 64-bit dyntrans virtual memory generalization.
20060223 More work on the 64-bit vm generalization.
20060225 Beginning on MIPS dyntrans load/store instructions.
Minor PPC updates (64-bit load/store, etc).
Fixes for the variable-instruction-length framework, some
minor AVR updates (a simple Hello World program works!).
Beginning on a skeleton for automatically generating documen-
tation (for devices etc.).
20060226 PPC updates (adding some more 64-bit instructions, etc).
AVR updates (more instructions).
FINALLY found and fixed the zs bug, making NetBSD/macppc
accept the serial console.
20060301 Adding more AVR instructions.
20060304 Continuing on AVR-related stuff. Beginning on a framework for
cycle-accurate device emulation. Adding an experimental "PAL
TV" device (just a dummy so far).
20060305 Adding more AVR instructions.
Adding a dummy epcom serial controller (for TS7200 emulation).
20060310 Removing the emul() command from configuration files, so only
net() and machine() are supported.
Minor progress on the MIPS dyntrans rewrite.
20060311 Continuing on the MIPS dyntrans rewrite (adding more
instructions, etc).
20060315 Adding more instructions (sllv, srav, srlv, bgtz[l], blez[l],
beql, bnel, slti[u], various loads and stores).
20060316 Removing the ALWAYS_SIGNEXTEND_32 option, since it was rarely
used.
Adding more MIPS dyntrans instructions, and fixing bugs.
20060318 Implementing fast loads/stores for MIPS dyntrans (big/little
endian, 32-bit and 64-bit modes).
20060320 Making MIPS dyntrans the default configure option; use
"--enable-oldmips" to use the old bintrans system.
Adding MIPS dyntrans dmult[u]; minor updates.
20060322 Continuing... adding some more instructions.
Adding a simple skeleton for demangling C++ "_ZN" symbols.
20060323 Moving src/debugger.c into a new directory (src/debugger/).
20060324 Fixing the hack used to load PPC ELFs (useful for relocated
Linux/ppc kernels), and adding a dummy G3 machine mode.
20060325-26 Beginning to experiment with GDB remote serial protocol
connections; adding a -G command line option for selecting
which TCP port to listen to.
20060330 Beginning a major cleanup to replace things like "0x%016llx"
with more correct "0x%016"PRIx64, etc.
Continuing on the GDB remote serial protocol support.
20060331 More cleanup, and some minor GDB remote progress.
20060402 Adding a hack to the configure script, to allow compilation
on systems that lack PRIx64 etc.
20060406 Removing the temporary FreeBSD/arm hack in dev_ns16550.c and
replacing it with a better fix from Olivier Houchard.
20060407 A remote debugger (gdb or ddd) can now start and stop the
emulator using the GDB remote serial protocol, and registers
and memory can be read. MIPS only for now.
20060408 More GDB progress: single-stepping also works, and also adding
support for ARM, PowerPC, and Alpha targets.
Continuing on the delay-slot-across-page-boundary issue.
20060412 Minor update: beginning to add support for the SPARC target
to the remote GDB functionality.
20060414 Various MIPS updates: adding more instructions for dyntrans
(eret, add), and making some exceptions work. Fixing a bug
in dmult[u].
Implementing the first SPARC instructions (sethi, or).
20060415 Adding "magic trap" instructions so that PROM calls can be
software emulated in MIPS dyntrans.
Adding more MIPS dyntrans instructions (ddiv, dadd) and
fixing another bug in dmult.
20060416 More MIPS dyntrans progress: adding [d]addi, movn, movz, dsllv,
rfi, an ugly hack for supporting R2000/R3000 style faked caches,
preliminary interrupt support, and various other updates and
bugfixes.
20060417 Adding more SPARC instructions (add, sub, sll[x], sra[x],
srl[x]), and useful SPARC header definitions.
Adding the first (trivial) x86/AMD64 dyntrans instructions (nop,
cli/sti, stc/clc, std/cld, simple mov, inc ax). Various other
x86 updates related to variable instruction length stuff.
Adding unaligned loads/stores to the MIPS dyntrans mode (but
still using the pre-dyntrans (slow) imlementation).
20060419 Fixing a MIPS dyntrans exception-in-delay-slot bug.
Removing the old "show opcode statistics" functionality, since
it wasn't really useful and isn't implemented for dyntrans.
Single-stepping (or running with instruction trace) now looks
ok with dyntrans with delay-slot architectures.
20060420 Minor hacks (removing the -B command line option when compiled
for non-bintrans, and some other very minor updates).
Adding (slow) MIPS dyntrans load-linked/store-conditional.
20060422 Applying fixes for bugs discovered by Nils Weller's nwcc
(static DEC memmap => now per machine, and adding an extern
keyword in cpu_arm_instr.c).
Finally found one of the MIPS dyntrans bugs that I've been
looking for (copy/paste spelling error BIG vs LITTLE endian in
cpu_mips_instr_loadstore.c for 16-bit fast stores).
FINALLY found the major MIPS dyntrans bug: slti vs sltiu
signed/unsigned code in cpu_mips_instr.c. :-)
Adding more MIPS dyntrans instructions (lwc1, swc1, bgezal[l],
ctc1, tlt[u], tge[u], tne, beginning on rdhwr).
NetBSD/hpcmips can now reach userland when using dyntrans :-)
Adding some more x86 dyntrans instructions.
Finally removed the old Alpha-specific virtual memory code,
and replaced it with the generic 64-bit version.
Beginning to add disassembly support for SPECIAL3 MIPS opcodes.
20060423 Continuing on the delay-slot-across-page-boundary issue;
adding an end_of_page2 ic slot (like I had planned before, but
had removed for some reason).
Adding a quick-and-dirty fallback to legacy coprocessor 1
code (i.e. skipping dyntrans implementation for now).
NetBSD/hpcmips and NetBSD/pmax (when running on an emulated
R4400) can now be installed and run. :-) (Many bugs left
to fix, though.)
Adding more MIPS dyntrans instructions: madd[u], msub[u].
Cleaning up the SPECIAL2 vs R5900/TX79/C790 "MMI" opcode
maps somewhat (disassembly and dyntrans instruction decoding).
20060424 Adding an isa_revision field to mips_cpu_types.h, and making
sure that SPECIAL3 opcodes cause Reserved Instruction
exceptions on MIPS32/64 revisions lower than 2.
Adding the SPARC 'ba', 'call', 'jmpl/retl', 'and', and 'xor'
instructions.
20060425 Removing the -m command line option ("run at most x
instructions") and -T ("single_step_on_bad_addr"), because
they never worked correctly with dyntrans anyway.
Freshening up the man page.
20060428 Adding more MIPS dyntrans instructions: bltzal[l], idle.
Enabling MIPS dyntrans compare interrupts.
20060429 FINALLY found the weird dyntrans bug, causing NetBSD etc. to
behave strangely: some floating point code (conditional
coprocessor branches) could not be reused from the old
non-dyntrans code. The "quick-and-dirty fallback" only appeared
to work. Fixing by implementing bc1* for MIPS dyntrans.
More MIPS instructions: [d]sub, sdc1, ldc1, dmtc1, dmfc1, cfc0.
Freshening up MIPS floating point disassembly appearance.
20060430 Continuing on C790/R5900/TX79 disassembly; implementing 128-bit
"por" and "pextlw".
20060504 Disabling -u (userland emulation) unless compiled as unstable
development version.
Beginning on freshening up the testmachine include files,
to make it easier to reuse those files (placing them in
src/include/testmachine/), and beginning on a set of "demos"
or "tutorials" for the testmachine functionality.
Minor updates to the MIPS GDB remote protocol stub.
Refreshing doc/experiments.html and gdb_remote.html.
Enabling Alpha emulation in the stable release configuration,
even though no guest OSes for Alpha can run yet.
20060505 Adding a generic 'settings' object, which will contain
references to settable variables (which will later be possible
to access using the debugger).
20060506 Updating dev_disk and corresponding demo/documentation (and
switching from SCSI to IDE disk types, so it actually works
with current test machines :-).
20060510 Adding a -D_LARGEFILE_SOURCE hack for 64-bit Linux hosts,
so that fseeko() doesn't give a warning.
Updating the section about how dyntrans works (the "runnable
IR") in doc/intro.html.
Instruction updates (some x64=1 checks, some more R5900
dyntrans stuff: better mul/mult separation from MIPS32/64,
adding ei and di).
Updating MIPS cpuregs.h to a newer one (from NetBSD).
Adding more MIPS dyntrans instructions: deret, ehb.
20060514 Adding disassembly and beginning implementation of SPARC wr
and wrpr instructions.
20060515 Adding a SUN SPARC machine mode, with dummy SS20 and Ultra1
machines. Adding the 32-bit "rd psr" instruction.
20060517 Disassembly support for the general SPARC rd instruction.
Partial implementation of the cmp (subcc) instruction.
Some other minor updates (making sure that R5900 processors
start up with the EIE bit enabled, otherwise Linux/playstation2
receives no interrupts).
20060519 Minor MIPS updates/cleanups.
20060521 Moving the MeshCube machine into evbmips; this seems to work
reasonably well with a snapshot of a NetBSD MeshCube kernel.
Cleanup/fix of MIPS config0 register initialization.
20060529 Minor MIPS fixes, including a sign-extension fix to the
unaligned load/store code, which makes NetBSD/pmax on R3000
work better with dyntrans. (Ultrix and Linux/DECstation still
don't work, though.)
20060530 Minor updates to the Alpha machine mode: adding an AlphaBook
mode, an LCA bus (forwarding accesses to an ISA bus), etc.
20060531 Applying a bugfix for the MIPS dyntrans sc[d] instruction from
Ondrej Palkovsky. (Many thanks.)
20060601 Minifix to allow ARM immediate msr instruction to not give
an error for some valid values.
More Alpha updates.
20060602 Some minor Alpha updates.
20060603 Adding the Alpha cmpbge instruction. NetBSD/alpha prints its
first boot messages :-) on an emulated Alphabook 1.
20060612 Minor updates; adding a dev_ether.h include file for the
testmachine ether device. Continuing the hunt for the dyntrans
bug which makes Linux and Ultrix on DECstation behave
strangely... FINALLY found it! It seems to be related to
invalidation of the translation cache, on tlbw{r,i}. There
also seems to be some remaining interrupt-related problems.
20060614 Correcting the implementation of ldc1/sdc1 for MIPS dyntrans
(so that it uses 16 32-bit registers if the FR bit in the
status register is not set).
20060616 REMOVING BINTRANS COMPLETELY!
Removing the old MIPS interpretation mode.
Removing the MFHILO_DELAY and instruction delay stuff, because
they wouldn't work with dyntrans anyway.
20060617 Some documentation updates (adding "NetBSD-archive" to some
URLs, and new Debian/DECstation installation screenshots).
Removing the "tracenull" and "enable-caches" configure options.
Improving MIPS dyntrans performance somewhat (only invalidate
translations if necessary, on writes to the entryhi register,
instead of doing it for all cop0 writes).
20060618 More cleanup after the removal of the old MIPS emulation.
Trying to fix the MIPS dyntrans performance bugs/bottlenecks;
only semi-successful so far (for R3000).
20060620 Minor update to allow clean compilation again on Tru64/Alpha.
20060622 MIPS cleanup and fixes (removing the pc_last stuff, which
doesn't make sense with dyntrans anyway, and fixing a cross-
page-delay-slot-with-exception case in end_of_page).
Removing the old max_random_cycles_per_chunk stuff, and the
concept of cycles vs instructions for MIPS emulation.
FINALLY found and fixed the bug which caused NetBSD/pmax
clocks to behave strangely (it was a load to the zero register,
which was treated as a NOP; now it is treated as a load to a
dummy scratch register).
20060623 Increasing the dyntrans chunk size back to
N_SAFE_DYNTRANS_LIMIT, instead of N_SAFE_DYNTRANS_LIMIT/2.
Preparing for a quick release, even though there are known
bugs, and performance for non-R3000 MIPS emulation is very
poor. :-/
Reverting to half the dyntrans chunk size again, because
NetBSD/cats seemed less stable with full size chunks. :(
NetBSD/sgimips 3.0 can now run :-) (With release 0.3.8, only
NetBSD/sgimips 2.1 worked, not 3.0.)
============== RELEASE 0.4.0 ==============
20060624 Replacing the error-prone machine type initialization stuff
with something more reasonable.
Finally removing the old "cpu_run" kludge; moving around stuff
in machine.c and emul.c to better suit the dyntrans system.
Various minor dyntrans cleanups (renaming translate_address to
translate_v2p, and experimenting with template physpages).
20060625 Removing the speed hack which separated the vph entries into
two halves (code vs data); things seem a lot more stable now.
Minor performance hack: R2000/R3000 cache isolation now only
clears address translations when going into isolation, not
when going out of it.
Fixing the MIPS interrupt problems by letting mtc0 immediately
cause interrupts.
============== RELEASE 0.4.0.1 ==============
20060626 Continuing on SPARC emulation (beginning on the 'save'
instruction, register windows, etc).
20060629 Planning statistics gathering (new -s command line option),
and renaming speed_tricks to allow_instruction_combinations.
20060630 Some minor manual page updates.
Various cleanups.
Implementing the -s command line option.
20060701 FINALLY found the bug which prevented Linux and Ultrix from
running without the ugly hack in the R2000/R3000 cache isol
code; it was the phystranslation hint array which was buggy.
Removing the phystranslation hint code completely, for now.
20060702 Minor dyntrans cleanups; invalidation of physpages now only
invalidate those parts of a page that have actually been
translated. (32 parts per page.)
Some MIPS non-R3000 speed fixes.
Experimenting with MIPS instruction combination for some
addiu+bne+sw loops, and sw+sw+sw.
Adding support (again) for larger-than-4KB pages in MIPS tlbw*.
Continuing on SPARC emulation: adding load/store instructions.
20060704 Fixing a virtual vs physical page shift bug in the new tlbw*
implementation. Problem noticed by Jakub Jermar. (Many thanks.)
Moving rfe and eret to cpu_mips_instr.c, since that is the
only place that uses them nowadays.
20060705 Removing the BSD license from the "testmachine" include files,
placing them in the public domain instead; this enables the
testmachine stuff to be used from projects which are
incompatible with the BSD license for some reason.
20060707 Adding instruction combinations for the R2000/R3000 L1
I-cache invalidation code used by NetBSD/pmax 3.0, lui+addiu,
various branches followed by addiu or nop, and jr ra followed
by addiu. The time it takes to perform a full NetBSD/pmax R3000
install on the laptop has dropped from 573 seconds to 539. :-)
20060708 Adding a framebuffer controller device (dev_fbctrl), which so
far can be used to change the fb resolution during runtime, but
in the future will also be useful for accelerated block fill/
copy, and possibly also simplified character output.
Adding an instruction combination for NetBSD/pmax' strlen.
20060709 Minor fixes: reading raw files in src/file.c wasn't memblock
aligned, removing buggy multi_sw MIPS instruction combination,
etc.
20060711 Adding a machine_qemu.c, which contains a "qemu_mips" machine.
(It mimics QEMU's MIPS machine mode, so that a test kernel
made for QEMU_MIPS also can run in GXemul... at least to some
extent.) Adding a short section about how to run this mode to
doc/guestoses.html.
20060714 Misc. minor code cleanups.
20060715 Applying a patch which adds getchar() to promemul/yamon.c
(from Oleksandr Tymoshenko).
Adding yamon.h from NetBSD, and rewriting yamon.c to use it
(instead of ugly hardcoded numbers) + some cleanup.
20060716 Found and fixed the bug which broke single-stepping of 64-bit
programs between 0.4.0 and 0.4.0.1 (caused by too quick
refactoring and no testing). Hopefully this fix will not
break too many other things.
20060718 Continuing on the 8253 PIT; it now works with Linux/QEMU_MIPS.
Re-adding the sw+sw+sw instr comb (the problem was that I had
ignored endian issues); however, it doesn't seem to give any
big performance gain.
20060720 Adding a dummy Transputer mode (T414, T800 etc) skeleton (only
the 'j' and 'ldc' instructions are implemented so far). :-}
20060721 Adding gtreg.h from NetBSD, updating dev_gt.c to use it, plus
misc. other updates to get Linux 2.6 for evbmips/malta working
(thanks to Alec Voropay for the details).
FINALLY found and fixed the bug which made tlbw* for non-R3000
buggy; it was a reference count problem in the dyntrans core.
20060722 Testing stuff; things seem stable enough for a new release.
============== RELEASE 0.4.1 ==============
20060723 More Transputer instructions (pfix, nfix, opr, mint, ldl, ldlp,
eqc, rev, ajw, stl, stlf, sthf, sub, ldnl, ldnlp, ldpi, move,
wcnt, add, bcnt).
Adding more SPARC instructions (andcc, addcc, bl, rdpr).
Progress on the igsfb framebuffer used by NetBSD/netwinder.
Enabling 8-bit fills in dev_fb.
NetBSD/netwinder 3.0.1 can now run from a disk image :-)
20060724 Cleanup/performance fix for 64-bit virtual translation table
updates (by removing the "timestamp" stuff). A full NetBSD/pmax
3.0.1 install for R4400 has dropped from 667 seconds to 584 :)
Fixing the igsfb "almost vga" color (it is 24-bit, not 18-bit).
Adding some MIPS instruction combinations (3*lw, and 3*addu).
The 8048 keyboard now turns off interrupt enable between the
KBR_ACK and the KBR_RSTDONE, to work better with Linux 2.6.
Not causing PPC DEC interrupts if PPC_NO_DEC is set for a
specific CPU; NetBSD/bebox gets slightly further than before.
Adding some more SPARC instructions: branches, udiv.
20060725 Refreshing dev_pckbc.c a little.
Cleanups for the SH emulation mode, and adding the first
"compact" (16-bit) instructions: various simple movs, nop,
shll, stc, or, ldc.
20060726 Adding dummy "pcn" (AMD PCnet NIC) PCI glue.
20060727 Various cleanups; removing stuff from cpu.h, such as
running_translated (not really meaningful anymore), and
page flags (breaking into the debugger clears all translations
anyway).
Minor MIPS instruction combination updates.
20060807 Expanding the 3*sw and 3*lw MIPS instruction combinations to
work with 2* and 4* too, resulting in a minor performance gain.
Implementing a usleep hack for the RM52xx/MIPS32/MIPS64 "wait"
instruction (when emulating 1 cpu).
20060808 Experimenting with some more MIPS instruction combinations.
Implementing support for showing a (hardcoded 12x22) text
cursor in igsfb.
20060809 Simplifying the NetBSD/evbmips (Malta) install instructions
somewhat (by using a NetBSD/pmax ramdisk install kernel).
20060812 Experimenting more with the MIPS 'wait' instruction.
PCI configuration register writes can now be handled, which
allow PCI IDE controllers to work with NetBSD/Malta 3.0.1 and
NetBSD/cobalt 3.0.1. (Previously only NetBSD 2.1 worked.)
20060813 Updating dev_gt.c based on numbers from Alec Voropay, to enable
Linux 2.6 to use PCI on Malta.
Continuing on Algor interrupt stuff.
20060814 Adding support for routing ISA interrupts to two different
interrupts, making it possible to run NetBSD/algor :-)
20060814-15 Testing for the release.
============== RELEASE 0.4.2 ==============
20060816 Adding a framework for emulated/virtual timers (src/timer.c),
using only setitimer().
Rewriting the mc146818 to use the new timer framework.
20060817 Adding a call to gettimeofday() every now and then (once every
second, at the moment) to resynch the timer if it drifts.
Beginning to convert the ISA timer interrupt mechanism (8253
and 8259) to use the new timer framework.
Removing the -I command line option.
20060819 Adding the -I command line option again, with new semantics.
Working on Footbridge timer interrupts; NetBSD/NetWinder and
NetBSD/CATS now run at correct speed, but unfortunately with
HUGE delays during bootup.
20060821 Some minor m68k updates. Adding the first instruction: nop. :)
Minor Alpha emulation updates.
20060822 Adding a FreeBSD development specific YAMON environment
variable ("khz") (as suggested by Bruce M. Simpson).
Moving YAMON environment variable initialization from
machine_evbmips.c into promemul/yamon.c, and adding some more
variables.
Continuing on the LCA PCI bus controller (for Alpha machines).
20060823 Continuing on the timer stuff: experimenting with MIPS count/
compare interrupts connected to the timer framework.
20060825 Adding bogus SCSI commands 0x51 (SCSICDROM_READ_DISCINFO) and
0x52 (SCSICDROM_READ_TRACKINFO) to the SCSI emulation layer,
to allow NetBSD/pmax 4.0_BETA to be installed from CDROM.
Minor updates to the LCA PCI controller.
20060827 Implementing a CHIP8 cpu mode, and a corresponding CHIP8
machine, for fun. Disassembly support for all instructions,
and most of the common instructions have been implemented: mvi,
mov_imm, add_imm, jmp, rand, cls, sprite, skeq_imm, jsr,
skne_imm, bcd, rts, ldr, str, mov, or, and, xor, add, sub,
font, ssound, sdelay, gdelay, bogus skup/skpr, skeq, skne.
20060828 Beginning to convert the CHIP8 cpu in the CHIP8 machine to a
(more correct) RCA 180x cpu. (Disassembly for all 1802
instructions has been implemented, but no execution yet, and
no 1805 extended instructions.)
20060829 Minor Alpha emulation updates.
20060830 Beginning to experiment a little with PCI IDE for SGI O2.
Fixing the cursor key mappings for MobilePro 770 emulation.
Fixing the LK201 warning caused by recent NetBSD/pmax.
The MIPS R41xx standby, suspend, and hibernate instructions now
behave like the RM52xx/MIPS32/MIPS64 wait instruction.
Fixing dev_wdc so it calculates correct (64-bit) offsets before
giving them to diskimage_access().
20060831 Continuing on Alpha emulation (OSF1 PALcode).
20060901 Minor Alpha updates; beginning on virtual memory pagetables.
Removed the limit for max nr of devices (in preparation for
allowing devices' base addresses to be changed during runtime).
Adding a hack for MIPS [d]mfc0 select 0 (except the count
register), so that the coproc register is simply copied.
The MIPS suspend instruction now exits the emulator, instead
of being treated as a wait instruction (this causes NetBSD/
hpcmips to get correct 'halt' behavior).
The VR41xx RTC now returns correct time.
Connecting the VR41xx timer to the timer framework (fixed at
128 Hz, for now).
Continuing on SPARC emulation, adding more instructions:
restore, ba_xcc, ble. The rectangle drawing demo works :)
Removing the last traces of the old ENABLE_CACHE_EMULATION
MIPS stuff (not usable with dyntrans anyway).
20060902 Splitting up src/net.c into several smaller files in its own
subdirectory (src/net/).
20060903 Cleanup of the files in src/net/, to make them less ugly.
20060904 Continuing on the 'settings' subsystem.
Minor progress on the SPARC emulation mode.
20060905 Cleanup of various things, and connecting the settings
infrastructure to various subsystems (emul, machine, cpu, etc).
Changing the lk201 mouse update routine to not rely on any
emulated hardware framebuffer cursor coordinates, but instead
always do (semi-usable) relative movements.
20060906 Continuing on the lk201 mouse stuff. Mouse behaviour with
multiple framebuffers (which was working in Ultrix) is now
semi-broken (but it still works, in a way).
Moving the documentation about networking into its own file
(networking.html), and refreshing it a bit. Adding an example
of how to use ethernet frame direct-access (udp_snoop).
20060907 Continuing on the settings infrastructure.
20060908 Minor updates to SH emulation: for 32-bit emulation: delay
slots and the 'jsr @Rn' instruction. I'm putting 64-bit SH5 on
ice, for now.
20060909-10 Implementing some more 32-bit SH instructions. Removing the
64-bit mode completely. Enough has now been implemented to run
the rectangle drawing demo. :-)
20060912 Adding more SH instructions.
20060916 Continuing on SH emulation (some more instructions: div0u,
div1, rotcl/rotcr, more mov instructions, dt, braf, sets, sett,
tst_imm, dmuls.l, subc, ldc_rm_vbr, movt, clrt, clrs, clrmac).
Continuing on the settings subsystem (beginning on reading/
writing settings, removing bugs, and connecting more cpus to
the framework).
20060919 More work on SH emulation; adding an ldc banked instruction,
and attaching a 640x480 framebuffer to the Dreamcast machine
mode (NetBSD/dreamcast prints the NetBSD copyright banner :-),
and then panics).
20060920 Continuing on the settings subsystem.
20060921 Fixing the Footbridge timer stuff so that NetBSD/cats and
NetBSD/netwinder boot up without the delays.
20060922 Temporarily hardcoding MIPS timer interrupt to 100 Hz. With
'wait' support disabled, NetBSD/malta and Linux/malta run at
correct speed.
20060923 Connecting dev_gt to the timer framework, so that NetBSD/cobalt
runs at correct speed.
Moving SH4-specific memory mapped registers into its own
device (dev_sh4.c).
Running with -N now prints "idling" instead of bogus nr of
instrs/second (which isn't valid anyway) while idling.
20060924 Algor emulation should now run at correct speed.
Adding disassembly support for some MIPS64 revision 2
instructions: ext, dext, dextm, dextu.
20060926 The timer framework now works also when the MIPS wait
instruction is used.
20060928 Re-implementing checks for coprocessor availability for MIPS
cop0 instructions. (Thanks to Carl van Schaik for noticing the
lack of cop0 availability checks.)
20060929 Implementing an instruction combination hack which treats
NetBSD/pmax' idle loop as a wait-like instruction.
20060930 The ENTRYHI_R_MASK was missing in (at least) memory_mips_v2p.c,
causing TLB lookups to sometimes succeed when they should have
failed. (A big thank you to Juli Mallett for noticing the
problem.)
Adding disassembly support for more MIPS64 revision 2 opcodes
(seb, seh, wsbh, jalr.hb, jr.hb, synci, ins, dins, dinsu,
dinsm, dsbh, dshd, ror, dror, rorv, drorv, dror32). Also
implementing seb, seh, dsbh, dshd, and wsbh.
Implementing an instruction combination hack for Linux/pmax'
idle loop, similar to the NetBSD/pmax case.
20061001 Changing the NetBSD/sgimips install instructions to extract
files from an iso image, instead of downloading them via ftp.
20061002 More-than-31-bit userland addresses in memory_mips_v2p.c were
not actually working; applying a fix from Carl van Schaik to
enable them to work + making some other updates (adding kuseg
support).
Fixing hpcmips (vr41xx) timer initialization.
Experimenting with O(n)->O(1) reduction in the MIPS TLB lookup
loop. Seems to work both for R3000 and non-R3000.
20061003 Continuing a little on SH emulation (adding more control
registers; mini-cleanup of memory_sh.c).
20061004 Beginning on a dev_rtc, a clock/timer device for the test
machines; also adding a demo, and some documentation.
Fixing a bug in SH "mov.w @(disp,pc),Rn" (the result wasn't
sign-extended), and adding the addc and ldtlb instructions.
20061005 Contining on SH emulation: virtual to physical address
translation, and a skeleton exception mechanism.
20061006 Adding more SH instructions (various loads and stores, rte,
negc, muls.w, various privileged register-move instructions).
20061007 More SH instructions: various move instructions, trapa, div0s,
float, fdiv, ftrc.
Continuing on dev_rtc; removing the rtc demo.
20061008 Adding a dummy Dreamcast PROM module. (Homebrew Dreamcast
programs using KOS libs need this.)
Adding more SH instructions: "stc vbr,rn", rotl, rotr, fsca,
fmul, fadd, various floating-point moves, etc. A 256-byte
demo for Dreamcast runs :-)
20061012 Adding the SH "lds Rm,pr" and bsr instructions.
20061013 More SH instructions: "sts fpscr,rn", tas.b, and some more
floating point instructions, cmp/str, and more moves.
Adding a dummy dev_pvr (Dreamcast graphics controller).
20061014 Generalizing the expression evaluator (used in the built-in
debugger) to support parentheses and +-*/%^&|.
20061015 Removing the experimental tlb index hint code in
mips_memory_v2p.c, since it didn't really have any effect.
20061017 Minor SH updates; adding the "sts pr,Rn", fcmp/gt, fneg,
frchg, and some other instructions. Fixing missing sign-
extension in an 8-bit load instruction.
20061019 Adding a simple dev_dreamcast_rtc.
Implementing memory-mapped access to the SH ITLB/UTLB arrays.
20061021 Continuing on various SH and Dreamcast things: sh4 timers,
debug messages for dev_pvr, fixing some virtual address
translation bugs, adding the bsrf instruction.
The NetBSD/dreamcast GENERIC_MD kernel now reaches userland :)
Adding a dummy dev_dreamcast_asic.c (not really useful yet).
Implementing simple support for Store Queues.
Beginning on the PVR Tile Accelerator.
20061022 Generalizing the PVR framebuffer to support off-screen drawing,
multiple bit-depths, etc. (A small speed penalty, but most
likely worth it.)
Adding more SH instructions (mulu.w, fcmp/eq, fsub, fmac,
fschg, and some more); correcting bugs in "fsca" and "float".
20061024 Adding the SH ftrv (matrix * vector) instruction. Marcus
Comstedt's "tatest" example runs :) (wireframe only).
Correcting disassembly for SH floating point instructions that
use the xd* registers.
Adding the SH fsts instruction.
In memory_device_dyntrans_access(), only the currently used
range is now invalidated, and not the entire device range.
20061025 Adding a dummy AVR32 cpu mode skeleton.
20061026 Various Dreamcast updates; beginning on a Maple bus controller.
20061027 Continuing on the Maple bus. A bogus Controller, Keyboard, and
Mouse can now be detected by NetBSD and KOS homebrew programs.
Cleaning up the SH4 Timer Management Unit, and beginning on
SH4 interrupts.
Implementing the Dreamcast SYSASIC.
20061028 Continuing on the SYSASIC.
Adding the SH fsqrt instruction.
memory_sh.c now actually scans the ITLB.
Fixing a bug in dev_sh4.c, related to associative writes into
the memory-mapped UTLB array. NetBSD/dreamcast now reaches
userland stably, and prints the "Terminal type?" message :-]
Implementing enough of the Dreamcast keyboard to make NetBSD
accept it for input.
Enabling SuperH for stable (non-development) builds.
Adding NetBSD/dreamcast to the documentation, although it
doesn't support root-on-nfs yet.
20061029 Changing usleep(1) calls in the debugger to usleep(10000)
(according to Brian Foley, this makes GXemul run better on
MacOS X).
Making the Maple "Controller" do something (enough to barely
interact with dcircus.elf).
20061030-31 Some progress on the PVR. More test programs start running (but
with strange output).
Various other SH4-related updates.
20061102 Various Dreamcast and SH4 updates; more KOS demos run now.
20061104 Adding a skeleton dev_mb8696x.c (the Dreamcast's LAN adapter).
20061105 Continuing on the MB8696x; NetBSD/dreamcast detects it as mbe0.
Testing for the release.
============== RELEASE 0.4.3 ==============
20061107 Adding a new disk image option (-d o...) which sets the ISO9660
filesystem base offset; also making some other hacks to allow
NetBSD/dreamcast and homebrew demos/games to boot directly
from a filesystem image.
Moving Dreamcast-specific stuff in the documentation to its
own page (dreamcast.html).
Adding a border to the Dreamcast PVR framebuffer.
20061108 Adding a -T command line option (again?), for halting the
emulator on unimplemented memory accesses.
20061109 Continuing on various SH4 and Dreamcast related things.
The emulator should now halt on more unimplemented device
accesses, instead of just printing a warning, forcing me to
actually implement missing stuff :)
20061111 Continuing on SH4 and Dreamcast stuff.
Adding a bogus Landisk (SH4) machine mode.
20061112 Implementing some parts of the Dreamcast GDROM device. With
some ugly hacks, NetBSD can (barely) mount an ISO image.
20061113 NetBSD/dreamcast now starts booting from the Live CD image,
but crashes randomly quite early on in the boot process.
20061122 Beginning on a skeleton interrupt.h and interrupt.c for the
new interrupt subsystem.
20061124 Continuing on the new interrupt system; taking the first steps
to attempt to connect CPUs (SuperH and MIPS) and devices
(dev_cons and SH4 timer interrupts) to it. Many things will
probably break from now on.
20061125 Converting dev_ns16550, dev_8253 to the new interrupt system.
Attempting to begin to convert the ISA bus.
20061130 Incorporating a patch from Brian Foley for the configure
script, which checks for X11 libs in /usr/X11R6/lib64 (which
is used on some Linux systems).
20061227 Adding a note in the man page about booting from Dreamcast
CDROM images (i.e. that no external kernel is needed).
20061229 Continuing on the interrupt system rewrite: beginning to
convert more devices, adding abort() calls for legacy interrupt
system calls so that everything now _has_ to be rewritten!
Almost all machine modes are now completely broken.
20061230 More progress on removing old interrupt code, mostly related
to the ISA bus + devices, the LCA bus (on AlphaBook1), and
the Footbridge bus (for CATS). And some minor PCI stuff.
Connecting the ARM cpu to the new interrupt system.
The CATS, NetWinder, and QEMU_MIPS machine modes now work with
the new interrupt system :)
20061231 Connecting PowerPC CPUs to the new interrupt system.
Making PReP machines (IBM 6050) work again.
Beginning to convert the GT PCI controller (for e.g. Malta
and Cobalt emulation). Some things work, but not everything.
Updating Copyright notices for 2007.
20070101 Converting dev_kn02 from legacy style to devinit; the 3max
machine mode now works with the new interrupt system :-]
20070105 Beginning to convert the SGI O2 machine to the new interrupt
system; finally converting O2 (IP32) devices to devinit, etc.
20070106 Continuing on the interrupt system redesign/rewrite; KN01
(PMAX), KN230, and Dreamcast ASIC interrupts should work again,
moving out stuff from machine.h and devices.h into the
corresponding devices, beginning the rewrite of i80321
interrupts, etc.
20070107 Beginning on the rewrite of Eagle interrupt stuff (PReP, etc).
20070117 Beginning the rewrite of Algor (V3) interrupts (finally
changing dev_v3 into devinit style).
20070118 Removing the "bus" registry concept from machine.h, because
it was practically meaningless.
Continuing on the rewrite of Algor V3 ISA interrupts.
20070121 More work on Algor interrupts; they are now working again,
well enough to run NetBSD/algor. :-)
20070122 Converting VR41xx (HPCmips) interrupts. NetBSD/hpcmips
can be installed using the new interrupt system :-)
20070123 Making the testmips mode work with the new interrupt system.
20070127 Beginning to convert DEC5800 devices to devinit, and to the
new interrupt system.
Converting Playstation 2 devices to devinit, and converting
the interrupt system. Also fixing a severe bug: the interrupt
mask register on Playstation 2 is bitwise _toggled_ on writes.
20070128 Removing the dummy NetGear machine mode and the 8250 device
(which was only used by the NetGear machine).
Beginning to convert the MacPPC GC (Grand Central) interrupt
controller to the new interrupt system.
Converting Jazz interrupts (PICA61 etc.) to the new interrupt
system. NetBSD/arc can be installed again :-)
Fixing the JAZZ timer (hardcoding it at 100 Hz, works with
NetBSD and it is better than a completely dummy timer as it
was before).
Converting dev_mp to the new interrupt system, although I
haven't had time to actually test it yet.
Completely removing src/machines/interrupts.c, cpu_interrupt
and cpu_interrupt_ack in src/cpu.c, and
src/include/machine_interrupts.h! Adding fatal error messages
+ abort() in the few places that are left to fix.
Converting dev_z8530 to the new interrupt system.
FINALLY removing the md_int struct completely from the
machine struct.
SH4 fixes (adding a PADDR invalidation in the ITLB replacement
code in memory_sh.c); the NetBSD/dreamcast LiveCD now runs
all the way to the login prompt, and can be interacted with :-)
Converting the CPC700 controller (PCI and interrupt controller
for PM/PPC) to the new interrupt system.
20070129 Fixing MACE ISA interrupts (SGI IP32 emulation). Both NetBSD/
sgimips' and OpenBSD/sgi's ramdisk kernels can now be
interacted with again.
20070130 Moving out the MIPS multi_lw and _sw instruction combinations
so that they are auto-generated at compile time instead.
20070131 Adding detection of amd64/x86_64 hosts in the configure script,
for doing initial experiments (again :-) with native code
generation.
Adding a -k command line option to set the size of the dyntrans
cache, and a -B command line option to disable native code
generation, even if GXemul was compiled with support for
native code generation for the specific host CPU architecture.
20070201 Experimenting with a skeleton for native code generation.
Changing the default behaviour, so that native code generation
is now disabled by default, and has to be enabled by using
-b on the command line.
20070202 Continuing the native code generation experiments.
Making PCI interrupts work for Footbridge again.
20070203 More native code generation experiments.
Removing most of the native code generation experimental code,
it does not make sense to include any quick hacks like this.
Minor cleanup/removal of some more legacy MIPS interrupt code.
20070204 Making i80321 interrupts work again (for NetBSD/evbarm etc.),
and fixing the timer at 100 Hz.
20070206 Experimenting with removing the wdc interrupt slowness hack.
20070207 Lowering the number of dyntrans TLB entries for MIPS from
192 to 128, resulting in a minor speed improvement.
Minor optimization to the code invalidation routine in
cpu_dyntrans.c.
20070208 Increasing (experimentally) the nr of dyntrans instructions per
loop from 60 to 120.
20070210 Commenting out (experimentally) the dyntrans_device_danger
detection in memory_rw.c.
Changing the testmips and baremips machines to use a revision 2
MIPS64 CPU by default, instead of revision 1.
Removing the dummy i960, IA64, x86, AVR32, and HP PA-RISC
files, the PC bios emulation, and the Olivetti M700 (ARC) and
db64360 emulation modes.
20070211 Adding an "mp" demo to the demos directory, which tests the
SMP functionality of the testmips machine.
Fixing PReP interrupts some more. NetBSD/prep now boots again.
20070216 Adding a "nop workaround" for booting Mach/PMAX to the
documentation; thanks to Artur Bujdoso for the values.
Converting more of the MacPPC interrupt stuff to the new
system.
Beginning to convert BeBox interrupts to the new system.
PPC603e should NOT have the PPC_NO_DEC flag! Removing it.
Correcting BeBox clock speed (it was set to 100 in the NetBSD
bootinfo block, but should be 33000000/4), allowing NetBSD
to start without using the (incorrect) PPC_NO_DEC hack.
20070217 Implementing (slow) AltiVec vector loads and stores, allowing
NetBSD/macppc to finally boot using the GENERIC kernel :-)
Updating the documentation with install instructions for
NetBSD/macppc.
20070218-19 Regression testing for the release.
============== RELEASE 0.4.4 ==============
20070224 Minor update to the initialization of the ns16550 in
machine_walnut.c, to allow that machine type to boot with the
new interrupt system (although it is still a dummy machine).
Adding a wdc at 0x14000000 to machine_landisk.c, and fixing
the SCIF serial interrupts of the SH4 cpu enough to get
NetBSD/landisk booting from a disk image :-) Adding a
preliminary install instruction skeleton to guestoses.html.
20070306 Adding SH-IPL+G PROM emulation, and also passing the "end"
symbol in r5 on bootup, for Landisk emulation. This is enough
to get OpenBSD/landisk to install :) Adding a preliminary
install instruction skeleton to the documentation. SuperH
emulation is still shaky, though :-/
20070307 Fixed a strangeness in memory_sh.c (read/write was never
returned for any page). (Unknown whether this fixes any actual
problems, though.)
20070308 dev_ram.c fix: invalidate code translations on writes to
RAM, emulated as separate devices. Linux/dreamcast gets
further in the boot process than before, but still bugs out
in userland.
Fixing bugs in the "stc.l gbr,@-rN" and "ldc.l @rN+,gbr" SuperH
instructions (they should NOT check the MD bit), allowing the
Linux/dreamcast Live CD to reach userland correctly :-)
20070310 Changing the cpu name "Alpha" in src/useremul.c to "21364" to
unbreak userland syscall emulation of FreeBSD/Alpha binaries.
20070314 Applying a patch from Michael Yaroslavtsev which fixes the
previous Linux lib64 patch to the configure script.
20070315 Adding a (dummy) sun4v machine type, and SPARC T1 cpu type.
20070316 Creating a new directory, src/disk, and moving diskimage.c
to it. Separating out bootblock loading stuff from emul.c into
new files in src/disk.
Adding some more SPARC registers.
20070318 Preparing/testing for a minirelease, 0.4.4.1.
============== RELEASE 0.4.4.1 ==============
20070324 Adding a "--debug" option to the configure script, to disable
optimizations in unstable development builds.
Moving out SCSI-specific stuff from diskimage.c into a new
diskimage_scsicmd.c.
Applying HĂĄvard Eidnes' patch for SCSICDROM_READ_DISKINFO and
SCSICDROM_READ_TRACKINFO. (Not really tested yet.)
Implementing disk image "overlays" (to allow simple roll-back
to previous disk state). Adding a 'V' disk flag for this, and
updating the man page and misc.html.
20070325 Stability fix to cpu_dyntrans.c, when multiple physical pages
share the same initial table entry. (The ppp == NULL check
should be physpage_ofs == 0.) Bug found by analysing GXemul
against a version patched for Godson.
Fixing a second occurance of the same problem (also in
cpu_dyntrans.c).
Fixing a MAJOR physical page leak in cpu_dyntrans.c; pages
weren't _added_ to the set of translated pages, they _replaced_
all previous pages. It's amazing that this bug has been able
to live for this long. (Triggered when emulating >128MB RAM.)
20070326 Removing the GDB debugging stub support; it was too hackish
and ugly.
20070328 Moving around some native code generation skeleton code.
20070329 The -lm check in the configure script now also checks for sin()
in addition to sqrt(). (Thanks to Nigel Horne for noticing that
sqrt was not enough on Fedora Core 6.) (Not verified yet.)
20070330 Fixing an indexing bug in dev_sh4.c, found by using gcc version
4.3.0 20070323.
20070331 Some more experimentation with native code generation.
20070404 Attempting to fix some more SH4 SCIF interrupt bugs; rewriting
the SH interrupt assertion/deassertion code somewhat.
20070410 Splitting src/file.c into separate files in src/file/.
Cleanup: Removing the dummy TS7200, Walnut, PB1000, and
Meshcube emulation modes, and dev_epcom and dev_au1x00.
Removing the experimental CHIP8/RCA180x code; it wasn't really
working much lately, anyway. It was fun while it lasted.
Also removing the experimental Transputer CPU support.
20070412 Moving the section about how the dynamic translation system
works from intro.html to a separate translation.html file.
Minor SH fixes; attempting to get OpenBSD/landisk to run
without randomly bugging out, but no success yet.
20070413 SH SCI (serial bit interface) should now work together with a
(new) RS5C313 clock device (for Landisk emulation).
20070414 Moving Redhat/MIPS down from supported to experimental, in
guestoses.html.
Preparing for a new release; doing some regression testing etc.
============== RELEASE 0.4.5 ==============
20070415 Landisk PCLOCK should be 33.33 MHz, not 50 MHz. (This makes
the clock run at correct speed.)
FINALLY found and fixed the bug which caused OpenBSD/landisk
to randomly bug out: an &-sign was missing in the special case
handling of FPSCR in the 'LDS.L @Rm+,FPSCR' instruction.
Adding similar special case handling for 'LDC.L @Rm+,SR'
(calling sh_update_sr() instead of just loading).
Implementing the 'FCNVSD FPUL,DRn' and 'FCNVDS DRm,FPUL'
SuperH instructions.
The 'LDC Rm,SR' instruction now immediately breaks out of the
dyntrans loop if an interrupt is to be triggered.
20070416 In memory_rw.c, if mapping a page as writable, make sure to
invalidate code translations even if the data access was a
read.
Minor SuperH updates.
20070418 Removing the dummy M68K emulation mode.
Minor SH update (turning unnecessary sts_mach_rn, sts_macl_rn,
and sts_pr_rn instruction handlers into mov_rm_rn).
20070419 Beginning to add a skeleton for an M88K mode: Adding a hack to
allow OpenBSD/m88k a.out binaries to be loaded, and disassembly
of a few simple 88K instructions.
Commenting out the 'LDC Rm,SR' fix from a few days ago, because
it made Linux/dreamcast bug out.
Adding a hack to dev_sh4.c (an extra translation cache
invalidation), which allows OpenBSD/landisk to boot ok after
an install. Upgrading the Landisk machine mode to stable,
updating documentation, etc.
20070420 Experimenting with adding a PCI controller (pcic) to dev_sh4.
Adding a dummy Realtek 8139C+ skeleton device (dev_rtl8139c).
Implementing the first M88K instructions (br, or[.u] imm), and
adding disassembly of some more instructions.
20070421 Continuing a little on dev_rtl8139c.
20070422 Implementing the 9346 EEPROM "read" command for dev_rtl8139c.
Finally found and fixed an old bug in the log n symbol search
(it sometimes missed symbols). Debug trace (-i, -t etc) should
now show more symbols. :-)
20070423 Continuing a little on M88K disassembly.
20070428 Fixing a memset arg order bug in src/net/net.c (thanks to
Nigel Horne for noticing the bug).
Applying parts of a patch from Carl van Schaik to clear out
bottom bits of MIPS addresses more correctly, when using large
page sizes, and doing some other minor cleanup/refactoring.
Fixing a couple of warnings given by gcc with the -W option (a
few more warnings than just plain -Wall).
Reducing SuperH dyntrans physical address space from 64-bit to
32-bit (since SH5/SH64 isn't imlemented yet anyway).
Adding address-to-symbol annotation to a few more instructions
in the SuperH instruction trace output.
Beginning regression testing for the next release.
Reverting the value of SCIF_DELAYED_TX_VALUE from 1 to 2,
because OpenBSD/landisk may otherwise hang randomly.
20070429 The ugly hack/workaround to get OpenBSD/landisk booting without
crashing does NOT work anymore (with the April 21 snapshot
of OpenBSD/landisk). Strangely enough, removing the hack
completely causes OpenBSD/landisk to work (!).
More regression testing (re-testing everything SuperH-related,
and some other things).
Cobalt interrupts were actually broken; fixing by commenting
out the DEC21143s in the Cobalt machine.
20070430 More regression testing.
20070501 Updating the OpenBSD/landisk install instructions to use
4.1 instead of the current snapshot.
GAAAH! OpenBSD/landisk 4.1 _needs_ the ugly hack/workaround;
reintroducing it again. (The 4.1 kernel is actually from
2007-03-11.)
Simplifying the NetBSD/evbarm install instructions a bit.
More regression testing.
============== RELEASE 0.4.5.1 ==============
20070501 Continuing a little on m88k disassembly (control registers,
more instructions).
Adding a dummy mvme88k machine mode.
20070502 Re-adding MIPS load/store alignment exceptions.
20070503 Implementing more of the M88K disassembly code.
20070504 Adding disassembly of some more M88K load/store instructions.
Implementing some relatively simple M88K instructions (br.n,
xor[.u] imm, and[.u] imm).
20070505 Implementing M88K three-register and, or, xor, and jmp[.n],
bsr[.n] including function call trace stuff.
Applying a patch from Bruce M. Simpson which implements the
SYSCON_BOARD_CPU_CLOCK_FREQ_ID object of the syscon call in
the yamon PROM emulation.
20070506 Implementing M88K bb0[.n] and bb1[.n], and skeletons for
ldcr and stcr (although no control regs are implemented yet).
20070509 Found and fixed the bug which caused Linux for QEMU_MIPS to
stop working in 0.4.5.1: It was a faulty change to the MIPS
'sc' and 'scd' instructions I made while going through gcc -W
warnings on 20070428.
20070510 Updating the Linux/QEMU_MIPS section in guestoses.html to
use mips-test-0.2.tar.gz instead of 0.1.
A big thank you to Miod Vallat for sending me M88K manuals.
Implementing more M88K instructions (addu, subu, div[u], mulu,
ext[u], clr, set, cmp).
20070511 Fixing bugs in the M88K "and" and "and.u" instructions (found
by comparing against the manual).
Implementing more M88K instructions (mask[.u], mak, bcnd (auto-
generated)) and some more control register details.
Cleanup: Removing the experimental AVR emulation mode and
corresponding devices; AVR emulation wasn't really meaningful.
Implementing autogeneration of most M88K loads/stores. The
rectangle drawing demo (with -O0) for M88K runs :-)
Beginning on M88K exception handling.
More M88K instructions: tb0, tb1, rte, sub, jsr[.n].
Adding some skeleton MVME PROM ("BUG") emulation.
20070512 Fixing a bug in the M88K cmp instruction.
Adding the M88K lda (scaled register) instruction.
Fixing bugs in 64-bit (32-bit pairs) M88K loads/stores.
Removing the unused tick_hz stuff from the machine struct.
Implementing the M88K xmem instruction. OpenBSD/mvme88k gets
far enough to display the Copyright banner :-)
Implementing subu.co (guess), addu.co, addu.ci, ff0, and ff1.
Adding a dev_mvme187, for MVME187-specific devices/registers.
OpenBSD/mvme88k prints more boot messages. :)
20070515 Continuing on MVME187 emulation (adding more devices, beginning
on the CMMUs, etc).
Adding the M88K and.c, xor.c, and or.c instructions, and making
sure that mul, div, etc cause exceptions if executed when SFD1
is disabled.
20070517 Continuing on M88K and MVME187 emulation in general; moving
the CMMU registers to the CPU struct, separating dev_pcc2 from
dev_mvme187, and beginning on memory_m88k.c (BATC and PATC).
Fixing a bug in 64-bit (32-bit pairs) M88K fast stores.
Implementing the clock part of dev_mk48txx.
Implementing the M88K fstcr and xcr instructions.
Implementing m88k_cpu_tlbdump().
Beginning on the implementation of a separate address space
for M88K .usr loads/stores.
20070520 Removing the non-working (skeleton) Sandpoint, SonyNEWS, SHARK
Dnard, and Zaurus machine modes.
Experimenting with dyntrans to_be_translated read-ahead. It
seems to give a very small performance increase for MIPS
emulation, but a large performance degradation for SuperH. Hm.
20070522 Disabling correct SuperH ITLB emulation; it does not seem to be
necessary in order to let SH4 guest OSes run, and it slows down
userspace code.
Implementing "samepage" branches for SuperH emulation, and some
other minor speed hacks.
20070525 Continuing on M88K memory-related stuff: exceptions, memory
transaction register contents, etc.
Implementing the M88K subu.ci instruction.
Removing the non-working (skeleton) Iyonix machine mode.
OpenBSD/mvme88k reaches userland :-), starts executing
/sbin/init's instructions, and issues a few syscalls, before
crashing.
20070526 Fixing bugs in dev_mk48txx, so that OpenBSD/mvme88k detects
the correct time-of-day.
Implementing a generic IRQ controller for the test machines
(dev_irqc), similar to a proposed patch from Petr Stepan.
Experimenting some more with translation read-ahead.
Adding an "expect" script for automated OpenBSD/landisk
install regression/performance tests.
20070527 Adding a dummy mmEye (SH3) machine mode skeleton.
FINALLY found the strange M88K bug I have been hunting: I had
not emulated the SNIP value for exceptions occurring in
branch delay slots correctly.
Implementing correct exceptions for 64-bit M88K loads/stores.
Address to symbol lookups are now disabled when M88K is
running in usermode (because usermode addresses don't have
anything to do with supervisor addresses).
20070531 Removing the mmEye machine mode skeleton.
20070604 Some minor code cleanup.
20070605 Moving src/useremul.c into a subdir (src/useremul/), and
cleaning up some more legacy constructs.
Adding -Wstrict-aliasing and -fstrict-aliasing detection to
the configure script.
20070606 Adding a check for broken GCC on Solaris to the configure
script. (GCC 3.4.3 on Solaris cannot handle static variables
which are initialized to 0 or NULL. :-/)
Removing the old (non-working) ARC emulation modes: NEC RD94,
R94, R96, and R98, and the last traces of Olivetti M700 and
Deskstation Tyne.
Removing the non-working skeleton WDSC device (dev_wdsc).
20070607 Thinking about how to use the host's cc + ld at runtime to
generate native code. (See experiments/native_cc_ld_test.i
for an example.)
20070608 Adding a program counter sampling timer, which could be useful
for native code generation experiments.
The KN02_CSR_NRMMOD bit in the DECstation 5000/200 (KN02) CSR
should always be set, to allow a 5000/200 PROM to boot.
20070609 Moving out breakpoint details from the machine struct into
a helper struct, and removing the limit on max nr of
breakpoints.
20070610 Moving out tick functions into a helper struct as well (which
also gets rid of the max limit).
20070612 FINALLY figured out why Debian/DECstation stopped working when
translation read-ahead was enabled: in src/memory_rw.c, the
call to invalidate_code_translation was made also if the
memory access was an instruction load (if the page was mapped
as writable); it shouldn't be called in that case.
20070613 Implementing some more MIPS32/64 revision 2 instructions: di,
ei, ext, dext, dextm, dextu, and ins.
20070614 Implementing an instruction combination for the NetBSD/arm
idle loop (making the host not use any cpu if NetBSD/arm
inside the emulator is not using any cpu).
Increasing the nr of ARM VPH entries from 128 to 384.
20070615 Removing the ENABLE_arch stuff from the configure script, so
that all included architectures are included in both release
and development builds.
Moving memory related helper functions from misc.c to memory.c.
Adding preliminary instructions for netbooting NetBSD/pmppc to
guestoses.html; it doesn't work yet, there are weird timeouts.
Beginning a total rewrite of the userland emulation modes
(removing all emulation modes, beginning from scratch with
NetBSD/MIPS and FreeBSD/Alpha only).
20070616 After fixing a bug in the DEC21143 NIC (the TDSTAT_OWN bit was
only cleared for the last segment when transmitting, not all
segments), NetBSD/pmppc boots with root-on-nfs without the
timeouts. Updating guestoses.html.
Removing the skeleton PSP (Playstation Portable) mode.
Moving X11-related stuff in the machine struct into a helper
struct.
Cleanup of out-of-memory checks, to use a new CHECK_ALLOCATION
macro (which prints a meaningful error message).
Adding a COMMENT to each machine and device (for automagic
.index comment generation).
Doing regression testing for the next release.
============== RELEASE 0.4.6 ==============
20070616 Implementing the MIPS32/64 revision 2 "ror" instruction.
20070617 Adding a struct for each physpage which keeps track of which
ranges within that page (base offset, length) that are
continuously translatable. When running with native code
generation enabled (-b), a range is added after each read-
ahead loop.
Experimenting with using the physical program counter sample
data (implemented 20070608) together with the "translatable
range" information, to figure out which physical address ranges
would be worth translating to native code (if the number of
samples falling within a range is above a certain threshold).
20070618 Adding automagic building of .index comment files for
src/file/, src/promemul/, src src/useremul/ as well.
Adding a "has been translated" bit to the ranges, so that only
not-yet-translated ranges will be sampled.
20070619 Moving src/cpu.c and src/memory_rw.c into src/cpus/,
src/device.c into src/devices/, and src/machine.c into
src/machines/.
Creating a skeleton cc/ld native backend module; beginning on
the function which will detect cc command line, etc.
20070620 Continuing on the native code generation infrastructure.
20070621 Moving src/x11.c and src/console.c into a new src/console/
subdir (for everything that is console or framebuffer related).
Moving src/symbol*.c into a new src/symbol/, which should
contain anything that is symbol handling related.
20070624 Making the program counter sampling threshold a "settings
variable" (sampling_threshold), i.e. it can now be changed
during runtime.
Switching the RELEASE notes format from plain text to HTML.
If the TMPDIR environment variable is set, it is used instead
of "/tmp" for temporary files.
Continuing on the cc/ld backend: simple .c code is generated,
the compiler and linker are called, etc.
Adding detection of host architecture to the configure script
(again), and adding icache invalidation support (only
implemented for Alpha hosts so far).
20070625 Simplifying the program counter sampling mechanism.
20070626 Removing the cc/ld native code generation stuff, program
counter sampling, etc; it would not have worked well in the
general case.
20070627 Removing everything related to native code generation.
20070629 Removing the (practically unusable) support for multiple
emulations. (The single emulation allowed now still supports
multiple simultaneous machines, as before.)
Beginning on PCCTWO and M88K interrupts.
20070723 Adding a dummy skeleton for emulation of M32R processors.
20070901 Fixing a warning found by "gcc version 4.3.0 20070817
(experimental)" on amd64.
20070905 Removing some more traces of the old "multiple emulations"
code.
Also looking in /usr/local/include and /usr/local/lib for
X11 libs, when running configure.
20070909 Minor updates to the guest OS install instructions, in
preparation for the NetBSD 4.0 release.
20070918 More testing of NetBSD 4.0 RC1.
20070920 Adding a section about HelenOS (for testarm and testmips) to
the guestoses.html page.
20071014 src/console/console.c now includes <sys/select.h> (thanks to
Juli Mallett for noticing that this was required on Cygwin).
20071017 Updating Sprite URL in guestoses.html.
20071102 Updating the OpenBSD/landisk install instructions in
guestoses.html from OpenBSD 4.1 to 4.2.
20071112 Branching in CVS to a 0.4.6.1 version, separate from the main
development.
-------------------------------------------------------------------------------
(This is the C++ development branch.)
EXPERIMENTALLY beginning to convert various source code
files to C++ (.c to .cc); it will of course be a major
undertaking to redesign the code so that it fits C++, but I
think it will be worth it. (main.c => main.cc only so far.)
Note: Release 0.4.6.1 will most likely be made from the code
base as it was yesterday, plus perhaps some documentation
updates.
Adding configure options "--with-gui" and "--without-gui";
autodetection of gtkmm-2.4 >= 2.12.1. A binary "gxemul-gui"
is hardlinked to "gxemul"; when started, it should (in the
future) bring up a GUI version of GXemul. For now, it just
displays a dummy GTK+ window.
20071113 The dummy GUI now includes a menu bar.
20071114 Minor manpage and Makefile updates.
Building and running GXemul now requires both X11 and gtkmm.
debug/fatal are moved from main.cc to misc.cc.
main.cc now just calls the main emulator, which is moved to
src/GXemul.cc.
20071116 Reverting the stuff I did two days ago: gtkmm/X11 are now
optional again.
Finally adding "install" and "uninstall" Makefile targets. :)
Moving the rest of main.cc (the main function) into GXemul.cc.
Removing the old config file parser (src/emul_parse.c),
and doc/configfiles.html.
Moving remaining src/*.c{,c} into a new src/main/ directory.
Beginning on separating the main GUI window into a "workspace"
and a "debug console" area.
20071117 Removing the dummy M32R skeleton again.
Converting some .c files to .cc (without redesigning the code,
just to make it use the C++ compiler): cpu_sparc.c,
cpu_mips_coproc.c, memory_*.c.
Converting most of src/cpus/.
Converting src/net/*.c and src/promemul/*.c to *.cc.
20071119 Converting src/file/*.c to *.cc.
20071120 Removing remaining references to the old config file stuff in
the documentaion.
20071121 Converting src/useremul/*.c, src/symbol/*.c, and some
remaining files in src/main/ to *.cc. (Still no redesign,
simply converting to use the C++ compiler.)
20071123 Beginning to converting src/machines/*.c to *.cc.
20071124 Planning a new configuration file format; beginning on
ConfigNode.{cc,h}. Adding doc/fileformat.html.
Adding a "test" makefile target, for unit testing. "make
install" runs the test target.
Implementing a simple refcount_ptr class.
20071127 configure now uses -g also for non-development builds.
Incorporating Wu Yongwei's debug_new, for memory leak
detection.
20071209 Converting the remaining src/machine/*.c to *.cc.
Converting src/debugger/*.c to *.cc.
20071212 Including a Doxyfile, for doxygen generation (source code
comments to HTML).
20071213 Performing a VERY bold move: Removing pretty much everything of
the old code. All CPUs, devices, documentation, PROM emulation
modes, disk and file handling, console handling, the old
debugger, etc.
Thinking about the new Component framework.
20071214 Updating the TODO (basically removing all 0.4.x stuff).
Beginning on some Doxygen documentation for simple classes.
20071217 Moving Doxygen documentation to doc/doxygen/html....
src/main/GXemul.cc is used for the "main page" of the
generated Doxygen HTML documentation, so that is where all the
general code concepts should be documented.
Adding skeleton Action, ActionStack, and UnitTest frameworks.
20071218 Continuing on the ActionStack and the UnitTest framework.
Adding a small intro.html documentation page.
-------------------------------------------------------------------------------
(This is the 0.4.x branch.)
20071219 NetBSD 4.0 has been released. Doing regression testing of
some systems listed on guestoses.html.
Fixing an alignment bug in dev_vga, when allocating 1 byte.
============== RELEASE 0.4.6.1 ==============
-------------------------------------------------------------------------------
(This is the C++ development branch.)
20071221 Some extremely minor Doxygen comment updates.
20071227 Adding StateVariable and StateVariableValue classes; writing
unit tests, etc.
The ActionStack now uses lists instead of vectors, for the
undo and redo stack. (For O(1) undo/redo operations.)
Continuing on the Component infrastructure: parent/child
relationships, state variables, and serialization.
Adding a simple Checksum class; useful as a helper for unit
tests.
20071228 Implementing a CreateComponent function, which when given a
"component class name" creates a Component.
Adding a simple EscapedString helper class, for generating and
decoding C-style escaped strings.
Simple deserialization works. :)
20071229 Beginning on the CommandInterpreter class.
20071231 Moving src/gui to src/ui/gtkmm, and creating src/ui/console.
The idea is that all UIs, not only graphical ones, will share
a common base class (the UI class), making it reasonably easy
to add other GUIs later on if necessary.
Moving printing of the startup "banner" to a UI member
function. (No banner is currently displayed for the GTKMM UI
though, because it would feel too heavy-weight.)
The ConsoleUI shows a "GXemul> " prompt, but does not support
input yet.
20080101 Continuing on the ConsoleUI; it now reads input from stdin and
sends it to a CommandInterpreter. Simple handling of CTRL-C,
CTRL-Z, and treating DEL as backspace.
Adding a Command base class, and adding the first command,
which is "quit" :-).
Simplifying the syntax of the UNITTEST macro.
20080102 Adding a section about GXemul being Free Software to intro.html
(same as in previous versions of GXemul).
Implementing CommandInterpreter::RunCommand, so that commands
can be executed. "help", "quit", and "version" work
interactively now :)
20080103 CTRL-A/E (for start/end of line) and CTRL-B/F (for back/
forward cursor movement) now work in the console UI.
Mapping ANSI/VTxxx/xterm cursor keys (escape + [ + misc) to
CTRL-A/E/B/F/N/P.
Adding command history support to the CommandInterpreter.
Classes that perform unit tests using the UNITTESTS(classname)
macro are now tested (almost) automagically by
UnitTest::RunTests(). (.h files must still be included.)
20080104 Connecting cursor up/down keys to the command history.
Adding Component::Clone. (Not really used yet.)
Adding CTRL-D support to the command interpreter (remove
character to the right).
Actions will now be placed in src/main/actions/.
Implementing an AddComponentAction.
20080105 Beginning on TAB completion in the CommandInterpreter.
Implementing the UndoCommand and the RedoCommand.
Adding CTRL-K (kill end of line) to the command interpreter.
Implementing RemoveComponentAction.
20080106 Classes that use UNITTESTS(classname) are now fully auto
tested, no need to manually include .h files anymore. (This
relies on the fact that .h files have names that are exactly
the same as the class name they represent, otherwise it would
not work that well.) Updating some Doxygen comments to reflect
the current state of automagic unit testing.
Renaming TODO to doc/TODO.html.
Changing the Doxyfile to include full .cc source code in
the built documentation.
20080107 The "tree" command now shows a fancy ASCII tree of components.
Beginning on the "add" command (AddComponentCommand).
Components now get names based on their class name, followed
by a zero-based increasing integer, e.g. dummy0, dummy1, etc.
when added (if they don't already have a unique name).
20080108 TAB complete of empty string now shows all available commands.
Implementing Component helpers: GeneratePath and LookupPath.
The "add" command now takes path into account, but it must be
a complete path from the root component (i.e. "root.blahblah").
Component::Serialize now serializes into a std::stringstream
instead of returning a plain string.
20080109 Implementing Component::FindPathByPartialMatch (helper func.).
The "add" command now uses FindPathByPartialMatch for the
where-to-add argument.
Tab completion now expands component names :) also using
FindPathByPartialMatch. (Syntax of different parts of a
command line are not taken into account yet, though, so it
also for example tries to expand the argument of the "help"
command as a component name.)
Component::Serialize now serializes into an ostream instead
of a stringstream.
Implementing the "save" command.
CTRL-T now runs a "status" command (not yet implemented),
instead of using a status line hack of its own.
Implementing ClearEmulationAction and LoadEmulationAction.
Implementing the "close" and "load" commands.
20080110 Making the LoadEmulationAction undo-able (in the case the new
component was added to the tree, and did not entierly
replace the root component).
20080112 The gxemul binary can now be started with a config file as
an argument, which causes it to be loaded. The default RunState
is now Running on startup, and -V is used to set it to Paused.
Adding a NullUI, so that the result of GXemul::GetUI() does
not have to be checked all the time.
Creating a ComponentFactory; moving Component::CreateComponent
to ComponentFactory::CreateComponent.
Reworking how components are created, in preparation for
getting "templates" (such as the testmips machine) to work.
A list of Components is now generated by the configure script,
so that all .h files with a COMPONENT(name) command in
src/include/components/ (including template machines, etc) will
be creatable using ComponentFactory::CreateComponent.
The -E command line option now works :-)
20080113 Adding a "quiet mode" to the GXemul class, set to true by the
-q command line option.
Adding some more simple commands: continue, list-components.
-------------------------------------------------------------------------------
(This is the 0.4.x branch.)
20080118 Applying a WDC patch from Oleksandr Tymoshenko (dev_wdc.c and
bus_pci.c), fixing the order of 16-bit words within 32-bit
words in the identify struct, and not clearing the error on
reads from the error register anymore.
============== RELEASE 0.4.6.2 ==============
-------------------------------------------------------------------------------
(This is the C++ branch.)
20080119 Adding a generic GetAttribute function to components. Planned
attributes are "template", "stable", "machine", "description",
and "contributors". Unimplemented attributes result in an empty
string being returned from GetAttribute.
Moving the ASCII tree generator from TreeCommand.cc to
Component::GenerateTreeDump.
Documentation of available machine templates and all components
is now automagically generated on a "make documentation".
(doc/machines.html and doc/components.html.)
-------------------------------------------------------------------------------
(This is the 0.4.x branch.)
20080120 Some minor OpenFirmware fixes: Adding a "memory" property to
"/chosen", adding a dummy claim() service.
-------------------------------------------------------------------------------
(This is the C++ branch.)
20080120 Adding CTRL-W handling (remove current/last word) to the
CommandInterpreter.
The machines.html and components.html documentation pages now
point to individual doc/machine_XXX.html and component_XXX.html
pages, if they exist.
20080122 Beginning to rewrite the component state variable
implementation a bit, in preparation for serialization/
deserialization, undo/redo, and "run backwards" with data
tightly tied to components.
20080123 Continuing on the state variable stuff. Both strings and
integers (8-bit through 64-bit, signed and unsigned) can be
used as state variables so far, but more unit tests are needed.
Component classes can now also be registered runtime. (This is
needed to enable meaningful unit testing of some things,
such as cloning of dummy unit test components.)
20080124 Moving doc/machine_*.html and component_*.html into subdirs.
20080129 Re-adding detection of host arch (ABI) to the configure script.
20080203 Continuing on state variables (unit tests etc).
-------------------------------------------------------------------------------
(This is the 0.4.x branch.)
20080205 Switching order of DINCLUDE and XINCLUDE in
src/devices/Makefile (thanks to Ning Zhao for the tip).
-------------------------------------------------------------------------------
(This is the C++ branch.)
20080210 Adding -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC to CFLAGS for
debug builds.
20080222 Beginning on the main run loop, GXemul::ExecuteCycles.
-------------------------------------------------------------------------------
(This is the 0.4.x branch.)
20080222 Adding a DEV_DISK_OFFSET_HIGH32 register, for reading/writing
the top 32 bits of the offset register (useful for emulated
32-bit archs), as suggested by Julian Elischer.
============== RELEASE 0.4.6.3 ==============
-------------------------------------------------------------------------------
(This is the C++ branch.)
20080226 Implementing an IRInstruction base class, and some initial
IR instructions (simple adds, moves, stores).
20080227 Continuing on IRInstruction stuff; unit tests to see that
automatic native code generation kicks in, etc.
Implementing a simple IRBlockCache, which is just a linear
memory range with PROT_EXEC, which is reset when it overflows.
Beginning on a (so far dummy) IRNativeAMD64 code generator.
Adding a configure option for disabling native code generation
support completely.
20080229 Rethinking how the IR stuff should work: I'll probably use
simple and traditional interpretation by default (read instr,
decode, execute), and only let native code generation via some
form of IR kick in when necessary. Two advantages: it will be
easier to add new cpu types (because an interpretation switch/
case block is very easy to understand), and there will be no
waste of memory (for IR data) for code which is not commonly
used.
Removing IRBlock and IRInstruction, but keeping IRBlockCache
and IRNativeAMD64 for later.
The IRBlockCache can now be resized during runtime (and it
expands automatically if necessary).
20080314 Working on the main loop, GXemul::ExecuteCycles(), which should
call each component's Run function in suitable proportions.
Adding a CPUComponent base class, from which MIPS_CPUComponent
inherits.
20080316 Switching from CVS to SVN.
Adding a test to the configure script for the "-ansi" compiler
option; implementing a simple parse_number to replace strtoull
to make everything build with -ansi. Various minor fixes to
make -ansi work on a Debian GNU/Linux system (using CXXFLAGS
instead of CFLAGS in Makefiles, and probe MAP_ANON in the
configure script using $CXX, not $CC).
Moving NativeTranslationExists and LookupCurrentCodePage from
MIPS_CPUComponent to CPUComponent; these are intended to be
used from most CPU components.
Removing lots of "cd .." stuff from the Makefiles; GNU make
did not work too well with them. Hopefully this will make
tracking down compile problems on GNU/Linux machines easier.
20080317 Beginning on an AddressDataBus abstract class/interface, which
e.g. the RAM component will implement.
20080320 Continuing on the RAMComponent class.
20080321 "make install" now installs .desktop and icon files.
More work on the RAMComponent class: endianness for loads and
stores larger than 8 bits, some simple unit tests.
20080322 Adding a preliminary toolbar to the GTKMM GUI.
Upgrading configure script check for gtkmm-2.4 from version
2.12.1 to 2.12.5. (Maybe not stricly necessary, but that's what
I am currently using for development.)
20080323 Experimenting with graying out the Undo and Redo actions in
the GUI (by querying the ActionStack).
20080324 Making the code compile cleanly with GNU C++' -pedantic. The
only module where -pedantic is not used is src/ir/, which needs
to cast e.g. uint8_t* to function pointer (for runtime
generated code).
Beginning on a mainbus (MainbusComponent), which will forward
reads and writes to other devices (such as RAM).
20080325 Making the counter in the ReferenceCountable class mutable,
because const objects also need to be reference countable.
Attempting to fix a bug related to the integer types passed
to UnitTest::Assert. (Problem noticed by Hollis Blanchard.)
Fixing arguments to and return handling of mmap(). (Also
noticed by Hollis.)
20080328 Making everything build using SunStudio (Sun C++ 5.9).
Implementing support for Double state variables.
CPU speed is now a state variable, in CPUComponent.
Cleaning up the CFLAGS/CXXFLAGS/COPTIM/CWARNINGS mess in the
configure script and Makefile.skel files; only CXXFLAGS (and
CXXFLAGSBASE) are used from now on. Also removing some other
unused legacy stuff from the configure script.
20080329 Minor fixes to make the source code build with a 20080321
snapshot of GCC 4.4.
20080330 Continuing on the GTKMM GUI (File->Open/Save/Save As show
file chooser dialogs, and Edit->Undo/Redo execute the "undo"
and "redo" commands). "File->New from Blank" and "Go/Continue"
also have bare-bones implementations.
Continuing on mainbus related things; moving the mips_cpu in
the testmips machine so that it is placed on the mainbus.
Adding a MemoryMappedComponent base class, which all memory-
mapped components should inherit. (The canonical example is
the RAMComponent class.)
The mainbus can now forward reads and writes to memory-mapped
child components.
20080401 Continuing on the mainbus (writing unit tests).
Reintroduce the 'bool' state variable type.
Adding a 'writeProtected' state bool for the RAMComponent, to
emulate ROM behavior in a simple way.
20080402 Creating a src/include/thirdparty directory. Moving debug_new.h
etc there. Also importing exec_elf.h from NetBSD [HEAD], and
updating doc/RELEASE.html to reflect the location of thirdparty
imports.
Implementing the initial framework for I18N/localization. The
first translation is Swedish. :-)
20080404 Making it possible to build with GTKMM 2.15.5 with --debug;
note, however, that this produces memory leak warnings, so
the GTKMM with --debug combination is not very useful yet.
Implementing basic support for updating the UI when some things
change: Undo/Redo-applicability, the name of the emulation, and
the RunState. (As UI::UpdateUI().)
Removing all old CVS $Id$ tags; they are not useful anymore.
The GTKMM GUI EmulationDesignArea now shows some dummy circles
(one for each component in the emulation setup).
20080405 Beginning on a FileLoader class, for loading binaries (e.g.
ELFs). Also adding a test/ directory, where small test files
used for unit tests may be stored. ELF program segments are
loaded, but no additional information yet (entry point etc.).
Catching std::exception at the outermost level, in order to
print a reasonable message if the application crashes.
Instead of loading binaries into an AddressDataBus, they are
now loaded into a Component, which, if it has a "pc" state
variable, is set to the entry point. Starting gxemul with
-E testmips test/FileLoader_ELF_MIPS actually attempts to
start running the binary now :-)
Some more work on the GTKMM GUI: the debug output window now
shows debug messages and commands being executed.
20080406 Adding a section about Model-View-Controller to the source
code documentation main page, and a simple picture of what the
component tree may look like.
Introducing "visible class names" in addition to the normal
class name, for components. This makes mips_cpu0 show up as
just cpu0, which is much nicer.
uint16_t, 32_t, and 64_t state variables are now outputted in
hexadecimal form in ToString(), for readability.
The ListComponents command now shows the short description of
each command.
Links are now generated from component names in machines.html
to corresponding component_xxx.html pages.
Beginning on internal support for instruction disassembly (not
user-accessible yet).
20080407 Continuing on the instruction disassembly stuff; importing
some MIPS defines from GXemul 0.4.6.3.
20080409 Implementing support in the CommandInterpreter for running
methods on components. If a component name is "executed" with
no method name given, the component tree is dumped. (This means
that there is no need for the 'tree' command anymore, so it
has been removed.)
Implementing the first component method: "unassemble" for the
CPUComponent.
GTKMM GUI test: Connecting to the "activate" signal of a text
entry, so that commands are executed once ENTER is pressed;
this does not work with tab-completion and command line
editing though, since only ENTER is signaled.
20080410 CPUComponent's unassemble method now remembers where it last
unassembled, and starts at m_pc if it is the first time it
is executed.
Porting more MIPS-related code from GXemul 0.4.6.3; some
more instructions can be disassembled now.
20080412 Implementing tab-completion of methods on components.
Executing a component name without any method name, which
results in the component tree being dumped, will now also
dump all of the component's state variables.
Continuing on porting GXemul 0.4.6.3's MIPS disassembly code.
The GTKMM GUI can now be shut down by the "quit" command.
20080413 Introducing a new RunState (NotRunning). Making the GTKMM GUI
Run/Pause buttons stay down while in the Running/Paused
runstates. (Also making the icons smaller by not showing text
labels, and enabling tooltips instead. Looks/feels nicer.)
Implementing an undoable ResetAction.
20080416 GUI updates: Fixed-width font in the debug console, and it
now scrolls to bottom on text output.
20080419 AddComponentAction must not remember component references
(for undo/redo); instead it now remember paths.
Also implementing a similar fix for RemoveComponentAction.
20080423 Action::Execute and Undo are now private, and only reachable
from the ActionStack (now a friend class of Action).
20080424 Upgrading configure script check for gtkmm-2.4 from version
2.12.5 to 2.12.7, to be in synch with my system.
20080426 The continue command now clears the Undo stack.
State variable names of components can now be tab completed.
"Running" a variable (e.g. cpu0.pc) will print its value.
20080427 Continuing a little on tab completion of variable names.
Implementing a "dirty flag" for the emulation; the GTKMM GUI
now asks for confirmation before quitting, opening a new
emulation, etc, if the model is dirty.
20080501 Fixing LoadComponentAction so that it uses path names for
Undo, and not reference pointers to components.
Fixing a crash bug in CommandInterpreter when tab completing
non-existant component names.
Implementing a VariableAssignmentAction. No expressions yet,
only simple values (numeric, strings, and boolean values).
20080531 Refactoring the Component::AddVariable* functions into a
single template function.
-------------------------------------------------------------------------------
(This is the 0.4.x branch.)
20080605 Fixing a corner case in ARM pc-relative loads, which was
unimplemented before. (Triggered by doing builds of pkgsrc
stuff inside emulated NetBSD/cats.)
20080610 Applying a patch from Jiri Svoboda, which implements the
ARM "bkpt" instruction.
============== RELEASE 0.4.6.4 ==============
20080611 Correcting the ARM pc-relative load fix; the wrong address
variable was used. Also, the pc-relative _load_ code was
used for stores as well, which was completely incorrect.
On ARM, since pc-relative loads are converted into immediate
movs, on writes to pages that contain such translations, the
ENTIRE page must be invalidated, not just the 1/32th that
was code. This has now been implemented.
============== RELEASE 0.4.6.5 ==============
20080808 Applying a patch from Kiyotaka Inaba which causes an ARM UND
exception to be generated by the instruction word 0xe6000011,
which is needed by gdb when running inside the emulator.
Also enabling ARM UND exceptions for ARM floating point
instructions (needed by both Linux and NetBSD/arm).
-------------------------------------------------------------------------------
(This is the C++ branch.)
20080810 Implementing a basic Trigger framework.
20080812 Continuing on Triggers; it's now possible to use static
member functions as callback functions. Beginning to connect
triggers to the GTKMM GUI.
-------------------------------------------------------------------------------
(This is the 0.4.x branch.)
20081103 Fix for a free() bug in bootblock_iso9660.c.
Updating the OpenBSD/landisk installation instructions from
4.2 to 4.4, after verifying that it works.
20081104 NOTE: I'm throwing away the C++ rewrite attempt ("0.5.x"),
moving back gxemul-legacy to gxemul/trunk. The old C++
rewrite attempt is archived under gxemul/branches/.
20081109 Updating most NetBSD 4.0 install instructions to 4.0.1.
============== RELEASE 0.4.6.6 ==============
20081114 Adding the M88K 'add' instruction for immediate values
(add_imm in cpu_m88k_instr.c).
Continuing on dev_pcc2 (used by mvme187).
Working on M88K interrupts. Very unstable so far; OpenBSD/
mvme88k bugs out randomly after the first few interrupts.
20081115 More work on dev_pcc2.
Found the "random" failure bug: the M88K interrupt handling
code didn't execute the interrupted instruction, but skipped
it instead.
Fixing a bug in the implementation of the m88k 'ext'
instruction (it worked like extu!).
Adding disassembly of all 88100 floating point instructions.
Minor updates to make the code build with GCC "4.4.0 20081017".
20081116 Implementing the m88k flt.ss, flt.ds, trnc.ss, trnc.sd, and
fadd.dds floating point instructions.
20081121 Updating the HelenOS version in the documentation to 0.3.0.
Continuing on 88100 interrupt/exception handling.
20081125 Bringing back the dummy machine_iyonix.c, which was removed
in SVN rev. 4866.
Fixing a bug in ARM pc-relative loads, when loading within
the same page as the pc.
20081126 Continuing on the Iyonix mode: connecting initial i80321
interrupts, and importing NetBSD/iyonix' bootconfig.h.
20081127 Importing iopi2creg.h from NetBSD (ARM Xscale I2C registers).
Implementing the SH4 fsrra instruction, 1/sqrt(x), and the
fipr instruction (vector dot-product).
20081203 Using register names in dev_clmpcc, but no actual progress on
getting OpenBSD/mvme88k to boot further.
FINALLY found the M88K bug I've been hunting: conditional
branches with delay slots did not set the delay target address
correctly in the case the branch was _not_ taken.
20081204 Interrupt exceptions (in cpu_dyntrans.c) are no longer
generated while single-stepping. (It was too annoying.)
20081206 Implementing rudimentary tx/rx interrupts for clmpcc;
OpenBSD/mvme88k can input/output stuff in userland now :)
Implementing the "max negative number" condition of the
M88K bcnd instruction.
Implementing the M88K triadic register 'rot' instruction.
The FIP != NIP+4 situation in the M88K rte instruction is now
supported (i.e. executing one instruction from the pipeline,
and then continuing somewhere else).
Continuing on Dreamcast PowerVR register names, etc.
20081208 Beginning on a osiop (NCR 53C710 SCSI) device skeleton.
20081210 The SH4 Store Queue memory area is 0x04000000 long, not 0x40.
20081211 OpenBSD/m88k's badaddr() should now be able to detect
invalid addresses; memory_rw.c causes exceptions on reads
that fail (but no actual address is supplied yet).
20081212 Moving the Dreamcast PowerVR2 DMA handling from
dev_dreamcast_g2 to dev_pvr, where it belongs.
20081213 Continuing on SH4 and PowerVR2 DMA.
Moving the unsupported guest OSes from guestoses.html to a
new page, unsupported.html, for clarity.
Continuing on the NCR 53C710 SCSI controller (dev_osiop.c).
20081217 Beginning on implementing the SCRIPTS instruction set for
dev_osiop.
20081219 Continuing a little bit on the osiop SCRIPTS ISA.
20081221 Implementing an instruction combination for M88K idle loop
detection (works with OpenBSD/mvme88k).
Adding a dummy LUNA 88K machine mode (machine_luna88k.c).
20081229 Continuing on the osiop SCRIPTS ISA.
20081231 More progress on dev_osiop.c.
20090101 FINALLY the osiop works well enough to let OpenBSD detect
SCSI devices! :-)
After some more hacking, everything is finally stable enough
to allow OpenBSD/mvme88k to be installed onto a disk image!
20090102 Optimizing the osiop SCSI device a bit; a default scripted
install of OpenBSD/mvme88k has dropped from 30 minutes to 10.
Fixing a bug which was caused by instructions like subu.co
with a destination register of r0 being treated as nop.
Various updates to make the source code build better on
Linux (Ubuntu 8.10), and with GNU make.
============== RELEASE 0.4.7 ==============
20090103 Merging fixes from the main trunk.
20090122 Merging in fdiv.sss and fadd.dsd from the main trunk.
20090123 NetBSD/hpcmips can now be installed and run using serial
console (i.e. without -X), in addition to using the
framebuffer.
============== RELEASE 0.4.7.1 ==============
20090215 Updating the guest OS page for HelenOS 0.4.0.
20090513 Fixing the MIPS tne, teq, tge, tgeu, tlt, and tltu instructions
to allow non-zero "code" values.
Adding a new Linux/Malta "variant 2" entry to the unsupported
guest OS page.
20090518 Changing the 8253 interrupt mechanism to assert interrupts
regardless of "mode" bits, causing Linux/Malta to get further.
Hacking on piix4 a bit to attempt to please Linux/Malta;
interrupts are lost.
20090610 Making configuration files work again! (Thanks to Wu Kan for
noticing this bug.)
20090611 Documentation updates (NetBSD 5 etc).
20090621 Adding a hack for the pcc2 PSCALEADJ register, making it
possible to install and run OpenBSD/mvme88k 4.5.
NetBSD/evbmips, /sgimips, and /cobalt 5.0 have been verified
to work.
============== RELEASE 0.4.7.2 ==============
20090626 Attempting to switch from C to C++ (_WITHOUT_ starting over
from scratch). Step 1: Rename all .c files to .cc. 2. Rename
all occurances of 'template' and 'class' to other things.
Step 3: Fix malloc/realloc cast errors.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTE: From here on, stuff was merged piece by piece from the
experimental C++ branch to the trunk; only the trunk is used
from this point.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
20090627 Continuing on the C to C++ switch.
Updating the OpenBSD/mvme88k regression test expect script
from 4.4 to 4.5.
Everything now builds with "make -j X".
20090628 Moving src/*.cc into a new directory, src/main/.
Finally adding the "make install" target (again).
Moving TODO and RELEASE notes to doc/.
Adding Doxygen documentation generation (again).
20090703 Moving more C++ code from the old branch into the main trunk.
(UnitTest, Component*, StateVariable, debug_new, ...)
Removing bogus/unfinished archs (Alpha, SPARC, M32R) and
the skeleton "userland emulation".
20090704 Moving thirdparty includes into src/include/thirdparty/.
20090705 Beginning to import various Components from the experimental
C++ branch (starting with the MVME187Machine).
Removing more bogus/unfinished code: Bebox and Luna88k.
Attempting to move in more code from the experimental C++
branch: the GXemul main class, command interpreter and related
commands, file loader, UIs, etc.
20090710 Moving in more code.
Added a note in guestoses.html that all current modes are
legacy modes, using the old framework.
Updating the OpenBSD/landisk regression test expect script
from 4.1 to 4.5.
Attempting to connect -V and -e so that the new framework is
used for new template machines.
Making everything build on Linux (missing includes etc.).
Removing all $CC stuff from configure (only $CXX remains).
Merging in the automated component and machine HTML
documentation stuff from the C++ branch.
Applying a patch from Izumi Tsutsui which makes NetBSD/hpcmips
work well with the clock again.
20090711 Applying another patch from Izumi Tsutsui, for setting the
ARCBIOS OSLOADPARTITION environment variable in a more correct
way. (Also updating the guest OS page for NetBSD/arc 5.0.)
Updating the NetBSD/pmax regression test expect scripts from
3.1 to 5.0 (for both R3000 and R4400).
Moving regression test expect scripts to the test/ directory.
Creating a regression test expect script for NetBSD/arc 5.0.
20090712 Adding a dummy "testm88k" machine for the new framework.
Updating the install instructions for NetBSD/cobalt to use the
RAMDISK installer (thanks to Izumi Tsutsui for noticing).
20090713 Beginning on an a.out FileLoader for the new framework.
20090714 Continuing on the a.out FileLoader.
20090716 a.out (big-endian only so far) can now be loaded into
AddressDataBus objects.
Modifying the "load" command so that it can load both component
trees _and_ other binaries (ELFs etc) into components.
Merging in a lot of TODO entries from the old C++ branch's TODO
file.
20090717 Implementing the 'move' command for moving components.
Removing the 'dirty flag' concept (it wasn't really used).
Adding a .dump method to the RAMComponent, for dumping raw
(physical) memory contents.
Adding a similar .dump method to the CPUComponent, for dumping
the virtual memory space. (Note that this can have side
effects, when reading from devices...)
Implementing the 'copy' command, for cloning components.
20090718 Updating the man page to reflect new command line options vs
legacy options.
Adding a .registers method to the CPUComponent for dumping CPU
registers; implementing specifics for MIPS and M88K.
Enabling simple variable assignment [again].
Implementing (in a ugly hack-ish way) serialization support
for the RAM component, using a "custom" StateVariable type.
Beginning to implement a "pre run check" mechanism.
20090720 Implementing PreRunCheck for CPU components (they need to have
an address/data bus, either as a child or as a parent, to run).
20090721 Implementing PreRunCheck for MainBusComponent.
At startup, a suitable part of the component tree is now shown.
Adding a GenerateShortestPossiblePath method on Component.
Adding a helper for outputting pre-0.6.0 style debug messages
from components ("[ componentname: message ]").
Tab completion (in the CommandInterpreter) now uses shortest
path, whenever possible, instead of full paths.
20090722 Implementing a new concept of "on reset commands"; beginning on
extending the ELF loader for symbol loading support.
20090723 Moving 'step' and 'time' concepts from the GXemul class to a
new component, the RootComponent.
Minor configure script fixes (allow --without-unittests etc.).
Removing the "NotRunning" run state.
Adding dummy "step", "backward-step", and "continue-backwards"
commands.
Implementing support for re-executing commands without args
("step" and "backward-step" so far).
20090724 The CPUComponent's .unassemble and .dump methods, and the
RAMComponent's .dump method, are now also re-executable.
CPU endianness is now serialized (as a bool, not enum).
Beginning to work on cycle execution!
20090725 The step command now takes an argument (default is 1).
20090726 Removing the "global time" concept.
Adding a helper for debug message indentation.
Adding an "accuracy" variable to the RootComponent, which must
be set to either "cycle" or "sloppy".
Implementing pre-run-checks for M88K and MIPS cpus, for
checking the r0 and zr registers, respectively.
20090727 When single-stepping, all state change (except for Custom
StateVariables such as RAM contents) is now displayed.
Porting the 88100 disassembly code from the old implementation
to the new.
Moving old main files into src/old_main/ (for clarity).
20090728 Including screenshots in auto generated machines.html.
Finally managed to implement cycle-accurate continuous
execution of multiple components at different speeds. :-)
RAMComponent now clears ram on reset.
Implementing a symbol registry for the new framework (which
is per CPU).
20090729 Slowly beginning to reimplement dyntrans in C++: Beginning on
the CPUComponent::DyntransExecute core loop, and some
basic structures. MIPS and M88K cpus call DyntransExecute.
20090731 Continuing on the new dyntrans core. The first instruction (a
M88K subu) can be executed on a dummy IC page.
[Re]implementing some simple MIPS and M88K instructions.
Arguments can now be passed during component creation, e.g.
nr CPUs, CPU model, or ram amount for a template machine.
Adding a 'raw' file loader, and a dummy SGI IP32 template.
20090801 Two MIPS16 instructions can be disassembled; disassembly
address is now not necessarily the same as m_pc (e.g. on
MIPS16, the lowest bit is cleared).
Beginning on implementing branches: the MIPS "b" instruction,
with delay slot (both continuous execution, and single-stepping
with pause in the middle of the branch, etc).
Continuing on the dyntrans core loop (inlined instruction calls
first, then run a few remaining calls).
20090802 Implementing a skeleton implementation for the backward-step
command (but since variable write handlers aren't implemented
yet, it doesn't really work).
Updating the Introduction chapter in the documentation with
a section about the New framework.
Beginning on M88K bsr and jmp.n instruction implementations,
function call trace support, etc.
20090803 Continuing on function call trace support.
20090804 Using anonymous unions and ptrdiff_t, to avoid overloading
pointers and size_t members unsafely, and other size_t usage.
(Thanks to Weinholt for commenting on this.)
20090807 Getting rid of the last 'delete' call (in MainbusComponent,
there was a _pointer_ to a memory map, instead of just a
memory map). The new GXemul framework is thus completely free
of malloc/free and manual delete. (mmap/munmap are, for natural
reasons, used though by the RAMComponent.)
Separating out the dyntrans specific parts of CPUComponent into
another base class, CPUDyntransComponent, so that it in theory
is possible to implement non-dyntrans CPUs.
Partial support for choosing MIPS ABI (affects disassembly and
register dumps, mostly).
20090810 Beginning on variable write handlers: MIPS zr register is
read-only, MIPS' model can now be changed correctly, and
root.accuracy can only be assigned "cycle" or "sloppy".
20090814 Continuing on write handlers for variables (root.step),
beginning on component tree snapshotting (using Clone). The
backward-step command now works reasonably well (but the only
snapshot taken so far is at step=0).
20090815 Reimplementing the M88K br, or_imm, or.u_imm, cmp, cmp_imm,
and_imm, and.u_imm, mask_imm, mask.u_imm, mak, mak_imm,
mulu_imm, xor_imm, and xor.u_imm instructions.
20090819 Base OTHERLIBS in configure on LDFLAGS.
20090821 Updating the TODO with thoughts/plans for the "plugin" part
of the new framework.
20090822 Beginning on a doc/framework.html, describing the new
framework concepts to end-users.
20090905 Continuing on the dyntrans core: page allocation.
20091207 The dev_ether MAC address can now be read.
20091212 Updating the OpenBSD/landisk install instructions in
guestoses.html from OpenBSD 4.5 to 4.6.
20091219 Include _GLIBCXX_DEBUG and _GLIBCXX_DEBUG_PEDANTIC defines in
debug builds, to potentially catch some STL misuses.
If valgrind is found by the configure script, it is used when
running 'make test'. If there is any output from valgrind -q
(i.e. errors), then make test fails.
20100127 Patch from Tassilo Philipp to enable PPC's fabs instruction.
Patch from Yana to use return value from net_ethernet_rx()
correctly in dev_ether.c.
20100128 Adding a check (for "make test") to see that delete isn't
used. Only a few exceptions are allowed.
20100129 Reimplementing the (non-specialized) M88K bsr instruction.
Continuing on the dyntrans core: page allocation. The basics
(page allocation and LRU deallocation) have been implemented,
but not really tested in practice yet.
20100130 Reimplementing the M88K ldcr instruction, and a slow version
of the st instruction (store 32-bit word).
Updating guest OS documentation (NetBSD/landisk 4.0.1 to
5.0.1, NetBSD/pmax 5.0 to 5.0.1, NetBSD/arc 5.0 to 5.0.1,
NetBSD/cobalt 5.0 to 5.0.1).
Renaming old testmips to oldtestmips, so that the name
testmips can be used by the new framework.
20100131 Reimplementing a slow version of the st.d M88K instruction.
"Quiet mode" is now turned off, if dropping into the debugger,
both by using -V and by triggering unimplemented instructions.
The m88k_cpu now takes a creation argument called r31, for the
initial stack pointer value. (Needed to run the rectangle
drawing demo, which assumes a valid r31 on startup.)
Reimplementing the M88K bsr.n instruction, including single-
stepping scenarios.
20100202 Reimplementing generic M88K loads/stores using templates. (In
the old implementation, these were constructed using build-
time generated define/include magic to simulate a template-
style mechanism in C).
Reimplementing the M88K divu d,s1,imm instruction.
Reimplementing the M88K lda.* instruction.
20100203 Beginning on reimplementing M88K bb0.n and bb1.n; only the
non-singlestepping variant done so far.
20100204 bb0.n and bb1.n should now also work when single-stepping.
Implementing the non-singlestep variant of M88K jmp.n.
Beginning on the M88K bcnd.n instruction.
20100205 Continuing on bcnd.n. The testm88k rectangle drawing demo
now runs :) both when running continuously, and when
single-stepping. (No graphical output yet, of course.)
20100206 Reimplementing the M88K ext and extu instructions.
Reimplementing the M88K bb0 and bb1 non-delayslot
instructions, including samepage variants.
Reimplementing the M88K stcr, jmp, and tb0 and tb1
instructions.
Fixing a bug in the MRU list in DyntransTranslationCache.
Fixing disassembly of tb0 and tb1, and implementing the
rest of the bcnd conditions.
Beginning on reimplementing MIPS (slow) loads/stores,
and reimplementing the MIPS addu, subu, srl, xor, multu,
mfhi, mflo, mthi, and mtlo instructions.
20100207 Reimplementing the MIPS slt and sltu instructions, various
branch instructions, and fixing some bugs; the rectangle
drawing demo for testmips runs in the new framework :)
Switching function call trace on/off during runtime now
clears [individual] translation pages.
20100213 Working on dyntrans abort peculiarities (in the middle of
delay-slots, etc).
20100214 Preparing for a quick 0.6.0 release.
============== RELEASE 0.6.0 ==============
20100214 Fixing order of machine.html and components.html generation,
relative to individual machines from skeleton files.
20100220 Improve install path guessing (DESTDIR and MANDIR) based on
feedback from Tom Callaway.
Moving the multiple identical instances of parse_number and
SplitStringIntoVector to a new StringHelper class, and adding
some unit tests.
Adding a PluginDescriptor class, for parsing plugin descriptor
strings (component:plugin(args):filename etc).
Beginning on the new plugin mechanism: adding an 'attach'
command, to be used instead of 'load'.
20100222 Scrapping the "plugin" concept; the already existing component
framework should hopefully be enough as it is.
20100314 Updating doc/translation.html with more examples on how the
dyntrans system works (in pre-0.6.x and in 0.6.x).
20100319 Fixing flawed mymkstemp by also passing O_CREAT | O_EXCL (used
on systems without mkstemp) (reported as Debian bug #574537).
20100322 const fixes, enabling builds using GCC's -Wcast-qual.
Fixes to allow build using GCC's -Wshadow.
20100326 Running 'make test' will now treat memory leaks as test
failure (in debug builds only). Also fixing a memory leak.
20100406 Bogus hack to machine_evbmips.cc to let RTEMS print some boot
messages (again?) for mvme5500.
20100806 nbjoerg on #GXemul (FreeNode) noticed an easy way to trigger
an unhandled case in memory_sh.cc; applying a potential fix.
20100830 Updating the OpenBSD/landisk guest operating system install
instructions from 4.6 to 4.7.
Improved the "pretty print" of components in the tree dump,
by moving it out to a per-component virtual function.
20100901 Beginning on CacheComponent (a generic memory cache component).
20100910 The mechanism for detecting when to assert MIPS compare
interrupts could sometimes stop delivering interrupts, if the
count register was read. Fixed by keeping track of how many
times the register is read and reverting it before doing the
count/compare interrupt assert check. (Thanks to Jakub Jermar
for noticing this bug using HelenOS.)
20100912 Updating the NetBSD/hpcmips guest operating system install
instructions from 4.0.1 to 5.0.2, and the NetBSD/algor install
instructions from 3.1 to 5.0.2.
20110212 Updating the NetBSD/pmax install instructions: 5.0.2 -> 5.1.
Updating OpenBSD/landisk instructions: 4.7 -> 4.8.
20110606 Updating the documentation on how to start Dreamcast binaries,
and updating from NetBSD/dreamcast 5.0.1 to 5.1.
20110609 Adding automagic guessing of Dreamcast ISO filesystem offset,
so that Linux/dreamcast can be booted without specifying the
offset.
Booting Dreamcast via bootblock now uses software PROM starting
point instead of calling a particular bootblock address, making
it possible to run a complete boot sequence in more cases.
When unimplemented SuperH instructions cause an abort failure,
GXemul now drops into the debugger instead of calling exit()
(if started with -K).
20110610 In SH4 instruction trace, include address in printout in a few
more cases than before.
Make NetBSD/dreamcast etc. boot correctly with 480 pixels in
the y direction (random read hack from PDTRA).
Use the 8x16 font as a fake Dreamcast ROM font.
Adding fake/skeleton Dreamcast ROM SYSINFO_INIT, SYSINFO_ID,
FLASHROM_INIT, and FLASHROM_READ calls.
20110616 Adding Dreamcast devices as symbols, so that runtime debugging
will show meaningful names instead of just addresses, when
reading and writing device registers.
20110621 Adding "trace" versions of SuperH bsr and bsrf_rn instructions.
Adding the first SuperH instruction combination for speeding
up a variable read loop (bt_samepage_wait_for_variable).
20110622 Continuing on Dreamcast and SuperH emulation: the SH4 DMA
channel numbers were off-by-one (but didn't really have any
negative effect). Experimenting with end-of-DMA mechanism in
dev_pvr. Adding a second device thing at 0x005f7c00, which
seems to be a PVR DMA register range, but not much used?
20110623 Found a bug in the SH4 fsca instruction: the angle argument for
sin and cos was incorrectly calculated. "dcfighting.bin" and
"gltest.bin" (two "homebrew" Dreamcast programs) now look much
more like on the real Dreamcast.
Various other small Dreamcast and/or SH4 related updates.
20110624 Updating OpenBSD/landisk installation instructions: 4.8 -> 4.9.
20110626 Moving Dreamcast BIOS emulation entry points to 0x8c000100+ofs,
so they are not "in the way" of the real BIOS' data area at
0x8c000000-0x8c0000ff. Some other minor Dreamcast fixes.
Moving GDROM DMA register handling into dev_dreamcast_gdrom.
Fixing a bug in the SH4 fipr instruction (inner product): the
rm and rn registers were reversed!
Implementing fmov_rm_frn for double-sized register access.
20110702 dev_ram now has a "trace" flag. Useful for figuring out e.g.
when/if a program accesses certain memory ranges.
Continuing on Dreamcast PVR (graphics) emulation; implementing
software triangle rendering, so that some demo programs (such
as Comstedt's "tatest", KOS' "gltest.bin" and "dcfighting.bin")
now render solid polygons. Color is random though, and no
textures yet.
20110706 Implementing register pair variant of SuperH fmov_frm_rn,
adding implementations of "LDS Rm,MACH", and "LDS Rm,MACL".
20110902 Reviving the old legacy Alpha CPU support, which was removed
20090703 (i.e. NOT using the new framework).
20110906 Slowly continuing on the Alpha emulation mode: going through
the existing virtual memory and PALcode stuff.
20120120 Avoid crash in cpu_ppc_instr_loadstore.cc for 64-bit emulation
(since only 32-bit access is actually implemented); fallback
to generic (slow) access.
Minor OpenFirmware and SPR fixes to reach further with a
FreeBSD/powerpc 9.0 kernel (-Xe g4).
Updating the NetBSD/pmax install instructions: 5.1 -> 5.1.1.
Updating the NetBSD/cobalt install instructions 5.0.1 to 5.1.1.
Redirect PowerPC SPRs 0x10c/10d to 0x11c/11d (Time Base).
20120121 Updating OpenBSD/landisk installation instructions: 4.9 -> 5.0.
20120507 Adding a patch from Juli Mallett for MIPS rdhwr reg 29.
20120617 Adding a patch from James Peacock for ARM MSR fields.
20120724 Adding a patch from David Brownlee (mkstemp on NetBSD), and
trying to make things build without warnings with GCC 4.6.x.
20120731 Adding a patch from David Brownlee: a more reasonable TOC is
returned in dev_dreamcast_gdrom.cc (for NetBSD/dreamcast).
20120906 Adding a patch from George Koehler to fix DHCP response bug.
20120922 Fixing an ARM instruction encoding bug: for shifter_operand
immediates, the carry bit should be set to bit 31 of the
shifter_operand if and only if rotate_imm != 0. I've added
detection for the case when this would bug out (although I
have never seen it happen yet), and fixed a bug which did
happen: for short register formats (i.e. no shift or other
complex things), the code should not be run, but it was run
anyway, leading to wrong Carry flag results for e.g. the TST
instruction. This was triggered when running int64_t modulo.
20130907 Updating NetBSD/dreamcast test instructions: 5.1 -> 6.1.1.
Updating NetBSD/pmax install instructions: 5.1.1 -> 6.1.1.
20131006 Adding a dummy Raspberry Pi machine mode.
20131109 Updating OpenBSD/landisk install instructions: 5.0 -> 5.4.
20140803 Some cleanup and minor progress of the Dreamcast PVR graphics.
(The graphics displayed when attempting to run the original
ROM now looks more reasonable.)
Updating NetBSD/dreamcast test instructions: 6.1.1 -> 6.1.4.
Updating NetBSD/pmax install instructions: 6.1.1 -> 6.1.4.
Renaming machine mvme187 to mvme187old to avoid collision.
Enabling ELF file support for 88K experiments.
20140805 Fixing color bug in dev_pvr.cc simpleline, which is used when
rendering Gouraud shaded triangles.
20140810 Beginning on disassembly of ARM THUMB (16-bit) encoding.
20140815 Adding rudimentary culling of clockwise / counter-clockwise
polygons in the PVR rendering code.
20140816 Fixing console.cc so that it doesn't complain about buffer
overrun when pasting a lot of data.
============== RELEASE 0.6.0.1 ==============
20150312 Making old framework config files work again (@filename).
20180203 Reviving the (dummy) Luna 88K machine mode from r5458.
20180204 Continuing on LUNA 88K stuff; some initial fake PROM putchar
functionality for experimenting with OpenBSD/luna88k.
20180205 Some initial OpenBSD/luna88k syscnputc() output works (hack).
20180206 Adding enough of a hack to let OpenBSD/luna88k distinguish
between LUNA 88K and 88K2, by faking FUSE_ROM string.
20180207 Adding a semi-broken framebuffer for LUNA 88K.
20180208 Making the code build with reasonably modern GNU C++ (6.4)
and clang (3.4.1), although there are lots of warnings.
Updating NetBSD/pmax install instructions: 6.1.4 -> 7.1.1.
20180209 Making OpenBSD/luna88k print some more things, by faking
more things in dev_luna88k.cc.
20180214 Minor fixes for LUNA 88K.
88K disasm shows "nop" instead of "or r0,r0,r0" now.
OpenBSD/luna88k 5.2 (an older version) now reaches userland
:-) issuing syscalls, but not 6.2 yet :-( and since no
interrupts are implemented yet, it doesn't really do much.
Removing notes about "legacy modes" in the documentation,
since it was too ugly and those modes are pretty much the
main focus of end-users of GXemul still.
20180219 Basic interrupt controller and timer interrupt for LUNA88K.
20180220 Minor progress on the LUNA88K framebuffer.
20180223 Serial controller interrupt progress for LUNA88K; some
interaction can be done with OpenBSD/luna88k ramdisk user-
land but it is shaky.
20180302 Fixing bug in dev_mp when returning amount of memory (it
was truncated to 32 bits). Found during YCX5 development.
20180410 Adding a dummy skeleton for an Intel i960 CPU component
using the new framework.
20180418 Adding dummy skeletons for a Cyclone/VH (i960VH) evaluation
board, and the HP 700/RX X-terminal (i960CA).
20180419 Implementing basic disassembly of some i960 instructions
(only the CTRL group so far), and basic register dump
functionality.
20180420 i960 MEM and COBR instruction group disassembly has now
been implemented.
20180422 Adding a simple b.out file loader for i960 binaries, but
no support for symbols yet.
Beginning to add some REG instruction disassembly (i960).
20180423 Implementing the rest of i960CA REG instruction disasm.
20180424 Beginning to implement i960 dyntrans instructions (a simple
'b' branch and a simple 'mov lit,reg' so far).
20180428 Implementing happy case of an "lda" i960 instruction which has
an extra displacement word, i.e. non-standard dyntrans
instruction length.
20180503 Implementing i960 lda with immediate 12-bit offset, and
dummy (nop) sysctl cache invalidation (msg type 0x01).
20180613 Fixing an old TODO for invalidating translation caches when
using non-4KB pages for MIPS. This makes HelenOS 0.7.1/malta
boot further than before.
20180614 Removing an old TODO regarding MIPS count/compare interrupts;
this causes HelenOS on Malta to run much faster (while
NetBSD/evbmips (malta) and /cobalt are not worse off than
before).
Updating NetBSD/evmbips and /cobalt installation instructions
to 7.1.2 (with a note about clock not being correct).
More work on the other-than-4KB bug fix.
20180618 Doubling DEFAULT_DYNTRANS_CACHE_SIZE from 48 to 96 MB.
Updating more NetBSD install instructions to 7.1.2.
20180619 When reading disk sectors from the 'disk' device (for e.g.
testmips), automatically move to the next sector after
reading (or writing).
Allow testmips programs to detect whether the X11 framebuffer
is in use or not (returns 0x0 as resolution if not).
20180706 Adding a dummy VoCore machine skeleton using the old framework
(with the wrong CPU type 4KEc instead of 24K).
20180707 Implementing the rorv (aka rotrv?) MIPS instruction.
20180725 More clang fixes.
20180726 Minor progress on booting Linux/VoCore. MIPS rdhwr CC is
implemented as reading the COP0_COUNT register.
20180819 Applying a patch from Andreas Gustafsson (gson) for the MIPS
div and ddiv instructions, which checks for divide overflow
manually before doing the divide.
20180820 Updating the Sprite/DECstation URLs.
20180821 DECstation 5000/125 "3MIN" mode has been broken for quite
a while; attempting to rewrite/resurrect it.
20180822 Rewrote/refactored enough of the dec_ioasic code to make the
5000/125's original PROM output its first boot messages again
(and NetBSD/pmax and OpenBSD/pmax too).
20180823 Continuing on making 5000/125 emulation work again: rewriting
the interrupt code for the scc serial controller, and
connecting TURBOchannel graphics cards.
Fixing the LK201 keyboard self-test codes so that the 5000/125
PROM doesn't complain.
============== RELEASE 0.6.0.2 ==============
20180910 Running the SGI O2 PROM works a little bit again, with some
hacks (updating the documentation).
20180917 OpenBSD/landisk 6.3 guest OS install instruction update.
20180918 Fixing a regression bug which was introduced September 2012
(svn r5805), regarding shifted immediate values, which caused
OpenBSD/cats to fail during install.
20180920 Making ARM disassembly show THUMB instructions, if the lowest
bit of the address is 1. (They can not be executed yet though.)
Fixing broken "print" command. Oops.
Implement some more THUMB disassembly.
Fail rather than silently treating ARM instructions beginning
with 0xf as nops.
Allow the emulator to start in THUMB mode (lowest pc bit set).
20180921 Continuing on ARM THUMB disassembly.
Beginning to implement very slow THUMB interpretation (not
dyntrans). Horrible performance-wise, but better than nothing.
20180924 Oops, forgot to add machine_rpi.cc back in 20131006.
20180925 Cleaning up some more files on make clean_all. Thanks to
Göran Weinholt for noticing.
20180927 Fixing big-endian ARM loads/stores (except perhaps double-word
loads and stores); probably slows everything down a bit.
20181001 Continuing on the slow THUMB instruction interpretation.
20181008 Disk images added using -d for SGI modes are now SCSI, not IDE.
Importing newer crimereg.h and crmfbreg.h from NetBSD.
20181009 Moving around SGI O2 graphics code, in preparation for making
more use of the "new" NetBSD defines.
20181011 SGI O2 GBE now switches resolution if the OS wants it (i.e.
Linux/O2), rather than requiring a recompile.
Also, detection of Linux' "tweaked" (linear) mode, thus
avoiding a recompile when experimenting with Linux/O2.
NetBSD can now show some output on the O2 framebuffer too.
20181012 Fixing a bug in the generic X11 framebuffer output, so that
scaledown is preserved even when a guest OS switches resultion
at runtime.
Continuing on the SGI O2 graphics; when the nr of tiles or
"partial pixels" is in mismatch with the screen resolution,
the skewed result now looks the same as on my real physical O2.
20181013 More SGI O2 graphics work: TLBs. OpenBSD can now show graphical
console messages.
20181015 Some more emulated O2 registers now return the same values as
my real O2 does.
Refactoring the O2 "output" to always be 24-bit, separate from
the emulated framebuffer tiles (which may be e.g. 8 bit).
NetBSD's colors (RG3B2 mode) are now probably more correct.
Changing from 64 to 128 MB ram for the O2; this matches what
my real O2 has, and it is now detected correctly both by OSes
and the PROM.
Implementing the O2's GBE cursor; both bitmap and crosshair
modes work exactly like on the real machine now.
Finally fixed the bug which caused scroll-up to not work when
running the O2's PROM.
20181016 More work on the O2 graphics; managed to get rid of the Linux
tweaked special case rendering mode.
Splitting the O2 GBE into a GBE part and a Rendering Engine
part.
20181017 Refactored the register representation in dev_sgi_ip32's crime
interrupt controller.
Adding a horrible hack to enable the use of a RAM_MIRROR at
0x40000000 (for SGI O2 emulation).
20181018 Updating the OpenBSD/sgi installation instructions (still
in unsupported.html though, and still only diskless).
20181019 Fixing some 8242 key encodings (used by the SGI O2 mode).
Better memory bank stuff for SGI O2 (128 vs 256 MB RAM).
Taking the FR bit of the MIPS status register into account to
use 64-bit floating point registers rather than pairs of 32-bit
registers (need for OpenBSD/sgi to work).
Moving OpenBSD/sgi from unsupported.html to guestoes.html.
20181022 Fixing broken MACE interrupt mechanism for SGI O2.
20181025 Implementing MTE_MODE_COPY in the SGI O2 memory transfer engine
to allow NetBSD to scroll up the framebuffer.
Made the pckbc work with NetBSD/sgimips.
Only allow SGI O2 MTE memory fills to pages that are in a TLB.
20181026 Some cleanup and refactoring of the O2 rendering engine and
other things.
ARCS environment fixes (better values for diskless booting).
20181030 Updating NetBSD/sgimips guest OS instructions to version 8.0.
Some progress on the hw accelerated graphics operations used
by NetBSD/sgimips' Xorg driver.
20181031 Better separation of pckbc scancode translation tables 1, 2,
and 3, and beginning to play around with PS/2 mouse movement.
20181101 Fixes to the SGI O2 mec ethernet implementation's register
alignment to correctly support mixed 32/64-bit access.
20181102 Adding some PHY/MII related parts of the O2 mec device (not
needed by NetBSD/OpenBSD it seems, but by the O2 PROM).
20181106 Splitting SGI O2 rectangle drawing and line drawing into
separate parts; NetBSD/sgimips' Xorg now looks reasonable.
20181107 Progress on PS/2 mouse emulation; NetBSD accepts it as "pms0
at macekbc0" in the SGI O2 emulation mode. (No actual host
mouse input yet though.)
20181108 Implementing host X11 mouse input for the pckbc device.
20181112 More work on the O2 rendering engine Raster Ops. Moving windows
within NetBSD's X11 now looks as it should.
20181115 Changing the PCI product ID for the AIC7880 SCSI controller in
the SGI O2 emulation mode to match my real O2 (0x9004, 0x8078).
20181120 Continuing on SGI O2 graphics: "overlays" (seem to always be
8 bits deep?).
20181121 Getting rid of a hack in the O2 rendering code for "stipple
patterns", by looking at the "stipple mode" register.
20181122 Fixing an old very annoying bug where floating point number
0x0 was interpreted as 2.22507e-308 rather than 0.0. Thanks to
Maya Rashish (coypu@SDF.ORG) for reporting the bug.
20181203 Beginning on test/floatingpoint infrastructure. Fixing some
more floating point bugs.
============== RELEASE 0.6.1 ==============
20181217 Implementing the ARM uxtb instruction.
Implementing a simple Android boot.img file loader, and two
dummy Android ARM machines ("Sony Xperia Mini" and "Finow X5
Air").
Treating ARM dsb/dmb/isb instructions as NOPs for now.
20190101 Implementing the ARM v7 movt and movw instructions.
20190103 Implementing the ARM sxth, uxth, bfi, and ubfx instructions.
20190110 Adding disassembly (but not execution yet) of ARM uxtab, uxtah,
ldrex, and strex instructions.
20190112 Making sure that when writing to mirrored RAM, any dyntrans
translations made in either the mirror or mirrored ranges are
invalidated.
20190122 Beginning on a hack to allow emulated SGI O2 machines have more
than 256 MB of RAM. Works with OpenBSD/sgi so far.
20190206 Implementing the ARM ldrex/strex (load-linked / store-
conditional) instructions, and mls (multiply-and-subtract).
20190218 Implementing the ARM rev, uxtab, and uxtah instructions.
20190224 Implementing the ARM sbfx instruction.
20190227 Adding a skeleton RISC-V CPU and RISC-V "virt" machine.
Refactoring some parts of the new framework to deal better
with variable length instructions during disassembly.
20190306 Applying a patch from Andreas Gustafsson (gson) to set the
SA_RESTART flag in the timer sigaction call.
20190417 Applying most of NetBSD's patches for the gxemul package (all
except two).
20190418 Adding 512 KB ROM at 0xfff80000 in the HP 700/RX machine.
20190422 Implementing the i960 "mov reg,reg" instruction.
20190502 Adding a section to the documentation about how to use the
emulator as a debugger (breakpoints, unassembling, single-
stepping, inspecting registers, and so on).
20190515 Making sure that when invalidating virtual addresses in
the dyntrans cache, take into account that not all CPUs can
use all 64 bits for virtual addresses. This fixes a very old
bug which affected Glatt MU/MK. Unfortunate side effect means
that internal cache invalidation goes from O(1) to O(n) for
64-bit address spaces. :-(
20190519 Better fix for the issue found four days ago, taking 32-bit
addressing (UX=0) on 64-bit MIPS CPUs into account. The cache
invalidation code is now O(1) again. :-)
20190520 Unfortunately, to make everything work with all guest OSes
with many different kinds of CPUs (R3000, R4000, R10000),
the invalidation is now O(n) again, but it works.
20190521 De-emphasizing the new framework in the man page and in the
help/usage message produced when running gxemul with no
arguments, focusing on the old/legacy framework.
Removing the MIPS CPU emulation and testmips machines from
the new framework completely. Any MIPS enhancements and bug
fixes will go into the old framework only.
Renaming oldtestmips back to testmips.
20190523 Starting to move guest OS installation instructions into
individual machine pages, rather than having all of them
randomly in the general guest OS page.
20190525 Adding detection of /opt/X11/{include,lib} in the configure
script, to build with X11 on MacOS with XQuartz installed
(thanks to eschatologist in the #GXemul IRC channel on
FreeNode for noticing this).
20190530 Removing the "QEMU_MIPS" machine mode, which was useful back
in 2006 to compare performance against QEMU's MIPS emulation.
20190601 The fix 2018-06-13 for translation invalidation when using
larger than 4 KB pages, which made HelenOS/malta run further,
caused a regressions which broke NetBSD/hpcmips (on VR4121
CPUs, which have 1 KB native page size). A bit of cleanup seems
to have fixed this, so that both NetBSD/hpcmips and
HelenOS/malta work now.
Applying a fix for the ARM sbc and rsc instructions from
Joergen Nilsson.
20190606 Changing PCI device nr from 9 to 10 for the PIIX4 controller
in the Malta emulation mode, to match a real dmesg from
NetBSD/malta.
Fixing disassembly of the MIPS TGEI, TGEIU, TLTI, TLTIU, TEQI,
and TNEI instructions (NetBSD's pkgsrc patch had it wrong!).
Implementing the MIPS TGEI, TGEIU, TLTI, TLTIU, TEQI, and TNEI
instructions (but have not really tested them).
Updating NetBSD/evbmips (Malta) installation instructions from
7.1.2 to 8.0 (which needs the tgeiu instruction to boot).
Fixing pmax bootpath bug (thanks for Andreas Gustafsson for
figuring out what the problem was).
20190610 Adding a memory range (ROM) dumping tool for HP 700/RX to the
experiments directory.
20190611 Expanding the MIPS lw/sw 2-, 3-, and 4-instruction combinations
(when loading/storing using the same base register) so that
they are used also when emulating 64-bit CPUs such as the
R4400. (Note: still lw/sw, i.e. 32-bit loads and stores, NOT
ld/sd.) Also stretching it to 5-instruction-sequences.
20190614 Adding __builtin_expect (likely/unlikely) detection to the
configure script.
============== RELEASE 0.6.2 ==============
20190626 Rounding up disk image sizes to full cylinders; fixes a bug
where guest OSes could fail to read the end of e.g. a .tar.gz
file supplied as a disk image on the command line.
20201006 Applying a rather large patch from Jason Thorpe for using
/dev/tap devices in addition to the existing networking modes.
The patch also consists of enhancements to the DEC21143 and
Lance ethernet devices to perform packet filtering.
20201015 Adding support for masks for memory mapped components in the
new framework. Used so far by the HP 700/RX, which has 2 MB
RAM repeated throughout 0x30000000..0x3fffffff.
20201101 bootblock.cc now parses SGI disk boot blocks, and tries to
load the OSLoader (sash), if booting without an explicitly
provided OS kernel.
20201103 The ECOFF file loader can now (barely) load relocated binaries,
such as "sash" from an IRIX installation on my real O2.
20201105 Some minor refactoring of arcbios environment variables etc,
to attempt to get emulated O2 boot-from-disk image (or cdrom
image) to work better.
20210116 Include ASID and VPN2 in MIPS load/store misalignment
exceptions (patch from Nick Hudson).
20210123 Adding a patch from Luchezar Georgiev for missing variant of
rot for 88100 (immediate argument), and for missing addu_cio
and subu_cio instructions.
Inspired by Luchezar Georgiev's patch for subu_cio, a closer
look at the subu borrow bit resulted in a bug fix which finally
allows a OpenBSD/luna88k 6.8 ramdisk to boot all the way to
userland.
20210127 Writing some ugly glue code to connect the Lance Ethernet
device (dev_le) to the LUNA88K machine. An OpenBSD/luna88k 6.8
ramdisk can now (barely) reach the internet using TCP/IPv4.
20210130 Writing guest OS install instructions for running OpenBSD/
luna88k with root-on-nfs, which involves using NetBSD/pmax as
an NFS server and OpenBSD/sgi (!) to run MAKEDEV.
20210207 Fixing a spelling mistake in the 88K fdiv.sss instruction,
making self-compilation of [an older version of] GXemul inside
OpenBSD/luna88k get further.
20210209 Adding keyboard support to dev_luna88k.
20210213 Implementing exception cases in 88K xmem_slow implementation.
20210214 Implementing the fdiv.dss 88K instruction.
20210215 Implementing the fsub.sss 88K instruction.
============== RELEASE 0.6.3 ==============
20210215 Implementing the fadd.dss 88K instruction, and working a bit
more on the exception cases in the xmem instruction.
20210220 Implementing mouse emulation support for the LUNA88K machine.
Updating OpenBSD/sgi install instructions (6.5 -> 6.8),
and including a screenshot of X11 running.
20210221 Handle return values from interrupted select() when checking
for available console input. (Found when using CTRL-C on Linux
to enter the debugger command line, and noticed that it was
spuriously broken.)
20210222 Basic multiprocessor bootup of OpenBSD/luna88k now works, but
it is slightly unstable.
============== RELEASE 0.6.3.1 ==============
20210228 Switching back from C++ to plain C.
Implementing a helper method for registering device addresses
as symbols (so that it can be used from several machines).
20210307 Subtle colorized output when stdin/stdout are connected to a
tty, to make it quicker to interpret text output. Enabled with
-G or by setting the CLICOLOR environment variable. Can be
disabled with -A.
20210309 Beginning to separate debug messages into subsystems, that have
individual verbosity levels.
Making -K work more consistently (enter the debugger at the
end of a run). -V implies -K.
Making -T work better for M88K (breaking into the debugger
directly on bad memory accesses, if -K is used).
20210310 All MIPS machines now register their devices as symbols (based
in kseg1, i.e. 0xffffffffa0000000).
20210311 Making -T work better for MIPS, PPC, ARM, and SuperH.
20210314 Adding a -L command line option for enabling tap networking
without using configuration files.
-x is now needed if one wants separate xterm windows for serial
I/O when using configuration files with a single machine.
20210316 debugmsg subsystems can now be registered at runtime; this is
so far done from the Lance Ethernet device.
Adding a 'verbosity' debugger command for inspecting and
setting the verbosity level for individual subsystems.
20210318 Fixing an annoying 'backspace' bug in the debugger command
line handling, where the response sometimes could become
"unknown command ''".
Implementing CTRL-W (erase word) in the debugger.
Implementing CTRL-T (SIGINFO-like status line) in the debugger.
20210320 Removing the UNSTABLE_DEVEL configure define; it was not used
much, and the debugmsg verbosity levels can be used in its
place.
Fixing a bug for MIPS R2000/R3000 when writing to coprocessor 0
"entrylo" register (if the lowest 8 bits were 0, the code took
the non-R2000/R3000 code path).
20210321 Adding an empty i960 CPU skeleton [again].
Moving 'arch' from struct machine to struct cpu; in the future,
perhaps this would allow a machine to have heterogenous CPU
sets (such as the Dreamcast with both SuperH and ARM).
Removing "slow_serial_interrupts_hack_for_linux" (-U) command
line option, since it is not used for most guest OSes, and
occupied a command line option char.
20210323 Breaking out the mb89352 SCSI Protocol Controller from the
luna88k device, and beginning to implement it. Works well
enough for OpenBSD's "boot" to read the disk and load the
kernel, but not well enough for the kernel to like it.
20210324 Adding support for 00 99 01 07 variant of luna88k a.out.
20210325 The mb89352 SCSI controller uses its own subsystem for debug
messages.
20210327 Adding an empty RISC-V CPU skeleton [again].
Implementing enough of the mb89352 to allow OpenBSD/luna88k
to boot with SCSI (both the boot loader and the kernel)!
20210401 Applying a patch from George Matsumura to make things build
better on Linux: __attribute__((__packed__)); in bootblock.h.
20210405 Adding hardcoded boot_unit=0 and boot_partition=0 NVRAM
variables to the LUNA-88K machine, allowing OpenBSD/luna88k
to boot from disk without asking for root and swap partitions.
Adding 'R' (upper-case) disk image prefix, as a shorthand for
creating temporary overlays.
20210407 Code for idling the host processor has been moved out from
individual CPU implementations to the main emul loop.
Implementing an X11 mouse pointer grab mechanism. Grab is
activated by clicking in a framebuffer window, and released
using left CTRL + ALT. When grab is active, the host mouse
cursor is hidden and the window caption changes to indicate
that grab is active.
20210408 Implementing an unusual 88K "not_maxneg_nor_zero" bcnd
condition.
20210409 Moving the LUNA88K framebuffer to its own device file.
Beginning to implement the LUNA88K front panel LCD.
Also fixing a bug where the rightmost pixel (or 8 pixels in
the case of monochrome) were not drawn.
20210410 Also check for X11R7 in the configure script, in addition
to X11R6.
20210417 Porting over i960CA disassembly from the C++ framework.
20210418 More i960 stuff, including re-adding the (so far dummy)
Cyclone VH machine.
Assuming availabilty of __func__ (C99 standard).
20210422 Enabling idle detection for OpenBSD/luna88k, which uses a
bcnd.n instruction. A hack, but it seems to work.
Fixing a bug where console input could randomly be lost when
idling, if there were multiple emulated serial ports.
============== RELEASE 0.7.0 ==============
|