/****************************************************************************
*
*			Realmode X86 Emulator Library
*
*		Copyright (C) 1991-2004 SciTech Software, Inc.
*		     Copyright (C) David Mosberger-Tang
*		       Copyright (C) 1999 Egbert Eich
*
*  ========================================================================
*
*  Permission to use, copy, modify, distribute, and sell this software and
*  its documentation for any purpose is hereby granted without fee,
*  provided that the above copyright notice appear in all copies and that
*  both that copyright notice and this permission notice appear in
*  supporting documentation, and that the name of the authors not be used
*  in advertising or publicity pertaining to distribution of the software
*  without specific, written prior permission.	The authors makes no
*  representations about the suitability of this software for any purpose.
*  It is provided "as is" without express or implied warranty.
*
*  THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
*  INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
*  EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
*  CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
*  USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
*  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
*  PERFORMANCE OF THIS SOFTWARE.
*
*  ========================================================================
*
* Language:	ANSI C
* Environment:	Any
* Developer:	Kendall Bennett
*
* Description:	Header file for debug definitions.
*
****************************************************************************/

#ifndef __X86EMU_DEBUG_H
#define __X86EMU_DEBUG_H

/*---------------------- Macros and type definitions ----------------------*/

/* checks to be enabled for "runtime" */

#define CHECK_IP_FETCH_F		0x1
#define CHECK_SP_ACCESS_F		0x2
#define CHECK_MEM_ACCESS_F		0x4	/*using regular linear pointer */
#define CHECK_DATA_ACCESS_F		0x8	/*using segment:offset */

#ifdef DEBUG
# define CHECK_IP_FETCH()		(M.x86.check & CHECK_IP_FETCH_F)
# define CHECK_SP_ACCESS()		(M.x86.check & CHECK_SP_ACCESS_F)
# define CHECK_MEM_ACCESS()		(M.x86.check & CHECK_MEM_ACCESS_F)
# define CHECK_DATA_ACCESS()		(M.x86.check & CHECK_DATA_ACCESS_F)
#else
# define CHECK_IP_FETCH()
# define CHECK_SP_ACCESS()
# define CHECK_MEM_ACCESS()
# define CHECK_DATA_ACCESS()
#endif

#ifdef DEBUG
# define DEBUG_INSTRUMENT()	(M.x86.debug & DEBUG_INSTRUMENT_F)
# define DEBUG_DECODE()		(M.x86.debug & DEBUG_DECODE_F)
# define DEBUG_TRACE()		(M.x86.debug & DEBUG_TRACE_F)
# define DEBUG_STEP()		(M.x86.debug & DEBUG_STEP_F)
# define DEBUG_DISASSEMBLE()	(M.x86.debug & DEBUG_DISASSEMBLE_F)
# define DEBUG_BREAK()		(M.x86.debug & DEBUG_BREAK_F)
# define DEBUG_SVC()		(M.x86.debug & DEBUG_SVC_F)
# define DEBUG_SAVE_IP_CS()	(M.x86.debug & DEBUG_SAVE_CS_IP)

# define DEBUG_FS()		(M.x86.debug & DEBUG_FS_F)
# define DEBUG_PROC()		(M.x86.debug & DEBUG_PROC_F)
# define DEBUG_SYSINT()		(M.x86.debug & DEBUG_SYSINT_F)
# define DEBUG_TRACECALL()	(M.x86.debug & DEBUG_TRACECALL_F)
# define DEBUG_TRACECALLREGS()	(M.x86.debug & DEBUG_TRACECALL_REGS_F)
# define DEBUG_SYS()		(M.x86.debug & DEBUG_SYS_F)
# define DEBUG_MEM_TRACE()	(M.x86.debug & DEBUG_MEM_TRACE_F)
# define DEBUG_IO_TRACE()	(M.x86.debug & DEBUG_IO_TRACE_F)
# define DEBUG_DECODE_NOPRINT() (M.x86.debug & DEBUG_DECODE_NOPRINT_F)
#else
# define DEBUG_INSTRUMENT()	0
# define DEBUG_DECODE()		0
# define DEBUG_TRACE()		0
# define DEBUG_STEP()		0
# define DEBUG_DISASSEMBLE()	0
# define DEBUG_BREAK()		0
# define DEBUG_SVC()		0
# define DEBUG_SAVE_IP_CS()	0
# define DEBUG_FS()		0
# define DEBUG_PROC()		0
# define DEBUG_SYSINT()		0
# define DEBUG_TRACECALL()	0
# define DEBUG_TRACECALLREGS()	0
# define DEBUG_SYS()		0
# define DEBUG_MEM_TRACE()	0
# define DEBUG_IO_TRACE()	0
# define DEBUG_DECODE_NOPRINT() 0
#endif

