DataMuseum.dk

Presents historical artifacts from the history of:

Philips Data Systems

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Philips Data Systems

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦bdd50dbb7⟧

    Length: 39982 (0x9c2e)
    Notes: pts_type(SC)
    Names: »DRCC01.SC«

Derivation

└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
    └─⟦this⟧ »TOSSWORK/DRCC01.SC« 

PTS(SC)

	IDENT DRCC01 	REL 8.2 78-09-15  870106240821 

* 
***************************************************** 
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   DRCC01 = DRIVER CASSETTE CHANGER
* 
* 
* 
* 
* 
* 
***************************************************** 
* 
* 
* 
* THIS DRVER HANDLES THREE CASSETTE CHANGERS CONNECTED
* TO CPU VIA CHCC AND IOP ON MULTIPLEXED CHANNEL. 
* 
* THE CHANGERS ARE OPERATED COMPLETELY INDEPENDENT
* OF EACH OTHER.
* 
* DATA IS RECORDED IN BLOCKS FROM 2 TO 256
* CHARACTERS. NORMALLY THE LAST CHARACTER IS USED 
* AS A BLOCK SEQUENCE NUMBER. 
* 
* 


	EJECT

* THE DRIVER CONSISTS OF THE FOLLOWING PARTS: 
* 
*	A C T I V A T I O N   R O U T I N E 
* 
*	O R D E R   P R O C E S S O R S 
* 
*	C O M M A N D   H A N D L E R S 
* 
*	I N T E R R U P T   H A N D L E R 
* 
*	P O W E R   O N   R O U T I N E 
* 
*	D E V I C E   W O R K   T A B L E S 
* 
* 
* 
* ORDERS TREATED: 
* 
*	CHANGER:
* 
*	/10 TEST STATUS SET IND	/13 EJECT CASSETTE
*	/11 INSERT CASSETTE	/14 FEED TRAY 
*	/12 RETURN CASSETTE	/3E RESET STATUS FLAGS
* 
*	RECORDER: 
* 
*	/00 TEST STATUS	/31 REWIND
*	/02 READ 	/37 LOAD
*	/06 WRITE	/38 UNLOAD
*	/22 WRITE TAPE MARK	/3D READ MATS 
*	/3F RECOVER 
* 
	EJECT

* 
* STATUS BITS:
* 
*	    CHANGER	RECORDER
* 
*	0:  REQUEST ERROR	REQUEST ERROR 
*	1:  CAS IN DISCH COMP	LEADER
*	2:  CAS NOT IN TRAY	BOT MISSING 
*	3:  NO TRAY ON TRANSP	TAPE MARK 
* 
*	4:  HANDL NOT AT TRAY	NO DATA 
*	5:  TRANSPORT FULL	BOT/EOT
*	6:       	WRITE PROTECTED 
*	7:          	B-SIDE 
* 
*	8:  ILL ORDER SEQUENCE	ILL ORDER SEQUENCE 
*	9:  HARD ERR, TIME OUT	TIME OUT 
*	10: 
*	11:          	SEQUENCE ERROR
* 
*	12:         	INCORRECT LENGTH 
*	13:         	DATA ERROR 
*	14:         	THRU-PUT ERROR 
*	15:  NOT OPERABLE	NOT OPERABLE
* 
	EJECT

* 
*	ENTRIES 
* 

	ENTRY	IHCC1	INTERRUPT HANDLERS 
	ENTRY	IHCC2	 
	ENTRY	IHCC3
	ENTRY	DWCC01	DEVICE WORK TABLES
	ENTRY	DWCC02 
	ENTRY	DWCC03 
	ENTRY	C1DRON	POWER ON RECOVERY 
	ENTRY	C2DRON 
	ENTRY	C3DRON 


* 
*	EXTERNALS 
* 

	EXTRN	TDISP	DISPATCHER 
	EXTRN	DISEND	DISPATCHER END I/O
	EXTRN	DISIOE	DISP I/O REQUEST ERROR
	EXTRN	SAVE8	SAVE A1-A8 AND INH 
	EXTRN	SETIMP	START TIMER 
	EXTRN	ECBBA	ECB BUFFER ADDRESS 
	EXTRN	ECBRL	ECB REQUESTED LENGTH 
	EXTRN	ECBEL	ECB EFFECTIVE LENGTH 
	EXTRN	ECBCW	ECB CONTROL WORD 
	EXTRN	INTSAV	SAVE AREA LAST INTERRUPT
	EXTRN	HALT	MONITOR HALT ROUTINE
	EJECT

* 
*	CONSTANTS 
* 

CCRTRD	EQU	10	MAX NO OF RETRIES AT READ 
CCRTWR	EQU	3	MAX NO OF RETRIES AT WRITE 
CCRTSB	EQU	5	MAX NO OF RETRIES AT SBOT
CCRTLD	EQU	3	MAX NO OF RETRIES AT LOAD
CCRTRT	EQU	3	MAX NO OF RETRIES AT RETURN
CCRCBL	EQU	20	MAX NO OF BLOCKS TO SEARCH AT RECOVERY
CCSTPS	EQU	50	MAX NO OF STEP TRAY :S
CCPOFF	EQU	20	TIME TO WAIT AT POWER OFF (100 MS)
CCPON	EQU	30	TIME TO WAIT AT POWER ON (100 MS)
CCRBLK	EQU	5	NO OF BLOCKS TO REVERSE AT POWER ON

* 
*	HARDWARE ADDRESSES
* 

CHCC1	EQU	/09	CHCC1 ADDRESS 
CHCC2	EQU	/0A	CHCC2 ADDRESS 
CHCC3	EQU	/0B	CHCC3 ADDRESS 

C1IOPL	EQU	CHCC1+CHCC1	IOP ADDRESSES
C1IOPA	EQU	CHCC1+CHCC1+1
C2IOPL	EQU	CHCC2+CHCC2
C2IOPA	EQU	CHCC2+CHCC2+1
C3IOPL	EQU	CHCC3+CHCC3
C3IOPA	EQU	CHCC3+CHCC3+1
	EJECT


* 
*	DWT DISPLACEMENTS 
* 

DWTCHP	EQU	0
DWTST	EQU	2 
DWTECB	EQU	4
DWTOR	EQU	6 
DWTADR	EQU	8
DWTTAB	EQU	10 
DWTWAT	EQU	12 
DWTTQ	EQU	14
DWTREQ	EQU	16 
DWTSAV	EQU	18 
DWTSB2	EQU	30 
DWTSA2	EQU	32 
DWTSA5	EQU	34 
DWTSA7	EQU	36 
DWTINT	EQU	38 
DWTMOD	EQU	40 
DWTSQC	EQU	43 
DWTTOT	EQU	44 
DWTTIM	EQU	46 
DWTHRC	EQU	48 
DWTLCK	EQU	50 
DWTSTP	EQU	52 
DWTPWF	EQU	54 
DWTWRL	EQU	56 
DWTWRA	EQU	58 
DWTRRA	EQU	60 
DWTIOS	EQU	62 
DWTIOH	EQU	64 
DWTSST	EQU	66 
DWTSTA	EQU	68 
DWTEOT	EQU	70 
DWTBUF	EQU	72 
DWTWBM	EQU	74 
DWTWIL	EQU	76 
DWTWSE	EQU	78 
DWTWRE	EQU	80 
DWTWOK	EQU	82 
DWTRNO	EQU	86 
DWTRBM	EQU	88 
DWTRIL	EQU	90 
DWTRSE	EQU	92 
DWTRRE	EQU	96 
DWTROK	EQU	98 
DWTMNO	EQU	102
DWTMBM	EQU	104
DWTMIL	EQU	106
DWTMDE	EQU	108
DWTMOK	EQU	110
DWTREP	EQU	114
DWTPND	EQU	116
DWTPBM	EQU	118
DWTPNS	EQU	120
DWTPTF	EQU	122
DWTPIT	EQU	124
DWTPIS	EQU	126
DWTPIE	EQU	128
DWTPDB	EQU	130
DWTTMK	EQU	132
DWTINS	EQU	134
DWTRET	EQU	136
	EJECT

