	.TITLE	DEVICEDAT - SIMULATOR DEVICE DATA BASE
	.IDENT	/X02/
;
;
; COPYRIGHT (C) 1977
; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
;
; THIS SOFTWARE IS FURNISHED UNDER  A LICENSE FOR USE ONLY  ON  A
; SINGLE COMPUTER SYSTEM AND MAY BE  COPIED ONLY WITH  THE INCLU-
; SION OF  THE  ABOVE  COPYRIGHT NOTICE.  THIS SOFTWARE,  OR  ANY
; OTHER COPIES THEREOF, MAY NOT BE  PROVIDED  OR  OTHERWISE  MADE
; AVAILABLE TO ANY OTHER PERSON EXCEPT  FOR  USE  ON  SUCH SYSTEM
; AND TO  ONE WHO AGREES  TO  THESE LICENSE  TERMS.  TITLE TO AND
; OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.
;
; THE INFORMATION IN THIS SOFTWARE  IS  SUBJECT TO CHANGE WITHOUT
; NOTICE AND SHOULD NOT BE CONSTRUED  AS  A COMMITMENT BY DIGITAL
; EQUIPMENT CORPORATION.
;
; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
;
; R.HEINEN 3-AUG-76
;
; DEVICE DATA BASE FOR SIMULATOR
;
; MACRO LIBRARY CALLS
;
 
	$CRDEF				; DEFINE CARD READER STATUS BITS
	$DCDEF				; DEFINE DEVICE CLASSES
	$DEVDEF				; DEFINE DEVICE CHARACTERISTICS
	$DYNDEF				; STRUCTURE TYPE CODE DEFINITIONS
	$FCBDEF				; DEFINE FCB OFFSETS
	$IPLDEF				; DEFINE IPL LEVELS
	$LPDEF				; DEFINE LINE PRINTER CHARACTERISTICS
	$MBADEF				; DEFINE MBA REGISTER OFFSETS
	$TTDEF				; DEFINE TERMINAL CHARACTERISTICS
	$UCBDEF				; DEFINE UCB OFFSETS AND MASKS
	$VECDEF				; DEFINE CRB INTERRRUPT VECTOR STRUCTURE
 
;
; GLOBAL DATA
;
; SYSTEM BOOT UCB TABLES
;
 
	.PSECT	$$$100,LONG,WRT
IOC$AL_SYSUCB::				; SYSTEM DEVICE UCB TABLE
	.LONG	DBUCB			; RP06 UCB TABLE
	.LONG	0
	.LONG	DMUCB			;UBA/RK06 UCB TABLE
	.LONG	DMUCB			; UBA/RK06 UCB TABLE
DBUCB:	.LONG	DBA$UCB0		; RP06 UNIT 0 UCB ADDRESS
	.LONG	DBA$UCB1		; RP06 UNIT 1 UCB ADDRESS
	.LONG	DBA$UCB2		; RP06 UNIT 2 UCB ADDRESS
	.LONG	DBA$UCB3		; RP06 UNIT 3 UCB ADDRESS
DMUCB:	.LONG	DMA$UCB0		; RK06 UNIT 0 UCB ADDRESS
	.LONG	DMA$UCB1		; RK06 UNIT 1 UCB ADDRESS
	.LONG	DMA$UCB2		; RK06 UNIT 2 UCB ADDRESS
 
IOC$GL_DEVLIST::
	.LONG	DBA$DDB			; START OF DEVICE LIST
IOC$GL_ADPLIST::			;
	.LONG	UBA$ADP0		; START OF ADAPTER CONTROL BLOCK LIST
 
;
; DBA DDB
;
 
DBA$DDB::
	.LONG	DBB$DDB			; POINTER TO NEXT DDB
	.LONG	DBA$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-DBA$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	DB$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/F11/			; DEFAULT ACP NAME
	.BYTE	1			; ACP CLASS 1
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/DBA/			; DEVICE NAME
10$:
 
;
; DBA UCB FOR UNIT 0
;
 
DBA$UCB0::
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-DBA$UCB0		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	DBA$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	DBA$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	DBA$UCB1		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_RND-		; RANDOM
		>
	.LONG	<512@16>+<DC$_DISK>	; SECOND CHARACTERISTICS WORD
	.BYTE	22			; SECTORS PER TRACK
	.BYTE	19			; TRACKS PER CYLINDER
	.WORD	815			; CYLINDERS PER PACK
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21 (^X15)
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	8,8			; ERROR RETRY COUNT
	.BYTE	0			; SLAVE CONTROLLER NUMBER
	.BYTE	<0@7>/4			; DRIVE OFFSET CONSTANT
	.LONG	0,0,0			; ERROR LOG STORAGE
	.LONG	815*19*22,0,0,0,0,0	; DEVICE DEPENDENT DATA AREA
10$:
 
;
; DBA UCB FOR UNIT 1
;
 
DBA$UCB1:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-DBA$UCB1		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	DBA$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	DBA$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	DBA$UCB2		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_RND-		; RANDOM
		>			;
	.LONG	<512@16>+<DC$_DISK>	; SECOND CHARACTERISTICS WORD
	.BYTE	22			; SECTORS PER TRACK
	.BYTE	19			; TRACKS PER CYLINDER
	.WORD	815			; CYLINDERS PER DISK
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	1			; UNIT 1
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21 (^X15)
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	8,8			; ERROR RETRY COUNT
	.BYTE	1			; SLAVE CONTROLLER NUMBER
	.BYTE	<1@7>/4			; DRIVE OFFSET CONSTANT
	.LONG	0,0,0			; ERROR LOG STORAGE
	.LONG	815*19*22,0,0,0,0,0	; DEVICE DEPENDENT DATA AREA
10$:
 
;
; DBA UCB FOR UNIT 2
;

DBA$UCB2:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-DBA$UCB2		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	DBA$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	DBA$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	DBA$UCB3		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_RND-		; RANDOM
		>
	.LONG	<512@16>+<DC$_DISK>	; SECOND CHARACTERISTICS WORD
	.BYTE	22			; SECTORS PER TRACK
	.BYTE	19			; TRACKS PER CYLINDER
	.WORD	815			; CYLINDERS PER PACK
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	2			; UNIT 2
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21 (^X15)
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	8,8			; ERROR RETRY COUNT
	.BYTE	2			; SLAVE CONTROLLER NUMBER
	.BYTE	<2@7>/4			; DRIVE OFFSET CONSTANT
	.LONG	0,0,0			; ERROR LOG STORAGE
	.LONG	815*19*22,0,0,0,0,0	; DEVICE DEPENDENT DATA AREA
10$:
 
;
; DBA UCB FOR UNIT 3
;
 
DBA$UCB3:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-DBA$UCB3		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	DBA$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	DBA$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_RND-		; RANDOM
		>
	.LONG	<512@16>+<DC$_DISK>	; SECOND CHARACTERISTICS WORD
	.BYTE	22			; SECTORS PER TRACK
	.BYTE	19			; TRACKS PER CYLINDER
	.WORD	815			; CYLINDERS PER PACK
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	3			; UNIT 3
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21 (^X15)
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	8,8			; ERROR RETRY COUNT
	.BYTE	3			; SLAVE CONTROLLER NUMBER
	.BYTE	<3@7>/4			; DRIVE OFFSET CONSTANT
	.LONG	0,0,0			; ERROR LOG STORAGE
	.LONG	815*19*22,0,0,0,0,0	; DEVICE DEPENDENT DATA AREA
10$:
 
;
; CRB FOR DBA 
;
 
DBA$CRB:
1$:	.LONG	1$,1$			; WAIT QUEUE FOR CHANNEL
	.WORD	DBA-DBA$CRB		; SIZE  
	.BYTE	DYN$C_CRB		; TYPE IS CRB
	.BYTE	4			; NUMBER OF UNITS
	.WORD	5			; REF COUNT
	.BYTE	0			; MASK
	.BYTE	0			; SPARE BYTE
	.LONG	0			; POINTER TO NEXT CRB
MBA$INTDIS::				;
	PUSHR	#^M<R2,R3,R4,R5>	; INTERRUPT ENTRY
	JSB	MBA$INT			; ENTRY TO INTERRUPTS SERVICE
	.LONG	DBA$IDB			; POINTER TO IDB FOR DBA
	.LONG	MBA$INITIAL		; INITIALIZE CONTROLLER ENTRY POINT
	.LONG	0			; MAP AND DATA PATH ALLOCATION CONTROL
	.LONG	0			; ADDRESS OF ADP
DBA:
 
;
; DBA IDB
;
 
DBA$IDB::
	.LONG	DBA$CSR			; CSR OF UNIT 0
	.LONG	0			; OWNER UCB ADDRESS
	.WORD	10$-DBA$IDB		; SIZE
	.BYTE	DYN$C_IDB		; TYPE IS IDB
	.BYTE	4			; NUMBER OF UNITS
	.LONG	0			; POINTER TO ADAPTER CONTROL BLOCK
	.LONG	TM$INTDIS!1		; POINTER TO UNIT'S UCB
	.LONG	DBA$UCB1		; POINTER TO UNIT'S UCB
	.LONG	DBA$UCB2		; POINTER TO UNIT'S UCB
	.LONG	DBA$UCB3		; POINTER TO UNIT'S UCB
10$:
  
;
; DRA DDB
;
 
DRA$DDB::
	.LONG	DBB$DDB			; POINTER TO NEXT DDB
	.LONG	DRA$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-DRA$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	DR$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/F11/			; DEFAULT ACP NAME
	.BYTE	1			; ACP CLASS 1
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/DRA/			; DEVICE NAME
10$:
 
;
; DRA UCB FOR UNIT 0
;
 
DRA$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-DRA$UCB0		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	DRA$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	DRA$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	DRA$UCB1		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_RND-		; RANDOM
		>
	.LONG	<512@16>+<DC$_DISK>	; SECOND CHARACTERISTICS WORD
	.BYTE	32			; SECTORS PER TRACK
	.BYTE	5			; TRACKS PER CYLINDER
	.WORD	823			; CYLINDERS PER PACK
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21 (^X15)
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	8,8			; ERROR RETRY COUNT
	.BYTE	0			; SLAVE CONTROLLER NUMBER
	.BYTE	<0@7>/4			; DRIVE OFFSET CONSTANT
	.LONG	0,0,0			; ERROR LOG STORAGE
	.LONG	<823*5*32>-32,0,0,0,0,0,0 ; DEVICE DEPENDENT DATA AREA
10$:
 
;
; DRA UCB FOR UNIT 1
;
 
DRA$UCB1:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-DRA$UCB1		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	DRA$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	DRA$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	DRA$UCB2		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_RND-		; RANDOM
		>			;
	.LONG	<512@16>+<DC$_DISK>	; SECOND CHARACTERISTICS WORD
	.BYTE	32			; SECTORS PER TRACK
	.BYTE	5			; TRACKS PER CYLINDER
	.WORD	823			; CYLINDERS PER DISK
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	1			; UNIT 1
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21 (^X15)
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	8,8			; ERROR RETRY COUNT
	.BYTE	1			; SLAVE CONTROLLER NUMBER
	.BYTE	<1@7>/4			; DRIVE OFFSET CONSTANT
	.LONG	0,0,0			; ERROR LOG STORAGE
	.LONG	<823*5*32>-32,0,0,0,0,0,0 ; DEVICE DEPENDENT DATA AREA
