搜索
bottom↓
回复: 35

登月的阿波罗 11 号的源代码

[复制链接]

出0入0汤圆

发表于 2016-7-15 09:16:21 | 显示全部楼层 |阅读模式
协助人类历史迈出一大步的登月器阿波罗 11 号,到底它的制导电脑所用的软体是怎么样呢?这曾经由谷歌保管的源代码,前 NASA 实习生 Chris Garry 张贴在 GitHub 上公开予所有人,让公众都可以得知 NASA 编写的登月制导程序是如何的。先不论代码的优劣,但 Reddit 使用者就指编程员是个幽默的人,因为源代码线的第 666 行藏着「numero mysterioso(神秘代号)」的彩蛋,而且还有为「burn, baby, burn」的代码下了一整段的引用来源呢。

有趣的是,根据 Quartz 的说法,编程员更可以为这 GitHub 贴文提出建议,当中更不乏阿波罗 13 号的笑话... 虽说这段源代码并不可能帮助大家重现阿波罗计划,但也是一个有趣的角度来让大家知道这有着重大历史意义的事件。



随便贴1个文件
# Copyright:        Public domain.
# Filename:        FINDCDUW--GUIDAP_INTERFACE.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:        Hartmuth Gutsche <hgutsche@xplornet.com>.
# Website:        www.ibiblio.org/apollo.
# Pages:        908-925
# Mod history:        2009-05-28 HG        Transcribed from page images.
#
# 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-61
#        16:27 JULY 14, 1969

# Page 908
# PROGRAM NAME:  FINDCDUW
# MOD NUMBER:  1        68-07-15
# MOD AUTHOR:  KLUMPP
#
# OBJECTS OF MOD:        1.        TO SUPPLY COMMANDED GIMBAL ANGLES FOR NOUN 22.
#                        2.        TO MAINTAIN CORRECT AND CURRENT THRUST
#                                DIRECTION DATA IN ALL MODES.  THIS IS DONE BY
#                                FETCHING FOR THE THRUST DIRECTION FILTER THE
#                                CDUD'S IN PNGCS-AUTO, THE CDU'S IN ALL OTHER
#                                MODES.
#                        3.        TO SUBSTITUDE A STOPRATE FOR THE NORMAL
#                                AUTOPILOT COMMANDS WHENEVER
#                                1) NOT IN PNGCS-AUTO, OR
#                                2) ENGINE IS OFF.
#
# FUNCTIONAL DESCRIPTION:
#
# FINDCDUW PROVIDES THE INTERFACES BETWEEN THE VARIOUS POWERED FLITE GUIDANCE PROGRAMS
# AND THE DIGITAL AUTOPILOT.  THE INPUTS TO FINDCDUW ARE THE THRUST COMMAND VECTOR
# AND THE WINDOW COMMAND VECTOR, AND THE OUTPUTS ARE THE GIMBAL ANGLE
# INCREMENTS, THE COMMANDED ATTITUDE ANGLE RATES, AND THE COMMANDED
# ATTITUDE LAG ANGLES (WHICH ACCOUNT FOR THE ANGLES BY WHICH THE BODY WILL
# LAG BEHIND A RAMP COMMAND IN ATTITUDE ANGLE DUE TO THE FINITE ANGULAR
# ACCELERATIONS AVAILABLE).
#
# FINDCDUW ALIGNS THE ESTIMATED THRUST VECTOR FROM THE THRUST DIRECTION
# FILTER WITH THE THRUST COMMAND VECTOR, AND, WHEN XDVINHIB SET,
# ALIGNS THE +Z HALF OF THE LM ZX PLANE WITH THE WINDOW COMMAND VECTOR.
#
# Page 909
# SPECIFICATIONS:
#
# INITIALIZATION:        A SINGLE INTERPRETIVE CALL TO INITCDUW IS REQUIRED
#                        BEFORE EACH GUIDED MANEUVER USING FINDCDUW.
#
# CALL:                        INTERPRETIVE CALL TO FINDCDUW WITH THE THRUST COMMAND
#                        VECTOR IN MPAC.  INTERPRETIVE CALL TO FINDCDUW -2 WITH
#                        THE THRUST COMMAND VECTOR IN UNFC/2 AND NOT IN MPAC.
#
# RETURNS:                NORMAL INTERPRETIVE IN ALL CASES
#                        1.        NORMALLY ALL AUTOPILOT CMDS ARE ISSUED.
#                        2.        IF NOT PNGCS AUTO, DO STOPRATE AND RETURN
#                                WITHOUT ISSUING AUTOPILOT CMDS.
#                        3.        IF ENGINE OFF, DO STOPRATE AND RETURN WITHOUT
#                                ISSUING AUTOPILOT CMDS.
#
# ALARMS:                00401        IF INPUTS DETERMINE AN ATTITUDE IN GIMBAL LOCK.
#                                FINDCDUW DRIVES CDUXD AND CDUYD TO THE RQD VALUES,
#                                BUT DRIVES CDUZD ONLY TO THE GIMBAL LOCK CONE.
#
#                        00402        IF UNFC/2 OR UNWC/2 PRODUCE OVERFLOW WHEN
#                                UNITIZED USING NORMUNIT.  FINDCDUW ISSUES
#                                STOPRATE AS ONLY INPUT TO AUTOPILOT.
#
# INPUTS:                UNFC/2                THRUST COMMAND VECTOR, NEED NOT BE SEMI-UNIT.
#                        UNWC/2                WINDOW COMMAND VECTOR, NEED NOT BE SEMI-UNIT.
#                        OGABIAS                POSSIBLE BIAS FOR OUTER GIMBAL ANGLE (ZEROED IN INITCDUW), UNITS OF PI.
#                        XOVINHIB        FLAG DENOTING X AXIS OVERRIDE INHIBITED.
#                        CSMDOCKD        FLAG DENOTING CSM DOCKED.
#                        STEERSW                FLAG DENOTING INSUFF THRUST FOR THRUST DIR FLTR.
#
# OUTPUTS:                DELCDUX,Y,Z
#                        OMEGAPD,+1,+2
#                        DELPEROR,+1,+2
#                        CPHI,+1,+2 FOR NOUN22
#
# DEBRIS:                FINDCDUW DESTROYS SINCDUX,Y,Z AND COSCDUX,Y,Z BY
#                        WRITING INTO THESE LOCATIONS THE SINES AND COSINES
#                        OF THE CDUD'S IN PNGCS-AUTO, OF THE CDU'S OTHERWISE.

