VirtualBox RAM still a dealbreaker for PC DOS

Software

My full review of VirtualBox 4.x is coming, but for now I can confirm the upper memory bug for PC DOS still exists. Guess I'll be using VMWare Fusion and/or QEMU for proc-control stuff for a while yet :(

Conventional memory

Bill Gates infamously quipped that nobody would ever need more than 640KiB of memory, and that's exactly how DOS sees it. Regardless of how much RAM your computer has, many DOS applications will never see more than the first 640KiB. This area is referred to as Conventional Memory.

Over time power users worked around this limitation by using so-called expanded and extended memory managers which allowed applications and drivers (that supported it!) to load themselves "high" or above this 640KiB memory area. This means extra RAM in systems could be used, and it also kept as much Conventional Memory free for older software, games and drivers that demanded it.

Unfortunately, using UMB (upper memory blocks) was always a bit of a voodoo science, and even today some software has issues with it. QEMU, VMWare software and Connetix Virtual PC (RIP) allow full UMB access, however even the latest versions of VirtualBox still have severe stability issues when used with upper memory managers.

EMM386

The EMM386 expanded memory manager that was bundled with several DOS-based versions of Windows and later versions of DOS. If it is loaded in CONFIG.SYS in its default form like this:

DOS=HIGH,UMB
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE /VERBOSE

… it results in the following error upon boot:

WARNING Unable to set page frame based address–EMS unavailable

While undesirable, on machines where this capability is unavailable the NOEMS flag can be used:

DOS=HIGH,UMB
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE NOEMS /VERBOSE

This allows the machine to boot, and does allow drivers and applications I defined in AUTOEXEC.BAT and CONFIG.SYS to be loaded high.
Unfortunately, if you attempt to mount any CD-ROM or floppy disk images in the VirtualBox virtual machine, EMM386 halts the system with this same error.

EMM386 has detected error #13 in an application at 
memory address 0048:061F. To minimize the chance of 
data loss, EMM386 has halted your computer.
To restart your computer, press ENTER.

Needless to say, having a virtual machine that only partly works and only if no media is mounted is a deal breaker.

UMBPCI.SYS

MS-DOS iconThose of you who've kept up to date with DOS developments of late know about this brilliant alternative to EMM386 that was first featured in Germany's c't magazine and now lovingly maintained to this day by Uwe Sieber. The primary advantage UMBPCI.SYS it has over EMM386 is it uses a fraction of the memory, which is obviously A Good Thing.

Unfortunately, while UMBPCI.SYS plays brilliantly with QEMU and VMware, VirtualBox fails to load it at all upon boot if its defined in place of EMM386 in CONFIG.SYS

No unused memory block found

Conclusions

My virtual machine applications

DOS is still a more commonly used system than I think many people appreciate, but I also acknowledge the limited resources a free software project like VirtualBox has to maintain support for so many different client OSs. I can appreciate that.

For now, if I want to run this DOS software l'll be continuing to use QEMU on my OS X, FreeBSD and Linux boxes for DOS. Which is a shame, because having a high performance cross-platform VM tool to rule them all would sure make my life easier.

Finally, people like to pick apart my posts as of late, so here are some points that before I wouldn't have bothered with ;). I am aware of DOSBox and FreeDOS. They do a great job. Unfortunately the software I need to run is not compatible with either one. PC DOS 2000 is still the most broadly compatible DOS distribution I've ever used, and have a lot of time invested in it. QEMU and VMware run it just fine, so I'll have to stick with them.

Oh and I'm aware that icon is of MS-DOS-Tan and NOT PC DOS, but one has to make do with the resources at hand!

Author bio and support

Me!

Ruben Schade is a technical writer and infrastructure architect in Sydney, Australia who refers to himself in the third person. Hi!

The site is powered by Hugo, FreeBSD, and OpenZFS on OrionVM, everyone’s favourite bespoke cloud infrastructure provider.

If you found this post helpful or entertaining, you can shout me a coffee or send a comment. Thanks ☺️.