[ 亿欧导读 ] 没有阿波罗飞船上的电脑,就没有登月,就没有胜利的第一步,就没有人类太空旅行的高潮。
阿波罗11号电脑错误背后的真实故事:
回顾1969
50年前的那一天,全人类千百年来的梦想实现了,人类首次登上月球。阿波罗登月背后的功臣是30多万名技术人员和14.5万行计算机代码,目前代码已在GitHub开源。今天就跟我们一起回顾50年前的那个荣耀时刻。
时间:1969年7月21日02:56 UTC
地点:月球
阿姆斯特朗:我正在梯子下面。登月舱的踏板仅在表面凹陷约1、2英寸,尽管当你靠近时表面看起来非常非常细腻,就像粉末一样。
阿姆斯特朗:我将要踏上月球。
阿姆斯特朗:这是我个人的一小步,但却是全人类的一大步。
阿姆斯特朗:表面很细而且是粉状的,我可以用脚趾把它捡起来。
指挥中心:尼尔,这里是休斯顿。我们听到了。
阿姆斯特朗:和我们的预期不同,四处走动似乎没有什么困难。
奥尔德林:从我们这里看起来非常漂亮。
阿姆斯特朗:它有一种自己独特的荒凉之美,很像美国的许多沙漠,但是有所不同,这里真的是十分漂亮。
1969年7月16日,巨大的“土星5号”火箭载着“阿波罗11号”飞船从美国肯尼迪航天中心点火升空,开始了人类首次登月的太空征程。
三位执行此任务的宇航员分别为指令长尼尔·阿姆斯特朗(Neil Armstrong)和指令舱驾驶员迈克尔·科林斯(Michael Collins)以及登月舱驾驶员巴兹·奥尔德林(Buzz Aldrin)。
50年前的这次成功登月实现了人类千百年来的梦想,也让我们对月球有了更全面的认知。此外,登月还促进了航天技术和计算机的发展。
要知道阿波罗登月用的计算机,主频只有2MHz,RAM和ROM分别只有2K和36K。阿波罗计划对计算机性能的要求,让美国科学家们认识到计算机的重要性。
阿波罗制导计算机(AGC)
上世纪60年代,MIT一起实验室的程序员们需要给登月计划开发飞行控制软件,但是当时并没有现在如此成熟的技术,他们必须自己打造一套系统。
于是,他们提出了一种存储计算机程序的新方法——线存储器,并创造了一种特殊版本的汇编语言。现在许多程序员听到“汇编语言”都有可能瑟瑟发抖,而MIT的程序员为阿波罗制导计算机(AGC)编写了许许多多这种晦涩难懂的代码。
AGC代码其实早在2003年的时候由Ron Burkey上传到了网络。他根据MIT在网上发布的原始硬拷贝的扫描件进行了转录。后来NASA的一位实习生Chris Garry将AGC代码完整地上传到了GitHub。
https://github.com/chrislgarry/Apollo-11/blob/master/README.zh_cn.md
食用源码方法参考10个短视频,有中文字幕:
1969月球着陆:《阿波罗11号制导计算机》(AGC)的代码
想了解更多AGC细节:
在Youtube上找到了一个讲当时Apollo电脑的纪录片,挺有趣:
版权 | 公共领域。 |
---|---|
Comanche055 | 阿波罗 11 号制导计算机(AGC)中的指令模块(CM), Colossus 2A 的部分源代码 Assemble revision 055 of AGC program Comanche by NASA 2021113-051. 10:28 APR. 1, 1969 |
Luminary099 | 阿波罗 11 号制导计算机(AGC)中的登月模块(LM), Luminary 1A 的部分源代码 Assemble revision 001 of AGC program LMY99 by NASA 2021112-061. 16:27 JUL. 14, 1969 |
汇编程序 | yaYUL |
联系人 | Ron Burkey info@sandroid.org |
网站 | www.ibiblio.org/apollo |
数字化 | 该源代码从 MIT 科学博物馆的印刷本电子化图片抄录、改编而来。电子化工作由 Paul Fjeld 完成,并由该馆的 Deborah Douglas 进一步整理。由衷地感激两位。 |
该项目是阿波罗11号制导计算机(AGC)中的指令模块(Comanche055)和登月模块(Luminary099)的原始代码。
那么刚才说到的14.5万行代码转录出来物理占用空间多少呢?请看下图。
下面是一个agc文件部分源码,但是让人们感兴趣的点却更多的在于这份代码的注释——着实过于诙谐幽默了。
# Copyright: Public domain.
# Filename: BURN_BABY_BURN--MASTER_IGNITION_ROUTINE.agc
# Purpose: Part of the source code for Luminary 1A build 099.
# It is part of the source code for the Lunar Module's (LM)
# Apollo Guidance Computer (AGC), for Apollo 11.
# Assembler: yaYUL
# Contact: Ron Burkey <info@sandroid.org>.
# Website: www.ibiblio.org/apollo.
# Pages: 731-751
# Mod history: 2009-05-19 RSB Adapted from the corresponding
# Luminary131 file, using page
# images from Luminary 1A.
# 2009-06-07 RSB Corrected 3 typos.
# 2009-07-23 RSB Added Onno's notes on the naming
# of this function, which he got from
# Don Eyles.
#
# This source code has been transcribed or otherwise adapted from
# digitized images of a hardcopy from the MIT Museum. The digitization
# was performed by Paul Fjeld, and arranged for by Deborah Douglas of
# the Museum. Many thanks to both. The images (with suitable reduction
# in storage size and consequent reduction in image quality as well) are
# available online at www.ibiblio.org/apollo. If for some reason you
# find that the images are illegible, contact me at info@sandroid.org
# about getting access to the (much) higher-quality images which Paul
# actually created.
#
# Notations on the hardcopy document read, in part:
#
# Assemble revision 001 of AGC program LMY99 by NASA 2021112-061
# 16:27 JULY 14, 1969
# Page 731
## At the get-together of the AGC developers celebrating the 40th anniversary
## of the first moonwalk, Don Eyles (one of the authors of this routine along
## with Peter Adler) has related to us a little interesting history behind the
## naming of the routine.
##
## It traces back to 1965 and the Los Angeles riots, and was inspired
## by disc jockey extraordinaire and radio station owner Magnificent Montague.
## Magnificent Montague used the phrase "Burn, baby! BURN!" when spinning the
## hottest new records. Magnificent Montague was the charismatic voice of
## soul music in Chicago, New York, and Los Angeles from the mid-1950s to
## the mid-1960s.
# BURN, BABY, BURN -- MASTER IGNITION ROUTINE
BANK 36
SETLOC P40S
BANK
EBANK= WHICH
COUNT* $$/P40
# THE MASTER IGNITION ROUTINE IS DESIGNED FOR USE BY THE FOLLOWING LEM PROGRAMS: P12, P40, P42, P61, P63.
# IT PERFORMS ALL FUNCTIONS IMMEDIATELY ASSOCIATED WITH APS OR DPS IGNITION: IN PARTICULAR, EVERYTHING LYING
# BETWEEN THE PRE-IGNITION TIME CHECK -- ARE WE WITHIN 45 SECONDS OF TIG? -- AND TIG + 26 SECONDS, WHEN DPS
# PROGRAMS THROTTLE UP.
#
# VARIATIONS AMONG PROGRAMS ARE ACCOMODATED BY MEANS OF TABLES CONTAINING CONSTANTS (FOR AVEGEXIT, FOR
# WAITLIST, FOR PINBALL) AND TCF INSTRUCTIONS. USERS PLACE THE ADRES OF THE HEAD OF THE APPROPRIATE TABLE
# (OF P61TABLE FOR P61LM, FOR EXAMPLE) IN ERASABLE REGISTER `WHICH' (E4). THE IGNITION ROUTINE THEN INDEXES BY
# WHICH TO OBTAIN OR EXECUTE THE PROPER TABLE ENTRY. THE IGNITION ROUTINE IS INITIATED BY A TCF BURNBABY,
# THROUGH BANKJUMP IF NECESSARY. THERE IS NO RETURN.
#
# THE MASTER IGNITION ROUTINE WAS CONCEIVED AND EXECUTED, AND (NOTA BENE) IS MAINTAINED BY ADLER AND EYLES.
#
# HONI SOIT QUI MAL Y PENSE
#
# ***********************************************
# TABLES FOR THE IGNITION ROUTINE
# ***********************************************
#
# NOLI SE TANGERE
P12TABLE VN 0674 # (0)
TCF ULLGNOT # (1)
TCF COMFAIL3 # (2)
TCF GOCUTOFF # (3)
TCF TASKOVER # (4)
TCF P12SPOT # (5)
DEC 0 # (6) NO ULLAGE
EBANK= WHICH
2CADR SERVEXIT # (7)
TCF DISPCHNG # (11)
TCF WAITABIT # (12)
TCF P12IGN # (13)
P40TABLE VN 0640 # (0)
TCF ULLGNOT # (1)
TCF COMFAIL4 # (2)
TCF GOPOST # (3)
TCF TASKOVER # (4)
TCF P40SPOT # (5)
# Page 732
DEC 2240 # (6)
EBANK= OMEGAQ
2CADR STEERING # (7)
TCF P40SJUNK # (11)
TCF WAITABIT # (12)
TCF P40IGN # (13)
TCF REP40ALM # (14)
P41TABLE TCF P41SPOT # (5)
DEC -1 # (6)
EBANK= OMEGAQ
2CADR CALCN85 # (7)
TCF COMMON # (11)
TCF TIGTASK # (12)
P42TABLE VN 0640 # (0)
TCF WANTAPS # (1)
TCF COMFAIL4 # (2)
TCF GOPOST # (3)
TCF TASKOVER # (4)
TCF P42SPOT # (5)
DEC 2640 # (6)
EBANK= OMEGAQ
2CADR STEERING # (7)
TCF P40SJUNK # (11)
TCF WAITABIT # (12)
TCF P42IGN # (13)
TCF P42STAGE # (14)
P63TABLE VN 0662 # (0)
TCF ULLGNOT # (1)
TCF COMFAIL3 # (2)
TCF V99RECYC # (3)
TCF TASKOVER # (4)
TCF P63SPOT # (5)
DEC 2240 # (6)
EBANK= WHICH
2CADR SERVEXIT # (7)
TCF DISPCHNG # (11)
TCF WAITABIT # (12)
# Page 733
TCF P63IGN # (13)
ABRTABLE VN 0663 # (0)
TCF ULLGNOT # (1)
TCF COMFAIL3 # (2)
TCF GOCUTOFF # (3)
TCF TASKOVER # (4)
NOOP # (5)
NOOP # (6)
NOOP # (7)
NOOP
TCF DISPCHNG # (11)
TCF WAITABIT # (12)
TCF ABRTIGN # (13)
# *********************************
# GENERAL PURPOSE IGNITION ROUTINES
# *********************************
BURNBABY TC PHASCHNG # GROUP 4 RESTARTS HERE
OCT 04024
CAF ZERO # EXTIRPATE JUNK LEFT IN DVTOTAL
TS DVTOTAL
TS DVTOTAL +1
TC BANKCALL # P40AUTO MUST BE BANKCALLED EVEN FROM ITS
CADR P40AUTO # OWN BANK TO SET UP RETURN PROPERLY
B*RNB*B* EXTEND
DCA TIG # STORE NOMINAL TIG FOR OBLATENESS COMP.
DXCH GOBLTIME # AND FOR P70 OR P71.
INHINT
TC IBNKCALL
CADR ENGINOF3
RELINT
INDEX WHICH
TCF 5
P42SPOT = P40SPOT # (5)
P12SPOT = P40SPOT # (5)
P63SPOT = P41SPOT # (5) IN P63 CLOKTASK ALREADY GOING
P40SPOT CS CNTDNDEX # (5)
# Page 734
TC BANKCALL # MUST BE BANKCALLED FOR GENERALIZED
CADR STCLOK2 # RETURN
P41SPOT TC INTPRET # (5)
DLOAD DSU
TIG
D29.9SEC
STCALL TDEC1
INITCDUW
BOFF CALL
MUNFLAG
GOMIDAV
CSMPREC
VLOAD MXV
VATT1
REFSMMAT
VSR1
STOVL V(CSM) # CSM VELOCITY -- M/CS*2(7)
RATT1
VSL4 MXV
REFSMMAT
STCALL R(CSM) # CSM POSITION -- M*2(24)
MUNGRAV
STODL G(CSM) # CSM GRAVITY VEC. -- M/CS*2(7)
TAT
STORE TDEC1 # RELOAD TDEC1 FOR MIDTOAV.
GOMIDAV CALRB
MIDTOAV1
TCF CALLT-35 # MADE IT IN TIME.
EXTEND # TIG WAS SLIPPED, SO RESET TIG TO 29.9
DCA PIPTIME1 # SECONDS AFTER THE TIME TO WHICH WE DID
DXCH TIG # INTEGRATE.
EXTEND
DCA D29.9SEC
DAS TIG
在登月模块(Luminary099)文件夹中,有一个名为BURN_BABY_BURN--MASTER_IGNITION_ROUTINE.agc的文件,中文可以叫做“燃烧吧,宝贝,燃烧吧——控制点火程序”,从名字上来看就非常的有意思了。
在开头的注释中,这样写道:
“燃烧吧,宝贝,燃烧吧”可追溯到1965年的洛杉矶骚乱,当时著名DJ、电台所有者“伟大的蒙塔古”(Magnificent Montague)在打碟时使用了这句话。伟大的蒙塔古是上世纪50年代中期至60年代中期,在芝加哥、纽约和洛杉矶极富感召力的灵歌代表人物。
计算机健壮性
也许阿波罗11号登月任务中最具戏剧性的时刻是当 “鹰号”登月舱开始最后一次降落到月球表面时,飞船的电脑超载了!
1969年7月20日,尼尔·阿姆斯特朗在离月球表面几英里的上空盘旋,寻找一个安全的落脚地来创造历史。
把第一批人送到月球的燃料仅剩几分钟可用。在阿波罗11号狭窄的月球着陆器上,一个功率计突然失灵了。通讯开始淡入淡出。然后,警告开始闪烁:程序报警。程序报警。(Program alarm. Program alarm.)
机上的电脑一共发出了五次紧急信号,这是阿姆斯特朗和机组成员奥尔德林从未练习过的。
在那一刻,两名宇航员的生命、30多万名技术人员的努力、8年耗资250亿美元的工作,以及一个国家的骄傲,都取决于几行开创性的计算机代码。
人类从来没有在0和1的代码上冒过这么大的风险。然而,他们决定相信机器和代码,最终,阿姆斯特朗和奥尔德林作为第一批登上月球的人收获了荣耀。
没有阿波罗飞船上的电脑,就没有登月,就没有胜利的第一步,就没有人类太空旅行的高潮。50年后来看,登月是人类的伟大胜利,也是机器的胜利,标志着计算机历史上最重要的15分钟。
阿波罗制导计算机(AGC)是第一台数字飞行计算机、是迄今为止最先进的微型计算机、是第一台使用硅芯片的计算机,同时也是第一台机组人员生命依赖于其功能的机载计算机。任何现代设备都具有比早期机器更大的原始计算能力,但是 Apollo 计算机非常强大,可靠,并且完成了它的任务。你无法用智能手机将宇宙飞船引导到月球上。
宇航员通过DSKY与计算机通信,输入数字,然后得到回复。用户界面系统依赖于一系列的程序代码,以及“动词”和“名词”代码。动词是计算机可以做的事情(如“78 UPDATE PRELAUNCH AZIMUTH”)。名词是数值量或测量值(“33 TIME OF IGNITION”)。
48年了,人们为何不再登月了?
原因众说纷纭,但一般认为以下几个因素是人类登月计划没有再次实施的重要原因。
- 首先就是太贵了。作为阿波罗计划的主要实施者,NASA在该计划上一共花费了240亿美元,大约相当于今天的1800亿美元,在20世纪60年代中期,美苏之间太空竞赛达到最高潮时,NASA每年经费占到美国联邦总预算的4%以上,这在今天是完全不可想象的。在阿波罗计划实施期间,总共雇用了约40万人,与全美20000家公司、大学和政府机构有着合作关系。
- 阿波罗计划是美国历史上和平时期最大规模的一次大动员。 尽管美国宇航局是一个民用机构,但阿波罗计划成功的实施,是因为它资金充足,而且实施的是半军事化管理模式:除了一人之外,所有宇航员都是从空军飞行员和海军飞行员中精心挑选的; 许多行政人员都在二战中在军队中服役。在美国现有体制下,这种高度集中、准军事化管理的动员模式很难长期维持。
- 在此期间,人类对航天探索的大方向也发生了重大变化,近地空间成为各大强国争夺最激烈的新战场,而且技术成本远远低于登月。在当时的冷战背景下,前苏联已经在将准备与美国打擂台的登月飞船改装成近地空间站,美国的太空战略发生重大转移,导致阿波罗18号-20号直接被砍掉。
最后,除了迈出了“人类的一大步”之外,月球很大程度上就是一片荒地,没有发现有探索价值的迹象,同样的事情,美国已经前后做了6次,花了不少钱,亏本买卖也不能总做起来没完。
总而言之就是,登月花钱太多,消耗太大,收益太少。另外,和你一直较劲的老对手已经主动放弃了,找不到继续登月的理由了。
相关资料
设备装载清单PDF
https://cdn.rawchen.com/2020/08/apollo11/a11stowage.pdf
飞船上声音转录PDF
https://cdn.rawchen.com/2020/08/apollo11/A19700102000DOC01.pdf
AGC海报存储PDF
https://cdn.rawchen.com/2020/08/apollo11/AGC_Poster_3_copia.pdf
阿姆斯特朗对不再登月表示还想再去一次
真的很难想象第一次登月的全部过程的那种困难性,就像不会编程的人开发出了C语言一样。
一直在思考一个问题,光的能量是什么,它传播消耗的是什么能量。
能够跨越如此远的距离,传到地球上。如果我们研究透彻了不就可以轻而易举实现星际航行?
你也看了星际穿越?我只是一直想知道4维空间怎么理解