File DT.TK

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

/LAST EDIT 1-OCTOBER-75, ES
/LAST EDIT 11-OKTOBER-74, ELC
/DECTAPE BLOCK DRIVER

/NAME:	"D^100+"T&3777   DT
/LENGTH: ONE PAGE
/FUNCTION:TO HANDLE DECTAPE TRANSFERS. IT CAN DO A 
/	SEARCH-ONLY AND A SEARCH-AND-TRANSFER.
/	THE DECTAPE DATATRANSFER VECTOR RESEMBLES
/	THAT OF OS8 EXCEPT FOR THE UNIT NUMBER  AND
/	THE MEANING OF THE LINK TO SAY IN WHICH
/	DIRECTION TO START SEARCHING.
/CONCEPT: BLOCK TRANSFERS TO AND FROM DECTAPE ARE
/	PRESUMABLY VERY COMMON IN BOTH FOREGROUND AND
/	BACKGROUND. THE MASS-STORAGE HANDLER HAS TO RE-
/	SEMBLE OTHER MASS-STORAGE HANDLERS FOR COMPATI-
/	BILITY, AND THIS IS TRUE FOR THE SYSTEM BLOCKDRIVER
/	THERE IS ONE DISTINCT EXCEPTION: WHEN A TRANSFER
/	LENGTH IS SPECIFIED OF 00 BLOCKS THEN THE DISK
/	WILL DO A FULL 20, BUT THIS MODULE USES THIS
/	SIGNAL TO DO A SEARCH-ONLY. THUS MAX TRANSFERLENGTH
/	IS 37 PAGES OR 17 AND A HALF BLOCKS.
/	THE MODULE WORKS 'CONNECTED' TO THE INTERRUPT:
/	AN INTERRUPT JUMPS INTO 'DTINT' WITH A VERY SHORT
/	DELAY IN BETWEEN. HERE IT STARTS DOING A SEARCH, AND
/	WHEN THE PAGECOUNTER (NEG.) OVERFLOWS, THE TRANSFER
/	IS READY. WHEN IT FLOWS OVER THE VERY FIRST TIME
/	THEN THE MODULE HAS DONE A SERACH-ONLY.
/ERRORS:WHEN AC UNEQ 0 THERE CAN BE A NUMBER OF DECTAPE ERRORS
/	HAVING CAUSED IT.  TIMING ERRORS IN THE SENSE THAT
/	THE INTERRUPT HAS NOT RESPONDED FAST ENOUGH CAN ALSO
/	OCCUR.
/THIS TASK PERFORMS THE TRANSFER 3 TIMES  MAX. IF
/AN ERROR OCCURS.
/CALL:
/AGAIN,	CDF FIELD OF DTV
/	TAD (POINTER TO DTV
/	JMS MONITOR
/	   CALL
/	   "D^100+"T&3777	/DT
/	 JMP AGAIN	/BUSY RETURN;AC UNCHANGED
/			/ONE CAN BETTER WAIT A FEW SECS.
/	DCA SLOT	/RETURNS WITH SLOT# IN AC
/	JMS MONITOR	/WAIT FOR COMPLETION OR ERROR
/	   WAIT
/SLOT,	   0
/	SZA CLA		/ERROR?
/	ETC.
/


/FORMAT OF DATATRANSFER VECTOR:
/DTV,	RLL.LLL.FFF.UUU	/READ/WRITE;LENGTH(PAGES);FIELD;UNIT
/	BUFFER ADDRESS IN CORE
/	BLOCK# ON DECTAPE


/NOTE THAT THE DECTAPE IS A LITTLE BIT TROUBLESOME
/WITH ITS ERRORFLAG: THIS FLAG CN COME UP
/SPONTANEOUSLY  WHEN A SELECT ERROR OCCURS WHEN
/ONE OF THE UNITS IS SELECTED. THE SKIPCHAIN WOULD
/THEN RUN INTO A FLAG THAT COULD NOT BE CLEARED.
/SO ITS DTSF INSTRUCTION MUST BE REMOVED FROM THE SKIPCHAIN.

/DECTAPE IOT DEFINITIONS: DTSF=6771 DTRA=6761 DTXA=6764 DTCA=6762 DTLA=6766 DTRB=6772 DTLB=6774 DTTRY, "D^100+"T&3777 /NAME DT , -NUMBER OF TRIES 200+1 /ONE PAGE , ONE CONNECT CDTA, DTA /CONNECT DEVICE DTA IN THE SKIPCHAIN DTINT /SO IT JUMPS TO 'DTINT' AFTER INTERRUPT DTFLD, 0 DT, DCA DTV /SAVE DECTAPE-XFER-VECTOR TAD I DTV /GET FIRST WORD DCA DTFLD /SAVE BUFFERFIELD TAD DTFLD /GET UNIT, NUMBER OF BLOCKS CML RTR /DIVIDE BY 100 RTR DCA DTUNIT /SAVE DTUNIT ISZ DTV CLA CMA TAD I DTV /GET BUFFER ADDRESS DCA DTBUF ISZ DTV TAD I DTV /GET OS/8 BLOCK CLL RAL /THIS IS THE DECTAPE BLOCK DCA DTBLK CDTOIF TAD MYCDF /NOTE THAT 'CDTOIF' CANNOT BE USED DCA DTRFLD /IN THE INTERRUPT-ENVIRONMENT CIF MONFLD JMS I ZRESERV JMS ALARM /NO SLOT AVAILABLE JMS MONITOR RETURN CONTINUE DCA DTSLOT
ACM3 /SET # OF RETRIES TO 3 DCA DTTRY DTST, /START AFTER ERROR TOO TAD DTUNIT /COMPUTE # OF BLOCKS RTR AND C37 CMA DCA DTNUM DTMON, CDF MONFLD CLA CMA // TAD DRET1A //DTRB-1=DTSF DCA I (DTA^4+SKPBAS //INSERT DTSF IN SKIPCHAIN DCA DTJMP // TAD (7754 // DCA I (7755 //DEPOSIT BLOCKNUMBER IN WC TAD DTMON //FLD=MONFLD DTLB //FOR SEARCH TAD DTUNIT // AND C7400 //UNIT+MOTION TAD (214 //SEARCH DTCA DTXA // JMS MONITOR // WAIT DTA SNA CLA /ERROR ? JMP .+4 /N ISZ DTTRY /TRIED ENOUGH ? JMP DTST /N IFNZRO HRDERR-4 <?> TAD C4 /Y: PASS HRDERR JMS MONITOR HALT SIGNAL CLEAR RELEASE DTSLOT, 0 DTBUF, 0
/NOW THE INTERRUPT PART OF THIS TASK / DTINT, CDF MONFLD DTRB ///ERRORS AND (2700 ///DON'T MIND END OF TAPE SZA CLA JMP DTERR /// DTJMP, 0 ///PROGRAM SWITCH DRET1A, DTRB /// SPA CLA ///END ZONE ? JMP DTURN1 ///YES: REVERSE MOTION DTRA /// RTL ///REVERSE BIT TO LINK RTL /// DT7600, 7600 ///CLA AND -200 TAD I (7754 /// CIA /// TAD DTBLK ///RIGHT BLOCK ? SNA ///NO JMP DTFIND ///YES CIA /// SNL /// IAC /// SNL CLA /// DTURN, TAD C400 ///REVERSE MOTION DTURN2, DTXA /// TAD DT7600 ///SET UP WC DCA I (7754 /// DTEXIT, CIF MONFLD /// JMP I ZFSTEXT DTURN1, TAD C200 /// JMP DTURN ///
DTFIND, SNL CLA /RIGHT DIRECTION ? JMP DTURN2 ///NO TAD DTBUF /// DCA I (7755 /// TAD (JMP DRET3A /// DCA DTJMP ///DRET3A RETURN TAD DTFLD /// DTLB /// TAD DTFLD /// SPA CLA /// TAD (50-30 /// TAD (30 /// DRET3A, ISZ DTNUM ///LAST BLOCK ? JMP DTURN2 ///N0: NEXT ONE DTERR, DTRA /// AND C200 /// TAD C4 ///CLEAR INT ENABLE DTXA ///STOP MOTION DCA I (DTA^4+SKPBAS///REMOVE DTSF FROM SKIPCHAIN TAD CDTA /// DTRFLD, CDF /// CIF MONFLD /// JMS I ZSOFINT /// DTNUM, 0 ///PASS -NUMBER OF BLOCKS IF ERROR C400, 400 DTBLK, 0 DTV=ZTEM1 DTUNIT, 0 $



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