Mercurial > hg > Members > kono > os9 > sbc09
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 : |