The Problem
QEMU already works fairly well for NT-based operating systems from the XP era onward (makes sense given the more mature nature of the kernel by that point), but there continue to be bugs and device driver issues with Win2K and earlier. That's where 86box can help mend those issues, as it emulates more era-specifc hardware that usually have built-in drivers baked into these old OSes.
A Few Quirks
VFIO has limitations, in particular it can only really handle PCI-based (and newer) hardware. Recently there was a project that allowed attaching ISA devices to the LPC bus (dISAppointment) using the TPM header on more modern boards, but actually enabling this in Linux would require kernel intervention that is not currently in place yet.
Obviously AGP video cards will also poise a problem, although for some specific models (3dfx Voodoo) there do exist some AGP -> PCI bridge designs that could be useful to some extent. Good luck getting a hold of one of those though lol (check out https://www.vogons.org/viewtopic.php?p=896097#p896097 for more)
What worked (for me)
The source code for the vfio branch is hosted at https://github.com/richardg867/86Box, and that's what I've been using for 9x and XP. If your system is already configured for VFIO with QEMU, it should more or less work, but if you're never done it before here's a rundown...
- Enable iommu in your device's firmware settings
> Some vendors enable the iommu automatically, check your motherboard manual - Check for your iommu groupings/devices
> If you do not see any groups, the iommu on your system is not enabled, or your PC does not support it - Re-bind the PCI device (using vfio-pci) that you want to make available to 86box (similar to QEMU)
- Add the following to your 86box config, where `devices` is the ID of the re-bound device
Code: Select all
[VFIO] devices = 07:00.4
- Run 86box with the edited config
- It's recommended to run 86box as a regular user (rather than root); on some distros you may have to edit `/etc/security/limits.conf` and add the following to extend resource limits (vfio may fail to work otherwise):
Code: Select all
myusername soft memlock 1024000 myusername hard memlock 1024000
- You can pass through non-video devices to 86box as well, such as USB XHCI controllers (to use with XP for example). You can then use lower-latency input devices like controllers and mice for a better game experience.