がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

いにしえの遺産

アポロ11号で利用されたプログラムのソースコード、公開中
http://slashdot.jp/science/09/07/29/0221202.shtml


だ、そうで。
ぬあんと!!!
面白いものである。


http://googlecode.blogspot.com/2009/07/apollo-11-missions-40th-anniversary-one.html
から〜

# Copyright: Public domain.
# Filename: CM_BODY_ATTITUDE.s
# Purpose: Part of the source code for Comanche, build 055. It
# is part of the source code for the Command Module's
# (CM) Apollo Guidance Computer (AGC), Apollo 11.
# Assembler: yaYUL
# Reference: pp. 883-889
# Contact: Ron Burkey <info@sandroid.org>
# Website: http://www.ibiblio.org/apollo.
# Mod history: 2009-05-12 RSB Adapted from Colossus249 file of the same
# name and Comanche 055 page images.
#
# The contents of the "Comanche055" files, in general, are transcribed
# from scanned documents.
#
# Assemble revision 055 of AGC program Comanche by NASA
# 2021113-051. April 1, 1969.
#
# This AGC program shall also be referred to as Colossus 2A
#
# Prepared by
# Massachussets Institute of Technology
# 75 Cambridge Parkway
# Cambridge, Massachusetts
#
# under NASA contract NAS 9-4065.
#
# Refer directly to the online document mentioned above for further
# information. Please report any errors to info@sandroid.org.

# Page 883
BANK 35

SETLOC BODYATT
BANK

COUNT 37/CMBAT

# PDL 12D - 15D SAFE.

# VALUE OF GIMBAL AND BODY ANGLES VALID AT PIP TIME ARE SAVED DURING READACCS.

EBANK= RTINIT # LET INTERPRETER SET EB

CM/POSE TC INTPRET # COME HERE VIA AVEGEXIT.

SETPD VLOAD
0
VN # KVSCALE = (12800/ .3048) /2VS
VXSC PDVL
-KVSCALE # KVSCALE = .81491944
UNITW # FULL UNIT VECTOR
VXV VXSC # VREL = V - WE*R
UNITR
KWE
VAD STADR
STORE -VREL # SAVE FOR ENTRY GUIDANCE. REF COORDS

UNIT LXA,1
36D # ABVAL( -VREL) TO X1
STORE UXA/2 # -UVREL REF COORDS

VXV VCOMP
UNITR # .5 UNIT REF COORDS
UNIT SSP # THE FOLLOWING IS TO PROVIDE A STABLE
S1 # UN FOR THE END OF THE TERMINAL PHASE.
SPVQUIT DEC .019405 # 1000/ 2 VS
TIX,1 VLOAD # IF V-VQUIT POS, BRANCH.
CM/POSE2 # SAME UYA IN OLDUYA
OLDUYA # OTHERWISE CONTINUE TO USE OLDUYA
CM/POSE2 STORE UYA/2 # REF COORDS

STORE OLDUYA # RESTORE, OR SAVE AS CASE MAY BE.

VXV VCOMP
UXA/2 # FINISH OBTAINING TRAJECTORY TRIAD.
VSL1
STORE UZA/2 # REF COORDS
# Page 884
TLOAD # PICK UP CDUX, CDUY, CDUZ CORRESPONDING
AOG/PIP # TO PIPUP TIME IN 2'S C AND SAVE.
CM/TRIO STODL 24D
25D # AIG/PIP

RTB PUSH # TO PDL0
CDULOGIC
COS
STODL UBX/2 # CI /2
# AIG/PIP FROM PDL 0
SIN DCOMP
STODL UBX/2 +4 # -SI /2
26D # AMG/PIP
RTB PUSH # TO PDL 0
CDULOGIC
SIN PDDL # XCH PDL 0. SAVE SM /2
COS PDDL # CM /2 TO PDL 2
0 # SM /2
DCOMP VXSC
UBX/2
VSL1 # NOISE WON'T OVFL
STODL UBY/2 # =(-SMCI, NOISE, SMSI)/2
2 # CM /2 REPLACES NOISE
STODL UBY/2 +2 # UBY/2=(-SMCI, CM, SMSI)/2
24D # AOG/PIP
RTB PUSH # TO PDL 4
CDULOGIC
SIN PDDL # XCH PDL 4. SAVE SO /2
COS VXSC # CO /2
UBY/2
STODL UBY/2 # UBY/2=(-COSMCI, COCM, COSMSI)/4
4D # SO /2
DMP DCOMP
UBX/2 +4 # -SI /2
DAD
UBY/2 # INCREMENT BY (SOSI /4)
STODL UBY/2
# SO /2 FROM PDL 4
DMP DAD
UBX/2 # CI /2
UBY/2 +4
STOVL UBY/2 +4 # YB/4 PLATFORM COORDS

# YB = (-COSMCI + SOSI , COCM , COSMSI + SOCI )

UBY/2
VXM VSL2
REFSMMAT # .5 UNIT
STODL UBY/2 # YB/2 DONE REF COORDS
# Page 885
# CM /2 FROM PDL 2
VXSC VSL1
UBX/2
STODL UBX/2 # =( CMCI, NOISE, -CMSI)/2
STADR # SM /2 FROM PDL 0
STOVL UBX/2 +2 # SM /2 REPLACES NOISE
UBX/2 # XB/2 PLATFORM COORDS

# XB = ( CMCI , SM , -CMSI )

VXM VSL1
REFSMMAT # .5 UNIT
STORE UBX/2 # XB/2 DONE REF COORDS

VXV VSL1
UBY/2
STOVL UBZ/2 # ZB/2 DONE REF COORDS

# EQUIVALENT TO
# ZB = ( SOSMCI + COSI , -SOCM , -SOSMSI + COCI )

UXA/2 # -UVREL/2 = -UVA/2
VXV UNIT # GET UNIT(-UVREL*UBY)/2 = UL/2
UBY/2 # YB/2
PUSH DOT # UL/2 TO PDL 0,5
UZA/2 # UNA/2
STOVL COSTH # COS(ROLL)/4
0 # UL/2

DOT
UYA/2
STCALL SINTH # -SIN(ROLL)/4
ARCTRIG
STOVL 6D # -(ROLL/180) /2
UBY/2
DOT SL1 # -UVA.UBY = -SIN(BETA)
UXA/2 # -UVREL/2
ARCSIN
STOVL 7D # -(BETA/180) /2
UBX/2 # XB/2
DOT # UL.UBX = -SIN(ALFA)
0 # UL/2
STOVL SINTH # -SIN(ALFA)/4
DOT # UL/2 FROM PDL 0
UBZ/2
STCALL COSTH # COS(ALFA)/2
ARCTRIG
STOVL 8D # -(ALFA/180) /2
UNITR # UR/2 REF COORDS
DOT SL1
# Page 886
UZA/2 # MORE ACCURATE AT LARGE ARG.
ARCCOS
STORE 10D # (-GAMA/180)/2

TLOAD EXIT # ANGLES IN MPAC IN THE ORDER
# -( (ROLL, BETA, ALFA) /180)/2
6D # THESE VALUES CORRECT AT PIPUP TIME.

# Page 887
# BASIC SUBROUTINE TO UPDATE ATTITUDE ANGLES

EBANK= AOG

CM/ATUP CA EBAOG
TS EBANK
CMTR1 INDEX FIXLOC
CS 10D # (GAMA/180)/2
XCH GAMA
TS L

INHINT
# MUST REMAIN INHINTED UNTIL UPDATE OF BODY
# ANGLES, SO THAT GAMDIFSW IS VALID FIRST PASS
# INDICATOR.

CS CM/FLAGS
MASK BIT11 # GAMDIFSW=94D BIT11 INITLY=0
EXTEND # DON'T CALC GAMA DOT UNTIL HAVE FORMD
# ONE DIFFERENCE.
BZF DOGAMDOT # IS OK, GO ON.
ADS CM/FLAGS # KNOW BIT IS 0
TC NOGAMDOT # SET GAMDOT = 0

DOGAMDOT CS L
AD GAMA # DEL GAMA/360= T GAMDOT/360
EXTEND
MP TCDU # TCDU = .1 SEC, T = 2 SEC.
TS GAMDOT # GAMA DOT TCDU / 180

EXTEND # IGNORE GAMDOT IF LEQ .5 DEG/SEC
BZMF +2
COM
AD FIVE
EXTEND
BZMF +3 # SET GAMDOT=+0 AS TAG IF TOO SMALL.

