perm filename ARM.PAL[U,VDS]1 blob sn#299154 filedate 1977-08-07 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00013 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	.TITLE ARM
C00005 00003	FIX-UPS TO ASSEMBLE FOR PDP11/45 OR LSI
C00008 00004	DR11C AND ARMS STATUS REGISTER BIT DEFINITIONS
C00011 00005	.=ZAPSTR  START OF VARIABLE AREA TO BE ZEROED DURING INITIALIZATION
C00014 00006	SUBROUTINE VARIABLE DATA STORAGE
C00016 00007	VARIABLE STORAGE FOR "ARMSOL"
C00018 00008	END OF DATA SPACE AND BEGINNING OF PROGRAM SPACE
C00020 00009	DEFINITIONS FOR THE DATA STRUCTURES
C00022 00010	ARGUMENT BYTE CODES
C00025 00011	HASH TABLE AND SYMBOL DATA BLOCKS FOR COMMAND&EDIT INSTRUCTIONS
C00029 00012	SYMBOL DATA BLOCKS FOR COMPARISON OPERATORS & MOTION INSTRUCTIONS
C00033 00013	PROGRAM CONSTANTS AND REQUIRED SOURCE FILES
C00035 ENDMK
CāŠ—;
.TITLE ARM

   .=102		;GET RID OF THIS
	RTI
   .=100
	.WORD	102


;MACRO FOR ESTABLISHING RELATIVE POINTERS
  
   .MACRO INT SYM        		;Just gives SYM the next number.
	.IF1
   	.IFDF SYM
	       .ERROR You are using SYM in two ways!!!
	.ENDC
	SYM == RELCNT
	RELCNT == RELCNT+2
	.ENDC
   .ENDM


;MACRO FOR PRINT MEMORY ADDRESS INFORMATION

.MACRO .INFO STR,NUM
	.PRINT \STR\
	.PRINT \NUM
\
.ENDM


;MACRO FOR SETTING UP FUNCTION SYMBOL BLOCKS

.MACRO SYMBLK NAME,FUNCT,STYPE,NXTBLK,NARGS,ARGS
	.WORD	FUNCT
	.WORD	NXTBLK
	.BYTE	STYPE,NARGS
	.ASCII	/NAME/
	.IFNB <ARGS>
	   .IRP ARG,<ARGS>
		.BYTE	ARG
	   .ENDM
	   .BYTE 0
	   .EVEN
	.ENDC
.ENDM


;MACRO DEFINITIONS AND CONDITIONAL SWITCHES TO ASSEMBLE FOR LSI OR 11/45

.IF1
.MACRO ASKVAL SW,MES
  .PRINT \MES? \
    .TTYMA SWW
      SW==SWW
    .ENDM
.ENDM

ASKVAL LSI,ASSEMBLE FOR 11/45(0) OR LSI(1)


;REGISTER DEFINITIONS

PC	=%7		;PROGRAM COUNTER
SP	=%6		;STACK POINTER
SG	=%5		;STRING POINTER
R5	=%5		
R4	=%4		;GENERAL REGISTERS
R3	=%3
R2	=%2
R1	=%1
R0	=%0
;FIX-UPS TO ASSEMBLE FOR PDP11/45 OR LSI

.IFZ LSI

ASKVAL DR11,DUMMY ARM INTERFACE(0) OR REAL(1)

KLOCK	==340		;CPU STATUS TO LOCK OUT INTERRUPTS
KUNLOCK	==140		;CPU STATUS TO ENABLE INTERRUPTS

;ABSOLUTE MEMORY ADDRESS ASSIGNMENTS

CLKTRP	=104		;CLOCK TRAP
PARVEC	=114		;PARITY TRAP VECTOR
DRATRP	=530		;DR11 A VECTOR
DRBTRP	=534		;DR11 B VECTOR
ZAPSTR	=1000		;START OF DATA SPACE
PSTART	=20000		;START OF PROGRAM SPACE
DR11S	=167770		;DR11 STATUS WORD
DR11O	=167772		;DR11 OUTPUT REGISTER
DR11I	=167774		;DR11 INPUT REGISTER
PARCSR	=172100		;PARITY CONTROL REGISTER
CLKSET	=172542		;CLOCK SET REGISTER
CLKS	=172540		;CLOCK STATUS

