Expanded Memory Specification (EMS)

 This topic describes the Lotus/Intel/Microsoft formal specification
 (LIM-EMS) used to access Expanded Memory on a PC-compatible system.

        See  EMM Functions  for a description INT 67H services.

 The EMS standard provides access more memory without exceeding the 1MB
 maximum for 8088-based computers and without switching to protected mode
 on 286+ CPUs.  Programs such as Lotus 1-2-3 use it to hold data for large
 spreadsheets.  It is also used for RAM disks and print spoolers.  Some TSR
 programs use EMS memory to hold data and code (thus minimizing use of
 conventional memory).

    Note: The most common EMS memory is actually extended memory, accessed
          via an EMS-emulation device driver such as EMM386.EXE, or 386MAX.

          On 286+ CPUs, the Extended Memory Specification (XMS) accesses
          additional memory without the emulation layer, so you may prefer
          to use its API rather than (or in addition to) the EMS services.

█▌Determining if EMS is Installed▐█
  EMS memory is managed by an installable device driver with a device name
  of "EMMXXXX0" and referred to as the EMM (Expanded Memory Manager).  To
  learn if the driver has been installed you can use DOS Fn 3dH to attempt
  to open the device as a file.  Once opened, you can use DOS IOCTL fn
  4407H to get the status.  If the returned status (in AL) is 0, then EMM
  is NOT installed and a disk file by the name "EMMXXXX0" exists for some
  reason.

  When the EMM driver is installed, it sets the INT 67h vector to point to
  its device header.  Thus, another way to test for EMS is to fetch the
  address in the vector for INT 67H (0:091c) and examine offset 0aH from
  that address.  It should contain the characters "EMMXXXX0".  See
  Device Header Layout.

█▌DOS Support▐█
  Starting with version 5.0, DOS comes with an expanded memory emulation
  driver (EMM386.EXE) for 386-based computers.  A few DOS device drivers
  and TSRs will take advantage of EMS if it is present:

  ■ DOS 4.x and 5.x disk buffers can be put in expanded memory
    (BUFFERS=nn /X), but this option was removed from DOS 6.0.

  ■ DOS 4.0+ RAMDISK.SYS driver lets you put a RAM disk in expanded memory
    (DEVICE=RAMDISK.SYS nnn /A).

  ■ DOS 4.0+ Fastopen /X command uses EMS memory for its pathname storage.

  ■ DOS 6.0 programs and TSRs: Defrag, Dosshell, Msbackup, Mscdex, and
    Vsafe will use EMS memory when it is available.

█▌EMM Services▐█
  To access the EMS memory manager, use INT 67h with a fn code in the AX
  register, as described in EMM Functions.

See Also: EMM Functions
          Extended Memory Specification (XMS)
          DOS Interrupts
          Interrupts and BIOS Services
                                    -♦-