-
Notifications
You must be signed in to change notification settings - Fork 2
/
TIME_OF_FREE_FALL.agc
710 lines (668 loc) · 23 KB
/
TIME_OF_FREE_FALL.agc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
# 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 <[email protected]>.
# 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.
#
# 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 [email protected] 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). THE 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 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 REQUIRED 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 BY: 3 MOD BY: RR BAIRNSFATHER DATE: 8 JUL 67 NEAR EARTH MUE AND NEG TFF (GONEPAST)
# MOD BY: 4 MOD BY: RR BAIRNSFATHER DATE: 21 NOV 67 ADD VARIABLE MU.
# MOD BY: 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 /8 ... (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(NU) 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+2N4)
# 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+NR)
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 IN 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:(-145) 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
#
# SUBROUTINE 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