# Copyright:	Public domain.
# Filename:	AOTMARK.agc
# Purpose: 	Part of the source code for Luminary 1A build 099.
#		It is part of the source code for the Lunar Module's (LM)
#		Apollo Guidance Computer (AGC), for Apollo 11.
# Assembler:	yaYUL
# Contact:	Ron Burkey <info@sandroid.org>.
# Website:	www.ibiblio.org/apollo.
# Pages:	244-261
# Mod history:  2009-05-10 SN   (Sergio Navarro).  Started adapting
#				from the Luminary131/ file of the same
#				name, using Luminary099 page images.
#
# This source code has been transcribed or otherwise adapted from
# digitized images of a hardcopy from the MIT Museum.  The digitization
# was performed by Paul Fjeld, and arranged for by Deborah Douglas of
# the Museum.  Many thanks to both.  The images (with suitable reduction
# in storage size and consequent reduction in image quality as well) are
# available online at www.ibiblio.org/apollo.  If for some reason you
# find that the images are illegible, contact me at info@sandroid.org
# about getting access to the (much) higher-quality images which Paul
# actually created.
#
# Notations on the hardcopy document read, in part:
#
#	Assemble revision 001 of AGC program LMY99 by NASA 2021112-61
#	16:27 JULY 14, 1969

# Page 244
		BANK	12
		SETLOC	AOTMARK1
		BANK

		EBANK=	XYMARK
		COUNT*	$$/MARK

AOTMARK		INHINT
		CCS	MARKSTAT	# SEE IF AOTMARK BUSY
		TC	+2		# MARK SYSTEM BUSY -- DO ALARM
		TC	EXTVBCHK
		TC	P00DOO
		OCT	00105

EXTVBCHK	CAF	SIX		# SEE IF EXT. VERB WORKING
		MASK	EXTVBACT
		CCS	A
		TCF	MKABORT		# YES -- ABORT

		CAF	BIT2		# NO -- DISALLOW SOME EXTENDED VERB ACTION
		ADS	EXTVBACT	# BIT2 RESET IN ENDMARK
MKVAC		CCS	VAC1USE		# LOOK FOR A VAC AREAD -- DO ABORT IF
		TCF	MKVACFND	# NONE AVAILABLE
		CCS	VAC2USE
		TCF	MKVACFND
		CCS	VAC3USE
		TCF	MKVACFND
		CCS	VAC4USE
		TCF	MKVACFND
		CCS	VAC5USE
		TCF	MKVACFND
		DXCH	BUF2
		TC	BAILOUT1	# ALL VAC AREAS OCCUPIED -- ABORT.
		OCT	01207

MKVACFND	AD	TWO
		TS	MARKSTAT        # STORE VAC ADR IN LOW 9 OF MARKSTAT

		CAF	ZERO
		INDEX	MARKSTAT
		TS	0 -1		# ZERO IN VACUSE REG TO SHOW VAC OCCUPIED

		CAF	PRIO15
		TC	FINDVAC		# SET UP JOB FOR GETDAT
		EBANK=	XYMARK
		2CADR	GETDAT

		RELINT
		TCF	SWRETURN
# Page 245
MKABORT		DXCH	BUF2
		TC	BAILOUT1	# CONFLICT WITH EXTENDED VERB
		OCT	01211

MKRELEAS	CAF	ZERO
		XCH	MARKSTAT	# SET MARKSTAT TO ZERO
		MASK	LOW9		# PICK UP VAC AREA AOR
		CCS	A
		INDEX	A
		TS	0		# SHOW MKVAC AREA AVAILABLE
		CAF	ONE
		TC	IBNKCALL
		CADR	GOODEND		# GO WAKE UP CALLING JOB

# Page 246
KILLAOT		CAF	ZERO
		TS	EXTVBACT	# TERMINATE AOTMARK -- ALLOW EXT VERB
		TC	GOTOP00H
