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
TIME_OF_FREE_FALL.agc
### FILE="Main.annotation"
## Copyright: Public domain.
## Filename: TIME_OF_FREE_FALL.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: 1373-1388
## Mod history: 2009-05-10 SN (Sergio Navarro). Started adapting
## from the Colossus249/ file of the same
## name, using Comanche055 page images.
## 2010-08-29 JL Fixed indentation, whitespace.
## 2016-12-22 RSB Proofed comment text using octopus/ProoferComments
## and corrected the errors found.
## 2017-01-20 RSB Fixed comment-text errors noted while diff'ing
## vs Colossus 249.
## 2017-03-14 RSB Comment-text fixes noted in proofing Luminary 116.
## 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 1373
# THE TFF SUBROUTINES MAY BE USED IN EITHER EARTH OR MOON CENTERED COORDINATES. THE TFF ROUTINES NEVER
# KNOW WHICH ORIGIN APPLIES. IT IS THE USER WHO KNOWS, AND WHO SUPPLIES RONE, VONE AND 1/SQRT(MU) AT THE
# APPROPRIATE SCALE LEVEL FOR THE PROPER PRIMARY BODY.
#
# EARTH ORIGIN POSITION -29 METERS
# VELOCITY -7 METERS/CENTISECOND
# 1/SQRT(MU) +17 SQRT(CS SQ/METERS CUBED)
#
# MOON ORIGIN POSITION -27 METERS
# VELOCITY -5 METERS/CENTISECONDS
# 1/SQRT(MU) +14 SQRT(CS SQ/METERS CUBED)
#
# ALL DATA PROVIDED TO AND RECEIVED FROM ANY TFF SUBROUTINE WILL BE AT ONE OF THE LEVELS ABOVE. IN ALL CASES,
# THE FREE FALL TIME IS RETURNED IN CENTISECONDS AT (-28). PROGRAM TFF/CONIC WILL GENERATE VONE/RTMU AND
# LEAVE IT IN VONE' AT (+10) IF EARTH ORIGIN AND (+9) IF MOON ORIGIN.
#
# THE USER MUST STORE THE STATE VECTOR IN RONE, VONE AND MU IN THE FORM 1/SQRT(MU) IN TFF/RTMU
# AT THE PROPER SCALE BEFORE CALLING TFF/CONIC. SINCE RONE, VONE ARE IN THE EXTENDED VERB STORAGE AREA,
# THE USER MUST ALSO LOCK OUT THE EXTENDED VERBS, AND RELEASE THEM WHEN FINISHED.
#
# PROGRAMS CALC/TFF AND CALC/TPER ASSUME THAT THE TERMINAL RADIUS IS LESS THAN THE PRESENT
# RADIUS. THIS RESTRICTION CAN BE REMOVED BY A 15 W CODING CHANGE, BUT AT PRESENT IT IS NOT DEEMED NECESSARY.
#
# THE FOLLOWING ERASABLE QUANTITIES ARE USED BY THE TFF ROUTINES, AND ARE LOCATED IN THE PUSH LIST.
#
# BELOW E: IS USED FOR EARTH ORIGIN SCALE
# M: IS USED FOR MOON ORIGIN SCALE
#
#TFFSW = 119D BIT1 0 = CALCTFF 1 = CALCTPER
TFFDELQ = 10D # Q2-Q1 E: (-16) M: (-15)
RMAG1 = 12D # ABVAL(RN) M E: (-29) M: (-27)
#RPER = 14D PERIGEE RADIUS M E: (-29) M: (-27)
TFFQ1 = 14D # R.V / SQRT(MUE) E: (-16) M: (-15)
#SDELF/2 SIN(THETA) /2
CDELF/2 = 14D # COS(THETA) /2
#RAPO = 16D APOGEE RADIUS M E: (-29) M: (-27)
NRTERM = 16D # TERMINAL RADIUS M E: (-29+NR)
# M: (-27+NR)
RTERM = 18D # TERMINAL RADIUS M E: (-29) M: (-27)
TFFVSQ = 20D # -(V SQUARED/MU) 1/M E: (20) M: (18)
TFF1/ALF = 22D # SEMI MAJ AXIS M E: (-22-2 NA)
# M: (-20-2 NA)
TFFRTALF = 24D # SQRT(ALFA) E:(10+NA) M: (9+NA)
TFFALFA = 26D # ALFA 1/M E:(26-NR) M: (24-NR)
TFFNP = 28D # SEMI LATUS RECTUM M E: (-38+2 NR)
# M: (-36+2 NR)
TFF/RTMU = 30D # 1/SQRT(MU) E: (17) M: (14)
NRMAG = 32D # PRESENT RADIUS M E: (-29+NR)
# M: (-27+NR)
TFFX = 34D #
TFFTEM = 36D # TEMPORARY
## Page 1374
# REGISTERS S1, S2 ARE UNTOUCHED BY ANY TFF SUBROUTINE
# INDEX REGISTERS X1, X2 ARE USED BY ALL TFF SUBROUTINES. THEY ARE ESTAB-
# LISHED IN TFF/CONIC AND MUST BE PRESERVED BETWEEN CALLS TO SUBSEQUENT
# SUBROUTINES.
# -NR C(X1) = NORM COUNT OF RMAG
# -NA C(X2) = NORM COUNT OF SQRT(ABS(ALFA))
## Page 1375
# SUBROUTINE NAME: TFFCONIC DATE: 01.29.67
# MOD NO: 0 LOG SECTION: TIME OF FREE FALL
# MOD BY: RR BAIRNSFATHER
# MOD NO: 1 MOD BY: RR BAIRNSFATHER DATE: 11 APR 67
# MOD NO: 2 MOD BY: RR BAIRNSFATHER DATE: 21 NOV 67 ADD MOON MU.
# MOD NO: 3 MOD BY: RR BAIRNSFATHER DATE: 21 MAR 68 ACCEPT DIFFERENT EARTH/MOON SCALES
#
# FUNCTIONAL DESCRIPTION: THIS SUBROUTINE IS CALLED TO COMPUTE THOSE CONIC PARAMETERS REQUIRED BY THE TFF
# SUBROUTINES AND TO ESTABLISH THEM IN THE PUSH LIST AREA. THE PARAMETERS ARE LISTED UNDER OUTPUT.
# THE EQUATIONS ARE
# - - -
# H = RN*VN ANGULAR MOMENTUM
# - -
# LCP = H.H / MU SEMI LATUS RECTUM
# - -
# ALFA = 2/RN - VN.VN / MU RECIPROCAL SEMI MAJ AXIS, SIGNED
#
# AND ALFA IS POS FOR ELLIPTIC ORBITS
# 0 FOR PARABOLIC ORBITS
# NEG FOR HYPERBOLIC ORBITS.
# SUBROUTINE ALSO COMPUTES AND SAVES RMAG.
#
# CALLING SEQUENCE:
# TFFCONIC EXPECTS CALLER TO ENTER WITH CORRECT GRAVITATIONAL CONSTANT IN MPAC, IN THE FORM
# 1/SQRT(MU). PROGRAM WILL SAVE IN TFF/RTMU. THE SCALE IS DETERMINED BY WHETHER EARTH OR MOON
# ORIGIN IS USED. THE CALLER MUST LOCK OUT THE EXTENDED VERBS BEFORE PROVIDING STATE VECTOR IN RONE,
# VONE AT PROPER SCALE. THE EXTENDED VERBS MUST BE RESTORED WHEN THE CALLER IS FINISHED USING THE
# TFF ROUTINES.
#
# ENTRY POINT TFFCONMU EXPECTS THAT TFF/RTMU IS ALREADY LOADED.
#
# TO SPECIFY MU: DLOAD CALL IF MU ALREADY STORED: CALL
# YOURMU 1/RTMU E:(17) M:(14) TFFCONMU
# TFFCONIC
# PUSHLOC = PDL+0, ARBITRARY IF LEQ 18D
#
# SUBROUTINES CALLED: NONE
#
# NORMAL EXIT MODES: RVQ
#
# ALARMS: NONE
#
# OUTPUT: THE FOLLOWING ARE STORED IN THE PUSH LIST AREA.
# RMAG1 E:(-29) M:(-27) M RN, PRESENT RADIUS LENGTH.
# NRMAG E:(-29+NR) M RMAG, NORMALIZED
# M:(-27+NR)
# X1 -NR, NORM COUNT
# TFFNP E:(-38+2NR) M LCP, SEMI LATUS RECTUM, WEIGHTED BY NR. FOR VGAMCALC
# M:(-36+2NR)
# TFF/RTMU E:(17) M:(14) 1/SQRT(MU)
# TFFVSQ E:(20) M:(18) 1/M -(V SQ/MU): PRESENT VELOCITY, NORMLIZED. FOR VGAMCALC
# TFFALFA E:(26-NR) 1/M ALFA, WEIGHTED BY NR
# M:(24-NR)
# TFFRTALF E:(10+NA) SQRT(ALFA), NORMALIZED
# M:(9+NA)
## Page 1376
# X2 -NA, NORM COUNT
# TFF1/ALF E:(-22-2NA) SIGNED SEMI MAJ AXIS, WEIGHTED BY NA
# M:(-20-2NA)
# PUSHLOC AT PDL+0
#
# THE FOLLOWING IS STORED IN GENERAL ERASABLE
# VONE' E:(10) M:(9) V/RT(MU), NORMALIZED VELOCITY
#
# ERASABLE INITIALIZATION REQUIRED:
# RONE E:(-29) M:(-27) M STATE VECTOR LEFT BY CALLER
# VONE E:(-7) M:(-5) M/CS STATE VECTOR LEFT BY CALLER
# TFF/RTMU E:(17) M:(14) 1/RT(CS SQ/M CUBE) IF ENTER VIA TFFCONMU.
#
# DEBRIS: QPRET, PDL+0 ... PDL+3
BANK 33
SETLOC TOF-FF
BANK
COUNT* $$/TFF
TFFCONIC STORE TFF/RTMU # 1/SQRT(MU) E:(17) M:(14)
TFFCONMU VLOAD UNIT # COME HERE WITH TFFRTMU LOADED.
RONE # SAVED RN. M E:(-29) M:(-27)
PDDL # UR/2 TO PDL+0, +5
36D # MAGNITUDE
STORE RMAG1 # M E:(-29) M:(-27)
NORM
X1 # -NR
STOVL NRMAG # RMAG M E:(-29+NR) M:(-27+NR)
VONE # SAVED VN. M/CS E:(-7) M:(-5)
VXSC
TFF/RTMU # E:(17) M:(14)
STORE VONE' # VN/SQRT(MU) E:(10) M:(9)
VXSC VXV
NRMAG # E:(-29+NR) M:(-27+NR)
# UR/2 FROM PDL
VSL1 VSQ # BEFORE: E:(-19+NR) M:(-18+NR)
STODL TFFNP # LC P M E:(-38+2NR) M:(-36+2NR)
# SAVE ALSO FOR VGAMCALC
TFF1/4
DDV PDVL # (2/RMAG) 1/M E:(26-NR) M:(24-NR)
NRMAG # RMAG M E:(-29+NR) M:(-27+NR)
VONE' # SAVED VN. E:(10) M:(9)
VSQ DCOMP # KEEP MPAC+2 HONEST FOR SQRT.
STORE TFFVSQ # -(V SQ/MU) E:(20) M:(18)
# SAVE FOR VGAMCALC
SR* DAD
## Page 1377
0 -6,1 # GET -VSQ/MU E:(26-NR) M:(24-NR)
STADR
# 2/RMAG FROM PDL+2
STORE TFFALFA # ALFA 1/M E:(26-NR) M:(24-NR)
SL* PUSH # TEMP SAVE ALFA E:(20) M:(18)
0 -6,1
ABS SQRT # E:(10) M:(9)
NORM
X2 # X2 = -NA
STORE TFFRTALF # SQRT( ABS(ALFA) ) E:(10+NA) M:(9+NA)
DSQ SIGN # NOT SO ACCURATE, BUT OK
# ALFA FROM PDL+2 E:(20) M:(18)
BZE BDDV # SET 1/ALFA =0, TO SHOW SMALL ALFA
+2
TFF1/4
+2 STORE TFF1/ALF # 1/ALFA E:(-22-2NA) M:(-20-2NA)
DUMPCNIC RVQ
# 39 W
## Page 1378
# SUBROUTINE NAME: TFFRP/RA DATE: 01.17.67
# MOD NO: 0 LOG SECTION: TIME OF FREE FALL
# MOD BY: RR BAIRNSFATHER
# MOD NO: 1 MOD BY: RR BAIRNSFATHER DATE: 11 APR 67
# MOD NO: 2 MOD BY: RR BAIRNSFATHER DATE: 21 MAR 68 ACCEPT DIFFERENT EARTH/MOON SCALES
# ALSO IMPROVE ACCURACY OF RAPO.
#
# FUNCTIONAL DESCRIPTION: USED BY CALCTPER AND TFF DISPLAYS TO CALCULATE PERIGEE RADIUS AND ALSO
# APOGEE RADIUS FOR A GENERAL CONIC.
# PROGRAM GIVES PERIGEE RADIUS AS APOGEE RADIUS IS GIVEN BY
# RP = P/(1+E) RA = (1+E) / ALFA
# WHERE 2
# E = 1 - P ALFA
# IF RA IS NEGATIVE OR SHOWS DIVIDE OVERFLOW, THEN RA = POSMAX BECAUSE
# 1. APOGEE RADIUS IS NOT MEANINGFUL FOR HYPERBOLA
# 2. APOGEE RADIUS IS NOT DEFINED FOR PARABOLA
# 3. APOGEE RADIUS EXCEEDS THE SCALING FOR ELLIPSE.
#
# THIS SUBROUTINE REQUIRES THE SIGNED RECIPROCAL SEMI MAJ AXIS, ALFA, AND SEMI LATUS RECTUM AS DATA.
#
# CALLING SEQUENCE: CALL
# TFFRP/RA
# PUSHLOC = PDL+0, ARBITRARY IF LEQ 10D
# C(MPAC) UNSPECIFIED
#
# SUBROUTINES CALLED: NONE
#
# NORMAL EXIT MODE: RVQ
# IF ELLIPSE, WITHIN NORMAL SCALING, RAPO IS CORRECT.
# OTHERWISE, RAPO = POSMAX.
#
# ALARMS: NONE
#
# OUTPUT: STORED IN PUSH LIST AREA. SCALE OF OUTPUT AGREES WITH DATA SUPPLIED TO TFF/CONIC.
# RPER E:(-29) M:(-27) M PERIGEE RADIUS DESTROYED BY CALCTFF/CALCTPER, TFFTRIG.
# RAPO E:(-29) M:(-27) M APOGEE RADIUS WILL BE DESTROYED BY CALCTFF/CALCTPER
# PUSHLOC AT PDL+0
#
# ERASABLE INITIALIZATION REQUIRED:
# TFFALFA E:(26-NR) M 1/SEMI MAJ AXIS LEFT BY TFFCONIC
# M:(24-NR)
# TFFNP E:(-38+2NR) M LC P, SEMI LATUS RECTUM LEFT BY TFFCONIC
# M:(-36+2NR)
# X1 -NR, NORM COUNT OF RMAG LEFT BY TFFCONIC
# X2 -NA, NORM COUNT OF ALFA LEFT BY TFFCONIC
#
# DEBRIS: QPRET, PDL+0 ... PDL+1
## Page 1379
RAPO = 16D # APOGEE RADIUS M E:(-29) M:(-27)
RPER = 14D # PERIGEE RADIUS M E:(-29) M:(-27)
TFFRP/RA DLOAD DMP
TFFALFA # ALFA 1/M E:(26-NR) M:(24-NR)
TFFNP # LC P M E:(-38+2NR) M:(-36+2NR)
SR* DCOMP # ALFA P (-12+NR)
0 -8D,1 # ALFA P (-4)
DAD ABS # (DCOMP GIVES VALID TP RESULT FOR SQRT)
# (ABS PROTECTS SQRT IF E IS VERY NEAR 0)
DP2(-4)
SQRT DAD # E SQ = (1- P ALFA) (-4)
TFF1/4
PUSH BDDV # (1+E) (-2) TO PDL+0
TFFNP # LCP M E:(-38+2NR) M:(-36+2NR)
SR* SR* # (DOES SR THEN SL TO AVOID OVFL)
0,1 # X1=-NR
0 -7,1 # (EFFECTIVE SL)
STODL RPER # PERIGEE RADIUS M E:(-29) M:(-27)
# (1+E) (-2) FROM PDL+0
DMP BOVB
TFF1/ALF # E:(-22-2NA) M:(-20-2NA)
TCDANZIG # CLEAR OVFIND, IF ON.
BZE SL*
MAXRA # SET POSMAX, IF ALFA=0
0 -5,2 # -5+NA
SL* BOV
0,2
MAXRA # SET POSMAX IF OVFL.
BPL # CONTINUE WITH VALID RAPO.
+3
MAXRA DLOAD # RAPO CALC IS NOT VALID. SET RAPO =
NEARONE # POSMAX AS A TAG.
+3 STORE RAPO # APOGEE RADIUS M E:(-29) M:(-27)
DUMPRPRA RVQ
# 30 W
## Page 1380
# SUBROUTINE NAME: CALCTPER / CALCTFF DATE: 01.29.67
# MOD NO: 0 LOG SECTION: TIME OF FREE FALL
# MOD BY: RR BAIRNSFATHER
# MOD NO: 1 MOD BY: RR BAIRNSFATHER DATE: 21 MAR 67
# MOD NO: 2 MOD BY: RR BAIRNSFATHER DATE: 14 APR 67
# MOD NO: 3 MOD BY: RR BAIRNSFATHER DATE: 8 JUL 67 NEAR EARTH MUE AND NEG TFF (GONEPAST)
# MOD NO: 4 MOD BY: RR BAIRNSFATHER DATE: 21 NOV 67 ADD VARIABLE MU.
# MOD NO: 5 MOD BY: RR BAIRNSFATHER DATE: 21 MAR 68 ACCEPT DIFFERENT EARTH/MOON SCALES
#
# FUNCTIONAL DESCRIPTION: PROGRAM CALCULATES THE FREE-FALL TIME OF FLIGHT FROM PRESENT POSITION RN AND
# VELOCITY VN TO A RADIUS LENGTH SPECIFIED BY RTERM, SUPPLIED BY THE USER. THE POSITION VECTOR
# RN MAY BE ON EITHER SIDE OF THE CONIC, BUT RTERM IS CONSIDERED ON THE INBOUND SIDE.
# THE EQUATIONS ARE
#
# Q2 = -SQRT(RTERM (2-RTERM ALFA) - LCP) (INBOUND SIDE)) LEQ +- LCE/SQRT(ALFA)
# - -
# Q1 = RN.VN / SQRT(MU) LEQ +- LCE/SQRT(ALFA)
#
# Z = NUM / DEN LEQ +- 1/SQRT(ALFA)
#
# WHERE, IF INBOUND
# NUM = RTERM -RN LEQ +- 2 LCE/ALFA
# DEN = Q2+Q1 LEQ +- 2 LCE/SQRT(ALFA)
#
# AND, IF OUTBOUND
# NUM = Q2-Q1 LEQ +- 2 LCE/SQRT(ALFA)
# DEN = 2 - ALFA (RTERM + RN). LEQ +- 2 LCE
#
# IF ALFA ZZ < 1.0 (FOR ALL CONICS EXCEPT ELLIPSES HAVING ABS(DEL ECC ANOM) G 90 DEG)
# THEN X = ALFA Z Z
# AND TFF = (RTERM +RN -2 ZZ T(X) ) Z/SQRT(MU)
# EXCEPT IF ALFA PNZ, AND IF TFF NEG,
# THEN TFF = 2 PI /(ALFA SQRT(ALFA)) + TFF
# OR IF ALFA ZZ GEQ 1.0 (FOR ELLIPSES HAVING ABS(DEL ECC ANOM) GEQ 90 DEG)
# THEN X = 1/ALFA Z Z
# AND TFF = (PI/SQRT(ALFA) -Q2 +Q1 +2(X T(X) -1) /ALFA Z) /ALFA SQRT(MU)
# WHERE T(X) IS A POLYNOMIAL APPROXIMATION TO THE SERIES
# 2 3 2
# 1/3 - X/5 + X /7 - X /9 ... (X < 1.0)
#
# CALLING SEQUENCE: TIME TO RTERM TIME TO PERIGEE
# CALL CALL
# CALCTFF CALCTPER
# C(MPAC) = TERMNL RAD M C(MPAC) = PERIGEE RAD M
# FOR EITHER, E:(-29) M:(-27)
# FOR EITHER, PUSHLOC = PDL+0, ARBITRARY IF LEQ 8D.
## Page 1381
#
# SUBROUTINES CALLED: T(X), VIA RTB
#
# NORMAL EXIT MODE: RVQ
# HOWEVER, PROGRAM EXITS WITH ONE OF THE FOLLOWING VALUES FOR TFF (-28) CS IN MPAC. USER MUST STORE.
# A. TFF = FLIGHT TIME. NORMAL CASE FOR POSITIVE FLIGHT TIME LESS THAN ONE ORBITAL PERIOD.
# B. (THIS OPTION IS NO LONGER USED.)
# C. TFF = POSMAX. THIS INDICATES THAT THE CONIC FROM THE PRESENT POSITION WILL NOT RETURN TO
# THE SPECIFIED ALTITUDE. ALSO INDICATES OUTBOUND PARABOLA OR HYPERBOLA.
#
# OUTPUT: C(MPAC) (-28) CS TIME OF FLIGHT, OR TIME TO PERIGEE
# TFFX (0) X, LEFT FOR ENTRY DISPLAY TFF ROUTINES
# NRTERM E:(-29+NR) M RTERM, WEIGHTED BY NR LEFT FOR ENTRY DISPLAY TFF ROUTINES
# M:(-27+NR)
# TFFTEM E:(-59+2NR) LCP Z Z SGN(SDELF) LEFT FOR ENTRY DISPLAY TFF ROUTINES
# M:(-55+2NR) LCP /ALFA SGN(SDELF) LEFT FOR ENTRY DISPLAY TFF ROUTINES
# NOTE: TFFTEM = PDL 36D AND WILL BE DESTROYED BY .:UNIT:.
# RMAG1 E:(-29) M:(-27) PDL 12 NOT TOUCHED.
# TFFQ1 E:(-16) M:(-15) PDL 14D
# TFFDELQ E:(-16) M:(-15) PDL 10D
# PUSHLOC AT PDL+0
#
# ERASABLE INITIALIZATION REQUIRED:
# RONE E:(-29) M:(-27) M STATE VECTOR LEFT BY USER
# VONE' E:(+10) M:(+9) VN/SQRT(MU) LEFT BY TFF/CONIC
# RMAG1 E:(-29) M:(-27) PRESENT RADIUS, M LEFT BY TFFCONIC
# C(MPAC) E:(-29) M:(-27) RTERM, TERMINAL RADIUS LENGTH, M LEFT BY USER
#
# THE FOLLOWING ARE STORED IN THE PUSH LIST AREA.
# TFF/RTMU E:(17) M:(14) 1/SQRT(MU) LEFT BY TFFCONIC.
# NRMAG E:(-29+NR) M RMAG, NORMALIZED LEFT BY TFFCONIC
# M:(-27+NR)
# X1 -NR, NORM COUNT LEFT BY TFFCONIC
# TFFNP E:(-38+2NR) M LCP, SEMI LATUS RECTUM, WEIGHT NR LEFT BY TFFCONIC
# M:(-36+2NR)
# TFFALFA E:(26-NR) 1/M ALFA, WEIGHT NR LEFT BY TFFCONIC
# M:(24-NR)
# TFFRTALF E:(10+NA) SQRT(ALFA), NORMALIZED LEFT BY TFFCONIC
# M:(9+NA)
# X2 -NA, NORM COUNT LEFT BY TFFCONIC
# TFF1/ALF E:(-22-2NA) SIGNED SEMIMAJ AXIS, WEIGHTED BY NA LEFT BY TFFCONIC
# M:(-20-2NA)
#
# DEBRIS: QPRET, PDL+0 ... PDL+3
# RTERM E:(-29) M:(-27) RTERM, TERMINAL RADIUS LENGTH
# RAPO E:(-29) M:(-27) PDL 16D (=NRTERM)
# RPER E:(-29) M:(-27) PDL 14D (=TFFQ1)
## Page 1382
CALCTPER SETGO # ENTER WITH RPER IN MPAC
TFFSW
+3
CALCTFF CLEAR # ENTER WITH RTERM IN MPAC
TFFSW
+3 STORE RTERM # E:(-29) M:(-27)
SL*
0,1 # X1=-NR
STORE NRTERM # RTERM E:(-29+NR) M:(-27+NR)
DMP BDSU
TFFALFA # ALFA E:(26-NR) M:(24-NR)
TFF1/4
PUSH DMP # (2-ALFA RTERM) (-3) TO PDL+0
NRTERM # E:(-29+NR) M:(-27+NR)
PDDL SR* # RTERM(2-ALFA RTERM) TO PDL+2
# E:(-32+NR) M:(-30+NR)
TFFNP # LC P E:(-38+2NR) M:(-36+2NR)
0 -6,1 # X1 = -NR
DCOMP DAD # DUE TO SHIFTS, KEEP PRECISION FOR SQRT
# RTERM(2-ALFA RTERM) FROM PDL +2
# E:(-32+NR) M:(-30+NR)
SR* # LEAVE E:(-32) M:(-30)
0,1 # X1 = -NR
BOFF DLOAD # CHECK TFF /TPER SWITCH
TFFSW
+2 # IF TFF, CONTINUE
TFFZEROS # IF TPER, SET Q2 = 0
+2 BMN SQRT # E:(-16) M:(-15)
MAXTFF1 # NO FREE FALL CONIC TO RTERM FROM HERE
# RESET PDL, SET TFF=POSMAX, AND EXIT.
DCOMP BOVB # RT IS ON INBOUND SIDE. ASSURE OVFIND=0
TCDANZIG # ANY PORT IN A STORM.
STOVL TFFTEM # Q2 E:(-16) M:(-15)
VONE' # VN/SQRT(MU) E:(10) M:(9)
DOT SL3
RONE # SAVED RN. E:(-29) M:(-27)
STORE TFFQ1 # Q1, SAVE FOR GONEPAST TEST.
# E:(-16) M:(-15)
BMN BDSU
INBOUND # USE ALTERNATE Z
TFFTEM # Q2 E:(-16) M:(-15)
# OUTBOUND Z CALC CONTINUES HERE
STODL TFFX # NUM=Q2-Q1 E:(-16) M:(-15)
TFFALFA # ALFA E:(26-NR) M:(24-NR)
DMP BDSU
## Page 1383
NRMAG # RMAG E:(-29+NR) M:(-27+NR)
# (2-RTERM ALFA) (-3) FROM PDL+0
SAVEDEN PUSH ABS # DEN TO PDL+0 E:(-3) OR (-16)
# M:(-3) OR (-15)
DAD BOV # INDETERMINANCY TEST
LIM(-22) # =1.0-B(-22)
TFFXTEST # GO IF DEN >/= B(-22)
DLOAD PDDL # SET DEN=0 OTHERWISE
TFFZEROS
# XCH ZERO WITH PDL+0
DLOAD DCOMP
TFFALFA # ALFA E:(26-NR) M:(24-NR)
BMN DLOAD # FOR TPER: Z INDET AT DELE/2=0 AND 90.
TFFEL1 # ASSUME 90, AND LEAVE 0 IN PDL: 1/Z=D/N
# Z INDET. AT PERIGEE FOR PARAB OR HYPERB.
DUMPTFF1 RVQ # RETURN TFF =0
# INBOUND Z CALC CONTINUES HERE
INBOUND DLOAD # RESET PDL+0
DLOAD DSU # ALTERNATE Z CALC
RTERM # E:(-29) M:(-27)
RMAG1 # E:(-29) M:(-27)
STODL TFFX # NUM=RTERM-RN E:(-29) M:(-27)
TFFTEM # Q2 E:(-16) M:(-15)
DAD GOTO
TFFQ1 # Q1 E:(-16) M:(-15)
SAVEDEN # DEN = Q2+Q1 E:(-16) M:(-15)
TFFXTEST DAD PDDL # (ABS(DEN) TO PDL+2)) E:(-3) OR (-16)
# M:(-3) OR (-15)
DP(-22) # RESTORE ABS(DEN) TO MPAC
TFFX # NUM E:(-16) OR (-29) M:(-15) OR (-27)
DMP SR*
TFFRTALF # SQRT(ALFA) E:(10+NA) M:(9+NA)
0 -3,2 # X2=-NA
DDV # C(MPAC) =NUM SQRT(ALFA) E:(-3) OR (-16)
# M:(-3) OR (-15)
# ABS(DEN) FROM PDL+2 E:(-3) OR (-16)
# M:(-3) OR (-15)
DLOAD BOV # (THE DLOAD IS SHARED WITH TFFELL)
TFFX # NUM E:(-16) OR (-29) M:(-15) OR (-27)
TFFELL # USE EQN FOR DELE GEQ 90, LEQ -90
# OTHERWISE, CONTINUE FOR GENERAL CONIC FOR TFF EQN
DDV STADR
# DEN FROM PDL+0 E:(-3) OR (-16)
# M:(-3) OR (-15)
STORE TFFTEM # Z SAVE FOR SIGN OF SDELF.
## Page 1384
# E:(-13) M:(-12)
PUSH DSQ # Z TO PDL+0
PUSH DMP # Z SQ TO PDL+2 E:(-26) M:(-24)
TFFNP # LC P E:(-38+2NR) M:(-36+2NR)
SL SIGN
5
TFFTEM # AFFIX SIGN FOR SDELF (ENTRY DISPLAY)
STODL TFFTEM # P ZSQ E:(-59+2NR) M:(-55+2NR)
# (ARG IS USED IN TFF/TRIG)
# ZSQ FROM PDL+2 E:(-26) M:(-24)
PUSH DMP # RESTORE PUSH LOC
TFFALFA # ALFA E:(26-NR) M:(24-NR)
SL*
0,1 # X1=-NR
STORE TFFX # X
RTB DMP
T(X) # POLY
# ZSQ FROM PDL+2 E:(-26) M:(-24)
SR2 BDSU # 2 ZSQ T(X) E:(-29) M:(-27)
RTERM # RTERM E:(-29) M:(-27)
DAD DMP
RMAG1 # E:(-29) M:(-27)
# Z FROM PDL+0 E:(-13) M:(-12)
SR3 BPL # TFF SQRT(MU) E:(-45) M:(-42)
ENDTFF # (NO PUSH UP)
PUSH SIGN # TFF SQRT(MU) TO PDL+0
TFFQ1 # Q1 FOR GONEPAST TEST
BPL DLOAD # GONE PAST ?
NEGTFF # YES. TFF < 0.
TFF1/ALF # 1/ALFA E:(-22-2NA) M:(-20-2NA)
DCOMP BPL # ALFA > 0 ?
NEGTFF # NO. TFF IS NEGATIVE.
# CORRECT FOR ORBITAL PERIOD.
DCOMP # YES. CORRECT FOR ORB PERIOD.
DMP DDV
PI/16 # 2 PI (-5)
TFFRTALF # SQRT(ALFA) E:(10+NA) M:(9+NA)
SL* SL*
0 -4,2 # X2=-NA
0 -4,2
SL* DAD
0,2
# TFF SQRT(MU) FROM PDL+0 E:(-45) M:(-42)
ENDTFF DMP BOV # TFF SQRT(MU) IN MPAC E:(-45) M:(-42)
TFF/RTMU # E:(17) M:(14)
MAXTFF # SET POSMAX IF OVFL.
DUMPTFF2 RVQ # RETURN TFF (-28) CS IN MPAC.
## Page 1385
NEGTFF DLOAD
# TFF SQRT(MU) FROM PDL+0, NEGATIVE.
GOTO
ENDTFF
MAXTFF1 DLOAD # RESET PDL
MAXTFF DLOAD RVQ
NEARONE
# TIME OF FLIGHT ELLIPSE WHEN DEL (ECCENTRIC ANOM) GEQ 90 AND LEQ -90.
# NUM FROM TFFX. E:(-16) OR (-29)
# M:(-15) OR (-27)
TFFELL SL2 # NUM E:(-14) OR (-27) M:(-13) OR (-25)
BDDV PUSH # TEMP SAVE D/N IN PDL+0
# DEN FROM PDL+0 E:(-3)/( 16) M:(-3)/(-15)
# N/D TO PDL+0 E:(11) M:(10)
TFFEL1 DLOAD DSU # (ENTER WITH D/N=0 IN PDL+0)
TFFTEM # Q2 E:(-16) M:(-15)
TFFQ1 # Q1 E:(-16) M:(-15)
STODL TFFDELQ # Q2-Q1 E:(-16) M:(-15)
# D/N FROM PDL+0
STADR
STORE TFFTEM # D/N E:(11) M:(10)
DMP SL*
TFF1/ALF # 1/ALFA E:(-22-2NA) M:(-20-2NA)
0,2 # 1/ALFA Z E:(-11-NA) M:(-10-NA)
PUSH DMP # TO PDL+0
TFFTEM # 1/Z E:(11) M:(10)
SL* BOVB
0,2 # X2= -NA
SIGNMPAC # IN CASE X= 1.0, CONTINUE
STORE TFFX # X=1/ALFA ZSQ
RTB DMP
T(X) # POLY
TFFX
SR3 DSU
DP2(-3)
DMP PUSH # 2(X T(X)-1) /Z ALFA E:(-15-NA)
# M:(-14-NA)
# 1/ALFA Z FROM PDL+0 E:(-11-NA)
# M:(-10-NA)
DLOAD DMP # GET SIGN FOR SDELF
TFFTEM # 1/Z E:(11) M:(10)
RMAG1 # E:(-29) M:(-27)
SL2 DAD
TFFQ1 # Q1 E:(-16) M:(-15)
STODL TFFTEM # (Q1+R 1/Z) =SGN OF SDELF E:(-16) M:(-15
TFFNP # LC P E:(-38+2NR) M:(-36+2NR)
DMP SL* # CALC FOR ARG FOR TFF/TRIG.
## Page 1386
TFF1/ALF # 1/ALFA E:(-22-2NA) M:(-20-2NA)
1,2 # X2=-NA
SIGN SL*
TFFTEM # AFFIX SIGN FOR SDELF
0,2
STODL TFFTEM # P/ALFA E:(-59+2NR) M:(-55+2NR)
# (ARG FOR USE IN TFF/TRIG)
TFF1/ALF # 1/ALFA E:(-22-2NA) M:(-20-2NA)
SQRT DMP
PI/16 # PI (-4)
DAD
# 2(XT(X)-1)/Z ALFA FROM PDL E:(-15-NA)
# M:(-14-NA)
SL* DSU
0 -1,2
TFFDELQ # Q2-Q1 E:(-16) M:(-15)
DMP SL*
TFF1/ALF # 1/ALFA E:(-22-2NA) M:(-20-2NA)
0 -3,2
SL* GOTO
0 -4,2
ENDTFF # TFF SQRT(MU) IN MPAC E:(-45) M:(-42)
## Page 1387
# PROGRAM NAME: T(X) DATE: 01.17.67
# MOD NO: 0 LOG SECTION: TIME OF FREE FALL
# MOD BY: RR BAIRNSFATHER
#
# FUNCTIONAL DESCRIPTION: THE POLYNOMIAL T(X) IS USED BY TIME OF FLIGHT SUBROUTINES CALCTFF AND
# CALCTPER TO APPROXIMATE THE SERIES
# 2 3
# 1/3 -X/5 +X /7 -X /9 ...
#
# WHERE X = ALFA Z Z IF ALFA Z Z LEQ 1
# X = 1/(ALFA Z Z) IF ALFA Z Z G 1
#
# ALSO X IS NEG FOR HYPERBOLIC ORBITS
# X = 0 FOR PARABOLIC ORBITS
# X IS POSITIVE FOR ELLIPTIC ORBITS
#
# FOR FLIGHT 278, THE POLYNOMIAL T(X) IS FITTED OVER THE RANGE (0,+1) AND HAS A MAXIMUM
# DEVIATION FROM THE SERIES OF 2 E-5 (T(X) IS A CHEBYCHEV TYPE FIT AND WAS OBTAINED USING
# MAC PROGRAM AUTCURFIT294RRB AND IS VALID TO THE SAME TOLERANCE OVER THE RANGE (-.08,+1).)
#
# CALLING SEQUENCE: RTB
# T(X)
# C(MPAC) = X
#
# SUBROUTINES CALLED: NONE
#
# NORMAL EXIT MODE: TC DANZIG
#
# ALARMS: NONE
#
# OUTPUT: C(MPAC) = T(X)
#
# ERASABLE INITIALIZATION REQUIRED:
# C(MPAC) = X
#
# DEBRIS: NONE
T(X) TC POLY
DEC 4 # N-1
2DEC 3.333333333 E-1
2DEC* -1.999819135 E-1*
2DEC* 1.418148467 E-1*
2DEC* -1.01310997 E-1*
2DEC* 5.609004986 E-2*
2DEC* -1.536156925 E-2*
ENDT(X) TC DANZIG
TCDANZIG = ENDT(X)
## Page 1388
# TFF CONSTANTS
BANK 32
SETLOC TOF-FF1
BANK
# NOTE _ NOTE _ ADJUSTED MUE FOR NEAR EARTH TRAJ.
#MUE = 3.990815471 E10 M CUBE/CS SQ
#RTMUE = 1.997702549 E5 B-18* MODIFIED EARTH MU
1/RTMU 2DEC* .5005750271 E-5 B17* # MODIFIED EARTH MU
# NOTE _ NOTE _ ADJUSTED MUE FOR NEAR EARTH TRAJ.
#MUM = 4.902778 E8 M CUBE/CS SQ
#RTMUM 2DEC* 2.21422176 E4 B-18*
PI/16 2DEC 3.141592653 B-4
LIM(-22) 2OCT 3777737700 # 1.0 -B(-22)
DP(-22) 2OCT 0000000100 # B(-22)
DP2(-3) 2DEC 1 B-3
DP2(-4) 2DEC 1 B-4 # 1/16
# RPAD1 2DEC 6373338 B-29 M (-29) = 20909901.57 FT
RPAD1 = RPAD
R300K 2DEC 6464778 B-29 # (-29) M
NEARONE 2DEC .999999999
TFFZEROS EQUALS HI6ZEROS
TFF1/4 EQUALS HIDP1/4
Computing file changes ...