comparison os9/os9disass.c @ 1:3c736a81b886

add disk
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 02 Jul 2018 19:07:39 +0900
parents 9a224bd9b45f
children 96a067cf4c4f
comparison
equal deleted inserted replaced
0:9a224bd9b45f 1:3c736a81b886
913 { "?????", 0, 1, D_Illegal, NULL }, /* 0xfc */ 913 { "?????", 0, 1, D_Illegal, NULL }, /* 0xfc */
914 { "?????", 0, 1, D_Illegal, NULL }, /* 0xfd */ 914 { "?????", 0, 1, D_Illegal, NULL }, /* 0xfd */
915 { "?????", 0, 1, D_Illegal, NULL }, /* 0xfe */ 915 { "?????", 0, 1, D_Illegal, NULL }, /* 0xfe */
916 { "?????", 0, 1, D_Illegal, NULL }, /* 0xff */ 916 { "?????", 0, 1, D_Illegal, NULL }, /* 0xff */
917 }; 917 };
918
919
920 struct os9syscall { int code; char *name; } os9sys[] = {
921 {0x0000,"F$LINK"},
922 {0x0001,"F$LOAD"},
923 {0x0002,"F$UNLINK"},
924 {0x0003,"F$FORK"},
925 {0x0004,"F$WAIT"},
926 {0x0005,"F$CHAIN"},
927 {0x0006,"F$EXIT"},
928 {0x0007,"F$MEM"},
929 {0x0008,"F$SEND"},
930 {0x0009,"F$ICPT"},
931 {0x000a,"F$SLEEP"},
932 {0x000b,"F$SSPD"},
933 {0x000c,"F$ID"},
934 {0x000d,"F$SPRIOR"},
935 {0x000e,"F$SSWI"},
936 {0x000f,"F$PERR"},
937 {0x0010,"F$PRSNAM"},
938 {0x0011,"F$CMPNAM"},
939 {0x0012,"F$SCHBIT"},
940 {0x0013,"F$ALLBIT"},
941 {0x0014,"F$DELBIT"},
942 {0x0015,"F$TIME"},
943 {0x0016,"F$STIME"},
944 {0x0017,"F$CRC"},
945 {0x0018,"F$GPRDSC"},
946 {0x0019,"F$GBLKMP"},
947 {0x001a,"F$GMODDR"},
948 {0x001b,"F$CPYMEM"},
949 {0x001c,"F$SUSER"},
950 {0x001d,"F$UNLOAD"},
951 {0x0027,"F$VIRQ"},
952 {0x0028,"F$SRQMEM"},
953 {0x0029,"F$SRTMEM"},
954 {0x002a,"F$IRQ"},
955 {0x002b,"F$IOQU"},
956 {0x002c,"F$APROC"},
957 {0x002d,"F$NPROC"},
958 {0x002e,"F$VMODUL"},
959 {0x002f,"F$FIND64"},
960 {0x0030,"F$ALL64"},
961 {0x0031,"F$RET64"},
962 {0x0032,"F$SSVC"},
963 {0x0033,"F$IODEL"},
964 {0x0034,"F$SLINK"},
965 {0x0035,"F$BOOT"},
966 {0x0036,"F$BTMEM"},
967 {0x0037,"F$GPROCP"},
968 {0x0038,"F$MOVE"},
969 {0x0039,"F$ALLRAM"},
970 {0x003a,"F$ALLIMG"},
971 {0x003b,"F$DELIMG"},
972 {0x003c,"F$SETIMG"},
973 {0x003d,"F$FREELB"},
974 {0x003e,"F$FREEHB"},
975 {0x003f,"F$ALLTSK"},
976 {0x0040,"F$DELTSK"},
977 {0x0041,"F$SETTSK"},
978 {0x0042,"F$RESTSK"},
979 {0x0043,"F$RELTSK"},
980 {0x0044,"F$DATLOG"},
981 {0x0045,"F$DATTMP"},
982 {0x0046,"F$LDAXY"},
983 {0x0047,"F$LDAXYP"},
984 {0x0048,"F$LDDDXY"},
985 {0x0049,"F$LDABX"},
986 {0x004a,"F$STABX"},
987 {0x004b,"F$ALLPRC"},
988 {0x004c,"F$DELPRC"},
989 {0x004d,"F$ELINK"},
990 {0x004e,"F$FMODUL"},
991 {0x004f,"F$MAPBLK"},
992 {0x0050,"F$CLRBLK"},
993 {0x0051,"F$DELRAM"},
994 {0x0052,"F$GCMDIR"},
995 {0x0053,"F$ALHRAM"},
996 {0x0080 , "I$ATTACH"},
997 {0x0081, "I$DETACH"},
998 {0x0082 , "I$DUP"},
999 {0x0083 , "I$CREATE"},
1000 {0x0084, "I$OPEN"},
1001 {0x0085 , "I$MAKDIR"},
1002 {0x0086 , "I$CHGDIR"},
1003 {0x0087 , "I$DELETE"},
1004 {0x0088, "I$SEEK"},
1005 {0x0089 , "I$READ"},
1006 {0x008a, "I$WRITE"},
1007 {0x008b , "I$READLN"},
1008 {0x008c , "I$WRITLN"},
1009 {0x008d, "I$GETSTT"},
1010 {0x008e , "I$SSTT"},
1011 {0x008f , "I$CLOSE"},
1012 {0x0090 , "I$DELETX"},
1013 } ;
1014
918 1015
919 int iotable[32] = { 1016 int iotable[32] = {
920 0x0000, 1017 0x0000,
921 0x0001, 1018 0x0001,
922 0x0002, 1019 0x0002,
1090 int pc; 1187 int pc;
1091 char *suffix; 1188 char *suffix;
1092 { 1189 {
1093 int offset; 1190 int offset;
1094 1191
1095 offset = prog[pc+2]; 1192 offset = prog[pc+1];
1096 1193 for(int i =0, j = sizeof(os9sys)/sizeof(struct os9syscall), m = (i+j)/2 ;i<=j; m=(i+j)/2 ) {
1194 if (os9sys[m].code > offset) {
1195 j=m-1;
1196 } else if (os9sys[m].code < offset) {
1197 i=m+1;
1198 } else if (os9sys[m].code == offset) {
1199 fprintf(fp,"%0.2X %0.2X %s%s %s",
1200 code, offset, suffix, op->name, os9sys[m].name);
1201 return op->bytes;
1202 }
1203 }
1097 fprintf(fp,"%0.2X %0.2X %s%s $%0.2X", 1204 fprintf(fp,"%0.2X %0.2X %s%s $%0.2X",
1098 code, offset, suffix, op->name, prog[pc+2]); 1205 code, offset, suffix, op->name, prog[pc+1]);
1099 return op->bytes; 1206 return op->bytes;
1100 } 1207 }
1101 1208
1102 #pragma argsused 1209 #pragma argsused
1103 char *IndexRegister(postbyte) 1210 char *IndexRegister(postbyte)
1278 break; 1385 break;
1279 case 0x1c : 1386 case 0x1c :
1280 offset = (prog[pc+2]+pc+3) & 0xFFFF; 1387 offset = (prog[pc+2]+pc+3) & 0xFFFF;
1281 s = "<"; 1388 s = "<";
1282 fprintf(fp,"%0.2X %0.2X %0.2X %s%s [%s$%0.2X,PCR]", 1389 fprintf(fp,"%0.2X %0.2X %0.2X %s%s [%s$%0.2X,PCR]",
1283 code, postbyte, prog[pc+2], suffix, op->name, s, offset); 1390 code, postbyte, prog[pc+2], suffix, op->name, s, offset+pc+2+adoffset);
1284 extrabytes = 1; 1391 extrabytes = 1;
1285 break; 1392 break;
1286 case 0x1d : 1393 case 0x1d :
1287 offset = (prog[pc+2] * 256 + prog[pc+3]+pc+4) & 0xFFFF; 1394 offset = (prog[pc+2] * 256 + prog[pc+3]+pc+4) & 0xFFFF;
1288 s = ">"; 1395 s = ">";
1289 fprintf(fp,"%0.2X %0.2X %0.2X %0.2X %s%s [%s$%0.4X,PCR]", 1396 fprintf(fp,"%0.2X %0.2X %0.2X %0.2X %s%s [%s$%0.4X,PCR]",
1290 code, postbyte, prog[pc+2], prog[pc+3], suffix, op->name, s, offset); 1397 code, postbyte, prog[pc+2], prog[pc+3], suffix, op->name, s, offset+pc+3+adoffset);
1291 extrabytes = 2; 1398 extrabytes = 2;
1292 break; 1399 break;
1293 case 0x1e : 1400 case 0x1e :
1294 break; 1401 break;
1295 case 0x1f : 1402 case 0x1f :