NOGAMDOT CA ZERO # COME HERE INHINTED
TS GAMDOT
# FOR NOW LEAVE IN 2'S C
# UPDATE ANGLES BY CORRECTING EULER ANG
# FOR ACCRUED INCREMENT SINCE PIPUP
# R = R EUIL + R(NOW) - R(PIPUP)
CS MPAC # GET (R EUL/180) /2
DOUBLE # POSSIBLE OVERFLOW
TC CORANGOV # CORRECT FOR OVFL IF ANY
EXTEND
SU ROLL/PIP # GET INCR SINCE PIPUP
AD ROLL/180 # ONLY SINGLE OVFL POSSIBLE.
TC CORANGOV # CORRECT FOR OVFL IF ANY
# Page 888
TS TEMPROLL

CS MPAC +2 # GET (ALFA EUL/180) /2
DOUBLE # SAME AS FOR ROLL. NEEDED FOR EXT ATM DAP
TC CORANGOV # CORRECT FOR OVFL IF ANY
EXTEND
SU ALFA/PIP
AD ALFA/180
TC CORANGOV # CORRECT FOR OVFL IF ANY
TS TEMPALFA

CS MPAC +1 # GET (BETA EUL/180) /2
CMTR2 DOUBLE
EXTEND
SU BETA/PIP
AD BETA/180
XCH TEMPBETA # OVFL NOT EXPECTED.

CA EBANK3
TS EBANK

EBANK= PHSNAME5
EXTEND
DCA REPOSADR # THIS ASSUMES THAT THE TC PHASCHNG
DXCH PHSNAME5 # IS NOT CHANGED IN OCT 10035
# SERVICER.

CA EBAOG
TS EBANK

EBANK= AOG
REDOPOSE EXTEND # RE-STARTS COME HERE
DCA TEMPROLL
DXCH ROLL/180
CA TEMPBETA
TS BETA/180

RELINT

TC INTPRET # CAN'T TC DANZIG AFTER PHASCHNG.
CM/POSE3 VLOAD ABVAL # RETURN FROM CM/ATUP. (RESTART)
VN # 2(-7) M/CS
STORE VMAGI # FOR DISPLAY ON CALL.

GOTO
POSEXIT # ENDEXIT, STARTENT, OR SCALEPOP.

CORANGOV TS L
TC Q
INDEX A
# Page 889
CA LIMITS
ADS L
TC Q # COSTS 2 MCT TO USE. SEE ANGOVCOR.

-KVSCALE 2DEC -.81491944 # -12800/(2 VS .3048)


TCDU DEC .1 # TCDU = .1 SEC.

EBANK= AOG
REPOSADR 2CADR REDOPOSE
# Copyright: Public domain.
# Filename: LUNAR_LANDING_GUIDANCE_EQUATIONS.s
# 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 <hgutsche@xplornet.com>.
# 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 COORDINTES:
# ___ * _ ____
# 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 # SHAPSHOT 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 ACCELARATION.
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 NETON'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 MULTIPLYINE 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 COREECT
# 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 EVALUTATING 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
# **************************************************************************
# **************************************************************************
# Copyright: Public domain.
# Filename: FP8.s
# Purpose: This is the Apollo lunar module's firmware for the
# Abort Guidance System (AGS). This is Flight Program 8.
# Assembler: yaLEMAP
# Contact: Ron Burkey <info@sandroid.org>.
# Website: www.ibiblio.org/apollo/yaAGS.html
# Reference: http://www.ibiblio.org/apollo/Pultorak_files/FP8Listing.pdf.
# Mod history: 2005-01-15 RSB Began.
# 2005-01-17 RSB Data entry complete, but not debugged.
# 2005-01-18 RSB As of yesterday, this assembled with
# 86 fatal errors. These have all been
# repaired. Lots of other stuff fixed too.
# I know know that the addresses and
# opcodes at the ends of each page are
# correct. However, the checksums are
# still wrong, so the next step is to
# proceed with a binary comparison.
# 2005-01-18 RSB Fully debugged and ready to go.
# It has been completely proofed against
# the binary in the scanned assembly
# listing, and the checksums are correct.
# (Of course, it could always use more
# proofing if somebody wanted to do it.
# Particularly the program comments.)
# 2005-05-14 RSB Corrected website reference above.
# 2005-06-12 RSB Fixed comments on p. 117.
#
# The contents have been taken (by means of manual data entry) from
# an assembly listing of Flight Program 8 scanned by John Pultorak from
# a physical copy preserved by supplied by Davis Peticolas. (The WWW link
# for the scan is referenced above.)
#
# This file contains the entire source code for FP8. I have not split the
# source code into many smaller chunks as has been done for AGC source code.
# The page references are to the scanned PDF of the assembly listing, but
# the page markings on the physical copy match the PDF pages. In addition
# to the comments containing the page references, I've also added some
# blank lines for readability. So don't expect the line number in the
# scanned version to match the line numbers in an assembly listing created
# by processing this source file with the yaLEMAP cross-assembler.

# Page 1
# FLIGHT PROGRAM 8 -- LM AGS FP8 S03 4039 -- 12/18/70
# LM ABORT ELECTRONICS ASSEMBLY
#
# SCRATCH PAD STORAGE
ORG 0000
TS0 DEC 0
TS1 DEC 0
TS2 DEC 0
TS3 DEC 0
TS4 DEC 0
TS5 DEC 0
TS6 DEC 0
TS7 DEC 0
TS10 DEC 0
TS11 DEC 0
TS12 DEC 0
TS13 DEC 0
TS14 DEC 0
TS15 DEC 0
TS16 DEC 0
TS17 DEC 0
SREX3 DEC 0
SREX2 DEC 0
SREX1 DEC 0
SREX DEC 0
TVARBR DEC 0 # TEMP STORE FOR CK SUM.
TRA RETURN # SERV ROUT, STARTUP
#
# TAPE LOAD STARTUP CHECKSUM
#
SF OUT 6402 # DEDA INPUT SCALE FACTOR
OCTF INP 2040 # DEDA OCTAL INPUT
#
# THE NEXT 16 LOCATIONS ARE SHARED
# WITH A RR FILTER TEMPORARY MATRIX
#
U2X ALS 1 # B1 UNIT RADIAL VECTOR TO
U2Y TMI *+2 # B1 TRIAL RENDEZ PT.
U2Z TRA *-3 # B1

# Page 2
D11 EQU U2X # RADAR TEMP. MATRIX (16 LOC)
VFX EQU U2X # BRAKING VEL VECTOR AT 13.
C2 DLY *+1 # B1 RENDEZ ANGLE SINE
V1X OUT 7012 # B1 HORIZ UNIT VECTOR
V1Y INP 6200
V1Z CLZ SUM
DLSC CLA V2Z # DOWNLINK SHIFT COUNTER
W1X STO TVARBR # B1 U1 X V1
D31 EQU W1X
W1Y CLZ WRDCNT
W1Z TSQ TVARBR
SI ADZ SUM # B0 E(SIN(E0))
RD2DOT STO SUM # B7 DESIRED RADIAL ACCEL
YD2DOT CLA TVARBR # B7 DESIRED OUT-OF-PLANE ACCEL
TSEX SUB CLAFR # EXIT FROM NORTON
SIDELL TMI U1X # B1 SIN DELTA L
V6X CLZ SUM # B13 TEMP STORAGE FOR TPI QUANT
V6Y TMI *+3
V6Z SUB 1B17
DQSX EQU V6X # ACCUM VEL IN XDV
CODELL TMI EXIT40 # B1 COS DELTA L
WCX CLA 10B4 # B1 UNIT VECTOR NORMAL
WCY STO S12 # TO CSM ORBIT
WCZ OUT 6410
TMPBR TRA SINITC # TEMP BRANCH STORE
U1X CLZ WRDCNT # B1 LEM UNIT RAD VECTGOR
U1Y ADD 1B17
U1Z STO WRDCNT
BRANCH SUB 1B11 # GUIDANCE BRANCH
V2X TMI W1Z # B1 HORZ UNIT VECTOR AT
V2Y DLY W1Y # RENDEZ POINT
V2Z CLA 0206
VGX EQU V2X # VEL TO GAIN VECTOR AT L3
#
# END OF TAPE LOAD CHECKSUM PROGRAM
#
AT DEC 0B7