* 
*	CCDA	ACTIVATION ROUTINE. ENTERED AFTER LKM-REQUEST. 
*		THE VALIDITY OF THE ORDER IS CHECKED AND A BRANCH TO 
*		THE ORDER PROCESSOR IS MADE. 
* 
* 
*	ENTRY:
* 
*	A5:  DWTSB2,A6
*	A6:  DWT ADDRESS
*	A7:  ORDER
*	A8:  ECB ADDRESS
* 
*	EXIT:  TO ORDER PROCESSOR 
* 
*	A3:  REQUESTED LENGTH 
*	A4:  BUFFER ADDRESS 
*	A5:  STACK POINTER
*	A6:  DWT ADDRESS
*	A7:  MAX NO OF RETRIES
*	A8:  ECB ADDRESS
* 

CCDA	INH
	LDK	A2,CCLEN	CHECK IF LEGAL ORDER

CCDA10	CC	A7,CCTAB-1,A2 
	RF(E)	CCDA30	FOUND 
	SUK	A2,1 
	RB(NZ)	CCDA10	TRY NEXT 

CCDA20	ABL	DISIOE	ILLEGAL ORDER 

CCDA30	ADR	A2,A2
	ADKL	A2,CCORD-2
	ST	A2,DWTREQ,A6	SAVE ADDRESS TO ORDER PNTR 
CCDA40	CWK	A2,CCNOL	DOES THIS ORDER REQUIRE LENGTH
	RF(NL)	CCDA60	NO 

	LD	A3,ECBRL,A8	GET REQ LENGTH
	LD	A4,DWTMOD,A6	CHECK IF SEQ NUMBERS 
	RF(N)	CCDA50	NO

	ADK	A3,1	YES ADJUST LENGTH 

CCDA50	LDR	A4,A3	CHECK REQ LENGTH 
	SUK	A4,2 
	RB(N)	CCDA20	LESS THAN 2 CHARS 
	SUK	A4,254 
	RB(P)	CCDA20	MORE THAN 256 CHARS 

CCDA60	LD	A4,ECBBA,A8	GET BUFFER ADDRESS
	LDK	A7,0	RESET NO OF RETRIES 
	CM	DWTEOT,A6	CLEAR EOT INDICATOR 
	ABI*	DWTREQ,A6	GO TO ORDER PROCESSOR 
	EJECT

* 
*	ORDER PROCESSORS: 
* 
*	ENTRY:
* 
*	A3:  REQUESTED LENGTH 
*	A4:  BUFFER ADDRESS 
*	A5:  STACK POINTER
*	A6:  DWT ADDRESS
*	A7:  MAX NO OF RETRIES
*	A8:  ECB ADDRESS
* 
*	EXIT:   ABL DISEND
* 
*	A1:  STATUS 
*	A6:  DWT ADDRESS
* 
*	EFFECTIVE LENGTH (ECBEL) AND CONTROL WORD (ECBCW) 
*	ARE UPDATED.
* 








* 
*	TEST CHANGER STATUS AND SET INDICATORS  /10 
* 

TCSI	LD	A1,ECBCW,A8	LOAD IND PATTERN
	CF	A5,SETI 
	ABL	ENDIOC 
	EJECT

* 
*	INSERT CASSETTE  /11
* 

ISRT	LD	A2,DWTHRC,A6	CHECK IF HANDLER AT RECORDER 
	ABL(NZ)	ILLORD	YES ILLEGAL ORDER 
	LD	A2,DWTSTP,A6	CHECK IF TRAY STEPPED
	RF(NZ)	ISRT30	YES
	LDK	A7,CCSTPS	SET UP MAX NO OF STEPS 
	CF	A5,MVCT	PUT HANDLER IN TRAY 
ISRT10	LDKL	A2,/1441	CK IF NO TRAY,TR FULL,TOT,N
	TM	A1,A2 
	ABL(NZ)	ENDIOC	ILLEGAL CONDITIONS

	LDR	A2,A1
	ANKL	A1,/0300	SAVE WP, B-SIDE
	ST	A1,DWTSAV,A6
	SLC	A2,2	CHECK IF CAS IN TRAY
	RF(NN)	ISRT20	YES INSERT IT
	SUK	A7,1 
	ABL(Z)	ENDIOE	TO MANY STEPS
	CF	A5,STPT	STEP TRAY 
	RB	ISRT10

ISRT20	C1S	DWTSTP,A6	INDICATE TRAY STEPPED
	CF	A5,STPT	STEP TRAY 
	ABL(1)	ENDIOE	HAND NOT AT TRAY,TIM OUT,NOT OP
ISRT30	CF	A5,MVCR	MOVE CAS TO RECORDER
	ANKL	A1,/FBFF	MASK OFF TRANSPORT FULL
	LDR	A2,A1	CHECK IF NOT OPERABLE
	SRC	A2,1 
	ABL(N)	ENDIOC	NOT OP 
	CM	DWTSTP,A6	CLEAR CHANGER FLAGS 
	C1S	DWTHRC,A6	INDICATE HANDLER AT RECORDER 
	ABL	ENDIOC 
	EJECT

* 
*	RETURN CASSETTE   /12 
* 

RTRN	LDK	A7,CCRTRT
	LD	A2,DWTLCK,A6	CHECK IF CAS LOCKED
	ABL(NZ)	ILLORD	YES ILLEGAL ORDER 
	LD	A2,DWTHRC,A6	CHECK IF HANDL AT REC
	ABL(Z)	ILLORD	NO ILLEGAL ORDER 
RTRN10	CF	A5,MVCT	MOVE CAS TO TRAY
	RF(0)	RTRN20	STATUS OK 
	IM	DWTRET,A6	INC STAT CNT
	SUK	A7,1 
	RF(N)	RTRN20	ENOUGH WITH RETRIES 
	CF	A5,MVCR 
	RB	RTRN10	TRY AGAIN

RTRN20	CM	DWTHRC,A6	IND HANDL NOT AT REC
	ABL	ENDIOC 
	EJECT


* 
*	EJECT CASSETTE  /13 
* 

EJCT	LD	A2,DWTLCK,A6	CHECK IF CAS LOCKED
	ABL(NZ)	ILLORD	YES ILLEGAL ORDER 
	LD	A2,DWTHRC,A6	CHECK IF HANDL AT REC
	ABL(Z)	ILLORD	NO ILLEGAL ORDER 
	CF	A5,TEST 
	LDKL	A2,/4041	CHECK IF CAS IN DISCH COMP, TOT , NOT OP 
	TM	A1,A2 
	ABL(NZ)	ENDIOC	YES TO BAD
	CF	A5,MVCD	MOVE CAS TO DISCH COMP
	ABL(1)	ENDIOC	HAND N AT TRAY, TOT, N OP
	CM	DWTHRC,A6	IND HANDL NOT AT REC
	ABL	ENDIOC 
	EJECT


* 
*	FEED TRAY TO END  /14 
* 

FEED	LD	A2,DWTHRC,A6	CHECK IF HANDLER AT REC
	ABL(NZ)	ILLORD	YES ILLEGAL ORDER 
	LDK	A7,CCSTPS	SET UP MAX NO OF STEPS 
	CF	A5,MVCT 
