summaryrefslogtreecommitdiffstats
path: root/private/ntos/nthals/x86new/xm86.h
diff options
context:
space:
mode:
Diffstat (limited to 'private/ntos/nthals/x86new/xm86.h')
-rw-r--r--private/ntos/nthals/x86new/xm86.h129
1 files changed, 129 insertions, 0 deletions
diff --git a/private/ntos/nthals/x86new/xm86.h b/private/ntos/nthals/x86new/xm86.h
new file mode 100644
index 000000000..f0e994d88
--- /dev/null
+++ b/private/ntos/nthals/x86new/xm86.h
@@ -0,0 +1,129 @@
+/*++ 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;
+} 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_