# Page 910
# INITIALIZATION FOR FINDCDUW

                BANK        30
                SETLOC        FCDUW
                BANK

                EBANK=        ECDUW
                COUNT*        $$/FCDUW

INITCDUW        VLOAD
                        UNITX
                STORE        UNFV/2
                STORE        UNWC/2
                RVQ

# FINDCDUW PRELIMINARIES

                VLOAD                        # FINDCDUW -2:  ENTRY WHEN UNFC/2 PRE-STORD
                        UNFC/2                # INPUT VECTORS NEED NOT BE SEMI-UNIT
FINDCDUW        BOV        SETPD                # FINDCDUW: ENTRY WHEN UNFC/2 IN MPAC
                        FINDCDUW        # INTERPRETER NOW INITIALIZED
                        22                # LOCS 0 THRU 21 FOR DIRECTION COSINE MAT
                STQ        EXIT
                        QCDUWUSR        # SAVE RETURN ADDRESS

# MORE HAUSKEEPING
                CA        ECDUWL
                XCH        EBANK                # SET EBANK
                TS        ECDUWUSR        # SAVE USER'S EBANK

                CA        DAPBOOLS
                MASK        CSMDOCKD        # CSMDOCKD MUST NOT BE BIT15
                CCS        A
                CA        ONE                # INDEX IF CSM DOCKED
                TS        NDXCDUW

                CA        XOVINHIB        # XOVINHIB MUST NOT BE BIT15
                TS        FLPAUTNO        # SET TO POS-NON-ZERO FLAG PNGCS AUTO NOT

                MASK        DAPBOOLS
                TS        FLAGOODW        # FLAG0ODW = ANY PNZ NUMBER IF XOV INHIBTD

# Page 911
# FETCH BASIC DATA
                INHINT                        # RELINT AT PAUTNO (TC INTPRET)

                CA        CDUX                # FETCH CDUX,CDUY,CDUZ IN ALL CASES, BUT
                TS        CDUSPOTX        #        REPLACE BELOW IF PNGCS AUTO
                CA        CDUY
                TS        CDUSPOTY
                CA        CDUZ
                TS        CDUSPOTZ

                CA        BIT10                # PNGCS CONTROL BIT
                EXTEND
                RAND        CHAN30
                CCS        A
                TCF        PAUTNO                # NOT PNGCS (BITS INVERTED)

                CA        BIT14                # AUTO MODE BIT
                EXTEND
                RAND        CHAN31
                CCS        A
                TCF        PAUTNO                # NOT AUTO (BITS INVERTED)

                TS        FLPAUTNO        # RESET FLAG PNGCS AUTO NOT

                CA        CDUXD                # PNGCS AUTO:  FETCH CDUXD,CDUYD,CDUZD
                TS        CDUSPOTX
                CA        CDUYD
                TS        CDUSPOTY
                CA        CDUZD
                TS        CDUSPOTZ

# Page 912
# FETCH INPUTS
PAUTNO                TC        INTPRET                # ENTERING THRUST CMD STILL IN MPAC
                RTB
                        NORMUNIT
                STOVL        UNX/2                # SEMI-UNIT THRUST CMD AS INITIAL UNX/2
                        UNWC/2
                RTB        RTB
                        NORMUNIT
                        QUICTRIG        # ALWAYS RQD TO OBTAIN TRIGS OF CDUD'S
                STOVL        UNZ/2                # SEMI-UNIT WINDOW CMD AS INITIAL UNZ/2
                        DELV
                BOVB        UNIT
                        NOATTCNT        # AT LEAST ONE ENTERING CMD VCT ZERO
                BOV        CALL
                        AFTRFLTR        # IF UNIT DELV OVERFLOWS SKIP FILTER
                        *SMNB*                # YIELDS UNIT(DELV) IN VEH COORDS FOR FLTR

