summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Nathan Woods <npwoods@mess.org>2016-11-15 20:13:39 -0500
committer Nathan Woods <npwoods@mess.org>2016-11-15 20:13:39 -0500
commit8baa4b23aee495614824220c1ca81e46f19ae517 (patch)
treea8b2ce91b8e9d145976636adf063f9fc71ac28aa /src
parent0ca7ac3b2a1a61e4ea7c65564a7bd90561fb13d1 (diff)
Changed the lh5801 disassembler to use 'std::ostream &' internally
Diffstat (limited to 'src')
-rw-r--r--src/devices/cpu/lh5801/5801dasm.cpp52
1 files changed, 31 insertions, 21 deletions
diff --git a/src/devices/cpu/lh5801/5801dasm.cpp b/src/devices/cpu/lh5801/5801dasm.cpp
index c6583b2cadd..86cb6bf6e06 100644
--- a/src/devices/cpu/lh5801/5801dasm.cpp
+++ b/src/devices/cpu/lh5801/5801dasm.cpp
@@ -663,7 +663,7 @@ const Entry Entry::table_fd[0x100]={
} // anonymous namespace
-CPU_DISASSEMBLE( lh5801 )
+static offs_t internal_disasm_lh5801(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
{
int pos = 0;
int oper;
@@ -680,70 +680,80 @@ CPU_DISASSEMBLE( lh5801 )
}
switch (entry->ins) {
case Entry::ILL:
- sprintf(buffer,"%s %.2x", entry->ins_name(), oper);break;
+ util::stream_format(stream, "%s %02x", entry->ins_name(), oper);break;
case Entry::ILL2:
- sprintf(buffer,"%s fd%.2x", entry->ins_name(), oper);break;
+ util::stream_format(stream, "%s fd%02x", entry->ins_name(), oper);break;
default:
switch(entry->adr) {
case Entry::Imp:
- sprintf(buffer,"%s", entry->ins_name());break;
+ util::stream_format(stream, "%s", entry->ins_name());break;
case Entry::Reg:
- sprintf(buffer,"%s %s", entry->ins_name(),entry->reg_name());break;
+ util::stream_format(stream, "%s %s", entry->ins_name(),entry->reg_name());break;
case Entry::RegImm:
- sprintf(buffer,"%s %s,%.2x", entry->ins_name(),
+ util::stream_format(stream, "%s %s,%02x", entry->ins_name(),
entry->reg_name(), oprom[pos++]);
break;
case Entry::RegImm16:
absolut=oprom[pos++]<<8;
absolut|=oprom[pos++];
- sprintf(buffer,"%s %s,%.4x", entry->ins_name(),entry->reg_name(),absolut );
+ util::stream_format(stream, "%s %s,%04x", entry->ins_name(),entry->reg_name(),absolut );
break;
case Entry::Vec:
- sprintf(buffer,"%s (ff%.2x)", entry->ins_name(),oprom[pos++]);break;
+ util::stream_format(stream, "%s (ff%02x)", entry->ins_name(),oprom[pos++]);break;
case Entry::Vej:
- sprintf(buffer,"%s (ff%.2x)", entry->ins_name(), oper);break;
+ util::stream_format(stream, "%s (ff%02x)", entry->ins_name(), oper);break;
case Entry::Imm:
- sprintf(buffer,"%s %.2x", entry->ins_name(),oprom[pos++]);break;
+ util::stream_format(stream, "%s %02x", entry->ins_name(),oprom[pos++]);break;
case Entry::Imm16:
absolut=oprom[pos++]<<8;
absolut|=oprom[pos++];
- sprintf(buffer,"%s %.4x", entry->ins_name(),absolut );break;
+ util::stream_format(stream, "%s %04x", entry->ins_name(),absolut);break;
case Entry::RelP:
temp=oprom[pos++];
- sprintf(buffer,"%s %.4x", entry->ins_name(),pc+pos+temp );break;
+ util::stream_format(stream, "%s %04x", entry->ins_name(),pc+pos+temp);break;
case Entry::RelM:
temp=oprom[pos++];
- sprintf(buffer,"%s %.4x", entry->ins_name(),pc+pos-temp );break;
+ util::stream_format(stream, "%s %04x", entry->ins_name(),pc+pos-temp);break;
case Entry::Abs:
absolut=oprom[pos++]<<8;
absolut|=oprom[pos++];
- sprintf(buffer,"%s (%.4x)", entry->ins_name(),absolut );break;
+ util::stream_format(stream, "%s (%04x)", entry->ins_name(),absolut);break;
case Entry::ME1Abs:
absolut=oprom[pos++]<<8;
absolut|=oprom[pos++];
- sprintf(buffer,"%s #(%.4x)", entry->ins_name(),absolut );break;
+ util::stream_format(stream, "%s #(%04x)", entry->ins_name(),absolut);break;
case Entry::AbsImm:
absolut=oprom[pos++]<<8;
absolut|=oprom[pos++];
- sprintf(buffer,"%s (%.4x),%.2x", entry->ins_name(),absolut,
+ util::stream_format(stream, "%s (%04x),%02x", entry->ins_name(),absolut,
oprom[pos++]);break;
case Entry::ME1AbsImm:
absolut=oprom[pos++]<<8;
absolut|=oprom[pos++];
- sprintf(buffer,"%s #(%.4x),%.2x", entry->ins_name(),absolut,
+ util::stream_format(stream, "%s #(%04x),%02x", entry->ins_name(),absolut,
oprom[pos++]);break;
case Entry::ME0:
- sprintf(buffer,"%s (%s)", entry->ins_name(),entry->reg_name() );break;
+ util::stream_format(stream, "%s (%s)", entry->ins_name(),entry->reg_name());break;
case Entry::ME0Imm:
- sprintf(buffer,"%s (%s),%.2x", entry->ins_name(),entry->reg_name(),oprom[pos++] );
+ util::stream_format(stream, "%s (%s),%02x", entry->ins_name(),entry->reg_name(),oprom[pos++]);
break;
case Entry::ME1:
- sprintf(buffer,"%s #(%s)", entry->ins_name(),entry->reg_name() );break;
+ util::stream_format(stream, "%s #(%s)", entry->ins_name(),entry->reg_name());break;
case Entry::ME1Imm:
- sprintf(buffer,"%s #(%s),%.2x", entry->ins_name(),entry->reg_name(),oprom[pos++] );
+ util::stream_format(stream, "%s #(%s),%02x", entry->ins_name(),entry->reg_name(),oprom[pos++]);
break;
}
}
return pos;
}
+
+
+CPU_DISASSEMBLE(lh5801)
+{
+ std::ostringstream stream;
+ offs_t result = internal_disasm_lh5801(device, stream, pc, oprom, opram, options);
+ std::string stream_str = stream.str();
+ strcpy(buffer, stream_str.c_str());
+ return result;
+}