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

⟦754073d3f⟧

    Length: 39382 (0x99d6)
    Notes: pts_type(SC)
    Names: »DRFD01.SC«

Derivation

└─⟦c47f25c27⟧ Bits:30009688 Philips computer tape "600318"
    └─⟦this⟧ »M:KMDV/DRFD01.SC« 

PTS(SC)

	IDENT DRFD01 	REL 8.2 78-09-15  870105040820 

			 LOAD BUG (EOD=74001)
			REL 8.1 78-04-121
* 
**********************************************
* 
*  PHILIPS TERMINAL SYSTEM PTS
* 
*  DRFD01 = DRIVER FOR FLEXIBLE DISK
* 
* 
* 
* 
* 
* 
********************************************* 
*  THIS DISK DRIVER HANDLES UP TO FOUR DAISY
*  CHAINED FLEXIBLE DISK DRIVES PTS 6879, 
*  CONNECTED TO CPU VIA CHANNEL UNIT CHFD ON
*  MULTIPLEX OR PROGRAMMED CHANNEL
* 
********* 
* 
*  ORDERS:
* 
*  /00   TEST STATUS
*  /01   PHYSICAL READ
*  /02   SEQUENTIAL READ                       -IBM DISC ONLY-
*  /05   BASIC WRITE
*  /06   SEQUENTIAL WRITE                       -IBM DISC ONLY- 
*  /11   PHYSICAL READ
*  /15   PHYSICAL WRITE 
*  /1A   SEARCH KEY 
*  /24   WRITE DELETED DATA 
*  /26   LOCK 
*  /31   REWIND                                 -IBM DISC ONLY- 
*  /37   LOAD 
*  /38   UNLOAD 
* 
********* 
* 
*  ENTRY PARAMETERS:
* 
*   A5   STACK BASE 
*   A6   DWT-ADDRESS
*   A7   ORDER
*   A8   ECB-ADDRESS
	EJECT
* 
*********** 
*         * 
* ENTRIES * 
*         * 
*********** 
* 
	ENTRY 	FDADR	ACTIVATION ADDRESS
	ENTRY	IHFD	INTERRUPT HANDLER 
	ENTRY	FDON	RECOVERY ROUTINE
	ENTRY	DWFD01	DWT-ADDRESS 
* 
************* 
*           * 
* EXTERNALS * 
*           * 
************* 
* 
	EXTRN	TDISP	DISPATCHER 
	EXTRN	TENDIO	ENDIO 
	EXTRN	DISIOE	REQUEST ERROR 
	EXTRN	DWTOR	ORDER
	EXTRN	DWTECB	ECB-ADDRESS 
	EXTRN	DWTST	DWT STATUS 
	EXTRN	SAVE8	SAVE A1-A8 ON A15 STACK
	EXTRN	SETIMP	TIMER 
	EXTRN	INIFLG	INITIALIZATION FLAG 
	EXTRN	INTSAV	INTERRUPT SAVE AREA 
	EXTRN	TASCII	EBCDIC TO ASCII TAB 
	EXTRN	TEBCDIC	ASCII TO EBCDIC TAB
	EXTRN	ECBBA	ECB BUFFER ADDRESS 
	EXTRN	ECBRL	ECB REQUESTED LENGTH 
	EXTRN	ECBEL	ECB EFFECTIVE LENGTH 
	EXTRN	ECBRC	ECB RETURN CODE
	EXTRN	ECBCW	ECB CONTROL WORD 
* 
************************
*                      *
* CONDITIONAL ASSEMBLY *
*                      *
************************
* 
* MULTIPLEX CHANNEL INSTEAD OF PROGRAMMED 
* CHANNEL BY SETTING X:A = 0
* 
X:A	EQU	1 
CHAN	EQU	1
* 
* FD DRIVER CAN BE ADAPTED FOR DATA MANAGEMENT
* BY SETTING X:B = 1
* 
X:B	EQU	0 
DAMA	EQU	1
* 
*  IBM LABELLED DISC HANDLING MAY BE INCLUDED BY SETTING
*   X:C = 1 
* 
X:C	EQU	0 
IBM	EQU	1 
* 
*  IF INIMON IS TO BE USED, DRIVER SHOULD BE
*  ADAPTED FOR RESTART BY SETTING X:D = 1 
* 
X:D	EQU	0 
INI	EQU	0 
	EJECT
* 
************* 
*           * 
* CONSTANTS * 
*           * 
************* 
* 
CUADR	EQU	09	CONTROL UNIT ADDRESS 
MUXADR	EQU	CUADR+CUADR	MUX-ADDRESS
STALEN	EQU	512	MAX STANDARD SEC. LEN. 
TOSLEN	EQU	410	MAX TOSS SEC. LENGTH 
IBMLEN	EQU	128	IBM SECTOR LENGTH
BOE	EQU	28	BEGIN OF EXTENT POSITION 
EOE	EQU	34	END OF EXTENT POSITION 
EOD	EQU	74	END OF DATA POSITION 
TIME	EQU	20	DELAY - POWER ON
********************
*                  *
* DWT-DISPLACEMENTS*
*                  *
********************
* 

DWTA2	EQU	/12 
DWTA3	EQU	/14 
DWTA5	EQU	/16 
DWTSB2	EQU	/1E	STACK BASE 
* 
**********
*        *
* TABLES *
*        *
**********
* 
FDADR	DATA	FDAD	ACTIVATION ADDRESS
* 
	EJECT
* 
**************
*            *
* ACTIVATION *
*            *
**************
* 
FDAD	EQU	*	ACTIVATION ENTRY 
	LDK	A3,0 
	LC	A3,DWTOR,A6	INDEX 
	LDR	A2,A3	SAVE FOR FDIX
* 
*  PUT DRIVE NO IN CIO-INSTRUCTION
* 
	CF	A5,SETCIO	A3,A4 AFFECTED
	CM	DWTRCW,A6	SAVE RETURN CODE WORD 
* 
*  CHECK IF LOCKED
* 
	LD	A1,DWTLC,A6	 LOCK INDICATOR 
	CF	A5,FDIX	GET BIT MASK IN A3
	ST	A3,DWTA3,A6	SAVE DRIVE INDEX MASK 
	ANR	A1,A3
	RF(NZ)	FD:ORD	LOCKED 
	LDR	A1,A7
	SUK	A1,/26 
	RF(Z)	LOAD	LOCK ORDER
	SUK	A1,/11 
	RF(Z)	LOAD	LOAD ORDER
	LDKL	A1,/8001	RETURN CODE
	RF	FD:090	ENDIO
	EJECT
