diff options
Diffstat (limited to 'src/devices/cpu/m6800/6800dasm.cpp')
-rw-r--r-- | src/devices/cpu/m6800/6800dasm.cpp | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/src/devices/cpu/m6800/6800dasm.cpp b/src/devices/cpu/m6800/6800dasm.cpp index 483f0abc353..1b33f96f599 100644 --- a/src/devices/cpu/m6800/6800dasm.cpp +++ b/src/devices/cpu/m6800/6800dasm.cpp @@ -166,7 +166,7 @@ static const uint8_t table[0x104][3] = { #define ARG2 opram[2] #define ARGW (opram[1]<<8) + opram[2] -static unsigned Dasm680x (int subtype, char *buf, unsigned pc, const uint8_t *oprom, const uint8_t *opram) +static unsigned Dasm680x (int subtype, std::ostream &stream, unsigned pc, const uint8_t *oprom, const uint8_t *opram) { uint32_t flags = 0; int invalid_mask; @@ -209,46 +209,55 @@ static unsigned Dasm680x (int subtype, char *buf, unsigned pc, const uint8_t *op if ( invalid & invalid_mask ) /* invalid for this cpu type ? */ { - strcpy(buf, "illegal"); + stream << "illegal"; return 1 | flags | DASMFLAG_SUPPORTED; } - buf += sprintf(buf, "%-5s", op_name_str[opcode]); + util::stream_format(stream, "%-5s", op_name_str[opcode]); switch( args ) { case rel: /* relative */ - sprintf (buf, "$%04X", pc + (int8_t)ARG1 + 2); + util::stream_format(stream, "$%04X", pc + (int8_t)ARG1 + 2); return 2 | flags | DASMFLAG_SUPPORTED; case imb: /* immediate (byte) */ - sprintf (buf, "#$%02X", ARG1); + util::stream_format(stream, "#$%02X", ARG1); return 2 | flags | DASMFLAG_SUPPORTED; case imw: /* immediate (word) */ - sprintf (buf, "#$%04X", ARGW); + util::stream_format(stream, "#$%04X", ARGW); return 3 | flags | DASMFLAG_SUPPORTED; case idx: /* indexed + byte offset */ - sprintf (buf, "(x+$%02X)", ARG1 ); + util::stream_format(stream, "(x+$%02X)", ARG1); return 2 | flags | DASMFLAG_SUPPORTED; case imx: /* immediate, indexed + byte offset */ - sprintf (buf, "#$%02X,(x+$%02x)", ARG1, ARG2 ); + util::stream_format(stream, "#$%02X,(x+$%02x)", ARG1, ARG2); return 3 | flags | DASMFLAG_SUPPORTED; case dir: /* direct address */ - sprintf (buf, "$%02X", ARG1 ); + util::stream_format(stream, "$%02X", ARG1); return 2 | flags | DASMFLAG_SUPPORTED; case imd: /* immediate, direct address */ - sprintf (buf, "#$%02X,$%02X", ARG1, ARG2); + util::stream_format(stream, "#$%02X,$%02X", ARG1, ARG2); return 3 | flags | DASMFLAG_SUPPORTED; case ext: /* extended address */ - sprintf (buf, "$%04X", ARGW); + util::stream_format(stream, "$%04X", ARGW); return 3 | flags | DASMFLAG_SUPPORTED; case sx1: /* byte from address (s + 1) */ - sprintf (buf, "(s+1)"); + util::stream_format(stream, "(s+1)"); return 1 | flags | DASMFLAG_SUPPORTED; default: return 1 | flags | DASMFLAG_SUPPORTED; } } +static unsigned Dasm680x(int subtype, char *buffer, unsigned pc, const uint8_t *oprom, const uint8_t *opram) +{ + std::ostringstream stream; + unsigned result = Dasm680x(subtype, stream, pc, oprom, opram); + std::string stream_str = stream.str(); + strcpy(buffer, stream_str.c_str()); + return result; +} + CPU_DISASSEMBLE( m6800 ) { return Dasm680x(6800,buffer,pc,oprom,opram); |