Cleanup more typos.
[retro-software/dec/tops10/v4.5.git] / src / cdrsr6.mac
index 68b70ce..bc5cc0a 100644 (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
-
-\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