File TTY.PA (PAL assembler source file)

Directory of image this file is from
This file as a plain text file

/3 TTY DRIVER TASK FOR RTS8 V2			4-AUG-75
/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1975 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.
/
/
/
/
/
/
/
/
/
/

/ FEATURES ADDED BY S.R. ON 16-JUL-75: /1. CTRL/S, CTRL/Q /2. AUTOMATIC CR/LF AFTER TTY WIDTH REACHED (USU 80 COLS) /3. RE-ECHOING OF PROMPT LINES ON CTRL/U /4. BACKSPACE FACILITY FOR RUBOUT ON SCOPE TERMINALS /5. CTRL/U PRINTS "^U" /6. TAB OPTIONS /7. FILL OPTIONS / 4-AUG-75: COMBINED IN OLD TTY HANDLER /TASK DATA BLOCK: CUR= 0 INIWT= 0 IFNDEF KBDEV < KBDEV= 03 TTDEV= 04 > IFNDEF CONSOL <CONSOL=1> /DEFAULT IS CONSOLE IFNZRO CONSOL <TASK= TTY> IFNDEF TASK <TASK= 10> /A GOOD NUMBER FOR TESTING IFNDEF VT50 <VT50=1> /SET TO 0 IF DON'T WANT ^S, ^Q FEATURE IFNDEF SCOPE <SCOPE=0> /SET TO 1 IF TTY CAN DO A BACKSPACE IFNDEF FILL <FILL=0> /NUMBER OF FILL CHARACTERS AFTER CR/LF IFNDEF WIDTH <WIDTH=120> /TTY LINE WIDTH IFNDEF TAB <TAB=0> /SET TO 1 IF TTY HAS HARDWARE TABS IFNDEF OLDTTY <OLDTTY=0> /SET TO 1 TO GET OLD VERSION 1 TTY TASK KSFX= KBDEV^10+6001 KCCX= KBDEV^10+6002 KRSX= KBDEV^10+6004 KRBX= KBDEV^10+6006 TSFX= TTDEV^10+6001 TCFX= TTDEV^10+6002 TSKX= TTDEV^10+6005 /PDP 8/E ONLY TLSX= TTDEV^10+6006
/THE RTS-8 TELETYPE DRIVER PRINTS AND INPUTS LINES OR CHARACTER /STRINGS ON A TELETYPE. THE INPUT AND OUTPUT DEVICE CODES OF /THE TELETYPE ARE SPECIFIED (RESPECIVELY) BY THE PARAMETERS /"KBDEV" AND "TTDEV". IF THE PARAMETER "CONSOL" IS NOT DEFINED TO /BE ZERO, THE TELETYPE IS ASSUMED TO BE THE CONSOLE TELETYPE /AND WILL INVOKE THE MCR WHENEVER ^C IS TYPED ON IT. /THE FORMAT OF TTY DRIVER MESSAGES ARE: /WORD 1 USED AS EVENT FLAG FOR MESSAGE /WORDS 2-3 USED BY RTS-8 /WORD 4 FLAGS WORD - FLAGS ARE: / BIT 0 0=PACKED OUTPUT MESSAGE, 1=UNPACKED / BIT 1 0=PUT CRLF AFTER MESSAGE, 1=DO NOT / BIT 2 0=OUTPUT MESSAGE BEGINS AT WORD 6, 1= OUTPUT MESSAGE / POINTED TO BY WORD 6 / BIT 3 0=INPUT IS LINE ORIENTED, WITH EDITING / 1=INPUT IS COUNT ORIENTED W/O EDITING OR ECHOING / BIT 4 0=PERFORM I/O INDICATED BY OTHER BITS / 1=ASSIGN TTY DRIVER TO TASK IN BITS 5-11 / BITS 5-11 MAX # CHARS IN INPUT BUFFER (0 MEANS 4096) / OR TASK TO ASSIGN DRIVER TO (IF BIT 4=1) /WORD 5 IF ZERO, NO INPUT - ELSE POINTS AT INPUT BUFFER /WORD 6 OUTPUT MESSAGE OR POINTER TO MESSAGE
IFZERO OLDTTY < FIELD CUR%10 *3400 MEVFLG, START, CAL FLAGS, SKPINS HALF, TTINT IFZERO PDP8E < /ONLY NEED 1 SKIP CHAIN ENTRY ON 8/E CAL SKPINS KBINT > TTMSLP, TAD ASGNEE /GET ASIGNEE (IF ANY) CAL RECEIV /TAKE THE MESSAGE OFF THE Q MADDR, 0 /GETS ADDRESS OF MESSAGE DCA MSGCDF /FIELD OF MSG IN AC AC7775 TAD MADDR DCA MEVFLG /SAVE MESSAGE EVENT FLAG ADDRESS JMS CDFMSG TAD I MADDR DCA FLAGS /FIRST WORD OF MESSAGE IS FLAGS ISZ MADDR TAD I MADDR DCA REPLYY /2D WORD OF MESSAGE IS ADDRESS FOR ISZ MADDR /REPLY FROM KBD (0 IF NONE WANTED) TAD FLAGS AND (200 SZA CLA /IS THIS AN ASSIGN CALL? JMP ASSIGN /YES - JUST ASSIGN TTY TO SENDER TAD FLAGS RTL SMA CLA /BIT 1000 OF FLAG WORD INDICATES JMP .+3 /IF MESSAGE OR POINTER TO IT FOLLOWS TAD I MADDR DCA MADDR CTRLU2, TAD MADDR DCA SAVM STA DCA HALF /INITIALIZE LEFT/RIGHT SWITCH
/LOOP TO UNPACK AND OUTPUT MESSAGE TTOLP, JMS CDFMSG TAD FLAGS SPA CLA /BIT 0 IF FLAG WD TELLS WHETHER JMP ONEPWD /MESSAGE IS PACKED OR UNPACKED ASCII ISZ HALF /PACKED - WHICH HALF? JMP RGHTHF AC7776 DCA HALF TAD I SAVM CLL RTR RTR RTR JMP .+3 RGHTHF, TAD I SAVM ISZ SAVM AND (77 SNA JMP CKCRLF TAD (240 /CONVERT SIXBIT TO ASCII AND (77 TAD (240 OUTCH, JMS I (TTOUTR JMP TTOLP ONEPWD, TAD I SAVM ISZ SAVM SZA JMP OUTCH CKCRLF, TAD FLAGS RAL /BIT 1 OF FLAGS TELLS WHETHER SMA CLA /TO FOLLOW MESSAGE BY A CR/LF CTRLU, JMS I (CRLF TAD REPLYY SZA /IS THERE INPUT REQUIRED? JMP I (EOMESS /YES - GO GET IT EORPLY, CDF CUR /HERE IF NO INPUT OR IF INPUT FINISHED TAD MSGCDF DCA MF TAD MEVFLG CAL /POST THE SENDER'S EVENT FLAG POST /SO HE'LL KNOW HE GOT HIS INPUT MF, 0 JMP TTMSLP /NNNNNNNNNNNNNNNNNNNEXT! ASSIGN, TAD FLAGS AND (77 /GET TASK NUMBER DCA ASGNEE /SAVE AS ASSIGNED TASK JMP EORPLY ASGNEE, 0 /TASK ASSIGNMENT - 0 MEANS UNASSIGNED REPLYY, 0 /ADDRESS OF REPLY BUFFER (IF ANY) SAVM, 0
/LOW-LEVEL TTY OUTPUT CODE TTOUT, 0 DCA CDFMSG CDF CUR TAD I (INCH /GET THE LAST CHAR TYPED ON THE KEYBOARD AND (177 /STRIP OFF PARITY TAD (-17 /WAS IT ^O? SNA CLA JMP I TTOUT /YES - DON'T PRINT NOTHIN IFNZRO VT50< CAL WAITE /WAIT FOR XON XOFF > CAL WAITE /WAIT FOR LAST CHAR TO FINISH PTTOEV, TTOEV ISZ TTOEV /SET TTY BUSY (IN ADVANCE) TAD CDFMSG /GET CHAR TLSX /OUT WITH IT! CLA /CL(E)A(N) UP JMP I TTOUT TTINT, ZBLOCK 2 /USED FOR LINKING INTO SKIP CHAIN IFZERO PDP8E <TSFX> IFNZRO PDP8E <TSKX> /CHECK FOR KEYBOARD OR PRINTER JMP I TTINT CDF CIF CUR IFNZRO PDP8E < TSFX /WHICH ONE? JMP I (KBINT /KEYBOARD > CIF 0 TCFX TAD PTTOEV POSTDS /POST "TTY COMPLETE" EVENT FLAG TTOEV, 0 CDFMSG, 0 MSGCDF, HLT JMP I CDFMSG PAGE
/INPUT REPLY FROM KEYBOARD EOMESS, DCA REPLY /SAVE REPLY BUFFER POINTER IN THIS PAGE CDF CUR TAD I (FLAGS AND (177 /GET LOW ORDER BITS OF FLAG WORD CIA RPLYL1, DCA INPCNT /SET INPUT CHAR COUNT RPLYLP, CAL WAITE TTIEV /WAIT FOR KEYBOARD STRIKE ISZ I (TTIEV /IMMEDIATELY SET EVENT FLAG AGAIN TAD I (FLAGS JMS I (CDFMSG AND (400 /ARE WE EDITING INPUT? SZA CLA JMP NOEDIT /NO - JUST TAKE IT AS IT COMES TAD INCH AND (177 /STRIP PARITY BIT TAD (200 /NOW FORCE IT BACK IN DCA I REPLY /SAVE CHAR IN REPLY MESSAGE TAD I REPLY AND (177 /AND OUT GOES THE PARITY BIT (AGAIN) SZA TAD (-17 /IGNORE NULL AND ^O SNA JMP RPLYLP TAD (17-176 SMA SZA JMP RUBOUT /X - 176 GT 0 - X MUST BE 177 SZA IAC SZA TAD (175-33 /CHECK FOR 3 FLAVORS OF ALTMODE SNA JMP ALTMOD /ALT MODE IS SPECIAL END-OF-LINE DELIMITER TAD (33-15 SNA /IS THE CHAR A CARRIAGE RETURN? JMP CARRET CDF CUR TAD (15-25 SNA CLA /^U? JMP CTU /YES ISZ INPCNT /IS THERE ROOM IN THE BUFFER? JMP .+3 /YES STA JMP RPLYL1 /NO - KEEP IT FULL JMS I (CDFMSG TAD I REPLY /GET THE CHAR JMS I (TTOUTR /ECHO IT NEXTCH, ISZ REPLY /BUMP POINTER JMP RPLYLP /CONTINUE INPCNT, 0
/SPECIAL CHARACTER PROCESSING RUBOUT, CDF CUR TAD I (REPLYY /AC=1 ON ENTRY! CIA TAD REPLY /ARE WE AT THE BEGINNING SPA CLA /OF THE REPLY LINE? JMP RPLYLP /YES IFZERO SCOPE < TAD (334 JMS I (TTOUTR /OUTPUT A BACKSLASH > IFNZRO SCOPE < JMS I (BACK /DO BACKUP > STA TAD REPLY DCA REPLY /BUMP THE POINTER BACK ONE STA TAD INPCNT /REMEMBER TO INCREASE THE COUNT! JMP RPLYL1 ALTMOD, TAD (44 JMS I (TTOUTR /ECHO ALT MODE AS $ STA /PUT SPECIAL DELIMITER IN MESSAGE JMS I (CDFMSG CARRET, DCA I REPLY /SET THE LAST CHAR IN THE MESSAGE JMS I (CRLF JMP I (EORPLY NOEDIT, TAD INCH DCA I REPLY /NO PARITY, NO EDITING, NO ECHOING ISZ INPCNT /IF CONSOL=0, THIS MODE CAN JMP NEXTCH /BE USED TO READ BINARY PAPER TAPES JMP I (EORPLY
REPLY, 0 INCH, 0 CTU, TAD ("^ JMS I (TTOUTR /TYPE "^U" TAD ("U JMS I (TTOUTR TAD I (FLAGS /IF BIT 1 IS ON, WANT TO REPROMPT CLL RTL SNL CLA JMP I (CTRLU JMS I (CRLF JMP I (CTRLU2 PAGE
/KEYBOARD INPUT INTERRUPT ROUTINE AND STORAGE KBINT, IFZERO PDP8E < ZBLOCK 2 /FOR LINKING INTO SKIP CHAIN KSFX JMP I KBINT CDF CIF CUR > KRBX /READ CHARACTER AND CLEAR FLAG DCA I (INCH IFZERO VT50 < IFNZRO CONSOL < TAD I (INCH AND (177 TAD (-3 SNA CLA /CHECK FOR ^C TYPED JMP GETMCR /YES - SET "MCR REQUESTED" EVENT FLAG > > IFNZRO VT50 < TAD I (INCH AND (177 IFNZRO CONSOL < TAD (-3 SNA /CHECK FOR ^C JMP GETMCR /REQUEST MCR ON CTRL/C TAD (3-23 /NOW CHECK FOR CTRL/S > IFZERO CONSOL < TAD (-23 > SNA JMP CTRLS /^S TYPED (XOFF) TAD (23-21 SNA CLA JMP CTRLQ /^Q TYPED (XON) > CIF 0 TAD (TTIEV POSTDS /POST "KEY STRUCK" EVENT FLAG
IFNZRO VT50 < XOFF, 0 /0 MEANS CAN PRINT /1 MEANS PRINT INHIBITED DUE TO ^S CTRLS, CLA IAC DCA XOFF /INHIBIT PRINTING CIF 0 POSTDS /DISMISS, NO FLAGS POSTED CTRLQ, TAD TTIEV SNA CLA ISZ TTIEV CIF 0 TAD (XOFF POSTDS /POST RESUME TYPING EVENT FLAG > IFNZRO CONSOL < GETMCR, TAD TTIEV /^C WILL DELETE ANYTHING WHICH SNA CLA /IS CURRENTLY IN THE TTY BUFFER ISZ TTIEV /BY SETTING THE EVENT FLAG NON-ZERO CDF CIF 0 /THE MCR IS STARTED UP (IF QUIESCENT) BY TAD (MCREF /POSTING THE MCR EVENT FLAG IN PAGE 0 POSTDS /OF FIELD 0. > TTIEV, 1 /KEYBOARD NOT STRUCK INITIALLY IFNZRO SCOPE < BACK, 0 TAD (10 /BACKSPACE JMS I (TTOUT TAD (240 /PRINT SPACE JMS I (TTOUT TAD (10 /BACKSPACE AGAIN JMS I (TTOUT STA TAD COLCNT SMA /CAN'T RUBOUT PAST COLUMN 1 DCA COLCNT /MOVE BACK ONE COLUMN CLA /CLEAR AC JMP I BACK /RETURN > CRLF, 0 TAD (215 JMS I (TTOUT TAD (212 JMS I (TTOUT IFZERO FILL-1&4000 <JMS I (TTOUT> IFZERO FILL-2&4000 <JMS I (TTOUT> IFZERO FILL-3&4000 <JMS I (TTOUT> IFZERO FILL-4&4000 <JMS I (TTOUT> IFZERO FILL-5&4000 <JMS I (TTOUT> DCA COLCNT JMP I CRLF
TTOUTR, 0 DCA TEM /SAVE CHAR TAD TEM AND (177 /7-BIT TAD (-15 /IS IT CR? SNA JMP ITSCR /IT'S A CR TAD (15-11 SNA CLA /IS IT A TAB? JMP TABB /YES DOO, ISZ COLCNT /AT END OF COLUMN? SND, TAD COLCNT CLL TAD WITH SZL /AT LAST COLUMN? (DON'T CLEAR AC) JMS NEWL /YES, DO EXTRA CR/LF CLA TAD TEM /NO JMS I (TTOUT /ACTUALLY TYPE CHARACTER JMP I TTOUTR /RETURN ITSCR, DCA COLCNT JMP DOO COLCNT, 0 WITH, -WIDTH-1 TEM, 0 NEWL, 0 DCA XTRA JMS I (CRLF TAD XTRA SZA CLA TAD (7 /IF LAST CHAR WAS TAB IAC /SET INIT COL TO 10; OTHERWISE 1 DCA COLCNT JMP I NEWL XTRA, 0
IFNZRO TAB < TABB, TAD COLCNT AND (7770 TAD (10 DCA COLCNT /GO TO NEXT TAB STOP JMP SND > IFZERO TAB < TABB, ISZ COLCNT TAD COLCNT TAD WITH SNA CLA JMP EO TAD (" JMS I (TTOUT /SIMULATE WITH SPACES TAD COLCNT AND (7 SZA CLA /UNTIL THE NEXT TAB STOP JMP TABB JMP I TTOUTR EO, JMS I (CRLF JMP I TTOUTR > PAGE >
IFNZRO OLDTTY < FIELD CUR%10 *3000 MEVFLG, START, CAL FLAGS, SKPINS HALF, TTINT IFZERO PDP8E < /ONLY NEED 1 SKIP CHAIN ENTRY ON 8/E CAL SKPINS KBINT > TTMSLP, TAD ASGNEE /GET ASIGNEE (IF ANY) CAL RECEIV /TAKE THE MESSAGE OFF THE Q MADDR, 0 /GETS ADDRESS OF MESSAGE DCA MSGCDF /FIELD OF MSG IN AC AC7775 TAD MADDR DCA MEVFLG /SAVE MESSAGE EVENT FLAG ADDRESS JMS CDFMSG TAD I MADDR DCA FLAGS /FIRST WORD OF MESSAGE IS FLAGS ISZ MADDR TAD I MADDR DCA REPLYY /2D WORD OF MESSAGE IS ADDRESS FOR ISZ MADDR /REPLY FROM KBD (0 IF NONE WANTED) TAD FLAGS AND (200 SZA CLA /IS THIS AN ASSIGN CALL? JMP ASSIGN /YES - JUST ASSIGN TTY TO SENDER TAD FLAGS RTL SMA CLA /BIT 1000 OF FLAG WORD INDICATES JMP .+3 /IF MESSAGE OR POINTER TO IT FOLLOWS TAD I MADDR DCA MADDR STA DCA HALF /INITIALIZE LEFT/RIGHT SWITCH
/LOOP TO UNPACK AND OUTPUT MESSAGE TTOLP, JMS CDFMSG TAD FLAGS SPA CLA /BIT 0 IF FLAG WD TELLS WHETHER JMP ONEPWD /MESSAGE IS PACKED OR UNPACKED ASCII ISZ HALF /PACKED - WHICH HALF? JMP RGHTHF AC7776 DCA HALF TAD I MADDR CLL RTR RTR RTR JMP .+3 RGHTHF, TAD I MADDR ISZ MADDR AND (77 SNA JMP CKCRLF TAD (240 /CONVERT SIXBIT TO ASCII AND (77 TAD (240 OUTCH, JMS TTOUT JMP TTOLP ONEPWD, TAD I MADDR ISZ MADDR SZA JMP OUTCH CKCRLF, TAD FLAGS RAL /BIT 1 OF FLAGS TELLS WHETHER SMA CLA /TO FOLLOW MESSAGE BY A CR/LF CTRLU, JMS CRLF TAD REPLYY SZA /IS THERE INPUT REQUIRED? JMP I (EOMESS /YES - GO GET IT EORPLY, CDF CUR /HERE IF NO INPUT OR IF INPUT FINISHED TAD MSGCDF DCA MF TAD MEVFLG CAL /POST THE SENDER'S EVENT FLAG POST /SO HE'LL KNOW HE GOT HIS INPUT MF, 0 JMP TTMSLP /NNNNNNNNNNNNNNNNNNNEXT! ASSIGN, TAD FLAGS AND (77 /GET TASK NUMBER DCA ASGNEE /SAVE AS ASSIGNED TASK JMP EORPLY ASGNEE, 0 /TASK ASSIGNMENT - 0 MEANS UNASSIGNED REPLYY, 0 /ADDRESS OF REPLY BUFFER (IF ANY)
/LOW-LEVEL TTY OUTPUT CODE TTOUT, 0 DCA CDFMSG CDF CUR TAD I (INCH /GET THE LAST CHAR TYPED ON THE KEYBOARD AND (177 /STRIP OFF PARITY TAD (-17 /WAS IT ^O? SNA CLA JMP I TTOUT /YES - DON'T PRINT NOTHIN CAL WAITE /WAIT FOR LAST CHAR TO FINISH PTTOEV, TTOEV ISZ TTOEV /SET TTY BUSY (IN ADVANCE) TAD CDFMSG /GET CHAR TLSX /OUT WITH IT! CLA /CL(E)A(N) UP JMP I TTOUT CRLF, 0 TAD (215 JMS TTOUT TAD (212 JMS TTOUT JMP I CRLF TTINT, ZBLOCK 2 /USED FOR LINKING INTO SKIP CHAIN IFZERO PDP8E <TSFX> IFNZRO PDP8E <TSKX> /CHECK FOR KEYBOARD OR PRINTER JMP I TTINT CDF CIF CUR IFNZRO PDP8E < TSFX /WHICH ONE? JMP I (KBINT /KEYBOARD > CIF 0 TCFX TAD PTTOEV POSTDS /POST "TTY COMPLETE" EVENT FLAG TTOEV, 0 CDFMSG, 0 MSGCDF, HLT JMP I CDFMSG PAGE
/INPUT REPLY FROM KEYBOARD EOMESS, DCA REPLY /SAVE REPLY BUFFER POINTER IN THIS PAGE CDF CUR TAD I (FLAGS AND (177 /GET LOW ORDER BITS OF FLAG WORD CIA RPLYL1, DCA INPCNT /SET INPUT CHAR COUNT RPLYLP, CAL WAITE PTTIEV, TTIEV /WAIT FOR KEYBOARD STRIKE ISZ TTIEV /IMMEDIATELY SET EVENT FLAG AGAIN TAD I (FLAGS JMS I (CDFMSG AND (400 /ARE WE EDITING INPUT? SZA CLA JMP NOEDIT /NO - JUST TAKE IT AS IT COMES TAD INCH AND (177 /STRIP PARITY BIT TAD (200 /NOW FORCE IT BACK IN DCA I REPLY /SAVE CHAR IN REPLY MESSAGE TAD I REPLY AND (177 /AND OUT GOES THE PARITY BIT (AGAIN) SZA TAD (-17 /IGNORE NULL AND ^O SNA JMP RPLYLP TAD (17-176 SMA SZA JMP RUBOUT /X - 176 GT 0 - X MUST BE 177 SZA IAC SZA TAD (175-33 /CHECK FOR 3 FLAVORS OF ALTMODE SNA JMP ALTMOD /ALT MODE IS SPECIAL END-OF-LINE DELIMITER TAD (33-15 SNA /IS THE CHAR A CARRIAGE RETURN? JMP CARRET CDF CUR TAD (15-25 SNA CLA /^U? JMP I (CTRLU /YES ISZ INPCNT /IS THERE ROOM IN THE BUFFER? JMP .+3 /YES STA JMP RPLYL1 /NO - KEEP IT FULL JMS I (CDFMSG TAD I REPLY /GET THE CHAR JMS I (TTOUT /ECHO IT NEXTCH, ISZ REPLY /BUMP POINTER JMP RPLYLP /CONTINUE INPCNT, 0
/SPECIAL CHARACTER PROCESSING RUBOUT, CDF CUR TAD I (REPLYY /AC=1 ON ENTRY! CIA TAD REPLY /ARE WE AT THE BEGINNING SPA CLA /OF THE REPLY LINE? JMP RPLYLP /YES TAD (334 JMS I (TTOUT /OUTPUT A BACKSLASH STA TAD REPLY DCA REPLY /BUMP THE POINTER BACK ONE STA TAD INPCNT /REMEMBER TO INCREASE THE COUNT! JMP RPLYL1 ALTMOD, TAD (44 JMS I (TTOUT /ECHO ALT MODE AS $ STA /PUT SPECIAL DELIMITER IN MESSAGE JMS I (CDFMSG CARRET, DCA I REPLY /SET THE LAST CHAR IN THE MESSAGE JMS I (CRLF JMP I (EORPLY NOEDIT, TAD INCH DCA I REPLY /NO PARITY, NO EDITING, NO ECHOING ISZ INPCNT /IF CONSOL=0, THIS MODE CAN JMP NEXTCH /BE USED TO READ BINARY PAPER TAPES JMP I (EORPLY
/KEYBOARD INPUT INTERRUPT ROUTINE AND STORAGE KBINT, IFZERO PDP8E < ZBLOCK 2 /FOR LINKING INTO SKIP CHAIN KSFX JMP I KBINT CDF CIF CUR > KRBX /READ CHARACTER AND CLEAR FLAG DCA INCH IFNZRO CONSOL < TAD INCH AND (177 TAD (-3 SNA CLA /CHECK FOR ^C TYPED JMP GETMCR /YES - SET "MCR REQUESTED" EVENT FLAG > CIF 0 TAD PTTIEV POSTDS /POST "KEY STRUCK" EVENT FLAG IFNZRO CONSOL < GETMCR, TAD TTIEV /^C WILL DELETE ANYTHING WHICH SNA CLA /IS CURRENTLY IN THE TTY BUFFER ISZ TTIEV /BY SETTING THE EVENT FLAG NON-ZERO CDF CIF 0 /THE MCR IS STARTED UP (IF QUIESCENT) BY TAD (MCREF /POSTING THE MCR EVENT FLAG IN PAGE 0 POSTDS /OF FIELD 0. > REPLY, 0 INCH, 0 TTIEV, 1 /KEYBOARD NOT STRUCK INITIALLY PAGE > $$$



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search