# Page 3
EX DEC 0B2 # ATTITUDE ERRORS.
EY DEC 0
EZ DEC 0
X3 DEC 0B0 # XFR ORB PARAM.
TR3 EQU X3 # ADDRESS OF RESULT FOR MXM
DVXM1 DEC 0B1 # BODY DELTA VS
DVYM1 DEC 0 # PREVIOUS CYCLE.
DVZM1 DEC 0
NI DEC 0B-9 # PREDICTION ANGULAR FREQUENCY
NE EQU NI # CSM PRED. ANGULAR FREQ.
TR8 EQU NI # RADAR TEMP.
VD2X DEC 0B2 # DELTA V EXP LS
VD2Y DEC 0
VD2Z DEC 0
CI DEC 0B0 # E(COS(E0))
TR1 EQU CI # ADDR. OF 1ST MATRIX FOR MXM
DRX DEC 0B14 # LRM POS REMAINDERS
DRY DEC 0
DRZ DEC 0
THEP DEC 0 # PGNS THETA IN COUNTS.
DIGX DEC 0B7 # PREDICTED CHANGE IN
DIGY DEC 0 # INTEGRATED GRAVITY.
DIGZ DEC 0
PSIP DEC 0 # PGNS PSI IN COUNTS.
GXDT DEC 0B7 # GRAVITY TIMES MAJOR
GYDT DEC 0
GZDT DEC 0
PHIP DEC 0 # PGNS PHI IN COUNTS.
DVSX DEC 0
DVSY DEC 0
DVSZ DEC 0
SIGA DEC 0B1 # SIN FDAI GAMMA.
RRX DEC 0B23 # COMPUTED LM-CSM RANGE
RRY DEC 0
RRZ DEC 0
COGA DEC 0B1 # COS FDAI GAMMA.
A11 DEC 1.0B1 # XB DIRECTION COSINES.

# Page 4
A12 DEC 0
A13 DEC 0
TS8 DEC 0
A31 DEC 0 # ZB DIRECTION COSINES
A32 DEC 0
A33 DEC 1.0B1
SUM DEC 0 # RUNNING MEMORY SUM
A21 DEC 0 # YB DIRECTION COSINES
A22 DEC 1.0B1
A23 DEC 0
X4 DEC 0B0 # XFR ORB PARAM.
VHSQ EQU X4 # 0B26 VH SQUARED
TR2 EQU X4 # ADDR. OF 2ND MATRIX FOR MXM
E1 DEC 0 # -6 OR -9 XB NORM ERROR
E3 DEC 0 # ZB NORMALITY ERROR.
E13 DEC 0 # XB,ZB ORTHOG ERROR.
DEL10 DEC 0 # TPI LOGIC FLAG
DA11 DEC 0B-5 # DIR COSINE REMAINDERS
DA12 DEC 0
DA13 DEC 0
WRDCNT DEC 0 # CKSUM WORD COUNT
DA31 DEC 0
DA32 DEC 0
DA33 DEC 0
DEL44 DEC 0 # RADAR CODE WORD RESET FLAG
A11D DEC 0B1 # XD DIRECTION COSINES.
A12D DEC 0
A13D DEC 0
DEC 0 # ** UNUSED -- INDEXED BY A11D **
A31D DEC 0B1 # ZD DIRECTION COSINES.
A32D DEC 0
A33D DEC 0
MU17 DEC 0B3 # RADAR FILTER ENTRY COUNTER
P DEC 0B23 # TRIAL SEMI-PARAMETER
ALPHA DEC 0B23 # XFR ORBIT SEMI-MAJOR AXIS
Q1 DEC 0B23 # XFR ORBIT PERILUNE
ESQ EQU Q1

# Page 5
AI DEC 0B23 # PRED. SEMI-MAJOR AXIS
AE EQU AI # CSM PRED. SEMI-MAJOR AXIS
R5X DEC 0B23 # LM PRED POS AHEAD TDEL
R5Y DEC 0
R5Z DEC 0
AL DEC 0B23 # LM PRED. SEMI-MAJOR AXIS
REX DEC 0B23 # CSM EPOCH POSITION
REY DEC 0
REZ DEC 0
RT DEC 0B23 # CSM PRED POS. MAG.
R0X DEC 0B23 # PRED EPOCH POS VECTOR
R0Y DEC 0
# SEE REAR OF LISTING FOR CHECKSUM
# Note that the CHECKSUM pseudo-op is not defined in the AGS
# programmer's manual. I have decided for the purposes of
# implementing yaLEMAT that the following syntax will be
# used. It means that the cross-assembler will compute a
# checksum of the address range 0207-1004 (octal), and will
# store it right here.
CHECKSUM RANGE 0207-1004
R0Z DEFINE 0206
R0 DEC 0B23 # PRED EPOCH POS. MAG.
C11 EQU P # RADAR TEMP. MATRIX
C12 EQU ALPHA
C13 EQU Q1
C14 EQU AI
C21 EQU R5X
C22 EQU R5Y
C23 EQU R5Z
C24 EQU AL
C31 EQU REX
C32 EQU REY
C33 EQU REZ
C34 EQU RT
C41 EQU R0X
C42 EQU R0Y
C43 EQU R0Z
C44 EQU R0
R DEC 0B23 # LM POS MAGNITUDE
Y DEC 0B23 # OUT OF PLANE POSITION
PP DEC 0B23 # P PRIME/EXIT FOR MXM
POUTFS DEC 7.684096E4B23 # MAX P DISPLAYABLE
POUT DEC 0 # DISPLAY POSITION.


# Page 6
DPOUT DEC 0 # DISPLAY POSITION INCREMENT.
2K3 DEC 1048576.B23 # QL SET ON O.F.
2K14 DEC 5.E4B23 # INITIAL P PERTURBATION
RIX DEC 0B23 # ELLIPSE PRED POS OUTPUT
RIY DEC 0
RIZ DEC 0
DELR1 EQU RIX # MEASURED MINUS COMPUTED RANGE
DELR3 EQU RIY # B23
DELR2 EQU RIZ
25J DEC 0B23 # DEDA ALTITUDE UPDATE
7J DEC 6042736B23 # TERM IN AL(O.I.)
8J DEC 2940243B23 # TERM IN AL(O.I) LOWER LIMIT
10J DEC 6046910B23 # RETARGET VALUE FOR 7J
4K5 DEC 5735200B23 # NOMINAL BURNOUT ALTITUDE
2K19 DEC 5.E5B23 # DELTA P LIMITER
5J DEC 5.697785E6B23 # LANDING SITE RADIUS
16J DEC 60000B23 # ORBIT INSERTION ALTITUDE
21J DEC 25000B23 # PITCH STEERING ALT THRESHOLD
RRSX DEC 0B23 # CALCULATED RANGE AT TIME
RRSY DEC 0 # OF RADAR RANGE MEASUREMENT.
RRSZ DEC 0
6K11 DEC 0.318310B0 # 1/PI
#
# INITIALIZE DATA FROM DOWNLINK ADDRESSES
# LOCATIONS 0240-0257 USED
1J1 DEC 0B23 # LM EPHEMERIS POS
1J2 DEC 0
1J3 DEC 0
DEC 0
2J1 DEC 0 # CSM EPHEMERIS POS
2J2 DEC 0
2J3 DEC 0
DEC 0
DEC 0
DEC 0
DEC 0
DEC 0

# Page 7
1J7 DEC 0B18 # LM EPOCH TIME
1J7LS DEC 0B1
DEC 0
DEC 0
THETAR EQU 2J3+4 # RADAR ANTENNA TRUNNION ANGLE
BETAR EQU 2J3+5 # RADAR ANTENNA SHAFT ANGLE
RM EQU 1J7 # RADAR RAW RANGE INPUT
RMDOT EQU 1J7+1 # RADAR RANGE RATE INPUT
DEL46 EQU 1J7+2 # RADAR COMPOSITE WORD
1J4 DEC 0B13 # LM EPHEMERIS VEL
1J5 DEC 0
1J6 DEC 0
VPY DEC 0B13 # OUT-OF-PLANE VELOCITY
2J4 DEC 0 # CSM EPHEMERIS VEL
2J5 DEC 0
2J6 DEC 0
5K18 DEC -.1B-2 # RD3DOT LOWER LIMIT
VY0 DEC 0B13 # LM OUT-OF-PLANE VEL
VY0FS DEC 200B13 # MAX VY0 DISPLAYABLE
2J7 DEC 0 # CSM EPOCH TIME
2J7LS DEC 0
7K1 DEC 30B18 # TIG TIME BIAS
1J DEC 0B18 # NOMINAL TPI TIME (CSI)
6K5 DEC -.73B0 # Y-POSITION FILTER WEIGHT
XI DEC 0B3 # Z-AXIS/LOCAL HORIZ ANGLE
A31BD DEC 0B1 # UNIT VECTOR (LM-CSM)
A32BD DEC 0
A33BD DEC 0
TLOS DEC 0B3 # DXFR LOS COMPUTED
THETAF EQU TLOS # LM-CSM CENTRAL ANG AT CSI/CDH
3K4 DEC .17365B1 # CENTRAL ANGLE LIMIT ON TPI
12J DEC -.299904B3 # PHASE ANGLE LIMIT FOR RETARGET
4J DEC 0B13 # TIME OF NODE PRIOR TO RENDEZ
6J DEC 2580.0B13 # DESIRED TRANSFER TIME
TDEL DEC 0B13 # TIME TIL NEXT MANEUVER
TR DEC 0B13 # TIME TIL RENDEZVOUS
3J DEC 0B13 # TARGET OFFSET TIME

