Source Code

063079,000001: # Copyright: Public domain. 063080,000002: # Filename: TRIM_GIMBAL_CNTROL_SYSTEM.agc 063081,000003: # Purpose: Part of the source code for Luminary 1A build 099. 063082,000004: # It is part of the source code for the Lunar Module's (LM) 063083,000005: # Apollo Guidance Computer (AGC), for Apollo 11. 063084,000006: # Assembler: yaYUL 063085,000007: # Contact: Ron Burkey <info@sandroid.org>. 063086,000008: # Website: www.ibiblio.org/apollo. 063087,000009: # Pages: 1472-1485 063088,000010: # Mod history: 2009-05-27 RSB Adapted from the corresponding 063089,000011: # Luminary131 file, using page 063090,000012: # images from Luminary 1A. 063091,000013: 063092,000014: # This source code has been transcribed or otherwise adapted from 063093,000015: # digitized images of a hardcopy from the MIT Museum. The digitization 063094,000016: # was performed by Paul Fjeld, and arranged for by Deborah Douglas of 063095,000017: # the Museum. Many thanks to both. The images (with suitable reduction 063096,000018: # in storage size and consequent reduction in image quality as well) are 063097,000019: # available online at www.ibiblio.org/apollo. If for some reason you 063098,000020: # find that the images are illegible, contact me at info@sandroid.org 063099,000021: # about getting access to the (much) higher-quality images which Paul 063100,000022: # actually created. 063101,000023: 063102,000024: # Notations on the hardcopy document read, in part: 063103,000025: 063104,000026: # Assemble revision 001 of AGC program LMY99 by NASA 2021112-61 063105,000027: # 16:27 JULY 14, 1969 063106,000028: 063107,000029: # Page 1472 063108,000030: 21,3077 BANK 21 063109,000031: 21,3077 E6,1450 EBANK= QDIFF 063110,000032: 21,2000 SETLOC DAPS4 063111,000033: 21,2000 BANK 063112,000034: 063113,000035: 21,3077 COUNT* $$/DAPGT 063114,000036: 063115,000037: # CONTROL REACHES THIS POINT UNDER EITHER OF THE FOLLOWING TWO CONDITIONS ONCE THE DESCENT ENGINE AND THE DIGITAL 063116,000038: # AUTOPILOT ARE BOTH ON: 063117,000039: # A) THE TRIM GIMBAL CONTROL LAW WAS ON DURING THE PREVIOUS Q,R-AXIS TIME5 INTERRUPT (OR THE DAPIDLER 063118,000040: # INITIALIZATION WAS SET FOR TRIM GIMBAL CONTROL AND THIS IS THE FIRST PASS), OR 063119,000041: # B) THE Q,R-AXES RCS AUTOPILOT DETERMINED THAT THE VEHICLE WAS ENTERING (OR HAD JUST ENTERED) A COAST 063120,000042: # ZONE WITH A SMALL OFFSET ANGULAR ACCELERATION. 063121,000043: # GTS IS THE ENTRY TO THE GIMBAL TRIM SYSTEM FOR CONTROLLING ATTITUDE ERRORS AND RATES AS WELL AS ACCELERATIONS. 063122,000044: 063123,000045: 21,3077 37747 GTS CAF NEGONE # MAKE THE NEXT PASS THROUGH THE DAP BE 063124,000046: 21,3100 55631 TS COTROLER # THROUGH RCS CONTROL, 063125,000047: 21,3101 34751 CAF FOUR # AND ENSURE THAT IT IS NOT A SKIP. 063126,000048: 21,3102 55535 TS SKIPU 063127,000049: 21,3103 55536 TS SKIPV 063128,000050: 063129,000051: 21,3104 34752 CAF TWO 063130,000052: 21,3105 55633 TS INGTS # SET INDICATOR OF GTS CONTROL POSITIVE. 063131,000053: 21,3106 55632 TS QGIMTIMR # SET TIMERS TO 200 MSEC TO AVOID BOTH 063132,000054: 21,3107 55634 TS RGIMTIMR # RUNAWAY AND INTERFERENCE BY NULLING. 063133,000055: 063134,000056: # THE DRIVE SETTING ALGORITHM 063135,000057: 063136,000058: # DEL = SGN(OMEGA + ALPHA*ABS(ALPHA)/(2*K)) 063137,000059: # 2 1/2 2 3/2 063138,000060: # NEGUSUM = ERROR*K + ALPHA*(DEL*OMEGA + ALPHA /(3*K)) + DEL*K (DEL*OMEGA + ALPHA /(2*K)) 063139,000061: 063140,000062: # DRIVE = -SGN(NEGUSUM) 063141,000063: 063142,000064: 21,3110 30021 CA SR # SAVE THE SR. SHIFT IT LEFT TO CORRECT 063143,000065: 21,3111 60000 AD A # FOR THE RIGHT SHIFT DUE TO EDITING. 063144,000066: 21,3112 55505 TS SAVESR 063145,000067: 063146,000068: 21,3113 34752 GTSGO+DN CAF TWO # SET INDEXER FOR R-AXIS CALCULATIONS. 063147,000069: 21,3114 13116 TCF GOQTRIMG +1 063148,000070: 063149,000071: 21,3115 34755 GOQTRIMG CAF ZERO # SET INDEXER FOR Q-AXIS CALCULATIONS 063150,000072: 21,3116 55750 TS QRCNTR 063151,000073: # Page 1473 063152,000074: # RSB 2009 --------------------------------------------------------------------- 063153,000075: # Everything between this line and the similar line below was simply filled-in 063154,000076: # as-is from Luminary 131, and then verified to assemble to the proper binary 063155,000077: # values. This area is blank on the Luminary 099 print-out, as if the 063156,000078: # printer ribbon had run out. 063157,000079: 21,3117 51750 INDEX QRCNTR # AOS SCALED AT PI/2 063158,000080: 21,3120 31537 CA AOSQ 063159,000081: 21,3121 00006 EXTEND 063160,000082: 21,3122 74752 MP BIT2 # RESCALE AOS TO PI/4 063161,000083: 21,3123 00006 EXTEND 063162,000084: 21,3124 13130 BZF GTSQAXIS -3 # USE FULL SCALE FOR LARGER AOS ESTIMATES. 063163,000085: 063164,000086: 21,3125 50000 INDEX A 063165,000087: 21,3126 44734 CS LIMITS # LIMITS +1 CONTAINS NEGMAX. 063166,000088: 21,3127 56001 XCH L # LIMITS -1 CONTAINS POSMAX. 063167,000089: 063168,000090: 21,3130 11750 CCS QRCNTR # PICK UP RATE FOR THIS AXIS. RATE CELLS 063169,000091: 21,3131 50000 INDEX A # USE ADJACENT, NOT SEPARATED. AT PI/4 063170,000092: 21,3132 31436 CA EDOTQ 063171,000093: 21,3133 53744 GTSQAXIS DXCH WCENTRAL 063172,000094: 063173,000095: 21,3134 51750 INDEX QRCNTR # COLLECT K FOR THIS AXIS 063174,000096: 21,3135 31504 CA KQ 063175,000097: 21,3136 55741 TS KCENTRAL 063176,000098: 063177,000099: 21,3137 00006 EXTEND # CONTROL AUTHORITY ZERO. AVOID DRIVING 063178,000100: 21,3140 13576 BZF POSDRIVE +1 # ENGINE BELL TO THE STOPS. 063179,000101: 063180,000102: 21,3141 51750 INDEX QRCNTR # QDIFF, RDIFF ARE STORED IN D.P. 063181,000103: 21,3142 31450 CAE QDIFF 063182,000104: 063183,000105: 21,3143 00006 ALGORTHM EXTEND # Q(R)DIFF IS THETA (ERROR) SCALED AT PI. 063184,000106: 21,3144 71741 MP KCENTRAL # FORM K*ERROR AT PI(2)/2(8), IN D.P. 063185,000107: 21,3145 23737 LXCH K2THETA 063186,000108: 21,3146 00006 EXTEND 063187,000109: 21,3147 74747 MP BIT5 # RESCALE TO 4*PI(2) 063188,000110: 21,3150 53740 DXCH K2THETA 063189,000111: 21,3151 00006 EXTEND 063190,000112: 21,3152 74747 MP BIT5 # FIRST TERM OF NEGUSUM IN K2THETA. 063191,000113: 21,3153 27740 ADS K2THETA +1 # NO CARRY NEEDED D.P. AT 4*PI(2) 063192,000114: 063193,000115: 21,3154 41744 CS ACENTRAL # FORM ALPHA(2)/(2*K) AT 16*PI, IN D.P., 063194,000116: 21,3155 00006 EXTEND # LIMITING QUOTIENT TO AVOID OVERFLOW. 063195,000117: 21,3156 74736 MP BIT14 # -ALPHA/2 IN A, SCALED AT PI/4 063196,000118: 21,3157 00006 EXTEND 063197,000119: 21,3160 71744 MP ACENTRAL # -ALPHA(2)/2 IN A,L, SCALED AT PI(2)/16) 063198,000120: 21,3161 61741 AD KCENTRAL 063199,000121: 21,3162 00006 EXTEND 063200,000122: 21,3163 63200 BZMF HUGEQUOT # K-ALPHA(2)/2 SHOULD BE PNZ FO DIVISION 063201,000123: 063202,000124: 21,3164 00006 EXTEND 063203,000125: 21,3165 40001 DCS A # ALPHA(2)/2 - K 063204,000126: 21,3166 61741 AD KCENTRAL 063205,000127: # RSB 2009 --------------------------------------------------------------------- 063206,000128: 21,3167 00006 EXTEND 063207,000129: 21,3170 11741 DV KCENTRAL # HIGH ORDER OF QUOTIENT. 063208,000130: 21,3171 57746 XCH A2CNTRAL 063209,000131: 21,3172 30001 CA L # SHIFT UP THE REMAINDER. 063210,000132: 21,3173 22007 LXCH 7 # ZERO LOW-ORDER DIVIDEND. 063211,000133: 21,3174 00006 EXTEND 063212,000134: # Page 1474 063213,000135: 21,3175 11741 DV KCENTRAL 063214,000136: 21,3176 57747 XCH A2CNTRAL +1 # QUOTIENT STORED AT 16*PI, D.P. 063215,000137: 21,3177 13203 TCF HAVEQUOT 063216,000138: 063217,000139: 21,3200 34733 HUGEQUOT CA POSMAX 063218,000140: 21,3201 54001 TS L 063219,000141: 21,3202 53747 DXCH A2CNTRAL # LIMITED QUOTIENT STORED AT 16*PI, D.P. 063220,000142: 063221,000143: 21,3203 31743 HAVEQUOT CA WCENTRAL 063222,000144: 21,3204 00006 EXTEND 063223,000145: 21,3205 74743 MP BIT9 # RESCALE OMEGA AT 16*PI IN D.P. 063224,000146: 21,3206 53743 DXCH K2CNTRAL # LOWER WORD OVERLAYS OMEGA IN WCENTRAL 063225,000147: 063226,000148: 21,3207 00006 EXTEND 063227,000149: 21,3210 31743 DCA K2CNTRAL 063228,000150: 21,3211 53752 DXCH FUNCTION 063229,000151: 063230,000152: 21,3212 31744 CA ACENTRAL # GET ALPHA*ABS(ALPHA)/(2*K) 063231,000153: 21,3213 00006 EXTEND 063232,000154: 21,3214 63220 BZMF +4 063233,000155: 063234,000156: 21,3215 00006 EXTEND 063235,000157: 21,3216 31747 DCA A2CNTRAL 063236,000158: 21,3217 13222 TCF +3 063237,000159: 063238,000160: 21,3220 00006 EXTEND 063239,000161: 21,3221 41747 DCS A2CNTRAL 063240,000162: 063241,000163: 21,3222 21752 DAS FUNCTION # OMEGA + ALPHA*ABS(ALPHA)/(2*K) AT 16*PI 063242,000164: 063243,000165: 21,3223 11751 CCS FUNCTION # DEL = +1 FOR FUNCT1 GREATER THAN ZERO. 063244,000166: 21,3224 13230 TCF POSFNCT1 # OTHERWISE DEL = -1 063245,000167: 21,3225 13227 TCF +2 063246,000168: 21,3226 13232 TCF NEGFNCT1 063247,000169: 063248,000170: 21,3227 11752 CCS FUNCTION +1 # USE LOW ORDER WORD SINCE HIGH IS ZERO 063249,000171: 21,3230 34753 POSFNCT1 CAF BIT1 063250,000172: 21,3231 13233 TCF +2 063251,000173: 21,3232 44753 NEGFNCT1 CS BIT1 063252,000174: 21,3233 55745 TS DEL 063253,000175: 063254,000176: 21,3234 11745 CCS DEL # REPLACE OMEGA BY DEL*OMEGA 063255,000177: 21,3235 13247 TCF FUNCT2 # POSITIVE DEL VALUE. PROCEED. 063256,000178: 21,3236 13240 TCF DEFUNCT 063257,000179: 21,3237 13244 TCF NEGFNCT2 063258,000180: 063259,000181: 21,3240 55742 DEFUNCT TS K2CNTRAL 063260,000182: 21,3241 55743 TS K2CNTRAL +1 063261,000183: 21,3242 13247 TCF FUNCT2 063262,000184: 063263,000185: # Page 1475 063264,000186: 21,3243 65252 NEG1/3 DEC -.33333 063265,000187: 063266,000188: 21,3244 00006 NEGFNCT2 EXTEND 063267,000189: 21,3245 41743 DCS K2CNTRAL 063268,000190: 21,3246 53743 DXCH K2CNTRAL 063269,000191: 063270,000192: 21,3247 00006 FUNCT2 EXTEND 063271,000193: 21,3250 31747 DCA A2CNTRAL 063272,000194: 21,3251 21743 DAS K2CNTRAL # DEL*OMEGA + ALPHA(2)/(2*K) AT 16*PI, D.P. 063273,000195: 063274,000196: 21,3252 31746 FUNCT3 CA A2CNTRAL 063275,000197: 21,3253 00006 EXTEND 063276,000198: 21,3254 73243 MP NEG1/3 063277,000199: 21,3255 53747 DXCH A2CNTRAL 063278,000200: 21,3256 30001 CA L 063279,000201: 21,3257 00006 EXTEND 063280,000202: 21,3260 73243 MP NEG1/3 063281,000203: 21,3261 27747 ADS A2CNTRAL +1 063282,000204: 21,3262 54001 TS L 063283,000205: 21,3263 13265 TCF +2 # A2CNTRAL NOW CONTAINS -ALPHA(2)/(6*K), 063284,000206: 21,3264 27746 ADS A2CNTRAL # SCALED AT 16*PI, IN D.P. 063285,000207: 063286,000208: 21,3265 00006 EXTEND 063287,000209: 21,3266 31743 DCA K2CNTRAL # DEL*OMEGA + ALPHA(2)/(3*K) IN A2CNTRAL, 063288,000210: 21,3267 21747 DAS A2CNTRAL # SCALED AT 16*PI, D.P. 063289,000211: 063290,000212: 21,3270 31746 CA A2CNTRAL 063291,000213: 21,3271 00006 EXTEND 063292,000214: 21,3272 71744 MP ACENTRAL 063293,000215: 21,3273 21740 DAS K2THETA 063294,000216: 21,3274 31747 CA A2CNTRAL +1 063295,000217: 21,3275 00006 EXTEND 063296,000218: 21,3276 71744 MP ACENTRAL # ACENTRAL MAY NOW BE OVERLAID. 063297,000219: 21,3277 27740 ADS K2THETA +1 063298,000220: 21,3300 54001 TS L 063299,000221: 21,3301 13303 TCF +2 # TWO TERMS OF NEGUSUM ACCUMULATED, SO FAR 063300,000222: 21,3302 27737 ADS K2THETA # SCALED AT 4*PI(2), IN D.P. 063301,000223: 063302,000224: 21,3303 31742 GETROOT CA K2CNTRAL # K*(DEL*OMEGA + ALPHA(2)/(2*K)) IS THE 063303,000225: 21,3304 00006 EXTEND # TERM FOR WHICH A SQUARE ROOT IS NEEDED. 063304,000226: 21,3305 71741 MP KCENTRAL # K AT PI/2(8) 063305,000227: 21,3306 53752 DXCH FUNCTION 063306,000228: 21,3307 31743 CA K2CNTRAL +1 063307,000229: 21,3310 00006 EXTEND 063308,000230: 21,3311 71741 MP KCENTRAL 063309,000231: 21,3312 27752 ADS FUNCTION +1 063310,000232: 21,3313 54001 TS L 063311,000233: 21,3314 13316 TCF +2 063312,000234: 21,3315 27751 ADS FUNCTION # DESIRED TERM IN FUNCTION, AT PI(2)/16 063313,000235: # Page 1476 063314,000236: 21,3316 11745 CCS DEL 063315,000237: 21,3317 13524 TCF RSTOFGTS 063316,000238: 21,3320 13566 TCF NEGUSUM 063317,000239: 21,3321 13323 TCF NEGATE 063318,000240: 21,3322 13566 TCF NEGUSUM 063319,000241: 063320,000242: 21,3323 00006 NEGATE EXTEND 063321,000243: 21,3324 41743 DCS K2CNTRAL 063322,000244: 21,3325 53743 DXCH K2CNTRAL 063323,000245: 21,3326 13524 TCF RSTOFGTS 063324,000246: 063325,000247: 16,3735 BANK 16 063326,000248: 16,3735 E6,1501 EBANK= NEGUQ 063327,000249: 16,2000 SETLOC DAPS1 063328,000250: 16,2000 BANK 063329,000251: 063330,000252: # THE WRCHN12 SUBROUTINE SETS BITS 9,10,11,12 OF CHANNEL 12 ON THE BASIS OF THE CONTENTS OF NEGUQ,NEGUR WHICH ARE 063331,000253: # THE NEGATIVES OF THE DESIRED ACCELERATION CHANGES. ACDT+C12 SETS Q(R)ACCDOT TO REFLECT THE NEW DRIVES. 063332,000254: 063333,000255: # WARNING: ACDT+C12 AND WRCHN12 MUST BE CALLED WITH INTERRUPT INHIBITED. 063334,000256: 063335,000257: 16,3735 07400 BGIM OCTAL 07400 063336,000258: 16,3736 0066 CHNL12 EQUALS ITEMP6 063337,000259: 16,3736 41501 ACDT+C12 CS NEGUQ 063338,000260: 16,3737 00006 EXTEND # GIMBAL DRIVE REQUESTS. 063339,000261: 16,3740 71507 MP ACCDOTQ 063340,000262: 16,3741 23510 LXCH QACCDOT 063341,000263: 16,3742 41503 CS NEGUR 063342,000264: 16,3743 00006 EXTEND 063343,000265: 16,3744 71511 MP ACCDOTR 063344,000266: 16,3745 23512 LXCH RACCDOT 063345,000267: 063346,000268: 16,3746 11501 CCS NEGUQ 063347,000269: 16,3747 34742 CAF BIT10 063348,000270: 16,3750 13752 TCF +2 063349,000271: 16,3751 34743 CAF BIT9 063350,000272: 16,3752 54066 TS CHNL12 063351,000273: 063352,000274: 16,3753 11503 CCS NEGUR 063353,000275: 16,3754 34740 CAF BIT12 063354,000276: 16,3755 13757 TCF +2 063355,000277: 16,3756 34741 CAF BIT11 063356,000278: 16,3757 26066 ADS CHNL12 # (STORED RESULT NOT USED AT PRESENT) 063357,000279: 063358,000280: 16,3760 43735 CS BGIM 063359,000281: 16,3761 00006 EXTEND 063360,000282: 16,3762 02012 RAND CHAN12 063361,000283: 16,3763 60066 AD CHNL12 063362,000284: 16,3764 00006 EXTEND 063363,000285: 16,3765 01012 WRITE CHAN12 063364,000286: # Page 1477 063365,000287: 16,3766 44747 CS CALLGMBL # TURN OFF REQUEST FOR ACDT+C12 EXECUTION. 063366,000288: 16,3767 71273 MASK RCSFLAGS 063367,000289: 16,3770 55273 TS RCSFLAGS 063368,000290: 063369,000291: 16,3771 00002 TC Q # RETURN TO CALLER. 063370,000292: 063371,000293: 21,3327 BANK 21 063372,000294: 21,3327 E6,1450 EBANK= QDIFF 063373,000295: 21,2000 SETLOC DAPS4 063374,000296: 21,2000 BANK 063375,000297: 063376,000298: # Page 1478 063377,000299: # SUBROUTINE TIMEGMBL: MOD 0, OCTOBER 1967, CRAIG WORK 063378,000300: 063379,000301: # TIMEGMBL COMPUTES THE DRIVE TIME NEEDED FOR THE TRIM GIMBAL TO POSITION THE DESCENT ENGINE NOZZLE SO AS TO NULL 063380,000302: # THE OFFSET ANGULAR ACCELERATION ABOUT THE Q (OR R) AXIS. INSTEAD OF USING AOSQ(R), TIMEGMBL USES .4*AOSQ(R), 063381,000303: # SCALED AT PI/8. FOR EACH AXIS, THE DRIVE TIME IS COMPUTED AS ABS(ALPHA/ACCDOT). A ZERO 063382,000304: # ALPHA OR ACCDOT OR A ZERO QUOTIENT TURNS OFF THE GIMBAL DRIVE IMMEDIATELY. OTHERWISE, THE GIMBAL IS TURNED ON 063383,000305: # DRIVING IN THE CORRECT DIRECTION. THE Q(R)GIMTIMR IS SET TO TERMINATE THE DRIVE AND Q(R)ACCDOT 063384,000306: # IS STORED TO REFLECT THE NEW ACCELERATION DERIVATIVE. NEGUQ(R) WILL CONTAIN +1,+0,-1 FOR A Q(R)ACCDOT VALUE 063385,000307: # WHICH IS NEGATIVE, ZERO, OR POSITIVE. 063386,000308: 063387,000309: # INPUTS: AOSQ,AOSR, SCALED AT P1/2, AND ACCDOTQ, ACCDOTR AT PI/2(7). PI/2(7). 063388,000310: 063389,000311: # OUTPUTS: NEW GIMBAL DRIVE BITS IN CHANNEL 12, NEGUQ, NEGUR, QACCDOT, AND RACCDOT, THE LAST SCALED AT PI/2(7). 063390,000312: # Q(R)GIMTIMR WILL BE SET TO TIME AND TERMINATE GIMBAL DRIVE(S). 063391,000313: 063392,000314: # DEBRIS: A, L, Q, ITEMPS 2, 3, 6, AND RUPTREG2 AND ACDT+C12 DEBRIS. 063393,000315: 063394,000316: # EXITS: VIA TC Q. 063395,000317: 063396,000318: # ALARMS, ABORTS: NONE. 063397,000319: 063398,000320: # SUBROUTINES: ACDT+C12, IBNKCALL 063399,000321: 063400,000322: # WARNING: THIS SUBROUTINE WRITES INTO CHANNEL 12 AND USES THE ITEMPS. THEREFORE IT MAY ONLY BE CALLED WITH 063401,000323: # INTERRUPT INHIBITED. 063402,000324: 063403,000325: # ERASABLE STORAGE CONFIGURATION (NEEDED BY THE INDEXING METHODS): 063404,000326: # NEGUQ ERASE +2 # NEGATIVE OF Q-AXIS GIMBAL DRIVE 063405,000327: # (SPWORD) EQUALS NEGUQ +1 # ANY S.P. ERASABLE NUMBER, NOW THRSTCMD 063406,000328: # NEGUR EQUALS NEGUQ +2 # NEGATIVE OF R-AXIS GIMBAL DRIVE 063407,000329: # ACCDOTQ ERASE +2 # Q-JERK TERM SCALED AT PI/2(7) RAD/SEC(3) 063408,000330: # (SPWORD) EQUALS ACCDOTQ +1 # ANY S.P. ERASABLE NUMBER NOW QACCDOT 063409,000331: # ACCDOTR EQUALS ACCDOTQ +2 # R-JERK TERM SCALED AT PI/2(7) RAD/SEC(3) 063410,000332: # # ACCDOTQ, ACCDOTR ARE MAGNITUDES. 063411,000333: # AOSQ ERASE +4 # Q-AXIS ACC., D.P. AT PI/2 R/SEC(2) 063412,000334: # AOSR EQUALS AOSQ +2 # R-AXIS ACCELERATION SCALED AT PI/2 R/S2 063413,000335: 063414,000336: 21,3327 0066 QRNDXER EQUALS ITEMP6 063415,000337: 21,3327 23146 OCT23146 OCTAL 23146 # DECIMAL .6 063416,000338: 21,3330 0063 NZACCDOT EQUALS ITEMP3 063417,000339: 063418,000340: 21,3330 34753 TIMEGMBL CAF ONE # INITIALZE ALLOWGTS. 063419,000341: 21,3331 55502 TS ALLOWGTS 063420,000342: 063421,000343: 21,3332 34752 CAF TWO # SET UP LOOP FOR R AXIS. 063422,000344: 21,3333 22002 LXCH Q # SAVE RETURN ADDRESS. 063423,000345: 21,3334 22071 LXCH RUPTREG2 063424,000346: # Page 1479 063425,000347: 21,3335 13337 TCF +2 063426,000348: 21,3336 34755 TIMQGMBL CAF ZERO # NOW DO THE Q-AXIS 063427,000349: 21,3337 54066 TS QRNDXER 063428,000350: 21,3340 50066 INDEX QRNDXER 063429,000351: 21,3341 31507 CA ACCDOTQ # ACCDOT IS PRESUMED TO BE AT PI/2(7). 063430,000352: 21,3342 00006 EXTEND 063431,000353: 21,3343 63413 BZMF TGOFFNOW # IS ACCDOT LESS THAN OR EQUAL TO 0? 063432,000354: 21,3344 54063 TS NZACCDOT # NO. STORE NON-ZERO, POSITIVE ACCDOT. 063433,000355: 063434,000356: 21,3345 50066 ALPHATRY INDEX QRNDXER 063435,000357: 21,3346 41537 CS AOSQ 063436,000358: 21,3347 00006 EXTEND 063437,000359: 21,3350 13413 BZF TGOFFNOW # IS ALPHA ZERO? 063438,000360: 063439,000361: 21,3351 54002 TS Q # SAVE A COPY OF -AOS. 063440,000362: 21,3352 00006 EXTEND # NO. RESCALE FOR TIMEGMBL USE. 063441,000363: 21,3353 73327 MP OCT23146 # OCTAL 23146 IS DECIMAL .6 063442,000364: 21,3354 60002 AD Q # -1.6*AOS AT PI/2 = -.4*AOS AT PI/8 063443,000365: 21,3355 54001 TS L # WAS THERE OVERFLOW? 063444,000366: 21,3356 13363 TCF SETNEGU # NO. COMPUTE DRIVE TIME. 063445,000367: 063446,000368: 21,3357 40000 CS A # RECOVER -SGN(AOS) IN THE A REGISTER. 063447,000369: 21,3360 50066 INDEX QRNDXER # YES. START DRIVE WITHOUT WAITLIST. 063448,000370: 21,3361 57501 XCH NEGUQ 063449,000371: 21,3362 13417 TCF NOTALLOW # KNOCK DOWN THE ALLOWGTS FLAG. 063450,000372: 063451,000373: 21,3363 00006 SETNEGU EXTEND 063452,000374: 21,3364 63371 BZMF POSALPH 063453,000375: 063454,000376: 21,3365 40000 COM 063455,000377: 21,3366 54062 TS ITEMP2 # STORE -ABS(.4*AOS) SCALED AT PI/8. 063456,000378: 21,3367 44753 CS BIT1 063457,000379: 21,3370 13373 TCF POSALPH +2 063458,000380: 21,3371 54062 POSALPH TS ITEMP2 # STORE -ABS(.4*AOS) SCALED AT PI/8. 063459,000381: 21,3372 34753 CA BIT1 063460,000382: 21,3373 50066 +2 INDEX QRNDXER # SGN(AOS) INTO NEGU 063461,000383: 21,3374 55501 TS NEGUQ # STORE SGN(ALPHA) AS NEGU 063462,000384: 063463,000385: 21,3375 30063 CA NZACCDOT 063464,000386: 21,3376 00006 EXTEND 063465,000387: 21,3377 74740 MP BIT12 # 2*ACCDOT, SCALED AT PI/8. 063466,000388: 21,3400 60062 AD ITEMP2 # -ABS(ALPHS) + 2*ACCDOT, AT PI/8. 063467,000389: 21,3401 00006 EXTEND 063468,000390: 21,3402 63417 BZMF NOTALLOW # IS DRIVE TIME MORE THAN TWO SECONDS? 063469,000391: 21,3403 40062 CS ITEMP2 # NO. COMPUTE DRIVE TIME. 063470,000392: 21,3404 00006 EXTEND # ABS(ALPHA) AT PI/8. 063471,000393: 21,3405 73440 MP OCT00240 # DECIMAL 10/1024 063472,000394: 21,3406 00006 EXTEND # QUOTIENT IS DRIVE TIME AT WAITLIST. 063473,000395: 21,3407 10063 DV NZACCDOT # ABS(ALPHA)/ACCDOT AT 2(14)/100 063474,000396: # Page 1480 063475,000397: 21,3410 00006 EXTEND 063476,000398: 21,3411 13413 BZF TGOFFNOW # DRIVE TIME MUST BE GREATER THAN ZERO. 063477,000399: 063478,000400: 21,3412 13425 TCF DRIVEON 063479,000401: 063480,000402: 21,3413 34755 TGOFFNOW CAF ZERO # TURN OFF GIMBAL NOW. 063481,000403: 21,3414 50066 INDEX QRNDXER 063482,000404: 21,3415 55501 TS NEGUQ 063483,000405: 063484,000406: 21,3416 13427 TCF DONEYET 063485,000407: 063486,000408: 21,3417 36010 NOTALLOW CAF OCT31 063487,000409: 21,3420 50066 INDEX QRNDXER 063488,000410: 21,3421 55632 TS QGIMTIMR 063489,000411: 21,3422 34755 CAF ZERO # DRIVE TIME IS MORE THAN 2 SECONDS, SO 063490,000412: 21,3423 55502 TS ALLOWGTS # DO NOT PERMIT FURTHER GTS ATTITUDE-RATE 063491,000413: # CONTROL UNTIL AOSTASK APPROVES. 063492,000414: 21,3424 13427 TCF DONEYET # NO WAITLIST CALL IS MADE. 063493,000415: 063494,000416: 21,3425 50066 DRIVEON INDEX QRNDXER 063495,000417: 21,3426 55632 TS QGIMTIMR # CHOOSE Q OR R AXIS. 063496,000418: 063497,000419: 21,3427 10066 DONEYET CCS QRNDXER 063498,000420: 21,3430 13336 TCF TIMQGMBL 063499,000421: 063500,000422: 21,3431 52073 DXCH RUPTREG3 # PROTECT IBNKCALL ERASABLES. ACDT+C12 063501,000423: 21,3432 52063 DXCH ITEMP2 # LEAVES ITEMPS2,3 ALONE. 063502,000424: 063503,000425: 21,3433 04674 TC IBNKCALL # TURN OFF CHANNEL BITS, SET Q(R)ACCDOTS. 063504,000426: 21,3434 35736 CADR ACDT+C12 063505,000427: 063506,000428: 21,3435 52063 DXCH ITEMP2 # RESTORE ERASABLES FOR IBNKCALL. 063507,000429: 21,3436 52073 DXCH RUPTREG3 063508,000430: 063509,000431: 21,3437 00071 TC RUPTREG2 # RETURN TO CALLER. 063510,000432: 063511,000433: 21,3440 00240 OCT00240 OCTAL 00240 # DECIMAL 10/1024 063512,000434: 063513,000435: # Page 1481 063514,000436: # THE FOLLOWING SECTION IS A CONTINUATION OF THE TRIM GIMBAL CONTROL FROM THE LAST GTS ENTRY. THE QUANTITY NEGUSUM 063515,000437: # IS COMPUTED FOR EACH AXIS (Q,R), .707*DEL*FUNCTION(3/2) + K2THETA = NEGUSUM. NEW DRIVES ARE ENTERED TO CH 12. 063516,000438: 063517,000439: # THE SUBROUTINE GTSQRT ACCEPTS A DOUBLE PRECISION VALUE IN FUNCTION, FUNCTION +1 AND RETURNS A SINGLE-PRECISION 063518,000440: # SQUARE ROOT OF THE FOURTEEN MOST SIGNIFICANT BITS OF THE ARGUMENT. ALSO, THE CELL SHFTFLAG CONTAINS A BINARY 063519,000441: # EXPONENT S, SUCH THAT THE SQUARE ROOT (RETURNED IN THE A REGISTER) MUST BE SHIFTED RIGHT (MULTIPLIED BY 2 TO THE 063520,000442: # POWER (-S)) IN ORDER TO BE THE TRUE SQUARE ROOT OF THE FOURTEEN MOST SIGNIFICANT BITS OF FUNCTION, FUNCTION +1. 063521,000443: # SQUARE ROOT ERROR IS NOT MORE THAN 2 IN THE 14TH SIGNIFICANT BIT. CELLS CLOBBERED ARE A, L, SHFTFLAG, ININDEX, 063522,000444: # HALFARG, SCRATCH, SR, FUNCTION, FUNCTION +1. GTSQRT IS CALLED BY TC GTSQRT AND RETURNS VIA TC Q OR TC FUNCTION +1. 063523,000445: # ZERO OR NEGATIVE ARGUMENTS YIELD ZERO FOR SQUARE ROOTS. 063524,000446: 063525,000447: 21,3441 11751 GTSQRT CCS FUNCTION 063526,000448: 21,3442 13460 TCF GOODARG # FUNCTION IS POSITIVE. TAKE SQUARE ROOT. 063527,000449: 21,3443 13445 TCF +2 # HIGH ORDER WORD IS ZERO. TRY THE LOWER. 063528,000450: 21,3444 13451 TCF ZEROOT # NEGATIVE. USE ZERO FOR 1/2 POWER. 063529,000451: 063530,000452: 21,3445 31752 CA FUNCTION +1 063531,000453: 21,3446 00006 EXTEND 063532,000454: 21,3447 63451 BZMF ZEROOT 063533,000455: 063534,000456: 21,3450 13454 TCF ZEROHIGH # PROCEED. 063535,000457: 21,3451 34755 ZEROOT CA ZERO 063536,000458: 21,3452 55741 TS SHFTFLAG 063537,000459: 21,3453 00002 TC Q 063538,000460: 063539,000461: 21,3454 57751 ZEROHIGH XCH FUNCTION # 14 MOST SIGNIFICANT BITS ARE IN THE 063540,000462: 21,3455 57752 XCH FUNCTION +1 # LOWER WORD. EXCHANGE THEM. 063541,000463: 21,3456 34757 CA SEVEN 063542,000464: 21,3457 13461 TCF GOODARG +1 063543,000465: 063544,000466: 21,3460 34755 GOODARG CA ZERO 063545,000467: 21,3461 55741 TS SHFTFLAG 063546,000468: 21,3462 35751 CA TWELVE # INITIALIZE THE SCALING LOOP. 063547,000469: 21,3463 55744 TS ININDEX 063548,000470: 21,3464 13473 TCF SCALLOOP 063549,000471: 063550,000472: 21,3465 31751 SCALSTRT CA FUNCTION 063551,000473: 21,3466 13507 TCF SCALDONE 063552,000474: 063553,000475: 21,3467 37746 MULBUSH CA NEG2 # IF ARG IS NOT LESS THAN 1/4, INDEX IS 063554,000476: 21,3470 27744 ADS ININDEX # ZERO, INDICATING NO SHIFT NEEDED. 063555,000477: 21,3471 00006 EXTEND # BRANCH IF ARG IS NOT LESS THAN 1/4. 063556,000478: 21,3472 63465 BZMF SCALSTRT # OTHERWISE COMPARE ARG WITH A REFERENCE 063557,000479: # WHICH IS 4 TIMES LARGER THAN THE LAST. 063558,000480: 21,3473 41751 SCALLOOP CS FUNCTION 063559,000481: 21,3474 51744 INDEX ININDEX 063560,000482: 21,3475 64735 AD BIT15 # REFERENCE MAGNITUDE LESS OR EQUAL TO 1/4 063561,000483: 21,3476 00006 EXTEND 063562,000484: 21,3477 63467 BZMF MULBUSH # IF ARG IS NOT LESS THAN REFERENCE, GO 063563,000485: # AROUND THE MULBERRY BUSH ONCE MORE. 063564,000486: # Page 1482 063565,000487: 21,3500 51744 INDEX ININDEX 063566,000488: 21,3501 34735 CA BIT15 # THIS IS THE SCALE MAGNITUDE 063567,000489: 21,3502 57747 XCH HALFARG # 2**(-ININDEX) IS THE SHIFT DIVISOR. 063568,000490: 21,3503 00006 EXTEND # RESCALE ARGUMENT. 063569,000491: 21,3504 31752 DCA FUNCTION 063570,000492: 21,3505 00006 EXTEND 063571,000493: 21,3506 11747 DV HALFARG 063572,000494: # ININDEX AND SHFTFLAG PRESERVE INFO FOR 063573,000495: # RESCALING AFTER ROOT PROCESS. 063574,000496: 21,3507 00006 SCALDONE EXTEND 063575,000497: 21,3510 23752 QXCH FUNCTION +1 # SAVE Q FOR RETURN 063576,000498: 21,3511 00006 EXTEND 063577,000499: 21,3512 74736 MP BIT14 063578,000500: 21,3513 55747 TS HALFARG 063579,000501: 21,3514 74737 MASK BIT13 063580,000502: 21,3515 10000 CCS A 063581,000503: 21,3516 33634 CA OCT11276 063582,000504: 21,3517 63632 AD ROOTHALF # INITIAL GUESS IS ROOT 1/2 OR POSMAX 063583,000505: 21,3520 03636 TC ROOTCYCL 063584,000506: 21,3521 03636 TC ROOTCYCL 063585,000507: 21,3522 03636 TC ROOTCYCL 063586,000508: 21,3523 01752 TC FUNCTION +1 063587,000509: 063588,000510: # *************************************************************************** 063589,000511: 063590,000512: 21,3524 03441 RSTOFGTS TC GTSQRT 063591,000513: 21,3525 57742 PRODUCT XCH K2CNTRAL 063592,000514: 21,3526 00006 EXTEND 063593,000515: 21,3527 71742 MP K2CNTRAL 063594,000516: 21,3530 53743 DXCH K2CNTRAL 063595,000517: 21,3531 00006 EXTEND # THE PRODUCT OF 063596,000518: 21,3532 70001 MP L # 1/2 2 1/2 063597,000519: 21,3533 27743 ADS K2CNTRAL +1 # K *(DEL*OMEGA + ALPHA /(2*K)) 063598,000520: 21,3534 54001 TS L # AND 063599,000521: 21,3535 13537 TCF +2 # 2 063600,000522: 21,3536 27742 ADS K2CNTRAL # DEL*(DEL*OMEGA + ALPHA /(2*K)) NOW IN 063601,000523: # K2CNTRAL 063602,000524: 063603,000525: 21,3537 31744 DOSHIFT CA ININDEX 063604,000526: 21,3540 00006 EXTEND # MULTIPLY IN THE FACTOR 2(-S), RETURNED 063605,000527: 21,3541 74736 MP BIT14 # BY THE GTSQRT SUBROUTINE 063606,000528: 21,3542 27741 ADS SHFTFLAG 063607,000529: 21,3543 00006 EXTEND 063608,000530: 21,3544 13563 BZF ADDITIN 063609,000531: 21,3545 51741 INDEX SHFTFLAG 063610,000532: 21,3546 34735 CA BIT15 063611,000533: # Page 1483 063612,000534: 21,3547 57742 XCH K2CNTRAL 063613,000535: 21,3550 00006 EXTEND 063614,000536: 21,3551 71742 MP K2CNTRAL 063615,000537: 21,3552 21740 DAS K2THETA 063616,000538: 21,3553 57742 XCH K2CNTRAL 063617,000539: 21,3554 00006 EXTEND 063618,000540: 21,3555 71743 MP K2CNTRAL +1 063619,000541: 21,3556 27740 ADS K2THETA +1 063620,000542: 21,3557 54001 TS L 063621,000543: 21,3560 13562 TCF +2 063622,000544: 21,3561 27737 ADS K2THETA 063623,000545: 063624,000546: 21,3562 13566 TCF NEGUSUM 063625,000547: 063626,000548: 21,3563 00006 ADDITIN EXTEND 063627,000549: 21,3564 31743 DCA K2CNTRAL 063628,000550: 21,3565 21740 DAS K2THETA # NO ADD IN THE K2THETA TERM. 063629,000551: 21,3566 11737 NEGUSUM CCS K2THETA # TEST SIGN OF HIGH ORDER PART. 063630,000552: 21,3567 13573 TCF NEGDRIVE 063631,000553: 21,3570 13572 TCF +2 063632,000554: 21,3571 13575 TCF POSDRIVE 063633,000555: 063634,000556: 21,3572 11740 CCS K2THETA +1 # SIGN TEST FOR LOW ORDER PART. 063635,000557: 21,3573 34753 NEGDRIVE CA BIT1 063636,000558: 21,3574 13576 TCF +2 # STOP GIMBAL DRIVE FOR A ZERO NEGUSUM. 063637,000559: 21,3575 44753 POSDRIVE CS BIT1 063638,000560: 21,3576 54001 TS L # SAVE FOR DRIVE REVERSAL TEST. 063639,000561: 21,3577 51750 INDEX QRCNTR 063640,000562: 21,3600 57501 XCH NEGUQ 063641,000563: 063642,000564: 21,3601 00006 EXTEND 063643,000565: 21,3602 70001 MP L # MULTIPLY OLD NEGU AND NEW NEGU. 063644,000566: 21,3603 10001 CCS L 063645,000567: 21,3604 13621 TCF LOUPE # NON-ZERO GIMBAL DRIVE BEING CONTINUED. 063646,000568: 063647,000569: 21,3605 13616 TCF ZEROLOUP # NO REVERSAL PROBLEM HERE. 063648,000570: 063649,000571: 21,3606 13610 TCF REVERSAL # NON-ZERO GIMBAL DRIVE BEING REVERSED. 063650,000572: 21,3607 13616 TCF ZEROLOUP # NO REVERSAL PROBLEM HERE. 063651,000573: 063652,000574: 21,3610 51750 REVERSAL INDEX QRCNTR # A ZERO-DRIVE PAUSE IS NEEDED HERE. ZERO 063653,000575: 21,3611 55510 TS QACCDOT # IS IN A REGISTER FROM CCS ON (-1). 063654,000576: 21,3612 51750 INDEX QRCNTR 063655,000577: 21,3613 43633 CS GMBLBITA 063656,000578: 21,3614 00006 EXTEND 063657,000579: 21,3615 03012 WAND CHAN12 063658,000580: 063659,000581: 21,3616 41273 ZEROLOUP CS RCSFLAGS # SET UP REQUEST FOR ACDT+C12 CALL. 063660,000582: 21,3617 74747 MASK CALLGMBL 063661,000583: 21,3620 27273 ADS RCSFLAGS 063662,000584: # Page 1484 063663,000585: 21,3621 11750 LOUPE CCS QRCNTR # HAVE BOTH AXES BEEN PROCESSED? 063664,000586: 21,3622 13115 TCF GOQTRIMG # NO. DO Q AXIS NEXT. 063665,000587: 063666,000588: 21,3623 31505 CA SAVESR # RESTORE THE SR 063667,000589: 21,3624 54021 TS SR 063668,000590: 063669,000591: 21,3625 00006 GOCLOSE EXTEND # TERMINATE THE JASK. 063670,000592: 21,3626 33631 DCA CLOSEADR 063671,000593: 21,3627 52006 DTCB 063672,000594: 063673,000595: 21,3630 E6,1537 EBANK= AOSQ 063674,000596: 21,3630 03236 36106 CLOSEADR 2CADR CLOSEOUT # TERMINATE THE JASK. 063675,000597: 063676,000598: 21,3632 5751 TWELVE EQUALS OCT14 063677,000599: 21,3632 26501 ROOTHALF OCTAL 26501 # SQUARE ROOT OF 1/2 063678,000600: 21,3633 01400 GMBLBITA OCTAL 01400 # INDEXED WRT GMBLBITB DO NOT MOVE ******* 063679,000601: 21,3634 11276 OCT11276 OCTAL 11276 # POSMAX -- ROOTHALF 063680,000602: 21,3635 06000 GMBLBITB OCTAL 06000 # INDEXED WRT GMBLBITA DO NOT MOVE ******* 063681,000603: 063682,000604: # SUBROUTINE ROOTCYCL: BY CRAIG WORK, 3 APRIL 68 063683,000605: 063684,000606: # ROOTCYCL IS A SUBROUTINE WHICH EXECUTS ONE NEWTON SQUARE ALGORITHM ITERATION. THE INITIAL GUESS AT THE 063685,000607: # SQUARE ROOT IS PRESUMED TO BE IN THE A REGISTER AND ONE-HALF THE SQUARE IS TAKEN FROM HALFARG. THE NEW APPROXIMATION 063686,000608: # TO THE SQUARE ROOT IS RETURNED IN THE A REGISTER. DEBRIS: A, L, SR, SCRATCH. ROOTCYCL IS CALLED FROM 063687,000609: # LOCATION (LOC) BY A TC ROOTCYCL, AND RETURNS (TC Q) TO LOC +1. 063688,000610: 063689,000611: # WARNING: IF THE INITIAL GUESS IS NOT GREATER THAN THE SQUARE, DIVIDE OR ADD OVERFLOW IS A REAL POSSIBILITY. 063690,000612: 063691,000613: 21,3636 55746 ROOTCYCL TS SCRATCH # STORE X 063692,000614: 21,3637 54021 TS SR # X/2 NOW IN SR 063693,000615: 21,3640 31747 CA HALFARG # ARG/2 IN THE A REG 063694,000616: 21,3641 22007 ZL # PREPARE FOR DIVISION 063695,000617: 21,3642 00006 EXTEND 063696,000618: 21,3643 11746 DV SCRATCH # (ARG/X)/2 063697,000619: 21,3644 60021 AD SR # (X + ARG/X)/2 IN THE A REG 063698,000620: 21,3645 00002 TC Q 063699,000621: 063700,000622: End of include-file TRIM_GIMBAL_CNTROL_SYSTEM.agc. Parent file is MAIN.agc