10$:
 
;
; DRA UCB FOR UNIT 2
;

DRA$UCB2:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-DRA$UCB2		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	DRA$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	DRA$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	DRA$UCB3		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_RND-		; RANDOM
		>
	.LONG	<512@16>+<DC$_DISK>	; SECOND CHARACTERISTICS WORD
	.BYTE	32			; SECTORS PER TRACK
	.BYTE	5			; TRACKS PER CYLINDER
	.WORD	823			; CYLINDERS PER PACK
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	2			; UNIT 2
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21 (^X15)
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	8,8			; ERROR RETRY COUNT
	.BYTE	2			; SLAVE CONTROLLER NUMBER
	.BYTE	<2@7>/4			; DRIVE OFFSET CONSTANT
	.LONG	0,0,0			; ERROR LOG STORAGE
	.LONG	<823*5*32>-32,0,0,0,0,0,0 ; DEVICE DEPENDENT DATA AREA
10$:
 
;
; DRA UCB FOR UNIT 3
;
 
DRA$UCB3:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-DRA$UCB3		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	DRA$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	DRA$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_RND-		; RANDOM
		>
	.LONG	<512@16>+<DC$_DISK>	; SECOND CHARACTERISTICS WORD
	.BYTE	32			; SECTORS PER TRACK
	.BYTE	5			; TRACKS PER CYLINDER
	.WORD	823			; CYLINDERS PER PACK
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	3			; UNIT 3
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21 (^X15)
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	8,8			; ERROR RETRY COUNT
	.BYTE	3			; SLAVE CONTROLLER NUMBER
	.BYTE	<3@7>/4			; DRIVE OFFSET CONSTANT
	.LONG	0,0,0			; ERROR LOG STORAGE
	.LONG	<823*5*32>-32,0,0,0,0,0,0 ; DEVICE DEPENDENT DATA AREA
10$:
 
;
; CRB FOR DRA 
;
 
DRA$CRB::
1$:	.LONG	1$,1$			; WAIT QUEUE FOR CHANNEL
	.WORD	DRA-DRA$CRB		; SIZE  
	.BYTE	DYN$C_CRB		; TYPE IS CRB
	.BYTE	4			; NUMBER OF UNITS
	.WORD	5			; REF COUNT
	.BYTE	0			; MASK
	.BYTE	0			; SPARE BYTE
	.LONG	0			; POINTER TO NEXT CRB
DRA$INTDIS::				;
	PUSHR	#^M<R2,R3,R4,R5>	; INTERRUPT ENTRY
	JSB	MBA$INT			; ENTRY TO INTERRUPTS SERVICE
	.LONG	DRA$IDB			; POINTER TO IDB FOR DRA
	.LONG	MBA$INITIAL		; INITIALIZE CONTROLLER ENTRY POINT
	.LONG	0			; MAP AND DATA PATH ALLOCATION CONTROL
	.LONG	0			; ADDRESS OF ADP
DRA:
 
;
; DRA IDB
;
 
DRA$IDB::
	.LONG	DBA$CSR			; CSR OF UNIT 0
	.LONG	0			; OWNER UCB ADDRESS
	.WORD	10$-DRA$IDB		; SIZE
	.BYTE	DYN$C_IDB		; TYPE IS IDB
	.BYTE	4			; NUMBER OF UNITS
	.LONG	0			; POINTER TO ADAPTER CONTROL BLOCK
	.LONG	TM$INTDIS!1		; POINTER TO UNIT'S UCB
	.LONG	DRA$UCB1		; POINTER TO UNIT'S UCB
	.LONG	DRA$UCB2		; POINTER TO UNIT'S UCB
	.LONG	DRA$UCB3		; POINTER TO UNIT'S UCB
10$:
;
; DBB DDB
;
 
DBB$DDB:
	.LONG	DMA$DDB			; POINTER TO NEXT DDB
	.LONG	DBB$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-DBB$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	DB$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/F11/			; DEFAULT ACP NAME
	.BYTE	2			; ACP CLASS 2
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/DBB/			; DEVICE NAME
10$:
 
;
; DBB UCB FOR UNIT 0
;
 
DBB$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-DBB$UCB0		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	DBB$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	DBB$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	DBB$UCB1		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_RND-		; RANDOM
		>
	.LONG	<512@16>+<DC$_DISK>	; SECOND CHARACTERISTICS WORD
	.BYTE	22			; SECTORS PER TRACK
	.BYTE	19			; TRACKS PER CYLINDER
	.WORD	815			; CYLINDERS PER PACK
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21 (^X15)
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN+1		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	8,8			; ERROR RETRY COUNT
	.BYTE	0			; SLAVE CONTROLLER NUMBER
	.BYTE	<0@7>/4			; DRIVE OFFSET CONSTANT
	.LONG	0,0,0			; ERROR LOG STORAGE
	.LONG	815*19*22,0,0,0,0,0	; DEVICE DEPENDENT DATA AREA
10$:
 
;
; DBB UCB FOR UNIT 1
;
 
DBB$UCB1:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-DBB$UCB1		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	DBB$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	DBB$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	DBB$UCB2		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_RND-		; RANDOM
		>			;
	.LONG	<512@16>+<DC$_DISK>	; SECOND CHARACTERISTICS WORD
	.BYTE	22			; SECTORS PER TRACK
	.BYTE	19			; TRACKS PER CYLINDER
	.WORD	815			; CYLINDERS PER DISK
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	1			; UNIT 1
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21 (^X15)
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN+1		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	8,8			; ERROR RETRY COUNT
	.BYTE	1			; SLAVE CONTROLLER NUMBER
	.BYTE	<1@7>/4			; DRIVE OFFSET CONSTANT
	.LONG	0,0,0			; ERROR LOG STORAGE
	.LONG	815*19*22,0,0,0,0,0	; DEVICE DEPENDENT DATA AREA
10$:
 
;
; DBB UCB FOR UNIT 2
;

DBB$UCB2:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-DBB$UCB2		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	DBB$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	DBB$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	DBB$UCB3		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_RND-		; RANDOM
		>
	.LONG	<512@16>+<DC$_DISK>	; SECOND CHARACTERISTICS WORD
	.BYTE	22			; SECTORS PER TRACK
	.BYTE	19			; TRACKS PER CYLINDER
	.WORD	815			; CYLINDERS PER PACK
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	2			; UNIT 2
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21 (^X15)
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN+1		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	8,8			; ERROR RETRY COUNT
	.BYTE	2			; SLAVE CONTROLLER NUMBER
	.BYTE	<2@7>/4			; DRIVE OFFSET CONSTANT
	.LONG	0,0,0			; ERROR LOG STORAGE
	.LONG	815*19*22,0,0,0,0,0	; DEVICE DEPENDENT DATA AREA
10$:
 
;
; DBB UCB FOR UNIT 3
;
 
DBB$UCB3:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-DBB$UCB3		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	DBB$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	DBB$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_RND-		; RANDOM
		>
	.LONG	<512@16>+<DC$_DISK>	; SECOND CHARACTERISTICS WORD
	.BYTE	22			; SECTORS PER TRACK
	.BYTE	19			; TRACKS PER CYLINDER
	.WORD	815			; CYLINDERS PER PACK
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	3			; UNIT 3
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21 (^X15)
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN+1		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	8,8			; ERROR RETRY COUNT
	.BYTE	3			; SLAVE CONTROLLER NUMBER
	.BYTE	<3@7>/4			; DRIVE OFFSET CONSTANT
	.LONG	0,0,0			; ERROR LOG STORAGE
	.LONG	815*19*22,0,0,0,0,0	; DEVICE DEPENDENT DATA AREA
10$:
 
;
; CRB FOR DBB 
;
 
DBB$CRB::
1$:	.LONG	1$,1$			; WAIT QUEUE FOR CHANNEL
	.WORD	DBB-DBB$CRB		; SIZE  
	.BYTE	DYN$C_CRB		; TYPE IS CRB
	.BYTE	4			; NUMBER OF UNITS
	.WORD	4			; REF COUNT
	.BYTE	0			; MASK
	.BYTE	0			; SPARE BYTE
	.LONG	0			; POINTER TO NEXT CRB
MBB$INTDIS::				;
	PUSHR	#^M<R2,R3,R4,R5>	; INTERRUPT ENTRY
	JSB	MBA$INT			; ENTRY TO INTERRUPTS SERVICE
	.LONG	DBB$IDB			; POINTER TO IDB FOR DBB
	.LONG	MBA$INITIAL		; INITIALIZE CONTROLLER ENTRY POINT
	.LONG	0			; MAP AND DATA PATH ALLOCATION CONTROL
	.LONG	0			; ADDRESS OF ADP
DBB:
 
;
; DBB IDB
;
 
DBB$IDB::				;
	.LONG	DBB$CSR			; CSR OF UNIT 0
	.LONG	0			; OWNER UCB ADDRESS
	.WORD	10$-DBB$IDB		; SIZE
	.BYTE	DYN$C_IDB		; TYPE IS IDB
	.BYTE	4			; NUMBER OF UNITS
	.LONG	0			; POINTER TO ADAPTER CONTROL BLOCK
	.LONG	DBB$UCB0		; POINTER TO UNIT'S UCB
	.LONG	DBB$UCB1		; POINTER TO UNIT'S UCB
	.LONG	DBB$UCB2		; POINTER TO UNIT'S UCB
	.LONG	DBB$UCB3		; POINTER TO UNIT'S UCB
10$:					;
 
;
; DMA DDB
;
 
DMA$DDB:
	.LONG	TMA$DDB			; POINTER TO NEXT DDB
	.LONG	DMA$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-DMA$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	DM$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/F11/			; DEFAULT ACP NAME
	.BYTE	3			; ACP CLASS 3
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/DMA/			; DEVICE NAME
10$:
 
;
; DMA UCB FOR UNIT 0
;
 
	.LONG	0,0,0,0,0,0,0,0,0,0,0	;
DMA$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-DMA$UCB0		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	DMA$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	DMA$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	DMA$UCB1		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_RND-		; RANDOM
		>
	.LONG	<512@16>+<DC$_DISK>	; SECOND CHARACTERISTICS WORD
	.BYTE	22			; SECTORS PER TRACK
	.BYTE	3			; TRACKS PER CYLINDER
	.WORD	411			; CYLINDERS PER CARTRIDGE
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	22			; INTERRUPT LEVEL IS 22
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN+2		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	8,8			; ERROR RETRY COUNT
	.BLKW	1			; SPARE WORD
	.LONG	0,0,0			; ERROR LOG STORAGE
	.LONG	411*3*22,0,0,0,0	; DEVICE DEPENDENT DATA AREA
10$:
 
;
; DMA UCB FOR UNIT 1
;
 
	.LONG	0,0,0,0,0,0,0,0,0,0,0	;
