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