swh:1:snp:92f3f585b9ae79620ad8c41a332d6329b31fd381
Raw File
Tip revision: 078c79d8734a9ed2860303a7c1662004284fe853 authored by Ron Burkey on 07 August 2022, 15:04:04 UTC
Fixed a potential string-overflow bug in yaASM. Removed timestamps from
Tip revision: 078c79d
IMU_MODE_SWITCHING_ROUTINES.agc
### FILE="Main.annotation"
## Copyright:	Public domain.
## Filename:	IMU_MODE_SWITCHING_ROUTINES.agc
## Purpose:	A module for revision 0 of BURST120 (Sunburst).
##		It is part of the source code for the Lunar Module's (LM)
##		Apollo Guidance Computer (AGC) for Apollo 5.
## Assembler:	yaYUL
## Contact:	Ron Burkey <info@sandroid.org>.
## Website:	www.ibiblio.org/apollo/index.html
## Mod history:	2016-09-30 RSB	Created draft version.
##		2016-10-05 RSB	Completed transcription.
##		2016-10-30 MAS	Corrected MODEXIT->MODEEXIT.
##		2016-11-01 RSB	Typos.
##		2016-12-03 RSB	Fixed a bunch of comment errors with
##				octopus/ProoferComments, but the process
##				isn't complete yet because of a handful of
##				pages that don't work well.
##		2016-12-05 RSB	Comment-proofing pass with octopus/ProoferComments
##				completed; fixes made.
##		2017-03-15 RSB	Comment-text fixes identified in 6-way
##				side-by-side diff of Sunburst 120 and Luminary 
##				69/99/116/131/210.
##		2021-05-30 ABS	Removed SPSCODE definition not present in scans.

## Page 137
		BLOCK	02
		EBANK=	COMMAND

# FIXED-FIXED ROUTINES.

ZEROICDU	CAF	ZERO		# ZERO ICDU COUNTERS.
		TS	CDUX
		TS	CDUY
		TS	CDUZ
		TC	Q

4SECS		DEC	400
3SECS		DEC	300

## Page 138
# IMU ZEROING ROUTINE.

		BANK	13
		
IMUZERO		INHINT			# ROUTINE TO ZERO ICDUS.
		CS	DSPTAB +11D	# DONT ZERO CDUS IF IMU IN GIMBAL LOCK AND
		MASK	BITS4&6		# COARSE ALIGN.
		CCS	A
		TCF	IMUZEROA

		TC	ALARM		# IF SO.
		OCT	206

		TCF	CAGETSTJ +4

IMUZEROA	CS	IMUSEFLG
		MASK	STATE		# PROGRAM IS USING THE IMU.
		AD	IMUSEFLG
		TS	STATE
		
		TC	CAGETSTQ	# IF IMU COMING UP, TURN-ON PROGRAM WILL
		TCF	MODEEXIT	# DO ALL THE WORK.
		
		CS	BITS3&4		# INHIBIT ICDUFAIL AND IMUFAIL (IN CASE WE
		MASK	IMODES30	# JUST CAME OUT OF COARSE ALIGN).
		AD	BITS3&4
		TS	IMODES30

		CS	BITS4&6		# SEND ZERO ENCODE WITH COARSE AND ERROR
		EXTEND			# COUNTER DISABLED.
		WAND 	12

		TC	NOATTOFF	# TURN OFF NO ATT LAMP.

		CAF	BIT5
		EXTEND
		WOR	12

		CAF	BIT6		# WAIT 320 MS TO GIVE AGS ADEQUATE TIME TO
		TC	WAITLIST	# RECEIVE ITS PULSE TRAIN.
		EBANK=	COMMAND
		2CADR	IMUZERO2

		CS	IMODES30	# SEE IF IMU OPERATING AND ALARM IF NOT.
		MASK	BIT9
		CCS	A
		TCF	MODEEXIT

		TC	ALARM
		OCT	210

## Page 139
MODEEXIT	RELINT			# GENERAL MODE-SWITCHING EXIT.
		TCF	SWRETURN

