Source Code

These source-code files derive from a printout of Luminary 210 (Apollo 15-17 Lunar Module guidance computer program), from the personal library of original AGC developer Don Eyles, digitally photographed at archive.org, financially sponsored by Jim Lawton, and transcribed to source code by a team of volunteers. This colorized, syntax-highlighted form was created by assembling that transcribed source code. Note that the full page images are available on the Virtual AGC project page at archive.org, while reduced-size images are presented at the VirtualAGC project website. Report or fix any transcription errors at the Virtual AGC project code repository.

Notations on the program listing read, in part:

	GAP: ASSEMBLE REVISION 210 OF AGC PROGRAM LUMINARY 
	BY NASA 2021112-161 17:11 MAR. 19,1971
Note that the date is the date of the printout, not the date of the program revision.

014572,000002:                                                                                                  ## Copyright:   Public domain.
014573,000003:                                                                                                  ## Filename:    LEM_GEOMETRY.agc
014574,000004:                                                                                                  ## Purpose:     A section of Luminary revision 210.
014575,000005:                                                                                                  ##              It is part of the source code for the Lunar Module's (LM)
014576,000006:                                                                                                  ##              Apollo Guidance Computer (AGC) for Apollo 15-17.
014577,000007:                                                                                                  ##              This file is intended to be a faithful transcription, except
014578,000008:                                                                                                  ##              that the code format has been changed to conform to the
014579,000009:                                                                                                  ##              requirements of the yaYUL assembler rather than the
014580,000010:                                                                                                  ##              original YUL assembler.
014581,000011:                                                                                                  ## Reference:   pp. 332-337
014582,000012:                                                                                                  ## Assembler:   yaYUL
014583,000013:                                                                                                  ## Contact:     Ron Burkey <info@sandroid.org>.
014584,000014:                                                                                                  ## Website:     www.ibiblio.org/apollo/index.html
014585,000015:                                                                                                  ## Mod history: 2016-11-17 JL   Created from Luminary131 version.
014586,000016:                                                                                                  ##              2016-11-24 HG   Transcribed
014587,000017:                                                                                                  ##              2016-12-23 RSB  Proofed comment text with octopus/ProoferComments
014588,000018:                                                                                                  ##                              and fixed all errors found.
014589,000019: 

Page 332

014591,000021: 23,2041                                           BANK     23                                    
014592,000022: 13,2000                                           SETLOC   LEMGEOM                               
014593,000023: 13,2000                                           BANK                                           
014594,000024: 
014595,000025: 13,2070  30,2000                                  SBANK=   LOWSUPER                              
014596,000026: 13,2070  E5,1642                                  EBANK=   XSM                                   
014597,000027: 
014598,000028:                                                                                                  #  THESE TWO ROUTINES COMPUTE THE ACTUAL STATE VECTOR FOR LM,CSM BY ADDING
014599,000029:                                                                                                  #  THE CONIC R,V AND THE DEVIATIONSR,V. THE STATE VECTORS ARE CONVERTED TO
014600,000030:                                                                                                  #  METERS B-29 AND METERS/CSEC B-7 AND STORED APPROPRIATELY IN RN,VN OR
014601,000031:                                                                                                  #  R-OTHER , V-OTHER FOR DOWNLINK. THE ROUTINES NAMES ARE SWITCHED IN THE
014602,000032:                                                                                                  #  OTHER VEHICLES COMPUTER.
014603,000033: 
014604,000034:                                                                                                  #  INPUT
014605,000035:                                                                                                  #    STATE VECTOR IN TEMPORARY STORAGE AREA
014606,000036:                                                                                                  #    IF STATE VECTOR IS SCALED POS B27 AND VEL B5
014607,000037:                                                                                                  #       SET X2 TO +2
014608,000038:                                                                                                  #    IF STATE VECTOR IS SCALED POS B29 AND VEL B7
014609,000039:                                                                                                  #       SET X2 TO 0
014610,000040: 
014611,000041:                                                                                                  #  OUTPUT
014612,000042:                                                                                                  #    R(T) IN RN, V(T) IN VN, T IN PIPTIME
014613,000043:                                                                                                  #  OR
014614,000044:                                                                                                  #    R(T) IN R-OTHER, V(T) IN V-OTHER   (T IS DEFINED BY T-OTHER)
014615,000045: 
014616,000046: 13,2070                                           COUNT*   $$/GEOM                               
014617,000047: 13,2070           43414        SVDWN2             BOF      RVQ                                   #  SW=1=AVETOMID DOING W-MATRIX INTEG.
014618,000048: 13,2071           04756                                    AVEMIDSW                              
014619,000049: 13,2072           26073                                    +1                                    
014620,000050: 13,2073           53775                           VLOAD    VSL*                                  
014621,000051: 13,2074           01521                                    TDELTAV                               
014622,000052: 13,2075           57605                                    0          -7,2                       
014623,000053: 13,2076           53655                           VAD      VSL*                                  
014624,000054: 13,2077           01535                                    RCV                                   
014625,000055: 13,2100           57576                                    0,2                                   
014626,000056: 13,2101           25220                           STOVL    RN                                    
014627,000057: 13,2102           01527                                    TNUV                                  
014628,000058: 13,2103           53257                           VSL*     VAD                                   
014629,000059: 13,2104           57602                                    0          -4,2                       
014630,000060: 13,2105           01543                                    VCV                                   
014631,000061: 13,2106           77657                           VSL*                                           
014632,000062: 13,2107           57576                                    0,2                                   
014633,000063: 13,2110           15226                           STODL    VN                                    
014634,000064: 13,2111           01517                                    TET                                   
014635,000065: 13,2112           01234                           STORE    PIPTIME                               
014636,000066: 13,2113           77616                           RVQ                                            
014637,000067: 

