summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu
diff options
context:
space:
mode:
author Nathan Woods <npwoods@mess.org>2016-11-16 18:27:10 -0500
committer Nathan Woods <npwoods@mess.org>2016-11-16 18:27:10 -0500
commit69c94e83440f92f8f9251200ed84fabe6bf2802a (patch)
tree77b84ef367cc33e9079203ced6a4d1761bf6566a /src/devices/cpu
parent41cf1e52e08d437faf801da2d79681bb6bd6c09c (diff)
Changed the pdp8 disassembler to use 'std::ostream &' internally
Diffstat (limited to 'src/devices/cpu')
-rw-r--r--src/devices/cpu/pdp8/pdp8dasm.cpp71
1 files changed, 38 insertions, 33 deletions
diff --git a/src/devices/cpu/pdp8/pdp8dasm.cpp b/src/devices/cpu/pdp8/pdp8dasm.cpp
index cfaadfb78e3..e71f4ebe61d 100644
--- a/src/devices/cpu/pdp8/pdp8dasm.cpp
+++ b/src/devices/cpu/pdp8/pdp8dasm.cpp
@@ -8,9 +8,7 @@
#include "emu.h"
-static char *output;
-
-offs_t pdp8_dasm_one(char *buffer, offs_t pc, uint16_t op)
+static offs_t pdp8_dasm_one(std::ostream &stream, offs_t pc, uint16_t op)
{
uint8_t opcode = (op >> 011) & 07;
uint16_t current_page = pc & 07600;
@@ -19,30 +17,28 @@ offs_t pdp8_dasm_one(char *buffer, offs_t pc, uint16_t op)
bool indirect = (op & 0400) ? true : false;
bool zero_page = (op & 0200) ? false : true;
- output = buffer;
-
switch (opcode)
{
case 0:
- output += sprintf(buffer, "AND %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
+ util::stream_format(stream, "AND %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
break;
case 1:
- output += sprintf(buffer, "TAD %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
+ util::stream_format(stream, "TAD %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
break;
case 2:
- output += sprintf(buffer, "ISZ %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
+ util::stream_format(stream, "ISZ %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
break;
case 3:
- output += sprintf(buffer, "DCA %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
+ util::stream_format(stream, "DCA %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
break;
case 4:
- output += sprintf(buffer, "JMS %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
+ util::stream_format(stream, "JMS %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
break;
case 5:
- output += sprintf(buffer, "JMP %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
+ util::stream_format(stream, "JMP %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
break;
case 6:
- output += sprintf(buffer, "IOT %03o %01o", (op >> 03) & 077, op & 07);
+ util::stream_format(stream, "IOT %03o %01o", (op >> 03) & 077, op & 07);
break;
case 7:
{
@@ -51,50 +47,50 @@ offs_t pdp8_dasm_one(char *buffer, offs_t pc, uint16_t op)
{
if (!(op & 0377))
{
- output += sprintf(buffer, "NOP ");
+ util::stream_format(stream, "NOP ");
}
else
{
if (op & 0200)
{
- output += sprintf(buffer, "CLA ");
+ util::stream_format(stream, "CLA ");
}
if (op & 0100)
{
- output += sprintf(buffer, "CLL ");
+ util::stream_format(stream, "CLL ");
}
if (op & 040)
{
- output += sprintf(buffer, "CMA ");
+ util::stream_format(stream, "CMA ");
}
if (op & 020)
{
- output += sprintf(buffer, "CML ");
+ util::stream_format(stream, "CML ");
}
if (op & 01)
{
- output += sprintf(buffer, "IAC ");
+ util::stream_format(stream, "IAC ");
}
if (op & 010)
{
if (op & 02)
{
- output += sprintf(buffer, "RTR ");
+ util::stream_format(stream, "RTR ");
}
else
{
- output += sprintf(buffer, "RAR ");
+ util::stream_format(stream, "RAR ");
}
}
if (op & 04)
{
if (op & 02)
{
- output += sprintf(buffer, "RTL ");
+ util::stream_format(stream, "RTL ");
}
else
{
- output += sprintf(buffer, "RAL ");
+ util::stream_format(stream, "RAL ");
}
}
}
@@ -103,7 +99,7 @@ offs_t pdp8_dasm_one(char *buffer, offs_t pc, uint16_t op)
{
if (!(op & 0377))
{
- output += sprintf(buffer, "NOP ");
+ util::stream_format(stream, "NOP ");
}
else
{
@@ -111,21 +107,21 @@ offs_t pdp8_dasm_one(char *buffer, offs_t pc, uint16_t op)
{
if (!(op & 0160))
{
- output += sprintf(buffer, "SKP ");
+ util::stream_format(stream, "SKP ");
}
else
{
if (op & 0100)
{
- output += sprintf(buffer, "SPA ");
+ util::stream_format(stream, "SPA ");
}
if (op & 040)
{
- output += sprintf(buffer, "SNA ");
+ util::stream_format(stream, "SNA ");
}
if (op & 020)
{
- output += sprintf(buffer, "SZL ");
+ util::stream_format(stream, "SZL ");
}
}
}
@@ -133,28 +129,28 @@ offs_t pdp8_dasm_one(char *buffer, offs_t pc, uint16_t op)
{
if (op & 0100)
{
- output += sprintf(buffer, "SMA ");
+ util::stream_format(stream, "SMA ");
}
if (op & 040)
{
- output += sprintf(buffer, "SZA ");
+ util::stream_format(stream, "SZA ");
}
if (op & 020)
{
- output += sprintf(buffer, "SNL ");
+ util::stream_format(stream, "SNL ");
}
}
if (op & 0200)
{
- output += sprintf(buffer, "CLA ");
+ util::stream_format(stream, "CLA ");
}
if (op & 04)
{
- output += sprintf(buffer, "OSR ");
+ util::stream_format(stream, "OSR ");
}
if (op & 02)
{
- output += sprintf(buffer, "HLT ");
+ util::stream_format(stream, "HLT ");
}
}
}
@@ -164,6 +160,15 @@ offs_t pdp8_dasm_one(char *buffer, offs_t pc, uint16_t op)
return 2 | DASMFLAG_SUPPORTED;
}
+static offs_t pdp8_dasm_one(char *buffer, offs_t pc, uint16_t op)
+{
+ std::ostringstream stream;
+ offs_t result = pdp8_dasm_one(stream, pc, op);
+ std::string stream_str = stream.str();
+ strcpy(buffer, stream_str.c_str());
+ return result;
+}
+
/*****************************************************************************/
CPU_DISASSEMBLE( pdp8 )