1 TITLE PTRSER - PAPER TAPE READER SERVICE ROUTINE
\r
3 EXTERNAL WSYNC, STOSQD, ILLOUT
\r
4 EXTERNAL STODAT, IOSET, SETBYT, CKS12, ADVBFF
\r
5 EXTERNAL SETIOD, PTRSAV, PTRCHN, PTRRET,PIOMOD
\r
8 ;PTR DEVICE DATA BLOCK LINKAGE
\r
10 EXTERNAL PTRDB,PTRDAT,PTRCHR,PTRIOS,PTRSER,PTRMOD,PTRBUF
\r
11 EXTERNAL PTRADR,PTRPTR,PTRCTR,PTRSVC,PTRSV1
\r
15 ,PARAMETER ASSIGNMENTS
\r
16 , PTR CONTROL REGISTER
\r
17 PTRDON=10; DONE FLAG
\r
18 PTRBSY=20; BUSY FLAG
\r
19 PTRBIN=40; BINARY READ MODE
\r
20 POW=400; POWER. ON=1
\r
22 , SPECIAL IO STATUS WORD ASSIGMENTS
\r
26 , SPECIAL ASCII CHARACTERS
\r
29 S2EOF=232; END OF FILE
\r
30 , PI CONTROL REGISTER
\r
36 PTRDAT: SIXBIT "PTR"
\r
40 PTRMOD: XWD 1000+PROG,10403
\r
50 ,PTR SERVICE DISPATCH TABLE
\r
52 PTRDSP: JRST PTRREL ;RELEASE
\r
58 PTRINP: TLNN IOS,IOBEG; VIRGIN DEVICE? (IOBEG=1?)
\r
60 TLO IOS,IOFST; IOFST:=1. NEXT ITEM WILL BE FIRST ITEM
\r
61 PUSHJ PDP,SETBYT; TAC0-5:=TAC12-13:=0,TAC6-11:=BYTE SIZE
\r
63 MOVEM TAC,PTRPTR; PTRPTR:=C(TAC)
\r
64 CONSZ PTR,POW; IS POWER ON?
\r
65 TLO IOS,PTRPOW; YES. PTRPOW:=1
\r
66 PTRIN1: TRO IOS,IOACT; IOACT:=1
\r
68 MOVEI TAC1, PTRCHN; TAC1:=PTR PI CHANNEL ASSIGNME
\r
69 CAIN TAC,B; MODE=BINARY?
\r
70 ADDI TAC1,PTRBIN; YES. ALPHA/BINARY:=BINARY
\r
71 MOVEI TAC,PTRDON ;SET CONSO INTERRUPT FLAG
\r
73 TLZN IOS,IOBEG; VIRGIN DEVICE? (IOBEG=1?)
\r
75 MOVEM IOS,PTRIOS; PTRIOS:=C(IOS)
\r
76 CONO PTR,PTRBSY(TAC1); PTR BUSY FLAG:=1,ASSIGN INTER
\r
77 POPJ PDP,; INPUT RETURN-VIRGIN DEVICE
\r
79 PTRIN4: MOVEM IOS,PTRIOS; PTRIOS:=C(IOS)
\r
80 CONO PTR,PTRDON(TAC1); PTR DONE FLAG:=1,ASSIGN INTER
\r
84 PTRINT: CONSO PTR,PTRDON ;INTERRUPT. IS DONE FLAG = 1?
\r
85 JRST PTRINT ;NO. IF PTR IS IN FLAG LIST, THIS LOC
\r
86 SKIPL PTRIOS ;DISCONNECT REQUEST? (IODISC=1?)
\r
87 DATAI PTR,PTRSV1 ;PTRSV1: = DATA WORD
\r
88 JSR PTRSAV ;SAVE ACCUMULATORS AND ESTABLISH PDP
\r
89 MOVEI DEVDAT,PTRDAT ;DEVDAT: = PTR SIXBIT
\r
90 PUSHJ PDP,IOSET ;PROG:=C(JBTADR18-35),ITEM:=C(DEVCTR)
\r
91 MOVE IOS,PTRIOS ;IOS:=C(PTRIOS)
\r
92 MOVE DAT,PTRSV1 ;DAT:=C(PTRSV1)
\r
93 CONSO PTR,POW ;PTR POWER ON?
\r
95 TLON IOS,PTRPOW ;PTRPOW=1? PTRPOW:=1
\r
99 TLZE IOS,PTRFCI ;IS PTRFCI=1?
\r
100 MOVE DAT,PTRSVC ;YES. DAT:=C(PTRSVC)
\r
101 PTRIN0: TRNE IOS,B ;MODE=BINARY?
\r
103 CAIE DAT,NULL ;LAST CHARACTER NULL OR RUBOUT
\r
106 JUMPE DAT,PTREX1 ;DAT=0?
\r
108 PTRI0: PUSHJ PDP,STODAT ;NO STORE DATA WORD.
\r
109 JFCL ;CHECKSUM ERROR
\r
110 JRST PTRI1 ;BLOCK FULL OR BLOCK COMPLETE
\r
111 JRST PTREX1 ;DATA STORED CORRECTLY.
\r
113 PTRI1: PUSHJ PDP,ADVBFF ;ADVANCE BUFFER
\r
114 TLO IOS,IODISC; NEXT BUFFER IS FULL. IODISC:=1
\r
115 TRNE IOS,IOCON; NEXT BUFFER IS EMPTY. CONTINUOUS? (IOC
\r
116 TLO IOS,IODISC; NON-CONT. OPERATION. IODISC:=1
\r
117 PTRI2: TLO IOS,IOFST; IOFST:=1. NEXT ITEM IS FIRST ITEM OF A
\r
118 TLZE IOS,IOW; IN A WAIT? IOW:=0
\r
119 PUSHJ PDP,SETIOD; IOWS:=1
\r
123 ,COME HERE WHEN THE READER IS SHUT OFF
\r
125 PTREND: TDZ IOS,[XWD PTRPOW,IOACT] ;PTRPOW:=0,IOACT:=0
\r
126 PUSHJ PDP,PTRREL ;CLEAR PTR AND CONSO FLAG
\r
128 TLO IOS,IOEND ;IOEND:=1
\r
129 TRNE TAC,B ;MODE=A,AL
\r
131 MOVEI DAT,S2EOF; EOF CHAR
\r
132 PUSHJ PDP,STODAT ;STORE DATA WORD
\r
133 JRST PTRI0+1 ;CHECKSUM ERROR
\r
134 JRST .+3 ;BLOCK FULL OF BLOCK COMPLETE
\r
135 PTREI: PUSHJ PDP,STOSQD; FINISH THIS BUFFER, STORE WORD COUNT
\r
137 PUSHJ PDP,ADVBFF ;ADVANCE BUFFER
\r
141 PTREIB: CAIE TAC,B ;MODE=BINARY?
\r
143 TLNN IOS,IOFST ;IOFST=1?
\r
144 TRO IOS,PTRERR ;NO. PTRERR:=1. BINARY BLOCK INCOMPLE
\r
149 PTREX: SKIPG @PTRADR ;IOUSE=1?
\r
154 PTREX0: DATAI PTR,PTRSVC ;SAVE LAST DATA WORD FROM PTR
\r
155 PUSHJ PDP,PTRREL ;CLEAR PTR AND CONSO FLAG
\r
156 TLO IOS,PTRFCI ;PTRFCI:=1
\r
157 TRZ IOS,IOACT ;IOACT:=0
\r
159 PTREX1: MOVEM ITEM,PTRCTR ;PTRCTR:=C(ITEM)
\r
160 MOVEM IOS,PTRIOS ;PTRIOS:=C(IOS)
\r
161 JRST PTRRET ;RESTORE ACCUMULATORS AND DISMISS INTER
\r
166 PTRREL: CONO PTR,0 ;CLEAR PTR CONTROL
\r
167 HLLZS PTRINT ;CLEAR CONSO FLAG
\r