Changed the minx disassembler to use 'std::ostream &' internally

This commit is contained in:
Nathan Woods 2016-10-30 12:13:02 -04:00
parent 894c6320a0
commit 951c6fcedb

View File

@ -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;
}