windows-nt/Source/XPSP1/NT/public/internal/base/inc/xm86.h
2020-09-26 16:20:57 +08:00

132 lines
2.3 KiB
C

/*++ BUILD Version: 0000 // Increment this if a change has global effects
Copyright (c) 1994 Microsoft Corporation
Module Name:
xm86.h
Abstract:
This module contains the public header file that describes the
interfaces to the 386/486 real mode emulator.
Author:
David N. Cutler (davec) 13-Nov-1994
Revision History:
--*/
#ifndef _XM86_
#define _XM86_
//
// Define internal error codes.
//
typedef enum _XM_STATUS {
XM_SUCCESS = 1,
XM_DIVIDE_BY_ZERO,
XM_DIVIDE_QUOTIENT_OVERFLOW,
XM_EMULATOR_NOT_INITIALIZED,
XM_HALT_INSTRUCTION,
XM_ILLEGAL_CODE_SEGMENT,
XM_ILLEGAL_INDEX_SPECIFIER,
XM_ILLEGAL_LEVEL_NUMBER,
XM_ILLEGAL_PORT_NUMBER,
XM_ILLEGAL_GENERAL_SPECIFIER,
XM_ILLEGAL_REGISTER_SPECIFIER,
XM_ILLEGAL_INSTRUCTION_OPCODE,
XM_INDEX_OUT_OF_BOUNDS,
XM_SEGMENT_LIMIT_VIOLATION,
XM_STACK_OVERFLOW,
XM_STACK_UNDERFLOW,
XM_MAXIMUM_INTERNAL_CODE
} XM_STATUS;
//
// Define operand data types.
//
typedef enum _XM_OPERATION_DATATYPE {
BYTE_DATA = 0,
WORD_DATA = 1,
LONG_DATA = 3
} XM_OPERATION_DATATYPE;
//
// Define emulator context structure.
//
typedef struct _XM86_CONTEXT {
ULONG Eax;
ULONG Ecx;
ULONG Edx;
ULONG Ebx;
ULONG Ebp;
ULONG Esi;
ULONG Edi;
USHORT SegDs;
USHORT SegEs;
} XM86_CONTEXT, *PXM86_CONTEXT;
//
// Define address translation callback function type.
//
typedef
PVOID
(*PXM_TRANSLATE_ADDRESS) (
IN USHORT Segment,
IN USHORT Offset
);
//
// Define read and write I/O space callback function types.
//
typedef
ULONG
(*PXM_READ_IO_SPACE) (
IN XM_OPERATION_DATATYPE DataType,
IN USHORT PortNumber
);
typedef
VOID
(*PXM_WRITE_IO_SPACE) (
IN XM_OPERATION_DATATYPE DataType,
IN USHORT PortNumber,
IN ULONG Value
);
//
// Define emulator public interface function prototypes.
//
XM_STATUS
XmEmulateFarCall (
IN USHORT Segment,
IN USHORT Offset,
IN OUT PXM86_CONTEXT Context
);
XM_STATUS
XmEmulateInterrupt (
IN UCHAR Interrupt,
IN OUT PXM86_CONTEXT Context
);
VOID
XmInitializeEmulator (
IN USHORT StackSegment,
IN USHORT StackOffset,
IN PXM_READ_IO_SPACE ReadIoSpace,
IN PXM_WRITE_IO_SPACE WriteIoSpace,
IN PXM_TRANSLATE_ADDRESS TranslateAddress
);
#endif // _XM86_