GETDAT		CS	MARKSTAT	# SET BIT12 TO DISCOURAGE MARKRUPT
		MASK	BIT12		#	BIT12 RESET AT GETMARK
		ADS	MARKSTAT

		CAF	V01N71		# DISPLAY DETENT AND STAR CODE
		TC	BANKCALL
		CADR	GOMARKF

		TCF	KILLAOT		# V34 -- DOES GOTOP00H
		TCF	DODAT		# V33 -- PROCEED -- USE THIS STAR FOR MARKS
ENTERDAT	TCF	GETDAT		# ENTER -- REDISPLAY STAR CODE

DODAT		CAF	HIGH9		# PICK DETENT CODE FROM BITS7-9 OF AOTCODE
		MASK	AOTCODE		# AND SEE IF CODE 1 TO 6
		EXTEND
		MP	BIT9
		TS	XYMARK		# STORE DETENT

		EXTEND
		BZMF	GETDAT		# COAS CALIBRATION CODE - NO GOOD HERE

		AD	NEG7		# SEE IF DETENT 7 FOR COAS
		EXTEND
		BZF	CODE7

		TCF	CODE1TO6

CODE7		CAF	V06N87*		# CODE 7, COAS SIGHTING, GET OPTIC AXIS
		TC	BANKCALL	# AZ AND EL OF SIGHTING DEVICE FROM ASTRO
		CADR	GOMARKF

		TCF	KILLAOT		# V34 -- DOES GOTOP00H
		TCF	+2		# PROCEED
		TCF	CODE7		# ON ENTER, RECYCLE
		EXTEND
		DCA	AZ		# PICK UP AZ AND EL IN SP 25 COMP
		INDEX	FIXLOC
		DXCH	8D		# STORE IN 8D AND 9D OF LOCAL VAC
		CAF	ZERO		# BACKUP SYSTEM TO BE USED
		TCF	COASCODE	# ZERO APPARENT ROTATION

CODE1TO6	INDEX	XYMARK		# INDEX AOT POSITION BY DET CODE
		CA	AOTEL -1
		INDEX	FIXLOC
		TS	9D		# STORE ELEVATION IN VAC+9D

		INDEX	XYMARK		# INDEX DET CODE 1,2 OR 3
# Page 247
		CA	AOTAZ -1
		INDEX	FIXLOC
		TS	8D		# STORE AZIMUTH IN VAC +8D

		CA	AOTAZ +1	# COMPENSATION FOR APPARENT ROTATION OF
		EXTEND			# AOT FIELD OF VIEW IN LEFT AND RIGHT
		INDEX	FIXLOC		# DETENTS IS STORED IN VAC +10D IN SP
		MSU	8D		# PRECISION ONE'S COMPLEMENT
COASCODE	INDEX	FIXLOC
		TS	10D		# ROT ANGLE

		TC	INTPRET		# COMPUTE X AND Y PLANE VECTORS

# Page 248
# THE OPTAXIS SUBROUTINE COMPUTES THE X AND Y MARK PLANE VECS AND
# ROTATES THEM THRU THE APPARENT FIELD OF VIEW ROTATION UNIQUE TO AOT
# OPTAXIS USES OANB TO COMPUTE THE OPTIC AXIS
#
#	INPUT --	AZIMUTH ANGLE IN SINGLE PREC AT CDU SCALE IN 8D OF JOB VAC
#			ELEVATION ANGLE IN SINGLE PREC AT CDU SCALE IN 9D OF JOB VAC
#			ROTATION ANGLE IN SINGLE PREC IS COMP SCALED BY PI IN 10D OF VAC
#
#	OUTPUT --	OPTIC AXIS VEC IN NG COORDS IN SCAXIS
#			X-MARK PLANE 1/4VEC IN NB COORDS AT 18D OF JOB VAC
#			Y-MARK PLANE 1/4VEC IN NB COORDS AT 12D OF JOB VAC

