xserver

xserver with xephyr scale patch
git clone https://git.neptards.moe/u3shit/xserver.git
Log | Files | Refs | README | LICENSE

x86emu.h (7404B)


      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 #ifdef SCITECH
     45 #include "scitech.h"
     46 #define	X86API	_ASMAPI
     47 #define	X86APIP	_ASMAPIP
     48 typedef int X86EMU_pioAddr;
     49 #else
     50 #include "x86emu/types.h"
     51 #define	X86API
     52 #define	X86APIP	*
     53 #endif
     54 #include "x86emu/regs.h"
     55 
     56 /*---------------------- Macros and type definitions ----------------------*/
     57 
     58 #ifdef PACK
     59 #pragma	PACK                    /* Don't pack structs with function pointers! */
     60 #endif
     61 
     62 /****************************************************************************
     63 REMARKS:
     64 Data structure containing ponters to programmed I/O functions used by the
     65 emulator. This is used so that the user program can hook all programmed
     66 I/O for the emulator to handled as necessary by the user program. By
     67 default the emulator contains simple functions that do not do access the
     68 hardware in any way. To allow the emualtor access the hardware, you will
     69 need to override the programmed I/O functions using the X86EMU_setupPioFuncs
     70 function.
     71 
     72 HEADER:
     73 x86emu.h
     74 
     75 MEMBERS:
     76 inb		- Function to read a byte from an I/O port
     77 inw		- Function to read a word from an I/O port
     78 inl     - Function to read a dword from an I/O port
     79 outb	- Function to write a byte to an I/O port
     80 outw    - Function to write a word to an I/O port
     81 outl    - Function to write a dword to an I/O port
     82 ****************************************************************************/
     83 typedef struct {
     84     u8(X86APIP inb) (X86EMU_pioAddr addr);
     85     u16(X86APIP inw) (X86EMU_pioAddr addr);
     86     u32(X86APIP inl) (X86EMU_pioAddr addr);
     87     void (X86APIP outb) (X86EMU_pioAddr addr, u8 val);
     88     void (X86APIP outw) (X86EMU_pioAddr addr, u16 val);
     89     void (X86APIP outl) (X86EMU_pioAddr addr, u32 val);
     90 } X86EMU_pioFuncs;
     91 
     92 /****************************************************************************
     93 REMARKS:
     94 Data structure containing ponters to memory access functions used by the
     95 emulator. This is used so that the user program can hook all memory
     96 access functions as necessary for the emulator. By default the emulator
     97 contains simple functions that only access the internal memory of the
     98 emulator. If you need specialised functions to handle access to different
     99 types of memory (ie: hardware framebuffer accesses and BIOS memory access
    100 etc), you will need to override this using the X86EMU_setupMemFuncs
    101 function.
    102 
    103 HEADER:
    104 x86emu.h
    105 
    106 MEMBERS:
    107 rdb		- Function to read a byte from an address
    108 rdw		- Function to read a word from an address
    109 rdl     - Function to read a dword from an address
    110 wrb		- Function to write a byte to an address
    111 wrw    	- Function to write a word to an address
    112 wrl    	- Function to write a dword to an address
    113 ****************************************************************************/
    114 typedef struct {
    115     u8(X86APIP rdb) (u32 addr);
    116     u16(X86APIP rdw) (u32 addr);
    117     u32(X86APIP rdl) (u32 addr);
    118     void (X86APIP wrb) (u32 addr, u8 val);
    119     void (X86APIP wrw) (u32 addr, u16 val);
    120     void (X86APIP wrl) (u32 addr, u32 val);
    121 } X86EMU_memFuncs;
    122 
    123 /****************************************************************************
    124   Here are the default memory read and write
    125   function in case they are needed as fallbacks.
    126 ***************************************************************************/
    127 extern u8 X86API rdb(u32 addr);
    128 extern u16 X86API rdw(u32 addr);
    129 extern u32 X86API rdl(u32 addr);
    130 extern void X86API wrb(u32 addr, u8 val);
    131 extern void X86API wrw(u32 addr, u16 val);
    132 extern void X86API wrl(u32 addr, u32 val);
    133 
    134 #ifdef END_PACK
    135 #pragma	END_PACK
    136 #endif
    137 
    138 /*--------------------- type definitions -----------------------------------*/
    139 
    140 typedef void (X86APIP X86EMU_intrFuncs) (int num);
    141 extern X86EMU_intrFuncs _X86EMU_intrTab[256];
    142 
    143 /*-------------------------- Function Prototypes --------------------------*/
    144 
    145 #ifdef  __cplusplus
    146 extern "C" {                    /* Use "C" linkage when in C++ mode */
    147 #endif
    148 
    149     void X86EMU_setupMemFuncs(X86EMU_memFuncs * funcs);
    150     void X86EMU_setupPioFuncs(X86EMU_pioFuncs * funcs);
    151     void X86EMU_setupIntrFuncs(X86EMU_intrFuncs funcs[]);
    152     void X86EMU_prepareForInt(int num);
    153 
    154 /* decode.c */
    155 
    156     void X86EMU_exec(void);
    157     void X86EMU_halt_sys(void);
    158 
    159 #ifdef	DEBUG
    160 #define	HALT_SYS()	\
    161 	printk("halt_sys: file %s, line %d\n", __FILE__, __LINE__), \
    162 	X86EMU_halt_sys()
    163 #else
    164 #define	HALT_SYS()	X86EMU_halt_sys()
    165 #endif
    166 
    167 /* Debug options */
    168 
    169 #define DEBUG_DECODE_F          0x000001        /* print decoded instruction  */
    170 #define DEBUG_TRACE_F           0x000002        /* dump regs before/after execution */
    171 #define DEBUG_STEP_F            0x000004
    172 #define DEBUG_DISASSEMBLE_F     0x000008
    173 #define DEBUG_BREAK_F           0x000010
    174 #define DEBUG_SVC_F             0x000020
    175 #define DEBUG_SAVE_IP_CS_F      0x000040
    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_EXIT              0x010000
    186 #define DEBUG_SYS_F             (DEBUG_SVC_F|DEBUG_FS_F|DEBUG_PROC_F)
    187 
    188     void X86EMU_trace_regs(void);
    189     void X86EMU_trace_xregs(void);
    190     void X86EMU_dump_memory(u16 seg, u16 off, u32 amt);
    191     int X86EMU_trace_on(void);
    192     int X86EMU_trace_off(void);
    193 
    194 #ifdef  __cplusplus
    195 }                               /* End of "C" linkage for C++           */
    196 #endif
    197 #endif                          /* __X86EMU_X86EMU_H */