Ryzen安装Win95/98虚拟机弹框问题及解决方法

TL;DR:

https://communities.vmware.com/message/2818055#2818055

1 问题

AMD Ryzen 7 1700X,B350主板,Win7 x64,VMWare 12.5+。
运行Win98虚拟机时会弹出如下对话框,提示SHELL32.dll错误:


链接文件 SHELL32.DLL
到不存在的输出 GDI32.DLL: 。

忽略后会弹出如下对话框,提示Explorer.exe错误:


且错误原因是固定的,不随重启改变:

EXPLORER 在 0167:0040a067 的模块 EXPLORER.EXE 中导致例外 6d007eH.

新建虚拟机直接安装Win98也会出同样的错误,连安装都完不成:


Win95更是直接无法进入图形界面,在Win95徽标消失后会显示:


While initializing device IOS:
Windows protection error. You need to restart your computer.

2 尝试解决

2.1 换用VirtualBox

问题依旧。
由于VMWare提供Windows 9x虚拟机的Tools,而VirtualBox不提供,因此之后的尝试都是基于VMWare的。

2.2 升级VMWare

升级到14.x,无效。

2.3 使用专为Ryzen设计的Windows

也就是Win10(滑稽)。
全新安装Win10 x64以及VMware,问题依旧。

2.4 更改虚拟机兼容性

原来是VMWare 9.x虚拟机,升级到14.x,无效。

2.5 升级宿主机BIOS

这是网上最常见的说法了,将微码升级到AGESA 1.0.0.6或更高,以修复Ryzen系列的VME指令集bug
然而我的机器刚买来就有足够新的BIOS(1.0.0.6),之后又升级过几次,问题长期未能消失。
网上的评论有两种说法:

  1. 农企放了个假补丁,欺骗评测网站。
    反正我是不敢以最坏的恶意,去想象这些商业公司的商业行为。
  2. 农企的AGESA 1.0.0.6是以源码形式发布的,主板厂商可以全部或部分加入BIOS,有些没良心的主板厂商没把整个AGESA 1.0.0.6编译进去。
    这个嘛。。。我的微星B350M Mortar算是中枪了,别人的华擎就没问题 摔瓶子.jpg,我又找不到那个帖子了,不确定是不是没问题哈。

2.5 在虚拟机配置文件中屏蔽VME功能