OPTAXIS		CALL			# GO COMPUTE OA AN X AND Y PLANE VECS
			OANB
		SLOAD	SR1		# LOAD APP ROTATION IN ONES COMP
			10D		# RESCALE BY 2PI
		PUSH	SIN		# 1/2SIN(ROT) 0-1
		PDDL	COS
		PUSH	VXSC		# 1/2COS(ROT) 2-3
			18D
		PDDL	VXSC		# 1/4COS(ROT)UYP 4-9
			0
			24D		# 1/4SIN(ROT)UXP
		BVSU	STADR		# UP 4-9
		STODL	12D		# YPNB=1/4(COS(ROT)UYP-SIN(ROT)UXP)
		VXSC	PDDL		# UP 2-3 UP 0-1 FOR EXCHANGE
			24D		# 1/4COS(ROT)UXP 	PUSH 0-5
		VXSC	VAD		# 1/4SIN(ROT)UYP
			18D		# UP 0-5
		STADR
		STOVL	18D		# XPNB=1/4(COS(ROT)UXP+SIN(ROT)UYP)
			LO6ZEROS	# INITIALIZE AVE STAR VEC ACCUMULATOR
		STORE	STARAD +6
		EXIT
		TCF	GETMKS

# Page 249
# THE OANB SUBROUTINE COMPUTES THE OPTIC AXIS OF THE SIGHTING INSTRUMENT
# FROM AZIMUTH AND ELEVATION INPUT FROM THE ASTRONAUT.
#
#	INPUT --	AZIMUTH ANGLE IN SINGLE PREC 2'S COMP IN 8D OF JOB VAC
#			ELEVATION ANGLE IN SINGLE PREC 2'S COMP IN 9D OF VAC
#
#	OUTPUT --	OPTIC AXIS IN NB COORDS. IN SCAXIS
#			X-PLANE 1/2VEC IN NB COORDS AT 24D OF VAC
#			Y-PLANE 1/2VEC IN NB COORDS AT 18D OF VAC

		BANK	05
		SETLOC	AOTMARK2
		BANK

		COUNT*	$$/MARK

OANB		SETPD	STQ
			0
			GCTR		# STORE RETURN
		SLOAD	RTB
			9D		# PICK UP SP ELV
			CDULOGIC
		PUSH	COS
		PDDL	SIN		# 1/2COS(ELV)	PD 0-1
		STADR
		STODL	SCAXIS		# OAX=1/2SIN(ELV)
			8D
		RTB
			CDULOGIC
		PUSH	COS
		STORE	20D		# STORE UYP(Y) 	20-21
		PDDL	SIN		# 1/2COS(AZ) 	PD 2-3
		PUSH	DCOMP		# PUSH 1/2S IN (AZ)	4-5
		STODL	22D		# STORE UYP(Z)	22-23
			LO6ZEROS
		STODL	18D		# STORE UYP(X)	18-19
		DMP	SL1
			0
		STODL	SCAXIS +2	# OAY=1/2COS(ELV)SIN(AZ)
		DMP	SL1		# UP	2-3
		STADR			# UP	0-1
		STOVL	SCAXIS +4	# OAZ=1/2COS(ELV)COS(AZ)
			18D		# LOAD UYP VEC
		VXV	UNIT
			SCAXIS		# UXP VEC=UYP X OA
		STORE	24D		# STORE UXP
		GOTO
			GCTR
# Page 250
# SURFSTAR COMPUTES A STAR VECTOR IN SM COORDINATES FOR LUNAR
# SURFACE ALIGNMENT AND EXITS TO AVEIT TO AVERAGE STAR VECTORS.
#
#	GIVEN	X-MARK PLANE 1/4 VEC IN NB AT 18D OF LOCAL VAC
#		Y-MARK PLANE 1/4 VEC IN NB AT 12D OF LOCAL VAC
#		CURSOR SP 2COMP AT POSITION 1 OF INDEXED MARKVAC
#		SPIRAL SP 2COMP AT POSITION 3 OF INDEXED MARKVAC
#		CDUY,Z,X AT POSITIONS 0,2,4 OF INDEXED MARKVAC

		BANK	15
		SETLOC	P50S
		BANK
		COUNT*	$$/R59