# Page 8
6K12 DEC 9.38B4 # RAW RADAR AT 18 TO FT. AT 22
DELRP DEC 0B23 # DIFF. ALT. AT TIG(CSI-CDH)
QA DEC 0B23 # LM APOFOCUS ALTITUDE
18J DEC 0B22 # MEASURED RADAR RANGE
RR DEC 0B22 # COMPUTED RANGE
READP DEC 0
ENTERP DEC 0
HOLDP DEC 0
CLEARP DEC 0
HMF DEC 0
# START OF TELEMETRY LIST
RMF DEC 0 # READOUT MODE FLAG
DD DEC 0 # DEDA DATA
CMF DEC 0 # CLEAR MODE FLAG
A11T DEC 1.B1 # TM DIR COSINES
A12T DEC 0
A13T DEC 0
ADST DEC 0 # DEDA ADDRESS
A31T DEC 0
A32T DEC 0
A33T DEC 1.B1
H DEC 0B23 # ALTITUDE
RX DEC 0B23 # LM POSITION
RY DEC 0
RZ DEC 0
QL DEC 0B23 # PRESENT LM PERICYNTHION
EONS10 EQU QL # ENG ON+S10 FOR TM
RCX DEC 0B23 # CSM PRESENT POSITION
RCY DEC 0
RCZ DEC 0
RF DEC 0B23 # PREDICTED BURNOUT ALT.
DVX DEC 0B1 # BODY DELTA VS
DVY DEC 0 # THIS CYCLE.
DVZ DEC 0
TA2 DEC 0B1 # ABS TIME LS.
DAX DEC 0B-6 # DELTA ALPHAS
DAY DEC 0

# Page 9
DAZ DEC 0
TBO DEC 0B9 # TIME TO BURNOUT.
VX DEC 0B13 # LM VELOCITY
VY DEC 0
VZ DEC 0
MU8S12 DEC 0 # MU8/S12
VCX DEC 0B13 # CSM PRESENT VELOCITY
VCY DEC 0
VCZ DEC 0
HDOT DEC 0B13 # ALTITUDE RATE
VG DEC 0B13 # VELOCITY TO GAIN
VF DEC 0B13 # TRANSFER BRAKING VELOCITY
TA0 DEC 0B18 # TIME FROM CSI TO CDH
TIG DEC 0B18 # ABSOLUTE TIME OF MANEUVER
A11BD DEC 0B1 # CMD XB POINTING DIR
A12BD DEC 0
A13BD DEC 0
TA1 DEC 0B18 # ABS TIME MS.
S0 DEC 0 # AGS FUNCTION SELECTOR
DISC1C DEC 0 # DISCRETE WD 1-TRUE STATE
Q1DEDA DEC 8388500B23 # TRANS ORBIT PERICYN ALT
DELH EQU Q1DEDA # DIFF. ALT. AFTER CDH(CSI-CDH)
QLTELE DEC 0B23 # QL FOR TELE AND DEDA
VD1X DEC 0B13 # 40MS VEL ACCUMULATION
VD1Y DEC 0
VD1Z DEC 0
# END OF TELEMETRY LIST
DEL6 DEC 0 # CALIBRATE I.C. FLAG
S10 DEC 0 # GUIDANCE MODE SELECTOR
S11 DEC 0 # AUTO RADAR SWITCH
S12 DEC 0 # TEST STATUS
S13 DEC 0 # STORE LUNAR AZIMUTH
S14 DEC 0 # NAVIGATION INITIALIZE
S15 DEC 0 # RADAR GIMBAL NULL
RDOTS EQU S15 # R. R. STORED AT RADAR INPUT
S16 DEC 0 # CDH APSIDAL SELECTION
S17 DEC 0 # RADAR FILTER INIT. SWITCH

# Page 10
VEX DEC 0B13 # CSM EPOCH VEL
VEY DEC 0
VEZ DEC 0
RFDOT DEC 0B13 # DESIRED ALT RATE
V0X DEC 0B13 # PRED EPOCH VEL VECTOR
V0Y DEC 0
V0Z DEC 0
I EQU V0X # MXM INDEX
J EQU V0Y # MXM INDEX
K EQU V0Z # MXM INDEX
VH DEC 0B13 # LM HORIZONTAL VEL
# VIX,VIY,VIZ ARE SHARED WITH RR FILTER
VIX DEC 0B13 # ELLIPSE PRED VEL OUTPUT
VIY DEC 0
VIZ DEC 0
V DEC 0B13 # LM TOTAL VELOCITY
TP DEC 0B13 # TRIAL XFR ORB. TIME.
T DEC 0B13 # TIME TO RENDEZ.
RB EQU T # RF SAVED FOR ORBIT INSERT.
TB DEC 0B13 # TA-TE.
PDOTM1 DEC 0B13 # DISPLAY POS RATE(-1)
RRDOT DEC 0B13 # RANGE RATE
1000D DEC 1000B17 # RANGE MARK COUNTER INCREMENT
TI DEC 0B13 # PREDICTION TIME/RR FILTER TEMP
DPDOUT DEC 0B13 # DISPLAY POS RATE INCREMENT
PDOUT DEC 0B13 # DSP POS RATE CONV TO FPS AT 13
TCSM DEC 0B13 # CSM PERIOD (SEC)
4K25 DEC 3.402B13 # ENG CUTOFF COMP
2K18 DEC 15.B13 # PARTIAL DERIV PROTECTOR.
28J1 DEC 0B13 # DELTA V DOWNRANGE
28J2 DEC 0B13 # DELTA V CROSSRANGE
28J3 DEC 0B13 # DELTA V RADIAL
2K20 DEC 2.B13 # CONVERGENCE CHECK.
4K26 DEC 70.0B13 # VG THRESHOLD
DDF DEC 0 # DEDA DATA RECEIVED FLAG
6K4 DEC .1E3B10 # INITIAL VALUE OF P33 AND P44
6K2 DEC .1E9B30 # INIT VALUE OF P11,P22

# Page 11
V5X DEC 0B13 # TPI-PREDICTED V AT TPI TIME
V5Y DEC 0
V5Z DEC 0
TR4 EQU V5X # NO. OF COL IN MATRIX A
TR6 EQU V5Y # NO. OF ROWS IN MATRIX B
TR5 EQU V5Z # NO. OF ROWS IN MATRIX A
VHA DEC 0B13
22J DEC 50B13 # PITCH STEERING ALT RATE THRESH
23J DEC 19.5B13 # RFDOT LOWER LIMIT
5K26 DEC 15B13 # PSEUDO ATT HOLD IN STEER
PART DEC 0B14 # PARTIAL DERIVATIVE
VDX DEC 0B13 # VD1 AT NAV UPDATE
VDY DEC 0
VDZ DEC 0
4K27 DEC -8000.0B13 # OVERFLOW PROTECTION FOR VD1X
VSMGX DEC 0B13 # VD1 CUTOFF
VSMGY DEC 0
VSMGZ DEC 0
RADOT DEC 0B13 # PRED. RDOT AT TIG
DELVGX DEC 0B13 # THRUST VEL TO GAIN
DELVGY DEC 0
DELVGZ DEC 0
17J DEC 0B13 # RANGE RATE INPUT
RD3DOT DEC 0B-2 # DESIRED RADIAL JERK
YD3DOT DEC 0B-2 # DESIRED OUT-OF-PLANE JERK
4K12 DEC 5B7 # ACCEL THRESH IN O.I. STEER
S507 DEC 0B3 # ACQ STEER SEL OF PT DIR
DAXREM DEC 0B-13 # INCRE. GYRO INPUT REMAINDERS
DAYREM DEC 0
DAZREM DEC 0
C1 DEC 0B1 # RENDEZ ANGLE COSINE.
WBX DEC 0B1 # UNIT VECTOR FOR
WBY DEC 0 # GUIDANCE STEERING
WBZ DEC 0
6K14 DEC -15768B14 # RADAR RANGE RATE NULL
TE1 DEC 0B18 # CSM EPOCH TIME MS.
TL1 DEC 0B18 # LEM EPOCH TIME MS.


