diff --git a/nix/disassembler.cpp b/nix/disassembler.cpp index edeec08..db29676 100755 --- a/nix/disassembler.cpp +++ b/nix/disassembler.cpp @@ -133,6 +133,7 @@ uint8_t Disassembler::instructionToMnemonic(uint16_t addr, uint8_t *p, char *out addrmode amode = opcodes[*p].mode; uint16_t target = 0; char arg[40] = "\0"; + char bytes[10] = "\0"; switch (amode) { case A_REL: @@ -153,14 +154,19 @@ uint8_t Disassembler::instructionToMnemonic(uint16_t addr, uint8_t *p, char *out switch (instructionBytes(*p)) { case 1: // no arguments + sprintf(bytes, " %.2X ", *(uint8_t *)p); break; case 2: + sprintf(arg, "%s$%X%s", om.prefix, target, om.suffix); + sprintf(bytes, " %.2X %.2X ", *(uint8_t *)p, *(uint8_t *)(p+1)); + break; case 3: sprintf(arg, "%s$%X%s", om.prefix, target, om.suffix); + sprintf(bytes, "%.2X %.2X %.2X ", *(uint8_t *)p, *(uint8_t *)(p+1), *(uint8_t *)(p+2)); break; } - sprintf(outp, "$%.4X %s %s", addr, mn, arg); + sprintf(outp, "$%.4X %s %s %s", addr, bytes, mn, arg); return instructionBytes(*p); }