SURFSTAR	VLOAD*
			0,1		# PUT X-MARK CDUS IN CDUSPOT FOR TRG*NBSM
		STORE	CDUSPOT
		SLOAD*	RTB
			1,1		# PICK UP YROT
			CDULOGIC
		STORE	24D		# STORE CURSOR FOR SPIRAL COMP (REVS)
		BZE
			YZCHK		# IF YROT ZERO -- SEE IF SROT ZERO
JUSTZY		PUSH	COS
		PDDL	SIN		# 1/2COS(YROT) 	0-1
		VXSC	PDDL		# UP 0-1	1/8SIN(YROT)UXP	0-5
			18D
		VXSC	VSU		# UP 	0-5
			12D		# UYP
		UNIT	VXV
			SCAXIS
		UNIT	PUSH
		SLOAD*	RTB
			3,1		# PICK UP SPIRAL
			CDULOGIC
		STORE	26D		# STORE SPIRAL (REVS)
		DSU	DAD
			24D
			ABOUTONE
		DMP
			DP1/12
		STORE	26D		# SEP=(360 + SPIRAL -CURSOR)/12
		SIN	VXSC		# UP	0-5
		VSL1	PDDL		# 1/2SIN(SEP)(UPP X OA)	0-5
			26D
		COS	VXSC
			SCAXIS
		VSL1	VAD		# UP	0-5
JUSTOA		UNIT	CALL
			TRG*NBSM
		STCALL	24D		# STAR VEC IN SM
			AVEIT		# GO AVERAGE
# Page 251
ABOUTONE	2DEC	.99999999

DP1/12		EQUALS	DEG30		# .08333333
		BANK	7
		SETLOC	AOTMARK1
		BANK
		COUNT*	$$/MARK
YZCHK		SLOAD*	BZE		# YROT ZERO AND IF SROT ZERO FORCE STAR
			3,1		# ALONG OPTIC AXIS
			YSZERO
		DLOAD	GOTO
			24D
			JUSTZY		# SROT NOT ZERO -- CONTINUE NORMALLY
YSZERO		VLOAD	GOTO
			SCAXIS
			JUSTOA

# Page 252
# THE GETMKS ROUTINE INITIALIZES THE SIGHTING MARK PROCEDURE

GETMKS		CAF	ZERO		# INITIALIZE MARK ID REGISTER AND MARK CNT
		TS	XYMARK
		TS	MARKCNTR
		CAF	LOW9		# ZERO BITS10 TO 15 RETAINING MKVAC ADR
		MASK	MARKSTAT
		TS	MARKSTAT
		CAF	MKVB54*		# DISPLAY VB54 INITIALLY
PASTIT		TC	BANKCALL
		CADR	GOMARK4

		TCF	KILLAOT		# V34 -- DOES GOTOP00H
		TCF	MARKCHEX	# VB33 -- PROCEED, GOT MARKS, COMPUTE LOS
		TCF	GETDAT		# ENTER -- RECYCLE TO V01N71

MARKCHEX	CS	MARKSTAT	# SET BIT12 TO DISCOURAGE MARKRUPT
		MASK	BIT12
		ADS	MARKSTAT
		MASK	LOW9
		TS	XYMARK		# JAM MARK VAC ADR IN XYMARK FOR AVESTAR
		CAF	ZERO
		TS	MKDEX		# SET MKDEX ZERO FOR LOS VEC CNTR
		CA	MARKSTAT
		MASK	PRIO3		# SEE IF LAST MK PART COMPLETE
		TS	L
		CAF	PRIO3		# BITS10 AND 11
		EXTEND
		RXOR	LCHAN
		EXTEND
		BZF	AVESTAR		# LAST PAIR COMPLETE -- TO COMPUTE LOS
