Windows 98SE on Modern Hardware

Your best choice for USB3 controller for VFIO passthrough is NEC uPD72020x-based card.

I have couple of NEC controllers, but they dont like well with physical Win7/Win10… and it dont have issue with them and KVM, because i really dont need from, i using etdev passthrouh so im using PS/2 device emulation.

Here is my USB3 controllers testing matrix:
https://docs.zoho.com/sheet/published.do…22a5b950420cb22

Its mainly about WinXP, but if controller is not working well with Linux / MacOS is now got, some of them (Asmeda) also not working at boot time - bios etc, or some has not USB3 headers (Asmedia).

So far is VIA best, but has flaws… best would be probably VIA + other controller combo, but it need too slots… I have to test Etron (on the way) and Texas Instruments USB3 (hard to get). and there is also Modchip USB2 PCI-E controller (no the way).
Other solution how to safe slots is SATA + USB combo in one card details here:
Windows XP 32-Bit and Server 2003 32-Bit on Modern Hardware (334)

VIA controller maybe can be better with newer firmware but im not able to update it:
VIA VL80x USB 3 PCI-E Firmware Utility (Code 10 error)

I added 3rd Geforce 6 for KVM Win98 KVM, what is nice its not cause any problem with MacOS and Windows installs.

Can i first time get into IOMMU problems - first primary videocard and second are in same group, i used again Heikos guide for it:
https://heiko-sieger.info/iommu-groups-w…_my_IOMMU_group

I update bios, tried newest Mint kernel is still the same solution should be ACS kernel:
https://queuecumber.gitlab.io/linux-acs-override/
So installed 5.3.18 and 5.4.10 ACS kernels,

If run iommu check, its now nice everything is own group.

But i have problem with GUI, mate is now dead - i have only 1 monitor instead of 3 and i can see that it take few seconds of draw every new icon. I dont thing that Nouvea is active, because it would be quicker. When i switch to terminal - ALT+F1 speed seems to be fine. I would try to reinstall Nvidia drivers, but i always doing in GUI through hardware drivers wizard - which i now cant use…
I tried classic: update-initramfs -u -k all But its not changing anything…

Any ideas?

I a bit unexpected because Linux is able to usually handle lots of strange HW, but experience with addition Sata3 controllers and USB 3 controller is disaster. Windows are MacOS not have such problems.

For Sata controller it needs complex power off to handle Asmedia or Marwell Sata 3 controller, use its not able to properly start them -> fstab disk not found hell.
With USB3 (VIA/Asmedia/NEC) controllers only often USB devices not working. Iommu=soft kernel boot parameter seems to helping with this, but it seems that such boot is not compatible with KVM passthrough :frowning:

I first time made KVM working with 5.4 kernel (Z390), i used Ubuntu, because there is more chance to make 3rd card working with ACS kernel.

It seems that with this kernel something changed and vfio pci is not working by old way used by Heiko tutorial solution was add vfio parameters right into kernel line:

1
 
linux	/boot/vmlinuz-5.4.0-39-generic root=UUID=788970f6-cd8d-4904-b7a7-99a59e84df91 ro intel_iommu=on [b]vfio-pci.ids=10de:1287,10de:0e0f[/b] quiet 
 


Important is this:
vfio-pci.ids=10de:1287,10de:0e0f

Source:
https://www.reddit.com/r/VFIO/comments/g...u_2004_upgrade/

I can say which parts of old way are needed too (if any).

Now i will try mess with ACS kernels and 3rd card.. Otherwise i can now compare native XP with XP KVM. I would say that i feel some additional KVM lag and there are some lags at least the start of using KVM - im using Quake 3 for testing so worst scenario for mouse lag. I dunno some CPU cores binning could litigate these lags.. I dont have CPu with hyper-threading, so its not because of that. Just 6 full cores. Maybe is for KVM used same main core as for Linux and there could be some bad effect of core sharing..
But i dunno how to debug such thing...

Ok, i made 3rd card - Geforce 6600LE passivelly cooled working with Win98 KVM.