* 
*   ORDER?
* 
FD:ORD	EQU	*
* 
	LDR	A1,A7
	RF(Z)	FD:070	TEST STATUS 
	SUK	A1,1 
	RF(Z)	FD:040	PHYSICAL READ 
	SUK	A1,4 
	RF(Z)	FD:010	BASIC WRITE 
	SUK	A1,12
	RF(Z)	FD:040	PHYSICAL READ 
	SUK	A1,4 
	RF(Z)	FD:020	PHYSICAL WRITE
	SUK	A1,15
	RF(Z)	FD:030	WRITE DELETED DATA
	SUK	A1,/14 
	ABL(Z)	UNLOAD	UNLOAD ORDER 
	IFT	IBM=1
	ADK	A1,/36 
	ABL(Z)	SQREAD	SEQUENTIAL READ
	SUK	A1,4 
	ABL(Z)	SQWRIT	SEQUENTIAL WRITE 
	SUK	A1,/2B 
	ABL(Z)	REWIND	REWIND 
	XIF
	IFT	DAMA+IBM=0 
	ADK	A1,30
	RF(Z)	FD:050	SEARCH KEY
	XIF

FD:DIS	EQU	*
	ABL	DISIOE	REQUEST ERROR 
	EJECT
* 
*************** 
*             * 
* BASIC WRITE * 
*             * 
*************** 
* 
FD:010	CF	A5,BIO
	ORK	A2,1 
FD:015	EQU	*
	IFT	DAMA+IBM=2 
	LD	A1,DWTLAB,A6
	AN	A1,DWTA3,A6 
	RF(Z)	FD:018	NOT IBM 
	XIF
	IFT	IBM=1
	LDR	A7,A3	NO OF CHAR. TO BE TRANSFORMED
	CF	A5,EBCDIC 
FD:018	EQU	*
	XIF
	CF	A5,FD:WRITE	PERFORME WRITE
	RF	FD:048	GOTO FD:RC 
* 
******************
*                *
* PHYSICAL WRITE *
*                *
******************
* 
FD:020	CF	A5,BIO
	ORK	A2,5	INSERT BIO BITS 13-15 
	RB	FD:015
	EJECT
* 
**********************
*                    *
* WRITE DELETED DATA *
*                    *
**********************
* 
FD:030	CF	A5,BIO
	ORK	A2,6 
	RB	FD:015
* 
***************** 
*               * 
* PHYSICAL READ * 
*               * 
***************** 
* 
FD:040	CF	A5,BIO:RE 
	IFT	DAMA+IBM=2 
	LD	A1,DWTLAB,A6
	AN	A1,DWTA3,A6 
	RF(Z)	FD:042	TOSS DISC 
	XIF
	IFT	IBM=1
	LDKL	A4,BUF
FD:042	EQU	*
	XIF
FD:045	CF	A5,FD:REA	PERFORM READ
	IFT	DAMA+IBM=2 
	LD	A1,DWTLAB,A6
	AN	A1,DWTA3,A6 
	RF(Z)	FD:047	NOT IBM 
	XIF
	IFT	IBM=1
	LD	A7,ECBRL,A8	REQ LEN 
	LD	A4,ECBBA,A8	ASCII OUTPUT ADDRESS
	CF	A5,ASCII
FD:047	EQU	*
	XIF
FD:048	EQU	*
	ABL	FD:RC
	EJECT
	IFT	DAMA+IBM=0 
* 
**************
*            *
* SEARCH KEY *
*            *
**************
* 
FD:050	EQU	*
	LD	A4,10,A8	KEY AREA ADDRESS 
	LDR*	A2,A4	KEY AREA LENGTH 
	LDR	A1,A2
	ABL(NP)	END:10	ILLEGAL LENGTH
	SUK	A1,128 
	ABL(P)	END:10	ILLEGAL LENGTH 
	LDR	A3,A2
* 
*   IF ODD CHANGE TO EVEN NO OF BYTES 
* 
	ADK	A3,1 
	SRL	A3,1 
	SLL	A3,1 
* 
	SLL	A2,3 
	ORK	A2,7	BIO 
	ADK	A3,4 
	ADK	A4,2	KEY ADDRESS 
	CF	A5,FD:WRI	SEARCH KEY
	LDR	A3,A3	RETURN CODE
	RB(NZ)	FD:048
* 
*  READ RECORD WITH KEY COMMAND 
* 
FD:060	EQU	*
	LDKL	A2,/8004	BIO
	LD	A3,4,A8	REQUESTED LENGTH
	CWK	A3,130 
	ABL(NE)	END:10	ILLEGAL LENGTH
	LD	A4,2,A8	BUFFER ADDRESS
	RB	FD:045
	XIF
* 
*************** 
*             * 
* TEST STATUS * 
*             * 
*************** 
* 
FD:070	EQU	*
	LDKL	A2,/FFF9	BIO DUMMY
	CF	A5,FD:WRI 
	ANKL	A3,/0201	WRITE PROTECT? 
	LDR	A1,A3
	IFF	DAMA+IBM=0 
	CF	A5,VOLADR	GET VOL NAME ADDR IN A2 
	ST	A2,ECBCW,A8	STORE IN CONTROL WORD 
	XIF
	IFT	IBM=1
	LD	A3,DWTLAB,A6	LABEL INDICATOR
	AN	A3,DWTA3,A6 
	RF(Z)	FD:080	TOSS LABEL
	ORK	A1,/20	SET BIT 10 (IBM)
FD:080	EQU	*
	XIF
FD:090	ABL	END:IO 
	EJECT
* 
********
*      *
* LOAD *
*      *
********
* 
LOAD	EQU	*
	LDK	A2,/14	LOCK
	CF	A5,FD:REA 
	ANK	A3,1 
	RF(NZ)	LOA:80	NOT OPERABLE 
	IFT	DAMA+IBM=2 
* 
*  CHECK IF TOSS/IBM LABEL
* 
	LDK	A2,0	BIO 
	LDKL	A4,BUF
	LDK	A3,38	NO OF BYTES
	CF	A5,FD:REA 
	CF	A5,LD:RC
	ADK	A4,34
	LDR*	A2,A4 
	CWK	A2,'TO'
	RF(NE)	LOA:10	IBM LABEL PREASSUMED 
	ADK	A4,2 
	LDR*	A2,A4 
	CWK	A2,'SS'
	RF(NE)	LOA:10	IBM LABEL
	XIF
	IFT	DAMA=1 
* 
*  READ VOLUME NAME 
* 
	LDK	A3,8	LENGTH
	LDK	A2,0	BIO 
	C1	A1,DWTA3,A6	1 COMP. DRIVE BIT MASK
	ANS	A1,DWTLAB,A6	INDICATE TOSS LABEL 
	RF	LOA:15
	XIF
	IFT	IBM=1
