Fixed typos.
[retro-software/dec/tops10/v4.5.git] / src / cdrsr6.mac
diff --git a/src/cdrsr6.mac b/src/cdrsr6.mac
new file mode 100644 (file)
index 0000000..68b70ce
--- /dev/null
@@ -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
+
+\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