Running MS-DOS on a 486

Back to homepage - Back to 486 page

Nothing here yet really, I mostly use DOS to format and read existing floppies. I've got 3.3 and 6.22 bootable from a diskette, and install media for 6.22 and WinNT.

One of the more useful DOS applications I have so far is a small floppy I made myself, that contains MS-DOS 6.22 and Craig Hart's PCI.EXE along with the database file. I had to strip most of the DOS stuff (even the CDROM driver I think) to make it fit on one, bootable flopy.

I also ran ZORK I, one of my favourite games

DOS 6.22 Live! and how to make one

Note: This was not ran on the 486 but it's the closest place this text fits in.

Over time when dealing with various obscure gear I found myself in need to run some DOS software more and more often. I have had a couple DOS bootable floppies already, however, on some machines I only have one floppy disk drive. Since DOS doesn't directly support networking, the only way to transfer software to run is to use floppies (I dont have to do this often enough to permanently install DOS on a physical machine). Swapping floppies over and over turned out cumbersome... but I have a solution now.

At some point I've learnt that DOS supported RAM-disks. There are a couple implementations, one of them being MS-DOS' RAMDRIVE.SYS. I decided to try my hand at making a bootable DOS floppy that would copy it's contents to RAM and allow me to remove the boot medium.

Not being able to find a (legit) RAMDRIVE.SYS copy, I installed MS-DOS 6.22 in QEMU, and extracted all the installed files from the hard disk (in case I need them in the future). I copied RAMDRIVE.SYS onto one of the boot floppies and edited CONFIG.SYS and AUTOEXEC.BAT as follows:

$ cat CONFIG.SYS
DEVICE=HIMEM.SYS /testmem:off
FILES=30
BUFFERS=20

DEVICE=RAMDRIVE.SYS 32767 512 /E

LASTDRIVE=Z
$ cat AUTOEXEC.BAT 
copy COMMAND.COM c:
copy EDIT.EXE c:
copy DOSKEY.COM c:
set COMSPEC=C:\COMMAND.COM
c:
doskey /insert 
@echo off

echo Ready... you can remove the floppy now.
    

On boot, CONFIG.SYS sets up HIMEM (to allow to access the extended memory rather than jsut the first 640k), then it sets up RAMDRIVE as disk C:. 32767 is the disk size, 512 the sector count and /E is a switch that created the ram disk in the extended memory (hence HIMEM is loaded first). Disk size is at the max value it will take and that results in a 32767kB ramdisk. Good enough for my needs..

Then AUTOEXEC.BAT takes control and copies COMMAND.COM, EDIT.EXE and DOSKEY.COM to the newly set up ramdrive. COMSPEC environment variable is set to point to the new location of the command interpreter, then the disk is changed to C:. Doskey (better command interpreter) is enabled, and finally, a message is displayed.

Only 3 files from the whole floppy are copied, if I need something else, I can copy it out manually at this point.

You can extract RAMDRIVE.SYS yourself, it's easy. After installing DOS in a VM, just mount the disk image as a loop device, mount the loop device somewhere and copy out the stuff.

Only COMMAND.COM, CONFIG.SYS, HIMEM.SYS, RAMDRIVE.SYS and AUTOEXEC.BAT are necesary. EDIT.EXE and DOSKEY.COM are copied over for conveinience

It's a good idea to just copy stuff into the ram disk first and then run, instead of running them directly off the floppy. Way faster that way, obviously.

The contents of the diskette are listed below. And yes the files that have the hour:minute instead of year in the date modified column of ls were modified in the year 2020.

