forked from KolibriOS/kolibrios
179 lines
5.2 KiB
Plaintext
179 lines
5.2 KiB
Plaintext
|
;******************************************************************************
|
||
|
;
|
||
|
; (C) Copyright MICROSOFT Corp., 1988-1990
|
||
|
;
|
||
|
; Title: V86MMGR.Inc - Public services for V86MMGR
|
||
|
;
|
||
|
; Version: 2.00
|
||
|
;
|
||
|
; Date: 29-Nov-88
|
||
|
;
|
||
|
; Author: ARR
|
||
|
;
|
||
|
;------------------------------------------------------------------------------
|
||
|
;
|
||
|
; Change log:
|
||
|
;
|
||
|
; DATE REV DESCRIPTION
|
||
|
; ----------- --- -----------------------------------------------------------
|
||
|
; 29-Nov-1988 ARR Original
|
||
|
; 26-Apr-1989 RAL New mapper services
|
||
|
;
|
||
|
;==============================================================================
|
||
|
|
||
|
Begin_Service_Table V86MMGR
|
||
|
|
||
|
V86MMGR_Service V86MMGR_Get_Version, LOCAL
|
||
|
V86MMGR_Service V86MMGR_Allocate_V86_Pages, LOCAL
|
||
|
V86MMGR_Service V86MMGR_Set_EMS_XMS_Limits, LOCAL
|
||
|
V86MMGR_Service V86MMGR_Get_EMS_XMS_Limits, LOCAL
|
||
|
;
|
||
|
; Services used for API mapping.
|
||
|
;
|
||
|
V86MMGR_Service V86MMGR_Set_Mapping_Info, VxD_ICODE
|
||
|
V86MMGR_Service V86MMGR_Get_Mapping_Info
|
||
|
V86MMGR_Service V86MMGR_Xlat_API
|
||
|
V86MMGR_Service V86MMGR_Load_Client_Ptr
|
||
|
V86MMGR_Service V86MMGR_Allocate_Buffer
|
||
|
V86MMGR_Service V86MMGR_Free_Buffer
|
||
|
V86MMGR_Service V86MMGR_Get_Xlat_Buff_State
|
||
|
V86MMGR_Service V86MMGR_Set_Xlat_Buff_State
|
||
|
V86MMGR_Service V86MMGR_Get_VM_Flat_Sel
|
||
|
V86MMGR_Service V86MMGR_Map_Pages
|
||
|
V86MMGR_Service V86MMGR_Free_Page_Map_Region
|
||
|
;***********************************************************
|
||
|
; END OF 3.00 level services
|
||
|
;
|
||
|
V86MMGR_Service V86MMGR_LocalGlobalReg
|
||
|
V86MMGR_Service V86MMGR_GetPgStatus, LOCAL
|
||
|
V86MMGR_Service V86MMGR_SetLocalA20, VxD_ICODE
|
||
|
V86MMGR_Service V86MMGR_ResetBasePages, LOCAL
|
||
|
V86MMGR_Service V86MMGR_SetAvailMapPgs, VxD_ICODE
|
||
|
V86MMGR_Service V86MMGR_NoUMBInitCalls, VxD_ICODE
|
||
|
|
||
|
IFNDEF WIN31COMPAT
|
||
|
|
||
|
; Services added post Win 3.1
|
||
|
V86MMGR_Service V86MMGR_Get_EMS_XMS_Avail, LOCAL
|
||
|
V86MMGR_Service V86MMGR_Toggle_HMA
|
||
|
V86MMGR_Service V86MMGR_Dev_Init, LOCAL
|
||
|
V86MMGR_Service V86MMGR_Alloc_UM_Page, LOCAL
|
||
|
|
||
|
ENDIF ; WIN31COMPAT
|
||
|
|
||
|
ifdef NEC_98
|
||
|
;;V86MMGR_Service V86MMGR_EMM_B0Bank_CHK
|
||
|
V86MMGR_Service V86MMGR_Check_NHSupport, LOCAL
|
||
|
endif
|
||
|
|
||
|
End_Service_Table V86MMGR
|
||
|
|
||
|
;
|
||
|
; BITS of returned EAX flags for V86MMGR_GetPgStatus
|
||
|
;
|
||
|
V86PS_ROM equ 0000000000000001b ; Page contains global ROM
|
||
|
V86PS_RAM equ 0000000000000010b ; Page contains global RAM
|
||
|
V86PS_EMM equ 0000000010000000b ; Page belongs to EMM driver
|
||
|
V86PS_XMS equ 0000000100000000b ; Page belongs to XMS driver
|
||
|
V86PS_MAP equ 0000001000000000b ; Page belongs to mapper
|
||
|
V86PS_UMB equ 0001000000000000b ; Page contains imported UMB
|
||
|
; (Note that V86PS_XMS is not
|
||
|
; necessarily set)
|
||
|
|
||
|
;
|
||
|
; BITS of ECX flags for V86MMGR_Allocate_V86_Pages
|
||
|
;
|
||
|
AV86PLocked EQU 00000000000000000000000000000001B
|
||
|
AV86PLockedBit EQU 0 ; VM memory is to be
|
||
|
; ALWAYS LOCKED regardless of
|
||
|
; pager type or whether VM
|
||
|
; is suspended.
|
||
|
;
|
||
|
; BITS of ECX flags for V86MMGR_Set_EMS_XMS_Limits
|
||
|
;
|
||
|
; NOTE: If neither Limit_DisableHMA or Limit_EnableHMA is set, the HMA
|
||
|
; state is not altered.
|
||
|
;
|
||
|
EMS_XMS_Limit_DisableHMA EQU 00000000000000000000000000000001B
|
||
|
EMS_XMS_Limit_DisableHMABit EQU 0
|
||
|
EMS_XMS_Limit_EnableHMA EQU 00000000000000000000000000000010B
|
||
|
EMS_XMS_Limit_EnableHMABit EQU 1
|
||
|
EMS_XMS_Limit_XMS_Is_Locked EQU 00000000000000000000000000000100B
|
||
|
EMS_XMS_Limit_XMS_Is_LockedBit EQU 2
|
||
|
EMS_XMS_Limit_EMS_Is_Locked EQU 00000000000000000000000000001000B
|
||
|
EMS_XMS_Limit_EMS_Is_LockedBit EQU 3
|
||
|
|
||
|
|
||
|
|
||
|
;
|
||
|
; API mapper equates and macros
|
||
|
;
|
||
|
|
||
|
Xlat_Exec_Int EQU 000h
|
||
|
Xlat_Fixed_Len EQU 001h
|
||
|
Xlat_Var_Len EQU 002h
|
||
|
Xlat_Calc_Len EQU 003h
|
||
|
Xlat_ASCIIZ EQU 004h
|
||
|
Xlat_Jmp_To_Proc EQU 005h
|
||
|
Xlat_Return_Ptr EQU 006h
|
||
|
Xlat_Return_Seg EQU 007h
|
||
|
Xlat_ASCIIZ_InOut EQU 008h
|
||
|
|
||
|
|
||
|
Xlat_API_Exec_Int MACRO Int_Number
|
||
|
db Xlat_Exec_Int
|
||
|
db Int_Number
|
||
|
ENDM
|
||
|
|
||
|
Xlat_API_Fixed_Len MACRO Ptr_Seg, Ptr_Off, Length
|
||
|
db Xlat_Fixed_Len
|
||
|
dw Length
|
||
|
dw (Client_&Ptr_Seg*100h)+Client_&Ptr_Off
|
||
|
ENDM
|
||
|
|
||
|
Xlat_API_Var_Len MACRO Ptr_Seg, Ptr_Off, Len_Reg
|
||
|
db Xlat_Var_Len
|
||
|
db Client_&Len_Reg
|
||
|
dw (Client_&Ptr_Seg*100h)+Client_&Ptr_Off
|
||
|
ENDM
|
||
|
|
||
|
Xlat_API_Calc_Len MACRO Ptr_Seg, Ptr_Off, Calc_Proc_Addr
|
||
|
db Xlat_Calc_Len
|
||
|
dd OFFSET32 Calc_Proc_Addr
|
||
|
dw (Client_&Ptr_Seg*100h)+Client_&Ptr_Off
|
||
|
ENDM
|
||
|
|
||
|
Xlat_API_ASCIIZ MACRO Ptr_Seg, Ptr_Off
|
||
|
db Xlat_ASCIIZ
|
||
|
dw (Client_&Ptr_Seg*100h)+Client_&Ptr_Off
|
||
|
ENDM
|
||
|
|
||
|
Xlat_API_ASCIIZ_InOut MACRO Ptr_Seg, Ptr_Off
|
||
|
db Xlat_ASCIIZ_InOut
|
||
|
dw (Client_&Ptr_Seg*100h)+Client_&Ptr_Off
|
||
|
ENDM
|
||
|
|
||
|
Xlat_API_Jmp_To_Proc MACRO Proc_Name
|
||
|
db Xlat_Jmp_To_Proc
|
||
|
dd OFFSET32 Proc_Name
|
||
|
ENDM
|
||
|
|
||
|
|
||
|
Xlat_API_Return_Ptr MACRO Ptr_Seg, Ptr_Off
|
||
|
db Xlat_Return_Ptr
|
||
|
dw (Client_&Ptr_Seg*100h)+Client_&Ptr_Off
|
||
|
ENDM
|
||
|
|
||
|
Xlat_API_Return_Seg MACRO Ptr_Seg
|
||
|
db Xlat_Return_Seg
|
||
|
db Client_&Ptr_Seg
|
||
|
ENDM
|
||
|
|
||
|
;
|
||
|
; The V86MMGR does W386_Device_Broadcast call outs. The 'subfunction' number
|
||
|
; for these call outs is contained in the CX register. These are the equates
|
||
|
; for the subfunction numbers.
|
||
|
;
|
||
|
V86CallOut_LclA20forGlblHMA equ 0 ; Should A20 state be local
|
||
|
; even if HMA is GLOBAL?
|