快轉到主要內容

qemu-3dfx,給Windows XP/Windows 98虛擬機啟用3D加速

分類   資訊科技 虛擬機與容器技術
標籤   Windows QEMU
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

我們知道QEMU跑Windows虛擬機是很難獲得3D加速的,在虛擬機執行部份程式會出問題。

目前QEMU 8.0想取得3D加速,要嘛直通宿主機GPU,要嘛等待 max8rr8的Windows viogpu3d驅動的PR完成。

現在有一個微妙的專案出現了,那就是「qemu-3dfx」

本專案由KJ Liew維護,專為Windows XP或更舊版的Windows虛擬機打造,可以讓你在虛擬機玩老遊戲的時候獲得原生效能的3D加速。按照作者說法,這樣你就不用找奇怪的patch來在現代的作業系統玩老遊戲了。

(不過老實說,想要3D加速,Windows XP以前的舊遊戲在Linux Wine都能很好的執行,再不濟還有VirtualBox SoftGPU和DosBox 3dfx Voodoo嘛,qemu-3dfx屬實有點太複雜了。)

1. 系統需求
#

哪些系統可以作為宿主機?qemu-3dfx支援Linux、Windows、macOS系統。Android的Vectra VM軟體也有整合此技術。

虛擬機系統部份,建議使用Windows XP或更早的版本,包括Windows Me、Windows 2000、Windows 98、Windows 95等系統。至於要裝32位元還64位元就看你跑的遊戲而定。

遊戲的話,qemu-3dfx最高支援到DirectX 9.0。


本文Ivon使用Ubuntu LTS做為宿主機,並用Windows XP SP3 64bit當作虛擬機示範。請先 設定好QEMU/KVM

2. 編譯QEMU和Guest Wrapper
#

目前qemu-3dfx需要手動對QEMU打patch才可使用,作者要你捐款89.99美元才會提供現成執行檔。

所以我們這些窮鬼得按照 作者Github指示手動編譯自訂版本的QEMU。

  1. Ubuntu 22.04 LTS需要安裝以下前置套件
sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev git libglib2.0-dev libfdt-dev libpixman-1-dev libncurses5-dev libncursesw5-dev ninja-build libslirp-dev unzip mingw-w64-tools gcc-mingw-w64 libdigest-sha-perl gcc-mingw-w64-x86-64-win32
  1. 開始編譯QEMU 8.2.1
mkdir ~/myqemu && cd ~/myqemu

git clone https://github.com/kjliew/qemu-3dfx.git
cd qemu-3dfx
wget https://download.qemu.org/qemu-8.2.1.tar.xz
tar xf qemu-8.2.1.tar.xz
cd qemu-8.2.1
rsync -r ../qemu-0/hw/3dfx ../qemu-1/hw/mesa ./hw/
patch -p0 -i ../00-qemu82x-mesa-glide.patch
bash ../scripts/sign_commit

mkdir ../build && cd ../build
../qemu-8.2.1/configure --enable-slirp --enable-opengl --enable-debug
make -j4
  1. 最後得到自訂的qemu-system-x86_64執行檔,位於 ~/myqemu/qemu-3dfx/build/qemu-system-x86_64

  2. 接著編譯qemu-3dfx的Guest Wrappers。作者的編譯環境似乎是為Windows上的MingGW準備的,Ubuntu編譯不起來?

  3. 作者指定需要GCC 7.5.0並啟用DJGPP支援。參照另一個專案 andrewwutw/build-djgpp來編譯i686-pc-msdosdjgpp。

git clone https://github.com/andrewwutw/build-djgpp.git

cd build-djgpp

# 修改"scripts/7.5.0"和"setenv/setenv",把所有i586字串換成i686

sudo ./build-djgpp.sh 7.5.0
  1. 使用舊版GCC 7.5.0編譯Wrapper,針對Windows XP編譯
export DJGPP_PREFIX=/usr/local/djgpp/bin/i686-pc-msdosdjgpp
export PATH=/usr/local/djgpp/bin/i686-pc-msdosdjgpp/bin/:$PATH
export GCC_EXEC_PREFIX=/usr/local/djgpp/lib/gcc/

cd ~/myqemu/qemu-3dfx/wrappers/3dfx
mkdir build && cd build
bash ../../../scripts/conf_wrapper
make && make clean

cd ~/myqemu/qemu-3dfx/wrappers/mesa
mkdir build && cd build
bash ../../../scripts/conf_wrapper
make && make clean
  1. 之後檔案會放在~/myqemu/qemu-3dfx/wrappers/3dfx/build~/myqemu/qemu-3dfx/wrappers/mesa/build

3. Windows虛擬機安裝qemu-3dfx檔案
#

  1. 開啟Virt Manager,新增Windows XP虛擬機

2.在新增虛擬機之後,到Virt Manager的XML編輯欄位,修改<emulator></emulator>數值,填寫剛剛編譯的QEMU的路徑,使其使用自訂QEMU(AppArmor可能會擋自訂QEMU路徑,請參考 stackexchange答案修改權限)

  1. 或者使用命令行跑QEMU虛擬機:
# 建立虛擬硬碟
qemu-img create -f qcow2 WindowsXP.qcow2 64G

# 開機
"/home/user/myqemu/qemu-3dfx/build/qemu-system-x86_64" \
-name "Windows XP" \
-enable-kvm \
-machine pc -L pc-bios -nodefaults -machine hpet=off \
-rtc base=localtime,clock=host\
-cpu qemu64 -smp cores=4,threads=1,sockets=1 \
-m 4096 \
-drive id=root,format=raw,file=WindowsXP.qcow2 \
-drive id=drive1,media=cdrom,file="Windows XP ISO路徑" \
-boot c \
-device rtl8139,netdev=net0 \
-netdev user,id=net0,hostfwd=tcp::8080-:80,hostfwd=tcp::2222-:22 \
-display sdl -device VGA  \
-audiodev pa,id=snd0 -device AC97,audiodev=snd0  \
  1. 開機進入虛擬機。Windows XP能用的瀏覽器不多了,請用 Supermium上網吧。

  2. 手動安裝Guest Wrappers必要檔案到指定位置。

FXPTL.SYS放到%SystemRoot%\system32\drivers

GLIDE.DLL,、GLIDE2X.DLLGLIDE3X.DLL 放到%SystemRoot%\system32

OPENGL32.DLL放到遊戲程式所在的資料夾。

使用系統管理員身份執行INSTDRV.EXE

4. 測試qemu-3dfx效能
#

尚未親自測試

下面是原作者的測試結果,可見舊版的3DMark有吃到3D加速。

參考資料
#

相關文章

EmuGUI + QEMU,Windows系統安裝虛擬機軟體
分類   資訊科技 電腦軟體分享 虛擬機與容器技術
標籤   QEMU Windows
啟用巢狀Hyper-V,讓Windows 11 QEMU/KVM虛擬機支援WSL與WSA
分類   資訊科技 虛擬機與容器技術
標籤   Libvirt Windows Subsystem for Linux QEMU-KVM Windows Hyper-V
【圖解】如何在Linux系統安裝Windows 11虛擬機(QEMU/KVM) + 常用技巧
分類   資訊科技 虛擬機與容器技術
標籤   QEMU-KVM Windows Libvirt

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。