• Please review our updated Terms and Rules here

Not Enough Memory Question

mattm16

Member
Joined
Jan 19, 2024
Messages
25
Hello: I have a Pentium PC with an issue with a few games stating not enough memory. If I take out the CD ROM lines in the Autoexec.bat and Config.sys files, the game loads fine; however, I cannot manually initialize the CD ROM without the line in the Config.sys file. When I put the line in (DEVICEHIGH=C:\DOS\OAKCDROM.SYS /D:MSCD001) it auto loads the cd rom driver, and the games do not work. In Upper Memory, I have CTMOUSE, and SETVER. I have 52,400 free in Upper Memory. Can I load the CDROM, and/or SmartDrv in upper memory? If I replace DEVICEHIGH, with LH it states error in line 3 on config.sys (line 3 is the CD ROM). Or just disable Smartdrv? If so, how?
 
Which games? Depending on the game, you might need the disk cache (SMARTDRV) or the CD-ROM. Putting a REM at the start of the line for a driver will prevent it from loading.

Could you provide the results of doing MEM /C ? That would show what is loaded and where.

You might be able to load something in Upper Memory but it depends on whether the upper memory is fragmented. Sometimes, it was necessary to rearrange the order in which drivers were loaded to make it easier to load more programs high.
 
They are older games like Police Quest 1 and Police Quest 3. They do not need the CD ROM. If I do a MEM/C |more, it does show that CTMOUSE, and SETVER are using Upper Memory, and MSDOS, HIMEM, OAKCDROM, EMM386, Command, and Smartdrv are using Conventional. It also shows that Conventional memory free is 550,544, Upper free is 52,400, Reserved is 0 and Extended is 38,191,104. Largest executable program size is 550,304.

In Conventional memory, MSDOS - 16,045; HIMEM - 1,120, OAKCDROM - 36,064, EMM386 - 3,120, Command - 2,928, and Smartdrv - 29,024.

I didn't know if I could either A. Load either OakCDROM or Smartdrv in Upper memory, or B. Configure the system to not load the CD ROM on startup, and then I can load it manually if needed. I would rather do A if possible.

Update: I have got MSCDEX to load in Upper Memory by putting a LH MSCDEX command in the autoexec.bat file. However, now it loads MSCDEX in upper memory, and still has the Oakcdrom in Conventional.
 
Last edited:
Are you using DOS=HIGH,UMB in your config.sys?

If you have EMS, use the /E switch with mscdex. Also oakcdrom.sys is pretty large, you should try vide-cdd.sys instead.

If you are using MS-DOS 6, you can also run memmaker.
 
IIRC, MSD would show how the UMBs are allocated which would tell if there is a large enough block to load either OAKCDROM or SMARTDRV high. It might be necessary to load CTMOUSE or SETVER in conventional memory in order to load the larger drivers high.

Having 52K free won't help if it is broken into a pair of 26k chunks.
 
Post the contents of config.sys and autoexec.bat, as well as the output of mem /c. We are just trying to guess without them.
 
Do you even need setver? I never use it.

I do have a startup menu to choose between a normal boot, and a stripped-down boot (to get more memory).

Later versions of mem have a /p switch, so you don't need |more .
 
Thanks - yes I am using DOS=High,UMB. I will post the autoexec.bat and config.sys later this weekend or next week.
 
Attached is the output of the Config.Sys, and Autoexec.bat files
 

Attachments

  • IMG_0032.JPG
    IMG_0032.JPG
    1.7 MB · Views: 12
  • IMG_0033.JPG
    IMG_0033.JPG
    2 MB · Views: 12
In config.sys you should really have himem and emm386 first.

But can you share the output of mem /c

Not related to your issue, but I also wouldn’t put my temp environment variable to c:\dos
 
Also if you you don't really want (or don't know if you do) EMS memory, try emm386.exe NOEMS instead of RAM, and check mem /c
 
In CONFIG.SYS, reorder the lines as follows and remove the /L load parameters:

Code:
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE RAM
DEVICEHIGH=C:\DOS\OAKCDROM.SYS /D:MSCD0001
DEVICEHIGH=C:\DOS\SETVER.EXE
SHELL=C:\DOS\COMMAND.COM C:\DOS\ /P
BUFFERS=10,0
FILES=40
LASTDRIVE=E
FCBS=4,0
STACKS=9,256

You probably don't need any line after SETVER.EXE, and unless you need SETVER, you can remove it as well.

In AUTOEXEC.BAT, I would also reorder the lines and remove the /L load parameters:

Code:
@ECHO OFF
LH C:\CTMOUSE.EXE
LH C:\DOS\MSCDEX.EXE /D:MSCD0001
PROMPT $p$g
PATH=C:\WINDOWS;C:\DOS
SET TEMP=C:\DOS
SET BLASTER=A220 I7 D1 T4
SET SOUND=C:\SGNXPRO
LH C:\DOS\SMARTDRV.EXE /X

Although I would recommend creating a C:\TEMP directory and setting both the TEMP and TMP environment variables to point there.

If you are running from flash storage, you don't really need SMARTDRV.

If you don't need EMS, you should change the EMM386.EXE line to use "NOEMS" instead of "RAM", which provides an additional 64 KB UMB block.
 
In CONFIG.SYS, reorder the lines as follows and remove the /L load parameters:

Code:
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE RAM
DEVICEHIGH=C:\DOS\OAKCDROM.SYS /D:MSCD0001
DEVICEHIGH=C:\DOS\SETVER.EXE
SHELL=C:\DOS\COMMAND.COM C:\DOS\ /P
BUFFERS=10,0
FILES=40
LASTDRIVE=E
FCBS=4,0
STACKS=9,256

You probably don't need any line after SETVER.EXE, and unless you need SETVER, you can remove it as well.

In AUTOEXEC.BAT, I would also reorder the lines and remove the /L load parameters:

Code:
@ECHO OFF
LH C:\CTMOUSE.EXE
LH C:\DOS\MSCDEX.EXE /D:MSCD0001
PROMPT $p$g
PATH=C:\WINDOWS;C:\DOS
SET TEMP=C:\DOS
SET BLASTER=A220 I7 D1 T4
SET SOUND=C:\SGNXPRO
LH C:\DOS\SMARTDRV.EXE /X

Although I would recommend creating a C:\TEMP directory and setting both the TEMP and TMP environment variables to point there.

If you are running from flash storage, you don't really need SMARTDRV.

If you don't need EMS, you should change the EMM386.EXE line to use "NOEMS" instead of "RAM", which provides an additional 64 KB UMB block.
So, in config.sys, I do not need DOS=HIGH,UMB? And I don't need the Shell, Buffers, etc lines?
 
You still need the "DOS=HIGH,UMB". Sorry, I forgot that when I rearranged your file.

The shell, buffers, files, fcbs, stacks and lastdrive values are set to sensible default values if they missing. The only setting I ever had to change myself was LASTDRIVE, when I had a CD-ROM and multiple network drives. Some applications may need higher values, but the defaults tend to be fine.

The "/L:n,m" parameters are added by MemMaker to force specific applications into specific UMB blocks. However, if these blocks are unavailable (for example, because you reordered, added or removed some drivers), then the driver won't be loaded high at all. While "MEM /C" provides a decent overview of all memory, "MEM /D" will tell you all the details you need to optimize yourself.

I think that optimizing the load order is more important (large drivers first), which MemMaker won't do. If necessary, it can be run afterwards (although there is is a plethora of very small drivers nowadays).

A tiny optimization in AUTOEXEC.BAT is to set all variables after loading drivers, which slightly reduces the environment size inherited by each of them.
 
Back
Top