Commit | Line | Data |
---|---|---|
81e70d48 PH |
1 | /17 SUPER TTY HANDLER FOR OS/8\r |
2 | /\r | |
3 | /\r | |
4 | /\r | |
5 | /\r | |
6 | /\r | |
7 | /\r | |
8 | /\r | |
9 | /\r | |
10 | /\r | |
11 | /COPYRIGHT (C) 1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION\r | |
12 | /\r | |
13 | /\r | |
14 | /\r | |
15 | /\r | |
16 | /\r | |
17 | /\r | |
18 | /\r | |
19 | /\r | |
20 | /\r | |
21 | /\r | |
22 | /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE\r | |
23 | /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT\r | |
24 | /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY\r | |
25 | /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.\r | |
26 | /\r | |
27 | /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER\r | |
28 | /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED\r | |
29 | /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH\r | |
30 | /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.\r | |
31 | /\r | |
32 | /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE\r | |
33 | /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY\r | |
34 | /DIGITAL.\r | |
35 | /\r | |
36 | /\r | |
37 | /\r | |
38 | /\r | |
39 | /\r | |
40 | /\r | |
41 | /\r | |
42 | /\r | |
43 | /\r | |
44 | /\r | |
45 | \r | |
46 | /S.W.,S.R.,H.J.,R.L.,S.R.\r | |
47 | \r | |
48 | *0\r | |
49 | \r | |
50 | -1\r | |
51 | DEVICE KL8E;DEVICE TTY;0;TTY&177+4000;ZBLOCK 2\r | |
52 | \r | |
53 | /TWO-PAGE TELETYPE HANDLER FOR OS/8 V3.\r | |
54 | /ON INPUT, RECOGNIZES ^Z, ^C, ^U, RUBOUT\r | |
55 | /^Z MEANS END OF INPUT, INSERT ^Z IN BUFFER,\r | |
56 | / PAD WITH ZEROES, AND ECHO "^Z"\r | |
57 | /^C MEANS ABORT JOB, RETURN TO OS/8 VIA LOC 7600 TO SAVE CORE AND PRINT "^C"\r | |
58 | /^U MEANS DELETE THE LAST LINE, ALLOW OPERATOR TO RETYPE\r | |
59 | / (LINE STARTS AT BEGIN OF BUFFER AND IS TERMINATED BY A CR)\r | |
60 | / A CR GETS ENTERED INTO BUFFER, CAUSES A LF TO ALSO ECHO\r | |
61 | / AND GET ENTERED INTO BUFFER, BUFFER IS THEN PADDED WITH NULLS.\r | |
62 | / CONVERTS LC TO UC\r | |
63 | \r | |
64 | /ON OUTPUT RECOGNIZES ^C, ^O, ^S, ^Q FROM KEYBOARD\r | |
65 | /^C CAUSES JOB TO ABORT, RETURN TO OS/8 VIA LOCATION 7600\r | |
66 | / TO SAVE CORE AND PRINT "^C"\r | |
67 | /^O CAUSES ECHOING BY THE HANDLER TO CEASE\r | |
68 | / TYPING ANY OTHER CHARACTER RESUMES ECHOING.\r | |
69 | /^S CAUSES THE HANDLER TO STOP SENDING TO TERMINAL\r | |
70 | /^Q RESUMES HANDLER SENDING\r | |
71 | / ^S AND ^Q ARE IGNORED IN OTHER CASES\r | |
72 | \r | |
73 | /WHENEVER PRINTING CHARACTERS (EITHER ON OUTPUT OR WHEN ECHOING),\r | |
74 | / IGNORES NULLS\r | |
75 | / FLAGS LC WITH AN APOSTROPHE\r | |
76 | / HANDLES TABS CORRECTLY (SEVERAL WAYS)\r | |
77 | / PRINTS ESCAPE AS $\r | |
78 | / DELAYS 16 MS AFTER LINEFEEDS\r | |
79 | / PRINTS CONTROL CHARACTERS AS "^K"\r | |
80 | \r | |
81 | /DOES AUTOMATIC CR/LF AT END OF LINE WIDTH.\r | |
82 | \r | |
83 | /MAINTENANCE RELEASE CHANGES:\r | |
84 | \r | |
85 | /1. ADDED KCC FOR NON-CONSOLE TELETYPES\r | |
86 | \r | |
87 | /V3D CHANGES: (VERSION E)\r | |
88 | \r | |
89 | /1. ADDED DELAY OPTION FOR VT78\r | |
90 | /2. ADDED SCOPE RUBOUTS\r | |
91 | /3. CHANGED VT78 DEFAULTS\r | |
92 | /4. REARRANGED CODE FOR SET TTY ESC AND ARROW\r | |
93 | \f INDVC=03\r | |
94 | OUTDVC=04\r | |
95 | \r | |
96 | KSF=10^INDVC+6001\r | |
97 | KCC=10^INDVC+6002\r | |
98 | KRS=10^INDVC+6004\r | |
99 | KRB=KCC KRS\r | |
100 | TSF=10^OUTDVC+6001\r | |
101 | TCF=10^OUTDVC+6002\r | |
102 | TPC=10^OUTDVC+6004\r | |
103 | TLS=TCF TPC\r | |
104 | \r | |
105 | TTYVERSION="E&77\r | |
106 | \f/BUILD YOUR OWN TELETYPE HANDLER:\r | |
107 | \r | |
108 | /THIS SOURCE HAS MUMBLE LOCATIONS LEFT.\r | |
109 | \r | |
110 | /THE FOLLOWING CONDITIONALS ALLOW YOU TO INCLUDE OPTIONAL FEATURES.\r | |
111 | /YOU MAY INCLUDE AS MANY OR AS FEW AS YOU DESIRE PROVIDED THERE\r | |
112 | /IS ROOM LEFT.\r | |
113 | \r | |
114 | /CONDITIONAL LOCATIONS LOCATIONS INCLUDED\r | |
115 | /VARIABLE PAGE 1 PAGE 2 FEATURES\r | |
116 | \r | |
117 | / DELAY 0 7 DELAY AFTER GIVEN CHAR\r | |
118 | / CTRL 0 3 PRINT CONTROL CHARS AS ^K\r | |
119 | / RUB 0 0 PRINT CHAR RUBBED OUT ON RUBOUTS\r | |
120 | / SIMTAB 0 10 SIMULATE TABS AS SPACES\r | |
121 | / SLOTAB 0 6 PUT OUT 2 RUBOUTS AFTER A TAB\r | |
122 | / ESC 0 10 PRINT ESCAPE AS $\r | |
123 | / FLAGLC 0 12 FLAG LOWER CASE CHARS ON OUTPUT\r | |
124 | / CNVLC 0 7 CONVERT LOWER CASE ON INPUT TO UPPER CASE\r | |
125 | / ALTMOD 0 11 CONVERT ALTMODES (175,176) TO ESCAPE (33)\r | |
126 | / PAUS 0 20 PAUSE BETWEEN PAGES\r | |
127 | / FREE LOCS: 2 33\r | |
128 | \r | |
129 | VT78=1 /SET TO 0 TO ALLOW OTHER PARAMETERS\r | |
130 | /SET TO 1 TO FORCE OTHER PARAMETERS TO VT78 COMPATIBLE\r | |
131 | \r | |
132 | DELAY=0 /SET NON-ZERO TO ALLOW DELAY AFTER ANY CHAR (12=CR)\r | |
133 | /TYPICALLY AFTER LF FOR HIGH SPEED VT05\r | |
134 | /SET VALUE OF DELAY = 7-BIT CHAR TO DELAY AFTER\r | |
135 | \r | |
136 | CTRL=1 /SET TO 1 TO ECHO CONTROL CHARS AS ^K\r | |
137 | /SET TO 0 TO ACCEPT CONTROL CHARACTERS AND PUT\r | |
138 | /IN BUFFER, BUT NOT ECHO THEM (EXCEPT THE USUAL)\r | |
139 | RUB=1 /SET TO 0 TO ECHO EACH RUBOUT BY TYPING A BACK SLASH\r | |
140 | /SET TO 1 TO ECHO CHARS RUBBED OUT UPON RUB-OUT\r | |
141 | /SET TO 4000 TO PERFORM SCOPE TYPE RUBOUTS\r | |
142 | SIMTAB=1 /SET TO 1 TO SIMULATE TABS AS THE CORRECT NUMBER OF SPACES\r | |
143 | /SET TO 0 TO TYPE TABS AS TABS\r | |
144 | SLOTAB=0 /SET TO 1 TO TYPE 2 RUBOUTS AFTER A TAB\r | |
145 | /ONLY IS APPLICABLE IF SIMTAB=0\r | |
146 | ALTMOD=0 /SET TO 1 TO CONVERT 175,176 TO 33\r | |
147 | /(UPPER CASE TERMINALS ONLY)\r | |
148 | ESC=1 /SET TO 1 TO ECHO ESCAPE AS $\r | |
149 | /SET TO 0 TO ECHO ESCAPE AS A CONTROL CHAR (^[)\r | |
150 | FLAGLC=1 /SET TO 1 TO FLAG LOWER CASE CHARS ON OUTPUT\r | |
151 | /THIS IS FOR PEOPLE NOT PRIVELIDGED ENOUGH TO\r | |
152 | /OWN A LOWER CASE TERMINAL\r | |
153 | /SET TO 0 TO PRINT LOWER CASE CHARS AS IS\r | |
154 | CNVLC=0 /SET TO 1 TO CONVERT LOWER CASE CHARS ON INPUT TO UPPER CASE\r | |
155 | /SET TO 0 TO ACCEPT INPUTTED LOWER CASE CHARS AS IS\r | |
156 | /THIS IS FOR PEOPLE WHO ARE HANDICAPPED BY A LOWER CASE\r | |
157 | /TERMINAL AND ONLY WANT UPPER CASE\r | |
158 | PAUS=200 /NON-0 PAUSES BETWEEN SCOPE PAGES\r | |
159 | HEIGHT=30 /NUMBER OF LINES PER SCREEN\r | |
160 | \r | |
161 | /SOME OF THE ABOVE OPTIONS SHOULD ACTUALLY BE IMPLEMENTED\r | |
162 | /IN SUCH A MANNER THAT THE USER CAN CHANGE THEM VIA AN ALTER\r | |
163 | /RATHER THAN HAVE TO REASSEMBLE.\r | |
164 | \r | |
165 | IFNZRO VT78 <\r | |
166 | DELAY=0\r | |
167 | CTRL=1\r | |
168 | RUB=4000\r | |
169 | SIMTAB=0\r | |
170 | SLOTAB=0\r | |
171 | ALTMOD=0\r | |
172 | ESC=1\r | |
173 | FLAGLC=0\r | |
174 | CNVLC=0\r | |
175 | IFNZRO INDVC-3 <CTRL=0>\r | |
176 | >\r | |
177 | \f/CROSS PAGE LINKAGE:\r | |
178 | \r | |
179 | /THIS CODE MUST BE ABLE TO LOAD INTO ANY TWO PAGES OF CORE\r | |
180 | /THE ENTRY POINT IS AT THE NEXT LOCATION TO THE END OF THE FIRST PAGE\r | |
181 | /AT THE END OF THE FIRST PAGE WE JMS TO PLINK,\r | |
182 | /THIS LEAVES THE ADDRESS OF THE FIRST LOCATION OF THE NEXT PAGE\r | |
183 | /IN LOCATION 'PLINK' . THIS JUST HAPPENS TO BE THE ADDRESS\r | |
184 | /OF BOTH TTYPCH AND TTYGCH.\r | |
185 | \r | |
186 | /TTYPCH AND TTYGCH SHARE THE SAME ENTRY POINT.\r | |
187 | /IF IT IS CALLED WITH A 0 AC, IT IS A CALL TO TTYGCH,\r | |
188 | /IF IT IS CALLED WITH A NON-ZERO AC, IT IS A CALL TO TTYPCH.\r | |
189 | \r | |
190 | /RETURN 1 MEANS GOT RUBOUT\r | |
191 | /TTYGCH TAKES RETURN 2 IF IT GOT A ^Z.\r | |
192 | /OTHERWISE IT TAKES RETURN 3 WITH CHARACTER GOTTEN IN AC.\r | |
193 | \r | |
194 | /TTYPCH TAKES RETURN 1 IF IT WANTS THE HANDLER TO GO AWAY,\r | |
195 | /I.E IF IT SAW A ^Z.\r | |
196 | /AC IS NORMALLY NON-ZERO UPON RETURN\r | |
197 | /AC IS POSITIVE MEANS DO A CRLF\r | |
198 | \r | |
199 | /WHEN ECHOING WE WANT TO CALL TTYPRT\r | |
200 | /BUT OTHERWISE WE WANT TO CALL TTYPCH (WHICH DOES ADDITIONAL\r | |
201 | /STUFF LIKE CHECK ^O, ^Q, ETC.\r | |
202 | /WE TELL BY WHETHER OR NOT TTYGCH HAD BEEN PREVIOUSLY CALLED.\r | |
203 | \f *200\r | |
204 | \r | |
205 | PLINK, 0 /GETS ADDRESS OF TTYPCH AND TTYGCH (START OF NEXT PAGE)\r | |
206 | STL CLA RAR /4000\r | |
207 | TAD I TTY /RETRIEVE FUNCTION WORD, BUT PUT R/W BIT IN LINK\r | |
208 | AND L3700 /EXTRACT NUMBER OF DOUBLE-WORDS TO TRANSFER\r | |
209 | CMA /GET COUNT+1\r | |
210 | DCA BUFSIZ /STORE AWAY\r | |
211 | RDF /FIND OUT THE USER'S DATA FIELD\r | |
212 | TAD CIFCDF /FORM OUR EXIT CIF CDF\r | |
213 | DCA TTYXIT /STORE AWAY FOR EXIT ROUTINE\r | |
214 | TAD TTY70 /GET FUNCTION WORD\r | |
215 | L776, AND I TTY /ISOLATE FIELD OF BUFFER\r | |
216 | TAD TTYCDF /FORM CDF TO FIELD OF BUFFER\r | |
217 | DCA TTCDBF /STORE WHERE IT WILL BE USEFUL\r | |
218 | /AT SAME TIME, INITIALIZE TTYEOF\r | |
219 | ISZ TTY /POINT TO BUFFER ADDRESS\r | |
220 | TAD I TTY /AND GET IT\r | |
221 | DCA BUFSTRT /AND SAVE IT\r | |
222 | ISZ TTY /POINT TO BLOCK #\r | |
223 | TTY376, ISZ TTY /POINT TO ERROR RETURN\r | |
224 | SHIFT, /OUTPUT SHIFT REGISTER\r | |
225 | TTYEOF, /0 IF SAW CR OR ^Z AND WISH TO PAD BUFFER WITH 0'S\r | |
226 | TTCDBF, HLT /CDF BUFFER FIELD\r | |
227 | JMP TTYKLG\r | |
228 | TTYLP, SNL CLA /LINK=1 MEANS OUTPUT\r | |
229 | JMP TTYGET /INPUT IS FROM TTY:\r | |
230 | \f/LINK MUST BE SET FIRST TIME THROUGH HERE.\r | |
231 | /IT ACTS AS A GUARD BIT IN THE SHIFT REGISTER\r | |
232 | ROTL, RTL\r | |
233 | RTL\r | |
234 | SPA /DO WE HAVE 8 BITS SHIFTED IN?\r | |
235 | JMP TELP\r | |
236 | DCA SHIFT /SAVE SHIFT REGISTER\r | |
237 | TAD I BUFSTRT\r | |
238 | SZA\r | |
239 | JMS PUNCH /PRINT A CHARACTER\r | |
240 | TAD I BUFSTRT\r | |
241 | ISZ BUFSTRT /BUMP INPUT POINTER\r | |
242 | TT7400, 7400 /PROTECT ISZ\r | |
243 | AND TT7400\r | |
244 | CLL RAL\r | |
245 | TAD SHIFT /SHIFT HIGH ORDER 4 BITS INTO\r | |
246 | JMP ROTL /SHIFT REGISTER\r | |
247 | TELP, JMS PUNCH /PRINT 3RD CHARACTER OF DOUBLE-WORD\r | |
248 | STL /***KLUDGE\r | |
249 | TTYKLG, ISZ BUFSIZ /DONE?\r | |
250 | JMP TTYLP /NOT YET\r | |
251 | TTYX, TAD TTYEOF /IF INPUT AND WE WERE PADDING WITH 0'S\r | |
252 | SZA CLA /TAKE SOFT ERROR EXIT\r | |
253 | TTYRTN, ISZ TTY /POINT TO NORMAL RETURN\r | |
254 | /CAN'T GET ERROR OR END-OF-FILE ON OUTPUT\r | |
255 | TTYXIT, HLT /RETURN TO USER'S FIELD\r | |
256 | JMP I TTY /RETURN TO USER\r | |
257 | TTYCA, 0\r | |
258 | TTYWC, 0\r | |
259 | BUFSIZ, 0\r | |
260 | BUFSTRT,0\r | |
261 | TTY70, 70\r | |
262 | \r | |
263 | PUNCH, 0 /NEVER CALL TTYPCH WITH ZERO AC\r | |
264 | JMS I PLINK /CALL TTYPCH\r | |
265 | JMP TTYRTN /GO AWAY, WE SAW A ^Z\r | |
266 | L7700, SMA CLA /DID WE REACH END OF TTY LINE?\r | |
267 | JMS CRLF /YES, PERFORM CR/LF\r | |
268 | JMP I PUNCH /RETURN\r | |
269 | \r | |
270 | TMP,\r | |
271 | CRLF, 0\r | |
272 | TAD L215\r | |
273 | JMS I PLINK /CALL TTYPCH TO PRINT CR\r | |
274 | L215, 215 /CAN'T RETURN HERE\r | |
275 | CLA /****\r | |
276 | TAD L212\r | |
277 | JMS I PLINK /CALL TTYPCH TO PRINT LF\r | |
278 | L212, 212 /CAN'T RETURN HERE\r | |
279 | CLA /****\r | |
280 | JMP I CRLF /RETURN\r | |
281 | \fCTRLU, JMS CRLF /PERFORM A CR/LF\r | |
282 | TTYGET, TAD BUFSTRT\r | |
283 | DCA TTYCA /POINT TO START OF BUFFER\r | |
284 | TAD BUFSIZ\r | |
285 | CLL RAL /CONVERT DOUBLE-WORDS TO WORDS\r | |
286 | DCAWC, DCA TTYWC /SET SIZE OF BUFFER\r | |
287 | TSTEND, TAD TTYEOF\r | |
288 | SNA CLA\r | |
289 | JMP ZERO\r | |
290 | JMS I PLINK /CALL TTYGCH TO GET A CHARACTER\r | |
291 | JMP RUBOUT /RETURN 1 MEANS SAW RUBOUT\r | |
292 | ZERO, DCA I TTYCA /RETURN 2 MEANS GOT CHARACTER\r | |
293 | /STORE AWAY TEMPORARILY\r | |
294 | /USING USER'S BUFFER AS A TEMP LOCATION\r | |
295 | TAD I TTYCA /GET BACK CHARACTER\r | |
296 | IFNZRO .-320 <_ERROR>\r | |
297 | SZA\r | |
298 | JMS PUNCH /ECHO IT\r | |
299 | TAD I TTYCA /GET IT AGAIN\r | |
300 | TAD M32 /-^Z\r | |
301 | SNA\r | |
302 | JMP CTRLZ\r | |
303 | TAD L5 /^Z-^U\r | |
304 | SNA /IS IT ^U?\r | |
305 | JMP CTRLU /YES\r | |
306 | TAD L7\r | |
307 | GRUDGE, DCA TMP\r | |
308 | ISZ TTYCA /NO\r | |
309 | L7, 7\r | |
310 | ISZ TTYWC /IS BUFFER FULL?\r | |
311 | TT10, SKP\r | |
312 | JMP TTYX\r | |
313 | ISZ TMP /WAS LAST CHAR A CR?\r | |
314 | JMP TSTEND /NO\r | |
315 | DCA TTYEOF /YES, SET "PAD WITH 0'S" FLAG\r | |
316 | ISZ TTY /POINT TO NORMAL RETURN\r | |
317 | /CR IS NOT AN ERROR OR END-OF-FILE\r | |
318 | TAD L212 /IF LAST CHAR INPUT WAS CR, NOW PRETEND LF WAS INPUT\r | |
319 | JMP ZERO /REJOIN PROCESSING\r | |
320 | \r | |
321 | CTRLZ, DCA TTYEOF\r | |
322 | JMS CRLF\r | |
323 | JMP GRUDGE\r | |
324 | \r | |
325 | M32, -32\r | |
326 | L5, 5\r | |
327 | L3700, 3700\r | |
328 | CIFCDF, CIF CDF 0\r | |
329 | TTYCDF, CDF 0\r | |
330 | \r | |
331 | /TTYEOF IS ZERO MEANS PAD BUFFER WITH ZEROES\r | |
332 | \f/DON'T DO YET:\r | |
333 | /RUBOUT, AND TTYWC /177 IN AC\r | |
334 | / SNA CLA\r | |
335 | / JMP CTRLU\r | |
336 | \r | |
337 | RUBOUT, KCC /TTYGCH DOESN'T CLEAR RO FROM BUFFER\r | |
338 | TAD TTYCA\r | |
339 | CIA\r | |
340 | TAD BUFSTRT\r | |
341 | SNA CLA /ARE WE AT BEGIN OF BUFFER?\r | |
342 | JMP CTRLU /YES\r | |
343 | STA\r | |
344 | TAD TTYCA\r | |
345 | DCA TTYCA\r | |
346 | IFZERO RUB <\r | |
347 | LSLASH, "\\r | |
348 | TAD LSLASH /PRINT A BACK SLASH FOR EACH RUBBED OUT CHAR\r | |
349 | >\r | |
350 | IFNZRO RUB&4000+RUB <TAD I TTYCA> /PRINT CHAR JUST DELETED\r | |
351 | IFNZRO RUB&4000 <TAD TT10> /BACKSPACE-SPACE-BACKSPACE\r | |
352 | JMS PUNCH\r | |
353 | STA\r | |
354 | TAD TTYWC\r | |
355 | JMP DCAWC /BUMP BACK WC AND GET ANOTHER CHAR\r | |
356 | \r | |
357 | ZBLOCK 376-.\r | |
358 | TTY, TTYVERSION /ENTRY POINT TO HANDLER\r | |
359 | JMS PLINK /SET UP CROSS PAGE LINKAGE\r | |
360 | IFNZRO TTY-376 <ENTERR,QQQQ>\r | |
361 | PAGE\r | |
362 | \f/INTERLUDE:\r | |
363 | \r | |
364 | /USA STANDARD CODE FOR INFORMATION INTERCHANGE:\r | |
365 | \r | |
366 | / 000 001 010 011 100 101 110 111\r | |
367 | /\r | |
368 | / 0000 NUL DLE SP 0 @ P ' 'P\r | |
369 | /\r | |
370 | / 0001 SOH DC1 ! 1 A Q 'A 'Q\r | |
371 | /\r | |
372 | / 0010 STX DC2 " 2 B R 'B 'R\r | |
373 | /\r | |
374 | / 0011 ETX DC3 # 3 C S 'C 'S\r | |
375 | /\r | |
376 | / 0100 EOT DC4 $ 4 D T 'D 'T\r | |
377 | /\r | |
378 | / 0101 ENQ NAK % 5 E U 'E 'U\r | |
379 | /\r | |
380 | / 0110 ACK SYN & 6 F V 'F 'V\r | |
381 | /\r | |
382 | / 0111 BEL ETB ' 7 G W 'G 'W\r | |
383 | /\r | |
384 | / 1000 BS CAN ( 8 H X 'H 'X\r | |
385 | /\r | |
386 | / 1001 HT EM ) 9 I Y 'I 'Y\r | |
387 | /\r | |
388 | / 1010 LF SUB * : J Z 'J 'Z\r | |
389 | /\r | |
390 | / 1011 VT ESC + ; K [ 'K '[\r | |
391 | /\r | |
392 | / 1100 FF FS , < L \ 'L '\\r | |
393 | /\r | |
394 | / 1101 CR GS - = M ] 'M ']\r | |
395 | /\r | |
396 | / 1110 SO RS . > N ^ 'N '^\r | |
397 | /\r | |
398 | / 1111 SI US / ? O _ 'O '_\r | |
399 | /\r | |
400 | \f/TTYGCH: GETS A CHAR FROM KBD\r | |
401 | / IF GOT ^Z, IT SETS TTYEOF FLAG\r | |
402 | / LEAVES IT IN AC IN 7-BIT\r | |
403 | \r | |
404 | /TTYPRT: PRINTS CHAR IN AC ON TTY\r | |
405 | / IGNORES NULLS\r | |
406 | / PRINTS ^X ON CONTROL CHARS (EXCEPT CR, LF, FF, VT, TAB)\r | |
407 | / PRINTS 'X ON LOWER CASE\r | |
408 | \r | |
409 | /HANDLES TABS CORRECTLY\r | |
410 | / AND AUTOMATICALLY PRINTS CR/LF AT EOL\r | |
411 | / PRINTS ESCAPE AS $\r | |
412 | \r | |
413 | /TTYTLS: USED TO ACTUALLY PRINT CHAR\r | |
414 | / IT HANDLES TABS AUTOMATICALLY\r | |
415 | / AND CR/LF'S AT END OF LINE\r | |
416 | \r | |
417 | /TTYPCH: IT USES TTYPRT TO PRINT CHAR BUT ALSO RESPONDS TO\r | |
418 | / ^C, ^O, ^S, ^Q.\r | |
419 | / IF ^Z IS BEING PRINTED, IT THEN STOPS FURTHER PRINTING\r | |
420 | \f/MUST BE AT TOP OF PAGE\r | |
421 | TTYPCH, /ENTRY POINT TO TTY PUNCH ROUTINE\r | |
422 | /OR TTY PRINT ROUTINE\r | |
423 | TTYGCH, 0 /ENTRY POINT TO TTY GET CHAR ROUTINE\r | |
424 | SNA\r | |
425 | JMS TGCH /ZERO AC-MEANT CALL TO TTYGCH\r | |
426 | PCH, AND (177 /FORCE TO 7-BIT\r | |
427 | DCA TCHAR\r | |
428 | TAD TGCH\r | |
429 | M140, SZA CLA /ARE WE ECHOING?\r | |
430 | JMP ECHO /YES, IGNORE ^S AND STUFF\r | |
431 | K5, 5 /MUST BE AT REL 10\r | |
432 | TAD TCHAR\r | |
433 | TAD (-32\r | |
434 | IFZERO PAUS <\r | |
435 | SNA CLA\r | |
436 | JMP I TTYPCH\r | |
437 | >\r | |
438 | IFNZRO PAUS <\r | |
439 | SNA\r | |
440 | JMP I TTYPCH\r | |
441 | TAD L15 /32-15\r | |
442 | SNA CLA /LOOK FOR CR\r | |
443 | ISZ LINCNT /AT END OF PAGE?\r | |
444 | JMP NOPAUS /NOT AT CR, OR AT CR BUT NOT AT END OF PAGE\r | |
445 | L15, 15 /MUST BE HERE FOR SET\r | |
446 | TAD PAUSN\r | |
447 | DCA TTYTLS /SET COUNT FOR OUTER LOOP\r | |
448 | ISZ LINCNT\r | |
449 | JMP .-1\r | |
450 | ISZ TTYTLS\r | |
451 | JMP .-3\r | |
452 | TAD LINSYZ\r | |
453 | DCA LINCNT\r | |
454 | >\r | |
455 | NOPAUS, JMS TTYTST\r | |
456 | TAD (203-217 /NO\r | |
457 | SNA /^O?\r | |
458 | DCA TCHAR /YES, SET TO NULL SO IT WILL BE IGNORED\r | |
459 | TAD (217-223 /NO\r | |
460 | SZA CLA /^S?\r | |
461 | JMP ECHO /NO, IGNORE CHAR\r | |
462 | TTCTLQ, JMS TTYTST\r | |
463 | TAD (203-221 /NO, NOTHING ELSE MATTERS UNTIL ^Q\r | |
464 | SZA CLA /^Q?\r | |
465 | JMP TTCTLQ /NO, SUSPEND OUTPUTTING\r | |
466 | TTY32, KCC /YES, REMOVE ^Q FROM BUFFER\r | |
467 | /HAD NO ROOM FOR:\r | |
468 | / TAD LINSYZ\r | |
469 | / DCA LINCNT\r | |
470 | ECHO, DCA TGCH\r | |
471 | ISZ TTYPCH\r | |
472 | IFNZRO ESC <\r | |
473 | TAD TCHAR\r | |
474 | TAD (-33\r | |
475 | SZA CLA\r | |
476 | JMP .+3\r | |
477 | TAD L44\r | |
478 | DCA TCHAR\r | |
479 | L44, 44\r | |
480 | >\r | |
481 | TAD TCHAR\r | |
482 | SNA\r | |
483 | JMP TTYCTO /IGNORE NULLS\r | |
484 | IFNZRO RUB&4000 <\r | |
485 | TAD (-10\r | |
486 | SNA\r | |
487 | JMP RUBO\r | |
488 | TAD (10-16\r | |
489 | >\r | |
490 | IFZERO RUB&4000 <\r | |
491 | TAD (-16\r | |
492 | >\r | |
493 | TTY100, CLL\r | |
494 | TTY10, TAD K5\r | |
495 | TTY240, SZA /TAB?\r | |
496 | JMP NOTAB\r | |
497 | IFNZRO SIMTAB <\r | |
498 | TTYTAB, TAD TTY240\r | |
499 | JMS TTYTLS\r | |
500 | TTY7, 7 /HERE FOR NO SPECIAL REASON\r | |
501 | TAD TABCTR\r | |
502 | AND TTY7\r | |
503 | SZA CLA\r | |
504 | JMP TTYTAB\r | |
505 | JMP TTYCTO\r | |
506 | >\r | |
507 | IFNZRO SLOTAB <\r | |
508 | TAD TCHAR\r | |
509 | JMS TTYTLS\r | |
510 | TAD (177\r | |
511 | JMS TTYTLS\r | |
512 | TAD (177\r | |
513 | JMP PRIN+1\r | |
514 | >\r | |
515 | IFZERO SIMTAB+SLOTAB <JMP PRIN>\r | |
516 | \r | |
517 | /BUG: IF HARDWARE TABS, DON'T COUNT COLUMNS CORRECTLY\r | |
518 | \r | |
519 | IFNZRO RUB&4000 <\r | |
520 | RUBO, TAD TTY10 /OUTPUT BACKSPACE-RUBOUT-BACKSPACE\r | |
521 | JMS TTYTLS\r | |
522 | TAD TTY240\r | |
523 | JMS TTYTLS\r | |
524 | TAD (-4\r | |
525 | TAD TABCTR\r | |
526 | JMP PREPRN\r | |
527 | >\r | |
528 | \fNOTAB, SZL CLA\r | |
529 | JMP SPCHR /DON'T UPARROW CHARS LF,CR,TAB,VT,FF\r | |
530 | IFNZRO FLAGLC <\r | |
531 | TAD TCHAR\r | |
532 | AND TTY140\r | |
533 | TAD M140\r | |
534 | SZA CLA /IS IT LC?\r | |
535 | JMP NOLC /NO\r | |
536 | TTYQUO, "'\r | |
537 | TAD TTYQUO /YES\r | |
538 | JMS TTYTLS /PRINT QUOTE\r | |
539 | TAD M40\r | |
540 | JMP PRIN /PRINT UPPER CASE OF CHAR\r | |
541 | >\r | |
542 | NOLC, TAD TCHAR /NO, GET BACK CHAR\r | |
543 | AND TTY140 /HIGH ORDER BITS IRRELEVANT\r | |
544 | IFNZRO CTRL <\r | |
545 | M40, SMA SZA CLA /CAN'T BE NEGATIVE\r | |
546 | JMP PRIN /NOT A CONTROL CHARACTER\r | |
547 | TAD TTYUPA /ECHO 201-237 AS ^X (EXCEPT 211-215)\r | |
548 | JMS TTYTLS\r | |
549 | TAD TTY100 /ADD X100 TO ^K TO GET K\r | |
550 | >\r | |
551 | IFZERO CTRL <\r | |
552 | SNA CLA /IS CHAR A CONTROL CHAR?\r | |
553 | JMP TTYCTO /YES, DON'T ECHO CONTROL CHARACTERS EXCEPT FOR 211-215\r | |
554 | >\r | |
555 | PRIN, TAD TCHAR\r | |
556 | JMS TTYTLS\r | |
557 | TTYCTO, TAD TABCTR /RETURN TABCNT IN AC\r | |
558 | JMP I TTYPCH\r | |
559 | \r | |
560 | IFZERO CTRL <\r | |
561 | M40, -40\r | |
562 | >\r | |
563 | \r | |
564 | TTY140,\r | |
565 | SPCHR, STA CLL\r | |
566 | TAD LINSIZ\r | |
567 | PREPRN, DCA TABCTR /THESE CHARS RESET COLUMN COUNTER\r | |
568 | JMP PRIN\r | |
569 | \fTGCH, 0 /NON-ZERO MEANS TTYGCH WAS CALLED\r | |
570 | KSF\r | |
571 | JMP .-1 /WAIT FOR CHAR TO BE TYPED\r | |
572 | JMS TTYTST\r | |
573 | /WILD: (DON'T PUT IN) SZA CLA /FALL THRU AND RETURN R.O.\r | |
574 | / ISZ TTYGCH\r | |
575 | TAD (203-377\r | |
576 | SNA CLA /TAKE RETURN 1 ON RUB OUT\r | |
577 | JMP I TTYGCH /"CLUMSY" - R.L. (9/18/73)\r | |
578 | ISZ TTYGCH\r | |
579 | KRB /GET CHARACTER\r | |
580 | TTYAND, AND (177 /MUST RETURN CHAR IN 7-BIT\r | |
581 | IFNZRO CNVLC <\r | |
582 | DCA TCHAR\r | |
583 | TAD TCHAR\r | |
584 | AND TTY140\r | |
585 | TAD M140\r | |
586 | SNA CLA /IS IT LC?\r | |
587 | TAD M40 /YES\r | |
588 | TAD TCHAR /NO\r | |
589 | >\r | |
590 | IFNZRO ALTMOD <\r | |
591 | TAD (-175 /IS IT 175 OR 176?\r | |
592 | SMA\r | |
593 | JMP CONV /YES, CONVERT ALTMODE TO ESCAPE\r | |
594 | TAD (175 /NO, RESTORE CHAR\r | |
595 | >\r | |
596 | JMP I TTYGCH /TAKE RETURN 3\r | |
597 | \r | |
598 | /SHOULDN'T TABCTR BE INITIALIZED TO C(LINSIZ) UPON ENTRY?\r | |
599 | \r | |
600 | TABCTR, -110\r | |
601 | \r | |
602 | TTYTLS, 0\r | |
603 | TLS\r | |
604 | IFNZRO DELAY <\r | |
605 | TAD (-DELAY\r | |
606 | SZA CLA\r | |
607 | STA\r | |
608 | >\r | |
609 | TTYTSF, TSF\r | |
610 | JMP .-1\r | |
611 | IFNZRO DELAY <\r | |
612 | IAC\r | |
613 | SZA /19.66 MS IS G.T. 1/60 SEC\r | |
614 | JMP TTYTSF\r | |
615 | >\r | |
616 | ISZ TABCTR\r | |
617 | TTYUPA, "^\r | |
618 | TT7600, 7600\r | |
619 | JMP I TTYTLS\r | |
620 | LINSIZ, -110\r | |
621 | \r | |
622 | IFNZRO PAUS <\r | |
623 | LINSYZ, -HEIGHT\r | |
624 | LINCNT, -HEIGHT\r | |
625 | PAUSN, -PAUS\r | |
626 | >\r | |
627 | \r | |
628 | IFNZRO ALTMOD <\r | |
629 | IFNZRO KCC-6032 <\r | |
630 | CONV, CLA\r | |
631 | TAD (33\r | |
632 | JMP I TTYGCH\r | |
633 | >\r | |
634 | IFZERO KCC-6032 <\r | |
635 | CONV, CLA IAC\r | |
636 | TAD TTY32 /DEVICE DEPENDENT\r | |
637 | JMP TTYAND\r | |
638 | >\r | |
639 | >\r | |
640 | \fTCHAR, 0\r | |
641 | \r | |
642 | /TTYTST: READS KEYBOARD STATICALLY AND RESPONDS TO ^C\r | |
643 | / OTHERWISE RETURNS CHAR (8-BIT) MINUS 203 IN AC.\r | |
644 | / IF FLAG IS NOT UP, IT RETURNS A 1.\r | |
645 | \r | |
646 | TTYTST, 0\r | |
647 | TAD TT7600 /OR CHAR IN\r | |
648 | KRS\r | |
649 | TAD (-7603 /-7603=175\r | |
650 | KSF\r | |
651 | CLA IAC /STUFF IN BUFFER IS UNRELIABLE IF FLAG ISN'T UP\r | |
652 | SZA\r | |
653 | JMP I TTYTST\r | |
654 | IFNZRO INDVC-3 <KCC>\r | |
655 | CIF CDF 0 /BRANCH TO OS/8 MONITOR AT 07600\r | |
656 | JMP I TT7600 /IT WILL PRINT "^C" FOR CHAR IN BUFFER\r | |
657 | PAGE\r | |
658 | \f/ DYNAMICALLY MODIFYING THE KL8E HANDLER\r | |
659 | \r | |
660 | / *** I M P O R T A N T ***\r | |
661 | \r | |
662 | / THIS HANDLER CAN BE DYNAMICALLY CHANGED VIA SET COMMANDS.\r | |
663 | / CONSEQUENTLY, IT IS EXTREMELY IMPORTANT THAT PEOPLE\r | |
664 | / WHO MODIFY THIS SOURCE DO NOT AFFECT THE ALGORITHMS\r | |
665 | / NECESSARY TO PERFORM SUCH MODIFICATIONS.\r | |
666 | \r | |
667 | / THIS ALGORITHM IS EXPLAINED BELOW.\r | |
668 | \r | |
669 | / SET TTY WIDTH=N\r | |
670 | \r | |
671 | / SEARCH LOCATIONS 200-377 FOR A 7600. CALL ITS ADDRESS X.\r | |
672 | / LET Y BE THE INSTRUCTION AT LOCATION X+1.\r | |
673 | / FORM THE (RELATIVE) ADDRESS T=Y&177+200-1.\r | |
674 | / THEN LOCATIONS T AND X+2 CONTAIN MINUS THE TTY WIDTH.\r | |
675 | / THE WIDTH MUST BE A MULTIPLE OF 10 AND MUST NOT BE 200.\r | |
676 | / (BECAUSE -200 IS THE MAGIC 7600)\r | |
677 | \r | |
678 | / SET TTY CODE XX\r | |
679 | \r | |
680 | / SEARCH ENTIRE HANDLER FOR INSTRUCTIONS OF THE FORM 6XXY\r | |
681 | / WHERE XX IS NOT 20 OR 21,\r | |
682 | / AND FURTHERMORE DON'T INCLUDE A 6031 IF 2 LOCATIONS\r | |
683 | / FOLLOWING IS A 7650\r | |
684 | / AND DON'T INCLUDE A 6034 IF 4 LOCATIONS FOLLOWING IS A 7650.\r | |
685 | \r | |
686 | \r | |
687 | / SET TTY [NO] ECHO\r | |
688 | \r | |
689 | / THE WORD INVOLVED IS AT (RELATIVE) LOCATION 120.\r | |
690 | / SET TO 7440 TO ECHO.\r | |
691 | / SET TO 7610 TO SUPPRESS ECHOING.\r | |
692 | \r | |
693 | \r | |
694 | / SET TTY LC\r | |
695 | \r | |
696 | / SEARCH LOCATIONS 200-377 FOR A 377. CALL ITS ADDRESS X.\r | |
697 | / LOOK AT LOCATION X+5.\r | |
698 | / IF THIS LOCATION IS NOT A 7650, THEN LC TO UC CONVERSION\r | |
699 | / WAS NOT ENABLED AT ASSEMBLY TIME.\r | |
700 | / IF THE FEATURE IS ENABLED, CHANGE LOCATION X+5 TO A 7610\r | |
701 | / TO PREVENT THE CONVERSION. TO ALLOW CONVERSION, SET\r | |
702 | / LOCATION X+5 BACK TO 7650.\r | |
703 | \r | |
704 | / SET TTY PAGE\r | |
705 | \r | |
706 | / SEARCH LOCATIONS 215-300 FOR A 7450. CALL ITS ADDRESS X.\r | |
707 | / SET X+3 TO 7640 TO ENABLE ^S, ^Q.\r | |
708 | / SET X+3 TO 7200 TO DISABLE ^S, ^Q.\r | |
709 | \f/ SET TTY TAB\r | |
710 | \r | |
711 | / SEARCH LOCATIONS 200-300 FOR A 7.\r | |
712 | / IF NOT FOUND, SIMULATED TABS WAS NOT ENABLED AT ASSEMBLY TIME.\r | |
713 | / IF FOUND, CALL ITS ADDRESS X.\r | |
714 | / TO PATCH OUT SIMULATED TABS:\r | |
715 | / MOVE C(X-12) TO LOCATION X-2\r | |
716 | / CHANGE LOCATION X+3 TO A 7610\r | |
717 | / TO RESTORE SIMULATED TABS:\r | |
718 | / SET LOCATION X-2 TO X-4&77+1200\r | |
719 | / CHANGE LOCATION X+3 TO A 7640\r | |
720 | \r | |
721 | / SET TTY FILL\r | |
722 | \r | |
723 | / THE LITERAL 177 MUST REMAIN AT THE END OF PAGE 2\r | |
724 | / SEARCH LOCATIONS 200-300 FOR A 1377.\r | |
725 | / IF NOT FOUND, THEN FILL CHARACTERS WERE NOT ENABLED AT ASSEMBLY\r | |
726 | / TIME. IF FOUND, CALL ITS ADDRESS X.\r | |
727 | / TO PATCH OUT FILL CHARACTERS, MOVE C(X+3) TO LOCATION X-1.\r | |
728 | / TO RESTORE FILL CHARACTERS, MOVE C(X+1) TO LOCATION X-1.\r | |
729 | \r | |
730 | / SET TTY FLAGLC\r | |
731 | \r | |
732 | / SEARCH LOCATIONS 200-377 FOR A 247.\r | |
733 | / IF NOT FOUND, LOWER CASE FLAGGING WAS NOT ENABLED AT ASSEMBLY TIME.\r | |
734 | / IF FOUND, CALL ITS ADDRESS X.\r | |
735 | / TO DISABLE FLAGGING, SET LOCATION X-2 TO A 7200.\r | |
736 | / TO RE-ENABLE FLAGGING, SET LOCATION X-2 TO A 7640.\r | |
737 | \r | |
738 | / SET TTY PAUSE [N]\r | |
739 | \r | |
740 | / SEARCH LOCATIONS 200-300 FOR A 15.\r | |
741 | / IF NOT FOUND, PAUSING WAS NOT ENABLED AT ASSEMBLY TIME.\r | |
742 | / IF FOUND, CALL ITS ADDRESS X.\r | |
743 | / TO DISABLE PAUSING AFTER A FULL SCREEN,\r | |
744 | / SET LOCATION X-3 TO A 7610.\r | |
745 | / TO RE-ENABLE PAUSING, SET LOCATION X-3 TO A 7650.\r | |
746 | / TO SET PAUSE DURATION, SEARCH LOCATIONS 300-377 FOR A 7600,\r | |
747 | / CALLING ITS ADDRESS X. THEN (MINUS THE) PAUSE DURATION IS AT\r | |
748 | / LOCATION X+5.\r | |
749 | \r | |
750 | / SET TTY HEIGHT\r | |
751 | \r | |
752 | / THIS IS ONLY APPLICABLE IF SET TTY PAUSE HAS BEEN ASSEMBLED IN\r | |
753 | / (A 15 CAN BE FOUND ON SECOND PAGE).\r | |
754 | / NEGATIVE OF HEIGHT MUST BE SET IN BOTH LOCATIONS X+3 AND X+4\r | |
755 | / WHERE X IS THE ADDRESS OF A 7600 AS IN ABOVE.\r | |
756 | \f/ SET TTY ESCAPE\r | |
757 | \r | |
758 | / SEARCH LOCATIONS 200-377 FOR A 44.\r | |
759 | / IF NOT FOUND, THEN $ WAS NOT ASSEMBLED INTO TTY HANDLER.\r | |
760 | / IF FOUND, CALL ITS ADDRESS X.\r | |
761 | / TO DISABLE PRINTING ESCAPE AS $, SET LOCATION X-4 TO A 'CLA'.\r | |
762 | / TO CAUSE ESCAPE TO PRINT AS AN ESCAPE, SET LOCATION X-4 TO SZA CLA.\r | |
763 | \r | |
764 | / SET TTY ARROW\r | |
765 | \r | |
766 | / SEARCH LOCATIONS 200-377 FOR 7740.\r | |
767 | \r | |
768 | / IF NOT FOUND, USING OLD HANDLER.\r | |
769 | / CALL ITS ADDRESS X.\r | |
770 | / IF LOCATION X+1 IS MORE THAN 7000,\r | |
771 | / THEN UPARROW MODE WAS NOT ASSEMBLED INTO KL8E.\r | |
772 | / OTHERWISE, TO ALLOW ARROWS, SET LOCATION X+3 TO THE\r | |
773 | / CONTENTS OF LOCATION X+6.\r | |
774 | / TO CAUSE CONTROL CHARACTERS TO ECHO AS IS, SET\r | |
775 | / LOCATION X+3 TO 'SKP CLA'.\r | |
776 | / NOTE THAT THIS IS A DIFFERENT OPTION THAN ASSEMBLING CTRL=0.\r | |
777 | \f IFDEF TEST <\r | |
778 | *600\r | |
779 | \r | |
780 | /TEST ROUTINE FOR KL8E HANDLER\r | |
781 | \r | |
782 | GO, JMS I (TTY /CALL HANDLER\r | |
783 | 0600 /READ SIX PAGES\r | |
784 | 1000 /BUFFER AT 01000\r | |
785 | 0001 /BLOCK 1\r | |
786 | HLT /ERROR RETURN\r | |
787 | JMS I (TTY /CALL HANDLER AGAIN\r | |
788 | 4600 /OUTPUT SIX PAGES\r | |
789 | 1000\r | |
790 | 0001\r | |
791 | HLT\r | |
792 | CLA\r | |
793 | JMP GO\r | |
794 | >\r | |
795 | $\r | |
796 | \f\1a\0 |