https://github.com/virtualagc/virtualagc
Revision 3577d0b1de1ac147c1710524517c563b2bfe231c authored by Ronald Burkey on 30 May 2021, 19:14:00 UTC, committed by GitHub on 30 May 2021, 19:14:00 UTC
Issue 1143: Fix various symbol name and other minor typos
2 parent s bc21d6b + 8d274f6
Raw File
Tip revision: 3577d0b1de1ac147c1710524517c563b2bfe231c authored by Ronald Burkey on 30 May 2021, 19:14:00 UTC
Merge pull request #1147 from smithery1/Issue/1143
Tip revision: 3577d0b
P40-P47.agc
### FILE="Main.annotation"
## Copyright:   Public domain.
## Filename:    P40-P47.agc
## Purpose:     A section of Comanche revision 045.
##              It is part of the reconstructed source code for the
##              second release of the flight software for the Command
##              Module's (CM) Apollo Guidance Computer (AGC) for Apollo 10.
##              The code has been recreated from a copy of Comanche 055. It
##              has been adapted such that the resulting bugger words
##              exactly match those specified for Comanche 45 in NASA drawing
##              2021153D, which gives relatively high confidence that the
##              reconstruction is correct.
## Assembler:   yaYUL
## Contact:     Ron Burkey <info@sandroid.org>.
## Website:     www.ibiblio.org/apollo/index.html
## Mod history: 2020-12-06 MAS  Created from Comanche 44.
##              2020-12-23 MAS  Implemented the COM-4 anomaly fix in S40.1.
##		2020-12-24 RSB	Beefed-up the annotation justifying reconstruction.

## Page 684
# PROGRAM DESCRIPTION ** P40CSM **

		EBANK=	DAPDATR1
		BANK	31
		SETLOC	P40S
		BANK
		
		COUNT	24/P40
		
P40CSM		TC	DOWNFLAG
		ADRES	ENG2FLAG
		
		TC	INTPRET
		SLOAD	BOFF
			ECSTEER		# IS THIS AN EXTERNAL DELTA V BURN
			XDELVFLG
			P40S/C		# NO	CSTEER = ECSTEER
		DLOAD			# YES	CSTEER = ZERO
			HI6ZEROS
P40S/C		STODL	CSTEER
			FENG		# SET UP THRUST FOR P40 20,000 LBS
P40S/F		STODL	F		# P41 ENTERS HERE
			TIG		# ORIGINAL TIG MAY BE SLIPPED BY P40S/SV
		STORE	NOMTIG		# SET ORIGINAL TIME OF IGNITION FOR S40.9
		
		EXIT
		TC	BANKCALL
		CADR	R02BOTH		# IMU STATUS CHECK
		
P40PVA		TC	INTPRET
		CALL
			S40.1		# COMPUTE VGTIG,UT
		CALL
			S40.2,3		# COMPUTE PREFERRED ATTITUDE
		SET	EXIT
			PFRATFLG
P40SXTY		TCR	SETMINDB -1	# NARROW DEADBAND FOR MANEUVER (EBANK6)
		RELINT
		TC	BANKCALL
		CADR	R60CSM		# ATTITUDE MANEUVER
		CS	ONE		# FOR UPDATEVG
		TS	NBRCYCLS
		TC	UPFLAG
		ADRES	TIMRFLAG	# ALLOW CLOCKTASK
		
		TC	P41/P40
		TC	P41/DSP		# P41
		
P40TTOG		CAF	V06N40		# INITIALIZE FOR CLOCKTASK WHICH IS CALLED
## Page 685
		TS	NVWORD1		# BELOW
		
		TC	INTPRET
		VLOAD	ABVAL		# FOR R2
			VGTIG
		STODL	VGDISP
			HI6ZEROS
		STORE	DVTOTAL
		EXIT
		
		EXTEND
		DCA	STEERADS	# SET FOR UPDATEVG AND TEST FOR STEERING
		DXCH	AVEGEXIT	# AFTER AVERAGE G
		
P40GMB		CAF	P40CKLS2	# (4.1 PROTECTION)
		TC	BANKCALL
		CADR	GOPERF1
		TCF	POST41		# V34
		TCF	TST,TRIM	# V33
TRIMONLY	CS	BIT1		# SET MRKRTEMP FOR GIMBAL TRIM (-1)
 +1		TS	MRKRTMP		# ENTRY FROM TST,TRIM
	
		CAF	ZERO		# SET CNTR	+0 FOR RESTART LOGIC IN S40.6
		TS	CNTR		#	+0 SAYS NORMAL ENTRY.
					#	+1 (PRE40.6) SAYS RESTART ENTRY
					
		CAF	ONE
		TC	WAITLIST
		EBANK=	DAPDATR1
		2CADR	S40.6
		
		CCS	MRKRTMP		# TEST TO FIND TIME TO WAIT FOR GIMBAL TEST
		CAF	18SEC		# PLUS, DELAY FOR 18 SECONDS
		TCF	+2		# HOLE
		CAF	5SEC		# DELAY FOR TRIM ONLY TASK
		TC	BANKCALL
		CADR	DELAYJOB
		TC	2PHSCHNG
		OCT	40026		# 6.2 = PRE40.6(-0CS), CLOKTASK(100CS)
		OCT	00234		# 4.23 = P40S/SV (PRIO12)
P40S/RS		CAF	ONE
		TC	WAITLIST	# P41/SDP
		EBANK=	TIG
		2CADR	CLOKTASK
		
		RELINT
		
P40S/SV		TCR	E7SETTER	# JOB, 4.23 PRETECTS, PRIO12
		EBANK=	TIG
## Page 686
		TC	INTPRET
		DLOAD	DSU
			TIG
			SEC29.96
		STORE	TDEC1
		
		CALRB			# RETURN IN BASIC
			MIDTOAV1
		TCF	+2
		TC	P40SNEWM	# INTEGRATION TIME GREATER THAN ALLOWED
P40SET		EXTEND
		DCA	MPAC		# DELTA TIME TO PREREAD (INT.INIT.)
		DXCH	P40TMP
		EXTEND
		DCS	5SECDP		# FOR TTGBLNK
		DAS	P40TMP
		EXTEND
		DCA	P40TMP
		TC	LONGCALL
		EBANK=	TIG
		2CADR	TIGBLNK
		
		TC	PHASCHNG
		OCT	20214		# 4.21 = TIGBLNK (P40TMP CS)
		
		TCF	ENDOFJOB
P40BLNKR	TC	BANKCALL
		CADR	CLEANDSP	# REMOVE RESIDUE
		TCF	ENDOFJOB
		EBANK=	TIG
P40SNEWM	EXTEND
		DCA	PIPTIME1
		DXCH	TIG		# SET NEW TIG FOR 06 40
		EXTEND
		DCA	SEC29.96
		DAS	TIG
		TCF	P40SET		# FOR LONGCALL OF TIG-30 (OR -35)
		
		EBANK=	DAPDATR1
POSTBURN	CAF	V16N40
		TC	BANKCALL
		CADR	REFLASH
		TCF	POST41		# V34 GO FINISH
		TCF	P40RCS		# PROCEED
		TCF	POSTBURN	# RECYCLE
P40RCS		EXTEND			# V99N40 ENTERS HERE ON A P40 BYPASS SPS
		DCA	ACADN85
		DXCH	AVEGEXIT
		CAF	2SECS		# WAIT FOR CALCN85 VIA AVEGEXIT
		TC	BANKCALL
## Page 687
		CADR	DELAYJOB
		
P40MINDB	TCR	SETMINDB -1
		RELINT
TIGNOW		TC	PHASCHNG
		OCT	05024		# TYPE C GROUP 4 BELOW FOR NOUN 85
		OCT	20000		# PRIO 20
		CAF	V16N85B
		TC	BANKCALL
		CADR	REFLASH
		TCF	POST41		# FINISH P40/P41
		TCF	POST41		# V03 PROCEED WITH REST OF THE CLEAN-UP
		TCF	TIGNOW		# V32 NOT GSOP RESPONSE BUT REDISPLAY N85
		
POST41		EXTEND
		DCA	SERVCADR
		DXCH	AVEGEXIT
		TCF	GOTOPOOH
		
MINDB		DEC	46
MAXDB		DEC	455
		EBANK=	DAPDATR1
 -1		INHINT
SETMINDB	CA	CDUX		# ROUTINE FOR SETTING
		TS	THETADX		# THE MINIMUM DEADBAND
		EXTEND			# IN AUTOPILOT
		DCA	CDUY
		DXCH	THETADY
		CA	MINDB		# SHOULD BE CALLED UNDER
		TS	ADB		# INTERRUPT INHIBITED
		CS	BIT4		# EBANK = E6
		MASK	DAPDATR1
		TS	DAPDATR1
		TC	Q
		
		EBANK=	DAPDATR1
 -1		INHINT
SETMAXDB	CA	MAXDB		# ROUTINE FOR SETTING
		TS	ADB		# THE MAXIMUM DEADBAND IN AUTOPILOT
		CS	DAPDATR1
		MASK	BIT4		# SHOULD BE CALLED UNDER
		ADS	DAPDATR1	# INTERRUPT INHIBITED
		TC	Q		# EBANK = E6

## Page 688
# PROGRAM DESCRIPTION ** P41CSM **

		SETLOC	P40S2
		BANK
		
		EBANK=	DAPDATR1
		COUNT	24/P41
		
P41CSM		TC	UPFLAG
		ADRES	ENG2FLAG	# SET FOR RCS
		
		TC	INTPRET
		DLOAD
			HI6ZEROS	# FOR P41 CSTEER =0
		STORE	CSTEER
		
		DLOAD	BON
			FRCS2		# 2JET THRUST FOR S40.1
			NJETSFLG
			P40S/F		# NJETS = 1 2-JET
		DAD	GOTO		# NJETS = 0 4-JET
			FRCS2
			P40S/F
			
		SETLOC	P40S
		BANK
			
P41/P40		CS	MODREG
		MASK	ONE		# P41EXITS AT CALL LOC +1
		EXTEND
		BZF	+2		# P41
		INCR	Q		# P40 EXITS AT CALL LOC +2
		TC	Q
		
TTG/0		CAF	PRIO20		# TASK (4.4 PROTECTS IN P41)
		TC	NOVAC
		EBANK=	DAPDATR1
		2CADR	TIGNOW
		
P40CLK		TC	DOWNFLAG
		ADRES	TIMRFLAG
		
		TCF	TASKOVER
		
P41/DSP		CAF	V06N85B		# SET UP FOR NONFLASH V 06 N85 BY CLOCKJOB
		TS	NVWORD1
		
		TC	INTPRET
## Page 689		
		CALL			# COMPUTE
			P40CNV85	#	VGTIG IN CTRL COORDS
		EXIT
		EXTEND			# DO CONTROL COORD CALCULATION AFTER AVEG
		DCA	ACADN85
		DXCH	AVEGEXIT
		TC	2PHSCHNG
		OCT	40036		# 6.3=CLOKTASK(100CS)
		OCT	234		# 4.23=P40S/SV(PRIO12)
		
		TCF	P40S/RS
P41REDSP	CAF	V16N85B		# ENTER FROM P41 SIDE OF TIGAVEG
		TS	NVWORD1		# REDISPLAY NONFLASHING
		CAF	SEC29.96 +1
		TC	WAITLIST
		EBANK=	DAPDATR1
		2CADR	TTG/0
		
		CS	BIT3		# 4.4 = TTG/0(2996CS), PRECHECK(-0CS)
		TCF	TTGPHS
P40CNV85	STQ	SETPD
			QTEMP1
			0
		VLOAD	PUSH
			VGPREV		# EQUALS VGTIG (TARGETTING INPUT)
		CALL
			S41.1
		STCALL	VGBODY
			QTEMP1
			
		EBANK=	DAPDATR1
CALCN85		TC	INTPRET
		CALL
			UPDATEVG	# NEW VG, S40.8 (+MAYBE S40.9)
		CALL
			P40CNV85	# COMPUTE VGBODY
		EXIT
		TC	SERVXT
FENG		2DEC	9.1188544 B-7	# SPS THRUST (20500LBS), SC.AT B+7 NEWT/E4

FRCS2		2DEC	.087437837 B-7	# RCS ULLAGE (199.6COS10 LBS), SC.AT

					#	B+7 NEWTONS/E+4
SEC24.96	DEC	2496
SEC29.96	2DEC	2996

