1. 项目成果展示2026年4月17日有人在一台20世纪60年代的UNIVAC 1219B计算机上运行Minecraft服务器还展示了NES模拟器渲染出的《弹珠台》游戏第一帧画面、用“叠印”技术打印的自拍。此外还运行了OCaml程序、Web服务器、Curve25519 AES加密程序、BASIC解释器、ELIZA程序以及《俄勒冈之旅》《Wordle》《海战棋》等游戏。所有这些都是在主频仅250kHz、内存90KB的计算机上完成的该项目花了大约8个月时间源代码可在特定位置找到也可看TheScienceElf关于此项目的视频。2. UNIVAC是奇特机器UNIVAC 1219B在各方面对现代编程充满挑战如18位字长、类似反码运算、寄存器数量有限、内存容量小且分块等。它最初为海军设计用于读取雷达信号并指挥火炮世上仅存两台这台是唯一可正常运行的。此前程序用UNIVAC汇编语言手写现在打算实现C语言编译。3. 2025年VCF East上的邂逅2025年4月参加VCF East活动时有人第一次见到这台计算机当时Bill和Steven在运行演示程序。Duane、Bill和Steven为抢救和修复它付出大量努力。看到计算机后有人决定要运行超酷代码如NES模拟器和OCaml程序不禁追问能把硬件性能发挥到什么程度。4. 需要模拟器和汇编器首先需要UNIVAC汇编语言的汇编器和运行汇编程序的模拟器。多年前Duane用BASIC编写了汇编器用VB.NET编写了模拟器。VCF活动结束后TheScienceElf用Rust编写了新的汇编器和模拟器该模拟器速度极快对模糊测试必不可少虽硬件模拟不够精确但足够开始工作。5. 首次尝试wee作为C编译器有了模拟器后验证C编译器最快方法是用wee但效果差一个简单FizzBuzz程序占用约27000个字约占总内存67%计算前100行结果需一分钟显然无法实现运行真实复杂程序的目标。6. 采用RISC - V模拟器是关键要实现运行真实、大型且有趣程序和保持理智的目标需要使用真正编译器如LLVM或GCC要具备完整C标准库、软浮点和其他合法化处理、死代码消除和大小优化、支持其他语言等条件。但直接编译到UNIVAC行不通因为会违背保持理智的目标且现成程序可能出错。所以采用模拟GCC已支持的目标如RISC - V这种方法有一劳永逸、可进行模糊测试、能逐步获得成就感、二进制代码紧凑等优点虽模拟速度慢但能实现最佳空间效率。7. 构建工具链工具链流程为编写C代码用GCC编译成RISC - V代码将指令重新编码为适合UNIVAC的格式添加到模拟器源代码中汇编成磁带文件加载到机器上。编写RISC - V模拟器的UNIVAC汇编代码需良好工具支持如Emacs主模式、OCaml工具、差异模糊测试器、高效测试用例缩减器等。Claude Code无法编写UNIVAC汇编代码因为它无法理解UNIVAC的特殊之处但有人能编写敲出约1000行代码实现38条基础RISC - V指令。第一个C程序运行时出现小错误修复后所有C程序都能正常运行不过在真实计算机上渲染《弹珠台》第一帧需20小时需要大量优化。8. 让速度提升30倍UNIVAC模拟器记录运行时间可作为优化指标。主要关注优化模糊测试程序运行时间和NES演示程序运行时间。最重要的优化是将RISC - V指令重新编码为对UNIVAC最有效率的格式提前对立即数位进行解扰为指令分配操作码编号将一些操作嵌入指令中对于特殊指令如SRLI和SRAI可提前打包UNIVAC指令。那么经过这些优化后NES模拟器能否在可接受时间内运行呢