This sidebar describes a few widely used memory standards in the PC/MS-DOS world.LIMEMS. Lotus/Intel/Microsoft Expanded Memory Specification, version 4.1, 1987. This specification is available in file LIMEMS41.ZIP on the Simtel MS-DOS CD-ROM [3]. LIMEMS is the "LIM" version of the original EMS Expanded Memory Standard. EMS is really the grand-daddy of the memory standards, since it originated before the 80286. It documents access to expanded memory in a "frame" in conventional memory, typically around E,0000 or so.
The LIMEMS41.ZIP file is quite useful; you can lift entire C function calls from it, if you're careful. The programming is delightfully obscure in places, apparently written by newcomers to the language (functions return char values, for instance), but still entirely adequate.
XMS. eXtended Memory Specification, version 2.0. Copyright 1988 Microsoft Corporation, Lotus Development Corporation, Intel Corporation, and AST Research, Inc. I downloaded the file XMS_200. from a BBS[4].
The XMS standard implements a grab-bag of fairly low-level functions dealing with allocation of and hardware support for extended, upper, and high memory. (Version 3 has been distributed, but documentation seems scarce.)
VCPI. Virtual Control Program Interface, version 1.0, June 12, 1989. Written by Phar Lap Software, Inc., and Quarterdeck Office Systems. Obtained from Phar Lap Software[5]. Phar Lap sells DOS extender software and related products. This standard documents basic functions that would be used by a DOS extender.
DPMI. DOS Protected Mode Interface, version 1.0, Developed by Borland International, Ergo Computer Inc., Intelligent Graphics Corporation, IBM Corporation, Intel Corporation, Lotus, Phar Lap Software, Inc., Phoenix Technologies Ltd., Qualitas Software Inc., Quarterdeck Office Systems, and Rational Systems Inc., released in March 1991. Obtained from Intel [6].
DPMI is the interface Microsoft used to bushwack VCPI. The story goes that Microsoft was going to unleash DPMI and immediately blast existing VCPI-based products out of the water, but then there was a happy ending with everybody friends, and the two standards "complement" each other now. Both standards deal with the same areas; I gather VCPI was lacking in multi-tasking support, which DPMI supplies.
VDS. Virtual DMA Services, ftp'd from Microsoft [7].
VDS is supposed to support use of DMA devices and memory in a multi-tasking context i.e., in Windows.
That covers all the sources I know of. These standards are implemented in a few resident programs, like HIMEM/EMM386 or QEMM386.SYS. Also, when Windows runs it will take over many of these functions and administer them as it likes.
The documents are available without cost, although of course I got one of them from a CD-ROM, and another from the Internet, which is anything but free at least for the working classes.