- 嵌入式
- 固件
【免费下载链接】Apollo-11
Original Apollo 11 Guidance Computer (AGC) source code for the command and lunar modules.
本篇文章以 Apollo-11 仓库主 README(及其挪威语译本 Translations/README.no.md)为骨架,系统讲解阿波罗 11 号制导计算机(Apollo Guidance Computer,AGC)原始源码在仓库中的存放形态:指挥舱软件 Comanche055 与登月舱软件 Luminary099 各自代表什么、整套源码如何通过"文件包含"组织成单体程序、用什么汇编器编译,以及源码的数字化出处与合同审批链条。读完本文,你将能独立定位仓库中的任一 AGC 源码文件、理解其汇编环境约定,并理清这段历史代码的版权与来源背景。
仓库定位:登月计算机的原始源代码
Apollo-11 仓库保存的是阿波罗 11 号任务中两台 AGC 的原始源代码:
- Comanche055—— 指挥舱(Command Module,CM)的 AGC 程序,属于 Colossus 2A 源码的一部分;
- Luminary099—— 登月舱(Lunar Module,LM)的 AGC 程序,属于 Luminary 1A 源码的一部分。
这些代码由 Virtual AGC 项目与 MIT 博物馆(MIT Museum)的成员数字化而来。仓库的目标定位非常明确:作为阿波罗 11 号原始源码的存储仓库。因此,任何发现"仓库转录文本与原始扫描件不一致"的问题,都通过 Pull Request 提交;README 中特别提及两类常见差异来源:Luminary 099 与 Comanche 055 的原始扫描件,以及仓库中遗漏的文件。
说明:本仓库顶层 README(README.md)被翻译为数十种语言,Translations/README.no.md 即挪威语译本,内容与英文版一一对应,本文后续引用均以仓库源码作为事实佐证。
两套飞行软件:Comanche055 与 Luminary099
版本与装配记录
README 的署名表给出了两套程序的关键元数据,这是理解整个仓库命名的钥匙:
| 项目 | 内容 |
|---|---|
| Comanche055 | 源码属于 Colossus 2A——指挥舱(CM)阿波罗 11 号 AGC 程序Assemble revision 055 of AGC program Comanche by NASA2021113-051. 10:28 APR. 1, 1969 |
| Luminary099 | 源码属于 Luminary 1A——登月舱(LM)阿波罗 11 号 AGC 程序Assemble revision 001 of AGC program LMY99 by NASA2021112-061. 16:27 JUL. 14, 1969 |
这些装配记录直接印刻在源码文件头中。打开 Comanche055/CONTRACT_AND_APPROVALS.agc,即可看到同样的两行注释:
# Assemble revision 055 of AGC program Comanche by NASA # 2021113-051. 10:28 APR. 1, 1969而在 Luminary099/README.md 的引言中,还特别注明了一个容易误读的细节:"16:27 JULY 14,1969" 是硬拷贝(hardcopy)的制作日期,而非程序修订或装配的日期——也就是说,Luminary 099 这套源码在阿波罗 11 号发射(1969 年 7 月 16 日)前两天的 7 月 14 日才完成最终版硬拷贝装订。
为什么叫 Comanche / Luminary
从文件头注释可以看出,这套 AGC 程序"应被称为Colossus 2A"(这是指挥舱程序的代号),而目录名 Comanche055 中的 "055" 指的是程序装配修订号 055;Luminary099 则对应登月舱程序 Luminary 1A(代号 LMY99)的装配修订 001。文件名与目录名的这种对应关系,正是整个仓库命名的依据。
源码组织:万行代码如何拼成"单体程序"
没有链接器的时代:文件包含即构建方式
Comanche055 与 Luminary099 两个目录下各有上百个.agc文件,但真正决定"构建顺序"的是各自的 MAIN.agc 文件。以 Comanche055 的 MAIN.agc 开头为例,它通过$文件名指令按顺序包含全部源码块,并标注了原始扫描件的页码:
$CONTRACT_AND_APPROVALS.agc # p. 1 $ASSEMBLY_AND_OPERATION_INFORMATION.agc # pp. 2-26 $TAGS_FOR_RELATIVE_SETLOC.agc # pp. 27-35 # p. 36 contains no code. # COMERASE $ERASABLE_ASSIGNMENTS.agc # pp. 37-130 # COMAID $INTERRUPT_LEAD_INS.agc # pp. 131-132 $T4RUPT_PROGRAM.agc # pp. 133-169 ...Luminary099 侧的结构完全一致,Luminary099/MAIN.agc 同样以$ASSEMBLY_AND_OPERATION_INFORMATION.agc # pp. 1-27起始,依次包含CONTROLLED_CONSTANTS.agc、INPUT_OUTPUT_CHANNEL_BIT_DESCRIPTIONS.agc、FLAGWORD_ASSIGNMENTS.agc等文件。
从仓库背景说明看,这套组织方式并非人为偏好,而是对 20 世纪 60 年代真实开发流程的还原:当年开发团队没有链接器,构建本身就是单体式的(monolithic)。源码的"复用"方式是在他人程序的穿孔卡片组(punched cards)中插入自己的卡片组(实际开发中可能演进为磁带库方式,但原理相同)。文件包含(file inclusion)因此是原始开发方式非常忠实的复现。
按功能划分的代码分区
MAIN.agc 中的注释揭示了源码的自然分区,这些分区与 ASSEMBLY_AND_OPERATION_INFORMATION.agc 开头的SUBROUTINE CALLS(子程序调用表)一一对应。以 Comanche055 为例:
- COMERASE:可擦除存储分配(ERASABLE_ASSIGNMENTS);
- COMAID:中断引导(INTERRUPT_LEAD_INS)、T4RUPT、下行链路表、重启、扩展动词、Pinball 数字/名词表、IMU 标定等;
- COMEKISS:轨道与导航相关程序(P34/P74、R31、R30、稳定轨道等);
- TROUBLE:各 P 系列任务程序(P11、P20-P25、P40-P47、P61-P67 等);
- TVCDAPS:数字自动驾驶仪与喷气选择逻辑(TVC 初始化、TVCDAPS、RCS DAP 等);
- CHIEFTAN:解释器、执行程序(EXECUTIVE)、WAITLIST、轨道积分、再入控制等基础运行环境。
Luminary099 侧对应程序则针对登月任务调整,例如包含 THE_LUNAR_LANDING.agc(月球着陆)、BURN_BABY_BURN--MASTER_IGNITION_ROUTINE.agc(主点火)、ASCENT_GUIDANCE.agc(上升制导)、THROTTLE_CONTROL_ROUTINES.agc(节流控制)等登月专属模块。
提示:各目录下的 Comanche055/README.md 与 Luminary099/README.md 给出了完整的"源码文件 ↔ 原始页号"对照索引,是快速定位代码在扫描件中位置的第一手工具。
编译方法:yaYUL 汇编器与 Virtual AGC
汇编器的代际沿革
README 的"编译"一节指出:若想编译这套原始源码,请查看 Virtual AGC 项目。这里存在一个重要的兼容性背景(仓库背景说明中明确交代):
- 原始 AGC 汇编器YUL已不可得;
- 阿波罗 11 号时代实际已被另一汇编器GAP取代,但 GAP 同样已不可得;
- 替代汇编器yaYUL接受的源码格式与 YUL/GAP 略有不同,因此本仓库源码已按 yaYUL 的格式进行适配。
换句话说,仓库中的.agc文件是面向 yaYUL 汇编的现代转录版本,而不是当年打在穿孔卡片上的原始二进制形式。这也是每个源文件头部都标注# Assembler: yaYUL的原因——例如 Comanche055/CONTRACT_AND_APPROVALS.agc 头注释中列出的元数据即包含Assembler: yaYUL、Contact: Ron Burkey <info@sandroid.org>、Website: www.ibiblio.org/apollo。
编译前需要知道的限制
在尝试编译前应了解以下几点:
- 本仓库只包含
.agc汇编源码文本,编译工具链(yaYUL 及配套模拟器)位于 Virtual AGC 项目,不在本仓库内; - yaYUL 汇编时不会生成 GAP 当年产生的交叉引用表(cross-reference tables),因此仓库保留的扫描件(含 GAP 生成的大量表格、按页号交叉引用)仍有独立参考价值;
- 页码注释(
# p. 1、# pp. 2-26)是为了方便对照扫描件校对而标记的,不影响汇编结果。
贡献与校对:逐字符还原历史代码
由于这套源码是从纸质打印件人工数字化而来,转录过程中不可避免地引入了笔误与差异。仓库的 CONTRIBUTING.md 明确了校对规则,这也正是挪威语 README 中"欢迎提交 Pull Request 修正转录差异"的展开:
- 注释必须与扫描件完全一致:即使扫描件本身有拼写错误(如
SPAECRAFT少了一个 C),转录文本也必须保留该错误,而不是"修正"它;反之,若转录引入了扫描件不存在的错误,则必须修正; - 空格规则:单词间用单空格、句子间用双空格、缩进用三空格(个别扫描页例外时以扫描件为准);
- 空行规则:第 1 列以
R0000开头的行其换行必须与扫描件严格一致;不带R0000的行之间最多保留 1~2 个空行,多余空行需删除。
这套规则的背后动机是:仓库追求的是对历史扫描件最大程度的保真,而非对代码"优雅性"的现代重构。
溯源认证:合同、审批与署名
合同背景(源自 CONTRACT_AND_APPROVALS.agc)
README 的"Contract and Approvals"章节内容直接摘录自 Comanche055/CONTRACT_AND_APPROVALS.agc,其正文明确写道:
- 该 AGC 程序亦应被称为Colossus 2A;
- 按报告R-577的规定用于指挥舱(CM);
- 依据 DSR 项目55-23870编写,由 NASA 载人航天中心(Manned Spacecraft Center)通过合同NAS 9-4065资助;
- 合同相对方为马萨诸塞理工学院(MIT)仪表实验室(Instrumentation Laboratory, Cambridge, Mass)。
提交与审批签名页
同文件的后续部分(对应 README 中的表格)记录了完整的审批链条,日期均为 1969 年 3 月 28 日:
| 提交/审批人 | 职务 | 日期 |
|---|---|---|
| Margaret H. Hamilton | Colossus 编程组长,阿波罗制导与导航 | 28 Mar 69 |
| Daniel J. Lickly | 任务程序开发主任,阿波罗制导与导航项目 | 28 Mar 69 |
| Fred H. Martin | Colossus 项目经理,阿波罗制导与导航项目 | 28 Mar 69 |
| Norman E. Sears | 任务开发主任,阿波罗制导与导航项目 | 28 Mar 69 |
| Richard H. Battin | 任务开发主任,阿波罗制导与导航项目 | 28 Mar 69 |
| David G. Hoag | 主任,阿波罗制导与导航项目 | 28 Mar 69 |
| Ralph R. Ragan | 仪表实验室副主任 | 28 Mar 69 |
数字化出处与联系人
README 署名表还澄清了版权与来源:本仓库代码为公共领域(Public domain);数字化工作由 Paul Fjeld 依据 MIT 博物馆的硬拷贝图像完成,由博物馆的 Deborah Douglas 安排协调。仓库维护联系人(README 标注)为 Ron Burkey(info@sandroid.org),项目站点为 www.ibiblio.org/apollo;扫描件(经压缩、画质降低)同样可在线获取,若图像难以辨认,可联系索取 Paul 制作的高清原图。
结语
Apollo-11 仓库并不是一个普通的"读源码"项目——它是人类首次登月任务中两套飞行控制软件的最终形态档案。通过本文你可以建立三条清晰的索引线索:按目录(Comanche055 / Luminary099)区分指挥舱与登月舱软件;按 MAIN.agc 的包含顺序还原整套程序的构建逻辑;按页码注释回查原始扫描件。若想进一步动手,可从 Comanche055/README.md 的源码索引出发,结合 Virtual AGC 项目的 yaYUL 汇编器尝试编译,并在 CONTRIBUTING.md 的规则指导下参与转录校对。
- 嵌入式
- 固件
【免费下载链接】Apollo-11
Original Apollo 11 Guidance Computer (AGC) source code for the command and lunar modules.
相关推荐
使用 go-openapi/loads 加载与安全解析 OAI v2(Swagger 2.0)规范文档
使用 go openapi/loads 加载与安全解析 OAI v2(Swagger 2.0)规范文档 本文以 buildkit 仓库中 vendor 化的 g
嵌入式固件RTranslator:安卓手机离线实时翻译免费完整指南
RTranslator:安卓手机离线实时翻译免费完整指南 RTranslator 是一款在安卓手机上完全离线运行的实时翻译应用,覆盖对话、对讲、文本三种场景。它
嵌入式固件notepad-- 中文编码编辑器:从编译到日常用法
notepad 中文编码编辑器:从编译到日常用法 notepad 是一个用 C++ 与 Qt5 编写的跨平台文本编辑器,覆盖 Windows、Linux 与 m
嵌入式固件
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考