Geoff Chappell - Software Analyst
DRAFT: Take more than your usual care.
This function was the original means of revealing the entry point for calling functions defined by the eXtended Memory Specification (XMS). It was superseded by int 2Fh function 4310h as long ago as 1988.
No implementation is known to have been formally released. Rumour has long attributed the implementation to early builds of HIMEM.SYS, but the first known release—for Windows/286 version 2.10, dated 1st July 1988, and reporting as XMS version 1.11—already implements int 2Fh function 43h, not 16h. Source code that Microsoft published for early builds of HIMEM.SYS version 2.xx has a comment “Changed INT 2F multiplex number to 43h” for version 1.11 on 23rd June 1988 but does not say what the number changed from.
These notes are inferred from the only known user, which is KERNEL.EXE from Windows/286 version 2.10, specifically. The function is called only from deep within a routine that computes how KERNEL uses expanded memory. The routine’s only interest in the function is that less memory is sought if the High Memory Area (HMA) exists. If int 2Fh function 1600h returns 80h in al, then the HMA is inferred to be under XMS management and its existence is determined by whether it can be allocated and freed by calling the corresponding XMS functions. The address to call is learnt from int 2Fh function 1610h. If instead int 2Fh function 1600h returns any other non-zero al, then the Virtual DOS Machine Manager (VDMM) is present and the HMA’s existence is taken as granted. If int 2Fh function 1600h leaves al as zero, then the HMA is treated as non-existent.
Even this one use by the KERNEL from Windows/286 version 2.10 is plausibly vestigial, as if the function number was meant to have been changed from 16h to 43h, and mostly was, except in this one routine.
The function uses registers for both input and output.
|es:bx||address of XMS entry point|
The XMS entry point is to be called as if by a far call. A function number is expected in ah. Interpretation of other registers, both for input and output, depends on the function number.
The known implementation uses only two functions: 01h and 02h. Their use looks to be consistent with implementations in HIMEM.SYS version 1.11 and higher, such that they allocate and free the High Memory Area (HMA), respectively. XMS function 01h is treated as succeeding only if it returns with ax non-zero. No output is expected of XMS function 02h.