FEED10	LDKL	A2,/1441	CHECK IF NO TRAY,TR FULL 
	TM	A1,A2 
	ABL(NZ)	ENDIOC	YES RETURN
	SUK	A7,1 
	ABL(Z)	ENDIOE	TO MANY STEPS
	CF	A5,STPT	STEP TRAY 
	RB	FEED10
	EJECT


* 
*	RESET STATUS FLAGS  /3E 
* 

RSET	CM	DWTSTP,A6	CLEAR TRAY STEPPED
	CM	DWTLCK,A6	   -CASSETTE LOCKED 
	CM	DWTHRC,A6	   -HANDLER AT RECORDER 
	ABL	ENDIO6 
	EJECT


* 
*	TEST RECORDER STATUS  /00 
* 

TSTR	LD	A2,DWTHRC,A6	CHECK IF HANDLER AT REC
	ABL(Z)	ILLORD	NO ILLEGAL ORDER 
	LD	A1,DWTSAV,A6	GET WP,B-SIDE
	ABL	ENDIO7 
	EJECT


* 
*	READ  /02 
* 

READ	LD	A2,DWTSQC,A6	GET SEQ COUNTER
	RF(NZ)	READ10	NOT FIRST BLOCK
	LDK	A2,CCRTSB	FIRST BLOCK SEARCH BOT 
READ05	CF	A5,SBOT 
	RF(5)	READ06	OK
	IM	DWTRNO,A6	INC STAT CNT
	ABL	ENDIO4	ILLEGAL STATUS
READ06	EQU	*
	ANKL	A1,/0400
	RF(NZ)	READ10	BOT FOUND
	SUK	A2,1	BOT NOT FOUND 
	RF(NN)	READ08	OK 
	IM	DWTRBM,A6	INC STAT CNT
	ABL	ENDIOB	NO MORE RETRIES 
READ08	EQU	*
	CF	A5,REWD	TRY AGAIN 
	RB	READ05

READ10	CF	A5,RBLK	READ BLOCK
	RF(0)	READ20	STATUS, DATA OK 
	RF(5)	READ12	ILL DATA
	IM	DWTRIL,A6	INC STAT CNT
	ABL	ENDIO4	ILL STATUS
READ12	EQU	*
	ADK	A7,1	INC RETRY CNT 
	CWK	A7,CCRTRD
	RF(NG)	READ14	MORE RETRIES 
	LDR	A2,A3	SAVE REQ LENGTH
	EX	DWTRRA,A6 
	CWR	A3,A4
	RF(E)	READ13	LENGTH OF READ BLOCK =0 
	IM	DWTRRE,A6	INC STAT CNT
	ABL	ENDIO1	NO MORE RETRIES 
READ13	LDK	A7,CCRTRD	ONE MORE TRY 
	LDR	A3,A2	RESTORE REQ LENGTH 
	RB	READ10	READ NEXT BLOCK
READ14	EQU	*
	LD	A2,DWTSQC,A6
	RF(NZ)	READ15	NOT FIRST BLOCK
	CF	A5,REWD	FIRST BLOCK REWIND
	RB	READ	AND TRY AGAIN
READ15	CF	A5,SKPR	REVERSE ONE BLOCK 
	RF(6)	READ19	NOT ILL DATA
	LD	A2,DWTMOD,A6
	RF(N)	READ19	SEQ NO NOT USED 
	LD	A2,DWTSTA,A6
	ANK	A2,/16 
	RF(NZ)	READ19	LAST STATUS ILL DATA 
	CF	A5,SKPR	REVERSE ONE BLOCK 
	CF	A5,RBLK	READ ONE BLOCK
	RB(2)	READ12	ILL DATA
	SLC	A1,3 
	RF(N)	READ17	TAPE MARK 
	LDR	A2,A3	SAVE REQ LENGTH
	EX	DWTRRA,A6	GET BUFFER POINTER
	SUK	A3,1	MOD TO GET SEQ NO POINTER 
	LCR	A3,A3	GET SEQ NO 
	ADK	A3,1 
	CC	A3,DWTSQC,A6
	RF(NE)	READ20	OK 
	LDR	A3,A2	RESTORE REQ LENGTH 
	RB	READ10	SEQ NO = PREV SEQ NO 
READ17	LD	A2,DWTSTA,A6
	SLC	A2,3 
	RB(N)	READ10	LAST STATUS = TAPE MARK 
	RF	READ20
READ19	EQU	*
	CF	A5,SKPR	REVERSE ONE MORE BLOCK
	CF	A5,RBLK 
	RB	READ10	TRY AGAIN

READ20	LDR	A5,A1	CHECK IF TAPE MARK 
	SLC	A5,3 
	ABL(N)	ENDIO1	TAPE MARK
	EX	DWTRRA,A6	RER A3,CXIOPA 
	SUK	A3,1 
	LD	A2,DWTSQC,A6	GET SEQUENCE COUNTER 
	CCR	A2,A3
	RF(E)	READ40	SEQ NUMBER OK 
	LD	A5,DWTMOD,A6	CHECK SEQ MODE 
	RF(N)	READ40	NO SEQ NUMBERS
	ORKL	A1,/0010	IND SEQ ERROR
READ30	IM	DWTRSE+2,A6	INC STAT CNTR(S)
	RF(NZ)	READ35
	IM	DWTRSE,A6 
READ35	RF	READ45
READ40	IM	DWTROK+2,A6	INC STAT CNTR(S)
	RF(NZ)	READ45
	IM	DWTROK,A6 
READ45	EQU	*
	ABL	ENDIO1 
	EJECT
* 
*	WRITE TAPE MARK /22 
* 
WRTM	C1S	DWTTMK,A6	INDICATE TAPE MARK 


* 
*	WRITE /06 
* 

WRIT	LD	A2,DWTSQC,A6	GET SEQ COUNTER
	RF(NZ)	WRIT10	NOT FIRST BLOCK
	CF	A5,SBES	FIRST BLOCK ERASE 
	LDR	A2,A1
	SLC	A2,5	CHECK IF BOT FOUND
	RF(N)	WRIT05	OK
	IM	DWTWBM,A6	INC STAT CNT
	ABL	ENDIOB	NOT BOT 
WRIT05	EQU	*
	CF	A5,ERAS 
	LD	A2,DWTTMK,A6
	RF(NZ)	WRIT17	NO SEQ NO FOR TM 
WRIT10	LD	A2,DWTMOD,A6	CHECK SEQ MODE 
	RF(N)	WRIT20	NO SEQ NUMBERS
	LD	A2,DWTSQC,A6	GET SEQ COUNTER
	LDR	A1,A4	CALC ADDRESS TO SEQ NUMBER 
	ADR	A1,A3
	SUK	A1,1 
	SCR	A2,A1	STORE SEQ NUMBER IN BUFFER 
WRIT15	LD	A2,DWTTMK,A6
	RF(Z)	WRIT20 
WRIT17	CF	A5,WTMK	WRITE TAPE MARK 
	RF	WRIT22
WRIT20	CF	A5,WBLK	WRITE BLOCK 
WRIT22	RF(4)	WRIT24	NOT OK
	IM	DWTWOK+2,A6	INC STAT CNTR(S)
	RF(NZ)	WRIT23
	IM	DWTWOK,A6 
WRIT23	EQU	*
	ABL	ENDIO1	STATUS, DATA OK 
WRIT24	RF(5)	WRIT26	OK
	IM	DWTWIL,A6	INC STAT CNT
	ABL	ENDIO4	ILLEGAL STATUS
WRIT26	EQU	*
	CF	A5,POSI	POSITION TAPE 
	RF(E)	WRIT28	OK
	IM	DWTWSE,A6	INC STAT CNT
	ABL	ENDIO3	NO SUCCESS