.MACRO MTPS PSW
	MOVB	@#PSW,-(SP)
	CLRB	1(SP)
	MOV	(SP)+,177776
.ENDM

.MACRO CLKON
	MOV	#500.,CLKSET	;TURN ON REAL TIME CLOCK
	MOV	#111,CLKS
.ENDM

.MACRO CLKOFF
	CLR	CLKS		;TURN OFF CLOCK
.ENDM

HLT	== BPT


.IFF

DR11	==1		;REAL INTERFACE
KLOCK	==200		;CPU STATUS TO LOCK OUT INTERRUPTS
KUNLOCK	==000		;CPU STATUS TO ENABLE INTERRUPTS

;ABSOLUTE MEMORY ADDRESS ASSIGNMENTS

CLKTRP	=100		;CLOCK TRAP
DRATRP	=310		;DR11 A VECTOR
DRBTRP	=314		;DR11 B VECTOR
ZAPSTR	=1000		;START OF DATA SPACE
PSTART	=20000		;START OF PROGRAM SPACE
DR11S	=167760		;DR11 STATUS WORD
DR11O	=167762		;DR11 OUTPUT REGISTER
DR11I	=167764		;DR11 INPUT REGISTER

.MACRO MTPS PSW
	.WORD	106437,PSW
.ENDM

.MACRO CLKON
	MOV	#ADCMDE,@#DR11S
	MOV	#100000,@#DR11O
.ENDM

.MACRO CLKOFF
	MOV	#ADCMDE,@#DR11S
	MOV	#40000,@#DR11O
.ENDM

HLT	== HALT


.ENDC
.ENDC
;DR11C AND ARMS STATUS REGISTER BIT DEFINITIONS

DACMDE	==0		;CSR MODE BITS, DAC MODE
BRKMDE	==1		; "   "    "  , BRAKE REGISTER MODE
ADCMDE	==2		; "   "    "  , ADC MODE
STTMDE	==3		; "   "    "  , STATUS REGISTER READ MODE
ADCENB	==100		;ADC INTERRUPT ENABLE BIT
ADCDNE	==200		;ADC DONE BIT
STTENB	==40		;STATUS REGISTER INTERRUPT ENABLE BIT
STTREQ	==100000		;STATUS REGISTER REQUEST INTERRUPT BIT

;DR11C ARM STATUS REGISTER BIT DEFINITIONS

PANIC	==200		;PANIC BUTTON BIT MASK
ISON	==100
TOUCH0	==1		;TOUCH SENSOR BIT MASKS
TOUCH1	==2
ARMDNE	==37400		;BIT MASK OF ARM JOINTS IN RANGE BITS
HNDDNE	==40000		;BIT MASK OF HAND JOINT IN RANGE BIT

;DR11C BRAKE REGISTER BIT ASSIGNMENTS

ARMBRK	==77		;ARM BRAKE BITS
HNDBRK	==100		;HAND BRAKE BIT
NOINTG	==200		;NO HARDWARE INTEGRATION
ENABLE	==400		;INTERFACE ENABLE BIT
ONINTG	==1000		;FORCES HDWE INTEGRATION ALL OF THE TIME
LOWTOL	==10000		;LOW TOLERANCE POSITION COMPARISON
HITHND	==20000		;HAND IMPACT
NNUL	==40000		;DONT NULL OUT FINAL ERRORS(SOFTWARE SWITCH)

;DR11C DAC MODE BIT DEFINITIONS

CURRNT	==10000		;CURRENT RATHER THAN POSITION MODE

;ARM STATUS BITS.  THE LOW BYTE CONTAINS PROGRAM STATUS AND THE UPPER
;BYTE CONTAINS THE CURRENT MOTION STATUS

CANPRO	==1	;PROCEEDING PERMITTED FROM THIS ERROR CONDITION
CATERR	==2	;CATASTROPHIC ERROR, CAN'T PROCEED FROM THIS POINT

