Request Upper Memory Block (Function 10h)

ARGS: AH = 10h
DX = Size of requested memory block in paragraphs

RETS: AX = 0001h if the request is granted, 0000h otherwise
BX = Segment number of the upper memory block
If the request is granted,
DX = Actual size of the allocated block in paragraphs
otherwise,
DX = Size of the largest available UMB in paragraphs

ERRS: BL = 80h if the function is not implemented
BL = B0h if a smaller UMB is available
BL = B1h if no UMBs are available

This function attempts to allocate an upper memory block to the caller.
If the function fails, the size of the largest free UMB is returned in
DX.

NOTE: By definition UMBs are located below the 1MB address boundary.
The A20 Line does not need to be enabled before accessing an allocated
UMB.

UMBs are paragraph aligned.
To determine the size of the largest available UMB, attempt to
allocate one with a size of FFFFh.
UMBs are unaffected by EMS calls.