Hubbry Logo
QEMMQEMMMain
Open search
QEMM
Community hub
QEMM
logo
7 pages, 0 posts
0 subscribers
Be the first to start a discussion here.
Be the first to start a discussion here.
QEMM
QEMM
from Wikipedia
Quarterdeck Expanded Memory Manager (QEMM)
DeveloperQuarterdeck Office Systems
Stable release
QEMM 97 (aka v9.0) / May 15, 1997; 28 years ago (1997-05-15)
Operating systemDOS
TypeDOS memory manager

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.

QEMM product ranges

[edit]
QRAM
A memory manager for Intel 80286 or higher CPUs. It supports Chips and Technologies chipsets. 2.02 added SHADOWRAM switch. QEXT correctly reallocates eXtended Memory Specification (XMS). It includes VIDRAM, Optimize, LOADHI from QEMM 6.02, Manifest 1.13. Earlier versions of QRAM also supported the older 8086 and 8088 CPUs.[1]
QEMM Game Edition
It is a version of QEMM that includes Quarterdeck GameRunner. Patches for regular QEMM do not work on QEMM Game Edition.
QEMM MegaBundle
In the version shipped with Borland SideKick for Windows, it is a version with SideBar 1.00 (1994-08-22) and QEMM 7.5.
DESQview 386
It includes DESQview and QEMM-386.

Features/tools

[edit]

QEMM driver

[edit]
QEMM for 80386 and IBM PS/2 personal computers

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).

  • Quickboot: It allows a form of warm reboot or local reboot to be performed without going through the BIOS. It will therefore completely bypass the POST, including the BIOS startup screen and the time-consuming memory test and device enumeration, and just restore the CPU state and interrupts to their initial state after POST.

DOS-Up

[edit]

It relocates DOS kernel, COMMAND.COM interpreter, DOS resources (e.g.: buffers, file handles, stacks, lastdrive). It supports DOS 3.2 or higher.

HOOKRAM

[edit]

It allows drivers to be loaded before loading QEMM and still allow the use of QEMM's Stealth feature.

MagnaRAM

[edit]

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.[2]

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 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.[3]

Manifest

[edit]

Manifest (MFT) is a hardware information utility that displays information about user's system.

  • 1.11 fixed minor cosmetic bugs.
  • 1.12 can identify PS/2 Model 57SX, Compaq Deskpro 486s/16M, Sharp MZ-100. Available EMS in System Overview screen was corrected when using Stealth.
  • 1.13 fixed Award BIOS identification problem.
  • Version 2.0 provides information on network, enhance reporting of video capabilities, APM, DPMI/VCPI/EMS/XMS memory. New feature include editing DOS and Windows boot configuration files.

Optimize

[edit]

Similar to MEMMAKER, it 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

[edit]

QDPMI is a DPMI 0.9 server driver, authored by Dan Spear. It requires 386 CPU and QEMM386.

QEMM 50/60

[edit]

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.

Stealth

[edit]

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 is provided with VxDs.

Stealth DoubleSpace/D*Space

[edit]

Stealth D*Space allows DoubleSpace or DriveSpace to be loaded high.

T386

[edit]

It allows Toshiba laptops to work with QEMM's EMS manager.

VIDRAM

[edit]
  • Provides extra conventional memory in text mode programs, by reclaiming buffers located in UMA that are used in graphics modes.
  • It requires EGA/VGA-compatible video card.
  • VIDRAM EMS supports DMA-based video memory access at the expense of EMS memory for buffer.

Limitations

[edit]

Device driver limit

[edit]

LOADHI.SYS loads up to 1 device driver at a time in QEMM 4.23, 2 in QEMM 5, 32 in QEMM 6.

MagnaRAM limit

[edit]

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%.

Memory limit

[edit]
  • QEMM 5.0 can manage up to 16 MB EMS, 16 MB XMS.
  • QEMM 6.0 can manage up to 64 MB EMS, 64 MB XMS.
  • QEMM 6.02 can manage up to 128 MB EMS, 128 MB XMS. EMBMEM (16-bit) parameter limit was removed.
  • QEMM 7.0-7.03 can manage up to 128 MB EMS, 128 MB XMS.
  • QEMM 7.04, 7.5, 8.0-8.3 and 97 (aka QEMM 9.0) can manage up to 256 MB EMS/XMS.

By default, QEMM 7.04 and above provide up to 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 [4]

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 is reduced by that same amount.[5]

Optimize limit

[edit]

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 DoubleSpace/D*Space

[edit]

Stealth D*Space does not support Windows 95 or later versions of DriveSpace.

Version history

[edit]

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 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.

QEMM-386 v4.2 (November 11, 1988)

[edit]

QEMM-386 v5.0 (January 1990)

[edit]
  • Added support for Intel 80486, DOS 4.01 and Windows 3.0.
  • Maximum RAM is 16MB XMS/16MB EMS.
  • LOADHI.SYS now loads 2 device drivers at a time.
  • New QEMM parameters include COMPAQ386S (C386S).

QEMM-386 v5.11 (mid 1990)

[edit]

QEMM-386 v6.0 (early 1991)

[edit]
  • Added support for DOS 5.00a and Windows 3.0a.
  • Maximum RAM is 64MB XMS/64MB EMS.
  • New features include Stealth.
  • New utilities include HOOKRAM.
  • LOADHI.SYS now loads 32 device drivers at a time.
  • Manifest was updated to 1.10.
  • QRAM updated to 2.02 for intel 80286 and intel 8088 systems.

QEMM-386 v6.01 (mid 1991)

[edit]
  • QEMM supports loading XMS driver before QEMM, running Stealth in Windows 3.0 in 386 Enhanced mode.
  • Optimize support indented CALL statements in batch files.
  • Manifest was updated to 1.11.

QEMM-386 v6.02 (November 13, 1991)

[edit]
  • Supports 2.88MB floppy drives.
  • New Optimize switches include /COMMANDFILE (CMD), /LOADLOW (LOW), /QUICK (Q). Optimize supports default OPTIMIZE.EXC exclusion file.
  • New QEMM parameters include DISKBUFFRAME=xx (DBF), EXCLUDESTEALTHINT=xx (XSTI), SHADOWRAM=xxx (SH), UNMAPFREEPAGES=Y/N (UFP), WINSHRINKUMBS=N (WSU).
  • By default, EMS is un-mapped when Stealth is active.
  • Optimize can support batch file up to 20KB.
  • The 64MB limit was removed from EMBMEM (EMB) parameter.
  • TESTBIOS' 'Danny and Larry' messages were removed.
  • Manifest was updated to 1.13.
  • Vidram now support systems with over 640KB conventional memory, uses EMS by default.