LOA:10	LDK	A3,10	LENGTH 
	LDK	A2,/30	BIO 
	LD	A1,DWTA3,A6	DRIVE NO BIT MASK 
	ORS	A1,DWTLAB,A6	INDICATE IBM DISC 
	LDK	A1,/20	RETURN CODE BIT 10
	ORS	A1,DWTRCW,A6 
	XIF
	IFF	DAMA+IBM=0 
LOA:15	EQU	*
	LDKL	A4,BUF	BUFFER ADDRESS 
	CF	A5,FD:REA 
	CF	A5,LD:RC
	LDK	A1,2 
	XIF
	IFT	IBM=1
	LD	A7,DWTRCW,A6
	ANK	A7,/20	CHECK TYPE OF LABEL 
	RF(Z)	LOA:30	TOSS LABEL
	LDK	A7,10	NO OF CHAR.
	CF	A5,ASCII
	LDK	A1,4 
LOA:30	EQU	*
	XIF
	IFF	DAMA+IBM=0 
* 
*  GET DWT VOL NAME ADDRESS 
* 
	CF	A5,VOLADR	ADDRESS TO A2 
* 
*  STORE NAME IN DWT
* 
	LDK	A3,3 
LOA:40	LD	A4,BUF,A1 
	STR	A4,A2
	SUK	A3,1 
	RF(Z)	LOA:50 
	ADK	A1,2 
	ADK	A2,2 
	RB	LOA:40
LOA:50	EQU	*
	XIF
	IFT	IBM=1
* 
* DATA SET OPENING WANTED?
* 
	ANK	A1,/2	A1:  TOSS=6, IBM=8 
	RF(NZ)	LOA:70	TOSS LABEL 
	LC	A1,DWTOR+1,A6	ORDER 
	CCK	A1,/2600 
	RF(E)	LOA:70	LOCK ORDER
* 
*  READ DATA SET LABEL
* 
	LD	A2,ECBCW,A8	SECTOR NO 
	SUK	A2,7 
	ABL(N)	FD:DIS	REQUEST ERROR
	SUK	A2,18
	ABL(P)	FD:DIS	REQUEST ERROR
	ADK	A2,25
	SLL	A2,3	BIO 
	LDK	A3,80	LENGTH 
	LDKL	A4,BUF
	CF	A5,FD:REA 
	LDR	A1,A3	RETURN CODE
	SLL	A1,4	CHECK NO DATA BIT 
	RF(NN)	LOA:60	NOT NO DATA
	ORKL	A3,/2000	INDICATE ILLEGAL DATA SET LABEL
LOA:60	EQU	*
	CF	A5,LD:RC
	ENB
	LD	A3,ECBCW,A8	DATA SET LABEL SECTOR 
	LDK	A1,DWTDSS
	CF	A5,STDWT	SAVE IN DWT
	ADK	A4,BOE	BOE ADDRESS 
	CF	A5,LOGSEC	TRANSFORM TO LOGICAL SECTOR 
	LDK	A1,DWTBOE
	CF	A5,STDWT	STORE BOE NO IN DWT
	SUK	A3,1	CRN 
	LDK	A1,DWTCRN
	CF	A5,STDWT
	ADK	A4,EOE-BOE	EOE ADDRESS 
	CF	A5,LOGSEC 
	LDK	A1,DWTEOE
	CF	A5,STDWT	STORE EOE NO IN DWT
	ADK	A4,EOD-EOE	EOD ADDRESS 
	CF	A5,LOGSEC 
	CF	A5,SETINH	INHIBIT 
	LDK	A1,DWTEOD
	CF	A5,STDWT	STORE EOD NO IN DWT
* 
LOA:70	EQU	*
	XIF
	LD	A2,DWTA3,A6 
	ORS	A2,DWTLC,A6	INDICATE LOCK
LOA:75	LD	A3,DWTRCW,A6	RETURN CODE
LOA:80	ABL	FD:RC
	IFF	DAMA+IBM=0 
* 
*  ERROR , UNLOCK 
* 
LOA:90	EQU	*
	LDR	A5,A6
	ADK	A5,DWTSB2	STACK BASE 
	LDK	A2,/C	UNLOCK 
	CF	A5,FD:REA 
	RB	LOA:75
* 
*---------------------------------------------------- 
*   LD:RC  SUBROUTINE 
* 
LD:RC	ORS	A3,DWTRCW,A6
	ANKL	A3,/2007	FATAL ERROR
	RB(NZ)	LOA:90
	LDKL	A4,BUF	DRIVER BUFFER ADDRESS
	RTN	A5 
	XIF
	EJECT
* 
**********
*        *
* UNLOAD *
*        *
**********
* 
UNLOAD	EQU	*
	IFT	IBM=1
* 
*    DATA SET OPEN? 
* 
	CF	A5,DSOPCH	A1,AFFECTED 
	LDR	A7,A7	EOD
	RF(Z)	UNL:70	NOT OPEN
	ST	A7,ECBCW,A8	STORE EOD-NO IN CONTROL WORD OF ECB 
* 
*  READ DATA SET LABEL TO DRIVER BUFFER 
* 
	CF	A5,DSLIO	PREPARE FOR I/O
	CF	A5,FD:REA	READ DATA SET LABEL 
	CF	A5,UNL:RC	RETURN CODE CHECK 
	ENB
**
*------------------------------ 
*  TRANSFORM RETURN CODE TO IBM SECTOR NO (EBCDIC-CODED)
* 
	CF	A5,DSOPCH	EOD-NO TO A7
* 
*  DIVIDE EOD BY 26 
* 
	LDK	A1,0 
UNL:10	SUK	A7,26
	RF(N)	UNL:20 
	ADK	A1,1 
	RB	UNL:10
UNL:20	ADK	A7,27
* 
*   A1 = BINARY TRACK NO
*   A7 = SECTOR NO WITHIN TRACK (0-25)
* 
	CF	A5,BINDEC	TRANSFORM SEC.NO TO A3
	LDKL	A4,BUF+EOD+4	ADDRESS TO POS 79
	SCR	A3,A4
	SUK	A4,1 
	SRL	A3,8	LEFT BYTE 
	SCR	A3,A4	STORE IN BUFFER
	LDR	A7,A1	TRACK
	CF	A5,BINDEC	DEC EBCDIC-CODED IN A3
	SUK	A4,3 
	STR	A3,A4	TRACK INTO BUF 
	CF	A5,SETINH	INHIBIT 
