stmt->u.insn.operands[2] = str;
break;
}
-//TODO also implement it in the assembler
-#if 0
case 0x004: {
if (cmdargs.arch != 15) {
- dasm_error("arch 15 call instruction found in arch %d binary",
+ dasm_error("arch 15 'calls' instruction found in arch %d binary",
cmdargs.arch);
}
- stmt->u.insn.name = "call";
+ stmt->u.insn.name = "calls";
stmt->u.insn.is_labelref = 0;
stmt->u.insn.labeladdr = stmt->u.insn.bin->operands[2];
if (stmt->u.insn.bin->operands[0] != 0x1780 ||
stmt->u.insn.bin->operands[1] != 0x1780)
- dasm_warn("r15 call: Invalid first or second argument");
+ dasm_warn("r15 calls: Invalid first or second argument");
break;
}
case 0x005: {
if (cmdargs.arch != 15) {
- dasm_error("arch 15 ret instruction found in arch %d binary",
+ dasm_error("arch 15 'rets' instruction found in arch %d binary",
cmdargs.arch);
}
- stmt->u.insn.name = "ret";
+ stmt->u.insn.name = "rets";
+ if (stmt->u.insn.bin->operands[0] != 0x1780 ||
+ stmt->u.insn.bin->operands[1] != 0x1780 ||
+ stmt->u.insn.bin->operands[2] != 0)
+ dasm_warn("r15 rets: Invalid argument(s)");
break;
}
-#endif
case 0x1E0: {
unsigned int flags, mask;
}
break;
}
+ case 0x000:
+ disasm_opcode_raw(ctx, stmt, 1);
+ break;
default:
disasm_opcode_raw(ctx, stmt, (cmdargs.unknown_decode == 0));
break;
switch (stmt->type) {
case STMT_INSN:
if (cmdargs.print_addresses)
- fprintf(outfile, "/* %03X */", addr);
+ fprintf(outfile, "/* %04X */", addr);
fprintf(outfile, "\t%s", stmt->u.insn.name);
first = 1;
for (i = 0; i < ARRAY_SIZE(stmt->u.insn.operands); i++) {
case FMT_B43:
ret = fread(&hdr, 1, sizeof(hdr), infile);
if (ret != sizeof(hdr)) {
- fprintf(stderr, "Corrupt input file (not fwcutter output)\n");
+ fprintf(stderr, "Corrupt input file (no b43 header found)\n");
goto err_close;
}
if (hdr.type != FW_TYPE_UCODE) {
- fprintf(stderr, "Corrupt input file. Not a microcode image.\n");
+ fprintf(stderr, "Corrupt input file. Not a b43 microcode image.\n");
goto err_close;
}
if (hdr.ver != FW_HDR_VER) {