Windows 98SE on Modern Hardware

I managed to get Qemu Dos machine working with normal graphical output, its same as on Windows just run almost same commands from terminal, only in repository is quite old version 2.11, i will not change it, because its tested for KVM… Sound is working, FM is good, but FX sucks… otherwise same problems as with Windows version. So for pass through you would probably also need some Dos friend sound card.
I wonder how to make *.sh scripting to run qemu batch same as windows, i when i copy working command to from terminal to sh file, im just getting only some text echo.

If you’re doing passthrough, ideally, you may want to disable any other Video Card, including QXL, since that way it is easy to known if passthrough is working (The Firmware and Windows have two different priorities about which Video Card they use by default). At times there can be some weird VGA resources in the VM if there are multiple Video Cards, so having only one is the easiest way to ensure that it works from the moment that the VM posts up to Windows.
IGP Passthrough is a bit harder than passing a discrete Video Card. Actually, you may be better out trying Intel GVT-g for GPU Virtualization of the Intel integrated GPU if you have a supported Intel Processor (Which you have).
I know NOTHING about virt-manager and libvirt idiosyncrasies since I use QEMU via command line. libvirt was intended to provide a unified XML format so that VM configuration files could be ported from one Hypervisor to another one.
Audio issues were a pain in the butt to debug since there were a multitude of parameters (-audiodev) and backends (ALSA, pulseaudio, and some more). People that tinkered with them had some luck getting things running.


Have you actually tried to read my guide? Literally, there are four years of experience dumped there. You see, this is NOT a walk in the park. You may be able to duct tape things and get them working following random guides, but you don’t know the logic or reasoning behind things, which is WHY my guide is so long. While the guide is outdated (The last time I tested following it to completion was 4 years ago) and may not work exactly as described due to Arch Linux rolling release nature, it should still teach you some Linux basics and how to tackle some issues.
Jump to the “QEMU INVOCATION” part of my guide. And if you want to know what is the difference between 440FX and Q35, jump to “SYSTEM TOPOLOGY”.

@zir_blazer

Thanks for info.
I tried Geforce 6600LE passthrough, i got info when im able to see card in virtual my IOMMU, kernel and all other low level porn, so im doign this part right. But i virtual machine i got Code 12 error on it.

I now fount some better tutorial:
https://heiko-sieger.info/running-window…ga-passthrough/

Its not using virt-manager, but just vanilla QEMU, i now finally have some QEMU starting script and understand all its variables… im learning lots of new stuff, but its classical too many variable problem. After i will make something working with QEMu scripts, i could maybe try to derive virt-manager configuration for it… but there is lots options missing and maybe it could be side loaded through XML file, maybe not… in such situation is Qemu script cleaner…