DMA$UCB1:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-DMA$UCB1		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	DMA$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	DMA$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	DMA$UCB2		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_RND-		; RANDOM
		>
	.LONG	<512@16>+<DC$_DISK>	; SECOND CHARACTERISTICS WORD
	.BYTE	22			; SECTORS PER TRACK
	.BYTE	3			; TRACKS PER CYLINDER
	.WORD	411			; CYLINDERS PER CARTRIDGE
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	1			; UNIT 1
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	22			; INTERRUPT LEVEL IS 22
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN+2		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	8,8			; ERROR RETRY COUNT
	.BLKW	1			; SPARE UNUSED WORD
	.LONG	0,0,0			; ERROR LOG STORAGE
	.LONG	411*3*22,0,0,0,0	; DEVICE DEPENDENT DATA AREA
10$:
 
;
; DMA UCB FOR UNIT 2
;
 
	.LONG	0,0,0,0,0,0,0,0,0,0,0	;
DMA$UCB2:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-DMA$UCB2		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	DMA$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	DMA$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_RND-		; RANDOM
		>
	.LONG	<512@16>+<DC$_DISK>	; SECOND CHARACTERISTICS WORD
	.BYTE	22			; SECTORS PER TRACK
	.BYTE	3			; TRACKS PER CYLINDER
	.WORD	411			; CYLINDERS PER CARTRIDGE
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	2			; UNIT 2
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	22			; INTERRUPT LEVEL IS 22
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN+2		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	8,8			; ERROR RETRY COUNT
	.BLKW	1			; SPARE UNUSED WORD
	.LONG	0,0,0			; ERROR LOG STORAGE
	.LONG	411*3*22,0,0,0,0	; DEVICE DEPENDENT DATA AREA
10$:
 
;
; CRB FOR DMA 
;
 
DMA$CRB:
1$:	.LONG	1$,1$			; WAIT QUEUE FOR CHANNEL
	.WORD	DMA-DMA$CRB		; SIZE  
	.BYTE	DYN$C_CRB		; TYPE IS CRB
	.BYTE	3			; NUMBER OF UNITS
	.WORD	3			; REF COUNT
	.BYTE	0			; MASK
	.BYTE	0			; SPARE BYTE
	.LONG	0			; POINTER TO NEXT CRB
DMA$INTDIS:				;
	PUSHR	#^M<R2,R3,R4,R5>	; INTERRUPT ENTRY
	JSB	DM$INT			; ENTRY TO INTERRUPTS SERVICE
	.LONG	DMA$IDB			; POINTER TO IDB FOR DMA
	.LONG	DM$INITIAL		; INITIALIZE CONTROLLER ENTRY POINT
	.WORD	0			; STARTING UNIBUS MAP REGISTER ADDRESS
	.BYTE	0			; NUMBER OF MAP REGISTERS ALLOCATED
	.BYTE	0			; DATAPATH DESIGNATOR
	.LONG	UBA$ADP0		; ADDRESS OF ADAPTER CONTROL BLOCK
DMA:
 
;
; DMA IDB
;
 
DMA$IDB:
	.LONG	UBA$IOBASE+^O17440	; CSR OF UNIT 0
	.LONG	0			; OWNER UCB ADDRESS
	.WORD	10$-DMA$IDB		; SIZE
	.BYTE	DYN$C_IDB		; TYPE IS IDB
	.BYTE	3			; SPARE BYTE
	.LONG	UBA$ADP0		; POINTER TO ADAPTER CONTROL BLOCK
	.LONG	DMA$UCB0		; POINTER TO UNIT'S UCB
	.LONG	DMA$UCB1		; POINTER TO UNIT'S UCB
	.LONG	DMA$UCB2		; POINTER TO UNIT'S UCB
10$:
 
;
; TMA DDB
;
 
TMA$DDB:
	.LONG	TTD$DDB			; POINTER TO NEXT DDB
	.LONG	TMA$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-TMA$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	TM$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/MTA /			; DEFAULT ACP NAME
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/MTA/			; DEVICE NAME
10$:
 
;
; TMA UCB FOR UNIT 0
;
 
TMA$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TMA$UCB0		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TMA$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TMA$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TMA$UCB1		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_SDI-		; SINGLE DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_SQD-		; SEQUENTIAL DEVICE
		>
	.LONG	<512@16>+<6@8+DC$_TAPE>	; SECOND CHARACTERISTICS WORD
	.WORD	^X3C0			; TAPE CHARACTERISTICS
	.WORD	0			; TAPE STATUS
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21 (^X15)
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	16,16			; ERROR RETRY COUNT
	.BYTE	0			; SLAVE CONTROLLER NUMBER
	.BLKB	1			; SPARE UNUSED BYTE
	.LONG	0,0,0,0,0		; ERROR LOG STORAGE
	.LONG	0,0,0			; DEVICE DEPENDENT DATA
	.WORD	0,^X3C0			;
10$:
 
;
; TMA UCB FOR UNIT 1
;
 
TMA$UCB1:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TMA$UCB1		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TMA$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TMA$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_SDI-		; SINGLE DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_ELG-		; ERROR LOGGING ENABLED
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_SQD-		; SEQUENTIAL DEVICE
		>			;
	.LONG	<512@16>+<6@8+DC$_TAPE>	; SECOND CHARACTERISTICS WORD
	.WORD	^X3C1			; TAPE CHARACTERISTICS
	.WORD	0			; TAPE STATUS
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	1			; UNIT 1
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21 (^X15)
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	16,16			; ERROR RETRY COUNT
	.BYTE	0			; SLAVE CONTROLLER NUMBER
	.BLKB	1			; SPARE UNUSED BYTE
	.LONG	0,0,0,0,0		; ERROR LOG STORAGE
	.LONG	0,0,0			; DEVICE DEPENDENT DATA
	.WORD	0,^X3C1			;
10$:
 
;
; CRB FOR TMA 
;
 
TMA$CRB::
1$:	.LONG	1$,1$			; WAIT QUEUE FOR CHANNEL
	.WORD	TMA-TMA$CRB		; SIZE  
	.BYTE	DYN$C_CRB		; TYPE IS CRB
	.BYTE	2			; NUMBER OF UNITS
	.WORD	2			; REF COUNT
	.BYTE	0			; MASK
	.BYTE	0			; SPARE BYTE
	.LONG	DBA$CRB			; POINTER TO NEXT CRB
TM$INTDIS::				; TM03-TE16/TU77 INTERRUPT DISPATCH
	PUSHR	#^M<R2,R3,R4,R5>	; INTERRUPT ENTRY
	JSB	TM$INT			; ENTRY TO INTERRUPTS SERVICE
	.LONG	TMA$IDB			; POINTER TO IDB FOR TMA
	.LONG	0			; INITIALIZE CONTROLLER ENTRY POINT
	.LONG	0			; MAP AND DATA PATH CONTROL
	.LONG	0			; ADDRESS OF ADP
TMA:
 
;
; TMA IDB
;
 
TMA$IDB::
	.LONG	DBA$CSR+MBA$L_ERB	; CSR OF UNIT 0
	.LONG	0			; OWNER UCB ADDRESS
	.WORD	10$-TMA$IDB		; SIZE
	.BYTE	DYN$C_IDB		; TYPE IS IDB
	.BYTE	2			; NUMBER OF UNITS
	.LONG	0			; POINTER TO ADAPTER CONTROL BLOCK
	.LONG	TMA$UCB0		; POINTER TO UNIT'S UCB
	.LONG	TMA$UCB1		; POINTER TO UNIT'S UCB
10$:					;
 
;
; CONSOLE DDB
;
 
TTD$DDB:
	.LONG	DXP$DDB			; POINTER TO NEXT DDB
	.LONG	TTD$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-TTD$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	TT$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/    /			; NO DEFAULT ACP
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/TTA/			; DEVICE NAME
10$:
 
;
; CONSOLE UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	0			; SPEED
	.LONG	0			;
TTD$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTD$UCB0		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTD$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTD$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<132@16>+<DC$_TERM>+<TT$_LA36@8>; WIDTH OF CARRIAGE ETC.
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC>-
		+<16@24>		; PAGE SIZE OF 16
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	20			; INTERRUPT LEVEL IS 20
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN+2		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; CONSOLE CRB
;
 
TTD$CRB:
	.LONG	0,0			;
	.WORD	CD-TTD$CRB		; SIZE
	.BYTE	DYN$C_CRB		; TYPE IS CRB
	.BLKB	1			; UNUSED
	.LONG	1			; REF COUNT=1 AND NEVER BUSY
	.LONG	0			; NO NEXT CRB
CON$INTDISI::				;
	PUSHR	#^M<R5,R4,R3,R2>	; ENTRY VECTOR FOR INPUT INTERRUPTS
	JSB	CON$INTINP		; INPUT INTERRUPT SERVICE
	.LONG	TTD$IDB			; POINTER TO PSEUDO IDB
	.LONG	CON$INITIAL		; INITIALIZE CONTROLLER ENTRY POINT
	.LONG	0			; MAP AND DATA PATH ALLOCATION CONTROL
	.LONG	0			; ADDRESS OF ADP
	.LONG	CON$INITLINE,CON$STARTIO,CON$DISCON
CON$INTDISO::				;
	PUSHR	#^M<R5,R4,R3,R2>	; ENTRY FOR OUTPUT INTERRUPTS
	JSB	CON$INTOUT		; OUTPUT INTERRUPT SERVICE
	.LONG	TTD$IDB			; POINTER TO TTA CRB
CD:
 
;
; CONSOLE IDB
;
 
TTD$IDB:
	.LONG	0			; CSR ADDRESS
	.LONG	0			; OWNER UCB ADDRESS
	.WORD	ID-TTD$IDB		; SIZE OF IDB
	.BYTE	DYN$C_IDB		; TYPE OF STRUCTURE
	.BYTE	2			; NUMBER OF UNITS
	.LONG	0			; ADAPTER ADDRESS
	.LONG	TTD$UCB0		; UNIT 0 UCB ADDRESS
	.LONG	DXP$UCB0		; UNIT 1 UCB ADDRESS
	.LONG	DXP$UCB0		; UNIT 1 INPUT UCB ADDRESS
ID:

;
; CONSOLE FLOPPY DDB
;
 
DXP$DDB:
	.LONG	CRA$DDB			; POINTER TO NEXT DDB
	.LONG	DXP$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-DXP$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	DXP$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/F11/			; DEFAULT ACP NAME
	.BYTE	3			; ACP CLASS 3
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/DXA/			; DEVICE NAME
10$:
 
;
; CONSOLE FLOPPY UCB 0
;
 
DXBUF:	.BLKB	128			; CONSOLE SECTOR BUFFER
	.LONG	DXBUF			;CONSOLE BUFFER ADDRESS
	.LONG	0			;CONSOLE BUFFER POINTER
	.LONG	0			;COPY OF RXDB REGISTER
	.WORD	0			;NUMBER OF BYTES REQUESTED
	.BYTE	0			;SECTOR COUNT
	.BLKB	1			;SPARE BYTE
