File: SD8SY.PA of Tape: OS8/OS8-Latest/new-13
(Source file text) 

/SD8E (TD8E) DECTAPE SYSTEM HANDLER
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1980   BY DATAPLAN GMBH, LAUDA, BRD
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DATAPLAN GMBH.
/DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR ANY ERRORS THAT MAY APPEAR
/IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DATAPLAN'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DATAPLAN.
/
/DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY
/OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DATAPLAN.
/
/
/
/
/
/
/
/
/
/
/
/WVDM, DP, ZUERICH, 1-JAN-80
/SD8SY DECTAPE SYSTEM HANDLER

/THIS HANDLER CAN DRIVE UNITS 0&1, AND IS PERMANENTLY
/RESIDENT IN FIELDS 0&2.
/THE HANDLER CAN BE USED WITH ION  SYSTEMS AND WILL
/TURN OFF THE INTERRUPT DURING READ/WRITES FOR AT
/MOST 17MSECS AND WILL TURN IT ON IF INITIALLY ON
/BLOCKS LARGER THAN 2047 GIVE IMMEDIATE FATAL ERROR
/USR CALL TRAP IN FIELD 0 & 2;SAME CIF LOCS AS TD8E

	VERSION="M-300

/W. VAN DER MARK, ETH, ZUERICH 10/28/74
/VERSION M: 1-JAN-80

	SDSS=6771
	SDST=6772
	SDSQ=6773
	SDLC=6774
	SDLD=6775
	SDRC=6776
	SDRD=6777

	*0
	/DESCRIPTOR TABLE
	-3		/TWO HANDLERS + SYS
DEVICE TD8E;DEVICE SYS;4210;6007;0;1341
DEVICE TD8E;DEVICE DTA0;4210;5007;0;1341
DEVICE TD8E;DEVICE DTA1;4210;5014;0;1341

	BOOTA-BOOTB		/# OF WORDS IN BOOT
/TD8E DECTAPE BOOTSTRAP RECORD

	RELOC 7360

BOOTA,	ZBLOCK 20	/INTERBLOCK ZONE LENGTH
			/(5*2)*3/2+1

/EXPLANATION:
/THE TOGGLE BOOTSTRAP READS 4 WORDS OF NONSENSE
/INTO 7354-7357;THEN 20 WORDS OF ZERO INTO 7360-7377
/'TDBOOT' IN 7400;NOW WE HAVE GAINED 20 WORDS SO THAT
/WE CAN GO ON READING OVER THE INTERBLOCK ZONE AND
/THE FIELD 0 RESIDENT PART WILL LOAD CORRECTLY INTO
/7600-7777;FIELD 1 & 2 ARE LOADED FROM BLOCK 66
/THIS EXPLAINS WHY A 'TWO PAGE' RESIDENT HANDLER
/CAN USE A MUCH LONGER BOOTSTRAP.

TDBOOT,	CDF 10		/GO TO DATE FIELD
	TAD I K7666	/GET OLD DATE DATE
	DCA DATSAV	/SAVE IT
TDMORE,	TAD K7600	/128 WORDS PER PAGE
	DCA TDPTR
	SDSS		/WAIT FOR A BLOCK MARK (TAPE IS
	JMP .-1		/STILL MOVING)
	SDRC
	AND TD77
	TAD KM26	/IS IT A BLOCK MARK?
	SZA CLA
	JMP TDMORE	/NO..WAIT A WHILE LONGER
	SDRD		/GET THE BLOCK NO.
TDBKNO,	TAD TDM154	/NEED BLOCKS 154&155 (REC.66)
	SZA CLA
	JMP TDMORE	/NOT YET, BUSTER
TDRGRD,	SDSS
	JMP .-1		/LOOK FOR A REVERSE GUARD WORD
	SDRC
	AND TD77
	TAD KM32
	SZA CLA
	JMP TDRGRD	/KEEP LOOKING FOR IT
	JMS TDRQD
	JMS TDRQD
	JMS TDRQD	/SKIP CONTROL WORDS
	CDF 10		/LOAD UP FIELD 1
TDREAD,	JMS TDRQD	/GET A DATA WORD
	DCA I TDPTR
	ISZ TDPTR	/ARE WE DONE?
	JMP TDREAD	/NOT YET
	ISZ TDBKNO	/YES..LOOK AT BLOCK 155
	TAD KCDF20
	DCA TDREAD-1	/LOAD UP FIELD 2
	ISZ M2		/DONE THIS JUNK?
	JMP TDMORE	/GO DO FIELD 2
	SDLC		/STOP THE TAPE
	CDF 10
	TAD DATSAV	/GET OLD DATE
	DCA I K7666	/STORE IN NEW SYSTEM
	CIF CDF 0
	JMP I K7605

