Free Conventional Memory in MS-DOS Using DEVICEHIGH and LOADHIGH
Load relocatable MS-DOS drivers and TSRs into Upper Memory Blocks with DEVICEHIGH and LOADHIGH after enabling UMBs to free conventional memory below 640 KB.
11 Jan 2026, 18:21 UTC

Reclaim conventional memory by loading drivers into Upper Memory Blocks
MS-DOS programs run in the first 640 KB of RAM, called conventional memory. Device drivers loaded in CONFIG.SYS and TSRs loaded in AUTOEXEC.BAT occupy that space, leaving less room for applications. The practical way to gain more conventional memory is to move relocatable drivers and TSRs into the unused memory holes between 640 KB and 1 MB, known as Upper Memory Blocks (UMBs), using DEVICEHIGH in CONFIG.SYS and LOADHIGH (or LH) in AUTOEXEC.BAT after the UMBs have been made available.
How UMB loading works
HIMEM.SYS provides access to the extended memory area above 1 MB. EMM386.EXE with the NOEMS switch creates a UMB window in real mode without offering Expanded Memory Specification (EMS) pages. The line DOS=HIGH,UMB tells MS-DOS to place its own kernel in an UMB if one exists and to allow programs to be loaded into UMBs. DEVICEHIGH attempts to load a device driver into a UMB; if no UMB is free or the driver cannot be relocated, it falls back to conventional memory. LOADHIGH works the same way for command‑line programs and TSRs.
Worked CONFIG.SYS and AUTOEXEC.BAT example
Make a backup of your current system files before editing. From a DOS prompt with write access to the boot drive, copy CONFIG.SYS to CONFIG.SYS.BAK and AUTOEXEC.BAT to AUTOEXEC.BAK.
CONFIG.SYS DEVICE=C:\\DOS\\HIMEM.SYS DEVICE=C:\\DOS\\EMM386.EXE NOEMS DOS=HIGH,UMB DEVICEHIGH=C:\\DOS\\ANSI.SYS DEVICEHIGH=C:\\DOS\\SMARTDRV.EXE /X
The first two lines install the memory managers. DOS=HIGH,UMB enables kernel relocation and UMB support. DEVICEHIGH is used for drivers that are known to be UMB‑safe.
AUTOEXEC.BAT LH C:\\DOS\\MOUSE.COM
LOADHIGH (aliased as LH) attempts to load the mouse driver into a UMB.
Limits and common mistakes
- UMB layout depends on the BIOS, video adapter and other hardware; a configuration that works on one PC may leave less conventional memory on another.
- DEVICEHIGH and LOADHIGH do not guarantee relocation—some drivers and TSRs are not UMB‑safe and will crash if moved.
- EMM386 NOEMS reduces the amount of available EMS memory and can interfere with hardware or software that expects extended memory.
- Loading HIMEM.SYS after a driver that needs it prevents UMB creation.
- Using DEVICEHIGH before EMM386.EXE has been installed causes the driver to load into conventional memory.
- Assuming every program is relocatable leads to failures; check vendor documentation.
- Using LOADHIGH on programs that require low‑memory addresses for specific operations (e.g., certain copy‑protection schemes) will cause them to malfunction.
- Placing too many programs in fragmented UMBs can exhaust the available blocks and lead to stack failures or system hangs.
Verify the result
- Reboot the system with the modified CONFIG.SYS and AUTOEXEC.BAT.
- At the prompt, run
MEM /Cto display the amount of free conventional memory; compare this value with the before‑change baseline. - Run
MEM /Dto list the UMB regions and confirm that the drivers and TSRs appear as “HIGH” in the load column. - Run a memory‑intensive DOS application (for example, a large spreadsheet or a game) to ensure that sufficient conventional memory is available for the program to start and operate.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.