Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top
Modules using memory below 1 MB:

  Name           Total       =   Conventional   +   Upper Memory
  --------  ----------------   ----------------   ----------------
  MSDOS       14 317   (14K)     14 317   (14K)          0    (0K)
  HIMEM        1 120    (1K)      1 120    (1K)          0    (0K)
  EMM386       3 120    (3K)      3 120    (3K)          0    (0K)
  OAKCDROM    36 064   (35K)     36 064   (35K)          0    (0K)
  POWER           80    (0K)         80    (0K)          0    (0K)
  NLSFUNC      2 784    (3K)      2 784    (3K)          0    (0K)
  COMMAND      2 928    (3K)      2 928    (3K)          0    (0K)
  MSCDEX      15 712   (15K)     15 712   (15K)          0    (0K)
  SMARTDRV    30 384   (30K)     13 984   (14K)     16 400   (16K)
  KEYB         6 752    (7K)      6 752    (7K)          0    (0K)
  MOUSE       17 296   (17K)     17 296   (17K)          0    (0K)
  DISPLAY      8 336    (8K)          0    (0K)      8 336    (8K)
  SETVER         512    (1K)          0    (0K)        512    (1K)
  DOSKEY       4 144    (4K)          0    (0K)      4 144    (4K)
  POWER        4 672    (5K)          0    (0K)      4 672    (5K)
  Free       552 944  (540K)    539 088  (526K)     13 856   (14K)

