File: KE.TK of Disk: Disks/MyPDP/m8-blue-rka1-rkb1
(Source file text)
/KE.TK 12-JUN-80 /**UASEM VERSION** /THIS IS THE EMULATOR FOR THE CARDREADER BLOCKDRIVER /WVDM OR THE - MARK SENSE - /THIS TASK IS CALLED THROUGH THE FAKE-HANDLER MECHANISM. /FOR DEVICE CDR: /IT TAKES THE USERS PARAMETERS FROM HIS DATA-AREA AND /PASSES THE REQUEST ON TO KR, THE CARDREADER BLOCKDRIVER /OR - MR - - MARK SENSE - IFDEF CR8E < CNAME="K^100+"R&3777 /CALL DIFFERENT DRIVERS > IFDEF CM8E < CNAME="M^100+"R&3777 /FOR DIFFERENT HARDWARE > / *200 KENAME, "K^100+"E&3777 /NAME IS KE 200 /ONE PAGE SHOULD BE SUFFICIENT KELOCK, LOCKS /UNITS LOCK TABLE KEBASE, 0 KE, DCA KEBASE /THIS IS OUR HOLY CUSTOMER TAD KEBASE TAD (UAC DCA KEUAC /MAKE SURE KEUAC NON-ZERO SZL /IS THIS THE END ? JMP KEEXIT /YES, RELEASE THIS TASK / TAD C7 / / AND I KEUAC /UNIT NUMBER DCA ZTEM1 /UNIT 0 ONLY TAD KEUAC TAD (UDTV-UAC /SAME LITERAL DCA KESLOT /DTV POINTER TAD ZTEM1 /GET UNIT AGAIN TAD KELOCK /INDEX IN LOCK TABLE CDTOIF JMS DEFER //GET TABLE ENTRY SNA //ANY LOCK ACTIVATED ? JMP KEFREE //NO, UNIT WAS FREE YET TAD KEBASE //COMPARE LOCK WITH USER ID SZA CLA //SAME USER ? JMP KEERR //FATAL!, BOTH WANT ACCESS KEFREE, TAD KEBASE //OK CIA // DCA I X //PUT IN MY REQUEST CDF 10 /BACK TO EMULATOR FIELD TAD I KESLOT /GET HIS REQUEST FUNCTION WORD AND C7770 /ZERO THE UNIT NUMBER FIELD TAD ZTEM1 /ADD THE TRUE UNIT NUMBER DCA I KESLOT /THIS IS THE COMPLETED FUNCTION WORD TAD I KESLOT / AND C70 /GET VIRTUAL FIELD NUMBER TAD I KEBASE TAD (-EMULATE+INCORE DCA I KEBASE /MAKE INCORE REQUEST JMS MONITOR SIGNAL BSSLOT TAD KEBASE TAD (USLOT /BS SLOT JMS DEFER DCA .+3 JMS MONITOR WAIT 0 MQL /SAVE REAL FIELD TAD I KESLOT AND (7707 /STRIP VIRTUAL FIELD # MQA /INSERT REAL FIELD # DCA I KESLOT TAD KESLOT /POINTER TO DTV ! JMS MONITOR CALL RNAME, CNAME /SOME CARD READER JMP .-3 /HANG ON DCA KESLOT /THE SLOT WHERE WE WILL GET COMPLETION JMS MONITOR WAIT KESLOT, 0 DCA ZTEM1 TAD ZTEM1 TAD (-4 SNA CLA /FATAL ERROR ? AC4000 /YES, SET BIT 0 TAD ZTEM1 CDF 10 /BE SURE ! DCA I KEUAC /PUT THE COMPLETION CODE IN HIS ACCUMULATOR TAD KEBASE TAD (UASEM-1 /SETUP POINTER TO UASEM DCA KESLOT /IN OUR BG TABLE KEASLP, ISZ KESLOT TAD I KESLOT /LOOK AT ENTRY SNA /IS IT FREE ? JMP KEASFR /YES, GO PUT IN MY NAME CIA TAD KENAME /WAS IT ALREADY USED BY ME ? SZA CLA JMP KEASLP /NO, SOME OTHER TASK, LOOK FOR MORE KEASFR, TAD KENAME DCA I KESLOT /OK, PUT MY NAME IN UASEM TABLE TAD ZTEM1 /GET COMPLETION CODE SZA CLA /END-OF-FILE ? JMP KEEXIT /YES, CLEAR UP SKP KEERR, AC0002 /RETURN SPECIAL BUSY CODE KERTRN, JMS MONITOR EXIT KEEXIT, TAD KELOCK /SET POINTER TO DCA ZTEM1 /LOCK TABLE ACM1 / DCA ZTEM2 /SET UNITS COUNTER CDTOIF //LOCKS IN THIS TASK KECLLP, TAD I ZTEM1 //GET A LOCK SNA // JMP KECLNX //IF ZERO GO ON TAD KEBASE //IS IT MY LOCK ? SNA // DCA I ZTEM1 //YES, CLEAR IT SZA CLA //WAS IT ANOTHER USER ? DCA KEUAC //YES, SIGNAL NOT ALL CLEARED (WAS NON-ZERO) KECLNX, ISZ ZTEM1 //NEXT LOCK LOC ISZ ZTEM2 //MORE SLOTS ? JMP KECLLP //YES CDF 10 / TAD KEUAC /ALL LOCKS ZEROED ? SNA CLA / JMP KERTRN /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 SWPOUT KEUAC, 1234 /ALWAYS NON-ZERO LOCKS, ZBLOCK 1 PAGE $-$-$