diff options
author | 2016-11-18 07:08:19 -0500 | |
---|---|---|
committer | 2016-11-18 07:08:19 -0500 | |
commit | d955f8481462e66c1d12b5d6cb1712c8a069ca7f (patch) | |
tree | 090d77aa179f288426e199d8e8dd6cabb07dd9b0 /src/devices/cpu | |
parent | bb99eba11dadfa37acb2a796f4f8e2b0a7330e44 (diff) |
Changed the tms34010 disassembler to use 'std::ostream &' internally
Diffstat (limited to 'src/devices/cpu')
-rw-r--r-- | src/devices/cpu/tms34010/34010dsm.cpp | 1156 |
1 files changed, 569 insertions, 587 deletions
diff --git a/src/devices/cpu/tms34010/34010dsm.cpp b/src/devices/cpu/tms34010/34010dsm.cpp index 70fbabc58db..5ac7dd6786a 100644 --- a/src/devices/cpu/tms34010/34010dsm.cpp +++ b/src/devices/cpu/tms34010/34010dsm.cpp @@ -25,116 +25,104 @@ static uint8_t rf; static uint32_t __pc, _pc; static uint16_t op,rs,rd; -static char *buffer; -static char temp[20]; - static const uint8_t *rombase; static const uint8_t *rambase; static offs_t pcbase; -static void print_reg(uint8_t reg) +static void print_reg(std::ostream &stream, uint8_t reg) { if (reg != 0x0f) { - sprintf(temp, "%c%d", rf, reg); - strcat(buffer, temp); + util::stream_format(stream, "%c%d", rf, reg); } else { - strcat(buffer, "SP"); + stream << "SP"; } } -static void print_src_reg(void) +static void print_src_reg(std::ostream &stream) { - print_reg(rs); + print_reg(stream, rs); } -static void print_des_reg(void) +static void print_des_reg(std::ostream &stream) { - print_reg(rd); + print_reg(stream, rd); } -static void print_src_des_reg(void) +static void print_src_des_reg(std::ostream &stream) { - print_src_reg(); - strcat(buffer, ","); - print_des_reg(); + print_src_reg(stream); + stream << ","; + print_des_reg(stream); } -static void print_word_parm(void) +static void print_word_parm(std::ostream &stream) { uint16_t w; PARAM_WORD(w); - sprintf(temp, "%Xh", w); - strcat(buffer, temp); + util::stream_format(stream, "%Xh", w); } -static void print_word_parm_1s_comp(void) +static void print_word_parm_1s_comp(std::ostream &stream) { uint16_t w; PARAM_WORD(w); w = ~w; - sprintf(temp, "%Xh", w); - strcat(buffer, temp); + util::stream_format(stream, "%Xh", w); } -static void print_long_parm(void) +static void print_long_parm(std::ostream &stream) { uint32_t l; PARAM_LONG(l); - sprintf(temp, "%Xh", l); - strcat(buffer, temp); + util::stream_format(stream, "%Xh", l); } -static void print_long_parm_1s_comp(void) +static void print_long_parm_1s_comp(std::ostream &stream) { uint32_t l; PARAM_LONG(l); - sprintf(temp, "%Xh", ~l); - strcat(buffer, temp); + util::stream_format(stream, "%Xh", ~l); } -static void print_constant(void) +static void print_constant(std::ostream &stream) { uint8_t constant = (op >> 5) & 0x1f; - sprintf(temp, "%Xh", constant); - strcat(buffer, temp); + util::stream_format(stream, "%Xh", constant); } -static void print_constant_1_32(void) +static void print_constant_1_32(std::ostream &stream) { uint8_t constant = (op >> 5) & 0x1f; if (!constant) constant = 0x20; - sprintf(temp, "%Xh", constant); - strcat(buffer, temp); + util::stream_format(stream, "%Xh", constant); } -static void print_constant_1s_comp(void) +static void print_constant_1s_comp(std::ostream &stream) { uint8_t constant = (~op >> 5) & 0x1f; - sprintf(temp, "%Xh", constant); - strcat(buffer, temp); + util::stream_format(stream, "%Xh", constant); } -static void print_constant_2s_comp(void) +static void print_constant_2s_comp(std::ostream &stream) { uint8_t constant = 32 - ((op >> 5) & 0x1f); - sprintf(temp, "%Xh", constant); - strcat(buffer, temp); + util::stream_format(stream, "%Xh", constant); } -static void print_relative(void) +static void print_relative(std::ostream &stream) { uint16_t l; int16_t ls; @@ -142,69 +130,65 @@ static void print_relative(void) PARAM_WORD(l); ls = (int16_t)l; - sprintf(temp, "%Xh", PC + 32 + (ls << 4)); - strcat(buffer, temp); + util::stream_format(stream, "%Xh", PC + 32 + (ls << 4)); } -static void print_relative_8bit(void) +static void print_relative_8bit(std::ostream &stream) { int8_t ls = (int8_t)op; - sprintf(temp, "%Xh", PC + 16 + (ls << 4)); - strcat(buffer, temp); + util::stream_format(stream, "%Xh", PC + 16 + (ls << 4)); } -static void print_relative_5bit(void) +static void print_relative_5bit(std::ostream &stream) { int8_t ls = (int8_t)((op >> 5) & 0x1f); if (op & 0x0400) ls = -ls; - sprintf(temp, "%Xh", PC + 16 + (ls << 4)); - strcat(buffer, temp); + util::stream_format(stream, "%Xh", PC + 16 + (ls << 4)); } -static void print_field(void) +static void print_field(std::ostream &stream) { - sprintf(temp, "%c", (op & 0x200) ? '1' : '0'); - strcat(buffer, temp); + util::stream_format(stream, "%c", (op & 0x200) ? '1' : '0'); } -static void print_condition_code(void) +static void print_condition_code(std::ostream &stream) { switch (op & 0x0f00) { - case 0x0000: strcat(buffer, " "); break; /* This is really UC (Unconditional) */ - case 0x0100: strcat(buffer, "P "); break; - case 0x0200: strcat(buffer, "LS"); break; - case 0x0300: strcat(buffer, "HI"); break; - case 0x0400: strcat(buffer, "LT"); break; - case 0x0500: strcat(buffer, "GE"); break; - case 0x0600: strcat(buffer, "LE"); break; - case 0x0700: strcat(buffer, "GT"); break; - case 0x0800: strcat(buffer, "C "); break; - case 0x0900: strcat(buffer, "NC"); break; - case 0x0a00: strcat(buffer, "EQ"); break; - case 0x0b00: strcat(buffer, "NE"); break; - case 0x0c00: strcat(buffer, "V "); break; - case 0x0d00: strcat(buffer, "NV"); break; - case 0x0e00: strcat(buffer, "N "); break; - case 0x0f00: strcat(buffer, "NN"); break; + case 0x0000: stream << " "; break; /* This is really UC (Unconditional) */ + case 0x0100: stream << "P "; break; + case 0x0200: stream << "LS"; break; + case 0x0300: stream << "HI"; break; + case 0x0400: stream << "LT"; break; + case 0x0500: stream << "GE"; break; + case 0x0600: stream << "LE"; break; + case 0x0700: stream << "GT"; break; + case 0x0800: stream << "C "; break; + case 0x0900: stream << "NC"; break; + case 0x0a00: stream << "EQ"; break; + case 0x0b00: stream << "NE"; break; + case 0x0c00: stream << "V "; break; + case 0x0d00: stream << "NV"; break; + case 0x0e00: stream << "N "; break; + case 0x0f00: stream << "NN"; break; } } -static void print_reg_list_range(int8_t first, int8_t last) +static void print_reg_list_range(std::ostream &stream, int8_t first, int8_t last) { if ((first != -1 ) && (first != last)) { if ((last - first) == 1) - strcat(buffer, ","); + stream << ","; else - strcat(buffer, "-"); - print_reg(last); + stream << "-"; + print_reg(stream, last); } } -static void print_reg_list(uint16_t rev) +static void print_reg_list(std::ostream &stream, uint16_t rev) { uint16_t l; uint8_t i; @@ -231,31 +215,30 @@ static void print_reg_list(uint16_t rev) { if (first == -1) { - strcat(buffer, ","); - print_reg(i); + stream << ","; + print_reg(stream, i); first = i; } last = i; } else { - print_reg_list_range(first, last); + print_reg_list_range(stream, first, last); first = -1; } } - print_reg_list_range(first, last); + print_reg_list_range(stream, first, last); } -static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) +static unsigned Dasm340x0(std::ostream &stream, uint32_t pc, bool is_34020) { int flags = 0; uint8_t bad = 0; uint16_t subop; __pc = _pc = pc; - buffer = buff; OP_WORD(op); @@ -270,66 +253,66 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) switch (subop) { case 0x0020: - sprintf (buffer, "REV "); - print_des_reg(); + util::stream_format(stream, "REV "); + print_des_reg(stream); break; case 0x0040: if (is_34020) - sprintf (buffer, "IDLE "); + util::stream_format(stream, "IDLE "); else bad = 1; break; case 0x0080: if (is_34020) - sprintf (buffer, "MWAIT "); + util::stream_format(stream, "MWAIT "); else bad = 1; break; case 0x00e0: if (is_34020) - sprintf (buffer, "BLMOVE %d,%d", (op >> 1) & 1, op & 1); + util::stream_format(stream, "BLMOVE %d,%d", (op >> 1) & 1, op & 1); else bad = 1; break; case 0x0100: - sprintf (buffer, "EMU "); + util::stream_format(stream, "EMU "); break; case 0x0120: - sprintf (buffer, "EXGPC "); - print_des_reg(); + util::stream_format(stream, "EXGPC "); + print_des_reg(stream); break; case 0x0140: - sprintf (buffer, "GETPC "); - print_des_reg(); + util::stream_format(stream, "GETPC "); + print_des_reg(stream); break; case 0x0160: - sprintf (buffer, "JUMP "); - print_des_reg(); + util::stream_format(stream, "JUMP "); + print_des_reg(stream); break; case 0x0180: - sprintf (buffer, "GETST "); - print_des_reg(); + util::stream_format(stream, "GETST "); + print_des_reg(stream); break; case 0x01a0: - sprintf (buffer, "PUTST "); - print_des_reg(); + util::stream_format(stream, "PUTST "); + print_des_reg(stream); break; case 0x01c0: - sprintf (buffer, "POPST "); + util::stream_format(stream, "POPST "); break; case 0x01e0: - sprintf (buffer, "PUSHST "); + util::stream_format(stream, "PUSHST "); break; default: @@ -343,14 +326,14 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) { case 0x0040: if (is_34020) - sprintf (buffer, "SETCSP "); + util::stream_format(stream, "SETCSP "); else bad = 1; break; case 0x0060: if (is_34020) - sprintf (buffer, "SETCDP "); + util::stream_format(stream, "SETCDP "); else bad = 1; break; @@ -358,8 +341,8 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x0080: if (is_34020) { - sprintf (buffer, "RPIX "); - print_des_reg(); + util::stream_format(stream, "RPIX "); + print_des_reg(stream); } else bad = 1; @@ -368,8 +351,8 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x00a0: if (is_34020) { - sprintf (buffer, "EXGPS "); - print_des_reg(); + util::stream_format(stream, "EXGPS "); + print_des_reg(stream); } else bad = 1; @@ -378,8 +361,8 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x00c0: if (is_34020) { - sprintf (buffer, "GETPS "); - print_des_reg(); + util::stream_format(stream, "GETPS "); + print_des_reg(stream); } else bad = 1; @@ -387,48 +370,48 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x00e0: if (is_34020) - sprintf (buffer, "SETCMP "); + util::stream_format(stream, "SETCMP "); else bad = 1; break; case 0x0100: - sprintf (buffer, "NOP "); + util::stream_format(stream, "NOP "); break; case 0x0120: - sprintf (buffer, "CLRC "); + util::stream_format(stream, "CLRC "); break; case 0x0140: - sprintf (buffer, "MOVB @"); - print_long_parm(); - strcat(buffer, ",@"); - print_long_parm(); + util::stream_format(stream, "MOVB @"); + print_long_parm(stream); + stream << ",@"; + print_long_parm(stream); break; case 0x0160: - sprintf (buffer, "DINT "); + util::stream_format(stream, "DINT "); break; case 0x0180: - sprintf (buffer, "ABS "); - print_des_reg(); + util::stream_format(stream, "ABS "); + print_des_reg(stream); break; case 0x01a0: - sprintf (buffer, "NEG "); - print_des_reg(); + util::stream_format(stream, "NEG "); + print_des_reg(stream); break; case 0x01c0: - sprintf (buffer, "NEGB "); - print_des_reg(); + util::stream_format(stream, "NEGB "); + print_des_reg(stream); break; case 0x01e0: - sprintf (buffer, "NOT "); - print_des_reg(); + util::stream_format(stream, "NOT "); + print_des_reg(stream); break; default: @@ -446,7 +429,7 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) { uint32_t x; PARAM_LONG(x); - sprintf(buffer, "CEXEC %d,%06X,%d", (x >> 7) & 1, (x >> 8) & 0x1fffff, (x >> 29) & 7); + util::stream_format(stream, "CEXEC %d,%06X,%d", (x >> 7) & 1, (x >> 8) & 0x1fffff, (x >> 29) & 7); } else bad = 1; @@ -457,10 +440,9 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) { uint32_t x; PARAM_LONG(x); - sprintf(buffer, "CMOVGC "); - print_des_reg(); - sprintf(temp, ",%06X,%d", (x >> 8) & 0x1fffff, (x >> 29) & 7); - strcat(buffer, temp); + util::stream_format(stream, "CMOVGC "); + print_des_reg(stream); + util::stream_format(stream, ",%06X,%d", (x >> 8) & 0x1fffff, (x >> 29) & 7); } else bad = 1; @@ -471,13 +453,12 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) { uint32_t x; PARAM_LONG(x); - sprintf(buffer, "CMOVGC "); - print_des_reg(); - strcat(buffer, ","); + util::stream_format(stream, "CMOVGC "); + print_des_reg(stream); + stream << ","; rf = (x & 0x10) ? 'B' : 'A'; - print_reg(x & 0x0f); - sprintf(temp, ",%d,%06X,%d", (x >> 7) & 1, (x >> 8) & 0x1fffff, (x >> 29) & 7); - strcat(buffer, temp); + print_reg(stream, x & 0x0f); + util::stream_format(stream, ",%d,%06X,%d", (x >> 7) & 1, (x >> 8) & 0x1fffff, (x >> 29) & 7); } else bad = 1; @@ -491,19 +472,17 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) if (op == 0x0660 && (x & 0xff) == 0x01) { - sprintf(buffer, "CMOVCS "); - sprintf(temp, ",%06X,%d", (x >> 8) & 0x1fffff, (x >> 29) & 7); - strcat(buffer, temp); + util::stream_format(stream, "CMOVCS "); + util::stream_format(stream, ",%06X,%d", (x >> 8) & 0x1fffff, (x >> 29) & 7); } else { - sprintf(buffer, "CMOVCG "); - print_des_reg(); - strcat(buffer, ","); + util::stream_format(stream, "CMOVCG "); + print_des_reg(stream); + stream << ","; rf = (x & 0x10) ? 'B' : 'A'; - print_reg(x & 0x0f); - sprintf(temp, ",%d,%06X,%d", (x >> 7) & 1, (x >> 8) & 0x1fffff, (x >> 29) & 7); - strcat(buffer, temp); + print_reg(stream, x & 0x0f); + util::stream_format(stream, ",%d,%06X,%d", (x >> 7) & 1, (x >> 8) & 0x1fffff, (x >> 29) & 7); } } else @@ -515,11 +494,10 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) { uint32_t x; PARAM_LONG(x); - sprintf(buffer, "CMOVMC *"); + util::stream_format(stream, "CMOVMC *"); rf = (x & 0x10) ? 'B' : 'A'; - print_reg(x & 0x0f); - sprintf(temp, "+,%d,%d,%06X,%d", op & 0x1f, (x >> 7) & 1, (x >> 8) & 0x1fffff, (x >> 29) & 7); - strcat(buffer, temp); + print_reg(stream, x & 0x0f); + util::stream_format(stream, "+,%d,%d,%06X,%d", op & 0x1f, (x >> 7) & 1, (x >> 8) & 0x1fffff, (x >> 29) & 7); } else bad = 1; @@ -530,10 +508,9 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) { uint32_t x; PARAM_LONG(x); - sprintf(buffer, "CMOVCM *"); - print_des_reg(); - sprintf(temp, "+,%d,%d,%06X,%d", x & 0x1f, (x >> 7) & 1, (x >> 8) & 0x1fffff, (x >> 29) & 7); - strcat(buffer, temp); + util::stream_format(stream, "CMOVCM *"); + print_des_reg(stream); + util::stream_format(stream, "+,%d,%d,%06X,%d", x & 0x1f, (x >> 7) & 1, (x >> 8) & 0x1fffff, (x >> 29) & 7); } else bad = 1; @@ -544,10 +521,9 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) { uint32_t x; PARAM_LONG(x); - sprintf(buffer, "CMOVCM *-"); - print_des_reg(); - sprintf(temp, ",%d,%d,%06X,%d", x & 0x1f, (x >> 7) & 1, (x >> 8) & 0x1fffff, (x >> 29) & 7); - strcat(buffer, temp); + util::stream_format(stream, "CMOVCM *-"); + print_des_reg(stream); + util::stream_format(stream, ",%d,%d,%06X,%d", x & 0x1f, (x >> 7) & 1, (x >> 8) & 0x1fffff, (x >> 29) & 7); } else bad = 1; @@ -558,82 +534,81 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) { uint32_t x; PARAM_LONG(x); - sprintf(buffer, "CMOVMC *"); + util::stream_format(stream, "CMOVMC *"); rf = (x & 0x10) ? 'B' : 'A'; - print_reg(x & 0x0f); - strcat(buffer, "+,"); + print_reg(stream, x & 0x0f); + stream << "+,"; rf = (op & 0x10) ? 'B' : 'A'; - print_reg(op & 0x0f); - sprintf(temp, ",%d,%06X,%d", (x >> 7) & 1, (x >> 8) & 0x1fffff, (x >> 29) & 7); - strcat(buffer, temp); + print_reg(stream, op & 0x0f); + util::stream_format(stream, ",%d,%06X,%d", (x >> 7) & 1, (x >> 8) & 0x1fffff, (x >> 29) & 7); } else bad = 1; break; case 0x0100: - sprintf (buffer, "SEXT "); - print_des_reg(); - strcat(buffer, ","); - print_field(); + util::stream_format(stream, "SEXT "); + print_des_reg(stream); + stream << ","; + print_field(stream); break; case 0x0120: - sprintf (buffer, "ZEXT "); - print_des_reg(); - strcat(buffer, ","); - print_field(); + util::stream_format(stream, "ZEXT "); + print_des_reg(stream); + stream << ","; + print_field(stream); break; case 0x0140: case 0x0160: - sprintf (buffer, "SETF %Xh,%X,", + util::stream_format(stream, "SETF %Xh,%X,", (op & 0x1f) ? op & 0x1f : 0x20, (op >> 5) & 1); - print_field(); + print_field(stream); break; case 0x0180: - sprintf (buffer, "MOVE "); - print_des_reg(); - strcat(buffer, ",@"); - print_long_parm(); - strcat(buffer, ","); - print_field(); + util::stream_format(stream, "MOVE "); + print_des_reg(stream); + stream << ",@"; + print_long_parm(stream); + stream << ","; + print_field(stream); break; case 0x01a0: - sprintf (buffer, "MOVE @"); - print_long_parm(); - strcat(buffer, ","); - print_des_reg(); - strcat(buffer, ","); - print_field(); + util::stream_format(stream, "MOVE @"); + print_long_parm(stream); + stream << ","; + print_des_reg(stream); + stream << ","; + print_field(stream); break; case 0x01c0: - sprintf (buffer, "MOVE @"); - print_long_parm(); - strcat(buffer, ",@"); - print_long_parm(); - strcat(buffer, ","); - print_field(); + util::stream_format(stream, "MOVE @"); + print_long_parm(stream); + stream << ",@"; + print_long_parm(stream); + stream << ","; + print_field(stream); break; case 0x01e0: if (op & 0x200) { - sprintf (buffer, "MOVE @"); - print_long_parm(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "MOVE @"); + print_long_parm(stream); + stream << ","; + print_des_reg(stream); } else { - sprintf (buffer, "MOVB "); - print_des_reg(); - strcat(buffer, ",@"); - print_long_parm(); + util::stream_format(stream, "MOVB "); + print_des_reg(stream); + stream << ",@"; + print_long_parm(stream); } break; @@ -649,7 +624,7 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x0000: if (is_34020) { - sprintf (buffer, "TRAPL "); + util::stream_format(stream, "TRAPL "); flags = DASMFLAG_STEP_OVER; } else @@ -661,11 +636,10 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) { uint32_t x; PARAM_LONG(x); - sprintf(buffer, "CMOVMC *-"); + util::stream_format(stream, "CMOVMC *-"); rf = (x & 0x10) ? 'B' : 'A'; - print_reg(x & 0x0f); - sprintf(temp, ",%d,%d,%06X,%d", op & 0x1f, (x >> 7) & 1, (x >> 8) & 0x1fffff, (x >> 29) & 7); - strcat(buffer, temp); + print_reg(stream, x & 0x0f); + util::stream_format(stream, ",%d,%d,%06X,%d", op & 0x1f, (x >> 7) & 1, (x >> 8) & 0x1fffff, (x >> 29) & 7); } else bad = 1; @@ -673,7 +647,7 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x0040: if (is_34020) - sprintf (buffer, "VBLT B,L"); + util::stream_format(stream, "VBLT B,L"); else bad = 1; break; @@ -681,7 +655,7 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x0060: if (is_34020) { - sprintf(buffer, "RETM "); + util::stream_format(stream, "RETM "); flags = DASMFLAG_STEP_OUT; } else @@ -690,61 +664,60 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x00e0: if (is_34020) - sprintf (buffer, "CLIP "); + util::stream_format(stream, "CLIP "); else bad = 1; break; case 0x0100: - sprintf (buffer, "TRAP %Xh", op & 0x1f); + util::stream_format(stream, "TRAP %Xh", op & 0x1f); flags = DASMFLAG_STEP_OVER; break; case 0x0120: - sprintf (buffer, "CALL "); - print_des_reg(); + util::stream_format(stream, "CALL "); + print_des_reg(stream); flags = DASMFLAG_STEP_OVER; break; case 0x0140: - sprintf (buffer, "RETI "); + util::stream_format(stream, "RETI "); flags = DASMFLAG_STEP_OUT; break; case 0x0160: - sprintf (buffer, "RETS "); + util::stream_format(stream, "RETS "); flags = DASMFLAG_STEP_OUT; if (op & 0x1f) { - sprintf(temp, "%Xh", op & 0x1f); - strcat(buffer, temp); + util::stream_format(stream, "%Xh", op & 0x1f); } break; case 0x0180: - sprintf (buffer, "MMTM "); - print_des_reg(); - print_reg_list(1); + util::stream_format(stream, "MMTM "); + print_des_reg(stream); + print_reg_list(stream, 1); break; case 0x01a0: - sprintf (buffer, "MMFM "); - print_des_reg(); - print_reg_list(0); + util::stream_format(stream, "MMFM "); + print_des_reg(stream); + print_reg_list(stream, 0); break; case 0x01c0: - sprintf (buffer, "MOVI "); - print_word_parm(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "MOVI "); + print_word_parm(stream); + stream << ","; + print_des_reg(stream); break; case 0x01e0: - sprintf (buffer, "MOVI "); - print_long_parm(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "MOVI "); + print_long_parm(stream); + stream << ","; + print_des_reg(stream); break; default: @@ -758,21 +731,21 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) { case 0x0000: if (is_34020) - sprintf (buffer, "VLCOL "); + util::stream_format(stream, "VLCOL "); else bad = 1; break; case 0x0020: if (is_34020) - sprintf (buffer, "PFILL XY"); + util::stream_format(stream, "PFILL XY"); else bad = 1; break; case 0x0040: if (is_34020) - sprintf (buffer, "VFILL L"); + util::stream_format(stream, "VFILL L"); else bad = 1; break; @@ -780,8 +753,8 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x0060: if (is_34020) { - sprintf (buffer, "CVMXYL "); - print_des_reg(); + util::stream_format(stream, "CVMXYL "); + print_des_reg(stream); } else bad = 1; @@ -790,8 +763,8 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x0080: if (is_34020) { - sprintf (buffer, "CVDXYL "); - print_des_reg(); + util::stream_format(stream, "CVDXYL "); + print_des_reg(stream); } else bad = 1; @@ -799,72 +772,72 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x00a0: if (is_34020) - sprintf (buffer, "FPIXEQ "); + util::stream_format(stream, "FPIXEQ "); else bad = 1; break; case 0x00c0: if (is_34020) - sprintf (buffer, "FPIXNE "); + util::stream_format(stream, "FPIXNE "); else bad = 1; break; case 0x0100: - sprintf (buffer, "ADDI "); - print_word_parm(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "ADDI "); + print_word_parm(stream); + stream << ","; + print_des_reg(stream); break; case 0x0120: - sprintf (buffer, "ADDI "); - print_long_parm(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "ADDI "); + print_long_parm(stream); + stream << ","; + print_des_reg(stream); break; case 0x0140: - sprintf (buffer, "CMPI "); - print_word_parm_1s_comp(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "CMPI "); + print_word_parm_1s_comp(stream); + stream << ","; + print_des_reg(stream); break; case 0x0160: - sprintf (buffer, "CMPI "); - print_long_parm_1s_comp(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "CMPI "); + print_long_parm_1s_comp(stream); + stream << ","; + print_des_reg(stream); break; case 0x0180: - sprintf (buffer, "ANDI "); - print_long_parm_1s_comp(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "ANDI "); + print_long_parm_1s_comp(stream); + stream << ","; + print_des_reg(stream); break; case 0x01a0: - sprintf (buffer, "ORI "); - print_long_parm(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "ORI "); + print_long_parm(stream); + stream << ","; + print_des_reg(stream); break; case 0x01c0: - sprintf (buffer, "XORI "); - print_long_parm(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "XORI "); + print_long_parm(stream); + stream << ","; + print_des_reg(stream); break; case 0x01e0: - sprintf (buffer, "SUBI "); - print_word_parm_1s_comp(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "SUBI "); + print_word_parm_1s_comp(stream); + stream << ","; + print_des_reg(stream); break; default: @@ -879,10 +852,10 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x0000: if (is_34020) { - sprintf (buffer, "ADDXYI "); - print_long_parm(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "ADDXYI "); + print_long_parm(stream); + stream << ","; + print_des_reg(stream); } else bad = 1; @@ -890,60 +863,60 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x0040: if (is_34020) - sprintf (buffer, "LINIT "); + util::stream_format(stream, "LINIT "); else bad = 1; break; case 0x0100: - sprintf (buffer, "SUBI "); - print_long_parm_1s_comp(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "SUBI "); + print_long_parm_1s_comp(stream); + stream << ","; + print_des_reg(stream); break; case 0x0120: - sprintf (buffer, "CALLR "); - print_relative(); + util::stream_format(stream, "CALLR "); + print_relative(stream); flags = DASMFLAG_STEP_OVER; break; case 0x0140: - sprintf (buffer, "CALLA "); - print_long_parm(); + util::stream_format(stream, "CALLA "); + print_long_parm(stream); flags = DASMFLAG_STEP_OVER; break; case 0x0160: - sprintf (buffer, "EINT "); + util::stream_format(stream, "EINT "); break; case 0x0180: - sprintf (buffer, "DSJ "); - print_des_reg(); - strcat(buffer, ","); - print_relative(); + util::stream_format(stream, "DSJ "); + print_des_reg(stream); + stream << ","; + print_relative(stream); flags = DASMFLAG_STEP_OVER; break; case 0x01a0: - sprintf (buffer, "DSJEQ "); - print_des_reg(); - strcat(buffer, ","); - print_relative(); + util::stream_format(stream, "DSJEQ "); + print_des_reg(stream); + stream << ","; + print_relative(stream); flags = DASMFLAG_STEP_OVER; break; case 0x01c0: - sprintf (buffer, "DSJNE "); - print_des_reg(); - strcat(buffer, ","); - print_relative(); + util::stream_format(stream, "DSJNE "); + print_des_reg(stream); + stream << ","; + print_relative(stream); flags = DASMFLAG_STEP_OVER; break; case 0x01e0: - sprintf (buffer, "SETC "); + util::stream_format(stream, "SETC "); break; default: @@ -958,48 +931,48 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) { case 0x0000: if (is_34020) - sprintf (buffer, "PIXBLT L,M,L"); + util::stream_format(stream, "PIXBLT L,M,L"); else bad = 1; break; case 0x00e0: if (is_34020) - sprintf (buffer, "TFILL XY"); + util::stream_format(stream, "TFILL XY"); else bad = 1; break; case 0x0100: - sprintf (buffer, "PIXBLT L,L"); + util::stream_format(stream, "PIXBLT L,L"); break; case 0x0120: - sprintf (buffer, "PIXBLT L,XY"); + util::stream_format(stream, "PIXBLT L,XY"); break; case 0x0140: - sprintf (buffer, "PIXBLT XY,L"); + util::stream_format(stream, "PIXBLT XY,L"); break; case 0x0160: - sprintf (buffer, "PIXBLT XY,XY"); + util::stream_format(stream, "PIXBLT XY,XY"); break; case 0x0180: - sprintf (buffer, "PIXBLT B,L"); + util::stream_format(stream, "PIXBLT B,L"); break; case 0x01a0: - sprintf (buffer, "PIXBLT B,XY"); + util::stream_format(stream, "PIXBLT B,XY"); break; case 0x01c0: - sprintf (buffer, "FILL L"); + util::stream_format(stream, "FILL L"); break; case 0x01e0: - sprintf (buffer, "FILL XY"); + util::stream_format(stream, "FILL XY"); break; default: @@ -1012,15 +985,15 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x1200: if ((op & 0x03e0) != 0x0020) { - sprintf (buffer, "ADDK "); - print_constant_1_32(); - strcat(buffer, ","); + util::stream_format(stream, "ADDK "); + print_constant_1_32(stream); + stream << ","; } else { - sprintf (buffer, "INC "); + util::stream_format(stream, "INC "); } - print_des_reg(); + print_des_reg(stream); break; @@ -1029,89 +1002,89 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x1600: if ((op & 0x03e0) != 0x0020) { - sprintf (buffer, "SUBK "); - print_constant_1_32(); - strcat(buffer, ","); + util::stream_format(stream, "SUBK "); + print_constant_1_32(stream); + stream << ","; } else { - sprintf (buffer, "DEC "); + util::stream_format(stream, "DEC "); } - print_des_reg(); + print_des_reg(stream); break; case 0x1800: case 0x1a00: - sprintf (buffer, "MOVK "); - print_constant_1_32(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "MOVK "); + print_constant_1_32(stream); + stream << ","; + print_des_reg(stream); break; case 0x1c00: case 0x1e00: - sprintf (buffer, "BTST "); - print_constant_1s_comp(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "BTST "); + print_constant_1s_comp(stream); + stream << ","; + print_des_reg(stream); break; case 0x2000: case 0x2200: - sprintf (buffer, "SLA "); - print_constant(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "SLA "); + print_constant(stream); + stream << ","; + print_des_reg(stream); break; case 0x2400: case 0x2600: - sprintf (buffer, "SLL "); - print_constant(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "SLL "); + print_constant(stream); + stream << ","; + print_des_reg(stream); break; case 0x2800: case 0x2a00: - sprintf (buffer, "SRA "); - print_constant_2s_comp(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "SRA "); + print_constant_2s_comp(stream); + stream << ","; + print_des_reg(stream); break; case 0x2c00: case 0x2e00: - sprintf (buffer, "SRL "); - print_constant_2s_comp(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "SRL "); + print_constant_2s_comp(stream); + stream << ","; + print_des_reg(stream); break; case 0x3000: case 0x3200: - sprintf (buffer, "RL "); - print_constant(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "RL "); + print_constant(stream); + stream << ","; + print_des_reg(stream); break; case 0x3400: case 0x3600: if (is_34020) { - sprintf (buffer, "CMPK "); - print_constant_1_32(); - strcat(buffer, ","); - print_des_reg(); + util::stream_format(stream, "CMPK "); + print_constant_1_32(stream); + stream << ","; + print_des_reg(stream); } else bad = 1; @@ -1121,62 +1094,62 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x3a00: case 0x3c00: case 0x3e00: - sprintf (buffer, "DSJS "); - print_des_reg(); - strcat(buffer, ","); - print_relative_5bit(); + util::stream_format(stream, "DSJS "); + print_des_reg(stream); + stream << ","; + print_relative_5bit(stream); flags = DASMFLAG_STEP_OVER; break; case 0x4000: - sprintf (buffer, "ADD "); - print_src_des_reg(); + util::stream_format(stream, "ADD "); + print_src_des_reg(stream); break; case 0x4200: - sprintf (buffer, "ADDC "); - print_src_des_reg(); + util::stream_format(stream, "ADDC "); + print_src_des_reg(stream); break; case 0x4400: - sprintf (buffer, "SUB "); - print_src_des_reg(); + util::stream_format(stream, "SUB "); + print_src_des_reg(stream); break; case 0x4600: - sprintf (buffer, "SUBB "); - print_src_des_reg(); + util::stream_format(stream, "SUBB "); + print_src_des_reg(stream); break; case 0x4800: - sprintf (buffer, "CMP "); - print_src_des_reg(); + util::stream_format(stream, "CMP "); + print_src_des_reg(stream); break; case 0x4a00: - sprintf (buffer, "BTST "); - print_src_des_reg(); + util::stream_format(stream, "BTST "); + print_src_des_reg(stream); break; case 0x4c00: case 0x4e00: - sprintf (buffer, "MOVE "); + util::stream_format(stream, "MOVE "); if (!(op & 0x0200)) { - print_src_des_reg(); + print_src_des_reg(stream); } else { - print_src_reg(); - strcat(buffer, ","); + print_src_reg(stream); + stream << ","; if (rf == 'A') { @@ -1187,120 +1160,120 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) rf = 'A'; } - print_des_reg(); + print_des_reg(stream); } break; case 0x5000: - sprintf (buffer, "AND "); - print_src_des_reg(); + util::stream_format(stream, "AND "); + print_src_des_reg(stream); break; case 0x5200: - sprintf (buffer, "ANDN "); - print_src_des_reg(); + util::stream_format(stream, "ANDN "); + print_src_des_reg(stream); break; case 0x5400: - sprintf (buffer, "OR "); - print_src_des_reg(); + util::stream_format(stream, "OR "); + print_src_des_reg(stream); break; case 0x5600: if (rs != rd) { - sprintf (buffer, "XOR "); - print_src_des_reg(); + util::stream_format(stream, "XOR "); + print_src_des_reg(stream); } else { - sprintf (buffer, "CLR "); - print_des_reg(); + util::stream_format(stream, "CLR "); + print_des_reg(stream); } break; case 0x5800: - sprintf (buffer, "DIVS "); - print_src_des_reg(); + util::stream_format(stream, "DIVS "); + print_src_des_reg(stream); break; case 0x5a00: - sprintf (buffer, "DIVU "); - print_src_des_reg(); + util::stream_format(stream, "DIVU "); + print_src_des_reg(stream); break; case 0x5c00: - sprintf (buffer, "MPYS "); - print_src_des_reg(); + util::stream_format(stream, "MPYS "); + print_src_des_reg(stream); break; case 0x5e00: - sprintf (buffer, "MPYU "); - print_src_des_reg(); + util::stream_format(stream, "MPYU "); + print_src_des_reg(stream); break; case 0x6000: - sprintf (buffer, "SLA "); - print_src_des_reg(); + util::stream_format(stream, "SLA "); + print_src_des_reg(stream); break; case 0x6200: - sprintf (buffer, "SLL "); - print_src_des_reg(); + util::stream_format(stream, "SLL "); + print_src_des_reg(stream); break; case 0x6400: - sprintf (buffer, "SRA "); - print_src_des_reg(); + util::stream_format(stream, "SRA "); + print_src_des_reg(stream); break; case 0x6600: - sprintf (buffer, "SRL "); - print_src_des_reg(); + util::stream_format(stream, "SRL "); + print_src_des_reg(stream); break; case 0x6800: - sprintf (buffer, "RL "); - print_src_des_reg(); + util::stream_format(stream, "RL "); + print_src_des_reg(stream); break; case 0x6a00: - sprintf (buffer, "LMO "); - print_src_des_reg(); + util::stream_format(stream, "LMO "); + print_src_des_reg(stream); break; case 0x6c00: - sprintf (buffer, "MODS "); - print_src_des_reg(); + util::stream_format(stream, "MODS "); + print_src_des_reg(stream); break; case 0x6e00: - sprintf (buffer, "MODU "); - print_src_des_reg(); + util::stream_format(stream, "MODU "); + print_src_des_reg(stream); break; case 0x7a00: if (is_34020) { - sprintf (buffer, "RMO "); - print_src_des_reg(); + util::stream_format(stream, "RMO "); + print_src_des_reg(stream); } else bad = 1; @@ -1309,9 +1282,9 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x7e00: if (is_34020) { - sprintf (buffer, "SWAPF *"); - print_src_des_reg(); - strcat(buffer, ",0"); + util::stream_format(stream, "SWAPF *"); + print_src_des_reg(stream); + stream << ",0"; } else bad = 1; @@ -1320,193 +1293,193 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0x8000: case 0x8200: - sprintf (buffer, "MOVE "); - print_src_reg(); - strcat(buffer, ",*"); - print_des_reg(); - strcat(buffer, ","); - print_field(); + util::stream_format(stream, "MOVE "); + print_src_reg(stream); + stream << ",*"; + print_des_reg(stream); + stream << ","; + print_field(stream); break; case 0x8400: case 0x8600: - sprintf (buffer, "MOVE *"); - print_src_des_reg(); - strcat(buffer, ","); - print_field(); + util::stream_format(stream, "MOVE *"); + print_src_des_reg(stream); + stream << ","; + print_field(stream); break; case 0x8800: case 0x8a00: - sprintf (buffer, "MOVE *"); - print_src_reg(); - strcat(buffer, ",*"); - print_des_reg(); - strcat(buffer, ","); - print_field(); + util::stream_format(stream, "MOVE *"); + print_src_reg(stream); + stream << ",*"; + print_des_reg(stream); + stream << ","; + print_field(stream); break; case 0x8c00: - sprintf (buffer, "MOVB "); - print_src_reg(); - strcat(buffer, ",*"); - print_des_reg(); + util::stream_format(stream, "MOVB "); + print_src_reg(stream); + stream << ",*"; + print_des_reg(stream); break; case 0x8e00: - sprintf (buffer, "MOVB *"); - print_src_des_reg(); + util::stream_format(stream, "MOVB *"); + print_src_des_reg(stream); break; case 0x9000: case 0x9200: - sprintf (buffer, "MOVE "); - print_src_reg(); - strcat(buffer, ",*"); - print_des_reg(); - strcat(buffer, "+,"); - print_field(); + util::stream_format(stream, "MOVE "); + print_src_reg(stream); + stream << ",*"; + print_des_reg(stream); + stream << "+,"; + print_field(stream); break; case 0x9400: case 0x9600: - sprintf (buffer, "MOVE *"); - print_src_reg(); - strcat(buffer, "+,"); - print_des_reg(); - strcat(buffer, ","); - print_field(); + util::stream_format(stream, "MOVE *"); + print_src_reg(stream); + stream << "+,"; + print_des_reg(stream); + stream << ","; + print_field(stream); break; case 0x9800: case 0x9a00: - sprintf (buffer, "MOVE *"); - print_src_reg(); - strcat(buffer, "+,*"); - print_des_reg(); - strcat(buffer, "+,"); - print_field(); + util::stream_format(stream, "MOVE *"); + print_src_reg(stream); + stream << "+,*"; + print_des_reg(stream); + stream << "+,"; + print_field(stream); break; case 0x9c00: - sprintf (buffer, "MOVB *"); - print_src_reg(); - strcat(buffer, ",*"); - print_des_reg(); + util::stream_format(stream, "MOVB *"); + print_src_reg(stream); + stream << ",*"; + print_des_reg(stream); break; case 0xa000: case 0xa200: - sprintf (buffer, "MOVE "); - print_src_reg(); - strcat(buffer, ",-*"); - print_des_reg(); - strcat(buffer, ","); - print_field(); + util::stream_format(stream, "MOVE "); + print_src_reg(stream); + stream << ",-*"; + print_des_reg(stream); + stream << ","; + print_field(stream); break; case 0xa400: case 0xa600: - sprintf (buffer, "MOVE -*"); - print_src_des_reg(); - strcat(buffer, ","); - print_field(); + util::stream_format(stream, "MOVE -*"); + print_src_des_reg(stream); + stream << ","; + print_field(stream); break; case 0xa800: case 0xaa00: - sprintf (buffer, "MOVE -*"); - print_src_reg(); - strcat(buffer, ",-*"); - print_des_reg(); - strcat(buffer, ","); - print_field(); + util::stream_format(stream, "MOVE -*"); + print_src_reg(stream); + stream << ",-*"; + print_des_reg(stream); + stream << ","; + print_field(stream); break; case 0xac00: - sprintf (buffer, "MOVB "); - print_src_reg(); - strcat(buffer, ",*"); - print_des_reg(); - strcat(buffer, "("); - print_word_parm(); - strcat(buffer, ")"); + util::stream_format(stream, "MOVB "); + print_src_reg(stream); + stream << ",*"; + print_des_reg(stream); + stream << "("; + print_word_parm(stream); + stream << ")"; break; case 0xae00: - sprintf (buffer, "MOVB *"); - print_src_reg(); - strcat(buffer, "("); - print_word_parm(); - strcat(buffer, "),"); - print_des_reg(); + util::stream_format(stream, "MOVB *"); + print_src_reg(stream); + stream << "("; + print_word_parm(stream); + stream << "),"; + print_des_reg(stream); break; case 0xb000: case 0xb200: - sprintf (buffer, "MOVE "); - print_src_reg(); - strcat(buffer, ",*"); - print_des_reg(); - strcat(buffer, "("); - print_word_parm(); - strcat(buffer, "),"); - print_field(); + util::stream_format(stream, "MOVE "); + print_src_reg(stream); + stream << ",*"; + print_des_reg(stream); + stream << "("; + print_word_parm(stream); + stream << "),"; + print_field(stream); break; case 0xb400: case 0xb600: - sprintf (buffer, "MOVE *"); - print_src_reg(); - strcat(buffer, "("); - print_word_parm(); - strcat(buffer, "),"); - print_des_reg(); - strcat(buffer, ","); - print_field(); + util::stream_format(stream, "MOVE *"); + print_src_reg(stream); + stream << "("; + print_word_parm(stream); + stream << "),"; + print_des_reg(stream); + stream << ","; + print_field(stream); break; case 0xb800: case 0xba00: - sprintf (buffer, "MOVE *"); - print_src_reg(); - strcat(buffer, "("); - print_word_parm(); - strcat(buffer, "),*"); - print_des_reg(); - strcat(buffer, "("); - print_word_parm(); - strcat(buffer, "),"); - print_field(); + util::stream_format(stream, "MOVE *"); + print_src_reg(stream); + stream << "("; + print_word_parm(stream); + stream << "),*"; + print_des_reg(stream); + stream << "("; + print_word_parm(stream); + stream << "),"; + print_field(stream); break; case 0xbc00: - sprintf (buffer, "MOVB *"); - print_src_reg(); - strcat(buffer, "("); - print_word_parm(); - strcat(buffer, "),*"); - print_des_reg(); - strcat(buffer, "("); - print_word_parm(); - strcat(buffer, ")"); + util::stream_format(stream, "MOVB *"); + print_src_reg(stream); + stream << "("; + print_word_parm(stream); + stream << "),*"; + print_des_reg(stream); + stream << "("; + print_word_parm(stream); + stream << ")"; break; @@ -1520,42 +1493,42 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0xce00: if ((op & 0x00ff) == 0x80) { - sprintf (buffer, "JA"); + util::stream_format(stream, "JA"); } else { - sprintf (buffer, "JR"); + util::stream_format(stream, "JR"); } - print_condition_code(); - strcat (buffer, " "); + print_condition_code(stream); + stream << " "; switch (op & 0x00ff) { case 0x00: - print_relative(); + print_relative(stream); break; case 0x80: - print_long_parm(); + print_long_parm(stream); break; default: - print_relative_8bit(); + print_relative_8bit(stream); } break; case 0xd000: case 0xd200: - sprintf (buffer, "MOVE *"); - print_src_reg(); - strcat(buffer, "("); - print_word_parm(); - strcat(buffer, "),*"); - print_des_reg(); - strcat(buffer, "+,"); - print_field(); + util::stream_format(stream, "MOVE *"); + print_src_reg(stream); + stream << "("; + print_word_parm(stream); + stream << "),*"; + print_des_reg(stream); + stream << "+,"; + print_field(stream); break; @@ -1564,19 +1537,19 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) switch (subop) { case 0x0000: - sprintf (buffer, "MOVE @"); - print_long_parm(); - strcat(buffer, ",*"); - print_des_reg(); - strcat(buffer, "+,"); - print_field(); + util::stream_format(stream, "MOVE @"); + print_long_parm(stream); + stream << ",*"; + print_des_reg(stream); + stream << "+,"; + print_field(stream); break; case 0x0100: - sprintf (buffer, "EXGF "); - print_des_reg(); - strcat(buffer, ","); - print_field(); + util::stream_format(stream, "EXGF "); + print_des_reg(stream); + stream << ","; + print_field(stream); break; default: @@ -1589,7 +1562,7 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) { uint32_t x; PARAM_WORD(x); - sprintf(buffer, "CEXEC %d,%06X,%d", op & 1, ((x << 5) & 0x1fffe0) | ((op >> 1) & 0x1f), (x >> 13) & 7); + util::stream_format(stream, "CEXEC %d,%06X,%d", op & 1, ((x << 5) & 0x1fffe0) | ((op >> 1) & 0x1f), (x >> 13) & 7); } else bad = 1; @@ -1601,24 +1574,24 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) { case 0x0000: if (is_34020) - sprintf (buffer, "FLINE 0"); + util::stream_format(stream, "FLINE 0"); else bad = 1; break; case 0x0080: if (is_34020) - sprintf (buffer, "FLINE 1"); + util::stream_format(stream, "FLINE 1"); else bad = 1; break; case 0x0100: - sprintf (buffer, "LINE 0"); + util::stream_format(stream, "LINE 0"); break; case 0x0180: - sprintf (buffer, "LINE 1"); + util::stream_format(stream, "LINE 1"); break; default: @@ -1627,40 +1600,40 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) break; case 0xe000: - sprintf (buffer, "ADDXY "); - print_src_des_reg(); + util::stream_format(stream, "ADDXY "); + print_src_des_reg(stream); break; case 0xe200: - sprintf (buffer, "SUBXY "); - print_src_des_reg(); + util::stream_format(stream, "SUBXY "); + print_src_des_reg(stream); break; case 0xe400: - sprintf (buffer, "CMPXY "); - print_src_des_reg(); + util::stream_format(stream, "CMPXY "); + print_src_des_reg(stream); break; case 0xe600: - sprintf (buffer, "CPW "); - print_src_des_reg(); + util::stream_format(stream, "CPW "); + print_src_des_reg(stream); break; case 0xe800: - sprintf (buffer, "CVXYL "); - print_src_des_reg(); + util::stream_format(stream, "CVXYL "); + print_src_des_reg(stream); break; case 0xea00: if (is_34020) { - sprintf (buffer, "CVSXYL "); - print_src_des_reg(); + util::stream_format(stream, "CVSXYL "); + print_src_des_reg(stream); } else bad = 1; @@ -1668,68 +1641,68 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) case 0xec00: - sprintf (buffer, "MOVX "); - print_src_des_reg(); + util::stream_format(stream, "MOVX "); + print_src_des_reg(stream); break; case 0xee00: - sprintf (buffer, "MOVY "); - print_src_des_reg(); + util::stream_format(stream, "MOVY "); + print_src_des_reg(stream); break; case 0xf000: - sprintf (buffer, "PIXT "); - print_src_reg(); - strcat(buffer, ",*"); - print_des_reg(); - strcat(buffer, ",XY"); + util::stream_format(stream, "PIXT "); + print_src_reg(stream); + stream << ",*"; + print_des_reg(stream); + stream << ",XY"; break; case 0xf200: - sprintf (buffer, "PIXT *"); - print_src_reg(); - strcat(buffer, ",XY,"); - print_des_reg(); + util::stream_format(stream, "PIXT *"); + print_src_reg(stream); + stream << ",XY,"; + print_des_reg(stream); break; case 0xf400: - sprintf (buffer, "PIXT *"); - print_src_reg(); - strcat(buffer, ",XY,*"); - print_des_reg(); - strcat(buffer, ",XY"); + util::stream_format(stream, "PIXT *"); + print_src_reg(stream); + stream << ",XY,*"; + print_des_reg(stream); + stream << ",XY"; break; case 0xf600: - sprintf (buffer, "DRAV "); - print_src_des_reg(); + util::stream_format(stream, "DRAV "); + print_src_des_reg(stream); break; case 0xf800: - sprintf (buffer, "PIXT "); - print_src_reg(); - strcat(buffer, ",*"); - print_des_reg(); + util::stream_format(stream, "PIXT "); + print_src_reg(stream); + stream << ",*"; + print_des_reg(stream); break; case 0xfa00: - sprintf (buffer, "PIXT *"); - print_src_des_reg(); + util::stream_format(stream, "PIXT *"); + print_src_des_reg(stream); break; case 0xfc00: - sprintf (buffer, "PIXT *"); - print_src_reg(); - strcat(buffer, ",*"); - print_des_reg(); + util::stream_format(stream, "PIXT *"); + print_src_reg(stream); + stream << ",*"; + print_des_reg(stream); break; default: @@ -1738,18 +1711,27 @@ static unsigned Dasm340x0(char *buff, uint32_t pc, int is_34020) if (bad) { - sprintf (buffer, "DW %04Xh", op & 0xffff); + util::stream_format(stream, "DW %04Xh", op & 0xffff); } return (_pc - __pc) | flags | DASMFLAG_SUPPORTED; } +static unsigned Dasm340x0(char *buff, uint32_t pc, bool is_34020) +{ + std::ostringstream stream; + unsigned result = Dasm340x0(stream, pc, is_34020); + std::string stream_str = stream.str(); + strcpy(buff, stream_str.c_str()); + return result; +} + CPU_DISASSEMBLE( tms34010 ) { rombase = oprom; rambase = opram; pcbase = pc; - return Dasm340x0(buffer, pc, 0); + return Dasm340x0(buffer, pc, false); } CPU_DISASSEMBLE( tms34020 ) @@ -1757,5 +1739,5 @@ CPU_DISASSEMBLE( tms34020 ) rombase = oprom; rambase = opram; pcbase = pc; - return Dasm340x0(buffer, pc, 1); + return Dasm340x0(buffer, pc, true); } |