DXP$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-DXP$UCB0		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTD$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	DXP$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; NO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_FOD-		; FILES ORIENTED
		!DEV$M_DIR-		; DIRECTORY DEVICE
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_DIR-		; DIRECTORY
		!DEV$M_RND-		; RANDOM
		>
	.LONG	<512@16>+<DC$_DISK>	; SECOND CHARACTERISTICS WORD
	.BYTE	26			; SECTORS PER TRACK (128 BYTES PER SECTOR)
	.BYTE	1			; TRACKS PER CYLINDER
	.WORD	77			; CYLINDERS PER CARTRIDGE
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	1			; UNIT NUMBER
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	20			; INTERRUPT LEVEL IS 20 (^X14)
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.WORD	1@UCB$V_ONLINE		; STATUS
	.WORD	1@UCB$V_NOCNVRT		; NO PHYSICAL TO LOGICAL CONVERSION
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN+3		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.BYTE	8,8			; ERROR RETRY COUNT
	.BYTE	0			; SLAVE CONTROLLER NUMBER
	.BLKB	1			; SPARE UNUSED BYTE
	.LONG	0,0,0			; ERROR LOG STORAGE
	.LONG	<76*26*1>/4		; MAXIMUM LBN
	.LONG	0,0			; ...
10$:
 
;
; CRA DDB
;
 
CRA$DDB:				;
	.LONG	LPB$DDB			; POINTER TO NEXT DDB
	.LONG	CRA$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-CRA$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	CR$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/    /			; NO DEFAULT ACP
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/CRA/			; DEVICE NAME
10$:
 
;
; CRA UCB FOR UNIT 0
;
 
CRA$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-CRA$UCB0		; SIZE OF LPA UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	CRA$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	CRA$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD ORIENTED
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_IDV-		; INPUT
		>
	.BYTE	DC$_CARD		; DEVICE CLASS
	.BYTE	0			; DEVICE TYPE
	.WORD	80			; DEFAULT BUFFER SIZE
	.LONG	CR$K_T029		; DEFAULT 029 TRANSLATION
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	22			; INTERRUPT LEVEL IS 22
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.LONG	0,0			; DEVICE DEPENDENT DATA
10$:
 
;
; CRB FOR CRA UNIT 0
;
 
CRA$CRB:
	.LONG	UBA$IOBASE+^O17160	; CSR FOR UNIT 777160
	.LONG	CRA$UCB0		; DEVICE UCB ADDRESS
	.WORD	CRA-CRA$CRB		; SIZE
	.BYTE	DYN$C_CRB		; TYPE IS CRB
	.BYTE	1			; NUMBER OF UNITS
	.LONG	1			; REF COUNT=1 AND NEVER BUSY
	.LONG	0			; NO NEXT CRB
CRA$INTDIS:				;
	PUSHR	#^M<R1,R2,R3,R4,R5>	; ENTRY VECTOR FOR INPUT INTERRUPTS
	JSB	CR$INT			; INPUT INTERRUPT SERVICE
	.LONG	CRA$CRB			; POINTER TO PSEUDO IDB
	.LONG	CR$INITIAL		; INITIALIZE CONTROLLER ENTRY POINT
	.LONG	0			; MAP AND DATA PATH ALLOCATION CONTROL
	.LONG	UBA$ADP0		; ADDRESS OF ADP
CRA:
 
;
; LPB DDB
;
 
LPB$DDB:
	.LONG	LPC$DDB			; POINTER TO NEXT DDB
	.LONG	LPB$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-LPB$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	LP$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/    /			; NO DEFAULT ACP
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/LPA/			; DEVICE NAME
10$:
 
;
; LPB UCB FOR UNIT 0
;
 
LPB$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-LPB$UCB0		; SIZE OF LPA UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	LPB$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	LPB$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD ORIENTED
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<132@16>+<DC$_LP>+<LP$_LP11@8>; SECOND CHARACTERISTICS WORD
	.LONG	<64@24>-		; PAGE SIZE IS 64
		+<LP$M_MECHFORM>	; MECHANICAL FORM FEED
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	22			; INTERRUPT LEVEL IS 22
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN+4		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.WORD	-1			; UCB MUTEX
	.WORD	0			;
	.LONG	0			;
10$:
 
;
; CRB FOR LPB UNIT 0
;
 
LPB$CRB:
	.LONG	UBA$IOBASE+^O17514	; CSR FOR UNIT 777514
	.LONG	LPB$UCB0		; DEVICE UCB ADDRESS
	.WORD	LPB-LPB$CRB		; SIZE
	.BYTE	DYN$C_CRB		; TYPE IS CRB
	.BYTE	1			; NUMBER OF UNITS
	.LONG	1			; REF COUNT=1 AND NEVER BUSY
	.LONG	0			; NO NEXT CRB
LPB$INTDIS:				;
	PUSHR	#^M<R5,R4,R3>		; ENTRY VECTOR FOR INPUT INTERRUPTS
	JSB	LP$INT			; INPUT INTERRUPT SERVICE
	.LONG	LPB$CRB			; POINTER TO PSEUDO IDB
	.LONG	LP$INITIAL		; INITIALIZE CONTROLLER ENTRY POINT
	.LONG	0			; MAP AND DATA PATH ALLOCATION CONTROL
	.LONG	UBA$ADP0		; ADDRESS OF ADP
LPB:
 
;
; LPC DDB
;
 
LPC$DDB:
	.LONG	TTE$DDB			; POINTER TO NEXT DDB
	.LONG	LPC$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-LPC$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	LP$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/    /			; NO DEFAULT ACP
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/LPB/			; DEVICE NAME
10$:
 
;
; LPC UCB FOR UNIT 0
;
 
LPC$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-LPC$UCB0		; SIZE OF LPA UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	LPC$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	LPC$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD ORIENTED
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<132@16>+<DC$_LP>+<LP$_LP11@8>; SECOND CHARACTERISTICS WORD
	.LONG	<64@24>-		; PAGE SIZE IS 64
		+<LP$M_CR>-		; CARRIAGE RETURN NEEDED
		+<LP$M_MECHFORM>	; MECHANICAL FORM FEED
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	22			; INTERRUPT LEVEL IS 22
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	0			; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.WORD	-1			; UCB MUTEX
	.WORD	0			;
	.LONG	0			;
10$:
 
;
; CRB FOR LPC UNIT 0
;
 
LPC$CRB:
	.LONG	UBA$IOBASE+^O14004	; CSR FOR UNIT 774004
	.LONG	LPC$UCB0		; DEVICE UCB ADDRESS
	.WORD	LPC-LPC$CRB		; SIZE
	.BYTE	DYN$C_CRB		; TYPE IS CRB
	.BYTE	1			; NUMBER OF UNITS
	.LONG	1			; REF COUNT=1 AND NEVER BUSY
	.LONG	0			; NO NEXT CRB
LPC$INTDIS:				;
	PUSHR	#^M<R5,R4,R3>		; ENTRY VECTOR FOR INPUT INTERRUPTS
	JSB	LP$INT			; INPUT INTERRUPT SERVICE
	.LONG	LPC$CRB			; POINTER TO PSEUDO IDB
	.LONG	LP$INITIAL		; INITIALIZE CONTROLLER ENTRY POINT
	.LONG	0			; MAP AND DATA PATH ALLOCATION CONTROL
	.LONG	UBA$ADP0		; ADDRESS OF ADP
LPC:
 
;
; TTE DDB
;
 
TTE$DDB:
	.LONG	TTJ$DDB			; POINTER TO NEXT DDB
	.LONG	TTE$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-TTE$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	TT$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/    /			; NO DEFAULT ACP
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/TTB/			; DEVICE NAME
10$:
 
;
; TTE UNIT 0 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTE$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTE$UCB0		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTE$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTE$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTE$UCB1		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<DC$_TERM>+<TT$_VT52@8>; WIDTH OF CARRIAGE ETC.
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTE UNIT 1 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTE$UCB1:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTE$UCB1		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTE$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTE$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTE$UCB2		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<DC$_TERM>+<TT$_VT52@8>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	1			; UNIT 1
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTE UNIT 2 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTE$UCB2:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTE$UCB2		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTE$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTE$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTE$UCB3		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	2			; UNIT 2
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTE UNIT 3 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTE$UCB3:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTE$UCB3		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTE$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTE$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTE$UCB4		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	3			; UNIT 3
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTE UNIT 4 UCB
;
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
 
TTE$UCB4:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTE$UCB4		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTE$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTE$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTE$UCB5		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	4			; UNIT 4
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTE UNIT 5 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTE$UCB5:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTE$UCB5		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTE$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTE$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTE$UCB6		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	5			; UNIT 5
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTE UNIT 6 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTE$UCB6:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTE$UCB6		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTE$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTE$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTE$UCB7		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	6			; UNIT 6
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTE UNIT 7 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,3			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTE$UCB7:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTE$UCB7		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTE$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTE$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<72@16>+<TT$_VT05@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_LFFILL>-	;
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	7			; UNIT 7
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTE CRB
;
 
TTE$CRB:
	.LONG	0,0			; NULL CHANNEL REQUEST LIST
	.WORD	TTE-TTE$CRB		; SIZE
	.BYTE	DYN$C_CRB		; TYPE IS CRB
	.BYTE	8			; NUMBER OF UNITS
	.LONG	8			; REF COUNT=8 AND NEVER BUSY
	.LONG	0			; NO NEXT CRB
TTE$INTDISI:				;
	PUSHR	#^M<R5,R4,R3,R1,R2>	; ENTRY VECTOR FOR INPUT INTERRUPTS
	JSB	TTZ$INTINP		; INPUT INTERRUPT SERVICE
	.LONG	TTE$IDB			; POINTER TO  IDB
	.LONG	TTZ$INITIAL		; INITIALIZE CONTROLLER ENTRY POINT
	.LONG	0			; MAP AND DATA PATH ALLOCATION CONTROL
	.LONG	UBA$ADP0		; ADDRESS OF ADP
	.LONG	TTZ$INITLINE,TTZ$STARTIO,TTZ$DISCONNECT
TTE$INTDISO:				;
	PUSHR	#^M<R5,R4,R3,R1,R2>	; ENTRY FOR OUTPUT INTERRUPTS
	JSB	TTZ$INTOUT		; OUTPUT INTERRUPT SERVICE
	.LONG	TTE$IDB			; POINTER TO TTA CRB
TTE:
 
;
; TTE IDB
;
 
TTE$IDB::				; DZ-11 IDB
	.LONG	UBA$IOBASE+^O0120	; CSR OF UNIT 760100
	.LONG	0			; OWNER UCB ADDRESS
	.WORD	10$-TTE$IDB		; SIZE
	.BYTE	DYN$C_IDB		; TYPE
	.BYTE	8			; EIGHT UNITS
	.LONG	UBA$ADP0		; POINTER TO THE ADAPTER CONTROL BLOCK
	.LONG	TTE$UCB0		; UCB OF UNIT
	.LONG	TTE$UCB1		;
	.LONG	TTE$UCB2		;
	.LONG	TTE$UCB3		;
	.LONG	TTE$UCB4		;
	.LONG	TTE$UCB5		;
	.LONG	TTE$UCB6		;
	.LONG	TTE$UCB7		;
10$:
;
; TTJ DDB
;
 
TTJ$DDB:
	.LONG	TTK$DDB			; POINTER TO NEXT DDB
	.LONG	TTJ$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-TTJ$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	TT$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/    /			; NO DEFAULT ACP
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/TTC/			; DEVICE NAME
10$:
 