WRIT28	EQU	*
	LD	A2,DWTSQC,A6
	RF(NZ)	WRIT30	NOT FIRST BLOCK

	CF	A5,ERAS	FIRST BLOCK, ERASE
	CWK	A7,CCRTWR-2
	RF(NG)	WRIT30
	ADK	A7,1	TOO MANY RETRIES ON FIRST BLOCK 

WRIT30	LD	A2,DWTMOD,A6
	RF(NN)	WRIT40	SEQ NUMBERS USED 
	LDK	A2,0	NO SEQ NUMBERS
	RF	WRIT50
WRIT40	LDR	A2,A7	ERASE SOME BLOCKS
WRIT50	CF	A5,ERAS 
	ANKL	A1,/0400	SAVE EOT 
	ORS	A1,DWTEOT,A6 
	SUK	A2,1 
	RB(NN)	WRIT50
	ADK	A7,1 
	CWK	A7,CCRTWR
	RF(NG)	WRIT60	OK 
	IM	DWTWRE,A6	INC STAT CNT
	ANKL	A1,/800	INDICATE ERROR
	ABL	ENDIO3	NO MORE RETRIES 
WRIT60	EQU	*
	RB	WRIT15
	EJECT


* 
*	LOAD  /37 
* 

LOAD	LDK	A7,CCRTLD
	LD	A2,DWTHRC,A6	CHECK IF HANDL AT REC
	RF(Z)	ILLORD	NO ILLEGAL ORDER
	LD	A2,ECBCW,A8	GET MODE BIT
	SRC	A2,1 
	ST	A2,DWTMOD,A6	SET SEQ MODE 
LOAD10	CF	A5,LOCK 
	RF(1)	LOAD20	TIME OUT, NOT OPERABLE
	IM	DWTLCK,A6	INDICATE LOCKED 
	RF	RWND

LOAD20	LDR	A2,A1
	SRC	A2,1 
	RF(NN)	ENDIO4	TIME OUT 
	IM	DWTINS,A6	INC STAT CNT
	SUK	A7,1 
	RF(N)	ENDIO4	ENOUGH WITH RETRIES 
	CF	A5,MVCT	TRY AGAIN TO MAKE MATS HAPPY
	CF	A5,MVCR 
	RB	LOAD10
	EJECT


* 
*	REWIND	  /31
* 

RWND	CM	DWTSQC,A6	CLEAR SEQ COUNTER 
	CF	A5,REWD	REWIND TO LEADER
	RF	ENDIO4
	EJECT



* 
*	UNLOAD  /38 
* 

UNLD	CM	DWTSQC,A6	CLEAR SEQ COUNTER 
	CF	A5,REWD	REWIND TO LEADER
UNLD10	CF	A5,UNLK	UNLOCK CASSETTE 
	CM	DWTLCK,A6	INDICATE CAS NOT LOCKED 
	RF	ENDIO6





* 
*	RECOVER  /3F
* 

RECV	LD	A2,DWTLCK,A6	CHECK IF CAS SHOULD BE LOCKED
	RF(Z)	ILLORD	NO NO 
	CF	A5,CCRC	RECOVER RECORDER
	OR	A1,DWTSAV,A6	PUT IN WP,B-SIDE 
	RF	ENDIO7
	EJECT

* 
*	READ MATS  /3D
* 

RDMA	LD	A2,DWTSQC,A6	GET SEQ COUNTER
	RF(NZ)	RDMA10	NOT FIRST BLOCK
	LDK	A2,CCRTSB	FIRST BLOCK SEARCH BOT 
RDMA05	CF	A5,SBOT 
	RF(5)	RDMA07	OK
	IM	DWTMNO,A6	INC STAT CNT
	ABL	ENDIO4	ILL STATUS
RDMA07	EQU	*
	ANKL	A1,/0400
	RF(NZ)	RDMA10	BOT FOUND
	SUK	A2,1	BOT NOT FOUND 
	RF(NN)	RDMA08	OK 
	IM	DWTMBM,A6	INC STAT CNT
	ABL	ENDIOB	NO MORE RETRIES 
RDMA08	EQU	*
	CF	A5,REWD	TRY AGAIN 
	RB	RDMA05

RDMA10	CF	A5,MATS	READ FOR MATS 
	RF(4)	RDMA12 
	IM	DWTMOK+2,A6	INC STAT CNTR(S)
	RF(NZ)	RDMA11
	IM	DWTMOK,A6 
RDMA11	EQU	*
	ABL	READ20	STATUS, DATA OK 
RDMA12	RF(6)	RDMA14 
	IM	DWTMDE,A6	INC STAT CNT
	ABL	ENDIO1	ILL DATA
RDMA14	IM	DWTMIL,A6	INC STAT CNT
	ABL	ENDIO4	ILL STATUS
	EJECT


* 
*	ILLEGAL ORDER SEQUENCE
* 

ILLORD	LDKL	A1,/0080	IND ILL ORDER
	RF	ENDIO6



* 
*	COMMON EXITS FOR ORDER PROCESSORS 
* 

ENDIOE	ORKL	A1,/0040	IND HARDWARE ERROR 

ENDIOC	ANKL	A1,/FCFF	MASK WP, B-SIDE
	LDR	A7,A1	CHECK IF NOT OPERABLE
	SRC	A7,1 
	RF(N)	CKPWF	NOT OP, CHECK IF POWER FAIL
	RF	ENDIO7

ENDIOB	ORKL	A1,/2000	INDICATE BOT MISSING 
	RF	ENDIO4


ENDIO1	IM	DWTSQC,A6	INCR SEQ COUNTER

ENDIO2	EX	DWTRRA,A6	RER A3,CCIOPA 
	SUR	A3,A4	CALC EFFECTIVE LENGTH
	LD	A4,DWTMOD,A6	CHECK IF SEQ NUMBERS 
	RF(N)	*+4	NO 
	SUK	A3,1	YES ADJUST LENGTH 
	ST	A3,ECBEL,A8	SAVE IN ECB 

ENDIO3	ST	A7,ECBCW,A8	SAVE NO OF RETRIES

ENDIO4	OR	A1,DWTSAV,A6	PUT IN WP, B-SIDE
	OR	A1,DWTEOT,A6	PUT IN EOT 

ENDIO5	LDR	A7,A1	CHECK IF NOT OPERABLE
	SRC	A7,1 
	RF(N)	CKPWF	NOT OP, CHECK IF POWER FAIL

ENDIO6	ST	A1,DWTSTA,A6	SAVE STATUS

ENDIO7	CM	DWTREQ,A6	IND NO ACTIVE REQUEST 
	CM	DWTTMK,A6	CLEAR TM INDICATOR
	ABL	DISEND 
	EJECT

* 
*	THE THING WAS NOT OPERABLE, CHECK IF A POWER
*	FAIL IS COMING ALONG. 
* 

CKPWF	SLC	A7,1
	ST	A7,DWTSA7,A6	SAVE STATUS
	LDR	A1,A6	KEEP DWT ADDRESS 
	LDK	A4,DWTPWF
	ADR	A4,A6
	CF	A15,SETIMP	WAIT FOR POWER FAIL
	DATA	CKPWF1,CCPOFF 
	ABL	TDISP


CKPWF1	LDR	A6,A1	RESTORE DWT ADDRESS
	LD	A1,DWTSA7,A6	RESTORE STATUS 
	CM	DWTPWF,A6	IND NO PWF TIMER
	RB	ENDIO7
	EJECT

* 
*	POSI	POSITION TAPE
* 
*	EXIT: 
*	CR:  E=SUCCESS, NE=NO SUCCESS 
* 