TDM154,	-154
	-155	
TDPTR,	7600

TDRQD,	0
	SDSQ
	JMP .-1
	SDRD
	JMP I TDRQD

DATSAV,	0
K7666,	7666
K7600,	7600
KM26,	-26
KM32,	-32
KCDF20,	CDF 20
M2,	-2
K7605,	7605
TD77,	77
BOOTB,	RELOC
/FOLLOWING IS THE BOOTSTRAP FOR THE TD8E 12K SYSTEM

	NOPUNCH
	RELOC 7300
K1000,	TAD GET		/PUT DRIVE IN REVERSE
	JMS GET		/LOOK FOR END ZONE
	JMS GET		/LOOK FOR 31 CODE
RD,	SDSQ		/NOW READ ALL INTO CORE
	JMP .-1
	SDRD		/READ 12 BIT WORD
	DCA I WCT	/AND PUT IT IN CORE
	ISZ WCT
	JMP RD		/LOOP UNTIL FIELD 0
	JMP I STRT	/IS LOADED, THEN START
GET,	2000
	TAD K1000	/SET MOTION &DIRECTION
	SDLC
BSRCH,	SDSS		/WAIT FOR 22 OR 31 CODE
	JMP .-1		/22 IS END ZONE, 31 IS
	SDRC		/4 WORDS BEFORE DATA
	AND K77		/IS THIS WHAT WE WANT?
	TAD BM22	/THIS GETS INCREMENTED
	SZA CLA		/IF YES, RETURN.
	JMP BSRCH	/NO.KEEP LOOKING.
	ISZ .-3		/LOOK FOR NEXT IN LIST
	JMP I GET
WCT,	7354		/START LOADING CORE AT 7354
BM22,	-22		/THE OTHER BOOTSTRAP GETS
	-31		/LOADED AT 7400.
K77,	77
STRT,	7400
	RELOC
	ENPUNCH
	*200

	RELOC 7600

	ZBLOCK 7
SHNDLR,	VERSION		/UNIT 0 ENTRY POINT
	CLA CLL
	JMP SHND2
C3,	3		/FINGERPRINT FOR BUILD
S70,	70
SDTA1,	VERSION		/UNIT 1 ENTRY
	CLA CLL CML
SC1000,	TAD SDTA1	/DOUBLES AS CONSTANT 1000
	DCA SHNDLR	/GET ARGS AT SHNDLR
SHND2,	RAR		/UNIT #
	DCA SUNIT
	RDF		/SETUP FOR EXIT
	TAD S6203
	DCA EFLD
	TAD I SHNDLR	/FUNCTION WORD
	SDLD		/PUT IT IN DATA EGISTER
	AND S70		/SDLD DOES NOT 0 AC..GET FIELD
	TAD S6203	/CIF CDF N FOR TRANSFER FIELD
	DCA TFLD
	ISZ SHNDLR
	TAD I SHNDLR	/BUFFER ADDRESS
	MQL
	ISZ SHNDLR
	TAD I SHNDLR	/BLOCK #. TIMES 2 FOR REAL #
	ISZ SHNDLR	/POINT TO ERROR EXIT
	SPA
	JMP SEREX
	IFNZRO .-7642 <CIFERR+=>
	CIF CDF 20	/BLOAD & FRTS LOAD SOME CIF CDF X
	CLL RAL		/FRTS USES THIS LOC FOR
	DCA BLOCK	/TD8E RECOGNITION
	CLA CLL CMA RTL
	DCA TRYCNT	/3 ERROR TRIES
	TAD SUNIT
	JMP F2SET	/TO FIELD 2 FOR INIT.

KION,	ION

RGO,	CLA CML RTR	/LINK TO MOTION BIT
	TAD SC1000
	TAD SUNIT
	SDLC		/MOVE THE TAPE
	SDSQ
	JMP .-1
	SDRD		/KNOCK DOWN QUAD FLAG
	SDSQ
	JMP .-1
			/DON'T CARE IF TIMING ERROR