;
; TTJ UNIT 0 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTJ$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTJ$UCB0		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTJ$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTJ$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTJ$UCB1		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<DC$_TERM>+<TT$_VT52@8>; WIDTH OF CARRIAGE ETC.
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTJ UNIT 1 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTJ$UCB1:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTJ$UCB1		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTJ$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTJ$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTJ$UCB2		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<DC$_TERM>+<TT$_VT52@8>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	1			; UNIT 1
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTJ UNIT 2 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTJ$UCB2:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTJ$UCB2		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTJ$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTJ$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTJ$UCB3		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	2			; UNIT 2
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTJ UNIT 3 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTJ$UCB3:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTJ$UCB3		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTJ$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTJ$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTJ$UCB4		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	3			; UNIT 3
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTJ UNIT 4 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTJ$UCB4:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTJ$UCB4		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTJ$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTJ$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTJ$UCB5		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_SCRIPT>-
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	4			; UNIT 4
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTJ UNIT 5 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTJ$UCB5:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTJ$UCB5		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTJ$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTJ$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTJ$UCB6		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_SCRIPT>-
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	5			; UNIT 5
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTJ UNIT 6 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTJ$UCB6:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTJ$UCB6		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTJ$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTJ$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTJ$UCB7		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_SCRIPT>-
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	6			; UNIT 6
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTJ UNIT 7 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTJ$UCB7:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTJ$UCB7		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTJ$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTJ$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_SCRIPT>-
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	7			; UNIT 7
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTJ CRB
;
 
TTJ$CRB:
	.LONG	0,0			; NULL CHANNEL REQUEST LIST
	.WORD	TTJ-TTJ$CRB		; SIZE
	.BYTE	DYN$C_CRB		; TYPE IS CRB
	.BYTE	8			; NUMBER OF UNITS
	.LONG	8			; REF COUNT=8 AND NEVER BUSY
	.LONG	0			; NO NEXT CRB
TTJ$INTDISI:				;
	PUSHR	#^M<R5,R4,R3,R1,R2>	; ENTRY VECTOR FOR INPUT INTERRUPTS
	JSB	TTZ$INTINP		; INPUT INTERRUPT SERVICE
	.LONG	TTJ$IDB			; POINTER TO  IDB
	.LONG	TTZ$INITIAL		; INITIALIZE CONTROLLER ENTRY POINT
	.LONG	0			; MAP AND DATA PATH ALLOCATION CONTROL
	.LONG	UBA$ADP0		; ADDRESS OF ADP
	.LONG	TTZ$INITLINE,TTZ$STARTIO,TTZ$DISCONNECT
TTJ$INTDISO:				;
	PUSHR	#^M<R5,R4,R3,R1,R2>	; ENTRY FOR OUTPUT INTERRUPTS
	JSB	TTZ$INTOUT		; OUTPUT INTERRUPT SERVICE
	.LONG	TTJ$IDB			; POINTER TO TTA CRB
TTJ:
 
;
; TTJ IDB
;
 
TTJ$IDB::				; DZ-11 IDB
	.LONG	UBA$IOBASE+^O0130	; CSR OF UNIT 760130
	.LONG	0			; OWNER UCB ADDRESS
	.WORD	10$-TTJ$IDB		; SIZE
	.BYTE	DYN$C_IDB		; TYPE
	.BYTE	8			; EIGHT UNITS
	.LONG	UBA$ADP0		; POINTER TO THE ADAPTER CONTROL BLOCK
	.LONG	TTJ$UCB0		; UCB OF UNIT
	.LONG	TTJ$UCB1		;
	.LONG	TTJ$UCB2		;
	.LONG	TTJ$UCB3		;
	.LONG	TTJ$UCB4		;
	.LONG	TTJ$UCB5		;
	.LONG	TTJ$UCB6		;
	.LONG	TTJ$UCB7		;
10$:
;
; TTK DDB
;
 
TTK$DDB:
	.LONG	TTL$DDB			; POINTER TO NEXT DDB
	.LONG	TTK$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-TTK$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	TT$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/    /			; NO DEFAULT ACP
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/TTD/			; DEVICE NAME
10$:
 
;
; TTK UNIT 0 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTK$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTK$UCB0		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTK$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTK$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTK$UCB1		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<DC$_TERM>+<TT$_VT52@8>; WIDTH OF CARRIAGE ETC.
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTK UNIT 1 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTK$UCB1:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTK$UCB1		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTK$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTK$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTK$UCB2		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<DC$_TERM>+<TT$_VT52@8>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	1			; UNIT 1
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTK UNIT 2 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTK$UCB2:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTK$UCB2		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTK$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTK$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTK$UCB3		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	2			; UNIT 2
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTK UNIT 3 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTK$UCB3:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTK$UCB3		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTK$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTK$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTK$UCB4		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	3			; UNIT 3
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTK UNIT 4 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTK$UCB4:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTK$UCB4		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTK$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTK$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTK$UCB5		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	4			; UNIT 4
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTK UNIT 5 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTK$UCB5:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTK$UCB5		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTK$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTK$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTK$UCB6		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	5			; UNIT 5
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTK UNIT 6 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTK$UCB6:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTK$UCB6		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTK$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTK$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTK$UCB7		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	6			; UNIT 6
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTK UNIT 7 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTK$UCB7:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTK$UCB7		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTK$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTK$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	7			; UNIT 7
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTK CRB
;
 
TTK$CRB:
	.LONG	0,0			; NULL CHANNEL REQUEST LIST
	.WORD	TTK-TTK$CRB		; SIZE
	.BYTE	DYN$C_CRB		; TYPE IS CRB
	.BYTE	8			; NUMBER OF UNITS
	.LONG	8			; REF COUNT=8 AND NEVER BUSY
	.LONG	0			; NO NEXT CRB
TTK$INTDISI:				;
	PUSHR	#^M<R5,R4,R3,R1,R2>	; ENTRY VECTOR FOR INPUT INTERRUPTS
	JSB	TTZ$INTINP		; INPUT INTERRUPT SERVICE
	.LONG	TTK$IDB			; POINTER TO  IDB
	.LONG	TTZ$INITIAL		; INITIALIZE CONTROLLER ENTRY POINT
	.LONG	0			; MAP AND DATA PATH ALLOCATION CONTROL
	.LONG	UBA$ADP0		; ADDRESS OF ADP
	.LONG	TTZ$INITLINE,TTZ$STARTIO,TTZ$DISCONNECT
TTK$INTDISO:				;
	PUSHR	#^M<R5,R4,R3,R1,R2>	; ENTRY FOR OUTPUT INTERRUPTS
	JSB	TTZ$INTOUT		; OUTPUT INTERRUPT SERVICE
	.LONG	TTK$IDB			; POINTER TO TTA CRB
TTK:
 
;
; TTK IDB
;
 
TTK$IDB::				; DZ-11 IDB
	.LONG	UBA$IOBASE+^O0140	; CSR OF UNIT 760140
	.LONG	0			; OWNER UCB ADDRESS
	.WORD	10$-TTK$IDB		; SIZE
	.BYTE	DYN$C_IDB		; TYPE
	.BYTE	8			; EIGHT UNITS
	.LONG	UBA$ADP0		; POINTER TO THE ADAPTER CONTROL BLOCK
	.LONG	TTK$UCB0		; UCB OF UNIT
	.LONG	TTK$UCB1		;
	.LONG	TTK$UCB2		;
	.LONG	TTK$UCB3		;
	.LONG	TTK$UCB4		;
	.LONG	TTK$UCB5		;
	.LONG	TTK$UCB6		;
	.LONG	TTK$UCB7		;
10$:
 
;
; TTL DDB
;
 
TTL$DDB:
	.LONG	TTG$DDB			; POINTER TO NEXT DDB
	.LONG	TTL$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-TTL$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	TT$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/    /			; NO DEFAULT ACP
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/TTE/			; DEVICE NAME
10$:
 
;
; TTL UNIT 0 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTL$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTL$UCB0		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTL$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTL$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTL$UCB1		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<DC$_TERM>+<TT$_VT52@8>; WIDTH OF CARRIAGE ETC.
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTL UNIT 1 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTL$UCB1:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTL$UCB1		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTL$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTL$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTL$UCB2		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<DC$_TERM>+<TT$_VT52@8>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	1			; UNIT 1
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTL UNIT 2 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTL$UCB2:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTL$UCB2		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTL$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTL$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTL$UCB3		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	2			; UNIT 2
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTL UNIT 3 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTL$UCB3:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTL$UCB3		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTL$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTL$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTL$UCB4		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	3			; UNIT 3
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTL UNIT 4 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTL$UCB4:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTL$UCB4		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTL$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTL$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTL$UCB5		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	4			; UNIT 4
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTL UNIT 5 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTL$UCB5:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTL$UCB5		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTL$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTL$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTL$UCB6		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	5			; UNIT 5
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTL UNIT 6 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTL$UCB6:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTL$UCB6		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTL$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTL$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTL$UCB7		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O PACKET LIST
	.WORD	6			; UNIT 6
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTL UNIT 7 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTL$UCB7:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTL$UCB7		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT
	.LONG	0,0			; AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTL$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTL$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_SCOPE>-		;
		+<TT$M_MECHTAB>-	;
		+<TT$M_LOWER>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 24
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	7			; UNIT 7
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTL CRB
;
 
TTL$CRB:
	.LONG	0,0			; NULL CHANNEL REQUEST LIST
	.WORD	TTL-TTL$CRB		; SIZE
	.BYTE	DYN$C_CRB		; TYPE IS CRB
	.BYTE	8			; NUMBER OF UNITS
	.LONG	8			; REF COUNT=8 AND NEVER BUSY
	.LONG	0			; NO NEXT CRB
TTL$INTDISI:				;
	PUSHR	#^M<R5,R4,R3,R1,R2>	; ENTRY VECTOR FOR INPUT INTERRUPTS
	JSB	TTZ$INTINP		; INPUT INTERRUPT SERVICE
	.LONG	TTL$IDB			; POINTER TO  IDB
	.LONG	TTZ$INITIAL		; INITIALIZE CONTROLLER ENTRY POINT
	.LONG	0			; MAP AND DATA PATH ALLOCATION CONTROL
	.LONG	UBA$ADP0		; ADDRESS OF ADP
	.LONG	TTZ$INITLINE,TTZ$STARTIO,TTZ$DISCONNECT
TTL$INTDISO:				;
	PUSHR	#^M<R5,R4,R3,R1,R2>	; ENTRY FOR OUTPUT INTERRUPTS
	JSB	TTZ$INTOUT		; OUTPUT INTERRUPT SERVICE
	.LONG	TTL$IDB			; POINTER TO TTA CRB
TTL:
 
;
; TTL IDB
;
 
TTL$IDB::				; DZ-11 IDB
	.LONG	UBA$IOBASE+^O0150	; CSR OF UNIT 760150
	.LONG	0			; OWNER UCB ADDRESS
	.WORD	10$-TTL$IDB		; SIZE
	.BYTE	DYN$C_IDB		; TYPE
	.BYTE	8			; EIGHT UNITS
	.LONG	UBA$ADP0		; POINTER TO THE ADAPTER CONTROL BLOCK
	.LONG	TTL$UCB0		; UCB OF UNIT
	.LONG	TTL$UCB1		;
	.LONG	TTL$UCB2		;
	.LONG	TTL$UCB3		;
	.LONG	TTL$UCB4		;
	.LONG	TTL$UCB5		;
	.LONG	TTL$UCB6		;
	.LONG	TTL$UCB7		;
