/******* MULTI8 VIRTUAL DISK TASK ******* /LAST EDIT: 19-AUG-75, ELC (DEVICE NAME ADDED) /LAST EDIT: 6-AUGUST-75, JV /AUTHOR E.LOPES CARDOZO, PHYSIOLOGY UTRECHT, APRIL 75 / /THIS TASK PERFORMS THE CONVERSION BETWEEN A VIRTUAL DISK /REQUEST AND A TRUE PHYSICAL DISK REQUEST. IT MAY BE CALLED /AS AN ORDINARY BLOCKTRANSFER MODULE (WITHOUT QUEING) /AND WILL TRANSFORM THE CALLERS REQUEST ACCORDING TO THE /DEFINITIONS FOUND IN 'DSKTAB', WHICH SHOULD BE IN MONFLD AND /MUST BE SETUP BY THE POWERUP SEQUENCE. DSKTAB SHOULD CONTAIN /EIGHT ENTRIES OF THREE WORDS EACH DESCRIBING A VIRTUAL DISK /LAYOUT OF EACH ENTRY: / /WORD 0: NAME OF HANDLER TASK /WORD 1: BITS 9-11=PHYSICAL UNIT NUMBER /WORD 2: RELATIVE BLOCK # 0 /WORD 3: LAST BLOCK+1 (PHYSICAL) / /IF THE TRANSFER GOES ACROSS THE BOUNDS OF THE VIRTUAL DISK, /THE TRANSFER IS NOT DONE AND A HARDERR STATUS IS RETURNED. / DKUDTV=ZTEM1 DKUNIT=ZTEM3 "D^100+"K&3777 /TASK NAME IS "DK" 200 /ONE PAGE MODULE /PAGE HEADER: IDKDTV, DKDTV /RELOCATED POINTER TO TRANSFER VECTOR 0 /END OF PAGE HEADER DK, DCA DKUDTV /POINTER TO USERS DTV TAD I ZMYCDF /CDF TO USERS DTV, USED TO INITIALIZE DCA DKCDF /CDF-USER ROUTINE TAD I DKUDTV /FETCH FUNCTION WORD AND C7 /EXTRACT UNIT NUMBER DCA DKUNIT TAD DKUNIT CLL RTL /MULTIPLY BY 4 TAD (DSKTAB /INDEX IN DISK DESCRIPTOR TABLE CDF MONFLD /DSKTAB IS IN MONFLD JMS DEFER /FIRST WORD CONTAINS PHYSICAL UNIT NUMBER SNA /IS THIS UNIT DEFINED ? JMP DKERR /NO, ZERO NAME IS ILLEGAL DCA DKNAME /NAME OF HANDLER TASK ISZ X TAD I X /GET WORD 1 DCA DKDTV /BUILD A NEW DTV, THIS IS THE TRUE UNIT # DKCDF, HLT /CDF TO CALLERS FIELD TAD I DKUDTV /GET REST OF USERS FUNCTION WORD AND C7770 /MASK OF UNIT # TAD DKDTV /GET TRUE UNIT # DCA DKDTV /THIS IS THE FINAL FUNCTION WORD ISZ DKUDTV /BUMP POINTER TO USERS DTV TAD I DKUDTV /GET USERS BUFFER ADDRESS DCA DKDTV+1 ISZ DKUDTV TAD I DKUDTV /GET VIRTUAL BLOCK # CDF MONFLD ISZ X /SELECT OFFSET TAD I X /ADD OFFSET TO OBTAIN PHYSICAL BLOCK # DCA DKDTV+2 /AND STORE IT IN DKDTV TAD DKDTV /NOW CHECK IF WHOLE TRANSFER AND C3700 /IS WITHIN THE RANGE. GET LENGTH SNA AC4000 IFZERO PDPTYP-PDP8E < BSW > IFNZRO PDPTYP-PDP8E < CLL RTR RTR RTR > IAC RAR /MAKE # BLOCKS CLL TAD DKDTV+2 /ADD START BLOCK # CIA ISZ X TAD I X /ADD MAXIMUM ALLOWED DKERR, /LINK=0, WILL ABORT AFTER A WHILE CDTOIF CIF MONFLD /NOW RESERVE A SLOT FOR THE USER TO WAIT JMS I ZRESERV JMS ALARM /HELP, NO MORE SLOTS ! JMS MONITOR /LET CALLER CONTINUE WITH SLOT # IN AC RETURN+CONTINUE DCA DKSLT2 SNL CLA /LINK IS PRESERVED. OVERFLOW ? JMP DKERROR /YES, TRANSFER OUT OF RANGE CDTOIF TAD IDKDTV /GET POINTER TO DKDTV JMS MONITOR CALL /CALL SYSTEM HANDLER DKNAME, "S^100+"Y&3777 JMP .-3 /BUSY ? DCA DKSLT1 JMS MONITOR WAIT DKSLT1, 0 SKP /PASS INTERRUPT AND STATUS TO USER DKERROR,TAD (HRDERR JMS MONITOR SIGNAL HALT CLEAR RELEASE DKSLT2, 0 DKDTV, ZBLOCK 3 /HERE THE TRANSFER VECTOR IS BUILD $