How I set up Windows XP GPU passthrough with libvirt/QEMU/KVM

Creating ultra fast virtual machines of old operating systems for fun and profit
User avatar
Jellington
Posts: 6
Joined: Sun Jun 18, 2023 2:42 pm

Re: How I set up Windows XP GPU passthrough with libvirt/QEMU/KVM

Post by Jellington »

Got 2000 VM working with my 610, though it's less of a QEMU/passthrough issue than a driver issue.

1. First of all, there's a bug with my GT 610 (and possibly other cards of that era) that makes the passthrough fail to work, usually after stopping and starting the VM again. I've managed to solve it by dumping the BIOS while the VM is running (if it isn't, dumping throws and error).

Code: Select all

# echo 1 > /sys/bus/pci/devices/0000:0x:00.0/rom
# cat /sys/bus/pci/devices/0000:0x:00.0/rom > gt610.rom
# echo 0 > /sys/bus/pci/devices/0000:0x:00.0/rom
After that, specify the ROM file in libvirt config by adding <rom file='/path/to/rom/gt610.rom'/> in the hostdev section.

2. Then there's a code 43 issue, solved by hiding the VM state (not sure if it's applicable to the hacked 2000 drivers, but it was the case on everything XP and newer).

Code: Select all

<hyperv mode='custom'>
  <vendor_id state='on' value='66666'/>
</hyperv>
<kvm>
  <hidden state='on'/>
</kvm>
Oh, and you need x-vga as well, as was stated before. Change <domani type='kvm'> to <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> and then add after </devices>:

Code: Select all

  <qemu:override>
    <qemu:device alias='hostdev0'>
      <qemu:frontend>
        <qemu:property name='x-vga' type='bool' value='true'/>
      </qemu:frontend>
    </qemu:device>
  </qemu:override>
3. Basic Windows 2000 SP4 ISO is horribly outdated and won't even allow you to install Extended Kernel/Core (which is needed for the graphics driver and most of the XP-era and newer apps). There exists HFSLIP that lets you make a pre-updated ISO ready to go, instructions can be seen here at steps 1 to 4.

4. Some virtio drivers work on 2000 without much issues, that includes virtio-serial driver (can be just installed from device manager) and viostor (need to use 0.1.190 floppy and press F6 during setup, the disk shows as eight separate SCSI devices, but you can just proceed installing it to the disk with ID 7). Official virtio-net drivers dropped 2000 support a long time ago, but old Qumranet driver works just fine.

5. For patched Nvidia drivers to work, you need to install Extended Kernel *and* Extended Core. Download Windows2000-KB935839-v31hM-x86-ENU.wlu here, then extract it with 7zip, install it by running install.bat, rebooting when it finishes installing prerequisitory updates, then running it again. After that download and extract Windows2000-KB979683-v14b-x86-ENU.wlu and install it by running update.exe in update folder.

6. Finally, Nvidia drivers themselves can be found here, I found that 310.70 works just fine while 359.06 doesn't work at all. Nothing much to write about here, install it in device manager by picking nv4_disp.inf.

With all that done, I now have a pretty usable system that's on par with XP in terms of software support while still offering that glorious pixel-perfect classic bitmap UI. For browsers, latest version of Mypal (68.14.0b) works without even needing fcwin088 to spoof system version. Supermium sadly doesn't work, showing broken empty window, but its devs were planning to bring the native support for unpatched systems at one point anyway.
untitled.png
You do not have the required permissions to view the files attached to this post.
User avatar
flatrute
Posts: 420
Joined: Sat Dec 17, 2022 11:32 am
Location: Thành phố Hồ Chí Minh, Việt Nam

Re: How I set up Windows XP GPU passthrough with libvirt/QEMU/KVM

Post by flatrute »

Windows 2000 is my childhood operating system and I am glad that someone tried to set up it for the modern eras FeelsGoodMan Therefore this post should be renamed a bit from XP to NT 5.x or something Thuink
My username is read as "flatorte".
[deleted] posts index
New avatar source
Old avatar source
User avatar
PortalPlayer
Posts: 9
Joined: Sat Jul 29, 2023 12:09 am

Re: How I set up Windows XP GPU passthrough with libvirt/QEMU/KVM

Post by PortalPlayer »

Is there anyway to have this running in a separate window? I have two GPUs, and the second one is being using exclusively for VMs. Normally, you would use something like Looking Glass, but obviously that doesn't support Windows XP/Vista (nor will it ever, seems like their only solution is to upgrade the VM to Windows 10/11).
User avatar
zulc22
Posts: 7
Joined: Tue Apr 02, 2024 5:15 am

Re: How I set up Windows XP GPU passthrough with libvirt/QEMU/KVM

Post by zulc22 »

