src/emu/cpu/cp1610/1610dasm.c
| r6343 | r6344 | |
| 4 | 4 | |
| 5 | 5 | CPU_DISASSEMBLE( cp1610 ) |
| 6 | 6 | { |
| 7 | | UINT16 op = oprom[0]; |
| 7 | UINT16 oprom16[4]={ (oprom[0]<<8)|oprom[1], (oprom[2]<<8)|oprom[3], (oprom[4]<<8)|oprom[5], (oprom[6]<<8)|oprom[7] }; |
| 8 | UINT16 op = oprom16[0]; |
| 8 | 9 | UINT16 subop; |
| 9 | 10 | UINT16 ea, ea1, ea2; |
| 10 | 11 | unsigned size = 1; |
| r6343 | r6344 | |
| 18 | 19 | sprintf(buffer, "HLT"); |
| 19 | 20 | break; |
| 20 | 21 | case 0x001: /* 0 000 000 001 */ |
| 21 | | subop = oprom[1]; |
| 22 | subop = oprom16[1]; |
| 22 | 23 | switch (subop & 0x3f8) |
| 23 | 24 | { |
| 24 | 25 | case 0x280: /* 1 010 000 xxx */ |
| r6343 | r6344 | |
| 32 | 33 | size += 1; |
| 33 | 34 | break; |
| 34 | 35 | case 0x2b8: /* 1 010 111 xxx */ |
| 35 | | ea1 = oprom[2]; |
| 36 | | ea2 = oprom[3]; |
| 36 | ea1 = oprom16[2]; |
| 37 | ea2 = oprom16[3]; |
| 37 | 38 | ea = ((ea2&0xff)<<8) | (ea1&0xff); |
| 38 | 39 | sprintf(buffer,"MVII #%04X, R%01d",ea,subop&7); |
| 39 | 40 | size += 3; |
| r6343 | r6344 | |
| 49 | 50 | size += 1; |
| 50 | 51 | break; |
| 51 | 52 | case 0x2f8: /* 1 011 111 xxx */ |
| 52 | | ea1 = oprom[2]; |
| 53 | | ea2 = oprom[3]; |
| 53 | ea1 = oprom16[2]; |
| 54 | ea2 = oprom16[3]; |
| 54 | 55 | ea = ((ea2&0xff)<<8) | (ea1&0xff); |
| 55 | 56 | sprintf(buffer,"ADDI #%04X, R%01d",ea,subop&7); |
| 56 | 57 | size += 3; |
| r6343 | r6344 | |
| 66 | 67 | size += 1; |
| 67 | 68 | break; |
| 68 | 69 | case 0x338: /* 1 100 111 xxx */ |
| 69 | | ea1 = oprom[2]; |
| 70 | | ea2 = oprom[3]; |
| 70 | ea1 = oprom16[2]; |
| 71 | ea2 = oprom16[3]; |
| 71 | 72 | ea = ((ea2&0xff)<<8) | (ea1&0xff); |
| 72 | 73 | sprintf(buffer,"SUBI #%04X, R%01d",ea,subop&7); |
| 73 | 74 | size += 3; |
| r6343 | r6344 | |
| 83 | 84 | size += 1; |
| 84 | 85 | break; |
| 85 | 86 | case 0x378: /* 1 101 111 xxx */ |
| 86 | | ea1 = oprom[2]; |
| 87 | | ea2 = oprom[3]; |
| 87 | ea1 = oprom16[2]; |
| 88 | ea2 = oprom16[3]; |
| 88 | 89 | ea = ((ea2&0xff)<<8) | (ea1&0xff); |
| 89 | 90 | sprintf(buffer,"CMPI #%04X, R%01d",ea,subop&7); |
| 90 | 91 | size += 3; |
| r6343 | r6344 | |
| 100 | 101 | size += 1; |
| 101 | 102 | break; |
| 102 | 103 | case 0x3b8: /* 1 110 111 xxx */ |
| 103 | | ea1 = oprom[2]; |
| 104 | | ea2 = oprom[3]; |
| 104 | ea1 = oprom16[2]; |
| 105 | ea2 = oprom16[3]; |
| 105 | 106 | ea = ((ea2&0xff)<<8) | (ea1&0xff); |
| 106 | 107 | sprintf(buffer,"ANDI #%04X, R%01d",ea,subop&7); |
| 107 | 108 | size += 3; |
| r6343 | r6344 | |
| 117 | 118 | size += 1; |
| 118 | 119 | break; |
| 119 | 120 | case 0x3f8: /* 1 111 111 xxx */ |
| 120 | | ea1 = oprom[2]; |
| 121 | | ea2 = oprom[3]; |
| 121 | ea1 = oprom16[2]; |
| 122 | ea2 = oprom16[3]; |
| 122 | 123 | ea = ((ea2&0xff)<<8) | (ea1&0xff); |
| 123 | 124 | sprintf(buffer,"XORI #%04X, R%01d",ea,subop&7); |
| 124 | 125 | size += 3; |
| r6343 | r6344 | |
| 136 | 137 | break; |
| 137 | 138 | case 0x004: /* 0 000 000 100 */ |
| 138 | 139 | size += 2; |
| 139 | | ea1 = oprom[1]; |
| 140 | | ea2 = oprom[2]; |
| 140 | ea1 = oprom16[1]; |
| 141 | ea2 = oprom16[2]; |
| 141 | 142 | ea = ((ea1<<8)&0xfc00) + (ea2&0x3ff); |
| 142 | 143 | if ((ea1&0x300) == 0x300) |
| 143 | 144 | { |
| r6343 | r6344 | |
| 761 | 762 | break; |
| 762 | 763 | case 0x200: /* 1 000 000 000 */ |
| 763 | 764 | size += 1; |
| 764 | | ea = oprom[1]; |
| 765 | ea = oprom16[1]; |
| 765 | 766 | sprintf(buffer, "B %04X",pc+2+ea); |
| 766 | 767 | break; |
| 767 | 768 | case 0x201: /* 1 000 000 001 */ |
| 768 | 769 | size += 1; |
| 769 | | ea = oprom[1]; |
| 770 | ea = oprom16[1]; |
| 770 | 771 | sprintf(buffer, "BC %04X",pc+2+ea); |
| 771 | 772 | break; |
| 772 | 773 | case 0x202: /* 1 000 000 010 */ |
| 773 | 774 | size += 1; |
| 774 | | ea = oprom[1]; |
| 775 | ea = oprom16[1]; |
| 775 | 776 | sprintf(buffer, "BOV %04X",pc+2+ea); |
| 776 | 777 | break; |
| 777 | 778 | case 0x203: /* 1 000 000 011 */ |
| 778 | 779 | size += 1; |
| 779 | | ea = oprom[1]; |
| 780 | ea = oprom16[1]; |
| 780 | 781 | sprintf(buffer, "BPL %04X",pc+2+ea); |
| 781 | 782 | break; |
| 782 | 783 | case 0x204: /* 1 000 000 100 */ |
| 783 | 784 | size += 1; |
| 784 | | ea = oprom[1]; |
| 785 | ea = oprom16[1]; |
| 785 | 786 | sprintf(buffer, "BZE %04X",pc+2+ea); |
| 786 | 787 | break; |
| 787 | 788 | case 0x205: /* 1 000 000 101 */ |
| 788 | 789 | size += 1; |
| 789 | | ea = oprom[1]; |
| 790 | ea = oprom16[1]; |
| 790 | 791 | sprintf(buffer, "BLT %04X",pc+2+ea); |
| 791 | 792 | break; |
| 792 | 793 | case 0x206: /* 1 000 000 110 */ |
| 793 | 794 | size += 1; |
| 794 | | ea = oprom[1]; |
| 795 | ea = oprom16[1]; |
| 795 | 796 | sprintf(buffer, "BLE %04X",pc+2+ea); |
| 796 | 797 | break; |
| 797 | 798 | case 0x207: /* 1 000 000 111 */ |
| 798 | 799 | size += 1; |
| 799 | | ea = oprom[1]; |
| 800 | ea = oprom16[1]; |
| 800 | 801 | sprintf(buffer, "BUSC %04X",pc+2+ea); |
| 801 | 802 | break; |
| 802 | 803 | case 0x208: /* 1 000 001 000 */ |
| 803 | 804 | size += 1; |
| 804 | | ea = oprom[1]; |
| 805 | ea = oprom16[1]; |
| 805 | 806 | sprintf(buffer, "NOPP %04X",pc+2+ea); |
| 806 | 807 | break; |
| 807 | 808 | case 0x209: /* 1 000 001 001 */ |
| 808 | 809 | size += 1; |
| 809 | | ea = oprom[1]; |
| 810 | ea = oprom16[1]; |
| 810 | 811 | sprintf(buffer, "BNC %04X",pc+2+ea); |
| 811 | 812 | break; |
| 812 | 813 | case 0x20a: /* 1 000 001 010 */ |
| 813 | 814 | size += 1; |
| 814 | | ea = oprom[1]; |
| 815 | ea = oprom16[1]; |
| 815 | 816 | sprintf(buffer, "BNOV %04X",pc+2+ea); |
| 816 | 817 | break; |
| 817 | 818 | case 0x20b: /* 1 000 001 011 */ |
| 818 | 819 | size += 1; |
| 819 | | ea = oprom[1]; |
| 820 | ea = oprom16[1]; |
| 820 | 821 | sprintf(buffer, "BMI %04X",pc+2+ea); |
| 821 | 822 | break; |
| 822 | 823 | case 0x20c: /* 1 000 001 100 */ |
| 823 | 824 | size += 1; |
| 824 | | ea = oprom[1]; |
| 825 | ea = oprom16[1]; |
| 825 | 826 | sprintf(buffer, "BNZE %04X",pc+2+ea); |
| 826 | 827 | break; |
| 827 | 828 | case 0x20d: /* 1 000 001 101 */ |
| 828 | 829 | size += 1; |
| 829 | | ea = oprom[1]; |
| 830 | ea = oprom16[1]; |
| 830 | 831 | sprintf(buffer, "BGE %04X",pc+2+ea); |
| 831 | 832 | break; |
| 832 | 833 | case 0x20e: /* 1 000 001 110 */ |
| 833 | 834 | size += 1; |
| 834 | | ea = oprom[1]; |
| 835 | ea = oprom16[1]; |
| 835 | 836 | sprintf(buffer, "BGT %04X",pc+2+ea); |
| 836 | 837 | break; |
| 837 | 838 | case 0x20f: /* 1 000 001 111 */ |
| 838 | 839 | size += 1; |
| 839 | | ea = oprom[1]; |
| 840 | ea = oprom16[1]; |
| 840 | 841 | sprintf(buffer, "BESC %04X",pc+2+ea); |
| 841 | 842 | break; |
| 842 | 843 | case 0x210: /* 1 000 010 000 */ |
| r6343 | r6344 | |
| 856 | 857 | case 0x21e: /* 1 000 011 110 */ |
| 857 | 858 | case 0x21f: /* 1 000 011 111 */ |
| 858 | 859 | size += 1; |
| 859 | | ea = oprom[1]; |
| 860 | ea = oprom16[1]; |
| 860 | 861 | sprintf(buffer, "BEXT %04X,%01X",pc+2+ea,op&0x0f); |
| 861 | 862 | break; |
| 862 | 863 | case 0x220: /* 1 000 100 000 */ |
| 863 | 864 | size += 1; |
| 864 | | ea = oprom[1]; |
| 865 | ea = oprom16[1]; |
| 865 | 866 | sprintf(buffer, "B %04X",pc+1-ea); |
| 866 | 867 | break; |
| 867 | 868 | case 0x221: /* 1 000 100 001 */ |
| 868 | 869 | size += 1; |
| 869 | | ea = oprom[1]; |
| 870 | ea = oprom16[1]; |
| 870 | 871 | sprintf(buffer, "BC %04X",pc+1-ea); |
| 871 | 872 | break; |
| 872 | 873 | case 0x222: /* 1 000 100 010 */ |
| 873 | 874 | size += 1; |
| 874 | | ea = oprom[1]; |
| 875 | ea = oprom16[1]; |
| 875 | 876 | sprintf(buffer, "BOV %04X",pc+1-ea); |
| 876 | 877 | break; |
| 877 | 878 | case 0x223: /* 1 000 100 011 */ |
| 878 | 879 | size += 1; |
| 879 | | ea = oprom[1]; |
| 880 | ea = oprom16[1]; |
| 880 | 881 | sprintf(buffer, "BPL %04X",pc+1-ea); |
| 881 | 882 | break; |
| 882 | 883 | case 0x224: /* 1 000 100 100 */ |
| 883 | 884 | size += 1; |
| 884 | | ea = oprom[1]; |
| 885 | ea = oprom16[1]; |
| 885 | 886 | sprintf(buffer, "BZE %04X",pc+1-ea); |
| 886 | 887 | break; |
| 887 | 888 | case 0x225: /* 1 000 100 101 */ |
| 888 | 889 | size += 1; |
| 889 | | ea = oprom[1]; |
| 890 | ea = oprom16[1]; |
| 890 | 891 | sprintf(buffer, "BLT %04X",pc+1-ea); |
| 891 | 892 | break; |
| 892 | 893 | case 0x226: /* 1 000 100 110 */ |
| 893 | 894 | size += 1; |
| 894 | | ea = oprom[1]; |
| 895 | ea = oprom16[1]; |
| 895 | 896 | sprintf(buffer, "BLE %04X",pc+1-ea); |
| 896 | 897 | break; |
| 897 | 898 | case 0x227: /* 1 000 100 111 */ |
| 898 | 899 | size += 1; |
| 899 | | ea = oprom[1]; |
| 900 | ea = oprom16[1]; |
| 900 | 901 | sprintf(buffer, "BUSC %04X",pc+1-ea); |
| 901 | 902 | break; |
| 902 | 903 | case 0x228: /* 1 000 101 000 */ |
| 903 | 904 | size += 1; |
| 904 | | ea = oprom[1]; |
| 905 | ea = oprom16[1]; |
| 905 | 906 | sprintf(buffer, "NOPP %04X",pc+1-ea); |
| 906 | 907 | break; |
| 907 | 908 | case 0x229: /* 1 000 101 001 */ |
| 908 | 909 | size += 1; |
| 909 | | ea = oprom[1]; |
| 910 | ea = oprom16[1]; |
| 910 | 911 | sprintf(buffer, "BNC %04X",pc+1-ea); |
| 911 | 912 | break; |
| 912 | 913 | case 0x22a: /* 1 000 101 010 */ |
| 913 | 914 | size += 1; |
| 914 | | ea = oprom[1]; |
| 915 | ea = oprom16[1]; |
| 915 | 916 | sprintf(buffer, "BNOV %04X",pc+1-ea); |
| 916 | 917 | break; |
| 917 | 918 | case 0x22b: /* 1 000 101 011 */ |
| 918 | 919 | size += 1; |
| 919 | | ea = oprom[1]; |
| 920 | ea = oprom16[1]; |
| 920 | 921 | sprintf(buffer, "BMI %04X",pc+1-ea); |
| 921 | 922 | break; |
| 922 | 923 | case 0x22c: /* 1 000 101 100 */ |
| 923 | 924 | size += 1; |
| 924 | | ea = oprom[1]; |
| 925 | ea = oprom16[1]; |
| 925 | 926 | sprintf(buffer, "BNZE %04X",pc+1-ea); |
| 926 | 927 | break; |
| 927 | 928 | case 0x22d: /* 1 000 101 101 */ |
| 928 | 929 | size += 1; |
| 929 | | ea = oprom[1]; |
| 930 | ea = oprom16[1]; |
| 930 | 931 | sprintf(buffer, "BGE %04X",pc+1-ea); |
| 931 | 932 | break; |
| 932 | 933 | case 0x22e: /* 1 000 101 110 */ |
| 933 | 934 | size += 1; |
| 934 | | ea = oprom[1]; |
| 935 | ea = oprom16[1]; |
| 935 | 936 | sprintf(buffer, "BGT %04X",pc+1-ea); |
| 936 | 937 | break; |
| 937 | 938 | case 0x22f: /* 1 000 101 111 */ |
| 938 | 939 | size += 1; |
| 939 | | ea = oprom[1]; |
| 940 | ea = oprom16[1]; |
| 940 | 941 | sprintf(buffer, "BESC %04X",pc+1-ea); |
| 941 | 942 | break; |
| 942 | 943 | case 0x230: /* 1 000 110 000 */ |
| r6343 | r6344 | |
| 956 | 957 | case 0x23e: /* 1 000 111 110 */ |
| 957 | 958 | case 0x23f: /* 1 000 111 111 */ |
| 958 | 959 | size += 1; |
| 959 | | ea = oprom[1]; |
| 960 | ea = oprom16[1]; |
| 960 | 961 | sprintf(buffer, "BEXT %04X,%01X",pc+1-ea,op&0x0f); |
| 961 | 962 | break; |
| 962 | 963 | case 0x240: /* 1 001 000 000 */ |
| r6343 | r6344 | |
| 968 | 969 | case 0x246: /* 1 001 000 110 */ |
| 969 | 970 | case 0x247: /* 1 001 000 111 */ |
| 970 | 971 | size += 1; |
| 971 | | ea = oprom[1]; |
| 972 | ea = oprom16[1]; |
| 972 | 973 | sprintf(buffer, "MVO R%01d,(%04X)",op&0x7,ea); |
| 973 | 974 | break; |
| 974 | 975 | case 0x248: /* 1 001 001 000 */ |
| r6343 | r6344 | |
| 1043 | 1044 | case 0x286: /* 1 010 000 110 */ |
| 1044 | 1045 | case 0x287: /* 1 010 000 111 */ |
| 1045 | 1046 | size += 1; |
| 1046 | | ea = oprom[1]; |
| 1047 | ea = oprom16[1]; |
| 1047 | 1048 | sprintf(buffer, "MVI (%04X),R%01d",ea,op&0x7); |
| 1048 | 1049 | break; |
| 1049 | 1050 | case 0x288: /* 1 010 001 000 */ |
| r6343 | r6344 | |
| 1107 | 1108 | case 0x2be: /* 1 010 111 110 */ |
| 1108 | 1109 | case 0x2bf: /* 1 010 111 111 */ |
| 1109 | 1110 | size += 1; |
| 1110 | | ea = oprom[1]; |
| 1111 | ea = oprom16[1]; |
| 1111 | 1112 | sprintf(buffer, "MVII #%04X,R%01d",ea,op&0x7); |
| 1112 | 1113 | break; |
| 1113 | 1114 | case 0x2c0: /* 1 011 010 000 */ |
| r6343 | r6344 | |
| 1119 | 1120 | case 0x2c6: /* 1 011 010 110 */ |
| 1120 | 1121 | case 0x2c7: /* 1 011 010 111 */ |
| 1121 | 1122 | size += 1; |
| 1122 | | ea = oprom[1]; |
| 1123 | ea = oprom16[1]; |
| 1123 | 1124 | sprintf(buffer, "ADD (%04X),R%01d",ea,op&0x7); |
| 1124 | 1125 | break; |
| 1125 | 1126 | case 0x2c8: /* 1 011 001 000 */ |
| r6343 | r6344 | |
| 1181 | 1182 | case 0x2fe: /* 1 011 111 110 */ |
| 1182 | 1183 | case 0x2ff: /* 1 011 111 111 */ |
| 1183 | 1184 | size += 1; |
| 1184 | | ea = oprom[1]; |
| 1185 | ea = oprom16[1]; |
| 1185 | 1186 | sprintf(buffer, "ADDI #%04X,R%01d",ea,op&0x7); |
| 1186 | 1187 | break; |
| 1187 | 1188 | case 0x300: /* 1 100 000 000 */ |
| r6343 | r6344 | |
| 1193 | 1194 | case 0x306: /* 1 100 000 110 */ |
| 1194 | 1195 | case 0x307: /* 1 100 000 111 */ |
| 1195 | 1196 | size += 1; |
| 1196 | | ea = oprom[1]; |
| 1197 | ea = oprom16[1]; |
| 1197 | 1198 | sprintf(buffer, "SUB (%04X),R%01d",ea,op&0x7); |
| 1198 | 1199 | break; |
| 1199 | 1200 | case 0x308: /* 1 100 001 000 */ |
| r6343 | r6344 | |
| 1255 | 1256 | case 0x33e: /* 1 100 111 110 */ |
| 1256 | 1257 | case 0x33f: /* 1 100 111 111 */ |
| 1257 | 1258 | size += 1; |
| 1258 | | ea = oprom[1]; |
| 1259 | ea = oprom16[1]; |
| 1259 | 1260 | sprintf(buffer, "SUBI #%04X,R%01d",ea,op&0x7); |
| 1260 | 1261 | break; |
| 1261 | 1262 | case 0x340: /* 1 101 000 000 */ |
| r6343 | r6344 | |
| 1267 | 1268 | case 0x346: /* 1 101 000 110 */ |
| 1268 | 1269 | case 0x347: /* 1 101 000 111 */ |
| 1269 | 1270 | size += 1; |
| 1270 | | ea = oprom[1]; |
| 1271 | ea = oprom16[1]; |
| 1271 | 1272 | sprintf(buffer, "CMP (%04X),R%01d",ea,op&0x7); |
| 1272 | 1273 | break; |
| 1273 | 1274 | case 0x348: /* 1 101 001 000 */ |
| r6343 | r6344 | |
| 1329 | 1330 | case 0x37e: /* 1 101 111 110 */ |
| 1330 | 1331 | case 0x37f: /* 1 101 111 111 */ |
| 1331 | 1332 | size += 1; |
| 1332 | | ea = oprom[1]; |
| 1333 | ea = oprom16[1]; |
| 1333 | 1334 | sprintf(buffer, "CMPI #%04X,R%01d",ea,op&0x7); |
| 1334 | 1335 | break; |
| 1335 | 1336 | case 0x380: /* 1 110 000 000 */ |
| r6343 | r6344 | |
| 1341 | 1342 | case 0x386: /* 1 110 000 110 */ |
| 1342 | 1343 | case 0x387: /* 1 110 000 111 */ |
| 1343 | 1344 | size += 1; |
| 1344 | | ea = oprom[1]; |
| 1345 | ea = oprom16[1]; |
| 1345 | 1346 | sprintf(buffer, "AND (%04X),R%01d",ea,op&0x7); |
| 1346 | 1347 | break; |
| 1347 | 1348 | case 0x388: /* 1 110 001 000 */ |
| r6343 | r6344 | |
| 1403 | 1404 | case 0x3be: /* 1 110 111 110 */ |
| 1404 | 1405 | case 0x3bf: /* 1 110 111 111 */ |
| 1405 | 1406 | size += 1; |
| 1406 | | ea = oprom[1]; |
| 1407 | ea = oprom16[1]; |
| 1407 | 1408 | sprintf(buffer, "ANDI #%04X,R%01d",ea,op&0x7); |
| 1408 | 1409 | break; |
| 1409 | 1410 | case 0x3c0: /* 1 111 000 000 */ |
| r6343 | r6344 | |
| 1415 | 1416 | case 0x3c6: /* 1 111 000 110 */ |
| 1416 | 1417 | case 0x3c7: /* 1 111 000 111 */ |
| 1417 | 1418 | size += 1; |
| 1418 | | ea = oprom[1]; |
| 1419 | ea = oprom16[1]; |
| 1419 | 1420 | sprintf(buffer, "XOR (%04X),R%01d",ea,op&0x7); |
| 1420 | 1421 | break; |
| 1421 | 1422 | case 0x3c8: /* 1 111 001 000 */ |
| r6343 | r6344 | |
| 1477 | 1478 | case 0x3fe: /* 1 111 111 110 */ |
| 1478 | 1479 | case 0x3ff: /* 1 111 111 111 */ |
| 1479 | 1480 | size += 1; |
| 1480 | | ea = oprom[1]; |
| 1481 | ea = oprom16[1]; |
| 1481 | 1482 | sprintf(buffer, "XORI #%04X,R%01d",ea,op&0x7); |
| 1482 | 1483 | break; |
| 1483 | 1484 | default: |