X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v4.5.git/blobdiff_plain/a0865c742fe1bf0b69346aa5f90665fc301e0236..4004a326545fc294821707378dd8e6b026df8be1:/src/cdrsr6.mac diff --git a/src/cdrsr6.mac b/src/cdrsr6.mac index 68b70ce..bc5cc0a 100644 --- a/src/cdrsr6.mac +++ b/src/cdrsr6.mac @@ -1,327 +1,327 @@ -TITLE CDRSR6 - CARD READER SERVICE FOR PDP-6 CARD READER -SUBTTL /TH TS3.17 18 OCT 67 V001 -XP VCDRS6,001 - ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP - - ;PARAMETERS - - ;HARDWARE - - CRDONE=10 - CRBUSY=20 - CRBIN=40 - CRALL=100 - CRMISS=200 - CREOC=400 - CREOFF=1000 - CRERR=2000 - CRNRED=4000 - - CRCONO=CRBUSY+CRBIN+CRALL - CDR=114 - - COD029=5252 ;029 CONTROL CARD IS 12-0-2-4-6-8! - - ;IOS - - CRMFST=40000 ;LH - CRMIMG=100000 ;LH - CRMBIN=200000 ;LH - CRM029=100 ;RH - - MINHNG=^D15 ;NO. OF TIMES TO OBEY HUNG CODE BEFORE REALLY BECOMING HUNG - -CDRHNG: CONSO CDR,CRERR ;POWER OFF OR OTHER SUCH CATASTOPHE? - TLNN IO,IOFST ;NO - CARD JAMMED? - JRST CDRINI ;YES - PRINT HUNG MSG. - AOS (PDP) ;NEVER ERROR RETURN - CONSZ CDR,CRMISS ;FEEDCHECK? - CONSZ CDR,CRNRED ;YES - READER READY? - SOSA TAC,LOPCNT ;NO - PICK UP HUNG LOOP COUNTER - JRST CDRSTR ;YES - GIVE ANOTHER CONO - JUMPGE TAC,STOIOS ;COUNT NOT EXPIRED - LEAVE ACTIVE - SOS (PDP) ;EXPIRED - PRINT HUNG MSG. - -CDRINI: CONO CDR,0 ;CLEAR HARDWARE - HLLZS CDRCON ;CLEAR CONSO BITS - POPJ PDP,0 ;RETURN - - INTERNAL FTCHECK,FTMONP - -IFN FTCHECK+FTMONP,< -EXTERNAL CDRDDB,CRDIS,CRTEM,CDRCON,LOPCNT -> -IFE FTCHECK+FTMONP,< -;CDR DEVICE DATA BLOCK - INTERN CDRDDB -CDRDDB: -CDRDAT: SIXBIT /CDR/ - XWD 2*HUNGST,34 ;BUFFER LONG ENOUGH FOR BINARY CARDS - 0 - EXP CDRDSP - XWD DVCDR+DVIN,14403 - 0 - 0 - XWD PROG,0 - 0 - 0 -CRDIS: JRST . -CRTEM: 0 ;TEMP FOR PARTIAL WORDS -CDRCON: 0 ;CONSO FLAGS -LOPCNT: 0 -> - -ENTRY CDRSR6 -EXTERN CPOPJ1,ILLOUT,PIOMOD,SETACT,SETBYT,CDRCHN,PIOFF,PION,HNGSTP -INTERN CDRDSP - -;CDR SERVICE DISPATCH TABLE (SHORT) - - JRST CDRINI ;INITILIZATION - JRST CDRHNG ;HUNG DEVICE IS CHECKED -CDRSR6: -CDRDSP: JRST CDRINI ;RELEASE - CLEAR DEVICE - POPJ PDP,0 ;CLOSE - NOTHING SPECIAL - JRST ILLOUT ;OUTPUT WON'T WORK - ;INPUT IS OK - TLZN IOS,IOBEG ;BEGINNING OF FILE? (NO MORE). - CONSO CDR,CREOFF ;BUTTON PUSHED? - TLZA IOS,CRMBIN+CRMIMG ;CLEAR TRASH - JRST CREOF ;END OF FILE PUSHED WHILE IOACT WAS 0 -CDRIN1: CONO CDR,0 ;CLEAR ANY SPURIOUS FLAGS - CONSO CDR,CRERR!CRMISS!CRNRED ;POWER OFF,LEFT OVER FEED-CHECK OR NOT READY - JRST .+3 ;NO - OK - PUSHJ PDP,HNGSTP ;YES - PRINT REMINDER & HALT JOB - JRST CDRIN1 ;GO TRY AGAIN WHEN USER TYPES 'CONT' - TLO IOS,IOFST+CRMFST ;NEW OPERATION - LDB TAC,PIOMOD ;SPEED UP TESTING OF MODE - CAIN TAC,B ;.. - TLO IOS,CRMBIN ;BINARY MODE - CAIN TAC,I - TLO IOS,CRMIMG ;IMAGE MODE - PUSHJ PDP,SETBYT ;LH(TAC):=700+PROG OR 4400+PROG - MOVEM TAC,DEVPTR(DEVDAT) ;SAVE BYTE SIZE -CDRSTR: MOVEI TAC,MINHNG ;HERE TO RESTART CDR ON FEED-CHECK - MOVEM TAC,LOPCNT ;RESET HUNG LOOP COUNTER - PUSHJ PDP,SETACT - MOVE TAC,[XWD CRDONE,CRCONO] - CONO PI,PIOFF - CONO CDR,CDRCHN(TAC) ;START CDR - HLRM TAC,CDRCON ;AND LOOK FOR IT - CONO PI,PION - POPJ PDP,0 ;RETURN TO UUOCON - - -INTERN CDRINT -EXTERN CDRSAV,IOSET,SETIOD,STOIOS,CDRCHN - -CDRINT: CONSO CDR,@CDRCON - JRST CDRINT - JSR CDRSAV - MOVEI DEVDAT,CDRDDB - MOVE IOS,DEVIOS(DEVDAT) - PUSHJ PDP,IOSET - CONSZ CDR,CRMISS - TRO IOS,IODERR ;DEVICE ERROR - CONSO CDR,CRERR+CREOFF+CREOC - JRST CRDATA ;JUST A DATA INTERRUPT - CONSZ CDR,CRERR ;HARDWARE LOSS? - JRST CDRERR ;YES - JRST CDREOC ;NO. MUST BE END OF CARD -CREOF: TLOA IOS,IOEND ;MARK END,SKIP TO CROFF -CDRERR: TRO IOS,IODERR ;CDR DEVICE ERROR HERE -CROFF: PUSHJ PDP,CDRINI ;STOP THE DEVICE - TRZ IOS,IOACT -CRLST1: MOVEI TAC,MINHNG - MOVEM TAC,LOPCNT ;RESET HNG. LOOP CNT. - TLO IOS,IOFST+CRMFST - TLZE IOS,IOW ;JOB WAITING FOR CDR? - PUSHJ PDP,SETIOD ;YES. WAKE IT UP -CREXIT: MOVEM ITEM,DEVCTR(DEVDAT) - JRST STOIOS - -CRCONT: MOVEI TAC,CDRCHN ;PI CHANNEL - CONO CDR,CRCONO(TAC) ;MAKE IT GO AGAIN - TLO IOS,CRMFST ;FIRST COLUMN, BUT NOT FIRST IN BUFFER - JRST CREXIT ;AND RETURN - - - -CRDATA: DATAI CDR,DAT - TLZN IOS,CRMFST ;COLUMN 1? - XCT CRDIS ;NO. SUBROUTINE HAS BEEN SET UP - TRNE IOS,IODERR ;POSSIBLE FEED CHECK? - CONSO CDR,CRNRED ;YES - READER READY? - JRST .+4 ;YES - GENUINE DATA ERROR - TLO IOS,CRMFST ;RESET 1ST COL. FLG. - TRZ IOS,IODERR ;CLEAR ERROR INDICATION - JRST STOIOS ;AND LET HUNG LOGIC SORT THINGS OUT - TLNE IOS,CRMIMG ;IMAGE MODE? - JRST CRFSTI ;YES, DON'T CHECK FOR EOF CARD - TRC DAT,7400 - TRCN DAT,7400 ;12,11,0 AND 1 PUNCH? - JRST CREOF1 ;YES. AN EOF CARD. - TLNE IOS,CRMBIN - JRST CRFSTB ;BINARY CARD FIRST COLUMN - MOVEI TAC,CRASCI ;HERE ON ASCII FIRST COLUMN - HRRM TAC,CRDIS ;FOR SUCCEEDING COLUMN INTERRUPTS - CAIE DAT,COD029 ;029 CONTROL CARD? - JRST CRASCI ;NO. PROCESS THE CARD. - TDO IOS, [XWD IOBEG,CRM029] ;FLAG FOR EOC AND TRANSLATOR - JRST CRIGNOR ;FLUSH REST OF THIS CARD - -CRASCI: MOVEI TAC,0 ;CLEAR TAC - CAIN DAT,5000 - MOVEI DAT,4202 ;12-0 => 12-8-2 - CAIN DAT,3000 - MOVEI DAT,2202 ;11-0 => 11-8-2 - LDB TAC1,[XWD 110300,DAT] ;12,11,0 ROWS TO TAC1 - TRNE DAT,3 ;8 ZONE? - TRC TAC1,7 ;YES, PERMUTE TAC1 - TRNE DAT,74 ;4 BIT? - TRO TAC1,10 ;YES - TRNE DAT,314 ;2 BIT? - TRO TAC,2 ;YES - TRNE DAT,525 ;1 BIT? - TRO TAC,1 ;YES - TRNN IOS,CRM029 ;HAS 029 CODE BEEN IMPLIED? - TRO TAC1,20 ;NO. MOVE UP TO 026 CODE TABLE - LDB DAT,CRCV2(TAC) ;GET THE ASCII CHARACTER - PUSHJ PDP,CRSTOD ;STORE IT - JRST CREXIT ;AND RETURN - -CRCV2: POINT 7,CRCNV(TAC1),6 - POINT 7,CRCNV(TAC1),13 - POINT 7,CRCNV(TAC1),20 - POINT 7,CRCNV(TAC1),27 - - -EXTERN CDRCHN - -CRFSTI: LSH DAT,30 - MOVEM DAT,CRTEM ;SAVE AS LEFT 12 BITS - JSP TAC,CREXI1 ;GET ANOTHER COLUMN - LSH DAT,14 - IORM DAT,CRTEM ;THROW IN MIDDLE 12 BITS - JSP TAC,CREXI1 ;ANOTHER COLUMN - IORB DAT,CRTEM ;RIGHT 12. SAVE IN CRTEM FOR DEBUG -CRBIN2: PUSHJ PDP,CRSTOD ;ENTRY HERE FROM BIN CARDS - MOVEI TAC,CRFSTI ;ANOTHER 3 COLUMNS COME NEXT -CREXI1: HRRM TAC,CRDIS ;WHERE TO GO FOR NEXT COLUMN - JRST CREXIT ;RETURN FROM INTERRUPT - -CDREOC: CONSO CDR,CREOFF - TLNE IOS,IOEND ;END OF FILE? - JRST CREOF ;YES. SHUT OFF CDR - TLNN IOS,CRMIMG+CRMBIN ;IMAGE OR BIN? - JRST CRENDA ;ASCII - TLNN IOS,CRMIMG ;IMAGE? - JRST CRENDB ;BINARY. - MOVE DAT,CRTEM ;HERE ON EOC AND IMAGE - PUSHJ PDP,CRSTOD ;STORE LAST 2 COLUMNS IN BUFFER -CRENDB: PUSHJ PDP,CRADV1 ;ADVANCE BUFFER -CRENDC: MOVEI TAC,CDRCHN ;PI CHANNEL - CONO CDR,CRCONO(TAC) ;GO FOR NEXT CARD - JRST CRLST1 ;SET UP FOR NEXT CARD,DISMISS INTERRUPT, - ;ALSO WAKE UP JOB IF IN IOW - -CRFSTB: MOVEI TAC,-5(DAT) - TRNE TAC,17 ;ROWS 6-9=5? - TRO IOS,IOIMPM ;NO. NOT A BIN CARD - LSH DAT,-4 ;GET COLUMNS 1-5 - JUMPE DAT,CRIGNOR ;IGNORE BINARY CARDS WITH 0 WORD COUNT - MOVEM DAT,CRTEM ;SAVE AS WORD COUNT - JSP TAC,CREXI1 ;GET COLUMN 2 - HRL DAT,CRTEM ;(COUNT)CKSUM - MOVSS DAT ;(CKSUM)COUNT - JRST CRBIN2 ;STORE DAT AND GET REST OF CARD - - -EXTERN STOSQD,STODAT,ADVBFF - -CRENDA: TLZE IOS,IOBEG ;WAS THIS A 029 CONTROL CARD? - JRST CRCONT ;YES. NO CRLF. - MOVEI DAT,15 ;CARRIAGE RETURN - PUSHJ PDP,CRSTOD ;STORE - MOVEI DAT,12 ;LINE FEED - PUSHJ PDP,CRSTOD ;STORE - LDB TAC1,PIOMOD ;GET MODE - CAIN TAC1,AL ;ASCII LINE? - JRST CRENDC ;YES -WORD COUNT WILL HAVE BEEN COMPUTED & BUFFERS ADVANCED - CAIL ITEM,^D82 ;ROOM FOR ANOTHER CARD + CRLF? - JRST CRCONT ;YES. DO SO - PUSHJ PDP,STOSQD ;NO. STORE WORD COUNT - JRST CROFF ;CAN'T RETURN HERE, BUT ... - JRST CRENDB ;PROCEED TO ANOTHER BUFFER - -CREOF1: TLO IOS,IOEND ;HERE ON EOF CARD. MARK FOR EOC -CRIGNOR: JSP TAC,CREXI1 ;GET MORE COLUMNS - JRST .-1 ;AND IGNORE THEM. - -CRSTOD: PUSHJ PDP,STODAT ;STORE DAT IN BUFFER - JRST CRPOFF ;ADDRESS CHECK,IOBKTL,IODTER (CKSUM) - JRST CRADV ;BUFFER FULL OR BUFFER DONE - POPJ PDP,0 ;SIMPLE OK STORED RETURN - -CRADV: TLNE IOS,CRMBIN ;BINARY? - JRST CRIGNOR ;WAIT FOR END OF CARD -CRADV1: TLNE IOS,IOFST ;VIRGIN BUFFER? - POPJ PDP,0 ;YES. KEEP THIS ONE - PUSHJ PDP,ADVBFF ;ADVANCE TO ANOTHER BUFFER - SKIPA ;NO BUFFER AVAILABLE - POPJ PDP,0 ;OK. RETURN -CRPOFF: POP PDP,TAC - JRST CROFF - - -;CODE CONVERSION FOR THE 029 KEYPUNCH - -;THE FOLLOWING EQUIVALENCES ARE ARTIFICIALLY DEFINED - -;029 KEYTOP ;ASCII 35 ;ASCII 37 -;CENT [ [ -;0-8-2 ] ] -;VERT BAR ^ HAT = L.C. VERT BAR -;UNDERBAR _ UNDERBAR -;NEGATION \ TILDE = L.C. NEGATION - - ;CHARACTERS ;ZONE/DIGITS -CRCNV: ASCII / 123/ ;N/N-3 - ASCII .0/ST. ;0/N-3 - ASCII /-JKL/ ;11/N-3 - ASCII /HI[./ ;12,8/N-3 - ASCII /&ABC/ ;12/N-3 - ASCII /QR!$/ ;11,8/N-3 - ASCII /YZ],/ ;0,8/N-3 - ASCII /89:#/ ;8/N-3 - ASCII /4567/ ;N/4-7 - ASCII /UVWX/ ;0/4-7 - ASCII /MNOP/ ;11/4-7 - ASCII /<(+^/ ;12,8/4-7 - ASCII /DEFG/ ;12/4-7 - ASCII /*);\/ ;11,8/4-7 - ASCII /%_>?/ ;0,8/4-7 - ASCII /@'="/ ;8/4-7 - -;CODE FOR THE 026 KEYPUNCH A LA H HYMAN - - ASCII / 123/ ;N/N-3 - ASCII .0/ST. ;0/N-3 - ASCII /-JKL/ ;11/N-3 - ASCII /HI?./ ;12,8/N-3 - ASCII /+ABC/ ;12/N-3 - ASCII /QR:$/ ;11,8/N-3 - ASCII /YZ;,/ ;0,8/N-3 - ASCII /89_=/ ;8/N-3 - ASCII /4567/ ;N/4-7 - ASCII /UVWX/ ;0/4-7 - ASCII /MNOP/ ;11/4-7 - ASCII /)]&/ ;11,8/4-7 - ASCII /("#%/ ;0,8/4-7 - ASCII /@^'\/ ;8/4-7 - - - END - \ No newline at end of file +TITLE CDRSR6 - CARD READER SERVICE FOR PDP-6 CARD READER +SUBTTL /TH TS3.17 18 OCT 67 V001 +XP VCDRS6,001 + ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP + + ;PARAMETERS + + ;HARDWARE + + CRDONE=10 + CRBUSY=20 + CRBIN=40 + CRALL=100 + CRMISS=200 + CREOC=400 + CREOFF=1000 + CRERR=2000 + CRNRED=4000 + + CRCONO=CRBUSY+CRBIN+CRALL + CDR=114 + + COD029=5252 ;029 CONTROL CARD IS 12-0-2-4-6-8! + + ;IOS + + CRMFST=40000 ;LH + CRMIMG=100000 ;LH + CRMBIN=200000 ;LH + CRM029=100 ;RH + + MINHNG=^D15 ;NO. OF TIMES TO OBEY HUNG CODE BEFORE REALLY BECOMING HUNG + +CDRHNG: CONSO CDR,CRERR ;POWER OFF OR OTHER SUCH CATASTOPHE? + TLNN IO,IOFST ;NO - CARD JAMMED? + JRST CDRINI ;YES - PRINT HUNG MSG. + AOS (PDP) ;NEVER ERROR RETURN + CONSZ CDR,CRMISS ;FEEDCHECK? + CONSZ CDR,CRNRED ;YES - READER READY? + SOSA TAC,LOPCNT ;NO - PICK UP HUNG LOOP COUNTER + JRST CDRSTR ;YES - GIVE ANOTHER CONO + JUMPGE TAC,STOIOS ;COUNT NOT EXPIRED - LEAVE ACTIVE + SOS (PDP) ;EXPIRED - PRINT HUNG MSG. + +CDRINI: CONO CDR,0 ;CLEAR HARDWARE + HLLZS CDRCON ;CLEAR CONSO BITS + POPJ PDP,0 ;RETURN + + INTERNAL FTCHECK,FTMONP + +IFN FTCHECK+FTMONP,< +EXTERNAL CDRDDB,CRDIS,CRTEM,CDRCON,LOPCNT +> +IFE FTCHECK+FTMONP,< +;CDR DEVICE DATA BLOCK + INTERN CDRDDB +CDRDDB: +CDRDAT: SIXBIT /CDR/ + XWD 2*HUNGST,34 ;BUFFER LONG ENOUGH FOR BINARY CARDS + 0 + EXP CDRDSP + XWD DVCDR+DVIN,14403 + 0 + 0 + XWD PROG,0 + 0 + 0 +CRDIS: JRST . +CRTEM: 0 ;TEMP FOR PARTIAL WORDS +CDRCON: 0 ;CONSO FLAGS +LOPCNT: 0 +> + +ENTRY CDRSR6 +EXTERN CPOPJ1,ILLOUT,PIOMOD,SETACT,SETBYT,CDRCHN,PIOFF,PION,HNGSTP +INTERN CDRDSP + +;CDR SERVICE DISPATCH TABLE (SHORT) + + JRST CDRINI ;INITILIZATION + JRST CDRHNG ;HUNG DEVICE IS CHECKED +CDRSR6: +CDRDSP: JRST CDRINI ;RELEASE - CLEAR DEVICE + POPJ PDP,0 ;CLOSE - NOTHING SPECIAL + JRST ILLOUT ;OUTPUT WON'T WORK + ;INPUT IS OK + TLZN IOS,IOBEG ;BEGINNING OF FILE? (NO MORE). + CONSO CDR,CREOFF ;BUTTON PUSHED? + TLZA IOS,CRMBIN+CRMIMG ;CLEAR TRASH + JRST CREOF ;END OF FILE PUSHED WHILE IOACT WAS 0 +CDRIN1: CONO CDR,0 ;CLEAR ANY SPURIOUS FLAGS + CONSO CDR,CRERR!CRMISS!CRNRED ;POWER OFF,LEFT OVER FEED-CHECK OR NOT READY + JRST .+3 ;NO - OK + PUSHJ PDP,HNGSTP ;YES - PRINT REMINDER & HALT JOB + JRST CDRIN1 ;GO TRY AGAIN WHEN USER TYPES 'CONT' + TLO IOS,IOFST+CRMFST ;NEW OPERATION + LDB TAC,PIOMOD ;SPEED UP TESTING OF MODE + CAIN TAC,B ;.. + TLO IOS,CRMBIN ;BINARY MODE + CAIN TAC,I + TLO IOS,CRMIMG ;IMAGE MODE + PUSHJ PDP,SETBYT ;LH(TAC):=700+PROG OR 4400+PROG + MOVEM TAC,DEVPTR(DEVDAT) ;SAVE BYTE SIZE +CDRSTR: MOVEI TAC,MINHNG ;HERE TO RESTART CDR ON FEED-CHECK + MOVEM TAC,LOPCNT ;RESET HUNG LOOP COUNTER + PUSHJ PDP,SETACT + MOVE TAC,[XWD CRDONE,CRCONO] + CONO PI,PIOFF + CONO CDR,CDRCHN(TAC) ;START CDR + HLRM TAC,CDRCON ;AND LOOK FOR IT + CONO PI,PION + POPJ PDP,0 ;RETURN TO UUOCON + + +INTERN CDRINT +EXTERN CDRSAV,IOSET,SETIOD,STOIOS,CDRCHN + +CDRINT: CONSO CDR,@CDRCON + JRST CDRINT + JSR CDRSAV + MOVEI DEVDAT,CDRDDB + MOVE IOS,DEVIOS(DEVDAT) + PUSHJ PDP,IOSET + CONSZ CDR,CRMISS + TRO IOS,IODERR ;DEVICE ERROR + CONSO CDR,CRERR+CREOFF+CREOC + JRST CRDATA ;JUST A DATA INTERRUPT + CONSZ CDR,CRERR ;HARDWARE LOSS? + JRST CDRERR ;YES + JRST CDREOC ;NO. MUST BE END OF CARD +CREOF: TLOA IOS,IOEND ;MARK END,SKIP TO CROFF +CDRERR: TRO IOS,IODERR ;CDR DEVICE ERROR HERE +CROFF: PUSHJ PDP,CDRINI ;STOP THE DEVICE + TRZ IOS,IOACT +CRLST1: MOVEI TAC,MINHNG + MOVEM TAC,LOPCNT ;RESET HNG. LOOP CNT. + TLO IOS,IOFST+CRMFST + TLZE IOS,IOW ;JOB WAITING FOR CDR? + PUSHJ PDP,SETIOD ;YES. WAKE IT UP +CREXIT: MOVEM ITEM,DEVCTR(DEVDAT) + JRST STOIOS + +CRCONT: MOVEI TAC,CDRCHN ;PI CHANNEL + CONO CDR,CRCONO(TAC) ;MAKE IT GO AGAIN + TLO IOS,CRMFST ;FIRST COLUMN, BUT NOT FIRST IN BUFFER + JRST CREXIT ;AND RETURN + + + +CRDATA: DATAI CDR,DAT + TLZN IOS,CRMFST ;COLUMN 1? + XCT CRDIS ;NO. SUBROUTINE HAS BEEN SET UP + TRNE IOS,IODERR ;POSSIBLE FEED CHECK? + CONSO CDR,CRNRED ;YES - READER READY? + JRST .+4 ;YES - GENUINE DATA ERROR + TLO IOS,CRMFST ;RESET 1ST COL. FLG. + TRZ IOS,IODERR ;CLEAR ERROR INDICATION + JRST STOIOS ;AND LET HUNG LOGIC SORT THINGS OUT + TLNE IOS,CRMIMG ;IMAGE MODE? + JRST CRFSTI ;YES, DON'T CHECK FOR EOF CARD + TRC DAT,7400 + TRCN DAT,7400 ;12,11,0 AND 1 PUNCH? + JRST CREOF1 ;YES. AN EOF CARD. + TLNE IOS,CRMBIN + JRST CRFSTB ;BINARY CARD FIRST COLUMN + MOVEI TAC,CRASCI ;HERE ON ASCII FIRST COLUMN + HRRM TAC,CRDIS ;FOR SUCCEEDING COLUMN INTERRUPTS + CAIE DAT,COD029 ;029 CONTROL CARD? + JRST CRASCI ;NO. PROCESS THE CARD. + TDO IOS, [XWD IOBEG,CRM029] ;FLAG FOR EOC AND TRANSLATOR + JRST CRIGNOR ;FLUSH REST OF THIS CARD + +CRASCI: MOVEI TAC,0 ;CLEAR TAC + CAIN DAT,5000 + MOVEI DAT,4202 ;12-0 => 12-8-2 + CAIN DAT,3000 + MOVEI DAT,2202 ;11-0 => 11-8-2 + LDB TAC1,[XWD 110300,DAT] ;12,11,0 ROWS TO TAC1 + TRNE DAT,3 ;8 ZONE? + TRC TAC1,7 ;YES, PERMUTE TAC1 + TRNE DAT,74 ;4 BIT? + TRO TAC1,10 ;YES + TRNE DAT,314 ;2 BIT? + TRO TAC,2 ;YES + TRNE DAT,525 ;1 BIT? + TRO TAC,1 ;YES + TRNN IOS,CRM029 ;HAS 029 CODE BEEN IMPLIED? + TRO TAC1,20 ;NO. MOVE UP TO 026 CODE TABLE + LDB DAT,CRCV2(TAC) ;GET THE ASCII CHARACTER + PUSHJ PDP,CRSTOD ;STORE IT + JRST CREXIT ;AND RETURN + +CRCV2: POINT 7,CRCNV(TAC1),6 + POINT 7,CRCNV(TAC1),13 + POINT 7,CRCNV(TAC1),20 + POINT 7,CRCNV(TAC1),27 + + +EXTERN CDRCHN + +CRFSTI: LSH DAT,30 + MOVEM DAT,CRTEM ;SAVE AS LEFT 12 BITS + JSP TAC,CREXI1 ;GET ANOTHER COLUMN + LSH DAT,14 + IORM DAT,CRTEM ;THROW IN MIDDLE 12 BITS + JSP TAC,CREXI1 ;ANOTHER COLUMN + IORB DAT,CRTEM ;RIGHT 12. SAVE IN CRTEM FOR DEBUG +CRBIN2: PUSHJ PDP,CRSTOD ;ENTRY HERE FROM BIN CARDS + MOVEI TAC,CRFSTI ;ANOTHER 3 COLUMNS COME NEXT +CREXI1: HRRM TAC,CRDIS ;WHERE TO GO FOR NEXT COLUMN + JRST CREXIT ;RETURN FROM INTERRUPT + +CDREOC: CONSO CDR,CREOFF + TLNE IOS,IOEND ;END OF FILE? + JRST CREOF ;YES. SHUT OFF CDR + TLNN IOS,CRMIMG+CRMBIN ;IMAGE OR BIN? + JRST CRENDA ;ASCII + TLNN IOS,CRMIMG ;IMAGE? + JRST CRENDB ;BINARY. + MOVE DAT,CRTEM ;HERE ON EOC AND IMAGE + PUSHJ PDP,CRSTOD ;STORE LAST 2 COLUMNS IN BUFFER +CRENDB: PUSHJ PDP,CRADV1 ;ADVANCE BUFFER +CRENDC: MOVEI TAC,CDRCHN ;PI CHANNEL + CONO CDR,CRCONO(TAC) ;GO FOR NEXT CARD + JRST CRLST1 ;SET UP FOR NEXT CARD,DISMISS INTERRUPT, + ;ALSO WAKE UP JOB IF IN IOW + +CRFSTB: MOVEI TAC,-5(DAT) + TRNE TAC,17 ;ROWS 6-9=5? + TRO IOS,IOIMPM ;NO. NOT A BIN CARD + LSH DAT,-4 ;GET COLUMNS 1-5 + JUMPE DAT,CRIGNOR ;IGNORE BINARY CARDS WITH 0 WORD COUNT + MOVEM DAT,CRTEM ;SAVE AS WORD COUNT + JSP TAC,CREXI1 ;GET COLUMN 2 + HRL DAT,CRTEM ;(COUNT)CKSUM + MOVSS DAT ;(CKSUM)COUNT + JRST CRBIN2 ;STORE DAT AND GET REST OF CARD + + +EXTERN STOSQD,STODAT,ADVBFF + +CRENDA: TLZE IOS,IOBEG ;WAS THIS A 029 CONTROL CARD? + JRST CRCONT ;YES. NO CRLF. + MOVEI DAT,15 ;CARRIAGE RETURN + PUSHJ PDP,CRSTOD ;STORE + MOVEI DAT,12 ;LINE FEED + PUSHJ PDP,CRSTOD ;STORE + LDB TAC1,PIOMOD ;GET MODE + CAIN TAC1,AL ;ASCII LINE? + JRST CRENDC ;YES -WORD COUNT WILL HAVE BEEN COMPUTED & BUFFERS ADVANCED + CAIL ITEM,^D82 ;ROOM FOR ANOTHER CARD + CRLF? + JRST CRCONT ;YES. DO SO + PUSHJ PDP,STOSQD ;NO. STORE WORD COUNT + JRST CROFF ;CAN'T RETURN HERE, BUT ... + JRST CRENDB ;PROCEED TO ANOTHER BUFFER + +CREOF1: TLO IOS,IOEND ;HERE ON EOF CARD. MARK FOR EOC +CRIGNOR: JSP TAC,CREXI1 ;GET MORE COLUMNS + JRST .-1 ;AND IGNORE THEM. + +CRSTOD: PUSHJ PDP,STODAT ;STORE DAT IN BUFFER + JRST CRPOFF ;ADDRESS CHECK,IOBKTL,IODTER (CKSUM) + JRST CRADV ;BUFFER FULL OR BUFFER DONE + POPJ PDP,0 ;SIMPLE OK STORED RETURN + +CRADV: TLNE IOS,CRMBIN ;BINARY? + JRST CRIGNOR ;WAIT FOR END OF CARD +CRADV1: TLNE IOS,IOFST ;VIRGIN BUFFER? + POPJ PDP,0 ;YES. KEEP THIS ONE + PUSHJ PDP,ADVBFF ;ADVANCE TO ANOTHER BUFFER + SKIPA ;NO BUFFER AVAILABLE + POPJ PDP,0 ;OK. RETURN +CRPOFF: POP PDP,TAC + JRST CROFF + + +;CODE CONVERSION FOR THE 029 KEYPUNCH + +;THE FOLLOWING EQUIVALENCES ARE ARTIFICIALLY DEFINED + +;029 KEYTOP ;ASCII 35 ;ASCII 37 +;CENT [ [ +;0-8-2 ] ] +;VERT BAR ^ HAT = L.C. VERT BAR +;UNDERBAR _ UNDERBAR +;NEGATION \ TILDE = L.C. NEGATION + + ;CHARACTERS ;ZONE/DIGITS +CRCNV: ASCII / 123/ ;N/N-3 + ASCII .0/ST. ;0/N-3 + ASCII /-JKL/ ;11/N-3 + ASCII /HI[./ ;12,8/N-3 + ASCII /&ABC/ ;12/N-3 + ASCII /QR!$/ ;11,8/N-3 + ASCII /YZ],/ ;0,8/N-3 + ASCII /89:#/ ;8/N-3 + ASCII /4567/ ;N/4-7 + ASCII /UVWX/ ;0/4-7 + ASCII /MNOP/ ;11/4-7 + ASCII /<(+^/ ;12,8/4-7 + ASCII /DEFG/ ;12/4-7 + ASCII /*);\/ ;11,8/4-7 + ASCII /%_>?/ ;0,8/4-7 + ASCII /@'="/ ;8/4-7 + +;CODE FOR THE 026 KEYPUNCH A LA H HYMAN + + ASCII / 123/ ;N/N-3 + ASCII .0/ST. ;0/N-3 + ASCII /-JKL/ ;11/N-3 + ASCII /HI?./ ;12,8/N-3 + ASCII /+ABC/ ;12/N-3 + ASCII /QR:$/ ;11,8/N-3 + ASCII /YZ;,/ ;0,8/N-3 + ASCII /89_=/ ;8/N-3 + ASCII /4567/ ;N/4-7 + ASCII /UVWX/ ;0/4-7 + ASCII /MNOP/ ;11/4-7 + ASCII /)]&/ ;11,8/4-7 + ASCII /("#%/ ;0,8/4-7 + ASCII /@^'\/ ;8/4-7 + + + END +