home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-03-12 | 34.4 KB | 1,013 lines |
- ; SCCSID = @(#)vdmm.inc 6.1 92/03/25
- ;*** VDMM.INC
- ;
- ;
- ;
- ; Copyright (c) IBM Corporation 1987, 1992
- ;
- ; All Rights Reserved
- ; For include file hierarchy, see MVDM.INC
- ;
- ; Title:
- ; VDMM exports
- ;
- ; Description:
- ; VDM Manager Exported Definitions
- ;
-
- ;***************************************
- ; VDMM Defines
- ;***************************************
-
-
- CURRENT_VDM EQU (0)
-
- ;*** VDHAllocMem: flOptions
-
- VDHAM_FIXED EQU 00000h
- VDHAM_SWAPPABLE EQU 00001h
-
-
-
- ;*** VDHAllocPage: flOptions values
-
- VDHAP_SPECIFIC EQU 00001h
- VDHAP_SYSTEM EQU 00002h
- VDHAP_FIXED EQU 00004h
- VDHAP_SWAPPABLE EQU 00000h
- VDHAP_PHYSICAL EQU 00008h
-
-
-
- ;*** VDHMapPages: flOptions values
-
- VDHMT_INVALID EQU 00001h
- VDHMT_LINEAR EQU 00002h
- VDHMT_PHYSICAL EQU 00003h
- VDHMT_BLACK_HOLE EQU 00004h
-
-
- ;*** VDHInstallFaultHook: flOptions values
-
- VDHIFH_ADDR EQU 00001h
-
-
- ;*** VDHAllocMem Flags: flOptions Value
-
- VDHCBP_SWAPPABLE EQU 00001h
-
-
- ;*** VDHSetPriority: flClass values
-
- VDHSP_NO_CHANGE EQU 000000000h
- VDHSP_IDLE EQU 000000001h
- VDHSP_REGULAR EQU 000000002h
- VDHSP_TIME_CRITICAL EQU 000000003h
- VDHSP_SERVER EQU 000000004h
- VDHSP_SIMULATED_INTERRUPT EQU 000000005h
-
- VDHSP_CLASS_MASK EQU 00000ffffh
- VDHSP_NUM_CLASSES EQU 5
-
- VDHSP_DEFAULT_ACTION EQU 000000000h
- VDHSP_START_USE EQU 000010000h
- VDHSP_CONTINUE_USE EQU 000020000h
- VDHSP_END_USE EQU 000030000h
-
- VDHSP_ACTION_MASK EQU 0ffff0000h
-
-
- ;*** VDHYield - flags
-
- VDH_YIELD_TIME_CRITICAL EQU 1
-
-
- ;*** VDHLockMem flags - flOptions
-
- VDHLM_RESIDENT EQU 00000h
- VDHLM_READ EQU 00001h
- VDHLM_WRITE EQU 00002h
- VDHLM_CONTIGUOUS EQU 00004h
- VDHLM_NOBLOCK EQU 00008h
- VDHLM_16M EQU 00010h
-
- VDHLM_NO_ADDR EQU -1
-
-
- VDH_FAILURE EQU 0
- VDH_SUCCESS EQU 1
-
- ;*** VDM States and VDD Exit defines
- ;
- ; These are VDM states for which VDDs get notification. Few of them
- ; like PDB_* are not truely VDM state changes but they are useful
- ; events for which few VDDs may be intereseted. For arguments passed
- ; and callable contexts see VDHInstallUserHook.
- ;
-
- VDM_CREATE EQU 0 ;A VDM is being created
- VDM_TERMINATE EQU 1 ;A VDM is being terminated
- VDM_FOREGROUND EQU 2 ;A VDM coming to foreground
- VDM_BACKGROUND EQU 3 ;A VDM going to background
- VDD_EXIT EQU 4 ;MVDM shutting down
- VDM_VDD_CREATE_DONE EQU 5 ;Called Soon after VDM_CREATE
- VDM_PDB_DESTROY EQU 6 ;A PDB destroyed in a VDM
- VDM_PDB_CHANGE EQU 7 ;A new PDB is switched to
- VDM_CODEPAGE_CHANGE EQU 8 ;A new code page is activated
- VDM_TITLE_CHANGE EQU 9 ;VDM Title change event
- VDM_MEMORY_MAPPED_IN EQU 10 ;Memory mapped in
- VDM_MEMORY_UN_MAPPED EQU 11 ;Memory unmapped
- VDM_CREATE_DONE EQU 12 ;VDM created successfully
-
-
- ;*** VDHPopup Flags
-
- VDHP_FAIL EQU 00001h
- VDHP_TERMINATE_SESSION EQU 00002h
- VDHP_RETRY EQU 00004h
- VDHP_IGNORE EQU 00008h
-
-
- ;*** VDHOpen: ActionTaken Flags
-
- VDHOPEN_FILE_EXISTED EQU 00001h
- VDHOPEN_FILE_CREATED EQU 00002h
- VDHOPEN_FILE_TRUNCATED EQU 00003h
-
-
- ;*** VDHOpen: FileAttribute Flags
-
- VDHOPEN_FILE_NORMAL EQU 00000h
- VDHOPEN_FILE_READONLY EQU 00001h
- VDHOPEN_FILE_HIDDEN EQU 00002h
- VDHOPEN_FILE_SYSTEM EQU 00004h
- VDHOPEN_FILE_DIRECTORY EQU 00010h
- VDHOPEN_FILE_ARCHIVED EQU 00020h
-
-
- ;*** VDHOpen: OpenFlag Flags
-
- VDHOPEN_FILE_OPEN EQU 00001h
- VDHOPEN_FILE_REPLACE EQU 00002h
- VDHOPEN_FILE_CREATE EQU 00010h
-
- ; this nibble applies if file already exists xxxx
-
- VDHOPEN_ACTION_FAIL_IF_EXISTS EQU 00000h ;---- ---- ---- 0000
- VDHOPEN_ACTION_OPEN_IF_EXISTS EQU 00001h ;---- ---- ---- 0001
- VDHOPEN_ACTION_REPLACE_IF_EXISTS EQU 00002h ;---- ---- ---- 0010
-
- ; this nibble applies if file does not exist xxxx
-
- VDHOPEN_ACTION_FAIL_IF_NEW EQU 00000h ;---- ---- 0000 ----
- VDHOPEN_ACTION_CREATE_IF_NEW EQU 00010h ;---- ---- 0001 ----
-
-
- ;*** VDHOpen: OpenMode Flags
-
- VDHOPEN_ACCESS_READONLY EQU 00000h ;---- ---- ---- -000
- VDHOPEN_ACCESS_WRITEONLY EQU 00001h ;---- ---- ---- -001
- VDHOPEN_ACCESS_READWRITE EQU 00002h ;---- ---- ---- -010
- VDHOPEN_SHARE_DENYREADWRITE EQU 00010h ;---- ---- -001 ----
- VDHOPEN_SHARE_DENYWRITE EQU 00020h ;---- ---- -010 ----
- VDHOPEN_SHARE_DENYREAD EQU 00030h ;---- ---- -011 ----
- VDHOPEN_SHARE_DENYNONE EQU 00040h ;---- ---- -100 ----
- VDHOPEN_FLAGS_NOINHERIT EQU 00080h ;---- ---- 1--- ----
- VDHOPEN_FLAGS_NO_LOCALITY EQU 00000h ;---- -000 ---- ----
- VDHOPEN_FLAGS_SEQUENTIAL EQU 00100h ;---- -001 ---- ----
- VDHOPEN_FLAGS_RANDOM EQU 00200h ;---- -010 ---- ----
- VDHOPEN_FLAGS_RANDOMSEQUENTIAL EQU 00300h ;---- -011 ---- ----
- VDHOPEN_FLAGS_NO_CACHE EQU 01000h ;---1 ---- ---- ----
- VDHOPEN_FLAGS_FAIL_ON_ERROR EQU 02000h ;--1- ---- ---- ----
- VDHOPEN_FLAGS_WRITE_THROUGH EQU 04000h ;-1-- ---- ---- ----
- VDHOPEN_FLAGS_DASD EQU 08000h ;1--- ---- ---- ----
- VDHOPEN_FLAGS_NONSPOOLED EQU 000040000h
-
-
- ;*** VDHSeek: ultype options
-
- VDHSK_ABSOLUTE EQU 0
- VDHSK_CURRENT_POSITION EQU 1
- VDHSK_END_OF_FILE EQU 2
-
-
- ;*** VDHPhysicalDisk: functions
-
- VDHPHYD_GET_DISKS EQU 1
- VDHPHYD_GET_HANDLE EQU 2
- VDHPHYD_RELEASE_HANDLE EQU 3
-
-
- ;*** VDHCreateSem Flags
-
- VDH_EVENTSEM EQU 00000h
- VDH_MUTEXSEM EQU 00001h
-
-
- ;*** VDHArmTimerHook Flags
-
- VDH_TIMER_INTERRUPT_HOOK EQU (1)
- VDH_TIMER_GLOBAL_CONTEXT EQU (-1)
-
- ;*** VDHQuerySysValue ordinals
-
- ; Global Values Ordinal Type Units Range
-
- VDHGSV_DAY EQU 0 ;ULONG days 1 <= x <= 31
- VDHGSV_MONTH EQU 1 ;ULONG months 1 <= x <= 12
- VDHGSV_YEAR EQU 2 ;ULONG years 1980 <= x <= MAXULONG
- VDHGSV_DAYOFWEEK EQU 3 ;ULONG days 0 <= x <= 6
- VDHGSV_HOUR EQU 4 ;ULONG hours 0 <= x < 24
- VDHGSV_MINUTE EQU 5 ;ULONG minutes 0 <= x < 60
- VDHGSV_SECOND EQU 6 ;ULONG secs 0 <= x < 60
- VDHGSV_HUNDREDTH EQU 7 ;ULONG 1/100s 0 <= x < 100
- VDHGSV_SECONDS1970 EQU 8 ;ULONG secs 0 <= x <= MAXULONG
- VDHGSV_TIMEZONE EQU 9 ;ULONG minutes 0 <= x <= MAXULONG
- VDHGSV_MSECSBOOT EQU 10 ;ULONG ms 0 <= x <= MAXULONG
- VDHGSV_TIMERINTERVAL EQU 11 ;ULONG ms 0 <= x <= 1000
- VDHGSV_DYNVARIATION EQU 12 ;BOOL TRUE/FALSE
- VDHGSV_MAXWAIT EQU 13 ;ULONG secs 0 <= x <= MAXULONG
- VDHGSV_MINTIMESLICE EQU 14 ;ULONG ms 0 <= x <= MAXULONG
- VDHGSV_MAXTIMESLICE EQU 15 ;ULONG ms 0 <= x <= MAXULONG
- VDHGSV_YIELD EQU 16 ;BOOL TRUE/FALSE
- VDHGSV_TCYIELD EQU 17 ;BOOL TRUE/FALSE
- VDHGSV_VERMAJOR EQU 18 ;ULONG 0 <= x <= MAXULONG
- VDHGSV_VERMINOR EQU 19 ;ULONG 0 <= x <= MAXULONG
- VDHGSV_VERREVISION EQU 20 ;CHAR A <= x <= Z
- VDHGSV_MACHINETYPE EQU 21 ;ULONG MACHINE_TYPE_*
- VDHGSV_BLACKHOLEADDR EQU 22 ;PVOID bytes 0 <= x <= MAXULONG
- VDHGSV_BLACKHOLESIZE EQU 23 ;ULONG bytes 0 <= x <= MAXULONG
- VDHGSV_FGNDSESSIONID EQU 24 ;ULONG 0 <= x < MAXSESSIONS
- VDHGSV_MAXFPSESSIONS EQU 25 ;ULONG ;TO BE DELETED
- VDHGSV_MAXWPSESSIONS EQU 26 ;ULONG ;TO BE DELETED
- VDHGSV_MAXPMSESSIONS EQU 27 ;ULONG ;TO BE DELETED
- VDHGSV_RESERVESESSIONS EQU 28 ;Reserved ;TO BE DELETED
- VDHGSV_ARPLADDR EQU 29 ;ULONG
- VDHGSV_MACHINEINFO EQU 30 ;ULONG ptr to System Configuration Table
- VDHGSV_PPOSREGS EQU 31 ;ULONG pointer to POS Regs structure
- VDHGSV_PICMASK EQU 32 ;ULONG original PIC mask values 6.13
- VDHGSV_IRETADDR EQU 33 ;ULONG address of IRET in ROM
- ; if you add a new entry, please update GSVMAX in src\dos\mvdm\vdmvdh.inc
-
- ; Local Values Ordinal Type Units Range
-
- VDHLSV_HVDM EQU 4096 ;HVDM
- VDHLSV_PID EQU 4097 ;PID
- VDHLSV_PCRF EQU 4098 ;PCRF
- VDHLSV_SESSIONID EQU 4099 ;ULONG N <= x < MAXSESSIONS
- VDHLSV_FOREGROUND EQU 4100 ;BOOL TRUE/FALSE
- VDHLSV_RMSIZE EQU 4101 ;ULONG kbytes 0 < x <= 640
- VDHLSV_CODEPAGEID EQU 4102 ;ULONG See DosGetCP
- VDHLSV_PRIORITYCLASS EQU 4103 ;ULONG See VDHSetPriority
- VDHLSV_PRIORITYLEVEL EQU 4104 ;ULONG See VDHSetPriority
- VDHLSV_VPICBASE EQU 4105 ;UCHAR[4]
-
-
- ; Locations of base vectors in PIC base vector array returned from
- ; VDHQuerySysValue
- ;
-
- VPMMASTER_PORT_INDEX EQU 0
- VPMSLAVE_PORT_INDEX EQU 1
-
-
-
- ;*** Return values for VDHGSV_MACHINETYPE
-
- MACHINE_TYPE_AT EQU 1
- MACHINE_TYPE_PS2 EQU 2
- MACHINE_TYPE_PARKCITY EQU 3
-
-
- ;*** Timeout values for semaphore services
-
- SEM_INDEFINITE_WAIT EQU -1
- SEM_IMMEDIATE_RETURN EQU 0
-
-
- ;*** VDD-to_PDD commands (used internally during VDHOpenPDD)
-
- PDDCMD_REGISTER EQU 0 ;to register VDD entry point with PDD
- PDDCMD_DEREGISTER EQU 1 ;To deregister a VDD at MVDM shutdown
-
-
- ;*** VDHDecodeProperty defines **
- VDH_DP_DECIMAL EQU 10
- VDH_DP_HEX EQU 16
-
-
- ;***************************************
- ; VDMM Data Types
- ;***************************************
-
-
- ;*** MISC VDMM data types
- ;
- DefType HVDM,HANDLE
- DefType PHVDM,dd
- DefType HBLOCK,HANDLE ;Block pool handle
- DefType HLOCK,ULONG ;Memory lock handle
- DefType HVDD,ULONG ;VDD Handle
- DefType PPSZ,dd ;Pointer to PSZ
- DefType PHVDD,dd ;VDD Handle Pointer
- DefType VDHSEM,ULONG ;It should be VOID
- DefType HVDHSEM,dd ;but vddvdh.inc has
- DefType PHVDHSEM,dd ;problems with it
- DefType PFAULTHOOK,dd
- DefType PTIMERHOOK,dd
-
-
- ;*** HHOOK - hook handle
- ;
- ; This is the handle return from the VDHAllocHook and used with
- ; the VDHArm functions.
- ;
-
- DefType HHOOK,PVOID ;hook handle
- DefType PHHOOK,dd ;pointer to hook handle
-
-
-
- ;*** Pointer types for VDD-PDD communication and V86 address manipulation
- ;
-
- DefType F16PVOID,dd ;f16p (pseudo 16:16 pointer)
-
- FARV86 EQU <NEAR> ;(pseudo-V86 modifier)
- DefType VPVOID,dd ;vp (pseudo-V86 pointer)
- DefType PVPVOID,dd ;pvp
-
-
-
-
- ;*** FNPDD - PDD function for "standard" VDD-to-PDD communication
- ;
- ; ENTRY
- ; ulFun - function code
- ;
- ; ul1 - function-specific
- ; if a pointer, it will generally be 16:16, and
- ; will generally be an input buffer, the first
- ; word of which is the length of the entire buffer
- ;
- ; ul2 - function-specific
- ; if a pointer, it will generally be 16:16, and
- ; will generally be an output buffer, the first
- ; word of which is the length of the entire buffer
- ;
- ; if uFunc == PDDCMD_REGISTER (from VDM Manager during VDHOpenPDD)
- ; ul1.off == VDD's CS
- ; ul1.sel == zero
- ; ul2.off == low 16-bits of EIP for VDD entry point
- ; ul2.sel == high 16-bits of EIP for VDD entry point
- ;
- ; EXIT
- ; SUCCESS
- ; !0
- ; FAILURE
- ; 0 (the nature of the failure, such as an error code,
- ; if needed, should be returned in the ul2 output buffer)
- ;
- ; CALLING CONVENTIONS
- ; 32-bit PASCAL calling conventions. More specifically:
- ;
- ; Parameters are pushed on the stack from left to right, and are
- ; removed by the callee. The callee preserves EBX, ESI, EDI, EBP,
- ; DS and ES. Assuming the PDD function is completely 16-bit
- ; (with the exception of any 16:32 calls back to the VDD, and the
- ; 16:32 RETFD to return to the VDD), the high words of all the
- ; extended registers are preserved by virtue of being unused by the
- ; PDD. Therefore, only BX, SI, DI, BP, DS and ES need to be explicitly
- ; preserved.
- ;
- ; Furthermore, the PDD is responsible for loading its own DS. To
- ; do this, it must have a word in its code segment fixed-up to contain
- ; its data segment selector.
- ;
- ; The return code from the PDD must be in AX 0 implies failure,
- ; whereas a non-zero (generally meaningful) value implies success.
- ;
-
- DefType FPFNPDD,dq ;fpfnpdd
-
-
- ;*** FNVDD - VDD function for "standard" PDD-to-VDD communication
- ;
- ; ENTRY
- ; ulFun - function code
- ;
- ; ul1 - function-specific
- ; if a pointer, it will generally be 16:16, and
- ; will generally be an input buffer, the first
- ; word of which is the length of the entire buffer
- ;
- ; ul2 - function-specific
- ; if a pointer, it will generally be 16:16, and
- ; will generally be an output buffer, the first
- ; word of which is the length of the entire buffer
- ;
- ; EXIT
- ; SUCCESS
- ; !0
- ; FAILURE
- ; 0 (the nature of the failure, such as an error code,
- ; if needed, should be returned in the ul2 output buffer)
- ;
- ; CALLING CONVENTIONS
- ; 32-bit PASCAL calling conventions. More specifically:
- ;
- ; Parameters are pushed on the stack from left to right, and are
- ; removed by the callee. The callee must preserve EBX, ESI, EDI, EBP,
- ; DS and ES.
- ;
- ; Furthermore, the VDD is responsible for loading its own DS and ES.
- ; In C, this would be a "_loadds" function (or any function in a module
- ; compiled with the Au rather than Aw option).
- ;
- ; The return code from the VDD must be in AX 0 implies failure,
- ; whereas a non-zero (generally meaningful) value implies success.
- ;
-
- DefType FPFNVDD,dq ;fpfnvdd
-
-
-
- VDDREQ_PASS EQU -1
-
- ;*** FNSYSREQ - DOS32RequestVDD VDD function-type
- ;
- ; ENTRY
- ; sgid - screen group
- ; ulFun - function code
- ; nbIn - Input buffer size, in bytes (0 if no input buffer)
- ; pIn - Input buffer
- ; nbOut - Output buffer size, in bytes (0 if no output buffer)
- ; pOut - Output buffer
- ; EXIT
- ; SUCCESS
- ; Zero
- ; FAILURE
- ; Error code, or -1 to pass control to next VDD
- ;
- ; CALLING CONVENTIONS
- ; 32-bit small-model PASCAL calling conventions. More specifically:
- ;
- ; Parameters are pushed on the stack from left to right, and are
- ; removed by the callee. The callee will preserve EBX, ESI, EDI, EBP,
- ; DS and ES. DS is assumed to contain the callee's DGROUP selector
- ; on entry. EAX must be set to the return code on exit.
- ;
-
- DefType PFNSYSREQ,dd
-
-
- ;*** FNDEVREQ - VDHRequestVDD VDD function-type
- ;
- ; ENTRY
- ; hvdm - handle to vdm
- ; ulFun - function code
- ; ul1 - function-specific
- ; if a pointer, it will generally be 0:32, and
- ; will generally be an input buffer if the size of the
- ; buffer is not implied, the first dword of the buffer should
- ; contain a total size
- ; ul2 - function-specific
- ; if a pointer, it will generally be 0:32, and
- ; will generally be an output buffer if the size of the
- ; buffer is not implied, the first dword of the buffer should
- ; contain a total size
- ; EXIT
- ; SUCCESS
- ; Non-zero value (other than -1)
- ; FAILURE
- ; FALSE, or -1 to pass control to next VDD (in the first case,
- ; the VDD should use VDHSetError to describe the error condition)
- ;
- ; CALLING CONVENTIONS
- ; 32-bit small-model PASCAL calling conventions. More specifically:
- ;
- ; Parameters are pushed on the stack from left to right, and are
- ; removed by the callee. The callee will preserve EBX, ESI, EDI, EBP,
- ; DS and ES. DS is assumed to contain the callee's DGROUP selector
- ; on entry. EAX must be set to the return code on exit.
- ;
-
- DefType PFNDEVREQ,dd
-
-
-
- ;*** PFNVDHRP - VDD property function
- ;
- ; This function performs property setting and validation.
- ;
- ; The set operation may be requested at any time after a VDM is created.
- ;
- ; The Validation operation may be requested at any time (even before
- ; the a VDM is created. Validation will be requested only for
- ; VDMP_STRING and VDMP_MLSTR types, since all other types can be
- ; validated using the information supplied by VDHRegisterProperty.
- ;
- ; ENTRY op = Operation to perform (enumeration)
- ; VDHPROP_VALIDATE
- ; Validate property for any process. Only called
- ; for VDMP_STRING and VDMP_MLSTR properties.
- ; VDHPROP_SET
- ; Set an already validated property for specified
- ; HVDM. The return code is ignored.
- ; hvdm = Handle of VDM. Undefined if op = VDHPROP_VALIDATE.
- ; cb = Count of bytes pointed to by pch.
- ; Value depends upon proptype:
- ; VDMPROP_BOOL
- ; Undefined.
- ; VDMPROP_INT
- ; Undefined.
- ; VDMPROP_ENUM
- ; Length of ASCIIZ string, including NULL terminator.
- ; VDMPROP_STRING
- ; Length of ASCIIZ string, including NULL terminator.
- ; VDMPROP_MLSTR
- ; Length of ASCIIZ string, including NULL terminator.
- ;
- ; pch = Value to set/validate.
- ; The format depends on the proptype:
- ; VDMPROP_BOOL
- ; pch is interpreted as a BOOL.
- ; Value 0 is FALSE !0 is TRUE.
- ; VDMPROP_INT
- ; pch is interpreted as a ULONG. It is guaranteed
- ; to meet the registered bounds.
- ; VDMPROP_ENUM
- ; pch points to an ASCIIZ string. It is guaranteed
- ; to be one of the registered enumeration strings.
- ; VDMPROP_STRING
- ; pch points to an ASCIIZ string. It is guaranteed
- ; to be less than or equal to the registered maximum
- ; string length.
- ; VDMPROP_MLSTR
- ; pch points to an ASCIIZ string. Multiple lines
- ; are separated by a line feed (00Ah). It is
- ; guaranteed to be less than or equal to the
- ; registered maximum string length.
- ;
- ;
- ; EXIT-SUCCESS
- ; returns 0
- ;
- ; EXIT-FAILURE
- ; returns non-zero error code
- ; ERROR_INVALID_DATA
- ; This should be returned if the value is not valid.
- ;
- ; CONTEXT
- ; Task
- ;
-
- DefType PFNVDHRP,dd
-
-
-
- ;*** PENUMHOOK - VDD hooks for VDHEnumerateVDMs
- ;
- ; ENTRY
- ; hvdm - VDM handle
- ; ulData - Handler data
- ;
- ; EXIT
- ; SUCCESS
- ; TRUE
- ; FAILURE
- ; FALSE
- ;
- ; CALLING CONVENTIONS
- ; 32-bit small-model PASCAL calling conventions. More specifically:
- ;
- ; Parameters are pushed on the stack from left to right, and are
- ; removed by the callee. The callee will preserve EBX, ESI, EDI, EBP,
- ; DS and ES. DS is assumed to contain the callee's DGROUP selector
- ; on entry. EAX must be set to the return code on exit.
- ;
-
- DefType PENUMHOOK,dd ;penumh
-
-
-
- ;*** USERHOOK - VDD user-event-hook function
- ;
- ; ENTRY
- ; hvdm - VDM handle
- ;
- ; EXIT
- ; SUCCESS
- ; !0
- ; FAILURE
- ; 0 (failure is only support for the VDM_CREATE hook, and
- ; implies that the VDD cannot support/sustain another VDM).
- ;
- ; CALLING CONVENTIONS
- ; 32-bit small-model PASCAL calling conventions. More specifically:
- ;
- ; Parameters are pushed on the stack from left to right, and are
- ; removed by the callee. The callee will preserve EBX, ESI, EDI, EBP,
- ; DS and ES. DS is assumed to contain the callee's DGROUP selector
- ; on entry. EAX must be set to the return code on exit.
- ;
-
- DefType PUSERHOOK,dd ;puserh
-
-
-
- ;*** VDHPAGELIST - structure to describe dis-contiguous physical ranges
- ; for VDHLockMem
- ;
- ; vdhpl_paddr - base physical address of one range
- ; vdhpl_cb - bytes contiguously mapped from vdhpl_paddr
- ;
- DefStruc ,VDHPageList_s ;vdhpl
- ULONG vdhpl_paddr
- ULONG vdhpl_cb
- EndStruc VDHPAGELIST
- DefType PVDHPAGELIST,dd ;pvdhpl
-
-
- ;*** VDHMAPTARGET - target area definition for VDHMapPages
- ;
- ; vdhmt_laddr - Target address in V86-space (0 <= vdhmt_laddr < 1M+64K)
- ; to be mapped.
- ; vdhmt_cpg - Count of pages to map
- ; vdhmt_hmap - Mapping handle
- ;
- DefStruc ,VDHMapTarget_s ;vdhmt
- ULONG vdhmt_laddr ;address in v86-space for mapping
- ULONG vdhmt_cpg ;count of pages to map
- ULONG vdhmt_hmap ;handle of mapping. Must be zero on first call
- ;to VDHMapPages for region.
- EndStruc VDHMAPTARGET
- DefType PVDHMAPTARGET,dd ;pvdhmt
-
-
-
- ;*** VDHMAPSOURCE - source area definition for VDHMapPages
- ;
- ; vdhms_laddr - Source address to be mapped.
- ; vdhms_hobj - Object handle.
- ;
- DefStruc ,VDHMapSource_s ;vdhms
- ULONG vdhms_laddr ;linear address of source memory object
- ULONG vdhms_hobj ;memory object handle
- EndStruc VDHMAPSOURCE
- DefType PVDHMAPSOURCE,dd ;pvdhms
-
-
-
- ;*** VDHQuerySem: SemState structure
-
- DefStruc ,VDHSemState_s
- UCHAR vss_SemType ;VDH_EVENTSEM/VDH_MUTEXSEM
- UCHAR vss_fOwned ;0 -> Not Owned; 1 -> Owned
- USHORT vss_fWaiter ;0 -> No one waiting; 1 -> Waiting
- USHORT vss_cRequest ;request count in mutex case
- TID vss_tid ;tid of the owner if owned
- EndStruc VDHSEMSTATE
-
- DefType PVDHSEMSTATE,dd
-
-
- ; Defines for POS Registers
- POS_MAX_SIZE EQU 8 ;Count of POS registers
- POS_MAX_SLOT EQU 8 ;Maximum number of slots in machine
- POS_CEN_ARB_REG EQU 090h ;Central Arbitration register
- POS_SEL_FDBK_REG EQU 091h ;Card Selected Feedback
- POS_SYS_CTRLA_REG EQU 092h ;System Control Port A
- POS_SYS_SETUP_REG EQU 094h ;System setup/enable register
- POS_ADP_SETUP_REG EQU 096h ;Adapter setup/enable register
- POS_BASE_REG EQU 0100h ;Base POS register
- POS_TOP_REG EQU 0107h ;Highest POS Register
- POS_NULLPORT EQU 0FFh ;null value for ports not active
- POS_CARDFEEDBACK EQU 0FEh ;pretend to send back card selected
- POS_PLANAR_SELECT EQU 080h ;port 94 bit value to select planar
- POS_VIDEO_SELECT EQU 020h ;port 94 bit value to select video
- POS_OPTION_SELECT EQU 008h ;port 96 bit value to select card
-
- ; Structure for POS Registers
-
- DefStruc ,_POS_s
- _BYTE aPOSReg,,POS_MAX_SIZE
- EndStruc POS_s
- DefType PPOS,dd
-
- DefStruc ,_POSREGS
- POS_s VideoPOS ;Video POS data
- POS_s PlanarPOS ;Planar POS data
- POS_s SlotPOS,,POS_MAX_SLOT ;Adapter POS data
- _BYTE Port90 ;Central Arbiter
- _BYTE Port92 ;System Control Port A
- _BYTE Port94 ;System setup/enable reg
- _BYTE Port96 ;Adapter setup/enable reg
- EndStruc POSREGS
- DefType PPOSREGS,dd
-
- DefStruc ,_SYS_CONFIG_TABLE
- USHORT Reserve ;Reserved
- _BYTE Model ;Model byte
- _BYTE Submodel ;Submodel byte
- _BYTE BIOS_revision ;BIOS revision level
- _BYTE Reserve1 ;Reserved
- _BYTE Reserve2 ;Reserved
- _BYTE Reserve3 ;Reserved
- _BYTE Reserve4 ;Reserved
- _BYTE Reserve5 ;Reserved
- EndStruc SYS_CONFIG_TABLE
- DefType PSYS_CONFIG_TABLE,dd
-
- ; VDD initialization routine prototype
-
- EXPENTRY VDDInit <PSZ>
-
-
- ;***************************************
- ; VDMM Macros
- ;***************************************
-
-
- ; Accessing VDM data:
- ;
- ; If the context is the desired VDM, then the following works for
- ; ROM BIOS data area access, using the dynamically-fixed-up-to-zero
- ; VDMBase data structure:
- ;
- ; VDMBase.rb_field = 0
- ;
- ; For instance data, if you put all of it inside a structure, the instance
- ; of which is VDMData, and create a type, PVDMDATA, that points to such a
- ; structure, you can reference instance data like so:
- ;
- ; VDMData.fFgnd = TRUE
- ;
- ; And if you have a PVOID (p) created with PFROMVP or PFROMVADDR, use:
- ;
- ; *(PBYTE)p = 0
- ;
- ;
- ; If the context is NOT the desired VDM, then you have to use the
- ; VDM's handle (hvdm). For ROM BIOS data area access, use the "pVDMBase"
- ; macro:
- ;
- ; pVDMBase(hvdm)->rb_field = 0
- ;
- ; For instance data, reference similarly with the "pVDMData" macro:
- ;
- ; pVDMData(hvdm)->fFgnd = TRUE
- ;
- ; And if you have a PVOID (p) created with PFROMVP or PFROMVADDR, you can
- ; use the "pVDM" macro to convert the pointer to one that is valid for the
- ; given VDM and of the given type:
- ;
- ; *pVDM(hvdm,PBYTE,p) = 0
- ;
- ; An alternative to "pVDMData" (but not preferred, because it is less
- ; maintainable and overrides type-checking) if you don't want to put all
- ; your instance data in a structure, is:
- ;
- ; REFHVDM(hvdm,BOOL,VDMData.fFgnd) = TRUE
- ;
- ; Note that for any *resident* instance data, the same guidelines apply
- ; simply substitute VDMRESDATA for VDMDATA.
- ;
-
-
- ifdef VDHSTRICT
- ASSERTTASK macro
- PCall VDHAssertTask
- endm
- ASSERTVDMTASK macro
- PCall VDHAssertVDMTask
- endm
- ASSERTTASKONLY macro
- PCall VDHAssertTaskOnly
- endm
- ASSERTVDMTASKONLY macro
- PCall VDHAssertVDMTaskOnly
- endm
- ASSERTINITONLY macro
- PCall VDHAssertInitOnly
- endm
- CHECKHVDM macro hvdm
- PCall VDHCheckHVDM, hvdm
- endm
- else
- ASSERTTASK macro
- endm
- ASSERTVDMTASK macro
- endm
- ASSERTTASKONLY macro
- endm
- ASSERTVDMTASKONLY macro
- endm
- ASSERTINITONLY macro
- endm
- CHECKHVDM macro hvdm
- endm
- endif
-
-
- ;***************************************
- ; VDMM Function Prototype
- ;***************************************
-
-
- ; Memory Management Function Prototypes
-
- VDHENTRY VDHAllocMem <ULONG cb, ULONG flOptions>
- VDHENTRY VDHFreeMem <PVOID>
- VDHENTRY VDHAllocDosMem <ULONG cb>
- VDHENTRY VDHCreateBlockPool <ULONG cbBlock, ULONG flOptions>
- VDHENTRY VDHAllocBlock <HBLOCK>
- VDHENTRY VDHFreeBlock <HBLOCK,PVOID>
- VDHENTRY VDHDestroyBlockPool <HBLOCK>
- VDHENTRY VDHCopyMem <PVOID,PVOID,ULONG>
- VDHENTRY VDHExchangeMem <PVOID,PVOID,ULONG>
- VDHENTRY VDHLockMem <PVOID,ULONG,ULONG,PVOID,PVOID>
- VDHENTRY VDHUnlockMem <HLOCK>
- VDHENTRY VDHQuerySel <PVOID>
- VDHENTRY VDHQueryLin <F16PVOID>
- VDHENTRY VDHCreateSel <PVOID,ULONG>
- VDHENTRY VDHDestroySel <SEL>
- VDHENTRY VDHGetCodePageFont <ULONG,ULONG,PPVOID>
- VDHENTRY VDHReleaseCodePageFont <PVOID>
-
- ; Page Management Function Prototypes
-
- VDHENTRY VDHAllocPages <PVOID,ULONG,ULONG>
- VDHENTRY VDHReallocPages <PVOID,ULONG,ULONG>
- VDHENTRY VDHFreePages <PVOID>
- VDHENTRY VDHFindFreePages <PVOID,PULONG>
- VDHENTRY VDHGetDirtyPageInfo <HVDM,PVOID,ULONG>
- VDHENTRY VDHQueryFreePages <VOID>
- VDHENTRY VDHReservePages <PVOID,ULONG>
- VDHENTRY VDHUnreservePages <PVOID,ULONG>
- VDHENTRY VDHMapPages <PVDHMAPSOURCE,PVDHMAPTARGET,ULONG>
- VDHENTRY VDHInstallFaultHook <HVDM,PVOID,ULONG,PFAULTHOOK,BOOL>
- VDHENTRY VDHRemoveFaultHook <HVDM,PVOID,ULONG,PFAULTHOOK>
- VDHENTRY VDHAllocDMABuffer <ULONG,BOOL,PULONG>
- VDHENTRY VDHFreeDMABuffer <PVOID>
-
-
- ; Inter-DD Communication Function Prototypes
-
- VDHENTRY VDHOpenPDD <PSZ,FPFNVDD>
- VDHENTRY VDHRegisterVDD <PSZ,PFNSYSREQ,PFNDEVREQ>
- VDHENTRY VDHOpenVDD <PSZ>
- VDHENTRY VDHCloseVDD <HVDD>
- VDHENTRY VDHRequestVDD <HVDD,HVDM,ULONG,PVOID,PVOID>
- VDHENTRY VDHGetError <VOID>
- VDHENTRY VDHSetError <ULONG>
- VDHENTRY VDHInstallUserHook <ULONG,PUSERHOOK>
- VDHENTRY VDHEnumerateVDMs <PENUMHOOK,ULONG>
- VDHENTRY VDHHandleFromSGID <SGID>
- VDHENTRY VDHHandleFromPID <PID> ;TO BE DELETED
- VDHENTRY VDHQuerySysValue <HVDM,ULONG>
- VDHENTRY VDHPutSysValue <ULONG,ULONG>
- VDHENTRY VDHOpen <PSZ,PHFILE,PULONG,ULONG,ULONG,ULONG,ULONG,PVOID>
- VDHENTRY VDHClose <HFILE>
- VDHENTRY VDHRead <HFILE,PVOID,ULONG>
- VDHENTRY VDHWrite <HFILE,PVOID,ULONG>
- VDHENTRY VDHSeek <HFILE,ULONG,ULONG>
- VDHENTRY VDHDevIOCtl <HFILE,ULONG,ULONG,PVOID,ULONG,PULONG,PVOID,ULONG,PULONG>
- VDHENTRY VDHPhysicalDisk <ULONG,PULONG,ULONG,PULONG,ULONG>
-
- ; Semaphore Function Prototypes
-
- VDHENTRY VDHCreateSem <PHVDHSEM, ULONG>
- VDHENTRY VDHDestroySem <HVDHSEM>
- VDHENTRY VDHQuerySem <HVDHSEM,PVDHSEMSTATE>
- VDHENTRY VDHResetEventSem <HVDHSEM>
- VDHENTRY VDHPostEventSem <HVDHSEM>
- VDHENTRY VDHWaitEventSem <HVDHSEM,ULONG>
- VDHENTRY VDHRequestMutexSem <HVDHSEM,ULONG>
- VDHENTRY VDHReleaseMutexSem <HVDHSEM>
-
- ; Timer Function Prototypes
-
- VDHENTRY VDHArmTimerHook <HHOOK,ULONG,HVDM>
- VDHENTRY VDHDisarmTimerHook <HHOOK>
-
- ; Sound Function Prototypes
-
- VDHENTRY VDHDevBeep <ULONG, ULONG>
-
- ; Property Function Prototypes
-
- VDHENTRY VDHRegisterProperty <PSZ,PSZ,ULONG,VPTYPE,VPORD,ULONG,PVOID,PVOID,PFNVDHRP>
- VDHENTRY VDHQueryProperty <PSZ>
- VDHENTRY VDHDecodeProperty <PPSZ,PULONG,PULONG,ULONG>
-
- ; Process Control Function Prototypes
-
- VDHENTRY VDHPopup <PSZZ,ULONG,ULONG,PULONG,ULONG,PSZ>
- VDHENTRY VDHKillVDM <HVDM>
- VDHENTRY VDHHaltSystem <VOID>
- VDHENTRY VDHSetPriority <HVDM,ULONG,LONG> ;TO BE "FIXED"
- VDHENTRY VDHFreezeVDM <HVDM>
- VDHENTRY VDHThawVDM <HVDM>
- VDHENTRY VDHIsVDMFrozen <HVDM>
- VDHENTRY VDHYield <BOOL>
-
- ; Perfview Prototypes
-
- VDHENTRY VDHRegisterPerfCtrs <PBYTE,PBYTE,ULONG>
-
- ; Miscellaneous Function Prototypes (for kernel debugging only)
-
- VDHENTRY VDHAssertTask <VOID>
- VDHENTRY VDHAssertVDMTask <VOID>
- VDHENTRY VDHAssertTaskOnly <VOID>
- VDHENTRY VDHAssertVDMTaskOnly <VOID>
- VDHENTRY VDHAssertInitOnly <VOID>
- VDHENTRY VDHCheckHVDM <HVDM>
- CENTRY VDHPanic <PCHAR, ...>
- VDHENTRY VDHSetTimer0 <ULONG>
-
-
- ;*** PANICXX - Issue a panic if condition XX is set
-
- ; ENTRY
- ; msg quoted error message
-
- ; EXAMPLES
- ; PANIC <"VPICSetVIRR: invalid handle %u">,<h>
-
- ; or
-
- ; IFDEF VDDSTRICT
- ; or ebx,ebx
- ; PANICZ <"em86ReflectInt: null pointer">
- ; ENDIF
-
-
- ?PANIC macro cond,msg,args
- local l1,szMsg
- ifndef VDHPanic
- DefCode IMPORT,GLOBAL,C
- DefFn VDHPanic
- EndCode
- endif
- ifnb <cond>
- j&cond short l1
- endif
- ?a substr <msg>,1,1
- % ifidn <?a>,<">
- DefData LOCAL,CONST,C
- SZ szMsg,<msg,0>
- EndData
- CallFn VDHPanic,<FLAToffset szMsg>,args
- else
- CallFn VDHPanic,<FLAToffset msg>,args
- endif
- ifnb <cond>
- l1:
- endif
- endm
-
- PANIC equ <?PANIC ,>
- PANICC equ <?PANIC nc,>
- PANICNC equ <?PANIC c,>
- PANICZ equ <?PANIC nz,>
- PANICNZ equ <?PANIC z,>
- PANICE equ <?PANIC ne,>
- PANICNE equ <?PANIC e,>
- PANICB equ <?PANIC ae,>
- PANICBE equ <?PANIC a,>
- PANICA equ <?PANIC be,>
- PANICAE equ <?PANIC b,>
-
- ifdef VDDDEBUG
-
- CENTRY printf <PCHAR, ...>
-
-
- PRINTDEBUG macro msg,args
- local szMsg
- ifndef printf
- DefCode IMPORT,GLOBAL,C
- DefFn printf
- EndCode
- endif
- ?a substr <msg>,1,1
- % ifidn <?a>,<">
- DefData LOCAL,CONST,C
- SZ szMsg,<msg,0>
- EndData
- CallFn printf,< <FLAToffset szMsg>,<args> >
- else
- CallFn printf,< <FLAToffset msg>,<args> >
- endif
- endm
-
- else
-
-
- PRINTDEBUG macro msg
- endm
-
- endif
-