I neded ACS kernel, when you know what to do, its actually quite easy to make it working, only problem is to do it first time and know these things can solve these problems.
- just install ACS kernels and headers from its source page as standard *.deb files (so its Debian/Ubuntu based way), author claims that these are only for Ubuntu, may maybe work for other Debian based distro, what is solution for other distro i dont know, there is at least something about that for Manjaro: https://forum.manjaro.org/t/acs-override-patch-iommu/54485
- after that you can use these kernels in grub.cfg by some magic parameters
- it could be enough, but i got some other nasty error ( fio_pin_pages_remote: RLIMIT_MEMLOCK (67108864) exceeded ), with some linux memory limits (ulimit -a will print all of them), so i had increase them…


I still have some problems with this machine, so far i dunno, if there is related to Ubuntu, ACS kernel, or used Qemu version, any ideas welcome, i dont know them from Mint 19.3 + Qemu…
1) there are some slow downloads - which should be here, with other machine same card, slower CPU and Mint 19.3 they are absent…
2) with etdev i had problem to with losing input for mouse and keyboard, again i never had same problem with Mint and Qemu 2.11 / 4.1
3) emulated AC97 audio is not working for some reason, whole Win98 image is tested again with Mint on other machine and native Linux audio is fine

Details are here:
https://gitlab.com/Queuecumber/linux-acs…#note_371929643

So i made other big breakthrough and im almost here - but i still need to solve these problems.
What is also good it seems that my Z390 is not crippled by but race conditions, i use for my input devices Intel USB only and dont mount any disk through /etc/fstab…

I also tried Geforce 6800 GT (proven in other real machine) working with Z170 machine, but got new error, when is card just plugged in Linux is desktop is slideshow, i dont thing that is related to Nvidia drivers, because with other Geforce 6xxx series cards cards is machine fine, maybe i finally hit some not enough power problem with my PicoPSU, but i guess is other Linux strange error… When i will have a time, i will try Windows with this card plugged in. I tried multiple start, restarts etc, so its not classic race condition.


This is a bit more complicated. Linux has better Driver quality in general. However, because in Linux you usually are using functions and features that no one in the Windows side of things has ever used, Linux users are usually the ones that discover Hardware bugs. For example, some controllers try to do DMA to memory regions that they aren’t allowed to, or announce support for features that they don’t actually support, so they don’t work properly with IOMMU enabled or when passthroughed. One example of a controller that doesn’t work with IOMMU enabled is the Marvell 88SE9230 SATA Controller, albeit I’m sure than there are other Realtek and ASMedia ones that also behaves badly. Consider those broken Hardware as many of them are violating the PCI specification. Some recent AMD Chipsets announce FLR (Function Level Reset) support on the USB Controllers when such function isn’t actually supported, causing a Linux host hang (This was workarounded in Software as a special case, it ignores FLR in those controllers). A lot of things works in Windows simply because it isn’t as strict as Linux is, or people doesn’t use the broken features.

Well this is Linux philosophical problem.

As "good user" i care only about end user experience that sucks. This is developer explanation and its just fancy excuse. Im as most of users, more user that developer (which care about standards, specs, right way of implementation etc…) and making OS for more for developers than users is just wrong from point of view, what OS should do - just enable to run programs smoothly from nice easy to use enviroment.

These controllers are designed for Windows where they are working as good products - for that you need 2 parts - hardware and software, i dont really care which part do which tasks and if driver is designed to bypass some hardware bugs (see view of HW spesc, standards) or not… If there is not some working binary blob from controller vendor for Linux (which i like), support of HW is just Linux community thing. Linux from its start is just accepting the challenge to work with incomplete documentations and reverse engineering of things. Otherwise it would support only smaller set of hardware => much less people will use it and it would be possible to advertise it as something what running on almost any HW (again which i like a lot).

There is even Linux like alternatives which are doing it by opposite way, by selecting which HW would be supported and its enterprise Unix (AIX, HP-UX, Solaris )… im not really sure if Red Hat do same thing or not. Im using these in the work and always hated that lots great Linux utilities is not ported there, but otherwise my end experience was about the same as with any other Linux with proven and granted support of DB engines and Web and Application servers. Im also not really sure about Red Hat for desktop, if it is more strict about HW support, than vanilla Linux or not. There is also Suse, which i never used.

So if someone want to be strict ok, he can have such possibility to force such mode for price that less HW will work, but as user i dont want to use such mode… and want to have other possibility, to just run things, i dont care how much it is hacked inside if it is working in the end. I would actually make sense, if Microsoft would do same thing for Windows server edition drivers, here would make sense to enforce more standards… in similar way how its enforced drivers signature checks etc.

