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.
180 lines
3.1 KiB
180 lines
3.1 KiB
/*++
|
|
|
|
Copyright (c) 1992 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
data.c
|
|
|
|
Abstract:
|
|
|
|
This module contains the x86 specific data for the dpmi library.
|
|
Common data is found in dpmi32.c
|
|
|
|
Author:
|
|
|
|
Dave Hastings (daveh) creation-date 09-Feb-1994
|
|
|
|
Revision History:
|
|
|
|
Neil Sandlin (neilsa) 31-Jul-1995 Updates for the 486 emulator
|
|
|
|
--*/
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
//
|
|
// Information about the current PSP
|
|
//
|
|
USHORT CurrentPSPSelector;
|
|
|
|
//
|
|
// Table of selector bases and limits
|
|
//
|
|
ULONG FlatAddress[LDT_SIZE];
|
|
|
|
//
|
|
// LDT information
|
|
//
|
|
|
|
PLDT_ENTRY Ldt;
|
|
USHORT LdtSel;
|
|
USHORT LdtMaxSel = 0;
|
|
USHORT LdtUserSel = 0;
|
|
|
|
//
|
|
// Address of 16 bit Idt
|
|
//
|
|
PIDT_ENTRY Idt;
|
|
|
|
|
|
//
|
|
// Pointers to the low memory buffers
|
|
//
|
|
PUCHAR SmallXlatBuffer;
|
|
PUCHAR LargeXlatBuffer;
|
|
BOOL SmallBufferInUse;
|
|
USHORT LargeBufferInUseCount = 0;
|
|
//
|
|
// Segment of realmode dosx stack
|
|
//
|
|
USHORT DosxStackSegment;
|
|
|
|
//
|
|
// segment of realmode dosx code
|
|
//
|
|
USHORT DosxRmCodeSegment;
|
|
|
|
//
|
|
// selector of realmode code
|
|
//
|
|
USHORT DosxRmCodeSelector;
|
|
|
|
//
|
|
// Address of pointer to next frame on Dosx stack
|
|
//
|
|
PWORD16 DosxStackFramePointer;
|
|
|
|
//
|
|
// Size of dosx stack frame
|
|
//
|
|
USHORT DosxStackFrameSize;
|
|
|
|
//
|
|
// Dpmi flags for the current application
|
|
//
|
|
USHORT CurrentAppFlags;
|
|
|
|
//
|
|
// Address of Bop fe for ending interrupt simulation
|
|
//
|
|
ULONG RmBopFe;
|
|
ULONG PmBopFe;
|
|
|
|
//
|
|
// Address of buffer for DTA in Dosx
|
|
//
|
|
PUCHAR DosxDtaBuffer;
|
|
|
|
//
|
|
// Information about the current DTA
|
|
//
|
|
// N.B. The selector:offset, and CurrentDta following MAY point to
|
|
// different linear addresses. This will be the case if the
|
|
// dta selector is in high memory.
|
|
// CurrentDosDta holds the "cached" value of the Dta that has
|
|
// actually been issued to DOS.
|
|
PUCHAR CurrentDta;
|
|
PUCHAR CurrentPmDtaAddress;
|
|
PUCHAR CurrentDosDta;
|
|
USHORT CurrentDtaSelector;
|
|
USHORT CurrentDtaOffset;
|
|
|
|
//
|
|
// These are the functions in WOW (GlobalDOSAlloc, GlobalDOSFree)
|
|
// that are used as helper functions to perform DPMI func's 100,101
|
|
// when we are running under WOW.
|
|
//
|
|
|
|
USHORT WOWAllocSeg = 0;
|
|
USHORT WOWAllocFunc;
|
|
USHORT WOWFreeSeg = 0;
|
|
USHORT WOWFreeFunc;
|
|
|
|
//
|
|
// Selector limits
|
|
//
|
|
#if DBG
|
|
ULONG SelectorLimit[LDT_SIZE];
|
|
PULONG ExpSelectorLimit = SelectorLimit;
|
|
#else
|
|
PULONG ExpSelectorLimit = NULL;
|
|
#endif
|
|
|
|
//
|
|
// Start of intel address space in process memory
|
|
//
|
|
ULONG IntelBase = 0;
|
|
|
|
//
|
|
// Variables used for supporting stack switching
|
|
// (on x86, these are in the vdmtib)
|
|
//
|
|
#ifndef i386
|
|
USHORT LockedPMStackSel;
|
|
ULONG LockedPMStackCount;
|
|
ULONG PMLockOrigEIP;
|
|
ULONG PMLockOrigSS;
|
|
ULONG PMLockOrigESP;
|
|
|
|
ULONG DosxFaultHandlerIret;
|
|
ULONG DosxFaultHandlerIretd;
|
|
ULONG DosxIntHandlerIret;
|
|
ULONG DosxIntHandlerIretd;
|
|
ULONG DosxRMReflector;
|
|
|
|
#endif
|
|
|
|
VDM_INTERRUPTHANDLER DpmiInterruptHandlers[256] = {0};
|
|
VDM_FAULTHANDLER DpmiFaultHandlers[32] = {0};
|
|
|
|
ULONG DosxIret;
|
|
ULONG DosxIretd;
|
|
|
|
USHORT PMReflectorSeg;
|
|
|
|
ULONG DosxRmSaveRestoreState;
|
|
ULONG DosxPmSaveRestoreState;
|
|
ULONG DosxRmRawModeSwitch;
|
|
ULONG DosxPmRawModeSwitch;
|
|
|
|
ULONG DosxVcdPmSvcCall;
|
|
ULONG DosxMsDosApi;
|
|
ULONG DosxXmsControl;
|
|
ULONG DosxHungAppExit;
|
|
|
|
//
|
|
// WORKITEM: should be in VDMTIB
|
|
//
|
|
ULONG LastLockedPMStackSS;
|
|
ULONG LastLockedPMStackESP;
|