software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape3 / CR8E.PA
diff --git a/sw/os8/v3d/sources/system/dectapes/dectape3/CR8E.PA b/sw/os8/v3d/sources/system/dectapes/dectape3/CR8E.PA
new file mode 100644 (file)
index 0000000..3ff9aab
--- /dev/null
@@ -0,0 +1,302 @@
+/3 CARD READER FOR BUILD
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/COPYRIGHT  (C)  1974 BY DIGITAL EQUIPMENT CORPORATION
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
+/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
+/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
+/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
+/
+/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
+/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
+/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
+/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
+/
+/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
+/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
+/DIGITAL.
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+\f      *0
+       -1
+DEVICE CR8E;DEVICE CDR;2030;4000;ZBLOCK 2
+
+       CDRVERSION="C&77
+
+/V3 CHANGES:
+
+/1.    VERSION # IS NOW 1
+/2.    FIXED BUG FOR CARDS WITH ODD NUMBER OF COLUMNS
+/3.    CARD DONE FLAG IS CLEARED AT END
+
+       *200
+
+RCSF=6631
+RCRA=6632
+RCSP=6671
+RCSE=6672
+RCRD=6674
+
+CDR,   CDRVERSION      /ENTRY POINT RELATIVE ZERO
+CDR770,        7700            /"SMA CLA" CLEARS THE AC
+CDRTMP,        0               /LESS THAN 400 - PROTECTS THE "SMA CLA"
+       JMP CDRSET      /INITIALIZATION - BECOMES "RDF"
+       TAD CDRCIF      /FORM "CIF CDF N" TO CALLING FIELDS
+       DCA CDRXIT      /SAVE CALLING FIELDS
+       TAD CDRCCF-1
+       DCA CDRXIT-1    /RESTORE THE "ISZ CDR"
+       TAD I CDR       /GET FUNCTION WORD
+       AND CDR070      /GET BUFFER FIELD BITS
+       TAD CDRCCF      /MAKE A "CDF N"
+       DCA CDBCDF      /SAVE IT IN THE GET CHAR LOOP
+       TAD I CDR       /GET FUNCTION WORD AGAIN
+       ISZ CDR
+       SPA             /IS IT A WRITE FUNCTION?
+       JMP CDRERR      /YES - HARD ERROR
+       AND CDR770      /GET COUNT BITS
+       CIA
+       DCA CDRWC       /SAVE WORD COUNT (DIVIDED BY 2)
+       TAD I CDR       /GET BUFFER ADDRESS
+       DCA CDRCA       /AND SAVE IT
+       ISZ CDR         /THE BLOCK NUMBER IS IGNORED
+CDRCCF,        CDF             /WE ARE IN FIELD 0
+       DCA I CDRIN2    /RESET ^Z FLAG TO ZERO
+CDRLP, JMS I CDRIN4    /GET A CHARACTER
+       DCA CDRTM1      /DATA FIELD STILL ZERO ON RETURN!
+       JMS I CDRIN4    /GET NEXT CHARACTER
+       DCA CDRTMP      /AND SAVE IT
+       JMS I CDRIN4    /GET NEXT CHARACTER
+       RTL
+       RTL             /GET THE FIRST FOUR BITS OF IT
+       DCA CDRTM2      /SAVE THE REST FOR LATER
+       TAD CDRTM2
+       AND CDR740      /ONLY 4 BITS
+       TAD CDRTM1      /ADD THOSE BITS TO THE 1ST CHAR
+CDBCDF,        HLT             /CDF TO BUFFER FIELD
+       DCA I CDRCA     /STORE 1ST CHARACTER
+       ISZ CDRCA       /BUMP POINTER TO BUFFER
+CDR740,        7400            /PROTECT THE ISZ AGAINST SKIPS
+       TAD CDRTM2
+       RTL
+       RTL             /NOW GET LOW ORDER 4 BITS
+       AND CDR7400     /AND ONLY 4 BITS
+       TAD CDRTMP      /ADD IN THE 2ND CHARACTER
+       DCA I CDRCA     /AND STORE THE WORD
+       ISZ CDRCA       /BUMP POINTER AGAIN
+CDR070,        70              /PROTECT THE ISZ
+       CDF 0           /CDRGCH NEEDS 0 DF ON ENTRY!
+       ISZ CDRWC       /DONE?
+       JMP CDRLP       /NO - LOOP
+CDRERR,        ISZ CDR         /HERE WITH NEGATIVE AC ON WRITE - FATAL ERROR
+       ISZ CDR         /IF ^Z THIS IS ZEROED
+CDRXIT,        HLT             /RESTORE CALLING FIELDS
+       JMP I CDR       /EXIT
+
+CDRCA, 0               /BUFFER POINTER
+CDRWC, 0               /WORD COUNT DIVIDED BY 2
+CDRTM1,        0
+CDRTM2,        0               /SPLIT WORD TEMPORARY
+CDRCIF,        CIF CDF 0       /TO FORM EXIT WORD
+
+CDRIN2,        CDRJMP-CDRLOC   /CORRECTED AT INITIALIZATION TIME
+CDRIN4,        CDRGCH-CDRLOC
+
+       0               /** FREE LOCATIONS - COME AND GET 'EM !
+       0
+       IFNZRO  .-277   <RESORC,_ERROR_>        /BUT THERE'S A CATCH
+CDRTBL,        0021;2223;2425;2627;3031;3203;4007;3502
+       2017;6364;6566;6770;7172;7514;0577;3637
+       1552;5354;5556;5760;6162;0104;1211;3374
+       0641;4243;4445;4647;5051;7316;3410;1376
+
+/DO NOT INSERT ANYTHING BETWEEN "CDRTBL" AND "CDRBUF"!!
+
+CDRBUF=.               /CARD BUFFER
+
+CDRSET,        RDF             /INITIALIZATION CODE
+       TAD CDRCCF
+       DCA CDRSE1      /SAVE CALLING FIELDS
+       CDF             /WE ARE IN FIELD 0
+       JMS .           /FIND OUT OUR LOCATION
+CDRLOC,        TAD CDRSE2      /ADDRESS TO MODIFY
+       TAD CDRLOC-1    /CORRECT IT
+       DCA CDRSE3      /SAVE IT
+       TAD I CDRSE3    /GET DATA TO MODIFY
+       TAD CDRLOC-1    /CORRECT IT
+       DCA I CDRSE3    /AND RESTORE IT
+       ISZ CDRLOC      /NEXT ADDRESS
+       ISZ CDRSE4      /MORE?
+       JMP CDRLOC      /YES - LOOP
+       TAD CDRSET
+       DCA CDR+3       /SET THE "RDF"
+CDRSE1,        HLT             /RESTORE CALLING FIELDS
+       JMP CDR+3       /AND BACK TO NORMAL
+
+CDRSE3,        0               /MODIFY POINTER
+CDRSE4,        -5              /FIVE LOCATIONS TO MODIFY
+
+CDRSE2,        CDRIN2-CDRLOC   /LOCATIONS TO MODIFY
+       CDRIN4-CDRLOC
+       CDRIN5-CDRLOC
+       CDRABF-CDRLOC
+       CDRTAD-CDRLOC
+\f*CDRBUF+50            /END OF THE BUFFER
+
+CDRGCH,        0               /GET A CHARACTER ROUTINE - ENTER WITH DF=0
+CDRJMP,        0               /THIS IS "JMP I CDRGCH" AFTER A ^Z
+       ISZ CDRCNT      /MORE CHARACTERS IN THE INTERNAL BUFFER?
+       JMP CDRGET      /YES - GET ONE
+CDRGE4,        ISZ CDRCT2      /GIVE A 215, 212 FOR EVERY CARD
+       JMP CDRCLF      /215, 212 ROUTINE
+       CLL CLA CMA RTL
+       DCA CDRCT2      /RESET COUNT TO -3
+CDRGNC,        TAD CDRABF
+       DCA CDRPT       /SET POINTER TO INTERNAL BUFFER
+CDRGE0,        KSF             /KEYBORAD FLAG UP?
+       JMP CDRGE7      /NO - TRY TO READ A CARD
+       TAD CDR760      /FORCE THE PARITY BIT ON
+       KRS             /READ STATIC FROM KEYBOARD
+       TAD CDR175      /IS IT ^C?
+       SNA
+       JMP I CDR760    /YES - TO MONITOR VIA 07600
+       TAD CDRM27      /IS IT ^Z?
+       SZA CLA
+       JMP CDRGE7      /NO - GET A CARD
+       KCC             /KILL FLAG
+CDRGEZ,        CLA CMA
+       DCA CDRCNT      /RESET COUNTS TO SKIP
+       CLA CMA
+       DCA CDRCT2
+       TAD CDRMOD
+       DCA CDRJMP      /SET TO GIVE 0'S
+       DCA I CDRIN5    /AND A SOFT ERROR
+       TAD CDR232      /^Z
+       JMP I CDRGCH    /EXIT
+
+CDRGE7,        RCSE            /SELECT A CARD
+       JMP CDRGE0      /NO GO - TRY AGAIN
+       DCA CDRSW       /SET PACKING SWITCH
+CDRGCL,        DCA CDRTIM      /INITIALIZE TIMEOUT COUNTER
+CDRGE1,        RCSP            /CARD DONE?
+       JMP CDRGE2      /NO - TRY FOR DATA READY
+       RCRD            /CLEAR CARD DONE FLAG
+CDRGE3,        TAD I CDRPT     /GET LAST TWO CHARACTERS
+       SZA             /BOTH SPACES?
+       JMP CDRGE5      /NO
+       CLA CMA
+       TAD CDRPT
+       DCA CDRPT       /BACK UP POINTER ONE
+       ISZ CDRCNT
+       ISZ CDRCNT      /AND TAKE COUNT DOWN BY 2
+       JMP CDRGE3      /TEST AGAIN OR...
+       JMP CDRGE4      /IF COUNT IS ZERO THE A BLANK CARD
+
+CDRGE5,        AND CDR077      /IS RIGHT HAND CHARACTER A SPACE?
+       SNA CLA
+       ISZ CDRCNT      /YES A SPACE - REDUCE COUNT
+       TAD I CDRPT     /GET LAST NON-SPACE
+       TAD CDR077      /THIS FORMS 7777 IFF WORD CONTAINS "_"
+       AND CDRCNT      /THIS MAINTAINS 7777 IFF CDRCNT IS -1
+       CMA
+       SNA CLA         /ARE BOTH CONDITIONS TRUE?
+       JMP CDRGEZ      /YES - MUST BE END OF FILE
+CDRGE6,        TAD CDR077
+       DCA CDRSW       /SET OFFSET FROM "CDRTBL"
+CDRGET,        ISZ CDRSW       /BUMP OFFSET
+       TAD CDRSW       /OFFSET INTO AC
+       JMS CDRGE8      /GET A CHARACTER
+       TAD CDR240      /MAKE IT ASCII
+CDRMOD,        JMP I CDRGCH
+
+CDRGE8,        0               /GET FROM BUFFER ROUTINE
+       CLL RAR         /DIVIDE BY 2 - AND INTO LINK IS INDICATOR
+       TAD CDRTAD      /ADDRESS OF "CDRTBL"
+       DCA CDRTM3      /SET POINTER
+       TAD I CDRTM3    /GET WORD
+       SZL             /SHIFT?
+       JMP .+4         /NO
+       RTR             /YES
+       RTR
+       RTR
+       AND CDR077      /GET 6 BITS
+       JMP I CDRGE8
+
+CDRGE2,        RCSF            /DATA READY?
+       JMP CDRGEX      /NO - TRY FOR TIME OUT
+       RCRA            /READ ALPHA
+       JMS CDRGE8      /GET TABLE ENTRY
+       ISZ CDRSW       /WHICH SIDE?
+       JMP CDRGE9      /LEFT SIDE
+       TAD I CDRPT
+       DCA I CDRPT     /FORM RIGHT SIDE
+       JMP CDRGCL      /CONTINUE
+
+CDRGE9,        CLL RTL         /SHIFT LEFT
+       RTL
+       RTL
+       ISZ CDRPT       /BUMP POINTER
+       DCA I CDRPT     /STORE LEFT SIDE
+       CLA CLL CMA RAL /-2 V3 FROM SIS BULLETING JAN  73
+       TAD CDRCNT
+       DCA CDRCNT      /COUNT THE CHARACTERS
+       CLA CMA
+       JMP CDRGCL-1    /CONTINUE - SET SWITCH
+\fCDRCLF,       CLA CMA
+       DCA CDRCNT      /SET MAIN COUNT TO SKIP
+       TAD CDRCT2
+       CLL CMA RTL     /ALL THIS DOES IS...
+       TAD CDRCT2      /MAKE A 2 OR -1
+       TAD CDR213      /SO THIS MAKES A 215 OR 212
+       JMP I CDRGCH
+
+CDRGEX,                        /TEST TIME OUT - FIRST DELAY USING CONSTANTS
+CDR760,        7600            /MONITOR ADDRESS
+CDR077,        77              /SIX BIT MASK
+CDRM77,        -7700           /-"_ "
+CDR175,        175
+CDR240,        240             /ASCII SPACE
+CDR213,        213             /215, 212 CORRECTION FACTOR
+CDR232,        232             /ASCII ^Z
+       ISZ CDRTIM      /THIS LOOP TAKES AT LEAST 100MS ON AN 8/E
+       JMP CDRGE1
+       DCA CDRCNT      /CLEAR COUNT IN CASE PARTIAL CARD READ (E.G. JAM)
+       JMP CDRGNC      /TIMED OUT - RESTART CARD
+
+CDRTM3,
+CDRTIM,        0               /TIMEOUT COUNTER
+CDRM27,        -27             /-27-3=-32 ^Z TEST
+CDRCNT,        -1              /MAIN COUNT
+CDRCT2,        -1              /215, 212 COUNT
+CDRPT, 0               /BUFFER POINTER
+CDRSW, 0               /SWITCH
+
+CDRABF,        CDRBUF-1-CDRLOC /MODIFIED LOCATIONS
+CDRTAD,        CDRTBL-CDRLOC
+CDRIN5,        CDRXIT-1-CDRLOC
+       $
+\f