DOS memory management, expanded memory is a system of bank
switching that provided additional memory to
DOS programs beyond the
limit of conventional memory (640 KB).
Expanded memory is an umbrella term for several incompatible
technology variants. The most widely used variant was the Expanded
Memory Specification (EMS), which was developed jointly by Lotus
Software, Intel, and Microsoft, so that this specification was
sometimes referred to as "LIM EMS". LIM EMS had several versions. The
first widely implemented version was EMS 3.2, which supported up to
8 MB of expanded memory and uses parts of the address space
normally dedicated to communication with peripherals (upper memory) to
map portions of the expanded memory. EEMS, an expanded-memory
management standard competing with LIM EMS 3.x, was developed by AST
Research, Quadram and Ashton-Tate; it could map any area of the lower
1 MB. EEMS ultimately was incorporated in LIM EMS 4.0, which supported
up to 32 MB of expanded memory and provided some support for DOS
multitasking as well. IBM, however, created its own expanded-memory
standard called XMA.
The use of expanded memory became common with games and business
programs such as
Lotus 1-2-3 in the late 1980s through the mid-1990s,
but its use declined as users switched from
DOS to protected-mode
operating systems such as Linux, IBM OS/2, and
2 Expanded Memory Specification (EMS)
3 Expanded Memory Adapter (XMA)
4.1 Expansion boards
4.3 Device drivers
4.4 Software emulation
6 See also
A section of the lower 1 MB address space provides a "window"
into several megabytes of Expanded Memory
The 8088 processor of the
IBM PC and
IBM PC/XT could address one
megabyte (MB, or 220 bytes) of memory. It inherited this limit from
the 20-bit external address bus of the
Intel 8086. The designers of
the PC allocated the lower 640 kB (655,360 bytes) of address
space for read-write program memory (RAM), called "conventional
memory", and the remaining 384 kB of memory space was reserved
for uses such as the system BIOS, video memory, and memory on
expansion peripheral boards.
Even though the
IBM PC AT, introduced in 1984, used the
that could address up to 16 MB of RAM as extended memory, it
could only do so in protected mode. The scarcity of software
compatible with the 286 protected mode (no standard
could run in it) meant that the market was still open for another
To fit potentially much more memory than the 384 kB of free
address space would allow, a bank switching scheme was devised, where
only selected parts of the additional memory would be accessible at
any given time. Originally, a single 64 kB (216 bytes) window of
memory, called a page frame, was possible; later this was made more
flexible. Programs had to be written in a specific way to access
expanded memory. The "window" between lower RAM and expanded RAM could
be moved to different locations within the Expanded RAM.
A first attempt to use a bank switching technique was made by Tall
Tree Systems with their JRAM boards, but these did not catch on.
(Tall Tree Systems later made EMS-based boards using the same JRAM
Expanded Memory Specification (EMS)
Lotus Development, Intel, and
Microsoft cooperated to develop the EMS
standard (aka LIM EMS). The first publicly available version of EMS,
version 3.0 allowed access of up to 4 MB of expanded
memory. This was increased to 8 MB with version 3.2
of the specification. The final version of EMS, version 4.0 increased
the maximum amount of expanded memory to 32 MB and supported
Microsoft thought that bank switching was a necessary, but inelegant
and temporary, stopgap measure;
Bill Gates said of expanded memory,
"It's garbage! It's a kludge! ... But we're going to do it". The
companies planned to launch the standard at the Spring 1985 COMDEX,
with many expansion-card and software companies announcing their
The first public version of the EMS standard, called EMS 3.0 was
released in 1985; EMS 3.0, however, saw almost no hardware
implementations before being superseded by EMS 3.2. EMS 3.2 used a
64 KB region in the upper 384 KB (upper memory area) divided
into four 16 KB pages, which could be used to map portions of the
In turn, EMS 3.2 was improved upon by a group of three other
companies: AST Research, Quadram and Ashton-Tate, which created their
own Enhanced EMS (EEMS) standard. EEMS allowed any 16 KB region
in lower RAM to be mapped to expanded memory, as long as it was not
associated with interrupts or dedicated I/O memory such as network or
video cards. Thus, entire programs could be switched in and out of the
extra RAM. EEMS also added support for two sets of mapping registers.
These features were used by early
DOS multitasker software such as
DESQview. Released in 1987, the LIM EMS 4.0 specification incorporated
practically all features of EEMS.
A new feature added in LIM EMS 4.0 was that EMS boards could have
multiple sets of page-mapping registers (up to 64 sets). This allowed
a primitive form of
DOS multitasking. The caveat was, however, that
the standard did not specify how many register sets a board should
have, so there was great variability between hardware implementations
in this respect.
The Expanded Memory Specification (EMS) is the specification
describing the use of expanded memory. EMS functions are accessible
through software interrupt 67h. Programs using EMS must first
establish the presence of an installed expanded memory manager by
checking for a device driver with the device name EMMXXXX0.
Expanded Memory Adapter (XMA)
IBM developed their own memory standard called Expanded Memory Adapter
(XMA); the IBM
DOS driver for it was XMAEM.SYS. Unlike EMS, the IBM
expansion boards could be addressed both using an expanded memory
model and as extended memory. The expanded memory hardware
interface used by XMA boards is, however, incompatible with EMS,
but a XMA2EMS.SYS driver provided EMS emulation for XMA boards. XMA
boards were first introduced for the 1986 (revamped) models of the
Emulex Persyst 4
MiB ISA memory board
This insertion of a memory window into the peripheral address space
could originally be accomplished only through specific expansion
boards, plugged into the ISA expansion bus of the computer. Famous
1980s expanded memory boards were AST RAMpage, IBM PS/2
Expansion Option, AT&T Expanded Memory Adapter and the
Board. Given the price of RAM during the period, up to several hundred
dollars per MiB, and the quality and reputation of the above brand
names, an expanded memory board was very expensive.
Later, some motherboard chipsets of
Intel 80286-based computers
implemented an expanded memory scheme that did not require add-on
boards, notably the NEAT chipset. Typically, software switches
determined how much memory should be used as expanded memory and how
much should be used as extended memory.
An expanded-memory board, being a hardware peripheral, needed a
software device driver, which exported its services. Such a device
driver was called expanded-memory manager. Its name was variable; the
previously mentioned boards used REMM.SYS (AST), PS2EMM.SYS (IBM),
AEMM.SYS (AT&T) and EMM.SYS (Intel) respectively. Later, the
expression became associated with software-only solutions requiring
Intel 80386 processor, for example Quarterdeck's QEMM, Qualitas'
386MAX or the default
EMM386 in MS-DOS, PC
DOS and DR-DOS.
Beginning in 1986, the built-in memory management features of Intel
80386 processor freely modeled the address space when running legacy
real-mode software, making hardware solutions unnecessary. Expanded
memory could be simulated in software.
The first software expanded-memory management (emulation) program was
CEMM, available in September 1986 as a utility for the Compaq Deskpro
386. A popular and well-featured commercial solution was Quarterdeck's
QEMM. A contender was Qualitas' 386MAX. Functionality was later
incorporated into MS-
DOS 4.01 in 1989 and into DR
DOS 5.0 in 1990, as
Software expanded-memory managers in general offered additional, but
closely related functionality. Notably, they could create ordinary
memory in unused parts of the upper memory area (UMA) (the upper
384 kB of real-mode address space) called upper memory blocks
(UMBs) and provided tools for loading small programs, typically TSRs
inside ("LOADHI" or "LOADHIGH").
Interaction between extended memory, expanded-memory emulation and DOS
extenders ended up being regulated by the XMS, Virtual Control Program
DOS Protected Mode Interface (DPMI) and DOS
Protected Mode Services (DPMS) specifications.
Certain emulation programs, colloquially known as LIMulators, did not
rely on motherboard or 80386 features at all. Instead, they reserved
64 kB of the base RAM for the expanded memory window, where they
copied data to and from either extended memory or the hard disk when
application programs requested page switches. This was
programmatically easy to implement, but performance was low. This
technique was offered by AboveDisk from Above Software and by several
Expanded Memory usage declined in the 1990s. The IBM AT
supported 24 bits of address space (16 MB) in protected mode, and
the 386 supported 32-bit addresses, or 4 gigabytes (232) of RAM
– roughly 4000 times the addressable space of the original 8086. DOS
itself did not directly support protected mode, but Microsoft
eventually developed DPMI, and several
DOS extenders were published
based on it.
DOS programs like Doom could use extenders like
run in protected mode while still using the MS-
DOS API. In the early
1990s new operating systems like Linux, Windows NT, OS/2, and BSD/OS
supported protected mode "out of the box". These and similar
developments rendered Expanded Memory an obsolete concept.
DOS memory management
Extended memory (XMS)
High memory area
High memory area (HMA)
Upper memory area
Upper memory area (UMA)
Global EMM Import Specification (GEMMIS)
x86 memory segmentation
Address Windowing Extensions (AWE)
Physical Address Extension
^ a b c d e Mendelson, Edward (1989-12-12). "A Slot Full of RAM". PC.
p. 169. Retrieved 21 January 2015.
^ Machrone, Bill (1985-05-14). "Memory Scheme Breaks 640K". PC
Magazine. p. 33. Retrieved 28 October 2013.
^ "EMS 4.0: The standard that wasn't", PC Magazine, 12 Dec 1989, p.
^ a b http://support.microsoft.com/kb/37242.
^ a b InfoWorld Media Group, Inc. (14 April 1986). InfoWorld.
InfoWorld Media Group, Inc. p. 5. ISSN 0199-6649.
Microsoft (October 1987). Expanded Memory Specification.
PC System Programming for Developers. 1989. ISBN 1-55755-036-0.
Understanding EMS 4.0 by Lloyd Borrett, Technical Cornucopia,
This article is based on material taken from the Free On-line
Dictionary of Computing prior to 1 November 2008 and incorporated
under the "relicensing" terms of the GFDL, ver