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