101 lines
3.0 KiB
PHP
101 lines
3.0 KiB
PHP
COMMENT #
|
|
//***************************************************************************
|
|
//
|
|
//
|
|
//
|
|
// Microsoft Confidential
|
|
// Copyright (c) Microsoft Corporation 1992-1993
|
|
// All rights reserved
|
|
//
|
|
// Include file for using DPMI functionality in Windows.
|
|
//
|
|
//***************************************************************************
|
|
END COMMENT #
|
|
|
|
|
|
DPMI EQU 031h ; DPMI interrupt vector
|
|
ALLOC_LDT_DESC EQU 0000h
|
|
SEG_TO_DESC EQU 0002h
|
|
SET_SEG_BASE_ADDR EQU 0007h
|
|
SET_SEG_LIMIT EQU 0008h
|
|
ALLOC_DOS_MEM_BLOCK EQU 0100h
|
|
FREE_DOS_MEM_BLOCK EQU 0101h
|
|
SET_REALMODE_INTVEC EQU 0201h
|
|
GET_REALMODE_INTVEC EQU 0200h
|
|
SIMULATE_RELMODE_INT EQU 0300h
|
|
CALL_REALMODE_PROC EQU 0301h
|
|
|
|
; ***************************************************************************
|
|
|
|
EXTERNDEF C IsWindows:WORD
|
|
EXTERNDEF C IntVector:WORD
|
|
EXTERNDEF C DosMem:DWORD
|
|
|
|
; ***************************************************************************
|
|
|
|
; Macro for simulating a real mode interrupt from protect mode using DPMI.
|
|
; Before invoking the macro the registers should be setup for the desired
|
|
; real mode interrupt call. All register pointer must be to real mode
|
|
; memory obtained via DPMI.
|
|
|
|
; ***************************************************************************
|
|
|
|
DpmiInt MACRO Vector:REQ
|
|
LOCAL IsDos ; Local label
|
|
LOCAL EndMacro ; Local labe
|
|
|
|
cmp IsWindows, 0 ; See if a Windows app
|
|
je IsDos ; If not not Windows use DOS int
|
|
|
|
mov IntVector, Vector ; Set vector to simulate
|
|
call GenericDpmi ; Call generic DPMI function
|
|
jmp SHORT EndMacro
|
|
|
|
IsDos:
|
|
int Vector ; Do DOS interrupt
|
|
|
|
EndMacro:
|
|
|
|
ENDM
|
|
|
|
; ***************************************************************************
|
|
|
|
; Real Mode call structure for Simulating Real Mode Interrupts using DPMI
|
|
|
|
; ***************************************************************************
|
|
|
|
RealModeCallStruc Struc
|
|
|
|
RegEDI dd ?
|
|
RegESI dd ?
|
|
RegEBP dd ?
|
|
Regres dd ?
|
|
RegEBX dd ?
|
|
RegEDX dd ?
|
|
RegECX dd ?
|
|
RegEAX dd ?
|
|
RegFlg dw ?
|
|
RegES dw ?
|
|
RegDS dw ?
|
|
RegFS dw ?
|
|
RegGS dw ?
|
|
RegIP dw ?
|
|
RegCS dw ?
|
|
RegSP dw ?
|
|
RegSS dw ?
|
|
|
|
RealModeCallStruc Ends
|
|
|
|
|
|
; ***************************************************************************
|
|
|
|
; Real Mode call structure for Simulating Real Mode Interrupts using DPMI
|
|
|
|
; ***************************************************************************
|
|
|
|
@proto_100 TYPEDEF PROTO C
|
|
GenericDpmi PROTO @proto_100
|
|
|
|
@proto_101 TYPEDEF PROTO C
|
|
DpmiDskRdWr PROTO @proto_101
|