# Copyright: Public domain. # Filename: LUNAR_LANDING_GUIDANCE_EQUATIONS.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: HARTMUTH GUTSCHE . # Website: www.ibiblio.org/apollo. # Pages: 798-828 # Mod history: 2009-05-23 HG Transcribed from page images. # 2009-06-05 RSB Fixed a goofy thing that was apparently # legal in GAP but not in yaYUL. Eliminated # a couple of lines of code that shouldn't # have survived from Luminary 131 to here. # 2009-06-07 RSB Fixed 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 798 EBANK= E2DPS COUNT* $$/F2DPS # ******************************************************** # LUNAR LANDING FLIGHT SEQUENCE TABLES # ******************************************************** # FLIGHT SEQUENCE TABLES ARE ARRANGED BY FUNCTION. THEY ARE REFERENCED USING AS AN INDEX THE REGISTER WCHPHASE: # WCHPHASE = -1 ---> IGNALG # WCHPHASE = 0 ---> BRAKQUAD # WCHPHASE = 1 ---> APPRQUAD # WCHPHASE = 2 ---> VERTICAL #********************************************************* # ROUTINES FOR STARTING NEW GUIDANCE PHASES: TCF TTFINCR # IGNALG NEWPHASE TCF TTFINCR # BRAKQUAD TCF STARTP64 # APPRQUAD TCF P65START # VERTICAL # PRE-GUIDANCE COMPUTATIONS: TCF CALCRGVG # IGNALG PREGUIDE TCF RGVGCALC # BRAKQUAD TCF REDESIG # APPRQUAD TCF RGVGCALC # VERTICAL # GUIDANCE EQUATIONS: TCF TTF/8CL # IGNALG WHATGUID TCF TTF/8CL # BRAKQUAD TCF TTF/8CL # APPRQUAD TCF VERTGUID # VERTICAL # POST GUIDANCE EQUATION COMPUTATIONS: TCF CGCALC # IGNALG AFTRGUID TCF CGCALC # BRAKQUAD TCF CGCALC # APPRQUAD TCF STEER? # VERTICAL # Page 799 # WINDOW VECTOR COMPUTATIONS: TCF EXGSUB # IGNALG WHATEXIT TCF EXBRAK # BRAKQUAD TCF EXNORM # APPRQUAD # DISPLAY ROUTINES: WHATDISP TCF P63DISPS # BRAKQUAD TCF P64DISPS # APPRQUAD TCF VERTDISP # VERTICAL # ALARM ROUTINE FOR TTF COMPUTATION: TCF 1406P00 # IGNALG WHATALM TCF 1406ALM # BRAKQUAD TCF 1406ALM # APPRQUAD # INDICES FOR REFERENCING TARGET PARAMETERS OCT 0 # IGNALG TARGTDEX OCT 0 # BRAKQUAD OCT 34 # APPRQUAD #************************************************************************ # ENTRY POINTS: ?GUIDSUB FOR THE IGNITION ALGORITHM, LUNLAND FOR SERVOUT #************************************************************************ # IGNITION ALGORITHM ENTRY: DELIVERS N PASSES OF QUADRATIC GUIDANCE ?GUIDSUB EXIT CAF TWO # N = 3 TS NGUIDSUB TCF GUILDRET +2 GUIDSUB TS NGUIDSUB # ON SUCCEEDING PASSES SKIP TTFINCR TCF CALCRGVG # NORMAL ENTRY: CONTROL COMES HERE FROM SERVOUT LUNLAND TC PHASCHNG OCT 00035 # GROUP 5: RETAIN ONLY PIPA TASK TC PHASCHNG OCT 05023 # GROUP 3: PROTECT GUIDANCE WITH PRIO 21 OCT 21000 # JUST HIGHER THAN SERVICER'S PRIORITY # Page 800 #******************************************************************* # GUILDENSTERN: AUTO-MODES MONITOR (R13) #******************************************************************* COUNT* $$/R13 # HERE IS THE PHILOSOPHY OF GUILDENSTERN: ON EVERY APPEARANCE OR DISAPPEARANCE OF THE MANUAL THROTTLE # DISCRETE TO SELECT P67 OR P66 RESPECTIVELY: ON EVERY APPEARANCE OF THE ATTITUDE-HOLD DISCRETE TO SELECT P66 # UNLESS THE CURRENT PROGRAM IS P67 IN WHICH CASE THERE IS NO CHANGE GUILDEN EXTEND # IS UN-AUTO-THROTTLE DISCRETE PRESENT? # STERN # RSB 2009: Not originally a comment. READ CHAN30 MASK BIT5 CCS A TCF STARTP67 # YES P67NOW? TC CHECKMM # NO: ARE WE IN P67 NOW? DEC 67 TCF STABL? # NO STARTP66 TC FASTCHNG # YES TC NEWMODEX DEC66 DEC 66 EXTEND DCA HDOTDISP # SET DESIRED ALTITUDE RATE = CURRENT DXCH VDGVERT # ALTITUDE RATE. STRTP66A TC INTPRET SLOAD PUSH PBIASZ SLOAD PUSH PBIASY SLOAD VDEF PBIASX VXSC SET BIASFACT RODFLAG STOVL VBIAS TEMX VCOMP STOVL OLDPIPAX ZEROVECS STODL DELVROD RODSCALE STODL RODSCAL1 PIPTIME STORE LASTTPIP EXIT CAF ZERO TS FCOLD TS FWEIGHT TS FWEIGHT +1 VRTSTART TS WCHVERT # Page 801 CAF TWO # WCHPHASE = 2 ---> VERTICAL: P65,P66,P67 TS WCHPHOLD TS WCHPHASE TC BANKCALL # TEMPORARY, I HOPE HOPE HOPE CADR STOPRATE # TEMPORARY, I HOPE HOPE HOPE TC DOWNFLAG # PERMIT X-AXIS OVERRIDE ADRES XOVINFLG TC DOWNFLAG ADRES REDFLAG TCF VERTGUID STARTP67 TC NEWMODEX # NO HARM IN "STARTING" P67 OVER AND OVER DEC 67 # SO NO NEED FOR A FASTCHNG AND NO NEED CAF ZERO # TO SEE IF ALREADY IN P67. TS RODCOUNT CAF TEN TCF VRTSTART STABL? CAF BIT13 # IS UN-ATTITUDE-HOLD DISCRETE PRESENT? EXTEND RAND CHAN31 CCS A TCF GUILDRET # YES ALL'S WELL P66NOW? CS MODREG AD DEC66 EXTEND BZF RESTART? CA RODCOUNT # NO. HAS THE ROD SWITCH BEEN "CLICKED"? EXTEND BZF GUILDRET # NO. CONTINUE WITH AUTOMATIC LANDING TCF STARTP66 # YES. SWITCH INTO THE ROD MODE. RESTART? CA FLAGWRD1 # HAS THERE BEEN A RESTART? MASK RODFLBIT EXTEND BZF STRTP66A # YES. REINITIALIZE BUT LEAVE VDGVERT AS # IS. TCF VERTGUID # NO: CONTINUE WITH R.O.D. # ******************************************************************************* # INITIALIZATION FOR THIS PASS # ******************************************************************************* COUNT* $$/F2DPS GUILDRET CAF ZERO TS RODCOUNT # Page 802 +2 EXTEND DCA TPIP DXCH TPIPOLD TC FASTCHNG EXTEND DCA PIPTIME1 DXCH TPIP EXTEND DCA TTF/8 DXCH TTF/8TMP CCS FLPASS0 TCF TTFINCR BRSPOT1 INDEX WCHPHASE TCF NEWPHASE # ****************************************************************** # ROUTINES TO START NEW PHASES # ****************************************************************** P65START TC NEWMODEX DEC 65 CS TWO TS WCHVERT TC DOWNFLAG # PERMIT X-AXIS OVERRIDE ADRES XOVINFLG TCF TTFINCR STARTP64 TC NEWMODEX DEC 64 CA DELTTFAP # AUGMENT TTF/8 ADS TTF/8TMP CA BIT12 # ENABLE RUPT10 EXTEND WOR CHAN13 TC DOWNFLAG # INITIALIZE REDESIGNATION FLAG ADRES REDFLAG # (CONTINUE TO TTFINCR) # ********************************************************************************* # INCREMENT TTF/8, UPDATE LAND FOR LUNAR ROTATION, DO OTHER USEFUL THINGS # ********************************************************************************* # # TTFINCR COMPUTATIONS ARE AS FOLLOWS -- # Page 803 # TTF/8 UPDATED FOR TIME SINCE LAST PASS: # TTF/8 = TTF/8 + (TPIP - TPIPOLD)/8 # LANDING SITE VECTOR UPDATED FOR LUNAR ROTATION: # ____ ____ ____ __ # LAND = /LAND/ UNIT(LAND - LAND(TPIP - TPIPOLD) * WM) # SLANT RANGE TO LANDING SITE, FOR DISPLAY: # ____ _ # RANGEDSP = ABVAL(LAND - R) TTFINCR TC INTPRET DLOAD DSU TPIP TPIPOLD SLR PUSH # SHIFT SCALES DELTA TIME TO 2(17) CSECS 11D VXSC VXV LAND WM BVSU RTB LAND NORMUNIT VXSC VSL1 /LAND/ STODL LANDTEMP EXIT DXCH MPAC DAS TTF/8TMP # NOW HAVE INCREMENTED TTF/8 IN TTF/8TMP TC FASTCHNG EXTEND DCA TTF/8TMP DXCH TTF/8 EXTEND DCA LANDTEMP DXCH LAND EXTEND DCA LANDTEMP +2 DXCH LAND +2 EXTEND DCA LANDTEMP +4 DXCH LAND +4 # Page 804 TC TDISPSET TC FASTCHNG # SINCE REDESIG MAY CHANGE LANDTEMP BRSPOT2 INDEX WCHPHASE TCF PREGUIDE # ********************************************************************* # LANDING SITE PERTURBATION EQUATIONS # ********************************************************************* REDESIG CA FLAGWRD6 # IS REDFLAG SET? MASK REDFLBIT EXTEND BZF RGVGCALC # NO: SKIP REDESIGNATION LOGIC CA TREDES # YES: HAS TREDES REACHED ZERO? EXTEND BZF RGVGCALC # YES: SKIP REDESIGNATION LOGIC INHINT CA ELINCR1 TS ELINCR CA AZINCR1 TS AZINCR TC FASTCHNG CA ZERO TS ELINCR1 TS AZINCR1 TS ELINCR +1 TS AZINCR +1 CA FIXLOC # SET PD TO 0 TS PUSHLOC TC INTPRET VLOAD VSU LAND R # ____ _ RTB PUSH # PUSH DOWN UNIT (LAND - R) NORMUNIT VXV VSL1 YNBPIP # ___ ____ _ VXSC PDDL # PUSH DOWN - ELINCR(YNB * UNIT(LAND - R)) ELINCR AZINCR VXSC VSU YNBPIP VAD PUSH # RESULTING VECTOR IS 1/2 REAL SIZE # Page 805 DLOAD DSU # MAKE SURE REDESIGNATION IS NOT 0 # TOO CLOSE TO THE HORIZON. DEPRCRIT BMN DLOAD REDES1 DEPRCRIT STORE 0 REDES1 DLOAD DSU LAND R DDV VXSC 0 VAD UNIT R VXSC VSL1 /LAND/ STORE LANDTEMP EXIT # LOOKANGL WILL BE COMPUTED AT RGVGCALC TC FASTCHNG EXTEND DCA LANDTEMP DXCH LAND EXTEND DCA LANDTEMP +2 DXCH LAND +2 EXTEND DCA LANDTEMP +4 DXCH LAND +4 TCF RGVGCALC # ********************************************************************* # COMPUTE STATE IN GUIDANCE COORDINATES # ********************************************************************* # # RGVGCALC COMPUTATIONS ARE AS FOLLOWS:-- # VELOCITY RELATIVE TO THE SURFACE # _______ _ _ __ # ANGTERM = V + R * WM # STATE IN GUIDANCE COORDINATES: # ___ * _ ____ # RGU = CG (R - LAND) # ___ * _ __ _ # VGU = CG (V - WM * R) # Page 806 actually starts one line earlier but that would separate the markers from their variables # # HORIZONTAL VELOCITY FOR DISPLAY # # VHORIZ = 8 ABVAL (0, VG , VG ) # 2 1 # DEPRESSION ANGLE FOR DISPLAY: # _ ____ ______ # LOOKANGL = ARCSIN(UNIT(R - LAND).XMBPIP) CALCRGVG TC INTPRET # IN IGNALG, COMPUTE V FROM INTEGRATION VLOAD MXV # OUTPUT AND TRIM CORRECTION TERM VATT1 # COMPUTED LAST PASS AND LEFT IN UNFC/2 REFSMMAT VSR1 VAD UNFC/2 STORE V EXIT RGVGCALC TC INTPRET # ENTER HERE TO RECOMPUTE RG AND VG VLOAD VXV R WM VAD VSR2 # RESCALE TO UNITS OF 2(9) M/CS V STORE ANGTERM MXV CG # NO SHIFT SINCE ANGTERM IS DOUBLE SIZED STORE VGU PDDL VDEF # FORM (0,VG ,VG ) IN UNITS OF 2(10) M/CS ZEROVECS # 2 1 ABVAL SL3 STOVL VHORIZ # VHORIZ FOR DISPLAY DURING P65. R # _ ____ VSU PUSH # PUSH DOWN R - LAND LAND MXV VSL1 CG STORE RGU ABVAL STOVL RANGEDSP RTB DOT # NOW IN MPAC IS SINE(LOOKANGL)/4 NORMUNIT XNBPIP EXIT CA FIXLOC # RESET PUSH DOWN POINTER TS PUSHLOC # Page 807 CA MPAC # COMPUTE LOOKANGLE ITSELF DOUBLE TC BANKCALL CADR SPARCSIN -1 AD 1/2DEG EXTEND MP 180DEGS TS LOOKANGL # LOOKANGL FOR DISPLAY DURING P64 BRSPOT3 INDEX WCHPHASE TCF WHATGUID # ************************************************************************** # TTF/8 COMPUTATION # ************************************************************************** TTF/8CL TC INTPRETX DLOAD* JDG2TTF,1 STODL* TABLTTF +6 # A(3) = 8 JDG TO TABLTTF ADG2TTF,1 # 2 STODL TABLTTF +4 # A(2) = 6 ADG TO TABLTTF VGU +4 # 2 DMP DAD* 3/4DP VDG2TTF,1 STODL* TABLTTF +2 # A(1) = (6 VGU + 18 VDG )/8 TO TABLTTF RDG +4,1 # 2 2 DSU DMP RGU +4 3/8DP STORE TABLTTF # A(0) = -24 (RGU - RDG )/64 TO TABLTTF EXIT # 2 2 CA BIT8 TS TABLTTF +10 # FRACTIONAL PRECISION FOR TTF TO TABLE EXTEND DCA TTF/8 DXCH MPAC # LOADS TTF/8 (INITIAL GUESS) INTO MPAC CAF TWO # DEGREE - ONE TS L CAF TABLTTFL TC ROOTPSRS # YIELDS TTF/8 IN MPAC INDEX WCHPHASE TCF WHATALM EXTEND # GOOD RETURN DCA MPAC # FETCH TTF/8 KEEPING IT IN MPAC DXCH TTF/8 # CORRECTED TTF/8 # Page 808 TC TDISPSET # (CONTINUE TO QUADGUID) # ********************************************************************************* # MAIN GUIDANCE EQUATION # ********************************************************************************* # # AS PUBLISHED -- # ___ __ ___ __ # ___ ___ 6(VDG + VG) 12(RDG - RG) # ACG = ADG + ----------- + ------------ # TTF (TTF)(TTF) # AS HERE PROGRAMMED -- # ___ __ # 3 (1/4(RDG - RG) ___ __) # - (------------- + VDG + VG) # ___ 4 ( TTF/8 ) ___ # ACG = ---------------------------- + ADG # TTF/8 QUADGUID CS TTF/8 AD LEADTIME # LEADTIME IS A NEGATIVE NUMBER AD POSMAX # SAFEGUARD THE COMPUTATIONS THAT FOLLOW TS L # BY FORCING -TTF*LEADTIME > OR = ZERO CS L AD L ZL EXTEND DV TTF/8 TS BUF # - RATIO OF LAG-DIMINISHED TTF TO TTF EXTEND SQUARE TS BUF +1 AD BUF XCH BUF +1 # RATIO SQUARED - RATIO AD BUF +1 TS MPAC # COEFFICIENT FOR VGU TERM AD BUF +1 INDEX FIXLOC TS 26D # COEFFICIENT FOR RDG-RGU TERM AD BUF +1 INDEX FIXLOC TS 28D # COEFFICIENT FOR VDG TERM AD BUF AD POSMAX # Page 809 AD BUF +1 AD BUF +1 INDEX FIXLOC TS 30D # COEFFICIENT FOR ADG TERM CAF ZERO TS MODE TC INTPRETX VXSC PDDL VGU 28D VXSC* PDVL* VDG,1 RDG,1 VSU V/SC RGU TTF/8 VSR2 VXSC 26D VAD VAD V/SC VXSC TTF/8 3/4DP PDDL VXSC* 30D ADG,1 VAD AFCCALC1 VXM VSL1 # VERGUID COMES HERE CG PDVL V/SC GDT/2 GSCALE BVSU STADR STORE UNFC/2 # UNFC/2 NEED NOT BE UNITIZED ABVAL AFCCALC2 STODL /AFC/ # MAGNITUDE OF AFC FOR THROTTLE UNFC/2 # VERTICAL COMPONENT DSQ PDDL UNFC/2 +2 # OUT-OF-PLANE DSQ PDDL HIGHESTF DDV DSQ MASS # 2 2 2 DSU DSU # AMAXHORIZ = SQRT(ATOTAL - A - A ) BPL DLOAD # 1 0 AFCCALC3 ZEROVECS AFCCALC3 SQRT DAD UNFC/2 +4 # Page 810 BPL BDSU AFCCLEND UNFC/2 +4 STORE UNFC/2 +4 AFCCLEND EXIT TC FASTCHNG CA WCHPHASE # PREPARE FOR PHASE SWITCHING LOGIC TS WCHPHOLD INCR FLPASS0 # INCREMENT PASS COUNTER BRSPOT4 INDEX WCHPHASE TCF AFTRGUID # *********************************************************************** # ERECT GUIDANCE-STABLE MEMBER TRANSFORMATION MATRIX # *********************************************************************** CGCALC CAF EBANK5 TS EBANK EBANK= TCGIBRAK EXTEND INDEX WCHPHASE INDEX TARGTDEX DCA TCGFBRAK INCR BBANK INCR BBANK EBANK= TTF/8 AD TTF/8 XCH L AD TTF/8 CCS A CCS L TCF EXTLOGIC TCF EXTLOGIC NOOP TC INTPRETX VLOAD UNIT LAND STODL CG TTF/8 DMP* VXSC GAINBRAK,1 # NUMERO MYSTERIOSO ANGTERM VAD LAND VSU RTB R NORMUNIT # Page 811 VXV RTB LAND NORMUNIT STOVL CG +6 # SECOND ROW CG VXV VSL1 CG +6 STORE CG +14 EXIT # (CONTINUE TO EXTLOGIC) # # *********************************************************************** # PREPARE TO EXIT # *********************************************************************** # # DECIDE (1) HOW TO EXIT, AND (2) WHETHER TO SWITCH PHASES # EXTLOGIC INDEX WCHPHASE # WCHPHASE = 1 APPRQUAD CA TENDBRAK # WCHPHASE = 0 BRAKQUAD AD TTF/8 EXSPOT1 EXTEND INDEX WCHPHASE BZMF WHATEXIT TC FASTCHNG CA WCHPHOLD AD ONE TS WCHPHASE CA ZERO TS FLPASS0 # RESET FLPASS0 INDEX WCHPHOLD TCF WHATEXIT # *********************************************************************** # ROUTINES FOR EXITING FROM LANDING GUIDANCE # *********************************************************************** # # 1. EXGSUB IS THE RETURN WHEN GUIDSUB IS CALLED BY THE IGNITION ALGORITHM. # 2. EXBRAK IN THE EXIT USED DURING THE BRAKING PHASE. IN THIS CASE UNIT(R) IS THE WINDOW POINTING VECTOR. # 3. EXNORM IS THE EXIT USED AT OTHER TIMES DURING THE BURN. # (EXOVFLOW IS A SUBROUTINE OF EXBRAK AND EXNORM CALLED WHEN OVERFLOW OCCURRED ANYWHERE IN GUIDANCE.) EXGSUB TC INTPRET # COMPUTE TRIM VELOCITY CORRECTION TERM. # Page 812 VLOAD RTB UNFC/2 NORMUNIT VXSC VXSC ZOOMTIME TRIMACCL STORE UNFC/2 EXIT CCS NGUIDSUB TCF GUIDSUB CCS NIGNLOOP TCF +3 TC ALARM OCT 01412 +3 TC POSTJUMP CADR DDUMCALC EXBRAK TC INTPRET VLOAD UNIT/R/ STORE UNWC/2 EXIT TCF STEER? EXNORM TC INTPRET VLOAD VSU LAND R RTB NORMUNIT STORE UNWC/2 # UNIT(LAND - R) IS TENTATIVE CHOICE VXV DOT XNBPIP CG +6 EXIT # WITH PROJ IN MPAC 1/8 REAL SIZE CS MPAC # GET COEFFICIENT FOR CG +14 AD PROJMAX AD POSMAX TS BUF CS BUF ADS BUF # RESULT IS 0 IF PROJMAX - PROJ NEGATIVE CS PROJMIN # GET COEFFICIENT FOR UNIT(LAND - R) AD MPAC AD POSMAX TS BUF +1 CS BUF +1 # Page 813 ADS BUF +1 # RESULT IS 0 IF PROJ - PROJMIN NEGATIVE CAF FOUR UNWCLOOP MASK SIX TS Q CA EBANK5 TS EBANK EBANK= CG CA BUF EXTEND INDEX Q MP CG +14 INCR BBANK EBANK= UNWC/2 INDEX Q DXCH UNWC/2 EXTEND MP BUF +1 INDEX Q DAS UNWC/2 CCS Q TCF UNWCLOOP INCR BBANK EBANK= PIF STEER? CA FLAGWRD2 # IF STEERSW DOWN NO OUTPUTS MASK STEERBIT EXTEND BZF RATESTOP EXVERT CA OVFIND # IF OVERFLOW ANYWHERE IN GUIDANCE EXTEND # DON'T CALL THROTTLE OR FINDCDUW BZF +13 EXOVFLOW TC ALARM # SOUND THE ALARM NON-ABORTIVELY OCT 01410 RATESTOP CAF BIT13 # ARE WE IN ATTITUDE-HOLD? EXTEND RAND CHAN31 EXTEND BZF DISPEXIT # YES TC BANKCALL # NO: DO A STOPRATE CADR STOPRATE TCF DISPEXIT GDUMP1 TC THROTTLE # Page 814 TC INTPRET CALL FINDCDUW -2 EXIT # (CONTINUE TO DISPEXIT) # *********************************************************************** # GUIDANCE LOOP DISPLAYS # *********************************************************************** DISPEXIT EXTEND # KILL GROUP 3: DISPLAYS WILL BE DCA NEG0 # RESTORED BY NEXT GUIDANCE CYCLE. DXCH -PHASE3 +3 CS FLAGWRD8 # IF FLUNDISP IS SET, NO DISPLAY THIS PASS MASK FLUNDBIT EXTEND BZF ENDLLJOB # TO PICK UP THE TAG INDEX WCHPHOLD TCF WHATDISP -2 TC PHASCHNG # KILL GROUP 5 OCT 00035 P63DISPS CAF V06N63 DISPCOMN TC BANKCALL CADR REGODSPR ENDLLJOB TCF ENDOFJOB P64DISPS CA TREDES # HAS TREDES REACHED ZERO? EXTEND BZF RED-OVER # YES: CLEAR REDESIGNATION FLAG CS FLAGWRD6 # NO: IS REDFLAG SET? MASK REDFLBIT EXTEND BZF REDES-OK # YES: DO STATIC DISPLAY CAF V06N64 # OTHERWISE USE FLASHING DISPLAY TC BANKCALL CADR REFLASHR TCF GOTOP00H # TERMINATE TCF P64CEED # PROCEED PERMIT REDESIGNATIONS TCF P64DISPS # RECYCLE # Page 815 TCF ENDLLJOB P64CEED CAF ZERO TS ELINCR1 TS AZINCR1 TC UPFLAG # ENABLE REDESIGNATION LOGIC ADRES REDFLAG TCF ENDOFJOB RED-OVER TC DOWNFLAG ADRES REDFLAG REDES-OK CAF V06N64 TCF DISPCOMN VERTDISP CAF V06N60 TCF DISPCOMN # ************************************************************************** # GUIDANCE FOR P65 # ************************************************************************** VERTGUID CCS WCHVERT TCF P67VERT # POSITIVE NON-ZERO ---> P67 TCF P66VERT # +0 # # THE P65 GUIDANCE EQUATION IS AS FOLLOWS -- # ____ ___ # V2FG - VGU # ACG = ---------- # TAUVERT P65VERT TC INTPRET VLOAD VSU V2FG VGU V/SC GOTO TAUVERT AFCCALC1 # Page 816 # ********************************************************** # GUIDANCE FOR P66 # ********************************************************** P66VERT TC POSTJUMP CADR P66VERTA P67VERT TC PHASCHNG # TERMINATE GROUP 3. OCT 00003 TC INTPRET VLOAD GOTO V VHORCOMP SETLOC P66LOC BANK COUNT* $$/F2DPS RODTASK CAF PRIO22 TC FINDVAC EBANK= DVCNTR 2CADR RODCOMP TCF TASKOVER P66VERTA TC PHASCHNG # TERMINATE GROUP 3. OCT 00003 CAF 1SEC TC TWIDDLE ADRES RODTASK RODCOMP INHINT CAF ZERO XCH RODCOUNT EXTEND MP RODSCAL1 DAS VDGVERT # UPDATE DESIRED ALTITUDE RATE. EXTEND # SET OLDPIPAX,Y,Z = PIPAX,Y,Z DCA PIPAX DXCH OLDPIPAX DXCH RUPTREG1 # SET RUPTREG1,2,3 = OLDPIPAX,Y,Z CA PIPAZ XCH OLDPIPAZ XCH RUPTREG3 EXTEND # SNAPSHOT TIME OF PIPA READING. DCA TIME2 # Page 817 DXCH THISTPIP CA OLDPIPAX AD PIPATMPX TS MPAC # MPAC(X) = PIPAX + PIPATMPX CA OLDPIPAY AD PIPATMPY TS MPAC +3 # MPAC(Y) = PIPAY + PIPATMPY CA OLDPIPAZ AD PIPATMPZ TS MPAC +5 # MPAC(Z) = PIPAZ + PIPATMPZ CS OLDPIPAX AD TEMX AD RUPTREG1 TS DELVROD CS OLDPIPAY AD TEMY AD RUPTREG2 TS DELVROD +2 CS OLDPIPAZ AD TEMZ AD RUPTREG3 TS DELVROD +4 CAF ZERO TS MPAC +1 # ZERO LO-ORDER MPAC COMPONENTS TS MPAC +4 TS MPAC +6 TS TEMX # ZERO TEMX, TEMY, AND TEMZ SO WE WILL TS TEMY # KNOW WHEN READACCS CHANGES THEM. TS TEMZ CS ONE TS MODE TC INTPRET ITRPNT1 VXSC PDDL # SCALE MPAC TO M/CS *2(-7) AND PUSH (6) KPIP1 THISTPIP DSU PIPTIME STORE 30D # 30-31D CONTAINS TIME IN CS SINCE PIPTIME DDV PDVL # (8) 4SEC(28) GDT/2 VSU VXSC # (6) VBIAS VSL2 VAD V VAD STADR # (0) STOVL 24D # STORE UPDATED VELOCITY IN 24-29D # Page 818 R UNIT STORE 14D DOT SL1 24D STODL HDOTDISP # UPDATE HDOTDISP RATE FOR NOUN 63. 30D SL DMP 11D HDOTDISP DAD DSU 36D /LAND/ STODL HCALC1 # UPDATE HCALC1 FOR NOUN 63. HDOTDISP BDSU DDV VDGVERT TAUROD PDVL ABVAL # (2) GDT/2 DDV SR2 GSCALE STORE 20D DAD # (0) PDVL CALL # (2) UNITX CDU*NBSM DOT 14D STORE 22D BDDV STADR # (0) STOVL /AFC/ DELVROD VXSC VAD KPIP1 VBIAS ABVAL PDDL # (2) THISTPIP DSU PDDL # (4) LASTTPIP THISTPIP STODL LASTTPIP # (2) DDV BDDV # (0) SHFTFACT PDDL DMP # (2) FWEIGHT BIT1H DDV DDV MASS SCALEFAC # Page 819 DAD PDDL # (4) 0D 20D DDV DSU # (2) 22D DMP DAD LAG/TAU /AFC/ PDDL DDV # (4) MAXFORCE MASS PDDL DDV # (6) MINFORCE MASS PUSH BDSU # (8) 2D BMN DLOAD # (6) AFCSPOT DLOAD PUSH # (6) BDSU BPL 2D AFCSPOT DLOAD # (4) AFCSPOT DLOAD # (2), (4), OR (6) SETPD # (2) 2D STODL /AFC/ # (0) ITRPNT2 EXIT DXCH MPAC # MPAC = MEASURED ACCELERATION. TC BANKCALL CADR THROTTLE +3 TC INTPRET VLOAD # PICK UP UPDATED VELOCITY VECTOR. 24D VHORCOMP VSL2 VAD DELVS VSR2 PDVL R UNIT VXSC HDOTDISP VSL1 BVSU ABVAL STORE VHORIZ EXIT TC BANKCALL # PUT UP V06N60 DISPLAY BUT AVOID PHASCHNG CADR DISPEXIT +3 BIT1H OCT 00001 SHFTFACT 2DEC 1 B-17 # Page 820 BIASFACT 2DEC 655.36 B-28 # ********************************************************************************* # REDESIGNATOR TRAP # ********************************************************************************* BANK 11 SETLOC F2DPS*11 BANK COUNT* $$/F2DPS PITFALL XCH BANKRUPT EXTEND QXCH QRUPT TC CHECKMM # IF NOT IN P64, NO REASON TO CONTINUE DEC 64 TCF RESUME EXTEND READ CHAN31 COM MASK ALL4BITS TS ELVIRA CAF TWO TS ZERLINA CAF FIVE TC TWIDDLE ADRES REDESMON TCF RESUME # REDESIGNATOR MONITOR (INITIATED BY PITFALL) PREMON1 TS ZERLINA PREMON2 CAF SEVEN TC VARDELAY REDESMON EXTEND READ 31 COM MASK ALL4BITS XCH ELVIRA TS L CCS ELVIRA # DO ANY BITS APPEAR THIS PASS? TCF PREMON2 # Y: CONTINUE MONITOR CCS L # N: ANY LAST PASS? TCF COUNT'EM # Y: COUNT 'EM, RESET RUPT, TERMINATE # Page 821 CCS ZERLINA # N: HAS ZERLINA REACHED ZERO YET? TCF PREMON1 # N: DIMINISH ZERLINA, CONTINUE RESETRPT CAF BIT12 # Y: RESET RUPT. TERMINATE EXTEND WOR CHAN13 TCF TASKOVER COUNT'EM CAF BIT13 # ARE WE IN ATTITUDE-HOLD? EXTEND RAND CHAN31 EXTEND BZF RESETRPT # YES: SKIP REDESIGNATION LOGIC. CA L # NO. MASK -AZBIT CCS A -AZ CS AZEACH ADS AZINCR1 CA L MASK +AZBIT CCS A +AZ CA AZEACH ADS AZINCR1 CA L MASK -ELBIT CCS A -EL CS ELEACH ADS ELINCR1 CA L MASK +ELBIT CCS A +EL CA ELEACH ADS ELINCR1 TCF RESETRPT # THESE EQUIVALENCES ARE BASED ON GSOP CHAPTER 4, REVISION 16 OF P64LM +ELBIT = BIT2 # -PITCH -ELBIT = BIT1 # +PITCH +AZBIT = BIT5 -AZBIT = BIT6 # Page 822 ALL4BITS OCT 00063 AZEACH DEC .03491 # 2 DEGREES ELEACH DEC .00873 # 1/2 DEGREE # **************************************************************** # R.O.D. TRAP # **************************************************************** BANK 20 SETLOC RODTRAP BANK COUNT* $$/F2DPS # ************************ DESCBITS MASK BIT7 # COME HERE FROM MARKRUPT CODING WITH BIT CCS A # 7 OR 6 OF CHANNEL 16 IN A; BIT 7 MEANS CS TWO # - RATE INCREMENT, BIT 6 + INCREMENT. AD ONE ADS RODCOUNT TCF RESUME # TRAP IS RESET WHEN SWITCH IS RELEASED BANK 31 SETLOC F2DPS*31 BANK COUNT* $$/F2DPS # *********************************************************************************** # DOUBLE PRECISION ROOT FINDER SUBROUTINE (BY ALLAN KLUMPP) # *********************************************************************************** # # N N-1 # ROOTPSRS FINDS ONE ROOT OF THE POWER SERIES A X + A X + ... + A X + A # N N-1 1 0 # USING NEWTON'S METHOD STARTING WITH AN INITIAL GUESS FOR THE ROOT. THE ENTERING DATA MUST BE AS FOLLOWS: # A SP LOC-3 ADRES FOR REFERENCING PWR COF TABL # L SP N-1 N IS THE DEGREE OF THE POWER SERIES # MPAC DP X INITIAL GUESS FOR ROOT # # LOC-2N DP A(0) # ... # LOC DP A(N) # LOC+2 SP PRECROOT PREC RQD OF ROOT (AS FRACT OF 1ST GUESS) # # Page 823 # THE DP RESULT IS LEFT IN MPAC UPON EXIT, AND A SP COUNT OF THE ITERATIONS TO CONVERGENCE IS LEFT IN MPAC+2. # RETURN IS NORMALLY TO LOC(TC ROOTPSRS)+3. IF ROOTPSRS FAILS TO CONVERGE TO IN 8 PASSES, RETURN IS TO LOC+1 AND # OUTPUTS ARE NOT TO BE TRUSTED. # # PRECAUTION: ROOTPSRS MAKES NO CHECKS FOR OVERFLOW OR FOR IMPROPER USAGE. IMPROPER USAGE COULD # PRECLUDE CONVERGENCE OR REQUIRE EXCESSIVE ITERATIONS. AS A SPECIFIC EXAMPLE, ROOTPSRS FORMS A DERIVATIVE # COEFFICIENT TABLE BY MULTIPLYING EACH A(I) BY I, WHERE I RANGES FROM 1 TO N. IF AN ELEMENT OF THE DERIVATIVE # COEFFICIENT TABLE = 1 OR >1 IN MAGNITUDE, ONLY THE EXCESS IS RETAINED. ROOTPSRS MAY CONVERGE ON THE CORRECT # ROOT NONETHELESS, BUT IT MAY TAKE AN EXCESSIVE NUMBER OF ITERATIONS. THEREFORE THE USER SHOULD RECOGNIZE: # 1. USER'S RESPONSIBILITY TO ASSUR THAT I X A(I) < 1 IN MAGNITUDE FOR ALL I. # 2. USER'S RESPONSIBILITY TO ASSURE OVERFLOW WILL NOT OCCUR IN EVALUATING EITHER THE RESIDUAL OR THE DERIVATIVE # POWER SERIES. THIS OVERFLOW WOULD BE PRODUCED BY SUBROUTINE POWRSERS, CALLED BY ROOTPSRS, AND MIGHT NOT # PRECLUDE EVENTUAL CONVERGENCE. # 3. AT PRESENT, ERASABLE LOCATIONS ARE RESERVED ONLY FOR N UP TO 5. AN N IN EXCESS OF 5 WILL PRODUCE CHAOS. # ALL ERASABLES USED BY ROOTPSRS ARE UNSWITCHED LOCATED IN THE REGION FROM MPAC-33 OCT TO MPAC+7. # 4. THE ITERATION COUNT RETURNED IN MPAC+2 MAY BE USED TO DETECT ABNORMAL PERFORMANCE. # STORE ENTERING DATA, INITIALIZE ERASABLES ROOTPSRS EXTEND QXCH RETROOT # RETURN ADRES TS PWRPTR # PWR TABLE POINTER DXCH MPAC +3 # PWR TABLE ADRES, N-1 CA DERTABLL TS DERPTR # DER TABL POINTER TS MPAC +5 # DER TABL ADRES CCS MPAC +4 # NO POWER SERIES DEGREE 1 OR LESS TS MPAC +6 # N-2 CA ZERO # MODE USED AS ITERATION COUNTER. MODE TS MODE # MUST BE POS SO ABS WON'T COMP MPAC+3 ETC. # COMPUTE CRITERION TO STOP ITERATING EXTEND DCA MPAC # FETCH ROOT GUESS, KEEPING IT IN MPAC DXCH ROOTPS # AND IN ROOTPS INDEX MPAC +3 # PWR TABLE ADRES CA 5 # PRECROOT TO A TC SHORTMP # YIELDS DP PRODUCT IN MPAC TC USPRCADR CADR ABS # YIELDS ABVAL OF CRITERION ON DX IN MPAC DXCH MPAC DXCH DXCRIT # CRITERION # SET UP DER COF TABL # Page 824 EXTEND INDEX PWRPTR DCA 3 DXCH MPAC # A(N) TO MPAC CA MPAC +4 # N-1 TO A DERCLOOP TS PWRCNT # LOOP COUNTER AD ONE TC DMPNSUB # YIELDS DERCOF = I X A(I) IN MPAC EXTEND INDEX PWRPTR DCA 1 DXCH MPAC # (I-1) TO MPAC, FETCHING DERCOF INDEX DERPTR DXCH 3 # DERCOF TO DER TABLE CS TWO ADS PWRPTR # DECREMENT PWR POINTER CS TWO ADS DERPTR # DECREMENT DER POINTER CCS PWRCNT TCF DERCLOOP # CONVERGE ON ROOT ROOTLOOP EXTEND DCA ROOTPS # FETCH CURRENT ROOT DXCH MPAC # LEAVE IN MPAC EXTEND DCA MPAC +5 # LOAD A, L WITH DER TABL ADRES, N-2 TC POWRSERS # YIELDS DERIVATIVE IN MPAC EXTEND DCA ROOTPS DXCH MPAC # CURRENT ROOT TO MPAC, FETCHING DERIVATIVE DXCH BUF # LEAVE DERIVATIVE IN BUF AS DIVISOR EXTEND DCA MPAC +3 # LOAD A, L WITH PWR TABL ADRES, N-1 TC POWRSERS # YIELDS RESIDUAL IN MPAC TC USPRCADR CADR DDV/BDDV # YIELDS -DX IN MPAC EXTEND DCS MPAC # FETCH DX, LEAVING -DX IN MPAC DAS ROOTPS # CORRECTED ROOT NOW IN ROOTPS TC USPRCADR CADR ABS # YIELDS ABS(DX) IN MPAC EXTEND # Page 825 DCS DXCRIT DAS MPAC # ABS(DX)-ABS(DXCRIT) IN MPAC CA MODE MASK BIT4 # KLUMPP SAYS GIVE UP AFTER EIGHT PASSES CCS A BADROOT TC RETROOT INCR MODE # INCREMENT ITERATION COUNTER CCS MPAC # TEST HI ORDER DX TCF ROOTLOOP TCF TESTLODX TCF ROOTSTOR TESTLODX CCS MPAC +1 # TEST LO ORDER DX TCF ROOTLOOP TCF ROOTSTOR TCF ROOTSTOR ROOTSTOR DXCH ROOTPS DXCH MPAC CA MODE TS MPAC +2 # STORE SP ITERATION COUNT IN MPAC+2 INDEX RETROOT TCF 2 DERTABLL ADRES DERCOFN -3 # **************************************************************************** # TRASHY LITTLE SUBROUTINES # **************************************************************************** INTPRETX INDEX WCHPHASE # SET X1 ON THE WAY TO THE INTERPRETER CS TARGTDEX INDEX FIXLOC TS X1 TCF INTPRET TDISPSET CA TTF/8 EXTEND MP TSCALINV DXCH TTFDISP CA EBANK5 # TREDES BECOMES ZERO TWO PASSES TS EBANK # BEFORE TCGFAPPR IS REACHED EBANK= TCGFAPPR CA TCGFAPPR INCR BBANK INCR BBANK EBANK= TTF/8 # Page 826 AD TTF/8 EXTEND MP TREDESCL AD -DEC103 AD NEGMAX TS L CS L AD L AD +DEC99 AD POSMAX TS TREDES CS TREDES ADS TREDES TC Q 1406P00 TC P00DOO OCT 01406 1406ALM TC ALARM OCT 01406 TCF RATESTOP # ********************************************************************* # SPECIALIZED "PHASCHNG" SUBROUTINE # ********************************************************************* EBANK= PHSNAME2 FASTCHNG CA EBANK3 # SPECIALIZED 'PHASCHNG' ROUTINE XCH EBANK DXCH L TS PHSNAME3 LXCH EBANK EBANK= E2DPS TC A # ************************************************************************************* # PARAMETER TABLE INDIRECT ADDRESSES # ************************************************************************************* RDG = RBRFG VDG = VBRFG ADG = ABRFG VDG2TTF = VBRFG* ADG2TTF = ABRFG* JDG2TTF = JBRFG* # ************************************************************************************* # LUNAR LANDING CONSTANTS # ************************************************************************************* # Page 827 TABLTTFL ADRES TABLTTF +3 # ADDRESS FOR REFERENCING TTF TABLE TTFSCALE = BIT12 TSCALINV = BIT4 -DEC103 DEC -103 +DEC99 DEC +99 TREDESCL DEC -.08 180DEGS DEC +180 1/2DEG DEC +.00278 PROJMAX DEC .42262 B-3 # SIN(25')/8 TO COMPARE WITH PROJ PROJMIN DEC .25882 B-3 # SIN(15')/8 TO COMPARE WITH PROJ V06N63 VN 0663 # P63 V06N64 VN 0664 # P64 V06N60 VN 0660 # P65, P66, P67 BANK 22 SETLOC LANDCNST BANK COUNT* $$/F2DPS HIGHESTF 2DEC 4.34546769 B-12 GSCALE 2DEC 100 B-11 3/8DP 2DEC .375 3/4DP 2DEC .750 DEPRCRIT 2DEC -.02 B-1 # Page 828 # ************************************************************************** # **************************************************************************