Source Code
![]() |
These source-code files are part of a reconstructed copy of Comanche 72/3 (AKA Manche72 revision 3),
the final, flown mission release of the Apollo Guidance Computer (AGC) Command Module (CM) software
for Apollo 13.
The starting point was the source code of Comanche 72 (itself previously reconstructed). Comanche 72 source code was then modified by incorporating changes known from contemporary documentation to have been made between revisions 72 and 72/3. The resulting code assembles to have identical memory-bank checksums as those specified in NASA drawing 2021153G; this gives reasonably high confidence that the changes that have been made are correct. In places where ambiguity exists, this ambiguity is discussed in "## Reconstruction:" comments. Since no contemporary listings of Comanche 72/3 are available as source material, all comments and labels are approximate. They have been taken from other AGC programs where possible, or, in some places, written from scratch to match what we believe would have been in the original listing. |
021135,000002: ## Copyright: Public domain. 021136,000003: ## Filename: R31.agc 021137,000004: ## Purpose: A section of Manche72 revision 3. 021138,000005: ## It is part of the reconstructed source code for the final, flown 021139,000006: ## release of the software for the Command Module's (CM) Apollo 021140,000007: ## Guidance Computer (AGC) for Apollo 13. No original listings 021141,000008: ## of this program are available; instead, this file was recreated 021142,000009: ## from a reconstructed copy of Comanche 072. It has been adapted 021143,000010: ## such that the resulting bugger words exactly match those 021144,000011: ## specified for Manche72 revision 3 in NASA drawing 2021153G, 021145,000012: ## which gives relatively high confidence that the reconstruction 021146,000013: ## is correct. 021147,000014: ## Assembler: yaYUL 021148,000015: ## Contact: Ron Burkey <info@sandroid.org>. 021149,000016: ## Website: www.ibiblio.org/apollo/index.html 021150,000017: ## Mod history: 2024-05-19 MAS Created from Comanche 072. 021151,000018: 021152,000019: 34,2002 BANK 34 021153,000020: 31,2000 SETLOC R31 021154,000021: 31,2000 BANK 021155,000022: 021156,000023: 31,2000 COUNT* $$/R31 021157,000024: 021158,000025: 31,2000 35073 R31CALL CAF PRIO3 021159,000026: 31,2001 05163 TC FINDVAC 021160,000027: 31,2002 E4,1770 EBANK= SUBEXIT 021161,000028: 31,2002 02032 62064 2CADR V83CALL 021162,000029: 021163,000030: 31,2004 35055 DSPDELAY CAF 1SEC 021164,000031: 31,2005 04676 TC BANKCALL 021165,000032: 31,2006 01732 CADR DELAYJOB 021166,000033: 31,2007 31044 CA EXTVBACT 021167,000034: 31,2010 75020 MASK BIT12 021168,000035: 31,2011 00006 EXTEND 021169,000036: 31,2012 12004 BZF DSPDELAY 021170,000037: 021171,000038: 31,2013 30105 DISPN5X CA FLAGWRD9 # TEST R31FLAG (IN SUNDANCE R31FLAG WILL 021172,000039: 31,2014 75030 MASK BIT4 # ALWAYS BE SET AS R34 DOES NOT EXIST) 021173,000040: 31,2015 00006 EXTEND 021174,000041: 31,2016 12021 BZF +3 021175,000042: 31,2017 32136 CAF V16N54 # R31 USE NOUN 54 021176,000043: 31,2020 02022 TC +2 021177,000044: 31,2021 32137 CAF V16N53 # R34 USE NOUN 53 021178,000045: 31,2022 04676 TC BANKCALL 021179,000046: 31,2023 20561 CADR GOMARKF 021180,000047: 31,2024 05641 TC B5OFF 021181,000048: 31,2025 05641 TC B5OFF 021182,000049: 31,2026 12013 TCF DISPN5X 021183,000050: 021184,000051: 31,2027 06006 V83 TC INTPRET 021185,000052: 31,2030 77650 GOTO 021186,000053: 31,2031 62171 HAVEBASE # INTEG STATE VECTORS 021187,000054: 31,2032 06006 V83CALL TC INTPRET 021188,000055: 31,2033 77650 GOTO 021189,000056: 31,2034 62140 STATEXTP # EXTRAPOLATE STATE VECTORS 021190,000057: 31,2035 52375 COMPDISP VLOAD VSU 021191,000058: 31,2036 00001 RATT 021192,000059: 31,2037 02327 RONE 021193,000060: 31,2040 51406 PUSH ABVAL # RATT-RONE TO 0D PD= 6 021194,000061: 31,2041 02321 STORE RANGE # METERS B-29 021195,000062: 31,2042 77301 NORM VLOAD 021196,000063: 31,2043 00047 X1 # RATT-RONE PD= 0 021197,000064: 31,2044 77762 VSR1 021198,000065: 31,2045 53457 VSL* UNIT 021199,000066: 31,2046 20201 0,1 021200,000067: 31,2047 52315 PDVL VSU # UNIT(LOS) TO 0D PD= 6 021201,000068: 31,2050 00007 VATT 021202,000069: 31,2051 02335 VONE 021203,000070: 31,2052 77641 DOT # (VATT-VONE).UNIT(LOS) PD= 0 021204,000071: 31,2053 77752 SL1 021205,000072: 31,2054 36323 STCALL RRATE # RANGE RATE M/CS B-7 021206,000073: 31,2055 47501 CDUTRIG # TO INITIALIZE FOR *NBSM* 021207,000074: 31,2056 77624 CALL 021208,000075: 31,2057 62311 R34LOS # NOTE. PDL MUST = 0. 021209,000076: 31,2060 53575 R34ANG VLOAD UNIT 021210,000077: 31,2061 02327 RONE 021211,000078: 31,2062 77715 PDVL # UR TO 0D PD= 6 021212,000079: 31,2063 15332 THISAXIS # UNITX FOR CM, UNITZ FOR LM 021213,000080: 31,2064 77214 BON VLOAD # CHK R31FLAG. ON=R31 THETA, OFF=R34 PHI 021214,000081: 31,2065 04713 R31FLAG 021215,000082: 31,2066 62070 +2 # R31-THETA 021216,000083: 31,2067 00015 12D 021217,000084: 31,2070 77624 CALL 021218,000085: 31,2071 47650 *NBSM* 021219,000086: 31,2072 41505 VXM PUSH # UXORZ TO 6D PD=12D 021220,000087: 31,2073 01736 REFSMMAT 021221,000088: 31,2074 72431 VPROJ VSL2 021222,000089: 31,2075 00001 0D 021223,000090: 31,2076 53445 BVSU UNIT 021224,000091: 31,2077 00007 6D 021225,000092: 31,2100 47315 PDVL VXV # UP/2 TO 12D PD=18D 021226,000093: 31,2101 02327 RONE 021227,000094: 31,2102 02335 VONE 021228,000095: 31,2103 47256 UNIT VXV 021229,000096: 31,2104 02327 RONE 021230,000097: 31,2105 63241 DOT PDVL # SIGN TO 12D, UP/2 TO MPAC PD=18D 021231,000098: 31,2106 00015 12D 021232,000099: 31,2107 50372 VSL1 DOT # UP.UXORZ 021233,000100: 31,2110 00007 6D 021234,000101: 31,2111 72565 SIGN SL1 021235,000102: 31,2112 00015 12D 021236,000103: 31,2113 77726 ACOS 021237,000104: 31,2114 26325 STOVL RTHETA 021238,000105: 31,2115 02327 RONE 021239,000106: 31,2116 51041 DOT BPL 021240,000107: 31,2117 00007 6D 021241,000108: 31,2120 62125 +5 021242,000109: 31,2121 44345 DLOAD BDSU # IF UXORZ.R NEG, RTHETA = 1 - RTHETA 021243,000110: 31,2122 02325 RTHETA 021244,000111: 31,2123 15342 DPPOSMAX 021245,000112: 31,2124 02325 STORE RTHETA # RTHETA BETWEEN 0 AND 1 REV. 021246,000113: 31,2125 77776 EXIT 021247,000114: 31,2126 35027 CAF BIT5 # HAVE WE BEEN ANSWERED 021248,000115: 31,2127 71044 MASK EXTVBACT 021249,000116: 31,2130 00006 EXTEND 021250,000117: 31,2131 15550 BZF ENDEXT # YES, DIE 021251,000118: 31,2132 41044 CS EXTVBACT 021252,000119: 31,2133 75020 MASK BIT12 021253,000120: 31,2134 27044 ADS EXTVBACT 021254,000121: 021255,000122: 31,2135 12027 TCF V83 021256,000123: 31,2136 04066 V16N54 VN 1654 021257,000124: 31,2137 04065 V16N53 VN 1653 021258,000125: 021259,000126: # STATEXTP DOES AN INITIAL PRECISION EXTRAPOLATION OF THE 021260,000127: # LEM STATE VECTOR TO PRESENT TIME OR TO PIPTIME IF AV G 021261,000128: # IS ON AND SAVES AS BASE VECTOR. IF AV G IS ON RN + VN 021262,000129: # ARE USED AS THE CM STATE VECTOR AND THE INITIAL R RDOT 021263,000130: # RTHETA ARE COMPUTED WITH NO FURTHER INTEGRATION. IF AV 021264,000131: # G IS OFF A PRECISION EXTRAPOLATION IS MADE OF THE CM 021265,000132: # STATE VECTOR TO PRESENT TIME AND..... 021266,000133: 021267,000134: # THE CM + LM STATE VECTORS ARE INTEGRATED TO PRES TIME 021268,000135: # USING PRECISION OR CONIC AS SURFFLAG IS SET OR CLEAR. 021269,000136: 021270,000137: # IF AV G IS ON THEN SUBSEQUENT PASSES WILL PROVIDE 021271,000138: # USE OF RN + VN AS CM STATE VECTOR AND THE LM STATE 021272,000139: # VECTOR WILL BE PRECISION INTEGRATED USING LEMPREC 021273,000140: 021274,000141: # IF SURFFLAG IS SET. 021275,000142: # CM STATE VECTOR RONE VONE + LM STATE VECTOR RATT 021276,000143: # VATT ARE USED IN COMPUTING R RDOT RTHETA. 021277,000144: 021278,000145: 021279,000146: 31,2140 43034 STATEXTP RTB BOF # INITIAL INTEGRATION 021280,000147: 31,2141 45510 LOADTIME 021281,000148: 31,2142 03751 V37FLAG 021282,000149: 31,2143 62146 +3 # AV G OFF, USE PRES TIME 021283,000150: 31,2144 77624 CALL 021284,000151: 31,2145 62273 GETRVN # ON, USE RN VN PIPTIME 021285,000152: 31,2146 02343 STORE BASETIME # PRES TIME OR PIPTIME 021286,000153: 31,2147 34041 STCALL TDEC1 021287,000154: 31,2150 27114 LEMPREC 021288,000155: 31,2151 77775 VLOAD # BASE VECTOR, LM 021289,000156: 31,2152 00017 RATT1 021290,000157: 31,2153 26225 STOVL BASEOTP # POS. 021291,000158: 31,2154 00025 VATT1 021292,000159: 31,2155 02241 STORE BASEOTV # VEL. 021293,000160: 31,2156 71214 BON DLOAD 021294,000161: 31,2157 03711 V37FLAG 021295,000162: 31,2160 62035 COMPDISP # COMPUTE R RDOT RTHETA FROM 021296,000163: # RONE(RN) VONE(VN) RATT+VATT(LEMPREC) 021297,000164: 31,2161 00015 TAT 021298,000165: 31,2162 34041 STCALL TDEC1 021299,000166: 31,2163 27100 CSMPREC 021300,000167: 31,2164 77775 VLOAD # BASE VECTOR, CM 021301,000168: 31,2165 00017 RATT1 021302,000169: 31,2166 26255 STOVL BASETHP # POS. 021303,000170: 31,2167 00025 VATT1 021304,000171: 31,2170 02263 STORE BASETHV # VEL. 021305,000172: 31,2171 47014 HAVEBASE BON RTB # SUBSEQUENT INTEGRATIONS 021306,000173: 31,2172 03711 V37FLAG 021307,000174: 31,2173 62256 GETRVN5 021308,000175: 31,2174 45510 LOADTIME 021309,000176: 31,2175 34041 STCALL TDEC1 # AV G OFF. SET INTEG. OF CM 021310,000177: 31,2176 27446 INTSTALL 021311,000178: 31,2177 43175 VLOAD CLEAR 021312,000179: 31,2200 02255 BASETHP 021313,000180: 31,2201 00263 MOONFLAG 021314,000181: 31,2202 25535 STOVL RCV 021315,000182: 31,2203 02263 BASETHV 021316,000183: 31,2204 15543 STODL VCV 021317,000184: 31,2205 02343 BASETIME 021318,000185: 31,2206 43014 BOF SET # GET APPROPRIATE MOONFLAG SETTING 021319,000186: 31,2207 04343 MOONTHIS 021320,000187: 31,2210 62212 +2 021321,000188: 31,2211 00063 MOONFLAG 021322,000189: 31,2212 77614 CLEAR 021323,000190: 31,2213 01673 INTYPFLG 021324,000191: 31,2214 43014 BON SET 021325,000192: 31,2215 04307 SURFFLAG 021326,000193: 31,2216 62220 +2 # PREC. IF LM DOWN 021327,000194: 31,2217 01473 INTYPFLG # CONIC IF LM NOT DOWN 021328,000195: 31,2220 35517 STCALL TET 021329,000196: 31,2221 27144 INTEGRVS # INTEGRATION --- AT LAST--- 021330,000197: 31,2222 77775 VLOAD 021331,000198: 31,2223 00001 RATT 021332,000199: 31,2224 26327 STOVL RONE 021333,000200: 31,2225 00007 VATT 021334,000201: 31,2226 16335 STODL VONE # GET SET FOR CONIC EXTRAP.,OTHER 021335,000202: 31,2227 00015 TAT 021336,000203: 31,2230 45014 BON CALL 021337,000204: 31,2231 04307 SURFFLAG 021338,000205: 31,2232 62267 GETRVN6 # LEMPREC IF LM DOWN 021339,000206: 31,2233 27446 INTSTALL # ..CONIC IF NOT DOWN 021340,000207: 31,2234 77614 SET 021341,000208: 31,2235 01473 INTYPFLG 021342,000209: 31,2236 00041 OTHINT STORE TDEC1 # ENTERED IF AV G ON TO INTEG LM 021343,000210: 31,2237 43175 VLOAD CLEAR 021344,000211: 31,2240 02225 BASEOTP 021345,000212: 31,2241 00263 MOONFLAG 021346,000213: 31,2242 25535 STOVL RCV 021347,000214: 31,2243 02241 BASEOTV 021348,000215: 31,2244 15543 STODL VCV 021349,000216: 31,2245 02343 BASETIME 021350,000217: 31,2246 43014 BOF SET 021351,000218: 31,2247 04343 MOONTHIS 021352,000219: 31,2250 62252 +2 021353,000220: 31,2251 00063 MOONFLAG 021354,000221: 31,2252 35517 STCALL TET 021355,000222: 31,2253 27144 INTEGRVS 021356,000223: 31,2254 77650 GOTO 021357,000224: 31,2255 62035 COMPDISP # COMPUTE R RDOT RTHETA 021358,000225: 31,2256 77624 GETRVN5 CALL # AV G ON 021359,000226: 31,2257 62273 GETRVN 021360,000227: 31,2260 45014 BON CALL 021361,000228: 31,2261 04307 SURFFLAG 021362,000229: 31,2262 62267 GETRVN6 # LM DOWN, LMPREC 021363,000230: 31,2263 27446 INTSTALL 021364,000231: 31,2264 52014 CLEAR GOTO 021365,000232: 31,2265 01673 INTYPFLG 021366,000233: 31,2266 62236 OTHINT 021367,000234: 31,2267 34041 GETRVN6 STCALL TDEC1 021368,000235: 31,2270 27114 LEMPREC 021369,000236: 31,2271 77650 GOTO 021370,000237: 31,2272 62035 COMPDISP # COMPUTE R RDOT RTHETA 021371,000238: 31,2273 77620 GETRVN STQ 021372,000239: 31,2274 00000 0D 021373,000240: 31,2275 52175 VLOAD GOTO # AV G ON, RONE = RN VONE = VN 021374,000241: 31,2276 01171 RN # AND USE PIPTIME 021375,000242: 31,2277 62300 +1 021376,000243: 31,2300 36327 STCALL RONE 021377,000244: 31,2301 62302 +1 021378,000245: 31,2302 52175 VLOAD GOTO 021379,000246: 31,2303 01177 VN 021380,000247: 31,2304 62305 +1 021381,000248: 31,2305 16335 STODL VONE 021382,000249: 31,2306 01205 PIPTIME 021383,000250: 31,2307 77650 GOTO 021384,000251: 31,2310 00000 0D 021385,000252: 31,2000 SETLOC R34 021386,000253: 31,2000 BANK 021387,000254: 31,2311 77776 R34LOS EXIT 021388,000255: 31,2312 30036 CA CDUS 021389,000256: 31,2313 50120 INDEX FIXLOC 021390,000257: 31,2314 54011 TS 9D 021391,000258: 31,2315 30035 CA CDUT 021392,000259: 31,2316 50120 INDEX FIXLOC 021393,000260: 31,2317 54013 TS 11D 021394,000261: 31,2320 30120 CA FIXLOC 021395,000262: 31,2321 66211 AD SIX 021396,000263: 31,2322 40000 COM 021397,000264: 31,2323 50120 INDEX FIXLOC 021398,000265: 31,2324 54046 TS X1 021399,000266: 31,2325 06006 TC INTPRET 021400,000267: 31,2326 77624 CALL 021401,000268: 31,2327 46000 SXTNB 021402,000269: 31,2330 34015 STCALL 12D 021403,000270: 31,2331 62060 R34ANG End of include-file R31.agc. Parent file is MAIN.agc