RUN	==400	;JOINT MOTION STILL IN PROGRESS
CHKDNE	==1000	;SET WHEN IN RANGE BITS ARE TO BE CHECKED
STRWRK	==2000	;START RUN-TIME ROUTINE, *DO NOT CHANGE THIS NUMBER*
WORKNG	==4000	;RUN-TIME RTN EXECUTING, *DO NOT CHANGE THIS NUMBER*
FINAL	==10000	;FINAL JOINT ANGLES COMPUTED
STPMVE	==20000	;STOP ARM MOTION IMMEDIATELY
ISFIN	==40000	;ALL DONE INTERPOLATING JOINT ANGLES
.=ZAPSTR  ;START OF VARIABLE AREA TO BE ZEROED DURING INITIALIZATION

STKTOP:
ARMS:	.=.+2	;ARM STATUS WORD

BRAKES:	.=.+2	;BRAKE REGISTER BITS ON

NSPEED:	.=.+2	;CHANGE IN ARM SPEED
PSPEED:	.=.+2	;PERMANENT CHANGE IN ARM SPEED

CONFIG:	.=.+2	;ASSERTED ARM CONFIGURATION

MODES:	.=.+2	;SPECIAL SERVO MODES
PMODES:	.=.+2	;PERMANENT SERVO MODES TURNED ONLY BY <ALWAYS>

JTBITS:	.=.+2	;JOINT IN TOLERANCE BITS


VARTAB:	.BLKW 32.;TABLE FOR SYMBOLS OF VARIABLES

FSPTR:	.=.+2	;PTR TO FIRST AVAILABLE F.S. BLOCK

EDPROG:	.=.+2	;PTR TO PREVIOUS USER PROGRAM EDITED
EDSNUM:	.=.+2	;NUMBER OF LAST EDITED STEP

LPROG:	.=.+2	;PTR TO CURRENT PROGRAM SYMBOL BLK, USED BY LABEL RTNS

EXECNT:	.=.+2	;NUMBER OF PASSES TO EXECUTE
LOPCNT:	.=.+2	;NUMBER OF PASSES EXECUTED
SUBPTR:	.=.+2	;PTR TO SUBROUTINE CALL STACK
	.=.+2	;LEAVE ROOM FOR LAST NEXT STEP PTR
STKEND:	.=.+40.	;USER SUBR CALL STACK: ALTERNATE PROGRAM, NEXT STEP PTRS
SUBSTK:	.=.+2	;BOTTOM OF STACK AND MAIN PROGRAM PTR

EANGLE:	.=.+12.	;TEMP. STORAGE FOR EULER ANGLES

JANGLE:	.=.+12.	;CURRENT JOINT ANGLES
HAND:	.=.+2	;CURRENT HAND OPENING

DANGLE:	.=.+12.	;CURRENT DAC OUTPUT ANGLES
DHAND:	.=.+4
DACVAL:	.=.+16.	;CURRENT DAC OUTPUT VALUES

ONE4TH:	.=.+14.	;1/4 CHANGE IN JOINT ANGLE

CTRANS:	.=.+24.	;CURRENT TRANSFORM OF ARM

INBUF:	.=.+200.;STRING INPUT BUFFER
OUTBUF:	.=.+200.;STRING OUTPUT BUFFER

ZAPEND:	;END OF AREA TO BE ZEROED
;SUBROUTINE VARIABLE DATA STORAGE

PTIME:	.=.+2	;TIME INTO CURRENT JOINT MOTION (5 MSEC. COUNTS)
RUNSUB:	.=.+2	;PTR TO SET POINT ROUTINE
TTIME:	.=.+2	;TIME OUT TIME
DRVERR:	.=.+2	;ERROR MESSAGE CODES
BADBIT:	.=.+2	;OUT OF RANGE BITS
DNECNT:	.=.+2	;COUNTER FOR NUMBER OF SEQUENTIAL TIMES IN RANGE TRUE
WAITNG:	.=.+2	;DRIVE START WAIT COUNT
NEWDAC:	.=.+14.	;NEW DAC VALUES

ISPNHT:	.=.+2	;0 IF "LISTT", -1 IF "PUNCHT"
ISPNHP:	.=.+2	;0 IF "LISTP", -1 IF "PUNCHP"

DELYTM:	.=.+2	;WAIT TIME FOR "DELAY"

GOTRN:	.=.+2	;PTR TO GO TRANSFORM

