X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v4.5.git/blobdiff_plain/cda2ba6d27526e5ef6f27f7b3391cfb55055bf2e..d693caac75dd25e668e43e85c29205bfc8dea06e:/src/cdrsr6.mac diff --git a/src/cdrsr6.mac b/src/cdrsr6.mac new file mode 100644 index 0000000..68b70ce --- /dev/null +++ b/src/cdrsr6.mac @@ -0,0 +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