## Page 140
IMUZERO2	TC	CAGETSTQ	# POSSIBLY SWITCH TO TURN-ON PROGRAM.
		TCF	TASKOVER

		TC	ZEROICDU	# ZERO COUNTERS.
		CS	BIT5		# REMOVE ZERO DISCRETE.
		EXTEND
		WAND	12

		CAF	4SECS
		TC	VARDELAY

IMUZERO3	TC	CAGETSTQ
		TCF	TASKOVER

		CS	BITS3&4		# REMOVE IMUFAIL AND ICDUFAIL INHIBIT.
		MASK	IMODES30
		TS	IMODES30

		TC	IBNKCALL	# SET ISS WARNING IF EITHER OF ABOVE ARE
		CADR	SETISSW		# PRESENT.

		TCF	ENDIMU

## Page 141
# IMU COARSE ALIGN MODE.

IMUCOARS	INHINT
		TC	SETCOARS

		CAF	SIX
		TC	WAITLIST
		EBANK=	COMMAND
		2CADR	COARS

		TCF	MODEEXIT

COARS		TC	CAGETEST
		CAF	BIT6		# ENABLE ALL THREE ISS CDU ERROR COUNTERS
		EXTEND
		WOR	CHAN12

		CAF	TWO		# SET CDU INDICATOR
COARS1		TS	CDUIND
## At first glance, it <i>appears</i> to say "1;S" in the following line of the printout,
## but it is rather smudged, and since every other AGC version says "1:S" and matches in
## other respects as well, I assume that "1:S" is what it really says &mdash; RSB 2017.
		INDEX	CDUIND		# COMPUTE THETAD - THETAA IN 1:S
		CA	THETAD		#   COMPLEMENT FORM
		EXTEND
		INDEX	CDUIND
		MSU	CDUX
		EXTEND
		MP	BIT13		# SHIFT RIGHT 2
		XCH	L		# ROUND
		DOUBLE
		TS	ITEMP1
		TCF	+2
		ADS	L

		INDEX	CDUIND		# DIFFERENCE TO BE COMPUTED
		LXCH	COMMAND
		CCS	CDUIND
		TC	COARS1

		CAF	TWO		# MINIMUM OF 4 MS WAIT
		TC 	VARDELAY

## Page 142
COARS2		TC	CAGETEST	# DONT CONTINUE IF CAGED.
		TS	ITEMP1		# SETS TO +0.
		CAF	TWO		# SET CDU INDICATOR
 +3		TS	CDUIND

		INDEX	CDUIND
		CCS	COMMAND		# NUMBER OF PULSES REQUIRED
		TC	COMPOS		# GREATER THAN MAX ALLOWED
		TC	NEXTCDU +1
		TC	COMNEG
		TC	NEXTCDU +1

COMPOS		AD	-COMMAX		# COMMAX = MAX NUMBER OF PULSES ALLOWED
		EXTEND			#   MINUS ONE
		BZMF	COMZERO
		INDEX	CDUIND
		TS	COMMAND		# REDUCE COMMAND BY MAX NUMBER OF PULSES
		CS	-COMMAX-	#   ALLOWED

NEXTCDU		INCR	ITEMP1
		AD	NEG0		# PREVENT +0 IN OUTPUT COUNTER
		INDEX	CDUIND
		TS	CDUXCMD		# SET UP COMMAND REGISTER.

		CCS	CDUIND
		TC	COARS2 +3

		CCS	ITEMP1		# SEE IF ANY PULSES TO GO OUT.
		TCF	SENDPULS

		TC	FIXDELAY	# WAIT FOR GIMBALS TO SETTLE.
		DEC	150

## Page 143
		CAF	TWO		# AT END OF COMMAND, CHECK TO SEE THAT
CHKCORS		TS	ITEMP1		# GIMBALS ARE WITHIN 2 DEGREES OF THETAD.
		INDEX	A
		CA	CDUX
		EXTEND
		INDEX	ITEMP1
		MSU	THETAD
		CCS	A
		TCF	COARSERR
		TCF	CORSCHK2
		TCF	COARSERR