# Page 12
6K6 DEC -.001B-8 # Y-VELOCITY FILTER WEIGHT
5K20 DEC 0B-2 # RD3DOT LOWER LIMIT
TE2 DEC 0 # CSM EPOCH TIME LS.
TL2 DEC 0 # LEM EPOCH TIME LS.
2K11 DEC 6000B13 # VF IF OVERFLOW
4K6 DEC 80.B13 # RFDOT UPPER LIMIT
DAXA DEC 0B-6 # ALIGN INCREMENTS
DAYA DEC 0
DAZA DEC 0
DISC1 DEC 0 # DISCRETE WORD
1K18 DEC .003125B-8 # ACCEL SCALE FACTOR
1K20 DEC .003125B-8
1K22 DEC .003125B-8
1K14 DEC 0B-14 # X-AXIS MASS UNBAL COMP
1K19 DEC 0B1 # ACCEL BIAS
1K21 DEC 0B1 # COMPENSATION
1K23 DEC 0B1
DSPSC DEC 0 # DISPLAY SHIFT COUNTER
1K1 DEC 0B-13 # GYRO BIAS
1K6 DEC 0 # COMPENSATIONS
1K11 DEC 0
DDEL DEC 0B0 # LUNAR ALIGN CORRECTION
1K3 DEC 0B-7 # GYRO SCALE FACTOR
1K8 DEC 0 # COMPENSATIONS
1K13 DEC 0
HRF DEC 0 # HIGH RATE FLAG
A31S DEC 0B1 # RADAR NULL DIR COS
A32S DEC 0
A33S DEC 0
4K4 DEC .004B-7 # FACTOR IN RFDOT(OI)
5K14 DEC 0B-2 # RD3DOT UPPER LIMIT
5K16 DEC .01B-2 # YD3DOT UPPER LIMIT
DLWN DEC 0 # DOWNLINK WORD COUNTER
DEL32 DEC 0 # DOWNLINK INITIALIZE FLAG
6K8 DEC .22B10 # RANGE RATE ERROR VARIANCE
# (ADDR OF 6K8 MUST END IN 4)
6K9 DEC .3029E-4B-4 # VARIANCE OF RADAR ANGULAR ERROR

# Page 13
6K10 DEC .625E7B28 # RANGE ERROR VARIANCE
DSPF1 DEC 0 # DISPLAY FLAG1.
ID1F DEC 0 # DOWNLINK ID RECEIVED
DEL31 DEC 0 # DOWNLINK INPUT COMPLETE
FLAGT DEC 0 # MEMORY TEST
FLAG1 DEC 0 # 20MS BRANCH CONTROL
DEL2 OCT 0 # STAGED FLAG.
DEL5 OCT 0 # ATTHLD LOCK FLAG.
PI DEC 3.14159266B3
6K13 DEC -1.59286B1 # RADAR RANGE RATE TO FPS AT 13
DVGXX DEC 0B13 # VEL TO GAIN IN EXT DELTA V
DVGXY DEC 0
DVGXZ DEC 0
DEL20 DEC 0 # LOGIC FLAG FOR ENG CONTROL
DEL21 OCT 0 # LUNAR SURFACE FLAG.
2J DEC 1.9970B7 # COTAN OF DESIRED LOS AT TPI
DEL42 OCT 0 # LUNAR ALINE COMPLETE FLAG
DEL45 EQU DEL42 # RR RANGE/RANGE RT. UPDATE FLAG
K55 OCT 377777 # S.F. FOR HDOT DISPLAY
MU3 DEC 0 # P-ITER COUNTER.
RD3DTL EQU MU3 # RD3DOT LOWER LIMIT
5K17 DEC -.01B-2 # YD3DOT LOWER LIMIT
MU6 DEC 0 # STAGING COUNTER
1K37 DEC 15.B17 # ACCEL CAL DURATION
MU8 DEC 0 # ULLAGE COUNTER
MU10 DEC 0 # GYRO CALIBRATE DURATION
1K9 DEC 5.0B17 # ULLAGE COUNTER LIMIT
1K30 DEC 150.B17 # GYRO CALIBRATE DURATION
2K17 DEC 5.B17 # NO OF P-ITERATIONS-3
MU19 DEC 0 # MARK COUNTER
4K23 DEC 62.0B17 # STAGING TIME DELAY
S623 DEC 0B3 # EX SELECTION IN G. S
1K4 DEC .1B0 # DISPLAY INTERPOLATION
1K24 DEC .87E-3B1 # SINGULARITY THRESHOLD
1K26 DEC -.142857E3B8 # NEG INV OF ALIGN GAIN CONSTANT
1K27 DEC .435E-1B-4 # ALIGN CONSTANT
1K28 DEC 107.78396B7 # ALIGN CONSTANT

# Page 14
1K29 DEC .001B-4 # LUN ALIGN STOP CRITERION
1K33 DEC .08B-3 # CALIBRATE GAIN
1K34 DEC .00002B-15 # CALIBRATE GAIN
1K35 DEC .25B7 # ACCEL BIAS THRESHOLD
1K36 DEC -.66667E-3B0 # ACCEL CAL GAIN
2K1 DEC .173189E15B48 # GRAVITY CONST (LUNAR)
2K2 DEC .57740387E-14B-47 # 1/2K1
6J1 DEC .3358E-8B-14 # LUNAR ROT RATE ABOUT X-REF
6J2 DEC -.53039E-7B-14 # LUNAR ROT RATE ABOUT Y-REF
6J3 DEC .3052E-8B-14 # LUNAR ROT RATE ABOUT Z-REF
B13SF DEC .10416666B0 # .01 MIN TO SEC AT 13
SDVX DEC 0B1 # DV SUM FOR ACCEL CAL
SDVY DEC 0 # (ADDR OF SDVX MUST END IN 4)
SDVZ DEC 0
MU7 DEC 0B17 # CALIBRATION COUNTER
7K2 DEC 2B17 # NOISEIN P-MATRIX DIAGONALS
B13VSF DEC .625B0 # .1 FPS TO FPS AT 13
B3SF DEC .34971155B0 # .01 DEG TO RAD AT 3
B23RSF DEC .10533045B0 # .1 NMI TO FT AT 23
4K2 DEC -.50204E-4B-12 # FACTOR IN TB COMP
4K3 DEC .16803E-8B-25 # FACTOR IN TB COMP
B22RSF DEC .5266522B0 # .01 NMI TO FT AT 22
BACCSF DEC 0.762939B0 # .001 FT/SEC2 TO FPS/20MS AT 1
4K34 DEC 1.B7 # AT LOWER LIMIT
4K35 DEC .1B7 # ULLAGE THRESHOLD
4K10 DEC -317438.91B20 # TERM IN AL(O.I.)
SUMLIM DEC 0 # LAST CELL FOR CHECKSUM
WORDS DEC 28
B18SF DEC .333333B0 # .1 MIN TO SEC AT 18
4K21 DEC .26179938B2 # SC FACTOR FOR ATT ERR OUTPUT
M25B16 DEC -25.B16 # CYCLE COUNT TO SECONDS
DTB DEC 1.25B1 # 1 SEC + DEDA TIME BIAS
ID DEC 0 # CURRENT DOWNLIST ID CODE
DLWNL STO 1J1+15 # END OF DOWNLINK BUFFER
11J DEC -624599.84B20 # RETARGET VALUE FOR 4K10
2K4 DEC -.173189E15B48 # (-2.)(2K1) B49
KDT DEC 1.B1 # DELTA T/2 AT 1

