Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-12 - 43,50547/ptci.mac
There is 1 other file named ptci.mac in the archive. Click here to see a list.
TITLE	PTCI - Interface to PTC6

	S1=1
	S2=2
	T1=3
	T2=4
	T3=5
	T4=6
	J=14
	L=16
	P=17

	TTY=14
	CR=15
	SEARCH	UUOSYM

	ENTRY	PLOTS	;Initialize plotter
	ENTRY	PLOT	;Move the pen, CALL PLOT(X,Y,999) to end
	ENTRY	NEWPEN	;Change pen color
	ENTRY	PAUSEP	;Sleep for a while

PLOTS::	SETZM	XPOS
	SETZM	YPOS
	SETZM	XMAX
	MOVEI	S1,1
	MOVEM	S1,OLDCOL	;Using pen #1
	INIT	TTY,IO.SUP	;Turn off echo
	 SIXBIT	/TTY/
         0,,0
          HALT
	MOVEI	T2,TTY		;I/O channel number
	IONDX.	T2,		;Get UDX
	  HALT
	MOVEI	T1,.TONFC+.TOSET;Change CRLF setting
	MOVEI	T3,1		; to no free ones
	MOVE	S1,[3,,T1]
	TRMOP.	S1,		;SET TTY NO CRLF
	  JFCL

	MOVEI	T1,0		;Use CRLF handshaking
	MOVEM	T1,HANDSH
	MOVEI	J,J$$BEG
	PUSHJ	P,PTCINI##	;Init the controller
	JRST	PTCMV1		;Output the init string




PAUSEP::MOVE	T1,@0(L)	;Get number of seconds
	SLEEP	T1,
	POPJ	P,
PLOT::	MOVE	T3,@2(L)
	CAIN	T3,^D999
	 JRST	PLOT99		;Stop on CALL PLOT(X,Y,999)

	MOVE	T1,@0(L)
	FMPRI	T1,(400.0)	;400 steps per inch
	FIX	T1,T1		;Position in increments
	CAML	T1,XMAX		;Highest seen?
	 MOVEM	T1,XMAX		;Yes
	SUB	T1,XPOS
	ADDM	T1,XPOS

	MOVE	T2,@1(L)
	FMPRI	T2,(400.0)
	FIX	T2,T2
	SUB	T2,YPOS
	ADDM	T2,YPOS

PTCMV:	MOVEI	J,J$$BEG
	PUSHJ	P,PTCMOV##	;Call conversion routine
	JUMPE	T1,CPOPJ	;Return if buffer not ready
PTCMV1:	SETSTS	TTY,IO.SUP  ;*HACK* Make darn sure echo is OFF!
	OUTSTR	(T1)		;Output command to PTC-6
	SKIPE	HANDSH		;Nothing more if using XON/XOFF
	 POPJ	P,	
	OUTSTR	[ASCIZ /
{Delay /]
	IDIVI	S1,^D1500*4	;Increments per second
	PUSHJ	P,OUTDEC	;Type S1 in decimal
	OUTSTR	[ASCIZ / seconds}/]

GETRSP:	INCHRW	T2
	CAIN	T2,"2"
BUFERR:: HALT	.		;Buffer length error
	CAIE	T2,CR		;Wait for CR at end of response
	 JRST	GETRSP
	INCHRW	T2		;Get LF
CPOPJ:	POPJ	P,


OUTDEC:	IDIVI	S1,^D10
	HRLM	S2,(P)
	SKIPE	S1
	 PUSHJ	P,OUTDEC
	HLRZ	S1,(P)
	ADDI	S1,"0"
	OUTCHR	S1
	POPJ	P,
;Finish up with plotter

PLOT99:	MOVEI	S2,1		;Reset to
	PUSHJ	P,NEWPN1	;Blue pen

	MOVE	T1,XMAX		;Highest X position
	SUB	T1,XPOS
	MOVN	T2,YPOS		;Move to Y=0
	MOVEI	T3,3		;Raise the pen
	MOVEI	J,J$$BEG
	PUSHJ	P,PTCMOV##
	SKIPE	T1
	 OUTSTR	(T1)

	MOVEI	J,J$$BEG
	PUSHJ	P,PTCOUT##	;Dump last buffer
	PUSHJ	P,PTCMV1	;Wait for CR
	MOVEI	J,J$$BEG
	PUSHJ	P,PTCFIN##	;Finish up
	OUTSTR	(T1)		;Output but don't wait

	RELEAS	TTY,		;Restore echo
	POPJ	P,

;Change pens

NEWPEN::MOVE	S2,@0(L)	;Get argument
NEWPN1:	PUSH	P,S2

	MOVEI	J,J$$BEG
	PUSHJ	P,PTCPEN##	;Change pen color

	POP	P,T1		;Get arg again
	MOVE	T2,T1		;Copy new pen number
	SUB	T2,OLDCOL	;Difference in pen numbers
	MOVEM	T1,OLDCOL	;Set new color
	JUMPE	T2,CPOPJ	;No shift if same pen
	MOVEI	T1,0		;No X offset
	IMULI	T2,^D400	;400 per inch
	MOVEI	T3,3		;Pen up
	JRST	PTCMV		;Go there

%OUTST::OUTSTR	(1)
	POPJ	P,

HANDSH:	0
XPOS:	0
YPOS:	0
XMAX:	0
OLDCOL:	1
J$$BEG:	BLOCK	1000
J$$END==:2


	END