# THRUST DIRECTION FILTER

                EXIT

                CA        UNFVY/2                # FOR RESTARTS, UNFV/2 ALWAYS INTACT, MPAC
                LXCH        MPAC        +3        #         RENEWD AFTER RETURN FROM CALLER,
                TC        FLTRSUB                #        TWO FILTER UPDATES MAY BE DONE.
                TS        UNFVY/2                # UNFV/2 NEED NOT BE EXACTLY SEMI-UNIT.

                CA        UNFVZ/2
                LXCH        MPAC +5
                TC        FLTRSUB
                TS        UNFVZ/2

                TC        INTPRET                # COMPLETES FILTER

# Page 913
# FIND A SUITABLE WINDOW POINTING VECTOR

AFTRFLTR        SLOAD        BHIZ                # IF XOV NOT INHIBITED, GO FETCH ZNB
                        FLAGOODW
                        FETCHZNB
                VLOAD        CALL
                        UNZ/2
                        UNWCTEST

FETCHZNB        VLOAD
                        ZNBPIP
                STCALL        UNZ/2
                        UNWCTEST

                VLOAD        VCOMP                # Z AND -X CAN'T BOTH PARALLEL UNFC/2
                        XNBPIP
                STORE        UNZ/2

# COMPUTE THE REQUIRED DIRECTION COSINE MATRIX

DCMCL                VLOAD        VXV
                        UNZ/2
                        UNX/2
                UNIT        PUSH                # UNY/2 FIRST ITERATION
                VXV        VSL1
                        UNX/2
                STORE        UNZ/2                # -UNZ/2 FIRST ITERATION
                VXSC        PDVL                # EXCHANGE -UNFVZ/2 UNZ/2 FOR UNY/2
                        UNFVZ/2                # MUST BE SMALL
                VXSC        BVSU                # YIELDS -UNFVY/2 UNY/2-UNFVZ/2 UNZ/2
                        UNFVY/2                # MUST BE SMALL
                VSL1        VAD
                        UNX/2
                UNIT                        # TOTALLY ELIMINATES THRUST POINTING ERROR
                STORE        UNX/2                # UNX/2
                VXV        VSL1
                        UNZ/2                # -UNZ/2 WAS STORED HERE REMEMBER
                STORE        UNY/2                # UNY/2
                VCOMP        VXV
                        UNX/2
                VSL1
                STORE        UNZ/2                # UNZ/2

# Page 914
# COMPUTES THE REQUIRED GIMBAL ANGLES

                CALL
                        NB2CDUSP        # YIELDS THE RQD GIMBAL ANGLES, 2'S, PI
                EXIT

# LIMIT THE MIDDLE GIMBAL ANGLE & COMPUTE THE UNLIMITED GIMBAL ANGLE CHGS

                CA        MPAC +2                # LIMIT THE MGA
                TS        L                # CAN'T LXCH:  NEED UNLIMITED MGA FOR ALARM
                CA        CDUZDLIM
                TC        LIMITSUB        # YIELDS LIMITED MGA.  1 BIT ERROR POSSIBLE
                XCH        MPAC +2                #         BECAUSE USING 2'S COMP.  WHO CARES?
                EXTEND
                MSU        MPAC +2                # THIS BETTER YIELD ZERO
                EXTEND
                BZF        +2
                TCF        ALARMMGA

MGARET                INHINT                        # RELINT AT TC INTPRET AFTER TCQCDUW

                ZL
                CA        TWO
DELGMBLP        TS        TEM2

                CA        L                # TO PREVENT FALSE STARTS ABOUT X, ZERO
                EXTEND                        #        FLAGOODW IF DELGMBZ OR Y TOO BIG.
                SQUARE
                AD        HI5                # WITHIN 1 BIT OF -(45 DEG SQUARED)
                EXTEND
                BZMF        +3
                CA        ZERO
                TS        FLAGOODW

                INDEX        TEM2
                CA        MPAC
                INDEX        TEM2
                TS        CPHI                # OUTPUTS TO NOUN22
                EXTEND
                INDEX        TEM2
                MSU        CDUXD                # NO MATTER THAT THESE SLIGHTLY DIFFERENT
                COM                        # FROM WHEN WE INITIALLY FETCHED THEM
                INDEX        TEM2
                TS        -DELGMB                # -UNLIMITED GIMBAL ANGLE CHGS, 1'S, PI
                TS        L                # FOR PRECEDING TEST ON NEXT LOOP PASS
                CCS        TEM2
                TCF        DELGMBLP

# Page 915
# BRANCHES TO NOATTCNT
                CCS        FLPAUTNO
                TCF        NOATTCNT +2        # NO PNGCS AUTO

                CA        FLAGWRD5
                MASK        ENGONBIT
                EXTEND
                BZF        NOATTCNT +2        # ENGINE NOT ON