Im not some OS developer, philosopher, but my guess is that Linux is often ignoring some standard and specs, to make other things working, when its handy for some developers… And if its true => explanation and excuses above would be simply hypocritical.

There is one more missing part to make world better and that is some good sites and articles on the net, which would review HW against these standards and make some reports… after that people would be able to check it… and i would be able to buy 2 different pieces of HW with similar price and one would be complaint with some standards and second wouldnt be, i will buy first one for sure. I know lots of site with great CPU and graphic cards reviews, but something good for desktop USB / disc controller… or network nics, switches etc, is very hard to find.

BTW i have same problem as with Marwell controller with Asmedia controller, i did some research… and so far i find out only 3 main chips for PCI-E Sata3 addon cards - Asmedia, Marwell and Micron (on the way) if someone know other one let me know. I never heard about Realtek Sata / USB controllers.

Some debugging progress.

- I fixed sound with Win98 KVM machine that is nice - sound was disabled for some reason.
- CPU slowdowns. I dont understand why they are there at all, because my Z390 is faster than Z170 machine, when i was running fine. CPU is faster 9600KF (6 core, 95W) vs 6500T (4 core,35W), memory is faster, only difference is Sata SSD on Intel controller vs. NVME, so Linux NTFS performance would had to be rubbish… to be problem in storage. Update: I tried gnome-disk-utility - benchmarks and results seems fine - 2500 MB/s for NVME and 500 MB/s for Sata all are NTFS volumes.
So far im not sure, if it is here only on the start - few minutes after machine boot, or its periodical… i sure that i havent such problems on Z170, i played Q3 here for in total for 10 hours or so.

CPU pinning https://heiko-sieger.info/running-window…gh/#CPU_pinning
Not working for my setup, it seems to be librt feature for sure, but maybe it was removed from Qemu 4.2 or it needs some custom build etc, because when i try to use like this:
-vcpu vcpunum=0,affinity=0 -vcpu vcpunum=1,affinity=1 -vcpu vcpunum=2,affinity=2 <br /> im getting that -vcpu is invalid option, as if option is not supported at all, im getting same error for any other random string…

- Losing mouse input and getting not keys pressed (usually tilda, escape is not working for while sometimes), so far i found out that is not only Win98 problem, i simulated same thing with WinXP machine and same Geforce 6600LE card. Again im playing same with using intel USB3 controller, not VIA USB3. It take max 10 minutes (up to 2 Quake 3 DM7 sessions) to simulate it, but usually much less.
When i try to release input and grab it again, it is not fixing mouse problem.

I have to test if i would have same problem with Geforce 730 and XP machine, or problem is related only to 3rd - Geforce 6600LE card and ACS hacks…

I discovered that input problems and freezes are there with both videocards… Im sure that settings are the same, because i just copied whole machine script and disk image and just replaced videocard lines.
It seems that maybe only with older videocard its more frequent.

Freezes are returning once per i would say 3-5 minutes, periodically - i would say that they are 1-3s long, nothing would miss when you are playing…

What input loose is very strange its not complete lost of keyboard or mouse, both are still working, but only some inputs are actually working, some keys are just dead for some period of times… and im losing cursor position changing - just cursor move, but mouse buttons are still working. I never had this problem on Mint 19.3 with same machine - i maybe it needs more testing to be sure, but i thing that would get it already, again im using same Qemu images and scripts.

Other strange thing is CPU utilization… I just expected that it would be mapped on real machine cores and the cpus usage would be correlation with them… that just some cores would be assign / used by Qemu and that its. But its not like that, im using 3 cores for my XP machine and running single thread game so utilitazation by Rivaturner from Windows perfomon stats, looks like this:
Core 1 - 75-95%
Core 2 - 10-15%
Core 3 - 5%
But when i look on hosting Linux - in htop or System monitors, there is nothing that some most used core, used by virtual Core 1, all core are used at 20-40% for most of the time with some occasional hitches on 1 of 3 cores, which are very short almost never 75% or bigger. So Qemu probably using some more advanced load distribution than i expect… but i now use that is good, because it killing old paradigm which is saying that you can assign core per VM to use it. Umraid has direct cores assign options too.

