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