FDRVJT:	.=.+2	;"FDRIVE" DATA, JOINT TO BE DRIVEN
TIME1:	.=.+2	;DURATION OF MOTION
DTH:	.=.+2	;CHANGE IN JOINT ANGLE
FTH:	.=.+2	;FINAL JOINT ANGLE

RELXYZ:	.=.+2	;"DRAW" DATA, PTR TO RELATIVE CHANGE IN X,Y,Z
FINXYZ:	.=.+6	;FINAL X,Y,Z VALUES
DRWANG:	.=.+12.	;TEMPORARY STORAGE FOR JT ANGLES
DRWTME:	.=.+2	;MOTION TIME

JTPAS1:	.=.+2	;"JOINTS" DATA, FIRST PASS THROUGH JOINTS?
JTTRAN:	.=.+2	;TRANS POINTER
INTTME:	.=.+2	;MOTION TIME
FANGLE:	.=.+12.	;FINAL JOINT ANGLES
DELANG:	.=.+12.	;CHANGE IN JOINT ANGLES

TTRANS:	.=.+24.	;TEMPORARY TRANSFORM
;VARIABLE STORAGE FOR "ARMSOL"

EXACTS:	.=.+2		;BITS OF JTS WITH NO EXACT SOLUTION

ARMFLG:	.=.+2		;CURRENT ARM CONFIGURATION

T111:	.=.+2		;TRANSFORM FOR JTS 1-3
T121:	.=.+2
T131:	.=.+2
T112:	.=.+2
T122:	.=.+2
T132:	.=.+2
T113:	.=.+2
T123:	.=.+2
T133:	.=.+2
T114:	.=.+2
T124:	.=.+2
T134:	.=.+2

T212:	.=.+2		;TRANSFORM FOR JTS 4-6
T222:	.=.+2
T232:	.=.+2
T213:	.=.+2
T223:	.=.+2
T233:	.=.+2
T214:	.=.+2
T224:	.=.+2
T234:	.=.+2

TX:	.=.+2		;X,Y,Z FOR END OF JOINT 3
TY:	.=.+2
TZS1:	.=.+2		;TZ-S1
TXTYS:	.=.+2		;TX**2+TY**2-S2**2-S3**2
	.=.+2
TX1Y1:	.=.+2		;TX*CT1+TY*ST1
T1323:	.=.+2		;T13*CT1+T23*ST1
STA2S4:	.=.+2		;ST3+(A2/S4)

STT1:	.=.+2		;SIN/COS THETA 1
CTT1:	.=.+2
STT2:	.=.+2		;SIN THETA 2
STT3:	.=.+2		;SIN/COS THETA 3
CTT3:	.=.+2
S23:	.=.+2		;SIN/COS (TH2 + TH3)
C23:	.=.+2
STT4:	.=.+2		;SIN/COS THETA 4 (ALMOST)
CTT4:	.=.+2
CTT5:	.=.+2		;COS THETA 5
CTT6:	.=.+2		;COS THETA 6
THETA4:	.=.+2
THETA5:	.=.+2
;END OF DATA SPACE AND BEGINNING OF PROGRAM SPACE

LOCK:	.=.+1	;PROGRAM CONSTANTS TRANSFERED TO RAM
UNLOCK:	.=.+1
K1:	.=.+2	;1
KM1:	.=.+2	;-1
K2:	.=.+2	;2
KM2:	.=.+2	;-2
K3:	.=.+2	;3
K5:	.=.+2	;5
KM6:	.=.+2	;-6
KM8:	.=.+2	;-8
KM9:	.=.+2	;-9
K10:	.=.+2	;10.
K14:	.=.+2	;14.
KM14:	.=.+2	;-14.
K45:	.=.+2	;45.
K45XX:	.=.+2	;45000
K64XX:	.=.+2	;64000


;THIS SHOULD ALWAYS BE THE LAST LABEL IN THE DATA SPACE. IT MARKS
;THE START OF THE FREE STORAGE AREA

FREEST=.	;START OF FREE STORAGE AREA. FREE STORAGE
		;ENDS AT WORD POINTED TO BY "HICORE".




;START OF PROGRAM SPACE

.=PSTART
	JMP	START	;START OF PROGRAM SPACE
	.WORD	FREEST	;STARTING ADDR OF FREE STORAGE AREA
