File DK.TK

Directory of image this file is from
This file as a plain text file

/******* 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 $



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search