Commit | Line | Data |
---|---|---|
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 | ||
214 | PLINK, 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 | |
224 | L776, 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 # | |
232 | TTY376, ISZ TTY /POINT TO ERROR RETURN | |
233 | SHIFT, /OUTPUT SHIFT REGISTER | |
234 | TTYEOF, /0 IF SAW CR OR ^Z AND WISH TO PAD BUFFER WITH 0'S | |
235 | TTCDBF, HLT /CDF BUFFER FIELD | |
236 | JMP TTYKLG | |
237 | TTYLP, 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 | |
241 | ROTL, 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 | |
251 | TT7400, 7400 /PROTECT ISZ | |
252 | AND TT7400 | |
253 | CLL RAL | |
254 | TAD SHIFT /SHIFT HIGH ORDER 4 BITS INTO | |
255 | JMP ROTL /SHIFT REGISTER | |
256 | TELP, JMS PUNCH /PRINT 3RD CHARACTER OF DOUBLE-WORD | |
257 | STL /***KLUDGE | |
258 | TTYKLG, ISZ BUFSIZ /DONE? | |
259 | JMP TTYLP /NOT YET | |
260 | TTYX, TAD TTYEOF /IF INPUT AND WE WERE PADDING WITH 0'S | |
261 | SZA CLA /TAKE SOFT ERROR EXIT | |
262 | TTYRTN, ISZ TTY /POINT TO NORMAL RETURN | |
263 | /CAN'T GET ERROR OR END-OF-FILE ON OUTPUT | |
264 | TTYXIT, HLT /RETURN TO USER'S FIELD | |
265 | JMP I TTY /RETURN TO USER | |
266 | TTYCA, 0 | |
267 | TTYWC, 0 | |
268 | BUFSIZ, 0 | |
269 | BUFSTRT,0 | |
270 | TTY70, 70 | |
271 | ||
272 | PUNCH, 0 /NEVER CALL TTYPCH WITH ZERO AC | |
273 | JMS I PLINK /CALL TTYPCH | |
274 | JMP TTYRTN /GO AWAY, WE SAW A ^Z | |
275 | L7700, SMA CLA /DID WE REACH END OF TTY LINE? | |
276 | JMS CRLF /YES, PERFORM CR/LF | |
277 | JMP I PUNCH /RETURN | |
278 | ||
279 | TMP, | |
280 | CRLF, 0 | |
281 | TAD L215 | |
282 | JMS I PLINK /CALL TTYPCH TO PRINT CR | |
283 | L215, 215 /CAN'T RETURN HERE | |
284 | CLA /**** | |
285 | TAD L212 | |
286 | JMS I PLINK /CALL TTYPCH TO PRINT LF | |
287 | L212, 212 /CAN'T RETURN HERE | |
288 | CLA /**** | |
289 | JMP I CRLF /RETURN | |
290 | \fCTRLU, JMS CRLF /PERFORM A CR/LF | |
291 | TTYGET, TAD BUFSTRT | |
292 | DCA TTYCA /POINT TO START OF BUFFER | |
293 | TAD BUFSIZ | |
294 | CLL RAL /CONVERT DOUBLE-WORDS TO WORDS | |
295 | DCAWC, DCA TTYWC /SET SIZE OF BUFFER | |
296 | TSTEND, 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 | |
301 | ZERO, 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 | |
316 | GRUDGE, DCA TMP | |
317 | ISZ TTYCA /NO | |
318 | L7, 7 | |
319 | ISZ TTYWC /IS BUFFER FULL? | |
320 | TT10, 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 | ||
330 | CTRLZ, DCA TTYEOF | |
331 | JMS CRLF | |
332 | JMP GRUDGE | |
333 | ||
334 | M32, -32 | |
335 | L5, 5 | |
336 | L3700, 3700 | |
337 | CIFCDF, CIF CDF 0 | |
338 | TTYCDF, 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 | ||
346 | RUBOUT, 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 < | |
356 | LSLASH, "\ | |
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-. | |
367 | TTY, 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 | |
430 | TTYPCH, /ENTRY POINT TO TTY PUNCH ROUTINE | |
431 | /OR TTY PRINT ROUTINE | |
432 | TTYGCH, 0 /ENTRY POINT TO TTY GET CHAR ROUTINE | |
433 | SNA | |
434 | JMS TGCH /ZERO AC-MEANT CALL TO TTYGCH | |
435 | PCH, AND (177 /FORCE TO 7-BIT | |
436 | DCA TCHAR | |
437 | TAD TGCH | |
438 | M140, SZA CLA /ARE WE ECHOING? | |
439 | JMP ECHO /YES, IGNORE ^S AND STUFF | |
440 | K5, 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 | |
454 | L15, 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 | > | |
464 | NOPAUS, 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 | |
471 | TTCTLQ, JMS TTYTST | |
472 | TAD (203-221 /NO, NOTHING ELSE MATTERS UNTIL ^Q | |
473 | SZA CLA /^Q? | |
474 | JMP TTCTLQ /NO, SUSPEND OUTPUTTING | |
475 | TTY32, KKCC /YES, REMOVE ^Q FROM BUFFER | |
476 | /HAD NO ROOM FOR: | |
477 | / TAD LINSYZ | |
478 | / DCA LINCNT | |
479 | ECHO, 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 | |
488 | L44, 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 | > | |
502 | TTY100, CLL | |
503 | TTY10, TAD K5 | |
504 | TTY240, SZA /TAB? | |
505 | JMP NOTAB | |
506 | IFNZRO SIMTAB < | |
507 | TTYTAB, TAD TTY240 | |
508 | JMS TTYTLS | |
509 | TTY7, 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 < | |
529 | RUBO, 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 | |
545 | TTYQUO, "' | |
546 | TAD TTYQUO /YES | |
547 | JMS TTYTLS /PRINT QUOTE | |
548 | TAD M40 | |
549 | JMP PRIN /PRINT UPPER CASE OF CHAR | |
550 | > | |
551 | NOLC, TAD TCHAR /NO, GET BACK CHAR | |
552 | AND TTY140 /HIGH ORDER BITS IRRELEVANT | |
553 | IFNZRO CTRL < | |
554 | M40, 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 | > | |
564 | PRIN, TAD TCHAR | |
565 | JMS TTYTLS | |
566 | TTYCTO, TAD TABCTR /RETURN TABCNT IN AC | |
567 | JMP I TTYPCH | |
568 | ||
569 | IFZERO CTRL < | |
570 | M40, -40 | |
571 | > | |
572 | ||
573 | TTY140, | |
574 | SPCHR, STA CLL | |
575 | TAD LINSIZ | |
576 | PREPRN, 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 | |
589 | TTYAND, 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 | ||
609 | TABCTR, -110 | |
610 | ||
611 | TTYTLS, 0 | |
612 | TTLS | |
613 | IFNZRO DELAY < | |
614 | TAD (-DELAY | |
615 | SZA CLA | |
616 | STA | |
617 | > | |
618 | TTYTSF, 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 | |
626 | TTYUPA, "^ | |
627 | TT7600, 7600 | |
628 | JMP I TTYTLS | |
629 | LINSIZ, -110 | |
630 | ||
631 | IFNZRO PAUS < | |
632 | LINSYZ, -HEIGHT | |
633 | LINCNT, -HEIGHT | |
634 | PAUSN, -PAUS | |
635 | > | |
636 | ||
637 | IFNZRO ALTMOD < | |
638 | IFNZRO KKCC-6032 < | |
639 | CONV, CLA | |
640 | TAD (33 | |
641 | JMP I TTYGCH | |
642 | > | |
643 | IFZERO KKCC-6032 < | |
644 | CONV, 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 | ||
655 | TTYTST, 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 | ||
791 | GO, 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 |