#ifdef DEBUG

# define DECODE_PRINTF(x)	if (DEBUG_DECODE()) \
				    x86emu_decode_printf(x)
# define DECODE_PRINTF2(x,y)	if (DEBUG_DECODE()) \
				    x86emu_decode_printf2(x,y)

/*
 * The following allow us to look at the bytes of an instruction.  The
 * first INCR_INSTRN_LEN, is called everytime bytes are consumed in
 * the decoding process.  The SAVE_IP_CS is called initially when the
 * major opcode of the instruction is accessed.
 */
#define INC_DECODED_INST_LEN(x)			    \
    if (DEBUG_DECODE())				    \
	x86emu_inc_decoded_inst_len(x)

#define SAVE_IP_CS(x,y)						\
    if (DEBUG_DECODE() | DEBUG_TRACECALL() | DEBUG_BREAK() \
	      | DEBUG_IO_TRACE() | DEBUG_SAVE_IP_CS()) { \
	M.x86.saved_cs = x;					\
	M.x86.saved_ip = y;					\
    }
#else
# define INC_DECODED_INST_LEN(x)
# define DECODE_PRINTF(x)
# define DECODE_PRINTF2(x,y)
# define SAVE_IP_CS(x,y)
#endif

#ifdef DEBUG
#define TRACE_REGS()					    \
    if (DEBUG_DISASSEMBLE()) {				    \
	x86emu_just_disassemble();			    \
	goto EndOfTheInstructionProcedure;		    \
    }							    \
    if (DEBUG_TRACE() || DEBUG_DECODE()) X86EMU_trace_regs()
#else
# define TRACE_REGS()
#endif

#ifdef DEBUG
# define SINGLE_STEP()	    if (DEBUG_STEP()) x86emu_single_step()
#else
# define SINGLE_STEP()
#endif

#define TRACE_AND_STEP()    \
    TRACE_REGS();	    \
    SINGLE_STEP()

#ifdef DEBUG
# define START_OF_INSTR()
# define END_OF_INSTR()	    EndOfTheInstructionProcedure: x86emu_end_instr();
# define END_OF_INSTR_NO_TRACE()    x86emu_end_instr();
#else
# define START_OF_INSTR()
# define END_OF_INSTR()
# define END_OF_INSTR_NO_TRACE()
#endif

#ifdef DEBUG
# define  CALL_TRACE(u,v,w,x,s)					\
    if (DEBUG_TRACECALLREGS())					\
	x86emu_dump_regs();					\
    if (DEBUG_TRACECALL())					\
	printk("%04x:%04x: CALL %s%04x:%04x\n", u , v, s, w, x);
# define RETURN_TRACE(n,u,v)					\
    if (DEBUG_TRACECALLREGS())					\
	x86emu_dump_regs();					\
    if (DEBUG_TRACECALL())					\
	printk("%04x:%04x: %s\n",u,v,n);
#else
# define CALL_TRACE(u,v,w,x,s)
# define RETURN_TRACE(n,u,v)
#endif

#ifdef DEBUG
#define DB(x)	x
#else
#define DB(x)
#endif

/*-------------------------- Function Prototypes --------------------------*/

#ifdef	__cplusplus
extern "C" {			/* Use "C" linkage when in C++ mode */
#endif

	extern void x86emu_inc_decoded_inst_len(int x);
	extern void x86emu_decode_printf(char *x);
	extern void x86emu_decode_printf2(char *x, int y);
	extern void x86emu_just_disassemble(void);
	extern void x86emu_single_step(void);
	extern void x86emu_end_instr(void);
	extern void x86emu_dump_regs(void);
	extern void x86emu_dump_xregs(void);
	extern void x86emu_print_int_vect(u16 iv);
	extern void x86emu_instrument_instruction(void);
	extern void x86emu_check_ip_access(void);
	extern void x86emu_check_sp_access(void);
	extern void x86emu_check_mem_access(u32 p);
	extern void x86emu_check_data_access(uint s, uint o);

#ifdef	__cplusplus
}				/* End of "C" linkage for C++	    */
#endif
#endif				/* __X86EMU_DEBUG_H */
