Bill和Steven正在调试那台嗡嗡作响的铁柜子。Duane蹲在旁边,手里攥着一叠泛黄的电路图。没人想到,这台从约翰霍普金斯大学抢救出来的1960年代海军雷达计算机,八个月后会在《我的世界》里生成第一块草方块。

一、一台"反人类"的机器

打开网易新闻 查看精彩图片

UNIVAC 1219B的设计初衷很纯粹:读取雷达信号,指挥舰炮射击。它的硬件规格在今天看来近乎荒诞——250kHz主频,90KB内存,全部程序靠手工汇编编写。

打开网易新闻 查看精彩图片

更离谱的是它的交互方式。没有屏幕,只有一台电传打字机。你输入指令,它哒哒哒地打在纸上;计算机回应,也是哒哒哒地打在同一张纸上。标准输入和标准输出,物理上就是同一个卷轴。

全球仅存两台UNIVAC 1219。另一台在博物馆里沉睡,只有这台还能通电运转。

作者第一次亲眼见到它,是在2025年4月的VCF East复古电脑展。「那些闪烁的指示灯,打字机的咔嗒声,机油的气味……」他后来回忆,「我当时就知道,得在这上面跑点疯狂的东西。」

目标清单相当膨胀:NES模拟器。OCaml语言环境。以及——《我的世界》服务器。

二、400倍速的作弊器

第一步是造工具。Duane早年用BASIC写过一个汇编器,用VB.NET写过一个模拟器。但VB版的速度只有真实硬件的1/100——跑个简单程序要卡死。

TheScienceElf接手后,用Rust重写了整套工具。新模拟器比真机快400倍,比VB版快40000倍。

这个速度差距后来成了关键。因为接下来他们要干的事,需要天文数字般的试错次数。

三、把C语言塞进海军雷达

作者掏出了一个陈年项目:wee——一个极简C编译器。但让C代码在UNIVAC上运行,需要跨越三层地狱。

第一层:wee本身要能在UNIVAC上编译。这意味着先用汇编写一个极简C子集,再用这个子集去编译更完整的C编译器——经典的「自举」难题。

第二层:UNIVAC的指令集极其诡异。没有硬件乘法,没有除法,没有浮点运算。连条件跳转都有限制——某些情况下你只能往前跳,不能回头。

第三层:内存只有90KB。《我的世界》服务器的内存 footprint 经过暴力压缩后,依然要把数据结构拆成碎片,在磁带上换进换出。

他们用了模糊测试(fuzzing)来验证编译器正确性——自动生成随机C程序,对比真机和模拟器的输出。Rust模拟器的400倍速让这件事成为可能。否则等VB版跑完一轮测试,人都退休了。

打开网易新闻 查看精彩图片

四、当《我的世界》遇上电传打字机

最终的解决方案是一层荒谬的抽象。

UNIVAC 1219B作为计算核心,实际运行精简后的Minecraft服务器代码。但它没有图形输出能力——于是把画面数据编码后,通过电传打字机的接口,传给一台现代树莓派。

树莓派负责渲染,再把玩家的输入指令传回UNIVAC。两台机器的年龄差距超过半个世纪,却在同一个回路里协作。

第一帧NES《弹珠台》画面渲染成功时,团队拍了张照片。不是屏幕截图,是真的拍了一张照片——因为输出设备是纸。

他们还实现了「overstrike」自拍:让打字机在同一位置多次击打,用墨水的叠加密度模拟灰度。1960年代的硬件,输出2020年代的滤镜效果。

五、为什么这件事值得八个月

这不是怀旧,也不是炫技。作者的原话是:「我痴迷于在奇怪的地方运行代码,粉碎技术限制。」

但更深层的驱动力,可能是对「技术必然性」的反抗。我们习惯了硬件性能每两年翻倍的叙事,习惯了「旧设备只能进博物馆」的默认设定。UNIVAC 1219B项目证明:限制往往来自假设,而非物理边界。

90KB内存能跑《我的世界》——不是因为优化魔法,而是因为有人愿意重新定义「跑」的含义。画面可以外包,计算可以精简,交互可以重新设计。

全球只有一台能运行的UNIVAC 1219B。这个项目的全部代码已经开源,但没有人能复制这个 exact 的 setup。它是一次性的,不可规模化的,纯粹因执念而存在的工程艺术品。

八个月,三个人,一台250kHz的老爷机。最终产出的不是产品,而是一个问题的答案:如果彻底无视「合理」的边界,技术能走多远?

答案写在一张长长的打印纸卷上。哒哒哒。