10$:
;
; TTG DDB
;
TTG$DDB:
	.LONG	TTH$DDB			; POINTER TO NEXT DDB
	.LONG	TTG$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-TTG$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	TT$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/    /			; NO DEFAULT ACP
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/TTG/			; DEVICE NAME
10$:
 
;
; TTG UNIT 0 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTG$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTG$UCB0		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT PC
	.LONG	0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTG$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTG$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTG$UCB1		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_SCOPE>-
		+<TT$M_MECHTAB>-
		+<16@24>		; PAGE SIZE OF 16
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTG UNIT 0
;
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTG$UCB1:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTG$UCB1		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT PC
	.LONG	0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTG$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTG$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTG$UCB2		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<TT$M_SCOPE>-		;
		+<16@24>		; PAGE SIZE OF 16
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	1			; UNIT 1
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTG UNIT 2 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTG$UCB2:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTG$UCB2		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT PC
	.LONG	0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTG$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTG$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTG$UCB3		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<TT$M_SCOPE>-		;
		+<16@24>		; PAGE SIZE OF 16
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	2			; UNIT 2
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTG UNIT 3 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTG$UCB3:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTG$UCB3		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT PC
	.LONG	0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTG$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTG$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTG$UCB4		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<TT$M_SCOPE>-		;
		+<16@24>		; PAGE SIZE OF 16
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	3			; UNIT 3
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTG UNIT 4 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTG$UCB4:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTG$UCB4		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT PC
	.LONG	0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTG$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTG$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTG$UCB5		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<TT$M_SCOPE>-		;
		+<16@24>		; PAGE SIZE OF 16
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	4			; UNIT 4
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTG UNIT 5 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTG$UCB5:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTG$UCB5		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT PC
	.LONG	0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTG$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTG$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTG$UCB6		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<TT$M_SCOPE>-		;
		+<16@24>		; PAGE SIZE OF 16
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	5			; UNIT 5
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTG UNIT 6 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTG$UCB6:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTG$UCB6		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT PC
	.LONG	0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTG$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTG$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTG$UCB7		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<TT$M_SCOPE>-		;
		+<16@24>		; PAGE SIZE OF 16
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	6			; UNIT 6
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTG UNIT 7 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_9600		; SPEED
	.LONG	0			;
TTG$UCB7:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTG$UCB7		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT PC
	.LONG	0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTG$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTG$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<TT$M_SCOPE>-		;
		+<16@24>		; PAGE SIZE OF 16
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	7			; UNIT 7
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTG CRB
;
 
TTG$CRB:
	.LONG	0,0			; NULL CHANNEL REQUEST LIST
	.WORD	TTG-TTG$CRB		; SIZE
	.BYTE	DYN$C_CRB		; TYPE IS CRB
	.BYTE	8			; NUMBER OF UNITS
	.LONG	8			; REF COUNT=8 AND NEVER BUSY
	.LONG	0			; NO NEXT CRB
TTG$INTDISI:				;
	PUSHR	#^M<R5,R4,R3,R1,R2>	; ENTRY VECTOR FOR INPUT INTERRUPTS
	JSB	TTZ$INTINP		; INPUT INTERRUPT SERVICE
	.LONG	TTG$IDB			; POINTER TO  IDB
	.LONG	TTZ$INITIAL		; INITIALIZE CONTROLLER ENTRY POINT
	.LONG	0			; MAP AND DATA PATH ALLOCATION CONTROL
	.LONG	UBA$ADP0		; ADDRESS OF ADP
	.LONG	TTZ$INITLINE,TTZ$STARTIO,TTZ$DISCONNECT
TTG$INTDISO:				;
	PUSHR	#^M<R5,R4,R3,R1,R2>	; ENTRY FOR OUTPUT INTERRUPTS
	JSB	TTZ$INTOUT		; OUTPUT INTERRUPT SERVICE
	.LONG	TTG$IDB			; POINTER TO TTA CRB
TTG:
 
;
; TTG IDB
;
 
TTG$IDB::				; DZ-11 IDB
	.LONG	UBA$IOBASE+^O0200	; CSR OF UNIT 760200
	.LONG	0			; OWNER UCB ADDRESS
	.WORD	10$-TTG$IDB		; SIZE
	.BYTE	DYN$C_IDB		; TYPE
	.BYTE	8			; EIGHT UNITS
	.LONG	UBA$ADP0		; POINTER TO THE ADAPTER CONTROL BLOCK
	.LONG	TTG$UCB0		; UCB OF UNIT
	.LONG	TTG$UCB1		;
	.LONG	TTG$UCB2		;
	.LONG	TTG$UCB3		;
	.LONG	TTG$UCB4		;
	.LONG	TTG$UCB5		;
	.LONG	TTG$UCB6		;
	.LONG	TTG$UCB7		;
10$:
;
; TTH DDB
;
TTH$DDB:
	.LONG	XMA$DDB			; POINTER TO NEXT DDB
	.LONG	TTH$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-TTH$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	TT$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/    /			; NO DEFAULT ACP
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/TTH/			; DEVICE NAME
10$:
 
;
; TTH UNIT 0 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTH$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTH$UCB0		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT PC
	.LONG	0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTH$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTH$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTH$UCB1		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_SCOPE>-		;
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<16@24>		; PAGE SIZE OF 16
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTH UNIT 0
;
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTH$UCB1:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTH$UCB1		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT PC
	.LONG	0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTH$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTH$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTH$UCB2		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<TT$M_SCOPE>-		;
		+<16@24>		; PAGE SIZE OF 16
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	1			; UNIT 1
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTH UNIT 2 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTH$UCB2:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTH$UCB2		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT PC
	.LONG	0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTH$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTH$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTH$UCB3		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<TT$M_SCOPE>-		;
		+<16@24>		; PAGE SIZE OF 16
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	2			; UNIT 2
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTH UNIT 3 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTH$UCB3:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTH$UCB3		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT PC
	.LONG	0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTH$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTH$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTH$UCB4		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<TT$M_SCOPE>-		;
		+<16@24>		; PAGE SIZE OF 16
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	3			; UNIT 3
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTH UNIT 4 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTH$UCB4:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTH$UCB4		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT PC
	.LONG	0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTH$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTH$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTH$UCB5		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<TT$M_SCOPE>-		;
		+<16@24>		; PAGE SIZE OF 16
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	4			; UNIT 4
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTH UNIT 5 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTH$UCB5:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTH$UCB5		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT PC
	.LONG	0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTH$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTH$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTH$UCB6		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<TT$M_SCOPE>-		;
		+<16@24>		; PAGE SIZE OF 16
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	5			; UNIT 5
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTH UNIT 6 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_2400		; SPEED
	.LONG	0			;
TTH$UCB6:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTH$UCB6		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT PC
	.LONG	0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTH$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTH$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	TTH$UCB7		; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<80@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_LOWER>-		; TERMINAL CHARACTERISTICS
		+<TT$M_WRAP!TT$M_TTSYNC!TT$M_HOSTSYNC>-
		+<TT$M_MECHTAB>-	;
		+<TT$M_SCOPE>-		;
		+<16@24>		; PAGE SIZE OF 16
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	6			; UNIT 6
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
;
; TTH UNIT 7 UCB
;
 
	.LONG	0,0,0,0,0,0,0,0,0	; TERMINAL DEPENDENT DATA
	.BYTE	0
	.BYTE	0,0			; CR/LF FILL COUNTS
	.BYTE	TT$C_BAUD_4800		; SPEED
	.LONG	0			;
TTH$UCB7:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-TTH$UCB7		; SIZE OF TTY UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; IPL IS 8
	.LONG	TTY$FORK_ADDR		; INITIAL TIMEOUT PC
	.LONG	0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	TTH$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	TTH$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_CCL-		; CARRIAGE
		!DEV$M_TRM-		; TERMINAL
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<256@16>+<TT$_VT52@8>+<DC$_TERM>; WIDTH OF CARRIAGE
	.LONG	<TT$M_PASSALL>-		; TERMINAL CHARACTERISTICS
		+<TT$M_NOECHO>-	;
		+<0@24>			; PAGE SIZE OF 0
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	7			; UNIT 7
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	21			; INTERRUPT LEVEL IS 21
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	^X1FFFFFFF		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; TTH CRB
;
 
TTH$CRB:
	.LONG	0,0			; NULL CHANNEL REQUEST LIST
	.WORD	TTH-TTH$CRB		; SIZE
	.BYTE	DYN$C_CRB		; TYPE IS CRB
	.BYTE	8			; NUMBER OF UNITS
	.LONG	8			; REF COUNT=8 AND NEVER BUSY
	.LONG	0			; NO NEXT CRB
TTH$INTDISI:				;
	PUSHR	#^M<R5,R4,R3,R1,R2>	; ENTRY VECTOR FOR INPUT INTERRUPTS
	JSB	TTZ$INTINP		; INPUT INTERRUPT SERVICE
	.LONG	TTH$IDB			; POINTER TO  IDB
	.LONG	TTZ$INITIAL		; INITIALIZE CONTROLLER ENTRY POINT
	.LONG	0			; MAP AND DATA PATH ALLOCATION CONTROL
	.LONG	UBA$ADP0		; ADDRESS OF ADP
	.LONG	TTZ$INITLINE,TTZ$STARTIO,TTZ$DISCONNECT
TTH$INTDISO:				;
	PUSHR	#^M<R5,R4,R3,R1,R2>	; ENTRY FOR OUTPUT INTERRUPTS
	JSB	TTZ$INTOUT		; OUTPUT INTERRUPT SERVICE
	.LONG	TTH$IDB			; POINTER TO TTA CRB
TTH:
 
;
; TTH IDB
;
 
TTH$IDB::				; DZ-11 IDB
	.LONG	UBA$IOBASE+^O0210	; CSR OF UNIT 760210
	.LONG	0			; OWNER UCB ADDRESS
	.WORD	10$-TTH$IDB		; SIZE
	.BYTE	DYN$C_IDB		; TYPE
	.BYTE	8			; EIGHT UNITS
	.LONG	UBA$ADP0		; POINTER TO THE ADAPTER CONTROL BLOCK
	.LONG	TTH$UCB0		; UCB OF UNIT
	.LONG	TTH$UCB1		;
	.LONG	TTH$UCB2		;
	.LONG	TTH$UCB3		;
	.LONG	TTH$UCB4		;
	.LONG	TTH$UCB5		;
	.LONG	TTH$UCB6		;
	.LONG	TTH$UCB7		;
10$:
;
; XMA DDB
;
 
XMA$DDB:
	.LONG	MB$DDB			; POINTER TO NEXT DDB
	.LONG	XMA$UCB0		; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-XMA$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	XM$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/    /			; NO DEFAULT ACP
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/XMA/			; DEVICE NAME
10$:
 
;
; XMA UCB FOR UNIT 0
;
 
	.LONG	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