I've had quite bad luck with the older GPUs I had laying around, those being a Sapphire Radeon X1300 (Non-Pro) and PNY Quadro FX 540. Quadro FX works fine in XP with older drivers, but newer ones trigger VM detection that make running Vista, 7, or 8 effectively impossible, even with Hyper-V vendor ID and hidden KVM settings in my XML.
X1300 bluescreens after drivers are installed no matter the OS
(edit: ^i figured it out probably)
Last edited by zulc22 on Wed Feb 04, 2026 4:16 pm, edited 1 time in total.
Sadie - she/it/they
8105
Posts: 3
Joined: Thu Apr 10, 2025 1:05 pm

Re: How I set up Windows XP GPU passthrough with libvirt/QEMU/KVM

Post by 8105 »

Registered here to say that after spending a few hours trying to convert a Windows XP VirtualBox VM to run under libvirt/qemu what worked for me was to boot it up in VirtualBox one last time and merging this registry file, which contains:

Code: Select all

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\primary_ide_channel]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="atapi"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\secondary_ide_channel]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="atapi"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*pnp0600]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="atapi"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*azt0502]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="atapi"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\gendisk]
"ClassGUID"="{4D36E967-E325-11CE-BFC1-08002BE10318}"
"Service"="disk"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#cc_0101]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_0e11&dev_ae33]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1039&dev_0601]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1039&dev_5513]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1042&dev_1000]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_105a&dev_4d33]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1095&dev_0640]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1095&dev_0646]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1095&dev_0646&REV_05]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1095&dev_0646&REV_07]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1095&dev_0648]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1095&dev_0649]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1097&dev_0038]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_10ad&dev_0001]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_10ad&dev_0150]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_10b9&dev_5215]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_10b9&dev_5219]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_10b9&dev_5229]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1106&dev_0571]
"Service"="pciide"
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_1222]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_1230]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_2411]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_2421]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_7010]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_7111]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_7199]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"

;Add driver for Atapi (requires Atapi.sys in Drivers directory)

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\atapi]
"ErrorControl"=dword:00000001
"Group"="SCSI miniport"
"Start"=dword:00000000
"Tag"=dword:00000019
"Type"=dword:00000001
"DisplayName"="Standard IDE/ESDI Hard Disk Controller"
"ImagePath"=hex(2):53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\ 
  52,00,49,00,56,00,45,00,52,00,53,00,5c,00,61,00,74,00,61,00,70,00,69,00,2e,\ 
  00,73,00,79,00,73,00,00,00

;Add driver for intelide (requires intelide.sys in drivers directory)

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IntelIde]
"ErrorControl"=dword:00000001
"Group"="System Bus Extender"
"Start"=dword:00000000
"Tag"=dword:00000004
"Type"=dword:00000001
"ImagePath"=hex(2):53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\ 
  52,00,49,00,56,00,45,00,52,00,53,00,5c,00,69,00,6e,00,74,00,65,00,6c,00,69,\ 
  00,64,00,65,00,2e,00,73,00,79,00,73,00,00,00


;Add driver for Pciide (requires Pciide.sys and Pciidex.sys in Drivers directory)

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PCIIde]
"ErrorControl"=dword:00000001
"Group"="System Bus Extender"
"Start"=dword:00000000
"Tag"=dword:00000003
"Type"=dword:00000001
"ImagePath"=hex(2):53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\ 
  52,00,49,00,56,00,45,00,52,00,53,00,5c,00,70,00,63,00,69,00,69,00,64,00,65,\ 
  00,2e,00,73,00,79,00,73,00,00,00
After merging that registry file and then converting my XP .vdi file to .qcow2 format I was able to create a new VM in Virtual Machine Manger with the default XP settings (i.e. x86_64/BIOS/i440FX/IDE) without either of the blue screens occurring (0x000000A5 or 0x0000007b). Of course I still have to deal with network, sound and graphics drivers - and product re-activation - but the system boots and seems to work.
8105
Posts: 3
Joined: Thu Apr 10, 2025 1:05 pm

Re: How I set up Windows XP GPU passthrough with libvirt/QEMU/KVM

Post by 8105 »

Red Hat's VirtIO driver 0.1.132 (2017) appears to be the last supporting Windows XP; I was able to get QXL graphics and a few other bits & pieces (VirtIO Balloon, VirtIO Serial) working with it. Distributed by Fedora here:

https://fedorapeople.org/groups/virt/vi ... 0.1.132-1/

The Realtek RTL8139 network card worked. I couldn't find a driver for the HDA (ICH6) sound device; switching to AC97 solved this and I now have working sound as well. No yellow exclamation marks remain in device manager.
You do not have the required permissions to view the files attached to this post.
8105
Posts: 3
Joined: Thu Apr 10, 2025 1:05 pm

Re: How I set up Windows XP GPU passthrough with libvirt/QEMU/KVM