SRCH,	CIF CDF 0	/SWITCH OFF INT. TILL NEXT JUMP
	SDSS		/WAIT FOR A BLOCK MARK
	JMP SRCH
	SDRC		/GET MARK TRACK BITS
	CLL RTL		/DIRECTION TO LINK
	AND SC374
	TAD SM110	/IS IT A N END ZONE?
	SNA		/FORWARD:LNK=1
	JMP SENDZ	/YES
	TAD SM20	/MAYBE A BLOCK MARK?
	SZA CLA		/FORWARD:LNK=0
	JMP SRCH	/NEITHER..KEEP GOING
SM20,	-20	/=SMA SZA SNL CLA - IT SKIPS ALWAYS
	IFNZRO .-7700 <USRERR+=>
SC374,	374	/IF USR IS CALLED HERE - MASK GETS WIPED
		/OUT - SO WE RUN OUT OF TAPE OR HANG
	SDRD		/READ THE BLOCK #
	SZL		/IF REVERSE, LOOK 3 AHEAD
	TAD C3
	CMA
	TAD BLOCK	/CML IF TARGET.GT.READ BLK.
	CMA
	SZA		/IS IT THE RIGHT ONE?
	JMP NOTFND	/NO - GO CHECK LNK & SIGN
	SZL CLA		/FORWARD:LNK=0
	JMP RGO		/WRONG DIRECTION
	SDRC		/CLEAR FLAGS
	SDLC		/CLEAR TIMING ERRORS
	TAD KION	/LOAD 'ION' INSTR.
	SKON		/IF INT.ON - TURN OFF AND SKIP
	IAC		/=IOF
TFLD,	HLT		/GETS CIF CDF N
	IFNZRO .-7721 <CIFERR+=>/BLOAD & FRTS LOAD CIF X
	CIF 20		/CARRY 'ION' OR 'IOF' IN AC
	JMP RDWT	/LET'S TRANSFER DATA
SEXIT,	ISZ SHNDLR	/NORMAL RETURN
	TAD SUNIT	/STOP THE TAPE
	SDLC
	CML CLA RAR	/EITHER 0 OR 4000 IN AC ON RETURN
	IFNZRO .-7727 <CIFERR+=>
EFLD,	HLT	/BLOAD & FRTS LOAD CIF X - SO WHAT?
	JMP I SHNDLR

SENDZ,	CML IAC		/FORWARD:LNK=0;IAC FOR SNA
SM110,	SNA SZL CLA	/IF IN END ZONE FORWARD, ERROR
	JMP RGO		/TURN AROUND AND SEARCH
ERROR,	ISZ TRYCNT	/TRIED 3 TIMES?
	JMP RGO		/LINK IS ZERO
SEREX,	CLL CLA
	JMP SEXIT+1	/FATAL RETURN

NOTFND,	SZL
	JMP SRCH	/RIGHT DIRECTION ,GO ON
	RAL		/IF TAR.GT.READ
	JMP RGO		/FORCE FORWARD MOTION

TRYCNT=7755
BLOCK=7754
SUNIT=SDTA1
S6203=SRCH
	RELOC

	*400
	NOPUNC
	FIELD 2
	ENPUNC
	RELOC 7600

EQUTMP,	0		/KEEP HERE!
XPTR,	0		/BUFFER POINTER - KEEP HERE!
BPTR,	0		/HARMLESS LOCS IN CASE OF ABSLDR
SXFUN,	0		/ERROR (IT PERMITS FIELD 2 LOAD)

GETCHK,	0		/GET SIXBIT CHECKSUM
	MQA CLA
	BSW		/28MMSEC SUB
	JMS EQUFUN
	MQA
	JMP I GETCHK

SXUNIT,	0		/IMPORTANT REGS PROTECTED BY JMPS

F2SET,	DCA SXUNIT	/GET UNIT TO FIELD 2
	TAD SXUNIT
	SDLC		/MAKE SURE UNIT IS STOPPED
	MQA CLA
	DCA BPTR	/SET INITIAL ADD.
	SDRD		/FUNCTION WORD
	CLL RAL
	AND CX7600	/WRITE BIT IN LNK
	DCA XPGCT
	SDRD
	RAR		/INITIAL DIRECTION TO LNK
	DCA SXFUN	/SAVE THE WRITE BIT
	CIF CDF 0
	JMP RGO

XPGCT,	0
RDWT,	DCA RWCOM	/SAVE 'ION' OR 'IOF'
	TAD BPTR
	DCA XPTR