XMA$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-XMA$UCB0		; SIZE OF LPA UCB
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	XMA$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	XMA$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_NET-		; NETWORK 
		!DEV$M_IDV!DEV$M_ODV>	; INPUT/OUTPUT
	.LONG	<512@16>+<DC$_SCOM>+<0@8>; SECOND CHARACTERISTICS WORD
	.LONG	0			; CHARACTERISTICS LONG WORD
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	0			; REF COUNT IS 0
	.BYTE	22			; INTERRUPT LEVEL IS 22
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	MMG$C_IOSPTN+5		; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; CRB FOR XMA UNIT 0
;
 
XMA$CRB:
	.LONG	0,0			; CRB WAIT Q
	.WORD	XMA-XMA$CRB		; SIZE
	.BYTE	DYN$C_CRB		; TYPE IS CRB
	.BYTE	1			; NUMBER OF UNITS
	.LONG	1			; REF COUNT=1 AND NEVER BUSY
	.LONG	0			; NO NEXT CRB
XMA$INTDISI:				;
	PUSHR	#^M<R5,R4,R3,R2,R1>	; ENTRY VECTOR FOR INPUT INTERRUPTS
	JSB	XM$CTRLINT		; CONTROL INTERRUPT SERVICE
	.LONG	XMA$IDB			; POINTER TO IDB
	.LONG	XM$INITIAL		; INITIALIZE CONTROLLER ENTRY POINT
	.LONG	0			; MAP AND DATA PATH ALLOCATION CONTROL
	.LONG	UBA$ADP0		; ADDRESS OF ADP
	.LONG	XM$ACPRCV		; ACP DE-QUEUE ENTRY
XMA$INTDISP:				;
	PUSHR	#^M<R5,R4,R3,R2,R1>	; ENTRY VECTOR FOR INPUT INTERRUPTS
	JSB	XM$PORTINT		; PORT READY INTERRUPT SERVICE
	.LONG	XMA$IDB			; POINTER TO IDB
XMA:
 
;
; XMA IDB
;
 
XMA$IDB:				; IDB FOR XMA
	.LONG	0			; CSR FILLED BY INIT
	.LONG	XMA$UCB0		; UCB ADDRESS FOR DRIVER
	.WORD	10$-XMA$IDB		; SIZE
	.BYTE	DYN$C_IDB		; TYPE
	.BYTE	1			; ONE UNIT
	.LONG	UBA$ADP0		; ADAPTER
	.LONG	XMA$UCB0		; UCB
10$:
 
;
; MAILBOX DATA BASE FOR BASE LEVEL 1
;
 
MB$DDB::				; MAILBOX DDB
	.LONG	NL$DDB			; NO NEXT DDB
	.LONG	MB$UCB0			; POINTER TO FIRST UCB
	.WORD	10$-MB$DDB		; BLOCK SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	MB$DDT			; POINTER TO DISPATCH TABLE
	.ASCII	/    /			; DEFAULT ACP
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/MBA/			; DEVICE NAME
10$:					;
 
;
; MB UCB 0
;
 
	.WORD	0			; MAILBOX UNIT NUMBER SEED
	.WORD	0			; SPARE UNUSED WORD
MB$UCB0::				; MAILBOX UCB
	.LONG	MB$UCB0,MB$UCB0		; MESSAGE QUEUE IS EMPTY
	.WORD	30$-MB$UCB0		; BLOCK SIZE
	.BYTE	DYN$C_UCB		; BLOCK TYPE
	.BYTE	IPL$_MAILBOX		; FORK IPL
	.LONG	0,0			; AST LIST HEAD AND SPARE
	.WORD	20			; 20 MESSAGES ALLOWED
	.WORD	0			;  CURRENT COUNT
	.WORD	-1			; LOTS OF BYTES AVAILABLE
	.WORD	0			; PROTECTION MASK IS EVERYONE
	.WORD	1,1			; OWNER UIC
	.LONG	MB$CRB			; POINTER TO CRB
	.LONG	MB$DDB			; BACK POINTER TO DDB
	.LONG	0			; OWNER PID
	.LONG	MB$UCB1			; POINTER TO NEXT UCB
	.LONG	0			; POINTER TO VCB
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_MBX-		; MAILBOX
		!DEV$M_IDV-		; INPUT
		!DEV$M_SHR-		; DEVICE SHARABLE
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<256@16>+<DC$_MAILBOX>; STANDARD BUFFER SIZE
	.LONG	0			;
20$:	.LONG	20$,20$			; I/O PACKET QUEUE
	.WORD	0			; UNIT 0
	.WORD	0			; QUOTA CHARGE
	.LONG	0			; PACKET POINTER
	.WORD	1			; REF COUNT = 1
	.BYTE	IPL$_MAILBOX		; DEVICE IPL
	.BYTE	0			; ACCESS LEVEL FOR ALLOCATION
	.LONG	0			; ASSOC. MAILBOX
	.WORD	UCB$M_ONLINE		; DEVICE INDEPENDENT STATUS
	.WORD	UCB$M_PRMMBX		; PERMANENT MAILBOX
	.WORD	1,1			; CREATOR PID
	.LONG	0			; OPERATIONS COUNT
	.LONG	0			; NO LOGICAL NAME
	.LONG	0			;
	.WORD	0,0			; BYTE OFFSET AND COUNT
30$:
SYS$GL_JOBCTLMB::			; JOB CONTROLLER MAILBOX
MB$UCB1:				; MAILBOX UCB
	.LONG	MB$UCB1,MB$UCB1		; MESSAGE QUEUE IS EMPTY
	.WORD	30$-MB$UCB1		; BLOCK SIZE
	.BYTE	DYN$C_UCB		; BLOCK TYPE
	.BYTE	IPL$_MAILBOX		; FORK IPL
	.LONG	0,0			; AST LIST HEAD AND SPARE
	.WORD	20			; 20 MESSAGES ALLOWED
	.WORD	0			; CURRENT COUNT
	.WORD	-1			; LOTS OF BYTES AVAILABLE
	.WORD	0			; PROTECTION MASK IS EVERYONE
	.WORD	1,1			; OWNER UIC
	.LONG	MB$CRB			; POINTER TO CRB
	.LONG	MB$DDB			; BACK POINTER TO DDB
	.LONG	0,MB$UCB2,0		; PID,NEXT UCB,VCB
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_MBX-		; MAILBOX
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_SHR-		; DEVICE SHARABLE
		>
	.LONG	<256@16>+<DC$_MAILBOX>; STANDARD BUFFER SIZE
	.LONG	0			; 
20$:	.LONG	20$,20$			; I/O PACKET QUEUE
	.WORD	1			; UNIT 1
	.WORD	0			; QUOTA CHARGE
	.LONG	0			; PACKET POINTER
	.WORD	1			; REF COUNT = 1
	.BYTE	IPL$_MAILBOX		; DEVICE IPL
	.BYTE	0			; ACCESS LEVEL FOR ALLOCATION
	.LONG	0			; ASSOC. MAILBOX
	.WORD	UCB$M_ONLINE		; DEVICE INDEPENDENT STATUS
	.WORD	UCB$M_PRMMBX		; PERMANENT MAILBOX
	.WORD	1,1			; CREATOR PID
	.LONG	0			; OPERATIONS COUNT
	.LONG	0			; NO LOGICAL NAME
	.LONG	0			;
	.WORD	0,0			; BYTE OFFSET AND COUNT
30$:					;
;
; OPERATOR MAILBOX
;
SYS$GL_OPRMBX::				;
MB$UCB2:				; MAILBOX UCB
	.LONG	MB$UCB2,MB$UCB2		; MESSAGE QUEUE IS EMPTY
	.WORD	30$-MB$UCB2		; BLOCK SIZE
	.BYTE	DYN$C_UCB		; BLOCK TYPE
	.BYTE	IPL$_MAILBOX		; FORK IPL
	.LONG	0,0			; AST LIST HEAD AND SPARE
	.WORD	20			; 20 MESSAGES ALLOWED
	.WORD	0			;  CURRENT COUNT
	.WORD	-1			; LOTS OF BYTES AVAILABLE
	.WORD	0			; PROTECTION MASK IS EVERYONE
	.WORD	1,1			; OWNER UIC
	.LONG	MB$CRB			; POINTER TO CRB
	.LONG	MB$DDB			; BACK POINTER TO DDB
	.LONG	0			; OWNER PID
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; POINTER TO VCB
	.LONG	<DEV$M_REC-		; RECORD
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_MBX-		; MAILBOX
		!DEV$M_IDV-		; INPUT
		!DEV$M_SHR-		; DEVICE SHARABLE
		!DEV$M_ODV-		; OUTPUT
		>
	.LONG	<256@16>+<DC$_MAILBOX>; STANDARD BUFFER SIZE
	.LONG	0			;
20$:	.LONG	20$,20$			; I/O PACKET QUEUE
	.WORD	2			; UNIT 2
	.WORD	0			; QUOTA CHARGE
	.LONG	0			; PACKET POINTER
	.WORD	1			; REF COUNT = 1
	.BYTE	IPL$_MAILBOX		; DEVICE IPL
	.BYTE	0			; ACCESS LEVEL FOR ALLOCATION
	.LONG	0			; ASSOC. MAILBOX
	.WORD	UCB$M_ONLINE		; DEVICE INDEPENDENT STATUS
	.WORD	UCB$M_PRMMBX		; PERMANENT MAILBOX
	.WORD	1,1			; CREATOR PID
	.LONG	0			; OPERATIONS COUNT
	.LONG	0			; NO LOGICAL NAME
	.LONG	0			;
	.WORD	0,0			; BYTE OFFSET AND COUNT
30$:
;
; MAILBOX CRB
;
 
MB$CRB::
	.LONG	0,0			;
	.WORD	10$-MB$CRB		;
	.BYTE	DYN$C_CRB		; CRB
	.BYTE	3			; NUMBER OF UNITS
	.LONG	3			; REF COUNT IS ONE
	.LONG	0			; NO CRB
	.LONG	0,0			; NO VECTOR
	.LONG	MB$CRB			; POINTER TO IDB (NONE)
	.LONG	0			; NO INITIALIZATION
10$:					;
 
;
; NLA DDB
;
 
NL$DDB:
	.LONG	NET$DDB			; POINTER TO NEXT DDB
	.LONG	NL$UCB0			; POINTER TO FIRST UCB (UNIT 0)
	.WORD	10$-NL$DDB		; SIZE
	.BYTE	DYN$C_DDB		; TYPE IS DDB
	.BYTE	0			; SPARE BYTE
	.LONG	NL$DDT			; POINTER TO DRIVER DISPATCH TABLE
	.ASCII	/    /			; DEFAULT ACP NAME
	.BYTE	3			; 3 CHARACTER NAME
	.ASCII	/NLA/			; DEVICE NAME
10$:
 
;
; NL UCB FOR UNIT 0
;
 
NL$UCB0:
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-NL$UCB0		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	NL$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	NL$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<DEV$M_REC-		; RECORD ORIENTED
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_SHR-		; SHAREABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_MBX-		; MAILBOX (*****TEMP*****)
		>
	.LONG	<256@16>+<DC$_MAILBOX>	; SECOND CHARACTERISTICS WORD
	.BLKL	1			; SPARE UNUSED LONGWORD
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	1			; REF COUNT IS 1
	.BYTE	8			; INTERRUPT LEVEL IS 8
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	0			; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
10$:
 
;
; NULL DEVICE CRB
;
 
