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,1971Note 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