CORSCHK2	CCS	ITEMP1
		TCF	CHKCORS
		TS	GCOMP		# ZERO GYRO COMPENSATION REGISTERS IN
		TS	GCOMP	+1	# PREPARATION FOR COMPENSATION.
		TS	GCOMP	+2
		TS	GCOMP	+3
		TS	GCOMP	+4
		TS	GCOMP	+5
		
		TCF	ENDIMU		# END OF COARSE ALIGNMENT.

COARSERR	AD	COARSTOL	# 2 DEGREES.
		EXTEND
		BZMF	CORSCHK2

		TC	ALARM		# COARSE ALIGN ERROR.
		OCT	211

		TCF	IMUBAD

COARSTOL	DEC	-.01111		# 2 DEGREES SCALED AT HALF-REVOLUTIONS.

## Page 144
COMNEG		AD	-COMMAX
		EXTEND
		BZMF	COMZERO
		COM
		INDEX	CDUIND
		TS	COMMAND
		CA	-COMMAX-
		TC	NEXTCDU

COMZERO		CAF	ZERO
		INDEX	CDUIND
		XCH	COMMAND
		TC	NEXTCDU

SENDPULS	CAF	13,14,15
		EXTEND
		WOR	CHAN14
		CAF	600MS
		TCF	COARS2 -1	# AND THEN TO VARDELAY.
SETCOARS	CS	BIT6		# CLEAR ERROR COUNTER BEFORE MODE SWITCH.
		EXTEND
		WAND	12
		CAF	BIT4		# PUT ISS IN COARSE ALIGN.
		EXTEND
		WOR	12
		
		CS	OCT40010	# TURN ON NO ATT LAMP.
		MASK	DSPTAB +11D
		AD	OCT40010
		TS	DSPTAB +11D

		CS	BIT4		# INHIBIT IMU FAIL.
		MASK	IMODES30
		AD	BIT4
		TS	IMODES30

		TC	Q

OCT40010	OCT	40010

## Page 145
# IMU FINE ALIGN MODE SWITCH.

IMUFINE		INHINT
		TC	CAGETSTJ	# SEE IF IMU BEING CAGED.

		CS	BITS4-6		# RESET ZERO, COARSE, AND ECTR ENABLE.
		EXTEND
		WAND	12

		TC	NOATTOFF	# TURN OFF NO ATT LAMP.

		CAF	BIT10		# IMU FAIL WAS INHIBITED DURING THE
		TC	WAITLIST	# PRESUMABLY PRECEDING COARSE ALIGN.  LEAVE
		EBANK=	COMMAND
		2CADR	IFAILOK		# IT ON FOR THE FIRST 5 SECS OF FINE ALIGN

		CAF	4SECS		# GYRO RE-CENTERING TIME.
		TC	WAITLIST
		EBANK=	COMMAND
		2CADR	IMUFINED

		TCF	MODEEXIT

IMUFINED	TC	CAGETEST	# SEE THAT NO ONE HAS CAGED THE IMU.
		TCF	ENDIMU

IFAILOK		TC	CAGETSTQ	# ENABLE IMU FIAL UNLESS IMU BEING CAGED.
		TCF	TASKOVER	# IT IS.

		CAF	BIT4		# DONT RESET IMU FAIL INHIBIT IF SOMEONE
		EXTEND			# HAS GONE INTO COARSE ALIGN.
		RAND	12
		CCS	A
		TCF	TASKOVER

		CS	BIT4
PFAILOK2	MASK	IMODES30
		TS	IMODES30
		TC	IBNKCALL	# THE ISS WARNING LIGHT MAY COME ON NOW
		CADR	SETISSW		# THAT THE INHIBIT HAS BEEN REMOVED.
		TCF	TASKOVER

PFAILOK		TC	CAGETSTQ	# ENABLE PIP FAIL PROG ALARM.
		TCF	TASKOVER

		CS	BIT10		# MAKE PREVIOUS VALUE OF PIPA FAIL THE
		MASK	IMODES30	# NO FAIL STATE SO THAT IF THE FAILURE
		AD	BIT10		# INDICATION IS ON NOW, IT WILL BE PICKED
		TS	IMODES30	# UP (ROUTINE DETECTS ONLY CHANGES).
		
