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.

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

Page 332

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

Page 333

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

Page 334

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

Page 335

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

Page 336

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

Page 337 Note: This page is empty


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