I know that there would some hassle with iGPU, but really lots of things, with Unraid you just clicked through few buttons. Geforce 6600 is not idea too, too old… i will try make it to work… but maybe i will try other gpu, even if it would not look nice to get first success after that it would be much easier so far… even if all testing commands (https://heiko-sieger.info/running-window…k_Configuration ) reports success, i never got get picture (not even Windows boot logo, nothing)… but i finished base qemu script few hours ago and i had not time to mess with magic parameters, there is quite few of them depends on used card…

I got also some info that iGPU need be done through gvt-d, i only know it highlevel from Phoronix, so its again whole other chapter to learn.
Main question is if it working with other GPU and it should be blacklisted, or intel driver should be loaded for host Linux as primary driver etc… from quick reading im not sure about. Im needing something what will work beside other main dedicated GPU used for Linux, at least now for testing.
I dont get it where is diference between gvt-d and “standard” pass through its some special OS driver, its device changed from Intel HD graphics to some special gvd-t one?
I red that its possible to use with virt-manager, at least with some xml edit…

Some info branch is also connected with Proxmox, could it be run on Mint? I got info that is fine on Debian and you know Mint-<Ubuntu-<Debian… It seems like some middle way between KVM with QEMU scripts and virt-manager and Unraid. If someone want to start from nothing it could be the way.

Yeah its exactly what you writing… im getting there, could you give short info what is gvt-d and where is difference? Sound would be next step… What about USB sound card passthrough isnt it just quick and clean solution?

Your guide its still to scary… but im getting there, i started with virt-lib… now i have complex Qemu script thing tutorial (, but written for Mint for example network bridge settings was done through network manager not some scary scripts), so its much more friendly for me… if it will fail, i will try to check yours… i have lots materials to study… In general, i dont what to know this stuff, i dont have too much happiness from it… even if will learn it, i will forget it quickly… but its good starting point for for next… im building some my personal guides, just for me, how to make it quickly done next time…

440Fx vs Q35, i read some we are working on it 2012 pdf presentation… but true is that its not like in real world, there are lots of 440fx hacks which are not really possible with that HW and you can do it with such virtual machine and EFI complicated things even more. Im still getting some info about that i could maybe solve my problems with using 440 machine, its even default in libvirt.

What would help me is info about virtio - are there virtual disk devices and network cards much better than other normal emulated stuff? Is somewhere some real benchmark of bare metal and IDE /SATA / Virtuo controllers etc?

BTW there is even VFIO Discord server to make things more modern:
https://discordapp.com/channels/24418792…190447147286529

Ok i did some something, so far no picture, i even tested more monitors and output… I will post Qemu scripts later.

But what about kernel parameters? What is exactly $vt_handoff - its really neede, i red that is something with ALT+CRTL+FX console thing and and ALT+CRTL+F7 switch between text and video mode, but im not really sure if need it.
There is also video=efifb:off , some tutorial saying to try nomodeset , i never fully undestood these.
There is also update-initramfs -u is needed for these kernel flags, its just for vfio-pci

Otherwise i also checked with qemu monitor, info pci command that vga pass through devices are there… so problem is really some Linux magic how to get something to screen… im not getting any error when i try script. Have tried q35, pc(it should be alias for 440)… EFI, Bios etc, still nothing.

I find out that there are zillions of Qemu machine types, some of them has Ubuntu codes in their names? Is ok to use, just q35 and pc as machine types?


Supported machines are:
pc-i440fx-zesty Ubuntu 17.04 PC (i440FX + PIIX, 1996)
pc-i440fx-yakkety Ubuntu 16.10 PC (i440FX + PIIX, 1996)
pc-i440fx-xenial Ubuntu 16.04 PC (i440FX + PIIX, 1996)
pc-i440fx-wily Ubuntu 15.04 PC (i440FX + PIIX, 1996)
pc-i440fx-trusty Ubuntu 14.04 PC (i440FX + PIIX, 1996)
ubuntu Ubuntu 18.04 PC (i440FX + PIIX, 1996) (alias of pc-i440fx-bionic)
pc-i440fx-bionic Ubuntu 18.04 PC (i440FX + PIIX, 1996) (default)
pc-i440fx-bionic-hpb Ubuntu 18.04 PC (i440FX + PIIX, +host-phys-bits=true, 1996)
pc-i440fx-artful Ubuntu 17.10 PC (i440FX + PIIX, 1996)
pc-i440fx-2.9 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.8 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.7 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.6 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.5 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.4 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.3 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.2 Standard PC (i440FX + PIIX, 1996)
pc Standard PC (i440FX + PIIX, 1996) (alias of pc-i440fx-2.11)
pc-i440fx-2.11 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.10 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.1 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.0 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-1.7 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-1.6 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-1.5 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-1.4 Standard PC (i440FX + PIIX, 1996)
pc-1.3 Standard PC (i440FX + PIIX, 1996)
pc-1.2 Standard PC (i440FX + PIIX, 1996)
pc-1.1 Standard PC (i440FX + PIIX, 1996)
pc-1.0 Standard PC (i440FX + PIIX, 1996)
pc-0.15 Standard PC (i440FX + PIIX, 1996)
pc-0.14 Standard PC (i440FX + PIIX, 1996)
pc-0.13 Standard PC (i440FX + PIIX, 1996)
pc-0.12 Standard PC (i440FX + PIIX, 1996)
pc-0.11 Standard PC (i440FX + PIIX, 1996)
pc-0.10 Standard PC (i440FX + PIIX, 1996)
pc-q35-zesty Ubuntu 17.04 PC (Q35 + ICH9, 2009)
pc-q35-yakkety Ubuntu 16.10 PC (Q35 + ICH9, 2009)
pc-q35-xenial Ubuntu 16.04 PC (Q35 + ICH9, 2009)
pc-q35-bionic Ubuntu 18.04 PC (Q35 + ICH9, 2009)
pc-q35-bionic-hpb Ubuntu 18.04 PC (Q35 + ICH9, +host-phys-bits=true, 2009)
pc-q35-artful Ubuntu 17.10 PC (Q35 + ICH9, 2009)
pc-q35-2.9 Standard PC (Q35 + ICH9, 2009)
pc-q35-2.8 Standard PC (Q35 + ICH9, 2009)
pc-q35-2.7 Standard PC (Q35 + ICH9, 2009)
pc-q35-2.6 Standard PC (Q35 + ICH9, 2009)
pc-q35-2.5 Standard PC (Q35 + ICH9, 2009)
pc-q35-2.4 Standard PC (Q35 + ICH9, 2009)
q35 Standard PC (Q35 + ICH9, 2009) (alias of pc-q35-2.11)
pc-q35-2.11 Standard PC (Q35 + ICH9, 2009)
pc-q35-2.10 Standard PC (Q35 + ICH9, 2009)
isapc ISA-only PC
none empty machine
xenfv Xen Fully-virtualized PC
xenpv Xen Para-virtualized PC

There are my QEMU scripts without some headers and footers, to export some system variable for pulse audio and process naming adn check is machine is not already running.

iGPU EFI:


cp /usr/share/OVMF/OVMF_VARS.fd /tmp/my_vars.fd

qemu-system-x86_64 <br />-name $vmname,process=$vmname <br />-machine type=q35,igd-passthru=on,accel=kvm <br />-cpu host <br />-smp 3,sockets=1,cores=3,threads=1 <br />-m 8G <br />-balloon none <br />-rtc clock=host,base=localtime <br />-vga none <br />-nographic <br />-serial none <br />-parallel none <br />-soundhw hda <br />-usb <br />-device usb-host,vendorid=0x093a,productid=0x2521 <br />-device usb-host,vendorid=0x060b,productid=0x2312 <br />-device vfio-pci,host=00:02.0 <br />-drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd <br />-drive if=pflash,format=raw,file=/tmp/my_vars.fd <br />-drive file=/media/Win7_64/VirtualMachines/Win7-Pro-SP1-x64_EN_DVD.iso,index=1,media=cdrom <br />-drive file=/media/Win7_64/VirtualMachines/virtio-win-0.1.171.iso,index=2,media=cdrom <br />-drive id=disk0,if=virtio,cache=none,format=vmdk,file=/media/Win7_64/VirtualMachines/Win7-64-EFI.vmdk <br />-boot order=dc <br />-netdev type=tap,id=net0,ifname=vmtap0,vhost=on <br />-device virtio-net-pci,netdev=net0,mac=00:16:3e:00:06:06


iGPU Bios (legacy):

qemu-system-x86_64 <br />-name $vmname,process=$vmname <br />-machine type=q35,igd-passthru=on,accel=kvm <br />-cpu host <br />-smp 3,sockets=1,cores=3,threads=1 <br />-m 8G <br />-balloon none <br />-rtc clock=host,base=localtime <br />-vga none <br />-nographic <br />-serial none <br />-parallel none <br />-usb <br />-device usb-host,vendorid=0x093a,productid=0x2521 <br />-device usb-host,vendorid=0x060b,productid=0x2312 <br />-device vfio-pci,host=00:02.0 <br />-drive file=/media/Win7_64/VirtualMachines/Win7-Pro-SP1-x64_EN_DVD.iso,index=1,media=cdrom <br />-drive file=/media/Win7_64/VirtualMachines/virtio-win-0.1.171.iso,index=2,media=cdrom <br />-drive id=disk0,if=virtio,cache=none,format=vmdk,file=/media/Win7_64/VirtualMachines/Win7-64-EFI.vmdk <br />-boot order=dc <br />-netdev type=tap,id=net0,ifname=vmtap0,vhost=on <br />-device virtio-net-pci,netdev=net0,mac=00:16:3e:00:06:06


Nvidia 6600LE Bios (i tried EFI too but is thing that videocard has support of it… and legacy would be better for this one)
qemu-system-x86_64 <br />-name $vmname,process=$vmname <br />-machine type=q35,accel=kvm <br />-cpu host,kvm=off <br />-smp 3,sockets=1,cores=3,threads=1 <br />-m 8G <br />-balloon none <br />-rtc clock=host,base=localtime <br />-vga none <br />-nographic <br />-serial none <br />-parallel none <br />-usb <br />-device usb-host,vendorid=0x093a,productid=0x2521 <br />-device usb-host,vendorid=0x060b,productid=0x2312 <br />-device vfio-pci,host=08:00.0 <br />-drive file=/media/Win7_64/VirtualMachines/Win7-Pro-SP1-x64_EN_DVD.iso,index=1,media=cdrom <br />-drive file=/media/Win7_64/VirtualMachines/virtio-win-0.1.171.iso,index=2,media=cdrom <br />-drive id=disk0,if=virtio,cache=none,format=vmdk,file=/media/Win7_64/VirtualMachines/Win7-64-EFI.vmdk <br />-boot order=dc <br />-netdev type=tap,id=net0,ifname=vmtap0,vhost=on <br />-device virtio-net-pci,netdev=net0,mac=00:16:3e:00:06:06


From most of them i removed sound ( -soundhw hda </i> ), but its not source of problems "’&quot; is ekvivalent of “^” with windows batch just enable multiline commands.
I would like to use comments (#) inside of this Qemu long command, to add some description, but i dunno how to it in *.sh, maybe is not possible.

Used ids are:

Nvidia 6600:
08:00.0 //IOMM group
10de:0142 // id
pci:v000010DEd00000142sv00000000sd000002F2bc03sc00i00
alias pci:v000010DEd00000142sv00000000sd000002F2bc03sc00i00 vfio-pci

Intel GPU:
00:02.0 // Group ( lspci -nn | grep 00:02.)
8086:1912 //Id its named Display adapter is not classic VGA, so lspci | grep VGA will not work
pci:v00008086d00001912sv00001458sd0000D000bc03sc80i00
alias pci:v00008086d00001912sv00001458sd0000D000bc03sc80i00 vfio-pci

All devices are in its IOMM group alone, so there si need to fiddle with it…

Mouse and keyboard:
- now i have problem that keyboard is not returning, after stop of KVM machine, probably because of cheap us USB hub, i have to check cabling and ad some markers (with is work in progres i have lots of cables and make them marked really helps)

Mouse:
Bus 001 Device 005: ID 093a:2521 Pixart Imaging, Inc. Optical Mouse

Keyboard:
Bus 001 Device 007: ID 060b:2312 Solid Year

When i run qemu monitor usb device info (info usb). Im getting better use devices names, these are strange


Black list (sudo pluma /etc/modprobe.d/blacklist.conf ), nothing is now black listed:

# This file lists those modules which we don’t want to be loaded by
# alias expansion, usually so some other driver will be loaded for the
# device instead.

# evbug is a debug tool that should be loaded explicitly
blacklist evbug

# these drivers are very simple, the HID drivers are usually preferred
blacklist usbmouse
blacklist usbkbd

# replaced by e100
blacklist eepro100

# replaced by tulip
blacklist de4x5

# causes no end of confusion by creating unexpected network interfaces
blacklist eth1394

# snd_intel8x0m can interfere with snd_intel8x0, doesn’t seem to support much
# hardware on its own (Ubuntu bug #2011, #6810)
blacklist snd_intel8x0m

# Conflicts with dvb driver (which is better for handling this device)
blacklist snd_aw2

# Causes trackpads to stop working on Lenovo 11e 2nd gen (Ubuntu: #1802135)
# and Lenovo x240 to hang on boot (Ubuntu: #1802689)
blacklist i2c_i801

# replaced by p54pci
blacklist prism54

# replaced by b43 and ssb.
blacklist bcm43xx

# most apps now use garmin usb driver directly (Ubuntu: #114565)
blacklist garmin_gps

# replaced by asus-laptop (Ubuntu: #184721)
blacklist asus_acpi

# low-quality, just noise when being used for sound playback, causes
# hangs at desktop session start (Ubuntu: #246969)
blacklist snd_pcsp

# ugly and loud noise, getting on everyone’s nerves; this should be done by a
# nice pulseaudio bing (Ubuntu: #77010)
blacklist pcspkr

# EDAC driver for amd76x clashes with the agp driver preventing the aperture
# from being initialised (Ubuntu: #297750). Blacklist so that the driver
# continues to build and is installable for the few cases where its
# really needed.
blacklist amd76x_edac
#by RuThaN
#blacklist snd_hda_intel
#blacklist snd_hda_codec_hdmi
#blacklist i915


Grub.cfg (/boot/grub/grub.cfg) entry:

menuentry ‘Linux Mint 19.3 MATE’ --class linuxmint --class gnu-linux --class gnu --class os $menuentry_id_option ‘gnulinux-simple-f604491d-e061-d343-cdbd-9c6083e3505d’ {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root f604491d-e061-d343-cdbd-9c6083e3505d
else
search --no-floppy --fs-uuid --set=root f604491d-e061-d343-cdbd-9c6083e3505d
fi
linux /boot/vmlinuz-5.3.0-40-generic root=UUID=f604491d-e061-d343-cdbd-9c6083e3505d ro quiet splash $vt_handoff intel_iommu=on nomodeset
initrd /boot/initrd.img-5.3.0-40-generic
}


Vfio config - /etc/modprobe.d/vfio.conf - empty

Modprobe local /etc/modprobe.d/local.conf

alias pci:v000010DEd00000142sv00000000sd000002F2bc03sc00i00 vfio-pci
alias pci:v00008086d00001912sv00001458sd0000D000bc03sc80i00 vfio-pci
options vfio-pci ids=10de:0142,8086:1912
options vfio-pci disable_vga=1


KVM conf sudo pluma /etc/modprobe.d/kvm.conf:
options kvm ignore_msrs=1

initram modules /etc/initramfs-tools/modules: // for update you need to run update-initramfs , added to end of line these:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
vhost-net


I also tried to add x-vga=on, but im getting this:
(qemu) qemu-system-x86_64: -device vfio-pci,host=08:00.0,x-vga=on: vfio error: 0000:08:00.0: failed getting region info for VGA region index 8: Invalid argument
device does not support requested feature x-vga

Because im tired of pass through i test Win98 with virtualized graphics.

Good news:
Sound is working out of box with vanilla Win98SE cd and its better than i heard in other Win98 emulations as Vmware were you usually get some stuteriing at leas for welcome sound… With QEMu this one is clean and what is new music background them.
Bad there are probably still some problems, in console is spamming this message:
sb16: warning: command 0xf,1 is not truly understood yet

There are Qemu emulated sound hardware options(-soundhw parameter, in theory Nice there is even GUS):
sb16 // Creative Sound Blaster 16
es1370 // ENSONIQ AudioPCI ES1370
ac97 //Intel 82801AA AC97 Audio
adlib //Yamaha YM3812 (OPL2)
gus //Gravis Ultrasound GF1
cs4231a CS4231A
hda // Intel HD Audio
pcspk //PC speaker


Bad if sound quality would be such quality im good with it… So it theory you can save one PCI soundcard slot. There are also other options ES1370 and AC97 to emulate, so it could only better.

Bad news:
- mouse is not working, i have found old QEMu bug which should be fixed but as with lots of Linux bugs i was probably half fixed, or its broken again:
https://bugs.launchpad.net/qemu/+bug/521994
- there DOS double arrow key press detection is still there at least for Scandisk part of installation
- network card which i trying to emulate is not here, even find new hardware is not working.
- plug and play bios device - had problem (code 24), when i remove it and let it detect again is the same

Starting script:

qemu-system-x86_64 -m 512 <br />-machine type=pc-i440fx-bionic <br />-smp 1,sockets=1,cores=1,threads=1 <br />-vga cirrus <br />-rtc clock=host,base=localtime <br />-parallel none <br />-balloon none <br />-mem-prealloc <br />-serial none <br />-parallel none <br />-L . <br />-soundhw sb16,adlib,pcspk <br />-boot order=cd <br />-no-acpi <br />-hda ./Win98-System.vmdk <br />-cdrom ./Win98SE-ENG.iso <br />-k en-us <br />-net nic,model=rtl8139 -net user


In progress:
- USB mouse
- networking // to safe network card slot in physical machine

Just one funny thing:
You can kill Win98 installation just by have 2 same disk images there are probably same ids (i was lazy to search qemu command to create new one so i just copied on vmdk) - mounted as C and D, at the end of scandisk it freeze.

Old Qemu in Mint / ubuntu
My newest distro sill has Qemu 2.11 which is 2 years old, i wanted to keep it, because passthrough is tested with it etc… but i will try to make disk image sideload newer version, is really too old and it shame… with all that we keep thing up to date Linux bla, bla… i know what rolling distros are, but still.

Rockstar ate my hamster … and keyboard:
Other i removed USB switch, but when i passthrough keyboard (no Win98 one) to virtual its not comming back, mouse does… Its annoying.

Wow… i just did it… I got Nvidia 6600 pass through working!

Solution was that x-vga thing. I when i tried to add it to qemu:

I was getting error:
qemu-system-x86_64: -device vfio-pci,host=08:00.0,x-vga=on: vfio error: 0000:08:00.0: failed getting region info for VGA region index 8: Invalid argument
device does not support requested feature x-vga


I had to remove this line from /etc/modprobe.d/local.conf vyhodit tuhle linu:
options vfio-pci disable_vga=1

x-vga options is add to qemu like this:
-device vfio-pci,host=00:02.0,x-vga=on </i>

Because its linux and i had too after that do this:
sudo update-initramfs -u
+reboot.

So my setup was probably right for gpu with is supporting EFI (has EFI bios), but because i have old card i have go legacy… and regarding of Discord iGPU also only working in legacy mode… if you later comeback to it, because with Unraid iGPU worked too, but i can live without it. Todays iGPU arent so bad and it would get only better. Im very worse iGPU on my GPD Win 2 - Windows haldheld and its still quite good.

Otherwise i tried with Win 98 qemu machine networking, it seems that only this nic is can be detected (by Add Hardware wizzard) by Win98, is ne2k_isa - old 10 Mb/s slimmer, anything else nothing.

Im getting some IP address but i dunno if its really working, device manager is fine… It tried telnet to my other machine (telnet 10.0.0.15 3389 - just hit remote desktop listerner), just to try something outside of machine, but nothing, but that telnet is some strange thing… after command some gui starting…
Im using networking for poor SLIRP -net nic,model=ne2k_isa -net user
I know how to set proper one, but only on Windows with TAP driver: -net nic,model=rtl8139 -net tap,ifname=TAP
i dont really know how its play with linux bridge which i created for virtio networking: -device virtio-net-pci,netdev=net0,mac=00:16:3e:00:06:06

Networking and Linux is deadly combo for me, i tried to read some linux tutorials about it, but they are scary, so if there is some networking guy (and 99% Linux guys are), they could help me. Worst problem is solved, we have some passthrough…

I also would need lots of backuping… its possible how to to Mint Caja add right click pack with 7zip option? To do quick backup of disk images? I hate do to it in terminal.
Update: I found that is already in-build under Right-click compress folder.

So far with 3 cores of Core i5 6500T low power(35W) cpu , i would be able to recognize difference between this machine and physical one, at least for normal desktop experience… We will see with games, is we would be plague with sound stuttering which some guides trying to solve.

I just played Quake 3 on it, its nice…

ItsWorking.png



After i made screen i installed Nvidia drivers for Geforce its working too.

At least proper shutdown of Win7 machine is even giving me keyboard back, maybe that quit command is not idea, but when i searched qemu command i found only ahci shutdonw - not working during step and quit for hard shutdown…

Win7 sound:
I made sound working with Win7… i wrote, you can probably solve sound by usb sound card passthrough… but you need some jack audio switch, or give up native sound… and you need for every virtual own HW or not run them in parallel… modern graphics card has inbuild soundcard for HDMI some even DVI / DP audio, but you still need to switch output somehow or use monitor additional speaker bar - because of lots machine, i have it on every on my monitors… but still solution could be some HDMI switch with ouput autodetection… but at least some of cheap ones are from my experience full realiable with output autodetection or has problems that sometime is sound half problem dues some frequency input detection problem… at least for intel iGPU i had such problems.

Now im using emulation through - -soundhw hda \ without any tuning… its good enough for some sound effect or understand some speaking word, but its not clean as some experience, there is stuttering and crackling. For list of supported soundcard, i guess that any other option is not supporting Win7… for XP there are some SB16 dirvers (i for PCI one, im not sure if they will work with emulated which is probably ISA too, probably yes), probably you can get something for AC97 (Intel 82801AA , but i red somewhere that Realtek driver is working for Win 9x… realtek has Win7 AC97 driver) and Es1370 (XP driver exist, there is something form MS for Vista), maybe even crystal cs4231a (i didnt file anything for XP after quick search) - it need some research.

Adding data:
Before you get work working you need somehow sideload of data… Im not friedly with virtual disk image mounting tools for Linux, on Windows you can just mount vhd, vhd and vhdx as just other volume… or use Winimage, Poweriso for addtion file.
Other way is just create *.iso with data, again on Windows you can make it through Winimage, Winiso and PowerISO - all these are paid and only Winiso old version has some demo with up to 100 MB support, there is some Total Commander plugin for iso editing, but setup is not super easy.
I found out free Linux gui tool for it, its very simple and its not support drag and drop so usage is not idea, but its working - its name is ISO master.

KVM not working keyboard during preboot problem
Yesterday i got some ugliness of machine virtualization with my Win7 machine, i installed whole machine… shutdown it, i wanted it to restart, but i got some message that videocard is not available - probably still hang somewhere in last execution - its quite typical pass through problem… but machine somehow started… i shutdown it… rebooted with videocard with ok state (i really dunno how to solve this, otherwise that reboot) and i got… not proper shutdown dialog, what is ok… but problem is that dialog… keyboard was that… i met same problems years ago with Unraid… where i was able to bypass it with VNC. ok not big deal i waited 30s… but i could be problem if you really want to do something in Preboot screens, after boot keyboard was working fine, but maybe because of some unupdated windows 7, system was restored to some old state… and i had to reinstall lots of thing again… or use system restore to newer restore point (i was clever and enabled it before crash) so i was able restore most of the setting and i had to reboot once more because video card was undetected.
I have one suspition, that keyboard is auctually worked in preboot state but screen wasnt updated and without knowledge of that initialized system restore myself, but how knows. I also find out that resolution switching took quite a while, because there is addition response time of pass through… or its simply slower on Linux and if you have monitors with slow resolution switching as are my old 24 HP IPS panels its annoying. I hope that newer monitors or some monitors form other brand handle it better… i want update monitors setup to 3x27 144 Hz IPS Gsynch or Freesynch option… but it would be expressive and i want to select right ones and there are issues with control button on back or side of screen (not really usefull with 3 mons setup) i need physical button in the front or mo more preparation for soundbars.

I have to study Qemu 4 and 3 release notes to find out how much thing with it could be better…

Hmm i managed to get pass through Nvidia 6600 to my virtual machine, so its at least booting with machine type 440fx, not only. But i got same problem as with Win7 Preboot, i cant select anything in boot menu… so its booting only to Safe mode and in Safe mode is not mouse or keyboard working… So probably Qemu PS/2 is working like some PS/2 over, but its strange because in Dos machine is keyboard working.

Now is time for Win98 experts, i forgot how, but i thing that there is way how to force nomal boot instead of something wrong safe boot.

Win98 + Nvidia 6600 Qemu starting script:

qemu-system-x86_64 -m 512 <br />-machine type=pc,accel=kvm <br />-smp 1,sockets=1,cores=1,threads=1 <br />-rtc clock=host,base=localtime <br />-parallel none <br />-balloon none <br />-mem-prealloc <br />-serial none <br />-parallel none <br />-L . <br />-soundhw sb16,adlib,pcspk <br />-vga none <br />-nographic <br />-device vfio-pci,host=08:00.0,x-vga=on <br />-boot order=cd <br />-no-acpi <br />-hda ./Win98-System-PassThrough.vmdk <br />-hdb ./Win98-Data-100GB.vmdk <br />-cdrom ./Win98SE-ENG.iso <br />-k en-us <br />-net nic,model=ne2k_isa -net user


It seems that we can make it working, but i would need a help.

There is that problem that videocard is no more available after not good shut down:
qemu-system-x86_64: vfio-pci: Cannot read device rom at 0000:08:00.0
Device option ROM contents are probably invalid (check dmesg).
Skip option ROM probe with rombar=0, or load from file with romfile=


I dunno what exactly is that rombar…this option was in virt-manager too as on / off.

I have tried to add usb controller to Win98 machine usb controller and pass through some usb device to solve not working mouse:
-usb <br />-device usb-host,vendorid=0x093a,productid=0x2521 </i>

, but once again it wasnt detected, so is probably no way.

Windows XP is with Nvidia 6600 pass through is also working fine, i only had to change machine type to 440fx chipset with Q35 i was gettting BSOD during load of text part of installation, i tried 2 SP3 cds.
I havent time to test sound, otherwise virtio drivers are for storage and network are working fine, Quake 3 demo is working fine… 70-90 FPS at 1600x1200 and full details i thing that what you can squeeze from GeForce 6600LE, year i dont to get 6800 but no luck.

XP starting script, i sound line is untested (-soundhw es1370 \ - but i will i needed update it later, maybe ac97 would be better), because now i got 150 windows updates and machine will run for a while:

qemu-system-x86_64 <br />-name $vmname,process=$vmname <br />-machine type=pc,accel=kvm <br />-cpu host,kvm=off <br />-smp 3,sockets=1,cores=3,threads=1 <br />-m 4G <br />-balloon none <br />-rtc clock=host,base=localtime <br />-vga none <br />-nographic <br />-serial none <br />-parallel none <br />-soundhw es1370 <br />-usb <br />-device usb-host,vendorid=0x093a,productid=0x2521 <br />-device usb-host,vendorid=0x060b,productid=0x2312 <br />-device vfio-pci,host=08:00.0,x-vga=on <br />-drive id=disk0,if=virtio,cache=none,format=vmdk,file=/media/Win7_64/VirtualMachines/WinXP-Nvidia6600-Pass-32bit-System-100GB.vmdk <br />-drive file=/media/Win7_64/VirtualMachines/WinXp-Pro-Black.iso,index=1,media=cdrom <br />-drive file=/media/Win7_64/VirtualMachines/virtio-win-0.1.171.iso,index=2,media=cdrom <br />-boot order=dc <br />-netdev type=tap,id=net0,ifname=vmtap0,vhost=on <br />-device virtio-net-pci,netdev=net0,mac=00:16:3e:00:06:06


Keyboard and mouse are working fine in both parts of setup, i had no time to test preboot… So no mouse problem is really only with Win98.

It seems to found solution for that impossibility restart the machine, due videocards not responsive… I added rom from my card from TechPowerUp which has video rom DB.
-device vfio-pci,host=08:00.0,x-vga=on,romfile=/media/Win7_64/VirtualMachines/!roms/Asus6600LE.rom

To Win98, when i added:
-vnc :2 \ To open make vnc server available with at host ip adress and port 5902 im able to conenct it and use vnc, which is working for Windows preboot, but not for desktop here again only keyboard working im not expert but maybe VNC mouse need working real mouse.
Maybe solution would install vnc server on target machine, but i would need working networking for it.

I tried some other parameter like: -serial msmouse \ but never get mouse working, passthrough usb device are both deth, because of missing usb controller…

With pass through, when i add vnc connection i dont see anything, i red that i need for it remove:
-vga none <br />-nographic </i>
I tried it but still nothing.

@ruthan

do mouse and keyboard show up in device manager? or any USB controllers?

you would need a native USB 2.0 card for USB under windows98.

In device manager are PS/2 keyboard and mouse, without exclamation marks.
As i wrote no USB controller at wall, Vmware has it for Win98, Virtualbox too, but Qemu at least with 440fx machine no, there is not any device without driver, only half dead Plug and Play bios with code 24.
Maybe add hardware wizzard is crippled because of not working Plug and Play bios and USB coult be somehow sideloaded… with XP 440fx USB controller is working fine… Strange is that with Unraid it was somehow working.

@ruthan

try installing NUSB 3.3 in windows98 and see if that fixes it.

Thanks some old tutorial i found out that ekvivalent of virt-manager cpu topology setting there are lots of options, qemu-system-x86_64 -cpu help giving these:

Available CPUs:

x86 486
x86 Broadwell-IBRS Intel Core Processor (Broadwell, IBRS)
x86 Broadwell-noTSX-IBRS Intel Core Processor (Broadwell, no TSX, IBRS)
x86 Broadwell-noTSX Intel Core Processor (Broadwell, no TSX)
x86 Broadwell Intel Core Processor (Broadwell)
x86 Cascadelake-Server Intel Xeon Processor (Cascadelake)
x86 Conroe Intel Celeron_4x0 (Conroe/Merom Class Core 2)
x86 EPYC-IBPB AMD EPYC Processor (with IBPB)
x86 EPYC AMD EPYC Processor
x86 Haswell-IBRS Intel Core Processor (Haswell, IBRS)
x86 Haswell-noTSX-IBRS Intel Core Processor (Haswell, no TSX, IBRS)
x86 Haswell-noTSX Intel Core Processor (Haswell, no TSX)
x86 Haswell Intel Core Processor (Haswell)
x86 Icelake-Client Intel Core Processor (Icelake)
x86 Icelake-Server Intel Xeon Processor (Icelake)
x86 IvyBridge-IBRS Intel Xeon E3-12xx v2 (Ivy Bridge, IBRS)
x86 IvyBridge Intel Xeon E3-12xx v2 (Ivy Bridge)
x86 Nehalem-IBRS Intel Core i7 9xx (Nehalem Core i7, IBRS update)
x86 Nehalem Intel Core i7 9xx (Nehalem Class Core i7)
x86 Opteron_G1 AMD Opteron 240 (Gen 1 Class Opteron)
x86 Opteron_G2 AMD Opteron 22xx (Gen 2 Class Opteron)
x86 Opteron_G3 AMD Opteron 23xx (Gen 3 Class Opteron)
x86 Opteron_G4 AMD Opteron 62xx class CPU
x86 Opteron_G5 AMD Opteron 63xx class CPU
x86 Penryn Intel Core 2 Duo P9xxx (Penryn Class Core 2)
x86 SandyBridge-IBRS Intel Xeon E312xx (Sandy Bridge, IBRS update)
x86 SandyBridge Intel Xeon E312xx (Sandy Bridge)
x86 Skylake-Client-IBRS Intel Core Processor (Skylake, IBRS)
x86 Skylake-Client Intel Core Processor (Skylake)
x86 Skylake-Server-IBRS Intel Xeon Processor (Skylake, IBRS)
x86 Skylake-Server Intel Xeon Processor (Skylake)
x86 Westmere-IBRS Westmere E56xx/L56xx/X56xx (IBRS update)
x86 Westmere Westmere E56xx/L56xx/X56xx (Nehalem-C)
x86 athlon QEMU Virtual CPU version 2.5+
x86 core2duo Intel(R) Core™2 Duo CPU T7700 @ 2.40GHz
x86 coreduo Genuine Intel(R) CPU T2600 @ 2.16GHz
x86 kvm32 Common 32-bit KVM processor
x86 kvm64 Common KVM processor
x86 n270 Intel(R) Atom™ CPU N270 @ 1.60GHz
x86 pentium
x86 pentium2
x86 pentium3
x86 phenom AMD Phenom™ 9550 Quad-Core Processor
x86 qemu32 QEMU Virtual CPU version 2.5+
x86 qemu64 QEMU Virtual CPU version 2.5+
x86 base base CPU model type with no features enabled
x86 host KVM processor with all supported host features (only available in KVM mode)
x86 max Enables all features supported by the accelerator in the current host


Plus there are some flags, for instruction sets.

I tested Win98 installation on Win qemu 4.2 and its working, so problem could be:
1) Old Qemu on Linux
2) Linux in general
3) Something with my script, but i started with minimal script so i really doubt it.

You can test it easily, right after Win98 install start, after end of text mode, in graphical part mouse simply works or not.

Some more data…

I find out that even fpr Qemu Dos machine with DOS and same config on Windows, is mouse dead.
I can also confirm that that not working Plug and Play bios component is not working with Qemu 4.2 Windows… sound is half working, i need some custom build as Qemu Dos to make it working. But building of such things in not my thing, i would be gratel, if someone can build it for me for Windows. Qemu is on git, patches are here:
https://www.vogons.org/viewtopic.php?p=817904#p817904

I have would other way how to should input be pass, i at least for not pass through machine. I was mention on Reddit for some Win95 machine, which has not USB at all:
-object input-linux,id=mouse,evdev=/dev/input/by-id/usb-093a_USB_OPTICAL_MOUSE-event-mouse </i> // Mouse
-object input-linux,id=kbd,evdev=/dev/input/by-id/usb-ZALMAN_ZM-K600S-event-kbd </i> //Keyboard

Magic names for paths could be found through:
ls /dev/input/by-id // or
ls /dev/input/by-path/

With this im able to mouse cursor at least once, but its super quick and after that is lost somewhere… It should be supported from Qemu 2.6 in theory.