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,PTRDSP
\r
11 ;PTR DEVICE DATA BLOCK LINKAGE
\r
21 \f,PARAMETER ASSIGNMENTS
\r
22 , PTR CONTROL REGISTER
\r
23 PTRDON=10 ;DONE FLAG
\r
24 PTRBSY=20 ;BUSY FLAG
\r
25 PTRBIN=40 ;BINARY READ MODE
\r
26 POW=400 ;POWER, ON=1
\r
28 , SPECIAL IO STATUS WORD ASSIGNMENTS
\r
32 , SPECIAL ASCII CHARACTERS
\r
36 INTERNAL FTCHECK,FTMONP
\r
37 IFN FTCHECK+FTMONP,<
\r
38 EXTERNAL PTRDDB,PTRIOS,PTRADR,PTRPTR,PTRCTR,PTRSVC,PTRSV1,PTRCON
\r
40 IFE FTCHECK+FTMONP,<
\r
41 ;PTR DEVICE DATA BLOCK
\r
45 PTRDAT: SIXBIT /PTR/
\r
49 XWD DVPTR+DVIN,14403
\r
61 ,PTR SERVICE DISPATCH TABLE
\r
62 JRST PTRINI ;INITILIZE
\r
63 JRST PTRREL ;HUNG DEVICE TIME-OUT ERROR.
\r
64 PTRDSP: JRST PTRREL ;RELEASE
\r
67 \f TLNN IOS,IOBEG ;INPUT, VIRGIN DEVICE?
\r
69 TLO IOS,IOFST ;IOFST:=1. NEXT ITEM WILL BE FIRST ITEM OF A BUFFER
\r
70 TLZ IOS,PTRPOW+PTRFCI+IODISC
\r
71 PUSHJ PDP,SETBYT ;TAC0-5:=TAC12-13:=0,TAC6-11:=BYTE SIZE
\r
73 MOVEM TAC,PTRPTR ;PTRPTR:=C(TAC)
\r
74 CONSZ PTR,POW ;IS POWER ON?
\r
75 TLO IOS,PTRPOW ;YES. PTRPOW:=1
\r
78 TLZN IOS,IOBEG ;VIRGIN?
\r
79 MOVEI TAC1,PTRDON ;NO
\r
82 ANDI TAC1,PTRMSK ;PTRMSK IS DEFINED IN BUILD AS -1 PDP-6 AND 0 PDP-10
\r
83 PUSHJ PDP,SETACT ;IOACT:=1
\r
84 MOVEI TAC,PTRCHN(TAC1)
\r
86 CAIE TAC1,IB ;IMAGE BINARY?
\r
87 CAIN TAC1,B ;OR BINARY
\r
93 PTRINT: CONSO PTR,@PTRCON
\r
95 SKIPL PTRIOS ;DISCONNECT REQUEST? (IODISC=1?)
\r
96 DATAI PTR,PTRSV1 ;PTRSV1:=DATA ITEM.
\r
97 JSR PTRSAV ;SAVE ACCUMULATORS AND ESTABLISH PDP
\r
98 MOVEI DEVDAT,PTRDDB ;SET UP DEVDAT
\r
99 PUSHJ PDP,IOSET ;PROG:=C(JBTADR18-35),ITEM:=C(DEVCTR)
\r
101 MOVE DAT,PTRSV1 ;DAT:=DATA ITEM
\r
102 CONSO PTR,POW ;PTR POWER ON?
\r
104 TLON IOS,PTRPOW ;PTRPOW=1? PTRPOW:=1
\r
106 TLZE IOS,IODISC ;DISCONNECT REQUEST?
\r
108 TLZE IOS,PTRFCI ;IS PTRFCI=1?
\r
109 MOVE DAT,PTRSVC ;YES. DAT:=C(PTRSVC)
\r
110 PTRIN0: TRNE IOS,B ;MODE=BINARY?
\r
112 ANDI DAT,177 ;MASK OUT PARITY BIT
\r
113 CAIN DAT,RUBOUT ;LAST CHAR A RUBOUT?
\r
115 JUMPE DAT,PTREX1 ;DAT=0?
\r
117 PTRI0: PUSHJ PDP,STODAT ;NO STORE DATA WORD.
\r
118 JFCL ;CHECKSUM ERROR
\r
119 JRST PTRI1 ;BLOCK FULL OR BLOCK COMPLETE
\r
120 JRST PTREX1 ;DATA STORED CORRECTLY.
\r
122 PTRI1: PUSHJ PDP,ADVBFF ;ADVANCE BUFFER
\r
123 TLO IOS,IODISC ;NEXT BUFFER IS FULL. IODISC:=1
\r
124 PTRI2: TLO IOS,IOFST ;IOFST:=1, NEXT ITEM IS FIRST ITEM OF A BUFFER.
\r
125 TLZE IOS,IOW ;IN A WAIT? IOW:=0
\r
126 PUSHJ PDP,SETIOD ;IOWS:=1
\r
128 \f,COME HERE WHEN THE READER IS SHUT OFF
\r
131 PTREND: TDZ IOS,[XWD PTRPOW,IOACT] ;PTRPWO:=0,IOACT:=0
\r
132 PUSHJ PDP,PTRREL ;CLEAR PTR AND CONSO FLAG
\r
134 TLO IOS,IOEND+IOBEG
\r
135 CAIE TAC,B ;CHECKSUM BINARY BLOCK ..OF?
\r
137 TLNN IOS,IOFST ;IOFST=1?
\r
138 TRO IOS,IOIMPM ;NO. BINARY BLOCK INCOMPLETE.
\r
140 PTREI: PUSHJ PDP,STOSQD ;FINISH THE BUFFERE, STORE WORD COUNT
\r
142 PUSHJ PDP,ADVBFF ;ADVANCE BUFFERE
\r
147 PTREX: SKIPG @PTRADR ;IOUSE=1?
\r
152 PTREX0: DATAI PTR,PTRSVC ;SAVE LAST DATA WORD FROM PTR
\r
153 TLZE IOS,IOW ;JOB IN AN IO WAIT FOR PTR?
\r
154 PUSHJ PDP,SETIOD ;YES, WAKE UP JOB
\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 JRST STOIOS ;STORE IOS,RESET HUNG DEVICE
\r
161 ;TIMEOUT COUNT AND DISMISS
\r
164 PTRREL: CONO PTR,0 ;CLEAR PTR CONTROL
\r
165 HLLZS PTRCON ;CLEAR CONSO FLAG
\r