PTYSRH:\r
\r
\r
-\r
;ACCUMULATOR ASSIGNMENTS\r
\r
DDB=DEVDAT\r
LINE=TAC1\r
-\r
CHREC=TEM\r
SCNHAC=12\r
PIOS=13\r
IOPTRE=2000 ;PTY RESPONSE IS READY\r
MONMOD=1000 ;PTY IS IN MONITOR MODE\r
\r
+\r
INTERNAL FTCHECK,FTMONP\r
IFN FTCHECK+FTMONP,<\r
EXTERNAL PTYDDB,PTYCSV,PTYSAC,PTYBND,PTYBM1,PTYDDS,PIOSAV,PDDSAV\r
EXP PTYDSP\r
XWD DVIN+DVOUT,3\r
Z\r
+ Z\r
XWD PROG,0\r
XWD PROG,0\r
Z\r
XP PTYCSV,.-ZZ\r
Z\r
- XP PTYDDS,.-ZZ\r
+ XP PTYSAC,.-ZZ\r
BLOCK 13\r
XP PTYBND,PTYSAC+12\r
- XP PTYDM1,PTYBND-1\r
+ XP PTYBM1,PTYBND-1\r
XP PTYDDS,.-ZZ ;SIZE OF PTY DDB\r
\r
PTYSA2: BLT SCNHAC,0\r
PIOSAV: 0\r
PDDSAV: 0\r
>\r
-\fINTERNAL PTYDSP\r
+\f\r
+INTERNAL PTYDSP\r
EXTERNAL OUT\r
POPJ PDP, ;INITIALIZE\r
POPJ PDP, ;PRINT ERROR, STOP JOB\r
;SET IN THE OF IOS)\r
\r
\r
-EXTERNAL TCONLN,TTYTIBTPYTAB,PTYTAB,SETIOD\r
-EXTERNAL ADVBFF,RUNIT,RECIN3,PUTCHI\r
-EXTERNAL TTIBUF,SPCHEK,DDBSRC,LINTAB,CNCTST,TIFCTR,INBFUL\r
+EXTERNAL TCOMLN,TTYTAB,TCOMM,TPYTAB,PTYTAB,ITMCNT,SETIOD\r
+EXTERNAL ADVBFE,PUNIT\r
\r
PTYOUT: LDB LINE,PUNIT\r
JSR PTYSAV\r
POPJ PDP,\r
\r
PTYOU6: TLO IOS,T37+IOFST ;FORCE BUFFER RESET\r
- ;T37 SO TABS, ETC NOT TRNSLATED (TIMING ERRO OTHERWI)\r
+ ;T37 SO TABS, ETC NOT TRNSLATED (TIMING ERROR OTHERWISE)\r
MOVEM IOS,DEVIOS(DDB)\r
JSR PTYRET ;RESTORE ACS\r
\r
JUMPE ITEM,PTYOU8 ;BUFFER EMPTY>\r
\f PUSHJ PDP,ITMCNT\r
MOVEM ITEM,DEVCTR(DDB)\r
+\r
\fPTYOU1: TRO IOS,IOACT\r
TRZ IOS,IOPTRE\r
JSR PTYSAV ;SAVE ACS\r
JRST PTYOU3 ;YES, BUFFER NOT MOVED INTO OBJECT\r
;JOB TTY IN BUFFER \r
JRST PTYOU2 ;NO\r
-\r
PTYOU4: CAIE CHREC,"^"\r
JRST PTYOU7\r
MOVEM CHREC,PTYCSV(PDDB);YES. FLUSH OUTPUT\r
MOVEM IOS,DEVIOS(DDB) ;SAVE TTY STATE\r
TRO PIOS,IOPTRE ;LET USER KNOW\r
\r
-PTYOU3: JRS PTYRET ;RESTORE ACS\r
+PTYOU3: JSR PTYRET ;RESTORE ACS\r
EXCH IOS,PIOS\r
PTYOU8: TLZE IOS,IOW\r
PUSHJ PDP,SETIOD ;START PTY JOB\r
TLO IOS,IOFST\r
MOVEM IOS,DEVIOS(DDB)\r
POPJ PDP,\r
-\fEXTERNAL TCONLN,TTYTAB,SETIOD,ADVBFF,STOSQD,ADRERR\r
+\fEXTERNAL TCONLN,TTYTAB,SETIOD,STODAT,ADVBFF,STOSQD,ADRERR\r
\r
PTYIN: LDB LINE,[POINT 6,DEVCHR(DDB),23]\r
ADDI LINE,TCONLN\r
JUMPE CHREC,PTYIN5+1 ;NO\r
;YES,SAVE LINE NO.\r
PTYIN4: TLNN PIOS,IO+SP ;IS TTY DONE?\r
- JRST PTYI38 ;YES. THATS ALL\r
+ JRST PTYI3B ;YES. THATS ALL\r
MOVE DAT,CHREC\r
PUSHJ PDP,STODAT ;STORE CHARACTER\r
JRST ADRERR\r
EXCH PDDB,DDB\r
PUSH PDP,LINE\r
JRST PTYIN4\r
-\fPTYI3A: TRZ IOS,IOBKTL\r
+\r
+\f\r
+PTYI3A: TRZ IOS,IOBKTL\r
TRO IOS,IOPTRE ;INPUT READY\r
PTYI3B: PUSHJ PDP,STOSQD\r
JRST ADRERR\r
POP PDP, LINE\r
PTYIN8: MOVEM IOS, DEVIOS(DDB)\r
POPJ PDP,\r
+\r
+\r
\f;SAVE ACCUMULATORS\r
;CALL MOVEI DDB,ADDRESS OF PTYDB\r
; JSR PTYSAV\r
IFE FTCHECK+FTMONP,<\r
PTYSAV: 0\r
>\r
-PTYSA0: MOVEM SCHHAC,PTYBDN(DDB) ;SAVE HIGH AC\r
+PTYSA0: MOVEM SCNHAC,PTYBND(DDB) ;SAVE HIGH AC\r
HRRZ SCNHAC,DDB\r
- ADDI SCHNHAC,PTYBM1\r
+ ADDI SCNHAC,PTYBM1\r
HRRM SCNHAC,PTYSA2\r
SUBI SCNHAC,SCNHAC-1\r
XCT PTYSA2 ;DO BLT SCNHAC\r
MOVE PDDB,DDB\r
JRST @PTYSAV\r
\r
+\r
;RESTORE ACCUMULATORS\r
;CALL MOVEI PDDB,PTY DATA BLOCK ADDRESS\r
; JSR PTYRET\r
\r
+\r
IFE FTCHECK+FTMONP,<\r
PTYRET: 0\r
>\r
\r
;SAVE ONLY PIOS AND PDDB\r
\r
+\r
IFE FTCHECK+FTMONP,<\r
PACSAV: 0\r
>\r
PTWAKE: PUSH PDP,TEM\r
PUSH PDP,TAC1\r
LDB TAC,[POINT 6,DEVCHR(PDDB),5] ;PTY JOB NR\r
-\r
HRRZ TAC1,CLOCK ;LAST JOB IN CLOCK QUEUE\r
PTWAK2: CAIN TAC1,CIPWTM1 ;LOOKED AT ALL JOBS\r
JRST PTWAK1 ;YES, WAS NOT SLEEPING\r
\r
INTERNAL PTYOW,PTMNMD,PTMNMZ\r
\r
-PTMNMD: PUSH PDP,PIOS\r
+\r
+PTMNMD: JSR PACSAV ;SAVE 2 AC'S\r
MOVEI PIOS,MONMOD ;PTY INTO MONITOR MODE\r
JRST PTYSET\r
\r
-PTMNMZ: PUSH PDP,PIOS\r
+PTMNMZ: JSR PACSAV ;SAVE AC'S\r
HRROI PIOS,MONMOD ;PTY OUT OF MONITOR MODE\r
JRST PTYSET\r
\r
-PTYOW: PUSH PDP,PIOS\r
+PTYOW: JSR PACSAV\r
MOVEI PIOS,IOPTW ;PTY IN OUTPUT WAIT\r
\r
PTYSET: MOVE PDDB,LINE\r
IORB PIOS,DEVIOS(PDDB)\r
TRNE PIOS,IOPTW ;IS LINKED TTY JOB IN INPUT WAIT?\r
PUSHJ PDP,PTWAKE ;YES, WAKE UP CONTROL JOB\r
- JSRT ACRET\r
+ JRST ACRET\r
+\r
\f END\r
-\f\r