1 TITLE CDRSER - CARD READER SERVICE
\r
5 EXTERNAL STODAT, ADVBFF, IOSET, SETIOD, SETBYT, STOSQD
\r
6 EXTERNAL CDRSAV, CDRCHN, CDRRET,ILLOUT,PIOMOD
\r
9 ;DEVICE DATA BLOCK LINKAGE
\r
10 EXTERNAL CDRDB,CDRDAT,CRDIS
\r
14 ,CDR PARAMETER ASSIGNMENTS
\r
16 , CDR CONTROL REGISTER
\r
17 CRDONE=10; DONE FLAG
\r
18 CRBUSY=20; BUSY FLAG
\r
21 CRMISS=200; DATA MISSED
\r
22 CREOC=400; END OF CARD
\r
23 CREOFF=1000; END OF FILE
\r
30 , SPECIAL IO STATUS WORD ASSIGNMENTS
\r
31 CRMFST=40000; FIRST CARD
\r
32 CRMBIN=200000; BINARY
\r
33 CRMIMG=100000; IMAGE
\r
34 , SPECIAL CHARACTERS
\r
35 S2EOF=32; END OF FILE
\r
53 ,CDR SERVICE DISPATCH TABLE
\r
55 CDRDSP: CONO CR,0 ;RELEASE
\r
61 CRINP: TLZ IOS,IOBEG; VIRGIN DEVICE? IOBUF:=0
\r
63 CDRIN1: TLO IOS,IOFST+CRMFST; IOFST:=CRMFST:=1
\r
65 CAIN TAC,B; MODE=BINARY?
\r
66 TLO IOS,CRMBIN; YES. CRMBIN:=1
\r
67 CAIN TAC,I; MODE=IMAGE?
\r
68 TLO IOS,CRMIMG; YES. CRMIMG:=1
\r
69 TRO IOS,IOACT; IOACT:=1
\r
70 MOVEM IOS,DEVIOS(DEVDAT)
\r
71 PUSHJ PDP,SETBYT; TAC0-5:=TAC12-13:=0; TAC6-11:=BYTE SIZE
\r
72 MOVEM TAC,DEVPTR(DEVDAT)
\r
73 MOVEI TAC, CDRCHN; ASSIGN PI CHANNEL
\r
74 CONO CR,CRBIN+CRALL+CRBUSY(TAC); SELECT BINARY, ALL
\r
78 CDRINT: CONSO CR,CRDONE; DONE FLAG?
\r
80 JSR CDRSAV; SAVE ACCUMULATORS AND ESTABLI
\r
82 MOVE IOS,DEVIOS(DEVDAT)
\r
83 CONSZ CR, CRMISS+CRERR; DATA MISSED OR ERROR?
\r
84 TRO IOS,IODERR; IODERR:=1
\r
85 DATAI CR, CRDAT1; INPUT INFORMATION
\r
86 PUSHJ PDP,IOSET; PROG:=C(JBTADR18-35), ITEM:= C(DEVPTR)
\r
87 TLZN IOS,CRMFST; FIRST CARD? CRMFST:=0
\r
88 XCT CRDIS ;NOT FIRST, GO TO SUBROUTINE
\r
90 CRFIRS: TRC CRDAT1, 7400; FIRST COL OF FIRST CARD
\r
91 TRCN CRDAT1,7400; Y, X, 0, OR 1 PUNCH?
\r
92 JRST CREOFC; NO, END OF FILE CARD
\r
93 CONSZ CR, CREOFF; END OF FILE?
\r
95 TLNE IOS,CRMBIN; CRMBIN=1?
\r
97 TLNE IOS,CRMIMG; CRMIMG=1?
\r
101 CREOFC: MOVEI TAC,CDRCHN ;WAIT FOR EOC
\r
102 CONO CR,CRBUSY(TAC)
\r
103 CREOF: TLO IOS, IOEND; IUEND:=1
\r
105 PUSHJ PDP,STODAT; STORE END OF FILE CHARACTER
\r
107 JRST CRLST2; BLOCK FULL OR BLOCK COMPLETE
\r
108 MOVEI TAC,.; DATA STATED PROPERLY
\r
109 HRRM TAC, CRDIS; SET DISPATCH TO RETURN HERE.
\r
110 CONSO CR, CREOC; END OF CARD?
\r
112 PUSHJ PDP,ADVBFF; ADVANCE BUFFER
\r
114 TLO IOS,IOBEG; IOBEG:=1
\r
117 CRFSTL: PUSHJ PDP, CRITMS; STORE ITEM
\r
118 MOVEI TAC,CRCV; TAC:=CRCV. HOLLERITH READ
\r
120 CRREST: CONI CR, TAC1
\r
121 TRZ TAC1, CRBIN+CRALL+CRBUSY; SELECT HOLERITH, ALL:=0, BUS
\r
122 CONO CR, (TAC1); RESET CARD READER
\r
123 JRST CREXT1; CHANGE DISPATCH AND GO
\r
125 , HOLLERITH READ MODE
\r
127 CRCV: MOVE CRAC, [POINT 6,CRDAT1,23]; COLUMNS 79 AND 80
\r
128 CONSO CR,CREOC; END OF CARD?
\r
129 MOVE CRAC,CRC1; NO. LOOK AT ALL CHARACTERS
\r
130 LDBI TAC,CRAC ;CONVERT HOLLERITH
\r
131 IDIVI TAC, 5; TO ASCII
\r
132 LDB DAT, CRCV1(TAC1)
\r
133 PUSHJ PDP,STODAT; STORE IN BU FER
\r
136 TLNE CRAC, 760000; WORD COMPLETE?
\r
138 CONSZ CR,CREOC; END OF CARD?
\r
140 MOVEI TAC, CRCV; NEXT DISPATCH TO CRCV. HOLLERITH READ
\r
142 CREXT1: HRRM TAC, CRDIS; UPDATE DISPTACHER
\r
146 CRINS: MOVE CRAC,CRC2; BLOCK FULL OR BLOCK COMPLETE INSERT CR
\r
148 PUSHJ PDP,STODAT; STORE CHAR
\r
150 JRST CRLST2; EXIT2. BLOCK FULL OR BLOCK COMPLETE
\r
151 TLNE CRAC,760000; THATS ALL?
\r
153 JRST CRLAST; END OF CARD
\r
157 CRFSTB: LDB TAC,[POINT 3,CRDAT1,35]; 7-9 PUNCH?
\r
159 TRO IOS, IOIMPM; YES. IOIMPM:=1
\r
161 TRZ TAC, CRBUSY+CRALL; BUSY FLAG:=0, ALL FLAG;=0
\r
162 CONO CR,(TAC); RESET TO RE-READ COL 3
\r
163 MOVEI TAC, CRCOL2; DISPATCH TO CRCOL2 ON NEXT INTERRUPT
\r
166 CRCOL2: MOVEI TAC, CRCOL4; DISPATCH TO CRCOL4 ON NEXT INTERRUPT
\r
169 CRCOL4: MOVE DAT, CRDAT1
\r
170 PUSHJ PDP, CRITMS+1; STORE THE WORD FROM DAT
\r
173 CRC1: POINT 6,CRDAT1
\r
174 CRC2: POINT 7,CRCON,20
\r
178 CRFSTI: MOVEI TAC, .+3; DISPATCH TO CRFSTI + 3 ON NEXT INTERRUP
\r
179 DPB CRDAT1,[POINT 24,CRTEM,23]; SAVE COLUMN 1 AS MI
\r
182 PUSHJ PDP, CRITMS; SET ITEM AND CHECK SIZE
\r
183 IOR CRDAT1, CRTEM; CRTEM12-35:=COL 1 AND 2
\r
184 MOVEI TAC, .+2; DISPATCH TO CRFSTI + 7 ON NEXT INTERRUP
\r
188 TRZ TAC1, CRBUSY+CRALL; BUSY FLAG:=ALL FLAG:=0
\r
189 CONO CR, (TAC1); RESET READER ON COL 3
\r
191 CRIM1: MOVEI TAC,.; DISPATCH TO CRIM1 ON NEXT INTERRUPT
\r
192 CONSZ CR, CREOC; END OF CARD?
\r
194 MOVEM @DEVPTR(DEVDAT)
\r
195 AOS DEVPTR(DEVDAT); INCREMENT ITEM POINTER
\r
198 CRITMS: TLO IOS, IOFST; IOFST:=1
\r
199 PUSHJ PDP, STODAT; STORE WORD
\r
204 CRCNV: ASCII ._123456789.
\r
212 CRCV1: POINT 7,CRCNV(TAC),6
\r
213 POINT 7,CRCNV(TAC),13
\r
214 POINT 7,CRCNV(TAC),20
\r
215 POINT 7,CRCNV(TAC),27
\r
216 POINT 7,CRCNV(TAC),34
\r
218 CRLAST: CAIL ITEM,^D82; C(ITEM)<82?
\r
220 CRLST0: PUSHJ PDP,STOSQD; STORE WORD COUNT
\r
222 CRLST2: PUSHJ PDP,ADVBFF; ADVANCE BUFFER
\r
223 JRST CROFF; EXIT1. NECT BUFFER FULL
\r
225 CONO CR, CRBIN+CRALL+CRBUSY(TAC); SELECT BINARY, ALL
\r
227 CRLST1: TLO IOS,IOFST+CRMFST; IOFST:=CRMFST:=1
\r
228 TLZE IOS, IOW; IN A WAIT? IOW:=0
\r
229 PUSHJ PDP, SETIOD; IOWS:=1
\r
231 CREXIT: MOVEM IOS,DEVIOS(DEVDAT); C(CRIOS):=C(IOS)
\r
232 MOVEM ITEM, DEVCTR(DEVDAT); C(CRCTR):=C(ITEM)
\r
233 JRST CDRRET; RESTORE ACCUMULATORS AND DISMISS INTERR
\r
235 CROFF: TRZ IOS,IOACT; IOACT:=0
\r
236 CONO CR,0; CLEAR CDR CONTROL REGISTER
\r
239 CRCONT: MOVEI TAC, CDRCHN; ASSIGN PI CHANNEL
\r
240 CONO CR, CRBIN+CRALL+CRBUSY(TAC); SELECT BINARY, ALL,
\r
241 TLO IOS,CRMFST; CRMFST:=1
\r