A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rka / paroff / kl8e3d.pa
CommitLineData
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
205PLINK, 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
215L776, 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
223TTY376, ISZ TTY /POINT TO ERROR RETURN\r
224SHIFT, /OUTPUT SHIFT REGISTER\r
225TTYEOF, /0 IF SAW CR OR ^Z AND WISH TO PAD BUFFER WITH 0'S\r
226TTCDBF, HLT /CDF BUFFER FIELD\r
227 JMP TTYKLG\r
228TTYLP, 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
232ROTL, 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
242TT7400, 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
247TELP, JMS PUNCH /PRINT 3RD CHARACTER OF DOUBLE-WORD\r
248 STL /***KLUDGE\r
249TTYKLG, ISZ BUFSIZ /DONE?\r
250 JMP TTYLP /NOT YET\r
251TTYX, TAD TTYEOF /IF INPUT AND WE WERE PADDING WITH 0'S\r
252 SZA CLA /TAKE SOFT ERROR EXIT\r
253TTYRTN, ISZ TTY /POINT TO NORMAL RETURN\r
254 /CAN'T GET ERROR OR END-OF-FILE ON OUTPUT\r
255TTYXIT, HLT /RETURN TO USER'S FIELD\r
256 JMP I TTY /RETURN TO USER\r
257TTYCA, 0\r
258TTYWC, 0\r
259BUFSIZ, 0\r
260BUFSTRT,0\r
261TTY70, 70\r
262\r
263PUNCH, 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
266L7700, 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
270TMP,\r
271CRLF, 0\r
272 TAD L215\r
273 JMS I PLINK /CALL TTYPCH TO PRINT CR\r
274L215, 215 /CAN'T RETURN HERE\r
275 CLA /****\r
276 TAD L212\r
277 JMS I PLINK /CALL TTYPCH TO PRINT LF\r
278L212, 212 /CAN'T RETURN HERE\r
279 CLA /****\r
280 JMP I CRLF /RETURN\r
281\fCTRLU, JMS CRLF /PERFORM A CR/LF\r
282TTYGET, 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
286DCAWC, DCA TTYWC /SET SIZE OF BUFFER\r
287TSTEND, 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
292ZERO, 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
307GRUDGE, DCA TMP\r
308 ISZ TTYCA /NO\r
309L7, 7\r
310 ISZ TTYWC /IS BUFFER FULL?\r
311TT10, 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
321CTRLZ, DCA TTYEOF\r
322 JMS CRLF\r
323 JMP GRUDGE\r
324\r
325M32, -32\r
326L5, 5\r
327L3700, 3700\r
328CIFCDF, CIF CDF 0\r
329TTYCDF, 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
337RUBOUT, 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
347LSLASH, "\\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
358TTY, 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
421TTYPCH, /ENTRY POINT TO TTY PUNCH ROUTINE\r
422 /OR TTY PRINT ROUTINE\r
423TTYGCH, 0 /ENTRY POINT TO TTY GET CHAR ROUTINE\r
424 SNA\r
425 JMS TGCH /ZERO AC-MEANT CALL TO TTYGCH\r
426PCH, AND (177 /FORCE TO 7-BIT\r
427 DCA TCHAR\r
428 TAD TGCH\r
429M140, SZA CLA /ARE WE ECHOING?\r
430 JMP ECHO /YES, IGNORE ^S AND STUFF\r
431K5, 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
445L15, 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
455NOPAUS, 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
462TTCTLQ, 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
466TTY32, KCC /YES, REMOVE ^Q FROM BUFFER\r
467/HAD NO ROOM FOR:\r
468/ TAD LINSYZ\r
469/ DCA LINCNT\r
470ECHO, 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
479L44, 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
493TTY100, CLL\r
494TTY10, TAD K5\r
495TTY240, SZA /TAB?\r
496 JMP NOTAB\r
497 IFNZRO SIMTAB <\r
498TTYTAB, TAD TTY240\r
499 JMS TTYTLS\r
500TTY7, 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
520RUBO, 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
536TTYQUO, "'\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
542NOLC, TAD TCHAR /NO, GET BACK CHAR\r
543 AND TTY140 /HIGH ORDER BITS IRRELEVANT\r
544 IFNZRO CTRL <\r
545M40, 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
555PRIN, TAD TCHAR\r
556 JMS TTYTLS\r
557TTYCTO, TAD TABCTR /RETURN TABCNT IN AC\r
558 JMP I TTYPCH\r
559\r
560 IFZERO CTRL <\r
561M40, -40\r
562 >\r
563\r
564TTY140,\r
565SPCHR, STA CLL\r
566 TAD LINSIZ\r
567PREPRN, 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
580TTYAND, 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
600TABCTR, -110\r
601\r
602TTYTLS, 0\r
603 TLS\r
604 IFNZRO DELAY <\r
605 TAD (-DELAY\r
606 SZA CLA\r
607 STA\r
608 >\r
609TTYTSF, 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
617TTYUPA, "^\r
618TT7600, 7600\r
619 JMP I TTYTLS\r
620LINSIZ, -110\r
621\r
622 IFNZRO PAUS <\r
623LINSYZ, -HEIGHT\r
624LINCNT, -HEIGHT\r
625PAUSN, -PAUS\r
626 >\r
627\r
628 IFNZRO ALTMOD <\r
629 IFNZRO KCC-6032 <\r
630CONV, CLA\r
631 TAD (33\r
632 JMP I TTYGCH\r
633 >\r
634 IFZERO KCC-6032 <\r
635CONV, 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
646TTYTST, 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
782GO, 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