18SEC		DEC	1800
P40CKLS2	OCT	204
40CST5		OCT	37730		# 40 CS FOR THE T5 CLOCK
OCT12		=	TEN
## Page 690
V1683		VN	1683
V06N85B		VN	0685
V16N85B		VN	1685
V06N40		VN	0640
V16N40		VN	1640
OCT27/24	OCT	27
OCT53		OCT	53
OCT35		OCT	35
		EBANK=	DAPDATR1
T5IDL24		2CADR	T5IDLOC

3MDOT		DEC	86.6175796 B-16	# 3SEC MASS LOSS (63.8 LBS/SEC), SC.AT
					# B+16 KG/SEC (NOTE, EMDOT IS PAD-LOADED,
					# BUT 3MDOT IS NOT A CRITICAL QUANTITY, SO
					# IT CAN REMAIN IN FIXED MEMORY)
TST,TRIM	CAF	BIT1		# SET UP FOR GIMB DRIVE TEST AND TRIM (+1)
		TCF	TRIMONLY +1
TIGBLNK		CAF	5SEC		# CALL TIGAVEG IN FIVE SEC AT TIG-30
		TC	WAITLIST
		EBANK=	TIG
		2CADR	TIGAVEG
		
		CAF	ZERO		# DISABLE HERE, NOT IN P40BLNKR
		TS	NVWORD1
		
		CAF	PRIO14
		TC	NOVAC
		EBANK=	TIG
		2CADR	P40BLNKR	# DONT PROTECT-RESTARTS BLANK DSKY
		
		CS	OCT37		# 4.37 = TIGAVEG (500CS)
P40TSK		TC	NEWPHASE
		OCT	4
		TC	TASKOVER
		
		EBANK=	TIG
ACADN83		2CADR	CALCN83

		EBANK=	TIG
SERVCADR	2CADR	SERVEXIT

		EBANK=	DAPDATR1
ACADN85		2CADR	CALCN85

## Page 691
# PROGRAM DESCRIPTION ** P47CSM **

		COUNT	24/P47
		
		EBANK=	TIG
P47CSM		TC	BANKCALL	# IMU STATUS CHECK
		CADR	R02BOTH
		TC	INTPRET
		CALRB
			MIDTOAV2
		CA	MPAC +1		# DELTA TIME TO RPEREAD (LESS THAN 1000
		TS	P40TMP		#	CS, WITH A TPAGREE, INT.INIT.)
		TC	WAITLIST
		EBANK=	TIG
		2CADR	TIGON		# TIGON IS REQUIRED TO MATHCHTAT AND AVEG
		
		TC	PHASCHNG
		OCT 	40574		# A, 4.57 = TIGON (P40TMP CS)
		TCF	ENDOFJOB
		
		EBANK=	P40TMP
TIGON		EXTEND
		DCA	ACADN83
		DXCH	AVEGEXIT
		CAF	PRIO30		# FORCE ZEROING OF N83 BEFORE SERVICER
		TC	NOVAC
		EBANK=	TIG
		2CADR	P47BODY
		
		CS	BIT2		# 4.2 = PRECHECK (-0CS), P47BODY (PRIO30)
		TCF	TTGPHS
		
		EBANK=	TIG
CALCN83		TC	INTPRET
		SETPD			# SET UP PUSHLIST FOR S41.1
			0
		VLOAD	VAD
			DELVCTL
			DELVREF
		STORE	DV47TEMP	# FOR COPYCYCLE BELOW
		PUSH	CALL
			S41.1
		STCALL	DELVIMU
			S11.1		# CALC. VI, H, HDOT FOR NOUN 62
		EXIT
		TC	PHASCHNG
		OCT	10035
## Page 692
		CAF	FIVE
		TC	GENTRAN
		ADRES	DV47TEMP
		ADRES	DELVCTL
		
		TC	SERVXT
P47BODY		TC	INTPRET
		VLOAD
			HI6ZEROS
		STORE	DELVIMU		# CLEAR DISPLAY AND ACCUMULATOR STORAGE
		STORE	DELVCTL		# UPON INITIATION OR-ENTER-RESPONSE
		EXIT
P47BOD		CAF	PRIO15		# LOWER PRIO THAN CALCN83 (20)
		TC	PRIOCHNG	#	TO PREVENT INTERRUPTION OF CALCN83
		TC	PHASCHNG
		OCT	05024		# TYPE C GROUP 4 BELOW FOR NOUN 83
		OCT	15000		# PRIO 15
P47/DSP		CAF	V1683
		TC	BANKCALL
		CADR	GOFLASH
		TC	GOTOPOOH
		TC	GOTOPOOH
		TCF	P47BODY		# RECYCLE - CLEAR ACCUMULATED VELOCITY

## Page 693
# ROUTINE ** TIG-30 ** DESCRIPTION

		EBANK=	TIG
		COUNT	24/P40
		
TIGAVEG		TC	P41/P40		# TASK (4.37 PROTECTS)
		TCF	P41REDSP	# P41
		
		CAF	V06N40		# UNBLANK DISPLAY
		TS	NVWORD1
		
		CAF	SEC24.96
		TC	WAITLIST
		EBANK=	TIG
		2CADR	TIG-5
		
		CS	SIX		# 4.6 = TIG-5 (2496CS), PRECHECK (-0CS)
TTGPHS		TC	NEWPHASE	# ENTRY FROM P41REDSP (P41) WITH A=-4, OR
		OCT	4		#       FROM TIGON    (P47) WITH A=-2
		
PRECHECK	CCS	PHASE5		# HAS SERVICER BEEN RESTARTED
		TCF	TASKOVER	# YES, DONT START ANOTHER ONE
		TC	POSTJUMP
		CADR	PREREAD

## Page 694
# ROUTINE ** TIG-5 ** DESCRIPTION

		EBANK=	TIG
TIG-5		CAF	5SEC
		TC	WAITLIST
		EBANK=	DAPDATR1
		2CADR	TIG-0
		
		CS	BIT9		# WILL CAUSE V99 FLASH
		TS	NVWORD1
		
		TC	2PHSCHNG
		OCT	40074		# A, 4.7 = TIG-0 (500CS)
		OCT	00033		# A, 3.3 = S40.13 (PRIO20)
		
		CAF	PRIO20
		TC	FINDVAC
		EBANK=	TGO
		2CADR	S40.13
		
		TCF	TASKOVER
		
## Page 695
# ROUTINES ** TIG-0 ** AND ** IGNITION ** DESCRIPTION

		EBANK=	DAPDATR1	# TASK, 4.7 PHASE, OR 4.77 (-0CS) IN R40
TIG-0		CS	FLAGWRD7	# SET IGN FLAG
		MASK	BIT13
		ADS	FLAGWRD7
		
		CAE	FLAGWRD7	# CHECK ASTN FLAG FOR V99 RESPONSE
		MASK	BIT12
		EXTEND
		BZF	TASKOVER	# WAIT FOR V99P
		
		CAF	V06N40		# CLEAR THE V99 (IN CASE OF A RESTART
		TS	NVWORD1		#	DURING THE V99 SEQUENCE)
		
		TC	PHASCHNG	# V99P HAS COME ALREADY, DO IGNITION NOW
		OCT	00614		# A, 4.61 = IGNITION (-0CS) TBASE OLD
		
IGNITION	CAE	CDUX		# SAVE FOR ROLL DAP REFERENCE OGAD
		TS	OGAD		#	V99PJOB (CLOCKJOB) SETS UP IGNITION
		EXTEND			# 	TASK (4.61 PROTECTION)
		DCA	TIME2		#	FOR RESTARTS
		DXCH	TEVENT
		CS	FLAGWRD5	# SET ENGONFLG
		MASK	BIT7
		ADS	FLAGWRD5
SPSON		CAF	BIT13		# TURN ON SPS ENGINE
		EXTEND
		WOR	DSALMOUT
		
IMPULCHK	CAF	BIT9		# CHECK FOR IMPULSIVE BURN
		MASK	FLAGWRD2
		CCS	A
		TCF	IMPLBURN	# IMPULSIVE
		CS	FLAGWRD6	# NON-IMPULSIVE, SET STRULLSW FOR STEERULL
		MASK	BIT13
		ADS	FLAGWRD6
		
PREPTVC		CS	OCT60000	# RESET T5 BITS
		MASK	FLAGWRD6
		TS	FLAGWRD6
		
		EXTEND			# KILL RCS
		DCA	T5IDL24
		DXCH	T5LOC
		
		CS	THREE		# 4.3 = DOTVCON (40CS)
		TC	NEWPHASE
		OCT	4
		
## Page 696
		TC	FIXDELAY
		DEC	40		# 0.4 SECOND DELAY FOR THRUST BUILDUP
		
DOTVCON		CS	BIT1		# SET TVCPHASE = TVCDAPON CALL (FRESHDAP)
		TS	TVCPHASE
		CAF	ZERO		# SET TVCEXECUTIVE PHASE
		TS	TVCEXPHS
		CS	OCT60000	# SET T5 BITS TO INDICATE TVC TAKEOVER ....
		MASK	FLAGWRD6	#	BITS 15,14 = 10
		AD	BIT15
		TS	FLAGWRD6
		
		CAF	THREE		# 6.3 = CLOKTASK (100CS), DROPPING PRE40.6
		TS	L		#	WHICH IS HANDLED NOW BY REDOTVC
		COM
		DXCH	-PHASE6
		
		EXTEND			# STORE RCS ATTITUDE ERRORS FOR USE IN
		DCS	ERRORY		# INITIALIZING TVC ATTITUDE ERRORS
		DXCH	ERRBTMP
		
		CS	FIVE		# 4.5 = DOSTRULL (160 CS)
		TC	NEWPHASE
		OCT	4
		
		CAF	POSMAX		# SET TIME5 FOR STARTING RIGHT AWAY
		TS	TIME5
		EXTEND
		DCA	TVCON2C		# (TVCDAPON)
		DXCH	T5LOC		# (KILLS RCS DAP)
		
		TC	FIXDELAY	# 0.4 + 1.6 = 2.0 SEC FOR ULLAGE-OFF AND
		DEC	160		# 	STEERING (IF NON-IMPULSIVE)
		
DOSTRULL	CAF	BIT13		# CHECK STRULLSW FOR IMPULSIVE BURN
		MASK	FLAGWRD6
		CCS	A
		TCR	STEERULL	# NON-IMPULSIVE, STEERING AND ULLAGE OFF
		TCR	ULAGEOFF	# ULLAGE OFF (ONLY, OR AGAIN)
		
		EXTEND
		DCA	NEG0		# KILL GROUP 4 (DP NEG0 = -0,+0)
		DXCH	-PHASE4
		
ENDIGN		TCF	TASKOVER

STEERULL	CS	FLAGWRD2	# SET STEERSW
		MASK	BIT11
		ADS	FLAGWRD2
		
## Page 697		
		
ULAGEOFF	CAF	ZERO
		EXTEND
		WRITE	CHAN5		# ZERO CHANNEL 5
		TC	Q
		
IMPLBURN	CS	BIT13		# RESET STRULLSW (COULD BE AN IMPULSIVE
		MASK	FLAGWRD6	#	ENGINE FAIL)
		TS	FLAGWRD6
		
		TCR	E7SETTER
		
		EBANK=	TIG
		EXTEND			# PREPARE FOR R1 OF V06N40 (CLOCKTASK)
		DCA	TGO
		DXCH	TIG
		EXTEND
		DCA	TIME2
		DAS	TIG
		
		TC	2PHSCHNG
		OCT	40153		# A,3.15 = ENGINOFF (TGO+1)....NOTE GROUP
		OCT	07014		# C, DELTAT AND 2CADR FOLLOW FOR TASK BELO
		DEC	-0		# -0 CS
		EBANK=	DAPDATR1
		2CADR	IMPLCONT
		
		CAE	TGO +1		# (TPAGREE IN S40.13, LESS THAN 600CS)
		TC	WAITLIST
		EBANK=	TGO
		2CADR	ENGINOFF
		
IMPLCONT	CS	BIT9		# RESET IMPULSW, ENGINOFF IS NOW SET UP
		MASK	FLAGWRD2
		TS	FLAGWRD2
		
		TCR	E6SETTER
		EBANK=	DAPDATR1
		
		CAF	ZERO		# SET UP V97VCNTR IN CASE ENGINOFF (MASS-
		TS	V97VCNTR	#	BACK) ARRIVES BEFORE TVCDAPON
		
		TCF	PREPTVC
		
		EBANK=	TGO		# E7 FORCED BY 3.15SPOT VARIABLE DELTA-T