Page 333

014639,000069: 13,2114           53775        SVDWN1             VLOAD    VSL*                                  
014640,000070: 13,2115           01521                                    TDELTAV                               
014641,000071: 13,2116           57605                                    0          -7,2                       
014642,000072: 13,2117           53655                           VAD      VSL*                                  
014643,000073: 13,2120           01535                                    RCV                                   
014644,000074: 13,2121           57576                                    0,2                                   
014645,000075: 13,2122           25716                           STOVL    R-OTHER                               
014646,000076: 13,2123           01527                                    TNUV                                  
014647,000077: 13,2124           53257                           VSL*     VAD                                   
014648,000078: 13,2125           57602                                    0          -4,2                       
014649,000079: 13,2126           01543                                    VCV                                   
014650,000080: 13,2127           77657                           VSL*                                           
014651,000081: 13,2130           57576                                    0,2                                   
014652,000082: 13,2131           01724                           STORE    V-OTHER                               
014653,000083: 13,2132           77616                           RVQ                                            
014654,000084: 

Page 334

014656,000086:                                                                                                  #           THE FOLLOWING ROUTINE TAKES A HALF UNIT TARGET VECTOR REFERRED TO NAV BASE COORDINATES AND FINDS BOTH
014657,000087:                                                                                                  #  GIMBAL ORIENTATIONS AT WHICH THE RR MIGHT SIGHT THE TARGET. THE GIMBAL ANGLES CORRESPONDING TO THE PRESENT MODE
014658,000088:                                                                                                  #  ARE LEFT IN MODEA AND THOSE WHICH WOULD BE USED AFTER A REMODE IN MODEB. THIS ROUTINE ASSUMES MODE 1 IS TRUNNION
014659,000089:                                                                                                  #  ANGLE LESS THAN 90 DEGS IN ABS VALUE WITH ARBITRARY SHAFT, WITH A CORRESPONDING DEFINITION FOR MODE 2. MODE
014660,000090:                                                                                                  #  SELECTION AND LIMIT CHECKING ARE DONE ELSEWHERE.
014661,000091: 
014662,000092:                                                                                                  #           THE MODE 1 CONFIGURATION IS CALCULATED FROM THE VECTOR AND THEN MODE 2 IS FOUND USING THE RELATIONS
014663,000093: 
014664,000094:                                                                                                  #           S(2) = 180 + S(1)
014665,000095:                                                                                                  #           T(2) = 180 - T(1)
014666,000096: 
014667,000097:                                                                                                  #      THE VECTOR ARRIVES IN MPAC WHERE TRG*SMNG OR *SMNB* WILL HAVE LEFT IT.
014668,000098: 
014669,000099: 13,2133           00041        RRANGLES           STORE    32D                                   
014670,000100: 13,2134           57545                           DLOAD    DCOMP                                 #  SINCE WE WILL FIND THE MODE 1 SHAFT
014671,000101: 13,2135           00043                                    34D                                   #  ANGLE LATER, WE CAN FIND THE MODE 1
014672,000102: 13,2136           67401                           SETPD    ASIN                                  #  TRUNNION BY SIMPLY TAKING THE ARCSIN OF
014673,000103: 13,2137           00001                                    0                                     #  THE Y COMPONENT, THE ASIN GIVING AN
014674,000104: 13,2140           44206                           PUSH     BDSU                                  #  ANSWER WHOSE ABS VAL IS LESS THAN 90 DEG
014675,000105: 13,2141           24005                                    LODPHALF                              
014676,000106: 13,2142           14005                           STODL    4                                     #  MODE 2 TRUNNION TO 4.
014677,000107: 
014678,000108: 13,2143           24007                                    LO6ZEROS                              
014679,000109: 13,2144           24043                           STOVL    34D                                   #  UNIT THE PROJECTION OF THE VECTOR
014680,000110: 13,2145           00041                                    32D                                   #    IN THE X-Z PLANE
014681,000111: 13,2146           41056                           UNIT     BOVB                                  #  IF OVERFLOW,TARGET VECTOR IS ALONG Y
014682,000112: 13,2147           52412                                    LUNDESCH                              #  CALL FOR MANEUVER UNLESS ON LUNAR SURF
014683,000113: 13,2150           14041                           STODL    32D                                   #  PROJECTION VECTOR.
014684,000114: 13,2151           00041                                    32D                                   
014685,000115: 13,2152           44142                           SR1      STQ                                   
014686,000116: 13,2153           00051                                    S2                                    
014687,000117: 13,2154           14023                           STODL    SINTH                                 #  USE ARCTRIG SINCE SHAFT COULD BE ARB.
014688,000118: 13,2155           00045                                    36D                                   
014689,000119: 13,2156           77742                           SR1                                            
014690,000120: 13,2157           34021                           STCALL   COSTH                                 
014691,000121: 13,2160           47303                                    ARCTRIG                               
014692,000122: 