POSI	LD	A2,DWTMOD,A6	CHECK SEQ MODE 
	RF(NN)	POSI05	SEQ NUMBERS USED 
	CF	A5,SKPR	NO SEQ NUMBERS
	RF	POSIOK
POSI05	CM	DWTREP,A6	RESET REPOS DOUBLE COUNTER
POSI10	LDK	A2,5	REVERSE FIVE BLOCKS 
POSI20	SUK	A2,1 
	RF(N)	POSI28 
	CF	A5,SKPR 
	RB(5)	POSI20	STATUS OK 
	LD	A2,DWTSQC,A6	NO DATA, SEQ NO GREAT THAN 10 ?
	SUK	A2,8 
	RF(NG)	POSI22	NO 
	IM	DWTPND,A6	INC STAT CNT
	RF	POSIER	POS ERROR
POSI22	EQU	*
	CF	A5,REWD	NO DATA, REWIND 
	CF	A5,SBOT 
	LDR	A2,A1
	SLC	A2,5 
	RF(N)	POSI25	BOT FOUND 
	IM	DWTPBM,A6	INC STAT CNT
	RF	POSIER	POS ERROR
POSI25	EQU	*
	LDKL	A3,-1	CLEAR SEQ NUMBER
	LD	A2,DWTSQC,A6
	RF(Z)	POSIOK	NO BLOCKS ON TAPE 
	RF	POSI40
POSI28	EQU	*
	LDK	A2,4	SET NO OF MAX READ
POSI30	CF	A5,RDSEQN	READ SEQ NUMBER TO A3 
POSI40	ANKL	A1,/184F	TEST STATUS
	RF(Z)	POSI45	READ OK 
	SUK	A2,1	COUNT READ
	RB(P)	POSI30	NOT ALL READ DONE 
	IM	DWTPNS,A6	INC STAT CNT
	RF	POSI80	GIVE IT ONE MORE TRY 
POSI45	EQU	*
	LC	A2,DWTSQC,A6	CALC NO OF BLOCKS TO GO
	SUR	A2,A3
	SUK	A2,1 
	ANK	A2,/FF 
	CWK	A2,10
	RF(NG)	POSI48	WITHIN LIMITS
	IM	DWTPTF,A6	INC STAT CNT
	RF	POSIER	POS ERROR
POSI48	EQU	*
POSI50	SUK	A2,1	POSITION TAPE 
	RF(N)	POSI60 
	CF	A5,RDSEQN 
	RB	POSI50
POSI60	LDKL	A2,/84F	TEST STATUS 
	TM	A1,A2 
	RF(Z)	POSI65	OK
	IM	DWTPIE,A6	INC STAT CNT
	RF	POSI80	GIVE IT ONE MORE TRY 
POSI65	EQU	*
	LDR	A2,A1
	SLC	A2,3	CHECK IF TAPE MARK
	RF(NN)	POSI70	NOT TAPE MARK
	LD	A2,DWTSTA,A6	TAPE MARK, GET LAST STATUS 
	SLC	A2,3 
	RF(N)	POSIOK	OK SHOULD BE TAPE MARK
	IM	DWTPIT,A6	INC STAT CNT
	RF	POSI80	GIVE IT ONE MORE TRY 
POSI70	ADK	A3,1	CHECK SEQ NUMBER
	CC	A3,DWTSQC,A6
	RF(E)	POSIOK 
	IM	DWTPIS,A6	INC STAT CNT, ILL SEQ NO
POSI80	LD	A2,DWTREP,A6	TEST IF ONE MORE TRY SHOULD BE DONE
	RF(Z)	POSI90	YES 
	IM	DWTPDB,A6	INC STAT CNT
	RF	POSIER	POS ERROR
POSI90	IM	DWTREP,A6	ONE MORE TRY
	ABL	POSI10 

POSIOK	ADK	A5,4 
	SUR	A2,A2
	ABR*	A5

POSIER	ADK	A5,4 
	ORK	A1,/0014	INDICATE SEQ, DATA ERR
	ABR*	A5
	EJECT


* 
*	COMMAND HANDLERS
* 
*	ENTRY:  CF  A5,<COM>
* 
*	A3:  IF RBLK,WBLK: REQUESTED LENGTH 
*	A4:  IF RBLK,WBLK: BUFFER ADDRESS 
*	A6:  DWT ADDRESS
* 
*	EXIT:  RTN  A5
* 
*	A1:  STATUS AFTER COMMAND 
*	A2:  RESTORED 
*	A3:  REQUESTED LENGTH IN ECB
*	A4:  BUFFER ADDRESS IN ECB
*	A6:  DWT ADDRESS
*	A7:  RESTORED 
*	A8:  ECB ADDRESS
* 
*	CR:  =0:  NOT ILL STATUS, NOT ILL DATA
*	     =1:  ILL STATUS: HANDL NOT AT TRAY/ NO DATA, TOT, NOT OP 
*	     =2:  NOT ILL STATUS, ILL DATA: DATA ERR, THRUPUT ERR 
* 


STPT	LDK	A1,/04	STEP TRAY 
	RF	COMM

MVCR	LDK	A1,/05	MOVE CAS TO RECORDER
	RF	COMM

MVCT	LDK	A1,/06	MOVE CAS TO TRAY
	RF	COMM

MVCD	LDK	A1,/07	MOVE CAS TO DISCH COMP
	RF	COMM

TEST	LDK	A1,/00	TEST STATUS 
	RF	COMM

SETI	SLL	A1,4	SET INDICATORS
	ANK	A1,/FF 
	ADK	A1,/01 
	RF	COMM

LOCK	LDK	A1,/02	LOCK CASSETTE 
	RF	COMM

UNLK	LDK	A1,/03	UNLOCK CASSETTE 
	RF	COMM

SBES	LDK	A1,/08	SEARCH BOT AND ERASE
	RF	COMM

ERAS	LDK	A1,/09	ERASE 
	RF	COMM

WBLK	LDK	A1,/0A	WRITE BLOCK 
	ORKL	A3,/4000	INDICATE WRITE TO IOP
	RF	RBLK10

WTMK	LDK	A1,/0B	WRITE TAPE MARK 
	RF	COMM

SBOT	LDK	A1,/0C	SEARCH BOT
	RF	COMM

MATS	LDK	A1,/1D	READ FOR MATS 
	RF	RBLK10

RBLK	LDK	A1,/0D	READ BLOCK
RBLK10	EX	DWTWRL,A6	GIVE REQUESTED LENGTH 
	EX	DWTWRA,A6	AND BUFFER ADDRESS TO IOP 
	RF	COMM

SKPR	LDK	A1,/0E	SKIP REVERSE
	RF	COMM

REWD	LDK	A1,/0F	REWIND TO LEADER
	LDKL	A3,-600	60 SECONDS TIME OUT 
	RF	COMM10

COMM	LDKL	A3,-150	15 SECONDS TIME OUT 

COMM10	ST*	A3,DWTTIM,A6	SET TIME OUT
	CM	DWTINT,A6	IND INT ALLOWED 
	EX	DWTIOS,A6	CIO A1,1,CHCCX
	RF(A)	COMM20 
	RF(3)	COMM15	NO INTERFACE IN COMPUTER
	LDK	A1,9 
	CF	A15,HALT	MONITOR HALT 
COMM15	LD	A3,ECBRL,A8	RESTORE REG 
	LD	A4,ECBBA,A8 
	ADK	A5,4	UPDATE A5 STACK POINTER 
	LDKL	A1,1	INDICATE NOT OPERABLE
	ABR*	A5
