- 嵌入式
- 固件
【免费下载链接】Apollo-11
Original Apollo 11 Guidance Computer (AGC) source code for the command and lunar modules.
本文聚焦 GitHub 精选项目 Apollo-11:一份由 NASA 阿波罗 11 号任务真实飞行的指令舱(Command Module)制导计算机(AGC)与登月舱(Lunar Module)制导计算机原始汇编源码仓库。文章将带你完整了解仓库的两大源码集合 Comanche055(Colossus 2A)与 Luminary099(Luminary 1A)的来历、文件组织方式、编译工具链(yaYUL/Virtual AGC)、贡献校对规范,以及这份代码的合同批准与署名背景,让你既能读懂仓库结构,也能自行基于扫描原件进行核验与编译。
仓库定位:飞行代码的"原始真身"
根据仓库根目录的 README.md 及其阿拉伯语版本 Translations/README.ar.md 的说明,这个仓库保存的是Apollo 11 制导计算机(AGC)的原始源代码,分为两套系统:
- Comanche055:指令舱(Command Module,CM)所用的 AGC 程序,属于Colossus 2A系统;
- Luminary099:登月舱(Lunar Module,LM)所用的 AGC 程序,属于Luminary 1A系统。
这两套源码由 Virtual AGC 项目的参与者和 MIT 博物馆数字化整理而来。仓库的目标定位非常明确——作为 Apollo 11 原始源码的存档仓库,因此对任何与原始扫描件存在差异的转录内容,都欢迎提交 PR 进行修正。换言之,这不是一个"重新实现"的项目,而是一个忠实还原历史代码的工程。
版本标识与汇编时间
两套代码各自保留了 NASA 官方装配清单上的版本标注(见 Comanche055/README.md 与 Luminary099/README.md):
| 源码集合 | 所属系统 | 装配记录 | 对应源码文件 |
|---|---|---|---|
| Comanche055 | Colossus 2A(指令舱 AGC) | Assemble revision 055 of AGC program Comanche by NASA,2021113-051. 10:28 APR. 1, 1969 | Comanche055/CONTRACT_AND_APPROVALS.agc |
| Luminary099 | Luminary 1A(登月舱 AGC) | ASSEMBLE REVISION 001 OF AGC PROGRAM LMY99 BY NASA,16:27 JULY 14, 1969 | Luminary099/README.md |
其中 Luminary099 的日期是硬拷贝制作日期,并非程序修订或装配的日期,这一点在 Luminary099/README.md 中专门做了说明。
数字化背景:从 MIT 博物馆纸档到 GitHub 仓库
仓库源码并非直接来自 NASA 磁带,而是从MIT 博物馆馆藏的一份程序纸质硬拷贝的扫描图片逐行转录而来:
- 数字化工作由Paul Fjeld完成;
- 协调工作由 MIT 博物馆的Deborah Douglas负责;
- 转录与转换由Virtual AGC项目与相关贡献者共同完成。
这一背景在 README.md 的 Attribution(署名)表中明确记录,在 Comanche055/CONTRACT_AND_APPROVALS.agc 等源码文件头部的版权说明中也反复出现。正因为是手工转录,代码中难免会引入与原扫描件不一致的笔误或空格差异,这正是仓库开放贡献校对的根本原因。
源码组织:单块(Monolithic)构建与 include 机制
一个值得注意的工程事实是:原始的 AGC 开发团队没有链接器,他们的构建方式是单块的(monolithic)——把所有源码模块按照固定顺序拼接在一起。仓库忠实还原了这一方式:所有分散的模块通过MAIN.agc文件中的$include 指令按顺序汇合。
以指令舱为例,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登月舱则使用 Luminary099/MAIN.agc 作为总入口:
$ASSEMBLY_AND_OPERATION_INFORMATION.agc # pp. 1-27 $TAGS_FOR_RELATIVE_SETLOC.agc # pp. 28-37这种文件切分并非随意为之,而是对应代码天然的子程序边界。每个.agc文件后的# p.注释直接标注了它在原始汇编清单中的页码,便于与扫描件逐页校对。
子程序分区(以 Comanche055 为例)
从 Comanche055/ASSEMBLY_AND_OPERATION_INFORMATION.agc 的 "SUBROUTINE CALLS" 清单可以看出,Colossus 2A 整体划分为若干功能区段:
| 区段 | 代表性模块 | 说明 |
|---|---|---|
| COMERASE | ERASABLE_ASSIGNMENTS | 可擦写存储器(变量)地址分配 |
| COMAID | INTERRUPT_LEAD_INS、T4RUPT_PROGRAM、DOWNLINK_LISTS、FRESH_START_AND_RESTART、RESTART_TABLES、EXTENDED_VERBS、PINBALL_NOUN_TABLES、CSM_GEOMETRY、IMU_COMPENSATION_PACKAGE、PINBALL_GAME_BUTTONS_AND_LIGHTS、R60/R62、GIMBAL_LOCK_AVOIDANCE、KALCMANU_STEERING、IMU_CALIBRATION_AND_ALIGNMENT 等 | 中断处理、显示与键盘(Pinball)、IMU 校准等辅助程序 |
| COMEKISS | GROUND_TRACKING_DETERMINATION_PROGRAM(P21)、P34-P35/P74-P75、R31、P76、R30、STABLE_ORBIT(P38-P39) | 轨道确定与稳定轨道相关程序 |
| TROUBLE | P11、TPI_SEARCH、P20-P25、P30/P37、P32-P33/P72-P73、P40-P47、P51-P53、P61-P67、SERVICER207、ENTRY_LEXICON、REENTRY_CONTROL、CM_BODY_ATTITUDE、P37/P70、S-BAND_ANTENNA_FOR_CM | 任务阶段程序(如交会、再入、月面着陆准备) |
| TVCDAPS | TVCINITIALIZE、TVCEXECUTIVE、TVCMASSPROP、TVCRESTARTS、TVCDAPS、TVCROLLDAP、RCS-CSM_DIGITAL_AUTOPILOT、AUTOMATIC_MANEUVERS、JET_SELECTION_LOGIC、CM_ENTRY_DIGITAL_AUTOPILOT | 推力矢量控制(TVC)与数字自动驾驶仪(DAP) |
| CHIEFTAN | DOWN-TELEMETRY_PROGRAM、INTER-BANK_COMMUNICATION、INTERPRETER、EXECUTIVE、WAITLIST、CONIC_SUBROUTINES、ORBITAL_INTEGRATION、DISPLAY_INTERFACE_ROUTINES 等 | 解释器、执行程序、轨道积分等核心运行时 |
登月舱侧(Luminary099)的模块划分可参见 Luminary099/README.md 中的完整源码索引表,其中包含登月专属模块,如 BURN_BABY_BURN--MASTER_IGNITION_ROUTINE、THE_LUNAR_LANDING、THROTTLE_CONTROL_ROUTINES、LUNAR_LANDING_GUIDANCE_EQUATIONS、ASCENT_GUIDANCE、TRIM_GIMBAL_CONTROL_SYSTEM 等,覆盖了从点火、月面下降到上升离月的关键任务阶段。
复用方式:纸卡时代"插入"式复用
原文档(Comanche055/README.md 与 Luminary099/README.md)还揭示了一个有趣的工程史细节:当时的代码复用并非通过链接库实现,而是把你的穿孔卡片叠插入别人的卡片叠的相应位置(实际上后来改用了磁带库,模块从磁带库中混搭组合,原理相同)。因此,仓库采用的文件包含方式,是对当年开发方式的忠实再现——唯一的"改进"是不必再担心把卡片叠掉在地上。
编译与运行:从 YUL/GAP 到 yaYUL 与 Virtual AGC
汇编器沿革
文档明确指出:最初的 Apollo AGC 汇编器YUL已经无法获取;到 Apollo 11 时期,它其实已被另一款汇编器GAP取代,但 GAP 同样无法获取。因此仓库源码被调整为面向现代替代汇编器yaYUL的格式——yaYUL 接受的源码格式与 YUL/GAP 略有差异,这也是所有.agc文件头部都标注Assembler: yaYUL的原因(见 Comanche055/CONTRACT_AND_APPROVALS.agc)。
编译方法
原文档(README.md 的 Compiling 章节)给出的编译指引是:如果你想编译这些原始源码,请查看 Virtual AGC 项目。也就是说,仓库本身不包含编译脚本,实际编译依赖 Virtual AGC 工具链(yaYUL 汇编器 + AGC 模拟器),编译产物可在模拟器上"运行"这段历史飞行软件。
另外值得留意的是,扫描件中还包含大量由 GAP 生成的、以页码交叉引用的表格(GAP-generated tables),这些表格 yaYUL 不会自动生成,因此即便手上已有源码文件,扫描件本身仍有很高的查阅价值。
贡献规范:逐字逐行与扫描件对齐
仓库对贡献有非常严格的约束,核心原则是:代码必须修改得与扫描打印件完全一致。具体规则详见 CONTRIBUTING.md:
- 注释必须与扫描件逐字完全一致,包括扫描件中存在的笔误(如
SPACECRAFT应保留为扫描件中的SPAECRAFT)——数字转录过程中既有人为修正原始笔误的情况,也引入了扫描件中没有的新笔误,两种情况都必须修正回扫描件的原貌; - 空格规则:新单词之间用单空格,新句子之间用双空格,缩进用三空格;若扫描件只有单空格则跟随扫描件;
- 换行规则:第 1 列带有
R0000的行必须与扫描件精确一致;不带R0000的行之间只允许 1~2 个空行,多余空行应删除。原始纸张上第 8 列未打印的数字控制着空行数量——2强制双倍行距(单空行)、3强制三倍行距(双空行),4~8被定义但从未使用; - 提 PR 前务必自查:改动必须与扫描件一致。
若你想为仓库贡献,请先阅读 Translations/CONTRIBUTING.ar.md(阿拉伯语版本)或英文版 CONTRIBUTING.md,再对照 Comanche 与 Luminary 的 AGC 扫描打印件进行逐页校对。
署名与合同批准:Colossus 2A 的法律与工程背书
仓库保留了当年 NASA 的正式合同与批准记录(派生自 Comanche055/CONTRACT_AND_APPROVALS.agc):
- 本 AGC 程序正式命名为Colossus 2A;
- 用途:按
R-577报告规定用于指令舱(CM); - 项目编号:DSR 项目
55-23870; - 资助方:NASA 载人航天器中心(Manned Spacecraft Center);
- 合同:
NAS 9-4065,与位于美国马萨诸塞州剑桥市的麻省理工学院仪器实验室(Instrumentation Laboratory)签订。
提交与批准人员(1969 年 3 月 28 日)
| 提交人 | 职务 |
|---|---|
| Margaret H. Hamilton | Colossus 编程负责人,阿波罗制导与导航计划 |
| 批准人 | 职务 |
|---|---|
| Daniel J. Lickly | 任务程序开发主任,阿波罗制导与导航计划 |
| Fred H. Martin | Colossus 项目经理,阿波罗制导与导航计划 |
| Norman E. Sears | 任务开发主任,阿波罗制导与导航计划 |
| Richard H. Battin | 任务开发主任,阿波罗制导与导航计划 |
| David G. Hoag | 主任,阿波罗制导与导航计划 |
| Ralph R. Ragan | 副主任,仪器实验室 |
版权状态
根据 README.md 的署名表,本仓库代码的版权为公有领域(Public domain),联系人为 Ron Burkey(info@sandroid.org),相关网站为 www.ibiblio.org/apollo。在源码文件头部的 Copyright 声明(如 Comanche055/CONTRACT_AND_APPROVALS.agc)中同样标注了Public domain。
快速上手:仓库目录导航
Apollo-11/ ├── README.md # 英文主文档(仓库总览、署名、合同与批准) ├── CONTRIBUTING.md # 贡献与校对规范 ├── Translations/ # 多语言翻译(含 README.ar.md、CONTRIBUTING.ar.md 等) ├── Comanche055/ # 指令舱 AGC 源码(Colossus 2A),MAIN.agc 为汇编入口 │ ├── MAIN.agc │ ├── ASSEMBLY_AND_OPERATION_INFORMATION.agc │ ├── CONTRACT_AND_APPROVALS.agc │ └── ...(90+ 个 .agc 模块) └── Luminary099/ # 登月舱 AGC 源码(Luminary 1A),MAIN.agc 为汇编入口 ├── MAIN.agc ├── THE_LUNAR_LANDING.agc ├── BURN_BABY_BURN--MASTER_IGNITION_ROUTINE.agc └── ...(90+ 个 .agc 模块)中文读者可以对照 Translations/README.zh_cn.md 阅读;阿拉伯语读者可阅读本文档对应的 Translations/README.ar.md。若想本地查看,可通过git clone拉取仓库后,结合 Virtual AGC 工具链在模拟器中编译并运行这段人类首次登月的制导软件。
- 嵌入式
- 固件
【免费下载链接】Apollo-11
Original Apollo 11 Guidance Computer (AGC) source code for the command and lunar modules.
相关推荐
notepad-- 中文编码编辑器:从编译到日常用法
notepad 中文编码编辑器:从编译到日常用法 notepad 是一个用 C++ 与 Qt5 编写的跨平台文本编辑器,覆盖 Windows、Linux 与 m
嵌入式固件Apollo-11 仓库技术导读:Apollo 11 制导计算机(AGC)指令舱与登月舱源码全解析
Apollo 11 仓库技术导读:Apollo 11 制导计算机(AGC)指令舱与登月舱源码全解析 本仓库完整收录了阿波罗 11 号任务中两台制导计算机(AGC
嵌入式固件Apollo-11 仓库深度解读:阿波罗 11 号制导计算机(AGC)原始源码 Comanche055 与 Luminary099
Apollo 11 仓库深度解读:阿波罗 11 号制导计算机(AGC)原始源码 Comanche055 与 Luminary099 导读 本文围绕 Apollo
嵌入式固件
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考