Windows 98SE on Modern Hardware

Qemu 4 should be better audio:
https://www.reddit.com/r/VFIO/comments/b…audio_test_now/

I have tried install Win98 with Q35:
Its working but device manager is there same, on Windows with Qemu 4.2 mouse is working.
With Linux and 2.11 again no mouse, so its same.

I tried also Windows 98 networking on Windows, but i have some problem, im not able to ping to telnet nothing, it seems that NIC is not really working…

With new etdev move device to virtual machine its mouse actually working in Win Qemu 2.11, i tried it before through Anydesk… and it was the problem. So now i need to do same for machine with Pass through…
BTW @zir_blazer wrote that you not need 2 mice and keyboard, but its not working for me… so im glad that majority of work im doing remotely…

Ok we are in game. passthrougu video, keyboard and mouse is working:
-object input-linux,id=mouse,evdev=/dev/input/by-id/usb-093a_USB_OPTICAL_MOUSE-event-mouse <br />-object input-linux,id=kbd,evdev=/dev/input/by-id/usb-ZALMAN_ZM-K600S-event-kbd <br />
Know i will try to install Nvidia drivers and try some games…

Other hint, you are using virtualized no pass throught videocard, Windows 98 boot is freezing, unless you use step by step confirmation (all enable), its probably because graphics card… there some info that only disable Windows 98 boot logo should fix it (untested so far), with pass through its ok.

So far no luck to find working driver, because Geforce 6600LE PCI-E != Gefoce6600, i vaguely remember that i had this issues, but i dont remember solution… i tried nvidia drivers from 66 to 81 and nothing… So i maybe need some special driver PCI-E drivers, its force nv_agp.inf feels strange.
I need make pass through working and if would be good i will get better card…

Its not PCI-E issue, i got some some PCI-E cards working fine… That you need only AGP is urban legend.

Its seems that at least unofficial Nvidia 82 driver will support it http://www.tmeeco.eu/9X4EVER/GOODIES/NV8269/README.TXT but i dont used Geforce 7xxx to bypass this junk… I have some true Geforce 6600 and its to big for close the case + it would need be some ids changes etc… So i was like to make this one working.

Update: Official 81.98 seems to have support for it too… Now im doing some partitions backups, so it would take a while…

Regarding of Phils excesssive testing older driver Nvidia for Windows 98 is actually better…
https://www.youtube.com/watch?v=HRhm4aGNI3o

Will other drivers, i got this funny error card simply saying that it will never ever work:) Im not really sure, but something i my memory is saying me that this card, or very similar one i actually made to work with 6200 driver… but it maybe was Geforce 6200, it has also some funny like turbo cache variants.

2020-03-03 22.54.57-Fun.jpg

@ zir_blazer As only Linux guy here.
I just read whole Qemu changelog:
https://wiki.qemu.org/ChangeLog

Is strange there is not any info about Audio Win /Dos improvements and cahnge … and also only few info about Mac OS improvements, which im used to test…

What does in means, that changelog is incomplete and only show some highlights, or these are some unofficial features and builds?

Is still getting that code 11 or windows protection error, after first boot. I have tried all possible drivers, even unofficial one.

All drivers seems to be AGP ones, i dont really remember how Win98 its working with PCI-E… 440fx has PCI-E for sure and there are no PCI-E drivers, buts working on physical machines wtih PCI-E i have couple of them… So maybe i have simulated Q35 which actually has some, 440fx has only PCI only… I know that if get that windows protection error, is installation usually half dead, i will maybe install it again with Win98 cd with drivers pack or something like that.
After that i will try other cards etc… but its lots of work. I dont really remember which chipset i simulated with Unraid and it was on Z97 MB…