HICORE:	.WORD	PSTART-2;HIGHEST USEABLE WORD IN DATA SPACE, END OF FREE
			;STORAGE.
	.WORD	ZAPSTR	;PTR TO VARIABLE DATA STORAGE AREA
	.WORD	ZAPEND	;END OF    "      "      "      "
	.WORD	FUNTAB	;PTR TO COMMAND HASH TABLE
	.WORD	CALIB	;PTR TO TABLES OF CALIBRATION DATA


;CONSTANTS TRANSFERED FROM ROM TO RAM FOR EIS INSTRUCTIONS

CONS:	.BYTE	KLOCK,KUNLOCK
	.WORD	1,-1,2,-2,3,5,-6,-8.,-9.,10.,14.,-14.,45.
	.WORD	45000,64000
CONE:
;DEFINITIONS FOR THE DATA STRUCTURES

MAXARG	==16.	;MAXIMUM NUMBER OF BYTES NEEDED TO STORE ARGUMENTS

;RELATIVE POINTERS FOR FUNCTION SYMBOL DATA BLOCK

FUNPTR	==0 	;PTR TO FUNCTION SUBR.
LINK	==2	;LINK TO NEXT BLOCK OF DATA
TYPBIT	==4	;TYPE BITS
NUMARG	==5	;NUMBER OF ARGUMENTS
SYMNME	==6	;ASC NAME, THREE WORDS
FUNARG	==14	;LIST OF FUNCTION ARGUMENTS

;RELATIVE POINTERS FOR LABELS

LABELS	==14	;PTR TO LABEL LIST CONTAINED IN PROGRAM SYMBOL BLOCK
LABEL	==4	;LABEL NAME CONTAINED IN LABEL DATA BLOCK

;DATA TYPE BITS

INTCON	==0	;INTEGER CONSTANT **SPECIAL CASE**
CMND	==1	;TOP LEVEL MONITOR COMMAND
MOTION	==2	;MOTION INSTRUCTION
EDITIN	==4 	;EDIT INSTRUCTION
TRANS	==10	;TRANSFORMATION
PROG	==20	;USER PROGRAM
CMPOPR	==40 	;COMPARISON OPERATOR
INTVAR	==100	;INTEGER VARIABLE
;ARGUMENT BYTE CODES

;THE BYTE CODES SPECIFYING THE ARGUMENTS ARE INTERPRETED AS FOLLOWS:  IF
;THE LSB IS SET THE ARGUMENT IS OPTIONAL OTHERWISE AN ERROR WILL BE
;INDICATED IF NO ARGUMENT IS FOUND.  THE MOST SIGNIFICANT BIT (200) IS USED
;TO INDICATE IF THE DECODING ROUTINE FOR THE ARGUMENT SAVES A VARIABLE.  IF
;THE 100 BIT IS CLEAR, THE REMAINING 5 BITS ARE USED AS AN INDEX INTO A
;TABLE OF DECODING AND PRINTING ROUTINES.  ELSE IF THE 100 BIT IS SET, THE
;5 BITS ARE USED AS A INDEP INTO A TABLE OF TOKEN WORD STRINGS AND THE
;"GTOKEN" AND "PTOKEN" DECODING AND PRINTING ROUTINES ARE USED.  THE ONLY
;RESTRICTION ON ARGUMENTS IS THAT IF A STRING IS AN ARGUMENT, IT MUST BE
;THE ONLY ARGUMENT.

OP 	=1	;OPTIONAL ARGUMENT
NV	=200	;NO VARIABLE SAVED
SR	=100+NV	;SEPARATOR STRING

;REGULAR ARGUMENTS

STRING	=0+OP	;STRING, SPECIAL CASE
DISARG	=2 	;DISTANCE
ANGARG	=4	;ANGLE
PRGARG	=6	;USER PROGRAM
TRNARG	=10	;TRANSFORM
TRNAR2	=12	;TRANSFORM OR TRANSFORM !
INTARG	=14	;INTEGER CONSTANT
HUNARG	=16	;INTEGER CONSTANT IN STEPS OF .01
VARARG	=20	;INTEGER VARIABLE
VARAR2	=22	;INTEGER VARIABLE BUT NOT A CONSTANT
ALWAYS	=24+OP	;ALWAYS
COMPAR	=26	;COMPARISON OPERATOR
LBLARG	=30	;INSTRUCTION STEP LABEL
AOPER	=32	;ARITHMETIC OPERATION