* 
*  WRITE DATA SET LABEL 
* 
	CF	A5,DSLIO	PREPARE FOR I/O
	ORK	A2,5	PHYSICAL WRITE
	CF	A5,FD:WRITE	WRITE DATA SET LEBEL
	CF	A5,UNL:RC	CHECK RETURN CODE 
	CF	A5,DSOPCH 
	CMR	A2	INDICATE NOT OPEN 
* 
*    UNLOCK 
* 
	XIF
UNL:70	EQU	*
	LDK	A2,/C	UNLOCK 
	CF	A5,FD:REA 
	ORS	A3,DWTRCW,A6 
	ANK	A3,1 
	RF(NZ)	UNL:80	NOT OPERABLE,STILL LOCKED
	LD	A2,DWTA3,A6	INDEX MASK
	XRS	A2,DWTLC,A6	INDICATE UNLOCK IN DWT 
UNL:80	EQU	*
	RB	LOA:75	END:IO 
	IFF	DAMA+IBM=0 
* 
*   UNLOAD RETURN CODE CHECK
* 
UNL:RC	ORS	A3,DWTRCW,A6 
	ANK	A3,/7	FATAL ERROR? 
	RB(NZ)	UNL:80	ENDIO
	RTN	A5 
	XIF
	IFT	IBM=1
	EJECT
* 
******************* 
* SEQUENTIAL READ * 
******************* 
* 
SQREAD	EQU	*
	CF	A5,DSOPCH	GET EOD AND EOD ADDRESS 
	LDR	A7,A7	EOD
SQR:05	ABL(Z)	DISIOE	NOT OPEN 
	ADK	A2,DWTCRN-DWTEOD	A2 = ADDRESS TO CRN 
	LDR*	A3,A2	CRN 
	ADK	A3,1	CRN+1 
	ST	A3,ECBCW,A8	STORE CRN+1 IN ECB
	CWR	A3,A7
	RF(NL)	SQR:10	END OF DATA
	CF	A5,BIO:RE 
	LDKL	A4,BUF	BUFFER ADDRESS 
	CF	A5,FD:REA	READ SECTOR POINTED AT BY CRN+1 
	LD	A4,ECBBA,A8	USER BUFFER ADDRESS 
	LD	A7,ECBRL,A8	REQUESTED LENGTH
	CF	A5,ASCII	TRANSFORM TO ASCII 
	LDK	A1,DWTCRN
	CF	A5,DSPAD
	RF	SQW:10	UPDATE CRN 
* 
*    END OF DATA
* 
SQR:10	LDKL	A1,/1000	RETURN CODE
	RF	END:IO
	EJECT
* 
******************* 
* SEQUENTIAL WRITE *
******************* 
* 
SQWRIT	EQU	*
	CF	A5,DSOPCH	GET EOD 
	LDR	A7,A7	EOD-NO 
	RB(Z)	SQR:05	NOT OPEN
* 
*   CHECK IF END OF EXTENT
* 
	LDK	A1,DWTEOE
	CF	A5,DSPAD	EOE-NO ADDRESS TO A2 
	ST	A7,ECBCW,A8	STORE EOD IN ECB C. W.
	CWR*	A7,A2 
	RF(G)	SQW:20	YES,EOE 
	CF	A5,BIO
	LDK	A7,128 
	CF	A5,EBCDIC	TRANSFORM AND MOVE TO BUF 
	ORK	A2,5	PHYS. WRITE 
	CF	A5,FD:WRI 
	CF	A5,DSOPCH 
SQW:10	LDR	A1,A3	RETURN CODE
	ANK	A1,/1
	RF(NZ)	SQW:15	NOT OPERABLE 
	IMR	A2	EOD=EOD+1 OR CRN=CRN+1 IN DWT 
SQW:15	RF	FD:RC 
* 
* 
*  END OF EXTENT
SQW:20	LDKL	A1,/400	RETURN CODE 
	RF	END:IO
	EJECT
* 
**********
* REWIND *
**********
* 
REWIND	EQU	*
	CF	A5,DSOPCH 
	LDR	A7,A7	EOD
	RB(Z)	SQR:05	DATA SET NOT OPEN 
	LDR	A3,A2	SAVE EOD ADDRESS 
	LDK	A1,DWTBOE
	CF	A5,DSPAD
	LDR*	A4,A2	BOE 
	STR	A4,A3	EOD = BOE
	LDK	A1,DWTCRN
	CF	A5,DSPAD
	SUK	A4,1	BOE - 1 
	STR	A4,A2	CRN = BOE -1 
	LDK	A1,0	RETURN CODE 
	RF	END:IO
	XIF
	EJECT
* 
***************** 
*               * 
* PERFORM ORDER * 
*               * 
***************** 
* 
* 
*  INPUT:  A2  BIO CONTENTS 
*          A3  NO OF BYTES TO BE TRANSFERED 
*          A4  BUFFER ADDRESS 
* 
FD:WRI	EQU	*
	IFT	CHAN=0 
	LDKL	A1,/C000	WORDS,WRITE
	XIF
	IFT	CHAN=1 
	CM	DWTRW,A6	INDICATOR TO WRITE MODE
	XIF
	RF	FD:800
* 
FD:REA	EQU	*
	IFT	CHAN=1 
	LDK	A1,1 
	ST	A1,DWTRW,A6	READ MODE 
	XIF
	IFT	CHAN=0 
	LDKL	A1,/8000	WORDS  READ
	XIF
FD:800	EQU	*
	IFT	CHAN=0 
	SRL	A3,1	FROM BYTES TO WORDS 
	ORR	A3,A1
WER1	WER	A3,MUXADR	FIRST WER
WER2	WER	A4,MUXADR+1	SECOND WER 
	XIF
	IFT	CHAN=1 
* 
*  PUT BUFFER START AND END ADDRESS IN DWT
* 
	ST	A4,DWTUB,A6 
	ADR	A3,A4
	ST	A3,DWTUBE,A6	END ADDRESS+2
	XIF
FD:820	EQU	*
	ST	A5,DWTA5,A6	SAVE STACK POINTER
FD:CIO	CIO	A2,1,CUADR	CIO-START 
	RF(3)	FD:840	DEVICE ADDRESS UNKNOWN
	RF	T:DISP
FD:840	LDK	A1,1	NOT OPERABLE
	RF	END:IO
	EJECT
* 
************************************* 
*                                   * 
*  FD:RC - STORE EFF LEN, END:IO     *
*                                   * 
************************************* 
* 
*  INPUT:  A3  RETURN CODE
* 
FD:RC	EQU	* 
	LDR	A1,A3
* 
*  PUT EFFECTIVE LENGTH IN ECB
* 
	LD	A2,ECBRL,A8	REQ LENGTH
	ST	A2,ECBEL,A8	EFF LENGTH
