mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
2.3 KiB
131 lines
2.3 KiB
/*++ 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_
|