It also seems that input freeze is connected with game freeze / slowdowns.

Im not 100% of my Qemu CPU setting, this should means, just use 3 of my cores, that there are not hyperthreading, but i dont understand it:
-smp 3,sockets=1,cores=3,threads=1 </i>

For Windows 98 ,machine im using:
-smp 1,sockets=1,cores=1,threads=1 </i>

Swap is not used, and i have plenty of memory 20+ GB free.

@ruthan

try

-smp 1,sockets=1,cores=3,threads=3 \

@infuscomus - This not working, error message:
qemu-system-x86_64: cpu topology: sockets (1) * dies (1) * cores (3) * threads (3) > maxcpus (1)

I thing that its agains logic in documentation (that SMP has to be = to sockets * cores * threads) - which such of course, it seems that everybody just copy / paste same things… which is quite good explanation.

Otherwise i simulated that input lost on Mint Z390 too, so im starting to thing that it could be Quake 3 demo problem, i have to test more games and full version, but it not totally explain why are some machine and HW combinations more prone to this error (its happens with such way and that pattern now seems to be totally random independent on used Qemu, kernel, cards etc…) - such could be life.

I tested Mint 19.3 + Qemu 2.11 and input lost is still here, so its problem of overall Qemu or Linux on my hardware.

I also tested full Quake 3, ioQuake 3 (there is difference that its compiled for multihread so its using all 3 cores pretty equally, but its just gimmick because 995 old games will not recompiled for it) and problem is the same.

My wild guess is that i maybe not use my Sata and USB controller for any USB devices… Sata controller is not used at boot, but later i its running (i can mount disk connected to it ), so there could be some periodical rain check of these devices, or any other scheduled Linux periodical task, which is CPU heavy…

With Windows (now even with MacOS Clover hack) i can disable some device or even PCI-E root, through nice GUI device manager, but i dunno how to do same thing even through some ungly text config or kernel parameter on Linux.
I also dont know how to run some process monitoring script to monitor all processes to get some data to analyze. This can be done for sure, i had such script for enterprise crapp… but once again on Windows its much easier Aida has nice monitoring to readable html report with few clicks, Linux is complicated. Quickly i can setup i quess nmon and create some awfull plain text report and visualize it by IBM nmon template - but problem is that it zillion tabs with data, but they are not connected it one view where you can simply connect it with processes.

I never was big friend of sar and other mainframe relicts.

So once again Linux because of devices pass through in theory is most powerful OS, but real execution is problematic and annoying.


I used to think like that, back when I though that everybody used Windows thus there was no reason to have other Operating Systems or spending resources to support them :wink:
Specifications exists because the industry bands together to make something that guarantee compatibility and interoperability between different vendors, because it benefits all of them. Except one type of vendor: Those that already holds monopolies. Take a look at Microsoft, who since the early 90’s are known as doing things in a slighty different way just to pester the competence, like the Windows 3.1 AARD code: https://en.wikipedia.org/wiki/AARD_code
Microsoft had broke a lot specifications multitude of times and used them as if they were toiled paper, and since every mainstream Hardware vendor wants to be Windows compatible, they typically break the specifications just to be compatible with Microsoft ways of doing things. For example, in Windows XP the ACPI implementation didn’t followed the specifications to the letter. BIOS vendors decided to go Microsoft way, and leaved broken things that Linux, which always used the reference Intel ACPICA interpreter, had then to be forced to be compatible with. Eventually, you will want to blame the ones that violates the standards instead of the "follow the one that leads the market and be compatible with it" actitude, which makes sense from an user perspective that just wants things to work, but anyone that cares about technical merit would obviously hate that because it creates a chaotic environment where issues arose the moment that you want to things in a different way, like, using another OS, vitualization, etc.



Serious enteprise users purchase whole servers instead of standalone parts for DIY server builds precisely for that reason. There are some Software vendors like VMWare which refuse to provide any support unless you use their Software with approved parts for the entire computer.
What sort of Hardware is available to the mainstream DIY user market? Yeah, everything is Windows focused.



I also would love to see some specification-level stress tests. It would take even more work that all the spreadsheets you post with how a card behaved in multiple games. Typically, the vast majority of users notice that their Hardware is broken or misses a feature the moment that they realize that they actually want to use it.