ENGINOFF	TCR	E6SETTER	# TASK, 3.15 PHASE (TGO+1 CS)	GET E6
		EBANK=	DAPDATR1
		CAE	CSMMASS
		TS	MASSTMP		# COPYCYCLE FOR MASSBACK
## Page 698
		TC	2PHSCHNG
		OCT	00003		# KILL GROUP 3 PROTECTION OF ENGINOFF, DO
		OCT	40634		# A, 4.63 = DOSPSOFF (-0CS)
DOSPSOFF	TCR	SPSOFF		# SHUTDOWN SPS, MASS UPDATES, ETC.
		CS	OCT27/24	# (OCTAL 27)
		TC	NEWPHASE
		OCT	4		# 4.27 = DOTVCRCS (250 CS)
		
		TC	FIXDELAY	# 2.5 SECOND DELAY FOR SPS TAILOFF
		DEC	250
		
DOTVCRCS	TCR	SETMAXDB	# WIDE DEADBAND FOR CUTOFF TRANSIENT

		TC	IBNKCALL	# SET UP RCS DAP (KILLS TVCDAPS, SETS T5
		CADR	RCSDAPON	#	BITS, WAITS 0.6SEC FOR TVCEXEC DIE)
		
		TC	IBNKCALL	# UPDATE WEIGHT/G AND MASS-PROPERTIES FOR
		CADR	MASSPROP	#	RCS DAP STARTUP IN 0.6 SECONDS
		
		TCR	TVCZAP		# WIPE OUT TVC, TURN OFF CLOKTASK
		
		TC	PHASCHNG
		OCT	00354		# A, 4.35 = POSTBURN (NOVAC, PRIO12)
		CAF	PRIO12		# SET UP POSTBURN V16N40 JOB
		TC	NOVAC
		EBANK=	DAPDATR1	# (SET MAXDB IN POST41)
		2CADR	POSTBURN
		
		TCF	TASKOVER
		
		EBANK=	DAPDATR1
SPSOFF		EXTEND			# ESTABLISH SPSOFF TEVENT
		DCA	TIME2
		DXCH	TEVENT
		CS	BIT7		# RESET ENGONFLG
		MASK	FLAGWRD5
		TS	FLAGWRD5	# (RESTARTS WILL SHUT DOWN SPS NOW)
		CS	BIT13		# SHUT DOWN SPS ENGINE
		EXTEND
		WAND	DSALMOUT
		
		CAF	BIT14		# ISSUE SIV CUTOFF COMMAND
		EXTEND			# FOR POSSIBLE BACK-UP USE
		WOR	CHAN12
MASSBACK	CAE	V97VCNTR	# RESTORE PART OF PRE-DECREMENTED MASS
					#	V97VCNTR = VCNTR UNLESS V97 IS
					#	ACTIVE.  ONLY V97VCNTR IS THEN RIGHT
		EXTEND			# VCNTR COUNTS 1/2-SECONDS IN TVC EXEC
		MP	EMDOT		#	MDOT, SC.AT B+3 KG/CS
		LXCH	A
## Page 699		
		EXTEND
		MP	1SEC		# DEC 100
		AD	MASSTMP		# CORRECTION IS ACCURATE TO 5 CS OF FLOW
		TS	CSMMASS		#	(1.44 KG OR 0.4 BITS)
		
		CA	TVCPHASE	# CHECK IF OK FOR TRIM UPDATE
		AD	ONE		#	THESE CHECKS ARE ONLY NEEDED
		EXTEND			#	FOR A LESS THAN 0.4 SEC BURN
		BZF	BTRIMR		# NO.  INITIALIZATION NOT COMPLETE
		CS	FLAGWRD6	# YES, CHECK IF TVC
		MASK	OCT60000
		EXTEND
		BZMF	BTRIMR		# NO, NOT TVC YET	
BESTTRIM	CAE	DELPBAR		# UPDATE TRIMS WITH DELFILTER VALUES
		TS	PACTOFF
		CAE	DELYBAR
		TS	YACTOFF
BTRIMR		TC	Q
		EBANK=	DAPDATR1
STEERADS	2CADR	STEERING

.6SECT5		OCT	37703
5SECDP		DEC	0		# MAKE DP 5SEC
5SEC		DEC	500
OCT02202	OCT	02202		# BITS 2, 8, 11 FOR CHANNEL 12 TVC/OPTICS
		EBANK=	DAPDATR1
TVCON2C		2CADR	TVCDAPON
		
 -1		INHINT
TVCZAP		CS	OCT02202	# DISABLE TVC AND OPT ERR CNTRS, REENGAGE
		EXTEND			#	OPTICS DAC
		WAND	CHAN12
		CS	BIT1		# ENABLE T4RUPT OPTICS MONITOR .... PERMIT
		TS	OPTIND		#	OPTICS-ZERO BUT NOT OPTICS-DRIVE
		CAF	ZERO		# CLEAR NVWORD1 IN CASE CLOCKJOB WAITING
		TS	NVWORD1
		CS	BIT11		# CLEAR TIMRFLAG TO STOP CLOKTASK
		MASK	FLAGWRD7
		TS	FLAGWRD7
		TC	Q
		EBANK=	DAPDATR1
UPDATEVG	STQ	BON
			QTEMP1
			XDELVFLG
			CALL40.8
			
		SLOAD	BMN
			NBRCYCLS
			SETUP.9
## Page 700			
			
		VLOAD	VAD
			DELVSUM
			DELVREF
		STORE	DELVSUMP
		EXIT
		CA	ONE
		AD	NBRCYCLS
		TS	NBRCYCLP
		
		TC	PHASCHNG	# TYPE B RESTART BELOW AND 5.3 REREADACCS
		OCT	10035
		
		CA	NBRCYCLP
		TS	NBRCYCLS
		TC	INTPRET
		VLOAD
			DELVSUMP
		STORE	DELVSUM
		
CALL40.8	CALL
			S40.8
		GOTO
			QTEMP1
			
SETUP.9		BON	SLOAD
			FIRSTFLG
			SURELY.9
			NBRCYCLP
		NORM	VXSC		# (NORM HANDLES ZERO PROPERLY)
			X1
			BDT
		VSR*	VAD
			0 -14D,1
			VGTEMP
		VSU
			DELVSUM
		STORE	VGPREV
SURELY.9	EXIT
		CAF	PRIO10
		TC	FINDVAC
		EBANK=	DAPDATR1
		2CADR	S40.9
		
		TC	2PHSCHNG
		OCT	00051		# A, 1.5 = REDO40.9, PRIO 10
		OCT	10035
		TC	INTPRET
		VLOAD
			RN		# ACTIVE VEHICLE RADIUS VECTOR AT T1
		STOVL	RINIT
## Page 701		
			VN		# ACTIVE VEHICLE VELOCITY VECTOR AT T1
		STODL	VINIT
			PIPTIME
		STORE	TNIT
		BDSU
			TPASS4
		STOVL	DELLT4
			HI6ZEROS
		STODL	DELVSUM
			HI6ZEROS
		STORE	NBRCYCLS
		GOTO
			CALL40.8
		EBANK=	DAPDATR1
STEERING	TC	INTPRET
		CALL
			UPDATEVG
		EXIT
		CAF	BIT9		# CHECK IMPULSW
		MASK	FLAGWRD2
		CCS	A
		TCF	+3		# PRE-IGNITE, REQUEST ENG-OFF, OR POST-OFF
SERVXT		TC	POSTJUMP
		CADR	SERVEXIT
		CAF	BIT13		# CHECK ENGINE-ON/-OFF
		EXTEND
		RAND	DSALMOUT
		EXTEND
		BZF	SERVXT		# ENGINE-OFF, SO PRE-IGNITE OR POST-OFF
		TCR	E7SETTER
		EBANK=	TIG
		INHINT
		EXTEND
		DCA	TIG
		DXCH	MPAC
		EXTEND
		DCS	TIME2
		DAS	MPAC
		TCR	DPAGREE
		CAE	MPAC +1		# (LESS THAN 6 (OR 4) SECONDS TO GO)
		CCS	A		# PROTECT AGAINST NEG/ZRO W.L. CALL
		TCF	+3
		TCF	+2
		CAF	ZERO
		AD	ONE
		XCH	L
		CA	ZERO
		DXCH	TGO
		CA	TGO +1
		TC	WAITLIST
## Page 702		
		EBANK=	TGO
		2CADR	ENGINOFF
		
		TC	2PHSCHNG
		OCT	40153		# A, 3.15 = ENGINOFF (TGO+1) .... NOTE GROUP
		OCT	10035		# B, 5.3 = REREADAC, AND START BELOW
		TC	DOWNFLAG	# CLEAR IMPULSW, ENGINOFF IS NOW SET UP
		ADRES	IMPULSW		# RESTARTS OK
		TCF	SERVXT

## Page 703
# ROUTINE ** CLOKTASK ** DESCRIPTION

		EBANK=	TIG
CLOKTASK	CAF	BIT11		# IS TIMRFLAG SET
		MASK	FLAGWRD7
		CCS	A
		TCF	CLOCKON
		TC	PHASCHNG
		OCT	00006		# KILL RESTART
		TC	TASKOVER
		
CLOCKON		EXTEND
		DCA	TIME2
		DXCH	TTOGO
		EXTEND
		DCS	TIG
		DAS	TTOGO
		
SETCLOCK	CAF	1SEC
		TC	WAITLIST
		EBANK=	TIG
		2CADR	CLOKTASK
		
		CCS	NVWORD1
		TCF	+3
		TCF	SETTB6
		
		TCF	+1
		CS	V06N85B		# CHECK FOR V06N85B (P41)
		AD	NVWORD1
		EXTEND
		BZF	SETUPDYN	# V06N85, SO UPDATE N85 FOR DYNAMIC DISP
		
		CAF	PRIO27
		TC	NOVAC
		EBANK=	DAPDATR1
		2CADR	CLOCKJOB
		
SETTB6		CS	TIME1		# SET GROUP6 TIMEBASE
		TS	TBASE6
		TCF	TASKOVER
		
SETUPDYN	CAF	PRIO27		# SET UP A JOB TO UPDATE N85 (FOR P41=V06)
		TC	FINDVAC
		EBANK=	DAPDATR1
		2CADR	DYNDISP
		
		TCF	SETTB6		# CLOSE OUT CLOCKTASK
## Page 704
DYNDISP		TC	INTPRET		# UPDATE N85 FOR A DYNAMIC V06N85 IN P41.
		CALL			#	PRIOR TO BLANKING AND AVEG (V16N85)
			P40CNV85
		EXIT
		TCF	CKNVWRD1
		
## Page 705
# ROUTINE ** CLOCKJOB ** DESCRIPTION

		EBANK=	DAPDATR1
CLOCKJOB	CA	CDUX
		TS	CDUSPOTX
		CA	CDUY
		TS	CDUSPOTY
		CA	CDUZ
		TS	CDUSPOTZ
		TC	BANKCALL
		CADR	QUICTRIG
CKNVWRD1	INHINT
		CCS	NVWORD1		# DETERMINE FUNCTION, INDICATED BY NVWORD1
		TCF	NOFLASH
		TCF	ENDOFJOB
		TCF	ENGREQST	# SPS ENGINE-ON-ENABLE V99 FLASH
FAILDSP		CAF	V06N40		# SPS ENGINE-FAILED V97 FLASH
		TC	BANKCALL
		CADR	CLOCPLAY
		TCF	V97T		# TERMINATE
		TCF	V97P		# PROCEED
		TCF	V97E		# ENTER
		
ENGREQST	CAF	V06N40
		TC	BANKCALL
		CADR	CLOCPLAY
		TCF	V99T		# TERMINATE
		TCF	V99P		# PROCEED
		TCF	V99E		# ENTER
		
NOFLASH		CAE	NVWORD1		# DISPLAY NVWORD1 NORMALLY
		TC	BANKCALL
		CADR	REGODSP
		
E7SETTER	CAF	EBANK7
		TS	EBANK
		EBANK=	TIG
		TC	Q
		
E6SETTER	CAF	EBANK6		# SET UP EBANK6
		TS	EBANK
		EBANK=	DAPDATR1
		TC	Q
		
		EBANK=	DAPDATR1
V99E		TC	2PHSCHNG
		OCT	00006		# KILL PRE40.6/CLOKTASK PROTECTION
		OCT	05024		# C, PRIORITY NEXT, JOB BELOW
## Page 706		
		OCT	27000
V99EJOB		TCR	TVCZAP -1	# WIPE OUT TVC, CLOKTASK
		TCF	P40RCS		# V16N85 POST-BURN OPERATIONS
		
		EBANK=	DAPDATR1
