QEMM

Quarterdeck Expanded Memory Manager (QEMM) is a memory manager produced by Quarterdeck Office Systems in the late 1980s through late 1990s. It was the most popular third party memory manager for the MS-DOS and other DOS operating systems.

QEMM product ranges

QRAM
A memory manager for Intel 80286 or higher CPUs. It supports Chips and Technologies chipsets. 2.02 added SHADOWRAM switch. QEXT now 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.

Competitors

The principal competitors of QEMM were BlueMax/386MAX, and HeadRoom/NetRoom from Helix Software Company.

Compaq DOS 3.31, released in November 1987, was the first DOS operating system to bundle technology similar to QEMM-386, incorporating a 386-mode EMS manager called CEMM. QEMM was the first V86 memory manager on the market.

Features/tools

QEMM driver

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

DOS-Up

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

HOOKRAM

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

MagnaRAM

It was a virtual memory compression utility for Windows 3.1, Windows For Workgroups, 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

First released in 1990-01-11, Manifest (MFT) is a hardware information utility that displays information about user's system.

Optimize

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. It was first release in 1990-01-11.

It is shipped with QEMM and DESQview.

QDPMI

It is a DPMI 0.9 server driver. It requires 386 CPU and QEMM386.

QEMM 50/60

It is a version of QEMM driver for IBM PS/2 Model 50 and 60.

Version 4.03 supports IBM Memory Expansion Option boards with 2-8MB memory.

Stealth

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

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

T386

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

Vidram

First released in 1990-01-10, it can provide 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.

VIDRAMEMS supports DMA-based video memory access at the expense of EMS memory for buffer.

Limitations

Device driver limit

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

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

By default, QEMM 8.0 only provides total up to 64MB XMS, EMS and VCPI memory, unless USERAM= parameter is used.[4]

QEMM only provides total up to 256MB XMS, EMS and VCPI memory.[5]

Optimize limit

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

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

QEMM History

Originally, the product was called QEMM-386, and was released with a complementary product called QRAM. The 386 suffix was dropped when the Intel Pentium was released.

Version history

5.0 (1990-01-11)

5.1 (1990-08)

6.0

6.01

6.02

It 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 unmapped when Stealth is active.

Optimize can support batch file up to 20KB.

The 64MB limit was removed from EMBMEM (EMB) parameter.

TESTBIOS's 'Dan and Larry' messages were removed.

Manifest was updated to 1.13.

Vidram now support systems with over 640KB conventional memory under DOS 5 and had not allocated UMBs.

Vidram later than 6.04 uses EMS by default.

7.0

QEMM was rewritten with 32-bit code. Improved adapter RAM detection. Added configuration file support.

New features include 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.

Optimize supports disk compression software, DOS 6 multi-config, AUTOEXEC.BAT IF statements.

Vidram can now operate in Windows Enhanced mode DOS windows.

QEMM 7.0x loads itself to shadow RAM by default.

7.02

VIDRAM no longer suppress Int 10, function 1B calls.

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.

7.04

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.

7.5

New features include Stealth D*Space (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.

7.5 (1994-10-12)

Optimize now properly detects hardware on system with network card.

7.5 (1994-11-22)

Optimize now finds EMS in hardware detection phase.

8.0 (1995-11-04)

MagnaRAM 2.00 is included with QEMM 8.00.

8.01

4DOS.CMD was added.

97/9.0

Added Windows 95 support. New utilities include MagnaRAM, Manifest for Windows 95. Additional Windows 95 features include optimizing paging file.

DOS equivalents

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's EMM386 required HIMEM to be loaded first, while DR-DOS's 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

When Microsoft finally automated the process of UMB optimisation in MS-DOS 6 with the MEMMAKER utility, QEMM's market share began to slide.

While popular when DOS programs were the mainstream, QEMM eventually became largely irrelevant as Windows programs replaced DOS programs for most users. Also, some of the DOS users switched to operating systems unsupported by QEMM, such as 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 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

References

Notes
  • Ralf Brown's Interrupt List
  • Unauthorized Windows 95 (Andrew Schulman), 1st Ed.
  • Doctor Dobb's Journal, Undocumented Corner section in particular
  • Intel PCIset and Processor manuals
  • source code and binaries of HIMEM, EMM386, DOS, UMBPCI and others;
  • QEMM documentation

External links