# Page 916
# LIMIT THE ATTITUDE ANGLE CHANGES
#
# THIS SECTION LIMITS THE ATTITUDE ANGLE CHANGES ABOUT A SET OF ORTHOGONAL VEHICLE AXES X,YPRIME,ZPRIME,
# THESE AXES COINCIDE WITH THE COMMANDED VEHICLE AXES IF AND ONLY IF CDUXD IS ZERO.  THE PRIME SYSTEM IS
# THE COMMANDED VEHICLE SYSTEM ROTATED ABOUT THE X AXIS TO BRING THE Z AXIS INTO ALIGNMENT WITH THE MIDDLE GIMBAL
# AXIS.  ATTITUDE ANGLE CHANGES IN THE PRIME SYSTEM ARE RELATED TO SMALL GIMBAL ANGLE CHANGES BY:
#
#        [   -DELATTX    ]   [ 1     SIN(CDUZD)     0 ] [ -DELGMBX ]
#        [               ]   [                        ] [          ]
#        [ -DELATTYPRIME ] = [ 0     COS(CDUZD)     0 ] [ -DELGMBY ]
#        [               ]   [                        ] [          ]
#        [ -DELATTZPRIME ]   [ 0         0          1 ] [ -DELGMBZ ]

                LXCH        -DELGMB +2        # SAME AS -DELATTZPRIME UNLIMITED
                INDEX        NDXCDUW
                CA        DAZMAX
                TC        LIMITSUB
                TS        -DELGMB +2        # -DELGMBZ

                CA        -DELGMB +1
                EXTEND
                MP        COSCDUZ                # YIELDS -DELATTYPRIME/2 UNLIMITED
                TS        L
                INDEX        NDXCDUW
                CA        DAY/2MAX
                TC        LIMITSUB
                EXTEND
                DV        COSCDUZ
                XCH        -DELGMB +1        # -DELGMBY, FETCHING UNLIMITED VALUE

                EXTEND
                MP        SINCDUZ
                DDOUBL
                COM
                EXTEND                        # YIELDS +DELATTX UNLIMITD, MAG < 180 DEG.
                MSU        -DELGMB                #        BASED ON UNLIMITED DELGMBV.
                TS        L                #        ONE BIT ERROR IF OPERANDS IN MSU
                INDEX        NDXCDUW                #        OF MIXED SIGNS.  WHO CARES?
                CA        DAXMAX
                TC        LIMITSUB
                TS        -DELGMB                # SAVE LIMITED +DELATTX
                CCS        FLAGOODW
                CS        -DELGMB                # FETCH IT BACK CHGING SIGN IF WINDOW GOOD
                TS        -DELGMB                # OTHERWISE USE ZERO FOR -DELATTX
                CS        -DELGMB +1
                EXTEND
                MP        SINCDUZ
                DDOUBL                        # YIELDS -CNTRIB TO -DELATTX FROM -DELGMBY
                ADS        -DELGMB                # -DELGMBX.  NO OVERFLOW SINCE LIMITED TO
                                        # 20DEG(1+SIN(70DEG)/COS(70DEG)) < 180DEG

# Page 917
# COMPUTE COMMANDED ATTITUDE RATES
#
#        [ OMEGAPD ]   [ -2         -4 SINCDUZ              +0    ] [ -DELGMBZ ]
#        [         ]   [                                          ] [          ]
#        [ OMEGAQD ] = [ +0     -8 COSCDUZ COSCDUX     -4 SINCDUX ] [ -DELGMBY ]
#        [         ]   [                                          ] [          ]
#        [ OMEGARD ]   [ +0     +8 COSCDUZ SINCDUX     -4 COSCDUX ] [ -DELGMBZ ]
#
# ATTITUDE ANGLE RATES IN UNITS OF PI/4 RAD/SEC = K TRIG FCNS IN UNITS OF 2 X GIMBAL ANGLE RATES IN UNITS OF
# PI/2 RAD/SEC.  THE CONSTANTS ARE BASED ON DELGMB BEING THE GIMBAL ANGLE CHANGES IN UNITS OF PI RADIANS,
# AND 2 SECONDS BEING THE COMPUTATION PERIOD (THE PERIOD BETWEEN SUCCESSIVE PASSES THRU FINDCDUW).

                CS        -DELGMB
                TS        OMEGAPD
                CS        -DELGMB +1
                EXTEND
                MP        SINCDUZ
                DDOUBL
                ADS        OMEGAPD
                ADS        OMEGAPD

                CS        -DELGMB +1
                EXTEND
                MP        COSCDUX
                DDOUBL
                EXTEND
                MP        COSCDUZ
                TS        OMEGAQD
                CS        -DELGMB +2
                EXTEND
                MP        SINCDUX
                ADS        OMEGAQD
                ADS        OMEGAQD
                ADS        OMEGAQD

                CA        -DELGMB +1
                EXTEND
                MP        SINCDUX
                DDOUBL
                EXTEND
                MP        COSCDUZ
                TS        OMEGARD
                CS        -DELGMB +2
                EXTEND
                MP        COSCDUX
                ADS        OMEGARD
                ADS        OMEGARD
                ADS        OMEGARD

# Page 918
# FINAL TRANSFER

                CA        TWO
