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