Microsoft KB Archive/39349

From BetaArchive Wiki

Using the XMA Memory Device Drivers XMAEM.SYS and XMA2EMS.SYS PSS ID Number: Q39349 Article last modified on 02-23-1993 PSS database name: O_MSDOS

4.00 4.01


The information in this article applies to:
- Microsoft MS-DOS operating system versions 4.00 and 4.01


IBM has a form of memory known as XMA memory, available for the most part only on IBM PS/2 systems. IBM PC-DOS Version 4.00 includes two drivers, XMA2EMS.SYS and XMAEM.SYS. The driver XMA2EMS.SYS takes IBM XMA memory and emulates LIM/EMS Version 4.0 memory. The driver XMAEM.SYS takes PS/2 Model 80 80386 extended memory and emulates XMA memory. Thus, owners of IBM systems with XMA memory can use it for EMS memory by running XMA2EMS.SYS. Similarly, owners of IBM PS/2 Model 80 systems with extended memory can emulate XMA memory with the XMAEM.SYS driver, and can subsequently use the XMA2EMS.SYS driver to convert this emulated XMA memory into emulated EMS memory.

Microsoft MS-DOS includes XMA2EMS.SYS for owners of XMA memory hardware, to allow this memory to emulate EMS memory. However, the MS-DOS Packaged Product release does not include the XMAEM.SYS driver; instead, the Microsoft driver EMM386.SYS is provided, which takes extended memory on some 80386 systems and emulates EMS memory directly, bypassing the IBM proprietary XMA emulation stage. MS-DOS OEMs (original equipment manufacturers) are provided with both drivers, so they have the ability to provide these to their customers.

IBM XMA memory has nothing to do with XMS (eXtended Memory Specification) memory. For more general information on the forms of memory that are available, search for the keywords “XMA”, “EMS”, and “XMS” in this KnowledgeBase.

The rest of this article discusses how to use these drivers. Additional information is contained in the “IBM PC-DOS Version 4.00 Reference” and “IBM PC-DOS Version 4.00 Command Reference” manuals.

More Information:

XMAEM.SYS Device Driver

The purpose of the XMAEM.SYS device driver is to emulate the IBM Personal System/2 80286 Expanded Memory Adapter (XMA) /A by using 80386 memory-map registers with extended memory. The XMAEM.SYS device driver can be used only with 80386-based systems such as the IBM Personal System/2 Model 80.

Important: If you are using an 80386-based system, the DEVICE statement for XMAEM.SYS must be placed before the DEVICE statement for XMA2EMS.SYS in your CONFIG.SYS file.

The format of the command is as follows, where [pages] is the number of 16K pages to use:


The number of pages allowed ranges from the minimum of 64 to the default of the maximum total available memory.


XMAEM.SYS may cause conflicts when loaded with other software that manipulates the 80386 memory-map registers.

If you want to change the amount of memory allocated, you must make a change in the CONFIG.SYS file and restart the system.

XMA2EMS.SYS Device Driver


This is a device driver that supports the Lotus, Intel, and Microsoft (LIM) Expanded Memory Specification (EMS) 4.0 under MS-DOS Version 4.00.

Important: Expanded memory is memory addressed through a combination of an Expanded Memory Specification (EMS) device driver, such as XMA2EMS.SYS, and a hardware adapter capable of providing expanded memory. This memory enhancement is available to you if you have one of the following installed:

  1. IBM 2-megabyte Expanded Memory Adapter
  2. IBM Personal System/2 80286 Expanded Memory Adapter/A
  3. IBM Personal System/2 80286 Memory Expansion Option
  4. IBM (or compatible) PS/2 Model 80 system, extended memory, with the XMAEM.SYS device driver loaded

You must specify the XMAEM.SYS device driver before XMA2EMS.SYS in your CONFIG.SYS file if you have an IBM Personal System/2 Model 80 or other 80386-based system.

Refer to the EMS Version 4.0 specification for further information about how to allocate the memory in your system.

The format of the command is as follows:

DEVICE=XMA2EMS.SYS FRAME=xxxx P254=xxxx P255=xxxx [/X:<size>]


DEVICE=XMA2EMS.SYS P0=xxxx P1=xxxx P2=xxxx P254=xxxx P255=xxxx


The FRAME=xxxx parameter specifies the default EMS page frame. It consists of a 64K contiguous (connecting) space of available memory, specified as one address that automatically sets the next four contiguous pages. You may substitute the address segment, xxxx, with any 64K available page frame from address segments hexadecimal C000 through E000.

If you specify the FRAME parameter to set pages P0, P1, P2, and P3, you cannot individually specify page P0, P1, P2, or P3 in the DEVICE statement. By specifying the FRAME parameter, you are already identifying four contiguous pages.

For example, you could set pages P0 through P3 from D000 through DC00 or have a page frame begin at D000 if you have a 64K contiguous space in memory, as follows:

DEVICE=XMA2EMS.SYS P0=D000 P1=D400 P2=D800 P3=DC00 P254=C000 P255=C400



The P254=xxxx and P255=xxxx parameters represent “pages.” A page is a fixed-length block of memory that is equal to 16K of memory and can represent the value P0, P1, P2, P3, P254, or P255. In the case of the XMA2EMS driver, pages P254 and P255 are reserved for use by MS-DOS. If you specify the P254 page, you can run FASTOPEN in expanded memory by specifying the /X parameter. If you specify P255, you can run the BUFFERS command with the /X parameter specified. If you do not specify P254 or P255 in your DEVICE statement for XMA2EMS, MS-DOS cannot use expanded memory and, therefore, uses conventional memory for MS-DOS functions.

You can set the size value of /X from a minimum of four 16K pages up to the default and maximum value of the total available memory in multiples of 16K pages. For example, to set the size to the minimum of 64K, do the following:

DEVICE=C:2EMS.SYS FRAME=D000 P254=C000 P255=C400 /X:4

If you specify the <size> parameter on XMAEM.SYS and the /X <size> parameter on XMA2EMS.SYS, MS-DOS ignores the XMA2EMS.SYS <size> parameter.

Additional reference words: 4.00 4.01 noupd

Copyright Microsoft Corporation 1993.