Memory Summary:

  Type of Memory       Total   =    Used    +    Free
  ----------------  ----------   ----------   ----------
  Conventional         653 312      114 224      539 088
  Upper                 47 920       34 064       13 856
  Reserved                   0            0            0
  Extended (XMS)*   64 898 256    2 671 824   62 226 432
  ----------------  ----------   ----------   ----------
  Total memory      65 599 488    2 820 112   62 779 376

  Total under 1 MB     701 232      148 288      552 944

  Total Expanded (EMS)                33 947 648 (33 152K
  Free Expanded (EMS)*                33 538 048 (32 752K

  * EMM386 is using XMS memory to simulate EMS memory as needed.
    Free EMS memory may change as free XMS memory changes.

  Largest executable program size        538 976   (526K)
  Largest free upper memory block          7 488     (7K)
  MS-DOS is resident in the high memory area.

I'm running MS-DOS 6.22 on VMWare virtual hardware. This is memory state after MEMMAKER pass, so i'm looking for optimization beyond MEMMAKER.

Note: NLS drivers (DISPLAY, KEYB, NSLFUNC) are essential for me.

Thanks to @mtone for valuable reminder about MSCDEX /E which gave me 16KiB of low memory (see the diff)!

share|improve this question
What is this, 1994? Do you need the cd drive - if not disabling oakcdrom & mscdex would help, otherwise if I recall correctly mscdex can be moved in upper mem with a command line switch. – mtone Jun 10 '12 at 3:12
Have you considered FreeDOS, which generally does a better job of shoving stuff into upper memory? – Ignacio Vazquez-Abrams Jun 10 '12 at 3:46
@mtone, well, yes and no, i cannot access virtual CD-ROM w/o driver set. But of course i can use MS-DOS's boot menu capability to create "NOCD" configuration. MSCDEX refuses to move itself to the upper memory, but /E switch makes it to use EMS for buffering. Thanks! – user539484 Jun 10 '12 at 3:53
Just curious, what exactly are you doing with dos in a memory poor environment? – Journeyman Geek Jun 11 '12 at 16:19
@Journeyman Geek, poor? 64MiB RAM for average DOS machine is more likely a helluva lot :-) But here infamous "640KiB is enough for everyone" kicks in. That is, regular DOS programs wants low memory, so this problem is common for all DOS installations. BTW, please do not remove [dos] at least until Dennis's sole initiative against this tags will bring some noticeable improvement. – user539484 Jun 11 '12 at 21:00

Try replacing any DEVICE= lines in your CONFIG.SYS with DEVICEHIGH=.

I think the DOS=HIGH,UMB helps somehow, but I've forgotten what it does exactly. I think it moves DOS itself into the upper area if possible.

There's also the LOADHIGH command you can use for MSCDEX and other TSR's IIRC.

The above may be wrong. It's been at least 10 years since I've seriously messed with DOS but I hope it helps.

Also if you don't have a program that needs SETVER you can get rid of it. Also consider getting rid of DOSKEY if you don't need its command line enhancements.

Last, if you free up too much conventional memory and get some type of corruption error message on starting programs, use LOADFIX.

share|improve this answer
As i ran automated optimization already, DOS has been loaded high already (last line form MEM output). But it appears what there is no available UMB large enough to accommodate one of big driver, as suggested DEVICEHIGH/LOADHIGH had no effect. – user539484 Jun 10 '12 at 8:18
Do you need SMARTDRV (isn't that a RAM drive) – Mark Jun 10 '12 at 9:34
@Mark, no, it is VMWare. – user539484 Jun 11 '12 at 21:05
@user539484 - – Mark Jun 11 '12 at 21:13
@Mark, yes, i know that. Still no idea how it relates to your RAM drive remark. – user539484 Jun 11 '12 at 21:43

Unless you need to stay with Microsoft's drivers, I suggest replacing them with FreeDOS alternatives which are more flexible and have a smaller memory footprint.

  • ctmouse replaces mouse
  • uide replaces oakcdrom and smartdrv
  • shsucdx replaces mscdex

If there is no specific requirement for MS DOS, simply using FreeDOS as already suggested by Ignacio Vazquez-Abrams would be the easiest solution.

share|improve this answer
Yep, i've chosen OAKCDROM after Microsoft, it is known for great compatibility with numerous driver and good stability, but apparently large memory footprint. Since that in VMWare i dont need compatibility, i gave Benq driver (VIDE-CDD) a try. This message scared me off from using Jack Ellis software. Currently, i'm trying CuteMouse too, thanks. – user539484 Jun 11 '12 at 13:33
numerous driver = numerous drives, sorry. – user539484 Jun 11 '12 at 20:20
Meanwhile, CuteMouse exhibited faulty behaviour in graphic mode application (some kind of acceleration jitter) – user539484 Jun 11 '12 at 21:45

Agreed with using better drivers. I saw OAKCDROM.SYS and instantly thought of alternatives. I didn't know about UIDE when I researched this many years ago. But I still found better alternatives than OAKCDROM.SYS : See TOOGAM's Software Archive: CD-ROM drivers. CuteMouse is also a great recommendation. These can provide you with more free memory and really no downsides. It's just newer and better code.

SHSUCDX can save memory, although may have some issues with CD Audio (at least with version 2.20b, as I recall). If CD audio works fine with it, or if that is a non-issue, then use it.

I also agree with using DOS=HIGH,UMB and trying to use DEVICEHIGH. But using DEVICEHIGH might use up a tiny bit of upper memory, and then you might have just barely not enough upper memory for something bigger. So watching things carefully may be needed to get the ideal setup. Don't even bother with that until after you know what drivers you want.

Then, LH can be used for anything from the command line, including anything loaded from the AUTOEXEC.BAT.

Get rid of DOSKey: Instead, use 4DOS to replace Command.Com. 4DOS used to be shareware but there is now a Freeware version, and then later source code became available. I do believe that 4DOS tends to use less conventional memory, or at least can be configured to do so. To use 4DOS, obtain the software and then have the CONFIG.SYS refer to it via SHELL, e.g.:


Also set the COMSPEC:


Comspec can be CONFIG.SYS or AutoExec.bat

Probably get rid of SETVER: It is usually completely unnecessary. It simply makes some software work, instead of the software complaining uselessly about software versions. But software typically doesn't do that unless it was bundled with another (commercial?) DOS version.

][CyberPillar][: DOS Memory lists some other options, like replacing the memory managers. e.g.: If you have the time to really play with stuff, see if UMBPCI works on your system. If so, enjoy using that instead of EMM386.

Otherwise, EMM386 (I think, maybe HIMEM, but I think EMM) has some parameter (HIGHSCAN if I remember right) that can generate more memory, but freezes up a small percentage of systems. Check the online help for such a parameter; it might cause more memory to be found and be used.

Well, following all of those tips will be a pretty good start anyway.

I know you addressed this in your question, but since that line ay be easy to miss, I'll quickly point out that NLSFunc (National Keyboard Language Functionality) and DISPLAY.SYS (loaded in CONFIG.SYS) may be unnecessary unless you are trying to support non-American code pages. Similar for KEYB. I don't know how well POWER is.

Don't have much faith in MemMaker. It can help. It can make things worse. Usually it helps, a bit, if using an unoptimized system. Maybe try it again after making all other recommended changes, including backing up your CONFIG.SYS and AUTOEXEC.BAT before letting MemMaker look at the system.

If you need memory for a specific application, you might be able to create a boot menu that lets you choose what drivers to load. MS-DOS 6.x supported this by using commands in a CONFIG.SYS. (See HELP for "menu" commands.)

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.