A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rka / paroff / x80sp.pa
1 /PRINTER & PLOTTER HANDLER ADCOM X80SP
2 / PLOTTER HANDLER CONVERTS [ INTO DC3 AND ] INTO DC1
3 / X80SP HANDLES HT,VT,CR,LF,FF
4 / HANDLER SUPPORTS DC3 (XOFF) - DC1 (XON) COMMANDS FROM X80SP.
5 / SYSTEM TTY INPUT ETX (^C) CAUSES RETURN FROM THE HANDLER.
6 / ALL CONTROL CHARACTERS SEND TO THE HANDLER ARE DIRECTED TO THE X80SP.
7 / JOHANN J. ANDRES UNIVERSITY GOETTINGEN
8 /
9 / H.A. 10.DEC.1981 REV 0.0
10 / H.A. 4. APR.1982 REV 1.0 INSERTS [ --> DC3 AND ] --> DC1
11 / H.A. 5. OCT.1982 REV 1.1 LITTLE CHANGES SAVE 2 WORDS OF MEMORY
12 / H.A. 10.OCT.82 REV 1.2 REMOVES POSSIBLE LISF/LIRB TIMING PROBLEMS
13 / H.A. 26.OCT.82 REV 1.3 REMOVES FRTS PROBLEM: SOME CHARS WERE LOST
14 / H.A. 17.DEC.82 NON VALID STATUS INPUT CAUSE: HLT
15 / H.A. 5.JAN.83 REMOVES RANDOM DATA ERROR INSERTED ON 17.DEC.82
16 / H.A. 27.JAN.83 XON/XOFF CHARACTER CHANGED, '['&']' CONVERSION ROUTINE IMPROVED
17 /
18 X80VER="E&77 /VERSION 4
19 TTYDVC=03 / TTY
20 INDVC=31 / LPT INTERFACE DEVICE CODE
21 OUTDVC=32 / LPT
22 XON=021 / BUFFER EMPTY MESSAGE
23 XOFF=23 / BUFFER FULL MESSAGE
24 /
25 LSF=10^OUTDVC+6001 / SKIP ON LPT FLAG
26 LLS=10^OUTDVC+6006 / CLEAR FLAG & PRINT CHARACTER
27 LISF=10^INDVC+6001 / SKIP ON LPT FLAG
28 LIRB=10^INDVC+6006 / CLEAR FLAG & READ STATUS
29 KSF=10^TTYDVC+6001 / SKIP ON TTY FLAG
30 KRS=10^TTYDVC+6004 / OR TTY KBD CHARACTER INTO AC
31 / ACL=7701 / PAL8 DOESN'T KNOW HIS COMPUTER!
32 / MQL=7421
33 /
34 /
35 *0 / 8 WORD HANDLER BLOCK
36 -2 / TWO UNITS
37 DEVICE X80S
38 DEVICE LP1
39 1040
40 LPT&177 / STARTING ADR.
41 0;0
42 DEVICE X80S
43 DEVICE PL1
44 1040 / WRITE ONLY LINE PRINTER
45 PLT&177 / STARTING ADR.
46 0;0 / 2 WORDS MUST BE ZERO
47 /
48 /
49 *200 / START OF HANDLER
50 PLT, X80VER / ENTRY FOR PLOTTER HANDLER
51 DCA SAC
52 TAD PLT / HERE WE SAVE THE RETURN ADR.
53 DCA LPT / INTO THE LPT RETURN POINT
54 TAD TPLT / INSERT PLOTTER CALL CMD
55 DCA TYPE
56 JMP START
57 LPT, X80VER
58 DCA SAC / SAVE AC
59 TAD TLPT / INSERT LPT CALL CMD
60 DCA TYPE
61 TAD (23) / SWITCH OFF THE
62 JMS LPTPCH / PLOTTER MODE
63 START,/
64 TAD SAC / RESTORE AC
65 CLL CML CLA RAR
66 TAD I LPT /LINK GOES ON HERE. IF NOT READ WAS REQUESTED
67 AND LP7700
68 CMA
69 DCA LPTWC
70 LPT214, RDF / FF CONSTANT
71 TAD LPTCIF
72 DCA LPTXIT /SAVE CALLING FIELD IN RETURN SEQUENCE
73 TAD I LPT
74 AND LPT70
75 TAD LPCDF0
76 DCA LPTCDF /GET BUFFER FIELD
77 ISZ LPT
78 TAD I LPT
79 DCA LPTCA /LPTCA GETS BUFFER ADDRESS
80 ISZ LPT
81 TAD I LPT
82 LPTCDF, HLT
83 ISZ LPT
84 SNL /IF LINK NOT SET,GIVE ERROR
85 JMP LPTERR
86 SZA CLA / INSERT FF IN FRONT OF THE FIRST DATA BLOCK TO PRINT
87 JMP LPT177
88 TAD LPT214 / FF --> AC
89 JMP LPTKLG
90
91 \f/NOW PICK UP THE CHARACTERS, UNPACK THEM AND PRINT.
92 /
93 / LOOP TO PICK UP THE CHARACTERS
94 /
95 LPTLP, CLA
96 TAD I LPTCA
97 JMS LPTPCH
98 TAD I LPTCA
99 AND LP7400
100 DCA LPTCDF
101 ISZ LPTCA
102 LP7400, 7400
103 TAD I LPTCA
104 JMS LPTPCH
105 TAD I LPTCA
106 AND LP7400
107 CLL RTR
108 LPTLF, RTR
109 TAD LPTCDF
110 RTR
111 RTR
112 ISZ LPTCA
113 NOP /PROTECT ISZ
114 LPTKLG, JMS LPTPCH
115 LPT177, 177
116 ISZ LPTWC
117 JMP LPTLP
118 LPRTRN, ISZ LPT
119 LPTXIT, HLT
120 JMP I LPT
121 LPTWC, 0
122 LPTCA, 0
123 /
124 LPTERR, CLA CLL CML RAR / FATAL ERROR RETURN
125 JMP LPTXIT / HOME TO MAM
126 /
127 /
128 / HERE WE PRINT THE CHARACTERS
129 /
130 LPTPCH, 0
131 /
132 AND LPT177 / WE TRUNCATE TO SEVEN BITS CHARACTER
133 TYPE, 0 / CHANGED AT EXECUTION TIME SEE TPLT & TLPT
134 TAD (-135)
135 SNA / ']' --> DC3
136 TAD (23-135)
137 TAD (135-133)
138 SNA / '[' --> DC1
139 TAD (21-133)
140 TAD (133-32)
141 SNA / ^Z (SUB) TREAT AS END OF FILE
142 JMP LPRTRN
143 TAD (32)
144 L4,/
145 LLS / CLEAR FLAG LOAD CHARACTER & PRINT
146 LSF / IF PRINTER DONE FLAG SET, THEN WE CONTINUE
147 JMP .-1 / ELSE WE WAIT FOR DONE FLAG
148 LP7600, 7600 / CLA
149 TAD LP7600 / THIS IS TO GET A NEGATIVE NUMBER
150
151 KRS / OR TTY KBD INTO AC
152 TAD LPT175 / TEST FOR ETX (^C)
153 SNA CLA / IF NO ETX THEN GO AND WAIT FOR LP FLAG
154 KSF / ETX ENTERED, TTY KBD ACTIVE THEN JMP INTO MONITOR
155 JMP LPISF / TEST INPUT FROM PRINTER
156 LPTCIF, CDF CIF 0
157 JMP I LP7600
158 LPISF,
159 LIRB / READ ACTUAL LPT STATUS WORD
160 DCA LPOLD / SAVE THE ACTUAL STATUS WORD
161 TAD LPOLD / RESTORE STATUS --> AC
162 AND LPT177 / MASK OUT 7 BITS
163 TAD LPM23 / TEST DC3 (^S)
164 SNA
165 JMP LP7600 / DC3 ENTERED WAIT FOR DC1
166 TAD LPOFON / TEST FOR DC1 (^Q)
167 SNA CLA
168 JMP I LPTPCH / DC1 OR MEANINGLESS INPUT, SO WE CONTINUE PRINTING
169 CLA
170 JMP I LPTPCH
171 /
172 /
173 TLPT, JMP L4 / LINE PRINTER HANDLER
174 TPLT, NOP / SAVE AC
175 /
176 SAC, 0 / ON ENTRY WE SAVE THE AC
177 /
178 LP7700, 7700
179 LPT70, 70
180 LP21, XON
181 LP23, XOFF
182 LPOLD, XON
183 LPM23, -XOFF
184 LPOFON, XOFF-XON
185 LPT175, 175
186 LPCDF0, CDF 0
187 /
188 $$
189 \1a