Source Code
|
These source-code files are part of a reconstructed copy of Comanche 051, the
original release of the Apollo 11 Command Module (CM) Apollo Guidance Computer
(AGC) software.
The reconstruction began with source code of Comanche 055 previously transcribed from a digitized copy of that program. The code was then updated by undoing changes related to the R-2 lunar potential model, using hints from program comments and change-indicating asterisks in the Comanche 055 listing as a guide. The reconstruction was verified by matching memory-bank checksums to those listed in drawing 2021153D. Note that page numbers in the reconstructed code match those on the Comanche 055 printout, although the added code would likely have changed page numbers for a real Comanche 051 listing. Comments from the original source code are prefixed with a single '#' symbol, whereas comments added later are prefixed by "##" or "###". Report any errors noted by creating an issue report at the Virtual AGC project's GitHub repository. |
052462,000002: ## Copyright: Public domain.
052463,000003: ## Filename: LATITUDE_LONGITUDE_SUBROUTINES.agc
052464,000004: ## Purpose: A section of Comanche revision 051.
052465,000005: ## It is part of the reconstructed source code for the
052466,000006: ## original release of the flight software for the Command
052467,000007: ## Module's (CM) Apollo Guidance Computer (AGC) for Apollo 11.
052468,000008: ## The code has been recreated from a copy of Comanche 055. It
052469,000009: ## has been adapted such that the resulting bugger words
052470,000010: ## exactly match those specified for Comanche 51 in NASA drawing
052471,000011: ## 2021153D, which gives relatively high confidence that the
052472,000012: ## reconstruction is correct.
052473,000013: ## Reference: pp. 1236-1242
052474,000014: ## Assembler: yaYUL
052475,000015: ## Contact: Ron Burkey <info@sandroid.org>.
052476,000016: ## Website: www.ibiblio.org/apollo/index.html
052477,000017: ## Mod history: 2019-07-30 MAS Created from Comanche 55.
052478,000018:
|
Page 1236 |
052480,000020: # SUBROUTINE TO CONVERT RAD VECTOR AT GIVEN TIME TO LAT,LONG AND ALT
052481,000021:
052482,000022: # CALLING SEQUENCE
052483,000023: # L-1 CALL
052484,000024: # L LAT-LONG
052485,000025:
052486,000026: # SUBROUTINES USED
052487,000027: # R-TO-RP, ARCTAN, SETGAMMA, SETRE
052488,000028:
052489,000029: # ERASABLE INIT. REQ.
052490,000030: # AXO, -AYO, AZO, TEPHEM (SET AT LAUNCH TIME)
052491,000031: # ALPHAV = POSITION VECTOR METERS B-29
052492,000032: # MPAC -- TIME (CSECS B-28)
052493,000033: # ERADFLAG =1, TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS
052494,000034: # LUNAFLAG=0 FOR EARTH, 1 FOR MOON
052495,000035:
052496,000036: # OUTPUT
052497,000037: # LATITUDE IN LAT (REVS. B-0)
052498,000038: # LONGITUDE IN LONG (REVS. B-0)
052499,000039: # ALTITUDE IN ALT METERS B-29
052500,000040:
052501,000041: 30,3750 BANK 30
052502,000042: 13,2000 SETLOC LATLONG
052503,000043: 13,2000 BANK
052504,000044:
052505,000045: 13,2370 COUNT 13/LT-LG
052506,000046:
052507,000047: 13,2370 E4,1551 EBANK= ALPHAV
052508,000048: 13,2370 40220 LAT-LONG STQ SETPD
052509,000049: 13,2371 02242 INCORPEX
052510,000050: 13,2372 00001 0D
052511,000051: 13,2373 24007 STOVL 6D # SAVE TIME IN 6-7D FOR R-TO-RP
052512,000052: 13,2374 02152 ALPHAV
052513,000053: 13,2375 51406 PUSH ABVAL # 0-5D= R FOR R-TO-RP
052514,000054: 13,2376 16310 STODL ALPHAM # ABS. VALUE OF R FOR ALT FORMULA BELOW
052515,000055: 13,2377 11566 ZEROVEC # SET MPAC=0 FOR EARTH, NON-ZERO FOR MOON
052516,000056: 13,2400 71414 BOFF COS # USE COS(0) TO GET NON-ZERO IN MPAC
052517,000057: 13,2401 01743 LUNAFLAG # 0=EARTH, 1=MOON
052518,000058: 13,2402 26403 CALLRTRP
052519,000059: 13,2403 77624 CALLRTRP CALL
052520,000060: 13,2404 55371 R-TO-RP # RP VECTOR CONVERTED FROM R B-29
052521,000061: 13,2405 77656 UNIT # UNIT RP B-1
052522,000062: 13,2406 36152 STCALL ALPHAV # U2= 1/2 SINL FOR SETRE SUBR BELOW
052523,000063: 13,2407 26571 SETGAMMA # SET GAMMA=B2/A2 FOR EARTH, =1 FOR MOON
052524,000064: 13,2410 77624 CALL # SCALED B-1
052525,000065: 13,2411 26601 SETRE # CALC RE METERS B-29
052526,000066: 13,2412 63545 DLOAD DSQ
052527,000067: 13,2413 02152 ALPHAV
052528,000068: 13,2414 63525 PDDL DSQ
052529,000069: 13,2415 02154 ALPHAV +2
|
Page 1237 |
052531,000071: 13,2416 75415 DAD SQRT
052532,000072: 13,2417 76405 DMP SL1R
052533,000073: 13,2420 00011 GAMRP
052534,000074: 13,2421 14021 STODL COSTH # COS(LAT) B-1
052535,000075: 13,2422 02156 ALPHAV +4
052536,000076: 13,2423 34023 STCALL SINTH # SIN(LAT) B-1
052537,000077: 13,2424 26531 ARCTAN
052538,000078: 13,2425 15104 STODL LAT # LAT B0
052539,000079: 13,2426 02152 ALPHAV
052540,000080: 13,2427 14021 STODL COSTH # COS(LONG) B-1
052541,000081: 13,2430 02154 ALPHAV +2
052542,000082: 13,2431 34023 STCALL SINTH # SIN(LONG) B-1
052543,000083: 13,2432 26531 ARCTAN
052544,000084: 13,2433 15106 STODL LONG # LONG. REVS B-0 IN RANGE -1/2 TO 1/2
052545,000085: 13,2434 02310 ALPHAM
052546,000086: 13,2435 77625 DSU # ALT= R-RE METERS B-29
052547,000087: 13,2436 02241 ERADM
052548,000088: 13,2437 35110 STCALL ALT # EXIT WITH ALT METERS B-29
052549,000089: 13,2440 02242 INCORPEX
|
Page 1238 |
052551,000091: # SUBROUTINE TO CONVERT LAT,LONG,ALT AT GIVEN TIME TO RADIUS VECTOR
052552,000092:
052553,000093: # CALLING SEQUENCE
052554,000094: # L-1 CALL
052555,000095: # L LALOTORV
052556,000096:
052557,000097: # SUBROUTINES USED
052558,000098: # SETGAMMA, SETRE, RP-TO-R
052559,000099:
052560,000100: # ERASABLE INIT. REQ.
052561,000101: # AXO, AYO, AZO, TEPHEM SET AT LAUNCH TIME
052562,000102: # LAT -- LATITUDE (REVS B0)
052563,000103: # LONG -- LONGITUDE (REVS B0)
052564,000104: # ALT -- ALTITUDE (METERS) B-29
052565,000105: # MPAC -- TIME (CSECS B-28)
052566,000106: # ERADFLAG =1 TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS
052567,000107: # LUNAFLAG=0 FOR EARTH, 1 FOR MOON
052568,000108:
052569,000109: # OUTPUT
052570,000110: # R-VECTOR IN ALPHAV (METERS B-29)
052571,000111:
052572,000112: 13,2441 40220 LALOTORV STQ SETPD # LAT,LONG,ALT TO R VECTOR
052573,000113: 13,2442 02242 INCORPEX
052574,000114: 13,2443 00001 0D
052575,000115: 13,2444 34007 STCALL 6D # 6-7D = TIME FOR RP-TO-R
052576,000116: 13,2445 26571 SETGAMMA # GAMMA = B2/A2 FOR EARTH, 1 FOR MOON B-1
052577,000117: 13,2446 73545 DLOAD SIN # COS(LONG)COS(LAT) IN MPAC
052578,000118: 13,2447 01104 LAT # UNIT RP = SIN(LONG)COS(LAT) 2-3D
052579,000119: 13,2450 65275 DMPR PDDL # PD 2 GAMMA*SIN(LAT) 0-1D
052580,000120: 13,2451 00011 GAMRP
052581,000121: 13,2452 01104 LAT # 0-1D = GAMMA*SIN(LAT) B-2
052582,000122: 13,2453 65346 COS PDDL # PD4 2-3D= COS(LAT) B-1 TEMPORARILY
052583,000123: 13,2454 01106 LONG
052584,000124: 13,2455 57356 SIN DMPR # PD 2
052585,000125: 13,2456 71525 PDDL COS # PD 4 2-3D= SIN(LONG)COS(LAT) B-2
052586,000126: 13,2457 01104 LAT
052587,000127: 13,2460 71525 PDDL COS # PD 6 4-5D= COS(LAT) B-1 TEMPORARILY
052588,000128: 13,2461 01106 LONG
052589,000129: 13,2462 55475 DMPR VDEF # PD4 MPAC = COS(LONG)COS(LAT) B-2
052590,000130: 13,2463 41456 UNIT PUSH # 0-5D = UNIT RP FOR RP-TO-R SUBR.
052591,000131: 13,2464 36152 STCALL ALPHAV # ALPHAV +4= SINL FOR SETRE SUBR.
052592,000132: 13,2465 26601 SETRE # RE METERS B-29
052593,000133: 13,2466 43145 DLOAD BOFF # SET MPAC = 0 FOR EARTH, NON-ZERO FOR MOON
052594,000134: 13,2467 11566 ZEROVEC
052595,000135: 13,2470 01743 LUNAFLAG
052596,000136: 13,2471 26473 CALLRPRT
052597,000137: 13,2472 77746 COS # USE COS(0) TO GET NON-ZERO IN MPAC
052598,000138: 13,2473 77624 CALLRPRT CALL
052599,000139: 13,2474 55344 RP-TO-R # EXIT WITH UNIT R VECTOR IN MPAC
052600,000140: 13,2475 16152 STODL ALPHAV
052601,000141: 13,2476 02241 ERADM
|
Page 1239 |
052603,000143: 13,2477 74215 DAD VXSC # (RE + ALT)(UNIT R) METERS B-30
052604,000144: 13,2500 01110 ALT
052605,000145: 13,2501 02152 ALPHAV
052606,000146: 13,2502 77772 VSL1 # R METERS B-29
052607,000147: 13,2503 36152 STCALL ALPHAV # EXIT WITH R IN METERS B-29
052608,000148: 13,2504 02242 INCORPEX
052609,000149:
052610,000150: # SUBROUTINE TO COMPUTE EARTH RADIUS
052611,000151:
052612,000152: # INPUT
052613,000153: # 1/2 SIN LAT IN ALPHAV +4
052614,000154:
052615,000155: # OUTPUT
052616,000156: # EARTH RADIUS IN ERADM AND MPAC (METERS B-29)
052617,000157:
052618,000158: 13,2505 63545 GETERAD DLOAD DSQ
052619,000159: 13,2506 02156 ALPHAV +4 # SIN**2(L)
052620,000160: 13,2507 44352 SL1 BDSU
052621,000161: 13,2510 11564 DP1/2 # COS**2(L)
052622,000162: 13,2511 44275 DMPR BDSU
052623,000163: 13,2512 26526 EE
052624,000164: 13,2513 11564 DP1/2
052625,000165: 13,2514 75465 BDDV SQRT
052626,000166: 13,2515 26522 B2XSC
052627,000167: 13,2516 77622 SR4R
052628,000168: 13,2517 02241 STORE ERADM
052629,000169: 13,2520 77616 RVQ
052630,000170:
052631,000171: # THE FOLLOWING CONSTANTS WERE COMPUTED WITH A=6378166, B=6356784 METERS
052632,000172: # B2XSC = B**2 SCALED B-51
052633,000173: # B2/A2 = B**2/A**2 SCALED B-1
052634,000174: # EE = (1-B**2/A**2) SCALED B-0
052635,000175:
052636,000176: 13,2521 00446 00305 B2XSC 2DEC .0179450689 # B**2 SCALED B-51
052637,000177:
052638,000178: 13,2523 04,3563 DP1/2 = XUNIT
052639,000179: 13,2523 17711 05254 B2/A2 2DEC .9933064884 B-1 # GAMMA= B**2/A**2 B-1
052640,000180:
052641,000181: 13,2525 00155 25250 EE 2DEC 6.6935116 E-3 # (1-B**2/A**2) B-0
052642,000182:
052643,000183: 13,2527 00302 17755 ERAD 2DEC 6373338 B-29 # PAD RADIUS
052644,000184:
|
Page 1240 |
052646,000186: # ARCTAN SUBROUTINE
052647,000187:
052648,000188: # CALLING SEQUENCE
052649,000189: # SIN THETA IN SINTH B-1
052650,000190: # COS THETA IN COSTH B-1
052651,000191: # CALL ARCTAN
052652,000192:
052653,000193: # OUTPUT
052654,000194: # ARCTAN THETA IN MPAC AND THETA B-0 IN RANGE -1/2 TO +1/2
052655,000195:
052656,000196: 13,2531 77600 ARCTAN BOV
052657,000197: 13,2532 26533 CLROVFLW
052658,000198: 13,2533 63545 CLROVFLW DLOAD DSQ
052659,000199: 13,2534 00023 SINTH
052660,000200: 13,2535 63525 PDDL DSQ
052661,000201: 13,2536 00021 COSTH
052662,000202: 13,2537 77615 DAD
052663,000203: 13,2540 75454 BZE SQRT
052664,000204: 13,2541 26557 ARCTANXX # ATAN=0/0 SET THETA=0
052665,000205: 13,2542 40065 BDDV BOV
052666,000206: 13,2543 00023 SINTH
052667,000207: 13,2544 26564 ATAN=90
052668,000208: 13,2545 67542 SR1 ASIN
052669,000209: 13,2546 00025 STORE THETA
052670,000210: 13,2547 50125 PDDL BMN
052671,000211: 13,2550 00021 COSTH
052672,000212: 13,2551 26553 NEGCOS
052673,000213: 13,2552 43545 DLOAD RVQ
052674,000214: 13,2553 57545 NEGCOS DLOAD DCOMP
052675,000215: 13,2554 43244 BPL DAD
052676,000216: 13,2555 26561 NEGOUT
052677,000217: 13,2556 11564 DP1/2
052678,000218: 13,2557 00025 ARCTANXX STORE THETA
052679,000219: 13,2560 77616 RVQ
052680,000220:
052681,000221: 13,2561 52025 NEGOUT DSU GOTO
052682,000222: 13,2562 11564 DP1/2
052683,000223: 13,2563 26557 ARCTANXX
052684,000224: 13,2564 75345 ATAN=90 DLOAD SIGN
052685,000225: 13,2565 11612 LODP1/4
052686,000226: 13,2566 00023 SINTH
052687,000227: 13,2567 00025 STORE THETA
052688,000228: 13,2570 77616 RVQ
052689,000229:
052690,000230: 13,2571 04,3565 2DZERO = DPZERO
052691,000231:
|
Page 1241 |
052693,000233: # ..... SETGAMMA SUBROUTINE .....
052694,000234: # SUBROUTINE TO SET GAMMA FOR THE LAT-LONG AND LALOTORV SUBROUTINES
052695,000235:
052696,000236: # GAMMA = B**2/A**2 FOR EARTH (B-1)
052697,000237: # GAMMA = 1 FOR MOON (B-1)
052698,000238:
052699,000239: # CALLING SEQUENCE
052700,000240: # L CALL
052701,000241: # L+1 SETGAMMA
052702,000242:
052703,000243: # INPUT
052704,000244: # LUNAFLAG=0 FOR EARTH, =1 FOR MOON
052705,000245:
052706,000246: # OUTPUT
052707,000247: # GAMMA IN GAMRP (B-1)
052708,000248:
052709,000249: 13,2571 43145 SETGAMMA DLOAD BOFF # BRANCH FOR EARTH
052710,000250: 13,2572 26524 B2/A2 # EARTH GAMMA
052711,000251: 13,2573 01743 LUNAFLAG
052712,000252: 13,2574 26577 SETGMEX
052713,000253: 13,2575 77735 SLOAD
052714,000254: 13,2576 11564 1B1 # MOON GAMMA
052715,000255: 13,2577 00011 SETGMEX STORE GAMRP
052716,000256: 13,2600 77616 RVQ
052717,000257: 13,2601 GAMRP = 8D
052718,000258:
|
Page 1242 |
052720,000260: # ..... SETRE SUBROUTINE .....
052721,000261: # SUBROUTINE TO SET RE (EARTH OR MOON RADIUS)
052722,000262:
052723,000263: # RE = RM FOR MOON
052724,000264: # RE = RREF FOR FIXED EARTH RADIUS OR COMPUTED RF FOR FISCHER ELLIPSOID
052725,000265:
052726,000266: # CALLING SEQUENCE
052727,000267: # L CALL
052728,000268: # L+1 SETRE
052729,000269:
052730,000270: # SUBROUTINES USED
052731,000271: # GETERAD
052732,000272:
052733,000273: # INPUT
052734,000274: # ERADFLAG = 0 FOR FIXED RE, 1 FOR COMPUTED RE
052735,000275: # ALPHAV +4 = 1/2 SINL IF GETERAD IS CALLED
052736,000276: # LUNAFLAG = 0 FOR EARTH, =1 FOR MOON
052737,000277:
052738,000278: # OUTPUT
052739,000279: # ERADM = 504RM FOR MOON (METERS B-29)
052740,000280: # ERADM = ERAD OR COMPUTED RF FOR EARTH (METERS B-29)
052741,000281:
052742,000282: 13,2601 71220 SETRE STQ DLOAD
052743,000283: 13,2602 00051 SETREX
052744,000284: 13,2603 26626 504RM
052745,000285: 13,2604 71214 BON DLOAD # BRANCH FOR MOON
052746,000286: 13,2605 01703 LUNAFLAG
052747,000287: 13,2606 26616 TSTRLSRM
052748,000288: 13,2607 26530 ERAD
052749,000289: 13,2610 45014 BOFF CALL # ERADFLAG=0 FOR FIXED RE, 1 FOR COMPUTED
052750,000290: 13,2611 00742 ERADFLAG
052751,000291: 13,2612 26614 SETRXX
052752,000292: 13,2613 26505 GETERAD
052753,000293: 13,2614 36241 SETRXX STCALL ERADM # EXIT WITH RE OR RM METERS B-29
052754,000294: 13,2615 00051 SETREX
052755,000295: 13,2616 77214 TSTRLSRM BON VLOAD # ERADFLAG=0, SET R0=RLS
052756,000296: 13,2617 00702 ERADFLAG # =1 R0=RM
052757,000297: 13,2620 26614 SETRXX
052758,000298: 13,2621 02026 RLS
052759,000299: 13,2622 64446 ABVAL SR2R # SCALE FROM B-27 TO B-29
052760,000300: 13,2623 77650 GOTO
052761,000301: 13,2624 26614 SETRXX
052762,000302: 13,2625 0000051 SETREX = S2
052763,000303: 13,2625 00065 01265 504RM 2DEC 1738090 B-29 # METERS B-29 (MOON RADIUS)
052764,000304:
052765,000305:
052766,000306:
052767,000307:
End of include-file LATITUDE_LONGITUDE_SUBROUTINES.agc. Parent file is MAIN.agc