COMM20	ST	A2,DWTSA2,A6	SAVE REGISTERS 
	ST	A5,DWTSA5,A6
	ST	A7,DWTSA7,A6
	ABL	TDISP	GO TO DISPATCHER 
	EJECT


* 
*	TIMOUT	ENTERED IF TIME OUT DURING COMMAND 
* 

TIMOUT	LD	A2,DWTINT,A1	CHECK IF INT ALLOWED 
	RF(NZ)	TOUT10	NO 
	EX	DWTIOH,A1	YES CIO HALT
	C1S	DWTTOT,A1	IND TIME OUT 
TOUT10	LDKL	A2,-1000	RESTART TIMER
	ST*	A2,DWTTIM,A1 
	ABL	TDISP



	EJECT


* 
*	IHCC1-3	INTERRUPT HANDLER CASSETTE CHANGER
* 

IHCC1	CF	A15,SAVE8	ENTRY FOR CC1
	ST	P,INTSAV	SAVE LAST INT. 
	LDKL	A6,DWCC01 
	RF	IHCC10

IHCC2	CF	A15,SAVE8	ENTRY FOR CC2
	ST	P,INTSAV	SAVE LAST INT. 
	LDKL	A6,DWCC02 
	RF	IHCC10

IHCC3	CF	A15,SAVE8	ENTRY FOR CC3
	ST	P,INTSAV	SAVE LAST INT. 
	LDKL	A6,DWCC03 

IHCC10	EX	DWTSST,A6	SST A1,CHCCX
	RF(A)	IHCC20 
	LDK	A1,9 
	CF	A15,HALT	MONITOR HALT 
IHCC20	C1S	DWTINT,A6	CHECK IF ILL INTERRUPT 
	RF(NZ)	IHCC30
	LDK	A1,5 
	CF	A15,HALT	MONITOR HALT 

IHCC30	LD	A8,DWTECB,A6	GET ECB ADDRESS
	LD	A5,DWTSA5,A6	RESTORE STACK POINTER

IHCC40	LD	A2,DWTTOT,A6	CHECK IF TIME OUT
	RF(Z)	IHCC50	NO
	ORKL	A1,/0040	YES IND IN STATUS
	CM	DWTTOT,A6	RESET TOT INDICATOR 

IHCC50	LDK	A2,/00 
	LDKL	A3,/0847	CHECK IF ILL STATUS, DATA
	TM	A1,A3 
	RF(Z)	IHCC60	STATUS, DATA OK 
	LDK	A2,/40 
	SUK	A3,/6
	TM	A1,A3 
	RF(NZ)	IHCC60	ILL STATUS 
	LDK	A2,/80	ILL DATA

IHCC60	SLC	A2,2 
	ST	A2,2,A5	UPDATE CR 
	LD	A3,ECBRL,A8	RESTORE REGISTERS 
	LD	A4,DWTMOD,A6	CHECK IF SEQ NUMBERS 
	RF(N)	*+4	NO 
	ADK	A3,1	YES ADJUST LENGTH 
	LD	A4,ECBBA,A8 
	LD	A2,DWTSA2,A6
	LD	A7,DWTSA7,A6
	RTN	A5 
	EJECT


* 
*	CXDRON	ENTRIES AT POWER ON RECOVERY 
* 

C1DRON	CF	A15,SAVE8	RECOVER CC1 
	LDKL	A6,DWCC01 
	RF	CCON

C2DRON	CF	A15,SAVE8	RECOVER CC2 
	LDKL	A6,DWCC02 
	RF	CCON

C3DRON	CF	A15,SAVE8	RECOVER CC3 
	LDKL	A6,DWCC03 
	RF	CCON

CCON	CM	DWTST,A6	SET BUSY DWT 
	LDR	A1,A6	SAVE DWT ADDRESS 
	LDK	A4,DWTTIM	CHECK IF COM TIMER STARTED 
	ADR	A4,A6
	LDR*	A3,A4 
	RF(NZ)	CCON10	YES
	CF	A15,SETIMP	START COMMAND TIMER
	DATA	TIMOUT,1000 

CCON10	LDK	A4,DWTPWF	CHECK IF PWF TIMER ON
	ADR	A4,A6
	LDR*	A3,A4 
	RF(NZ)	CCON20	YES
	CF	A15,SETIMP	NO START IT
	DATA	CCON30,CCPON
	RF	CCON25

CCON20	LDKL	A2,-CCPON	WAIT FOR EVERYTHING 
	STR	A2,A3
	LDKL	A2,CCON30 
	LD	A4,-2,A3
	ST	A2,2,A4 
CCON25	ABL	TDISP

CCON30	LDR	A6,A1	RESTORE DWT ADDRESS
	LDK	A5,DWTSB2	LOAD STACK POINTER 
	ADR	A5,A6
	LD	A8,DWTECB,A6	LOAD ECB ADDRESS 
	CM	DWTPWF,A6	IND NO PWF TIMER
	LD	A2,DWTLCK,A6	CHECK IF CAS SHOULD BE LOCKED
	RF(Z)	CCON40	NO
	CF	A5,CCRC	RECOVER RECORDER
CCON40	LD	A2,DWTREQ,A6	CHECK IF ACTIVE REQUEST
	ABL(Z)	DISEND	NO RETURN
	ABL	CCDA40	REPEAT ACTIVE REQUEST 
	EJECT


* 
*	CCRC	RECOVERY ROUTINE. THE CASSETTE IS LOCKED (IF CORR FLAG)
*		AND THE TAPE IS POSITIONED BEFORE THE BLOCK GIVEN BY THE 
*		BLOCK SEQUENCE COUNTER. IF UNSUCCESSFUL DUE TO INCORRECT 
*		SEQUENCE NUMBERS ON THE TAPE, THE CASSETTE IS UNLOADED.
* 

CCRC	LD	A2,DWTMOD,A6	CHECK SEQ MODE 
	RF(N)	CCRCUK	NO SEQ NUMBERS
	CF	A5,LOCK 
	RF(1)	CCRCUK	TIME OUT, NOT OPERABLE
	LD	A7,DWTSQC,A6	GET SEQUECE COUNTER
	ABL(Z)	REWD	NO BLOCKS ON TAPE
	ANK	A7,/FF 

	LDK	A2,CCRBLK	REVERSE TAPE TO AVOID ANY OLD BLOCKS 

CCRC10	CF	A5,SKPR 
	SLC	A1,4	CHECK IF DATA 
	RF(N)	CCRC20	NO DATA 
	SUK	A2,1 
	RB(NZ)	CCRC10

	CF	A5,RDSEQN	READ SEQ NUMBER 
	CF	A5,RDSEQN 
	LDR	A2,A1
	SLC	A2,3	CHECK IF TAPE MARK
	RF(NN)	CCRC30	NOT TAPE MARK
	LDK	A2,3	TAPE MARK, TRY PREVIOUS BLOCK 
	RB	CCRC10

CCRC20	CF	A5,REWD	REWIND AND SEARCH BOT 
	CF	A5,SBOT 
	LDKL	A3,-1	CLEAR SEQ NUMBER

CCRC30	ANK	A1,/004F	CHECK IF TOT, INC LENGTH, DAT ERR, THRU ERR, NOT OP 
	RF(NZ)	CCRCUK	ILL CONDITIONS 
	ADK	A3,2	CALC NO OF BLOCKS TO GO 
	SUR	A7,A3	 
	CCK	A7,/8000	COMPARE A7,128
	RF(L)	CCRC60	GO FORWARD

CCRC40	NGR	A7,A7	TRY REVERSE
	ANK	A7,/FF 
	CWK	A7,CCRCBL
	RF(G)	CCRCUK	TOO MANY BLOCKS TO GO 
