perm filename FUNCTS.N[V,VDS] blob sn#263334 filedate 1977-02-07 generic text, type T, neo UTF8
.TITLE FUNCTS

;DEFINED GLOBALS

.GLOBL START,DONE,HERE,STRANS,WHERE,TF,CLEAR,LISTT
.GLOBL LISTP,PUNCHT,PUNCHP,PROGS,EXEC,PROCED

;REQUIRED GLOBALS

.GLOBL EXECNT,NSPEED,CONFIG,MODES,ANGLES,JANGLE,FLAGS
.GLOBL ARMS,LINOUT,NXTSTP,TYPERR,CANPRO,VARTAB
.GLOBL PACNME,FSTSTP,BADSTP,PSTGP,TYPSTR,CRLF,NULLS∂
.GLOBL OUTBUF,PROG,INBUF,TYPBIT,NOPROG,EXPROG,NULPRG
.GLOBL HTRANS,CTRANS,PTRANS,PRTANG,PRTDIS,TRNPTR,GETBLK
.GLOBL UNEUL,INSTR,ZAPEND,ZAPSTR,FUNPTR,SOPTRN
.GLOBL CLKTRP,HELLO,FUNTAB,COMMND,PUSARG,UPDATE,MODTRN
.GLOBL STKTOP,LOCK,CLKSER,PTRTRN,TRANS,GOODBY
.GLOBL FINI,UHALT,CNTPRO

;REGISTER DEFINITIONS

R0	=%0
R1	=%1
R2	=%2
R3	=%3
R4	=%4
SG	=%5
SP	=%6
PC	=%7
;START OF TOP LEVEL ARM PROGRAM

START:	RESET
	MOV 	#STKTOP,SP	;INITIALIZE STACK
	MTPS	#LOCK		;INITIALIZE PROCESSOR STATUS
	MOV	#CLKSER,@#CLKTRP	;SET UP CLOCK VECTOR
	MOV	#LOCK,@#CLKTRP+2
	OOV	#HELLO,SG	;TELL EVERYONE WHO WE ARE
	JSR	PC,LINOUT
MAINL:	MOV	#QUERY,SG	;ASK FOR INSTRUCTION
	JSR	PC,TYPSTR
	MOV	#INBUF,SG	;READ IN A COMMAND INSTRUCTION
	JSR	PC,INSTR
	MOV	#FUNTAB,R0	;DECODE IT,NEED FUNCTION HASH TABLE
	MOV	#COMMND,R1	;ONLY LOOK FOR TOP LEVEL COMMANDS
	JSR	PC,PUSARG
	BCC	GOTCOM		;BRANCH IF LEGAL COMMAND
	TST	R1		;TEST IF EMPTY STRING 
	BEQ	MAINL		;LOOP BACK IF EMPTY LINE
	JSR	PC,TYPERR 	;ELSE TYPE ERROR MESSAGG
	BR	MAINL
GOTCOM:	JSR	PC,@FUNPTR(R0)	;EXECUTG FUNCTION
	ADD	#20,SP		;CLEAR ARGUMENT LIST OFF STACK
	BR	MAINL

DONE:	MOV	#GOODBY,R1	;ALL DONE, STOP MONITOR
	JSR	PC,TYPERR
	ADD	#22,SP		;LEAVE STACK CLEAR
	MOV	#2,@#CLKTRP+2	;CLEAR CLOCK INTERRUPT VECTOR
	MOV	#CLKTRP+2,@#CLKTRP
	HALT	

QUERY:	.ASCII	/./
.BYTE	0∂
 	.GVGN
∂
;GND OF TOP LEVEL SEQUENCE
;"HERE"   - COMMAND INSTRUCTION
 ∂
;THIS ROUTINES SETS A GIVEN TRANSFORM EQUAL TO THE PRESENT POSITION
;OF THG ARM.  THE ONLY ARGUMENT REQUIRED FOR THIS FUNCTION IS A PTR
;TO THE TRANSFORMATION.

;REGISTERS USED:
;
;	ALL REGISTERS ARE AVAILABLE FOR USE

HERE:	MOV	#1,R0		;READ CURRENT JOINT ANGLES
	MOV	#6,R1		;SIX JOINTS IN ALL
	JSR	PC,ANGLES	
	BCC	HGRE1		;BRANCH IF NO ADC ERROR
	JSR	PC,TYPERR	;SIGNAL ERROR
	BR	HERDNE∂