QEMM v7.0 (mid 1993)

[edit]

Dropped the 386 suffix from the name since Intel introduced the Pentium processor.

  • Added support for Intel Pentium, DOS 6.00 and Windows 3.10.
  • Maximum RAM is 128MB XMS/128MB EMS.
  • QEMM was rewritten with 32-bit code.
  • New features include DOSDATA, DOS-Up, Stealth ROM, Stealth DoubleSpace.
  • New utilities include SWAPECHO.COM, OPTIMIZE.EXE (replaced OPTIMIZE.COM), QDPMI (Quarterdeck DPMI 0.9 host), QSETUP (QEMM Setup for Windows), SCANMEM.COM (USERAM= memory scanner).
  • Updated utilities include Manifest 2.0. Add support of Virtual Mode Extensions and Page Size Extensions found in Pentium, later Intel 80486, or later CPUs; Bus-Mastering hard drives. Improved adapter RAM detection.
  • Added support for reading qemm configuration file, @filename.
  • Added support for DOS 6.00 Multi-Config in CONFIG.SYS, IF statements in AUTOEXEC.BAT.
  • Optimize supports disk compression software.
  • Vidram can now operate in Windows Enhanced mode DOS windows.
  • QEMM 7.0x loads itself to shadow RAM by default.

QEMM v7.03 (November 17, 1993)

[edit]
  • VIDRAM no longer suppress interrupt 10, function 1B calls (Video BIOS Functionality and State Information for MCGA/VGA).
  • New Optimize switches include /NOFLUSH (/NOFL).
  • Stealth DoubleSpace virtualizes DOS Function 9.
  • DOSDATA improves compatibility with Stacker 3.1, supports PC DOS 6.1 and XTRADRIVE or OS/2 2.x Boot Manager.
  • Stealth Windows driver was updated to 7.02.
  • QEMM driver now supports Compaq 20/e and 25/e.

QEMM v7.04 (February 28, 1994)

[edit]
  • Added support for DOS 6.20.
  • Maximum RAM is 256MB XMS/256MB EMS.
  • DOS-Up now supports Novell DOS 7. In DR DOS 6.0 and Novell DOS 7, only DOS resource is loaded high.
  • Improved VCPI compatibility on systems with large amounts of memory.
  • QEMM supports DESQview/X 2.0 server.*Manifest now recognizes STB processors.

QEMM v7.5 (September 17, 1994)

[edit]
  • New features include Stealth D*Space which supports both drive compression techniques, DrvSpace (DOS 6.22) and DblSpace (DOS 6.20-DOS 6.00); replacing Stealth DoubleSpace.
  • New tools include QPI.VXD.
  • Improved Pentium support with DigiSpeech Portable Sound parallel port sound card. QEMM 7.5 no longer loads itself to shadow RAM. Optimize now properly detects hardware on system with network card.

QEMM v7.53 (May 12, 1995)

[edit]

QEMM v8.0 (1995-11-04)

[edit]
  • Attempted to support Windows 95.
  • Updated MagnaRAM 2.02.
  • QEMM v8.0 did not take full advantage of the new capabilities of Windows 95. It simply acted as if it was Windows 3.11 and relied on Windows 95 being downward compatible with Windows 3.1x. Quarterdeck attempted to better integrate v8.x with Windows 95 with patch v8.01 and the final patch v8.03.

QEMM v8.01 (February 14, 1996)

[edit]

QEMM v8.03 (April 7, 1997)

[edit]
  • Full support for pure DOS 6.22 with Windows 3.11 or Windows for Workgroups 3.11.
  • Bug fixes including improvements to QEMM386, DOS-Up, LOADHI.
  • Final official patch to QEMM v8.x (March 25, 1997) back-ports many improvements from soon-to-be released QEMM 97.

QEMM 97 (aka v9.0) (May 15, 1997)