V99T		TC	2PHSCHNG	# (ENTRY FROM V97T FLOW TOO)
		OCT	00006		# KILL PRE40.6/CLOKTASK PROTECTION
		OCT	05024		# C, PRIORITY NEXT, JOB BELOW
		OCT	27000
V99TJOB		TCR	TVCZAP -1	# WIPE OUT TVC, CLOKTASK
		TCF	POST41		# AVEGEXIT, SETMAXDB, GOTOPOOH
		
V99P		INHINT
		CAE	FLAGWRD7	# CHECK ASTN FLAG FOR PRIOR V99P
		MASK	BIT12
		CCS	A
		TCF	V99P/TIG	# YES, THIS MUST BE A RESTART ENTRY
		
ASTNV99P	CAF	BIT12		# SET ASTN FLAG
		ADS	FLAGWRD7
		CAE	FLAGWRD7	# CHECK IGN FLAG FOR TIG-0 ARRIVAL
		MASK	BIT13
		EXTEND
		BZF	V99P/TIG	# NO, CLEAR THE V99 AND WAIT FOR TIG-0
		
ENDV99PI	CAF	BIT1		# TIG-0 HAS COME ALREADY
		TC	WAITLIST	# SET UP IGNITION HERE
		EBANK=	DAPDATR1
		2CADR	IGNITION
		
V99P/TIG	CAF	V06N40		# CLEAR THE V99 FLASH AND WAIT FOR TIG-0
		TS	NVWORD1
ENDV99P		TCF	ENDOFJOB

		EBANK=	CSMMASS
V97T		TC	2PHSCHNG
		OCT	00006		# KILL GROUP 6 (CLOKTASK)
		OCT	40674		# A, 4.67 = V97TTASK (-0 CS), TBASE NOW
		CAF	BIT1
		TC	TWIDDLE
		ADRES	V97TTASK	# KEEP EBANK6 FOR MASSES, SPSOFF, ETC.
		TCF	ENDOFJOB
		
		EBANK=	CSMMASS
V97TTASK	CAF	ZERO		# DISABLE CLOCKJOB
		TS	NVWORD1
		CAF	3MDOT		# 3 SECONDS OF MDOT (2-4 SEC ENGFAIL
		AD	CSMMASS		#	DETECTION) NOT LOST BECAUSE THRUST
		TS	MASSTMP		#	FAILED.  COPYCYCLE FOR MASSBACK
## Page 707		
		TC	PHASCHNG
		OCT	05014		# C, DELTAT NEXT, TASK BELOW, IN
		DEC	-0		# -0 CS
		
		TCR	SPSOFF		# SHUTDOWN SPS ENGINE, MASS UPDATE, ETC.
		TC	PHASCHNG
		OCT	00714		# A, 4.71 = V97TRCS (250 CS), TBASE OLD
		TC	FIXDELAY	# DELAY 2.5 SECONDS FOR (POSSIBLE) TAIL-
		DEC	250		#	OFF (FALSE THRUST-LOSS)
		
		EBANK=	DAPDATR1
V97TRCS		TC	IBNKCALL	# RCS DAP IN 0.6SEC, SETTING T5 BITS TO
		CADR	RCSDAPON	#	KILL TVCEXEC/TVCROLLDAP STARTS
		CAF	PRIO27		# SET UP V99T FOR TVCZAP AND POST41 (SET-
		TC	NOVAC		#	MAXDB AND GOTOPOOH)
		EBANK=	DAPDATR1	# EBANK6 FOR SETMAXDB IN POST41
		2CADR	V99T
		
ENDV97T		TCF	TASKOVER

		EBANK=	V97VCNTR
V97P		TC	PHASCHNG
		OCT	40734		# A, 4.73 = V97PTASK (-0 CS), TBASE NOW
		CAF	BIT1
		TC	TWIDDLE
		ADRES	V97PTASK
		TCF	ENDOFJOB
		
		EBANK=	V97VCNTR
V97PTASK	CAE	V97VCNTR	# GET MASS UPDATES (TVCEXEC) GOING AGAIN
		TS	VCNTR		#	(ERRORS IF FLASE THRUST-LOSS AND/OR
					#	POOR SYNCH OF MANUAL ENGINE-ON AND
					#	THE VERB 97 PROCEED)
		CAF	V06N40		# REDISPLAY V06N40
		TS	NVWORD1
		TC	UPFLAG		# SET IDLEFAIL TO ALLOW R41-BYPASS, IN
		ADRES	IDLEFAIL	#	CASE OF UNFAVORABLE S40.8 SYNCH
		TC	UPFLAG		# SET STEERSW TO RE-ENABLE STEERING
		ADRES	STEERSW
		TC	PHASCHNG
		OCT	00134		# A, 4.13 = R40ENABL (200 CS), TBASE OLD
		TC	FIXDELAY	# WAIT 2 SECONDS, THEN
		DEC	200
		
		EBANK=	WHOCARES
R40ENABL	TC	DOWNFLAG	# RE-ENABLE R40 BY CLEARING IDLEFAIL
		ADRES	IDLEFAIL
		TC	PHASCHNG
		OCT	00004		# KILL GROUP 4
## Page 708		
ENDV97P		TCF	TASKOVER

		EBANK=	WHOCARES
V97E		TC	PHASCHNG
		OCT	40534		# A, 4.53 = V97ETASK (-0 CS), TBASE NOW
		CAF	BIT1
		TC	WAITLIST
		EBANK=	TIG
		2CADR	V97ETASK
		
		TCF	ENDOFJOB
		
		EBANK=	TIG
V97ETASK	CS	OCT24		# FORCE R1 OF V06N40 TO READ  59X59
		TS	TIG
		CAF	V06N40		# REDISPLAY V06N40
		TS	NVWORD1
		TCR	E6SETTER	# RETURN TO EBANK6 FOR REST OF V97ETASK
		EBANK=	CSMMASS
		CAF	3MDOT		# 3 SECONDS OF MDOT (2-4 SEC ENGFAIL
		AD	CSMMASS		#	DETECTION) NOT LOST BECAUSE THRUST
		TS	MASSTMP		#	FAILED....COPYCYCLE FOR MASSBACK
		TC	PHASCHNG
		OCT	00754		# A, 4.75 = SPSOFF97 (-0 CS), TBASE OLD
SPSOFF97	TCR	SPSOFF
		TC	PHASCHNG
		OCT	00114		# A, 4.11 = V97E40.6 (250 CS), TBASE OLD
		TC	FIXDELAY	# DELAY 2.5 SECONDS FOR (POSSIBLE) TAIL-
		DEC	250		#	OFF (FALSE THRUST-LOSS)
		
		EBANK=	DAPDATR1
V97E40.6	CAF	BIT1
		TC	WAITLIST
		EBANK=	CNTR
		2CADR	PRE40.6		# USE S40.6 RESTART ENTRY TO TRIM ENGINE
		
		TC	IBNKCALL	# RCS DAP IN 0.6SEC, SETTING T5 BITS TO
		CADR	RCSDAPON	#	KILL TVCEXEC/TVCROLLDAP STARTS.
					#	LEAVE NARROW DEADBAND FOR REIGNITE
					
		TC	2PHSCHNG
		OCT	00026		# A, 6.2 = PRE40.6 (-0 CS), CLOKTASK (1 SEC)
		OCT	05014		# C, DELTAT NEXT, TASK BELOW, IN
		DEC	-0		# -0 CS

QUICKIGN	CS	PRIO14		# CLEAR ASTNFLAG AND SET IGNFLAG FOR
		MASK	FLAGWRD7	#	IMMEDIATE V99 RESPONSE
		AD	BIT13
		TS	FLAGWRD7
		TC	FIXDELAY	# DELAY TO ALLOW TIME FOR PRE40.6
## Page 709		
		DEC	30
		
V99FLASH	CS	BIT9		# CAUSE V99 TO FLASH
		TS	NVWORD1
		TC	2PHSCHNG
		OCT	40774		# A, 4.77 = TIG-0 (-0 CS) TBASE FOR PREPTVC
		OCT	00033		# A, 3.3 = S40.13 (PRIO 20)
		CAF	PRIO20		# SET UP TIMEBURN
		TC	FINDVAC
		EBANK=	TGO
		2CADR	S40.13
		
ENDV97E		TCF	TASKOVER	# WAIT FOR CLOCKJOB (IMMEDIATE) REACTION
					# 	TO FLASHING V99 RESPONSE
					
# MOD NO2				LOG SECTION P40-P47
# MOD BY ZELDIN
#
# FUNCTIONAL DESCRIPTION
#	COMPUTE INITIAL THRUST DIRECTION(UT) AND INITIAL VALUE OF VG
#	VECTOR(VGTIG).
#
# CALLING SEQUENCE
#	L	CALL
#	L+1		S40.1
#
# NORMAL EXIT MODE
#	AT L+2 OF CALLING SEQUENCE (GOTO L+2) NORMAL RETURN OR
#	ERROR RETURN IF NOSOFLAG =1
#
# SUBROUTINES CALLED
#	CSMPREC
#	INITVEL
#	CALCGRAV
#	MIDGIM
#
# ALARM OR ABORT EXIT MODES
#	L+2 OF CALLING SEQUENCE, UNSOLVABLE CONIC IF NOSOFLAG=1
#
# ERASABLE INITIALIZATION REQUIRED
#	WEIGHT/G	ANTICIPATED MAG. OF VEHICLE MASS	SP B16 KGM
#	XDELVFLG	1=DELTA-V MANEUVER, 0=AIMPT STEER
#   IF DELTA-V MANEUVER
#	DELVSIN		SPECIFIED DELTA-V REQUIRED IN
#			INERTIAL COORDS. OF ACTIVE VEHICLE
#			AT TIME OF IGNITION		VECTOR B7 M/CS
#	DELVSAB		MAG. OF DELVSIN			DP B7 M/CS
#	RTIG		POSITION AT TIME OF IGNITION	VECTOR B29 M
#	VTIG		VELOCITY AT TIME OF IGNITION	VECTOR B7 M/CS
#	CSTEER = 0					DP
#   IF AIMPOINT STEERING
#   IF AIMPT STEER
#	TIG		TIME OF IGNITION		DP B28 CS
#	RTARG		POSITION TARGET TIME		VECTOR B29 M
#	CSTEER = ECSTEER (GR 0) 			DP B1
## Page 710
#	TPASS4 - TIME OF ARRIVAL AT AIMPOINT
#
# OUTPUT
#	UT		1/2 UNIT VECTOR ALIGNED WITH THRUST DIRECTION IN REF COOR
#	VGTIG		INITIAL VALUE OF VELOCITY
#			TO BE GAINED (INERT. COORD.)		VECTOR B7 M/CS
#	DELVLVC		VGTIG IN LOC. VERT. COORDS.		B7 M/CS
#	F		NOMINAL THRUST FOR ENG USED FOR S40.13	DP B7 M-NEWT
#	BDT		V REQUIRED AT TIG -V REQUIRED AT (TIG-2SEC)
#	-GDT		FOR S40.13				VECT B7 M/CS
#	RTIG		CALC IN S40.1B (AIMPT) FOR S40.2,3	VECTOR B29M
#			POSITION AT TIME OF IGNITION
#
# DEBRIS	QTEMP1
#		MPAC, QPRET
#		PUSHLIST
#		RTX2,RTX1

		BANK	14
		SETLOC	P40S1
		BANK

		COUNT	16/S40.1
		
S40.1		SET	VLOAD
			FIRSTFLG
			LO6ZEROS
		STORE	BDT
		STQ	BOF
			QTEMP
			XDELVFLG
			S40.1B		# LAMBERT