I tested Geforce 6600 LE PCIE with physical machine (VIA chipset - 4CoreDual-SATA2 MB its nice testing board with both AGP and PCI-E(Gen1 + Gen2 (thanks Agent for info), Gen3 not for sure) and Win98SE, its working fine with unofficial driver, so that is not working is QEMU / KVM issue…

For 4CoreDual-xxxx Gen2 GPUs work as well (up to 6970/GTX 580).
Dual GPU cards other than 79x0 GX2 may not work.
Sadly, no PCIe 3.0 devices support.

Thanks for info, i wasnt sure, my memory you know.

Otherwise im still trying to make work Win98 with Q35 emulation and old Geforce 6600… after i will try upgrade Qemu to lastest version… after that i will start with cards switching… i have some other Geforce 6 card, some Geforce 7300, some Ati X600/ X800… after that i will try pericom PCIE to PCI-E adapter… with PCI cards… and if it will fail… i will remove primary video card cooler and put PCI cards right into MB slot.

I also checked Proxmox someone lied, its same as Unraid /Vmware ESX, you need boot it as main OS, so its not really full alternative to KVM on desktop Linux of you choice.

Ok have found some old Unraid notes:

One was this link:
https://pyra-handheld.com/boards/threads…d-win-98.69815/

There is interesting thing:


Update: I tested it is working finnally im getting some resonable devices in device manager.

I have to test it but i remember something like that that old PCI bus trick, im sure that if would this thread on MSFN someone would already tell me to do it. , tried invite here MSFN and Vogons gurus… It theory it could fix network / usb controller detection. I had to do same trick on modern X58/X99 machines to make device detection working.

I also found picture of Unraid Win*/ settings for Geforce 7950 GT, which worked for me… i also backuped xmls with settings… You can see that i did it with Unraid 6.3.3
Important info that i440fx chipset so emulated with exactly i440-2.7 machine type.

Here you can see how nice Unraid gui was even 2-3 yeas ago, you can select all you want through comboboxx any mainframe command line relicts like with vanilla KVM… passthrough through checkboxes, that is really complete product.

[img]

UnraidSettings.png

[/img]

I have couple of XMls backup, but im not really sure, which is right one, there was lots of experiments, this one is marked as fully working, that XP text is related to just icon, Unraid has not ibuild dedicated Win98 icon, what abomination…


<domain type=‘kvm’ id=‘7’>
<name>Windows 98SE</name>
<uuid>6610eb20-5395-4150-2483-e6a1aac372df</uuid>
<metadata>
<vmtemplate xmlns=“unraid” name=“Windows XP” icon=“windowsxp.png” os=“windowsxp”/>
</metadata>
<memory unit=‘KiB’>524288</memory>
<currentMemory unit=‘KiB’>524288</currentMemory>
<memoryBacking>
<nosharepages/>
</memoryBacking>
<vcpu placement=‘static’>1</vcpu>
<cputune>
<vcpupin vcpu=‘0’ cpuset=‘14’/>
</cputune>
<resource>
<partition>/machine</partition>
</resource>
<os>
<type arch=‘x86_64’ machine=‘pc-i440fx-2.7’>hvm</type>
</os>
<features>
<acpi/>
<apic/>
</features>
<cpu mode=‘host-passthrough’>
<topology sockets=‘1’ cores=‘1’ threads=‘1’/>
</cpu>
<clock offset=‘localtime’>
<timer name=‘rtc’ tickpolicy=‘catchup’/>
<timer name=‘pit’ tickpolicy=‘delay’/>
<timer name=‘hpet’ present=‘no’/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/local/sbin/qemu</emulator>
<disk type=‘file’ device=‘cdrom’>
<driver name=‘qemu’ type=‘raw’/>
<source file=’/mnt/disk1/ISOs/Windows 98SE/windows98se.iso’/>
<backingStore/>
<target dev=‘hda’ bus=‘ide’/>
<readonly/>
<boot order=‘2’/>
<alias name=‘ide0-0-0’/>
<address type=‘drive’ controller=‘0’ bus=‘0’ target=‘0’ unit=‘0’/>
</disk>
<disk type=‘file’ device=‘cdrom’>
<driver name=‘qemu’ type=‘raw’/>
<source file=’/mnt/disk1/ISOs/virtio-win-0.1.126-2.iso’/>
<backingStore/>
<target dev=‘hdb’ bus=‘ide’/>
<readonly/>
<alias name=‘ide0-0-1’/>
<address type=‘drive’ controller=‘0’ bus=‘0’ target=‘0’ unit=‘1’/>
</disk>
<disk type=‘file’ device=‘disk’>
<driver name=‘qemu’ type=‘qcow2’ cache=‘writeback’/>
<source file=’/mnt/disk1/vdisk2/Win98/vdisk1.img’/>
<backingStore/>
<target dev=‘hdc’ bus=‘ide’/>
<boot order=‘1’/>
<alias name=‘ide0-1-0’/>
<address type=‘drive’ controller=‘0’ bus=‘1’ target=‘0’ unit=‘0’/>
</disk>
<controller type=‘usb’ index=‘0’ model=‘ich9-ehci1’>
<alias name=‘usb’/>
<address type=‘pci’ domain=‘0x0000’ bus=‘0x00’ slot=‘0x07’ function=‘0x7’/>
</controller>
<controller type=‘usb’ index=‘0’ model=‘ich9-uhci1’>
<alias name=‘usb’/>
<master startport=‘0’/>
<address type=‘pci’ domain=‘0x0000’ bus=‘0x00’ slot=‘0x07’ function=‘0x0’ multifunction=‘on’/>
</controller>
<controller type=‘usb’ index=‘0’ model=‘ich9-uhci2’>
<alias name=‘usb’/>
<master startport=‘2’/>
<address type=‘pci’ domain=‘0x0000’ bus=‘0x00’ slot=‘0x07’ function=‘0x1’/>
</controller>
<controller type=‘usb’ index=‘0’ model=‘ich9-uhci3’>
<alias name=‘usb’/>
<master startport=‘4’/>
<address type=‘pci’ domain=‘0x0000’ bus=‘0x00’ slot=‘0x07’ function=‘0x2’/>
</controller>
<controller type=‘pci’ index=‘0’ model=‘pci-root’>
<alias name=‘pci.0’/>
</controller>
<controller type=‘ide’ index=‘0’>
<alias name=‘ide’/>
<address type=‘pci’ domain=‘0x0000’ bus=‘0x00’ slot=‘0x01’ function=‘0x1’/>
</controller>
<controller type=‘virtio-serial’ index=‘0’>
<alias name=‘virtio-serial0’/>
<address type=‘pci’ domain=‘0x0000’ bus=‘0x00’ slot=‘0x03’ function=‘0x0’/>
</controller>
<interface type=‘bridge’>
<mac address=‘52:54:00:61:92:31’/>
<source bridge=‘br0’/>
<target dev=‘vnet0’/>
<model type=‘rtl8139’/>
<alias name=‘net0’/>
<address type=‘pci’ domain=‘0x0000’ bus=‘0x00’ slot=‘0x02’ function=‘0x0’/>
</interface>
<serial type=‘pty’>
<source path=’/dev/pts/0’/>
<target port=‘0’/>
<alias name=‘serial0’/>
</serial>
<console type=‘pty’ tty=’/dev/pts/0’>
<source path=’/dev/pts/0’/>
<target type=‘serial’ port=‘0’/>
<alias name=‘serial0’/>
</console>
<channel type=‘unix’>
<source mode=‘bind’ path=’/var/lib/libvirt/qemu/channel/target/domain-7-Windows 98SE/org.qemu.guest_agent.0’/>
<target type=‘virtio’ name=‘org.qemu.guest_agent.0’ state=‘disconnected’/>
<alias name=‘channel0’/>
<address type=‘virtio-serial’ controller=‘0’ bus=‘0’ port=‘1’/>
</channel>
<input type=‘mouse’ bus=‘ps2’>
<alias name=‘input0’/>
</input>
<input type=‘keyboard’ bus=‘ps2’>
<alias name=‘input1’/>
</input>
<hostdev mode=‘subsystem’ type=‘pci’ managed=‘yes’ xvga=‘yes’>
<driver name=‘vfio’/>
<source>
<address domain=‘0x0000’ bus=‘0x02’ slot=‘0x00’ function=‘0x0’/>
</source>
<alias name=‘hostdev0’/>
<address type=‘pci’ domain=‘0x0000’ bus=‘0x00’ slot=‘0x04’ function=‘0x0’/>
</hostdev>
<hostdev mode=‘subsystem’ type=‘usb’ managed=‘no’>
<source>
<vendor id=‘0x13ba’/>
<product id=‘0x0018’/>
<address bus=‘3’ device=‘3’/>
</source>
<alias name=‘hostdev1’/>
<address type=‘usb’ bus=‘0’ port=‘1’/>
</hostdev>
<hostdev mode=‘subsystem’ type=‘usb’ managed=‘no’>
<source>
<vendor id=‘0x1b3f’/>
<product id=‘0x2008’/>
<address bus=‘3’ device=‘2’/>
</source>
<alias name=‘hostdev2’/>
<address type=‘usb’ bus=‘0’ port=‘2’/>
</hostdev>
<memballoon model=‘virtio’>
<alias name=‘balloon0’/>
<address type=‘pci’ domain=‘0x0000’ bus=‘0x00’ slot=‘0x05’ function=‘0x0’/>
</memballoon>
</devices>
<seclabel type=‘none’ model=‘none’/>
<seclabel type=‘dynamic’ model=‘dac’ relabel=‘yes’>
<label>+0:+100</label>
<imagelabel>+0:+100</imagelabel>
</seclabel>
</domain>

Ok, i now at least have USB controller within Windows 98, i didnt tested passthrough, because i already have other input options, but its here, so i theory you can make USB LAN / Sound cards working…

I got full networking working, so 1 slot saved:
- with nee working bios\pc… rtl8139 is actually discovered… i had to try couple of drivers which dont worked, but i found right one here:
http://www.claunia.com/qemu/drivers/index.html

Magic Qemu line for Windows (you need Tap networking driver installed - its part of OpenVPN package… you normal lan connection and tap adapter needs to be bridged… and tap driver connect has to be renamed to “TAP”):
-netdev tap,id=mynet0,ifname=TAP -device rtl8139,netdev=mynet0 //mynet0 is could be changed to any string what you want

Now i need same line for Linux, or whole Linux networking help…

I still not give up on making Q35 working, but its annoying… because not fully working disk controller you can use data on ISO… so you have to sideload data through disk images, or through other machines.

Otherwise lots of people has problem with setup of multiple cdrom images or disks etc, these lines could help, devices are indexed from 0 to 3:


-hda HDDs\Win98System2-8GB-440.vmdk ^
-hdb HDDs\Win-Data-28G.vmdk ^
-drive file=Isos\Win98SE-ENG.iso,index=2,media=cdrom ^
-drive file=Isos\Win98-Data-and-Drivers-CD2.iso,index=3,media=cdrom ^


Other thing that you would say that disk traffic on Windows 98 is small, what is true, but still there is big difference between install Win98 to image on SSD and on HDD, because Win98 system is small, i would highly recommend to use SSD and you can have second data/games/p*orn disk on HDD.

BTW some question to disk sharing between multiple machines? Virt-manager has checkbox for it, how to do it with vanilla Qemu?

Numpad with Win98 is some as in Dos, is not really working, i dunno way in Qemu its XP+ thing…

I finaly made Linux networking KVM working for old not virtou OSes. Magic lines is this, im sure that some linux guys would know something better.
But with this i can finally ping the internet from Win98 virtual… because with slipper i could only use telnet and do some browsing.
-net nic,model=rtl8139,macaddr=00:01:04:03:05:01 -net tap,ifname=tap0

If is someone interested in DOS/Win98 networking and filesharing with more modern OSes, i done lots of research about it:
https://www.vogons.org/viewtopic.php?f=61&t=61823

About Q35 i managed to start installation, but i dont freeze multiple times as first setup screen - no input at least without pass through on Windows.

To get even there is not easy you need to setup some boot install floppy, or have dos etc… because even when i force ide drive… standard enhanced windows boot cd, wasnt able to find drive and load driver, that is funny because its already running from it… but ok.

So for Q35 chipset probably only way is sideload (i will it with 440 or one image for physical machine) or some very special machine type…
I will try it once more on Linux with Pass through i we will know, to now where we are…

BTW will will get pass through working and there could be some more fun and its migration of physical machine image to qemu, im doing it for years, sucess rate is very high, but sometimes its tooking lots of time… Wiil Win98, we will only need clean registry to boot to safe mode, clean device manager and detect everything again, if it will not boot into safe mode right away.

I managed boot existing 440fx instalation switched to Q35 in safe mode install PCI bus and boot normal mode… some system devices were detected fine, but i after reboot i got Windows system protection error… so you probably can make it working if you will cherry pick one driver after another and rebooting to find out which one is bad one… Rloew Sata / Ahci drivers are now free storage should be problem.

I won, we won, its working!

With right PCI bus driver, i finally booted fine with Geforce 6 driver installed and i can play Quake 3 demo in full details in 1600x1200 at 90 FPS (it has FPS cap).
Everything is very fast, look at disk performance, fps framerate is actually more stable than with XP or Win7 on same machine KVM. SB16 emulation sound in quite is nice, no stuterring etc. But depends on game, i tried Unreal Tournamend demo and there is big lag, but im emulation only SB16, which even admits…that its emulation is not finnal and are other sound cards to test
Im not feel any lag etc. Virtualized networki is fully working.

We are at the start, it could only better. Maybe easily just with newer about of distro channel Qemu, 2.11 is quite old… We now that nGLide is working even in Win98, so this really much better that any other Windows 98 emulation options.
There is lots videocards and mbs and lots tunning option to test, but its already working nicelly. its far best Win98 virtualization option so far.

ItsWorking-RuThaN-Win98-3D-Api-VideocardPassthroug2.png


@ Picture style use Agents007 copyright:) Thx.