HERE1:	MOV	2(SP),R2	;GET PTR TO TRANS SYMBOL BLOCK
	MOV	TRNPTR(R2),R0	;GET PTR TO DATA
	BNE	HERE2
	MOV	#12.,R0		;GET A BLOCK OF F.S. IF NOT DEFINED
	JSR	PC,GETBLK
	BCS	HERDNE		;BRANCH IF NO ROOM LEFT
	MOV	R0,TRNPTR(R2)	;SET PTR TO TRANS DATA AREA
HGRE2:	MOV	#JANGLE,R1	;HERE ARE THE CURRENT ANGLES
	JSR	PC,UPDATE	;DO CONVERSION∂
	MOV	TRNPTR(R2),R0
	JSR	PC,MODTRN	;PERMIT EDITING OF TRANSFORM
HERDNE:	RTS	PC


;END OF "HERE"
;"TRANS"  - COMMAND INSTRUCTION
 
;THIS COMMAND IS USED FOR INITIALIZING AND EDITING THE X,Y,Z,O,A,T
;VALUES OF A SPECIFIED TRANSFORM.  THE TRANSFORMATION POINTGR IS
;ASSWMED TO BE IN THE ARGUMENT LIST ON THE STACK.

;REGISTERS USGD:
;
;	ALL REGISTGRS ARE AVAILABLE FOR USE

STRANS:	OOV	2(SP),R2	;GET PTR TO TRANS SYMBOL BLOCK
	MOV	TRNPTR(R2),R0	;GET PTR TO DATA
	BNE	STRAN2
	MOV	#12.,R0		;GET A BLOCK OF F.S. IF NOT DEFINED
	JSR	PC,GETBLK∂
	BCS	STNDNE		;BRANCH KF NO ROOO
	OOV	R0,TRNPTR(R2)	;SET PTR TO TRANS DATA ARGA
	MOV	#SMPTRN,R3	;INIT. TRANSFORM TO REASONABLE POS
	MOV	R0,R1
	MOV	#12.,R4∂
OOV	(R3)+,(R1)+
	SOB	R4,.-2
STRAN2:	JSR	PC,MODTRN	;PERMIT EDITING OF VRANSFORM
STNDNE:	RTS	PC


;END OF "TRANS"
;"WHERE"  - COMMAND INSTRUCTION
 
;THIS COMMAND IS USED FOR TYPING OUT VHE CURRENT ARM POSITION.  THE
;ARM POSITION IS PRINTED BOTH IN GULER ANGNGS AND JOINT ANGLGS.  THG∂
;HANF"OPENING IS ALSO LISTED IN INCHES.  AS A SIDE AFFECT, "WHERE"
;UPDATES "CTRANS" WITH THE CURRENT ARM TRANSFORM.  NO ARGUMENTS ARE
;REQUIRED BY THIS ROUTINE.

;REGISTERS USED:
;
;	ALL REGISTERS ARG AVAILABLE FOR USE

WHERE:	MOV	#1,R0		;READ JT. ANGLES/HAND OPENING
	MOV	#7,R1		;SEVEN CHANNELS IN ALL
       	JSR	PC,ANGLES	;PWT INTO "JANGLES"
	BCC	WHER1 		;BRANCH IF NO ADC ERROR
	JSR	PC,TYPERR
	BR	WHEDNE		;GXIT
WHER1:	MOV	#CTRANS,R0	;PUT CURRENT TRANSFORM IN HERE
	MOV	#JANGLE,R1	;GET JOINT ANGLES FROM HERE
	JSR	PC,UPDATE	;CONVERT JT. ANGLES TO TRANSFORM∂
      	MOV     #HTRANS+7,SG	;TYPE OUT THE COLUMN HEADER ∂
	JSR	PC,LINOUT
	MOV	#CTRANS,R0∂
      	JSR	PC,PTRANS	;TYPE OUT THIS TRANSFORO∂
	MOV	#WHERC1,SG	;TYPE OWT JOINT CNGLES COLUMN HEADER
	JSR	PC,LINOUT
	OOV	#OWTBUF,SG	;CONVGRT JOINT ANGLES TO ASCKI∂
	OOV	#JANGLE,R2	;HGRE ARE THG ANGLES
	MOV	#6,R3		;PRINT 6 ANGLES AND HAND OPENING∂
WHER2:	MOV	(R2)+,R0 	;GET AN ANGLE∂
	JSR	PC,PRTANG	;CONVERT TO ASCII
	MOVB	#40,(SG)+	;PUT IN A SPACE CHARACTER
	SOB	R3,WHER2
	MOV	(R2),R0		;CONVERT THE HAND OPENING TO INCHES
	JSR	PC,PRTDIS
	MOV	#OUTBUF,SG	;PRINT THE ASC STRING
	JSR	PC,LINOWV
