From 1a65879da193bdf85eabc42f35a6a7f657086cc4 Mon Sep 17 00:00:00 2001 From: Happy Date: Sun, 19 Mar 2017 22:26:37 -0600 Subject: [PATCH] Make debugger 'dasm' command able to traverse virtual spaces with unmapped holes. Previously, 'dasm' would enter an infinite loop if it hit an unmapped pc, continuing to grow the output file until the program was killed. --- src/emu/debug/debugcmd.cpp | 43 ++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/src/emu/debug/debugcmd.cpp b/src/emu/debug/debugcmd.cpp index 426d5a86670..ce017a27277 100644 --- a/src/emu/debug/debugcmd.cpp +++ b/src/emu/debug/debugcmd.cpp @@ -2460,29 +2460,36 @@ void debugger_commands::execute_dasm(int ref, const std::vector &pa tempaddr = pcbyte; if (space->device().memory().translate(space->spacenum(), TRANSLATE_FETCH_DEBUG, tempaddr)) { - u8 opbuf[64], argbuf[64]; - - /* fetch the bytes up to the maximum */ - for (numbytes = 0; numbytes < maxbytes; numbytes++) { - opbuf[numbytes] = m_cpu.read_opcode(*decrypted_space, pcbyte + numbytes, 1); - argbuf[numbytes] = m_cpu.read_opcode(*space, pcbyte + numbytes, 1); + u8 opbuf[64], argbuf[64]; + + /* fetch the bytes up to the maximum */ + for (numbytes = 0; numbytes < maxbytes; numbytes++) + { + opbuf[numbytes] = m_cpu.read_opcode(*decrypted_space, pcbyte + numbytes, 1); + argbuf[numbytes] = m_cpu.read_opcode(*space, pcbyte + numbytes, 1); + } + + /* disassemble the result */ + i += numbytes = dasmintf->disassemble(disasm, offset + i, opbuf, argbuf) & DASMFLAG_LENGTHMASK; } - /* disassemble the result */ - i += numbytes = dasmintf->disassemble(disasm, offset + i, opbuf, argbuf) & DASMFLAG_LENGTHMASK; + /* print the bytes */ + if (bytes) + { + auto const startdex = output.tellp(); + numbytes = space->address_to_byte(numbytes); + for (j = 0; j < numbytes; j += minbytes) + stream_format(output, "%0*X ", minbytes * 2, m_cpu.read_opcode(*decrypted_space, pcbyte + j, minbytes)); + if ((output.tellp() - startdex) < byteswidth) + stream_format(output, "%*s", byteswidth - (output.tellp() - startdex), ""); + stream_format(output, " "); + } } - - /* print the bytes */ - if (bytes) + else { - auto const startdex = output.tellp(); - numbytes = space->address_to_byte(numbytes); - for (j = 0; j < numbytes; j += minbytes) - stream_format(output, "%0*X ", minbytes * 2, m_cpu.read_opcode(*decrypted_space, pcbyte + j, minbytes)); - if ((output.tellp() - startdex) < byteswidth) - stream_format(output, "%*s", byteswidth - (output.tellp() - startdex), ""); - stream_format(output, " "); + disasm << ""; + i += minbytes; } /* add the disassembly */