# Copyright:	Public domain.
# Filename:	Template.s
# Purpose:	Part of the source code for Colossus, build 249.
#		It is part of the source code for the Command Module's (CM)
#		Apollo Guidance Computer (AGC), possibly for Apollo 8 and 9.
# Assembler:	yaYUL
# Reference:	pp. 644-696 of 1701.pdf.
# Contact:	Ron Burkey <info@sandroid.org>.
# Website:	www.sandroid.org/Apollo.
# Mod history:	08/15/04 RSB.	Began transcribing.  Unfortunately, while
#				there's a corresponding Luminary131 file,
#				there's not too much overlap with it.
#
# The contents of the "Colossus249" files, in general, are transcribed 
# from a scanned document obtained from MIT's website,
# http://hrst.mit.edu/hrs/apollo/public/archive/1701.pdf.  Notations on this
# document read, in part:
#
#	Assemble revision 249 of AGC program Colossus by NASA
#	2021111-041.  October 28, 1968.  
#
#	This AGC program shall also be referred to as
#				Colossus 1A
#
#	Prepared by
#			Massachussets Institute of Technology
#			75 Cambridge Parkway
#			Cambridge, Massachusetts
#	under NASA contract NAS 9-4065.
#
# Refer directly to the online document mentioned above for further information.
# Please report any errors (relative to 1701.pdf) to info@sandroid.org.
#
# In some cases, where the source code for Luminary 131 overlaps that of 
# Colossus 249, this code is instead copied from the corresponding Luminary 131
# source file, and then is proofed to incorporate any changes.

# Page 644
# 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 645
		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
		SBANK=	LOWSUPER
		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, PREO12
		EBANK=	TIG
# Page 646
		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 TIGBLNK
		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 647
		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	GOTOP00H
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 648
# PROGRAM DESCRIPTION ** P41CSM **

		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
			
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
		CALL			# COMPUTE
			P40CNV85	#	VGTIG IN CTRL COORDS
		EXIT
		EXTEND			# DO CONTROL COORD CALCULATION AFTER AVEG
		DCA	ACADN85
		DXCH	AVEGEXIT
# Page 649
		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
		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
V1683		VN	1683
V06N85B		VN	0685
V16N85B		VN	1685
V06N40		VN	0640
P40OK99		OCT	24020		# BITS 14,12, AND 5 FOR LINUS VERB 99
V16N40		VN	1640
# Page 650
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 KB/SEC (NOT, 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	# DON'T 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 651
# 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 100
		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
		EXIT
		TC	PHASCHNG
		OCT	10035		# REREADAC AND HERE
# Page 652
		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 INTERRUPTSION 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	GOTOP00H
		TC	GOTOP00H
		TCF	P47BODY		# RECYCLE -- CLEAR ACCUMULATED VELOCITY

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

		EBANK=	TIG
		COUNT	24/P40
		
TIGAVEG		TC	P41/P40		# TASK (4.37 PROTECTS)
		TCF	P41REDSP
		
		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=-1
		
PRECHECK	CCS	PHASE5		# HAS SERVICER BEEN RESTARTED
		TCF	TASKOVER	# YES, DON'T START ANOTHER ONE
		TC	POSTJUMP
		CADR	PREREAD

# Page 654
# 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 655
# 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 656
		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
		
		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
		
ULAGEOFF	CAF	ZERO
		EXTEND
		WRITE	CHAN5		# ZERO CHANNEL 5
# Page 657
		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
		
		CAE	TGO +1		# (TPAGREE IN S40.13, LESS THAN 600CS)
		TC	WAITLIST
		EBANK=	TGO
		2CADR	ENGINOFF
		
		TC	2PHSCHNG	# PROTECT ....
		OCT	40153		# A, 3.15 = ENGINOFF (TGO+1) .... NOT GROUP
		OCT	05014		# C, DELTAT NEXT, TASK BELOW, IN
		DEC	-0		# -0 CS
		
		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
		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)
# Page 658
		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
		EXTEND
		WAND	DSALMOUT
		
MASSBACK	CAE	V97VCNTR	# RESTORE PART OF PRE-DECREMENTED MASS
					#	V97CNTR = VCNTR UNLESS V97 IS
					#	ACTIVE.  ONLY V97CNTR IS THEN RIGHT.
		EXTEND			# VCNTR COUNTS 1/2-SECONDS IN TVC EXEC
		MP	EMDOT		#	MDOT, SC.AT B+3 KG/CS
		LXCH	A
		EXTEND
		MP	1SEC		# DEC 100
		AD	MASSTMP		# CORRECTION IS ACCURATE TO 5 CS OF FLOW
		TS	CSMMASS		#	(1.44 KG OR 0.4 BITS)
		
