Quarterdeck Expanded Memory Manager ( QEMM ) is a memory manager produced by Quarterdeck Office Systems in the late 1980s through the late 1990s. It was the most popular third-party memory manager for the MS-DOS and other DOS operating systems .
56-586: QEMM provides access to the Upper Memory Area (UMA) and memory through the Expanded Memory Specification (EMS), Extended Memory Specification (XMS), Virtual Control Program Interface (VCPI) and DOS Protected Mode Interface (DPMI). It relocates DOS kernel, COMMAND.COM interpreter, DOS resources (e.g.: buffers, file handles, stacks, lastdrive). It supports DOS 3.2 or higher. It allows drivers to be loaded before loading QEMM and still allow
112-501: 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. 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 KiB region in
168-520: A XMA2EMS.SYS driver provided EMS emulation for XMA boards. XMA boards were first introduced for the 1986 (revamped) models of the 3270 PC . 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 80286 Memory Expansion Option, AT&T Expanded Memory Adapter and
224-506: 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 's QEMM , Qualitas ' 386 or
280-585: A multitasking manager) were still thus constrained. With the release of Windows 95 , it became less relevant still, as this version of Windows provides much of the functionality of the DOS device drivers to DOS applications running under Windows, such as CD, network and sound support; the memory map of Windows 95 DOS boxes was automatically optimised. However, not all DOS programs could execute in this environment. Specifically, programs that tried to directly switch from real mode to protected mode would not work as this
336-540: A total of 64 MB RAM shared among XMS, EMS and VCPI memory, unless the USERAM= parameter is used. For example, to allow access to up to 256 MB EMS (or 256 MB XMS), specify: QEMM386.SYS USERAM=1M-256M For QEMM 7.04 and above, the maximum addressable RAM is 256 MB of memory, shared among XMS, EMS and VCPI memory. Initially, XMS allocates the entire 256 MB and shares it with EMS and VCPI as needed, that is, as EMS and VCPI request memory blocks, XMS free memory
392-813: A utility for the Compaq Deskpro 386 . A popular and well-featured commercial solution was Quarterdeck's QEMM. A contender was Qualitas' 386 . 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 programs inside ("LOADHI" or "LOADHIGH"). Interaction between extended memory , expanded-memory emulation and DOS extenders ended up being regulated by
448-496: Is 635K free conventional memory with up to 256MB XMS/256MB EMS shared. MS-DOS 6.22 provides 619K free conventional memory and up to 64MB XMS/32MB EMS shared RAM. Assuming unaltered MS-DOS 6.22, without 3rd party utilities, i.e. JEMM, UMBPCI, etc. QEMM increases the available free conventional RAM to 635K with shared 256MB XMS/256MB EMS. While using Windows 3.11 or Windows For Workgroups 3.11, QEMM provides additional free conventional memory for DOS Prompt running under Windows. QEMM
504-405: 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
560-776: Is a utility that calculates, and allows user to choose optimal orders of loading drivers and TSRs. However, OPTIMIZE allows preview of adjustments be made without rebooting. Shipped with QEMM and DESQview. QDPMI is a DPMI 0.9 server driver, authored by Dan Spear. It requires 386 CPU and QEMM386. It is a version of QEMM driver for the IBM PS/2 Models 50 and 60 . Version 4.03 supports IBM Memory Expansion Option boards with 2-8MB memory. It can relocate memory assigned for CGA character set away from UMA. Beginning with QEMM version 8, it allows ROM contents in UMA to be relocated to provide more memory for TSRs. Additional Stealth Windows compatibility
616-501: Is compatible with MS-DOS 7.10 and Windows 9x and provides slightly more free conventional RAM but it does lower the maximum RAM to 256MB XMS/256MB EMS. EMS memory normally uses a 64KB of UMB as the Page Frame, this reduces the total UMB available to DOS. So some recommend turning off EMS, using the NOEMS switch, to increase the total UMB free by 64KB. QEMM supports NOEMS switch, however, it
SECTION 10
#1732858077713672-413: Is far better to provide EMS than saving the 64K Page Frame. QEMM takes advantage of EMS memory and usually will create more free RAM in the lower 1M address space than the 64KB required for EMS. QEMM StealthROM, SqueezeFrame, and Stealth D*Space all require EMS to work by mapping ROM and data buffers into EMS, thus freeing more UMB's. QEMM's TechNote FRAME.TEC states: "Thus any advice to remove
728-520: Is provided with VxDs. Stealth D*Space allows DoubleSpace or DriveSpace to be loaded high. It allows Toshiba laptops to work with QEMM's EMS manager. LOADHI.SYS loads up to 1 device driver at a time in QEMM 4.23, 2 in QEMM 5, 32 in QEMM 6. Maximum compression threshold setting is 100% for all versions of MagnaRAM 2.00-2.02, except for MagnaRAM 2.00 included with QEMM 8.00, which has the maximum setting of 80%. By default, QEMM 7.04 and above provide up to
784-460: Is reduced by that same amount. Versions up to QEMM 6.01 can process batch files up to 9KB, and 20KB in QEMM 6.02. Batch file line limit is 512 for QEMM versions up to 6.02. Stealth D*Space does not support Windows 95 or later versions of DriveSpace. Originally, the product was called QEMM-386 (requiring an Intel 80386 and DOS 3.30 .), and was released with a complementary product called QRAM (for use on intel 80286 and 8088). The 386 suffix
840-617: Is well suited for Windows 3.x as has supported for it since QEMM v5.x as early as 1990. As a result, QEMM 8.03 or QEMM 97 integrate very well with Windows 3.11/WFW 3.11. QEMM increases the available free conventional RAM for MS-DOS 7.10 and also for DOS Prompt under Windows 95 OSR2/Windows 98 SE. However, QEMM maximum RAM is a shared 256MB XMS/256MB EMS, which is less than what DOS 7.10 and Windows 95/98 support without QEMM. MS-DOS 7.10 provides 624K free conventional memory and up to 1GB XMS/32MB EMS; assuming unaltered MS-DOS, using HIMEM.SYS and EMM386.EXE without any 3rd party utilities. Thus, QEMM
896-436: The 640 KB barrier was removed at the cost of software compatibility. This usage of the upper memory area is different from using upper memory blocks, which was used to free conventional memory by moving device drivers and TSRs into the upper 384 KB of the 1 MB address space, but left the amount of addressable memory (640 KB) intact. Expanded memory In DOS memory management , expanded memory
952-666: 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. 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
1008-724: The Intel 8086 . The designers of the PC allocated the lower 640 KiB ( 655 360 bytes) of address space for read-write program memory (RAM), called conventional memory , and the remaining 384 KiB 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 80286 chip that could address up to 16 MiB of RAM as extended memory , it could only do so in protected mode . The scarcity of software compatible with protected mode (no standard DOS applications could run in it) meant that
1064-630: The addresses of 640 KB and 1024 KB ( 0x A0000–0xFFFFF) in an IBM PC or compatible. IBM reserved the uppermost 384 KB of the 8088 CPU 's 1024 KB address space for BIOS ROM , Video BIOS , Option ROMs , video RAM, RAM on peripherals, memory-mapped I/O , and obsoleted ROM BASIC . However, even with video RAM, the ROM BIOS , the Video BIOS , the Option ROMs , and I/O ports for peripherals, much of this 384 KB of address space
1120-448: The 386 supported 32-bit addresses, or 4 gigabytes (2 ) of RAM – 4096 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 DOS/4G to run in protected mode while still using the DOS API . In
1176-650: The DOS users switched to protected mode operating systems unsupported by QEMM, such as the Windows NT series and Linux . The final version was QEMM 97, which was compatible with Windows 95 and later Windows 98 / ME , but by this point, not only was DOS memory management no longer in high demand, but the remaining competitive DOS applications (including various GNU utilities and text editors) supported EMS, XMS, or DPMI - which reduced demand for conventional memory - or had been ported to Windows 95 or higher. The availability of increasing RAM sizes at low cost served to reduce
SECTION 20
#17328580777131232-501: The PC. This functionality was copied by Microsoft with the release of MS-DOS 5.0 in June 1991. Eventually, even more DOS data structures were moved out of conventional memory, allowing up to 631 KB out of 640 KB to be left free. Starting from version 6.0 of MS-DOS, Microsoft even included a program called MEMMAKER which was used to automatically optimize conventional memory by moving terminate-and-stay-resident (TSR) programs to
1288-520: The UMB technology, incorporating a 386-mode XMS/EMS manager also called EMM386 . It could also allocate some of the video memory or EMS memory as UMB memory. MS-DOS finally offered UMBs in 1991 with version 5.0. MS-DOS' EMM386 required HIMEM to be loaded first, while DR-DOS' EMM386 fulfilled both roles and did not need a separate XMS driver, which was still provided but only needed on 80286-based machines (originally named HIDOS.SYS, later HIMEM.SYS). If an XMS driver
1344-660: The XMS driver and relocate all but a tiny stub of the XMS driver into Extended Memory. DR-DOS EMM386 could fill "free" areas with UMBs or map RAM over unused ROM areas in virtual mode, provide support for DPMI (and - in some special issues - DPMS ), and load the support for pre-emptive multitasking and multithreading components of the operating system. While popular when DOS programs were the mainstream, QEMM eventually became largely irrelevant as Windows programs and more intensive DOS programs, particularly games, using DOS extenders replaced traditional DOS programs for most users. Also, some of
1400-409: 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
1456-518: The basic functionality of QEMM and comparable programs. The advantage of DR DOS 5.0 over the combination of an older DOS plus QEMM was that the DR ;DOS kernel itself and almost all of its data structures could be loaded into high memory. This left virtually all the base memory free, allowing configurations with up to 620 KB out of 640 KB free. Configuration was not automatic - free UMBs had to be identified by hand, manually included in
1512-429: The correct sequence to use the blocks of memory as efficiently as possible. Some TSR programs required additional memory while loading, which was freed up again once loading was complete. Fortunately, there were few dependencies amongst these modules, so it was possible to load them in almost any sequence. Exceptions were that to successfully cache CD-ROMs, most disk caches had to be loaded after any CD-ROM drivers, and that
1568-517: 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
1624-451: The expanded memory. 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 brand.) 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 MiB of expanded memory. This
1680-521: The fundamental memory managers into conventional memory, and thereafter everything else into the UMA. Conventional memory glutton programs such as MSCDEX could also be loaded into the UMA in a similar fashion, hence freeing up a large amount of conventional memory. The increasing popularity of Windows 3.0 made the necessity of the upper memory area less relevant, as Windows applications were not directly affected by DOS' base memory limits, but DOS programs running under Windows (with Windows itself acting as
1736-504: 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). Expanded Memory usage declined in the 1990s. The IBM AT Intel 80286 supported 24 bits of address space (16 MiB) in protected mode , and
QEMM - Misplaced Pages Continue
1792-514: The hard disk. Instead of writing directly to the hard disk, the information to be written would go to MagnaRAM's own buffer as this was a faster process. During CPU idle, MagnaRAM would compress the information in its own RAM buffer. When the RAM buffer becomes full, it is then swapped to the hard disk taking both less time and less space. Manifest (MFT) is a hardware information utility that displays information about user's system. Similar to MEMMAKER , it
1848-448: 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 . The 8088 processor of the IBM PC and IBM PC/XT could address one megabyte (MiB, or 2 bytes) of memory. It inherited this limit from the 20-bit external address bus (and overall memory addressing architecture) of
1904-414: The line that loaded EMM386 from CONFIG.SYS , and then drivers and so on had to be manually loaded into UMBs from CONFIG.SYS and AUTOEXEC.BAT . This configuration was not a trivial process. As it was largely automated by the installation program of QEMM, this program survived on the market; indeed, it worked well with DR DOS' own HMA and UMB support and went on to be one of the best-selling utilities for
1960-529: The market was still open for another solution. To make more memory accessible, 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 KiB (2 bytes) window of memory, called a page frame , was used; later this was made more flexible. Programs had to be written in a specific way to access expanded memory. The window between conventional memory and expanded memory could be adjusted to access different locations within
2016-471: The modules of most network stacks had to be loaded in a certain sequence, essentially working progressively up through the layers of the OSI model . A basic yet effective method used to optimize conventional memory was to load HIMEM.SYS as a device, thereafter loading EMM386.EXE as a device with the "RAM AUTO" option which allows access into the UMA by loading device drivers as devicehigh. This method effectively loads
2072-419: The need of MagnaRAM. Finally, modern PCI chipsets provide documented functionality to remove write protection from unused UMA; in many or most cases, this last fact eliminates the need for QEMM for even those relatively few users who use DOS applications and who might otherwise find QEMM essential. Upper Memory Area In DOS memory management , the upper memory area ( UMA ) is the memory between
2128-409: The page frame is penny-wise and pound-foolish. Remember that the page frame is 64K of address space that can be used any program, at any time, to access effectively as much memory as it likes. Some view the page frame as 64K of address space that could be used to hold up 64K of programs, but it is much more useful to consider the page frame as a place to access up to 32 megabytes of code and/or data for
2184-545: The programs that use it." Note: If using VMware, then replace the qemm386.sys line with Hold ALT key during boot and qemm386.sys will not load but prompt to hit Esc to skip loading. Alternatively, hold F5 so DOS skips loading all of config.sys + autoexec.bat or hold F8 so DOS prompt Y/N to confirm each line in config.sys and autoexec.bat; allowing you to skip loading qemm386.sys, dos-up, dosdata, etc. May help while testing new configuration that lead to system lockups. Holding ALT or pressing F5/F8 during boot might be
2240-463: The saving touch! Microsoft released comparable but simpler memory managers of its own - HIMEM.SYS for XMS and EMM386.EXE for EMS with MS-DOS 4.01 in 1989; earlier Windows/386 2.1 included a built-in EMM which offered EMS to DOS windows during Windows sessions only. These versions could not yet create Upper Memory Blocks . Digital Research 's DR DOS 5.0 (1990) was the first non-vendor-specific DOS to offer
2296-405: The upper 384 KiB ( upper memory area) divided into four 16 KiB pages, which could be used to map portions of the expanded memory. 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 KiB region in lower RAM to be mapped to expanded memory, as long as it
QEMM - Misplaced Pages Continue
2352-423: The upper memory blocks is specified in the eXtended Memory Specification . On many systems including modern ones it is possible to use memory reserved for shadowing expansion card ROM as upper memory. Many chipsets reserve up to 384 KB RAM for this purpose and since this RAM is generally unused it may be used as real mode upper memory with a custom device driver, such as UMBPCI. On IBM XT computers, it
2408-454: The upper memory. For a period in the early 1990s, manual optimization of the DOS memory map became a highly prized skill, allowing for the largest applications to run on even the most complex PC configurations. The technique was to first create as many UMBs as possible, including remapping allocated but unused blocks of memory, such as the monochrome display area on colour machines. Then, DOS' many subcomponents had to be loaded into these UMBs in
2464-426: The use of QEMM's Stealth feature. It was a virtual memory compression utility for Windows 3.1 , Windows For Workgroups and Windows 95 . MagnaRAM is included with QEMM 97. MagnaRAM was also released as a separate utility. MagnaRAM worked by replacing a portion of Windows' virtual memory system. MagnaRAM would insert itself in the string of Windows Programs that determined what pieces of RAM will be moved to
2520-689: 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 . 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
2576-494: 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
2632-676: Was dropped starting with QEMM version 7.0 in 1993, when Intel released the Intel Pentium on March 22, 1993. The final release was re-branded as QEMM 97 to follow Microsoft's new branding trend of using year released instead of version numbers, specifically, Windows 95 and Windows 95 OSR2. Dropped the 386 suffix from the name since Intel introduced the Pentium processor. QEMM provides up to 635K free conventional memory (RAM under 640K), far better than pure MS-DOS EMM386 , FreeDOS JEMM386, UMBPCI and many other memory manager programs. QEMM maximum RAM
2688-419: 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 supported 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
2744-428: Was loaded before DR-DOS EMM386, it would use this instead of the built-in XMS manager. Using an external and possibly customized XMS driver could help overcome issues with BIOS memory reporting functions causing the memory manager not to see all available memory, and on machines using non-standard gate-A20 switching methods, whereas using the internal XMS driver EMM386 could take advantage of speed-optimized 32-bit code for
2800-635: Was not allowed in the virtual 8086 mode it was running in. Also, programs that tried making the switch using the Virtual Control Program Interface (VCPI) API (which was introduced to allow DOS programs that needed protected mode to enter it from the virtual 8086 mode set up by a memory manager, as described above) didn't work in Windows ;95. Only the DOS Protected Mode Interface (DPMI) API for switching to protected mode
2856-430: 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
SECTION 50
#17328580777132912-582: Was possible to add more memory to the motherboard and use a custom address decoder PROM to make it appear in the upper memory area. As with the 386-based upper memory described above, the extra RAM could be used to load TSR files, or as a RAM disk . The AllCard , an add-on memory management unit for XT-class computers, allowed normal memory to be mapped into the 0xA0000-EFFFF address range, giving up to 952 KB for DOS programs. Programs such as Lotus 1-2-3 , which accessed video memory directly, needed to be patched to handle this memory layout. Therefore,
2968-411: 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,
3024-401: Was supported. Upper memory blocks can be created by mapping extended memory into the upper memory area when running in virtual 8086 mode . This is similar to how expanded memory can be emulated using extended memory so this method of providing upper memory blocks is usually provided by the expanded memory manager (for example EMM386 ). The application programming interface for managing
3080-399: 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
3136-476: Was unused. As the 640 KB memory restriction became ever more of an obstacle, techniques were found to fill the empty areas with RAM. These areas were referred to as upper memory blocks ( UMBs ). The next stage in the evolution of DOS was for the operating system to use upper memory blocks (UMBs) and the high memory area (HMA). This occurred with the release of DR DOS 5.0 in 1990. DR DOS' built-in memory manager, EMM386.EXE , could perform most of
#712287