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