Page 335

014694,000124: 13,2161           43206                           PUSH     DAD                                   #  MODE 1 SHAFT TO 2.
014695,000125: 13,2162           24005                                    LODPHALF                              
014696,000126: 13,2163           24007                           STOVL    6                                     
014697,000127: 13,2164           00005                                    4                                     
014698,000128: 13,2165           77634                           RTB                                            #  FIND MODE 2 CDU ANGLES.
014699,000129: 13,2166           21645                                    2V1STO2S                              
014700,000130: 13,2167           25111                           STOVL    MODEB                                 
014701,000131: 13,2170           00001                                    0                                     
014702,000132: 13,2171           77634                           RTB                                            #  MODE 1 ANGLES TO MODE A.
014703,000133: 13,2172           21645                                    2V1STO2S                              
014704,000134: 13,2173           01107                           STORE    MODEA                                 
014705,000135: 13,2174           77776                           EXIT                                           
014706,000136: 
014707,000137: 13,2175           40110                           CS       RADMODES                              #  SWAP MODEA AND MODEB IF RR IN MODE 2.
014708,000138: 13,2176           74731                           MASK     ANTENBIT                              
014709,000139: 13,2177           10000                           CCS      A                                     
014710,000140: 13,2200           12204                           TCF      +4                                    
014711,000141: 
014712,000142: 13,2201           53107                           DXCH     MODEA                                 
014713,000143: 13,2202           53111                           DXCH     MODEB                                 
014714,000144: 13,2203           53107                           DXCH     MODEA                                 
014715,000145: 
014716,000146: 13,2204           06060                           TC       INTPRET                               
014717,000147: 13,2205           77650                           GOTO                                           
014718,000148: 13,2206           00051                                    S2                                    
014719,000149: 

