Apollo-11/TPI_SEARCH.s

558 lines
10 KiB
ArmAsm
Raw Normal View History

2016-07-07 08:47:26 +00:00
# Copyright: Public domain.
# Filename: TPI_SEARCH.agc
# Purpose: Part of the source code for Colossus 2A, AKA Comanche 055.
# It is part of the source code for the Command Module's (CM)
# Apollo Guidance Computer (AGC), for Apollo 11.
# Assembler: yaYUL
# Contact: Ron Burkey <info@sandroid.org>.
# Website: www.ibiblio.org/apollo.
# Pages: 551-561
# Mod history: 2009-05-15 RSB Adapted from the Colossus249/ file of the
# same name, using Comanche055 page images.
# 2009-05-20 RSB Corrections: On p. 551, "SETLOC P17S" -> P17S1.
#
# 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 055 of AGC program Comanche by NASA
# 2021113-051. 10:28 APR. 1, 1969
#
# This AGC program shall also be referred to as
# Colossus 2A
# Page 551
# TPI SEARCH
#
# PROGRAM DESCRIPTION S17.1 AND S17.2
#
# FUNCTIONAL DESCRIPTION
#
# THE TPI SEARCH ROUTINE DETERMINES THE MINIMUM TOTAL VELOCITY TRANSFER TRAJECTORY FROM A GIVEN TPI
# MANEUVER TIME WITHIN THE CONSTRAINT OF A SAFE PERICENTER. THIS VELOCITY IS THE SUM OF THE IMPULSIVE VELOCITIES
# FOR THE TPI AND TPF MANEUVERS.
#
# THE S17.1 ROUTINE EXTRAPOLATES THE STATE VECTORS OF BOTH VEHICLES TO THE TPI TIME AND COMPUTES THE
# RELATIVE PHASE ANGLE BETWEEN THE VEHICLES, THE ALTITUDE DIFFERENCE (I.E., THE MAGNITUDE DIFFERENCE OF THE
# POSITION VECTORS) AND SELECTS A SEARCH SECTOR BASED ON THE SIGN OF THE ALTITUDE DIFFERENCE.
#
# THE S17.2 ROUTINE FURTHER DEFINES THE SEARCH SECTOR BY COMPUTING ANGULAR LIMITS AND USES THE TIME THETA
# SUBROUTINE TO COMPUTE THE SEARCH START AND END TIMES. THE SEARCH IS THEN MADE IN AN ITERATIVE LOOP USING THE
# LAMBERT SUBROUTINE TO COMPUTE TEH VELOCITIES REQUIRED AT TPI TIME AND AT TPF TIME. EXIT FROM THE SEARCH LOOP
# IS MADE WHEN SOLUTION CRITERIA ARE MET (NORMAL EXIT) OR AS SOON AS IT IS EVIDENT THAT NO SOLUTION EXISTS IN
# THE SECTOR SEARCHED.
#
# CALLING SEQUENCE
#
# BOTH ROUTINES ARE CALLED IN INTERPRETIVE CODE AND RETURN VIA QPRET. S17.1 HAS ONLY A NORMAL EXIT.
# S17.2 RETURNS VIA QPRET FOR NORMAL EXIT AND TO ALARUMS FOR ERROR EXIT.
#
# SUBROUTINES CALLED
#
# CSMCONIC
# LEMCONIC
# TIMETHET
# INITVEL
BANK 36
SETLOC P17S1
BANK
COUNT 36/TPI
EBANK= RACT3
# **** TEMPORARY ****
HPE 2DEC 157420.0 B-29 # EARTH'S MIN. PERICENTER ALTITUDE 85 N.M.
HPL 2DEC 10668.0213 B-29 # MOON'S MIN. PERICENTER ALTITUDE 35000 FT.
CDSEC 2DEC 40000
CLSEC 2DEC 15000
PIINVERS 2DEC .3183098862
SEC1THET 2DEC .1944444444
# Page 552
SEC2THET 2DEC .9166666667
MANYFEET 2DEC -1.0 B-2
LIMVEL 2DEC .6096 E-2 B-7 # 2FPS
DFTMOON 2DEC .1524 E3 B-29 # 500 FEET
DP-.002 2DEC 0.002
SETLOC P17S
BANK
S17.1 STQ DLOAD
NORMEX
TTPI
STCALL TDEC1 # ADVANCE PASSIVE VEHICLE TO TPI
LEMCONIC
CALL
LEMSTORE
DLOAD
TTPI
STCALL TDEC1 # ADVANCE ACTIVE VEHICLE TO TPI
CSMCONIC
CALL
CSMSTORE
VLOAD
RACT3
ABVAL PDVL # /RA/ 0D PL 2D
RPASS3
UNIT PDDL # UNIT RP 0D PL 6D
BDSU SET
36D # /RP/ -/RA/
KFLAG # OFF = +
BMN CLEAR
+2
KFLAG # ON = -
STOVL DELHITE
0D
VXV UNIT
VPASS3
STOVL E2 # ALMOST IT SAVE FOR 17.2
RACT3
PUSH VPROJ
E2
VSL2 BVSU # RPA
UNIT DOT
0D
SL1 ACOS
PDVL
VXV DOT
# Page 553
RACT3
E2
PDDL SIGN
STADR
STODL THETZERO # CENTRAL ANGLE
X1
STCALL XRS # SAVE INDICES FOR FURTHER USE
NORMEX # += ACTIVE AHEAD -= ACTIVE BEHIND
S17.2 STQ VLOAD # COMPUTE SEARCH SECTOR LIMITS
QTEMP
RACT3
UNIT DOT
E2
ABS SQRT
SL1 DAD
DP-.002 # ADD .002 RADIANS TO IT
BON DCOMP # GIVES CORRECT SINE, COSINE MUST BE
KFLAG # COMP. ADD .5 FOR ANGLE
+1
# PHI(0)=180-(-(THETAZERO +K5IT)), PHI(I)=180-(-THETAZERO+K2IT))
# SIN(180-ALPHA)=SIN(ALPHA) ETC
DMP SETPD
PIINVERS # REVOLUTIONARY HERES TWO IT
0D
PUSH DSU
THETZERO
STORE IT # PHI(I) , -(THETZERO + K2IT)
PDDL PUSH
SR1 DAD
DAD PUSH # PHI(0) , -(THETZERO + K5IT)
SIN SET
RVSW
STODL SNTH
COS BMN
+2
DCOMP
STODL CSTH
XRS
STOVL X1
RPASS3
VSR*
0,2
STOVL RVEC
VPASS3
VSR*
0,2
STCALL VVEC
TIMETHET
DLOAD # SAVE START TIME AND GET END TIME
T
# Page 554
STORE TF
STODL TFO
IT
PUSH SIN
STODL SNTH
COS BMN
+2
DCOMP
STORE CSTH
LXA,1 CALL
XRS
TIMETHET
# INITIALIZE LOOP
DLOAD CLEAR
T
ITSWICH
STODL TFI # SAVE TIME FOR LOOP TEST
DPPOSMAX
STODL DELVEE
MANYFEET
STODL HP
SEC1THET # 70 DEGREES
BON DLOAD
KFLAG
+2
SEC2THET # 330 DEGREES
STCALL THETL
CONCAUL
BIS DLOAD SR1
CSTH
STODL COSTH
SNTH
SR1
STCALL SINTH # GET 4 QUADRANT THETA
ARCTRIG
BPL DAD
+2
DPPOSMAX # PUT THETA BETWEEN 0,1
BDSU PDDL
THETL
TF
DSU SIGN # FAST TIMES
TFI
BMN
RNGETEST # TIME MUST HAVE A STOP
# ADVANCE PASSIVE FOR TARGET VECTOR
CONCAUL DLOAD
TTPI
DAD BON
TF
# Page 555
AVFLAG
ADVCSM
STCALL TDEC1
LEMCONIC
GOTO
JUNCT3
ADVCSM STCALL TDEC1
CSMCONIC
# SAVE BACK VALUES OF HP AND DELVEE
JUNCT3 VLOAD
VATT
STOVL VPASS4
RATT
STORE RPASS4
STODL RTARG
TF
STODL DELLT4
HP
STODL HPO
DELVEE
STODL DELVEO
# PREPARE FOR LAMBERT
TTPI
STODL INTIME
XRS
STODL RTX1
HI6ZEROS
SETPD PDDL
0D
EPSFOUR
PDVL
RACT3
STOVL RINIT
VACT3
STCALL VINIT
INITVEL
# COMPUTE H ET CETERA
VLOAD VSU
VTPRIME
VPASS4
ABVAL PUSH
STOVL RELDELV # /V2-VP(TPI+TF)/
DELVEET3 # V1-VA
ABVAL # /V1-VA/
STORE MAGVTPI
DAD STADR
STODL DELVEE
XRS
STOVL X1
VIPRIME
# Page 556
VSR*
0,2
STOVL VVEC
RACT3
VSR*
0,2
STCALL RVEC
PERIAPO
LXA,2 DLOAD
XRS +1
SL*
0,2
STORE HP
# ITSWICH DENOTES INTERPOLATION -- SOLUTION ACCEPTANCE IS FORCED
BON DLOAD
ITSWICH
ENDEN
HPERMIN
DSU BMN
HP
HALFSAFE
PDDL DSU # WAS PERICENTER ALT SAFE
HPERMIN
HPO
BMN DSU # (HPLIM-HPO)-(HPLIM-HP)=HP-HPO
INTERP # SOLUTION AT HAND
BMN DLOAD
ALARUMS # IT'S GETTING WORSE -- SOUND THE ALARM
CDSEC
JUNCT1 BOFF DCOMP # OFF IS PLUS, ON IS MINUS
KFLAG
+1
STORE DELTEE
JUNCT2 DLOAD DAD
DELTEE
TF
STCALL TF
BIS # RECYCLE
INTERP SET DSU # HP-HPO
ITSWICH
NORM PDDL
X1
DFTMOON
DAD DSU
HPERMIN
HP
NORM SR1
X2
XSU,2 DDV
X1
# Page 557
DMP SR*
DELTEE
0 -1,2
STCALL DELTEE
JUNCT2
HALFSAFE PDDL DSU # SAVE HP-HPLIM FOR POSSIBLE
DELVEE
DELVEO # SAVE THIS TOO
PUSH ABS
DSU BMN
LIMVEL # 2 FT PS
ENDEN
DLOAD DSU
HPERMIN
HPO
PDDL
BMN DLOAD
LRGRDVO
BPL DLOAD
INTERP
DELTEE
SR1 DCOMP
STCALL DELTEE
JUNCT2
LRGRDVO DLOAD
BMN DLOAD
JUNCT2
CLSEC
GOTO
JUNCT1
# TIME RAN OUT ASSUME SOLUTION IF SAVE PERICENTER
RNGETEST DLOAD DSU
HP
HPERMIN
BMN DLOAD
ALARUMS
TF
DSU
DELTEE
STORE TF # TIME OF SOLUTION
ENDEN VLOAD
VTPRIME
DOT PDDL # SG2 WITH MAGNITUDE
RPASS4
RELDELV
SIGN STADR # NOW SIGN(RELDELV)=SIGN(SG2)
STCALL RELDELV
TRANSANG # COMPUTE OMEGA T, CENTRAL ANGLE
VLOAD DOT
RACT3
# Page 558
VIPRIME # SG1
SIGN BPL # IF POSITIVE THEN SG1 = SG2 OTHERWISE
RELDELV
USEKAY # SIGN(SG2-SG1)=SIGN(SG2)=SIGN(RELDELV)
SLOAD DCOMP
DECTWO
SIGN BPL
RELDELV
NEXUS
DCOMP GOTO
USEKAY +4
USEKAY SLOAD BON
DECTWO
KFLAG
NEXUS
DSU
P21ONENN
NEXUS STODL NN1
HP
STCALL POSTTPI
QTEMP
BANK 07
SETLOC XANG
BANK
COUNT 07/XANG
# CENTRAL ANGLE SUBROUTINE
#
# THIS SUBROUTINE COMPUTES THE CENTRAL ANGLE OF TRAVEL OF THE
# PASSIVE VEHICLE DURING THE TRANSFER.
TRANSANG STQ SETPD
SUBEXIT
0
LXA,1 LXA,2
XRS
XRS +1
VLOAD VSR*
VPASS4
0,2
STODL* VVEC
MUTABLE +2,1
PDVL VSR* # SQRT MU (+18 OR +15) 00D
RPASS4
0,2
ABVAL PDDL* # MAGNITUDE OF R (+29 OR +27) 02D
MUTABLE,1
PDVL VSQ # 1/MU (+34 OR +28) 04D
VVEC
NORM DMPR # PUSH LIST AT 02D
X1
# Page 559
DMP SRR*
02D
0 -3,1
BDSU # R V**/MU (+6)
D1/32
NORM PDDL
X1 # (2 - R V**/MU) (+6-N)
SR1R DDV # MAGNITUDE OF R (+30 OR +28)
SL* PUSH # R/(2 - R V**/MU) (+29 OR +27) 02D
0 -5,1
SR1 SQRT
DMP
NORM PDDL # ASUBP*** 00D
X1
SR1 DDV
DMP SL*
TF
0,1
PDDL NORM
2PISC
X1
PDDL DDV
SL*
0 -3,1 # CENTANG = (SQRT(MU/ASUP***)TF)
STCALL CENTANG # IN REVOLUTIONS B-0
SUBEXIT
BANK 35
SETLOC P17S1
BANK
COUNT 35/P17
# TPI SEARCH DISPLAY ROUTNE
P17 TC AVFLAGA # AVFLAG = CSM, SET TRACK + UPDATE FLAGS
TC P17.1
P77 TC AVFLAGP # AVFLAG = LEM, SET TRACK + UPDATE FLAGS
P17.1 TC P20FLGON # SET UPDATE FLAG
CAF V06N37 # DISPLAY TTPI TIME
TC VNP00H
TC INTPRET
CLEAR CALL
UPDATFLG
S17.1 # UPDATE STATE VECTORS TO TTPI
SET AXT,1
UPDATFLG
DEC 2 # DELTA H = 2 K POSITIVE, KFLAG OFF
BOFF AXT,1
KFLAG
+2
DEC 1 # DELTA H = 1 K NEGATIVE, KFLAG ON
# Page 560
SXA,1 EXIT
OPTION2
CAF V06N72 # DISPLAY PHI, DELTA H, SEARCH OPTION K
TC VNCOMP17
TC INTPRET
CLEAR SET
UPDATFLG
KFLAG
SLOAD DSU
OPTION2 # RESET KFLAG ON FOR OPTION =1
P21ONENN # OFF FOR OPTION =2
BHIZ CLEAR
+2
KFLAG
SLOAD BHIZ
XRS +1
+4
DLOAD GOTO
HPL
P17.2
DLOAD
HPE
P17.2 STCALL HPERMIN
S17.2
SET EXIT
UPDATFLG
P17.3 CAF V06N58 # DISPLAY DELTA VTPI, DELTA VTPF, AND H
TC VNCOMP17
CAF V06N55 # DISPLAY PERICENTER CODE AND CENTRAL ANG,
TC BANKCALL
CADR GOFLASHR
TC GOTOP00H # TERMINATE PROGRAM
TC GOTOP00H # END PROGRAM
TC P17.1 # RECYCLE WITH NEW TTPI OR SEARCH OPTION
CAF TWO # BLANK R2
TC BLANKET
TCF ENDOFJOB
EBANK= RTRN
VNCOMP17 EXTEND
QXCH QSAVED
TS VERBNOUN
CA VERBNOUN
TCR BANKCALL
CADR GOFLASH
TC -3 # TERMINATE ILLEGAL REDISPLAY
TC QSAVED # PROCEED
CS MPAC # RECYCLE WITH NEW TPI TIME
AD BIT6 # OR PROCEED WITH NEW SEARCH OPTION
EXTEND
# Page 561
BZF P17.1
TC VNCOMP17 +3
ALARUMS SET EXIT
UPDATFLG
TC ALARM
OCT 00124 # NO SAFE PERICENTER IN THIS SECTOR
CAF V05N09
TC VNCOMP17
TC GOTOP00H # PROCEED ILLEGAL TERMINATE PROGRAM
V06N72 VN 0672