Eliminated 'device_disasm_interface::disassemble(std::string &buffer, ...'

This commit is contained in:
Nathan Woods 2016-11-20 18:27:25 -05:00
parent 92d3c78696
commit 932f69d6e9
5 changed files with 20 additions and 24 deletions

View File

@ -2401,11 +2401,11 @@ void debugger_commands::execute_dasm(int ref, int params, const char *param[])
/* now write the data out */ /* now write the data out */
util::ovectorstream output; util::ovectorstream output;
util::ovectorstream disasm;
output.reserve(512); output.reserve(512);
for (u64 i = 0; i < length; ) for (u64 i = 0; i < length; )
{ {
int pcbyte = space->address_to_byte(offset + i) & space->bytemask(); int pcbyte = space->address_to_byte(offset + i) & space->bytemask();
std::string disasm;
const char *comment; const char *comment;
offs_t tempaddr; offs_t tempaddr;
int numbytes = 0; int numbytes = 0;
@ -2429,6 +2429,8 @@ void debugger_commands::execute_dasm(int ref, int params, const char *param[])
} }
/* disassemble the result */ /* disassemble the result */
disasm.clear();
disasm.seekp(0);
i += numbytes = dasmintf->disassemble(disasm, offset + i, opbuf, argbuf) & DASMFLAG_LENGTHMASK; i += numbytes = dasmintf->disassemble(disasm, offset + i, opbuf, argbuf) & DASMFLAG_LENGTHMASK;
} }
@ -2445,7 +2447,8 @@ void debugger_commands::execute_dasm(int ref, int params, const char *param[])
} }
/* add the disassembly */ /* add the disassembly */
stream_format(output, "%s", disasm); disasm.put('\0');
stream_format(output, "%s", &disasm.vec()[0]);
/* attempt to add the comment */ /* attempt to add the comment */
comment = space->device().debug()->comment_text(tempaddr); comment = space->device().debug()->comment_text(tempaddr);
@ -2604,10 +2607,11 @@ void debugger_commands::execute_history(int ref, int params, const char *param[]
argbuf[numbytes] = m_cpu.read_opcode(*space, pcbyte + numbytes, 1); argbuf[numbytes] = m_cpu.read_opcode(*space, pcbyte + numbytes, 1);
} }
std::string buffer; util::ovectorstream buffer;
dasmintf->disassemble(buffer, pc, opbuf, argbuf); dasmintf->disassemble(buffer, pc, opbuf, argbuf);
buffer.put('\0');
m_console.printf("%0*X: %s\n", space->logaddrchars(), pc, buffer.c_str()); m_console.printf("%0*X: %s\n", space->logaddrchars(), pc, &buffer.vec()[0]);
} }
} }

View File

@ -2627,7 +2627,7 @@ u32 device_debug::compute_opcode_crc32(offs_t pc) const
if (m_disasm != nullptr) if (m_disasm != nullptr)
{ {
// disassemble to our buffer // disassemble to our buffer
std::string diasmbuf; std::ostringstream diasmbuf;
numbytes = m_disasm->disassemble(diasmbuf, pc, opbuf, argbuf) & DASMFLAG_LENGTHMASK; numbytes = m_disasm->disassemble(diasmbuf, pc, opbuf, argbuf) & DASMFLAG_LENGTHMASK;
} }
@ -3026,7 +3026,9 @@ u32 device_debug::dasm_wrapped(std::string &buffer, offs_t pc)
} }
// disassemble to our buffer // disassemble to our buffer
uint32_t result = m_disasm->disassemble(buffer, pc, opbuf, argbuf); std::ostringstream stream;
uint32_t result = m_disasm->disassemble(stream, pc, opbuf, argbuf);
buffer = stream.str();
return result; return result;
} }

View File

