1 TITLE CDRSRX - CARD READER SERVICE FOR PDP-10(CR-10)
\r
2 SUBTTL T. WACHS/RCC TS 17 OCT 68 V004
\r
4 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP
\r
10 XWD DVCDR+DVIN,10403
\r
18 EXTERN ADVBFF,CDRCHN,CDRRET,CDRSAV,CPOPJ,CDRBTS
\r
19 EXTERN ILLOUT,NEWBF1,SETIOD,STOIOS,CLRACT,SETACT,ADRERR
\r
21 ;CDRBTS=1670+CDRCHN.... CONO TO READ A CARD
\r
22 COD029=5252 ;12-0-2-4-6-8
\r
23 CODEOF=7400 ;12-11-0-1
\r
33 ENTRY CDRSRX ;THIS NAME LETS BUILD PICK BETWEEN 2 CDRSER'S
\r
34 INTERN CDRDDB,CDRINT,CDRDSP
\r
38 JRST CDROFF+1 ;INITIALIZATION
\r
39 JRST CDRREL ;HUNG DEVICE
\r
40 CDRDSP: JRST CDRREL ;RELEASE
\r
42 JRST ILLOUT ;OUTPUT IS ILLEGAL
\r
43 \fCDRSRX: TLZN IOS,IOBEG ;FIRST TIME THROUGH?
\r
45 TLZ IOS,CR029+FORGET+IGNRBT ;YES. SET UP FOR 1ST TIME
\r
46 TRNE IOS,10 ;ASCII MODE?
\r
48 MOVEI TAC,CDRASC ;YES. SET UP FOR CODE CONVERSION
\r
49 MOVSI TAC1,700 ;BYTE SIZE =7
\r
51 MOVEI TAC,CDRBIN ;SET UP FOR BINARY
\r
52 TRNE IOS,3 ;REALLY BINARY?
\r
53 MOVEI TAC,CPOPJ ;IMAGE - NO PROCESSING
\r
54 MOVSI TAC1,1400 ;BYTE SIZE = 12
\r
55 SETPTR: MOVEM TAC1,CDRPTR ;SET BYTE SIZE
\r
56 HRRM TAC,CDRDIS ;AND PROCESSING LOC
\r
57 MOVEI TAC,770 ;SET UP INTERRUPT LOC
\r
59 CDRGO: PUSHJ PDP,NEWBF1 ;INITIALIZE NEW BUFFER
\r
60 JRST ADRERR ;ADRESS ERROR
\r
61 MOVEI TAC,(PROG) ;SET TO RELOCATE ADDRESS
\r
63 MOVEM PROG,USEPRG ;SAVE PROG FOR INTERRUPT ROUTINE
\r
64 CDRGO1: TLNE IOS,IOEND ;EOF?
\r
65 JRST EOF ;YES. SHUT DOWN CDR
\r
66 TLO IOS,COLUM1+COLUM2 ;NO. INIT FOR COLUMN 1
\r
67 MOVEI TAC,1670 ;SET UP CONO FOR NEXT CARD
\r
68 CONSO CDR,400100 ;WAS TROUBLE ENCOUNTERED OR CARD READY?
\r
69 MOVEI TAC,370 ;YES. SET CONO FOR READY-TO-READ
\r
70 CONO CDR,CDRCHN(TAC) ;START CARD READER
\r
71 TRO IOS,IOACT ;CANT USE SETACT AS IT ZEROES IOW
\r
72 JRST STOIOS ;WHICH MAY BE ON AFTER IGNORING A CARD
\r
75 CDRINT: CONSO CDR,0 ;INTERRUPT FOR CDR?
\r
76 JRST .-1 ;NO. GO AWAY
\r
77 CONSZ CDR,270 ;MAYBE. A TRANSIENT INTERRUPT
\r
78 JRST CDINT1 ;YES. DEFINATELY FOR CDR
\r
79 CONSZ CDR,200000 ;NO. RDY-TO-RD ENABLED?
\r
80 CONSO CDR,100 ;AND READY-TO-READ ON?
\r
81 JRST CHKTRB ;NO. CHECK FOR TROUBLE
\r
82 CONO CDR,CDRBTS ;YES. TELL CDR TO START READING
\r
83 JEN @CDRCHL ;AND DISMISS THE INTERRUPT
\r
84 CHKTRB: CONSZ CDR,400000 ;ENABLE FOR TROUBLE?
\r
85 CONSO CDR,400 ;AND TROUBLE OCCURRING?
\r
86 JRST CDRINT+1 ;NO. INTERRUPT IS NOT FOR CDR
\r
87 CDINT1: JSR CDRSAV ;YES. SAVE ACS
\r
88 MOVE IOS,CDRIOS ;RESTORE IOS
\r
89 CONSO CDR,10 ;DATA INTERRUPT?
\r
91 DATAI CDR,DAT ;YES. READ DATA
\r
92 TLNE IOS,FORGET+IGNRBT ;PROCESS IT?
\r
93 JRST CDRRET ;NO. DISMISS INTERRUPT
\r
94 TLZE IOS,COLUM1 ;FIRST COLUMN?
\r
95 JRST FSTCOL ;YES. MAKE SPECIAL CHECKS
\r
96 CDRDIS: PUSHJ PDP,. ;NO. PROCESS PIECE OF DATA
\r
97 IDPB DAT,CDRPTR ;STORE IT IN BUFFER
\r
98 SOSLE CDRCTR ;ROOM FOR MORE?
\r
99 POPJ PDP, ;YES. EXIT
\r
100 IGNORE: TLO IOS,IGNRBT ;NO. IGNORE REST OF CARD
\r
101 STODIS: MOVEM IOS,CDRIOS ;SAVE IOS
\r
102 POPJ PDP, ;EXIT THE INTERRUPT
\r
103 \f;HERE TO PROCESS A BINARY BYTE
\r
104 CDRBIN: ADDM DAT,CDRSUM ;ADD 12 BITS TO CHECKSUM
\r
107 ;HERE WHEN AN ASCII CHARACTER IS READ
\r
108 CDRASC: SETZB TAC,TAC1
\r
109 JUMPE DAT,CDRAS2 ;0-PICK UP AN ASCII BLANK
\r
114 LDB TAC1,[XWD 110300,DAT]
\r
123 TLNN IOS,CR029 ;AN 029 CARD READ?
\r
124 TRO TAC1,20 ;NO. BUMP TAC1 TO 026 TABLE
\r
125 CDRAS2: LDB DAT,CRCVPT(TAC) ;PICK UP ASCCII CHAR FROM TABLE
\r
126 POPJ PDP, ;AND RETURN
\r
127 \f;HERE WHEN THE 1ST COLUMN OF A CARD HES BEEN READ
\r
128 FSTCOL: CAIN DAT,CODEOF ;AN EOF CARD?
\r
129 JRST EOFCRD ;YES. HANDLE IT
\r
130 TRNE IOS,10 ;NO. ASCII CARD?
\r
132 CAIN DAT,COD029 ;YES. IS IT AN 029 CARD?
\r
133 TLO IOS,CR029+FORGET ;TES. SET A BIT
\r
134 SETIOS: MOVEM IOS,CDRIOS ;SAVE IOS
\r
135 TLNN IOS,FORGET ;FORGET REST OF CARD?
\r
136 JRST CDRDIS ;NO. PROCESS IT
\r
137 JRST CDRRET ;YES. DISMISS INTERRUPT
\r
138 SETFRG: TLOA IOS,FORGET ;SET BIT TO FORGET ABOUT CARD
\r
139 NOTASC: TRNN IOS,7 ;COL 1 OF A NOT ASCII CARD
\r
140 JRST SETIOS ;IMAGE MODE - NO PROCESSING
\r
141 TLZN IOS,COLUM2 ;COLUMN1?
\r
142 JRST COL2IN ;NO. COLUMN2 JUST READ
\r
143 MOVEI TAC,-5(DAT) ;COL1 - IS THERE A 7-9 PUNCH?
\r
145 TRO IOS,IOIMPM ;NO. SET ERROR BIT
\r
146 LSH DAT,-6 ;COLUMNS 12-3 ARE WORD COUNT
\r
147 JUMPE DAT,SETFRG ;FORGET CARD IF WRDCNT=0
\r
148 PUSH PDP,DAT ;SAVE DAT
\r
149 IMULI DAT,3 ;COMPUTE ITEM COUNT
\r
150 CAMGE DAT,CDRCTR ;MORE THAN THE BUFFER CAN HOLD?
\r
151 MOVEM DAT,CDRCTR ;NO. SAVE AS REAL COUNT
\r
152 POP PDP,DAT ;GET WRDCNT
\r
153 HRRM DAT,@CDRPTR ;IN R.H. OF 1ST DATA WORD OF BUFFER
\r
154 TLO IOS,COLUM1 ;SET TO PICK UP COLUMN2
\r
155 JRST STODIS ;STORE IOS AND RETURN
\r
157 ;HERE WHEN COL 2 OF A BINARY CARD WAS READ
\r
158 COL2IN: MOVEM DAT,CDRCHK ;COLUMN2 IS CHECKSUM
\r
159 HRLM DAT,@CDRPTR ;ALSO IN L.H. OF 1ST DATA WORD
\r
160 SETZM CDRSUM ;ZERO COMPUTED CHKSUM
\r
161 JRST STODIS ;STORE IOS AND RETURN
\r
162 \f;HERE ON A NON-DATA CDR INTERRUPT
\r
163 NTDATA: MOVEI DEVDAT,CDRDDB ;NO. SET DEVDAT
\r
164 MOVE PROG,USEPRG ;RESTORE PROG
\r
165 CONSO CDR,20 ;END OF CARD?
\r
167 TLZE IOS,FORGET ;YES. FORGET ABOUT CARD?
\r
168 JRST CDRGO1 ;YES. START READ NEXT CARD
\r
169 TRNE IOS,10 ;BINARY?
\r
170 JRST BINEOC ;YES. CHECK CHKSUM
\r
171 MOVEI DAT,15 ;NO. INSERT <CR>
\r
173 MOVEI DAT,12 ;INSERT <LF>
\r
175 NXTCRD: TLZ IOS,IGNRBT ;SET UP TO READ NEXT CARD
\r
176 HRRZ TAC,CDRPTR ;LAST ADDRESS
\r
177 MOVEI TAC1,@CDRIAD ;FIRST ADDRESS (-1)
\r
178 SUBI TAC,1(TAC1) ;COMPUTE NUMBER OF WORDS STORED
\r
179 HRRM TAC,1(TAC1) ;STORE IN 1ST WORD OF BUFFER
\r
180 TLZE IOS,IOW ;IN IO WAIT?
\r
181 PUSHJ PDP,SETIOD ;YES. TAKE OUT
\r
182 PUSHJ PDP,ADVBFF ;ADVANCE BUFFERS
\r
183 JRST CDROFF ;NEXT BUFFER NOT EMPTY
\r
184 JRST CDRGO ;AVAILABLE - START READ INTO IT
\r
187 ;HERE ON THE END OF A BINARY CARD
\r
188 BINEOC: TRNN IOS,4 ;REALLY BINARY?
\r
189 JRST NXTCRD ;IMAGE MODE
\r
190 MOVE DAT,[POINT 12,CDRSUM,] ;COMPUTE CHKSUM
\r
191 ILDB TAC,DAT ;BITS 0-11
\r
192 ILDB TAC1,DAT ;PLUS 12-23
\r
194 ILDB TAC1,DAT ;PLUS 24-35
\r
196 TRZE TAC,770000 ;OVERFLOW?
\r
197 AOS TAC ;YES. ADD 1
\r
198 CAME TAC,CDRCHK ;COMPARE WITH CARD'S CHKSUM?
\r
199 TRO IOS,IODTER ;NO. LIGHT A BIT
\r
200 JRST NXTCRD ;START READ OF NEXT CARD
\r
201 EOFCRD: TLO IOS,IOEND ;EOF - LIGHT BIT
\r
202 JRST SETFRG ;FORGET REST OF CARD
\r
203 \fNOTEOC: CONSZ CDR,40 ;EOF BUTTON PRESSED?
\r
205 CONSZ CDR,400 ;TROUBLE?
\r
206 CONO CDR,CDRCHN ;YES.TURN OFF TROUBLE ENABLE
\r
207 CONSO CDR,60200 ;ERROR EXCEPT PICK OR STOP BUTTON?
\r
208 JRST SETRDY ;NO. GO SET READY-TO-READ INTERRUPT
\r
209 TRO IOS,IODERR ;YES. SET ERROR BIT
\r
210 JRST NXTCRD ;ADVANCE BUFFERS, SET RDY-TO-READ
\r
211 EOF: TLO IOS,IOEND+IOBEG ;EOF - LIGHT BIT
\r
212 CDRREL: HLLZS CDRINT ;RESET INTERUPT LOC
\r
213 CDROFF: CONO CDR,10000 ;TURN OFF CDR
\r
215 PUSHJ PDP,SETIOD ;TAKE OUT OF IO WAIT
\r
216 JRST CLRACT ;ZERO IOACT, STORE IOS AND RETURN
\r
218 SETRDY: CONO CDR,10000 ;RESET READ-A-CARD FLOP
\r
219 JRST CDRGO ;ENABLE FOR READY TO READ
\r
222 CRCVPT: XWD 350700+TAC1,CRCVTB
\r
223 XWD 260700+TAC1,CRCVTB
\r
224 XWD 170700+TAC1,CRCVTB
\r
225 XWD 100700+TAC1,CRCVTB
\r
227 ;CODE CONVERSION FOR THE 029 KEYPUNCH
\r
229 ;THE FOLLOWING EQUIVALENCES ARE ARTIFICIALLY DEFINED
\r
231 ;029 KEYTOP ;ASCII 35 ;ASCII 37
\r
234 ;VERT BAR ^ HAT = L.C. VERT BAR
\r
235 ;UNDERBAR _ UNDERBAR
\r
236 ;NEGATION \ TILDE = L.C. NEGATION
\r
238 ;CHARACTERS ;ZONE/DIGITS
\r
239 CRCVTB: ASCII / 123/ ;N/N-3
\r
240 ASCII .0/ST. ;0/N-3
\r
241 ASCII /-JKL/ ;11/N-3
\r
242 ASCII /HI[./ ;12,8/N-3
\r
243 ASCII /&ABC/ ;12/N-3
\r
244 ASCII /QR!$/ ;11,8/N-3
\r
245 ASCII /YZ],/ ;0,8/N-3
\r
246 ASCII /89:#/ ;8/N-3
\r
247 ASCII /4567/ ;N/4-7
\r
248 ASCII /UVWX/ ;0/4-7
\r
249 ASCII /MNOP/ ;11/4-7
\r
250 ASCII /<(+^/ ;12,8/4-7
\r
251 ASCII /DEFG/ ;12/4-7
\r
252 ASCII /*);\/ ;11,8/4-7
\r
253 ASCII /%_>?/ ;0,8/4-7
\r
254 ASCII /@'="/ ;8/4-7
\r
256 ;CODE FOR THE 026 KEYPUNCH A LA H HYMAN
\r
258 ASCII / 123/ ;N/N-3
\r
259 ASCII .0/ST. ;0/N-3
\r
260 ASCII /-JKL/ ;11/N-3
\r
261 ASCII /HI?./ ;12,8/N-3
\r
262 ASCII /+ABC/ ;12/N-3
\r
263 ASCII /QR:$/ ;11,8/N-3
\r
264 ASCII /YZ;,/ ;0,8/N-3
\r
265 ASCII /89_=/ ;8/N-3
\r
266 ASCII /4567/ ;N/4-7
\r
267 ASCII /UVWX/ ;0/4-7
\r
268 ASCII /MNOP/ ;11/4-7
\r
269 ASCII /)]<!/ ;12,8/4-7
\r
270 ASCII /DEFG/ ;12/4-7
\r
271 ASCII /*[>&/ ;11,8/4-7
\r
272 ASCII /("#%/ ;0,8/4-7
\r
273 ASCII /@^'\/ ;8/4-7
\r