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:

  1. Type MSD at the MS-DOS prompt and press Enter.
  2. Select the Memory option from the main menu (or press M).
  3. 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:

  1. 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.
  2. Configuring CONFIG.SYS: Use the X= parameter in EMM386.EXE to exclude the conflicting address range from upper memory management. For example:
    DEVICE=C:\DOS\EMM386.EXE NOEMS X=D000-D7FF
    This tells DOS not to allocate UMBs in that range, leaving it entirely available for the specific hardware adapter.