Virtual Devices (3.1) (vdag31qh.hlp) (Table of Contents; Topic list)
Important Notice
The pages on this site contain documentation for very old MS-DOS software, purely for historical purposes. If you're looking for up-to-date documentation, particularly for programming, you should not rely on the information found here, as it will be woefully out of date.
_MMGR_Toggle_HMA
                                                     Up Next Previous
────────────────────────────────────────────────────────────────────────────
 
include vmm.inc
 
VMMcall _MMGR_Toggle_HMA, <VM, flags>
 
cmp     flags, MMGRHMAQuerry
jne     did_toggle
mov     [HMAState], eax     ; 0 if disabled, 1 if enabled
 
did_toggle:
or      eax, eax           ; nonzero if enabled/disabled, zero if error
jz      error
 
The _MMGR_Toggle_HMA service enables or disables the high memory area (HMA).
The V86MMGR XMS device uses this service to control the state of the HMA for
a specified virtual machine and to notify the instance data manager that the
state is changing.
 
This service is for exclusive use by the V86MMGR XMS device.
 
Parameter  Description
────────────────────────────────────────────────────────────────────────────
 
VM         Specifies a handle identifying the virtual machine.
 
flags      Specifies the operation flags. It can be one of the following
           values:
 
           Value            Meaning
           ─────────────────────────────────────────────────────────────────
           MMGRHMAPhysical  Specifies whether the service maps physical
                            pages 100h through 10Fh into the HMA or expects
                            the virtual device to map some other physical
                            pages into the area. The value is used only if
                            the MMGRHMAEnable value is also given.
 
           MMGRHMAEnable    Enables the HMA, allowing addresses greater than
                            1 megabyte to access pages 100h through 10Fh. If
                            the MMGRHMAPhysical value is given, the service
                            maps physical pages 100h through 10Fh into the
                            linear pages 100h through 10Fh for the virtual
                            machine, enabling the global HMA for this
                            virtual machine and which all virtual machines
                            share.
 
                            If the MMGRHMAPhysical value is not given, the
                            service marks the linear pages 100h through 10Fh
                            as not present system pages. To prevent a system
                            crash when these pages are accessed, the virtual
                            device must provide its own physical pages to
                            map into these linear pages. This effectively
                            creates a local HMA that is specific to the
                            given virtual machine.
 
           MMGRHMADisable   Disables the HMA, causing addresses greater than
                            1 megabyte to be wrapped back to addresses in
                            pages 0 through 0Fh.
 
           MMGRHMAQuerry    Returns the current state of the HMA for the
                            virtual machine.
 
           The MMGRHMAEnable, MMGRHMADisable, MMGRHMAQuerry values are
           mutually exclusive.
 
           All other values are reserved.
 
Return Value
 
If MMGRHMAEnable or MMGRHMADisable are given, the EAX register contains a
nonzero if the service is successful. Otherwise, EAX contains zero to
indicate an error.
 
If the MMGRHMAQuerry value is given, the EAX register contains a nonzero
value if the HMA is enabled and zero if the HMA is disabled.
 
Comments
 
This service can fail if the MMGRHMAEnable and MMGRHMAPhysical values are
given but the system is already using the physical pages 100h through 10Fh
for some other purpose.
 
A virtual device must not call this service unless it has already used the
_Assign_Device_V86_Pages service to assign the pages 100h through 10Fh to
itself. For this reason, this service is intended to be used by one and only
one virtual device.
 
When the system creates a virtual machine, it disables the HMA and causes
the virtual machine to operate like an 8086 processor. To override this
default, the virtual device responsible for the HMA must enable the HMA
while processing the VM_Critical_Init message.
 
Virtual devices must not identify instance data in the HMA.
 
Uses
 
EAX
 
See Also
 
_Assign_Device_V86_Pages, VM_Critical_Init