mirror of
https://github.com/holub/mame
synced 2025-06-06 21:03:47 +03:00
Changed the m6805 disassembler to use 'std::ostream &' internally
This commit is contained in:
parent
705dde329e
commit
ff2a3fd4e7
@ -160,11 +160,12 @@ static const char *const opcode_strings[0x0100] =
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CPU_DISASSEMBLE( m6805 )
|
static offs_t internal_disasm_m6805(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
|
||||||
{
|
{
|
||||||
int code, bit;
|
int code, bit;
|
||||||
uint16_t ea;
|
uint16_t ea;
|
||||||
uint32_t flags = 0;
|
uint32_t flags = 0;
|
||||||
|
offs_t result;
|
||||||
|
|
||||||
code = oprom[0];
|
code = oprom[0];
|
||||||
|
|
||||||
@ -173,42 +174,63 @@ CPU_DISASSEMBLE( m6805 )
|
|||||||
else if (disasm[code][0] == rts || disasm[code][0] == rti)
|
else if (disasm[code][0] == rts || disasm[code][0] == rti)
|
||||||
flags = DASMFLAG_STEP_OUT;
|
flags = DASMFLAG_STEP_OUT;
|
||||||
|
|
||||||
buffer += sprintf(buffer, "%-6s", op_name_str[disasm[code][0]]);
|
util::stream_format(stream, "%-6s", op_name_str[disasm[code][0]]);
|
||||||
|
|
||||||
switch( disasm[code][1] )
|
switch( disasm[code][1] )
|
||||||
{
|
{
|
||||||
case _btr: /* bit test and relative branch */
|
case _btr: /* bit test and relative branch */
|
||||||
bit = (code >> 1) & 7;
|
bit = (code >> 1) & 7;
|
||||||
sprintf (buffer, "%d,$%02X,$%03X", bit, opram[1], pc + 3 + (int8_t)opram[2]);
|
util::stream_format(stream, "%d,$%02X,$%03X", bit, opram[1], pc + 3 + (int8_t)opram[2]);
|
||||||
return 3 | flags | DASMFLAG_SUPPORTED;
|
result = 3 | flags | DASMFLAG_SUPPORTED;
|
||||||
|
break;
|
||||||
case _bit: /* bit test */
|
case _bit: /* bit test */
|
||||||
bit = (code >> 1) & 7;
|
bit = (code >> 1) & 7;
|
||||||
sprintf (buffer, "%d,$%03X", bit, opram[1]);
|
util::stream_format(stream, "%d,$%03X", bit, opram[1]);
|
||||||
return 2 | flags | DASMFLAG_SUPPORTED;
|
result = 2 | flags | DASMFLAG_SUPPORTED;
|
||||||
|
break;
|
||||||
case _rel: /* relative */
|
case _rel: /* relative */
|
||||||
sprintf (buffer, "$%03X", pc + 2 + (int8_t)opram[1]);
|
util::stream_format(stream, "$%03X", pc + 2 + (int8_t)opram[1]);
|
||||||
return 2 | flags | DASMFLAG_SUPPORTED;
|
result = 2 | flags | DASMFLAG_SUPPORTED;
|
||||||
|
break;
|
||||||
case _imm: /* immediate */
|
case _imm: /* immediate */
|
||||||
sprintf (buffer, "#$%02X", opram[1]);
|
util::stream_format(stream, "#$%02X", opram[1]);
|
||||||
return 2 | flags | DASMFLAG_SUPPORTED;
|
result = 2 | flags | DASMFLAG_SUPPORTED;
|
||||||
|
break;
|
||||||
case _dir: /* direct (zero page address) */
|
case _dir: /* direct (zero page address) */
|
||||||
sprintf (buffer, "$%02X", opram[1]);
|
util::stream_format(stream, "$%02X", opram[1]);
|
||||||
return 2 | flags | DASMFLAG_SUPPORTED;
|
result = 2 | flags | DASMFLAG_SUPPORTED;
|
||||||
|
break;
|
||||||
case _ext: /* extended (16 bit address) */
|
case _ext: /* extended (16 bit address) */
|
||||||
ea = (opram[1] << 8) + opram[2];
|
ea = (opram[1] << 8) + opram[2];
|
||||||
sprintf (buffer, "$%04X", ea);
|
util::stream_format(stream, "$%04X", ea);
|
||||||
return 3 | flags | DASMFLAG_SUPPORTED;
|
result = 3 | flags | DASMFLAG_SUPPORTED;
|
||||||
|
break;
|
||||||
case _idx: /* indexed */
|
case _idx: /* indexed */
|
||||||
sprintf (buffer, "(x)");
|
util::stream_format(stream, "(x)");
|
||||||
return 1 | flags | DASMFLAG_SUPPORTED;
|
result = 1 | flags | DASMFLAG_SUPPORTED;
|
||||||
|
break;
|
||||||
case _ix1: /* indexed + byte (zero page) */
|
case _ix1: /* indexed + byte (zero page) */
|
||||||
sprintf (buffer, "(x+$%02X)", opram[1]);
|
util::stream_format(stream, "(x+$%02X)", opram[1]);
|
||||||
return 2 | flags | DASMFLAG_SUPPORTED;
|
result = 2 | flags | DASMFLAG_SUPPORTED;
|
||||||
|
break;
|
||||||
case _ix2: /* indexed + word (16 bit address) */
|
case _ix2: /* indexed + word (16 bit address) */
|
||||||
ea = (opram[1] << 8) + opram[2];
|
ea = (opram[1] << 8) + opram[2];
|
||||||
sprintf (buffer, "(x+$%04X)", ea);
|
util::stream_format(stream, "(x+$%04X)", ea);
|
||||||
return 3 | flags | DASMFLAG_SUPPORTED;
|
result = 3 | flags | DASMFLAG_SUPPORTED;
|
||||||
|
break;
|
||||||
default: /* implicit */
|
default: /* implicit */
|
||||||
return 1 | flags | DASMFLAG_SUPPORTED;
|
result = 1 | flags | DASMFLAG_SUPPORTED;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CPU_DISASSEMBLE(m6805)
|
||||||
|
{
|
||||||
|
std::ostringstream stream;
|
||||||
|
offs_t result = internal_disasm_m6805(device, stream, pc, oprom, opram, options);
|
||||||
|
std::string stream_str = stream.str();
|
||||||
|
strcpy(buffer, stream_str.c_str());
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user