NL$CRB:					;
	.LONG	0,0			; CRB WAIT QUEUE
	.WORD	10$-NL$CRB		; SIZE OF CRB
	.BYTE	DYN$C_CRB		; DATA STRUCTURE TYPE
	.BYTE	1			; NUMBER OF UNITS
	.LONG	1			; REF COUNT IS ONE
	.LONG	0			; NO SECONDARY CRB
	.LONG	0,0			; NO VECTOR
	.LONG	NL$CRB			; POINTER TO IDB
	.LONG	0			; NO INITIALIZATION
10$:					;
 
;
; NETWORK DEVICE DATA BLOCK
;
NET$DDB:
	.LONG	0			; FORWARD LINK
	.LONG	NET$UCB0		; POINTER TO 1ST UCB
	.WORD	NETDDBEND-NET$DDB	; SIZE
	.BYTE	DYN$C_DDB		; BLOCK TYPE
	.BYTE	0			; SPARE
	.LONG	NET$DDT			; PTR TO DDT
	.ASCII	/NET /			; DEFAULT ACP NAME
NET$NAME::
	.ASCIC	/NET/			; DEVICE NAME
NETDDBEND:
;
; NET UCB
;
 
	.WORD	0			; NETWORK UNIT NUMBER SEED
	.WORD	0			; SPARE UNUSED WORD
NET$UCB0::
	.LONG	0,0			; FORK QUEUE LIST ENTRY
	.WORD	10$-NET$UCB0		; SIZE
	.BYTE	DYN$C_UCB		; TYPE OF BLOCK IS UCB
	.BYTE	8			; FORK IPL IS 8 
	.LONG	0,0,0			; FORK PC AND CONTEXT REGISTERS
	.BLKW	1			; SPARE UNUSED WORD
	.WORD	0			; VOLUME PROTECTION
	.WORD	1,1			; VOLUME OWNER UIC
	.LONG	NET$CRB			; POINTER TO CHANNEL REQUEST BLOCK
	.LONG	NET$DDB			; DEVICE DATA BLOCK
	.LONG	0			; PID OF OWNER
	.LONG	0			; POINTER TO NEXT UCB
	.LONG	0			; VCB POINTER
	.LONG	<0-			;
		!DEV$M_AVL-		; DEVICE AVAILABLE
		!DEV$M_IDV-		; INPUT
		!DEV$M_ODV-		; OUTPUT
		!DEV$M_NET-		; NETWORK DEVICE
		!DEV$M_MBX-		; PSEUDO-MAILBOX
		>
	.LONG	0			; SECOND CHARACTERISTICS LONGWORD
	.LONG	0			;
1$:	.LONG	1$,1$			; I/O QUEUE LISTHEAD
	.WORD	0			; UNIT 0
	.WORD	0			; CRB MASKS ARE NULL
	.LONG	0			; POINTER TO CURRENT PACKET
	.WORD	1			; REF COUNT IS 1
	.BYTE	0			; INITIAL STATE IS "IDLE"
	.BYTE	0			; ALLOCATED FROM ACCESS 0
	.LONG	0			; ASSOCIATED UCB FOR MAILBOX
	.LONG	1@UCB$V_ONLINE		; STATUS
	.LONG	0			; TIMEOUT TIME
	.LONG	0			; COUNT OF OPERATIONS
	.LONG	0			; SYSTEM VIRTUAL PAGE NUMBER
	.LONG	0			; SYSTEM VIRTUAL ADDRESS OF PTE
	.WORD	0			; BYTE OFFSET IN FIRST PAGE
	.WORD	0			; BYTE COUNT OF TRANSFER
	.WORD	0			;
	.WORD	0			; SPARE WORD
	.LONG	0			; DATA SSB ADDRESS
	.LONG	0			; INT/LS SSB ADDRESS
10$:

;
; NETWORK WINDOW CONTROL BLOCK - SHARED BY ALL UCB'S
;
NET$WCB::
	.LONG	0			; WLFL
	.LONG	0			; WLBL
	.WORD	36			; SIZE
	.BYTE	DYN$C_WCB		; CALL IT A WCB
	.BYTE	0			; ACCESS BITS
	.LONG	0			; ORGUCB
	.LONG	0			; PID
	.LONG	0			; ACON AND NMAP
	.LONG	0			; FCB
	.LONG	0			; RVT
	.LONG	0			; STVBN

;
; NETWORK CRB
;
 
NET$CRB:				;
	.LONG	0,0			; CRB WAIT QUEUE
	.WORD	10$-NET$CRB		; SIZE OF CRB
	.BYTE	DYN$C_CRB		; DATA STRUCTURE TYPE
	.BYTE	1			; NUMBER OF UNITS
	.LONG	1			; REFERENCE COUNT IS ONE
	.LONG	0			; NO SECONDARY CRB
	.LONG	0,0			; NO VECTOR
	.LONG	NET$CRB			; POINTER TO IDB
	.LONG	0			; NO INITIALIZATION
10$:					;
;
; UNIBUS ADAPTER CONTROL BLOCK
;
 
	.LONG	UBA$CONF0		; ADDRESS OF CONFIGURATION TABLE
UBA$ADP0:				;
1$:	.LONG	UBA$CSR			; UBA CONFIGURATION STATUS REGISTER ADDRESS
	.LONG	0			; ADDRESS OF NEXT ADP
	.WORD	UBA-1$			; SIZE IN BYTES
	.BYTE	DYN$C_ADP		; STRUCTURE TYPE
	.BLKB	1			; SPARE BYTE
10$:	.LONG	10$,10$			; DATAPATH WAIT QUEUE LISTHEAD
20$:	.LONG	20$,20$			; MAP REGISTER WAIT QUEUE
	.WORD	^XFFFC			; DATAPATH ALLOCATION BITMAP
	.REPT	4
	.LONG	0			; ALLOCATED MAP REGISTERS
	.ENDR
	.REPT	11
	.LONG	^XFFFFFFFF		; MAP REGISTER ALLOCATION BITMAP
	.ENDR
	.WORD	^X7FFF			; LAST WORD IN MAP REGISTER BITMAP
UBA$INTDIS::				; UBA INTERRUPT TRANSFER VECTOR
	MOVQ	R4,-(SP)		; SAVE REGISTERS
	MOVPSL	-(SP)			; SAVE CURRENT PSL FOR DISPATCH REI
	MOVL	#UBA$CSR,R5		; GET UBA CONFIGURATION REGISTER ADDRESS
	JSB	UBA$INT			; CALL INTERRUPT DISPATCHER
DSPTCH:	CASEW	R4,#0,#<CASEND-CASTAB>/2-1 ; DISPATCH TO APPROPRIATE INTERRUPT ROUTINE
CASTAB:					; REFERENCE TABLE
	.REPT	30
	.WORD	CASEND-CASTAB		; UNEXPECTED INTERRUPT
	.ENDR
	.WORD	LPC$INTDIS-CASTAB	; LINE PRINTER B
	.WORD	CASEND-CASTAB		; UNEXPECTED INTERRUPT
	.WORD	LPB$INTDIS-CASTAB	; LINE PRINTER A
	.WORD	CASEND-CASTAB		; UNEXPECTED INTERRUPT
	.WORD	DMA$INTDIS-CASTAB	; RK611 CONTROLLER
	.WORD	CASEND-CASTAB		; UNEXPECTED INTERRUPT
	.WORD	CASEND-CASTAB		; UNEXPECTED INTERRUPT
	.WORD	CASEND-CASTAB		; UNEXPECTED INTERRUPT
	.WORD	CRA$INTDIS-CASTAB	; CR11 CARD READER
	.REPT	9		
	.WORD	CASEND-CASTAB
	.ENDR
	.WORD	TTE$INTDISI-CASTAB	; DZ INPUT INTERRUPT
	.WORD	TTE$INTDISO-CASTAB	; DZ OUTPUT INTERRUPT
	.WORD	TTE$INTDISI-CASTAB	; DZ INPUT INTERRUPT
	.WORD	TTE$INTDISO-CASTAB	; DZ OUTPUT INTERRUPT
	.WORD	TTE$INTDISI-CASTAB	; DZ INPUT INTERRUPT
	.WORD	TTE$INTDISO-CASTAB	; DZ OUTPUT INTERRUPT
	.WORD	TTJ$INTDISI-CASTAB	; DZ INPUT INTERRUPT
	.WORD	TTJ$INTDISO-CASTAB	; DZ OUTPUT INTERRUPT
	.WORD	TTK$INTDISI-CASTAB	; DZ INPUT INTERRUPT
	.WORD	TTK$INTDISO-CASTAB	; DZ OUTPUT INTERRUPT
	.WORD	TTL$INTDISI-CASTAB	; DZ INPUT INTERRUPT
	.WORD	TTL$INTDISO-CASTAB	; DZ OUTPUT INTERRUPT
	.REPT	4
	.WORD	CASEND-CASTAB
	.ENDR
	.WORD	TTG$INTDISI-CASTAB	; 400(8) VECTOR
	.WORD	TTG$INTDISO-CASTAB
	.WORD	TTH$INTDISI-CASTAB
	.WORD	TTH$INTDISO-CASTAB
CASEND:	JMP	UBA$UNEXPINT	; UNEXPECTED INTERRUPT
 
;
; CONFIGURATION TABLE
;
 
UBA$CONF0:			;
	.LONG	UBA$IOBASE+^O70	; BASE ADDRESS OF DMC11/DZ11 DEVICE REGISTERS
	.LONG	CASTAB		; BASE ADDRESS OF VECTOR CASE TABLE
	.LONG	DMC11_TAB	; ADDRESS OF DMC11 CONFIGURATION TABLE
	.LONG	DZ11_TAB	; ADDRESS OF DZ11 CONFIGURATION TABLE
	.LONG	0
 
;
; DMC11 CONFIGURATION TABLE
;
 
DMC11_TAB:			;
	.LONG	XMA$IDB		; DMC 11 A
	.LONG	XMA$INTDISP	;
	.LONG	XMA$INTDISI	;
	.LONG	0		; END OF DMC11 DATA BASE
 
;
; DZ11 CONFIGURATION TABLE
;
 
DZ11_TAB:			;
	.LONG	TTE$IDB		; ADDRESS TO STORE DEVICE CSR
	.LONG	TTE$INTDISI	; ADDRESS OF INPUT INTERRUPT DISPATCHER
	.LONG	TTE$INTDISO	; ADDRESS OF OUTPUT INTERRUPT DISPATCHER
	.LONG	TTJ$IDB		;
	.LONG	TTJ$INTDISI	;
	.LONG	TTJ$INTDISO	;
	.LONG	TTK$IDB		;
	.LONG	TTK$INTDISI	;
	.LONG	TTK$INTDISO	;
	.LONG	TTL$IDB		;
	.LONG	TTL$INTDISI	;
	.LONG	TTL$INTDISO	;
	.LONG	TTG$IDB		;
	.LONG	TTG$INTDISI	;
	.LONG	TTG$INTDISO	;
	.LONG	TTH$IDB		;
	.LONG	TTH$INTDISI	;
	.LONG	TTH$INTDISO	;
	.LONG	0		; END OF DZ11 TABLE
UBA:				; REF
 
	.END
