1 TITLE PTRSER - PAPER TAPE READER SERVICE ROUTINE FOR BOTH PDP-6 AND PDP-10
\r
2 SUBTTL /GBH/TNM TS 14 APR 69 V004
\r
4 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP
\r
5 EXTERNAL STOSQD,ILLOUT
\r
6 EXTERNAL STODAT, IOSET, SETBYT, ADVBFF
\r
7 EXTERNAL SETIOD, PTRSAV, PTRCHN,PIOMOD
\r
8 EXTERNAL SETACT,STOIOS,CPOPJ1,PTRMSK
\r
9 INTERNAL PTRINT,PRTDSP
\r
11 ;PTR DEVICE DATA BLOCK LINKAGE
\r
15 \f,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 ASSIGNMENTS
\r
26 , SPECIAL ASCII CHARACTERS
\r
30 INTERNAL FTCHECK,FTMONP
\r
31 IFN FTCHECK+FTMONP,<
\r
32 EXTERNAL PTRDDB,PTRIOS,PTRADR,PTRPTR,PTRCTR,PTRSVC,PTRSV1,PTRCON
\r
34 IFE FTCHECK+FTMONP,<
\r
35 ;PTR DEVICE DATA BLOCK
\r
39 PTRDAT: SIXBIT /PTR/
\r
43 XWD DVPTR+DVIN,14403
\r
53 \f,PTR SERVICE DISPATCH TABLE
\r
54 JRST PTRINI ;INITILIZE
\r
55 JRST PTRREL ;HUNG DEVICE TIME-OUT ERROR.
\r
56 PTRDSP: JRST PTRREL ;RELEASE
\r
59 \f TLNN IOS,IOBEG ;INPUT, VIRGIN DEVICE?
\r
61 TLO IOS,IOFST ;IOFST:=1. NEXT ITEM WILL BE FIRST ITEM OF A BUFFER
\r
62 TLZ IOS,PTRPOW+PTRFCI+IODISC
\r
63 PUSHJ PDP,SETBYT ;TAC0-5:=TAC12-13:=0,TAC6-11:=BYTE SIZE
\r
65 MOVEM TAC,PTRPTR ;PTRPTR:=C(TAC)
\r
66 CONSZ PTR,POW ;IS POWER ON?>
\r
67 TLO IOS,PTRPOW LYES. PTRPOW:=1
\r
70 TLZN IOS,IOBEG ;VIRGIN?
\r
71 MOVEI TAC1,PTRDON ;NO
\r
74 ANDI TAC1,PTRMSK ;PTRMSK IUS DEFINED IN BUILD AS -1 PDP-6 AND 0 PDP-10
\r
75 PUSHJ PDP,SETACT ;IOACT:=1
\r
76 MOVEI TAC,PTRCHN(TAC1)
\r
78 CAIE TAC1,1B ;IMAGE BINARY?
\r
79 CAIN TAC1,B ;OR BINARY
\r
84 \fPTRINT: CONSO PTR,@PTRCON
\r
86 SKIPL PTRIOS ;DISCONNECT REQUEST? (IODISC=1?)
\r
87 DATAI PTR,PTRSV1 ;PTRSV1:=DATA ITEM.
\r
88 JSR PTRSAV ;SAVE ACCUMULATORS AND ESTABLISH PDP
\r
89 MOVEI DEVDAT,PTRDDB ;SET UP DEVDAT
\r
90 PUSHJ PDP,IOSET ;PROG:=C(JBTADR18-35),ITEM:=C(DEVCTR)
\r
92 MOVE DAT,PTRSV1 ;DAT:=DATA ITEM
\r
93 CONSO PTR,POW ;PTR POWER ON?
\r
95 TLON IOS,PTRPOW ;PTRPOW=1? PTRPOW:=1
\r
97 TLZE IOS,IODISC ;DISCONNECT REQUEST?
\r
98 TLZE IOS,PTRFCI ;IS PTRFCI=1?
\r
99 MOVE DAT,PTRSVC ;YES. DAT:=C(PTRSVC)
\r
100 PTRIN0: TRNE IOS,B ;MODE=BINARY?
\r
102 ANDI DAT,177 ;MASK OUT PARITY BIT
\r
103 CAIN DAT,RUBOUT ;LAST CHAR A RUBOUT?
\r
105 JUMPE DAT,PTREX1 ;DAT=0?
\r
107 PTRIO: PUSHJ PDP,STODAT ;NO STORE DATA WORD.
\r
108 JFCL ;CHECKSUM ERROR
\r
109 JRST PTRI1 ;BLOCK FULL OR BLOCK COMPLETE
\r
110 JRST PTREX1 ;DATA STORED CORRECTLY.
\r
112 PTRI1: PUSHJ PDP,ADVBFF ;ADVANCE BUFFER
\r
113 TLO IOS,IODISC ;NEXT BUFFER IS FULL. IODISC:=1
\r
114 PTRI2: TLO IOS,IOFST ;IOFST:=1, NEXT ITEM IS FIRST ITEM OF A BUFFER.
\r
115 TLZE IOS,IOW ;IN A WAIT? IOW:=0
\r
116 PUSHJ PDP,SETIOD ;IOWS:=1
\r
118 \f,COME HERE WHEN THE READER IS SHUT OFF
\r
120 PTREND: TDZ IOS,[XWD PTRPOW,IOACT] ;PTRPWO:=0,IOACT:=0
\r
121 PUSHJ PDP,PTRREL ;CLEAR PTR AND CONSO FLAG
\r
123 TLO IOS,IOEND+IOREG
\r
124 CAIE TAC,B ;CHECKSUM BINARY BLOCK ..OF?
\r
126 TLNN IOS,IOEST ;IOEST=1?
\r
127 TRO IOS,IOIMPM ;NO. BINARY BLOCK INCOMPLETE.
\r
129 PTREI: PUSHJ PDP,STOSQD ;FINISH THE BUFFERE, STORE WORD COUNT
\r
131 PUSHJ PDP,ADVBFF ;ADVANCE BUFFERE
\r
135 PTREX: SKIPG @PTRADR ;IOUSE=1?
\r
140 PTREX0: DATAI PTR,PTRSVC ;SAVE LAST DATA WORD FROM PTR
\r
141 TLZE IOS,IOW ;JOB IN AN IO WAIT FOR PTR?
\r
142 PUSHJ PDP,SETIOD ;YES, WAKE UP JOB
\r
143 PUSHJ PDP,PTRREL ;CLEAR PTR AND CONSO FLAG
\r
144 TLO IOS,PTRFCI ;PTRFCI:=1
\r
145 TRZ IOS,IOACT ;IOACT:=0
\r
147 PTREX1: MOVEM ITEM,PTRCTR ;PTRCTR:=C(ITEM)
\r
148 JRST STOIOS ;STORE IOS,RESET HUNG DEVICE
\r
149 ;TIMEOUT COUNT AND DISMISS
\r
152 PTRREL: CONO PTR,0 ;CLEAR PTR CONTROL
\r
153 HLLZS PTRCON ;CLEAR CONSO FLAG
\r