CNTCHK		CCS	MARKCNTR	# NO PAIR SHOWING -- SEE IF PAIR IN HOLD
		TCF	+2		# PAIR BURIED -- DECREMENT COUNTER
		TCF	MKALARM		# NO PAIR -- ALARM
		TS	MARKCNTR	# STORE DECREMENTED COUNTER

AVESTAR		CAF	BIT12		# INITIALIZE MKDEX FOR STAR LOS COUNTER
		ADS	MKDEX		# MKDEX WAS INITIALIZED ZERO IN MARKCHEX
		CS	MARKCNTR
		EXTEND
		MP	SIX		# GET C(L) = -6 MARKCNTR
		CS	XYMARK
		AD	L		# ADD -- MARK VAC ADR SET IN MARKCHEX
		INDEX	FIXLOC
		TS	X1		# JAM -- CDU ADR OF X-MARK IN X1

		CA	FIXLOC		# SET PD POINTER TO ZERO
		TS	PUSHLOC

		TC	INTPRET
# Page 253
		BON	VLOAD*
			SURFFLAG	# IF ON SURFACE COMPUTE VEC AT SURFSTAR
			SURFSTAR
			1,1		# PUT Y-MARK CDUS IN CDUSPOT FOR TRG*NBSM
		STOVL	CDUSPOT
			12D		# LOAD Y-PLANE VECTOR IN NG
		CALL
			TRG*NBSM	# CONVERT IT TO STABLE MEMBER
		PUSH	VLOAD*
			0,1		# PUT X-MARK CDUS IN CDUSPOT FOR TRG*NBSM
		STOVL	CDUSPOT
			18D		# LOAD X-PLANE VECTOR IN NB
		CALL
			TRG*NBSM	# CONVERT IT TO STABLE-MEMBER
		VXV	UNIT		# UNIT(XPSM * YPSM)
		STADR
		STORE	24D

AVEIT		SLOAD	PDVL		# N(NUMBER OF VECS) IN 0-1
			MKDEX
			24D		# LOAD CURRENT VECTOR
		VSR3	V/SC
			0
		STODL	24D		# VEC/N
			0
		DSU	DDV
			DP1/8		# (N-1)/N
		VXSC	VAD
			STARAD +6	# ADD VEC TO PREVIOUSLY AVERAGED VECTOR
			24D		# (N-1)/N AVESTVEC + VEC/N
		STORE	STARAD +6	# AVERAGE STAR VECTOR
		STORE	STARSAV2
		EXIT
		CCS	MARKCNTR	# SEE IF ANOTHER MARK PAIR IN MKVAC
		TCF	AVESTAR -1	# THERE IS -- GO GET IT -- DECREMENT COUNTER
ENDMARKS	CAF	FIVE		# NO MORE MARKS -- TERMINATE AOTMARK
		INHINT
		TC	WAITLIST
		EBANK=	XYMARK
		2CADR	MKRELEAS

		TC	ENDMARK

MKALARM		TC	ALARM		# NOT A PAIR TO PROCESS -- DO GETMKS
		OCT	111
		TCF	GETMKS

V01N71		VN	171
V06N87*		VN	687

# Page 254
# MARKRUPT IS ENTERED FROM INTERRUPT LEAD-INS AND PROCESSES CHANNEL 16
# CAUSED BY X,Y MARK OR MARK REJECT OR BY THE RATE OF DESCENT SWITCH

