Managing memory in DOS / 9X



Include in Config.sys:
device=c:\dos\himem.sys
device=c:\dos\emm386.exe noems i=b000-b7ff
dos=high,umb

Load drivers in Config.sys with devicehigh= and in Autoexec.bat with lh=. Also see http://support.microsoft.com/?kbid=151718

MSD's (ftp.microsoft.com/softlib/mslfiles/msdzip.exe) Memory Map will show free areas to include in line 2. Also check BIOS options.

When you run the memory map in MSD, you will see a display screen similar to the one's below. There are 64 megs of memory corresponding to each letter. Areas in the A through F ranges can be included in the EMM386 line of your config.sys to make more upper memory available. B000-B7FF is reserved for monochrome video memory and can almost always be included. If you can not boot up after including a memory range, hold down the F8 or F5 key just before the operating system loads then bypass and edit config.sys.

I=mmmm-nnnn
Specifies a range of segment addresses to be used (included) for an EMS page or for UMBs. Valid values for mmmm and nnnn are in the range A000h through FFFFh and are rounded down to the nearest 4-kilobyte boundary. The X switch takes precedence over the I switch if the two ranges overlap.

X=mmmm-nnnn
Prevents EMM386 from using a particular range of segment addresses for an EMS page or for UMBs.

DEVICE=C:\DOS\EMM386.EXE NOEMS
27 K Upper Available
Segment 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
EC00                        
E800                                
E400                                
E000                                
DC00 U U U U U U U U U U U U U U U U
D800 U U U U U U U U U U U U U U U U
D400 U U U U U U U U U U U U U U U U
D000 U U U U U U U U U U U U U U U U
CC00 U U U U U U U U U U U U U U U U
C800 U U U U U U U U U U U U U U U U
C400
C000
BC00                                
B800                                
B400                                
B000                                


DEVICE=C:\DOS\EMM386.EXE NOEMS I=B000-B7FF I=E000-ECFF I=EE00-EFFF
119 K Upper Available
Segment 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
EC00 U U U U U U U U U U U U
E800 U U U U U U U U U U U U U U U U
E400 U U U U U U U U U U U U U U U U
E000 U U U U U U U U U U U U U U U U
DC00 U U U U U U U U U U U U U U U U
D800 U U U U U U U U U U U U U U U U
D400 U U U U U U U U U U U U U U U U
D000 U U U U U U U U U U U U U U U U
CC00 U U U U U U U U U U U U U U U U
C800 U U U U U U U U U U U U U U U U
C400
C000
BC00                                
B800                                
B400 U U U U U U U U U U U U U U U U
B000 U U U U U U U U U U U U U U U U

This table shows the 64 Hexadecimal address ranges for E values that you use to assign memory inclusions (I=mmmm-nnnn) or exclusions (X=mmmm-nnnn). Substitute A-D for E if applicable.
  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Finish EC3F EC7F ECBF ECFF ED3F ED7F EDBF EDFF EE3F EE7F EEBF EEFF EF3F EF7F EFBF EFFF
Start EC00 EC40 EC80 ECC0 ED00 ED40 ED80 EDC0 EE00 EE40 EE80 EEC0 EF00 EF40 EF80 EFC0
Finish E83F E87F E8BF E8FF E93F E97F E9BF E9FF EA3F EA7F EABF EAFF EB3F EB7F EBBF EBFF
Start E800 E840 E880 E8C0 E900 E940 E980 E9C0 EA00 EA40 EA80 EAC0 EB00 EB40 EB80 EBC0
Finish E43F E47F E4BF E4FF E53F E57F E5BF E5FF E63F E67F E6BF E6FF E73F E77F E7BF E7FF
Start E400 E440 E480 E4C0 E500 E540 E580 E5C0 E600 E640 E680 E6C0 E700 E740 E780 E7C0
Finish E03F E07F E0BF E0FF E13F E17F E1BF E1FF E23F E27F E2BF E2FF E33F E37F E3BF E3FF
Start E000 E040 E080 E0C0 E100 E140 E180 E1C0 E200 E240 E280 E2C0 E300 E340 E380 E3C0