;TOKENS

COMMA	=0+SR+OP;COMMA CHARACTER
EQUAL	=2+SR	;EQUAL SIGN
INTO	=4+SR	;INTO
THEN	=6+SR	;THEN
BY	=10+SR	;BY



;TABLE OF ROUTINES FOR DECODING ARGUMENTS

ARGTAB:	.WORD	GETSTR,GETDIS,GETANG,GETPRG,GETTRN,GETTR2,GETINT
	.WORD	GETHUN,GETVAR,GETVA2,GETALW,GETCMP,GETLBL
	.WORD	GETAOP

;TABLE OF ROUTINES FOR CONVERTING ARGUMENTS TO ASC

PRTTAB:	.WORD	0     ,PTSDIS,PTSANG,PACNMS,PACNMS,PACNMS,PTSINT
	.WORD	PTSHUN,PTRVAR,PACNMS,PACNMS,PACNMS,PTSLBL
	.WORD	PTSAOP

;TABLE OF PTRS TO TOKEN STRINGS FOR SCANNING

TOKTBS:	.WORD	KCOMMA,KEQUAL,KINTO,KTHEN,KBY
;HASH TABLE AND SYMBOL DATA BLOCKS FOR COMMAND&EDIT INSTRUCTIONS

;HASH BUCKETS WITH POINTERS TO COMMAND SYMBOL BLOCKS

FUNTAB:	.WORD	BDEFPR,0     ,BFREE ,0
	.WORD	BHERE ,BEXEC ,BEDIT ,BCLEAR
	.WORD	BNOFLI,BINSER,BPOINT,BPROGS
	.WORD	BLISTP,BABOVE,BPUNCP,BDELAY
	.WORD	BPROCE,BSPEED,BPUNCT,BSKIP
	.WORD	BTERMI,BREADY,BGO   ,BMOVE
	.WORD	BSNGST,BBELOW,BTF   ,BWHERE
	.WORD	0     ,BGRASP,BPAUSE,0


;TOP LEVEL COMMANDS
	
BWHERE:	SYMBLK <WHERE >,WHERE,CMND,BOPENI,0
BFREE:	SYMBLK <FREE  >,FREE,CMND,BTYPE,0
BPOINT:	SYMBLK <POINT >,POINT,CMND,0,2,<TRNAR2,EQUAL+OP,TRNARG+OP>
BHERE:	SYMBLK <HERE  >,HERE,CMND,BSTATU,1,<TRNARG>
BDONE:	SYMBLK <DONE  >,DONE,CMND,0,0
BCLEAR:	SYMBLK <CLEAR >,CLEAR,CMND,0,0
BEXEC:	SYMBLK <EXEC  >,EXEC,CMND,BSWITC,3,<PRGARG+OP,COMMA,INTARG+OP,COMMA
		,INTARG+OP>
BPROCE:	SYMBLK <P     >,PROCED,CMND,BLISTT,0
BDEFPR:	SYMBLK <DEFPRO>,DEFPRO,CMND,BDEPART,1,<PRGARG>
BPROGS:	SYMBLK <PROGS >,PROGS,CMND,BFLIP,0
BSTATU:	SYMBLK <STATUS>,STATUS,CMND,BDELET,0
BSNGST:	SYMBLK <X     >,SNGSTP,CMND,BNNULL,0
BLISTT:	SYMBLK <LISTT >,LISTT,CMND,BPRINT,8.,<TRNARG+OP,COMMA,TRNARG+OP,COMMA
		,TRNARG+OP,COMMA,TRNARG+OP,COMMA,TRNARG+OP,COMMA,TRNARG+OP
		,COMMA,TRNARG+OP,COMMA,TRNARG+OP>
BPUNCT:	SYMBLK <PUNCHT>,PUNCHT,CMND,BOPEN,8.,<TRNARG+OP,COMMA,TRNARG+OP,COMMA
		,TRNARG+OP,COMMA,TRNARG+OP,COMMA,TRNARG+OP,COMMA,TRNARG+OP
		,COMMA,TRNARG+OP,COMMA,TRNARG+OP>
