Source Code
053394,000001: # Copyright: Public domain.
053395,000002: # Filename: LATITUDE_LONGITUDE_SUBROUTINES.agc
053396,000003: # Purpose: Part of the source code for Colossus 2A, AKA Comanche 055.
053397,000004: # It is part of the source code for the Command Module's (CM)
053398,000005: # Apollo Guidance Computer (AGC), for Apollo 11.
053399,000006: # Assembler: yaYUL
053400,000007: # Contact: Ron Burkey <info@sandroid.org>.
053401,000008: # Website: www.ibiblio.org/apollo.
053402,000009: # Pages: 1236-1242
053403,000010: # Mod history: 2009-05-14 RSB Adapted from the Colossus249/ file of the
053404,000011: # same name, using Comanche055 page images.
053405,000012: # 2010-08-20 JL Fixed indentation of RVQ opcode on line 180.
053406,000013:
053407,000014: # This source code has been transcribed or otherwise adapted from digitized
053408,000015: # images of a hardcopy from the MIT Museum. The digitization was performed
053409,000016: # by Paul Fjeld, and arranged for by Deborah Douglas of the Museum. Many
053410,000017: # thanks to both. The images (with suitable reduction in storage size and
053411,000018: # consequent reduction in image quality as well) are available online at
053412,000019: # www.ibiblio.org/apollo. If for some reason you find that the images are
053413,000020: # illegible, contact me at info@sandroid.org about getting access to the
053414,000021: # (much) higher-quality images which Paul actually created.
053415,000022:
053416,000023: # Notations on the hardcopy document read, in part:
053417,000024:
053418,000025: # Assemble revision 055 of AGC program Comanche by NASA
053419,000026: # 2021113-051. 10:28 APR. 1, 1969
053420,000027:
053421,000028: # This AGC program shall also be referred to as
053422,000029: # Colossus 2A
053423,000030:
053424,000031: # Page 1236
053425,000032: # SUBROUTINE TO CONVERT RAD VECTOR AT GIVEN TIME TO LAT,LONG AND ALT
053426,000033:
053427,000034: # CALLING SEQUENCE
053428,000035: # L-1 CALL
053429,000036: # L LAT-LONG
053430,000037:
053431,000038: # SUBROUTINES USED
053432,000039: # R-TO-RP, ARCTAN, SETGAMMA, SETRE
053433,000040:
053434,000041: # ERASABLE INIT. REQ.
053435,000042: # AXO, -AYO, AZO, TEPHEM (SET AT LAUNCH TIME)
053436,000043: # ALPHAV = POSITION VECTOR METERS B-29
053437,000044: # MPAC -- TIME (CSECS B-28)
053438,000045: # ERADFLAG =1, TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS
053439,000046: # LUNAFLAG=0 FOR EARTH, 1 FOR MOON
053440,000047:
053441,000048: # OUTPUT
053442,000049: # LATITUDE IN LAT (REVS. B-0)
053443,000050: # LONGITUDE IN LONG (REVS. B-0)
053444,000051: # ALTITUDE IN ALT METERS B-29
053445,000052:
053446,000053: 30,3750 BANK 30
053447,000054: 13,2000 SETLOC LATLONG
053448,000055: 13,2000 BANK
053449,000056:
053450,000057: 13,2370 COUNT 13/LT-LG
053451,000058:
053452,000059: 13,2370 E4,1551 EBANK= ALPHAV
053453,000060: 13,2370 40220 LAT-LONG STQ SETPD
053454,000061: 13,2371 02242 INCORPEX
053455,000062: 13,2372 00001 0D
053456,000063: 13,2373 24007 STOVL 6D # SAVE TIME IN 6-7D FOR R-TO-RP
053457,000064: 13,2374 02152 ALPHAV
053458,000065: 13,2375 51406 PUSH ABVAL # 0-5D= R FOR R-TO-RP
053459,000066: 13,2376 16310 STODL ALPHAM # ABS. VALUE OF R FOR ALT FORMULA BELOW
053460,000067: 13,2377 11566 ZEROVEC # SET MPAC=0 FOR EARTH, NON-ZERO FOR MOON
053461,000068: 13,2400 71414 BOFF COS # USE COS(0) TO GET NON-ZERO IN MPAC
053462,000069: 13,2401 01743 LUNAFLAG # 0=EARTH, 1=MOON
053463,000070: 13,2402 26403 CALLRTRP
053464,000071: 13,2403 77624 CALLRTRP CALL
053465,000072: 13,2404 55371 R-TO-RP # RP VECTOR CONVERTED FROM R B-29
053466,000073: 13,2405 77656 UNIT # UNIT RP B-1
053467,000074: 13,2406 36152 STCALL ALPHAV # U2= 1/2 SINL FOR SETRE SUBR BELOW
053468,000075: 13,2407 26571 SETGAMMA # SET GAMMA=B2/A2 FOR EARTH, =1 FOR MOON
053469,000076: 13,2410 77624 CALL # SCALED B-1.
053470,000077: 13,2411 26601 SETRE # CALC RE METERS B-29
053471,000078: 13,2412 63545 DLOAD DSQ
053472,000079: 13,2413 02152 ALPHAV
053473,000080: 13,2414 63525 PDDL DSQ
053474,000081: 13,2415 02154 ALPHAV +2
053475,000082: # Page 1237
053476,000083: 13,2416 75415 DAD SQRT
053477,000084: 13,2417 76405 DMP SL1R
053478,000085: 13,2420 00011 GAMRP
053479,000086: 13,2421 14021 STODL COSTH # COS(LAT) B-1
053480,000087: 13,2422 02156 ALPHAV +4
053481,000088: 13,2423 34023 STCALL SINTH # SIN(LAT) B-1
053482,000089: 13,2424 26531 ARCTAN
053483,000090: 13,2425 15104 STODL LAT # LAT B0
053484,000091: 13,2426 02152 ALPHAV
053485,000092: 13,2427 14021 STODL COSTH # COS(LONG) B-1
053486,000093: 13,2430 02154 ALPHAV +2
053487,000094: 13,2431 34023 STCALL SINTH # SIN(LONG) B-1
053488,000095: 13,2432 26531 ARCTAN
053489,000096: 13,2433 15106 STODL LONG # LONG. REVS B-0 IN RANGE -1/2 TO 1/2
053490,000097: 13,2434 02310 ALPHAM
053491,000098: 13,2435 77625 DSU # ALT= R-RE METERS B-29
053492,000099: 13,2436 02241 ERADM
053493,000100: 13,2437 35110 STCALL ALT # EXIT WITH ALT METERS B-29
053494,000101: 13,2440 02242 INCORPEX
053495,000102: # Page 1238
053496,000103: # SUBROUTINE TO CONVERT LAT,LONG.ALT AT GIVEN TIME TO RADIUS VECTOR
053497,000104:
053498,000105: # CALLING SEQUENCE
053499,000106: # L-1 CALL
053500,000107: # L LALOTORV
053501,000108:
053502,000109: # SUBROUTINES USED
053503,000110: # SETGAMMA, SETRE, RP-TO-R
053504,000111:
053505,000112: # ERASABLE INIT. REQ.
053506,000113: # AXO, AYO, AZO, TEPHEM SET AT LAUNCH TIME
053507,000114: # LAT -- LATITUDE (REVS B0)
053508,000115: # LONG -- LONGITUDE (REVS B0)
053509,000116: # ALT -- ALTITUDE (METERS) B-29
053510,000117: # MPAC -- TIME (CSECS B-28)
053511,000118: # ERADFLAG =1 TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS
053512,000119: # LUNAFLAG=0 FOR EARTH, 1 FOR MOON
053513,000120:
053514,000121: # OUTPUT
053515,000122: # R-VECTOR IN ALPHAV (METERS B-29)
053516,000123:
053517,000124: 13,2441 40220 LALOTORV STQ SETPD # LAT,LONG,ALT TO R VECTOR
053518,000125: 13,2442 02242 INCORPEX
053519,000126: 13,2443 00001 0D
053520,000127: 13,2444 34007 STCALL 6D # 6-7D = TIME FOR RP-TO-R
053521,000128: 13,2445 26571 SETGAMMA # GAMMA = B2/A2 FOR EARTH, 1 FOR MOON B-1
053522,000129: 13,2446 73545 DLOAD SIN # COS(LONG)COS(LAT) IN MPAC
053523,000130: 13,2447 01104 LAT # UNIT RP = SIN(LONG)COS(LAT) 2-3D
053524,000131: 13,2450 65275 DMPR PDDL # PD 2 GAMMA*SIN(LAT) 0-1D
053525,000132: 13,2451 00011 GAMRP
053526,000133: 13,2452 01104 LAT # 0-1D = GAMMA*SIN(LAT) B-2
053527,000134: 13,2453 65346 COS PDDL # PD4 2-3D= COS(LAT) B-1 TEMPORARILY
053528,000135: 13,2454 01106 LONG
053529,000136: 13,2455 57356 SIN DMPR # PD 2
053530,000137: 13,2456 71525 PDDL COS # PD 4 2-3D= SIN(LONG)COS(LAT) B-2
053531,000138: 13,2457 01104 LAT
053532,000139: 13,2460 71525 PDDL COS # PD 6 4-5D= COS(LAT) B-1 TEMPORARILY
053533,000140: 13,2461 01106 LONG
053534,000141: 13,2462 55475 DMPR VDEF # PD4 MPAC = COS(LONG)COS(LAT) B-2
053535,000142: 13,2463 41456 UNIT PUSH # 0-5D = UNIT RP FOR RP-TO-R SUBR.
053536,000143: 13,2464 36152 STCALL ALPHAV # ALPHAV +4= SINL FOR SETRE SUBR.
053537,000144: 13,2465 26601 SETRE # RE METERS B-29
053538,000145: 13,2466 43145 DLOAD BOFF # SET MPAC = 0 FOR EARTH, NON-ZERO FOR MOON
053539,000146: 13,2467 11566 ZEROVEC
053540,000147: 13,2470 01743 LUNAFLAG
053541,000148: 13,2471 26473 CALLRPRT
053542,000149: 13,2472 77746 COS # USE COS(0) TO GET NON-ZERO IN MPAC
053543,000150: 13,2473 77624 CALLRPRT CALL
053544,000151: 13,2474 55344 RP-TO-R # EXIT WITH UNIT R VECTOR IN MPAC
053545,000152: 13,2475 16152 STODL ALPHAV
053546,000153: 13,2476 02241 ERADM
053547,000154: # Page 1239
053548,000155: 13,2477 74215 DAD VXSC # (RE + ALT)(UNIT R) METERS B-30
053549,000156: 13,2500 01110 ALT
053550,000157: 13,2501 02152 ALPHAV
053551,000158: 13,2502 77772 VSL1 # R METERS B-29
053552,000159: 13,2503 36152 STCALL ALPHAV # EXIT WITH R IN METERS B-29
053553,000160: 13,2504 02242 INCORPEX
053554,000161:
053555,000162: # SUBROUTINE TO COMPUTE EARTH RADIUS
053556,000163:
053557,000164: # INPUT
053558,000165: # 1/2 SIN LAT IN ALPHAV +4
053559,000166:
053560,000167: # OUTPUT
053561,000168: # EARTH RADIUS IN ERADM AND MPAC (METERS B-29)
053562,000169:
053563,000170: 13,2505 63545 GETERAD DLOAD DSQ
053564,000171: 13,2506 02156 ALPHAV +4 # SIN**2(L)
053565,000172: 13,2507 44352 SL1 BDSU
053566,000173: 13,2510 11564 DP1/2 # COS**2(L)
053567,000174: 13,2511 44275 DMPR BDSU
053568,000175: 13,2512 26526 EE
053569,000176: 13,2513 11564 DP1/2
053570,000177: 13,2514 75465 BDDV SQRT
053571,000178: 13,2515 26522 B2XSC
053572,000179: 13,2516 77622 SR4R
053573,000180: 13,2517 02241 STORE ERADM
053574,000181: 13,2520 77616 RVQ
053575,000182:
053576,000183: # THE FOLLOWING CONSTANTS WERE COMPUTED WITH A=6378166, B=6356784 METERS
053577,000184: # B2XSC = B**2 SCALED B-51
053578,000185: # B2/A2 = B**2/A**2 SCALED B-1
053579,000186: # EE = (1-B**2/A**2) SCALED B-0
053580,000187:
053581,000188: 13,2521 00446 00305 B2XSC 2DEC .0179450689 # B**2 SCALED B-51
053582,000189:
053583,000190: 13,2523 04,3563 DP1/2 = XUNIT
053584,000191: 13,2523 17711 05254 B2/A2 2DEC .9933064884 B-1 # GAMMA= B**2/A**2 B-1
053585,000192:
053586,000193: 13,2525 00155 25250 EE 2DEC 6.6935116 E-3 # (1-B**2/A**2) B-0
053587,000194:
053588,000195: 13,2527 00302 17755 ERAD 2DEC 6373338 B-29 # PAD RADIUS
053589,000196:
053590,000197: # Page 1240
053591,000198: # ARCTAN SUBROUTINE
053592,000199:
053593,000200: # CALLING SEQUENCE
053594,000201: # SIN THETA IN SINTH B-1
053595,000202: # COS THETA IN COSTH B-1
053596,000203: # CALL ARCTAN
053597,000204:
053598,000205: # OUTPUT
053599,000206: # ARCTAN THETA IN MPAC AND THETA B-0 IN RANGE -1/2 TO +1/2
053600,000207:
053601,000208: 13,2531 77600 ARCTAN BOV
053602,000209: 13,2532 26533 CLROVFLW
053603,000210: 13,2533 63545 CLROVFLW DLOAD DSQ
053604,000211: 13,2534 00023 SINTH
053605,000212: 13,2535 63525 PDDL DSQ
053606,000213: 13,2536 00021 COSTH
053607,000214: 13,2537 77615 DAD
053608,000215: 13,2540 75454 BZE SQRT
053609,000216: 13,2541 26557 ARCTANXX # ATAN=0/0. SET THETA=0
053610,000217: 13,2542 40065 BDDV BOV
053611,000218: 13,2543 00023 SINTH
053612,000219: 13,2544 26564 ATAN=90
053613,000220: 13,2545 67542 SR1 ASIN
053614,000221: 13,2546 00025 STORE THETA
053615,000222: 13,2547 50125 PDDL BMN
053616,000223: 13,2550 00021 COSTH
053617,000224: 13,2551 26553 NEGCOS
053618,000225: 13,2552 43545 DLOAD RVQ
053619,000226: 13,2553 57545 NEGCOS DLOAD DCOMP
053620,000227: 13,2554 43244 BPL DAD
053621,000228: 13,2555 26561 NEGOUT
053622,000229: 13,2556 11564 DP1/2
053623,000230: 13,2557 00025 ARCTANXX STORE THETA
053624,000231: 13,2560 77616 RVQ
053625,000232:
053626,000233: 13,2561 52025 NEGOUT DSU GOTO
053627,000234: 13,2562 11564 DP1/2
053628,000235: 13,2563 26557 ARCTANXX
053629,000236: 13,2564 75345 ATAN=90 DLOAD SIGN
053630,000237: 13,2565 11612 LODP1/4
053631,000238: 13,2566 00023 SINTH
053632,000239: 13,2567 00025 STORE THETA
053633,000240: 13,2570 77616 RVQ
053634,000241:
053635,000242: 13,2571 04,3565 2DZERO = DPZERO
053636,000243:
053637,000244: # Page 1241
053638,000245: # ***** SETGAMMA SUBROUTINE *****
053639,000246: # SUBROUTINE TO SET GAMMA FOR THE LAT-LONG AND LALOTORV SUBROUTINES
053640,000247:
053641,000248: # GAMMA = B**2/A**2 FOR EARTH (B-1)
053642,000249: # GAMMA = 1 FOR MOON (B-1)
053643,000250:
053644,000251: # CALLING SEQUENCE
053645,000252: # L CALL
053646,000253: # L+1 SETGAMMA
053647,000254:
053648,000255: # INPUT
053649,000256: # LUNAFLAG=0 FOR EARTH, =1 FOR MOON
053650,000257:
053651,000258: # OUTPUT
053652,000259: # GAMMA IN GAMRP (B-1)
053653,000260:
053654,000261: 13,2571 43145 SETGAMMA DLOAD BOFF # BRANCH FOR EARTH
053655,000262: 13,2572 26524 B2/A2 # EARTH GAMMA
053656,000263: 13,2573 01743 LUNAFLAG
053657,000264: 13,2574 26577 SETGMEX
053658,000265: 13,2575 77735 SLOAD
053659,000266: 13,2576 11564 1B1 # MOON GAMMA
053660,000267: 13,2577 00011 SETGMEX STORE GAMRP
053661,000268: 13,2600 77616 RVQ
053662,000269: 13,2601 GAMRP = 8D
053663,000270:
053664,000271: # Page 1242
053665,000272: # ***** SETRE SUBROUTINE *****
053666,000273: # SUBROUTINE TO SET RE (EARTH OR MOON RADIUS)
053667,000274:
053668,000275: # RE = RM FOR MOON
053669,000276: # RE = RREF FOR FIXED EARTH RADIUS OR COMPUTED RF FOR FISCHER ELLIPSOID
053670,000277:
053671,000278: # CALLING SEQUENCE
053672,000279: # L CALL
053673,000280: # L+1 SETRE
053674,000281:
053675,000282: # SUBROUTINES USED
053676,000283: # CETERAD
053677,000284:
053678,000285: # INPUT
053679,000286: # ERADFLAG = 0 FOR FIXED RE, 1 FOR COMPUTED RE
053680,000287: # ALPHAV +4 = 1/2 SINL IF GETERAD IS CALLED
053681,000288: # LUNAFLAG = 0 FOR EARTH, =1 FOR MOON
053682,000289:
053683,000290: # OUTPUT
053684,000291: # ERADM = 504RM FOR MOON (METERS B-29)
053685,000292: # ERADM = ERAD OR COMPUTED RE FOR EARTH (METERS B-29)
053686,000293:
053687,000294: 13,2601 71220 SETRE STQ DLOAD
053688,000295: 13,2602 00051 SETREX
053689,000296: 13,2603 26626 504RM
053690,000297: 13,2604 71214 BON DLOAD # BRANCH FOR MOON
053691,000298: 13,2605 01703 LUNAFLAG
053692,000299: 13,2606 26616 TSTRLSRM
053693,000300: 13,2607 26530 ERAD
053694,000301: 13,2610 45014 BOFF CALL # ERADFLAG=0 FOR FIXED RE, 1 FOR COMPUTED
053695,000302: 13,2611 00742 ERADFLAG
053696,000303: 13,2612 26614 SETRXX
053697,000304: 13,2613 26505 GETERAD
053698,000305: 13,2614 36241 SETRXX STCALL ERADM # EXIT WITH RE OR RM METERS B-29
053699,000306: 13,2615 00051 SETREX
053700,000307: 13,2616 77214 TSTRLSRM BON VLOAD # ERADFLAG=0, SET R0=RLS
053701,000308: 13,2617 00702 ERADFLAG # =1 R0=RM
053702,000309: 13,2620 26614 SETRXX
053703,000310: 13,2621 02026 RLS
053704,000311: 13,2622 64446 ABVAL SR2R # SCALE FROM B-27 TO B-29
053705,000312: 13,2623 77650 GOTO
053706,000313: 13,2624 26614 SETRXX
053707,000314: 13,2625 0000051 SETREX = S2
053708,000315: 13,2625 00065 01265 504RM 2DEC 1738090 B-29 # METERS B-29 (MOON RADIUS)
053709,000316:
053710,000317:
053711,000318:
053712,000319:
End of include-file LATITUDE_LONGITUDE_SUBROUTINES.agc. Parent file is MAIN.agc