- 嵌入式
- 固件
【免费下载链接】Apollo-11
Original Apollo 11 Guidance Computer (AGC) source code for the command and lunar modules.
本文以 Apollo-11 开源仓库为对象,系统解读其核心内容:阿波罗11号制导计算机(Apollo Guidance Computer,简称 AGC)面向指令舱(Command Module)与登月舱(Lunar Module)的原始源代码。读完本文,你将理解两套核心程序(Comanche055/Colossus 2A 与 Luminary099/Luminary 1A)的由来与身份、如何使用 yaYUL 汇编器重建源码、仓库的组织结构与参与转录核对的贡献流程,以及其版权归属与历史合约记录。
仓库定位:原始 AGC 源码的权威数字化归档
仓库的定位在 README.md 中写得非常明确:它是阿波罗11号制导计算机原始源代码的归档仓库,涵盖两大模块:
- 指令舱(Command Module,CM)——对应
Comanche055程序,存放于 Comanche055/ 目录; - 登月舱(Lunar Module,LM)——对应
Luminary099程序,存放于 Luminary099/ 目录。
这些源码由 [Virtual AGC] 团队与MIT Museum(麻省理工学院博物馆)协作完成数字化:原始纸质打印件被扫描成数字图像,再逐行转录为文本源码。仓库设立的目标就是成为阿波罗11号原始源码的「事实标准」存档点。正因为是手工转录,转录文本与原始扫描件之间难免存在出入,因此仓库欢迎任何针对 [Luminary 099] 与 [Comanche 055] 扫描件与转录文本之间差异的 Pull Request,也欢迎补交遗漏的文件。
两套核心程序:Comanche055 与 Luminary099
仓库在 Attribution(归属说明)表中给出了两套程序的身份标识,这是理解整个仓库的关键:
| 程序 | 所属模块 | 程序别名 | 汇编版本标识 |
|---|---|---|---|
| Comanche055 | 指令舱(CM)的 AGC | Colossus 2A | Assemble revision 055 of AGC program Comanche by NASA,2021113-051. 10:28 APR. 1, 1969 |
| Luminary099 | 登月舱(LM)的 AGC | Luminary 1A | Assemble revision 001 of AGC program LMY99 by NASA,2021112-061. 16:27 JUL. 14, 1969 |
也就是说,Comanche055 是Colossus 2A程序的第 055 次汇编修订版(1969 年 4 月 1 日 10:28 汇编);Luminary099 则是Luminary 1A程序的 LMY99 汇编(1969 年 7 月 14 日 16:27)。前者负责指令舱的导航、制导与姿态控制,后者承载登月舱的月面下降、着陆与上升制导。
在 Luminary099/README.md 中还可看到登月舱程序硬拷贝上的原始标注:
ASSEMBLE REVISION 001 OF AGC PROGRAM LMY99 BY NASA 2021112-061 16:27 JULY 14,1969 [注意:这是硬拷贝生成的日期,而非程序修订或汇编日期。] ... THIS LGC PROGRAM IS INTENDED FOR USE IN THE LM DURING THE MANNED LUNAR LANDING MISSION OR ANY SUBSET THEREOF.该标注明确说明此程序用于载人登月任务(或任何子集)中的登月舱。
编译:使用 yaYUL 汇编器重建原始源码
原文档的「编译」一节指向了 [Virtual AGC] 项目——如果你有兴趣把原始源码真正汇编成可运行的 AGC 机器码,需要借助yaYUL汇编器。这里有几点背景值得展开:
- 原始汇编器已不可得:Apollo 时代 AGC 使用的汇编器叫
YUL,在阿波罗11号时期已被GAP取代,但两者如今都已不可用。 - yaYUL 是兼容替代品:yaYUL 接受的源码格式与 YUL/GAP 略有不同,因此本仓库的源码已按 yaYUL 的格式规范编写,目标就是能用 yaYUL 直接汇编。这一点在 Comanche055/README.md 与 Luminary099/README.md 的 Background 一节均有明确说明。
- GAP 生成的附表仍有价值:yaYUL 不生成 GAP 时代汇编清单中的交叉引用表(按页码交叉引用),因此即使是已经拿到全部源码文件,查看原始页图像中的 GAP 生成表格依然有参考价值。
此外,仓库根目录的 package.json 提供了 Markdown 格式检查脚本(基于 markdownlint-cli2),用于校验文档排版规范:
{ "scripts": { "lint": "markdownlint-cli2 *.md translations/*.md Comanche055/*.md Luminary099/*.md --config .markdownlint.yml", "lint:fix": "markdownlint-cli2 *.md translations/*.md Comanche055/*.md Luminary099/*.md --config .markdownlint.yml --fix" } }目录结构与源码组织方式
仓库的两个主目录各自以MAIN.agc为汇总入口,通过文件包含(include)机制把几十个分片源码拼接成一个整体:
- Comanche055/MAIN.agc 定义了指令舱程序的全部包含顺序;
- Luminary099/MAIN.agc 定义了登月舱程序的全部包含顺序。
之所以用「包含」而非「分别汇编再链接」,是因为原始开发团队根本没有链接器——整个构建本来就是单体式的(monolithic)。原始项目非常强调代码复用,但复用的方式是把一摞穿孔卡片插到另一摞卡片中的对应位置(实际开发中演变为磁带库中的模块混搭,原理一致)。因此,文件包含法是对原始开发方式非常忠实的还原,只是不再担心把卡片掉在地上。
以 Comanche055/MAIN.agc 为例,指令舱源码被划分为六个逻辑分组:
- COMERASE:可擦写存储分配(Comanche055/ERASABLE_ASSIGNMENTS.agc);
- COMAID:中断引导、T4 中断程序、下行链路列表、冷启动与重启、重启表、扩展动词、引脚球名词表、CSM 几何、IMU 补偿包、引脚球按键与指示灯、R60/R62、ANGLFIND、万向锁定规避、KALCMANU 制导、系统测试引导、IMU 校准与对准等;
- COMEKISS:地面跟踪测定程序(P21)、P34-P35/P74-P75、R31、P76、R30、稳定轨道等;
- TROUBLE:P11、TPI 搜索、P20-P25、P30-P37、P32-P33/P72-P73、P40-P47、P51-P53、日月星历子程序、P61-P67、SERVICER207、再入词典、再入控制、指令舱姿态、P37/P70、S 波段天线、指令舱月面地标选择等;
- TVCDAPS:TVC 初始化/执行/质量特性/重启、TVC DAP、TVC 行程测试、TVC 滚转 DAP、MYSUBS、RCS-CSM 数字自动驾驶仪、自动机动、RCS-CSM DAP 执行程序、喷气选择逻辑、指令舱再入数字自动驾驶仪等;
- CHIEFTAN:下行遥测程序、存储体间通信、解释器(Interpreter)、固定常量池、解释性常量、单精度子程序、执行程序(Executive)、等待列表(Waitlist)、经纬度子程序、行星惯性定向、测量纳入、圆锥子程序、积分初始化、轨道积分、飞行中对准例程、动力飞行子程序、自由落体时间、恒星表、AGC Block Two 自检、相位表维护、重启例程、IMU 模式切换、KEYRUPT/UPRUPT、显示接口例程、服务例程、报警与中止、更新程序、RT8 操作码等。
分组结构在 Comanche055/ASSEMBLY_AND_OPERATION_INFORMATION.agc 开头的「SUBROUTINE CALLS」清单中也有系统罗列,它本身就指明了各子程序的组织关系。登月舱一侧的组织方式与之对应,完整索引见 Luminary099/README.md 的 Source Code Index 表(含 GAP 生成表格页码 89、1511-1743)。
参与贡献:转录核对与格式规范
仓库的贡献入口是 CONTRIBUTING.md,其核心工作不是写新功能,而是校验转录正确性:由于源码是从纸质打印件手工数字化而来,转录过程会无意引入错字和偏差,因此源码必须被修正到与扫描打印件一致。核对内容包括:
- 注释必须与扫描件逐字一致:包括原作者笔误(如扫描件印成
SPAECRAFT而转录误改为SPACECRAFT,则必须改回SPAECRAFT)也应保留,不得「好心纠正」; - 空格规范:注释中字符间空格应对齐扫描件,通常规则是:新词单空格、新句子双空格、缩进三空格,但若扫描件本身只有单空格则随扫描件;
- 换行规范:第 1 列带
R0000的行必须与扫描件完全一致;不带R0000的换行最多保留 1~2 个空行;源码图像中的空行来源于第 8 列未打印的数字——2 强制双倍间距(单个空行)、3 强制三倍间距(两个空行),4-8 有定义但从未使用。
格式层面要求使用 Tab 缩进、Tab 宽度为 8、去除行尾空白。提交 PR 前务必确认改动与扫描件一致。
版权归属与来源说明
原文档的 Attribution 表格是了解代码出处的权威信息源:
| 条目 | 内容 |
|---|---|
| 版权(Copyright) | 公有领域(Public domain) |
| Comanche055 | Colossus 2A 源码的一部分,即阿波罗11号指令舱(CM)的 AGC;汇编版本标识见上文 |
| Luminary099 | Luminary 1A 源码的一部分,即阿波罗11号登月舱(LM)的 AGC |
| 汇编器(Assembler) | yaYUL |
| 联系(Contact) | Ron Burkey<info@sandroid.org> |
| 网站(Website) | www.ibiblio.org/apollo |
| 数字化(Digitalisation) | 源码转录自 MIT Museum 硬拷贝的数字图像;数字化由 Paul Fjeld 执行,由博物馆的 Deborah Douglas 协调安排 |
每个源码文件的文件头注释也都带有同样标准的元信息块(Copyright、Filename、Purpose、Assembler、Contact、Website、Mod history),例如 Comanche055/CONTRACT_AND_APPROVALS.agc 与 Comanche055/ASSEMBLY_AND_OPERATION_INFORMATION.agc 均可印证。若扫描图像不清晰,可联系 Ron Burkey 获取 Paul Fjeld 制作的高质量原图。
合约与批准记录(Contract and Approvals)
该节内容直接派生自 Comanche055/CONTRACT_AND_APPROVALS.agc 的第 1 页硬拷贝标注,记录了程序的官方身份与授权链条:
- 本 AGC 程序在官方文档中亦称为Colossus 2A;
- 该程序按R-577 报告的要求用于指令舱(CM);
- 程序在 DSR 项目55-23870下编制,由美国国家航空航天局载人航天器中心通过合同NAS 9-4065资助,执行方为麻省理工学院(MIT)仪器实验室,马萨诸塞州剑桥。
提交人(Submitted by):
| 姓名 | 角色 | 日期 |
|---|---|---|
| Margaret H. Hamilton | Colossus 编程负责人,阿波罗制导与导航 | 1969 年 3 月 28 日 |
批准人(Approved by):
| 姓名 | 角色 | 日期 |
|---|---|---|
| Daniel J. Lickly | 任务计划发展总监,阿波罗制导与导航计划 | 1969 年 3 月 28 日 |
| Fred H. Martin | Colossus 项目经理,阿波罗制导与导航计划 | 1969 年 3 月 28 日 |
| Norman E. Sears | 任务发展总监,阿波罗制导与导航计划 | 1969 年 3 月 28 日 |
| Richard H. Battin | 任务发展总监,阿波罗制导与导航计划 | 1969 年 3 月 28 日 |
| David G. Hoag | 总监,阿波罗制导与导航计划 | 1969 年 3 月 28 日 |
| Ralph R. Ragan | 副总监,仪器实验室 | 1969 年 3 月 28 日 |
多语种文档与本地化
仓库的 README.md 通过 Translations/ 目录维护了大量语言的翻译版本(包括本文所基于的尼泊尔语版 Translations/README.ne.md、简体中文版 Translations/README.zh_cn.md、繁体中文版 Translations/README.zh_tw.md 等),CONTRIBUTING.md 同样提供多语种翻译。这使不同语言背景的开发者都能无障碍理解仓库的定位、编译方式与贡献规范。
进一步深入阅读
若想继续深入,建议按以下路径阅读仓库:
- Comanche055/README.md:指令舱源码完整索引(按页码列出全部
.agc文件及其分组); - Luminary099/README.md:登月舱源码完整索引与硬拷贝标注原文;
- Comanche055/MAIN.agc与Luminary099/MAIN.agc:理解单体式包含构建的装配顺序;
- Comanche055/ASSEMBLY_AND_OPERATION_INFORMATION.agc:SUBROUTINE CALLS 清单,摸清子程序间的调用关系;
- Comanche055/CONTRACT_AND_APPROVALS.agc:合约与批准记录的源码原文。
这套源码既是航天史的重要史料,也是理解 20 世纪 60 年代实时嵌入式软件工程实践(单体构建、文件包含式模块复用、可擦写存储管理、解释器设计)的绝佳标本。
- 嵌入式
- 固件
【免费下载链接】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 阿波罗11号制导计算机源码仓库:Comanche055 指令舱与 Luminary099 登月舱 AGC 源码全解析
Apollo 11 阿波罗11号制导计算机源码仓库:Comanche055 指令舱与 Luminary099 登月舱 AGC 源码全解析 本文聚焦 GitHub
嵌入式固件Apollo-11 仓库解读:阿波罗11号制导计算机(AGC)指令舱与登月舱原始源码的数字化归档、组织结构与编译实践
Apollo 11 仓库解读:阿波罗11号制导计算机(AGC)指令舱与登月舱原始源码的数字化归档、组织结构与编译实践 本篇技术指南围绕本仓库根目录 README
嵌入式固件
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考