summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/emu/debugger.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/emu/debugger.h')
-rw-r--r--trunk/src/emu/debugger.h140
1 files changed, 140 insertions, 0 deletions
diff --git a/trunk/src/emu/debugger.h b/trunk/src/emu/debugger.h
new file mode 100644
index 00000000000..6b2978974eb
--- /dev/null
+++ b/trunk/src/emu/debugger.h
@@ -0,0 +1,140 @@
+/****************************************************************************
+
+ debugger.h
+
+ General debugging interfaces
+
+ Copyright Nicola Salmoria and the MAME Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+****************************************************************************/
+
+#pragma once
+
+#ifndef __DEBUGGER_H__
+#define __DEBUGGER_H__
+
+#include "debug/debugcpu.h"
+
+
+/***************************************************************************
+ FUNCTION PROTOTYPES
+***************************************************************************/
+
+/* ----- core debugger functions ----- */
+
+/* initialize the debugger */
+void debugger_init(running_machine &machine);
+
+/* redraw the current video display */
+void debugger_refresh_display(running_machine &machine);
+
+/* OSD can call this to safely flush all traces in the event of a crash */
+void debugger_flush_all_traces_on_abnormal_exit(void);
+
+
+
+/***************************************************************************
+ CPU CORE INLINE FUNCTIONS
+***************************************************************************/
+
+/*-------------------------------------------------
+ debugger_instruction_hook - CPU cores call
+ this once per instruction from CPU cores
+-------------------------------------------------*/
+
+INLINE void debugger_instruction_hook(device_t *device, offs_t curpc)
+{
+ if ((device->machine().debug_flags & DEBUG_FLAG_CALL_HOOK) != 0)
+ device->debug()->instruction_hook(curpc);
+}
+
+
+/*-------------------------------------------------
+ debugger_exception_hook - CPU cores call this
+ anytime an exception is generated
+-------------------------------------------------*/
+
+INLINE void debugger_exception_hook(device_t *device, int exception)
+{
+ if ((device->machine().debug_flags & DEBUG_FLAG_ENABLED) != 0)
+ device->debug()->exception_hook(exception);
+}
+
+
+
+/***************************************************************************
+ CPU EXECUTION SYSTEM INLINE FUNCTIONS
+***************************************************************************/
+
+/*-------------------------------------------------
+ debugger_start_cpu_hook - the CPU execution
+ system calls this hook before beginning
+ execution for the given CPU
+-------------------------------------------------*/
+
+INLINE void debugger_start_cpu_hook(device_t *device, attotime endtime)
+{
+ if ((device->machine().debug_flags & DEBUG_FLAG_ENABLED) != 0)
+ device->debug()->start_hook(endtime);
+}
+
+
+/*-------------------------------------------------
+ debugger_stop_cpu_hook - the CPU execution
+ system calls this hook when ending execution
+ for the given CPU
+-------------------------------------------------*/
+
+INLINE void debugger_stop_cpu_hook(device_t *device)
+{
+ if ((device->machine().debug_flags & DEBUG_FLAG_ENABLED) != 0)
+ device->debug()->stop_hook();
+}
+
+
+/*-------------------------------------------------
+ debugger_interrupt_hook - the CPU execution
+ system calls this hook when an interrupt is
+ acknowledged
+-------------------------------------------------*/
+
+INLINE void debugger_interrupt_hook(device_t *device, int irqline)
+{
+ if ((device->machine().debug_flags & DEBUG_FLAG_ENABLED) != 0)
+ device->debug()->interrupt_hook(irqline);
+}
+
+
+
+/***************************************************************************
+ GENERAL INLINE FUNCTIONS
+***************************************************************************/
+
+/*-------------------------------------------------
+ debugger_break - stop in the debugger at the
+ next opportunity
+-------------------------------------------------*/
+
+INLINE void debugger_break(running_machine &machine)
+{
+ if ((machine.debug_flags & DEBUG_FLAG_ENABLED) != 0)
+ debug_cpu_get_visible_cpu(machine)->debug()->halt_on_next_instruction("Internal breakpoint\n");
+}
+
+
+/*-------------------------------------------------
+ debugger_within_instruction_hook - call this
+ to determine if the debugger is currently
+ halted within the instruction hook
+-------------------------------------------------*/
+
+INLINE int debugger_within_instruction_hook(running_machine &machine)
+{
+ if ((machine.debug_flags & DEBUG_FLAG_ENABLED) != 0)
+ return debug_cpu_within_instruction_hook(machine);
+ return FALSE;
+}
+
+
+#endif /* __DEBUGGER_H__ */