# Page 15
BM13SF DEC .96049535B0 # .01 DEG/HR TO RAD/20MS AT -13
B23SF DEC .64B0 # 100 FT TO FT AT 23
# THE FOLLOWING 16 PARAMETERS HAVE
# VARIABLE SCALING. INITIAL SCALING IS INDICATED.
P11 DEC .1E9B30 # VARIANCE OF X-POS ERROR
P12 DEC 0B30 # COVARIANCE OF X AND Y POS ERROR
P13 DEC 0B20 # COVAR OF X-POS AND X-VEL ERROR
P14 DEC 0B20 # COVAR OF X-POS AND Z-VEL ERROR
P21 DEC 0B30 # COVAR OF X AND Z POS ERROR
P22 DEC .1E9B30 # VARIANCE OF Z-POS ERROR
P23 DEC 0B20 # COVAR OF Z-POS AND X-VEL ERROR
P24 DEC 0B20 # COVAR OF Z-POS AND Z-VEL ERROR
P31 DEC 0B20 # COVAR OF X-POS AND X-VEL ERROR
P32 DEC 0B20 # COVAR OF Z-POS AND X-VEL ERROR
P33 DEC .1E3B10 # VARIANCE OF X-VEL ERROR
P34 DEC 0B10 # COVAR OF X-VEL AND Z-VEL ERROR
P41 DEC 0B20 # COVAR OF X-POS AND Z-VEL ERROR
P42 DEC 0B20 # COVAR OF Z-POS AND Z-VEL ERROR
P43 DEC 0B10 # COVAR OF X-VEL AND Z-VEL ERROR
P44 DEC .1E3B10 # VARIANCE OF Z-VEL ERROR
VRSH STQ SREX2
LRS 0
TRA SREX2
TMID DEC 0 # TELEMETRY ID
SFLO OCT 000026
PMAXP OCT 377777 # COUNTS AT 17
ORBRET TRA DX10P # RETURN FROM NORTON IN O.I.
DEDASC DEC 0 # DEDA SHIFT COUNTER
#
#
EX36P STQ DEL10
# SAVE QUANTITIES FOR LATER USE IN
# T/B COMPUTATIONS
STO V6Z
CLA TS12
STO V6X
CLA TS13

# Page 16
STO V6Y
CLA TI
SUB 4J
TRA DXFR14-2
RREX CLA TS0 # VARIABLE ADDRESS LOAD, MULTIPLY
RREX1 MPY TS0 # AND STORE FOR MATRIX MULTIPLY
DVP 1B3 # ROUTINE (MXM) -- PERFORMS
ADZ TR8 # C(I,J)=C(I,J)+A(K,I)*B(J,K)
RREX2 STO TS0
STO TR8 # C(I,J)=C(I,J)+A(K,I)*B(J,K)
CLA RREX
ADD TR4 # INCREMENT CLA
STO RREX
CLA RREX1
ADD 1B17 # INCREMENTY MPY
STO RREX1
AXT 2,1 # INCREMENT AND TEST INDEXES
CLA I,1
ADD 1B17
STO I,1
SUB TR4,1
TMI R1+1
TIX *-5,1
CLA TR6 # REARRANGE DIMENSIONS AND
STO TR4 # ADDRESSES ON EXIT TO SAVE
CLA TR3 # STEPS IN FILTER
STO TR1
AXT 7,1
TRA PP # EXIT MXM
DIAK1 OCT 377363 # TEST FOR DEDA ENTRY INTO 415
DIAK2 OCT 377401 # TEST FOR DEDA ENTRY INTO 377
6K8S DEC .22B10 # WORKING VALUE OF 6K8
# (ADDR OF 6K8S MUST END IN 4)
6K9S DEC .3029E-4B-4 # WORKING VALUE OF 6K9
6K10S DEC .625E7B28 # WORKING VALUE OF 6K10
6K6S DEC 0 # WORKING VALUE OF 6K6
#

# Page 17
#
ORG 1000
CLADD DEC 0 # PICKUP DEDA DATA
TRA ROR
RND STQ SREX # DIRECTION COSINE ROUND
ADD 1B9
LRS 9
TRA SREX
TMCLA CLA 0324 # CLA FOR TELEM
TCLTH CLA 1005
DLSTO STO 1J1-1
IC1BR TRA IC1 # IC1 TRA.
BR1 TRA NAV1P
DEDABR TRA DEDAE # DEDA BRANCH TRA.
BR50 TRA EXEC2 # BRANCH 50 TRA.
#
# HARDWIRE ESCAPE POINTS
#
EXIT1 TRA EX1+1
EXIT2 TRA UBCOMP
EXIT3 TRA ADDMS
EXIT4 TRA EX4+1
EXIT5 TRA PGNSDE
EXIT6 TRA TME
EXIT7 TRA PGNSD1+5
EXIT8 TRA EX8+1
EXIT9 TRA TVTG
EXIT10 TSQ SOFT1
EXIT11 TSQ SOFT1 # ASCENT ENG ON
EXIT12 TRA AHE1
EXIT13 TRA EROUT+1
EXIT14 TSQ SOFT2
EXIT15 TRA LUNAL1 # GAIN CHANGE
EXIT16 TRA EX16+1
EXIT17 TRA FDAI1
EXIT18 TRA NOC
EXIT19 TRA DELAY


# Page 18
EXIT20 TRA DLDC
EXIT21 TRA TIMEA
EXIT22 TRA IDLE-1
O25C OCT 377747 # TEST FOR TM RESET
EXIT23 CLZ VD1X
CLZ VD1Y
CLZ VD1Z
TRA NAV3
EXIT24 TRA NAV2
EXIT25 TRA NAV3
SINITC CLA 4K27
STO VD1X
STO VDX
TRA EXEC1+7
EXIT26 TRA XDVS
EXIT27 TRA EX27+1
EXIT28 TRA EX28+1
STGCTR CLZ MU6 # STAGING DELAY COUNTER
ADD 1B17
STO MU6
TRA AHE
EXIT29 TRA EX29+1
CLATAB CLA SFTAB-1 # CLA FOR DEDA SF TABLE
EXIT30 TRA EX30+1
EXIT31 TRA ALTUP
EXIT32 TRA LMORB2
EXIT33 TRA EX33P
EXIT34 TRA EX34P
EXIT35 TRA EX35
EXIT36 TSQ EX36P
EXIT37 TRA EX35+1
EXIT38 TRA Q5
EXIT39 TRA EXECM
EXIT40 CLZ S0 # SOFT INITIALIZE
CLZ DEL5
CLZ FLAGT
AXT 7,1 # ZERO S SWITCHES

# Page 19
CLZ S10,1
TIX *-1,1
TRA SINITC # CONTINUE INITIALIZE
EXIT41 TRA DSP1
EXIT42 TRA DSP2CP
EXIT43 ADD O25C # CHECK FOR TM RESET
ABS
TMI TMIE1 # -- RESET TM AT 25 CYCLE
TRA EXEC1+4 # NOT 25TH CYCLE
IDAI OCT 077776 # AGS INITIALIZE DOWNLIST ID
IDRP OCT 077775 # REND./PRETHRUST DOWNLIST ID
EXIT44 TRA EX44+1
EXIT45 TRA EX45+1
EXIT46 TRA EX46+1
EXIT47 TRA DEXIT
EXIT48 TRA CLEARM+1
EXIT49 TRA SFTEST
EXIT50 TRA EX50+1
EXIT51 TSQ DIAT
EXIT52 TRA EXEC+1
EXIT53 TRA EXEC+1
DLWNLC STO 1J1+15 # DLWNL PROTECTION
ADDMS AXT 2,1
CLA TS10,1
ABS
ADD MS
TIX *-3,1
TRA EX3+1
EX34P CLZ DEL10
TMI EX33PP+1
TRA EX34+1
THEF CLA RF
LRS 1 # B24
ADZ TS3
LDQ TS4
STO TS4 # =RF+RX B24
STQ TS3 # =RZ B24

# Page 20
TSQ ARCTAE
STO TS0 # THETAF B8
SUB PI
TMI *+2
SUB 2PIB3
ADD PI
STO THETAF # THETAF B3
CLA TS0 # B3
SUB 2PIB3
MPY M1B1 # B4
DVP NI
ADD TI # B13
TRA DXFR14-2
TMIE1 TSQ TMIE2 # INITIALIZE TELEMETRY
CLA S12
ADD MU8
STO MU8S12 # SAVE MU8/S12 FOR TM
SUB 3B3 # TEST FOR SELF TEST FAILURE
TMI *+2
OUT 6410 # SET FAILURE INDICATOR
TRA DELAY # END MAJOR CYCLE
#
# DEDA SCALE FACTOR LOCATOR TABLE
# SCALE FACTORS MUST REMAIN AT LOCS IN COMMENTS
# FORMAT OF TABLE IS, BIT 0=1 TABLE EXCEEDED,
# BITS 1-9 LAST ADDRESS OF DEDA SCALE FACTOR REGION
# BIT 10=1 FOR OCTAL REGION, BITS 11-17 ADDRESS OF
# SCALE FACTOR RELATIVE TO LOCATION 636
SFTAB OCT 075200 # OCT LOC 026-172,OCT
OCT 125441 # OCT LOC 173-253,DEC,SF AT 677
OCT 127427 # OCT LOC 254-257,DEC,SF AT 665
OCT 134413 # OCT LOC 260-271,DEC,SF AT 651
OCT 137027 # OCT LOC 272-276,DEC,SF AT 665
OCT 142414 # OCT LOC 277-305,DEC,SF AT 652
OCT 145405 # OCT LOC 306-313,DEC,SF AT 643
OCT 146415 # OCT LOC 314-315,DEC,SF AT 653
OCT 147420 # OCT LOC 316-317,DEC,SF AT 656