Page 336

014721,000151:                                                                                                  #  GIVEN RR TRUNNION AND SHAFT (T,S) IN TANGNB,+1, FIND THE ASSOCIATED
014722,000152:                                                                                                  #  LINE OF SIGHT IN NAV BASE AXES.  THE HALF UNIT VECTOR, .5(SIN(S)COS(T),
014723,000153:                                                                                                  #  -SIN(T),COS(S)COS(T)) IS LEFT IN MPAC AND 32D.
014724,000154: 
014725,000155: 23,2000                                           SETLOC   INFLIGHT                              
014726,000156: 23,2000                                           BANK                                           
014727,000157: 
014728,000158: 23,2041                                           COUNT*   $$/GEOM                               
014729,000159: 
014730,000160: 23,2041           47135        RRNB               SLOAD    RTB                                   
014731,000161: 23,2042           03753                                    TANGNB                                
014732,000162: 23,2043           21606                                    CDULOGIC                              
014733,000163: 23,2044           41401                           SETPD    PUSH                                  #  TRUNNION ANGLE TO 0
014734,000164: 23,2045           00001                                    0                                     
014735,000165: 23,2046           57556                           SIN      DCOMP                                 
014736,000166: 23,2047           14043                           STODL    34D                                   #  Y COMPONENT
014737,000167: 
014738,000168: 23,2050           41546                           COS      PUSH                                  #  .5 COS(T) TO 0
014739,000169: 23,2051           47135                           SLOAD    RTB                                   
014740,000170: 23,2052           03754                                    TANGNB     +1                         
014741,000171: 23,2053           21606                                    CDULOGIC                              
014742,000172: 23,2054           71406        RRNB1              PUSH     COS                                   #  SHAFT ANGLE TO 2
014743,000173: 23,2055           72405                           DMP      SL1                                   
014744,000174: 23,2056           00001                                    0                                     
014745,000175: 23,2057           14045                           STODL    36D                                   #  Z COMPONENT
014746,000176: 
014747,000177: 23,2060           41356                           SIN      DMP                                   
014748,000178: 23,2061           77752                           SL1                                            
014749,000179: 23,2062           24041                           STOVL    32D                                   
014750,000180: 23,2063           00041                                    32D                                   
014751,000181: 23,2064           77616                           RVQ                                            
014752,000182: 
014753,000183:                                                                                                  #  THIS ENTRY TO RRNB REQUIRES THE TRUNNION AND SHAFT ANGLES IN MPAC AND MPAC +1 RESPECTIVELY
014754,000184: 
014755,000185: 23,2065           14025        RRNBMPAC           STODL    20D                                   #  SAVE SHAFT CDU IN 21.
014756,000186: 23,2066           00155                                    MPAC                                  #  SET MODE TO DP.  (THE PRECEEDING STORE
014757,000187:                                                                                                  #  MAY BE DP, TP OR VECTOR.)
014758,000188: 23,2067           40234                           RTB      SETPD                                 
014759,000189: 23,2070           21606                                    CDULOGIC                              
014760,000190: 23,2071           00001                                    0                                     
014761,000191: 23,2072           73406                           PUSH     SIN                                   #  TRUNNION ANGLE TO 0
014762,000192: 23,2073           77676                           DCOMP                                          
014763,000193: 23,2074           14043                           STODL    34D                                   #  Y COMPONENT
014764,000194: 23,2075           41546                           COS      PUSH                                  #  .5COS(T) TO 0
014765,000195: 23,2076           47135                           SLOAD    RTB                                   #  PICK UP CDU'S.
014766,000196: 23,2077           00026                                    21D                                   
014767,000197: 23,2100           21606                                    CDULOGIC                              
014768,000198: 23,2101           77650                           GOTO                                           
014769,000199: 23,2102           46054                                    RRNB1                                 

Page 337 Note: This page is empty


End of include-file LEM_GEOMETRY.agc.  Parent file is MAIN.agc