Upgrade-a-thon in Hyper-V: Part-1 – Initial & FreeDOS

I want to see how well I could run/upgrade various versions of MS-DOS and Windows through the generations, all on Hyper-V. In theory I think I should be able to upgrade through the ages, but the jump from 32-bit to 64-bit might be a problem. I will attack that when I come to it (Windows 10/11). I’m not sure if I’ll go all the way through or not, but I’ve started a bit tonight, and I thought I’d document the process.


There are only two primary sites I’m going to be using for this:

In terms of software:

Initial Setup

Upgrade-a-thon VM settings.

To start, I built a virtual machine (using Generation 1 VM type) that is somewhat specced for my end goal. That includes 4 CPUs and 8G of RAM (although I’ve reduced it to 512M right now so I don’t suck up all my system’s memory while I’m doing nothing big). I also added a Legacy Network Adapter, which is seperate to the normal Network Adapter.

In Hyper-V, there’s an advanced setting that you can only set via PowerShell. This setting is disabled by default, and prevents VMs with old OSs from running. This VM needs that setting enabled, so, in an Administrator PowerShell session, I enable it.

❯ Get-VMProcessor Upgrade-a-thon | fl CompatibilityForOlderOperatingSystemsEnabled

CompatibilityForOlderOperatingSystemsEnabled : False

❯ Set-VMProcessor Upgrade-a-thon -CompatibilityForOlderOperatingSystemsEnabled $True

❯ Get-VMProcessor Upgrade-a-thon | fl CompatibilityForOlderOperatingSystemsEnabled

CompatibilityForOlderOperatingSystemsEnabled : True

This machine isn’t usable right now, as we don’t have a proper boot disk to start the process.


The earliest version of DOS on WinWorld is 1.x (1.25), so we’ll start there. This one is interesting as there’s a lot of different versions for different PCs, before “PC compatible” was really a big thing. Luckily the text on the page hints that the “Columbia Data Products OEM” version works for PC compatibles. So, lets grab that.

A well-organised archive, with the “system” in \Files, and 4 different formats of the disk image in \Images.

Great, 4 different image files of the disks. This saves trying to make a MS-DOS 1.25 “system” disk using the raw files. Unfortunately, Hyper-V only supports its own Virtual Floppy Disk (.vfd) images. So one of the above images needs to be converted to vfd. After some DDGing, it looks like there’s not a lot out there to convert to VFD files (if anything). I did find plenty of documentation on creating a vfd file and, so if I can get the image files onto a VM, I could write the image to the vfd file. The WinWorld page mentions that the disk images need to be written by a DOS program called ImageDisk. That means I need a DOS VM that I can use to create the floppies I need for… my DOS (right now) VM.

It’s time for a new VM. This is to be a utility VM, which runs some sort of DOS and is fairly full-featured. FreeDOS is a great option here. No sense in installing MS-DOS 6.22 or something now, we’ll get there. For now, FreeDOS should have enough compatibility to let me do things like write dos boot disks off the image files.

FreeDOS VM Settings

This VM is similar to the Upgrade-a-thon VM. There’s some less resource usage, but it’s still fairly overkill for what I need. I went to the FreeDOS site and downloaded a live CD, booted off it, and installed it without issues. When I removed the Live CD to boot off the hard disk, though, it would lock up when it was loading JEMM (their extended memory manager). If I selected a non-JEMM boot option (option 4 – Safe mode) the machine would boot fine, but with JEMM it would freeze. I found discussion of the bug here. The suggested fix is to run the package updater, which will update the JEMM package. We could download the cdrom.iso full of the latest packages built nightly from the file repository, but that’s boring. It’d be cooler if we could just run the updater program itself and let it go retrieve the new software. That means the FreeDOS VM needs networking. FreeDOS comes with the two main TCP systems for DOS, mTCP and WatTCP, and it has drivers for networking cards, but it doesn’t detect the legacy network card. Thank to this post, I found some simple instructions for getting the legacy network card working in FreeDOS. I will reproduce a summarised version here:

  1. Get the dc21x4pk114.zip file. This is from http://crynwr.com/, however the file link is a mirrored version on my domain.

  2. Unzip this file and add the contents of the zip to an ISO file. This requires a tool that can create ISOs. I used PowerISO, but any ISO-making software should be fine. The ISO is tiny.

  3. Attach the ISO to the FreeDOS VM.

  4. Move the contents of the zip to somewhere on the C: drive (like C:\dc). You only need dc.com, but I just copied them all.

  5. Edit C:\FDAUTO.BAT to call ‘C:\dc\dc.com 0x60’ on boot.

    The dc.com command added to FTAUTO.BAT.

  6. Reboot

Finally, we have network access! Run the package updater to get the latest version of JEMM:

fdnpkg update jemm

You can just run fdnpkg update with no package listed if you want to upgrade all packages currently installed.

We now have a FreeDOS VM that has networking. This should help nicely as we proceed through the versions of DOS until we get more current. The next post will cover the first version of DOS.