File: DS.TK of Disk: Disks/MyPDP/m8-blue-rka1-rkb1
(Source file text)
/DS.TK 16-JUN-80 /**UASEM VERSION** /THIS TASK MAKES ACCESSIBLE THE DISK PACKS IN DRIVES /1, 2 AND 3 ON A MULTI-PLATTER SYSTEM FOR READ AND WRITE TRANFERS. /THESE DEVICES ARE USED MORE OR LESS AS THE DECTAPES ARE, WITH /THE MAIN DIFFERENCE BEING THAT ONLY ONE USER AT A TIME /MAY ACCESS EACH DISK TO PREVENT DIRECTORY PROBLEMS. / / /THIS TASK IS CALLED THROUGH THE FAKE-HANDLER MECHANISM. /FOR DEVICES RKB0,RKA1,...,RKB3 IF PRESENT IN YOUR OS/8 SYSTEM /OR DEVICES RL0B,RLA1,...,RL3B IF THE SYSTEM HANDLER IS RL /IT TAKES THE USERS PARAMETERS FROM HIS DATA-AREA AND /PASSES THE REQUEST ON TO THE SYSTEM DRIVER. / *200 DSNAME, "D^100+"S&3777 /NAME IS DS 200 /ONE PAGE SHOULD BE SUFFICIENT DSLOCK, LOCKS /UNITS LOCK TABLE DSBASE, 0 DS, DCA DSBASE /THIS IS OUR HOLY CUSTOMER TAD DSBASE TAD (UAC DCA DSUAC /MAKE SURE DSUAC NON-ZERO SZL /IS THIS THE END ? JMP DSEXIT /YES, RELEASE THIS TASK TAD C7 / AND I DSUAC /UNIT NUMBER DCA ZTEM1 /UNIT 0-7 TAD DSUAC TAD (UDTV-UAC /SAME LITERAL DCA DSSLOT /DTV POINTER TAD ZTEM1 /GET UNIT AGAIN TAD DSLOCK /INDEX IN LOCK TABLE CDTOIF JMS DEFER //GET TABLE ENTRY SNA //ANY LOCK ACTIVATED ? JMP DSFREE //NO, UNIT WAS FREE YET TAD DSBASE //COMPARE LOCK WITH USER ID SZA CLA //SAME USER ? JMP DSERR //FATAL!, BOTH WANT ACCESS DSFREE, TAD DSBASE //OK CIA // DCA I X //PUT IN MY REQUEST CDF 10 /BACK TO EMULATOR FIELD TAD I DSSLOT /GET HIS REQUEST FUNCTION WORD AND C7770 /ZERO THE UNIT NUMBER FIELD TAD ZTEM1 /ADD THE TRUE UNIT NUMBER DCA I DSSLOT /THIS IS THE COMPLETED FUNCTION WORD TAD I DSSLOT / AND C70 /GET VIRTUAL FIELD NUMBER TAD I DSBASE TAD (-EMULATE+INCORE DCA I DSBASE /MAKE INCORE REQUEST JMS MONITOR SIGNAL BSSLOT TAD DSBASE TAD (USLOT /BS SLOT JMS DEFER DCA .+3 JMS MONITOR WAIT 0 MQL /SAVE REAL FIELD TAD I DSSLOT AND (7707 /STRIP VIRTUAL FIELD # MQA /INSERT REAL FIELD # DCA I DSSLOT TAD DSSLOT /POINTER TO DTV ! JMS MONITOR CALL RNAME, "S^100+"Y&3777 /THE SYSTEM DRIVER JMP .-3 /HANG ON DCA DSSLOT /THE SLOT WHERE WE WILL GET COMPLETION JMS MONITOR WAIT DSSLOT, 0 SZA // AC4000 //MAKE A FATAL ERROR CDF 10 /BE SURE ! DCA I DSUAC /PUT THE COMPLETION CODE IN HIS ACCUMULATOR TAD DSBASE TAD (UASEM-1 /SETUP POINTER TO UASEM DCA DSSLOT /IN OUR BG TABLE DSASLP, ISZ DSSLOT TAD I DSSLOT /LOOK AT ENTRY SNA /IS IT FREE ? JMP DSASFR /YES, GO PUT IN MY NAME CIA TAD DSNAME /WAS IT ALREADY USED BY ME ? SZA CLA JMP DSASLP /NO, SOME OTHER TASK, LOOK FOR MORE DSASFR, TAD DSNAME DCA I DSSLOT /OK, PUT MY NAME IN UASEM TABLE SKP DSERR, AC0002 /RETURN SPECIAL BUSY CODE DSRTRN, JMS MONITOR EXIT DSEXIT, TAD DSLOCK /SET POINTER TO DCA ZTEM1 /LOCK TABLE TAD M10 / DCA ZTEM2 /SET UNITS COUNTER CDTOIF //LOCKS IN THIS TASK DSCLLP, TAD I ZTEM1 //GET A LOCK SNA // JMP DSCLNX //IF ZERO GO ON TAD DSBASE //IS IT MY LOCK ? SNA // DCA I ZTEM1 //YES, CLEAR IT SZA CLA //WAS IT ANOTHER USER ? DCA DSUAC //YES, SIGNAL NOT ALL CLEARED (WAS NON-ZERO) DSCLNX, ISZ ZTEM1 //NEXT LOCK LOC ISZ ZTEM2 //MORE SLOTS ? JMP DSCLLP //YES CDF 10 / TAD DSUAC /ALL LOCKS ZEROED ? SNA CLA / JMP DSRTRN /NO, WAIT FOR OTHER RELEASE TAD RNAME /GET NAME OF HANDLER USED DCA RRNAME /STORE FOR CLOSE JMS MONITOR /CLOSE CALL TO DRIVER CALL RRNAME, 0 NOP /QUITE UNLIKELY CLA /MOST PROBABLY HE RETURNS -1 JMS MONITOR /YES, FORGET EVERYTHING (SWPOUT OR RELEASE) EXIT RELEASE DSUAC, 1234 /ALWAYS NON-ZERO LOCKS, ZBLOCK 10 PAGE $-$-$