Skip to content

Commit

Permalink
converted sdbfmt to setf_asm
Browse files Browse the repository at this point in the history
  • Loading branch information
HN026 committed Jan 18, 2024
1 parent 922829b commit a7e44a6
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 97 deletions.
26 changes: 8 additions & 18 deletions librz/asm/arch/6502/6502dis.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,52 +143,42 @@ static int _6502Disass(ut64 pc, RzAsmOp *op, const ut8 *buf, ut64 len) {
int i;
for (i = 0; ops[i].name != NULL; i++) {
if (ops[i].op == buf[0]) {
char *buf_asm = rz_str_newf("invalid");
int len = ops[i].len;
switch (ops[i].len) {
case 1:
free(buf_asm);
buf_asm = rz_str_newf("%s", ops[i].name);
rz_asm_op_setf_asm(op, "%s", ops[i].name);
break;
case 2:
if (len > 1) {
free(buf_asm);
buf_asm = rz_str_newf(ops[i].name, buf[1]);
rz_asm_op_setf_asm(op, ops[i].name, buf[1]);
} else {
free(buf_asm);
buf_asm = rz_str_newf("truncated");
rz_asm_op_set_asm(op, "truncated");
len = -1;
}
break;
case 3:
if (len > 2) {
free(buf_asm);
buf_asm = rz_str_newf(ops[i].name, buf[1] + 0x100 * buf[2]);
rz_asm_op_setf_asm(op, ops[i].name, buf[1] + 0x100 * buf[2]);
} else {
free(buf_asm);
buf_asm = rz_str_newf("truncated");
rz_asm_op_set_asm(op, "truncated");
len = -1;
}
break;
case 4:
if (len > 3) {
free(buf_asm);
buf_asm = rz_str_newf(ops[i].name, buf[1] + 0x100 * buf[2] + 0x10000 * buf[3]);
rz_asm_op_setf_asm(op, ops[i].name, buf[1] + 0x100 * buf[2] + 0x10000 * buf[3]);
} else {
free(buf_asm);
buf_asm = rz_str_newf("truncated");
rz_asm_op_set_asm(op, "truncated");
len = -1;
}
break;
default:
free(buf_asm);
goto beach;
}
rz_strbuf_set(&op->buf_asm, buf_asm);
free(buf_asm);
return len;
}
}
beach:
rz_asm_op_set_asm(op, "invalid");
return snesDisass(1, 1, pc, op, buf, len);
}
21 changes: 8 additions & 13 deletions librz/asm/arch/gb/gbdis.c
Original file line number Diff line number Diff line change
Expand Up @@ -156,34 +156,29 @@ static int gbDisass(RzAsmOp *op, const ut8 *buf, int len) {
if (len < foo) {
return 0;
}
char *buf_asm = rz_str_newf("invalid");
char reg[32];
memset(reg, '\0', sizeof(reg));
switch (gb_op[buf[0]].type) {
case GB_8BIT:
free(buf_asm);
buf_asm = rz_str_newf("%s", gb_op[buf[0]].name);
rz_asm_op_setf_asm(op, "%s", gb_op[buf[0]].name);
break;
case GB_16BIT:
free(buf_asm);
buf_asm = rz_str_newf("%s %s", cb_ops[buf[1] >> 3u], cb_regs[buf[1] & 7u]);
rz_asm_op_setf_asm(op, "%s %s", cb_ops[buf[1] >> 3u], cb_regs[buf[1] & 7u]);
break;
case GB_8BIT + ARG_8:
free(buf_asm);
buf_asm = rz_str_newf(gb_op[buf[0]].name, buf[1]);
rz_asm_op_setf_asm(op, gb_op[buf[0]].name, buf[1]);
break;
case GB_8BIT + ARG_16:
free(buf_asm);
buf_asm = rz_str_newf(gb_op[buf[0]].name, buf[1] + 0x100 * buf[2]);
rz_asm_op_setf_asm(op, gb_op[buf[0]].name, buf[1] + 0x100 * buf[2]);
break;
case GB_8BIT + ARG_8 + GB_IO:
gb_hardware_register_name(reg, buf[1]);
free(buf_asm);
buf_asm = rz_str_newf(gb_op[buf[0]].name, reg);
rz_asm_op_setf_asm(op, gb_op[buf[0]].name, reg);
break;
default:
rz_asm_op_set_asm(op, "invalid");
break;
}
rz_strbuf_set(&op->buf_asm, buf_asm);
free(buf_asm);
return foo;
}
#endif
85 changes: 19 additions & 66 deletions librz/asm/arch/i4004/i4004dis.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,86 +62,39 @@ static int i4004dis(RzAsmOp *op, const ut8 *buf, int len) {
int rlen = i4004_get_ins_len(*buf);
ut8 high = (*buf & 0xf0) >> 4;
ut8 low = (*buf & 0xf);
char *buf_asm = rz_str_newf("invalid");
if (rlen > len) {
free(buf_asm);
return op->size = 0;
}
switch (high) {
case 0:
free(buf_asm);
buf_asm = rz_str_newf(low ? "invalid" : "nop");
break;
case 1:
free(buf_asm);
buf_asm = rz_str_newf("jcn %d 0x%02x", low, buf[1]);
break;
case 0: rz_asm_op_set_asm(op, low ? "invalid" : "nop"); break;
case 1: rz_asm_op_setf_asm(op, "jcn %d 0x%02x", low, buf[1]); break;
case 2:
free(buf_asm);
if (rlen == 1) {
buf_asm = rz_str_newf("src r%d", (low & 0xe));
rz_asm_op_setf_asm(op, "src r%d", (low & 0xe));
} else {
buf_asm = rz_str_newf("fim r%d, 0x%02x", (low & 0xe), buf[1]);
rz_asm_op_setf_asm(op, "fim r%d, 0x%02x", (low & 0xe), buf[1]);
}
break;
case 3:
free(buf_asm);
if ((low & 1) == 1) {
buf_asm = rz_str_newf("jin r%d", (low & 0xe));
rz_asm_op_setf_asm(op, "jin r%d", (low & 0xe));
} else {
buf_asm = rz_str_newf("fin r%d", (low & 0xe));
rz_asm_op_setf_asm(op, "fin r%d", (low & 0xe));
}
break;
case 4:
free(buf_asm);
buf_asm = rz_str_newf("jun 0x%03x", ((ut16)(low << 8) | buf[1]));
break;
case 5:
free(buf_asm);
buf_asm = rz_str_newf("jms 0x%03x", ((ut16)(low << 8) | buf[1]));
break;
case 6:
free(buf_asm);
buf_asm = rz_str_newf("inc r%d", low);
break;
case 7:
free(buf_asm);
buf_asm = rz_str_newf("isz r%d, 0x%02x", low, buf[1]);
break;
case 8:
free(buf_asm);
buf_asm = rz_str_newf("add r%d", low);
break;
case 9:
free(buf_asm);
buf_asm = rz_str_newf("sub r%d", low);
break;
case 10:
free(buf_asm);
buf_asm = rz_str_newf("ld r%d", low);
break;
case 11:
free(buf_asm);
buf_asm = rz_str_newf("xch r%d", low);
break;
case 12:
free(buf_asm);
buf_asm = rz_str_newf("bbl %d", low);
break;
case 13:
free(buf_asm);
buf_asm = rz_str_newf("ldm %d", low);
break;
case 14:
free(buf_asm);
buf_asm = rz_str_newf("%s", i4004_e[low]);
break;
case 15:
free(buf_asm);
buf_asm = rz_str_newf("%s", i4004_f[low]);
break;
case 4: rz_asm_op_setf_asm(op, "jun 0x%03x", ((ut16)(low << 8) | buf[1])); break;
case 5: rz_asm_op_setf_asm(op, "jms 0x%03x", ((ut16)(low << 8) | buf[1])); break;
case 6: rz_asm_op_setf_asm(op, "inc r%d", low); break;
case 7: rz_asm_op_setf_asm(op, "isz r%d, 0x%02x", low, buf[1]); break;
case 8: rz_asm_op_setf_asm(op, "add r%d", low); break;
case 9: rz_asm_op_setf_asm(op, "sub r%d", low); break;
case 10: rz_asm_op_setf_asm(op, "ld r%d", low); break;
case 11: rz_asm_op_setf_asm(op, "xch r%d", low); break;
case 12: rz_asm_op_setf_asm(op, "bbl %d", low); break;
case 13: rz_asm_op_setf_asm(op, "ldm %d", low); break;
case 14: rz_asm_op_set_asm(op, i4004_e[low]); break;
case 15: rz_asm_op_set_asm(op, i4004_f[low]); break;
default: rz_asm_op_set_asm(op, "invalid"); break;
}
rz_strbuf_set(&op->buf_asm, buf_asm);
free(buf_asm);
return op->size = rlen;
}

0 comments on commit a7e44a6

Please sign in to comment.