## <a name="DELVSAB"></a>
## <b>Reconstruction:</b>  At this point in Comanche 44, we would find the interpretive-code sequence<br>
## <pre>
##    SETPD   VLOAD
##            0
##            VTIG
## </pre>
## while in Comanche 45 it has been replaced by<br>
## <pre>
##    SETPD   CALL
##            0
##            S40.1A
## </pre>
## In Comanche 45, this is paired with the related change of an added subroutine <code>S40.1A</code> at the very end
## of memory bank 16, whose source code we have placed at <a href="RTB_OP_CODES.agc.html#S401A">the end of log section RTB OP CODES</a>.
## <br><br>
## This change relates to <a href="http://www.ibiblio.org/apollo/Documents/Colossus%202(A)%20Software%20Changes.pdf#page=10&view=FitH">
## MIT Software Anomaly Report COM-4</a>.  What the report
## authorizes is a computation in Comanche 45, in routines P40 and P41, that can be symbolized in pseudocode as<br>
## <pre>
##    DELVSAB = | DELVSIN |     # Compute length of vector DELVSIN.
## </pre>
## There are <i>many</i> ways to implement such a computation, but there are a number of constraints which
## help to weed out the forest of coding possibilities.  Here's a list of some of those constraints:<br>
## <ul>
## <li>The routine <code>S40.1</code> is called both by P40 and P41, so it would be reasonable to implement the
## change just once in <code>S40.1</code> rather than twice in P40 and P41.  If the computation itself involves calling
## a subroutine, it cannot be done until this point in <code>S40.1</code>, since the <code>STQ</code> instruction which immediately
## precedes it is the one which preserves <code>S40.1</code>'s return address.  For similar pragmatic reasons, the
## computation can't be performed in a natural way below this point.  And indeed, if we examine later Colossus
## revisions like Comanche 55, we find that the computation occurs exactly at this point in those revisions.</li>
## <li><a href="https://archive.org/stream/apertureCardBox467Part2NARASW_images#page/n89/mode/1up">
## The list of correct memory-bank checksums</a> is <i>very</i> suggestive that the only changes between
## Comanche 44 and 45 appeared in memory banks 16 and 17.  Routine <code>S40.1</code> is itself located in bank 16, so
## it would be reasonable to suppose that the side effects of the change should also be localized in bank 16.
## Besides, it turns out that <a href="TVCINITIALIZE.agc.html#ATTINIT">a separate change in log section TVCINITIALIZE</a>
## is responsible for entirety the changes in bank 17, at least in so far as checksums are concerned.</li>  
## <li>For the side effects of the calculation to be localized to bank
## 16, it is necessary that the combined length (in words of memory) of routines <code>S40.1</code> and <code>S40.1B</code> (plus
## the 2 words of the constant <code>THETACON</code> following <code>S40.1B</code>) must not change between Comanche 44
## and 45, for if that length changes, than addresses in bank 16 that are referenced outside of bank 16 change as well.
## If the length of <code>S40.1</code> by itself were preserved, it would be be better still in terms of plausibility.</li>
## <li><a href="https://www.ibiblio.org/apollo/Documents/a042186.pdf#page=39">Table 4-1 of document </i>Software Systems
## Development: A CSDL Project History</i></a> is suggestive that Comanche 45 uses 5 words of memory more than Comanche 44.
## <a href="TVCINITIALIZE.agc.html#ATTINIT">The change in bank 17, log section TVCINITIALIZE</a>, mentioned earlier, is known not
## to affect the length of bank 17.  Therefore, we might speculate that the <code>DELVSAB</code>-computation fix would add
## 5 additional words to the end of bank 16.  (However, the document we've referenced is neither as accurate nor as specific 
## as we'd need to be to insure that this is a true constraint.)</li>
## </ul>
## Rather than elaborate further, I'll simply note that the proposed fix satisfies all of the constraints
## mentioned above, in their strongest forms.
## <br><br>
## And I'd note additionally that many other logically-corrected codings of the calculation
## that also satisfied the constraints (in their stronger and weaker forms) were tested, but none other then the proposed one produced
## the correct checksum for memory-bank 16.  So while we cannot guarantee absolutely that this particular coding is the one and
## only coding meeting the constraints, it is extremely suggestive that this the coding used in Comanche 45.
## One curious point should be mentioned in the interest of complete disclosure:  In this Comanche 45
## code, the interpretive instruction <code>SETPD 0</code> is 
## executed, and then <code>DELVSAB</code> is computed.  Whereas in the later Comanche 55 coded, the computation order is reversed, with no 
## satisfying reason for the difference and no contemporary documentation justifying it.  We are inclined to discount the 
## significance of this difference.
## <br><br>
## Finally, the choice of the name "S40.1A" for the newly-added routine <code>S40.1A</code> at the end of memory bank 16
## is somewhat arbitrary.  The choice is consistent with naming used elsewhere in AGC code, but could well be something
## entirely different in a contemporary Comanche 45 program listing.
		SETPD	CALL		# EXTERNAL DELTA V
			0
			S40.1A          # JUMP TO END OF BANK TO CALCULATE DELVSAB 
					#	THUS PERMITTING MODULE-ONLY CHANGE
		STORE	VINIT
		VXV	UNIT
			RTIG
		STOVL	UT		# UP IN UT
			RTIG
		STORE	RINIT
		VSQ	PDDL
			36D
		DMP	DDV
			THETACON
		DMP	DMP
			DELVSAB
			WEIGHT/G
		DDV
## Page 711
			F
		STOVL	14D
			DELVSIN

		DOT	VXSC
			UT
			UT
		VSL2	PUSH		# (DELTAV.UP)UP SCALED AT 2(+7) P.D.L. 0
		BVSU	PDDL		# DELTA VP SCALED AT 2(+7) P.D.L. 6
			DELVSIN
			14D
		SIN	PDVL
			6D
		VXV	UNIT
			UT
		VXSC	STADR
		STOVL	VGTIG		# UNIT(VPXUP)SIN(THETAT) IN VGTIG
		UNIT	PDDL		# UNIT(DELTA VP) IN P.D.L. 6
			14D
		COS	VXSC
		VAD	VXSC
			VGTIG
			36D
		VSL2 	VAD
		STADR
		STORE	VGTIG		# VG IGNITION SCALED AT 2(+7) M/CS

		UNIT
		STOVL	UT		# THRUST DIRECTION SCALED AT 2(+1)
			VGTIG
		PUSH	SET
			AVFLAG
		CALL
			MIDGIM		# VGTIG IN LV COOR AT 2(+7)M/CS IN DELVLVC
		GOTO
			QTEMP
S40.1B		DLOAD	DSU		# LAMBERT
			TIG
			TWODT
		STODL	TDEC1
			TPASS4
		DSU	
			TDEC1
		STCALL	DELLT4
			AGAIN
		VLOAD
			VIPRIME
		STODL	UT
			TIG
		STORE	TDEC1
## Page 712		
		BDSU
			TPASS4
		STCALL	DELLT4
			AGAIN
		VLOAD	PUSH
			DELVEET3
		STORE	VGTIG
		SET	CALL
			AVFLAG
			MIDGIM
		SETPD	GOTO
			0
			CALCUT
			
THETACON	2DEC	.31830989 B-8

		SETLOC	P40S3
		BANK
		
		COUNT	24/S40.1

EP4(45)H	2DEC	.125

EP4(10)H	2DEC	.027777777

AGAIN		STQ	CALL
			QTEMP1
			THISPREC
		SXA,2	SXA,1
			RTX2
			RTX1
		VLOAD
			RATT
		STORE	RTIG
		STOVL	RINIT
			VATT
		STORE	VTIG
		STORE	VINIT
		SETPD	SLOAD
			0
			HI6ZEROS
		PDDL	BON
			EP4(45)H
			NORMSW
			+3
		DLOAD
			EP4(10)H
		PUSH	CALL
			INITVEL
		SETPD	GOTO
## Page 713		
			0
			QTEMP1
CALCUT		VLOAD	CALL
			RTIG
			CALCGRAV	# GDELTAT IN MPAC AT 2(+7) M/CS
		VSL1	V/SC
			200CS		# G AT 2(-5) M/CS. CS
		PDVL	VSU
			VIPRIME
			UT
		V/SC	VSU
			200CS
		VXSC	VSL2
			CSTEER
		STOVL	12D		# B.C SCALED AT 2(-5) PDL 12D
			VGTIG
		UNIT	PUSH		# UG PDL 0 SCALED AT 2(+1)
		
		DOT	VXSC
			12D
			0
		VSL2	BVSU
			12D
		STODL	12D		# Q PDL 12D SCALED AT 2(-5)
			F
		SRR	DDV
			4
			WEIGHT/G
		DSQ	PDVL		# F/MASS SQUARED PDL 6 AT 2(-10)M/(CS.CS)
			12D
		VSQ
		BDSU	SQRT
		VXSC	VSL1
		VAD	UNIT
			12D
		STCALL	UT
			QTEMP
200CS		2DEC	200 B-12

## Page 714
# PROGRAM DESCRIPTION S40.2,3		DATE 15,NOV,66
# MOD NO 2				LOG SECTION P40-P47
# MOD BY ZELDIN
#
# FUNCTIONAL DESCRIPTION
#	
#	COMPUTE GIMBAL ANGLES IF THRUSTING OCCURRED WITH PRESENT IMU
#	ORIENTATION, WINGS LEVEL SPACECRAFT, HEADS UP
#	COMPUTE X AXIS OF ENGINE BELL
#	COMPUTE PREFERRED IMU ORIENTATION (XSCREF)
#	FOR THIS CALCULATION, ASSUME X AXIS OF SC ALONG UT INITIALLY,
#	YSC=UNIT(XXR), ZSC=UNIT(XX(XXR)) AND ROTATE ENGINE BELL ALONG UT
#	NEW SC AXES WILL BE APPROX. WINGS LEVEL AND NEW SC AXES IN REF.
#	COORDS. WILL BE PREFERRED IMU ORIENTATION.
#	COMPUTE DESIRED THRUST DIRECTION IN SM COORDS.
#
# CALLING SEQUENCE
#	L	CALL
#	L+1		S40.2,3
#
# NORMAL EXIT MODE
#	AT L+2 OF CALLING SEQUENCE (GOTO L+2)
#
# SUBROUTINES CALLED
#	CALCGA
#
# ALARM OR ABORT MODES
#	NONE
#
# ERASABLE INITIALIZATION REQUIRED
#	PACTOFF		TOTAL PITCH TRIM ANGLE		SP AT 1.0795111 REV.
#	YACTOFF		TOTAL YAW   TRIM ANGLE		SP AT 1.0795111 REV.
#	UT		DESIRED THRUST DIRECTION	VECT. B2 M/(CS.CS)
#	RTIG		POSITION AT TIME OF IGNITION	VECT. B29 M
#	ENG2FLAG	ON=RCS  OFF=SPS
#
# OUTPUT
#	SCAXIS		UNIT VECT. ALIGNED WITH ENG BELL IN SC COOR	B1
#	XSCREF		UNIT VECTORS ALIGNED WITH PREFERRED IMU		B1
#	YSCREF
#	ZSCREF
#	GIMBAL ANGLES IN THETAD
#	POINTVSM	UNIT VECT ALONG DESIRED THRUST DIRECTION IN SM	B1
#
# DEBRIS
#	PUSHLIST, QPRET, MPAC
#	QTEMP	TEMP. ERASABLE

		BANK	24
		SETLOC	P40S
		BANK
		COUNT*	$$/S40.2
S40.2,3		VLOAD	MXV
			UT
			REFSMMAT
		VSL1	STQ
			QTEMP
		STORE	POINTVSM	# THRUST IN SM AT 2
		SETPD	BON
			0
## Page 715
			ENG2FLAG
			S40.2,3B
		DLOAD
			HI6ZEROS
		PUSH	SLOAD		# ZERO PDL 0
			YACTOFF
		DMP	SL1
			TRIMSCAL
		DAD	PUSH
			YBIAS
		COS	PDDL		# COS(Y +Y0) PDL 2
		SIN	PUSH		# SIN(Y +Y0) PDL 4
		SLOAD
			PACTOFF
		DMP	SL1
			TRIMSCAL
		DAD	PUSH
			PBIAS
		COS	PDDL		# COS(P +P0) PDL 6
		SIN	PUSH		# SIN(P +P0) PDL 8D
		STODL	ZSCREF		# SIN(P +P0)
			6
		DMP	SL1
			4
		DCOMP	PDDL		# -SIN(Y+Y0)COS(P+P0) PDL 10
			6
		DMP	SL1
			2
		VDEF
		
		STODL	XSCREF		# PD POINTER AT 6 NEW SC X AXIS SCALED AT 
			ZSCREF
		DMP	SL1
			4
		PDDL	DMP
			ZSCREF
			2
		SL1	DCOMP
		VDEF
		
		STODL	ZSCREF		# PD POINTER AT 4 NEW SC Z AXIS SCALED AT 2
		VDEF
		
		STODL	YSCREF		# PD POINTER AT 0 NEW SC Y AXIS SCALED AT 2
			ZSCREF
		PDDL	PDDL
			YSCREF
			XSCREF
		VDEF
