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

This commit is contained in:
Nathan Woods 2016-11-15 06:54:55 -05:00
parent 0f060802b5
commit 76b57669cf

View File

@ -144,7 +144,7 @@ static const unsigned char op6280[512]=
/*****************************************************************************
* Disassemble a single command and return the number of bytes it uses.
*****************************************************************************/
CPU_DISASSEMBLE( h6280 )
static offs_t internal_disasm_h6280(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
{
uint32_t flags = 0;
int PC, OP, opc, arg;
@ -165,90 +165,100 @@ CPU_DISASSEMBLE( h6280 )
switch(arg)
{
case _acc:
sprintf(buffer,"%-5sa", token[opc]);
util::stream_format(stream, "%-5sa", token[opc]);
break;
case _imp:
sprintf(buffer,"%s", token[opc]);
util::stream_format(stream, "%s", token[opc]);
break;
case _rel:
sprintf(buffer,"%-5s$%04X", token[opc], (PC + 1 + (signed char)RDBYTE(PC)) & 0xffff);
util::stream_format(stream, "%-5s$%04X", token[opc], (PC + 1 + (signed char)RDBYTE(PC)) & 0xffff);
PC+=1;
break;
case _imm:
sprintf(buffer,"%-5s#$%02X", token[opc], RDBYTE(PC));
util::stream_format(stream, "%-5s#$%02X", token[opc], RDBYTE(PC));
PC+=1;
break;
case _zpg:
sprintf(buffer,"%-5s$%02X", token[opc], RDBYTE(PC));
util::stream_format(stream, "%-5s$%02X", token[opc], RDBYTE(PC));
PC+=1;
break;
case _zpx:
sprintf(buffer,"%-5s$%02X,x", token[opc], RDBYTE(PC));
util::stream_format(stream, "%-5s$%02X,x", token[opc], RDBYTE(PC));
PC+=1;
break;
case _zpy:
sprintf(buffer,"%-5s$%02X,y", token[opc], RDBYTE(PC));
util::stream_format(stream, "%-5s$%02X,y", token[opc], RDBYTE(PC));
PC+=1;
break;
case _idx:
sprintf(buffer,"%-5s($%02X,x)", token[opc], RDBYTE(PC));
util::stream_format(stream, "%-5s($%02X,x)", token[opc], RDBYTE(PC));
PC+=1;
break;
case _idy:
sprintf(buffer,"%-5s($%02X),y", token[opc], RDBYTE(PC));
util::stream_format(stream, "%-5s($%02X),y", token[opc], RDBYTE(PC));
PC+=1;
break;
case _zpi:
sprintf(buffer,"%-5s($%02X)", token[opc], RDBYTE(PC));
util::stream_format(stream, "%-5s($%02X)", token[opc], RDBYTE(PC));
PC+=1;
break;
case _abs:
sprintf(buffer,"%-5s$%04X", token[opc], RDWORD(PC));
util::stream_format(stream, "%-5s$%04X", token[opc], RDWORD(PC));
PC+=2;
break;
case _abx:
sprintf(buffer,"%-5s$%04X,x", token[opc], RDWORD(PC));
util::stream_format(stream, "%-5s$%04X,x", token[opc], RDWORD(PC));
PC+=2;
break;
case _aby:
sprintf(buffer,"%-5s$%04X,y", token[opc], RDWORD(PC));
util::stream_format(stream, "%-5s$%04X,y", token[opc], RDWORD(PC));
PC+=2;
break;
case _ind:
sprintf(buffer,"%-5s($%04X)", token[opc], RDWORD(PC));
util::stream_format(stream, "%-5s($%04X)", token[opc], RDWORD(PC));
PC+=2;
break;
case _iax:
sprintf(buffer,"%-5s($%04X),X", token[opc], RDWORD(PC));
util::stream_format(stream, "%-5s($%04X),X", token[opc], RDWORD(PC));
PC+=2;
break;
case _blk:
sprintf(buffer,"%-5s$%04X $%04X $%04X", token[opc], RDWORD(PC), RDWORD(PC+2), RDWORD(PC+4));
util::stream_format(stream, "%-5s$%04X $%04X $%04X", token[opc], RDWORD(PC), RDWORD(PC+2), RDWORD(PC+4));
PC+=6;
break;
case _zrl:
sprintf(buffer,"%-5s$%02X $%04X", token[opc], RDBYTE(PC), (PC + 2 + (signed char)RDBYTE(PC+1)) & 0xffff);
util::stream_format(stream, "%-5s$%02X $%04X", token[opc], RDBYTE(PC), (PC + 2 + (signed char)RDBYTE(PC+1)) & 0xffff);
PC+=2;
break;
case _imz:
sprintf(buffer,"%-5s#$%02X $%02X", token[opc], RDBYTE(PC), RDBYTE(PC+1));
util::stream_format(stream, "%-5s#$%02X $%02X", token[opc], RDBYTE(PC), RDBYTE(PC+1));
PC+=2;
break;
case _izx:
sprintf(buffer,"%-5s#$%02X $%02X,x", token[opc], RDBYTE(PC), RDBYTE(PC+1));
util::stream_format(stream, "%-5s#$%02X $%02X,x", token[opc], RDBYTE(PC), RDBYTE(PC+1));
PC+=2;
break;
case _ima:
sprintf(buffer,"%-5s#$%02X $%04X", token[opc], RDBYTE(PC), RDWORD(PC+1));
util::stream_format(stream, "%-5s#$%02X $%04X", token[opc], RDBYTE(PC), RDWORD(PC+1));
PC+=3;
break;
case _imx:
sprintf(buffer,"%-5s#$%02X $%04X,x", token[opc], RDBYTE(PC), RDWORD(PC+1));
util::stream_format(stream, "%-5s#$%02X $%04X,x", token[opc], RDBYTE(PC), RDWORD(PC+1));
PC+=3;
break;
default:
sprintf(buffer,"%-5s$%02X", token[opc], OP >> 1);
util::stream_format(stream, "%-5s$%02X", token[opc], OP >> 1);
}
return (PC - pc) | flags | DASMFLAG_SUPPORTED;
}
CPU_DISASSEMBLE(h6280)
{
std::ostringstream stream;
offs_t result = internal_disasm_h6280(device, stream, pc, oprom, opram, options);
std::string stream_str = stream.str();
strcpy(buffer, stream_str.c_str());
return result;
}