加载失败
这篇帖子是在讲 PlayStation/PS1(索尼 1994 年推出的第一代 PlayStation)硬件架构的长文,原帖来自 Copetti(一个长期写主机硬件拆解与图解文章的作者)并且后来被多次更新。评论把焦点放在 PS1 只有 2MB RAM 和 1MB VRAM、采用 MIPS 风格延迟槽、以及 Geometry Transformation Engine(GTE,一个负责 3D 几何变换的协处理器)这些容易让现代开发者吃惊的设计上。很多细节来自真实开发和移植经验,比如 memory aliasing、memory card bootloader 利用 BIOS 漏洞、以及在 PC 和模拟器中如何复现这些行为。整串讨论也延伸到 DuckStation(一个 PS1 模拟器)、PCSX-Redux(一个面向开发/调试的 PS1 模拟器)和 CRT 显示器上的原始观感,说明大家不仅在看历史,还在讨论怎样把这些老机器“正确地”跑起来。
评论里最热的技术点是 PS1 的 memory aliasing:同一块物理 RAM 会映射到多个地址区间,所以开发者能把某个地址位当作额外标志位来用。有人回忆在 Metal Gear Solid 的 PC 移植里,Konami 甚至用把指针和 0x80000000h/0xA0000000h 做位运算的方式记录 C4 炸弹是贴墙还是放地上。另一些人补充,这类做法在街机和其他主机也常见,到了 PC 端通常改成在访问前清掉标志位,或者用 mmap 把同一块内存映射到多个虚拟地址。还有人提到 PS1 memory card bootloader 的漏洞正是借助这种 wrap-around 现象,最终能绕过 copy protection 并改写 BIOS。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7]
不少评论从硬件限制解释 PS1 和 N64 的画面风格差异。PS1 只有 2MB RAM 和 1MB VRAM,还没有完善的 perspective-correct texture mapping,很多游戏靠手工技巧维持可玩性,于是出现了典型的低多边形抖动和 vertex wobble。N64 则被提到受限于很小的 texture cache、mipmap 压力和 cartridge 带来的资源约束,结果常见的是 blur 而不是 wobble。也有人把时间线拉到 PS2 和 GTA 3,认为即便硬件大幅提升,streaming、fragmentation 和内存管理仍然会逼开发者继续耍花招。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8] [来源9] [来源10] [来源11] [来源12] [来源13] [来源14]
另一组评论强调,PS1 和更早期的 8/16-bit 游戏本来就是给 CRT 看 的,不适合直接放到高分辨率 LCD 上。CRT 的模糊和扫描线会把硬边缘揉开,因此很多人觉得这些画面在原生电视上比在现代屏幕上自然得多。DuckStation(一个 PS1 模拟器)被多次推荐,因为它默认就有 CRT filter,还提供 PGXP geometry correction 来减轻高分辨率下的顶点抖动。更有意思的是,有人指出 CRT shader 往往在 4K HDR 屏上效果最好,因为高像素密度和亮度余量能把扫描线和暗部细节做得更像真电视。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7]
有评论提醒这篇文章最早其实是 2019 年发布的,之后又多次更新,所以这次并不是全新内容。有人认为标题至少该标上原始年份或最近一次修订年份,以免让读者误会;也有人觉得隔了五六年再看依然值得,因为这种信息密度高的内容很容易一遍记不住。讨论里顺带形成了对作者作品的集体好评:网页排版像一座维护得很好的 digital garden,图示和注释都很工整,甚至有人把它和 Fabien Sanglard(做游戏源码/引擎逆向分析的作者)的作品放在一起推荐。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8] [来源9] [来源10]
少数非常硬核的评论在聊 MIPS 风格 CPU 的时序怪癖。有人说“跳转后面的那条指令会先执行”一开始很反直觉,但熟练后就成了第二天性;另一些人拿 N64 的 multiply hazard 做对比,说明某些指令之间必须插入一条无关指令,否则 CPU 可能卡住。还有人提到 PS1 的 COP2/GTE(几何变换协处理器)指令会比程序计数器早一个指令周期开始执行,异常处理时必须手动把 PC 加 4 才不会重复执行。更离谱的是,有些游戏还会把 COP2 指令塞进 branch delay slot 里,既像是激进优化,也像是在挑战模拟器兼容性。
memory aliasing / memory mirroring: 同一块物理内存被多个地址范围映射,开发者能借此塞标志位或利用地址回绕。
CRT: 阴极射线管显示器,老主机原本的输出环境;模糊和扫描线会掩盖锯齿与抖动。
branch delay slot: MIPS 类 CPU 中,分支/跳转后紧跟的一条指令仍会先执行的时序规则。
GTE / COP2: PS1 的 Geometry Transformation Engine 协处理器,负责 3D 几何变换等图形计算。