## Page 716
		STOVL	SCAXIS		# ENGINE BELL SCALED AT 2
			UT
		PDVL	UNIT
			RTIG
		VXV	VCOMP
			0
		UNIT	PUSH
		CALL
			TSTRXUT
		VXV	VCOMP
			0
		VSL1	PDVL		# 2 RF/SC IN PDL 12D
			XSCREF
		VXM	VSL1
			0
		STOVL	XSCREF		# X OF PREF IMU,X OF SC IN REF COOR. AT 2
			YSCREF
		VXM	VSL1
			0
		STOVL	YSCREF		# Y OF PREF.IMU,Y OF SC IN REF COOR. AT 2
			ZSCREF
		VXM	VSL1
			0
		STORE	ZSCREF		# Z OF PREF. IMU,Z OF SC IN REF COOR. AT 2
		SETPD	GOTO
			0
			QTEMP
S40.2,3B	VLOAD
			UNITX
		STOVL	SCAXIS
			UT
		STORE	XSCREF
		VXV	UNIT
			RTIG
		STCALL	6D
			TSTRXUT
		STORE	YSCREF
		VXV	VCOMP
			XSCREF
		VSL1
		STCALL	ZSCREF		# ZNB AXIS IN REF COOR
			QTEMP
TSTRXUT		DLOAD	BHIZ
			36D
			BADVCTOR
		VLOAD	RVQ
			6D
BADVCTOR	VLOAD	UNIT
			RTIG
		PDVL	UNIT
## Page 717
			VTIG
		VSR3	VAD
		VXV	UNIT
			UT
		VCOMP
		STORE	6D
		RVQ
TRIMSCAL	2DEC	1.07975111 B-1

YBIAS		2DEC	+.00263888889	# YAW	MECH BIAS (+0.95 DEG, THRUST ON)

PBIAS		2DEC	-.00597222222	# PITCH	MECH BIAS (-2.15 DEG, THRUST ON)

					# REFERENCE, TRW 68.6520.3.3-40 27 FEB, 1968
					
# PROGRAM DESCRIPTION S41.1		DATE 8 DEC 66
# MOD NO 1				LOG SECTION P40-P47
# MOD BY ZELDIN
#
# FUNCTIONAL DESCRIPTION
#
#	COMPUTE VELOCITY TO BE GAINED INITIALLY IN REF COORDS.
#	TO CONTROL COORDS.
#
# CALLING SEQUENCE
#
#	L	CALL
#	L+1		S41.1
#
# NORMAL EXIT MODE
#	
#	AT L +2 OF CALLING SEQUENCE
#
# SUBROUTINES CALLED:
#
#	CALCSMSC
#	CDUTRIG
#
# ALARM OR ABORT MODES
#
#	NONE
#
# ERASABLE INITIALIZATION REQUIRED
#
#	VG IN REF. COORD. PDL L POINTER AT L+5.  S41.1 WILL RETURN WITH
# 	POINTER AT L (L MUST BE LESS THAN OR = TO 14D)
#
# OUTPUT
#
#	MPAC CONTAINS VG IN CONTROL COORDS		VECT. B7 M/CS
#
# DEBRIS:
#
#	QTEMP		TEMP ERASABLE
#	QPRET

		COUNT	22/S41.1
		
		SETLOC	P40S5
		BANK
		
S41.1		STQ	CALL
			QTEMP
			CDUTRIG
		VLOAD
		MXV	CALL
			REFSMMAT
			*SMNB*
## Page 718
		MXV	VXSC
			QUADROT
			TENBNK14	# VG IN CONTROL COORD IN MPAC SCALED AT
		VSL5	GOTO		# VG IN CONTROL COORDS. IN MPAC AT 2(+7)
			QTEMP
TENBNK14	2DEC	10. B-4

## Page 719
# NAME		S40.8 - CROSS PRODUCT STEERING
# FUNCTION	(1) UPDATES THE VELOCITY-TO-BE-GAINED VECTOR.
#		(2) GENERATES ANGULAR RATE STEERING COMMANDS FOR AUTOPILOT.
#		(3) ESTABLISHES ENGINE CUT-OFF SIGNALS AT APPROPRIATE TIMES.
#		(4) INITIATES THRUST-FAIL ROUTINE, R40
# CALLING SEQ	CALL S40.8
# INPUT		VGPREV 	-	LAST VALUE OF THE VELOCITY-TO-BE-GAINED VECTOR
#				PRIOR TO UPDATING IN METERS/CS AT +7.
#		DELVREF	-	CHANGE IN VEHICLE VELOCITY SINCE LAST MEASUMEMENT
#				IN METERS/CS AT +7.
#		BDT	-	EFFECT OF RATE OF CHANGE OF REQUIRED VELOCITY AND
#				GRAVITY DURING DT UPON VELOCITY-TO-BE-GAINED IN
#				METERS/CS AT +7.
#		CSTEER	-	A SCALAR OF THE STEERING LAW, SC.AT B+1, USED FOR
#				SPS AIMPOINT STEERING MANEUVERS
#		IDLEFAIL -	A FLAG TO INHIBIT (IDLE) THE THRUST-FAIL ROUTINE
#		STEERSW	-	A SWITCH TO PRECLUDE NEEDLESS CONDUCT OF STEERING
#		REFSMMAT, DAPDATR1, PIPTIME
#		EREPFRAC, ETDECAY, KPRIMEDT FOR TVC
# OUTPUT	TTOGO	-	TIME REMAINING FOR ENGINE BURN IN CS AT +28
#		OMEGAC	-	DP VECTOR RATE COMMAND, SC.AT 1/(2TVCDT) REVS/SEC
#		VG, VGPREV, VGDISP, TGO, TIG, SCALED AS NOTED IN CODING
#		STEERSW, IMPULSW, NVWORD1
#		REPFRAC, CNTR, VCNTR, VCNTRTMP FOR TVC (R40 INTERFACING)
# DEBRIS	OMEGAXC, +1
# SUBROUTINES USED  	-	*SMNB*, ALARM

		SETLOC	P40S1
		BANK
		EBANK=	DAPDATR1
		COUNT	16/S40.8
		
S40.8		SETPD	STQ
SPBIT1			00D
			QTEMP
		VLOAD	BVSU		# CONSTRUCT DELVG, SC.AT B+7 M/CS
			DELVREF
			BDT
		VAD
			VGPREV
		STORE	VG		# VELOCITY-TO-BE-GAINED, SC.AT B+7 M/CS
		
		ABVAL
		STORE	VGDISP		# FOR DISPLAY PURPOSES
		EXIT
		TC	PHASCHNG
		OCT	10035		# TYPE B RESTART BELOW AND 5.3 REREADAC
		
		TC	INTPRET
		VLOAD
## Page 720
			VG
		STORE	VGPREV
		BOFF	VLOAD
			STEERSW		# SKIP TGO AND CROSS-PRODUCT
			QTEMP
			DELVREF
		ABVAL	PUSH		# CHECK FOR LOTHRUST
		SLOAD	DMP
			DVTHRESH	# SC.AT B-2 M/CS
			DPB-9
		BDSU
		BMN	EXIT
			LOTHRUST
		CAE	DAPDATR1	# ENABLE TVCDAP CG TRACKING
		MASK	BIT14
		CCS	A
		CAF	BIT1
		INDEX	A		# LM-OFF, LM-ON VALUE
		CAE	EREPFRAC
		TS	REPFRAC
		
		TC	INTPRET
TGOCALC		VLOAD	BVSU		# GET DELVG
			DELVREF
			BDT
		UNIT
		DOT	PUSH		# (00D)
			VG
		BPL	DDV		# ANGLE SHOULD BE GREATER THAN PI/2
			INCRSVG		#	DISPLAY ALARM IF NOT
			2VEXHUST
		DAD	DMP		# (DOT PRODUCT UP FROM 00D)
			LODPHALF
		NORM	SR1
			X1
		PDDL	NORM
			36D		# (MAG DELVG)
			X2
		BDDV
		XSU,2	SL*
			X1
			0 -9D,2
		DMP	PUSH		# (00D)
			-FOURDT
		SLOAD	SR
			ETDECAY		# ETDECAY SC.AT B+14 CS
			14D
		BDSU	STADR
		STORE	TGO		# TIME TO GO IN CS. AT +28
		DAD
## Page 721
			PIPTIME
		STODL	TIG
			TGO
		DSU	BMN
			FOURSEC
			S40.81
			
XPRODUCT	VLOAD	VXSC
			BDT
			CSTEER
		VSL2	VSU
			DELVREF
		UNIT	PDVL
			VG
		UNIT	VXV
		MXV	CALL
			REFSMMAT	# (REFSMMAT/2)
			*SMNB*
		VXSC
			KPRIMEDT	# (KPRIMEDT SCIAT PI/8 RAD)
OMEGACLC	STORE	OMEGAC
		GOTO
			QTEMP
			
		SETLOC	DAPS7
		BANK
		COUNT	17/S40.8
		
TWODT		2DEC	200.0 B-28	# 2 SEC

-FOURDT		2DEC	-800 B-18	# -4(200CS), SC.AT B+18CS (-4 FOR SCALING)

2VEXHUST	2DEC	63.020792 B-7	# 2(10338.0564 FPS), SC.AT B+7 M/CS

FOURSEC		2DEC	400.0 B-28	# 4 SEC

DPB-9		2DEC	1 B-9

		SETLOC	DAPS6
		BANK
		
		COUNT	20/S40.8
		
S40.81		SET	VLOAD		# TGO LESS THAN 4 SECONDS
			IMPULSW		# FOR ENGINE-OFF CALL
			HI6ZEROS
RATEZRO		STORE	OMEGAC		# TVC TO ATTITUDE HOLD
		EXIT
		CAF	POSMAX		# INHIBIT SWITCHOVER/TVC EG TRACKING
		TS	CNTR
## Page 722
		TC	INTPRET
		CLEAR	GOTO
			STEERSW		# RESTARTS OK
			QTEMP
INCRSVG		EXIT			# ALARM INDICATING THAT THRUST IS POINTING
		TC	ALARM		# IN WRONG DIRECTION.
		OCT	01407
		TC	INTPRET
		GOTO
			QTEMP
			
LOTHRUST	BON	VLOAD		# THRUST FAILURE (LO-OR-NO) INDICATED
			IDLEFAIL	# SET BY V97P.  ALLOWS 1 BYPASS IN CASE OF
			QTEMP		#	UNFAVORABLE S40.8 SYNCH
			HI6ZEROS	# START OF ENGINE-FAIL (R40) OPERATIONS
		STORE	OMEGAC		# PUT TVC IN ATTITUDE HOLD
		EXIT
		
		CS	ZERO
		TS	VCNTR		# KILL CSMMASS UPDATING
		TS	VCNTRTMP	# (TVCEXEC LOGIC REQUIRES THIS TOO)
		TS	REPFRAC		# KILL TVCDAP CG TRIM TRACKING
		TS	NVWORD1		# SET UP ENGINE-FAIL V97FLASH (CLOCKJOB)
		
		TC	INTPRET		
		CLEAR	GOTO		# INHIBIT STEERING AND TGO CALC (MANUAL
			STEERSW		# 	SHUTDOWN IF NOT SET UP AGAIN)
			QTEMP		# RESTARTS OK

## Page 723
# NAME		S40.9 - VTOGAIN (AIMPOINT MANEUVERS ONLY)
# FUNCTION	(1) GENERATES REQUIRED VELOCITY AND VELOCITY-TO-BE-GAINED
#		VECTORS FOR USE DURING AIMPOINT MANEUVERS
#		(2) UPDATES THE B VECTOR WHICH IS USED IN THE FINAL 
#		CALCULATION OF EXTRAPOLATING THE VELOCITY-TO-BE-GAINED
# CALLING SEQ	VIA FINDVAC AS NEW JOB.
# INPUT		RNIT	-	ACTIVE VEHICLE RADIUS VECTOR IN METERS AT +29.
#		VNIT	-	ACTIVE VEHICLE VELOCITY VECTOR IN METERS/CS AT +7
#		VRPREV	-	LAST COMPUTED VELOCITY REQUIRED VECTOR IN
#				METERS/CS AT +7.
#		NOMTIG	-	TIME OF IGN.  USED IN TARGETTING ROUTINES %+28"
#		DELLT4	-	TRANSFER TIME FROM PIPTIME TO TARGET %+28"
#		TNIT	-	TIME OF RNIT AND VNIT IN CS AT +28
#		GDT/2	-	HALF OF VELOCITY GAINED IN DELTA T TIME DUE TO
#				ACCERERATION OF GRAVITY IN METERS/CS AT +7.
#		DELVREF	-	CHANGE IN VELOCITY DURING LAST 2 SEC IN
#				METERS/CS AT +7.
#		NORMSW		SET=CENTRAL ANGLE BETWEEN RTARG AND RTIG IS BETWEEN
#				165 TO 195 DEGREES
#				RESET=CENTRAL ANGLE OUTSIDE CONE DESCRIBED ABOVE
# OUTPUT	VGTEMP	-	VELOCITY TO BE GAINED VECTOR IN METERS/CS AT +7.
#		COGA	-	INPUT OF INITIAL GUESS FOR LAMBERT FROM S40.1 O
#				OR PREVIOUS PASS THRU S40.9
#		GOBL/2	-	OBLATENESS TERM IN AVG GRAV CALC-GOBL*RSQ/MU
#		VRPREV	-	VELOCITY REQUIRED VECTOR IN METERS/CS AT +7.
#		BDT	-	B VECTOR IN METERS/CS AT +7.
# SUBROUTINES USED -	INITVEL

		SETLOC	P40S1
		BANK
		
		EBANK=	NBRCYCLS
		COUNT	16/S40.9
		
