-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
-
-\fINTERNAL 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
->
-\f
-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
-
-\f
-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
-
-\f
-
-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
-
-\f
-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
-
-\f
-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
-
-\f
-;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 /)]<!/ ;12,8/4-7
- ASCII /DEFG/ ;12/4-7
- ASCII /*[>&/ ;11,8/4-7
- ASCII /("#%/ ;0,8/4-7
- ASCII /@^'\/ ;8/4-7
-
-
- END
-\f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
\ No newline at end of file
+TITLE CDRSR6 - CARD READER SERVICE FOR PDP-6 CARD READER\r
+SUBTTL /TH TS3.17 18 OCT 67 V001\r
+XP VCDRS6,001\r
+ ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP\r
+\r
+ ;PARAMETERS\r
+\r
+ ;HARDWARE\r
+\r
+ CRDONE=10\r
+ CRBUSY=20\r
+ CRBIN=40\r
+ CRALL=100\r
+ CRMISS=200\r
+ CREOC=400\r
+ CREOFF=1000\r
+ CRERR=2000\r
+ CRNRED=4000\r
+\r
+ CRCONO=CRBUSY+CRBIN+CRALL\r
+ CDR=114\r
+\r
+ COD029=5252 ;029 CONTROL CARD IS 12-0-2-4-6-8!\r
+\r
+ ;IOS\r
+\r
+ CRMFST=40000 ;LH\r
+ CRMIMG=100000 ;LH\r
+ CRMBIN=200000 ;LH\r
+ CRM029=100 ;RH\r
+\r
+ MINHNG=^D15 ;NO. OF TIMES TO OBEY HUNG CODE BEFORE REALLY BECOMING HUNG\r
+\r
+CDRHNG: CONSO CDR,CRERR ;POWER OFF OR OTHER SUCH CATASTOPHE?\r
+ TLNN IO,IOFST ;NO - CARD JAMMED?\r
+ JRST CDRINI ;YES - PRINT HUNG MSG.\r
+ AOS (PDP) ;NEVER ERROR RETURN\r
+ CONSZ CDR,CRMISS ;FEEDCHECK?\r
+ CONSZ CDR,CRNRED ;YES - READER READY?\r
+ SOSA TAC,LOPCNT ;NO - PICK UP HUNG LOOP COUNTER\r
+ JRST CDRSTR ;YES - GIVE ANOTHER CONO\r
+ JUMPGE TAC,STOIOS ;COUNT NOT EXPIRED - LEAVE ACTIVE\r
+ SOS (PDP) ;EXPIRED - PRINT HUNG MSG.\r
+\r
+CDRINI: CONO CDR,0 ;CLEAR HARDWARE\r
+ HLLZS CDRCON ;CLEAR CONSO BITS\r
+ POPJ PDP,0 ;RETURN\r
+\r
+\fINTERNAL FTCHECK,FTMONP\r
+\r
+IFN FTCHECK+FTMONP,<\r
+EXTERNAL CDRDDB,CRDIS,CRTEM,CDRCON,LOPCNT\r
+>\r
+IFE FTCHECK+FTMONP,<\r
+;CDR DEVICE DATA BLOCK\r
+ INTERN CDRDDB\r
+CDRDDB:\r
+CDRDAT: SIXBIT /CDR/\r
+ XWD 2*HUNGST,34 ;BUFFER LONG ENOUGH FOR BINARY CARDS\r
+ 0\r
+ EXP CDRDSP\r
+ XWD DVCDR+DVIN,14403\r
+ 0\r
+ 0\r
+ XWD PROG,0\r
+ 0\r
+ 0\r
+CRDIS: JRST .\r
+CRTEM: 0 ;TEMP FOR PARTIAL WORDS\r
+CDRCON: 0 ;CONSO FLAGS\r
+LOPCNT: 0\r
+>\r
+\f\r
+ENTRY CDRSR6\r
+EXTERN CPOPJ1,ILLOUT,PIOMOD,SETACT,SETBYT,CDRCHN,PIOFF,PION,HNGSTP\r
+INTERN CDRDSP\r
+\r
+;CDR SERVICE DISPATCH TABLE (SHORT)\r
+\r
+ JRST CDRINI ;INITILIZATION\r
+ JRST CDRHNG ;HUNG DEVICE IS CHECKED\r
+CDRSR6:\r
+CDRDSP: JRST CDRINI ;RELEASE - CLEAR DEVICE\r
+ POPJ PDP,0 ;CLOSE - NOTHING SPECIAL\r
+ JRST ILLOUT ;OUTPUT WON'T WORK\r
+ ;INPUT IS OK\r
+ TLZN IOS,IOBEG ;BEGINNING OF FILE? (NO MORE).\r
+ CONSO CDR,CREOFF ;BUTTON PUSHED?\r
+ TLZA IOS,CRMBIN+CRMIMG ;CLEAR TRASH\r
+ JRST CREOF ;END OF FILE PUSHED WHILE IOACT WAS 0\r
+CDRIN1: CONO CDR,0 ;CLEAR ANY SPURIOUS FLAGS\r
+ CONSO CDR,CRERR!CRMISS!CRNRED ;POWER OFF,LEFT OVER FEED-CHECK OR NOT READY\r
+ JRST .+3 ;NO - OK\r
+ PUSHJ PDP,HNGSTP ;YES - PRINT REMINDER & HALT JOB\r
+ JRST CDRIN1 ;GO TRY AGAIN WHEN USER TYPES 'CONT'\r
+ TLO IOS,IOFST+CRMFST ;NEW OPERATION\r
+ LDB TAC,PIOMOD ;SPEED UP TESTING OF MODE\r
+ CAIN TAC,B ;..\r
+ TLO IOS,CRMBIN ;BINARY MODE\r
+ CAIN TAC,I\r
+ TLO IOS,CRMIMG ;IMAGE MODE\r
+ PUSHJ PDP,SETBYT ;LH(TAC):=700+PROG OR 4400+PROG\r
+ MOVEM TAC,DEVPTR(DEVDAT) ;SAVE BYTE SIZE\r
+CDRSTR: MOVEI TAC,MINHNG ;HERE TO RESTART CDR ON FEED-CHECK\r
+ MOVEM TAC,LOPCNT ;RESET HUNG LOOP COUNTER\r
+ PUSHJ PDP,SETACT\r
+ MOVE TAC,[XWD CRDONE,CRCONO]\r
+ CONO PI,PIOFF\r
+ CONO CDR,CDRCHN(TAC) ;START CDR\r
+ HLRM TAC,CDRCON ;AND LOOK FOR IT\r
+ CONO PI,PION\r
+ POPJ PDP,0 ;RETURN TO UUOCON\r
+\r
+\f\r
+INTERN CDRINT\r
+EXTERN CDRSAV,IOSET,SETIOD,STOIOS,CDRCHN\r
+\r
+CDRINT: CONSO CDR,@CDRCON\r
+ JRST CDRINT\r
+ JSR CDRSAV\r
+ MOVEI DEVDAT,CDRDDB\r
+ MOVE IOS,DEVIOS(DEVDAT)\r
+ PUSHJ PDP,IOSET\r
+ CONSZ CDR,CRMISS\r
+ TRO IOS,IODERR ;DEVICE ERROR\r
+ CONSO CDR,CRERR+CREOFF+CREOC\r
+ JRST CRDATA ;JUST A DATA INTERRUPT\r
+ CONSZ CDR,CRERR ;HARDWARE LOSS?\r
+ JRST CDRERR ;YES\r
+ JRST CDREOC ;NO. MUST BE END OF CARD\r
+CREOF: TLOA IOS,IOEND ;MARK END,SKIP TO CROFF\r
+CDRERR: TRO IOS,IODERR ;CDR DEVICE ERROR HERE\r
+CROFF: PUSHJ PDP,CDRINI ;STOP THE DEVICE\r
+ TRZ IOS,IOACT\r
+CRLST1: MOVEI TAC,MINHNG\r
+ MOVEM TAC,LOPCNT ;RESET HNG. LOOP CNT.\r
+ TLO IOS,IOFST+CRMFST\r
+ TLZE IOS,IOW ;JOB WAITING FOR CDR?\r
+ PUSHJ PDP,SETIOD ;YES. WAKE IT UP\r
+CREXIT: MOVEM ITEM,DEVCTR(DEVDAT)\r
+ JRST STOIOS\r
+\r
+CRCONT: MOVEI TAC,CDRCHN ;PI CHANNEL\r
+ CONO CDR,CRCONO(TAC) ;MAKE IT GO AGAIN\r
+ TLO IOS,CRMFST ;FIRST COLUMN, BUT NOT FIRST IN BUFFER\r
+ JRST CREXIT ;AND RETURN\r
+\r
+\f\r
+\r
+CRDATA: DATAI CDR,DAT\r
+ TLZN IOS,CRMFST ;COLUMN 1?\r
+ XCT CRDIS ;NO. SUBROUTINE HAS BEEN SET UP\r
+ TRNE IOS,IODERR ;POSSIBLE FEED CHECK?\r
+ CONSO CDR,CRNRED ;YES - READER READY?\r
+ JRST .+4 ;YES - GENUINE DATA ERROR\r
+ TLO IOS,CRMFST ;RESET 1ST COL. FLG.\r
+ TRZ IOS,IODERR ;CLEAR ERROR INDICATION\r
+ JRST STOIOS ;AND LET HUNG LOGIC SORT THINGS OUT\r
+ TLNE IOS,CRMIMG ;IMAGE MODE?\r
+ JRST CRFSTI ;YES, DON'T CHECK FOR EOF CARD\r
+ TRC DAT,7400\r
+ TRCN DAT,7400 ;12,11,0 AND 1 PUNCH?\r
+ JRST CREOF1 ;YES. AN EOF CARD.\r
+ TLNE IOS,CRMBIN\r
+ JRST CRFSTB ;BINARY CARD FIRST COLUMN\r
+ MOVEI TAC,CRASCI ;HERE ON ASCII FIRST COLUMN\r
+ HRRM TAC,CRDIS ;FOR SUCCEEDING COLUMN INTERRUPTS\r
+ CAIE DAT,COD029 ;029 CONTROL CARD?\r
+ JRST CRASCI ;NO. PROCESS THE CARD.\r
+ TDO IOS, [XWD IOBEG,CRM029] ;FLAG FOR EOC AND TRANSLATOR\r
+ JRST CRIGNOR ;FLUSH REST OF THIS CARD\r
+\r
+CRASCI: MOVEI TAC,0 ;CLEAR TAC\r
+ CAIN DAT,5000\r
+ MOVEI DAT,4202 ;12-0 => 12-8-2\r
+ CAIN DAT,3000\r
+ MOVEI DAT,2202 ;11-0 => 11-8-2\r
+ LDB TAC1,[XWD 110300,DAT] ;12,11,0 ROWS TO TAC1\r
+ TRNE DAT,3 ;8 ZONE?\r
+ TRC TAC1,7 ;YES, PERMUTE TAC1\r
+ TRNE DAT,74 ;4 BIT?\r
+ TRO TAC1,10 ;YES\r
+ TRNE DAT,314 ;2 BIT?\r
+ TRO TAC,2 ;YES\r
+ TRNE DAT,525 ;1 BIT?\r
+ TRO TAC,1 ;YES\r
+ TRNN IOS,CRM029 ;HAS 029 CODE BEEN IMPLIED?\r
+ TRO TAC1,20 ;NO. MOVE UP TO 026 CODE TABLE\r
+ LDB DAT,CRCV2(TAC) ;GET THE ASCII CHARACTER\r
+ PUSHJ PDP,CRSTOD ;STORE IT\r
+ JRST CREXIT ;AND RETURN\r
+\r
+CRCV2: POINT 7,CRCNV(TAC1),6\r
+ POINT 7,CRCNV(TAC1),13\r
+ POINT 7,CRCNV(TAC1),20\r
+ POINT 7,CRCNV(TAC1),27\r
+\r
+\f\r
+EXTERN CDRCHN\r
+\r
+CRFSTI: LSH DAT,30\r
+ MOVEM DAT,CRTEM ;SAVE AS LEFT 12 BITS\r
+ JSP TAC,CREXI1 ;GET ANOTHER COLUMN\r
+ LSH DAT,14\r
+ IORM DAT,CRTEM ;THROW IN MIDDLE 12 BITS\r
+ JSP TAC,CREXI1 ;ANOTHER COLUMN\r
+ IORB DAT,CRTEM ;RIGHT 12. SAVE IN CRTEM FOR DEBUG\r
+CRBIN2: PUSHJ PDP,CRSTOD ;ENTRY HERE FROM BIN CARDS\r
+ MOVEI TAC,CRFSTI ;ANOTHER 3 COLUMNS COME NEXT\r
+CREXI1: HRRM TAC,CRDIS ;WHERE TO GO FOR NEXT COLUMN\r
+ JRST CREXIT ;RETURN FROM INTERRUPT\r
+\r
+CDREOC: CONSO CDR,CREOFF\r
+ TLNE IOS,IOEND ;END OF FILE?\r
+ JRST CREOF ;YES. SHUT OFF CDR\r
+ TLNN IOS,CRMIMG+CRMBIN ;IMAGE OR BIN?\r
+ JRST CRENDA ;ASCII\r
+ TLNN IOS,CRMIMG ;IMAGE?\r
+ JRST CRENDB ;BINARY.\r
+ MOVE DAT,CRTEM ;HERE ON EOC AND IMAGE\r
+ PUSHJ PDP,CRSTOD ;STORE LAST 2 COLUMNS IN BUFFER\r
+CRENDB: PUSHJ PDP,CRADV1 ;ADVANCE BUFFER\r
+CRENDC: MOVEI TAC,CDRCHN ;PI CHANNEL\r
+ CONO CDR,CRCONO(TAC) ;GO FOR NEXT CARD\r
+ JRST CRLST1 ;SET UP FOR NEXT CARD,DISMISS INTERRUPT,\r
+ ;ALSO WAKE UP JOB IF IN IOW\r
+\r
+CRFSTB: MOVEI TAC,-5(DAT)\r
+ TRNE TAC,17 ;ROWS 6-9=5?\r
+ TRO IOS,IOIMPM ;NO. NOT A BIN CARD\r
+ LSH DAT,-4 ;GET COLUMNS 1-5\r
+ JUMPE DAT,CRIGNOR ;IGNORE BINARY CARDS WITH 0 WORD COUNT\r
+ MOVEM DAT,CRTEM ;SAVE AS WORD COUNT\r
+ JSP TAC,CREXI1 ;GET COLUMN 2\r
+ HRL DAT,CRTEM ;(COUNT)CKSUM\r
+ MOVSS DAT ;(CKSUM)COUNT\r
+ JRST CRBIN2 ;STORE DAT AND GET REST OF CARD\r
+\r
+\f\r
+EXTERN STOSQD,STODAT,ADVBFF\r
+\r
+CRENDA: TLZE IOS,IOBEG ;WAS THIS A 029 CONTROL CARD?\r
+ JRST CRCONT ;YES. NO CRLF.\r
+ MOVEI DAT,15 ;CARRIAGE RETURN\r
+ PUSHJ PDP,CRSTOD ;STORE\r
+ MOVEI DAT,12 ;LINE FEED\r
+ PUSHJ PDP,CRSTOD ;STORE\r
+ LDB TAC1,PIOMOD ;GET MODE\r
+ CAIN TAC1,AL ;ASCII LINE?\r
+ JRST CRENDC ;YES -WORD COUNT WILL HAVE BEEN COMPUTED & BUFFERS ADVANCED\r
+ CAIL ITEM,^D82 ;ROOM FOR ANOTHER CARD + CRLF?\r
+ JRST CRCONT ;YES. DO SO\r
+ PUSHJ PDP,STOSQD ;NO. STORE WORD COUNT\r
+ JRST CROFF ;CAN'T RETURN HERE, BUT ...\r
+ JRST CRENDB ;PROCEED TO ANOTHER BUFFER\r
+\r
+CREOF1: TLO IOS,IOEND ;HERE ON EOF CARD. MARK FOR EOC\r
+CRIGNOR: JSP TAC,CREXI1 ;GET MORE COLUMNS\r
+ JRST .-1 ;AND IGNORE THEM.\r
+\r
+CRSTOD: PUSHJ PDP,STODAT ;STORE DAT IN BUFFER\r
+ JRST CRPOFF ;ADDRESS CHECK,IOBKTL,IODTER (CKSUM)\r
+ JRST CRADV ;BUFFER FULL OR BUFFER DONE\r
+ POPJ PDP,0 ;SIMPLE OK STORED RETURN\r
+\r
+CRADV: TLNE IOS,CRMBIN ;BINARY?\r
+ JRST CRIGNOR ;WAIT FOR END OF CARD\r
+CRADV1: TLNE IOS,IOFST ;VIRGIN BUFFER?\r
+ POPJ PDP,0 ;YES. KEEP THIS ONE\r
+ PUSHJ PDP,ADVBFF ;ADVANCE TO ANOTHER BUFFER\r
+ SKIPA ;NO BUFFER AVAILABLE\r
+ POPJ PDP,0 ;OK. RETURN\r
+CRPOFF: POP PDP,TAC\r
+ JRST CROFF\r
+\r
+\f\r
+;CODE CONVERSION FOR THE 029 KEYPUNCH\r
+\r
+;THE FOLLOWING EQUIVALENCES ARE ARTIFICIALLY DEFINED\r
+\r
+;029 KEYTOP ;ASCII 35 ;ASCII 37\r
+;CENT [ [\r
+;0-8-2 ] ]\r
+;VERT BAR ^ HAT = L.C. VERT BAR\r
+;UNDERBAR _ UNDERBAR\r
+;NEGATION \ TILDE = L.C. NEGATION\r
+\r
+ ;CHARACTERS ;ZONE/DIGITS\r
+CRCNV: ASCII / 123/ ;N/N-3\r
+ ASCII .0/ST. ;0/N-3\r
+ ASCII /-JKL/ ;11/N-3\r
+ ASCII /HI[./ ;12,8/N-3\r
+ ASCII /&ABC/ ;12/N-3\r
+ ASCII /QR!$/ ;11,8/N-3\r
+ ASCII /YZ],/ ;0,8/N-3\r
+ ASCII /89:#/ ;8/N-3\r
+ ASCII /4567/ ;N/4-7\r
+ ASCII /UVWX/ ;0/4-7\r
+ ASCII /MNOP/ ;11/4-7\r
+ ASCII /<(+^/ ;12,8/4-7\r
+ ASCII /DEFG/ ;12/4-7\r
+ ASCII /*);\/ ;11,8/4-7\r
+ ASCII /%_>?/ ;0,8/4-7\r
+ ASCII /@'="/ ;8/4-7\r
+\r
+;CODE FOR THE 026 KEYPUNCH A LA H HYMAN\r
+\r
+ ASCII / 123/ ;N/N-3\r
+ ASCII .0/ST. ;0/N-3\r
+ ASCII /-JKL/ ;11/N-3\r
+ ASCII /HI?./ ;12,8/N-3\r
+ ASCII /+ABC/ ;12/N-3\r
+ ASCII /QR:$/ ;11,8/N-3\r
+ ASCII /YZ;,/ ;0,8/N-3\r
+ ASCII /89_=/ ;8/N-3\r
+ ASCII /4567/ ;N/4-7\r
+ ASCII /UVWX/ ;0/4-7\r
+ ASCII /MNOP/ ;11/4-7\r
+ ASCII /)]<!/ ;12,8/4-7\r
+ ASCII /DEFG/ ;12/4-7\r
+ ASCII /*[>&/ ;11,8/4-7\r
+ ASCII /("#%/ ;0,8/4-7\r
+ ASCII /@^'\/ ;8/4-7\r
+\r
+\r
+ END\r
+\f\r
SUBTTL T. WACHS/TH TS 20 MAY 69\r
XP VMTASR,420 ;DEFINE VERSION NUMBER FOR LOADER STORAGE MAP\r
\r
+\r
ENTRY MTASRX\r
MTASRX:\r
\r
JRST MTDMPI\r
POPJ PDP, ;USETO\r
POPJ PDP, ;USETI\r
+ POPJ PDP, ;UGETF\r
JRST CPOPJ1 ;RENAME\r
POPJ PDP, ;CLOSE INPUT\r
POPJ PDP, ;UTPCLR\r
MTC=340\r
MTS=344\r
\r
+\r
;MTACHN=FLAG CHANNEL\r
;MTOCHN=DATA CHANNEL\r
;MTFLAG=10*MTACHN + 400\r
EXTERN CPOPJ,CPOPJ1,PIOMOD,PUNIT,MTWAIT,JIFSC2,COMCHK\r
EXTERN PIOFF,PION,MTASAV,ADRERR,PDVCNT,MTSIZ,STOIOS,IADRCK\r
\r
-COMPAT=1000 ;IBM COMPATABLE 9-TRACK\r
-DMPMOD=20000 ;DUMP MODE FLAG\r
-MTREW=40000 ;MAGTAPE IS REWINDING\r
+COMPAT=10000 ;IBM COMPATABLE 9-TRACK\r
+DMPMOD=200000 ;DUMP MODE FLAG\r
+MTREW=400000 ;MAGTAPE IS REWINDING\r
\r
MTTRY=3 ;NO. OF TIMES TO RETRY ON AN ERROR\r
QUANT=3 ;NO. OF RECORDS TO READ UNINTERRUPTED\r
\r
;IF ENTER OR LOOKUP IN SAVE MODE - CHANGE TO MODE 16\r
SAVCHK: LDB TAC,PIOMOD ;GET MODE\r
- CAIN TAC,0 ;SAVE MODE?\r
+ CAIN TAC,2 ;SAVE MODE?\r
TRO IOS,16 ;YES, CHANGE TO DUMP-MODE\r
MOVEM IOS,DEVIOS(DEVDAT)\r
JRST CPOPJ1 ;GIVE GOOD RETURN FROM LOOKUP/ENTER\r
;CLOSE\r
MTCLOS: TLNN DEVDAT,OUTPB ;OUTPUT BEEN DONE?\r
POPJ PDP, ;NO. GO AWAY\r
-\r
LDB TAC,PIOMOD\r
CAIGE TAC,16 ;DUMP MODE?\r
PUSHJ PDP,OUT ;NO. EMPTY LAST PARTIAL BUFFER\r
HRRM TAC,-1(PDP) ;AGAIN WHEN INACTIVE\r
JRST SETACT ;SET DEVICE ACTIVE\r
\r
+\r
;DELAY TILL TAPE COMES OUT OF IO WAIT, THEN GET CONTROL\r
DLYRDY: SETOM MTAVAL\r
PUSHJ PDP,WSYNC ;WAIT FOR IO TO STOP\r
\r
+\r
;GET MTC, CONNECT TAPE TO CONTROL\r
TPREDY: AOSE MTREQ ;GET CONTROL\r
PUSHJ PDP,MTWAIT ;WAIT FOR IT\r
TPRDY2: MOVEM PROG,USEPRG\r
PUSHJ PDP,CONECT ;CONECT CONTROL TO TAPE\r
\r
+\r
;SET TP FOR THIS TAPE\r
TPSET: LDB TP,[POINT 2,IOS,28] ;PARITY\r
SKIPN TP ;USE STANDARD IF 0\r
CONSZ MTS,4 ;7 OR 9 TRACK?\r
JRST RDYCHK ;7 TRACK\r
TLNN IOS,COMPAT ;9 TRACK. CORE DUMP?\r
- TROA TP,20030 ;YES\r
+ TROA TP,20000 ;YES\r
TRO TP,40300 ;NO. SET 800 BPI, ODD PARITY\r
\f;MAKE SURE TAPE IS READY\r
RDYCHK: CONSZ MTS,40 ;READY?\r
POPJ PDP, ;YES\r
- CONSO MTS,20000 ;REWINDING?\r
+ CONSO MTS,200000 ;REWINDING?\r
POPJ PDP, ;NO. LET XPORT HUNG INTERRUPT HANDLE IT\r
+\r
TLO IOS,MTREW ;YES. MUST BE REWINDING\r
PUSHJ PDP,SETACT ;DEVICE ACTIVE\r
AOS NMTREW ;BUMP COUNT OF REWINDING DRIVES\r
JRST REWCK1 ;YES\r
TLZE IOS,IOW ;NO, TAKE OUT OF IO WAIT\r
PUSHJ PDP,SETIOD\r
- TLZ IOS,MTREQ\r
+ TLZ IOS,MTREW\r
PUSHJ PDP,CLRACT ;NO LONGER ACTIVE\r
JRST REWCK2\r
- \r
REWCK1: AOS NMTREW ;COUNT REWINDING TAPE\r
MOVEI TAC,36 \r
- CONSZ MTS,20000 ;IF TAPE IS STILL REWINDING\r
+ CONSZ MTS,200000 ;IF TAPE IS STILL REWINDING\r
DPB TAC,PDVCNT ;MAKE SURE IT DOESN'T GET A HUNG DEVICE\r
REWCK2: HLRZ DEVDAT,DEVSER(DEVDAT) ;NEXT DEVICE\r
HLRZ TAC,DEVNAM(DEVDAT) ;A MAG TAPE?\r
CONO MTC,(TP) ;START TAPE MOVING\r
JRST CLRACT ;AND RETURN\r
\r
+\r
;SET 9-TRACK TAPE\r
SET9TK: TRNE UUO,1\r
TLOA IOS,COMPAT ;SET IBM COMPAT.\r
HRRI TAC1,PNTR ;BLKI/BLKO PNTR\r
MOVEM TAC1,MTALOC ;INTO INTERRUPT LOC\r
HRLM TP,USEWRD ;SAVE COMMAND\r
-\r
CONO MTC,(TP) ;START TAPE MOVING\r
TRO IOS,IOACT ;SETACT CLEARS IOW\r
JRST STOIOS ;STORE IOS AND RETURN\r
MTIN2: TRO TP,2000 ;FUNCTION = READ\r
MOVSI TAC1,(BLKI MTC,) ;SETUP BLKI\r
JRST MTDTGO ;GO START TAPE\r
+\r
\fMTAINT: CONSO MTS,440102 ;INTERRUPT FOR MAG TAPE?\r
JRST . ;NO. GO AWAY\r
CONSO MTC,400 ;HAS CONTROL FREE ENABLED?\r
CONSZ MTS,440100 ;NO. CONTROL FREE ERRONEOUSLY ON?\r
- JRST +2 ;REAL MTA INTERRUPT\r
+ JRST .+2 ;REAL MTA INTERRUPT\r
JRST MTAINT+1 ;THIS INTERRUPT NOT REALLY FOR MTA\r
JSR MTASAV ;YES. SAVE ACS\r
HRRZ DEVDAT,USEWRD ;RESET DEVDAT\r
HLLZS MTAINT ;DONT LOOK AT ANY MORE INTERRUPTS\r
POPJ PDP, ;AND EXIT\r
\r
+\r
;HERE WHEN BLKI/BLKO COUNTS DOWN TO ZERO\r
MTDEND: 0\r
CONO MTS,1 ;GIVE A FUNCTION STOP\r
JRST THRUTP ;NONE FREE\r
JRST NXTREC ;CONTINUE WITH NEXT RECORD\r
\r
+\r
; HERE AT THE END OF A DUMP MODE RECORD\r
DMPEND: HLRZ TP,USEWRD ;SET UP COMMAND AGAIN\r
CONSO MTS,14000 ;EOF OR EOT?\r
SOS UUO ;WILL COUNT IT UP LATER\r
MOVEM UUO,LSTLOC ;SAVE LOC OF LIST\r
DMPBLK: PUSHJ PDP,NXTCOM ;GET NEXT COMMAND\r
-\r
ADDI TAC,(PROG) ;ADD RELOCATION FACTOR\r
TLNE IOS,IO ;WRITING?\r
JRST MTOUT2 ;YES. GO WRITE RECORD\r
USEWRD: 0\r
USEPRG: 0\r
CLKREQ: 0\r
- \r
UNIT: 0\r
ERCNT: 0\r
ERRFLG: 0\r
PNTR: 0\r
SVPNTR: 0\r
MTAEND: END\r
-\f\r
-\0\0\r
SUBTTL C.WHITE 27-APR-69 V406\r
XP VMTCSR,406 ;DEFINE GLOBAL VERSION NUMBER FOR LOADER MAP\r
\r
+\r
ENTRY MTCSR6\r
MTCSR6:\r
INTERNAL FTCHECK,FTMONP\r
POPJ PDP, ;UTPCLR\r
;MTAPE UUO (FALL INTO THIS CODE WHICH FOLLOWS)\r
\r
+\r
DEFINE MTAPES (A) ;MARCO TO DEFINE LEGAL MTAPES UUO EFFECTIVE ADDRESSES.\r
< CODES=0\r
IRP A, <\r
TRZ IOS,776000 ;CLEAR ERROR BITS ,IOF.\r
;IOACT, IOBOT AND IOTEND.\r
SKIPA T,UUO ;CALL MTAPE2\r
-\fMTAPE: PUSHJ PDP,MTCHK2 ;CHECK IF MAG TAPE CONTROL AVAIL.\r
+\f\r
+MTAPE: PUSHJ PDP,MTCHK2 ;CHECK IF MAG TAPE CONTROL AVAIL.\r
MTAPE2: TDZ IOS,[XWD IODT!IOSEOF,IOACT]\r
TRNN T,SLICE ;SET SLICE LEVEL THIS UUO?\r
JRST NOSET ;NO\r
CONSO 224,4000 ;AT LOAD POINT?\r
JRST MTGO0 ;NO\r
CAIE T,3400 ;YES, BACKSPACE RECORD?\r
-\r
CAIN T,400 ;NO, REW?\r
JRST MTFIN ;YES\r
CAIN T,7400 ;NO, BACKSPACE FILE?\r
JRST MTFIN ;YES\r
MTGO0: MOVSI TAC,TCF ;LOOK FOR TAPE CONTROL FREE ONLY\r
-\f;HERE FROM INPUT AND OUTPUT UUOS AND INTERRUPT TO DO NEXT RECORD.\r
+\f\r
+;HERE FROM INPUT AND OUTPUT UUOS AND INTERRUPT TO DO NEXT RECORD.\r
\r
MTGO1: LDB TAC1,PUNIT ;UNIT\r
DPB TAC1,[POINT 3,T,31] ;UNIT\r
MOVEI T,2400 ;READ\r
MTIN2: MOVE TAC1,[BLKI DC,4000+MTDC*10]\r
JRST MTINDC\r
-\f;IS SYSTEM AVAILABLE\r
+\f\r
+;IS SYSTEM AVAILABLE\r
MTCHEK: PUSHJ PDP,GETDCMT ;GET DATA AND MAG TAPE CONTROLS\r
AOSE MTREQ ;ARGUMENT\r
MOVE IOS,DEVIOS(DEVDAT)\r
\r
MTCHK4: TLO IOS,HASMT ;THIS JOB NOW HAS MTC\r
TLZE IOS,IOBEG ;FIRST OPERATION AFTER INIT OR SETSTS\r
-\r
TLZ IOS,IOSLIC ;YES, SET SLICE LEVEL TO 0.\r
TLZ IOS,IOREW ;CLEAR MAG TAPE REWINDING\r
PUSHJ PDP,REWCK ;CHECK IF REWINDING?\r
\r
QSTAT: PUSHJ PDP,DETMDC ;DETACH MTC AND DC\r
JRST HNGSTP ;CHECK STATUS (PULL FINGERS OUT, ETC)\r
-\f;MTAPE 0 WAITS UNTIL THE CONTROL IS FREE\r
+\r
+\f\r
+;MTAPE 0 WAITS UNTIL THE CONTROL IS FREE\r
;THUS MTAPE 0 PROVIDES THE ONLY WAY FOR A USER TO WAIT UNTIL A SPACING OPERATION\r
; (I.E., SKIP, BACKSPACE, OR REWIND) IS COMPLETED.\r
\r
; AND RETURN TO THE USER.\r
\r
\r
+\r
+\r
;DETMDC-\r
; DETACH MTC, AND TURN OFF HASMT.\r
; THEN (IFF IODT ON)\r
DETDC: TLZN IOS,IODT ;DOES JOB HAVE DATA CONTROL?\r
JRST STOIOS ;NO- EXIT\r
CONO DC,0\r
- CONO DC,DCOFF\r
+ CONO PI,DCOFF\r
SOSL DCREQ ;ANYONE ELSE WAITING FOR IT?\r
SETOM DCAVAL ;YES- FLAG AS JUST BECOME AVAILABLE\r
JRST STOIOS ;AND EXIT\r
CONO 224,0\r
SETZM MTCCON\r
POPJ PDP,\r
-\f;ROUTINE TO SEE IF UNIT IS REWINDING\r
+\f\r
+;ROUTINE TO SEE IF UNIT IS REWINDING\r
;CALL MOVE DEVDAT,ADDRESS OF DDB\r
; PUSHJ PDP,REWCK\r
; UNIT READY\r
AOS (PDP)\r
POPJ PDP, ;YES- RETURN TO CALL+1\r
\r
+\r
REPEAT 0,<\r
THIS WORKS WITH THE FOLLOWING MOD TO 545 TRANSPORT:\r
\r
TO LOAD POINT- IF ENABLES THE PROCESSOR TO DISTINGUISH BETWEEN A\r
TAPE WHICH IS AT THE END OF A REWIND COMMAND, AND A TAPE WHICH IS\r
SWITCHED TO LOCAL, OR OFF>\r
-\f;WRITE\r
+\f\r
+;WRITE\r
MTOUT: PUSHJ PDP,MTCHEK\r
TLO IOS,IO ;WRITING\r
MTOUT1: MOVEI TAC,@DEVOAD(DEVDAT) ;BUFFER ADDRESS, PROG INCLUDED\r
MOVSI TAC,XNC ;NO. COME BACK WHEN COMMAND BUFFER IS EMPTY\r
JRST MTGO1\r
\r
+\r
+\r
CHKLOK: CONSO 224,200 ;WRITE LOCKED?\r
JRST MTGO0 ;NO, DO MTAPE\r
PUSHJ PDP,QSTAT\r
MOVEI T,7 ;BSP\r
JRST MTAPE\r
\r
+\r
MTCINI: PUSHJ PDP,RELCON\r
SETOM MTREWN ;SET CLOCK REQUEST COUNT TO -1\r
JRST MTNIO1\r
\r
\r
;BLK COUNTED OUT\r
+\r
IFE FTCHECK+FTMONP,<\r
MTDCND: 0\r
>\r
CONSZ DC,10000\r
SETOM MISSED\r
JEN @MTDCND\r
-\f;FLAG FROM TAPE CONTROL. SET UP BY INSERT MACRO\r
+\r
+\f\r
+;FLAG FROM TAPE CONTROL. SET UP BY INSERT MACRO\r
MTCINT: CONSO 224,@MTCCON\r
JRST .\r
JSR MTCSAV ;SAVE AC'S\r
SETZM MTEOFF ;CLEAR EOF FLAG\r
\r
;AND FALL INTO MTEND1\r
-\fMTEND1: PUSHJ PDP,DETDC ;DETACH DC (IF ASSIGNED)\r
+\f\r
+MTEND1: PUSHJ PDP,DETDC ;DETACH DC (IF ASSIGNED)\r
PUSHJ PDP,ETCHK ;CHECK FOR END OF TAPE (FOR DUMP MODE OUT)\r
PUSHJ PDP,CLRACT\r
CONSO 224,TCF ;TAPE CONTROL FREE?\r
PUSHJ PDP,REWCK ;YES,SEE IF FINISHED REW.\r
JRST .+3 ;HAS FINISHED\r
JRST REW1 ;OFF- LET HUNG LOGICA TAKE CARE OF IT\r
- JRST REW2 ;STILL REWINDING\r
+ JRST REW0 ;STILL REWINDING\r
TDZ IOS,[XWD IOREW,IOACT];GET JOB OUT OF IO WAIT\r
TLZE IOS,IOW\r
PUSHJ PDP,SETIOD ;START JOB UP AGAIN\r
ETCHK: CONSZ MTS1,10000 ;EOT SEEN?\r
TRO IOS,IOIMPM+IOTEND ;YES-SET FLAGS\r
TDZ IOS,[XWD IOREW,IOBOT];NO LONGER REWINDING\r
- CONSZ MTS1,24002 ;UNLESSS\r
+ CONSZ MTS1,24000 ;UNLESSS\r
TRO IOS,IOBOT ;IS REALLY REWINDING\r
POPJ PDP, ;EXIT\r
+\r
\f;ROUTINE CALLED AT CLOCK LEVEL TO SEE IF ANY UNITS WHICH ARE IN A\r
;REW WAIT HAVE FINISHED REWIND.\r
\r
\r
MTCLK: MOVEI TAC1,JIFSC2 ;CHECK EVERY HALF SECOND\r
HRLI TAC1,MTCLOK ;DISPATCH ADDRESS\r
- \r
-\r
CONO PI,400 ;TURN OFF PI\r
IDPB TAC1,CLOCK ;STORE CLOCK REQUEST\r
CONO PI,200 ;TURN ON PI\r
CONSZ 224, 400 ;EOF?\r
TDO IOS,[XWD IOSEOF,IODEND]\r
JRST MTNIO ;EXIT\r
+\r
+\r
\fMTEOR: MOVEI TAC,ERF\r
CONSO 224,ERF ;END OF RECORD FLAG ON?\r
JRST MTIGN1 ;NO. WAIT FOR IT.\r
CONO DC,0 ;SHUT DOWN DC\r
LSH TAC,44(TAC1) ;SHIFT LAST CHARACTERS TO LEFT END\r
JUMPG T,MTEOR1\r
-\r
AOBJN T,.+1 ;BUMP DATA POINTER\r
MOVEM TAC,(T) ;STORE LAST WORD\r
MOVEM T,DCWRD ;AND BUMPED POINTER\r
TRO T,1 ;YES, COUNT IN QUARTER 4\r
ADDM T,MTECNT(DEVDAT);ADD TO ERROR COUNTS FOR THIS DRIVE\r
JRST MTECON ;CHECK EOF\r
-\fMTERR: HLRZ TAC,MTDEV ;COMMAND\r
+\f\r
+MTERR: HLRZ TAC,MTDEV ;COMMAND\r
ANDI TAC,7400\r
TRNE IOS,IONRCK\r
JRST MTERR2\r
CONO 220,4400(TAC) ;WRITE BLANK TAPE\r
AOS MTERCN\r
JRST MTIGN\r
-\fMTC=220 ;MAG TAPE CONTROL DEVICE NUMBER\r
+\f\r
+MTC=220 ;MAG TAPE CONTROL DEVICE NUMBER\r
\r
MTS1=224 ;MAG TAPE CONTROL STATUS REG 1\r
XNC=40000 ;TRANSFER NEW COMMAND\r
IONRCK=100 ;DO NOT RE-TRY ON ERRORS\r
IOBOT=4000 ;TAPE AT LOAD POINT\r
IODT=10000 ;A 1 FOR A DATA TRANSFER TYPE COMMAND\r
-IOSLIC=2000 ;A 1 IF SLICE LEVEL IS 1, OTHERWISE 0.\r
-HASMT=4000 ;IF A 1, THIS JOB HAS THE MAG TAPE CONTROL\r
-IOREW=40000 ;A 1 IF UNIT IS REWINDING AND ANOTHER OPERATIONS\r
+IOSLIC=20000 ;A 1 IF SLICE LEVEL IS 1, OTHERWISE 0.\r
+HASMT=40000 ;IF A 1, THIS JOB HAS THE MAG TAPE CONTROL\r
+IOREW=400000 ;A 1 IF UNIT IS REWINDING AND ANOTHER OPERATIONS\r
;IS ATTEMPTED ON SAME UNIT. MUST BE SIGN BIT.\r
\r
+\r
EXTERNAL ADVBFF,ADVBFE,DCREQ,MTCSAV,SETACT,CLRACT,ORACT,GETDCMT\r
EXTERNAL MTCRET, DCAVAL, MTAVAL, MTCCHN, MTREQ\r
EXTERNAL MTWAIT,OUT,SETIOD,CLOCK,HNGSTP,MTSIZ\r
MTIDSP: JRST MTPDUN\r
\r
>\r
-\f;LOGICAL EBND OF TAPE LOOP\r
+\f\r
+;LOGICAL END OF TAPE LOOP\r
MTLEOT: MOVEI T,7 ;BACKSPACE\r
PUSHJ PDP,MTAPE2\r
PUSHJ PDP,MTCHK2 ;CALL INTERLOCK, PICKUP IOS\r
MOVEI T,2400 ;READ COMMAND\r
JRST MTDMP1 ;DUMP\r
;ADDRESS ERROR\r
+\r
MTDMP2: PUSHJ PDP,MTEND1\r
JRST ADRERR\r
\r
+\r
END\r
\f\r
-\0
\ No newline at end of file