software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape3 / RK8ENS.PA
diff --git a/sw/os8/v3d/sources/system/dectapes/dectape3/RK8ENS.PA b/sw/os8/v3d/sources/system/dectapes/dectape3/RK8ENS.PA
new file mode 100644 (file)
index 0000000..22ba8f4
--- /dev/null
@@ -0,0 +1,245 @@
+/1 RK8E NON-SYSTEM HANDLER FOR OS/8
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/COPYRIGHT  (C)  1974,1975 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.
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+
+/DEC-S8-URK8B-A-LA             HJ
+
+/COPYRIGHT 1973
+
+/DIGITAL EQUIPMENT CORPORATION
+
+/MAYNARD, MASSACHUSETTS   01754
+
+/JANUARY 22, 1973
+\f
+/ONE RK8E IS TREATED AS TWO LOGICAL DISKS
+/EACH OF 3248 OS/8 BLOCKS.
+
+/THIS HANDLER CONTAINS ENTRY POINTS FOR THE 8 LOGICAL UNITS.
+/(RKA0,RKB0,RKA1,RKB1,RKA2,RKB2,RKA3,RKB3)
+
+
+       DCLR=6742
+       DLAG=6743
+       DLDC=6746
+       DRST=6745
+       DSKP=6741
+       DLCA=6744
+       *0
+       -10
+DEVICE RK05;DEVICE RKA0;4230;20;ZBLOCK 2
+DEVICE RK05;DEVICE RKB0;4230;21;ZBLOCK 2
+DEVICE RK05;DEVICE RKA1;4230;22;ZBLOCK 2
+DEVICE RK05;DEVICE RKB1;4230;23;ZBLOCK 2
+DEVICE RK05;DEVICE RKA2;4230;24;ZBLOCK 2
+DEVICE RK05;DEVICE RKB2;4230;25;ZBLOCK 2
+DEVICE RK05;DEVICE RKA3;4230;26;ZBLOCK 2
+DEVICE RK05;DEVICE RKB3;4230;27;ZBLOCK 2
+\f      VERSION="A&77
+
+       *200
+
+/THE FOLLOWING MUST REMAIN HERE BECAUSE OF THE R200 REF.
+R37,   37              /USED TO CHECK FOR CYLINDER CHANGE
+RKEBLK,        0               /12 BITS OF BLOCK NUMBER
+CHKHED,        0               /CHECK HEADER FLAG
+RKEARG,        0               /HOLDS RETURN ADDRESS
+RKENO, 0               /HOLDS ENTRY POINT COUNT
+PAGCNT,        0               /HOLDS REMAINING PAGE COUNT
+RKEISZ,        ISZ RKENO       /TO PUT BACK OVER THE EP ADDR
+
+CTRLC, TAD R200        /TO IGNORE PARITY
+       KRS             /READ THE KEYBOARD
+       TAD R7575       /SUBTRACT ^C
+       SNA CLA
+       KSF             /IS KEYBOARD FLAG UP?
+       JMP RWAIT       /NO
+RCIF,  CDF CIF 0
+       JMP I R7600     /BOOTSTRAP
+
+
+
+
+
+
+/NOTE: A LOCATION CAN BE EEKED OUT BY USING RKA0 BETTER
+RERRCT,        0               /HOLDS RETRY COUNT
+\f      ZBLOCK 220-.    /PAD ENTRY POINTS TO 220
+
+RKA0,  VERSION
+RKB0,  ISZ RKENO       /THE ISZ'S SET UP A COUNT OF
+RKA1,  ISZ RKENO       /OF WHICH ENTRY POINT WE CAME IN
+RKB1,  ISZ RKENO
+RKA2,  ISZ RKENO
+RKB2,  ISZ RKENO
+RKA3,  ISZ RKENO
+RKB3,  ISZ RKENO
+R400,  400             /AN INNOCUOUS AND INSTRUCTION WHICH
+                       /IS REFERENCED BY A TAD.
+       CLA CLL CMA RTL /AC=-3
+       DCA RERRCT      /RETRY 3 TIMES
+       TAD RKENO       /7-EP NUMBER
+       CMA             /EP-8
+       TAD RKETAD      /ADD ON INSTRUCTION
+                       /WHICH REFERENCES THE 400 TO GENERATE A
+                       /TAD CORRECT ENTRY POINT INSTRUCTION.
+       DCA GETENT      /WE EXECUTE TO GET USERS ADDRESS
+       CLA CLL CML RTR /AC=2000
+       TAD GETENT      /GENERATE A DCA INTO ENTRY POINT INSTRUCTION
+       DCA RKECMD      /THIS IS EXECUTED TO REPLACE ISZ RKENO
+       RDF             /GET USERS DATA FIELD
+       TAD RCIF        /BUILD A CIF FOR RETURNING
+       DCA REXIT       /STORE IT INTO THE EXIT CODE
+GETENT,        HLT             /WILL BE A TAD "ENTRY POINT"
+                       /WILL SAVE UNIT INFO HERE FOR ERRORS
+       DCA RKEARG      /SAVE USERS ADDR IN COMMON LOCATION
+       DCA RKENO       /ZERO COUNT FOR NEXT TIME
+       TAD RKEISZ      /GET THE ISZ RKENO
+RKECMD,        HLT             /THE DCA ENTRY POINT IS PUT HERE
+                       /AND THIS LOCATION IS USED FOR THE RK8E COMMAND
+\f
+
+RETRY, TAD RKEARG      /AC=-2 IF ERROR RETRY
+       DCA RKEARG
+       TAD GETENT
+       AND R6          /GET THE UNIT NUMBER
+       DCA RKECMD      /SET UP UNIT FOR COMMAND 
+       TAD GETENT
+       RAR             /PUT HI/LOW LOGICAL DISK BIT IN LINK
+       SZL CLA
+       TAD R6260       /DISPLACEMENT TO 2ND HALF OF DISK
+       DCA RKA0        /NICE PLACE FOR A CONSTANT
+       TAD I RKEARG    /GET ARG1
+       AND R4070       /GET R/W AND DF BITS
+       TAD RKECMD      /GET UNIT NUMBER
+       DCA RKECMD      /BASE COMMAND TO RK8E(DLDC)
+       TAD I RKEARG    /GET ARG1 AGAIN
+       TAD I RKEARG    /GET ARG1 AGAIN
+       ISZ RKEARG      /POINT TO ARG2
+       AND R7600
+       CIA             /TO MAKE 0 LOOK LIKE 40 PAGES
+       DCA PAGCNT      /SAVE PAGE COUNT
+       TAD I RKEARG    /GET ARG2
+       ISZ RKEARG      /POINT TO ARG3
+       DLCA            /LOAD CURRENT ADDRESS REGISTER
+\f
+       TAD I RKEARG    /GET ARG3
+       CLL     
+       TAD RKA0        /SYS OR RKB0 DISPLACMENT
+       DCA RKEBLK      /LOW PART OF RK8E BLOCK NUMBER
+       SZL             /STILL OFF IF BELOW BLOCK 10000
+OVRFLO,        ISZ RKECMD      /TURN ON EXTENDED BIT IF OVERFLOWED
+RELOOP,        DCA CHKHED      /SET CHECK HEADER FLAG TO EITHER
+                       /0 OR 4000(WHICH GETS RTR'D BEFORE USED)
+                       /AND CAUSES EITHER A "DATA" OR "ALL"
+                       /TRANSFER
+       DCLR            /CLEAR STATUS REGISTER
+       TAD PAGCNT      /TEST TO SEE IF ONLY 1 PAGE WANTED
+       TAD R200
+       SNA CLA
+RKETAD,        TAD R400        /7600 WAS IN PAGCNT
+       TAD CHKHED      /ADD IN CHECK HEADER FLAG
+       CLL RTR         /SHIFT TO CORRECT BITS
+       TAD RKECMD      /ADD IN BASE COMMAND
+       DLDC            /LOAD COMMAND REGISTER
+       TAD RKEBLK
+       DLAG            /LOAD BLOCK REGISTER AND GO
+RWAIT, DSKP            /WAIT ON FLAG
+       JMP CTRLC       /CHECK FOR CONTROL C WHILE WAITING
+       DRST            /READ COMPLETION REGISTER
+       CLL RAL         /GET RID OF SUCCESS BIT
+       SZA             /AND SEE IF ANYTHING LEFT
+       JMP RERROR      /AN ERROR
+
+/IF THERE WAS NO ERROR L=1 BECAUSE DONE FLAG
+       TAD PAGCNT      /CHECK TO SEE IF DONE
+       TAD R400        /ADD 2 PAGES ONTO TOTAL
+       SNL
+       JMP RKDONE      /NO MORE TO DO
+       DCA PAGCNT      /SAVE FOR NEXT TIME
+       TAD RKEBLK
+       CMA
+
+/THE R37 MUST REMAIN AT 200 SO THE FOLLOWING IS A 200
+R200,  AND R37         /IF BLOCK IS AT A 37 MAKE
+                       /NEXT OPERATION DO A CHECK HEADER
+       SZA CLA
+       STL RAR         /SET AC TO "ALL" FLAG
+       ISZ RKEBLK      /BUMP BLOCK NUMBER
+       JMP RELOOP      /TRANSFER SOME MORE
+       JMP OVRFLO      /PAST BLOCK 7777-SET EXTENDED BIT
+\f
+RERROR,        AND R1002       /AC WAS RAL'D AND WE WANT TO SEE IF
+                       /DRIVE SEEK FAILED OR CYLINDER ADDR ERROR
+       SNA CLA
+       JMP RKTST3      /WE TRY 3 TIMES
+/WE HAVE TO RECALIBRATE DRIVE
+       DCLR            /CLEAR STAUS REGISTER
+       STL RTL         /AC=2
+       DCLR            /RECALIBRATE DRIVE
+       DSKP            /WAIT ON FLAG
+       JMP .-1
+       DCLR            /CLEAR STATUS REGISTER
+       DRST            /WAIT FOR STATUS TO CLEAR
+       SZA CLA
+       JMP .-2         /STILL DOING RECALIBRATE
+RKTST3,        CLA CLL CMA RAL /AC=-2
+       ISZ RERRCT      /SKIP IF WE TRIED 3 TIMES
+       JMP RETRY       /TRY AGAIN
+       JMP .+3         /ERROR EXIT
+RKDONE,        ISZ RKEARG      /NORMAL RETURN
+R7600, 7600            /GROUP 2 CLA
+       ISZ RKEARG      /IF JUMPED TO HERE- ERROR RETURN
+REXIT, HLT             /RESET USERS INST FIELD- WE NEVER TOUCHED DF
+       JMP I RKEARG    /EXIT
+
+R6260, 6260            /SIZE OF ONE LOGICAL DISK
+R4070, 4070            /USED TO GET READ/WRITE AND DF BITS
+R1002, 1002            / " TO CHECK FOR RECALIBRATE ERRORS
+R6,    6               /TO PEEL OUT UNIT NUMBER
+R7575, 7575            /- ^C CONSTANT
+
+
+       $$$$
+\f