If you ask me what I would do Hardware wise, I would try to eye a SAS HBA Controller that still has Windows XP Drivers, since SAS is compatible with SATA via tunneling and adapters. Basically, instead of using a SATA Controller, give a try to a SAS one. On eBay some old ones are rather cheap, in case you want to expand your collection.




There are way too many things that would cause that. At times, some people claim that changing the CPU Governor helps, since it may be possible that the guest is using a Core at full load which the host is actually putting into a low power state. It takes A LOT of work to track down these issues as they’re trial-and-error and I don’t know your configuration.



The -vcpu parameter isn’t supported by upstream QEMU. It was an extra patch that had to be added at compile time, like the ACS patch for the Linux Kernel (Unless you’re using a QEMU version that already includes it). Since I never used it I can’t help you to get it running, but ignore -vcpu parameters UNLESS you know that you’re using the patch. You will need an external mean to manage vCPU pinning, like the Linux taskset command.




These are correct. However, note that the -smp parameter just creates more vCPUs and the CPU Topology that you’re showing the VM and its guest OS, but where the vCPUs are mapped to on the host is a different thing since QEMU doesn’t manage that out-of-the-box (The -vcpu patch was precisely to do so).

You may want to show the Windows XP QEMU script to see if there is anything obvious that I can help you with, but note that there are several Linux options that may affect guest stuttering. Optimizing the host is a complex topic.



Also, whenever possible, try to use latest QEMU versions. We’re at QEMU 5.0 already. And open source Software adds features, fixed and breaks stuff rather often.



Maybe you may be interesed in knowing that there are at least two users that managed to get Valorant running in a QEMU VM:
https://www.reddit.com/r/VFIO/comments/hkl2dl/valorant_qemu/


Well im not big MS fan, but you known end user experience, GUI and remote desktop as essential parts, that are good arguments for me. Yeah MS is so big that without its support is every standard half dead and if he make some changes he define standard, even flawed. But again, maybe their standards are flawed, but not to such degree that alternative OS would be actually better. Linux is successfully mainly because MS server licencing which was very, very greedy you paid for machine roles - use it as DB server - one payment, use it as mail server - other payment, use it application server - other payment, use it as domain controller and file server another payment…
Other vendors - Oracle / IBM did other ugly stuff for example licencing per cpu socket to sell overpriced fastest cpus lines.
In the past when you compared AmigaOS GUI with MS-DOS… and even hardware possiblities of Amigas and PC, MS solution was much worse, but Amiga killed itself and they kept worked and DOS got, VGA cards, Sound blasters and CD-Roms, some third party Dual panel file managers… later they tried GUI - Windows 1,2 failed, Windows 3.0 was good enough to for not gaming stuff… and with Win9x they finally won the market (working GUI + DirectX) also because they kept old stuff compatible (what was most important) until WinXP… which were finally much better… and because MS has market, virtualization was here… also some people wrote Dosbox and lots of console emulators.

Linux is underdog, so it has harder position, but even if all standards would kept in the line, im not really sure if all would be nice, you can look at new standards which are defined with Linux in mind like VR or Vulkan etc and they are still worse than MS ecosystem, which is quite open expect some low level stuff. Linux is not something new great from the scratch, but its using some bad mainframe stuff, which will never work for end user and Windows has not baggage within.


I know much more you it that i would like too… Vmware is not good example, they are just running on anything x86. IBM and HPUX has own virtualization suite - called LPARS (Powers) and VPARs (Ithanium ovepriced :frowning: ) virtualization. Dell has only HW and its x86 and maybe, maybe now some ARM stuff, im not sure. I worked on all of these, even on Sparcs with Solaris.
But Red Hat seems to be alternative for some time they where selling only SW to everyone, but it now probably dead, because they were bought by IBM year or so ago… i would say that Linux ideals where once again sold for big money. But RedHat for end users was for money from the start, so its hardly unexpected.


As other enterprise stuff, i never had it in my hands, i used it just remotely. Main problem seems to be MacOS support which i need too… regardless i would need recommendation of some exact models.


I never messed with CPU Governor, i only can say that with Vmware or Virtualbox i never had such sort of problems. I can create some system report, if you will tell me which one you preffer.