S40.9		TC	INTPRET
		SETPD	DLOAD
			00D
			LO6ZEROS
		PDDL
			EP4(45)L
		BON	DLOAD
			NORMSW
			+2
			EP4(10)L
		PUSH
		CLEAR	CALL
			GUESSW
			HAVEGUES
		EXIT
		TC	PHASCHNG	# SAVE TIME BY NOT REDOING LAMBERT CALCS
		OCT	05021		# C, PRIORITY NEXT, JOB BELOW
## Page 724
		OCT	10000
		TC	INTPRET
ENDLAMB		BON
			FIRSTFLG
			FIRSTTME
		VLOAD	VSU
			VIPRIME
			VRPREV
		PDDL	DSU
			TNIT
			TNITPREV
		SL	BDDV
			17D
			200CSHI
		VXSC
		VSU	VSL1
			GDT/2
		STORE	BDT
FIRSTTME	SLOAD	DCOMP
			RTX2
		BMN
			MOONCASE
		VLOAD	UNIT
			RN
		DLOAD	DSU
			PIPTIME
			NOMTIG
		DMP	DDV
			EARTHMU
			34D
		VXSC	VAD
			GOBL/2
			VGTEMP		# NOTE  NO TEST IS MADE TO SUBTRACT GOBL
		STORE	VGTEMP		# INSIDE 165-195 DEGREE CONE AREA.
MOONCASE	EXIT
		TC	PHASCHNG
		OCT	04021		# C, JOB BELOW
		
COPY40.9	TC	INTPRET
		DLOAD
			TNIT
		STOVL	TNITPREV
			VIPRIME
		STORE	VRPREV
		CLEAR	EXIT
			FIRSTFLG
 -2		CS	ONE		# REDO40.9 (RESTART) ENTRY TO END S40.9
		TS	NBRCYCLS
ENDS40.9	TC	PHASCHNG
		OCT	00001
## Page 725
		TCF	ENDOFJOB
		
REDO40.9	TC	INTPRET		# S40.9 RESTARTS COME HERE TO GRACEFULLY
		VLOAD			#	TERMINATE S40.9 SO THAT IT CAN BE
			LO6ZEROS	#	SET UP WITH LATEST R,V,T NEXT PASS
		STODL	DELVSUM		#	(TYPE C PHASE POINTS '04021' WILL
			LO6ZEROS	#	FORCE NORMAL S40.9 TERMINATIONS,
		STOVL	NBRCYCLS	#	RATHER THAN LOSE TIME OF BRAND NEW
			VGPREV		#	PASS -- QUICK OLD DATA BETTER THAN
		STORE	VGTEMP		#	NONE) NOW CAN GO THRU SETUP.9
		EXIT			#	WITHOUT DISTURBING VGPREV
		TCF	ENDS40.9 -2	# STORE 0,0 COVERED NBRCYCLS,P -- FIX UP S
		
200CSHI		2DEC	200 B-12

EARTHMU		2DEC*	-3.986032 E10 B-36*

EP4(45)L	2DEC	.125

EP4(10)L	2DEC	.027777777

## Page 726
# NAME  		S40.13 - TIMEBURN
#
# FUNCTION		(1) DETERMINE WHETHER A GIVEN COMBINATION OF VELOCITY-TO-
#			BE-GAINED AND ENGINE CHOICE RESULT IN A BURN TIME SUFFICIENT 
#			TO ALLOW STEERING AT THE VEHICLE DURING THE BURN, AND
#			(2) THE MAGNITUDE OF RESULTING BURN TIME - IF IT IS SHORT -
#			AND THE ASSOCIATED TIME OF THE ENGINE-OFF SIGNAL.
#
# CALLING SEQ		VIA FINDVAC AS NEW JOB.
#
# INPUT			VGTIG - VELOCITY TO BE GAINED VECTOR (METERS/C.S.) AT +7
#			WEIGHT/G - MASS OF VEHICLE IN KGM AT TIG
#			F - ENGINE THRUST IN M.NEWTONS AT +7
#			MDOT -  RATE OF DECREASE OF VEHICLE MASS DURING ENGINE BURN
#				IN KILOGRAMS/CENTISECOND AT +3.  THIS SCALING MAY
#				REQUIRE MODIFICATION FOR SATURN BURNS.
#
# OUTPUT		IMPULSW	-	ZERO FOR STEERING
#				-	ONE FOR ATTITUDE HOLD
#			TGO	-	TIME TO BURN IN CENTISECONDS AT +14
#			THE QUANTITY M.NEWTON SHALL BE USED TO EXPRESS WEIGHT IN TERMS OF
#			(KILOGRAM*METER)/(CENTISECOND*CENTISECOND)
#			(1) M.NEWTON = (10000) NEWTONS

		EBANK=	TGO
		COUNT	16/40.13
		
S40.13		TC	INTPRET
		SETPD	SET
			00D
			IMPULSW		# ASSUME NO STEERING UNTIL FOUND OTHERWISE
		VLOAD	ABVAL
			VGTIG		# VELOCITY TO BE GAINED AT +7
		EXIT
		CAF	BIT7		# TEST +X TRANSLATION
		EXTEND
		RXOR	CHAN31
		MASK	BIT7
		EXTEND
		BZF	NOTADDUL
		TC 	INTPRET
		PDDL	DDV		# 00D = MAG OF VGTIG AT +7
			S40.135		# COMPENSATION FOR 2 JET ULLAGE AT +24
			WEIGHT/G	# MASS IN KGMS AT +16
		BON	SL1		# DOUBLE CORRECTION IF FOUR JETS
			NJETSFLG
			S40.130
S40.130		BDSU
		PDDL	DDV		# 00D = MAG OF VGTIG CORRECTED FOR ULLAGE
			K1VAL		# M.NETWON-CS AT +24
			WEIGHT/G
		BDSU	BMN
			00D
			S40.131		# TGO LESS THAN 100 CS
		PDDL	DMP		# 02D = TEMP1 AT +7
## Page 727
			EMDOT		# SPS FLOW RATE SC.AT B+3 KG/CS (SP, NOTE)
			3.5SEC		# 350 CS AT +14
		BDSU	PDDL
			WEIGHT/G	
			FANG
		DMP	SR2	
			5SECOND		# 500 CS AT +14
		DDV	PUSH		# 04D = TEMP2
		BDSU	BPL
			02D
			S40.133		# TGO GREATER THAN 600 CS
		DLOAD	BDDV
		DMP	DAD
			5SECOND		# 500 CS AT +14
			1SEC2D		# 100 CS AT +14
		GOTO
			S40.132
S40.131		DLOAD	DMP		# TGO LESS THAN 100 CS
			WEIGHT/G
		DAD	DDV
			K2VAL		# M.NEWTON-CS AT +24
			K3VAL		# M.NEWTONS AT +10
S40.132		EXIT
		EBANK=	TGO
		TC	TPAGREE
		CA	MPAC
		XCH	L
		CA	ZERO
		DXCH	TGO		# TGO IN CS AT +28
		TC	S40.134
S40.133		CLEAR	EXIT		# WILL STEER VEHICLE
			IMPULSW
S40.134		TC	PHASCHNG	# KILL GROUP 3
		OCT	3
		
		TCF	ENDOFJOB
		
NOTADDUL	TC	INTPRET
		GOTO
			S40.130 +1	# DO NOT COMPENSATE FOR 7 SEC OF ULLAGE
		SETLOC	DAPS7
		BANK
		
		COUNT	17/40.13
		
K1VAL		=	EK1VAL		# DP PAD LOAD B+23 NEWTON-SEC/E+2
K2VAL		2DEC	222.411081 B-23	#  5000 LB-SEC, SC.AT B+23 NEWTON-SEC/E+2
K3VAL		2DEC	11.3429651 B-9	# 25500 LBS, SC.AT B+9 NEWTONS/E+4
1SEC2D		2DEC	100.0 B-14	# 100.0 CS AT +14
## Page 728
3.5SEC		2DEC	350.0 B-13	# 350.0 CS AT +13

5SECOND		2DEC	500.0 B-14	# 500 CS AT +14

S40.135		2DEC	69.6005183 B-23	# IMPULSE FROM 7.96 SECS OF 2-JET FIRING
					# 	7.96 (199.6)COS(10) LB-SEC, SC.AT
					#	B+23 NEWTON-SEC/E+2 (7 SEC ULLAGE
					#	TO GO, PLUS 0.96 SEC FROM PIPTIME)
					
## Page 729
# NAME		S40.6 GIMBAL DRIVE TEST AND/OR GIMBAL TRIM
# MOD NO 5				DATE 9 MARCH, 1967
# MOD BY ENGEL				LOG SECTION P40-P47
#
# FUNCTIONAL DESCRIPTION
#	GIMBAL DRIVE TEST....0,+2,-2,0 DEGREE ENGINE COMMANDS, AT 2 SECOND
#		INTERVALS, FIRST IN PITCH, THEN IN YAW.  ASTRONAUT VERIFICATION
#		OF GIMBAL MOTION ON GPI
#	GIMBAL TRIM....AFTER A 4 SECOND DELAY, ENGINE COMMANDED TO
#		PRE-COMPUTED TRIM POSITION.  ASTRONAUT VERIFICATION ON GPI.
#	PRE40.6....RESTART ENTRY TO RE-DO S40.6, ONLY IF RCS IS ON - IF TVC
#		IS NOT ON - PRIMARILY TO GET ACTUATORS TRIMMED FOR IGNITION.
#		BYPASS 4 SEC DELAY.  SPEED IS CRITICAL NEAR IGNITION.
#		IF TVC IS ON (TVCDAPON OR LATER) THEN REDOTVC WILL TAKE CARE
#		OF RESTARTING ACTUATORS.
#
# CALLING SEQUENCE....
#	WAITLIST, WITH 2CADR FOR S40.6 (OR PRE40.6), WITH EBANK= CNTR
#
# NORMAL EXIT MODE - FIXDELAY, TASKOVER
#
# SUBROUTINES CALLED....
#	OUTPUT (INTERNAL)
#	FIXDELAY
#
# ALARM OR ABORT EXIT MODES - NONE
#
# ERASEABLE INITIALIZATION REQUIRED
#	CNTR = +0, NORMALLY SET BY THE P40 CALL AT TST,TRIM
#	MRKRTMP...POSITIVE FOR GIMBAL DRIVE TEST AND GIMBAL TRIM (BOTH)
#		   NEGATIVE FOR GIMBAL TRIM ONLY
#	PACTOFF, YACTOFF SC.AT 85.41 ARCSEC/BIT (V48N48 P, YTRIM)
#	..SC CONT.. SWITCH AT ..CMC.. (A/P CONTROL SWITCH AT ..GNC..)
#	ACTIVE SPS GIMBAL MOTOR POWER(S), PITCH, YAW
#
# OUTPUT
#	TVCYAW, TVCPITCH (BITS RELEASED)
#	TVC ENABLE AND OPTICS ERROR COUNTER ENABLE
#
# DEBRIS
#	TEMPR60, CNTR

		BANK	17
		SETLOC	DAPS6
		BANK
		
		EBANK=	CNTR
		COUNT	20/S40.6
		
PRE40.6		CS	FLAGWRD6	# RESTART ENTRY TO S40.6 (DO NOT PERMIT
		MASK	OCT60000	#	IF TVC, BITS 15,|4 = 1,0)
		EXTEND
		BZMF	+2
		TCF	TASKOVER	# TVC, REDOTVC WILL REESTABLISH INTERFACE
		
		CS	BIT1		# RCS, SO DO S40.6, GIMTRIM ONLY
