summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/emu/debug/dvdisasm.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/emu/debug/dvdisasm.h')
-rw-r--r--trunk/src/emu/debug/dvdisasm.h146
1 files changed, 146 insertions, 0 deletions
diff --git a/trunk/src/emu/debug/dvdisasm.h b/trunk/src/emu/debug/dvdisasm.h
new file mode 100644
index 00000000000..a1cd81b008b
--- /dev/null
+++ b/trunk/src/emu/debug/dvdisasm.h
@@ -0,0 +1,146 @@
+/*********************************************************************
+
+ dvdisasm.h
+
+ Disassembly debugger view.
+
+****************************************************************************
+
+ Copyright Aaron Giles
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name 'MAME' nor the names of its contributors may be
+ used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+***************************************************************************/
+
+#ifndef __DVDISASM_H__
+#define __DVDISASM_H__
+
+#include "debugvw.h"
+
+
+//**************************************************************************
+// CONSTANTS
+//**************************************************************************
+
+// selections for what goes into the right-hand column
+enum disasm_right_column
+{
+ DASM_RIGHTCOL_NONE,
+ DASM_RIGHTCOL_RAW,
+ DASM_RIGHTCOL_ENCRYPTED,
+ DASM_RIGHTCOL_COMMENTS
+};
+
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// a disassembly view_source
+class debug_view_disasm_source : public debug_view_source
+{
+ friend class debug_view_disasm;
+
+ // construction/destruction
+ debug_view_disasm_source(const char *name, device_t &device);
+
+public:
+ // getters
+ device_t &device() const { return m_device; }
+ address_space *space() const { return m_space; }
+
+private:
+ // internal state
+ device_t & m_device; // underlying device
+ device_disasm_interface *m_disasmintf; // disassembly interface
+ address_space * m_space; // address space to display
+};
+
+
+// debug view for disassembly
+class debug_view_disasm : public debug_view
+{
+ friend resource_pool_object<debug_view_disasm>::~resource_pool_object();
+ friend class debug_view_manager;
+
+ // construction/destruction
+ debug_view_disasm(running_machine &machine, debug_view_osd_update_func osdupdate, void *osdprivate);
+ virtual ~debug_view_disasm();
+
+public:
+ // getters
+ const char *expression() const { return m_expression.string(); }
+ disasm_right_column right_column() const { return m_right_column; }
+ UINT32 backward_steps() const { return m_backwards_steps; }
+ UINT32 disasm_width() const { return m_dasm_width; }
+ offs_t selected_address();
+
+ // setters
+ void set_expression(const char *expression);
+ void set_right_column(disasm_right_column contents);
+ void set_backward_steps(UINT32 steps);
+ void set_disasm_width(UINT32 width);
+ void set_selected_address(offs_t address);
+
+protected:
+ // view overrides
+ virtual void view_update();
+ virtual void view_notify(debug_view_notification type);
+ virtual void view_char(int chval);
+
+private:
+ // internal helpers
+ void enumerate_sources();
+ offs_t find_pc_backwards(offs_t targetpc, int numinstrs);
+ void generate_bytes(offs_t pcbyte, int numbytes, int minbytes, char *string, int maxchars, bool encrypted);
+ bool recompute(offs_t pc, int startline, int lines);
+
+ // internal state
+ disasm_right_column m_right_column; // right column contents
+ UINT32 m_backwards_steps; // number of backwards steps
+ UINT32 m_dasm_width; // width of the disassembly area
+ UINT8 * m_last_direct_raw; // last direct raw value
+ UINT8 * m_last_direct_decrypted;// last direct decrypted value
+ UINT32 m_last_change_count; // last comment change count
+ offs_t m_last_pcbyte; // last PC byte value
+ int m_divider1, m_divider2; // left and right divider columns
+ int m_divider3; // comment divider column
+ debug_view_expression m_expression; // expression-related information
+ debug_view_xy m_allocated; // allocated rows/columns
+ offs_t * m_byteaddress; // addresses of the instructions
+ char * m_dasm; // disassembled instructions
+
+ // constants
+ static const int DEFAULT_DASM_LINES = 1000;
+ static const int DEFAULT_DASM_WIDTH = 50;
+ static const int DASM_MAX_BYTES = 16;
+};
+
+
+#endif