CDUWXFR                TS        TEM2
                INDEX        TEM2
                CA        -DELGMB
                EXTEND
                MP        DT/DELT                # RATIO OF DAP INTERVAL TO CDUW INTERVAL
                TC        ONESTO2S
                INDEX        TEM2
                TS        DELCDUX                # ANGLE INTERFACE

                INDEX        TEM2
                CCS        OMEGAPD
                AD        ONE
                TCF        +2
                AD        ONE
                EXTEND                        # WE NOW HAVE ABS(OMEGAPD,QD,RD)
                INDEX        TEM2
                MP        OMEGAPD
                EXTEND
                MP        BIT11                # 1/16
                EXTEND
                INDEX        TEM2                #                  2
                DV        1JACC                # UNITS PI/4 RAD/SEC
                TS        L
                CA        DELERLIM
                TC        LIMITSUB
                INDEX        TEM2
                TS        DELPEROR        # LAG ANGLE = OMEGA ABS(OMEGA)/2 ACCEL
                CCS        TEM2
                TCF        CDUWXFR

# HAUSKEEPING AND RETURN

TCQCDUW                CA        ECDUWUSR
                TS        EBANK                # RETURN USER'S EBANK

                TC        INTPRET
                SETPD        GOTO
                        0
                        QCDUWUSR        # NORMAL AND ABNORMAL RETURN TO USER

# Page 919
# THRUST VECTOR FILTER SUBROUTINE

FLTRSUB                EXTEND
                QXCH        TEM2
                TS        TEM3                # SAVE ORIGINAL OFFSET
                COM                        # ONE MCT, NO WDS, CAN BE SAVED IF NEG OF
                AD        L                #        ORIG OFFSET ARRIVES IN A, BUT IT'S
                EXTEND                        #         NOT WORTH THE INCREASED OBSCURITY.
                INDEX        NDXCDUW
                MP        GAINFLTR
                TS        L                # INCR TO OFFSET, UNLIMITED
                CA        DUNFVLIM        # SAME LIMIT FOR Y AND Z
                TC        LIMITSUB        # YIELDS INCR TO OFFSET, LIMITED
                AD        TEM3                # ORIGINAL OFFSET
                TS        L                # TOTAL OFFSET, UNLIMITED
                CA        UNFVLIM                # SAME LIMIT FOR Y AND Z
                TC        LIMITSUB        # YIELDS TOTAL OFFSET, LIMITED
                TC        TEM2

# SUBR TO TEST THE ANGLE BETWEEN THE PROPOSED WINDOW AND THRUST CMD VCTS

UNWCTEST         DOT        DSQ
                        UNX/2
                DSU        BMN
                        DOTSWFMX
                        DCMCL
                SSP        RVQ                # RVQ FOR ALT CHOICE IF DOT MAGN TOO LARGE
                        FLAGOODW        #         ZEROING WINDOW GOOD FLAG
                        0

# Page 920
# NB2CDUSP RETURNS THE 2'S COMPLEMENT, PI, SP CDU ANGLES X,Y,Z IN MPAC,+1,+2 GIVEN THE MATRIX WHOSE ROW VECTORS
# ARE THE SEMI-UNIT NAV BASE VECTORS X,Y,X EXPRESSED IN STABLE MEMBER COORDINATES, LOCATED AT 0 IN THE PUSH LIST.
# NB2CDUSP USES THE ARCTRGSP WHICH HAS A MAXIMUM ERROR OF +-4 BITS.

NB2CDUSP        DLOAD        DSQ
                        2
                BDSU        BPL
                        DP1/4TH
                        +3
                DLOAD
                        ZEROVECS        # IN CASE SIN WAS SLIGHTLY > 1/2
                SQRT        EXIT                # YIELDS COS(CDUZ) IN UNITS OF 2

                EXTEND
                DCA        MPAC
                DDOUBL
                TS        TEM5
                TCF        +3
                CA        POSMAX                # OVERFLOW.  FETCH POSMAX, MPAC ALWAYS POS
                TS        TEM5                # COS(CDUZ) IN TEM5, UNITS 1

                INDEX        FIXLOC
                CA        2
                LXCH        MPAC
                TC        ARCTRGSP
                TS        MPAC +2                # CDUZ

                CA        ZERO
                TC        DVBYCOSM
                CA        FOUR
                TC        DVBYCOSM
                CS        TEM1
                TC        ARCTRGSP
                TS        MPAC +1                # CDUY

                CA        BIT4
                TC        DVBYCOSM
                CA        16OCT
                TC        DVBYCOSM
                CS        TEM1
                TC        ARCTRGSP
                TS        MPAC                # CDUX

                TC        INTPRET
                RVQ

16OCT                OCT        16

# Page 921
# THE ELEMENTS OF THE NAV BASE MATRIX WHICH WE MUST DIVIDE BY COS(MGA)
# ALREADY CONTAIN COS(MGA)/2 AS A FACTOR. THEREFORE THE QUOTIENT SHOULD
# ORDINARILY NEVER EXCEED 1/2 IN MAGNITUDE.  BUT IF THE MGA IS NEAR PI/2
# THEN COS(MGA) IS NEAR ZERO, AND THERE MAY BE SOME CHAFF IN THE OTHER
# ELEMENTS OF THE MATRIX WHICH WOULD PRODUCE CHAOS UNDER DIVISION.
# BEFORE DIVIDING WE MAKE SURE COS(MGA) IS AT LEAST ONE BIT LARGER
# THAN THE MAGNITUDE OF THE HIGH ORDER PART OF THE OPERAND.
#
# IF ONE OR MORE DIVIDES CANNOT BE PERFORMED, THIS MEANS THAT THE
# REQUIRED MGA IS VERY NEARLY +-PI/2 AND THEREFORE THE OTHER GIMBAL
# ANGLES ARE INDETERMINATE.  THE INNER AND OUTER GIMBAL ANGLES RETURNED
# IN THIS CASE WILL BE RANDOM MULTIPLES OF PI/2.