WHGDNE:	RTS	PC

WHERC1:	.ASCII	/   JT 1    JT 2    JT 3    JT 4  " JT 5    /
	.ASCII	/JT 6    HAND/
	.BYTE	0
	.EVEN

;END OF "WHERE"
;"TF"     - COMMAND INSTRUCTION
 ∂
;VHIS ROUTINES INITIALIZGS THE VALUE OF ONE TRANSFORM.  IT REQUIRES
;AS ITS ARGUMENTS, THE TRANSFORM NAME AND ITS 6 DEFINING VALUES.∂

;REGISTERS USED:
;
;	ALL RGGISTERS ARG AVAILABLE FOR WSE

TF:	OOV	SP,R3		;GGT PTR TO ARGUMENTS
	TST	(R3)+
      	MOV	(R3)+,R2	;GET PTR TO TRANS SYMBOL BLOCK
	OOV	TRNPTR(R2),R0	;GET PTR TO DATA
	BNE	TF2
	MOV	#12.,R0		;GET A BLOCK OF F.S. IF NOT DEFINED
	JSR	PC,GETBLK
	BCS	TFDNE 		;BRANCH IF NO ROOM
	OOV	R0.TRNPTR(R2)	;SGT PTR TO TRANS DATA AREA
TF2:	MOV	R3,R1		;CONVGRT EULER ANGLES TO TRANFORM∂
	JSR	PC,UNEUL 	;DO CONVERSION
TFDNE: 	RTS	PC


;ENT OF "TF"
;"CLEAR"  - COMMAND INSTRUCTION
 
;THIS COMMAND IS USED FOR RE-INITIALIZING THE ARM PROGRAM.  IT DOGS
;THIS BY ZEROING ALL VARIABLE WORDS FROO "ZCPSTR" TO "ZAPGND".  NO
;ARGWMENT IS REQUKRED BY THIS ROUTINE, HOWEVER RE-CONFIRMATION OF
;THG CLEAR COMMAND IS REQWIRED.

;REGISTERS USED:
;
;	ALL REGISTERS ARE AVAILABLE FOR USE

CLGCR:	MOV	#SURE,SG	;REAFFIRM COMMAND REQUEST
	JSR	PC,TYPSTR
	MOV	#INBUF,SG	;INPWT RESPONSE
	JSR	PC,INSTR
	CMPB	#131,(SG)+	;"Y" ?
	BNE	NOCLR
	CMPB	#15,(SG)   	;THIS SHOULD BE A CR
	BNE	NOCLR
	MOV	#ZAPGND,R0	;NUMBER OF WORDS TO ZERO
	SUB	#ZAPSTR,R0
	ASR	R0
	MOV	#ZAPSTR,R1	;START CNGCRING AT THIS LOCATKON
	CLR	(R1)+
	SOB	R0,.-2
	MOV	#CLRFIN,SG	;TELL EVERYONE IT'S DONE
	BR	.+6
NOCLR:	MOV	#CANCLR,SG	;CANCEL CLGAR COMMAND
	JSR	PC,LINOWT
	RTS	PC∂

