https://github.com/virtualagc/virtualagc
Revision 078c79d8734a9ed2860303a7c1662004284fe853 authored by Ron Burkey on 07 August 2022, 15:04:04 UTC, committed by Ron Burkey on 07 August 2022, 15:04:04 UTC
assembly listings from yaASM and yaLEMAP. Added some debugging messages to 'make install'. Tweaked debugging messages that VirtualAGC embeds in 'simulate'. Verified buildability in Mint 21, 20, 19, 17, and verified buildability using clang in Mint 17.
1 parent 6bb1acc
Tip revision: 078c79d8734a9ed2860303a7c1662004284fe853 authored by Ron Burkey on 07 August 2022, 15:04:04 UTC
Fixed a potential string-overflow bug in yaASM. Removed timestamps from
Fixed a potential string-overflow bug in yaASM. Removed timestamps from
Tip revision: 078c79d
LUNAR_LANDING_GUIDANCE_EQUATIONS.agc
### FILE="Main.annotation"
## Copyright: Public domain.
## Filename: LUNAR_LANDING_GUIDANCE_EQUATIONS.agc
## Purpose: A log section of Zerlina 56, the final revision of
## Don Eyles's offline development program for the variable
## guidance period servicer. It also includes a new P66 with LPD
## (Landing Point Designator) capability, based on an idea of John
## Young's. Neither of these advanced features were actually flown,
## but Zerlina was also the birthplace of other big improvements to
## Luminary including the terrain model and new (Luminary 1E)
## analog display programs. Zerlina was branched off of Luminary 145,
## and revision 56 includes all changes up to and including Luminary
## 183. It is therefore quite close to the Apollo 14 program,
## Luminary 178, where not modified with new features.
## Reference: pp. 784-821
## Assembler: yaYUL
## Contact: Ron Burkey <info@sandroid.org>.
## Website: www.ibiblio.org/apollo/index.html
## Mod history: 2017-07-28 MAS Created from Luminary 210.
## 2017-08-05 MAS Transcribed for Zerlina 56. This section was
## largely rewritten to support P66 LPD and the
## variable servicer.
## 2017-08-06 MAS Fixed a comment transcription error (MODULE
## where MODULO should have been).
## 2017-08-19 MAS Corrected a few transcription errors.
## 2017-08-24 MAS Fixed a branch target and a few incorrect
## instructions.
## Page 784
# ****************************************************************************************************************
# GUIDANCE FOR LANDING ON THE MOON BY EYLES EXCEPT P66HZ AND ROOTPSRS BY KLUMPP
# ****************************************************************************************************************
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 ENDLLJOB # VERTICAL (A BRANCH RARELY IF EVER USED)
#
# PRE-GUIDANCE COMPUTATIONS:
TCF CALCRGVG # IGNALG
PREGUIDE TCF RGVGCALC # BRAKQUAD
TCF REDESIG # APPRQUAD
#
# GUIDANCE EQUATIONS:
TCF TTF/8CL # IGNALG
WHATGUID TCF TTF/8CL # BRAKQUAD
TCF TTF/8CL # APPRQUAD
#
# POST GUIDANCE EQUATION COMPUTATIONS:
TCF CGCALC # IGNALG
AFTRGUID TCF EXTLOGIC # BRAKQUAD
TCF EXTLOGIC # APPRQUAD
## Page 785
# WINDOW VECTOR COMPUTATIONS:
TCF EXGSUB # IGNALG
WHATEXIT TCF EXBRAK # BRAKQUAD
TCF EXNORM # APPRQUAD
#
# DISPLAY ROUTINES:
WHATDISP TCF P63DISPS # BRAKQUAD
TCF P64DISPS # APPRQUAD
#
# ALARM ROUTINE FOR TTF COMPUTATION:
TCF 1406POO # IGNALG
WHATALM TCF 1406ALM # BRAKQUAD
TCF 1406ALM # APPRQUAD
#
# INDICES FOR REFERENCING TARGET PARAMETERS:
OCT 0 # IGNALG
TARGTDEX OCT 0 # BRAKQUAD
OCT 2 # APPRQUAD
# ****************************************************************************************************************
# ENTRY POINTS: ?GUIDSUB FOR THE IGNITION ALGORITHM, LUNLAND FOR SERVOUT
# ****************************************************************************************************************
# IGNITION ALGORITHM ENTRY: DELIVERS N PASSES OF QUADRATIC QUIDANCE
?GUIDSUB EXIT
CAF TWO # N = 3
TS NGUIDSUB
TCF PASSINIT
GUIDSUB TS NGUIDSUB # ON SUCEEDING PASSES SKIP TTFINCR
TCF CALCRGVG
# NORMAL ENTRY: CONTROL COMES HERE FROM SERVOUT
LUNLAND TC SERVCHNG
CA FLAGWRD5 # HAS THROTTLE-UP COME YET?
MASK ZOOMBIT
EXTEND
BZF DISPEXIT # NO: DO P63 DISPLAYS BUT NO GUIDANCE
# ****************************************************************************************************************
## Page 786
# INITIALIZATION FOR THIS PASS
# ****************************************************************************************************************
PASSINIT 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
# ****************************************************************************************************************
STARTP64 TC NEWMODEX
DEC 64
CA DELTTFAP # AUGMENT TTF/8
ADS TTF/8TMP
INHINT
TC C13STALL
CA BIT12 # ENABLE RUPT10
EXTEND
WOR CHAN13
CAF P64DB
TS DB
CA LRWH1
TS LRWH
TC DOWNFLAG # INITIALIZE REDESIGNATION FLAG
ADRES REDFLAG
# (CONTINUE TO TTFINCR)
# ****************************************************************************************************************
# INCREMENT TTF/8, UPDATE LAND FOR LUNAR ROTATION, DO OTHER USEFUL THINGS
# ****************************************************************************************************************
## Page 787
# TTFINCR COMPUTATIONS ARE AS FOLLOWS:-
# 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
TC TDISPSET
CAF PRIO31 # TEMPORARILY OVER-PRIO CHARIN
TC PRIOCHNG
TC INTPRET
VLOAD VAD # ADD IN CORRECTION FROM NOUN 69
LANDTEMP
## Page 788
DLAND
STORE LAND
ABVAL # RECOMPUTE /LAND/
STORE /LAND/
EXIT
TC FASTCHNG # SINCE REDESIG MAY CHANGE LANDTEMP
CAF EBANK5
EBANK= DLAND
TS EBANK
CAF ZERO # ZERO N 69 REGISTERS
TS DLAND
TS DLAND +1
TS DLAND +2
TS DLAND +3
TS DLAND +4
TS DLAND +5
CAF EBANK7
EBANK= TREDES
TS EBANK
CAF PRIO20
TC PRIOCHNG
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 ELCOUNT1
TS ELCOUNT
CA AZCOUNT1
TS AZCOUNT
TC FASTCHNG
CA ZERO
TS ELCOUNT1
## Page 789
TS AZCOUNT1
CA ELCOUNT # COMPUTE ELEVATION INCREMENT IN RADIANS
EXTEND
MP ELEACH
XCH L # SHIFT LEFT 14, A BEING ZERO AFTER THE MP
INDEX FIXLOC
DXCH 12D
CA AZCOUNT # COMPUTE AZIMUTH INCREMENT IN RADIANS
EXTEND
MP AZEACH
XCH L # SHIFT LEFT 14, A BEING ZERO AFTER THE MP
INDEX FIXLOC
DXCH 14D
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))
12D
14D
VXSC VSU
YNBPIP
VAD PUSH # RESULTING VECTOR IS 1/2 REAL SIZE
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/
## Page 790
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)
# 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
## Page 791
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
STOVL VGU
R # - -
VSU PUSH # PUSH DOWN R - LAND
LAND
MXV VSL1
CG
STODL RGU
MPAC +5
STOVL RANGEDSP # SM Z-AXIS RANGE FOR DISPLAY IN N68
RTB DOT # NOW IN MPAC IS SINE(LOOKANGL)/4
NORMUNIT
XNBPIP
EXIT
CA FIXLOC # RESET PUSH DOWN POINTER
TS PUSHLOC
TC BANKCALL # CALL LPDFVSUB TO PREPARE R1 DISPLAY
CADR LPDFVSUB
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
## Page 792
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
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
## Page 793
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
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* RTB
VDG,1
ZEROMID
PDVL* RTB
RDG,1
ZEROMID
VSU V/SC
RGU
TTF/8
VSR2 VXSC
26D
VAD VAD
V/SC VXSC
TTF/8
3/4DP
PDDL VXSC*
30D
## Page 794
ADG,1
RTB VAD
ZEROMID
AFCCALC1 VXM VSL1 # VERTGUID COMES HERE
CG
PDVL VSR2 # RESCALE G TO UNITS OF 2(-4) M/CS/CS
G
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
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
# ****************************************************************************************************************
# NEW PHASE NOW?
# ****************************************************************************************************************
EXTLOGIC INDEX WCHPHASE # IS TTF NEARER ZERO THAN CRITERION?
CA TENDBRAK
AD TTF/8
EXTEND
BZMF CGCALC # NO
TC FASTCHNG # YES: INCREMENT WCHPHASE, ZERO FLPASS0
## Page 795
CA WCHPHOLD
AD ONE
TS WCHPHASE
CAF ZERO
TS FLPASS0
# (CONTINUE TO CGCALC)
# ***************************************************************************************************************
# 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 EXITSPOT
TCF EXITSPOT
NOOP
TC INTPRETX
VLOAD UNIT
LAND
STODL CG
TTF/8
DMP* VXSC
GAINBRAK,1 # NUMERO MYSTERIOSO
ANGTERM
VAD
LAND
VSU RTB
R
NORMUNIT
VXV RTB
LAND
NORMUNIT
STOVL CG +6 # SECOND ROW
CG
VXV VSL1
## Page 796
CG +6
STORE CG +14
EXIT
EXITSPOT 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
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
## Page 797
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
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
CA AZBIAS # SET OUTER GIMBAL
TS OGABIAS # ANGLE BIAS FOR WINDOW BENDING
INCR BBANK
EBANK= PIF
STEER? CA OVFIND # OVERFLOW?
## Page 798
EXTEND
BZF STEERSW? # NO: CHECK STEERSW
TC OVFDESC # YES: ISSUE ALARM AND SKIP COMMANDS
TCF DISPEXIT
STEERSW? CS FLAGWRD2 # IS STEERSW UP?
MASK STEERBIT
EXTEND
BZF THRTCALL # YES: ISSUE GUIDANCE COMMANDS
RATESTOP INHINT # NO
TC IBNKCALL
FCADR STOPRATE
RELINT
TCF DISPEXIT
GDUMP1 = THRTCALL
THRTCALL TC CHECKMM # HAS MODE CHANGED TO 66 SINCE CONTROL WAS
DEC 66 # TRANSFERRED TO LUNLAND FROM SERVICER?
TCF +2
TCF DISPEXIT # YES: SKIP COMMANDS
TC THROTTLE # NO
TC FASTCHNG
CA FCODD
TS FCOLD
EXTEND
DCA FWEIGHT1
DXCH FWEIGHT
TC INTPRET
CALL
FINDCDUW -2
EXIT
# (CONTINUE TO DISPEXIT)
# ****************************************************************************************************************
# GUIDANCE LOOP DISPLAYS
# ****************************************************************************************************************
DISPEXIT CS FLAGWRD8 # NO DISPLAYS THIS PASS IF FLUNDISP IS SET
MASK FLUNDBIT
EXTEND
## Page 799
BZF ENDLLJOB
CAF PRIO23 # RAISE PRIORITY TEMPORARILY SO DISPLAY
TC PRIOCHNG # RESPONSES WILL NOT WAIT FOR SERVICER
INDEX WCHPHOLD
TCF WHATDISP
P63DISPS CS FLGWRD11 # HAVE LR UPDATES BEEN PERMITTED?
MASK LRINHBIT
EXTEND
BZF N63STAT # YES: DO STATIC DISPLAY
CAF V06N63 # NO: FLASH NOUN 63, CORRECT RESPONSE IS
TC BANKCALL # V57E WHICH STOPS THE FLASHING
CADR REFLASHR
TC ENDOFJOB # TERMINATE IGNORE AND KEEP FLASHING
TC ENDOFJOB # PROCEED IGNORE AND KEEP FLASHING
TC ENDOFJOB # ENTER IGNORE AND KEEP FLASHING
TCF LOWRPRIO
N63STAT CAF V06N63
DISPCOMN TC BANKCALL
CADR REGODSPR
LOWRPRIO CAF PRIO20
TC PRIOCHNG
ENDLLJOB TC POSTJUMP # RETURN CONTROL TO THE START OF SERVICER
CADR PIPCYCLE
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 # NO: USE FLASHING DISPLAY
TC BANKCALL
CADR REFLASHR
TC ENDOFJOB # TERMINATE IGNORE AND KEEP FLASHING
TCF P64CEED # PROCEED PERMIT REDESIGNATIONS
TC ENDOFJOB # ENTER IGNORE AND KEEP FLASHING
TCF LOWRPRIO
P64CEED CAF ZERO
## Page 800
TS ELCOUNT1
TS AZCOUNT1
TC UPFLAG # ENABLE REDESIGNATION LOGIC
ADRES REDFLAG
TCF ENDOFJOB
RED-OVER TC DOWNFLAG
ADRES REDFLAG
REDES-OK CAF V06N64
TCF DISPCOMN
# ****************************************************************************************************************
# VERTICAL AND HORIZONTAL GUIDANCE FOR P66
# ****************************************************************************************************************
SETLOC P66LOC
BANK
EBANK= TAURODL
COUNT* $$/F2DPS
# ********************************
# DATA TRANSFER AND PIPA READING
# ********************************
# FIRST, PAD-LOADS FROM THE W-MATRIX AREA ARE MOVED INTO TEMPORARIES FOR USE WHENE BANK IS SET TO 7.
# THESE TRANSFERS ARE AS FOLLOWS:
# VERCRIT ---> VBUF +1
# TAURODL ---> VBUF +2
# TAURODB ---> VBUF +3
# MINFORCE ---> VBUF +4
# MAXFORCE ---> VBUF +5
# RODSCALE ---> MPAC +5
# ROHZSCAL ---> MPAC +6
P66JOB CA VERCRIT # VERCRIT
TS VBUF +1
EXTEND
DCA TAURODL # TAURODL AND TAURODB
DXCH VBUF +2
EXTEND
DCA MINFORCE # MINFORCE AND MAXFORCE
DXCH VBUF +4
EXTEND
DCA RODSCALE # RODSCALE AND ROHZSCAL
DXCH MPAC +5
## Page 801
# ONE OTHER CHORE CAN BE DONE NOW TO MINIMIZE THE TIME BETWEEN READING PIPAX AND PUTTING OUT A THROTTLE
# COMMAND: THE COMPUTATION OF THE PRODUCT OF COS(AIG) AND COS(AMG).
P66INH INHINT # INHINT LASTS TILL AFTER THROTTLE COMMAND
CA CDUY
TC SPCOS
TS VBUF
CA CDUZ
TC SPCOS
EXTEND
MP VBUF
TS MPAC +4 # PRODUCT OF COSINES SCALED FULL-SIZE
INCR BBANK # START P66JOB IN E5, SWITCH NOW TO E6
EBANK= END-E6
# THE FOLLOWING CODING REFERS THE X-PIPA READING TO THE CENTER OF MASS OF THE SPACECRAFT BY SUBTRACTING
# THOSE PIPA COUNTS PRODUCED BY VERTICAL IMU MOTION RELATIVE TO THE CENTER-OF-MASS. THE SPACECRAFT X-AXIS IS
# ASSUMED TO BE APPROXIMATELY VERTICAL (PARALLEL TO THE SM X-AXIS). THE EQUATION IS:
# P66PIPX = PIPAX - OMEGAQ RIMUZ
# WHERE OMEGAQ IS THE ATTITUDE-RATE ABOUT THE Q (Y) AXIS AND RIMUZ IS THE Z-COORDINATE OF THE IMU.
CS OMEGAQ
INCR BBANK # SWITCH FINALLY INTO E7
EBANK= END-E7
EXTEND
MP RIMUZ
XCH L # ROUND BEFORE ADDING TO PIPAX
DOUBLE
TS Q # SKIP ON OVERFLOW WITH C(A) = +1 OR -1
CAF ZERO # DEPENDING ON THE SIGN OF THE OVERFLOW
AD L
AD PIPAX
TS P66PIPX
EXTEND # READ FINE-SCALED TIME FOR FP COMPUTATION
READ LOSCALAR
TS P66TPIP # TIME IN UNITS OF 2(9) M/CS
EXTEND # SET GTCTIME AS TIME-TAG FOR FC
DCA TIME2
DXCH GTCTIME # TIME IN UNITS OF 2(28) CS
# ********************************
## Page 802
# PROGRAM INITIALIZATION
# ********************************
# THE FIRST TIME P66JOB IS EXECUTED P66 HAS NOT YET BEEN INITIALIZED. THIS IS INDICATED BY THE FACT THAT
# MODREG CONTAINS SOMETHING OTHER THAN 66. IN THIS CASE P66JOB BEGINS BY INITIALIZING ITSELF.
CS MODREG # HAS P66 BEEN INITIALIZED YET?
AD MM66
EXTEND
BZF P66MAIN # YES
TC P66CHNG # NO: THEN INITIALIZE IT
TC NEWMODEX # SWITCH MODE LIGHTS TO 66
MM66 DEC 66
CS ZERO # CANCEL LEFT OVER P64 THROTTLE COMMAND
TS THRUST # (DON'T EVER LOAD THRUST WITH +0)
CAF THREE # SET HZCOUNT FOR P66DISPS IN 3/4
TS HZCOUNT # SECOND AND P66HZ IN 1 1/4 SECOND
TC ZEROVHZC # SET VHZC TO ZERO, RETURN WITH C(A) = +0
TS FWEIGHT # ZERO FWEIGHT LEFT OVER FROM P64
TS FWEIGHT +1
TCF ENDROD # WAIT BEFORE EXECUTING P66ROD
# ********************************
# VERTICAL (ROD) CONTROL EQUATION
# ********************************
# HERE VVECTX IS RECOMPUTED TO MINIMIZE THE GUIDANCE LAG BETWEEN THE SAMPLING OF PIPA DATA AND THE
# OUTPUT OF COMMANDS. THIS LEAVES THE VECTOR VVECT NON-HOMOGENEOUS, BUT THIS IS UNIMPORTANT SINCE THE VERTICAL
# AND HORIZONTAL CHANNELS ARE SEPARATE.
P66MAIN EXTEND
DCS VSURFACE
DXCH VVECTX
EXTEND
DCA V
DDOUBL
DDOUBL
DAS VVECTX
CS PIPTIME +1
AD GTCTIME +1
AD HALF
AD HALF
## Page 803
XCH DT
CS PIPAXOLD
AD P66PIPX
TC BANKCALL
CADR NORMPIP
EXTEND
MP P66KPIP
DAS VVECTX
CS BIASACCX
AD GRAVACCX
EXTEND
MP DT
DAS VVECTX # VVECTX IN UNITS OF 2(5) M/CS
# UPDATE VDGVERT ACCORDING TO ROD CLICKS.
CAF ZERO
XCH RODCOUNT # RESTART BETWEEN NOW AND THE UPDATE OF
EXTEND # VDGVERT COULD CAUSE LOSS OF ROD CLICKS
MP MPAC +5
CA L
EXTEND
MP BIT7
DAS VDGVERT # VDGVERT IN UNITS OF 2(5) M/CS
MANTHRT? CAF BIT5 # ARE WE IN AUTO THROTTLE?
EXTEND
RAND CHAN30
EXTEND
BZF ERRCOMP # YES
EXTEND # NO: RESET VDGVERT TO CURRENT VVECTX
DCA VVECTX
DXCH VDGVERT
TCF ENDROD
# THE DECISION WHETHER TO EXECUTE THE P66ROD EQUATION IS MADE EVERY 1/4 SECOND ON THE FOLLOWING BASIS: IF
# VELOCITY ERROR ALONG THE SM X-AXIS EXCEEDS VERCRIT IN MAGNITUDE, DO P66ROD. OTHERWISE, DO P66ROD EVERY TAU
# (SPECIFICALLY TAUROD ROUNDED TO THE NEAREST 1/4 SECOND).
ERRCOMP EXTEND # COMPUTE VERTICAL (SM X-AXIS) VEL ERROR
DCS VVECTX
DXCH MPAC
EXTEND
DCA VDGVERT
DAS MPAC # VDGVERT - VVECTX IN UNITS OF 2(5) M/CS
TC TPAGREE # SIGN-AGREE MPAC (ABSOLUTELY NECESSARY)
## Page 804
CS OP66TPIP # COMPUTE TIME SINCE LAST RODCOMP
AD P66TPIP
AD HALF
AD HALF
XCH MPAC +3 # TIME SINCE LAST P66ROD, UNITS OF 2(9) CS
CS P66PMIN # HAS IT BEEN LESS THAN P66PMIN?
AD MPAC +3
EXTEND
BZMF MOREP66? # YES: NO P66ROD THIS PASS
LXCH MPAC # NO: LIMIT ERROR TO ABOUT 9.57 M/S
CAF DEC48
TC BANKCALL
CADR LIMITSUB
TS MPAC # PUT IT BACK IN MPAC
EXTEND # IS |VDGVERT - VVECTX| < VERCRIT?
DCA MPAC
EXTEND
DV VBUF +1
EXTEND
BZF ERRFAIL
CA VBUF +2 # NO: DO ROD COMPUTATION USING TAURODL
TCF P66ROD
ERRFAIL CA MPAC +3 # YES: HAS IT BEEN ABOUT OLDTAU
EXTEND # SINCE THE LAST P66ROD?
MP BIT10
AD TWELVE
AD -OLDTAU
EXTEND
BZMF MOREP66? # NO: NO P66ROD THIS PASS
CA VBUF +3 # YES: DO ROD COMPUTATION USING TAURODB
P66ROD TS TAU
DXCH MPAC
EXTEND
DV TAU # TOTAL A DESIRED, UNITS OF 2(-9) M/CS/CS
EXTEND # SUBTRACT AWAY GRAVITY
SU GRAVACCX
EXTEND # RESCALE TO UNITS OF 2(-4) M/CS/CS
MP BIT10
TC BANKCALL
CADR MASSMULT
EXTEND # DIVIDE BY COS(AIG) COS(AMG)
DV MPAC +4
## Page 805
EXTEND # APPLY LOWER LIMIT OF MINFORCE (VBUF +4)
SU VBUF +4
AD POSMAX
TS L
CS L
AD L
AD VBUF +4
TS L # APPLY UPPER LIMIT OF MAXFORCE (VBUF +5)
CA VBUF +5
TC BANKCALL
CADR LIMITSUB
TS FC # THRUST DESIRED
CS P66PIPX # COMPUTE MINUS PRESENT THRUST LEVEL
AD OP66PIPX
TC BANKCALL
CADR NORMPIP
EXTEND # RESCALE TO UNITS OF 1 M/CS
MP P66KPIPB
DDOUBL
EXTEND # DIVIDE BY TIME IN UNITS OF 2(9) CS TO
DV MPAC +3 # GET ACC IN UNITS OF 2(-9) M/CS/CS
AD BIASACCX # ADD IN PIPA BIAS PSEUDO-ACCELERATION
EXTEND # RESCALE TO UNITS OF 2(-4) M/CS/CS
MP BIT10
TC BANKCALL
CADR MASSMULT
TS FP
EXTEND
DCS FWEIGHT
EXTEND
DV MPAC +3
ADS FP # MINUS THRUST ALONG THE SM X-AXIS
ZL
EXTEND # DIVIDE BY COS(AIG) COS(AMG)
DV MPAC +4
TS FP # MINUS PRESENT THRUST
AD FC
TS L # LIMIT PIF TO WHAT CAN BE READ OUT
CAF P66PMIN # (LOSCALAR AND THRUST BOTH 3200 PPS)
TC BANKCALL
CADR LIMITSUB
TC BANKCALL # GO TO THROTTLE WITH PIF IN A
## Page 806
CADR P66THROT
P66REL RELINT
DXCH FWEIGHT1 # SCALE FWEIGHT FOR USE NEXT PASS
DXCH MPAC
CA MPAC +4 # FIRST TAKE OUT THE ATTITUDE EFFECT
TC SHORTMP
CAF 2SECS(9)
TC SHORTMP
DXCH MPAC
DXCH FWEIGHT1 # TRANSFERRED TO FWEIGHT LATER
# UPDATE VHZC (Y AND Z COMPONENTS) ACCORDING TO HAND CONTROLLER DEFLECTIONS. IT IS ASSUMED THAT THE PLANE OF
# THE SM Y AND Z AXES IS PARALLEL TO THE LOCAL SURFACE, AS IT WILL BE IN P66 FOR THE NORMAL "LANDING ALIGNMENT".
CAF ZERO
XCH AZCOUNT1 # RESTART BETWEEN NOW AND THE UPDATE OF
EXTEND # VHZC COULD CAUSE LOSS OF ROHZ CLICKS
MP MPAC +6
LXCH BUF # AZCOUNT1.ROHZCAL IN UNITS OF 2(-3) M/CS
CAF ZERO
XCH ELCOUNT1 # RESTART BETWEEN NOW AND THE UPDATE OF
EXTEND # VHZC COULD CAUSE LOSS OF ROHZ CLICKS
MP MPAC +6
LXCH BUF +1 # ELCOUNT1.ROHZSCAL IN UNITS OF 2(-3) M/CS
CAF EBANK6
TS EBANK
EBANK= END-E6
CA BUF
EXTEND
MP M32 # COS(AOG)
TS Q
CS BUF +1
EXTEND
MP M22 # SIN(AOG)
AD Q
EXTEND
MP BIT7
DXCH MPAC # INCREMENT FOR VHZCY, UNITS OF 2(5) M/CS
CA BUF
EXTEND
MP M22 # SIN(AOG)
XCH BUF +1
EXTEND
MP M32 # COS(AOG)
## Page 807
AD BUF +1
EXTEND
MP BIT7 # INCREMENT FOR VHZCZ, UNITS OF 2(5) M/CS
INCR BBANK
EBANK= END-E7
DAS VHZC +4 # UPDATE VHZCZ
DXCH MPAC
DAS VHZC +2 # UPDATE VHZCY
TC P66CHNG
EXTEND # STORE FWEIGHT FOR USE NEXT PASS
DCA FWEIGHT1
DXCH FWEIGHT
CS TAU # STORE MINUS TAU FOR TEST NEXT PASS
TS -OLDTAU
ENDROD TC P66CHNG
EXTEND # STORE TIME AND PIPX FOR NEXT PASS
DCA P66TPIP
DXCH OP66TPIP
# ********************************
# ANY MORE WORK THIS PASS?
# ********************************
MOREP66? EXTEND # TERMINATE P66JOB RESTART PROTECTION
DCA NEG0
DXCH -PHASE3
# NOTE: A RESTART BETWEEN NOW AND THE END OF THE JOB WILL CAUSE THE LOSS OF THE REMAINDER OF THE JOB. BUT
# THIS DOES NOT MATTER. SINCE HZCOUNT IS NOT INCREMENTED UNTIL THE END OF THE JOB, THE FIRST P66JOB AFTER THE
# RESTART WILL REPEAT AND COMPLETE THE COMPUTATIONS STARTED HERE.
CAF PRIO22
TC PRIOCHNG
CAF PRIO23
TC PRIOCHNG
# THE DESISION WHETHER TO EXECUTE THE P66 HORIZONTAL CONTROL EQUATION IS MADE EVERY 1/4 SECOND ON THE
# FOLLOWING BASIS: IF MODE HAS BEEN SWITCHED FROM ATTITUDE-HOLD TO AUTO BETWEEN THE MOST RECENT FINDCDUW AND
# NOW, DO P66HZ IMMEDIATELY. OTHERWISE, DO P66HZ EVERY TWO SECONDS (WHICH COULD BE CHANGED TO ONE SECOND), AND
# DO P65DISPS EVERY ONE SECOND, STAGGERED FROM P66HZ.
CA FIXLOC # ZERO PUSHDOWN POINTER
## Page 808
TS PUSHLOC
CAF EBANK6 # SWITCH TO E6 FOR FLPAUTNO
TS EBANK
EBANK= END-E6
CAF BIT14 # IS MODE IN AUTO?
EXTEND
RAND CHAN31
EXTEND
BZF CHKFPAUT # YES: GO CHECK FLPAUTNO
TS FLPAUTNO # NO: SET FLPAUTNO TO INDICATE ATT-HOLD,
INCR BBANK # RETURN TO E7, AND ZERO VHZC
TC ZEROVHZC
TCF HZTIME?
CHKFPAUT CA FLPAUTNO # WAS MODE IN AUTO LAST FINDCDUW?
INCR BBANK
EBANK= END-E7
EXTEND
BZF HZTIME? # YES
TC ZEROVHZC # NO: MODE JUST SWITCHED SO ZERO VHZC
TS HZCOUNT # AND HZCOUNT FOR IMMEDIATE P66HZ
HZTIME? CA HZCOUNT # DOES HZCOUNT = 0 MODULO 8?
MASK SEVEN
EXTEND
BZF P66HZ # YES: DO HORIZONTAL CONTROL EQUATION
MASK THREE # NO: DOES HZCOUNT = 2 MODULO 4?
AD NEG2
EXTEND
BZF P66DISPS # YES: GO COMPUTE DISPLAYS
END66JOB INCR HZCOUNT # NO: INCREMENT HZCOUNT, TERMINATE JOB:
TC ENDOFJOB # P66HZ COMES HERE TOO
# ********************************
# HORIZONTAL CONTROL EQUATION
# ********************************
P66HZ TC INTPRET
DLOAD PDVL
AHZLIM
UNFC/2
VXSC PDVL
QHZ
VVECTX
## Page 809
BVSU
VHZC
V/SC VSU
TAUHZ
RTB RTB # ZERO X-COMPONENT AND UNITIZE
ZEROMPAC
NORMUNX1
PDDL SL* # CORRECT MAGNITUDE FOR NORMUNX1 SHIFT
36D
0,1
RTB VXSC # LIMIT MAGNITUDE TO AHZLIM
MPACLIM
EXIT
CA GHZ # X-COMPONENT = GRAVITY
TS MPAC
CA OVFIND # ANY INTERPRETIVE OVERFLOW?
EXTEND
BZF ENGARM? # NO: CONTINUE CHECKING
TC BANKCALL # YES: ISSUE ALARM BUT NO COMMANDS
FCADR OVFDESC
TCF END66JOB
ENGARM? CAF BIT3 # IS ENGINE-ARM SWITCH ON?
EXTEND
RAND CHAN30
EXTEND
BZF CDUWHZ # YES: LIMIT AND ISSUE COMMANDS
CS FLAGWRD0 # NO: HAS ASTRONAUT RESPONDED TO P06N60?
MASK P66PROBT
EXTEND
BZF CDUWHZ # NO: LIMIT AND ISSUE COMMANDS
CA IDLADR # YES: PREVENT RCS JET FIRINGS
TS T5ADR
TCF END66JOB
CDUWHZ TC INTPRET
STCALL UNFC/2 # MUST STORE FOR SUCCEEDING PASS
FINDCDUW
EXIT
TCF END66JOB
# ********************************
# P66 DISPLAY COMPUTATIONS
# ********************************
## Page 810
P66DISPS TC INTPRET
DLOAD DMP # AHZLIM.TAUHZ TO PD 0 FOR MPACLIM BELOW
AHZLIM
TAUHZ
PDVL RTB
VVECTX
ZEROMPAC
RTB PDDL
NORMUNX1
36D
SL* PUSH
0,1
STORE 36D
RTB DSQ
MPACLIM
SL1 PDDL
DSQ DAD
DDV PDDL
AHZLIM
## TEXTRA in the following line is cicled
TEXTRA
DMP DAD
36D
DCOMP VXSC
DLOAD PDDL # PUSH DOWN Z AND Y COMPS FOR VDEF BELOW
MPAC +5
MPAC +3
PDDL DAD # COMPUTE X-COMP AS ALTITUDE CORRECTED
ALTITUDE
DALTEYE
VDEF UNIT # FORM UNIT VECTOR FROM SITE TO EYE IN SM
RTB CALL # COORDINATES AND CONVERT TO NB
QTPROLOG
*SMNB*
VSR1 EXIT # EXIT WITH SINE(LOOKANGL)/4 IN MPAC
TC BANKCALL # LPDFVSUB TAKES IT FROM THERE
CADR LPDFVSUB
UNDISP? INCR HZCOUNT
CS FLAGWRD8 # NO DISPLAYS THIS PASS IF FLUNDISP SET
MASK FLUNDBIT
EXTEND
## The following line is circled, with "ENDOFJOB" written next to END66JOB in the circle.
BZF END66JOB
VERTDISP TC VACRLEAS
CAF V06N60
TC BANKCALL
CADR REFLASH
TC ENDOFJOB # TERMINATE IGNORE AND KEEP FLASHING
TCF STOPFIRE # PROCEED GO TERMINATE P66HZ OUTPUTS
## Page 811
STOPFIRE TC DOWNFLAG # ENTER TERMINATE P66HZ OUTPUTS
ADRES P66PROFL
TCF ENDOFJOB
# ********************************
# P66JOB SUBROUTINES
# ********************************
ZEROVHZC CAF ZERO # THE X-COMPONENT OF VHZC NEVER MATTERS,
TS VHZC +2 # AND BESIDES IT OVERLAPS VDGVERT
TS VHZC +3
TS VHZC +4
TS VHZC +5
TC Q
## In the margine on the right, a note is written in:
## <pre>
## make it a
## REFLASHR
## and -increment HZ-
## go to END66JOB on
## the R ----?
## </pre>
## "increment HZ" is scratched out.
EBANK= PHSNAME3
P66CHNG CAF EBANK3
XCH EBANK
DXCH L
TS PHSNAME3
LXCH EBANK
TC A
EBANK= ELVIRA
# ********************************
# P66JOB CONSTANTS
# ********************************
IDLADR GENADR DAPIDLER
P66KPIP DEC .0512 # SCALES PIPAS TO UNITS OF 2(5) M/CS
P66KPIPB DEC .8192
RIMUZ DEC 99.486 B-14 # 1.2667 M IN UNITS (180/PI 45) 2(14) CM
GHZ DEC +1.62292 E-4 B+4 # LUNAR GRAVITY
P66PMIN DEC 37.5 B-9
DALTEYE 2DEC 5 B-15 # ROUGH DISTANCE FROM EYE TO LR ANTENNA
## Page 812
V06N60 VN 0660
DEC48 = SUPER011
2SECS(9) DEC 200 B-9
# ****************************************************************************************************************
# REDESIGNATOR TRAP
# ****************************************************************************************************************
SETLOC RODTRAP
BANK
COUNT* $$/F2DPS
PITFALL XCH BANKRUPT
EXTEND
QXCH QRUPT
CS BIT7 # ARE WE IN P64 OR P66?
AD MODREG
CCS A
MASK OCT37776
CCS A
TC RESUME # NO: RESUME IMMEDIATELY
EXTEND # YES
READ CHAN31
COM
MASK ALL4BITS
TS ELVIRA
CAF TWO
TS ZERLINA
CAF FIVE
TC WAITLIST
EBANK= ZERLINA
2CADR REDESMON
TCF RESUME
ALL4BITS OCT 00063
# REDESIGNATION MONITOR (INITIATED BY PITFALL)
## Page 813
SETLOC F2DPS*11
BANK
COUNT* $$/F2DPS
PREMON1 TS ZERLINA
PREMON2 CAF SEVEN
TC VARDELAY
REDESMON EXTEND
READ 31
COM
MASK OCT00063
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
CCS ZERLINA # N: HAS ZERLINA REACHED ZERO YET?
TCF PREMON1 # N: DIMINISH ZERLINA, CONTINUE
RESETRPT TC C13STALL # Y: RESET RUPT, TERMINATE
CAF BIT12
EXTEND
WOR CHAN13
TCF TASKOVER
COUNT'EM CAF BIT13 # ARE WE IN ATTITUDE-HOLD?
EXTEND
RAND CHAN31
EXTEND
BZF RESETRPT
CAF BIT10 # NO: DOES AGS HAVE CONTROL?
EXTEND
RAND CHAN30
CCS A
TCF RESETRPT
CA L # NO
MASK -AZBIT
CCS A
-AZ CS ONE
ADS AZCOUNT1
CA L
MASK +AZBIT
CCS A
+AZ CA ONE
ADS AZCOUNT1
CA L
MASK -ELBIT
## Page 814
CCS A
-EL CS ONE
ADS ELCOUNT1
CA L
MASK +ELBIT
CCS A
+EL CA ONE
ADS ELCOUNT1
TCF RESETRPT
# THESE EQUIVALENCIES ARE BASED ON GSOP CHAPTER 4, REVISION 16 OF P64LM
+ELBIT = BIT2 # -PITCH
-ELBIT = BIT1 # +PITCH
+AZBIT = BIT5
-AZBIT = BIT6
OCT00063 OCT 00063
# ****************************************************************************************************************
# R.O.D. TRAP
# ****************************************************************************************************************
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
## Page 815
# ****************************************************************************************************************
# 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)
# 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 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 ASSURE 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, INITLIZE ERASABLES
ROOTPSRS EXTEND
QXCH RETROOT # RETURN ADRES
TS PWRPTR # PWR TABL POINTER
DXCH MPAC +3 # PWR TABL ADRES, N-1
CA DERTABLL
TS DERPTR # DER TABL POINTER
TS MPAC +5 # DER TABL ADRES
CCS MPAC +4 # NO POWER SERIES OF DEGREE 1 OR LESS
## Page 816
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 TABL 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
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 # A(I-1) TO MPAC, FETCHING DERCOF
INDEX DERPTR
DXCH 3 # DERCOF TO DER TABL
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
## Page 817
EXTEND
DCA ROOTPS
DXCH MPAC # CURRENT ROOT TO MPAC, FETCHING DERIVTIVE
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
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
# ****************************************************************************************************************
ZEROMPAC CAF ZERO # ROUTINE TO ZERO THE FIRST COMPONENT
## Page 818
TS MPAC # OF A VECTOR IN MPAC. "TCF DANZIG"
TS MPAC +1 # COULD BE A "TC Q" AT THE EXPENSE OF
TCF DANZIG # A TINY AMOUNT OF TIME.
ZEROMID CAF ZERO # ROUTINE TO ZERO THE MIDDLE COMPONENT
TS MPAC +3 # OF A VECTOR IN MPAC. "TCF DANZIG"
TS MPAC +4 # COULD BE A "TC Q" AT THE EXPENSE OF
TCF DANZIG # A TINY AMOUNT OF TIME.
MPACLIM LXCH MPAC # THIS SUBROUTINE LIMITS THE CONTENTS OF
INDEX FIXLOC # MPAC TO THE SP CONTENTS OF PD 0
CA 0
TC BANKCALL
CADR LIMITSUB
TS MPAC
TCF DANZIG
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
TC Q
LPDFVSUB TC MAKECADR
TS MPAC +5
DXCH MPAC
DDOUBL
TC BANKCALL
CADR SPARCSIN -1
AD 1/2DEG
AD ELBIAS
EXTEND
MP 180DEGS
TS LOOKANGL
EXTEND # HERE IF LOOKANGL IS NOT BETWEEN ZERO AND
BZMF +5 # 75 IT IS SET TO 99 FOR DISPLAY
CS DEC75
AD LOOKANGL
EXTEND
## Page 819
BZMF +3
+5 CAF DEC99
TS LOOKANGL
+3 EXTEND # RESCALE FORVEL TO 1 F/S/BIT
DCA FORVEL
DXCH MPAC
CAF FVSCALE
TC SHORTMP
CA MPAC +1 # ROUND TO NEAREST F/S
DOUBLE
TS Q
CAF ZERO
ADS MPAC
LXCH MPAC # TRUNCATE AT 99 F/S
CAF DEC99
TC BANKCALL
CADR LIMITSUB
TS FORVDSKY
CA MPAC +5
TC BANKJUMP
DEC75 DEC 75
DEC99 DEC 99
180DEGS DEC 180
1/2DEG DEC .00278
FVSCALE DEC 328.084 B-9 # SCALES 2(5) M/CS TO 1 F/S/BIT
1406POO TC POODOO
OCT 21406
1406ALM TC ALARM
OCT 01406
TCF RATESTOP
OVFDESC EXTEND
QXCH OVFRET
TC ALARM
OCT 01410
## Page 820
INHINT # MUST USE INHINT, IBNKCALL, RELINT
TC IBNKCALL # BECAUSE DAP COULD INTERRUPT STOPRATE AND
FCADR STOPRATE # BECAUSE WE COME FROM P66HZ VIA BANKCALL
RELINT
CA ZERO
TS OVFIND
TC OVFRET
# ****************************************************************************************************************
# SPECIALIZED "PHASCHNG" SUBROUTINE
# ****************************************************************************************************************
FASTCHNG = SERVCHNG
# ****************************************************************************************************************
# PARAMETER TABLE INDIRECT ADDRESSES
# ****************************************************************************************************************
RDG = RBRFGX
VDG = VBRFGX
ADG = ABRFGX
VDG2TTF = VBRFG*
ADG2TTF = ABRFG*
JDG2TTF = JBRFG*
# ****************************************************************************************************************
# LUNAR LANDING CONSTANTS
# ***************************************************************************************************************
TABLTTFL ADRES TABLTTF +3 # ADDRESS FOR REFERENCING TTF TABLE
TTFSCALE = BIT12
TSCALINV = BIT4
-DEC103 DEC -103
P64DB OCT 00155 # 0.3 DEGREES SCALED AT CDU SCALING
+DEC99 DEC +99
TREDESCL DEC -.08
## Page 821
ELEACH DEC .01746 # ONE DEGREE
AZEACH = ELEACH # ONE DEGREE
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
BANK 22
SETLOC LANDCNST
BANK
COUNT* $$/F2DPS
HIGHESTF 2DEC 4.34546769 B-12
GSCALE 2DEC 100 B-11
2/3DP 2DEC .333333333
3/8DP 2DEC .375
3/4DP 2DEC .750
DEPRCRIT 2DEC -.02 B-1
# ****************************************************************************************************************
# ****************************************************************************************************************
Computing file changes ...