I dont have special Qemu build. Hmm, this i not like on Linux, you are often forced to use really complicated stuff and learn lots of things… such stuff should be accessible through some high level tools. Well, if such stuff would be needed for some advanced stuff which few users need ok, but such deep dive is often needed even for basic system customization :frowning:
What some process priority trick within Qemu sh script?


I guess that i was lucky with my first machine, but true is that i never noticed such things with Vmware and im used it for gaming. Some slowdowns and freezes i would be willing to accept, but that lost of input is quite big thing, that is not acceptable at all.

My Qemu scripts are still quite the same - this one is for WinXP machine (i added hyper-V line recently but its the same), i guess that i can try to remove usb, because im not using it:

#!/bin/bash

#Name should be unique
vmname="WinXP-Bios-G730-vm"

if ps -ef | grep qemu-system-x86_64 | grep -q multifunction=on; then
echo "A passthrough VM is already running." &
exit 1

else

# use pulseaudio, not by RuThaN, by original author
export QEMU_AUDIO_DRV=pa
export QEMU_PA_SAMPLES=8192
export QEMU_AUDIO_TIMER_PERIOD=99
export QEMU_PA_SERVER=/run/user/1000/pulse/native

qemu-system-x86_64 <br />-name $vmname,process=$vmname <br />-machine type=pc,accel=kvm <br />-cpu host,kvm=off,hv_time,hv_relaxed,hv_spinlocks=0x1fff,hv_vpindex,hv_reset,hv_runtime,hv_crash,hv_vendor_id=fuck-ms <br />-smp 3,sockets=1,cores=3,threads=1 <br />-m 4G <br />-rtc clock=host,base=localtime <br />-soundhw ac97 <br />-vga none <br />-serial none <br />-parallel none <br />-device vfio-pci,host=04:00.0,x-vga=on <br />-device vfio-pci,host=04:00.1 <br />-drive id=disk0,if=virtio,cache=none,format=vmdk,file=/media/ruthan/VM-Experiments/Virtuals/WinXP-G730-System-100GB.vmdk <br />-drive id=disk1,if=virtio,cache=none,format=vmdk,file=/media/ruthan/VM-Experiments/Virtuals/WinXP+Data-500GB.vmdk <br />-drive file=/media/ruthan/VM-Experiments/Virtuals/ISOs/virtio-win-0.1.185.iso,index=3,media=cdrom <br />-object input-linux,id=mouse1,evdev=/dev/input/by-id/usb-Razer_Razer_DeathAdder_Essential-event-mouse <br />-object input-linux,id=kbd1,evdev=/dev/input/by-id/usb-E-Signal_USB_Gaming_Keyboard-event-kbd,grab_all=on,repeat=on <br />-boot order=cd <br />-usb <br />-netdev type=tap,id=net0,ifname=vmtap0,vhost=on <br />-device virtio-net-pci,netdev=net0,mac=00:17:3e:00:08:08

exit 0
fi #


Well we are back to original topic - its lots of hassle and it seems that make WinXP working on real hardware with present patches is actually simpler for now, for Win98 and Dos KVM still seems to be better way. I would be probably able to run Windows 98 but with USB sound card and lots i would need to keep second keyboard etc… and i will still without DOS sound card (but there is PCem and Dosbox probably better solution anyway).


I read Qemu 5.0 release notes, nothing to extra exceiting, i would now that it someone fixed my problems by upgrade, i would try it otherwise im lazy… i see here small change for fixing my problems.

Windows XP predates HyperV so most of the -cpu parameters shouldn’t really matter. Albeit if they’re already there, they shouldn’t hurt, either.

I recall having input suddently dropping during heavy load spikes which forced me to reboot the VM, both with Xen (Which uses QEMU) and standalone QEMU. I don’t have these any longer since I migrated to the paravirtualized VirtIO Keyboard and Mouse Devices: https://www.kraxel.org/blog/2015/06/new-…-input-devices/

-device virtio-keyboard-pci
-device virtio-mouse-pci

These goes AFTER the -object input-linux parameter. Note that I’m not sure if there are Drivers for Windows XP of those two Devices, as they’re required to get those working, so maybe that will not solve your issue for Windows XP.
Another alternative would be to test with the USB Devices like: https://www.qemu.org/docs/master/system/usb.html

-device usb-kbd
-device usb-mouse


