Optimize MS-DOS 6.22 Memory with EMM386 NOEMS
The NOEMS switch used with EMM386.EXE is
one of the most effective tools for maximizing available conventional
memory in MS-DOS 6.22. By instructing the memory manager to provide
Upper Memory Blocks (UMBs) while completely disabling Expanded Memory
(EMS) emulation, this switch frees up a crucial 64 KB block of addresses
in the Upper Memory Area (UMA). This article explains how the
NOEMS parameter works, why it recovers valuable memory
space, and how it enables DOS users to load drivers high to maximize the
critical 640 KB base memory pool.
The Role of EMM386.EXE
In MS-DOS 6.22, standard applications execute within the first 640 KB of RAM, known as conventional memory. As hardware setups expanded to include CD-ROM drives, sound cards, mice, and network cards, their associated device drivers and Terminate-and-Stay-Resident (TSR) programs quickly consumed this space, often leaving insufficient room for demanding DOS games and business software.
Working alongside HIMEM.SYS, EMM386.EXE
serves two primary functions on 80386 and newer processors:
- It can emulate Expanded Memory (LIM EMS 4.0) using Extended Memory (XMS).
- It manages the Upper Memory Area—the address space between 640 KB and 1024 KB (1 MB)—turning unused segments into Upper Memory Blocks (UMBs).
How the NOEMS Switch Works
By default, when EMM386.EXE is loaded to provide
expanded memory, it reserves a contiguous 64 KB region in the Upper
Memory Area to act as an EMS "page frame." This frame is split into four
14 KB pages that EMS-aware applications use to swap data back and forth
from extended memory.
Adding the NOEMS switch alters this behavior:
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE NOEMS
The switch instructs EMM386.EXE to:
- Eliminate the 64 KB Page Frame: It bypasses the creation of the page frame, freeing those 64 kilobytes of address space.
- Convert Space to UMBs: The reclaimed 64 KB space is combined with other unused segments in the UMA to create additional, larger Upper Memory Blocks.
- Retain UMB Management: Unlike omitting
EMM386.EXEaltogether, usingNOEMSstill enables the memory manager to map physical extended memory into these upper address ranges.
Maximizing Conventional Memory
The primary benefit of gaining this additional 64 KB in the UMA is
the ability to relocate drivers out of conventional memory. Using the
DEVICEHIGH directive in CONFIG.SYS and the
LOADHIGH (or LH) command in
AUTOEXEC.BAT, drivers such as OAKCDROM.SYS,
MSCDEX.EXE, and MOUSE.COM can be pushed
entirely into the upper memory blocks.
Because many drivers require contiguous blocks larger than what the
standard, fragmented UMA offers, the extra contiguous 64 KB made
available by NOEMS often makes the difference between a
driver fitting into upper memory or being forced down into base memory.
This allows systems to consistently achieve over 600 KB—and often up to
620 KB or more—of free conventional memory.
Trade-offs and Considerations
Using the NOEMS parameter completely disables Expanded
Memory support. While the vast majority of software released during the
MS-DOS 6.22 era uses Extended Memory via Protected Mode (using DOS
extenders like DOS/4GW), certain legacy applications and early-1990s
games strictly require EMS.
If an application demands EMS, the NOEMS switch must be
replaced with the RAM switch (e.g.,
DEVICE=C:\DOS\EMM386.EXE RAM), which re-enables both UMBs
and the 64 KB EMS page frame at the cost of less available upper memory
space. For configurations where expanded memory is unnecessary,
NOEMS remains the optimal choice for DOS memory
management.