[edit]
  • Full support for Windows 95/98/98SE (not ME).
  • QEMM v8.03 lacks capabilities under Windows 95 (And doesn't work with Windows 98).
  • New utilities include MagnaRAM, optimizing Windows 9x paging file.

One Install.exe but two roles

[edit]
  • Run the installer from within Windows, and it will fully integrate QEMM 97 with Windows configuration files and registry updating system.ini, adding QEMM group, auto starting QEMM monitoring, etc.
  • However, run the installer, install.exe, from a pure DOS (DOS 7.10 or DOS 6.22) without Windows present, and it will configure and install only the DOS utilities; updating only DOS' config.sys and autoexec.bat files.

QEMM Configurations

[edit]

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 is 635K free conventional memory with up to 256MB XMS/256MB EMS shared.

MS-DOS 6.22, Windows 3.11/WFW 3.11

[edit]

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 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.

MS-DOS 7.10, Windows 95 OSR2/Windows 98 SE

[edit]

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 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.

Consequences of using or disabling EMS

[edit]

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 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.

Thus any advice to remove 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 the programs that use it.

— QEMM's TechNote FRAME.TEC[6]

Example: 635K Free, shared 256MB XMS/256MB EMS

[edit]
DOS=HIGH,UMB
device=C:\QEMM\dosdata.sys
device=C:\QEMM\qemm386.sys R:1 RAM UR=1M-256M ST:M I=b000-b7ff X=f000-ffff
device=C:\QEMM\dos-up.sys @C:\QEMM\dos-up.dat
shell=C:\QEMM\loadhi.com /R:2 C:\command.com C:\ /P /E:1024

Note: If using VMware, then replace the qemm386.sys line with

device=C:\QEMM\qemm386.sys R:1 RAM UR=1M-256M X=e800-e900

Skipping QEMM386 while booting

[edit]

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 the saving touch!

DOS equivalents

[edit]

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 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 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 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.

Windows transition / Decline of QEMM

[edit]

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 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[citation needed], 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 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.

See also

[edit]

References

[edit]

Further reading

[edit]
Revisions and contributorsEdit on WikipediaRead on Wikipedia
from Grokipedia
Quarterdeck Expanded Memory Manager (QEMM) is a memory management utility developed by Quarterdeck Office Systems for MS-DOS and compatible operating systems on IBM PC compatibles. Released in the late 1980s, QEMM enabled efficient utilization of system RAM beyond the 640 KB conventional memory limit by managing extended memory, expanded memory via the EMS specification, and upper memory blocks in the 640–1024 KB range. QEMM's core functionality included loading terminate-and-stay-resident (TSR) programs and device drivers into upper memory to free conventional RAM, often achieving up to 635 KB of free on optimized systems. It featured automated configuration tools like OPTIMIZE for analyzing and adjusting memory allocations without manual intervention, as well as support for to hide usage from certain applications. The software was tightly integrated with Quarterdeck's DESQview multitasking environment, providing EMS and support to run multiple DOS sessions concurrently on 386 and later processors. As one of the leading third-party memory managers of the , QEMM competed with alternatives like Qualitas' 386MAX and helped extend the usability of DOS systems into the by maximizing available for productivity and gaming applications. Production continued through version 9.0 in 1997, with the "386" suffix dropped starting from version 7.0 in 1993 to reflect compatibility with and newer CPUs. Its decline paralleled the rise of 32-bit operating systems like , which rendered such DOS-specific tools obsolete.

Introduction

History and Development

Quarterdeck Office Systems was founded in by Therese Myers and Gary Pope in , with an initial emphasis on creating multitasking software for systems. The company's early success came from DESQview, a text-mode multitasking environment released in July 1985 that allowed multiple DOS applications to run simultaneously, predating Microsoft's Windows by several months and addressing the limitations of single-tasking DOS environments. As personal computers evolved with the Intel 80386 processor, recognized the need for better to maximize available RAM beyond the conventional 640 KB limit imposed by DOS. The first version of QEMM-386 was released in 1988 as an advanced utility for managing Expanded Memory Specification (EMS) and Extended Memory Specification () on 386-based systems. Developed by 's engineering team, QEMM aimed to surpass the inefficiencies of the LIM EMS 3.2 standard—ratified earlier that year—and Microsoft's newly introduced driver, which emulated EMS using but often wasted resources through inflexible page framing. By employing techniques like loading and dynamic relocation, QEMM provided superior optimization for loading device drivers and terminate-and-stay-resident (TSR) programs into upper memory blocks (UMBs). QEMM quickly gained traction, becoming the top-selling retail PC utility by 1992, often bundled with productivity tools like to enhance memory efficiency in business applications. Its integration with DESQview further boosted by enabling more robust multitasking under constrained DOS memory conditions. continued evolving QEMM through the early 1990s, dropping the "386" suffix with version 7.0 in 1993 to support newer processors like the Pentium, while adapting to emerging standards such as DOS extenders and Windows compatibility. The company's trajectory shifted in the mid-1990s as Windows gained dominance, reducing demand for DOS memory managers. In October 1998, Symantec acquired for approximately $65 million in stock, integrating its utilities like QEMM into Symantec's portfolio but ultimately leading to the product's discontinuation by the late , with the final release rebranded as QEMM 97 for /98 compatibility.

Product Variants

QEMM was offered in several specialized variants tailored to specific hardware platforms and user needs, each building on the core memory management capabilities of the standard product. The QRAM variant targeted and higher CPU systems, providing enhanced memory optimization for 286-based PCs, including support for LIM 4.0 EMS memory cards and shadow RAM. Version 2.02 introduced the SHADOWRAM switch, enabling RAM caching to improve performance on compatible hardware. QEMM Game Edition was designed for gamers, incorporating GameRunner to automatically optimize memory and speed for popular DOS games while ensuring compatibility with gaming environments. However, this edition was incompatible with patches intended for the standard QEMM, requiring users to maintain a separate configuration. The QEMM MegaBundle was a commercial package that integrated QEMM with Borland's productivity tools, including SideBar 1.00 and QEMM 7.5, aimed at Windows users seeking bundled and personal information features. Another notable bundle was DESQview 386, which combined Quarterdeck's multitasking software with QEMM-386 to deliver enhanced memory utilization in multi-tasking setups on 386 systems, allowing efficient operation of multiple DOS applications. QEMM 50/60 edition was specifically developed for Models 50 and 60, supporting expansion via Memory Expansion Option boards with 2-8 MB of additional memory access on these 80286-based machines.

Technical Background

DOS Memory Architecture

The MS-DOS operating system operates within a 1 MB address space limit imposed by the real-address mode of the Intel 8086 and compatible processors, which utilize 20-bit addressing to access up to 1,048,576 bytes (1 MB) of memory ranging from 0x00000 to 0xFFFFF. This segmented addressing scheme, where a 16-bit segment register is shifted left by 4 bits and added to a 16-bit offset, effectively caps the accessible memory at 1 MB in , preventing direct access to larger RAM installations without specialized techniques. Within this 1 MB boundary, the address space is divided into and the upper memory area (UMA). occupies the first 640 KB (from 0x00000 to 0x9FFFF), serving as the primary region for loading and executing programs, device drivers, and the operating system itself; this allocation leaves applications with typically 500-600 KB of free space after basic system loading, depending on installed drivers and TSRs. The UMA spans the remaining 384 KB (from 0xA0000 to 0xFFFFF) and is reserved for hardware-specific mappings, including video memory buffers (e.g., 0xA0000-0xBFFFF for adapters), ROM code (e.g., 0xF0000-0xFFFFF), and other device ROMs or adapter memory, often resulting in fragmentation that scatters unused blocks amid these fixed reservations. Beyond the 1 MB limit, extended memory (XMS) becomes available on systems with Intel 80286 or later processors, encompassing all RAM above 1 MB up to the processor's maximum (16 MB on 286, 4 GB on 386 and beyond); access to this memory is facilitated by the HIMEM.SYS device driver, which implements the Extended Memory Specification (XMS) to allocate and manage blocks in a DOS-compatible manner. In contrast, expanded memory (EMS) provides an alternative method for exceeding conventional limits by using bank-switching hardware to map additional RAM into a 64 KB page frame within the UMA, adhering to the Lotus/Intel/Microsoft (LIM) standards—version 3.2 supporting up to 8 MB total or version 4.0 up to 32 MB—allowing programs to swap 16 KB pages in and out as needed. A typical DOS memory map without memory managers illustrates this structure:
Address RangeSizeDesignationUsage Example
0x00000 - 0x9FFFF640 KBDOS kernel, drivers, applications
0xA0000 - 0xBFFFF128 KBUMA (Video)EGA/VGA display buffers
0xC0000 - 0xDFFFF128 KBUMA (Adapters)Network/expansion card ROMs
0xE0000 - 0xEFFFF64 KBUMA (Unused/ROM)Optional device ROMs or page frames
0xF0000 - 0xFFFFF64 KBUMA ()System ROM BIOS
>0x100000VariableApplication data via XMS (286+)
This layout highlights the inherent constraints and fragmentation in the UMA, where device drivers and ROMs occupy irregular segments, often leaving only small, scattered blocks available for reassignment.

Supported Memory Standards

QEMM, developed by Office Systems, provides comprehensive support for the eXtended Memory Specification (XMS), enabling efficient allocation and management of on systems equipped with and higher processors. Specifically, it implements XMS versions 2.0 and 3.0, which allow applications to access memory beyond the 1 MB limit of real-mode DOS through a standardized for requesting, allocating, and freeing blocks. XMS 3.0 extends these capabilities with enhanced features such as dynamic pool resizing and improved error handling, facilitating up to 256 MB of addressable RAM in later QEMM versions when shared with other types. In addition to , QEMM adheres to the Expanded Memory Specification (EMS) defined by the Lotus/Intel/Microsoft (LIM) consortium, supporting versions 3.2 and 4.0 for bank-switched expanded memory access. EMS 3.2 compatibility allows QEMM to emulate up to 8 MB of expanded memory using upper memory blocks or on 286 and 80386 systems, providing a 64 KB page frame for application mapping. With EMS 4.0, QEMM expands this to over 32 MB through advanced mapping techniques, including larger page frames and VCPI integration for protected-mode operations, while maintaining with LIM 3.2 applications. QEMM further incorporates the Virtual Control Program Interface (VCPI), a standard for facilitating transitions to on 80386 and later processors, which enables DOS extenders to allocate without disrupting the DOS environment. This support is integral to QEMM's role as a VCPI server, allowing seamless integration with multitasking environments and extenders that require unreal-mode operations. For applications under DOS, QEMM includes support for the (DPMI) version 0.9 via its companion QDPMI driver, permitting 32-bit applications to run in a protected environment with access to and DOS services. This implementation provides essential functions like memory allocation and selector management, though it is limited to the 0.9 specification's features without full DPMI 1.0 extensions. Early versions of QEMM also accommodate the Enhanced Expanded Memory Specification (EEMS), an interim standard bridging EMS 3.2 and 4.0, particularly on 80286 systems lacking native LIM support, by emulating enhanced page mapping for up to 16 MB. Additionally, QEMM features OEM hooks that enable hardware-specific access optimizations, such as custom interrupts and port configurations for proprietary memory boards from vendors like AST or .

Core Functionality

QEMM Driver Operations

The QEMM-386.EXE driver, the core component of Quarterdeck's memory management system, is loaded as a device driver in the CONFIG.SYS file, typically following the initialization of the DOS core and other essential drivers to ensure stable system setup. Upon loading, it scans the Upper Memory Area (UMA), the region between 640 KB and 1 MB, to identify free blocks, including unused video memory segments (such as A000h–B000h) and ROM spaces (such as F800h–FDFFh), reclaiming up to approximately 24 KB from ROM areas for reallocation. This scanning enables the driver to map EMS page frames and XMS handles from a shared pool of extended memory, supporting LIM 4.0 EMS with up to 64 registers per set and integrating with XMS via HIMEM.SYS for High Memory Area (HMA) access. The driver performs backfilling by mapping conventional memory gaps (such as 256 KB–640 KB) into the EMS pool or unused UMA spaces, optimizing overall memory utilization while adhering to hardware requirements for LIM 4.0 compliance. In later versions, the driver supports up to 256 MB of total extended memory, with the HOOKRAM feature allowing pre-loading of incompatible drivers before QEMM initialization by hooking into unused RAM areas, such as video RAM (up to 96 KB via tools like VIDRAM.COM). For faster system initialization, the driver includes Quickboot support, which skips portions of the routine to reduce boot time while maintaining memory optimization. Technically, it provides EMS services through interrupt INT 67h (e.g., for allocating/deallocating pages and LIM 4.0 EMM functions) and uses INT 2Fh as a for memory manager communications, UMB management, and private access via the Private Interface (QPI). This integration briefly extends to Stealth techniques by hooking interrupts to ROMs for dynamic remapping, freeing additional UMA without altering application behavior.

Stealth and Relocation Techniques

QEMM's Stealth feature enables the invisible relocation of various components from the upper memory area (UMA) to , thereby freeing up below 640 KB for DOS applications. This is achieved through dynamic remapping techniques that intercept s and temporarily map relocated components back into their original addresses only when accessed. Specifically, Stealth relocates ROM routines, such as , video, and disk code, by copying them to and redirecting vectors to these copies, allowing high RAM to overlay the original ROM spaces without disrupting operation. In addition to ROM relocation, Stealth targets dedicated hardware memory regions, including the 16 KB CGA character set memory at B8000-B8FFF and the monochrome RAM at B0000-B7FFF on compatible systems. These areas, typically reserved for video operations, are moved to extended memory, with access handled via interrupt interception and remapping to maintain compatibility with legacy hardware. For enhanced performance after relocation, QEMM employs shadow RAM caching, which copies the relocated ROM and video code into faster RAM areas, reducing access times compared to slower ROM chips. This caching is particularly beneficial for frequently called routines, improving overall system responsiveness in DOS environments. The VIDRAM utility complements Stealth by reclaiming unused portions of the video buffer in the UMA for text-mode operations on EGA and VGA systems. It repurposes the A0000-AFFFF region (up to 64 KB) and optionally the B0000-BFFFF area (adding 32 KB), allocating this as conventional RAM for DOS programs while disabling incompatible graphics modes. VIDRAM is invoked via configuration parameters in QEMM's setup and is especially useful in environments like Windows text sessions. Introduced in QEMM version 6.0 in early 1991, the Stealth feature marked a significant advancement in memory optimization, with subsequent versions building on its foundation. Starting with version 8.0, enhancements included improved compatibility with Windows virtual device drivers (VxDs), allowing Stealth-relocated components to function seamlessly in protected-mode environments through dedicated modules like WINSTLTH.VXD. Additionally, the T386 module provides custom relocation support for EMS emulation on Toshiba laptops, adapting Stealth techniques to the unique shadow RAM and hardware constraints of these portables to enable expanded memory access.

Tools and Features

Optimization and Manifest Utilities

The Optimize utility, included with QEMM, analyzes the and files to determine the optimal loading order for device drivers and terminate-and-stay-resident (TSR) programs into upper memory blocks (UMBs), thereby maximizing free below 640 KB. It simulates the reconfiguration and previews the expected memory gains, allowing users to review and approve changes before rebooting to apply them, which helps avoid trial-and-error adjustments. In versions 6 and later, Optimize can handle up to 32 drivers and TSRs while checking for potential IRQ conflicts to ensure hardware compatibility during relocation. The Manifest utility serves as a comprehensive hardware and system scanner, generating detailed reports on DOS resource allocation, including memory maps (EMS, XMS, UMBs), loaded programs, I/O port usage, and device configurations for compatibility verification. It measures RAM and ROM speeds across hardware components, such as ISA cards, to identify performance bottlenecks or misconfigurations. introduced enhanced reporting for network adapters and video hardware, aiding in diagnosing connectivity and display issues in complex setups. DOS-Up relocates key components of the kernel, including the command interpreter (), internal buffers, and data structures, from into available UMBs for DOS versions 3.2 and higher, potentially freeing up to several dozen kilobytes of base memory. This feature integrates with QEMM's upper to minimize the DOS footprint without requiring manual reconfiguration, though it requires sufficient contiguous UMB space and may need exclusion parameters for conflicting hardware. HOOKRAM enables the loading of incompatible or early-initialization device drivers prior to the QEMM driver itself, while preserving compatibility with QEMM's , which conceals relocated ROMs and drivers to prevent conflicts with software expecting standard memory layouts. This utility is particularly useful for legacy hardware drivers that must execute before memory remapping, ensuring seamless integration without disabling Stealth features across the system. These utilities collectively support fine-tuned system analysis and optimization, often referenced in sample configurations for achieving over 600 KB of free on 386 and later systems.

Specialized Modules

QEMM provided several specialized modules to address specific hardware, operating system, and advanced needs, extending its core functionality for targeted environments. These add-on components included drivers and utilities designed for protected-mode execution, enhancement, compressed driver loading, and platform-specific optimizations, allowing users to tailor the memory manager to unique system configurations. The QDPMI module served as a DPMI 0.9 server , developed by Dan Spear, enabling the execution of protected-mode DOS applications on systems with 386 or higher CPUs when used in conjunction with QEMM386. Loaded via QDPMI.SYS, it facilitated access to for 32-bit applications while maintaining compatibility with DOS's real-mode environment, supporting swap files for additional allocation up to specified sizes like 1024 KB. This module was particularly useful for running software requiring protected-mode services without full or Windows overhead, though it could encounter conflicts with certain video adapters, such as S3 models, leading to general protection faults that required workarounds like exclusion from upper blocks. MagnaRAM acted as a utility integrated into QEMM, primarily for enhancing performance in and by compressing inactive RAM pages to free up physical memory for active processes. It replaced portions of the Windows subsystem, achieving compression ratios that effectively doubled available RAM in memory-constrained setups, though practical effectiveness varied based on data . The module imposed a maximum compression threshold of 100% across versions 2.00 to 2.02, limiting the portion of RAM eligible for compression to prevent system instability. MagnaRAM was included as a standard component in later releases like QEMM 97, providing seamless integration for Windows users facing the 640 KB barrier. The Stealth DoubleSpace and Stealth DSpace modules enabled high-memory loading of disk compression drivers from 6.0 and later, such as DBLSPACE.SYS or DRVSPACE.SYS, by relocating them into upper blocks or the EMS page frame to reclaim conventional RAM. This feature freed approximately 40 KB of base per driver by swapping the compression handler in and out as needed, compatible with QEMM versions 7.02 and above when paired with DOS 6.x, though earlier iterations like 7.01 exhibited incompatibilities with 6.2 that could cause boot failures. Stealth DSpace extended this support to in DOS 6.2 and beyond, ensuring transparent operation without altering the driver's visible footprint in low . For systems, the QEMM 50/60 module offered tailored memory management for Models 50 and 60, supporting specific expansion adapters like the 2-8 MB 80286 Memory Expansion Option and the Expanded Memory Adapter/A. Version 5.0 handled configurations from 0.5 MB to 8 MB, while version 6.0 expanded to 1-8 MB and beyond for compatible cards, providing EMS 4.0 emulation and optimized allocation for hardware. This module ensured efficient use of limited PS/2 memory resources, accommodating up to 128 MB in extended setups with third-party adapters like AST RampagePlus/MC. DOSDATA relocation, implemented via the DOSDATA.SYS driver in QEMM versions 7.03 and later, moved critical DOS 6+ data structures—such as file control blocks and buffers—into upper memory blocks during boot to maximize availability. Positioned early in , it prepared the system for subsequent high loading of drivers and optimized environments like DOS-Up, though it was incompatible with Windows 95's mode, potentially causing boot loops that required manual exclusion. This feature was essential for DOS 6.x users seeking to load the OS shell and core components above the KB boundary without fragmentation.

Version History

Early Versions (1988-1991)

QEMM's foundational releases emerged in late 1988 with version 4.2, targeted at Intel 80386-based systems to provide essential support for the Lotus-Intel-Microsoft Expanded Memory Specification (EMS) version 4.0 and . This version enabled configuration of memory beyond the 1 MB boundary as either expanded or , optimizing DOS usage up to 736 KB by leveraging unused video memory on systems with CGA . It introduced the LOADHI. utility, which allowed loading of a single into upper memory areas above video buffers, thereby conserving below 640 KB. The software exhibited low overhead, consuming approximately 1.5 KB of conventional memory, and supported multitasking environments like DESQview on 80386 hardware. Version 5.0, released in January 1990, expanded hardware compatibility to include the 80486 processor while adding support for 4.01 and Windows 3.0. Enhancements to LOADHI.SYS permitted loading of up to two device drivers simultaneously into upper memory, improving efficiency for multi-driver configurations. limits were set at 16 MB for both XMS and EMS, addressing the growing needs of applications requiring larger address spaces without exceeding contemporary hardware constraints. A minor update in mid-1990 produced version 5.11, primarily focused on bug fixes to enhance overall stability. These corrections included patches for issues such as zero-length regions, which could disrupt allocation in certain configurations, ensuring more reliable operation on 386 and 486 systems running DOS 4.x. Early 1991 saw the launch of version 6.0, which introduced the innovative —a technique to reclaim additional upper blocks (UMBs) by concealing ROM and option ROMs from the system's , thereby allowing more space for device drivers and TSRs. This version also supported 5.00a and Windows 3.0a, with expanded capabilities for up to 32 drivers via an improved LOADHI.SYS. Memory limits increased to 64 MB for both EMS and XMS, facilitating larger workloads on evolving 486 platforms. Subsequent maintenance releases followed in mid-1991 with version 6.01, addressing minor compatibility tweaks, and culminated in version 6.02 by November 1991. The latter incorporated support for 2.88 MB floppy drives and resolved specific UMB chaining problems that affected stability on networked environments, ensuring smoother integration with early LAN setups. These updates raised memory handling to 128 MB for EMS and XMS, marking a significant step in QEMM's evolution toward broader hardware scalability. Version 6.02 was noted in contemporary reviews for its robust performance alongside tools like 386Max 6.02.

Mid Versions (1993-1994)

The mid versions of QEMM, particularly the v7.x series from 1993 to 1994, expanded compatibility with newer Intel Pentium processors and evolving DOS environments, building on prior stealth techniques to optimize memory for multitasking and compressed storage. QEMM v7.0, released in mid-1993, eliminated the "386" designation from its name to reflect support for the Intel Pentium processor launched that year, while maintaining with 486 systems. This version supported up to 128 MB of via XMS and EMS standards, and introduced the DOSDATA feature to relocate DOS data structures into upper memory blocks for greater conventional RAM availability. It also enhanced Stealth ROM capabilities, allowing ROM areas to be mapped out of high memory to free additional space without disrupting system interrupts. Additionally, v7.0 bundled Manifest v2.0, an updated system diagnostics utility that provided detailed reporting on hardware configurations, including network adapters and settings. Released on November 17, 1993, QEMM v7.03 addressed key stability issues, with a focus on bug fixes to improve reliability under , such as resolving conflicts in memory allocation during multitasking sessions. QEMM v7.04, issued on February 28, 1994, extended maximum RAM handling to 256 MB for both XMS and EMS, enabling better performance on systems with larger memory configurations. It added full compatibility with MS-DOS 6.20, including optimized handling of DoubleSpace compression to maintain high yields, often exceeding 640 KB free in tested setups. QEMM v7.5, announced on September 13, 1994, and released shortly thereafter on September 17, introduced Windows-aware enhancements amid growing preparations for , such as a graphical installer and a Windows-native version of for easier diagnostics. These updates improved Stealth integration with drive compression tools like DoubleSpace and , while adding hardware-specific optimizations for PCI systems and 32-bit disk drivers.

Later Versions (1995-1997)

The later versions of QEMM represented Quarterdeck's efforts to bridge its DOS-centric legacy with the rising dominance of , introducing enhanced compatibility and optimizations amid the transition to 32-bit environments. These releases built on prior 256MB boundaries while addressing stability and installation challenges in the new OS. Version 7.53, released on , 1995, served as an interim DOS-focused update, incorporating support for DOS 6.22 alongside refinements to the OPTIMIZE for better performance in pure DOS setups. This version maintained the established 256MB limit for XMS and EMS, emphasizing reliability for legacy applications without major Windows integration. QEMM 8.0, launched November 4, 1995, marked the initial push toward compatibility, providing preliminary support for the OS's memory architecture while updating MagnaRAM to version 2.02 for improved handling. It retained the 256MB shared EMS/XMS ceiling, focusing on squeezing additional for hybrid DOS-Windows use cases. Subsequent patches followed: v8.01 in February 1996 addressed stability issues with OSR1, enhancing underlying DOS 7.00 interactions, while v8.03 in April 1997 delivered bug fixes to QEMM386, LoadHi, and other components, preparing the groundwork for the next major iteration. The culmination arrived with v9.0, rebranded as QEMM 97 and released May 15, 1997, offering full support for and alongside DOS environments. This version integrated MagnaRAM for , enabling optimized performance in 32-bit applications, and featured a unified Install.exe utility that handled both DOS and Windows setups seamlessly. QEMM 97 upheld the 256MB shared EMS/XMS limit, prioritizing efficient resource allocation for multitasking, though it proved to be the final significant update before the product's decline with the broader shift to native Windows memory handling.

Usage and Configurations

Example Configurations

One common configuration for QEMM in conjunction with MS-DOS 6.22 and Windows 3.11 involves loading the QEMM386 driver with Stealth and ROM options to maximize conventional memory while providing extended memory services. This setup typically achieves approximately 635K of free conventional memory, along with shared access to 256MB of XMS and 256MB of EMS, by relocating ROM routines and optimizing upper memory block (UMB) usage. The following example CONFIG.SYS and AUTOEXEC.BAT files illustrate a basic setup for a system with a Sound Blaster-compatible sound card and CD-ROM drive, assuming QEMM version 8.x installed in C:\QEMM.

[COMMON] DOS=LOW,UMB DEVICE=C:\QEMM\DOSDATA.SYS DEVICEHIGH=C:\DOS\SETVER.EXE [Menu] MENUDEFAULT=MS-DOS,2 [MS-DOS] FCBS=4,8 FILES=60 BUFFERS=30 DEVICE=C:\DOS\DRVSPACE.SYS /DISK=2048 /MOVE LASTDRIVE=E DEVICEHIGH=C:\DOS\IFSHLP.SYS DEVICEHIGH=C:\CDROM\OAKCDROM.SYS /D:MSCD001 DEVICEHIGH=C:\SB16\CTSB16.SYS /DMA:1 /IRQ:5 /PORT:220 SHELL=C:\DOS\COMMAND.COM /E:1024 /P [WINDOWS] DEVICE=C:\QEMM\QEMM386.EXE STEALTH ROM X= C000-C7FF I=CB80-CBFF R:1 DEVICE=C:\QEMM\LOADHI.SYS

[COMMON] DOS=LOW,UMB DEVICE=C:\QEMM\DOSDATA.SYS DEVICEHIGH=C:\DOS\SETVER.EXE [Menu] MENUDEFAULT=MS-DOS,2 [MS-DOS] FCBS=4,8 FILES=60 BUFFERS=30 DEVICE=C:\DOS\DRVSPACE.SYS /DISK=2048 /MOVE LASTDRIVE=E DEVICEHIGH=C:\DOS\IFSHLP.SYS DEVICEHIGH=C:\CDROM\OAKCDROM.SYS /D:MSCD001 DEVICEHIGH=C:\SB16\CTSB16.SYS /DMA:1 /IRQ:5 /PORT:220 SHELL=C:\DOS\COMMAND.COM /E:1024 /P [WINDOWS] DEVICE=C:\QEMM\QEMM386.EXE STEALTH ROM X= C000-C7FF I=CB80-CBFF R:1 DEVICE=C:\QEMM\LOADHI.SYS

@ECHO OFF LH C:\DOS\MSCDEX.EXE /D:MSCD001 /V /M:10 LH C:\DOS\SMARTDRV.EXE /DOUBLE_BUFFER /L PROMPT $P$G PATH C:\DOS;C:\QEMM;C:\WINDOWS;C:\SB16;C:\CDROM

@ECHO OFF LH C:\DOS\MSCDEX.EXE /D:MSCD001 /V /M:10 LH C:\DOS\SMARTDRV.EXE /DOUBLE_BUFFER /L PROMPT $P$G PATH C:\DOS;C:\QEMM;C:\WINDOWS;C:\SB16;C:\CDROM

In this configuration, the STEALTH ROM parameter relocates video and other ROM code to high memory, freeing up to 128K in the conventional range, while R:1 enables ROM scanning for additional optimizations. The DOS=LOW,UMB directive loads the DOS kernel low but enables UMB support, allowing drivers to be loaded high via DEVICEHIGH and LH commands for further gains. Enabling EMS emulation (via implicit QEMM handling) provides expanded access but reserves a 64K page frame in upper memory, potentially reducing available UMBs by that amount; disabling EMS (e.g., by adding NOEMS to the QEMM386 line) can increase free UMBs by 64K at the cost of no EMS support, depending on application needs. To skip QEMM386 loading during boot—useful for troubleshooting or running software incompatible with memory relocation—hold the ALT key during the boot process to prompt skipping QEMM, or hold F5 to bypass the entire CONFIG.SYS. This results in lower conventional memory (around 500-550K free) but avoids potential conflicts. (adapted for QEMM conditional loading principles) For MS-DOS 7.10 paired with Windows 95 OSR2, QEMM configurations often incorporate QDPMI for 32-bit protected mode DOS applications and MagnaRAM for disk-based virtual memory expansion beyond physical limits. This enables handling of 32MB or more in virtual EMS/XMS, particularly useful for memory-intensive DOS games or utilities in the DOS prompt under Windows 95. A representative CONFIG.SYS might include QDPMI loading after QEMM386, with MagnaRAM activated via a supplemental line for compression-based swapping. For instance:

DEVICE=C:\QEMM\QEMM386.[EXE](/page/.exe) STEALTH RAM=2048 NOFRAME DOS=HIGH,UMB DEVICE=C:\QEMM\DOSDATA.[SYS](/page/.sys) DEVICE=C:\QEMM\QDPMI.[SYS](/page/.sys) DEVICE=C:\QEMM\MAGNARAM.[SYS](/page/.sys) /C:100 [COMMON] SHELL=C:\WINDOWS\COMMAND.[COM](/page/COMMAND.COM) /E:1024 /P

DEVICE=C:\QEMM\QEMM386.[EXE](/page/.exe) STEALTH RAM=2048 NOFRAME DOS=HIGH,UMB DEVICE=C:\QEMM\DOSDATA.[SYS](/page/.sys) DEVICE=C:\QEMM\QDPMI.[SYS](/page/.sys) DEVICE=C:\QEMM\MAGNARAM.[SYS](/page/.sys) /C:100 [COMMON] SHELL=C:\WINDOWS\COMMAND.[COM](/page/COMMAND.COM) /E:1024 /P

@ECHO OFF LH %13%\SMARTDRV.[EXE](/page/.exe) X PATH C:\WINDOWS;C:\DOS;C:\QEMM SET BLASTER=A220 I5 D1 H5 T6

@ECHO OFF LH %13%\SMARTDRV.[EXE](/page/.exe) X PATH C:\WINDOWS;C:\DOS;C:\QEMM SET BLASTER=A220 I5 D1 H5 T6

Here, NOFRAME avoids the EMS page frame to maximize UMBs (yielding about 620K free conventional), while QDPMI provides DPMI 0.9 services for extended addressing, and MagnaRAM uses disk space for virtual expansion up to the specified limit, with a 100% compression threshold for optimal . To maximize UMB usage in any QEMM setup, the order of LOADHI (or DEVICEHIGH) commands is critical, as it determines how drivers fit into fragmented upper memory. Quarterdeck's Optimize utility analyzes the system and automatically rearranges lines in and —such as placing smaller TSRs before larger drivers—to fill gaps efficiently, often increasing free by 20-50K compared to manual ordering. Running Optimize after installing drivers ensures step-by-step optimization without manual trial-and-error.

Compatibility with Operating Systems

QEMM demonstrated optimal performance with 6.22, enabling up to 635K of free in the base segment through advanced upper memory block (UMB) allocation and stealth techniques, surpassing the capabilities of standard tools. Earlier versions of QEMM, such as 7.01, encountered compatibility issues with 6.22's DoubleSpace compression, potentially causing boot failures unless the stealth driver (ST-DBL.SYS) was disabled and replaced with the native DBLSPACE.SYS loaded high. In contrast, QEMM versions 7.03 and later resolved these conflicts, providing seamless integration with 6.22's features. With 7.10, QEMM offered partial compatibility but faced challenges with the operating system's built-in memory manager, which could lead to conflicts in UMB allocation and reduced efficiency; users often needed to disable the native to leverage QEMM's superior optimization. When booting without QEMM, systems defaulted to the standard and .EXE combination, typically yielding only around 500K of free , highlighting QEMM's value in memory-constrained environments. Example configurations for 7.10 might involve excluding specific UMB regions to avoid overlaps with the built-in tools. QEMM provided full support for Windows 3.11 and Windows for Workgroups 3.11, utilizing its DOS-UP mode for enhanced DOS session management and Stealth features to transparently relocate system components, thereby maximizing available memory for DOS applications running within Windows. This integration allowed QEMM versions 8.03 and later, including QEMM 97, to coexist effectively with these operating systems, freeing additional conventional memory for DOS prompts and legacy software. For and Second Edition, QEMM version 9.0 enabled partial compatibility, primarily through real-mode loading as a before IO.SYS during boot, with the HOOKRAM option facilitating the relocation of early drivers to upper areas. However, conflicts arose with Windows' Manager (VMM.VXD), often requiring users to disable expanded simulation (EMS) emulation in QEMM for system stability, as the VMM handled protected-mode more aggressively. This setup preserved some DOS-mode optimizations but limited QEMM's full potential under these 32-bit environments.

Limitations and Issues

Hardware and Memory Limits

QEMM imposed specific limits on memory capacity that varied by version, reflecting the hardware constraints of the era's PCs. Early versions such as 4.2 supported up to 16 MB for both EMS and XMS memory. By version 9.0, the limit reached 256 MB for shared EMS/XMS, though QEMM could not recognize or manage beyond this amount even with more physical RAM installed. Device driver loading via LOADHI.SYS also faced version-specific restrictions tied to upper memory block (UMB) allocation in the hardware's . In version 4.2, LOADHI.SYS supported loading two device drivers. Starting with later versions, support expanded to allow more efficient loading of multiple drivers into the upper memory area (UMA). Within the UMA, QEMM's backfill mechanism for EMS emulation was constrained by the fixed sizes of video ROMs and other reserved regions, typically leaving limited contiguous space for memory mapping. The maximum EMS page frame in UMA configurations was 64 KB, consisting of four 16 KB pages, as larger frames would conflict with hardware reservations like video adapter memory. QEMM required at least an processor, providing no support for pre-286 CPUs such as the 8088 or 8086 due to the lack of and extended addressing features essential for its memory optimization. For Toshiba-specific hardware, including laptops with custom 386 implementations, compatibility was achieved through the T386.EXE utility, which handled unique interactions like pop-up window support.

Software and Compatibility Constraints

The Stealth DoubleSpace and D*Space features, intended to hide compressed volumes from DOS for better memory utilization, could cause C: drive errors when using QEMM's ST-DBL.SYS instead of native DBLSPACE.SYS, with problems resolving upon switching to the standard driver. DoubleGuard utilities, used for DoubleSpace integrity checks, commonly triggered errors when QEMM operated in , highlighting the mode's interference with compression metadata. QEMM's EMS emulation, while providing LIM 4.0 compatibility through software simulation, often conflicted with games and applications requiring direct hardware access to expanded pages. Allocation conflicts arose on certain hardware like Northgate 386 systems, where QEMM's management of EMS pages clashed with direct LIM API calls, leading to access violations or program crashes; loading buffers into expanded further compounded these issues by fragmenting the page frame.

Legacy and Decline

DOS Equivalents

Microsoft's HIMEM.SYS and EMM386.EXE, both introduced with MS-DOS 5.0, provided XMS support for extended memory access above 1 MB and simulated EMS while enabling UMB creation by remapping upper memory regions on 386+ systems. However, these built-in tools often freed less conventional memory than QEMM, with differences of up to 50-100 KB in some configurations, typically achieving 550-600 KB free under 640 KB, depending on drivers loaded. A key shortcoming was the absence of an automatic optimization feature in early versions; EMM386 lacked QEMM's Optimize utility, frequently leaving over 100 KB of conventional memory unused due to inefficient UMB packing. DR-DOS 5.0 offered built-in UMB support through its kernel and utilities like TASKMGR for , allowing device drivers and portions of the OS to relocate to upper memory without third-party tools. This native integration provided more seamless HMA and UMB utilization than equivalents but was less flexible than QEMM's , which aggressively concealed expanded memory to avoid conflicts with software expecting strict EMS adherence. Qualitas' 386MAX, a direct competitor to QEMM, delivered similar XMS, EMS emulation, and UMB features for 386+ systems, with automated configuration for ease of use. It proved more stable in certain gaming scenarios where QEMM's aggressive optimization caused incompatibilities, and included NETROOM-like support for reserving UMBs in networked environments to prevent driver overlaps. In benchmarks, 386MAX yielded up to 557 KB free in setups, trailing QEMM's higher gains but offering robust DPMI support for protected-mode applications. Earlier alternatives like Qualitas' BlueMAX and Helix's HeadRoom represented partial solutions for memory-constrained systems. BlueMAX, tailored for machines, provided XMS access and BIOS ROM compression to reclaim upper memory but lacked comprehensive EMS page mapping for full expanded memory simulation. HeadRoom focused on TSR management and application switching, enabling multiple resident programs to share upper memory without consuming conventional RAM, though it offered only basic XMS handling without advanced EMS emulation. These tools prioritized niche compatibility over QEMM's broader optimization, often resulting in lower overall free memory for general DOS use.

Transition to Windows Era

The introduction of Windows 95 in 1995 marked a significant shift in personal computing, with its Virtual Machine Manager (VMM.VXD) assuming control over memory management tasks previously handled by DOS-based tools like HIMEM.SYS. This 32-bit virtual memory subsystem enabled access to vastly larger amounts of RAM—beyond the 64 MB limit of traditional DOS extenders—rendering specialized DOS memory managers largely obsolete for Windows environments. Quarterdeck responded with QEMM 9.0 (branded as QEMM 97), released in May 1997, which provided enhanced compatibility for running DOS applications under Windows 95 and 98 by optimizing memory allocation in hybrid real-mode and protected-mode setups. Following Windows 95's launch, QEMM's relevance waned due to plummeting RAM prices and the rise of alternative technologies. By 1996, 16 MB of RAM had become standard in new PCs, a sharp increase from the 4–8 MB typical in 1995 systems, as DRAM costs dropped from over $3 per megabit in 1995 to under 16 cents by 1998. This affordability reduced the urgency for memory optimization software like QEMM, while DOS extenders such as DOS/4GW—using the DPMI standard—allowed applications to operate in without relying on EMS or XMS emulation, further diminishing the need for managers. Quarterdeck's acquisition by Symantec in October 1998 for $65 million redirected corporate priorities toward broader like CleanSweep, effectively halting further QEMM development. QEMM 97, released amid ongoing lawsuits involving Quarterdeck's products (including earlier QEMM versions), proved to be the final iteration, with no subsequent updates as Symantec integrated and phased out legacy DOS-focused tools. The transition also impacted gaming, as developers increasingly adopted Windows and —introduced in 1995—to leverage without the constraints of DOS memory models. 's components, such as for 2D graphics and DirectSound for audio, bypassed EMS/XMS requirements, enabling smoother performance in titles like the 1996 port of Doom, which ran at higher resolutions and with more audio channels on than on pure DOS. By 1998, this shift had made gaming setups, including QEMM, obsolete for mainstream PC titles. QEMM's design, rooted in real-mode loading during , often conflicted with Windows 95's protected-mode , leading to boot hangs or instability, particularly with systems exceeding 16 MB of RAM where the manager's optimizations interfered with VMM.VXD's paging. These issues underscored QEMM's incompatibility with the era's evolving OS paradigms, accelerating its decline.

References

Add your contribution
Related Hubs
User Avatar
No comments yet.