mame/src/emu/debugger.h
2009-03-12 16:54:49 +00:00

143 lines
4.3 KiB
C

/****************************************************************************
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 "mame.h"
#include "cpuexec.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(const device_config *device, offs_t curpc)
{
if ((device->machine->debug_flags & DEBUG_FLAG_CALL_HOOK) != 0)
debug_cpu_instruction_hook(device, curpc);
}
/*-------------------------------------------------
debugger_exception_hook - CPU cores call this
anytime an exception is generated
-------------------------------------------------*/
INLINE void debugger_exception_hook(const device_config *device, int exception)
{
if ((device->machine->debug_flags & DEBUG_FLAG_ENABLED) != 0)
debug_cpu_exception_hook(device, 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(const device_config *device, attotime endtime)
{
if ((device->machine->debug_flags & DEBUG_FLAG_ENABLED) != 0)
debug_cpu_start_hook(device, 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(const device_config *device)
{
if ((device->machine->debug_flags & DEBUG_FLAG_ENABLED) != 0)
debug_cpu_stop_hook(device);
}
/*-------------------------------------------------
debugger_interrupt_hook - the CPU execution
system calls this hook when an interrupt is
acknowledged
-------------------------------------------------*/
INLINE void debugger_interrupt_hook(const device_config *device, int irqline)
{
if ((device->machine->debug_flags & DEBUG_FLAG_ENABLED) != 0)
debug_cpu_interrupt_hook(device, 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_halt_on_next_instruction(debug_cpu_get_visible_cpu(machine), "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__ */