Mercurial > hg > Members > kono > os9 > sbc09
diff 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 |
line wrap: on
line diff
--- a/os9/os9disass.c Mon Jul 02 02:12:31 2018 +0900 +++ b/os9/os9disass.c Mon Jul 02 19:07:39 2018 +0900 @@ -916,6 +916,103 @@ { "?????", 0, 1, D_Illegal, NULL }, /* 0xff */ }; + +struct os9syscall { int code; char *name; } os9sys[] = { + {0x0000,"F$LINK"}, + {0x0001,"F$LOAD"}, + {0x0002,"F$UNLINK"}, + {0x0003,"F$FORK"}, + {0x0004,"F$WAIT"}, + {0x0005,"F$CHAIN"}, + {0x0006,"F$EXIT"}, + {0x0007,"F$MEM"}, + {0x0008,"F$SEND"}, + {0x0009,"F$ICPT"}, + {0x000a,"F$SLEEP"}, + {0x000b,"F$SSPD"}, + {0x000c,"F$ID"}, + {0x000d,"F$SPRIOR"}, + {0x000e,"F$SSWI"}, + {0x000f,"F$PERR"}, + {0x0010,"F$PRSNAM"}, + {0x0011,"F$CMPNAM"}, + {0x0012,"F$SCHBIT"}, + {0x0013,"F$ALLBIT"}, + {0x0014,"F$DELBIT"}, + {0x0015,"F$TIME"}, + {0x0016,"F$STIME"}, + {0x0017,"F$CRC"}, + {0x0018,"F$GPRDSC"}, + {0x0019,"F$GBLKMP"}, + {0x001a,"F$GMODDR"}, + {0x001b,"F$CPYMEM"}, + {0x001c,"F$SUSER"}, + {0x001d,"F$UNLOAD"}, + {0x0027,"F$VIRQ"}, + {0x0028,"F$SRQMEM"}, + {0x0029,"F$SRTMEM"}, + {0x002a,"F$IRQ"}, + {0x002b,"F$IOQU"}, + {0x002c,"F$APROC"}, + {0x002d,"F$NPROC"}, + {0x002e,"F$VMODUL"}, + {0x002f,"F$FIND64"}, + {0x0030,"F$ALL64"}, + {0x0031,"F$RET64"}, + {0x0032,"F$SSVC"}, + {0x0033,"F$IODEL"}, + {0x0034,"F$SLINK"}, + {0x0035,"F$BOOT"}, + {0x0036,"F$BTMEM"}, + {0x0037,"F$GPROCP"}, + {0x0038,"F$MOVE"}, + {0x0039,"F$ALLRAM"}, + {0x003a,"F$ALLIMG"}, + {0x003b,"F$DELIMG"}, + {0x003c,"F$SETIMG"}, + {0x003d,"F$FREELB"}, + {0x003e,"F$FREEHB"}, + {0x003f,"F$ALLTSK"}, + {0x0040,"F$DELTSK"}, + {0x0041,"F$SETTSK"}, + {0x0042,"F$RESTSK"}, + {0x0043,"F$RELTSK"}, + {0x0044,"F$DATLOG"}, + {0x0045,"F$DATTMP"}, + {0x0046,"F$LDAXY"}, + {0x0047,"F$LDAXYP"}, + {0x0048,"F$LDDDXY"}, + {0x0049,"F$LDABX"}, + {0x004a,"F$STABX"}, + {0x004b,"F$ALLPRC"}, + {0x004c,"F$DELPRC"}, + {0x004d,"F$ELINK"}, + {0x004e,"F$FMODUL"}, + {0x004f,"F$MAPBLK"}, + {0x0050,"F$CLRBLK"}, + {0x0051,"F$DELRAM"}, + {0x0052,"F$GCMDIR"}, + {0x0053,"F$ALHRAM"}, + {0x0080 , "I$ATTACH"}, + {0x0081, "I$DETACH"}, + {0x0082 , "I$DUP"}, + {0x0083 , "I$CREATE"}, + {0x0084, "I$OPEN"}, + {0x0085 , "I$MAKDIR"}, + {0x0086 , "I$CHGDIR"}, + {0x0087 , "I$DELETE"}, + {0x0088, "I$SEEK"}, + {0x0089 , "I$READ"}, + {0x008a, "I$WRITE"}, + {0x008b , "I$READLN"}, + {0x008c , "I$WRITLN"}, + {0x008d, "I$GETSTT"}, + {0x008e , "I$SSTT"}, + {0x008f , "I$CLOSE"}, + {0x0090 , "I$DELETX"}, + } ; + + int iotable[32] = { 0x0000, 0x0001, @@ -1092,10 +1189,20 @@ { int offset; - offset = prog[pc+2]; - + offset = prog[pc+1]; + for(int i =0, j = sizeof(os9sys)/sizeof(struct os9syscall), m = (i+j)/2 ;i<=j; m=(i+j)/2 ) { + if (os9sys[m].code > offset) { + j=m-1; + } else if (os9sys[m].code < offset) { + i=m+1; + } else if (os9sys[m].code == offset) { + fprintf(fp,"%0.2X %0.2X %s%s %s", + code, offset, suffix, op->name, os9sys[m].name); + return op->bytes; + } + } fprintf(fp,"%0.2X %0.2X %s%s $%0.2X", - code, offset, suffix, op->name, prog[pc+2]); + code, offset, suffix, op->name, prog[pc+1]); return op->bytes; } @@ -1280,14 +1387,14 @@ offset = (prog[pc+2]+pc+3) & 0xFFFF; s = "<"; fprintf(fp,"%0.2X %0.2X %0.2X %s%s [%s$%0.2X,PCR]", - code, postbyte, prog[pc+2], suffix, op->name, s, offset); + code, postbyte, prog[pc+2], suffix, op->name, s, offset+pc+2+adoffset); extrabytes = 1; break; case 0x1d : offset = (prog[pc+2] * 256 + prog[pc+3]+pc+4) & 0xFFFF; s = ">"; fprintf(fp,"%0.2X %0.2X %0.2X %0.2X %s%s [%s$%0.4X,PCR]", - code, postbyte, prog[pc+2], prog[pc+3], suffix, op->name, s, offset); + code, postbyte, prog[pc+2], prog[pc+3], suffix, op->name, s, offset+pc+3+adoffset); extrabytes = 2; break; case 0x1e :