X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v4.5.git/blobdiff_plain/d693caac75dd25e668e43e85c29205bfc8dea06e..8c11230d54654d010d9027c672dcf4011d2cf539:/src/scnsrf.mac diff --git a/src/scnsrf.mac b/src/scnsrf.mac index 37d1861..76fda9d 100644 --- a/src/scnsrf.mac +++ b/src/scnsrf.mac @@ -86,7 +86,6 @@ IFNDEF FTHDPX, ;NON-ZERO TO INCLUDE HALF-DUPLEX CODE IFNDEF FTDDTM, ;NON-ZERO TO IUNCLUDE CALLI DDTIN,OUT FTTTYSER=-1 ;DEFINE THIS SYSTEM TO HAVE SCNSRF - INTERN FTTTYSER ;ASSURE MULT DEF GLOBALS IF WRONG APSER ; RIGHT HALF BITS (USER MODE0 FCS=100 ;FULL CHARACTER SET. PASS @@ -138,7 +137,6 @@ TTYRMT=4000 ;REMOTE TTY LINE TLKRNG=1 ;THIS LINE CURRENTLY IN A TALK RING XON=2 ;^Q TYPED, PAPER TAPE INPUT - FULTWX=4 ;SELF ECHOING FULL DUPLEX T35=10 ;MODEL 35 T37=20 ;MODEL 37 @@ -165,6 +163,7 @@ INTERNAL T35,T37,FULTWX,LGLSET,KILMSK,XON LINE=TAC1 ;SCANNER LINE NUMBER HPOS=ITEM ;HORIZONTAL POSITION OF TTY,(0-71) + ;SPECIAL SYMBOLS PION=200 ;TURN PI ON BIT @@ -173,8 +172,10 @@ INTERNAL T35,T37,FULTWX,LGLSET,KILMSK,XON IDLECH=1 ;DELAY CHAR FOR TABS, ETC, ; SHOULD BE ^V, BUT FOR 37'S + ;BYTE POINTERS + INTERNAL TPCJOBN,TYPX,FULTWX,TYPE,TAKR,BREAKB PHPOS: POINT 7,DEVIAD(DEVDAT),12 ;HORIZONTAL POSITION @@ -213,6 +214,7 @@ TOIP=400000 ;SIGN OF TTYPTR(DDB) - TYPE-OUT IN PROGRESS ; DATA BLOCKS. ; 4)SETS TTYUSE#1 IN ALL TTY DDBS IN THE TRANSLATOR TABLE. + EXTERNAL SCNCHN,MLTTYL,MTTYLN,TTYTAB,SCNINI TTYINI: MOVEI TAC,SCNCHN @@ -221,7 +223,6 @@ TTYINI: MOVEI TAC,SCNCHN MOVSI TAC1,MLTTYL ;NO. OF TTY DEV. DATA BLOCKS. NOT LINES MOVSI IOS,TPMON+IOFST ;VIRGIN STATUS MOVEI DDB,TTYLST ;FIRST TTY DDB ADDRESS - SCN1: MOVSI DAT,TTYUSE ;TTY DDB IN USE BIT TDNN DAT,DEVMOD(DDB) ;IS THIS TTY DDB IN USE? SETZM DEVNAM(DDB) ;NO, SET PHYSICAL NAME TO 0. @@ -254,6 +255,7 @@ SCN3: HRRM TAC,LINTAB(TAC1) ;SET LOG. LINE NUMBERS HLLM TAC,LINTAB(TAC1) ;LEAVING REST OF BITS AS THEY WERE AOBJN TAC1,SCN2 POPJ PDP, + ;ROUTINES TO SET UP BUFFERS INTERNAL TSETBF,SETBFI,PUTCHI @@ -276,6 +278,7 @@ SETBF0: MOVE TAC,BUF(DAT) MOVEM TAC,PCTR(DAT) HLRZ TAC,BUF(DAT) ;CHARACTER COUNT MOVEM TAC,FCTR(DAT) ;UPDATE FREE CHARACTER COUNT + POPJ PDP, ;ROUTINE TO PUT A CHARACTER INTO A BUFFER (FOR INPUT,MERTPO, AND ONCE) ;CALL MOVEI DAT,TTYBUF(DDB) ;TO SPECIFY BUFFER @@ -336,6 +339,7 @@ GETCH1: TDZA CHREC,CHREC ;RETURN 0 INDICATING END OF BUFFER PUTCI0: AOS FCTR(DAT) ;READJUST FREE COUNTER POPJ PDP, + ;ROUTINE TO PLACE A CHARACTER INTO THE OUTPUT BUFFER ;CALLED AT INTERRUPT LEVEL ;CALL MOVE CHREC,CHARACTER TO PLACE INTO BUFFER @@ -354,6 +358,7 @@ PUTCHO: SOSGE TOFCTR(DDB) ;RETURN IMMEDIATELY IF NO ROOM PUTCO1: IDPB CHREC,TOPUTR(DDB) ;PUT CHARACTER INTO BUFFER CONO PI,PION ;GET PI BACK ON POPJ PDP, + ;ROUTINE TO CHECK IF A CHARACTER IS SPECIAL(ASCII 0-37, 175-177) ;CALL MOVE CHREC,CHAR. TO BE CHECKED ; PUSHJ PDP,SPCHEK @@ -375,7 +380,7 @@ SPCHK1: MOVE TAC,SPCTAB(CHREC) ;FORMAT XWD BITS+CHAR,ADRESS OF ROUTINE ;HIGH ORDER BITS IN LH: -SPACTN=40000 ;SPECIAL ACTION TO BE TAKEN +SPACTN=400000 ;SPECIAL ACTION TO BE TAKEN SPOUT=100000 ;SPECIAL HANDLING ON UUO OUTPUT BREAKB=20000 ;BREAK CHARACTER SPHPOS=10000 ;CHARACTER AFFECTS HORIZONTAL POSITION @@ -430,6 +435,7 @@ INTERNAL DDTIN EXTERNAL WSYNC,IADRCK,ADRERR EXTERNAL PTYOW + DDTIN: PUSHJ PDP,TTYFNU ;SET UP DEVDAT,LINE MOVE IOS,[XWD TTYIOW+DDTM,IOACT] IORB IOS,DEVIOS(DDB) ;PUT INTO I/O WAIT @@ -438,7 +444,6 @@ DDTIN: PUSHJ PDP,TTYFNU ;SET UP DEVDAT,LINE PUSHJ PDP,TWSYNC ;NO, WAIT FOR SOME DDTIW: MOVE IOS,[XWD TTYIOW,IOACT] ANDCAB IOS,DEVIOS(DDB) - MOVSI TAC,IOFST+DDTM IORM TAC,DEVIOS(DEVDAT) ;STOP ALL IO HRRZ TAC,@UUO ;CONTENTS OF USER (DDT) AC @@ -502,7 +507,7 @@ DDTOUT: PUSHJ PDP,TTYFNU DDT5: MOVSI IOS,IO+DDTM IORB IOS,DEVIOS(DDB) HRLI UUO,PROG ;POINT TO USER AC - HRRI UUO,-1(PROG) ;COMPENSATE FOR GETWD1 + HRRI UUO,-1(UUO) ;COMPENSATE FOR GETWD1 DDT2: MOVE DAT,[XWD 440700,TAC] ;BYTE POINTER TO TAC PUSHJ PDP,GETWD1 ;GET THE USER'S WORD DDT3: TLNN DAT,760000 ;ANY CHARS LEFT? @@ -593,7 +598,7 @@ OUTC1A: ;HERE ON OUTPUT OF SLOW CHARS TO SMART TTY ;TO ADJUST HPOS FOR OUTPUT OF CHREC ;SKIPS IF SPCHECK SAYS SPECIAL CHAR -ADJHP: CAIL CHREC,174 ;HIGH SPECIALS? +ADJHP: CAILE CHREC,174 ;HIGH SPECIALS? JRST SPCHEK ;YES, NO HPOS MOTION CAIL CHREC,40 ;CONTROL CHARACTERS? AOJA HPOS,SPCHEK ;NO. COUNT HPOS FOR PRINT CHAR @@ -731,7 +736,6 @@ SCNDDB: SIXBIT /TTY0/ ;DEVNAME XP TOBF,.-ZZ REPEAT STTYBF,<0> ;NO. OF CHAR. IN MON. BUF. - XP TTYCHR,<*5> XP SCNDDS,.-ZZ ;SIZE OF SCN DDB @@ -785,7 +789,6 @@ MONUS1: PUSHJ PDP,GETCHR ;GET A CHAR, FROM IT IDPB CHREC,AC1 ;PLACE CHAR. IN USER BUFFER PUSHJ PDP,SPCHEK ;SPECIAL CHARACTER? JRST MONUS2 ;NO - TLNE TAC,FCSBRK+BREAKB ;A BREAK CHARACTER? SOSA TISYNC(DDB) ;SOME BREAK, COUNT IT DOWN MONUS2: SOJG AC2,MONUS1 ;NO, USER BUFFER FULL? @@ -839,13 +842,13 @@ TTYOUT: MOVSI IOS,IOBEG MOVSI IOS,IO+IOFST IORB IOS,DEVIOS(DDB) + PUSHJ PDP,STLNAC ;GET LINE CHARACTERISTICS PUSH PDP,LINE ;SAVE INFO PUSHJ PDP,USRMON ;MOVE USER'S BUFFER TO TTO BUFFER PUSHJ PDP,ADVBFE ;ADVANCE USER'S HEADERS SKIPA JRST .+3 ;MOVE BUFFERS AVAILABLE - MOVEI IOS,IOACT ;NO MORE BUFFERS ANDCAB IOS,DEVIOS(DDB) ;CLEAR ACTIVE IN IOS POP PDP,LINE ;RESTORE LINE INFO @@ -909,10 +912,10 @@ TTYUUO: PUSHJ PDP,TTYFNU PUSHJ PDP,UADCK1 JRST @TTUUOT(UCHN) ;DISPATCH TO UUO ROUTINES + TTUUOT: EXP INCHRW ;(0)INPUT CHAR. WAIT TILL TYPED EXP ONEOUT ;(1)OUTPUT A CHARACTER EXP INCHRS ;(2)INPUT A CHAR. & SKIP - EXP OUTSTR ;(3)OUTPUT A STRING EXP INCHWL ;(4)INPUT CHAR, WAIT.LINE MODE EXP INCHSL ;(5)INPUT CHAR, SKIP. LINE MODE @@ -985,7 +988,6 @@ INCHRW: PUSHJ PDP,INCHRS ;GET ACHAR IF ONE IS THERE ONEOUT: PUSHJ PDP,GETWDU ;PICK UP CHAR FROM USER MOVE CHREC,TAC ;PUT IT IN PROPER AC ANDI CHREC,177 ;MASK ANY JUNK - JUMPE CHREC,CPOPJ ;DONT STORE NULLS PUSHJ PDP,OUTCHR ;PLACE IT IN TTO BUFFER JUMPN CHREC,DDTUTT ;IF IT STORED, RETURN @@ -1016,6 +1018,7 @@ SETLIN: MOVSI TAC,LGLSET ;MAKE MASK OF ALL OF THEM AND TAC,@UUO ;SET ONLY THOSE BITS USER WANTS SET IORM TAC,LINTAB(LINE) ;SET RESULTANT POPJ PDP, + ;ROUTINE TO ATTACH TTY TO A JOB ;CALL: MOVE DEVDAT,ADDRESS OF TTY DEVICE DATA BLOCK ; MOVE ITEM,JOB NUMBER @@ -1031,6 +1034,7 @@ SETLIN: MOVSI TAC,LGLSET ;MAKE MASK OF ALL OF THEM ; OR SIXBIT /CTY/, ; 5)SETS DEVOPR IF IT IS NON-ZERO. + INTERNAL TTYATT,TTYATI EXTERNAL PUNIT,PJOBN,TTYTAB @@ -1194,6 +1198,7 @@ TBYTEP: PUSH PDP,TAC1 ;SAVE LINE HLL TAC,TLHBYT(TAC1) POP PDP,TAC1 ;RESTORE LINE POPJ PDP,0 + ;ROUTINE TO FIND TTY FOR A JOB ;CALL: MOVE ITEM,JOB NUMBER ; PUSHJ PDP, TTYFND @@ -1204,11 +1209,13 @@ INTERNAL TTYFNU,TTYFND,TTYERP EXTERNAL JOB + TTYFNU: MOVE ITEM,JOB TTYFND: PUSHJ PDP,TTYSRC TTYDAT: MOVEI DAT,TTOBUF(DDB) POPJ PDP, + ;PUT JOB IN IO WAIT IF TTY BUFFER NOT EMPTY ;CALLED BY NON ERROR MESSAGE ROUTINES AT UUO LEVEL @@ -1313,7 +1320,6 @@ TTYSRA: HRRZ DEVDAT,TTYTAB(LINE) JRST TTYF9 ;FOUND TTYF0: AOBJN LINE,TTYSRA TTYF1: MOVSI TAC,576062 ;LOOK FOR DEVICE "OPR" - PUSHJ PDP,DEVPHY ;SEARCH PHYSICAL DEVICE NAMES FOR OPR SKIPA TAC,DEVOPR ;NOT FOUND. JRST TTYF9 @@ -1392,7 +1398,6 @@ TTYTLK: PUSHJ PDP,GETDDB ;IN CASE NOT SET UP POPJ PDP, MOVE IOS,DEVIOS(DEVDAT) ;IS TTY IN MONITOR MODE AND LEFT HAND MARGIN? MOVE TAC1,-3(PDP) ;TTY GIVING TALK COMMAND - MOVE TAC1,DEVNAM(TAC1) ;ITS NAME MOVE TAC,DEVNAM(DEVDAT) ;OPR IS NEVER TOO BUSY... CAME TAC1,DEVOPR ;EITHER ONE OPR? @@ -1437,6 +1442,7 @@ TTYUSR: MOVSI IOS,USRB ;SET BIT TO SWITCH TTY TO USER MODE INTERNAL CTYINT EXTERNAL SCNSAV,SCNCHN,TCONLN + CTYINT: CONSO TTY,50 ;TTI OR TTO FLAG? JRST CTYINT ;NO JSR SCNSAV ;YES, SAVE AC'S @@ -1629,7 +1635,6 @@ XMTIN4: MOVEI IOS,MERTPO ;OTHERWISE, DDB ONLY USED TO TYPE A JRST TTYKIL ;MESSAGE; KILL TTY DDB - XMTIN2: CONO PI,PION PUSHJ PDP,GETCHR ;NO, GET NEXT CHAR. IN BUFFER JUMPE CHREC,XMTIN1 ;IGNORE NULLS @@ -1762,7 +1767,6 @@ RUBOU2: PUSHJ PDP,RUBOU4 ;NOT A BREAK AFTER ALL AOJDPX: AOJA HPOS,DUPLX1 ;OUTPUT AND COUNT HPOS RUBOU1: TLZE LINE,ROBTPD ;END OF INPUT STREAM REACHED - PUSHJ PDP,BSECHO ;OUTPUT A BACKSLASH JRST CRLFEC ;AND A CR LF @@ -1777,6 +1781,7 @@ SIMFF1: PUSHJ PDP,DUPLX1 ;OUTPUT ECHO OF LF OR IDL TRNE TAC,17 ;DONE YET? SOJA TAC,.-2 ;NO. OUTPUT MORE POPJ PDP,0 ;DONE + SIMFF: TLO TAC,ECHSUP ;DON'T OUTPUT FF OR VT TO A 33 PUSHJ PDP,TTIPUT ;PUT IT IN BUFFER MOVEI CHREC,12 ;SIMULATE WITH LF'S @@ -1817,7 +1822,6 @@ CNTLEC: HRRI TAC,100(CHREC) ;SAVE UN-CNTL CHARACTER CRLF: MOVEI HPOS,0 ;HERE ON INPUT OF A CARRIAGE RETURN TLNE LINE,XON ;IF PAPER TAPE, NO FREE LF - JRST TTIPUT ;JUST STORE THE CR PUSHJ PDP,TTIPUT ;ORDINARILY, STORE AND GO ON HERE MOVEI CHREC,12 ;BY ADDING A LF @@ -1873,7 +1877,6 @@ DCPUTR: LDB TAC,PLSTLC ;CHECK FOR NONE TO DELETE ADD TAC,PUTR(DAT) ;* TLNE TAC,400000 ADD TAC,[XWD 347777,-1] - MOVEM TAC,PUTR(DAT) AOS FCTR(DAT) AOS TAC,PCTR(DAT) @@ -2015,7 +2018,6 @@ DDBSRC: HRRZ TAC,LINE ;NUMBER OF LINE ONLY HLRZ DEVDAT,DEVSER(DEVDAT) ;CHAIN THRU DDBS TDNE TAC,DEVMOD(DEVDAT) ;USE,ATTACH OR ASSIGN BITS ON? AOBJN IOS,.-2 ;YES. DONE? - JUMPGE IOS,CPOPJ ;YES. DEVICE DATA BLOCK FOUND? MOVSI TAC,TOIP ;CLEAR TOIP IN DDB ANDCAM TAC,TTYPTR(DDB) ;IN CASE OF PREVIOUS DETACH