blob: 6b2978974ebbd2293228aebaa1e89c513658b089 (
plain) (
tree)
|
|
/****************************************************************************
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__ */
|