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:

  1. It can emulate Expanded Memory (LIM EMS 4.0) using Extended Memory (XMS).
  2. 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.EXE altogether, using NOEMS still 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.