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 41#ifndef __X86EMU_X86EMU_H 42#define __X86EMU_X86EMU_H 43 44#include <asm/types.h> 45#include <pci.h> 46#include <asm/io.h> 47#define X86API 48#define X86APIP * 49typedef u16 X86EMU_pioAddr; 50 51#include "x86emu/regs.h" 52 53/*---------------------- Macros and type definitions ----------------------*/ 54 55#if defined(CONFIG_ARM) 56#define GAS_LINE_COMMENT "@" 57#elif defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_X86) 58#define GAS_LINE_COMMENT "#" 59#elif defined (CONFIG_SH) 60#define GAS_LINE_COMMENT "!" 61#endif 62 63#define GOT2_TYPE ".got2,\"aw\"\t"GAS_LINE_COMMENT 64 65#pragma pack(1) 66 67/**************************************************************************** 68REMARKS: 69Data structure containing ponters to programmed I/O functions used by the 70emulator. This is used so that the user program can hook all programmed 71I/O for the emulator to handled as necessary by the user program. By 72default the emulator contains simple functions that do not do access the 73hardware in any way. To allow the emualtor access the hardware, you will 74need to override the programmed I/O functions using the X86EMU_setupPioFuncs 75function. 76 77HEADER: 78x86emu.h 79 80MEMBERS: 81inb - Function to read a byte from an I/O port 82inw - Function to read a word from an I/O port 83inl - Function to read a dword from an I/O port 84outb - Function to write a byte to an I/O port 85outw - Function to write a word to an I/O port 86outl - Function to write a dword to an I/O port 87****************************************************************************/ 88typedef struct { 89 u8(X86APIP inb) (X86EMU_pioAddr addr); 90 u16(X86APIP inw) (X86EMU_pioAddr addr); 91 u32(X86APIP inl) (X86EMU_pioAddr addr); 92 void (X86APIP outb) (X86EMU_pioAddr addr, u8 val); 93 void (X86APIP outw) (X86EMU_pioAddr addr, u16 val); 94 void (X86APIP outl) (X86EMU_pioAddr addr, u32 val); 95} X86EMU_pioFuncs; 96 97/**************************************************************************** 98REMARKS: 99Data structure containing ponters to memory access functions used by the 100emulator. This is used so that the user program can hook all memory 101access functions as necessary for the emulator. By default the emulator 102contains simple functions that only access the internal memory of the 103emulator. If you need specialised functions to handle access to different 104types of memory (ie: hardware framebuffer accesses and BIOS memory access 105etc), you will need to override this using the X86EMU_setupMemFuncs 106function. 107 108HEADER: 109x86emu.h 110 111MEMBERS: 112rdb - Function to read a byte from an address 113rdw - Function to read a word from an address 114rdl - Function to read a dword from an address 115wrb - Function to write a byte to an address 116wrw - Function to write a word to an address 117wrl - Function to write a dword to an address 118****************************************************************************/ 119typedef struct { 120 u8(X86APIP rdb) (u32 addr); 121 u16(X86APIP rdw) (u32 addr); 122 u32(X86APIP rdl) (u32 addr); 123 void (X86APIP wrb) (u32 addr, u8 val); 124 void (X86APIP wrw) (u32 addr, u16 val); 125 void (X86APIP wrl) (u32 addr, u32 val); 126} X86EMU_memFuncs; 127 128/**************************************************************************** 129 Here are the default memory read and write 130 function in case they are needed as fallbacks. 131***************************************************************************/ 132extern u8 X86API rdb(u32 addr); 133extern u16 X86API rdw(u32 addr); 134extern u32 X86API rdl(u32 addr); 135extern void X86API wrb(u32 addr, u8 val); 136extern void X86API wrw(u32 addr, u16 val); 137extern void X86API wrl(u32 addr, u32 val); 138 139#pragma pack() 140 141/*--------------------- type definitions -----------------------------------*/ 142 143typedef void (X86APIP X86EMU_intrFuncs) (int num); 144extern X86EMU_intrFuncs _X86EMU_intrTab[256]; 145 146/*-------------------------- Function Prototypes --------------------------*/ 147 148#ifdef __cplusplus 149extern "C" { /* Use "C" linkage when in C++ mode */ 150#endif 151 152 void X86EMU_setupMemFuncs(X86EMU_memFuncs * funcs); 153 void X86EMU_setupPioFuncs(X86EMU_pioFuncs * funcs); 154 void X86EMU_setupIntrFuncs(X86EMU_intrFuncs funcs[]); 155 void X86EMU_setupIntrFunc(int intnum, X86EMU_intrFuncs func); 156 void X86EMU_prepareForInt(int num); 157 158/* decode.c */ 159 160 void X86EMU_exec(void); 161 void X86EMU_halt_sys(void); 162 163#ifdef CONFIG_X86EMU_DEBUG 164#define HALT_SYS() \ 165 printf("halt_sys: file %s, line %d\n", __FILE__, __LINE__), \ 166 X86EMU_halt_sys() 167#else 168#define HALT_SYS() X86EMU_halt_sys() 169#endif 170 171/* Debug options */ 172 173#define DEBUG_DECODE_F 0x0001 /* print decoded instruction */ 174#define DEBUG_TRACE_F 0x0002 /* dump regs before/after execution */ 175#define DEBUG_STEP_F 0x0004 176#define DEBUG_DISASSEMBLE_F 0x0008 177#define DEBUG_BREAK_F 0x0010 178#define DEBUG_SVC_F 0x0020 179#define DEBUG_SAVE_CS_IP 0x0040 180#define DEBUG_FS_F 0x0080 181#define DEBUG_PROC_F 0x0100 182#define DEBUG_SYSINT_F 0x0200 /* bios system interrupts. */ 183#define DEBUG_TRACECALL_F 0x0400 184#define DEBUG_INSTRUMENT_F 0x0800 185#define DEBUG_MEM_TRACE_F 0x1000 186#define DEBUG_IO_TRACE_F 0x2000 187#define DEBUG_TRACECALL_REGS_F 0x4000 188#define DEBUG_DECODE_NOPRINT_F 0x8000 189#define DEBUG_EXIT 0x10000 190#define DEBUG_SYS_F (DEBUG_SVC_F|DEBUG_FS_F|DEBUG_PROC_F) 191 192 void X86EMU_trace_regs(void); 193 void X86EMU_trace_xregs(void); 194 void X86EMU_dump_memory(u16 seg, u16 off, u32 amt); 195 int X86EMU_trace_on(void); 196 int X86EMU_trace_off(void); 197 198#ifdef __cplusplus 199} /* End of "C" linkage for C++ */ 200#endif 201#endif /* __X86EMU_X86EMU_H */ 202