This article was previously published under Q112816
This article has been archived. It is offered "as is" and will no longer be updated.
This article describes how to locate adapter RAM and ROM addresses in theupper memory area (UMA) by using the Microsoft Diagnostic (MSD) utilityand/or excluding memory ranges on the EMM386.EXE line in the CONFIG.SYSfile.
The UMA, which is between 640K and 1024K, is primarily reserved for RAM andROM on hardware devices. The UMA is also used by EMM386.EXE to load devicedrivers and terminate-and-stay-resident (TSR) programs into availableaddresses in the UMA. Conflicts can result when either of the followingoccur:
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 yourEMM386.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 bymultiple hardware devices using the same memory address. In such cases, youmust consult your hardware documentation or manufacturer for information onresolving the conflict.
If the problem does not occur, it is most likely being caused by a conflictwith EMM386.EXE and a hardware device in the UMA. To resolve this type ofconflict, you must identify which upper memory addresses are being used byhardware and then exclude these addresses using the EMM386.EXE device linein the CONFIG.SYS file. The Microsoft Diagnostic (MSD) utility can be usedto identify upper memory blocks (UMBs) in use by hardware. To do this:
Reboot the computer and perform a "clean boot" by pressing F5 once when the message "Starting MS-DOS..." appears.
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.
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 maybe some adapter RAM and/or ROM addresses that MSD is unable to correctlydetect. Use the following technique to help isolate the conflicting memoryregion.
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:
Remove any other X= or I= parameters
Remove the HIGHSCAN parameter, if present
A sample line might read as follows:
device=c:\dos\emm386.exe noems x=a000-f7ff
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
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).
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.
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).
If you have several hardware devices in your system using upper memory addresses, you may need to exclude more than one range. For example, you might list X=C000-C7FF X=E000-EFFF on the EMM386.EXE line.
If may be possible to narrow an exclusion to a smaller portion of a range (for example, X=C000-C3FF or X=C400-C7FF or X=C800-CBFF or X=CC00-CFFF.)
The MSD utility contains a memory map that may be helpful in understandinghow the upper memory ranges are divided and defined. To view the memorymap, type msd at an MS-DOS command promptand then choose M for Memory.
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