news 2026/9/30 1:43:24

Apollo-11 阿波罗11号制导计算机源码仓库:Comanche055 指令舱与 Luminary099 登月舱 AGC 源码全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Apollo-11 阿波罗11号制导计算机源码仓库:Comanche055 指令舱与 Luminary099 登月舱 AGC 源码全解析
  • 嵌入式
  • 固件

【免费下载链接】Apollo-11

Original Apollo 11 Guidance Computer (AGC) source code for the command and lunar modules.

项目地址:https://gitcode.com/GitHub_Trending/ap/Apollo-11
点击查看免费下载

本文聚焦 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):

源码集合所属系统装配记录对应源码文件
Comanche055Colossus 2A(指令舱 AGC)Assemble revision 055 of AGC program Comanche by NASA,2021113-051. 10:28 APR. 1, 1969Comanche055/CONTRACT_AND_APPROVALS.agc
Luminary099Luminary 1A(登月舱 AGC)ASSEMBLE REVISION 001 OF AGC PROGRAM LMY99 BY NASA,16:27 JULY 14, 1969Luminary099/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 整体划分为若干功能区段:

区段代表性模块说明
COMERASEERASABLE_ASSIGNMENTS可擦写存储器(变量)地址分配
COMAIDINTERRUPT_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 校准等辅助程序
COMEKISSGROUND_TRACKING_DETERMINATION_PROGRAM(P21)、P34-P35/P74-P75、R31、P76、R30、STABLE_ORBIT(P38-P39)轨道确定与稳定轨道相关程序
TROUBLEP11、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任务阶段程序(如交会、再入、月面着陆准备)
TVCDAPSTVCINITIALIZE、TVCEXECUTIVE、TVCMASSPROP、TVCRESTARTS、TVCDAPS、TVCROLLDAP、RCS-CSM_DIGITAL_AUTOPILOT、AUTOMATIC_MANEUVERS、JET_SELECTION_LOGIC、CM_ENTRY_DIGITAL_AUTOPILOT推力矢量控制(TVC)与数字自动驾驶仪(DAP)
CHIEFTANDOWN-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:

  1. 注释必须与扫描件逐字完全一致,包括扫描件中存在的笔误(如SPACECRAFT应保留为扫描件中的SPAECRAFT)——数字转录过程中既有人为修正原始笔误的情况,也引入了扫描件中没有的新笔误,两种情况都必须修正回扫描件的原貌;
  2. 空格规则:新单词之间用单空格,新句子之间用双空格,缩进用三空格;若扫描件只有单空格则跟随扫描件;
  3. 换行规则:第 1 列带有R0000的行必须与扫描件精确一致;不带R0000的行之间只允许 1~2 个空行,多余空行应删除。原始纸张上第 8 列未打印的数字控制着空行数量——2强制双倍行距(单空行)、3强制三倍行距(双空行),4~8被定义但从未使用;
  4. 提 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. HamiltonColossus 编程负责人,阿波罗制导与导航计划
批准人职务
Daniel J. Lickly任务程序开发主任,阿波罗制导与导航计划
Fred H. MartinColossus 项目经理,阿波罗制导与导航计划
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.

项目地址:https://gitcode.com/GitHub_Trending/ap/Apollo-11
点击查看免费下载
上一篇:探索VerbalExpressions:简化JavaScript正则表达式的利器
下一篇:OpenWifi性能调优终极指南:如何实现40-50Mbps TCP吞吐量

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 1:41:02

校园招聘系统

毕业论文(设计)题目:基于SSM框架的校园招聘系统的设计与实现毕业论文(设计)工作规定进行的日期:2021年9月28日 至 2022年5 月31日任务书的内容 选题的目的、意义:近年来,信息技术迅…

作者头像 李华
网站建设 2026/9/30 1:40:59

宠物用品电子商务平台

Ⅰ、毕业设计(论文)题目:基于SSM框架的宠物用品电子商务平台设计与实现Ⅱ、毕业设计(论文)工作内容(从专业知识的综合运用、论文框架的设计、文献资料的收集和应用、观点创新等方面详细说明)&am…

作者头像 李华
网站建设 2026/9/30 1:39:55

壁纸网站实测推荐:原图下载、版权避坑与本地管理指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 1:39:20

BLE设备地址类型全解析:Public、Random与隐私地址实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 1:38:40

Linux发行版全解析:从分支谱系到实战选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 1:38:39

C++ httplib 库实战:从 HTTP 客户端到 HTTPS 服务端的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华