REVGRD,	SDSS		/WAIT FOR REVERSE GUARD WORD
	JMP .-1		/18MMSEC TO HERE
	SDRC
	AND X77
	TAD XM32	/IS IT REVERSE GUARD?
	SZA CLA
	JMP REVGRD	/NO
	TAD CX7600
	DCA XWCNT	/128 WORDS PER BLOCK
	TAD SXFUN
SK7700,	SMA CLA		/READ OR WRITE?
	JMP READ	/READ
	CLL		/LINK TO RWCOM
	SDRC		/17MMSEC FROM LAST SDSS
	AND C300	/ERRORS ON WRITE LOCKOUT AND TIME
	SZA 		/KEEP AC ON FOR ERROR
	JMP RWCOM	/LNK=0 - NO READ OR WRITE
	JMS RDQUAD	/SKIP A WORD
	CLA MQL		/ALSO 0 TO CHECKSUM
	TAD SXUNIT
	TAD WRLP
	SDLC		/TURN ON THE WRITE
	TAD X77
	JMS WRQUAD	/WRITE 0077 IN REV. CHECKSUM
WRLP,	TAD I XPTR
	JMS WRQUAD	/WRITE THE DATA
	ISZ XPTR	/38MMSEC LOOP
X77,	77		/JUST IN CASE
	ISZ XWCNT	/DONE 128?
	JMP WRLP
	JMS WRQUAD	/WRITE AND CHECKSUM A WORD OF 0
	JMS GETCHK	/GET CHECKSUM
	AND SK7700
	JMS WRQUAD
	JMS WRQUAD	/LET CHECKSUM GET WRITTEN
	IFNZRO .-7700 <USRERR+=>
	SKP CLA		/27MMSEC TO SDST
XM32,	-32		/DOUBLES AS HLT

RWCOM,	IOF		/OR 'ION' - NEXT WILL EXECUTE
	CIF CDF 0
	SDST		/CHECK FOR TIME AND CHECKSUM ERRS
	SZA CLA
	JMP ERROR	/LNK=0 AT RWCOM
	TAD XPGCT	/FINISHED TRANSFER?
	TAD CX7600	/TURNS LNK ON
	SNA
	JMP SEXIT	/YES.GET OUT
	DCA XPGCT
	TAD BPTR
	TAD SC200	/NEW BUFFER ADRESS
	DCA BPTR
	ISZ I DBLOCK	/NEXT TAPE BLOCK..CAN'T SKIP
	JMP RGO

READ,	JMS RDQUAD	/SKIP CONTROL WORDS
	JMS RDQUAD
	JMS RDQUAD	/GET CHECKSUM
	AND X77		/.NOT. CK
	MQL
SRDLP,	JMS RDQUAD
	DCA I XPTR
	ISZ XPTR
C300,	300		/39MMSEC LOOP
	ISZ XWCNT	/DONE ALL?
	JMP SRDLP	/NO
	JMS RDQUAD	/READ AND CHECKSUM LAST WORD
	JMS RDQUAD	/GET CHECKSUM
	AND X77		/.NOT. CK
	JMS EQUFUN	/AND RESET SECOND HALF
	JMS GETCHK	/80MMSEC TO SDST
	JMP RWCOM

XWCNT,	0
WRQUAD,	0		/WRITE A 12 BIT WORD
	SDSQ
	JMP .-1
	SDLD		/25MMSEC SUB
	JMS EQUFUN
	JMP I WRQUAD

RDQUAD,	0		/READ A 12 BIT WORD
	SDSQ
	JMP .-1
	SDRD		/27MMSEC SUB
	JMS EQUFUN
	TAD EQUTMP
	JMP I RDQUAD

EQUFUN,	0		/EQUIVALENCE CHECKSUM
	DCA EQUTMP	/ORIGINAL WORD IS KEPT
	TAD EQUTMP	/19MMSEC SUB
	MQA		/X.OR.C
	CMA CLL		/.NOT.(X.OR.C) - LINK TO RWCOM
	SWP	/C IN AC-(.NOT.X).AND.(.NOT.C) IN MQ
SC200,	AND EQUTMP	/X.AND.C
	MQA	/(X.AND.C).OR.((.NOT.X).AND.(.NOT.C))
	MQL		/CLEAR AC AND RELOAD CHECKSUM
	JMP I EQUFUN

CX7600,	7600
DBLOCK,	BLOCK

	0;0;0;0		/USED BY BATCH MONITOR

	RELOC
	$$$$