130 lines
3.1 KiB
C
130 lines
3.1 KiB
C
|
/*++ BUILD Version: 0001
|
||
|
|
||
|
Copyright (c) 1990 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
X86PC.H
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This file contains macros, function prototypes, and externs for the
|
||
|
x86 emulator NT version of SoftPC v3.0.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Dave Hastings (daveh) 4-11-91
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
Jeff Parsons (jeffpar) 14-May-1991
|
||
|
Essentially copied this file from V86PC.H, except that I had to define
|
||
|
X86CONTEXT as the x86-compatible version of CONTEXT.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
//
|
||
|
// Define the size of the 80387 save area, which is in the context frame.
|
||
|
//
|
||
|
|
||
|
#define SIZE_OF_80387_ENVIRONMENT 108
|
||
|
#define SIZE_OF_80387_REGISTERS 80
|
||
|
|
||
|
typedef struct _FLOATING_SAVE_AREA {
|
||
|
ULONG ControlWord;
|
||
|
ULONG StatusWord;
|
||
|
ULONG TagWord;
|
||
|
ULONG ErrorOffset;
|
||
|
ULONG ErrorSelector;
|
||
|
ULONG DataOffset;
|
||
|
ULONG DataSelector;
|
||
|
UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
|
||
|
} FLOATING_SAVE_AREA;
|
||
|
|
||
|
typedef FLOATING_SAVE_AREA *PFLOATING_SAVE_AREA;
|
||
|
|
||
|
|
||
|
// x86 Context Frame (copied from nti386.h)
|
||
|
//
|
||
|
// The layout of the record conforms to a standard call frame.
|
||
|
//
|
||
|
|
||
|
typedef struct _X86CONTEXT {
|
||
|
|
||
|
//
|
||
|
// The flags values within this flag control the contents of
|
||
|
// a CONTEXT record.
|
||
|
//
|
||
|
// If the context record is used as an input parameter, then
|
||
|
// for each portion of the context record controlled by a flag
|
||
|
// whose value is set, it is assumed that that portion of the
|
||
|
// context record contains valid context. If the context record
|
||
|
// is being used to modify a threads context, then only that
|
||
|
// portion of the threads context will be modified.
|
||
|
//
|
||
|
// If the context record is used as an IN OUT parameter to capture
|
||
|
// the context of a thread, then only those portions of the thread's
|
||
|
// context corresponding to set flags will be returned.
|
||
|
//
|
||
|
// The context record is never used as an OUT only parameter.
|
||
|
//
|
||
|
|
||
|
ULONG ContextFlags;
|
||
|
|
||
|
//
|
||
|
// This section is specified/returned if CONTEXT_DEBUG_REGISTERS is
|
||
|
// set in ContextFlags. Note that CONTEXT_DEBUG_REGISTERS is NOT
|
||
|
// included in CONTEXT_FULL.
|
||
|
//
|
||
|
|
||
|
ULONG Dr0;
|
||
|
ULONG Dr1;
|
||
|
ULONG Dr2;
|
||
|
ULONG Dr3;
|
||
|
ULONG Dr6;
|
||
|
ULONG Dr7;
|
||
|
|
||
|
//
|
||
|
// This section is specified/returned if the
|
||
|
// ContextFlags word contians the flag CONTEXT_FLOATING_POINT.
|
||
|
//
|
||
|
|
||
|
FLOATING_SAVE_AREA FloatSave;
|
||
|
|
||
|
//
|
||
|
// This section is specified/returned if the
|
||
|
// ContextFlags word contians the flag CONTEXT_SEGMENTS.
|
||
|
//
|
||
|
|
||
|
ULONG SegGs;
|
||
|
ULONG SegFs;
|
||
|
ULONG SegEs;
|
||
|
ULONG SegDs;
|
||
|
|
||
|
//
|
||
|
// This section is specified/returned if the
|
||
|
// ContextFlags word contians the flag CONTEXT_INTEGER.
|
||
|
//
|
||
|
|
||
|
ULONG Edi;
|
||
|
ULONG Esi;
|
||
|
ULONG Ebx;
|
||
|
ULONG Edx;
|
||
|
ULONG Ecx;
|
||
|
ULONG Eax;
|
||
|
|
||
|
//
|
||
|
// This section is specified/returned if the
|
||
|
// ContextFlags word contians the flag CONTEXT_CONTROL.
|
||
|
//
|
||
|
|
||
|
ULONG Ebp;
|
||
|
ULONG Eip;
|
||
|
ULONG SegCs; // MUST BE SANITIZED
|
||
|
ULONG EFlags; // MUST BE SANITIZED
|
||
|
ULONG Esp;
|
||
|
ULONG SegSs;
|
||
|
|
||
|
} X86CONTEXT, *PX86CONTEXT;
|