The rest of the script is decent to me, albeit for PCI Topology correctness purposes you may want to plug your Video Card and HDMI function into a proper PCIe Root Port instead of getting them on the Host Bridge directly (Requires another -device).
If you were to use QEMU 4.0+ versions, I think that you can experiment using -audiodev instead of the old style ugly environmental variables like export QEMU_AUDIO_DRV=pa. There was a patch that was supposed to use JACK as audio backend (JACK is considered professional grade audio interface) which seems to fix almost all latency issues if properly configured. But I don’t fully readed the documentation nor tested it so I can’t help you with those.


You may have to read how to use taskset in scripts so that QEMU spawned vCPU threads get properly mapped to different Physical Cores of your real CPU. I saw a lot of people do that, but I don’t know the specifics, either.

Thanks for tips.


I wil try topology if you will post modified lines, i know its probably somewhere in the history. I tried to fix so problems, it not worked as fix, but i still would make sense to it… but they are not probably essential because lots of tutorials with happy users are using them.


Im no Qemu 4.2 with Ubuntu 20.4. Im lazy…, i dont have now sound related problems, or at least no major ones and unless i would know that its related to slowdowns => i but i can test if slowdowns if remove soundcard lines.

BTW i though about Linux once more there is other very important thing that is development tools - Windows had Borland decent tools up to 2000 (i grew with them) and after than came Visiual Studio, which is great, back in the time Linux had probably awfully Eclipse, maybe Netbeans… and probably some ports of small Ideas as Code::Blocks, Dev C++. Borland made some Linux porting, but it failed. I now that some people are happy with good text editor and complier, but for me and i never not full time developer i was like prehistory.
I guess that you now have Idea ide… and glorified text editor = Visual Studio code, MacOS has almost full blown VS port and Xcode (nothing great, but it not bad).

Again its no my area of expertise, but when i see, how much is Linux glued by some Perl and Python scripts, which are from its nature quite stupid and not robust… its hard to believe in greatness of such systems, these things are quite problematic even as part of 1 game development and they are slow as hell from performance point of view. There is advantages of MS for sure, because all MS parts of os are just C++ or .Net framework (C#,a bit of Visual basic) thing translated to quite was machine code + there is Java too on Linux, which is robust enough, but its known to be not fast, unless you invest lots of effort into optimization.
And you now me - GUI, i love Visual studio and inbuild Windows form gui components and designer… and remember Java Swing hell, which is for some reason still used by apps, i know that there now GTK and QT frameworks, but im not sure how much they are integrated to some Ide out of box.

Sorry to ask here, but does Qemu even support 3D acceleration for DOS/Win9x guests, on modern Windows host?

I don’t much care if it’s passthrough, virtual gpu, or x-y wrapper, any form?

Officially not… but there are some obscure build it yourself mods from some programmer snob…
https://www.vogons.org/viewtopic.php?f=24&t=60950 Good luck.

Things started to me with Qemu 3Dfx project, now it support OpengGL and Direct3D (untested by me). Discussion with author is a bit over the top.
https://www.vogons.org/viewtopic.php?f=24&t=60950

Where are complete binary build Qemu 5.2 3Dfx for Windows to download thans to roberMo here:
https://www.vogons.org/viewtopic.php?p=933335#p933335

I also made online sheet with test results and hints for setup:
https://docs.google.com/spreadsheets/d/1…dit?usp=sharing
If you want to report your results just ask me through Google sheets for editing rights.

With Linux its more complicated you have build it yourself:
https://github.com/kjliew/qemu-3dfx
https://github.com/kjliew/qemu-xtra

Some people are working on some flatpack windows like package, but its not out yet.

Its working very fast, so its running fine for Windows 98 games even on some CPU 10W on Linux, here is authors YT channel:
https://www.youtube.com/channel/UCl8InhZ…rMDSWd0A/videos

Its not yet classic Virtual machine experience with some 1 universal settings which just works, it need quite few Qemu starting parameters changing on game basis, its limited only on games which are not using static links in Dos. In Win98 is for 2D used VBE9x drivers, which has its own issues and its its development ended years ago… You have desktop with free PCI-E slot and are you able to make KVM working i would say that is still less hassle… but want to use very high resolution and want very high FPS on some slower laptop etc, this is the way and it could run even without any Linux just as some emulator.