Allocate Memory Block

Allocates and commits a block of linear memory.

Call With:

AX = 0501H
BX:CX = size of block (bytes, must be nonzero)

Returns:

if function successful
Carry flag= clear
BX:CX = linear address of allocated memory block
SI:DI = memory block handle (used to resize and free
block)

if function unsuccessful
Carry flag= set
AX = error code
8012H linear memory unavailable
8013H physical memory unavailable
8014H backing store unavailable
8016H handle unavailable
8021H invalid value (BX:CX = 0)

Notes:

o The allocated block is guaranteed to have at least
paragraph alignment.
o This function always creates committed pages.
o This function does not allocate any descriptors for the
memory block. It is the responsibility of the client to
allocate and initialize any descriptors needed to access
the memory with additional DPMI function calls.
o Under DPMI hosts that support virtual memory, the memory
block will be allocated unlocked. The client can lock
some or all of the memory after it is allocated with the
Lock Linear Region function (Int 31H Fn 0600H).
o Under many DPMI hosts, allocations by this function are
page granular. This means, for example, that if the DPMI
host uses a page size of 4 KB (1000H), an allocation of
1001H bytes will actually result in an allocation of
2000H bytes. Therefore, it is best to always allocate
memory in multiples of the unit of granularity (under
DPMI 0.9, use 4K bytes), which can be obtained with Int
31H Fn 0604H.