Previous 15994 Revisions Next

r6344 Monday 9th November, 2009 at 05:35:27 UTC by Robbbert
[INTV] Fixed disassembler (hopefully).
[src/emu/cpu/cp1610]1610dasm.c

src/emu/cpu/cp1610/1610dasm.c
r6343r6344
44
55CPU_DISASSEMBLE( cp1610 )
66{
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];
89   UINT16 subop;
910   UINT16 ea, ea1, ea2;
1011   unsigned size = 1;
r6343r6344
1819        sprintf(buffer, "HLT");
1920      break;
2021   case 0x001: /* 0 000 000 001 */
21      subop = oprom[1];
22      subop = oprom16[1];
2223      switch (subop & 0x3f8)
2324      {
2425         case 0x280: /* 1 010 000 xxx */
r6343r6344
3233            size += 1;
3334            break;
3435         case 0x2b8: /* 1 010 111 xxx */
35            ea1 = oprom[2];
36            ea2 = oprom[3];
36            ea1 = oprom16[2];
37            ea2 = oprom16[3];
3738            ea = ((ea2&0xff)<<8) | (ea1&0xff);
3839            sprintf(buffer,"MVII #%04X, R%01d",ea,subop&7);
3940            size += 3;
r6343r6344
4950            size += 1;
5051            break;
5152         case 0x2f8: /* 1 011 111 xxx */
52            ea1 = oprom[2];
53            ea2 = oprom[3];
53            ea1 = oprom16[2];
54            ea2 = oprom16[3];
5455            ea = ((ea2&0xff)<<8) | (ea1&0xff);
5556            sprintf(buffer,"ADDI #%04X, R%01d",ea,subop&7);
5657            size += 3;
r6343r6344
6667            size += 1;
6768            break;
6869         case 0x338: /* 1 100 111 xxx */
69            ea1 = oprom[2];
70            ea2 = oprom[3];
70            ea1 = oprom16[2];
71            ea2 = oprom16[3];
7172            ea = ((ea2&0xff)<<8) | (ea1&0xff);
7273            sprintf(buffer,"SUBI #%04X, R%01d",ea,subop&7);
7374            size += 3;
r6343r6344
8384            size += 1;
8485            break;
8586         case 0x378: /* 1 101 111 xxx */
86            ea1 = oprom[2];
87            ea2 = oprom[3];
87            ea1 = oprom16[2];
88            ea2 = oprom16[3];
8889            ea = ((ea2&0xff)<<8) | (ea1&0xff);
8990            sprintf(buffer,"CMPI #%04X, R%01d",ea,subop&7);
9091            size += 3;
r6343r6344
100101            size += 1;
101102            break;
102103         case 0x3b8: /* 1 110 111 xxx */
103            ea1 = oprom[2];
104            ea2 = oprom[3];
104            ea1 = oprom16[2];
105            ea2 = oprom16[3];
105106            ea = ((ea2&0xff)<<8) | (ea1&0xff);
106107            sprintf(buffer,"ANDI #%04X, R%01d",ea,subop&7);
107108            size += 3;
r6343r6344
117118            size += 1;
118119            break;
119120         case 0x3f8: /* 1 111 111 xxx */
120            ea1 = oprom[2];
121            ea2 = oprom[3];
121            ea1 = oprom16[2];
122            ea2 = oprom16[3];
122123            ea = ((ea2&0xff)<<8) | (ea1&0xff);
123124            sprintf(buffer,"XORI #%04X, R%01d",ea,subop&7);
124125            size += 3;
r6343r6344
136137      break;
137138   case 0x004: /* 0 000 000 100 */
138139      size += 2;
139      ea1 = oprom[1];
140      ea2 = oprom[2];
140      ea1 = oprom16[1];
141      ea2 = oprom16[2];
141142      ea = ((ea1<<8)&0xfc00) + (ea2&0x3ff);
142143      if ((ea1&0x300) == 0x300)
143144      {
r6343r6344
761762      break;
762763   case 0x200: /* 1 000 000 000 */
763764      size += 1;
764      ea = oprom[1];
765      ea = oprom16[1];
765766      sprintf(buffer, "B    %04X",pc+2+ea);
766767      break;
767768   case 0x201: /* 1 000 000 001 */
768769      size += 1;
769      ea = oprom[1];
770      ea = oprom16[1];
770771      sprintf(buffer, "BC   %04X",pc+2+ea);
771772      break;
772773   case 0x202: /* 1 000 000 010 */
773774      size += 1;
774      ea = oprom[1];
775      ea = oprom16[1];
775776      sprintf(buffer, "BOV  %04X",pc+2+ea);
776777      break;
777778   case 0x203: /* 1 000 000 011 */
778779      size += 1;
779      ea = oprom[1];
780      ea = oprom16[1];
780781      sprintf(buffer, "BPL  %04X",pc+2+ea);
781782      break;
782783   case 0x204: /* 1 000 000 100 */
783784      size += 1;
784      ea = oprom[1];
785      ea = oprom16[1];
785786      sprintf(buffer, "BZE  %04X",pc+2+ea);
786787      break;
787788   case 0x205: /* 1 000 000 101 */
788789      size += 1;
789      ea = oprom[1];
790      ea = oprom16[1];
790791      sprintf(buffer, "BLT  %04X",pc+2+ea);
791792      break;
792793   case 0x206: /* 1 000 000 110 */
793794      size += 1;
794      ea = oprom[1];
795      ea = oprom16[1];
795796      sprintf(buffer, "BLE  %04X",pc+2+ea);
796797      break;
797798   case 0x207: /* 1 000 000 111 */
798799      size += 1;
799      ea = oprom[1];
800      ea = oprom16[1];
800801      sprintf(buffer, "BUSC %04X",pc+2+ea);
801802      break;
802803   case 0x208: /* 1 000 001 000 */
803804      size += 1;
804      ea = oprom[1];
805      ea = oprom16[1];
805806      sprintf(buffer, "NOPP %04X",pc+2+ea);
806807      break;
807808   case 0x209: /* 1 000 001 001 */
808809      size += 1;
809      ea = oprom[1];
810      ea = oprom16[1];
810811      sprintf(buffer, "BNC  %04X",pc+2+ea);
811812      break;
812813   case 0x20a: /* 1 000 001 010 */
813814      size += 1;
814      ea = oprom[1];
815      ea = oprom16[1];
815816      sprintf(buffer, "BNOV %04X",pc+2+ea);
816817      break;
817818   case 0x20b: /* 1 000 001 011 */
818819      size += 1;
819      ea = oprom[1];
820      ea = oprom16[1];
820821      sprintf(buffer, "BMI  %04X",pc+2+ea);
821822      break;
822823   case 0x20c: /* 1 000 001 100 */
823824      size += 1;
824      ea = oprom[1];
825      ea = oprom16[1];
825826      sprintf(buffer, "BNZE %04X",pc+2+ea);
826827      break;
827828   case 0x20d: /* 1 000 001 101 */
828829      size += 1;
829      ea = oprom[1];
830      ea = oprom16[1];
830831      sprintf(buffer, "BGE  %04X",pc+2+ea);
831832      break;
832833   case 0x20e: /* 1 000 001 110 */
833834      size += 1;
834      ea = oprom[1];
835      ea = oprom16[1];
835836      sprintf(buffer, "BGT  %04X",pc+2+ea);
836837      break;
837838   case 0x20f: /* 1 000 001 111 */
838839      size += 1;
839      ea = oprom[1];
840      ea = oprom16[1];
840841      sprintf(buffer, "BESC %04X",pc+2+ea);
841842      break;
842843   case 0x210: /* 1 000 010 000 */
r6343r6344
856857   case 0x21e: /* 1 000 011 110 */
857858   case 0x21f: /* 1 000 011 111 */
858859      size += 1;
859      ea = oprom[1];
860      ea = oprom16[1];
860861      sprintf(buffer, "BEXT %04X,%01X",pc+2+ea,op&0x0f);
861862      break;
862863   case 0x220: /* 1 000 100 000 */
863864      size += 1;
864      ea = oprom[1];
865      ea = oprom16[1];
865866      sprintf(buffer, "B    %04X",pc+1-ea);
866867      break;
867868   case 0x221: /* 1 000 100 001 */
868869      size += 1;
869      ea = oprom[1];
870      ea = oprom16[1];
870871      sprintf(buffer, "BC   %04X",pc+1-ea);
871872      break;
872873   case 0x222: /* 1 000 100 010 */
873874      size += 1;
874      ea = oprom[1];
875      ea = oprom16[1];
875876      sprintf(buffer, "BOV  %04X",pc+1-ea);
876877      break;
877878   case 0x223: /* 1 000 100 011 */
878879      size += 1;
879      ea = oprom[1];
880      ea = oprom16[1];
880881      sprintf(buffer, "BPL  %04X",pc+1-ea);
881882      break;
882883   case 0x224: /* 1 000 100 100 */
883884      size += 1;
884      ea = oprom[1];
885      ea = oprom16[1];
885886      sprintf(buffer, "BZE  %04X",pc+1-ea);
886887      break;
887888   case 0x225: /* 1 000 100 101 */
888889      size += 1;
889      ea = oprom[1];
890      ea = oprom16[1];
890891      sprintf(buffer, "BLT  %04X",pc+1-ea);
891892      break;
892893   case 0x226: /* 1 000 100 110 */
893894      size += 1;
894      ea = oprom[1];
895      ea = oprom16[1];
895896      sprintf(buffer, "BLE  %04X",pc+1-ea);
896897      break;
897898   case 0x227: /* 1 000 100 111 */
898899      size += 1;
899      ea = oprom[1];
900      ea = oprom16[1];
900901      sprintf(buffer, "BUSC %04X",pc+1-ea);
901902      break;
902903   case 0x228: /* 1 000 101 000 */
903904      size += 1;
904      ea = oprom[1];
905      ea = oprom16[1];
905906      sprintf(buffer, "NOPP %04X",pc+1-ea);
906907      break;
907908   case 0x229: /* 1 000 101 001 */
908909      size += 1;
909      ea = oprom[1];
910      ea = oprom16[1];
910911      sprintf(buffer, "BNC  %04X",pc+1-ea);
911912      break;
912913   case 0x22a: /* 1 000 101 010 */
913914      size += 1;
914      ea = oprom[1];
915      ea = oprom16[1];
915916      sprintf(buffer, "BNOV %04X",pc+1-ea);
916917      break;
917918   case 0x22b: /* 1 000 101 011 */
918919      size += 1;
919      ea = oprom[1];
920      ea = oprom16[1];
920921      sprintf(buffer, "BMI  %04X",pc+1-ea);
921922      break;
922923   case 0x22c: /* 1 000 101 100 */
923924      size += 1;
924      ea = oprom[1];
925      ea = oprom16[1];
925926      sprintf(buffer, "BNZE %04X",pc+1-ea);
926927      break;
927928   case 0x22d: /* 1 000 101 101 */
928929      size += 1;
929      ea = oprom[1];
930      ea = oprom16[1];
930931      sprintf(buffer, "BGE  %04X",pc+1-ea);
931932      break;
932933   case 0x22e: /* 1 000 101 110 */
933934      size += 1;
934      ea = oprom[1];
935      ea = oprom16[1];
935936      sprintf(buffer, "BGT  %04X",pc+1-ea);
936937      break;
937938   case 0x22f: /* 1 000 101 111 */
938939      size += 1;
939      ea = oprom[1];
940      ea = oprom16[1];
940941      sprintf(buffer, "BESC %04X",pc+1-ea);
941942      break;
942943   case 0x230: /* 1 000 110 000 */
r6343r6344
956957   case 0x23e: /* 1 000 111 110 */
957958   case 0x23f: /* 1 000 111 111 */
958959      size += 1;
959      ea = oprom[1];
960      ea = oprom16[1];
960961      sprintf(buffer, "BEXT %04X,%01X",pc+1-ea,op&0x0f);
961962      break;
962963   case 0x240: /* 1 001 000 000 */
r6343r6344
968969   case 0x246: /* 1 001 000 110 */
969970   case 0x247: /* 1 001 000 111 */
970971      size += 1;
971      ea = oprom[1];
972      ea = oprom16[1];
972973      sprintf(buffer, "MVO  R%01d,(%04X)",op&0x7,ea);
973974      break;
974975   case 0x248: /* 1 001 001 000 */
r6343r6344
10431044   case 0x286: /* 1 010 000 110 */
10441045   case 0x287: /* 1 010 000 111 */
10451046      size += 1;
1046      ea = oprom[1];
1047      ea = oprom16[1];
10471048      sprintf(buffer, "MVI  (%04X),R%01d",ea,op&0x7);
10481049      break;
10491050   case 0x288: /* 1 010 001 000 */
r6343r6344
11071108   case 0x2be: /* 1 010 111 110 */
11081109   case 0x2bf: /* 1 010 111 111 */
11091110      size += 1;
1110      ea = oprom[1];
1111      ea = oprom16[1];
11111112      sprintf(buffer, "MVII #%04X,R%01d",ea,op&0x7);
11121113      break;
11131114   case 0x2c0: /* 1 011 010 000 */
r6343r6344
11191120   case 0x2c6: /* 1 011 010 110 */
11201121   case 0x2c7: /* 1 011 010 111 */
11211122      size += 1;
1122      ea = oprom[1];
1123      ea = oprom16[1];
11231124      sprintf(buffer, "ADD  (%04X),R%01d",ea,op&0x7);
11241125      break;
11251126   case 0x2c8: /* 1 011 001 000 */
r6343r6344
11811182   case 0x2fe: /* 1 011 111 110 */
11821183   case 0x2ff: /* 1 011 111 111 */
11831184      size += 1;
1184      ea = oprom[1];
1185      ea = oprom16[1];
11851186      sprintf(buffer, "ADDI #%04X,R%01d",ea,op&0x7);
11861187      break;
11871188   case 0x300: /* 1 100 000 000 */
r6343r6344
11931194   case 0x306: /* 1 100 000 110 */
11941195   case 0x307: /* 1 100 000 111 */
11951196      size += 1;
1196      ea = oprom[1];
1197      ea = oprom16[1];
11971198      sprintf(buffer, "SUB  (%04X),R%01d",ea,op&0x7);
11981199      break;
11991200   case 0x308: /* 1 100 001 000 */
r6343r6344
12551256   case 0x33e: /* 1 100 111 110 */
12561257   case 0x33f: /* 1 100 111 111 */
12571258      size += 1;
1258      ea = oprom[1];
1259      ea = oprom16[1];
12591260      sprintf(buffer, "SUBI #%04X,R%01d",ea,op&0x7);
12601261      break;
12611262   case 0x340: /* 1 101 000 000 */
r6343r6344
12671268   case 0x346: /* 1 101 000 110 */
12681269   case 0x347: /* 1 101 000 111 */
12691270      size += 1;
1270      ea = oprom[1];
1271      ea = oprom16[1];
12711272      sprintf(buffer, "CMP  (%04X),R%01d",ea,op&0x7);
12721273      break;
12731274   case 0x348: /* 1 101 001 000 */
r6343r6344
13291330   case 0x37e: /* 1 101 111 110 */
13301331   case 0x37f: /* 1 101 111 111 */
13311332      size += 1;
1332      ea = oprom[1];
1333      ea = oprom16[1];
13331334      sprintf(buffer, "CMPI #%04X,R%01d",ea,op&0x7);
13341335      break;
13351336   case 0x380: /* 1 110 000 000 */
r6343r6344
13411342   case 0x386: /* 1 110 000 110 */
13421343   case 0x387: /* 1 110 000 111 */
13431344      size += 1;
1344      ea = oprom[1];
1345      ea = oprom16[1];
13451346      sprintf(buffer, "AND  (%04X),R%01d",ea,op&0x7);
13461347      break;
13471348   case 0x388: /* 1 110 001 000 */
r6343r6344
14031404   case 0x3be: /* 1 110 111 110 */
14041405   case 0x3bf: /* 1 110 111 111 */
14051406      size += 1;
1406      ea = oprom[1];
1407      ea = oprom16[1];
14071408      sprintf(buffer, "ANDI #%04X,R%01d",ea,op&0x7);
14081409      break;
14091410   case 0x3c0: /* 1 111 000 000 */
r6343r6344
14151416   case 0x3c6: /* 1 111 000 110 */
14161417   case 0x3c7: /* 1 111 000 111 */
14171418      size += 1;
1418      ea = oprom[1];
1419      ea = oprom16[1];
14191420      sprintf(buffer, "XOR  (%04X),R%01d",ea,op&0x7);
14201421      break;
14211422   case 0x3c8: /* 1 111 001 000 */
r6343r6344
14771478   case 0x3fe: /* 1 111 111 110 */
14781479   case 0x3ff: /* 1 111 111 111 */
14791480      size += 1;
1480      ea = oprom[1];
1481      ea = oprom16[1];
14811482      sprintf(buffer, "XORI #%04X,R%01d",ea,op&0x7);
14821483      break;
14831484   default:

Previous 15994 Revisions Next


© 1998-2018 The MESS Team