CCRC50	SUK	A7,1 
	RF(N)	CCRC80 
	CF	A5,SKPR 
	RB	CCRC50

CCRC60	ANK	A7,/FF	TRY FORWARD 
	CWK	A7,CCRCBL
	RF(G)	CCRCUK	TOO MANY BLOCKS TO GO 
CCRC70	SUK	A7,1 
	RF(N)	CCRC80 
	CF	A5,RDSEQN 
	RB	CCRC70

CCRC80	CF	A5,RDSEQN	READ SEQ NUMBER TO A3 
	LDKL	A4,/E8FF	CHECK IF ILLEGAL CONDITIONS
	TM	A1,A4 
	RF(NZ)	CCRCUK	YES TO BAD 
	LDR	A4,A1	CHECK IF TAPE MARK 
	SLC	A4,3 
	RF(NN)	CCRC90	NOT TAPE MARK
	LD	A4,DWTSTA,A6	GET LAST STATUS
	SLC	A4,3 
	RF(N)	CCRCOK	OK SHOULD BE TAPE MARK

CCRCUK	ABL	UNLK	AND UNLOCK CASSETTE 

CCRC90	ADK	A3,1	CHECK SEQ NUMBER
	CC	A3,DWTSQC,A6
	RB(NE)	CCRCUK	NOT EQUAL

CCRCOK	RTN	A5	OK RECOVERY READY 
	EJECT


* 
*	RDSEQN	READ SEQ NUMBER TO A3
* 

RDSEQN	LDKL	A3,256	SET UP BUFFER
	LD	A4,DWTBUF,A6
	CF	A5,RBLK	READ BLOCK
	EX	DWTRRA,A6	RER  A3,CCIOPA
	SUK	A3,1	GET SEQ NUMBER
	LCR	A3,A3
	ANK	A3,/FF 
	RTN	A5 
	EJECT


* 
*	LEGAL ORDER TAB 
* 

CCTAB	DATA	/0206,/3D00,/2231,/3738
	DATA	/3F10,/1112,/1314,/3E00 

CCLEN	EQU	*-CCTAB-1 

CCORD	DATA	READ,WRIT,RDMA,TSTR,WRTM,RWND,LOAD,UNLD
	DATA	RECV,TCSI,ISRT,RTRN,EJCT,FEED,RSET

CCNOL	EQU	*-12-12 





*	DWCC01	DEVICE WORK TABLE CC1

DWCC01	DATA	CCDA	DWTCHP 
	DATA	/8000	DWTST 
	DATA	0	DWTECB
	DATA	0	DWTOR 
	DATA	DWCC01	DWTADR 
	DATA	0	DWTTAB
	DATA	0	DWTWAT
	DATA	0	DWTTQ 
	DATA	0	DWTREQ  REQ ORDER POINTER 
	DATA	0	DWTSAV  SAVED WP,BSIDE
	DATA	0	        SUBR STACK
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0	DWTSB2  STACK BASE
	DATA	0	DWTSA2  SAVE AREA FOR REG 
	DATA	0	DWTSA5
	DATA	0	DWTSA7
	DATA	/FFFF	DWTINT  /0: INT ALLOWED 
	DATA	0	DWTMOD  BIT0: SEQ MODE
	DATA	0	DWTSQC  SEQ COUNTER 
	DATA	0	DWTTOT  TIME OUT FLAG 
	DATA	0	DWTTIM  TIMER ADDRESS 
	DATA	0	DWTHRC  HANDL AT REC FLAG 
	DATA	0	DWTLCK  CAS LOCKED FLAG 
	DATA	0	DWTSTP  TRAY STEPPED FLAG 
	DATA	0	DWTPWF  PWF TIMER ADDRESS 
	WER	A3,C1IOPL	DWTWRL  I/O INSTRUCTIONS 
	WER	A4,C1IOPA	DWTWRA 
	RER	A3,C1IOPA	DWTRRA 
	CIO	A1,1,CHCC1	DWTIOS
	CIO	A1,0,CHCC1	DWTIOH
	SST	A1,CHCC1	DWTSST
	DATA	0	DWTSTA  LAST STATUS 
	DATA	0	DWTEOT  EOT INDICATOR 
	DATA	CCBUF1	DWTBUF  BUFFER ADDRESS 
* STATISTIC COUNTERS FOR WRITE
	DATA	0	DWTWBM BOT MISSING
	DATA	0	DWTWIL ILLEGAL STATUS /0841 
	DATA	0	DWTWSE SEQ ERROR = POS ERROR /0010
	DATA	0	DWTWRE RETRY ERROR = NORM DATA ERROR /0004
	DATA	0,0	DWTWOK WRITING OK (32 BITS) 
* STATISTIC COUNTERS FOR READ 
	DATA	0	DWTRNO NOT OPERABEL 
	DATA	0	DWTRBM BOT MISSING
	DATA	0	DWTRIL ILLEGAL STATUS /0841 
	DATA	0,0	DWTRSE SEQ ERROR /0010 (32 BITS)
	DATA	0	DWTRRE RETRY ERROR = NORMAL DATA ERROR /000E
	DATA	0,0	DWTROK READING OK (32 BITS) 
* STATISTIC COUNTERS FOR CONTROL READ (READ MATS) 
	DATA	0	DWTMNO NOT OPERABLE 
	DATA	0	DWTMBM BOT MISSING
	DATA	0	DWTMIL ILLEGAL STATUS /0841 
	DATA	0	DWTMDE DATA ERROR (NO RETRY PERF) /000E 
	DATA	0,0	DWTMOK CONTROL READING OK (32 BITS) 
* POS COUNTER 
	DATA	0	DWTREP POS ONE MORE TRY COUNTER 
* STATISTIC COUNTERS FOR POS
	DATA	0	DWTPND NO DATA = PPOS ERR 
	DATA	0	DWTPBM BOT MISSING = POS ERR
	DATA	0	DWTPNS NO SEQ NO FOUND = 2 TRIES
	DATA	0	DWTPTF TO FARE AWAY = POS ERR 
	DATA	0	DWTPIT PREV=ILL TM = 2 TRIES
	DATA	0	DWTPIS PREV=ILL SEQ NO  = 2 TRIES 
	DATA	0	DWTPIE PREV =ILL DAT ERR = 2 TRIES
	DATA	0	DWTPDB ERROR AFTER 2 TRIES
* 
	DATA	0	DWTTMK TAPE MARK INDICATOR
* 
* STATISTIC COUNTERS FOR CHANGER
	DATA	0	DWTINS INSERT FAILURE 
	DATA	0	DWTRET RETURN FAILURE 
* 
CCBUF1	RES	128	BUFFER FOR RDSEQN
*	DWCC02	DEVICE WORK TABLE CC2

DWCC02	DATA	CCDA	DWTCHP 
	DATA	/8000	DWTST 
	DATA	0	DWTECB
	DATA	0	DWTOR 
	DATA	DWCC02	DWTADR 
	DATA	0	DWTTAB
	DATA	0	DWTWAT
	DATA	0	DWTTQ 
	DATA	0	DWTREQ  REQ ORDER POINTER 
	DATA	0	DWTSAV  SAVED WP,BSIDE
	DATA	0	        SUBR STACK
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0	DWTSB2  STACK BASE
	DATA	0	DWTSA2  SAVE AREA FOR REG 
	DATA	0	DWTSA5
	DATA	0	DWTSA7
	DATA	/FFFF	DWTINT  /0: INT ALLOWED 
	DATA	0	DWTMOD  BIT0: SEQ MODE
	DATA	0	DWTSQC  SEQ COUNTER 
	DATA	0	DWTTOT  TIME OUT FLAG 
	DATA	0	DWTTIM  TIMER ADDRESS 
	DATA	0	DWTHRC  HANDL AT REC FLAG 
	DATA	0	DWTLCK  CAS LOCKED FLAG 
	DATA	0	DWTSTP  TRAY STEPPED FLAG 
	DATA	0	DWTPWF  PWF TIMER ADDRESS 
	WER	A3,C2IOPL	DWTWRL  I/O INSTRUCTIONS 
	WER	A4,C2IOPA	DWTWRA 
	RER	A3,C2IOPA	DWTRRA 
	CIO	A1,1,CHCC2	DWTIOS
	CIO	A1,0,CHCC2	DWTIOH
	SST	A1,CHCC2	DWTSST
	DATA	0	DWTSTA  LAST STATUS 
	DATA	0	DWTEOT  EOT INDICATOR 
	DATA	CCBUF2	DWTBUF  BUFFER ADDRESS 
