Trailing-Edge
-
PDP-10 Archives
-
tops10_704_monitoranf_bb-x140c-sb
-
10,7/anf10/dnplt.p11
There are 4 other files named dnplt.p11 in the archive. Click here to see a list.
.SBTTL DNPLT - PLOTTER ROUTINES 28 MAR 79
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED
; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1977,1978,1979,1980,1981,1984,1988.
;ALL RIGHTS RESERVED.
VRPLT=005 ;FILE EDIT NUMBER
.IF NE PLTN
DB.PEN=DB.IDR ;LOC IN DDB TO INDICATE PEN UP/DOWN MOVEMENT
DRESET=0
DDBGEN PLT,XY,1,2,<DS.OUT> ;MAKE A DEVICE BLOCK FOR THE PLT
; DB.DCS - DEVICE CONTROL STATUS BITS
; 000001 ;MASTER ERROR
PLTSER: MOV #PLTMML,DB.MML(J) ;LARGEST SIZE WE LIKE
MOVB #1,DB.DVV(J) ;CONTROLLER TYPE 1
JSR PC,DVCCFM ;SEND CONNECT CONFIRM
JSR PC,DVXDCS ;SEND STATUS TO THE 10
TST DB.DCS(J)
BNE 60$ ;IF TROUBLE WE ARE DONE
JSR PC,DVXDRQ ;SEND DATA REQUESTS
BIT #DS.ACT,@J ;IS PLOTTER ALREADY GOING?
BNE 50$ ;IF SO WE ARE DONE
TST DB.OBF(J) ;IS THERE OUTPUT ?
BEQ 64$ ;IF NOT JUST WAIT
MOVB #-5,DB.TIM(J) ;GIVE IT 4-5 SECONDS TO PLOT
BIS #DS.ACT,@J ;FLAG DEVICE IS ACTIVE
CLRB DB.PEN(J) ;CLEAR PEN MOVEMENT INDICATOR
BIS #XY.INE,@DB.HDW(J) ;ENABLE INTERRUPTS
50$: RTS PC
60$: MOVB #-5,DB.TIM(J) ;CHECK PLOTTER AGAIN IN A WHILE
64$: BIT #DS.DSC!DS.DIE,@J ;TIME TO QUIT ?
BEQ 50$
JMP DVCCFM ;SEND DISCONNECT MSG
PLTTIM: .IF DF ADL11
TSTB DB.PEN(J) ;CHECK FOR PEN MOVE WAIT
BEQ 5$ ;IF EQ NO WAIT
CLRB DB.PEN(J) ;CLEAR PEN WAIT INDICATOR
BIS #XY.INE,@DB.HDW(J) ;ENABLE INTERRUPTS
RTS PC ;AND RETURN TO SYSTEM TIMER
5$:
.ENDC ;IF DF ADL11
BIT #DS.ACT,@J ;WAS PLOTTER NOT READY ?
BEQ 20$
TWIDDLE @DB.HDW(J) ;COUNT TIMES THIS HAPPENS
BIC #DS.ACT,@J ;NO LONGER ACTIVE
BIC #XY.INE,@DB.HDW(J) ;DISABLE INTERRUPTS
BIS #1,DB.DCS(J) ;SET MASTER ERROR BIT ON (NO ERROR BIT ON HARDWARE REG
20$: JMP QUEDEV ;QUEUE UP THE DEVICE
DEVINT PLT,XY
PLTINT: .IF DF ADL11
TSTB DB.PEN(J) ;WAS LAST MOVE PEN UP/DOWN ?
BEQ 5$ ;IF EQ NO
BIC #XY.INE,@DB.HDW(J) ;DISABLE INTERRUPTS
MOVB #<JIFSEC*8.+99./100.+1>,DB.TIM(J) ;SET TIMER FOR 80 MSEC.
RESTORE <J> ;RESTORE J REGISTER
RTI ;RETURN TO INTERRUPTED CODE
5$:
.ENDC ;IF DF ADL11
SAVE <R0,R1>
10$: JSR PC,DVGBYT ;GET NEXT BYTE TO PLOT
BR 40$ ;WE GOT ONE
BR 30$ ;GOT MESSAGE TYPE
20$: BIC #XY.INE,@DB.HDW(J) ;DISABLE INTERRUPTS
BIC #DS.ACT,@J ;FLAG NOT ACTIVE
CLRB DB.TIM(J) ;RESET TIMER
JSR PC,QUEDEV
BR 90$
30$: DEC R0 ;DATA ?
BEQ 10$
DEC R0 ;DATA WITH EOR ?
BEQ 10$
.IF EQ DGUTS
TRAP
.IFF
CTYMSG NCL
35$: JSR PC,DVGBYT ;GET NEXT BYTE
BR 35$ ;EAT BAD MSG
BR 30$ ;TRY AGAIN WITH NEXT MSG
BR 20$ ;ALL DONE
.ENDC ;.IF EQ DGUTS
40$: ;HERE TO PROCESS DATA CHARACTER
BIC #^C77,R0 ;ONLY WANT LOW ORDER BITS
BEQ 10$ ;FLUSH NULLS
CMP R0,#17 ;CHECK FOR PEN UP, DOWN
BGT 46$
CMP R0,#13 ;CHECK FOR ILLEGAL CHARS
BGE 10$ ;BETWEEN 13 AND 17
MOVB PLTTAB-1(R0),R0 ;MOVE CONVERSION VALUE TO PLOTTER
45$: BMI 10$ ;IGNORE ILLEGAL CODES
MOVB #-2,DB.TIM(J) ;RESET TIMER
MOVB R0,XY.DAT ;PLOT DATA
90$: RESTORE <R1,R0,J>
RTI
46$: .IIF DF ADL11 COMB DB.PEN(J) ;SET PEN UP/DOWN MOVE INDICATOR
CMP R0,#20 ;CHECK FOR PEN DOWN
BNE 47$ ;NOT PEN DOWN
.IIF DF ADL11, MOV #12,R0 ;PEN DOWN CONVERSION CODE
BR 45$ ;PLOT VALUE
47$:
.IIF DF ADL11, MOV #11,R0 ;DEFAULT TO PEN UP
.IIF NDF ADL11, MOV #40,R0 ;DEFAULT TO PEN UP
BR 45$ ;PLOT VALUE
PLTTAB:
.IF NDF ADL11
.BYTE 10,4,-1,1,11,5,-1,2,12,6
.ENDC ;IF NDF ADL11
.IF DF ADL11
.BYTE 4,0,-1,2,3,1,-1,6,5,7
.ENDC ;IF DF ADL11
.ENDC;.IF NE PLTN