随着阿尔忒弥斯2号任务迈出美国重返月球的关键一步,一个问题时常被提起:为何当年阿波罗登月计划进展得如此顺利,而今天却显得步履维艰?这背后的原因错综复杂,并非三言两语能够说清,甚至一度有传闻称部分技术图纸已经遗失。
但至少,有一项核心遗产被完好地保存并公之于众——执行首次登月任务的程序源代码。

近日,NASA正式公开了阿波罗11号任务中使用的制导计算机(Apollo Guidance Computer, AGC)软件代码,任何人都可以在GitHub上自由查阅和下载。
此次公开的代码包含两个核心部分:其一是“Comanche055”,对应指令舱(CM)中的Colossus 2A软件;其二是“Luminary099”,对应登月舱(LM)中的Luminary 1A软件。两者均用于阿波罗11号的AGC,由一种名为yaYUL的汇编语言编写。
在Comanche055的代码库中,第一个引人注目的文件是ALARM_AND_ABORT.agc。从文件名即可直观理解其功能:它负责管理警报状态,在必要时点亮警示灯,并处理各类中止级与非中止级警报。文件的开头部分遵循了当时严谨的编码规范,包含了详细的用途说明。
这些珍贵代码的数字化工作,由虚拟阿波罗制导计算机项目团队与麻省理工学院博物馆合作完成。他们从原始的印刷本电子化图片中逐行抄录、校对,最终形成了如今我们看到的可阅读版本。
如果你不满足于仅仅浏览代码,还可以借助Virtual AGC项目提供的工具,尝试在Windows XP、Mac OS X 10.3、Linux及部分FreeBSD系统上编译并运行这些历史程序。



网上还广泛流传着另一段经典的代码示例,它源自阿波罗11号的导航轨迹计算程序。其中最为关键的是约30行用于计算正弦、余弦等超越函数的汇编代码,展现了在极端资源限制下实现复杂数学运算的智慧。

以今天的标准审视,上世纪60年代的阿波罗制导计算机其配置简陋得惊人。AGC仅拥有3840字节(约3.75KB)的可读写内存(磁芯存储器),以及69120字节(约67.5KB)的只读存储(绳存储器),指令执行速度最高约为每秒8.5万次。 它的物理尺寸与一台现代台式机相仿,约为61.6 x 31.6 x 15.2厘米,重量却达到了31.8公斤。指令舱配备了两个显示键盘单元(DSKY),登月舱则配备了一个。

正是在如此有限的计算机基础硬件条件下,科学家和工程师们凭借超凡的智慧与工程能力,编写出可靠、高效的软件,最终实现了人类首次登月的壮举,这至今仍令人深感敬佩。
反观今日,阿尔忒弥斯2号猎户座飞船上的微软Outlook软件上天即出现故障的新闻,不免让人感叹时代变迁中工程挑战的转换与延续。

这段代码不仅是航天史上的里程碑,更是软件工程与计算机基础领域的活教材。对这段历史感兴趣的朋友,不妨访问 云栈社区 的开发者广场,与其他技术爱好者一同探讨更多关于硬件极限编程和航天软件的故事。
|