-rwxr-xr-x 1 polprog polprog  11208 May 31  1994 ATTRIB.EXE
-rwxr-xr-x 1 polprog polprog    160 Apr 13 11:33 AUTOEXEC.BAT
-rwxr-xr-x 1 polprog polprog     34 Jul 20  1998 C.BAT
-rw-r--r-- 1 polprog polprog  34262 Sep 26  1996 CD1.SYS
-rw-r--r-- 1 polprog polprog  16504 Nov 21  1996 CD2.SYS
-rw-r--r-- 1 polprog polprog  19984 Aug 13  1996 CD3.SYS
-rw-r--r-- 1 polprog polprog  41302 May 11  1998 CD4.SYS
-rwxr-xr-x 1 polprog polprog  12241 May 31  1994 CHKDSK.EXE
-rwxr-xr-x 1 polprog polprog  54645 May 31  1994 COMMAND.COM
-rw-r--r-- 1 polprog polprog    102 Apr 13 00:40 CONFIG.OLD
-rw-r--r-- 1 polprog polprog    104 Apr 13 00:43 CONFIG.SYS
-rw-r--r-- 1 polprog polprog    377 May 29  1999 CONFIG.SYS~
-rwxr-xr-x 1 polprog polprog  11111 May 31  1994 DELTREE.EXE
-rwxr-xr-x 1 polprog polprog   5861 May 31  1994 DOSKEY.COM
-r--r--r-- 1 polprog polprog  66294 May 31  1994 DRVSPACE.BIN
-rwxr-xr-x 1 polprog polprog  69662 Oct 17  1994 EDIT.EXE
-rw-r--r-- 1 polprog polprog  17898 May 31  1994 EDIT.HLP
-rw-r--r-- 1 polprog polprog    192 Jun 24  2019 EDIT.INI
-rwxr-xr-x 1 polprog polprog 120926 May 31  1994 EMM386.EXE
-rwxr-xr-x 1 polprog polprog  29336 May 31  1994 FDISK.EXE
-rwxr-xr-x 1 polprog polprog   6770 May 31  1994 FIND.EXE
-rwxr-xr-x 1 polprog polprog  22974 May 31  1994 FORMAT.COM
-rw-r--r-- 1 polprog polprog  29136 May 31  1994 HIMEM.SYS
-r--r--r-- 1 polprog polprog  40774 May 31  1994 IO.SYS
-rwxr-xr-x 1 polprog polprog   9390 May 31  1994 LABEL.EXE
-rwxr-xr-x 1 polprog polprog  32502 May 31  1994 MEM.EXE
-rw-r--r-- 1 polprog polprog      7 Jul  6  1997 MOUSE.@@@
-rwxr-xr-x 1 polprog polprog  56408 Mar 10  1993 MOUSE.COM
-rw-r--r-- 1 polprog polprog     24 Feb  2  1996 MOUSE.INI
-rw-r--r-- 1 polprog polprog  31701 May  1  1990 MOUSE.SYS
-rwxr-xr-x 1 polprog polprog  25361 May 31  1994 MSCDEX.EXE
-r--r--r-- 1 polprog polprog  38138 May 31  1994 MSDOS.SYS
-rwxr-xr-x 1 polprog polprog 194309 May 31  1994 QBASIC.EXE
-rw-r--r-- 1 polprog polprog 130881 May 31  1994 QBASIC.HLP
-rw-r--r-- 1 polprog polprog   5873 Apr 13 00:39 RAMDRIVE.SYS
-rwxr-xr-x 1 polprog polprog  38342 May 31  1994 RESTORE.EXE
-rwxr-xr-x 1 polprog polprog 124262 May 31  1994 SCANDISK.EXE
-rw-r--r-- 1 polprog polprog   6920 May 31  1994 SCANDISK.INI
-rwxr-xr-x 1 polprog polprog  12015 May 31  1994 SETVER.EXE
-rwxr-xr-x 1 polprog polprog  10912 May 31  1994 SHARE.EXE
-rwxr-xr-x 1 polprog polprog   9432 May 31  1994 SYS.COM
-rwxr-xr-x 1 polprog polprog   6945 May 31  1994 TREE.COM
-rwxr-xr-x 1 polprog polprog  26416 May 31  1994 UNDELETE.EXE
-rw-r--r-- 1 polprog polprog    235 Feb 23  1995 UNDELETE.INI
-rwxr-xr-x 1 polprog polprog  12738 May 31  1994 UNFORMAT.COM
-rwxr-xr-x 1 polprog polprog  16930 May 31  1994 XCOPY.EXE
    

Apart from that, my often used boot floppy set contains regular DOS 6.22 bootable floppy, DOS 6.22 with CD and mouse enabled by default, MS-DOS 3.3 (for older needs, if I recall correctly it has a NEC CD driver set up?). Some of the utility software on the floppies is Craig Hart's PCI.EXE (DOS version), JUPP (which seems to be a fork of Joe's own Editor and has a DOS distribution), Zork I and ROGUE (for fun).

When running PCI.EXE it's a very good to do it from the ramdisk. The software uses a flat file database (PCIDEVS.TXT) for PCI IDs and has to re-read that every time it finds each PCI device on the computer... When ran from the floppy disk it takes about 20 mins to fully list them all. Ran from the ramdisk, it's so fast that scrolling the display takes more time than the actual bus probe!

Accessing floppies the easy way

Recently, for connecting floppies to the 21st century I symlinked /mnt to /var/www/ on one of the lab PCs (that has a real floppy drive) and I just mount the floppy in /mnt, then use HTTP to download files off it, or SFTP if I need to transfer them. This way I can use any other computer on the LAN to transfer data to and from the floppies.

That lab PC was also the one where DOS was installed in QEMU and the one that sometimes gets booted up with the DOS floppy in drive, so as to wake up running MS-DOS 6.22 instead of Debian.

Back to homepage - Back to 486 page