TITLE CDRSER - CARD READER SERVICE SUBTTL 8-2-65 EXTERNAL STODAT, ADVBFF, IOSET, SETIOD, SETBYT, STOSQD EXTERNAL CDRSAV, CDRCHN, CDRRET,ILLOUT,PIOMOD INTERNAL CDRINT ;DEVICE DATA BLOCK LINKAGE EXTERNAL CDRDB,CDRDAT,CRDIS ENTRY CDRDSP ,CDR PARAMETER ASSIGNMENTS , CDR CONTROL REGISTER CRDONE=10; DONE FLAG CRBUSY=20; BUSY FLAG CRBIN=40; BINARY CRALL=100; ALL FLAG CRMISS=200; DATA MISSED CREOC=400; END OF CARD CREOFF=1000; END OF FILE CRERR=2000; ERROR CHCHN=2 , ACCUMULATORS CRDAT1=TEM CRAC=JDAT , SPECIAL IO STATUS WORD ASSIGNMENTS CRMFST=40000; FIRST CARD CRMBIN=200000; BINARY CRMIMG=100000; IMAGE , SPECIAL CHARACTERS S2EOF=32; END OF FILE REPEAT 0,< ,CDR DATA BLOCK CDRDAT: SIXBIT /CRD 34 0 EXP CDRDSP XWD 1400+PROG,10403 0 0 XWD PROG,0 0 0 CRDIS: JRST . > ,CDR SERVICE DISPATCH TABLE CDRDSP: CONO CR,0 ;RELEASE POPJ PDP,; CLOSE JRST ILLOUT ;OUTPUT JRST CRINP; INPUT CRINP: TLZ IOS,IOBEG; VIRGIN DEVICE? IOBUF:=0 CDRIN1: TLO IOS,IOFST+CRMFST; IOFST:=CRMFST:=1 LDB TAC,PIOMOD CAIN TAC,B; MODE=BINARY? TLO IOS,CRMBIN; YES. CRMBIN:=1 CAIN TAC,I; MODE=IMAGE? TLO IOS,CRMIMG; YES. CRMIMG:=1 TRO IOS,IOACT; IOACT:=1 MOVEM IOS,DEVIOS(DEVDAT) PUSHJ PDP,SETBYT; TAC0-5:=TAC12-13:=0; TAC6-11:=BYTE SIZE MOVEM TAC,DEVPTR(DEVDAT) MOVEI TAC, CDRCHN; ASSIGN PI CHANNEL CONO CR,CRBIN+CRALL+CRBUSY(TAC); SELECT BINARY, ALL POPJ PDP,; RETURN CDRINT: CONSO CR,CRDONE; DONE FLAG? JRST CDRINT JSR CDRSAV; SAVE ACCUMULATORS AND ESTABLI MOVEI DEVDAT,CDRDAT MOVE IOS,DEVIOS(DEVDAT) CONSZ CR, CRMISS+CRERR; DATA MISSED OR ERROR? TRO IOS,IODERR; IODERR:=1 DATAI CR, CRDAT1; INPUT INFORMATION PUSHJ PDP,IOSET; PROG:=C(JBTADR18-35), ITEM:= C(DEVPTR) TLZN IOS,CRMFST; FIRST CARD? CRMFST:=0 XCT CRDIS ;NOT FIRST, GO TO SUBROUTINE CRFIRS: TRC CRDAT1, 7400; FIRST COL OF FIRST CARD TRCN CRDAT1,7400; Y, X, 0, OR 1 PUNCH? JRST CREOFC; NO, END OF FILE CARD CONSZ CR, CREOFF; END OF FILE? JRST CREOF; YES TLNE IOS,CRMBIN; CRMBIN=1? JRST CRFSTB; YES TLNE IOS,CRMIMG; CRMIMG=1? JRST CRFSTI; YES JRST CRFSTL+1 CREOFC: MOVEI TAC,CDRCHN ;WAIT FOR EOC CONO CR,CRBUSY(TAC) CREOF: TLO IOS, IOEND; IUEND:=1 MOVEI DAT,S2EOF PUSHJ PDP,STODAT; STORE END OF FILE CHARACTER SKIP JRST CRLST2; BLOCK FULL OR BLOCK COMPLETE MOVEI TAC,.; DATA STATED PROPERLY HRRM TAC, CRDIS; SET DISPATCH TO RETURN HERE. CONSO CR, CREOC; END OF CARD? JRST CREXIT; NO. PUSHJ PDP,ADVBFF; ADVANCE BUFFER SKIP TLO IOS,IOBEG; IOBEG:=1 JRST CROFF CRFSTL: PUSHJ PDP, CRITMS; STORE ITEM MOVEI TAC,CRCV; TAC:=CRCV. HOLLERITH READ CRREST: CONI CR, TAC1 TRZ TAC1, CRBIN+CRALL+CRBUSY; SELECT HOLERITH, ALL:=0, BUS CONO CR, (TAC1); RESET CARD READER JRST CREXT1; CHANGE DISPATCH AND GO , HOLLERITH READ MODE CRCV: MOVE CRAC, [POINT 6,CRDAT1,23]; COLUMNS 79 AND 80 CONSO CR,CREOC; END OF CARD? MOVE CRAC,CRC1; NO. LOOK AT ALL CHARACTERS LDBI TAC,CRAC ;CONVERT HOLLERITH IDIVI TAC, 5; TO ASCII LDB DAT, CRCV1(TAC1) PUSHJ PDP,STODAT; STORE IN BU FER JRST CREOF+1 JRST CRINS TLNE CRAC, 760000; WORD COMPLETE? JRST CRCV+3; NO CONSZ CR,CREOC; END OF CARD? JRST CRINS; YES MOVEI TAC, CRCV; NEXT DISPATCH TO CRCV. HOLLERITH READ CREXT1: HRRM TAC, CRDIS; UPDATE DISPTACHER JRST CREXIT CRCON: OCT 6424 CRINS: MOVE CRAC,CRC2; BLOCK FULL OR BLOCK COMPLETE INSERT CR LDBI DAT, CRAC PUSHJ PDP,STODAT; STORE CHAR SKIP; EXIT1. JRST CRLST2; EXIT2. BLOCK FULL OR BLOCK COMPLETE TLNE CRAC,760000; THATS ALL? JRST CRINS+1; NO JRST CRLAST; END OF CARD , BINARY READ MODE CRFSTB: LDB TAC,[POINT 3,CRDAT1,35]; 7-9 PUNCH? CAIE TAC, 5 TRO IOS, IOIMPM; YES. IOIMPM:=1 CONI CR, TAC TRZ TAC, CRBUSY+CRALL; BUSY FLAG:=0, ALL FLAG;=0 CONO CR,(TAC); RESET TO RE-READ COL 3 MOVEI TAC, CRCOL2; DISPATCH TO CRCOL2 ON NEXT INTERRUPT JRST CREXT1 CRCOL2: MOVEI TAC, CRCOL4; DISPATCH TO CRCOL4 ON NEXT INTERRUPT HRRM TAC,CRDIS CRCOL4: MOVE DAT, CRDAT1 PUSHJ PDP, CRITMS+1; STORE THE WORD FROM DAT JRST CREXIT CRC1: POINT 6,CRDAT1 CRC2: POINT 7,CRCON,20 ,IMAGE READ MODE CRFSTI: MOVEI TAC, .+3; DISPATCH TO CRFSTI + 3 ON NEXT INTERRUP DPB CRDAT1,[POINT 24,CRTEM,23]; SAVE COLUMN 1 AS MI JRST CREXT1 PUSHJ PDP, CRITMS; SET ITEM AND CHECK SIZE IOR CRDAT1, CRTEM; CRTEM12-35:=COL 1 AND 2 MOVEI TAC, .+2; DISPATCH TO CRFSTI + 7 ON NEXT INTERRUP JRST CRIM1+1 CONI CR, TAC1 TRZ TAC1, CRBUSY+CRALL; BUSY FLAG:=ALL FLAG:=0 CONO CR, (TAC1); RESET READER ON COL 3 CRIM1: MOVEI TAC,.; DISPATCH TO CRIM1 ON NEXT INTERRUPT CONSZ CR, CREOC; END OF CARD? JRST CRLAST; YES MOVEM @DEVPTR(DEVDAT) AOS DEVPTR(DEVDAT); INCREMENT ITEM POINTER JRST CREXT1 CRITMS: TLO IOS, IOFST; IOFST:=1 PUSHJ PDP, STODAT; STORE WORD JRST CREOF+1 JRST CREOF+1 POPJ PDP,; RETURN CRCNV: ASCII ._123456789. ASCII .0=@^'\ /ST. ASCII .UVWXYZ;,(". ASCII .#%-JKLMNOP. ASCII .QR:$*[>&+A. ASCII :BCDEFGHI?.: ASCII :)]