## Page 146		
		CS	BIT13		# PIPA FAIL BIT IS KEPT IN TWO PLACES FOR
		MASK	IMODES33
		AD	BIT13
		TS	IMODES33

		CS	BIT5
		TCF	PFAILOK2

NOATTOFF	CS	OCT40010	# TURN OFF NO ATT LAMP.
		MASK	DSPTAB +11D
		AD	BIT15
		TS	DSPTAB +11D
		TC	Q

## Page 147
# ROUITNES TO INITIATE AND TERMINATE PROGRAM USE OF THE PIPAS.  NO IMUSTALL REQUIRED IN EITHER CASE.

PIPUSE		TC	CAGETSTQ	# DONT ENABLE PIPA FAIL IF IMU BEING CAGED
		TCF	SWRETURN
		
		INHINT
		CAF	ZERO		# ZERO COUNTERS.
		TS	PIPAX
		TS	PIPAY
		TS	PIPAZ

		CS	BIT1		# IF PIPA FAILS FROM NOW ON (UNTIL
		MASK	IMODES30	# PIPFREE), LIGHT ISS WARNING.
		TS	IMODES30

PIPFREE2	TC	IBNKCALL	# ISS WARNING MIGHT COME ON NOW.
		CADR	SETISSW		# (OR GO OFF ON PIPFREE).

		TCF	MODEEXIT

PIPFREE		INHINT			# PROGRAM DONE WITH PIPAS.  DONT LIGHT
		CS	BIT1		# ISS WARNING.
		MASK	IMODES30
		AD	BIT1
		TS	IMODES30

		MASK	BIT10		# IF PIP FAIL ON, DO PROG ALSRM AND RESET
		CCS	A		# ISS WARNING.
		TCF	MODEEXIT

		TC	ALARM
		OCT	212

		INHINT

		TCF	PIPFREE2

## Page 148
#          THE FOLLOWING ROUTINE TORQUES THE IRIGS ACCORDING TO DOUBLE PRECISION INPUTS IN THE SIX REGISTERS
# BEGINNING AT THE ECADR ARRIVING IN A. THE MINIMUM SIZE OF ANY PULSE TRAIN TO THE GYROS IS 1 PULSE.  THE
# UNSENT PORTION OF THE COMMAND IS LEFT INTACT IN THE INPUT COMMAND REGISTERS.

		EBANK=	1400		# VARIABLE, ACTUALLY.

IMUPULSE	TS	MPAC +5		# SAVE ARRIVING ECADR.
		TC	CAGETSTJ	# DONT PROCEED IF IMU BEING CAGED.

		CCS	LGYRO		# SEE IF GYROS BUSY.
		TC	GYROBUSY	# SLEEP.

		TS	MPAC +2
		CAF	BIT6		# ENABLE THE POWER SUPPLY.
		EXTEND
		WOR	14

		CAF	FOUR
GWAKE2		INHINT
		TC	WAITLIST	# (IF A JOB WAS PUT TO SLEEP, THE POWER
		EBANK=	COMMAND		# SUPPLY IS LEFT ON BY THE WAKING JOB).
		2CADR	STRTGYRO

		CA	MPAC +5		# SET UP EBANK, SAVING CALLER'S EBANK FOR
		XCH	EBANK		# RESTORATION ON RETURN.
		XCH	MPAC +5
		TS	LGYRO		# RESERVES GYROS.
		MASK	LOW8
		TS	ITEMP1

		CAF	TWO		# FORCE SIGN AGREEMENT ON INPUTS.
GYROAGRE	TS	MPAC +3
		DOUBLE
		AD	ITEMP1
		TS	MPAC +4
		EXTEND
		INDEX	A
		DCA	1400
		DXCH	MPAC
		TC	TPAGREE
		DXCH	MPAC
		INDEX	MPAC +4
		DXCH	1400

		CCS	MPAC +3
		TCF	GYROAGRE

		CA	MPAC +5		# RESTORE CALLER'S EBANK.
		TS	EBANK
		TCF	MODEEXIT

## Page 149
# ROUTINES TO ALLOW TORQUING BY ONLY ONE JOB AT A TIME.

GYROBUSY	EXTEND			# SAVE RETURN 2FCADR.
		DCA	BUF2
		DXCH	MPAC