其原理是强行设置CPUID指令返回值中的指定位,使客户机操作系统认定其CPU拥有/没有对指定指令集的支持。
这里要屏蔽VME指令集,对应的位置是:

  • cpuid(EAX=1)时的EDX第1位(详解),以及
  • cpuid(EAX=80000001h)时的EDX第1位(详解

对于VMWare虚拟机,要在vmx文件中加入这样一行:

cpuid.1.edx = "----:----:----:----:----:----:----:--0-"

然而……不管用。
后来又对参数格式做了几种猜测,并加入到vmx文件中:

cpuid.0.edx = "----:----:----:----:----:----:----:--0-"
cpuid.0.edx.amd = "----:----:----:----:----:----:----:--0-"
cpuid.1.edx = "----:----:----:----:----:----:----:--0-"
cpuid.1.edx.amd = "----:----:----:----:----:----:----:--0-"
cpuid.80000000.edx = "----:----:----:----:----:----:----:--0-"
cpuid.80000000.edx.amd = "----:----:----:----:----:----:----:--0-"
cpuid.80000001.edx = "----:----:----:----:----:----:----:--0-"
cpuid.80000001.edx.amd = "----:----:----:----:----:----:----:--0-"

然而……也都不管用。

对于VirtualBox虚拟机,也有类似的操作:

然而……我没测试。

3 弹框的回避方法

  1. 进安全模式。

  2. 系统属性-性能-文件系统-疑难解答,勾选“禁用32位保护模式的磁盘驱动程序”。


  3. 保存,重启到正常模式。

  4. 如果需要CD/DVD支持,可以启用DOS的CD/DVD支持,例如oakcdrom.sys
    confog.sys中追加一行device=c:\oakcdrom.sys /d:oemcdrom
    autoexec.bat中追加或插入一行mscdex.exe /d:oemcdrom
    重启即可。

4 遗留的问题

上述方法只是回避了Ryzen系列处理器中的bug,随便测试一下就会发现一堆问题,包括但不限于:
设备管理器里有一堆叹号,无法修复:



CD音频不能播放,导致《铁甲风暴》只有音效和过场动画伴音,没有BGM:


过场动画的伴音没问题

游戏内的音效也没问题,但是基于CD音轨的BGM就播放不出来

32位保护模式的程序是无法完全回避的:


《傲世三国》英文版,完全打不开

5 备用方案

指令集Bug,通过微码修复失败后,剩下能做的无非就是以下两种方案:

5.1 换机器

  • 软路由
    配置G3258的初衷就包括运行单/双核优化的程序,当时想到的是《星际争霸2》,实际上用Libvirt+KVM在Linux环境下开个Win虚拟机也是可行的。但是:
    • 虚拟声卡型号很有可能发生变化。
      查了一下发现KVM支持AC97HD Audio等主流声卡标准,而对更早期声卡的模拟则有创新Sound Blaster 16Ensoniq AudioPCI ES1370等。
    • 键鼠输入和屏幕响应都可能有较高的延迟。
      之前做OpenStack的时候用过NoVNC,似乎不成问题。但是SSH+virt-manager/virt-viewer的组合是有较高延迟的,不适用于游戏。
  • X3 720+790GX的老平台
    运行虚拟机也没问题,并且能够开启SVM虚拟化特性。但是:
    • 毕竟单核性能落后于时代,另外需要确认有没有NPT和IOMMU 有NPT,没有IOMMU,详情戳这里
    • 这台主机目前也用作Linux文件服务器,同样要走上面的Libvirt+KVM的方案。
  • A8 7650K+A88XM
    想要体验推土机系列,于是从某鱼收来的板U套装。
    需要先装机再慢慢测试。
  • Zen+/Ryzen 2000以及更新架构的AMD平台
    我想问R3 2200G/R5 2400G还有这个问题吗?毕竟当年羿龙1代 xx00系列的TLB Bug是通过修改硬件,重新发布xx50系列解决的。而且Reddit上还真有人这么问了
    问题依然存在,贴吧已经有人踩雷。不买了。
    2020-1-18补充:Zen 2/Ryzen 3000系列仍然有这个问题,看这里

5.2 模拟

我个人区分模拟(emulation)和虚拟(virtualization)的一条硬性标准是:

另外还有一些参考标准:

  • 模拟的宿主机和客户机通常是不同架构的,例如PC模拟手机/游戏主机/掌机;而虚拟一定是相同架构的。
  • 在客户机内同样流畅地运行同一个程序需要消耗的资源,客户机实际消耗 < 虚拟机Hypervisor << 模拟器。

QEMU、Bochs、DOSBox等都是用PC或其他平台模拟老PC的软件。

QEMU

待补完

Bochs

待补完
目前已知Bochs支持的最大硬盘容量为16383(C) * 16(H) * 63(S) * 512 == 8455200768字节,约8063.5MB。所以我原有的8GiB镜像就没法直接拿来用了,就差这么一点。

DOSBox

划重点:DOS,动态指令转换,老显卡/声卡,Modem/IPX/TCP/IP,老游戏。
没提到PE内核的Windows 3.x/4.x。
详见:用DOSBox运行老游戏

新PC - DOSBox - Windows 98

可以参考:DosBox装Windows98
具体思路是把硬盘和必要的软盘启动盘都做成镜像,而不使用DOSBox原有的挂载文件夹的方式,以满足操作系统修改MBR/PBR等信息的需求。但是用镜像的话就也和Bochs一样,硬盘大小受CHS寻址方式的限制。

同时装Win95也有人踩过坑,有时间再慢慢啃:
A Complete Guide to Install Windows 95 on DOSBox
Installing Windows 95 in DOSBox

PCem

逛Windows98吧发现的,真的是“老机器模拟器”了,能够模拟一些Socket 7(321)/Super Socket 7及更老的CPU/主板,以及Voodoo显卡等设备。目前仍在更新,有机会可以尝试一下,不过还是先把上面的CHS问题搞掉吧
官网:https://pcem-emulator.co.uk/
一些必要的ROMs:https://github.com/BaRRaKudaRain/PCem-ROMs
86Box,PCem的一个非官方Build:https://github.com/86Box/86Box

5.3 继续打补丁

2020-1-18更新:
https://msfn.org/board/topic/177951-important-for-anyone-trying-to-run-windows-9x-under-a-ryzen-based-virtual-machine/
这里在介绍完上面的方法后,还提到:

(Disable the 32-bit drivers...), and then install the 48-bit LBA fix, as well as all of the previously released Windows 98 updates. Then, you should be able to re-enable the 32 bit drivers.

重新启用32位驱动应当能够解决上面的遗留问题,当然前提是Win98的更新里已经修复了相应的问题。我一直没有给这些老系统手动打补丁的习惯,所以之前装好的Win98虚拟机就一直带着这个问题。目前已经找了一些48-bit LBA fix,而Win98补丁我准备用Unofficial SP 3.64解决。有空时再测试。
帖子是2018年11月的,比本文撰写时间还早一些,主要还是问题不容易搜索。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容