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:
MEM /C >VDMSMEM.TXT
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).
You can help keep The Sierra Help Pages alive
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. |
|