DVBYCOSM        AD        FIXLOC
                TS        ADDRWD                # ADRES OF OPERAND

                INDEX        ADDRWD                # FETCH NEG ABS OF OPERAND, AD TEM5, AND
                CA        0                #        SKIP DIVIDE IF RESULT NEG OR ZERO
                EXTEND
                BZMF        +2
                COM
                AD        TEM5                # C(A) ZERO OR NEG, C(TEM5) ZERO OR POS
                EXTEND
                BZMF        TSL&TCQ                # DIFFERENCE ALWAYS SMALL IF BRANCH

                EXTEND                        # TEM5 EXCEEDS ABS HIGH ORDER PART OF
                INDEX        ADDRWD                #        OPERAND BY AT LEAST ONE BIT.
                DCA        0                #        THEREFORE IT EXCEEDS THE DP OPERAND
                EXTEND                        #         AND DIVISION WILL ALWAYS SUCCEED.
                DV        TEM5
TSL&TCQ                TS        L
                LXCH        TEM1
                TC        Q

# Page 922
# ARCTRGSP RETURNS THE 2'S COMPLEMENT, PI, SP ANGLE IN THE A REGISTER GIVEN ITS SINE IN A AND ITS COSINE IN L IN
# UNITS OF 2.  THE RESULT IS AN UNAMBIGUOUS ANGLE ANYWHERE IN THE CIRCLE, WITH A MAXIMUM ERROR OF +-4 BITS.
# THE ERROR IS PRODUCED BY THE SUBROUTINE SPARCSIN WHICH IS USED ONLY IN THE REGION +-45 DEGREES.

ARCTRGSP        EXTEND
                BZF        SINZERO                # TO AVOID DIVIDING BY ZERO

                EXTEND
                QXCH        TEM4
                TS        TEM2
                CA        L
                TS        TEM3
                CA        ZERO
                EXTEND
                DV        TEM2
                EXTEND
                BZF        USECOS

                CCS        TEM3                # SIN IS SMALLER OR EQUAL
                CA        ZERO
                TCF        +4
                CS        TEM2                # IF COS NEG, REVERSE SIGN OF SIN,
                TS        TEM2                #        ANGLE = PI-ARCSIN(SIN)
                CA        NEGMAX                # PICK UP PI, 2'S COMPLEMENT
                TS        TEM3                # WE NO LONGER NEED COS
                CA        TEM2
                TC        SPARCSIN -1
                TC        ONESTO2S
                EXTEND
                MSU        TEM3
1TO2&TCQ        TC        ONESTO2S
                TC        TEM4

USECOS                CS        TEM3                # COS IS SMALLER
                TC        SPARCSIN -1        # ANGLE = SIGN(SIN)(FI/2-ARCSIN(COS))
                AD        HALF
                TS        TEM3                # WE NO LONGER NEED COS
                CCS        TEM2
                CA        TEM3
                TCF        1TO2&TCQ
                CS        TEM3
                TCF        1TO2&TCQ

SINZERO                CCS        L
                CA        ZERO
                TC        Q
                CA        NEGMAX                # PI, 2'S COMP
                TC        Q

# Page 923
# SPARCSIN TAKES AN ARGUMENT SCALED UNITY IN A AND RETURNS AN ANGLE SCALED
# 180 DEGREES IN A.  IT HAS BEEN UNIT TESTED IN THE REGION +-.94 (+-70
# DEGREES) AND THE MAXIMUM ERROR IS +-5 BITS WITH AN AVERAGE TIME OF
# 450 MICROSECONDS.  SPARCSIN -1 TAKES THE ARGUMENT SCALED TWO.  (BOB CRISP)

                DOUBLE
SPARCSIN        TS        SR
                TCF        +4
                INDEX        A
                CS        LIMITS
                TS        SR
                EXTEND
                MP        A
                TS        TEM1
                EXTEND
                MP        DPL9
                AD        DPL7
                EXTEND
                MP        TEM1
                AD        DPL5
                EXTEND
                MP        TEM1
                AD        DPL3
                EXTEND
                MP        TEM1
                AD        DPL1
                EXTEND
                MP        SR
                TC        Q
DPL1                DEC        10502
DPL3                DEC        432
DPL5                DEC        7300
DPL7                DEC        -11803
DPL9                DEC        8397

# Page 924
# LIMITSUB LIMITS THE MAGNITUDE OF THE POSITIVE OR NEGATIVE VARIABLE
# ARRIVING IN L TO THE POSITIVE LIMIT ARRIVING IN A.
# THE SIGNED LIMITED VARIABLE IS RETURNED IN A.
#
# VERSION COUTESY HUGH BLAIR-SMITH

LIMITSUB        TS        TEM1
                CA        ZERO
                EXTEND
                DV        TEM1
                CCS        A
                LXCH        TEM1
                TCF        +2
                TCF        +3
                CA        L
                TC        Q
                CS        TEM1
                TC        Q