* 
**********
*        *
* END:IO *
*        *
**********
* 
END:IO	EQU	*
	CF	A15,TENDIO
T:DISP	ABL	TDISP
* 
* 
*  ENTRY FROM RECOVERY ROUTINE
* 
END:05	CM	DWTECB,A6	RESET ECB ADDRESS IN DWT
* 
*  ILLEGAL LENGTH 
* 
END:10	LDKL	A1,/8008	RETURN CODE
	RB	END:IO
	EJECT
* 
********************
*                  *
* RECOVERY ROUTINE *
*                  *
********************
* 
FDON	INH
	CF	A15,SAVE8 
	LDKL	A6,DWFD01	DWT ADDRESS 
	IFT	INI=1
	LD	A1,INIFLG 
	RF(Z)	FDON05	POWER UP
	LDKL	A1,-1 
	ST	A1,DWTST2,A6
	CM	DWTLC,A6	INDICATE NOT LOCKED
	CM	DWTRTY,A6	RESET RETRY FLAG
	XIF
	IFT	IBM+INI=2
	LDR	A1,A6
	ADK	A1,DWTEOD
	LDK	A2,4 
FDON02	EQU	*
	CMR	A1	CLOSE DATA SET
	ADK	A1,2 
	SUK	A2,1 
	RB(P)	FDON02 
	XIF
FDON05	EQU	*
	IM	DWTA2,A6	SET FDON FLAG
	LDK	A5,DWTSB2
	ADR	A5,A6	STACK BASE 
* 
*  SAVE DWTST TO DWTST2 IF NOT ALREADY DONE.
*    DWTST IS SET BUSY
* 
	LD	A2,DWTST2,A6
	CWK	A2,-1
	RF(NE)	FDON08	ALREADY SAVED
	LD	A2,DWTST,A6 
	ST	A2,DWTST2,A6
FDON08	CM	DWTST,A6	SET BUSY 
* 
* DELAY 2 SEC 
* 
	LD	A4,DWTTP,A6 
	RF(Z)	FDON10	NO TIMER SET
	LDKL	A4,-TIME
	ST*	A4,DWTTP,A6	RESTART TIMER
	RB	T:DISP
FDON10	LDK	A4,DWTTP 
	ADR	A4,A6
	LDR	A1,A6	SAVE A6
	CF	A15,SETIMP
	DATA	FDON20,TIME 
	RB	T:DISP
* 
*   TIME OUT ROUTINE
* 
FDON20	LDR	A6,A1
	CM	DWTTP,A6
	LDK	A5,DWTSB2
	ADR	A5,A6	STACK BASE 
* 
*  LOCK DOORS 
* 
	LDK	A2,1 
FDON25	EQU	*
	LD	A1,DWTLC,A6	LOCK INDICATOR
	ANR	A1,A2
	RF(Z)	FDON30	NOT LOCKED
	ST	A2,DWTA3,A6	SAVE
* 
*  PUT DRIVE NO IN CIO INSTR
* 
	SRN	A2,A3	DRIVE NO IN A3 
	CF	A5,SETCIO	PUT DRVE NO IN CIO-INSTR
	LDK	A2,/14	LOCK
	CF	A5,FD:REA 
	LD	A2,DWTA3,A6	DRIVE IND.
	ANK	A3,1 
	RF(Z)	FDON30	OK
	XRS	A2,DWTLC,A6	INDICATE UNLOCK
FDON30	EQU	*
	SLL	A2,1 
	CWK	A2,/0010 
	RB(NE)	FDON25
* 
*  ANY REQUEST? 
* 
* 
*  RESTORE STATUS SAVED IN DWST2 TO DWTST.
*   SET DWTST2 TO -1
	LD	A2,DWTST2,A6	SAVED STATUS 
	ST	A2,DWTST,A6	PUT IN CUURENT STATUS 
	LDKL	A2,-1 
	ST	A2,DWTST2,A6	INDICATE NOT SAVED 
	CM	DWTA2,A6	RESET FDON FLAG
FDON60	EQU	*
	LD	A2,DWTST,A6 
	RB(N)	END:05	NO REQUEST, RETURN VIA TENDIO 
* 
*  RETRY REQUEST
* 
	IM	DWTRTY,A6	INDICATE RETRY
	LD	A7,DWTOR,A6 
	ANK	A7,/3F	ORDER 
	LD	A8,DWTECB,A6	ECB ADDRESS
	ABL	FDAD	REACTIVATE
	EJECT
* 
********************* 
*                   * 
* INTERRUPT HANDLER * 
*                   * 
********************* 
* 
IHFD	EQU	*
	ST	P,INTSAV	SAVE LAST INTERRUPT
	IFT	CHAN=1 
	STR	A1,A15 
	STR	A2,A15 
	STR	A3,A15 
	LDKL	A2,DWFD01 
	LD	A1,DWTUB,A2	POINTER AT WORD IN BUFFER 
	LD	A2,DWTRW,A2	READ / WRITE INDICATOR
	RF(NZ)	IH010	READ
	LCR	A3,A1	FIRST CHAR.
	ECR	A2,A3	MOV TO BITS 0-7
	ADK	A1,1	UPDATE BUFFER POINTER 
	LCR	A2,A1	SECOND CHAR. 
	OTR	A2,0,CUADR	WRITE 
	RF(A)	IH020	ACCEPTED 
	RF	IH040	NOT ACCEPTED
IH010	INR	A2,0,CUADR	READ 
	RF(NA)	IH040	NOT ACCEPTED
	ECR	A3,A2
	SCR	A3,A1	FIRST CHAR. INTO BUFFER
	ADK	A1,1	UPDATE BUFFER POINTER 
	SCR	A2,A1	SECOND CHAR. INTO BUFFER 
IH020	LDKL	A2,DWFD01	DWT-ADDRESS
	ADK	A1,1 
	ST	A1,DWTUB,A2	POINTER AT NEXT CHAR. 
	CW	A1,DWTUBE,A2
	RF(NE)	IH030	NOT LAST WORD 
	CIO	A2,0,CUADR	CIO HALT
IH030	EQU	* 
	LDR*	A3,A15
	LDR*	A2,A15
	LDR*	A1,A15
	RTN	A15
