# Copyright: Public domain. # Filename: R60_R62.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: 472-485 # Mod history: 2009-05-17 RSB Adapted from the corresponding # Luminary131 file, using page # images from Luminary 1A. # # 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 472 # MOD NO: 0 DATE: 1 MAY 1968 # MOD BY: DIGITAL DEVEL GROUP LOG SECTION R60,R62 # # FUNCTIONAL DESCRIPTION: # # CALLED AS A GENERAL SUBROUTINE TO MANEUVER THE LM TO A SPECIFIED # ATTITUDE. # # 1. IF THE 3-AXIS FLAG IS NOT SET THE FINAL CDU ANGLES ARE # CALCULATED (VECPOINT). # # 2. THE FDAI BALL ANGLES (NOUN 18) ARE CALCULATED (BALLANGS). # # 3. REQUEST FLASHING DISPLAY V50 N18 PLEASE PERFORM AUTO MANEUVER. # # 4. IF PRIORITY DISPLAY FLAG IS SET DO A PHASECHANGE. THEN AWAIT # ASTRONAUT RESPONSE. # # 5. DISPLAY RESPONSE RETURNS. # # A. ENTER -- RESET 3-AXIS FLAG AND RETURN TO CLIENT. # # B. TERMINATE -- IF IN P00 GO TO STEP 5A. OTHERWISE CHECK IF R61 IS # THE CALLING PROGRAM. IF IN R61 AN EXIT IS MADE TO GOTOV56. IF # NOT IN R61 AN EXIT IS DONE VIA GOTOPOOH. # # C. PROCEED -- CONTINUE WITH PROGRAM AT STEP 6. # # 6. IF THE 3-AXISFLAG IS NOT SET, THE FINAL CDU ANGLES ARE CALCULATED # (VECPOINT). # # 7. THE FDAI BALL ANGLES (NOUN 18) ARE CALCULATED (BALLANGS). # # 8. IF THE G+N SWITCH IS NOT SET GO BACK TO STEP 3. # # 9. IF THE AUTO SWITCH IS NOT SET GO BACK TO STEP 3. # # 10. NON-FLASHING DISPLAY V06N18 (FDAI ANGLES). # # 11. DO A PHASE-CHANGE. # # 12. DO A MANEUVER CALCULATION AND ICDU DRIVE ROUTINE TO ACHIEVE FINAL # GIMBAL ANGLES (GOMANUR). # # 13. AT END OF MANEUVER TO TO STEP 3. # # IF SATISFACTORY MANEUVER STEP 5A EXITS R60. # FOR FURTHER ADJUSTMENT OF THE VEHICLE ATTITUDE ABOUT THE # DESIRED VECTOR, THE ROUTINE MAY BE PERFORMED AGAIN STARTING AT # Page 473 # STEP 5C. # # CALLING SEQUENCE: TC BANKCALL # CADR R60LEM # # ERASABLE INITIALIZATION REQUIRED: SCAXIS, POINTVSM (FOR VECPOINT) # 3AXISFLG. # # SUBROUTINES CALLED: VECPOINT, BALLANGS, GOPERF24, LINUS, GODSPER, # GOMANUR, DOWNFLAG, PHASCHNG, UPFLAG # # NORMAL EXIT MODES: CAE TEMPR60 (CALLER'S RETURN ADDRESS) # TC BANKJUMP # # ALARMS: NONE # # OUTPUT: NONE # # DEBRIS: CPHI, CTHETA, CPSI, 3AXISFLG, TBASE2 BANK 34 SETLOC MANUVER BANK EBANK= TEMPR60 COUNT* $$/R06 R60LEM TC MAKECADR TS TEMPR60 REDOMANN CAF 3AXISBIT MASK FLAGWRD5 # IS 3-AXIS FLAG SET CCS A TCF TOBALL # YES TC INTPRET CALL VECPOINT # TO COMPUTE FINAL ANGLES STORE CPHI # STORE FINAL ANGLES -- CPHI, CTHETA, CPSI EXIT TOBALL TC BANKCALL CADR BALLANGS # TO CONVERT ANGLES TO FDAI TOBALLA CAF V06N18 TC BANKCALL CADR GOPERF2R # DISPLAY PLEASE PERFORM AUTO MANEUVER TC R61TEST TC REDOMANC # PROCEED TC ENDMANU1 # ENTER I.E., FINISHED WITH R60 # Page 474 TC CHKLINUS # TO CHECK FOR PRIORITY DISPLAYS TC ENDOFJOB REDOMANC CAF 3AXISBIT MASK FLAGWRD5 # IS 3-AXIS FLAG SET CCS A TCF TOBALLC # YES TC INTPRET CALL VECPOINT # TO COMPUTE FINAL ANGLES STORE CPHI # STORE ANGLES EXIT TOBALLC TC BANKCALL CADR BALLANGS # TO CONVERT ANGLES TO FDAI TC G+N,AUTO # CHECK AUTO MODE CCS A TCF TOBALLA # NOT AUTO, GO REREQUEST AUTO MANEUVER. AUTOMANV CAF V06N18 # STATIC DISPLAY DURING AUTO MANEUVER TC BANKCALL CADR GODSPR TC CHKLINUS # TO CHECK FOR PRIORITY DISPLAYS STARTMNV TC BANKCALL # PERFORM MANEUVER VIA KALCMANU CADR GOMANUR ENDMANUV TCF TOBALLA # FINISHED MANEUVER. ENDMANU1 TC DOWNFLAG # RESET 3-AXIS FLAG ADRES 3AXISFLG CAE TEMPR60 TC BANKJUMP CHKLINUS CS FLAGWRD4 MASK PDSPFBIT # IS PRIORITY DISPLAY FLAG SET? CCS A TC Q # NO -- EXIT CA Q TS MPAC +2 # SAVE RETURN CS THREE # OBTAIN LOCATION FOR RESTART AD BUF2 # HOLD Q OF LAST DISPLAY TS TBASE2 TC PHASCHNG OCT 00132 CAF BIT7 TC LINUS # GO SET BITS FOR PRIORITY DISPLAY TC MPAC +2 # Page 475 RELINUS CAF PRIO26 # RESTORE ORIGINAL PRIORITY TC PRIOCHNG CAF TRACKBIT # DON'T CONTINUE R60 UNLESS TRACKFLAG ON. MASK FLAGWRD1 CCS A TCF RER60 CAF RNDVZBIT # IS IT P20? MASK FLAGWRD0 CCS A TC +4 # YES TC PHASCHNG # NO, MUST BE P25, SET 2.11 SPOT OCT 40112 TC ENDOFJOB TC PHASCHNG # SET 2.7 SPOT FOR P20 OCT 40072 TC ENDOFJOB RER60 TC UPFLAG # SET PRIO DISPLAY FLAG AFTER RESTART ADRES PDSPFLAG TC TBASE2 R61TEST CA MODREG # IF WE ARE IN P00 IT MUST BE V49 OR V89 EXTEND BZF ENDMANU1 # THUS WE GO TO ENDEXT VIA USER CA FLAGWRD4 # ARE WE IN R61 (P20 OR P25) MASK PDSPFBIT EXTEND BZF GOTOPOOH # NO TC GOTOV56 # YES BIT14+7 OCT 20100 OCT203 OCT 203 V06N18 VN 0618 # SUBROUTINE TO CHECK FOR G+N CONTROL, AUTO STABILIZATION # # RETURNS WITH C(A) = + IF NOT SET FOR G+N, AUTO # RETURNS WITH C(A) = +0 IF SWITCHES ARE SET G+N,AUTO EXTEND READ CHAN30 MASK BIT10 CCS A TC Q # NOT IN G+N C(A) = + # Page 476 ISITAUTO EXTEND # CHECK FOR AUTO MODE READ CHAN31 MASK BIT14 TC Q # (+) = NOT IN AUTO, (+0) = AOK # Page 477 # PROGRAM DESCRIPTION BALLANGS # MOD NO. LOG SECTION R60,R62 # # WRITTEN BY RAMA M. AIYAWAR # # FUNCTIONAL DESCRIPTION # # COMPUTES LM FDAI BALL DISPLAY ANGLES # # CALLING SEQUENCE # # TC BALLANGS # # NORMAL EXIT MODE # # TC BALLEXIT # (SAVED Q) # # ALARM OR EXIT MODE: NIL # # SUBROUTINES CALLED # # CD*TR*G # ARCTAN # # INPUT # # CPHI,CTHETA,CPSI ARE THE ANGLES CORRESPONDING TO AOG, AIG, AMG. THEY ARE # SP,2'S COMPLEMENT SCALED TO HALF REVOLUTION. # # OUTPUT # # FDAIX, FDAIY, FDAIZ ARE THE REQUIRED BALL ANGLES SCALED TO HALF REVOLUTION # SP,2'S COMPEMENT. # # THESE ANGLES WILL BE DISPLAYED AS DEGREES AND HUNDREDTHS, IN THE ORDER ROLL, PITCH, YAW, USING NOUNS 18 & 19. # # ERASABLE INITIALIZATION REQUIRED # # CPHI, CTHETA, CPSI EACH AN SP REGISTER # # DEBRIS # # A,L,Q,MPAC,SINCDU,COSCDU,PUSHLIST,BALLEXIT # # NOMENCLATURE: CPHI, CTHETA, & CPSI REPRESENT THE OUTER, INNER, AND MIDDLE GIMBAL ANGLES, RESPECTIVELY; OR # EQUIVALENTLY, CDUX, CDUY, AND CDUZ. # # NOTE: ARCTAN CHECKS FOR OVERFLOW AND SHOULD BE ABLE TO HANDLE ANY SINGULARITIES. SETLOC BAWLANGS BANK COUNT* $$/BALL BALLANGS TC MAKECADR TS BALLEXIT CA CPHI # Page 478 TS CDUSPOT +4 CA CTHETA TS CDUSPOT CA CPSI TS CDUSPOT +2 TC INTPRET SETPD CALL 0D CD*TR*G DLOAD DMP SINCDUX # SIN (OGA) COSCDUZ # COS (MGA) SL1 DCOMP # SCALE ARCSIN PDDL # YAW = ARCSIN(-SXCZ) INTO 0 PD SINCDUZ STODL SINTH # (SINTH = 18D IN PD) COSCDUZ DMP SL1 # RESCALE COSCDUX STCALL COSTH # (COSTH = 16D IN PD) ARCTAN PDDL DMP # ROLL = ARCTAN(SZ/CZCX) INTO 2 PD SINCDUZ SINCDUX SL2 PUSH # SXSZ INTO 4 PD DMP PDDL # SXSZCY INTO 4 PD COSCDUY DMP PDDL # SXSZSY INTO 6 PD SINCDUY COSCDUX DMP SL1 # CXCY COSCDUY DSU STADR # PULL UP FORM 6 PD STODL COSTH # COSTH = CXCY - SXSZSY SINCDUY DMP SL1 COSCDUX # CXSY DAD STADR # PULL UP FORM 4 PD STCALL SINTH # SINTH = CXSY + SXSZCY ARCTAN # RETURNS WITH D(MPAC) = PITCH PDDL VDEF # PITCH INTO 2 PD, ROLL INTO MPAC FROM 2 PD RTB # VDEF MAKES V(MPAC) = ROLL, PITCH, YAW V1STO2S STORE FDAIX # MODE IS TP EXIT ENDBALL CA BALLEXIT # Page 479 TC BANKJUMP # Page 480 # PROGRAM DESCRIPTION -- VECPOINT # # THIS INTERPRETIVE SUBROUTINE MAY BE USED TO POINT A SPACECRAFT AXIS IN A DESIRED DIRECTION. THE AXIS # TO BE POINTED MUST APPEAR AS A HALF UNIT DOUBLE PRECISION VECTOR IN SUCCESSIVE LOCATIONS OF ERASABLE MEMORY # BEGINNING WITH THE LOCATION CALLED SCAXIS. THE COMPONENTS OF THIS VECTOR ARE GIVEN IN SPACECRAFT COORDINATES. # THE DIRECTION IN WHICH THIS AXIS IS TO BE POINTED MUST APPEAR AS A HALF UNIT DOUBLE PRECISION VECTOR IN # SUCCESSIVE LOCATIONS OF ERASABLE MEMORY BEGINNING WITH THE ADDRESS CALLED POINTVSM. THE COMPONENTS OF THIS # VECTOR ARE GIVEN IN STABLE MEMBER COORDINATES. WITH THIS INFORMTION VECPOINT COMPUTES A SET OF THREE GIMBAL # ANGLES (2'S COMPLEMENT) CORRESPONDING TO THE CROSS-PRODUCT ROTATION BETWEEN SCAXIS AND POINTVSM AND STORES THEM # IN T(MPAC) BEFORE RETURNING TO THE CALLER. # # THIS ROTATION, HOWEVER, MAY BRING THE S/C INTO GIMBAL LOCK. WHEN POINTING A VECTOR IN THE Y-Z PLANE, # THE TRANSPONDER AXIS, OR THE AOT FOR THE LEM, THE PROGRAM WILL CORRECT THIS PROBLEM BY ROTATING THE CROSS- # PRODUCT ATTITUDE ABOUT POINTVSM BY A FIXED AMOUNT SUFFICIENT TO ROTATE THE DESIRED S/C ATTITUDE OUT OF GIMBAL # LOCK. IF THE AXIS TO BE POINTED IS MORE THAN 40.6 DEGREES BUT LESS THAN 60.5 DEG FROM THE +X (OR -X) AXIS, # THE ADDITIONAL ROTATION TO AVOID GIMBAL LOCK IS 35 DEGREES. IF THE AXIS IS MORE THAN 60.5 DEGREES FROM +X (OR -X) # THE ADDITIONAL ROTATION IS 35 DEGREES. THE GIMBAL ANGLES CORRESPONDING TO THIS ATTITUDE ARE THEN COMPUTED AND # STORED AS 2'S COMPLEMENT ANGLES IN T(MPAC) BEFORE RETURNING TO THE CALLER. # # WHEN POINTING THE X-AXIS, OR THE THRUST VECTOR, OR ANY VECTOR WITHIN 40.6 DEG OF THE X-AXIS, VECPOINT # CANNOT CORRECT FOR A CROSS-PRODUCT ROTATION INTO GIMBAL LOCK. IN THIS CASE A PLATFORM REALIGNMENT WOULD BE # REQUIRED TO POINT THE VECTOR IN THE DESIRED DIRECTION. AT PRESENT NO INDICATION IS GIVEN FOR THIS SITUATION # EXCEPT THAT THE FINAL MIDDLE GIMBAL ANGLE IN MPAC +2 IS GREATER THAN 59 DEGREES. # # CALLING SEQUENCE # # 1) LOAD SCAXIS, POINTVSM # 2) CALL # VECPOINT # # RETURNS WITH # # 1) DESIRED OUTER GIMBAL ANGLE IN MPAC # 2) DESIRED INNER GIMBAL ANGLE IN MPAC +1 # 3) DESIRED MIDDLE GIMBAL ANGLE IN MPAC +2 # # ERASABLES USED -- # # 1) SCAXIS 6 # 2) POINTVSM 6 # 3) MIS 18 # 4) DEL 18 # 5) COF 6 # 6) VECQTEMP 1 # 7) ALL OF VAC AREA 43 # # TOTAL 99 SETLOC VECPT BANK # Page 481 COUNT* $$/VECPT EBANK= BCDU VECPNT1 STQ BOV # THIS ENTRY USES DESIRED CDUS VECQTEMP # NOT PRESENT -- ENTER WITH CDUD'S IN MPAC VECPNT2 VECPNT2 AXC,2 GOTO MIS STORANG VECPOINT STQ BOV # SAVE RETURN ADDRESS VECQTEMP VECLEAR # AND CLEAR OVFIND VECLEAR AXC,2 RTB MIS # READ THE PRESENT CDU ANGLES AND READCDUK # STORE THEM IN PD25, 26, 27 STORANG STCALL 25D CDUTODCM # S/C AXES TO STABLE MEMBER AXES (MIS) VLOAD VXM POINTVSM # RESOLVE THE POINTING DIRECTION VF INTO MIS # INITIAL S/C AXES (VF = POINTVSM) UNIT STORE 28D # PD 28 29 30 31 32 33 VXV UNIT # TAKE THE CROSS PRODUCT VF X VI SCAXIS # WHERE VI = SCAXIS BOV VCOMP PICKAXIS STODL COF # CHECK MAGNITUDE 36D # OF CROSS PRODUCT DSU BMN # VECTOR, IF LESS DPB-14 # THAN B-14 ASSUME PICKAXIS # UNIT OPERATION VLOAD DOT # INVALID. SCAXIS 28D SL1 ARCCOS COMPMATX CALL # NOW COMPUTE THE TRANSFORMATION FROM DELCOMP # FINAL S/C AXES TO INITIAL S/C AXES MFI AXC,1 AXC,2 MIS # COMPUTE THE TRANSFORMATION FROM FINAL KEL # S/C AXES TO STABLE MEMBER AXES CALL # MFS = MIS MFI MXM3 # (IN PD LIST) DLOAD ABS 6 # MFS6 = SIN(CPSI) $2 DSU BMN SINGIMLC # = SIN(59 DEGS) $2 FINDGIMB # /CPSI/ LESS THAN 59 DEGS. # Page 482 # I.E., DESIRED ATTITUDE NOT IN GIMBAL LOCK DLOAD ABS # CHECK TO SEE IF WE ARE POINTING SCAXIS # THE THRUST AXIS DSU BPL SINVEC1 # SIN 49.4 DEGS $2 FINDGIMB # IF SO, WE ARE TRYING TO POINT IT INTO VLOAD # GIMBAL LOCK, ABORT COULD GO HERE STADR STOVL MIS +12D STADR # STORE MFS (IN PD LIST) IN MIS STOVL MIS +6 STADR STOVL MIS MIS +6 # INNER GIMBAL AXIS IN FINAL S/C AXES BPL VCOMP # LOCATE THE IG AXIS DIRECTION CLOSEST TO IGSAMEX # FINAL X S/C AXIS IGSAMEX VXV BMN # FIND THE SHORTEST WAY OF ROTATING THE SCAXIS # S/C OUT OF GIMBAL LOCK BY A ROTATION U=SCAXIS # ABOUT +- SCAXIS, I.E., IF (IG (SGN MFS3) # X SCAXIS . XF) LESS THAN 0, U = SCAXIS # OTHERWISE U = -SCAXIS. VLOAD VCOMP SCAXIS STCALL COF # ROTATE ABOUT -SCAXIS CHEKAXIS U=SCAXIS VLOAD SCAXIS STORE COF # ROTATE ABOUT + SCAXIS CHEKAXIS DLOAD ABS SCAXIS # SEE IF WE ARE POINTING THE AOT DSU BPL SINVEC2 # SIN 29.5 DEGS $2 PICKANG1 # IF SO, ROTATE 50 DEGS ABOUT +- SCAXIS DLOAD GOTO # IF NOT, MUST BE POINTING THE TRANSPONDER VECANG2 # OR SOME VECTOR IN THE Y, OR Z PLANE COMPMFSN # IN THIS CASE ROTATE 35 DEGS TO GET OUT # OF GIMBAL LOCK (VECANG2 $360) PICKANG1 DLOAD VECANG1 # = 50 DEGS. $360 COMPMFSN CALL DELCOMP # COMPUTE THE ROTATION ABOUT SCAXIS TO AXC,1 AXC,2 # BRING MFS OUT OF GIMBAL LOCK MIS KEL CALL # COMPUTE THE NEW TRANSFORMATION FROM MXM3 # DESIRED S/C AXES TO STABLE MEMBER AXES # WHICH WILL ALIGN VI WITH VF AND AVOID # Page 483 # GIMBAL LOCK FINDGIMB AXC,1 CALL 0 # EXTRACT THE COMMANDED CDU ANGLES FROM DCMTOCDU # THIS MATRIX RTB SETPD V1STO2S # CONVERT TO 2'S COMPLEMENT 0 GOTO VECQTEMP # RETURN TO CALLER PICKAXIS VLOAD DOT # IF VF X VI = 0, FIND VF, VI 28D SCAXIS BMN TLOAD ROT180 25D GOTO # IF VF = VI, CDU DESIRED = PRESENT CDU VECQTEMP # PRESENT CDU ANGLES BANK 35 SETLOC MANUVER1 BANK ROT180 VLOAD VXV # IF VF, VI ANTIPARALLEL, 180 DEG ROTATION MIS +6 # IS REQUIRED. Y STABLE MEMBER AXIS IN HIDPHALF # INITIAL S/C AXES. UNIT VXV # FIND Y(SM) X X(I) SCAXIS # FIND UNIT(VI X UNIT(Y(SM) X X(I))) UNIT BOV # I.E., PICK A VECTOR IN THE PLANE OF X(I), PICKX # Y(SM) PERPENDICULAR TO VI STODL COF 36D # CHECK MAGNITUDE DSU BMN # OF THIS VECTOR. DPB-14 # IF LESS THAN B-14, PICKX # PICK X-AXIS. VLOAD COF XROT STODL COF HIDPHALF GOTO COMPMATX PICKX VLOAD GOTO # PICK THE XAXIS IN THIS CASE HIDPHALF XROT SINGIMLC 2DEC .4285836003 # = SIN(59) $2 SINVEC1 2DEC .3796356537 # = SIN(49.4) $2 SINVEC2 2DEC .2462117800 # = SIN(29.5) $2 VECANG1 2DEC .1388888889 # = 50 DEGREES $360 # Page 484 VECANG2 2DEC .09722222222 # = 35 DEGREES $360 1BITDP OCT 0 # KEEP THIS BEFORE DPB(-14) ************ DPB-14 OCT 00001 OCT 00000 # Page 485 # ROUTINE FOR INITIATING AUTOMATIC MANEUVER VIA KEYBOARD (V49) BANK 34 SETLOC R62 BANK EBANK= BCDU COUNT* $$/R62 R62DISP EQUALS R62FLASH R62FLASH CAF V06N22 # FLASH V06N22 AND TC BANKCALL # ICDU ANGLES CADR GOFLASH TCF ENDEXT # TERMINATE TCF GOMOVE # PROCEED TCF R62FLASH # ENTER # ASTRONAUT MAY LOAD NEW ICDUS AT THIS # POINT. GOMOVE TC UPFLAG # SET FOR 3-AXIS MANEUVER ADRES 3AXISFLG TC BANKCALL CADR R60LEM TCF ENDEXT # END R62