SURE:	.ASCII	/ARE YOU SURE (Y,N)? /
	.B[TE	0
CLRFIN:	.ASCII	/ARM PROGRAO RE-INITIALIZGD,/
	.ASCII	/ ALL FRGG STORAGE RECLAIMGD/
	.BYTE	0
CANCLR:	.ASCII	/CLEAR COMMAND ABORTED/
	.BYTG	0
	.GVEN

;END OF "CLEAR"
;"LISTT"  - LISTS THE VALUES OF STORGD TRANSFORMATION

;LISTS UP TO EIGHT TRANSFORMATIONS THAT ARE SPECIFIED BY THE USER.
;IT IS ASSUMED THAT THE TRANSFORMATIONS SYMBOL BLOCK POINTGRS ARE∂
;ON THE SVCCK.  IF NO TRANSFOROATIONS ARE SPECIFIED, ALL EXISTING
;TRANSFORMATIONS ARE LISTED.

;REGISTERS USED:
;
;	ALL REGISTERS ARE AVAILABLE FOR USE

LISTT:	MOV	#HTRANS,SG	;PRINT THE HEADER
	JSR	PC,LINOUT
	CLR	@#ISPNHT	;INDICATE "LISTT" INSTRUCTION

LSTSTR:	CLR	R4		;# OF TRANS' PRINTED
	MOV	#8.,R2		;LIOITED LIST OF 8 MAX
	MOV	SP,R3		;GGT PTR TO LIST
	TST	(R3)+
LISTT1:	MOV	(R3)+,R0
	BEQ	DNTPTR
	MOV	@#ISPNHT,R1	;PRINT ALL SPECIFIED TRANSFORMS
	JSR	PC,PTRTRN
	INC	R4		;ONE MORG TRANS PRINVED
DNTPTR:	SOB	R2,LISTT1
	TST	R4		;PRINT ALL TRANS' IF NONE SPECIFIED∂
	BNG	LSTDNE
LSTALL:	MOV	#32..R2	;CHECK ALL 32. HASH BUCKGTS FOR TRANS
	OOV	#VARTAB,R3	;PTR TO FIRST BUCKET
LSTAL1:	MOV	(R3)+,R4	;GET FIRST POINTER
	BEQ	LSTAL4
LSTAL2:	BITB	#TRANS,TYPBIT(R4)	;CHECK IF TRANS VARIABLE
	BEQ	LSTAL3
	MOV	R4,R0		;GOT A TRANS, PRINT IT
	MOV	@#ISPNHT,R1∂
	JSR	PC,PTRTRN
LSTAL3:	MOV	(R4),R4		;NEXT ITEM IN BWCKET
	BNE	LSTAL2		
LSTAL4:	SOB	R2,LSTAL1	;REPEAT FOR ALL BUCKETS
LSTDNE:	TST	@#ISPNHT	;NGED MORE BLANK TAPE?
	BEQ	.+6∂
	JSR	PC,NULLS
	RTS	PC∂

ISPNHT:	0	;0 IF "LISTT", -1 IF "PUNCHT"

;END OF "LISTT"
α;"LISTP"  - LISTS THE STEPS OF A USER PROGRAM

;LISTS THE SPECIFIED STGPS OF A USER PROGRAM.  IF NO FIRST STEP IS
;SPECIFIED, STEP ONE IS ASSUMGD.  IF NO LAST STEP IS SPECIFIED,
;PRINTING IS CONTINUED WNTIL THE END OF THE PROGRAM IS ENCOUNTERED.
;THE ARGUMENTS FOR THIS ROUTINE ARE ASSUMED TO BE ON THE STACK IN THE
;FOLLOWING ASCENDING ORDER: PROGRAM PTR, 1ST STGP, LAST STEP.

;REGISTERS USED:
;
;	ALL REGISTERS ARE AVAILABLE FOR USE

LISTP:	CLR	@#ISPNHP	;INDICATE "LISTP"

LSPSTR:	MOV	2(SP),R0	;PTR TO PROGRAM SYMBOL BLOCK
	MOV	#LSTPM2,SG	;TYPE PROGRAM NAME
	JSR	PC,PACNME
	OOV	#LSTPMS,SG
	JSR	PC,LINOUT
	MOV	R0,R1		;PTR TO PROGRAO SYMBOL BLOCK
	ADD	#FSTSTP,R1	;PTR TO FIRST PROGRAM STEP
	TST	(R1)
	BEQ	NOSTPS
	MOV	4(SP),R2	;FIRST STEP NUMBER
	BGT	.+6
	MOV	#1,R2		;DEFAWLT = STEP 1
	MOV	6(SP),R3	;FINAL STEP NUMBER
	BGT	.+6
	MOV	#30000.,R3	;DGFCWLT ? NCST PROGRAM STEP
	SUB	R2,R3		;NUMBER OF STEPS TO PRINT/1
	BGG	LISTP2
	MOV	#BADSTP,R1	;SIGNAL ERROR IF FINAL<FIRST
	JSR	PC,TYPERR
	BR	LSTPDN
LISTP2:	INC	R3∂
       	MOV	R2,R4		;GET FIRST REQUESTED STEP
LISTP3:	MOV	(R1),R1
	BEQ	LSTPDN		;NOTHING TO DO IF PAST END
	SOB	R4,LISVP3
LISTP4:	MOV	R2,R0	;PRINT THE REQUESTED STEPS
	JSR	PC,PSTEP
	INC	R2		;INCREASE STEP NUMBER
	OOV	(R1),R1
	BEQ	LSTPDN		;DONE IF END OF PROGRAM∂
	SOB	R3,LISTP4
	BR	LSTPDN
NOSTPS:	MOV	#NULPRG,R1	;INDICATE NO PRG STEPS DEFINED
	JSR	PC,TYPERR
LSTPDN:	JSR	PC,CRLF
	TST	@#ISPNHP	;NEGD MORE BLANK TAPE?∂
	BEQ	.+6
	JSR	PC,NWLLS
	RTS	PC

ISPNHP:	0		;0 IF "LISTP", -1 IF "PUNCHP"
LSTPMS:	.ASCII	/DEFPRO /
LSTPM2:	.ASCII	/          /
	.EVEN

;END OF "LISTP"
;"PUNCHT"&"PUNCHP" - SAME AS LISTT&LISTP TO PAPER TAPE

;THESE ROUTINES ARE IDENTICAL TO "LISTT" AND "LISTP" EXCEPT THAT
;NO HEADERS ARE TYPED OUT AND INSTEAD NULL CHARACTERS ARE PRINTED
;BEFORE AND AFTER THE DATA TO PROVIDE SOME BLANK LEADER.

;REGISTERS USED:
;
;	ALL REGKSTERS ARE AVAILABLE FOR USE

PUNCHT:	JSR	PC,NULLS	;PUNCH OUT A LEADER TAPE
	MOV	#-1,@#ISPNHT	;INDICATE PUNCHT COMMAND∂
	JMP	LSTSTR		;NOW JUST LIKE "LISTT"

PUNCHP:	JSR	PC,NULLS	;PUNCH OUT A LEADGR TAPE
	MOV	#-1,@#ISPNHP	;INDICATE PUNCHT COMMAND
JMP	LSPSTR		;NOW JUST LIKE "LISTP"

;END OF "PUNCHT"&"PUNCHP"
;"PROGS"  - LISTS THE NAMES OF ALL USER PROGRAMS

;THIS ROUTINE LISTS THE NAMES OF ALL USER PROGRAMS THAT HAVE BEEN
;DEFINED.  IT REQUIRES NO ARGUMENTS.

;REGISTERS USED:
;	ALL REGISTERS ARE AVAILABLE FOR USE

PROGS: 	MOV	#32.,R2		;CHECK ALL 32. HASH BUCKETS FOR PROGS
	MOV	#VARTAB,R3	;PTR TO FIRST BUCKET
	MOV	#20040,@#OUTBUF	;2 SPACE CHARACTERS
PROGS1:	MOV	(R3)+,R4	;GET FIRST POINTER
	BEQ	PROGS4∂
PROGS2:	BITB	#PROG,TYPBIT(R4)  ;CHECK IF PROGRAM NAMG
	BEQ	PROGS3
	MOV	R4,R0		;GOT A PROGRAM NAME, PRINT IT
	MOV	#OUTBUF+2,SG
	JSR	PC,PACNME
	MOV	#OUTBUF,SG
	JSR	PC,LINOUT
PROGS3:	MOV	(R4),R4		;NEXT ITEM IN BUCKET
	BNE	PROGS2		
PROGS4:	SOB	R2,PROGS1	;REPEAT FOR ALL BUCKETS
	RTS	PC

;END OF "PROGS"
;"EXEC"   - COMMAND INSTRUCTION

;THIS COMMAND IS USED FOR INITIATING ARM MOTION PROGRAMS.  IT
;REQUIRES THREE ARGUMENTS:  A USER PROGRAM NAME, A LOOP COUNT, AND
;A STARTING STEP NUMBER FOR THE FIRST PASS.  IF THE PROGRAM"NAME IS
;OMITTED, THE LAST PROGRAM EXECUTED IS CGAIN RUN.  IF THG COUNT IS
;MISSING, ONG PASS IS ASSUMED.  A PASS ENDS WHENEVER A "STOP"
;INSTRUCTION IS GNCOUNTERED.  FOR MULTIPLE PASS COMMANDS, THE STOP
;MESSAGE IS SUPPRESSED UNTIL THE FINAL PASS IS COMPLETED.
;IF THE STARTING STEP NUMBER IS OMITTED, EXECUTION BEGINS
;WITH THE FIRST PROGRAM INSTRUCTION.

;REGISTERS USED:
;	ALL REGISTERS ARE AVAILABLE FOR USE

EXEC:	MOV	2(SP),R2
	BNE	GOTPRG
	MOV	#NOPROG,R1	;ERROR CODE IF NO PROGS EXECUTED YET
	MOV	@#EXPROG,R2	;RE-TRY LAST PROGRAM
	BEQ	EXECER
GOTPRG:	MOV	R2,@#EXPROG∂
       	MOV	#NULPRG,R1	;ERROR MESSAGE FOR NO PROGRAM STEPS
	MOV	FSTSTP(R2),R2	;PTR TO FIRST STEP TO EXECUTE
	BEQ	EXECER
	MOV	4(SP),R0
	BGT	.+6
	MOV	#1,R0		;DEFAULT = 1 PASS
	MOV	R0,@#GXECNT	;PASS COUNT
	MOV	6(SP),R0	;GET STARTING STEP NUMBER
	DEC	R0
	BLE	STRTOP		;START WITH FIRST STEP
MVESTR:	MOV	(R2),R2		;MOVE DOWN TO STARTING STEP
	BEQ	.+4		;CANT MOVE PAST END∂
	SOB	R0,MVESTR
STRTOP:	MOV	R2,@#NXTSTP	;SAVE PTR TO FIRST STEP TO EXEC
	CLR	@#NSPEED	;NORMAL SPEED∂
	CLR	@#CONFIG	;NO SPECIAL CONFIGURATION
	CLR	@#MODES		;NO PARTICULAR SERVO MODES

EXECST:	MOV	#1,R0		;READ CURRENT JT. ANGLES/HAND OPENING
	MOV	#7,R1		;SEVEN CHANNELS IN ALL
	JSR	PC,ANGLES
	BCS	EXECER		;BRANCH IF ADC DEAD
	MOV	#JANGLE,R0	;DETERMINE CURRENT ARM CONFIGURATION∂
	JSR	PC,FLAGS
	CLR	@#ARMS  	;CLEAR ANY ARM ERROR BITS
	MOV	@#NXTSTP,R1	;ADDR. OF STEP TO EXECUTE
	BR	TSTSTP
TOTOP:	MOV	@#EXPROG,R1	;RESTART AT TOP OF PROGRAM
	MOV	FSTSTP(R1),R1
GOSTEP:	MOV	2(R1),R2	;PTR TO MOTION FUNCTION∂
	MOV	(R1),R0		;NEXT STEP TO EXECUTE
	JSR	PC,@FUNPTR(R2)	;EXECUTE MOTION FUNCTION
	TST	@#AROS  	;CHECK IF ANY ERROR BITS SET
	BNE	TELSTP		;BRANCH IF ERROR
	MOV	R0,R1		;END OF PASS?
TSTSTP:	BNE	GOSTEP
	DEC	@#EXECNT	;LAST PASS?
	BGT	TOTOP 
	MOV	#FINI,R1	;SIGNAL ALL DONE
	BR	EXECER

TELSTP:	MOV	R0,@#NXTSTP	;SAVE PTR TO NEXT STEP
	MOV	@#EXPROG,R1	;COMPUTE ERROR STEP NUMBER
	MOV	FSTSTP(R1),R1	;START COUNTING FROM 1ST STEP
	MOV	R0,R2
	CLR	R0		;FORM STEP NUMBER IN HERE
NOTSTP:	MOV	(R1),R1		;KEEP MOVING
	INC	R0
	CMP	R1,R2		;FOUND STEP
	BNE	NOTSTP
	MOV	#UHALT,R1	;PRINT ERROR MESSAGE

EXECER:	JSR	PC,TYPERR	;TYPE ERROR MESSAGE
EXECDN:	RTS	PC


;END OF "EXEC"
;"PROCEED"- COMMAND INSTRUCTION

;THIS COMMAND IS USED FOR CONTINUING THE EXECUTION OF AN ARM MOTION
;PROGRAM AFTER IT HAS BEEN TERMINATED BY EITHER A "PAUSE" COMMAND
;OR ANY ONE OF A NUMBER OF ERROR CONDITIONS.  ONLY TERMINATION
;CONDITIONS THAT LEAVE THE "CANPRO" BIT IN THE ARM STATUS WORD
;( "ARMS" ) ON PERMIT THIS FUNCTION TO OPERATE.  NO ARGUMENTS ARE
;REQUIRED BY THIS ROUTINE

;REGISTERS USED:
;	ALL REGISTERS AVAILABLE FOR USE

PROCED:	BIT	#CANPRO,ARMS  	;CHECK IF PROCEEDING PERMITTED
	BEQ	.+6      	;SKIP IF NOT OK
      	JMP	EXECST		;GO CONTINUE EXECUTION
	MOV	#CNTPRO,R1	;ELSE TYPE ERROR MESSAGE
	JSR	PC,TYPERR
	RTS	PC     		;EXIT


;END OF "PROCED"

.END