summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Nathan Woods <npwoods@mess.org>2016-11-03 06:36:30 -0400
committer Nathan Woods <npwoods@mess.org>2016-11-03 06:36:30 -0400
commit87672cf2d3b79c9df05e46d7c42e893537aa259f (patch)
tree8528c37b0e02f5e45dfbe5da26644121aa872ed0
parent3ee5564b78b88035fe02c9b515550e62bb4ea58f (diff)
Changed the sc61860 disassembler to use 'std::ostream &' internally
-rw-r--r--src/devices/cpu/sc61860/scdasm.cpp34
1 files changed, 22 insertions, 12 deletions
diff --git a/src/devices/cpu/sc61860/scdasm.cpp b/src/devices/cpu/sc61860/scdasm.cpp
index c49ad9c77b4..fce5b8cd608 100644
--- a/src/devices/cpu/sc61860/scdasm.cpp
+++ b/src/devices/cpu/sc61860/scdasm.cpp
@@ -152,7 +152,7 @@ static const struct { const char *mnemonic; Adr adr; } table[]={
{ nullptr }, { nullptr }, { nullptr }, { nullptr }, { nullptr }, { nullptr }, { nullptr }, { nullptr },
};
-CPU_DISASSEMBLE( sc61860 )
+static offs_t internal_disasm_sc61860(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
{
const uint8_t *base_oprom = oprom;
int oper=*(oprom++);
@@ -161,42 +161,42 @@ CPU_DISASSEMBLE( sc61860 )
switch(oper&0xc0) {
case 0x80:
- sprintf(buffer,"%-6s%.2x",table[oper&0x80].mnemonic, oper&0x3f);
+ util::stream_format(stream,"%-6s%02x",table[oper&0x80].mnemonic, oper&0x3f);
break;
default:
switch(oper&0xe0) {
case 0xe0:
- sprintf(buffer,"%-6s%.4x",table[oper&0xe0].mnemonic,
+ util::stream_format(stream,"%-6s%04x",table[oper&0xe0].mnemonic,
*(oprom++)|((oper&0x1f)<<8));
break;
default:
switch (table[oper].adr) {
- case Ill: sprintf(buffer,"?%.2x",oper);break;
- case Imp: sprintf(buffer,"%s",table[oper].mnemonic); break;
- case Imm: sprintf(buffer,"%-6s%.2x",table[oper].mnemonic, *(oprom++)); break;
+ case Ill: util::stream_format(stream,"?%02x",oper);break;
+ case Imp: util::stream_format(stream,"%s",table[oper].mnemonic); break;
+ case Imm: util::stream_format(stream,"%-6s%02x",table[oper].mnemonic, *(oprom++)); break;
case ImmW:
adr=(oprom[0]<<8)|oprom[1];oprom+=2;
- sprintf(buffer,"%-6s%.4x",table[oper].mnemonic, adr);
+ util::stream_format(stream,"%-6s%04x",table[oper].mnemonic, adr);
break;
case Abs:
adr=(oprom[0]<<8)|oprom[1];oprom+=2;
- sprintf(buffer,"%-6s%.4x",table[oper].mnemonic, adr);
+ util::stream_format(stream,"%-6s%04x",table[oper].mnemonic, adr);
break;
case RelM:
adr=pc-*(oprom++);
- sprintf(buffer,"%-6s%.4x",table[oper].mnemonic, adr&0xffff);
+ util::stream_format(stream,"%-6s%04x",table[oper].mnemonic, adr&0xffff);
break;
case RelP:
adr=pc+*(oprom++);
- sprintf(buffer,"%-6s%.4x",table[oper].mnemonic, adr&0xffff);
+ util::stream_format(stream,"%-6s%04x",table[oper].mnemonic, adr&0xffff);
break;
case Ptc:
t=*(oprom++);
adr=(oprom[0]<<8)|oprom[1];oprom+=2;
- sprintf(buffer,"%-6s%.2x,%.4x",table[oper].mnemonic,t, adr);
+ util::stream_format(stream,"%-6s%02x,%04x",table[oper].mnemonic,t, adr);
break;
case Etc:
- sprintf(buffer,"%-6s",table[oper].mnemonic);
+ util::stream_format(stream,"%-6s",table[oper].mnemonic);
/*H imm, abs */
/* abs */
break;
@@ -208,3 +208,13 @@ CPU_DISASSEMBLE( sc61860 )
}
return oprom - base_oprom;
}
+
+
+CPU_DISASSEMBLE(sc61860)
+{
+ std::ostringstream stream;
+ offs_t result = internal_disasm_sc61860(device, stream, pc, oprom, opram, options);
+ std::string stream_str = stream.str();
+ strcpy(buffer, stream_str.c_str());
+ return result;
+}