Cleanup more typos.
[retro-software/dec/tops10/v4.5.git] / src / pltser.mac
1 TITLE PLTSER - PLOTTER SERVICE ROUTINE\r
2 SUBTTL T. EGGERS/GBH/TNM    20 MAY 1969   V012\r
3 XP      VPLTSR,012              ;PUT VERSION NUMBER IN STORAGE MAP AND GLOB LISTING\r
4 \r
5 PLT=140         ;DEFINE DEVICE CODE\r
6 PLTUP=200000    ;LIFT PEN WHEN OUTPUT FINISHED\r
7 \r
8 ENTRY PLTSER\r
9 PLTSER:\r
10 \r
11 ;PLOTTER DEVICE DATA BLOCK\r
12 PLTDDB: SIXBIT /PLT/\r
13 PLTCHR: XWD HUNGST*12,^D36      ;XWD (HUNG TIMEOUT),(BUFFER SIZE)\r
14 PLTIOS: 0\r
15         PLTDSP                  ;DISPATCH TABLE ADDRESS\r
16         XWD DVOUT,14403         ;XWD (OUTPUT DEVICE),(BIN,IMAGE,TEXT LEGAL)\r
17         0\r
18         0\r
19 PLTPTR: 0                       ;OUTPUT BYTE POINTER\r
20 PLTADR: XWD PROG,0\r
21 PLTCTR: 0                       ;OUTPUT BYTE COUNTER\r
22 \r
23 EXTERNAL OUT,SETACT,PLTCHN,PLTCHL,IOSET,ADVBFE,ADRERR,CPOPJ1\r
24 EXTERNAL SETIOD,STOIOS,CLRACT,ILLINP,PLTSAV,IADRCK\r
25 \r
26 INTERN PLTDDB,PLTINT,PLTDSP\r
27 \f\r
28 ;DISPATCH TABLE\r
29 \r
30         JRST PLTINI             ;INITIALIZE\r
31         JRST PLTHNG             ;HUNG DEVICE ERROR\r
32 PLTDSP: JRST PLTREL             ;RELEASE\r
33         JRST PLTCLS             ;CLOSE\r
34         JRST PLTOUT             ;OUTPUT\r
35         JRST ILLINP             ;INPUT\r
36 \r
37 PLTCLS: TLO IOS,PLTUP           ;PLOTTER END FLAG SET\r
38         MOVEM IOS,PLTIOS\r
39         JRST OUT                ;DO AN OUTPUT\r
40 \r
41 PLTINI:\r
42 PLTHNG:\r
43 PLTREL: CONO PLT,0              ;DEASSIGN PI CHANNEL, CLEAR DONE\r
44         HLLZS PLTINT            ;REMOVE PLOTTER FROM DEVICE CHAIN\r
45         POPJ PDP,\r
46 \r
47 ;HERE BEGINS THE "OUTPUT" UUO\r
48 \r
49 PLTOUT: PUSHJ PDP,PLTSET        ;SETUP BYTE POINTER AND COUNTER\r
50          JRST ADRERR            ;ADDRESS ERR RETURN FROM PLTSET\r
51         PUSHJ PDP,SETACT        ;SET DEVICE ACTIVE BIT\r
52         TLO IOS,IO\r
53         CONO PLT,PLTCHN         ;ASSIGN PRIORITY CHANNEL\r
54         MOVSI TAC,10\r
55         HLRM TAC,PLTINT         ;PUT PLOTTER INTO DEVICE CHAIN\r
56         TLZN IOS,IOBEG          ;FIRST OUTPUT UUO?\r
57         JRST .+3                ;NO\r
58         MOVEI TAC,40            ;YES, START PLOTTER WITH PEN UP\r
59         TLZ IOS,PLTUP           ;INIT "CLOSE" BIT\r
60         MOVEM IOS,PLTIOS\r
61         DATAO PLT,TAC           ;START PLOTTER BY SENDING 0 OR 40\r
62         POPJ PDP,\r
63 \f;FROM HERE THROUGH PLTOFF IS INTERRUPT SERVICE\r
64 \r
65 PLTINT: CONSO PLT,10            ;PLOTTER DONE FLAG SET?\r
66         JRST .-1                ;NO, CHAIN TO NEXT DEVICE\r
67         SOSGE PLTCTR            ;OUTPUT CHARACTERS LEFT?\r
68         JRST PLT1               ;NO\r
69         MOVEM TAC,TACSAV#       ;YES, SAVE TAC\r
70         ILDB TAC,PLTPTR         ;GET NEXT CHARACTER\r
71         DATAO PLT,TAC           ;SEND CHARACTER\r
72         MOVE TAC,TACSAV#        ;RESTORE TAC\r
73         JEN @PLTCHL             ;DISMISS INTERRUPT\r
74 \r
75 PLT1:   JSR PLTSAV              ;SAVE AC'S. SET UP PUSH DOWN POINTER\r
76         MOVEI DEVDAT,PLTDDB\r
77         PUSHJ PDP,IOSET         ;SETS UP PROG AND IOS\r
78         PUSHJ PDP,ADVBFE        ;ADVANCE AND LOOK AT NEXT BUFFER\r
79          JRST PLTOFF            ;NO MORE DATA AVAILABLE\r
80         PUSHJ PDP,PLTSET        ;SETUP BYTE POINTER AND COUNTER\r
81          JRST PLTOFF            ;ADDRESS ERROR RET FROM PLTSET\r
82 PLT2:   TLZE IOS,IOW\r
83         PUSHJ PDP,SETIOD        ;LET JOB START AGAIN\r
84         JRST STOIOS             ;EVENTUALLY DISMISS INTERRUPT. IF ADVBFE\r
85                                 ;FOUND MORE DATA (IT SKIPPED), ANOTHER\r
86                                 ;INTERRUPT WILL IMMEDIATELY OCCUR BUT\r
87                                 ;IT WILL BE HANDLED WITHOUT GOING TO PLT1\r
88 \r
89 PLTOFF: CONO PLT,0              ;SHUT DOWN PLOTTER\r
90         HLLZS PLTINT            ;REMOVE PLOTTER FROM CHAIN\r
91         PUSHJ PDP,CLRACT\r
92         TLZE IOS,PLTUP          ;HAS THE "CLOSE" BEEN DONE?\r
93         DATAO PLT,[40]          ;YES, LIFT PEN\r
94         JRST PLT2\r
95 \f\r
96 ;THIS SUBROUTINE CALCULATES A BYTE POINTER AND A BYTE COUNTER FOR\r
97 ;THE BUFFER TO BE OUPUT, THE LAST WORD OF BUFFER IS ADR CHECKED TO BE IN USER AREA\r
98 ;       PUSHJ PDP,PLTSET\r
99 ;          RETURN 1     ;ADDRESS ERROR RETURN\r
100 ;          RETURN 2     ;GOOD RETURN\r
101 \r
102 PLTSET: MOVEI TAC,@PLTADR       ;GET ADDRESS OF CURRENT BUFFER\r
103         ADD TAC,[POINT 6,1,35]  ;CONVERT TO 6 BIT BYTE POINTER WITH\r
104                                 ;ADDRESS OF BUFFER WORD COUNT\r
105         TRNN IOS,16             ;IS THIS A TEST DATA MODE?\r
106         TLO TAC,(POINT 7,0,35)  ;YES, CONVERT TO 7 BIT BYTE POINTER\r
107         MOVEM TAC,PLTPTR        ;SAVE BYTE POINTER\r
108         HRRZ TAC,@TAC           ;GET BUFFER WORD COUNT\r
109         MOVEM TAC,PLTCTR        ;SAVE AS POSITIVE WORD COUNT\r
110         ADD TAC,PLTADR          ;CALCULATE (LAST ADR IN BUF)-1 (RELATIVE)\r
111         MOVEI TAC,1(TAC)        ;GET LAST ADR IN BUF (RELATIVE)\r
112         PUSHJ PDP,IADRCK        ;ADDRESS CHECK. OK?\r
113          POPJ PDP,              ;NO, OUTSIDE. RETURN WITH NO SKIP\r
114         MOVEI TAC,6             ;IMAGE OR BIN MODES - 6 BYTES/WORD\r
115         TRNN IOS,16             ;IS OUTPUT A TEXT MODE (0 OR 1)?\r
116         MOVEI TAC,5             ;YES, 5 BYTES/WORD\r
117         IMULM TAC,PLTCTR        ;CHANGE WORD COUNT TO BYTE COUNT\r
118         JRST CPOPJ1             ;RETURN WITH A SKIP\r
119 \r
120         LIT\r
121         VAR\r
122 PLTEND: END\r