REGSLEEP	CAF	LGWAKE
		TCF	JOBSLEEP

GWAKE		CCS	LGYRO		# WHEN AWAKENED, SEE IF GYROS STILL BUSY.
		TCF	REGSLEEP	# IF SO, SLEEP SOME MORE.

		TS	MPAC +2
		EXTEND
		DCA	MPAC
		DXCH	BUF2		# RESTORE SWRETURN INFO.
		CAF	ONE
		TCF	GWAKE2

LGWAKE		CADR	GWAKE

## Page 150
# GYRO-TORQUING WAITLIST TASKS.

STRTGYRO	CS	GDESELCT	# DE-SELECT LAST GYRO.
		EXTEND
		WAND	14

		TC	CAGETEST

STRTGYR2	CA	LGYRO		# JUMP ON PHASE COUNTER IN BITS 13-14.
		EXTEND
		MP	BIT4
		INDEX	A
		TCF	+1
		TC	GSELECT		# =0.  DO Y GYRO.
		OCT	00202

		TC	GSELECT		# =1.  DO Z GYRO.
		OCT	00302

		TC	GSELECT -2	# =2.  DO X GYRO.
		OCT	00100

		CAF	ZERO		# =3.  DONE
		TS	LGYRO
		CAF	LGWAKE		# WAKE A POSSIBLE SLEEPING JOB.
		TC	JOBWAKE

NORESET		TCF	IMUFINED	# DO NOT RESET THE POWER SUPPLY
## Page 151
 -2		CS	FOUR		# SPECIAL ENTRY TO REGRESS LGYRO FOR X.
		ADS	LGYRO

GSELECT		INDEX	Q		# SELECT GYRO.
		CAF	0		# PACKED WORD CONTAINS GYRO SELECT BITS
		TS	ITEMP4		# AND INCREMENT TO LGYRO.
		MASK	SEVEN
		AD	BIT13
		ADS	LGYRO
		TS	EBANK
		MASK	LOW8
		TS	ITEMP1

		CS	SEVEN
		MASK	ITEMP4
		TS	ITEMP4

		EXTEND			# MOVE DP COMMAND TO RUPTREGS FOR TESTING.
		INDEX	ITEMP1
		DCA	1400
		DXCH	RUPTREG1

		CCS	RUPTREG1
		TCF	MAJ+
		TCF	+2
		TCF	MAJ-

		CCS	RUPTREG2
		TCF	MIN+
		TCF	STRTGYR2
		TCF	MIN-
		TCF	STRTGYR2

## Page 152
MIN+		AD	-GYROMIN	# SMALL POSITIVE COMMAND.  SEE IF AT LEAST
		EXTEND			# 1 GYRO PULSE.
		BZMF	STRTGYR2

MAJ+		EXTEND			# DEFINITE POSITIVE OUTPUT.
		DCA	GYROFRAC
		DAS	RUPTREG1

		CA	ITEMP4		# SELECT POSITIVE TORQUING FOR THIS GYRO.
		EXTEND
		WOR	14

		CAF	LOW7		# LEAVE NUMBER OF POSSIBLE 8192 AUGMENTS
		MASK	RUPTREG2	# TO INITIAL COMMAND IN MAJOR PART OF LONG
		XCH	RUPTREG2	# TERM STORAGE AND TRUNCATED FRACTION
GMERGE		EXTEND			# IN MINOR PART.  THE MAJOR PART WILL BE
		MP	BIT8		# COUNTED DOWN TO ZERO IN THE COURSE OF
		TS	ITEMP2		# PUTTING OUT THE ENTIRE COMMAND.
		CA	RUPTREG1
		EXTEND
		MP	BIT9
		TS	RUPTREG1
		CA	L
		EXTEND
		MP	BIT14
		ADS	ITEMP2		# INITIAL COMMAND.

		EXTEND			# SEE IF MORE THAN ONE PULSE TRAIN NEEDED
		DCA	RUPTREG1	# (MORE THAN 16383 PULSES).
		AD	MINUS1
		CCS	A
		TCF	LONGGYRO
