summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/debugger.cpp
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2015-11-08 12:56:12 +0100
committer Miodrag Milanovic <mmicko@gmail.com>2015-11-08 12:56:12 +0100
commit7c19aac60e12d6f5ea301bdb34d7826a01e0b06f (patch)
treef310d86aa2c6bfc19d115307dedde4eb0cd52dad /src/emu/debugger.cpp
parenta57b46ae933badd7441ce1644711dbb851e2b504 (diff)
Rename *.c -> *.cpp in our source (nw)
Diffstat (limited to 'src/emu/debugger.cpp')
-rw-r--r--src/emu/debugger.cpp141
1 files changed, 141 insertions, 0 deletions
diff --git a/src/emu/debugger.cpp b/src/emu/debugger.cpp
new file mode 100644
index 00000000000..9ad47970b0b
--- /dev/null
+++ b/src/emu/debugger.cpp
@@ -0,0 +1,141 @@
+// license:BSD-3-Clause
+// copyright-holders:Nicola Salmoria, Aaron Giles
+/*********************************************************************
+
+ debugger.c
+
+ Front-end debugger interfaces.
+*********************************************************************/
+
+#include "emu.h"
+#include "debugger.h"
+#include "osdepend.h"
+#include "debug/debugcpu.h"
+#include "debug/debugcmd.h"
+#include "debug/debugcon.h"
+#include "debug/express.h"
+#include "debug/debugvw.h"
+#include <ctype.h>
+
+
+
+/***************************************************************************
+ TYPE DEFINITIONS
+***************************************************************************/
+
+struct machine_entry
+{
+ machine_entry * next;
+ running_machine * machine;
+};
+
+
+
+/***************************************************************************
+ GLOBAL VARIABLES
+***************************************************************************/
+
+static machine_entry *machine_list;
+static int atexit_registered;
+
+
+
+/***************************************************************************
+ FUNCTION PROTOTYPES
+***************************************************************************/
+
+static void debugger_exit(running_machine &machine);
+
+
+
+/***************************************************************************
+ CENTRAL INITIALIZATION POINT
+***************************************************************************/
+
+/*-------------------------------------------------
+ debugger_init - start up all subsections
+-------------------------------------------------*/
+
+void debugger_init(running_machine &machine)
+{
+ /* only if debugging is enabled */
+ if (machine.debug_flags & DEBUG_FLAG_ENABLED)
+ {
+ machine_entry *entry;
+
+ /* initialize the submodules */
+ machine.m_debug_view.reset(global_alloc(debug_view_manager(machine)));
+ debug_cpu_init(machine);
+ debug_command_init(machine);
+ debug_console_init(machine);
+
+ /* allocate a new entry for our global list */
+ machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(debugger_exit), &machine));
+ entry = global_alloc(machine_entry);
+ entry->next = machine_list;
+ entry->machine = &machine;
+ machine_list = entry;
+
+ /* register an atexit handler if we haven't yet */
+ if (!atexit_registered)
+ atexit(debugger_flush_all_traces_on_abnormal_exit);
+ atexit_registered = TRUE;
+
+ /* listen in on the errorlog */
+ machine.add_logerror_callback(debug_errorlog_write_line);
+
+ /* initialize osd debugger features */
+ machine.osd().init_debugger();
+ }
+}
+
+
+/*-------------------------------------------------
+ debugger_refresh_display - redraw the current
+ video display
+-------------------------------------------------*/
+
+void debugger_refresh_display(running_machine &machine)
+{
+ machine.video().frame_update(true);
+}
+
+
+/*-------------------------------------------------
+ debugger_exit - remove ourself from the
+ global list of active machines for cleanup
+-------------------------------------------------*/
+
+static void debugger_exit(running_machine &machine)
+{
+ machine_entry **entryptr;
+
+ /* remove this machine from the list; it came down cleanly */
+ for (entryptr = &machine_list; *entryptr != NULL; entryptr = &(*entryptr)->next)
+ if ((*entryptr)->machine == &machine)
+ {
+ machine_entry *deleteme = *entryptr;
+ *entryptr = deleteme->next;
+ global_free(deleteme);
+ break;
+ }
+}
+
+
+/*-------------------------------------------------
+ debugger_flush_all_traces_on_abnormal_exit -
+ flush any traces in the event of an aborted
+ execution
+-------------------------------------------------*/
+
+void debugger_flush_all_traces_on_abnormal_exit(void)
+{
+ /* clear out the machine list and flush traces on each one */
+ while (machine_list != NULL)
+ {
+ machine_entry *deleteme = machine_list;
+ debug_cpu_flush_traces(*deleteme->machine);
+ machine_list = deleteme->next;
+ global_free(deleteme);
+ }
+}