summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu
diff options
context:
space:
mode:
author Happy <Happy-yappH@users.noreply.github.com>2017-03-19 22:26:37 -0600
committer Happy <Happy-yappH@users.noreply.github.com>2017-03-19 22:26:37 -0600
commit1a65879da193bdf85eabc42f35a6a7f657086cc4 (patch)
tree8ec67a853c311b383a1e725b782daa1b6719add2 /src/emu
parent5b5ba04f8b556babe2376e4ce70c7c1c0552e469 (diff)
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.
Diffstat (limited to 'src/emu')
-rw-r--r--src/emu/debug/debugcmd.cpp43
1 files 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<std::string> &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 << "<unmapped>";
+ i += minbytes;
}
/* add the disassembly */