-GYROMIN	OCT	-177		# MAY BE ADJUSTED TO SPECIFY MINIMUM CMD.

		TCF	+4

		CAF	BIT14
		ADS	ITEMP2
		CAF	ZERO

 +4		INDEX	ITEMP1
		DXCH	1400
## Page 153
		CA	ITEMP2		# ENTIRE COMMAND.
LASTSEG		TS	GYROCMD
		EXTEND
		MP	BIT10		# WAITLIST DT
		AD	THREE		# TRUNCATION AND PHASE UNCERTAINTIES.
		TC	WAITLIST
		EBANK=	COMMAND
		2CADR	STRTGYRO

GYROEXIT	CAF	BIT10		# TURN ON GYRO ACTIVITY TO START TRAIN.
		EXTEND
		WOR	14
		TCF	TASKOVER

LONGGYRO	INDEX	ITEMP1
		DXCH	1400		# INITIAL COMMAND OUT PLUS N AUGMENTS OF
		CAF	BIT14		# 8192.  INITIAL COMMAND IS AT LEAST 8192.
		AD	ITEMP2
		TS	GYROCMD

AUG3		EXTEND			# GET WAITLIST DT TO TIME WHEN TRAIN IS
		MP	BIT10		# ALMOST OUT.
		AD	NEG3
		TC	WAITLIST
		EBANK=	COMMAND
		2CADR	8192AUG

		TCF	GYROEXIT

8192AUG		TC	CAGETEST

		CA	LGYRO		# ADD 8192 PULSES TO GYROCMD
		TS	EBANK
		MASK	LOW8
		TS	ITEMP1

		INDEX	ITEMP1		# SEE IF THIS IS THE LAST AUG.
		CCS	1400
		TCF	AUG2		# MORE TO COME.

		CAF	BIT14
		ADS	GYROCMD
		TCF	LASTSEG +1

AUG2		INDEX	ITEMP1
		TS	1400
		CAF	BIT14
		ADS	GYROCMD
		TCF	AUG3		# COMPUTE DT.

## Page 154
MIN-		AD	-GYROMIN	# POSSIBLE NEGATIVE OUTPUT.
		EXTEND
		BZMF	STRTGYR2

MAJ-		EXTEND			# DEFINITE NEGATIVE OUTPUT.
		DCS	GYROFRAC
		DAS	RUPTREG1

		CA	ITEMP4		# SELECT NEGATIVE TORQUING FOR THIS GYRO.
		AD	BIT9
		EXTEND
		WOR	14

		CS	RUPTREG1	# SET UP RUPTREGS TO FALL INTO GMERGE.
		TS	RUPTREG1	# ALL NUMBERS PUT INTO GYROCMD ARE
		CS	RUPTREG2	# POSITIVE - BIT9 OF CHAN 14 DETERMINES
		MASK	LOW7		# THE SIGN OF THE COMMAND.
		COM
		XCH	RUPTREG2
		COM
		TCF	GMERGE

GDESELCT	OCT	1700		# TURN OFF SELECT AND ACTIVITY BITS.

GYROFRAC	2DEC	.215 B-21

## Page 155
# IMU MODE SWITCHING ROUTINES COME HERE WHEN ACTION COMPLETE.

ENDIMU		EXTEND			# MODE IS BAD IF CAGE HAS OCCURED OR IF
		READ	11		# ISS WARNING IS ON.
		MASK	BIT1
		CCS	A
		TCF	IMUBAD

IMUGOOD		TCF	GOODEND		# WITH C(A) = 0.

IMUBAD		CAF	ZERO
		TCF	BADEND

CAGETEST	CAF	BIT6		# SUBROUTINE TO TERMINATE IMU MODE
		MASK	IMODES30	# SWITCH IF IMU HAS BEEN CAGED.
		CCS	A
		TCF	IMUBAD		# DIRECTLY.
		TC	Q		# WITH C(A) = +0.

CAGETSTQ	CS	IMODES30	# SKIP IF IMU NOT BEING CAGED.
		MASK	BIT6
		CCS	A
		INCR	Q
		TC	Q

