.TITLE *** OFF TDV OVERLAY *** / / COPYRIGHT (C) 1976 / DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. / / THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY / ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH / THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS / SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PRO- / VIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON / EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO / THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE / SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. / / THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE / WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COM- / MITMENT BY DIGITAL EQUIPMENT CORPORATION. / / DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY / OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY / DEC. / .EJECT / / EDIT 001 12-APR-76 (SCR) CREATE OFF FROM ASSIGN / EDIT 002 13-APR-76 (SCR) MINOR CLEANUP / EDIT 003 13-APR-76 (SCR) NONE TO NONE;TAKE OUT MA.NUS;TIME FIX / EDIT 004 13-APR-76 (SCR) FIX UP 003 / EDIT 005 13-APR-76 (SCR) REARRANGE ORDER OF WORK / EDIT 006 14-APR-76 (SCR) REMOVE I/O BUSY MESSAGE / EDIT 007 24-MAY-76 (SCR) HANDLER NOT IN CORE MESSAGE NOT FATAL / EDIT 008 2-JUNE-76 (SCR) MISSING .INH, BT.USR / 009 14-JUL-76 (RCHM) LAS, FINAL , ONCE AND FOR ALL /(009) / FIX FOR THE LOUSY BATCH DEVICE /(009) / DEASSIGNMENT. /(009) / EDIT 010 20 FEB 78 (PDH) REQUEST TASK 'OFF.NN' FOR /(010) / CONNECT TIME DETERMINATION /(010) / 22 FEB 78 (PDH) TURN ON CORRECT BIT IN MA.LBM /(010) / WHEN DOING BOOKKEEPING /(010) / / OVERLAY NAME "OFF..." TO LOG OFF A MULTI-ACCESS USER / / NOT TO BE CONFUSED WITH A COMERCIALLY AVAILABLE BUG / REPELLANT - N,N DIMETHYL METATOLUAMIDE - OF THE SAME NAME. / / NOTE, IN CASE OF A 'FATAL' ERROR, NO MODIFICATION IS MADE TO / THE UCA, SO THAT THE POLLER WILL CALL US AGAIN THE NEXT TIME / HE COMES AROUND. IN CASE OF A REASSIGN INHIBITED OR OUT OF POOL / I BELIEVE THIS IS THE CORRECT THING TO HAPPEN. / / / MA.BLU=224 /(010) MCRRI=171 HH=165 MM=164 CURTSK=135 TTMCTT=200 TTDVTT=201 ECLA=641000 .INH=705522 .ENB=705521 LUN1=142 LUN2=143 LUFD1=304 DUFD1=306 AFTP1=144 FAC=174 IDX=ISZ PENP=115 R1=101 R2=102 SPRI=126 X10=10 PDVL=252 .IFUND MA.NLU /# OF MAPPED LUNS PER USER MA.NLU=31 .ENDC / / / MACRO TO DEFINE OFFSETS INTO THE USER CONTEXT AREA. / .DEFIN UCAOFF U.JSW=0 /OFFSET TO JOB STATUS WORD. U.MAEV=1 /OFFSET TO EVENT VARIABLE U.MAMTE=2 /OFFSET TO MARK TIME EVENT VARIABLE. U.OEV=3 /OFFSET TO OVERLAY EVENT VARIABLE. U.DSK=4 /OFFSET TO DISK NAME U.DUN=5 /OFFSET TO DISK UNIT NUMBER U.UFD=6 /OFFSET TO UFD NAME. U.CTSK=7 /OFFSET TO CURRENT TASK NAME U.PSC=11 /OFFSET TO PARTITION SELECTION CRITERIA. U.ULOF=14 /OFFSET TO USER NUMBER AND LUN OFFSET. U.TTYN=15 /OFFSET TO USER TERMINAL NUMBER. U.TB=16 /OFFSET TO USER TERMINAL BUFFER. U.CPB=62 /OFFSET TO MULTI-ACCESS CPB. U.SSM=74 /SECONDS SINCE MIDNIGHT INTO STATE 11 / OR 12 (HUNG ON PARTITION) U.TW=75 /TOTAL TIME IN SECONDS SPENT IN STATE 11 / OR 12. U.OVID=76 /OVERLAY IDENTIFIER (LAST OVERLAY CALLED) U.CKS=77 /CHECKSUM OF INPUT BUFFER FOR TIMED READ. U.LEN=100 /LENGTH OF UCA. .DEFIN UCAOFF .ENDM .ENDM / UCAOFF / .GLOBL LOGOFF,TDVTYP,MA.LBM,MA.USR,TTY.UC,BT.USR / LOGOFF 0 /CALL WITH UCA ADDRESS IN AC DAC TEMP /HOLD LAC (LUNTAB /SET UP LAST POINTER DAC LASTUN /CALL WITH ONE LUN AT A TIME AND (70000 /CONSTRUCT PAGE OFFSET DAC MXADJ /PAGE ADJUST XR BACK TO AC CMA!IAC DAC XADJ /PAGE ADJUST AC TO XR TAD TEMP /ADJUSTED UCA ADDRESS PAX /STAYS IN XR DAC UCAXR /WELL, AT LEAST MOST OF TIME, SAVE IT LAC U.ULOF,X /USER # IN RIGHT HALF, LUN OFFSET IN LEFT HALF SWHA /(010) AND (777 / GET LUN OFFSET /(010) DAC OFFSET /(010) AAC -1 /OFF BY ONE MAGIC FOR LUT TABLE TAD* (LUN1 /LUT TABLE ADDR DAC LUNTAB /LOWEST # TO BE ASSIGNED NONE LAC U.TTYN,X /TELETYPE NUMBER DAC TTYNUM /(002) LRSS 3 /(010) ALSS 3 / CONVERT TTY NUMBER TO /(010) LLSS 3 / .SIXBT '.NN' /(010) XOR (566060 /(010) DAC REQ+3 /(010) CAL REQ / REQUEST APPROPRIATE 'OFF.NN' /(010) / / ASSIGN USER'S MAPPED LUN'S (XCPT 1) TO NONE / / EDIT 005, DO THIS BEFORE TDV... BOOKKEEPING / DZM UNIT /NEW UNIT # IS ZERO FOR NONE DZM UFDNAM /NEW UFD NAME IS ZERO FOR NONE LAC (56 /NEW DEV IS NUL + . IN SIXBIT DAC REQNAM LAW -MA.NLU+1 /LOOP CONTROL (#1 NOT DONE) DAC COUNTR /ASSIGN EVERYONE BACK TO NONE OFFLOO LAC LASTUN /ENDING LUN DAC LUNADR /MAKE IT ALSO THE FIRST ONE JMS ASGWRK /ACTUAL ASSIGNMENT WORK ISZ LUNTAB /TO NEXT LUT ENTRY ADDREESS ISZ COUNTR /MORE? JMP OFFLOO / / IF GOT HERE OK, SEND THE ENDING MESSAGE / LAC* (HH /(003)SET TIME IN MESSAGE JMS DIV10 /(003)DECIMAL #'S IN AC RTL /(003)7,7,4 POSITION IN WORD TAD (301407 /(003)MAKE HH: DAC HOURS /(003) INTO MES1 LAC* (MM /(003)AND THE MINUTES READING JMS DIV10 /(003) RAR /(003)3,7,7,1 POSITION IN WORD TAD (230140 /(003)MAKE :MM DAC MINUTE /(003)PLACE INTO MESSAGE / / SEND OUT EXIT MESSAGE / LAC (MES1 /(002) JMS OUTMES /(002) / LAC TTYNUM /(002)TTY NUMBER INDEX PAX / / BOOKKEEPING IN TDV... / JMS MASK /TELETYPE MASK IN AC PAL /(008) SAVE MASK AND* MA.USR /TURN OFF TELETYPE ACTIVE BIT DAC* MA.USR PLA /(008) AND IN OTHER WORD AND* BT.USR /(008) DAC* BT.USR /(008) LAW -1 /-1 TO SET IN TTY.UC TABLE DAC* TTY.UC,X /INDEXED BY TTY NUMBER LAC* (MA.BLU / GENERATE LUN BLOCK NUMBER /(010) TCA / FROM BASE OF VIRTUAL LUNS /(010) TAD OFFSET / AND LUN OFFSET AS SPECIFIED /(010) CLL / IN THE UCA /(010) IDIV; MA.NLU-1 /(010) LACQ / NOW HAVE LUN BLOCK NUMBER /(010) JMS MASK /MASK IN AC CMA /BUT TURN ON, NOT OFF XOR* MA.LBM DAC* MA.LBM LAC UCAXR /SET TO CLEAR ENTIRE UCA PAX /WITH XR LOOPS AAC U.LEN /SIZE OF CONTEXT AREA PAL CLEARL DZM 0,X AXS 1 JMP CLEARL / / DONE LAC MESSET /MESSAGE TO RETURN SZA /SKIP IF ALREADY DONE TYPMSG JMS OUTMES /RETURN MESSAGE LAC UCAXR /RESTORE XR TO POINT TO AREA PAX LAC STATUS /STATUS FROM MESSAGE HEADER DAC U.OEV,X /OVERLAY STATUS JMP* LOGOFF /OUT / / / SUBROUTINE SETXR -- ADJUST THE XR / SETXR 0 TAD XADJ PAX JMP* SETXR / / / SUBROUTINE OUTMES / / CALL TDV MESSAGE SENDER / / ENTER WITH THE ADDRESS OF THE MESSAGE IN THE AC / / ALSO UPDATE STATUS WITH # IN MESSAGE+1 / OUTMES 0 DAC MESSET /ADDR IN AC JMS* TDVTYP / LAC TTYNUM / EXECUTED FROM TDVTYP LAC MESSET / " LAC (2 / " ISZ MESSET /PICK UP STATUS LAC* MESSET / DAC STATUS / TO PLACE UPON EXIT DZM MESSET /DON'T SEND TWICE JMP* OUTMES / / SUBROUTINE MASK / / CALL WITH # IN AC / / RETURN WITH MASK TO CLEAR THAT BIT, IN AC / / I.E. 0 RETURNS 377777; 1 RETURNS 577777; ETC. / / LINK IS RETURNED SET. MQ IS DESTROYED / MASK 0 TAD (LRS 0 /MAKE SHIFT INSTRUCTION DAC MASKXX /EXECUTE SHORTLY CLL!CML /SET LINK TO SHIFT IN 1'S LAC (377777 /DEFAULT FOR NUMBER 0 MASKXX HLT JMP* MASK / / SUBROUTINE DIV10 / / TO MAKE UP TWO ASCII CHAR'S FROM # IN AC / # OBTAINED FROM HOURS OR MINUTES IN EXEC TIME / / DIVIDE BY 10(10) AND RETURN REMAINDER*4 / ADDED TO QUOTIENT*512 / / LINK RETURNED CLEAR, MQ DESTROYED / DIV10 0 RTL!CLL /*4 FOR REMAINDER*4 IDIV /IDIV DIVIDES AC BY FOLLOWING WORD 50 /DECIMAL 10, *4 SWHA /GET REMAINDER OUT OF WAY OMQ /OR IN THE QUOTIENT SWHA /WANT QUOTIENT ON TOP JMP* DIV10 / .TITLE *** ASSIGN WORKING ROUTINE *** / / THIS ROUTINE TAKEN FROM ASSIGN, HAS BEEN MODIFIED / FOR OFF. ONLY ONE LUN AT A TIME IS SENT, SO THAT / LUNTAB IS A SINGLE LOCATION, RATHER THAN A BLOCK. / THE NEW DEVICE IS ALWAYS 'NONE'. THE OLD DEVICE / IS THAT FOUND IN THE TABLES. CHANGES MADE FOR OFF / WILL BE FLAGGED WITH /(OFF). / / INPUT ARGUMENTS FOR ASGWRK / LASTUN 0 /POINTER TO LAST OF LIST OF LUT POINTERS LUNADR 0 /POINTER FOR FIRST OF LIST OLDNAM 0 /OLD DEVICE NAME OLDUNT 0 /OLD UNIT NUMBER UNIT 0 /NEW UNIT NUMBER UFDNAM 0 /NEW UFD NAME / / NEW DEVICE NAME IS IN A CAL UNDER NAME 'REQNAM' / THE DEVICE NAME HAS A '.' APPENDED TO IT / LUNTAB 0 /(OFF)LUT ENTRY ADDR / / / WORK REGISTERS FOR ASGWRK / TMPA 0 TMPB 0 TMPC 0 CNT 0 NEWPVD 0 TRGGR 0 / TTA .SIXBT "TT" DSK .SIXBT "DK@" / ASGWRK 0 LAC* LUNADR /PICK UP THE POINTER TO THE PDVL DAC CNT LAC* CNT SNA /SKIP IF NOT NONE JMP* ASGWRK /(OFF)NONE ALREADY, JUST GO BACK / /(OFF) REMOVE CHECKS NOTNON JMS SETXR / USE XR TO CHECK OLD DEV,# LAC 2,X /NAME CHECK DAC OLDNAM /(OFF)FETCH OLD NAME LAC 5,X / NUMBER DAC OLDUNT /(OFF)FETCH OLD UNIT / /(OFF) REMOVE I/O QUEUE BUSY CHECK LAC 10,X /HANDLER INIT'ED SZA / SKIP IF NOT JMP LUNCK / INIT'ED, OK DZM* CNT / CLEAR THE PDVL POINTER IN THE LUT /(009) / TO AVOID LOOPING ON ANY ERROR. /(009) LAC 11,X / CHOICE OF ERRORS SPA / REA. INHIBIT ON? JMP ERR7 /YES -- REA. INHIBITED LAC (MES10 /(007) SEND NOT IN CORE MESSAGE JMS OUTMES /(007) LUNCK=. /(OFF)SECTION NOT NEEDED UPDLUN=. /SPECIAL CASE TTY STULFF NO LONGER NEEDED STORNO CLLR /(OFF)NEW DEVICE LAC (LUNTAB) /SET UP TO INSERT NODE POINTER DAC LUNADR SETUP LAC* LUNADR /PICK UP THE LUNT TABLE POINTER DAC TMPA LAC* (LUN1) TCA DAC TEMP TAD* LUNADR /DETERMINE THIS LUN NUMBER TAD* (AFTP1) /FIND THE AFT TABLE POINTER DAC TMPB LAC TEMP /FIND LUN-UFD POINTER TAD* LUNADR TAD* (LUFD1 DAC TMPC LAC* LUNADR DAC CNT LAC* CNT /POINT TO ASSING INHIBIT FALG AAC 11 DAC CNT / /(002)ELIMINATE FILES OPEN MESSAGE / /(002)HAPPENS OFTEN; OTHER USER'S FILES. .INH /(008) INHIBIT WHILE CLEAR DZM* TMPA /(008) KNOWN TO GO TO NONE DZM* TMPC /(008) KNOWN TO GO TO NONE .ENB /(008) LAC* TMPB /PICK UP THE DEVICE ATTACHED FLAG SNA JMP NOTATT /NOT ATTACHED TO THE DEVICE OK LAC (MES9 /SET UP TO RETURN A MESSAGE JMS OUTMES /(007) OUT MESS NOW NOTATT LAC LUNADR SAD LASTUN JMP REQOK /YES SEARCH FOR CARRTN ISZ LUNADR /NO CHECK NEXT LUN IN TABLE JMP SETUP /NO LOOK UNTIL ARE SET REQOK LAC OLDNAM /IS THE DEV NAME NONE? SNA!CLL JMP* ASGWRK /NO FURTHER WORK FOR NONE LAC* (LUN1) /PICK UP LUN POINTER SKP NXTNOD IAC /CHECK NEXT LUN TAD XADJ /SET UP XR TO LOOK AT LUN SLOTS PAX LAC 0,X /LOOK AT A LUN POINTER AAC 2 /POINT TO PDVL NAME DAC CNT LAC OLDNAM /LOOK FOR A NAME MATCH SAD* CNT JMP* ASGWRK /ASSIGNMENT FOUND DON'T REQUEST HANDLER TO EXIT PXA /CHECK FOR THE END OF THE TABLE TAD MXADJ /SUBTRACT PAGE BITS SAD* (LUN2) /ARE WE AT THE END OF THE TABLE ? SKP JMP NXTNOD /NO TRY ANOTHER ENTRY LAC (400004) /RAISE TO LEVEL 5 TO PREVENT HANDLER ISA /FROM EXITING BEFORE ALL NODES HAVE BEEN FOUND LAC* (PDVL) TAD XADJ /ADD PAGE BITS PAX /SAVE IT IN XR NXTND LAC 2,X /PICK UP THE DEVICE NAME SAD OLDNAM /IS IT THE OLD NAME? SKP /YES SET ASSIGN INHIBIT FLAG JMP NOASGN /NO DON'T FLAG IT PXL /SAVE LAST NODE ADDRESS LAC 11,X /SET REASSIGN INHIBIT FLAG AND (377777) XOR (400000) DAC 11,X /RESTORE WORD LAC 10,X /SAVE TRIGGER EVENT VARIABLE ADDRESS DAC TRGGR DZM 10,X /CLEAR THE TRIGGER EVENT VARIABLE ADDRESS NOASGN LAC 0,X /IS THIS THE END OF THE TABLE? SAD (PDVL) JMP EXNOD /YES EXIT TAD XADJ /ADD PAGE BITS PAX JMP NXTND /SEARCH NEXT NODE EXNOD JMS* (PENP) /PICK UP A NODE FOR 777 REQUEST JMP ERR5 /EMPTY POOL ERROR DAC* (R2) /SAVE NODE ADDRESS FOR SPRI TAD XADJ PAX LAC* (CURTSK) AAC 6 /FIND A GOOD STL NODE ADDRESS DAC CNT LAC* CNT DAC 2,X DZM 3,X /CLEAR UNUSED WORDS DZM 7,X DZM 10,X DZM 11,X LAC (1002) /SET PRIORITY TO 514 DAC 4,X AAC -3 DAC 5,X /SET REQUEST TYPE TO 777 DZM 6,X /CLEAR EVENT VARIABLE ADDRESS PLA /PICK UP LAST NODE FOUND FOR 777 REQUEST TAD MXADJ /SUBTRACT PAGE BITS AAC 6 /POINT TO THE QUEUE DAC* (R1) JMS* (SPRI) /PUT NODE IN REQUEST QUEUE DBK /DEBREAK FORM LEVEL 5 LAC (401000) /SET SIGNIFICANT EVENT ISA .INH /INHIBIT INTERRUPTS LAC* TRGGR /LOOK AT TRIGGER AND (377776) /MASK OFF BITS XOR (400001) /SET Q I/O .ENB /ENABLE INTERRUPTS DAC* TRGGR JMP* ASGWRK /DONE! .TITLE *** STORAGE, CAL'S, MESSAGES, ETC. *** / REQCPB 1 EV REQNAM 0 .SIXBT "..." 0 / REQ 1; 0; .SIXBT 'OFF.NN' ; 0 /(010) WAIT 20 EV / EV 0 / ERR5 LAC (MES5) JMP TYPMSG ERR7 LAC (MES7) JMP TYPMSG ERR10 LAC (MES10 JMP TYPMSG / XADJ 0 MXADJ 0 TEMP 0 UCAXR 0 TTYNUM 0 MESSET 0 OFFSET 0 /(010) COUNTR 0 STATUS 0 / MES1 MES5-MES1/2*1000+2 1 .ASCII " LOGGING OFF MULTI-ACCESS AT "<15> HOURS=MES1+16 MINUTE=MES1+17 MES5 MES7-MES5/2*1000+2 -5 .ASCII "OFF-EMPTY POOL"<15> MES7 MES9-MES7/2*1000+2 -7 .ASCII "OFF-REASSIGN INHIBITED"<15> MES9 MES10-MES9/2*1000+2 11 .ASCII "OFF-ASSIGNED, BUT DEVICE IS ATTACHED"<15> MES10 ENDMSG-MES10/2*1000+2 -12 .ASCII "OFF-OLD DEV NOT YET IN CORE"<15> ENDMSG=. / / .END