QEMU/Windows 98

Have legacy software that can't run in Wine or on newer versions of Windows? If you have a Windows 98 installation disc, you can install the operating system to a QEMU virtual machine. The CD should be for generic systems. If you got your copy from an OEM (like HP or Dell), they may not have included drivers that QEMU may need.

Virtual machine setup

edit

If the CD included a boot floppy, you may need to use it; some CDs were not be designed to boot directly and only contain the materials needed to install the operating system. If you only have an unbootable CD, FreeDOS can be installed first in its place, and it can run the setup. You will want to rip your Windows 98 CD to an ISO image. Assuming it's been named win98.iso and placed in the same folder, it can then be ejected and stored back in its case.

You will need to create the image for the hard drive. This is where you'll install Windows to, and we'll be using QEMU's native qcow2 format. Common sizes are 512 MB (512M) and 1 GB (1G), but anything over 2 GB may prompt the setup to ask about large file system support, which you'll want to allow in that case.

qemu-img create -f qcow2 w98.qcow2 512M

Something interesting to note is that if your host system has enough memory to store the entire image in RAM, the installation and usage can be greatly sped up. On Windows, this can be done with ImDisk Virtual Disk Driver when mounting a raw image file and copying the image to the mounted drive.

If you have a bootable installation disc, the initial command to install Windows may look something like this:

qemu-system-x86_64 -cdrom win98.iso -boot order=d,menu=on -drive file=w98.qcow2 -m 512 -device sb16 -display sdl

Otherwise, a boot disk image can be presented to the VM as a floppy disk. The following options can be added to instruct the system to boot from it:

-drive if=floppy,file=boot_disk.img,format=raw -boot once=a
  • -cdrom allows us to use the ISO image. It's also possible to use virsh to forward a physical drive to a file, but reading the data from the hard drive is usually faster.
  • -boot allows us to specify the order to d, which is the CD, or a, which is the first floppy drive. once defines the boot order to use only the first time the system boots, where supported. menu=on enables manually choosing a boot device by pressing Escape.
  • -drive allows us to use the hard drive image we just created.
  • -enable-kvm turns on hardware acceleration in x86 using the kernel VM. KVM causes problems on Windows hosts when shutting down the guest and can even prevent it from starting in some cases. If this occurs, you can safely remove it from the command.
  • -m allocates the guest's RAM. In this case we use 512, but going above it can be dangerous for Windows 9x.
  • -device allows us to add a device driver, in this case, the Creative SoundBlaster 16 sound card (sb16) to get audio. Standard Windows 98 discs ship with drivers for it, and if you haven't used this flag while installing, it would need to scan for it.
  • -display allows us to use an alternative display engine rather than GTK+. In this case, we use Simple DirectMedia Layer because it doesn't conflict as much with fullscreen support. You can press Ctrl+Alt+F to enter and exit fullscreen mode and Ctrl+Alt to have QEMU grab or ungrab the keyboard input and invoke the monitor as usual.

Once installation is complete you can boot without the CD, meaning the -cdrom, -boot, and boot disk flags can safely be removed.

After installation

edit

Incomplete shutdown

edit

SE[citation needed] may fail to shutdown properly before installing Q239887 update (004756us8.exe), degrading the filesystem.

VBE 2.0 compliant-driver

edit

Some programs require a higher color depth than the 16 colors provided by Windows 98 by default.

The default graphics card emulated by QEMU supports 32-bit color depth and resolutions through VBE 2.0, but Windows 98 does not provide drivers that support this.

A non-commercially licensed freeware driver can be used.

DirectX

edit

See this snapshot of a 2006 archive for DirectX downloads.

edit