A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk4_5 / rka / paroff / lp11.pa
1 /LP11 HANDLER
2
3 LPVERSION="B&77
4
5 *0
6
7 -1
8 DEVICE LP11;DEVICE LP;1040;LPT&177+4000;ZBLOCK 2
9
10 /LP HANDLER FOR RT-11 LINE PRINTER.
11 /The PDP-8 is connected to a RT-11 job via a seriell line.
12 /This handler simply starts the RT-11 program RECVLP on SY:
13 /which transfers all incomming characters to LP:.
14
15
16 / IOTs for communication interface:
17 DEVCOD= 31
18
19 VRSF= DEVCOD^10+6001
20 VRRB= DEVCOD^10+6006
21 VSF= DEVCOD^10+6011
22 VLS= DEVCOD^10+6016
23
24 FIXTAB
25
26
27 / special characters:
28 CTRLC= 3
29 TAB= 11
30 LF= 12
31 CR= 15
32 CTRLN= 16
33 CTRLZ= 32
34
35
36 *200
37
38 PLINK, 0000
39 CLA STL RAR / handler actually starts here
40 TAD I LPT / R/W BIT TO LINK L
41 AND LP7700 / I
42 CMA /TREAT 0 PG CNT AS 0 WD CNT N
43 DCA LPTWC /SAVE -(DBLWD COUNT+1) K
44 RDF /
45 TAD LPTCIF / M
46 DCA LPTXIT /SAVE CIF CDF RETURN FIELD U
47 TAD I LPT / S
48 AND LPT70 / T
49 TAD LPCDF0 /
50 DCA LPTCDF / N
51 ISZ LPT /POINT TO BUFFER O
52 TAD I LPT /GET BUFFER ADDRESS T
53 DCA LPTCA /SAVE BUFFER PTR
54 ISZ LPT /PT TO BLOCK # C
55 TAD I LPT /GET IT H
56 ISZ LPT /POINT TO ERROR RETURN G
57 LPTCDF, HLT / !
58 SNL
59 JMP LPTERR /CAN'T READ FROM LPT
60 SZA CLA
61 JMP LPT1
62
63
64 / Initialization - start RECVLP on '11
65
66 VLS /initialize
67 VRRB / communication interface
68 CLA
69 RDF
70 TAD LPCDF0
71 DCA RESFLD
72 LPCDF0, CDF 0
73 JMS TRATXT
74 "R
75 40
76 "R
77 "E
78 "C
79 "V
80 "L
81 "P
82 CR
83 00
84 RESFLD, HLT
85 JMP LPT1
86
87 \f/UNPACKING LOOP - USES A SHIFT REGISTER METHOD TO GET THE
88 /THIRD CHARACTER IN EACH DOUBLEWORD.
89
90 LPTLP, STL /GUARD BIT OF SHIFT REGISTER
91 LPROTL, RTL
92 RTL
93 SPA /DO WE HAVE 8 BITS SHIFTED IN?
94 JMP LPTELP
95 DCA LPTCDF /SAVE SHIFT REGISTER
96 TAD I LPTCA
97 JMS I PLINK /PRINT A CHAR
98 SZA
99 JMP ERR
100 TAD I LPTCA
101 ISZ LPTCA /BUMP INPUT POINTER
102 LP7400, 7400 /PROTECT ISZ
103 AND LP7400
104 CLL RAL
105 TAD LPTCDF /SHIFT HIGH 4 BITS INTO
106 JMP LPROTL /SHIFT REGISTER
107
108 LPTELP, JMS I PLINK /PRINT 3RD CHAR OF DOUBLEWORD
109 SZA
110 JMP ERR
111 LPT1, ISZ LPTWC
112 JMP LPTLP /GET 3 MORE CHARS
113 LPTCTZ, ISZ LPT /BUMP TO NORMAL RETURN
114 LPTXIT, HLT /RESTORE FIELDS
115 JMP I LPT /EXIT
116
117 LPTERR, STL CLA RAR /PUT 4000 IN AC
118 JMP LPTXIT /AND TAKE ERROR RETURN
119
120 LPTWC, 0
121 LPTCA, 0
122
123
124 TRATXT, 0
125 TAD I TRATXT /get character
126 ISZ TRATXT /point to next
127 SNA /character zero?
128 JMP I TRATXT /yes - return
129 JMS I PLINK /no - transfer it
130 SNA
131 JMP TRATXT+1
132
133
134 ERR, CLA CLL SNL
135 JMP LPTCTZ
136 TAD PLINK
137 TAD OFFSET
138 DCA PLINK
139 CLA IAC STL RAL /AC=CTRL/C
140 JMS I PLINK / send CTRL/C to abort job on '11
141 LP7700, CLA SMA /never skips
142 JMP LPTERR
143
144
145 LPT70, 70
146 LPTCIF, CDF CIF 0
147 OFFSET, VTYPE-LPTPCH
148
149 *376
150 LPT, LPVERSION /NORMAL ENTRY POINT
151 JMS PLINK
152 IFNZRO LPT-376 <ENTERR.QQQQ>
153 PAGE
154 \f
155 /CHAR PRINT ROUTINE
156
157 LPTPCH, 0
158 IAC
159 AND (177 /7 bit
160 SNA
161 JMP I LPTPCH /don't transfer RUBOUTs
162 TAD (-1 /restore character
163 DCA CHAR /save it
164 TAD CHAR
165 AND (7770
166 SNA CLA
167 JMP I LPTPCH /Null - CTRL/G
168 TAD CHAR
169 TAD (-CTRLZ
170 SNA
171 JMP EOF
172 SMA
173 JMP NOCTRL
174 TAD (CTRLZ-CTRLN
175 SMA CLA
176 JMP I LPTPCH
177
178 NOCTRL, ISZ COUNT2
179 JMP OUTB
180 CLA IAC
181 JMS VTYPE
182 JMS VREAD
183 JMS VREAD
184 CLA
185 TAD (CR
186 JMS VTYPE
187 JMS VREAD
188 JMS VREAD
189 OUTB, CLA
190 TAD CHAR
191 JMS VTYPE /transfer it
192 TAD (-TAB
193 TAD CHAR
194 SZA CLA
195 JMP OUTA
196 TAD (40
197 DCA CHAR
198 OUTA, JMS VREAD /read the echo
199 CIA
200 TAD CHAR /is it what we sent?
201 SZA CLA /yes
202 JMP LPERR /no - transfer error
203
204 /Test for End Of Line
205 TAD (-CR
206 TAD CHAR
207 SZA CLA
208 JMP I LPTPCH
209 TAD (-113
210 DCA COUNT2
211 JMS VREAD /wait for the LF
212 CLA
213 JMP I LPTPCH
214
215
216 EOF, TAD (CTRLZ
217 JMS VTYPE
218 JMS VREAD
219 JMS VREAD
220 JMS VREAD
221 JMS VREAD
222 JMS VREAD
223 CLA IAC CLL
224 JMP I LPTPCH
225 LPERR, IAC STL
226 JMP I LPTPCH
227
228
229
230 COUNT2, -113
231 CHAR, 0
232
233
234 /This routine reads one character from the serial line. The parity
235 /bit is stripped off. It also checks for CTRL/C from
236 /the terminal.
237
238 VREAD, 0000
239 CLA
240 VR1, JMS CINTER /abort if CTRL/C
241 VRSF
242 JMP VR1
243 VRRB /get the character
244 AND (177
245 JMP I VREAD /return
246
247
248 VTYPE, 0000
249 VWTF, JMS CINTER /abort if CTRL/C typed
250 VSF
251 JMP VWTF
252 VLS
253 CLA
254 JMP I VTYPE /return
255
256 CINTER, 0000
257 KSF /is there a character?
258 JMP I CINTER /no - return
259 DCA AC /yes - save Accu
260 KRB /read character
261 AND (177 /no parity
262 TAD (-CTRLC /is it CTRL/C?
263 SZA CLA /skip if it is
264 JMP NOCC /no - return
265 CLA IAC STL RAL /send CTRL/C
266 JMS VTYPE / to host - this aborts host job
267 CDF CIF 0 /exit
268 JMP I (7600 / to OS/8
269
270 NOCC, TAD AC /restore Accu
271 JMP I CINTER /return
272
273 AC, 0
274
275
276 $
277 \f\1a