comparison os9/os9disass.c @ 8:96a067cf4c4f

level2 rom done
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 05 Jul 2018 12:07:06 +0900
parents 3c736a81b886
children 111e5defb8ab
comparison
equal deleted inserted replaced
7:a6db579d8c11 8:96a067cf4c4f
1108 char *suffix; 1108 char *suffix;
1109 { 1109 {
1110 int offset; 1110 int offset;
1111 1111
1112 offset = prog[pc+1]; 1112 offset = prog[pc+1];
1113 fprintf(fp,"%0.2X %0.2X %s%s $%0.2X", 1113 fprintf(fp,"%0.2X %0.2X %s%s <$%0.2X",
1114 code, offset, suffix, op->name, offset); 1114 code, offset, suffix, op->name, offset);
1115 return op->bytes; 1115 return op->bytes;
1116 } 1116 }
1117 1117
1118 #pragma argsused 1118 #pragma argsused
1305 break; 1305 break;
1306 case 0x0c : 1306 case 0x0c :
1307 offset = (prog[pc+2]+pc+3) & 0xFFFF; 1307 offset = (prog[pc+2]+pc+3) & 0xFFFF;
1308 s = "<"; 1308 s = "<";
1309 fprintf(fp,"%0.2X %0.2X %0.2X %s%s %s$%0.2X,PCR", 1309 fprintf(fp,"%0.2X %0.2X %0.2X %s%s %s$%0.2X,PCR",
1310 code, postbyte, prog[pc+2], suffix, op->name, s, pc+3+offset+adoffset); 1310 code, postbyte, prog[pc+2], suffix, op->name, s, offset+adoffset);
1311 extrabytes = 1; 1311 extrabytes = 1;
1312 break; 1312 break;
1313 case 0x0d : 1313 case 0x0d :
1314 offset = (prog[pc+2] * 256 + prog[pc+3]+pc+4) & 0xFFFF; 1314 offset = (prog[pc+2] * 256 + prog[pc+3]+pc+4) & 0xFFFF;
1315 s = ">"; 1315 s = ">";
1316 fprintf(fp,"%0.2X %0.2X %0.2X %0.2X %s%s %s$%0.4X,PCR", 1316 fprintf(fp,"%0.2X %0.2X %0.2X %0.2X %s%s %s$%0.4X,PCR",
1317 code, postbyte, prog[pc+2], prog[pc+3], suffix, op->name, s, offset+pc+4+adoffset); 1317 code, postbyte, prog[pc+2], prog[pc+3], suffix, op->name, s, offset+adoffset);
1318 extrabytes = 2; 1318 extrabytes = 2;
1319 break; 1319 break;
1320 case 0x0e : 1320 case 0x0e :
1321 break; 1321 break;
1322 case 0x0f : 1322 case 0x0f :
1385 break; 1385 break;
1386 case 0x1c : 1386 case 0x1c :
1387 offset = (prog[pc+2]+pc+3) & 0xFFFF; 1387 offset = (prog[pc+2]+pc+3) & 0xFFFF;
1388 s = "<"; 1388 s = "<";
1389 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]",
1390 code, postbyte, prog[pc+2], suffix, op->name, s, offset+pc+2+adoffset); 1390 code, postbyte, prog[pc+2], suffix, op->name, s, offset+adoffset);
1391 extrabytes = 1; 1391 extrabytes = 1;
1392 break; 1392 break;
1393 case 0x1d : 1393 case 0x1d :
1394 offset = (prog[pc+2] * 256 + prog[pc+3]+pc+4) & 0xFFFF; 1394 offset = (prog[pc+2] * 256 + prog[pc+3]+pc+4) & 0xFFFF;
1395 s = ">"; 1395 s = ">";
1396 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]",
1397 code, postbyte, prog[pc+2], prog[pc+3], suffix, op->name, s, offset+pc+3+adoffset); 1397 code, postbyte, prog[pc+2], prog[pc+3], suffix, op->name, s, offset+adoffset);
1398 extrabytes = 2; 1398 extrabytes = 2;
1399 break; 1399 break;
1400 case 0x1e : 1400 case 0x1e :
1401 break; 1401 break;
1402 case 0x1f : 1402 case 0x1f :
1637 fprintf(stderr, " where start and end are in hex.\n"); 1637 fprintf(stderr, " where start and end are in hex.\n");
1638 exit(1); 1638 exit(1);
1639 } 1639 }
1640 1640
1641 sscanf(argv[2],"%x",&start); start -= adoffset; 1641 sscanf(argv[2],"%x",&start); start -= adoffset;
1642 sscanf(argv[3],"%x",&end); end -= adoffset; 1642 sscanf(argv[3],"%x",&end); end -= adoffset;
1643 printf("disass %x - %x\n",start,end);
1643 1644
1644 fp = stdout; 1645 fp = stdout;
1645 1646
1646 fd = open(argv[1], O_RDONLY, S_IREAD|S_IWRITE); 1647 fd = open(argv[1], O_RDONLY, S_IREAD|S_IWRITE);
1647 size = read(fd, &prog[0x0000], 0xffff); 1648 size = read(fd, &prog[0x0000], 0xffff);