Windows 98 runs surprisingly well in QEMU, but it requires some care in setting it up. It’s a great way to run old 90s Windows and DOS software on your iPad (and Mac too, though you have other options available to you). This post provides some suggestions and tips for installing Windows and selecting the best devices.

Plug and play BIOS issues (or: how to install with ACPI)
When you install Windows 9x, PCI devices might be broken, and you’ll see a Plug and Play BIOS device with problems in the device manager:

This seems to be a bug in SeaBIOS or QEMU. Many guides (i.e. this one or this one) suggest changing the device and hoping devices re-enumerate correctly. However, there’s a simpler method available when using Windows 98 SE. (If you’re using Windows 95, you won’t be able to do this.)
Windows 98 can use ACPI to enumerate devices instead of the legacy PnP BIOS. Unfortunately, it doesn’t use ACPI by default. (There seems to be an allowlist of known good ACPI BIOSes, as it was early days for ACPI.) To make it use ACPI anyways, boot with CD-ROM support from the Windows 98 CD instead of running the installer, then run Windows setup with the /p j
flag, like so:
C:\> D:
D:\> cd WIN98
D:\WIN98> setup /p j
It’s possible to convert an existing system to ACPI, but it’s much easier to do this from the start. When Windows is installed this way, it should correctly enumerate all devices.
Device selection
QEMU can emulate devices Windows 98 supports out of the box, which is good as there are no VirtIO drivers. Make sure you’re using the i440-based “pc
” rather than the Q35 based system, as it’ll be better supported for legacy systems. You don’t need to worry about selecting i386 vs. x86_64, as Windows 98 will obviously never touch 64-bit mode, so they’ll be the same.
You may need to disable USB to avoid hanging on startup, at least with UTM. Unfortunately, this means you won’t have absolute mouse input (through the USB tablet) and must capture your cursor. With UTM SE on an iPad, this doesn’t hurt as much, as it can automatically capture the trackpad or external mouse, while leaving the touchscreen for interacting with iOS.
The most sensical video option for Windows 98 is the Cirrus VGA option (-vga cirrus
). There are unfortunately some bugs (flashing in 16 bit colour modes, blitting issues in 8 bit colour modes), but it’s the only option with accelerated drivers out of the box. Apparently, Rage 128 emulation is being worked on, but currently only works for Power Mac emulation.
QEMU can emulate a variety of network cards. The tulip (DC2114x), NE2000 (PCI and ISA), and PCNet should all work out of the box.
For sound hardware, there are a few options available, with different tradeoffs.
- If you want to run DOS software, the SoundBlaster 16 (
sb16
) emulation works out of the box, but there is no OPL3 or MPU-401, so MIDI won’t work correctly, just PCM. Games will have a hard time with this unless they’re entirely PCM. - The CS4321A I haven’t tested, but might work with WSS or Crystal-specific drivers. As with the SoundBlaster 16, there is no OPL3.
- The Gravis UltraSound (
gus
) emulation works surprisingly well, but the Windows 95 drivers are crusty for the version of the card it emulates (GF1/GUS Classic), so use it only if you want to run old trackers or demoscene stuff. Note you may need to turn off the LPT port (-parallel none
) to free up an interrupt used for the UltraSound. - Because of this, the ES1370 might be the best card to emulate for plain Windows usage, as it has relatively few quirks and I believe has drivers on the Windows 98 CD. However, it’s not ideal for DOS software as it requires TSRs to make it work right.
- The AC97 emulation will require Realtek drivers. I haven’t tested this.
In UTM, you may want to turn off the entropy device, to reduce unknown device clutter in Device Manager, though it is harmless. The VirtIO console device will still be present in Device Manager with UTM’s default flags.
Other quirks
In UTM SE, sometimes rebooting might hang when switching video modes. If this happens, it seems safe to shut down the machine and start it again. Avoiding reboots in favour of shutting down seems wise.
Performance characteristics
While TCG in QEMU doesn’t have the best reputation for performance, it might be good enough for your needs. On my MacBook Pro with an M1 Pro, benchmarks show performance somewhat around about a 750 MHz Pentium III, albeit with worse floating point performance. This is pretty usable, although most 3D games won’t be usable as even software rendering will be a bit sketchy.
If you’re using UTM SE on iOS, the interpreter is slower, but not unusable for 90s software. On my M1 iPad Pro, I get Pentium 100 performance, with similar penalties for FP. This is good for games up to about 1995 or 1996; titles like MechWarrior 2 and SimCity 2000 are playable this way, though MIDI or CD music will be missing. Non-game software like Office 97 will run fine, of course.