mirror of https://github.com/lianthony/NT4.0
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.
257 lines
4.3 KiB
257 lines
4.3 KiB
/*++
|
|
|
|
Copyright (c) 1992 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
dpmi32p.h
|
|
|
|
Abstract:
|
|
|
|
This is the private include file for the 32 bit dpmi and protected mode
|
|
support
|
|
|
|
Author:
|
|
|
|
Dave Hastings (daveh) 24-Nov-1992
|
|
|
|
Revision History:
|
|
|
|
Neil Sandlin (neilsa) 31-Jul-1995 - Updates for the 486 emulator
|
|
|
|
--*/
|
|
|
|
|
|
#if DBG
|
|
#define GET_SELECTOR_LIMIT(Selector, Limit) \
|
|
Limit = SelectorLimit[(Selector & ~0x7) / sizeof(LDT_ENTRY)]
|
|
#else
|
|
#ifdef i386
|
|
#define GET_SELECTOR_LIMIT(Selector, Limit) _asm \
|
|
{ \
|
|
_asm xor eax, eax \
|
|
_asm xor ecx, ecx \
|
|
_asm mov ax, Selector \
|
|
_asm or eax, 7 \
|
|
_asm lsl ecx, eax \
|
|
_asm mov [Limit], ecx \
|
|
}
|
|
#else
|
|
|
|
#define GET_SELECTOR_LIMIT(Selector, Limit) { { \
|
|
USHORT i = (Selector & ~0x7)/sizeof(LDT_ENTRY); \
|
|
Limit = Ldt[i].HighWord.Bits.LimitHi << 16 | Ldt[i].LimitLow; \
|
|
Limit = (Limit << (12 * Ldt[i].HighWord.Bits.Granularity)) + \
|
|
Ldt[i].HighWord.Bits.Granularity * 0xFFF; \
|
|
} \
|
|
}
|
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#ifdef i386
|
|
#define setEFLAGS(value) { \
|
|
VdmTib.VdmContext.EFlags = value; \
|
|
}
|
|
#define getEFLAGS() VdmTib.VdmContext.EFlags
|
|
#endif
|
|
|
|
|
|
#define SEGMENT_IS_BIG(sel) (Ldt[(sel & ~0x7)/sizeof(LDT_ENTRY)].HighWord.Bits.Default_Big)
|
|
#define SEGMENT_IS_PRESENT(sel) (Ldt[(sel & ~0x7)/sizeof(LDT_ENTRY)].HighWord.Bits.Pres)
|
|
|
|
// This checks for S, Data, W
|
|
#define SEGMENT_IS_WRITABLE(sel) ( (Ldt[(sel & ~0x7)/sizeof(LDT_ENTRY)].HighWord.Bits.Type & 0x1a) == 0x12)
|
|
|
|
//
|
|
// Internal Constants
|
|
//
|
|
#define MAX_V86_ADDRESS 64 * 1024 + 1024 * 1024
|
|
#define ONE_MB 1024 * 1024
|
|
|
|
//
|
|
// Internal structure definitions
|
|
//
|
|
#pragma pack(1)
|
|
typedef struct _DpmiMemInfo {
|
|
DWORD LargestFree;
|
|
DWORD MaxUnlocked;
|
|
DWORD MaxLocked;
|
|
DWORD AddressSpaceSize;
|
|
DWORD UnlockedPages;
|
|
DWORD FreePages;
|
|
DWORD PhysicalPages;
|
|
DWORD FreeAddressSpace;
|
|
DWORD PageFileSize;
|
|
} DPMIMEMINFO, *PDPMIMEMINFO;
|
|
#pragma pack()
|
|
|
|
//
|
|
// Information about the current PSP
|
|
//
|
|
extern USHORT CurrentPSPSelector;
|
|
|
|
//
|
|
// Table of selector bases and limits
|
|
//
|
|
extern ULONG FlatAddress[LDT_SIZE];
|
|
|
|
//
|
|
// Index to the last bop function dispatched. Used to report
|
|
// errors on risc
|
|
//
|
|
extern ULONG Index;
|
|
|
|
//
|
|
// Variables used in interrupt stack switching
|
|
//
|
|
#ifndef i386
|
|
extern USHORT LockedPMStackSel;
|
|
extern ULONG LockedPMStackCount;
|
|
extern ULONG PMLockOrigEIP;
|
|
extern ULONG PMLockOrigSS;
|
|
extern ULONG PMLockOrigESP;
|
|
|
|
extern ULONG DosxFaultHandlerIret;
|
|
extern ULONG DosxFaultHandlerIretd;
|
|
extern ULONG DosxIntHandlerIret;
|
|
extern ULONG DosxIntHandlerIretd;
|
|
#endif
|
|
extern ULONG DosxIret;
|
|
extern ULONG DosxIretd;
|
|
|
|
//
|
|
// Internal functions
|
|
//
|
|
|
|
VOID
|
|
DpmiInitApp(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
DpmiSetDescriptorEntry(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
DpmiGetFastBopEntry(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
DpmiGetMemoryInfo(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
DpmiDpmiInUse(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
DpmiDpmiNoLongerInUse(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
DpmiFreeAppXmem(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
DpmiInitDosx(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
DpmiPassPmStackInfo(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
DpmiAllocateXmem(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
DpmiFreeXmem(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
DpmiReallocateXmem(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
DpmiFreeAllXmem(
|
|
VOID
|
|
);
|
|
|
|
NTSTATUS
|
|
DpmiAllocateVirtualMemory(
|
|
PVOID *Address,
|
|
PULONG Size
|
|
);
|
|
|
|
NTSTATUS
|
|
DpmiFreeVirtualMemory(
|
|
PVOID *Address,
|
|
PULONG Size
|
|
);
|
|
|
|
BOOL
|
|
DpmiReallocateVirtualMemory(
|
|
PVOID OldAddress,
|
|
ULONG OldSize,
|
|
PVOID *NewAddress,
|
|
PULONG NewSize
|
|
);
|
|
|
|
VOID
|
|
DpmiPassTableAddress(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
DpmiVcdPmSvcCall32(
|
|
VOID
|
|
);
|
|
|
|
VOID switch_to_protected_mode(
|
|
VOID
|
|
);
|
|
|
|
VOID DpmiSetProtectedmodeInterrupt(
|
|
VOID
|
|
);
|
|
|
|
VOID DpmiSetFaultHandler(
|
|
VOID
|
|
);
|
|
|
|
VOID DpmiFaultHandlerIret16(
|
|
VOID
|
|
);
|
|
|
|
VOID DpmiFaultHandlerIret32(
|
|
VOID
|
|
);
|
|
|
|
VOID DpmiIntHandlerIret16(
|
|
VOID
|
|
);
|
|
|
|
VOID DpmiIntHandlerIret32(
|
|
VOID
|
|
);
|
|
|
|
VOID DpmiUnhandledExceptionHandler(
|
|
VOID
|
|
);
|
|
|
|
VOID GetFastBopEntryAddress(
|
|
PCONTEXT VdmContext
|
|
);
|