Guide
Using DEVICEHIGH in CONFIG.SYS to Load Drivers into Upper Memory
Learn how to use the DEVICEHIGH directive in CONFIG.SYS to load device drivers into the Upper Memory Area, freeing conventional memory for DOS programs.
Published by Tasadduq Burney
22 Dec 2025, 05:39 UTC
2 min107.9K views0

Useful answer
The DEVICEHIGH directive in CONFIG.SYS loads a device driver into the Upper Memory Area (UMA), freeing conventional memory for DOS applications.
Mechanism – worked configuration
Place the XMS driver first, then use DEVICEHIGH for the driver you want to move, and finally enable UMBs with DOS=HIGH,UMB.
; CONFIG.SYS snippet
DEVICE=C:\DOS\HIMEM.SYS ; loads XMS driver into conventional memory
DEVICEHIGH=C:\DOS\EMM386.EXE NOEMS ; loads EMM386 into UMA (creates UMBs)
DOS=HIGH,UMB ; tells DOS to use high memory and UMBs
After reboot, the MEM command shows how much conventional memory is free and lists loaded drivers in upper memory blocks (UMBs).
Limits
- Requires an 80286 or later CPU and a functional XMS driver (
HIMEM.SYS). - Total UMA size is typically limited to 384 KB (the area between 640 KB and 1 MB).
- The driver must be relocatable and must not rely on interrupts that exist only in low memory.
- If the UMA is fragmented or insufficient, the driver will fall back to conventional memory.
Common mistakes
- Placing
DEVICEHIGHbefore the XMS driver (HIMEM.SYS) – the driver cannot be loaded because UMA support is not yet active. - Specifying a non‑relocatable driver (e.g., some legacy BIOS extensions) – it will refuse to load into UMA and may cause a system hang.
- Omitting
DOS=HIGH,UMB– DOS stays in conventional memory, soDEVICEHIGHhas no effect and the driver loads low. - Mixing
DEVICEHIGHwithLOADHIGHfor TSRs without understanding the memory map – overlapping regions can corrupt memory.
Practical verification
- Boot the MS-DOS system (or a faithful emulator such as PCem) with the edited
CONFIG.SYS. - At the
C:\>prompt runMEM. Look for a line similar toTotal conventional memory: 640Kand a list ofUpper memory blocksshowing the driver’s name. - Optionally run
MEM /Cto see a detailed map of loaded modules and confirm the driver resides in an UMB segment (addresses above 0xA0000). - If the driver appears in the conventional memory section, revisit the order of directives or check driver relocatability.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.