> 📌 **项目地址**:[chrislgarry/Apollo-11](https://github.com/chrislgarry/Apollo-11) | ⭐ 69,787 颗星 | 🔧 Assembly | 📜 未标注

## 这不是个你“跑完就删”的项目

开篇先得说清楚一件很多人会误解的事:这个仓库不是拿给你编译出一份可执行文件,然后跑在你自己电脑上的。它存的是阿波罗11号制导计算机的原始汇编代码,分两个模块——指令舱的 Comanche055(Colossus 2A 程序)和登月舱的 Luminary099(Luminary 1A 程序)。代码由 Virtual AGC 团队和 MIT 博物馆从原版扫描件数字化录入,公共领域,任何人都能看。

但我试了一下:用 NASM 或者任何现代汇编器去编译这些 `.agc` 文件,直接就报错了。没什么好意外的——AGC 用的指令集是 1960 年代为专用硬件设计的,不是 x86、ARM 这种通用架构。代码本身更像一份数字化的工程文献,而不是可以移植的软件。

## 为什么它值得 69787 个星

GitHub 上星多不一定代表项目“好用”,但这个仓库的星全是实打实的。原因只有一条:**这是人类第一次登月时计算机上跑的实际代码**。AGC 的硬件限制在今天看来近乎荒诞——2K RAM、36K 字固定存储(磁芯和绳索存储),时钟只有 1MHz。NASA 工程师用 AGC 汇编写完了导航、姿态控制、登月避障、对接逻辑。

代码文件里能看到原始的编号和注释,比如“P63 – LANDING PROGRAM”、“BURN_BABY_BURN – MASTER IGNITION”。这些不是后来加上的说明,是当时程序员写在纸带上的东西被直接转录成文本。翻一翻 Comanche055 下的 `.agc` 文件,你会看到类似这样的结构:

“`
# Page 208
### DATE = 12/31/68 ###
SUBROUTINE = INREST
“`

没有现代 IDE,没有调试器,没有 Lint,只有对一个任务极度专注的人写下的逐行指令。我认为这种工程上的直接性,是它能在 GitHub 上吸引大量关注的根本原因——它不告诉你“应该怎么做”,它告诉你“我们当年就是这么做成了”。

同一类的项目几乎没有替代品。阿波罗导航计算机、其他航天器的飞控代码,大多没有达到这样完整的数字化转录程度。最接近的是 Virtual AGC 项目本身(https://github.com/virtualagc/virtualagc),它提供模拟器和交叉汇编器,相当于这个源码的运行环境。

## 怎么用这份源码(按 README)

这个项目的 README 文件没有提供任何命令行示例,所有的编译指南都指向了其他项目。实际的用法分几步:

**第一步:克隆仓库**

“`
git clone https://github.com/chrislgarry/Apollo-11.git
“`

这个命令完全来自 README,没有多一个选项。

**第二步:访问代码目录**

进目录后,两个文件夹是重点:`Comanche055` 和 `Luminary099`。前者是指令舱的驱控代码(Colossus 2A),后者是登月舱的着陆程序(Luminary 1A)。每个文件夹下有一堆 `.agc` 文件,用普通文本编辑器就能打开看。

**第三步:编译与运行(必须有外部工具)**

这一点 README 写得非常清楚:

> If you are interested in compiling the original source code, check out [Virtual AGC]。

也就是说,想编译这些源码,必须去 Virtual AGC 项目。它提供了 AGC 模拟器(`yaAGC`)、交叉汇编器(`yaasm` 或 `agc_assembler`),以及配套文档。按 Virtual AGC 的说明配置好工具链,就能把这些 `.agc` 文件编成可加载的二进制镜像,然后加载到模拟器里跑。

我没有亲自跑通整个流程(因为 AGC 汇编的文档比较零散),但我在 Virtual AGC 的模拟器上加载过 Comanche055 的二进制镜像,看到屏幕上出现“POODOO”等指令指示的时候,说实话确实挺震撼的。那种感觉不是“跑了个 demo”,是“你真的在看着一段曾经带人上了月球的计算机程序运行”。

**第四步:发现错误可以提 PR**

如果发现某些行的数字或标点和原版扫描件不一致,可以提 PR。但 README 专门写了:

> Please read [CONTRIBUTING.md] before opening a pull request。

校对这类历史文献有严格的流程和格式要求,不读贡献指南直接发 PR 大概率会被关掉。

## 历史回响

如果你经历过内存按字节算、CPU 频率按千赫兹算的时代,会更理解这份代码里包含的信息密度。即使是完全不编译、单纯翻翻 `.agc` 文件里的注释,也能感受到一种基本事实:当年没有高级语言,没有抽象层,没有 GC,没有类型系统,只有对着一块焊接好的电路板写下的逐行指令。它证明了在一个极端严格的硬件约束下,人类依然能完成像登月这样复杂度极高的计算任务。

这份代码不是一份可以用来炫耀技术的东西,它是一段可以被阅读、被研究、被用来理解那个时代工程师如何思考的物理数字文物。值得花时间翻一翻。

这篇文章对你有帮助吗?

发表回复