# SUBROUTINE TO CONVERT 1'S COMP SP TO 2'S COMP

ONESTO2S        CCS        A
                AD        ONE
                TC        Q
                CS        A
                TC        Q

# NO ATTITUDE CONTROL

NOATTCNT        TC        ALARM
                OCT        00402                # NO ATTITUDE CONTROL

+2                INHINT                        # COME HERE FOR NOATTCNT WITHOUT ALARM
                TC        IBNKCALL        # RELINT AT TC INTPRET AFTER TCQCDUW
                FCADR        STOPRATE
                TCF        TCQCDUW                # RETURN TO USER SKIPPING AUTOPILOT CMDS

# MIDDLE GIMBAL ANGLE ALARM

ALARMMGA        TC        ALARM
                OCT        00401
                TCF        MGARET

# Page 925
#******************************************************************
# CONSTANTS
#******************************************************************

# ADDRESS CONSTANTS

ECDUWL                ECADR        ECDUW

# THRUST DIRECTION FILTER CONSTANTS

GAINFLTR        DEC        .2                # GAIN FILTER SANS CSM
                DEC        .1                # GAIN FILTER WITH CSM

DUNFVLIM        DEC        .007 B-1        # 7 MR MAX CHG IN F DIR IN VEH IN 2 SECS.
                                        # THIS DOES NOT ALLOW FOR S/C ROT RATE.

UNFVLIM                DEC        .129 B-1        # 129 MR MAX THRUST OFFSET.  105 MR TRAVEL
                                        # +10MR DEFL+5MR MECH MOUNT+9MR ABLATION.

# CONSTANT RELATED TO GIMBAL ANGLE COMPUTATIONS

DOTSWFMX        DEC        .93302 B-4        # LIM COLNRTY OF UNWC/2 & UNFC/2 TO 85 DEG
                                        # LOWER PART COMES FROM NEXT CONSTANT

DAXMAX                DEC        .11111111111        # DELATTX LIM TO 20 DEG IN 2 SECS, 1'S, PI
                DEC        .0111111111        # 2 DEG WHEN CSM DOCKED

DAY/2MAX        DEC        .05555555555        # LIKEWISE FOR DELATTY
                DEC        .0055555555

DAZMAX                =        DAXMAX                # LIKEWISE FOR DELATTZ

CDUZDLIM        DEC        .3888888888        # 70 DEG LIMIT FOR MGA, 1'S, PI

# CONSTANTS FOR DATA TRANSFER

DT/DELT                DEC        .05                # .1 SEC/2 SEC WHICH IS THE AUTOPILOT
                                        # CONTROL SAMPLE PERIOD/COMPUTATION PERIOD

DELERLIM        =        DAY/2MAX        #         0 DEG LIMIT FOR LAG ANGLES, 1'S, PI

# *** END OF FLY        .132 ***

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入22汤圆

发表于 2016-7-15 09:21:16 | 显示全部楼层
这全是汇编?

不知道编写者现在还能不能看得懂。

出0入4汤圆

发表于 2016-7-15 09:21:31 | 显示全部楼层
屌爆了。。

出0入8汤圆

发表于 2016-7-15 09:21:34 | 显示全部楼层
汇编?看着头晕 没有电路图发远吗不管用啊

出0入0汤圆

发表于 2016-7-15 09:23:20 | 显示全部楼层
史料啊!什么语言?

出0入0汤圆

发表于 2016-7-15 09:26:48 | 显示全部楼层
本帖最后由 RAMILE 于 2016-7-15 09:29 编辑

这个是堆栈机的汇编吧

全都是单个操作数

出0入0汤圆

发表于 2016-7-15 09:49:13 | 显示全部楼层
太厉害了,硬件也开了吧

出0入17汤圆

发表于 2016-7-15 09:55:19 来自手机 | 显示全部楼层
看不懂啊              

出0入0汤圆

发表于 2016-7-15 10:29:07 | 显示全部楼层
汇编看不懂啊,只能看个热闹

出0入0汤圆

发表于 2016-7-15 11:06:35 | 显示全部楼层
很老的汇编语言,而且为了保密。汇编命令名称估计也是单独开发的。

出0入0汤圆

发表于 2016-7-15 11:48:23 | 显示全部楼层
看不懂 跟51的不一样

出0入0汤圆

发表于 2016-7-15 12:18:42 | 显示全部楼层
在登月时曾因为电脑软件故障而报警。

出0入0汤圆

发表于 2016-7-15 12:48:35 | 显示全部楼层
全汇编???

出0入0汤圆

发表于 2016-7-15 12:48:50 | 显示全部楼层
全是汇编,好强大啊

出50入10汤圆

发表于 2016-7-15 13:42:26 | 显示全部楼层
本帖最后由 our2008 于 2016-7-15 13:44 编辑

汇编在同一个平台内,熟悉指令,熟悉一些基本的汇编功能子代码,看起来还是容易的!

只是说要移植到另一平台比较麻烦!