BESTTRIM	CAF	BIT15		# CHECK FOR SWITCHOVER, SELECT BEST TRIMS
		MASK	FLAGWRD9	#	FOR NEXT IGNITION (OR REIGNITION)
		EXTEND
# Page 659
		BZF	DBARTRIM	# PRE-SWITCHOVER
		TC	Q		# POST-SWITCHOVER, SO LEAVE TRIMS AS ARE
		
DBARTRIM	CAE	DELPBAR		# UPDATE TRIMS WITH DELP,YBAR
		TS	PACTOFF
		CAE	DELYBAR
		TS	YACTOFF
		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 CNTRLS, 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
			
		VLOAD	VAD
			DELVSUM
			DELVREF
		STORE	DELVSUMP
		EXIT
		CA	ONE
		AD	NBRCYCLS
		TS	NBRCYCLP
# Page 660
		TC	PHASCHNG	# (?) TYPE A RESTART RESTART BELOW AND 5.3 REREADAC (?)
		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
			VN		# ACTIVE VEHICLE VELOCITY VECTORY AT T1
		STODL	VINIT
			PIPTIME
		STORE	TNIT
		BDSU
			TPASS4
		STOVL	DELLT4
			HI6ZEROS
		STODL	DELVSUM
# Page 661
			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
		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
# Page 662
		TCF	SERVXT

# Page 663
# 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 664
DYNDISP		TC	INTPRET		# UPDATE N85 FOR A DYNAMIC V06N85 IN P41.
		CALL			#	PRIOR TO BLANKING AND AVEG (V16N85)
			P40CNV85
		EXIT
		TCF	CKNVWRD1
		
# Page 665
# 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	GOFLASHR	# LINUS MAKES IT A REDO, INHINT OK
		TCF	V97T		# TERMINATE
		TCF	V97P		# PROCEED
		TCF	V97E		# ENTER
		TCF	PASTERET
		
ENGREQST	CAF	V06N40
		TC	BANKCALL
		CADR	GOFLASHR	# LINUS MAKES IT A REDO, INHINT OK
		TCF	V99T		# TERMINATE
		TCF	V99P		# PROCEED
		TCF	V99E		# ENTER
		
PASTERET	CAF	P40OK99		# IMMED RETURN -- SET UP V99 OR V97
		TCR	LINUS
		TCF	ENDOFJOB
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
# Page 666
		TC	Q
		
		EBANK=	DAPDATR1
V99E		TC	2PHSCHNG
		OCT	00006		# KILL PRE40.6/CLOKTASK PROTECTION
		OCT	05024		# C, PRIORITY NEXT, JOB BELOW
		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, GOTOP00H
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
		
# Page 667
		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
		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 GOTOP00H)
		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 SYNC 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
# Page 668
		EBANK=	WHOCARES
R40ENABL	TC	DOWNFLAG	# RE-ENABLE R40 BY CLEARING IDLEFAIL
		ADRES	IDLEFAIL
		TC	PHASCHNG
		OCT	00004		# KILL GROUP 4
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		#	FAILD....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.
# Page 669
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
		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 N02				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 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
# Page 670
#   IF AIMPOINT STEERING:
#	TIG		TIME OF IGNITION		DP B28 CS
#	RTARG		POSITION TARGET TIME		VECTOR B29 M
#	CSTEER = ECSTEER (GR 0) 			DP B1
#	TPASS4 -- TIME OF ARRIVAL AT AIMPOINT
#
# OUTPUT
#	UT		1/2 UNIT VECTOR ALIGNED WITH THRUST DIRETION 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
		SETPD	VLOAD		# EXTERNAL DELTA V
			0
			VTIG
		STORE	VINIT
		VXV	UNIT
			RTIG
		STOVL	UT		# UP IN UT
			RTIG
		STORE	RINIT
		VSQ	PDDL
			36D
		DMP	DDV
			THETACON
		DMP	DMP
			DELVSAB
			WEIGHT/G
# Page 671
		DDV
			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(VP X UP)SIN(THETAT/2) 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
		# The 1701.pdf scan here is actually missing chunks of code.
		# For now I've just put in the octal, but I'll replace it when
		# I have a better scanned page.  It's hard to decompile manually, 
		# because it's interpretive code.---RSB 2004
		OCT	36001 
		OCT	14041 
		OCT	03656
		OCT	77625		# DSU
		OCT	00041 
		OCT	37423 
		OCT	61663		# 	AGAIN
		# End of hopelessly garbled area.
		VLOAD
			VIPRIME
		STODL	UT
			TIG
# Page 672
		STORE	TDEC1
		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
