本文讲述了作者在尝试修复 Windows 3.1 图形驱动程序的过程中,深入了解了 VGA 硬件,并意外地生成了一些很酷的故障艺术。
作者喜欢复古科技,却不太擅长,于是选择在自己的 Asus Eee PC 1000H 上安装 Windows 3.11 for Workgroups,并尝试解决其在 1024x600 屏幕上显示效果不佳的问题。
Windows 3.x 默认使用 VGA 640x480 16 色模式,导致在 Eee PC 上显示效果很差且比例失调。作者试图使用自带的 Super VGA 驱动程序,但该驱动程序不支持 Intel GMA 950,且存在一些兼容性问题,会导致 Windows 无法启动。
文章详细介绍了 VGA 和 Super VGA 的历史、VBE(VESA BIOS 扩展)标准以及 Windows 3.x 在增强模式下与 MS-DOS 的交互方式。
此外,作者还分析了 SVGAPatch 工具,该工具通过修改 Super VGA 驱动程序以使用 VBE 来实现更高的分辨率和色彩深度,但同时也导致了与 DOS 提示符交互时的屏幕损坏问题。
为了解决这个问题,作者深入研究了 Windows 3.x 的显示驱动程序、虚拟显示设备(VDD)以及 SVGAPatch 的代码,并结合 DOSBox 等模拟器对问题进行了调试和分析。
作者发现,SVGAPatch 的补丁不完整,导致在从窗口化模式切换到全屏模式时,视频模式设置错误,从而导致屏幕损坏。
最终,作者通过修改驱动程序代码,解决了屏幕损坏问题,并成功实现了 Windows 3.1 在 Eee PC 上的 1024x600 256 色显示。
文章还对不同 VGA 适配器在 Windows 3.1 中的兼容性进行了测试,并总结了整个过程的经验和教训。
作者表示,尽管修复的驱动程序并不完美,但已比之前的 SVGAPatch 补丁有了很大的改进,并在未来会继续关注 PluMGMK/vbesvga.drv 等项目,以期获得更好的解决方案。