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