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