Extended Memory Specification (XMS)

 This topic describes the Extended Memory Specification, which provides a
 way for applications and operating systems to access Extended Memory on
 286+ CPUs, without the complications of running in protected mode.  XMS
 also describes how to access the HMA (though it is nearly always best to
 let MS-DOS use the HMA).

           See XMS Functions for descriptions of services.

 XMS is an industry standard proposed jointly by Microsoft, Lotus, Intel,
 and AST.  The version 2.0 spec has been in effect since 1992.

 Virtually every AT-class or better computer has some XMS memory and nearly
 all users install the device driver that enables access to XMS.

    Note: Extended Memory is not available on pre-AT (8088-based) PCs.
          However, some of these older machines are equipped with LIM-EMS
          boards.  The Expanded Memory Specification (EMS) offers access to
          additional memory on such computers.

█▌Determining if XMS is Installed▐█
  XMS memory is managed by an installable device driver.  The one that
  comes with MS-DOS is named HIMEM.SYS, but other names may be used by
  other vendors.

  When the driver is installed, it hooks INT 2fH, and watches for calls in
  which AH=43H.  Use INT 2fH 4300H (get installed state) to see if its
  support is available.

█▌Accessing XMS Services▐█
  Use INT 2fH 4310H (get XMS entry address) to learn the address at which
  the XMS service dispatcher resides.

  Load AH with a service number (and other registers as needed), and use a
  FAR CALL to call the entry address.  Check AX upon return.  If AX=0, then
  the request succeeded; otherwise and XMS error code is returned in BL.
  See INT 2fH 4310H for an example.

  See XMS Functions for parameters required for each service.

█▌DOS Support▐█
  Starting with version 5.0, DOS comes with an XMS support driver
  (HIMEM.SYS) for 286-based and better computers.  A few DOS device
  drivers and TSRs will take advantage of XMS if it is present:

  ■ DOS 5.0+ loads most of COMMAND.COM into the HMA, and places disk I/O
    buffers there and otherwise makes good use of the area.

  ■ DOS 5.0+ RAMDISK.SYS can use XMS (DEVICE=RAMDISK.SYS nnn /E).

  ■ DOS 5.x SMARTDRV.EXE disk cache will use XMS automatically (unless /A
    is used to specify EMS).  The DOS 6.0 cache can use XMS ONLY.

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

  ■ DOS 6.2 DoubleSpace support will place part of itself into the HMA
    when BUFFERS= is small.


█▌What about UMBs?▐█
  Although the XMS describes two fns for accessing UMBs, it does not supply
  the upper memory; that is, it appears to be able to track areas of memory
  that happen to exist between 640K and 1MB, but most computers don't have
  any available memory there.

  Support for the DEVICEHIGH= and Loadhigh commands is supplied only on 386+
  CPUs by the MS-DOS device driver Emm386.Exe (or other compatible system
  software such as 386Max, or NetRoom, etc.)

  The memory that is mapped into the upper memory blocks is subtracted from
  the pool above 1 MB, so an XMS provider (such as HIMEM.SYS) must be
  present for UMB support to be present.

  See Accessing Upper Memory for related info.

See Also: XMS Functions
          XMS Error Codes
          Expanded Memory Specification (EMS)
          DOS Interrupts
          Interrupts and BIOS Services
                                    -♦-