1 TITLE CDRSR6 - CARD READER SERVICE FOR PDP-6 CARD READER
2 SUBTTL /TH TS3.17 18 OCT 67 V001
4 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP
20 CRCONO=CRBUSY+CRBIN+CRALL
23 COD029=5252 ;029 CONTROL CARD IS 12-0-2-4-6-8!
32 MINHNG=^D15 ;NO. OF TIMES TO OBEY HUNG CODE BEFORE REALLY BECOMING HUNG
34 CDRHNG: CONSO CDR,CRERR ;POWER OFF OR OTHER SUCH CATASTOPHE?
35 TLNN IO,IOFST ;NO - CARD JAMMED?
36 JRST CDRINI ;YES - PRINT HUNG MSG.
37 AOS (PDP) ;NEVER ERROR RETURN
38 CONSZ CDR,CRMISS ;FEEDCHECK?
39 CONSZ CDR,CRNRED ;YES - READER READY?
40 SOSA TAC,LOPCNT ;NO - PICK UP HUNG LOOP COUNTER
41 JRST CDRSTR ;YES - GIVE ANOTHER CONO
42 JUMPGE TAC,STOIOS ;COUNT NOT EXPIRED - LEAVE ACTIVE
43 SOS (PDP) ;EXPIRED - PRINT HUNG MSG.
45 CDRINI: CONO CDR,0 ;CLEAR HARDWARE
46 HLLZS CDRCON ;CLEAR CONSO BITS
49 \fINTERNAL FTCHECK,FTMONP
52 EXTERNAL CDRDDB,CRDIS,CRTEM,CDRCON,LOPCNT
55 ;CDR DEVICE DATA BLOCK
59 XWD 2*HUNGST,34 ;BUFFER LONG ENOUGH FOR BINARY CARDS
69 CRTEM: 0 ;TEMP FOR PARTIAL WORDS
70 CDRCON: 0 ;CONSO FLAGS
75 EXTERN CPOPJ1,ILLOUT,PIOMOD,SETACT,SETBYT,CDRCHN,PIOFF,PION,HNGSTP
78 ;CDR SERVICE DISPATCH TABLE (SHORT)
80 JRST CDRINI ;INITILIZATION
81 JRST CDRHNG ;HUNG DEVICE IS CHECKED
83 CDRDSP: JRST CDRINI ;RELEASE - CLEAR DEVICE
84 POPJ PDP,0 ;CLOSE - NOTHING SPECIAL
85 JRST ILLOUT ;OUTPUT WON'T WORK
87 TLZN IOS,IOBEG ;BEGINNING OF FILE? (NO MORE).
88 CONSO CDR,CREOFF ;BUTTON PUSHED?
89 TLZA IOS,CRMBIN+CRMIMG ;CLEAR TRASH
90 JRST CREOF ;END OF FILE PUSHED WHILE IOACT WAS 0
91 CDRIN1: CONO CDR,0 ;CLEAR ANY SPURIOUS FLAGS
92 CONSO CDR,CRERR!CRMISS!CRNRED ;POWER OFF,LEFT OVER FEED-CHECK OR NOT READY
94 PUSHJ PDP,HNGSTP ;YES - PRINT REMINDER & HALT JOB
95 JRST CDRIN1 ;GO TRY AGAIN WHEN USER TYPES 'CONT'
96 TLO IOS,IOFST+CRMFST ;NEW OPERATION
97 LDB TAC,PIOMOD ;SPEED UP TESTING OF MODE
99 TLO IOS,CRMBIN ;BINARY MODE
101 TLO IOS,CRMIMG ;IMAGE MODE
102 PUSHJ PDP,SETBYT ;LH(TAC):=700+PROG OR 4400+PROG
103 MOVEM TAC,DEVPTR(DEVDAT) ;SAVE BYTE SIZE
104 CDRSTR: MOVEI TAC,MINHNG ;HERE TO RESTART CDR ON FEED-CHECK
105 MOVEM TAC,LOPCNT ;RESET HUNG LOOP COUNTER
107 MOVE TAC,[XWD CRDONE,CRCONO]
109 CONO CDR,CDRCHN(TAC) ;START CDR
110 HLRM TAC,CDRCON ;AND LOOK FOR IT
112 POPJ PDP,0 ;RETURN TO UUOCON
116 EXTERN CDRSAV,IOSET,SETIOD,STOIOS,CDRCHN
118 CDRINT: CONSO CDR,@CDRCON
122 MOVE IOS,DEVIOS(DEVDAT)
125 TRO IOS,IODERR ;DEVICE ERROR
126 CONSO CDR,CRERR+CREOFF+CREOC
127 JRST CRDATA ;JUST A DATA INTERRUPT
128 CONSZ CDR,CRERR ;HARDWARE LOSS?
130 JRST CDREOC ;NO. MUST BE END OF CARD
131 CREOF: TLOA IOS,IOEND ;MARK END,SKIP TO CROFF
132 CDRERR: TRO IOS,IODERR ;CDR DEVICE ERROR HERE
133 CROFF: PUSHJ PDP,CDRINI ;STOP THE DEVICE
135 CRLST1: MOVEI TAC,MINHNG
136 MOVEM TAC,LOPCNT ;RESET HNG. LOOP CNT.
138 TLZE IOS,IOW ;JOB WAITING FOR CDR?
139 PUSHJ PDP,SETIOD ;YES. WAKE IT UP
140 CREXIT: MOVEM ITEM,DEVCTR(DEVDAT)
143 CRCONT: MOVEI TAC,CDRCHN ;PI CHANNEL
144 CONO CDR,CRCONO(TAC) ;MAKE IT GO AGAIN
145 TLO IOS,CRMFST ;FIRST COLUMN, BUT NOT FIRST IN BUFFER
146 JRST CREXIT ;AND RETURN
150 CRDATA: DATAI CDR,DAT
151 TLZN IOS,CRMFST ;COLUMN 1?
152 XCT CRDIS ;NO. SUBROUTINE HAS BEEN SET UP
153 TRNE IOS,IODERR ;POSSIBLE FEED CHECK?
154 CONSO CDR,CRNRED ;YES - READER READY?
155 JRST .+4 ;YES - GENUINE DATA ERROR
156 TLO IOS,CRMFST ;RESET 1ST COL. FLG.
157 TRZ IOS,IODERR ;CLEAR ERROR INDICATION
158 JRST STOIOS ;AND LET HUNG LOGIC SORT THINGS OUT
159 TLNE IOS,CRMIMG ;IMAGE MODE?
160 JRST CRFSTI ;YES, DON'T CHECK FOR EOF CARD
162 TRCN DAT,7400 ;12,11,0 AND 1 PUNCH?
163 JRST CREOF1 ;YES. AN EOF CARD.
165 JRST CRFSTB ;BINARY CARD FIRST COLUMN
166 MOVEI TAC,CRASCI ;HERE ON ASCII FIRST COLUMN
167 HRRM TAC,CRDIS ;FOR SUCCEEDING COLUMN INTERRUPTS
168 CAIE DAT,COD029 ;029 CONTROL CARD?
169 JRST CRASCI ;NO. PROCESS THE CARD.
170 TDO IOS, [XWD IOBEG,CRM029] ;FLAG FOR EOC AND TRANSLATOR
171 JRST CRIGNOR ;FLUSH REST OF THIS CARD
173 CRASCI: MOVEI TAC,0 ;CLEAR TAC
175 MOVEI DAT,4202 ;12-0 => 12-8-2
177 MOVEI DAT,2202 ;11-0 => 11-8-2
178 LDB TAC1,[XWD 110300,DAT] ;12,11,0 ROWS TO TAC1
180 TRC TAC1,7 ;YES, PERMUTE TAC1
187 TRNN IOS,CRM029 ;HAS 029 CODE BEEN IMPLIED?
188 TRO TAC1,20 ;NO. MOVE UP TO 026 CODE TABLE
189 LDB DAT,CRCV2(TAC) ;GET THE ASCII CHARACTER
190 PUSHJ PDP,CRSTOD ;STORE IT
191 JRST CREXIT ;AND RETURN
193 CRCV2: POINT 7,CRCNV(TAC1),6
194 POINT 7,CRCNV(TAC1),13
195 POINT 7,CRCNV(TAC1),20
196 POINT 7,CRCNV(TAC1),27
202 MOVEM DAT,CRTEM ;SAVE AS LEFT 12 BITS
203 JSP TAC,CREXI1 ;GET ANOTHER COLUMN
205 IORM DAT,CRTEM ;THROW IN MIDDLE 12 BITS
206 JSP TAC,CREXI1 ;ANOTHER COLUMN
207 IORB DAT,CRTEM ;RIGHT 12. SAVE IN CRTEM FOR DEBUG
208 CRBIN2: PUSHJ PDP,CRSTOD ;ENTRY HERE FROM BIN CARDS
209 MOVEI TAC,CRFSTI ;ANOTHER 3 COLUMNS COME NEXT
210 CREXI1: HRRM TAC,CRDIS ;WHERE TO GO FOR NEXT COLUMN
211 JRST CREXIT ;RETURN FROM INTERRUPT
213 CDREOC: CONSO CDR,CREOFF
214 TLNE IOS,IOEND ;END OF FILE?
215 JRST CREOF ;YES. SHUT OFF CDR
216 TLNN IOS,CRMIMG+CRMBIN ;IMAGE OR BIN?
218 TLNN IOS,CRMIMG ;IMAGE?
220 MOVE DAT,CRTEM ;HERE ON EOC AND IMAGE
221 PUSHJ PDP,CRSTOD ;STORE LAST 2 COLUMNS IN BUFFER
222 CRENDB: PUSHJ PDP,CRADV1 ;ADVANCE BUFFER
223 CRENDC: MOVEI TAC,CDRCHN ;PI CHANNEL
224 CONO CDR,CRCONO(TAC) ;GO FOR NEXT CARD
225 JRST CRLST1 ;SET UP FOR NEXT CARD,DISMISS INTERRUPT,
226 ;ALSO WAKE UP JOB IF IN IOW
228 CRFSTB: MOVEI TAC,-5(DAT)
229 TRNE TAC,17 ;ROWS 6-9=5?
230 TRO IOS,IOIMPM ;NO. NOT A BIN CARD
231 LSH DAT,-4 ;GET COLUMNS 1-5
232 JUMPE DAT,CRIGNOR ;IGNORE BINARY CARDS WITH 0 WORD COUNT
233 MOVEM DAT,CRTEM ;SAVE AS WORD COUNT
234 JSP TAC,CREXI1 ;GET COLUMN 2
235 HRL DAT,CRTEM ;(COUNT)CKSUM
236 MOVSS DAT ;(CKSUM)COUNT
237 JRST CRBIN2 ;STORE DAT AND GET REST OF CARD
240 EXTERN STOSQD,STODAT,ADVBFF
242 CRENDA: TLZE IOS,IOBEG ;WAS THIS A 029 CONTROL CARD?
243 JRST CRCONT ;YES. NO CRLF.
244 MOVEI DAT,15 ;CARRIAGE RETURN
245 PUSHJ PDP,CRSTOD ;STORE
246 MOVEI DAT,12 ;LINE FEED
247 PUSHJ PDP,CRSTOD ;STORE
248 LDB TAC1,PIOMOD ;GET MODE
249 CAIN TAC1,AL ;ASCII LINE?
250 JRST CRENDC ;YES -WORD COUNT WILL HAVE BEEN COMPUTED & BUFFERS ADVANCED
251 CAIL ITEM,^D82 ;ROOM FOR ANOTHER CARD + CRLF?
252 JRST CRCONT ;YES. DO SO
253 PUSHJ PDP,STOSQD ;NO. STORE WORD COUNT
254 JRST CROFF ;CAN'T RETURN HERE, BUT ...
255 JRST CRENDB ;PROCEED TO ANOTHER BUFFER
257 CREOF1: TLO IOS,IOEND ;HERE ON EOF CARD. MARK FOR EOC
258 CRIGNOR: JSP TAC,CREXI1 ;GET MORE COLUMNS
259 JRST .-1 ;AND IGNORE THEM.
261 CRSTOD: PUSHJ PDP,STODAT ;STORE DAT IN BUFFER
262 JRST CRPOFF ;ADDRESS CHECK,IOBKTL,IODTER (CKSUM)
263 JRST CRADV ;BUFFER FULL OR BUFFER DONE
264 POPJ PDP,0 ;SIMPLE OK STORED RETURN
266 CRADV: TLNE IOS,CRMBIN ;BINARY?
267 JRST CRIGNOR ;WAIT FOR END OF CARD
268 CRADV1: TLNE IOS,IOFST ;VIRGIN BUFFER?
269 POPJ PDP,0 ;YES. KEEP THIS ONE
270 PUSHJ PDP,ADVBFF ;ADVANCE TO ANOTHER BUFFER
271 SKIPA ;NO BUFFER AVAILABLE
272 POPJ PDP,0 ;OK. RETURN
277 ;CODE CONVERSION FOR THE 029 KEYPUNCH
279 ;THE FOLLOWING EQUIVALENCES ARE ARTIFICIALLY DEFINED
281 ;029 KEYTOP ;ASCII 35 ;ASCII 37
284 ;VERT BAR ^ HAT = L.C. VERT BAR
286 ;NEGATION \ TILDE = L.C. NEGATION
288 ;CHARACTERS ;ZONE/DIGITS
289 CRCNV: ASCII / 123/ ;N/N-3
292 ASCII /HI[./ ;12,8/N-3
294 ASCII /QR!$/ ;11,8/N-3
295 ASCII /YZ],/ ;0,8/N-3
300 ASCII /<(+^/ ;12,8/4-7
302 ASCII /*);\/ ;11,8/4-7
303 ASCII /%_>?/ ;0,8/4-7
306 ;CODE FOR THE 026 KEYPUNCH A LA H HYMAN
311 ASCII /HI?./ ;12,8/N-3
313 ASCII /QR:$/ ;11,8/N-3
314 ASCII /YZ;,/ ;0,8/N-3
319 ASCII /)]<!/ ;12,8/4-7
321 ASCII /*[>&/ ;11,8/4-7
322 ASCII /("#%/ ;0,8/4-7
327 \f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0