1/**************************************************************************** 2* 3* Realmode X86 Emulator Library 4* 5* Copyright (C) 1996-1999 SciTech Software, Inc. 6* Copyright (C) David Mosberger-Tang 7* Copyright (C) 1999 Egbert Eich 8* 9* ======================================================================== 10* 11* Permission to use, copy, modify, distribute, and sell this software and 12* its documentation for any purpose is hereby granted without fee, 13* provided that the above copyright notice appear in all copies and that 14* both that copyright notice and this permission notice appear in 15* supporting documentation, and that the name of the authors not be used 16* in advertising or publicity pertaining to distribution of the software 17* without specific, written prior permission. The authors makes no 18* representations about the suitability of this software for any purpose. 19* It is provided "as is" without express or implied warranty. 20* 21* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 22* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 23* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR 24* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF 25* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 26* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 27* PERFORMANCE OF THIS SOFTWARE. 28* 29* ======================================================================== 30* 31* Language: ANSI C 32* Environment: Any 33* Developer: Kendall Bennett 34* 35* Description: Header file for public specific functions. 36* Any application linking against us should only 37* include this header 38* 39****************************************************************************/ 40/* $XFree86: xc/extras/x86emu/include/x86emu.h,v 1.2 2000/11/21 23:10:25 tsi Exp $ */ 41 42#ifndef __X86EMU_X86EMU_H 43#define __X86EMU_X86EMU_H 44 45#ifdef SCITECH 46#include "scitech.h" 47#define X86API _ASMAPI 48#define X86APIP _ASMAPIP 49typedef int X86EMU_pioAddr; 50#else 51#include "x86emu/types.h" 52#define X86API 53#define X86APIP * 54#endif 55#include "x86emu/regs.h" 56 57/*---------------------- Macros and type definitions ----------------------*/ 58 59#ifndef __mips 60#pragma pack(1) 61#endif 62 63/**************************************************************************** 64REMARKS: 65Data structure containing ponters to programmed I/O functions used by the 66emulator. This is used so that the user program can hook all programmed 67I/O for the emulator to handled as necessary by the user program. By 68default the emulator contains simple functions that do not do access the 69hardware in any way. To allow the emualtor access the hardware, you will 70need to override the programmed I/O functions using the X86EMU_setupPioFuncs 71function. 72 73HEADER: 74x86emu.h 75 76MEMBERS: 77inb - Function to read a byte from an I/O port 78inw - Function to read a word from an I/O port 79inl - Function to read a dword from an I/O port 80outb - Function to write a byte to an I/O port 81outw - Function to write a word to an I/O port 82outl - Function to write a dword to an I/O port 83****************************************************************************/ 84typedef struct { 85 u8 (X86APIP inb)(X86EMU_pioAddr addr); 86 u16 (X86APIP inw)(X86EMU_pioAddr addr); 87 u32 (X86APIP inl)(X86EMU_pioAddr addr); 88 void (X86APIP outb)(X86EMU_pioAddr addr, u8 val); 89 void (X86APIP outw)(X86EMU_pioAddr addr, u16 val); 90 void (X86APIP outl)(X86EMU_pioAddr addr, u32 val); 91 } X86EMU_pioFuncs; 92 93/**************************************************************************** 94REMARKS: 95Data structure containing ponters to memory access functions used by the 96emulator. This is used so that the user program can hook all memory 97access functions as necessary for the emulator. By default the emulator 98contains simple functions that only access the internal memory of the 99emulator. If you need specialised functions to handle access to different 100types of memory (ie: hardware framebuffer accesses and BIOS memory access 101etc), you will need to override this using the X86EMU_setupMemFuncs 102function. 103 104HEADER: 105x86emu.h 106 107MEMBERS: 108rdb - Function to read a byte from an address 109rdw - Function to read a word from an address 110rdl - Function to read a dword from an address 111wrb - Function to write a byte to an address 112wrw - Function to write a word to an address 113wrl - Function to write a dword to an address 114****************************************************************************/ 115typedef struct { 116 u8 (X86APIP rdb)(u32 addr); 117 u16 (X86APIP rdw)(u32 addr); 118 u32 (X86APIP rdl)(u32 addr); 119 void (X86APIP wrb)(u32 addr, u8 val); 120 void (X86APIP wrw)(u32 addr, u16 val); 121 void (X86APIP wrl)(u32 addr, u32 val); 122 } X86EMU_memFuncs; 123 124/**************************************************************************** 125 Here are the default memory read and write 126 function in case they are needed as fallbacks. 127***************************************************************************/ 128extern u8 X86API rdb(u32 addr); 129extern u16 X86API rdw(u32 addr); 130extern u32 X86API rdl(u32 addr); 131extern void X86API wrb(u32 addr, u8 val); 132extern void X86API wrw(u32 addr, u16 val); 133extern void X86API wrl(u32 addr, u32 val); 134 135#ifndef __mips 136#pragma pack() 137#endif 138 139/*--------------------- type definitions -----------------------------------*/ 140 141typedef void (X86APIP X86EMU_intrFuncs)(int num); 142extern X86EMU_intrFuncs _X86EMU_intrTab[256]; 143 144/*-------------------------- Function Prototypes --------------------------*/ 145 146#ifdef __cplusplus 147extern "C" { /* Use "C" linkage when in C++ mode */ 148#endif 149 150void X86EMU_setupMemFuncs(X86EMU_memFuncs *funcs); 151void X86EMU_setupPioFuncs(X86EMU_pioFuncs *funcs); 152void X86EMU_setupIntrFuncs(X86EMU_intrFuncs funcs[]); 153void X86EMU_prepareForInt(int num); 154 155/* decode.c */ 156 157void X86EMU_exec(void); 158void X86EMU_halt_sys(void); 159 160#ifdef DEBUG 161#define HALT_SYS() \ 162 printk("halt_sys: file %s, line %d\n", __FILE__, __LINE__), \ 163 X86EMU_halt_sys() 164#else 165#define HALT_SYS() X86EMU_halt_sys() 166#endif 167 168/* Debug options */ 169 170#define DEBUG_DECODE_F 0x000001 /* print decoded instruction */ 171#define DEBUG_TRACE_F 0x000002 /* dump regs before/after execution */ 172#define DEBUG_STEP_F 0x000004 173#define DEBUG_DISASSEMBLE_F 0x000008 174#define DEBUG_BREAK_F 0x000010 175#define DEBUG_SVC_F 0x000020 176#define DEBUG_FS_F 0x000080 177#define DEBUG_PROC_F 0x000100 178#define DEBUG_SYSINT_F 0x000200 /* bios system interrupts. */ 179#define DEBUG_TRACECALL_F 0x000400 180#define DEBUG_INSTRUMENT_F 0x000800 181#define DEBUG_MEM_TRACE_F 0x001000 182#define DEBUG_IO_TRACE_F 0x002000 183#define DEBUG_TRACECALL_REGS_F 0x004000 184#define DEBUG_DECODE_NOPRINT_F 0x008000 185#define DEBUG_SAVE_IP_CS_F 0x010000 186#define DEBUG_SYS_F (DEBUG_SVC_F|DEBUG_FS_F|DEBUG_PROC_F) 187 188void X86EMU_trace_regs(void); 189void X86EMU_trace_xregs(void); 190void X86EMU_dump_memory(u16 seg, u16 off, u32 amt); 191int X86EMU_trace_on(void); 192int X86EMU_trace_off(void); 193 194#ifdef __cplusplus 195} /* End of "C" linkage for C++ */ 196#endif 197 198#endif /* __X86EMU_X86EMU_H */ 199