INT 2fH 4AxxH: HMA Suballocations

                                                 Compatibility: ◄Undoc► 5.0+ 

     See: 4a01H (Get HMA Free Space)

          4a02H (Allocate HMA Space)

          XMS 05H  Local enable A20
          XMS 06H  Local disable A20
          XMS 07H  Query A20 state

          3306H    DOS function to see if DOS is loaded in the HMA.

 The INT 2Fh 4axxH functions are undocumented through DOS 6.2 but have
 been available since DOS 5.0 added the DOS=HIGH command to CONFIG.SYS.
 They provide a means to allocate memory in the HMA, but only when DOS is
 loaded high and it is not using the entire 64K of the HMA.

 The BUFFERS= setting the CONFIG.SYS soaks up the free space.  If BUFFER=
 is small, there may be as much as 16K of HMA available.

 The DOS 6.2 version of DoubleSpace will automatically use about 12K of the
 space (if that much is available).  The DBLSPACE.SYS "driver" moves the
 MRCI engine there by (when you don't use the /NOHMA option).

 The One Owner Rule
 HIMEM.SYS allocates the entire 64K-16 bytes of the HMA in one block (see
 XMS 01H), so it is said that the HMA can have only one owner.  These
 suballocations do not violate this rule -- DOS owns the entire HMA, it
 just leases out the part that it doesn't need to whoever requests it.

 No Deallocation Service
 DOS does not provide a means to free up the part of the HMA that you
 allocate.  There appears to be no "allocation chain" or "memory control
 blocks".  It simply maintains an internal pointer to the first free byte,
 and allocates from that point upward.

See Also: INT 2fH: Multiplex Interrupt
          Extended Memory Specification (XMS)
          DOS Functions
                                    -♦-