Microsoft KB Archive/112816

= Locating and Excluding RAM/ROM Addresses in the UMA =

Article ID: 112816

Article Last Modified on 5/19/2001

-

APPLIES TO


 * Microsoft MS-DOS 6.0 Standard Edition
 * Microsoft MS-DOS 6.2 Standard Edition
 * Microsoft MS-DOS 6.21 Standard Edition
 * Microsoft MS-DOS 6.22 Standard Edition
 * Microsoft Windows 3.1 Standard Edition
 * Microsoft Windows 3.11 Standard Edition

-



This article was previously published under Q112816



SUMMARY
This article describes how to locate adapter RAM and ROM addresses in the upper memory area (UMA) by using the Microsoft Diagnostic (MSD) utility and/or excluding memory ranges on the EMM386.EXE line in the CONFIG.SYS file.



MORE INFORMATION
The UMA, which is between 640K and 1024K, is primarily reserved for RAM and ROM on hardware devices. The UMA is also used by EMM386.EXE to load device drivers and terminate-and-stay-resident (TSR) programs into available addresses in the UMA. Conflicts can result when either of the following occur:


 * Two or more hardware devices are trying to use the same memory address in the UMA. -or-


 * EMM386.EXE is unable to detect whether an address is in use by a hardware device and loads a TSR program or device driver into that address.

To determine which of the above is causing the problem, edit your EMM386.EXE line in the CONFIG.SYS file to read as follows:   device=c:\dos\emm386.exe noems x=a000-f7ff Reboot the computer. If the problem still occurs, it may be caused by multiple hardware devices using the same memory address. In such cases, you must consult your hardware documentation or manufacturer for information on resolving the conflict.

If the problem does not occur, it is most likely being caused by a conflict with EMM386.EXE and a hardware device in the UMA. To resolve this type of conflict, you must identify which upper memory addresses are being used by hardware and then exclude these addresses using the EMM386.EXE device line in the CONFIG.SYS file. The Microsoft Diagnostic (MSD) utility can be used to identify upper memory blocks (UMBs) in use by hardware. To do this:


 * 1) Reboot the computer and perform a "clean boot" by pressing F5 once when the message "Starting MS-DOS..." appears.
 * 2) Type msd at the MS-DOS command prompt, and press M to select Memory. Using the legend at the top of the screen, locate the area(s) marked as RAM and/or ROM, and make a note of the starting and ending addresses of this area(s). This is the area(s) that needs to be excluded using the EMM386.EXE device line in the CONFIG.SYS file.
 * 3) Open the CONFIG.SYS file and add the exclusion(s) to the EMM386.EXE line (for example, X=C000-C7FF X=D800-DBFF), and restart the computer.

If memory conflicts exist after you complete the above procedure, there may be some adapter RAM and/or ROM addresses that MSD is unable to correctly detect. Use the following technique to help isolate the conflicting memory region.

  Verify that the problem is being caused by a conflict in the UMA by editing the CONFIG.SYS file and specifying the following parameters on the EMM386.EXE device line:

 NOEMS X=A000-F7FF Remove any other X= or I= parameters Remove the HIGHSCAN parameter, if present

A sample line might read as follows: <pre class="fixed_text">     device=c:\dos\emm386.exe noems x=a000-f7ff </li> Save the changes and restart the computer. If the problem goes away, continue with the steps below. If the problem still occurs, it is not being caused by a conflict in the UMA, and you need to perform other troubleshooting to determine the cause of the problem. For more information on troubleshooting EMM386.EXE, query on the following words in the Microsoft Knowledge Base:

emm386.exe and troubleshooting and notr

</li> If the problem is corrected by using X=A000-F7FF, edit the CONFIG.SYS file and shrink the excluded range by changing the parameter to X=C000-F7FF. Save the file and restart the computer. If the problem does not recur, proceed to the next step.

If the problem does recur, the conflict may be in either the A000 or B000 range. To verify this, change the X=C000-F7FF parameter to X=A000-BFFF and restart the computer. If this corrects the problem, you can further narrow the range by changing the parameter to X=A000-AFFF. If the problem still exists, try X=B000-BFFF. Once you have narrowed the problem down to a specific range (B000-BFFF), you may be able to narrow it down to half of the range. To do this, try excluding either the first half (X=B000-B7FF) or the second half (X=B800-BFFF) of the range. If neither of these work, you must leave the whole range excluded (X=B000-BFFF).</li> If specifying X=C000-F7FF does not cause the problem to recur, open the CONFIG.SYS file and shrink the range further to X=D000-F7FF. Restart the computer and see if the problem recurs. If not, shrink the range further to X=E000-F7FF. Repeat this process until the problem recurs.</li> When the problem recurs, edit the CONFIG.SYS file to change the first number in the range back to what it had been and decrease the second number in the range. For example, if X=D000-F7FF worked correctly, but X=E000-F7FF did not, change the first number back to D000 and decrease the second number, so the range reads X=D000-EFFF. If that works, decrease the second number again (X=D000-DFFF). Once you have narrowed the problem down to a specific range (for example, D000-DFFF), you may be able to narrow it down to half of the range. To do this, try excluding either the first half (X=D000-D7FF) or the second half (X=D800-DFFF). If neither of these work, you must leave the whole range excluded (X=D000-DFFF).</li></ol>