新晚安短信 - Day 2

每日 GRE

昨天的答案是 C,sequester 有隔绝的意思,就是保留二氧化碳。eradicate 消除,但树木只是吸收二氧化碳;regulate 虽然看起来挺对的,但和下文不是很接的上。反正仔细想想确实应该选 C,但可能不认识这个词(

When the United States government created the Post Office at the founding of the republic, it didn’t invite rival postal firms to compete; in fact, it created a monopoly. That monopoly, however, was (i)_____ free expression because of policies Congress adopted, which (ii)_____ the circulation of newspapers irrespective of their viewpoint and spread postal service throughout the country.
Blank(i)
A. conducive to
B. threatened by
C. dependent on

Blank(ii)
D. subsidized
E. limited
F. trivialized

这题可能不是很难,但我把某个词的意思理解错了,导致完全不会做(

昨天显然是不太清醒,居然把阿凡达归入了奇幻(虽然我确实认为它更接近奇幻而不是科幻),而且没有提到科幻。科幻嘛,当然不得不提《三体》,我在初中看完了,说是彻底改变了我的世界观也不为过。不过三体动画我只看了两集,后来因为🐏了、口碑断崖和期末考就弃坑了,所以还没看到后面备受吐槽的某些制作问题,只是感觉节奏很慢。新的电视剧则看了 10 集,某些改编倒也还说得过去,不过剧情展开慢就很难令人满意。到第 10 集才第一次三体游戏,我还期待秦始皇和「旷野大计算」呢。

考古

我从小对古老的软件很感兴趣,通常称为 vintage,在小学初中可能就玩玩 DOS、Windows 95 之类的,后来感到真机的硬件很难兼容上古 OS,尤其是显卡,就转向了虚拟化和仿真。现在我很清楚,像是 VMWare 和 VirtualBox 对于上古的 Windows(比如 Windows XP 前的)的支持也相当有限,而 DOSBox 则更加关注游戏,最终我用的最适合考古的仿真就是 PCem 了。PCem 可以完全仿真 8086 计算机系统,从 8086 到奔腾,包括各种古老的显卡和声卡。我用 PCem 写了一篇 Turbo Pascal 历史的文章:https://zhzh2001.bitbucket.io/2017/08/12/history-of-turbo-pascal-v2/,大概也标志着我软件考古的最高峰了。后来还尝试写过 Word 历史,但最终因为文档不足等原因弃坑了。这些都是高中的黑历史了(

然而现在 PCem 的开发接近停滞,而且我也了解到很多目前无法仿真的硬件。一类是「较新」的 CPU,由于仿真的开销很大,即使目前最强的 CPU 以纯仿真形式最多只能到 2000 年左右,这个「仿真鸿沟」达到了 20 年以上。另一类则是「特殊」的硬件,其中最常见的就是真正的 GPU 了,GPU 逆向的难度显然就很大了。你可以比较容易找到 x86 ISA 乃至架构文档,但很难找到各厂商专有的 GPU 架构文档(当然现在 AMD 的 GPU ISA 还是比较公开的,此时应有 AMD YES)。下图是史诗级的 Intel x86 文档,「汇编与接口」课的常客。

Anyway,加上某些好奇心,比如 WolfQuest 2.5 中的最低要求 GeForce 2 是什么东西,让我掉进了显卡考古的巨坑。后来学图形学,更是让我进一步深入理解。

显卡历史

不太清楚这些是什么上古的显卡?没关系,我们有著名的贴吧显卡天梯图(部分):

注意图的左边第一列是 Intel 集显,第二三列是 NVIDIA 独显,右边第一二列是 ATI(还没被 AMD 收购呢)独显,第三列则是 NVIDIA/ATI 集显。

两个延续至今的显卡品牌,NVIDIA GeForce 和 ATI/AMD Radeon 就是在千禧年创立的,都达到了当时最先进的 DirectX 7 的要求,支持硬件 T&L;NVIDIA 借助 GeForce 创造了 GPU 一词,而 Radeon 也紧随其后。这是一段非常精彩的历史,从 2000 年前的百家争鸣,到千禧年后的两强争霸,不过其实早就有很多人讲过了。当年我就是看「极客湾」的考古视频(BV1YJ411h7aY)了解到的。这个系列的两个前传视频还介绍了 3Dfx 的崛起和衰落。

说到显卡,也不得不提图形 API,OpenGL/Vulkan 和 Direct3D,D3D 是 DX 中最重要、最活跃的部分。和 CPU x86 大统一不同,各家的显卡可以采用完全不同的架构和 ISA,因此一个统一的硬件抽象层就必不可少。OpenGL 是跨平台的,在早年乘 Quake 东风在游戏界也风靡一时,专业软件也都用 OpenGL(比如 Blender),不过由于开放标准的缘故,没能很好跟上硬件发展潮流,最终在游戏界中被 D3D 所取代。D3D 虽然在早年有效率和可用性问题,但毕竟是微软亲儿子,随着不断的改进,在 DX9 时代全面超越也是必然的了。Vulkan 作为 OpenGL 的直接继任者(GLNext),和 DX12 一样是底层 API。

PCGaming Wiki 收录了很多知名的 PC 游戏,从中可以看出各 API 的流行程度:支持 DX9 的游戏有 2348 个,DX10 只有 205 个,DX11 有 3205 个,DX12 只有 284 个,OpenGL 有 1458 个,Vulkan 有 183 个。可见 DX9 和 DX11 还是目前的主流,OpenGL 也不可小觑。事实上 DX 版本一般与 Windows 版本相关,例如 XP 最高支持 DX 9.0c,因此很多游戏还得考虑到 XP 用户而支持 DX9;DX10 大概和 Vista 一起烂掉了,独占的比较少;DX11 则大概与 Windows 7 同时期,这又是一个流行的系统,而且 DX12 很难驯化,因此 DX11 也是目前的主流。

D3D 的各版本主要功能见下表:

详见 Wikipedia:https://en.m.wikipedia.org/wiki/Direct3D

D3D 的兼容情况也比较复杂,需要综合考虑操作系统支持、显卡驱动支持的操作系统、驱动 DDI 版本、具体游戏支持等。DDI 只表示显卡驱动实现的 D3D 版本,并不一定支持所有特性。具体的 DDI 版本可以运行 dxdiag 查看。而 DX7 理论可以支持所有 DDI,DX8 理论支持 DDI>=6,DX9 支持 DDI>=7,DX10 没有向下兼容,DX11 支持 FL9,DX12 支持 FL11,大概情况是这样,非常复杂。

说 DX 还不能离开最流行的 DX 跑分软件——3DMark。它从一开始就瞄准了 DX 评测(当然后来也支持 OpenGL 和 Vulkan),从 1999 年 DX6 开始,从固定管线到可编程着色器再到统一架构,一直伴随着 PC 玩家,是公认的合成理论测试之一。更好的是,除了现在的 3DMark 需要付费购买(当然免费版也可以用),之前的历史版本都能在官网免费下载,对于考古实在是太友好了!于是为了支持 Futuremark,我在打折的时候入了一份现在的 3DMark 高级版(不过很可惜发现需要至少 4G 内存才能运行)。

考古收藏

除了理论研究之外,我还买了一些古董显卡和对应的测试平台,来进一步体会真正的考古。在保证 DX 版本多样性的前提下,我还尽量追求较低成本考古,尽量选择当时存量较大的低端显卡,还能降低故障率。

在选择测试平台时有一个重要的考虑,需要支持 AGP Universal 插槽。最早的显卡和声卡是 ISA 插槽的(ISA 的历史大概可以追溯到著名的 Altair 8800),后来转向了更紧凑的 PCI 插槽,然后在 Intel 大力鼓吹下出现了显卡专用的 AGP 插槽,这在 2000 年前后非常流行。AGP 有 1x、2x、4x、8x 等速度,其中 1x、2x 的电压和 4x、8x 是不同的,只有 AGP Universal 才能兼容各个时期的 AGP 显卡。具体的兼容性见下表:

具体可以参考 http://www.playtool.com/pages/agpcompat/agp.html,这个网站还有很多有趣的文章,比如挪用 PC 电源。

AGP 很快就被历史淘汰了,PCIe 是目前的主流。因此我费了很大的劲,在🐟上找了一块清华同方板 U,用的是 SiS 650GX 芯片组(板载 SiS 315 改的集显,大概相当于 MX200),支持 AGP Universal,CPU 是 P4 2.8 GHz Northwood,应该也够用了。

这是我目前收的能用的古董显卡:左上是 NVIDIA 第一张成功的显卡,Riva 128 4MB,我认为很有收藏意义(更早的 NV1 实在很难找了),支持 DX5;左下是早年的低端神卡,GeForce 2 MX400 64MB,虽然性能不如 MX440,知名度也不高,但可以媲美初代 GeForce 256,支持 DX7;右上是 Radeon 9250,也不如 Radeon 9550 有名,但确实便宜,支持 DX8.1(SM1.4?);右下则是臭名昭著的 GeForce FX 5200,双 128(128MB 128bit)但显存有些问题,支持 DX9(SM2.0)。

中间那块是 PCI 声卡,因为集成声卡似乎坏了。

事实上,我还有后续「低端战未来」考古系列,但考虑到我连前面这几块都还没玩够(目标是写一个支持各种显卡的游戏!),就先不发了。相信看到这里的人已经不多了吧。对了,我还想入 Riva TNT2 M64。

晚安!