## Page 730
		TS	MRKRTMP
		
		CAF	BIT1		# FOR REVISED S40.6 TIMING FOR RESTARTS...
		TS	CNTR		# TO INDICATE A RESTART ENTRY (CNTR IS
					#	NORMALLY +0, BY S40.6)
					
		EBANK=	CNTR
S40.6		CS	ZERO		# INHIBIT OPTICS ACTIVITY
		TS	OPTIND
		
		CS	BIT2		# DISENABLE OPTICS ERROR COUNTERS (ZERO,
		EXTEND			# 	AND INHIBIT PULSE TRANSMISSION -
		WAND	CHAN12		#	NORMAL STATE)
		
		CAF	OCT02200	# TVC ENABLE (SPS SERVO AMPS SEE DAC
		EXTEND			#	VOLTAGES) AND DISENGAGE OPTICS/DAC
		WOR	CHAN12
		
		TC	FIXDELAY	# 60MS PROCEDURAL DELAY (40MS MINIMUM) FOR
		DEC	6		#	RELAY LATCHING
		
		CAF	BIT2		# ENABLE OPTICS ERROR COUNTERS
		EXTEND
		WOR	CHAN12
		
		TC	FIXDELAY	# 20MS PROCEDURAL DELAY (4MS MINIMUM) FOR
		DEC	2		#	RELAY LATCHING
		
RSTRTST		CCS	CNTR		# CHECK FOR RESTART ENTRY (PRE40.6)
		TCF	GIMTRIM +2	# RESTART ENTRY....BYPASS 4 SECOND DELAY
					#	TST,TRIM SETS +0 ON NORMAL ENTRY
					
		CAE	MRKRTMP		# CHECK FOR TEST/TRIM OR TRIM ONLY
		TS	CNTR		#	MRKRTMP SAVES CNTR FOR RESTARTS
		EXTEND
		BZMF	GIMTRIM		# (TRIM ONLY)
		
GDTSETUP	CS	ZERO		# GIMBAL DRIVE TEST SETUP, FOR PITCH
		TS	CNTR
		
GIMDTEST	CAF	+2ACTDEG	# GIMBAL DRIVE TEST, 1ST INCREMENT
		TC	OUTPUT		#	(LEAVES GIMBAL AT +2 DEG)
		CAF	-4ACTDEG	# 2ND INCREMENT (LEAVES GIMBAL AT -2)
		TC	OUTPUT
		CAF	+2ACTDEG	# 3RD INCREMENT (LEAVES GIMBAL AT -0)
		TC	OUTPUT
		
		CS	CNTR		# CHECK FOR COMPLETION OF YAW TEST
## Page 731
		CCS	A
		TCF	GIMTRIM		# COMPLETED, GO TO GIMBAL TRIM ROUTINE
		CS	BIT1		# SET UP YAW TEST
		TS	CNTR
		TCF	GIMDTEST	# FOR YAW TEST
		
OUTPUT		EXTEND			# OUTPUT THE INCREMENT....SAVE Q
		QXCH	TEMPR60
		
		INDEX	CNTR
		TS	TVCPITCH
		
		INDEX	CNTR
		CAF	BIT11
		EXTEND
		WOR	CHAN14
		
		TC	FIXDELAY	# WAIT 2SEC, WHILE ASTRONAUT VERIFIES
		DEC	200		# 	GIMBAL MOTION ON GPI
		TC	TEMPR60
		
GIMTRIM		TC	FIXDELAY	# WAIT 4 SECONDS BEFORE GIMBAL TRIM
		DEC	400
		
 +2		CS	ZERO		# PICK UP TRIM VALUES AND OUTPUT THEM
		AD	PACTOFF		#	(AVOID +0) ENTRY POINT FROM RSTRTST
		TS	TVCPITCH	#	ON A RESTART, TO AVOID 4SEC DELAY
		CS	ZERO
		AD	YACTOFF
		TS	TVCYAW
		
		CAF	PRIO6		# RELEASE THE COUNTERS, BITS 11,12
		EXTEND
		WOR	CHAN14
		
ENDS40.6	TCF	TASKOVER

OCT02200	OCT	02200		# BITS 8,11 FOR CHANNEL 12 TVC/OPTICS
-4ACTDEG	DEC	-168		# -2(+2ACTDEG), WHOLE BITS, NO ROUNDUP
+2ACTDEG	DEC	+84		# +2 DEG, SC.AT 85.41 ARCSEC/BIT (+84D)

# CALLED BY ..DONOUN46.. (VERB 48), OR DIRECTLY BY ..FRESHDAP.. (RCS DAP) VIA IBNKCALL

		COUNT	20/S41.2
		
S41.2		CA	DAPDATR1
## Page 732
		MASK	THREE
		AD	A
		TS	RATEINDX
		
		INHINT
		CAE	DAPDATR1	# IS LEM ATTACHED (BITS 14,13 OF DAPDATR1
		MASK	PRIO30		#	=10)
		AD	-BIT14		# (OCT57777)
		EXTEND
		BZF	TOGETHER	# YES
		
		CS	BIT2		# NO, UNSET FLAG
		MASK	FLAGWRD7
		TS	FLAGWRD7
		
		TCF	+4

TOGETHER	CS	FLAGWRD7	# ATTACHED, SET FLAG FOR INTEGRATION
		MASK	BIT2
		ADS	FLAGWRD7
		
		RELINT
		
		CA	DAPDATR1
		MASK	BIT4
		EXTEND
		BZMF	+2		# DEC 46 MEANS NARROW DB
		CA	DEC409
		AD	DEC46		# DEC 455 MEANS WIDE DB
		TS	ADB
		
		CA	DAPDATR1
		MASK	BIT7		# QUAD BD
		EXTEND
		BZMF	+2
		CA	ONE
		TS	XTRANS
		CA	DAPDATR1
		MASK	BIT10		# QUAD AC
		EXTEND
		BZMF	+2
		CS	ONE
		ADS	XTRANS
		
		INHINT
		EXTEND
		BZF	+5		# CLEAR NJETSFLG (4 JETS, OR NO JETS)
		CS	FLAGWRD1	# SET NJETSFLG (2 JETS, AC OR BD QUADS)
		MASK	BIT15		# NJETSFLG = 1 FOR 2 JET ULLAGE (AC OR BD)
		ADS	FLAGWRD1
## Page 733
		TCF	+4
		CS	BIT15		# NJETSFLG = 0 FOR 4 JET (OR 0 JET) ULLAGE
		MASK	FLAGWRD1
		TS	FLAGWRD1
		RELINT
		CA	DAPDATR2
		MASK	BIT13
		EXTEND
		BZMF	+2
		TCF	+2
		CS	ONE
		COM
		TS	ACORBD		# MINUS FOR A-C, PLUS FOR B-D
		
		CA	DAPDATR2
		MASK	BIT10
		CCS	A
		TCF	+4
		CA	ONE
		TS	RACFAIL
		TCF	BDFAIL
		CA	ZERO
		TS	RACFAIL
		CA	DAPDATR2
		MASK	BIT4
		CCS	A
		TCF	BDFAIL
		CS	ONE
		TS	RACFAIL
BDFAIL		CA	DAPDATR2
		MASK	BIT7
		CCS	A
		TCF	+4
		CA	ONE
		TS	RBDFAIL
		TC	Q
		CA	ZERO
		TS	RBDFAIL
		CA	DAPDATR2
		MASK	BIT1
		CCS	A
		TC	Q
		CS	ONE
		TS	RBDFAIL
		TC	Q
		
# DAPFIG ENTRY VIA TC POSTJUMP AS JOB FROM ..STABLISH.. (VERB 46)

		BANK	42
		SETLOC	EXTVBS
## Page 734
		BANK

DAPFIG		CS	BIT9		# TURN OFF SIVB TAKEOVER
		EXTEND
		WAND	CHAN12
		CAE	DAPDATR1	# DETERMINE VEHICLE CONFIGURATION
		EXTEND
		MP	BIT3		#	RIGHT SHIFT 4 OCTAL DIGITS
		MASK	THREE		#	(IN CASE BIT 15 IS USED)
		INDEX	A
		TCF	+1		#	BRANCH BASED ON CONFIG....
		
		TCF	NODAPUP		# CM.......ACTIVATE NODAP
		TCF	RCSDAPUP	#	CSM......ACTIVATE RCSDAP
		TCF	RCSDAPUP	#	CSM/LEM..ACTIVATE RCSDAP
		TC	POSTJUMP
		CADR	SATSTKON
RCSDAPUP	INHINT			# CALL TO ACTIVATE RCSDAP, AND RETURN
		TCR	IBNKCALL
		CADR	RCSDAPON
		RELINT
		TCF	ENDFIG		# CAME IN VIA V46, GO OUT VIA GOPIN
NODAPUP		EXTEND			# T5 IDLE FOR NODAP (DONT WORRY ABOUT T)
		DCA	T5IDLDAP
		DXCH	T5LOC
		TC	DOWNFLAG	# RESET T5-USAGE FLAGS FOR NODAP
		ADRES	DAPBIT1		# BIT 15 FLAG 6 = 0
		TC	DOWNFLAG
		ADRES	DAPBIT2		# BIT 14 FLAG 6 = 0
		INHINT
		TC	IBNKCALL	# ZERO JET CHANNELS IN 14 MS AND THEN
		CADR	ZEROJET		# LEAVE THE T6 CLOCK DISABLED.
		RELINT
		CAF	BIT1		# KILL KALCMANU JOB
		TS	HOLDFLAG
ENDFIG		TC	POSTJUMP	# CAME IN VIA V46, GO OUT VIA GOPIN
		CADR	GOPIN
		EBANK=	PACTOFF
T5IDLDAP	2CADR	T5IDLOC

		SBANK=	LOWSUPER
		BANK	17
		SETLOC	DAPS6
		BANK
		
DEC409		DEC	409
DEC46		DEC	46

## Page 735

# CALLED BY ..DONOUN47.. (VERB 48), OR DIRECTLY BY ..FRESHDAP.. (RCS DAP)
S40.14		CAE	IXX		# RCS ENTRY
		EXTEND
		MP	CONTONE
		TS	J/M
		
		CA	IAVG
		EXTEND
		MP	CONTONE
		TS	J/M1
		
		TS	J/M2
		
		EXTEND
		DCA	CONTTWO
		EXTEND
		DV	IXX
		TS	KMJ
		
		EXTEND
		DCA	CONTTWO
		EXTEND
		DV	IAVG
		TS	KMJ1
		
		TS	KMJ2
		
		TC	Q
		
CONTONE		DEC	.662034		# 2PI/M
CONTTWO		2DEC	.00118

		COUNT 	24/TVNG
		
		BANK	31
		SETLOC	P40S
		BANK
		
POS-2.5		OCT	37405
		EBANK=	DAPDATR1
RCSCADR		2CADR	RCSUP

6SECT5		OCT	37704
		COUNT	21/RCSUP
		
		BANK	20
		
		SETLOC	DAPS3
		BANK

## Page 736

RCSUP		LXCH	BANKRUPT
		EXTEND
		QXCH	QRUPT
		
		TCR	RCSDAPON	# ACTIVATE RCS DAP
		
		TCF	RESUME
		
		EBANK=	DAPDATR1
RCSADDR		2CADR	RCSATT

0.6SECT5	OCT	37704

					# RCSDAPON ENTRY MUST BE UNDER INT-INHIBIT
RCSDAPON	CAF	0.6SECT5	# 0.6 SEC ALLOWS TVCEXEC/ROLLDAP TO DIE
 +1		TS	TIME5		# ENTRY FROM ROOTOPOO
		TS	T5PHASE		# WILL CAUSE FRESHDAP (+1)
		
		CS	RCSFLAGS	# SET BIT3 TO REINITIALIZE FDAI ERROR
		MASK	BIT3		#	DISPLAY, IN CASE SC CONT SWITCH
		ADS	RCSFLAGS	#	IN SCS NOT GNC (GUIDEMODE PRIMARY)
		
		EXTEND
		DCA	RCSADDR		# (RCSATT)
		DXCH	T5LOC
		
		CS	OCT60000	# SET BITS 15,14 TO 01 TO INDICATE
		MASK	FLAGWRD6	#	T5 TAKEOVER BY RCSDAP
		AD	BIT14	
		TS	FLAGWRD6	# KILLS TVCEXEC AND ROLLDAP STARTS
		
		TC	Q		# RETURN TO CALLER (TVCDAPOF OR RCSDAPUP)
		

back to top