Source Code
This source code is very close to the Apollo Guidance Computer software for the
Apollo 13 Lunar module. This revision of the Luminary 131 program is from December
of 1969, whereas there was a later revision in January of 1970, and still another
revision in February, which is the code that flew on the mission.
As far as this transcription is concerned, it was originally from a copy made in 1991 of
a printout from the collection of AGC developer Don Eyles for collector David Craig.
It was subsequently scanned by Gary Neff, reprocessed for online
presentation at the now-discontinued History of Recent Science and Technology (HRST) website
of MIT's Dibner Institute (the full-quality scans being discarded in the process),
and finally transcribed by Ron Burkey for the Virtual AGC Project. Although a
high-quality replacement scan for a completely illegible page was later provided by Gary
Neff, the reduced legibility of the reprocessed HRST posting nevertheless caused many
errors to be introduced into the transcription. Accordingly, a second scan of the same physical
printout was made in 2017 for the Virtual AGC Project's collection at the Internet Archive,
and used to correct the transcription errors. All of the scanned materials mentioned,
as well as other Luminary 131 related material, are available online.
Don Eyles apprently made additional hand-written notes in printout between 1991 and 2017,
so the two scans are not identical in that respect. The page-headings in the printout read, in part:GAP: ASSEMBLE REVISION 131 OF AGC PROGRAM LUMINARY BY NASA 2021112-091 17:53 DEC. 19, 1969Note that the date is the date the printout was made, not the date on which the program revision was released, although these happen to be very close together. |
061626,000002: ## Copyright: Public domain.
061627,000003: ## Filename: TJET_LAW.agc
061628,000004: ## Purpose: A section of Luminary 1C, revision 131.
061629,000005: ## It is part of the source code for the Lunar Module's (LM)
061630,000006: ## Apollo Guidance Computer (AGC) for Apollo 13.
061631,000007: ## This file is intended to be a faithful transcription, except
061632,000008: ## that the code format has been changed to conform to the
061633,000009: ## requirements of the yaYUL assembler rather than the
061634,000010: ## original YUL assembler.
061635,000011: ## Reference: pp. 1452-1461
061636,000012: ## Contact: Ron Burkey <info@sandroid.org>.
061637,000013: ## Website: www.ibiblio.org/apollo/index.html
061638,000014: ## Mod history: 06/08/03 RSB. Began transcribing.
061639,000015: ## 05/14/05 RSB Corrected website reference above.
061640,000016: ## 2010-10-25 JL Indentation fixes.
061641,000017: ## 2017-01-06 RSB Page numbers now agree with those on the
061642,000018: ## original hardcopy, as opposed to the PDF page
061643,000019: ## numbers in 1701.pdf.
061644,000020: ## 2017-02-28 RSB Proofed comment text using octopus/ProoferComments.
061645,000021: ## 2017-03-16 RSB Comment-text fixes identified in 5-way
061646,000022: ## side-by-side diff of Luminary 69/99/116/131/210.
061647,000023:
Page 1452 |
061649,000025: # PROGRAM DESCRIPTION
061650,000026: # DESIGNED BY: R. D. GOSS AND P. S. WEISSMAN
061651,000027: # CODED BY: P. S. WEISSMAN 28 FEBRUARY 1968
061652,000028:
061653,000029: # TJETLAW IS CALLED AS A SUBROUTINE WHEN THE LEM IS NOT DOCKED AND THE AUTOPILOT IS IN THE AUTOMATIC OR
061654,000030: # ATTITUDE-HOLD MODE TO CALCULATE THE JET-FIRING-TIME (TJET) REQUIRED FOR THE AXIS INDICATED BY AXISCTR:
061655,000031: # -1 INDICATES THE P-AXIS
061656,000032: # +0 INDICATES THE U-AXIS
061657,000033: # +1 INDICATES THE V-AXIS.
061658,000034: # THE REGISTERS E AND EDOT CONTAIN THE APPROPRIATE ATTITUDE ERROR AND ERROR RATE AND SENSETYP SHOWS WHETHER
061659,000035: # UNBALANCED COUPLES ARE PREFERRED. TJETLAW ALSO USES VARIOUS FUNCTIONS OF ACCELERATION AND DEADBAND WHICH ARE
061660,000036: # COMPUTED IN THE 1/ACCONT SECTION OF 1/ACCS AND ARE STORED IN SUCH AN ORDER THAT THEY CAN BE CONVENIENTLY
061661,000037: # ACCESSED BY INDEXING.
061662,000038:
061663,000039: # THE SIGN OF THE REQUIRED ROTATION IS CARRIED THROUGH TJETLAW AS ROTSENSE AND IS FINALLY APPLIED TO TJET JUST
061664,000040: # PREVIOUS TO ITS STORAGE IN THE LOCATION CORRESPONDING TO THE AXIS (TJP, TJU OR TJV). THE NUMBER OF JETS THAT
061665,000041: # TJETLAW ASSUMES WILL BE USED IS INDICATED BY THE SETTING OF NUMBERT FOR THE U- OR V-AXIS. TWO JETS ARE ALWAYS
061666,000042: # ASSUMED FOR THE P-AXIS ALTHOUGH FOUR JETS WILL BE FIRED WHEN FIREFCT IS MORE NEGATIVE THAN -4.0 DEGREES
061667,000043: # (FIREFCT IS THE DISTANCE TO A SWITCH CURVE IN THE PHASE PLANE) AND A LONG FIRING IS CALLED FOR.
061668,000044:
061669,000045: # IN ORDER TO AVOID SCALING DIFFICULTIES, SIMPLE ALGORITHMS TAGGED RUFLAW1, -2 AND -3 ARE RESORTED TO WHEN THE
061670,000046: # ERROR AND/OR ERROR RATE ARE LARGE.
061671,000047:
061672,000048: # CALLING SEQUENCE:
061673,000049: # TC TJETLAW (MUST BE IN JASK)
061674,000050: # OR
061675,000051: # INHINT (MUST BE IN JASK)
061676,000052: # TC IBNKCALL
061677,000053: # CADR TJETLAW
061678,000054: # RELINT
061679,000055:
061680,000056: # EXIT: RETURN TO Q.
061681,000057:
061682,000058: # INPUT:
061683,000059: # FROM THE CALLER: E, EDOT, AXISCTR, SENSETYP, TJP, -U, -V.
061684,000060: # FROM 1/ACCONT: 48 ERASABLES BEGINNING AT BLOCKTOP (INCLUDING FLAT, ZONE3LIM AND ACCSWU, -V).
061685,000061:
061686,000062: # OUTPUT:
061687,000063: # TJP, -U OR -V, NUMBERT (DAPTEMP5), FIREFCT (DAPTEMP3).
061688,000064:
061689,000065: # DEBRIS:
061690,000066: # A, L, Q, E, EDOT, DAPTEMP1-6, DAPTREG1-4.
061691,000067:
061692,000068: # ALARM: NONE
061693,000069:
061694,000070: 17,3304 BANK 17
061695,000071: 17,2000 SETLOC DAPS2
061696,000072: 17,2000 BANK
061697,000073: 17,3304 E6,1524 EBANK= TJP
Page 1453 |
061699,000075: 17,3304 COUNT* $$/DAPTJ
061700,000076:
061701,000077: 17,3304 00006 TJETLAW EXTEND # SAVE Q FOR RETURN.
061702,000078: 17,3305 23744 QXCH HOLDQ
061703,000079:
061704,000080: # SET INDEXERS TO CORRESPOND TO THE AXIS AND TO THE SIGN OF EDOT
061705,000081:
061706,000082: 17,3306 51505 INDEX AXISCTR # AXISDIFF(-1)=NO OF LOCATIONS BER P AND U
061707,000083: 17,3307 33755 CAF AXISDIFF # AXISDIFF(0)=0
061708,000084: 17,3310 55745 TS ADRSDIF1 # AXISDIFF(+1)=NO OF LOCATIONS BET V AND U
061709,000085:
061710,000086: 17,3311 31427 CAE EDOT # IF EDOT NEGATIVE, PICK UP SET OF VALUES
061711,000087: 17,3312 00006 EXTEND # THAT ALLOW USE OF SAME CODING AS FOR
061712,000088: 17,3313 63320 BZMF NEGEDOT # POSITIVE EDOT.
061713,000089: 17,3314 31745 CAE ADRSDIF1 # SET A SECOND INDEXER WHICH MAY BE
061714,000090: 17,3315 55743 TS ADRSDIF2 # MODIFIED BY A DECISION FOR MAX JETS.
061715,000091: 17,3316 33757 CAF SENSOR # FOR POSITIVE EDOT, ROTSENSE IS
061716,000092: 17,3317 13330 TCF SETSENSE # INITIALIZED POSITIVE.
061717,000093:
061718,000094: 17,3320 41751 NEGEDOT CS E # IN ORDER FOR NEG EDOT CASE TO USE CODING
061719,000095: 17,3321 55751 TS E # OF POS EDOT, MUST MODIFY AS FOLLOWS:
061720,000096: 17,3322 41427 CS EDOT # 1. COMPLEMENT E AND EDOT.
061721,000097: 17,3323 55427 TS EDOT # 2. SET SENSE OF ROTATION TO NEGATIVE
061722,000098: 17,3324 34753 CAF BIT1 # (REVERSED LATER IF NECESSARY).
061723,000099: 17,3325 27745 ADS ADRSDIF1 # 3. INCREMENT INDEXERS BY ONE SO THAT
061724,000100: 17,3326 55743 TS ADRSDIF2 # THE PROPER PARAMETERS ARE ACCESSED.
061725,000101: 17,3327 43757 CS SENSOR
061726,000102: 17,3330 55737 SETSENSE TS ROTSENSE
061727,000103:
061728,000104: # TEST MAGNITUDE OF E (ATTITUDE ERROR, SINGLE-PRECISION, SCALED AT PI RADIANS):
061729,000105: # IF GREATER THAN (OR EQUAL TO) PI/16 RADIANS, GO TO THE SIMPLIFIED TJET ROUTINE.
061730,000106: # IF LESS THAN PI/16 RADIANS, RESCALE TO PI/4.
061731,000107:
061732,000108: 17,3331 31751 CAE E # PICK UP ATTITUDE ERROR FOR THIS AXIS
061733,000109: 17,3332 00006 EXTEND
061734,000110: 17,3333 74747 MP BIT5 # SHIFT RIGHT TEN BITS: IF A-REGISTER IS
061735,000111: 17,3334 10000 CCS A # ZERO, RESCALE AND TEST EDOT.
061736,000112: 17,3335 13717 TCF RUFLAW2
061737,000113: 17,3336 13340 TCF SCALEE
061738,000114: 17,3337 13663 TCF RUFLAW1
061739,000115: 17,3340 34737 SCALEE CAF BIT13 # ERROR IS IN L SCALED AT PI/16. RESCALE
061740,000116: 17,3341 00006 EXTEND # IT TO PI/4 AND SAVE IT.
061741,000117: 17,3342 70001 MP L
061742,000118: 17,3343 55751 TS E
061743,000119:
061744,000120: # TEST MAGNITUDE OF EDOT (ERROR RATE SCALED AT PI/4 RADIANS/SECOND)
061745,000121: # IF GREATER THAN (OR EQUAL TO) PI/32 RADIANS/SECOND, GO TO THE SIMPLIFIED TJET ROUTINE.
061746,000122: # IF LESS THAN PI/32 RADIANS/SECOND, THEN RESCALE TO PI/32 RADIANS/SECOND.
061747,000123:
061748,000124: 17,3344 31427 CAE EDOT # PICK UP SINGLE-PRECISION ERROR-RATE
Page 1454 |
061750,000126: 17,3345 00006 EXTEND # FOR THIS AXIS=
061751,000127: 17,3346 74750 MP BIT4 # SHIFT RIGHT ELEVEN BITS, IF THE A-REG IS
061752,000128: 17,3347 00006 EXTEND # ZERO, THEN RESCALE AND USE FINELAW.
061753,000129: 17,3350 13352 BZF SCALEDOT
061754,000130: 17,3351 13725 TCF RUFLAW3
061755,000131:
061756,000132: # *** FINELAW STARTS HERE ***
061757,000133:
061758,000134: 17,3352 23427 SCALEDOT LXCH EDOT # EDOT IS SCALED AT PI/32 RADIANS/SECOND.
061759,000135:
061760,000136: 17,3353 31427 CAE EDOT # COMPUTE (EDOT)(EDOT)
061761,000137: 17,3354 00006 EXTEND
061762,000138: 17,3355 70000 SQUARE # PRODUCT SCALED AT PI(2)/2(10) RAD/SEC.
061763,000139: 17,3356 00006 EXTEND
061764,000140: 17,3357 74737 MP BIT13 # SHIFT RIGHT TWO BITS TO RESCALE EDOTSQ
061765,000141: 17,3360 55736 TS EDOTSQ # TO PI(2)/2(8) RAD(2)/SEC(2).
061766,000142:
061767,000143: 17,3361 11751 ERRTEST CCS E # DOES BIG ERROR (THREE DEG BEYOND THE
061768,000144: 17,3362 13365 TCF +3 # DEADBAND) REQUIRE MAXIMUM JETS?
061769,000145: 17,3363 13365 TCF +2
061770,000146: 17,3364 13365 TCF +1
061771,000147: 17,3365 63760 AD -3DEG
061772,000148: 17,3366 00006 EXTEND
061773,000149: 17,3367 51745 INDEX ADRSDIF1
061774,000150: 17,3370 61600 SU FIREDB
061775,000151: 17,3371 00006 EXTEND
061776,000152: 17,3372 63377 BZMF SENSTEST # IF NOT: ARE UNBALANCED JETS PREFERRED|
061777,000153: 17,3373 34752 MAXJETS CAF TWO # IF YES: INCREMENT ADDRESS LOCATOR AND
061778,000154: 17,3374 27743 ADS ADRSDIF2 # SET SWITCH FOR JET SELECT LOGIC TO 4.
061779,000155: 17,3375 34751 CAF FOUR # (ALWAYS DO THIS FOR P-AXIS)
061780,000156: 17,3376 13402 TCF TJCALC
061781,000157: 17,3377 11500 SENSTEST CCS SENSETYP # DOES TRANSLATION PREFER MIN JETS.
061782,000158: 17,3400 13402 TCF TJCALC # YES. USE MIN-JET PARAMETERS.
061783,000159: 17,3401 13373 TCF MAXJETS # NO. GET MAX-JET PARAMETERS.
061784,000160: 17,3402 55742 TJCALC TS NUMBERT # SET TO +0,1,4 FOR (U,V-AXES) JET SELECT.
061785,000161:
061786,000162: # BEGINNING OF TJET CALCULATIONS:
061787,000163:
061788,000164: 17,3403 41736 CS EDOTSQ # SCALED AT PI(2)/2(8).
061789,000165: 17,3404 00006 EXTEND
061790,000166: 17,3405 51743 INDEX ADRSDIF2
061791,000167: 17,3406 71566 MP 1/ANET1 # .5/ACC SCALED AT 2(6)/PI SEC(2)/RADIAN.
061792,000168: 17,3407 51745 INDEX ADRSDIF1
061793,000169: 17,3410 61600 AD FIREDB # DEADBAND SCALED AT PI/4 RADIAN.
061794,000170: 17,3411 00006 EXTEND
061795,000171: 17,3412 61751 SU E # ATTITUDE ERROR SCALED AT PI/4 RADIAN.
061796,000172: 17,3413 55740 TS FIREFCT # -E-.5(EDOTSQ)/ACC-DB AT PI/4 RADIAN.
061797,000173: 17,3414 00006 EXTEND
061798,000174: 17,3415 63575 BZMF ZON1,2,3
061799,000175:
061800,000176: 17,3416 51745 ZONE4,4 INDEX ADRSDIF1
Page 1455 |
061802,000178: 17,3417 31572 CAE 1/ACOAST # .5/ACC SCALED AT 2(6)/PI WHERE
061803,000179: 17,3420 00006 EXTEND # ACC = MAX(AMIN, AOS-).
061804,000180: 17,3421 71736 MP EDOTSQ # SCALED AT PI/2(8).
061805,000181: 17,3422 61751 AD E # SCALED AT PI/4
061806,000182: 17,3423 51745 INDEX ADRSDIF1
061807,000183: 17,3424 61602 AD COASTDB # SCALED AT PI/4 POS. FOR NEG. INTERCEPT.
061808,000184: 17,3425 00006 EXTEND # TEST E+.5(EDOTSQ)/ACC+DB AT PI/4 RADIAN.
061809,000185: 17,3426 63461 BZMF ZONE5 # IF FUNCTION NEGATIVE, FIND TJET.
061810,000186: # IF FUNCTION POSITIVE, IN ZONE 4.
061811,000187:
061812,000188: # ZONE 4 IS THE COAST REGION. HOWEVER, IF THE JETS ARE ON AND DRIVING TOWARD
061813,000189: # A. THE AXIS WITHIN + OR - (DB + FLAT) FOR DRIFTING FLIGHT, OR
061814,000190: # B. THE USUAL TARGET PARABOLA FOR POWERED FLIGHT
061815,000191: # THEN THE THRUSTERS ARE KEPT ON.
061816,000192:
061817,000193: 17,3427 51505 ZONE4 INDEX AXISCTR # IS THE CURRENT VALUE IN TJET NON-ZERO
061818,000194: 17,3430 41525 CS TJETU # WITH SENSE OPPOSITE TO EDOT,
061819,000195: 17,3431 00006 EXTEND # (I.E., ARE JETS ON AND FIRING TOWARD
061820,000196: 17,3432 71737 MP ROTSENSE # THE DESIRABLE STATE).
061821,000197: 17,3433 00006 EXTEND
061822,000198: 17,3434 63455 BZMF COASTTJ # NO. COAST.
061823,000199:
061824,000200: 17,3435 11554 JETSON CCS FLAT # YES. IS THIS DRIFTING OR POWERED FLIGHT|
061825,000201: 17,3436 13447 TCF DRIFT/ON # DRIFTING. GO MAKE FURTHER TEST.
061826,000202:
061827,000203: 17,3437 41740 CS FIREFCT # POWERED (OR ULLAGE). CAN TARGET PARABOLA
061828,000204: 17,3440 51745 INDEX ADRSDIF1 # BE REACHED FROM THIS POINT IN THE
061829,000205: 17,3441 61604 AD AXISDIST # PHASE PLANE|
061830,000206: 17,3442 00006 EXTEND
061831,000207: 17,3443 63455 BZMF COASTTJ # NO. SET TJET = 0.
061832,000208: 17,3444 03561 TC Z123COMP # YES. CALCULATE TJET AS THOUGH IN ZONE 1
061833,000209: 17,3445 31740 CAE FIREFCT # AFTER COMPUTING THE REQUIRED
061834,000210: 17,3446 13615 TCF ZONE1 # PARAMETERS.
061835,000211:
061836,000212: 17,3447 51745 DRIFT/ON INDEX ADRSDIF1 # CAN TARGET STRIP OF AXIS BE REACHED FROM
061837,000213: 17,3450 41600 CS FIREDB # THIS POINT IN THE PHASE PLANE|
061838,000214: 17,3451 60000 DOUBLE
061839,000215: 17,3452 61740 AD FIREFCT
061840,000216: 17,3453 00006 EXTEND
061841,000217: 17,3454 63457 BZMF +3
061842,000218: 17,3455 34755 COASTTJ CAF ZERO # NO. SET TJET = 0.
061843,000219: 17,3456 13521 TCF RETURNTJ
061844,000220:
061845,000221: 17,3457 03561 TC Z123COMP # YES. CALCULATE TJET AS THOUGH IN ZONE 2
061846,000222: 17,3460 13602 TCF ZONE2,3 # OR 3 AFTER COMPUTING REQUIRED VALUES.
061847,000223:
061848,000224: 17,3461 54001 ZONE5 TS L # TEMPORARILY STORE FUNCTION IN L.
061849,000225: 17,3462 11737 CCS ROTSENSE # MODIFY ADRSDIF2 FOR ACCESSING 1/ANET2
061850,000226: 17,3463 13467 TCF +4 # AND ACCFCTZ5, WHICH MUST BE PICKED UP
061851,000227: 17,3464 05675 TC CCSHOLE # FROM THE NEXT LOWER REGISTER IF THE
Page 1456 |
061853,000229: 17,3465 44752 CS TWO # (ACTUAL) ERROR RATE IS NEGATIVE.
061854,000230: 17,3466 27743 ADS ADRSDIF2
061855,000231:
061856,000232: 17,3467 30001 +4 CAE L
061857,000233: 17,3470 00006 EXTEND
061858,000234: 17,3471 51743 INDEX ADRSDIF2 # TTOAXIS AND HH ARE THE PARAMETERS UPON
061859,000235: 17,3472 71575 MP ACCFCTZ5 # WHICH THE APPROXIMATIONS TO TJET ARE
061860,000236: 17,3473 20001 DDOUBL # BASED.
061861,000237: 17,3474 20001 DDOUBL
061862,000238: 17,3475 53747 DXCH HH # DOUBLE PRECISION H SCALED AT 8 SEC(2).
061863,000239: 17,3476 51743 INDEX ADRSDIF2
061864,000240: 17,3477 31567 CAE 1/ANET2 # SCALED AT 2(7)/PI SEC(2)/RAD.
061865,000241: 17,3500 00006 EXTEND
061866,000242: 17,3501 71427 MP EDOT # SCALED AT PI/2(5)
061867,000243: 17,3502 55741 TS TTOAXIS # SCALED AT 4 SEC.
061868,000244:
061869,000245: # TEST WHETHER TJET GREATER THAN 50 MSEC.
061870,000246:
061871,000247: 17,3503 00006 EXTEND
061872,000248: 17,3504 73767 MP -.05AT2 # H - .05 TTOAXIS - .00125 G.T. ZERO
061873,000249: 17,3505 61746 AD HH # (SCALED AT 8 SEC(2) ).
061874,000250: 17,3506 67751 AD NEG2
061875,000251: 17,3507 00006 EXTEND
061876,000252: 17,3510 63536 BZMF FORMULA1
061877,000253:
061878,000254: # TEST WHETHER TJET GREATER THAN 150 MSEC.
061879,000255:
061880,000256: 17,3511 31741 CAE TTOAXIS
061881,000257: 17,3512 00006 EXTEND
061882,000258: 17,3513 73770 MP -.15AT2 # H - .15 TTOAXIS - .01125 G.T. ZERO
061883,000259: 17,3514 61746 AD HH # (SCALED AT 8 SEC(2) )
061884,000260: 17,3515 63761 AD -.0112A8
061885,000261: 17,3516 00006 EXTEND
061886,000262: 17,3517 63546 BZMF FORMULA2
061887,000263:
061888,000264: # IF TJET GREATER THAN 150 MSEC, ASSIGN IT VALUE OF 250 MSEC, SINCE THIS
061889,000265: # IS ENOUGH TO ASSURE NO SKIP NEXT CSP (100 MSEC).
061890,000266:
061891,000267: 17,3520 34741 FULLTIME CAF BIT11 # 250 MSEC SCALED AT 4 SEC.
061892,000268:
061893,000269: # RETURN TO CALLING PROGRAM WITH JET TIME SCALED AS TIME6 AND SIGNED.
061894,000270:
061895,000271: 17,3521 00006 RETURNTJ EXTEND # ALL BRANCHES TERMINATE HERE WITH TJET
061896,000272: 17,3522 71737 MP ROTSENSE # (SCALED AT 4 SEC) IN THE ACCUMULATOR.
061897,000273: 17,3523 51505 INDEX AXISCTR # ROTSENSE APPLIES SIGN AND CHANGES SCALE.
061898,000274: 17,3524 55525 TS TJETU
061899,000275: 17,3525 00006 EXTEND
061900,000276: 17,3526 51505 INDEX AXISCTR
061901,000277: 17,3527 71546 MP ACCSWU # SET SWITCH FOR JET SELECT IF ROTATION IS
061902,000278: 17,3530 30001 CAE L
061903,000279: 17,3531 00006 EXTEND # IN A SENSE FOR WHICH 1/ACCS HAS FORCED
061904,000280: 17,3532 63535 BZMF +3 # A MAX-JET CALCULATION.
Page 1457 |
061906,000282: 17,3533 34751 CAF FOUR
061907,000283: 17,3534 55742 TS NUMBERT
061908,000284: 17,3535 01744 TC HOLDQ # RETURN VIA SAVED Q.
061909,000285:
061910,000286: # TJET = H/(.025 + TTOAXIS) FOR TJET LESS THAN 50 MSEC.
061911,000287:
061912,000288: 17,3536 43766 FORMULA1 CS -.025AT4 # .025 SEC SCALED AT 4.
061913,000289: 17,3537 61741 AD TTOAXIS # SCALED AT 4 SECONDS.
061914,000290: 17,3540 53747 DXCH HH # STORE DENOMINATOR IN FIRST WORD OF H,
061915,000291: 17,3541 00006 EXTEND # WHICH NEED NOT BE PRESERVED. PICK UP
061916,000292: 17,3542 11746 DV HH # DP H AND DIVIDE BY DENOMINATOR.
061917,000293: 17,3543 00006 EXTEND
061918,000294: 17,3544 74736 MP BIT14 # RESCALE TJET FROM 2 TO USUAL 4 SEC.
061919,000295: 17,3545 13656 TCF CHKMINTJ # CHECK THAT TJET IS NOT LESS THAN MINIMUM
061920,000296:
061921,000297: # TJET = (H + .00375)/(0.1 + TTOAXIS) FOR TJET GREATER THAN 50 MSEC.
061922,000298:
061923,000299: 17,3546 00006 FORMULA2 EXTEND
061924,000300: 17,3547 33772 DCA .00375A8 # .00375 SEC(2) SCALED AT 8.
061925,000301: 17,3550 21747 DAS HH # STORE NUMERATOR IN DP H, WHICH NEED NOT
061926,000302: # BE PRESERVED.
061927,000303: 17,3551 31741 CAE TTOAXIS # SCALED AT 4 SEC.
061928,000304: 17,3552 63762 AD .1AT4 # 0.1 SEC SCALED AT 4.
061929,000305: 17,3553 53747 DXCH HH # STORE DENOMINATOR IN FIRST WORD OF H,
061930,000306: 17,3554 00006 EXTEND # WHICH NEED NOT BE PRESERVED. PICK UP
061931,000307: 17,3555 11746 DV HH # DP NUMERATOR AND DIVIDE BY DENOMINATOR
061932,000308: 17,3556 00006 EXTEND
061933,000309: 17,3557 74736 MP BIT14 # RESCALE TJET FROM 2 TO USUAL 4 SEC.
061934,000310: 17,3560 13521 TCF RETURNTJ # END SUBROUTINE.
061935,000311:
061936,000312: # SUBROUTINIZED COMPUTATIONS REQUIRED FOR ALL ENTRIES INTO CODING FOR ZONES 1, 2, AND 3.
061937,000313: # REACHED BY TC FROM 3 POINTS IN TJETLAW.
061938,000314:
061939,000315: 17,3561 41737 Z123COMP CS ROTSENSE # USED IN RETURNTJ SECTION TO RESCALE TJET
061940,000316: 17,3562 55737 TS ROTSENSE # AS TIME6 AND GIVE IT PROPER SIGN.
061941,000317: 17,3563 31427 CAE EDOT # SCALED AT PI/2(5) RAD/SEC.
061942,000318: 17,3564 00006 EXTEND
061943,000319: 17,3565 51743 INDEX ADRSDIF2
061944,000320: 17,3566 71566 MP 1/ANET1 # SCALED AT 2(7)/PI SEC(2)/RAD.
061945,000321: 17,3567 55741 TS TTOAXIS # STORE TIME-TO-AXIS SCALED AT 4 SECONDS.
061946,000322: 17,3570 63773 AD -TJMAX
061947,000323: 17,3571 00006 EXTEND # IS TIME TO AXIS LESS THAN 150 MSEC.
061948,000324: 17,3572 63574 BZMF +2
061949,000325: 17,3573 13520 TCF FULLTIME # NO. FIRE JETS, DO NOT CALCULATE TJET.
061950,000326: 17,3574 00002 RETURN # YES. GO ON TO FIND TJET
061951,000327:
061952,000328: 17,3575 03561 ZON1,2,3 TC Z123COMP # SUBROUTINIZED PREPARATION FOR ZONE1,2,3.
061953,000329:
061954,000330: # IF THE (NEG) DISTANCE BEYOND PARABOLA IS LESS THAN FLAT, USE SPECIAL
Page 1458 |
061956,000332: # LOGIC TO ACQUIRE MINIMUM IMPULSE LIMIT CYCLE. DURING POWERED FLIGHT
061957,000333: # OR ULLAGE, FLAT = 0
061958,000334:
061959,000335: 17,3576 31740 CAE FIREFCT # SCALED AT PI/4 RAD.
061960,000336: 17,3577 61554 AD FLAT
061961,000337: 17,3600 00006 EXTEND
061962,000338: 17,3601 63615 BZMF ZONE1 # NOT IN SPECIAL ZONES.
061963,000339:
061964,000340: # FIRE FOR AXIS OR, IF CLOSE, FIRE MINIMUM IMPULSE. IF ON AXIS, COAST.
061965,000341:
061966,000342: 17,3602 41555 ZONE2,3 CS ZONE3LIM # HEIGHT OF MIN-IMPULSE ZONE SET BY 1/ACCS
061967,000343: 17,3603 61741 AD TTOAXIS # 35 MSEC IN DRIFTING FLIGHT
061968,000344: 17,3604 00006 EXTEND # ZERO WHEN TRYING TO ENTER GTS CONTROL.
061969,000345: 17,3605 63610 BZMF ZONE3
061970,000346: 17,3606 31741 ZONE2 CAE TTOAXIS # FIRE TO AXIS.
061971,000347: 17,3607 13521 TCF RETURNTJ
061972,000348: 17,3610 11427 ZONE3 CCS EDOT # CHECK IF EDOT IS ZERO.
061973,000349: 17,3611 34746 CAF BIT6 # FIRE A ONE-JET MINIMUM IMPULSE.
061974,000350: 17,3612 13521 TCF RETURNTJ # TJET = +0.
061975,000351: 17,3613 05675 TC CCSHOLE # CANNOT BE BECAUSE NEG EDOT COMPLEMENTED.
061976,000352: 17,3614 13521 TCF RETURNTJ # TJET = +0.
061977,000353:
061978,000354: 17,3615 00006 ZONE1 EXTEND
061979,000355: 17,3616 51745 INDEX ADRSDIF1
061980,000356: 17,3617 61604 SU AXISDIST # SCALED AT PI/4 RAD.
061981,000357: 17,3620 00006 EXTEND
061982,000358: 17,3621 51743 INDEX ADRSDIF2
061983,000359: 17,3622 71574 MP ACCFCTZ1 # SCALED AT 2(7)/PI SEC(2)/RAD.
061984,000360: 17,3623 20001 DDOUBL
061985,000361: 17,3624 20001 DDOUBL
061986,000362: 17,3625 53747 DXCH HH # DOUBLE PRECISION H SCALED AT 8 SEC(2).
061987,000363:
061988,000364: # TEST WHETHER TOTAL TIME REQUIRED GREATER THAN 150 MSEC:
061989,000365: # 2 2
061990,000366: # IS .5(.150 - TTOAXIS) - H NEGATIVE (SCALED AT 8 SECONDS )
061991,000367:
061992,000368: 17,3626 31741 CAE TTOAXIS # TTOAXIS SCALED AT 4 SECONDS.
061993,000369: 17,3627 63773 AD -TJMAX # -.150 SECOND SCALED AT 4.
061994,000370: 17,3630 00006 EXTEND
061995,000371: 17,3631 70000 SQUARE
061996,000372: 17,3632 00006 EXTEND
061997,000373: 17,3633 61746 SU HH # HIGH WORD OF H SCALED AT 8 SEC(2).
061998,000374: 17,3634 00006 EXTEND
061999,000375: 17,3635 63520 BZMF FULLTIME # YES. NEED NOT CALCULATE TJET.
062000,000376:
062001,000377: # TEST WHETHER TIME BEYOND AXIS GREATER THAN 50 MSEC TO DETERMINE WHICH APPROXIMATION TO USE.
062002,000378:
062003,000379: 17,3636 31746 CAE HH
062004,000380: 17,3637 67751 AD NEG2
062005,000381: 17,3640 00006 EXTEND
Page 1459 |
062007,000383: 17,3641 63651 BZMF FORMULA3
062008,000384:
062009,000385: # TJET = H/0.1 + TTOAXIS + .0375 FOR APPROXIMATION OVER MORE THAN 50 MSEC.
062010,000386:
062011,000387: 17,3642 33763 CAF .1AT2 # STORE .1 SEC SCALED AT 2 FOR DIVISION.
062012,000388: 17,3643 53747 DXCH HH # DP H SCALED AT 8 SEC(2) NEED NOT BE
062013,000389: 17,3644 00006 EXTEND # PRESERVED.
062014,000390: 17,3645 11746 DV HH # QUOTIENT SCALED AT 4 SECONDS.
062015,000391: 17,3646 61741 AD TTOAXIS # SCALED AT 4 SEC.
062016,000392: 17,3647 63764 AD .0375AT4 # .0375 SEC SCALED AT 4.
062017,000393: 17,3650 13521 TCF RETURNTJ # END COMPUTATION.
062018,000394:
062019,000395: # TJET = H/.O25 + TTOAXIS FOR APPROXIMATION OVER LESS THAN 50 MSEC.
062020,000396:
062021,000397: 17,3651 43765 FORMULA3 CS -.025AT2 # STORE +.025 SEC SCALED AT 2 FOR DIVISION
062022,000398: 17,3652 53747 DXCH HH # PICK UP DP H AT 8, WHICH NEED NOT BE
062023,000399: 17,3653 00006 EXTEND # PRESERVED.
062024,000400: 17,3654 11746 DV HH # QUOTIENT SCALED AT 4 SECONDS.
062025,000401: 17,3655 61741 AD TTOAXIS # SCALED AT 4 SEC.
062026,000402:
062027,000403: # IF COMPUTED JET TIME IS LESS THAN TJMIN, TJET IS SET TO ZERO.
062028,000404: # MINIMUM IMPULSES REQUIRED IN ZONE 3 ARE NOT SUBJECT TO THIS CONSTRAINT, NATURALLY.
062029,000405:
062030,000406: 17,3656 63775 CHKMINTJ AD -TJMIN # IS COMPUTED TIME LESS THAN THE MINIMUM.
062031,000407: 17,3657 00006 EXTEND
062032,000408: 17,3660 63455 BZMF COASTTJ # YES, SET TIME TO ZERO.
062033,000409: 17,3661 63774 AD TJMIN # NO, RESTORE COMPUTED TIME.
062034,000410: 17,3662 13521 TCF RETURNTJ # END COMPUTATION.
062035,000411:
Page 1460 |
062037,000413: # *** ROUGHLAW ***
062038,000414:
062039,000415: # BEFORE ENTRY TO RUFLAW:
062040,000416: # 1. INDEXERS ADRSDIF1 AND ADRSDIF2 ARE SET ON BASIS OF AXIS, AND SIGN OF EDOT.
062041,000417: # 2. IF EDOT WAS NEGATIVE, E AND EDOT ARE ROTATED INTO UPPER HALF-PLANE AND ROTSENSE IS MADE NEGATIVE.
062042,000418: # 3. E IS SCALED AT PI RADIANS AND EDOT AT PI/4 RAD/SEC.
062043,000419: # (EXCEPT THE RUFLAW3 ENTRY WHEN E IS AT PI/4)
062044,000420:
062045,000421: # RUFLAW1: ERROR MORE NEGATIVE THAN PI/16 RAD. FIRE TO A RATE OF 6.5 DEG/SEC (IF JET TIME EXCEEDS 20 MSEC.).
062046,000422: # RUFLAW2: ERROR MORE POSITIVE THAN PI/16 RAD. FIRE TO AN OPPOSING RATE OF 6.5 DEG/SEC.
062047,000423: # RUFLAW3: ERROR RATE GREATER THAN PI/32 RAD/SEC AND ERROR WITHIN BOUNDS. COAST IF BELOW FIREFCT, FIRE IF ABOVE
062048,000424:
062049,000425: 17,3663 43776 RUFLAW1 CS RUFRATE # DECREMENT EDOT BY .1444 RAD/SEC AT PI/4
062050,000426: 17,3664 27427 ADS EDOT # WHICH IS THE TARGET RATE
062051,000427: 17,3665 00006 EXTEND
062052,000428: 17,3666 63707 BZMF SMALRATE # BRANCH IF RATE LESS THAN TARGET.
062053,000429: 17,3667 03745 TC RUFSETUP # REVERSE ROTSENSE AND INDICATE MAX JETS.
062054,000430: 17,3670 31427 CAE EDOT # PICK UP DESIRED RATE CHANGE.
062055,000431:
062056,000432: 17,3671 00006 RUFLAW12 EXTEND # COMPUTE TJET
062057,000433: 17,3672 51743 INDEX ADRSDIF2 # = (DESIRED RATE CHANGE)/(2-JET ACCEL.)
062058,000434: 17,3673 71570 MP 1/ANET1 +2
062059,000435: 17,3674 67744 AD -1/8 # IF TJET, SCALED AT 32 SEC, EXCEEDS
062060,000436: 17,3675 00006 EXTEND # 4 SECONDS, SET TJET TO TJMAX.
062061,000437: 17,3676 63700 BZMF +2
062062,000438: 17,3677 13520 TCF FULLTIME
062063,000439: 17,3700 00006 EXTEND
062064,000440: 17,3701 13520 BZF FULLTIME
062065,000441: 17,3702 64740 AD BIT12 # RESTORE COMPUTED TJET TO ACCUMULATOR.
062066,000442: 17,3703 20001 DAS A
062067,000443: 17,3704 20001 DAS A
062068,000444: 17,3705 20001 DAS A # RESCALED TJET AT 4 SECONDS.
062069,000445: 17,3706 13656 TCF CHKMINTJ # RETURN AS FROM FINELAW.
062070,000446:
062071,000447: 17,3707 03747 SMALRATE TC RUFSETUP +2 # SET NUMBERT AND FIREFCT FOR MAXIMUM JETS
062072,000448: 17,3710 11737 CCS ROTSENSE
062073,000449: 17,3711 34753 CAF ONE # MODIFY INDEXER TO POINT TO 1/ANET
062074,000450: 17,3712 13714 TCF +2 # CORRESPONDING TO THE PROPER SENSE.
062075,000451: 17,3713 37752 CAF NEGONE
062076,000452: 17,3714 27743 ADS ADRSDIF2
062077,000453:
062078,000454: 17,3715 41427 CS EDOT # (.144 AT PI/4 - EDOT) = DESIRED RATE CHNG.
062079,000455: 17,3716 13671 TCF RUFLAW12
062080,000456:
062081,000457: 17,3717 03745 RUFLAW2 TC RUFSETUP # REVERSE ROTSENSE AND INDICATE MAX JETS.
062082,000458: 17,3720 33776 CAF RUFRATE
062083,000459: 17,3721 61427 AD EDOT # (.144 AT PI/4 + EDOT) = DESIRED RATE CHNG.
062084,000460: 17,3722 54000 TS A # IF OVERFLOW SKIP, FIRE FOR FULL TIME.
062085,000461: 17,3723 13671 TCF RUFLAW12 # OTHERWISE, COMPUTE JET TIME.
062086,000462: 17,3724 13520 TCF FULLTIME
062087,000463:
Page 1461 |
062089,000465: 17,3725 03745 RUFLAW3 TC RUFSETUP # EXECUTE COMMON RUFLAW SUBROUTINE.
062090,000466: 17,3726 51745 INDEX ADRSDIF1
062091,000467: 17,3727 41600 CS FIREDB # CALCULATE DISTANCE FROM SWITCH CURVE
062092,000468: 17,3730 61751 AD E # 1/ANET1*EDOT*EDOT +E - FIREDB = 0
062093,000469: 17,3731 00006 EXTEND # SCALED AT 4 PI RADIANS
062094,000470: 17,3732 74741 MP BIT11
062095,000471: 17,3733 57427 XCH EDOT
062096,000472: 17,3734 00006 EXTEND
062097,000473: 17,3735 70000 SQUARE
062098,000474: 17,3736 00006 EXTEND
062099,000475: 17,3737 51745 INDEX ADRSDIF1
062100,000476: 17,3740 71570 MP 1/ANET1 +2
062101,000477: 17,3741 61427 AD EDOT
062102,000478: 17,3742 00006 EXTEND
062103,000479: 17,3743 63455 BZMF COASTTJ # COAST IF BELOW IT.
062104,000480: 17,3744 13520 TCF FULLTIME # FIRE FOR FULL PERIOD IF ABOVE IT.
062105,000481:
062106,000482: # SUBROUTINE USED IN ALL ENTRIES TO ROUGHLAW.
062107,000483:
062108,000484: 17,3745 41737 RUFSETUP CS ROTSENSE # REVERSE ROTSENSE WHEN ENTER HERE.
062109,000485: 17,3746 55737 TS ROTSENSE
062110,000486: 17,3747 34751 +2 CAF FOUR # REQUIRE MAXIMUM (2) JETS IN U,V-AXES.
062111,000487: 17,3750 55742 TS NUMBERT
062112,000488: 17,3751 34735 CAF NEGMAX # SUGGEST MAXIMUM (4) JETS IN P-AXIS.
062113,000489: 17,3752 55740 TS FIREFCT
062114,000490: 17,3753 00002 TC Q
062115,000491:
062116,000492: # CONSTANTS FOR TJETLAW
062117,000493:
062118,000494: 17,3754 77757 DEC -16 B-14 # AXISDIFF(INDEX) = NUMBER OF REGISTERS
062119,000495: 17,3755 00000 AXISDIFF DEC +0 B-14 # BETWEEN STORED 1/ACCS PARAMETERS FOR
062120,000496: 17,3756 00020 DEC 16 B-14 # THE INDEXED AXIS AND THE U-AXIS.
062121,000497: 17,3757 14400 SENSOR OCT 14400 # RATIO OF TJET SCALING WITHIN TJETLAW
062122,000498: # (4 SEC) TO SCALING FOR T6 (10.24 SEC).
062123,000499: 17,3760 75673 -3DEG DEC -.06667 # -3.0 DEGREES SCALED AT 45.
062124,000500: 17,3761 77750 -.0112A8 DEC -.00141 # -.01125 SEC(2) SCALED AT 8.
062125,000501: 17,3762 00632 .1AT4 DEC .025 # 0.1 SECOND SCALED AT 4.
062126,000502: 17,3763 01463 .1AT2 DEC .05 # 0.1 SEC SCALED AT 2.
062127,000503: 17,3764 00232 .0375AT4 DEC .00938 # .0375 SEC SCALED AT 4.
062128,000504: 17,3765 77462 -.025AT2 DEC -.0125 # -.025 SEC SCALED AT 2.
062129,000505: 17,3766 77631 -.025AT4 DEC -.00625
062130,000506: 17,3767 77145 -.05AT2 DEC -.025
062131,000507: 17,3770 75462 -.15AT2 DEC -.075
062132,000508: 17,3771 00007 25605 .00375A8 2DEC .00375 B-3
062133,000509:
062134,000510: 17,3773 76631 -TJMAX DEC -.0375 # LARGEST CALCULATED TIME. .150 SEC AT 4.
062135,000511: 17,3774 00122 TJMIN DEC .005 # SMALLEST ALLOWABLE TIME. .020 SEC AT 4.
062136,000512: 17,3775 77655 -TJMIN DEC -.005
062137,000513: 17,3776 04476 RUFRATE DEC .1444 # CORRESPONDS TO TARGET RATE OF 6.5 DEG/S.
End of include-file TJET_LAW.agc. Parent file is MAIN.agc