/OS/8 HANDLER FOR PDP/11-RSTS/E /IT USES A SERIAL I/O INTERFACE WITH A /TELETYPE-LIKE INSTRUCTION SET. / /PETER HANAK /TECHN. UNIV. BP. /DEPT. FOR INSTRUMENTATION AND MEASUREMENT /LAST EDITED: SEPT 30, 1977 / / /CALLING DEVICE HANDLERS / /CDF N ;WHERE N IS THE VALUE OF THE / CURRENT PROGRAM'S INSTRUCTION FIELD / TIMES 10 (OCTAL) /CIF ;DEVICE HANDLERS ARE ALWAYS IN FIELD 0 /JMS I ENTRY ;ENTRY CONTAINS THE ENTRY POINT / ADDRESS OF THE HANDLER /ARG(1) ;FUNCTION CONTROL WORD: / BIT: MEANING: / 0 0 FOR INPUT, 1 FOR OUTPUT / 1 TO 5 NUMBER OF 128-WORD RECORDS / TO BE TRANSFERRED. IF 0, NO / OPERATION. / 6 TO 8 MEMORY FIELD FOR TRANSFERRING / DATA. / 9 TO 11 USED FOR DECTAPES. /ARG(2) ;BUFFER ADDRESS /ARG(3) ;STARTING BLOCK NUMBER /JMP ERR ;ERROR RETURN; IF AC0=1, FATAL ERROR /... ;NORMAL RETURN (I/O TRANSFER COMPLETE) / /PERIPHERAL INSTRUCTIONS /PEC = PERIPHERAL CODE OF 'SERIAL INPUT' INTERFACE /PEC+10 = PERIPHERAL CODE OF 'SERIAL OUTPUT' INTERFACE PEC=400 PKSF=KSF-30+PEC PKCC=KCC-30+PEC PKRS=KRS-30+PEC PKRB=KRB-30+PEC PTSF=TSF-30+PEC PTLS=TLS-30+PEC EJECT OS-8 INPUT HANDLER FOR PDP-11-RSTS-E: PDR.S1-V1.1 /USAGE: /THIS INPUT HANDLER WORKS AS OUTPUT DEVICE OF RSTS/E /TERMINAL KBN:. IT MUST BE LOADED AND ACTIVATED BY OS/8 /BUILD USING THE FOLLOWING COMMANDS: /.RUN SYS BUILD /$LOAD PTR: ;IF TO BE LOADED FROM PAPER TAPE /^ ;PLACE THE TAPE 'PDR.BN' INTO THE READER AND / HIT ANY KEY /$INSERT PDR ;IF TO BE ACTIVATED /$BOOT ;REBOOT THE SYSTEM IF THERE ARE NO MORE / CHANGES /$WRITE ZERO DIRECT?NO ;DON'T CLEAR THE DIRECTORY! /SYS BUILT /.SA SYS BUILD ;SAVE THE NEW COPY OF BUILD / /THE RSTS/E TERMINAL KBN: MUST HAVE THE FOLLOWING /CHARACTERISTICS: WIDTH W (80<=W<=240), TAB, FORM, /NO LC OUTPUT, XON, LOCAL ECHO, NO LC INPUT, NO FILL, STALL, /SPEED S, NO PARITY, NO UP ARROW, NO ESC SEQ. /AT THE BME MUSZER ES MERESTECHNIKA TANSZEK KB14: AND /SPEED 9600 SHOULD BE USED. / /TO RECEIVE A FILE FROM THE PDP/11 CALL OS/8 PIP AT THE /CONSOLE AND TYPE: /*DEVICE:FILENAME.EXT /AFTER A ^ HAS APPEARED ON THE CONSOLE CALL RSTS/E PIP /AT ANOTHER TERMINAL AND THEN TYPE: /#KB14: /AND THEN HIT ANY KEY ON THE CONSOLE TO ENABLE TRANSMISSION. /IF THE OPERATION IS SUCCESSFUL A # APPEARS ON THE /RSTS/E TERMINAL AND A * (OR .) ON THE CONSOLE. /OPERATION FOR BLOCK 0: / IT SENDS CTRL/S TO THE PDP/11 / SUSPENDING TRANSMISSION, TYPES / A ^ AT THE CONSOLE AND WAITS / UNTIL THE OPERATOR HITS A KEY, / THEN BEGINS NORMAL OPERATION. /NORMAL OPERATION: / IT OUTPUTS CTRL/Q TO THE PDP/11 / PERMITTING DATA TRANSMISSION,RECEIVES THE / CHARACTERS AND STORES THEM INTO THE BUFFER. / WHEN 42 (DECIMAL) PLACES ARE STILL / FREE IN THE BUFFER, IT SENDS CTRL/S / TO THE PDP/11, WAITS SOME TIME FOR / INCOMING CHARS AND THEN FILLS THE / BUFFER WITH BLANKS AND TAKES THE NORMAL / EXIT. HOWEVER, IF THE BUFFER IS / NOT FULL BUT THERE ARE NO MORE / INCOMING CHARS IN SOME TIME / (CONTROLLED BY LOC 'MTIM2'), IT STORES / CTRL/Z AND BLANKS INTO THE BUFFER AND / TAKES THE NON-FATAL ERROR EXIT. /M/FATAL ERROR EXIT: / IF THE HANDLER HAS BEEN CALLED FOR OUTPUT / OR IF THERE ARE MORE THAN 29 INCOMING / CHARS AFTER CTRL/S HAS BEEN SENT TO THE / PDP-11. /CTRL/C: / RECEIVING CTRL/C FROM THE CONSOLE / IT SENDS CTRL/O TO THE PDP/11 INHIBITING / FURTHER DATA TRANSMISSION AND THEN RETURNS / TO THE MONITOR. /HANDLER HEADER BLOCK *0 -1 /1 DEVICE DEVICE PDR DEVICE PDR 2410 /DEVICE CONTROL BLOCK: READ ONLY, READER-TYPE PDPR-200 /ENTRY POINT OFFSET ZBLOCK 2 /BODY OF HANDLER *200 PDPR, 0 MONHED, 7600 /CLA & MONITOR ENTRY POINT RDF /CALLING FIELD TAD CDFCIF DCA EXIT TAD I PDPR /ARG1: FCW AND MK70 /BUFFER FIELD TAD CDFINS DCA TIMER1 TAD I PDPR /ARG1: FCW; BIT0=0, ISZ PDPR /IF INPUT REQUESTED SPA JMP FATER1 /FATAL ERROR AND MK7700 CMA /-# OF DOUBLEWORDS = DCA WCOUNT /=-RECORD# *128/2-1 TAD I PDPR /ARG2: BUFFER ADDRESS ISZ PDPR DCA BUFADD TAD I PDPR /ARG3: STARTING BLOCK # TIMER1, CDF /BUFFER FIELD SETTING SZA CLA JMP CTRLQ /CONTINUE NORMAL OP. TAD P223 /BLOCK 0 OP. PTLS /SENDS CTRL/S TAD P113 /TYPES ^ TLS KSF /WAITS FOR OPERATOR JMP .-1 PKRB /CLEAR FLAG&BUFFER KCC /CLEAR AC&FLAG CTRLQ, TAD P221 /CONTINUE NORMAL OP. JMS SEND /SENDS CTRL/Q JMP CTRLCE /IS THERE A CTRL/C ? NCTRLC, TAD P16 /NO CTRL/C TAD WCOUNT /PLACE FOR 42(DEC) CHARS ? SZA CLA JMP NCTRLS /NO; NO NEED FOR CTRL/S TAD P223 /YES; SEND CTRL/S JMS SEND NCTRLS, ISZ WCOUNT /INCREMENT COUNT JMP PDPRED /CONTINUE READING TAD TIMER1 /BUFFER FULL SZA CLA /IF TIMER1 NONZERO, FATAL ERROR JMP FATER2 TAD CTRLS /NON FATAL ERROR RETURN SZA CLA /IF BOTH TIMER1 & CTRLS ARE 0, FATER1, ISZ PDPR /OTHERWISE NORMAL RETURN ERRRET, ISZ PDPR EXIT, HLT JMP I PDPR FATER2, STA JMP ERRRET PDPRED, JMS RECEIV /ACCEPTS FIRST CHAR DCA I BUFADD JMS RECEIV /ACCEPTS SECOND CHAR DCA TEMPOR JMS RECEIV /ACCEPTS THIRD CHAR RTL RTL AND MK7400 TAD I BUFADD DCA I BUFADD TAD CHAR BSW RTL AND MK7400 TAD TEMPOR ISZ BUFADD DCA I BUFADD ISZ BUFADD KSF /ANY CONSOLE INPUT ? JMP NCTRLC /NO CTRLCE, KRS /YES; CTRL/C ? AND MK177 TAD M3 SZA CLA JMP NCTRLC /NO TAD P217 /YES; SEND CTRL/O INHIBITING FURTHER JMS SEND /TRANSMISSION CDFCIF, CDF CIF JMP I MONHED /RETURN TO MONITOR TEMPOR, /TWO NAMES FOR THE SAME LOCATION ! SEND, 0 /SEND SUBROUTINE PTSF JMP .-1 PTLS AND P16 DCA CTRLS /UPDATES SWITCH JMP I SEND RECEIV, 0 /RECEIVE SUBROUTINE TAD TIMER1 SNA CLA JMP TIMEUP /TIME IS UP ! DCA TIMER1 /INITIALIZE TIMER1 TIMLOP, ISZ TIMER1 /TIMING LOOP JMP WAITIN TAD CTRLS /TIMER1 IS UP SZA CLA JMP TIMEUP /AFTER CTRL/S; ISZ TIMER2 /WITHOUT CTRL/S WAIT LONGER JMP TIMLOP /TIMER1 CAN'T REMAIN 0 TAD P232 /TIMER2 IS UP JMP TIMEUP /STORE CTRL/Z=END-OF-FILE WAITIN, /THESE CONSTANTS ACT AS NOP'S MK70, 70 MK177, 177 P16, 16 P217, 217 /CTRL/O P221, 221 /CTRL/Q P223, 223 /CTRL/S PR32, 232 /CTRL/Z P113, 336-223 /TO PRINT ^ PKSF JMP TIMLOP PKRB TIMEUP, DCA CHAR TAD MTIM2 /SET UP TIMER2 DCA TIMER2 TAD CHAR JMP I RECEIV CDFINS, CDF MK7400, 7400 MTIM2, MK7700, 7700 /MASK AND TIMER2 CONSTANT (-100), TO WAIT /ABOUT 8 SECS FOR EVERY CHAR BUT FIRST M3, -3 WCOUNT, 0 /DOUBLE WORD COUNTER BUFADD, 0 /BUFFER POINTER TIMER2, 7400 /INITIAL VALUE TO WAIT ABOUT 35 SECS /FOR THE FIRST CHAR (-400) CHAR, 0 /TEMPORARY STORAGE CTRLS, 2 /2 AFTER CTRL/S, 0 AFTER CTRL/Q $$$$$$$$ /END OF CODE $$$$$$$$