Cleanup of typos.
[retro-software/dec/tops10/v1.19.git] / src / lptser.mac
1 TITLE LPTSER - LINE PRINTER SERVICE ROUTINE\r
2 SUBTTL 8-4-65\r
3 INTERNAL LPTINT,LPTINI\r
4 EXTERNAL LPTCHN, LPTCHL, LPTRET,  OUT, WAIT1, LPTSAV, IOSET\r
5 EXTERNAL ADVBFE,  SETIOD,ILLINP,LPTCHB,LPTCLB\r
6 \r
7 ;DEVICE DATA BLOCK LINKAGE\r
8 EXTERNAL LPTDAT,LPTCHR,LPTIOS,LPTSER,LPTMOD,LPTBUF,LPTPTR\r
9 EXTERNAL LPTADR,LPTSV1\r
10 ENTRY LPTDSP\r
11 \f\r
12 \r
13 ,LPT PARAMETER ASSIGNMENTS\r
14 \r
15 ,   LPT CONTROL REGISTER\r
16           LPTCLR=2000           ;CLEAR BUFFER\r
17           LPTDON=100            ;DONE FLAG\r
18           LPTERR=400            ;ERROR FLAG\r
19           LPTLOV=1000           ;LINE OVERFLOW\r
20 \r
21 ,   SPECIAL IO STATUS WORD ASSIGNMENTS\r
22           LPTADV=100000\r
23 \r
24 REPEAT 0,<\r
25 ,   LPT DATABLOCK\r
26 \r
27 LPTDAT:   SIXBIT .LPT.\r
28 LPTCHR:   32\r
29 LPTIOS:   0\r
30 LPTSER:   EXP LPTDSP\r
31 LPTMOD:   XWD 0,3\r
32  0\r
33 LPTBUF:   0\r
34 LPTPTR:   0\r
35 LPTADR:   XWD PROG,0\r
36 LPTSV1:   0\r
37 >\r
38 \r
39 ,  LPT SERVICE DISPATCH TABLE\r
40 \r
41 LPTDSP:   JRST LPTINI           ;RELEASE\r
42           JRST LPTCLS           ;CLOSE\r
43           JRST LPTOUT           ;OUTPUT\r
44           JRST ILLINP                           ;INPUT\r
45 \r
46 LPTINI:   CONO LPT,LPTCLR       ;LPT INITIALIZE\r
47           HLLZS LPTINT\r
48           POPJ PDP,\r
49 \f\r
50 \r
51 LPTCLS:   PUSHJ PDP,OUT         ;PRINT REMAINING BUFFERS\r
52           PUSHJ PDP, WAIT1      ;WAIT FOR IOACT=0\r
53           DATAO LPT,LPTTOP      ;PRINT CARRAGE RETURN, FORM FEED\r
54           POPJ PDP,             ;CLOSE RETURN\r
55 \r
56 LPTOUT:   TRO IOS,IOACT         ;IOACT=1\r
57           TLZ IOS,IODISC        ;IODISC:=0\r
58           TLO IOS,IO            ;IO:=1\r
59           TLNE IOS,IOBEG        ;VIRGIN DEVICE? IOBEG:=0\r
60           JRST LPTBEG           ;YES\r
61           PUSHJ PDP,LPTSET\r
62           MOVEM IOS,LPTIOS      ;C(LPTIOS):=C(IOS)\r
63           MOVEI TAC,LPTDON\r
64           JRST LPTBG1\r
65 \r
66 LPTBEG:   TLO IOS,IODISC\r
67           MOVEM IOS,LPTIOS      ;C(LPTIOS):=C(IOS)\r
68           PUSHJ PDP,LPTSET\r
69           MOVEI TAC,LPTCLR\r
70 LPTBG1:   MOVEI TAC1,LPTLOV+LPTERR+LPTDON\r
71           HRRM TAC1,LPTINT\r
72           CONO LPT, LPTCHB(TAC)         ;CLEAR BUFFER AND ASSIGN PI C\r
73           POPJ PDP,             ;RETURN\r
74 \f\r
75 \r
76 \r
77 , LINE PRINTER INTERRUPT SERVICE\r
78 \r
79 LPTINT:   CONSO LPT,LPTLOV+LPTERR+LPTDON;LINE OVERFLOW, ERROR OR DONE\r
80           JRST LPTINT           ;IF LPT IS IN FLAG LIST, GO TO ERROR, E\r
81           CONSZ LPT,70\r
82           CONSO LPT,LPTDON\r
83           JRST LPTERI                   ;YES\r
84 LPTIN1:   SKIPGE LPTIOS         ;IODISC=1?\r
85           JRST LPTDSC                   ;YES\r
86           BLKO LPT,LPTPTR       ;PRINT\r
87           SKIPA                 ;BUFFER EMPTY\r
88           JEN @LPTCHL                   ;DISMISS INTERRUPT AND RETURN\r
89           MOVEM TAC,LPTSV1      ;SAVE TAC\r
90           HRLZI TAC,IODISC      ;IODISC:=1\r
91           IORM TAC,LPTIOS\r
92 LPTERX:   MOVE TAC,LPTSV1       ;RESTORE TAC\r
93           JEN @LPTCHL                   ;DISMISS INTERRUPT AND RETURN\r
94 \r
95 LPTDSC:   JSR LPTSAV                    ;SAVE ACCUMULATORS AND ESTABL\r
96           MOVEI DEVDAT,LPTDAT  ;DEVDAT:=LPTDAT\r
97           PUSHJ PDP,IOSET       ;PROG:=C(JBTADR18-35),ITEM:=C(DEVPTR)\r
98           MOVE IOS,LPTIOS\r
99           TLZE IOS,IOBEG\r
100           JRST LPTBG                    ;PUT OUT CR-LF\r
101           PUSHJ PDP,ADVBFE      ;ADVANCE BUFFER\r
102           JRST      LPTOFF      ;NEXT BUFFER EMPTY\r
103           TRNE IOS,IOCON        ;CONTINUOUS? (IOCON=0?)\r
104           JRST LPTOFF           ;NO\r
105           TLZ IOS,IODISC\r
106           PUSHJ PDP,LPTSET      ;SET LPTPTR\r
107 \r
108 LPTINX:   TLZE IOS,IOW          ;IN A WAIT? IOW:=0\r
109           PUSHJ PDP,SETIOD      ;YES.  IOWS:=1\r
110 LPTXIT:   MOVEM IOS,LPTIOS      ;C(LPTIOS):=C(IOS)\r
111           JRST LPTRET                     ;RESTORE ACCUMULATORS AND DIS\r
112 \r
113 LPTOFF:   TRZ IOS,IOACT\r
114           CONO LPT,0\r
115           HLLZS LPTINT          ;TURN LPT OFF\r
116           JRST LPTINX\r
117 \r
118 LPTBG:    DATAO LPT,LPTTOP      ;SEND OUT CR-FF\r
119           TLZ IOS,IODISC        ;WHEN IODISC=1\r
120           JRST LPTXIT\r
121 \f\r
122 \r
123 ;HERE ON EITHER OVERFLOW OR ERROR(OFFLINE) OR ERROR CHANNEL\r
124 ;NOT ASSIGNED.\r
125 \r
126 LPTERI:   MOVEM TAC,LPTSV1      ;SAVE TAC\r
127           CONSO LPT,LPTLOV      ;LINE OVERFLOW?\r
128           JRST LPTER1                   ;NO\r
129           MOVN TAC,[EXP 100001]         ;YES, DECREMENT POINTER\r
130           ADDM TAC,LPTPTR\r
131           DATAO LPT,[EXP 15B6+12B13]    ;PRINT CARRIAGE RETURN, LINE\r
132           JRST LPTERX\r
133 \r
134 LPTER1:   CONSO LPT,70          ;ERROR INTERRUPT ASSIGNED?\r
135           JRST LPTER2           ;NO\r
136           CONO LPT,LPTCLB       ;YES, DEASSIGN IT,SET BUSY,CLEAR REST\r
137           MOVEI TAC,LPTDON      ;ENABLE FOR DONE FLAG ONLY\r
138 LPTERA:   HRRM TAC,LPTINT\r
139           JRST LPTERX\r
140 \r
141 LPTER2:   CONI LPT,TAC\r
142           ANDI TAC,300\r
143           CONO LPT,LPTCHB(TAC)\r
144           MOVEI TAC,LPTDON+LPTERR+LPTLOV\r
145           HRRM TAC,LPTINT\r
146           MOVE TAC,LPTSV1\r
147           JRST LPTIN1\r
148 LPTTOP:   EXP 15B6+14B13        ;CARRIAGE RETURN, FORM FEED\r
149 \f\r
150 \r
151 ,SET UP PRINTER COUNTER AND POINTER\r
152 \r
153 LPTSET:   MOVEI TAC,@LPTADR     ;LPTPTR:=-(WORD COUNT+1), BUFFER ADDRES\r
154           MOVN TAC1,1(TAC)\r
155           HRL TAC,TAC1\r
156           AOJLE TAC,.+2         ;C(LPTPTR0-17)<0?\r
157           HRROI TAC,LPTNUL-1\r
158           MOVEM TAC,LPTPTR\r
159           POPJ PDP,             ;RETURN\r
160 \r
161 LPTNUL:   0\r
162 \r
163           END,\r