summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author R. Belmont <rb6502@users.noreply.github.com>2016-10-27 16:25:51 -0400
committer GitHub <noreply@github.com>2016-10-27 16:25:51 -0400
commitfbab3981f0c78e510aa3d2b394ee103fb4aeb219 (patch)
tree37bfe77521e53e16dbd02f4ca978145c69766231
parent7b3eb8f0673f439f004c4a63e74d15eb1d9b5d8d (diff)
parenteed3ed841a33364745da4e9f85418f6efe37d9a9 (diff)
Merge pull request #1572 from npwoods/dasmstream_m6800
Changed the M6800 disassembler to use 'std::ostream &' internally
-rw-r--r--src/devices/cpu/m6800/6800dasm.cpp33
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);