Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Expanded memory
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|System of bank switching in DOS memory management}} {{Use dmy dates|date=May 2019|cs1-dates=y}} [[File:Expanded memory.svg|thumb|Several expanded-memory [[page (computer memory)|pages]] are bank-switched in the [[page frame]], part of the [[upper memory area]].]] In [[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 KiB). ''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 three versions: 3.0, 3.2, and 4.0. The first widely implemented version was EMS 3.2, which supported up to 8 MiB 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]] ("AQA"); it could map any area of the lower 1 MiB. EEMS ultimately was incorporated in LIM EMS 4.0, which supported up to 32 MiB 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 [[Microsoft Windows]]. ==Background== [[File:Expanded memory description 1.svg|right|150px|thumb|A section of the lower 1 MiB address space provides a "window" into several megabytes of Expanded Memory]] The [[Intel 8088|8088]] processor of the [[IBM PC]] and [[IBM PC/XT]] can address one [[megabyte]] (MiB, or 2<sup>20</sup> bytes) of memory. It inherited this limit from the 20-bit external address bus (and overall memory addressing architecture) of the [[Intel 8086]]. The designers of the PC allocated the lower 640 [[Kilobyte|KiB]] ({{val|655360}} bytes) of address space for read-write program memory (RAM), called ''conventional memory'', and the remaining 384 KiB of memory space is 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, uses the [[80286]] chip that can address up to 16 MiB of RAM as [[extended memory]], it can only do so in [[protected mode]]. The scarcity of software compatible with protected mode (no standard [[DOS]] applications can run in it) meant that the market was still open for another solution.<ref name="Mendelson_1989"/> To make more memory accessible, a [[bank switching]] scheme was devised, where only selected parts of the additional memory is accessible at any given time. Originally, a single 64 KiB (2<sup>16</sup> bytes) window of memory, called a [[page frame]], was used; later this was made more flexible. Programs are written in a specific way to access expanded memory. The ''window'' between conventional memory and expanded memory can be adjusted to access different locations within the expanded memory. A first attempt to use a bank switching technique was made by Tall Tree Systems with its JRAM boards,<ref name="TallTree"/> but these did not catch on.<ref name="Mendelson_1989"/> (Tall Tree Systems later made EMS-based boards using the same JRAM brand.) =={{anchor|EMS|EMM}}Expanded Memory Specification (EMS)== [[Lotus Software|Lotus Development]], [[Intel]], and [[Microsoft]] cooperated to develop the EMS standard (aka LIM EMS). The first publicly available version of EMS, version 3.0 allows access of up to 4 MiB of expanded memory.{{cn|date=February 2014}} This was increased to 8 MiB with version 3.2 of the specification. The final version of EMS, version 4.0 increased the maximum amount of expanded memory to 32 MiB and supports additional functionality. Microsoft thought that bank switching was an inelegant and temporary, but necessary stopgap measure. Slamming his fist on the table during an interview [[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 support.<ref name="Machrone_1985"/><ref name="pc200801">{{Cite magazine |date=January 2008 |title=The Most Memorable Tech Flops |url=https://books.google.com/books?id=Gr8rWafdWZAC&pg=PA88 |magazine=PC Magazine |pages=88–89 |access-date=2020-09-05}}</ref> [[AST Research]], [[STB Systems]], [[Persyst]], [[Quadram]], and [[Tecmar]] quickly designed EMS-compliant cards to compete with Intel's own Above Board expansion card. By mid-1985 some already called EMS a [[de facto standard]].<ref name="maremaa19850617">{{Cite magazine |last=Maremaa |first=Tom |date=1985-06-17 |title=Board Makers Flock to New Standard |url=https://books.google.com/books?id=FS8EAAAAMBAJ&lpg=PA16&pg=PA30#v=onepage&q&f=true |access-date=2025-05-01 |magazine=InfoWorld |pages=30-34 |volume=7 |issue=24}}</ref> 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 uses a 64 KiB region in the upper 384 KiB ([[upper memory]] area) divided into four 16 KiB pages, which can be used to map portions of the expanded memory.<ref name="Mendelson_1989"/> Quadram, AST, and [[Ashton-Tate]] created the Enhanced EMS (EEMS) standard. EEMS, a superset of EMS 3.2, allows any 16 KiB 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 can be switched in and out of the extra RAM. EEMS also added support for two sets of mapping registers. These features are used by early DOS multitasker software such as [[DESQview]]. 1987's LIM EMS 4.0 specification incorporated practically all features of EEMS.<ref name="Mendelson_1989"/> A new feature added in LIM EMS 4.0 was that EMS boards can have multiple sets of page-mapping registers (up to 64 sets). This allows a primitive form of DOS [[Computer multitasking|multitasking]]. The caveat is, however, that the standard does not specify how many register sets a board should have, so there is great variability between hardware implementations in this respect.<ref name="Rosch_1989"/> 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 (EMM) by checking for a device driver with the device name '''EMMXXXX0'''. ==Expanded Memory Adapter (XMA)== IBM remained silent as the industry widely adopted the LIM standard.{{r|maremaa19850617}} The company developed its own memory standard called Expanded Memory Adapter (XMA); the IBM DOS driver for it is XMAEM.SYS. Unlike EMS, the IBM expansion boards can be addressed both using an expanded memory model and as [[extended memory]].<ref name="mskb"/> The expanded memory hardware interface used by XMA boards is, however, incompatible with EMS,<ref name="Welch_1986"/> but a XMA2EMS.SYS driver provides EMS emulation for XMA boards.<ref name="mskb"/> XMA boards were first introduced for the 1986 (revamped) models of the [[3270 PC]].<ref name="Welch_1986"/> ==Implementations== ==={{anchor|RAMpage|Quadems+}}Expansion boards=== [[Image:EmulexPersyst 4M ISA.jpeg|thumb|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 [[Industry Standard Architecture|ISA]] expansion bus of the computer. Famous 1980s expanded memory boards were [[AST Research|AST]] RAMpage, IBM PS/2 80286 Memory Expansion Option, [[AT&T Corporation|AT&T]] Expanded Memory Adapter and the [[Intel]] [[Above 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. ===Motherboard chipsets=== Later, some [[motherboard]] [[chipset]]s 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]]''. ===Device drivers=== 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 the [[Intel 80386]] processor, for example [[Quarterdeck Office Systems|Quarterdeck]]'s [[QEMM]], [[Qualitas]]' [[386MAX|386<sup>MAX</sup>]] or the default [[EMM386]] in MS-DOS, PC DOS and DR-DOS. === {{anchor|LIMulator}}Software emulation === 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|386<sup>MAX</sup>]]. Functionality was later incorporated into [[MS-DOS 4.01]] in 1989 and into [[DR DOS 5.0]] in 1990, as [[EMM386]]. Software expanded-memory managers in general offered additional, but closely related functionality. Notably, they allowed using parts of the [[upper memory area]] (UMA) (the upper 384 KiB of real-mode address space) called ''upper memory blocks'' (UMBs) and provided tools for loading small programs, typically [[terminate-and-stay-resident program]]s inside ("LOADHI" or "LOADHIGH"). Interaction between [[extended memory]], expanded-memory emulation and DOS extenders ended up being regulated by the XMS, [[Virtual Control Program Interface]] (VCPI), [[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 KiB 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 [[shareware]] programs. It is also possible to emulate EMS by using XMS memory on 286 CPUs using 3rd party utilities like EMM286 (.SYS driver). ==Decline== Expanded Memory usage declined in the 1990s. New operating systems like [[Linux]], [[Windows 9x]], [[Windows NT]], [[OS/2]], and [[BSD/OS]] supported protected mode "out of the box". These and similar developments rendered Expanded Memory an obsolete concept. ==Similar concepts== Other platforms have implemented the same basic concept – additional memory outside of the main address space – but in technically incompatible ways: *[[Expanded storage]] was a feature on IBM mainframes providing additional memory outside of the main system memory, first introduced with the IBM 3090 high-end mainframe series in 1985.<ref>{{Cite journal |last1=Sakaki |first1=M. |last2=Samukawa |first2=H. |last3=Honjou |first3=N. |date=1988 |title=Effective utilization of IBM 3090 large virtual storage in the numerically intensive computations of ab initio molecular orbitals |url=https://ieeexplore.ieee.org/document/5387596 |journal=IBM Systems Journal |volume=27 |issue=4 |pages=528–540 |doi=10.1147/sj.274.0528 |issn=0018-8670|url-access=subscription }}</ref> Expanded storage could not be directly addressed by applications; an MVS feature known as "window services" enabled applications to allocate movable windows to expanded storage within their own address space. There was also a "data mover" feature which could be invoked to move data between main memory (central storage) and expanded storage; later, an "Asynchronous Data Mover Facility" (ADMF) was introduced, which enabled applications to request data to be moved between the two in the background, while they performed other processing. By the mid-1990s, expanded storage had ceased to be a physically separate memory, and had become merely a logical division within the system memory enforced by firmware; but it was not until the November 2016 release of z/VM 6.4 that IBM finally removed all support for expanded storage from its mainframe operating systems.<ref>{{Cite web |date= 29 August 2006|title=IBM: Configuring Storage |url=https://www.vm.ibm.com/perf/tips/storconf.html |access-date=2023-05-03 |website=www.vm.ibm.com |language=en-US}}</ref> *[[Address Windowing Extensions]] (AWE) is a conceptually similar feature in Microsoft Windows, used to enable 32-bit applications to access more memory than the 2–4GB that can fit in a 32-bit address space. Although still supported by current versions of Windows, its use has been superseded by 64-bit applications, which can access >4GB of memory directly. *[[Virtual memory]] creates the illusion of available memory using, for instance, [[disk storage]]. ==See also== * [[Conventional memory]] * [[DOS memory management]] * [[Extended memory]] (XMS) * [[High memory area]] (HMA) * [[Overlay (programming)]] * [[Upper memory area]] (UMA) * [[Global EMM Import Specification]] (GEMMIS) * [[x86 memory segmentation]] * [[Address Windowing Extensions]] (AWE) * [[Physical Address Extension]] (PAE) * [[Sideways address space]] on the Acorn ''BBC Micro'' home computer ==References== {{reflist|refs= <ref name="Mendelson_1989">{{cite magazine |title=A Slot Full of RAM |date=1989-12-12 |author-last=Mendelson |author-first=Edward |author-link=Edward Mendelson |magazine=[[PC Magazine]] |publisher=[[Ziff Davis Publishing Co.]] |volume=8 |number=21 |pages=169– |url=https://books.google.com/books?id=5CmkZ3THZtwC&pg=PT170 |access-date=2020-02-08 |url-status=live |archive-url=https://web.archive.org/web/20200208221014/https://books.google.de/books?id=5CmkZ3THZtwC&lpg=PT171&pg=PT170&redir_esc=y |archive-date=2020-02-08}}</ref> <ref name="TallTree">{{cite web |title=Tall Tree Systems Product Datasheet |publisher=Tall Tree Systems |type=Broschure |date=October 1983 |url=https://archive.org/details/1983-talltree-brochure}}</ref> <ref name="Machrone_1985">{{cite magazine |title=Memory Scheme Breaks 640K |author-last=Machrone |author-first=Bill |date=1985-05-14 |magazine=[[PC Magazine]] |publisher=[[Ziff Davis Publishing Co.]] |volume=4 |number=10 |pages=33 |url=https://books.google.com/books?id=DDlmJxSURq8C&pg=PA33 |access-date=2013-10-28}}</ref> <ref name="Rosch_1989">{{cite magazine |title=EMS 4.0: The Standard That Wasn't |author-first=Winn L. |author-last=Rosch |date=1989-12-12 |magazine=[[PC Magazine]] |publisher=[[Ziff Davis Publishing Co.]] |volume=8 |number=21 |pages=174–175 |url=https://books.google.com/books?id=5CmkZ3THZtwC&pg=PT175 |access-date=2020-02-08 |url-status=live |archive-url=https://web.archive.org/web/20200208220433/https://books.google.de/books?id=5CmkZ3THZtwC&pg=PT175&redir_esc=y |archive-date=2020-02-08}}</ref> <ref name="mskb">{{cite web |title=A General Tutorial on the Various Forms of Memory |publisher=[[Microsoft]] |url=http://support.microsoft.com/kb/37242 |url-status=dead |archive-url=https://web.archive.org/web/20121022062051/http://support.microsoft.com/kb/37242 |archive-date=2012-10-22}}</ref> <ref name="Welch_1986">{{cite news |author-first=Marc J. |author-last=Welch |title=3270 Demand Not Expected To Rise |newspaper=[[InfoWorld]] |issn=0199-6649 |date=1986-04-14 |publisher=[[InfoWorld Media Group, Inc.]] |volume=8 |issue=15 |page=5 |url=https://books.google.com/books?id=OS8EAAAAMBAJ&pg=PA5 |access-date=2020-02-08 |url-status=live |archive-url=https://web.archive.org/web/20200208215655/https://books.google.de/books?id=OS8EAAAAMBAJ&pg=PA6&lpg=PA5&focus=viewport&hl=de |archive-date=2020-02-08}}</ref> <!-- Not in use <ref name="emm285">{{cite web |title=A General Tutorial on the Various Forms of Memory |publisher=[[Microsoft]] |url=https://archive.org/details/EMSLIM11_ZIP}}</ref> Not in use--> }} ==Further reading== * {{cite web |title=Expanded Memory Specification |version=Version 4.0 |publisher=[[Lotus Software|Lotus]], [[Intel]], [[Microsoft]] |date=October 1987 |id=300275-005 |url=http://www.phatcode.net/res/218/files/limems40.txt |access-date=2020-02-08 |url-status=live |archive-url=https://web.archive.org/web/20200208213626/http://www.phatcode.net/res/218/files/limems40.txt |archive-date=2020-02-08}} * {{cite book |title=PC System Programming for Developers |date=1989 |isbn=1-55755-036-0 |url-access=registration |url=https://archive.org/details/PC_System_Programming |last1=Tischer |first1=Michael |publisher=Abacus }} * {{cite web |title=Understanding EMS 4.0 |author-first=Lloyd Robert |author-last=Borrett |work=Technical Cornucopia |date=January–February 1989 |url=http://www.borrett.id.au/computing/art-1989-01-02.htm |access-date=2020-02-08 |url-status=live |archive-url=https://web.archive.org/web/20200208213504/http://www.borrett.id.au/computing/art-1989-01-02.htm |archive-date=2020-02-08}} [[Category:X86 memory management]] [[Category:DOS memory management]] [[Category:Memory expansion]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Anchor
(
edit
)
Template:Cite book
(
edit
)
Template:Cite journal
(
edit
)
Template:Cite magazine
(
edit
)
Template:Cite web
(
edit
)
Template:Cn
(
edit
)
Template:R
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)
Template:Use dmy dates
(
edit
)
Template:Val
(
edit
)