Post by 8105 »

I have successfully reactivated Windows using the Windows XP Confirmation ID Keygen from https://github.com/Endermanch/XPConfirmationIDKeygen
eskay993
Posts: 1
Joined: Tue Sep 23, 2025 7:35 am

Re: How I set up Windows XP GPU passthrough with libvirt/QEMU/KVM

Post by eskay993 »

Amazing! Thank you MattKC. I was really struggling with this and your suggestions solved it. Literally the only place on the internet that mentions this... now that's a niche!

I know this is a 2 year old thread, but in 2025 there are a couple of extra gotchas that I came across:

- I could only get this to work with qemu 7.x and pc-q35-2.10. The latest as of writing is qemu 7.2.20. pc-q35-2.10 was deprecated around qemu 10.1. And qemu 8.x, 9.x and 10.0.0 have pc-q35-2.10 but still BSOD when loading the SATA drivers. I tried other machine types with no luck. The magic combo is qemu 7.x and pc-q35-2.10.

- You'll need to compile qemu 7.x from source if your distro ships with a newer version, which it almost certainly does at this stage. The latest version is qemu 7.2.20 (as of writing). This is distro dependant, and I can't remember what dependencies I installed since I did that ages ago for a different project, but here is how I compiled it on on CachyOS which is arch based (this installs qemu 7 in /opt/qemu-7.2.20):

Code: Select all

mkdir ~/qemu7 && cd qemu7
wget https://download.qemu.org/qemu-7.2.20.tar.xz
tar xfv qemu-7.2.20.tar.xz
mkdir build && cd build
../qemu-7.2.20/configure --prefix="/opt/qemu-7.2.20"
make -j$(nproc)
sudo make -j$(nproc) install
- To make your Windows XP VM in virt-manager use the qemu 7 binary, change the following line (change the path to wherever you installed qemu 7.x):

Code: Select all

  <devices>
    <emulator>/opt/qemu-7.2.20/bin/qemu-system-x86_64</emulator>
- And here's a random one - The only way I could keyboard / mouse to work during the installer was to add an ac97 sound card in virt-manager. From what I understand adding this kick starts the ISA controller which then initialises the PS/2 controller. Who knows... but it works.

That's it! Now you can select pc-q35-2.10 and it should al work. I'm happily passing through a GTX 960 to Windows XP SP3 32-Bit and it seems very stable so far playing games.

How sustainable is this? Not sure. qemu 7.x is still being supported as of writing but once they stop who knows. But for now, it's working great.
fabianbuettner
Posts: 1
Joined: Wed Jan 07, 2026 7:31 pm

Re: How I set up Windows XP GPU passthrough with libvirt/QEMU/KVM

Post by fabianbuettner »

Hi,

I am using QEMU 10.1.2 and found out that using pc-q35-4.2 and removing <acpi> from the <features> make it possible to get rid of the "The BIOS in this system is not fully ACPI compliant" with error code 0x000000A5 BSOD.

best regards,
Fabian
pancreas227
Posts: 2
Joined: Wed Jan 28, 2026 4:01 am

Re: How I set up Windows XP GPU passthrough with libvirt/QEMU/KVM

Post by pancreas227 »

PortalPlayer wrote: Thu May 23, 2024 5:30 pm Is there anyway to have this running in a separate window? I have two GPUs, and the second one is being using exclusively for VMs. Normally, you would use something like Looking Glass, but obviously that doesn't support Windows XP/Vista (nor will it ever, seems like their only solution is to upgrade the VM to Windows 10/11).
I am wondering the same thing. I was able to get my VM set up and working but need something like Looking Glass to be able to play games. Trying to stream with VNC has horrible latency. Was anyone able to find a solution?
User avatar
zulc22
Posts: 7
Joined: Tue Apr 02, 2024 5:15 am

Re: How I set up Windows XP GPU passthrough with libvirt/QEMU/KVM

Post by zulc22 »

I also found a solution for the ACPI stuff. I don't know what the proper equivalent XML is, but ComputerNewb's wiki pointed me towards these flags, making using an old version of Q35 or QEMU unnessecary, with working ACPI.

Code: Select all

  <qemu:commandline>
    <qemu:arg value="-global"/>
    <qemu:arg value="q35-pcihost.x-pci-hole64-fix=false"/>
  </qemu:commandline>
Sadie - she/it/they
User avatar
the4anoni
Posts: 2
Joined: Thu Feb 12, 2026 4:02 pm

Re: How I set up Windows XP GPU passthrough with libvirt/QEMU/KVM

Post by the4anoni »

zulc22 wrote: Wed Feb 04, 2026 4:14 pm I also found a solution for the ACPI stuff. I don't know what the proper equivalent XML is, but ComputerNewb's wiki pointed me towards these flags, making using an old version of Q35 or QEMU unnessecary, with working ACPI.