MARKRUPT	TS	BANKRUPT
		CA	CDUY		# STORE CDUS AND TIME NOW -- THEN SEE IF
		TS	ITEMP3		# WE NEED THEM
		CA	CDUZ
		TS	ITEMP4
		CA	CDUX
		TS	ITEMP5
		EXTEND
		DCA	TIME2
		DXCH	ITEMP1
		XCH	Q
		TS	QRUPT

		CAF	OCT34		# SEE IF X OR Y MARK OR MKREJECT
		EXTEND
		RAND	NAVKEYIN
		CCS	A
		TCF	+2		# ITS A LIVE ONE -- SEE IF ITS WANTED
		TCF	SOMEKEY		# ITS SOME OTHER KEY

		CAF	BIT12		# ARE WE ASKING FOR A MARK
		MASK	MARKSTAT
		CCS	A
		TC	RESUME		# DON'T WANT MARK OR MKREJECT -- DO NOTHING

		CCS	MARKSTAT	# ARE MARKS BEING ACCEPTED
		TCF	FINDKEY		# THEY ARE -- WHICH ONE IS IT
		TC	ALARM		# MARKS NOT BEING ACCEPTED -- DO ALARM
		OCT	112
		TC	RESUME

FINDKEY		CAF	BIT5		# SEE IF MARK REJECT.
		EXTEND
		RAND	NAVKEYIN
		CCS	A
		TCF	MKREJ		# IT'S A MARK REJECT

		CAF	BIT4		# SEE IF Y MARK
		EXTEND
		RAND	NAVKEYIN
		CCS	A

		TCF	YMKRUPT		# IT'S A Y MARK

		CAF	BIT3		# SEE IF X MARK
		EXTEND
		RAND	NAVKEYIN

# Page 255
		CCS	A
		TCF	XMKRUPT		# IT'S A X MARK

SOMEKEY		CAF	OCT140		# NOT MARK OR MKREJECT -- SEE IF DESCENT BITS
		EXTEND
		RAND	NAVKEYIN
		EXTEND
		BZF	+3		# IF NO BITS

		TC	POSTJUMP	# IF DESCENT BITS
		CADR	DESCBITS

		TC	ALARM		# NO INBITS IN CHANNEL 16.
		OCT	113

		TC	RESUME

XMKRUPT		CAF	ZERO
		TS	RUPTREG1	# SET X MARK STORE INDEX TO ZERO
		CAF	BIT10
		TCF	+4
YMKRUPT		CAF	ONE
		TS	RUPTREG1	# SET Y MARK STORE INDEX TO ONE
		CAF	BIT11
		TS	XYMARK		# SET MARK IDENTIFICATION

		TC	MARKTYPE	# SEE IF SURFACE MARK
		TCF	SURFSTOR	# SURFACE MARK -- JUST STORE CDUS

		CAF	BIT14		# GOT A MARK -- SEE IF MARK PARI MADE
		MASK	MARKSTAT
		EXTEND
		BZF	VERIFYMK	# NOT A PAIR, NORMAL PROCEDURE
		CS	MARKCNTR	# GO A PAIR, SEE IF ANOTHER CAN BE MADE
		AD	FOUR		# IF SO, INCREMENT POINTER, CLEAR BITS 10,11
		EXTEND
		BZMF	5MKALARM	# HAVE FIVE MARK PAIRS -- DON'T ALLOW MARK
		INCR	MARKCNTR	# OK FOR ANOTHER PAIR, INCR POINTER
		CS	PRIO23		# CLEAR BITS 10,11,14 FOR NEXT PAIR
		MASK	MARKSTAT
		TS	MARKSTAT

VERIFYMK	CA	XYMARK
		MASK	MARKSTAT
		CCS	A
		TCF	+2		# THIS MARK NOT DESIRED
		TCF	VACSTOR		# MARK DESIRED -- STORE CDUS
		TC	ALARM
		OCT	114
		TC	RESUME		# RESUME -- DISPLAY UNCHANGED -- WAIT FOR ACTION

