Diagnose Memory Conflicts in MS-DOS 6.22
In MS-DOS 6.22, the primary utility designed to detect and
troubleshoot memory address conflicts is Microsoft Diagnostics, commonly
executed as MSD. This article explains how MSD identifies
overlapping memory ranges, how to interpret its diagnostic reports, and
how to use this information to resolve conflicts between expansion
hardware and device drivers.
Microsoft Diagnostics (MSD.EXE)
Microsoft Diagnostics (MSD.EXE) is a built-in,
menu-driven diagnostic tool included with MS-DOS 6.22. It inspects
system hardware, adapter configurations, and memory allocation to give a
comprehensive breakdown of system resources. When dealing with hardware
installation or driver configuration, MSD provides the necessary
visibility into the system's memory map to prevent two devices or
programs from competing for the same address space.
Identifying Memory Conflicts with MSD
Memory address conflicts typically occur in the Upper Memory Area
(UMA)—the region between 640 KB and 1024 KB (addresses
A000h to FFFFh). This area is shared by video
RAM, system BIOS, network interface cards, sound cards, and expanded
memory managers like EMM386.EXE.
To view memory allocations and locate conflicts using MSD:
- Type
MSDat the MS-DOS prompt and press Enter. - Select the Memory option from the main menu (or
press
M). - Examine the memory map display.
MSD renders a visual map of the Upper Memory Area divided into segments. It highlights:
- ROM: Regions reserved by adapter read-only memory.
- RAM: Areas currently occupied by programs or drivers.
- Available: Unused address space suitable for Upper Memory Blocks (UMBs).
- Possibly Available: Segments that may contain uninitialized hardware.
If an expansion card (such as a network card or SCSI adapter) has an
address range overlapping with an area assigned to
EMM386.EXE or another adapter, system instability or boot
crashes occur. MSD reveals the exact hexadecimal ranges occupied by each
detected component, making it possible to spot these overlaps.
Supplementary Command: MEM.EXE
While MSD provides a visual map and hardware inspection, the
command-line utility MEM.EXE serves as a quick way to
inspect active memory allocations. Running:
MEM /C /P
classifies programs and drivers loaded in both conventional and upper
memory, displaying their sizes and hexadecimal locations. While
MEM does not probe unconfigured hardware like MSD, it
confirms whether loaded software is infringing on restricted memory
ranges.
Resolving Address Conflicts
Once MSD identifies a memory overlap, the conflict is resolved by:
- Adjusting Hardware Jumpers/DIP Switches: Change the base I/O memory address of legacy ISA expansion cards to an unoccupied block shown as "Available" in MSD.
- Configuring CONFIG.SYS: Use the
X=parameter inEMM386.EXEto exclude the conflicting address range from upper memory management. For example:
This tells DOS not to allocate UMBs in that range, leaving it entirely available for the specific hardware adapter.DEVICE=C:\DOS\EMM386.EXE NOEMS X=D000-D7FF