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
60 CRINP: TLZ IOS,IOBEG; VIRGIN DEVICE? IOBUF:=0
\r
62 CDRIN1: TLO IOS,IOFST+CRMFST; IOFST:=CRMFST:=1
\r
64 CAIN TAC,B; MODE=BINARY?
\r
65 TLO IOS,CRMBIN; YES. CRMBIN:=1
\r
66 CAIN TAC,I; MODE=IMAGE?
\r
67 TLO IOS,CRMIMG; YES. CRMIMG:=1
\r
68 TRO IOS,IOACT; IOACT:=1
\r
69 MOVEM IOS,DEVIOS(DEVDAT)
\r
70 PUSHJ PDP,SETBYT; TAC0-5:=TAC12-13:=0; TAC6-11:=BYTE SIZE
\r
71 MOVEM TAC,DEVPTR(DEVDAT)
\r
72 MOVEI TAC, CDRCHN; ASSIGN PI CHANNEL
\r
73 CONO CR,CRBIN+CRALL+CRBUSY(TAC); SELECT BINARY, ALL
\r
77 CDRINT: CONSO CR,CRDONE; DONE FLAG?
\r
79 JSR CDRSAV; SAVE ACCUMULATORS AND ESTABLI
\r
81 MOVE IOS,DEVIOS(DEVDAT)
\r
82 CONSZ CR, CRMISS+CRERR; DATA MISSED OR ERROR?
\r
83 TRO IOS,IODERR; IODERR:=1
\r
84 DATAI CR, CRDAT1; INPUT INFORMATION
\r
85 PUSHJ PDP,IOSET; PROG:=C(JBTADR18-35), ITEM:= C(DEVPTR)
\r
86 TLZN IOS,CRMFST; FIRST CARD? CRMFST:=0
\r
87 XCT CRDIS ;NOT FIRST, GO TO SUBROUTINE
\r
89 CRFIRS: TRC CRDAT1, 7400; FIRST COL OF FIRST CARD
\r
90 TRCN CRDAT1,7400; Y, X, 0, OR 1 PUNCH?
\r
91 JRST CREOFC; NO, END OF FILE CARD
\r
92 CONSZ CR, CREOFF; END OF FILE?
\r
94 TLNE IOS,CRMBIN; CRMBIN=1?
\r
96 TLNE IOS,CRMIMG; CRMIMG=1?
\r
100 CREOFC: MOVEI TAC,CDRCHN ;WAIT FOR EOC
\r
101 CONO CR,CRBUSY(TAC)
\r
102 CREOF: TLO IOS, IOEND; IUEND:=1
\r
104 PUSHJ PDP,STODAT; STORE END OF FILE CHARACTER
\r
106 JRST CRLST2; BLOCK FULL OR BLOCK COMPLETE
\r
107 MOVEI TAC,.; DATA STATED PROPERLY
\r
108 HRRM TAC, CRDIS; SET DISPATCH TO RETURN HERE.
\r
109 CONSO CR, CREOC; END OF CARD?
\r
111 PUSHJ PDP,ADVBFF; ADVANCE BUFFER
\r
113 TLO IOS,IOBEG; IOBEG:=1
\r
116 CRFSTL: PUSHJ PDP, CRITMS; STORE ITEM
\r
117 MOVEI TAC,CRCV; TAC:=CRCV. HOLLERITH READ
\r
119 CRREST: CONI CR, TAC1
\r
120 TRZ TAC1, CRBIN+CRALL+CRBUSY; SELECT HOLERITH, ALL:=0, BUS
\r
121 CONO CR, (TAC1); RESET CARD READER
\r
122 JRST CREXT1; CHANGE DISPATCH AND GO
\r
124 , HOLLERITH READ MODE
\r
126 CRCV: MOVE CRAC, [POINT 6,CRDAT1,23]; COLUMNS 79 AND 80
\r
127 CONSO CR,CREOC; END OF CARD?
\r
128 MOVE CRAC,CRC1; NO. LOOK AT ALL CHARACTERS
\r
129 LDBI TAC,CRAC ;CONVERT HOLLERITH
\r
130 IDIVI TAC, 5; TO ASCII
\r
131 LDB DAT, CRCV1(TAC1)
\r
132 PUSHJ PDP,STODAT; STORE IN BU FER
\r
135 TLNE CRAC, 760000; WORD COMPLETE?
\r
137 CONSZ CR,CREOC; END OF CARD?
\r
139 MOVEI TAC, CRCV; NEXT DISPATCH TO CRCV. HOLLERITH READ
\r
141 CREXT1: HRRM TAC, CRDIS; UPDATE DISPTACHER
\r
145 CRINS: MOVE CRAC,CRC2; BLOCK FULL OR BLOCK COMPLETE INSERT CR
\r
147 PUSHJ PDP,STODAT; STORE CHAR
\r
149 JRST CRLST2; EXIT2. BLOCK FULL OR BLOCK COMPLETE
\r
150 TLNE CRAC,760000; THATS ALL?
\r
152 JRST CRLAST; END OF CARD
\r
156 CRFSTB: LDB TAC,[POINT 3,CRDAT1,35]; 7-9 PUNCH?
\r
158 TRO IOS, IOIMPM; YES. IOIMPM:=1
\r
160 TRZ TAC, CRBUSY+CRALL; BUSY FLAG:=0, ALL FLAG;=0
\r
161 CONO CR,(TAC); RESET TO RE-READ COL 3
\r
162 MOVEI TAC, CRCOL2; DISPATCH TO CRCOL2 ON NEXT INTERRUPT
\r
165 CRCOL2: MOVEI TAC, CRCOL4; DISPATCH TO CRCOL4 ON NEXT INTERRUPT
\r
168 CRCOL4: MOVE DAT, CRDAT1
\r
169 PUSHJ PDP, CRITMS+1; STORE THE WORD FROM DAT
\r
172 CRC1: POINT 6,CRDAT1
\r
173 CRC2: POINT 7,CRCON,20
\r
177 CRFSTI: MOVEI TAC, .+3; DISPATCH TO CRFSTI + 3 ON NEXT INTERRUP
\r
178 DPB CRDAT1,[POINT 24,CRTEM,23]; SAVE COLUMN 1 AS MI
\r
181 PUSHJ PDP, CRITMS; SET ITEM AND CHECK SIZE
\r
182 IOR CRDAT1, CRTEM; CRTEM12-35:=COL 1 AND 2
\r
183 MOVEI TAC, .+2; DISPATCH TO CRFSTI + 7 ON NEXT INTERRUP
\r
187 TRZ TAC1, CRBUSY+CRALL; BUSY FLAG:=ALL FLAG:=0
\r
188 CONO CR, (TAC1); RESET READER ON COL 3
\r
190 CRIM1: MOVEI TAC,.; DISPATCH TO CRIM1 ON NEXT INTERRUPT
\r
191 CONSZ CR, CREOC; END OF CARD?
\r
193 MOVEM @DEVPTR(DEVDAT)
\r
194 AOS DEVPTR(DEVDAT); INCREMENT ITEM POINTER
\r
197 CRITMS: TLO IOS, IOFST; IOFST:=1
\r
198 PUSHJ PDP, STODAT; STORE WORD
\r
203 CRCNV: ASCII ._123456789.
\r
211 CRCV1: POINT 7,CRCNV(TAC),6
\r
212 POINT 7,CRCNV(TAC),13
\r
213 POINT 7,CRCNV(TAC),20
\r
214 POINT 7,CRCNV(TAC),27
\r
215 POINT 7,CRCNV(TAC),34
\r
217 CRLAST: CAIL ITEM,^D82; C(ITEM)<82?
\r
219 CRLST0: PUSHJ PDP,STOSQD; STORE WORD COUNT
\r
221 CRLST2: PUSHJ PDP,ADVBFF; ADVANCE BUFFER
\r
222 JRST CROFF; EXIT1. NECT BUFFER FULL
\r
224 CONO CR, CRBIN+CRALL+CRBUSY(TAC); SELECT BINARY, ALL
\r
226 CRLST1: TLO IOS,IOFST+CRMFST; IOFST:=CRMFST:=1
\r
227 TLZE IOS, IOW; IN A WAIT? IOW:=0
\r
228 PUSHJ PDP, SETIOD; IOWS:=1
\r
230 CREXIT: MOVEM IOS,DEVIOS(DEVDAT); C(CRIOS):=C(IOS)
\r
231 MOVEM ITEM, DEVCTR(DEVDAT); C(CRCTR):=C(ITEM)
\r
232 JRST CDRRET; RESTORE ACCUMULATORS AND DISMISS INTERR
\r
234 CROFF: TRZ IOS,IOACT; IOACT:=0
\r
235 CONO CR,0; CLEAR CDR CONTROL REGISTER
\r
238 CRCONT: MOVEI TAC, CDRCHN; ASSIGN PI CHANNEL
\r
239 CONO CR, CRBIN+CRALL+CRBUSY(TAC); SELECT BINARY, ALL,
\r
240 TLO IOS,CRMFST; CRMFST:=1
\r