# Page 256
5MKALARM	TC	ALARM		# ATTEMPTING TO MAKE MORE THAN 5 MK PAIRS
		OCT	107
		TC	MARKTYPE	# SEE IF SURFACE MARK
		TCF	DSPV6N79	# IT IS
		TC	RESUME		# DON'T CHANGE DISPLAY -- DO NOTHING

# Page 257
MKREJ		TC	MARKTYPE	# SEE IF SURFACE
		TCF	SURFREJ		# SURFACE -- JUST CHECK MARK COUNTER

		CAF	PRIO3		# INFLIGHT -- SEE IF MARKS MADE
		MASK	MARKSTAT
		CCS	A
		TCF	REJECT		# MARKS MADE -- REJECT ONE
REJALM		TC	ALARM		# NO MARK TO REJECT -- BAD PROCEDURE -- ALARM
		OCT	115
		TC	RESUME		# DESIRED ACTION DISPLAYED

REJECT		CS	PRIO30		# ZERO BIT14, SHOW REJ., SEE IF MARK SINCE
		MASK	MARKSTAT	# LAST REJECT
		AD	BIT13
		XCH	MARKSTAT
		MASK	BIT13
		CCS	A
		TCF	REJECT2		# ANOTHER REJECT SET BIT 10+11 TO ZERO

		CS	XYMARK		# MARK MADE SINCE REJECT -- REJECT MARK IN 1D
RENEWMK		MASK	MARKSTAT
		TS	MARKSTAT
		TCF	REMARK		# GO REQUEST NEW MARK ACTION

REJECT2		CS	PRIO3		# ON SECOND REJECT -- DISPLAY VB53 AGAIN
		TCF	RENEWMK

SURFREJ		CCS	MARKCNTR	# IF MARK DECREMENT COUNTER
		TCF	+2
		TCF	REJALM		# NO MARKS TO REJECT -- ALARM
		TS	MARKCNTR
		TC	RESUME

# Page 258
# MARKTYPE TESTS TO SEE IF LEM ON LUNAR SURFACE.  IF IT IS RETURN TO LOC+1

MARKTYPE	CS	FLAGWRD8	# SURFFLAG ******** TEMPORARY ******
		MASK	BIT8
		CCS	A
		INCR	Q		# IF SURFACE MARK RETURN TO LOC +1
		TC	Q		# IF INFLIGHT MARK RETURN TO LOC +2

SURFSTOR	CAF	ZERO		# FOR SURFACE MARK ZERO MARK KIND INDEX
		TS	RUPTREG1

		CS	MARKSTAT	# SET BITS10,11 TO SHOW SURFACE MARK
		MASK	PRIO3		# FOR MARKCHEX
		ADS	MARKSTAT

VACSTOR		CAF	LOW9
		MASK	MARKSTAT	# STORE MARK VAC ADR IN RUPTREG2
		TS	RUPTREG2
		EXTEND
		DCA	ITEMP1		# PICK UP MARKTIME
		DXCH	TSIGHT		# STORE LAST MARK TIME
		CA	MARKCNTR	# 6 X MARKCNTR FOR STORE INDEX
		EXTEND
		MP	SIX
		XCH	L		# GET INDEX FROM LOW ORDER PART
		AD	RUPTREG2	# SET CDU STORE INDEX TO MARKVAC
		ADS	RUPTREG1	# INCREMENT VAC PICKUP BY MARK FOR FLIGHT
		TS	MKDEX		# STORE HERE IN CASE OF SURFACE MARK
		CA	ITEMP3
		INDEX	RUPTREG1
		TS	0		# STORE CDUY
		CA	ITEMP4
		INDEX	RUPTREG1
		TS	2		# STORE CDUZ
		CA	ITEMP5
		INDEX	RUPTREG1
		TS	4		# STORE CDUX
		TC	MARKTYPE	# IF SURFACE MARK -- JUST DO SURFJOB
		TCF	SURFJOB

		CAF	BIT13		# CLEAR BIT13 TO SHOW MARK MADE
		AD	XYMARK		# SET MARK ID IN MARKSTAT
		COM
		MASK	MARKSTAT
		AD	XYMARK
		TS	MARKSTAT
		MASK	PRIO3		# SEE IF X, Y MARK MADE
		TS	L

