diff options
Diffstat (limited to 'trunk/src/emu/debugger.h')
-rw-r--r-- | trunk/src/emu/debugger.h | 140 |
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__ */ |