# Page 21
OCT 157415 # OCT LOC 320-337,DEC,SF AT 653
OCT 164441 # OCT LOC 340-351,DEC,SF AT 677
OCT 174413 # OCT LOC 352-371,DEC,SF AT 651
OCT 177427 # OCT LOC 372-377,DEC,SF AT 665
OCT 200600 # OCT LOC 400-401,OCT
OCT 202415 # OCT LOC 402-405,DEC,SF AT 653
OCT 207600 # OCT LOC 406-417,OCT
OCT 241413 # OCT LOC 420-503,DEC,SF AT 651
OCT 257600 # OCT LOC 504-537,OCT
OCT 261421 # OCT LOC 540-543,DEC,SF AT 657
OCT 263040 # OCT LOC 544-546,DEC,SF AT 676
OCT 305600 # OCT LOC 547-613,OCT
OCT 311067 # OCT LOC 614-622,DEC,SF AT 725
OCT 342200 # OCT LOC 623-704,OCT
# THE ABOVE 23-PLACE TABLE MUST BE FOLLOWED
# BY A WORD WITH BIT 0 SET
#
# ORBIT ALIGN COMPUTATIONS
#
ORBLIN AXT 6,1
CLZ A11,1
CLZ DA11,1 # ZERO REMAINDERS
TIX *-2,1
CLA 1B1
STO A11
STO A33
TRA COA21-2
#
# MASS UNBALANCE COMPENSATION
#
UBCOMP MPR 1K14 # (DVX)(1K14) 1+(-14)=-13
ADZ DAXREM
STO DAXREM
#
# 20MS MODE CHECK.
#
MODCK CLA S0 # CHECK FOR ALIGNMENT

# Page 22
SUB 3B3 # SUBMODES
TMI GYCOM-2 # -- IS INERT REF
SUB 1B3
TMI ZNOC # IMU ALIGN
SUB 1B3
TMI GYCOM-2 # -- IS LUNAR ALIGN
SUB 1B3
TMI ORBLIN # ORBIT ALIGN
AXT 2,1 # CALIBRATE MODE
CALIB1 CLA DEL21
TMI *+5 # -- LM IS ON LUNAR SURFACE
CLZ SDVX,1 # SUM BODY AXIS VEL
ADD DVX,1 # INCREMENTS SINCE START OF ACC.
STO SDVX,1 # BIAS CALCULATIONS
TRA CALIB2
CLA A11,1 # LUNAR CAL., COMPENSATE COMP.
MPR 6J1,1 # OF VEH ROT. FOR LUNAR ROTATION
ADZ DAXREM # 1+(-14)=-13
STO DAXREM # A11 DOT 6J1
CLA A21,1
MPR 6J1,1
ADZ DAYREM
STO DAYREM # A21 DOT 6J1
CLA A31,1
MPR 6J1,1
ADZ DAZREM
STO DAZREM # A31 DOT 6J1
CALIB2 TIX CALIB1,1
TRA GYCOM-2
#
# DEDA MODE SELECTION
#
DEDAE CLZ CLEARP
TMI CLEARM # SET CLEAR
CLA CMF
TMI RPT # CLEAR MODE
CLA RMF

# Page 23
TMI HET # READOUT IN PROGRESS
CLA HMF
TMI RRT # HOLD IN PROGRESS
DEXIT AXT 3,1 # NORMAL EXIT
TRA *+4
CLEARM STO CMF
INP DEDA
AXT 5,1 # CLEAR EXIT
CLZ READP,1 # RESET FLAGS
TIX *-1,1
CLZ TMPBR # SET BRANCH FOR NEXT
STO BRANCH # GUIDANCE CYCLE
CLA 1B11 # INITIALIZE COUNTER
STO DEDASC
TRA DSP1 # TO DISPLAY
RPT CLZ READP # TEST FOR
TMI RME # READOUT MODE
CLZ ENTERP # OR ENTER MODE
TMI RME+1 # ENTRY.
TRA DEXIT # EXIT
HET CLZ HOLDP # READOUT TEST FOR
TMI *+2 # HOLD COMMANDED
TRA ADOUT # TO OUTPUT ROUTINE
STO HMF # SET HOLD MODE
CLZ RMF
TRA DEXIT
#
# DEDA SCALE FACTOR SELECTION
#
SFTEST SUB SFLO
TMI CLEARM+1 # -- IF OCT LOC BELOW 0026
CLA CLATAB # INITIALIZE FIRST TABLE VALUE
STO VRSH+1 # STORE CLA INSTRUCTION
CLA VRSH+1 # INCREMENT CLA INSTRUCTION
ADD 1B17 # ADDRESS
STO VRSH+1
TSQ VRSH

# Page 24
TMI CLEARM+1 # -- IF OCT LOC ABOVE 704
LRS 8 # EXAMINE BITS 1-9 OF VALUE
SUB ADST # -- IF OCT LOC ABOVE VALUE,
TMI *-7 # CHECK NEXT VALUE IN TABLE
LLS 18 # RECOVER BITS 10-17 OF THIS VAL
TMI NOTDD # -- IF OCT REGION, NO SF REQ
LRS 10 # SCALE BITS 11-17 OF VAL
ADD TBRAKE # CONSTRUCT INSTRUCTION TO OBTAIN
STO VRSH+1 # SCALE FACTOR FOR THIS REGION
TSQ VRSH # OBTAIN SF FOR THIS REGION
STO SF # SET SCALE FACTOR
TRA DDIN # TO INPUT ROUTINE
DIAT AXT 1,1 # IMMEDIATE ACTION TEST
CLA ADST # IMMED. ACTION IF
ADD DIAK1,1 # ACCUMULATOR = 400000
ABS
TMI *+4
TIX DIAT+1,1
STQ DDF
TRA DEXIT
TIX ATI,1
LDQ *-2 # SET RETURN TO DEXIT
AXT 2,1
CLA RRX,1 # SAVE RANGE FOR FILTER
STO RRSX,1
CLA A31,1 # STORE DIRECTION COSINES
STO A31S,1
TIX *-4,1
CLA RRDOT
STO RDOTS
TRA EXIT
#
# DOWNLINK FORMATTING
#
DLDC AXT 2,1
CLZ 0244,1 # LEM VEL
STO 1J4,1

# Page 25
CLZ 0250,1 # CSM POS
STO 2J1,1
CLZ 0254,1 # CSM VEL
STO 2J4,1
TIX DLDC+1,1
CLZ 0247
LRS 14
ADZ 0243
STO 1J7
STQ 1J7LS
STO 2J7
STQ 2J7LS
TSQ CSMPV
TRA IC1+3
#
# DELTA V ACCUMULATION AND THRUST VEL TO GAIN.
#
TVTG AXT 2,1
CLA DVX,1 # 1
LRS 1 # TO 2
ADZ VD2X,1
STO VD2X,1
CLA DVXM1,1
LRS 1 # TO 2
ADZ VD2X,1
STO VD2X,1
LRS 11 # TO 13
STO TS1
ALS 11
COM
ADZ VD2X,1
STO VD2X,1 # REMAINDER AT 2
CLA VD1X,1 # DV EXPENDED MS.
ADZ TS1
STO VD1X,1 # VD1 AT 13
COM
ADD VSMGX,1 # VSMG-VD1

