1 /17 SUPER TTY HANDLER FOR OS/8 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10 / 11 /COPYRIGHT (C) 1974,1975,1977 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 000000 7777 -1 51 000001 1314 DEVICE KL8E;DEVICE TTY;0;TTY&177+4000;ZBLOCK 2 000002 7005 000003 2424 000004 3100 000005 0000 000006 4176 000007 0000 000010 0000 52 53 /TWO-PAGE TELETYPE HANDLER FOR OS/8 V3. 54 /ON INPUT, RECOGNIZES ^Z, ^C, ^U, RUBOUT 55 /^Z MEANS END OF INPUT, INSERT ^Z IN BUFFER, 56 / PAD WITH ZEROES, AND ECHO "^Z" 57 /^C MEANS ABORT JOB, RETURN TO OS/8 VIA LOC 7600 TO SAVE CORE AND PRINT "^C" 58 /^U MEANS DELETE THE LAST LINE, ALLOW OPERATOR TO RETYPE 59 / (LINE STARTS AT BEGIN OF BUFFER AND IS TERMINATED BY A CR) 60 / A CR GETS ENTERED INTO BUFFER, CAUSES A LF TO ALSO ECHO 61 / AND GET ENTERED INTO BUFFER, BUFFER IS THEN PADDED WITH NULLS. 62 / CONVERTS LC TO UC 63 64 /ON OUTPUT RECOGNIZES ^C, ^O, ^S, ^Q FROM KEYBOARD 65 /^C CAUSES JOB TO ABORT, RETURN TO OS/8 VIA LOCATION 7600 66 / TO SAVE CORE AND PRINT "^C" 67 /^O CAUSES ECHOING BY THE HANDLER TO CEASE 68 / TYPING ANY OTHER CHARACTER RESUMES ECHOING. 69 /^S CAUSES THE HANDLER TO STOP SENDING TO TERMINAL 70 /^Q RESUMES HANDLER SENDING 71 / ^S AND ^Q ARE IGNORED IN OTHER CASES 72 73 /WHENEVER PRINTING CHARACTERS (EITHER ON OUTPUT OR WHEN ECHOING), 74 / IGNORES NULLS 75 / FLAGS LC WITH AN APOSTROPHE 76 / HANDLES TABS CORRECTLY (SEVERAL WAYS) 77 / PRINTS ESCAPE AS $ 78 / DELAYS 16 MS AFTER LINEFEEDS 79 / PRINTS CONTROL CHARACTERS AS "^K" 80 81 /DOES AUTOMATIC CR/LF AT END OF LINE WIDTH. 82 83 /MAINTENANCE RELEASE CHANGES: 84 85 /1. ADDED KCC FOR NON-CONSOLE TELETYPES 86 87 /V3D CHANGES: (VERSION E) 88 89 /1. ADDED DELAY OPTION FOR VT78 90 /2. ADDED SCOPE RUBOUTS 91 /3. CHANGED VT78 DEFAULTS 92 /4. REARRANGED CODE FOR SET TTY ESC AND ARROW 93 INDVC=03 94 OUTDVC=04 95 96 KSF=10^INDVC+6001 97 KCC=10^INDVC+6002 98 KRS=10^INDVC+6004 99 KRB=KCC KRS 100 TSF=10^OUTDVC+6001 101 TCF=10^OUTDVC+6002 102 TPC=10^OUTDVC+6004 103 TLS=TCF TPC 104 105 TTYVERSION="E&77 106 /BUILD YOUR OWN TELETYPE HANDLER: 107 108 /THIS SOURCE HAS MUMBLE LOCATIONS LEFT. 109 110 /THE FOLLOWING CONDITIONALS ALLOW YOU TO INCLUDE OPTIONAL FEATURES. 111 /YOU MAY INCLUDE AS MANY OR AS FEW AS YOU DESIRE PROVIDED THERE 112 /IS ROOM LEFT. 113 114 /CONDITIONAL LOCATIONS LOCATIONS INCLUDED 115 /VARIABLE PAGE 1 PAGE 2 FEATURES 116 117 / DELAY 0 7 DELAY AFTER GIVEN CHAR 118 / CTRL 0 3 PRINT CONTROL CHARS AS ^K 119 / RUB 0 0 PRINT CHAR RUBBED OUT ON RUBOUTS 120 / SIMTAB 0 10 SIMULATE TABS AS SPACES 121 / SLOTAB 0 6 PUT OUT 2 RUBOUTS AFTER A TAB 122 / ESC 0 10 PRINT ESCAPE AS $ 123 / FLAGLC 0 12 FLAG LOWER CASE CHARS ON OUTPUT 124 / CNVLC 0 7 CONVERT LOWER CASE ON INPUT TO UPPER CASE 125 / ALTMOD 0 11 CONVERT ALTMODES (175,176) TO ESCAPE (33) 126 / PAUS 0 20 PAUSE BETWEEN PAGES 127 / FREE LOCS: 2 33 128 129 VT78=1 /SET TO 0 TO ALLOW OTHER PARAMETERS 130 /SET TO 1 TO FORCE OTHER PARAMETERS TO VT78 COMPATIBLE 131 132 DELAY=0 /SET NON-ZERO TO ALLOW DELAY AFTER ANY CHAR (12=CR) 133 /TYPICALLY AFTER LF FOR HIGH SPEED VT05 134 /SET VALUE OF DELAY = 7-BIT CHAR TO DELAY AFTER 135 136 CTRL=1 /SET TO 1 TO ECHO CONTROL CHARS AS ^K 137 /SET TO 0 TO ACCEPT CONTROL CHARACTERS AND PUT 138 /IN BUFFER, BUT NOT ECHO THEM (EXCEPT THE USUAL) 139 RUB=1 /SET TO 0 TO ECHO EACH RUBOUT BY TYPING A BACK SLASH 140 /SET TO 1 TO ECHO CHARS RUBBED OUT UPON RUB-OUT 141 /SET TO 4000 TO PERFORM SCOPE TYPE RUBOUTS 142 SIMTAB=1 /SET TO 1 TO SIMULATE TABS AS THE CORRECT NUMBER OF SPACES 143 /SET TO 0 TO TYPE TABS AS TABS 144 SLOTAB=0 /SET TO 1 TO TYPE 2 RUBOUTS AFTER A TAB 145 /ONLY IS APPLICABLE IF SIMTAB=0 146 ALTMOD=0 /SET TO 1 TO CONVERT 175,176 TO 33 147 /(UPPER CASE TERMINALS ONLY) 148 ESC=1 /SET TO 1 TO ECHO ESCAPE AS $ 149 /SET TO 0 TO ECHO ESCAPE AS A CONTROL CHAR (^[) 150 FLAGLC=1 /SET TO 1 TO FLAG LOWER CASE CHARS ON OUTPUT 151 /THIS IS FOR PEOPLE NOT PRIVELIDGED ENOUGH TO 152 /OWN A LOWER CASE TERMINAL 153 /SET TO 0 TO PRINT LOWER CASE CHARS AS IS 154 CNVLC=0 /SET TO 1 TO CONVERT LOWER CASE CHARS ON INPUT TO UPPER CASE 155 /SET TO 0 TO ACCEPT INPUTTED LOWER CASE CHARS AS IS 156 /THIS IS FOR PEOPLE WHO ARE HANDICAPPED BY A LOWER CASE 157 /TERMINAL AND ONLY WANT UPPER CASE 158 PAUS=200 /NON-0 PAUSES BETWEEN SCOPE PAGES 159 HEIGHT=30 /NUMBER OF LINES PER SCREEN 160 161 /SOME OF THE ABOVE OPTIONS SHOULD ACTUALLY BE IMPLEMENTED 162 /IN SUCH A MANNER THAT THE USER CAN CHANGE THEM VIA AN ALTER 163 /RATHER THAN HAVE TO REASSEMBLE. 164 165 IFNZRO VT78 < 166 DELAY=0 167 CTRL=1 168 RUB=4000 169 SIMTAB=0 170 SLOTAB=0 171 ALTMOD=0 172 ESC=1 173 FLAGLC=0 174 CNVLC=0 175 IFNZRO INDVC-3 176 > 177 /CROSS PAGE LINKAGE: 178 179 /THIS CODE MUST BE ABLE TO LOAD INTO ANY TWO PAGES OF CORE 180 /THE ENTRY POINT IS AT THE NEXT LOCATION TO THE END OF THE FIRST PAGE 181 /AT THE END OF THE FIRST PAGE WE JMS TO PLINK, 182 /THIS LEAVES THE ADDRESS OF THE FIRST LOCATION OF THE NEXT PAGE 183 /IN LOCATION 'PLINK' . THIS JUST HAPPENS TO BE THE ADDRESS 184 /OF BOTH TTYPCH AND TTYGCH. 185 186 /TTYPCH AND TTYGCH SHARE THE SAME ENTRY POINT. 187 /IF IT IS CALLED WITH A 0 AC, IT IS A CALL TO TTYGCH, 188 /IF IT IS CALLED WITH A NON-ZERO AC, IT IS A CALL TO TTYPCH. 189 190 /RETURN 1 MEANS GOT RUBOUT 191 /TTYGCH TAKES RETURN 2 IF IT GOT A ^Z. 192 /OTHERWISE IT TAKES RETURN 3 WITH CHARACTER GOTTEN IN AC. 193 194 /TTYPCH TAKES RETURN 1 IF IT WANTS THE HANDLER TO GO AWAY, 195 /I.E IF IT SAW A ^Z. 196 /AC IS NORMALLY NON-ZERO UPON RETURN 197 /AC IS POSITIVE MEANS DO A CRLF 198 199 /WHEN ECHOING WE WANT TO CALL TTYPRT 200 /BUT OTHERWISE WE WANT TO CALL TTYPCH (WHICH DOES ADDITIONAL 201 /STUFF LIKE CHECK ^O, ^Q, ETC. 202 /WE TELL BY WHETHER OR NOT TTYGCH HAD BEEN PREVIOUSLY CALLED. 203 *200 204 205 000200 0000 PLINK, 0 /GETS ADDRESS OF TTYPCH AND TTYGCH (START OF NEXT PAGE) 206 000201 7330 STL CLA RAR /4000 207 000202 1776 TAD I TTY /RETRIEVE FUNCTION WORD, BUT PUT R/W BIT IN LINK 208 000203 0353 AND L3700 /EXTRACT NUMBER OF DOUBLE-WORDS TO TRANSFER 209 000204 7040 CMA /GET COUNT+1 210 000205 3260 DCA BUFSIZ /STORE AWAY 211 000206 6214 RDF /FIND OUT THE USER'S DATA FIELD 212 000207 1354 TAD CIFCDF /FORM OUR EXIT CIF CDF 213 000210 3254 DCA TTYXIT /STORE AWAY FOR EXIT ROUTINE 214 000211 1262 TAD TTY70 /GET FUNCTION WORD 215 000212 0776 L776, AND I TTY /ISOLATE FIELD OF BUFFER 216 000213 1355 TAD TTYCDF /FORM CDF TO FIELD OF BUFFER 217 000214 3222 DCA TTCDBF /STORE WHERE IT WILL BE USEFUL 218 /AT SAME TIME, INITIALIZE TTYEOF 219 000215 2376 ISZ TTY /POINT TO BUFFER ADDRESS 220 000216 1776 TAD I TTY /AND GET IT 221 000217 3261 DCA BUFSTRT /AND SAVE IT 222 000220 2376 ISZ TTY /POINT TO BLOCK # 223 000221 2376 TTY376, ISZ TTY /POINT TO ERROR RETURN 224 SHIFT, /OUTPUT SHIFT REGISTER 225 TTYEOF, /0 IF SAW CR OR ^Z AND WISH TO PAD BUFFER WITH 0'S 226 000222 7402 TTCDBF, HLT /CDF BUFFER FIELD 227 000223 5247 JMP TTYKLG 228 000224 7620 TTYLP, SNL CLA /LINK=1 MEANS OUTPUT 229 000225 5304 JMP TTYGET /INPUT IS FROM TTY: 230 /LINK MUST BE SET FIRST TIME THROUGH HERE. 231 /IT ACTS AS A GUARD BIT IN THE SHIFT REGISTER 232 000226 7006 ROTL, RTL 233 000227 7006 RTL 234 000230 7510 SPA /DO WE HAVE 8 BITS SHIFTED IN? 235 000231 5245 JMP TELP 236 000232 3222 DCA SHIFT /SAVE SHIFT REGISTER 237 000233 1661 TAD I BUFSTRT 238 000234 7440 SZA 239 000235 4263 JMS PUNCH /PRINT A CHARACTER 240 000236 1661 TAD I BUFSTRT 241 000237 2261 ISZ BUFSTRT /BUMP INPUT POINTER 242 000240 7400 TT7400, 7400 /PROTECT ISZ 243 000241 0240 AND TT7400 244 000242 7104 CLL RAL 245 000243 1222 TAD SHIFT /SHIFT HIGH ORDER 4 BITS INTO 246 000244 5226 JMP ROTL /SHIFT REGISTER 247 000245 4263 TELP, JMS PUNCH /PRINT 3RD CHARACTER OF DOUBLE-WORD 248 000246 7120 STL /***KLUDGE 249 000247 2260 TTYKLG, ISZ BUFSIZ /DONE? 250 000250 5224 JMP TTYLP /NOT YET 251 000251 1222 TTYX, TAD TTYEOF /IF INPUT AND WE WERE PADDING WITH 0'S 252 000252 7640 SZA CLA /TAKE SOFT ERROR EXIT 253 000253 2376 TTYRTN, ISZ TTY /POINT TO NORMAL RETURN 254 /CAN'T GET ERROR OR END-OF-FILE ON OUTPUT 255 000254 7402 TTYXIT, HLT /RETURN TO USER'S FIELD 256 000255 5776 JMP I TTY /RETURN TO USER 257 000256 0000 TTYCA, 0 258 000257 0000 TTYWC, 0 259 000260 0000 BUFSIZ, 0 260 000261 0000 BUFSTRT,0 261 000262 0070 TTY70, 70 262 263 000263 0000 PUNCH, 0 /NEVER CALL TTYPCH WITH ZERO AC 264 000264 4600 JMS I PLINK /CALL TTYPCH 265 000265 5253 JMP TTYRTN /GO AWAY, WE SAW A ^Z 266 000266 7700 L7700, SMA CLA /DID WE REACH END OF TTY LINE? 267 000267 4271 JMS CRLF /YES, PERFORM CR/LF 268 000270 5663 JMP I PUNCH /RETURN 269 270 TMP, 271 000271 0000 CRLF, 0 272 000272 1274 TAD L215 273 000273 4600 JMS I PLINK /CALL TTYPCH TO PRINT CR 274 000274 0215 L215, 215 /CAN'T RETURN HERE 275 000275 7200 CLA /**** 276 000276 1300 TAD L212 277 000277 4600 JMS I PLINK /CALL TTYPCH TO PRINT LF 278 000300 0212 L212, 212 /CAN'T RETURN HERE 279 000301 7200 CLA /**** 280 000302 5671 JMP I CRLF /RETURN 281 000303 4271 CTRLU, JMS CRLF /PERFORM A CR/LF 282 000304 1261 TTYGET, TAD BUFSTRT 283 000305 3256 DCA TTYCA /POINT TO START OF BUFFER 284 000306 1260 TAD BUFSIZ 285 000307 7104 CLL RAL /CONVERT DOUBLE-WORDS TO WORDS 286 000310 3257 DCAWC, DCA TTYWC /SET SIZE OF BUFFER 287 000311 1222 TSTEND, TAD TTYEOF 288 000312 7650 SNA CLA 289 000313 5316 JMP ZERO 290 000314 4600 JMS I PLINK /CALL TTYGCH TO GET A CHARACTER 291 000315 5356 JMP RUBOUT /RETURN 1 MEANS SAW RUBOUT 292 000316 3656 ZERO, DCA I TTYCA /RETURN 2 MEANS GOT CHARACTER 293 /STORE AWAY TEMPORARILY 294 /USING USER'S BUFFER AS A TEMP LOCATION 295 000317 1656 TAD I TTYCA /GET BACK CHARACTER 296 IFNZRO .-320 <_ERROR> 297 000320 7440 SZA 298 000321 4263 JMS PUNCH /ECHO IT 299 000322 1656 TAD I TTYCA /GET IT AGAIN 300 000323 1351 TAD M32 /-^Z 301 000324 7450 SNA 302 000325 5346 JMP CTRLZ 303 000326 1352 TAD L5 /^Z-^U 304 000327 7450 SNA /IS IT ^U? 305 000330 5303 JMP CTRLU /YES 306 000331 1334 TAD L7 307 000332 3271 GRUDGE, DCA TMP 308 000333 2256 ISZ TTYCA /NO 309 000334 0007 L7, 7 310 000335 2257 ISZ TTYWC /IS BUFFER FULL? 311 000336 7410 TT10, SKP 312 000337 5251 JMP TTYX 313 000340 2271 ISZ TMP /WAS LAST CHAR A CR? 314 000341 5311 JMP TSTEND /NO 315 000342 3222 DCA TTYEOF /YES, SET "PAD WITH 0'S" FLAG 316 000343 2376 ISZ TTY /POINT TO NORMAL RETURN 317 /CR IS NOT AN ERROR OR END-OF-FILE 318 000344 1300 TAD L212 /IF LAST CHAR INPUT WAS CR, NOW PRETEND LF WAS INPUT 319 000345 5316 JMP ZERO /REJOIN PROCESSING 320 321 000346 3222 CTRLZ, DCA TTYEOF 322 000347 4271 JMS CRLF 323 000350 5332 JMP GRUDGE 324 325 000351 7746 M32, -32 326 000352 0005 L5, 5 327 000353 3700 L3700, 3700 328 000354 6203 CIFCDF, CIF CDF 0 329 000355 6201 TTYCDF, CDF 0 330 331 /TTYEOF IS ZERO MEANS PAD BUFFER WITH ZEROES 332 /DON'T DO YET: 333 /RUBOUT, AND TTYWC /177 IN AC 334 / SNA CLA 335 / JMP CTRLU 336 337 000356 6032 RUBOUT, KCC /TTYGCH DOESN'T CLEAR RO FROM BUFFER 338 000357 1256 TAD TTYCA 339 000360 7041 CIA 340 000361 1261 TAD BUFSTRT 341 000362 7650 SNA CLA /ARE WE AT BEGIN OF BUFFER? 342 000363 5303 JMP CTRLU /YES 343 000364 7240 STA 344 000365 1256 TAD TTYCA 345 000366 3256 DCA TTYCA 346 IFZERO RUB < 347 LSLASH, "\ 348 TAD LSLASH /PRINT A BACK SLASH FOR EACH RUBBED OUT CHAR 349 > 350 IFNZRO RUB&4000+RUB /PRINT CHAR JUST DELETED 351 000367 1336 IFNZRO RUB&4000 /BACKSPACE-SPACE-BACKSPACE 352 000370 4263 JMS PUNCH 353 000371 7240 STA 354 000372 1257 TAD TTYWC 355 000373 5310 JMP DCAWC /BUMP BACK WC AND GET ANOTHER CHAR 356 357 000374 0000 ZBLOCK 376-. 000375 0000 358 000376 0005 TTY, TTYVERSION /ENTRY POINT TO HANDLER 359 000377 4200 JMS PLINK /SET UP CROSS PAGE LINKAGE 360 IFNZRO TTY-376 361 PAGE 362 /INTERLUDE: 363 364 /USA STANDARD CODE FOR INFORMATION INTERCHANGE: 365 366 / 000 001 010 011 100 101 110 111 367 / 368 / 0000 NUL DLE SP 0 @ P ' 'P 369 / 370 / 0001 SOH DC1 ! 1 A Q 'A 'Q 371 / 372 / 0010 STX DC2 " 2 B R 'B 'R 373 / 374 / 0011 ETX DC3 # 3 C S 'C 'S 375 / 376 / 0100 EOT DC4 $ 4 D T 'D 'T 377 / 378 / 0101 ENQ NAK % 5 E U 'E 'U 379 / 380 / 0110 ACK SYN & 6 F V 'F 'V 381 / 382 / 0111 BEL ETB ' 7 G W 'G 'W 383 / 384 / 1000 BS CAN ( 8 H X 'H 'X 385 / 386 / 1001 HT EM ) 9 I Y 'I 'Y 387 / 388 / 1010 LF SUB * : J Z 'J 'Z 389 / 390 / 1011 VT ESC + ; K [ 'K '[ 391 / 392 / 1100 FF FS , < L \ 'L '\ 393 / 394 / 1101 CR GS - = M ] 'M '] 395 / 396 / 1110 SO RS . > N ^ 'N '^ 397 / 398 / 1111 SI US / ? O _ 'O '_ 399 / 400 /TTYGCH: GETS A CHAR FROM KBD 401 / IF GOT ^Z, IT SETS TTYEOF FLAG 402 / LEAVES IT IN AC IN 7-BIT 403 404 /TTYPRT: PRINTS CHAR IN AC ON TTY 405 / IGNORES NULLS 406 / PRINTS ^X ON CONTROL CHARS (EXCEPT CR, LF, FF, VT, TAB) 407 / PRINTS 'X ON LOWER CASE 408 409 /HANDLES TABS CORRECTLY 410 / AND AUTOMATICALLY PRINTS CR/LF AT EOL 411 / PRINTS ESCAPE AS $ 412 413 /TTYTLS: USED TO ACTUALLY PRINT CHAR 414 / IT HANDLES TABS AUTOMATICALLY 415 / AND CR/LF'S AT END OF LINE 416 417 /TTYPCH: IT USES TTYPRT TO PRINT CHAR BUT ALSO RESPONDS TO 418 / ^C, ^O, ^S, ^Q. 419 / IF ^Z IS BEING PRINTED, IT THEN STOPS FURTHER PRINTING 420 /MUST BE AT TOP OF PAGE 421 TTYPCH, /ENTRY POINT TO TTY PUNCH ROUTINE 422 /OR TTY PRINT ROUTINE 423 000400 0000 TTYGCH, 0 /ENTRY POINT TO TTY GET CHAR ROUTINE 424 000401 7450 SNA 425 000402 4323 JMS TGCH /ZERO AC-MEANT CALL TO TTYGCH 426 000403 0377 PCH, AND (177 /FORCE TO 7-BIT 427 000404 3353 DCA TCHAR 428 000405 1323 TAD TGCH 429 000406 7640 M140, SZA CLA /ARE WE ECHOING? 430 000407 5246 JMP ECHO /YES, IGNORE ^S AND STUFF 431 000410 0005 K5, 5 /MUST BE AT REL 10 432 000411 1353 TAD TCHAR 433 000412 1376 TAD (-32 434 IFZERO PAUS < 435 SNA CLA 436 JMP I TTYPCH 437 > 438 IFNZRO PAUS < 439 000413 7450 SNA 440 000414 5600 JMP I TTYPCH 441 000415 1221 TAD L15 /32-15 442 000416 7650 SNA CLA /LOOK FOR CR 443 000417 2351 ISZ LINCNT /AT END OF PAGE? 444 000420 5232 JMP NOPAUS /NOT AT CR, OR AT CR BUT NOT AT END OF PAGE 445 000421 0015 L15, 15 /MUST BE HERE FOR SET 446 000422 1352 TAD PAUSN 447 000423 3337 DCA TTYTLS /SET COUNT FOR OUTER LOOP 448 000424 2351 ISZ LINCNT 449 000425 5224 JMP .-1 450 000426 2337 ISZ TTYTLS 451 000427 5224 JMP .-3 452 000430 1350 TAD LINSYZ 453 000431 3351 DCA LINCNT 454 > 455 000432 4354 NOPAUS, JMS TTYTST 456 000433 1375 TAD (203-217 /NO 457 000434 7450 SNA /^O? 458 000435 3353 DCA TCHAR /YES, SET TO NULL SO IT WILL BE IGNORED 459 000436 1374 TAD (217-223 /NO 460 000437 7640 SZA CLA /^S? 461 000440 5246 JMP ECHO /NO, IGNORE CHAR 462 000441 4354 TTCTLQ, JMS TTYTST 463 000442 1373 TAD (203-221 /NO, NOTHING ELSE MATTERS UNTIL ^Q 464 000443 7640 SZA CLA /^Q? 465 000444 5241 JMP TTCTLQ /NO, SUSPEND OUTPUTTING 466 000445 6032 TTY32, KCC /YES, REMOVE ^Q FROM BUFFER 467 /HAD NO ROOM FOR: 468 / TAD LINSYZ 469 / DCA LINCNT 470 000446 3323 ECHO, DCA TGCH 471 000447 2200 ISZ TTYPCH 472 IFNZRO ESC < 473 000450 1353 TAD TCHAR 474 000451 1372 TAD (-33 475 000452 7640 SZA CLA 476 000453 5256 JMP .+3 477 000454 1256 TAD L44 478 000455 3353 DCA TCHAR 479 000456 0044 L44, 44 480 > 481 000457 1353 TAD TCHAR 482 000460 7450 SNA 483 000461 5315 JMP TTYCTO /IGNORE NULLS 484 IFNZRO RUB&4000 < 485 000462 1371 TAD (-10 486 000463 7450 SNA 487 000464 5273 JMP RUBO 488 000465 1370 TAD (10-16 489 > 490 IFZERO RUB&4000 < 491 TAD (-16 492 > 493 000466 7100 TTY100, CLL 494 000467 1210 TTY10, TAD K5 495 000470 7440 TTY240, SZA /TAB? 496 000471 5302 JMP NOTAB 497 IFNZRO SIMTAB < 498 TTYTAB, TAD TTY240 499 JMS TTYTLS 500 TTY7, 7 /HERE FOR NO SPECIAL REASON 501 TAD TABCTR 502 AND TTY7 503 SZA CLA 504 JMP TTYTAB 505 JMP TTYCTO 506 > 507 IFNZRO SLOTAB < 508 TAD TCHAR 509 JMS TTYTLS 510 TAD (177 511 JMS TTYTLS 512 TAD (177 513 JMP PRIN+1 514 > 515 000472 5313 IFZERO SIMTAB+SLOTAB 516 517 /BUG: IF HARDWARE TABS, DON'T COUNT COLUMNS CORRECTLY 518 519 IFNZRO RUB&4000 < 520 000473 1267 RUBO, TAD TTY10 /OUTPUT BACKSPACE-RUBOUT-BACKSPACE 521 000474 4337 JMS TTYTLS 522 000475 1270 TAD TTY240 523 000476 4337 JMS TTYTLS 524 000477 1374 TAD (-4 525 000500 1336 TAD TABCTR 526 000501 5321 JMP PREPRN 527 > 528 000502 7630 NOTAB, SZL CLA 529 000503 5317 JMP SPCHR /DON'T UPARROW CHARS LF,CR,TAB,VT,FF 530 IFNZRO FLAGLC < 531 TAD TCHAR 532 AND TTY140 533 TAD M140 534 SZA CLA /IS IT LC? 535 JMP NOLC /NO 536 TTYQUO, "' 537 TAD TTYQUO /YES 538 JMS TTYTLS /PRINT QUOTE 539 TAD M40 540 JMP PRIN /PRINT UPPER CASE OF CHAR 541 > 542 000504 1353 NOLC, TAD TCHAR /NO, GET BACK CHAR 543 000505 0317 AND TTY140 /HIGH ORDER BITS IRRELEVANT 544 IFNZRO CTRL < 545 000506 7740 M40, SMA SZA CLA /CAN'T BE NEGATIVE 546 000507 5313 JMP PRIN /NOT A CONTROL CHARACTER 547 000510 1344 TAD TTYUPA /ECHO 201-237 AS ^X (EXCEPT 211-215) 548 000511 4337 JMS TTYTLS 549 000512 1266 TAD TTY100 /ADD X100 TO ^K TO GET K 550 > 551 IFZERO CTRL < 552 SNA CLA /IS CHAR A CONTROL CHAR? 553 JMP TTYCTO /YES, DON'T ECHO CONTROL CHARACTERS EXCEPT FOR 211-215 554 > 555 000513 1353 PRIN, TAD TCHAR 556 000514 4337 JMS TTYTLS 557 000515 1336 TTYCTO, TAD TABCTR /RETURN TABCNT IN AC 558 000516 5600 JMP I TTYPCH 559 560 IFZERO CTRL < 561 M40, -40 562 > 563 564 TTY140, 565 000517 7340 SPCHR, STA CLL 566 000520 1347 TAD LINSIZ 567 000521 3336 PREPRN, DCA TABCTR /THESE CHARS RESET COLUMN COUNTER 568 000522 5313 JMP PRIN 569 000523 0000 TGCH, 0 /NON-ZERO MEANS TTYGCH WAS CALLED 570 000524 6031 KSF 571 000525 5324 JMP .-1 /WAIT FOR CHAR TO BE TYPED 572 000526 4354 JMS TTYTST 573 /WILD: (DON'T PUT IN) SZA CLA /FALL THRU AND RETURN R.O. 574 / ISZ TTYGCH 575 000527 1367 TAD (203-377 576 000530 7650 SNA CLA /TAKE RETURN 1 ON RUB OUT 577 000531 5600 JMP I TTYGCH /"CLUMSY" - R.L. (9/18/73) 578 000532 2200 ISZ TTYGCH 579 000533 6036 KRB /GET CHARACTER 580 000534 0377 TTYAND, AND (177 /MUST RETURN CHAR IN 7-BIT 581 IFNZRO CNVLC < 582 DCA TCHAR 583 TAD TCHAR 584 AND TTY140 585 TAD M140 586 SNA CLA /IS IT LC? 587 TAD M40 /YES 588 TAD TCHAR /NO 589 > 590 IFNZRO ALTMOD < 591 TAD (-175 /IS IT 175 OR 176? 592 SMA 593 JMP CONV /YES, CONVERT ALTMODE TO ESCAPE 594 TAD (175 /NO, RESTORE CHAR 595 > 596 000535 5600 JMP I TTYGCH /TAKE RETURN 3 597 598 /SHOULDN'T TABCTR BE INITIALIZED TO C(LINSIZ) UPON ENTRY? 599 600 000536 7670 TABCTR, -110 601 602 000537 0000 TTYTLS, 0 603 000540 6046 TLS 604 IFNZRO DELAY < 605 TAD (-DELAY 606 SZA CLA 607 STA 608 > 609 000541 6041 TTYTSF, TSF 610 000542 5341 JMP .-1 611 IFNZRO DELAY < 612 IAC 613 SZA /19.66 MS IS G.T. 1/60 SEC 614 JMP TTYTSF 615 > 616 000543 2336 ISZ TABCTR 617 000544 0336 TTYUPA, "^ 618 000545 7600 TT7600, 7600 619 000546 5737 JMP I TTYTLS 620 000547 7670 LINSIZ, -110 621 622 IFNZRO PAUS < 623 000550 7750 LINSYZ, -HEIGHT 624 000551 7750 LINCNT, -HEIGHT 625 000552 7600 PAUSN, -PAUS 626 > 627 628 IFNZRO ALTMOD < 629 IFNZRO KCC-6032 < 630 CONV, CLA 631 TAD (33 632 JMP I TTYGCH 633 > 634 IFZERO KCC-6032 < 635 CONV, CLA IAC 636 TAD TTY32 /DEVICE DEPENDENT 637 JMP TTYAND 638 > 639 > 640 000553 0000 TCHAR, 0 641 642 /TTYTST: READS KEYBOARD STATICALLY AND RESPONDS TO ^C 643 / OTHERWISE RETURNS CHAR (8-BIT) MINUS 203 IN AC. 644 / IF FLAG IS NOT UP, IT RETURNS A 1. 645 646 000554 0000 TTYTST, 0 647 000555 1345 TAD TT7600 /OR CHAR IN 648 000556 6034 KRS 649 000557 1366 TAD (-7603 /-7603=175 650 000560 6031 KSF 651 000561 7201 CLA IAC /STUFF IN BUFFER IS UNRELIABLE IF FLAG ISN'T UP 652 000562 7440 SZA 653 000563 5754 JMP I TTYTST 654 IFNZRO INDVC-3 655 000564 6203 CIF CDF 0 /BRANCH TO OS/8 MONITOR AT 07600 656 000565 5745 JMP I TT7600 /IT WILL PRINT "^C" FOR CHAR IN BUFFER 657 000566 0175 PAGE 000567 7604 000570 7772 000571 7770 000572 7745 000573 7762 000574 7774 000575 7764 000576 7746 000577 0177 658 / DYNAMICALLY MODIFYING THE KL8E HANDLER 659 660 / *** I M P O R T A N T *** 661 662 / THIS HANDLER CAN BE DYNAMICALLY CHANGED VIA SET COMMANDS. 663 / CONSEQUENTLY, IT IS EXTREMELY IMPORTANT THAT PEOPLE 664 / WHO MODIFY THIS SOURCE DO NOT AFFECT THE ALGORITHMS 665 / NECESSARY TO PERFORM SUCH MODIFICATIONS. 666 667 / THIS ALGORITHM IS EXPLAINED BELOW. 668 669 / SET TTY WIDTH=N 670 671 / SEARCH LOCATIONS 200-377 FOR A 7600. CALL ITS ADDRESS X. 672 / LET Y BE THE INSTRUCTION AT LOCATION X+1. 673 / FORM THE (RELATIVE) ADDRESS T=Y&177+200-1. 674 / THEN LOCATIONS T AND X+2 CONTAIN MINUS THE TTY WIDTH. 675 / THE WIDTH MUST BE A MULTIPLE OF 10 AND MUST NOT BE 200. 676 / (BECAUSE -200 IS THE MAGIC 7600) 677 678 / SET TTY CODE XX 679 680 / SEARCH ENTIRE HANDLER FOR INSTRUCTIONS OF THE FORM 6XXY 681 / WHERE XX IS NOT 20 OR 21, 682 / AND FURTHERMORE DON'T INCLUDE A 6031 IF 2 LOCATIONS 683 / FOLLOWING IS A 7650 684 / AND DON'T INCLUDE A 6034 IF 4 LOCATIONS FOLLOWING IS A 7650. 685 686 687 / SET TTY [NO] ECHO 688 689 / THE WORD INVOLVED IS AT (RELATIVE) LOCATION 120. 690 / SET TO 7440 TO ECHO. 691 / SET TO 7610 TO SUPPRESS ECHOING. 692 693 694 / SET TTY LC 695 696 / SEARCH LOCATIONS 200-377 FOR A 377. CALL ITS ADDRESS X. 697 / LOOK AT LOCATION X+5. 698 / IF THIS LOCATION IS NOT A 7650, THEN LC TO UC CONVERSION 699 / WAS NOT ENABLED AT ASSEMBLY TIME. 700 / IF THE FEATURE IS ENABLED, CHANGE LOCATION X+5 TO A 7610 701 / TO PREVENT THE CONVERSION. TO ALLOW CONVERSION, SET 702 / LOCATION X+5 BACK TO 7650. 703 704 / SET TTY PAGE 705 706 / SEARCH LOCATIONS 215-300 FOR A 7450. CALL ITS ADDRESS X. 707 / SET X+3 TO 7640 TO ENABLE ^S, ^Q. 708 / SET X+3 TO 7200 TO DISABLE ^S, ^Q. 709 / SET TTY TAB 710 711 / SEARCH LOCATIONS 200-300 FOR A 7. 712 / IF NOT FOUND, SIMULATED TABS WAS NOT ENABLED AT ASSEMBLY TIME. 713 / IF FOUND, CALL ITS ADDRESS X. 714 / TO PATCH OUT SIMULATED TABS: 715 / MOVE C(X-12) TO LOCATION X-2 716 / CHANGE LOCATION X+3 TO A 7610 717 / TO RESTORE SIMULATED TABS: 718 / SET LOCATION X-2 TO X-4&77+1200 719 / CHANGE LOCATION X+3 TO A 7640 720 721 / SET TTY FILL 722 723 / THE LITERAL 177 MUST REMAIN AT THE END OF PAGE 2 724 / SEARCH LOCATIONS 200-300 FOR A 1377. 725 / IF NOT FOUND, THEN FILL CHARACTERS WERE NOT ENABLED AT ASSEMBLY 726 / TIME. IF FOUND, CALL ITS ADDRESS X. 727 / TO PATCH OUT FILL CHARACTERS, MOVE C(X+3) TO LOCATION X-1. 728 / TO RESTORE FILL CHARACTERS, MOVE C(X+1) TO LOCATION X-1. 729 730 / SET TTY FLAGLC 731 732 / SEARCH LOCATIONS 200-377 FOR A 247. 733 / IF NOT FOUND, LOWER CASE FLAGGING WAS NOT ENABLED AT ASSEMBLY TIME. 734 / IF FOUND, CALL ITS ADDRESS X. 735 / TO DISABLE FLAGGING, SET LOCATION X-2 TO A 7200. 736 / TO RE-ENABLE FLAGGING, SET LOCATION X-2 TO A 7640. 737 738 / SET TTY PAUSE [N] 739 740 / SEARCH LOCATIONS 200-300 FOR A 15. 741 / IF NOT FOUND, PAUSING WAS NOT ENABLED AT ASSEMBLY TIME. 742 / IF FOUND, CALL ITS ADDRESS X. 743 / TO DISABLE PAUSING AFTER A FULL SCREEN, 744 / SET LOCATION X-3 TO A 7610. 745 / TO RE-ENABLE PAUSING, SET LOCATION X-3 TO A 7650. 746 / TO SET PAUSE DURATION, SEARCH LOCATIONS 300-377 FOR A 7600, 747 / CALLING ITS ADDRESS X. THEN (MINUS THE) PAUSE DURATION IS AT 748 / LOCATION X+5. 749 750 / SET TTY HEIGHT 751 752 / THIS IS ONLY APPLICABLE IF SET TTY PAUSE HAS BEEN ASSEMBLED IN 753 / (A 15 CAN BE FOUND ON SECOND PAGE). 754 / NEGATIVE OF HEIGHT MUST BE SET IN BOTH LOCATIONS X+3 AND X+4 755 / WHERE X IS THE ADDRESS OF A 7600 AS IN ABOVE. 756 / SET TTY ESCAPE 757 758 / SEARCH LOCATIONS 200-377 FOR A 44. 759 / IF NOT FOUND, THEN $ WAS NOT ASSEMBLED INTO TTY HANDLER. 760 / IF FOUND, CALL ITS ADDRESS X. 761 / TO DISABLE PRINTING ESCAPE AS $, SET LOCATION X-4 TO A 'CLA'. 762 / TO CAUSE ESCAPE TO PRINT AS AN ESCAPE, SET LOCATION X-4 TO SZA CLA. 763 764 / SET TTY ARROW 765 766 / SEARCH LOCATIONS 200-377 FOR 7740. 767 768 / IF NOT FOUND, USING OLD HANDLER. 769 / CALL ITS ADDRESS X. 770 / IF LOCATION X+1 IS MORE THAN 7000, 771 / THEN UPARROW MODE WAS NOT ASSEMBLED INTO KL8E. 772 / OTHERWISE, TO ALLOW ARROWS, SET LOCATION X+3 TO THE 773 / CONTENTS OF LOCATION X+6. 774 / TO CAUSE CONTROL CHARACTERS TO ECHO AS IS, SET 775 / LOCATION X+3 TO 'SKP CLA'. 776 / NOTE THAT THIS IS A DIFFERENT OPTION THAN ASSEMBLING CTRL=0. 777 IFDEF TEST < 778 *600 779 780 /TEST ROUTINE FOR KL8E HANDLER 781 782 GO, JMS I (TTY /CALL HANDLER 783 0600 /READ SIX PAGES 784 1000 /BUFFER AT 01000 785 0001 /BLOCK 1 786 HLT /ERROR RETURN 787 JMS I (TTY /CALL HANDLER AGAIN 788 4600 /OUTPUT SIX PAGES 789 1000 790 0001 791 HLT 792 CLA 793 JMP GO 794 > 795 $ ALTMOD 0000 BUFSIZ 0260 BUFSTR 0261 CIFCDF 0354 CNVLC 0000 CRLF 0271 CTRL 0001 CTRLU 0303 CTRLZ 0346 DCAWC 0310 DELAY 0000 ECHO 0446 ESC 0001 FLAGLC 0000 GRUDGE 0332 HEIGHT 0030 INDVC 0003 K5 0410 KCC 6032 KRB 6036 KRS 6034 KSF 6031 L15 0421 L212 0300 L215 0274 L3700 0353 L44 0456 L5 0352 L7 0334 L7700 0266 unreferenced L776 0212 unreferenced LINCNT 0551 LINSIZ 0547 LINSYZ 0550 M140 0406 unreferenced M32 0351 M40 0506 unreferenced NOLC 0504 unreferenced NOPAUS 0432 NOTAB 0502 OUTDVC 0004 PAUS 0200 PAUSN 0552 PCH 0403 unreferenced PLINK 0200 PREPRN 0521 PRIN 0513 PUNCH 0263 ROTL 0226 RUB 4000 RUBO 0473 RUBOUT 0356 SHIFT 0222 SIMTAB 0000 SLOTAB 0000 SPCHR 0517 TABCTR 0536 TCF 6042 TCHAR 0553 TELP 0245 TGCH 0523 TLS 6046 TMP 0271 TPC 6044 TSF 6041 TSTEND 0311 TT10 0336 TT7400 0240 TT7600 0545 TTCDBF 0222 TTCTLQ 0441 TTY 0376 TTY10 0467 TTY100 0466 TTY140 0517 TTY240 0470 TTY32 0445 unreferenced TTY376 0221 unreferenced TTY70 0262 TTYAND 0534 unreferenced TTYCA 0256 TTYCDF 0355 TTYCTO 0515 TTYEOF 0222 TTYGCH 0400 TTYGET 0304 TTYKLG 0247 TTYLP 0224 TTYPCH 0400 TTYRTN 0253 TTYTLS 0537 TTYTSF 0541 unreferenced TTYTST 0554 TTYUPA 0544 TTYVER 0005 TTYWC 0257 TTYX 0251 TTYXIT 0254 VT78 0001 ZERO 0316