@ -271,7 +271,7 @@ offs_t debug_view_disasm::find_pc_backwards(offs_t targetpc, int numinstrs)
instlen = 1; instlen = 1;
if (source.m_space.device().memory().translate(source.m_space.spacenum(), TRANSLATE_FETCH, physpcbyte)) if (source.m_space.device().memory().translate(source.m_space.spacenum(), TRANSLATE_FETCH, physpcbyte))
{ {
std::string dasmbuffer; std::ostringstream dasmbuffer;
instlen = source.m_disasmintf->disassemble(dasmbuffer, scanpc, &opbuf[1000 + scanpcbyte - targetpcbyte], &argbuf[1000 + scanpcbyte - targetpcbyte]) & DASMFLAG_LENGTHMASK; instlen = source.m_disasmintf->disassemble(dasmbuffer, scanpc, &opbuf[1000 + scanpcbyte - targetpcbyte], &argbuf[1000 + scanpcbyte - targetpcbyte]) & DASMFLAG_LENGTHMASK;
} }
@ -335,6 +335,7 @@ void debug_view_disasm::generate_bytes(offs_t pcbyte, int numbytes, int minbytes
bool debug_view_disasm::recompute(offs_t pc, int startline, int lines) bool debug_view_disasm::recompute(offs_t pc, int startline, int lines)
{ {
util::ovectorstream buffer;
bool changed = false; bool changed = false;
const debug_view_disasm_source &source = downcast<const debug_view_disasm_source &>(*m_source); const debug_view_disasm_source &source = downcast<const debug_view_disasm_source &>(*m_source);
const int char_num = source.m_space.is_octal() ? 3 : 2; const int char_num = source.m_space.is_octal() ? 3 : 2;
@ -392,7 +393,8 @@ bool debug_view_disasm::recompute(offs_t pc, int startline, int lines)
source.m_space.logaddrchars()/2*char_num, source.m_space.byte_to_address(pcbyte)); source.m_space.logaddrchars()/2*char_num, source.m_space.byte_to_address(pcbyte));
// make sure we can translate the address, and then disassemble the result // make sure we can translate the address, and then disassemble the result
std::string buffer; buffer.clear();
buffer.seekp(0);
int numbytes = 0; int numbytes = 0;
offs_t physpcbyte = pcbyte; offs_t physpcbyte = pcbyte;
if (source.m_space.device().memory().translate(source.m_space.spacenum(), TRANSLATE_FETCH_DEBUG, physpcbyte)) if (source.m_space.device().memory().translate(source.m_space.spacenum(), TRANSLATE_FETCH_DEBUG, physpcbyte))
@ -410,10 +412,12 @@ bool debug_view_disasm::recompute(offs_t pc, int startline, int lines)
pc += numbytes = source.m_disasmintf->disassemble(buffer, pc & source.m_space.logaddrmask(), opbuf, argbuf) & DASMFLAG_LENGTHMASK; pc += numbytes = source.m_disasmintf->disassemble(buffer, pc & source.m_space.logaddrmask(), opbuf, argbuf) & DASMFLAG_LENGTHMASK;
} }
else else
buffer = "<unmapped>"; buffer << "<unmapped>";
buffer.put('\0');
// append the disassembly to the buffer // append the disassembly to the buffer
util::stream_format(m_dasm.seekp(base + m_divider1 + 1), "%2$-*1$.*1$s ", m_dasm_width, buffer); util::stream_format(m_dasm.seekp(base + m_divider1 + 1), "%2$-*1$.*1$s ", m_dasm_width, &buffer.vec()[0]);
// output the right column // output the right column
if (m_right_column == DASM_RIGHTCOL_RAW || m_right_column == DASM_RIGHTCOL_ENCRYPTED) if (m_right_column == DASM_RIGHTCOL_RAW || m_right_column == DASM_RIGHTCOL_ENCRYPTED)

View File

@ -90,16 +90,3 @@ offs_t device_disasm_interface::disassemble(std::ostream &stream, offs_t pc, con
return result; return result;
} }
//-------------------------------------------------
// disassemble - interface for disassembly
//-------------------------------------------------
offs_t device_disasm_interface::disassemble(std::string &buffer, offs_t pc, const u8 *oprom, const u8 *opram, uint32_t options)
{
std::stringstream stream;
offs_t result = disassemble(stream, pc, oprom, opram, options);
buffer = stream.str();
return result;
}

View File

@ -74,7 +74,6 @@ public:
// interface for disassembly // interface for disassembly
offs_t disassemble(std::ostream &stream, offs_t pc, const u8 *oprom, const u8 *opram, u32 options = 0); offs_t disassemble(std::ostream &stream, offs_t pc, const u8 *oprom, const u8 *opram, u32 options = 0);
offs_t disassemble(std::string &buffer, offs_t pc, const u8 *oprom, const u8 *opram, u32 options = 0);
protected: protected:
// required operation overrides // required operation overrides