* 
* SAVE A4-A8 FOR DISPATCHER 
* 
IH040	EQU	* 
	STR	A4,A15 
	STR	A5,A15 
	STR	A6,A15 
	STR	A7,A15 
	STR	A8,A15 
	XIF
	IFF	CHAN=1 
	CF	A15,SAVE8 
	XIF
	SST	A3,CUADR	STATUS
	LDKL	A6,DWFD01	DWT ADDRESS 
	LD	A8,DWTECB,A6	ECB ADDRESS
	LD	A5,DWTA5,A6	STACK POINTER 
	SLL	A3,1 
	RF(N)	FDRE	READY INTERRUPT 
	SRL	A3,1 
	LD	A2,DWTRTY,A6	RETRY? 
	RF(Z)	IH:10	NO 
	CM	DWTRTY,A6	RESET RETRY FLAG
	LDR	A1,A3
	ANKL	A1,/0405
	RF(Z)	IH:10	RETURN CODE OK 
	LDK	A1,/4
	ORR	A3,A1	CRC ERROR
IH:10	EQU	* 
* 
* TRANSFORM RETURN CODE, CU - ECB 
* 
	ANKL	A3,/FF37
	RF(Z)	IH:80
	LDR	A1,A3
	ANKL	A3,/0A05	UNCHANGED BITS 
	LDR	A4,A1
	ANKL	A4,/0400	BIT 5
	SLC	A4,7	TO BIT 14 
	ORR	A3,A4
	IFT	DAMA+IBM=0 
	LDR	A4,A1
	ANKL	A4,/2000	BIT 2
	SLL	A4,1	TO BIT 1
	ORR	A3,A4
	XIF
	LDR	A4,A1
	ANK	A4,/20	BIT 10
	SLL	A4,3	TO BIT 7
	ORR	A3,A4
	ANK	A1,/10	BIT 11
	SRC	A1,5	TO BIT 0
	ORR	A3,A1
IH:80	EQU	* 
	RTN	A5 
	EJECT
* 
********************
*                  *
*  READY INTERRUPT *
*                  *
********************
* 
FDRE	EQU	*
	LD	A2,DWTA2,A6 
	ABL(NZ)	T:DISP	POWER ON ROUTINE ACTIVE 
	LDK	A5,DWTSB2
	ADR	A5,A6	STACK BASE 
	RB	FDON60
	EJECT
* 
******************************************* 
*                                         * 
*    S U B R O U T I N E S                * 
*                                         * 
******************************************* 
* 
******* 
*     * 
* BIO * 
*     * 
******* 
* 
* 
*  INPUT:  A8  ECB ADDRESS
* 
*  OUTPUT: A2  BITS 0-12 OF CONTROL WORD USED BY CIO START
*          A3  NO OF BYTES TO BE TRANSFERED 
*          A4  BUFFER ADDRESS 
* 
BIO	EQU	* 
	LDK	A4,0	FLAG
	RF	BIO010
BIO:RE	LDK	A4,1 
BIO010	EQU	*
	LD	A3,ECBRL,A8	REQ LEN 
	RF(N)	BIOERR	ILLEGAL LENGTH
	IFT	DAMA+IBM=2 
	LD	A2,DWTLAB,A6
	AN	A2,DWTA3,A6 
	RF(Z)	BIO020	TOSS DISC 
	XIF
	IFT	IBM=1
	LDK	A7,IBMLEN
	LDK	A2,0 
	XIF
	IFT	DAMA+IBM=2 
	RF	BIO030
	XIF
	IFT	DAMA=1 
BIO020	LDKL	A7,TOSLEN 
	LDK	A2,3 
BIO030	EQU	*
	XIF
	IFF	DAMA+IBM=0 
	LDR	A4,A4
	RF(Z)	BIO060	WRITE 
	LDK	A2,0 
	LDR	A1,A3	REQ LEN
	CWR	A3,A7	REQ LENGTH WITHIN RANGE
	RF(G)	BIOERR	NO
BIO040	SUK	A1,128 
	RF(NP)	BIO100
	ADK	A2,1	INCREMENT NO OF SECTORS 
	RB	BIO040
* 
*  WRITE, CHECK REQ LENGTH
* 
BIO060	CWR	A3,A7
	RF(NE)	BIOERR	ILLEGAL REQ LEN
	XIF
	IFT	DAMA+IBM=0 
* 
*  FIND NO OF SECTORS TO BE READ/WRITTEN, CHECK REQ LENGTH
* 
	LDR	A1,A3	REQ LENGTH 
	LDK	A2,0	NO OF SECTORS-1 
BIO015	LDR	A4,A4	READ OR WRITE? 
	RF(NZ)	BIO035	READ!
	SUK	A1,128 
	RF(Z)	BIO100	REQ LEN ACCEPTED
	RF	BIO045
* 
BIO035	SUK	A1,128 
	RF(NP)	BIO100	REQ LENGTH ACCEPTED
BIO045	ADK	A2,1 
	CWK	A2,3 
	RB(NG)	BIO015
	RF	BIOERR	REQ LEN OUTSIDE RANGE
	XIF
* 
BIO100	SRC	A2,2	SHIFT NO OF SECTORS-1 INTO POS 0-1
* 
*  CHECK SECTOR NO FROM CONTROL WORD OF ECB IS
*  WITHIN RANGE, PUT IT IN POS 2-12 
* 
	LD	A1,ECBCW,A8	SECTOR NO 
	RF(N)	BIOER2	OUTSIDE RANGE 
	IFT	DAMA+IBM=2 
	ANK	A7,/A
	RF(Z)	BIO110	IBM DISC
	XIF
	IFT	DAMA=1 
	CWK	A1,499 
	RF(G)	BIOER2	OUT OF RANGE
	SLL	A1,2	MULTIPLY BY 4TO GET DM SECTOR 
	XIF
	IFT	DAMA+IBM=2 
	RF	BIO120
	XIF
	IFT	IBM=1
BIO110	CWK	A1,1923
	RF(P)	BIOER2	OUT OF RANGE
	XIF
	IFT	DAMA+IBM=0 
	CWK	A1,2001	SECTOR NO OUT OF RANGE 
	RF(G)	BIOER2	YES!
	XIF
BIO120	EQU	*
	SLL	A1,3 
	ORR	A2,A1
	LD	A4,ECBBA,A8	BUFFER ADDRESS
	LDR	A1,A3	REQ LENGTH 
	ANK	A1,1 
	RF(NZ)	BIOERR	REQ LEN. NOT EVEN
	RTN	A5 
* 
* 
*  ILLEGAL REQUESTED LENGTH, RETURN VIA TENDIO
* 
BIOERR	ABL	END:10 
*   ILLEGAL SECTOR NO 
BIOER2	ABL	FD:DIS 
* 
********* 
*       * 
* FDIX  * 
*       * 
********* 
* 
*  INPUT:  A2   X 
* 
*  OUTPUT: A3   2 POWER(X)
* 
FDIX	LDK	A3,1 
	LDR	A2,A2
