X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=sw%2Fos8%2Fv3d%2Fsources%2Fsystem%2Fdectapes%2Fdectape4%2FKL8E.PA;fp=sw%2Fos8%2Fv3d%2Fsources%2Fsystem%2Fdectapes%2Fdectape4%2FKL8E.PA;h=e1bddeadaf942c4e07965737e8e617fd2e49c17a;hb=7af5ad59491ddf2066641aef1e0025a337c0f247;hp=0000000000000000000000000000000000000000;hpb=919757fd611e482003ce51f366f6783cab73dea3;p=pdp8.git diff --git a/sw/os8/v3d/sources/system/dectapes/dectape4/KL8E.PA b/sw/os8/v3d/sources/system/dectapes/dectape4/KL8E.PA new file mode 100644 index 0000000..e1bddea --- /dev/null +++ b/sw/os8/v3d/sources/system/dectapes/dectape4/KL8E.PA @@ -0,0 +1,796 @@ +/17 SUPER TTY HANDLER FOR OS/8 +/ +/ +/ +/ +/ +/ +/ +/ +/ +/COPYRIGHT (C) 1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ +/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE +/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT +/CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY +/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. +/ +/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER +/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED +/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH +/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. +/ +/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE +/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY +/DIGITAL. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + +/S.W.,S.R.,H.J.,R.L.,S.R. + + *0 + + -1 + DEVICE KL8E;DEVICE TTY;0;TTY&177+4000;ZBLOCK 2 + +/TWO-PAGE TELETYPE HANDLER FOR OS/8 V3. +/ON INPUT, RECOGNIZES ^Z, ^C, ^U, RUBOUT +/^Z MEANS END OF INPUT, INSERT ^Z IN BUFFER, +/ PAD WITH ZEROES, AND ECHO "^Z" +/^C MEANS ABORT JOB, RETURN TO OS/8 VIA LOC 7600 TO SAVE CORE AND PRINT "^C" +/^U MEANS DELETE THE LAST LINE, ALLOW OPERATOR TO RETYPE +/ (LINE STARTS AT BEGIN OF BUFFER AND IS TERMINATED BY A CR) +/ A CR GETS ENTERED INTO BUFFER, CAUSES A LF TO ALSO ECHO +/ AND GET ENTERED INTO BUFFER, BUFFER IS THEN PADDED WITH NULLS. +/ CONVERTS LC TO UC + +/ON OUTPUT RECOGNIZES ^C, ^O, ^S, ^Q FROM KEYBOARD +/^C CAUSES JOB TO ABORT, RETURN TO OS/8 VIA LOCATION 7600 +/ TO SAVE CORE AND PRINT "^C" +/^O CAUSES ECHOING BY THE HANDLER TO CEASE +/ TYPING ANY OTHER CHARACTER RESUMES ECHOING. +/^S CAUSES THE HANDLER TO STOP SENDING TO TERMINAL +/^Q RESUMES HANDLER SENDING +/ ^S AND ^Q ARE IGNORED IN OTHER CASES + +/WHENEVER PRINTING CHARACTERS (EITHER ON OUTPUT OR WHEN ECHOING), +/ IGNORES NULLS +/ FLAGS LC WITH AN APOSTROPHE +/ HANDLES TABS CORRECTLY (SEVERAL WAYS) +/ PRINTS ESCAPE AS $ +/ DELAYS 16 MS AFTER LINEFEEDS +/ PRINTS CONTROL CHARACTERS AS "^K" + +/DOES AUTOMATIC CR/LF AT END OF LINE WIDTH. + +/MAINTENANCE RELEASE CHANGES: + +/1. ADDED KCC FOR NON-CONSOLE TELETYPES + +/V3D CHANGES: (VERSION E) + +/1. ADDED DELAY OPTION FOR VT78 +/2. ADDED SCOPE RUBOUTS +/3. CHANGED VT78 DEFAULTS +/4. REARRANGED CODE FOR SET TTY ESC AND ARROW + INDVC=03 + OUTDVC=04 + + KSF=10^INDVC+6001 + KCC=10^INDVC+6002 + KRS=10^INDVC+6004 + KRB=KCC KRS + TSF=10^OUTDVC+6001 + TCF=10^OUTDVC+6002 + TPC=10^OUTDVC+6004 + TLS=TCF TPC + + TTYVERSION="E&77 + /BUILD YOUR OWN TELETYPE HANDLER: + +/THIS SOURCE HAS MUMBLE LOCATIONS LEFT. + +/THE FOLLOWING CONDITIONALS ALLOW YOU TO INCLUDE OPTIONAL FEATURES. +/YOU MAY INCLUDE AS MANY OR AS FEW AS YOU DESIRE PROVIDED THERE +/IS ROOM LEFT. + +/CONDITIONAL LOCATIONS LOCATIONS INCLUDED +/VARIABLE PAGE 1 PAGE 2 FEATURES + +/ DELAY 0 7 DELAY AFTER GIVEN CHAR +/ CTRL 0 3 PRINT CONTROL CHARS AS ^K +/ RUB 0 0 PRINT CHAR RUBBED OUT ON RUBOUTS +/ SIMTAB 0 10 SIMULATE TABS AS SPACES +/ SLOTAB 0 6 PUT OUT 2 RUBOUTS AFTER A TAB +/ ESC 0 10 PRINT ESCAPE AS $ +/ FLAGLC 0 12 FLAG LOWER CASE CHARS ON OUTPUT +/ CNVLC 0 7 CONVERT LOWER CASE ON INPUT TO UPPER CASE +/ ALTMOD 0 11 CONVERT ALTMODES (175,176) TO ESCAPE (33) +/ PAUS 0 20 PAUSE BETWEEN PAGES +/ FREE LOCS: 2 33 + + VT78=1 /SET TO 0 TO ALLOW OTHER PARAMETERS + /SET TO 1 TO FORCE OTHER PARAMETERS TO VT78 COMPATIBLE + + DELAY=0 /SET NON-ZERO TO ALLOW DELAY AFTER ANY CHAR (12=CR) + /TYPICALLY AFTER LF FOR HIGH SPEED VT05 + /SET VALUE OF DELAY = 7-BIT CHAR TO DELAY AFTER + + CTRL=1 /SET TO 1 TO ECHO CONTROL CHARS AS ^K + /SET TO 0 TO ACCEPT CONTROL CHARACTERS AND PUT + /IN BUFFER, BUT NOT ECHO THEM (EXCEPT THE USUAL) + RUB=1 /SET TO 0 TO ECHO EACH RUBOUT BY TYPING A BACK SLASH + /SET TO 1 TO ECHO CHARS RUBBED OUT UPON RUB-OUT + /SET TO 4000 TO PERFORM SCOPE TYPE RUBOUTS + SIMTAB=1 /SET TO 1 TO SIMULATE TABS AS THE CORRECT NUMBER OF SPACES + /SET TO 0 TO TYPE TABS AS TABS + SLOTAB=0 /SET TO 1 TO TYPE 2 RUBOUTS AFTER A TAB + /ONLY IS APPLICABLE IF SIMTAB=0 + ALTMOD=0 /SET TO 1 TO CONVERT 175,176 TO 33 + /(UPPER CASE TERMINALS ONLY) + ESC=1 /SET TO 1 TO ECHO ESCAPE AS $ + /SET TO 0 TO ECHO ESCAPE AS A CONTROL CHAR (^[) + FLAGLC=1 /SET TO 1 TO FLAG LOWER CASE CHARS ON OUTPUT + /THIS IS FOR PEOPLE NOT PRIVELIDGED ENOUGH TO + /OWN A LOWER CASE TERMINAL + /SET TO 0 TO PRINT LOWER CASE CHARS AS IS + CNVLC=0 /SET TO 1 TO CONVERT LOWER CASE CHARS ON INPUT TO UPPER CASE + /SET TO 0 TO ACCEPT INPUTTED LOWER CASE CHARS AS IS + /THIS IS FOR PEOPLE WHO ARE HANDICAPPED BY A LOWER CASE + /TERMINAL AND ONLY WANT UPPER CASE + PAUS=200 /NON-0 PAUSES BETWEEN SCOPE PAGES + HEIGHT=30 /NUMBER OF LINES PER SCREEN + +/SOME OF THE ABOVE OPTIONS SHOULD ACTUALLY BE IMPLEMENTED +/IN SUCH A MANNER THAT THE USER CAN CHANGE THEM VIA AN ALTER +/RATHER THAN HAVE TO REASSEMBLE. + + IFNZRO VT78 < + DELAY=0 + CTRL=1 + RUB=4000 + SIMTAB=0 + SLOTAB=0 + ALTMOD=0 + ESC=1 + FLAGLC=0 + CNVLC=0 + IFNZRO INDVC-3 + > + /CROSS PAGE LINKAGE: + +/THIS CODE MUST BE ABLE TO LOAD INTO ANY TWO PAGES OF CORE +/THE ENTRY POINT IS AT THE NEXT LOCATION TO THE END OF THE FIRST PAGE +/AT THE END OF THE FIRST PAGE WE JMS TO PLINK, +/THIS LEAVES THE ADDRESS OF THE FIRST LOCATION OF THE NEXT PAGE +/IN LOCATION 'PLINK' . THIS JUST HAPPENS TO BE THE ADDRESS +/OF BOTH TTYPCH AND TTYGCH. + +/TTYPCH AND TTYGCH SHARE THE SAME ENTRY POINT. +/IF IT IS CALLED WITH A 0 AC, IT IS A CALL TO TTYGCH, +/IF IT IS CALLED WITH A NON-ZERO AC, IT IS A CALL TO TTYPCH. + +/RETURN 1 MEANS GOT RUBOUT +/TTYGCH TAKES RETURN 2 IF IT GOT A ^Z. +/OTHERWISE IT TAKES RETURN 3 WITH CHARACTER GOTTEN IN AC. + +/TTYPCH TAKES RETURN 1 IF IT WANTS THE HANDLER TO GO AWAY, +/I.E IF IT SAW A ^Z. +/AC IS NORMALLY NON-ZERO UPON RETURN +/AC IS POSITIVE MEANS DO A CRLF + +/WHEN ECHOING WE WANT TO CALL TTYPRT +/BUT OTHERWISE WE WANT TO CALL TTYPCH (WHICH DOES ADDITIONAL +/STUFF LIKE CHECK ^O, ^Q, ETC. +/WE TELL BY WHETHER OR NOT TTYGCH HAD BEEN PREVIOUSLY CALLED. + *200 + +PLINK, 0 /GETS ADDRESS OF TTYPCH AND TTYGCH (START OF NEXT PAGE) + STL CLA RAR /4000 + TAD I TTY /RETRIEVE FUNCTION WORD, BUT PUT R/W BIT IN LINK + AND L3700 /EXTRACT NUMBER OF DOUBLE-WORDS TO TRANSFER + CMA /GET COUNT+1 + DCA BUFSIZ /STORE AWAY + RDF /FIND OUT THE USER'S DATA FIELD + TAD CIFCDF /FORM OUR EXIT CIF CDF + DCA TTYXIT /STORE AWAY FOR EXIT ROUTINE + TAD TTY70 /GET FUNCTION WORD +L776, AND I TTY /ISOLATE FIELD OF BUFFER + TAD TTYCDF /FORM CDF TO FIELD OF BUFFER + DCA TTCDBF /STORE WHERE IT WILL BE USEFUL + /AT SAME TIME, INITIALIZE TTYEOF + ISZ TTY /POINT TO BUFFER ADDRESS + TAD I TTY /AND GET IT + DCA BUFSTRT /AND SAVE IT + ISZ TTY /POINT TO BLOCK # +TTY376, ISZ TTY /POINT TO ERROR RETURN +SHIFT, /OUTPUT SHIFT REGISTER +TTYEOF, /0 IF SAW CR OR ^Z AND WISH TO PAD BUFFER WITH 0'S +TTCDBF, HLT /CDF BUFFER FIELD + JMP TTYKLG +TTYLP, SNL CLA /LINK=1 MEANS OUTPUT + JMP TTYGET /INPUT IS FROM TTY: + /LINK MUST BE SET FIRST TIME THROUGH HERE. +/IT ACTS AS A GUARD BIT IN THE SHIFT REGISTER +ROTL, RTL + RTL + SPA /DO WE HAVE 8 BITS SHIFTED IN? + JMP TELP + DCA SHIFT /SAVE SHIFT REGISTER + TAD I BUFSTRT + SZA + JMS PUNCH /PRINT A CHARACTER + TAD I BUFSTRT + ISZ BUFSTRT /BUMP INPUT POINTER +TT7400, 7400 /PROTECT ISZ + AND TT7400 + CLL RAL + TAD SHIFT /SHIFT HIGH ORDER 4 BITS INTO + JMP ROTL /SHIFT REGISTER +TELP, JMS PUNCH /PRINT 3RD CHARACTER OF DOUBLE-WORD + STL /***KLUDGE +TTYKLG, ISZ BUFSIZ /DONE? + JMP TTYLP /NOT YET +TTYX, TAD TTYEOF /IF INPUT AND WE WERE PADDING WITH 0'S + SZA CLA /TAKE SOFT ERROR EXIT +TTYRTN, ISZ TTY /POINT TO NORMAL RETURN + /CAN'T GET ERROR OR END-OF-FILE ON OUTPUT +TTYXIT, HLT /RETURN TO USER'S FIELD + JMP I TTY /RETURN TO USER +TTYCA, 0 +TTYWC, 0 +BUFSIZ, 0 +BUFSTRT,0 +TTY70, 70 + +PUNCH, 0 /NEVER CALL TTYPCH WITH ZERO AC + JMS I PLINK /CALL TTYPCH + JMP TTYRTN /GO AWAY, WE SAW A ^Z +L7700, SMA CLA /DID WE REACH END OF TTY LINE? + JMS CRLF /YES, PERFORM CR/LF + JMP I PUNCH /RETURN + +TMP, +CRLF, 0 + TAD L215 + JMS I PLINK /CALL TTYPCH TO PRINT CR +L215, 215 /CAN'T RETURN HERE + CLA /**** + TAD L212 + JMS I PLINK /CALL TTYPCH TO PRINT LF +L212, 212 /CAN'T RETURN HERE + CLA /**** + JMP I CRLF /RETURN + CTRLU, JMS CRLF /PERFORM A CR/LF +TTYGET, TAD BUFSTRT + DCA TTYCA /POINT TO START OF BUFFER + TAD BUFSIZ + CLL RAL /CONVERT DOUBLE-WORDS TO WORDS +DCAWC, DCA TTYWC /SET SIZE OF BUFFER +TSTEND, TAD TTYEOF + SNA CLA + JMP ZERO + JMS I PLINK /CALL TTYGCH TO GET A CHARACTER + JMP RUBOUT /RETURN 1 MEANS SAW RUBOUT +ZERO, DCA I TTYCA /RETURN 2 MEANS GOT CHARACTER + /STORE AWAY TEMPORARILY + /USING USER'S BUFFER AS A TEMP LOCATION + TAD I TTYCA /GET BACK CHARACTER + IFNZRO .-320 <_ERROR> + SZA + JMS PUNCH /ECHO IT + TAD I TTYCA /GET IT AGAIN + TAD M32 /-^Z + SNA + JMP CTRLZ + TAD L5 /^Z-^U + SNA /IS IT ^U? + JMP CTRLU /YES + TAD L7 +GRUDGE, DCA TMP + ISZ TTYCA /NO +L7, 7 + ISZ TTYWC /IS BUFFER FULL? +TT10, SKP + JMP TTYX + ISZ TMP /WAS LAST CHAR A CR? + JMP TSTEND /NO + DCA TTYEOF /YES, SET "PAD WITH 0'S" FLAG + ISZ TTY /POINT TO NORMAL RETURN + /CR IS NOT AN ERROR OR END-OF-FILE + TAD L212 /IF LAST CHAR INPUT WAS CR, NOW PRETEND LF WAS INPUT + JMP ZERO /REJOIN PROCESSING + +CTRLZ, DCA TTYEOF + JMS CRLF + JMP GRUDGE + +M32, -32 +L5, 5 +L3700, 3700 +CIFCDF, CIF CDF 0 +TTYCDF, CDF 0 + +/TTYEOF IS ZERO MEANS PAD BUFFER WITH ZEROES + /DON'T DO YET: +/RUBOUT, AND TTYWC /177 IN AC +/ SNA CLA +/ JMP CTRLU + +RUBOUT, KCC /TTYGCH DOESN'T CLEAR RO FROM BUFFER + TAD TTYCA + CIA + TAD BUFSTRT + SNA CLA /ARE WE AT BEGIN OF BUFFER? + JMP CTRLU /YES + STA + TAD TTYCA + DCA TTYCA + IFZERO RUB < +LSLASH, "\ + TAD LSLASH /PRINT A BACK SLASH FOR EACH RUBBED OUT CHAR + > + IFNZRO RUB&4000+RUB /PRINT CHAR JUST DELETED + IFNZRO RUB&4000 /BACKSPACE-SPACE-BACKSPACE + JMS PUNCH + STA + TAD TTYWC + JMP DCAWC /BUMP BACK WC AND GET ANOTHER CHAR + + ZBLOCK 376-. +TTY, TTYVERSION /ENTRY POINT TO HANDLER + JMS PLINK /SET UP CROSS PAGE LINKAGE + IFNZRO TTY-376 + PAGE + /INTERLUDE: + +/USA STANDARD CODE FOR INFORMATION INTERCHANGE: + +/ 000 001 010 011 100 101 110 111 +/ +/ 0000 NUL DLE SP 0 @ P ' 'P +/ +/ 0001 SOH DC1 ! 1 A Q 'A 'Q +/ +/ 0010 STX DC2 " 2 B R 'B 'R +/ +/ 0011 ETX DC3 # 3 C S 'C 'S +/ +/ 0100 EOT DC4 $ 4 D T 'D 'T +/ +/ 0101 ENQ NAK % 5 E U 'E 'U +/ +/ 0110 ACK SYN & 6 F V 'F 'V +/ +/ 0111 BEL ETB ' 7 G W 'G 'W +/ +/ 1000 BS CAN ( 8 H X 'H 'X +/ +/ 1001 HT EM ) 9 I Y 'I 'Y +/ +/ 1010 LF SUB * : J Z 'J 'Z +/ +/ 1011 VT ESC + ; K [ 'K '[ +/ +/ 1100 FF FS , < L \ 'L '\ +/ +/ 1101 CR GS - = M ] 'M '] +/ +/ 1110 SO RS . > N ^ 'N '^ +/ +/ 1111 SI US / ? O _ 'O '_ +/ + /TTYGCH: GETS A CHAR FROM KBD +/ IF GOT ^Z, IT SETS TTYEOF FLAG +/ LEAVES IT IN AC IN 7-BIT + +/TTYPRT: PRINTS CHAR IN AC ON TTY +/ IGNORES NULLS +/ PRINTS ^X ON CONTROL CHARS (EXCEPT CR, LF, FF, VT, TAB) +/ PRINTS 'X ON LOWER CASE + +/HANDLES TABS CORRECTLY +/ AND AUTOMATICALLY PRINTS CR/LF AT EOL +/ PRINTS ESCAPE AS $ + +/TTYTLS: USED TO ACTUALLY PRINT CHAR +/ IT HANDLES TABS AUTOMATICALLY +/ AND CR/LF'S AT END OF LINE + +/TTYPCH: IT USES TTYPRT TO PRINT CHAR BUT ALSO RESPONDS TO +/ ^C, ^O, ^S, ^Q. +/ IF ^Z IS BEING PRINTED, IT THEN STOPS FURTHER PRINTING + /MUST BE AT TOP OF PAGE +TTYPCH, /ENTRY POINT TO TTY PUNCH ROUTINE + /OR TTY PRINT ROUTINE +TTYGCH, 0 /ENTRY POINT TO TTY GET CHAR ROUTINE + SNA + JMS TGCH /ZERO AC-MEANT CALL TO TTYGCH +PCH, AND (177 /FORCE TO 7-BIT + DCA TCHAR + TAD TGCH +M140, SZA CLA /ARE WE ECHOING? + JMP ECHO /YES, IGNORE ^S AND STUFF +K5, 5 /MUST BE AT REL 10 + TAD TCHAR + TAD (-32 + IFZERO PAUS < + SNA CLA + JMP I TTYPCH + > + IFNZRO PAUS < + SNA + JMP I TTYPCH + TAD L15 /32-15 + SNA CLA /LOOK FOR CR + ISZ LINCNT /AT END OF PAGE? + JMP NOPAUS /NOT AT CR, OR AT CR BUT NOT AT END OF PAGE +L15, 15 /MUST BE HERE FOR SET + TAD PAUSN + DCA TTYTLS /SET COUNT FOR OUTER LOOP + ISZ LINCNT + JMP .-1 + ISZ TTYTLS + JMP .-3 + TAD LINSYZ + DCA LINCNT + > +NOPAUS, JMS TTYTST + TAD (203-217 /NO + SNA /^O? + DCA TCHAR /YES, SET TO NULL SO IT WILL BE IGNORED + TAD (217-223 /NO + SZA CLA /^S? + JMP ECHO /NO, IGNORE CHAR +TTCTLQ, JMS TTYTST + TAD (203-221 /NO, NOTHING ELSE MATTERS UNTIL ^Q + SZA CLA /^Q? + JMP TTCTLQ /NO, SUSPEND OUTPUTTING +TTY32, KCC /YES, REMOVE ^Q FROM BUFFER +/HAD NO ROOM FOR: +/ TAD LINSYZ +/ DCA LINCNT +ECHO, DCA TGCH + ISZ TTYPCH + IFNZRO ESC < + TAD TCHAR + TAD (-33 + SZA CLA + JMP .+3 + TAD L44 + DCA TCHAR +L44, 44 + > + TAD TCHAR + SNA + JMP TTYCTO /IGNORE NULLS + IFNZRO RUB&4000 < + TAD (-10 + SNA + JMP RUBO + TAD (10-16 + > + IFZERO RUB&4000 < + TAD (-16 + > +TTY100, CLL +TTY10, TAD K5 +TTY240, SZA /TAB? + JMP NOTAB + IFNZRO SIMTAB < +TTYTAB, TAD TTY240 + JMS TTYTLS +TTY7, 7 /HERE FOR NO SPECIAL REASON + TAD TABCTR + AND TTY7 + SZA CLA + JMP TTYTAB + JMP TTYCTO + > + IFNZRO SLOTAB < + TAD TCHAR + JMS TTYTLS + TAD (177 + JMS TTYTLS + TAD (177 + JMP PRIN+1 + > + IFZERO SIMTAB+SLOTAB + +/BUG: IF HARDWARE TABS, DON'T COUNT COLUMNS CORRECTLY + + IFNZRO RUB&4000 < +RUBO, TAD TTY10 /OUTPUT BACKSPACE-RUBOUT-BACKSPACE + JMS TTYTLS + TAD TTY240 + JMS TTYTLS + TAD (-4 + TAD TABCTR + JMP PREPRN + > + NOTAB, SZL CLA + JMP SPCHR /DON'T UPARROW CHARS LF,CR,TAB,VT,FF + IFNZRO FLAGLC < + TAD TCHAR + AND TTY140 + TAD M140 + SZA CLA /IS IT LC? + JMP NOLC /NO +TTYQUO, "' + TAD TTYQUO /YES + JMS TTYTLS /PRINT QUOTE + TAD M40 + JMP PRIN /PRINT UPPER CASE OF CHAR + > +NOLC, TAD TCHAR /NO, GET BACK CHAR + AND TTY140 /HIGH ORDER BITS IRRELEVANT + IFNZRO CTRL < +M40, SMA SZA CLA /CAN'T BE NEGATIVE + JMP PRIN /NOT A CONTROL CHARACTER + TAD TTYUPA /ECHO 201-237 AS ^X (EXCEPT 211-215) + JMS TTYTLS + TAD TTY100 /ADD X100 TO ^K TO GET K + > + IFZERO CTRL < + SNA CLA /IS CHAR A CONTROL CHAR? + JMP TTYCTO /YES, DON'T ECHO CONTROL CHARACTERS EXCEPT FOR 211-215 + > +PRIN, TAD TCHAR + JMS TTYTLS +TTYCTO, TAD TABCTR /RETURN TABCNT IN AC + JMP I TTYPCH + + IFZERO CTRL < +M40, -40 + > + +TTY140, +SPCHR, STA CLL + TAD LINSIZ +PREPRN, DCA TABCTR /THESE CHARS RESET COLUMN COUNTER + JMP PRIN + TGCH, 0 /NON-ZERO MEANS TTYGCH WAS CALLED + KSF + JMP .-1 /WAIT FOR CHAR TO BE TYPED + JMS TTYTST +/WILD: (DON'T PUT IN) SZA CLA /FALL THRU AND RETURN R.O. +/ ISZ TTYGCH + TAD (203-377 + SNA CLA /TAKE RETURN 1 ON RUB OUT + JMP I TTYGCH /"CLUMSY" - R.L. (9/18/73) + ISZ TTYGCH + KRB /GET CHARACTER +TTYAND, AND (177 /MUST RETURN CHAR IN 7-BIT + IFNZRO CNVLC < + DCA TCHAR + TAD TCHAR + AND TTY140 + TAD M140 + SNA CLA /IS IT LC? + TAD M40 /YES + TAD TCHAR /NO + > + IFNZRO ALTMOD < + TAD (-175 /IS IT 175 OR 176? + SMA + JMP CONV /YES, CONVERT ALTMODE TO ESCAPE + TAD (175 /NO, RESTORE CHAR + > + JMP I TTYGCH /TAKE RETURN 3 + +/SHOULDN'T TABCTR BE INITIALIZED TO C(LINSIZ) UPON ENTRY? + +TABCTR, -110 + +TTYTLS, 0 + TLS + IFNZRO DELAY < + TAD (-DELAY + SZA CLA + STA + > +TTYTSF, TSF + JMP .-1 + IFNZRO DELAY < + IAC + SZA /19.66 MS IS G.T. 1/60 SEC + JMP TTYTSF + > + ISZ TABCTR +TTYUPA, "^ +TT7600, 7600 + JMP I TTYTLS +LINSIZ, -110 + + IFNZRO PAUS < +LINSYZ, -HEIGHT +LINCNT, -HEIGHT +PAUSN, -PAUS + > + + IFNZRO ALTMOD < + IFNZRO KCC-6032 < +CONV, CLA + TAD (33 + JMP I TTYGCH + > + IFZERO KCC-6032 < +CONV, CLA IAC + TAD TTY32 /DEVICE DEPENDENT + JMP TTYAND + > + > + TCHAR, 0 + +/TTYTST: READS KEYBOARD STATICALLY AND RESPONDS TO ^C +/ OTHERWISE RETURNS CHAR (8-BIT) MINUS 203 IN AC. +/ IF FLAG IS NOT UP, IT RETURNS A 1. + +TTYTST, 0 + TAD TT7600 /OR CHAR IN + KRS + TAD (-7603 /-7603=175 + KSF + CLA IAC /STUFF IN BUFFER IS UNRELIABLE IF FLAG ISN'T UP + SZA + JMP I TTYTST + IFNZRO INDVC-3 + CIF CDF 0 /BRANCH TO OS/8 MONITOR AT 07600 + JMP I TT7600 /IT WILL PRINT "^C" FOR CHAR IN BUFFER + PAGE + / DYNAMICALLY MODIFYING THE KL8E HANDLER + +/ *** I M P O R T A N T *** + +/ THIS HANDLER CAN BE DYNAMICALLY CHANGED VIA SET COMMANDS. +/ CONSEQUENTLY, IT IS EXTREMELY IMPORTANT THAT PEOPLE +/ WHO MODIFY THIS SOURCE DO NOT AFFECT THE ALGORITHMS +/ NECESSARY TO PERFORM SUCH MODIFICATIONS. + +/ THIS ALGORITHM IS EXPLAINED BELOW. + +/ SET TTY WIDTH=N + +/ SEARCH LOCATIONS 200-377 FOR A 7600. CALL ITS ADDRESS X. +/ LET Y BE THE INSTRUCTION AT LOCATION X+1. +/ FORM THE (RELATIVE) ADDRESS T=Y&177+200-1. +/ THEN LOCATIONS T AND X+2 CONTAIN MINUS THE TTY WIDTH. +/ THE WIDTH MUST BE A MULTIPLE OF 10 AND MUST NOT BE 200. +/ (BECAUSE -200 IS THE MAGIC 7600) + +/ SET TTY CODE XX + +/ SEARCH ENTIRE HANDLER FOR INSTRUCTIONS OF THE FORM 6XXY +/ WHERE XX IS NOT 20 OR 21, +/ AND FURTHERMORE DON'T INCLUDE A 6031 IF 2 LOCATIONS +/ FOLLOWING IS A 7650 +/ AND DON'T INCLUDE A 6034 IF 4 LOCATIONS FOLLOWING IS A 7650. + + +/ SET TTY [NO] ECHO + +/ THE WORD INVOLVED IS AT (RELATIVE) LOCATION 120. +/ SET TO 7440 TO ECHO. +/ SET TO 7610 TO SUPPRESS ECHOING. + + +/ SET TTY LC + +/ SEARCH LOCATIONS 200-377 FOR A 377. CALL ITS ADDRESS X. +/ LOOK AT LOCATION X+5. +/ IF THIS LOCATION IS NOT A 7650, THEN LC TO UC CONVERSION +/ WAS NOT ENABLED AT ASSEMBLY TIME. +/ IF THE FEATURE IS ENABLED, CHANGE LOCATION X+5 TO A 7610 +/ TO PREVENT THE CONVERSION. TO ALLOW CONVERSION, SET +/ LOCATION X+5 BACK TO 7650. + +/ SET TTY PAGE + +/ SEARCH LOCATIONS 215-300 FOR A 7450. CALL ITS ADDRESS X. +/ SET X+3 TO 7640 TO ENABLE ^S, ^Q. +/ SET X+3 TO 7200 TO DISABLE ^S, ^Q. + / SET TTY TAB + +/ SEARCH LOCATIONS 200-300 FOR A 7. +/ IF NOT FOUND, SIMULATED TABS WAS NOT ENABLED AT ASSEMBLY TIME. +/ IF FOUND, CALL ITS ADDRESS X. +/ TO PATCH OUT SIMULATED TABS: +/ MOVE C(X-12) TO LOCATION X-2 +/ CHANGE LOCATION X+3 TO A 7610 +/ TO RESTORE SIMULATED TABS: +/ SET LOCATION X-2 TO X-4&77+1200 +/ CHANGE LOCATION X+3 TO A 7640 + +/ SET TTY FILL + +/ THE LITERAL 177 MUST REMAIN AT THE END OF PAGE 2 +/ SEARCH LOCATIONS 200-300 FOR A 1377. +/ IF NOT FOUND, THEN FILL CHARACTERS WERE NOT ENABLED AT ASSEMBLY +/ TIME. IF FOUND, CALL ITS ADDRESS X. +/ TO PATCH OUT FILL CHARACTERS, MOVE C(X+3) TO LOCATION X-1. +/ TO RESTORE FILL CHARACTERS, MOVE C(X+1) TO LOCATION X-1. + +/ SET TTY FLAGLC + +/ SEARCH LOCATIONS 200-377 FOR A 247. +/ IF NOT FOUND, LOWER CASE FLAGGING WAS NOT ENABLED AT ASSEMBLY TIME. +/ IF FOUND, CALL ITS ADDRESS X. +/ TO DISABLE FLAGGING, SET LOCATION X-2 TO A 7200. +/ TO RE-ENABLE FLAGGING, SET LOCATION X-2 TO A 7640. + +/ SET TTY PAUSE [N] + +/ SEARCH LOCATIONS 200-300 FOR A 15. +/ IF NOT FOUND, PAUSING WAS NOT ENABLED AT ASSEMBLY TIME. +/ IF FOUND, CALL ITS ADDRESS X. +/ TO DISABLE PAUSING AFTER A FULL SCREEN, +/ SET LOCATION X-3 TO A 7610. +/ TO RE-ENABLE PAUSING, SET LOCATION X-3 TO A 7650. +/ TO SET PAUSE DURATION, SEARCH LOCATIONS 300-377 FOR A 7600, +/ CALLING ITS ADDRESS X. THEN (MINUS THE) PAUSE DURATION IS AT +/ LOCATION X+5. + +/ SET TTY HEIGHT + +/ THIS IS ONLY APPLICABLE IF SET TTY PAUSE HAS BEEN ASSEMBLED IN +/ (A 15 CAN BE FOUND ON SECOND PAGE). +/ NEGATIVE OF HEIGHT MUST BE SET IN BOTH LOCATIONS X+3 AND X+4 +/ WHERE X IS THE ADDRESS OF A 7600 AS IN ABOVE. + / SET TTY ESCAPE + +/ SEARCH LOCATIONS 200-377 FOR A 44. +/ IF NOT FOUND, THEN $ WAS NOT ASSEMBLED INTO TTY HANDLER. +/ IF FOUND, CALL ITS ADDRESS X. +/ TO DISABLE PRINTING ESCAPE AS $, SET LOCATION X-4 TO A 'CLA'. +/ TO CAUSE ESCAPE TO PRINT AS AN ESCAPE, SET LOCATION X-4 TO SZA CLA. + +/ SET TTY ARROW + +/ SEARCH LOCATIONS 200-377 FOR 7740. + +/ IF NOT FOUND, USING OLD HANDLER. +/ CALL ITS ADDRESS X. +/ IF LOCATION X+1 IS MORE THAN 7000, +/ THEN UPARROW MODE WAS NOT ASSEMBLED INTO KL8E. +/ OTHERWISE, TO ALLOW ARROWS, SET LOCATION X+3 TO THE +/ CONTENTS OF LOCATION X+6. +/ TO CAUSE CONTROL CHARACTERS TO ECHO AS IS, SET +/ LOCATION X+3 TO 'SKP CLA'. +/ NOTE THAT THIS IS A DIFFERENT OPTION THAN ASSEMBLING CTRL=0. + IFDEF TEST < + *600 + +/TEST ROUTINE FOR KL8E HANDLER + +GO, JMS I (TTY /CALL HANDLER + 0600 /READ SIX PAGES + 1000 /BUFFER AT 01000 + 0001 /BLOCK 1 + HLT /ERROR RETURN + JMS I (TTY /CALL HANDLER AGAIN + 4600 /OUTPUT SIX PAGES + 1000 + 0001 + HLT + CLA + JMP GO + > + $ +