EMS Page Frame Memory Range in MS-DOS 6.22

This article explains the memory ranges used to define the Expanded Memory Specification (EMS) page frame in MS-DOS 6.22. It covers the specific Upper Memory Area (UMA) segments where the page frame can reside, its standard default address, its 64 KB physical size, and the configuration syntax used with the EMM386.EXE driver.

The EMS Page Frame Memory Range

In MS-DOS 6.22, the Expanded Memory Specification (LIM EMS 4.0) page frame must reside within the Upper Memory Area (UMA), which spans from 640 KB to 1024 KB (hexadecimal addresses A0000h to FFFFFh).

Because video adapters and system BIOS ROMs occupy the lower and upper bounds of the UMA, the page frame is restricted to the range between C0000h and EFFFFh (hexadecimal segments C000h to EFFFh, or 768 KB to 960 KB).

The most common default location assigned by MS-DOS 6.22 is:

  • Segment Range: D000h to DFFFh
  • Linear Memory Address: D0000h to DFFFFh (832 KB to 896 KB)

Page Frame Structure and Size

The EMS page frame requires a contiguous 64 KB block of unreserved physical memory. This 64 KB window is subdivided into four independent 16 KB pages:

  • Page 0: D000h – D3FFh
  • Page 1: D400h – D7FFh
  • Page 2: D800h – DBFFh
  • Page 3: DC00h – DFFFh

Real-mode DOS applications access expanded memory outside the 1 MB address space by instructing the expanded memory manager to bank-switch 16 KB segments into and out of these four physical windows.

Configuring the Range in MS-DOS 6.22

The page frame is initialized in the CONFIG.SYS file using HIMEM.SYS alongside the expanded memory emulator EMM386.EXE.

If hardware conflicts (such as network adapters or SCSI controllers) occupy D000h–DFFFh, the frame parameter allows manual reassignment to another contiguous 64 KB block within the C000h–EFFFh range:

DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE RAM FRAME=C800

In this example, the page frame range shifts to C8000h–D7FFFh. If set to NOEMS, EMM386.EXE disables the 64 KB page frame entirely, freeing the upper memory space for loading device drivers and TSR programs into Upper Memory Blocks (UMBs).