diff options
author | 2016-11-16 18:27:10 -0500 | |
---|---|---|
committer | 2016-11-16 18:27:10 -0500 | |
commit | 69c94e83440f92f8f9251200ed84fabe6bf2802a (patch) | |
tree | 77b84ef367cc33e9079203ced6a4d1761bf6566a /src/devices/cpu/pdp8/pdp8dasm.cpp | |
parent | 41cf1e52e08d437faf801da2d79681bb6bd6c09c (diff) |
Changed the pdp8 disassembler to use 'std::ostream &' internally
Diffstat (limited to 'src/devices/cpu/pdp8/pdp8dasm.cpp')
-rw-r--r-- | src/devices/cpu/pdp8/pdp8dasm.cpp | 71 |
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 ) |