# Page 673
		SETPD	GOTO
			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(-15) PDL 12D
			VGTIG
		UNIT	PUSH		# UG PDL 0 SCALED AT 2(+1)
		
		DOT	VXSC
			12D
			0
		VSL2	BVSU
			12D
		STODL	12D		# Q PDL SCALED AT 2(-5)
			F
		SRR	DDV
			4
			WEIGHT/G
		DSQ	PDVL		# F/MASS SQUARED PDL 6 AT 2(-10M/(CS.CS)
			12D
		VSQ
		BDSU	SQRT
		VXSC	VSL1
		VAD	UNIT
			12D
		STCALL	UT
			QTEMP
200CS		2DEC	200 B-12

# Page 674
# PROGRAM DESCRIPTION S40.2,3		DATE 15 NOV 66
# MOD NO 2				LOG SECTIONS 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 WTH 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 675
			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		# CIN(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 676
		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 677
			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		SR1.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 678
		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 679
# NAME		S40.8 -- CROSS PRODUCT STEERING
# FUNCTION	(1) UPDATES TEH 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.6
# 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 MEASUREMENT
#				IN METERS/CS AT +7.
#		BDT		EFFECT OF RATE OF CHANGE OF REQURIRED 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 RESTART BELOW AND 5.3 REREADAC
		
		TC	INTPRET
		VLOAD
# Page 680
			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 681
			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 682
		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 683
# 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 FINDVEC 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.
#		NONTIG	TIME OF IGN.  USED IN TARGETTING ROUTINES B+28
#		DELLT4	TRANSFER TIME FROM PIPTIME TO TARGET B+28
#		TNIT	TIME OF RNIT AND VNIT IN CS AT +28
#		GDT/2	HALF OF VELOCITY GAINED IN DELTA T TIME DUE TO
#			ACCELERATION 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
#			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 684
		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 685
		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 686
# 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 THE RESULTING BURN TIME -- IF IT IS SHORT --
#			AND THE ASSOCIATED TIME OF THE ENGINE OFF SIGNAL.
#
# CALLING SEQUENCE	VIA FINDVAC AS A NEW JOB
#
# INPUT			VGTIG -- VELOCITY TO BE GAINED VECTOR (METERS/CS) 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.NEWTON-CS AT +24
			WEIGHT/G
		BDSU	BMN
			00D
			S40.131		# TGO LESS THAN 100 CS
		PDDL	DMP		# 02D = TEMP1 AT +7
# Page 687
			EMDOT		# SPS FLOW RATE SC.AT B+3 KG/CS (SP, NOTE)
			3.5SEC		# 350 CS AT +14
		BDSU	PDDL
			WEIGHT/G	
			F		# F AT +7
		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.NEWTON 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		2DEC	884.52887 B-23	# 19885 LB-SEC, SC.AT B+23 NEWTON-SEC/E+2
K2VAL		2DEC	293.137805 B-23	#  6590 LB-SEC, SC.AT B+23 NEWTON-SEC/E+2
# Page 688
K3VAL		2DEC	11.7766668 B-9	# 25475 LBS, SC.AT B+9 NEWTONS/E+4
1SEC2D		2DEC	100.0 B-14	# 100.0 CS AT +14
3.5SEC		2DEC	350.0 B-13	# 350 CS AT +13
5SECOND		2DEC	500.0 B-14	# 500.0 CS AT +14
S40.135		2DEC	69.6005153 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 689
# 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
#
# ERASABLE 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
#	TBMPR60, 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 690
		TS	MRKRTMP
		CAF	BIT1		# FOR REVISED S40.6 TIMING FOR RESTARTS...
		TS	CNTR		# TO INDICATE A RESTART ENTRY (CNTR 15
					#	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	# 34D INCREMENT (LEAVES GIMBAL AT -0)
		TC	OUTPUT
		
		CS	CNTR		# CHECK FOR COMPLETION OF YAW TEST.
# Page 691
		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 65.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 692
		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 693
		TCF	+4
		CS	BIT15		# KJETSFLG = 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 694
		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 (DON'T 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
		SBANK=	PINSUPER	# RSB 2004
		EBANK=	PACTOFF
T5IDLDAP	2CADR	T5IDLOC

		BANK	17
		SETLOC	DAPS6
		BANK
		
DEC409		DEC	409
DEC46		DEC	46

# CALLED BY "DONOUN47" (VERB 48), OR DIRECTLY BY "FRESHDAP" (RCS DAP)
# Page 695
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
		SBANK=	PINSUPER	# RSB 2004
		EBANK=	DAPDATR1
RCSCADR		2CADR	RCSUP

6SECT5		OCT	37704
		COUNT	21/RCSUP
		
		BANK	20
		
		SETLOC	DAPS3
		BANK
		
RCSUP		LXCH	BANKRUPT
# Page 696
		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 R00TOP00
		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	# SEE 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)
		