FDIX10	EQU	*
	RF(Z)	FDIX20 
	SLL	A3,1 
	SUK	A2,1 
	RB	FDIX10
FDIX20	RTN	A5 
	EJECT
	IFF	DAMA+IBM=0 
******************
*                *
*  VOLADR        *
*                *
******************
* 
*  INPUT:  A6  DWT ADDRESS
* 
*  OUTPUT: A2  VOLUME NAME ADDRESS
*          A3  ZERO 
* 
VOLADR	LDK	A2,DWTVO0
	ADR	A2,A6
	LC	A3,DWTOR,A6	DRIVE NO
	ANK	A3,/3
VOLA10	EQU	*
	RF(Z)	VOLA20 
	ADK	A2,6	UPDATE ADDRESS
	SUK	A3,1 
	RB	VOLA10
VOLA20	RTN	A5 
	XIF

	IFT	IBM=1
	EJECT
* 
********* 
* ASCII * 
********* 
* 
*  FUNCTION:  ASCII TRANSFORMS A STRING FROM EBCDIC TO
*             ASCII CODE
*             INPUT STRING ADDRESS IS BUF 
*  INPUT:     A7  NO OF CHARACTERS
*             A4  OUTPUT  STRING ADDRESS
*  OUTPUT:    A1  CHANGED 
*             A4 CHANGED
*             A7  CHANGED 
* 
ASCII	EQU	* 
	ENB
	LDK	A1,0 
	ADR	A4,A7
ASC:10	SUK	A7,1 
	RF(N)	ASC:20 
	SUK	A4,1 
	LC	A1,BUF,A7	GET EBCDIC CHAR 
	LC	A1,TASCII,A1	TRANSFORM TO ASCII 
	SCR	A1,A4	PUT ASCII CHAR. IN OUTPUT BUFFER 
	RB	ASC:10
ASC:20	EQU	*
	RF	EBC:90	SET INH AND RETURN 
	EJECT
* 
**********
* EBCDIC *
**********
* 
*  FUNCTION:  EBCDIC TRANSFORMES A STRING FROM ASCII TO 
*             EBCDIC CODE 
*             OUTPUT STRING IS PUT IN DRIVER BUFFER 
* 
*  INPUT:     A7 NO OF CHARACTERS 
*             A4  INPUT STRING ADDRESS
* 
*  OUTPUT:    A1  CHANGED 
*              A4  DRIVER BUFFER ADDRESS
*             A7  CHANGED 
EBCDIC	EQU	*
	ENB
	ADR	A4,A7
	LDK	A1,0 
EBC:10	SUK	A7,1 
	RF(N)	EBC:80 
	SUK	A4,1 
	LCR	A1,A4	GET ASCII CHAR.
	LC	A1,TEBCDIC,A1 
	SC	A1,BUF,A7 
	RB	EBC:10
EBC:80	EQU	*
	LDKL	A4,BUF
EBC:90	EQU	*
	CF	A5,SETINH 
	RTN	A5 
	EJECT
* 
**********
* LOGSEC *
********* 
* 
*  FUNCTION:  LOGSEC TRANSFORMS PHYSICAL SECTOR TO STANDARD 
*              LOGICAL SECTOR (BINARY). 
*             FORMAT OF PHYS. SEC.  TT0SS  (EBCDIC CODE)
*              TT = TRACK,  SS=SECTOR 
* 
*  INPUT:    A4  ADDRESS TO PHYS. SECTOR
* 
*  OUTPUT:   A3  BINARY SECTOR NO 
*           A4  UNCHANGED 
* 
LOGSEC	EQU	*
	CF	A5,DECBIN 
	LDR	A3,A1	SAVE 
	ADK	A4,2 
* 
*  MULTIPLY BY 26 
* 
	SLL	A3,5	*32 
	LDR	A2,A1
	SLL	A2,2 
	SUR	A3,A2	*28
	SLL	A1,1 
	SUR	A3,A1	*26
	CF	A5,DECBIN 
	SUK	A1,1 
	ADR	A3,A1
* 
*  CHECK SECTOR NO
* 
	LDR	A1,A3
	SUK	A1,25
	RF(NP)	LOG:10
	CWK	A4,BUF+EOD+4	EOD?
	RF(E)	LOG:02	YES!
	SUKL	A1,1898 
	RF	LOG:04
* 
*  CHECK EOD LESS/EQUAL 74001 
* 
LOG:02	SUKL	A1,1899 
LOG:04	EQU	*
	RF(P)	LOG:10	NOT ACC SEC. NO 
	SUK	A4,4	RESET BUFFER POINTER
	RTN	A5 
* 
*  FATAL ERROR
* 
LOG:05	ADK	A5,4	ADJUST STACK POINTER
LOG:10	LDKL	A1,/2000	RETURN CODE
	ORS	A1,DWTRCW,A6 
	CF	A5,SETINH 
	ABL	LOA:90	ERROR ROUTINE 
* 
**********
* DECBIN* 
**********
* 
*  FUNCTION:  DECBIN TRANSFORMS TWO EBCDIC CODED DIGITS TO
*             BINARY. RANGE OF EBCDIC CODE /F0 - /F9 IS CHECKED 
*     INPUT:  A4  ADDRESS TO FIRST DIGIT
*   OUTPUT: A1  BINARY
*   WORKING REG:  A2,A7 
* 
DECBIN	LDK	A1,0 
	LDK	A7,2 
DEC:10	LCR	A2,A4	DIGIT
	ANK	A2,/FF 
	SUK	A2,/F0 
	RB(N)	LOG:05 
	SUK	A2,9 
	RB(P)	LOG:05	NOT DIGIT 
	ADK	A2,9 
	SUK	A7,1 
	RF(Z)	DEC:30 
	ADK	A4,1	ADDRESS TO SECOND DIGIT 
DEC:20	SUK	A2,1 
	RB(N)	DEC:10	NEXT DIGIT
	ADK	A1,/A	MULTIPLY BY 10 
	RB	DEC:20
DEC:30	ADR	A1,A2
	RTN	A5 
	XIF
	EJECT