BLISTP:	SYMBLK <LISTP >,LISTP,CMND,BLAST,3,<PRGARG,COMMA,INTARG+OP,COMMA
		,INTARG+OP>
BPUNCP:	SYMBLK <PUNCHP>,PUNCHP,CMND,BDRAW,3,<PRGARG,COMMA,INTARG+OP,COMMA
		,INTARG+OP>
BTF:	SYMBLK <TF    >,TF,CMND,BDRIVE,7,<TRNARG,COMMA,DISARG,COMMA,DISARG
		,COMMA,DISARG,COMMA,ANGARG,COMMA,ANGARG,COMMA,ANGARG>

;SYMBOL DATA BLOCKS FOR EDIT INSTRUCTIONS

BEDIT:	SYMBLK <EDIT  >,EDIT,CMND,BSTOP,2,<PRGARG+OP,COMMA,INTARG+OP>
BTERMI:	SYMBLK <T     >,TERMIN,EDITIN,0,0
BSKIP:	SYMBLK <S     >,SKIP,EDITIN,BBNE,1,<INTARG>
BPRINT:	SYMBLK <P     >,PRINT,EDITIN,0,1,<INTARG+OP>
BINSER:	SYMBLK <I     >,INSERT,EDITIN,BPULSE,0
BDELET:	SYMBLK <D     >,DELETE,EDITIN,BLEFTY,1,<INTARG+OP>
BSWITC:	SYMBLK <E     >,SWITCH,EDITIN,0,2,<PRGARG,COMMA,INTARG+OP>
BLAST:	SYMBLK <L     >,LAST,EDITIN,BSET,0
;SYMBOL DATA BLOCKS FOR COMPARISON OPERATORS & MOTION INSTRUCTIONS

BDRAW:	SYMBLK <DRAW  >,DRAW,MOTION,BCOMMN,3,<DISARG+OP,COMMA,DISARG+OP
		,COMMA,DISARG+OP>
BGO:	SYMBLK <GO    >,GO,MOTION,BBEQ,1,<TRNAR2>
BMOVE:	SYMBLK <MOVE  >,MOVE,MOTION,BRIGHT,1,<TRNAR2>
BDEPAR:	SYMBLK <DEPART>,DEPART,MOTION,BGOSUB,1,<DISARG>
BAPPRO:	SYMBLK <APPRO >,APPRO,MOTION,BFINE,2,<TRNAR2,COMMA,DISARG>
BREADY:	SYMBLK <READY >READY,MOTION,BSETI,0
BREST:	SYMBLK <REST  >,REST,MOTION,BSHFT,0
BOPEN:	SYMBLK <OPEN  >,OPEN,MOTION,0,1,<DISARG>
BOPENI:	SYMBLK <OPENI >,OPENI,MOTION,BNULL,1,<DISARG>
BGRASP:	SYMBLK <GRASP >,GRASP,MOTION,BCOARS,1,<DISARG>
BDRIVE:	SYMBLK <DRIVE >,FDRIVE,MOTION,0,3,<INTARG,COMMA,ANGARG,COMMA,INTARG>
BPAUSE:	SYMBLK <PAUSE >,PAUSE,MOTION,BREST,1,<STRING>
BSTOP:	SYMBLK <STOP  >,FSTOP,MOTION,BINTOF,0
BCOMMN:	SYMBLK <COMMNT>,COMNT,MOTION,0,1,<STRING>
BTYPE:	SYMBLK <TYPE  >,FTYPE,MOTION,BAPPRO,1,<STRING>
BFLIP:	SYMBLK <FLIP  >,FLIP,MOTION,BTYPEI,0
BNOFLI:	SYMBLK <NOFLIP>,NOFLIP,MOTION,BINTON,0
BRIGHT:	SYMBLK <RIGHTY>,RIGHTY,MOTION,0,0
BLEFTY:	SYMBLK <LEFTY >,LEFTY,MOTION,BFHERE,0
BABOVE:	SYMBLK <ABOVE >,ABOVE,MOTION,0,0
BBELOW:	SYMBLK <BELOW >,BELOW,MOTION,BGOTO,0
BSPEED:	SYMBLK <SPEED >,SPEED,MOTION,BBLE,2,<VARARG,ALWAYS>
BCOARS:	SYMBLK <COARSE>,COARSE,MOTION,0,1,<ALWAYS>
BFINE:	SYMBLK <FINE  >,FINE,MOTION,0,1,<ALWAYS>
BINTOF:	SYMBLK <INTOFF>,INTOFF,MOTION,BDONE,0
BINTON:	SYMBLK <INTON >,INTON,MOTION,0,0
BPULSE:	SYMBLK <PULSE >,PULSE,MOTION,0,0
BDELAY:	SYMBLK <DELAY >,DELAY,MOTION,BIF,1,<HUNARG>
BGOSUB:	SYMBLK <GOSUB >,GOSUB,MOTION,BRETUR,1,<PRGARG>
BRETUR:	SYMBLK <RETURN>,RETURN,MOTION,BBLT,0
BSET:	SYMBLK <SET   >,SET,MOTION,BBGE,2,<TRNARG,EQUAL,TRNARG>
BFHERE:	SYMBLK <HERE  >,FHERE,MOTION,0,1,<TRNARG>
BSETI:	SYMBLK <SETI  >,SETII,MOTION,0,4,<VARAR2,EQUAL,VARARG,AOPER+OP,VARARG+OP>
BTYPEI:	SYMBLK <TYPEI >,TYPEI,MOTION,0,1,<VARARG>
BGOTO:	SYMBLK <GOTO  >,GOTO,MOTION,0,1,<LBLARG>
BNULL:	SYMBLK <NULL  >,NULL,MOTION,BBGT,1,<ALWAYS>
BNNULL:	SYMBLK <NONULL>,NONULL,MOTION,0,1,<ALWAYS>
BSHFT:	SYMBLK <SHIFT >,SHIFT,MOTION,0,4,<TRNARG,BY,DISARG+OP,COMMA,DISARG+OP
		,COMMA,DISARG+OP>
