Allocate Linear Memory Block

Allocates a block of page-aligned linear address space. The
base address of the block may be specified by the client,
and pages within the block may be committed or uncommitted.

Call With:

AX = 0504H
EBX = desired page-aligned linear address of memory
block,
or zero if linear address unspecified
ECX = size of block (bytes, must be nonzero)
EDX = flags
Bit Significance
0 0 = create uncommitted pages
1 = create committed pages
1-31 reserved, should be zero

Returns:

if function successful
Carry flag= clear
EBX = linear address of memory block
ESI = handle for memory block

if function unsuccessful
Carry flag= set
AX = error code
8001H unsupported function (16-bit host)
8012H linear memory unavailable
8013H physical memory unavailable
8014H backing store unavailable
8016H handle unavailable
8021H invalid value (ECX = 0)
8025H invalid linear address (EBX not page
aligned)

Notes:

o A DPMI 1.0 host that is 16-bit only will not support this
function.
o A 16-bit client of a 32-bit DPMI 1.0 host can use this
function.
o The allocated block is always page-aligned. If a
specific linear address is not requested (EBX = 0), the
DPMI host allocates the memory block at any available
page-aligned linear address. If a specific linear
address is requested (EBX nonzero), the host either
allocates the block at the specified address or returns
error code 8012H (linear memory unavailable).

o Int 31H Fn 0501H, which can also be used to
allocate linear memory blocks, does not necessarily
page-align its blocks and does not have the ability to
create uncommitted pages or allocate a block at a
specific linear address.