阿波罗11登月代码及阿波罗制导计算机
   点滴记录   4 评论   3215 浏览

阿波罗11登月代码及阿波罗制导计算机

   点滴记录   4 评论   3215 浏览

[ 亿欧导读 ] 没有阿波罗飞船上的电脑,就没有登月,就没有胜利的第一步,就没有人类太空旅行的高潮。

阿波罗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年前的这次成功登月实现了人类千百年来的梦想,也让我们对月球有了更全面的认知。此外,登月还促进了航天技术和计算机的发展

要知道阿波罗登月用的计算机,主频只有2MHzRAM和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细节:

AGC for Dummies

在Youtube上找到了一个讲当时Apollo电脑的纪录片,挺有趣:

Navigation Computer

版权公共领域。
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年了,人们为何不再登月了?

原因众说纷纭,但一般认为以下几个因素是人类登月计划没有再次实施的重要原因

最后,除了迈出了“人类的一大步”之外,月球很大程度上就是一片荒地,没有发现有探索价值的迹象,同样的事情,美国已经前后做了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

本文由 RawChen 发表, 最后编辑时间为:2022-04-18 23:38
如果你觉得我的文章不错,不妨鼓励我继续写作。

发表评论
选择表情
  1. 阿姆斯特朗对不再登月表示还想再去一次 guzhang.png

       Windows 10   Chrome 84
    1. RawChen 博主
      @2broear

      真的很难想象第一次登月的全部过程的那种困难性,就像不会编程的人开发出了C语言一样。 ok.png

         Android M   Chrome 84
  2. 一直在思考一个问题,光的能量是什么,它传播消耗的是什么能量。
    能够跨越如此远的距离,传到地球上。如果我们研究透彻了不就可以轻而易举实现星际航行?

       Windows 10   Chrome 80
    1. RawChen 博主
      @李子白了

      你也看了星际穿越?我只是一直想知道4维空间怎么理解 icon_redface.png

         Windows 10   Chrome 83
Top