diff --git a/src/devices/cpu/minx/minxd.cpp b/src/devices/cpu/minx/minxd.cpp index 73001e9ec90..8005d1ecc9f 100644 --- a/src/devices/cpu/minx/minxd.cpp +++ b/src/devices/cpu/minx/minxd.cpp @@ -349,85 +349,84 @@ static const minxdasm mnemonic_cf[256] = { }; #define HANDLE_ARGUMENT \ -case R_A: dst += sprintf( dst, "%cA", fill ); break; \ -case R_B: dst += sprintf( dst, "%cB", fill ); break; \ -case R_L: dst += sprintf( dst, "%cL", fill ); break; \ -case R_H: dst += sprintf( dst, "%cH", fill ); break; \ -case R_N: dst += sprintf( dst, "%cN", fill ); break; \ -case R_F: dst += sprintf( dst, "%cF", fill ); break; \ -case R_SP: dst += sprintf( dst, "%cSP", fill ); break; \ -case R_BA: dst += sprintf( dst, "%cBA", fill ); break; \ -case R_HL: dst += sprintf( dst, "%cHL", fill ); break; \ -case R_X: dst += sprintf( dst, "%cX", fill ); break; \ -case R_Y: dst += sprintf( dst, "%cY", fill ); break; \ -case R_U: dst += sprintf( dst, "%cU", fill ); break; \ -case R_V: dst += sprintf( dst, "%cV", fill ); break; \ -case R_I: dst += sprintf( dst, "%cI", fill ); break; \ -case R_XI: dst += sprintf( dst, "%cXI", fill ); break; \ -case R_YI: dst += sprintf( dst, "%cYI", fill ); break; \ -case R_PC: dst += sprintf( dst, "%cPC", fill ); break; \ +case R_A: util::stream_format(stream, "%cA", fill); break; \ +case R_B: util::stream_format(stream, "%cB", fill); break; \ +case R_L: util::stream_format(stream, "%cL", fill); break; \ +case R_H: util::stream_format(stream, "%cH", fill); break; \ +case R_N: util::stream_format(stream, "%cN", fill); break; \ +case R_F: util::stream_format(stream, "%cF", fill); break; \ +case R_SP: util::stream_format(stream, "%cSP", fill); break; \ +case R_BA: util::stream_format(stream, "%cBA", fill); break; \ +case R_HL: util::stream_format(stream, "%cHL", fill); break; \ +case R_X: util::stream_format(stream, "%cX", fill); break; \ +case R_Y: util::stream_format(stream, "%cY", fill); break; \ +case R_U: util::stream_format(stream, "%cU", fill); break; \ +case R_V: util::stream_format(stream, "%cV", fill); break; \ +case R_I: util::stream_format(stream, "%cI", fill); break; \ +case R_XI: util::stream_format(stream, "%cXI", fill); break; \ +case R_YI: util::stream_format(stream, "%cYI", fill); break; \ +case R_PC: util::stream_format(stream, "%cPC", fill); break; \ case I_8: /* 8 bit immediate */ \ ea = oprom[pos++]; \ - dst += sprintf( dst, "%c$%02X", fill, ea ); \ + util::stream_format(stream, "%c$%02X", fill, ea); \ break; \ case I_16: /* 16 bit immediate */ \ ea = oprom[pos++]; \ ea += oprom[pos++] << 8; \ - dst += sprintf( dst, "%c$%04X", fill, ea ); \ + util::stream_format(stream, "%c$%04X", fill, ea); \ break; \ case D_8: /* PC + 8 bit displacement (signed) */ \ ofs8 = oprom[pos++]; \ - dst += sprintf( dst, "%c$%04X", fill, pc + pos - 1 + ofs8 ); \ + util::stream_format(stream, "%c$%04X", fill, pc + pos - 1 + ofs8); \ break; \ case D_16: /* PC + 16 bit displacement */ \ ea = oprom[pos++]; \ ea += oprom[pos++] << 8; \ ea = ea - 1; \ - dst += sprintf( dst, "%c$%04X", fill, pc + pos + ea ); \ + util::stream_format(stream, "%c$%04X", fill, pc + pos + ea); \ break; \ case S_8: /* SP + 8 bit displacement (signed) */ \ ea = oprom[pos++]; \ - dst += sprintf( dst, "%cSP+$%02X", fill, ea ); \ + util::stream_format(stream, "%cSP+$%02X", fill, ea); \ break; \ -case M_IHL: dst += sprintf( dst, "%c[I+HL]", fill ); break; \ +case M_IHL: util::stream_format(stream, "%c[I+HL]", fill); break; \ case M_N8: /* [I+N+ofs8] */ \ ea = oprom[pos++]; \ - dst += sprintf( dst, "%c[I+N+$%02X]", fill, ea ); \ + util::stream_format(stream, "%c[I+N+$%02X]", fill, ea); \ break; \ case M_I16: /* [I+ofs16] */ \ ea = oprom[pos++]; \ ea += oprom[pos++] << 8; \ - dst += sprintf( dst, "%c[I+$%04X]", fill, ea ); \ + util::stream_format(stream, "%c[I+$%04X]", fill, ea); \ break; \ -case M_X: dst += sprintf( dst, "%c[X]", fill ); break; \ -case M_Y: dst += sprintf( dst, "%c[Y]", fill ); break; \ +case M_X: util::stream_format(stream, "%c[X]", fill); break; \ +case M_Y: util::stream_format(stream, "%c[Y]", fill); break; \ case M_X8: /* [X + 8 bit displacement (signed)] */ \ ea = oprom[pos++]; \ - dst += sprintf( dst, "%c[X+$%02X]", fill, ea ); \ + util::stream_format(stream, "%c[X+$%02X]", fill, ea); \ break; \ case M_Y8: /* [Y + 8 bit displacement (signed)] */ \ ea = oprom[pos++]; \ - dst += sprintf( dst, "%c[Y+$%02X]", fill, ea ); \ + util::stream_format(stream, "%c[Y+$%02X]", fill, ea); \ break; \ -case M_XL: dst += sprintf( dst, "%c[X+L]", fill ); break; \ -case M_YL: dst += sprintf( dst, "%c[Y+L]", fill ); break; \ +case M_XL: util::stream_format(stream, "%c[X+L]", fill); break; \ +case M_YL: util::stream_format(stream, "%c[Y+L]", fill); break; \ case M_16: /* [16bit] */ \ ea = oprom[pos++]; \ ea += oprom[pos++] << 8; \ - dst += sprintf( dst, "%c[$%04X]", fill, ea ); \ + util::stream_format(stream, "%c[$%04X]", fill, ea); \ break; \ -case M_HL: dst += sprintf( dst, "%c[HL]", fill ); break; \ -case OP: dst += sprintf( dst, "%c$%02X", fill, op ); break; \ -case OP1: dst += sprintf( dst, "%c$%02X", fill, op1 ); break; +case M_HL: util::stream_format(stream, "%c[HL]", fill); break; \ +case OP: util::stream_format(stream, "%c$%02X", fill, op); break; \ +case OP1: util::stream_format(stream, "%c$%02X", fill, op1); break; -CPU_DISASSEMBLE( minx ) +static offs_t internal_disasm_minx(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options) { const minxdasm *instr; uint8_t op, op1; int8_t ofs8; uint16_t ea; int pos = 0; - char *dst = buffer; op1 = op = oprom[pos++]; @@ -445,7 +444,7 @@ CPU_DISASSEMBLE( minx ) break; } - dst += sprintf( dst, "%-6s", s_mnemonic[ instr->mnemonic ] ); + util::stream_format(stream, "%-6s", s_mnemonic[ instr->mnemonic ]); if ( instr->argument1 ) { char fill = ' '; @@ -463,3 +462,13 @@ CPU_DISASSEMBLE( minx ) } return pos | s_flags[instr->mnemonic] | DASMFLAG_SUPPORTED; } + + +CPU_DISASSEMBLE(minx) +{ + std::ostringstream stream; + offs_t result = internal_disasm_minx(device, stream, pc, oprom, opram, options); + std::string stream_str = stream.str(); + strcpy(buffer, stream_str.c_str()); + return result; +}