# Page 259
		CA	PRIO3
		EXTEND
		RXOR	LCHAN
		CCS	A
		TCF	REMARK		# NOT PAIR YET, DISPLAY MARK ACTION
		CS	MARKSTAT	# MARK PAIR COMPLETE -- SET BIT14
		MASK	BIT14
		ADS	MARKSTAT
		TCF	REMARK		# GO DISPLAY V54

# Page 260
REMARK		CAF	PRIO3		# BITS 10 AND 11
		MASK	MARKSTAT
		EXTEND
		MP	BIT6		# SHIFT MARK IDS TO BE 0 TO 3 FOR INDEX
		TS	MKDEX		# STORE VERB INDEX
SURFJOB		CAF	PRIO15
		TC	NOVAC		# ENTER JOB TO CHANGE DISPLAY TO
		EBANK=	XYMARK		# REQUEST NEXT ACTION
		2CADR	CHANGEVB

		TC	RESUME

CHANGEVB	TC	MARKTYPE
		TCF	DSPV6N79	# SURFACE -- DISPLAY V 06 N 79
		INDEX	MKDEX		# INFLIGHT -- PICK UP MARK VB INDEX
		CAF	MKVB54
		TC	PASTIT		# PASTE UP NEXT MK VERB DISPLAY

# THE FOUR MKVBS ARE INDEXED -- THEIR ORDER CANNOT BE CHANGED

MKVB54		VN	5471		# MAKE X OR Y MARK
MKVB53		VN	5371		# MAKE Y MARK
MKVB52		VN	5271		# MAKE X MARK
MKVB54*		VN	5471		# MAKE X OR Y MARK
DP1/8		2DEC	.125

OCT34		OCT	34
V06N71		VN	671
V06N79*		VN	679

# Page 261
# ROUTINE TO REQUEST CURSOR AND SPIRAL MEASUREMENTS
		COUNT*	$$/R59

DSPV6N79	CAF	V06N79*		# CURSOR -- SPIRAL DISPLAY
		TC	BANKCALL
		CADR	GOMARKF

		TCF	KILLAOT		# V34 -- DOES GOTOP00H
		TCF	SURFEND		# V33 -- PROCEED, END MARKING
		CAF	BIT6		# IF V32(OCT40) IN MPAC DO RECYCLE
		MASK	MPAC		# OTHERWISE IT IS LOAD VB ENTER SO
		CCS	A		# RE-DISPLAY V06N79
		TCF	SURFAGAN	# VB32 -- RECYCLE
		TCF	DSPV6N79	# ENTER

SURFEND		CS	BIT14		# SET BIT14 TO SHOW MARK END
		MASK	MARKSTAT
		AD	BIT14
		TS	MARKSTAT

SURFAGAN	CA	CURSOR
		INDEX	MKDEX		# HOLDS VAC AREA POINTER FOR SURF MARKING
		TS	1		# STORE CURSOR SP 2COMP
		CA	SPIRAL
		INDEX	MKDEX
		TS	3		# STORE SPIRAL

		CS	MARKSTAT	# IF BIT 14 SET -- END MARKING
		MASK	BIT14
		EXTEND
		BZF	MARKCHEX
		CA	MARKCNTR	# THIS IS RECYCLE -- SEE IF 5 MARKS ALREADY
		AD	ONE
		COM
		AD	FIVE
		EXTEND
		BZMF	5MKALARM	# CAN'T RECYCLE -- TOO MANY MARKS -- ALARM
		INCR	MARKCNTR	# OF FOR RECYCLE -- INCR COUNTER
		TCF	GETMKS +3	# GO DISPLAY MARK VB

