Memory Problems:
EMS memory and XP

(adapted from threads on VOGONS)

Anymore, memory problems are rarely an issue. With modern OSs, memory management is completely handled by the OS itself. Gone are the days that users have worry about freeing up enough base memory to run some application or game. See here for old style memory management.

Given PC architecture, memory is divided up into different ranges of addresses. The lowest, Base (first 640KB), Upper (the next 640-1024 KB), High (1024-1084 KB), Extended (everything above 1 MB).

However when running old DOS games, you might occasionally encounter some problems. Some users might find that they don't have enough extended memory using the XP DOS emulator. This is an issue with modern mother boards.

There were parameters for EMM386.EXE in CONFIG.SYS (DOS, Win9x) NOEMS and RAM to set EMS. In Windows XP, you can set EMS in the properties of the program (right click, chose "Properties" and page "Memory"). Unfortunately there are some PC configurations where it is not possible to get EMS in Win XP.

On many new PCs, XP doesn't seem to allocate any EMS memory. When trying to start a program that requires EMS memory, it will say that there is not enough EMS memory. Windows can't even allocate any EMS memory using a config.nt that contains the line "EMM=RAM" and modifying the .PIF settings.

In order to provide EMS memory to DOS programs, Windows needs to find a free 64KB memory area in the upper memory region, between 640 KB and 1MB. This is how the original EMS memory cards worked in the original PC-XTs and this is still the only way to simulate it under Windows.

Many modern motherboards do not present any free memory in this region, making it impossible for Windows to emulate EMS memory when you run DOS programs. On these motherboards, certain hardware (ethernet controllers, integrated USB, etc.) uses the memory ranges needed by DOS/NT4/2K/XP to enable EMS .

To find out if your computer has any EMS memory, create a file in Notepad with the line:


and name it MEM.BAT. The MEM command reports info about memory. In this case it redirects that report to text file.

Run it with VDMSound (right-click and choose Run with VDMS.) You have at least 64 KB of upper memory, but they are used as UMBs instead of an EMS frame. This is the default setting for a NTVDM under Windows 2000/XP, unless you change config.nt. The default setting for a VDMS shortcut is to enable EMS.

It should create a text file called VDMSMEM.TXT and report something like the following:

Conventional Memory :

Name Size in Decimal Size in Hex
------------- --------------------- -------------
MSDOS 13184 ( 12.9K) 3380
KBD 3296 ( 3.2K) CE0
EMM 176 ( 0.2K) B0
HIMEM 1248 ( 1.2K) 4E0
COMMAND 3152 ( 3.1K) C50
FREE 112 ( 0.1K) 70
FREE 633984 (619.1K) 9AC80

Total FREE : 634096 (619.2K)

Upper Memory :

Name Size in Decimal Size in Hex
------------- --------------------- -------------
SYSTEM 180208 (176.0K) 2BFF0
MOUSE 12528 ( 12.2K) 30F0
DOSX 34720 ( 33.9K) 87A0
FREE 256 ( 0.3K) 100
FREE 34336 ( 33.5K) 8620

Total FREE : 34592 ( 33.8K)

Total bytes available to programs (Conventional+Upper) : 668688 (653.0K)
Largest executable program size : 633712 (618.9K)
Largest available upper memory block : 34336 ( 33.5K)

4194304 bytes total EMS memory
4194304 bytes free EMS memory

20971520 bytes total contiguous extended memory
0 bytes available contiguous extended memory
16628736 bytes available XMS memory
MS-DOS resident in High Memory Area

With DOS in certain situations it IS possible to reassign EMS to another memory range with limited results, but not for the NT family (Windows 2000/XP.) For 2K/XP, the ONLY solution may be to disable the offending hardware on the motherboard. You can turn off motherboard's features in your computer's BIOS, (WARNING: Do not enter the BIOS of your computer unless you know what you are doing. By changing some settings may end up with an un-bootable computer) such as onboard RAID controllers, SCSI cards, or "USB legacy support" for USB keyboards and mice, that could release the appropriate memory blocks to free up more "Upper Memory". This works for some boards but not all. If it doesn't, then there may be no other solution than full hardware emulation (DOSBox) or virtualization (VirtualPC and VMWare).


by helping to defray some of the costs of hosting this site. If it has been of help to you, please consider contributing to help keep it online.
Thank you.

© 2006 to present The Sierra Help Pages. All rights reserved. All Sierra games, artwork and music © Sierra.