Devices/TSRs Do Not Load High with RAM Switch (73324)

The information in this article applies to:
    Microsoft MS-DOS operating system 5.0
    Microsoft MS-DOS operating system 5.0a

This article was previously published under Q73324


Even if you install HIMEM.SYS and EMM386.EXE and are using DEVICEHIGH for device drivers and LOADHIGH for terminate-and-stay-resident (TSR) programs, your device drivers and TSR programs do not load high.


This problem can occur if you are loading EMM386.EXE with the RAM switch.


The RAM switch establishes a 64-kilobyte (K) page frame and sets up the upper memory blocks (UMBs) for loading device drivers and TSR programs high. The search algorithm allocates the first contiguous 64K of unused upper memory area (UMA) addresses for the page frame and UMBs are created from any leftover addresses.

If EMM386.EXE finds only 64K of the UMA for a page frame and UMBs, it creates a page frame and does not have any addresses remaining from which to create UMBs. Or, if only 74K is available for EMM386.EXE, only 10K would be used for a UMB, which is too small for most drivers.

To work around this problem, force EMM386.EXE to use more addresses in the UMA by using the I= switch; or, if expanded memory is not necessary, use EMM386.EXE with the NOEMS parameter to make available all addresses used for UMBs.

For example, the range E000-EFFF is frequently unused. If the usable portion of the UMA starts at C800h and you know there is a 64K free block of memory starting at E000h, you can modify the EMM386.EXE line in your CONFIG.SYS file as follows:


By using the I= switch, the search algorithm includes the specified range when attempting to create a page frame and UMBs.

EMM386.EXE can also be forced to include address ranges for a page frame when a page frame is specified using the FRAME=, /P, or M switch that includes addresses which EMM386.EXE would not have otherwise used. As in the above example, you can modify the CONFIG.SYS file as follows:


This line forces the page frame to start at E000h and leaves the range from C800h to DFFFh free for loading programs high.

To view the location of programs loaded high and in conventional memory, use the MEM command with the /DEBUG switch. For more information on the MEM command and using the UMA, see the version 5.0 "Microsoft MS-DOS User's Guide and Reference."

For more information optimizing your upper memory blocks, query on the following words in the Microsoft Knowledge Base:

optimizing and blocks and 5.00

Modification Type: Major Last Reviewed: 9/30/2003
Keywords: KB73324