* 
**********
* SETCIO *
**********
* 
*  FUNCTION:  PUT DRIVE NO IN CIO INSTRUCTION 
* 
*  INPUT:  A3  DRIVE NO , (BITS 0-13 MUST BE ZEROES 
* 
*  OUTPUT: A3  CHANGED
*          A4  CHANGED
* 
SETCIO	LDKL	A4,/FFCF
	ANS	A4,FD:CIO
	SLL	A3,4 
	ORS	A3,FD:CIO
	RTN 	A5
	IFT	IBM=1
	EJECT
* 
**********
* BINDEC *
**********
* 
*  FUNCTION:  BINDEC TRANSFORMS A BINARY NUMBER TO TWO
*             EBCDIC-CODED DIGITS (DECIMAL) 
* 
*  INPUT:  A7  BINARY NUMBER
* 
*  OUTPUT: A3  EBCDIC CODED DECIMAL DIGITS
*          A7  CHANGED
* 
BINDEC	LDK	A3,0 
BIN:10	SUK	A7,10
	RF(N)	BIN:20 
	ADK	A3,1 
	RB	BIN:10
BIN:20	ADK	A7,10
	SLL	A3,8 
	ORR	A3,A7	DECIMAL CONVERTED NO IN A3 
	ORKL	A3,/F0F0	EBCDIC CODED 
	RTN A5 
	EJECT
********* 
* DSLIO * 
********* 
* 
*  FUNCTION:  PREPARE FOR READING DATA SET LABEL
* 
*  INPUT:  A6  DWT ADDRESS
* 
*  OUTPUT: A2  BITS 0-12 SECTOR NO, BITS 13-15 ZEROES 
*          A3   128 
*          A4  DRIVER BUFFER ADDRESS
*          A6  DWT ADDRESS
*           A1 IS CHANGED 
* 
DSLIO	LDK	A1,DWTDSS 
	CF	A5,DSPAD
	LDR*	A2,A2 
	SLL	A2,3 
	LDK	A3,128 
	LDKL	A4,BUF
	RTN	A5 
	EJECT
* 
**********
* DSOPCH *
**********
* 
*  FUNCTION:  GET EOD-NO AND EOD-NO ADDRESS IN DWT
* 
*  INPUT:  A6  DWT ADDRESS
* 
*  OUTPUT: A2  EOD ADDRESS
*          A7  EOD-NO      (0=NOT OPEN) 
*          A1  CHANGED
DSOPCH	LDK	A1,DWTEOD
	CF	A5,DSPAD
	LDR*	A7,A2	EOD-NO
	RTN	A5 
	EJECT
* 
********* 
* DSPAD * 
********* 
* 
*  FUNCTION: GET ABSOLUTE ADDRESS OF SPECIFIED
*            TYPE OF DATA FOR COORESSPONDING DRIVE
* 
*  INPUT:  A1  DWT OFFSET 
*          A6  DWT ADDRESS
* 
*  OUTPUT: A2  ADDRESS TO DATA
*          A6  DWT ADDRESS
* 
DSPAD	LC	A2,DWTOR,A6	DRIVE NO 
	ANK	A2,/3
	ADR	A2,A2
	ADR	A2,A6
	ADR	A2,A1
	RTN	A5 
	EJECT
* 
********* 
* STDWT * 
********* 
* 
*  FUNCTION: STORE INPUT WORD IN DWT-AREA DEPENDING OF
*            DRIVE NO 
* 
*  INPUT:    A1  OFFSET TO DWT AREA 
*            A3  WORD TO BE STORED IN DWT 
*            A6  DWT ADDRESS
* 
*  OUTPUT:   A1  UNCHANGED
*            A2  ADDRESS TO WORD IN DWT AREA
*            A3  UNCHANGED
*            A6  UNCHANGED
* 
STDWT	EQU	* 
	CF	A5,DSPAD
	STR	A3,A2
	RTN	A5 
	EJECT
* 
**********
* SETINH *
**********
* 
*  FUNCTION:  INHIBIT INTERRUPTS, IF FDON ROUTINE IS ACTIVE 
*             ESCAPE VIA DISPATCHER ELSE RESET DWTENB AND 
*             RETURN
* 
*  INPUT:     A6  DWT ADDRESS 
* 
SETINH	INH
	LD	A1,DWTA2,A6	FDON
	RF(Z)	SET:10	NOT ACTIVE
	ABL	T:DISP	ESCAPE
SET:10	RTN	A5 
	XIF
* 
*    D R I V E R   B U F F E R
BUF	DATA	0,0,0,0
* 
	IFT	IBM=1
	RES	60 
	XIF
	EJECT
* 
********************* 
*                   * 
* DEVICE WORK TABLE * 
*                   * 
********************* 
* 
DWFD01	EQU	*
	DATA	0 
	DATA	/8000	DWT STATUS
	DATA	0	ECB-ADDRESS 
	DATA	0	ORDER 
	DATA	FDADR	ACTIVATION ADDRESS
	DATA	0	TTAB-ADDRESS
	DATA	0	WAIT/ACTIVATE INDICATOR 
	DATA	0	TERMINAL QUEUE
	DATA	0 
	DATA	0	SAVE AREA 
	DATA	0 
	DATA	0 
	DATA	0,0,0,0	STACK 
DWTST2	EQU	*-DWFD01	SAVE STATUS WORD
	DATA	-1
DWTRTY	EQU	*-DWFD01	RETRY REQUEST FLAG
	DATA	0 
DWTTP	EQU	*-DWFD01	TIMER POINTER
	DATA	0 
DWTRCW	EQU	*-DWFD01	TEMP RETURN CODE
	DATA	0 
DWTLAB	EQU	*-DWFD01	DISC LABEL INDICATOR
	DATA	0 
DWTLC	EQU	*-DWFD01	DRIVE LOCK INDICATOR 
	DATA	0 
DWTVO0	EQU	*-DWFD01	VOLUME NAME NO 0
	DATA	0,0,0 
DWTVO1	EQU	*-DWFD01	VOLUME NAME NO 1
	DATA	0,0,0 
DWTVO2	EQU	*-DWFD01	VOLUME NAME NO 2
	DATA	0,0,0 
DWTVO3	EQU	*-DWFD01	VOLUME NAME NO 3
	DATA	0,0,0 
	IFT	CHAN=1 
DWTUB	EQU	*-DWFD01	POINTER AT NEXT WORD IN BUFFER 
	DATA	0 
DWTUBE	EQU	*-DWFD01	BUFFER END ADDRESS+2
	DATA	0 
DWTRW	EQU	*-DWFD01	READ/WRITE INDICATOR 
	DATA	0 
	XIF
	IFT	IBM=1
DWTBOE	EQU	*-DWFD01	BEGINNING OF EXTENT 
	DATA	0,0,0,0 
DWTEOD	EQU	*-DWFD01	END OF DATA 
	DATA	0,0,0,0 
DWTEOE	EQU	*-DWFD01	END OF EXTENT 
	DATA	0,0,0,0 
DWTCRN	EQU	*-DWFD01	CURRENT RECORD NO 
	DATA	0,0,0,0 
DWTDSS	EQU	*-DWFD01	DATA SET LABEL SECTOR 
	DATA	0,0,0,0 
	XIF
	END

Full view