summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu
diff options
context:
space:
mode:
author Vas Crabb <cuavas@users.noreply.github.com>2016-11-19 08:23:11 +1100
committer GitHub <noreply@github.com>2016-11-19 08:23:11 +1100
commit197feb0ecddd660ae62ef2547e1887087f122048 (patch)
treee917df4d488a3656c7b6eb52a02af44622301eaf /src/devices/cpu
parent0185687046a8ac3d0367b9c0c8b6ea3cf990f178 (diff)
parentd955f8481462e66c1d12b5d6cb1712c8a069ca7f (diff)
Merge pull request #1736 from npwoods/dasmstream_tms34010
Changed the tms34010 disassembler to use 'std::ostream &' internally
Diffstat (limited to 'src/devices/cpu')
-rw-r--r--src/devices/cpu/tms34010/34010dsm.cpp1156
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);
}