A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk4_5 / rkb / paroff / lp86.pa
1 /LP86 HANDLER
2
3 LPVERSION="A&77
4
5 *0
6
7 -1
8 DEVICE LP86;DEVICE LP;1040;LPT&177+4000;ZBLOCK 2
9
10 /LP HANDLER FOR IBM PC XT/AT V24 AUX LINE.
11 / THE PDP-8 IS CONNECTED TO THE PC VIA V24 LINE.
12 / THIS HANDLER TRANSMITTS ALL DATA VIA THE V24 LINE.
13 / NO ANSWER BACK. THE HANDSHAKE IS DONE WITH CTRL S (XOFF) AND
14 / CTRL Q (XON).
15 / THE PC HAS TO FETCH ALL DATA FROM THE LINE. NO ERROR RETRIES
16 / OR CHECKS ARE MADE.
17 /
18 / REV 0.0 10-MAY-88 H.A.
19 / REV 0.1 11-MAY-88 H.A.
20 / REV 0.2 5-AUG-88 H.A. PHOENIX OUT OF WASTE PAPER
21
22 / IOTs for communication interface:
23 DEVCOD= 35
24
25 VRSF= DEVCOD^10+6001
26 VROB= DEVCOD^10+6004
27 VRRB= DEVCOD^10+6006
28 VSF= DEVCOD^10+6011
29 VLS= DEVCOD^10+6016
30
31 FIXTAB
32
33
34 / special characters:
35 XON= 21
36 XOFF= 23
37 CTRLC= 3
38 TAB= 11
39 LF= 12
40 CR= 15
41 CTRLN= 16
42 CTRLZ= 32
43
44
45 *200
46
47 PLINK, 0000
48 CLA STL RAR / handler actually starts here
49 TAD I LPT / R/W BIT TO LINK L
50 AND LP7700 / I
51 CMA /TREAT 0 PG CNT AS 0 WD CNT N
52 DCA LPTWC /SAVE -(DBLWD COUNT+1) K
53 RDF /
54 TAD LPTCIF / M
55 DCA LPTXIT /SAVE CIF CDF RETURN FIELD U
56 TAD I LPT / S
57 AND LPT70 / T
58 TAD LPCDF0 /
59 DCA LPTCDF / N
60 ISZ LPT /POINT TO BUFFER O
61 TAD I LPT /GET BUFFER ADDRESS T
62 DCA LPTCA /SAVE BUFFER PTR
63 ISZ LPT /PT TO BLOCK # C
64 TAD I LPT /GET IT H
65 ISZ LPT /POINT TO ERROR RETURN G
66 LPTCDF, HLT / !
67 SNL
68 JMP LPTERR /CAN'T READ FROM LPT
69 SZA CLA
70 JMP LPT1
71
72
73 / Initialization
74
75 VLS /initialize
76 CLA
77 RDF
78 TAD LPCDF0
79 DCA RESFLD
80 LPCDF0, CDF 0
81 JMP RESFLD / NO INIT SEQUENCE SEND TO HOST
82 "R
83 40
84 "R
85 "E
86 "C
87 "V
88 "L
89 "P
90 CR
91 00
92 RESFLD, HLT
93 JMP LPT1
94
95 \f/UNPACKING LOOP - USES A SHIFT REGISTER METHOD TO GET THE
96 /THIRD CHARACTER IN EACH DOUBLEWORD.
97
98 LPTLP, STL /GUARD BIT OF SHIFT REGISTER
99 LPROTL, RTL
100 RTL
101 SPA /DO WE HAVE 8 BITS SHIFTED IN?
102 JMP LPTELP
103 DCA LPTCDF /SAVE SHIFT REGISTER
104 TAD I LPTCA
105 JMS I PLINK /PRINT A CHAR
106 SZA
107 JMP ERR
108 TAD I LPTCA
109 ISZ LPTCA /BUMP INPUT POINTER
110 LP7400, 7400 /PROTECT ISZ
111 AND LP7400
112 CLL RAL
113 TAD LPTCDF /SHIFT HIGH 4 BITS INTO
114 JMP LPROTL /SHIFT REGISTER
115
116 LPTELP, JMS I PLINK /PRINT 3RD CHAR OF DOUBLEWORD
117 SZA
118 JMP ERR
119 LPT1, ISZ LPTWC
120 JMP LPTLP /GET 3 MORE CHARS
121 LPTCTZ, ISZ LPT /BUMP TO NORMAL RETURN
122 LPTXIT, HLT /RESTORE FIELDS
123 JMP I LPT /EXIT
124
125 LPTERR, STL CLA RAR /PUT 4000 IN AC
126 JMP LPTXIT /AND TAKE ERROR RETURN
127
128 LPTWC, 0
129 LPTCA, 0
130
131
132 TRATXT, 0
133 TAD I TRATXT /get character
134 ISZ TRATXT /point to next
135 SNA /character zero?
136 JMP I TRATXT /yes - return
137 JMS I PLINK /no - transfer it
138 SNA
139 JMP TRATXT+1
140
141
142 ERR, CLA CLL SNL
143 JMP LPTCTZ
144 TAD PLINK
145 TAD OFFSET
146 DCA PLINK
147 CLA IAC STL RAL /AC=CTRL/C
148 JMS I PLINK / send CTRL/C to abort job on '11
149 LP7700, CLA SMA /never skips
150 JMP LPTERR
151
152
153 LPT70, 70
154 LPTCIF, CDF CIF 0
155 OFFSET, VTYPE-LPTPCH
156
157 *376
158 LPT, LPVERSION /NORMAL ENTRY POINT
159 JMS PLINK
160 IFNZRO LPT-376 <ENTERR.QQQQ>
161 PAGE
162 \f
163 /OUTPUT ANY CHARACTER ONTO THE OUTPUT LINE (8 DATA BITS)
164 /CTRL Z IS TREATED AS END OF INPUT FILE.
165
166 LPTPCH, 0
167 DCA CHAR /save it
168 TAD CHAR
169 TAD (-CTRLZ
170 SNA
171 JMP EOF
172 JMS VREAD / CHECK XON/ XOFF
173 CLA
174 TAD CHAR
175 JMS VTYPE /transfer it
176 CLA
177 JMP I LPTPCH
178
179
180 EOF, TAD (CTRLZ
181 JMS VTYPE
182 CLA IAC CLL
183 JMP I LPTPCH
184 LPERR, IAC STL
185 JMP I LPTPCH
186
187
188
189 COUNT2, -113
190 CHAR, 0
191
192
193 /THIS ROUTINE CHECKS THE SERIELL INPUT LINE FOR XON/ XOFF
194 / IT 8 IS STRIPPED OFF. IT ALSO CHECKS FOR CTRL C FROM
195 /the terminal.
196
197 VREAD, 0000
198 CLA
199 VRSF
200 JMP I VREAD /NO INPUT, RETURN
201 CLA
202 VRRB /INPUT BYTE --> AC
203 AND (177
204 TAD (-XOFF /IS IT XOFF CHAR?
205 SZA CLA
206 JMP I VREAD /NO XOFF, RETURN
207 VR1, JMS CINTER /TEST FOR TERMINAL INTERRUPT
208 CLA
209 VROB /INPUT --> AC
210 AND (177 /STRIP OFF PARITY BIT
211 TAD (-XON /TEST FOR XON CHARACTER
212 SZA CLA
213 JMP VR1 /NO XON, WAIT
214 JMP I VREAD /XON, RETURN
215
216 VTYPE, 0000
217 VWTF, JMS CINTER /abort if CTRL/C typed
218 VSF
219 JMP VWTF
220 VLS
221 CLA
222 JMP I VTYPE /return
223
224 CINTER, 0000
225 KSF /is there a character?
226 JMP I CINTER /no - return
227 DCA AC /yes - save Accu
228 KRB /read character
229 AND (177 /no parity
230 TAD (-CTRLC /is it CTRL/C?
231 SZA CLA /skip if it is
232 JMP NOCC /no - return
233 CLA /SEND CTRL Z
234 TAD (CTRLZ /TO LINE
235 JMS VTYPE /TO HOST - THIS ABORTS HOST JOB
236 CDF CIF 0 /exit
237 JMP I (7600 / to OS/8
238
239 NOCC, TAD AC /restore Accu
240 JMP I CINTER /return
241
242 AC, 0
243
244
245 $
246 \f\1a