Code: Select all

  <qemu:commandline>
    <qemu:arg value="-global"/>
    <qemu:arg value="q35-pcihost.x-pci-hole64-fix=false"/>
  </qemu:commandline>
Unfortunatelly this did not work for me, changing machine type to 2.10 also did not help (probably it's deprecated in my QEMU version). Are there other options to run XP with PCIe passthrough?

I'm on Linux Mint 22.3 /w kernel 6.14.
User avatar
zulc22
Posts: 7
Joined: Tue Apr 02, 2024 5:15 am

Re: How I set up Windows XP GPU passthrough with libvirt/QEMU/KVM

Post by zulc22 »

the4anoni wrote: Thu Feb 12, 2026 4:37 pm Unfortunatelly this did not work for me
How exactly did it not work? Did all the QEMU XML disappear, or did it still crash anyway?
There's something somewhere else about adding a certain parameter to the root tag that makes it recognize those tags.
Sadie - she/it/they
User avatar
the4anoni
Posts: 2
Joined: Thu Feb 12, 2026 4:02 pm

Re: How I set up Windows XP GPU passthrough with libvirt/QEMU/KVM

Post by the4anoni »

zulc22 wrote: Sat Mar 21, 2026 12:19 pm How exactly did it not work? Did all the QEMU XML disappear, or did it still crash anyway?
There's something somewhere else about adding a certain parameter to the root tag that makes it recognize those tags.
It had crashed. I did not dig into this further, as I have old XP laptop anyway.
CocoBolo23
Posts: 1
Joined: Thu Mar 26, 2026 1:55 pm

Re: How I set up Windows XP GPU passthrough with libvirt/QEMU/KVM

Post by CocoBolo23 »

eskay993 wrote: Tue Sep 23, 2025 8:18 am Amazing! Thank you MattKC. I was really struggling with this and your suggestions solved it. Literally the only place on the internet that mentions this... now that's a niche!

I know this is a 2 year old thread, but in 2025 there are a couple of extra gotchas that I came across:

- I could only get this to work with qemu 7.x and pc-q35-2.10. The latest as of writing is qemu 7.2.20. pc-q35-2.10 was deprecated around qemu 10.1. And qemu 8.x, 9.x and 10.0.0 have pc-q35-2.10 but still BSOD when loading the SATA drivers. I tried other machine types with no luck. The magic combo is qemu 7.x and pc-q35-2.10.

- You'll need to compile qemu 7.x from source if your distro ships with a newer version, which it almost certainly does at this stage. The latest version is qemu 7.2.20 (as of writing). This is distro dependant, and I can't remember what dependencies I installed since I did that ages ago for a different project, but here is how I compiled it on on CachyOS which is arch based (this installs qemu 7 in /opt/qemu-7.2.20):

Code: Select all

mkdir ~/qemu7 && cd qemu7
wget https://download.qemu.org/qemu-7.2.20.tar.xz
tar xfv qemu-7.2.20.tar.xz
mkdir build && cd build
../qemu-7.2.20/configure --prefix="/opt/qemu-7.2.20"
make -j$(nproc)
sudo make -j$(nproc) install
- To make your Windows XP VM in virt-manager use the qemu 7 binary, change the following line (change the path to wherever you installed qemu 7.x):

Code: Select all

  <devices>
    <emulator>/opt/qemu-7.2.20/bin/qemu-system-x86_64</emulator>
- And here's a random one - The only way I could keyboard / mouse to work during the installer was to add an ac97 sound card in virt-manager. From what I understand adding this kick starts the ISA controller which then initialises the PS/2 controller. Who knows... but it works.

That's it! Now you can select pc-q35-2.10 and it should al work. I'm happily passing through a GTX 960 to Windows XP SP3 32-Bit and it seems very stable so far playing games.

How sustainable is this? Not sure. qemu 7.x is still being supported as of writing but once they stop who knows. But for now, it's working great.
Hi,

Very good information in this thread that I did not find anywhere else. I was trying to make a retro gaming XP VM and this solution to newer QEMU not having pc-q35-2.10 worked flawlessly.

However I'm experiencing the following problem. All my games seem to run VERY fast in the VM. Like 5 times faster or more. And most of them do not even launch actually.

I took out my Nvidia GT 720 that I passed through and put it in an older PC I had lying around. Same drivers, games run normally. So I'm 100% sure this is not a GPU issue or vsync (i'm also using the same monitor)

I suspected this was a CPU frequency issue but it doesn't seem to be the case. I have a 9950x3d and lowered the frequency on all cores to 1.4Ghz and games still run insanely fast. I gave the VM only 1 CPU and set it to host-passthrough as well as set it to other older models (Pentium 3 for example), but nothing seems to be working.

Has anyone else experienced this ?