* STATISTIC COUNTERS FOR WRITE
	DATA	0	DWTWBM BOT MISSING
	DATA	0	DWTWIL ILLEGAL STATUS /0841 
	DATA	0	DWTWSE SEQ ERROR = POS ERROR /0010
	DATA	0	DWTWRE RETRY ERROR = NORM DATA ERROR /0004
	DATA	0,0	DWTWOK WRITING OK (32 BITS) 
* STATISTIC COUNTERS FOR READ 
	DATA	0	DWTRNO NOT OPERABEL 
	DATA	0	DWTRBM BOT MISSING
	DATA	0	DWTRIL ILLEGAL STATUS /0841 
	DATA	0,0	DWTRSE SEQ ERROR /0010 (32 BITS)
	DATA	0	DWTRRE RETRY ERROR = NORMAL DATA ERROR /000E
	DATA	0,0	DWTROK READING OK (32 BITS) 
* STATISTIC COUNTERS FOR CONTROL READ (READ MATS) 
	DATA	0	DWTMNO NOT OPERABLE 
	DATA	0	DWTMBM BOT MISSING
	DATA	0	DWTMIL ILLEGAL STATUS /0841 
	DATA	0	DWTMDE DATA ERROR (NO RETRY PERF) /000E 
	DATA	0,0	DWTMOK CONTROL READING OK (32 BITS) 
* POS COUNTER 
	DATA	0	DWTREP POS ONE MORE TRY COUNTER 
* STATISTIC COUNTERS FOR POS
	DATA	0	DWTPND NO DATA = PPOS ERR 
	DATA	0	DWTPBM BOT MISSING = POS ERR
	DATA	0	DWTPNS NO SEQ NO FOUND = 2 TRIES
	DATA	0	DWTPTF TO FARE AWAY = POS ERR 
	DATA	0	DWTPIT PREV=ILL TM = 2 TRIES
	DATA	0	DWTPIS PREV=ILL SEQ NO  = 2 TRIES 
	DATA	0	DWTPIE PREV =ILL DAT ERR = 2 TRIES
	DATA	0	DWTPDB ERROR AFTER 2 TRIES
* 
	DATA	0	DWTTMK TAPE MARK INDICATOR
* 
* STATISTIC COUNTERS FOR CHANGER
	DATA	0	DWTINS INSERT FAILURE 
	DATA	0	DWTRET RETURN FAILURE 
* 
CCBUF2	RES	128	BUFFER FOR RDSEQN
*	DWCC03	DEVICE WORK TABLE CC3

DWCC03	DATA	CCDA	DWTCHP 
	DATA	/8000	DWTST 
	DATA	0	DWTECB
	DATA	0	DWTOR 
	DATA	DWCC03	DWTADR 
	DATA	0	DWTTAB
	DATA	0	DWTWAT
	DATA	0	DWTTQ 
	DATA	0	DWTREQ  REQ ORDER POINTER 
	DATA	0	DWTSAV  SAVED WP,BSIDE
	DATA	0	        SUBR STACK
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0	DWTSB2  STACK BASE
	DATA	0	DWTSA2  SAVE AREA FOR REG 
	DATA	0	DWTSA5
	DATA	0	DWTSA7
	DATA	/FFFF	DWTINT  /0: INT ALLOWED 
	DATA	0	DWTMOD  BIT0: SEQ MODE
	DATA	0	DWTSQC  SEQ COUNTER 
	DATA	0	DWTTOT  TIME OUT FLAG 
	DATA	0	DWTTIM  TIMER ADDRESS 
	DATA	0	DWTHRC  HANDL AT REC FLAG 
	DATA	0	DWTLCK  CAS LOCKED FLAG 
	DATA	0	DWTSTP  TRAY STEPPED FLAG 
	DATA	0	DWTPWF  PWF TIMER ADDRESS 
	WER	A3,C3IOPL	DWTWRL  I/O INSTRUCTIONS 
	WER	A4,C3IOPA	DWTWRA 
	RER	A3,C3IOPA	DWTRRA 
	CIO	A1,1,CHCC3	DWTIOS
	CIO	A1,0,CHCC3	DWTIOH
	SST	A1,CHCC3	DWTSST
	DATA	0	DWTSTA  LAST STATUS 
	DATA	0	DWTEOT  EOT INDICATOR 
	DATA	CCBUF3	DWTBUF  BUFFER ADDRESS 
* STATISTIC COUNTERS FOR WRITE
	DATA	0	DWTWBM BOT MISSING
	DATA	0	DWTWIL ILLEGAL STATUS /0841 
	DATA	0	DWTWSE SEQ ERROR = POS ERROR /0010
	DATA	0	DWTWRE RETRY ERROR = NORM DATA ERROR /0004
	DATA	0,0	DWTWOK WRITING OK (32 BITS) 
* STATISTIC COUNTERS FOR READ 
	DATA	0	DWTRNO NOT OPERABEL 
	DATA	0	DWTRBM BOT MISSING
	DATA	0	DWTRIL ILLEGAL STATUS /0841 
	DATA	0,0	DWTRSE SEQ ERROR /0010 (32 BITS)
	DATA	0	DWTRRE RETRY ERROR = NORMAL DATA ERROR /000E
	DATA	0,0	DWTROK READING OK (32 BITS) 
* STATISTIC COUNTERS FOR CONTROL READ (READ MATS) 
	DATA	0	DWTMNO NOT OPERABLE 
	DATA	0	DWTMBM BOT MISSING
	DATA	0	DWTMIL ILLEGAL STATUS /0841 
	DATA	0	DWTMDE DATA ERROR (NO RETRY PERF) /000E 
	DATA	0,0	DWTMOK CONTROL READING OK (32 BITS) 
* POS COUNTER 
	DATA	0	DWTREP POS ONE MORE TRY COUNTER 
* STATISTIC COUNTERS FOR POS
	DATA	0	DWTPND NO DATA = PPOS ERR 
	DATA	0	DWTPBM BOT MISSING = POS ERR
	DATA	0	DWTPNS NO SEQ NO FOUND = 2 TRIES
	DATA	0	DWTPTF TO FARE AWAY = POS ERR 
	DATA	0	DWTPIT PREV=ILL TM = 2 TRIES
	DATA	0	DWTPIS PREV=ILL SEQ NO  = 2 TRIES 
	DATA	0	DWTPIE PREV =ILL DAT ERR = 2 TRIES
	DATA	0	DWTPDB ERROR AFTER 2 TRIES
* 
	DATA	0	DWTTMK TAPE MARK INDICATOR
* 
* STATISTIC COUNTERS FOR CHANGER
	DATA	0	DWTINS INSERT FAILURE 
	DATA	0	DWTRET RETURN FAILURE 
* 
CCBUF3	RES	128	BUFFER FOR RDSEQN


	END

Full view