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. |
063247,000002: ## Copyright: Public domain.
063248,000003: ## Filename: TJET_LAW.agc
063249,000004: ## Purpose: A section of Luminary revision 210.
063250,000005: ## It is part of the source code for the Lunar Module's (LM)
063251,000006: ## Apollo Guidance Computer (AGC) for Apollo 15-17.
063252,000007: ## This file is intended to be a faithful transcription, except
063253,000008: ## that the code format has been changed to conform to the
063254,000009: ## requirements of the yaYUL assembler rather than the
063255,000010: ## original YUL assembler.
063256,000011: ## Reference: pp. 1458-1467
063257,000012: ## Assembler: yaYUL
063258,000013: ## Contact: Ron Burkey <info@sandroid.org>.
063259,000014: ## Website: www.ibiblio.org/apollo/index.html
063260,000015: ## Mod history: 2016-11-17 JL Created from Luminary131 version.
063261,000016: ## 2016-12-09 RRB Updated for Luminary210.
063262,000017: ## 2016-12-26 RSB Comment-text proofed using ProoferComments
063263,000018: ## and corrected errors found.
063264,000019:
![]() |
Page 1458 |
063266,000021: # PROGRAM DESCRIPTION
063267,000022: # DESIGNED BY: R. D. GOSS AND P. S. WEISSMAN
063268,000023: # CODED BY: P. S. WEISSMAN 28 FEBRUARY 1968
063269,000024:
063270,000025: # TJETLAW IS CALLED AS A SUBROUTINE WHEN THE LEM IS NOT DOCKED AND THE AUTOPILOT IS IN THE AUTOMATIC OR
063271,000026: # ATTITUDE-HOLD MODE TO CALCULATE THE JET-FIRING-TIME (TJET) REQUIRED FOR THE AXIS INDICATED BY AXISCTR:
063272,000027: # -1 INDICATES THE P-AXIS
063273,000028: # +0 INDICATES THE U-AXIS
063274,000029: # +1 INDICATES THE V-AXIS.
063275,000030: # THE REGISTERS E AND EDOT CONTAIN THE APPROPRIATE ATTITUDE ERROR AND ERROR RATE AND SENSETYP SHOWS WHETHER
063276,000031: # UNBALANCED COUPLES ARE PREFERRED. TJETLAW ALSO USES VARIOUS FUNCTIONS OF ACCELERATION AND DEADBAND WHICH ARE
063277,000032: # COMPUTED IN THE 1/ACCONT SECTION OF 1/ACCS AND ARE STORED IN SUCH AN ORDER THAT THEY CAN BE CONVENIENTLY
063278,000033: # ACCESSED BY INDEXING.
063279,000034:
063280,000035: # THE SIGN OF THE REQUIRED ROTATION IS CARRIED THROUGH TJETLAW AS ROTSENSE AND IS FINALLY APPLIED TO TJET JUST
063281,000036: # PREVIOUS TO ITS STORAGE IN THE LOCATION CORRESPONDING TO THE AXIS (TJP, TJU OR TJV). THE NUMBER OF JETS THAT
063282,000037: # TJETLAW ASSUMES WILL BE USED IS INDICATED BY THE SETTING OF NUMBERT FOR THE U- OR V-AXIS. TWO JETS ARE ALWAYS
063283,000038: # ASSUMED FOR THE P-AXIS ALTHOUGH FOUR JETS WILL BE FIRED WHEN FIREFCT IS MORE NEGATIVE THAN -4.0 DEGREES
063284,000039: # (FIREFCT IS THE DISTANCE TO A SWITCH CURVE IN THE PHASE PLANE) AND A LONG FIRING IS CALLED FOR.
063285,000040: # IN ORDER TO AVOID SCALING DIFFICULTIES, SIMPLE ALGORITHMS TAGGED RUFLAW1, -2 AND -3 ARE RESORTED TO WHEN THE
063286,000041: # ERROR AND/OR ERROR RATE ARE LARGE.
063287,000042:
063288,000043: # CALLING SEQUENCE:
063289,000044: # TC TJETLAW (MUST BE IN JASK)
063290,000045: # OR
063291,000046: # INHINT (MUST BE IN JASK)
063292,000047: # TC IBNKCALL
063293,000048: # CADR TJETLAW
063294,000049: # RELINT
063295,000050:
063296,000051: # EXIT: RETURN TO Q.
063297,000052:
063298,000053: # INPUT:
063299,000054: # FROM THE CALLER: E, EDOT, AXISCTR, SENSETYP, TJP, -U, -V.
063300,000055: # FROM 1/ACCONT: 48 ERASABLES BEGINNING AT BLOCKTOP (INCLUDING FLAT, ZONE3LIM AND ACCSWU,-V).
063301,000056:
063302,000057: # OUTPUT:
063303,000058: # TJP,-U OR -V, NUMBERT (DAPTEMP5), FIREFCT (DAPTEMP3).
063304,000059:
063305,000060: # DEBRIS:
063306,000061: # A, L, Q, E, EDOT, DAPTEMP1-6, DAPTREG1-4.
063307,000062:
063308,000063: # ALARM: NONE
063309,000064:
063310,000065: 17,3304 BANK 17
063311,000066: 17,2000 SETLOC DAPS2
063312,000067: 17,2000 BANK
063313,000068: 17,3304 E6,1524 EBANK= TJP
![]() |
Page 1459 |
063315,000070: 17,3304 COUNT* $$/DAPTJ
063316,000071:
063317,000072: 17,3304 00006 TJETLAW EXTEND # SAVE Q FOR RETURN.
063318,000073: 17,3305 23744 QXCH HOLDQ
063319,000074:
063320,000075: # SET INDEXERS TO CORRESPOND TO THE AXIS AND TO THE SIGN OF EDOT
063321,000076:
063322,000077: 17,3306 51505 INDEX AXISCTR # AXISDIFF(-1)=NO OF LOCATIONS BER P AND U
063323,000078: 17,3307 33755 CAF AXISDIFF # AXISDIFF(0) = 0
063324,000079: 17,3310 55745 TS ADRSDIF1 # AXISDIFF(+1)=NO OF LOCATIONS BET V AND U
063325,000080:
063326,000081: 17,3311 31427 CAE EDOT # IF EDOT NEGATIVE, PICK UP SET OF VALUES
063327,000082: 17,3312 00006 EXTEND # THAT ALLOW USE OF SAME CODING AS FOR
063328,000083: 17,3313 63320 BZMF NEGEDOT # POSITIVE EDOT.
063329,000084: 17,3314 31745 CAE ADRSDIF1 # SET A SECOND INDEXER WHICH MAY BE
063330,000085: 17,3315 55743 TS ADRSDIF2 # MODIFIED BY A DECISION FOR MAX JETS.
063331,000086: 17,3316 33757 CAF SENSOR # FOR POSITIVE EDOT, ROTSENSE IS
063332,000087: 17,3317 13330 TCF SETSENSE # INITIALIZED POSITIVE.
063333,000088:
063334,000089: 17,3320 41751 NEGEDOT CS E # IN ORDER FOR NEG EDOT CASE TO USE CODING
063335,000090: 17,3321 55751 TS E # OF POS EDOT, MUST MODIFY AS FOLLOWS:
063336,000091: 17,3322 41427 CS EDOT # 1. COMPLEMENT E AND EDOT.
063337,000092: 17,3323 55427 TS EDOT # 2. SET SENSE OF ROTATION TO NEGATIVE
063338,000093: 17,3324 34744 CAF BIT1 # (REVERSED LATER IF NECESSARY).
063339,000094: 17,3325 27745 ADS ADRSDIF1 # 3. INCREMENT INDEXERS BY ONE SO THAT
063340,000095: 17,3326 55743 TS ADRSDIF2 # THE PROPER PARAMETERS ARE ACCESSED.
063341,000096: 17,3327 43757 CS SENSOR
063342,000097: 17,3330 55737 SETSENSE TS ROTSENSE
063343,000098:
063344,000099: # TEST MAGNITUDE OF E (ATTITUDE ERROR, SINGLE-PRECISION, SCALED AT PI RADIANS):
063345,000100: # IF GREATER THAN (OR EQUAL TO) PI/16 RADIANS, GO TO THE SIMPLIFIED TJET ROUTINE.
063346,000101: # IF LESS THAN PI/16 RADIANS, RESCALE TO PI/4.
063347,000102:
063348,000103: 17,3331 31751 CAE E # PICK UP ATTITUDE ERROR FOR THIS AXIS
063349,000104: 17,3332 00006 EXTEND
063350,000105: 17,3333 74740 MP BIT5 # SHIFT RIGHT TEN BITS: IF A-REGISTER IS
063351,000106: 17,3334 10000 CCS A # ZERO, RESCALE AND TEST EDOT.
063352,000107: 17,3335 13717 TCF RUFLAW2
063353,000108: 17,3336 13340 TCF SCALEE
063354,000109: 17,3337 13663 TCF RUFLAW1
063355,000110: 17,3340 34730 SCALEE CAF BIT13 # ERROR IS IN L SCALED AT PI/16. RESCALE
063356,000111: 17,3341 00006 EXTEND # IT TO PI/4 AND SAVE IT.
063357,000112: 17,3342 70001 MP L
063358,000113: 17,3343 55751 TS E
063359,000114:
063360,000115: # TEST MAGNITUDE OF EDOT (ERROR RATE SCALED AT PI/4 RADIANS/SECOND)
063361,000116: # IF GREATER THAN (OR EQUAL TO) PI/32 RADIANS/SECOND, GO TO THE SIMPLIFIED TJET ROUTINE.
063362,000117: # IF LESS THAN PI/32 RADIANS/SECOND, THEN RESCALE TO PI/32 RADIANS/SECOND.
063363,000118:
063364,000119: 17,3344 31427 CAE EDOT # PICK UP SINGLE-PRECISION ERROR-RATE
![]() |
Page 1460 |
063366,000121: 17,3345 00006 EXTEND # FOR THIS AXIS=
063367,000122: 17,3346 74741 MP BIT4 # SHIFT RIGHT ELEVEN BITS, IF THE A-REG IS
063368,000123: 17,3347 00006 EXTEND # ZERO, THEN RESCALE AND USE FINELAW.
063369,000124: 17,3350 13352 BZF SCALEDOT
063370,000125: 17,3351 13725 TCF RUFLAW3
063371,000126: # *** FINELAW STARTS HERE ***
063372,000127:
063373,000128: 17,3352 23427 SCALEDOT LXCH EDOT # EDOT IS SCALED AT PI/32 RADIANS/SECOND.
063374,000129:
063375,000130: 17,3353 31427 CAE EDOT # COMPUTE (EDOT)(EDOT)
063376,000131: 17,3354 00006 EXTEND
063377,000132: 17,3355 70000 SQUARE # PRODUCT SCALED AT PI(2)/2(10) RAD/SEC.
063378,000133: 17,3356 00006 EXTEND
063379,000134: 17,3357 74730 MP BIT13 # SHIFT RIGHT TWO BITS TO RESCALE EDOTSQ
063380,000135: 17,3360 55736 TS EDOTSQ # TO PI(2)/2(8) RAD(2)/SEC(2).
063381,000136:
063382,000137: 17,3361 11751 ERRTEST CCS E # DOES BIG ERROR (THREE DEG BEYOND THE
063383,000138: 17,3362 13365 TCF +3 # DEADBAND) REQUIRE MAXIMUM JETS?
063384,000139: 17,3363 13365 TCF +2
063385,000140: 17,3364 13365 TCF +1
063386,000141: 17,3365 63760 AD -3DEG
063387,000142: 17,3366 00006 EXTEND
063388,000143: 17,3367 51745 INDEX ADRSDIF1
063389,000144: 17,3370 61600 SU FIREDB
063390,000145: 17,3371 00006 EXTEND
063391,000146: 17,3372 63377 BZMF SENSTEST # IF NOT: ARE UNBALANCED JETS PREFERRED|
063392,000147: 17,3373 34743 MAXJETS CAF TWO # IF YES: INCREMENT ADDRESS LOCATOR AND
063393,000148: 17,3374 27743 ADS ADRSDIF2 # SET SWITCH FOR JET SELECT LOGIC TO 4.
063394,000149: 17,3375 34742 CAF FOUR # (ALWAYS DO THIS FOR P-AXIS)
063395,000150: 17,3376 13402 TCF TJCALC
063396,000151: 17,3377 11500 SENSTEST CCS SENSETYP # DOES TRANSLATION PREFER MIN JETS.
063397,000152: 17,3400 13402 TCF TJCALC # YES. USE MIN-JET PARAMETERS.
063398,000153: 17,3401 13373 TCF MAXJETS # NO. GET MAX-JET PARAMETERS.
063399,000154: 17,3402 55742 TJCALC TS NUMBERT # SET TO +0,1,4 FOR (U,V-AXES) JET SELECT.
063400,000155:
063401,000156: # BEGINNING OF TJET CALCULATIONS:
063402,000157:
063403,000158: 17,3403 41736 CS EDOTSQ # SCALED AT PI(2)/2(8).
063404,000159: 17,3404 00006 EXTEND
063405,000160: 17,3405 51743 INDEX ADRSDIF2
063406,000161: 17,3406 71566 MP 1/ANET1 # .5/ACC SCALED AT 2(6)/PI SEC(2)/RADIAN.
063407,000162: 17,3407 51745 INDEX ADRSDIF1
063408,000163: 17,3410 61600 AD FIREDB # DEADBAND SCALED AT PI/4 RADIAN.
063409,000164: 17,3411 00006 EXTEND
063410,000165: 17,3412 61751 SU E # ATTITUDE ERROR SCALED AT PI/4 RADIAN.
063411,000166: 17,3413 55740 TS FIREFCT # -E-.5(EDOTSQ)/ACC-DB AT PI/4 RADIAN.
063412,000167: 17,3414 00006 EXTEND
063413,000168: 17,3415 63575 BZMF ZON1,2,3
063414,000169:
063415,000170: 17,3416 51745 ZONE4,5 INDEX ADRSDIF1
![]() |
Page 1461 |
063417,000172: 17,3417 31572 CAE 1/ACOAST # .5/ACC SCALED AT 2(6)/PI WHERE
063418,000173: 17,3420 00006 EXTEND # ACC = MAX(AMIN, AOS-).
063419,000174: 17,3421 71736 MP EDOTSQ # SCALED AT PI/2(8).
063420,000175: 17,3422 61751 AD E # SCALED AT PI/4
063421,000176: 17,3423 51745 INDEX ADRSDIF1
063422,000177: 17,3424 61602 AD COASTDB # SCALED AT PI/4 POS. FOR NEG. INTERCEPT.
063423,000178: 17,3425 00006 EXTEND # TEST E+.5(EDOTSQ)/ACC+DB AT PI/4 RADIAN.
063424,000179: 17,3426 63461 BZMF ZONE5 # IF FUNCTION NEGATIVE, FIND TJET.
063425,000180: # IF FUNCTION POSITIVE, IN ZONE 4.
063426,000181:
063427,000182: # ZONE 4 IS THE COAST REGION. HOWEVER, IF THE JETS ARE ON AND DRIVING TOWARD
063428,000183: # A. THE AXIS WITHIN + OR - (DB + FLAT) FOR DRIFTING FLIGHT, OR
063429,000184: # B. THE USUAL TARGET PARABOLA FOR POWERED FLIGHT
063430,000185: # THEN THE THRUSTERS ARE KEPT ON.
063431,000186:
063432,000187: 17,3427 51505 ZONE4 INDEX AXISCTR # IS THE CURRENT VALUE IN TJET NON-ZERO
063433,000188: 17,3430 41525 CS TJETU # WITH SENSE OPPOSITE TO EDOT,
063434,000189: 17,3431 00006 EXTEND # (I.E., ARE JETS ON AND FIRING TOWARD
063435,000190: 17,3432 71737 MP ROTSENSE # THE DESIRABLE STATE).
063436,000191: 17,3433 00006 EXTEND
063437,000192: 17,3434 63455 BZMF COASTTJ # NO. COAST.
063438,000193:
063439,000194: 17,3435 11554 JETSON CCS FLAT # YES. IS THIS DRIFTING OR POWERED FLIGHT|
063440,000195: 17,3436 13447 TCF DRIFT/ON # DRIFTING. GO MAKE FURTHER TEST.
063441,000196:
063442,000197: 17,3437 41740 CS FIREFCT # POWERED (OR ULLAGE). CAN TARGET PARABOLA
063443,000198: 17,3440 51745 INDEX ADRSDIF1 # BE REACHED FROM THIS POINT IN THE
063444,000199: 17,3441 61604 AD AXISDIST # PHASE PLANE|
063445,000200: 17,3442 00006 EXTEND
063446,000201: 17,3443 63455 BZMF COASTTJ # NO. SET TJET = 0.
063447,000202: 17,3444 03561 TC Z123COMP # YES. CALCULATE TJET AS THOUGH IN ZONE 1
063448,000203: 17,3445 31740 CAE FIREFCT # AFTER COMPUTING THE REQUIRED
063449,000204: 17,3446 13615 TCF ZONE1 # PARAMETERS.
063450,000205:
063451,000206: 17,3447 51745 DRIFT/ON INDEX ADRSDIF1 # CAN TARGET STRIP OF AXIS BE REACHED FROM
063452,000207: 17,3450 41600 CS FIREDB # THIS POINT IN THE PHASE PLANE|
063453,000208: 17,3451 60000 DOUBLE
063454,000209: 17,3452 61740 AD FIREFCT
063455,000210: 17,3453 00006 EXTEND
063456,000211: 17,3454 63457 BZMF +3
063457,000212: 17,3455 34746 COASTTJ CAF ZERO # NO. SET TJET = 0.
063458,000213: 17,3456 13521 TCF RETURNTJ
063459,000214:
063460,000215: 17,3457 03561 TC Z123COMP # YES. CALCULATE TJET AS THOUGH IN ZONE 2
063461,000216: 17,3460 13602 TCF ZONE2,3 # OR 3 AFTER COMPUTING REQUIRED VALUES.
063462,000217:
063463,000218: 17,3461 54001 ZONE5 TS L # TEMPORARILY STORE FUNCTION IN L.
063464,000219: 17,3462 11737 CCS ROTSENSE # MODIFY ADRSDIF2 FOR ACCESSING 1/ANET2
063465,000220: 17,3463 13467 TCF +4 # AND ACCFCTZ5, WHICH MUST BE PICKED UP
063466,000221: 17,3464 05701 TC CCSHOLE # FROM THE NEXT LOWER REGISTER IF THE
![]() |
Page 1462 |
063468,000223: 17,3465 44743 CS TWO # (ACTUAL) ERROR RATE IS NEGATIVE.
063469,000224: 17,3466 27743 ADS ADRSDIF2
063470,000225:
063471,000226: 17,3467 30001 +4 CAE L
063472,000227: 17,3470 00006 EXTEND
063473,000228: 17,3471 51743 INDEX ADRSDIF2 # TTOAXIS AND HH ARE THE PARAMETERS UPON
063474,000229: 17,3472 71575 MP ACCFCTZ5 # WHICH THE APPROXIMATIONS TO TJET ARE
063475,000230: 17,3473 20001 DDOUBL # BASED.
063476,000231: 17,3474 20001 DDOUBL
063477,000232: 17,3475 53747 DXCH HH # DOUBLE PRECISION H SCALED AT 8 SEC(2).
063478,000233: 17,3476 51743 INDEX ADRSDIF2
063479,000234: 17,3477 31567 CAE 1/ANET2 # SCALED AT 2(7)/PI SEC(2)/RAD.
063480,000235: 17,3500 00006 EXTEND
063481,000236: 17,3501 71427 MP EDOT # SCALED AT PI/2(5)
063482,000237: 17,3502 55741 TS TTOAXIS # SCALED AT 4 SEC.
063483,000238:
063484,000239: # TEST WHETHER TJET GREATER THAN 50 MSEC.
063485,000240:
063486,000241: 17,3503 00006 EXTEND
063487,000242: 17,3504 73767 MP -.05AT2 # H - .05 TTOAXIS - .00125 G.T. ZERO
063488,000243: 17,3505 61746 AD HH # (SCALED AT 8 SEC(2) ).
063489,000244: 17,3506 67767 AD NEG2
063490,000245: 17,3507 00006 EXTEND
063491,000246: 17,3510 63536 BZMF FORMULA1
063492,000247:
063493,000248: # TEST WHETHER TJET GREATER THAN 150 MSEC.
063494,000249:
063495,000250: 17,3511 31741 CAE TTOAXIS
063496,000251: 17,3512 00006 EXTEND
063497,000252: 17,3513 73770 MP -.15AT2 # H - .15 TTOAXIS - .01125 G.T. ZERO
063498,000253: 17,3514 61746 AD HH # (SCALED AT 8 SEC(2) )
063499,000254: 17,3515 63761 AD -.0112A8
063500,000255: 17,3516 00006 EXTEND
063501,000256: 17,3517 63546 BZMF FORMULA2
063502,000257:
063503,000258: # IF TJET GREATER THAN 150 MSEC, ASSIGN IT VALUE OF 250 MSEC, SINCE THIS
063504,000259: # IS ENOUGH TO ASSURE NO SKIP NEXT CSP (100 MSEC).
063505,000260:
063506,000261: 17,3520 34732 FULLTIME CAF BIT11 # 250 MSEC SCALED AT 4 SEC.
063507,000262:
063508,000263: # RETURN TO CALLING PROGRAM WITH JET TIME SCALED AS TIME6 AND SIGNED.
063509,000264:
063510,000265: 17,3521 00006 RETURNTJ EXTEND # ALL BRANCHES TERMINATE HERE WITH TJET
063511,000266: 17,3522 71737 MP ROTSENSE # (SCALED AT 4 SEC) IN THE ACCUMULATOR.
063512,000267: 17,3523 51505 INDEX AXISCTR # ROTSENSE APPLIES SIGN AND CHANGES SCALE.
063513,000268: 17,3524 55525 TS TJETU
063514,000269: 17,3525 00006 EXTEND
063515,000270: 17,3526 51505 INDEX AXISCTR
063516,000271: 17,3527 71546 MP ACCSWU # SET SWITCH FOR JET SELECT IF ROTATION IS
063517,000272: 17,3530 30001 CAE L
063518,000273: 17,3531 00006 EXTEND # IN A SENSE FOR WHICH 1/ACCS HAS FORCED
063519,000274: 17,3532 63535 BZMF +3 # A MAX-JET CALCULATION.
![]() |
Page 1463 |
063521,000276: 17,3533 34742 CAF FOUR
063522,000277: 17,3534 55742 TS NUMBERT
063523,000278: 17,3535 01744 TC HOLDQ # RETURN VIA SAVED Q.
063524,000279:
063525,000280: # TJET = H/(.025 + TTOAXIS) FOR TJET LESS THAN 50 MSEC.
063526,000281:
063527,000282: 17,3536 43766 FORMULA1 CS -.025AT4 # .025 SEC SCALED AT 4.
063528,000283: 17,3537 61741 AD TTOAXIS # SCALED AT 4 SECONDS.
063529,000284: 17,3540 53747 DXCH HH # STORE DENOMINATOR IN FIRST WORD OF H,
063530,000285: 17,3541 00006 EXTEND # WHICH NEED NOT BE PRESERVED. PICK UP
063531,000286: 17,3542 11746 DV HH # DP H AND DIVIDE BY DENOMINATOR.
063532,000287: 17,3543 00006 EXTEND
063533,000288: 17,3544 74727 MP BIT14 # RESCALE TJET FROM 2 TO USUAL 4 SEC.
063534,000289: 17,3545 13656 TCF CHKMINTJ # CHECK THAT TJET IS NOT LESS THAN MINIMUM
063535,000290:
063536,000291: # TJET = (H + .00375)/(0.1 + TTOAXIS) FOR TJET GREATER THAN 50 MSEC.
063537,000292:
063538,000293: 17,3546 00006 FORMULA2 EXTEND
063539,000294: 17,3547 33772 DCA .00375A8 # .00375 SEC(2) SCALED AT 8.
063540,000295: 17,3550 21747 DAS HH # STORE NUMERATOR IN DP H, WHICH NEED NOT
063541,000296: # BE PRESERVED.
063542,000297: 17,3551 31741 CAE TTOAXIS # SCALED AT 4 SEC.
063543,000298: 17,3552 63762 AD .1AT4 # 0.1 SEC SCALED AT 4.
063544,000299: 17,3553 53747 DXCH HH # STORE DENOMINATOR IN FIRST WORD OF H,
063545,000300: 17,3554 00006 EXTEND # WHICH NEED NOT BE PRESERVED. PICK UP
063546,000301: 17,3555 11746 DV HH # DP NUMERATOR AND DIVIDE BY DENOMINATOR
063547,000302: 17,3556 00006 EXTEND
063548,000303: 17,3557 74727 MP BIT14 # RESCALE TJET FROM 2 TO USUAL 4 SEC.
063549,000304: 17,3560 13521 TCF RETURNTJ # END SUBROUTINE.
063550,000305:
063551,000306: # SUBROUTINIZED COMPUTATIONS REQUIRED FOR ALL ENTRIES INTO CODING FOR ZONES 1, 2, AND 3.
063552,000307:
063553,000308: # REACHED BY TC FROM 3 POINTS IN TJETLAW.
063554,000309:
063555,000310: 17,3561 41737 Z123COMP CS ROTSENSE # USED IN RETURNTJ SECTION TO RESCALE TJET
063556,000311: 17,3562 55737 TS ROTSENSE # AS TIME6 AND GIVE IT PROPER SIGN.
063557,000312: 17,3563 31427 CAE EDOT # SCALED AT PI/2(5) RAD/SEC.
063558,000313: 17,3564 00006 EXTEND
063559,000314: 17,3565 51743 INDEX ADRSDIF2
063560,000315: 17,3566 71566 MP 1/ANET1 # SCALED AT 2(7)/PI SEC(2)/RAD.
063561,000316: 17,3567 55741 TS TTOAXIS # STORE TIME-TO-AXIS SCALED AT 4 SECONDS.
063562,000317: 17,3570 63773 AD -TJMAX
063563,000318: 17,3571 00006 EXTEND # IS TIME TO AXIS LESS THAN 150 MSEC.
063564,000319: 17,3572 63574 BZMF +2
063565,000320: 17,3573 13520 TCF FULLTIME # NO. FIRE JETS, DO NOT CALCULATE TJET.
063566,000321: 17,3574 00002 RETURN # YES. GO ON TO FIND TJET
063567,000322:
063568,000323: 17,3575 03561 ZON1,2,3 TC Z123COMP # SUBROUTINIZED PREPARATION FOR ZONE1,2,3.
063569,000324:
063570,000325: # IF THE (NEG) DISTANCE BEYOND PARABOLA IS LESS THAN FLAT, USE SPECIAL
![]() |
Page 1464 |
063572,000327: # LOGIC TO ACQUIRE MINIMUM IMPULSE LIMIT CYCLE. DURING POWERED FLIGHT
063573,000328: # OR ULLAGE, FLAT = 0
063574,000329:
063575,000330: 17,3576 31740 CAE FIREFCT # SCALED AT PI/4 RAD.
063576,000331: 17,3577 61554 AD FLAT
063577,000332: 17,3600 00006 EXTEND
063578,000333: 17,3601 63615 BZMF ZONE1 # NOT IN SPECIAL ZONES.
063579,000334:
063580,000335: # FIRE FOR AXIS OR, IF CLOSE, FIRE MINIMUM IMPULSE. IF ON AXIS, COAST.
063581,000336:
063582,000337: 17,3602 41555 ZONE2,3 CS ZONE3LIM # HEIGHT OF MIN-IMPULSE ZONE SET BY 1/ACCS
063583,000338: 17,3603 61741 AD TTOAXIS # 35 MSEC IN DRIFTING FLIGHT
063584,000339: 17,3604 00006 EXTEND # ZERO WHEN TRYING TO ENTER GTS CONTROL.
063585,000340: 17,3605 63610 BZMF ZONE3
063586,000341: 17,3606 31741 ZONE2 CAE TTOAXIS # FIRE TO AXIS.
063587,000342: 17,3607 13521 TCF RETURNTJ
063588,000343: 17,3610 11427 ZONE3 CCS EDOT # CHECK IF EDOT IS ZERO.
063589,000344: 17,3611 34737 CAF BIT6 # FIRE A ONE-JET MINIMUM IMPULSE.
063590,000345: 17,3612 13521 TCF RETURNTJ # TJET = +0.
063591,000346: 17,3613 05701 TC CCSHOLE # CANNOT BE BECAUSE NEG EDOT COMPLEMENTED.
063592,000347: 17,3614 13521 TCF RETURNTJ # TJET = +0.
063593,000348:
063594,000349: 17,3615 00006 ZONE1 EXTEND
063595,000350: 17,3616 51745 INDEX ADRSDIF1
063596,000351: 17,3617 61604 SU AXISDIST # SCALED AT PI/4 RAD.
063597,000352: 17,3620 00006 EXTEND
063598,000353: 17,3621 51743 INDEX ADRSDIF2
063599,000354: 17,3622 71574 MP ACCFCTZ1 # SCALED AT 2(7)/PI SEC(2)/RAD.
063600,000355: 17,3623 20001 DDOUBL
063601,000356: 17,3624 20001 DDOUBL
063602,000357: 17,3625 53747 DXCH HH # DOUBLE PRECISION H SCALED AT 8 SEC(2).
063603,000358:
063604,000359: # TEST WHETHER TOTAL TIME REQUIRED GREATER THAN 150 MSEC:
063605,000360: # 2 2
063606,000361: # IS .5(.150 - TTOAXIS) - H NEGATIVE (SCALED AT 8 SECONDS )
063607,000362:
063608,000363: 17,3626 31741 CAE TTOAXIS # TTOAXIS SCALED AT 4 SECONDS.
063609,000364: 17,3627 63773 AD -TJMAX # -.150 SECOND SCALED AT 4.
063610,000365: 17,3630 00006 EXTEND
063611,000366: 17,3631 70000 SQUARE
063612,000367: 17,3632 00006 EXTEND
063613,000368: 17,3633 61746 SU HH # HIGH WORD OF H SCALED AT 8 SEC(2).
063614,000369: 17,3634 00006 EXTEND
063615,000370: 17,3635 63520 BZMF FULLTIME # YES. NEED NOT CALCULATE TJET.
063616,000371:
063617,000372: # TEST WHETHER TIME BEYOND AXIS GREATER THAN 50 MSEC TO DETERMINE WHICH APPROXIMATION TO USE.
063618,000373:
063619,000374: 17,3636 31746 CAE HH
063620,000375: 17,3637 67767 AD NEG2
063621,000376: 17,3640 00006 EXTEND
![]() |
Page 1465 |
063623,000378: 17,3641 63651 BZMF FORMULA3
063624,000379:
063625,000380: # TJET = H/0.1 + TTOAXIS + .0375 FOR APPROXIMATION OVER MORE THAN 50 MSEC.
063626,000381:
063627,000382: 17,3642 33763 CAF .1AT2 # STORE .1 SEC SCALED AT 2 FOR DIVISION.
063628,000383: 17,3643 53747 DXCH HH # DP H SCALED AT 8 SEC(2) NEED NOT BE
063629,000384: 17,3644 00006 EXTEND # PRESERVED.
063630,000385: 17,3645 11746 DV HH # QUOTIENT SCALED AT 4 SECONDS.
063631,000386: 17,3646 61741 AD TTOAXIS # SCALED AT 4 SEC.
063632,000387: 17,3647 63764 AD .0375AT4 # .0375 SEC SCALED AT 4.
063633,000388: 17,3650 13521 TCF RETURNTJ # END COMPUTATION.
063634,000389:
063635,000390: # TJET = H/.O25 + TTOAXIS FOR APPROXIMATION OVER LESS THAN 50 MSEC.
063636,000391:
063637,000392: 17,3651 43765 FORMULA3 CS -.025AT2 # STORE +.025 SEC SCALED AT 2 FOR DIVISION
063638,000393: 17,3652 53747 DXCH HH # PICK UP DP H AT 8, WHICH NEED NOT BE
063639,000394: 17,3653 00006 EXTEND # PRESERVED.
063640,000395: 17,3654 11746 DV HH # QUOTIENT SCALED AT 4 SECONDS.
063641,000396: 17,3655 61741 AD TTOAXIS # SCALED AT 4 SEC.
063642,000397:
063643,000398: # IF COMPUTED JET TIME IS LESS THAN TJMIN, TJET IS SET TO ZERO.
063644,000399: # MINIMUM IMPULSES REQUIRED IN ZONE 3 ARE NOT SUBJECT TO THIS CONSTRAINT, NATURALLY.
063645,000400:
063646,000401: 17,3656 63775 CHKMINTJ AD -TJMIN # IS COMPUTED TIME LESS THAN THE MINIMUM.
063647,000402: 17,3657 00006 EXTEND
063648,000403: 17,3660 63455 BZMF COASTTJ # YES, SET TIME TO ZERO.
063649,000404: 17,3661 63774 AD TJMIN # NO, RESTORE COMPUTED TIME.
063650,000405: 17,3662 13521 TCF RETURNTJ # END COMPUTATION.
063651,000406:
![]() |
Page 1466 |
063653,000408: # *** ROUGHLAW ***
063654,000409:
063655,000410: # BEFORE ENTRY TO RUFLAW:
063656,000411: # 1. INDEXERS ADRSDIF1 AND ADRSDIF2 ARE SET ON BASIS OF AXIS, AND SIGN OF EDOT.
063657,000412: # 2. IF EDOT WAS NEGATIVE, E AND EDOT ARE ROTATED INTO UPPER HALF-PLANE AND ROTSENSE IS MADE NEGATIVE.
063658,000413: # 3. E IS SCALED AT PI RADIANS AND EDOT AT PI/4 RAD/SEC.
063659,000414: # (EXCEPT THE RUFLAW3 ENTRY WHEN E IS AT PI/4)
063660,000415:
063661,000416: # RUFLAW1: ERROR MORE NEGATIVE THAN PI/16 RAD. FIRE TO A RATE OF 6.5 DEG/SEC (IF JET TIME EXCEEDS 20 MSEC.).
063662,000417: # RUFLAW2: ERROR MORE POSITIVE THAN PI/16 RAD. FIRE TO AN OPPOSING RATE OF 6.5 DEG/SEC.
063663,000418: # RUFLAW3: ERROR RATE GREATER THAN PI/32 RAD/SEC AND ERROR WITHIN BOUNDS. COAST IF BELOW FIREFCT, FIRE IF ABOVE
063664,000419:
063665,000420: 17,3663 43776 RUFLAW1 CS RUFRATE # DECREMENT EDOT BY .1444 RAD/SEC AT PI/4
063666,000421: 17,3664 27427 ADS EDOT # WHICH IS THE TARGET RATE
063667,000422: 17,3665 00006 EXTEND
063668,000423: 17,3666 63707 BZMF SMALRATE # BRANCH IF RATE LESS THAN TARGET.
063669,000424: 17,3667 03745 TC RUFSETUP # REVERSE ROTSENSE AND INDICATE MAX JETS.
063670,000425: 17,3670 31427 CAE EDOT # PICK UP DESIRED RATE CHANGE.
063671,000426:
063672,000427: 17,3671 00006 RUFLAW12 EXTEND # COMPUTE TJET
063673,000428: 17,3672 51743 INDEX ADRSDIF2 # = (DESIRED RATE CHANGE)/(2-JET ACCEL.)
063674,000429: 17,3673 71570 MP 1/ANET1 +2
063675,000430: 17,3674 67762 AD -1/8 # IF TJET, SCALED AT 32 SEC, EXCEEDS
063676,000431: 17,3675 00006 EXTEND # 4 SECONDS, SET TJET TO TJMAX.
063677,000432: 17,3676 63700 BZMF +2
063678,000433: 17,3677 13520 TCF FULLTIME
063679,000434: 17,3700 00006 EXTEND
063680,000435: 17,3701 13520 BZF FULLTIME
063681,000436: 17,3702 64731 AD BIT12 # RESTORE COMPUTED TJET TO ACCUMULATOR.
063682,000437: 17,3703 20001 DAS A
063683,000438: 17,3704 20001 DAS A
063684,000439: 17,3705 20001 DAS A # RESCALED TJET AT 4 SECONDS.
063685,000440: 17,3706 13656 TCF CHKMINTJ # RETURN AS FROM FINELAW.
063686,000441:
063687,000442: 17,3707 03747 SMALRATE TC RUFSETUP +2 # SET NUMBERT AND FIREFCT FOR MAXIMUM JETS
063688,000443: 17,3710 11737 CCS ROTSENSE
063689,000444: 17,3711 34744 CAF ONE # MODIFY INDEXER TO POINT TO 1/ANET
063690,000445: 17,3712 13714 TCF +2 # CORRESPONDING TO THE PROPER SENSE.
063691,000446: 17,3713 37770 CAF NEGONE
063692,000447: 17,3714 27743 ADS ADRSDIF2
063693,000448:
063694,000449: 17,3715 41427 CS EDOT # (.144 AT PI/4 - EDOT) = DESIRED RATE CHNG.
063695,000450: 17,3716 13671 TCF RUFLAW12
063696,000451:
063697,000452: 17,3717 03745 RUFLAW2 TC RUFSETUP # REVERSE ROTSENSE AND INDICATE MAX JETS.
063698,000453: 17,3720 33776 CAF RUFRATE
063699,000454: 17,3721 61427 AD EDOT # (.144 AT PI/4 + EDOT) = DESIRED RATE CHNG.
063700,000455: 17,3722 54000 TS A # IF OVERFLOW SKIP, FIRE FOR FULL TIME.
063701,000456: 17,3723 13671 TCF RUFLAW12 # OTHERWISE, COMPUTE JET TIME.
063702,000457: 17,3724 13520 TCF FULLTIME
063703,000458:
![]() |
Page 1467 |
063705,000460: 17,3725 03745 RUFLAW3 TC RUFSETUP # EXECUTE COMMON RUFLAW SUBROUTINE.
063706,000461: 17,3726 51745 INDEX ADRSDIF1
063707,000462: 17,3727 41600 CS FIREDB # CALCULATE DISTANCE FROM SWITCH CURVE
063708,000463: 17,3730 61751 AD E # 1/ANET1*EDOT*EDOT +E - FIREDB = 0
063709,000464: 17,3731 00006 EXTEND # SCALED AT 4 PI RADIANS
063710,000465: 17,3732 74732 MP BIT11
063711,000466: 17,3733 57427 XCH EDOT
063712,000467: 17,3734 00006 EXTEND
063713,000468: 17,3735 70000 SQUARE
063714,000469: 17,3736 00006 EXTEND
063715,000470: 17,3737 51745 INDEX ADRSDIF1
063716,000471: 17,3740 71570 MP 1/ANET1 +2
063717,000472: 17,3741 61427 AD EDOT
063718,000473: 17,3742 00006 EXTEND
063719,000474: 17,3743 63455 BZMF COASTTJ # COAST IF BELOW IT.
063720,000475: 17,3744 13520 TCF FULLTIME # FIRE FOR FULL PERIOD IF ABOVE IT.
063721,000476:
063722,000477: # SUBROUTINE USED IN ALL ENTRIES TO ROUGHLAW.
063723,000478:
063724,000479: 17,3745 41737 RUFSETUP CS ROTSENSE # REVERSE ROTSENSE WHEN ENTER HERE.
063725,000480: 17,3746 55737 TS ROTSENSE
063726,000481: 17,3747 34742 +2 CAF FOUR # REQUIRE MAXIMUM (2) JETS IN U,V-AXES.
063727,000482: 17,3750 55742 TS NUMBERT
063728,000483: 17,3751 34726 CAF NEGMAX # SUGGEST MAXIMUM (4) JETS IN P-AXIS.
063729,000484: 17,3752 55740 TS FIREFCT
063730,000485: 17,3753 00002 TC Q
063731,000486:
063732,000487: # CONSTANTS FOR TJETLAW
063733,000488:
063734,000489: 17,3754 77757 DEC -16 B-14 # AXISDIFF(INDEX) = NUMBER OF REGISTERS
063735,000490: 17,3755 00000 AXISDIFF DEC +0 B-14 # BETWEEN STORED 1/ACCS PARAMETERS FOR
063736,000491: 17,3756 00020 DEC 16 B-14 # THE INDEXED AXIS AND THE U-AXIS.
063737,000492: 17,3757 14400 SENSOR OCT 14400 # RATIO OF TJET SCALING WITHIN TJETLAW
063738,000493: # (4 SEC) TO SCALING FOR T6 (10.24 SEC).
063739,000494: 17,3760 75673 -3DEG DEC -.06667 # -3.0 DEGREES SCALED AT 45.
063740,000495: 17,3761 77750 -.0112A8 DEC -.00141 # -.01125 SEC(2) SCALED AT 8.
063741,000496: 17,3762 00632 .1AT4 DEC .025 # 0.1 SECOND SCALED AT 4.
063742,000497: 17,3763 01463 .1AT2 DEC .05 # 0.1 SEC SCALED AT 2.
063743,000498: 17,3764 00232 .0375AT4 DEC .00938 # .0375 SEC SCALED AT 4.
063744,000499: 17,3765 77462 -.025AT2 DEC -.0125 # -.025 SEC SCALED AT 2.
063745,000500: 17,3766 77631 -.025AT4 DEC -.00625
063746,000501: 17,3767 77145 -.05AT2 DEC -.025
063747,000502: 17,3770 75462 -.15AT2 DEC -.075
063748,000503: 17,3771 00007 25605 .00375A8 2DEC .00375 B-3
063749,000504:
063750,000505: 17,3773 76631 -TJMAX DEC -.0375 # LARGEST CALCULATED TIME. .150 SEC AT 4.
063751,000506: 17,3774 00122 TJMIN DEC .005 # SMALLEST ALLOWABLE TIME. .020 SEC AT 4.
063752,000507: 17,3775 77655 -TJMIN DEC -.005
063753,000508: 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