# Copyright: Public domain. # Filename: AOSTASK_AND_AOSJOB.agc # Purpose: Part of the source code for Luminary 1A build 099. # It is part of the source code for the Lunar Module's (LM) # Apollo Guidance Computer (AGC), for Apollo 11. # Assembler: yaYUL # Contact: Ron Burkey . # Website: www.ibiblio.org/apollo. # Pages: 1485-1506 # Mod history: 2009-05-27 RSB Adapted from the corresponding # Luminary131 file, using page # images from Luminary 1A. # 2009-06-05 RSB Corrected a memory-bank error type. # 2009-06-07 RSB Corrected a typo. # # This source code has been transcribed or otherwise adapted from # digitized images of a hardcopy from the MIT Museum. The digitization # was performed by Paul Fjeld, and arranged for by Deborah Douglas of # the Museum. Many thanks to both. The images (with suitable reduction # in storage size and consequent reduction in image quality as well) are # available online at www.ibiblio.org/apollo. If for some reason you # find that the images are illegible, contact me at info@sandroid.org # about getting access to the (much) higher-quality images which Paul # actually created. # # Notations on the hardcopy document read, in part: # # Assemble revision 001 of AGC program LMY99 by NASA 2021112-61 # 16:27 JULY 14, 1969 # Page 1485 # PROGRAM NAME: 1/ACCS # PROGRAM WRITTEN BY: BOB COVELLI AND MIKE HOUSTON # LAST MODIFICATION: FEB. 14, 1969 BY G. KALAN # # PROGRAM DESCRIPTION: # 1/ACCS PROVIDES THE INTERFACE BETWEEN THE GUIDANCE PROGRAMS AND THE DIGITAL AUTOPILOT. WHENEVER THERE IS A # CHANGE IN THE MASS OF THE VEHICLE, IN THE DEADBAND SELECTED, IN THE VEHICLE CONFIGURATION (ASCENT-DESCENT- # DOCKED), AND DURING A FRESH START OR A RESTART, 1/ACCS IS CALLED TO COMMUNICATE THE DATA CHANGES TO THE DAP. # # THE INPUTS TO 1/ACCS ARE MASS, ACCELERATION (ABDELV), DEADBAND (DB), OFFSET ACCELERATIONS (AOSQ AND AOSR), # STAGE VERIFY BIT (CHAN30, BIT2), DOCKED BIT (DAPBOOLS, BIT13), DRIFT BIT (DAPBOOLS, BIT8), USEQRJTS (DAPBOOLS, # BIT14), AND SURFACE FLAG (FLAGWRDB, BIT8), AND CH5MASK. # # 1/ACCS COMPUTES THE JET ACCELERATIONS (1JACC, 1JACCQ, 1JACCR) AS FUNCTIONS OF MASS. 1JACCU AND 1JACCV ARE # FORMED BY RESOLVING 1JACCQ AND 1JACCR. IN THE DESCENT CASE, THE DESCENT ENGINE MOMENT ARM (L, PVT-CG) IS ALSO # COMPUTED AS A FUNCTION OF MASS. THE RATE OF CHANGE OF ACCELERATION DUE TO ROTATION OF THE GIMBAL (ACCDOTQ, # ACCDOTR) IS ALSO COMPUTED IN THE DESCENT CASE. # # AFTER THE ABOVE COMPUTATIONS, THE PROGRAM 1/ACCONT COMPUTES THE RECIPROCAL NET ACCELERATIONS ABOUT THE P, U, # AND V AXES (2 JETS FOR P-AXIS, BOTH 1 AND 2 JETS FOR U AND V AXES), AND THE RECIPROCAL COAST ACCELERATIONS ABOUT # THE P, U, AND V AXES. THE ACCELERATION FUNCTIONS (ACCFCTZ1 AND ACCFCTZ5) ARE ALSO COMPUTED FOR THESE AXES. THE # FIRE AND COAST DEADBANDS AND AXISDIST ARE COMPUTED FOR EACH AXIS. FLAT AND ZONE3LIM, THE WIDTH AND HEIGHT OF THE # MINIMUM IMPULSE ZONE, ARE COMPUTED. 1/ACCONT ALSO SETS ACCSWU AND ACCSWV, WHICH INDICATE WHEN 1 JET ACCELERATION # IS NOT SUFFICIENT TO PRODUCE MINIMUM ACCELERATION. AT THE COMPLETION OF 1/ACCS, THE ACCSOKAY BIT IS SET. # # SUBROUTINES CALLED: # TIMEGMBL # MAKECADR # ROT45DEG # # CALLING SEQUENCE: # TC BANKCALL # (1/ACCS MUST BE CALLED BY BANKCALL) # CADR 1/ACCS # # NORMAL EXIT: VIA BANKJUMP # # ALARM AND EXIT MODES: NONE # # INPUT/OUTPUT: SEE PROGRAM DESCRIPTION. # # DEBRIS: # ALL OF THE EXECUTIVE TEMPORARY REGISTERS, EXCEPT FIXLOC AND OVFIND, AND THE CORE SET AREA FROM MPAC TO BANKSET. # # RESTRICTIONS: # 1/ACCS MUST BE CALLED BY BANKCALL # EBANK IS SET TO 6, BUT NOT RESTORED. # Page 1486 BANK 20 SETLOC DAPS3 BANK COUNT* $$/DAPAO EBANK= AOSQ # ENTRY IS THROUGH 1/ACCJOB OR 1/ACCSIT WHEN 1/ACCS IS TO BE DONE AS A SEPARATE NOVAC JOB. # IT IS POSSIBLE FOR MORE THAN ONE OF THESE JOBS TO BE SET UP CONCURRENTLY. HOWEVER, SINCE THERE IS NO CHECK OF # NEWJOB, A SECOND MANIFESTATION CANNOT BE STARTED UNTIL THE FIRST IS COMPLETED. 1/ACCSET CAF ZERO # ENTRY FROM FRESH START/RESTART CODING. TS AOSQ # NULL THE OFFSET ESTIMATES FOR 1/ACCS. TS AOSR TS ALPHAQ # NULL THE OFFSET ESTIMATES FOR DOWNLIST TS ALPHAR 1/ACCJOB TC BANKCALL # 1/ACCS ASSUMES ENTRY VIA BANKCALL. CADR 1/ACCS +2 # SKIP EBANK SETTING. TC ENDOFJOB 1/ACCS CA EBANK6 # ***** EBANK SET BUT NOT RESTORED ***** TS EBANK TC MAKECADR # SAVE RETURN SO THAT BUF2 MAY BE USED TS ACCRETRN # DETERMINE MASS OF THE LEM. CA DAPBOOLS # IS THE CSM DOCKED MASK CSMDOCKD TS DOCKTEMP # STORE RECORD OF STATE IN TEMP (MPAC +3). CCS A CS CSMMASS # DOCKED: LEMMAS = MASS - CSMMASS AD MASS # LEM ALONE: LEMMASS = MASS TS LEMMASS # ON THE BASIS OF APSFLAG: # SET THE P-AXIS RATE COMMAND LIMIT FOR 2-JET/2-JET CONTROL # SET MPAC, WHICH INDICATES THE PROPER SET OF COEFFICIENTS FOR THE LEM-ALONE F(MASS) CALCULATIONS # ENSURE THAT THE LEM MASS VALUE IS WITHIN THE ACCEPTABLE RANGE INHINT CAE FLGWRD10 # DETERMINE WHETHER STAGED. MASK APSFLBIT EXTEND BZF DPSFLITE # Page 1487 CS POSMAX # ASCENT (OR ON LUNAR SURFACE) TS -2JETLIM # ALWAYS 2 JETS FOR P-AXIS RATE COMMAND CAF OCT14 # INITIALIZE INDEX AT 12. TS MPAC CS LEMMASS # CHECK IF MASS TOO HIGH. CATCH STAGING. AD HIASCENT EXTEND BZMF MASSFIX CS LEMMASS # CHECK IF MASS TOO LOW. THIS LIMITS THE AD LOASCENT # DECREMENTING BY MASSMON. EXTEND BZMF F(MASS) MASSFIX ADS LEMMASS # STORE THE VIOLATED LIMIT AS LEMMASS. ZL # ALSO CORRECT TOTAL MASS, ZEROING THE CCS DOCKTEMP # LOW-ORDER WORD. CAE CSMMASS # DOCKED: MASS = LEMMASS + CSMMASS AD LEMMASS # LEM ALONE: MASS = LEMMASS DXCH MASS TCF F(MASS) DPSFLITE CS BIT10 # FOUR JETS FOR P-AXIS RATE COMMAND ERRORS TS -2JETLIM # EXCEEDING 1.4 DEG/SEC (SCALED AT 45) CAF SIX # INITIALIZE INDEX AT 6. TS MPAC CS LEMMASS # CHECK IF MASS TOO HIGH. SHOULD NEVER AD HIDESCNT # OCCUR EXCEPT PERHAPS BEFORE THE PAD EXTEND # LOAD IS DONE. BZMF MASSFIX CS LEMMASS # CHECK IF MASS TOO LOW. THIS LIMITS THE AD LODESCNT # DECREMENTING BY MASSMON. AD HIASCENT EXTEND BZMF F(MASS) TCF MASSFIX # COMPUTATION OF FUNCTIONS OF MASS F(MASS) RELINT CCS DOCKTEMP TCF DOCKED # DOCKED: USE SEPARATE COMPUTATION. CA TWO STCTR TS MPAC +1 # J=2,1,0 FOR 1JACCR,1JACCQ,1JACC CS TWO ADS MPAC # JX=10,8,6 OR 4,2,0 TO INDEX COEFS. STCTR1 CAE LEMMASS INDEX MPAC AD INERCONC TS MPAC +2 # MASS + C # Page 1488 EXTEND INDEX MPAC DCA INERCONA EXTEND DV MPAC +2 INDEX MPAC AD INERCONB INDEX MPAC +1 # 1JACC(J)=A(JX)/(MASS+C(JX) + B(JX) TS 1JACC # 1JACC(-1)=L,PVT-CG SCALED AT 8 FEET CCS MPAC +1 TCF STCTR TCF COMMEQS TCF LRESC # COEFFQ AND COEFFR ARE COMPUTED IN THIS SECTION. THEY ARE USED TO RESOLVE Q-R COMPONENTS INTO NON-ORTHOGONAL # U AND V COMPONENTS (SEE ROT-TOUV SECTION). COMMEQS CS 1JACCR AD 1JACCQ EXTEND BZMF BIGIQ EXTEND # EPSILON IS A MEASURE OF COUPLING AND IS DV 1JACCQ # DEFINED=1-IQ/IR FOR IR GREATER THAN IQ. TS EPSILON # THE COMPUTED EXPRESSION IS EQUIVALENT AD -EPSMAX EXTEND BZMF GOODEPS1 CS -EPSMAX TS EPSILON # EPSILON IS LIMITED TO A MAX. OF .42265 GOODEPS1 CA EPSILON EXTEND MP 0.35356 AD .7071 TS COEFFR # IN THIS CASE WHERE IR IS GREATER THAN CS POSMAX # IQ, COEFFQ=-.707(1+.5EPSILON)(1-EPSILON) AD EPSILON # AND COEFFR=.707(1+.5EPSILON) EXTEND MP COEFFR TS COEFFQ TCF JACCUV BIGIQ EXTEND # EPSILON IS DEFINED AS 1-IR/IQ FOR IQ DV 1JACCR # GREATER THAN IR. -EPSILON IS COMPUTED TS -EPSILON # RATHER THAN EPSILON FOR CONVENIENCE CS -EPSILON AD -EPSMAX EXTEND BZMF GOODEPS2 CA -EPSMAX TS -EPSILON # EPSILON IS LIMITED TO A MAX. OF .42265 # Page 1489 GOODEPS2 CA -EPSILON EXTEND MP 0.35356 AD -.7071 TS COEFFQ # IN THIS CASE WHERE IQ IS GREATER THAN CS -EPSILON # IR, COEFFQ=-.707(1+.5EPSILON) AND AD NEGMAX # COEFFR=.707(1+.5EPSILON)(1-EPSILON) EXTEND MP COEFFQ TS COEFFR JACCUV CS COEFFQ EXTEND MP 1JACCQ # 1JACCQ IS SCALED AT PI/4 TS 1JACCU # 1JACCU USED AS TEMPORARY STORAGE CA COEFFR EXTEND MP 1JACCR AD 1JACCU EXTEND MP BIT14 # SCALING CHANGED FROM PI/4 TO PI/2 TS 1JACCU TS 1JACCV # SCALED AT PI/2 RADIANS/SEC(2) CCS MPAC # COMPUTE L,PVT-CG IF IN DESCENT CAF ZERO # ZERO SWITCHES AND GO TO 1/ACCONT IN TS ALLOWGTS # ASCENT TCF 1/ACCONT -1 CS TWO TS MPAC CS ONE TS MPAC +1 TCF STCTR1 # THIS SECTION COMPUTES THE RATE OF CHANGE OF ACCELERATION DUE TO THE ROTATION OF THE GIMBALS. THE EQUATION # IMPLEMENTED IN BOTH THE Y-X PLANE AND THE Z-X PLANE IS -- D(ALPHA)/DT = TL/I*D(DELTA)/DT, WHERE # T = ENGINE THRUST FORCE # L = PIVIT TO CG DISTANCE OF ENGINE # I = MOMENT OF INERTIA LRESC CAE ABDELV # SCALED AT 2(13) CM/SEC(2) EXTEND MP MASS # SCALED AT B+16 KGS TC DVOVSUB # GET QUOTIENT WITH OVERFLOW PROTECTION ADRES GFACTM # MASS IS DIVIDED BY ACCELERATION OF GRAVITY IN ORDER TO MATCH THE UNITS OF IXX,IYY,IZZ, WHICH ARE SLUG-FT(2). # THE RATIO OF ACCELERATION FROM PIPAS TO ACCELERATION OF GRAVITY IS THE SAME IN METRIC OR ENGINEERING UNITS, SO # THAT IS UNCONVERTED. 2.20462 CONVERTS KG. TO LB. NOW T IN IN A SCALED AT 2(14). EXTEND MP L,PVT-CG # SCALED AT 8 FEET. # Page 1490 INHINT TS MPAC EXTEND MP 1JACCR TC DVOVSUB # GET QUOTIENT WITH OVERFLOW PROTECTION ADRES TORKJET1 TS ACCDOTR # SCALED AT PI/2(7) CA MPAC EXTEND MP 1JACCQ TC DVOVSUB # GET QUOTIENT WITH OVERFLOW PROTECTION ADRES TORKJET1 SPSCONT TS ACCDOTQ # SCALED AT PI/2(7) EXTEND MP DGBF # .3ACCDOTQ SCALED AT PI/2(8) TS KQ CAE ACCDOTR # .3ACCDOTR AT PI/2(8) EXTEND MP DGBF TS KRDAP EXTEND # NOW COMPUTE QACCDOT, RACCDOT, THE SIGNED READ CHAN12 # JERK TERMS. STORE CHANNEL 12. WITH GIMBAL TS MPAC +1 # DRIVE BITS 9 THROUGH 12 SET LOOP CAF BIT2 # INDEX TO COMPUTE RACCDOT, THEN QACCDOT. TCF LOOP3 CAF ZERO # ACCDOTQ AND ACCDOTR ARE NOT NEGATIVE, LOOP3 TS MPAC # BECAUSE THEY ARE MAGNITUDES CA MPAC +1 INDEX MPAC # MASK CHANNEL IMAGE FOR ANY GIMBAL MOTION MASK GIMBLBTS EXTEND BZF ZACCDOT # IF NONE, Q(R)ACCDOT IS ZERO. CA MPAC +1 INDEX MPAC # GIMBAL IS MOVING. IS ROTATION POSITIVE. MASK GIMBLBTS +1 EXTEND BZF FRSTZERO # IF NOT POSITIVE, BRANCH INDEX MPAC # POSITIVE ROTATION, NEGATIVE Q(R)ACCDOT. CS ACCDOTQ TCF STACCDOT FRSTZERO INDEX MPAC # NEGATIVE ROTATION, POSITIVE Q(R)ACCDOT. CA ACCDOTQ TCF STACCDOT ZACCDOT CAF ZERO STACCDOT INDEX MPAC TS QACCDOT # STORE Q(R)ACCDOT. CCS MPAC TCF LOOP3 -1 # NOW DO QACCDOT. # Page 1491 CS DAPBOOLS # IS GIMBAL USABLE? MASK USEQRJTS EXTEND BZF DOWNGTS # NO. BE SURE THE GIMBAL SWITCHES ARE DOWN CS T5ADR # YES. IS THE DAP RUNNINT? AD PAXISADR EXTEND BZF +2 TCF DOWNGTS # NO. BE SURE THE GIMBAL SWITCHES ARE DOWN CCS INGTS # YES. IS GTS IN CONTROL? TCF DOCKTEST # YES. PROCEED WITH 1/ACCS. TC IBNKCALL # NO. NULL OFFSET AND FIND ALLOWGTS CADR TIMEGMBL DOCKTEST CCS DOCKTEMP # BYPASS 1/ACCONT WHEN DOCKED. TCF 1/ACCRET TCF 1/ACCONT # Page 1492 # SUBROUTINE: DVOVSUB # AUTHOR: C. WORK, MOD 0, 12 JUNE 68 # PURPOSE: THIS SUBROUTINE PROVIDES A SINGLE-PRECISION MACHINE LANGUAGE DIVISION OPERATION WHICH RETURNS # (1) THE QUOTIENT, IF THE DIVISION WAS NORMAL. # (2) NEGMAX, IF THE QUOTIENT WAS IMPROPER AND NEGATIVE. # (3) POSMAX, IF THE QUOTIENT WAS IMPROPER AND POSITIVE OR IF THERE WAS A ZERO DIVISOR. # THE CALLING PROGRAM IS PRESUMED TO BE A JOB IN THE F BANK WHICH CONTAINS DVOVSUB. E BANK MUST BE 6. # THE DIVISOR FOR THIS ROUTINE MAY BE IN EITHER FIXED OR ERASABLE STORAGE. SIGN AGREEMENT IS # ASSUMED BETWEEN THE TWO HALVES OF THE DIVIDEND. (THIS IS CERTAIN IF THE A AND L REGISTERS ARE THE # RESULT OF A MULTIPLICATION OPERATION.) # CALL SEQUENCE: L TC DVOVSUB # L +1 ADRES (DIVISOR) # L +2 RETURN HERE, WITH RESULT IN A,L # INPUT: DIVIDEND IN A,L (SIGN AGREEMENT ASSUMED), DIVISOR IN LOCATION DESIGNATED BY "ADRES". # DIVISOR MAY BE IN THE DVOVSUB FBANK,FIXED-FIXED FBANK,EBANK 6, OR UNSWITCHED ERASABLE. # OUTPUT: QUOTIENT AND REMAINDER, OR POSMAX (NEGMAX), WHICHEVER IS APPROPRIATE. # DEBRIS: SCRATCHX,SCRATCHY,SCRATCHZ,A,L (NOTE: SCRATCHX,Y,Z ARE EQUATED TO MPAC +4,+5, AND +6.) # ABORTS OR ALARMS: NONE # EXITS: TO THE CALL POINT +2. # SUBROUTINES CALLED: NONE. DVOVSUB TS SCRATCHY # SAVE UPPER HALF OF DIVIDEND TS SCRATCHX INDEX Q # OBTAIN ADDRESS OF DIVISOR. CA 0 INCR Q # STEP Q FOR PROPER RETURN SEQUENCE. INDEX A CA 0 # PICK UP THE DIVISOR. EXTEND # RETURN POSMAX FOR A ZERO DIVISOR. BZF MAXPLUS TS SCRATCHZ # STORE DIVISOR. CCS A # GET ABS(DIVISOR) IN THE A REGISTER. AD BIT1 TCF ZEROPLUS AD BIT1 ZEROPLUS XCH SCRATCHY # STORE ABS(DIVISOR). PICK UP TOP HALF OF EXTEND # DIVIDENT. BZMF GOODNEG # GET -ABS(DIVIDEND) # Page 1493 CS A GOODNEG AD SCRATCHY # ABS(DIVISOR) - ABS(DIVIDEND) EXTEND BZMF MAKEMAX # BRANCH IF DIVISION IS NOT PROPER. CA SCRATCHX # RE-ESTABLISH THE DIVIDEND EXTEND DV SCRATCHZ # QUOTIENT IN THE A, REMAINDER IN L. TC Q # RETURN TO CALLER. MAKEMAX CCS SCRATCHX # DETERMINE THE SIGN OF THE QUOTIENT. CCS SCRATCHZ # SCRATCHX AND SCRATCHZ ARE NON-ZERO. TCF MAXPLUS CCS SCRATCHZ CAF NEGMAX # +,- OR -,+ TC Q MAXPLUS CAF POSMAX # -,- OR +,+ TC Q # COEFFICIENTS FOR THE JET ACCELERATION CURVE FITS # THE CURVE FITS ARE OF THE FORM -- # # 1JACC = A/(MASS + C) + B # # A IS SCALED AT PI/4 RAD/SEC**2 B+16KG, B IS SCALED AT PI/4 RAD/SEC**2, AND C IS SCALED AT B +16 KG. # # THE CURVE FIT FOR L,PVT-CG IS OF THE SAME FORM, EXCEPT THAT A IS SCALED AT 8 FT B+16 KG, B IS SCALED AT 8 FT, # AND C IS SCALED AT B+16 KG. 2DEC +.0410511917 # L A DESCENT INERCONA 2DEC +.0059347674 # 1JACCP A DESCENT 2DEC +.0014979264 # 1JACCQ A DESCENT 2DEC +.0010451889 # 1JACCR A DESCENT 2DEC +.0065443852 # 1JACCP A ASCENT 2DEC +.0035784354 # 1JACCQ A ASCENT 2DEC +.0056946631 # 1JACCR A ASCENT DEC +.155044 # L B DESCENT DEC -.025233 # L C DESCENT # Page 1494 INERCONB DEC +.002989 # 1JACCP B DESCENT INERCONC DEC +.008721 # 1JACCP C DESCENT DEC +.018791 # 1JACCQ B DESCENT DEC -.068163 # 1JACCQ C DESCENT DEC +.021345 # 1JACCR B DESCENT DEC -.066027 # 1JACCR C DESCENT DEC +.000032 # 1JACCP B ASCENT DEC -.006923 # 1JACCP C ASCENT DEC +.162862 # 1JACCQ B ASCENT DEC +.002588 # 1JACCQ C ASCENT DEC +.009312 # 1JACCR B ASCENT DEC -.023608 # 1JACCR C ASCENT GIMBLBTS OCTAL 01400 OCTAL 01000 OCTAL 06000 OCTAL 04000 DGBF DEC 0.6 # .3 SCALED AT 1/2 0.35356 DEC 0.35356 # .70711 SCALED AT 2 GFACTM OCT 337 # 979.24/2.20462 AT B+15 .7071 DEC .70711 -.7071 DEC -.70711 -EPSMAX DEC -.42265 # CSM-DOCKED INERTIA COMPUTATIONS DOCKED CA ONE # COEFTR = 1 FOR INERTIA COEFFICIENTS SPSLOOP1 TS COEFCTR # = 7 FOR CG COEFFICIENTS CA ONE # MASSCTR = 1 FOR CSM TS MASSCTR # = 0 FOR LEM INDEX COEFCTR CA COEFF -1 # COEFF -1 = C EXTEND MP LEMMASS EXTEND MP CSMMASS # LET X = CSMMASS AND Y = LEMMASS INDEX COEFCTR AD COEFF # COEFF = F TS MPAC # MPAC = C X Y + F TCF +4 SPSLOOP2 TS MASSCTR # LOOP TWICE THROUGH HERE TO OBTAIN EXTEND # MPAC = MPAC + (A X +D)X + (B Y +E)Y DIM COEFCTR # LOOP #1 LOOP #2 INDEX COEFCTR CA COEFF +2 # COEFF +2 = A OR B EXTEND # Page 1495 INDEX MASSCTR MP LEMMASS INDEX COEFCTR AD COEFF +4 # COEFF +4 = E OR D EXTEND INDEX MASSCTR MP LEMMASS ADS MPAC CCS MASSCTR TCF SPSLOOP2 CCS COEFCTR # IF COEFCTR IS POS, EXIT FROM LOOP WITH TCF +7 # CG X DELDOT = MPAC X 4 PI RAD-CM/SEC TORQCONS 2DEC 0.51443 B-14 # CORRESPONDS TO 500 LB-FT CA MPAC TS MPAC +1 # INERTIA = (MPAC +1) X 2(38) KG-CM(2) CA SEVEN TCF SPSLOOP1 CA 1JACCCON # 1JACC=1JACCCON/MASS ZL TC DVOVSUB ADRES MASS TS 1JACC # SCALED AT PI/4 CA POSMAX # SET INVERSE JET ACCELERATIONS TO POSMAX, TS 1/ANETP # WHICH CORRESPONDS TO ACCEL. OF 1.4 D/SS. TS 1/ANET2 +1 TS 1/ANET2 +2 TS 1/ANET2 +17D TS 1/ANET2 +18D EXTEND DCA TORQCONS EXTEND DV MPAC +1 INHINT TS 1JACCQ # SCALED AT PI/4 TS 1JACCR CA -.7071 TS COEFFQ # COEFFQ AND COEFFR ARE CHOSEN TO MAKE U- CA .7071 # AND V-AXES ORTHOGONAL FOR DOCKED CASE TS COEFFR CA MASS # SCALED AT 2(16) KG EXTEND MP MPAC # SCALED AT 4 PI RAD-CM/SEC EXTEND MP ABDELV # SCALED AT 2(13) CM/SEC(2) TC DVOVSUB # GET QUOTIENT WITH OVERFLOW PROTECTION # Page 1496 ADRES MPAC +1 TS ACCDOTR TCF SPSCONT # CONTINUE K, KSQ CALCULATIONS 1JACCCON OCT 00167 # SCALED AT PI/4X2(16) RAD/SEC(2)-KG # 2 2 # COEFFICIENTS FOR CURVE FIT OF THE FORM Z = A X +B Y +C X Y +D X +E Y +F COEFF DEC .19518 # C COEFFICIENT OF INERTIA DEC -.00529 # F " DEC -.17670 # B " DEC -.03709 # A " DEC .06974 # E " DEC .02569 # D " DEC .20096 # C COEFFICIENT OF CG DEC .13564 # F " DEC .75704 # B " DEC -.37142 # A " DEC -.63117 # E " DEC .41179 # D " # ASSIGNMENT OF TEMPORARIES FOR 1/ACCS (EXCLUDING 1/ACCONT) # MPAC, MPAC +1, MPAC +2 USED EXPLICITLY COEFCTR EQUALS MPAC +4 MASSCTR EQUALS MPAC +5 SCRATCHX EQUALS MPAC +4 # SCRATCH AREA FOR DVOVSUB ROUTINE. SCRATCHY EQUALS SCRATCHX +1 SCRATCHZ EQUALS SCRATCHX +2 DOCKTEMP EQUALS MPAC +3 # RECORD OF CSMDOCKED BIT OF DAPBOOLS EPSILON EQUALS MPAC +1 -EPSILON EQUALS EPSILON -.1875 DEC -.18750 # Page 1497 BANK 20 SETLOC DAPS3 BANK EBANK= AOSQ COUNT* $$/DAPAO -1 TS INGTS # ZERO INGTS IN ASCENT 1/ACCONT CA DB # INITIALIZE DBVAL1,2,3 EXTEND MP BIT13 TS L # 0.25 DB AD A TS DBVAL3 # 0.50 DB CS DBVAL1 AD L TS DBVAL2 # -.75 DB GETAOSUV INHINT CAE AOSR # COMPUTE ASOU AND AOSV BY ROTATING TS L # AOSQ AND AOSR. CAE AOSQ TC IBNKCALL CADR ROT-TOUV DXCH AOSU RELINT CA DAPBOOLS MASK DRIFTBIT # ZERO DURING ULLAGE AND POWERED FLIGHT. CCS A # IF DRIFTING LIGHT, CA ONE # SET DRIFTER TO 1 TS DRIFTER # SAVE TO TEST FOR DRIFTING FLIGHT LATER AD ALLOWGTS # NON-ZERO IF DRIFT OR GTS NEAR CCS A CA FLATVAL # DRIFTING FLIGHT, STORE .8 IN FLAT TS FLATEMP # IN POWERED FLIGHT, STORE ZERO IN FLAT EXTEND BZF DOPAXIS # IF POWERED AND NO GTS, START P AXIS, CCS DRIFTER # OTHERWISE SET ZONE3LIM CA ZONE3MAX # 17.5 MS, SCALED AT 4 SECONDS. TS Z3TEM DOPAXIS CA 1JACC # 1JACC AT PI/4 = 2JACC AT PI/2 = # ANET AT PI/2 = ANET/ACOAST AT 2(6). AD BIT9 # 1 + ANET/ACOAST AT 2(6) TS FUNTEM CA 1JACC # Page 1498 TC INVERT INHINT # P AXIS DATA MUST BE CONSISTENT TS 1/ANETP # SCALED AT 2(7)/PI. TS 1/ANETP +1 CS BIT9 # -1 AT 2(6) EXTEND MP 1/ANETP # -1/ANET AT 2(13)/PI EXTEND DV FUNTEM # -1/(ANET + ANET**2/ACOAST) AT 2(7)/PI TS PACCFUN TS PACCFUN +1 CA 1/.03 # NO AOS FOR P AXIS, ACOAST = AMIN TS 1/ACOSTP TS 1/ACOSTP +1 RELINT ZL CCS DRIFTER DXCH AOSU # ZERO AOSU,V IF IN DRIFT, JUST TO BE SURE UAXIS CA ZERO # DO U AXIS COMPUTATIONS TS UV # ZERO FOR U AXIS, ONE FOR V AXIS. BOTHAXES TS SIGNAOS # CODING COMMON TO U,V AXES INDEX UV CCS AOSU # PICK UP ABS(AOSU OR AOSV) AD ONE # RESTORE TO PROPER VALUE TCF +3 # AND LEAVE SIGNAOS AT ZERO AD ONE # NEGATIVE, RESTORE TO PROPER VALUE INCR SIGNAOS # AND SET SIGNAOS TO ONE TO SHOW AOS NEG TS ABSAOS # SAVE ABS(AOS) CS SIGNAOS TS -SIGNAOS # USED AS AN INDEX CA DBVAL1 # SET DB1, DB2 TO DBVAL1 (= DB) TS DBB1 TS DBB2 CA ABSAOS # TEST MAGNITUDE OF ABS(AOS) AD -.03R/S2 EXTEND BZMF NOTMUCH # ABS(AOS) LESS THAN AMIN BIGAOS CCS FLATEMP # AGS(AOS) GREATER THAN AMIN TCF SKIPDB1 # I DRIFT OR GTS, DO NOT COMPUTE DB CA DBVAL1 INDEX -SIGNAOS # Page 1499 ADS DBB2 # DB2(1) = 2 DB INDEX SIGNAOS TS DBB4 # DB4(3) = 1 DB CA -.1875 # -.1875 PI/2 RAD/SEC(2) SCALED AT PI/2 AD ABSAOS # ABSAOS IS SCALED AT PI/2 EXTEND BZMF +3 CS DBVAL3 # -.5 DB TCF DBONE CS ABSAOS DOUBLE DOUBLE AD BIT14 DOUBLE # 1-8 ABSAOS. (8 IS 16/PI SCALED AT 2/PI) EXTEND MP DB DBONE INDEX SIGNAOS # DB1(2)=(1-8 ABSAOS) DB. IF ABSAOS IS TS DBB1 # GREATER THAN .1875 THEN DB1(2) = -.5 DB CA DBVAL2 INDEX -SIGNAOS TS DBB3 # DB3(4) = -.75 DB SKIPDB1 CA ABSAOS # ABS(AOS) GREATER THAN AMIN, SO IT IS EXTEND MP BIT12 AD ABSAOS # (9/8) ABSAOS. TC INVERT # ALL RIGHT TO DIVIDE INDEX -SIGNAOS TS 1/ACOSTT +1 # 1/ACOASTPOS(NET) = 1/ABS(AOS) CA 1/.03 INDEX SIGNAOS TS 1/ACOSTT # 1/ACOASTNEG(POS) = 1/AIN CA ABSAOS AD 1JACCU AD 1JACCU # 2 JACC + ABS(AOS) AD BIT9 # MAXIMUM VALUE IN COMPUTATIONS TS A # TEST FOR OVERFLOW TCF SKIPDB2 # NO OVERFLOW, DO NORMAL COMPUTATION CA ABSAOS # RESCALE TO PI TO PREVENT OVERFLOW EXTEND MP BIT14 AD 1JACCU # 1 JACC AT PI/2 = 2JACC AT PI TS ANET # ANETPOS(NEG) MAX SCALED AT PI = # ANETPOS(NEG) MAX/ACOASTNEG(POS) AT 2(7) AD BIT8 # 1 + ANETPOS/ACOASTNEG AT 2(7) XCH ANET # SAVE IN ANET, WHILE PICKING UP ANET TC INVERT EXTEND # Page 1500 MP BIT14 # SCALE 1/ANET AT 2(7)/PI TS 1/ANET CA ACCHERE # SET UP RETURN FROM COMPUTATION ROUTINE TS ARET CS BIT8 # -1 AT 2(7) TCF DOACCFUN # FINISH ACCFUN COMPUTATION ACCHERE TCF ACCTHERE NOTMUCH TS L # ABS(AOS) LESS THAN AMIN, SAVE IN L CA 1/.03 # ACOASTPOS,NEG = AMIN TS 1/ACOSTT TS 1/ACOSTT +1 CCS FLATEMP TCF SKIPDB2 # DO NOT COMPUTE DB IF DRIFT OR GTS CA .0125RS # AMIN/2 AD L # L HAS ABS(AOS) - AMIN EXTEND # RESULT IS ABS(AOS)- AMIN/2 BZMF NOAOS # ABS(AOS) LESS THAN AMIN/2 SOMEAOS CA DBVAL3 # AMIN/2 LT ABS(AOS) LT AMIN INDEX -SIGNAOS TS DBB3 # DB3(4) = DB/2 AD A INDEX SIGNAOS TS DBB4 # DB4(3) = DB TCF SKIPDB2 NOAOS CA DBVAL1 TS DBB3 # DB3,4 = DB TS DBB4 SKIPDB2 CA ABSAOS # ANETPOS(NEG) MAX = 2 JACC + ABS(AOS) AD 1JACCU AD 1JACCU TS ANET # CANNOT OVERFLOW HERE CL1/NET+ TC DO1/NET+ # COMPUTE 1/ANET, ACCFUN ACCTHERE INDEX -SIGNAOS TS Z5TEM +2 # STORE ACCFUN IN TEMPORARY BUFFER CA 1/ANET INDEX -SIGNAOS TS 1/ATEM2 +2 # STORE 1/ANET IN TEMPORARY BUFFER CA ABSAOS # SEE IF OVERFLOW IN MIN CASE AD 1JACCU # Page 1501 AD BIT9 # MAXIMUM POSSIBLE VALUE TS A # OVERFLOW POSSIBLE BUT REMOTE TCF +2 CA POSMAX # IF OVERFLOW, TRUNCATE TO PI/2 AD -.03R/S2 # RESTORE TO CORRECT VALUE TS ANET TC DO1/NET+ # COMPUTE 1/ANET, ACCFUN INDEX -SIGNAOS # STORE MIN VALUES JUST AS MAX VALUES TS Z5TEM CA 1/ANET INDEX -SIGNAOS TS 1/ATEM2 CS ABSAOS # NOW DO NEG(POS) CASES AD 1JACCU AD 1JACCU # ANETNEG(POS) MAX TC 1/ANET- # COMPUTE 1/ANET, ACCFUN, AND ACCSW INDEX SIGNAOS # STORE NEG(POS) VALUES JUST AS POS(NEG) TS Z1TEM +2 TS L # SAVE IN L FOR POSSIBLE FUTURE USE CA 1/ANET INDEX SIGNAOS TS 1/ATEM1 +2 CS ABSAOS AD 1JACCU # 1/ANETNEG(POS) MIN TS ANET AD -.03R/S2 # TEST FOR AMIN EXTEND # IF ANET LESS THAN AMIN, STORE MAX JET BZMF FIXMIN # VALUES FOR MIN JETS AND SET ACCSW TC 1/NETMIN # OTHERWISE DO MIN JET COMPUTATIONS STMIN- INDEX SIGNAOS # STORE VALUES TS Z1TEM CA 1/ANET INDEX SIGNAOS TS 1/ATEM1 INDEX UV CA +UMASK MASK CH5MASK # TEST FOR +U (+V) JET FAILURES EXTEND BZF FAIL- CA 1/ATEM2 # REPLACE FUNCTION VALUES DEPENDING ON THE TS 1/ATEM2 +2 # FAILED JET PAIR WITH CORRESPONDING ONE- CA Z5TEM # JET (OR AMIN) FUNCTION VALUES TS Z5TEM +2 FAIL- INDEX UV # Page 1502 CA -UMASK MASK CH5MASK # TEST FOR -U (-V) JET FAILURES EXTEND BZF DBFUN CA 1/ATEM1 # REPLACE FUNCTION VALUES DEPENDING ON THE TS 1/ATEM1 +2 # FAILED JET PAIR WITH CORRESPONDING ONE- CA Z1TEM # JET (OR AMIN) FUNCTION VALUES TS Z1TEM +2 DBFUN CS DBB3 # COMPUTE AXISDIST AD DBB1 AD FLATEMP TS AXDSTEM CS DBB4 AD DBB2 AD FLATEMP TS AXDSTEM +1 INHINT CCS UV # TEST FOR U OR V AXIS TCF STORV # V AXIS STORE V VALUES CA ACCSW # U AXIS STORE U VALUES TS ACCSWU CA NINE # TRANSFER 10 WORDS VIA GENTRAN TC GENTRAN +1 ADRES 1/ATEM1 # TEMPORARY BUFFER ADRES 1/ANET1 # THE REAL PLACE RELINT DXCH DBB1 # SAVE U DBS FOR LATER STORING DXCH UDB1 DXCH DBB4 DXCH UDB4 DXCH AXDSTEM DXCH UAXDIST CA ONE # NOW DO V AXIS TS UV CA ZERO TCF BOTHAXES # AND DO IT AGAIN STORV CA ACCSW # STORE V AXIS VALUES TS ACCSWV CA NINE TC GENTRAN +1 # Page 1503 ADRES 1/ATEM1 # TEMPORARY BUFFER ADRES 1/ANET1 +16D # THE REAL PLACE # NOW STORE DEADBANDS FOR ALL AXES DXCH FLATEMP # FLAT AND ZONE3LIM DXCH FLAT CA DBVAL1 # COMPUTE P AXIS DEADBANDS TS PDB1 TS PDB2 AD FLAT TS PDB3 TS PDB4 CA ZERO TS PAXDIST TS PAXDIST +1 CCS FLAT TCF DRFDB # DRIFT OR GTS -- COMPUTE DBS DXCH UDB1 # STORE U DEADBANDS DXCH FIREDB # CANNOT USE GENTRAN BECAUSE OF RELINT DXCH UDB4 DXCH COASTDB DXCH UAXDIST DXCH AXISDIST DXCH DBB1 # STORE V AXIS DEADBANDS DXCH FIREDB +16D # COULD USE GENTRAN IF DESIRED DXCH DBB4 DXCH COASTDB +16D DXCH AXDSTEM DXCH AXISDIST +16D TCF 1/ACCRET +1 # ALL DONE DRFDB CA DBVAL1 # DRIFT DEADBANDS TS FIREDB TS FIREDB +1 TS FIREDB +16D TS FIREDB +17D AD FLAT TS COASTDB TS COASTDB +1 TS COASTDB +16D TS COASTDB +17D CA ZERO TS AXISDIST TS AXISDIST +1 TS AXISDIST +16D TS AXISDIST +17D # Page 1504 1/ACCRET INHINT CS DAPBOOLS # SET BIT TO INDICATE DATA GOOD. MASK ACCSOKAY ADS DAPBOOLS RELINT CA ACCRETRN TC BANKJUMP # RETURN TO CALLER INVERT TS HOLD # ROUTINE TO INVERT -INPUT AT PI/2 CA BIT9 # 1 AT 2(6) ZL # ZERO L FOR ACCURACY AND TO PREVENT OVFLO EXTEND DV HOLD TC Q # RESULT AT 2(7)/PI DOWNGTS CAF ZERO # ZERO SWITCHES WHEN USEQRJTS BIT IS UP TS ALLOWGTS # OR DAP IS OFF TS INGTS TCF DOCKTEST 1/ANET- ZL LXCH ACCSW # ZERO ACCSW TS ANET # SAVE ANET AD -.03R/S2 # TEST FOR MIN VALUE EXTEND BZMF NETNEG # ANET LESS THAN AMIN, SO FAKE IT 1/NETMIN CA ANET EXTEND INDEX -SIGNAOS MP 1/ACOSTT +1 # ANETNEG(POS)/ACOASTPOS(NEG) AT 2(6) # THE FOLLOWING CODING IS VALID FOR BOTH POS OR NEG # VALUES OF AOS DO1/NET+ AD BIT9 # 1 + ANET/ACOAST AT 2(6) XCH ANET # SAVE AND PICK UP ANET EXTEND QXCH ARET # SAVE RETURN TC INVERT TS 1/ANET # 1/ANET AT 2(7)/PI CS BIT9 # -1 AT 2(6) DOACCFUN EXTEND MP 1/ANET # -1/ANET AT 2(13)/PI EXTEND DV ANET # ACCFUN AT 2(7)/PI TC ARET # RETURN NETNEG CS -.03R/S2 # ANET LESS THAN AMIN -- SET EQUAL TO AMIN TS ANET # Page 1505 TCF 1/NETMIN +1 # CONTINUE AS IF NOTHING HAPPENED. FIXMIN CCS SIGNAOS CA TWO # IF AOS NEG, ACCSW = +1 AD NEGONE # IF AOS POS, ACCSW = -1 TS ACCSW AD UV # IF ACCSW = +1, TEST FOR +U (+V) JET FAIL INDEX A # IF ACCSW = -1, TEST FOR -U (-V) JET FAIL CA -UMASK +1 MASK CH5MASK EXTEND BZF +4 CS -.03R/S2 # JET FAILURE -- CANNOT USE 2-JET VALUES TS ANET # ANET = AMIN TCF STMIN- -1 # CALCULATE FUNCTIONS USING AMIN CA L # L HAS ACCFUN TCF STMIN- # STORE MAX VALUES FOR MIN JETS # ERASABLE ASSIGNMENTS FOR 1/ACCONT 1/ANETP EQUALS BLOCKTOP +2 1/ACOSTP EQUALS BLOCKTOP +4 PACCFUN EQUALS BLOCKTOP +8D PDB1 EQUALS BLOCKTOP +10D PDB2 EQUALS BLOCKTOP +11D PDB4 EQUALS BLOCKTOP +12D PDB3 EQUALS BLOCKTOP +13D PAXDIST EQUALS BLOCKTOP +14D ACCSW EQUALS VBUF # EXECUTIVE TEMPORARIES # CANNOT DO CCS NEWJOB DURING 1/ACCS 1/ATEM1 EQUALS ACCSW +1 # TEMP BUFFER FOR U AND V AXES 1/ATEM2 EQUALS 1/ATEM1 +1 1/ACOSTT EQUALS 1/ATEM1 +4 Z1TEM EQUALS 1/ATEM1 +6 Z5TEM EQUALS 1/ATEM1 +7 UDB1 EQUALS 1/ATEM1 +10D # UAXIS DEADBAND BUFFER UDB2 EQUALS 1/ATEM1 +11D UDB4 EQUALS 1/ATEM1 +12D UDB3 EQUALS 1/ATEM1 +13D UAXDIST EQUALS 1/ATEM1 +14D DBB1 EQUALS 1/ATEM1 +16D # TEMP DEADBAND BUFFER, ALSO V AXIS DBB2 EQUALS 1/ATEM1 +17D DBB4 EQUALS 1/ATEM1 +18D DBB3 EQUALS 1/ATEM1 +19D AXDSTEM EQUALS 1/ATEM1 +20D # Page 1506 FLATEMP EQUALS 1/ATEM1 +22D Z3TEM EQUALS 1/ATEM1 +23D # MUST FOLLOW FLATEMP DBVAL1 EQUALS DB DBVAL2 EQUALS INTB15+ DBVAL3 EQUALS INTB15+ +1 DRIFTER EQUALS INTB15+ +2 UV EQUALS MPAC ANET EQUALS MPAC +3 FUNTEM EQUALS MPAC +3 1/ANET EQUALS MPAC +4 ARET EQUALS MPAC +5 ABSAOS EQUALS MPAC +6 SIGNAOS EQUALS MPAC +7 -SIGNAOS EQUALS MPAC +8D HOLD EQUALS MPAC +9D ACCRETRN EQUALS FIXLOC -1 ZONE3MAX DEC .004375 # 17.5 MS (35 MS FOR 1 JET) AT 4 SECONDS FLATVAL DEC .01778 # .8 AT PI/4 RAD -.03R/S2 OCT 77377 # -PI/2(7) AT PI/2 .0125RS EQUALS BIT8 # PI/2(+8) AT PI/2 1/.03 EQUALS POSMAX # 2(7)/PI AT 2(7)/PI PAXISADR GENADR PAXIS # THE FOLLOWING 4 CONSTANTS ARE JET # FAILURE MASKS AND ARE INDEXED -UMASK OCT 00110 # -U OCT 00022 # -V +UMASK OCT 00204 # +U OCT 00041 # +V