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)