DOUBLE
SPARCSIN        TS        SR
                TCF        +4
                INDEX        A
                CS        LIMITS
                TS        SR
                EXTEND
                MP        A
                TS        TEM1
                EXTEND
                MP        DPL9
                AD        DPL7
                EXTEND
                MP        TEM1
                AD        DPL5
                EXTEND
                MP        TEM1
                AD        DPL3
                EXTEND
                MP        TEM1
                AD        DPL1
                EXTEND
                MP        SR
                TC        Q
DPL1                DEC        10502
DPL3                DEC        432
DPL5                DEC        7300
DPL7                DEC        -11803
DPL9                DEC        8397

这一段是取不同的系数进行计算吧!  猜的!

出0入0汤圆

发表于 2016-7-15 13:46:12 | 显示全部楼层
意义不大

出0入0汤圆

发表于 2016-7-15 13:52:15 | 显示全部楼层
可惜看不懂汇编语言

出0入4汤圆

发表于 2016-7-15 14:31:28 来自手机 | 显示全部楼层
完全看不懂

出0入4汤圆

发表于 2016-7-15 14:49:34 | 显示全部楼层
本帖最后由 atommann 于 2016-7-15 14:51 编辑

https://en.wikipedia.org/wiki/Apollo_Guidance_Computer
对 Apollo 制导计算机有详细的描述。

- 不是堆栈机
- 是第一个使用集成电路的计算机,大量的 dual three-input NOR gates, 由仙童生产
- 用了绕接技术
- 大量的只读 core rope memory,在工厂里由一些大妈完成。一些程序员给它起了一个昵称叫 LOL 存储器(Little Old Lady memory),当时的存储密度是 72 kilobytes/立方英尺
- 少量的 Magnetic-core memory
- 有一个简单的实时操作系统
- 批处理调试系统
...

挺酷的!了不起的工程!



图片来源 http://authors.library.caltech.e ... /public/visual3.htm
问题:工作台前方的彩色管子是用来干嘛的?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-7-15 14:54:42 | 显示全部楼层
atommann 发表于 2016-7-15 14:49
https://en.wikipedia.org/wiki/Apollo_Guidance_Computer
对 Apollo 制导计算机有详细的描述。

我很好奇,照片上的那些管线是干什么用的?还五颜六色的?

出0入0汤圆

发表于 2016-7-15 17:29:21 | 显示全部楼层
1969年。。肯定是汇编啦,那时c语言还没出来呢

出0入0汤圆

发表于 2016-7-15 17:34:50 来自手机 | 显示全部楼层
这才是屌炸天

出0入4汤圆

发表于 2016-7-15 21:38:22 | 显示全部楼层
中国公司应该没有经历过这个阶段。
没有根基呀

出0入4汤圆

发表于 2016-7-15 23:06:13 | 显示全部楼层
laujc 发表于 2016-7-15 21:38
中国公司应该没有经历过这个阶段。
没有根基呀

是的,缺少基础科学

出0入0汤圆

发表于 2016-7-15 23:13:31 | 显示全部楼层
土星5号火箭自动驾驶仪的硬件信息:
http://www.frantone.com/designwritings/design_writings_LVDC.html

出0入0汤圆

发表于 2016-7-16 00:00:08 | 显示全部楼层
本帖最后由 yzhu 于 2016-7-16 00:01 编辑

中国的(晶体管)小型计算机技术曾经还是不错的,好像型号是DJ什么的。

出0入93汤圆

发表于 2016-7-16 10:46:30 | 显示全部楼层
zxq1990 发表于 2016-7-15 17:29
1969年。。肯定是汇编啦,那时c语言还没出来呢

1969年就肯定是是汇编?不见得吧,虽然这里列出的确确实实是汇编。

编程语言的时间表:
最早的编程语言是汇编语言,于19世纪出现,由最早的程序员Ada完成。
100多年后的1946年,出现了ENIAC。差不多那个时候吧,有了机器语言。
其后不到10年的1954年,就出现了高级语言FORTRAN。

1969年C语言还没有出来,但是他的爸爸B语言已经出现了,他的爷爷BCPL都生儿子了,FORTRAN都换好几代了。
再说了,对于航天任务来说,C语言没有什么优势,远不如ADA。

出0入0汤圆

发表于 2016-7-16 10:49:58 | 显示全部楼层
电子受时代限制现在看来不怎么样,不过机械一点不落伍,看看阿波罗的舱门

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-7-16 10:59:01 | 显示全部楼层
这张好像是阿波罗上的控制系统,几年前拍的,有点忘记了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-7-16 11:12:23 | 显示全部楼层
1969年用什么计算机?Apple II是基于沃兹尼克于1977年的设计。

出0入0汤圆

发表于 2016-7-16 13:52:08 来自手机 | 显示全部楼层
碉堡了,这都有

出0入0汤圆

发表于 2016-7-16 14:04:11 | 显示全部楼层
好叼的代码

出0入0汤圆

发表于 2016-7-16 23:41:59 | 显示全部楼层
我是来围观登月科技的

出0入0汤圆

发表于 2016-7-17 10:49:16 来自手机 | 显示全部楼层
用的什么处理器

出0入0汤圆

发表于 2016-7-17 17:13:28 | 显示全部楼层
会不会有好事之人根据代码反推算法呢?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-7 18:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表