# Page 26
STO DELVGX,1 # THRUST VEL TO GAIN
CLZ EX,1
TIX TVTG+1,1
TRA EX9+1
#
# SOFT 40MS COMPUTATIONS
#
SOFT1 CLA S0 # TEST MODE
SUB 3B3
STO TS1 # SAVE
TMI IR # -- IS INTERT. REF.
ZERR CLA ZERO
OUT 6007 # ZERO ATTITUDE ERRORS
CLZ DEL5 # RESET ATT HOLD INIT FLAG
CLZ TS1
TMI ENCOM1 # -- IS INERTIAL REF
SUB 1B3
TMI SOFT3
SUB 1B3
TMI LUNAL
SOFT3 OUT 7040 # RESET ENG ON
OUT 6420 # SET ENG OFF
CLA ZERO # SET ENG TM FLAG PLUS
ADD S10
STO EONS10
TRA FDAI # TO ATTITUDE DISPLAY
ENCOM1 CLA DISC1 # FOLLUP ENG. COMMANDS
LLS 5
TMI *+4 # -- DESCENT ENG ON
LLS 1
TMI *+2 # -- ASCENT ENG ON
TRA SOFT3 # ENG OFF
OUT 7020 # RESET ENG OFF
OUT 6440 # SET ENG ON
CLA MS # SET ENG TM FLAG NG
TRA SOFT3+3
IR CLA S11 # TEST FOR AUTO RADAR DATA


# Page 27
ALS 3
TMI RADCK
STO DEL44 # SET/RESET CODE WORD FLAG
IR4 CLA DISC1
ALS 3
TMI IR1 # -- IS FOLLOWUP
ALS 1
TMI IR2 # -- IS AUTOMATIC
STQ DEL20
TRA AHE # TO ATT HOLD
IR1 CLA DISC1C
ALS 4
TMI ZERR # PLUS IS AUTOMATIC
CLZ DEL5
STQ DEL20
TRA MODE
RSTE CLA S623
ALS 3
TMI *+3
CLA WCX,1
TRA *+2
CLA WBX,1
MPR A31,1
COM
ADZ EX
STO EX
TIX RSTE,1
RST1 TRA RST
IR2 ALS 4
TMI IR3 # -- IS ABORT STAGE
CLA DEL21 # IF ON LUNAR SURFACE
TMI ZERR # OUTPUT ZERO ATT ERRORS
CLA DISC1
ALS 7
TMI MODE # -- IS ABORT
TSQ IR1+4
IR3 CLA DEL21

# Page 28
TMI AHE
CLA DISC1C
ALS 6
TMI MODE
CLA MU6
SUB 4K23
TMI STGCTR # STAGING ATT HOLD
MODE CLA S0 # TEST STEERING MODE
SUB 1B3
TMI AHE # ATT HOLD
AXT 2,1
SUB 1B3
TMI RSTE # RENDEZVOUS STEERING
CLZ DEL5 # ACQUISITION STEERING
MODE1 CLA WCX,1
MPR A11,1
ADZ EZ
STO EZ
CLA S507 # ORIENT LM Z-BODY ASIX
SUB 1B3 # IN DESIRED THRUST DIR.
TMI *+3 # OR ESTIMATED CSM DIR.
CLA A11BD,1
STO A31BD,1
CLA A31BD,1
MPR A11,1 # XB
ADZ EY
STO EY
CLA A31BD,1 # ZBD
MPR A21,1 # YB
COM
ADZ EX
STO EX
TIX MODE1,1
TRA EROUT
SOFT2 CLZ DEL20 # FIRST TIME FOLLOW
TMI ENCOM1 # PREVIOUS ENGINE STATE
CLA S0 # IF NOT GUIDANCE STEERING

# Page 29
ALS 3 # TURN ENGINE OFF
TMI *+2
TRA SOFT3
CLA MU8 # TEST FOR ULLAGE
SUB 1K9
TMI SOFT3
CLA 4K25 # TEST CEL TO BE
SUB DELVGX # GAINED GREATER THAN
TMI ENCOM1+6 # SHUTDOWN THRESHOLD
CLA 4K26
SUB VG
TMI ENCOM1+6
CLZ S0 # SET ATT HOLD
TRA SOFT3
RADCK STQ DEL32 # REINITIALIZE DOWNLINK
CLA IDRP # SET DOWNLIST ID TO REND/PRETHRJ
STO ID
CLA DEL46 # IS CODE WORD RESET
ALS 1
ABS
TMI IR+3
ADD 1B12 # IS CODE WORD SET
ABS
TMI *+2 # YES IF NEGATIVE
TRA IR4
CLZ DEL44 # HAS CODE WORD BEEN RESET
TMI *+2 # PRIOR TO BEING SET
TRA IR4 # NO
TOV *+1
AXT 1,1 # IF SHAFT OR TRUNNION
CLA THETAR,1 # ANGLE IS GREATER
ALS 4 # THAN 11.2 DEG, THEN
TOV IR4 # DO NOT PROCESS
TIX *-3,1
CLZ DEL45 # ALTERNATE RANGE, RATE
TMI IR6
STQ DEL45

# Page 30
CLZ RM # RANGE ENTRY
LRS 18
CLZ DEL46 # TEST FOR HIGH SCALING
TMI *+2
LRS 3 # LOW SCALE
LLS 17
MPR 6K12 # COUNTS TO FEET AT 22
STO 18J
TRA *+5
IR6 CLZ RMDOT # RANGE RATE ENTRY
SUB 6K14 # NULL AT 17000
DVP 6K13 # COUNTS TO FT/SEC AT B13
STO 17J
TSQ DIAT+10 # SAVE REL RNG VECT, REL VEL
AXT 2,1
IR5 CLA A21,1 # B1, ADJUST Z BODY FOR SHAFT
MPR THETAR # B1+B0=B1, AND TRUNNION ANGLES
DVP 6K11 # B1-B0=B1
STO A31S,1 # B1
CLA A11,1 # B1
MPR BETAR # B1+B0=B1
DVP 6K11 # B1-B0=B1
SUZ A31S,1 # B1
ADD A31,1
STO TS14,1 # XB*BETAR/6K11-YB*THETAR/6K11+ZB
TIX IR5,1
TSQ NORMV
AXT 2,1
CLZ TS10,1 # MOVE NORMALIZED DIRECTION
STO A31S,1 # INTO ZB*
TIX *-2,1
TRA 4711 # EXIT TO DEDA DISCRETE SAMPLING
LUNAL1 CLZ DAYA # CHANGE GAIN
LRS 2 # 1/4
STO DAYA
CLZ DAZA
LRS 2

# Page 31
STO DAZA
TRA SOFT3
#
# START OF NAVIGATION
#
NAV1P CLA DEL21
TMI NAV1 # -- IS ON LUNAR SURFACE
CLA VD1X # COMPUTE THRUST ACCEL
SUB VDX # 13
ALS 5 # 1/2(VD1-VD) AT 7
TRA 5166 # TO HARD NAV
XDVS AXT 2,1
CLA DVSX,1
ADD 1B12
LRS 6
ADZ DQSX,1
STO DQSX,1
CLA VD1X,1
STO VDX,1
TIX XDVS+1,1
TRA NAV4
ALTUP TSQ EXEC
#
AXT 2,1
CLA REX,1 # SAVE REX FROM FILTER
STO VIX,1 # SCRATCH MATRIX C AREA
CLA 25J # ALTITUDE ENTRY TEST
SUB 1B17
TMI FLTR # IF NO 25J ENTRY
CLA 25J
ADD 5J
STO R # R=5J+25J
MPY U1X,1
LLS 1
STO RX,1 # NEW R COMPONENTS
#
# RANGE AND RANGE RATE COMPUTATIONS

# Page 32
#
FLTR CLA RCX,1 # RELATIVE RANGE
SUB RX,1
STO RRX,1
STO TS4,1
TIX ALTUP+2,1
CLZ 25J
TSQ DPVMAG # DP COMP OF RR MAG
ALS 1
STO RR # B22 RANGE VECTOR MAG
CLA 2K1 # 48
LRS 5 # 53
DVP R # 30
DVP R # 7
DVP R # -16
DAD STO D11 # 2K1/R**3 B-16
AXT 7,1
CLZ C11,1 # ZERO PHI,M
CLZ C31,1
TIX *-2,1
CLZ RRDOT # ZEROED FOR SUM
AXT 2,1
FLTRA CLA RRX,1
DVP RR
STO A31BD,1 # B1 UNIT POINTING VECTOR
CLA VCX,1 # B13
SUB VX,1
STO TS4,1 # B13 RANGE RATE CSM-LM
MPR A31BD,1
ALS 1
ADZ RRDOT
STO RRDOT
CLA U1X,1
MPR U1X,1 # B2
MPR 3B3
SUB 1B5
MPR D11

# Page 33
STO C31,1 # ADT,JDT AT B-7
CLA 4B17
STO TR4,1 # SET UP DIMENSION FOR MXM
TIX FLTRA,1
LDQ 1B3 # COMMON SETUP OF PHI AND M
STQ C11