BIF:	SYMBLK <IF    >,IFI,MOTION,0,4,<VARARG,COMPAR,VARARG,THEN,LBLARG>

;SYMBOL DATA BLOCKS FOR COMPARISON OPERATORS

BBEQ:	SYMBLK <EQ    >,CHKEQ,CMPOPR,0,0
BBNE:	SYMBLK <NE    >,CHKNE,CMPOPR,0,0
BBGT:	SYMBLK <GT    >,CHKGT,CMPOPR,0,0
BBGE:	SYMBLK <GE    >,CHKGE,CMPOPR,0,0
BBLT:	SYMBLK <LT    >,CHKLT,CMPOPR,0,0
BBLE:	SYMBLK <LE    >,CHKLE,CMPOPR,0,0
;PROGRAM CONSTANTS AND REQUIRED SOURCE FILES

SMPTRN:	.WORD	0     ,-40000,     0 ;REASONABLE INITIAL ARM POSITION
      	.WORD	-40000,     0,     0
	.WORD	0     ,     0,-40000
	.WORD	-11207, 33136,  3747

RDYTRN:	.WORD	 31156,     0,-23547 ;READY POSITION
      	.WORD	0     ,-40000,     0
	.WORD	-23547,     0,-31156
	.WORD	-44006,-11320, 24507
RDYASS:	.WORD	25		     ;LEFTY,ABOVE,NOFLIP

RSTTRN:	.WORD	-11705,     0,-36336 ;REST POSITION
      	.WORD	0     ,-40000,     0
	.WORD	-36336,     0, 11705
	.WORD	-44565,-11162, 13712
RSTASS:	.WORD 	75		     ;LEFTY,BELOW,FLIP

	
;REQUIRED SOURCE FILES 

.INSRT FUNCTS.PAL
.INSRT RUN.PAL
.INSRT SUBR.PAL
.INSRT IO.PAL
.INSRT EDIT.PAL
.INSRT DRIVE.PAL
.INSRT ARITH.PAL
.INSRT ARMSOL.PAL
.INSRT EULER.PAL
.INSRT CALIB.PAL


PATCH=.		;START OF PATCH AREA

.IF2
	.INFO <FIRST UNUSED LOCATION = >,\PATCH
	FOO == <57776-PATCH>/2
	.INFO <NUMBER OF UNUSED WORDS IN OCTAL = >,\FOO
.ENDC


.END PSTART