I do want to report that Rloews and xmsdisk work for virtual memory with kvm enabled in qemu, I was not able to enable this with on separate drive / hdd-image. This uses compatibility mode paging but did work for a program that required swap space (Mech commander). This reboots without error with kvm enabled (missing ddll's). Rloews 32 bit and 64 bit ram disks work and you can assign 1GB plus for 98se and 4GB+ for ram drives within qemu. I did also figure out shortcuts for restart and shutdown commands work when using vbemp driver and or kvm in 98se(when normal commands fail / FS check on reboot). Also vhost-user-gpu works for the vbemp driver for win98se. This uses a separate process for the GPU and gets really good results on games that work with the driver. I have not tried the 3dfx patch so far with this so far.
Using vhost user gpu in qemu:
/opt/qemu/vhost-user-gpu -s /run/user/1000/vg.sock & qemu-system-x86_64 -M q35 -chardev socket,id=vgpu,path=/run/user/1000/vg.sock -device vhost-user-gpu-pci,max_outputs=0,chardev=vgpu
building for linux example:
Assuming you have dsound.diff and sdlaudio_c.diff in /usr/local/src/ and the required packages to build qemu you can use this to build and patch on fedora for windows (adjust config as needed):
This assumes you have 4Gb od spare RAM to use for tempfs for the listed config, the end result will be in /usr/local/src/install and will be relocatable to opt or /usr/local/.. as needed. Make sure to change perms or setup udev rules (/dev/kvm) and use -L . to find the firmware when launching qemu afterwards . In linux it can be a pain to find and remove files built from source, so pointing to a single directory can be preferred. (still need to learn packaging)
Also assumes you have downloaded and installed the windows sdk and relocated files to be available within the specified folder.
Cross compile for windows on fedora, copy package list from qemus docker build files and adjust configure as needed. Feel free to use the provided one as an example, it does build & complete and work:
cd /usr/local/src/ ;
sudo mount -t tmpfs -o size=2048m tmpfs /usr/local/src/qemu-3dfx ;
sudo mount -t tmpfs -o size=1024m tmpfs /usr/local/src/install ;
sudo chown -R sw-maker:sw-maker qemu-3dfx ;
sudo chown -R sw-maker:sw-maker install ;
sudo chmod u+rwx qemu-3dfx ;
sudo chmod u+rwx install ;
git clone https://github.com/kjliew/qemu-3dfx.git ;
cd qemu-3dfx ;
curl -s https://download.qemu.org/qemu-4.2.1.tar.xz | tar -xJ -C . ;
cd qemu-4.2.1/ ;
rsync -r ../qemu-0/hw/3dfx ./hw/ ;
rsync -r ../qemu-1/hw/mesa ./hw/ ;
cd audio
cp /usr/local/src/dsound.diff . ;
cp /usr/local/src/sdlaudio_c.diff . ;
patch -i dsound.diff ;
patch -i sdlaudio_c.diff ;
cd .. ;
patch -p0 -i ../10-qemu411-mesa-glide.patch ;
mkdir ../build && cd ../build ;
../qemu-4.2.1/configure --cross-prefix=x86_64-w64-mingw32- --enable-guest-agent-msi --target-list="x86_64-softmmu,i386-softmmu" --enable-guest-agent --with-win-sdk=/usr/local/src/windows-kits/10 --mandir=/usr/local/src/install --datadir=/usr/local/src/install --docdir=/usr/local/src/install --firmwarepath=/usr/local/src/install --bindir=/usr/local/src/install --libdir=/usr/local/src/install --libexecdir=/usr/local/src/install --sysconfdir=/usr/local/src/install --localstatedir=/usr/local/src/install --prefix=/usr/local/src/install --enable-sdl-image --enable-iconv --disable-gtk --audio-drv-list=dsound,sdl --enable-docs --disable-membarrier --disable-pie --disable-capstone --with-coroutine=windows --disable-kvm --enable-whpx --disable-fdt && make install -j 4 ;
cd /usr/local/src/install ;
bash /home/sw-maker/mingw-copy-deps.sh /usr/x86_64-w64-mingw32/sys-root/mingw/bin/ qemu-system*.exe ;
tar -zcvf /home/sw-maker/qemu-3dfx/qemu-421-3dfx-no-gtk-QW64-"$(date "+%c").tar.gz" . ;
cd /usr/local/src/ ;
sudo umount install && sudo umount qemu-3dfx ;
echo done ;
Build for ubuntu/mint 19:
/usr/local/src/myqemu/qemu-3dfx/qemu-4.1.1/configure --target-list=x86_64-softmmu --enable-guest-agent --with-win-sdk=/usr/local/src/windows-kits/10 --enable-kvm --mandir=/dev/qemu --datadir=/dev/qemu --docdir=/dev/qemu --bindir=/dev/qemu --libdir=/dev/qemu --libexecdir=/dev/qemu --sysconfdir=/dev/qemu --localstatedir=/dev/qemu --prefix=/dev/qemu --with-coroutine=ucontext --enable-sdl-image --enable-iconv --disable-gtk --audio-drv-list=sdl,pa --disable-pie --disable-capstone --enable-opengl --disable-virglrenderer --iasl=/usr/bin/iasl --firmwarepath=/dev/qemu
-cross-prefix=x86_64-w64-mingw32- --enable-guest-agent-msi are for cross building from linux to windows and are not needed on linux. mingw-copy-deps.sh is on github, add the busybox command before the awk command if you have an awk version that does not work with the script (sometimes it works fine and you dont need to use busy box.
mingw-copy-deps.sh
https://gist.github.com/h0tw1r3/51084def72c9765a5d12
The first example is a script I made after going through it manually more than once to get it down pat, it goes pretty quickly on tempfs so I wanted to share the example how to. I used the advise on github for building/patching as the basis for the script.