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.

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

Page 332

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

Page 333

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

Page 334

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

Page 335

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

Page 336

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

Page 337 Note: This page is empty


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