123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- /****************************************************************************
- *
- * Realmode X86 Emulator Library
- *
- * Copyright (C) 1996-1999 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 public specific functions.
- * Any application linking against us should only
- * include this header
- *
- ****************************************************************************/
- #ifndef __X86EMU_X86EMU_H
- #define __X86EMU_X86EMU_H
- #include <asm/types.h>
- #include <common.h>
- #include <pci.h>
- #include <asm/io.h>
- #define X86API
- #define X86APIP *
- typedef u16 X86EMU_pioAddr;
- #include "x86emu/regs.h"
- /*---------------------- Macros and type definitions ----------------------*/
- #if defined (CONFIG_ARM)
- #define GAS_LINE_COMMENT "@"
- #elif defined(CONFIG_MIPS) || defined(CONFIG_PPC)
- #define GAS_LINE_COMMENT "#"
- #elif defined (CONFIG_SH)
- #define GAS_LINE_COMMENT "!"
- #endif
- #define GOT2_TYPE ".got2,\"aw\"\t"GAS_LINE_COMMENT
- #pragma pack(1)
- /****************************************************************************
- REMARKS:
- Data structure containing ponters to programmed I/O functions used by the
- emulator. This is used so that the user program can hook all programmed
- I/O for the emulator to handled as necessary by the user program. By
- default the emulator contains simple functions that do not do access the
- hardware in any way. To allow the emualtor access the hardware, you will
- need to override the programmed I/O functions using the X86EMU_setupPioFuncs
- function.
- HEADER:
- x86emu.h
- MEMBERS:
- inb - Function to read a byte from an I/O port
- inw - Function to read a word from an I/O port
- inl - Function to read a dword from an I/O port
- outb - Function to write a byte to an I/O port
- outw - Function to write a word to an I/O port
- outl - Function to write a dword to an I/O port
- ****************************************************************************/
- typedef struct {
- u8(X86APIP inb) (X86EMU_pioAddr addr);
- u16(X86APIP inw) (X86EMU_pioAddr addr);
- u32(X86APIP inl) (X86EMU_pioAddr addr);
- void (X86APIP outb) (X86EMU_pioAddr addr, u8 val);
- void (X86APIP outw) (X86EMU_pioAddr addr, u16 val);
- void (X86APIP outl) (X86EMU_pioAddr addr, u32 val);
- } X86EMU_pioFuncs;
- /****************************************************************************
- REMARKS:
- Data structure containing ponters to memory access functions used by the
- emulator. This is used so that the user program can hook all memory
- access functions as necessary for the emulator. By default the emulator
- contains simple functions that only access the internal memory of the
- emulator. If you need specialised functions to handle access to different
- types of memory (ie: hardware framebuffer accesses and BIOS memory access
- etc), you will need to override this using the X86EMU_setupMemFuncs
- function.
- HEADER:
- x86emu.h
- MEMBERS:
- rdb - Function to read a byte from an address
- rdw - Function to read a word from an address
- rdl - Function to read a dword from an address
- wrb - Function to write a byte to an address
- wrw - Function to write a word to an address
- wrl - Function to write a dword to an address
- ****************************************************************************/
- typedef struct {
- u8(X86APIP rdb) (u32 addr);
- u16(X86APIP rdw) (u32 addr);
- u32(X86APIP rdl) (u32 addr);
- void (X86APIP wrb) (u32 addr, u8 val);
- void (X86APIP wrw) (u32 addr, u16 val);
- void (X86APIP wrl) (u32 addr, u32 val);
- } X86EMU_memFuncs;
- /****************************************************************************
- Here are the default memory read and write
- function in case they are needed as fallbacks.
- ***************************************************************************/
- extern u8 X86API rdb(u32 addr);
- extern u16 X86API rdw(u32 addr);
- extern u32 X86API rdl(u32 addr);
- extern void X86API wrb(u32 addr, u8 val);
- extern void X86API wrw(u32 addr, u16 val);
- extern void X86API wrl(u32 addr, u32 val);
- #pragma pack()
- /*--------------------- type definitions -----------------------------------*/
- typedef void (X86APIP X86EMU_intrFuncs) (int num);
- extern X86EMU_intrFuncs _X86EMU_intrTab[256];
- /*-------------------------- Function Prototypes --------------------------*/
- #ifdef __cplusplus
- extern "C" { /* Use "C" linkage when in C++ mode */
- #endif
- void X86EMU_setupMemFuncs(X86EMU_memFuncs * funcs);
- void X86EMU_setupPioFuncs(X86EMU_pioFuncs * funcs);
- void X86EMU_setupIntrFuncs(X86EMU_intrFuncs funcs[]);
- void X86EMU_prepareForInt(int num);
- /* decode.c */
- void X86EMU_exec(void);
- void X86EMU_halt_sys(void);
- #ifdef DEBUG
- #define HALT_SYS() \
- printf("halt_sys: file %s, line %d\n", __FILE__, __LINE__), \
- X86EMU_halt_sys()
- #else
- #define HALT_SYS() X86EMU_halt_sys()
- #endif
- /* Debug options */
- #define DEBUG_DECODE_F 0x0001 /* print decoded instruction */
- #define DEBUG_TRACE_F 0x0002 /* dump regs before/after execution */
- #define DEBUG_STEP_F 0x0004
- #define DEBUG_DISASSEMBLE_F 0x0008
- #define DEBUG_BREAK_F 0x0010
- #define DEBUG_SVC_F 0x0020
- #define DEBUG_SAVE_CS_IP 0x0040
- #define DEBUG_FS_F 0x0080
- #define DEBUG_PROC_F 0x0100
- #define DEBUG_SYSINT_F 0x0200 /* bios system interrupts. */
- #define DEBUG_TRACECALL_F 0x0400
- #define DEBUG_INSTRUMENT_F 0x0800
- #define DEBUG_MEM_TRACE_F 0x1000
- #define DEBUG_IO_TRACE_F 0x2000
- #define DEBUG_TRACECALL_REGS_F 0x4000
- #define DEBUG_DECODE_NOPRINT_F 0x8000
- #define DEBUG_EXIT 0x10000
- #define DEBUG_SYS_F (DEBUG_SVC_F|DEBUG_FS_F|DEBUG_PROC_F)
- void X86EMU_trace_regs(void);
- void X86EMU_trace_xregs(void);
- void X86EMU_dump_memory(u16 seg, u16 off, u32 amt);
- int X86EMU_trace_on(void);
- int X86EMU_trace_off(void);
- #ifdef __cplusplus
- } /* End of "C" linkage for C++ */
- #endif
- #endif /* __X86EMU_X86EMU_H */
|