File: FE.TK of Tape: Sources/Multi8/m8-tk-etc-20-10-80
(Source file text)
/FE.TK 12-JUN-80 /**UASEM VERSION** /THIS IS THE EMULATOR FOR FLOPPY DISKS. /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 DEVICE RXA0: AND RXA1: (UNIT 0,1) IT WILL CALL RX /FOR DEVICE RBA0: AND RBA1: (UNIT 2,3) IT WILL CALL RB /IT TAKES THE USERS PARAMETERS FROM HIS DATA-AREA AND /PASSES THE REQUEST ON TO THE FLOPPY DRIVER. *200 FENAME, "F^100+"E&3777 /NAME IS FE 200 /ONE PAGE SHOULD BE SUFFICIENT FELOCK, LOCKS /UNITS LOCK TABLE FEBASE, 0 FE, DCA FEBASE /THIS IS OUR HOLY CUSTOMER TAD FEBASE TAD (UAC DCA FEUAC /MAKE SURE FEUAC NON-ZERO SZL /IS THIS THE END ? JMP FEEXIT /YES, RELEASE THIS TASK TAD I FEUAC /GET HIS ACCUMULATOR (UNIT NUMBER) CLL RTR /IS IT UNIT 2,3? SZL CLA TAD ("R^100+"B&3777 /YES BYTE MODE FLOPPY SNL TAD ("R^100+"X&3777 /NO NORMAL FLOPPY DCA RNAME /USE FOR CALL TO RX OR RB AC0001 /LEFT OR RIGHT FLOPPY AND I FEUAC /UNIT NUMBER AGAIN DCA ZTEM1 /UNIT 0,2 OR 1,3 TAD FEUAC TAD (UDTV-UAC /SAME LITERAL DCA FESLOT /DTV POINTER TAD ZTEM1 /GET UNIT AGAIN TAD FELOCK /INDEX IN LOCK TABLE CDTOIF JMS DEFER //GET TABLE ENTRY SNA //ANY LOCK ACTIVATED ? JMP FEFREE //NO, UNIT WAS FREE YET TAD FEBASE //COMPARE LOCK WITH USER ID SZA CLA //SAME USER ? JMP FEERR //FATAL!, BOTH WANT ACCESS FEFREE, TAD FEBASE //OK CIA // DCA I X //PUT IN MY REQUEST CDF 10 /BACK TO EMULATOR FIELD TAD I FESLOT /GET HIS REQUEST FUNCTION WORD AND C7770 /ZERO THE UNIT NUMBER FIELD TAD ZTEM1 /ADD THE TRUE UNIT NUMBER DCA I FESLOT /THIS IS THE COMPLETED FUNCTION WORD TAD I FESLOT / AND C70 /GET VIRTUAL FIELD NUMBER TAD I FEBASE TAD (-EMULATE+INCORE DCA I FEBASE /MAKE INCORE REQUEST JMS MONITOR SIGNAL BSSLOT TAD FEBASE TAD (USLOT /BS SLOT JMS DEFER DCA .+3 JMS MONITOR WAIT 0 MQL /SAVE REAL FIELD TAD I FESLOT AND (7707 /STRIP VIRTUAL FIELD # MQA /INSERT REAL FIELD # DCA I FESLOT TAD FESLOT /POINTER TO DTV ! JMS MONITOR CALL RNAME, "R^100+"X&3777 /OR "R^100+"B&3777 JMP .-3 /HANG ON DCA FESLOT /THE SLOT WHERE WE WILL GET COMPLETION JMS MONITOR WAIT FESLOT, 0 SZA // TAD (4000 //MAKE A FATAL ERROR (OR NEG LENGTH) CDF 10 /BE SURE ! DCA I FEUAC /PUT THE COMPLETION CODE IN HIS ACCUMULATOR TAD FEBASE TAD (UASEM-1 /SETUP POINTER TO UASEM DCA FESLOT /IN OUR BG TABLE FEASLP, ISZ FESLOT TAD I FESLOT /LOOK AT ENTRY SNA /IS IT FREE ? JMP FEASFR /YES, GO PUT IN MY NAME CIA TAD FENAME /WAS IT ALREADY USED BY ME ? SZA CLA JMP FEASLP /NO, SOME OTHER TASK, LOOK FOR MORE FEASFR, TAD FENAME DCA I FESLOT /OK, PUT MY NAME IN UASEM TABLE SKP FEERR, AC0002 /RETURN SPECIAL OCCUPIED ERROR CODE FERTRN, JMS MONITOR EXIT /NO CLOSE CALL POSSIBLE WITH MULTIPLE DRIVERS! FEEXIT, TAD FELOCK /SET POINTER TO DCA ZTEM1 /LOCK TABLE ACM2 DCA ZTEM2 /SET UNITS COUNTER CDTOIF //LOCKS IN THIS TASK FECLLP, TAD I ZTEM1 //GET A LOCK SNA // JMP FECLNX //IF ZERO GO ON TAD FEBASE //IS IT MY LOCK ? SNA // DCA I ZTEM1 //YES, CLEAR IT SZA CLA //WAS IT ANOTHER USER ? DCA FEUAC //YES, SIGNAL NOT ALL CLEARED (WAS NON-ZERO) FECLNX, ISZ ZTEM1 //NEXT LOCK LOC ISZ ZTEM2 //MORE SLOTS ? JMP FECLLP //YES CDF 10 / TAD FEUAC /ALL LOCKS ZEROED ? SNA CLA / JMP FERTRN /NO, WAIT FOR OTHER RELEASE JMS MONITOR /YES, FORGET EVERYTHING (SWPOUT OR RELEASE) EXIT SWPOUT FEUAC, 1234 /ALWAYS NON-ZERO LOCKS, ZBLOCK 2 PAGE $-$-$