CAGETSTJ	CS	IMODES30	# IF DURING MODE SWITCH INITIALIZATION
		MASK	BIT6		# IT IS FOUND THAT THE IMU IS BEING CAGED,
		CCS	A		# SET IMUCADR TO -0 TO INDICATE OPERATION
		TC	Q		# COMPLETE BUT FAILED.  RETURN IMMEDIATELY
		
		CS	ZERO		# TO SWRETURN.
		TS	IMUCADR
		TCF	MODEEXIT

## Page 156
#          GENERALIZED MODE SWITCHING TERMINATION. ENTER AT GOODEND FOR SUCCESSFUL COMPLETION OF AN I/O OPERATION
# OR AT BADEND FOR AN UNSUCCESSFUL ONE.  C(A) OR ARRIVAL =0 FOR IMU, 1 FOR AOT, 2 FOR RADARS, & 3 FOR ATT MANU.

BADEND		TS	RUPTREG2	# DEVICE INDEX.
		CS	ZERO		# FOR FAILURE.
		TCF	GOODEND +2

GOODEND		TS	RUPTREG2
		CS	ONE		# FOR SUCCESS.

		TS	RUPTREG3
		INDEX	RUPTREG2	# SEE IF USING PROGRAM ASLEEP.
		CCS	MODECADR
		TCF	+2		# YES - WAKE IT UP.
		TCF	ENDMODE		# IF 0, PROGRAM NOT IN YET.

		CAF	ZERO		# WAKE SLEEPING PROGRAM.
		INDEX	RUPTREG2
		XCH	MODECADR
		TC	JOBWAKE

		CS	RUPTREG3	# ADVANCE LOC IF SUCCESSFUL.
		INDEX	LOCCTR
		ADS	LOC

		TCF	TASKOVER

ENDMODE		CA	RUPTREG3	# -0 INDICATES OPERATION COMPLETE BUT
 +1		INDEX	RUPTREG2	# UNSUCCESSFUL - -1 INDICATES COMPLETE AND
		TS	MODECADR	# SUCCESSFUL.
		TCF	TASKOVER

## Page 157
# GENERAL STALLING ROUTINE. USING PROGRAMS COME HERE TO WAIT FOR I/O COMPLETION.

ATTSTALL	CAF	THREE		# ATTITUDE MANEUVER STALL
		TCF	STALL
		
RADSTALL	CAF	TWO		# RR AND LR STALL.
		TCF	STALL

AOTSTALL	CAF	ONE		# AOT.
		TC	STALL

OPTSTALL	EQUALS	AOTSTALL

IMUSTALL	CAF	ZERO		# IMU.

STALL		INHINT
		TS	RUPTREG2	# SAVE DEVICE INDEX.
		INDEX	A		# SEE IF OPERATION COMPLETE.
		CCS	MODECADR
		TCF	MODABORT	# ALLOWABLE STATES ARE +0, -1, AND -0.
		TCF	MODESLP		# OPERATION INCOMPLETE.
		TCF	MODEGOOD	# COMPLETE AND GOOD IF = -1.

MG2		INDEX	RUPTREG2	# COMPLETE AND FAILED IF -0.  RESET TO +0.
		TS	MODECADR	# RETURN TO CALLER.
		TCF	MODEEXIT

MODEGOOD	CCS	A		# MAKE SURE INITIAL STATE -1.
		TCF	MODABORT

		INCR	BUF2		# IF SO, INCREMENT RETURN ADDRESS AND
		TCF	MG2		# RETURN IMMEDIATELY, SETTING CADR = +0.

MODESLP		TC	MAKECADR	# CALL FROM SWITCHABLE FIXED ONLY.
		INDEX	RUPTREG2
		TS	MODECADR
		TCF	JOBSLEEP

MODABORT	TC	ABORT		# TWO PROGRAMS USING SAME DEVICE.
		OCT	1210

## Page 158
# CONSTANTS FOR MODE SWITCHING ROUTINES

BITS3&4		OCT	14
BITS4&6		OCT	00050
BITS4-6		OCT	00070
IMUSEFLG	EQUALS	BIT8		# INTERPRETER SWITCH 7.
13,14,15	OCT	70000

-COMMAX		DEC	-191
-COMMAX-	DEC	-192
600MS		DEC	60
3SECSM		EQUALS	3SECS
back to top